pax_global_header00006660000000000000000000000064146407435140014522gustar00rootroot0000000000000052 comment=9d4c4fb9638fb533211037016b6da12fbbcc4bb6 optee_test-4.3.0/000077500000000000000000000000001464074351400137015ustar00rootroot00000000000000optee_test-4.3.0/.github/000077500000000000000000000000001464074351400152415ustar00rootroot00000000000000optee_test-4.3.0/.github/issue_template.md000066400000000000000000000014061464074351400206070ustar00rootroot00000000000000 optee_test-4.3.0/.github/pull_request_template.md000066400000000000000000000015321464074351400222030ustar00rootroot00000000000000 optee_test-4.3.0/.github/workflows/000077500000000000000000000000001464074351400172765ustar00rootroot00000000000000optee_test-4.3.0/.github/workflows/ci.yml000066400000000000000000000021321464074351400204120ustar00rootroot00000000000000name: CI on: [push, pull_request] permissions: contents: read # to fetch code (actions/checkout) jobs: QEMUv8_check: name: make check (QEMUv8) runs-on: ubuntu-latest container: jforissier/optee_os_ci:qemuv8_check2 steps: - name: Remove /__t/* run: rm -rf /__t/* - name: Restore build cache uses: actions/cache@v3 with: path: /github/home/.cache/ccache key: qemuv8_check-cache-${{ github.sha }} restore-keys: | qemuv8_check-cache- - name: Checkout uses: actions/checkout@v3 - shell: bash run: | # make check task set -e -v export LC_ALL=C export BR2_CCACHE_DIR=/github/home/.cache/ccache export FORCE_UNSAFE_CONFIGURE=1 # Prevent Buildroot error when building as root WD=$(pwd) cd .. TOP=$(pwd)/optee_repo_qemu_v8 /root/get_optee_qemuv8.sh ${TOP} mv ${TOP}/optee_test ${TOP}/optee_test_old ln -s ${WD} ${TOP}/optee_test cd ${TOP}/build make -j$(nproc) check optee_test-4.3.0/.github/workflows/stale_issue.yml000066400000000000000000000023731464074351400223460ustar00rootroot00000000000000name: 'Close stale issues and pull requests with no recent activity' on: schedule: - cron: "16 00 * * *" permissions: issues: write pull-requests: write jobs: stale: runs-on: ubuntu-latest steps: - uses: actions/stale@v4.1.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: 'This issue has been marked as a stale issue because it has been open (more than) 30 days with no activity. Remove the stale label or add a comment, otherwise this issue will automatically be closed in 5 days. Note that you can always re-open a closed issue at any time.' stale-pr-message: 'This pull request has been marked as a stale pull request because it has been open (more than) 30 days with no activity. Remove the stale label or add a comment, otherwise this pull request will automatically be closed in 5 days. Note that you can always re-open a closed pull request at any time.' stale-issue-label: Stale stale-pr-label: Stale exempt-issue-labels: bug,enhancement exempt-pr-labels: bug,enhancement days-before-stale: 30 days-before-close: 5 remove-stale-when-updated: true remove-issue-stale-when-updated: true remove-pr-stale-when-updated: true optee_test-4.3.0/.gitignore000066400000000000000000000005371464074351400156760ustar00rootroot00000000000000cscope.* GPATH GRTAGS GSYMS GTAGS tags TAGS out/* ta/GP_* host/xtest/global_platform/ host/xtest/gp_7000.c host/xtest/gp_7500.c host/xtest/gp_8000.c host/xtest/gp_8500.c host/xtest/gp_9000.c host/xtest/adbg_case_declare.h host/xtest/adbg_entry_declare.h package/testsuite/global_platform/api_1.0/TEE* /libs /obj /TEE_Initial_Configuration-Test_Suite* optee_test-4.3.0/Android.mk000066400000000000000000000123701464074351400156150ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) ## include variants like TA_DEV_KIT_DIR ## and OPTEE_BIN INCLUDE_FOR_BUILD_TA := false include $(BUILD_OPTEE_MK) INCLUDE_FOR_BUILD_TA := VERSION = $(shell git describe --always --dirty=-dev 2>/dev/null || echo Unknown) # TA_DEV_KIT_DIR must be set to non-empty value to # avoid the Android build scripts complaining about # includes pointing outside the Android source tree. # This var is expected to be set when OPTEE OS built. # We set the default value to an invalid path. TA_DEV_KIT_DIR ?= ../invalid_include_path -include $(TA_DEV_KIT_DIR)/host_include/conf.mk include $(LOCAL_PATH)/scripts/common.mk ################################################################################ # Build xtest # ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := xtest LOCAL_VENDOR_MODULE := true LOCAL_SHARED_LIBRARIES := libteec TA_DIR ?= /vendor/lib/optee_armtz srcs := regression_1000.c ifeq ($(CFG_GP_SOCKETS),y) srcs += regression_2000.c \ sock_server.c \ rand_stream.c endif srcs += adbg/src/adbg_case.c \ adbg/src/adbg_enum.c \ adbg/src/adbg_expect.c \ adbg/src/adbg_log.c \ adbg/src/adbg_run.c \ adbg/src/security_utils_hex.c \ asym_perf.c \ benchmark_1000.c \ benchmark_2000.c \ clear_storage.c \ regression_4000.c \ regression_4100.c \ regression_5000.c \ regression_6000.c \ regression_8000.c \ regression_8100.c \ hash_perf.c \ stats.c \ symm_cipher_perf.c \ xtest_helpers.c \ xtest_main.c \ xtest_test.c \ xtest_uuid_helpers.c ifeq ($(CFG_SECURE_PARTITION)-$(CFG_SPMC_TESTS),y-y) srcs += ffa_spmc_1000.c endif ifeq ($(CFG_SECSTOR_TA_MGMT_PTA),y) srcs += install_ta.c endif ifeq ($(CFG_SECURE_DATA_PATH),y) srcs += sdp_basic.c endif ifeq ($(CFG_PKCS11_TA),y) srcs += pkcs11_1000.c LOCAL_CFLAGS += -DCFG_PKCS11_TA LOCAL_SHARED_LIBRARIES += libckteec endif define my-embed-file $(TARGET_OUT_HEADERS)/$(1).h: $(LOCAL_PATH)/$(2) @echo ' GEN $$@' @$(PYTHON3) $(LOCAL_PATH)/scripts/file_to_c.py --inf $$< --out $$@ --name $(1) LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_HEADERS)/$(1).h endef $(eval $(call my-embed-file,regression_8100_ca_crt,cert/ca.crt)) $(eval $(call my-embed-file,regression_8100_mid_crt,cert/mid.crt)) $(eval $(call my-embed-file,regression_8100_my_crt,cert/my.crt)) $(eval $(call my-embed-file,regression_8100_my_csr,cert/my.csr)) LOCAL_SRC_FILES := $(patsubst %,host/xtest/%,$(srcs)) LOCAL_C_INCLUDES += $(LOCAL_PATH)/host/xtest \ $(LOCAL_PATH)/host/xtest/adbg/include \ $(LOCAL_PATH)/ta/include \ $(LOCAL_PATH)/ta/supp_plugin/include \ $(LOCAL_PATH)/ta/create_fail_test/include \ $(LOCAL_PATH)/ta/crypt/include \ $(LOCAL_PATH)/ta/enc_fs/include \ $(LOCAL_PATH)/ta/os_test/include \ $(LOCAL_PATH)/ta/rpc_test/include \ $(LOCAL_PATH)/ta/sims/include \ $(LOCAL_PATH)/ta/miss/include \ $(LOCAL_PATH)/ta/sims_keepalive/include \ $(LOCAL_PATH)/ta/storage_benchmark/include \ $(LOCAL_PATH)/ta/concurrent/include \ $(LOCAL_PATH)/ta/concurrent_large/include \ $(LOCAL_PATH)/ta/crypto_perf/include \ $(LOCAL_PATH)/ta/socket/include \ $(LOCAL_PATH)/ta/sdp_basic/include \ $(LOCAL_PATH)/ta/tpm_log_test/include \ $(LOCAL_PATH)/ta/large/include \ $(LOCAL_PATH)/ta/bti_test/include \ $(LOCAL_PATH)/ta/subkey1/include \ $(LOCAL_PATH)/ta/subkey2/include \ $(LOCAL_PATH)/host/supp_plugin/include # Include configuration file generated by OP-TEE OS (CFG_* macros) LOCAL_CFLAGS += -I $(TA_DEV_KIT_DIR)/host_include -include conf.h LOCAL_CFLAGS += -pthread LOCAL_CFLAGS += -g3 LOCAL_CFLAGS += -Wno-missing-field-initializers -Wno-format-zero-length ifneq ($(TA_DIR),) LOCAL_CFLAGS += -DTA_DIR=\"$(TA_DIR)\" endif ## $(OPTEE_BIN) is the path of tee.bin like ## out/target/product/hikey/optee/arm-plat-hikey/core/tee.bin ## it will be generated after build the optee_os with target BUILD_OPTEE_OS ## which is defined in the common ta build mk file included before, LOCAL_ADDITIONAL_DEPENDENCIES += $(OPTEE_BIN) include $(BUILD_EXECUTABLE) ################################################################################ # Build tee-supplicant test plugin # ################################################################################ include $(CLEAR_VARS) PLUGIN_UUID = f07bfc66-958c-4a15-99c0-260e4e7375dd PLUGIN = $(PLUGIN_UUID).plugin PLUGIN_INCLUDES_DIR = $(LOCAL_PATH)/host/supp_plugin/include LOCAL_MODULE := $(PLUGIN) LOCAL_MODULE_RELATIVE_PATH := tee-supplicant/plugins LOCAL_VENDOR_MODULE := true # below is needed to locate optee_client exported headers LOCAL_SHARED_LIBRARIES := libteec LOCAL_SRC_FILES += host/supp_plugin/test_supp_plugin.c LOCAL_C_INCLUDES += $(PLUGIN_INCLUDES_DIR) LOCAL_CFLAGS += -Wno-unused-parameter $(info $$LOCAL_SRC_FILES = ${LOCAL_SRC_FILES}) LOCAL_MODULE_TAGS := optional # Build the 32-bit and 64-bit versions. LOCAL_MULTILIB := both LOCAL_MODULE_TARGET_ARCH := arm arm64 include $(BUILD_SHARED_LIBRARY) ################################################################################ # Build TAs # ################################################################################ include $(LOCAL_PATH)/ta/Android.mk optee_test-4.3.0/CMakeLists.txt000066400000000000000000000022531464074351400164430ustar00rootroot00000000000000cmake_minimum_required (VERSION 3.4) project (optee_test C) # Default cross compile settings set (CMAKE_TOOLCHAIN_FILE CMakeToolchain.txt) set (OPTEE_TEST_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}) ################################################################################ # Compiler flags: # We want to use the same flags in the entire optee_client git ################################################################################ add_compile_options ( -Wall -Wbad-function-cast -Wcast-align -Werror-implicit-function-declaration -Wextra -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wshadow -Wstrict-prototypes -Wswitch-default -Wunsafe-loop-optimizations -Wwrite-strings -Werror -fPIC -Wno-missing-field-initializers -Wno-unused-parameter ) find_program(CCACHE_FOUND ccache) if(CCACHE_FOUND) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) endif(CCACHE_FOUND) add_subdirectory (ta) add_subdirectory (host/xtest) add_subdirectory (host/supp_plugin) optee_test-4.3.0/CMakeToolchain.txt000066400000000000000000000001001464074351400172520ustar00rootroot00000000000000set (CMAKE_SYSTEM_NAME Linux) set (CMAKE_SYSTEM_PROCESSOR arm) optee_test-4.3.0/LICENSE-BSD000066400000000000000000000023241464074351400153150ustar00rootroot00000000000000Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. 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. 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 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. optee_test-4.3.0/LICENSE-GPL000066400000000000000000000347351464074351400153420ustar00rootroot00000000000000GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. optee_test-4.3.0/LICENSE.md000066400000000000000000000003031464074351400153010ustar00rootroot00000000000000The client applications (`optee_test/host/*`) are provided under the [GPL-2.0](LICENSE-GPL) license. The user TAs (`optee_test/ta/*`) are provided under the [BSD 2-Clause](LICENSE-BSD) license. optee_test-4.3.0/Makefile000066400000000000000000000045621464074351400153500ustar00rootroot00000000000000ifeq ($O,) out-dir := $(CURDIR)/out else include scripts/common.mk out-dir := $(call strip-trailing-slashes-and-dots,$(O)) ifeq ($(out-dir),) $(error invalid output directory (O=$(O))) endif endif bindir ?= /bin libdir ?= /lib -include $(TA_DEV_KIT_DIR)/host_include/conf.mk -include $(OPTEE_CLIENT_EXPORT)/include/optee_client_config.mk ifneq ($V,1) q := @ echo := @echo else q := echo := @: endif # export 'q', used by sub-makefiles. export q # If _HOST or _TA specific compilers are not specified, then use CROSS_COMPILE CROSS_COMPILE_HOST ?= $(CROSS_COMPILE) CROSS_COMPILE_TA ?= $(CROSS_COMPILE) .PHONY: all ifneq ($(wildcard $(TA_DEV_KIT_DIR)/host_include/conf.mk),) all: xtest ta test_plugin else all: $(q)echo "TA_DEV_KIT_DIR is not correctly defined" && false endif .PHONY: xtest xtest: $(q)$(MAKE) -C host/xtest CROSS_COMPILE="$(CROSS_COMPILE_HOST)" \ --no-builtin-variables \ O=$(out-dir) \ $@ .PHONY: ta ta: $(q)$(MAKE) -C ta CROSS_COMPILE="$(CROSS_COMPILE_TA)" \ O=$(out-dir) \ $@ .PHONY: test_plugin test_plugin: $(q)$(MAKE) -C host/supp_plugin CROSS_COMPILE="$(CROSS_COMPILE_HOST)" \ --no-builtin-variables \ O=$(out-dir) .PHONY: clean ifneq ($(wildcard $(TA_DEV_KIT_DIR)/host_include/conf.mk),) clean: $(q)$(MAKE) -C host/xtest O=$(out-dir) $@ $(q)$(MAKE) -C ta O=$(out-dir) $@ $(q)$(MAKE) -C host/supp_plugin O=$(out-dir) $@ else clean: $(q)echo "TA_DEV_KIT_DIR is not correctly defined" $(q)echo "You can remove manually $(out-dir)" endif .PHONY: checkpatch checkpatch-staging checkpatch-working checkpatch: checkpatch-staging checkpatch-working checkpatch-working: @./scripts/checkpatch.sh checkpatch-staging: @./scripts/checkpatch.sh --cached install: $(echo) ' INSTALL ${DESTDIR}${libdir}/optee_armtz' $(q)mkdir -p ${DESTDIR}${libdir}/optee_armtz $(q)find $(out-dir) -name \*.ta -exec cp {} ${DESTDIR}${libdir}/optee_armtz \; $(echo) ' INSTALL ${DESTDIR}${bindir}' $(q)mkdir -p ${DESTDIR}${bindir} $(q)cp $(out-dir)/xtest/xtest ${DESTDIR}${bindir} $(echo) ' INSTALL ${DESTDIR}/$(CFG_TEE_PLUGIN_LOAD_PATH)' $(q)mkdir -p ${DESTDIR}/$(CFG_TEE_PLUGIN_LOAD_PATH) $(q)cp $(out-dir)/supp_plugin/*.plugin ${DESTDIR}/$(CFG_TEE_PLUGIN_LOAD_PATH) .PHONY: cscope cscope: $(echo) ' CSCOPE .' ${q}rm -f cscope.* ${q}find $(PWD) -name "*.[ch]" -o -name "*.cpp" | grep -v /package/ > cscope.files ${q}cscope -b -q -k optee_test-4.3.0/README.md000066400000000000000000000006031464074351400151570ustar00rootroot00000000000000# OP-TEE sanity testsuite This git contains source code for the test suite (xtest) used to test the OP-TEE project. All official OP-TEE documentation has moved to http://optee.readthedocs.io. The information that used to be here in this git can be found under [optee_test]. // OP-TEE core maintainers [optee_test]: https://optee.readthedocs.io/en/latest/building/gits/optee_test.html optee_test-4.3.0/cert/000077500000000000000000000000001464074351400146365ustar00rootroot00000000000000optee_test-4.3.0/cert/README.txt000066400000000000000000000011551464074351400163360ustar00rootroot00000000000000This is a Test Ceritificate Authority, only to be used for testing. #Root private key openssl genrsa -out ca.key 2048 #Root certificate openssl req -new -x509 -key ca.key -out ca.crt -days 10000 -batch #Mid CSR and key openssl req -new -out mid.csr -config mid.conf #Sign mid.crt openssl x509 -req -in mid.csr -extfile mid.ext -CA ca.crt -CAkey ca.key -CAcreateserial -out mid.crt -days 10000 #My CSR and key openssl req -new -out my.csr -config my.conf # View it with: openssl req -in my.csr -noout -text #Sign my.crt openssl x509 -req -in my.csr -CA mid.crt -CAkey mid.key -CAcreateserial -out my.crt -days 10000 optee_test-4.3.0/cert/ca.crt000066400000000000000000000023151464074351400157340ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJAL1dyL/W0KDOMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQwHhcNMTgwNDI2MDk0NjEwWhcNNDUwOTExMDk0NjEwWjBF MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAlqY3pRejG//K79bY3v4sqSdHU2q1ir8mVBZDiZu5l+qGqmaxvgpSsKVL 5kxrXUcpL8oeMjsEkt8YxxL7w/XGA65/UPJe9Jn5/0fPQ7HD+S33/8oEO+hOa1pi speqY2YWvdSsX/wuDaz6r9PXkrjftz9+cY/J9HGGXhmrez2tDKjiUyx7vwqirln1 WcEiizucca2sgivm7032U6Tkmchk5YlU0Zd0kugV417zGCEY8H393ASV0oFyKbAR A18m7iTSSMUnjWcLdp5UT6RM1O11xXHxPxT3hTMwBnq6W56feWO7BfVoYhNk8S8V QRPq2T6PlEUDRs0UIhaKYCmYwLEv5QIDAQABo1AwTjAdBgNVHQ4EFgQUud0GJjG0 tEs58qZXUQv33SJuSmswHwYDVR0jBBgwFoAUud0GJjG0tEs58qZXUQv33SJuSmsw DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAQ6r7zfKQIKIwyl3i/KTM APxRoqsJqnBfuBuE4VwFaRTSoqe14hw6HXxcRuKexiaDuSniTirAxdMKYGZgfXyH lClntTJ4+ak33CGOniU0HFZd79Hct0/DDrzQ/yEr4zvCv6wbQ8EjHOycFT14/Edv sgVmf4erjnSN/ntC0R0VpDmy4eRuvNk0y3lvXwm9kW6RQftvIJsckJFvxrUvdIoP KWK/og407DXX7xb2JqF6Eb8IvA2xAFZxOcztFTweRKHxk9vXRIVIe7/JufLtw0bx +VCurEZ9FjNiIde1LdU3dpFBuAAlqiLbbSc2TVjBAYn9LFQGbsCoZ7PXDWBJnS9c 9g== -----END CERTIFICATE----- optee_test-4.3.0/cert/ca.key000066400000000000000000000032131464074351400157320ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAlqY3pRejG//K79bY3v4sqSdHU2q1ir8mVBZDiZu5l+qGqmax vgpSsKVL5kxrXUcpL8oeMjsEkt8YxxL7w/XGA65/UPJe9Jn5/0fPQ7HD+S33/8oE O+hOa1pispeqY2YWvdSsX/wuDaz6r9PXkrjftz9+cY/J9HGGXhmrez2tDKjiUyx7 vwqirln1WcEiizucca2sgivm7032U6Tkmchk5YlU0Zd0kugV417zGCEY8H393ASV 0oFyKbARA18m7iTSSMUnjWcLdp5UT6RM1O11xXHxPxT3hTMwBnq6W56feWO7BfVo YhNk8S8VQRPq2T6PlEUDRs0UIhaKYCmYwLEv5QIDAQABAoIBADMnshF/W0WwsEqM 3Ausp6Gw0smCnK7Ghc9b2AcsN/NcEepfANAVVUridkl3faWo+lVd/q7z13PACfvf eFpsZJbvdBAanR/WAUwsKDdGb9N3RpU3FgT5t1dA0+7tDVC/Y82GIBpf2YuPR3jZ KISL/nuNNfR97QfyXLwrX01z/gUj9n95ish54jfsaD/JWN8xrDRgEQABlyEF+hBA y9gZgIB4FrF5Lvqy0xejVhHBGjSJH3Owq9QbScWeOiEyYkq0TYqHCDCMD0lnwIbg 4YkOzYhAOa60UAqQB4Pk+4WN9wlWMMW2elfPwNN6+bdRwTtB4cjSBvGjnUwzMl7I SNuF1+kCgYEAyKh2KeTDyoKgB4YOiRKj1nIMqjLsRM5pLwJDxI/ig+qE9Q+xYvXz VZkMJKGX+TxFC2aFq5JMKHML/uKp8PnNpvD1YcNYn2ldN4OBW83SR5OUDtY+Z5D1 YiKHZKIWwm7CCn6t4QzEO77TxZ/eWZpMW5+t4Dl6uGgLrt6heJIzShMCgYEAwDLe JF4NwXzvJHdxnq/82bzzhQj6ZFMJUwmQeP8vJkc7mclO8/VUHjMyRx9q0u73oU23 DtK6P1OqFBztxKHIwKZIQKbr77RdsCaPqxY9ry74ezwojRFvxlhQkPwegdOPviZW C6TMMno1y7QgjjhmNzzEDKuDGX3N2+ucJWIoXScCgYBRfdk/emDpxdMoOxF8Kc3Q MdFi7ft2lj2xkcHj+muMF5qXzB/GiQyiHt4HonkOB6Qi1ShEXc4AP3kHsxZBf7I9 sm51ndhIJYpuGUJX/mcAGrduryP4+64shMln3UxQ+ppjmL8VPxITEZUAFcU/rqKE M31yKuXkLp1QD6qURQv/cQKBgGeBfXycYlAXVjqPUNMi98rTJVo50Y8B4P2lIvbm hp/YsNJLRYfAUQLKk4MV+lOKejWWQsVq2v6LsgaO5cWFUzXc1wBqZJl8yw+4VJrQ qXuUkiDb7wK5pzZsDUdnX46PPtQqlSBEKevtQNdpNDcjTHjm8rXYEAxEYf7Tzg2b 5Rz1AoGAOe1uQ83F/vDik+6Pl/U14HaqVoMvtfgxKtvWxOjyVLMIyutqayLXSxxk tvwtzfqD218g3OGVdneVTGVHFPMQNgaqFuFUpk0SVNh1xVu1LTbU3QMO/rZjrxMM Y2Qyft5Z0HQtEHpsl1GUGYU4YDHTBxwk3gTqMJXEFD6KZCW/rDk= -----END RSA PRIVATE KEY----- optee_test-4.3.0/cert/ca.srl000066400000000000000000000000211464074351400157340ustar00rootroot00000000000000B7C435A31BDC8BEF optee_test-4.3.0/cert/mid.conf000066400000000000000000000004741464074351400162630ustar00rootroot00000000000000[ req ] default_bits = 2048 default_keyfile = mid.key encrypt_key = no prompt = no distinguished_name = my_req_distinguished_name req_extensions = my_extensions [ my_req_distinguished_name ] C = AU ST = Some-State O = Be Bop - Originalaskkopp [ my_extensions ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash optee_test-4.3.0/cert/mid.crt000066400000000000000000000021671464074351400161270ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDIDCCAgigAwIBAgIJALfENaMb3IvvMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQwHhcNMTgwNDI2MTUyNTU2WhcNNDUwOTExMTUyNTU2WjBF MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYQmUg Qm9wIC0gT3JpZ2luYWxhc2trb3BwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEA3ZRPpDGU2iZuvv2v6KECPvP0F5y3g6EH+F/uqdYHS9tyCBPzW3hOIQPg azYFO7JYqglaMxoiTaFrjPVpT72gAi+HGkiuh7hPZFVjx10LoVwJ8CwR78WXXQiZ 9rz9glnZycORHGgKoHun4yEDchtO1H1N6zdZWHEE6O4fFOq6mtgNCQzwxHpQERv+ QCyzWnBEWFRJXGQx7wTGvoKwyCvsrREMxYvw8+LnJ5zM7MX8LAVeQ+9U3w17OjRa QC69dAQ85cu+kv9z6ubN5NG298qT5mwkcSZzoZb6mfx3cJj1ubnQk2DvLSynG6sD gevoK7hsKuvwMK6WxTCrzHzkMmA7OwIDAQABoxMwETAPBgNVHRMECDAGAQH/AgEB MA0GCSqGSIb3DQEBCwUAA4IBAQAWMx659Yh7GQQZ4blR0YMr3JYtSRHu9bY2EfRr sX9NvXXRBBsrtlUoWJhDwJIsTlLVQDRDdTQxWjNGgnHfR0UMgym2h/mOsNVuqxU+ 6D8q5KiCSxemEwx/6DVjbCwt8vgh7Ygr1Nzbl7c9qVbm0WBTFW6hjeF5ceQo7+2+ VbSQV0Iql/m4fWoPBYhjU+Z47xnRQ1PtS/ohaV/9TD2uRJC+IW1zU25rj1w1whdY SeMZRODod0KmIEfnpVN24eofJNhD1GyG+sWYyT6xBx29ZBIQT3g25uekVbTv0UmJ RBk/5shpQVDWKNxZRhOdZOEu1M7Za94lp61yPIdbWXIQp0DG -----END CERTIFICATE----- optee_test-4.3.0/cert/mid.csr000066400000000000000000000020211464074351400161130ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIICyDCCAbACAQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx ITAfBgNVBAoMGEJlIEJvcCAtIE9yaWdpbmFsYXNra29wcDCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAN2UT6QxlNombr79r+ihAj7z9Bect4OhB/hf7qnW B0vbcggT81t4TiED4Gs2BTuyWKoJWjMaIk2ha4z1aU+9oAIvhxpIroe4T2RVY8dd C6FcCfAsEe/Fl10Imfa8/YJZ2cnDkRxoCqB7p+MhA3IbTtR9Tes3WVhxBOjuHxTq uprYDQkM8MR6UBEb/kAss1pwRFhUSVxkMe8Exr6CsMgr7K0RDMWL8PPi5yeczOzF /CwFXkPvVN8Nezo0WkAuvXQEPOXLvpL/c+rmzeTRtvfKk+ZsJHEmc6GW+pn8d3CY 9bm50JNg7y0spxurA4Hr6Cu4bCrr8DCulsUwq8x85DJgOzsCAwEAAaA+MDwGCSqG SIb3DQEJDjEvMC0wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUV/lNw8OrCMD7qd39 f/248O6+80wwDQYJKoZIhvcNAQELBQADggEBAMn9sUKGKz7CdZPKeLdiUm60mIs4 IIwjdLYrlRGzRh06B9WRIIFYHNPGDaK5KUMdyMYeqoSHYi6MlHE/d9VxGms4YNGz gpGEN3MmaOqObSJEy+MSf1yjp1ydfGTDjGxzBaSca442+mXblp+fIoUHmfiIHdD8 skR0fhdN5BkLU55XdbFAIuVTdTpIg0W1ItoIQ2HM62C1ktDprdqsdnzZysw/JkLb EMqmu8zft9yK7rfJZzdrIjVx3ogF1SvKtzqm5+o/a9eDTgTmySysf/GzZ1muZ3af JBwgAibknLxkZVP1S3rlgN9CTyu46O4BSU/WxLeItgqyKpM1KtoV95hCEOA= -----END CERTIFICATE REQUEST----- optee_test-4.3.0/cert/mid.ext000066400000000000000000000000431464074351400161260ustar00rootroot00000000000000basicConstraints=CA:TRUE,pathlen:1 optee_test-4.3.0/cert/mid.key000066400000000000000000000032501464074351400161210ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDdlE+kMZTaJm6+ /a/ooQI+8/QXnLeDoQf4X+6p1gdL23IIE/NbeE4hA+BrNgU7sliqCVozGiJNoWuM 9WlPvaACL4caSK6HuE9kVWPHXQuhXAnwLBHvxZddCJn2vP2CWdnJw5EcaAqge6fj IQNyG07UfU3rN1lYcQTo7h8U6rqa2A0JDPDEelARG/5ALLNacERYVElcZDHvBMa+ grDIK+ytEQzFi/Dz4ucnnMzsxfwsBV5D71TfDXs6NFpALr10BDzly76S/3Pq5s3k 0bb3ypPmbCRxJnOhlvqZ/HdwmPW5udCTYO8tLKcbqwOB6+gruGwq6/AwrpbFMKvM fOQyYDs7AgMBAAECggEAMGN7IPhS8XEDLmJoT/0ZaHYOEDoBOZWpD+yjSiObZE2A EZOJyaf0J/GYyND7Q5YnFrsEH7TNWPavbhEJ9ogKsW9/qZXFx43QiLC9IYSITayz 3udA44PbEk4WkXOkSRsmHJHA1ttBttpKR6emAP1FsdHLelqUAGRuFhAqaX75UWcF KQ0aK+KBPkr3CGTZXQH/4Bt7KWL0iFfch8f4CAzLu2T20fWPyHW8zSFYVIq7972P PXcs4tijXpTCazcjzEWZlhXvihOy+Ho7Dbg1DdnkeTYZyAf8ELkGfYJ9WCGiZTcw 5SgkLSpuyVUeoZ2xNN0F6m5y/SvEPVw711EAhRZogQKBgQDxbF+7ie1QDL0WIPYG Ce0a5ajjgWsVMS9aXH12D4BiSfhaAhP5dr0oN23dmcGhAL9dEmXDGIgr13WXn8M7 sXZrJhMUMCfD3h+tfWeYi62xvmVR+QnSh5/YicNOWnfCAa1hz/exlpJGQ5xF/Rn6 r39eSlsuZ1ibXSlll5RcSftcKQKBgQDq9TaF6ufGVbesrT06X+gZ0A03sO+0ghVx im+yWZFJRlJTn522ju+Pqj4BZGuFDVbD5N2rEULx9SF6pkJQC119r2q4aMtvJwO8 hfqYzgKDFaoKvVbL3+uOae1pSjwzvVCUmy6wr6t6rVhK68W2xs7TpYgTACoGsNst 0RVStcHIwwKBgCCSaJAa2cO1FEXKCKdj63N3jMO1EEd5rVPZqqulB8M7C6DJKvy7 QmYMpGwDdJZOTYM3GjeqNaUEmr7sNSD2nm1yY5yTqqnIbCmyA6oXHkYe0/itSt/2 oGBMpecKWaH5K/VIY7i4AeAs+waOUVT7HIoSKh8mnlPHy/AC9WdGK/2RAoGAe+4r fCeTaUH9R8945DmCK1taHW3ugb+7n8/tap1jzMqS0hj3DzwFkDmzyvg03lFS2rD1 Wy4XqZgquI7Jm37jKVBFck+UPmTNy7q/m6nOGWZr8o48If1SOiQVXdwSNRg+UKQp 1HhUcrjMQXhrKSVkIq7FP4BuqmjOszP9k0rblBECgYBxaoIrBQpTrbSjB5s7SI7e 5h/n6pk+MSXXPvGtWHxab+yYZYh8iIA22rtMCIU8kuld5s81cXofKPQgzqPJBmS5 nLLx6P5PbgwCJI+QZnXmh79l/xqePnvslzr2sG6PTjKI5v5BuvRrqrS1fqTl00uf hZ3KOU3lh3TgsgdcYkERCw== -----END PRIVATE KEY----- optee_test-4.3.0/cert/mid.srl000066400000000000000000000000211464074351400161220ustar00rootroot00000000000000F16A44AAA2D04980 optee_test-4.3.0/cert/my.conf000066400000000000000000000004251464074351400161330ustar00rootroot00000000000000[ req ] default_bits = 2048 default_keyfile = my.key encrypt_key = no prompt = no distinguished_name = my_req_distinguished_name req_extensions = my_extensions [ my_req_distinguished_name ] C = AU ST = Some-State O = Testing testers [ my_extensions ] basicConstraints=CA:FALSE optee_test-4.3.0/cert/my.crt000066400000000000000000000021131464074351400157720ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIC/TCCAeUCCQDxakSqotBJgDANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJB VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYQmUgQm9wIC0gT3JpZ2lu YWxhc2trb3BwMB4XDTE4MDQyNjE1MjYwOVoXDTQ1MDkxMTE1MjYwOVowPDELMAkG A1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxGDAWBgNVBAoMD1Rlc3Rpbmcg dGVzdGVyczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOeglExQo4UC OjWo5B4hNdW4a5eClziHPku5xMFaKWtCwI/zURjk3Di2jcUP7T60Gc9E+yHkaV+E /O33s5qaNNrG055WhidJl4/Rvs4EF7ka3W44m0J0EACxgfWa11UWD5o+942V1Plc Iwj1k+owkuiZfpSFxVjTB8ZE6U9qB+9rX+/ET7wTBOVbLHNfzw954ymENUPKUFwh eUSntso+WbOWQJxElfElAh5z55WjdiwPSaV2q2lnW1Pa3yin2cbl3PvKIAkAhegB IHTU05DfJiIRNsetCoVygNNZZMk7SG53hwFmKJg9+l3uxa7syeDVmOi+sM7tpwWD eFRxdc28C+0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAOoNJWFFveTCbvqSGGC77 WVve09qOVwcXJ6AxeWFIdfBsBW1sYqlN3ZOh7jYQwHbXIbxLNYWCWVgujHTzodvv LJInvnDDjMZUZScR5/g/PiWe/8u7W2nL0PvAJeP5HXg3SxR0OIpDLBjnc6HY8oej XvuiLEgvmtjiiSdXoD8WUExe6uBqTNQl/NH5uqJzTuQUYFZihtgdGAfiB7uXHgWi OS67rHGfewn+So2IYpY0O8iDFc1s/p3En8uEBkpJVwWmb++xaeYZwpASupzMZXWV ONzOjg/T18NRTV9OozphyRLjwotWTACMbtkrWNyZ5YJDrGW0gzo8nrpck2VoRBPV kg== -----END CERTIFICATE----- optee_test-4.3.0/cert/my.csr000066400000000000000000000017311464074351400157760ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIICnTCCAYUCAQAwPDELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx GDAWBgNVBAoMD1Rlc3RpbmcgdGVzdGVyczCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAOeglExQo4UCOjWo5B4hNdW4a5eClziHPku5xMFaKWtCwI/zURjk 3Di2jcUP7T60Gc9E+yHkaV+E/O33s5qaNNrG055WhidJl4/Rvs4EF7ka3W44m0J0 EACxgfWa11UWD5o+942V1PlcIwj1k+owkuiZfpSFxVjTB8ZE6U9qB+9rX+/ET7wT BOVbLHNfzw954ymENUPKUFwheUSntso+WbOWQJxElfElAh5z55WjdiwPSaV2q2ln W1Pa3yin2cbl3PvKIAkAhegBIHTU05DfJiIRNsetCoVygNNZZMk7SG53hwFmKJg9 +l3uxa7syeDVmOi+sM7tpwWDeFRxdc28C+0CAwEAAaAcMBoGCSqGSIb3DQEJDjEN MAswCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAF5MmqF7qiRrPjywYvFxs QOAB4aJFAuk/8BMS9TskRaCmDfMLjoWZ1sjy2zRkyanPE5+4LwHpUBUfGnaLWa8q wXGj+5ImWxgcjRHIvH54IyYodnKnJaHA7GzghrsGd3Jck+xhBWmx5tVQmLvjkNvI cHY7lpJqbXYb+2awiYG56GvYi7ytO7HLKHbpL8qW8bBEnARVkYU9zt1x6Zgpzd2p IDuMbPl0JlpXejRJJM+cRQrEOrebnJ+tYnxi3Y+MJwWn7UmiLXRoW47ZOh+5/WDq xWP76bR4rPCRIU5augV6xnu8Y3Bv2dMvfWnaOsPDYVsz0gl+sGDsIc4ZNUGEQ0wS 7g== -----END CERTIFICATE REQUEST----- optee_test-4.3.0/cert/my.key000066400000000000000000000032501464074351400157750ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDnoJRMUKOFAjo1 qOQeITXVuGuXgpc4hz5LucTBWilrQsCP81EY5Nw4to3FD+0+tBnPRPsh5GlfhPzt 97OamjTaxtOeVoYnSZeP0b7OBBe5Gt1uOJtCdBAAsYH1mtdVFg+aPveNldT5XCMI 9ZPqMJLomX6UhcVY0wfGROlPagfva1/vxE+8EwTlWyxzX88PeeMphDVDylBcIXlE p7bKPlmzlkCcRJXxJQIec+eVo3YsD0mldqtpZ1tT2t8op9nG5dz7yiAJAIXoASB0 1NOQ3yYiETbHrQqFcoDTWWTJO0hud4cBZiiYPfpd7sWu7Mng1ZjovrDO7acFg3hU cXXNvAvtAgMBAAECggEAG1+FxxMMkA54VJkWBF2GYDCAPpKHTn3lJcvZbcQ6+tsT qK9nmRqK0AT68hv0vKFKH42WZCX7MfekcHcCebXZozU2ExNEnWX8DFoMQ4qGRzDe lEUKTCstLPfNVPosknid9WuVk9zuI135IfjrtxRweB6Tr/ezH9EorQy9yc3NDEUZ qClQHh5/xsFyOfvar0ktrlAfm16NKF1jvNlr3eoFhjv2W5gqFPnsA+bseD2BYyZI IT4xp2Z9IDMwWtnrx+4xSsViwzKTrXMGatKft6Fs8qwmVe63wq7VW1gj9wnspY47 YVHswoCaYX6OO2uNtUfbYjrW7EJdANpNUMEmj6TnXQKBgQD6j5dnFVSqU9XHjY3E +zymV4lU/o7EXxnvwFkHvNex003hfQF5Q0ceFVvOyc/8dpk5HHanceqLbgX+f0il bDZ2it8eaSuTSblO9vUKeHlvx3s7KfwFH5kT48rnd5uSDjn1zRTboANBPRjIssP5 GhRFx5JPGZ6b0ehK8c/2Qx07XwKBgQDsp8U+WFHxBRoixr9XjVGqcVZ4XeKl+KX1 qQZOSx2gO3Yhl0umin/SD2jNKgeUhtVhw3YNob3pB17botnpXE4/kj8kpFDepy6J aCgWw0eU1ZM0w04AsOT1vRmzdGZf9UAD6kR5Je41PcKHWRz6ZXW1j27IAXzhYbSw aGZa29nIMwKBgAy0WS3t4/Qa+hz7LXQOdR3OFHWNzrlgRRVmAF2nEpy+pRVI3FlE swdwd849Z2FathwyOEX3PbhCJOWpmIpiuUQ7eGK3XHFEbLP3S6dzQl0LlVEDqPat inp6s2AXLXkzZXb0JhmYvHGDYo1SmyM3Uk3Td7SxDNzDwO6D4lKPRp0rAoGBAOGJ eodSMLWcgS4Hb6+G9P+VCC2qfChk8fVPYr0XBWMBiDG3ONe9Qtf065IrrhG09oM3 fri7HnyJE7QKXdbyq3gWbqsDFjc76TP22c3nyb5kVOiCAULTU0GHOIk4M6Db4Gha yWsT5RNEirHnEaDpNOcVjSR7loJNVaCRvop03/bVAoGBANLhYvNsYC67cxXBwOkH yg3KIXM/rbsK3aZyiv7ZNpja3Rjr0kqlvBom+0UCBVv3TsimgjB1+GocWqzdB9mi DhPirVCQjl+63jE9YZxT1cvibkxsBAQCbl4FlqIbNa7zWKgqopwCX1FQzQuU7QUR 8tMAzwM9hIylELscVzZ13Htq -----END PRIVATE KEY----- optee_test-4.3.0/host/000077500000000000000000000000001464074351400146565ustar00rootroot00000000000000optee_test-4.3.0/host/supp_plugin/000077500000000000000000000000001464074351400172235ustar00rootroot00000000000000optee_test-4.3.0/host/supp_plugin/CMakeLists.txt000066400000000000000000000006271464074351400217700ustar00rootroot00000000000000project (f07bfc66-958c-4a15-99c0-260e4e7375dd.plugin C) set (CFG_TEE_PLUGIN_LOAD_PATH "/usr/lib/tee-supplicant/plugins/") set (CMAKE_SHARED_LIBRARY_PREFIX "") add_library(${PROJECT_NAME} SHARED test_supp_plugin.c) target_include_directories(${PROJECT_NAME} PRIVATE ./include) target_link_libraries (${PROJECT_NAME} PRIVATE teec) install (TARGETS ${PROJECT_NAME} DESTINATION ${CFG_TEE_PLUGIN_LOAD_PATH}) optee_test-4.3.0/host/supp_plugin/Makefile000066400000000000000000000013161464074351400206640ustar00rootroot00000000000000PLUGIN_UUID = f07bfc66-958c-4a15-99c0-260e4e7375dd PLUGIN = $(PLUGIN_UUID).plugin PLUGIN_SRS = $(wildcard ./*.c) PLUGIN_OBJ = $(patsubst %.c, $(O)/supp_plugin/%.o, $(PLUGIN_SRS)) PLUGIN_INCLUDES_DIR = $(CURDIR)/include $(OPTEE_CLIENT_EXPORT)/include PLUGIN_INCLUDES = $(addprefix -I, $(PLUGIN_INCLUDES_DIR)) PLUGIN_CCFLAGS = $(CFLAGS) -Wall -fPIC PLUGIN_LDFLAGS = $(LDFLAGS) -shared CC ?= $(CROSS_COMPILE)gcc $(O)/supp_plugin/$(PLUGIN): $(PLUGIN_OBJ) $(q)$(CC) $(PLUGIN_LDFLAGS) $(PLUGIN_OBJ) -o $@ $(O)/supp_plugin/%.o: $(CURDIR)/%.c $(q)mkdir -p $(O)/supp_plugin @echo ' CC $<' $(q)$(CC) $(PLUGIN_INCLUDES) $(PLUGIN_CCFLAGS) -c $< -o $@ .PHONY: clean clean: $(q)$(RM) -rf $(O)/supp_plugin/ optee_test-4.3.0/host/supp_plugin/include/000077500000000000000000000000001464074351400206465ustar00rootroot00000000000000optee_test-4.3.0/host/supp_plugin/include/test_supp_plugin.h000066400000000000000000000006701464074351400244260ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021 Open Mobile Platform LLC */ #ifndef TEST_SUPP_PLUGIN_H #define TEST_SUPP_PLUGIN_H #define TEST_PLUGIN_UUID { 0xf07bfc66, 0x958c, 0x4a15, \ { 0x99, 0xc0, 0x26, 0x0e, 0x4e, 0x73, 0x75, 0xdd } } #define TEST_PLUGIN_CMD_PING 0 #define TEST_PLUGIN_CMD_PASS_VALUES 1 #define TEST_PLUGIN_CMD_WRITE_ARR 2 #define TEST_PLUGIN_CMD_GET_ARR 3 #endif /* TEST_SUPP_PLUGIN_H */ optee_test-4.3.0/host/supp_plugin/test_supp_plugin.c000066400000000000000000000036441464074351400230020ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2021, Open Mobile Platform LLC */ #include #include #include #include #include #include #include #include #include static TEEC_Result pass_values(unsigned int sub_cmd, void *data, size_t data_len, size_t *out_len) { struct add_op { uint32_t a; uint32_t b; } *values = NULL; values = (struct add_op *)data; *out_len = sizeof(uint32_t); if (sub_cmd == '+') values->a = values->a + values->b; else values->a = values->a - values->b; return TEEC_SUCCESS; } static TEEC_Result proc_input_arr(unsigned int sub_cmd, void *data, size_t data_len, size_t *out_len) { (void)sub_cmd; size_t i = 0; uint8_t sum = 0; uint8_t *d = data; for (; i < data_len; ++i) sum += d[i]; d[0] = sum; *out_len = sizeof(sum); return TEEC_SUCCESS; } static TEEC_Result get_test_arr(unsigned int sub_cmd, void *data, size_t data_len, size_t *out_len) { (void)sub_cmd; char test_arr[] = "Array from plugin"; size_t test_size = sizeof(test_arr); if (data_len < test_size) return TEEC_ERROR_GENERIC; memcpy(data, test_arr, test_size); *out_len = test_size; return TEEC_SUCCESS; } static TEEC_Result test_plugin_invoke(unsigned int cmd, unsigned int sub_cmd, void *data, size_t data_len, size_t *out_len) { switch (cmd) { case TEST_PLUGIN_CMD_PING: return TEEC_SUCCESS; case TEST_PLUGIN_CMD_PASS_VALUES: return pass_values(sub_cmd, data, data_len, out_len); case TEST_PLUGIN_CMD_WRITE_ARR: return proc_input_arr(sub_cmd, data, data_len, out_len); case TEST_PLUGIN_CMD_GET_ARR: return get_test_arr(sub_cmd, data, data_len, out_len); default: break; } return TEEC_ERROR_NOT_SUPPORTED; } struct plugin_method plugin_method = { .name = "test", .uuid = TEST_PLUGIN_UUID, .invoke = test_plugin_invoke, }; optee_test-4.3.0/host/xtest/000077500000000000000000000000001464074351400160255ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/.gitignore000066400000000000000000000000161464074351400200120ustar00rootroot00000000000000for_gp *.orig optee_test-4.3.0/host/xtest/CMakeLists.txt000066400000000000000000000077071464074351400206000ustar00rootroot00000000000000project (xtest C) include(${OPTEE_TEST_SDK}/host_include/conf.cmake) ################################################################################ # Packages ################################################################################ find_package(Threads REQUIRED) if(NOT THREADS_FOUND) message(FATAL_ERROR "Threads not found") endif() find_package(OpenSSL) if(OPENSSL_FOUND) add_compile_options(-DOPENSSL_FOUND=1 -DOPENSSL_API_COMPAT=10100) set (OPENSSL_PRIVATE_LINK OpenSSL::Crypto) endif() find_package(Python REQUIRED) include(GNUInstallDirs) macro(EMBED_8100FILE prefix infile) add_custom_command( OUTPUT regression_8100_${prefix}.h COMMAND ${Python_EXECUTABLE} ${OPTEE_TEST_ROOT_DIR}/scripts/file_to_c.py --inf ${infile} --out ${CMAKE_CURRENT_BINARY_DIR}/regression_8100_${prefix}.h --name regression_8100_${prefix} DEPENDS ${OPTEE_TEST_ROOT_DIR}/scripts/file_to_c.py ${infile} ) set_property(SOURCE regression_8100.c APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/regression_8100_${prefix}.h) endmacro(EMBED_8100FILE) EMBED_8100FILE(ca_crt ${OPTEE_TEST_ROOT_DIR}/cert/ca.crt) EMBED_8100FILE(mid_crt ${OPTEE_TEST_ROOT_DIR}/cert/mid.crt) EMBED_8100FILE(my_crt ${OPTEE_TEST_ROOT_DIR}/cert/my.crt) EMBED_8100FILE(my_csr ${OPTEE_TEST_ROOT_DIR}/cert/my.csr) set (SRC adbg/src/adbg_case.c adbg/src/adbg_enum.c adbg/src/adbg_expect.c adbg/src/adbg_log.c adbg/src/adbg_run.c adbg/src/security_utils_hex.c asym_perf.c benchmark_1000.c benchmark_2000.c clear_storage.c regression_1000.c regression_4000.c regression_4100.c regression_5000.c regression_6000.c regression_8000.c regression_8100.c hash_perf.c stats.c symm_cipher_perf.c xtest_helpers.c xtest_main.c xtest_test.c xtest_uuid_helpers.c ) if(CFG_SECURE_PARTITION AND CFG_SPMC_TESTS) list (APPEND SRC ffa_spmc_1000.c) endif() if (WITH_GP_TESTS) add_compile_options(-DWITH_GP_TESTS=1) macro(__GEN_GP_FILE outfile xmldir name basedir) add_custom_command( OUTPUT ${outfile} COMMAND xalan -in ${basedir}/${name}.xml -xsl gp/${name}.xsl -out ${outfile} DEPENDS ${basedir}/${name}.xml gp/${name}.xsl ) endmacro(__GEN_GP_FILE) macro(GEN_GP_FILE outfile xmldir name) __GEN_GP_FILE(${outfile} ${xmldir} ${name} gp-suite/packages/${xmldir}) list (APPEND SRC ${outfile}) endmacro(GEN_GP_FILE) GEN_GP_FILE(gp_10000.c ClientAPI/xmlstable TEE) GEN_GP_FILE(gp_20000.c TrustedCoreFw/xmlstable TEE_Internal_API) GEN_GP_FILE(gp_30000.c DataStorage/xmlstable TEE_DataStorage_API) GEN_GP_FILE(gp_40000.c Time_Arithmetical/xmlstable TEE_TimeArithm_API) GEN_GP_FILE(gp_50000.c Crypto/xmlstable TEE_Crypto_API) set (GP_INCLUDES PRIVATE gp/include) endif() if (CFG_GP_SOCKETS) list (APPEND SRC regression_2000.c sock_server.c rand_stream.c ) endif() if (CFG_SECSTOR_TA_MGMT_PTA) list (APPEND SRC install_ta.c) endif() if (CFG_SECURE_DATA_PATH) list (APPEND SRC sdp_basic.c) endif() if (CFG_PKCS11_TA) add_compile_options(-DCFG_PKCS11_TA) list (APPEND SRC pkcs11_1000.c) endif() if (CFG_CRYPTO_SE05X) add_compile_options(-DCFG_CRYPTO_SE05X) endif() ################################################################################ # Built binary ################################################################################ add_executable (${PROJECT_NAME} ${SRC}) target_compile_options (${PROJECT_NAME} PRIVATE -include conf.h) target_include_directories(${PROJECT_NAME} PRIVATE . PRIVATE ../supp_plugin/include PRIVATE adbg/include PRIVATE ${OPTEE_TEST_SDK}/host_include PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${GP_INCLUDES} ) target_link_libraries (${PROJECT_NAME} PRIVATE ${CMAKE_THREAD_LIBS_INIT} PRIVATE xtest-ta-headers PRIVATE teec PRIVATE m PRIVATE ${OPENSSL_PRIVATE_LINK} PRIVATE ckteec ) ################################################################################ # Install targets ################################################################################ install (TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) optee_test-4.3.0/host/xtest/LICENSE000066400000000000000000000432541464074351400170420ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. optee_test-4.3.0/host/xtest/Makefile000066400000000000000000000152061464074351400174710ustar00rootroot00000000000000# Normally this makefile shouldn't be called directly and we expect the output # path to be on a certain location to fit together with the other OP-TEE # gits and helper scripts. include ../../scripts/common.mk out-dir := $(call strip-trailing-slashes-and-dots,$(O)) ifeq ($(out-dir),) $(error invalid output directory (O=$(O))) endif include $(TA_DEV_KIT_DIR)/host_include/conf.mk # By default we expect optee_client exported folder to be on a certain relative # path, but if the client specifies the OPTEE_CLIENT_EXPORT then that path will # be used instead. OPTEE_CLIENT_EXPORT ?= ../../../optee_client/out/export CC ?= $(CROSS_COMPILE)gcc CPP ?= $(CROSS_COMPILE)cpp LD ?= $(CROSS_COMPILE)ld AR ?= $(CROSS_COMPILE)ar NM ?= $(CROSS_COMPILE)nm OBJCOPY ?= $(CROSS_COMPILE)objcopy OBJDUMP ?= $(CROSS_COMPILE)objdump READELF ?= $(CROSS_COMPILE)readelf # Macros to detect the targeted architecture (e.g., arm-linux-gnueabihf or # aarch64-linux-gnu) and the corresponding bit size (32 or 64). define cc-arch $(shell $(1) -v 2>&1 | grep Target | sed 's/Target: \([^-]*\).*/\1/') endef define cc-bits $(if $(filter arm, $(1)),32,$(if $(filter aarch64, $(1)),64,unknown-arch)) endef # OpenSSL is used by: # - GP tests series 8500 # - Mbed TLS test 8103 # - User/group login tests 1027 and 1028 WITH_OPENSSL ?= y ifeq ($(WITH_OPENSSL),y) CFLAGS += -DOPENSSL_FOUND=1 -DOPENSSL_API_COMPAT=10100 ifneq ($(OPENSSL_INSTALL_PATH),) CFLAGS += -I$(OPENSSL_INSTALL_PATH)/include LDFLAGS += -L$(OPENSSL_INSTALL_PATH)/lib endif LDFLAGS += -lcrypto endif #require OpenSSL srcs := regression_1000.c ifeq ($(CFG_GP_SOCKETS),y) srcs += regression_2000.c \ sock_server.c \ rand_stream.c endif srcs += adbg/src/adbg_case.c \ adbg/src/adbg_enum.c \ adbg/src/adbg_expect.c \ adbg/src/adbg_log.c \ adbg/src/adbg_run.c \ adbg/src/security_utils_hex.c \ asym_perf.c \ benchmark_1000.c \ benchmark_2000.c \ clear_storage.c \ regression_4000.c \ regression_4100.c \ regression_5000.c \ regression_6000.c \ regression_8000.c \ regression_8100.c \ hash_perf.c \ stats.c \ symm_cipher_perf.c \ xtest_helpers.c \ xtest_main.c \ xtest_test.c \ xtest_uuid_helpers.c ifeq ($(CFG_SECURE_PARTITION)-$(CFG_SPMC_TESTS),y-y) srcs += ffa_spmc_1000.c endif ifeq ($(CFG_SECSTOR_TA_MGMT_PTA),y) srcs += install_ta.c endif ifeq ($(CFG_SECURE_DATA_PATH),y) srcs += sdp_basic.c endif ifeq ($(CFG_PKCS11_TA),y) srcs += pkcs11_1000.c endif objs := $(patsubst %.c,$(out-dir)/xtest/%.o, $(srcs)) ifeq ($(CFG_PKCS11_TA),y) CFLAGS += -DCFG_PKCS11_TA endif ifeq ($(CFG_CRYPTO_SE05X),y) CFLAGS += -DCFG_CRYPTO_SE05X endif CFLAGS += -I./ CFLAGS += -I./adbg/include CFLAGS += -I../supp_plugin/include CFLAGS += -I$(out-dir)/xtest CFLAGS += -I$(OPTEE_CLIENT_EXPORT)/include CFLAGS += -I$(TA_DEV_KIT_DIR)/host_include CFLAGS += -I../../ta/include CFLAGS += -I../../ta/create_fail_test/include CFLAGS += -I../../ta/crypt/include CFLAGS += -I../../ta/enc_fs/include CFLAGS += -I../../ta/os_test/include CFLAGS += -I../../ta/rpc_test/include CFLAGS += -I../../ta/sims/include CFLAGS += -I../../ta/miss/include CFLAGS += -I../../ta/sims_keepalive/include CFLAGS += -I../../ta/storage_benchmark/include CFLAGS += -I../../ta/concurrent/include CFLAGS += -I../../ta/concurrent_large/include CFLAGS += -I../../ta/crypto_perf/include CFLAGS += -I../../ta/socket/include CFLAGS += -I../../ta/sdp_basic/include CFLAGS += -I../../ta/tpm_log_test/include CFLAGS += -I../../ta/large/include CFLAGS += -I../../ta/supp_plugin/include CFLAGS += -I../../ta/bti_test/include CFLAGS += -I../../ta/subkey1/include CFLAGS += -I../../ta/subkey2/include TA_DIR ?= /lib/optee_armtz CFLAGS += -DTA_DIR=\"$(TA_DIR)\" # Include configuration file generated by OP-TEE OS (CFG_* macros) CFLAGS += -include conf.h CFLAGS += -Wall -Wcast-align -Werror \ -Werror-implicit-function-declaration -Wextra -Wfloat-equal \ -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self \ -Wmissing-declarations -Wmissing-format-attribute \ -Wmissing-include-dirs \ -Wmissing-prototypes -Wnested-externs -Wpointer-arith \ -Wshadow -Wstrict-prototypes -Wswitch-default \ -Wwrite-strings -Wno-unused-parameter \ -Wno-declaration-after-statement \ -Wno-missing-field-initializers -Wno-format-zero-length CFLAGS += -g3 LDFLAGS += -L$(OPTEE_CLIENT_EXPORT)/lib -lteec ifeq ($(CFG_PKCS11_TA),y) LDFLAGS += -lckteec endif LDFLAGS += -lpthread -lm .PHONY: all all: xtest xtest: $(objs) @echo " LD $(out-dir)/xtest/$@" $(q)$(CC) -o $(out-dir)/xtest/$@ $+ $(LDFLAGS) $(out-dir)/xtest/%.o: $(CURDIR)/%.c $(q)mkdir -p $(out-dir)/xtest/adbg/src @echo ' CC $<' $(q)$(CC) $(CFLAGS) -c $< -o $@ RMDIR := rmdir --ignore-fail-on-non-empty define rm-build-dirs $(q)for d in $1; do $(RMDIR) $(out-dir)/xtest/$$d 2> /dev/null; true; done $(q)$(RMDIR) $(out-dir)/xtest 2> /dev/null; true $(q)$(RMDIR) $(out-dir) 2> /dev/null; true endef ifeq ($(CFG_GCM_NIST_VECTORS),y) GCM_NIST_VECTORS_DECRYPT = gcmDecrypt128 gcmDecrypt192 gcmDecrypt256 GCM_NIST_VECTORS_ENCRYPT = gcmEncryptExtIV128 gcmEncryptExtIV192 \ gcmEncryptExtIV256 cleanfiles += $(out-dir)/gcmtestvectors.zip $(out-dir)/gcmtestvectors.zip: @echo ' DL $@' $(q)curl https://csrc.nist.gov/csrc/media/projects/cryptographic-algorithm-validation-program/documents/mac/gcmtestvectors.zip -o $@ define create-nist-gcm-vectors cleanfiles += $(out-dir)/xtest/$(1).h $(out-dir)/$(1).rsp $(out-dir)/$(1).rsp: $(out-dir)/gcmtestvectors.zip @echo ' UNZIP $$@' $(q)unzip -o $$< $$(notdir $$@) -d $$(dir $$@) $(q)touch $$@ $(out-dir)/xtest/$(1).h: $(out-dir)/$(1).rsp @echo ' GEN $$@' $(q)$(PYTHON3) ../../scripts/rsp_to_gcm_test.py --inf $$< --outf $$@ --mode=$(2) \ $(if $(filter y,$(CFG_GCM_NIST_VECTORS_LIMITED)),--limited) $(CURDIR)/regression_4000.c: $(out-dir)/xtest/$(1).h endef $(foreach v, $(GCM_NIST_VECTORS_DECRYPT), $(eval $(call \ create-nist-gcm-vectors,$v,decrypt))) $(foreach v, $(GCM_NIST_VECTORS_ENCRYPT), $(eval $(call \ create-nist-gcm-vectors,$v,encrypt))) endif define embed-file cleanfiles += $(out-dir)/xtest/$(1).h $(out-dir)/xtest/$(1).h: $(2) $(q)mkdir -p $(out-dir)/xtest/ @echo ' GEN $$@' $(q)$(PYTHON3) ../../scripts/file_to_c.py --inf $$< --out $$@ --name $(1) $(CURDIR)/regression_8100.c: $(out-dir)/xtest/$(1).h endef $(eval $(call embed-file,regression_8100_ca_crt,../../cert/ca.crt)) $(eval $(call embed-file,regression_8100_mid_crt,../../cert/mid.crt)) $(eval $(call embed-file,regression_8100_my_crt,../../cert/my.crt)) $(eval $(call embed-file,regression_8100_my_csr,../../cert/my.csr)) .PHONY: clean clean: @echo ' CLEAN $(out-dir)' $(q)rm -f $(out-dir)/xtest/xtest $(q)$(foreach obj,$(objs), rm -f $(obj)) $(q)rm -f $(cleanfiles) $(call rm-build-dirs,adbg/src adbg) optee_test-4.3.0/host/xtest/adbg/000077500000000000000000000000001464074351400167225ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/adbg/include/000077500000000000000000000000001464074351400203455ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/adbg/include/adbg.h000066400000000000000000000170361464074351400214220ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #ifndef ADBG_H #define ADBG_H #include #include #include #include #include #define ADBG_STRING_LENGTH_MAX (1024) /* * Case definitions */ /** * Defines a test case * * Used in the follwing way for readability: */ #if 0 /* #if 0 to avoid nested comments */ ADBG_CASE_DEFINE(TEST_1001, TEST_Test_1001, /* Title */ "My test case title", ); #endif typedef struct ADBG_Case ADBG_Case_t; typedef struct adbg_case_def { const char *TestID_p; const char *Title_p; void (*Run_fp)(ADBG_Case_t *ADBG_Case_pp); TAILQ_ENTRY(adbg_case_def) link; } ADBG_Case_Definition_t; TAILQ_HEAD(adbg_case_def_head, adbg_case_def); typedef struct adbg_suite_def { const char *SuiteID_p; struct adbg_case_def_head cases; } ADBG_Suite_Definition_t; #define ADBG_CASE_DEFINE(Suite, TestID, Run, Title) \ __attribute__((constructor)) static void \ __adbg_test_case_ ## TestID(void) \ { \ static ADBG_Case_Definition_t case_def = { \ .TestID_p = #Suite "_" #TestID, \ .Title_p = Title, \ .Run_fp = Run, \ }; \ struct adbg_case_def_head *ch = &(ADBG_Suite_ ## Suite).cases; \ struct adbg_case_def *cd = NULL; \ \ TAILQ_FOREACH(cd, ch, link) \ if (strcmp(case_def.TestID_p, cd->TestID_p) < 0) \ break; \ if (cd) \ TAILQ_INSERT_BEFORE(cd, &case_def, link); \ else \ TAILQ_INSERT_TAIL(ch, &case_def, link); \ } /* * Suite definitions */ /** * Declares a suite defined in a C-file. */ #define ADBG_SUITE_DECLARE(Name) \ extern ADBG_Suite_Definition_t ADBG_Suite_ ## Name #define ADBG_SUITE_DEFINE(Name) \ ADBG_Suite_Definition_t ADBG_Suite_ ## Name = { \ .SuiteID_p = #Name, \ .cases = TAILQ_HEAD_INITIALIZER(ADBG_Suite_ ## Name.cases), \ } /* * Enum table definitions */ #define ADBG_ENUM_TABLE_DECLARE(Name) \ extern const ADBG_EnumTable_t ADBG_EnumTable_ ## Name[] #define ADBG_ENUM_TABLE_DEFINE_BEGIN(Name) \ const ADBG_EnumTable_t ADBG_EnumTable_ ## Name[] = { #define ADBG_ENUM_TABLE_ENTRY(Value) { Value, #Value } #define ADBG_ENUM_TABLE_DEFINE_END(Name) , { 0, NULL } } typedef struct { int Value; const char *const Name_p; } ADBG_EnumEntry_t; typedef ADBG_EnumEntry_t ADBG_EnumTable_t; ADBG_ENUM_TABLE_DECLARE(Boolean); /* * Expect functions/macros */ #define ADBG_EXPECT(Case_p, Expected, Got) \ ADBG_EXPECT_ENUM(Case_p, Expected, Got, NULL) #define ADBG_EXPECT_NOT(Case_p, Expected, Got) \ ADBG_EXPECT_NOT_ENUM(Case_p, Expected, Got, NULL) #define ADBG_EXPECT_ENUM(Case_p, Expected, Got, EnumTable_p) \ Do_ADBG_Expect(Case_p, __FILE__, __LINE__, Expected, Got, #Got, \ EnumTable_p) #define ADBG_EXPECT_NOT_ENUM(Case_p, NotExpected, Got, EnumTable_p) \ Do_ADBG_ExpectNot(Case_p, __FILE__, __LINE__, \ NotExpected, Got, #Got, EnumTable_p) #define ADBG_EXPECT_BOOLEAN(Case_p, Expected, Got) \ ADBG_EXPECT_ENUM(Case_p, Expected, Got, ADBG_EnumTable_Boolean) #define ADBG_EXPECT_TRUE(Case_p, Got) \ ADBG_EXPECT_ENUM(Case_p, true, Got, ADBG_EnumTable_Boolean) #define ADBG_EXPECT_EQUAL(Case_p, Buf1_p, Buf2_p, Length) \ ADBG_EXPECT(Case_p, 0, memcmp(Buf1_p, Buf2_p, Length)) #define ADBG_EXPECT_BUFFER(Case_p, ExpBuf_p, ExpBufLen, GotBuf_p, GotBufLen) \ Do_ADBG_ExpectBuffer(Case_p, __FILE__, __LINE__, \ ExpBuf_p, ExpBufLen, #GotBuf_p, GotBuf_p, \ #GotBufLen, GotBufLen) #define ADBG_EXPECT_POINTER(Case_p, Expected, Got) \ Do_ADBG_ExpectPointer(Case_p, __FILE__, __LINE__, Expected, Got, #Got) #define ADBG_EXPECT_NOT_NULL(Case_p, Got) \ Do_ADBG_ExpectPointerNotNULL(Case_p, __FILE__, __LINE__, Got, #Got) #define ADBG_EXPECT_COMPARE_SIGNED(Case_p, Val1, Compar, Val2) \ Do_ADBG_ExpectCompareSigned(Case_p, __FILE__, __LINE__, \ Val1, Val2, (Val1)Compar( \ Val2), #Val1, #Compar, #Val2) #define ADBG_EXPECT_COMPARE_UNSIGNED(Case_p, Val1, Compar, Val2) \ Do_ADBG_ExpectCompareUnsigned(Case_p, __FILE__, __LINE__, \ Val1, Val2, (Val1)Compar( \ Val2), #Val1, #Compar, #Val2) #define ADBG_EXPECT_COMPARE_POINTER(Case_p, Val1, Compar, Val2) \ Do_ADBG_ExpectComparePointer(Case_p, __FILE__, __LINE__, \ Val1, Val2, (Val1)Compar( \ Val2), #Val1, #Compar, #Val2) bool Do_ADBG_Expect(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const int Expected, const int Got, const char *const GotVarName_p, const ADBG_EnumTable_t *const EnumTable_p); bool Do_ADBG_ExpectNot(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const int NotExpected, const int Got, const char *const GotVarName_p, const ADBG_EnumTable_t *const EnumTable_p); bool Do_ADBG_ExpectBuffer(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const void *const ExpectedBuffer_p, const size_t ExpectedBufferLength, const char *const GotBufferName_p, const void *const GotBuffer_p, const char *const GotBufferLengthName_p, const size_t GotBufferLength); bool Do_ADBG_ExpectPointer(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const void *Expected_p, const void *Got_p, const char *const GotVarName_p); bool Do_ADBG_ExpectPointerNotNULL(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const void *Got_p, const char *const GotVarName_p); bool Do_ADBG_ExpectCompareSigned(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const long Value1, const long Value2, const bool Result, const char *const Value1Str_p, const char *const ComparStr_p, const char *const Value2Str_p); bool Do_ADBG_ExpectCompareUnsigned(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const unsigned long Value1, const unsigned long Value2, const bool Result, const char *const Value1Str_p, const char *const ComparStr_p, const char *const Value2Str_p); bool Do_ADBG_ExpectComparePointer(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const void *const Value1_p, const void *const Value2_p, const bool Result, const char *const Value1Str_p, const char *const ComparStr_p, const char *const Value2Str_p); const char *Do_ADBG_GetEnumName(const int Value, const ADBG_EnumTable_t *const EnumTable_p); /** * Writes a string to output. * String length max is defined by ADBG_STRING_LENGTH_MAX * * @param Format_p The formatting string as in printf */ void Do_ADBG_Log(const char *const Format_p, ...) __attribute__((__format__(__printf__, 1, 2))); /** * Writes out the contents of buf_p formatted so that each line will * have cols number of columns. * * @param[in] Buf_p Buffer to print * @param[in] Size Size of buffer (in bytes) * @param[in] Cols Number of columns. */ void Do_ADBG_HexLog(const void *const Buf_p, const size_t Size, const size_t Cols); /* * Suite functions */ int Do_ADBG_RunSuite(const ADBG_Suite_Definition_t *Suite_p, int argc, char *argv[]); int Do_ADBG_AppendToSuite(ADBG_Suite_Definition_t *Dest_p, ADBG_Suite_Definition_t *Source_p); /* * SubCase functions */ void Do_ADBG_BeginSubCase(ADBG_Case_t *const Case_p, const char *const FormatTitle_p, ...) __attribute__((__format__(__printf__, 2, 3))); void Do_ADBG_EndSubCase(ADBG_Case_t *const Case_p, const char *const FormatTitle_p, ...) __attribute__((__format__(__printf__, 2, 3))); #endif /* ADBG_H */ optee_test-4.3.0/host/xtest/adbg/src/000077500000000000000000000000001464074351400175115ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/adbg/src/adbg_case.c000066400000000000000000000210301464074351400215410ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ /************************************************************************* * 1. Includes *************************************************************************/ #include "adbg_int.h" /************************************************************************* * 2. Definition of external constants and variables *************************************************************************/ /************************************************************************* * 3. File scope types, constants and variables *************************************************************************/ /************************************************************************* * 4. Declaration of file local functions *************************************************************************/ /* * Deletes a subcase. Don't call this function before the * subcase is removed from list. */ static void ADBG_SubCase_Delete(ADBG_SubCase_t *SubCase); static ADBG_SubCase_t *ADBG_Case_CreateSubCase(ADBG_Case_t *Case_p, const char *const Title_p); static ADBG_SubCase_t *ADBG_Case_GetParentSubCase(ADBG_Case_t *Case_p, ADBG_SubCase_t *SubCase_p); static const char *ADBG_Case_GetTestID(ADBG_Case_t *Case_p); /************************************************************************* * 5. Definition of external functions *************************************************************************/ ADBG_Case_t *ADBG_Case_New(const struct adbg_case_def *case_def) { ADBG_Case_t *Case_p = NULL; Case_p = calloc(1, sizeof(*Case_p)); if (Case_p) Case_p->case_def = case_def; return Case_p; } void ADBG_Case_Delete(ADBG_Case_t *Case_p) { ADBG_SubCase_Delete(Case_p->FirstSubCase_p); free(Case_p); } bool ADBG_Case_SubCaseIsMain( const ADBG_Case_t *const Case_p, const ADBG_SubCase_t *const SubCase_p ) { IDENTIFIER_NOT_USED(Case_p) return SubCase_p->Parent_p == NULL; } void ADBG_Case_IterateSubCase( ADBG_Case_t *Case_p, ADBG_SubCase_Iterator_t *Iterator_p ) { Iterator_p->Case_p = Case_p; Iterator_p->CurrentSubCase_p = NULL; } ADBG_SubCase_t *ADBG_Case_NextSubCase( ADBG_SubCase_Iterator_t *Iterator_p ) { ADBG_Case_t *Case_p = Iterator_p->Case_p; ADBG_SubCase_t *SubCase_p = Iterator_p->CurrentSubCase_p; /* * Traverse the subcases depth first, that is: * 1.1.1.1 * 1.1.1.2 * 1.1.1 * 1.1.2.1 * 1.1.2 * 1.1 * 1.2.1 * 1.2 * 1 */ if (SubCase_p == NULL) { /* Find the first leaf */ SubCase_p = Case_p->FirstSubCase_p; if (SubCase_p == NULL) goto CleanupReturn; while (!TAILQ_EMPTY(&SubCase_p->SubCasesList)) SubCase_p = TAILQ_FIRST(&SubCase_p->SubCasesList); goto CleanupReturn; } /* * Look for the next leaf belonging to the parent */ if (SubCase_p->Parent_p == NULL) { /* If parent is NULL this is the top subcase and we're done */ SubCase_p = NULL; goto CleanupReturn; } if (TAILQ_NEXT(SubCase_p, Link) == NULL) { /* If this is the last subcase of the parent move up to parent */ SubCase_p = SubCase_p->Parent_p; goto CleanupReturn; } /* * Find next leaf */ SubCase_p = TAILQ_NEXT(SubCase_p, Link); while (!TAILQ_EMPTY(&SubCase_p->SubCasesList)) SubCase_p = TAILQ_FIRST(&SubCase_p->SubCasesList); CleanupReturn: Iterator_p->CurrentSubCase_p = SubCase_p; return SubCase_p; } void Do_ADBG_BeginSubCase( ADBG_Case_t *const Case_p, const char *const FormatTitle_p, ... ) { ADBG_SubCase_t *SubCase_p = NULL; if (Case_p == NULL) { Do_ADBG_Log("Do_ADBG_BeginSubCase: NULL Case_p!"); return; } if (FormatTitle_p == NULL) { Do_ADBG_Log("Do_ADBG_BeginSubCase: NULL FormatTitle_p!"); return; } va_list ArgList; char Title[80] = { }; va_start(ArgList, FormatTitle_p); vsnprintf(Title, sizeof(Title), FormatTitle_p, ArgList); va_end(ArgList); SubCase_p = ADBG_Case_CreateSubCase(Case_p, Title); if (SubCase_p == NULL) { Do_ADBG_Log("Do_ADBG_BeginSubCase: HEAP_ALLOC failed"); return; } if (ADBG_Case_SubCaseIsMain(Case_p, SubCase_p)) { /* Main SubCase */ Do_ADBG_Log(" "); Do_ADBG_Log("* %s %s", SubCase_p->TestID_p, SubCase_p->Title_p); } else { Do_ADBG_Log("o %s %s", SubCase_p->TestID_p, SubCase_p->Title_p); } } void Do_ADBG_EndSubCase( ADBG_Case_t *const Case_p, const char *const FormatTitle_p, ... ) { va_list ArgList; char Title[80] = { }; ADBG_SubCase_t *SubCase_p = NULL; if (Case_p == NULL) { Do_ADBG_Log("Do_ADBG_EndSubCase: NULL Case_p!"); return; } if (FormatTitle_p == NULL) { strcpy(Title, "NULL"); } else { va_start(ArgList, FormatTitle_p); vsnprintf(Title, sizeof(Title), FormatTitle_p, ArgList); va_end(ArgList); } SubCase_p = Case_p->CurrentSubCase_p; if (SubCase_p == NULL) { Do_ADBG_Log("Do_ADBG_EndSubCase: " "Have no active SubCase, bailing out for title \"%s\"", Title); return; } if (FormatTitle_p != NULL && strcmp(SubCase_p->Title_p, Title) != 0) { Do_ADBG_Log("Do_ADBG_EndSubCase: " "Active SubCase \"%s\" doesn't match supplied title \"%s\"", SubCase_p->Title_p, Title); return; } if (ADBG_Case_SubCaseIsMain(Case_p, SubCase_p)) { if (FormatTitle_p == NULL) { /* To end the main subcase we require a matching title */ Do_ADBG_Log("Do_ADBG_EndSubCase: " "The main SubCase \"%s\" doesn't match supplied title \"%s\"", SubCase_p->Title_p, Title); return; } /* * Ending the main subcase * make a complete copy of the aggregated result. */ Case_p->Result = SubCase_p->Result; } else { /* * Ending a subcase, * Aggregate results to parent. */ ADBG_SubCase_t *Parent_p = SubCase_p->Parent_p; Parent_p->Result.NumSubTests += SubCase_p->Result.NumTests + SubCase_p->Result.NumSubTests; Parent_p->Result.NumFailedSubTests += SubCase_p->Result.NumFailedTests + SubCase_p->Result. NumFailedSubTests; Parent_p->Result.AbortTestSuite = SubCase_p->Result.AbortTestSuite; if (SubCase_p->Result.NumTests > 0 || SubCase_p->Result.NumSubTests > 0) Parent_p->Result.NumFailedSubCases++; } /* Print a summary of the subcase result */ if (SubCase_p->Result.NumFailedTests > 0 || SubCase_p->Result.NumFailedSubTests > 0) { Do_ADBG_Log(" %s FAILED", SubCase_p->TestID_p); } else { Do_ADBG_Log(" %s OK", SubCase_p->TestID_p); } /* Update current subcase to be the parent of this subcase */ Case_p->CurrentSubCase_p = ADBG_Case_GetParentSubCase(Case_p, SubCase_p); } /************************************************************************* * 6. Definition of internal functions *************************************************************************/ static ADBG_SubCase_t *ADBG_Case_CreateSubCase( ADBG_Case_t *Case_p, const char *const Title_p ) { ADBG_SubCase_t *SubCase_p = NULL; SubCase_p = calloc(1, sizeof(*SubCase_p)); if (SubCase_p == NULL) goto ErrorReturn; TAILQ_INIT(&SubCase_p->SubCasesList); SubCase_p->Title_p = strdup(Title_p); if (SubCase_p->Title_p == NULL) goto ErrorReturn; /* Set parent pointer needed "early" below. */ SubCase_p->Parent_p = Case_p->CurrentSubCase_p; if (SubCase_p->Parent_p == NULL) { /* Main SubCase */ SubCase_p->TestID_p = strdup(ADBG_Case_GetTestID(Case_p)); if (SubCase_p->TestID_p == NULL) goto ErrorReturn; Case_p->FirstSubCase_p = SubCase_p; } else { ADBG_SubCase_t *Parent_p = SubCase_p->Parent_p; char PrefixTitle[80] = { }; /* Update parent SubCase */ Parent_p->Result.NumSubCases++; snprintf(PrefixTitle, sizeof(PrefixTitle), "%s.%d", Parent_p->TestID_p, Parent_p->Result.NumSubCases); SubCase_p->TestID_p = strdup(PrefixTitle); if (SubCase_p->TestID_p == NULL) goto ErrorReturn; TAILQ_INSERT_TAIL(&Parent_p->SubCasesList, SubCase_p, Link); } Case_p->CurrentSubCase_p = SubCase_p; return SubCase_p; ErrorReturn: ADBG_SubCase_Delete(SubCase_p); return NULL; } static void ADBG_SubCase_Delete( ADBG_SubCase_t *SubCase_p ) { if (SubCase_p != NULL) { /* * Note that Util_ListDestroy() checks * if SubCase_p->SubCasesList_p * is NULL. */ while (true) { ADBG_SubCase_t *s = TAILQ_FIRST(&SubCase_p->SubCasesList); if (s == NULL) break; TAILQ_REMOVE(&SubCase_p->SubCasesList, s, Link); ADBG_SubCase_Delete(s); } free(SubCase_p->TestID_p); free(SubCase_p->Title_p); free(SubCase_p); } } ADBG_SubCase_t *ADBG_Case_GetParentSubCase( ADBG_Case_t *Case_p, ADBG_SubCase_t *SubCase_p ) { IDENTIFIER_NOT_USED(Case_p) IDENTIFIER_NOT_USED(SubCase_p) return SubCase_p->Parent_p; } static const char *ADBG_Case_GetTestID(ADBG_Case_t *Case_p) { IDENTIFIER_NOT_USED(Case_p) return Case_p->case_def->TestID_p; } optee_test-4.3.0/host/xtest/adbg/src/adbg_enum.c000066400000000000000000000032341464074351400216000ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ /************************************************************************* * 1. Includes *************************************************************************/ #include "adbg_int.h" /************************************************************************* * 2. Definition of external constants and variables *************************************************************************/ ADBG_ENUM_TABLE_DEFINE_BEGIN(Boolean) ADBG_ENUM_TABLE_ENTRY(false), ADBG_ENUM_TABLE_ENTRY(true) ADBG_ENUM_TABLE_DEFINE_END(Boolean); /************************************************************************* * 3. File scope types, constants and variables *************************************************************************/ /************************************************************************* * 4. Declaration of file local functions *************************************************************************/ /************************************************************************* * 5. Definition of external functions *************************************************************************/ const char *Do_ADBG_GetEnumName( const int Value, const ADBG_EnumTable_t *const EnumTable_p ) { const ADBG_EnumTable_t *Entry_p = EnumTable_p; for (; Entry_p->Name_p != NULL; Entry_p++) { if (Entry_p->Value == Value) return Entry_p->Name_p; } return ""; } /************************************************************************* * 6. Definition of internal functions *************************************************************************/ optee_test-4.3.0/host/xtest/adbg/src/adbg_expect.c000066400000000000000000000167451464074351400221370ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ /************************************************************************* * 1. Includes ************************************************************************/ #include "adbg_int.h" /************************************************************************* * 2. Definition of external constants and variables ************************************************************************/ /************************************************************************* * 3. File scope types, constants and variables ************************************************************************/ /************************************************************************* * 4. Declaration of file local functions ************************************************************************/ static bool ADBG_AssertHelper(ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const bool ExpressionOK); static const char *ADBG_GetFileBase(const char *const FileName_p); /************************************************************************* * 5. Definition of external functions ************************************************************************/ bool Do_ADBG_Expect( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const int Expected, const int Got, const char *const GotVarName_p, const ADBG_EnumTable_t *const EnumTable_p ) { if (ADBG_AssertHelper(Case_p, FileName_p, LineNumber, Expected == Got)) return true; if (EnumTable_p != NULL) { Do_ADBG_Log("%s:%d: %s has an unexpected value: 0x%x = %s, " "expected 0x%x = %s", ADBG_GetFileBase(FileName_p), LineNumber, GotVarName_p, Got, Do_ADBG_GetEnumName(Got, EnumTable_p), Expected, Do_ADBG_GetEnumName(Expected, EnumTable_p)); } else { Do_ADBG_Log( "%s:%d: %s has an unexpected value: 0x%x, expected 0x%x", ADBG_GetFileBase(FileName_p), LineNumber, GotVarName_p, Got, Expected); } return false; } bool Do_ADBG_ExpectNot( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const int NotExpected, const int Got, const char *const GotVarName_p, const ADBG_EnumTable_t *const EnumTable_p ) { if (ADBG_AssertHelper(Case_p, FileName_p, LineNumber, NotExpected != Got)) return true; if (EnumTable_p != NULL) { Do_ADBG_Log("%s:%d: %s has an unexpected value: 0x%x = %s, " "expected 0x%x = %s", ADBG_GetFileBase(FileName_p), LineNumber, GotVarName_p, Got, Do_ADBG_GetEnumName(Got, EnumTable_p), NotExpected, Do_ADBG_GetEnumName(NotExpected, EnumTable_p)); } else { Do_ADBG_Log( "%s:%d: %s has an unexpected value: 0x%zu, expected 0x%zu", ADBG_GetFileBase(FileName_p), LineNumber, GotVarName_p, (size_t)Got, (size_t)NotExpected); } return false; } bool Do_ADBG_ExpectBuffer( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const void *const ExpectedBuffer_p, const size_t ExpectedBufferLength, const char *const GotBufferName_p, const void *const GotBuffer_p, const char *const GotBufferLengthName_p, const size_t GotBufferLength ) { if (!ADBG_AssertHelper(Case_p, FileName_p, LineNumber, ExpectedBufferLength == GotBufferLength)) { Do_ADBG_Log( "%s:%d: %s has an unexpected value: %zu, expected %zu", ADBG_GetFileBase( FileName_p), LineNumber, GotBufferLengthName_p, GotBufferLength, ExpectedBufferLength); return false; } if (!ADBG_AssertHelper(Case_p, FileName_p, LineNumber, memcmp(ExpectedBuffer_p, GotBuffer_p, ExpectedBufferLength) == 0)) { Do_ADBG_Log("%s:%d: %s has an unexpected content:", ADBG_GetFileBase( FileName_p), LineNumber, GotBufferName_p); Do_ADBG_Log("Got"); Do_ADBG_HexLog(GotBuffer_p, GotBufferLength, 16); Do_ADBG_Log("Expected"); Do_ADBG_HexLog(ExpectedBuffer_p, ExpectedBufferLength, 16); return false; } return true; } bool Do_ADBG_ExpectPointer( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const void *Expected_p, const void *Got_p, const char *const GotVarName_p ) { if (ADBG_AssertHelper(Case_p, FileName_p, LineNumber, Expected_p == Got_p)) return true; Do_ADBG_Log("%s:%d: %s has an unexpected value: %p, expected %p", ADBG_GetFileBase(FileName_p), LineNumber, GotVarName_p, Got_p, Expected_p); return false; } bool Do_ADBG_ExpectPointerNotNULL( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const void *Got_p, const char *const GotVarName_p ) { if (ADBG_AssertHelper(Case_p, FileName_p, LineNumber, Got_p != NULL)) return true; Do_ADBG_Log("%s:%d: %s has an unexpected value: %p, expected not NULL", ADBG_GetFileBase(FileName_p), LineNumber, GotVarName_p, Got_p); return false; } bool Do_ADBG_ExpectCompareSigned( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const long Value1, const long Value2, const bool Result, const char *const Value1Str_p, const char *const ComparStr_p, const char *const Value2Str_p ) { if (!ADBG_AssertHelper(Case_p, FileName_p, LineNumber, Result)) { Do_ADBG_Log( "%s:%d: Expression \"%s %s %s\" (%ld %s %ld) is false", ADBG_GetFileBase(FileName_p), LineNumber, Value1Str_p, ComparStr_p, Value2Str_p, Value1, ComparStr_p, Value2); } return Result; } bool Do_ADBG_ExpectCompareUnsigned( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const unsigned long Value1, const unsigned long Value2, const bool Result, const char *const Value1Str_p, const char *const ComparStr_p, const char *const Value2Str_p ) { if (!ADBG_AssertHelper(Case_p, FileName_p, LineNumber, Result)) { Do_ADBG_Log( "%s:%d: Expression \"%s %s %s\" (%lu %s %lu) is false", ADBG_GetFileBase(FileName_p), LineNumber, Value1Str_p, ComparStr_p, Value2Str_p, Value1, ComparStr_p, Value2); } return Result; } bool Do_ADBG_ExpectComparePointer( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const void *const Value1_p, const void *const Value2_p, const bool Result, const char *const Value1Str_p, const char *const ComparStr_p, const char *const Value2Str_p ) { if (!ADBG_AssertHelper(Case_p, FileName_p, LineNumber, Result)) { Do_ADBG_Log( "%s:%d: Expression \"%s %s %s\" (%p %s %p) is false", ADBG_GetFileBase(FileName_p), LineNumber, Value1Str_p, ComparStr_p, Value2Str_p, Value1_p, ComparStr_p, Value2_p); } return Result; } /************************************************************************* * 6. Definitions of internal functions ************************************************************************/ static bool ADBG_AssertHelper( ADBG_Case_t *const Case_p, const char *const FileName_p, const int LineNumber, const bool ExpressionOK ) { ADBG_SubCase_t *SubCase_p = Case_p->CurrentSubCase_p; IDENTIFIER_NOT_USED(Case_p) SubCase_p->Result.NumTests++; if (!ExpressionOK) { SubCase_p->Result.NumFailedTests++; if (SubCase_p->Result.FirstFailedRow == 0) { SubCase_p->Result.FirstFailedRow = LineNumber; SubCase_p->Result.FirstFailedFile_p = ADBG_GetFileBase( FileName_p); } } return ExpressionOK; } static const char *ADBG_GetFileBase(const char *const FileName_p) { const char *Ch_p = FileName_p; const char *Base_p = FileName_p; while (*Ch_p != '\0') { if (*Ch_p == '\\') Base_p = Ch_p + 1; Ch_p++; } return Base_p; } optee_test-4.3.0/host/xtest/adbg/src/adbg_int.h000066400000000000000000000035061464074351400214350ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #ifndef __ADBG_INT_H #define __ADBG_INT_H #include #include #include #include #include #include #include #include "security_utils_hex.h" typedef struct ADBG_Result { int NumTests; int NumFailedTests; int NumSubTests; int NumFailedSubTests; int NumSubCases; int NumFailedSubCases; int FirstFailedRow; char const *FirstFailedFile_p; bool AbortTestSuite; } ADBG_Result_t; TAILQ_HEAD(ADBG_SubCaseHead, ADBG_SubCase); typedef struct ADBG_SubCaseHead ADBG_SubCaseHead_t; typedef struct ADBG_SubCase ADBG_SubCase_t; struct ADBG_SubCase { char *TestID_p; char *Title_p; ADBG_Result_t Result; ADBG_SubCase_t *Parent_p; /* The SubCase where this SubCase was added */ ADBG_SubCaseHead_t SubCasesList; /* SubCases created in this SubCase*/ TAILQ_ENTRY(ADBG_SubCase) Link; }; /* Typedefed in t_adbg.h */ struct ADBG_Case { const struct adbg_case_def *case_def; ADBG_SubCase_t *CurrentSubCase_p; ADBG_SubCase_t *FirstSubCase_p; ADBG_Result_t Result; TAILQ_ENTRY(ADBG_Case) Link; }; typedef struct { ADBG_Case_t *Case_p; ADBG_SubCase_t *CurrentSubCase_p; } ADBG_SubCase_Iterator_t; bool ADBG_Case_SubCaseIsMain(const ADBG_Case_t *const Case_p, const ADBG_SubCase_t *const SubCase_p); void ADBG_Case_IterateSubCase(ADBG_Case_t *Case_p, ADBG_SubCase_Iterator_t *Iterator_p); ADBG_SubCase_t *ADBG_Case_NextSubCase(ADBG_SubCase_Iterator_t *Iterator_p); ADBG_Case_t *ADBG_Case_New(const struct adbg_case_def *case_def); void ADBG_Case_Delete(ADBG_Case_t *Case_p); bool ADBG_TestIDMatches(const char *const TestID_p, const char *const Argument_p); #define IDENTIFIER_NOT_USED(x) { if (sizeof(&x)) {} } #endif /* __ADBG_INT_H */ optee_test-4.3.0/host/xtest/adbg/src/adbg_log.c000066400000000000000000000044201464074351400214130ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #include "adbg_int.h" #include #include /************************************************************************* * 2. Definition of external constants and variables ************************************************************************/ /************************************************************************* * 3. File scope types, constants and variables ************************************************************************/ /************************************************************************* * 4. Declaration of file local functions ************************************************************************/ /************************************************************************* * 5. Definition of external functions ************************************************************************/ /******************************************************************************/ /*! @fn void Do_ADBG_Log( void* This_p, char* Format, ...) * @brief * @param [in] This_p * @param [in] Format * @param [in] ... * @return void */ /******************************************************************************/ void Do_ADBG_Log(const char *const Format, ...) { va_list ap; va_start(ap, Format); vprintf(Format, ap); printf("\n"); va_end(ap); fflush(stdout); } void Do_ADBG_HexLog( const void *const Buf_p, const size_t Size, const size_t Cols ) { const uint8_t *Data_p = Buf_p; size_t n = 0; for (n = 0; n < Size; n += Cols) { char HexBuffer[ADBG_STRING_LENGTH_MAX]; char AsciiBuffer[ADBG_STRING_LENGTH_MAX / 3]; size_t m, NumCols; (void)SecUtil_BufferToHex(Data_p + n, MIN(Cols, Size - n), NULL, HexBuffer, sizeof(HexBuffer)); NumCols = MIN(MIN(Cols, Size - n), sizeof(AsciiBuffer) - 1); for (m = 0; m < NumCols; m++) { int ch = Data_p[n + m]; if (isprint(ch)) AsciiBuffer[m] = (char)ch; else AsciiBuffer[m] = '.'; } AsciiBuffer[m] = '\0'; Do_ADBG_Log(" %-*s %s", (int)Cols * 3, HexBuffer, AsciiBuffer); } } /************************************************************************* * 6. Definitions of internal functions ************************************************************************/ optee_test-4.3.0/host/xtest/adbg/src/adbg_run.c000066400000000000000000000164101464074351400214400ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ /************************************************************************* * 1. Includes ************************************************************************/ #include "adbg_int.h" /************************************************************************* * 2. Definition of external constants and variables ************************************************************************/ #ifndef TAILQ_CONCAT #define TAILQ_CONCAT(head1, head2, field) do { \ if (!TAILQ_EMPTY(head2)) { \ *(head1)->tqh_last = (head2)->tqh_first; \ (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ (head1)->tqh_last = (head2)->tqh_last; \ TAILQ_INIT((head2)); \ } \ } while (/*CONSTCOND*/0) #endif /************************************************************************* * 3. File scope types, constants and variables ************************************************************************/ TAILQ_HEAD(ADBG_CaseHead, ADBG_Case); typedef struct ADBG_CaseHead ADBG_CaseHead_t; typedef struct ADBG_Runner { ADBG_Result_t Result; const ADBG_Suite_Definition_t *Suite_p; ADBG_CaseHead_t CasesList; } ADBG_Runner_t; /************************************************************************* * 4. Declaration of file local functions ************************************************************************/ static int ADBG_RunSuite(ADBG_Runner_t *Runner_p, int argc, char *argv[]); /************************************************************************* * 5. Definition of external functions ************************************************************************/ int Do_ADBG_RunSuite( const ADBG_Suite_Definition_t *Suite_p, int argc, char *argv[] ) { ADBG_Runner_t *Runner_p = NULL; Runner_p = calloc(1, sizeof(*Runner_p)); if (Runner_p == NULL) { Do_ADBG_Log("calloc failed for Suite %s!", Suite_p->SuiteID_p); return -1; } TAILQ_INIT(&Runner_p->CasesList); Runner_p->Suite_p = Suite_p; int ret = ADBG_RunSuite(Runner_p, argc, argv); free(Runner_p); return ret; } int Do_ADBG_AppendToSuite( ADBG_Suite_Definition_t *Dest_p, ADBG_Suite_Definition_t *Source_p ) { char *p = NULL; size_t size = 0; /* Append name of 'Source_p' to name of 'Dest_p' */ size = strlen(Source_p->SuiteID_p); if (Dest_p->SuiteID_p) { size += strlen(Dest_p->SuiteID_p); size += 1; /* '+' */ } size += 1; /* '\0' */ p = malloc(size); if (!p) { fprintf(stderr, "malloc failed\n"); return -1; } if (Dest_p->SuiteID_p) snprintf(p, size, "%s+%s", Dest_p->SuiteID_p, Source_p->SuiteID_p); else snprintf(p, size, "%s", Source_p->SuiteID_p); free((void *)Dest_p->SuiteID_p); Dest_p->SuiteID_p = p; TAILQ_CONCAT(&Dest_p->cases, &Source_p->cases, link); return 0; } /************************************************************************* * 6. Definitions of internal functions ************************************************************************/ static int ADBG_RunSuite( ADBG_Runner_t *Runner_p, int argc, char *argv[] ) { ADBG_Case_t *Case_p = NULL; size_t NumSkippedTestCases = 0; int failed_test = 0; struct adbg_case_def *case_def = NULL; Do_ADBG_Log("######################################################"); Do_ADBG_Log("#"); Do_ADBG_Log("# %s", Runner_p->Suite_p->SuiteID_p); Do_ADBG_Log("#"); Do_ADBG_Log("######################################################"); TAILQ_FOREACH(case_def, &Runner_p->Suite_p->cases, link) { /* Default match if by default all tests are to be run */ bool HaveMatch = !argc || !strcmp(argv[0], "-x"); int i = 0; for (i = 0; i < argc; i++) { if (!strcmp(argv[i], "-x")) { i++; if (i >= argc) { Do_ADBG_Log("Error: -x "); return 1; } if (strstr(case_def->TestID_p, argv[i])) HaveMatch = false; } else { if (strstr(case_def->TestID_p, argv[i])) HaveMatch = true; } } if (!HaveMatch) { NumSkippedTestCases++; continue; } Case_p = ADBG_Case_New(case_def); if (Case_p == NULL) { Do_ADBG_Log("HEAP_ALLOC failed for Case %s!", case_def->TestID_p); Runner_p->Result.AbortTestSuite = 1; break; } TAILQ_INSERT_TAIL(&Runner_p->CasesList, Case_p, Link); /* Start the parent test case */ Do_ADBG_BeginSubCase(Case_p, "%s", case_def->Title_p); case_def->Run_fp(Case_p); /* End abondoned subcases */ while (Case_p->CurrentSubCase_p != Case_p->FirstSubCase_p) Do_ADBG_EndSubCase(Case_p, NULL); /* End the parent test case */ Do_ADBG_EndSubCase(Case_p, "%s", case_def->Title_p); /* Sum up the errors */ Runner_p->Result.NumTests += Case_p->Result.NumTests + Case_p->Result.NumSubTests; Runner_p->Result.NumFailedTests += Case_p->Result.NumFailedTests + Case_p->Result. NumFailedSubTests; Runner_p->Result.NumSubCases++; if (Case_p->Result.NumFailedTests + Case_p->Result.NumFailedSubTests > 0) Runner_p->Result.NumFailedSubCases++; Runner_p->Result.AbortTestSuite = Case_p->Result.AbortTestSuite; if (Runner_p->Result.AbortTestSuite) { Do_ADBG_Log("Test suite aborted by %s!", case_def->TestID_p); break; } } Do_ADBG_Log("+-----------------------------------------------------"); if (argc > 0) { bool test_exclusion = false; int i = 0; for (i = 0; i < argc; i++) { if (!strcmp(argv[i], "-x")) { test_exclusion = true; continue; } Do_ADBG_Log( "Result of testsuite %s filtered by \"%s%s\":", Runner_p->Suite_p->SuiteID_p, test_exclusion ? "-x " : "", argv[i]); test_exclusion = false; } } else { Do_ADBG_Log("Result of testsuite %s:", Runner_p->Suite_p->SuiteID_p); } TAILQ_FOREACH(Case_p, &Runner_p->CasesList, Link) { ADBG_SubCase_Iterator_t Iterator; ADBG_SubCase_t *SubCase_p; ADBG_Case_IterateSubCase(Case_p, &Iterator); while ((SubCase_p = ADBG_Case_NextSubCase(&Iterator)) != NULL) { if (SubCase_p->Result.NumFailedTests + SubCase_p->Result.NumFailedSubTests > 0) { if (SubCase_p->Result.FirstFailedFile_p != NULL) { Do_ADBG_Log( "%s FAILED first error at %s:%d", SubCase_p->TestID_p, SubCase_p-> Result.FirstFailedFile_p, SubCase_p-> Result.FirstFailedRow); } else { Do_ADBG_Log("%s FAILED", SubCase_p->TestID_p); } } else if (ADBG_Case_SubCaseIsMain(Case_p, SubCase_p)) { /* A level one test case is displayed if successfull too */ Do_ADBG_Log("%s OK", SubCase_p->TestID_p); } } } Do_ADBG_Log("+-----------------------------------------------------"); if (Runner_p->Result.AbortTestSuite) Do_ADBG_Log("Test suite was ABORTED"); Do_ADBG_Log("%d subtest%s of which %d failed", Runner_p->Result.NumTests, Runner_p->Result.NumTests != 1 ? "s" : "", Runner_p->Result.NumFailedTests); Do_ADBG_Log("%d test case%s of which %d failed", Runner_p->Result.NumSubCases, Runner_p->Result.NumSubCases != 1 ? "s" : "", Runner_p->Result.NumFailedSubCases); Do_ADBG_Log("%zu test case%s skipped", NumSkippedTestCases, NumSkippedTestCases != 1 ? "s were" : " was"); failed_test = Runner_p->Result.NumFailedSubCases; while (true) { Case_p = TAILQ_FIRST(&Runner_p->CasesList); if (Case_p == NULL) break; TAILQ_REMOVE(&Runner_p->CasesList, Case_p, Link); ADBG_Case_Delete(Case_p); } return failed_test; } optee_test-4.3.0/host/xtest/adbg/src/security_utils_hex.c000066400000000000000000000142671464074351400236220ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ /************************************************************************* * 1. Includes *************************************************************************/ #include #include #include #include #include "security_utils_hex.h" #ifndef MAX #define MAX(a, b) ((a) > (b) ? (a) : (b)) #endif #ifndef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif /************************************************************************* * 2. Definition of external constants and variables *************************************************************************/ /************************************************************************* * 3. File scope types, constants and variables *************************************************************************/ static const char SecUtil_HexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; /************************************************************************* * 4. Declaration of file local functions *************************************************************************/ /************************************************************************* * 5. Definition of external functions *************************************************************************/ #if 0 void SecBase_HexPrintBuffer( const char *Prefix_p, const char *Postfix_p, const char *BufferName_p, const void *Buffer_p, size_t BufferLength ) { char LineBuf[67]; size_t LinePos = 0; const uint8 *Data_p = Buffer_p; size_t n; char EmptyString[] = ""; if (Prefix_p == NULL) Prefix_p = EmptyString; if (Postfix_p == NULL) Postfix_p = EmptyString; if (BufferName_p != NULL) { DELAY_MS(5); printf("%s%s: Size: %d%s", Prefix_p, BufferName_p, BufferLength, Postfix_p); } /* Initialize the line buffer for a new line */ SEC_MEM_SET(LineBuf, ' ', sizeof(LineBuf)); LineBuf[sizeof(LineBuf) - 1] = '\0'; LinePos = 0; for (n = 0; n < BufferLength; n++) { char Separator; char PrintableChar; if (((n + 1) % 4) == 0) Separator = ' '; else Separator = ':'; if (isprint(Data_p[n])) PrintableChar = (char)Data_p[n]; else PrintableChar = '.'; LineBuf[LinePos * 3 + 0] = SecBase_HexChars[Data_p[n] >> 4]; LineBuf[LinePos * 3 + 1] = SecBase_HexChars[Data_p[n] & 0x0F]; LineBuf[LinePos * 3 + 2] = Separator; LineBuf[50 + LinePos] = PrintableChar; LinePos++; if (LinePos == 16) { DELAY_MS(5); printf("%s%s%s", Prefix_p, LineBuf, Postfix_p); /* Initialize the line buffer for a new line */ SEC_MEM_SET(LineBuf, ' ', sizeof(LineBuf)); LineBuf[sizeof(LineBuf) - 1] = '\0'; LinePos = 0; } } if (LinePos != 0) { DELAY_MS(5); printf("%s%s%s", Prefix_p, LineBuf, Postfix_p); } (void)fflush(stdout); } #endif #if 0 void SecUtil_CHexPrintBuffer( const char *Prefix_p, const char *Postfix, const void *Buffer_p, size_t BufferLength ) { char LineBuf[84]; const uint8 *Data_p = Buffer_p; size_t n; char EmptyString[] = ""; static const SecUtil_HexFormat_t HexFormat = { "0x", ", ", ", " }; if (Prefix_p == NULL) Prefix_p = EmptyString; if (Postfix == NULL) Postfix = EmptyString; for (n = 0; n < BufferLength; n += 16) { (void)SecUtil_BufferToHex(Data_p + n, MIN(16, BufferLength - n), &HexFormat, LineBuf, sizeof(LineBuf)); DELAY_MS(5); printf("%s%s%s", Prefix_p, LineBuf, Postfix); } } #endif size_t SecUtil_BufferToHex( const void *const Buffer_p, size_t BufferLength, const SecUtil_HexFormat_t *const HexFormat_p, char *const Destination_p, const size_t DestinationLength ) { const uint8_t *Data_p = Buffer_p; size_t UsedDestLength = 0; size_t n = 0; const char *ByteSeparator_p = NULL; const char *GroupSeparator_p = NULL; const char *BytePrefix_p = NULL; size_t BytePrefixLength = 0; if (DestinationLength > 1) Destination_p[0] = '\0'; UsedDestLength = 1; if (HexFormat_p != NULL) { BytePrefix_p = HexFormat_p->BytePrefix_p; ByteSeparator_p = HexFormat_p->ByteSeparator_p; GroupSeparator_p = HexFormat_p->GroupSeparator_p; } if (BytePrefix_p == NULL) BytePrefix_p = ""; BytePrefixLength = strlen(BytePrefix_p); if (ByteSeparator_p == NULL) ByteSeparator_p = ":"; if (GroupSeparator_p == NULL) GroupSeparator_p = " "; /* * This for loop is unnecessarily complicated due to * the absense of both snprintf and strlcat */ for (n = 0; n < BufferLength; n++) { const char *Separator_p = NULL; size_t SeparatorLength = 0; /* Establish separator for this byte and the next */ if (n == BufferLength - 1) Separator_p = ""; else if ((n + 1) % 4 == 0) Separator_p = GroupSeparator_p; else Separator_p = ByteSeparator_p; SeparatorLength = strlen(Separator_p); /* Insert the Byte prefix */ if (UsedDestLength < DestinationLength) { size_t CopyLength = 0; CopyLength = MIN(BytePrefixLength, DestinationLength - UsedDestLength); memcpy(Destination_p + UsedDestLength - 1, BytePrefix_p, CopyLength); Destination_p[UsedDestLength - 1 + CopyLength] = '\0'; } UsedDestLength += BytePrefixLength; /* Insert the first nibble of the ASCII hexadecimal byte */ if (UsedDestLength < DestinationLength) { Destination_p[UsedDestLength - 1] = SecUtil_HexChars[Data_p[n] >> 4]; Destination_p[UsedDestLength] = '\0'; } UsedDestLength++; /* Insert the second nibble of the ASCII hexadecimal byte */ if (UsedDestLength < DestinationLength) { Destination_p[UsedDestLength - 1] = SecUtil_HexChars[Data_p[n] & 0x0F]; Destination_p[UsedDestLength] = '\0'; } UsedDestLength++; /* Insert the separator */ if (UsedDestLength < DestinationLength) { size_t CopyLength = 0; CopyLength = MIN(SeparatorLength, DestinationLength - UsedDestLength); memcpy(Destination_p + UsedDestLength - 1, Separator_p, CopyLength); Destination_p[UsedDestLength - 1 + CopyLength] = '\0'; } UsedDestLength += SeparatorLength; } return UsedDestLength; } /************************************************************************* * 6. Definition of internal functions *************************************************************************/ optee_test-4.3.0/host/xtest/adbg/src/security_utils_hex.h000066400000000000000000000117731464074351400236260ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #ifndef INCLUSION_GUARD_UTILS_HEX_H #define INCLUSION_GUARD_UTILS_HEX_H /************************************************************************* * 1. Includes *************************************************************************/ /************************************************************************* * 2. Types, constants and external variables *************************************************************************/ #if 0 /* Should format into a buffer instead */ /** ************************************************************************** * Prints data hexadecimally to stdout * * Each line of binary data is printed as 66 characters on the format * shown below: * XX:XX:XX:XX XX:XX:XX:XX XX:XX:XX:XX XX:XX:XX:XX xxxxxxxxxxxxxxxx * * @param [in] Prefix_p String printed first each line, may be NULL * to indicate the empty string * @param [in] Postfix_p String printed last each line, may be NULL * to indicate the empty string * @param [in] BufferName_p Name of the buffer, if != NULL the name of the * buffer is printed together with the length of * the buffer before the data is printed * @param [in] Buffer_p Pointer to a buffer holding the data * @param [in] BufferLength Length of the buffer above * * @sigbased No * @waitmode Wait mode **************************************************************************/ void SecUtil_HexPrintBuffer(const char *Prefix_p, const char *Postfix_p, const char *BufferName_p, const void *Buffer_p, size_t BufferLength); #endif #if 0 /** ************************************************************************** * Prints data hexadecimally in a format suitable for initialization of * an array in c. * * 0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX, * 0xXX,0xXX, * * @param [in] Prefix_p String printed first each line, may be NULL * to indicate the empty string * @param [in] Postfix_p String printed last each line, may be NULL * to indicate the empty string * @param [in] Buffer_p Pointer to a buffer holding the data * @param [in] BufferLength Length of the buffer above * * @sigbased No * @waitmode Wait mode **************************************************************************/ void SecUtil_CHexPrintBuffer(const char *Prefix_p, const char *Postfix_p, const void *Buffer_p, size_t BufferLength); #endif /************************************************************************** * Specifies how hexadecial data should be formated * * @param BytePrefix_p ASCII string prefix for each hexadecimal * byte printed (for example "0x"). If NULL * nothing is inserted in front of a byte. * @param ByteSeparator_p ASCII string to insert between each printed * hexadecimal byte. If NULL a ":" is inserted * between each hexadecial byte. * @param GroupSeparator_p ASCII string to insert instead of * ByteSeparator_p between each group * of printed hexadecimal bytes. If NULL " " * is used as group separator. **************************************************************************/ typedef struct { const char *BytePrefix_p; const char *ByteSeparator_p; const char *GroupSeparator_p; } SecUtil_HexFormat_t; /************************************************************************* * 3. Functions *************************************************************************/ /**************************************************************************** * Formats data hexadecimally into an NULL terminated ASCII string in * the format below. * * 0xXX:0xXX:0xXX:0xXX 0xXX:0xXX:0xXX:0xXX * 0xXX:0xXX:0xXX:0xXX 0xXX:0xXX:0xXX:0xXX * * The colons and spaces in the result can be cusomized with ByteSeparator_p * and GroupSeparator_p respectivly. * * @param [in] Buffer_p Pointer to a buffer holding the data * @param [in] BufferLength Length of the buffer above * @param [in] HexFormat_p How the data should be formatted * @param [in, out] Destination_p Output ASCII buffer * @param [in] DestinationLength Length of output buffer * * @returns The size of a needed DestinationLength, if greater than supplied * DestinationLength the result in Destination_p is truncated but * still NULL terminated. * @sigbased No * @waitmode Wait mode **************************************************************************/ size_t SecUtil_BufferToHex(const void *const Buffer_p, size_t BufferLength, const SecUtil_HexFormat_t *const HexFormat_p, char *const Destination_p, const size_t DestinationLength); #endif /*INCLUSION_GUARD_UTILS_HEX_H*/ optee_test-4.3.0/host/xtest/aes_gcm_counter_overflow_test_decrypt.h000066400000000000000000001263541464074351400260620ustar00rootroot00000000000000/* SPDX-License-Identifier: Apache-2.0 */ /* * Copyright 2024 NXP */ { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xf9, 0x5f, 0xde, 0x4a, 0x75, 0x19, 0x13, 0x20, 0x2a, 0xee, 0xee, 0x32, 0xa0, 0xb5, 0x57, 0x53, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x00, 0x07, 0x8d, 0x10, 0x9d, 0x92, 0x14, 0x3f, 0xcd, 0x5d, 0xf5, 0x67, 0x21, 0xb8, 0x84, 0xfa, 0xc6, 0x4a, 0xc7, 0x76, 0x2c, 0xc0, 0x9e, 0xea, 0x2a, 0x3c, 0x68, 0xe9, 0x2a, 0x17, 0xbd, 0xb5, 0x75, 0xf8, 0x7b, 0xda, 0x18, 0xbe, 0x56, 0x4e, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x15, 0x2a, 0x65, 0x04, 0x5f, 0xe6, 0x74, 0xf9, 0x76, 0x27, 0x42, 0x7a, 0xf5, 0xbe, 0x22, 0xda, }, .tag_len = 16, .line = __LINE__, .id = 77 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x7b, 0x95, 0xb8, 0xc3, 0x56, 0x81, 0x0a, 0x84, 0x71, 0x1d, 0x68, 0x15, 0x0a, 0x1b, 0x77, 0x50, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x84, 0xd4, 0xc9, 0xc0, 0x8b, 0x4f, 0x48, 0x28, 0x61, 0xe3, 0xa9, 0xc6, 0xc3, 0x5b, 0xc4, 0xd9, 0x1d, 0xf9, 0x27, 0x37, 0x45, 0x13, 0xbf, 0xd4, 0x9f, 0x43, 0x6b, 0xd7, 0x3f, 0x32, 0x52, 0x85, 0xda, 0xef, 0x4f, 0xf7, 0xe1, 0x3d, 0x46, 0xa6, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x21, 0x3a, 0x3c, 0xb9, 0x38, 0x55, 0xd1, 0x8e, 0x69, 0x33, 0x7e, 0xee, 0x66, 0xae, 0xec, 0x07, }, .tag_len = 16, .line = __LINE__, .id = 78 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x1a, 0x55, 0x2e, 0x67, 0xcd, 0xc4, 0xdc, 0x1a, 0x33, 0xb8, 0x24, 0x87, 0x4e, 0xbf, 0x0b, 0xed, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x94, 0x8c, 0xa3, 0x7a, 0x8e, 0x66, 0x49, 0xe8, 0x8a, 0xef, 0xfb, 0x1c, 0x59, 0x8f, 0x36, 0x07, 0x00, 0x77, 0x02, 0x41, 0x7e, 0xa0, 0xe0, 0xbc, 0x3c, 0x60, 0xad, 0x5a, 0x94, 0x98, 0x86, 0xde, 0x96, 0x8c, 0xf5, 0x3e, 0xa6, 0x46, 0x2a, 0xed, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x99, 0xb3, 0x81, 0xbf, 0xa2, 0xaf, 0x97, 0x51, 0xc3, 0x9d, 0x1b, 0x6e, 0x86, 0xd1, 0xbe, 0x6a, }, .tag_len = 16, .line = __LINE__, .id = 79 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xdd, 0x9d, 0x0b, 0x4a, 0x0c, 0x3d, 0x68, 0x15, 0x24, 0xbf, 0xfc, 0xa3, 0x1d, 0x90, 0x76, 0x61, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x64, 0xb1, 0x93, 0x14, 0xc3, 0x1a, 0xf4, 0x5a, 0xcc, 0xdf, 0x7e, 0x3c, 0x4d, 0xb7, 0x9f, 0x0d, 0x94, 0x8c, 0xa3, 0x7a, 0x8e, 0x66, 0x49, 0xe8, 0x8a, 0xef, 0xfb, 0x1c, 0x59, 0x8f, 0x36, 0x07, 0x00, 0x77, 0x02, 0x41, 0x7e, 0xa0, 0xe0, 0xbc, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x52, 0x81, 0xef, 0xc7, 0xf1, 0x3a, 0xc8, 0xe1, 0x4c, 0xcf, 0x5d, 0xca, 0x7b, 0xfb, 0xfd, 0xd1, }, .tag_len = 16, .line = __LINE__, .id = 80 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x57, 0xc5, 0x64, 0x3c, 0x4e, 0x37, 0xb4, 0x04, 0x1d, 0xb7, 0x94, 0xcf, 0xe8, 0xe1, 0xf0, 0xf4, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x2b, 0xb6, 0x9c, 0x3e, 0x5d, 0x1f, 0x91, 0x81, 0x5c, 0x6b, 0x87, 0xa0, 0xd5, 0xbb, 0xea, 0x71, 0x64, 0xb1, 0x93, 0x14, 0xc3, 0x1a, 0xf4, 0x5a, 0xcc, 0xdf, 0x7e, 0x3c, 0x4d, 0xb7, 0x9f, 0x0d, 0x94, 0x8c, 0xa3, 0x7a, 0x8e, 0x66, 0x49, 0xe8, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xa3, 0xea, 0x2c, 0x09, 0xee, 0x4f, 0x8c, 0x8a, 0x12, 0xf4, 0x5c, 0xdd, 0xf9, 0xae, 0xff, 0x81, }, .tag_len = 16, .line = __LINE__, .id = 81 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x99, 0x82, 0x1c, 0x2d, 0xd5, 0xda, 0xec, 0xde, 0xd0, 0x73, 0x00, 0xf5, 0x77, 0xf7, 0xaf, 0xf1, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x12, 0x7a, 0xf9, 0xb3, 0x9e, 0xcd, 0xfc, 0x57, 0xbb, 0x11, 0xa2, 0x84, 0x7c, 0x7c, 0x2d, 0x3d, 0x8f, 0x93, 0x8f, 0x40, 0xf8, 0x77, 0xe0, 0xc4, 0xaf, 0x37, 0xd0, 0xfe, 0x9a, 0xf0, 0x33, 0x05, 0x2b, 0xd5, 0x37, 0xc4, 0xae, 0x97, 0x8f, 0x60, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x07, 0xeb, 0x2f, 0xe4, 0xa9, 0x58, 0xf8, 0x43, 0x4d, 0x40, 0x68, 0x48, 0x99, 0x50, 0x7c, 0x7c, }, .tag_len = 16, .line = __LINE__, .id = 82 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x5e, 0x4a, 0x39, 0x00, 0x14, 0x23, 0x58, 0xd1, 0xc7, 0x74, 0xd8, 0xd1, 0x24, 0xd8, 0xd2, 0x7d, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x0c, 0xf6, 0xae, 0x47, 0x15, 0x6b, 0x14, 0xdc, 0xe0, 0x3c, 0x8a, 0x07, 0xa2, 0xe1, 0x72, 0xb1, 0x12, 0x7a, 0xf9, 0xb3, 0x9e, 0xcd, 0xfc, 0x57, 0xbb, 0x11, 0xa2, 0x84, 0x7c, 0x7c, 0x2d, 0x3d, 0x8f, 0x93, 0x8f, 0x40, 0xf8, 0x77, 0xe0, 0xc4, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xf1, 0x45, 0xc2, 0xdc, 0xaf, 0x33, 0x9e, 0xed, 0xe4, 0x27, 0xbe, 0x93, 0x43, 0x57, 0xea, 0xc0, }, .tag_len = 16, .line = __LINE__, .id = 83 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xd4, 0x12, 0x56, 0x76, 0x56, 0x29, 0x84, 0xc0, 0xfe, 0x7c, 0xb0, 0xbd, 0xd1, 0xa9, 0x54, 0xe8, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xf0, 0xc6, 0xff, 0xc1, 0x8b, 0xd4, 0x6d, 0xf5, 0x56, 0x91, 0x85, 0xa9, 0xaf, 0xd1, 0x69, 0xeb, 0x0c, 0xf6, 0xae, 0x47, 0x15, 0x6b, 0x14, 0xdc, 0xe0, 0x3c, 0x8a, 0x07, 0xa2, 0xe1, 0x72, 0xb1, 0x12, 0x7a, 0xf9, 0xb3, 0x9e, 0xcd, 0xfc, 0x57, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xfa, 0xcd, 0x0b, 0xfe, 0x87, 0x01, 0xb7, 0xb4, 0xa2, 0xba, 0x96, 0xd9, 0x8a, 0xf5, 0x2b, 0xd9, }, .tag_len = 16, .line = __LINE__, .id = 84 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xb9, 0x7e, 0xc6, 0x2a, 0x5e, 0x59, 0x00, 0xcc, 0xf9, 0xe4, 0xbe, 0x33, 0x2e, 0x33, 0x60, 0x91, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xd6, 0x92, 0x8e, 0x09, 0x4c, 0x06, 0xe0, 0xa7, 0xc4, 0xdb, 0x42, 0x18, 0x4c, 0xf7, 0x52, 0x9e, 0x95, 0xde, 0x88, 0xb7, 0x67, 0xed, 0xeb, 0xe9, 0xb3, 0x43, 0x00, 0x0b, 0xe3, 0xda, 0xb4, 0x7e, 0xa0, 0x8b, 0x74, 0x42, 0x93, 0xee, 0xd6, 0x98, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xa0, 0x3e, 0x72, 0x9d, 0xcf, 0xd7, 0xa0, 0x31, 0x55, 0x65, 0x5f, 0xec, 0xe8, 0xaf, 0xfd, 0x7e, }, .tag_len = 16, .line = __LINE__, .id = 85 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x7e, 0xb6, 0xe3, 0x07, 0x9f, 0xa0, 0xb4, 0xc3, 0xee, 0xe3, 0x66, 0x17, 0x7d, 0x1c, 0x1d, 0x1d, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xd8, 0x2c, 0xe5, 0x87, 0x71, 0xbf, 0x64, 0x87, 0x11, 0x6b, 0xf8, 0xe9, 0x64, 0x21, 0x87, 0x7e, 0xd6, 0x92, 0x8e, 0x09, 0x4c, 0x06, 0xe0, 0xa7, 0xc4, 0xdb, 0x42, 0x18, 0x4c, 0xf7, 0x52, 0x9e, 0x95, 0xde, 0x88, 0xb7, 0x67, 0xed, 0xeb, 0xe9, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x1e, 0x43, 0x92, 0x68, 0x28, 0xbc, 0x9a, 0x16, 0x14, 0xc7, 0xb1, 0x63, 0x90, 0x96, 0xc1, 0x95, }, .tag_len = 16, .line = __LINE__, .id = 86 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x03, 0x14, 0xfc, 0xd1, 0x0f, 0xdd, 0x67, 0x5d, 0x3c, 0x61, 0x29, 0x62, 0xc9, 0x31, 0xf6, 0x35, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xa1, 0x97, 0xa3, 0x7a, 0x5d, 0x79, 0x69, 0x70, 0x78, 0x53, 0x6b, 0xc2, 0x7f, 0xe4, 0x6c, 0xd8, 0xd4, 0x75, 0x52, 0x6d, 0x90, 0x44, 0xaa, 0x94, 0xf0, 0x88, 0xa0, 0x54, 0xf8, 0xe3, 0x80, 0xc6, 0x4f, 0x79, 0x41, 0x47, 0x95, 0xc6, 0x14, 0x80, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xf0, 0x8b, 0xad, 0xdf, 0x0b, 0x52, 0x85, 0xc9, 0x1f, 0xc0, 0x6a, 0x67, 0xfe, 0x47, 0x08, 0xca, }, .tag_len = 16, .line = __LINE__, .id = 87 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xc4, 0xdc, 0xd9, 0xfc, 0xce, 0x24, 0xd3, 0x52, 0x2b, 0x66, 0xf1, 0x46, 0x9a, 0x1e, 0x8b, 0xb9, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x14, 0x9f, 0xde, 0x9a, 0xbb, 0xd3, 0xa4, 0x3c, 0x25, 0x48, 0x57, 0x5e, 0x0d, 0xb9, 0xfb, 0x84, 0xa1, 0x97, 0xa3, 0x7a, 0x5d, 0x79, 0x69, 0x70, 0x78, 0x53, 0x6b, 0xc2, 0x7f, 0xe4, 0x6c, 0xd8, 0xd4, 0x75, 0x52, 0x6d, 0x90, 0x44, 0xaa, 0x94, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x62, 0xa4, 0xb6, 0x87, 0x5c, 0x28, 0x83, 0x45, 0xd6, 0xa4, 0x54, 0x39, 0x9e, 0xac, 0x1a, 0xfa, }, .tag_len = 16, .line = __LINE__, .id = 88 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x02, 0x9e, 0x0e, 0x77, 0x7d, 0xb0, 0x92, 0xb1, 0x25, 0x35, 0xd0, 0x43, 0x01, 0x2f, 0x09, 0xba, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xf8, 0x3c, 0xee, 0x46, 0x73, 0x36, 0xe1, 0xa0, 0x9b, 0x75, 0xf2, 0x4e, 0x9b, 0x43, 0x85, 0xc9, 0x9c, 0x13, 0xe6, 0xaf, 0x72, 0x22, 0x56, 0xa6, 0x61, 0x29, 0xec, 0xe9, 0x61, 0xfe, 0x80, 0x3b, 0x16, 0x7b, 0xad, 0x20, 0x6f, 0x50, 0x17, 0xfb, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x09, 0x33, 0x8a, 0x42, 0xf0, 0xac, 0xc1, 0x4f, 0x97, 0xc0, 0x64, 0xf5, 0x2f, 0x5f, 0x16, 0x88, }, .tag_len = 16, .line = __LINE__, .id = 157 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xf1, 0xbe, 0x3b, 0x06, 0xb7, 0xfe, 0xac, 0x07, 0xe7, 0xea, 0xb6, 0x29, 0xf5, 0x56, 0x04, 0x7b, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x0b, 0x32, 0xb6, 0x48, 0xa2, 0xc2, 0x8e, 0x9e, 0xdd, 0x7c, 0xee, 0x08, 0xee, 0xeb, 0x90, 0x00, 0x34, 0xca, 0xe7, 0x21, 0x5e, 0x5a, 0xb1, 0xe2, 0x01, 0xbd, 0x2e, 0xed, 0x10, 0x32, 0xc5, 0xa9, 0x78, 0x66, 0xba, 0x58, 0x2a, 0x34, 0x58, 0xa4, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x90, 0xbe, 0x36, 0x06, 0xde, 0x58, 0xbd, 0x77, 0x8f, 0xa5, 0xbe, 0xff, 0x4a, 0x41, 0x02, 0xbd, }, .tag_len = 16, .line = __LINE__, .id = 158 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xde, 0x9e, 0xb6, 0x3b, 0x1d, 0xae, 0xd3, 0x21, 0xa1, 0x1b, 0x75, 0x47, 0xcc, 0x9e, 0x22, 0x3c, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x57, 0x5e, 0x2e, 0xce, 0xc2, 0xb3, 0xc7, 0x2d, 0x4e, 0x80, 0x83, 0x0d, 0x0d, 0x85, 0x9a, 0xd9, 0xe4, 0x2c, 0x29, 0xc4, 0xa6, 0x8d, 0x8d, 0x9d, 0x8d, 0x23, 0x43, 0x4d, 0xe2, 0xcd, 0x07, 0x73, 0x3b, 0xe4, 0x9d, 0x62, 0xac, 0x1a, 0xe0, 0x85, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x6e, 0x4d, 0x63, 0x96, 0x12, 0x5a, 0x10, 0xdf, 0x54, 0x43, 0xbd, 0x0c, 0xbc, 0x85, 0x66, 0xd1, }, .tag_len = 16, .line = __LINE__, .id = 159 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x40, 0xbb, 0x0a, 0xbe, 0xbc, 0x48, 0x3f, 0xf6, 0xd5, 0x67, 0x12, 0x41, 0xff, 0x5d, 0x66, 0xc6, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x2a, 0x81, 0x88, 0x88, 0xd1, 0xf0, 0x9f, 0x32, 0xaa, 0x7b, 0xee, 0xdd, 0x28, 0x69, 0xb4, 0x46, 0x57, 0x5e, 0x2e, 0xce, 0xc2, 0xb3, 0xc7, 0x2d, 0x4e, 0x80, 0x83, 0x0d, 0x0d, 0x85, 0x9a, 0xd9, 0xe4, 0x2c, 0x29, 0xc4, 0xa6, 0x8d, 0x8d, 0x9d, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xdc, 0x48, 0x1f, 0x17, 0x25, 0x45, 0x26, 0x8e, 0xff, 0x63, 0xab, 0x04, 0x90, 0x40, 0x3d, 0xc3, }, .tag_len = 16, .line = __LINE__, .id = 160 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x20, 0xd5, 0xcf, 0x30, 0x5e, 0x63, 0x0a, 0x8f, 0x49, 0xe3, 0xbb, 0x4b, 0xab, 0x18, 0xab, 0xc9, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x96, 0xd3, 0x6b, 0x79, 0x5f, 0x8e, 0x7e, 0xdf, 0x6a, 0x8e, 0x0d, 0xbc, 0xd2, 0x0d, 0x6c, 0x07, 0x2a, 0x81, 0x88, 0x88, 0xd1, 0xf0, 0x9f, 0x32, 0xaa, 0x7b, 0xee, 0xdd, 0x28, 0x69, 0xb4, 0x46, 0x57, 0x5e, 0x2e, 0xce, 0xc2, 0xb3, 0xc7, 0x2d, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x8a, 0x3a, 0x22, 0xbf, 0x25, 0x92, 0x95, 0x8b, 0x93, 0x02, 0x92, 0xaa, 0x47, 0xf5, 0x90, 0xe8, }, .tag_len = 16, .line = __LINE__, .id = 161 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x25, 0x53, 0x58, 0xa7, 0x1a, 0x0e, 0x57, 0x31, 0xf6, 0xdd, 0x6c, 0xe2, 0x8e, 0x15, 0x8a, 0xe6, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xcf, 0xce, 0x3d, 0x92, 0x0f, 0x0e, 0x01, 0xf0, 0xbb, 0x49, 0xa7, 0x51, 0x95, 0x5b, 0x23, 0x6d, 0x1b, 0x88, 0x7b, 0xae, 0xfd, 0x25, 0xc4, 0x7f, 0x41, 0x30, 0x3c, 0x46, 0xd5, 0xc7, 0xbf, 0x9c, 0xa4, 0xc2, 0xc4, 0x5a, 0x8f, 0x1e, 0x66, 0x56, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x2d, 0xb9, 0xdc, 0x1b, 0x7f, 0xd3, 0x15, 0xdf, 0x1c, 0x95, 0x43, 0x24, 0x32, 0xfc, 0xf4, 0x74, }, .tag_len = 16, .line = __LINE__, .id = 162 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xbb, 0x76, 0xe4, 0x22, 0xbb, 0xe8, 0xbb, 0xe6, 0x82, 0xa1, 0x0b, 0xe4, 0xbd, 0xd6, 0xce, 0x1c, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x69, 0xa2, 0x41, 0x69, 0x79, 0x2e, 0x9a, 0x07, 0xf6, 0xe6, 0xf4, 0x73, 0x6f, 0xa9, 0x72, 0xdc, 0xcf, 0xce, 0x3d, 0x92, 0x0f, 0x0e, 0x01, 0xf0, 0xbb, 0x49, 0xa7, 0x51, 0x95, 0x5b, 0x23, 0x6d, 0x1b, 0x88, 0x7b, 0xae, 0xfd, 0x25, 0xc4, 0x7f, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x82, 0xad, 0x96, 0x7f, 0x7a, 0xc1, 0x90, 0x84, 0x35, 0x4f, 0x69, 0xa7, 0x51, 0x44, 0x3f, 0xb2, }, .tag_len = 16, .line = __LINE__, .id = 163 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xdb, 0x18, 0x21, 0xac, 0x59, 0xc3, 0x8e, 0x9f, 0x1e, 0x25, 0xa2, 0xee, 0xe9, 0x93, 0x03, 0x13, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x4e, 0x44, 0x17, 0xa8, 0x3b, 0xea, 0xc1, 0xeb, 0x7e, 0x24, 0x45, 0x6a, 0x05, 0xf6, 0xba, 0x55, 0x69, 0xa2, 0x41, 0x69, 0x79, 0x2e, 0x9a, 0x07, 0xf6, 0xe6, 0xf4, 0x73, 0x6f, 0xa9, 0x72, 0xdc, 0xcf, 0xce, 0x3d, 0x92, 0x0f, 0x0e, 0x01, 0xf0, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x47, 0x2d, 0x5d, 0xd5, 0x82, 0xdc, 0x05, 0xef, 0x5f, 0xc4, 0x96, 0xb6, 0x12, 0x02, 0x3c, 0xb2, }, .tag_len = 16, .line = __LINE__, .id = 164 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xf7, 0xa0, 0x2e, 0xcc, 0xa0, 0x30, 0x64, 0xb2, 0xef, 0x3c, 0xce, 0x9f, 0xea, 0xb7, 0x9f, 0x07, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x6f, 0x8e, 0x17, 0x4e, 0xfc, 0xa3, 0x09, 0x72, 0x99, 0xf7, 0x84, 0xef, 0xd4, 0xca, 0xff, 0x0b, 0xf1, 0x68, 0xc3, 0xe5, 0x16, 0x5b, 0x9a, 0xd3, 0xd2, 0x00, 0x62, 0x00, 0x98, 0x48, 0x04, 0x4e, 0xef, 0x8f, 0x31, 0xf7, 0xd2, 0xfe, 0xad, 0x05, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xca, 0xff, 0x72, 0x38, 0x26, 0xdf, 0x15, 0x09, 0x34, 0xae, 0xe3, 0x20, 0x1b, 0xa1, 0x75, 0xe7, }, .tag_len = 16, .line = __LINE__, .id = 165 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x69, 0x85, 0x92, 0x49, 0x01, 0xd6, 0x88, 0x65, 0x9b, 0x40, 0xa9, 0x99, 0xd9, 0x74, 0xdb, 0xfd, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xaf, 0x19, 0x30, 0x90, 0xce, 0x3d, 0x43, 0xa3, 0x88, 0xa1, 0xd2, 0x94, 0xa0, 0x96, 0x16, 0x90, 0x6f, 0x8e, 0x17, 0x4e, 0xfc, 0xa3, 0x09, 0x72, 0x99, 0xf7, 0x84, 0xef, 0xd4, 0xca, 0xff, 0x0b, 0xf1, 0x68, 0xc3, 0xe5, 0x16, 0x5b, 0x9a, 0xd3, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x3b, 0x08, 0x95, 0x8b, 0xe1, 0x28, 0x6c, 0x2b, 0x4a, 0xcb, 0xa0, 0x2b, 0x36, 0x74, 0xad, 0xb2, }, .tag_len = 16, .line = __LINE__, .id = 166 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x3f, 0x11, 0x88, 0x54, 0x6c, 0x65, 0xed, 0x0f, 0xc5, 0x5e, 0x75, 0x03, 0x2c, 0x68, 0xee, 0x44, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x5d, 0xec, 0xcf, 0x83, 0x8b, 0x2c, 0xf5, 0xf8, 0x69, 0xc9, 0x0d, 0x2a, 0x61, 0x11, 0x60, 0xb1, 0xe5, 0x78, 0xab, 0x81, 0x21, 0xb9, 0x37, 0x35, 0xcb, 0xa4, 0xa1, 0x93, 0x06, 0x47, 0xb8, 0xc4, 0xc8, 0x4b, 0xf7, 0x76, 0x33, 0x3e, 0xe4, 0x5a, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xc1, 0x4d, 0x52, 0x20, 0x8f, 0x0f, 0x51, 0xb8, 0x16, 0xa4, 0x89, 0x71, 0xea, 0xf8, 0xff, 0x7e, }, .tag_len = 16, .line = __LINE__, .id = 167 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xa1, 0x34, 0x34, 0xd1, 0xcd, 0x83, 0x01, 0xd8, 0xb1, 0x22, 0x12, 0x05, 0x1f, 0xab, 0xaa, 0xbe, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xd2, 0xca, 0xe1, 0x68, 0x4a, 0xa4, 0x07, 0xa1, 0x3a, 0x2e, 0x2d, 0xa5, 0x35, 0x7e, 0x29, 0xf5, 0x5d, 0xec, 0xcf, 0x83, 0x8b, 0x2c, 0xf5, 0xf8, 0x69, 0xc9, 0x0d, 0x2a, 0x61, 0x11, 0x60, 0xb1, 0xe5, 0x78, 0xab, 0x81, 0x21, 0xb9, 0x37, 0x35, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xea, 0x2d, 0x01, 0x80, 0x99, 0xcd, 0x79, 0x25, 0xc5, 0x07, 0xce, 0xf0, 0xce, 0xdd, 0xb0, 0xae, }, .tag_len = 16, .line = __LINE__, .id = 168 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x5c, 0x2e, 0xa9, 0xb6, 0x95, 0xfc, 0xf6, 0xe2, 0x64, 0xb9, 0x60, 0x74, 0xd6, 0xbf, 0xa5, 0x72, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x28, 0xe1, 0xc5, 0x23, 0x2f, 0x4e, 0xe8, 0x16, 0x1d, 0xbe, 0x4c, 0x03, 0x63, 0x09, 0xe0, 0xb3, 0x25, 0x4e, 0x92, 0x12, 0xbe, 0xf0, 0xa9, 0x34, 0x31, 0xce, 0x5e, 0x56, 0x04, 0xc8, 0xf6, 0xa7, 0x3c, 0x18, 0xa3, 0x18, 0x30, 0x18, 0xb7, 0x70, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xd5, 0x80, 0x8a, 0x1b, 0xd1, 0x1a, 0x01, 0x12, 0x9b, 0xf3, 0xc6, 0x91, 0x9a, 0xff, 0x23, 0x39, }, .tag_len = 16, .line = __LINE__, .id = 240 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x57, 0xb3, 0xa8, 0x1f, 0x2c, 0x36, 0xb6, 0xb0, 0x65, 0x77, 0xca, 0x0f, 0xba, 0xb8, 0xfa, 0x8e, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xcc, 0xee, 0xbe, 0xb4, 0xfe, 0x4c, 0xd9, 0x0c, 0x51, 0x4e, 0x52, 0xd2, 0x32, 0x7a, 0x2e, 0xcd, 0x75, 0x39, 0x36, 0x61, 0x00, 0x6c, 0xf2, 0x47, 0x6d, 0x86, 0x20, 0x14, 0x9a, 0xef, 0x3d, 0x1c, 0xdc, 0xe4, 0x91, 0xff, 0xf3, 0xe7, 0xa7, 0xa3, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x81, 0x32, 0xe8, 0x65, 0xb6, 0x9d, 0x64, 0xef, 0x37, 0xdb, 0x26, 0x1f, 0x80, 0xcb, 0xbe, 0x24, }, .tag_len = 16, .line = __LINE__, .id = 241 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0xce, 0x20, 0xa7, 0xe8, 0x70, 0x69, 0x6a, 0x5e, 0x68, 0x53, 0x3c, 0x46, 0x5b, 0xad, 0x2b, 0xa1, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x4f, 0x43, 0x50, 0x56, 0x5d, 0x91, 0xd9, 0xaa, 0x8c, 0x5f, 0x40, 0x48, 0x55, 0x04, 0x92, 0xad, 0x6d, 0x6f, 0xda, 0xbf, 0x66, 0xda, 0x5d, 0x1e, 0x2a, 0xf7, 0xbf, 0xe1, 0xa8, 0xaa, 0xda, 0xa0, 0xba, 0xa3, 0xde, 0x38, 0xa4, 0x1d, 0x97, 0x13, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x15, 0x5d, 0xa6, 0x44, 0x1e, 0xc0, 0x71, 0xef, 0x2d, 0x8e, 0x6c, 0xff, 0xba, 0xcc, 0x1c, 0x7c, }, .tag_len = 16, .line = __LINE__, .id = 242 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x91, 0x8e, 0x3c, 0x19, 0xdb, 0xdf, 0xee, 0x2d, 0xb1, 0x81, 0x56, 0xc5, 0xb9, 0x3f, 0x3d, 0x75, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x83, 0x16, 0xa5, 0x31, 0x67, 0xb6, 0xde, 0x1a, 0x75, 0x75, 0x70, 0x06, 0x93, 0xff, 0xef, 0x27, 0x4f, 0x43, 0x50, 0x56, 0x5d, 0x91, 0xd9, 0xaa, 0x8c, 0x5f, 0x40, 0x48, 0x55, 0x04, 0x92, 0xad, 0x6d, 0x6f, 0xda, 0xbf, 0x66, 0xda, 0x5d, 0x1e, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x6c, 0x57, 0x4a, 0xa6, 0xa2, 0x49, 0x0c, 0xc3, 0xb2, 0xf2, 0xf8, 0xf0, 0xff, 0xbc, 0x56, 0xc4, }, .tag_len = 16, .line = __LINE__, .id = 243 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x71, 0x7d, 0x90, 0x0b, 0x27, 0x04, 0x62, 0xb9, 0xdb, 0xf7, 0xe9, 0x41, 0x9e, 0x89, 0x06, 0x09, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x51, 0x75, 0x92, 0x75, 0x13, 0xe7, 0x51, 0xeb, 0x30, 0x9f, 0x45, 0xbc, 0x2e, 0xf2, 0x25, 0xf2, 0x83, 0x16, 0xa5, 0x31, 0x67, 0xb6, 0xde, 0x1a, 0x75, 0x75, 0x70, 0x06, 0x93, 0xff, 0xef, 0x27, 0x4f, 0x43, 0x50, 0x56, 0x5d, 0x91, 0xd9, 0xaa, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x80, 0x82, 0xa7, 0x61, 0xe1, 0xd7, 0x55, 0x34, 0x4b, 0xf2, 0x96, 0x22, 0x14, 0x4e, 0x7d, 0x39, }, .tag_len = 16, .line = __LINE__, .id = 244 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0xec, 0xd5, 0x21, 0x20, 0xaf, 0x24, 0x0e, 0x9b, 0x4b, 0xf3, 0xb9, 0xd1, 0xee, 0xb4, 0x94, 0x34, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x36, 0xb3, 0xfb, 0xec, 0xd0, 0x91, 0x78, 0xd0, 0x45, 0x27, 0xfb, 0x37, 0x54, 0x4f, 0x55, 0x79, 0xd2, 0x0d, 0x60, 0xa4, 0x12, 0x66, 0xf6, 0x85, 0xc4, 0x80, 0x98, 0xe1, 0xa5, 0x28, 0x04, 0xca, 0x38, 0x7d, 0x90, 0x70, 0x9d, 0x32, 0x68, 0xdd, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x03, 0x3e, 0x0e, 0xf2, 0x95, 0x3e, 0xbf, 0xd8, 0x42, 0x57, 0x37, 0xc7, 0xd3, 0x93, 0xf8, 0x9a, }, .tag_len = 16, .line = __LINE__, .id = 245 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0xb3, 0x7b, 0xba, 0xd1, 0x04, 0x92, 0x8a, 0xe8, 0x92, 0x21, 0xd3, 0x52, 0x0c, 0x26, 0x82, 0xe0, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x16, 0x92, 0x9b, 0x77, 0x30, 0x51, 0xf1, 0x2b, 0x0a, 0xda, 0xc9, 0x5f, 0x65, 0xe2, 0x1a, 0x7f, 0x36, 0xb3, 0xfb, 0xec, 0xd0, 0x91, 0x78, 0xd0, 0x45, 0x27, 0xfb, 0x37, 0x54, 0x4f, 0x55, 0x79, 0xd2, 0x0d, 0x60, 0xa4, 0x12, 0x66, 0xf6, 0x85, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xca, 0x44, 0x8b, 0xb7, 0xe5, 0x2e, 0x89, 0x7e, 0xca, 0x23, 0x4e, 0xf3, 0x43, 0xd0, 0x57, 0xd0, }, .tag_len = 16, .line = __LINE__, .id = 246 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x53, 0x88, 0x16, 0xc3, 0xf8, 0x49, 0x06, 0x7c, 0xf8, 0x57, 0x6c, 0xd6, 0x2b, 0x90, 0xb9, 0x9c, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x6d, 0x3f, 0xae, 0xfa, 0xf6, 0x91, 0xd5, 0x81, 0x63, 0x84, 0x6f, 0x8d, 0x4b, 0x9f, 0xfd, 0x59, 0x16, 0x92, 0x9b, 0x77, 0x30, 0x51, 0xf1, 0x2b, 0x0a, 0xda, 0xc9, 0x5f, 0x65, 0xe2, 0x1a, 0x7f, 0x36, 0xb3, 0xfb, 0xec, 0xd0, 0x91, 0x78, 0xd0, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x84, 0xf4, 0x97, 0x40, 0xe6, 0x75, 0x7f, 0x63, 0xdd, 0x0d, 0xf7, 0xcb, 0x76, 0x56, 0xd0, 0xef, }, .tag_len = 16, .line = __LINE__, .id = 247 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0xd1, 0x0e, 0x63, 0x19, 0x43, 0xcd, 0x3b, 0xda, 0xba, 0xba, 0xb2, 0xbb, 0xd1, 0x39, 0x51, 0xc0, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xd6, 0x01, 0x96, 0xc2, 0xd1, 0x4f, 0xcf, 0x30, 0xc0, 0x99, 0x1d, 0x27, 0x21, 0xdd, 0xc5, 0x2d, 0x38, 0x5f, 0x40, 0x7a, 0x16, 0x69, 0x1d, 0xad, 0xe8, 0x2c, 0x90, 0x23, 0xc8, 0x55, 0xfd, 0x8e, 0x2e, 0x8f, 0xbb, 0x56, 0x21, 0x02, 0xf0, 0x18, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x87, 0x7e, 0x15, 0xd9, 0x88, 0x9e, 0x69, 0xa9, 0x9f, 0xcc, 0x6d, 0x72, 0x74, 0x65, 0xc3, 0x91, }, .tag_len = 16, .line = __LINE__, .id = 248 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x8e, 0xa0, 0xf8, 0xe8, 0xe8, 0x7b, 0xbf, 0xa9, 0x63, 0x68, 0xd8, 0x38, 0x33, 0xab, 0x47, 0x14, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x94, 0x8f, 0xbc, 0xec, 0xa1, 0x2a, 0x6e, 0x4f, 0xab, 0xb7, 0x9b, 0x6d, 0x96, 0x5e, 0x33, 0x6f, 0xd6, 0x01, 0x96, 0xc2, 0xd1, 0x4f, 0xcf, 0x30, 0xc0, 0x99, 0x1d, 0x27, 0x21, 0xdd, 0xc5, 0x2d, 0x38, 0x5f, 0x40, 0x7a, 0x16, 0x69, 0x1d, 0xad, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xcd, 0x57, 0x57, 0x62, 0x69, 0x45, 0x97, 0x6b, 0xa9, 0xf0, 0x26, 0x4b, 0xd6, 0xbe, 0xe8, 0x94, }, .tag_len = 16, .line = __LINE__, .id = 249 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x7b, 0x2d, 0xf4, 0xfb, 0xed, 0x1d, 0xe2, 0x72, 0x7e, 0xb2, 0x48, 0x98, 0xe5, 0xde, 0xab, 0xb9, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xa1, 0xa0, 0x12, 0x06, 0x60, 0xff, 0x52, 0xe6, 0xb1, 0x70, 0x0b, 0x12, 0xc5, 0x4d, 0x2d, 0x33, 0xb9, 0x4b, 0x00, 0xcd, 0x78, 0x82, 0xd8, 0x85, 0x7d, 0x84, 0xe6, 0xe1, 0x83, 0xa1, 0xde, 0xa6, 0xee, 0x85, 0xa7, 0xda, 0x84, 0xfb, 0xc3, 0x5d, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xb0, 0x15, 0xd7, 0x2d, 0xa6, 0x2c, 0x81, 0xcb, 0x4d, 0x26, 0x72, 0x53, 0xb2, 0x0d, 0xb9, 0xe5, }, .tag_len = 16, .line = __LINE__, .id = 250 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_DECRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x24, 0x83, 0x6f, 0x0a, 0x46, 0xab, 0x66, 0x01, 0xa7, 0x60, 0x22, 0x1b, 0x07, 0x4c, 0xbd, 0x6d, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x5e, 0x34, 0x34, 0xb4, 0x5e, 0xdb, 0xf0, 0xd1, 0xf6, 0xe0, 0x2d, 0x11, 0x44, 0xdb, 0xf8, 0x67, 0xa1, 0xa0, 0x12, 0x06, 0x60, 0xff, 0x52, 0xe6, 0xb1, 0x70, 0x0b, 0x12, 0xc5, 0x4d, 0x2d, 0x33, 0xb9, 0x4b, 0x00, 0xcd, 0x78, 0x82, 0xd8, 0x85, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xee, 0x74, 0xcc, 0xb3, 0x0d, 0x64, 0x9e, 0xbf, 0x69, 0x16, 0xd0, 0x5a, 0x7d, 0xbe, 0x56, 0x96, }, .tag_len = 16, .line = __LINE__, .id = 251 }, optee_test-4.3.0/host/xtest/aes_gcm_counter_overflow_test_encrypt.h000066400000000000000000001263541464074351400260740ustar00rootroot00000000000000/* SPDX-License-Identifier: Apache-2.0 */ /* * Copyright 2024 NXP */ { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xf9, 0x5f, 0xde, 0x4a, 0x75, 0x19, 0x13, 0x20, 0x2a, 0xee, 0xee, 0x32, 0xa0, 0xb5, 0x57, 0x53, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x00, 0x07, 0x8d, 0x10, 0x9d, 0x92, 0x14, 0x3f, 0xcd, 0x5d, 0xf5, 0x67, 0x21, 0xb8, 0x84, 0xfa, 0xc6, 0x4a, 0xc7, 0x76, 0x2c, 0xc0, 0x9e, 0xea, 0x2a, 0x3c, 0x68, 0xe9, 0x2a, 0x17, 0xbd, 0xb5, 0x75, 0xf8, 0x7b, 0xda, 0x18, 0xbe, 0x56, 0x4e, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x15, 0x2a, 0x65, 0x04, 0x5f, 0xe6, 0x74, 0xf9, 0x76, 0x27, 0x42, 0x7a, 0xf5, 0xbe, 0x22, 0xda, }, .tag_len = 16, .line = __LINE__, .id = 77 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x7b, 0x95, 0xb8, 0xc3, 0x56, 0x81, 0x0a, 0x84, 0x71, 0x1d, 0x68, 0x15, 0x0a, 0x1b, 0x77, 0x50, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x84, 0xd4, 0xc9, 0xc0, 0x8b, 0x4f, 0x48, 0x28, 0x61, 0xe3, 0xa9, 0xc6, 0xc3, 0x5b, 0xc4, 0xd9, 0x1d, 0xf9, 0x27, 0x37, 0x45, 0x13, 0xbf, 0xd4, 0x9f, 0x43, 0x6b, 0xd7, 0x3f, 0x32, 0x52, 0x85, 0xda, 0xef, 0x4f, 0xf7, 0xe1, 0x3d, 0x46, 0xa6, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x21, 0x3a, 0x3c, 0xb9, 0x38, 0x55, 0xd1, 0x8e, 0x69, 0x33, 0x7e, 0xee, 0x66, 0xae, 0xec, 0x07, }, .tag_len = 16, .line = __LINE__, .id = 78 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x1a, 0x55, 0x2e, 0x67, 0xcd, 0xc4, 0xdc, 0x1a, 0x33, 0xb8, 0x24, 0x87, 0x4e, 0xbf, 0x0b, 0xed, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x94, 0x8c, 0xa3, 0x7a, 0x8e, 0x66, 0x49, 0xe8, 0x8a, 0xef, 0xfb, 0x1c, 0x59, 0x8f, 0x36, 0x07, 0x00, 0x77, 0x02, 0x41, 0x7e, 0xa0, 0xe0, 0xbc, 0x3c, 0x60, 0xad, 0x5a, 0x94, 0x98, 0x86, 0xde, 0x96, 0x8c, 0xf5, 0x3e, 0xa6, 0x46, 0x2a, 0xed, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x99, 0xb3, 0x81, 0xbf, 0xa2, 0xaf, 0x97, 0x51, 0xc3, 0x9d, 0x1b, 0x6e, 0x86, 0xd1, 0xbe, 0x6a, }, .tag_len = 16, .line = __LINE__, .id = 79 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xdd, 0x9d, 0x0b, 0x4a, 0x0c, 0x3d, 0x68, 0x15, 0x24, 0xbf, 0xfc, 0xa3, 0x1d, 0x90, 0x76, 0x61, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x64, 0xb1, 0x93, 0x14, 0xc3, 0x1a, 0xf4, 0x5a, 0xcc, 0xdf, 0x7e, 0x3c, 0x4d, 0xb7, 0x9f, 0x0d, 0x94, 0x8c, 0xa3, 0x7a, 0x8e, 0x66, 0x49, 0xe8, 0x8a, 0xef, 0xfb, 0x1c, 0x59, 0x8f, 0x36, 0x07, 0x00, 0x77, 0x02, 0x41, 0x7e, 0xa0, 0xe0, 0xbc, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x52, 0x81, 0xef, 0xc7, 0xf1, 0x3a, 0xc8, 0xe1, 0x4c, 0xcf, 0x5d, 0xca, 0x7b, 0xfb, 0xfd, 0xd1, }, .tag_len = 16, .line = __LINE__, .id = 80 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x57, 0xc5, 0x64, 0x3c, 0x4e, 0x37, 0xb4, 0x04, 0x1d, 0xb7, 0x94, 0xcf, 0xe8, 0xe1, 0xf0, 0xf4, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x2b, 0xb6, 0x9c, 0x3e, 0x5d, 0x1f, 0x91, 0x81, 0x5c, 0x6b, 0x87, 0xa0, 0xd5, 0xbb, 0xea, 0x71, 0x64, 0xb1, 0x93, 0x14, 0xc3, 0x1a, 0xf4, 0x5a, 0xcc, 0xdf, 0x7e, 0x3c, 0x4d, 0xb7, 0x9f, 0x0d, 0x94, 0x8c, 0xa3, 0x7a, 0x8e, 0x66, 0x49, 0xe8, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xa3, 0xea, 0x2c, 0x09, 0xee, 0x4f, 0x8c, 0x8a, 0x12, 0xf4, 0x5c, 0xdd, 0xf9, 0xae, 0xff, 0x81, }, .tag_len = 16, .line = __LINE__, .id = 81 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x99, 0x82, 0x1c, 0x2d, 0xd5, 0xda, 0xec, 0xde, 0xd0, 0x73, 0x00, 0xf5, 0x77, 0xf7, 0xaf, 0xf1, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x12, 0x7a, 0xf9, 0xb3, 0x9e, 0xcd, 0xfc, 0x57, 0xbb, 0x11, 0xa2, 0x84, 0x7c, 0x7c, 0x2d, 0x3d, 0x8f, 0x93, 0x8f, 0x40, 0xf8, 0x77, 0xe0, 0xc4, 0xaf, 0x37, 0xd0, 0xfe, 0x9a, 0xf0, 0x33, 0x05, 0x2b, 0xd5, 0x37, 0xc4, 0xae, 0x97, 0x8f, 0x60, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x07, 0xeb, 0x2f, 0xe4, 0xa9, 0x58, 0xf8, 0x43, 0x4d, 0x40, 0x68, 0x48, 0x99, 0x50, 0x7c, 0x7c, }, .tag_len = 16, .line = __LINE__, .id = 82 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x5e, 0x4a, 0x39, 0x00, 0x14, 0x23, 0x58, 0xd1, 0xc7, 0x74, 0xd8, 0xd1, 0x24, 0xd8, 0xd2, 0x7d, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x0c, 0xf6, 0xae, 0x47, 0x15, 0x6b, 0x14, 0xdc, 0xe0, 0x3c, 0x8a, 0x07, 0xa2, 0xe1, 0x72, 0xb1, 0x12, 0x7a, 0xf9, 0xb3, 0x9e, 0xcd, 0xfc, 0x57, 0xbb, 0x11, 0xa2, 0x84, 0x7c, 0x7c, 0x2d, 0x3d, 0x8f, 0x93, 0x8f, 0x40, 0xf8, 0x77, 0xe0, 0xc4, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xf1, 0x45, 0xc2, 0xdc, 0xaf, 0x33, 0x9e, 0xed, 0xe4, 0x27, 0xbe, 0x93, 0x43, 0x57, 0xea, 0xc0, }, .tag_len = 16, .line = __LINE__, .id = 83 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xd4, 0x12, 0x56, 0x76, 0x56, 0x29, 0x84, 0xc0, 0xfe, 0x7c, 0xb0, 0xbd, 0xd1, 0xa9, 0x54, 0xe8, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xf0, 0xc6, 0xff, 0xc1, 0x8b, 0xd4, 0x6d, 0xf5, 0x56, 0x91, 0x85, 0xa9, 0xaf, 0xd1, 0x69, 0xeb, 0x0c, 0xf6, 0xae, 0x47, 0x15, 0x6b, 0x14, 0xdc, 0xe0, 0x3c, 0x8a, 0x07, 0xa2, 0xe1, 0x72, 0xb1, 0x12, 0x7a, 0xf9, 0xb3, 0x9e, 0xcd, 0xfc, 0x57, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xfa, 0xcd, 0x0b, 0xfe, 0x87, 0x01, 0xb7, 0xb4, 0xa2, 0xba, 0x96, 0xd9, 0x8a, 0xf5, 0x2b, 0xd9, }, .tag_len = 16, .line = __LINE__, .id = 84 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xb9, 0x7e, 0xc6, 0x2a, 0x5e, 0x59, 0x00, 0xcc, 0xf9, 0xe4, 0xbe, 0x33, 0x2e, 0x33, 0x60, 0x91, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xd6, 0x92, 0x8e, 0x09, 0x4c, 0x06, 0xe0, 0xa7, 0xc4, 0xdb, 0x42, 0x18, 0x4c, 0xf7, 0x52, 0x9e, 0x95, 0xde, 0x88, 0xb7, 0x67, 0xed, 0xeb, 0xe9, 0xb3, 0x43, 0x00, 0x0b, 0xe3, 0xda, 0xb4, 0x7e, 0xa0, 0x8b, 0x74, 0x42, 0x93, 0xee, 0xd6, 0x98, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xa0, 0x3e, 0x72, 0x9d, 0xcf, 0xd7, 0xa0, 0x31, 0x55, 0x65, 0x5f, 0xec, 0xe8, 0xaf, 0xfd, 0x7e, }, .tag_len = 16, .line = __LINE__, .id = 85 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x7e, 0xb6, 0xe3, 0x07, 0x9f, 0xa0, 0xb4, 0xc3, 0xee, 0xe3, 0x66, 0x17, 0x7d, 0x1c, 0x1d, 0x1d, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xd8, 0x2c, 0xe5, 0x87, 0x71, 0xbf, 0x64, 0x87, 0x11, 0x6b, 0xf8, 0xe9, 0x64, 0x21, 0x87, 0x7e, 0xd6, 0x92, 0x8e, 0x09, 0x4c, 0x06, 0xe0, 0xa7, 0xc4, 0xdb, 0x42, 0x18, 0x4c, 0xf7, 0x52, 0x9e, 0x95, 0xde, 0x88, 0xb7, 0x67, 0xed, 0xeb, 0xe9, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x1e, 0x43, 0x92, 0x68, 0x28, 0xbc, 0x9a, 0x16, 0x14, 0xc7, 0xb1, 0x63, 0x90, 0x96, 0xc1, 0x95, }, .tag_len = 16, .line = __LINE__, .id = 86 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0x03, 0x14, 0xfc, 0xd1, 0x0f, 0xdd, 0x67, 0x5d, 0x3c, 0x61, 0x29, 0x62, 0xc9, 0x31, 0xf6, 0x35, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xa1, 0x97, 0xa3, 0x7a, 0x5d, 0x79, 0x69, 0x70, 0x78, 0x53, 0x6b, 0xc2, 0x7f, 0xe4, 0x6c, 0xd8, 0xd4, 0x75, 0x52, 0x6d, 0x90, 0x44, 0xaa, 0x94, 0xf0, 0x88, 0xa0, 0x54, 0xf8, 0xe3, 0x80, 0xc6, 0x4f, 0x79, 0x41, 0x47, 0x95, 0xc6, 0x14, 0x80, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xf0, 0x8b, 0xad, 0xdf, 0x0b, 0x52, 0x85, 0xc9, 0x1f, 0xc0, 0x6a, 0x67, 0xfe, 0x47, 0x08, 0xca, }, .tag_len = 16, .line = __LINE__, .id = 87 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }, .key_len = 16, .nonce = (const uint8_t []){ 0xc4, 0xdc, 0xd9, 0xfc, 0xce, 0x24, 0xd3, 0x52, 0x2b, 0x66, 0xf1, 0x46, 0x9a, 0x1e, 0x8b, 0xb9, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x14, 0x9f, 0xde, 0x9a, 0xbb, 0xd3, 0xa4, 0x3c, 0x25, 0x48, 0x57, 0x5e, 0x0d, 0xb9, 0xfb, 0x84, 0xa1, 0x97, 0xa3, 0x7a, 0x5d, 0x79, 0x69, 0x70, 0x78, 0x53, 0x6b, 0xc2, 0x7f, 0xe4, 0x6c, 0xd8, 0xd4, 0x75, 0x52, 0x6d, 0x90, 0x44, 0xaa, 0x94, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x62, 0xa4, 0xb6, 0x87, 0x5c, 0x28, 0x83, 0x45, 0xd6, 0xa4, 0x54, 0x39, 0x9e, 0xac, 0x1a, 0xfa, }, .tag_len = 16, .line = __LINE__, .id = 88 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x02, 0x9e, 0x0e, 0x77, 0x7d, 0xb0, 0x92, 0xb1, 0x25, 0x35, 0xd0, 0x43, 0x01, 0x2f, 0x09, 0xba, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xf8, 0x3c, 0xee, 0x46, 0x73, 0x36, 0xe1, 0xa0, 0x9b, 0x75, 0xf2, 0x4e, 0x9b, 0x43, 0x85, 0xc9, 0x9c, 0x13, 0xe6, 0xaf, 0x72, 0x22, 0x56, 0xa6, 0x61, 0x29, 0xec, 0xe9, 0x61, 0xfe, 0x80, 0x3b, 0x16, 0x7b, 0xad, 0x20, 0x6f, 0x50, 0x17, 0xfb, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x09, 0x33, 0x8a, 0x42, 0xf0, 0xac, 0xc1, 0x4f, 0x97, 0xc0, 0x64, 0xf5, 0x2f, 0x5f, 0x16, 0x88, }, .tag_len = 16, .line = __LINE__, .id = 157 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xf1, 0xbe, 0x3b, 0x06, 0xb7, 0xfe, 0xac, 0x07, 0xe7, 0xea, 0xb6, 0x29, 0xf5, 0x56, 0x04, 0x7b, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x0b, 0x32, 0xb6, 0x48, 0xa2, 0xc2, 0x8e, 0x9e, 0xdd, 0x7c, 0xee, 0x08, 0xee, 0xeb, 0x90, 0x00, 0x34, 0xca, 0xe7, 0x21, 0x5e, 0x5a, 0xb1, 0xe2, 0x01, 0xbd, 0x2e, 0xed, 0x10, 0x32, 0xc5, 0xa9, 0x78, 0x66, 0xba, 0x58, 0x2a, 0x34, 0x58, 0xa4, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x90, 0xbe, 0x36, 0x06, 0xde, 0x58, 0xbd, 0x77, 0x8f, 0xa5, 0xbe, 0xff, 0x4a, 0x41, 0x02, 0xbd, }, .tag_len = 16, .line = __LINE__, .id = 158 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xde, 0x9e, 0xb6, 0x3b, 0x1d, 0xae, 0xd3, 0x21, 0xa1, 0x1b, 0x75, 0x47, 0xcc, 0x9e, 0x22, 0x3c, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x57, 0x5e, 0x2e, 0xce, 0xc2, 0xb3, 0xc7, 0x2d, 0x4e, 0x80, 0x83, 0x0d, 0x0d, 0x85, 0x9a, 0xd9, 0xe4, 0x2c, 0x29, 0xc4, 0xa6, 0x8d, 0x8d, 0x9d, 0x8d, 0x23, 0x43, 0x4d, 0xe2, 0xcd, 0x07, 0x73, 0x3b, 0xe4, 0x9d, 0x62, 0xac, 0x1a, 0xe0, 0x85, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x6e, 0x4d, 0x63, 0x96, 0x12, 0x5a, 0x10, 0xdf, 0x54, 0x43, 0xbd, 0x0c, 0xbc, 0x85, 0x66, 0xd1, }, .tag_len = 16, .line = __LINE__, .id = 159 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x40, 0xbb, 0x0a, 0xbe, 0xbc, 0x48, 0x3f, 0xf6, 0xd5, 0x67, 0x12, 0x41, 0xff, 0x5d, 0x66, 0xc6, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x2a, 0x81, 0x88, 0x88, 0xd1, 0xf0, 0x9f, 0x32, 0xaa, 0x7b, 0xee, 0xdd, 0x28, 0x69, 0xb4, 0x46, 0x57, 0x5e, 0x2e, 0xce, 0xc2, 0xb3, 0xc7, 0x2d, 0x4e, 0x80, 0x83, 0x0d, 0x0d, 0x85, 0x9a, 0xd9, 0xe4, 0x2c, 0x29, 0xc4, 0xa6, 0x8d, 0x8d, 0x9d, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xdc, 0x48, 0x1f, 0x17, 0x25, 0x45, 0x26, 0x8e, 0xff, 0x63, 0xab, 0x04, 0x90, 0x40, 0x3d, 0xc3, }, .tag_len = 16, .line = __LINE__, .id = 160 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x20, 0xd5, 0xcf, 0x30, 0x5e, 0x63, 0x0a, 0x8f, 0x49, 0xe3, 0xbb, 0x4b, 0xab, 0x18, 0xab, 0xc9, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x96, 0xd3, 0x6b, 0x79, 0x5f, 0x8e, 0x7e, 0xdf, 0x6a, 0x8e, 0x0d, 0xbc, 0xd2, 0x0d, 0x6c, 0x07, 0x2a, 0x81, 0x88, 0x88, 0xd1, 0xf0, 0x9f, 0x32, 0xaa, 0x7b, 0xee, 0xdd, 0x28, 0x69, 0xb4, 0x46, 0x57, 0x5e, 0x2e, 0xce, 0xc2, 0xb3, 0xc7, 0x2d, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x8a, 0x3a, 0x22, 0xbf, 0x25, 0x92, 0x95, 0x8b, 0x93, 0x02, 0x92, 0xaa, 0x47, 0xf5, 0x90, 0xe8, }, .tag_len = 16, .line = __LINE__, .id = 161 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x25, 0x53, 0x58, 0xa7, 0x1a, 0x0e, 0x57, 0x31, 0xf6, 0xdd, 0x6c, 0xe2, 0x8e, 0x15, 0x8a, 0xe6, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xcf, 0xce, 0x3d, 0x92, 0x0f, 0x0e, 0x01, 0xf0, 0xbb, 0x49, 0xa7, 0x51, 0x95, 0x5b, 0x23, 0x6d, 0x1b, 0x88, 0x7b, 0xae, 0xfd, 0x25, 0xc4, 0x7f, 0x41, 0x30, 0x3c, 0x46, 0xd5, 0xc7, 0xbf, 0x9c, 0xa4, 0xc2, 0xc4, 0x5a, 0x8f, 0x1e, 0x66, 0x56, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x2d, 0xb9, 0xdc, 0x1b, 0x7f, 0xd3, 0x15, 0xdf, 0x1c, 0x95, 0x43, 0x24, 0x32, 0xfc, 0xf4, 0x74, }, .tag_len = 16, .line = __LINE__, .id = 162 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xbb, 0x76, 0xe4, 0x22, 0xbb, 0xe8, 0xbb, 0xe6, 0x82, 0xa1, 0x0b, 0xe4, 0xbd, 0xd6, 0xce, 0x1c, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x69, 0xa2, 0x41, 0x69, 0x79, 0x2e, 0x9a, 0x07, 0xf6, 0xe6, 0xf4, 0x73, 0x6f, 0xa9, 0x72, 0xdc, 0xcf, 0xce, 0x3d, 0x92, 0x0f, 0x0e, 0x01, 0xf0, 0xbb, 0x49, 0xa7, 0x51, 0x95, 0x5b, 0x23, 0x6d, 0x1b, 0x88, 0x7b, 0xae, 0xfd, 0x25, 0xc4, 0x7f, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x82, 0xad, 0x96, 0x7f, 0x7a, 0xc1, 0x90, 0x84, 0x35, 0x4f, 0x69, 0xa7, 0x51, 0x44, 0x3f, 0xb2, }, .tag_len = 16, .line = __LINE__, .id = 163 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xdb, 0x18, 0x21, 0xac, 0x59, 0xc3, 0x8e, 0x9f, 0x1e, 0x25, 0xa2, 0xee, 0xe9, 0x93, 0x03, 0x13, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x4e, 0x44, 0x17, 0xa8, 0x3b, 0xea, 0xc1, 0xeb, 0x7e, 0x24, 0x45, 0x6a, 0x05, 0xf6, 0xba, 0x55, 0x69, 0xa2, 0x41, 0x69, 0x79, 0x2e, 0x9a, 0x07, 0xf6, 0xe6, 0xf4, 0x73, 0x6f, 0xa9, 0x72, 0xdc, 0xcf, 0xce, 0x3d, 0x92, 0x0f, 0x0e, 0x01, 0xf0, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x47, 0x2d, 0x5d, 0xd5, 0x82, 0xdc, 0x05, 0xef, 0x5f, 0xc4, 0x96, 0xb6, 0x12, 0x02, 0x3c, 0xb2, }, .tag_len = 16, .line = __LINE__, .id = 164 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xf7, 0xa0, 0x2e, 0xcc, 0xa0, 0x30, 0x64, 0xb2, 0xef, 0x3c, 0xce, 0x9f, 0xea, 0xb7, 0x9f, 0x07, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x6f, 0x8e, 0x17, 0x4e, 0xfc, 0xa3, 0x09, 0x72, 0x99, 0xf7, 0x84, 0xef, 0xd4, 0xca, 0xff, 0x0b, 0xf1, 0x68, 0xc3, 0xe5, 0x16, 0x5b, 0x9a, 0xd3, 0xd2, 0x00, 0x62, 0x00, 0x98, 0x48, 0x04, 0x4e, 0xef, 0x8f, 0x31, 0xf7, 0xd2, 0xfe, 0xad, 0x05, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xca, 0xff, 0x72, 0x38, 0x26, 0xdf, 0x15, 0x09, 0x34, 0xae, 0xe3, 0x20, 0x1b, 0xa1, 0x75, 0xe7, }, .tag_len = 16, .line = __LINE__, .id = 165 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x69, 0x85, 0x92, 0x49, 0x01, 0xd6, 0x88, 0x65, 0x9b, 0x40, 0xa9, 0x99, 0xd9, 0x74, 0xdb, 0xfd, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xaf, 0x19, 0x30, 0x90, 0xce, 0x3d, 0x43, 0xa3, 0x88, 0xa1, 0xd2, 0x94, 0xa0, 0x96, 0x16, 0x90, 0x6f, 0x8e, 0x17, 0x4e, 0xfc, 0xa3, 0x09, 0x72, 0x99, 0xf7, 0x84, 0xef, 0xd4, 0xca, 0xff, 0x0b, 0xf1, 0x68, 0xc3, 0xe5, 0x16, 0x5b, 0x9a, 0xd3, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x3b, 0x08, 0x95, 0x8b, 0xe1, 0x28, 0x6c, 0x2b, 0x4a, 0xcb, 0xa0, 0x2b, 0x36, 0x74, 0xad, 0xb2, }, .tag_len = 16, .line = __LINE__, .id = 166 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0x3f, 0x11, 0x88, 0x54, 0x6c, 0x65, 0xed, 0x0f, 0xc5, 0x5e, 0x75, 0x03, 0x2c, 0x68, 0xee, 0x44, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x5d, 0xec, 0xcf, 0x83, 0x8b, 0x2c, 0xf5, 0xf8, 0x69, 0xc9, 0x0d, 0x2a, 0x61, 0x11, 0x60, 0xb1, 0xe5, 0x78, 0xab, 0x81, 0x21, 0xb9, 0x37, 0x35, 0xcb, 0xa4, 0xa1, 0x93, 0x06, 0x47, 0xb8, 0xc4, 0xc8, 0x4b, 0xf7, 0x76, 0x33, 0x3e, 0xe4, 0x5a, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xc1, 0x4d, 0x52, 0x20, 0x8f, 0x0f, 0x51, 0xb8, 0x16, 0xa4, 0x89, 0x71, 0xea, 0xf8, 0xff, 0x7e, }, .tag_len = 16, .line = __LINE__, .id = 167 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, }, .key_len = 24, .nonce = (const uint8_t []){ 0xa1, 0x34, 0x34, 0xd1, 0xcd, 0x83, 0x01, 0xd8, 0xb1, 0x22, 0x12, 0x05, 0x1f, 0xab, 0xaa, 0xbe, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xd2, 0xca, 0xe1, 0x68, 0x4a, 0xa4, 0x07, 0xa1, 0x3a, 0x2e, 0x2d, 0xa5, 0x35, 0x7e, 0x29, 0xf5, 0x5d, 0xec, 0xcf, 0x83, 0x8b, 0x2c, 0xf5, 0xf8, 0x69, 0xc9, 0x0d, 0x2a, 0x61, 0x11, 0x60, 0xb1, 0xe5, 0x78, 0xab, 0x81, 0x21, 0xb9, 0x37, 0x35, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xea, 0x2d, 0x01, 0x80, 0x99, 0xcd, 0x79, 0x25, 0xc5, 0x07, 0xce, 0xf0, 0xce, 0xdd, 0xb0, 0xae, }, .tag_len = 16, .line = __LINE__, .id = 168 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x5c, 0x2e, 0xa9, 0xb6, 0x95, 0xfc, 0xf6, 0xe2, 0x64, 0xb9, 0x60, 0x74, 0xd6, 0xbf, 0xa5, 0x72, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x28, 0xe1, 0xc5, 0x23, 0x2f, 0x4e, 0xe8, 0x16, 0x1d, 0xbe, 0x4c, 0x03, 0x63, 0x09, 0xe0, 0xb3, 0x25, 0x4e, 0x92, 0x12, 0xbe, 0xf0, 0xa9, 0x34, 0x31, 0xce, 0x5e, 0x56, 0x04, 0xc8, 0xf6, 0xa7, 0x3c, 0x18, 0xa3, 0x18, 0x30, 0x18, 0xb7, 0x70, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xd5, 0x80, 0x8a, 0x1b, 0xd1, 0x1a, 0x01, 0x12, 0x9b, 0xf3, 0xc6, 0x91, 0x9a, 0xff, 0x23, 0x39, }, .tag_len = 16, .line = __LINE__, .id = 240 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x57, 0xb3, 0xa8, 0x1f, 0x2c, 0x36, 0xb6, 0xb0, 0x65, 0x77, 0xca, 0x0f, 0xba, 0xb8, 0xfa, 0x8e, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xcc, 0xee, 0xbe, 0xb4, 0xfe, 0x4c, 0xd9, 0x0c, 0x51, 0x4e, 0x52, 0xd2, 0x32, 0x7a, 0x2e, 0xcd, 0x75, 0x39, 0x36, 0x61, 0x00, 0x6c, 0xf2, 0x47, 0x6d, 0x86, 0x20, 0x14, 0x9a, 0xef, 0x3d, 0x1c, 0xdc, 0xe4, 0x91, 0xff, 0xf3, 0xe7, 0xa7, 0xa3, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x81, 0x32, 0xe8, 0x65, 0xb6, 0x9d, 0x64, 0xef, 0x37, 0xdb, 0x26, 0x1f, 0x80, 0xcb, 0xbe, 0x24, }, .tag_len = 16, .line = __LINE__, .id = 241 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0xce, 0x20, 0xa7, 0xe8, 0x70, 0x69, 0x6a, 0x5e, 0x68, 0x53, 0x3c, 0x46, 0x5b, 0xad, 0x2b, 0xa1, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x4f, 0x43, 0x50, 0x56, 0x5d, 0x91, 0xd9, 0xaa, 0x8c, 0x5f, 0x40, 0x48, 0x55, 0x04, 0x92, 0xad, 0x6d, 0x6f, 0xda, 0xbf, 0x66, 0xda, 0x5d, 0x1e, 0x2a, 0xf7, 0xbf, 0xe1, 0xa8, 0xaa, 0xda, 0xa0, 0xba, 0xa3, 0xde, 0x38, 0xa4, 0x1d, 0x97, 0x13, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x15, 0x5d, 0xa6, 0x44, 0x1e, 0xc0, 0x71, 0xef, 0x2d, 0x8e, 0x6c, 0xff, 0xba, 0xcc, 0x1c, 0x7c, }, .tag_len = 16, .line = __LINE__, .id = 242 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x91, 0x8e, 0x3c, 0x19, 0xdb, 0xdf, 0xee, 0x2d, 0xb1, 0x81, 0x56, 0xc5, 0xb9, 0x3f, 0x3d, 0x75, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x83, 0x16, 0xa5, 0x31, 0x67, 0xb6, 0xde, 0x1a, 0x75, 0x75, 0x70, 0x06, 0x93, 0xff, 0xef, 0x27, 0x4f, 0x43, 0x50, 0x56, 0x5d, 0x91, 0xd9, 0xaa, 0x8c, 0x5f, 0x40, 0x48, 0x55, 0x04, 0x92, 0xad, 0x6d, 0x6f, 0xda, 0xbf, 0x66, 0xda, 0x5d, 0x1e, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x6c, 0x57, 0x4a, 0xa6, 0xa2, 0x49, 0x0c, 0xc3, 0xb2, 0xf2, 0xf8, 0xf0, 0xff, 0xbc, 0x56, 0xc4, }, .tag_len = 16, .line = __LINE__, .id = 243 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x71, 0x7d, 0x90, 0x0b, 0x27, 0x04, 0x62, 0xb9, 0xdb, 0xf7, 0xe9, 0x41, 0x9e, 0x89, 0x06, 0x09, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x51, 0x75, 0x92, 0x75, 0x13, 0xe7, 0x51, 0xeb, 0x30, 0x9f, 0x45, 0xbc, 0x2e, 0xf2, 0x25, 0xf2, 0x83, 0x16, 0xa5, 0x31, 0x67, 0xb6, 0xde, 0x1a, 0x75, 0x75, 0x70, 0x06, 0x93, 0xff, 0xef, 0x27, 0x4f, 0x43, 0x50, 0x56, 0x5d, 0x91, 0xd9, 0xaa, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x80, 0x82, 0xa7, 0x61, 0xe1, 0xd7, 0x55, 0x34, 0x4b, 0xf2, 0x96, 0x22, 0x14, 0x4e, 0x7d, 0x39, }, .tag_len = 16, .line = __LINE__, .id = 244 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0xec, 0xd5, 0x21, 0x20, 0xaf, 0x24, 0x0e, 0x9b, 0x4b, 0xf3, 0xb9, 0xd1, 0xee, 0xb4, 0x94, 0x34, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x36, 0xb3, 0xfb, 0xec, 0xd0, 0x91, 0x78, 0xd0, 0x45, 0x27, 0xfb, 0x37, 0x54, 0x4f, 0x55, 0x79, 0xd2, 0x0d, 0x60, 0xa4, 0x12, 0x66, 0xf6, 0x85, 0xc4, 0x80, 0x98, 0xe1, 0xa5, 0x28, 0x04, 0xca, 0x38, 0x7d, 0x90, 0x70, 0x9d, 0x32, 0x68, 0xdd, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x03, 0x3e, 0x0e, 0xf2, 0x95, 0x3e, 0xbf, 0xd8, 0x42, 0x57, 0x37, 0xc7, 0xd3, 0x93, 0xf8, 0x9a, }, .tag_len = 16, .line = __LINE__, .id = 245 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0xb3, 0x7b, 0xba, 0xd1, 0x04, 0x92, 0x8a, 0xe8, 0x92, 0x21, 0xd3, 0x52, 0x0c, 0x26, 0x82, 0xe0, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x16, 0x92, 0x9b, 0x77, 0x30, 0x51, 0xf1, 0x2b, 0x0a, 0xda, 0xc9, 0x5f, 0x65, 0xe2, 0x1a, 0x7f, 0x36, 0xb3, 0xfb, 0xec, 0xd0, 0x91, 0x78, 0xd0, 0x45, 0x27, 0xfb, 0x37, 0x54, 0x4f, 0x55, 0x79, 0xd2, 0x0d, 0x60, 0xa4, 0x12, 0x66, 0xf6, 0x85, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xca, 0x44, 0x8b, 0xb7, 0xe5, 0x2e, 0x89, 0x7e, 0xca, 0x23, 0x4e, 0xf3, 0x43, 0xd0, 0x57, 0xd0, }, .tag_len = 16, .line = __LINE__, .id = 246 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x53, 0x88, 0x16, 0xc3, 0xf8, 0x49, 0x06, 0x7c, 0xf8, 0x57, 0x6c, 0xd6, 0x2b, 0x90, 0xb9, 0x9c, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x6d, 0x3f, 0xae, 0xfa, 0xf6, 0x91, 0xd5, 0x81, 0x63, 0x84, 0x6f, 0x8d, 0x4b, 0x9f, 0xfd, 0x59, 0x16, 0x92, 0x9b, 0x77, 0x30, 0x51, 0xf1, 0x2b, 0x0a, 0xda, 0xc9, 0x5f, 0x65, 0xe2, 0x1a, 0x7f, 0x36, 0xb3, 0xfb, 0xec, 0xd0, 0x91, 0x78, 0xd0, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x84, 0xf4, 0x97, 0x40, 0xe6, 0x75, 0x7f, 0x63, 0xdd, 0x0d, 0xf7, 0xcb, 0x76, 0x56, 0xd0, 0xef, }, .tag_len = 16, .line = __LINE__, .id = 247 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0xd1, 0x0e, 0x63, 0x19, 0x43, 0xcd, 0x3b, 0xda, 0xba, 0xba, 0xb2, 0xbb, 0xd1, 0x39, 0x51, 0xc0, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xd6, 0x01, 0x96, 0xc2, 0xd1, 0x4f, 0xcf, 0x30, 0xc0, 0x99, 0x1d, 0x27, 0x21, 0xdd, 0xc5, 0x2d, 0x38, 0x5f, 0x40, 0x7a, 0x16, 0x69, 0x1d, 0xad, 0xe8, 0x2c, 0x90, 0x23, 0xc8, 0x55, 0xfd, 0x8e, 0x2e, 0x8f, 0xbb, 0x56, 0x21, 0x02, 0xf0, 0x18, }, .ctx_len = 40, .tag = (const uint8_t []){ 0x87, 0x7e, 0x15, 0xd9, 0x88, 0x9e, 0x69, 0xa9, 0x9f, 0xcc, 0x6d, 0x72, 0x74, 0x65, 0xc3, 0x91, }, .tag_len = 16, .line = __LINE__, .id = 248 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x8e, 0xa0, 0xf8, 0xe8, 0xe8, 0x7b, 0xbf, 0xa9, 0x63, 0x68, 0xd8, 0x38, 0x33, 0xab, 0x47, 0x14, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x94, 0x8f, 0xbc, 0xec, 0xa1, 0x2a, 0x6e, 0x4f, 0xab, 0xb7, 0x9b, 0x6d, 0x96, 0x5e, 0x33, 0x6f, 0xd6, 0x01, 0x96, 0xc2, 0xd1, 0x4f, 0xcf, 0x30, 0xc0, 0x99, 0x1d, 0x27, 0x21, 0xdd, 0xc5, 0x2d, 0x38, 0x5f, 0x40, 0x7a, 0x16, 0x69, 0x1d, 0xad, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xcd, 0x57, 0x57, 0x62, 0x69, 0x45, 0x97, 0x6b, 0xa9, 0xf0, 0x26, 0x4b, 0xd6, 0xbe, 0xe8, 0x94, }, .tag_len = 16, .line = __LINE__, .id = 249 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x7b, 0x2d, 0xf4, 0xfb, 0xed, 0x1d, 0xe2, 0x72, 0x7e, 0xb2, 0x48, 0x98, 0xe5, 0xde, 0xab, 0xb9, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0xa1, 0xa0, 0x12, 0x06, 0x60, 0xff, 0x52, 0xe6, 0xb1, 0x70, 0x0b, 0x12, 0xc5, 0x4d, 0x2d, 0x33, 0xb9, 0x4b, 0x00, 0xcd, 0x78, 0x82, 0xd8, 0x85, 0x7d, 0x84, 0xe6, 0xe1, 0x83, 0xa1, 0xde, 0xa6, 0xee, 0x85, 0xa7, 0xda, 0x84, 0xfb, 0xc3, 0x5d, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xb0, 0x15, 0xd7, 0x2d, 0xa6, 0x2c, 0x81, 0xcb, 0x4d, 0x26, 0x72, 0x53, 0xb2, 0x0d, 0xb9, 0xe5, }, .tag_len = 16, .line = __LINE__, .id = 250 }, { .algo = TEE_ALG_AES_GCM, .mode = TEE_MODE_ENCRYPT, .key_type = TEE_TYPE_AES, .key = (const uint8_t []){ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87, 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f, }, .key_len = 32, .nonce = (const uint8_t []){ 0x24, 0x83, 0x6f, 0x0a, 0x46, 0xab, 0x66, 0x01, 0xa7, 0x60, 0x22, 0x1b, 0x07, 0x4c, 0xbd, 0x6d, }, .nonce_len = 16, .aad_incr = 0, .aad = NULL, .aad_len = 0, .in_incr = 0, .ptx = (const uint8_t []){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, .ptx_len = 40, .ctx = (const uint8_t []){ 0x5e, 0x34, 0x34, 0xb4, 0x5e, 0xdb, 0xf0, 0xd1, 0xf6, 0xe0, 0x2d, 0x11, 0x44, 0xdb, 0xf8, 0x67, 0xa1, 0xa0, 0x12, 0x06, 0x60, 0xff, 0x52, 0xe6, 0xb1, 0x70, 0x0b, 0x12, 0xc5, 0x4d, 0x2d, 0x33, 0xb9, 0x4b, 0x00, 0xcd, 0x78, 0x82, 0xd8, 0x85, }, .ctx_len = 40, .tag = (const uint8_t []){ 0xee, 0x74, 0xcc, 0xb3, 0x0d, 0x64, 0x9e, 0xbf, 0x69, 0x16, 0xd0, 0x5a, 0x7d, 0xbe, 0x56, 0x96, }, .tag_len = 16, .line = __LINE__, .id = 251 }, optee_test-4.3.0/host/xtest/asym_perf.c000066400000000000000000000732721464074351400201710ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2024, Huawei Technologies Co., Ltd */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "crypto_common.h" #include "xtest_helpers.h" static TEEC_Context ctx; static TEEC_Session sess; static TEEC_SharedMemory in_shm = { .flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT }; static TEEC_SharedMemory out_shm = { .flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT }; static TEEC_SharedMemory hash_shm = { .flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT }; static void errx(const char *msg, TEEC_Result res, uint32_t *orig) { fprintf(stderr, "%s: 0x%08x", msg, res); if (orig) fprintf(stderr, " (orig=%d)", (int)*orig); fprintf(stderr, "\n"); exit(1); } static void check_res(TEEC_Result res, const char *errmsg, uint32_t *orig) { if (res != TEEC_SUCCESS) errx(errmsg, res, orig); } #define CHECK(res, name, action) do { \ if ((res) != 0) { \ printf(name ": 0x%08x", (res)); \ action \ } \ } while(0) static void open_ta(void) { TEEC_UUID uuid = TA_CRYPTO_PERF_UUID; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t err_origin = 0; res = TEEC_InitializeContext(NULL, &ctx); check_res(res, "TEEC_InitializeContext", NULL); res = TEEC_OpenSession(&ctx, &sess, &uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &err_origin); check_res(res, "TEEC_OpenSession", &err_origin); } static void close_ta(void) { TEEC_CloseSession(&sess); TEEC_FinalizeContext(&ctx); } /* * Statistics * * We want to compute min, max, mean and standard deviation of processing time */ struct statistics { int n; double m; double m2; double min; double max; int initialized; }; /* Take new sample into account (Knuth/Welford algorithm) */ static void update_stats(struct statistics *s, uint64_t t) { double x = (double)t; double delta = x - s->m; s->n++; s->m += delta / s->n; s->m2 += delta * (x - s->m); if (!s->initialized) { s->min = x; s->max = x; s->initialized = 1; } else { if (s->min > x) s->min = x; if (s->max < x) s->max = x; } } static double stddev(struct statistics *s) { if (s->n < 2) return NAN; return sqrt(s->m2 / s->n); } static void usage(const char *progname, uint32_t width_bits, uint32_t main_algo, uint32_t mode, uint32_t salt_len, uint32_t size, uint32_t crypto_algo, int warmup, uint32_t l, uint32_t n) { fprintf(stderr, "Usage: %s [-h]\n", progname); fprintf(stderr, "Usage: %s [-a] [-k SIZE]", progname); fprintf(stderr, " [-a algo] [-n LOOP] [-r|--no-inited] [-d WIDTH_BITS]"); fprintf(stderr, " [-k SIZE] [-a crypto_algo] [-s salt_len] [-v [-v]] [-w SEC]"); fprintf(stderr, "\n"); fprintf(stderr, "Asymmetric performance testing tool for OP-TEE\n"); fprintf(stderr, "\n"); fprintf(stderr, "Options:\n"); fprintf(stderr, " -h|--help Print this help and exit\n"); fprintf(stderr, " -a ALGO Asymmetric algorithm [DH]\n"); fprintf(stderr, " DH, RSA_GENKEYPAIR, RSA_NOPAD_ENCRYPT, RSA_NOPAD_DECRYPT\n"); fprintf(stderr, " RSAES_PKCS1_V1_5_ENCRYPT, RSAES_PKCS1_V1_5_DECRYPT\n"); fprintf(stderr, " RSAES_PKCS1_OAEP_SHA1_ENCRYPT, RSAES_PKCS1_OAEP_SHA1_DECRYPT\n"); fprintf(stderr, " RSAES_PKCS1_OAEP_SHA224_ENCRYPT, RSAES_PKCS1_OAEP_SHA224_DECRYPT\n"); fprintf(stderr, " RSAES_PKCS1_OAEP_SHA256_ENCRYPT, RSAES_PKCS1_OAEP_SHA256_DECRYPT\n"); fprintf(stderr, " RSAES_PKCS1_OAEP_SHA384_ENCRYPT, RSAES_PKCS1_OAEP_SHA384_DECRYPT\n"); fprintf(stderr, " RSAES_PKCS1_OAEP_SHA512_ENCRYPT, RSAES_PKCS1_OAEP_SHA512_DECRYPT\n"); fprintf(stderr, " RSASSA_PKCS1_V1_5_SHA1_SIGN, RSASSA_PKCS1_V1_5_SHA1_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_V1_5_SHA224_SIGN, RSASSA_PKCS1_V1_5_SHA224_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_V1_5_SHA256_SIGN, RSASSA_PKCS1_V1_5_SHA256_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_V1_5_SHA384_SIGN, RSASSA_PKCS1_V1_5_SHA384_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_V1_5_SHA512_SIGN, RSASSA_PKCS1_V1_5_SHA512_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_PSS_MGF1_SHA1_SIGN, RSASSA_PKCS1_PSS_MGF1_SHA1_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_PSS_MGF1_SHA224_SIGN, RSASSA_PKCS1_PSS_MGF1_SHA224_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_PSS_MGF1_SHA256_SIGN, RSASSA_PKCS1_PSS_MGF1_SHA256_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_PSS_MGF1_SHA384_SIGN, RSASSA_PKCS1_PSS_MGF1_SHA384_VERIFY\n"); fprintf(stderr, " RSASSA_PKCS1_PSS_MGF1_SHA512_SIGN, RSASSA_PKCS1_PSS_MGF1_SHA512_VERIFY\n"); fprintf(stderr, " ECDSA_SIGN, ECDSA_VERIFY, ECDH, X25519, SM2_GENKEYPAIR, SM2_VERIFY\n"); fprintf(stderr, " SM2_ENCRYPT, SM2_DECRYPT\n"); fprintf(stderr, " -l LOOP Inner loop iterations [%u]\n", l); fprintf(stderr, " -n LOOP Outer test loop iterations [%u]\n", n); fprintf(stderr, " -r|--random Get input data from /dev/urandom (default: all zeros)\n"); fprintf(stderr, " -k SIZE Plaintext byte length [%u]\n", size); fprintf(stderr, " -d WIDTH_BITS Private key size in bits [%u]\n", width_bits); fprintf(stderr, " ECC: 192, 224, 256, 384 or 521, DH: <= 2048, RSA: <= 4096\n"); fprintf(stderr, " -s SALT_LEN Salt length in bytes (only when ALGO is one of RSA SSA_PKCS1_PSS_*)[%u]\n", salt_len); fprintf(stderr, " -w|--warmup SEC Warm-up time in seconds: execute a busy loop before [%d]\n", warmup); fprintf(stderr, " -v Be verbose (use twice for greater effect)\n"); } static void allocate_shm(TEEC_SharedMemory *shm, size_t sz) { TEEC_Result res = TEEC_ERROR_GENERIC; shm->buffer = NULL; shm->size = sz; res = TEEC_AllocateSharedMemory(&ctx, shm); check_res(res, "TEEC_AllocateSharedMemory()", NULL); } /* initial test buffer allocation (eventual registering to TEEC) */ static void alloc_buffers(size_t sz) { allocate_shm(&in_shm, sz); allocate_shm(&out_shm, TEE_MAX_OUT_SIZE); allocate_shm(&hash_shm, TEE_MAX_HASH_SIZE); } static void free_shm(void) { TEEC_ReleaseSharedMemory(&in_shm); TEEC_ReleaseSharedMemory(&out_shm); TEEC_ReleaseSharedMemory(&hash_shm); } static ssize_t read_random(void *in, size_t rsize) { static int rnd; ssize_t s = 0; if (!rnd) { rnd = open("/dev/urandom", O_RDONLY); if (rnd < 0) { perror("open"); return 1; } } s = read(rnd, in, rsize); if (s < 0) { perror("read"); return 1; } if ((size_t)s != rsize) printf("read: requested %zu bytes, got %zd\n", rsize, s); return 0; } static void get_current_time(struct timespec *ts) { if (clock_gettime(CLOCK_MONOTONIC, ts) < 0) { perror("clock_gettime"); exit(1); } } static uint64_t timespec_to_ns(struct timespec *ts) { return ((uint64_t)ts->tv_sec * 1000000000) + ts->tv_nsec; } static uint64_t timespec_diff_ns(struct timespec *start, struct timespec *end) { return timespec_to_ns(end) - timespec_to_ns(start); } static void prepare_obj(int width_bits, uint32_t main_algo, int mode) { uint32_t cmd = TA_CRYPTO_PERF_CMD_ASYM_PREPARE_OBJ; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); op.params[0].value.a = main_algo; op.params[0].value.b = width_bits; op.params[1].value.a = mode; res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand()", &ret_origin); } static void prepare_hash(int size, uint32_t main_algo) { uint32_t cmd = TA_CRYPTO_PERF_CMD_ASYM_PREPARE_HASH; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_INOUT, TEEC_NONE); op.params[0].value.a = main_algo; op.params[1].memref.parent = &in_shm; op.params[1].memref.size = size; op.params[2].memref.parent = &hash_shm; op.params[2].memref.size = hash_shm.size; res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand()", &ret_origin); hash_shm.size = op.params[2].memref.size; } static void prepare_attrs(uint8_t *buf, size_t blen) { uint32_t cmd = TA_CRYPTO_PERF_CMD_ASYM_PREPARE_ATTRS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.buffer = buf; op.params[0].tmpref.size = blen; res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand()", &ret_origin); } static void free_attrs(void) { uint32_t cmd = TA_CRYPTO_PERF_CMD_ASYM_FREE_ATTRS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand()", &ret_origin); } static void prepare_keypair(int width_bits, uint8_t *buf, size_t blen, uint32_t mode, uint32_t algo, uint32_t main_algo) { uint32_t cmd = TA_CRYPTO_PERF_CMD_ASYM_PREPARE_KEYPAIR; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE); op.params[0].value.a = width_bits; op.params[0].value.b = mode; op.params[1].value.a = main_algo; op.params[1].value.b = algo; op.params[2].tmpref.buffer = buf; op.params[2].tmpref.size = blen; res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand()", &ret_origin); } static void prepare_enc_sign(uint32_t size, uint32_t mode, uint8_t *buf, uint32_t blen) { uint32_t cmd = TA_CRYPTO_PERF_CMD_ASYM_PREPARE_ENC_SIGN; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT); op.params[0].memref.parent = (mode == MODE_DECRYPT) ? &in_shm : &hash_shm; op.params[0].memref.size = (mode == MODE_DECRYPT) ? size : hash_shm.size; op.params[1].memref.parent = &out_shm; op.params[1].memref.size = out_shm.size; op.params[2].value.a = mode; op.params[3].tmpref.buffer = buf; op.params[3].tmpref.size = blen; res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand()", &ret_origin); out_shm.size = op.params[1].memref.size; } static void do_warmup(int warmup) { struct timespec t0 = { }; struct timespec t = { }; int i = 0; get_current_time(&t0); do { for (i = 0; i < 100000; i++) ; get_current_time(&t); } while (timespec_diff_ns(&t0, &t) < (uint64_t)warmup * 1000000000); } static const char *yesno(int v) { return (v ? "yes" : "no"); } static double mb_per_sec(size_t size, double usec) { return (1000000000 / usec) * ((double)size / (1024 * 1024)); } static uint32_t get_curve_id(uint32_t width_bits) { switch (width_bits) { case ECC_CURVE_192: return TEE_ECC_CURVE_NIST_P192; case ECC_CURVE_224: return TEE_ECC_CURVE_NIST_P224; case ECC_CURVE_256: return TEE_ECC_CURVE_NIST_P256; case ECC_CURVE_384: return TEE_ECC_CURVE_NIST_P384; case ECC_CURVE_521: return TEE_ECC_CURVE_NIST_P521; default: fprintf(stderr, "ECC curve is not supported!\n"); } return TEE_CRYPTO_ELEMENT_NONE; } static int asym_perf_run_test(int mode, size_t size, uint32_t n, uint32_t l, int is_random, uint32_t warmup, uint32_t verbosity, uint32_t width_bits, uint32_t main_algo, uint32_t salt_len, uint32_t algo) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t cmd = TA_CRYPTO_PERF_CMD_ASYM_PROCESS; TEEC_Result res = TEEC_ERROR_GENERIC; uint8_t keygen_dh_p[DH_MAX_SIZE] = { }; uint8_t keygen_dh_g[DH_G_SIZE] = { }; TEE_Attribute params[4] = { }; size_t param_count = 0; uint32_t curve_id = TEE_CRYPTO_ELEMENT_NONE; struct statistics stats = { }; struct timespec ts = { }; struct timespec t0 = { }; struct timespec t1 = { }; uint32_t ret_origin = 0; uint8_t *buf = NULL; size_t blen = 0; double sd = 0; int n0 = n; if (clock_getres(CLOCK_MONOTONIC, &ts) < 0) { perror("clock_getres"); return -1; } verbose("random=%s, ", yesno(is_random == CRYPTO_USE_RANDOM)); verbose("inner loops=%u, loops=%u, warm-up=%u s\n", l, n, warmup); vverbose("Clock resolution is %jd ns\n", (intmax_t)ts.tv_sec * 1000000000 + ts.tv_nsec); open_ta(); alloc_buffers(size); if (is_random == CRYPTO_USE_ZEROS) memset((uint8_t *)in_shm.buffer, 0, size); else read_random(in_shm.buffer, size); if (mode == MODE_DECRYPT && main_algo == ALGO_RSA) { /* Ensure N > M */ ((unsigned char *)(in_shm.buffer))[0] = 0x00; } switch (main_algo) { case ALGO_DH: read_random(keygen_dh_p, BITS_TO_BYTES(width_bits)); read_random(keygen_dh_g, DH_G_SIZE); /* make sure the p is full width */ keygen_dh_p[0] |= 0x2; /* make sure keygen_dh_p is odd */ keygen_dh_p[BITS_TO_BYTES(width_bits) - 1] |= 0x1; xtest_add_attr(¶m_count, params, TEE_ATTR_DH_PRIME, keygen_dh_p, BITS_TO_BYTES(width_bits)); xtest_add_attr(¶m_count, params, TEE_ATTR_DH_BASE, keygen_dh_g, DH_G_SIZE); break; case ALGO_ECDSA: case ALGO_ECDH: curve_id = get_curve_id(width_bits); if (curve_id == TEE_CRYPTO_ELEMENT_NONE) goto out; xtest_add_attr_value(¶m_count, params, TEE_ATTR_ECC_CURVE, curve_id, 0); break; case ALGO_X25519: width_bits = WIDTH_BITS_25519; break; default: break; } prepare_obj(width_bits, main_algo, mode); res = pack_attrs(params, param_count, &buf, &blen); CHECK(res, "pack_attrs", goto out;); if (mode == MODE_GENKEYPAIR) { if (blen) prepare_attrs(buf, blen); cmd = TA_CRYPTO_PERF_CMD_ASYM_PROCESS_GEN_KEYPAIR; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].value.a = width_bits; op.params[0].value.b = l; } else { prepare_keypair(width_bits, buf, blen, mode, algo, main_algo); if (mode == MODE_SIGN || mode == MODE_VERIFY) prepare_hash(size, main_algo); if (main_algo == ALGO_RSA && algo >= RSASSA_PKCS1_PSS_MGF1_SHA1) { params[0].attributeID = TEE_ATTR_RSA_PSS_SALT_LENGTH; params[0].content.value.a = salt_len; params[0].content.value.b = 0; param_count = 1; res = pack_attrs(params, param_count, &buf, &blen); CHECK(res, "pack_attrs", goto out;); } if (blen) prepare_attrs(buf, blen); cmd = TA_CRYPTO_PERF_CMD_ASYM_PROCESS; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE); op.params[0].value.a = l; op.params[0].value.b = mode; switch (mode) { case MODE_ENCRYPT: op.params[1].memref.parent = &in_shm; op.params[1].memref.size = size; op.params[2].memref.parent = &out_shm; op.params[2].memref.size = out_shm.size; break; case MODE_SIGN: op.params[1].memref.parent = &hash_shm; op.params[1].memref.size = hash_shm.size; op.params[2].memref.parent = &out_shm; op.params[2].memref.size = out_shm.size; break; case MODE_DECRYPT: prepare_enc_sign(size, mode, buf, blen); op.params[1].memref.parent = &out_shm; op.params[1].memref.size = out_shm.size; op.params[2].memref.parent = &in_shm; op.params[2].memref.size = size; break; case MODE_VERIFY: prepare_enc_sign(size, mode, buf, blen); op.params[1].memref.parent = &hash_shm; op.params[1].memref.size = hash_shm.size; op.params[2].memref.parent = &out_shm; op.params[2].memref.size = out_shm.size; break; default: fprintf(stderr, "Unexpected mode value\n"); goto out; } } if (warmup) do_warmup(warmup); while (n-- > 0) { if (mode == MODE_ENCRYPT && main_algo == ALGO_RSA) { /* Ensure N > M */ ((unsigned char *)(in_shm.buffer))[0] = 0x00; /* * Avoid the problem that the last encryption result is * shorter than the plaintext. */ op.params[3].memref.size = out_shm.size; } get_current_time(&t0); res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand()", &ret_origin); get_current_time(&t1); update_stats(&stats, timespec_diff_ns(&t0, &t1)); if (n % (n0 / 10) == 0) vverbose("#"); } vverbose("\n"); sd = stddev(&stats); printf("%.3f ms/op\n", stats.m / 1000000 / l); printf("min=%gus max=%gus mean=%gus stddev=%gus (cv %g%%) (%gMiB/s)\n", stats.min / 1000, stats.max / 1000, stats.m / 1000, sd / 1000, 100 * sd / stats.m, mb_per_sec(size, stats.m)); verbose("2-sigma interval: %g..%gus (%g..%gMiB/s)\n", (stats.m - 2 * sd) / 1000, (stats.m + 2 * sd) / 1000, mb_per_sec(size, stats.m + 2 * sd), mb_per_sec(size, stats.m - 2 * sd)); out: free_attrs(); free(buf); free_shm(); close_ta(); return res; } #define NEXT_ARG(i) \ do { \ if (++i == argc) { \ fprintf(stderr, "%s: %s: missing argument\n", \ argv[0], argv[i - 1]); \ return 1; \ } \ } while (0) #define USAGE() usage(argv[0], width_bits, main_algo, mode, \ salt_len, size, crypto_algo, warmup, l, n) static int get_rsa_hash_len(uint32_t algo) { switch (algo) { case RSAES_PKCS1_OAEP_SHA1: case RSASSA_PKCS1_V1_5_SHA1: case RSASSA_PKCS1_PSS_MGF1_SHA1: return SHA1_LEN; case RSAES_PKCS1_OAEP_SHA224: case RSASSA_PKCS1_V1_5_SHA224: case RSASSA_PKCS1_PSS_MGF1_SHA224: return SHA224_LEN; case RSAES_PKCS1_OAEP_SHA256: case RSASSA_PKCS1_V1_5_SHA256: case RSASSA_PKCS1_PSS_MGF1_SHA256: return SHA256_LEN; case RSAES_PKCS1_OAEP_SHA384: case RSASSA_PKCS1_V1_5_SHA384: case RSASSA_PKCS1_PSS_MGF1_SHA384: return SHA384_LEN; case RSAES_PKCS1_OAEP_SHA512: case RSASSA_PKCS1_V1_5_SHA512: case RSASSA_PKCS1_PSS_MGF1_SHA512: return SHA512_LEN; default: fprintf(stderr, "The algo[%u] is not valid!\n", algo); } return -1; } static int check_rsa_cipher_params(uint32_t crypto_algo, int width_bits, int size) { int width_bytes = BITS_TO_BYTES(width_bits); int hash_len = 0; if (crypto_algo == RSA_NOPAD) { if (size > width_bytes) { fprintf(stderr, "The size or algo is not valid!\n"); return -1; } } else if (crypto_algo == RSAES_PKCS1_V1_5) { if ((size + PKCS_V1_5_MIN) > width_bytes) { fprintf(stderr, "The size or algo is not valid!\n"); return -1; } } else if (crypto_algo > RSAES_PKCS1_V1_5) { hash_len = get_rsa_hash_len(crypto_algo); if (hash_len == -1) return -1; if (OAEP_HASH_LEN(hash_len) >= (width_bytes - OAEP_OTHER_LEN)) { fprintf(stderr, "The width_bits or algo is not valid!\n"); return -1; } else if (size > (width_bytes - OAEP_HASH_LEN(hash_len) - OAEP_OTHER_LEN)) { fprintf(stderr, "The size or algo is not valid!\n"); return -1; } } else { return -1; } return 0; } static int check_rsa_hash_params(uint32_t crypto_algo, int width_bits, int size, int salt_len) { int width_bytes = BITS_TO_BYTES(width_bits); int salt_temp = 0; int hash_len = get_rsa_hash_len(crypto_algo); if (hash_len == -1) return -1; switch (crypto_algo) { case RSASSA_PKCS1_V1_5_SHA1: if (width_bytes < hash_len + DERCODE_SHA1_LEN + PKCS_V1_5_MIN) { fprintf(stderr, "The size or algo is not valid!\n"); return -1; } return 0; case RSASSA_PKCS1_V1_5_SHA224: case RSASSA_PKCS1_V1_5_SHA256: case RSASSA_PKCS1_V1_5_SHA384: case RSASSA_PKCS1_V1_5_SHA512: if (width_bytes < hash_len + DERCODE_SHA_LEN + PKCS_V1_5_MIN) { fprintf(stderr, "The size or algo is not valid!\n"); return -1; } return 0; case RSASSA_PKCS1_PSS_MGF1_SHA1: case RSASSA_PKCS1_PSS_MGF1_SHA224: case RSASSA_PKCS1_PSS_MGF1_SHA256: case RSASSA_PKCS1_PSS_MGF1_SHA384: case RSASSA_PKCS1_PSS_MGF1_SHA512: salt_temp = (salt_len == 0 ? hash_len : salt_len); if (salt_temp > width_bytes || width_bytes < hash_len + salt_temp + PSS_OTHER_LEN) { fprintf(stderr, "The size or algo is not valid!\n"); return -1; } return 0; default: return -1; } } int asym_perf_runner_cmd_parser(int argc, char *argv[]) { int verbosity = CRYPTO_DEF_VERBOSITY; int is_random = CRYPTO_USE_ZEROS; unsigned int n = CRYPTO_DEF_COUNT / 10; unsigned int l = CRYPTO_DEF_LOOPS; int warmup = CRYPTO_DEF_WARMUP; int mode = MODE_GENKEYPAIR; int width_bits = 2048; int main_algo = ALGO_DH; int crypto_algo = -1; int size = 256; int salt_len = 0; int i = 0; /* Parse command line */ for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { USAGE(); return 0; } } for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-a")) { NEXT_ARG(i); if (!strcasecmp(argv[i], "DH")) { main_algo = ALGO_DH; mode = MODE_GENKEYPAIR; } else if (!strcasecmp(argv[i], "RSA_GENKEYPAIR")) { main_algo = ALGO_RSA; mode = MODE_GENKEYPAIR; } else if (!strcasecmp(argv[i], "RSA_NOPAD_ENCRYPT")) { main_algo = ALGO_RSA; mode = MODE_ENCRYPT; crypto_algo = RSA_NOPAD; } else if (!strcasecmp(argv[i], "RSA_NOPAD_DECRYPT")) { main_algo = ALGO_RSA; mode = MODE_DECRYPT; crypto_algo = RSA_NOPAD; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_V1_5_ENCRYPT")) { main_algo = ALGO_RSA; mode = MODE_ENCRYPT; crypto_algo = RSAES_PKCS1_V1_5; size -= PKCS_V1_5_MIN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_V1_5_DECRYPT")) { main_algo = ALGO_RSA; mode = MODE_DECRYPT; crypto_algo = RSAES_PKCS1_V1_5; size -= PKCS_V1_5_MIN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA1_ENCRYPT")) { main_algo = ALGO_RSA; mode = MODE_ENCRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA1; size -= OAEP_HASH_LEN(SHA1_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA1_DECRYPT")) { main_algo = ALGO_RSA; mode = MODE_DECRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA1; size -= OAEP_HASH_LEN(SHA1_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA224_ENCRYPT")) { main_algo = ALGO_RSA; mode = MODE_ENCRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA224; size -= OAEP_HASH_LEN(SHA224_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA224_DECRYPT")) { main_algo = ALGO_RSA; mode = MODE_DECRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA224; size -= OAEP_HASH_LEN(SHA224_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA256_ENCRYPT")) { main_algo = ALGO_RSA; mode = MODE_ENCRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA256; size -= OAEP_HASH_LEN(SHA256_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA256_DECRYPT")) { main_algo = ALGO_RSA; mode = MODE_DECRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA256; size -= OAEP_HASH_LEN(SHA256_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA384_ENCRYPT")) { main_algo = ALGO_RSA; mode = MODE_ENCRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA384; size -= OAEP_HASH_LEN(SHA384_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA384_DECRYPT")) { main_algo = ALGO_RSA; mode = MODE_DECRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA384; size -= OAEP_HASH_LEN(SHA384_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA512_ENCRYPT")) { main_algo = ALGO_RSA; mode = MODE_ENCRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA512; size -= OAEP_HASH_LEN(SHA512_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSAES_PKCS1_OAEP_SHA512_DECRYPT")) { main_algo = ALGO_RSA; mode = MODE_DECRYPT; crypto_algo = RSAES_PKCS1_OAEP_SHA512; size -= OAEP_HASH_LEN(SHA512_LEN) + OAEP_OTHER_LEN; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA1_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_V1_5_SHA1; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA1_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_V1_5_SHA1; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA224_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_V1_5_SHA224; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA224_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_V1_5_SHA224; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA256_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_V1_5_SHA256; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA256_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_V1_5_SHA256; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA384_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_V1_5_SHA384; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA384_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_V1_5_SHA384; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA512_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_V1_5_SHA512; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_V1_5_SHA512_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_V1_5_SHA512; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA1_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA1; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA1_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA1; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA224_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA224; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA224_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA224; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA256_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA256; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA256_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA256; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA384_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA384; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA384_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA384; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA512_SIGN")) { main_algo = ALGO_RSA; mode = MODE_SIGN; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA512; } else if (!strcasecmp(argv[i], "RSASSA_PKCS1_PSS_MGF1_SHA512_VERIFY")) { main_algo = ALGO_RSA; mode = MODE_VERIFY; crypto_algo = RSASSA_PKCS1_PSS_MGF1_SHA512; } else if (!strcasecmp(argv[i], "ECDSA_SIGN")) { main_algo = ALGO_ECDSA; mode = MODE_SIGN; width_bits = 256; } else if (!strcasecmp(argv[i], "ECDSA_VERIFY")) { main_algo = ALGO_ECDSA; mode = MODE_VERIFY; width_bits = 256; } else if (!strcasecmp(argv[i], "ECDH")) { main_algo = ALGO_ECDH; width_bits = 256; mode = MODE_GENKEYPAIR; } else if (!strcasecmp(argv[i], "X25519")) { main_algo = ALGO_X25519; width_bits = 256; mode = MODE_GENKEYPAIR; } else if (!strcasecmp(argv[i], "SM2_GENKEYPAIR")) { main_algo = ALGO_SM2; width_bits = 256; mode = MODE_GENKEYPAIR; } else if (!strcasecmp(argv[i], "SM2_SIGN")) { main_algo = ALGO_SM2; width_bits = 256; mode = MODE_SIGN; } else if (!strcasecmp(argv[i], "SM2_VERIFY")) { main_algo = ALGO_SM2; width_bits = 256; mode = MODE_VERIFY; } else if (!strcasecmp(argv[i], "SM2_ENCRYPT")) { main_algo = ALGO_SM2; width_bits = 256; mode = MODE_ENCRYPT; } else if (!strcasecmp(argv[i], "SM2_DECRYPT")) { main_algo = ALGO_SM2; width_bits = 256; mode = MODE_DECRYPT; } else { fprintf(stderr, "%s, invalid main_algo\n", argv[0]); USAGE(); return 1; } } else if (!strcmp(argv[i], "-l")) { NEXT_ARG(i); l = atoi(argv[i]); } else if (!strcmp(argv[i], "-n")) { NEXT_ARG(i); n = atoi(argv[i]); } else if (!strcmp(argv[i], "--random") || !strcmp(argv[i], "-r")) { is_random = CRYPTO_USE_RANDOM; } else if (!strcmp(argv[i], "-k")) { NEXT_ARG(i); size = atoi(argv[i]); } else if (!strcmp(argv[i], "-d")) { NEXT_ARG(i); width_bits = atoi(argv[i]); } else if (!strcmp(argv[i], "-s")) { NEXT_ARG(i); salt_len = atoi(argv[i]); } else if (!strcmp(argv[i], "-v")) { verbosity++; } else if (!strcmp(argv[i], "--warmup") || !strcmp(argv[i], "-w")) { NEXT_ARG(i); warmup = atoi(argv[i]); } else { fprintf(stderr, "%s: invalid argument: %s\n", argv[0], argv[i]); USAGE(); return 1; } } if (main_algo == ALGO_RSA) { if (mode == MODE_ENCRYPT || mode == MODE_DECRYPT) { if (check_rsa_cipher_params(crypto_algo, width_bits, size)) { USAGE(); return -1; } } else if (mode == MODE_SIGN || mode == MODE_VERIFY) { if (check_rsa_hash_params(crypto_algo, width_bits, size, salt_len)) { USAGE(); return -1; } } } if (mode == MODE_GENKEYPAIR || main_algo == ALGO_SM2) size = BITS_TO_BYTES(width_bits); return asym_perf_run_test(mode, size, n, l, is_random, warmup, verbosity, width_bits, main_algo, salt_len, crypto_algo); } optee_test-4.3.0/host/xtest/benchmark_1000.c000066400000000000000000000070721464074351400205710ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2015, Linaro Limited */ #include #include #include #include "xtest_test.h" #include "xtest_helpers.h" #include #include #define DO_VERIFY 0 #define DEFAULT_DATA_SIZE (2 * 1024 * 1024) /* 2MB */ #define DEFAULT_CHUNK_SIZE (1 * 1024) /* 1KB */ #define DEFAULT_COUNT (10) size_t data_size_table[] = { 256, 512, 1024, 2 * 1024, 4 * 1024, 16 * 1024, 512 * 1024, 1024 * 1024, 0 }; static void xtest_tee_benchmark_1001(ADBG_Case_t *Case_p); static void xtest_tee_benchmark_1002(ADBG_Case_t *Case_p); static void xtest_tee_benchmark_1003(ADBG_Case_t *Case_p); static TEEC_Result run_test_with_args(enum storage_benchmark_cmd cmd, uint32_t arg0, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t *out0, uint32_t *out1) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session sess = { }; uint32_t orig = 0; res = xtest_teec_open_session(&sess, &storage_benchmark_ta_uuid, NULL, &orig); if (res != TEEC_SUCCESS) return res; op.params[0].value.a = arg0; op.params[0].value.b = arg1; op.params[1].value.a = arg2; op.params[1].value.b = arg3; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(&sess, cmd, &op, &orig); if (out0) *out0 = op.params[2].value.a; if (out1) *out1 = op.params[2].value.b; TEEC_CloseSession(&sess); return res; } struct test_record { size_t data_size; float spent_time; float speed_in_kb; }; static TEEC_Result run_chunk_access_test(enum storage_benchmark_cmd cmd, uint32_t data_size, uint32_t chunk_size, struct test_record *rec) { TEE_Result res = TEEC_ERROR_GENERIC; uint32_t spent_time = 0; res = run_test_with_args(cmd, data_size, chunk_size, DO_VERIFY, 0, &spent_time, NULL); rec->data_size = data_size; rec->spent_time = (float)spent_time / 1000.0; rec->speed_in_kb = ((float)data_size / 1024.0) / rec->spent_time; return res; } static void show_test_result(struct test_record records[], size_t size) { size_t i = 0; printf("-----------------+---------------+----------------\n"); printf(" Data Size (B) \t | Time (s)\t | Speed (kB/s)\t \n"); printf("-----------------+---------------+----------------\n"); for (i = 0; i < size; i++) { printf(" %8zd \t | %8.3f \t | %8.3f\n", records[i].data_size, records[i].spent_time, records[i].speed_in_kb); } printf("-----------------+---------------+----------------\n"); } static void chunk_test(ADBG_Case_t *c, enum storage_benchmark_cmd cmd) { uint32_t chunk_size = DEFAULT_CHUNK_SIZE; struct test_record records[ARRAY_SIZE(data_size_table) - 1]; size_t i = 0; for (i = 0; data_size_table[i]; i++) { ADBG_EXPECT_TEEC_SUCCESS(c, run_chunk_access_test(cmd, data_size_table[i], chunk_size, &records[i])); } show_test_result(records, ARRAY_SIZE(records)); } static void xtest_tee_benchmark_1001(ADBG_Case_t *c) { chunk_test(c, TA_STORAGE_BENCHMARK_CMD_TEST_WRITE); } static void xtest_tee_benchmark_1002(ADBG_Case_t *c) { chunk_test(c, TA_STORAGE_BENCHMARK_CMD_TEST_READ); } static void xtest_tee_benchmark_1003(ADBG_Case_t *c) { chunk_test(c, TA_STORAGE_BENCHMARK_CMD_TEST_REWRITE); } ADBG_CASE_DEFINE(benchmark, 1001, xtest_tee_benchmark_1001, "TEE Trusted Storage Performance Test (WRITE)"); ADBG_CASE_DEFINE(benchmark, 1002, xtest_tee_benchmark_1002, "TEE Trusted Storage Performance Test (READ)"); ADBG_CASE_DEFINE(benchmark, 1003, xtest_tee_benchmark_1003, "TEE Trusted Storage Performance Test (REWRITE)"); optee_test-4.3.0/host/xtest/benchmark_2000.c000066400000000000000000000055711464074351400205740ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2015, Linaro Limited */ #include #include #include #include "xtest_test.h" #include "xtest_helpers.h" #include #include /* SHA bechmarks */ static void xtest_tee_benchmark_2001(ADBG_Case_t *Case_p); static void xtest_tee_benchmark_2002(ADBG_Case_t *Case_p); /* AES benchmarks */ static void xtest_tee_benchmark_2011(ADBG_Case_t *Case_p); static void xtest_tee_benchmark_2012(ADBG_Case_t *Case_p); /* ----------------------------------------------------------------------- */ /* -------------------------- SHA Benchmarks ----------------------------- */ /* ----------------------------------------------------------------------- */ static void xtest_tee_benchmark_2001(ADBG_Case_t *c) { UNUSED(c); int algo = TA_SHA_SHA1; /* Algorithm */ size_t size = 1024; /* Buffer size */ int offset = 0; /* Buffer offset wrt. alloc'ed address */ hash_perf_run_test(algo, size, CRYPTO_DEF_COUNT, CRYPTO_DEF_LOOPS, CRYPTO_USE_RANDOM, offset, CRYPTO_DEF_WARMUP, CRYPTO_DEF_VERBOSITY); } static void xtest_tee_benchmark_2002(ADBG_Case_t *c) { UNUSED(c); int algo = TA_SHA_SHA256; /* Algorithm */ size_t size = 4096; /* Buffer size */ int offset = 0; /* Buffer offset wrt. alloc'ed address */ hash_perf_run_test(algo, size, CRYPTO_DEF_COUNT, CRYPTO_DEF_LOOPS, CRYPTO_USE_RANDOM, offset, CRYPTO_DEF_WARMUP, CRYPTO_DEF_VERBOSITY); } ADBG_CASE_DEFINE(benchmark, 2001, xtest_tee_benchmark_2001, "TEE SHA Performance test (TA_SHA_SHA1)"); ADBG_CASE_DEFINE(benchmark, 2002, xtest_tee_benchmark_2002, "TEE SHA Performance test (TA_SHA_SHA226)"); /* ----------------------------------------------------------------------- */ /* -------------------------- AES Benchmarks ----------------------------- */ /* ----------------------------------------------------------------------- */ static void xtest_tee_benchmark_2011(ADBG_Case_t *c) { UNUSED(c); int mode = TA_AES_ECB; /* AES mode */ int decrypt = 0; /* Encrypt */ int keysize = AES_128; size_t size = 1024; /* Buffer size */ aes_perf_run_test(mode, keysize, decrypt, size, CRYPTO_DEF_UNIT_SIZE, CRYPTO_DEF_COUNT, CRYPTO_DEF_LOOPS, CRYPTO_USE_RANDOM, AES_PERF_INPLACE, CRYPTO_DEF_WARMUP, CRYPTO_DEF_VERBOSITY); } static void xtest_tee_benchmark_2012(ADBG_Case_t *c) { UNUSED(c); int mode = TA_AES_CBC; /* AES mode */ int decrypt = 0; /* Encrypt */ int keysize = AES_256; size_t size = 1024; /* Buffer size */ aes_perf_run_test(mode, keysize, decrypt, size, CRYPTO_DEF_UNIT_SIZE, CRYPTO_DEF_COUNT, CRYPTO_DEF_LOOPS, CRYPTO_USE_RANDOM, AES_PERF_INPLACE, CRYPTO_DEF_WARMUP, CRYPTO_DEF_VERBOSITY); } ADBG_CASE_DEFINE(benchmark, 2011, xtest_tee_benchmark_2011, "TEE AES Performance test (TA_AES_ECB)"); ADBG_CASE_DEFINE(benchmark, 2012, xtest_tee_benchmark_2012, "TEE AES Performance test (TA_AES_CBC)"); optee_test-4.3.0/host/xtest/clear_storage.c000066400000000000000000000024161464074351400210060ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2023, Linaro Limited */ #include #include #include #include #include #include "clear_storage.h" static int clear_storage_for_ta(TEEC_UUID *uuid) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Context ctx = { }; TEEC_Session sess = { }; TEEC_Operation op = { }; uint32_t eo = 0; res = TEEC_InitializeContext(NULL, &ctx); if (res) errx(EXIT_FAILURE, "TEEC_InitializeContext: %#"PRIx32, res); res = TEEC_OpenSession(&ctx, &sess, uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &eo); if (res) errx(EXIT_FAILURE, "TEEC_OpenSession: res %#"PRIx32" err_orig %#"PRIx32, res, eo); op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_CLEAR_STORAGE, &op, &eo); if (res) errx(EXIT_FAILURE, "TEEC_InvokeCommand: res %#"PRIx32" err_orig %#"PRIx32, res, eo); TEEC_CloseSession(&sess); TEEC_FinalizeContext(&ctx); return 0; } int clear_storage(void) { TEEC_UUID uuid[] = { TA_STORAGE_UUID, TA_STORAGE2_UUID }; size_t i = 0; int res = 0; for (i = 0; i < ARRAY_SIZE(uuid); i++) { res = clear_storage_for_ta(uuid + i); if (res) break; } return res; } optee_test-4.3.0/host/xtest/clear_storage.h000066400000000000000000000002731464074351400210120ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2023, Linaro Limited */ #ifndef CLEAR_STORAGE_H #define CLEAR_STORAGE_H int clear_storage(void); #endif /*CLEAR_STORAGE_H*/ optee_test-4.3.0/host/xtest/crypto_common.h000066400000000000000000000030571464074351400210730ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef XTEST_CRYPTO_COMMON_H #define XTEST_CRYPTO_COMMON_H #include "ta_crypto_perf.h" #define AES_PERF_INPLACE 0 #define CRYPTO_DEF_LOOPS 1 /* Default amount of inner loops */ #define CRYPTO_USE_ZEROS 0 /* Init input data to zero */ #define CRYPTO_USE_RANDOM 1 /* Get input data from /dev/urandom */ #define CRYPTO_NOT_INITED 2 /* Input data are not initialized */ #define CRYPTO_DEF_WARMUP 2 /* Start with a 2-second busy loop */ #define CRYPTO_DEF_COUNT 5000 /* Default number of measurements */ #define CRYPTO_DEF_VERBOSITY 0 #define CRYPTO_DEF_UNIT_SIZE 0 /* Process whole buffer */ #define _verbose(lvl, ...) \ do { \ if (verbosity >= lvl) { \ printf(__VA_ARGS__); \ fflush(stdout); \ } \ } while (0) #define verbose(...) _verbose(1, __VA_ARGS__) #define vverbose(...) _verbose(2, __VA_ARGS__) int aes_perf_runner_cmd_parser(int argc, char *argv[]); void aes_perf_run_test(int mode, int keysize, int decrypt, size_t size, size_t unit, unsigned int n, unsigned int l, int random_in, int in_place, int warmup, int verbosity); int hash_perf_runner_cmd_parser(int argc, char *argv[]); void hash_perf_run_test(int algo, size_t size, unsigned int n, unsigned int l, int random_in, int offset, int warmup, int verbosity); int asym_perf_runner_cmd_parser(int argc, char *argv[]); #ifdef CFG_SECURE_DATA_PATH int sdp_basic_runner_cmd_parser(int argc, char *argv[]); #endif #endif /* XTEST_CRYPTO_PERF_H */ optee_test-4.3.0/host/xtest/ffa_spmc_1000.c000066400000000000000000000367621464074351400204250ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-3-Clause /* * Copyright (c) 2022-2023, Arm Limited and Contributors. All rights reserved. */ #include #include #include #include #include #include #include "include/uapi/linux/arm_ffa_user.h" #include "xtest_helpers.h" #include "xtest_test.h" #define FFA_DRIVER_FS_PATH "/sys/kernel/debug/arm_ffa_user" #define SPMC_TEST_OK 0xaa #define INCORRECT_ENDPOINT_ID 0xffff #define NORMAL_WORLD_ENDPOINT_ID 0 #define FFA_USER_REQ_VER_MAJOR 5 #define FFA_USER_REQ_VER_MINOR 0 #define FFA_USER_REQ_VER_PATCH 1 /* Get the 32 least significant bits of a handle.*/ #define MEM_SHARE_HANDLE_LOW(x) ((x) & 0xffffffff) /* Get the 32 most significant bits of a handle.*/ #define MEM_SHARE_HANDLE_HIGH(x) (((x) >> 32) & 0xffffffff) #define MEM_SHARE_HANDLE_LOW_INDEX 1 #define MEM_SHARE_HANDLE_HIGH_INDEX 2 #define MEM_SHARE_HANDLE_ENDPOINT_INDEX 3 enum sp_tests { EP_TEST_SP, EP_TEST_SP_COMMUNICATION, EP_TEST_SP_INCREASE, EP_TRY_R_ACCESS, EP_TRY_W_ACCESS, EP_RETRIEVE, EP_RELINQUISH, EP_SP_MEM_SHARING, EP_SP_MEM_SHARING_MULTI, EP_SP_MEM_SHARING_EXC, EP_SP_MEM_INCORRECT_ACCESS, EP_SP_NOP }; static int ffa_fd = -1; static const char test_endpoint1_uuid[] = "5c9edbc3-7b3a-4367-9f83-7c191ae86a37"; static const char test_endpoint2_uuid[] = "7817164c-c40c-4d1a-867a-9bb2278cf41a"; static const char test_endpoint3_uuid[] = "23eb0100-e32a-4497-9052-2f11e584afa6"; static struct ffa_ioctl_ep_desc test_endpoint1 = { .uuid_ptr = (uint64_t)test_endpoint1_uuid, }; static struct ffa_ioctl_ep_desc test_endpoint2 = { .uuid_ptr = (uint64_t)test_endpoint2_uuid, }; static struct ffa_ioctl_ep_desc test_endpoint3 = { .uuid_ptr = (uint64_t)test_endpoint3_uuid, }; static bool check_ffa_user_version(void) { FILE *f = NULL; int ver_major = -1; int ver_minor = -1; int ver_patch = -1; int scan_cnt = 0; f = fopen("/sys/module/arm_ffa_user/version", "r"); if (f) { scan_cnt = fscanf(f, "%d.%d.%d", &ver_major, &ver_minor, &ver_patch); fclose(f); if (scan_cnt != 3) { printf("error: failed to parse arm_ffa_user version\n"); return false; } } else { printf("error: failed to read arm_ffa_user module info - %s\n", strerror(errno)); return false; } if (ver_major != FFA_USER_REQ_VER_MAJOR) goto err; if (ver_minor < FFA_USER_REQ_VER_MINOR) goto err; if (ver_minor == FFA_USER_REQ_VER_MINOR) if (ver_patch < FFA_USER_REQ_VER_PATCH) goto err; return true; err: printf("error: Incompatible arm_ffa_user driver detected."); printf("Found v%d.%d.%d wanted >= v%d.%d.%d)\n", ver_major, ver_minor, ver_patch, FFA_USER_REQ_VER_MAJOR, FFA_USER_REQ_VER_MINOR, FFA_USER_REQ_VER_PATCH); return false; } static void close_debugfs(void) { int err = 0; if (ffa_fd >= 0) { err = close(ffa_fd); if (err < 0) Do_ADBG_Log("Error: Could not close the FF-A driver"); } ffa_fd = -1; } static bool init_sp_xtest(ADBG_Case_t *c) { if (!check_ffa_user_version()) return false; if (ffa_fd < 0) { ffa_fd = open(FFA_DRIVER_FS_PATH, O_RDWR); if (ffa_fd < 0) { Do_ADBG_Log("Error: Could not open the FF-A driver"); return false; } } return true; } static int start_sp_test(uint16_t endpoint, enum sp_tests test, struct ffa_ioctl_msg_args *args) { args->dst_id = endpoint; args->args[0] = test; return ioctl(ffa_fd, FFA_IOC_MSG_SEND, args); } static uint16_t get_endpoint_id(uint64_t endp) { struct ffa_ioctl_ep_desc sid = { .uuid_ptr = endp }; /* Get ID of destination SP based on UUID */ if (ioctl(ffa_fd, FFA_IOC_GET_PART_ID, &sid)) return INCORRECT_ENDPOINT_ID; return sid.id; } static void xtest_ffa_spmc_test_1001(ADBG_Case_t *c) { struct ffa_ioctl_msg_args args = { 0 }; uint16_t endpoint1_id = 0; uint16_t endpoint2_id = 0; int rc = 0; Do_ADBG_BeginSubCase(c, "SP1 comms check"); if (!init_sp_xtest(c)) { Do_ADBG_Log("Failed to initialise test, skipping SP test"); goto out; } endpoint1_id = get_endpoint_id(test_endpoint1.uuid_ptr); if (endpoint1_id == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_1 sp, skipping SP test"); Do_ADBG_Log("Add xtest_1 sp to the image to enable tests"); goto out; } memset(&args, 0, sizeof(args)); rc = start_sp_test(endpoint1_id, EP_TEST_SP, &args); if (!ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK)) goto out; Do_ADBG_EndSubCase(c, "SP1 comms check"); Do_ADBG_BeginSubCase(c, "Sp2 comms check"); endpoint2_id = get_endpoint_id(test_endpoint2.uuid_ptr); if (endpoint2_id == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_2 sp, skipping SP test"); Do_ADBG_Log("Add xtest_2 sp to the image to enable tests"); goto out; } memset(&args, 0, sizeof(args)); rc = start_sp_test(endpoint2_id, EP_TEST_SP, &args); if (!ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK)) goto out; Do_ADBG_EndSubCase(c, "Sp2 comms check"); /* Test SP to SP messaging. */ Do_ADBG_BeginSubCase(c, "SP to SP messaging check"); memset(&args, 0, sizeof(args)); args.args[1] = endpoint2_id; rc = start_sp_test(endpoint1_id, EP_TEST_SP_COMMUNICATION, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); memset(&args, 0, sizeof(args)); args.args[1] = endpoint1_id; rc = start_sp_test(endpoint2_id, EP_TEST_SP_COMMUNICATION, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); out: Do_ADBG_EndSubCase(c, NULL); close_debugfs(); } ADBG_CASE_DEFINE(ffa_spmc, 1001, xtest_ffa_spmc_test_1001, "Test FF-A communication"); static void check_alive(ADBG_Case_t *c, uint16_t endpoint) { struct ffa_ioctl_msg_args args = {}; int rc = 0; args.dst_id = endpoint; rc = start_sp_test(endpoint, EP_SP_NOP, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); } static int share_mem(uint16_t endpoint, uint64_t *handle) { int status = false; struct ffa_ioctl_shm_desc shm_desc = { .dst_id = endpoint, .size = 0x1000 }; status = ioctl(ffa_fd, FFA_IOC_SHM_INIT, &shm_desc); if (!status) *handle = shm_desc.handle; return status; } static int set_up_mem(struct ffa_ioctl_ep_desc *endp, struct ffa_ioctl_msg_args *args, uint64_t *handle, ADBG_Case_t *c) { uint16_t endpoint = 0; int rc = 0; endpoint = get_endpoint_id(endp->uuid_ptr); *handle = 0; /* Share memory with SP*/ rc = share_mem(endpoint, handle); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); if (!ADBG_EXPECT_NOT_NULL(c, handle)) return TEEC_ERROR_GENERIC; /* SP will retrieve the memory region. */ memset(args, 0, sizeof(*args)); args->dst_id = endpoint; args->args[MEM_SHARE_HANDLE_LOW_INDEX] = MEM_SHARE_HANDLE_LOW(*handle); args->args[MEM_SHARE_HANDLE_HIGH_INDEX] = MEM_SHARE_HANDLE_HIGH(*handle); args->args[MEM_SHARE_HANDLE_ENDPOINT_INDEX] = NORMAL_WORLD_ENDPOINT_ID; rc = start_sp_test(endpoint, EP_RETRIEVE, args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args->args[0], ==, SPMC_TEST_OK); return TEEC_SUCCESS; } static void xtest_ffa_spmc_test_1002(ADBG_Case_t *c) { struct ffa_ioctl_msg_args args = { 0 }; uint64_t handle = 0; uint16_t endpoint1_id = 0; int rc = 0; struct ffa_ioctl_shm_desc shm_desc = { 0 }; if (!init_sp_xtest(c)) { Do_ADBG_Log("Failed to initialise test, skipping SP test"); goto out; } endpoint1_id = get_endpoint_id(test_endpoint1.uuid_ptr); if (endpoint1_id == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_1 sp, skipping SP test"); Do_ADBG_Log("Add xtest_1 sp to the image to enable tests"); goto out; } memset(&args, 0, sizeof(args)); rc = start_sp_test(endpoint1_id, EP_TEST_SP, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK)) goto out; /* Set up memory and have the SP retrieve it. */ Do_ADBG_BeginSubCase(c, "Test memory set-up"); memset(&args, 0, sizeof(args)); if (set_up_mem(&test_endpoint1, &args, &handle, c)) { Do_ADBG_EndSubCase(c, "Test memory set-up"); goto out; } Do_ADBG_EndSubCase(c, "Test memory set-up"); /* Retrieve it again. */ Do_ADBG_BeginSubCase(c, "Test retrieve memory second time"); memset(&args, 0, sizeof(args)); args.dst_id = endpoint1_id; args.args[MEM_SHARE_HANDLE_LOW_INDEX] = MEM_SHARE_HANDLE_LOW(handle); args.args[MEM_SHARE_HANDLE_HIGH_INDEX] = MEM_SHARE_HANDLE_HIGH(handle); args.args[MEM_SHARE_HANDLE_ENDPOINT_INDEX] = NORMAL_WORLD_ENDPOINT_ID; rc = start_sp_test(endpoint1_id, EP_RETRIEVE, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); Do_ADBG_EndSubCase(c, "Test retrieve memory second time"); /*Access it. */ Do_ADBG_BeginSubCase(c, "Test accessing memory"); memset(&args, 0, sizeof(args)); rc = start_sp_test(endpoint1_id, EP_TRY_R_ACCESS, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); Do_ADBG_EndSubCase(c, "Test accessing memory"); /*RELINQUISH the memory area.*/ Do_ADBG_BeginSubCase(c, "Test relinquish memory"); memset(&args, 0, sizeof(args)); args.args[MEM_SHARE_HANDLE_LOW_INDEX] = MEM_SHARE_HANDLE_LOW(handle); args.args[MEM_SHARE_HANDLE_HIGH_INDEX] = MEM_SHARE_HANDLE_HIGH(handle); rc = start_sp_test(endpoint1_id, EP_RELINQUISH, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); check_alive(c, endpoint1_id); Do_ADBG_EndSubCase(c, "Test relinquish memory"); /* Try to reclaim the mem with the SP still having access to it. */ Do_ADBG_BeginSubCase(c, "Test incorrect reclaim"); shm_desc.handle = handle; shm_desc.dst_id = endpoint1_id; rc = ioctl(ffa_fd, FFA_IOC_SHM_DEINIT, &shm_desc); ADBG_EXPECT_COMPARE_SIGNED(c, rc, <, 0); Do_ADBG_EndSubCase(c, "Test incorrect reclaim"); /*RELINQUISH the memory area.*/ Do_ADBG_BeginSubCase(c, "Test relinquish memory second time"); memset(&args, 0, sizeof(args)); args.args[MEM_SHARE_HANDLE_LOW_INDEX] = MEM_SHARE_HANDLE_LOW(handle); args.args[MEM_SHARE_HANDLE_HIGH_INDEX] = MEM_SHARE_HANDLE_HIGH(handle); rc = start_sp_test(endpoint1_id, EP_RELINQUISH, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); check_alive(c, endpoint1_id); Do_ADBG_EndSubCase(c, "Test relinquish memory second time"); /* Try to reclaim again this time it should work. */ Do_ADBG_BeginSubCase(c, "Test correct reclaim"); shm_desc.handle = handle; shm_desc.dst_id = endpoint1_id; rc = ioctl(ffa_fd, FFA_IOC_SHM_DEINIT, &shm_desc); ADBG_EXPECT_COMPARE_SIGNED(c, rc, >=, 0); check_alive(c, endpoint1_id); Do_ADBG_EndSubCase(c, "Test correct reclaim"); /* SP will try to retrieve invalid memory region. */ Do_ADBG_BeginSubCase(c, "Test retrieve invalid memory region"); memset(&args, 0, sizeof(args)); args.args[MEM_SHARE_HANDLE_LOW_INDEX] = MEM_SHARE_HANDLE_LOW(handle); args.args[MEM_SHARE_HANDLE_HIGH_INDEX] = MEM_SHARE_HANDLE_HIGH(handle); args.args[MEM_SHARE_HANDLE_ENDPOINT_INDEX] = NORMAL_WORLD_ENDPOINT_ID; rc = start_sp_test(endpoint1_id, EP_RETRIEVE, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], !=, SPMC_TEST_OK); check_alive(c, endpoint1_id); Do_ADBG_EndSubCase(c, "Test retrieve invalid memory region"); out: close_debugfs(); } ADBG_CASE_DEFINE(ffa_spmc, 1002, xtest_ffa_spmc_test_1002, "Test FF-A memory: share memory from Normal World to SP"); static void xtest_ffa_spmc_test_1003(ADBG_Case_t *c) { struct ffa_ioctl_msg_args args = { 0 }; uint16_t endpoint1 = 0; uint16_t endpoint2 = 0; int rc = 0; if (!init_sp_xtest(c)) { Do_ADBG_Log("Failed to initialise test, skipping SP test"); goto out; } endpoint1 = get_endpoint_id(test_endpoint1.uuid_ptr); if (endpoint1 == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_1 sp, skipping SP test"); Do_ADBG_Log("Add xtest_1 sp to the image to enable tests"); goto out; } /* Test SP to SP memory sharing. */ endpoint2 = get_endpoint_id(test_endpoint2.uuid_ptr); if (endpoint2 == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_2 sp, skipping SP test"); Do_ADBG_Log("Add xtest_2 sp to the image to enable tests"); goto out; } memset(&args, 0, sizeof(args)); args.args[1] = endpoint2; rc = start_sp_test(endpoint1, EP_SP_MEM_SHARING, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); out: close_debugfs(); } ADBG_CASE_DEFINE(ffa_spmc, 1003, xtest_ffa_spmc_test_1003, "Test FF-A memory: SP to SP"); static void xtest_ffa_spmc_test_1004(ADBG_Case_t *c) { struct ffa_ioctl_msg_args args = { 0 }; uint16_t endpoint1 = 0; uint16_t endpoint2 = 0; int rc = 0; if (!init_sp_xtest(c)) { Do_ADBG_Log("Failed to initialise test, skipping SP test"); goto out; } endpoint1 = get_endpoint_id(test_endpoint1.uuid_ptr); if (endpoint1 == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_1 sp, skipping SP test"); Do_ADBG_Log("Add xtest_1 sp to the image to enable tests"); goto out; } /* Test SP to SP memory sharing. */ endpoint2 = get_endpoint_id(test_endpoint2.uuid_ptr); if (endpoint2 == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_2 sp, skipping SP test"); Do_ADBG_Log("Add xtest_2 sp to the image to enable tests"); goto out; } Do_ADBG_BeginSubCase(c, "Test sharing with exc access"); memset(&args, 0, sizeof(args)); args.args[1] = endpoint2; rc = start_sp_test(endpoint1, EP_SP_MEM_SHARING_EXC, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); Do_ADBG_EndSubCase(c, "Test sharing with exc access"); Do_ADBG_BeginSubCase(c, "Test sharing with incorrect access"); memset(&args, 0, sizeof(args)); args.args[1] = endpoint2; rc = start_sp_test(endpoint1, EP_SP_MEM_INCORRECT_ACCESS, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); Do_ADBG_EndSubCase(c, "Test sharing with incorrect access"); out: close_debugfs(); } ADBG_CASE_DEFINE(ffa_spmc, 1004, xtest_ffa_spmc_test_1004, "Test FF-A memory: Access and flags"); static void xtest_ffa_spmc_test_1005(ADBG_Case_t *c) { struct ffa_ioctl_msg_args args = { 0 }; uint16_t endpoint1 = 0; uint16_t endpoint2 = 0; uint16_t endpoint3 = 0; int rc = 0; if (!init_sp_xtest(c)) { Do_ADBG_Log("Failed to initialise test, skipping SP test"); goto out; } endpoint1 = get_endpoint_id(test_endpoint1.uuid_ptr); if (endpoint1 == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_1 sp, skipping SP test"); Do_ADBG_Log("Add xtest_1 sp to the image to enable tests"); goto out; } endpoint2 = get_endpoint_id(test_endpoint2.uuid_ptr); if (endpoint2 == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_2 sp, skipping SP test"); Do_ADBG_Log("Add xtest_2 sp to the image to enable tests"); goto out; } endpoint3 = get_endpoint_id(test_endpoint3.uuid_ptr); if (endpoint3 == INCORRECT_ENDPOINT_ID) { Do_ADBG_Log("Could not contact xtest_3 sp, skipping SP test"); Do_ADBG_Log("Add xtest_3 sp to the image to enable tests"); goto out; } memset(&args, 0, sizeof(args)); args.args[1] = endpoint2; args.args[2] = endpoint3; rc = start_sp_test(endpoint1, EP_SP_MEM_SHARING_MULTI, &args); ADBG_EXPECT_COMPARE_SIGNED(c, rc, ==, 0); ADBG_EXPECT_COMPARE_UNSIGNED(c, args.args[0], ==, SPMC_TEST_OK); out: close_debugfs(); } ADBG_CASE_DEFINE(regression, 1005, xtest_ffa_spmc_test_1005, "Test FF-A memory: multiple receiver"); optee_test-4.3.0/host/xtest/gp/000077500000000000000000000000001464074351400164335ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/gp/TEE.xsl000066400000000000000000000151021464074351400175770ustar00rootroot00000000000000 /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2020, Linaro Limited * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "xml_client_api.h" /**/ static void gp_test_teec_(ADBG_Case_t *c __maybe_unused) { } ADBG_CASE_DEFINE(gp, , gp_test_teec_, ""); ADBG_EXPECT(c, , , )); , ); & XML_(c, XML_(c, INVOKE_REMEMBER_EXP_PARAM_TYPES( INVOKE_STORE_EXP_PARAM_INFO( ( ( ( ( OPERATION_TEEC_PARAM_TYPES( XML_InvokeCommand(c, TEEC_( optee_test-4.3.0/host/xtest/gp/TEE_Crypto_API.xsl000066400000000000000000000144301464074351400216330ustar00rootroot00000000000000 /* * Copyright (c) 2014, STMicroelectronics International N.V. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "xml_crypto_api.h" /**/ static void xtest_tee_(ADBG_Case_t *c) { declare_local_vars crypto_reset(); } ADBG_CASE_DEFINE(gp, , xtest_tee_, ""); ADBG_EXPECT_TEEC_RESULT(c, , , )); , ); & , sizeof() xtest_tee_name OBJECT_HANDLE_NULL (c, (c, (c, ( ( TEEC_( optee_test-4.3.0/host/xtest/gp/TEE_DataStorage_API.xsl000066400000000000000000000163201464074351400225510ustar00rootroot00000000000000 /* * Copyright (c) 2014, STMicroelectronics International N.V. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "xml_datastorage_api.h" /**/ static void xtest_tee_(ADBG_Case_t *c) { declare_local_vars } ADBG_CASE_DEFINE(gp, , xtest_tee_, ""); ADBG_EXPECT(c, , , )); , ); & , sizeof() xtest_tee_name OBJECT_HANDLE_NULL OBJECT_HANDLE_NULL ATTRIBUTE_NONE XML_(c, XML_(c, TEEC_( TEEC_( TEEC_( (c (c TEEC_SetUp_TEE( TEEC_TearDown_TEE( (c, optee_test-4.3.0/host/xtest/gp/TEE_Internal_API.xsl000066400000000000000000000160071464074351400221310ustar00rootroot00000000000000 /* * Copyright (c) 2014, STMicroelectronics International N.V. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "xml_internal_api.h" /**/ static void xtest_tee_(ADBG_Case_t *c) { } ADBG_CASE_DEFINE(gp, , xtest_tee_, ""); ADBG_EXPECT(c, , , )); ADBG_EXPECT(c, , , )); , ); & xtest_tee_name ( XML_(c, XML_(c, TEEC_( TEEC_( TEEC_( TEEC_( OPERATION_TEEC_( TEEC_SetUp_TEE( TEEC_TearDown_TEE( (c, optee_test-4.3.0/host/xtest/gp/TEE_TimeArithm_API.xsl000066400000000000000000000163721464074351400224250ustar00rootroot00000000000000 /* * Copyright (c) 2014, STMicroelectronics International N.V. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "xml_timearithm_api.h" /**/ static void xtest_tee_(ADBG_Case_t *c) { } ADBG_CASE_DEFINE(gp, , xtest_tee_, ""); ADBG_EXPECT_TEEC_RESULT(c, , , )); , ); & xtest_tee_name STORED_VALUE_ , sizeof() ( XML_(c, XML_(c, TEEC_( TEEC_( TEEC_( TEEC_( (c, SESSION01, CMD_TEE_SetTAPersistentTime_and_GetTAPersistentTime OPERATION_TEEC_( TEEC_SetUp_TEE( TEEC_TearDown_TEE( (c, optee_test-4.3.0/host/xtest/gp/include/000077500000000000000000000000001464074351400200565ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/gp/include/xml_client_api.h000066400000000000000000000261701464074351400232240ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2020, Linaro Limited */ #ifndef XML_CLIENT_API_H_ #define XML_CLIENT_API_H_ #include #include #include #include #include #include #include #include #include #include #include "xtest_helpers.h" #include "xtest_test.h" /* ta_testingClientAPI_test.h*/ #define COMMAND_TTA_Remember_Expected_ParamTypes 0x00000002 #define COMMAND_TTA_Copy_ParamIn_to_ParamOut 0x00000001 #define COMMAND_TTA_Check_ParamTypes 0x00000003 #define COMMAND_TTA_To_Be_Cancelled 0x00000004 #define COMMAND_TTA_Success 0x00000005 #define COMMAND_TTA_Panic 0x00000006 /* ta_answerSuccessTo_OpenSession_Invoke_test.h */ #define COMMAND_TTA_Remember_Expected_ParamTypes 0x00000002 #define COMMAND_TTA_Copy_ParamIn_to_ParamOut 0x00000001 #define COMMAND_TTA_Check_ParamTypes 0x00000003 /* ta_testingClientAPI_test.h */ #define COMMAND_TTA_Remember_Expected_ParamTypes 0x00000002 #define COMMAND_TTA_Copy_ParamIn_to_ParamOut 0x00000001 #define COMMAND_TTA_Check_ParamTypes 0x00000003 #define COMMAND_TTA_To_Be_Cancelled 0x00000004 #define COMMAND_TTA_Success 0x00000005 #define COMMAND_TTA_Panic 0x00000006 #define INVALID_CONNECTION_METHODS 0x0A #define COMMAND_TTA_Check_Expected_ParamTypes COMMAND_TTA_Check_ParamTypes #define COMMAND_TTA_Check_Update_Params 0xFFFF0002u #define COMMAND_TTA_Store_Expected_Param_Info 0xFFFF0001u #define CLIENT_APP01 NULL #define TEEC_UNDEFINED_ERROR 0xDEADDEAD #define TEEC_ORIGIN_ANY_NOT_TRUSTED_APP 0x00000005 #define OFFSET0 0 #define OFFSET_02 0x64 #define BIG_SIZE 1024 #define IGNORE 0xFEFEFEFE #define VALUE01 0x01234567 #define VALUE02 0xFEDCBA98 #define SIZE_OVER_MEMORY 0xFFFFFFFE #define SIZE_VALUE01 4 #define SIZE_LESSER_THAN_SIZE_02 0x1B58 #define SIZE_GREATER_THAN_SIZE_02 0x2328 #define ZERO 0 #define SIZE_02 0x2000 #define ALLOC_SIZE_02 0x2800 #define BYTE_01 1 #define BYTE_02 2 #define BYTE_03 3 #define BYTE_04 4 #define VALUE_A_IN_0 0x01234567 #define VALUE_A_IN_1 0xF9E8D7C6 #define VALUE_A_IN_2 0xE01C083D #define VALUE_A_IN_3 0xDCA65016 #define VALUE_A_OUT_0 0xABCD0248 #define VALUE_A_OUT_1 0x03579EF4 #define VALUE_A_OUT_2 0x344C64BC #define VALUE_A_OUT_3 0x3590BBD9 #define VALUE_B_IN_0 0x89ABCDEF #define VALUE_B_IN_1 0x1248DCBA #define VALUE_B_IN_2 0x5E816B61 #define VALUE_B_IN_3 0x4C899A96 #define VALUE_B_OUT_0 0x1A2B3C4D #define VALUE_B_OUT_1 0x1439F7A2 #define VALUE_B_OUT_2 0x6EC61CAE #define VALUE_B_OUT_3 0xB2639F77 #define TEEC_MEM_INOUT (TEEC_MEM_INPUT | TEEC_MEM_OUTPUT) static TEEC_SharedMemory share_mem[4]; static TEEC_SharedMemory *SHARE_MEM01 = share_mem; static TEEC_SharedMemory *SHARE_MEM02 = share_mem + 1; static TEEC_SharedMemory *SHARE_MEM03 = share_mem + 2; static TEEC_SharedMemory *SHARE_MEM04 = share_mem + 3; static TEEC_SharedMemory *SHARE_MEM_NULL_BUFFER; static TEEC_Session session[2]; static TEEC_Session *SESSION01 = session; static TEEC_Session *SESSION02 = session + 1; static TEEC_Context context[2]; static TEEC_Context *CONTEXT01 = context; static TEEC_Context *CONTEXT02 = context + 1; static TEEC_Operation operation[1]; static TEEC_Operation *OPERATION01 = operation; /* "ItIsNotTotosTEEs" */ static const char *INVALID_NOT_EXISTING_TEE = "ItIsNotTotosTEEs\0"; /** ALL_TEMPORARY_MEMORIES */ static uint8_t *TEMP_MEM01; static uint8_t *TEMP_MEM02; static uint8_t *TEMP_MEM03; static uint8_t *TEMP_MEM04; static uint8_t *TEMP_MEM_NULL_BUFFER; static TEEC_UUID UUID_TTA_answerErrorTo_OpenSession = { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x45, 0x52, 0x52, 0x54, 0x4F, 0x4F, 0x53 } }; static TEEC_UUID UUID_TTA_answerSuccessTo_OpenSession_Invoke = { 0x534D4152, 0x542D, 0x4353, { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x53, 0x55 } }; static TEEC_UUID UUID_Unknown = { 0x534D4152, 0x542D, 0x4355, { 0x4E, 0x4B, 0x2D, 0x4E, 0x4F, 0x2D, 0x57, 0x4E } }; static TEEC_UUID UUID_TTA_testingClientAPI_Parameters_OpenSession = { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x43, 0x4C, 0x49, 0x50, 0x4F, 0x50, 0x53 } }; static TEEC_UUID UUID_TTA_testingClientAPI = { 0x534D4152, 0x542D, 0x4353, { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x53, 0x54 } }; static TEEC_UUID UUID_TTA_answerErrorTo_Invoke = { 0x534D4152, 0x542D, 0x4353, { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x45, 0x52 } }; /* TTA_testingClientAPI_Parameters_Invoke */ static TEEC_UUID UUID_TTA_testingClientAPI_Parameters = { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x43, 0x4C, 0x49, 0x50, 0x41, 0x52, 0x41 } }; /*Registers the TEEC_SharedMemory to the TEE*/ static TEEC_Result RegisterSharedMemory(TEEC_Context *ctx, TEEC_SharedMemory *shm, uint32_t size, uint32_t flags) { shm->flags = flags; shm->size = size; shm->buffer = malloc(size); return TEEC_RegisterSharedMemory(ctx, shm); } /*Allocates temporary memory area*/ #define AllocateTempMemory(temp_mem, size) \ temp_mem = malloc(size) /*Releases temporary memory area*/ #define ReleaseTempMemory(temp_mem) \ do { \ if (temp_mem != NULL) { \ free(temp_mem); \ temp_mem = NULL; \ } \ } while (0) /* Assigns a and b to the value parameter */ static inline void TEEC_prepare_OperationEachParameter_value(TEEC_Operation *op, size_t n, uint32_t a, uint32_t b) { if (IGNORE != a) op->params[n].value.a = a; if (IGNORE != b) op->params[n].value.b = b; } /*Define TEEC_SharedMemory memory content.*/ #define TEEC_defineMemoryContent_sharedMemory(sh_mem, val, size_val) \ memcpy(sh_mem->buffer, &val, size_val) /*Define temp memory content.*/ #define TEEC_defineMemoryContent_tmpMemory(buf, val, size_val) \ memcpy(buf, &(val), size_val) #define INVOKE_REMEMBER_EXP_PARAM_TYPES(session, cmd, p0, p1, p2, p3, exp) \ do { \ uint32_t ret_orig = 0; \ \ memset(OPERATION01, 0x00, sizeof(TEEC_Operation)); \ OPERATION01->paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, \ TEEC_NONE, \ TEEC_NONE, \ TEEC_NONE); \ OPERATION01->params[0].value.a = \ TEEC_PARAM_TYPES((p0), (p1), (p2), (p3)); \ ADBG_EXPECT(c, exp, \ TEEC_InvokeCommand(session, cmd, OPERATION01, \ &ret_orig)); \ ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, \ ret_orig); \ } while (0) static void store_param_info(TEEC_Operation *op, uint32_t param_num, uint32_t pt, uint32_t size_in, uint32_t value_in, uint32_t size_out, uint32_t value_out) { memset(op, 0, sizeof(*op)); op->params[0].value.a = param_num; op->params[0].value.b = pt; switch (pt) { case TEE_PARAM_TYPE_MEMREF_INPUT: case TEE_PARAM_TYPE_MEMREF_OUTPUT: case TEE_PARAM_TYPE_MEMREF_INOUT: op->paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE); if (size_in != IGNORE) op->params[1].value.a = size_in; if (value_in != IGNORE) op->params[1].value.b = value_in; if (size_out != IGNORE) op->params[2].value.a = size_out; if (value_out != IGNORE) op->params[2].value.b = value_out; break; default: op->paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); break; } } #define INVOKE_STORE_EXP_PARAM_INFO(session, cmd, paramNumber, paramType, \ sizeIN, valueIN, sizeOUT, valueOUT, \ expReturnOrigin, expTEEC_Result) \ do { \ uint32_t ret_orig = 0; \ \ store_param_info(OPERATION01, paramNumber, paramType, sizeIN, \ valueIN, sizeOUT, valueOUT); \ ADBG_EXPECT(c, expTEEC_Result, \ TEEC_InvokeCommand(session, cmd, OPERATION01, \ &ret_orig)); \ ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, expReturnOrigin, ret_orig); \ } while (0) static void init_mem(uint8_t *buf, size_t buf_size, size_t begin_size, size_t middle_size, uint8_t begin_value, uint8_t middle_value, uint8_t end_value) { memset(buf, begin_value, begin_size); memset(buf + begin_size, middle_value, middle_size); memset(buf + begin_size + middle_size, end_value, buf_size - begin_size - middle_size); } #define TEEC_initialize_memory(shm, tmpMem, offset, _size, value_beginning, \ value_middle, value_end) \ do { \ if ((unsigned long)shm != IGNORE) {\ TEEC_SharedMemory *__shm = (void *)(long)shm; \ init_mem(__shm->buffer, __shm->size, offset, _size, \ value_beginning, value_middle, value_end); \ assert(tempMem == IGNORE); \ } else if ((unsigned long)tmpMem != IGNORE) {\ /* \ * We can't tell the size of tmpMem, so we assume \ * it's offset + size large. \ */ \ init_mem((void *)(long)tmpMem, offset + _size, offset, \ _size, value_beginning, value_middle, \ value_end); \ } else { \ assert(0); \ } \ } while (0) static void TEEC_prepare_OperationEachParameter_memref(TEEC_Operation *op, size_t param_num, TEEC_SharedMemory *shm, size_t offs, size_t sz) { op->params[param_num] = (TEEC_Parameter){ .memref = { .parent = shm, .size = sz, .offset = offs, } }; } static void TEEC_prepare_OperationEachParameter_tmpref(TEEC_Operation *op, size_t param_num, void *buf, size_t sz) { op->params[param_num] = (TEEC_Parameter){ .tmpref = { .buffer = buf, .size = sz, } }; } /*Compares two memories and checks if their length and content is the same */ #define TEEC_checkMemoryContent_sharedMemory(op, param_num, shrm, exp_buf, \ exp_blen) \ do { \ if ((exp_buf) == IGNORE) { \ ADBG_EXPECT((c), exp_blen, \ (op)->params[(param_num)].memref.size); \ } else { \ ADBG_EXPECT_COMPARE_POINTER((c), (shrm), ==, \ (op)->params[(param_num)].\ memref.parent); \ ADBG_EXPECT_BUFFER((c), &(exp_buf), (exp_blen), \ (shrm)->buffer, \ (op)->params[(param_num)].\ memref.size); \ } \ } while (0) /* * Compares the content of the memory cells in OP with the expected value * contained. */ #define TEEC_checkMemoryContent_tmpMemory(op, param_num, \ buf, exp_buf, exp_blen) \ do { \ if ((exp_buf) == 0) { \ ADBG_EXPECT((c), exp_blen, \ (op)->params[(param_num)].tmpref.size); \ } else { \ ADBG_EXPECT_COMPARE_POINTER((c), (buf), ==, \ (op)->params[(param_num)].\ tmpref.buffer); \ ADBG_EXPECT_BUFFER((c), &(exp_buf), (exp_blen), \ (buf), \ (op)->params[(param_num)].\ memref.size); \ } \ } while (0) /* * Compares the content of the memory cells in OP with the expected value * contained. */ #define TEEC_checkContent_Parameter_value(op, param_num, exp_a, exp_b) \ do { \ if (IGNORE != exp_a) \ ADBG_EXPECT((c), exp_a, \ (op)->params[(param_num)].value.a); \ if (IGNORE != exp_b) \ ADBG_EXPECT((c), exp_b, \ (op)->params[(param_num)].value.b); \ } while (0) /*Invoke command using TEEC_InvokeCommand and check the returned value.*/ #define XML_InvokeCommand(c, session, cmd, operation, returnOrigin, expected) \ do { \ uint32_t ret_orig = 0; \ \ ADBG_EXPECT(c, expected, \ TEEC_InvokeCommand(session, cmd, operation, \ &ret_orig)); \ if (returnOrigin) \ ADBG_EXPECT(c, (unsigned long)returnOrigin, ret_orig); \ } while (0) #endif /* XML_CLIENT_API_H_ */ optee_test-4.3.0/host/xtest/gp/include/xml_common_api.h000066400000000000000000000200671464074351400232350ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2020, Linaro Limited */ #ifndef XML_COMMON_API_H_ #define XML_COMMON_API_H_ #include #include #include "xtest_helpers.h" #include "xtest_test.h" #define BIT(n) (1ul << (n)) #ifndef MAX #define MAX(a, b) ((a) > (b) ? (a) : (b)) #endif #define ALLOCATE_SHARED_MEMORY(context, sharedMemory, sharedMemorySize, \ memoryType, exit_label) \ res = AllocateSharedMemory(context, sharedMemory, sharedMemorySize, \ memoryType); \ if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) \ goto exit_label; \ memset(sharedMemory->buffer, 0, sharedMemorySize); #define ALLOCATE_AND_FILL_SHARED_MEMORY(context, sharedMemory, \ sharedMemorySize, \ memoryType, copySize, data, \ exit_label) \ res = AllocateSharedMemory(context, sharedMemory, sharedMemorySize, \ memoryType); \ if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) \ goto exit_label; \ memset(sharedMemory->buffer, 0, sharedMemorySize); \ if (data != NULL) { \ memcpy(sharedMemory->buffer, data, copySize); \ } #define ALLOCATE_AND_FILL_SHARED_MEMORY_6(a,b,c,d,e,f) \ ALLOCATE_AND_FILL_SHARED_MEMORY(a,b,c,d,c,e,f) #define SET_SHARED_MEMORY_OPERATION_PARAMETER(parameterNumber, \ sharedMemoryOffset, \ sharedMemory, \ sharedMemorySize) \ op.params[parameterNumber].memref.offset = sharedMemoryOffset; \ op.params[parameterNumber].memref.size = sharedMemorySize; \ op.params[parameterNumber].memref.parent = sharedMemory; /*Open session using TEEC_OpenSession and check the returned value and/or returned origin.*/ #define XML_OpenSession(c, context, session, destination, connectionMethod, \ connectionData, operation, returnOrigin, expected) \ do { \ uint32_t ret_orig = 0; \ \ XML_VERIFY(c, expected, \ TEEC_OpenSession(context, session, destination, \ connectionMethod, connectionData, \ operation, &ret_orig)); \ if (!(unsigned long)(returnOrigin) || \ (unsigned long)(returnOrigin) == \ TEEC_ORIGIN_ANY_NOT_TRUSTED_APP) \ ADBG_EXPECT_NOT(c, (unsigned long)returnOrigin, \ ret_orig); \ else \ ADBG_EXPECT(c, (unsigned long)returnOrigin, ret_orig); \ } while (0) /* XML_VERIFY macro define. * * Use ADBG_EXPECT or ADBG_EXPECT_NOT depending on the expected return value. * * ADBG_EXPECT() -> IF(EXP == GOT) RETURN TRUE * ADBG_EXPECT() -> IF(EXP != GOT) RETURN TRUE */ #define XML_VERIFY(c, exp, got) \ do { \ if (exp == TEEC_UNDEFINED_ERROR) \ ADBG_EXPECT_NOT(c, exp, got); \ else \ ADBG_EXPECT(c, exp, got); \ } while (0) /*Initialize context using TEEC_InitializeContext and check the returned value.*/ #define XML_InitializeContext(c, name, context, expected) \ XML_VERIFY(c, expected, TEEC_InitializeContext(name, context)) #define OPERATION_TEEC_PARAM_TYPES(op, p0, p1, p2, p3) \ do { \ op->paramTypes = TEEC_PARAM_TYPES(p0, p1, p2, p3); \ } while (0) /*dummy functions*/ #define TEEC_SetUp_TEE() /*do nothing for now*/ #define TEEC_TearDown_TEE(a) /*do nothing for now*/ #define TEEC_SelectApp(a, b) /*do nothing for now*/ #define TEEC_createThread(a, b) /*do nothing for now*/ struct attr_value { uint8_t buf[1024]; size_t buf_size; uint32_t attr_id; }; #define MAX_NUM_SAVED_ATTR_VALUES 8 static struct attr_value saved_attr[MAX_NUM_SAVED_ATTR_VALUES] __maybe_unused; static TEEC_Result __maybe_unused Invoke_Simple_Function(ADBG_Case_t *c __unused, TEEC_Session *sess, uint32_t cmdId) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; return TEEC_InvokeCommand(sess, cmdId, &op, &org); } static TEEC_Result __maybe_unused Invoke_Simple_Function_v1(ADBG_Case_t *c __unused, TEEC_Session *sess, uint32_t cmd, uint32_t a, uint32_t b) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; op.params[0].value.a = a; op.params[0].value.b = b; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, cmd, &op, &org); } static TEEC_Result __maybe_unused Invoke_Simple_Function_v2(ADBG_Case_t *c __unused, TEEC_Session *sess, uint32_t cmd, uint32_t a0, uint32_t b0, uint32_t a1, uint32_t b1) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; op.params[0].value.a = a0; op.params[0].value.b = b0; op.params[1].value.a = a1; op.params[1].value.b = b1; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, cmd, &op, &org); } static TEEC_Result __maybe_unused Invoke_Simple_Function_v3(ADBG_Case_t *c __unused, TEEC_Session *sess, uint32_t cmd, uint32_t a0, uint32_t b0, uint32_t a1, uint32_t b1, uint32_t a2, uint32_t b2) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; op.params[0].value.a = a0; op.params[0].value.b = b0; op.params[1].value.a = a1; op.params[1].value.b = b1; op.params[2].value.a = a2; op.params[2].value.b = b2; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE); return TEEC_InvokeCommand(sess, cmd, &op, &org); } static TEEC_Result __maybe_unused Invoke_Simple_Function_v4(ADBG_Case_t *c __unused, TEEC_Session *sess, uint32_t cmd, uint32_t a0, uint32_t b0, uint32_t a1, uint32_t b1, uint32_t a2, uint32_t b2, uint32_t a3, uint32_t b3) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; op.params[0].value.a = a0; op.params[0].value.b = b0; op.params[1].value.a = a1; op.params[1].value.b = b1; op.params[2].value.a = a2; op.params[2].value.b = b2; op.params[3].value.a = a3; op.params[3].value.b = b3; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT); return TEEC_InvokeCommand(sess, cmd, &op, &org); } static TEEC_Result __maybe_unused AllocateSharedMemory(TEEC_Context *ctx, TEEC_SharedMemory *shm, uint32_t size, uint32_t flags) { shm->flags = flags; shm->size = size; return TEEC_AllocateSharedMemory(ctx, shm); } static TEEC_Result GetObjectBufferAttribute_helper(ADBG_Case_t *c, TEEC_Session *sess, size_t n, uint32_t cmd, uint32_t obj, uint32_t attr_id, bool buffer_is_null, uint32_t buffer_size) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEE_SUCCESS; uint32_t org = 0; static TEEC_SharedMemory shm = { }; uint32_t memref_type = TEEC_MEMREF_TEMP_OUTPUT; if (!ADBG_EXPECT_COMPARE_SIGNED(c, n, <, MAX_NUM_SAVED_ATTR_VALUES)) return TEEC_ERROR_BAD_PARAMETERS; if (!ADBG_EXPECT_COMPARE_SIGNED(c, buffer_size, <=, sizeof(saved_attr[n].buf))) return TEEC_ERROR_BAD_PARAMETERS; if (!buffer_is_null) { shm.size = buffer_size; shm.flags = TEEC_MEM_OUTPUT; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, &shm, shm.size); memref_type = TEEC_MEMREF_PARTIAL_OUTPUT; } op.params[0].value.a = obj; op.params[0].value.b = attr_id; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, memref_type, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd, &op, &org); if (!buffer_is_null) { if (res) { memset(saved_attr + n, 0, sizeof(saved_attr[n])); } else { memcpy(saved_attr[n].buf, shm.buffer, sizeof(saved_attr[n].buf)); saved_attr[n].buf_size = op.params[1].memref.size; saved_attr[n].attr_id = attr_id; } TEEC_ReleaseSharedMemory(&shm); } return res; } static TEEC_Result __maybe_unused Invoke_GetObjectBufferAttribute(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj, uint32_t attr_id, bool buffer_is_null, uint32_t buffer_size) { return GetObjectBufferAttribute_helper(c, sess, 0, cmd, obj, attr_id, buffer_is_null, buffer_size); } static TEEC_Result __maybe_unused Invoke_FreeTransientObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_handle, 0); } #endif /* XML_COMMON_API_H_ */ optee_test-4.3.0/host/xtest/gp/include/xml_crypto_api.h000066400000000000000000003635761464074351400233040ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2020, Linaro Limited */ #ifndef XML_CRYPTO_API_H_ #define XML_CRYPTO_API_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define CMD_DS_AllocateTransientObject 0x10000001 #define CMD_DS_StoreBuffer 0x1F0000CB #define CMD_DS_InitRefAttribute 0x10000006 #define CMD_DS_GetObjectBufferAttribute 0x10000008 #define CMD_DS_FreeTransientObject 0x10000004 #define CMD_DS_RestrictObjectUsage1 0x10000003 #include "xml_common_api.h" #include "xtest_helpers.h" #include "xtest_test.h" #define declare_local_vars \ uint32_t iHandleFlags1 __maybe_unused = 0; \ uint32_t iHandleFlags2 __maybe_unused = 0; \ uint32_t iAttributeList1 __maybe_unused = 0; \ uint32_t iObjectUsage1 __maybe_unused = 0; \ const uint32_t iAttributeListEmpty __maybe_unused = 0; \ const uint32_t iHandleFlagsNone __maybe_unused = 0; #define set_flag(vector, flag) do { (vector) |= (flag); } while (0) #define clear_flag(vector, flag) do { (vector) &= ~(flag); } while (0) #define set_handle_flag(vector, flag) set_flag((vector), (flag)) #define clear_handle_flag(vector, flag) clear_flag((vector), (flag)) #define add_attribute(vector, id) set_flag((vector), 1ul << (id)) #define set_usage_flag(vector, flag) set_flag((vector), (flag)) #define BIT_CHANGE(a, b) ((a) ^= BIT((b))) #define CRYPTO_INIT(b) \ b.buffer = NULL; \ b.size = 0; #define CRYPTO_MALLOC(b, size) \ b.size = size; \ b.buffer = malloc(size); #define CRYPTO_FREE(b) { \ if (b.buffer != NULL) { \ b.size = 0; \ free(b.buffer); \ b.buffer = NULL; \ } } #define CMD_Crypto_InitObjectWithKeys 0x00010001 #define CMD_Crypto_FreeAllKeysAndOperations 0x00010002 #define CMD_Crypto_AllocateOperation 0x00010003 #define CMD_Crypto_FreeOperation 0x00010004 #define CMD_Crypto_ResetOperation 0x00010005 #define CMD_Crypto_SetOperationKey 0x00010006 #define CMD_Crypto_SetOperationKey2 0x00010007 #define CMD_Crypto_CopyOperation 0x00010008 #define CMD_Crypto_GetOperationInfo 0x00010009 #define CMD_Crypto_DigestUpdate 0x0001000A #define CMD_Crypto_DigestDoFinal 0x0001000B #define CMD_Crypto_CipherInit 0x0001000C #define CMD_Crypto_CipherUpdate 0x0001000D #define CMD_Crypto_CipherDoFinal 0x0001000E #define CMD_Crypto_MACInit 0x0001000F #define CMD_Crypto_MACUpdate 0x00010010 #define CMD_Crypto_MACComputeFinal 0x00010011 #define CMD_Crypto_MACCompareFinal 0x00010012 #define CMD_Crypto_AsymmetricEncrypt 0x00010013 #define CMD_Crypto_AsymmetricDecrypt 0x00010014 #define CMD_Crypto_AsymmetricSignDigest 0x00010015 #define CMD_Crypto_AsymmetricVerifyDigest 0x00010016 #define CMD_Crypto_AEInit 0x00010017 #define CMD_Crypto_AEUpdate 0x00010018 #define CMD_Crypto_AEUpdateAAD 0x00010019 #define CMD_Crypto_AEEncryptFinal 0x0001001A #define CMD_Crypto_AEDecryptFinal 0x0001001B #define CMD_Crypto_DeriveKey 0x0001001D #define CMD_Crypto_GenerateRandom 0x0001001E #define CMD_Crypto_GetOperationInfoMultiple 0x0001001F #define CMD_Crypto_TTAEnsureIntermediateBufferSize 0x00010020 #define CMD_Crypto_InitObjectWithKeysExt 0x00010021 /*Missing TEE Error codes*/ #define TEE_ERROR_TOO_SHORT_BUFFER TEE_ERROR_SHORT_BUFFER /*Other defines*/ #define TEE_USAGE_NONE 0 #define ATTRIBUTE_01 0 #define ATTRIBUTE_02 1 #define ATTRIBUTE_03 2 #define ATTRIBUTE_04 3 #define ATTRIBUTE_05 4 #define ATTRIBUTE_06 5 #define ATTRIBUTE_NONE 0xFFFFFFFF #define BUFFER_01 0 #define BUFFER_02 1 #define BUFFER_03 2 #define BUFFER_04 3 #define BUFFER_05 4 #define BUFFER_06 5 #define BIG_SIZE 1024 #define DS_BIG_SIZE 16384 /*ALL_OBJECT_SIZES*/ #define KEY_SIZE_TOO_LARGE 4096 #define SIZE_AES_192 192 #define SIZE_AES_256 256 #define SIZE_DES3_128 128 #define SIZE_DES3_192 192 #define SIZE_DES_64 64 #define SIZE_DH_KEYPAIR_1024 1024 #define SIZE_DIGEST_MD5_16 16 #define SIZE_DIGEST_SHA1_20 20 #define SIZE_DIGEST_SHA224_28 28 #define SIZE_DIGEST_SHA256_32 32 #define SIZE_DIGEST_SHA384_48 48 #define SIZE_DIGEST_SHA512_64 64 #define SIZE_DSA_SHA1_KEYPAIR_768 768 #define SIZE_DSA_SHA1_PUBLIC_KEY_768 768 #define SIZE_DSA_SHA224_KEYPAIR_2048 2048 #define SIZE_DSA_SHA224_PUBLIC_KEY_2048 2048 #define SIZE_DSA_SHA256_KEYPAIR_2048 2048 #define SIZE_DSA_SHA256_KEYPAIR_3072 3072 #define SIZE_DSA_SHA256_PUBLIC_KEY_2048 2048 #define SIZE_DSA_SHA256_PUBLIC_KEY_3072 3072 #define SIZE_ECDH_P192 192 #define SIZE_ECDH_P224 224 #define SIZE_ECDH_P256 256 #define SIZE_ECDH_P384 384 #define SIZE_ECDH_P521 521 #define SIZE_ECDSA_P192 192 #define SIZE_ECDSA_P224 224 #define SIZE_ECDSA_P256 256 #define SIZE_ECDSA_P384 384 #define SIZE_ECDSA_P521 521 #define SIZE_GENERIC_SECRET_2048 2048 #define SIZE_HMAC_MD5_256 256 #define SIZE_HMAC_SHA1_256 256 #define SIZE_HMAC_SHA224_256 256 #define SIZE_HMAC_SHA256_512 512 #define SIZE_HMAC_SHA384_512 512 #define SIZE_HMAC_SHA512_512 512 #define SIZE_RSA_KEYPAIR_1024 1024 #define SIZE_RSA_KEYPAIR_2048 2048 #define SIZE_RSA_PUBLIC_KEY_2048 2048 #define SIZE_ZERO 0 #define WRONG_ECC_SIZE 10 #define WRONG_SIZE 5 /*ALL_TEE_TAG_LENGTH_FOR_AES*/ #define AES_104_bits 104 #define AES_112_bits 112 #define AES_120_bits 120 #define AES_128_bits 128 #define AES_32_bits 32 #define AES_48_bits 48 #define AES_64_bits 64 #define AES_80_bits 80 #define AES_96_bits 96 /*attribute not defined*/ #define TEE_ATTR_NONE 0 #define AE_TAG_BUFFER_SIZE_32 32 #define BIG_ATTRIBUTE_BUFFER_SIZE 512 #define BUFFER_BIG_SIZE BIG_SIZE #define OBJECT_HANDLE_NULL 0 #define OBJECT_HANDLE_01 1 #define OBJECT_HANDLE_02 2 #define OBJECT_HANDLE_03 3 #define OBJECT_HANDLE_INVALID 4 #define OPERATION_HANDLE_NULL 0 #define OPERATION_HANDLE_01 1 #define OPERATION_HANDLE_02 2 #define OPERATION_HANDLE_INVALID 4 static TEEC_SharedMemory share_mem[6]; static TEEC_SharedMemory *SHARE_MEM01 = share_mem; static TEEC_SharedMemory *SHARE_MEM02 = share_mem + 1; static TEEC_SharedMemory *SHARE_MEM03 = share_mem + 2; static TEEC_SharedMemory *SHARE_MEM04 = share_mem + 3; static TEEC_SharedMemory *SHARE_MEM05 = share_mem + 4; static TEEC_SharedMemory *SHARE_MEM06 = share_mem + 5; static TEEC_Session session[2]; static TEEC_Session *SESSION01 = session; static TEEC_Session *SESSION02 = session + 1; static TEEC_Context context[2]; static TEEC_Context *CONTEXT01 = context; static TEEC_Context *CONTEXT02 = context + 1; /*ALL_ATTRIBUTE_VALUES*/ static const uint8_t TEE_ATTR_AES_256_VALUE01[] = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81, 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 }; static const uint8_t TEE_ATTR_DH_PRIME_VALUE01[] = { 0xe0, 0x01, 0xe8, 0x96, 0x7d, 0xb4, 0x93, 0x53, 0xe1, 0x6f, 0x8e, 0x89, 0x22, 0x0c, 0xce, 0xfc, 0x5c, 0x5f, 0x12, 0xe3, 0xdf, 0xf8, 0xf1, 0xd1, 0x49, 0x90, 0x12, 0xe6, 0xef, 0x53, 0xe3, 0x1f, 0x02, 0xea, 0xcc, 0x5a, 0xdd, 0xf3, 0x37, 0x89, 0x35, 0xc9, 0x5b, 0x21, 0xea, 0x3d, 0x6f, 0x1c, 0xd7, 0xce, 0x63, 0x75, 0x52, 0xec, 0x38, 0x6c, 0x0e, 0x34, 0xf7, 0x36, 0xad, 0x95, 0x17, 0xef, 0xfe, 0x5e, 0x4d, 0xa7, 0xa8, 0x6a, 0xf9, 0x0e, 0x2c, 0x22, 0x8f, 0xe4, 0xb9, 0xe6, 0xd8, 0xf8, 0xf0, 0x2d, 0x20, 0xaf, 0x78, 0xab, 0xb6, 0x92, 0xac, 0xbc, 0x4b, 0x23, 0xfa, 0xf2, 0xc5, 0xcc, 0xd4, 0x9a, 0x0c, 0x9a, 0x8b, 0xcd, 0x91, 0xac, 0x0c, 0x55, 0x92, 0x01, 0xe6, 0xc2, 0xfd, 0x1f, 0x47, 0xc2, 0xcb, 0x2a, 0x88, 0xa8, 0x3c, 0x21, 0x0f, 0xc0, 0x54, 0xdb, 0x29, 0x2d, 0xbc, 0x45 }; static const uint8_t TEE_ATTR_DH_BASE_VALUE01[] = { 0x1c, 0xe0, 0xf6, 0x69, 0x26, 0x46, 0x11, 0x97, 0xef, 0x45, 0xc4, 0x65, 0x8b, 0x83, 0xb8, 0xab, 0x04, 0xa9, 0x22, 0x42, 0x68, 0x50, 0x4d, 0x05, 0xb8, 0x19, 0x83, 0x99, 0xdd, 0x71, 0x37, 0x18, 0xcc, 0x1f, 0x24, 0x5d, 0x47, 0x6c, 0xcf, 0x61, 0xa2, 0xf9, 0x34, 0x93, 0xf4, 0x1f, 0x55, 0x52, 0x48, 0x65, 0x57, 0xe6, 0xd4, 0xca, 0xa8, 0x00, 0xd6, 0xd0, 0xdb, 0x3c, 0xbf, 0x5a, 0x95, 0x4b, 0x20, 0x8a, 0x4e, 0xba, 0xf7, 0xe6, 0x49, 0xfb, 0x61, 0x24, 0xd8, 0xa2, 0x1e, 0xf2, 0xf2, 0x2b, 0xaa, 0xae, 0x29, 0x21, 0x10, 0x19, 0x10, 0x51, 0x46, 0x47, 0x31, 0xb6, 0xcc, 0x3c, 0x93, 0xdc, 0x6e, 0x80, 0xba, 0x16, 0x0b, 0x66, 0x64, 0xa5, 0x6c, 0xfa, 0x96, 0xea, 0xf1, 0xb2, 0x83, 0x39, 0x8e, 0xb4, 0x61, 0x64, 0xe5, 0xe9, 0x43, 0x84, 0xee, 0x02, 0x24, 0xe7, 0x1f, 0x03, 0x7c, 0x23 }; static const uint8_t TEE_ATTR_HMAC_SHA256_512_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f }; static const uint8_t TEE_ATTR_DH_PUBLIC_VALUE_VALUE01[] = { 0xbb, 0xe9, 0x18, 0xdd, 0x4b, 0x2b, 0x94, 0x1b, 0x10, 0x0e, 0x88, 0x35, 0x28, 0x68, 0xfc, 0x62, 0x04, 0x38, 0xa6, 0xdb, 0x32, 0xa6, 0x9e, 0xee, 0x6c, 0x6f, 0x45, 0x1c, 0xa3, 0xa6, 0xd5, 0x37, 0x77, 0x75, 0x5b, 0xc1, 0x37, 0x0a, 0xce, 0xfe, 0x2b, 0x8f, 0x13, 0xa9, 0x14, 0x2c, 0x5b, 0x44, 0x15, 0x78, 0x86, 0x30, 0xd6, 0x95, 0xb1, 0x92, 0x20, 0x63, 0xa3, 0xcf, 0x9d, 0xef, 0x65, 0x61, 0x27, 0x4d, 0x24, 0x01, 0xe7, 0xa1, 0x45, 0xf2, 0xd8, 0xb9, 0x3a, 0x45, 0x17, 0xf4, 0x19, 0xd0, 0x5e, 0xf8, 0xcb, 0x35, 0x59, 0x37, 0x9d, 0x04, 0x20, 0xa3, 0xbf, 0x02, 0xad, 0xfe, 0xa8, 0x60, 0xb2, 0xc3, 0xee, 0x85, 0x58, 0x90, 0xf3, 0xb5, 0x57, 0x2b, 0xb4, 0xef, 0xd7, 0x8f, 0x37, 0x68, 0x78, 0x7c, 0x71, 0x52, 0x9d, 0x5e, 0x0a, 0x61, 0x4f, 0x09, 0x89, 0x92, 0x39, 0xf7, 0x4b, 0x01 }; static const uint8_t TEE_ATTR_DH_PRIVATE_VALUE_VALUE01[] = { 0x53, 0x8d, 0x3d, 0x64, 0x27, 0x4a, 0x40, 0x05, 0x9b, 0x9c, 0x26, 0xe9, 0x13, 0xe6, 0x91, 0x53, 0x23, 0x7b, 0x55, 0x83 }; static const uint8_t TEE_ATTR_RSA_MODULUS_VALUE01[] = { 0xf0, 0x1a, 0x95, 0xcd, 0x5f, 0x9f, 0x1c, 0xbc, 0x5c, 0x2e, 0xc8, 0x00, 0x3b, 0xfa, 0xe0, 0xd5, 0x72, 0xea, 0xfc, 0x9e, 0x74, 0xe1, 0x02, 0x66, 0xa8, 0x13, 0x3f, 0x0c, 0xe6, 0x24, 0xcb, 0x1c, 0xa5, 0xdf, 0x64, 0xfb, 0x06, 0xd7, 0x13, 0xce, 0xaa, 0x6c, 0xee, 0x16, 0x7b, 0xf8, 0x92, 0xaf, 0xc4, 0x5b, 0x46, 0x18, 0xc6, 0x30, 0xb6, 0x04, 0x1c, 0x3a, 0x2e, 0xd7, 0xca, 0xb8, 0xb5, 0x00, 0x78, 0x89, 0xa0, 0x69, 0x37, 0x84, 0x59, 0x99, 0x0c, 0x2f, 0x00, 0xe5, 0x3b, 0xe1, 0x18, 0xe0, 0xb9, 0x2e, 0x77, 0x1d, 0x32, 0x7e, 0x5f, 0xf4, 0x18, 0xf3, 0x9f, 0x58, 0xc6, 0x83, 0xe2, 0x7a, 0xcb, 0x89, 0x18, 0xc2, 0x09, 0x84, 0x7e, 0x9d, 0x96, 0xe0, 0xb9, 0x49, 0x75, 0xef, 0xcf, 0xff, 0xf0, 0xb6, 0x18, 0xd3, 0x7a, 0xc1, 0x6f, 0x0c, 0x55, 0x33, 0xbe, 0x9d, 0x63, 0x06, 0xd6, 0x9f, 0xc1, 0xa5, 0xe9, 0xbd, 0xb1, 0xb2, 0x5d, 0x5c, 0xf9, 0xab, 0xa9, 0xb5, 0x6a, 0x4e, 0xa4, 0xfa, 0x44, 0x32, 0xd6, 0x71, 0x2e, 0x5f, 0xa6, 0x25, 0xf8, 0x40, 0x24, 0xc4, 0x5b, 0x61, 0x55, 0x1b, 0xac, 0xa3, 0x0a, 0x11, 0x8e, 0x65, 0x20, 0xda, 0x2c, 0x0d, 0xdf, 0xdb, 0x47, 0x6b, 0x61, 0x18, 0x4d, 0xfe, 0xfd, 0x2a, 0x7e, 0x77, 0x40, 0x44, 0x43, 0xc6, 0x33, 0x6c, 0xe5, 0x1b, 0x8d, 0x80, 0xf9, 0x97, 0xa2, 0xe4, 0xb9, 0x34, 0x3e, 0x28, 0x94, 0x9f, 0xbd, 0xa8, 0x2b, 0x0a, 0x4d, 0x1a, 0xa8, 0x06, 0xe5, 0x99, 0x4e, 0xb9, 0x13, 0x45, 0xc8, 0xf6, 0x0f, 0xd0, 0x4d, 0xbf, 0xe7, 0x8f, 0xed, 0xca, 0x8e, 0xf8, 0x8d, 0x87, 0x5f, 0xd4, 0xb4, 0x1a, 0x2c, 0xc9, 0xa7, 0x67, 0x7e, 0xb2, 0x1b, 0xc1, 0xce, 0xb6, 0x83, 0x7c, 0xce, 0xb4, 0x3d, 0x85, 0xc7, 0x53, 0x30, 0x7c, 0xfe, 0x85 }; static const uint8_t TEE_ATTR_RSA_PUBLIC_EXPONENT_VALUE01[] = { 0x01, 0x00, 0x01 }; static const uint8_t TEE_ATTR_DSA_PRIME_768_VALUE01[] = { 0xf6, 0xad, 0x20, 0x71, 0xe1, 0x5a, 0x4b, 0x9c, 0x2b, 0x7e, 0x53, 0x26, 0xda, 0x43, 0x9d, 0xc1, 0x47, 0x4c, 0x1a, 0xd1, 0x6f, 0x2f, 0x85, 0xe9, 0x2c, 0xea, 0x89, 0xfc, 0xdc, 0x74, 0x66, 0x11, 0xcf, 0x30, 0xdd, 0xc8, 0x5e, 0x33, 0xf5, 0x83, 0xc1, 0x9d, 0x10, 0xbc, 0x1a, 0xc3, 0x93, 0x22, 0x26, 0x24, 0x6f, 0xa7, 0xb9, 0xe0, 0xdd, 0x25, 0x77, 0xb5, 0xf4, 0x27, 0x59, 0x4c, 0x39, 0xfa, 0xeb, 0xfc, 0x59, 0x8a, 0x32, 0xe1, 0x74, 0xcb, 0x8a, 0x68, 0x03, 0x57, 0xf8, 0x62, 0xf2, 0x0b, 0x6e, 0x84, 0x32, 0xa5, 0x30, 0x65, 0x2f, 0x1c, 0x21, 0x39, 0xae, 0x1f, 0xaf, 0x76, 0x8b, 0x83 }; static const uint8_t TEE_ATTR_DSA_SUBPRIME_160_VALUE01[] = { 0x87, 0x44, 0xe4, 0xdd, 0xc6, 0xd0, 0x19, 0xa5, 0xea, 0xc2, 0xb1, 0x5a, 0x15, 0xd7, 0xe1, 0xc7, 0xf6, 0x63, 0x35, 0xf7 }; static const uint8_t TEE_ATTR_DSA_BASE_768_VALUE01[] = { 0x9a, 0x09, 0x32, 0xb3, 0x8c, 0xb2, 0x10, 0x5b, 0x93, 0x00, 0xdc, 0xb8, 0x66, 0xc0, 0x66, 0xd9, 0xce, 0xc6, 0x43, 0x19, 0x2f, 0xcb, 0x28, 0x34, 0xa1, 0x23, 0x9d, 0xba, 0x28, 0xbd, 0x09, 0xfe, 0x01, 0x00, 0x1e, 0x04, 0x51, 0xf9, 0xd6, 0x35, 0x1f, 0x6e, 0x56, 0x4a, 0xfb, 0xc8, 0xf8, 0xc3, 0x9b, 0x10, 0x59, 0x86, 0x3e, 0xbd, 0x09, 0x85, 0x09, 0x0b, 0xd5, 0x5c, 0x82, 0x8e, 0x9f, 0xc1, 0x57, 0xac, 0x7d, 0xa3, 0xcf, 0xc2, 0x89, 0x2a, 0x0e, 0xd9, 0xb9, 0x32, 0x39, 0x05, 0x82, 0xf2, 0x97, 0x1e, 0x4a, 0x0c, 0x48, 0x3e, 0x06, 0x22, 0xd7, 0x31, 0x66, 0xbf, 0x62, 0xa5, 0x9f, 0x26 }; static const uint8_t TEE_ATTR_DSA_PRIVATE_VALUE_160_VALUE01[] = { 0x70, 0x4a, 0x46, 0xc6, 0x25, 0x2a, 0x95, 0xa3, 0x9b, 0x40, 0xe0, 0x43, 0x5a, 0x69, 0x1b, 0xad, 0xae, 0x52, 0xa5, 0xc0 }; static const uint8_t TEE_ATTR_DSA_PUBLIC_VALUE_768_VALUE01[] = { 0x52, 0x9d, 0xed, 0x98, 0xa2, 0x32, 0x09, 0x85, 0xfc, 0x84, 0xb6, 0x5a, 0x9d, 0xc8, 0xd4, 0xfe, 0x41, 0xad, 0xa6, 0xe3, 0x59, 0x3d, 0x70, 0x4f, 0x08, 0x98, 0xc1, 0x4e, 0xc2, 0x46, 0x34, 0xdd, 0xf5, 0xf1, 0xdb, 0x47, 0xcc, 0x49, 0x15, 0xfc, 0xe1, 0xe2, 0x67, 0x4d, 0x2e, 0xcd, 0x98, 0xd5, 0x8b, 0x59, 0x8e, 0x8d, 0xdf, 0xaf, 0xf3, 0x0e, 0x88, 0x26, 0xf5, 0x0a, 0xab, 0x40, 0x27, 0xb5, 0xaa, 0xb8, 0x87, 0xc1, 0x9a, 0xd9, 0x6d, 0x7e, 0x57, 0xde, 0x53, 0x90, 0xad, 0x8e, 0x55, 0x57, 0xb4, 0x1a, 0x80, 0x19, 0xc9, 0x0d, 0x80, 0x60, 0x71, 0x79, 0xb5, 0x4e, 0xb0, 0xad, 0x4d, 0x23 }; static const uint8_t TEE_ATTR_DSA_PRIME_2048_VALUE01[] = { 0xaa, 0x81, 0x5c, 0x9d, 0xb1, 0xc4, 0xd3, 0xd2, 0x77, 0x3c, 0x7d, 0x0d, 0x4d, 0x1d, 0xa7, 0x5e, 0xcf, 0xc4, 0xa3, 0x9e, 0x97, 0xd5, 0xfa, 0x19, 0x1f, 0xfe, 0xc8, 0xb1, 0x49, 0x0a, 0x29, 0x0c, 0xe3, 0x35, 0xe5, 0xce, 0x87, 0xea, 0x62, 0x0a, 0x8a, 0x17, 0xde, 0x0b, 0xb6, 0x47, 0x14, 0xe2, 0xec, 0x84, 0x0b, 0xf0, 0x0e, 0x6e, 0xbd, 0xb4, 0xff, 0xb4, 0xe3, 0x24, 0xca, 0x07, 0xc3, 0xc8, 0x71, 0x73, 0x09, 0xaf, 0x14, 0x10, 0x36, 0x2a, 0x77, 0x2c, 0x9a, 0xdd, 0x83, 0x8b, 0x2b, 0x0c, 0xae, 0x1e, 0x90, 0xab, 0x44, 0x8a, 0xda, 0xbd, 0xac, 0xd2, 0xe5, 0xdf, 0x59, 0xc4, 0x18, 0x7a, 0x32, 0xa2, 0x37, 0x19, 0xd6, 0xc5, 0x7e, 0x94, 0x00, 0x88, 0x53, 0x83, 0xbf, 0x8f, 0x06, 0x6f, 0x23, 0xb9, 0x41, 0x92, 0x0d, 0x54, 0xc3, 0x5b, 0x4f, 0x7c, 0xc5, 0x04, 0x4f, 0x3b, 0x40, 0xf1, 0x70, 0x46, 0x95, 0x63, 0x07, 0xb7, 0x48, 0xe8, 0x40, 0x73, 0x28, 0x44, 0xd0, 0x0a, 0x9c, 0xe6, 0xec, 0x57, 0x14, 0x29, 0x3b, 0x62, 0x65, 0x14, 0x7f, 0x15, 0xc6, 0x7f, 0x4b, 0xe3, 0x8b, 0x08, 0x2b, 0x55, 0xfd, 0xea, 0xdb, 0x61, 0x24, 0x68, 0x9f, 0xb7, 0x6f, 0x9d, 0x25, 0xcc, 0x28, 0xb8, 0xea, 0xa9, 0x8b, 0x56, 0x2d, 0x5c, 0x10, 0x11, 0xe0, 0xdc, 0xf9, 0xb3, 0x99, 0x23, 0x24, 0x0d, 0x33, 0x2d, 0x89, 0xdc, 0x96, 0x03, 0xb7, 0xbd, 0xdd, 0x0c, 0x70, 0xb8, 0x3c, 0xaa, 0x29, 0x05, 0x63, 0x1b, 0x1c, 0x83, 0xca, 0xbb, 0xae, 0x6c, 0x0c, 0x0c, 0x2e, 0xfe, 0x8f, 0x58, 0x13, 0x1e, 0xd8, 0x35, 0x1b, 0xf9, 0x3e, 0x87, 0x5f, 0x6a, 0x73, 0xa9, 0x3c, 0xba, 0xd4, 0x70, 0x14, 0x1a, 0x26, 0x87, 0xfb, 0xac, 0xf2, 0xd7, 0x1c, 0x8d, 0xde, 0xe9, 0x71, 0xad, 0x66, 0x07, 0x29, 0xad, }; static const uint8_t TEE_ATTR_DSA_SUBPRIME_224_VALUE01[] = { 0xea, 0x34, 0x7e, 0x90, 0xbe, 0x7c, 0x28, 0x75, 0xd1, 0xfe, 0x1d, 0xb6, 0x22, 0xb4, 0x76, 0x38, 0x37, 0xc5, 0xe2, 0x7a, 0x60, 0x37, 0x31, 0x03, 0x48, 0xc1, 0xaa, 0x11, }; static const uint8_t TEE_ATTR_DSA_BASE_2048_VALUE01[] = { 0x20, 0x42, 0x09, 0x4c, 0xcb, 0xc8, 0xb8, 0x72, 0x3f, 0xc9, 0x28, 0xc1, 0x2f, 0xda, 0x67, 0x1b, 0x83, 0x29, 0x5e, 0x99, 0xc7, 0x43, 0x57, 0x6f, 0x44, 0x50, 0x4b, 0xe1, 0x18, 0x63, 0x23, 0x31, 0x9b, 0x50, 0x02, 0xd2, 0x4f, 0x17, 0x3d, 0xf9, 0x09, 0xea, 0x24, 0x1d, 0x6e, 0xa5, 0x28, 0x99, 0x04, 0xee, 0x46, 0x36, 0x20, 0x4b, 0x2f, 0xbe, 0x94, 0xb0, 0x68, 0xfe, 0x09, 0x3f, 0x79, 0x62, 0x57, 0x95, 0x49, 0x55, 0x1d, 0x3a, 0xf2, 0x19, 0xad, 0x8e, 0xd1, 0x99, 0x39, 0xef, 0xf8, 0x6b, 0xce, 0xc8, 0x34, 0xde, 0x2f, 0x2f, 0x78, 0x59, 0x6e, 0x89, 0xe7, 0xcb, 0x52, 0xc5, 0x24, 0xe1, 0x77, 0x09, 0x8a, 0x56, 0xc2, 0x32, 0xeb, 0x1f, 0x56, 0x3a, 0xa8, 0x4b, 0xc6, 0xb0, 0x26, 0xde, 0xee, 0x6f, 0xf5, 0x1c, 0xb4, 0x41, 0xe0, 0x80, 0xf2, 0xda, 0xfa, 0xea, 0x1c, 0xed, 0x86, 0x42, 0x7d, 0x1c, 0x34, 0x6b, 0xe5, 0x5c, 0x66, 0x80, 0x3d, 0x4b, 0x76, 0xd1, 0x33, 0xcd, 0x44, 0x5b, 0x4c, 0x34, 0x82, 0xfa, 0x41, 0x50, 0x23, 0x46, 0x3c, 0x9b, 0xf3, 0x0f, 0x2f, 0x78, 0x42, 0x23, 0xe2, 0x60, 0x57, 0xd3, 0xaa, 0x0d, 0x7f, 0xbb, 0x66, 0x06, 0x30, 0xc5, 0x2e, 0x49, 0xd4, 0xa0, 0x32, 0x5c, 0x73, 0x89, 0xe0, 0x72, 0xaa, 0x34, 0x9f, 0x13, 0xc9, 0x66, 0xe1, 0x59, 0x75, 0x2f, 0xbb, 0x71, 0xe9, 0x33, 0x68, 0x90, 0xf9, 0x32, 0x43, 0xfa, 0x6e, 0x72, 0xd2, 0x99, 0x36, 0x5e, 0xe5, 0xb3, 0xfe, 0x26, 0x6e, 0xbf, 0x11, 0x10, 0x56, 0x8f, 0xee, 0x44, 0x25, 0xc8, 0x47, 0xb5, 0x02, 0x10, 0xbd, 0x48, 0x4b, 0x97, 0x43, 0x1a, 0x42, 0x85, 0x6a, 0xdc, 0xa3, 0xe7, 0xd1, 0xa9, 0xc9, 0xc6, 0x75, 0xc7, 0xe2, 0x66, 0x91, 0x83, 0x20, 0xdd, 0x5a, 0x78, 0xa4, 0x8c, 0x48, 0xa9, }; static const uint8_t TEE_ATTR_DSA_PRIVATE_VALUE_224_VALUE01[] = { 0x7b, 0x48, 0x90, 0x21, 0x57, 0x8e, 0x79, 0xe7, 0xbd, 0x3e, 0xe7, 0xab, 0x45, 0x6f, 0x65, 0x9f, 0x3d, 0xc0, 0x7c, 0x88, 0xf5, 0xc9, 0xa3, 0x9e, 0x4f, 0x8c, 0xee, 0x81, }; static const uint8_t TEE_ATTR_DSA_PUBLIC_VALUE_2048_VALUE01[] = { 0x1a, 0xe1, 0x0c, 0x78, 0x6a, 0xd0, 0x90, 0x2c, 0x5c, 0x68, 0x5d, 0xae, 0x5c, 0x71, 0x21, 0x41, 0x8a, 0x37, 0x7b, 0x88, 0x8b, 0x5f, 0x2f, 0x2b, 0xc7, 0x66, 0x23, 0x57, 0x0f, 0xd6, 0x2b, 0xcb, 0x19, 0x0b, 0x47, 0x1a, 0xd5, 0x35, 0x9c, 0x5f, 0x06, 0x2f, 0x88, 0x19, 0x28, 0x9e, 0x95, 0x6d, 0x8a, 0xa6, 0xf9, 0x0d, 0x1f, 0x8c, 0xf1, 0xee, 0x72, 0xd3, 0xa1, 0xbd, 0xfd, 0x56, 0xc4, 0x78, 0xdc, 0x29, 0xa1, 0x9c, 0x45, 0x69, 0xb5, 0xa6, 0x0e, 0x3a, 0x8f, 0x34, 0xf6, 0x06, 0x56, 0xea, 0xc5, 0xb2, 0x5d, 0xde, 0x55, 0x14, 0xa5, 0xc6, 0x7b, 0x67, 0x54, 0x23, 0x20, 0x4f, 0x6c, 0xca, 0xf0, 0x99, 0x06, 0x17, 0xcc, 0x73, 0x55, 0xb9, 0xd3, 0xed, 0x86, 0x89, 0x78, 0xa2, 0x52, 0x02, 0x0a, 0x76, 0x9e, 0xd5, 0x9a, 0x6e, 0xda, 0xa6, 0xef, 0xe3, 0x37, 0x7e, 0xef, 0x45, 0xf3, 0xf6, 0xf3, 0xe6, 0x41, 0x79, 0xcc, 0x7d, 0xb8, 0xb1, 0x43, 0xfb, 0x83, 0x5c, 0x5d, 0x71, 0xbf, 0xcf, 0xa1, 0xe2, 0xa9, 0x04, 0x9b, 0xcc, 0xf7, 0xfe, 0x9a, 0xb5, 0x75, 0x46, 0x22, 0x0f, 0xe3, 0xf4, 0xb7, 0x52, 0x1c, 0x86, 0x17, 0x39, 0xd1, 0x38, 0x50, 0x7e, 0x81, 0xa4, 0x6a, 0x69, 0x93, 0x60, 0x54, 0x41, 0xdc, 0xb9, 0x0d, 0x6e, 0xe4, 0xaf, 0xbc, 0x42, 0xca, 0xbe, 0x90, 0xa2, 0x54, 0x44, 0x49, 0x68, 0x10, 0x9d, 0x7e, 0xdd, 0x96, 0x94, 0xa0, 0x23, 0x23, 0x9f, 0x1d, 0x56, 0x17, 0x5d, 0xd1, 0xfa, 0xc1, 0x15, 0x91, 0x5e, 0x24, 0xfa, 0xb5, 0x63, 0xf4, 0xfc, 0x3f, 0x26, 0x9b, 0xed, 0x2f, 0x30, 0x08, 0x32, 0xd1, 0x12, 0x59, 0x64, 0x85, 0xa7, 0x11, 0x41, 0x7a, 0xa7, 0x3b, 0xb4, 0xac, 0x72, 0xa6, 0x51, 0xa1, 0xfa, 0x5b, 0xae, 0xd3, 0x63, 0x6c, 0x72, 0x0d, 0x39, 0x70, 0x08, }; static const uint8_t TEE_ATTR_DSA_PRIME_3072_VALUE01[] = { 0xc7, 0xb8, 0x6d, 0x70, 0x44, 0x21, 0x8e, 0x36, 0x74, 0x53, 0xd2, 0x10, 0xe7, 0x64, 0x33, 0xe4, 0xe2, 0x7a, 0x98, 0x3d, 0xb1, 0xc5, 0x60, 0xbb, 0x97, 0x55, 0xa8, 0xfb, 0x7d, 0x81, 0x99, 0x12, 0xc5, 0x6c, 0xfe, 0x00, 0x2a, 0xb1, 0xff, 0x3f, 0x72, 0x16, 0x5b, 0x94, 0x3c, 0x0b, 0x28, 0xed, 0x46, 0x03, 0x9a, 0x07, 0xde, 0x50, 0x7d, 0x7a, 0x29, 0xf7, 0x38, 0x60, 0x3d, 0xec, 0xd1, 0x27, 0x03, 0x80, 0xa4, 0x1f, 0x97, 0x1f, 0x25, 0x92, 0x66, 0x1a, 0x64, 0xba, 0x2f, 0x35, 0x1d, 0x9a, 0x69, 0xe5, 0x1a, 0x88, 0x8a, 0x05, 0x15, 0x6b, 0x7f, 0xe1, 0x56, 0x3c, 0x4b, 0x77, 0xee, 0x93, 0xa4, 0x49, 0x49, 0x13, 0x84, 0x38, 0xa2, 0xab, 0x8b, 0xdc, 0xfc, 0x49, 0xb4, 0xe7, 0x8d, 0x1c, 0xde, 0x76, 0x6e, 0x54, 0x98, 0x47, 0x60, 0x05, 0x7d, 0x76, 0xcd, 0x74, 0x0c, 0x94, 0xa4, 0xdd, 0x25, 0xa4, 0x6a, 0xa7, 0x7b, 0x18, 0xe9, 0xd7, 0x07, 0xd6, 0x73, 0x84, 0x97, 0xd4, 0xea, 0xc3, 0x64, 0xf4, 0x79, 0x2d, 0x97, 0x66, 0xa1, 0x6a, 0x0e, 0x23, 0x48, 0x07, 0xe9, 0x6b, 0x8c, 0x64, 0xd4, 0x04, 0xbb, 0xdb, 0x87, 0x6e, 0x39, 0xb5, 0x79, 0x9e, 0xf5, 0x3f, 0xe6, 0xcb, 0x9b, 0xab, 0x62, 0xef, 0x19, 0xfd, 0xcc, 0x2b, 0xdd, 0x90, 0x5b, 0xed, 0xa1, 0x3b, 0x9e, 0xf7, 0xac, 0x35, 0xf1, 0xf5, 0x57, 0xcb, 0x0d, 0xc4, 0x58, 0xc0, 0x19, 0xe2, 0xbc, 0x19, 0xa9, 0xf5, 0xdf, 0xc1, 0xe4, 0xec, 0xa9, 0xe6, 0xd4, 0x66, 0x56, 0x41, 0x24, 0x30, 0x4a, 0x31, 0xf0, 0x38, 0x60, 0x5a, 0x3e, 0x34, 0x2d, 0xa0, 0x1b, 0xe1, 0xc2, 0xb5, 0x45, 0x61, 0x0e, 0xdd, 0x2c, 0x13, 0x97, 0xa3, 0xc8, 0x39, 0x65, 0x88, 0xc6, 0x32, 0x9e, 0xfe, 0xb4, 0xe1, 0x65, 0xaf, 0x5b, 0x36, 0x8a, 0x39, 0xa8, 0x8e, 0x48, 0x88, 0xe3, 0x9f, 0x40, 0xbb, 0x3d, 0xe4, 0xeb, 0x14, 0x16, 0x67, 0x2f, 0x99, 0x9f, 0xea, 0xd3, 0x7a, 0xef, 0x1c, 0xa9, 0x64, 0x3f, 0xf3, 0x2c, 0xdb, 0xc0, 0xfc, 0xeb, 0xe6, 0x28, 0xd7, 0xe4, 0x6d, 0x28, 0x1a, 0x98, 0x9d, 0x43, 0xdd, 0x21, 0x43, 0x21, 0x51, 0xaf, 0x68, 0xbe, 0x3f, 0x6d, 0x56, 0xac, 0xfb, 0xdb, 0x6c, 0x97, 0xd8, 0x7f, 0xcb, 0x5e, 0x62, 0x91, 0xbf, 0x8b, 0x4e, 0xe1, 0x27, 0x5a, 0xe0, 0xeb, 0x43, 0x83, 0xcc, 0x75, 0x39, 0x03, 0xc8, 0xd2, 0x9f, 0x4a, 0xdb, 0x6a, 0x54, 0x7e, 0x40, 0x5d, 0xec, 0xdf, 0xf2, 0x88, 0xc5, 0xf6, 0xc7, 0xaa, 0x30, 0xdc, 0xb1, 0x2f, 0x84, 0xd3, 0x92, 0x49, 0x3a, 0x70, 0x93, 0x33, 0x17, 0xc0, 0xf5, 0xe6, 0x55, 0x26, 0x01, 0xfa, 0xe1, 0x8f, 0x17, 0xe6, 0xe5, 0xbb, 0x6b, 0xf3, 0x96, 0xd3, 0x2d, 0x8a, 0xb9, }; static const uint8_t TEE_ATTR_DSA_SUBPRIME_256_VALUE01[] = { 0x87, 0x6f, 0xa0, 0x9e, 0x1d, 0xc6, 0x2b, 0x23, 0x6c, 0xe1, 0xc3, 0x15, 0x5b, 0xa4, 0x8b, 0x0c, 0xcf, 0xda, 0x29, 0xf3, 0xac, 0x5a, 0x97, 0xf7, 0xff, 0xa1, 0xbd, 0x87, 0xb6, 0x8d, 0x2a, 0x4b, }; static const uint8_t TEE_ATTR_DSA_BASE_3072_VALUE01[] = { 0x11, 0x0a, 0xfe, 0xbb, 0x12, 0xc7, 0xf8, 0x62, 0xb6, 0xde, 0x03, 0xd4, 0x7f, 0xdb, 0xc3, 0x32, 0x6e, 0x0d, 0x4d, 0x31, 0xb1, 0x2a, 0x8c, 0xa9, 0x5b, 0x2d, 0xee, 0x21, 0x23, 0xbc, 0xc6, 0x67, 0xd4, 0xf7, 0x2c, 0x1e, 0x72, 0x09, 0x76, 0x7d, 0x27, 0x21, 0xf9, 0x5f, 0xbd, 0x9a, 0x4d, 0x03, 0x23, 0x6d, 0x54, 0x17, 0x4f, 0xbf, 0xaf, 0xf2, 0xc4, 0xff, 0x7d, 0xea, 0xe4, 0x73, 0x8b, 0x20, 0xd9, 0xf3, 0x7b, 0xf0, 0xa1, 0x13, 0x4c, 0x28, 0x8b, 0x42, 0x0a, 0xf0, 0xb5, 0x79, 0x2e, 0x47, 0xa9, 0x25, 0x13, 0xc0, 0x41, 0x3f, 0x34, 0x6a, 0x4e, 0xdb, 0xab, 0x2c, 0x45, 0xbd, 0xca, 0x13, 0xf5, 0x34, 0x1c, 0x2b, 0x55, 0xb8, 0xba, 0x54, 0x93, 0x2b, 0x92, 0x17, 0xb5, 0xa8, 0x59, 0xe5, 0x53, 0xf1, 0x4b, 0xb8, 0xc1, 0x20, 0xfb, 0xb9, 0xd9, 0x99, 0x09, 0xdf, 0xf5, 0xea, 0x68, 0xe1, 0x4b, 0x37, 0x99, 0x64, 0xfd, 0x3f, 0x38, 0x61, 0xe5, 0xba, 0x5c, 0xc9, 0x70, 0xc4, 0xa1, 0x80, 0xee, 0xf5, 0x44, 0x28, 0x70, 0x39, 0x61, 0x02, 0x1e, 0x7b, 0xd6, 0x8c, 0xb6, 0x37, 0x92, 0x7b, 0x8c, 0xbe, 0xe6, 0x80, 0x5f, 0xa2, 0x72, 0x85, 0xbf, 0xee, 0x4d, 0x1e, 0xf7, 0x0e, 0x02, 0xc1, 0xa1, 0x8a, 0x7c, 0xd7, 0x8b, 0xef, 0x1d, 0xd9, 0xcd, 0xad, 0x45, 0xdd, 0xe9, 0xcd, 0x69, 0x07, 0x55, 0x05, 0x0f, 0xc4, 0x66, 0x29, 0x37, 0xee, 0x1d, 0x6f, 0x4d, 0xb1, 0x28, 0x07, 0xcc, 0xc9, 0x5b, 0xc4, 0x35, 0xf1, 0x1b, 0x71, 0xe7, 0x08, 0x60, 0x48, 0xb1, 0xda, 0xb5, 0x91, 0x3c, 0x60, 0x55, 0x01, 0x2d, 0xe8, 0x2e, 0x43, 0xa4, 0xe5, 0x0c, 0xf9, 0x3f, 0xef, 0xf5, 0xdc, 0xab, 0x81, 0x4a, 0xbc, 0x22, 0x4c, 0x5e, 0x00, 0x25, 0xbd, 0x86, 0x8c, 0x3f, 0xc5, 0x92, 0x04, 0x1b, 0xba, 0x04, 0x74, 0x7c, 0x10, 0xaf, 0x51, 0x3f, 0xc3, 0x6e, 0x4d, 0x91, 0xc6, 0x3e, 0xe5, 0x25, 0x34, 0x22, 0xcf, 0x40, 0x63, 0x39, 0x8d, 0x77, 0xc5, 0x2f, 0xcb, 0x01, 0x14, 0x27, 0xcb, 0xfc, 0xfa, 0x67, 0xb1, 0xb2, 0xc2, 0xd1, 0xaa, 0x4a, 0x3d, 0xa7, 0x26, 0x45, 0xcb, 0x1c, 0x76, 0x70, 0x36, 0x05, 0x4e, 0x2f, 0x31, 0xf8, 0x86, 0x65, 0xa5, 0x44, 0x61, 0xc8, 0x85, 0xfb, 0x32, 0x19, 0xd5, 0xad, 0x87, 0x48, 0xa0, 0x11, 0x58, 0xf6, 0xc7, 0xc0, 0xdf, 0x5a, 0x8c, 0x90, 0x8b, 0xa8, 0xc3, 0xe5, 0x36, 0x82, 0x24, 0x28, 0x88, 0x6c, 0x7b, 0x50, 0x0b, 0xbc, 0x15, 0xb4, 0x9d, 0xf7, 0x46, 0xb9, 0xde, 0x5a, 0x78, 0xfe, 0x3b, 0x4f, 0x69, 0x91, 0xd0, 0x11, 0x0c, 0x3c, 0xbf, 0xf4, 0x58, 0x03, 0x9d, 0xc3, 0x62, 0x61, 0xcf, 0x46, 0xaf, 0x4b, 0xc2, 0x51, 0x53, 0x68, 0xf4, 0xab, 0xb7, }; static const uint8_t TEE_ATTR_DSA_PRIVATE_VALUE_256_VALUE01[] = { 0x34, 0x70, 0x83, 0x20, 0x55, 0xda, 0xde, 0x94, 0xe1, 0x4c, 0xd8, 0x77, 0x71, 0x71, 0xd1, 0x8e, 0x5d, 0x06, 0xf6, 0x6a, 0xef, 0xf4, 0xc6, 0x14, 0x71, 0xe4, 0xeb, 0xa7, 0x4e, 0xe5, 0x61, 0x64, }; static const uint8_t TEE_ATTR_DSA_PUBLIC_VALUE_3072_VALUE01[] = { 0x45, 0x6a, 0x10, 0x5c, 0x71, 0x35, 0x66, 0x23, 0x48, 0x38, 0xbc, 0x07, 0x0b, 0x8a, 0x75, 0x1a, 0x0b, 0x57, 0x76, 0x7c, 0xb7, 0x5e, 0x99, 0x11, 0x4a, 0x1a, 0x46, 0x64, 0x1e, 0x11, 0xda, 0x1f, 0xa9, 0xf2, 0x29, 0x14, 0xd8, 0x08, 0xad, 0x71, 0x48, 0x61, 0x2c, 0x1e, 0xa5, 0x5d, 0x25, 0x30, 0x17, 0x81, 0xe9, 0xae, 0x0c, 0x9a, 0xe3, 0x6a, 0x69, 0xd8, 0x7b, 0xa0, 0x39, 0xec, 0x7c, 0xd8, 0x64, 0xc3, 0xad, 0x09, 0x48, 0x73, 0xe6, 0xe5, 0x67, 0x09, 0xfd, 0x10, 0xd9, 0x66, 0x85, 0x3d, 0x61, 0x1b, 0x1c, 0xff, 0x15, 0xd3, 0x7f, 0xde, 0xe4, 0x24, 0x50, 0x6c, 0x18, 0x4d, 0x62, 0xc7, 0x03, 0x33, 0x58, 0xbe, 0x78, 0xc2, 0x25, 0x09, 0x43, 0xb6, 0xf6, 0xd0, 0x43, 0xd6, 0x3b, 0x31, 0x7d, 0xe5, 0x6e, 0x5a, 0xd8, 0xd1, 0xfd, 0x97, 0xdd, 0x35, 0x5a, 0xbe, 0x96, 0x45, 0x2f, 0x8e, 0x43, 0x54, 0x85, 0xfb, 0x3b, 0x90, 0x7b, 0x51, 0x90, 0x0a, 0xa3, 0xf2, 0x44, 0x18, 0xdf, 0x50, 0xb4, 0xfc, 0xda, 0xfb, 0xf6, 0x13, 0x75, 0x48, 0xc3, 0x93, 0x73, 0xb8, 0xbc, 0x4b, 0xa3, 0xda, 0xbb, 0x47, 0x46, 0xeb, 0xd1, 0x7b, 0x87, 0xfc, 0xd6, 0xa2, 0xf1, 0x97, 0xc1, 0x07, 0xb1, 0x8e, 0xc5, 0xb4, 0x65, 0xe6, 0xe4, 0xcb, 0x43, 0x0d, 0x9c, 0x0c, 0xe7, 0x8d, 0xa5, 0x98, 0x84, 0x41, 0x05, 0x4a, 0x37, 0x07, 0x92, 0xb7, 0x30, 0xda, 0x9a, 0xba, 0x41, 0xa3, 0x16, 0x9a, 0xf2, 0x61, 0x76, 0xf7, 0x4e, 0x6f, 0x7c, 0x0c, 0x9c, 0x9b, 0x55, 0xb6, 0x2b, 0xbe, 0x7c, 0xe3, 0x8d, 0x46, 0x95, 0xd4, 0x81, 0x57, 0xe6, 0x60, 0xc2, 0xac, 0xb6, 0x3f, 0x48, 0x2f, 0x55, 0x41, 0x81, 0x50, 0xe5, 0xfe, 0xe4, 0x3a, 0xce, 0x84, 0xc5, 0x40, 0xc3, 0xba, 0x76, 0x62, 0xae, 0x80, 0x83, 0x5c, 0x1a, 0x2d, 0x51, 0x89, 0x0e, 0xa9, 0x6b, 0xa2, 0x06, 0x42, 0x7c, 0x41, 0xef, 0x8c, 0x38, 0xaa, 0x07, 0xd2, 0xa3, 0x65, 0xe7, 0xe5, 0x83, 0x80, 0xd8, 0xf4, 0x78, 0x2e, 0x22, 0xac, 0x21, 0x01, 0xaf, 0x73, 0x2e, 0xe2, 0x27, 0x58, 0x33, 0x7b, 0x25, 0x36, 0x37, 0x83, 0x8e, 0x16, 0xf5, 0x0f, 0x56, 0xd3, 0x13, 0xd0, 0x79, 0x81, 0x88, 0x0d, 0x68, 0x55, 0x57, 0xf7, 0xd7, 0x9a, 0x6d, 0xb8, 0x23, 0xc6, 0x1f, 0x1b, 0xb3, 0xdb, 0xc5, 0xd5, 0x04, 0x21, 0xa4, 0x84, 0x3a, 0x6f, 0x29, 0x69, 0x0e, 0x78, 0xaa, 0x0f, 0x0c, 0xff, 0x30, 0x42, 0x31, 0x81, 0x8b, 0x81, 0xfc, 0x4a, 0x24, 0x3f, 0xc0, 0x0f, 0x09, 0xa5, 0x4c, 0x46, 0x6d, 0x6a, 0x8c, 0x73, 0xd3, 0x2a, 0x55, 0xe1, 0xab, 0xd5, 0xec, 0x8b, 0x4e, 0x1a, 0xfa, 0x32, 0xa7, 0x9b, 0x01, 0xdf, 0x85, 0xa8, 0x1f, 0x3f, 0x5c, 0xfe, }; static const uint8_t TEE_ATTR_DES3_192_VALUE01[] = { 0xCD, 0xFE, 0x57, 0xB6, 0xB6, 0x2F, 0xAE, 0x6B, 0x04, 0x73, 0x40, 0xF1, 0x02, 0xD6, 0xA4, 0x8C, 0x89, 0x5D, 0xAD, 0xF2, 0x9D, 0x62, 0xEF, 0x25 }; static const uint8_t TEE_ATTR_RSA_PRIVATE_EXPONENT_VALUE01[] = { 0xa5, 0x0d, 0xe1, 0x84, 0xf9, 0x02, 0xec, 0x42, 0x20, 0x2c, 0x98, 0x98, 0x70, 0xa3, 0x1a, 0x04, 0x21, 0xa7, 0xa0, 0x59, 0x5d, 0x87, 0x80, 0x9b, 0x09, 0x57, 0x91, 0xb4, 0x50, 0x51, 0x62, 0xbf, 0x22, 0xd7, 0xdb, 0x17, 0x25, 0xb0, 0x9c, 0x91, 0x29, 0x5f, 0x10, 0x9c, 0xac, 0x44, 0x48, 0xb2, 0x43, 0x8d, 0x6b, 0x36, 0x84, 0xa7, 0xdf, 0xb8, 0x1b, 0x9f, 0x73, 0xac, 0x2c, 0x53, 0xa5, 0x39, 0xd9, 0xa2, 0xe2, 0x7e, 0xf2, 0x07, 0x2d, 0x80, 0xa4, 0x7b, 0x7b, 0x66, 0x1a, 0x2f, 0xb7, 0x66, 0x64, 0x66, 0xa8, 0xc3, 0x8d, 0x7e, 0x8a, 0x7f, 0xc6, 0xd7, 0x52, 0xe7, 0x38, 0x30, 0x59, 0x74, 0x88, 0x8e, 0x8a, 0x52, 0x79, 0x30, 0x77, 0xc9, 0xe5, 0x7a, 0x3e, 0x65, 0x5d, 0x89, 0xa9, 0xb7, 0x0b, 0xc6, 0x62, 0x72, 0x9e, 0xa4, 0x72, 0xae, 0x4b, 0xb3, 0xf2, 0x89, 0x47, 0x15, 0xe0, 0x5b, 0x45, 0x4d, 0x99, 0x5b, 0x13, 0x6c, 0x90, 0xbe, 0xe5, 0xb5, 0x98, 0xad, 0x87, 0x99, 0x1a, 0x57, 0xd4, 0x1f, 0xf1, 0x52, 0x71, 0x5b, 0x51, 0x40, 0xdc, 0x51, 0x35, 0xf6, 0x6c, 0xae, 0xa3, 0xf9, 0x0f, 0x3a, 0xed, 0x28, 0xfc, 0xa5, 0x60, 0x2f, 0x4b, 0x4f, 0x31, 0xac, 0x48, 0x3e, 0x5b, 0xba, 0xe4, 0x2b, 0x58, 0x79, 0xe6, 0xb4, 0x6b, 0x5e, 0x56, 0x0a, 0xb2, 0xdb, 0x68, 0xed, 0x24, 0xd8, 0x5e, 0x6f, 0x30, 0x59, 0x8d, 0x8c, 0xa3, 0x00, 0x68, 0xf5, 0x42, 0x95, 0x1a, 0x0b, 0xa8, 0x1c, 0xfb, 0xdf, 0x29, 0x81, 0x10, 0x32, 0x02, 0xcc, 0x51, 0xa4, 0x17, 0x14, 0x3e, 0xef, 0x89, 0x41, 0xde, 0xf8, 0x2d, 0x64, 0x69, 0x30, 0xe8, 0x8a, 0xad, 0x96, 0xf6, 0xf4, 0x82, 0x83, 0x9a, 0x77, 0xe7, 0xde, 0x12, 0x31, 0xf7, 0x15, 0xec, 0xce, 0xed, 0x83, 0x68, 0x88, 0x84, 0xe5, 0x64, 0x81 }; static const uint8_t TEE_ATTR_DES_64_VALUE01[] = { 0xCD, 0xFE, 0x57, 0xB6, 0xB6, 0x2F, 0xAE, 0x6B }; static const uint8_t TEE_ATTR_HMAC_SHA1_256_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; static const uint8_t TEE_ATTR_HMAC_MD5_256_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; static const uint8_t TEE_ATTR_HMAC_SHA224_256_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; static const uint8_t TEE_ATTR_HMAC_SHA384_512_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f }; static const uint8_t TEE_ATTR_HMAC_SHA512_512_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f }; #undef TEE_ECC_CURVE_NIST_P192 static const uint8_t TEE_ECC_CURVE_NIST_P192[] = { 0x00, 0x00, 0x00, 0x01 }; #undef TEE_ECC_CURVE_NIST_P224 static const uint8_t TEE_ECC_CURVE_NIST_P224[] = { 0x00, 0x00, 0x00, 0x02 }; #undef TEE_ECC_CURVE_NIST_P256 static const uint8_t TEE_ECC_CURVE_NIST_P256[] = { 0x00, 0x00, 0x00, 0x03 }; #undef TEE_ECC_CURVE_NIST_P384 static const uint8_t TEE_ECC_CURVE_NIST_P384[] = { 0x00, 0x00, 0x00, 0x04 }; #undef TEE_ECC_CURVE_NIST_P521 static const uint8_t TEE_ECC_CURVE_NIST_P521[] = { 0x00, 0x00, 0x00, 0x05 }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P192_VALUE01[] = { 0xe1, 0x4f, 0x37, 0xb3, 0xd1, 0x37, 0x4f, 0xf8, 0xb0, 0x3f, 0x41, 0xb9, 0xb3, 0xfd, 0xd2, 0xf0, 0xeb, 0xcc, 0xf2, 0x75, 0xd6, 0x60, 0xd7, 0xf3, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P192_VALUE01[] = { 0x07, 0x00, 0x8e, 0xa4, 0x0b, 0x08, 0xdb, 0xe7, 0x64, 0x32, 0x09, 0x6e, 0x80, 0xa2, 0x49, 0x4c, 0x94, 0x98, 0x2d, 0x2d, 0x5b, 0xcf, 0x98, 0xe6, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P192_VALUE01[] = { 0x76, 0xfa, 0xb6, 0x81, 0xd0, 0x0b, 0x41, 0x4e, 0xa6, 0x36, 0xba, 0x21, 0x5d, 0xe2, 0x6d, 0x98, 0xc4, 0x1b, 0xd7, 0xf2, 0xe4, 0xd6, 0x54, 0x77, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P224_VALUE01[] = { 0x97, 0xc4, 0xb7, 0x96, 0xe1, 0x63, 0x9d, 0xd1, 0x03, 0x5b, 0x70, 0x8f, 0xc0, 0x0d, 0xc7, 0xba, 0x16, 0x82, 0xce, 0xc4, 0x4a, 0x10, 0x02, 0xa1, 0xa8, 0x20, 0x61, 0x9f, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P224_VALUE01[] = { 0x8a, 0x4d, 0xca, 0x35, 0x13, 0x6c, 0x4b, 0x70, 0xe5, 0x88, 0xe2, 0x35, 0x54, 0x63, 0x7a, 0xe2, 0x51, 0x07, 0x7d, 0x13, 0x65, 0xa6, 0xba, 0x5d, 0xb9, 0x58, 0x5d, 0xe7, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P224_VALUE01[] = { 0xad, 0x3d, 0xee, 0x06, 0xde, 0x0b, 0xe8, 0x27, 0x9d, 0x4a, 0xf4, 0x35, 0xd7, 0x24, 0x5f, 0x14, 0xf3, 0xb4, 0xf8, 0x2e, 0xb5, 0x78, 0xe5, 0x19, 0xee, 0x00, 0x57, 0xb1, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P256_VALUE01[] = { 0xbe, 0x34, 0xba, 0xa8, 0xd0, 0x40, 0xa3, 0xb9, 0x91, 0xf9, 0x07, 0x5b, 0x56, 0xba, 0x29, 0x2f, 0x75, 0x5b, 0x90, 0xe4, 0xb6, 0xdc, 0x10, 0xda, 0xd3, 0x67, 0x15, 0xc3, 0x3c, 0xfd, 0xac, 0x25, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P256_VALUE01[] = { 0xfa, 0x27, 0x37, 0xfb, 0x93, 0x48, 0x8d, 0x19, 0xca, 0xef, 0x11, 0xae, 0x7f, 0xaf, 0x6b, 0x7f, 0x4b, 0xcd, 0x67, 0xb2, 0x86, 0xe3, 0xfc, 0x54, 0xe8, 0xa6, 0x5c, 0x2b, 0x74, 0xae, 0xcc, 0xb0, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P256_VALUE01[] = { 0xd4, 0xcc, 0xd6, 0xda, 0xe6, 0x98, 0x20, 0x8a, 0xa8, 0xc3, 0xa6, 0xf3, 0x9e, 0x45, 0x51, 0x0d, 0x03, 0xbe, 0x09, 0xb2, 0xf1, 0x24, 0xbf, 0xc0, 0x67, 0x85, 0x6c, 0x32, 0x4f, 0x9b, 0x4d, 0x09, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P384_VALUE01[] = { 0xa4, 0x92, 0xce, 0x8f, 0xa9, 0x00, 0x84, 0xc2, 0x27, 0xe1, 0xa3, 0x2f, 0x79, 0x74, 0xd3, 0x9e, 0x9f, 0xf6, 0x7a, 0x7e, 0x87, 0x05, 0xec, 0x34, 0x19, 0xb3, 0x5f, 0xb6, 0x07, 0x58, 0x2b, 0xeb, 0xd4, 0x61, 0xe0, 0xb1, 0x52, 0x0a, 0xc7, 0x6e, 0xc2, 0xdd, 0x4e, 0x9b, 0x63, 0xeb, 0xae, 0x71, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P384_VALUE01[] = { 0xe5, 0x5f, 0xee, 0x6c, 0x49, 0xd8, 0xd5, 0x23, 0xf5, 0xce, 0x7b, 0xf9, 0xc0, 0x42, 0x5c, 0xe4, 0xff, 0x65, 0x07, 0x08, 0xb7, 0xde, 0x5c, 0xfb, 0x09, 0x59, 0x01, 0x52, 0x39, 0x79, 0xa7, 0xf0, 0x42, 0x60, 0x2d, 0xb3, 0x08, 0x54, 0x73, 0x53, 0x69, 0x81, 0x3b, 0x5c, 0x3f, 0x5e, 0xf8, 0x68, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P384_VALUE01[] = { 0x28, 0xf5, 0x9c, 0xc5, 0xdc, 0x50, 0x98, 0x92, 0xa9, 0x88, 0xd3, 0x8a, 0x8e, 0x25, 0x19, 0xde, 0x3d, 0x0c, 0x4f, 0xd0, 0xfb, 0xdb, 0x09, 0x93, 0xe3, 0x8f, 0x18, 0x50, 0x6c, 0x17, 0x60, 0x6c, 0x5e, 0x24, 0x24, 0x92, 0x46, 0xf1, 0xce, 0x94, 0x98, 0x3a, 0x53, 0x61, 0xc5, 0xbe, 0x98, 0x3e, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P521_VALUE01[] = { 0x01, 0xbd, 0x56, 0xbd, 0x10, 0x61, 0x18, 0xed, 0xa2, 0x46, 0x15, 0x5b, 0xd4, 0x3b, 0x42, 0xb8, 0xe1, 0x3f, 0x0a, 0x6e, 0x25, 0xdd, 0x3b, 0xb3, 0x76, 0x02, 0x6f, 0xab, 0x4d, 0xc9, 0x2b, 0x61, 0x57, 0xbc, 0x6d, 0xfe, 0xc2, 0xd1, 0x5d, 0xd3, 0xd0, 0xcf, 0x2a, 0x39, 0xaa, 0x68, 0x49, 0x40, 0x42, 0xaf, 0x48, 0xba, 0x96, 0x01, 0x11, 0x8d, 0xa8, 0x2c, 0x6f, 0x21, 0x08, 0xa3, 0xa2, 0x03, 0xad, 0x74, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P521_VALUE01[] = { 0x01, 0x2f, 0xbc, 0xae, 0xff, 0xa6, 0xa5, 0x1f, 0x3e, 0xe4, 0xd3, 0xd2, 0xb5, 0x1c, 0x5d, 0xec, 0x6d, 0x7c, 0x72, 0x6c, 0xa3, 0x53, 0xfc, 0x01, 0x4e, 0xa2, 0xbf, 0x7c, 0xfb, 0xb9, 0xb9, 0x10, 0xd3, 0x2c, 0xbf, 0xa6, 0xa0, 0x0f, 0xe3, 0x9b, 0x6c, 0xdb, 0x89, 0x46, 0xf2, 0x27, 0x75, 0x39, 0x8b, 0x2e, 0x23, 0x3c, 0x0c, 0xf1, 0x44, 0xd7, 0x8c, 0x8a, 0x77, 0x42, 0xb5, 0xc7, 0xa3, 0xbb, 0x5d, 0x23, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P521_VALUE01[] = { 0x00, 0x9c, 0xde, 0xf8, 0x23, 0xdd, 0x7b, 0xf9, 0xa7, 0x9e, 0x8c, 0xce, 0xac, 0xd2, 0xe4, 0x52, 0x7c, 0x23, 0x1d, 0x0a, 0xe5, 0x96, 0x7a, 0xf0, 0x95, 0x8e, 0x93, 0x1d, 0x7d, 0xdc, 0xcf, 0x28, 0x05, 0xa3, 0xe6, 0x18, 0xdc, 0x30, 0x39, 0xfe, 0xc9, 0xfe, 0xbb, 0xd3, 0x30, 0x52, 0xfe, 0x4c, 0x0f, 0xee, 0x98, 0xf0, 0x33, 0x10, 0x60, 0x64, 0x98, 0x2d, 0x88, 0xf4, 0xe0, 0x35, 0x49, 0xd4, 0xa6, 0x4d, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P192_VALUE01[] = { 0xf1, 0x7d, 0x3f, 0xea, 0x36, 0x7b, 0x74, 0xd3, 0x40, 0x85, 0x1c, 0xa4, 0x27, 0x0d, 0xcb, 0x24, 0xc2, 0x71, 0xf4, 0x45, 0xbe, 0xd9, 0xd5, 0x27, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P192_VALUE01[] = { 0xb1, 0x50, 0x53, 0x40, 0x1f, 0x57, 0x28, 0x56, 0x37, 0xec, 0x32, 0x4c, 0x1c, 0xd2, 0x13, 0x9e, 0x3a, 0x67, 0xde, 0x37, 0x39, 0x23, 0x4b, 0x37, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P192_VALUE01[] = { 0xf2, 0x69, 0xc1, 0x58, 0x63, 0x74, 0x82, 0xaa, 0xd6, 0x44, 0xcd, 0x69, 0x2d, 0xd1, 0xd3, 0xef, 0x2c, 0x8a, 0x7c, 0x49, 0xe3, 0x89, 0xf7, 0xf6, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P192_VALUE02[] = { 0xdf, 0xbe, 0x5d, 0x7c, 0x61, 0xfa, 0xc8, 0x8b, 0x11, 0x81, 0x1b, 0xde, 0x32, 0x8e, 0x8a, 0x0d, 0x12, 0xbf, 0x01, 0xa9, 0xd2, 0x04, 0xb5, 0x23, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P192_VALUE02[] = { 0x42, 0xea, 0x6d, 0xd9, 0x96, 0x9d, 0xd2, 0xa6, 0x1f, 0xea, 0x1a, 0xac, 0x7f, 0x8e, 0x98, 0xed, 0xcc, 0x89, 0x6c, 0x6e, 0x55, 0x85, 0x7c, 0xc0, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P224_VALUE01[] = { 0x83, 0x46, 0xa6, 0x0f, 0xc6, 0xf2, 0x93, 0xca, 0x5a, 0x0d, 0x2a, 0xf6, 0x8b, 0xa7, 0x1d, 0x1d, 0xd3, 0x89, 0xe5, 0xe4, 0x08, 0x37, 0x94, 0x2d, 0xf3, 0xe4, 0x3c, 0xbd, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P224_VALUE01[] = { 0x8d, 0xe2, 0xe2, 0x6a, 0xdf, 0x72, 0xc5, 0x82, 0xd6, 0x56, 0x8e, 0xf6, 0x38, 0xc4, 0xfd, 0x59, 0xb1, 0x8d, 0xa1, 0x71, 0xbd, 0xf5, 0x01, 0xf1, 0xd9, 0x29, 0xe0, 0x48, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P224_VALUE01[] = { 0x4a, 0x68, 0xa1, 0xc2, 0xb0, 0xfb, 0x22, 0x93, 0x0d, 0x12, 0x05, 0x55, 0xc1, 0xec, 0xe5, 0x0e, 0xa9, 0x8d, 0xea, 0x84, 0x07, 0xf7, 0x1b, 0xe3, 0x6e, 0xfa, 0xc0, 0xde, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P224_VALUE02[] = { 0x88, 0x20, 0x92, 0xcc, 0xbb, 0xa7, 0x93, 0x0f, 0x41, 0x9a, 0x8a, 0x4f, 0x9b, 0xb1, 0x69, 0x78, 0xbb, 0xc3, 0x83, 0x87, 0x29, 0x99, 0x25, 0x59, 0xa6, 0xf2, 0xe2, 0xd7, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P224_VALUE02[] = { 0xaf, 0x33, 0xcd, 0x06, 0x29, 0xbc, 0x7e, 0x99, 0x63, 0x20, 0xa3, 0xf4, 0x03, 0x68, 0xf7, 0x4d, 0xe8, 0x70, 0x4f, 0xa3, 0x7b, 0x8f, 0xab, 0x69, 0xab, 0xaa, 0xe2, 0x80, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P256_VALUE01[] = { 0x7d, 0x7d, 0xc5, 0xf7, 0x1e, 0xb2, 0x9d, 0xda, 0xf8, 0x0d, 0x62, 0x14, 0x63, 0x2e, 0xea, 0xe0, 0x3d, 0x90, 0x58, 0xaf, 0x1f, 0xb6, 0xd2, 0x2e, 0xd8, 0x0b, 0xad, 0xb6, 0x2b, 0xc1, 0xa5, 0x34, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P256_VALUE01[] = { 0xea, 0xd2, 0x18, 0x59, 0x01, 0x19, 0xe8, 0x87, 0x6b, 0x29, 0x14, 0x6f, 0xf8, 0x9c, 0xa6, 0x17, 0x70, 0xc4, 0xed, 0xbb, 0xf9, 0x7d, 0x38, 0xce, 0x38, 0x5e, 0xd2, 0x81, 0xd8, 0xa6, 0xb2, 0x30, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P256_VALUE01[] = { 0x28, 0xaf, 0x61, 0x28, 0x1f, 0xd3, 0x5e, 0x2f, 0xa7, 0x00, 0x25, 0x23, 0xac, 0xc8, 0x5a, 0x42, 0x9c, 0xb0, 0x6e, 0xe6, 0x64, 0x83, 0x25, 0x38, 0x9f, 0x59, 0xed, 0xfc, 0xe1, 0x40, 0x51, 0x41, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P256_VALUE02[] = { 0xdb, 0x71, 0xe5, 0x09, 0xe3, 0xfd, 0x9b, 0x06, 0x0d, 0xdb, 0x20, 0xba, 0x5c, 0x51, 0xdc, 0xc5, 0x94, 0x8d, 0x46, 0xfb, 0xf6, 0x40, 0xdf, 0xe0, 0x44, 0x17, 0x82, 0xca, 0xb8, 0x5f, 0xa4, 0xac, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P256_VALUE02[] = { 0x70, 0x0c, 0x48, 0xf7, 0x7f, 0x56, 0x58, 0x4c, 0x5c, 0xc6, 0x32, 0xca, 0x65, 0x64, 0x0d, 0xb9, 0x1b, 0x6b, 0xac, 0xce, 0x3a, 0x4d, 0xf6, 0xb4, 0x2c, 0xe7, 0xcc, 0x83, 0x88, 0x33, 0xd2, 0x87, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P384_VALUE01[] = { 0x3c, 0xc3, 0x12, 0x2a, 0x68, 0xf0, 0xd9, 0x50, 0x27, 0xad, 0x38, 0xc0, 0x67, 0x91, 0x6b, 0xa0, 0xeb, 0x8c, 0x38, 0x89, 0x4d, 0x22, 0xe1, 0xb1, 0x56, 0x18, 0xb6, 0x81, 0x8a, 0x66, 0x17, 0x74, 0xad, 0x46, 0x3b, 0x20, 0x5d, 0xa8, 0x8c, 0xf6, 0x99, 0xab, 0x4d, 0x43, 0xc9, 0xcf, 0x98, 0xa1, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P384_VALUE01[] = { 0x98, 0x03, 0x80, 0x7f, 0x2f, 0x6d, 0x2f, 0xd9, 0x66, 0xcd, 0xd0, 0x29, 0x0b, 0xd4, 0x10, 0xc0, 0x19, 0x03, 0x52, 0xfb, 0xec, 0x7f, 0xf6, 0x24, 0x7d, 0xe1, 0x30, 0x2d, 0xf8, 0x6f, 0x25, 0xd3, 0x4f, 0xe4, 0xa9, 0x7b, 0xef, 0x60, 0xcf, 0xf5, 0x48, 0x35, 0x5c, 0x01, 0x5d, 0xbb, 0x3e, 0x5f, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P384_VALUE01[] = { 0xba, 0x26, 0xca, 0x69, 0xec, 0x2f, 0x5b, 0x5d, 0x9d, 0xad, 0x20, 0xcc, 0x9d, 0xa7, 0x11, 0x38, 0x3a, 0x9d, 0xbe, 0x34, 0xea, 0x3f, 0xa5, 0xa2, 0xaf, 0x75, 0xb4, 0x65, 0x02, 0x62, 0x9a, 0xd5, 0x4d, 0xd8, 0xb7, 0xd7, 0x3a, 0x8a, 0xbb, 0x06, 0xa3, 0xa3, 0xbe, 0x47, 0xd6, 0x50, 0xcc, 0x99, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P384_VALUE02[] = { 0xac, 0x68, 0xf1, 0x9f, 0x2e, 0x1c, 0xb8, 0x79, 0xae, 0xd4, 0x3a, 0x99, 0x69, 0xb9, 0x1a, 0x08, 0x39, 0xc4, 0xc3, 0x8a, 0x49, 0x74, 0x9b, 0x66, 0x1e, 0xfe, 0xdf, 0x24, 0x34, 0x51, 0x91, 0x5e, 0xd0, 0x90, 0x5a, 0x32, 0xb0, 0x60, 0x99, 0x2b, 0x46, 0x8c, 0x64, 0x76, 0x6f, 0xc8, 0x43, 0x7a, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P384_VALUE02[] = { 0xa7, 0xc7, 0x6b, 0x97, 0x0c, 0x3b, 0x5f, 0xe8, 0xb0, 0x5d, 0x28, 0x38, 0xae, 0x04, 0xab, 0x47, 0x69, 0x7b, 0x9e, 0xaf, 0x52, 0xe7, 0x64, 0x59, 0x2e, 0xfd, 0xa2, 0x7f, 0xe7, 0x51, 0x32, 0x72, 0x73, 0x44, 0x66, 0xb4, 0x00, 0x09, 0x1a, 0xdb, 0xf2, 0xd6, 0x8c, 0x58, 0xe0, 0xc5, 0x00, 0x66, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P521_VALUE01[] = { 0x00, 0x00, 0x01, 0xb7, 0xc8, 0x5f, 0x26, 0xf5, 0xd4, 0xb2, 0xd7, 0x35, 0x5c, 0xf6, 0xb0, 0x21, 0x17, 0x65, 0x99, 0x43, 0x76, 0x2b, 0x6d, 0x1d, 0xb5, 0xab, 0x4f, 0x1d, 0xbc, 0x44, 0xce, 0x7b, 0x29, 0x46, 0xeb, 0x6c, 0x7d, 0xe3, 0x42, 0x96, 0x28, 0x93, 0xfd, 0x38, 0x7d, 0x1b, 0x73, 0xd7, 0xa8, 0x67, 0x2d, 0x1f, 0x23, 0x69, 0x61, 0x17, 0x0b, 0x7e, 0xb3, 0x57, 0x99, 0x53, 0xee, 0x5c, 0xdc, 0x88, 0xcd, 0x2d, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P521_VALUE02[] = { 0x00, 0x00, 0x01, 0xba, 0x52, 0xc5, 0x6f, 0xc8, 0x77, 0x6d, 0x9e, 0x8f, 0x5d, 0xb4, 0xf0, 0xcc, 0x27, 0x63, 0x6d, 0x0b, 0x74, 0x1b, 0xbe, 0x05, 0x40, 0x06, 0x97, 0x94, 0x2e, 0x80, 0xb7, 0x39, 0x88, 0x4a, 0x83, 0xbd, 0xe9, 0x9e, 0x0f, 0x67, 0x16, 0x93, 0x9e, 0x63, 0x2b, 0xc8, 0x98, 0x6f, 0xa1, 0x8d, 0xcc, 0xd4, 0x43, 0xa3, 0x48, 0xb6, 0xc3, 0xe5, 0x22, 0x49, 0x79, 0x55, 0xa4, 0xf3, 0xc3, 0x02, 0xf6, 0x76, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P521_VALUE01[] = { 0x00, 0x00, 0x01, 0x7e, 0xec, 0xc0, 0x7a, 0xb4, 0xb3, 0x29, 0x06, 0x8f, 0xba, 0x65, 0xe5, 0x6a, 0x1f, 0x88, 0x90, 0xaa, 0x93, 0x5e, 0x57, 0x13, 0x4a, 0xe0, 0xff, 0xcc, 0xe8, 0x02, 0x73, 0x51, 0x51, 0xf4, 0xea, 0xc6, 0x56, 0x4f, 0x6e, 0xe9, 0x97, 0x4c, 0x5e, 0x68, 0x87, 0xa1, 0xfe, 0xfe, 0xe5, 0x74, 0x3a, 0xe2, 0x24, 0x1b, 0xfe, 0xb9, 0x5d, 0x5c, 0xe3, 0x1d, 0xdc, 0xb6, 0xf9, 0xed, 0xb4, 0xd6, 0xfc, 0x47, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P521_VALUE01[] = { 0x00, 0x00, 0x00, 0x60, 0x2f, 0x9d, 0x0c, 0xf9, 0xe5, 0x26, 0xb2, 0x9e, 0x22, 0x38, 0x1c, 0x20, 0x3c, 0x48, 0xa8, 0x86, 0xc2, 0xb0, 0x67, 0x30, 0x33, 0x36, 0x63, 0x14, 0xf1, 0xff, 0xbc, 0xba, 0x24, 0x0b, 0xa4, 0x2f, 0x4e, 0xf3, 0x8a, 0x76, 0x17, 0x46, 0x35, 0xf9, 0x1e, 0x6b, 0x4e, 0xd3, 0x42, 0x75, 0xeb, 0x01, 0xc8, 0x46, 0x7d, 0x05, 0xca, 0x80, 0x31, 0x5b, 0xf1, 0xa7, 0xbb, 0xd9, 0x45, 0xf5, 0x50, 0xa5, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P521_VALUE02[] = { 0x00, 0x00, 0x00, 0x68, 0x5a, 0x48, 0xe8, 0x6c, 0x79, 0xf0, 0xf0, 0x87, 0x5f, 0x7b, 0xc1, 0x8d, 0x25, 0xeb, 0x5f, 0xc8, 0xc0, 0xb0, 0x7e, 0x5d, 0xa4, 0xf4, 0x37, 0x0f, 0x3a, 0x94, 0x90, 0x34, 0x08, 0x54, 0x33, 0x4b, 0x1e, 0x1b, 0x87, 0xfa, 0x39, 0x54, 0x64, 0xc6, 0x06, 0x26, 0x12, 0x4a, 0x4e, 0x70, 0xd0, 0xf7, 0x85, 0x60, 0x1d, 0x37, 0xc0, 0x98, 0x70, 0xeb, 0xf1, 0x76, 0x66, 0x68, 0x77, 0xa2, 0x04, 0x6d, }; static const uint8_t TEE_ATTR_DH_PUBLIC_VALUE_VALUE02[] = { 0xa3, 0xf5, 0x7d, 0xbe, 0x9e, 0x2f, 0x0a, 0xda, 0xa9, 0x4e, 0x4e, 0x6a, 0xf0, 0xe0, 0x71, 0x47, 0x0e, 0x2e, 0x41, 0x2e, 0xde, 0x73, 0x2a, 0x62, 0x14, 0xc3, 0x7c, 0x26, 0xd4, 0xe9, 0x9a, 0x54, 0xba, 0x3d, 0xe7, 0x49, 0x85, 0x95, 0x0e, 0xe9, 0x14, 0xb2, 0x90, 0x22, 0x91, 0xdc, 0xff, 0x61, 0xb2, 0xfc, 0xd1, 0xd0, 0x1b, 0x11, 0x14, 0xb6, 0x02, 0x64, 0x2b, 0x26, 0x5d, 0x88, 0xea, 0x8d, 0xbb, 0xe2, 0x07, 0x0b, 0x48, 0xfb, 0x01, 0x53, 0x55, 0x1e, 0x59, 0x51, 0x36, 0xf2, 0xf9, 0xd1, 0x97, 0xfb, 0x66, 0x12, 0x84, 0x5d, 0xed, 0xb8, 0x9b, 0x2d, 0x3e, 0x2b, 0x8c, 0xeb, 0x2a, 0x72, 0x40, 0x9d, 0x55, 0x4c, 0xed, 0xeb, 0x55, 0x02, 0xff, 0x8c, 0xb0, 0x2e, 0x03, 0x65, 0x3f, 0x41, 0xb1, 0xac, 0xa3, 0x30, 0x6b, 0xff, 0x6d, 0xf4, 0x6d, 0xe6, 0xe1, 0x0f, 0x86, 0x7c, 0x43, 0x64, }; /*ALL_CRYPTO_AAD_VALUES*/ static const uint8_t AAD1_VALUE[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; /*ALL_CRYPTO_AAD_LENGTHS*/ #define AAD1_LENGTH 8 #define NULL_LENGTH 0 /*ALL_TEE_CRYPTO_INITIALISATION_VECTOR_VALUES*/ static const uint8_t NONCE2_VALUE_AES_GCM[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88 }; static const uint8_t NONCE1_VALUE_AES_CCM[] = { 0x00, 0x8D, 0x49, 0x3B, 0x30, 0xAE, 0x8B, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA }; /*ALL_TEE_CRYPTO_INITIALISATION_VECTOR_LENGTHS*/ #define NONCE2_LENGTH_AES_GCM 12 #define NONCE1_LENGTH_AES_CCM 13 /*ALL_CRYPTO_DATA_VALUE*/ static const uint8_t DATA_ALL_ZEROES[4096]; static const uint8_t DATA_FOR_CRYPTO1[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 }; static const uint8_t DATA_FOR_CRYPTO1_PART1[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 }; static const uint8_t DATA_FOR_CRYPTO1_PART2[] = { 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; static const uint8_t DATA_FOR_CRYPTO1_PART3[] = { 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 }; static const uint8_t DATA_FOR_CRYPTO2_LENGTH_NOT_MULTIPLE_OF_128_BITS[] = { 0x00, 0x01, 0x02, 0x03, }; static const uint8_t DATA_FOR_CRYPTO3_LENGTH_NOT_MULTIPLE_OF_64_BITS[] = { 0x00, 0x01, 0x02, 0x03, }; /*ALL_CRYPTO_DATA_LENGTH*/ #define LENGTH_DATA_FOR_CRYPTO1 96 #define LENGTH_DATA_FOR_CRYPTO1_PART1 32 #define LENGTH_DATA_FOR_CRYPTO1_PART2 32 #define LENGTH_DATA_FOR_CRYPTO1_PART3 32 #define LENGTH_DATA_FOR_CRYPTO2 4 #define LENGTH_DATA_FOR_CRYPTO3 4 #define RSAES_PKCS1_OAEP_MGF1_SHA1_ENC_INVALID_LENGTH_MOD_2048 215 #define RSAES_PKCS1_OAEP_MGF1_SHA224_ENC_INVALID_LENGTH_MOD_2048 199 #define RSAES_PKCS1_OAEP_MGF1_SHA256_ENC_INVALID_LENGTH_MOD_2048 191 #define RSAES_PKCS1_OAEP_MGF1_SHA384_ENC_INVALID_LENGTH_MOD_2048 159 #define RSAES_PKCS1_OAEP_MGF1_SHA512_ENC_INVALID_LENGTH_MOD_2048 127 #define RSAES_PKCS1_V1_5_ENC_INVALID_LENGTH_MOD_2048 246 /*ALL_TEE_CRYPTO_INITIALISATION_VECTOR_VALUES*/ static const uint8_t IV1_VALUE_64bits_DES_DES3[] = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef }; static const uint8_t IV2_VALUE_128bits_AES[] = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef }; static const uint8_t IV_INVALID_LENGTH_VALUE[] = { 0x01, 0x02, 0x03, 0x04, 0x05 }; /*ALL_TEE_CRYPTO_INITIALISATION_VECTOR_LENGTHS*/ #define IV_LENGTH_NULL 0 #define IV_INVALID_LENGTH 5 #define IV1_LENGTH_64bits_DES_DES3 8 #define IV2_LENGTH_128bits_AES 16 static const uint8_t *TEE_ATTR_VALUE_NONE; /*ALL_TEE_BUFFER_CASES*/ #define INPUT_BUFFER_NORMAL 5 #define INPUT_BUFFER_TOO_SHORT 4 #define OUTPUT_BUFFER_NORMAL 1 #define OUTPUT_BUFFER_TOO_SHORT 2 #define TAG_BUFFER_TOO_SHORT 3 enum signature_validity { INVALID_SIGNATURE = 0, VALID_SIGNATURE }; enum mac_validity { INVALID_MAC = 0, VALID_MAC }; struct crypto_buffer { uint8_t *buffer; uint32_t size; }; /*Saved in Invoke_Crypto_AllocateOperation*/ struct crypto_op { uint32_t algo; uint32_t mode; uint32_t obj_size; }; struct crypto_op saved_alloc; /*Saved in Invoke_Crypto_InitObjectWithKeys*/ struct key_val { uint32_t obh; uint32_t obj_type; uint32_t obj_size; struct crypto_buffer key; }; struct key_val saved_key_vals; /*Saved in Invoke_Crypto_SetOperationKey*/ struct obh_val { uint32_t oph; uint32_t obh; }; struct obh_val saved_obh1; /*Saved in Invoke_Crypto_SetOperationKey2*/ struct obh_val2 { uint32_t oph; uint32_t obh1; uint32_t obh2; }; struct obh_val2 saved_obh; /*saved by Invoke_Crypto_AEUpdateAAD*/ struct crypto_buffer saved_aad_value; /*Saved in Invoke_Crypto_AEEncryptFinal*/ struct crypto_buffer ae_encrypt_tag; /*Saved in Invoke_Crypto_AEUpdate_for_encryption*/ struct crypto_buffer buffer_encrypted_chunks[4]; /*Saved in Invoke_Crypto_AEUpdate_for_Decryption*/ struct crypto_buffer buffer_decrypted_chunks[4]; /*filled with data in Invoke_Crypto_AsymmetricEncrypt*/ struct crypto_buffer buffer_asym_encrypted; /*saved by Invoke_Crypto_AEInit*/ struct crypto_buffer saved_in_nonce; /*Saved in Invoke_Crypto_DeriveKey*/ struct obh_val saved_derive; /*Saved in Invoke_Crypto_GenerateRandom*/ struct crypto_buffer saved_random; /*Saved in Invoke_Crypto_DigestDoFinal*/ struct crypto_buffer saved_digest; /*Saved in Invoke_Crypto_MACInit*/ struct crypto_buffer saved_mac_iv; /*Saved in Invoke_Crypto_CipherInit*/ struct crypto_buffer saved_cipher_iv; /*Saved in Invoke_Crypto_CipherUpdate*/ struct crypto_buffer saved_cipher_update; static const void *saved_key_pub_attr[3]; static TEE_OperationInfo saved_op_info; static uint32_t s_saved_op_mult_info[64 / sizeof(uint32_t)]; static TEE_OperationInfoMultiple *saved_op_mult_info = (TEE_OperationInfoMultiple *)s_saved_op_mult_info; TEEC_UUID UUID_TTA_testingInternalAPI_crypto = { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x43, 0x52, 0x59, 0x50, 0x54, 0x4F, 0x31 } }; static void crypto_reset(void) { saved_obh.oph = 0; saved_obh.obh1 = 0; saved_obh.obh2 = 0; saved_alloc.algo = 0; saved_alloc.mode = 0; saved_alloc.obj_size = 0; saved_key_vals.obh = 0; saved_key_vals.obj_size = 0; saved_key_vals.obj_type = 0; CRYPTO_FREE(saved_key_vals.key); CRYPTO_FREE(saved_aad_value); CRYPTO_FREE(ae_encrypt_tag); /*4 chunks*/ CRYPTO_FREE(buffer_encrypted_chunks[0]); CRYPTO_FREE(buffer_encrypted_chunks[1]); CRYPTO_FREE(buffer_encrypted_chunks[2]); CRYPTO_FREE(buffer_encrypted_chunks[3]); /*4 chunks*/ CRYPTO_FREE(buffer_decrypted_chunks[0]); CRYPTO_FREE(buffer_decrypted_chunks[1]); CRYPTO_FREE(buffer_decrypted_chunks[2]); CRYPTO_FREE(buffer_decrypted_chunks[3]); CRYPTO_FREE(buffer_asym_encrypted); CRYPTO_FREE(saved_in_nonce); CRYPTO_FREE(saved_random); CRYPTO_FREE(saved_digest); CRYPTO_FREE(saved_cipher_iv); CRYPTO_FREE(saved_cipher_update); memset(&saved_op_info, 0, sizeof(saved_op_info)); memset(s_saved_op_mult_info, 0, sizeof(s_saved_op_mult_info)); } static TEEC_Result calculate_digest(ADBG_Case_t *c, const void *data, size_t data_length, struct crypto_buffer *digest); static TEEC_Result sign_digest(ADBG_Case_t *c, const struct crypto_buffer *in_dgst, struct crypto_buffer *out_dgst); static bool verify_digest(ADBG_Case_t *c, const struct crypto_buffer *in_sdgst); static TEEC_Result mac_compute_final(ADBG_Case_t *c, TEEC_Session *s, const void *full_data, size_t fdata_length, struct crypto_buffer *mac); static TEEC_Result cipher_do_final(ADBG_Case_t *c, TEEC_Session *s, const void *full_data, size_t fdata_length, struct crypto_buffer *cipher); static void collapse_crypto_buffers(struct crypto_buffer *in_buffer, struct crypto_buffer *out_buffer) { int id; uint8_t *tmp; out_buffer->size = 0; for (id = 0; id < 4; id++) out_buffer->size += in_buffer[id].size; out_buffer->buffer = malloc(out_buffer->size); tmp = out_buffer->buffer; for (id = 0; id < 4; id++) { if (in_buffer[id].buffer) { memcpy(tmp, in_buffer[id].buffer, in_buffer[id].size); tmp += in_buffer[id].size; } } } static TEEC_Result Invoke_Crypto_AllocateOperation(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t algo, uint32_t mode, size_t obj_size1, size_t obj_size2, uint32_t op_handle) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; op.params[0].value.a = algo; op.params[0].value.b = mode; if (obj_size1 > obj_size2) op.params[1].value.a = obj_size1; else op.params[1].value.a = obj_size2; op.params[3].value.a = op_handle; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_VALUE_INPUT); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (!res) { saved_alloc.algo = algo; saved_alloc.mode = mode; saved_alloc.obj_size = op.params[1].value.a; } return res; } static TEEC_Result Invoke_Crypto_GetOperationInfo(ADBG_Case_t *c , TEEC_Session *s, uint32_t cmd, uint32_t op_handle) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = op_handle; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INOUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (!res) saved_op_info = (TEE_OperationInfo){ .algorithm = op.params[0].value.a, .operationClass = op.params[0].value.b, .mode = op.params[1].value.a, .digestLength = op.params[1].value.b, .maxKeySize = op.params[2].value.a, .keySize = op.params[2].value.b, .requiredKeyUsage = op.params[3].value.a, .handleState = op.params[3].value.b, }; return res; } static uint32_t get_be32(const uint8_t *b) { return ((uint32_t)b[0] << 24) | ((uint32_t)b[1] << 16) | ((uint32_t)b[2] << 8) | b[3]; } static TEEC_Result Invoke_Crypto_GetOperationInfoMultiple(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, uint32_t max_num_keys) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; TEEC_SharedMemory shm = { .size = 64, .flags = TEEC_MEM_OUTPUT, }; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, max_num_keys, <=, 2)) return TEEC_ERROR_BAD_PARAMETERS; res = TEEC_AllocateSharedMemory(s->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; op.params[0].value.a = op_handle; op.params[0].value.b = max_num_keys; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, &shm, shm.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &org); if (!res) { uint8_t *b = shm.buffer; TEE_OperationInfoMultiple *d = saved_op_mult_info; size_t n = 0; memset(s_saved_op_mult_info, 0, sizeof(s_saved_op_mult_info)); d->algorithm = get_be32(b); d->operationClass = get_be32(b + 4); d->mode = get_be32(b + 8); d->digestLength = get_be32(b + 12); d->maxKeySize = get_be32(b + 16); d->handleState = get_be32(b + 20); d->operationState = get_be32(b + 24); d->numberOfKeys = get_be32(b + 28); for (n = 0; n < d->numberOfKeys; n++) { d->keyInformation[n].keySize = get_be32(b + 32 + n * 8); d->keyInformation[n].requiredKeyUsage = get_be32(b + 36 + n * 8); } } TEEC_ReleaseSharedMemory(&shm); return res; } #define Check_0_OperationInfoMultiple(c, _algorithm, _operationClass, _mode, \ _digestLength, _maxKeySize_object1, \ _maxKeySize_object2, _handleState, \ _operationState, _numberOfKeys) \ do { \ ADBG_EXPECT(c, _algorithm, saved_op_mult_info->algorithm); \ ADBG_EXPECT(c, _operationClass, \ saved_op_mult_info->operationClass); \ ADBG_EXPECT(c, _mode, saved_op_mult_info->mode); \ ADBG_EXPECT(c, _digestLength, \ saved_op_mult_info->digestLength); \ ADBG_EXPECT(c, MAX(_maxKeySize_object1, _maxKeySize_object2), \ saved_op_mult_info->maxKeySize); \ ADBG_EXPECT(c, _handleState, saved_op_mult_info->handleState); \ ADBG_EXPECT(c, _operationState, \ saved_op_mult_info->operationState); \ ADBG_EXPECT(c, _numberOfKeys, \ saved_op_mult_info->numberOfKeys); \ } while (0) #define Check_1_OperationInfoKey(c, _keyIndex, _keySize, _requiredKeyUsage) \ do { \ if (ADBG_EXPECT_COMPARE_UNSIGNED(c, _keyIndex, <, saved_op_mult_info->numberOfKeys)) { \ ADBG_EXPECT(c, _keySize, saved_op_mult_info->keyInformation[_keyIndex].keySize); \ ADBG_EXPECT(c, _requiredKeyUsage, saved_op_mult_info->keyInformation[_keyIndex].requiredKeyUsage); \ } \ } while (0) #define Check_OperationInfo(c, _algorithm, _operationClass, _mode, \ _digestLength, _maxKeySize_object1, \ _maxKeySize_object2, _keySize, _requiredKeyUsage, \ _handleFlags) \ do { \ ADBG_EXPECT(c, _algorithm, saved_op_info.algorithm); \ ADBG_EXPECT(c, _operationClass, saved_op_info.operationClass); \ ADBG_EXPECT(c, _mode, saved_op_info.mode); \ ADBG_EXPECT(c, _digestLength, saved_op_info.digestLength); \ ADBG_EXPECT(c, MAX(_maxKeySize_object1, _maxKeySize_object2), \ saved_op_info.maxKeySize); \ ADBG_EXPECT(c, _keySize, saved_op_info.keySize); \ ADBG_EXPECT(c, _requiredKeyUsage, \ saved_op_info.requiredKeyUsage); \ ADBG_EXPECT(c, _handleFlags, saved_op_info.handleState); \ ADBG_EXPECT(c, _algorithm, saved_op_info.algorithm); \ } while (0) static TEEC_Result Invoke_Crypto_ResetOperation(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle) { return Invoke_Simple_Function_v1(c, s, cmd, op_handle, 0); } static TEEC_Result Invoke_Crypto_FreeAllKeysAndOperations(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle) { return Invoke_Simple_Function_v1(c, s, cmd, op_handle, 0); } static TEEC_Result add_be32(uint32_t v, TEEC_SharedMemory *shm, size_t *offs) { uint8_t *d = (uint8_t *)shm->buffer + *offs; size_t n = sizeof(uint32_t); if (*offs + n > shm->size) return TEEC_ERROR_EXCESS_DATA; (*offs) += n; while (n) { n--; d[n] = v; v >>= 8; } return TEEC_SUCCESS; } static TEEC_Result add_attr(uint32_t id, const void *v, uint32_t sz, TEEC_SharedMemory *shm1, size_t *offs_1, TEEC_SharedMemory *shm2, size_t *offs_2) { TEEC_Result res = TEEC_SUCCESS; uint32_t vid = 0; uint32_t voffs = 0; uint32_t vsz = 0; if (id == TEE_ATTR_NONE) goto out; vid = id; voffs = *offs_2; vsz = sz; if (*offs_2 + sz > shm2->size) return TEEC_ERROR_EXCESS_DATA; memcpy((uint8_t *)shm2->buffer + *offs_2, v, sz); (*offs_2) += sz; out: res = add_be32(vid, shm1, offs_1); if (res) return res; res = add_be32(voffs, shm1, offs_1); if (res) return res; return add_be32(vsz, shm1, offs_1); } static TEEC_Result Invoke_Crypto_InitObjectWithKeys(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t obj_type, uint32_t obj_size, uint32_t id1, const void *v1, uint32_t sz1, uint32_t id2, const void *v2, uint32_t sz2, uint32_t id3, const void *v3, uint32_t sz3, uint32_t id4, const void *v4, uint32_t sz4, uint32_t id5, const void *v5, uint32_t sz5, uint32_t obj_handle) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_SUCCESS; uint32_t org = 0; size_t offs1 = 0; size_t offs2 = 0; TEEC_SharedMemory shm1 = { .size = BIG_SIZE, .flags = TEEC_MEM_INPUT, }; TEEC_SharedMemory shm2 = { .size = DS_BIG_SIZE, .flags = TEEC_MEM_INPUT, }; res = TEEC_AllocateSharedMemory(s->imp.ctx, &shm1); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; res = TEEC_AllocateSharedMemory(s->imp.ctx, &shm2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out_free_shm1; res = add_attr(id1, v1, sz1, &shm1, &offs1, &shm2, &offs2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out_free_shm2; res = add_attr(id2, v2, sz2, &shm1, &offs1, &shm2, &offs2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out_free_shm2; res = add_attr(id3, v3, sz3, &shm1, &offs1, &shm2, &offs2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out_free_shm2; res = add_attr(id4, v4, sz4, &shm1, &offs1, &shm2, &offs2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out_free_shm2; res = add_attr(id5, v5, sz5, &shm1, &offs1, &shm2, &offs2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out_free_shm2; op.params[0].value.a = obj_type; op.params[0].value.b = obj_size; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, &shm1, offs1); SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, &shm2, offs2); op.params[3].value.a = obj_handle; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_VALUE_INPUT); res = TEEC_InvokeCommand(s, cmd, &op, &org); if (!res) saved_key_pub_attr[obj_handle] = v1; out_free_shm2: TEEC_ReleaseSharedMemory(&shm2); out_free_shm1: TEEC_ReleaseSharedMemory(&shm1); return res; } static TEEC_Result Invoke_Crypto_InitObjectWithKeysExt(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t obj_type, uint32_t obj_size, uint32_t id1, const void *v1, uint32_t sz1, uint32_t id2, const void *v2, uint32_t sz2, uint32_t id3, const void *v3, uint32_t sz3, uint32_t id4, const void *v4, uint32_t sz4, uint32_t id5, const void *v5, uint32_t sz5, uint32_t obj_handle) { return Invoke_Crypto_InitObjectWithKeys(c, s, cmd, obj_type, obj_size, id1, v1, sz1, id2, v2, sz2, id3, v3, sz3, id4, v4, sz4, id5, v5, sz5, obj_handle); } static TEEC_Result Invoke_Crypto_SetOperationKey(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, uint32_t obj_handle) { TEEC_Result res = Invoke_Simple_Function_v1(c, s, cmd, op_handle, obj_handle); if (!res) { saved_obh.oph = op_handle; saved_obh.obh1 = obj_handle; saved_obh.obh2 = TEE_HANDLE_NULL; } return res; } static TEEC_Result Invoke_Crypto_SetOperationKey2(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, uint32_t obj_handle1, uint32_t obj_handle2) { TEEC_Result res = Invoke_Simple_Function_v2(c, s, cmd, op_handle, obj_handle1, obj_handle2, 0); if (!res) { saved_obh.oph = op_handle; saved_obh.obh1 = obj_handle1; saved_obh.obh2 = obj_handle2; } return res; } static TEEC_Result Invoke_Crypto_DeriveKey(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, uint32_t attribute_list, uint32_t obj_handle) { uint32_t attr1 = ATTRIBUTE_NONE; uint32_t attr2 = ATTRIBUTE_NONE; uint32_t n = 0; for (n = 0; n <= ATTRIBUTE_06 && attr2 == ATTRIBUTE_NONE; n++) { if (BIT(n) & attribute_list) { if (attr1 == ATTRIBUTE_NONE) attr1 = n; else attr2 = n; } } return Invoke_Simple_Function_v2(c, s, cmd, op_handle, obj_handle, attr1, attr2); } static TEEC_Result Invoke_Crypto_AEInit(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *nonce_val, size_t nonce_length, uint32_t tag_len, uint32_t aad_len, uint32_t payload_len) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; TEEC_SharedMemory shm = { .size = nonce_length, .flags = TEEC_MEM_INPUT, }; res = TEEC_AllocateSharedMemory(s->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; memcpy(shm.buffer, nonce_val, nonce_length); op.params[0].value.a = op_handle; op.params[0].value.b = tag_len; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, &shm, nonce_length); op.params[2].value.a = aad_len; op.params[2].value.b = payload_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_VALUE_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &org); TEEC_ReleaseSharedMemory(&shm); return res; } static TEEC_Result Invoke_Crypto_AEUpdate_for_encryption(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *part_data, uint32_t partd_length, uint32_t case_buf, uint32_t chunk_id) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; size_t initial_size; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, DS_BIG_SIZE, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = op_handle; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) /*if $IN_caseBuffer$ = OUTPUT_BUFFER_TOO_SHORT(2) then Param[3].memref.size=1 */ if (case_buf == OUTPUT_BUFFER_TOO_SHORT) { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) } else { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &org); /* Store the buffer from "shm2" in * "buffer_encrypted_chunks[$IN_chunkNumber$]" * which will be reused for the * Invoke_Crypto_TEE_AEUpdate_for_decryption function */ if (res == TEEC_SUCCESS) { buffer_encrypted_chunks[chunk_id].size = op.params[3].memref.size; buffer_encrypted_chunks[chunk_id].buffer = malloc( buffer_encrypted_chunks[chunk_id].size); memcpy(buffer_encrypted_chunks[chunk_id].buffer, SHARE_MEM02->buffer, buffer_encrypted_chunks[chunk_id].size); } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_AEUpdate_for_decryption(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *part_data, size_t partd_length, uint32_t case_buf, uint32_t chunk_id) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, buffer_encrypted_chunks[chunk_id].size, TEEC_MEM_INPUT, buffer_encrypted_chunks[chunk_id].size, buffer_encrypted_chunks[chunk_id]. buffer, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, partd_length, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = op_handle; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, partd_length) /*if $IN_caseBuffer$ = OUTPUT_BUFFER_TOO_SHORT(2) then Param[3].memref.size=1*/ if (case_buf == OUTPUT_BUFFER_TOO_SHORT) { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) } else { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); /* Save the buffer from "SharedMem2" into * "buffer_decrypted_chunks[$IN_chunkNumber$]" * in order to collapse all buffers returned for * AEUpdate_for_decryption, * which will be used in AEDecryptFinal */ if (res == TEEC_SUCCESS) { if (!ADBG_EXPECT_BUFFER(c, part_data, partd_length, SHARE_MEM02->buffer, op.params[3].memref.size)) res = TEEC_ERROR_GENERIC; buffer_decrypted_chunks[chunk_id].size = op.params[3].memref.size; buffer_decrypted_chunks[chunk_id].buffer = malloc( buffer_decrypted_chunks[chunk_id].size); memcpy(buffer_decrypted_chunks[chunk_id].buffer, SHARE_MEM02->buffer, buffer_decrypted_chunks[chunk_id].size); } TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_AEUpdateAAD(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *aad_data, size_t aad_length) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, aad_length, TEEC_MEM_INPUT, aad_length, aad_data, mem01_exit) op.params[0].value.a = op_handle; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); /* Save the $IN_AAD_Value$ for AAD for later cryptographic computation */ if (res == TEEC_SUCCESS) { saved_aad_value.buffer = malloc(aad_length); saved_aad_value.size = aad_length; memcpy(saved_aad_value.buffer, aad_data, aad_length); } TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_AEEncryptFinal(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *part_data, size_t partd_length, const void *full_data, size_t fdata_length, uint32_t case_buf, uint32_t chunk_id) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_partd_size, initial_fdata_size; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, partd_length, TEEC_MEM_OUTPUT, mem02_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM03, partd_length, TEEC_MEM_OUTPUT, mem03_exit) op.params[0].value.a = op_handle; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) switch (case_buf) { case OUTPUT_BUFFER_TOO_SHORT: /*if $IN_caseBuffer$ = OUTPUT_BUFFER_TOO_SHORT(2) then Param[3].memref.size=1*/ SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, SHARE_MEM03, SHARE_MEM03->size) SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) break; case TAG_BUFFER_TOO_SHORT: SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, SHARE_MEM03, 1) SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) break; case OUTPUT_BUFFER_NORMAL: default: SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, SHARE_MEM03, SHARE_MEM03->size) SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) break; } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_MEMREF_PARTIAL_OUTPUT); initial_partd_size = op.params[2].memref.size; initial_fdata_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res == TEEC_SUCCESS) { /* Store the buffer from "shm2" in * "buffer_encrypted_chunks[$IN_chunkNumber$]" * which will be reused for * the Invoke_Crypto_TEE_AEDecryptFinal function */ buffer_encrypted_chunks[chunk_id].size = op.params[3].memref.size; buffer_encrypted_chunks[chunk_id].buffer = malloc( buffer_encrypted_chunks[chunk_id].size); memcpy(buffer_encrypted_chunks[chunk_id].buffer, SHARE_MEM02->buffer, buffer_encrypted_chunks[chunk_id].size); /* Store the tag from "SharedMem3" which will be reused for the * Invoke_Crypto_TEE_AEDecryptFinal function */ ae_encrypt_tag.size = op.params[2].memref.size; ae_encrypt_tag.buffer = malloc(ae_encrypt_tag.size); memcpy(ae_encrypt_tag.buffer, SHARE_MEM03->buffer, ae_encrypt_tag.size); } else if (res == TEEC_ERROR_SHORT_BUFFER) { if (initial_partd_size == op.params[2].memref.size) ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_fdata_size, <, op.params[3].memref.size); else ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_partd_size, <, op.params[2].memref.size); } TEEC_ReleaseSharedMemory(SHARE_MEM03); mem03_exit: TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_AEDecryptFinal(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *part_data, size_t partd_length, const void *full_data, size_t fdata_length, uint32_t case_buf, enum mac_validity mac_case, uint32_t chunk_id) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_size; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, buffer_encrypted_chunks[chunk_id].size, TEEC_MEM_INPUT, buffer_encrypted_chunks[chunk_id].size, buffer_encrypted_chunks[chunk_id]. buffer, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, partd_length, TEEC_MEM_OUTPUT, mem02_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM03, ae_encrypt_tag.size, TEEC_MEM_INPUT, mem03_exit) /* Fill "SharedMem3" with the tag previously * saved in Invoke_Crypto_AEEncryptFinal * (with an error (one bit changed) if $IN_caseMac$ = INVALID_MAC) */ if (ae_encrypt_tag.buffer != NULL) { memcpy(SHARE_MEM03->buffer, ae_encrypt_tag.buffer, ae_encrypt_tag.size); if (mac_case == INVALID_MAC) BIT_CHANGE(*(uint32_t *)SHARE_MEM03->buffer, 4); } op.params[0].value.a = op_handle; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, SHARE_MEM03, SHARE_MEM03->size) /*if $IN_caseBuffer$ = OUTPUT_BUFFER_TOO_SHORT(2) then Param[3].memref.size=1*/ if (case_buf == OUTPUT_BUFFER_TOO_SHORT) { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) } else { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res == TEEC_SUCCESS) { /* Save the buffer from "SharedMem2" to * "buffer_decrypted_chunks[$IN_chunkNumber$]" */ buffer_decrypted_chunks[chunk_id].size = op.params[3].memref.size; buffer_decrypted_chunks[chunk_id].buffer = malloc( buffer_decrypted_chunks[chunk_id].size); memcpy(buffer_decrypted_chunks[chunk_id].buffer, SHARE_MEM02->buffer, buffer_decrypted_chunks[chunk_id].size); /* Compare the data in clear $IN_fullDataValue$ and with * collapsed buffers from table * "buffer_decrypted_chunks" and check they are equals */ struct crypto_buffer collapsed; CRYPTO_INIT(collapsed); collapse_crypto_buffers(buffer_decrypted_chunks, &collapsed); ADBG_EXPECT_BUFFER(c, full_data, fdata_length, collapsed.buffer, collapsed.size); CRYPTO_FREE(collapsed); } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } TEEC_ReleaseSharedMemory(SHARE_MEM03); mem03_exit: TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_GenerateRandom(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, BIG_SIZE, TEEC_MEM_OUTPUT, mem01_exit) SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); /* Check that the buffer shm1 is not empty * + Check that this random value is * different of a previous call of this command */ if (res == TEEC_SUCCESS) { if (ADBG_EXPECT_COMPARE_SIGNED(c, 0, !=, op.params[3].memref.size)) { if (saved_random.buffer != NULL) { (void)ADBG_EXPECT_COMPARE_SIGNED(c, 0, !=, memcmp( SHARE_MEM01 -> buffer, saved_random . buffer, op. params[3]. memref. size)); free(saved_random.buffer); saved_random.size = 0; } saved_random.size = op.params[3].memref.size; saved_random.buffer = malloc(saved_random.size); memcpy(saved_random.buffer, SHARE_MEM01->buffer, saved_random.size); } } TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_DigestUpdate(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *part_data, size_t partd_length) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) op.params[0].value.a = op_handle; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_DigestDoFinal(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *part_data, size_t partd_length, const void *full_data, size_t fdata_length, uint32_t case_buf) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_size; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, fdata_length, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = op_handle; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) if (case_buf == OUTPUT_BUFFER_TOO_SHORT) { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) } else { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res == TEEC_SUCCESS) { /* Compute the hash of $IN_fullDataValue$ * and compare it to "shm2" */ struct crypto_buffer tmp_dgst; CRYPTO_INIT(tmp_dgst); ADBG_EXPECT_TEEC_SUCCESS(c, res = calculate_digest(c, full_data, fdata_length, &tmp_dgst)); ADBG_EXPECT_BUFFER(c, tmp_dgst.buffer, tmp_dgst.size, SHARE_MEM02->buffer, tmp_dgst.size); /* Store the Digest value which can be reused for a next call to * TEE_AsymmetricSignDigest or TEE_AsymmetricVerifyDigest */ CRYPTO_FREE(saved_digest); saved_digest.size = op.params[3].memref.size; saved_digest.buffer = malloc(saved_digest.size); memcpy(saved_digest.buffer, SHARE_MEM02->buffer, saved_digest.size); CRYPTO_FREE(tmp_dgst); } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_AsymmetricSignDigest(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *full_data, size_t fdata_length, uint32_t case_buf) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_size; size_t sz; /* Fill SharedMem1 with the previously stored Digest value after TEE_DigestDoFinal */ ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, saved_digest.size, TEEC_MEM_INPUT, saved_digest.size, saved_digest.buffer, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, 512, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = oph; sz = SHARE_MEM01->size; if (case_buf == INPUT_BUFFER_TOO_SHORT) sz--; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, sz) if (case_buf == OUTPUT_BUFFER_TOO_SHORT) sz = 1; else sz = SHARE_MEM02->size; SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, sz) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res == TEEC_SUCCESS) { /* Compute a Verify_Signature of the signature * store under "SharedMem2" */ struct crypto_buffer s_dgst; CRYPTO_INIT(s_dgst); s_dgst.size = op.params[3].memref.size; s_dgst.buffer = malloc(s_dgst.size); memcpy(s_dgst.buffer, SHARE_MEM02->buffer, s_dgst.size); ADBG_EXPECT(c, true, verify_digest(c, &s_dgst)); CRYPTO_FREE(s_dgst); } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_AsymmetricVerifyDigest(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *full_data, size_t fdata_length, uint32_t buffer_case, uint32_t valid_sig) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; uint32_t dec_input = 0; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, fdata_length, TEEC_MEM_INPUT, saved_digest.size, saved_digest.buffer, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, 512, TEEC_MEM_INPUT, mem02_exit) struct crypto_buffer signed_dgst; CRYPTO_INIT(signed_dgst); res = sign_digest(c, &saved_digest, &signed_dgst); /* Fill "SharedMem2" with the valid computed signature based on * the previously stored Digest value after TEE_DigestDoFinal */ if (signed_dgst.buffer != NULL) { memcpy(SHARE_MEM02->buffer, signed_dgst.buffer, signed_dgst.size); if (valid_sig != VALID_SIGNATURE) { /*make it invalid*/ BIT_CHANGE(*(uint32_t *)SHARE_MEM02->buffer, 4); } } if (buffer_case == INPUT_BUFFER_TOO_SHORT) dec_input = 1; op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, saved_digest.size - dec_input) SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, signed_dgst.size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_INPUT); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); CRYPTO_FREE(signed_dgst); TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_AsymmetricEncrypt(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *full_data, size_t fdata_length, uint32_t case_buf) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_size; /* Fill SharedMem1 with full_data */ ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, fdata_length, TEEC_MEM_INPUT, fdata_length, full_data, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, 512, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) /*if $IN_caseBuffer$ = OUTPUT_BUFFER_TOO_SHORT(2) then Param[3].memref.size=1*/ if (case_buf == OUTPUT_BUFFER_TOO_SHORT) { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) } else { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res == TEEC_SUCCESS) { /* Check that "SharedMem2" is not empty * Store the value from "SharedMem2" to a * "buffer_asym_encrypted", * which will be reused in Invoke_Crypto_AsymmetricDecrypt */ if (ADBG_EXPECT_COMPARE_SIGNED(c, 0, !=, op.params[3].memref.size)) { buffer_asym_encrypted.size = op.params[3].memref.size; buffer_asym_encrypted.buffer = malloc( buffer_asym_encrypted.size); memcpy(buffer_asym_encrypted.buffer, SHARE_MEM02->buffer, buffer_asym_encrypted.size); } } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_AsymmetricDecrypt(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t op_handle, const void *full_data, size_t fdata_length, uint32_t case_buf) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_size; const char *expected_res; size_t expected_size; size_t sz; /* Fill SharedMem1 with buffer_asym_encrypted */ ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, buffer_asym_encrypted.size, TEEC_MEM_INPUT, buffer_asym_encrypted.size, buffer_asym_encrypted.buffer, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, 512, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = op_handle; sz = buffer_asym_encrypted.size; if (case_buf == INPUT_BUFFER_TOO_SHORT) sz--; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, sz); if (case_buf == OUTPUT_BUFFER_TOO_SHORT) sz = 1; else sz = SHARE_MEM02->size; SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, sz); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); expected_res = full_data; expected_size = fdata_length; if (saved_alloc.algo == TEE_ALG_RSA_NOPAD) { /* * According to GP 1.1, no pad encrypting TEE_ALG_RSA_NOPAD * follows "PKCS #1 (RSA primitive)", as stated in * ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf * Page 10, it is stated that RSA primitives RSAEP and RSADP * outputs "an integer between 0 and n-1". Hence the * leading 0s must not be taken into account when checking * the reference */ while (expected_size && expected_res[0] == 0) { expected_size--; expected_res++; } } if (res == TEEC_SUCCESS) { /* Compare the clear data in * $IN_fullDataValue$ with "SharedMem2" * and check they are equal */ ADBG_EXPECT_BUFFER(c, expected_res, expected_size, SHARE_MEM02->buffer, op.params[3].memref.size); } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_CopyOperation(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t dst_oph, uint32_t src_oph) { return Invoke_Simple_Function_v1(c, s, cmd, dst_oph, src_oph); } static TEEC_Result Invoke_Crypto_MACInit( ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *iv, size_t iv_len) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM06, iv_len, TEEC_MEM_INPUT, iv_len, iv, mem06_exit) op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM06, iv_len) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); /* save the $IN_InitialisationVector$ for * later computation of encryptedData */ if (iv_len != 0) { CRYPTO_FREE(saved_mac_iv); saved_mac_iv.size = iv_len; saved_mac_iv.buffer = malloc(iv_len); memcpy(saved_mac_iv.buffer, iv, iv_len); } TEEC_ReleaseSharedMemory(SHARE_MEM06); mem06_exit: return res; } /*CMD_MACUpdate*/ static TEEC_Result Invoke_Crypto_MACUpdate( ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *part_data, size_t partd_length) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } /*CMD_MACCompareFinal*/ static TEEC_Result Invoke_Crypto_MACCompareFinal( ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *part_data, size_t partd_length, const void *full_data, size_t fdata_length, enum mac_validity mac_case) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; /* Fill SharedMem1 with part_data */ ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, fdata_length, TEEC_MEM_INPUT, mem02_exit) /* Fill SharedMem2 with valid computed MAC of full_data */ struct crypto_buffer mac; CRYPTO_INIT(mac); res = mac_compute_final(c, s, full_data, fdata_length, &mac); if (mac.buffer != NULL) { memcpy(SHARE_MEM02->buffer, mac.buffer, mac.size); if (mac_case != VALID_MAC) { /* change one bit from the valid MAC to make it invalid. */ BIT_CHANGE(*(uint32_t *)SHARE_MEM02->buffer, 4); } } op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, SHARE_MEM02, mac.size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); CRYPTO_FREE(mac); TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } /*CMD_MACComputeFinal*/ static TEEC_Result Invoke_Crypto_MACComputeFinal( ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *part_data, size_t partd_length, const void *full_data, size_t fdata_length, uint32_t case_buf) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_size; /* Fill SharedMem1 with part_data */ ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, fdata_length, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) if (case_buf == OUTPUT_BUFFER_TOO_SHORT) { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) } else { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); /* Compute the MAC of $IN_fullDataValue$ and compare it to "SharedMem2" */ if (res == TEEC_SUCCESS) { struct crypto_buffer tmp_mac; CRYPTO_INIT(tmp_mac); ADBG_EXPECT_TEEC_SUCCESS(c, res = mac_compute_final(c, s, full_data, fdata_length, &tmp_mac)); if (res != TEEC_SUCCESS) goto exit; ADBG_EXPECT_COMPARE_SIGNED(c, 0, ==, memcmp(SHARE_MEM02->buffer, tmp_mac.buffer, op.params[3].memref.size)); CRYPTO_FREE(tmp_mac); } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } exit: TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } /*CMD_CipherInit*/ static TEEC_Result Invoke_Crypto_CipherInit( ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *iv, size_t iv_len) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, iv_len, TEEC_MEM_INPUT, iv_len, iv, mem01_exit) op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res == TEEC_SUCCESS) { /* Save the $IN_InitialisationVector$ for later * computation of encryptedData */ if (iv != NULL) { CRYPTO_FREE(saved_cipher_iv); saved_cipher_iv.size = iv_len; saved_cipher_iv.buffer = malloc(iv_len); memcpy(saved_cipher_iv.buffer, iv, iv_len); } else { saved_cipher_iv.size = 0; saved_cipher_iv.buffer = NULL; } } TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: CRYPTO_FREE(saved_cipher_update); return res; } /*CMD_CipherUpdate*/ static TEEC_Result Invoke_Crypto_CipherUpdate( ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *part_data, uint32_t partd_length, uint32_t case_buf) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_size; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, partd_length, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) /*if $IN_caseBuffer$ = OUTPUT_BUFFER_TOO_SHORT(2) then Param[3].memref.size=1*/ if (case_buf == OUTPUT_BUFFER_TOO_SHORT) { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) } else { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res == TEEC_SUCCESS) { /* Save the buffer returned in "SharedMem2" in order * to collapse all buffers returned for CipherUpdate, * which will be used in CipherDoFinal */ if (op.params[3].memref.size != 0) { void *tmp = realloc(saved_cipher_update.buffer, saved_cipher_update.size + op.params[3].memref.size); saved_cipher_update.buffer = tmp; memcpy( saved_cipher_update.buffer + saved_cipher_update.size, SHARE_MEM02->buffer, op.params[3].memref.size); saved_cipher_update.size += op.params[3].memref.size; } } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } /*CMD_CipherDoFinal*/ static TEEC_Result Invoke_Crypto_CipherDoFinal( ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph, const void *part_data, size_t partd_length, const void *full_data, size_t fulld_length, uint32_t case_buf) { TEEC_Result res; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig; size_t initial_size; ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM01, partd_length, TEEC_MEM_INPUT, partd_length, part_data, mem01_exit) /* used fulld_length instead of partd_length as described in the Adaptation layer specification.*/ ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM02, fulld_length, TEEC_MEM_OUTPUT, mem02_exit) op.params[0].value.a = oph; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) /*if $IN_caseBuffer$ = OUTPUT_BUFFER_TOO_SHORT(2) then Param[3].memref.size=1*/ if (case_buf == OUTPUT_BUFFER_TOO_SHORT) { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, 1) } else { SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM02, SHARE_MEM02->size) } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); initial_size = op.params[3].memref.size; res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res == TEEC_SUCCESS) { /* Append the buffer returned in "SharedMem2" * to the previously buffers * returned for CipherUpdate => "collapsed_buffers" */ if (op.params[3].memref.size != 0) { void *tmp = realloc(saved_cipher_update.buffer, saved_cipher_update.size + op.params[3].memref.size); saved_cipher_update.buffer = tmp; memcpy( saved_cipher_update.buffer + saved_cipher_update.size, SHARE_MEM02->buffer, op.params[3].memref.size); saved_cipher_update.size += op.params[3].memref.size; } /* Compute the ciphered data of * $IN_fullDataValue$ and compare it * to "collapsed_buffers" */ struct crypto_buffer full_ciphered_data; CRYPTO_INIT(full_ciphered_data); ADBG_EXPECT_TEEC_SUCCESS(c, res = cipher_do_final(c, s, full_data, fulld_length, & full_ciphered_data)); if (res == TEEC_SUCCESS) { ADBG_EXPECT_BUFFER(c, full_ciphered_data.buffer, full_ciphered_data.size, saved_cipher_update.buffer, saved_cipher_update.size); } else if (res == TEEC_ERROR_SHORT_BUFFER) { ADBG_EXPECT_COMPARE_UNSIGNED(c, initial_size, <, op.params[3].memref.size); } CRYPTO_FREE(full_ciphered_data); CRYPTO_FREE(saved_cipher_update); } TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Crypto_FreeOperation(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph) { return Invoke_Simple_Function_v1(c, s, cmd, oph, 0); } static const EVP_MD *hash_algo_to_md(uint32_t algo) { switch (algo) { case TEE_ALG_MD5: return EVP_md5(); case TEE_ALG_SHA1: return EVP_sha1(); case TEE_ALG_SHA224: return EVP_sha224(); case TEE_ALG_SHA256: return EVP_sha256(); case TEE_ALG_SHA384: return EVP_sha384(); case TEE_ALG_SHA512: return EVP_sha512(); default: return NULL; } } static TEEC_Result calculate_digest(ADBG_Case_t *c, const void *data, size_t data_length, struct crypto_buffer *digest) { const EVP_MD *md = hash_algo_to_md(saved_alloc.algo); void *buf = NULL; unsigned int sz = 0; if (!ADBG_EXPECT_NOT_NULL(c, md)) return TEEC_ERROR_NOT_SUPPORTED; sz = EVP_MD_size(md); buf = calloc(1, sz); if (!buf) return TEEC_ERROR_OUT_OF_MEMORY; if (EVP_Digest(data, data_length, buf, &sz, md, NULL)) { digest->size = sz; digest->buffer = buf; return TEEC_SUCCESS; } else { free(buf); return TEEC_ERROR_GENERIC; } } struct key_attr { const void *val; size_t len; }; #define KEY_ATTR(val_array) { .val = val_array, .len = sizeof(val_array) } struct dsa_key_vals { struct key_attr priv; struct key_attr pub; struct key_attr prime; struct key_attr subprime; struct key_attr base; }; static const struct dsa_key_vals dsa_key_vals[] = { { .prime = KEY_ATTR(TEE_ATTR_DSA_PRIME_768_VALUE01), .subprime = KEY_ATTR(TEE_ATTR_DSA_SUBPRIME_160_VALUE01), .base = KEY_ATTR(TEE_ATTR_DSA_BASE_768_VALUE01), .priv = KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE_160_VALUE01), .pub = KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE_768_VALUE01), }, { .prime = KEY_ATTR(TEE_ATTR_DSA_PRIME_2048_VALUE01), .subprime = KEY_ATTR(TEE_ATTR_DSA_SUBPRIME_224_VALUE01), .base = KEY_ATTR(TEE_ATTR_DSA_BASE_2048_VALUE01), .priv = KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE_224_VALUE01), .pub = KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE_2048_VALUE01), }, { .prime = KEY_ATTR(TEE_ATTR_DSA_PRIME_3072_VALUE01), .subprime = KEY_ATTR(TEE_ATTR_DSA_SUBPRIME_256_VALUE01), .base = KEY_ATTR(TEE_ATTR_DSA_BASE_3072_VALUE01), .priv = KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE_256_VALUE01), .pub = KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE_3072_VALUE01), }, }; struct ecdsa_key_vals { struct key_attr priv; struct key_attr x; struct key_attr y; uint32_t curve; uint32_t key_size_bytes; }; static const struct ecdsa_key_vals ecdsa_key_vals[] = { { .priv = KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P192_VALUE01), .x = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P192_VALUE01), .y = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P192_VALUE01), .curve = 1, /* TEE_ECC_CURVE_NIST_P192 */ .key_size_bytes = 24, }, { .priv = KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P224_VALUE01), .x = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P224_VALUE01), .y = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P224_VALUE01), .curve = 2 /* TEE_ECC_CURVE_NIST_P224 */, .key_size_bytes = 28, }, { .priv = KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P256_VALUE01), .x = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P256_VALUE01), .y = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P256_VALUE01), .curve = 3 /* TEE_ECC_CURVE_NIST_P256 */, .key_size_bytes = 32, }, { .priv = KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P384_VALUE01), .x = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P384_VALUE01), .y = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P384_VALUE01), .curve = 4 /* TEE_ECC_CURVE_NIST_P384 */, .key_size_bytes = 48, }, { .priv = KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P521_VALUE01), .x = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P521_VALUE01), .y = KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P521_VALUE01), .curve = 5 /* TEE_ECC_CURVE_NIST_P521 */, .key_size_bytes = 66, }, }; struct rsa_key_vals { struct key_attr mod; struct key_attr pub; struct key_attr priv; }; static const struct rsa_key_vals rsa_key_vals[] = { { .mod = KEY_ATTR(TEE_ATTR_RSA_MODULUS_VALUE01), .pub = KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT_VALUE01), .priv = KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT_VALUE01), }, }; static const void *get_dsa_key_vals(const void *attr) { const size_t nelem = sizeof(dsa_key_vals) / sizeof(dsa_key_vals[0]); size_t n; for (n = 0; n < nelem; n++) { if (attr == dsa_key_vals[n].priv.val || attr == dsa_key_vals[n].pub.val || attr == dsa_key_vals[n].prime.val || attr == dsa_key_vals[n].subprime.val || attr == dsa_key_vals[n].base.val) { return dsa_key_vals + n; } } return NULL; } static const void *get_ecdsa_key_vals(const void *attr) { const size_t nelem = sizeof(ecdsa_key_vals) / sizeof(ecdsa_key_vals[0]); size_t n; for (n = 0; n < nelem; n++) { if (attr == ecdsa_key_vals[n].priv.val || attr == ecdsa_key_vals[n].x.val || attr == ecdsa_key_vals[n].y.val) return ecdsa_key_vals + n; } return NULL; } static const void *get_rsa_key_vals(const void *attr) { const size_t nelem = sizeof(rsa_key_vals) / sizeof(rsa_key_vals[0]); size_t n; for (n = 0; n < nelem; n++) { if (attr == rsa_key_vals[n].priv.val || attr == rsa_key_vals[n].mod.val || attr == rsa_key_vals[n].pub.val) return rsa_key_vals + n; } return NULL; } static BIGNUM *bn_from_key_attr(const struct key_attr *ka) { return BN_bin2bn(ka->val, ka->len, NULL); } static DSA *dsa_from_key_vals(const struct dsa_key_vals *dkv) { BIGNUM *priv_key = bn_from_key_attr(&dkv->priv); BIGNUM *pub_key = bn_from_key_attr(&dkv->pub); BIGNUM *q = bn_from_key_attr(&dkv->subprime); BIGNUM *p = bn_from_key_attr(&dkv->prime); BIGNUM *g = bn_from_key_attr(&dkv->base); DSA *dsa = DSA_new(); if (!dsa || !priv_key || !pub_key || !p || !q || !g) goto err_free_all; if (!DSA_set0_pqg(dsa, p, q, g)) goto err_free_all; if (!DSA_set0_key(dsa, pub_key, priv_key)) goto err_free_priv_pub; return dsa; err_free_all: BN_free(p); BN_free(q); BN_free(g); err_free_priv_pub: BN_free(priv_key); BN_free(pub_key); DSA_free(dsa); return NULL; } static TEEC_Result dsa_sign_digest(ADBG_Case_t *c, const struct dsa_key_vals *dkv, const struct crypto_buffer *in_dgst, struct crypto_buffer *out_dgst) { TEEC_Result res = TEEC_SUCCESS; DSA *dsa = dsa_from_key_vals(dkv); const BIGNUM *r = NULL; const BIGNUM *s = NULL; DSA_SIG *sig = NULL; if (!dsa) { res = TEEC_ERROR_OUT_OF_MEMORY; ADBG_EXPECT_TEEC_SUCCESS(c, res); return res; } sig = DSA_do_sign(in_dgst->buffer, in_dgst->size, dsa); if (!sig) { res = TEEC_ERROR_OUT_OF_MEMORY; ADBG_EXPECT_TEEC_SUCCESS(c, res); goto out; } out_dgst->size = 2 * dkv->subprime.len; /* q */ out_dgst->buffer = calloc(1, out_dgst->size); if (!out_dgst->buffer) { res = TEEC_ERROR_OUT_OF_MEMORY; ADBG_EXPECT_TEEC_SUCCESS(c, res); goto out; } DSA_SIG_get0(sig, &r, &s); BN_bn2bin(r, out_dgst->buffer + out_dgst->size / 2 - BN_num_bytes(r)); BN_bn2bin(s, out_dgst->buffer + out_dgst->size - BN_num_bytes(s)); res = TEEC_SUCCESS; out: DSA_free(dsa); DSA_SIG_free(sig); return res; } static bool dsa_verify_digest(ADBG_Case_t *c, const struct dsa_key_vals *dkv, const void *digest, size_t digest_len, const struct crypto_buffer *in_sdgst) { DSA *dsa = dsa_from_key_vals(dkv); DSA_SIG *sig = NULL; BIGNUM *r = NULL; BIGNUM *s = NULL; bool res = false; if (!ADBG_EXPECT_NOT_NULL(c, dsa)) return false; sig = DSA_SIG_new(); if (!ADBG_EXPECT_NOT_NULL(c, sig)) goto out; r = BN_bin2bn(in_sdgst->buffer, in_sdgst->size / 2, NULL); if (!ADBG_EXPECT_NOT_NULL(c, r)) goto out; s = BN_bin2bn(in_sdgst->buffer + in_sdgst->size / 2, in_sdgst->size / 2, NULL); if (!ADBG_EXPECT_NOT_NULL(c, s)) { BN_free(r); goto out; } DSA_SIG_set0(sig, r, s); res = DSA_do_verify(digest, digest_len, sig, dsa); out: DSA_free(dsa); DSA_SIG_free(sig); return res; } static int curve_to_nid(uint32_t curve) { switch (curve) { case 1 /* TEE_ECC_CURVE_NIST_P192 */: return NID_X9_62_prime192v1; case 2 /* TEE_ECC_CURVE_NIST_P224 */: return NID_secp224r1; case 3 /* TEE_ECC_CURVE_NIST_P256 */: return NID_X9_62_prime256v1; case 4 /* TEE_ECC_CURVE_NIST_P384 */: return NID_secp384r1; case 5 /* TEE_ECC_CURVE_NIST_P521 */: return NID_secp521r1; default: return -1; } } static EC_KEY *ecdsa_from_key_vals(const struct ecdsa_key_vals *kv) { EC_KEY *key = EC_KEY_new_by_curve_name(curve_to_nid(kv->curve)); BIGNUM *priv_key = bn_from_key_attr(&kv->priv); BIGNUM *x = bn_from_key_attr(&kv->x); BIGNUM *y = bn_from_key_attr(&kv->y); if (!key || !priv_key || !x || !y) goto err_free_all; if (!EC_KEY_set_private_key(key, priv_key)) goto err_free_all; if (!EC_KEY_set_public_key_affine_coordinates(key, x, y)) goto err_free_xy; return key; err_free_all: BN_free(priv_key); err_free_xy: BN_free(x); BN_free(y); EC_KEY_free(key); return NULL; } static TEEC_Result ecdsa_sign_digest(ADBG_Case_t *c, const struct ecdsa_key_vals *kv, const struct crypto_buffer *in_dgst, struct crypto_buffer *out_dgst) { TEEC_Result res = TEEC_ERROR_OUT_OF_MEMORY; EC_KEY *key = ecdsa_from_key_vals(kv); const BIGNUM *r = NULL; const BIGNUM *s = NULL; ECDSA_SIG *sig = NULL; if (!ADBG_EXPECT_NOT_NULL(c, key)) return TEEC_ERROR_OUT_OF_MEMORY; sig = ECDSA_do_sign(in_dgst->buffer, in_dgst->size, key); if (!ADBG_EXPECT_NOT_NULL(c, sig)) goto out; out_dgst->size = 2 * kv->key_size_bytes; out_dgst->buffer = calloc(1, out_dgst->size); if (!ADBG_EXPECT_NOT_NULL(c, out_dgst->buffer)) goto out; ECDSA_SIG_get0(sig, &r, &s); BN_bn2bin(r, out_dgst->buffer + out_dgst->size / 2 - BN_num_bytes(r)); BN_bn2bin(s, out_dgst->buffer + out_dgst->size - BN_num_bytes(s)); res = TEEC_SUCCESS; out: EC_KEY_free(key); ECDSA_SIG_free(sig); return res; } static bool ecdsa_verify_digest(ADBG_Case_t *c, const struct ecdsa_key_vals *kv, const void *digest, size_t digest_len, const struct crypto_buffer *in_sdgst) { EC_KEY *key = ecdsa_from_key_vals(kv); ECDSA_SIG *sig = NULL; BIGNUM *r = NULL; BIGNUM *s = NULL; bool res = false; if (!ADBG_EXPECT_NOT_NULL(c, key)) return false; sig = ECDSA_SIG_new(); if (!ADBG_EXPECT_NOT_NULL(c, sig)) goto out; r = BN_bin2bn(in_sdgst->buffer, in_sdgst->size / 2, NULL); if (!ADBG_EXPECT_NOT_NULL(c, r)) goto out; s = BN_bin2bn(in_sdgst->buffer + in_sdgst->size / 2, in_sdgst->size / 2, NULL); if (!ADBG_EXPECT_NOT_NULL(c, s)) { BN_free(r); goto out; } ECDSA_SIG_set0(sig, r, s); res = ECDSA_do_verify(digest, digest_len, sig, key); out: EC_KEY_free(key); ECDSA_SIG_free(sig); return res; } static RSA *rsa_from_key_vals(const struct rsa_key_vals *kv) { BIGNUM *priv = bn_from_key_attr(&kv->priv); BIGNUM *pub = bn_from_key_attr(&kv->pub); BIGNUM *mod = bn_from_key_attr(&kv->mod); RSA *key = RSA_new(); if (!key || !priv || !pub || !mod) goto err_free_all; if (!RSA_set0_key(key, mod, pub, priv)) goto err_free_all; return key; err_free_all: BN_free(priv); BN_free(pub); BN_free(mod); RSA_free(key); return NULL; } static const EVP_MD *algo_to_md(uint32_t algo) { switch (algo) { case TEE_ALG_RSASSA_PKCS1_V1_5_MD5: return EVP_md5(); case TEE_ALG_RSASSA_PKCS1_V1_5_SHA1: case TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1: return EVP_sha1(); case TEE_ALG_RSASSA_PKCS1_V1_5_SHA224: case TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224: return EVP_sha224(); case TEE_ALG_RSASSA_PKCS1_V1_5_SHA256: case TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256: return EVP_sha256(); case TEE_ALG_RSASSA_PKCS1_V1_5_SHA384: case TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384: return EVP_sha384(); case TEE_ALG_RSASSA_PKCS1_V1_5_SHA512: case TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512: return EVP_sha512(); default: return NULL; } } static bool padding_is_pkcs1_v1_5(uint32_t algo) { switch (algo) { case TEE_ALG_RSASSA_PKCS1_V1_5_MD5: case TEE_ALG_RSASSA_PKCS1_V1_5_SHA1: case TEE_ALG_RSASSA_PKCS1_V1_5_SHA224: case TEE_ALG_RSASSA_PKCS1_V1_5_SHA256: case TEE_ALG_RSASSA_PKCS1_V1_5_SHA384: case TEE_ALG_RSASSA_PKCS1_V1_5_SHA512: return true; default: return false; } } static int ossl_err_cb(const char *str, size_t len, void *u) { warnx("%*s", (int)len, str); return 0; } static void print_ossl_errors(const char *func) { warnx("%s failed", func); ERR_print_errors_cb(ossl_err_cb, NULL); } static TEEC_Result rsa_sign_digest(ADBG_Case_t *c, const struct rsa_key_vals *kv, uint32_t algo, const struct crypto_buffer *in_dgst, struct crypto_buffer *out_dgst) { TEEC_Result res = TEEC_SUCCESS; const EVP_MD *md = algo_to_md(algo); RSA *key = NULL; unsigned int sz = 0; void *buf = NULL; if (!ADBG_EXPECT_NOT_NULL(c, md)) return TEEC_ERROR_GENERIC; key = rsa_from_key_vals(kv); if (!ADBG_EXPECT_NOT_NULL(c, key)) return TEEC_ERROR_OUT_OF_MEMORY; sz = RSA_size(key); buf = calloc(1, sz); if (!ADBG_EXPECT_NOT_NULL(c, buf)) { res = TEEC_ERROR_OUT_OF_MEMORY; goto out; } if (padding_is_pkcs1_v1_5(algo)) { if (!RSA_sign(EVP_MD_nid(md), in_dgst->buffer, in_dgst->size, buf, &sz, key)) { print_ossl_errors("RSA_sign"); res = TEEC_ERROR_GENERIC; } } else { /* * Important to use RSA_PSS_SALTLEN_DIGEST since the * implementation may expect the size of the hash since the * salt length isn't supplied as a paramter to * TEE_AsymmetricVerifyDigest(). */ if (!RSA_padding_add_PKCS1_PSS_mgf1(key, buf, in_dgst->buffer, md, md, RSA_PSS_SALTLEN_DIGEST)) { print_ossl_errors("RSA_padding_add_PKCS1_PSS_mgf1"); res = TEEC_ERROR_GENERIC; } else if (!RSA_private_encrypt(sz, buf, buf, key, RSA_NO_PADDING)) { print_ossl_errors("RSA_padding_add_PKCS1_PSS_mgf1"); res = TEEC_ERROR_GENERIC; } } if (!res) { out_dgst->buffer = buf; out_dgst->size = sz; } else { free(buf); } out: RSA_free(key); return res; } static bool rsa_verify_pss_digest(ADBG_Case_t *c, const EVP_MD *md, RSA *key, const void *digest, const struct crypto_buffer *in_sdgst) { bool res = false; void *buf; int mlen; buf = calloc(1, RSA_size(key)); if (!ADBG_EXPECT_NOT_NULL(c, buf)) return false; mlen = RSA_public_decrypt(in_sdgst->size, in_sdgst->buffer, buf, key, RSA_NO_PADDING); if (mlen < 0) { print_ossl_errors("RSA_public_decrypt"); goto out; } res = RSA_verify_PKCS1_PSS_mgf1(key, digest, md, md, buf, -2); if (!res) print_ossl_errors("RSA_verify_PKCS1_PSS_mgf1"); out: free(buf); return res; } static bool rsa_verify_digest(ADBG_Case_t *c, const struct rsa_key_vals *kv, uint32_t algo, const void *digest, size_t digest_len, const struct crypto_buffer *in_sdgst) { const EVP_MD *md = algo_to_md(algo); RSA *key = NULL; bool res; if (!ADBG_EXPECT_NOT_NULL(c, md)) return false; key = rsa_from_key_vals(kv); if (!ADBG_EXPECT_NOT_NULL(c, key)) return false; if (padding_is_pkcs1_v1_5(algo)) { res = RSA_verify(EVP_MD_nid(md), digest, digest_len, in_sdgst->buffer, in_sdgst->size, key); if (!res) print_ossl_errors("RSA_verify"); } else { res = rsa_verify_pss_digest(c, md, key, digest, in_sdgst); } RSA_free(key); return res; } static TEEC_Result sign_digest(ADBG_Case_t *c, const struct crypto_buffer *in_dgst, struct crypto_buffer *out_dgst) { const void *kv = NULL; TEEC_Result res = TEEC_SUCCESS; if (!ADBG_EXPECT(c, TEE_HANDLE_NULL, saved_obh.obh2)) return TEEC_ERROR_GENERIC; if (!ADBG_EXPECT_NOT(c, TEE_HANDLE_NULL, saved_obh.obh1)) return TEEC_ERROR_GENERIC; kv = get_dsa_key_vals(saved_key_pub_attr[saved_obh.obh1]); if (kv) { res = dsa_sign_digest(c, kv, in_dgst, out_dgst); goto out; } kv = get_ecdsa_key_vals(saved_key_pub_attr[saved_obh.obh1]); if (kv) { res = ecdsa_sign_digest(c, kv, in_dgst, out_dgst); goto out; } kv = get_rsa_key_vals(saved_key_pub_attr[saved_obh.obh1]); if (kv) { res = rsa_sign_digest(c, kv, saved_alloc.algo, in_dgst, out_dgst); goto out; } res = TEEC_ERROR_GENERIC; out: ADBG_EXPECT_TEEC_SUCCESS(c, res); return res; } static bool verify_digest(ADBG_Case_t *c, const struct crypto_buffer *in_sdgst) { const void *kv = NULL; if (!ADBG_EXPECT(c, TEE_HANDLE_NULL, saved_obh.obh2)) return false; if (!ADBG_EXPECT_NOT(c, TEE_HANDLE_NULL, saved_obh.obh1)) return false; kv = get_dsa_key_vals(saved_key_pub_attr[saved_obh.obh1]); if (kv) return dsa_verify_digest(c, kv, saved_digest.buffer, saved_digest.size, in_sdgst); kv = get_ecdsa_key_vals(saved_key_pub_attr[saved_obh.obh1]); if (kv) return ecdsa_verify_digest(c, kv, saved_digest.buffer, saved_digest.size, in_sdgst); kv = get_rsa_key_vals(saved_key_pub_attr[saved_obh.obh1]); if (kv) return rsa_verify_digest(c, kv, saved_alloc.algo, saved_digest.buffer, saved_digest.size, in_sdgst); return ADBG_EXPECT_TRUE(c, false); } static TEEC_Result mac_compute_final( ADBG_Case_t *c, TEEC_Session *s, const void *full_data, size_t fdata_length, struct crypto_buffer *mac) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t op1 = 3; uint32_t ret_orig; res = Invoke_Crypto_AllocateOperation(c, s, CMD_Crypto_AllocateOperation, saved_alloc.algo, TEE_MODE_MAC, saved_alloc.obj_size, 0, op1); if (res != TEEC_SUCCESS) goto exit; if (saved_obh.obh2 != TEE_HANDLE_NULL) { res = Invoke_Crypto_SetOperationKey2(c, s, CMD_Crypto_SetOperationKey2, op1, saved_obh.obh1, saved_obh.obh2); if (res != TEEC_SUCCESS) goto exit; } else if (saved_obh.obh1 != TEE_HANDLE_NULL) { res = Invoke_Crypto_SetOperationKey(c, s, CMD_Crypto_SetOperationKey, op1, saved_obh.obh1); if (res != TEEC_SUCCESS) goto exit; } res = Invoke_Crypto_MACInit(c, s, CMD_Crypto_MACInit, op1, saved_mac_iv.buffer, saved_mac_iv.size); if (res != TEEC_SUCCESS) goto exit; /* CMD_MACComputeFinal */ /* Fill SharedMem1 with full_data */ ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM04, fdata_length, TEEC_MEM_INPUT, fdata_length, full_data, mem04_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM05, fdata_length, TEEC_MEM_OUTPUT, mem05_exit) op.params[0].value.a = (uint32_t)op1; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM04, SHARE_MEM04->size) SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM05, SHARE_MEM05->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); res = TEEC_InvokeCommand(s, CMD_Crypto_MACComputeFinal, &op, &ret_orig); if (res == TEEC_SUCCESS) { mac->size = op.params[3].memref.size; mac->buffer = malloc(mac->size); memcpy(mac->buffer, SHARE_MEM05->buffer, mac->size); } TEEC_ReleaseSharedMemory(SHARE_MEM05); mem05_exit: TEEC_ReleaseSharedMemory(SHARE_MEM04); mem04_exit: Invoke_Crypto_FreeOperation(c, s, CMD_Crypto_FreeOperation, op1); exit: return res; } static TEEC_Result cipher_do_final( ADBG_Case_t *c, TEEC_Session *s, const void *full_data, size_t fdata_length, struct crypto_buffer *cipher) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t op1 = 3; uint32_t ret_orig; res = Invoke_Crypto_AllocateOperation(c, s, CMD_Crypto_AllocateOperation, saved_alloc.algo, TEE_MODE_ENCRYPT, saved_alloc.obj_size, 0, op1); if (res != TEEC_SUCCESS) goto crypto_alloc; if (saved_obh.obh2 != TEE_HANDLE_NULL) { res = Invoke_Crypto_SetOperationKey2(c, s, CMD_Crypto_SetOperationKey2, op1, saved_obh.obh1, saved_obh.obh2); if (res != TEEC_SUCCESS) goto exit; } else if (saved_obh.obh1 != TEE_HANDLE_NULL) { res = Invoke_Crypto_SetOperationKey(c, s, CMD_Crypto_SetOperationKey, op1, saved_obh.obh1); if (res != TEEC_SUCCESS) goto exit; } ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM04, fdata_length, TEEC_MEM_INPUT, saved_cipher_iv.size, saved_cipher_iv.buffer, mem04_exit) op.params[0].value.a = (uint32_t)op1; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM04, saved_cipher_iv.size) op.params[1].memref.offset = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, CMD_Crypto_CipherInit, &op, &ret_orig); if (res != TEEC_SUCCESS) goto mem05_exit; TEEC_ReleaseSharedMemory(SHARE_MEM04); /* CMD_CipherDoFinal */ /* Fill SharedMem1 with full_data */ ALLOCATE_AND_FILL_SHARED_MEMORY(s->imp.ctx, SHARE_MEM04, fdata_length, TEEC_MEM_INPUT, fdata_length, full_data, mem04_exit) ALLOCATE_SHARED_MEMORY(s->imp.ctx, SHARE_MEM05, fdata_length, TEEC_MEM_OUTPUT, mem05_exit) op.params[0].value.a = (uint32_t)op1; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM04, SHARE_MEM04->size) SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, SHARE_MEM05, SHARE_MEM05->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_MEMREF_PARTIAL_OUTPUT); res = TEEC_InvokeCommand(s, CMD_Crypto_CipherDoFinal, &op, &ret_orig); if (res == TEEC_SUCCESS) { cipher->size = op.params[3].memref.size; cipher->buffer = malloc(cipher->size); memcpy(cipher->buffer, SHARE_MEM05->buffer, cipher->size); } TEEC_ReleaseSharedMemory(SHARE_MEM05); mem05_exit: TEEC_ReleaseSharedMemory(SHARE_MEM04); mem04_exit: exit: Invoke_Crypto_FreeOperation(c, s, CMD_Crypto_FreeOperation, op1); crypto_alloc: return res; } static TEEC_Result Invoke_Crypto_EnsureIntermediateBufferSize(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t oph) { return Invoke_Simple_Function_v1(c, s, cmd, oph, 0); } static TEEC_Result Invoke_AllocateTransientObject(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t obj_type, uint32_t max_key_size, uint32_t oph) { return Invoke_Simple_Function_v2(c, s, cmd, oph, 0, obj_type, max_key_size); } static TEEC_Result Invoke_RestrictObjectUsage1(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t obj_handle, uint32_t obj_usage) { return Invoke_Simple_Function_v1(c, s, cmd, obj_handle, obj_usage); } static TEEC_Result Invoke_StoreAttributeBuffer(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t buffer, const void *value_bufptr, size_t value_size) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEE_SUCCESS; uint32_t org = 0; static TEEC_SharedMemory shm = { }; shm.size = value_size; shm.flags = TEEC_MEM_INPUT; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; memcpy(shm.buffer, value_bufptr, shm.size); op.params[0].value.a = buffer; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, &shm, shm.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd, &op, &org); TEEC_ReleaseSharedMemory(&shm); return res; } static TEEC_Result Invoke_InitRefAttribute(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t attr, uint32_t attr_id, uint32_t buffer) { return Invoke_Simple_Function_v2(c, sess, cmd, attr, attr_id, buffer, 0); } static TEEC_Result Macro_StoreRefAttribute(ADBG_Case_t *c, TEEC_Session *sess, uint32_t attr, uint32_t buffer, uint32_t attr_id, const void *value_bufptr, size_t value_size) { TEEC_Result res = TEE_SUCCESS; res = Invoke_StoreAttributeBuffer(c, sess, CMD_DS_StoreBuffer, buffer, value_bufptr, value_size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; res = Invoke_InitRefAttribute(c, sess, CMD_DS_InitRefAttribute, attr, attr_id, buffer); ADBG_EXPECT_TEEC_SUCCESS(c, res); return res; } #endif /* XML_CRYPTO_API_H_ */ optee_test-4.3.0/host/xtest/gp/include/xml_datastorage_api.h000066400000000000000000003070521464074351400242450ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2020, Linaro Limited */ #ifndef XML_DATASTORAGE_API_H_ #define XML_DATASTORAGE_API_H_ #include #include #include #include #include #include #include #include #include #include "xml_common_api.h" #include "xtest_helpers.h" #include "xtest_test.h" #define declare_local_vars \ uint32_t iObjectUsage1 __maybe_unused = 0; \ uint32_t iObjectDataFlags1 __maybe_unused = 0; \ uint32_t iObjectDataFlags2 __maybe_unused = 0; \ uint32_t iObjectDataFlags3 __maybe_unused = 0; \ uint32_t iHandleFlags1 __maybe_unused = 0; \ uint32_t iAttributeList1 __maybe_unused = 0; #define iAttributeListEmpty 0u #define CLIENT_APP01 NULL #define TEEC_UNDEFINED_ERROR 0xDEADDEAD #define TEEC_ORIGIN_ANY_NOT_TRUSTED_APP 0x00000005 #define CMD_DS_AllocatePersistentObjectEnumerator 0x10000015 #define CMD_DS_AllocateTransientObject 0x10000001 #define CMD_DS_Check_ObjectInfo 0x100000C2 #define CMD_DS_CloseAndDeletePersistentObject 0x1000102B #define CMD_DS_CloseAndDeletePersistentObject1 0x1000102C #define CMD_DS_CloseObject 0x10000011 #define CMD_DS_CopyObjectAttributes 0x10000022 #define CMD_DS_CopyObjectAttributes1 0x10000009 #define CMD_DS_CreatePersistentObject 0x10000010 #define CMD_DS_FreePersistentObjectEnumerator 0x10000016 #define CMD_DS_FreeTransientObject 0x10000004 #define CMD_DS_GenerateKey 0x1000100B #define CMD_DS_GetNextPersistentObject 0x10000019 #define CMD_DS_GetObjectBufferAttribute 0x10000008 #define CMD_DS_GetObjectInfo 0x10000023 #define CMD_DS_GetObjectInfo1 0x10000002 #define CMD_DS_GetObjectValueAttribute 0x10000012 #define CMD_DS_InitRefAttribute 0x10000006 #define CMD_DS_InitValueAttribute 0x1000101F #define CMD_DS_OpenPersistentObject 0x10000013 #define CMD_DS_PopulateTransientObject 0x10000007 #define CMD_DS_PopulateTransientObject_BadAttrBuffer 0x10000027 #define CMD_DS_ReadObjectData 0x10001028 #define CMD_DS_RenamePersistentObject 0x10000014 #define CMD_DS_ResetPersistentObjectEnumerator 0x10000017 #define CMD_DS_ResetTransientObject 0x10000005 #define CMD_DS_RestrictObjectUsage 0x10000021 #define CMD_DS_RestrictObjectUsage1 0x10000003 #define CMD_DS_Retrieve_ObjectInfo 0x10000020 #define CMD_DS_SeekObjectData 0x10000024 #define CMD_DS_StartPersistentObjectEnumerator 0x10000018 #define CMD_DS_StoreBuffer 0x1F0000CB #define CMD_DS_TruncateObjectData 0x10000026 #define CMD_DS_WriteObjectData 0x10000025 #define TYPE_NOT_EXISTING 0xA0000095 #define OFFSET_0 0 #define OFFSET_1 1 #define OFFSET_DOUBLE_MAX_INT32 0xFFFFFFFE #define OFFSET_HIGH 900 #define OFFSET_HIGH_PLUS_HIGH (OFFSET_HIGH + OFFSET_HIGH) #define OFFSET_INITIAL_DATA_SIZE 1024 #define OFFSET_INITIAL_DATA_SIZE_PLUS_LOW (OFFSET_INITIAL_DATA_SIZE + \ OFFSET_LOW) #define OFFSET_LOW 300 #define OFFSET_LOW_PLUS_HIGH (OFFSET_LOW + OFFSET_HIGH) #define OFFSET_LOW_PLUS_LOW (OFFSET_LOW + OFFSET_LOW) #define OFFSET_MAX_INT32 0x7FFFFFFF #define OFFSET_NEG_1 -1 #define BUFFER01_SIZE sizeof(BUFFER01) #define BUFFER01_SIZE_EXTENDED_01 (BUFFER01_SIZE + OFFSET_LOW) #define BUFFER01_SIZE_EXTENDED_02 (BUFFER01_SIZE + \ OFFSET_LOW_PLUS_HIGH - \ INITIAL_DATA_SIZE) #define BUFFER_BIG_SIZE BIG_SIZE #define BUFFER_SIZE_TOO_SMALL 10 #define INITIAL_DATA_SIZE 1024 #define LARGER_THAN_INITIAL 1500 #define SHORTER_THAN_INITIAL 500 #define SIZE_0 0 #define SIZE_1 1 #define BUFFER_SIZE_TOO_SMALL 10 #define SIZE_0 0 #define SIZE_1 1 #define INITIAL_DATA_SIZE 1024 #define LARGER_THAN_INITIAL 1500 #define SHORTER_THAN_INITIAL 500 #define KEY_SIZE_TOO_LARGE 4096 #define SIZE_AES_192 192 #define SIZE_AES_256 256 #define SIZE_DES3_128 128 #define SIZE_DES3_192 192 #define SIZE_DES_64 64 #define SIZE_DH_KEYPAIR_1024 1024 #define SIZE_DIGEST_MD5_16 16 #define SIZE_DIGEST_SHA1_20 20 #define SIZE_DIGEST_SHA224_28 28 #define SIZE_DIGEST_SHA256_32 32 #define SIZE_DIGEST_SHA384_48 48 #define SIZE_DIGEST_SHA512_64 64 #define SIZE_DSA_SHA1_KEYPAIR_768 768 #define SIZE_DSA_SHA1_PUBLIC_KEY_768 768 #define SIZE_DSA_SHA224_KEYPAIR_2048 2048 #define SIZE_DSA_SHA224_PUBLIC_KEY_2048 2048 #define SIZE_DSA_SHA256_KEYPAIR_2048 2048 #define SIZE_DSA_SHA256_KEYPAIR_3072 3072 #define SIZE_DSA_SHA256_PUBLIC_KEY_2048 2048 #define SIZE_DSA_SHA256_PUBLIC_KEY_3072 3072 #define SIZE_ECDH_P192 192 #define SIZE_ECDH_P224 224 #define SIZE_ECDH_P256 256 #define SIZE_ECDH_P384 384 #define SIZE_ECDH_P521 521 #define SIZE_ECDSA_P192 192 #define SIZE_ECDSA_P224 224 #define SIZE_ECDSA_P256 256 #define SIZE_ECDSA_P384 384 #define SIZE_ECDSA_P521 521 #define SIZE_GENERIC_SECRET_2048 2048 #define SIZE_HMAC_MD5_256 256 #define SIZE_HMAC_SHA1_256 256 #define SIZE_HMAC_SHA224_256 256 #define SIZE_HMAC_SHA256_512 512 #define SIZE_HMAC_SHA384_512 512 #define SIZE_HMAC_SHA512_512 512 #define SIZE_RSA_KEYPAIR_1024 1024 #define SIZE_RSA_KEYPAIR_2048 2048 #define SIZE_RSA_PUBLIC_KEY_2048 2048 #define SIZE_ZERO 0 #define WRONG_ECC_SIZE 10 #define WRONG_SIZE 5 #define TEE_ERROR_TOO_SHORT_BUFFER TEE_ERROR_SHORT_BUFFER #define TEE_ATTR_NONE (uint32_t)0 #define NOMINAL_CASE 0 #define BUFFER_ATTRIBUTE 0 #define VALUE_ATTRIBUTE 1 #define TEE_ATTR_TEST_VALUE_A 0x0000FFFF #define TEE_ATTR_TEST_VALUE_B 0xFFFF0000 #define OBJECT_HANDLE_NULL 0 #define OBJECT_HANDLE_01 1 #define OBJECT_HANDLE_02 2 #define OBJECT_HANDLE_03 3 #define OBJECT_HANDLE_INVALID 4 #define OBJECT_INFO_01 1 #define INVALID_HANDLE 0xFFFFFF01 #define OBJECT_ENUM_NULL 0xFFFFFF00 #define OBJECT_ENUM_01 0 #define ATTRIBUTE_01 0 #define ATTRIBUTE_02 1 #define ATTRIBUTE_03 2 #define ATTRIBUTE_04 3 #define ATTRIBUTE_05 4 #define ATTRIBUTE_06 5 #define ATTRIBUTE_NONE 0xFFFFFFFF #define BUFFER_01 0 #define BUFFER_02 1 #define BUFFER_03 2 #define BUFFER_04 3 #define BUFFER_05 4 #define BUFFER_06 5 #define iObjectUsageNone 0 #define iObjectUsageAllBitsOne 0xFFFFFFFF #define iHandleFlagsNone 0 #define iObjectDataFlagsNone 0 struct obj_info { uint8_t obj_id[TEE_OBJECT_ID_MAX_LEN]; uint32_t obj_id_len; uint32_t obj_type; uint32_t obj_size; uint32_t max_obj_size; uint32_t obj_usage; uint32_t data_size; uint32_t data_pos; uint32_t handle_flags; }; #define MAX_NUM_SAVED_OBJ_INFO 4 static struct obj_info saved_obj_info[MAX_NUM_SAVED_OBJ_INFO]; static void *saved_obj_data; static size_t saved_obj_data_size; static TEEC_SharedMemory share_mem[1]; static TEEC_SharedMemory *SHARE_MEM01 = share_mem; static TEEC_Session session[2]; static TEEC_Session *SESSION01 = session; static TEEC_Session *SESSION02 = session + 1; static TEEC_Context context[2]; static TEEC_Context *CONTEXT01 = context; static TEEC_Context *CONTEXT02 = context + 1; #define STORAGE_ID_NOT_EXISTING 0x01234567 #define OBJECT_ID_01 "testobject01" #define OBJECT_ID_02 "testobject02" #define OBJECT_ID_03 "testobject03" #define OBJECT_ID_SR "testobjectSR" #define OBJECT_ID_TOO_LONG "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEFx" #define EMPTY_BUFFER NULL #define BIG_ATTRIBUTE_BUFFER_SIZE 512 static const uint8_t TEE_ATTR_RSA_PUBLIC_EXPONENT_VALUE_GEN_OUT_OF_RANGE_INF[] = { 0x11, /* 17 */ }; static const uint8_t TEE_ATTR_RSA_PUBLIC_EXPONENT_VALUE_GEN_NOT_ODD[] = { 0x01, 0x00, 0x02, /* 65538 */ }; static const uint8_t TEE_ATTR_RSA_PUBLIC_EXPONENT_VALUE_65537[] = { 0x01, 0x00, 0x01, /* 65537 */ }; static const uint8_t TEE_ATTR_RSA_PUBLIC_EXPONENT_VALUE_NOT_GEN_DEFAULT[] = { 0x01, 0x01, 0xd1, /* 66001 */ }; static const uint8_t TEE_ATTR_AES_192_VALUE01[] = { 0xcd, 0xfe, 0x57, 0xb6, 0xb6, 0x2f, 0xae, 0x6b, 0x04, 0x73, 0x40, 0xf1, 0x02, 0xd6, 0xa4, 0x8c, 0x89, 0x5d, 0xad, 0xf2, 0x9d, 0x62, 0xef, 0x25, }; static const uint8_t TEE_ATTR_AES_256_VALUE01[] = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81, 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4, }; static const uint8_t TEE_ATTR_DES3_128_VALUE01[] = { 0xcd, 0xfe, 0x57, 0xb6, 0xb6, 0x2f, 0xae, 0x6b, 0x04, 0x73, 0x40, 0xf1, 0x02, 0xd6, 0xa4, 0x8c, }; static const uint8_t TEE_ATTR_DES3_192_VALUE01[] = { 0xcd, 0xfe, 0x57, 0xb6, 0xb6, 0x2f, 0xae, 0x6b, 0x04, 0x73, 0x40, 0xf1, 0x02, 0xd6, 0xa4, 0x8c, 0x89, 0x5d, 0xad, 0xf2, 0x9d, 0x62, 0xef, 0x25, }; static const uint8_t TEE_ATTR_DES_64_VALUE01[] = { 0xcd, 0xfe, 0x57, 0xb6, 0xb6, 0x2f, 0xae, 0x6b, }; static const uint8_t TEE_ATTR_DH_BASE_2048_VALUE01[] = { 0x34, 0x49, 0x90, 0x84, 0xea, 0x17, 0x68, 0x38, 0x67, 0x39, 0x4a, 0xda, 0x44, 0xd2, 0x86, 0xac, 0x8c, 0x9c, 0x75, 0x50, 0x50, 0xdd, 0x7e, 0x8f, 0x1f, 0x42, 0x35, 0xb0, 0x46, 0x6e, 0x40, 0xa0, 0x2f, 0x55, 0xa0, 0x9e, 0xb8, 0xf6, 0x8b, 0xc8, 0x62, 0x43, 0x7f, 0x5f, 0x45, 0xb6, 0x9f, 0xb1, 0x2a, 0x92, 0x3e, 0xff, 0x93, 0xd1, 0xa9, 0x6c, 0x0a, 0x55, 0x51, 0x35, 0x91, 0xcc, 0xa8, 0x37, 0x7c, 0xa2, 0xdd, 0xb5, 0x0d, 0xa0, 0xbd, 0x4a, 0xdd, 0xa1, 0x4d, 0x8b, 0xa2, 0x1e, 0x59, 0x73, 0x49, 0x58, 0xb7, 0x23, 0xf2, 0x67, 0x3e, 0x50, 0x07, 0xab, 0xce, 0x8e, 0x4e, 0xf6, 0xdf, 0x09, 0x98, 0x40, 0x04, 0x65, 0x25, 0x98, 0xa2, 0x93, 0x9b, 0x1e, 0x15, 0x1b, 0x8d, 0xbf, 0x0c, 0x87, 0x80, 0xee, 0xa4, 0x0f, 0xd9, 0xe8, 0x08, 0xb6, 0xae, 0x1e, 0xcf, 0xfa, 0x73, 0x0d, 0x19, 0x3f, 0x78, 0xc9, 0xeb, 0x7f, 0xd7, 0x28, 0x39, 0x1f, 0xa6, 0xec, 0x65, 0x15, 0xd2, 0x84, 0xc0, 0x8c, 0x2a, 0xc1, 0x1b, 0x27, 0x3d, 0xc9, 0x70, 0x9d, 0xd7, 0x63, 0xb3, 0xe1, 0x8d, 0xbb, 0x9d, 0x5e, 0x61, 0x1b, 0xc7, 0x83, 0xc3, 0x37, 0x38, 0x2a, 0xea, 0x6a, 0x66, 0x22, 0xe7, 0x04, 0x5b, 0x87, 0x8b, 0x3d, 0xc5, 0x8c, 0x45, 0xd6, 0x50, 0x22, 0x80, 0xbe, 0xca, 0x16, 0x63, 0x7c, 0xdc, 0x0b, 0xad, 0x35, 0x2e, 0xb5, 0x9b, 0xf7, 0x36, 0xfc, 0x6b, 0x17, 0xf0, 0xe2, 0x8c, 0xb6, 0x8f, 0x81, 0x6d, 0xfa, 0x49, 0x8c, 0x5e, 0x70, 0x6e, 0x5d, 0x5f, 0xdd, 0x49, 0x81, 0xe4, 0x75, 0x2f, 0xe3, 0x71, 0xb4, 0x2d, 0x10, 0xb5, 0xa2, 0x7e, 0x25, 0x42, 0x2e, 0x7c, 0x70, 0x00, 0x5e, 0xfc, 0x2e, 0xc0, 0x3f, 0x21, 0x02, 0x6f, 0xe5, 0x00, 0x8b, 0xde, 0xee, 0x9b, 0x1a, 0x5a, 0x8a, 0x19, 0x40, }; static const uint8_t TEE_ATTR_DH_BASE_VALUE01[] = { 0x1c, 0xe0, 0xf6, 0x69, 0x26, 0x46, 0x11, 0x97, 0xef, 0x45, 0xc4, 0x65, 0x8b, 0x83, 0xb8, 0xab, 0x04, 0xa9, 0x22, 0x42, 0x68, 0x50, 0x4d, 0x05, 0xb8, 0x19, 0x83, 0x99, 0xdd, 0x71, 0x37, 0x18, 0xcc, 0x1f, 0x24, 0x5d, 0x47, 0x6c, 0xcf, 0x61, 0xa2, 0xf9, 0x34, 0x93, 0xf4, 0x1f, 0x55, 0x52, 0x48, 0x65, 0x57, 0xe6, 0xd4, 0xca, 0xa8, 0x00, 0xd6, 0xd0, 0xdb, 0x3c, 0xbf, 0x5a, 0x95, 0x4b, 0x20, 0x8a, 0x4e, 0xba, 0xf7, 0xe6, 0x49, 0xfb, 0x61, 0x24, 0xd8, 0xa2, 0x1e, 0xf2, 0xf2, 0x2b, 0xaa, 0xae, 0x29, 0x21, 0x10, 0x19, 0x10, 0x51, 0x46, 0x47, 0x31, 0xb6, 0xcc, 0x3c, 0x93, 0xdc, 0x6e, 0x80, 0xba, 0x16, 0x0b, 0x66, 0x64, 0xa5, 0x6c, 0xfa, 0x96, 0xea, 0xf1, 0xb2, 0x83, 0x39, 0x8e, 0xb4, 0x61, 0x64, 0xe5, 0xe9, 0x43, 0x84, 0xee, 0x02, 0x24, 0xe7, 0x1f, 0x03, 0x7c, 0x23, }; static const uint8_t TEE_ATTR_DH_PRIME_2048_VALUE01[] = { 0xbb, 0xe9, 0x83, 0xd5, 0x01, 0xd1, 0xc8, 0xf3, 0x28, 0xff, 0x36, 0x1a, 0x82, 0xc8, 0x9b, 0x9f, 0x72, 0xbe, 0x14, 0x20, 0x5e, 0x15, 0x13, 0xa0, 0x24, 0x89, 0x79, 0x0a, 0x67, 0x44, 0xd9, 0x05, 0x59, 0x90, 0x51, 0x83, 0xf0, 0xed, 0xb5, 0x7d, 0x1a, 0x9a, 0xf4, 0x69, 0x6d, 0x82, 0xc3, 0x5f, 0xe2, 0x97, 0x94, 0x59, 0xb9, 0xb2, 0x7a, 0x7b, 0xac, 0x6d, 0xba, 0x21, 0xe9, 0xb4, 0xe9, 0x64, 0xd9, 0x88, 0x5c, 0xe0, 0xbf, 0x62, 0x5b, 0xd4, 0x4c, 0x0e, 0xc9, 0x0d, 0xab, 0x62, 0xe6, 0xf3, 0x23, 0xf0, 0xa1, 0xd1, 0xda, 0x83, 0x66, 0x06, 0xd3, 0x77, 0x14, 0x00, 0x76, 0x11, 0x21, 0xb6, 0xa5, 0x6a, 0xc5, 0x4d, 0x38, 0xbc, 0x50, 0x6a, 0x9f, 0x89, 0xd6, 0x91, 0x73, 0xee, 0x2f, 0x77, 0x45, 0xeb, 0xcf, 0x02, 0x66, 0xd5, 0xd6, 0xc9, 0x94, 0x24, 0x6b, 0x99, 0x88, 0x0d, 0x5f, 0xe6, 0x19, 0x53, 0x30, 0x3d, 0x01, 0x40, 0x9f, 0x4c, 0x75, 0xae, 0x7b, 0xfd, 0xd8, 0xea, 0x2d, 0x77, 0x6d, 0x0a, 0x3a, 0x61, 0x61, 0xcb, 0x28, 0x4d, 0xa6, 0xc9, 0x2c, 0xbe, 0x45, 0x9e, 0xc5, 0xee, 0x42, 0xcf, 0xde, 0x86, 0x68, 0x01, 0x42, 0x34, 0xc3, 0x63, 0xdd, 0xeb, 0x52, 0x44, 0xe2, 0x5e, 0xef, 0xdd, 0x96, 0x17, 0x66, 0x90, 0xc4, 0xc9, 0xd8, 0x52, 0x45, 0x08, 0xc2, 0xc2, 0x6a, 0x44, 0x73, 0x16, 0xad, 0x12, 0xbf, 0x90, 0xac, 0x48, 0xd3, 0xd0, 0x65, 0x8a, 0x18, 0xc9, 0x6c, 0x23, 0x24, 0x61, 0x42, 0x01, 0xc5, 0xe5, 0x8e, 0x1d, 0x85, 0xb7, 0x40, 0x72, 0x53, 0x6d, 0x3c, 0x15, 0x51, 0x52, 0x09, 0x38, 0x05, 0xc7, 0xf5, 0x8e, 0x9d, 0xa0, 0xf0, 0xb9, 0x41, 0x50, 0x54, 0xc6, 0x70, 0x46, 0x31, 0x3e, 0xc6, 0x4d, 0x6f, 0x48, 0x85, 0xa4, 0x6b, 0x16, 0x15, 0x86, 0xa6, 0x99, }; static const uint8_t TEE_ATTR_DH_PRIME_VALUE01[] = { 0xe0, 0x01, 0xe8, 0x96, 0x7d, 0xb4, 0x93, 0x53, 0xe1, 0x6f, 0x8e, 0x89, 0x22, 0x0c, 0xce, 0xfc, 0x5c, 0x5f, 0x12, 0xe3, 0xdf, 0xf8, 0xf1, 0xd1, 0x49, 0x90, 0x12, 0xe6, 0xef, 0x53, 0xe3, 0x1f, 0x02, 0xea, 0xcc, 0x5a, 0xdd, 0xf3, 0x37, 0x89, 0x35, 0xc9, 0x5b, 0x21, 0xea, 0x3d, 0x6f, 0x1c, 0xd7, 0xce, 0x63, 0x75, 0x52, 0xec, 0x38, 0x6c, 0x0e, 0x34, 0xf7, 0x36, 0xad, 0x95, 0x17, 0xef, 0xfe, 0x5e, 0x4d, 0xa7, 0xa8, 0x6a, 0xf9, 0x0e, 0x2c, 0x22, 0x8f, 0xe4, 0xb9, 0xe6, 0xd8, 0xf8, 0xf0, 0x2d, 0x20, 0xaf, 0x78, 0xab, 0xb6, 0x92, 0xac, 0xbc, 0x4b, 0x23, 0xfa, 0xf2, 0xc5, 0xcc, 0xd4, 0x9a, 0x0c, 0x9a, 0x8b, 0xcd, 0x91, 0xac, 0x0c, 0x55, 0x92, 0x01, 0xe6, 0xc2, 0xfd, 0x1f, 0x47, 0xc2, 0xcb, 0x2a, 0x88, 0xa8, 0x3c, 0x21, 0x0f, 0xc0, 0x54, 0xdb, 0x29, 0x2d, 0xbc, 0x45, }; static const uint8_t TEE_ATTR_DH_PRIVATE_VALUE_256_2048_VALUE01[] = { 0xd7, 0x2a, 0x8b, 0x81, 0x2b, 0x22, 0x7a, 0x7e, 0x0e, 0xc1, 0xbe, 0x32, 0xfe, 0xdc, 0xda, 0xf4, 0xda, 0x4e, 0xe2, 0xe3, 0x6e, 0x73, 0x40, 0x28, 0x72, 0xf9, 0x46, 0x20, 0xb6, 0xd4, 0xb1, 0xdc, }; static const uint8_t TEE_ATTR_DH_PRIVATE_VALUE_VALUE01[] = { 0x53, 0x8d, 0x3d, 0x64, 0x27, 0x4a, 0x40, 0x05, 0x9b, 0x9c, 0x26, 0xe9, 0x13, 0xe6, 0x91, 0x53, 0x23, 0x7b, 0x55, 0x83, }; static const uint8_t TEE_ATTR_DH_PUBLIC_VALUE_2048_VALUE01[] = { 0xb4, 0x0d, 0x9a, 0x68, 0x60, 0xc3, 0x0f, 0x0c, 0x2a, 0xd3, 0x30, 0x4f, 0x4b, 0x54, 0x81, 0x26, 0xb9, 0xba, 0x58, 0x3c, 0xeb, 0x77, 0x45, 0xe1, 0x10, 0xc6, 0xfa, 0xce, 0xb9, 0xc6, 0x91, 0x55, 0x21, 0x3b, 0xea, 0x8a, 0x86, 0xcd, 0x5b, 0x9f, 0xc1, 0x9f, 0x64, 0xcc, 0x0d, 0x66, 0xfe, 0x33, 0x21, 0x28, 0xbc, 0x7f, 0xfe, 0xaf, 0xd3, 0x18, 0x8c, 0x52, 0x73, 0xb4, 0xe7, 0xba, 0x50, 0x5e, 0x98, 0x1e, 0xac, 0x7d, 0xb5, 0xf1, 0x2a, 0xd9, 0x50, 0x47, 0xfb, 0x6f, 0x1e, 0x34, 0xaa, 0x9d, 0xff, 0x31, 0x20, 0xb8, 0x55, 0x0f, 0xc5, 0x71, 0xb9, 0x34, 0x9f, 0x23, 0x39, 0xcd, 0x96, 0xde, 0x9c, 0x11, 0x9d, 0x0e, 0x6b, 0xe1, 0x0f, 0x69, 0x0a, 0x77, 0xc7, 0x5a, 0xed, 0xc5, 0x2a, 0x95, 0x90, 0xc7, 0x92, 0x94, 0xf8, 0x03, 0x81, 0xaa, 0xfc, 0x34, 0x3c, 0xec, 0x6b, 0x62, 0x4d, 0x03, 0x7a, 0x6a, 0x7c, 0x92, 0xf7, 0x2c, 0x38, 0x84, 0x33, 0x7e, 0xf3, 0xfd, 0xae, 0x20, 0xb0, 0xc6, 0x60, 0x76, 0x53, 0x60, 0xf3, 0x77, 0x50, 0x96, 0x0d, 0xbc, 0x40, 0xe4, 0x99, 0xfc, 0xe5, 0x79, 0xda, 0x3b, 0x65, 0x98, 0xfe, 0x28, 0x68, 0x68, 0xc6, 0x87, 0xbb, 0xc8, 0x12, 0x7c, 0x1d, 0x0b, 0x42, 0xe9, 0xb4, 0x6c, 0xd9, 0x1b, 0x23, 0xba, 0x34, 0x59, 0x3b, 0x86, 0x60, 0x45, 0xb6, 0x25, 0x48, 0x53, 0x7c, 0xc7, 0xf8, 0x24, 0xb8, 0xf6, 0x71, 0xb5, 0x42, 0x98, 0xde, 0x8c, 0x6e, 0x61, 0x7e, 0x1b, 0xf9, 0xab, 0x52, 0x4f, 0x03, 0xd1, 0xde, 0x30, 0xb4, 0x85, 0xa7, 0x3b, 0x97, 0xda, 0x97, 0x5f, 0xbe, 0x8a, 0xd6, 0x2e, 0x19, 0x91, 0x29, 0xb4, 0x66, 0x6d, 0x03, 0x73, 0x43, 0xbe, 0x13, 0x47, 0x82, 0x20, 0x80, 0x21, 0xf2, 0x3e, 0xbc, 0x66, 0xa6, 0x07, 0x38, 0x71, 0x77, 0xe4, }; static const uint8_t TEE_ATTR_DH_PUBLIC_VALUE_VALUE01[] = { 0xbb, 0xe9, 0x18, 0xdd, 0x4b, 0x2b, 0x94, 0x1b, 0x10, 0x0e, 0x88, 0x35, 0x28, 0x68, 0xfc, 0x62, 0x04, 0x38, 0xa6, 0xdb, 0x32, 0xa6, 0x9e, 0xee, 0x6c, 0x6f, 0x45, 0x1c, 0xa3, 0xa6, 0xd5, 0x37, 0x77, 0x75, 0x5b, 0xc1, 0x37, 0x0a, 0xce, 0xfe, 0x2b, 0x8f, 0x13, 0xa9, 0x14, 0x2c, 0x5b, 0x44, 0x15, 0x78, 0x86, 0x30, 0xd6, 0x95, 0xb1, 0x92, 0x20, 0x63, 0xa3, 0xcf, 0x9d, 0xef, 0x65, 0x61, 0x27, 0x4d, 0x24, 0x01, 0xe7, 0xa1, 0x45, 0xf2, 0xd8, 0xb9, 0x3a, 0x45, 0x17, 0xf4, 0x19, 0xd0, 0x5e, 0xf8, 0xcb, 0x35, 0x59, 0x37, 0x9d, 0x04, 0x20, 0xa3, 0xbf, 0x02, 0xad, 0xfe, 0xa8, 0x60, 0xb2, 0xc3, 0xee, 0x85, 0x58, 0x90, 0xf3, 0xb5, 0x57, 0x2b, 0xb4, 0xef, 0xd7, 0x8f, 0x37, 0x68, 0x78, 0x7c, 0x71, 0x52, 0x9d, 0x5e, 0x0a, 0x61, 0x4f, 0x09, 0x89, 0x92, 0x39, 0xf7, 0x4b, 0x01, }; static const uint8_t TEE_ATTR_DH_PUBLIC_VALUE_VALUE02[] = { 0xa3, 0xf5, 0x7d, 0xbe, 0x9e, 0x2f, 0x0a, 0xda, 0xa9, 0x4e, 0x4e, 0x6a, 0xf0, 0xe0, 0x71, 0x47, 0x0e, 0x2e, 0x41, 0x2e, 0xde, 0x73, 0x2a, 0x62, 0x14, 0xc3, 0x7c, 0x26, 0xd4, 0xe9, 0x9a, 0x54, 0xba, 0x3d, 0xe7, 0x49, 0x85, 0x95, 0x0e, 0xe9, 0x14, 0xb2, 0x90, 0x22, 0x91, 0xdc, 0xff, 0x61, 0xb2, 0xfc, 0xd1, 0xd0, 0x1b, 0x11, 0x14, 0xb6, 0x02, 0x64, 0x2b, 0x26, 0x5d, 0x88, 0xea, 0x8d, 0xbb, 0xe2, 0x07, 0x0b, 0x48, 0xfb, 0x01, 0x53, 0x55, 0x1e, 0x59, 0x51, 0x36, 0xf2, 0xf9, 0xd1, 0x97, 0xfb, 0x66, 0x12, 0x84, 0x5d, 0xed, 0xb8, 0x9b, 0x2d, 0x3e, 0x2b, 0x8c, 0xeb, 0x2a, 0x72, 0x40, 0x9d, 0x55, 0x4c, 0xed, 0xeb, 0x55, 0x02, 0xff, 0x8c, 0xb0, 0x2e, 0x03, 0x65, 0x3f, 0x41, 0xb1, 0xac, 0xa3, 0x30, 0x6b, 0xff, 0x6d, 0xf4, 0x6d, 0xe6, 0xe1, 0x0f, 0x86, 0x7c, 0x43, 0x64, }; static const uint8_t TEE_ATTR_DH_SUBPRIME_VALUE01[] = { 0x84, 0xbb, 0x73, 0xca, 0x02, 0xa8, 0x6e, 0x8b, 0xef, 0x44, 0x72, 0x06, 0xe0, 0xbe, 0xd2, 0x0e, 0xeb, 0x47, 0x9f, 0x4d, }; static const uint8_t TEE_ATTR_DSA_BASE_2048_VALUE01[] = { 0x20, 0x42, 0x09, 0x4c, 0xcb, 0xc8, 0xb8, 0x72, 0x3f, 0xc9, 0x28, 0xc1, 0x2f, 0xda, 0x67, 0x1b, 0x83, 0x29, 0x5e, 0x99, 0xc7, 0x43, 0x57, 0x6f, 0x44, 0x50, 0x4b, 0xe1, 0x18, 0x63, 0x23, 0x31, 0x9b, 0x50, 0x02, 0xd2, 0x4f, 0x17, 0x3d, 0xf9, 0x09, 0xea, 0x24, 0x1d, 0x6e, 0xa5, 0x28, 0x99, 0x04, 0xee, 0x46, 0x36, 0x20, 0x4b, 0x2f, 0xbe, 0x94, 0xb0, 0x68, 0xfe, 0x09, 0x3f, 0x79, 0x62, 0x57, 0x95, 0x49, 0x55, 0x1d, 0x3a, 0xf2, 0x19, 0xad, 0x8e, 0xd1, 0x99, 0x39, 0xef, 0xf8, 0x6b, 0xce, 0xc8, 0x34, 0xde, 0x2f, 0x2f, 0x78, 0x59, 0x6e, 0x89, 0xe7, 0xcb, 0x52, 0xc5, 0x24, 0xe1, 0x77, 0x09, 0x8a, 0x56, 0xc2, 0x32, 0xeb, 0x1f, 0x56, 0x3a, 0xa8, 0x4b, 0xc6, 0xb0, 0x26, 0xde, 0xee, 0x6f, 0xf5, 0x1c, 0xb4, 0x41, 0xe0, 0x80, 0xf2, 0xda, 0xfa, 0xea, 0x1c, 0xed, 0x86, 0x42, 0x7d, 0x1c, 0x34, 0x6b, 0xe5, 0x5c, 0x66, 0x80, 0x3d, 0x4b, 0x76, 0xd1, 0x33, 0xcd, 0x44, 0x5b, 0x4c, 0x34, 0x82, 0xfa, 0x41, 0x50, 0x23, 0x46, 0x3c, 0x9b, 0xf3, 0x0f, 0x2f, 0x78, 0x42, 0x23, 0xe2, 0x60, 0x57, 0xd3, 0xaa, 0x0d, 0x7f, 0xbb, 0x66, 0x06, 0x30, 0xc5, 0x2e, 0x49, 0xd4, 0xa0, 0x32, 0x5c, 0x73, 0x89, 0xe0, 0x72, 0xaa, 0x34, 0x9f, 0x13, 0xc9, 0x66, 0xe1, 0x59, 0x75, 0x2f, 0xbb, 0x71, 0xe9, 0x33, 0x68, 0x90, 0xf9, 0x32, 0x43, 0xfa, 0x6e, 0x72, 0xd2, 0x99, 0x36, 0x5e, 0xe5, 0xb3, 0xfe, 0x26, 0x6e, 0xbf, 0x11, 0x10, 0x56, 0x8f, 0xee, 0x44, 0x25, 0xc8, 0x47, 0xb5, 0x02, 0x10, 0xbd, 0x48, 0x4b, 0x97, 0x43, 0x1a, 0x42, 0x85, 0x6a, 0xdc, 0xa3, 0xe7, 0xd1, 0xa9, 0xc9, 0xc6, 0x75, 0xc7, 0xe2, 0x66, 0x91, 0x83, 0x20, 0xdd, 0x5a, 0x78, 0xa4, 0x8c, 0x48, 0xa9, }; static const uint8_t TEE_ATTR_DSA_BASE_3072_VALUE01[] = { 0x11, 0x0a, 0xfe, 0xbb, 0x12, 0xc7, 0xf8, 0x62, 0xb6, 0xde, 0x03, 0xd4, 0x7f, 0xdb, 0xc3, 0x32, 0x6e, 0x0d, 0x4d, 0x31, 0xb1, 0x2a, 0x8c, 0xa9, 0x5b, 0x2d, 0xee, 0x21, 0x23, 0xbc, 0xc6, 0x67, 0xd4, 0xf7, 0x2c, 0x1e, 0x72, 0x09, 0x76, 0x7d, 0x27, 0x21, 0xf9, 0x5f, 0xbd, 0x9a, 0x4d, 0x03, 0x23, 0x6d, 0x54, 0x17, 0x4f, 0xbf, 0xaf, 0xf2, 0xc4, 0xff, 0x7d, 0xea, 0xe4, 0x73, 0x8b, 0x20, 0xd9, 0xf3, 0x7b, 0xf0, 0xa1, 0x13, 0x4c, 0x28, 0x8b, 0x42, 0x0a, 0xf0, 0xb5, 0x79, 0x2e, 0x47, 0xa9, 0x25, 0x13, 0xc0, 0x41, 0x3f, 0x34, 0x6a, 0x4e, 0xdb, 0xab, 0x2c, 0x45, 0xbd, 0xca, 0x13, 0xf5, 0x34, 0x1c, 0x2b, 0x55, 0xb8, 0xba, 0x54, 0x93, 0x2b, 0x92, 0x17, 0xb5, 0xa8, 0x59, 0xe5, 0x53, 0xf1, 0x4b, 0xb8, 0xc1, 0x20, 0xfb, 0xb9, 0xd9, 0x99, 0x09, 0xdf, 0xf5, 0xea, 0x68, 0xe1, 0x4b, 0x37, 0x99, 0x64, 0xfd, 0x3f, 0x38, 0x61, 0xe5, 0xba, 0x5c, 0xc9, 0x70, 0xc4, 0xa1, 0x80, 0xee, 0xf5, 0x44, 0x28, 0x70, 0x39, 0x61, 0x02, 0x1e, 0x7b, 0xd6, 0x8c, 0xb6, 0x37, 0x92, 0x7b, 0x8c, 0xbe, 0xe6, 0x80, 0x5f, 0xa2, 0x72, 0x85, 0xbf, 0xee, 0x4d, 0x1e, 0xf7, 0x0e, 0x02, 0xc1, 0xa1, 0x8a, 0x7c, 0xd7, 0x8b, 0xef, 0x1d, 0xd9, 0xcd, 0xad, 0x45, 0xdd, 0xe9, 0xcd, 0x69, 0x07, 0x55, 0x05, 0x0f, 0xc4, 0x66, 0x29, 0x37, 0xee, 0x1d, 0x6f, 0x4d, 0xb1, 0x28, 0x07, 0xcc, 0xc9, 0x5b, 0xc4, 0x35, 0xf1, 0x1b, 0x71, 0xe7, 0x08, 0x60, 0x48, 0xb1, 0xda, 0xb5, 0x91, 0x3c, 0x60, 0x55, 0x01, 0x2d, 0xe8, 0x2e, 0x43, 0xa4, 0xe5, 0x0c, 0xf9, 0x3f, 0xef, 0xf5, 0xdc, 0xab, 0x81, 0x4a, 0xbc, 0x22, 0x4c, 0x5e, 0x00, 0x25, 0xbd, 0x86, 0x8c, 0x3f, 0xc5, 0x92, 0x04, 0x1b, 0xba, 0x04, 0x74, 0x7c, 0x10, 0xaf, 0x51, 0x3f, 0xc3, 0x6e, 0x4d, 0x91, 0xc6, 0x3e, 0xe5, 0x25, 0x34, 0x22, 0xcf, 0x40, 0x63, 0x39, 0x8d, 0x77, 0xc5, 0x2f, 0xcb, 0x01, 0x14, 0x27, 0xcb, 0xfc, 0xfa, 0x67, 0xb1, 0xb2, 0xc2, 0xd1, 0xaa, 0x4a, 0x3d, 0xa7, 0x26, 0x45, 0xcb, 0x1c, 0x76, 0x70, 0x36, 0x05, 0x4e, 0x2f, 0x31, 0xf8, 0x86, 0x65, 0xa5, 0x44, 0x61, 0xc8, 0x85, 0xfb, 0x32, 0x19, 0xd5, 0xad, 0x87, 0x48, 0xa0, 0x11, 0x58, 0xf6, 0xc7, 0xc0, 0xdf, 0x5a, 0x8c, 0x90, 0x8b, 0xa8, 0xc3, 0xe5, 0x36, 0x82, 0x24, 0x28, 0x88, 0x6c, 0x7b, 0x50, 0x0b, 0xbc, 0x15, 0xb4, 0x9d, 0xf7, 0x46, 0xb9, 0xde, 0x5a, 0x78, 0xfe, 0x3b, 0x4f, 0x69, 0x91, 0xd0, 0x11, 0x0c, 0x3c, 0xbf, 0xf4, 0x58, 0x03, 0x9d, 0xc3, 0x62, 0x61, 0xcf, 0x46, 0xaf, 0x4b, 0xc2, 0x51, 0x53, 0x68, 0xf4, 0xab, 0xb7, }; static const uint8_t TEE_ATTR_DSA_BASE_768_VALUE01[] = { 0x9a, 0x09, 0x32, 0xb3, 0x8c, 0xb2, 0x10, 0x5b, 0x93, 0x00, 0xdc, 0xb8, 0x66, 0xc0, 0x66, 0xd9, 0xce, 0xc6, 0x43, 0x19, 0x2f, 0xcb, 0x28, 0x34, 0xa1, 0x23, 0x9d, 0xba, 0x28, 0xbd, 0x09, 0xfe, 0x01, 0x00, 0x1e, 0x04, 0x51, 0xf9, 0xd6, 0x35, 0x1f, 0x6e, 0x56, 0x4a, 0xfb, 0xc8, 0xf8, 0xc3, 0x9b, 0x10, 0x59, 0x86, 0x3e, 0xbd, 0x09, 0x85, 0x09, 0x0b, 0xd5, 0x5c, 0x82, 0x8e, 0x9f, 0xc1, 0x57, 0xac, 0x7d, 0xa3, 0xcf, 0xc2, 0x89, 0x2a, 0x0e, 0xd9, 0xb9, 0x32, 0x39, 0x05, 0x82, 0xf2, 0x97, 0x1e, 0x4a, 0x0c, 0x48, 0x3e, 0x06, 0x22, 0xd7, 0x31, 0x66, 0xbf, 0x62, 0xa5, 0x9f, 0x26, }; static const uint8_t TEE_ATTR_DSA_PRIME_2048_VALUE01[] = { 0xaa, 0x81, 0x5c, 0x9d, 0xb1, 0xc4, 0xd3, 0xd2, 0x77, 0x3c, 0x7d, 0x0d, 0x4d, 0x1d, 0xa7, 0x5e, 0xcf, 0xc4, 0xa3, 0x9e, 0x97, 0xd5, 0xfa, 0x19, 0x1f, 0xfe, 0xc8, 0xb1, 0x49, 0x0a, 0x29, 0x0c, 0xe3, 0x35, 0xe5, 0xce, 0x87, 0xea, 0x62, 0x0a, 0x8a, 0x17, 0xde, 0x0b, 0xb6, 0x47, 0x14, 0xe2, 0xec, 0x84, 0x0b, 0xf0, 0x0e, 0x6e, 0xbd, 0xb4, 0xff, 0xb4, 0xe3, 0x24, 0xca, 0x07, 0xc3, 0xc8, 0x71, 0x73, 0x09, 0xaf, 0x14, 0x10, 0x36, 0x2a, 0x77, 0x2c, 0x9a, 0xdd, 0x83, 0x8b, 0x2b, 0x0c, 0xae, 0x1e, 0x90, 0xab, 0x44, 0x8a, 0xda, 0xbd, 0xac, 0xd2, 0xe5, 0xdf, 0x59, 0xc4, 0x18, 0x7a, 0x32, 0xa2, 0x37, 0x19, 0xd6, 0xc5, 0x7e, 0x94, 0x00, 0x88, 0x53, 0x83, 0xbf, 0x8f, 0x06, 0x6f, 0x23, 0xb9, 0x41, 0x92, 0x0d, 0x54, 0xc3, 0x5b, 0x4f, 0x7c, 0xc5, 0x04, 0x4f, 0x3b, 0x40, 0xf1, 0x70, 0x46, 0x95, 0x63, 0x07, 0xb7, 0x48, 0xe8, 0x40, 0x73, 0x28, 0x44, 0xd0, 0x0a, 0x9c, 0xe6, 0xec, 0x57, 0x14, 0x29, 0x3b, 0x62, 0x65, 0x14, 0x7f, 0x15, 0xc6, 0x7f, 0x4b, 0xe3, 0x8b, 0x08, 0x2b, 0x55, 0xfd, 0xea, 0xdb, 0x61, 0x24, 0x68, 0x9f, 0xb7, 0x6f, 0x9d, 0x25, 0xcc, 0x28, 0xb8, 0xea, 0xa9, 0x8b, 0x56, 0x2d, 0x5c, 0x10, 0x11, 0xe0, 0xdc, 0xf9, 0xb3, 0x99, 0x23, 0x24, 0x0d, 0x33, 0x2d, 0x89, 0xdc, 0x96, 0x03, 0xb7, 0xbd, 0xdd, 0x0c, 0x70, 0xb8, 0x3c, 0xaa, 0x29, 0x05, 0x63, 0x1b, 0x1c, 0x83, 0xca, 0xbb, 0xae, 0x6c, 0x0c, 0x0c, 0x2e, 0xfe, 0x8f, 0x58, 0x13, 0x1e, 0xd8, 0x35, 0x1b, 0xf9, 0x3e, 0x87, 0x5f, 0x6a, 0x73, 0xa9, 0x3c, 0xba, 0xd4, 0x70, 0x14, 0x1a, 0x26, 0x87, 0xfb, 0xac, 0xf2, 0xd7, 0x1c, 0x8d, 0xde, 0xe9, 0x71, 0xad, 0x66, 0x07, 0x29, 0xad, }; static const uint8_t TEE_ATTR_DSA_PRIME_3072_VALUE01[] = { 0xc7, 0xb8, 0x6d, 0x70, 0x44, 0x21, 0x8e, 0x36, 0x74, 0x53, 0xd2, 0x10, 0xe7, 0x64, 0x33, 0xe4, 0xe2, 0x7a, 0x98, 0x3d, 0xb1, 0xc5, 0x60, 0xbb, 0x97, 0x55, 0xa8, 0xfb, 0x7d, 0x81, 0x99, 0x12, 0xc5, 0x6c, 0xfe, 0x00, 0x2a, 0xb1, 0xff, 0x3f, 0x72, 0x16, 0x5b, 0x94, 0x3c, 0x0b, 0x28, 0xed, 0x46, 0x03, 0x9a, 0x07, 0xde, 0x50, 0x7d, 0x7a, 0x29, 0xf7, 0x38, 0x60, 0x3d, 0xec, 0xd1, 0x27, 0x03, 0x80, 0xa4, 0x1f, 0x97, 0x1f, 0x25, 0x92, 0x66, 0x1a, 0x64, 0xba, 0x2f, 0x35, 0x1d, 0x9a, 0x69, 0xe5, 0x1a, 0x88, 0x8a, 0x05, 0x15, 0x6b, 0x7f, 0xe1, 0x56, 0x3c, 0x4b, 0x77, 0xee, 0x93, 0xa4, 0x49, 0x49, 0x13, 0x84, 0x38, 0xa2, 0xab, 0x8b, 0xdc, 0xfc, 0x49, 0xb4, 0xe7, 0x8d, 0x1c, 0xde, 0x76, 0x6e, 0x54, 0x98, 0x47, 0x60, 0x05, 0x7d, 0x76, 0xcd, 0x74, 0x0c, 0x94, 0xa4, 0xdd, 0x25, 0xa4, 0x6a, 0xa7, 0x7b, 0x18, 0xe9, 0xd7, 0x07, 0xd6, 0x73, 0x84, 0x97, 0xd4, 0xea, 0xc3, 0x64, 0xf4, 0x79, 0x2d, 0x97, 0x66, 0xa1, 0x6a, 0x0e, 0x23, 0x48, 0x07, 0xe9, 0x6b, 0x8c, 0x64, 0xd4, 0x04, 0xbb, 0xdb, 0x87, 0x6e, 0x39, 0xb5, 0x79, 0x9e, 0xf5, 0x3f, 0xe6, 0xcb, 0x9b, 0xab, 0x62, 0xef, 0x19, 0xfd, 0xcc, 0x2b, 0xdd, 0x90, 0x5b, 0xed, 0xa1, 0x3b, 0x9e, 0xf7, 0xac, 0x35, 0xf1, 0xf5, 0x57, 0xcb, 0x0d, 0xc4, 0x58, 0xc0, 0x19, 0xe2, 0xbc, 0x19, 0xa9, 0xf5, 0xdf, 0xc1, 0xe4, 0xec, 0xa9, 0xe6, 0xd4, 0x66, 0x56, 0x41, 0x24, 0x30, 0x4a, 0x31, 0xf0, 0x38, 0x60, 0x5a, 0x3e, 0x34, 0x2d, 0xa0, 0x1b, 0xe1, 0xc2, 0xb5, 0x45, 0x61, 0x0e, 0xdd, 0x2c, 0x13, 0x97, 0xa3, 0xc8, 0x39, 0x65, 0x88, 0xc6, 0x32, 0x9e, 0xfe, 0xb4, 0xe1, 0x65, 0xaf, 0x5b, 0x36, 0x8a, 0x39, 0xa8, 0x8e, 0x48, 0x88, 0xe3, 0x9f, 0x40, 0xbb, 0x3d, 0xe4, 0xeb, 0x14, 0x16, 0x67, 0x2f, 0x99, 0x9f, 0xea, 0xd3, 0x7a, 0xef, 0x1c, 0xa9, 0x64, 0x3f, 0xf3, 0x2c, 0xdb, 0xc0, 0xfc, 0xeb, 0xe6, 0x28, 0xd7, 0xe4, 0x6d, 0x28, 0x1a, 0x98, 0x9d, 0x43, 0xdd, 0x21, 0x43, 0x21, 0x51, 0xaf, 0x68, 0xbe, 0x3f, 0x6d, 0x56, 0xac, 0xfb, 0xdb, 0x6c, 0x97, 0xd8, 0x7f, 0xcb, 0x5e, 0x62, 0x91, 0xbf, 0x8b, 0x4e, 0xe1, 0x27, 0x5a, 0xe0, 0xeb, 0x43, 0x83, 0xcc, 0x75, 0x39, 0x03, 0xc8, 0xd2, 0x9f, 0x4a, 0xdb, 0x6a, 0x54, 0x7e, 0x40, 0x5d, 0xec, 0xdf, 0xf2, 0x88, 0xc5, 0xf6, 0xc7, 0xaa, 0x30, 0xdc, 0xb1, 0x2f, 0x84, 0xd3, 0x92, 0x49, 0x3a, 0x70, 0x93, 0x33, 0x17, 0xc0, 0xf5, 0xe6, 0x55, 0x26, 0x01, 0xfa, 0xe1, 0x8f, 0x17, 0xe6, 0xe5, 0xbb, 0x6b, 0xf3, 0x96, 0xd3, 0x2d, 0x8a, 0xb9, }; static const uint8_t TEE_ATTR_DSA_PRIME_768_VALUE01[] = { 0xf6, 0xad, 0x20, 0x71, 0xe1, 0x5a, 0x4b, 0x9c, 0x2b, 0x7e, 0x53, 0x26, 0xda, 0x43, 0x9d, 0xc1, 0x47, 0x4c, 0x1a, 0xd1, 0x6f, 0x2f, 0x85, 0xe9, 0x2c, 0xea, 0x89, 0xfc, 0xdc, 0x74, 0x66, 0x11, 0xcf, 0x30, 0xdd, 0xc8, 0x5e, 0x33, 0xf5, 0x83, 0xc1, 0x9d, 0x10, 0xbc, 0x1a, 0xc3, 0x93, 0x22, 0x26, 0x24, 0x6f, 0xa7, 0xb9, 0xe0, 0xdd, 0x25, 0x77, 0xb5, 0xf4, 0x27, 0x59, 0x4c, 0x39, 0xfa, 0xeb, 0xfc, 0x59, 0x8a, 0x32, 0xe1, 0x74, 0xcb, 0x8a, 0x68, 0x03, 0x57, 0xf8, 0x62, 0xf2, 0x0b, 0x6e, 0x84, 0x32, 0xa5, 0x30, 0x65, 0x2f, 0x1c, 0x21, 0x39, 0xae, 0x1f, 0xaf, 0x76, 0x8b, 0x83, }; static const uint8_t TEE_ATTR_DSA_PRIVATE_VALUE_160_VALUE01[] = { 0x70, 0x4a, 0x46, 0xc6, 0x25, 0x2a, 0x95, 0xa3, 0x9b, 0x40, 0xe0, 0x43, 0x5a, 0x69, 0x1b, 0xad, 0xae, 0x52, 0xa5, 0xc0, }; static const uint8_t TEE_ATTR_DSA_PRIVATE_VALUE_224_VALUE01[] = { 0x7b, 0x48, 0x90, 0x21, 0x57, 0x8e, 0x79, 0xe7, 0xbd, 0x3e, 0xe7, 0xab, 0x45, 0x6f, 0x65, 0x9f, 0x3d, 0xc0, 0x7c, 0x88, 0xf5, 0xc9, 0xa3, 0x9e, 0x4f, 0x8c, 0xee, 0x81, }; static const uint8_t TEE_ATTR_DSA_PRIVATE_VALUE_256_VALUE01[] = { 0x34, 0x70, 0x83, 0x20, 0x55, 0xda, 0xde, 0x94, 0xe1, 0x4c, 0xd8, 0x77, 0x71, 0x71, 0xd1, 0x8e, 0x5d, 0x06, 0xf6, 0x6a, 0xef, 0xf4, 0xc6, 0x14, 0x71, 0xe4, 0xeb, 0xa7, 0x4e, 0xe5, 0x61, 0x64, }; static const uint8_t TEE_ATTR_DSA_PUBLIC_VALUE_2048_VALUE01[] = { 0x1a, 0xe1, 0x0c, 0x78, 0x6a, 0xd0, 0x90, 0x2c, 0x5c, 0x68, 0x5d, 0xae, 0x5c, 0x71, 0x21, 0x41, 0x8a, 0x37, 0x7b, 0x88, 0x8b, 0x5f, 0x2f, 0x2b, 0xc7, 0x66, 0x23, 0x57, 0x0f, 0xd6, 0x2b, 0xcb, 0x19, 0x0b, 0x47, 0x1a, 0xd5, 0x35, 0x9c, 0x5f, 0x06, 0x2f, 0x88, 0x19, 0x28, 0x9e, 0x95, 0x6d, 0x8a, 0xa6, 0xf9, 0x0d, 0x1f, 0x8c, 0xf1, 0xee, 0x72, 0xd3, 0xa1, 0xbd, 0xfd, 0x56, 0xc4, 0x78, 0xdc, 0x29, 0xa1, 0x9c, 0x45, 0x69, 0xb5, 0xa6, 0x0e, 0x3a, 0x8f, 0x34, 0xf6, 0x06, 0x56, 0xea, 0xc5, 0xb2, 0x5d, 0xde, 0x55, 0x14, 0xa5, 0xc6, 0x7b, 0x67, 0x54, 0x23, 0x20, 0x4f, 0x6c, 0xca, 0xf0, 0x99, 0x06, 0x17, 0xcc, 0x73, 0x55, 0xb9, 0xd3, 0xed, 0x86, 0x89, 0x78, 0xa2, 0x52, 0x02, 0x0a, 0x76, 0x9e, 0xd5, 0x9a, 0x6e, 0xda, 0xa6, 0xef, 0xe3, 0x37, 0x7e, 0xef, 0x45, 0xf3, 0xf6, 0xf3, 0xe6, 0x41, 0x79, 0xcc, 0x7d, 0xb8, 0xb1, 0x43, 0xfb, 0x83, 0x5c, 0x5d, 0x71, 0xbf, 0xcf, 0xa1, 0xe2, 0xa9, 0x04, 0x9b, 0xcc, 0xf7, 0xfe, 0x9a, 0xb5, 0x75, 0x46, 0x22, 0x0f, 0xe3, 0xf4, 0xb7, 0x52, 0x1c, 0x86, 0x17, 0x39, 0xd1, 0x38, 0x50, 0x7e, 0x81, 0xa4, 0x6a, 0x69, 0x93, 0x60, 0x54, 0x41, 0xdc, 0xb9, 0x0d, 0x6e, 0xe4, 0xaf, 0xbc, 0x42, 0xca, 0xbe, 0x90, 0xa2, 0x54, 0x44, 0x49, 0x68, 0x10, 0x9d, 0x7e, 0xdd, 0x96, 0x94, 0xa0, 0x23, 0x23, 0x9f, 0x1d, 0x56, 0x17, 0x5d, 0xd1, 0xfa, 0xc1, 0x15, 0x91, 0x5e, 0x24, 0xfa, 0xb5, 0x63, 0xf4, 0xfc, 0x3f, 0x26, 0x9b, 0xed, 0x2f, 0x30, 0x08, 0x32, 0xd1, 0x12, 0x59, 0x64, 0x85, 0xa7, 0x11, 0x41, 0x7a, 0xa7, 0x3b, 0xb4, 0xac, 0x72, 0xa6, 0x51, 0xa1, 0xfa, 0x5b, 0xae, 0xd3, 0x63, 0x6c, 0x72, 0x0d, 0x39, 0x70, 0x08, }; static const uint8_t TEE_ATTR_DSA_PUBLIC_VALUE_3072_VALUE01[] = { 0x45, 0x6a, 0x10, 0x5c, 0x71, 0x35, 0x66, 0x23, 0x48, 0x38, 0xbc, 0x07, 0x0b, 0x8a, 0x75, 0x1a, 0x0b, 0x57, 0x76, 0x7c, 0xb7, 0x5e, 0x99, 0x11, 0x4a, 0x1a, 0x46, 0x64, 0x1e, 0x11, 0xda, 0x1f, 0xa9, 0xf2, 0x29, 0x14, 0xd8, 0x08, 0xad, 0x71, 0x48, 0x61, 0x2c, 0x1e, 0xa5, 0x5d, 0x25, 0x30, 0x17, 0x81, 0xe9, 0xae, 0x0c, 0x9a, 0xe3, 0x6a, 0x69, 0xd8, 0x7b, 0xa0, 0x39, 0xec, 0x7c, 0xd8, 0x64, 0xc3, 0xad, 0x09, 0x48, 0x73, 0xe6, 0xe5, 0x67, 0x09, 0xfd, 0x10, 0xd9, 0x66, 0x85, 0x3d, 0x61, 0x1b, 0x1c, 0xff, 0x15, 0xd3, 0x7f, 0xde, 0xe4, 0x24, 0x50, 0x6c, 0x18, 0x4d, 0x62, 0xc7, 0x03, 0x33, 0x58, 0xbe, 0x78, 0xc2, 0x25, 0x09, 0x43, 0xb6, 0xf6, 0xd0, 0x43, 0xd6, 0x3b, 0x31, 0x7d, 0xe5, 0x6e, 0x5a, 0xd8, 0xd1, 0xfd, 0x97, 0xdd, 0x35, 0x5a, 0xbe, 0x96, 0x45, 0x2f, 0x8e, 0x43, 0x54, 0x85, 0xfb, 0x3b, 0x90, 0x7b, 0x51, 0x90, 0x0a, 0xa3, 0xf2, 0x44, 0x18, 0xdf, 0x50, 0xb4, 0xfc, 0xda, 0xfb, 0xf6, 0x13, 0x75, 0x48, 0xc3, 0x93, 0x73, 0xb8, 0xbc, 0x4b, 0xa3, 0xda, 0xbb, 0x47, 0x46, 0xeb, 0xd1, 0x7b, 0x87, 0xfc, 0xd6, 0xa2, 0xf1, 0x97, 0xc1, 0x07, 0xb1, 0x8e, 0xc5, 0xb4, 0x65, 0xe6, 0xe4, 0xcb, 0x43, 0x0d, 0x9c, 0x0c, 0xe7, 0x8d, 0xa5, 0x98, 0x84, 0x41, 0x05, 0x4a, 0x37, 0x07, 0x92, 0xb7, 0x30, 0xda, 0x9a, 0xba, 0x41, 0xa3, 0x16, 0x9a, 0xf2, 0x61, 0x76, 0xf7, 0x4e, 0x6f, 0x7c, 0x0c, 0x9c, 0x9b, 0x55, 0xb6, 0x2b, 0xbe, 0x7c, 0xe3, 0x8d, 0x46, 0x95, 0xd4, 0x81, 0x57, 0xe6, 0x60, 0xc2, 0xac, 0xb6, 0x3f, 0x48, 0x2f, 0x55, 0x41, 0x81, 0x50, 0xe5, 0xfe, 0xe4, 0x3a, 0xce, 0x84, 0xc5, 0x40, 0xc3, 0xba, 0x76, 0x62, 0xae, 0x80, 0x83, 0x5c, 0x1a, 0x2d, 0x51, 0x89, 0x0e, 0xa9, 0x6b, 0xa2, 0x06, 0x42, 0x7c, 0x41, 0xef, 0x8c, 0x38, 0xaa, 0x07, 0xd2, 0xa3, 0x65, 0xe7, 0xe5, 0x83, 0x80, 0xd8, 0xf4, 0x78, 0x2e, 0x22, 0xac, 0x21, 0x01, 0xaf, 0x73, 0x2e, 0xe2, 0x27, 0x58, 0x33, 0x7b, 0x25, 0x36, 0x37, 0x83, 0x8e, 0x16, 0xf5, 0x0f, 0x56, 0xd3, 0x13, 0xd0, 0x79, 0x81, 0x88, 0x0d, 0x68, 0x55, 0x57, 0xf7, 0xd7, 0x9a, 0x6d, 0xb8, 0x23, 0xc6, 0x1f, 0x1b, 0xb3, 0xdb, 0xc5, 0xd5, 0x04, 0x21, 0xa4, 0x84, 0x3a, 0x6f, 0x29, 0x69, 0x0e, 0x78, 0xaa, 0x0f, 0x0c, 0xff, 0x30, 0x42, 0x31, 0x81, 0x8b, 0x81, 0xfc, 0x4a, 0x24, 0x3f, 0xc0, 0x0f, 0x09, 0xa5, 0x4c, 0x46, 0x6d, 0x6a, 0x8c, 0x73, 0xd3, 0x2a, 0x55, 0xe1, 0xab, 0xd5, 0xec, 0x8b, 0x4e, 0x1a, 0xfa, 0x32, 0xa7, 0x9b, 0x01, 0xdf, 0x85, 0xa8, 0x1f, 0x3f, 0x5c, 0xfe, }; static const uint8_t TEE_ATTR_DSA_PUBLIC_VALUE_768_VALUE01[] = { 0x52, 0x9d, 0xed, 0x98, 0xa2, 0x32, 0x09, 0x85, 0xfc, 0x84, 0xb6, 0x5a, 0x9d, 0xc8, 0xd4, 0xfe, 0x41, 0xad, 0xa6, 0xe3, 0x59, 0x3d, 0x70, 0x4f, 0x08, 0x98, 0xc1, 0x4e, 0xc2, 0x46, 0x34, 0xdd, 0xf5, 0xf1, 0xdb, 0x47, 0xcc, 0x49, 0x15, 0xfc, 0xe1, 0xe2, 0x67, 0x4d, 0x2e, 0xcd, 0x98, 0xd5, 0x8b, 0x59, 0x8e, 0x8d, 0xdf, 0xaf, 0xf3, 0x0e, 0x88, 0x26, 0xf5, 0x0a, 0xab, 0x40, 0x27, 0xb5, 0xaa, 0xb8, 0x87, 0xc1, 0x9a, 0xd9, 0x6d, 0x7e, 0x57, 0xde, 0x53, 0x90, 0xad, 0x8e, 0x55, 0x57, 0xb4, 0x1a, 0x80, 0x19, 0xc9, 0x0d, 0x80, 0x60, 0x71, 0x79, 0xb5, 0x4e, 0xb0, 0xad, 0x4d, 0x23, }; static const uint8_t TEE_ATTR_DSA_SUBPRIME_160_VALUE01[] = { 0x87, 0x44, 0xe4, 0xdd, 0xc6, 0xd0, 0x19, 0xa5, 0xea, 0xc2, 0xb1, 0x5a, 0x15, 0xd7, 0xe1, 0xc7, 0xf6, 0x63, 0x35, 0xf7, }; static const uint8_t TEE_ATTR_DSA_SUBPRIME_224_VALUE01[] = { 0xea, 0x34, 0x7e, 0x90, 0xbe, 0x7c, 0x28, 0x75, 0xd1, 0xfe, 0x1d, 0xb6, 0x22, 0xb4, 0x76, 0x38, 0x37, 0xc5, 0xe2, 0x7a, 0x60, 0x37, 0x31, 0x03, 0x48, 0xc1, 0xaa, 0x11, }; static const uint8_t TEE_ATTR_DSA_SUBPRIME_256_VALUE01[] = { 0x87, 0x6f, 0xa0, 0x9e, 0x1d, 0xc6, 0x2b, 0x23, 0x6c, 0xe1, 0xc3, 0x15, 0x5b, 0xa4, 0x8b, 0x0c, 0xcf, 0xda, 0x29, 0xf3, 0xac, 0x5a, 0x97, 0xf7, 0xff, 0xa1, 0xbd, 0x87, 0xb6, 0x8d, 0x2a, 0x4b, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P192_VALUE01[] = { 0xf1, 0x7d, 0x3f, 0xea, 0x36, 0x7b, 0x74, 0xd3, 0x40, 0x85, 0x1c, 0xa4, 0x27, 0x0d, 0xcb, 0x24, 0xc2, 0x71, 0xf4, 0x45, 0xbe, 0xd9, 0xd5, 0x27, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P224_VALUE01[] = { 0x83, 0x46, 0xa6, 0x0f, 0xc6, 0xf2, 0x93, 0xca, 0x5a, 0x0d, 0x2a, 0xf6, 0x8b, 0xa7, 0x1d, 0x1d, 0xd3, 0x89, 0xe5, 0xe4, 0x08, 0x37, 0x94, 0x2d, 0xf3, 0xe4, 0x3c, 0xbd, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P256_VALUE01[] = { 0x7d, 0x7d, 0xc5, 0xf7, 0x1e, 0xb2, 0x9d, 0xda, 0xf8, 0x0d, 0x62, 0x14, 0x63, 0x2e, 0xea, 0xe0, 0x3d, 0x90, 0x58, 0xaf, 0x1f, 0xb6, 0xd2, 0x2e, 0xd8, 0x0b, 0xad, 0xb6, 0x2b, 0xc1, 0xa5, 0x34, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P384_VALUE01[] = { 0x3c, 0xc3, 0x12, 0x2a, 0x68, 0xf0, 0xd9, 0x50, 0x27, 0xad, 0x38, 0xc0, 0x67, 0x91, 0x6b, 0xa0, 0xeb, 0x8c, 0x38, 0x89, 0x4d, 0x22, 0xe1, 0xb1, 0x56, 0x18, 0xb6, 0x81, 0x8a, 0x66, 0x17, 0x74, 0xad, 0x46, 0x3b, 0x20, 0x5d, 0xa8, 0x8c, 0xf6, 0x99, 0xab, 0x4d, 0x43, 0xc9, 0xcf, 0x98, 0xa1, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDH_P521_VALUE01[] = { 0x00, 0x00, 0x01, 0x7e, 0xec, 0xc0, 0x7a, 0xb4, 0xb3, 0x29, 0x06, 0x8f, 0xba, 0x65, 0xe5, 0x6a, 0x1f, 0x88, 0x90, 0xaa, 0x93, 0x5e, 0x57, 0x13, 0x4a, 0xe0, 0xff, 0xcc, 0xe8, 0x02, 0x73, 0x51, 0x51, 0xf4, 0xea, 0xc6, 0x56, 0x4f, 0x6e, 0xe9, 0x97, 0x4c, 0x5e, 0x68, 0x87, 0xa1, 0xfe, 0xfe, 0xe5, 0x74, 0x3a, 0xe2, 0x24, 0x1b, 0xfe, 0xb9, 0x5d, 0x5c, 0xe3, 0x1d, 0xdc, 0xb6, 0xf9, 0xed, 0xb4, 0xd6, 0xfc, 0x47, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P192_VALUE01[] = { 0xe1, 0x4f, 0x37, 0xb3, 0xd1, 0x37, 0x4f, 0xf8, 0xb0, 0x3f, 0x41, 0xb9, 0xb3, 0xfd, 0xd2, 0xf0, 0xeb, 0xcc, 0xf2, 0x75, 0xd6, 0x60, 0xd7, 0xf3, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P224_VALUE01[] = { 0x97, 0xc4, 0xb7, 0x96, 0xe1, 0x63, 0x9d, 0xd1, 0x03, 0x5b, 0x70, 0x8f, 0xc0, 0x0d, 0xc7, 0xba, 0x16, 0x82, 0xce, 0xc4, 0x4a, 0x10, 0x02, 0xa1, 0xa8, 0x20, 0x61, 0x9f, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P256_VALUE01[] = { 0xbe, 0x34, 0xba, 0xa8, 0xd0, 0x40, 0xa3, 0xb9, 0x91, 0xf9, 0x07, 0x5b, 0x56, 0xba, 0x29, 0x2f, 0x75, 0x5b, 0x90, 0xe4, 0xb6, 0xdc, 0x10, 0xda, 0xd3, 0x67, 0x15, 0xc3, 0x3c, 0xfd, 0xac, 0x25, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P384_VALUE01[] = { 0xa4, 0x92, 0xce, 0x8f, 0xa9, 0x00, 0x84, 0xc2, 0x27, 0xe1, 0xa3, 0x2f, 0x79, 0x74, 0xd3, 0x9e, 0x9f, 0xf6, 0x7a, 0x7e, 0x87, 0x05, 0xec, 0x34, 0x19, 0xb3, 0x5f, 0xb6, 0x07, 0x58, 0x2b, 0xeb, 0xd4, 0x61, 0xe0, 0xb1, 0x52, 0x0a, 0xc7, 0x6e, 0xc2, 0xdd, 0x4e, 0x9b, 0x63, 0xeb, 0xae, 0x71, }; static const uint8_t TEE_ATTR_ECC_PRIVATE_VALUE_ECDSA_P521_VALUE01[] = { 0x01, 0xbd, 0x56, 0xbd, 0x10, 0x61, 0x18, 0xed, 0xa2, 0x46, 0x15, 0x5b, 0xd4, 0x3b, 0x42, 0xb8, 0xe1, 0x3f, 0x0a, 0x6e, 0x25, 0xdd, 0x3b, 0xb3, 0x76, 0x02, 0x6f, 0xab, 0x4d, 0xc9, 0x2b, 0x61, 0x57, 0xbc, 0x6d, 0xfe, 0xc2, 0xd1, 0x5d, 0xd3, 0xd0, 0xcf, 0x2a, 0x39, 0xaa, 0x68, 0x49, 0x40, 0x42, 0xaf, 0x48, 0xba, 0x96, 0x01, 0x11, 0x8d, 0xa8, 0x2c, 0x6f, 0x21, 0x08, 0xa3, 0xa2, 0x03, 0xad, 0x74, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P192_VALUE01[] = { 0xb1, 0x50, 0x53, 0x40, 0x1f, 0x57, 0x28, 0x56, 0x37, 0xec, 0x32, 0x4c, 0x1c, 0xd2, 0x13, 0x9e, 0x3a, 0x67, 0xde, 0x37, 0x39, 0x23, 0x4b, 0x37, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P192_VALUE02[] = { 0x42, 0xea, 0x6d, 0xd9, 0x96, 0x9d, 0xd2, 0xa6, 0x1f, 0xea, 0x1a, 0xac, 0x7f, 0x8e, 0x98, 0xed, 0xcc, 0x89, 0x6c, 0x6e, 0x55, 0x85, 0x7c, 0xc0, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P224_VALUE01[] = { 0x8d, 0xe2, 0xe2, 0x6a, 0xdf, 0x72, 0xc5, 0x82, 0xd6, 0x56, 0x8e, 0xf6, 0x38, 0xc4, 0xfd, 0x59, 0xb1, 0x8d, 0xa1, 0x71, 0xbd, 0xf5, 0x01, 0xf1, 0xd9, 0x29, 0xe0, 0x48, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P224_VALUE02[] = { 0xaf, 0x33, 0xcd, 0x06, 0x29, 0xbc, 0x7e, 0x99, 0x63, 0x20, 0xa3, 0xf4, 0x03, 0x68, 0xf7, 0x4d, 0xe8, 0x70, 0x4f, 0xa3, 0x7b, 0x8f, 0xab, 0x69, 0xab, 0xaa, 0xe2, 0x80, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P256_VALUE01[] = { 0xea, 0xd2, 0x18, 0x59, 0x01, 0x19, 0xe8, 0x87, 0x6b, 0x29, 0x14, 0x6f, 0xf8, 0x9c, 0xa6, 0x17, 0x70, 0xc4, 0xed, 0xbb, 0xf9, 0x7d, 0x38, 0xce, 0x38, 0x5e, 0xd2, 0x81, 0xd8, 0xa6, 0xb2, 0x30, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P256_VALUE02[] = { 0x70, 0x0c, 0x48, 0xf7, 0x7f, 0x56, 0x58, 0x4c, 0x5c, 0xc6, 0x32, 0xca, 0x65, 0x64, 0x0d, 0xb9, 0x1b, 0x6b, 0xac, 0xce, 0x3a, 0x4d, 0xf6, 0xb4, 0x2c, 0xe7, 0xcc, 0x83, 0x88, 0x33, 0xd2, 0x87, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P384_VALUE01[] = { 0x98, 0x03, 0x80, 0x7f, 0x2f, 0x6d, 0x2f, 0xd9, 0x66, 0xcd, 0xd0, 0x29, 0x0b, 0xd4, 0x10, 0xc0, 0x19, 0x03, 0x52, 0xfb, 0xec, 0x7f, 0xf6, 0x24, 0x7d, 0xe1, 0x30, 0x2d, 0xf8, 0x6f, 0x25, 0xd3, 0x4f, 0xe4, 0xa9, 0x7b, 0xef, 0x60, 0xcf, 0xf5, 0x48, 0x35, 0x5c, 0x01, 0x5d, 0xbb, 0x3e, 0x5f, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P384_VALUE02[] = { 0xa7, 0xc7, 0x6b, 0x97, 0x0c, 0x3b, 0x5f, 0xe8, 0xb0, 0x5d, 0x28, 0x38, 0xae, 0x04, 0xab, 0x47, 0x69, 0x7b, 0x9e, 0xaf, 0x52, 0xe7, 0x64, 0x59, 0x2e, 0xfd, 0xa2, 0x7f, 0xe7, 0x51, 0x32, 0x72, 0x73, 0x44, 0x66, 0xb4, 0x00, 0x09, 0x1a, 0xdb, 0xf2, 0xd6, 0x8c, 0x58, 0xe0, 0xc5, 0x00, 0x66, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P521_VALUE01[] = { 0x00, 0x00, 0x00, 0x60, 0x2f, 0x9d, 0x0c, 0xf9, 0xe5, 0x26, 0xb2, 0x9e, 0x22, 0x38, 0x1c, 0x20, 0x3c, 0x48, 0xa8, 0x86, 0xc2, 0xb0, 0x67, 0x30, 0x33, 0x36, 0x63, 0x14, 0xf1, 0xff, 0xbc, 0xba, 0x24, 0x0b, 0xa4, 0x2f, 0x4e, 0xf3, 0x8a, 0x76, 0x17, 0x46, 0x35, 0xf9, 0x1e, 0x6b, 0x4e, 0xd3, 0x42, 0x75, 0xeb, 0x01, 0xc8, 0x46, 0x7d, 0x05, 0xca, 0x80, 0x31, 0x5b, 0xf1, 0xa7, 0xbb, 0xd9, 0x45, 0xf5, 0x50, 0xa5, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDH_P521_VALUE02[] = { 0x00, 0x00, 0x00, 0x68, 0x5a, 0x48, 0xe8, 0x6c, 0x79, 0xf0, 0xf0, 0x87, 0x5f, 0x7b, 0xc1, 0x8d, 0x25, 0xeb, 0x5f, 0xc8, 0xc0, 0xb0, 0x7e, 0x5d, 0xa4, 0xf4, 0x37, 0x0f, 0x3a, 0x94, 0x90, 0x34, 0x08, 0x54, 0x33, 0x4b, 0x1e, 0x1b, 0x87, 0xfa, 0x39, 0x54, 0x64, 0xc6, 0x06, 0x26, 0x12, 0x4a, 0x4e, 0x70, 0xd0, 0xf7, 0x85, 0x60, 0x1d, 0x37, 0xc0, 0x98, 0x70, 0xeb, 0xf1, 0x76, 0x66, 0x68, 0x77, 0xa2, 0x04, 0x6d, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P192_VALUE01[] = { 0x07, 0x00, 0x8e, 0xa4, 0x0b, 0x08, 0xdb, 0xe7, 0x64, 0x32, 0x09, 0x6e, 0x80, 0xa2, 0x49, 0x4c, 0x94, 0x98, 0x2d, 0x2d, 0x5b, 0xcf, 0x98, 0xe6, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P224_VALUE01[] = { 0x8a, 0x4d, 0xca, 0x35, 0x13, 0x6c, 0x4b, 0x70, 0xe5, 0x88, 0xe2, 0x35, 0x54, 0x63, 0x7a, 0xe2, 0x51, 0x07, 0x7d, 0x13, 0x65, 0xa6, 0xba, 0x5d, 0xb9, 0x58, 0x5d, 0xe7, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P256_VALUE01[] = { 0xfa, 0x27, 0x37, 0xfb, 0x93, 0x48, 0x8d, 0x19, 0xca, 0xef, 0x11, 0xae, 0x7f, 0xaf, 0x6b, 0x7f, 0x4b, 0xcd, 0x67, 0xb2, 0x86, 0xe3, 0xfc, 0x54, 0xe8, 0xa6, 0x5c, 0x2b, 0x74, 0xae, 0xcc, 0xb0, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P384_VALUE01[] = { 0xe5, 0x5f, 0xee, 0x6c, 0x49, 0xd8, 0xd5, 0x23, 0xf5, 0xce, 0x7b, 0xf9, 0xc0, 0x42, 0x5c, 0xe4, 0xff, 0x65, 0x07, 0x08, 0xb7, 0xde, 0x5c, 0xfb, 0x09, 0x59, 0x01, 0x52, 0x39, 0x79, 0xa7, 0xf0, 0x42, 0x60, 0x2d, 0xb3, 0x08, 0x54, 0x73, 0x53, 0x69, 0x81, 0x3b, 0x5c, 0x3f, 0x5e, 0xf8, 0x68, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_X_ECDSA_P521_VALUE01[] = { 0x01, 0x2f, 0xbc, 0xae, 0xff, 0xa6, 0xa5, 0x1f, 0x3e, 0xe4, 0xd3, 0xd2, 0xb5, 0x1c, 0x5d, 0xec, 0x6d, 0x7c, 0x72, 0x6c, 0xa3, 0x53, 0xfc, 0x01, 0x4e, 0xa2, 0xbf, 0x7c, 0xfb, 0xb9, 0xb9, 0x10, 0xd3, 0x2c, 0xbf, 0xa6, 0xa0, 0x0f, 0xe3, 0x9b, 0x6c, 0xdb, 0x89, 0x46, 0xf2, 0x27, 0x75, 0x39, 0x8b, 0x2e, 0x23, 0x3c, 0x0c, 0xf1, 0x44, 0xd7, 0x8c, 0x8a, 0x77, 0x42, 0xb5, 0xc7, 0xa3, 0xbb, 0x5d, 0x23, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P192_VALUE01[] = { 0xf2, 0x69, 0xc1, 0x58, 0x63, 0x74, 0x82, 0xaa, 0xd6, 0x44, 0xcd, 0x69, 0x2d, 0xd1, 0xd3, 0xef, 0x2c, 0x8a, 0x7c, 0x49, 0xe3, 0x89, 0xf7, 0xf6, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P192_VALUE02[] = { 0xdf, 0xbe, 0x5d, 0x7c, 0x61, 0xfa, 0xc8, 0x8b, 0x11, 0x81, 0x1b, 0xde, 0x32, 0x8e, 0x8a, 0x0d, 0x12, 0xbf, 0x01, 0xa9, 0xd2, 0x04, 0xb5, 0x23, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P224_VALUE01[] = { 0x4a, 0x68, 0xa1, 0xc2, 0xb0, 0xfb, 0x22, 0x93, 0x0d, 0x12, 0x05, 0x55, 0xc1, 0xec, 0xe5, 0x0e, 0xa9, 0x8d, 0xea, 0x84, 0x07, 0xf7, 0x1b, 0xe3, 0x6e, 0xfa, 0xc0, 0xde, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P224_VALUE02[] = { 0x88, 0x20, 0x92, 0xcc, 0xbb, 0xa7, 0x93, 0x0f, 0x41, 0x9a, 0x8a, 0x4f, 0x9b, 0xb1, 0x69, 0x78, 0xbb, 0xc3, 0x83, 0x87, 0x29, 0x99, 0x25, 0x59, 0xa6, 0xf2, 0xe2, 0xd7, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P256_VALUE01[] = { 0x28, 0xaf, 0x61, 0x28, 0x1f, 0xd3, 0x5e, 0x2f, 0xa7, 0x00, 0x25, 0x23, 0xac, 0xc8, 0x5a, 0x42, 0x9c, 0xb0, 0x6e, 0xe6, 0x64, 0x83, 0x25, 0x38, 0x9f, 0x59, 0xed, 0xfc, 0xe1, 0x40, 0x51, 0x41, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P256_VALUE02[] = { 0xdb, 0x71, 0xe5, 0x09, 0xe3, 0xfd, 0x9b, 0x06, 0x0d, 0xdb, 0x20, 0xba, 0x5c, 0x51, 0xdc, 0xc5, 0x94, 0x8d, 0x46, 0xfb, 0xf6, 0x40, 0xdf, 0xe0, 0x44, 0x17, 0x82, 0xca, 0xb8, 0x5f, 0xa4, 0xac, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P384_VALUE01[] = { 0xba, 0x26, 0xca, 0x69, 0xec, 0x2f, 0x5b, 0x5d, 0x9d, 0xad, 0x20, 0xcc, 0x9d, 0xa7, 0x11, 0x38, 0x3a, 0x9d, 0xbe, 0x34, 0xea, 0x3f, 0xa5, 0xa2, 0xaf, 0x75, 0xb4, 0x65, 0x02, 0x62, 0x9a, 0xd5, 0x4d, 0xd8, 0xb7, 0xd7, 0x3a, 0x8a, 0xbb, 0x06, 0xa3, 0xa3, 0xbe, 0x47, 0xd6, 0x50, 0xcc, 0x99, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P384_VALUE02[] = { 0xac, 0x68, 0xf1, 0x9f, 0x2e, 0x1c, 0xb8, 0x79, 0xae, 0xd4, 0x3a, 0x99, 0x69, 0xb9, 0x1a, 0x08, 0x39, 0xc4, 0xc3, 0x8a, 0x49, 0x74, 0x9b, 0x66, 0x1e, 0xfe, 0xdf, 0x24, 0x34, 0x51, 0x91, 0x5e, 0xd0, 0x90, 0x5a, 0x32, 0xb0, 0x60, 0x99, 0x2b, 0x46, 0x8c, 0x64, 0x76, 0x6f, 0xc8, 0x43, 0x7a, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P521_VALUE01[] = { 0x00, 0x00, 0x01, 0xb7, 0xc8, 0x5f, 0x26, 0xf5, 0xd4, 0xb2, 0xd7, 0x35, 0x5c, 0xf6, 0xb0, 0x21, 0x17, 0x65, 0x99, 0x43, 0x76, 0x2b, 0x6d, 0x1d, 0xb5, 0xab, 0x4f, 0x1d, 0xbc, 0x44, 0xce, 0x7b, 0x29, 0x46, 0xeb, 0x6c, 0x7d, 0xe3, 0x42, 0x96, 0x28, 0x93, 0xfd, 0x38, 0x7d, 0x1b, 0x73, 0xd7, 0xa8, 0x67, 0x2d, 0x1f, 0x23, 0x69, 0x61, 0x17, 0x0b, 0x7e, 0xb3, 0x57, 0x99, 0x53, 0xee, 0x5c, 0xdc, 0x88, 0xcd, 0x2d, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDH_P521_VALUE02[] = { 0x00, 0x00, 0x01, 0xba, 0x52, 0xc5, 0x6f, 0xc8, 0x77, 0x6d, 0x9e, 0x8f, 0x5d, 0xb4, 0xf0, 0xcc, 0x27, 0x63, 0x6d, 0x0b, 0x74, 0x1b, 0xbe, 0x05, 0x40, 0x06, 0x97, 0x94, 0x2e, 0x80, 0xb7, 0x39, 0x88, 0x4a, 0x83, 0xbd, 0xe9, 0x9e, 0x0f, 0x67, 0x16, 0x93, 0x9e, 0x63, 0x2b, 0xc8, 0x98, 0x6f, 0xa1, 0x8d, 0xcc, 0xd4, 0x43, 0xa3, 0x48, 0xb6, 0xc3, 0xe5, 0x22, 0x49, 0x79, 0x55, 0xa4, 0xf3, 0xc3, 0x02, 0xf6, 0x76, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P192_VALUE01[] = { 0x76, 0xfa, 0xb6, 0x81, 0xd0, 0x0b, 0x41, 0x4e, 0xa6, 0x36, 0xba, 0x21, 0x5d, 0xe2, 0x6d, 0x98, 0xc4, 0x1b, 0xd7, 0xf2, 0xe4, 0xd6, 0x54, 0x77, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P224_VALUE01[] = { 0xad, 0x3d, 0xee, 0x06, 0xde, 0x0b, 0xe8, 0x27, 0x9d, 0x4a, 0xf4, 0x35, 0xd7, 0x24, 0x5f, 0x14, 0xf3, 0xb4, 0xf8, 0x2e, 0xb5, 0x78, 0xe5, 0x19, 0xee, 0x00, 0x57, 0xb1, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P256_VALUE01[] = { 0xd4, 0xcc, 0xd6, 0xda, 0xe6, 0x98, 0x20, 0x8a, 0xa8, 0xc3, 0xa6, 0xf3, 0x9e, 0x45, 0x51, 0x0d, 0x03, 0xbe, 0x09, 0xb2, 0xf1, 0x24, 0xbf, 0xc0, 0x67, 0x85, 0x6c, 0x32, 0x4f, 0x9b, 0x4d, 0x09, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P384_VALUE01[] = { 0x28, 0xf5, 0x9c, 0xc5, 0xdc, 0x50, 0x98, 0x92, 0xa9, 0x88, 0xd3, 0x8a, 0x8e, 0x25, 0x19, 0xde, 0x3d, 0x0c, 0x4f, 0xd0, 0xfb, 0xdb, 0x09, 0x93, 0xe3, 0x8f, 0x18, 0x50, 0x6c, 0x17, 0x60, 0x6c, 0x5e, 0x24, 0x24, 0x92, 0x46, 0xf1, 0xce, 0x94, 0x98, 0x3a, 0x53, 0x61, 0xc5, 0xbe, 0x98, 0x3e, }; static const uint8_t TEE_ATTR_ECC_PUBLIC_VALUE_Y_ECDSA_P521_VALUE01[] = { 0x00, 0x9c, 0xde, 0xf8, 0x23, 0xdd, 0x7b, 0xf9, 0xa7, 0x9e, 0x8c, 0xce, 0xac, 0xd2, 0xe4, 0x52, 0x7c, 0x23, 0x1d, 0x0a, 0xe5, 0x96, 0x7a, 0xf0, 0x95, 0x8e, 0x93, 0x1d, 0x7d, 0xdc, 0xcf, 0x28, 0x05, 0xa3, 0xe6, 0x18, 0xdc, 0x30, 0x39, 0xfe, 0xc9, 0xfe, 0xbb, 0xd3, 0x30, 0x52, 0xfe, 0x4c, 0x0f, 0xee, 0x98, 0xf0, 0x33, 0x10, 0x60, 0x64, 0x98, 0x2d, 0x88, 0xf4, 0xe0, 0x35, 0x49, 0xd4, 0xa6, 0x4d, }; static const uint8_t TEE_ATTR_GENERIC_SECRET_2048_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, }; static const uint8_t TEE_ATTR_HMAC_MD5_256_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, }; static const uint8_t TEE_ATTR_HMAC_SHA1_256_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, }; static const uint8_t TEE_ATTR_HMAC_SHA224_256_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, }; static const uint8_t TEE_ATTR_HMAC_SHA256_512_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, }; static const uint8_t TEE_ATTR_HMAC_SHA384_512_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, }; static const uint8_t TEE_ATTR_HMAC_SHA512_512_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, }; static const uint8_t TEE_ATTR_RSA_COEFFICIENT_VALUE01[] = { 0x94, 0x65, 0xe9, 0xd0, 0x98, 0xf8, 0x9c, 0x30, 0x25, 0xa8, 0xb1, 0x53, 0x78, 0x61, 0x01, 0x1f, 0xde, 0x48, 0x91, 0x92, 0x90, 0x11, 0x6c, 0x96, 0x27, 0xce, 0xe1, 0x8f, 0x7b, 0x37, 0x53, 0x25, 0x89, 0xac, 0x2c, 0xa8, 0x09, 0x2b, 0xff, 0x70, 0x42, 0x2a, 0xca, 0xfb, 0x83, 0x68, 0xca, 0x8f, 0xaf, 0x1b, 0xcd, 0x11, 0x20, 0xfb, 0x64, 0x74, 0x5a, 0x35, 0xdf, 0x7d, 0x79, 0xed, 0x29, 0xe5, 0xf7, 0xd9, 0xba, 0x5d, 0x02, 0x19, 0xb7, 0x88, 0x74, 0x33, 0x86, 0xcd, 0x5d, 0xc5, 0xa2, 0x89, 0x36, 0xbe, 0x9e, 0xe5, 0x84, 0xc8, 0x08, 0xca, 0xbc, 0x85, 0xd1, 0x95, 0x18, 0xba, 0x0f, 0xac, 0x4a, 0xa1, 0x03, 0x84, 0xe3, 0xd3, 0x2d, 0x38, 0x81, 0xb3, 0x11, 0x27, 0x97, 0x1d, 0x7e, 0x84, 0xe8, 0xa4, 0xc3, 0xb2, 0x75, 0xdf, 0x96, 0x91, 0xe0, 0x81, 0xa6, 0x57, 0xe9, 0x74, 0x82, 0x88, }; static const uint8_t TEE_ATTR_RSA_EXPONENT1_VALUE01[] = { 0x88, 0x14, 0x08, 0x30, 0x55, 0x6f, 0x85, 0x25, 0x7b, 0x61, 0xef, 0x47, 0xb5, 0xf6, 0x69, 0x1a, 0xbc, 0x34, 0xcc, 0x80, 0x80, 0xf5, 0x35, 0x9b, 0x2e, 0x86, 0xb4, 0x3d, 0x3f, 0x16, 0xb7, 0x18, 0x1f, 0x2f, 0xda, 0xd7, 0x27, 0x7c, 0x5e, 0x8d, 0x15, 0xde, 0x5e, 0x78, 0xc0, 0xa6, 0x49, 0x94, 0x71, 0x4b, 0x97, 0x2e, 0x8c, 0xf4, 0x10, 0x66, 0x77, 0xbf, 0x78, 0x31, 0xaf, 0xa7, 0xd0, 0x80, 0x3a, 0x73, 0x13, 0x56, 0xd4, 0x14, 0x04, 0x74, 0x46, 0x4e, 0x91, 0x1d, 0xdc, 0x45, 0xa7, 0x7c, 0x00, 0x4b, 0x5d, 0x34, 0x70, 0xa0, 0x7f, 0x95, 0xb9, 0xf2, 0x90, 0x76, 0x6b, 0x4d, 0x64, 0x1c, 0x94, 0x5b, 0x48, 0x2b, 0xdf, 0x37, 0x92, 0x2d, 0x8d, 0x5e, 0x73, 0xf6, 0x89, 0x40, 0x2d, 0xed, 0x55, 0xd2, 0x40, 0x8f, 0x38, 0x82, 0x41, 0x82, 0x64, 0xb2, 0xb4, 0xb0, 0xdf, 0xc7, 0x83, 0xc1, }; static const uint8_t TEE_ATTR_RSA_EXPONENT2_VALUE01[] = { 0x40, 0x26, 0x13, 0xa7, 0x0f, 0x28, 0x79, 0x92, 0xb7, 0x88, 0xca, 0x91, 0x0a, 0xa2, 0xe5, 0xd1, 0x74, 0xa4, 0xbe, 0x5f, 0x91, 0x8b, 0xa8, 0xff, 0xb9, 0x3d, 0x01, 0xce, 0x5a, 0xc9, 0xfd, 0xde, 0xb0, 0xc6, 0x1f, 0x52, 0x08, 0xd7, 0x46, 0x9e, 0x3e, 0x1e, 0x82, 0xa5, 0x77, 0x30, 0x75, 0xb0, 0x16, 0xb1, 0x09, 0xbf, 0x3f, 0x35, 0x9f, 0x3e, 0xcd, 0x74, 0x02, 0x4c, 0x99, 0x69, 0xa2, 0x02, 0x39, 0x7c, 0x7d, 0xd8, 0xce, 0x92, 0xe9, 0xa9, 0x33, 0x0d, 0xe5, 0x3e, 0x05, 0x3d, 0xd0, 0x2c, 0xf3, 0x4a, 0xaa, 0xdb, 0xbe, 0xef, 0xd5, 0x9f, 0x2b, 0xec, 0xbf, 0xea, 0xff, 0x75, 0x2d, 0x6d, 0x23, 0x12, 0x8d, 0x53, 0xe2, 0xca, 0x7f, 0xdb, 0x0d, 0xbb, 0xc6, 0x5e, 0x16, 0xd5, 0xb1, 0x62, 0x8e, 0x1b, 0xbf, 0xbf, 0x0e, 0x2c, 0xb5, 0xcf, 0x54, 0x55, 0x22, 0x21, 0xde, 0x7d, 0xba, 0xb1, }; static const uint8_t TEE_ATTR_RSA_MODULUS_3072_VALUE01[] = { 0xac, 0x6a, 0x77, 0xeb, 0xbf, 0x9c, 0x72, 0x5e, 0xc9, 0x73, 0x11, 0xf5, 0x4c, 0xd3, 0x5a, 0x4d, 0x98, 0xc4, 0x95, 0x82, 0x20, 0x13, 0x83, 0xcc, 0x8c, 0xaf, 0x06, 0xde, 0x23, 0x3e, 0x8a, 0x64, 0x98, 0xcc, 0xa8, 0x1e, 0x57, 0x05, 0xff, 0x67, 0xc8, 0x78, 0x74, 0xcb, 0xa0, 0x07, 0x0c, 0x94, 0xdc, 0xf7, 0x37, 0x0a, 0x13, 0xf4, 0x4c, 0x7b, 0xf6, 0xf3, 0x9e, 0x10, 0x39, 0xc0, 0xe7, 0x16, 0xf2, 0x1b, 0xb8, 0x1d, 0x23, 0x81, 0x15, 0xce, 0x65, 0x19, 0x00, 0xc7, 0x62, 0x70, 0x86, 0xc6, 0xbc, 0x70, 0x47, 0xec, 0x8f, 0xc9, 0xf0, 0x27, 0x13, 0xdc, 0x7c, 0x6c, 0xb3, 0x53, 0x42, 0xcd, 0xd3, 0xd0, 0x26, 0xb3, 0xe8, 0xe7, 0x35, 0x18, 0xe6, 0x57, 0xf2, 0xe1, 0x68, 0x35, 0x32, 0xa4, 0x8b, 0xfe, 0x3b, 0xbd, 0x55, 0x86, 0x95, 0x86, 0x0c, 0x71, 0xfc, 0xd4, 0x4a, 0x27, 0x5e, 0x6d, 0x41, 0xd4, 0x02, 0xd5, 0xf0, 0x50, 0x40, 0x0a, 0x34, 0x02, 0xd3, 0xd5, 0xd4, 0xaa, 0xf9, 0x78, 0x7d, 0xd7, 0x9a, 0x2d, 0x5c, 0x90, 0xa4, 0x3f, 0xd4, 0xcd, 0xf4, 0x3a, 0x48, 0xd0, 0xa5, 0x2b, 0x0b, 0x0d, 0xa5, 0xd3, 0xb1, 0xb5, 0x9c, 0xc2, 0xab, 0xdd, 0xbc, 0xae, 0x0b, 0x8b, 0x1b, 0x02, 0xa2, 0xe2, 0xed, 0xba, 0xab, 0x93, 0x4e, 0x90, 0x30, 0x97, 0x60, 0xd6, 0x99, 0xec, 0xb9, 0x96, 0x91, 0xd5, 0x1b, 0xbf, 0x06, 0x74, 0xa1, 0x45, 0xe6, 0xa3, 0x5b, 0x83, 0xa5, 0xad, 0x4a, 0xc3, 0x0d, 0xa4, 0x1b, 0x20, 0x52, 0x7d, 0x48, 0x1d, 0x80, 0x3b, 0x2f, 0x77, 0xca, 0x0b, 0x1e, 0x18, 0x24, 0x33, 0x06, 0x87, 0xbb, 0x3c, 0x0a, 0x2a, 0x6c, 0x9e, 0xb7, 0x39, 0x5d, 0x26, 0x58, 0x5b, 0x04, 0x8f, 0xc5, 0xde, 0x51, 0x8f, 0x3e, 0x5c, 0x2b, 0x96, 0x1f, 0xa9, 0x3d, 0x26, 0x5c, 0x45, 0x25, 0x9f, 0x2d, 0xb3, 0xbe, 0xff, 0xe5, 0xd1, 0xf1, 0x2e, 0x0c, 0xc6, 0x74, 0x3f, 0x9b, 0x24, 0x39, 0x9b, 0x7c, 0x76, 0x4d, 0x88, 0xdb, 0x09, 0x30, 0x44, 0xbb, 0xad, 0x65, 0x82, 0x9b, 0xb6, 0x1d, 0x21, 0xb1, 0x27, 0xb8, 0x7f, 0x90, 0x54, 0xee, 0xa0, 0x9c, 0x86, 0xb7, 0x56, 0x2d, 0x1c, 0x17, 0x3f, 0xa7, 0x3f, 0x72, 0x80, 0xc4, 0x9c, 0x62, 0xdd, 0x0a, 0xa5, 0xcb, 0xfc, 0xf9, 0x47, 0xa5, 0xa5, 0x03, 0xb2, 0x96, 0x57, 0x6e, 0xef, 0xc0, 0xe6, 0x14, 0xcb, 0x59, 0x18, 0xb9, 0xf5, 0xa6, 0xaa, 0x54, 0xb4, 0x8b, 0xf2, 0xe6, 0xbc, 0x87, 0x4c, 0x9d, 0x8c, 0x03, 0x1e, 0xe9, 0x81, 0x2f, 0x63, 0xd2, 0xfe, 0x88, 0x3f, 0x2f, 0x30, 0x6a, 0xd1, 0xc5, 0x55, 0xd2, 0x1f, 0x29, 0x88, 0x2a, 0xf0, 0xb4, 0x73, 0x04, 0x60, 0xbb, 0x84, 0xab, 0xa7, 0x17, 0x2d, 0xbc, 0xe1, 0xa4, 0x49, }; static const uint8_t TEE_ATTR_RSA_MODULUS_FOR_FUZZING_RSAN[] = { 0xa8, 0xb3, 0xb2, 0x84, 0xaf, 0x8e, 0xb5, 0x0b, 0x38, 0x70, 0x34, 0xa8, 0x60, 0xf1, 0x46, 0xc4, 0x91, 0x9f, 0x31, 0x87, 0x63, 0xcd, 0x6c, 0x55, 0x98, 0xc8, 0xae, 0x48, 0x11, 0xa1, 0xe0, 0xab, 0xc4, 0xc7, 0xe0, 0xb0, 0x82, 0xd6, 0x93, 0xa5, 0xe7, 0xfc, 0xed, 0x67, 0x5c, 0xf4, 0x66, 0x85, 0x12, 0x77, 0x2c, 0x0c, 0xbc, 0x64, 0xa7, 0x42, 0xc6, 0xc6, 0x30, 0xf5, 0x33, 0xc8, 0xcc, 0x72, 0xf6, 0x2a, 0xe8, 0x33, 0xc4, 0x0b, 0xf2, 0x58, 0x42, 0xe9, 0x84, 0xbb, 0x78, 0xbd, 0xbf, 0x97, 0xc0, 0x10, 0x7d, 0x55, 0xbd, 0xb6, 0x62, 0xf5, 0xc4, 0xe0, 0xfa, 0xb9, 0x84, 0x5c, 0xb5, 0x14, 0x8e, 0xf7, 0x39, 0x2d, 0xd3, 0xaa, 0xff, 0x93, 0xae, 0x1e, 0x6b, 0x66, 0x7b, 0xb3, 0xd4, 0x24, 0x76, 0x16, 0xd4, 0xf5, 0xba, 0x10, 0xd4, 0xcf, 0xd2, 0x26, 0xde, 0x88, 0xd3, 0x9f, 0x16, 0xfb, }; static const uint8_t TEE_ATTR_RSA_MODULUS_VALUE01[] = { 0xf0, 0x1a, 0x95, 0xcd, 0x5f, 0x9f, 0x1c, 0xbc, 0x5c, 0x2e, 0xc8, 0x00, 0x3b, 0xfa, 0xe0, 0xd5, 0x72, 0xea, 0xfc, 0x9e, 0x74, 0xe1, 0x02, 0x66, 0xa8, 0x13, 0x3f, 0x0c, 0xe6, 0x24, 0xcb, 0x1c, 0xa5, 0xdf, 0x64, 0xfb, 0x06, 0xd7, 0x13, 0xce, 0xaa, 0x6c, 0xee, 0x16, 0x7b, 0xf8, 0x92, 0xaf, 0xc4, 0x5b, 0x46, 0x18, 0xc6, 0x30, 0xb6, 0x04, 0x1c, 0x3a, 0x2e, 0xd7, 0xca, 0xb8, 0xb5, 0x00, 0x78, 0x89, 0xa0, 0x69, 0x37, 0x84, 0x59, 0x99, 0x0c, 0x2f, 0x00, 0xe5, 0x3b, 0xe1, 0x18, 0xe0, 0xb9, 0x2e, 0x77, 0x1d, 0x32, 0x7e, 0x5f, 0xf4, 0x18, 0xf3, 0x9f, 0x58, 0xc6, 0x83, 0xe2, 0x7a, 0xcb, 0x89, 0x18, 0xc2, 0x09, 0x84, 0x7e, 0x9d, 0x96, 0xe0, 0xb9, 0x49, 0x75, 0xef, 0xcf, 0xff, 0xf0, 0xb6, 0x18, 0xd3, 0x7a, 0xc1, 0x6f, 0x0c, 0x55, 0x33, 0xbe, 0x9d, 0x63, 0x06, 0xd6, 0x9f, 0xc1, 0xa5, 0xe9, 0xbd, 0xb1, 0xb2, 0x5d, 0x5c, 0xf9, 0xab, 0xa9, 0xb5, 0x6a, 0x4e, 0xa4, 0xfa, 0x44, 0x32, 0xd6, 0x71, 0x2e, 0x5f, 0xa6, 0x25, 0xf8, 0x40, 0x24, 0xc4, 0x5b, 0x61, 0x55, 0x1b, 0xac, 0xa3, 0x0a, 0x11, 0x8e, 0x65, 0x20, 0xda, 0x2c, 0x0d, 0xdf, 0xdb, 0x47, 0x6b, 0x61, 0x18, 0x4d, 0xfe, 0xfd, 0x2a, 0x7e, 0x77, 0x40, 0x44, 0x43, 0xc6, 0x33, 0x6c, 0xe5, 0x1b, 0x8d, 0x80, 0xf9, 0x97, 0xa2, 0xe4, 0xb9, 0x34, 0x3e, 0x28, 0x94, 0x9f, 0xbd, 0xa8, 0x2b, 0x0a, 0x4d, 0x1a, 0xa8, 0x06, 0xe5, 0x99, 0x4e, 0xb9, 0x13, 0x45, 0xc8, 0xf6, 0x0f, 0xd0, 0x4d, 0xbf, 0xe7, 0x8f, 0xed, 0xca, 0x8e, 0xf8, 0x8d, 0x87, 0x5f, 0xd4, 0xb4, 0x1a, 0x2c, 0xc9, 0xa7, 0x67, 0x7e, 0xb2, 0x1b, 0xc1, 0xce, 0xb6, 0x83, 0x7c, 0xce, 0xb4, 0x3d, 0x85, 0xc7, 0x53, 0x30, 0x7c, 0xfe, 0x85, }; static const uint8_t TEE_ATTR_RSA_OAEP_LABEL_VALUE01[] = { 1 }; static const uint8_t TEE_ATTR_RSA_PRIME1_VALUE01[] = { 0xfe, 0x56, 0xe9, 0x8b, 0x84, 0xa4, 0x6f, 0x98, 0x45, 0xad, 0x05, 0xbc, 0x67, 0x04, 0x5f, 0xae, 0x08, 0xdf, 0xe1, 0x8c, 0xcd, 0x49, 0x1d, 0x9d, 0x8e, 0x1e, 0x82, 0x47, 0x0c, 0x3c, 0x70, 0x40, 0x2d, 0x61, 0xe7, 0xde, 0xd7, 0x6e, 0xb9, 0xeb, 0xf0, 0xa9, 0xff, 0x59, 0xe1, 0xf8, 0xb7, 0x20, 0x9c, 0xc4, 0x13, 0xd0, 0xd6, 0x41, 0xfb, 0x2b, 0xb0, 0x9b, 0xf2, 0x93, 0x20, 0x9a, 0x32, 0x67, 0xed, 0xaf, 0x25, 0xdc, 0xa8, 0xc2, 0x8f, 0x28, 0xab, 0xf8, 0xed, 0xb1, 0x3f, 0x65, 0xd4, 0xe8, 0x48, 0xf2, 0x41, 0x88, 0x21, 0xcb, 0xab, 0x1e, 0xf7, 0x97, 0x68, 0xe8, 0x32, 0x7d, 0xec, 0x18, 0xf1, 0x83, 0x91, 0x13, 0xf8, 0x8c, 0x89, 0xe1, 0x0a, 0x6c, 0xff, 0x82, 0xc1, 0x07, 0x00, 0xbd, 0xbc, 0x20, 0xa3, 0x51, 0x6d, 0x86, 0x5a, 0x19, 0x29, 0x19, 0x02, 0x2f, 0xed, 0x41, 0x08, 0x89, }; static const uint8_t TEE_ATTR_RSA_PRIME2_VALUE01[] = { 0xf1, 0xab, 0xe1, 0x59, 0x38, 0x71, 0x9e, 0x55, 0x22, 0x40, 0x6d, 0xa1, 0xc6, 0xb9, 0x6d, 0xba, 0x57, 0x53, 0xec, 0xfd, 0xd2, 0x22, 0x2d, 0xba, 0x74, 0x9e, 0xdc, 0x33, 0x83, 0xcd, 0x44, 0xd2, 0x7a, 0x63, 0xf3, 0xe0, 0x55, 0x5f, 0x4b, 0x03, 0xe5, 0x58, 0x7b, 0xe8, 0x99, 0x5e, 0x8c, 0x75, 0x34, 0x3a, 0xa2, 0x96, 0x3c, 0x3b, 0x13, 0xaa, 0xb7, 0x58, 0x1d, 0xad, 0x2c, 0x88, 0xbb, 0x99, 0x0a, 0x0b, 0xff, 0x9b, 0x68, 0x4d, 0x96, 0x1a, 0xe9, 0x52, 0xf1, 0xa2, 0xcb, 0xb9, 0xe9, 0xe8, 0x63, 0x3d, 0x40, 0x14, 0x64, 0xb5, 0xd6, 0xe5, 0xf2, 0x2a, 0x70, 0x4f, 0x1a, 0xab, 0x03, 0x63, 0xaa, 0x0d, 0xc7, 0xb3, 0xf3, 0x06, 0xb0, 0xca, 0xb1, 0x48, 0x0d, 0x18, 0x63, 0x2e, 0xcc, 0xd9, 0xca, 0x2c, 0x5a, 0x1a, 0x75, 0x50, 0x0e, 0x11, 0xb0, 0xd5, 0xa7, 0x74, 0x25, 0xe7, 0x0f, 0x1d, }; static const uint8_t TEE_ATTR_RSA_PRIVATE_EXPONENT_3072_VALUE01[] = { 0x09, 0x83, 0x77, 0x7b, 0xbe, 0x9c, 0x98, 0xdd, 0xdf, 0x0e, 0xa0, 0xde, 0x97, 0xa1, 0x3e, 0x3e, 0xd1, 0x86, 0x3a, 0x7b, 0x8b, 0xeb, 0x62, 0xd7, 0xa3, 0x92, 0xfc, 0x17, 0xe8, 0x91, 0xa3, 0xe8, 0x25, 0x12, 0x3e, 0x71, 0xba, 0xf0, 0x2c, 0xa4, 0xef, 0xc4, 0xd8, 0xdc, 0xc7, 0x64, 0x15, 0xfb, 0xc9, 0x9c, 0x13, 0x8f, 0xa3, 0x7c, 0x6c, 0x41, 0x4d, 0x36, 0x5d, 0x2c, 0x59, 0x54, 0x54, 0x8f, 0x6f, 0x88, 0xaf, 0xa3, 0x24, 0x48, 0x10, 0x09, 0x0f, 0x63, 0x69, 0x11, 0x69, 0x46, 0x67, 0xff, 0x15, 0x52, 0x81, 0xb8, 0x31, 0x1a, 0x50, 0x28, 0xdd, 0x88, 0x75, 0xfb, 0x17, 0xad, 0x9d, 0xe0, 0x58, 0x47, 0x0a, 0xfc, 0x54, 0xa9, 0xef, 0xf6, 0x22, 0xd0, 0xf8, 0x0a, 0x04, 0xa6, 0xea, 0xe7, 0x8a, 0x15, 0x36, 0xcd, 0x2c, 0xb5, 0xb1, 0x77, 0xde, 0x39, 0xc0, 0x35, 0xfd, 0x2b, 0xfd, 0x0a, 0xf9, 0x1b, 0x65, 0xca, 0x32, 0x9d, 0x27, 0x9c, 0xfc, 0xcb, 0xca, 0x6d, 0x74, 0x97, 0x3c, 0x5a, 0xb9, 0x4b, 0x35, 0xc0, 0x40, 0xaa, 0xe6, 0x1c, 0x01, 0x69, 0x2c, 0x95, 0xfa, 0x00, 0xd0, 0x2c, 0x2f, 0xc7, 0x2c, 0xf5, 0xee, 0x48, 0x50, 0x79, 0x62, 0xbb, 0xfc, 0xd6, 0xc7, 0xe5, 0xc7, 0x78, 0xed, 0x91, 0xfd, 0xd8, 0x0f, 0x52, 0x90, 0x0d, 0x4e, 0x78, 0x66, 0x1a, 0x34, 0x3a, 0x20, 0x67, 0xb6, 0xf9, 0xc7, 0x96, 0x43, 0xad, 0x28, 0x56, 0xd4, 0xc0, 0xd4, 0x9c, 0x19, 0x5a, 0x03, 0xef, 0x57, 0x72, 0x92, 0x34, 0xac, 0xd9, 0x51, 0x8d, 0x3b, 0xef, 0xfa, 0x23, 0x04, 0xe7, 0xdc, 0xde, 0x0f, 0xdd, 0x8a, 0xd2, 0xc3, 0xd0, 0x92, 0x87, 0xb1, 0x0c, 0x32, 0x66, 0x27, 0x14, 0x07, 0x7c, 0x19, 0xf8, 0x8c, 0x04, 0x77, 0x9d, 0x92, 0x6b, 0x78, 0xeb, 0x5a, 0xe2, 0xb3, 0x05, 0x06, 0x34, 0x49, 0x2c, 0x7d, 0x78, 0xfa, 0x66, 0xb7, 0xdd, 0x73, 0x1d, 0xd4, 0x5c, 0xa9, 0x32, 0x37, 0x07, 0xe5, 0xc4, 0xf4, 0x1c, 0x97, 0x1c, 0x76, 0xe5, 0x3c, 0x04, 0x40, 0x3c, 0x22, 0x54, 0xdd, 0xa6, 0x35, 0xcb, 0xb3, 0x50, 0x5a, 0x6c, 0xb5, 0x89, 0x33, 0xa6, 0x58, 0x70, 0x0a, 0x85, 0xd5, 0xb7, 0xa2, 0x50, 0x98, 0x68, 0x0c, 0xf3, 0xf4, 0xc0, 0x20, 0x5b, 0x09, 0x95, 0x7e, 0x0f, 0xae, 0x8c, 0xf8, 0x19, 0x23, 0x0e, 0x61, 0x79, 0x96, 0xfd, 0x80, 0xed, 0x6d, 0x9a, 0xe5, 0x65, 0x64, 0x5b, 0x29, 0x3f, 0x12, 0xaf, 0xa4, 0xc4, 0x07, 0x6d, 0x2e, 0xa6, 0x5b, 0xb6, 0x9a, 0xf5, 0x05, 0x8c, 0xeb, 0x5c, 0x4b, 0x3c, 0x68, 0x4b, 0xe0, 0x8a, 0xcb, 0x60, 0x21, 0x47, 0x2b, 0xd9, 0x3a, 0x37, 0x27, 0x5a, 0x1c, 0x20, 0xfc, 0xdf, 0x05, 0xb2, 0x77, 0x56, 0xba, 0x10, 0x15, 0xd3, 0x84, 0xa3, }; static const uint8_t TEE_ATTR_RSA_PRIVATE_EXPONENT_FOR_FUZZING_RSAD[] = { 0x53, 0x33, 0x9c, 0xfd, 0xb7, 0x9f, 0xc8, 0x46, 0x6a, 0x65, 0x5c, 0x73, 0x16, 0xac, 0xa8, 0x5c, 0x55, 0xfd, 0x8f, 0x6d, 0xd8, 0x98, 0xfd, 0xaf, 0x11, 0x95, 0x17, 0xef, 0x4f, 0x52, 0xe8, 0xfd, 0x8e, 0x25, 0x8d, 0xf9, 0x3f, 0xee, 0x18, 0x0f, 0xa0, 0xe4, 0xab, 0x29, 0x69, 0x3c, 0xd8, 0x3b, 0x15, 0x2a, 0x55, 0x3d, 0x4a, 0xc4, 0xd1, 0x81, 0x2b, 0x8b, 0x9f, 0xa5, 0xaf, 0x0e, 0x7f, 0x55, 0xfe, 0x73, 0x04, 0xdf, 0x41, 0x57, 0x09, 0x26, 0xf3, 0x31, 0x1f, 0x15, 0xc4, 0xd6, 0x5a, 0x73, 0x2c, 0x48, 0x31, 0x16, 0xee, 0x3d, 0x3d, 0x2d, 0x0a, 0xf3, 0x54, 0x9a, 0xd9, 0xbf, 0x7c, 0xbf, 0xb7, 0x8a, 0xd8, 0x84, 0xf8, 0x4d, 0x5b, 0xeb, 0x04, 0x72, 0x4d, 0xc7, 0x36, 0x9b, 0x31, 0xde, 0xf3, 0x7d, 0x0c, 0xf5, 0x39, 0xe9, 0xcf, 0xcd, 0xd3, 0xde, 0x65, 0x37, 0x29, 0xea, 0xd5, 0xd1, }; static const uint8_t TEE_ATTR_RSA_PRIVATE_EXPONENT_VALUE01[] = { 0xa5, 0x0d, 0xe1, 0x84, 0xf9, 0x02, 0xec, 0x42, 0x20, 0x2c, 0x98, 0x98, 0x70, 0xa3, 0x1a, 0x04, 0x21, 0xa7, 0xa0, 0x59, 0x5d, 0x87, 0x80, 0x9b, 0x09, 0x57, 0x91, 0xb4, 0x50, 0x51, 0x62, 0xbf, 0x22, 0xd7, 0xdb, 0x17, 0x25, 0xb0, 0x9c, 0x91, 0x29, 0x5f, 0x10, 0x9c, 0xac, 0x44, 0x48, 0xb2, 0x43, 0x8d, 0x6b, 0x36, 0x84, 0xa7, 0xdf, 0xb8, 0x1b, 0x9f, 0x73, 0xac, 0x2c, 0x53, 0xa5, 0x39, 0xd9, 0xa2, 0xe2, 0x7e, 0xf2, 0x07, 0x2d, 0x80, 0xa4, 0x7b, 0x7b, 0x66, 0x1a, 0x2f, 0xb7, 0x66, 0x64, 0x66, 0xa8, 0xc3, 0x8d, 0x7e, 0x8a, 0x7f, 0xc6, 0xd7, 0x52, 0xe7, 0x38, 0x30, 0x59, 0x74, 0x88, 0x8e, 0x8a, 0x52, 0x79, 0x30, 0x77, 0xc9, 0xe5, 0x7a, 0x3e, 0x65, 0x5d, 0x89, 0xa9, 0xb7, 0x0b, 0xc6, 0x62, 0x72, 0x9e, 0xa4, 0x72, 0xae, 0x4b, 0xb3, 0xf2, 0x89, 0x47, 0x15, 0xe0, 0x5b, 0x45, 0x4d, 0x99, 0x5b, 0x13, 0x6c, 0x90, 0xbe, 0xe5, 0xb5, 0x98, 0xad, 0x87, 0x99, 0x1a, 0x57, 0xd4, 0x1f, 0xf1, 0x52, 0x71, 0x5b, 0x51, 0x40, 0xdc, 0x51, 0x35, 0xf6, 0x6c, 0xae, 0xa3, 0xf9, 0x0f, 0x3a, 0xed, 0x28, 0xfc, 0xa5, 0x60, 0x2f, 0x4b, 0x4f, 0x31, 0xac, 0x48, 0x3e, 0x5b, 0xba, 0xe4, 0x2b, 0x58, 0x79, 0xe6, 0xb4, 0x6b, 0x5e, 0x56, 0x0a, 0xb2, 0xdb, 0x68, 0xed, 0x24, 0xd8, 0x5e, 0x6f, 0x30, 0x59, 0x8d, 0x8c, 0xa3, 0x00, 0x68, 0xf5, 0x42, 0x95, 0x1a, 0x0b, 0xa8, 0x1c, 0xfb, 0xdf, 0x29, 0x81, 0x10, 0x32, 0x02, 0xcc, 0x51, 0xa4, 0x17, 0x14, 0x3e, 0xef, 0x89, 0x41, 0xde, 0xf8, 0x2d, 0x64, 0x69, 0x30, 0xe8, 0x8a, 0xad, 0x96, 0xf6, 0xf4, 0x82, 0x83, 0x9a, 0x77, 0xe7, 0xde, 0x12, 0x31, 0xf7, 0x15, 0xec, 0xce, 0xed, 0x83, 0x68, 0x88, 0x84, 0xe5, 0x64, 0x81, }; static const uint8_t TEE_ATTR_RSA_PUBLIC_EXPONENT_3072_VALUE01[] = { 0x53, 0x5c, 0x97, }; static const uint8_t TEE_ATTR_RSA_PUBLIC_EXPONENT_FOR_FUZZING_RSAE[] = { 0x01, 0x00, 0x01, }; static const uint8_t TEE_ATTR_RSA_PUBLIC_EXPONENT_VALUE_GEN_OUT_OF_RANGE_SUP[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, }; static const uint8_t TEE_ATTR_SECRET_VALUE_1024_SHARED_SECRET_DH_VALUE01[] = { 0x4e, 0x6a, 0xcf, 0xfd, 0x7d, 0x14, 0x27, 0x65, 0xeb, 0xf4, 0xc7, 0x12, 0x41, 0x4f, 0xe4, 0xb6, 0xab, 0x95, 0x7f, 0x4c, 0xb4, 0x66, 0xb4, 0x66, 0x01, 0x28, 0x9b, 0xb8, 0x20, 0x60, 0x42, 0x82, 0x72, 0x84, 0x2e, 0xe2, 0x8f, 0x11, 0x3c, 0xd1, 0x1f, 0x39, 0x43, 0x1c, 0xbf, 0xfd, 0x82, 0x32, 0x54, 0xce, 0x47, 0x2e, 0x21, 0x05, 0xe4, 0x9b, 0x3d, 0x7f, 0x11, 0x3b, 0x82, 0x50, 0x76, 0xe6, 0x26, 0x45, 0x85, 0x80, 0x7b, 0xc4, 0x64, 0x54, 0x66, 0x5f, 0x27, 0xc5, 0xe4, 0xe1, 0xa4, 0xbd, 0x03, 0x47, 0x04, 0x86, 0x32, 0x29, 0x81, 0xfd, 0xc8, 0x94, 0xcc, 0xa1, 0xe2, 0x93, 0x09, 0x87, 0xc9, 0x2c, 0x15, 0xa3, 0x8b, 0xc4, 0x2e, 0xb3, 0x88, 0x10, 0xe8, 0x67, 0xc4, 0x43, 0x2f, 0x07, 0x25, 0x9e, 0xc0, 0x0c, 0xdb, 0xbb, 0x0f, 0xb9, 0x9e, 0x17, 0x27, 0xc7, 0x06, 0xda, 0x58, 0xdd, }; static const uint8_t TEE_ATTR_SECRET_VALUE_192_SHARED_SECRET_ECDH_VALUE01[] = { 0x80, 0x3d, 0x8a, 0xb2, 0xe5, 0xb6, 0xe6, 0xfc, 0xa7, 0x15, 0x73, 0x7c, 0x3a, 0x82, 0xf7, 0xce, 0x3c, 0x78, 0x31, 0x24, 0xf6, 0xd5, 0x1c, 0xd0, }; static const uint8_t TEE_ATTR_SECRET_VALUE_224_SHARED_SECRET_ECDH_VALUE01[] = { 0x7d, 0x96, 0xf9, 0xa3, 0xbd, 0x3c, 0x05, 0xcf, 0x5c, 0xc3, 0x7f, 0xeb, 0x8b, 0x9d, 0x52, 0x09, 0xd5, 0xc2, 0x59, 0x74, 0x64, 0xde, 0xc3, 0xe9, 0x98, 0x37, 0x43, 0xe8, }; static const uint8_t TEE_ATTR_SECRET_VALUE_256_SHARED_SECRET_ECDH_VALUE01[] = { 0x46, 0xfc, 0x62, 0x10, 0x64, 0x20, 0xff, 0x01, 0x2e, 0x54, 0xa4, 0x34, 0xfb, 0xdd, 0x2d, 0x25, 0xcc, 0xc5, 0x85, 0x20, 0x60, 0x56, 0x1e, 0x68, 0x04, 0x0d, 0xd7, 0x77, 0x89, 0x97, 0xbd, 0x7b, }; static const uint8_t TEE_ATTR_SECRET_VALUE_384_SHARED_SECRET_ECDH_VALUE01[] = { 0x5f, 0x9d, 0x29, 0xdc, 0x5e, 0x31, 0xa1, 0x63, 0x06, 0x03, 0x56, 0x21, 0x36, 0x69, 0xc8, 0xce, 0x13, 0x2e, 0x22, 0xf5, 0x7c, 0x9a, 0x04, 0xf4, 0x0b, 0xa7, 0xfc, 0xea, 0xd4, 0x93, 0xb4, 0x57, 0xe5, 0x62, 0x1e, 0x76, 0x6c, 0x40, 0xa2, 0xe3, 0xd4, 0xd6, 0xa0, 0x4b, 0x25, 0xe5, 0x33, 0xf1, }; static const uint8_t TEE_ATTR_SECRET_VALUE_4096_VALUE01[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, }; static const uint8_t TEE_ATTR_SECRET_VALUE_521_SHARED_SECRET_ECDH_VALUE01[] = { 0x00, 0x5f, 0xc7, 0x04, 0x77, 0xc3, 0xe6, 0x3b, 0xc3, 0x95, 0x4b, 0xd0, 0xdf, 0x3e, 0xa0, 0xd1, 0xf4, 0x1e, 0xe2, 0x17, 0x46, 0xed, 0x95, 0xfc, 0x5e, 0x1f, 0xdf, 0x90, 0x93, 0x0d, 0x5e, 0x13, 0x66, 0x72, 0xd7, 0x2c, 0xc7, 0x70, 0x74, 0x2d, 0x17, 0x11, 0xc3, 0xc3, 0xa4, 0xc3, 0x34, 0xa0, 0xad, 0x97, 0x59, 0x43, 0x6a, 0x4d, 0x3c, 0x5b, 0xf6, 0xe7, 0x4b, 0x95, 0x78, 0xfa, 0xc1, 0x48, 0xc8, 0x31, }; static const uint32_t TEE_ATTR_VALUE_ZERO; /* * Values are 32 bits, while this is 64 so it can never clash with a real * value. */ #define TEE_ATTR_VALUE_NONE 0xffffffffffffffff static uint32_t TEE_ATTR_RSA_PUBLIC_EXPONENT_VALUE01[] = { 0x10001 }; static const uint8_t BUFFER01[] = { 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, }; static const uint8_t INITIAL_DATA[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t SINGLE_BYTE[] = { 0 }; /** ALL_TEEC_UUID * * These constants are the UUID of existing * Trusted Applications */ /* "SMARTCSLTDATAST1" */ static TEEC_UUID UUID_TTA_testingInternalAPI_dataStorage = { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x44, 0x41, 0x54, 0x41, 0x53, 0x54, 0x31 } }; static TEEC_Result Invoke_ReadObjectData( ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t obj_handle, uint32_t buffer, uint32_t buffer_size) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; ALLOCATE_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, buffer_size, TEEC_MEM_OUTPUT, mem01_exit) op.params[0].value.a = obj_handle; op.params[0].value.b = buffer; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE, TEEC_NONE); free(saved_obj_data); saved_obj_data = NULL; saved_obj_data_size = 0; res = TEEC_InvokeCommand(sess, cmdId, &op, &org); if (!res) { size_t sz = op.params[1].memref.size; saved_obj_data = malloc(sz); memcpy(saved_obj_data, SHARE_MEM01->buffer, sz); saved_obj_data_size = sz; } TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } #define Check_ReadObjectData_DataRead(c, data, data_size) \ ADBG_EXPECT_BUFFER(c, data, data_size, saved_obj_data, \ saved_obj_data_size) #define Check_ReadObjectData_AfterWrite(c, data, data_size) \ ADBG_EXPECT_BUFFER(c, data, data_size, saved_obj_data, \ saved_obj_data_size) static TEEC_Result Invoke_RenamePersistentObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t obj_handle, const char *new_obj_id, bool use_parameter_buffer) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; size_t obj_id_len = 0; uint32_t org = 0; if (new_obj_id) obj_id_len = strlen(new_obj_id); ALLOCATE_AND_FILL_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, obj_id_len, TEEC_MEM_INPUT, obj_id_len, new_obj_id, mem01_exit); op.params[0].value.a = obj_handle; op.params[1].value.a = use_parameter_buffer; SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_AllocateTransientObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_type, uint32_t obj_size, uint32_t obj_handle) { return Invoke_Simple_Function_v2(c, sess, cmd, obj_handle, 0, obj_type, obj_size); } static TEEC_Result Invoke_GetObjectInfo1(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, uint32_t obj_info) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res; uint32_t org; op.params[0].value.a = obj_handle; op.params[0].value.b = obj_info; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INOUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT); memset(saved_obj_info, 0, sizeof(saved_obj_info[0])); res = TEEC_InvokeCommand(sess, cmd, &op, &org); if (!res) { saved_obj_info[0].obj_type = op.params[0].value.b; saved_obj_info[0].obj_size = op.params[1].value.a; saved_obj_info[0].max_obj_size = op.params[1].value.b; saved_obj_info[0].obj_usage = op.params[2].value.a; saved_obj_info[0].data_size = op.params[2].value.b; saved_obj_info[0].data_pos = op.params[3].value.a; saved_obj_info[0].handle_flags = op.params[3].value.b; } return res; } static TEEC_Result Invoke_GetObjectInfo(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, uint32_t obj_info) { return Invoke_GetObjectInfo1(c, sess, cmd, obj_handle, obj_info); } #define check_saved_obj_info(c, n, IN_ObjectType, IN_KeySize, IN_MaxKeySize, \ IN_ObjectUsage, IN_DataSize, IN_DataPosition, \ IN_HandleFlags_Data) \ do { \ if (ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <, \ MAX_NUM_SAVED_OBJ_INFO)) { \ ADBG_EXPECT(c, IN_ObjectType, \ saved_obj_info[n].obj_type); \ ADBG_EXPECT(c, IN_KeySize, \ saved_obj_info[n].obj_size); \ ADBG_EXPECT(c, IN_MaxKeySize, \ saved_obj_info[n].max_obj_size); \ ADBG_EXPECT(c, IN_ObjectUsage, \ saved_obj_info[n].obj_usage); \ ADBG_EXPECT(c, IN_DataSize, \ saved_obj_info[n].data_size); \ ADBG_EXPECT(c, IN_DataPosition, \ saved_obj_info[n].data_pos); \ ADBG_EXPECT(c, IN_HandleFlags_Data, \ saved_obj_info[n].handle_flags); \ } \ } while (0) #define Check_ObjectInfo(c, IN_ObjectType, IN_KeySize, IN_MaxKeySize, \ IN_ObjectUsage, IN_DataSize, IN_DataPosition, \ IN_HandleFlags_Handle, IN_HandleFlags_Data) \ do { \ check_saved_obj_info(c, 0, IN_ObjectType, IN_KeySize, \ IN_MaxKeySize, IN_ObjectUsage, \ IN_DataSize, IN_DataPosition, \ IN_HandleFlags_Data); \ ADBG_EXPECT(c, IN_HandleFlags_Handle, 0); \ } while (0) #define set_handle_flag(c, vector, flag) do { (vector) |= (flag); } while (0) #define set_usage_flag(c, vector, flag) do { (vector) |= (flag); } while (0) #define clear_usage_flag(c, vector, flag) do { (vector) &= ~(flag); } while (0) #define set_data_flag(c, vector, flag) do { (vector) |= (flag); } while (0) #define clear_data_flag(c, vector, flag) do { (vector) &= ~(flag); } while (0) static TEEC_Result Invoke_RestrictObjectUsage1(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, uint32_t obj_usage) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_handle, obj_usage); } static TEEC_Result Invoke_RestrictObjectUsage(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, uint32_t obj_usage) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_handle, obj_usage); } static TEEC_Result Invoke_ResetTransientObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_handle, 0); } static TEEC_Result Invoke_CloseAndDeletePersistentObject1(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_handle, 0); } static TEEC_Result Invoke_CloseAndDeletePersistentObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_handle, 0); } static TEEC_Result Invoke_CloseObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_handle, 0); } static TEEC_Result Invoke_CreatePersistentObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t storage_id, const char *obj_id, uint32_t flags, uint32_t attrs_obj_handle, const void *initial_data, size_t initial_data_len, uint32_t obj_handle) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEE_SUCCESS; uint32_t org = 0; static TEEC_SharedMemory shm_obj_id = { }; static TEEC_SharedMemory shm_data = { }; shm_obj_id.size = strlen(obj_id); shm_obj_id.flags = TEEC_MEM_INPUT; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm_obj_id); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; memcpy(shm_obj_id.buffer, obj_id, shm_obj_id.size); shm_data.size = initial_data_len; shm_data.flags = TEEC_MEM_INPUT; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm_data); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out_free_obj_id; memcpy(shm_data.buffer, initial_data, shm_data.size); op.params[0].value.a = obj_handle; op.params[0].value.b = storage_id; op.params[1].value.a = flags; op.params[1].value.b = attrs_obj_handle; SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, &shm_obj_id, shm_obj_id.size); SET_SHARED_MEMORY_OPERATION_PARAMETER(3, 0, &shm_data, shm_data.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_INPUT); res = TEEC_InvokeCommand(sess, cmd, &op, &org); TEEC_ReleaseSharedMemory(&shm_data); out_free_obj_id: TEEC_ReleaseSharedMemory(&shm_obj_id); return res; } static TEEC_Result Invoke_OpenPersistentObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t storage_id, const char *obj_id, uint32_t flags, uint32_t obj_handle) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEE_SUCCESS; uint32_t org = 0; static TEEC_SharedMemory shm = { }; shm.size = strlen(obj_id); shm.flags = TEEC_MEM_INPUT; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; memcpy(shm.buffer, obj_id, shm.size); op.params[0].value.a = obj_handle; op.params[0].value.b = storage_id; op.params[1].value.a = flags; SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, &shm, shm.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd, &op, &org); TEEC_ReleaseSharedMemory(&shm); return res; } #define add_attribute(c, vector, attr) do { (vector) |= BIT((attr)); } while (0) static uint32_t get_attribute_and_advance(uint32_t attr_list, size_t *n) { while (*n < 32) { size_t bit_idx = *n; (*n)++; if (attr_list & BIT(bit_idx)) return bit_idx; } return ATTRIBUTE_NONE; } static TEEC_Result Invoke_PopulateTransientObject(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, uint32_t attr_list) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; size_t n = 0; op.params[0].value.a = obj_handle; op.params[1].value.a = get_attribute_and_advance(attr_list, &n); op.params[1].value.b = get_attribute_and_advance(attr_list, &n); op.params[2].value.a = get_attribute_and_advance(attr_list, &n); op.params[2].value.b = get_attribute_and_advance(attr_list, &n); op.params[3].value.a = get_attribute_and_advance(attr_list, &n); op.params[3].value.b = get_attribute_and_advance(attr_list, &n); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT); return TEEC_InvokeCommand(sess, cmd, &op, &org); } static TEEC_Result Invoke_CopyObjectAttributes1(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dest_obj, uint32_t src_obj) { return Invoke_Simple_Function_v1(c, sess, cmd, dest_obj, src_obj); } static TEEC_Result Invoke_CopyObjectAttributes(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dest_obj, uint32_t src_obj) { return Invoke_Simple_Function_v1(c, sess, cmd, dest_obj, src_obj); } static TEEC_Result Invoke_InitValueAttribute(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t attr, uint32_t attr_id, uint32_t a, uint32_t a_size, uint32_t b, uint32_t b_size) { return Invoke_Simple_Function_v2(c, sess, cmd, attr, attr_id, a, b); } static TEEC_Result Invoke_AllocatePersistentObjectEnumerator(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_enum) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_enum, 0); } static TEEC_Result Invoke_StartPersistentObjectEnumerator(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_enum, uint32_t storage_id) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_enum, storage_id); } static TEEC_Result Invoke_ResetPersistentObjectEnumerator(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_enum) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_enum, 0); } static TEEC_Result Invoke_GetNextPersistentObject_All(ADBG_Case_t *c, TEEC_Session *sess, uint32_t obj_enum, uint32_t obj_info, uint32_t count) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; static TEEC_SharedMemory shm = { }; TEEC_Result res = TEEC_SUCCESS; uint32_t org = 0; size_t n = 0; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, count, <, MAX_NUM_SAVED_OBJ_INFO)) return TEEC_ERROR_BAD_PARAMETERS; shm.size = TEE_OBJECT_ID_MAX_LEN; shm.flags = TEEC_MEM_OUTPUT; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; for (n = 0; n < count; n++) { memset(&op, 0, sizeof(op)); op.params[0].value.a = obj_enum; op.params[0].value.b = obj_info; SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, &shm, shm.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, CMD_DS_GetNextPersistentObject, &op, &org); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) break; memcpy(&saved_obj_info[n].obj_id, shm.buffer, sizeof(saved_obj_info[n].obj_id)); saved_obj_info[n].obj_id_len = op.params[2].memref.size; memset(&op, 0, sizeof(op)); op.params[0].value.a = obj_info; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INOUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT); res = TEEC_InvokeCommand(sess, CMD_DS_Retrieve_ObjectInfo, &op, &org); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) break; saved_obj_info[n].obj_type = op.params[0].value.b; saved_obj_info[n].obj_size = op.params[1].value.a; saved_obj_info[n].max_obj_size = op.params[1].value.b; saved_obj_info[n].obj_usage = op.params[2].value.a; saved_obj_info[n].data_size = op.params[2].value.b; saved_obj_info[n].data_pos = op.params[3].value.a; saved_obj_info[n].handle_flags = op.params[3].value.b; } TEEC_ReleaseSharedMemory(&shm); return res; } static int find_saved_obj_id(const void *obj_id, size_t obj_id_len) { int n = 0; for (n = 0; n < MAX_NUM_SAVED_OBJ_INFO; n++) if (obj_id_len == saved_obj_info[n].obj_id_len && !memcmp(saved_obj_info[n].obj_id, obj_id, obj_id_len)) return n; return -1; } #define Check_EnumeratedPersistentObject(c, IN_ObjectID, IN_ObjectType, \ IN_KeySize, IN_MaxKeySize, \ IN_ObjectUsage, IN_DataSize, \ IN_HandleFlags_Handle, \ IN_HandleFlags_Data) \ do { \ int n = find_saved_obj_id(IN_ObjectID, strlen(IN_ObjectID)); \ \ if (!ADBG_EXPECT_COMPARE_SIGNED(c, n, >=, 0)) \ break; \ ADBG_EXPECT(c, IN_ObjectType, saved_obj_info[n].obj_type); \ ADBG_EXPECT(c, IN_KeySize, saved_obj_info[n].obj_size); \ ADBG_EXPECT(c, IN_MaxKeySize, saved_obj_info[n].max_obj_size); \ ADBG_EXPECT(c, IN_DataSize, saved_obj_info[n].data_size); \ ADBG_EXPECT(c, IN_HandleFlags_Handle | IN_HandleFlags_Data, \ saved_obj_info[n].handle_flags); \ } while (0) static TEEC_Result Invoke_GetNextPersistentObject_ErrorChecking(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_enum, uint32_t obj_info, bool obj_id_is_null, bool obj_id_len_is_null) { return Invoke_Simple_Function_v2(c, sess, cmd, obj_enum, obj_info, obj_id_is_null, obj_id_len_is_null); } static TEEC_Result Invoke_FreePersistentObjectEnumerator(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_enum) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_enum, 0); } static TEEC_Result Invoke_GenerateKey(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, uint32_t key_size, uint32_t attr_list) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; size_t n = 0; op.params[0].value.a = obj_handle; op.params[0].value.b = key_size; op.params[1].value.a = get_attribute_and_advance(attr_list, &n); op.params[1].value.b = get_attribute_and_advance(attr_list, &n); op.params[2].value.a = get_attribute_and_advance(attr_list, &n); op.params[2].value.b = get_attribute_and_advance(attr_list, &n); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE); return TEEC_InvokeCommand(sess, cmd, &op, &org); } static TEEC_Result GetObjectValueAttribute_helper(ADBG_Case_t *c, TEEC_Session *sess, uint32_t n, uint32_t cmd, uint32_t obj, uint32_t attr_id, bool extract_a, bool extract_b) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEE_SUCCESS; uint32_t org = 0; op.params[0].value.a = obj; op.params[0].value.b = attr_id; op.params[1].value.a = extract_a; op.params[1].value.b = extract_b; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd, &op, &org); if (!res) { memcpy(saved_attr[n].buf, &op.params[2].value, sizeof(op.params[2].value)); saved_attr[n].buf_size = sizeof(op.params[2].value); saved_attr[n].attr_id = attr_id; } else { memset(saved_attr + n, 0, sizeof(saved_attr[n])); } return res; } static TEEC_Result get_value_attr(ADBG_Case_t *c, TEEC_Session *sess, uint32_t n, uint32_t obj, uint32_t attr_id) { return GetObjectValueAttribute_helper(c, sess, n, CMD_DS_GetObjectValueAttribute, obj, attr_id, true, true); } static TEEC_Result get_buffer_attr(ADBG_Case_t *c, TEEC_Session *sess, uint32_t n, uint32_t obj, uint32_t attr_id) { return GetObjectBufferAttribute_helper(c, sess, n, CMD_DS_GetObjectBufferAttribute, obj, attr_id, false, BIG_ATTRIBUTE_BUFFER_SIZE); } static TEEC_Result GetAttributes_helper(ADBG_Case_t *c, TEEC_Session *sess, uint32_t obj, const uint32_t attr_ids[], size_t num_attr_ids) { TEEC_Result res = TEE_SUCCESS; size_t n = 0; for (n = 0; n < num_attr_ids; n++) { if (attr_ids[n] & BIT(29)) res = get_value_attr(c, sess, n, obj, attr_ids[n]); else res = get_buffer_attr(c, sess, n, obj, attr_ids[n]); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) break; } return res; } static TEEC_Result Macro_GetDHAttributes(ADBG_Case_t *c, TEEC_Session *sess, uint32_t obj) { const uint32_t attrs[] = { TEE_ATTR_DH_PRIME, TEE_ATTR_DH_BASE, TEE_ATTR_DH_PUBLIC_VALUE, TEE_ATTR_DH_PRIVATE_VALUE, TEE_ATTR_DH_X_BITS, }; return GetAttributes_helper(c, sess, obj, attrs, sizeof(attrs) / sizeof(attrs[0])); } /* TODO check the attributes too */ #define Check_GeneratedDHAttributes(c) \ do { ADBG_EXPECT_TRUE(c, true); } while (0) static TEEC_Result Invoke_GetObjectValueAttribute(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj, uint32_t attr_id, bool extract_a, bool extract_b) { return GetObjectValueAttribute_helper(c, sess, 0, cmd, obj, attr_id, extract_a, extract_b); } static TEEC_Result Macro_GetRSAAttributes(ADBG_Case_t *c, TEEC_Session *sess, uint32_t obj) { const uint32_t attrs[] = { TEE_ATTR_RSA_MODULUS, TEE_ATTR_RSA_PUBLIC_EXPONENT, TEE_ATTR_RSA_PRIVATE_EXPONENT, TEE_ATTR_RSA_PRIME1, TEE_ATTR_RSA_PRIME2, TEE_ATTR_RSA_EXPONENT1, TEE_ATTR_RSA_EXPONENT2, TEE_ATTR_RSA_COEFFICIENT, }; return GetAttributes_helper(c, sess, obj, attrs, sizeof(attrs) / sizeof(attrs[0])); } /* TODO check the attributes too */ #define Check_GeneratedRSAAttributes(c) \ do { ADBG_EXPECT_TRUE(c, true); } while (0) #define Check_ObjectBufferAttribute(c, attr_buf, attr_buf_len) \ do { \ ADBG_EXPECT_BUFFER(c, attr_buf, attr_buf_len, \ saved_attr[0].buf, \ saved_attr[0].buf_size); \ } while (0) static bool check_values(uint64_t a, uint64_t b, const uint8_t buf[], size_t blen) { uint32_t exp_val = 0; if (blen != sizeof(uint32_t) * 2) return false; if (a != TEE_ATTR_VALUE_NONE) { memcpy(&exp_val, buf, sizeof(exp_val)); if (a != exp_val) return false; } if (b != TEE_ATTR_VALUE_NONE) { memcpy(&exp_val, buf + sizeof(uint32_t), sizeof(exp_val)); if (b != exp_val) return false; } return true; } #define Check_ObjectValueAttribute(c, a, a_size, b, b_size) \ ADBG_EXPECT_TRUE(c, check_values(a, b, saved_attr[0].buf, \ saved_attr[0].buf_size)) static TEEC_Result Invoke_StoreBuffer(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t buffer, const void *data, size_t size) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEE_SUCCESS; uint32_t org = 0; static TEEC_SharedMemory shm_data = { }; unsigned int pt1 = 0; op.params[0].value.a = buffer; if (data) { shm_data.size = size; shm_data.flags = TEEC_MEM_INPUT; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm_data); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; memcpy(shm_data.buffer, data, shm_data.size); SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, &shm_data, shm_data.size); pt1 = TEEC_MEMREF_PARTIAL_INPUT; } else { op.params[1].value.a = size; pt1 = TEEC_VALUE_INPUT; } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, pt1, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd, &op, &org); TEEC_ReleaseSharedMemory(&shm_data); return res; } static TEEC_Result Invoke_SeekObjectData(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, ssize_t offset, int whence) { uint32_t offs; uint32_t offs_negative; if (offset >= 0) { offs = offset; offs_negative = 0; } else { offs = -offset; offs_negative = 1; } return Invoke_Simple_Function_v3(c, sess, cmd, obj_handle, 0, offs, offs_negative, whence, 0); } static TEEC_Result Invoke_WriteObjectData(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, uint32_t buffer) { return Invoke_Simple_Function_v1(c, sess, cmd, obj_handle, buffer); } static TEEC_Result Invoke_TruncateObjectData(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t obj_handle, uint32_t size) { return Invoke_Simple_Function_v2(c, sess, cmd, obj_handle, 0, size, 0); } static TEEC_Result Invoke_StoreAttributeBuffer(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t buffer, const void *value_bufptr, size_t value_size) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEE_SUCCESS; uint32_t org = 0; static TEEC_SharedMemory shm = { }; shm.size = value_size; shm.flags = TEEC_MEM_INPUT; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; memcpy(shm.buffer, value_bufptr, shm.size); op.params[0].value.a = buffer; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, &shm, shm.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd, &op, &org); TEEC_ReleaseSharedMemory(&shm); return res; } static TEEC_Result Invoke_InitRefAttribute(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t attr, uint32_t attr_id, uint32_t buffer) { return Invoke_Simple_Function_v2(c, sess, cmd, attr, attr_id, buffer, 0); } static TEEC_Result Macro_StoreRefAttribute(ADBG_Case_t *c, TEEC_Session *sess, uint32_t attr, uint32_t buffer, uint32_t attr_id, const void *value_bufptr, size_t value_size) { TEEC_Result res = TEE_SUCCESS; res = Invoke_StoreAttributeBuffer(c, sess, CMD_DS_StoreBuffer, buffer, value_bufptr, value_size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; res = Invoke_InitRefAttribute(c, sess, CMD_DS_InitRefAttribute, attr, attr_id, buffer); ADBG_EXPECT_TEEC_SUCCESS(c, res); return res; } #endif /* XML_DATASTORAGE_API_H_ */ optee_test-4.3.0/host/xtest/gp/include/xml_internal_api.h000066400000000000000000000546031464074351400235640ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2020, Linaro Limited */ #ifndef XML_INTERNAL_API_H_ #define XML_INTERNAL_API_H_ #include #include #include #include #include #include #include #include #include #include #include "xml_common_api.h" #include "xtest_helpers.h" #include "xtest_test.h" #define Invoke_MaskUnmaskCancellations Invoke_Simple_Function #define Invoke_ProcessTAInvoke_Payload_Value Invoke_Simple_Function #define Invoke_ProcessTAInvoke_Payload_Value_In_Out Invoke_Simple_Function #define Invoke_ProcessTAInvoke_Payload_Memref Invoke_Simple_Function #define Invoke_GetPropertyAsBool_withoutEnum Invoke_GetPropertyAsXXX_withoutEnum #define Invoke_GetPropertyAsU32_withoutEnum Invoke_GetPropertyAsXXX_withoutEnum #define Invoke_GetPropertyAsUUID_withoutEnum Invoke_GetPropertyAsXXX_withoutEnum #define Invoke_GetPropertyAsIdentity_withoutEnum \ Invoke_GetPropertyAsXXX_withoutEnum #define Invoke_GetPropertyAsBinaryBlock_withoutEnum \ Invoke_GetPropertyAsXXX_withoutEnum #define Invoke_GetPropertyAsString_withoutEnum \ Invoke_GetPropertyAsXXX_withoutEnum #define Invoke_GetPropertyAsXXXX_fromEnum Invoke_StartPropertyEnumerator #define Invoke_FreePropertyEnumerator Invoke_ResetPropertyEnumerator #define Invoke_GetNextProperty_enumNotStarted Invoke_ResetPropertyEnumerator #define Invoke_ProcessTAInvoke_DeadErrorSuccess \ Invoke_ProcessInvokeTAOpenSession #define CLIENT_APP01 NULL #define TEEC_UNDEFINED_ERROR 0xDEADDEAD #define TEEC_ORIGIN_ANY_NOT_TRUSTED_APP 0x00000005 /* same as TEE_ORIGIN_NOT_TRUSTED_APP */ #define SIZE_ZERO 0 #define TEE_ERROR_TOO_SHORT_BUFFER TEE_ERROR_SHORT_BUFFER #define CMD_TEE_GetPropertyAsString_withoutEnum 0x00000010 #define CMD_TEE_GetPropertyAsBool_withoutEnum 0x00000015 #define CMD_TEE_GetPropertyAsInt_withoutEnum 0x00000020 #define CMD_TEE_GetPropertyAsBinaryBlock_withoutEnum 0x00000025 #define CMD_TEE_GetPropertyAsUUID_withoutEnum 0x00000030 #define CMD_TEE_GetPropertyAsIdentity_withoutEnum 0x00000035 #define CMD_TEE_GetPropertyAsXXXX_fromEnum 0x00000045 #define CMD_TEE_AllocatePropertyEnumerator 0x00000060 #define CMD_TEE_StartPropertyEnumerator 0x00000065 #define CMD_TEE_ResetPropertyEnumerator 0x00000070 #define CMD_TEE_FreePropertyEnumerator 0x00000075 #define CMD_TEE_GetPropertyName 0x00000080 #define CMD_TEE_Malloc 0x00000100 #define CMD_TEE_Realloc 0x00000110 #define CMD_TEE_MemMove 0x00000120 #define CMD_TEE_MemCompare 0x00000130 #define CMD_TEE_MemFill 0x00000140 #define CMD_TEE_Panic 0x00000104 #define CMD_TEE_CheckMemoryAccessRight 0x00000103 #define CMD_TEE_GetCancellationFlag_RequestedCancel 0x00000105 #define CMD_TEE_MaskUnmaskCancellations 0x00000106 #define CMD_TEE_Free 0x00000107 #define CMD_ProcessInvokeTAOpenSession 0x00000200 #define CMD_ProcessTAInvokeTA_simple 0x00000201 #define CMD_ProcessTAInvokeTA_PayloadValue 0x00000202 #define CMD_TEE_GetNextPropertyEnumerator_notStarted 0x00000203 #define CMD_ProcessTAInvokeTA_PayloadMemref 0x00000204 #define CMD_ProcessTAInvokeTA_PayloadValue_In_Out 0x00000205 #define CMD_TEE_OpenTASession 0x00000300 #define CMD_TEE_InvokeTACommand 0x00000301 #define CMD_TEE_CloseTASession 0x00000302 #define CMD_SUCCESS 1 #define CMD_SET_PANIC_ON_DESTROY 1 static TEEC_SharedMemory share_mem[2]; static TEEC_SharedMemory *SHARE_MEM01 = share_mem; static TEEC_SharedMemory *SHARE_MEM02 = share_mem + 1; static TEEC_Session session[2]; static TEEC_Session *SESSION01 = session; static TEEC_Session *SESSION02 = session + 1; static TEEC_Context context[2]; static TEEC_Context *CONTEXT01 = context; static TEEC_Context *CONTEXT02 = context + 1; #define TA_SESSION01 0 #define TA_SESSION02 1 #define TA_SESSION_NULL 0xffffffff static uint32_t BIG_SIZE = 1024; static char *NO_DATA; static uint64_t enumerator1; static uint64_t *ENUMERATOR1 = &enumerator1; #define ANY_OWNER_NOT_SET 0 #define ANY_OWNER_SET TEE_MEMORY_ACCESS_ANY_OWNER #define ANY_OWNER_SET_ACCESS_READ (TEE_MEMORY_ACCESS_ANY_OWNER | \ TEE_MEMORY_ACCESS_READ) #define ANY_OWNER_SET_ACCESS_WRITE (TEE_MEMORY_ACCESS_ANY_OWNER | \ TEE_MEMORY_ACCESS_WRITE) #define ANY_OWNER_SET_ACCESS_READ_WRITE (TEE_MEMORY_ACCESS_ANY_OWNER | \ TEE_MEMORY_ACCESS_READ | \ TEE_MEMORY_ACCESS_WRITE) #define SMALL_SIZE 0xA #define CMD_TEE_GetInstanceData 0x00000101 #define CMD_TEE_SetInstanceData 0x00000102 #define CMD_TEE_GetPropertyAsU32_withoutEnum 0x00000020 #define NORMAL_SIZE_BUFFER 1 #define TOO_SHORT_BUFFER 0 #define CASE_NOT_NULL 1 #define CASE_NULL 0 #define CASE_BUFFER1_DIFFERS_FIRST 1 #define CASE_BUFFER2_DIFFERS_FIRST 2 #define CASE_EQUAL 0 #define CASE_ERROR_ICA2 3 #define CASE_PAYLOAD_VALUE 4 #define CASE_SUCCESS_ICA2 2 #define CASE_TARGET_DEAD_ICA2 1 #define CASE_CANCEL_TIMEOUT 2 #define CASE_ITEM_NOT_FOUND 3 #define CASE_SUCCESS 0 #define CASE_TARGET_BUSY 4 #define CASE_TARGET_DEAD 1 #define RESULT_EQUAL 0 #define RESULT_INTEGER_GREATER_THAN_ZERO 1 #define RESULT_INTEGER_LOWER_THAN_ZERO 2 #define HINT_ZERO 0 #define SIZE_OVER_MEMORY 0xFFFFFFFE #define TEE_ORIGIN_NOT_TRUSTED_APP 5 /* same as TEEC_ORIGIN_ANY_NOT_TRUSTED_APP */ #define TEE_PROPSET_IMPLEMENTATION TEE_PROPSET_TEE_IMPLEMENTATION static char VALUE_PREDEFINED_STRING[] = "this is a test string"; static char VALUE_PREDEFINED_U32[] = "48059"; static char VALUE_PREDEFINED_UUID[] = "534D4152-542D-4353-4C54-2D54412D3031"; static char VALUE_PREDEFINED_IDENTITY[] = "F0000000:534D4152-542D-4353-4C54-2D54412D3031"; static char *VALUE_NONE; static char VALUE_PREDEFINED_BINARY_BLOCK[] = "VGhpcyBpcyBhIHRleHQgYmluYXJ5IGJsb2Nr"; static char VALUE_PREDEFINED_BOOLEAN[] = "true"; static uint8_t CHAR1[] = { 0x10 }; static char GPD_CLIENT_identity[] = "gpd.client.identity\0"; static char GPD_TA_appID[] = "gpd.ta.appID\0"; static char GPD_TA_dataSize[] = "gpd.ta.dataSize\0"; static char GPD_TA_instanceKeepAlive[] = "gpd.ta.instanceKeepAlive\0"; static char GPD_TA_multiSession[] = "gpd.ta.multiSession\0"; static char GPD_TA_singleInstance[] = "gpd.ta.singleInstance\0"; static char GPD_TA_stackSize[] = "gpd.ta.stackSize\0"; static char GPD_TEE_ARITH_maxBigIntSize[] = "gpd.tee.arith.maxBigIntSize\0"; static char GPD_TEE_SYSTEM_TIME_protectionLevel[] = "gpd.tee.systemTime.protectionLevel\0"; static char GPD_TEE_TA_PERSISTENT_TIME_protectionLevel[] = "gpd.tee.TAPersistentTime.protectionLevel\0"; static char GPD_TEE_apiversion[] = "gpd.tee.apiversion\0"; static char GPD_TEE_description[] = "gpd.tee.description\0"; static char GPD_TEE_deviceID[] = "gpd.tee.deviceID\0"; static char PROPERTY_NAME_NOT_VALID_ENCODING[] = "gpd.\t\n\r\0"; static char PROPERTY_NAME_UNKNOWN[] = "unknown\0"; static char SMC_TA_testuuid[] = "smc.ta.testuuid\0"; static char SMC_TA_testbinaryblock[] = "smc.ta.testbinaryblock\0"; static char SMC_TA_testbooltrue[] = "smc.ta.testbooltrue\0"; static char SMC_TA_testidentity[] = "smc.ta.testidentity\0"; static char SMC_TA_teststring[] = "smc.ta.teststring\0"; static char SMC_TA_testu32[] = "smc.ta.testu32\0"; static char STRING_SAMPLE_SIZE_4_CHAR[] = "TEE\0"; /** ALL_TEEC_UUID * * These constants are the UUID of existing * Trusted Applications */ static TEEC_UUID UUID_TTA_testingInternalAPI_TrustedCoreFramework = { 0x534D4152, 0x542D, 0x4353, { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x30, 0x31 } }; static TEEC_UUID UUID_TTA_testingInternalAPI_TrustedCoreFramework_ICA = { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x41, 0x54, 0x43, 0x46, 0x49, 0x43, 0x41 } }; static TEEC_UUID UUID_TTA_testingInternalAPI_TrustedCoreFramework_ICA2 = { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x54, 0x43, 0x46, 0x49, 0x43, 0x41, 0x32 } }; static TEEC_UUID UUID_TTA_testingInternalAPI_TrustedCoreFramework_MultipleInstanceTA = { 0x534D4152, 0x5443, 0x534C, { 0x4D, 0x4C, 0x54, 0x49, 0x4E, 0x53, 0x54, 0x43 } }; static TEEC_UUID UUID_TTA_testingInternalAPI_TrustedCoreFramework_SingleInstanceTA = { 0x534D4152, 0x5443, 0x534C, { 0x53, 0x47, 0x4C, 0x49, 0x4E, 0x53, 0x54, 0x43 } }; static TEEC_UUID UUID_Unknown = { 0x534D4152, 0x542D, 0x4355, { 0x4E, 0x4B, 0x2D, 0x4E, 0x4F, 0x2D, 0x57, 0x4E } }; static TEEC_UUID UUID_TTA_testingInternalAPI_TrustedCoreFramework_PanicAtCloseSession = { 0x534D4152, 0x5443, 0x534C, { 0x43, 0x4C, 0x4F, 0x50, 0x41, 0x4E, 0x49, 0x43 } }; static TEEC_UUID UUID_TTA_testingInternalAPI_TrustedCoreFramework_PanicAtCreation = { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x43, 0x52, 0x50, 0x41, 0x4E, 0x49, 0x43 } }; static uint64_t value_to_u64(TEEC_Value *val) { return ((uint64_t)val->b << 32) | val->a; } static TEEC_Value u64_to_value(uint64_t u) { return (TEEC_Value){ .a = u , .b = u >> 32 }; } static void __maybe_unused *cancellation_thread(void *arg) { TEEC_RequestCancellation((TEEC_Operation *)arg); return NULL; } #define RequestCancellation(op) \ (void)ADBG_EXPECT(c, 0, \ pthread_create(&THREAD02, NULL, cancellation_thread, \ (void *)op)); \ (void)ADBG_EXPECT(c, 0, pthread_join(THREAD02, NULL)); static TEEC_Result Invoke_MemFill(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t memoryFillSize, uint8_t *charFill) { return Invoke_Simple_Function_v2(c, sess, cmdId, memoryFillSize, 0, *charFill, 0); } static TEEC_Result Invoke_GetPropertyAsXXX_withoutEnum( ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, TEE_PropSetHandle propSet, char *name, uint32_t kindBuffer, char *expectedValue) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; uint32_t nameLen = 0; uint32_t expectedValueLen = 0; nameLen = strlen(name) + 1; ALLOCATE_AND_FILL_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, BIG_SIZE, TEEC_MEM_INPUT, nameLen, name, mem01_exit) if (kindBuffer == TOO_SHORT_BUFFER) { ALLOCATE_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM02, 1, TEEC_MEM_OUTPUT, mem02_exit) } else { ALLOCATE_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM02, BIG_SIZE, TEEC_MEM_OUTPUT, mem02_exit) } op.params[0].value.a = (unsigned long)propSet; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, nameLen) SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, SHARE_MEM02, SHARE_MEM02->size) op.paramTypes = TEEC_PARAM_TYPES( TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); if (res) goto exit; if (expectedValue != VALUE_NONE) { expectedValueLen = strlen(expectedValue); if (cmdId != CMD_TEE_GetPropertyAsBool_withoutEnum && cmdId != CMD_TEE_GetPropertyAsIdentity_withoutEnum && cmdId != CMD_TEE_GetPropertyAsUUID_withoutEnum && cmdId != CMD_TEE_GetPropertyAsU32_withoutEnum) expectedValueLen++; if (!ADBG_EXPECT_BUFFER(c, expectedValue, expectedValueLen, op.params[2].memref.parent->buffer, op.params[2].memref.size)) res = TEEC_ERROR_GENERIC; } exit: TEEC_ReleaseSharedMemory(SHARE_MEM02); mem02_exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_MemCompare( ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t memorySize, uint32_t Case, uint32_t compareResult) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; uint32_t outValue = 0; op.params[0].value.a = memorySize; op.params[1].value.a = Case; op.params[2].value.a = outValue; op.paramTypes = TEEC_PARAM_TYPES( TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); if (res != TEEC_SUCCESS) goto exit; if (compareResult == RESULT_EQUAL) { (void)ADBG_EXPECT_COMPARE_SIGNED(c, op.params[2].value.a, ==, 0); } else if (compareResult == RESULT_INTEGER_GREATER_THAN_ZERO) { (void)ADBG_EXPECT_COMPARE_SIGNED(c, (int32_t)op.params[2].value.a, >, 0); } else if (compareResult == RESULT_INTEGER_LOWER_THAN_ZERO) { (void)ADBG_EXPECT_COMPARE_SIGNED(c, (int32_t)op.params[2].value.a, <, 0); } exit: return res; } static TEEC_Result Invoke_SetInstanceData(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, char *data) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; size_t data_size = strlen(data) + 1; uint32_t org; ALLOCATE_AND_FILL_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, BIG_SIZE, TEEC_MEM_INPUT, data_size, data, mem01_exit) SET_SHARED_MEMORY_OPERATION_PARAMETER(0, 0, SHARE_MEM01, data_size) op.paramTypes = TEEC_PARAM_TYPES( TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_GetInstanceData( ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, char *expectedData, uint32_t expectedDataSize) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; ALLOCATE_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, BIG_SIZE, TEEC_MEM_OUTPUT, mem01_exit) SET_SHARED_MEMORY_OPERATION_PARAMETER(0, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES( TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); if (res != TEEC_SUCCESS) goto exit; if (res != TEE_ERROR_GENERIC) { if (!ADBG_EXPECT_BUFFER(c, expectedData, expectedDataSize, SHARE_MEM01->buffer, op.params[0].memref.size)) res = TEE_ERROR_GENERIC; } exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_ProcessInvokeTAOpenSession( ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t TACmd, TEEC_UUID *UUID, uint32_t returnOrigin) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_UUID swapped_uuid = *UUID; uint32_t org; swapped_uuid.timeLow = htonl(swapped_uuid.timeLow); swapped_uuid.timeMid = htons(swapped_uuid.timeMid); swapped_uuid.timeHiAndVersion = htons(swapped_uuid.timeHiAndVersion); ALLOCATE_AND_FILL_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, BIG_SIZE, TEEC_MEM_INPUT, 16, &swapped_uuid, mem01_exit) op.params[0].value.a = TACmd; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, 16) op.params[2].value.a = returnOrigin; op.paramTypes = TEEC_PARAM_TYPES( TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); if (TEE_ORIGIN_NOT_TRUSTED_APP == returnOrigin) { ADBG_EXPECT_COMPARE_UNSIGNED(c, op.params[2].value.a, !=, TEE_ORIGIN_TRUSTED_APP); } else { ADBG_EXPECT_COMPARE_UNSIGNED(c, op.params[2].value.a, ==, returnOrigin); } TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_CheckMemoryAccessRight(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t memoryParamType, uint32_t memoryAccessFlags) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; uint32_t memory_flag; switch (memoryParamType) { case TEEC_MEMREF_TEMP_INPUT: case TEEC_MEMREF_PARTIAL_INPUT: memory_flag = TEEC_MEM_INPUT; break; case TEEC_MEMREF_TEMP_OUTPUT: case TEEC_MEMREF_PARTIAL_OUTPUT: memory_flag = TEEC_MEM_OUTPUT; break; case TEEC_MEMREF_TEMP_INOUT: case TEEC_MEMREF_PARTIAL_INOUT: case TEEC_MEMREF_WHOLE: memory_flag = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT; break; default: memory_flag = 0; break; } ALLOCATE_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, BIG_SIZE, memory_flag, mem01_exit) op.params[0].value.a = memoryAccessFlags; SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES( TEEC_VALUE_INPUT, memoryParamType, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_MemMove(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t memorySize) { return Invoke_Simple_Function_v1(c, sess, cmdId, memorySize, 0); } static TEEC_Result Invoke_AllocatePropertyEnumerator(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint64_t *enumerator) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; op.paramTypes = TEEC_PARAM_TYPES( TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); if (res != TEEC_SUCCESS) goto exit; *enumerator = value_to_u64(&op.params[0].value); exit: return res; } static TEEC_Result Invoke_StartPropertyEnumerator(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint64_t *enumerator, TEE_PropSetHandle propSet) { return Invoke_Simple_Function_v2(c, sess, cmdId, *enumerator, *enumerator >> 32, (unsigned long)propSet, 0); } static TEEC_Result Invoke_ResetPropertyEnumerator(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint64_t *enumerator) { return Invoke_Simple_Function_v1(c, sess, cmdId, *enumerator, *enumerator >> 32); } static TEEC_Result Invoke_GetPropertyName(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint64_t *enumerator, char *propertyName, uint32_t kindBuffer) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; uint32_t strLen = 0; if (kindBuffer == TOO_SHORT_BUFFER) { ALLOCATE_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, 1, TEEC_MEM_OUTPUT, mem01_exit) } else { ALLOCATE_SHARED_MEMORY(sess->imp.ctx, SHARE_MEM01, BIG_SIZE, TEEC_MEM_OUTPUT, mem01_exit) } op.params[0].value = u64_to_value(*enumerator); SET_SHARED_MEMORY_OPERATION_PARAMETER(1, 0, SHARE_MEM01, SHARE_MEM01->size) op.paramTypes = TEEC_PARAM_TYPES( TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); if (res != TEEC_SUCCESS) goto exit; strLen = strlen(propertyName) + 1; (void)ADBG_EXPECT_COMPARE_SIGNED(c, op.params[1].memref.size, ==, strLen); (void)ADBG_EXPECT_COMPARE_SIGNED(c, 0, ==, memcmp(SHARE_MEM01->buffer, propertyName, strLen)); exit: TEEC_ReleaseSharedMemory(SHARE_MEM01); mem01_exit: return res; } static TEEC_Result Invoke_Malloc(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t memorySize, uint32_t hint) { return Invoke_Simple_Function_v2(c, sess, cmdId, memorySize, 0, hint, 0); } static TEEC_Result Invoke_Panic(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId) { TEEC_Result res = TEE_ERROR_NOT_SUPPORTED; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; op.paramTypes = TEEC_PARAM_TYPES( TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmdId, &op, &org); if (res != TEEC_SUCCESS) goto exit; ADBG_EXPECT_COMPARE_SIGNED(c, org, ==, TEE_ORIGIN_TEE); exit: return res; } static TEEC_Result Invoke_Realloc(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t oldMemorySize, uint32_t newMemorySize) { return Invoke_Simple_Function_v2(c, sess, cmdId, oldMemorySize, 0, newMemorySize, 0); } static TEEC_Result Invoke_Free(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t Case) { return Invoke_Simple_Function_v1(c, sess, cmdId, Case, 0); } static TEEC_Result Invoke_OpenTASession(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t ta_session, TEEC_UUID *uuid, uint32_t exp_eo) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t eo = 0; TEEC_UUID swapped_uuid = *uuid; TEEC_SharedMemory shm = { .flags = TEEC_MEM_INPUT, .buffer = &swapped_uuid, .size = sizeof(*uuid), }; swapped_uuid.timeLow = htonl(swapped_uuid.timeLow); swapped_uuid.timeMid = htons(swapped_uuid.timeMid); swapped_uuid.timeHiAndVersion = htons(swapped_uuid.timeHiAndVersion); res = TEEC_RegisterSharedMemory(sess->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE); op.params[0].value.a = ta_session; op.params[1].memref.offset = 0; op.params[1].memref.size = sizeof(*uuid); op.params[1].memref.parent = &shm; res = TEEC_InvokeCommand(sess, cmd_id, &op, &eo); TEEC_ReleaseSharedMemory(&shm); if (!ADBG_EXPECT(c, TEE_ORIGIN_TRUSTED_APP, eo)) return TEEC_ERROR_GENERIC; if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; ADBG_EXPECT(c, exp_eo, op.params[2].value.b); return op.params[2].value.a; } static TEEC_Result Invoke_InvokeTACommand(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t ta_session, uint32_t ta_cmd_id, uint32_t exp_eo) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t eo = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); op.params[0].value.a = ta_session; op.params[0].value.b = ta_cmd_id; res = TEEC_InvokeCommand(sess, cmd_id, &op, &eo); if (!ADBG_EXPECT(c, TEE_ORIGIN_TRUSTED_APP, eo)) return TEEC_ERROR_GENERIC; if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; ADBG_EXPECT(c, exp_eo, op.params[1].value.b); return op.params[1].value.a; } static TEEC_Result Invoke_CloseTASession(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t ta_session) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t eo = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].value.a = ta_session; res = TEEC_InvokeCommand(sess, cmd_id, &op, &eo); ADBG_EXPECT(c, TEE_ORIGIN_TRUSTED_APP, eo); return res; } #endif /* XML_INTERNAL_API_H_ */ optee_test-4.3.0/host/xtest/gp/include/xml_timearithm_api.h000066400000000000000000001035661464074351400241160ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2020, Linaro Limited */ #ifndef XML_TIMEARITHM_API_H_ #define XML_TIMEARITHM_API_H_ #include #include #include #include #include #include #include #include #include #include #include "xml_common_api.h" #include "xtest_helpers.h" #include "xtest_test.h" #define Invoke_GetSystemTime Invoke_Simple_Function #define Invoke_GetREETime Invoke_Simple_Function #define Invoke_SetTAPersistentTime_and_GetTAPersistentTime_Overflow \ Invoke_Simple_Function #define Invoke_SetTAPersistentTime_and_GetTAPersistentTime \ Invoke_Simple_Function #define Invoke_BigIntConvertToOctetStringOverflow Invoke_Simple_Function #define Invoke_BigIntConvertFromOctetStringOverflow Invoke_Simple_Function #define Invoke_GetTAPersistentTime_NotSet_and_SetTAPersistentTime \ Invoke_Simple_Function #define Test_Tool_Erase_Persistent_Time Invoke_Simple_Function #define CMD_TEE_BigIntAdd 0x00000010 #define CMD_TEE_BigIntAddMod 0x00000011 #define CMD_TEE_BigIntCmp 0x00000012 #define CMD_TEE_BigIntCmpS32 0x00000013 #define CMD_TEE_BigIntComputeExtendedGcd 0x00000014 #define CMD_TEE_BigIntDiv 0x00000018 #define CMD_TEE_BigIntGetBit 0x00000020 #define CMD_TEE_BigIntGetBitCount 0x00000021 #define CMD_TEE_BigIntInvMod 0x00000023 #define CMD_TEE_BigIntIsProbablePrime 0x00000024 #define CMD_TEE_BigIntMod 0x00000025 #define CMD_TEE_BigIntMul 0x00000026 #define CMD_TEE_BigIntMulMod 0x00000027 #define CMD_TEE_BigIntNeg 0x00000028 #define CMD_TEE_BigIntRelativePrime 0x00000029 #define CMD_TEE_BigIntShiftRight 0x00000030 #define CMD_TEE_BigIntSquare 0x00000031 #define CMD_TEE_BigIntSquareMod 0x00000032 #define CMD_TEE_BigIntSub 0x00000033 #define CMD_TEE_BigIntSubMod 0x00000034 #define CMD_Arithm_TTA_Store_Value_S32 0x00000038 #define CMD_Arithm_TTA_New_BigInt 0x00000039 #define CMD_Arithm_BigIntConvertToOctetString 0x00000040 #define CMD_Arithm_BigIntComputeFMM 0x00000041 #define CMD_Arithm_BigIntConvertFromFMM 0x00000042 #define CMD_Arithm_BigIntConvertToFMM 0x00000043 #define CMD_Arithm_BigIntInitFMMContext 0x00000044 #define CMD_Arithm_TTA_New_BigIntFMM 0x00000045 #define CMD_Arithm_BigIntConvertFromOctetString 0x00000046 #define CMD_Arithm_BigIntConvertToS32 0x00000047 #define CMD_Arithm_BigIntConvertFromS32 0x00000048 #define CMD_TEE_GetSystemTime 0x00000010 #define CMD_TEE_Wait 0x00000011 #define CMD_TEE_SetTAPersistentTime_and_GetTAPersistentTime 0x00000012 #define CMD_TEE_GetREETime 0x00000013 #define CMD_TEE_SetTAPersistentTime_and_GetTAPersistentTimeOverflow 0x00000014 #define CMD_TEE_GetTAPersistentTimeNotSetAndSetTAPersistentTime 0x00000015 static TEEC_Session session01; static TEEC_Session *SESSION01 = &session01; static TEEC_Context context01; static TEEC_Context *CONTEXT01 = &context01; static TEEC_Context context02; static TEEC_Context *CONTEXT02 = &context02; static TEEC_Operation operation01; static TEEC_Operation *OPERATION01 = &operation01; #define CMD_TEE_SetTAPersistentTime_and_GetTAPersistentTime_Overflow \ CMD_TEE_SetTAPersistentTime_and_GetTAPersistentTimeOverflow #define CLIENT_APP01 NULL #define TEEC_UNDEFINED_ERROR 0xDEADDEAD #define TEEC_ORIGIN_ANY_NOT_TRUSTED_APP 0x00000005 /* same as TEE_ORIGIN_NOT_TRUSTED_APP */ static uint32_t saved_octet_string_sign; static void *saved_octet_string; static size_t saved_octet_string_size; /*Test data defines*/ static pthread_t THREAD02; #define BIT0_MASK 1 #define BIT1_MASK 2 #define BIT2_MASK 4 #define NEGATIVE 0 #define POSITIVE 1 #define RESULT_NOT_A_PRIME_SURE 0 #define RESULT_PRIME_SURE_OR_MAYBE 1 #define RESULT_NOT_A_PRIME 0 #define RESULT_PRIME 1 #define RESULT_EQUAL 0 #define RESULT_INTEGER_GREATER_THAN_ZERO 1 #define RESULT_INTEGER_LOWER_THAN_ZERO 2 #define CASE_WAIT_CANCELLED 1 #define CASE_WAIT_SUCCESS 2 #define STORED_VALUE_BIG_INT_1 0 #define STORED_VALUE_BIG_INT_2 1 #define STORED_VALUE_BIG_INT_3 8 #define STORED_VALUE_BIG_INT_4 9 #define STORED_VALUE_FMM_BIG_INT_1 310 #define STORED_VALUE_FMM_BIG_INT_2 311 #define STORED_VALUE_FMM_CONTEXT_1 300 #define STORED_VALUE_FMM_RESULT 312 #define STORED_VALUE_MODULUS 2 #define STORED_VALUE_RESULT 3 #define STORED_VALUE_RESULT_4 6 #define STORED_VALUE_RESULT_5 7 #define STORED_VALUE_RESULT_FMM_CONVERTED 10 #define STORED_VALUE_RESULT_U 4 #define STORED_VALUE_RESULT_V 5 #define STORED_VALUE_SHORT_VAL_1 100 #define STORED_VALUE_NULL 200 static uint32_t CONFIDENCE_LEVEL_80 = 80; static uint8_t BIG_VALUE1_SIZE_64_BITS[] = { 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; static uint8_t BIG_VALUE11_SIZE_2048_BITS_PRIME_WITH_VALUE5[] = { 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; static uint8_t BIG_VALUE20_SIZE_2048_BITS_PRIME_WITH_VALUE18[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, }; static uint8_t BIG_VALUE2_SIZE_64_BITS[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static uint8_t BIG_VALUE3_SIZE_32_BITS[] = { 0x0F, 0xFF, 0xFF, 0xFF, }; static uint8_t BIG_VALUE4_SIZE_32_BITS[] = { 0x01, 0x00, 0x00, 0x00, }; static uint8_t BIG_VALUE5_SIZE_2048_BITS[] = { 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; static uint8_t BIG_VALUE6_SIZE_2048_BITS[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static uint8_t BIG_VALUE7_SIZE_1024_BITS[] = { 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; static uint8_t BIG_VALUE10_SIZE_32_BITS_PRIME_WITH_VALUE3[] = { 0x0E, 0xFF, 0xFF, 0xFF, }; static uint8_t BIG_VALUE13_SIZE_32_BITS_PRIME[] = { 0x00, 0x00, 0x0D, 0x69, }; static uint8_t BIG_VALUE14_SIZE_32_BITS_NOT_PRIME[] = { 0x00, 0x00, 0x0D, 0x68, }; static uint8_t BIG_VALUE15_SIZE_32_BITS[] = { 0x00, 0x00, 0x00, 0x03, }; static uint8_t BIG_VALUE16_SIZE_64_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, }; static uint8_t BIG_VALUE17_SIZE_1024_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, }; static uint8_t BIG_VALUE18_SIZE_2048_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, }; static uint8_t BIG_VALUE19_SIZE_32_BITS_PRIME_WITH_VALUE15[] = { 0x00, 0x00, 0x00, 0x04, }; static uint8_t BIG_VALUE9_SIZE_64_BITS_PRIME_WITH_VALUE1[] = { 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; static uint8_t BIG_VALUE_ONE_SIZE_64_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, }; static uint8_t BIG_VALUE_TWO_SIZE_1024_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, }; static uint8_t BIG_VALUE_ZERO_SIZE_32_BITS[] = { 0x00, 0x00, 0x00, 0x00, }; static uint8_t BIG_VALUE_ZERO_SIZE_64_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static uint8_t BIG_VALUE_ZERO_SIZE_2048_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static uint8_t BIG_VALUE_TWO_SIZE_2048_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, }; static uint8_t BIG_VALUE25_SIZE_2048_BITS[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, }; static uint8_t BIG_VALUE_TWO_SIZE_32_BITS[] = { 0x00, 0x00, 0x00, 0x02, }; static uint8_t BIG_VALUE23_SIZE_32_BITS[] = { 0x01, 0x00, 0x00, 0x01, }; static uint8_t BIG_VALUE22_SIZE_32_BITS_LIMIT_INT32[] = { 0x80, 0x00, 0x00, 0x00, }; static uint8_t BIG_VALUE_TWO_SIZE_64_BITS[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, }; static uint8_t BIG_VALUE24_SIZE_64_BITS[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, }; static uint8_t BIG_VALUE21_SIZE_64_BITS[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, }; /** ALL_TEEC_UUID * * These constants are the UUID of existing * Trusted Applications */ /* "SMARTCLSARITHMET" */ static TEEC_UUID UUID_TTA_testingInternalAPI_Arithmetique = { 0x534D4152, 0x5443, 0x4C53, { 0x41, 0x52, 0x49, 0x54, 0x48, 0x4D, 0x45, 0x54 } }; /* "SMARTCSL_TIMEAPI" */ static TEEC_UUID UUID_TTA_testingInternalAPI_Time = { 0x534D4152, 0x5443, 0x534C, { 0x5F, 0x54, 0x49, 0x4D, 0x45, 0x41, 0x50, 0x49 } }; /*Helper functions/macros*/ #define BN_DECLARE_AND_INIT(exit_label) \ BN_CTX *ctx = NULL; \ BIGNUM *a = NULL, *b = NULL, *s = NULL, *d = NULL, \ *m = NULL, *l = NULL, \ *r = NULL; \ ctx = BN_CTX_new(); \ if (ctx == NULL) { \ goto exit_label; \ } \ a = BN_new(); \ b = BN_new(); \ s = BN_new(); \ d = BN_new(); \ m = BN_new(); \ l = BN_new(); \ r = BN_new(); #define BN_FREE() \ BN_free(a); \ BN_free(b); \ BN_free(s); \ BN_free(d); \ BN_free(m); \ BN_free(l); \ BN_free(r); \ if (ctx) { \ BN_CTX_free(ctx); \ } static void *cancellation_thread(void *arg) { TEEC_RequestCancellation((TEEC_Operation *)arg); return NULL; } #define RequestCancellation(op) \ (void)ADBG_EXPECT(c, 0, \ pthread_create(&THREAD02, NULL, cancellation_thread, \ (void *)op)); \ (void)ADBG_EXPECT(c, 0, pthread_join(THREAD02, NULL)); static TEEC_Result Invoke_BigIntCmpS32(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t op, uint32_t short_value, uint32_t exp_cmp_res) { return Invoke_Simple_Function_v2(c, sess, cmd_id, exp_cmp_res, 0, op, short_value); } static TEEC_Result Invoke_BigIntCmp(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t op1, uint32_t op2, uint32_t exp_cmp_res) { return Invoke_Simple_Function_v2(c, sess, cmd_id, exp_cmp_res, 0, op1, op2); } static TEEC_Result Invoke_BigIntComputeExtendedGcd(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t gcd, uint32_t dst_u, uint32_t dst_v, uint32_t op1, uint32_t op2) { return Invoke_Simple_Function_v3(c, sess, cmd_id, gcd, 0, dst_u, dst_v, op1, op2); } static TEEC_Result Invoke_BigIntAddMod(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dest, uint32_t op1, uint32_t op2, uint32_t mod) { return Invoke_Simple_Function_v2(c, sess, cmd_id, dest, mod, op1, op2); } static TEEC_Result Invoke_BigIntAdd(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dest, uint32_t op1, uint32_t op2) { return Invoke_Simple_Function_v2(c, sess, cmd_id, dest, 0, op1, op2); } static TEEC_Result Invoke_BigIntMul(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dest, uint32_t op1, uint32_t op2) { return Invoke_Simple_Function_v2(c, sess, cmd_id, dest, 0, op1, op2); } static TEEC_Result Invoke_BigIntMulMod(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dst, uint32_t op1, uint32_t op2, uint32_t mod) { return Invoke_Simple_Function_v2(c, sess, cmd_id, dst, mod, op1, op2); } static TEEC_Result Invoke_StoreS32(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dest, uint32_t sign, const uint8_t *value, size_t value_size) { uint32_t v = 0; size_t n = 0; if (value_size > 4) return TEEC_ERROR_BAD_PARAMETERS; for (n = 0; n < value_size; n++) { v <<= 8; v |= value[n]; } return Invoke_Simple_Function_v2(c, sess, cmd_id, dest, sign, v, 0); } static TEEC_Result Invoke_BigIntConvertFromS32(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dst, uint32_t short_val) { return Invoke_Simple_Function_v1(c, sess, cmd_id, dst, short_val); } static TEEC_Result Invoke_BigIntConvertToS32(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dst, uint32_t src) { return Invoke_Simple_Function_v1(c, sess, cmd_id, src, dst); } static TEEC_Result Invoke_BigIntGetBit(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t src, uint32_t bit_idx, uint32_t exp_result) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; op.params[0].value.a = src; op.params[0].value.b = bit_idx; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd, &op, &org); if (!res && !ADBG_EXPECT_COMPARE_UNSIGNED(c, exp_result, ==, op.params[1].value.a)) res = TEEC_ERROR_GENERIC; return res; } static TEEC_Result Invoke_BigIntGetBitCount(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t src, uint32_t exp_bit_count) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; op.params[0].value.a = src; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd, &op, &org); if (!res && !ADBG_EXPECT_COMPARE_UNSIGNED(c, exp_bit_count, ==, op.params[1].value.a)) res = TEEC_ERROR_GENERIC; return res; } static TEEC_Result Invoke_Wait(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmdId, uint32_t Case) { return Invoke_Simple_Function_v1(c, sess, cmdId, Case, 0); } static TEEC_Result Invoke_BigIntInitFMMContext(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t ctx, uint32_t mod_size, uint32_t mod) { return Invoke_Simple_Function_v2(c, sess, cmd_id, ctx, mod, mod_size, 0); } static TEEC_Result Invoke_NewBigIntFMM(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t role, uint32_t mod_size) { return Invoke_Simple_Function_v1(c, sess, cmd_id, role, mod_size); } static TEEC_Result Invoke_BigIntConvertToFMM(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dst, uint32_t src, uint32_t mod, uint32_t ctx) { return Invoke_Simple_Function_v3(c, sess, cmd_id, ctx, mod, dst, 0, src, 0); } static TEEC_Result Invoke_BigIntConvertFromFMM(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dst, uint32_t src, uint32_t mod, uint32_t ctx) { return Invoke_Simple_Function_v3(c, sess, cmd_id, ctx, mod, dst, 0, src, 0); } static TEEC_Result Invoke_BigIntComputeFMM(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dst, uint32_t op1, uint32_t op2, uint32_t mod, uint32_t ctx) { return Invoke_Simple_Function_v3(c, sess, cmd_id, ctx, mod, dst, 0, op1, op2); } static TEEC_Result Invoke_BigIntDiv(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t q, uint32_t r, uint32_t op1, uint32_t op2) { return Invoke_Simple_Function_v2(c, sess, cmd_id, q, r, op1, op2); } static TEEC_Result Invoke_BigIntMod(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dst, uint32_t op, uint32_t mod) { return Invoke_Simple_Function_v2(c, sess, cmd_id, dst, mod, op, 0); } static TEEC_Result Invoke_BigIntInvMod(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dst, uint32_t op, uint32_t mod) { return Invoke_Simple_Function_v2(c, sess, cmd, dst, mod, op, 0); } static TEEC_Result Invoke_BigIntIsProbablePrime(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t op, uint32_t conf_lvl, uint32_t exp_result) { return Invoke_Simple_Function_v2(c, sess, cmd, exp_result, 0, op, conf_lvl); } static TEEC_Result Invoke_BigIntNeg(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dst, uint32_t op) { return Invoke_Simple_Function_v2(c, sess, cmd, dst, 0, op, 0); } static TEEC_Result Invoke_BigIntRelativePrime(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t op1, uint32_t op2, bool exp_result) { return Invoke_Simple_Function_v2(c, sess, cmd, exp_result, 0, op1, op2); } static TEEC_Result Invoke_BigIntShiftRight(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dst, uint32_t op, uint32_t bits) { return Invoke_Simple_Function_v2(c, sess, cmd, dst, op, bits, 0); } static TEEC_Result Invoke_BigIntSquareMod(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dst, uint32_t op, uint32_t mod) { return Invoke_Simple_Function_v2(c, sess, cmd, dst, mod, op, 0); } static TEEC_Result Invoke_BigIntSquare(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dst, uint32_t op) { return Invoke_Simple_Function_v2(c, sess, cmd, dst, 0, op, 0); } static TEEC_Result Invoke_BigIntSubMod(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dst, uint32_t op1, uint32_t op2, uint32_t mod) { return Invoke_Simple_Function_v2(c, sess, cmd, dst, mod, op1, op2); } static TEEC_Result Invoke_BigIntSub(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd, uint32_t dst, uint32_t op1, uint32_t op2) { return Invoke_Simple_Function_v2(c, sess, cmd, dst, 0, op1, op2); } static TEEC_Result Invoke_NewBigInt(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t role, uint32_t size) { return Invoke_Simple_Function_v1(c, sess, cmd_id, role, size); } static TEEC_Result Macro_StoreBigInt(ADBG_Case_t *c, TEEC_Session *sess, uint32_t role, uint32_t size, uint32_t sign, const uint8_t *value, size_t value_size) { TEEC_Result res = TEE_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; TEEC_SharedMemory shm_value = { .size = value_size, .flags = TEEC_MEM_INPUT, }; res = Invoke_NewBigInt(c, sess, CMD_Arithm_TTA_New_BigInt, role, size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm_value); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; memcpy(shm_value.buffer, value, value_size); op.params[0].value.a = role; op.params[0].value.b = size; op.params[1].value.a = sign; SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, &shm_value, shm_value.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, CMD_Arithm_BigIntConvertFromOctetString, &op, &org); TEEC_ReleaseSharedMemory(&shm_value); return res; } static TEEC_Result Invoke_BigIntConvertToOctetString(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t bigint, size_t size) { TEEC_Result res = TEE_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; TEEC_SharedMemory shm = { .size = (size + 7) / 8, .flags = TEEC_MEM_OUTPUT, }; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; op.params[0].value.a = bigint; SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, &shm, shm.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd_id, &op, &org); if (!res) { size_t sz = op.params[2].memref.size; saved_octet_string = malloc(sz); memcpy(saved_octet_string, shm.buffer, sz); saved_octet_string_size = sz; saved_octet_string_sign = op.params[1].value.a; } TEEC_ReleaseSharedMemory(&shm); return res; } static TEEC_Result Invoke_BigIntConvertFromOctetString(ADBG_Case_t *c, TEEC_Session *sess, uint32_t cmd_id, uint32_t dst, size_t size, uint32_t sign, const uint8_t *value, size_t value_size) { TEEC_Result res = TEE_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org; TEEC_SharedMemory shm = { .size = (size + 7) / 8, .flags = TEEC_MEM_INPUT, }; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, value_size, <=, shm.size)) return TEEC_ERROR_BAD_PARAMETERS; res = TEEC_AllocateSharedMemory(sess->imp.ctx, &shm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; memcpy(shm.buffer, value, value_size); op.params[0].value.a = dst; op.params[1].value.a = sign; SET_SHARED_MEMORY_OPERATION_PARAMETER(2, 0, &shm, shm.size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, cmd_id, &op, &org); TEEC_ReleaseSharedMemory(&shm); return res; } #endif /* XML_TIMEARITHM_API_H_ */ optee_test-4.3.0/host/xtest/gp/patches/000077500000000000000000000000001464074351400200625ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/gp/patches/0002-TTAs-add-files-needed-to-compile.patch000066400000000000000000002452501464074351400274230ustar00rootroot00000000000000From a6b66e8fce014d26ea3c36d25cf200b58b0b470b Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Mon, 22 Jun 2020 18:00:29 +0200 Subject: [PATCH 02/11] TTAs: add files needed to compile Signed-off-by: Jens Wiklander --- TTAs_Internal_API_1_1_1/GP_defs.h | 4 ++ .../TTA_Arithmetical/code_files/Makefile | 2 + .../TTA_Arithmetical/code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 41 +++++++++++++ .../code_files/Makefile | 2 + .../code_files/sub.mk | 3 + .../code_files/ta_answerErrorTo_Invoke_test.h | 36 +++++++++++ .../code_files/user_ta_header_defines.h | 45 ++++++++++++++ .../code_files/Makefile | 2 + .../code_files/sub.mk | 3 + .../ta_answerErrorTo_OpenSession_test.h | 33 ++++++++++ .../code_files/user_ta_header_defines.h | 44 +++++++++++++ .../code_files/Makefile | 2 + .../code_files/sub.mk | 3 + ..._answerSuccessTo_OpenSession_Invoke_test.h | 36 +++++++++++ .../code_files/user_ta_header_defines.h | 44 +++++++++++++ .../code_files/Makefile | 2 + .../code_files/sub.mk | 3 + ...check_OpenSession_with_4_parameters_test.h | 33 ++++++++++ .../code_files/user_ta_header_defines.h | 44 +++++++++++++ .../TTA_testingClientAPI/code_files/Makefile | 2 + .../TTA_testingClientAPI/code_files/sub.mk | 3 + .../code_files/ta_testingClientAPI_test.h | 37 +++++++++++ .../code_files/user_ta_header_defines.h | 44 +++++++++++++ .../code_files/Makefile | 2 + .../TTA_testingClientAPI_Parameters.c | 1 + .../code_files/sub.mk | 4 ++ .../code_files/user_ta_header_defines.h | 41 +++++++++++++ .../code_files/Makefile | 2 + .../TTA_testingClientAPI_Parameters.c | 1 + .../code_files/sub.mk | 4 ++ .../code_files/user_ta_header_defines.h | 42 +++++++++++++ .../TTA_Crypto/TTA_Crypto/code_files/Makefile | 2 + .../TTA_Crypto/code_files/TTA_DS_commands.c | 1 + .../TTA_Crypto/TTA_Crypto/code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 41 +++++++++++++ .../TTA_DS/TTA_DS/code_files/Makefile | 2 + .../TTA_DS/TTA_DS/code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 41 +++++++++++++ .../TTA_TCF/TTA_TCF/code_files/Makefile | 2 + .../TTA_TCF/TTA_TCF/code_files/sub.mk | 6 ++ .../TTA_TCF/TTA_TCF/code_files/ta_TCF_test.h | 33 ++++++++++ .../code_files/user_ta_header_defines.h | 61 +++++++++++++++++++ .../TTA_TCF/TTA_TCF_ICA/code_files/Makefile | 2 + .../TTA_TCF/TTA_TCF_ICA/code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 43 +++++++++++++ .../TTA_TCF/TTA_TCF_ICA2/code_files/Makefile | 2 + .../TTA_TCF/TTA_TCF_ICA2/code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 44 +++++++++++++ .../code_files/Makefile | 2 + .../code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 45 ++++++++++++++ .../code_files/Makefile | 2 + .../code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 42 +++++++++++++ .../code_files/Makefile | 2 + .../TTA_TCF_PanicAtCreation/code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 41 +++++++++++++ .../code_files/Makefile | 2 + .../code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 44 +++++++++++++ .../TTA_Time/TTA_Time/code_files/Makefile | 2 + .../TTA_Time/TTA_Time/code_files/sub.mk | 3 + .../code_files/user_ta_header_defines.h | 42 +++++++++++++ TTAs_Internal_API_1_1_1/ta_common.mk | 3 + 65 files changed, 1102 insertions(+) create mode 100644 TTAs_Internal_API_1_1_1/GP_defs.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/ta_answerErrorTo_Invoke_test.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/ta_answerErrorTo_OpenSession_test.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/ta_answerSuccessTo_OpenSession_Invoke_test.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/ta_check_OpenSession_with_4_parameters_test.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/ta_testingClientAPI_test.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/Makefile create mode 120000 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/TTA_testingClientAPI_Parameters.c create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/Makefile create mode 120000 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/TTA_testingClientAPI_Parameters.c create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/Makefile create mode 120000 TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_DS_commands.c create mode 100644 TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/ta_TCF_test.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/Makefile create mode 100644 TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/sub.mk create mode 100644 TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/user_ta_header_defines.h create mode 100644 TTAs_Internal_API_1_1_1/ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/GP_defs.h b/TTAs_Internal_API_1_1_1/GP_defs.h new file mode 100644 index 000000000000..3d6ef1d53c78 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/GP_defs.h @@ -0,0 +1,4 @@ +#define SLogTrace(...) +#define SLogError(...) +#define SLogWarning(...) +#define S_VAR_NOT_USED(x) do { (void)(x); } while (0) diff --git a/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/Makefile new file mode 100644 index 000000000000..20d98a04cd81 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-4c53-4152-4954484d4554 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/sub.mk new file mode 100644 index 000000000000..46f37849c7b8 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_Arithmetical.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..fa248c666f4f --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/user_ta_header_defines.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#define TA_UUID { 0x534D4152, 0x5443, 0x4C53, { 0x41, 0x52, 0x49, 0x54, 0x48, 0x4D, 0x45, 0x54 } } + +#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE ) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_Arithmetical v2.1" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/Makefile new file mode 100644 index 000000000000..ba45ad4dfaac --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-542d-4353-4c54-2d54412d4552 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/sub.mk new file mode 100644 index 000000000000..fa4fa3f01460 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_answerErrorTo_Invoke.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/ta_answerErrorTo_Invoke_test.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/ta_answerErrorTo_Invoke_test.h new file mode 100644 index 000000000000..65a6b262cfbd --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/ta_answerErrorTo_Invoke_test.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define TA_TTA_ANSWERERRORTOINVOKE_UUID { \ + 0x534D4152, \ + 0x542D, \ + 0x4353, \ + { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x45, 0x52 } \ + } +#define COMMAND_TTA_Remember_Expected_ParamTypes 0x00000002 +#define COMMAND_TTA_Copy_ParamIn_to_ParamOut 0x00000001 +#define COMMAND_TTA_Check_ParamTypes 0x00000003 diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..664f85aeeabf --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_Invoke/code_files/user_ta_header_defines.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_answerErrorTo_Invoke_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE \ + | TA_FLAG_EXEC_DDR \ + | TA_FLAG_SINGLE_INSTANCE \ + ) +#define TA_STACK_SIZE (1*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_answerErrorTo_Invoke v0.4" }, + + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/Makefile new file mode 100644 index 000000000000..b85d23b0be11 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5445-5252544f4f53 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/sub.mk new file mode 100644 index 000000000000..810273e471cf --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_answerErrorTo_OpenSession.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/ta_answerErrorTo_OpenSession_test.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/ta_answerErrorTo_OpenSession_test.h new file mode 100644 index 000000000000..b4715ff1cc10 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/ta_answerErrorTo_OpenSession_test.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define TA_TTA_ANSWERERRORTOOPENSESSION_UUID { \ + 0x534D4152, \ + 0x5443, \ + 0x534C, \ + { 0x54, 0x45, 0x52, 0x52, 0x54, 0x4F, 0x4F, 0x53 } \ + } diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..19b2e533fbf5 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerErrorTo_OpenSession/code_files/user_ta_header_defines.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_answerErrorTo_OpenSession_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE \ + | TA_FLAG_EXEC_DDR \ + | TA_FLAG_SINGLE_INSTANCE \ + ) +#define TA_STACK_SIZE (1*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_answerErrorTo_OpenSession v0.2" }, + +#endif /* USER_TA_HEADER_DEFINES_H*/ diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/Makefile new file mode 100644 index 000000000000..5d8b04bad8a6 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-542d-4353-4c54-2d54412d5355 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/sub.mk new file mode 100644 index 000000000000..1d1f67ec7642 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_answerSuccessTo_OpenSession_Invoke.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/ta_answerSuccessTo_OpenSession_Invoke_test.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/ta_answerSuccessTo_OpenSession_Invoke_test.h new file mode 100644 index 000000000000..ac7bfaf09e57 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/ta_answerSuccessTo_OpenSession_Invoke_test.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define TA_TTA_ANSWERSUCCESSTOOPENSESSION_UUID { \ + 0x534D4152, \ + 0x542D, \ + 0x4353, \ + { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x53, 0x55 } \ + } +#define COMMAND_TTA_Remember_Expected_ParamTypes 0x00000002 +#define COMMAND_TTA_Copy_ParamIn_to_ParamOut 0x00000001 +#define COMMAND_TTA_Check_ParamTypes 0x00000003 diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..084fc30d393a --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_answerSuccessTo_OpenSession_Invoke/code_files/user_ta_header_defines.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_answerSuccessTo_OpenSession_Invoke_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE \ + | TA_FLAG_EXEC_DDR \ + | TA_FLAG_SINGLE_INSTANCE \ + ) +#define TA_STACK_SIZE (1*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_answerSuccessTo_OpenSession_Invoke v0.3" }, + +#endif /* USER_TA_HEADER_DEFINES_H*/ diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/Makefile new file mode 100644 index 000000000000..68b1dc533957 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-544f-53345041524d +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/sub.mk new file mode 100644 index 000000000000..3e31f1cc13a4 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_check_OpenSession_with_4_parameters.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/ta_check_OpenSession_with_4_parameters_test.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/ta_check_OpenSession_with_4_parameters_test.h new file mode 100644 index 000000000000..cf0c1775d38c --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/ta_check_OpenSession_with_4_parameters_test.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define TA_TTA_CHECKOPENSESSIONWITH4PARAMETERS_UUID { \ + 0x534D4152, \ + 0x5443, \ + 0x534C, \ + { 0x54, 0x4F, 0x53, 0x34, 0x50, 0x41, 0x52, 0x4D } \ + } diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..fbc7c28f60b2 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_check_OpenSession_with_4_parameters/code_files/user_ta_header_defines.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_check_OpenSession_with_4_parameters_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE \ + | TA_FLAG_EXEC_DDR \ + | TA_FLAG_SINGLE_INSTANCE \ + ) +#define TA_STACK_SIZE (1*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_check_OpenSession_with_4_parameters v0.2" }, + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/Makefile new file mode 100644 index 000000000000..a937f649bcf8 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-542d-4353-4c54-2d54412d5354 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/sub.mk new file mode 100644 index 000000000000..e8c0db453040 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_testingClientAPI.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/ta_testingClientAPI_test.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/ta_testingClientAPI_test.h new file mode 100644 index 000000000000..2efaa35f39dd --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/ta_testingClientAPI_test.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define TA_TTA_TESTING_CLIENT_API_UUID { \ + 0x534D4152, \ + 0x542D, \ + 0x4353, \ + { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x53, 0x54 } \ + } +#define COMMAND_TTA_Remember_Expected_ParamTypes 0x00000002 +#define COMMAND_TTA_Copy_ParamIn_to_ParamOut 0x00000001 +#define COMMAND_TTA_Check_ParamTypes 0x00000003 +#define COMMAND_TTA_To_Be_Cancelled 0x00000004 diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..b42879b34851 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI/code_files/user_ta_header_defines.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_testingClientAPI_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE \ + | TA_FLAG_EXEC_DDR \ + | TA_FLAG_SINGLE_INSTANCE \ + ) +#define TA_STACK_SIZE (1*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_testingClientAPI v0.5" }, + +#endif /* USER_TA_HEADER_DEFINES_H*/ diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/Makefile new file mode 100644 index 000000000000..7966e463ccf8 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5443-4c4950415241 +include ../../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/TTA_testingClientAPI_Parameters.c b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/TTA_testingClientAPI_Parameters.c new file mode 120000 index 000000000000..7e20440c40e7 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/TTA_testingClientAPI_Parameters.c @@ -0,0 +1 @@ +../../common_code_files/TTA_testingClientAPI_Parameters.c \ No newline at end of file diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/sub.mk new file mode 100644 index 000000000000..a53b62c0e3b0 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/sub.mk @@ -0,0 +1,4 @@ +global-incdirs-y += ../../../../TEE_include +srcs-y += TTA_testingClientAPI_Parameters_Invoke.c +srcs-y += TTA_testingClientAPI_Parameters.c +cflags-y := -include ../../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..93d585aca7e3 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_Invoke/code_files/user_ta_header_defines.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#define TA_UUID { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x43, 0x4C, 0x49, 0x50, 0x41, 0x52, 0x41 } } + +#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE ) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_testingClientAPI_Parameters_Invoke v2.1" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/Makefile new file mode 100644 index 000000000000..41ccec16b1b6 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5443-4c49504f5053 +include ../../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/TTA_testingClientAPI_Parameters.c b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/TTA_testingClientAPI_Parameters.c new file mode 120000 index 000000000000..7e20440c40e7 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/TTA_testingClientAPI_Parameters.c @@ -0,0 +1 @@ +../../common_code_files/TTA_testingClientAPI_Parameters.c \ No newline at end of file diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/sub.mk new file mode 100644 index 000000000000..61a8961185cd --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/sub.mk @@ -0,0 +1,4 @@ +global-incdirs-y += ../../../../TEE_include +srcs-y += TTA_testingClientAPI_Parameters_OpenSession.c +srcs-y += TTA_testingClientAPI_Parameters.c +cflags-y := -include ../../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..5212636ce6b2 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_ClientAPI/TTA_testingClientAPI_Parameters/TTA_testingClientAPI_Parameters_OpenSession/code_files/user_ta_header_defines.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#define TA_UUID { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x43, 0x4C, 0x49, 0x50, 0x4F, 0x50, 0x53 } } + +#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE | \ + TA_FLAG_MULTI_SESSION) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_testingClientAPI_Parameters_OpenSession v2.1" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/Makefile new file mode 100644 index 000000000000..4be816754ee9 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5443-525950544f31 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_DS_commands.c b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_DS_commands.c new file mode 120000 index 000000000000..59c8d082d9da --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_DS_commands.c @@ -0,0 +1 @@ +../../../TTA_DS/TTA_DS/code_files/TTA_DS_commands.c \ No newline at end of file diff --git a/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/sub.mk new file mode 100644 index 000000000000..a81f41cca435 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_Crypto.c TTA_DS_commands.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..48878d6c7505 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/user_ta_header_defines.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#define TA_UUID { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x43, 0x52, 0x59, 0x50, 0x54, 0x4F, 0x31 } } + +#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE ) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_Crypto v4.2" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/Makefile new file mode 100644 index 000000000000..10d6ff8634d6 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5444-415441535431 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/sub.mk new file mode 100644 index 000000000000..64519a0eaa71 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_DS.c TTA_DS_commands.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..421ee908ca31 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/user_ta_header_defines.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#define TA_UUID { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x44, 0x41, 0x54, 0x41, 0x53, 0x54, 0x31 } } + +#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE ) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_DS v4.0" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/Makefile new file mode 100644 index 000000000000..b0a3ee8f90c3 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-542d-4353-4c54-2d54412d3031 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/sub.mk new file mode 100644 index 000000000000..c33de9cee75e --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/sub.mk @@ -0,0 +1,6 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_TCF.c +cflags-y := -include ../../../../GP_defs.h +cflags-y += -Wno-int-to-pointer-cast +cflags-y += -Wno-cast-align +cflags-y += -Wno-misleading-indentation diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/ta_TCF_test.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/ta_TCF_test.h new file mode 100644 index 000000000000..f0da901f0fdd --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/ta_TCF_test.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define TA_UUID { \ + 0x534D4152, \ + 0x542D, \ + 0x4353, \ + { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x30, 0x31 } \ + } diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..3df06d336dc5 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/user_ta_header_defines.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "ta_TCF_test.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE \ + | TA_FLAG_EXEC_DDR \ + | TA_FLAG_SINGLE_INSTANCE \ + ) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_TCF v1.9" }, \ + { "smc.ta.teststring", USER_TA_PROP_TYPE_STRING, \ + "this is a test string" }, \ + { "smc.ta.testbooltrue", USER_TA_PROP_TYPE_BOOL, \ + &(const bool){ true } }, \ + { "smc.ta.testboolfalse", USER_TA_PROP_TYPE_BOOL, \ + &(const bool){ false } }, \ + { "smc.ta.testu32", USER_TA_PROP_TYPE_U32, \ + &(const uint32_t){ 48059 } }, \ + { "smc.ta.testbinaryblock", USER_TA_PROP_TYPE_BINARY_BLOCK, \ + "VGhpcyBpcyBhIHRleHQgYmluYXJ5IGJsb2Nr" }, \ + { "smc.ta.testuuid", USER_TA_PROP_TYPE_UUID, \ + &(const TEE_UUID) { 0x534D4152, 0x542D, 0x4353, \ + { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x30, 0x31 } } }, \ + { "smc.ta.testidentity", USER_TA_PROP_TYPE_IDENTITY, \ + &(const TEE_Identity) { 0xF0000000, \ + { 0x534D4152, 0x542D, 0x4353, \ + { 0x4C, 0x54, 0x2D, 0x54, 0x41, 0x2D, 0x30, 0x31 } } } } + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/Makefile new file mode 100644 index 000000000000..7fa2badee534 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5441-544346494341 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/sub.mk new file mode 100644 index 000000000000..1ee47bdf5a72 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_TCF_ICA.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..51f22238def1 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA/code_files/user_ta_header_defines.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_TCF_ICA_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR | \ + TA_FLAG_SINGLE_INSTANCE) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_TCF_ICA v0.4" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ + diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/Makefile new file mode 100644 index 000000000000..388b18a10524 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5454-434649434132 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/sub.mk new file mode 100644 index 000000000000..1b787f63932d --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_TCF_ICA2.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..b8539d83c1a3 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_ICA2/code_files/user_ta_header_defines.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_TCF_ICA2_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR | \ + TA_FLAG_SINGLE_INSTANCE) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_TCF_ICA2 v0.2" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ + + diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/Makefile new file mode 100644 index 000000000000..91ae7c8a3cbe --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-4d4c-54494e535443 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/sub.mk new file mode 100644 index 000000000000..e937e20a722a --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_TCF_MultipleInstanceTA.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..ab50b401786f --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_MultipleInstanceTA/code_files/user_ta_header_defines.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_TCF_MultipleInstanceTA_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE \ + | TA_FLAG_EXEC_DDR \ + | TA_FLAG_MULTI_SESSION \ + ) + +#define TA_STACK_SIZE (1*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_testingInternalAPI_TrustedCoreFramework_MultipleInstanceTA v0.1" }, + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/Makefile new file mode 100644 index 000000000000..bbf464cf8393 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-434c-4f50414e4943 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/sub.mk new file mode 100644 index 000000000000..4333c6e0d7d2 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_TCF_PanicAtCloseSession.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..86b1d0f1c865 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCloseSession/code_files/user_ta_header_defines.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#define TA_UUID { 0x534D4152, 0x5443, 0x534C, { 0x43, 0x4C, 0x4F, 0x50, 0x41, 0x4E, 0x49, 0x43 } } + +#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE | \ + TA_FLAG_MULTI_SESSION) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_TCF_PanicAtCloseSession v1.1" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/Makefile new file mode 100644 index 000000000000..2e2ea217c7f7 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5443-5250414e4943 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/sub.mk new file mode 100644 index 000000000000..d44f08240915 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_TCF_PanicAtCreation.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..197efebb119b --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_PanicAtCreation/code_files/user_ta_header_defines.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#define TA_UUID { 0x534D4152, 0x5443, 0x534C, { 0x54, 0x43, 0x52, 0x50, 0x41, 0x4E, 0x49, 0x43 } } + +#define TA_FLAGS (TA_FLAG_MULTI_SESSION) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_TCF_PanicAtCloseSession v1.1" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/Makefile new file mode 100644 index 000000000000..b61365f4249e --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5347-4c494e535443 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/sub.mk new file mode 100644 index 000000000000..3ab31a7029cf --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_TCF_SingleInstanceTA.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..136e68d84eec --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF_SingleInstanceTA/code_files/user_ta_header_defines.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + +#include "TTA_TCF_SingleInstanceTA_protocol.h" + +#define TA_FLAGS (TA_FLAG_USER_MODE \ + | TA_FLAG_EXEC_DDR \ + | TA_FLAG_SINGLE_INSTANCE \ + ) +#define TA_STACK_SIZE (1*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gpd.ta.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_testingInternalAPI_TrustedCoreFramework_SingleInstanceTA v0.4" }, + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/Makefile b/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/Makefile new file mode 100644 index 000000000000..07f3d9743a59 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/Makefile @@ -0,0 +1,2 @@ +BINARY = 534d4152-5443-534c-5f54-494d45415049 +include ../../../ta_common.mk diff --git a/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/sub.mk b/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/sub.mk new file mode 100644 index 000000000000..ab3ac849d1c4 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/sub.mk @@ -0,0 +1,3 @@ +global-incdirs-y += ../../../TEE_include +srcs-y += TTA_Time.c +cflags-y := -include ../../../../GP_defs.h diff --git a/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/user_ta_header_defines.h b/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/user_ta_header_defines.h new file mode 100644 index 000000000000..1f25614bb473 --- /dev/null +++ b/TTAs_Internal_API_1_1_1/TTA_Time/TTA_Time/code_files/user_ta_header_defines.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 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 A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef USER_TA_HEADER_DEFINES_H +#define USER_TA_HEADER_DEFINES_H + + +#define TA_UUID { 0x534D4152, 0x5443, 0x534C, { 0x5F, 0x54, 0x49, 0x4D, 0x45, 0x41, 0x50, 0x49 } } + +#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE ) +#define TA_STACK_SIZE (2*1024) +#define TA_DATA_SIZE (32*1024) + +#define TA_CURRENT_TA_EXT_PROPERTIES \ + { "gp.test.description", USER_TA_PROP_TYPE_STRING, \ + "TTA_Time v1.0" }, \ + +#endif /* USER_TA_HEADER_DEFINES_H */ diff --git a/TTAs_Internal_API_1_1_1/ta_common.mk b/TTAs_Internal_API_1_1_1/ta_common.mk new file mode 100644 index 000000000000..b8ce142bcf0a --- /dev/null +++ b/TTAs_Internal_API_1_1_1/ta_common.mk @@ -0,0 +1,3 @@ +# Note that it is important that that $(BINARY) is set before we include +# ta_dev_kit.mk. In the optee_test this is done in the individual TA Makefiles. +include $(TA_DEV_KIT_DIR)/mk/ta_dev_kit.mk -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0003-TTA_TCF-patch.patch000066400000000000000000000027471464074351400237160ustar00rootroot00000000000000From 2bdbcc524e8f14c85c46a0e915e195e6d086ba02 Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Mon, 22 Jun 2020 17:50:40 +0200 Subject: [PATCH 03/11] TTA_TCF: patch Signed-off-by: Jens Wiklander --- TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.h b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.h index 688e8cf74597..f46667883162 100644 --- a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.h +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.h @@ -59,7 +59,7 @@ bool areStringsIdentical(const char *string1, size_t length1, const char *string bool areStringsIdenticalWithZeroTerminated(const char *string1, size_t length1, const char *zeroTerminatedString); bool areUUIDsIdentical(TEE_UUID *UUID1, TEE_UUID *UUID2); bool areIdentitiesIdentical(TEE_Identity *Identity1, TEE_Identity *Identity2); -bool areBinaryBlocksIdentical(const char *BinaryBlock1, uint32_t nLength1, const char *BinaryBlock2, uint32_t nLength2); +bool areBinaryBlocksIdentical(const char *BinaryBlock1, size_t nLength1, const char *BinaryBlock2, size_t nLength2); bool isPropertySet (TEE_PropSetHandle propsetOrEnumerator); void getUUIDFromBuffer(TEE_UUID *pTargetUUID, char uuidvalue[16]); enum propType getPropertyType(const char *propString, size_t propStringLength); -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0004-TTA_Arithmetical-patch.patch000066400000000000000000000024211464074351400256760ustar00rootroot00000000000000From 1664c3124576d8b2065206e99016bfa6a5d9ac34 Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Tue, 23 Jun 2020 13:43:40 +0200 Subject: [PATCH 04/11] TTA_Arithmetical: patch Signed-off-by: Jens Wiklander --- .../TTA_Arithmetical/code_files/TTA_Arithmetical_protocol.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/TTA_Arithmetical_protocol.h b/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/TTA_Arithmetical_protocol.h index 063f4b59e218..13cb801eeb20 100644 --- a/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/TTA_Arithmetical_protocol.h +++ b/TTAs_Internal_API_1_1_1/TTA_Arithmetical/TTA_Arithmetical/code_files/TTA_Arithmetical_protocol.h @@ -61,7 +61,7 @@ typedef struct { TTA_Internal_Data* SetUpTTAInternalData(void); void ResetTTAInternalData(TTA_Internal_Data *pInternalData); -TEE_BigIntFMM* AllocateAndInitializeFMM(uint32_t nModulusSizeInBytes); +TEE_BigIntFMM* AllocateAndInitializeFMM(size_t nModulusSizeInBytes); TEE_BigInt* AllocateAndInitialize(uint32_t nSizeInBytes); uint32_t CmdGetBigIntSignInUint32(TEE_BigInt *pBigInt); TEE_Result CmdTEEBigIntCmp( -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0005-GP_defs.h-enable-debug-prints.patch000066400000000000000000000015511464074351400270510ustar00rootroot00000000000000From 83990e0e151d164f0d9e69053305fad2429f8cdc Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Mon, 29 Jun 2020 12:48:11 +0200 Subject: [PATCH 05/11] GP_defs.h: enable debug prints Enables debug prints using the *MSG() macros. Signed-off-by: Jens Wiklander --- TTAs_Internal_API_1_1_1/GP_defs.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/TTAs_Internal_API_1_1_1/GP_defs.h b/TTAs_Internal_API_1_1_1/GP_defs.h index 3d6ef1d53c78..91995187cae2 100644 --- a/TTAs_Internal_API_1_1_1/GP_defs.h +++ b/TTAs_Internal_API_1_1_1/GP_defs.h @@ -1,4 +1,5 @@ -#define SLogTrace(...) -#define SLogError(...) -#define SLogWarning(...) +#include +#define SLogTrace DMSG +#define SLogError EMSG +#define SLogWarning IMSG #define S_VAR_NOT_USED(x) do { (void)(x); } while (0) -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0006-TTA_TCF-fix-CmdTEEGetPropertyA-_withoutEnum.patch000066400000000000000000000161431464074351400314350ustar00rootroot00000000000000From 1f8d4686cd7c42ad59c9411e1dd7ceea97f5de9d Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Tue, 7 Jul 2020 17:19:50 +0200 Subject: [PATCH 06/11] TTA_TCF: fix CmdTEEGetPropertyA*_withoutEnum() Property name must not reside in non-secure shared memory when passed as argument to TEE_GetPropertyAs*(). Signed-off-by: Jens Wiklander --- .../TTA_TCF/TTA_TCF/code_files/TTA_TCF.c | 56 +++++++++++++------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c index b7c44c67fe32..8d1df25dea69 100644 --- a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c @@ -311,7 +311,7 @@ TEE_Result CmdTEEGetPropertyAsString_withoutEnum( { /** VARIABLES **/ TEE_PropSetHandle nPropSet; - char* pPropName; + char pPropName[PROPERTY_NAME_MAX_SIZE]; char* pOutputName; TEE_Result cmdResult; @@ -330,12 +330,15 @@ TEE_Result CmdTEEGetPropertyAsString_withoutEnum( /* Read the input parameter */ nPropSet = (TEE_PropSetHandle)pParams[0].value.a; - pPropName = pParams[1].memref.buffer; - if (pPropName == NULL) + if (!pParams[1].memref.buffer || + pParams[1].memref.size >= sizeof(pPropName)) { SLogError("CmdTEEGetPropertyAsString_withoutEnum: property name Input parameter is NULL"); return TRUSTED_APP_ERROR_BAD_PARAMETERS; } + TEE_MemMove(pPropName, pParams[1].memref.buffer, + pParams[1].memref.size); + pPropName[pParams[1].memref.size] = 0; /* Read the output parameters */ pOutputName = pParams[2].memref.buffer; @@ -359,7 +362,7 @@ TEE_Result CmdTEEGetPropertyAsBool_withoutEnum( { /** VARIABLES **/ TEE_PropSetHandle nPropSet; - char* pPropName; + char pPropName[PROPERTY_NAME_MAX_SIZE]; char nTrue[4] = "true"; char nFalse[5] = "false"; bool nOutputBool; @@ -381,12 +384,16 @@ TEE_Result CmdTEEGetPropertyAsBool_withoutEnum( /* Read the input parameter */ nPropSet = (TEE_PropSetHandle)pParams[0].value.a; - pPropName = pParams[1].memref.buffer; if (pPropName == NULL) + if (!pParams[1].memref.buffer || + pParams[1].memref.size >= sizeof(pPropName)) { SLogError("CmdTEEGetPropertyAsBool_withoutEnum: property name Input parameter is NULL"); return TRUSTED_APP_ERROR_BAD_PARAMETERS; } + TEE_MemMove(pPropName, pParams[1].memref.buffer, + pParams[1].memref.size); + pPropName[pParams[1].memref.size] = 0; /* if all input/output data are correct */ cmdResult = TEE_GetPropertyAsBool(nPropSet, pPropName, &nOutputBool); @@ -412,7 +419,7 @@ TEE_Result CmdTEEGetPropertyAsInt_withoutEnum( { /** VARIABLES **/ TEE_PropSetHandle nPropSet; - char* pPropName; + char pPropName[PROPERTY_NAME_MAX_SIZE]; char nResultString[5] = "48059"; char nWrongResultString[11] = "wrong value"; uint32_t nIntResult; @@ -435,12 +442,15 @@ TEE_Result CmdTEEGetPropertyAsInt_withoutEnum( /* Read the input parameter */ nPropSet = (TEE_PropSetHandle)pParams[0].value.a; - pPropName = pParams[1].memref.buffer; - if (pPropName == NULL) + if (!pParams[1].memref.buffer || + pParams[1].memref.size >= sizeof(pPropName)) { SLogError("CmdTEEGetPropertyAsInt_withoutEnum: property name Input parameter is NULL"); return TRUSTED_APP_ERROR_BAD_PARAMETERS; } + TEE_MemMove(pPropName, pParams[1].memref.buffer, + pParams[1].memref.size); + pPropName[pParams[1].memref.size] = 0; /* if all input/output data are correct */ cmdResult = TEE_GetPropertyAsU32(nPropSet, pPropName, &nIntResult); @@ -466,7 +476,7 @@ TEE_Result CmdTEEGetPropertyAsBinaryBlock_withoutEnum( { /** VARIABLES **/ TEE_PropSetHandle nPropSet; - char* pPropName; + char pPropName[PROPERTY_NAME_MAX_SIZE]; void* pOutputBinaryBlock; TEE_Result cmdResult; @@ -485,12 +495,15 @@ TEE_Result CmdTEEGetPropertyAsBinaryBlock_withoutEnum( /* Read the input parameter */ nPropSet = (TEE_PropSetHandle)pParams[0].value.a; - pPropName = pParams[1].memref.buffer; - if ((pPropName == NULL)) + if (!pParams[1].memref.buffer || + pParams[1].memref.size >= sizeof(pPropName)) { SLogError("CmdTEEGetPropertyAsBinaryBlock_withoutEnum: property name Input parameter is NULL"); return TRUSTED_APP_ERROR_BAD_PARAMETERS; } + TEE_MemMove(pPropName, pParams[1].memref.buffer, + pParams[1].memref.size); + pPropName[pParams[1].memref.size] = 0; /* Read the output parameters */ pOutputBinaryBlock = pParams[2].memref.buffer; @@ -515,7 +528,7 @@ TEE_Result CmdTEEGetPropertyAsUUID_withoutEnum( { /** VARIABLES **/ TEE_PropSetHandle nPropSet; - char* pPropName; + char pPropName[PROPERTY_NAME_MAX_SIZE]; char nWrongResultString[10] = "wrong uuid"; char nResultUUIDString[36] = "534D4152-542D-4353-4C54-2D54412D3031"; char nClockSeqAndNode[8] = SMC_TA_TESTUUID_CLOCKSEQANDNODE; @@ -537,12 +550,15 @@ TEE_Result CmdTEEGetPropertyAsUUID_withoutEnum( /* Read the input parameter */ nPropSet = (TEE_PropSetHandle)pParams[0].value.a; - pPropName = pParams[1].memref.buffer; - if ((pPropName == NULL)) + if (!pParams[1].memref.buffer || + pParams[1].memref.size >= sizeof(pPropName)) { SLogError("CmdTEEGetPropertyAsUUID_withoutEnum: property name Input parameter is NULL"); return TRUSTED_APP_ERROR_BAD_PARAMETERS; } + TEE_MemMove(pPropName, pParams[1].memref.buffer, + pParams[1].memref.size); + pPropName[pParams[1].memref.size] = 0; /* Read the output parameters */ if (pParams[2].memref.buffer == NULL) @@ -579,7 +595,7 @@ TEE_Result CmdTEEGetPropertyAsIdentity_withoutEnum( { /** VARIABLES **/ TEE_PropSetHandle nPropSet; - char* pPropName; + char pPropName[PROPERTY_NAME_MAX_SIZE]; char nWrongResultString[14] = "wrong identity"; char nResultIdentityString[45] = "F0000000:534D4152-542D-4353-4C54-2D54412D3031"; char nClockSeqAndNode[8] = SMC_TA_TESTUUID_CLOCKSEQANDNODE; @@ -602,12 +618,15 @@ TEE_Result CmdTEEGetPropertyAsIdentity_withoutEnum( /* Read the input parameter */ nPropSet = (TEE_PropSetHandle)pParams[0].value.a; - pPropName = pParams[1].memref.buffer; - if ((pPropName == NULL)) + if (!pParams[1].memref.buffer || + pParams[1].memref.size >= sizeof(pPropName)) { SLogError("CmdTEEGetPropertyAsIdentity_withoutEnum: property name Input parameter is NULL"); return TRUSTED_APP_ERROR_BAD_PARAMETERS; } + TEE_MemMove(pPropName, pParams[1].memref.buffer, + pParams[1].memref.size); + pPropName[pParams[1].memref.size] = 0; /* Read the output parameters */ if (pParams[2].memref.buffer == NULL) @@ -647,6 +666,9 @@ TEE_Result CmdTEEGetPropertyAsXXX_fromEnum( TEE_PropSetHandle nPropSet; char pPropName[PROPERTY_NAME_MAX_SIZE]; size_t nPropNameSize = 0; + TEE_MemMove(pPropName, pParams[1].memref.buffer, + pParams[1].memref.size); + pPropName[pParams[1].memref.size] = 0; char pOutputString1[PROPERTY_OUTPUT_STRING_MAX_SIZE], pOutputString2[PROPERTY_OUTPUT_STRING_MAX_SIZE]; size_t nOutputString1Length = 0; size_t nOutputString2Length = 0; -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0007-TTAs-revert-to-v1.1-types.patch000066400000000000000000000112511464074351400260540ustar00rootroot00000000000000From 309bdb9181502392f1d1a978e4e97706ebf532c8 Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Thu, 24 Sep 2020 11:31:34 +0200 Subject: [PATCH 07/11] TTAs revert to v1.1 types Replacing some occurrences of size_t with uint32_t. Signed-off-by: Jens Wiklander --- .../TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto.c | 4 ++-- .../TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto_protocol.h | 2 +- .../TTA_DS/TTA_DS/code_files/TTA_DS_commands.c | 4 ++-- .../TTA_TCF/TTA_TCF/code_files/TTA_TCF.c | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto.c b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto.c index 11de643f586d..d17448e878ca 100644 --- a/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto.c +++ b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto.c @@ -298,7 +298,7 @@ void SetOperationToNull(TEE_CryptoData *pCryptoData, uint32_t lopId) (pCryptoData->Operation3) = TEE_HANDLE_NULL; } -bool copyOperationInfoMultipleToBuffer(const TEE_OperationInfoMultiple *pOpInfo, uint8_t *buffer, size_t *size) +bool copyOperationInfoMultipleToBuffer(const TEE_OperationInfoMultiple *pOpInfo, uint8_t *buffer, uint32_t *size) { const size_t allocatedSize = *size; const size_t outputSize = 32 + pOpInfo->numberOfKeys * 8; @@ -976,7 +976,7 @@ TEE_Result CmdGetOperationInfoMultiple( if (numberOfKeys > MAX_NUMBER_OF_KEYS) return TRUSTED_APP_ERROR_VALUE_OUT_OF_RANGE; - operationSize = sizeof(TEE_OperationInfoMultiple) + numberOfKeys * sizeof(TEE_OperationInfoKey); // from 1.1 6.1.3 + operationSize = sizeof(TEE_OperationInfoMultiple) + numberOfKeys * sizeof(TEE_OperationInfoKey); // from 1.1 ?6.1.3 returnCode = TEE_GetOperationInfoMultiple(operation, pCryptoData->OperationInfoMultiple, &operationSize); diff --git a/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto_protocol.h b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto_protocol.h index 51c827cdb796..13f816d8f0ae 100644 --- a/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto_protocol.h +++ b/TTAs_Internal_API_1_1_1/TTA_Crypto/TTA_Crypto/code_files/TTA_Crypto_protocol.h @@ -47,7 +47,7 @@ void writeUint32ToBuffer(uint32_t value, uint8_t buffer[]); bool getOperation(TEE_CryptoData *pCryptoData, uint32_t lopId, TEE_OperationHandle *pOperation); bool getKey(TEE_CryptoData *pCryptoData, uint32_t lkeyId, TEE_ObjectHandle *pKey); void SetOperationToNull(TEE_CryptoData *pCryptoData, uint32_t lopId); -bool copyOperationInfoMultipleToBuffer(const TEE_OperationInfoMultiple *pOpInfo, uint8_t *buffer, size_t *size); +bool copyOperationInfoMultipleToBuffer(const TEE_OperationInfoMultiple *pOpInfo, uint8_t *buffer, uint32_t *size); TEE_Result CmdTTAEnsureIntermediateBufferSize( void* pSessionContext, diff --git a/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/TTA_DS_commands.c b/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/TTA_DS_commands.c index 31efbbb01710..d828e7b4e383 100644 --- a/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/TTA_DS_commands.c +++ b/TTAs_Internal_API_1_1_1/TTA_DS/TTA_DS/code_files/TTA_DS_commands.c @@ -940,9 +940,9 @@ TEE_Result CmdGetNextPersistentObject( TEE_Param pParams[4]) { uint8_t localBuffer[TEE_OBJECT_ID_MAX_LEN] = { 0 }; - size_t localBufferLength = NELEM(localBuffer); + uint32_t localBufferLength = NELEM(localBuffer); void *objectID; - size_t *objectIDLen; + uint32_t *objectIDLen; TEE_ObjectEnumHandle objectEnumerator; TEE_ObjectInfo *pObjectInfo; TEE_Result returnCode; diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c index 8d1df25dea69..14e642cd6193 100644 --- a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c @@ -665,13 +665,13 @@ TEE_Result CmdTEEGetPropertyAsXXX_fromEnum( TEE_PropSetHandle nEnum; TEE_PropSetHandle nPropSet; char pPropName[PROPERTY_NAME_MAX_SIZE]; - size_t nPropNameSize = 0; + uint32_t nPropNameSize = 0; TEE_MemMove(pPropName, pParams[1].memref.buffer, pParams[1].memref.size); pPropName[pParams[1].memref.size] = 0; char pOutputString1[PROPERTY_OUTPUT_STRING_MAX_SIZE], pOutputString2[PROPERTY_OUTPUT_STRING_MAX_SIZE]; - size_t nOutputString1Length = 0; - size_t nOutputString2Length = 0; + uint32_t nOutputString1Length = 0; + uint32_t nOutputString2Length = 0; bool nOutputBool1; bool nOutputBool2; uint32_t nOutputInt1; -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0008-TEE.xml.patch000066400000000000000000000056241464074351400227130ustar00rootroot00000000000000From 1664a1487cdfb235483eb6f874f39839dee80e7e Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Wed, 24 Jun 2020 08:49:24 +0200 Subject: [PATCH 08/11] TEE.xml Disabling the case: - Request_Cancellation (d3-87-46) Because the adaption layer we've implemented cannot deal with threads in a good way Signed-off-by: Jens Wiklander --- packages/ClientAPI/xmlstable/TEE.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/ClientAPI/xmlstable/TEE.xml b/packages/ClientAPI/xmlstable/TEE.xml index 85cd81818f5f..e59c4df02d3c 100644 --- a/packages/ClientAPI/xmlstable/TEE.xml +++ b/packages/ClientAPI/xmlstable/TEE.xml @@ -825,6 +825,7 @@ + -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0009-TEE_Internal_API.xml.patch000066400000000000000000000145651464074351400252450ustar00rootroot00000000000000From a7caa35eff3487c0bd777f7df6f5337219b8d9dd Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Tue, 7 Jul 2020 11:17:14 +0200 Subject: [PATCH 09/11] TEE_Internal_API.xml Disabling cases: - Invoke_CheckMemoryAccessRight_BufferRead_AccessWrite_error (a7-35-f1) - Invoke_CheckMemoryAccessRight_BufferWrite_AccessRead_error (a7-98-4b) As OP-TEE doesn't check the direction of the passed memrefs Disabling the case: - Invoke_GetCancellationFlag_RequestedCancel (a7-71-11 Because the adaption layer we've implemented cannot deal with threads in a good way. Disabling the case: - Invoke_GetPropertyAsBinaryBlock_withoutEnum_success (a7-26-c1) Because it assumes base64 coded binary properties and is also in the list of excluded conformance tests. Signed-off-by: Jens Wiklander --- packages/TrustedCoreFw/xmlstable/TEE_Internal_API.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/TrustedCoreFw/xmlstable/TEE_Internal_API.xml b/packages/TrustedCoreFw/xmlstable/TEE_Internal_API.xml index f9824238451a..0e96e3bde8e9 100644 --- a/packages/TrustedCoreFw/xmlstable/TEE_Internal_API.xml +++ b/packages/TrustedCoreFw/xmlstable/TEE_Internal_API.xml @@ -523,6 +523,7 @@ + @@ -1045,6 +1047,7 @@ + @@ -2254,6 +2258,7 @@ + @@ -3716,6 +3722,7 @@ + -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0010-TEE_DataStorage_API.xml.patch000066400000000000000000000165771464074351400256640ustar00rootroot00000000000000From cd058f01be06f70c54b9608d4a7b4dae5a5bc2e0 Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Wed, 19 Aug 2020 17:53:31 +0200 Subject: [PATCH 10/11] TEE_DataStorage_API.xml Disabling cases: - Invoke_SeekWriteRead_Offset_0_SEEK_END_Offset_Low (9d-a6-93) - Invoke_SeekWriteRead_Offset_High_SEEK_CUR_Offset_Low (9d-60-98) - Invoke_SeekWriteRead_Offset_Low_SEEK_CUR_Offset_High (9d-6b-51) - Invoke_SeekWriteRead_Offset_Low_SEEK_END_Offset_Low (9d-21-93) - Invoke_WriteObjectData_overflow (9d-01-ce) These tests fails and the expected position counters doesn't seem to make any sense. Signed-off-by: Jens Wiklander --- packages/DataStorage/xmlstable/TEE_DataStorage_API.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/DataStorage/xmlstable/TEE_DataStorage_API.xml b/packages/DataStorage/xmlstable/TEE_DataStorage_API.xml index db43d7b71ebc..69305a880a9f 100644 --- a/packages/DataStorage/xmlstable/TEE_DataStorage_API.xml +++ b/packages/DataStorage/xmlstable/TEE_DataStorage_API.xml @@ -166262,6 +166262,7 @@ + @@ -169043,6 +169045,7 @@ + @@ -170710,6 +170714,7 @@ + @@ -172379,6 +172385,7 @@ + @@ -178054,6 +178062,7 @@ + -- 2.25.1 optee_test-4.3.0/host/xtest/gp/patches/0011-TEE_Crypto_API.xml.patch000066400000000000000000000040241464074351400247270ustar00rootroot00000000000000From af6aa988020a21895688dd2d8221119fbe6d3cf3 Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Wed, 19 Aug 2020 17:53:31 +0200 Subject: [PATCH 11/11] TEE_Crypto_API.xml Disabling case: - Invoke_Crypto_MACInit_init_vector_not_required_length (50-ea-af) CBC MAC doesn't take any IV so TEE_MACInit() is supposed to ignore IV and IVLen. Signed-off-by: Jens Wiklander --- packages/Crypto/xmlstable/TEE_Crypto_API.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/Crypto/xmlstable/TEE_Crypto_API.xml b/packages/Crypto/xmlstable/TEE_Crypto_API.xml index 11013c152fb2..b8246376866e 100644 --- a/packages/Crypto/xmlstable/TEE_Crypto_API.xml +++ b/packages/Crypto/xmlstable/TEE_Crypto_API.xml @@ -130401,6 +130401,7 @@ + -- 2.25.1 0012-TTA_TCF-remove-TEE_MemMove-from-CmdTEEGetPropertyAsX.patch000066400000000000000000000027411464074351400327100ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/gp/patchesFrom c2431936b80e2064d52a380c715cd3260ce54d54 Mon Sep 17 00:00:00 2001 From: Jerome Forissier Date: Fri, 23 Apr 2021 09:25:55 +0200 Subject: [PATCH] TTA_TCF: remove TEE_MemMove() from CmdTEEGetPropertyAsXXX_fromEnum() Patch 0006-TTA_TCF-fix-CmdTEEGetPropertyA-_withoutEnum.patch introduced a TEE_MemMove() call in CmdTEEGetPropertyAsXXX_fromEnum(). This call is wrong, because in this function pParams[1] is always of type TEE_PARAM_TYPE_VALUE_INPUT (in other words, not a memory reference). Fixes: https://github.com/OP-TEE/optee_os/issues/4561 Signed-off-by: Jerome Forissier --- .../TTA_TCF/TTA_TCF/code_files/TTA_TCF.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c index 14e642c..0c7c743 100644 --- a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c @@ -666,9 +666,6 @@ TEE_Result CmdTEEGetPropertyAsXXX_fromEnum( TEE_PropSetHandle nPropSet; char pPropName[PROPERTY_NAME_MAX_SIZE]; uint32_t nPropNameSize = 0; - TEE_MemMove(pPropName, pParams[1].memref.buffer, - pParams[1].memref.size); - pPropName[pParams[1].memref.size] = 0; char pOutputString1[PROPERTY_OUTPUT_STRING_MAX_SIZE], pOutputString2[PROPERTY_OUTPUT_STRING_MAX_SIZE]; uint32_t nOutputString1Length = 0; uint32_t nOutputString2Length = 0; -- 2.27.0 0013-Disable-Invoke_GetTAPersistentTimeNotSet_and_SetTAPe.patch000066400000000000000000000051261464074351400334350ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/gp/patchesFrom a3116f3eb2595600a6b1d40b7b25e2b36770d2f6 Mon Sep 17 00:00:00 2001 From: Jerome Forissier Date: Tue, 27 Apr 2021 17:34:40 +0200 Subject: [PATCH] Disable Invoke_GetTAPersistentTimeNotSet_and_SetTAPersistentTime_success (ce-7b-17) Test case Invoke_GetTAPersistentTimeNotSet_and_SetTAPersistentTime_success depends on the ability to erase the persistent time previously set by a TA. OP-TEE doesn't provide any way to do that, so disable this test. Signed-off-by: Jerome Forissier --- packages/Time_Arithmetical/xmlstable/TEE_TimeArithm_API.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/Time_Arithmetical/xmlstable/TEE_TimeArithm_API.xml b/packages/Time_Arithmetical/xmlstable/TEE_TimeArithm_API.xml index 7d905dc..8c17155 100644 --- a/packages/Time_Arithmetical/xmlstable/TEE_TimeArithm_API.xml +++ b/packages/Time_Arithmetical/xmlstable/TEE_TimeArithm_API.xml @@ -54397,6 +54397,7 @@ + seconds. For example, if the Trusted Application sets its persistent time to 2^32 -100 seconds, then after 100 seconds, the TA Persistent Time is 2^32, which is not representable with a uint32_t. In this case, the function TEE_GetTAPersistentTime MUST return TEE_ERROR_OVERFLOW and set time->seconds to 0 (which is 2^32 truncated to 32 bits).]]> -- 2.27.0 optee_test-4.3.0/host/xtest/gp/patches/0014-Pass-upper-32-bits-of-TEE_PropSetHandle-in-value.b.patch000066400000000000000000000067051464074351400324600ustar00rootroot00000000000000From 6d47284d5e9704cfa0ef0e4e9b997595288856c9 Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Wed, 4 May 2022 12:39:59 +0200 Subject: [PATCH] Pass upper 32 bits of TEE_PropSetHandle in value.b With MTE enabled 64-bit pointer usually use the upper 32 bits too while the GP tests assumes that 32 bits are enough. Fix this by passing the upper 32 bits in value.b Signed-off-by: Jens Wiklander --- .../TTA_TCF/TTA_TCF/code_files/TTA_TCF.c | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c index 0c7c743b34f9..30ba37788662 100644 --- a/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c +++ b/TTAs_Internal_API_1_1_1/TTA_TCF/TTA_TCF/code_files/TTA_TCF.c @@ -154,6 +154,24 @@ void TA_EXPORT TA_CloseSessionEntryPoint( TEE_Free(pSessionContext); } +static TEE_Param ptr_to_param(void *ptr) +{ + uint64_t u = (unsigned long)ptr; + TEE_Param param; + + param.value.a = u; + param.value.b = u >> 32; + + return param; +} + +static void *param_to_ptr(TEE_Param *param) +{ + unsigned long u = ((uint64_t)param->value.b << 32) | param->value.a; + + return (void *)u; +} + bool isPropertySet (TEE_PropSetHandle propsetOrEnumerator) { if((propsetOrEnumerator == TEE_PROPSET_CURRENT_TA)|| @@ -772,6 +790,7 @@ TEE_Result CmdTEEAllocatePropertyEnumerator( { /** VARIABLES **/ TEE_Result cmdResult; + TEE_PropSetHandle h; S_VAR_NOT_USED(pSessionContext); @@ -782,7 +801,8 @@ TEE_Result CmdTEEAllocatePropertyEnumerator( return TRUSTED_APP_ERROR_BAD_PARAMETERS; } - cmdResult = TEE_AllocatePropertyEnumerator((TEE_PropSetHandle*) &pParams[0].value.a); + cmdResult = TEE_AllocatePropertyEnumerator(&h); + pParams[0] = ptr_to_param(h); return cmdResult; } @@ -804,7 +824,8 @@ TEE_Result CmdTEEStartPropertyEnumerator( return TRUSTED_APP_ERROR_BAD_PARAMETERS; } - TEE_StartPropertyEnumerator((TEE_PropSetHandle) pParams[0].value.a, (TEE_PropSetHandle) pParams[1].value.a); + TEE_StartPropertyEnumerator(param_to_ptr(pParams), + param_to_ptr(pParams + 1)); return TEE_SUCCESS; } @@ -825,7 +846,7 @@ TEE_Result CmdTEEGetNextPropertyEnumerator_notStarted( return TRUSTED_APP_ERROR_BAD_PARAMETERS; } - return TEE_GetNextProperty((TEE_PropSetHandle) pParams[0].value.a); + return TEE_GetNextProperty(param_to_ptr(pParams)); } TEE_Result CmdTEEResetPropertyEnumerator( @@ -844,7 +865,7 @@ TEE_Result CmdTEEResetPropertyEnumerator( return TRUSTED_APP_ERROR_BAD_PARAMETERS; } - TEE_ResetPropertyEnumerator((TEE_PropSetHandle) pParams[0].value.a); + TEE_ResetPropertyEnumerator(param_to_ptr(pParams)); return TEE_SUCCESS; } @@ -864,7 +885,7 @@ TEE_Result CmdTEEFreePropertyEnumerator( return TRUSTED_APP_ERROR_BAD_PARAMETERS; } - TEE_FreePropertyEnumerator((TEE_PropSetHandle) pParams[0].value.a); + TEE_FreePropertyEnumerator(param_to_ptr(pParams)); return TEE_SUCCESS; } @@ -887,7 +908,7 @@ TEE_Result CmdTEEGetPropertyName( return TRUSTED_APP_ERROR_BAD_PARAMETERS; } - cmdResult = TEE_GetPropertyName((TEE_PropSetHandle) pParams[0].value.a, pParams[1].memref.buffer, &pParams[1].memref.size); + cmdResult = TEE_GetPropertyName(param_to_ptr(pParams), pParams[1].memref.buffer, &pParams[1].memref.size); return cmdResult; } -- 2.31.1 0015-Enable-compatibility-with-TEE-Internal-Core-API-v1.1.patch000066400000000000000000000020421464074351400325600ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/gp/patchesFrom 4e495cff6016583a9af14a62a16c2f7988fd9c68 Mon Sep 17 00:00:00 2001 From: Jens Wiklander Date: Wed, 30 Nov 2022 09:00:30 +0100 Subject: [PATCH] Enable compatibility with TEE Internal Core API v1.1 The test suite is testing TEE Internal Core API v1.1 so make sure that the API provided is compatible by setting CFG_TA_OPTEE_CORE_API_COMPAT_1_1=y. Signed-off-by: Jens Wiklander --- TTAs_Internal_API_1_1_1/ta_common.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TTAs_Internal_API_1_1_1/ta_common.mk b/TTAs_Internal_API_1_1_1/ta_common.mk index b8ce142bcf0a..0f8cc7d01314 100644 --- a/TTAs_Internal_API_1_1_1/ta_common.mk +++ b/TTAs_Internal_API_1_1_1/ta_common.mk @@ -1,3 +1,5 @@ +# These TAs are made for TEE Internal Core API version 1.1 +CFG_TA_OPTEE_CORE_API_COMPAT_1_1=y # Note that it is important that that $(BINARY) is set before we include # ta_dev_kit.mk. In the optee_test this is done in the individual TA Makefiles. include $(TA_DEV_KIT_DIR)/mk/ta_dev_kit.mk -- 2.31.1 optee_test-4.3.0/host/xtest/gp/patches/0016-TEE_Crypto_API.xml.patch000066400000000000000000000172551464074351400247460ustar00rootroot00000000000000From e1e4ae13b9c5fb9928c94e05f0fa5c17769fd5bd Mon Sep 17 00:00:00 2001 From: Jerome Forissier Date: Fri, 3 Nov 2023 10:41:57 +0100 Subject: [PATCH] TEE_Crypto_API.xml Disabling cases: - Invoke_Crypto_AllocateOperation_TEE_ALG_MD5_size_not_appropriate (3b-4d-15) - Invoke_Crypto_AllocateOperation_TEE_ALG_SHA1_size_not_appropriate (3b-86-3d) - Invoke_Crypto_AllocateOperation_TEE_ALG_SHA224_size_not_appropriate (3b-91-91) - Invoke_Crypto_AllocateOperation_TEE_ALG_SHA256_size_not_appropriate (3b-c6-3c) - Invoke_Crypto_AllocateOperation_TEE_ALG_SHA384_size_not_appropriate (3b-b0-94) - Invoke_Crypto_AllocateOperation_TEE_ALG_SHA512_size_not_appropriate (3b-f6-b8) These tests assume that TEE_AllocateOperation() must reject non-zero values for maxKeySize when the algorithm is MD5 or SHA (since the parameter is not applicable). But The GlobalPlatform TEE Internal Core API v1.1.2 has clarified the requirement, see: 6.2.1 TEE_AllocateOperation [...] The parameter maxKeySize MUST be a valid value as defined in Table 5-9 for the algorithm, for algorithms referenced in Table 5-9. For all other algorithms, the maxKeySize parameter may have any value. Link: https://github.com/OP-TEE/optee_os/pull/6416 Signed-off-by: Jerome Forissier --- packages/Crypto/xmlstable/TEE_Crypto_API.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/Crypto/xmlstable/TEE_Crypto_API.xml b/packages/Crypto/xmlstable/TEE_Crypto_API.xml index b824637..b1cd7b0 100644 --- a/packages/Crypto/xmlstable/TEE_Crypto_API.xml +++ b/packages/Crypto/xmlstable/TEE_Crypto_API.xml @@ -149178,6 +149178,7 @@ + @@ -156360,6 +156362,7 @@ + @@ -156738,6 +156742,7 @@ + @@ -157116,6 +157122,7 @@ + @@ -157494,6 +157502,7 @@ + @@ -157872,6 +157882,7 @@ + -- 2.34.1 optee_test-4.3.0/host/xtest/gp/prepare_suite.sh000066400000000000000000000013111464074351400216320ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2020, Linaro Limited. if [ $# -ne 2 ]; then echo "usage: prepare_suite.sh " exit 1 fi set -e if [ -e $1/host/xtest/gp-suite ]; then # Clean up last patching in case it failed in some way rm -rf $1/host/xtest/gp-suite fi mkdir -p $1/host/xtest/gp-suite 7z x -o$1/host/xtest/gp-suite $2 cd $1/host/xtest/gp-suite mv TEE_Initial_Configuration-Test_Suite_v2_0_0_2-2017_06_09/* . rmdir TEE_Initial_Configuration-Test_Suite_v2_0_0_2-2017_06_09 rm -f TTAs_Internal_API_1_1_1/TEE_include/tee_internal_api.h chmod -R u+w . for p in `echo ../gp/patches/*.patch | sort -n` ;do echo Applying $p patch -p1 < $p done optee_test-4.3.0/host/xtest/hash_perf.c000066400000000000000000000306201464074351400201310ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "crypto_common.h" #include "xtest_helpers.h" #include "xtest_test.h" /* * TEE client stuff */ static TEEC_Context ctx; static TEEC_Session sess; static TEEC_SharedMemory in_shm = { .flags = TEEC_MEM_INPUT }; static TEEC_SharedMemory out_shm = { .flags = TEEC_MEM_OUTPUT }; static void errx(const char *msg, TEEC_Result res, uint32_t *orig) { fprintf(stderr, "%s: 0x%08x", msg, res); if (orig) fprintf(stderr, " (orig=%d)", (int)*orig); fprintf(stderr, "\n"); exit (1); } static void check_res(TEEC_Result res, const char *errmsg, uint32_t *orig) { if (res != TEEC_SUCCESS) errx(errmsg, res, orig); } static void open_ta(void) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_UUID uuid = TA_CRYPTO_PERF_UUID; uint32_t err_origin = 0; res = TEEC_InitializeContext(NULL, &ctx); check_res(res,"TEEC_InitializeContext", NULL); res = TEEC_OpenSession(&ctx, &sess, &uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &err_origin); check_res(res,"TEEC_OpenSession", &err_origin); } /* * Statistics * * We want to compute min, max, mean and standard deviation of processing time */ struct statistics { int n; double m; double M2; double min; double max; int initialized; }; /* Take new sample into account (Knuth/Welford algorithm) */ static void update_stats(struct statistics *s, uint64_t t) { double x = (double)t; double delta = x - s->m; s->n++; s->m += delta/s->n; s->M2 += delta*(x - s->m); if (!s->initialized) { s->min = s->max = x; s->initialized = 1; } else { if (s->min > x) s->min = x; if (s->max < x) s->max = x; } } static double stddev(struct statistics *s) { if (s->n < 2) return NAN; return sqrt(s->M2/s->n); } static const char *algo_str(uint32_t algo) { switch (algo) { case TA_SHA_SHA1: return "SHA1"; case TA_SHA_SHA224: return "SHA224"; case TA_SHA_SHA256: return "SHA256"; case TA_SHA_SHA384: return "SHA384"; case TA_SHA_SHA512: return "SHA512"; case TA_SM3: return "SM3"; case TA_HMAC_SHA1: return "HMAC_SHA1"; case TA_HMAC_SHA224: return "HMAC_SHA224"; case TA_HMAC_SHA256: return "HMAC_SHA256"; case TA_HMAC_SHA384: return "HMAC_SHA384"; case TA_HMAC_SHA512: return "HMAC_SHA512"; case TA_HMAC_SM3: return "HMAC_SM3"; default: return "???"; } } static int hash_size(uint32_t algo) { switch (algo) { case TA_SHA_SHA1: case TA_HMAC_SHA1: return 20; case TA_SHA_SHA224: case TA_HMAC_SHA224: return 28; case TA_SHA_SHA256: case TA_HMAC_SHA256: return 32; case TA_SHA_SHA384: case TA_HMAC_SHA384: return 48; case TA_SHA_SHA512: case TA_HMAC_SHA512: return 64; case TA_SM3: case TA_HMAC_SM3: return 32; default: return 0; } } #define _TO_STR(x) #x #define TO_STR(x) _TO_STR(x) static void alloc_shm(size_t sz, uint32_t algo, int offset) { TEEC_Result res = TEEC_ERROR_GENERIC; in_shm.buffer = NULL; in_shm.size = sz + offset; res = TEEC_AllocateSharedMemory(&ctx, &in_shm); check_res(res, "TEEC_AllocateSharedMemory", NULL); out_shm.buffer = NULL; out_shm.size = hash_size(algo); res = TEEC_AllocateSharedMemory(&ctx, &out_shm); check_res(res, "TEEC_AllocateSharedMemory", NULL); } static void free_shm(void) { TEEC_ReleaseSharedMemory(&in_shm); TEEC_ReleaseSharedMemory(&out_shm); } static ssize_t read_random(void *in, size_t rsize) { static int rnd; ssize_t s = 0; if (!rnd) { rnd = open("/dev/urandom", O_RDONLY); if (rnd < 0) { perror("open"); return 1; } } s = read(rnd, in, rsize); if (s < 0) { perror("read"); return 1; } if ((size_t)s != rsize) { printf("read: requested %zu bytes, got %zd\n", rsize, s); } return 0; } static long get_current_time(struct timespec *ts) { if (clock_gettime(CLOCK_MONOTONIC, ts) < 0) { perror("clock_gettime"); exit(1); } return 0; } static uint64_t timespec_diff_ns(struct timespec *start, struct timespec *end) { uint64_t ns = 0; if (end->tv_nsec < start->tv_nsec) { ns += 1000000000 * (end->tv_sec - start->tv_sec - 1); ns += 1000000000 - start->tv_nsec + end->tv_nsec; } else { ns += 1000000000 * (end->tv_sec - start->tv_sec); ns += end->tv_nsec - start->tv_nsec; } return ns; } static uint64_t run_test_once(void *in, size_t size, int random_in, TEEC_Operation *op) { struct timespec t0 = { }; struct timespec t1 = { }; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; if (random_in == CRYPTO_USE_RANDOM) read_random(in, size); get_current_time(&t0); res = TEEC_InvokeCommand(&sess, TA_CRYPTO_PERF_CMD_HASH_PROCESS, op, &ret_origin); check_res(res, "TEEC_InvokeCommand", &ret_origin); get_current_time(&t1); return timespec_diff_ns(&t0, &t1); } static void prepare_op(int algo) { TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].value.a = algo; res = TEEC_InvokeCommand(&sess, TA_CRYPTO_PERF_CMD_HASH_PREPARE_OP, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand", &ret_origin); } static void do_warmup(int warmup) { struct timespec t0 = { }; struct timespec t = { }; int i = 0; get_current_time(&t0); do { for (i = 0; i < 100000; i++) ; get_current_time(&t); } while (timespec_diff_ns(&t0, &t) < (uint64_t)warmup * 1000000000); } static const char *yesno(int v) { return (v ? "yes" : "no"); } static double mb_per_sec(size_t size, double usec) { return (1000000000/usec)*((double)size/(1024*1024)); } /* Hash test: buffer of size byte. Run test n times. * Entry point for running SHA benchmark * Params: * algo - Algorithm * size - Buffer size * n - Number of measurements * l - Amount of inner loops * random_in - Get input from /dev/urandom * offset - Buffer offset wrt. alloc-ed address * warmup - Start with a-second busy loop * verbosity - Verbosity level * */ extern void hash_perf_run_test(int algo, size_t size, unsigned int n, unsigned int l, int random_in, int offset, int warmup, int verbosity) { uint64_t t = 0; struct statistics stats = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; int n0 = n; struct timespec ts = { }; double sd = 0; vverbose("hash-perf\n"); if (clock_getres(CLOCK_MONOTONIC, &ts) < 0) { perror("clock_getres"); return; } vverbose("Clock resolution is %jd ns\n", (intmax_t)ts.tv_sec * 1000000000 + ts.tv_nsec); open_ta(); prepare_op(algo); alloc_shm(size, algo, offset); if (random_in == CRYPTO_USE_ZEROS) memset((uint8_t *)in_shm.buffer + offset, 0, size); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_VALUE_INPUT, TEEC_NONE); op.params[0].memref.parent = &in_shm; op.params[0].memref.offset = 0; op.params[0].memref.size = size + offset; op.params[1].memref.parent = &out_shm; op.params[1].memref.offset = 0; op.params[1].memref.size = hash_size(algo); op.params[2].value.a = l; op.params[2].value.b = offset; verbose("Starting test: %s, size=%zu bytes, ", algo_str(algo), size); verbose("random=%s, ", yesno(random_in == CRYPTO_USE_RANDOM)); verbose("unaligned=%s, ", yesno(offset)); verbose("inner loops=%u, loops=%u, warm-up=%u s\n", l, n, warmup); if (warmup) do_warmup(warmup); while (n-- > 0) { t = run_test_once((uint8_t *)in_shm.buffer + offset, size, random_in, &op); update_stats(&stats, t); if (n % (n0 / 10) == 0) vverbose("#"); } vverbose("\n"); sd = stddev(&stats); printf("min=%gus max=%gus mean=%gus stddev=%gus (cv %g%%) (%gMiB/s)\n", stats.min / 1000, stats.max / 1000, stats.m / 1000, sd / 1000, 100 * sd / stats.m, mb_per_sec(size, stats.m)); verbose("2-sigma interval: %g..%gus (%g..%gMiB/s)\n", (stats.m - 2 * sd) / 1000, (stats.m + 2 * sd) / 1000, mb_per_sec(size, stats.m + 2 * sd), mb_per_sec(size, stats.m - 2 * sd)); free_shm(); } static void usage(const char *applet_optname, /* Default params */ int algo, size_t size, int warmup, int l, int n) { fprintf(stderr, "Usage: %s %s [-h]\n", xtest_progname, applet_optname); fprintf(stderr, "Usage: %s %s [-a ALGO] [-l LOOP] [-n LOOP] [-r] [-s SIZE]", xtest_progname, applet_optname); fprintf(stderr, " [-v [-v]] [-w SEC]\n"); fprintf(stderr, "Hash performance testing tool for OP-TEE\n"); fprintf(stderr, "\n"); fprintf(stderr, "Options:\n"); fprintf(stderr, " -a ALGO Algorithm (SHA1, SHA224, SHA256, SHA384, SHA512, SM3," " HMAC_SHA1, HMAC_SHA224, HMAC_SHA256," " HMAC_SHA384, HMAC_SHA512, HMAC_SM3) [%s]\n", algo_str(algo)); fprintf(stderr, " -h|--help Print this help and exit\n"); fprintf(stderr, " -l LOOP Inner loop iterations (TA calls TEE_DigestDoFinal() times) [%u]\n", l); fprintf(stderr, " -n LOOP Outer test loop iterations [%u]\n", n); fprintf(stderr, " -r|--random Get input data from /dev/urandom (default: all-zeros)\n"); fprintf(stderr, " -s SIZE Test buffer size in bytes [%zu]\n", size); fprintf(stderr, " -u|--unalign Use unaligned buffer (odd address)\n"); fprintf(stderr, " -v Be verbose (use twice for greater effect)\n"); fprintf(stderr, " -w|--warmup SEC Warm-up time in seconds: execute a busy loop before\n"); fprintf(stderr, " the test to mitigate the effects of cpufreq etc. [%u]\n", warmup); } #define NEXT_ARG(i) \ do { \ if (++i == argc) { \ fprintf(stderr, "%s %s: %s: missing argument\n", \ xtest_progname, argv[0], argv[i - 1]); \ return 1; \ } \ } while (0); extern int hash_perf_runner_cmd_parser(int argc, char *argv[]) { int i = 0; /* Command line params */ size_t size = 1024; /* Buffer size (-s) */ unsigned int n = CRYPTO_DEF_COUNT;/* Number of measurements (-n)*/ unsigned int l = CRYPTO_DEF_LOOPS; /* Inner loops (-l) */ int verbosity = CRYPTO_DEF_VERBOSITY; /* Verbosity (-v) */ int algo = TA_SHA_SHA1; /* Algorithm (-a) */ /* Get input data from /dev/urandom (-r) */ int random_in = CRYPTO_USE_ZEROS; /* Start with a 2-second busy loop (-w) */ int warmup = CRYPTO_DEF_WARMUP; int offset = 0; /* Buffer offset wrt. alloc'ed address (-u) */ /* Parse command line */ for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { usage(argv[0], algo, size, warmup, l, n); return 0; } } for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-l")) { NEXT_ARG(i); l = atoi(argv[i]); } else if (!strcmp(argv[i], "-a")) { NEXT_ARG(i); if (!strcasecmp(argv[i], "SHA1")) algo = TA_SHA_SHA1; else if (!strcasecmp(argv[i], "SHA224")) algo = TA_SHA_SHA224; else if (!strcasecmp(argv[i], "SHA256")) algo = TA_SHA_SHA256; else if (!strcasecmp(argv[i], "SHA384")) algo = TA_SHA_SHA384; else if (!strcasecmp(argv[i], "SHA512")) algo = TA_SHA_SHA512; else if (!strcasecmp(argv[i], "SM3")) algo = TA_SM3; else if (!strcasecmp(argv[i], "HMAC_SHA1")) algo = TA_HMAC_SHA1; else if (!strcasecmp(argv[i], "HMAC_SHA224")) algo = TA_HMAC_SHA224; else if (!strcasecmp(argv[i], "HMAC_SHA256")) algo = TA_HMAC_SHA256; else if (!strcasecmp(argv[i], "HMAC_SHA384")) algo = TA_HMAC_SHA384; else if (!strcasecmp(argv[i], "HMAC_SHA512")) algo = TA_HMAC_SHA512; else if (!strcasecmp(argv[i], "HMAC_SM3")) algo = TA_HMAC_SM3; else { fprintf(stderr, "%s %s, invalid algorithm\n", xtest_progname, argv[0]); usage(argv[0], algo, size, warmup, l, n); return 1; } } else if (!strcmp(argv[i], "-n")) { NEXT_ARG(i); n = atoi(argv[i]); } else if (!strcmp(argv[i], "--random") || !strcmp(argv[i], "-r")) { random_in = CRYPTO_USE_RANDOM; } else if (!strcmp(argv[i], "-s")) { NEXT_ARG(i); size = atoi(argv[i]); } else if (!strcmp(argv[i], "--unalign") || !strcmp(argv[i], "-u")) { offset = 1; } else if (!strcmp(argv[i], "-v")) { verbosity++; } else if (!strcmp(argv[i], "--warmup") || !strcmp(argv[i], "-w")) { NEXT_ARG(i); warmup = atoi(argv[i]); } else { fprintf(stderr, "%s %s: invalid argument: %s\n", xtest_progname, argv[0], argv[i]); usage(argv[0], algo, size, warmup, l, n); return 1; } } hash_perf_run_test(algo, size, n, l, random_in, offset, warmup, verbosity); return 0; } optee_test-4.3.0/host/xtest/include/000077500000000000000000000000001464074351400174505ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/include/uapi/000077500000000000000000000000001464074351400204065ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/include/uapi/linux/000077500000000000000000000000001464074351400215455ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/include/uapi/linux/arm_ffa_user.h000066400000000000000000000045461464074351400243600ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2020-2022, Arm Limited */ #ifndef __ARM_FFA_USER_H #define __ARM_FFA_USER_H #include #include #define FFA_IOC_MAGIC 0xf0 #define FFA_IOC_BASE 0 /** * struct ffa_ioctl_ep_desc - Query endpoint ID * @uuid_ptr: [in] Pointer to queried UUID. Format must be an RFC 4122 string, * i.e. "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee". * @id: [out] 16-bit ID of endpoint. */ struct ffa_ioctl_ep_desc { __u64 uuid_ptr; __u16 id; }; #define FFA_IOC_GET_PART_ID _IOWR(FFA_IOC_MAGIC, FFA_IOC_BASE + 0, \ struct ffa_ioctl_ep_desc) /** * struct ffa_ioctl_msg_args - Send direct message request * @args: [in/out] Arguments of FFA_MSG_SEND_DIRECT_REQ (w3-w7). If the * response is FFA_MSG_SEND_DIRECT_RESP, the received arguments are * returned in this field. * @dst_id: [in] 16-bit ID of destination endpoint. */ struct ffa_ioctl_msg_args { __u64 args[5]; __u16 dst_id; }; #define FFA_IOC_MSG_SEND _IOWR(FFA_IOC_MAGIC, FFA_IOC_BASE + 1, \ struct ffa_ioctl_msg_args) /** * struct ffa_ioctl_shm_desc - Share/reclaim memory region * @handle: [in/out] Handle assigned by the SPM. Output when used with * FFA_IOC_SHM_INIT, input when used with FFA_IOC_SHM_DEINIT. * @size: [in/out] In: the required size of region in bytes. Out: the * actual region size allocated by the kernel. Unused on reclaim. * @dst_id: [in] 16-bit ID of destination endpoint. Unused on reclaim. */ struct ffa_ioctl_shm_desc { __u64 handle; __u64 size; __u16 dst_id; }; #define FFA_IOC_SHM_INIT _IOWR(FFA_IOC_MAGIC, FFA_IOC_BASE + 2, \ struct ffa_ioctl_shm_desc) #define FFA_IOC_SHM_DEINIT _IOW(FFA_IOC_MAGIC, FFA_IOC_BASE + 3, \ struct ffa_ioctl_shm_desc) /** * struct ffa_ioctl_buf_desc - Read/write shared memory region * @handle: [in] Handle of the memory region. * @buf_ptr: [in] Pointer to user space buffer. Data is copied from/to this * buffer to/from the memory region shared with the given endpoint. * @buf_len: [in] Length of read/write in bytes. */ struct ffa_ioctl_buf_desc { __u64 handle; __u64 buf_ptr; __u64 buf_len; }; #define FFA_IOC_SHM_READ _IOW(FFA_IOC_MAGIC, FFA_IOC_BASE + 4, \ struct ffa_ioctl_buf_desc) #define FFA_IOC_SHM_WRITE _IOW(FFA_IOC_MAGIC, FFA_IOC_BASE + 5, \ struct ffa_ioctl_buf_desc) #endif /* __ARM_FFA_USER_H */ optee_test-4.3.0/host/xtest/install_ta.c000066400000000000000000000063641464074351400203340ustar00rootroot00000000000000/* * Copyright (c) 2017, Linaro Limited * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "install_ta.h" #include "xtest_helpers.h" #include "xtest_test.h" static void *read_ta(const char *dname, const char *fname, size_t *size) { char nbuf[PATH_MAX]; FILE *f = NULL; void *buf = NULL; size_t s = 0; if (dname) snprintf(nbuf, sizeof(nbuf), "%s/%s", dname, fname); else snprintf(nbuf, sizeof(nbuf), "%s", fname); f = fopen(nbuf, "rb"); if (!f) err(1, "fopen(\"%s\")", nbuf); if (fseek(f, 0, SEEK_END)) err(1, "fseek"); s = ftell(f); rewind(f); buf = malloc(s); if (!buf) err(1, "malloc(%zu)", s); if (fread(buf, 1, s, f) != s) err(1, "fread"); *size = s; return buf; } static void install_ta(TEEC_Session *sess, void *buf, size_t blen) { TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t err_origin = 0; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.buffer = buf; op.params[0].tmpref.size = blen; res = TEEC_InvokeCommand(sess, PTA_SECSTOR_TA_MGMT_BOOTSTRAP, &op, &err_origin); if (res) errx(1, "install_ta: TEEC_InvokeCommand: %#" PRIx32 " err_origin %#" PRIx32, res, err_origin); } static void install_file(TEEC_Session *sess, const char *dirname, const char *filename) { void *ta = NULL; size_t ta_size = 0; printf("Installing \"%s\"\n", filename); ta = read_ta(dirname, filename, &ta_size); install_ta(sess, ta, ta_size); free(ta); } static void install_dir(TEEC_Session *sess, const char *dirname) { DIR *dirp = NULL; printf("Searching directory \"%s\" for TAs\n", dirname); dirp = opendir(dirname); if (!dirp) err(1, "opendir(\"%s\")", dirname); while (true) { struct dirent *dent = readdir(dirp); if (!dent) break; if (fnmatch("*.ta", dent->d_name, 0)) continue; install_file(sess, dirname, dent->d_name); } closedir(dirp); } int install_ta_runner_cmd_parser(int argc, char *argv[]) { TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t err_origin = 0; TEEC_UUID uuid = PTA_SECSTOR_TA_MGMT_UUID; TEEC_Context ctx = { }; TEEC_Session sess = { }; int i = 0; res = TEEC_InitializeContext(NULL, &ctx); if (res) errx(1, "TEEC_InitializeContext: %#" PRIx32, res); res = TEEC_OpenSession(&ctx, &sess, &uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &err_origin); if (res) errx(1, "TEEC_OpenSession: res %#" PRIx32 " err_orig %#" PRIx32, res, err_origin); for (i = 1; i < argc; i++) { struct stat sb = { }; if (stat(argv[i], &sb)) { printf("Skipping \"%s\": %s", argv[i], strerror(errno)); continue; } if (S_ISDIR(sb.st_mode)) install_dir(&sess, argv[i]); else if (S_ISREG(sb.st_mode)) install_file(&sess, NULL, argv[i]); else printf("Skipping unknown file type \"%s\", mode 0%o", argv[i], sb.st_mode); } TEEC_CloseSession(&sess); TEEC_FinalizeContext(&ctx); printf("Installing TAs done\n"); return 0; } optee_test-4.3.0/host/xtest/install_ta.h000066400000000000000000000003301464074351400203240ustar00rootroot00000000000000/* * Copyright (c) 2017, Linaro Limited * * SPDX-License-Identifier: BSD-2-Clause */ #ifndef INSTALL_TA_H #define INSTALL_TA_H int install_ta_runner_cmd_parser(int argc, char *argv[]); #endif /*INSTALL_TA_H*/ optee_test-4.3.0/host/xtest/nist/000077500000000000000000000000001464074351400170025ustar00rootroot00000000000000optee_test-4.3.0/host/xtest/nist/186-2ecdsatestvectors.h000066400000000000000000021573121464074351400231510ustar00rootroot00000000000000/* * Automatically generated from NIST-186-2ecdsatestvectors-SigGen.txt */ /* [P-192] */ static const uint8_t nist_186_2_ecdsa_testvector_1_ptx[] = { /* Msg */ 0x66, 0xe9, 0x8a, 0x16, 0x58, 0x54, 0xcd, 0x07, 0x98, 0x9b, 0x1e, 0xe0, 0xec, 0x3f, 0x8d, 0xbe, 0x0e, 0xe3, 0xc2, 0xfb, 0x00, 0x51, 0xef, 0x53, 0xa0, 0xbe, 0x03, 0x45, 0x7c, 0x4f, 0x21, 0xbc, 0xe7, 0xdc, 0x50, 0xef, 0x4d, 0xf3, 0x74, 0x86, 0xc3, 0x20, 0x7d, 0xfe, 0xe2, 0x6b, 0xde, 0x4e, 0xd6, 0x23, 0x40, 0xcb, 0xb2, 0xda, 0x78, 0x49, 0x06, 0xb1, 0xb7, 0x83, 0xb4, 0xd6, 0x01, 0xbd, 0xff, 0x4a, 0xe1, 0xa7, 0xe5, 0xe8, 0x5a, 0x85, 0xaf, 0xa3, 0x20, 0x8d, 0xc6, 0x0f, 0x09, 0x90, 0xc8, 0x23, 0xbe, 0xdd, 0xdb, 0x3d, 0xb6, 0x63, 0x42, 0x66, 0x65, 0x15, 0x2e, 0xd7, 0xb0, 0x93, 0xd6, 0xbd, 0xa5, 0x06, 0xc9, 0x3a, 0x69, 0x4b, 0x83, 0xac, 0x71, 0x55, 0x3f, 0x31, 0xf5, 0xcc, 0x0d, 0x6b, 0xa2, 0xfa, 0x24, 0x80, 0x90, 0xe8, 0x79, 0x65, 0x73, 0xc4, 0x91, 0x5d, 0x15, 0x86 }; static const uint8_t nist_186_2_ecdsa_testvector_1_private[] = { /* d */ 0x00, 0x17, 0x89, 0x99, 0x49, 0xd0, 0x2b, 0x55, 0xf9, 0x55, 0x68, 0x46, 0x41, 0x1c, 0xc9, 0xde, 0x51, 0x2c, 0x6f, 0x16, 0xec, 0xde, 0xb1, 0xc4 }; static const uint8_t nist_186_2_ecdsa_testvector_1_public_x[] = { /* Qx */ 0x14, 0xf6, 0x97, 0x38, 0x59, 0x96, 0x89, 0xf5, 0x70, 0x6a, 0xb7, 0x13, 0x43, 0xbe, 0xcc, 0x88, 0x6e, 0xf1, 0x56, 0x9a, 0x2d, 0x11, 0x37, 0xfe }; static const uint8_t nist_186_2_ecdsa_testvector_1_public_y[] = { /* Qy */ 0x0c, 0xf5, 0xa4, 0x33, 0x90, 0x9e, 0x33, 0x21, 0x7f, 0xb4, 0xdf, 0x6b, 0x95, 0x93, 0xf7, 0x1d, 0x43, 0xfb, 0x1c, 0x2a, 0x56, 0x53, 0xb7, 0x63 }; /* k = 0098e9c07e8e6adb97b77d85b0c10a265e11737a89a3e37b */ static const uint8_t nist_186_2_ecdsa_testvector_1_out[] = { /* R */ 0xaf, 0x1f, 0x74, 0x9e, 0x3d, 0xf6, 0x22, 0x0f, 0xf0, 0x4e, 0xfd, 0x17, 0x86, 0x18, 0xa9, 0x77, 0xe0, 0x83, 0x8b, 0x1b, 0x9d, 0xc1, 0x26, 0xe3, /* S */ 0x89, 0x90, 0xa0, 0x4c, 0x6c, 0xc0, 0xff, 0x26, 0x26, 0x4e, 0xcf, 0x8f, 0x78, 0x31, 0x38, 0x1a, 0x9d, 0xbc, 0x6e, 0x53, 0xcc, 0x8c, 0xc8, 0x60 }; static const uint8_t nist_186_2_ecdsa_testvector_2_ptx[] = { /* Msg */ 0xd3, 0x9a, 0xd5, 0x61, 0x35, 0xbe, 0xc4, 0xc3, 0xc4, 0x36, 0x2d, 0x59, 0xd3, 0xd9, 0x17, 0x5a, 0xcb, 0x38, 0x66, 0x70, 0xc5, 0xdb, 0x0a, 0x17, 0x57, 0xce, 0x76, 0x46, 0xad, 0x5d, 0x53, 0x52, 0xdc, 0x1b, 0x76, 0x0f, 0x74, 0x29, 0x10, 0x38, 0x54, 0xb4, 0x25, 0x11, 0xc3, 0xc0, 0x40, 0x4a, 0xbc, 0x24, 0x64, 0x27, 0x88, 0xd6, 0x45, 0xde, 0x93, 0x69, 0xb8, 0x41, 0x78, 0xd4, 0x69, 0x9c, 0x5e, 0x75, 0xcc, 0xe1, 0x87, 0x56, 0x56, 0x02, 0x26, 0xae, 0xec, 0x9f, 0x71, 0xab, 0x9c, 0xe1, 0xf8, 0x6e, 0x8b, 0xa6, 0x35, 0x58, 0x2e, 0xde, 0x64, 0x84, 0xbd, 0x34, 0x95, 0x94, 0xe5, 0xf2, 0xff, 0xb1, 0xbe, 0x1e, 0x97, 0xcd, 0xfc, 0xe9, 0xe1, 0x2b, 0x69, 0x4b, 0x06, 0x22, 0x93, 0xe7, 0x28, 0x1e, 0xc1, 0x34, 0xf2, 0xe7, 0x2c, 0xde, 0x73, 0x26, 0x6c, 0x6a, 0x2c, 0x25, 0x31, 0x1a }; static const uint8_t nist_186_2_ecdsa_testvector_2_private[] = { /* d */ 0x00, 0x64, 0xc3, 0xa5, 0x1f, 0xb6, 0x18, 0x81, 0x70, 0xf3, 0xcd, 0xf1, 0x2b, 0x47, 0x4a, 0x77, 0xde, 0x4a, 0xe0, 0x05, 0x2b, 0x84, 0xec, 0xe8 }; static const uint8_t nist_186_2_ecdsa_testvector_2_public_x[] = { /* Qx */ 0x38, 0x6a, 0xfa, 0x71, 0xaf, 0xc0, 0x65, 0x01, 0x9f, 0x3d, 0x20, 0x21, 0xea, 0xd5, 0x31, 0xed, 0x1d, 0x36, 0x58, 0x87, 0x12, 0x2d, 0x2d, 0x4b }; static const uint8_t nist_186_2_ecdsa_testvector_2_public_y[] = { /* Qy */ 0xbb, 0xfb, 0x6e, 0x9c, 0xdb, 0x32, 0xc2, 0x25, 0x20, 0x15, 0xac, 0xfb, 0x4c, 0xfb, 0x04, 0x9b, 0x08, 0xb4, 0xcb, 0x27, 0x9c, 0x64, 0x92, 0x8a }; /* k = 00797552b9abf541c886f93556103b817a46c9aa0e2bc86f */ static const uint8_t nist_186_2_ecdsa_testvector_2_out[] = { /* R */ 0x33, 0x7b, 0xe4, 0x2e, 0xeb, 0xdc, 0xed, 0xd9, 0x76, 0x78, 0xee, 0xaa, 0xe9, 0xd1, 0xb2, 0x31, 0xb7, 0x40, 0xa1, 0x91, 0xa2, 0x93, 0xc2, 0x2a, /* S */ 0x9d, 0x67, 0x66, 0xb3, 0x91, 0xe9, 0x5f, 0x64, 0x9e, 0x05, 0x44, 0x24, 0x53, 0xa8, 0x54, 0x66, 0xda, 0x29, 0xea, 0xa9, 0x7d, 0xdc, 0xfc, 0x62 }; static const uint8_t nist_186_2_ecdsa_testvector_3_ptx[] = { /* Msg */ 0x47, 0x71, 0x01, 0xda, 0xa2, 0x82, 0xa5, 0xa5, 0x5b, 0x48, 0xc5, 0x31, 0x32, 0x90, 0xc8, 0xda, 0x65, 0xb0, 0x7c, 0xc4, 0xd4, 0x1a, 0x5a, 0x14, 0x63, 0x30, 0x0c, 0x60, 0xa0, 0x5a, 0x2c, 0x63, 0xa6, 0x56, 0x4f, 0xf6, 0x41, 0xd0, 0x42, 0x3c, 0x52, 0x33, 0x93, 0x1c, 0x75, 0xbe, 0x53, 0xf4, 0xe2, 0xda, 0x1b, 0x8b, 0x91, 0xab, 0x4d, 0x48, 0xa2, 0xe5, 0x9c, 0xa2, 0xfb, 0xe1, 0xcf, 0xd8, 0x33, 0xf0, 0xc1, 0xe2, 0xaf, 0xef, 0xad, 0xa7, 0x0a, 0x1b, 0xa8, 0x70, 0xba, 0x27, 0x6f, 0x9d, 0xf1, 0x8c, 0x63, 0x97, 0xc2, 0x21, 0xd2, 0x05, 0x85, 0xeb, 0x78, 0x43, 0x7c, 0x36, 0x46, 0x0f, 0xb7, 0xe4, 0x62, 0x86, 0x34, 0x06, 0x6e, 0x50, 0x4b, 0xa9, 0x0d, 0x17, 0x49, 0xf2, 0xa3, 0x3d, 0x5c, 0x6e, 0x5d, 0xce, 0xaf, 0xa3, 0x72, 0xb3, 0xd5, 0xeb, 0xa8, 0x29, 0x6b, 0x82, 0x19, 0x72 }; static const uint8_t nist_186_2_ecdsa_testvector_3_private[] = { /* d */ 0x00, 0xab, 0xd2, 0x05, 0xef, 0x41, 0x26, 0x46, 0x90, 0x7d, 0x2e, 0x48, 0x86, 0xb8, 0xff, 0xd7, 0xd9, 0x46, 0x78, 0xbd, 0x38, 0x18, 0xed, 0x54 }; static const uint8_t nist_186_2_ecdsa_testvector_3_public_x[] = { /* Qx */ 0x3b, 0x1c, 0x19, 0xd7, 0x3b, 0x6a, 0x4d, 0x7a, 0x12, 0x00, 0x35, 0x30, 0xa5, 0x4a, 0xe0, 0xf5, 0xba, 0x18, 0xd7, 0x5c, 0x98, 0xa0, 0xdb, 0x95 }; static const uint8_t nist_186_2_ecdsa_testvector_3_public_y[] = { /* Qy */ 0xaf, 0xb8, 0xbd, 0x8c, 0x94, 0xc6, 0xe3, 0xd5, 0xdc, 0x05, 0x0e, 0x36, 0x41, 0xc0, 0xfa, 0xd7, 0x71, 0x55, 0x7c, 0xe9, 0x7f, 0x5f, 0x3d, 0xba }; /* k = 00b81567f9e19c4ace373a26337488c1a476b7ee8d8e52bf */ static const uint8_t nist_186_2_ecdsa_testvector_3_out[] = { /* R */ 0xe3, 0x6d, 0x5d, 0xbb, 0x95, 0x60, 0xd9, 0x59, 0x81, 0x4c, 0xbd, 0x30, 0xaa, 0x6a, 0x40, 0x5d, 0xa9, 0x65, 0x2f, 0xbd, 0x25, 0x0d, 0xa9, 0xab, /* S */ 0xf2, 0xdb, 0x3d, 0x62, 0x73, 0x3f, 0x6d, 0x08, 0xb0, 0x8e, 0xf0, 0x68, 0x2f, 0x57, 0x9a, 0xc5, 0x27, 0x95, 0x01, 0x17, 0xf3, 0x9e, 0x47, 0x4b }; static const uint8_t nist_186_2_ecdsa_testvector_4_ptx[] = { /* Msg */ 0x85, 0xbc, 0xd4, 0x06, 0xf4, 0xcd, 0xc8, 0xf3, 0x0e, 0x19, 0x55, 0x3b, 0xa9, 0x2f, 0x9c, 0x08, 0x94, 0xb2, 0x83, 0x3d, 0x7b, 0xb0, 0xb5, 0x65, 0x0a, 0x30, 0xeb, 0xe8, 0x55, 0x0a, 0x69, 0x85, 0x78, 0xfc, 0xcb, 0xfc, 0x7a, 0xf9, 0x01, 0x0b, 0x78, 0xc4, 0x99, 0x9c, 0xff, 0xbe, 0x3c, 0x3d, 0xb9, 0xfd, 0x7c, 0xd0, 0x4c, 0x9d, 0xcd, 0x84, 0x7f, 0x5b, 0xd0, 0x04, 0x9f, 0x5f, 0xd8, 0xee, 0x21, 0x5a, 0xa7, 0x86, 0x88, 0xd1, 0x78, 0xac, 0x89, 0xb9, 0x43, 0x0b, 0x6d, 0x43, 0x3c, 0x94, 0xb8, 0xf9, 0x9c, 0x2b, 0x08, 0x0a, 0xa5, 0x9f, 0x3f, 0xe2, 0xe0, 0xe0, 0xe4, 0xfe, 0xaa, 0x6c, 0xc7, 0xff, 0xee, 0x0b, 0xe4, 0xfd, 0x34, 0xbc, 0x8a, 0x1d, 0xdb, 0xef, 0xbd, 0x66, 0xa2, 0xf4, 0xd8, 0xd0, 0x6e, 0xb4, 0x77, 0x9e, 0x47, 0x9f, 0x93, 0xee, 0xa3, 0xe5, 0xef, 0x8f, 0xe7, 0xe9 }; static const uint8_t nist_186_2_ecdsa_testvector_4_private[] = { /* d */ 0x00, 0x45, 0x62, 0x4e, 0x64, 0x35, 0x45, 0xc1, 0x13, 0xe4, 0xa1, 0x99, 0x3c, 0xfa, 0xc6, 0xf2, 0x3c, 0x6e, 0x04, 0x86, 0xc9, 0x8e, 0x14, 0xc9 }; static const uint8_t nist_186_2_ecdsa_testvector_4_public_x[] = { /* Qx */ 0x21, 0x93, 0x3e, 0x6e, 0x8c, 0xdc, 0xff, 0xf6, 0x2f, 0x36, 0xc4, 0x5e, 0x83, 0xde, 0xce, 0x12, 0x80, 0xa8, 0x88, 0x66, 0x3a, 0x34, 0x60, 0x8f }; static const uint8_t nist_186_2_ecdsa_testvector_4_public_y[] = { /* Qy */ 0x56, 0x58, 0x90, 0xe3, 0x7f, 0xdf, 0x56, 0x35, 0x95, 0xd2, 0x45, 0x24, 0xef, 0x1d, 0xa9, 0xaa, 0xe2, 0x46, 0x89, 0x2e, 0x75, 0xa7, 0x42, 0x34 }; /* k = 008df8209daae53a365bdcc8608f597315d43f587859d96a */ static const uint8_t nist_186_2_ecdsa_testvector_4_out[] = { /* R */ 0x17, 0x91, 0xe5, 0x03, 0x64, 0x5e, 0x53, 0xa8, 0x30, 0x4f, 0x2a, 0x44, 0x71, 0x59, 0x42, 0xc6, 0xaa, 0xb3, 0x15, 0xb0, 0x08, 0x6f, 0x41, 0x47, /* S */ 0x36, 0x63, 0x09, 0xb7, 0xf7, 0x9b, 0x2f, 0xd9, 0x8d, 0x6c, 0x2f, 0x3a, 0x84, 0x24, 0x17, 0x8b, 0x01, 0x23, 0x50, 0x41, 0xf9, 0x86, 0x95, 0x52 }; static const uint8_t nist_186_2_ecdsa_testvector_5_ptx[] = { /* Msg */ 0xc8, 0x88, 0x8d, 0xdf, 0x35, 0xfb, 0x43, 0xd2, 0x62, 0xa5, 0xf4, 0xee, 0xbe, 0xc7, 0x31, 0x95, 0xf0, 0xfa, 0x79, 0x57, 0x1b, 0x68, 0xa3, 0xc3, 0x61, 0x3b, 0x7b, 0x7c, 0xa6, 0x56, 0xb0, 0x90, 0x96, 0x43, 0xee, 0x06, 0xe9, 0x6d, 0x47, 0xb6, 0xe5, 0x90, 0xd7, 0x5e, 0x25, 0x6d, 0xa8, 0xf1, 0x9a, 0xc2, 0xd3, 0x32, 0xcf, 0x79, 0xe8, 0x82, 0x71, 0x20, 0x90, 0xf6, 0x0e, 0x99, 0x71, 0xad, 0x1d, 0x13, 0x52, 0x61, 0x3f, 0x39, 0x80, 0x3b, 0xc4, 0xa8, 0x70, 0xec, 0x71, 0xa7, 0xa5, 0xf9, 0x80, 0x12, 0xd4, 0x56, 0xe9, 0x98, 0x47, 0x37, 0xe0, 0x27, 0x7f, 0x23, 0x9f, 0xa3, 0x1d, 0x4a, 0x65, 0xde, 0x03, 0x18, 0xbf, 0xc5, 0xb6, 0x0a, 0x06, 0xd7, 0x06, 0xc1, 0x29, 0xdc, 0xf2, 0x55, 0xac, 0xd3, 0xc6, 0xeb, 0xf1, 0x2c, 0x86, 0x8a, 0xb7, 0x37, 0x8f, 0x2a, 0xe0, 0xdd, 0x7c, 0x0e }; static const uint8_t nist_186_2_ecdsa_testvector_5_private[] = { /* d */ 0x00, 0xca, 0x3e, 0x5b, 0x5d, 0x69, 0xcf, 0x02, 0x8c, 0x9f, 0xf1, 0x38, 0xb1, 0xee, 0x5c, 0x28, 0x60, 0x7a, 0x6b, 0xf9, 0x35, 0x2c, 0x64, 0x30 }; static const uint8_t nist_186_2_ecdsa_testvector_5_public_x[] = { /* Qx */ 0x48, 0x28, 0xad, 0x4a, 0xff, 0x5d, 0x87, 0xdc, 0xca, 0x98, 0xa3, 0x41, 0x34, 0x4a, 0x46, 0x2e, 0xdf, 0x27, 0x78, 0x50, 0x75, 0x5c, 0x72, 0x77 }; static const uint8_t nist_186_2_ecdsa_testvector_5_public_y[] = { /* Qy */ 0x8a, 0x1b, 0xfc, 0x6b, 0x7b, 0x04, 0x24, 0xe1, 0x54, 0x54, 0xac, 0x19, 0x8d, 0x4d, 0x69, 0x79, 0x27, 0xf4, 0xea, 0xaf, 0x9d, 0x14, 0xd8, 0x8e }; /* k = 00964e4a3eac4d2641c2a5c4badd301da54962410a459654 */ static const uint8_t nist_186_2_ecdsa_testvector_5_out[] = { /* R */ 0xc4, 0x38, 0xca, 0x66, 0xc5, 0xd3, 0xb1, 0x9e, 0x2b, 0xcd, 0x26, 0xa5, 0xc5, 0x47, 0x42, 0x43, 0x5f, 0x25, 0xee, 0x0e, 0x93, 0x64, 0xb4, 0x1c, /* S */ 0xff, 0x19, 0x44, 0x79, 0x69, 0x5a, 0xfd, 0xcc, 0x88, 0x64, 0x5f, 0x2a, 0x30, 0x9c, 0xb9, 0x97, 0x17, 0xbe, 0xac, 0x26, 0x79, 0x4c, 0x06, 0x58 }; static const uint8_t nist_186_2_ecdsa_testvector_6_ptx[] = { /* Msg */ 0x63, 0x7a, 0xc6, 0x1c, 0x9a, 0x10, 0x8a, 0x77, 0xd1, 0xd3, 0x4f, 0x42, 0x67, 0x6f, 0x9d, 0x31, 0x4b, 0xed, 0xeb, 0x32, 0xc9, 0x34, 0x12, 0x08, 0xa3, 0xcf, 0x02, 0x35, 0x64, 0xf0, 0xb4, 0x1e, 0xf1, 0xb5, 0x60, 0x6a, 0x61, 0xab, 0xef, 0xab, 0x0e, 0x91, 0xb3, 0x40, 0xec, 0x5e, 0x56, 0x7a, 0x1a, 0x85, 0x10, 0xfd, 0xb7, 0x77, 0x1d, 0x69, 0xf7, 0x69, 0x6f, 0x3a, 0x76, 0x58, 0xa0, 0xed, 0xcc, 0x4b, 0x2a, 0x65, 0x61, 0xd9, 0xda, 0x8c, 0x83, 0xea, 0x82, 0x3d, 0xb5, 0xc2, 0xef, 0x62, 0x4a, 0x3b, 0x1a, 0x59, 0x33, 0x51, 0xa2, 0x9d, 0x16, 0xe4, 0x7a, 0xa2, 0xa0, 0xba, 0xdf, 0x00, 0x1b, 0xc4, 0x8e, 0xd4, 0x43, 0xa2, 0x33, 0x63, 0x55, 0x68, 0x24, 0x01, 0x6a, 0xa3, 0x4f, 0x32, 0x03, 0x97, 0x72, 0x0e, 0xe5, 0xcb, 0x8a, 0xea, 0x27, 0xc8, 0x8d, 0x34, 0x89, 0x1d, 0x5b, 0x9f }; static const uint8_t nist_186_2_ecdsa_testvector_6_private[] = { /* d */ 0x00, 0x55, 0xac, 0xe6, 0x7d, 0xf2, 0xb1, 0x7f, 0x6e, 0x9e, 0x1b, 0x89, 0x28, 0xac, 0x85, 0x6c, 0xe8, 0xd7, 0x5f, 0x6b, 0xba, 0xaa, 0xed, 0x83 }; static const uint8_t nist_186_2_ecdsa_testvector_6_public_x[] = { /* Qx */ 0x2f, 0x5d, 0x05, 0xcb, 0xd6, 0x20, 0x14, 0x5b, 0x41, 0xd0, 0xa1, 0xc6, 0x56, 0xd6, 0x76, 0xea, 0xd2, 0xfc, 0x65, 0x1b, 0x3c, 0xf7, 0x1c, 0xc2 }; static const uint8_t nist_186_2_ecdsa_testvector_6_public_y[] = { /* Qy */ 0x88, 0xd2, 0x38, 0x6c, 0xfb, 0x81, 0x2d, 0x02, 0xa1, 0xfa, 0x19, 0x57, 0x8a, 0x7c, 0xd0, 0x4b, 0x35, 0x69, 0x20, 0xa2, 0xb2, 0xe6, 0x98, 0x39 }; /* k = 006ed729e5c2ec9bac7ddfbfe04ea9444c2c77f71455f623 */ static const uint8_t nist_186_2_ecdsa_testvector_6_out[] = { /* R */ 0xcd, 0xe9, 0x5d, 0x12, 0xd6, 0x50, 0x10, 0x2c, 0x53, 0x5f, 0xdc, 0x19, 0x94, 0xfc, 0x46, 0x83, 0x08, 0xb0, 0x5e, 0x2a, 0xf7, 0xaf, 0x9c, 0x14, /* S */ 0xc2, 0x60, 0x6a, 0x54, 0xe7, 0x59, 0x22, 0x14, 0xa2, 0x65, 0x27, 0x09, 0x18, 0x32, 0x2a, 0xe3, 0x3d, 0x48, 0x72, 0x68, 0xb9, 0x10, 0x8c, 0xae }; static const uint8_t nist_186_2_ecdsa_testvector_7_ptx[] = { /* Msg */ 0xd1, 0x54, 0x75, 0x48, 0x99, 0xfc, 0xbf, 0xe2, 0xa4, 0x8e, 0x2c, 0x70, 0xbc, 0x40, 0x6c, 0xf2, 0xb1, 0x30, 0x70, 0xa5, 0x9d, 0x9e, 0xce, 0xd4, 0x6c, 0x58, 0x68, 0xf1, 0x9c, 0x75, 0x49, 0xe4, 0x42, 0x46, 0xcf, 0xa3, 0x4e, 0x8a, 0x0f, 0x03, 0x0f, 0xe1, 0x75, 0xce, 0xfa, 0x84, 0xab, 0x15, 0xa7, 0x32, 0xbc, 0xc7, 0x1c, 0x6e, 0x7a, 0x83, 0x4e, 0xe7, 0x1d, 0xab, 0xe5, 0x38, 0x2c, 0xba, 0x40, 0xd1, 0xa1, 0xd7, 0xb9, 0x35, 0x48, 0xaa, 0x2a, 0x67, 0x68, 0x6e, 0xb0, 0x9e, 0xa5, 0x47, 0xae, 0x40, 0x25, 0xd6, 0x15, 0x0e, 0xf2, 0x0b, 0xe3, 0x9c, 0x9f, 0x3b, 0xea, 0x05, 0x2f, 0x73, 0xd3, 0xdc, 0x32, 0x0b, 0x62, 0x66, 0x31, 0x7e, 0xfc, 0x06, 0x4c, 0x79, 0x66, 0xf8, 0x22, 0x31, 0xcf, 0x42, 0xf1, 0xfa, 0x11, 0xe8, 0xfe, 0x16, 0x34, 0x60, 0x38, 0xca, 0x33, 0x45, 0x18, 0xb7 }; static const uint8_t nist_186_2_ecdsa_testvector_7_private[] = { /* d */ 0x00, 0xd1, 0x85, 0xd5, 0x1f, 0x87, 0x7d, 0x3f, 0xcc, 0x65, 0x7d, 0x18, 0xf3, 0x0c, 0xd1, 0x45, 0x70, 0x02, 0x2d, 0x07, 0x26, 0xc0, 0xb1, 0x88 }; static const uint8_t nist_186_2_ecdsa_testvector_7_public_x[] = { /* Qx */ 0x47, 0xe8, 0xec, 0x5e, 0x1e, 0xdb, 0x1d, 0x23, 0xc0, 0x4e, 0xbf, 0xee, 0xfd, 0x8c, 0xb8, 0xbf, 0x39, 0xcd, 0x48, 0xc3, 0x48, 0xde, 0x3e, 0xa7 }; static const uint8_t nist_186_2_ecdsa_testvector_7_public_y[] = { /* Qy */ 0xb1, 0x16, 0x7b, 0x3a, 0x4e, 0x2f, 0xbe, 0x16, 0x7b, 0xbd, 0x7b, 0x7b, 0x06, 0xbf, 0x13, 0x14, 0xd5, 0x8d, 0x9e, 0x39, 0x76, 0xff, 0xa4, 0x7f }; /* k = 00124c96b0dd589501ba7d5ddfe9c412cf574be10198899b */ static const uint8_t nist_186_2_ecdsa_testvector_7_out[] = { /* R */ 0x53, 0x9e, 0x28, 0x53, 0x89, 0x39, 0x9c, 0x78, 0x5d, 0xfc, 0x4f, 0x3b, 0xfc, 0xcb, 0xc8, 0x25, 0x60, 0x2f, 0x44, 0x3a, 0xe0, 0xdc, 0xa3, 0xd1, /* S */ 0xed, 0x56, 0xe5, 0x4f, 0xba, 0xa0, 0xb7, 0xc0, 0xbc, 0x46, 0x29, 0x20, 0x31, 0x40, 0x31, 0xc7, 0xa3, 0xe7, 0xb2, 0xeb, 0x70, 0x1c, 0xb9, 0xdb }; static const uint8_t nist_186_2_ecdsa_testvector_8_ptx[] = { /* Msg */ 0x26, 0x4b, 0xe3, 0x73, 0x69, 0x84, 0x6f, 0x67, 0x01, 0x9f, 0xb3, 0x1f, 0x94, 0xfc, 0x9e, 0x9a, 0xb0, 0x3c, 0x5c, 0x24, 0x05, 0xa6, 0x2a, 0xd8, 0xd1, 0xc9, 0x68, 0x64, 0x9b, 0x63, 0xef, 0x0c, 0x24, 0x82, 0xa6, 0xf2, 0x9b, 0xe9, 0x50, 0x94, 0x10, 0xb5, 0xa8, 0x96, 0x2b, 0x41, 0xb0, 0xc2, 0x1e, 0x46, 0x46, 0x4d, 0xd8, 0x47, 0xf8, 0x5b, 0x7b, 0x2c, 0x19, 0xc6, 0x11, 0x2d, 0x14, 0x1b, 0x7b, 0xf1, 0x01, 0xe6, 0xa9, 0xf7, 0x76, 0x30, 0x11, 0x36, 0xa0, 0x45, 0x59, 0x00, 0x92, 0xbb, 0x57, 0x2c, 0xdc, 0xaf, 0x3c, 0x74, 0x60, 0x52, 0x0c, 0x1c, 0x61, 0xa5, 0x52, 0xd5, 0xdd, 0x80, 0x11, 0xe0, 0x1d, 0xd9, 0xfd, 0x76, 0x8a, 0x43, 0xeb, 0x68, 0xc2, 0xb5, 0x87, 0x03, 0xeb, 0x8d, 0x45, 0x36, 0x48, 0xd4, 0x9a, 0xf7, 0x09, 0xc4, 0x6b, 0xe2, 0x68, 0x87, 0xc6, 0x23, 0xf1, 0x42 }; static const uint8_t nist_186_2_ecdsa_testvector_8_private[] = { /* d */ 0x00, 0x7d, 0x6f, 0xa0, 0xb3, 0xda, 0xca, 0xf0, 0x22, 0x43, 0x67, 0x77, 0xac, 0x53, 0xc4, 0x43, 0x7c, 0x95, 0x79, 0x47, 0xc9, 0x11, 0xfa, 0xab }; static const uint8_t nist_186_2_ecdsa_testvector_8_public_x[] = { /* Qx */ 0xa4, 0xdb, 0x13, 0x03, 0xbf, 0x13, 0x69, 0x6e, 0x26, 0x67, 0x82, 0x86, 0xe2, 0x7c, 0x16, 0x6d, 0xd8, 0x7b, 0xe9, 0x8c, 0xc8, 0xbe, 0x28, 0x44 }; static const uint8_t nist_186_2_ecdsa_testvector_8_public_y[] = { /* Qy */ 0x09, 0xb4, 0xde, 0x84, 0xbb, 0xfa, 0x77, 0xe0, 0x49, 0xac, 0xe2, 0x72, 0xa1, 0x2d, 0x0d, 0xd1, 0x41, 0xd3, 0x63, 0xe7, 0x4e, 0xc1, 0x25, 0x11 }; /* k = 00620f584b08d3199f6841fefa4b920659b267271c9b4034 */ static const uint8_t nist_186_2_ecdsa_testvector_8_out[] = { /* R */ 0x68, 0x18, 0xd4, 0x4a, 0xea, 0x42, 0x17, 0x01, 0xe3, 0xf4, 0x16, 0x00, 0xc8, 0x67, 0xfb, 0x3d, 0x37, 0x49, 0xea, 0xdb, 0xf3, 0x38, 0x20, 0xfa, /* S */ 0x65, 0x8b, 0x22, 0x8b, 0x2e, 0xdd, 0x85, 0x69, 0xf6, 0x94, 0x0f, 0xee, 0x1c, 0x30, 0x36, 0x26, 0xe4, 0x81, 0x81, 0x09, 0x45, 0x81, 0x98, 0x7b }; static const uint8_t nist_186_2_ecdsa_testvector_9_ptx[] = { /* Msg */ 0x66, 0xe6, 0x9d, 0xc2, 0xa4, 0x7b, 0x31, 0x51, 0x5a, 0x71, 0x45, 0x6e, 0x32, 0x9c, 0xf0, 0x2b, 0x08, 0x33, 0x1b, 0x15, 0x43, 0xd5, 0x7e, 0x5c, 0x66, 0xc9, 0xcb, 0x34, 0xe2, 0x8a, 0x28, 0x7a, 0x2f, 0x83, 0xe3, 0x9b, 0x1a, 0x17, 0x61, 0xb2, 0x61, 0xe4, 0x58, 0xf0, 0x7d, 0x49, 0x3e, 0x41, 0xbf, 0x25, 0x02, 0x2c, 0x9e, 0xe2, 0xf9, 0xfb, 0x50, 0xb3, 0x1b, 0x1d, 0x97, 0x19, 0x6f, 0xc8, 0xde, 0xac, 0xc4, 0xe3, 0x84, 0x18, 0xa2, 0x22, 0x78, 0x66, 0x80, 0x73, 0x06, 0x7d, 0x37, 0x99, 0xf0, 0xe8, 0xb7, 0x16, 0xc1, 0xd9, 0xf9, 0x4f, 0x5e, 0x6e, 0x35, 0xeb, 0xde, 0x34, 0x54, 0x7c, 0x9b, 0xea, 0xa8, 0x61, 0x89, 0x87, 0xdb, 0xeb, 0xc7, 0x7e, 0x25, 0xbe, 0x74, 0x40, 0xc2, 0x7a, 0xc4, 0x02, 0xa4, 0x9b, 0x53, 0xc1, 0x65, 0x9e, 0xb9, 0x84, 0x7f, 0x66, 0x5e, 0xe2, 0xbf, 0xdd }; static const uint8_t nist_186_2_ecdsa_testvector_9_private[] = { /* d */ 0x00, 0xb5, 0xbf, 0xd0, 0x9a, 0x8d, 0x17, 0x75, 0x13, 0xc4, 0xbd, 0x7d, 0x1b, 0xd9, 0xac, 0x5c, 0xcb, 0x7c, 0x00, 0xc6, 0x3b, 0x98, 0x41, 0xb4 }; static const uint8_t nist_186_2_ecdsa_testvector_9_public_x[] = { /* Qx */ 0x27, 0x0d, 0x7b, 0xb9, 0xbf, 0xab, 0x54, 0x52, 0x92, 0x40, 0x42, 0x6a, 0x08, 0x50, 0x8f, 0x1e, 0xd9, 0x0d, 0xc7, 0x91, 0x4c, 0xdf, 0x11, 0xf3 }; static const uint8_t nist_186_2_ecdsa_testvector_9_public_y[] = { /* Qy */ 0xc9, 0x1e, 0xd7, 0xf2, 0xec, 0xa3, 0x9f, 0x56, 0x37, 0x57, 0xc5, 0xb5, 0x18, 0xd9, 0xc2, 0x8d, 0x4d, 0x41, 0xe7, 0xbd, 0xc0, 0xc7, 0xf5, 0x3e }; /* k = 00dbc3fbf7b320e9bb6bae128ae19f2c67b297ceb9bc697f */ static const uint8_t nist_186_2_ecdsa_testvector_9_out[] = { /* R */ 0xdb, 0x20, 0xf0, 0x9b, 0x69, 0xac, 0x79, 0xe2, 0x24, 0x25, 0x88, 0x00, 0xeb, 0xe6, 0xcc, 0x51, 0xa2, 0xe1, 0x25, 0x36, 0xb6, 0x93, 0x96, 0xc8, /* S */ 0xd3, 0x1d, 0xf9, 0x54, 0x42, 0x77, 0xf4, 0xa7, 0x96, 0x76, 0xfd, 0xc7, 0xa5, 0x1f, 0xae, 0xf7, 0x3e, 0xe2, 0xa0, 0xd1, 0x05, 0x7f, 0xf3, 0xa2 }; static const uint8_t nist_186_2_ecdsa_testvector_10_ptx[] = { /* Msg */ 0xed, 0x3f, 0x4b, 0x0c, 0x4b, 0x79, 0xdd, 0xd5, 0xb0, 0x48, 0xb7, 0xb9, 0xf3, 0xf6, 0x87, 0xfb, 0x57, 0x8a, 0xca, 0x75, 0x60, 0x49, 0x3f, 0x3a, 0xe5, 0x7e, 0x9b, 0x7b, 0x65, 0x77, 0x7e, 0xa7, 0x9f, 0xd0, 0xa6, 0xd6, 0x5c, 0xf4, 0x63, 0x68, 0x90, 0xe0, 0x4a, 0xe9, 0xa1, 0x2a, 0x2e, 0x38, 0x07, 0x42, 0x4c, 0xe9, 0x15, 0xf9, 0xc6, 0xe7, 0x16, 0x3f, 0x53, 0x5e, 0x9c, 0x31, 0x34, 0xd8, 0x15, 0x53, 0x6a, 0xa6, 0x9f, 0x19, 0x26, 0x81, 0x1e, 0xad, 0x81, 0x71, 0x8b, 0xec, 0x6d, 0xee, 0x8f, 0xb1, 0xeb, 0x45, 0x50, 0x57, 0x7f, 0x3e, 0x8b, 0x79, 0xe1, 0xfc, 0xe3, 0xfc, 0xf6, 0x24, 0x78, 0x50, 0xfe, 0x42, 0xbc, 0xf2, 0x0f, 0x68, 0x82, 0x36, 0xc2, 0x18, 0x58, 0x43, 0x2c, 0x63, 0x17, 0x5f, 0x10, 0x53, 0xb8, 0x6d, 0x52, 0x87, 0x69, 0xb3, 0xaf, 0x1d, 0xe0, 0xe1, 0xac, 0xd5 }; static const uint8_t nist_186_2_ecdsa_testvector_10_private[] = { /* d */ 0x00, 0x95, 0x8e, 0x4b, 0xbb, 0xdd, 0x87, 0x09, 0xa7, 0x84, 0x41, 0x48, 0x5d, 0x6f, 0x57, 0xde, 0xe9, 0x6c, 0xc4, 0xd9, 0x8c, 0x38, 0xad, 0x4f }; static const uint8_t nist_186_2_ecdsa_testvector_10_public_x[] = { /* Qx */ 0x6a, 0x57, 0x23, 0xe7, 0x2f, 0x62, 0x70, 0x16, 0x0f, 0x25, 0x6d, 0xdd, 0x40, 0x3c, 0x10, 0x85, 0x03, 0x38, 0x8d, 0x43, 0x20, 0xf7, 0x92, 0x6c }; static const uint8_t nist_186_2_ecdsa_testvector_10_public_y[] = { /* Qy */ 0xf5, 0x2b, 0x0e, 0x0e, 0x4c, 0x88, 0x71, 0x44, 0x3c, 0xfc, 0x0c, 0x23, 0x1e, 0x85, 0x6f, 0x6a, 0xdc, 0x2a, 0x7c, 0x33, 0x18, 0xa4, 0x35, 0x78 }; /* k = 0045f392d1910760550b34e64d578905c20fb1cc51b29eef */ static const uint8_t nist_186_2_ecdsa_testvector_10_out[] = { /* R */ 0x65, 0x05, 0x66, 0x3a, 0x95, 0x2b, 0x74, 0x1c, 0x45, 0x83, 0xe7, 0x55, 0x49, 0x67, 0x40, 0x83, 0x3d, 0x59, 0x01, 0xfc, 0x09, 0x43, 0x39, 0x63, /* S */ 0xde, 0x04, 0x11, 0x97, 0x2e, 0x27, 0xbf, 0xb8, 0x03, 0x62, 0xb4, 0x46, 0x50, 0xe6, 0x87, 0x86, 0x6c, 0xd2, 0x02, 0xa4, 0x19, 0x9d, 0x60, 0x5c }; static const uint8_t nist_186_2_ecdsa_testvector_11_ptx[] = { /* Msg */ 0x6a, 0x8b, 0x59, 0x50, 0x76, 0x51, 0x88, 0x80, 0xf0, 0x08, 0x38, 0x2e, 0xed, 0x3e, 0x51, 0xf2, 0xb3, 0xf0, 0x6c, 0x4f, 0xce, 0x4c, 0x8c, 0x92, 0x61, 0xbb, 0x08, 0xfd, 0xbb, 0x1f, 0xcc, 0x25, 0x2a, 0x59, 0xc2, 0x99, 0x14, 0x0f, 0x8a, 0xc4, 0x43, 0xac, 0x71, 0x15, 0x81, 0xa8, 0xa1, 0x5d, 0x65, 0x09, 0x95, 0x78, 0x6c, 0x2a, 0xd0, 0x2f, 0x4b, 0xbb, 0xcf, 0x5d, 0x84, 0x09, 0x3c, 0x51, 0x38, 0x7f, 0x64, 0x74, 0x3c, 0x6d, 0xeb, 0x2b, 0x6f, 0x09, 0xbe, 0xff, 0x4a, 0xb4, 0x4a, 0xfc, 0xb8, 0x7e, 0xec, 0x56, 0x28, 0xeb, 0xa8, 0x53, 0xe1, 0xf8, 0x1d, 0x64, 0x96, 0x59, 0xb8, 0x95, 0x3b, 0x05, 0x29, 0x28, 0x17, 0xf4, 0x13, 0x7d, 0x19, 0x27, 0x08, 0x36, 0x6f, 0xea, 0xb4, 0x98, 0x55, 0x56, 0x58, 0x33, 0x2b, 0x19, 0x7b, 0xc5, 0xcb, 0x7a, 0xdc, 0x5c, 0x19, 0x97, 0xaa, 0xbb }; static const uint8_t nist_186_2_ecdsa_testvector_11_private[] = { /* d */ 0x00, 0x49, 0x60, 0x53, 0x3b, 0x78, 0x8b, 0x3f, 0xad, 0x01, 0x7e, 0x61, 0x0f, 0x5d, 0xda, 0xb7, 0x50, 0xb4, 0xbf, 0x5a, 0x5e, 0x9d, 0x09, 0x64 }; static const uint8_t nist_186_2_ecdsa_testvector_11_public_x[] = { /* Qx */ 0x1c, 0x0e, 0x4f, 0xc6, 0xd8, 0xf4, 0xe7, 0x60, 0x5f, 0x2b, 0xf5, 0x75, 0x41, 0x39, 0x5f, 0x51, 0x67, 0xd4, 0x1d, 0x8b, 0xdd, 0x5c, 0x4f, 0x80 }; static const uint8_t nist_186_2_ecdsa_testvector_11_public_y[] = { /* Qy */ 0x77, 0x5d, 0xa7, 0x32, 0x26, 0x02, 0x0b, 0xad, 0x6e, 0xc4, 0xdf, 0x50, 0x22, 0xa8, 0xc6, 0x1a, 0xee, 0x06, 0x43, 0x72, 0xba, 0x53, 0x5a, 0xe7 }; /* k = 00e93a10b115218fcb2f0413784385e1fc4555b1818f3b3c */ static const uint8_t nist_186_2_ecdsa_testvector_11_out[] = { /* R */ 0xbc, 0x54, 0x0a, 0x8f, 0x5e, 0xa8, 0x1c, 0x61, 0x44, 0x69, 0x8f, 0x54, 0x52, 0x55, 0x6f, 0x17, 0xda, 0x76, 0xa5, 0x26, 0x36, 0x46, 0x1d, 0x70, /* S */ 0x2d, 0xe2, 0x3f, 0x6c, 0xc9, 0xa4, 0x58, 0x99, 0xa9, 0xf6, 0x05, 0xda, 0xb9, 0xf2, 0x8f, 0xdd, 0xf9, 0xe3, 0x76, 0xea, 0x06, 0xc9, 0x2d, 0xb5 }; static const uint8_t nist_186_2_ecdsa_testvector_12_ptx[] = { /* Msg */ 0xef, 0xd5, 0xd8, 0x20, 0x00, 0x24, 0x9e, 0xf1, 0x68, 0xa0, 0x4b, 0xc3, 0x9f, 0x32, 0x35, 0x6b, 0xba, 0xe8, 0x3e, 0x0b, 0xe1, 0x9a, 0xf1, 0xda, 0x03, 0xcd, 0xce, 0x23, 0xc8, 0xd7, 0xe1, 0x91, 0xc8, 0x44, 0x9a, 0xa9, 0xfa, 0x79, 0xd8, 0x98, 0x6f, 0x97, 0x47, 0x2f, 0x40, 0xa2, 0xec, 0x2c, 0xc5, 0xe3, 0xfe, 0xbb, 0x07, 0x8a, 0xf8, 0x3c, 0x78, 0x98, 0xec, 0x47, 0xe2, 0xfc, 0x1a, 0xed, 0x9e, 0xfc, 0xc1, 0x41, 0x06, 0xd7, 0x35, 0x18, 0x2c, 0xa9, 0x32, 0x0c, 0xcd, 0x8e, 0x70, 0xc7, 0x80, 0x0a, 0x77, 0x7e, 0x33, 0xa9, 0xb5, 0xbb, 0xd8, 0xe2, 0xce, 0x60, 0x5c, 0x41, 0x33, 0xe9, 0xd9, 0xc6, 0xf6, 0xf1, 0x0c, 0x88, 0xdd, 0xf7, 0x09, 0x9d, 0xb5, 0x63, 0x2d, 0x3e, 0xe8, 0xc4, 0x55, 0x27, 0x52, 0x5c, 0x4d, 0x3d, 0x51, 0xde, 0x8c, 0x73, 0x1b, 0x76, 0x1e, 0xee, 0x55, 0x0a }; static const uint8_t nist_186_2_ecdsa_testvector_12_private[] = { /* d */ 0x00, 0xcf, 0x08, 0xdf, 0x71, 0xe8, 0x34, 0x3a, 0xf5, 0x5f, 0xc2, 0x0c, 0xa9, 0xd6, 0xae, 0x82, 0x2f, 0x9b, 0xbd, 0xf5, 0xab, 0x7d, 0x21, 0x13 }; static const uint8_t nist_186_2_ecdsa_testvector_12_public_x[] = { /* Qx */ 0x19, 0x4e, 0x8f, 0xdd, 0x4b, 0x6b, 0x84, 0xf1, 0x95, 0x5d, 0x19, 0x19, 0x38, 0x7f, 0x96, 0xfa, 0xcf, 0x6f, 0xea, 0xdd, 0x81, 0x05, 0xd8, 0xdd }; static const uint8_t nist_186_2_ecdsa_testvector_12_public_y[] = { /* Qy */ 0x2e, 0xb4, 0x7a, 0x2e, 0xd3, 0xaa, 0xc4, 0x25, 0x0b, 0xe3, 0x7f, 0x9e, 0x31, 0xd7, 0xff, 0x87, 0xbe, 0x40, 0x43, 0xac, 0x1e, 0xac, 0x40, 0x1f }; /* k = 009758de92827113c0d1ece5ad9ab65d9acf18f74b58ecf6 */ static const uint8_t nist_186_2_ecdsa_testvector_12_out[] = { /* R */ 0x0b, 0xbd, 0x33, 0x1b, 0x5c, 0xbc, 0xae, 0xf2, 0xb2, 0x6e, 0x27, 0xbd, 0xc5, 0x59, 0xd3, 0x1c, 0x62, 0xd5, 0xc9, 0xb6, 0xb8, 0x97, 0x96, 0x03, /* S */ 0xc1, 0x67, 0x0a, 0x3b, 0x43, 0x58, 0x05, 0xfa, 0x7a, 0xb2, 0x0e, 0x6d, 0xd8, 0xff, 0xa1, 0x01, 0x2e, 0x9f, 0xb4, 0x1b, 0x1d, 0x7d, 0x01, 0x76 }; static const uint8_t nist_186_2_ecdsa_testvector_13_ptx[] = { /* Msg */ 0xf9, 0xe2, 0x39, 0x34, 0xaf, 0xaa, 0x64, 0x63, 0x4c, 0x91, 0xb5, 0xa1, 0x48, 0xc1, 0xfd, 0x85, 0xa9, 0xb5, 0x18, 0x8c, 0xca, 0xf0, 0xcf, 0x6b, 0x5b, 0xef, 0xfd, 0xa4, 0xa9, 0x5c, 0xf1, 0x58, 0x1f, 0x84, 0x14, 0x5c, 0x0d, 0x0b, 0xcb, 0x8f, 0xa9, 0xde, 0x9f, 0x6a, 0x54, 0x6a, 0x9c, 0xd8, 0x1e, 0x0c, 0xf6, 0x48, 0x8b, 0xc8, 0xf3, 0x01, 0x98, 0x3d, 0x04, 0xb6, 0xf9, 0xd8, 0x35, 0x5b, 0xa5, 0x49, 0xc8, 0x37, 0x94, 0x33, 0x1d, 0x39, 0xc7, 0x28, 0xd6, 0x8f, 0x8a, 0xd4, 0x38, 0x75, 0xf6, 0x78, 0xd3, 0x4b, 0xb9, 0x9b, 0x65, 0xeb, 0x1a, 0xfc, 0xfc, 0x39, 0x37, 0xca, 0x5b, 0xfc, 0x91, 0x17, 0x9f, 0xec, 0xcb, 0x8b, 0x22, 0x0b, 0xaf, 0x55, 0xa0, 0x39, 0x72, 0x67, 0x98, 0x03, 0x39, 0xe3, 0xf5, 0xbd, 0xdb, 0xd0, 0xee, 0xd0, 0xe9, 0x12, 0x2b, 0x54, 0xec, 0x99, 0x29, 0xe2 }; static const uint8_t nist_186_2_ecdsa_testvector_13_private[] = { /* d */ 0x00, 0x27, 0x49, 0x2b, 0xdd, 0x57, 0x3a, 0x53, 0xba, 0xaf, 0xd1, 0x57, 0x55, 0x78, 0xfd, 0xce, 0x24, 0x2e, 0x43, 0xf2, 0xe3, 0x53, 0x7a, 0x0b }; static const uint8_t nist_186_2_ecdsa_testvector_13_public_x[] = { /* Qx */ 0x18, 0xb9, 0x4f, 0xc7, 0x82, 0x5b, 0xad, 0x91, 0xb1, 0xca, 0x5a, 0x69, 0xcd, 0xf5, 0x76, 0x37, 0x7a, 0xd7, 0x69, 0x65, 0x67, 0x0d, 0x39, 0x67 }; static const uint8_t nist_186_2_ecdsa_testvector_13_public_y[] = { /* Qy */ 0x0a, 0x73, 0x25, 0x3d, 0x6d, 0xf5, 0x4d, 0x51, 0x05, 0xf0, 0xca, 0x2f, 0x94, 0x8d, 0x06, 0x86, 0x70, 0x6d, 0xbd, 0x06, 0x47, 0x44, 0xf7, 0xc3 }; /* k = 00d8966cd03fdb2509193ddeee3b429cab2605e283c98577 */ static const uint8_t nist_186_2_ecdsa_testvector_13_out[] = { /* R */ 0x1a, 0x81, 0x3b, 0x60, 0x7c, 0x0b, 0x4d, 0x71, 0xe7, 0xac, 0xda, 0xc0, 0x40, 0xeb, 0x78, 0xb3, 0x79, 0x5e, 0x53, 0xbc, 0x49, 0x8b, 0xae, 0x85, /* S */ 0x67, 0xfc, 0x11, 0x24, 0xc3, 0x09, 0x66, 0x47, 0x3d, 0xc6, 0xa1, 0xf1, 0x4a, 0xe3, 0x2e, 0xc2, 0xdd, 0x86, 0x0b, 0x36, 0x67, 0xc6, 0x1d, 0xec }; static const uint8_t nist_186_2_ecdsa_testvector_14_ptx[] = { /* Msg */ 0xaa, 0x00, 0x90, 0x57, 0x0f, 0x6f, 0xa8, 0x1e, 0xd0, 0x2f, 0xa1, 0xce, 0x2c, 0x12, 0x4f, 0xfd, 0x35, 0x74, 0xf2, 0xf8, 0xd4, 0x28, 0x5e, 0x57, 0x0e, 0xb3, 0x59, 0xd5, 0x85, 0xb8, 0x45, 0x5f, 0x42, 0xb4, 0xff, 0x6b, 0xb1, 0xec, 0x06, 0x8b, 0xed, 0xa3, 0xe0, 0x42, 0x3e, 0x8f, 0xb9, 0x16, 0xe1, 0x8e, 0x4e, 0xe6, 0x07, 0x96, 0x09, 0x7e, 0x1f, 0xea, 0x6d, 0x69, 0x58, 0x94, 0xb5, 0x06, 0x62, 0x0f, 0xb8, 0xdf, 0x75, 0x44, 0x10, 0x35, 0x95, 0xb8, 0x7b, 0xe0, 0x14, 0x03, 0x81, 0x56, 0x58, 0x84, 0x58, 0x09, 0xdf, 0x53, 0x04, 0xf6, 0x7f, 0x77, 0xc2, 0x7a, 0xf3, 0x59, 0xa7, 0x68, 0x93, 0x79, 0x85, 0x5a, 0x63, 0x60, 0x0e, 0x44, 0x4f, 0xd6, 0x3c, 0x4f, 0xb5, 0x54, 0xf0, 0xe4, 0x24, 0xbc, 0xd9, 0x06, 0x64, 0x48, 0x97, 0xe6, 0xb6, 0xc0, 0x20, 0xb1, 0x5c, 0xf1, 0x63, 0xad }; static const uint8_t nist_186_2_ecdsa_testvector_14_private[] = { /* d */ 0x00, 0x06, 0x6e, 0xb1, 0xa5, 0xe6, 0xa4, 0x2b, 0x53, 0xfc, 0xc8, 0x2f, 0xcf, 0x6a, 0x60, 0x1d, 0x02, 0x31, 0x27, 0xc7, 0xb1, 0xc7, 0x79, 0xdb }; static const uint8_t nist_186_2_ecdsa_testvector_14_public_x[] = { /* Qx */ 0x38, 0x88, 0xa9, 0x4e, 0xf2, 0x88, 0xeb, 0xe3, 0x2b, 0x4b, 0x9b, 0x53, 0xbf, 0x2d, 0x3a, 0x85, 0xb4, 0x59, 0x76, 0x58, 0x32, 0x51, 0xf0, 0xec }; static const uint8_t nist_186_2_ecdsa_testvector_14_public_y[] = { /* Qy */ 0x30, 0x15, 0x6d, 0x8e, 0x0d, 0x21, 0x2a, 0x66, 0xc0, 0x71, 0xfb, 0x2e, 0x7b, 0x42, 0x2e, 0xf1, 0x78, 0x4a, 0x95, 0xda, 0xcf, 0xfd, 0x9e, 0xdb }; /* k = 008c135723cb6a10cbd3e2cde313aee847477e66c4220f47 */ static const uint8_t nist_186_2_ecdsa_testvector_14_out[] = { /* R */ 0x37, 0x03, 0x31, 0x50, 0xaf, 0xed, 0x02, 0x9f, 0xd8, 0x39, 0x07, 0x16, 0xea, 0xc6, 0x50, 0x02, 0x23, 0xe7, 0x21, 0x54, 0xcc, 0xff, 0x9f, 0xee, /* S */ 0xb4, 0xe9, 0x78, 0xe8, 0xd4, 0x99, 0xcc, 0x1b, 0xe5, 0x76, 0xde, 0xa7, 0x4c, 0x0d, 0xd7, 0x4c, 0xaf, 0xe9, 0xe7, 0x94, 0xa7, 0x56, 0x31, 0x72 }; static const uint8_t nist_186_2_ecdsa_testvector_15_ptx[] = { /* Msg */ 0xa3, 0xbb, 0xba, 0xd7, 0x66, 0x71, 0xd8, 0xfd, 0xac, 0xbb, 0xee, 0x1f, 0x5a, 0xb2, 0x41, 0xbd, 0x01, 0x78, 0xff, 0x99, 0x6e, 0x76, 0x77, 0x18, 0x7c, 0xe8, 0x88, 0xea, 0x2d, 0x9c, 0x5a, 0xed, 0xf9, 0xf6, 0x4d, 0x4f, 0x66, 0x38, 0x2f, 0xf4, 0xd9, 0x00, 0xb2, 0x17, 0xac, 0x13, 0x1d, 0x33, 0x80, 0x58, 0x41, 0x24, 0xd5, 0x28, 0xaf, 0x89, 0xd8, 0xc5, 0x28, 0x6e, 0x7b, 0x27, 0x55, 0x28, 0xcb, 0xff, 0xb8, 0x7f, 0x7f, 0xf6, 0xe3, 0x13, 0xcc, 0x35, 0xe8, 0xf8, 0x81, 0x2b, 0x10, 0xa4, 0x4f, 0x8a, 0xd0, 0x0b, 0x68, 0x93, 0xf8, 0x08, 0x4d, 0x94, 0x2e, 0xff, 0xe0, 0xaf, 0x9b, 0xc1, 0xc1, 0xdc, 0xe4, 0xaf, 0xd7, 0x31, 0x5c, 0x23, 0x2d, 0x62, 0x78, 0x0b, 0x00, 0x84, 0x83, 0xd7, 0x16, 0x16, 0x92, 0x96, 0x51, 0x41, 0xbb, 0x5b, 0x83, 0x5f, 0x82, 0xe6, 0x84, 0xbb, 0x94, 0x80 }; static const uint8_t nist_186_2_ecdsa_testvector_15_private[] = { /* d */ 0x00, 0x6d, 0xfc, 0x40, 0x88, 0x0e, 0x0c, 0x42, 0xd2, 0xce, 0xbc, 0xde, 0xe2, 0x55, 0x04, 0x0d, 0x18, 0xbb, 0x99, 0x19, 0x09, 0x81, 0xf9, 0xa9 }; static const uint8_t nist_186_2_ecdsa_testvector_15_public_x[] = { /* Qx */ 0xb1, 0x19, 0x56, 0xa2, 0x9a, 0xf6, 0x98, 0x40, 0x43, 0x97, 0x3e, 0x2d, 0xe4, 0x6d, 0x53, 0xd8, 0x70, 0xe0, 0x46, 0x87, 0xca, 0xe5, 0x97, 0x28 }; static const uint8_t nist_186_2_ecdsa_testvector_15_public_y[] = { /* Qy */ 0xc9, 0x15, 0xf8, 0x8a, 0xa0, 0xfa, 0x98, 0x22, 0x76, 0x2c, 0xc4, 0xe6, 0x0d, 0xf7, 0x59, 0xd1, 0x89, 0xa1, 0x0c, 0x48, 0x6b, 0x90, 0x1d, 0x5e }; /* k = 009e03961f041fa811ff88c4948bc0a6d867a7fef5f39453 */ static const uint8_t nist_186_2_ecdsa_testvector_15_out[] = { /* R */ 0xc4, 0x59, 0xf7, 0xbc, 0xea, 0x05, 0x02, 0x10, 0xe3, 0x36, 0x9a, 0xc1, 0x74, 0xba, 0x89, 0xc8, 0x23, 0xca, 0x1b, 0x0d, 0x4c, 0x09, 0x64, 0xf6, /* S */ 0x04, 0x71, 0x5c, 0xba, 0x9b, 0xa3, 0x1c, 0x4e, 0xd9, 0xbf, 0x0b, 0xe0, 0x7d, 0x19, 0x4e, 0x2a, 0x70, 0x92, 0x94, 0x47, 0x2c, 0xc6, 0x0b, 0xdf }; /* [P-224] */ static const uint8_t nist_186_2_ecdsa_testvector_16_ptx[] = { /* Msg */ 0x66, 0xe9, 0x8a, 0x16, 0x58, 0x54, 0xcd, 0x07, 0x98, 0x9b, 0x1e, 0xe0, 0xec, 0x3f, 0x8d, 0xbe, 0x0e, 0xe3, 0xc2, 0xfb, 0x00, 0x51, 0xef, 0x53, 0xa0, 0xbe, 0x03, 0x45, 0x7c, 0x4f, 0x21, 0xbc, 0xe7, 0xdc, 0x50, 0xef, 0x4d, 0xf3, 0x74, 0x86, 0xc3, 0x20, 0x7d, 0xfe, 0xe2, 0x6b, 0xde, 0x4e, 0xd6, 0x23, 0x40, 0xcb, 0xb2, 0xda, 0x78, 0x49, 0x06, 0xb1, 0xb7, 0x83, 0xb4, 0xd6, 0x01, 0xbd, 0xff, 0x4a, 0xe1, 0xa7, 0xe5, 0xe8, 0x5a, 0x85, 0xaf, 0xa3, 0x20, 0x8d, 0xc6, 0x0f, 0x09, 0x90, 0xc8, 0x23, 0xbe, 0xdd, 0xdb, 0x3d, 0xb6, 0x63, 0x42, 0x66, 0x65, 0x15, 0x2e, 0xd7, 0xb0, 0x93, 0xd6, 0xbd, 0xa5, 0x06, 0xc9, 0x3a, 0x69, 0x4b, 0x83, 0xac, 0x71, 0x55, 0x3f, 0x31, 0xf5, 0xcc, 0x0d, 0x6b, 0xa2, 0xfa, 0x24, 0x80, 0x90, 0xe8, 0x79, 0x65, 0x73, 0xc4, 0x91, 0x5d, 0x15, 0x86 }; static const uint8_t nist_186_2_ecdsa_testvector_16_private[] = { /* d */ 0x00, 0x69, 0x75, 0xfe, 0xbc, 0x7b, 0x44, 0x2d, 0xab, 0x8f, 0xd2, 0x83, 0xec, 0x2e, 0x4b, 0xdd, 0x0e, 0x00, 0x09, 0x52, 0x5b, 0x1c, 0xe0, 0x71, 0xf9, 0xab, 0x59, 0x56 }; static const uint8_t nist_186_2_ecdsa_testvector_16_public_x[] = { /* Qx */ 0x56, 0xfb, 0x65, 0x38, 0xf1, 0x72, 0x3d, 0x2b, 0xef, 0x3c, 0x76, 0x41, 0x34, 0x32, 0x0b, 0x44, 0xba, 0x61, 0x5f, 0x66, 0x3d, 0xb8, 0x04, 0xe5, 0x40, 0x50, 0xb9, 0x5a }; static const uint8_t nist_186_2_ecdsa_testvector_16_public_y[] = { /* Qy */ 0x95, 0x14, 0xa4, 0x42, 0xeb, 0x66, 0xdb, 0xf2, 0xb4, 0x50, 0x74, 0x6f, 0x66, 0xd5, 0x41, 0x01, 0x87, 0x7a, 0x50, 0xd4, 0xbc, 0x29, 0x10, 0xc6, 0x1d, 0x00, 0x5a, 0xdd }; /* k = 00591cb4272ddd1546d3d67bd2707d47ca51fd2c81d04635ad71e8aa */ static const uint8_t nist_186_2_ecdsa_testvector_16_out[] = { /* R */ 0x96, 0x60, 0xbf, 0xff, 0xc1, 0x73, 0x43, 0x1d, 0x29, 0xf8, 0x3f, 0xa2, 0xaf, 0x0b, 0xa5, 0x81, 0x79, 0x1b, 0xe3, 0xf4, 0x36, 0x25, 0x31, 0x6f, 0x39, 0x5d, 0x27, 0xff, /* S */ 0x9e, 0x8c, 0x3b, 0x82, 0xbc, 0xa2, 0xa4, 0x46, 0x7c, 0x96, 0x94, 0xc6, 0x66, 0xdf, 0xf7, 0xf0, 0xe7, 0x9d, 0x27, 0x9b, 0xd6, 0x4e, 0xb8, 0x3b, 0xce, 0x2e, 0x30, 0x18 }; static const uint8_t nist_186_2_ecdsa_testvector_17_ptx[] = { /* Msg */ 0xd3, 0x9a, 0xd5, 0x61, 0x35, 0xbe, 0xc4, 0xc3, 0xc4, 0x36, 0x2d, 0x59, 0xd3, 0xd9, 0x17, 0x5a, 0xcb, 0x38, 0x66, 0x70, 0xc5, 0xdb, 0x0a, 0x17, 0x57, 0xce, 0x76, 0x46, 0xad, 0x5d, 0x53, 0x52, 0xdc, 0x1b, 0x76, 0x0f, 0x74, 0x29, 0x10, 0x38, 0x54, 0xb4, 0x25, 0x11, 0xc3, 0xc0, 0x40, 0x4a, 0xbc, 0x24, 0x64, 0x27, 0x88, 0xd6, 0x45, 0xde, 0x93, 0x69, 0xb8, 0x41, 0x78, 0xd4, 0x69, 0x9c, 0x5e, 0x75, 0xcc, 0xe1, 0x87, 0x56, 0x56, 0x02, 0x26, 0xae, 0xec, 0x9f, 0x71, 0xab, 0x9c, 0xe1, 0xf8, 0x6e, 0x8b, 0xa6, 0x35, 0x58, 0x2e, 0xde, 0x64, 0x84, 0xbd, 0x34, 0x95, 0x94, 0xe5, 0xf2, 0xff, 0xb1, 0xbe, 0x1e, 0x97, 0xcd, 0xfc, 0xe9, 0xe1, 0x2b, 0x69, 0x4b, 0x06, 0x22, 0x93, 0xe7, 0x28, 0x1e, 0xc1, 0x34, 0xf2, 0xe7, 0x2c, 0xde, 0x73, 0x26, 0x6c, 0x6a, 0x2c, 0x25, 0x31, 0x1a }; static const uint8_t nist_186_2_ecdsa_testvector_17_private[] = { /* d */ 0x00, 0xfd, 0x12, 0x10, 0xef, 0x46, 0x85, 0xba, 0x8e, 0x31, 0xa3, 0xe0, 0xd6, 0x6e, 0x03, 0xf9, 0x12, 0x64, 0xa2, 0xa5, 0xb8, 0x89, 0x7a, 0x1d, 0xc1, 0x81, 0xb3, 0x53 }; static const uint8_t nist_186_2_ecdsa_testvector_17_public_x[] = { /* Qx */ 0x39, 0x1d, 0xe8, 0x05, 0x90, 0xdf, 0xbc, 0x60, 0xbb, 0x41, 0xcc, 0x9f, 0x3d, 0x93, 0x70, 0x6d, 0x1d, 0x00, 0x83, 0xf1, 0xef, 0x31, 0xd3, 0xa0, 0x31, 0xfd, 0xc6, 0x04 }; static const uint8_t nist_186_2_ecdsa_testvector_17_public_y[] = { /* Qy */ 0x4d, 0xd1, 0x92, 0x8e, 0x55, 0x76, 0x36, 0xf0, 0xa5, 0xdf, 0x08, 0x2a, 0xa0, 0xb1, 0x85, 0xd0, 0x8f, 0x57, 0xd1, 0xd5, 0xbf, 0x78, 0x57, 0xfc, 0xee, 0xb8, 0xc4, 0xc1 }; /* k = 005ab787e0961baaaba6c9deef88f69fed3e348a93f6564ded6fb51a */ static const uint8_t nist_186_2_ecdsa_testvector_17_out[] = { /* R */ 0xfc, 0x9a, 0x20, 0x58, 0xb2, 0xa7, 0xb6, 0x4c, 0x3c, 0x48, 0xf4, 0x0a, 0x36, 0x43, 0xb1, 0x8d, 0xbf, 0x41, 0x8f, 0x57, 0x99, 0x29, 0xbf, 0x52, 0xa5, 0xde, 0xa7, 0x73, /* S */ 0x05, 0x65, 0x3b, 0x94, 0x6b, 0x27, 0x0a, 0xaf, 0x01, 0x35, 0x1b, 0x21, 0xde, 0x75, 0x35, 0x08, 0x61, 0x0b, 0x1a, 0x76, 0xcf, 0x42, 0x36, 0x6f, 0x1a, 0x6c, 0x1d, 0x62 }; static const uint8_t nist_186_2_ecdsa_testvector_18_ptx[] = { /* Msg */ 0x47, 0x71, 0x01, 0xda, 0xa2, 0x82, 0xa5, 0xa5, 0x5b, 0x48, 0xc5, 0x31, 0x32, 0x90, 0xc8, 0xda, 0x65, 0xb0, 0x7c, 0xc4, 0xd4, 0x1a, 0x5a, 0x14, 0x63, 0x30, 0x0c, 0x60, 0xa0, 0x5a, 0x2c, 0x63, 0xa6, 0x56, 0x4f, 0xf6, 0x41, 0xd0, 0x42, 0x3c, 0x52, 0x33, 0x93, 0x1c, 0x75, 0xbe, 0x53, 0xf4, 0xe2, 0xda, 0x1b, 0x8b, 0x91, 0xab, 0x4d, 0x48, 0xa2, 0xe5, 0x9c, 0xa2, 0xfb, 0xe1, 0xcf, 0xd8, 0x33, 0xf0, 0xc1, 0xe2, 0xaf, 0xef, 0xad, 0xa7, 0x0a, 0x1b, 0xa8, 0x70, 0xba, 0x27, 0x6f, 0x9d, 0xf1, 0x8c, 0x63, 0x97, 0xc2, 0x21, 0xd2, 0x05, 0x85, 0xeb, 0x78, 0x43, 0x7c, 0x36, 0x46, 0x0f, 0xb7, 0xe4, 0x62, 0x86, 0x34, 0x06, 0x6e, 0x50, 0x4b, 0xa9, 0x0d, 0x17, 0x49, 0xf2, 0xa3, 0x3d, 0x5c, 0x6e, 0x5d, 0xce, 0xaf, 0xa3, 0x72, 0xb3, 0xd5, 0xeb, 0xa8, 0x29, 0x6b, 0x82, 0x19, 0x72 }; static const uint8_t nist_186_2_ecdsa_testvector_18_private[] = { /* d */ 0x00, 0xd6, 0x61, 0xae, 0x9d, 0x6a, 0x6e, 0xab, 0x7c, 0xa8, 0x37, 0x83, 0x31, 0xe4, 0x35, 0x66, 0x45, 0x35, 0x72, 0x08, 0x04, 0xca, 0xb0, 0x9d, 0xb1, 0xcb, 0xca, 0x6c }; static const uint8_t nist_186_2_ecdsa_testvector_18_public_x[] = { /* Qx */ 0x99, 0x34, 0x73, 0xa7, 0xd4, 0xb3, 0x33, 0xe3, 0x4c, 0x17, 0xeb, 0xfa, 0xa8, 0x6e, 0xd9, 0x29, 0xc8, 0x64, 0x5c, 0xcf, 0xd7, 0x97, 0x59, 0xc0, 0x84, 0xcd, 0xb1, 0x74 }; static const uint8_t nist_186_2_ecdsa_testvector_18_public_y[] = { /* Qy */ 0xa2, 0x6a, 0xd5, 0x0e, 0x57, 0x34, 0x79, 0x65, 0xb4, 0x2d, 0x5a, 0x15, 0x9f, 0xf5, 0x3a, 0x28, 0x95, 0x7a, 0x5f, 0x3b, 0x57, 0xa8, 0x44, 0xdc, 0xd0, 0xee, 0x6d, 0x54 }; /* k = 00171f192db736283e30bb89fd6f2aeeb4c70d3eaae2ac58451fbb3b */ static const uint8_t nist_186_2_ecdsa_testvector_18_out[] = { /* R */ 0x25, 0x9f, 0xda, 0x31, 0x43, 0xc5, 0x84, 0x13, 0x1a, 0xb8, 0xe4, 0x9f, 0xea, 0xf9, 0x3d, 0xad, 0x3b, 0x86, 0x57, 0x5f, 0x27, 0x89, 0x96, 0x24, 0x06, 0xbf, 0x80, 0x92, /* S */ 0xce, 0xa1, 0xcc, 0x15, 0xe2, 0x8c, 0x09, 0x4c, 0x3b, 0xc5, 0x57, 0xb3, 0xf5, 0xa5, 0x17, 0x2b, 0x62, 0x91, 0x0c, 0xd7, 0xcf, 0xbb, 0x61, 0x93, 0xae, 0x6d, 0x8d, 0xd2 }; static const uint8_t nist_186_2_ecdsa_testvector_19_ptx[] = { /* Msg */ 0x85, 0xbc, 0xd4, 0x06, 0xf4, 0xcd, 0xc8, 0xf3, 0x0e, 0x19, 0x55, 0x3b, 0xa9, 0x2f, 0x9c, 0x08, 0x94, 0xb2, 0x83, 0x3d, 0x7b, 0xb0, 0xb5, 0x65, 0x0a, 0x30, 0xeb, 0xe8, 0x55, 0x0a, 0x69, 0x85, 0x78, 0xfc, 0xcb, 0xfc, 0x7a, 0xf9, 0x01, 0x0b, 0x78, 0xc4, 0x99, 0x9c, 0xff, 0xbe, 0x3c, 0x3d, 0xb9, 0xfd, 0x7c, 0xd0, 0x4c, 0x9d, 0xcd, 0x84, 0x7f, 0x5b, 0xd0, 0x04, 0x9f, 0x5f, 0xd8, 0xee, 0x21, 0x5a, 0xa7, 0x86, 0x88, 0xd1, 0x78, 0xac, 0x89, 0xb9, 0x43, 0x0b, 0x6d, 0x43, 0x3c, 0x94, 0xb8, 0xf9, 0x9c, 0x2b, 0x08, 0x0a, 0xa5, 0x9f, 0x3f, 0xe2, 0xe0, 0xe0, 0xe4, 0xfe, 0xaa, 0x6c, 0xc7, 0xff, 0xee, 0x0b, 0xe4, 0xfd, 0x34, 0xbc, 0x8a, 0x1d, 0xdb, 0xef, 0xbd, 0x66, 0xa2, 0xf4, 0xd8, 0xd0, 0x6e, 0xb4, 0x77, 0x9e, 0x47, 0x9f, 0x93, 0xee, 0xa3, 0xe5, 0xef, 0x8f, 0xe7, 0xe9 }; static const uint8_t nist_186_2_ecdsa_testvector_19_private[] = { /* d */ 0x00, 0x5a, 0x52, 0x8a, 0x01, 0x67, 0x68, 0x33, 0x93, 0xfa, 0x59, 0x18, 0xb9, 0x49, 0x89, 0xb9, 0x34, 0x2f, 0x81, 0x73, 0xcc, 0x97, 0x57, 0xdd, 0xea, 0x49, 0xfe, 0xd7 }; static const uint8_t nist_186_2_ecdsa_testvector_19_public_x[] = { /* Qx */ 0xb8, 0xc3, 0x39, 0x44, 0xff, 0x61, 0xc5, 0x60, 0x09, 0x04, 0xca, 0x2a, 0xe0, 0xae, 0xfa, 0xe6, 0xd2, 0x1b, 0xf3, 0xc7, 0x4a, 0xa2, 0x1f, 0xaf, 0xd8, 0x24, 0xca, 0x69 }; static const uint8_t nist_186_2_ecdsa_testvector_19_public_y[] = { /* Qy */ 0xed, 0x93, 0xa6, 0xed, 0xb3, 0xf3, 0xc3, 0xc4, 0x99, 0x7e, 0xbf, 0xbc, 0x97, 0x66, 0x49, 0x65, 0x44, 0x9e, 0x5e, 0xd7, 0xea, 0xae, 0x87, 0x5f, 0xc3, 0x28, 0xf0, 0xee }; /* k = 000c2aa7a8a5fe907b2cb5fc77917dd14fd266315503a3c11476d285 */ static const uint8_t nist_186_2_ecdsa_testvector_19_out[] = { /* R */ 0x6b, 0x4b, 0xc7, 0xa9, 0x07, 0x09, 0x0d, 0xb6, 0x6e, 0x3a, 0x02, 0x25, 0x8f, 0x04, 0x3c, 0x40, 0x33, 0x04, 0x03, 0xb2, 0x2d, 0xea, 0x13, 0x1b, 0xad, 0x0d, 0xbb, 0x86, /* S */ 0xec, 0xea, 0x70, 0xcd, 0x69, 0x21, 0xe9, 0x34, 0x2d, 0x49, 0xb8, 0x81, 0x91, 0xc0, 0x20, 0xd2, 0xbf, 0xaf, 0xfa, 0xa6, 0x7d, 0xf5, 0x93, 0x88, 0xdb, 0x4a, 0x3e, 0xa5 }; static const uint8_t nist_186_2_ecdsa_testvector_20_ptx[] = { /* Msg */ 0xc5, 0x8c, 0xc5, 0xe0, 0xeb, 0xa5, 0x1a, 0x42, 0xe3, 0xa9, 0x88, 0xc2, 0x43, 0x24, 0x81, 0xdb, 0x2e, 0x01, 0x53, 0x72, 0x84, 0xef, 0xfc, 0x5c, 0x56, 0x09, 0x3f, 0x21, 0x9d, 0xb5, 0xf7, 0xff, 0x2b, 0xcc, 0xac, 0x32, 0xe1, 0xfc, 0x64, 0x73, 0x23, 0x6b, 0xbb, 0xbf, 0x89, 0x9d, 0x36, 0x59, 0xd7, 0x98, 0xd5, 0x12, 0x30, 0x46, 0xe7, 0xc8, 0x86, 0x1a, 0x22, 0x2d, 0x55, 0xf6, 0xf3, 0xc9, 0x91, 0x4d, 0x13, 0x43, 0xdd, 0x85, 0x5b, 0xdc, 0xfd, 0x9f, 0xd9, 0x3c, 0x8e, 0x19, 0x23, 0x71, 0xf4, 0x13, 0xeb, 0x35, 0x95, 0xb2, 0xd4, 0x6f, 0x45, 0xc2, 0x84, 0xfd, 0x00, 0x9f, 0xfb, 0xb1, 0xdf, 0x55, 0x23, 0x99, 0x45, 0x06, 0xa8, 0x84, 0x59, 0x8c, 0x09, 0xc1, 0xba, 0x60, 0xf0, 0x2a, 0x6e, 0xba, 0xbf, 0x62, 0x1b, 0xfa, 0x6b, 0x5a, 0x79, 0x47, 0x8d, 0x1a, 0x07, 0x76, 0xb6, 0xbe }; static const uint8_t nist_186_2_ecdsa_testvector_20_private[] = { /* d */ 0x00, 0x75, 0x29, 0x58, 0xa7, 0x9d, 0x6d, 0x45, 0x96, 0xc1, 0x01, 0xaa, 0xe6, 0x06, 0x13, 0x9b, 0xc9, 0x02, 0xb0, 0x80, 0x8b, 0x94, 0x41, 0xa9, 0xba, 0x48, 0xd6, 0xba }; static const uint8_t nist_186_2_ecdsa_testvector_20_public_x[] = { /* Qx */ 0x3b, 0x55, 0xbe, 0x3a, 0x8c, 0xc5, 0xc4, 0x70, 0x85, 0xab, 0x5d, 0x29, 0xe3, 0xb6, 0xc2, 0x8e, 0x51, 0xe7, 0x4b, 0x79, 0xd1, 0xa8, 0x74, 0xb5, 0xd7, 0xbb, 0xbb, 0x20 }; static const uint8_t nist_186_2_ecdsa_testvector_20_public_y[] = { /* Qy */ 0xae, 0xba, 0x7d, 0x2f, 0xf6, 0x7e, 0x2f, 0x68, 0x61, 0xe4, 0xde, 0x55, 0x21, 0x16, 0xbd, 0xc1, 0xcf, 0xa4, 0xf1, 0x87, 0x14, 0x9d, 0x19, 0xab, 0xd1, 0xac, 0xd7, 0x58 }; /* k = 009c2abc0d279dac6afb9dc33af8dc273e30c7e6e502347d076806bc */ static const uint8_t nist_186_2_ecdsa_testvector_20_out[] = { /* R */ 0x3d, 0xa5, 0x22, 0xea, 0x72, 0xe2, 0x53, 0x2a, 0xa4, 0x39, 0x49, 0x29, 0x91, 0x01, 0xd3, 0x12, 0x5c, 0xec, 0xc1, 0xbf, 0x45, 0x74, 0x7e, 0xe1, 0xfd, 0x49, 0xde, 0xd8, /* S */ 0xf8, 0x22, 0x63, 0x83, 0x96, 0xa4, 0xc1, 0xd1, 0xd6, 0xa5, 0xec, 0xcf, 0x89, 0xbd, 0x26, 0xf4, 0x24, 0x8b, 0xde, 0x68, 0x16, 0x31, 0xa2, 0x90, 0xde, 0x7d, 0xb4, 0x12 }; static const uint8_t nist_186_2_ecdsa_testvector_21_ptx[] = { /* Msg */ 0xb5, 0x2a, 0xda, 0x0e, 0x56, 0xc5, 0xd6, 0xf5, 0x52, 0xfc, 0xea, 0xcd, 0xd0, 0xaf, 0x88, 0x0f, 0xf4, 0xc2, 0x12, 0x65, 0x54, 0xc3, 0xf0, 0x69, 0xac, 0xcd, 0xe1, 0xb0, 0xd2, 0xac, 0x8e, 0x07, 0xec, 0x41, 0x65, 0xfc, 0xe0, 0x28, 0xa4, 0xa1, 0x0c, 0x99, 0xb4, 0x8c, 0x38, 0x8c, 0xb9, 0x22, 0xc8, 0x21, 0x67, 0x16, 0x36, 0x3e, 0x17, 0x2c, 0xc0, 0x7a, 0x1a, 0x43, 0x5e, 0x3a, 0x4d, 0x92, 0xf7, 0x19, 0xed, 0x32, 0xd4, 0x8e, 0xad, 0xdc, 0x55, 0xc9, 0x06, 0xf5, 0xe3, 0xdd, 0xcf, 0xc7, 0x25, 0x24, 0x0d, 0x12, 0x77, 0xdf, 0x0c, 0xc3, 0x98, 0x1e, 0xaf, 0x03, 0xa2, 0xe0, 0x04, 0x73, 0x40, 0x7a, 0x1b, 0xb6, 0x1b, 0x3d, 0x19, 0x31, 0x95, 0x53, 0x88, 0x0e, 0xba, 0xea, 0xf1, 0x87, 0x73, 0x95, 0xad, 0x61, 0xfd, 0xee, 0xf8, 0xb6, 0x9a, 0x81, 0x47, 0xf8, 0x87, 0xe5, 0xdc, 0x33 }; static const uint8_t nist_186_2_ecdsa_testvector_21_private[] = { /* d */ 0x00, 0x37, 0x33, 0xe9, 0x2e, 0x47, 0xfb, 0x22, 0xc7, 0xa6, 0xc4, 0x5b, 0xa5, 0x11, 0x5f, 0xcc, 0x4d, 0xb1, 0x64, 0xda, 0x56, 0xbc, 0x90, 0x52, 0x93, 0x0a, 0xcc, 0xc4 }; static const uint8_t nist_186_2_ecdsa_testvector_21_public_x[] = { /* Qx */ 0xf3, 0x46, 0x5d, 0xa1, 0x23, 0x8f, 0xa9, 0x59, 0xb4, 0xb5, 0x25, 0xb1, 0x27, 0xb5, 0x3a, 0xbf, 0x0c, 0x9e, 0x29, 0x5d, 0xc8, 0x30, 0x87, 0x46, 0x35, 0xc4, 0xcc, 0xd0 }; static const uint8_t nist_186_2_ecdsa_testvector_21_public_y[] = { /* Qy */ 0xb4, 0x2a, 0xf0, 0xbb, 0x8f, 0xeb, 0x22, 0xd4, 0x88, 0x9e, 0xb3, 0xe4, 0xfe, 0x25, 0x6d, 0x61, 0xbe, 0xb5, 0x0f, 0x02, 0xd7, 0x0e, 0x87, 0x50, 0x71, 0xfc, 0x87, 0xa7 }; /* k = 0028761d9ab7ae71a3b0713e58d7fdf6c1f709f52c6313c21127cf83 */ static const uint8_t nist_186_2_ecdsa_testvector_21_out[] = { /* R */ 0xd0, 0x20, 0x11, 0x39, 0x1f, 0xd3, 0x53, 0xb7, 0x72, 0xb3, 0xa3, 0xa7, 0x2f, 0xc1, 0xe4, 0x0f, 0x9b, 0xe7, 0xd4, 0xa8, 0x6a, 0x54, 0x28, 0xf1, 0x63, 0x4d, 0x6a, 0x30, /* S */ 0xfc, 0x55, 0x0f, 0x23, 0xca, 0x67, 0xbb, 0x08, 0x74, 0x21, 0x0f, 0xda, 0x93, 0x44, 0xd4, 0x85, 0x3b, 0xa1, 0x14, 0xf5, 0x43, 0x69, 0x7a, 0x94, 0x59, 0x4c, 0x96, 0xc2 }; static const uint8_t nist_186_2_ecdsa_testvector_22_ptx[] = { /* Msg */ 0x24, 0xe3, 0xb4, 0x49, 0xe3, 0xb6, 0x48, 0xa4, 0xc3, 0x7c, 0x04, 0x88, 0x15, 0xd1, 0x63, 0x8d, 0xda, 0x43, 0x0c, 0xd4, 0x85, 0x07, 0xb1, 0x52, 0x02, 0xeb, 0x37, 0x6b, 0xf6, 0x8c, 0x17, 0xc3, 0x49, 0xc9, 0x04, 0x51, 0xe2, 0x77, 0xce, 0xb5, 0xb1, 0x56, 0x86, 0xcb, 0xf3, 0x44, 0xe3, 0x80, 0xb1, 0xb1, 0xe4, 0xe4, 0x8a, 0x53, 0xb7, 0x81, 0xb3, 0x1b, 0xda, 0xec, 0x3c, 0x67, 0x80, 0x99, 0x95, 0x79, 0x36, 0xf3, 0x50, 0x28, 0xc6, 0xac, 0x28, 0xd5, 0x5b, 0x52, 0x43, 0xa1, 0xe7, 0x24, 0xb4, 0xdd, 0xc2, 0x23, 0x44, 0xc3, 0x94, 0x6c, 0x72, 0x63, 0x74, 0xc4, 0xb8, 0xdf, 0x51, 0x75, 0x10, 0xdb, 0x91, 0x59, 0xb7, 0x30, 0xf9, 0x34, 0x31, 0xe0, 0xcd, 0x46, 0x8d, 0x4f, 0x38, 0x21, 0xea, 0xb0, 0xed, 0xb9, 0x3a, 0xbd, 0x0f, 0xba, 0x46, 0xab, 0x4f, 0x1e, 0xf3, 0x5d, 0x54, 0xfe }; static const uint8_t nist_186_2_ecdsa_testvector_22_private[] = { /* d */ 0x00, 0x59, 0x8f, 0xca, 0xbe, 0x59, 0x04, 0x52, 0xc6, 0x66, 0x6d, 0x0b, 0xa3, 0xd1, 0x70, 0x7e, 0x94, 0x43, 0x49, 0xb5, 0x93, 0x06, 0x62, 0xbc, 0xa6, 0x14, 0x17, 0x8a }; static const uint8_t nist_186_2_ecdsa_testvector_22_public_x[] = { /* Qx */ 0xe5, 0xf5, 0x82, 0x64, 0xc6, 0x51, 0xf8, 0x98, 0x19, 0x91, 0xcf, 0x8d, 0xe0, 0xdb, 0xf9, 0x02, 0x35, 0xc3, 0x1c, 0x93, 0xa0, 0xa6, 0x3c, 0xe1, 0xe4, 0x84, 0x91, 0x5b }; static const uint8_t nist_186_2_ecdsa_testvector_22_public_y[] = { /* Qy */ 0xf1, 0x62, 0x34, 0xcb, 0x01, 0x66, 0xa7, 0x31, 0x60, 0xb0, 0x5c, 0x31, 0x4c, 0xc7, 0xa0, 0xc9, 0x47, 0x6e, 0x6f, 0xcf, 0x3b, 0xc1, 0x14, 0x6e, 0xd1, 0x28, 0x81, 0xde }; /* k = 00fa783144e68bf30bf444a7b64b754f9b015c530970f8011d717b14 */ static const uint8_t nist_186_2_ecdsa_testvector_22_out[] = { /* R */ 0x8f, 0x28, 0x56, 0xeb, 0xa0, 0x02, 0x4c, 0xc8, 0xaf, 0xbf, 0x17, 0x05, 0xd0, 0xca, 0xb8, 0x10, 0x71, 0xb3, 0xb2, 0xb6, 0x2c, 0xac, 0x22, 0xa5, 0x86, 0x1d, 0xb0, 0xad, /* S */ 0x66, 0x93, 0x65, 0x48, 0x9e, 0x79, 0x07, 0x63, 0x11, 0x2a, 0xf6, 0x28, 0x8e, 0xa7, 0x3c, 0x04, 0x81, 0x02, 0xef, 0x5f, 0x60, 0xf3, 0x80, 0xb8, 0xfc, 0xea, 0xb9, 0x13 }; static const uint8_t nist_186_2_ecdsa_testvector_23_ptx[] = { /* Msg */ 0xb2, 0xf1, 0x41, 0xd9, 0x6a, 0xd8, 0xa2, 0xb9, 0x03, 0xa8, 0x9e, 0xbc, 0x51, 0xf7, 0x47, 0x3e, 0x94, 0x12, 0x86, 0x12, 0xa0, 0x91, 0x60, 0xbd, 0x3b, 0x2f, 0x77, 0xe2, 0xc7, 0xd9, 0xd4, 0xfe, 0x21, 0x05, 0xe3, 0x56, 0xc8, 0x45, 0xbf, 0x2d, 0x42, 0x1c, 0xb0, 0x39, 0xbb, 0x10, 0xf3, 0x58, 0xf0, 0x00, 0xb9, 0x80, 0x4b, 0xb8, 0x71, 0xf4, 0x4f, 0xc3, 0x4a, 0xbe, 0x37, 0x80, 0xf4, 0x59, 0xda, 0x79, 0xa7, 0xae, 0xd2, 0xef, 0x67, 0x42, 0xdd, 0xba, 0x86, 0xad, 0x83, 0x50, 0x6a, 0x4e, 0xfa, 0x23, 0x91, 0x3d, 0x46, 0x30, 0xd1, 0x81, 0xa4, 0xd4, 0xe5, 0x83, 0x29, 0xe2, 0x25, 0xc3, 0xa7, 0xf4, 0x95, 0xca, 0xd0, 0xfe, 0x21, 0x60, 0x9e, 0x29, 0x27, 0xfe, 0xf2, 0xde, 0x36, 0x86, 0x7b, 0x20, 0x16, 0x32, 0xd9, 0x20, 0x08, 0xca, 0x02, 0x0b, 0x4e, 0x1b, 0xe5, 0x27, 0xee, 0xa4 }; static const uint8_t nist_186_2_ecdsa_testvector_23_private[] = { /* d */ 0x00, 0x89, 0x6f, 0xd1, 0x04, 0x3a, 0x16, 0x83, 0x50, 0x40, 0x4d, 0xeb, 0xd5, 0xec, 0x46, 0x14, 0xdb, 0x8f, 0x80, 0x30, 0x0c, 0x5b, 0x0e, 0xed, 0x2f, 0xdf, 0xc8, 0x98 }; static const uint8_t nist_186_2_ecdsa_testvector_23_public_x[] = { /* Qx */ 0x04, 0x01, 0x59, 0x92, 0x28, 0x61, 0x33, 0xee, 0xf5, 0x4e, 0x6e, 0x91, 0xec, 0xc5, 0x8c, 0x02, 0x1c, 0x25, 0x80, 0x61, 0x91, 0xbc, 0xf6, 0x68, 0xf7, 0xf6, 0x51, 0x27 }; static const uint8_t nist_186_2_ecdsa_testvector_23_public_y[] = { /* Qy */ 0xa3, 0x2a, 0x50, 0xf2, 0x8e, 0x1a, 0x4f, 0x2f, 0x07, 0x64, 0x98, 0xf5, 0x0b, 0xf2, 0x7c, 0x29, 0x11, 0x03, 0xf9, 0x93, 0xcb, 0x88, 0xce, 0xb4, 0x5a, 0xc5, 0x50, 0xcb }; /* k = 003c00f713e3a2fef78bcd9e534e61fe199faa7238974d118407c820 */ static const uint8_t nist_186_2_ecdsa_testvector_23_out[] = { /* R */ 0x4a, 0x3b, 0x1d, 0x8f, 0x1d, 0x22, 0x4b, 0x34, 0x91, 0xc7, 0xd3, 0xaf, 0x16, 0x0a, 0xce, 0x4d, 0xa3, 0xb5, 0xda, 0x16, 0xe7, 0x7d, 0x9f, 0x8b, 0xcd, 0x19, 0x59, 0x2d, /* S */ 0x43, 0x53, 0xc4, 0xd8, 0x70, 0x53, 0xd7, 0x8c, 0x82, 0x1d, 0x29, 0xba, 0x92, 0x6b, 0xb0, 0x04, 0x42, 0x16, 0x98, 0x75, 0xb9, 0xd9, 0x56, 0x18, 0xf9, 0x35, 0x01, 0x52 }; static const uint8_t nist_186_2_ecdsa_testvector_24_ptx[] = { /* Msg */ 0xbc, 0x64, 0x29, 0x91, 0x65, 0x35, 0x8e, 0x19, 0xe5, 0xac, 0x85, 0x5c, 0xdf, 0xab, 0xfb, 0xe6, 0xc7, 0xae, 0x09, 0xb4, 0xac, 0x50, 0x6f, 0xe0, 0x54, 0x11, 0x3e, 0x80, 0x8e, 0x56, 0xd4, 0xcb, 0xc4, 0xb1, 0x0d, 0x7d, 0xd0, 0x63, 0xb8, 0x7d, 0x10, 0x1f, 0x48, 0xbd, 0xbd, 0x11, 0xcc, 0x62, 0x78, 0x1f, 0x22, 0x26, 0x26, 0x6f, 0x67, 0xfa, 0xfe, 0x29, 0xb1, 0xef, 0xe0, 0x7e, 0x01, 0x56, 0xe9, 0xe9, 0x73, 0x26, 0x44, 0xb4, 0xb8, 0x9f, 0x43, 0xbf, 0xc6, 0x2d, 0xae, 0x7d, 0xce, 0x8f, 0x5b, 0x3f, 0x6f, 0x38, 0xfe, 0xb5, 0x29, 0xf6, 0x43, 0xb1, 0x14, 0xd1, 0x1a, 0x2f, 0xd2, 0x36, 0x52, 0x93, 0xc2, 0x55, 0x6a, 0x31, 0x76, 0xc7, 0xa4, 0x12, 0x68, 0x74, 0x5a, 0xf5, 0xe8, 0xb4, 0x95, 0x95, 0x59, 0xb4, 0xdc, 0x2a, 0x9d, 0x1c, 0x4a, 0x32, 0xce, 0xee, 0xe4, 0x71, 0x2f, 0xb1 }; static const uint8_t nist_186_2_ecdsa_testvector_24_private[] = { /* d */ 0x00, 0x9c, 0x31, 0x01, 0x80, 0x60, 0x9c, 0x72, 0x1a, 0x55, 0x31, 0xcf, 0x4e, 0x43, 0x8b, 0xf3, 0xc8, 0x5e, 0xf2, 0xb2, 0xff, 0xea, 0xc9, 0xa2, 0x1c, 0x66, 0x7d, 0x0e }; static const uint8_t nist_186_2_ecdsa_testvector_24_public_x[] = { /* Qx */ 0xcc, 0x60, 0x2a, 0x85, 0x82, 0x76, 0xf9, 0x44, 0xbc, 0xcc, 0xa2, 0xac, 0xbb, 0xd8, 0xc9, 0x51, 0x8b, 0x3c, 0xd9, 0xf0, 0x62, 0xe4, 0x80, 0x2e, 0x34, 0x27, 0x80, 0xd7 }; static const uint8_t nist_186_2_ecdsa_testvector_24_public_y[] = { /* Qy */ 0x56, 0x50, 0xef, 0xed, 0xdb, 0xce, 0x1c, 0x00, 0xf5, 0x06, 0xa3, 0xf8, 0x8a, 0x8f, 0x57, 0x66, 0x94, 0x05, 0xe3, 0x44, 0x90, 0x1c, 0xfb, 0x51, 0xce, 0x54, 0xc1, 0x5f }; /* k = 00ef15cd8173fa27a393be6b1e1253aaee433b24e8a4d448a960679e */ static const uint8_t nist_186_2_ecdsa_testvector_24_out[] = { /* R */ 0x73, 0x74, 0xf7, 0xdf, 0x8e, 0x9e, 0x6b, 0x2b, 0xcb, 0x4e, 0x82, 0x25, 0x8a, 0x0f, 0xa8, 0xb1, 0x36, 0xb9, 0x3a, 0xba, 0x18, 0xa5, 0x3a, 0x79, 0xe8, 0xc8, 0xe8, 0x97, /* S */ 0xa4, 0xa5, 0xda, 0x18, 0xcb, 0xb9, 0x87, 0xe4, 0x8a, 0x80, 0xa7, 0x3b, 0xd6, 0x9b, 0xe3, 0x78, 0xce, 0x47, 0x6f, 0xbb, 0xda, 0x64, 0x68, 0xc4, 0xa4, 0x9b, 0x72, 0x19 }; static const uint8_t nist_186_2_ecdsa_testvector_25_ptx[] = { /* Msg */ 0x11, 0xd4, 0x34, 0x4d, 0xca, 0xa9, 0xf6, 0x7c, 0x16, 0x79, 0xac, 0x2f, 0xbf, 0x77, 0x05, 0x66, 0x94, 0xc5, 0xf2, 0x5e, 0xb2, 0x9f, 0x0a, 0x62, 0x02, 0xd7, 0x2c, 0xe4, 0x03, 0x81, 0x66, 0xcc, 0xca, 0xef, 0x15, 0x10, 0x47, 0xe0, 0x4e, 0x85, 0xc9, 0xf4, 0x7d, 0xf5, 0xc4, 0x63, 0x4c, 0x71, 0xd3, 0xef, 0xc7, 0xe8, 0xf9, 0x17, 0xbd, 0xf9, 0x2c, 0x8e, 0x69, 0x06, 0x14, 0xeb, 0x51, 0x8a, 0x10, 0xa2, 0x6f, 0xac, 0x7a, 0x33, 0x8f, 0x14, 0x2c, 0xa1, 0xf8, 0xfd, 0x42, 0x26, 0x4e, 0x8b, 0x22, 0x25, 0xb7, 0x5f, 0xba, 0x60, 0x3d, 0x6a, 0x09, 0x6b, 0x74, 0xfe, 0xe1, 0x61, 0x5c, 0x2b, 0xeb, 0xd5, 0x88, 0x48, 0xeb, 0x0b, 0x80, 0xd0, 0x45, 0x68, 0x65, 0x70, 0xc1, 0x28, 0xd3, 0x5d, 0x8b, 0x4f, 0x0b, 0xeb, 0x7e, 0xe2, 0x52, 0x5c, 0xa1, 0x56, 0x94, 0xf5, 0xf2, 0x49, 0x4d, 0x58 }; static const uint8_t nist_186_2_ecdsa_testvector_25_private[] = { /* d */ 0x00, 0xa1, 0x40, 0xa5, 0x09, 0x60, 0x19, 0xe8, 0xf5, 0x5b, 0xd2, 0xdf, 0x13, 0x38, 0xb2, 0x93, 0xf7, 0xf6, 0x10, 0x06, 0x8e, 0x75, 0x63, 0x2d, 0xdf, 0xcb, 0x88, 0x3d }; static const uint8_t nist_186_2_ecdsa_testvector_25_public_x[] = { /* Qx */ 0x54, 0x4b, 0xf0, 0x8e, 0x35, 0xff, 0xa3, 0xc9, 0x60, 0x55, 0x3c, 0x97, 0x23, 0xee, 0x70, 0x97, 0xb7, 0xdf, 0xaa, 0xe0, 0x59, 0xad, 0xcc, 0xf2, 0xda, 0x75, 0x29, 0x9b }; static const uint8_t nist_186_2_ecdsa_testvector_25_public_y[] = { /* Qy */ 0x99, 0x9d, 0xae, 0x3a, 0x21, 0x78, 0x2c, 0xc2, 0x1b, 0xa3, 0xa5, 0x01, 0x81, 0xdc, 0x7e, 0x67, 0xb8, 0xd7, 0x96, 0x0f, 0x9d, 0x58, 0xd0, 0x94, 0xa3, 0xb1, 0x41, 0xef }; /* k = 00aef6a43f3f219a611e8e1994cb408ec71f05fb6f9af347a6b29284 */ static const uint8_t nist_186_2_ecdsa_testvector_25_out[] = { /* R */ 0x5b, 0xf0, 0x15, 0x53, 0xdb, 0x59, 0xeb, 0x45, 0x30, 0xe7, 0x21, 0x57, 0xd3, 0x9f, 0x03, 0xda, 0xb9, 0x16, 0x7f, 0xfd, 0x0d, 0xf3, 0xab, 0xb7, 0x4d, 0x82, 0x2f, 0xdf, /* S */ 0x0c, 0x10, 0x4e, 0x52, 0x01, 0x8d, 0xfb, 0xdd, 0x53, 0x86, 0xdd, 0xb9, 0x59, 0x9b, 0x41, 0xab, 0xf2, 0x10, 0x77, 0x08, 0xa3, 0xdc, 0x86, 0xb3, 0x5f, 0x68, 0xdc, 0x1c }; static const uint8_t nist_186_2_ecdsa_testvector_26_ptx[] = { /* Msg */ 0x00, 0x3b, 0x64, 0x8e, 0x92, 0xb1, 0xc1, 0x7b, 0x00, 0x08, 0x1c, 0x88, 0xb5, 0x8b, 0xe2, 0x85, 0x16, 0xa3, 0x2e, 0x2c, 0xc1, 0x02, 0x31, 0xfa, 0x12, 0x22, 0xd7, 0x3d, 0xec, 0xee, 0xa7, 0x6d, 0xb6, 0xbf, 0xec, 0xbf, 0xa3, 0x89, 0x12, 0xf8, 0x37, 0x57, 0x52, 0x7f, 0x07, 0xf4, 0x92, 0xb7, 0xc0, 0xeb, 0x86, 0x8b, 0x6a, 0xb2, 0x1c, 0x4b, 0xee, 0x23, 0x17, 0xb6, 0xd6, 0x2b, 0xf9, 0x58, 0x55, 0xc6, 0x27, 0x16, 0x87, 0x2b, 0x48, 0x07, 0xf9, 0x43, 0xee, 0x85, 0x6c, 0x60, 0x78, 0x84, 0xd6, 0x2c, 0x37, 0x23, 0xaa, 0xe0, 0xcf, 0x81, 0x59, 0xb6, 0xe0, 0xd2, 0x19, 0xa0, 0xe6, 0xb2, 0xe5, 0x3a, 0x5e, 0xb8, 0xc5, 0xfd, 0x2b, 0x4f, 0x4f, 0xb6, 0x37, 0xc1, 0x6e, 0x37, 0x5d, 0x95, 0x62, 0x4d, 0x87, 0x1b, 0x08, 0xf2, 0x13, 0x45, 0x5c, 0xc3, 0x7c, 0xb8, 0x3c, 0xb4, 0x36, 0x23 }; static const uint8_t nist_186_2_ecdsa_testvector_26_private[] = { /* d */ 0x00, 0xa6, 0x1b, 0x96, 0x9a, 0x0b, 0xf6, 0x52, 0x77, 0xfb, 0x7f, 0x87, 0x96, 0x27, 0x85, 0x54, 0xf1, 0x35, 0x0c, 0xe8, 0x2a, 0xfa, 0x1d, 0x5f, 0xf4, 0xcf, 0x3a, 0x5f }; static const uint8_t nist_186_2_ecdsa_testvector_26_public_x[] = { /* Qx */ 0xb4, 0x8b, 0x95, 0x85, 0xbd, 0xfa, 0x5a, 0xd9, 0x02, 0xd3, 0xd9, 0x13, 0x17, 0xcf, 0x1a, 0xae, 0x9a, 0x17, 0x5d, 0x39, 0x36, 0x4a, 0x18, 0xe5, 0xdd, 0x9e, 0x13, 0x3d }; static const uint8_t nist_186_2_ecdsa_testvector_26_public_y[] = { /* Qy */ 0xb0, 0x34, 0x26, 0xdc, 0x86, 0x60, 0x54, 0x3e, 0x13, 0xbe, 0xe6, 0x66, 0x0b, 0x43, 0xc4, 0x53, 0xfb, 0x1c, 0x7a, 0x13, 0xa8, 0x47, 0xe9, 0x8a, 0x5d, 0x9b, 0xb0, 0x38 }; /* k = 00eddd21ff4e5da2e04a0c66214ad732ecd7521472e921646cde719f */ static const uint8_t nist_186_2_ecdsa_testvector_26_out[] = { /* R */ 0x70, 0x7c, 0xf9, 0x6d, 0xe2, 0x3f, 0x84, 0xdc, 0x98, 0x73, 0x51, 0x59, 0x9b, 0x63, 0xbc, 0x16, 0xcb, 0x6a, 0xa8, 0x76, 0xfc, 0xeb, 0xde, 0xfb, 0xdc, 0xc4, 0x0e, 0xee, /* S */ 0xdd, 0x71, 0xfb, 0xb5, 0xbc, 0xe1, 0x8e, 0x00, 0x41, 0xc8, 0x67, 0xd5, 0x77, 0x27, 0x1b, 0x67, 0x83, 0x2c, 0x13, 0x99, 0x01, 0xc7, 0x19, 0x4c, 0x50, 0xaa, 0x94, 0xed }; static const uint8_t nist_186_2_ecdsa_testvector_27_ptx[] = { /* Msg */ 0x64, 0x53, 0xfe, 0x08, 0x7d, 0x56, 0x4e, 0x4b, 0x5a, 0x0e, 0x7f, 0xf5, 0xe7, 0x05, 0xfb, 0x96, 0x02, 0xf4, 0xb0, 0x33, 0x30, 0x9b, 0x67, 0x47, 0x8e, 0xf1, 0x51, 0x08, 0x0b, 0x7d, 0xe3, 0xeb, 0xd5, 0x04, 0xe4, 0x6a, 0x11, 0x64, 0xc5, 0x05, 0xcf, 0xc0, 0x30, 0x87, 0x3d, 0xdd, 0xe3, 0x8a, 0x1a, 0xcc, 0xbf, 0x3d, 0x6e, 0xca, 0x1c, 0x65, 0x79, 0x64, 0x60, 0xa2, 0xe9, 0xdf, 0xd0, 0xf4, 0x50, 0xd6, 0xa6, 0x7d, 0xd4, 0x25, 0x63, 0x89, 0x29, 0x06, 0x66, 0xcb, 0xbc, 0x7a, 0xbe, 0xe9, 0x31, 0xeb, 0x3d, 0x3c, 0x10, 0x0f, 0xcd, 0xd1, 0xbb, 0x0f, 0x07, 0xb3, 0xa4, 0xe9, 0x02, 0x6c, 0xbc, 0x13, 0x69, 0xc9, 0x2f, 0x61, 0xd1, 0xde, 0x4e, 0x28, 0x49, 0x4a, 0xcc, 0xa4, 0x32, 0xbc, 0x2e, 0x97, 0x51, 0xb6, 0x7d, 0x33, 0x22, 0x91, 0x3e, 0x3a, 0x6f, 0xc2, 0xa4, 0x64, 0x22, 0x5b }; static const uint8_t nist_186_2_ecdsa_testvector_27_private[] = { /* d */ 0x00, 0x82, 0x6f, 0xb0, 0xab, 0x78, 0xdd, 0x5a, 0x83, 0x46, 0x87, 0x27, 0xa9, 0x3b, 0x46, 0x54, 0xe6, 0x14, 0x23, 0xb5, 0x86, 0xe3, 0xe1, 0x92, 0x01, 0x02, 0x83, 0xa3 }; static const uint8_t nist_186_2_ecdsa_testvector_27_public_x[] = { /* Qx */ 0xdc, 0x20, 0xb9, 0x84, 0xeb, 0x64, 0x63, 0x43, 0x67, 0x9e, 0x82, 0x99, 0x76, 0x34, 0x16, 0xcb, 0x9a, 0xf2, 0x7f, 0xae, 0x39, 0xf2, 0x97, 0xda, 0x3c, 0xdb, 0x93, 0x4f }; static const uint8_t nist_186_2_ecdsa_testvector_27_public_y[] = { /* Qy */ 0x0e, 0x63, 0xb6, 0xfd, 0x5e, 0x0a, 0x2f, 0x79, 0xac, 0xc5, 0x00, 0x4c, 0x21, 0x20, 0xec, 0xaa, 0x57, 0xf5, 0x5b, 0x39, 0x93, 0xc7, 0xc2, 0x7e, 0xfa, 0xea, 0x58, 0x1a }; /* k = 002d50bff84a4a955fe094199cdae4e897ee985b8e15bb2174cf041a */ static const uint8_t nist_186_2_ecdsa_testvector_27_out[] = { /* R */ 0x1b, 0xf7, 0xad, 0xa1, 0x49, 0x36, 0xa7, 0x41, 0x1e, 0x29, 0x72, 0x5d, 0x86, 0x7e, 0x1f, 0x5c, 0x88, 0xea, 0xd2, 0xe4, 0xee, 0xa3, 0x6e, 0x4a, 0x8e, 0x2e, 0x7b, 0x89, /* S */ 0x9e, 0xe1, 0x5f, 0xfe, 0xdb, 0x03, 0x54, 0x9e, 0xb2, 0xf5, 0xaa, 0xb0, 0xeb, 0xfe, 0x33, 0x5b, 0xb3, 0x5e, 0xa3, 0x25, 0xd0, 0xaf, 0x71, 0xde, 0xdd, 0x82, 0xe9, 0x0c }; static const uint8_t nist_186_2_ecdsa_testvector_28_ptx[] = { /* Msg */ 0x33, 0xd8, 0x76, 0xe7, 0xe5, 0x6b, 0x0a, 0x84, 0x43, 0xf1, 0xdc, 0x28, 0x4b, 0x41, 0xf3, 0x0d, 0x5a, 0x13, 0xb9, 0x49, 0x43, 0xc2, 0xab, 0xad, 0x9f, 0x51, 0x55, 0xee, 0x65, 0xad, 0x7e, 0x02, 0xbb, 0x31, 0xa0, 0xcd, 0x0b, 0x6f, 0x9b, 0xfd, 0x58, 0x2e, 0xa9, 0x33, 0xd3, 0xaf, 0x95, 0x63, 0xa9, 0x35, 0x28, 0x7d, 0x20, 0xc3, 0xe5, 0x4d, 0xe2, 0x28, 0xf6, 0xa0, 0x98, 0x39, 0x65, 0xa8, 0xbb, 0x5e, 0x8f, 0xa1, 0xa7, 0x50, 0xd6, 0xb5, 0xf2, 0x20, 0x97, 0x1d, 0xfb, 0x7c, 0x5c, 0x8a, 0xc6, 0x2e, 0x52, 0xc3, 0x07, 0xe5, 0xfd, 0x8f, 0x7c, 0x38, 0x2a, 0xd5, 0x80, 0xe8, 0x25, 0x02, 0xde, 0x65, 0x2d, 0xab, 0xe3, 0x94, 0x25, 0x74, 0xb7, 0xd0, 0x8c, 0x30, 0xed, 0x2f, 0xaf, 0x49, 0x58, 0x06, 0x1d, 0x62, 0x20, 0xaf, 0x5c, 0x3c, 0x16, 0x89, 0xda, 0xd6, 0x45, 0x41, 0x26, 0xd9 }; static const uint8_t nist_186_2_ecdsa_testvector_28_private[] = { /* d */ 0x00, 0x77, 0x4f, 0x99, 0x59, 0xf4, 0x42, 0xd4, 0x8b, 0x56, 0x2d, 0xe2, 0x4a, 0xe2, 0x52, 0x85, 0x75, 0x6e, 0xc1, 0x5c, 0xe0, 0x72, 0x25, 0xf1, 0x5c, 0x00, 0x7c, 0x6d }; static const uint8_t nist_186_2_ecdsa_testvector_28_public_x[] = { /* Qx */ 0x75, 0x16, 0xee, 0xb4, 0xdb, 0x63, 0x1f, 0x0f, 0xd6, 0xfd, 0xe7, 0x01, 0xaa, 0x18, 0x93, 0xad, 0x11, 0x55, 0x91, 0xe3, 0x7c, 0xdf, 0xcc, 0x52, 0xb7, 0x14, 0xe7, 0x78 }; static const uint8_t nist_186_2_ecdsa_testvector_28_public_y[] = { /* Qy */ 0x62, 0xe0, 0x16, 0x48, 0x83, 0xb2, 0x3c, 0xc4, 0xf4, 0xd5, 0xe0, 0x6e, 0x76, 0x60, 0x70, 0xe8, 0x6f, 0xe3, 0x77, 0xf1, 0x2d, 0xbe, 0xc4, 0x6e, 0xaf, 0xe5, 0xf4, 0xe2 }; /* k = 0060d4854bfc3ddf0ace90c4c4c6476cba853c4ebf3e54bab9bc2352 */ static const uint8_t nist_186_2_ecdsa_testvector_28_out[] = { /* R */ 0xd2, 0x7f, 0xf0, 0x94, 0x80, 0x87, 0x87, 0xc7, 0x64, 0x95, 0xaf, 0x70, 0x41, 0x94, 0x26, 0x14, 0x9e, 0xc1, 0x10, 0x59, 0xcd, 0xd3, 0x9f, 0x25, 0x81, 0xb8, 0xd1, 0x35, /* S */ 0xf4, 0x50, 0xa1, 0x27, 0x74, 0xd1, 0xa9, 0xc8, 0x43, 0xe7, 0x6e, 0xc1, 0xa2, 0x4f, 0xe1, 0x50, 0x64, 0xb2, 0x1a, 0xd2, 0xbc, 0xda, 0x9d, 0xfb, 0x0c, 0xf6, 0xfd, 0x2c }; static const uint8_t nist_186_2_ecdsa_testvector_29_ptx[] = { /* Msg */ 0x72, 0x10, 0xe8, 0x79, 0xeb, 0xd1, 0x5f, 0x29, 0xdd, 0x3f, 0x8e, 0x6e, 0xd6, 0x39, 0x29, 0x3e, 0xc7, 0x82, 0x3b, 0x82, 0xc3, 0x6f, 0x10, 0x6e, 0x04, 0xe3, 0x52, 0x0e, 0x2f, 0x7d, 0x72, 0x22, 0xd8, 0x10, 0x49, 0x2c, 0x49, 0x54, 0x00, 0xc7, 0x7f, 0xdb, 0x2d, 0x3a, 0x76, 0x46, 0x3e, 0x4d, 0xa7, 0xb8, 0x1b, 0x5c, 0xce, 0x8b, 0x07, 0xa9, 0xf0, 0x42, 0xc7, 0xf6, 0x9d, 0xbf, 0x07, 0x54, 0x73, 0xb7, 0xf9, 0x36, 0xe3, 0x62, 0x3f, 0xc9, 0x38, 0x77, 0x0b, 0x88, 0xd4, 0x57, 0x85, 0x0b, 0xbd, 0x88, 0x6d, 0x1f, 0x59, 0x66, 0x01, 0x1c, 0x76, 0x15, 0x21, 0x73, 0x8d, 0xba, 0xb1, 0x87, 0x48, 0xeb, 0x3f, 0xbe, 0x41, 0x64, 0xe5, 0xd7, 0x0d, 0xfb, 0x71, 0x7e, 0x79, 0xd6, 0xc4, 0x1d, 0x13, 0xdb, 0x78, 0xf6, 0xed, 0x68, 0xc6, 0x6f, 0x9d, 0x44, 0xa6, 0xac, 0x88, 0xd6, 0x37, 0x63 }; static const uint8_t nist_186_2_ecdsa_testvector_29_private[] = { /* d */ 0x00, 0x18, 0x0c, 0xe8, 0x83, 0xf0, 0x2d, 0xa5, 0x2f, 0x1c, 0xfe, 0xf7, 0xf8, 0x6a, 0x74, 0xcc, 0x38, 0x09, 0x92, 0x35, 0x95, 0x07, 0x4b, 0x1c, 0x3e, 0x4d, 0xbd, 0x67 }; static const uint8_t nist_186_2_ecdsa_testvector_29_public_x[] = { /* Qx */ 0x3e, 0x44, 0x09, 0xba, 0xa7, 0x81, 0x7f, 0x25, 0xc6, 0x94, 0xa4, 0xe6, 0x5e, 0x70, 0x45, 0xe1, 0x24, 0xea, 0x0c, 0xef, 0x54, 0x82, 0x69, 0xfd, 0xc9, 0xd7, 0x33, 0x98 }; static const uint8_t nist_186_2_ecdsa_testvector_29_public_y[] = { /* Qy */ 0x9d, 0x91, 0x56, 0x8f, 0x03, 0x8a, 0x43, 0xad, 0x6a, 0x0a, 0x91, 0xb4, 0x24, 0x76, 0x36, 0x9c, 0xcc, 0x67, 0xcd, 0xd8, 0x8b, 0x16, 0xf7, 0x1c, 0x09, 0xd9, 0xe0, 0x0a }; /* k = 00ad38800026a494128dab55dcd2ab1f2ffa6ff2f35b619ccc34a7ae */ static const uint8_t nist_186_2_ecdsa_testvector_29_out[] = { /* R */ 0x67, 0x6d, 0x6f, 0x6a, 0x3f, 0xa6, 0x1b, 0xf0, 0xf3, 0xcf, 0x5f, 0x74, 0x47, 0x56, 0x3d, 0xf1, 0x01, 0x36, 0x1f, 0x9b, 0x09, 0x18, 0x13, 0x34, 0x17, 0x9e, 0xf6, 0xce, /* S */ 0x06, 0x86, 0x51, 0x78, 0x15, 0xbd, 0xb6, 0xec, 0xe3, 0xbd, 0xa2, 0x57, 0xa8, 0x21, 0xa6, 0xb7, 0x24, 0x99, 0x31, 0xe5, 0xcc, 0xd5, 0x75, 0x33, 0x2f, 0x77, 0xd3, 0x58 }; static const uint8_t nist_186_2_ecdsa_testvector_30_ptx[] = { /* Msg */ 0x22, 0x8e, 0xdf, 0xde, 0xfb, 0x8c, 0x90, 0x11, 0xd4, 0xe6, 0x13, 0x0f, 0x81, 0x30, 0x7f, 0x29, 0x57, 0x7b, 0x73, 0x12, 0x92, 0x27, 0x9c, 0x4f, 0xf4, 0xf9, 0x7d, 0xe9, 0xaf, 0x6d, 0x6f, 0x65, 0x85, 0x4e, 0xe6, 0xf5, 0x2e, 0x83, 0xf7, 0xf0, 0xfa, 0x2c, 0x17, 0x80, 0xb7, 0xee, 0x26, 0x9b, 0xd5, 0x8a, 0xac, 0x34, 0xc8, 0xb5, 0x62, 0xb2, 0xae, 0x24, 0xf4, 0xa1, 0x32, 0xe6, 0x05, 0xa7, 0xb0, 0xf6, 0x73, 0xba, 0x9a, 0x11, 0xdd, 0x91, 0x1a, 0xc5, 0x63, 0x58, 0xf8, 0xcb, 0xad, 0xa8, 0xbf, 0x96, 0x2f, 0xb6, 0x1b, 0x2c, 0xab, 0xcb, 0x86, 0x35, 0xf7, 0xf4, 0x23, 0x51, 0x00, 0xfa, 0xea, 0xaf, 0x0f, 0x94, 0x06, 0xdc, 0x4b, 0xdc, 0x7b, 0xd8, 0x80, 0x00, 0x0c, 0x6f, 0x1e, 0x3a, 0x5c, 0xc6, 0x85, 0x02, 0x53, 0x35, 0x7f, 0x82, 0xc3, 0x54, 0x0e, 0x4a, 0x4c, 0x59, 0x69, 0x45 }; static const uint8_t nist_186_2_ecdsa_testvector_30_private[] = { /* d */ 0x00, 0xb3, 0x58, 0x49, 0x19, 0x16, 0x7e, 0x95, 0x90, 0xba, 0xe8, 0xad, 0x6f, 0x77, 0x00, 0x80, 0xff, 0xc4, 0x82, 0x05, 0x74, 0x43, 0xd2, 0x65, 0x5c, 0xbf, 0x98, 0xbe }; static const uint8_t nist_186_2_ecdsa_testvector_30_public_x[] = { /* Qx */ 0x25, 0x2c, 0xfd, 0xa1, 0xf1, 0xf2, 0xba, 0x7a, 0x78, 0xeb, 0x7a, 0xb2, 0xad, 0xab, 0x3d, 0x12, 0xee, 0x83, 0x0c, 0xd0, 0xe8, 0x27, 0xd6, 0x06, 0x35, 0xa8, 0x36, 0x14 }; static const uint8_t nist_186_2_ecdsa_testvector_30_public_y[] = { /* Qy */ 0xca, 0x74, 0x65, 0xc5, 0xfd, 0x9a, 0xd0, 0x7f, 0xdf, 0x54, 0x60, 0xab, 0xcd, 0x94, 0xda, 0x23, 0xe2, 0xee, 0x52, 0x0c, 0xfb, 0xde, 0xf8, 0xeb, 0x66, 0xcc, 0x0b, 0xfc }; /* k = 00d070665ffa8ae33a3662250aaf9b9a84aa611f2854205555febc4f */ static const uint8_t nist_186_2_ecdsa_testvector_30_out[] = { /* R */ 0xa8, 0x17, 0x6f, 0x87, 0x56, 0xa2, 0xfc, 0xc7, 0x3a, 0xd7, 0x99, 0x49, 0x8c, 0xc3, 0xfa, 0x7c, 0xd3, 0x47, 0x46, 0x65, 0x0c, 0x7f, 0xfc, 0x15, 0xb2, 0xd0, 0xa4, 0xe0, /* S */ 0xbc, 0xdb, 0x21, 0x90, 0x02, 0x83, 0x62, 0xbe, 0x80, 0x3d, 0x77, 0x6d, 0xcb, 0x6d, 0xc2, 0xaa, 0xfc, 0xd0, 0xbf, 0x99, 0x97, 0xe7, 0x42, 0x5f, 0x3e, 0x05, 0xdd, 0xf6 }; /* [P-256] */ static const uint8_t nist_186_2_ecdsa_testvector_31_ptx[] = { /* Msg */ 0x5f, 0xf1, 0xfa, 0x17, 0xc2, 0xa6, 0x7c, 0xe5, 0x99, 0xa3, 0x46, 0x88, 0xf6, 0xfb, 0x2d, 0x4a, 0x8a, 0xf1, 0x75, 0x32, 0xd1, 0x5f, 0xa1, 0x86, 0x8a, 0x59, 0x8a, 0x8e, 0x6a, 0x0d, 0xaf, 0x9b, 0x11, 0xed, 0xcc, 0x48, 0x3d, 0x11, 0xae, 0x00, 0x3e, 0xd6, 0x45, 0xc0, 0xaa, 0xcc, 0xfb, 0x1e, 0x51, 0xcf, 0x44, 0x8b, 0x73, 0x73, 0x76, 0xd5, 0x31, 0xa6, 0xdc, 0xf0, 0x42, 0x90, 0x05, 0xf5, 0xe7, 0xbe, 0x62, 0x6b, 0x21, 0x80, 0x11, 0xc6, 0x21, 0x8f, 0xf3, 0x2d, 0x00, 0xf3, 0x04, 0x80, 0xb0, 0x24, 0xec, 0x9a, 0x33, 0x70, 0xd1, 0xd3, 0x0a, 0x9c, 0x70, 0xc9, 0xf1, 0xce, 0x6c, 0x61, 0xc9, 0xab, 0xe5, 0x08, 0xd6, 0xbc, 0x4d, 0x3f, 0x2a, 0x16, 0x77, 0x56, 0x61, 0x3a, 0xf1, 0x77, 0x8f, 0x3a, 0x94, 0xe7, 0x77, 0x1d, 0x59, 0x89, 0xfe, 0x85, 0x6f, 0xa4, 0xdf, 0x8f, 0x8a, 0xe5 }; static const uint8_t nist_186_2_ecdsa_testvector_31_private[] = { /* d */ 0x00, 0x2a, 0x10, 0xb1, 0xb5, 0xb9, 0xfa, 0x0b, 0x78, 0xd3, 0x8e, 0xd2, 0x9c, 0xd9, 0xce, 0xc1, 0x85, 0x20, 0xe0, 0xfe, 0x93, 0x02, 0x3e, 0x35, 0x50, 0xbb, 0x71, 0x63, 0xab, 0x49, 0x05, 0xc6 }; static const uint8_t nist_186_2_ecdsa_testvector_31_public_x[] = { /* Qx */ 0xe9, 0xcd, 0x2e, 0x8f, 0x15, 0xbd, 0x90, 0xcb, 0x07, 0x07, 0xe0, 0x5e, 0xd3, 0xb6, 0x01, 0xaa, 0xce, 0x7e, 0xf5, 0x71, 0x42, 0xa6, 0x46, 0x61, 0xea, 0x1d, 0xd7, 0x19, 0x9e, 0xbb, 0xa9, 0xac }; static const uint8_t nist_186_2_ecdsa_testvector_31_public_y[] = { /* Qy */ 0xc9, 0x6b, 0x01, 0x15, 0xbe, 0xd1, 0xc1, 0x34, 0xb6, 0x8f, 0x89, 0x58, 0x4b, 0x04, 0x0a, 0x19, 0x4b, 0xfa, 0xd9, 0x4a, 0x40, 0x4f, 0xdb, 0x37, 0xad, 0xad, 0x10, 0x7d, 0x5a, 0x0b, 0x4c, 0x5e }; /* k = 00c2815763d7fcb2480b39d154abc03f616f0404e11272d624e825432687092a */ static const uint8_t nist_186_2_ecdsa_testvector_31_out[] = { /* R */ 0x15, 0xbf, 0x46, 0x93, 0x7c, 0x7a, 0x1e, 0x2f, 0xa7, 0xad, 0xc6, 0x5c, 0x89, 0xfe, 0x03, 0xae, 0x60, 0x2d, 0xd7, 0xdf, 0xa6, 0x72, 0x2c, 0xda, 0xfa, 0x92, 0xd6, 0x24, 0xb3, 0x2b, 0x15, 0x6e, /* S */ 0x59, 0xc5, 0x91, 0x79, 0x2e, 0xe9, 0x4f, 0x0b, 0x20, 0x2e, 0x7a, 0x59, 0x0e, 0x70, 0xd0, 0x1d, 0xd8, 0xa9, 0x77, 0x48, 0x84, 0xe2, 0xb5, 0xba, 0x99, 0x45, 0x43, 0x7c, 0xfe, 0xd0, 0x16, 0x86 }; static const uint8_t nist_186_2_ecdsa_testvector_32_ptx[] = { /* Msg */ 0x05, 0xa0, 0x5b, 0xb2, 0x88, 0x29, 0xcf, 0x6f, 0x43, 0x5c, 0x42, 0x2c, 0x09, 0x57, 0xb1, 0x03, 0x59, 0x27, 0x42, 0x93, 0x27, 0x80, 0x26, 0x53, 0xdf, 0xb1, 0xc3, 0x25, 0xa8, 0xd8, 0x13, 0x2f, 0xe6, 0x52, 0x47, 0xe6, 0x02, 0x76, 0xb1, 0x6b, 0x6d, 0x83, 0xe0, 0x1b, 0xe2, 0xd6, 0x0d, 0x62, 0xec, 0x61, 0xb6, 0xcf, 0xa9, 0x58, 0x88, 0x6e, 0xcd, 0x2d, 0x82, 0x52, 0xe9, 0xbf, 0x58, 0x71, 0xee, 0xcf, 0x15, 0xb5, 0xed, 0xb3, 0x05, 0x4f, 0x20, 0x4e, 0xd2, 0x4f, 0x2e, 0x3f, 0xed, 0x71, 0xab, 0x59, 0x2f, 0x3a, 0xde, 0x53, 0xc1, 0x44, 0xc8, 0xc1, 0x39, 0xd7, 0x61, 0x43, 0x05, 0xb8, 0x25, 0xfd, 0x0d, 0x46, 0xcf, 0x47, 0x94, 0xc2, 0x65, 0xa5, 0x5f, 0xef, 0x74, 0xf9, 0x1a, 0xdb, 0x9d, 0xf7, 0xf7, 0xfc, 0x50, 0xda, 0x98, 0x7e, 0xd8, 0x55, 0x2f, 0xdc, 0x98, 0xcd, 0xe4, 0xae }; static const uint8_t nist_186_2_ecdsa_testvector_32_private[] = { /* d */ 0x00, 0xfc, 0x37, 0x66, 0x6c, 0x6b, 0x87, 0xd7, 0xa4, 0x70, 0x1b, 0x14, 0x90, 0x03, 0xf8, 0x76, 0x7f, 0xa3, 0x20, 0x6d, 0x3e, 0x52, 0x36, 0xca, 0x31, 0x71, 0x22, 0xb3, 0xce, 0xc5, 0x90, 0x0a }; static const uint8_t nist_186_2_ecdsa_testvector_32_public_x[] = { /* Qx */ 0x6b, 0xe8, 0x61, 0x3c, 0x70, 0x22, 0xa7, 0x8a, 0x24, 0xd3, 0x8c, 0x44, 0xbe, 0xfd, 0x48, 0x44, 0x66, 0x48, 0xd4, 0xbd, 0x13, 0x45, 0xe1, 0x47, 0x0c, 0x7b, 0x5f, 0x8e, 0xdb, 0x56, 0x82, 0x3b }; static const uint8_t nist_186_2_ecdsa_testvector_32_public_y[] = { /* Qy */ 0x58, 0xd8, 0x49, 0x00, 0xfb, 0x28, 0xf1, 0x5f, 0xde, 0x66, 0xbc, 0x26, 0x45, 0x08, 0xfe, 0xee, 0x5e, 0x54, 0xc0, 0xfa, 0x97, 0x12, 0xce, 0x00, 0x59, 0x90, 0x2e, 0xfb, 0x46, 0xc3, 0x49, 0xa3 }; /* k = 00cb00d310146dc133ca5dddca6f96a20519de714621579381bccaac247929b5 */ static const uint8_t nist_186_2_ecdsa_testvector_32_out[] = { /* R */ 0x43, 0xf4, 0x0b, 0x64, 0x13, 0x53, 0x1e, 0x99, 0xee, 0x4e, 0xbb, 0x2f, 0xb4, 0xc5, 0x8b, 0x89, 0xeb, 0x77, 0x96, 0xf8, 0x4c, 0xae, 0xf3, 0x3c, 0x2b, 0x19, 0x35, 0x77, 0xd1, 0x6e, 0xab, 0x84, /* S */ 0x64, 0x2c, 0x95, 0x93, 0x0b, 0xc2, 0xa1, 0x55, 0xee, 0x2f, 0xf8, 0xa9, 0x42, 0x02, 0xcf, 0xbb, 0x83, 0x49, 0xd3, 0xf6, 0x84, 0x1a, 0x7b, 0xb7, 0x89, 0x58, 0x7a, 0x8a, 0x1c, 0xfe, 0xdb, 0xea }; static const uint8_t nist_186_2_ecdsa_testvector_33_ptx[] = { /* Msg */ 0xf8, 0xe8, 0x19, 0xb6, 0xc3, 0x9d, 0xfc, 0x49, 0x92, 0xdb, 0x85, 0x2a, 0xbf, 0x23, 0x80, 0x01, 0x24, 0x78, 0x34, 0x09, 0xde, 0x14, 0x45, 0x67, 0x50, 0x5a, 0xd9, 0xba, 0x6b, 0x0c, 0xfa, 0xf3, 0x2d, 0xbe, 0x3c, 0x67, 0x68, 0x8a, 0x9f, 0x22, 0xc5, 0x06, 0xb6, 0x7e, 0x08, 0x73, 0x09, 0xf5, 0x96, 0x37, 0xb9, 0x34, 0x34, 0x8e, 0x62, 0x70, 0x11, 0x7c, 0x45, 0xfd, 0x07, 0x06, 0xa7, 0x1d, 0x1e, 0xa1, 0x74, 0x16, 0x52, 0xeb, 0x28, 0x87, 0x96, 0x99, 0xef, 0xfb, 0x18, 0xb0, 0x0b, 0xbf, 0xc7, 0xf9, 0x77, 0xf1, 0x13, 0xae, 0xca, 0xda, 0xf3, 0x7a, 0x5d, 0x7e, 0x2d, 0xa1, 0xb0, 0x70, 0xd2, 0x7a, 0x0a, 0xeb, 0x07, 0x26, 0x60, 0x1f, 0x0b, 0x7c, 0x78, 0xc9, 0x76, 0x43, 0x4f, 0x06, 0xbf, 0xa4, 0xb7, 0x69, 0x01, 0xde, 0x44, 0x4b, 0xff, 0x3c, 0x69, 0x62, 0x65, 0x45, 0xdf, 0x96 }; static const uint8_t nist_186_2_ecdsa_testvector_33_private[] = { /* d */ 0x00, 0x0d, 0xd9, 0xc3, 0x7b, 0x06, 0xa6, 0x62, 0xbb, 0xb3, 0x27, 0xe7, 0xe7, 0x53, 0x7a, 0x47, 0x33, 0x00, 0xde, 0x49, 0x7b, 0x3d, 0xcd, 0x89, 0x0f, 0x3a, 0x25, 0xd9, 0x00, 0x71, 0xa6, 0x08 }; static const uint8_t nist_186_2_ecdsa_testvector_33_public_x[] = { /* Qx */ 0x07, 0x63, 0xb2, 0x46, 0x36, 0xd1, 0x12, 0x29, 0x4a, 0xd6, 0xd8, 0x5f, 0xd7, 0x64, 0x0b, 0x4d, 0xef, 0xde, 0xf5, 0xdf, 0x24, 0x5e, 0x53, 0xc4, 0x27, 0x50, 0xa6, 0x80, 0x83, 0x8e, 0x11, 0x50 }; static const uint8_t nist_186_2_ecdsa_testvector_33_public_y[] = { /* Qy */ 0xb8, 0x7e, 0x87, 0xa4, 0xb3, 0x53, 0x55, 0xc5, 0x31, 0x70, 0x91, 0x56, 0x96, 0x1e, 0x64, 0xd8, 0xc1, 0x7f, 0x63, 0xa4, 0x38, 0xaa, 0xd6, 0x52, 0xfc, 0xc9, 0x86, 0x04, 0xa3, 0x3b, 0xe2, 0xa7 }; /* k = 0045af0ce21481f3daedc4d34b611c75cb1f8a0715f30bf2fb45b017258584d5 */ static const uint8_t nist_186_2_ecdsa_testvector_33_out[] = { /* R */ 0x6f, 0x0a, 0x38, 0x66, 0x10, 0x90, 0x07, 0xc5, 0x28, 0xe4, 0xf7, 0x5b, 0xc4, 0xbe, 0x8f, 0x44, 0x59, 0x06, 0x62, 0x57, 0xd3, 0x54, 0xe7, 0x50, 0xf6, 0x3d, 0x07, 0x3f, 0x2b, 0x7b, 0x8d, 0x36, /* S */ 0xae, 0x80, 0x0d, 0xe3, 0xeb, 0xa8, 0x7a, 0x10, 0x88, 0x90, 0x05, 0x70, 0xca, 0x0c, 0x26, 0x80, 0xd4, 0xbf, 0x8f, 0x6a, 0x7f, 0x70, 0x65, 0x01, 0x62, 0x65, 0x03, 0xdb, 0x41, 0x02, 0xcd, 0x0a }; static const uint8_t nist_186_2_ecdsa_testvector_34_ptx[] = { /* Msg */ 0xad, 0x3f, 0x0a, 0x14, 0xe9, 0xfd, 0xb5, 0x9f, 0xdf, 0x98, 0xb2, 0x87, 0xc9, 0x2e, 0x2e, 0x93, 0x66, 0x55, 0xfe, 0x95, 0x4d, 0x18, 0x8f, 0x92, 0x81, 0x3d, 0x20, 0x23, 0x45, 0xca, 0x2e, 0x1b, 0x32, 0xc7, 0x30, 0x6a, 0x86, 0x44, 0x85, 0x42, 0xbf, 0x9e, 0xab, 0x78, 0x69, 0xff, 0xb1, 0x2c, 0x34, 0x24, 0xef, 0xac, 0x49, 0x63, 0xf4, 0x96, 0xde, 0xec, 0xc0, 0x3d, 0x08, 0x4f, 0x34, 0x4e, 0xd1, 0x3e, 0xc6, 0xb4, 0x8b, 0x94, 0x79, 0xb8, 0x64, 0x97, 0x0d, 0x6d, 0x3a, 0x7a, 0x72, 0x4b, 0xb0, 0x27, 0x83, 0x1a, 0x81, 0x3b, 0xf1, 0x12, 0x14, 0x51, 0x7d, 0x40, 0x51, 0x83, 0x6b, 0x2b, 0xb4, 0x2e, 0x33, 0xb8, 0x9f, 0xf6, 0x79, 0x4b, 0xf5, 0x0a, 0x3f, 0x2f, 0xe4, 0xa9, 0x5a, 0x38, 0x02, 0xe6, 0x22, 0xa6, 0x9c, 0xa8, 0x6e, 0x4d, 0x4a, 0xf4, 0xc0, 0xf3, 0xc7, 0x6f, 0xbc, 0xfa }; static const uint8_t nist_186_2_ecdsa_testvector_34_private[] = { /* d */ 0x00, 0x43, 0xfb, 0x05, 0x12, 0x77, 0xa6, 0xcd, 0xe8, 0x08, 0xa3, 0x4e, 0xa7, 0x5d, 0x38, 0xa8, 0x17, 0x3f, 0x80, 0xec, 0xe4, 0x67, 0x40, 0x82, 0x8b, 0x07, 0x58, 0xd8, 0x29, 0xd8, 0xca, 0x3c }; static const uint8_t nist_186_2_ecdsa_testvector_34_public_x[] = { /* Qx */ 0xfa, 0xb5, 0xc3, 0x5a, 0x7a, 0x6e, 0x21, 0x4f, 0x7a, 0x49, 0x98, 0x66, 0xaa, 0x50, 0xef, 0x16, 0xb8, 0xd9, 0x2e, 0x29, 0xe6, 0x6a, 0x0b, 0x63, 0x19, 0x72, 0x15, 0x22, 0xdb, 0x10, 0x1e, 0xae }; static const uint8_t nist_186_2_ecdsa_testvector_34_public_y[] = { /* Qy */ 0x8f, 0x3f, 0x89, 0xad, 0x8d, 0x36, 0x9e, 0x48, 0x73, 0xe5, 0x66, 0xf2, 0x1b, 0x8a, 0xdf, 0x42, 0x30, 0x4c, 0xb8, 0x10, 0x19, 0xc4, 0x01, 0xc1, 0xb1, 0xde, 0x40, 0x29, 0xe0, 0x24, 0x5d, 0x75 }; /* k = 0036797bf01ddb25973cd9b030b50632d621aac0c653536e751c31c4367de559 */ static const uint8_t nist_186_2_ecdsa_testvector_34_out[] = { /* R */ 0x17, 0xcf, 0xd4, 0xd7, 0xb4, 0x3c, 0x06, 0xa2, 0xa4, 0x39, 0xbc, 0x6d, 0x04, 0xc2, 0xcf, 0x4f, 0xf8, 0xba, 0x83, 0x24, 0xc4, 0xa1, 0xc8, 0xa3, 0x29, 0xa6, 0x18, 0x9f, 0x5d, 0xa5, 0xc2, 0x3b, /* S */ 0x93, 0x02, 0x90, 0x9d, 0x13, 0x17, 0xbb, 0xec, 0xd9, 0x5d, 0x10, 0xee, 0xad, 0x9a, 0xb6, 0x94, 0x33, 0x01, 0x2e, 0xdd, 0xf9, 0x17, 0xc1, 0x2f, 0x6f, 0x91, 0xad, 0xf9, 0xcc, 0x4a, 0x7f, 0x09 }; static const uint8_t nist_186_2_ecdsa_testvector_35_ptx[] = { /* Msg */ 0xe3, 0x7a, 0x43, 0x2c, 0xd6, 0x19, 0x3a, 0x0b, 0x2e, 0x73, 0x45, 0xdf, 0x13, 0xe0, 0xeb, 0x62, 0x68, 0x84, 0x53, 0x72, 0xa3, 0xd1, 0xb3, 0xb7, 0xdc, 0x4d, 0x0c, 0x87, 0x23, 0x96, 0x15, 0x06, 0x17, 0xa3, 0x74, 0x92, 0xb5, 0x4c, 0x34, 0x5e, 0x6d, 0x0d, 0x74, 0x5c, 0x7b, 0x07, 0x5c, 0x61, 0x74, 0x47, 0x56, 0x84, 0x1f, 0x4b, 0x7a, 0xc7, 0x87, 0xc2, 0x49, 0xf9, 0x4e, 0x94, 0x9f, 0xda, 0x44, 0x22, 0xe3, 0x81, 0x38, 0xcf, 0x81, 0xfb, 0x0f, 0xbf, 0x9a, 0x35, 0x13, 0xdf, 0xfa, 0x1b, 0x8d, 0x25, 0x4a, 0x02, 0x95, 0x19, 0x86, 0x43, 0x29, 0x94, 0xb2, 0x29, 0x7d, 0xc7, 0xc9, 0x0e, 0x92, 0x80, 0xf7, 0xc0, 0x0a, 0xa9, 0x07, 0x2a, 0x3b, 0x11, 0x1f, 0x30, 0x82, 0x70, 0xab, 0xda, 0xd9, 0xa5, 0x97, 0xb5, 0xac, 0x41, 0xc1, 0x76, 0xe9, 0x49, 0xae, 0xe1, 0x57, 0x38, 0x7c, 0xe9 }; static const uint8_t nist_186_2_ecdsa_testvector_35_private[] = { /* d */ 0x00, 0xd7, 0x41, 0xac, 0x11, 0x03, 0xee, 0xa6, 0xde, 0x30, 0x31, 0x27, 0x0f, 0xde, 0x37, 0xcb, 0x68, 0x0c, 0x17, 0x28, 0xf0, 0x5f, 0xc0, 0x85, 0x57, 0xbb, 0x35, 0xee, 0x61, 0xea, 0x0b, 0xf7 }; static const uint8_t nist_186_2_ecdsa_testvector_35_public_x[] = { /* Qx */ 0x08, 0xef, 0x74, 0x01, 0x6b, 0x7d, 0x4d, 0xc6, 0x4c, 0x47, 0x98, 0x7b, 0x11, 0x96, 0x74, 0x37, 0xbf, 0xc6, 0xf7, 0xfa, 0x2d, 0x57, 0x00, 0x63, 0xc6, 0xb7, 0x2f, 0x1c, 0x8d, 0x51, 0x25, 0xed }; static const uint8_t nist_186_2_ecdsa_testvector_35_public_y[] = { /* Qy */ 0x1f, 0xc1, 0xcc, 0xb3, 0x17, 0xc3, 0x92, 0x38, 0x25, 0xac, 0x85, 0x26, 0x35, 0x8f, 0xe4, 0xb0, 0x0d, 0x4c, 0xa1, 0x52, 0x6d, 0x86, 0xd7, 0x30, 0x9a, 0x00, 0x4a, 0xcf, 0x0c, 0xfa, 0xe6, 0x37 }; /* k = 005b5852327259b12ba08f9a0e1c82d87f6cdc833dd69fedf05bd9283b8ebc61 */ static const uint8_t nist_186_2_ecdsa_testvector_35_out[] = { /* R */ 0x99, 0x08, 0xaa, 0xe4, 0x3d, 0xee, 0xd6, 0xb5, 0x65, 0x1d, 0x9a, 0x4d, 0x00, 0x41, 0xec, 0xc9, 0x76, 0xe8, 0x19, 0xae, 0x64, 0xe3, 0xe9, 0x38, 0xe0, 0xaf, 0x8b, 0x3d, 0x41, 0xa7, 0x6b, 0x3e, /* S */ 0x32, 0xb1, 0x7d, 0x68, 0x01, 0x9e, 0x94, 0xa3, 0x62, 0xd4, 0x17, 0x8a, 0xa9, 0x54, 0xf5, 0xcf, 0xef, 0xe0, 0xfd, 0x65, 0x9c, 0x34, 0x1c, 0x88, 0xf4, 0xf0, 0x68, 0xeb, 0xf4, 0x8b, 0x97, 0x73 }; static const uint8_t nist_186_2_ecdsa_testvector_36_ptx[] = { /* Msg */ 0x26, 0xd3, 0xfa, 0x2a, 0x1d, 0x6c, 0xfa, 0x12, 0xf6, 0x73, 0x6d, 0x5a, 0x75, 0x2d, 0xdc, 0x7d, 0xff, 0xfd, 0x67, 0x28, 0x59, 0x1f, 0xad, 0x90, 0xb2, 0x99, 0xec, 0x09, 0xe4, 0x6f, 0x69, 0xd5, 0xf7, 0x17, 0x13, 0x39, 0xe6, 0x2c, 0x63, 0xd6, 0xa6, 0x67, 0x86, 0x37, 0x65, 0xca, 0xbe, 0xa7, 0x10, 0x1e, 0x06, 0x45, 0x17, 0xa0, 0xf5, 0x5a, 0x74, 0xf8, 0xe4, 0xe9, 0xea, 0x6a, 0x53, 0x88, 0x8a, 0x50, 0x89, 0x6f, 0x7c, 0xc8, 0x7b, 0xcf, 0xfc, 0xaa, 0xef, 0x65, 0xa3, 0xbd, 0xe1, 0x4e, 0xe8, 0x2a, 0x26, 0x1d, 0xe6, 0x30, 0x4f, 0x2b, 0x60, 0x1a, 0xd0, 0x2e, 0x02, 0x6e, 0x62, 0x0d, 0xe9, 0x68, 0xa5, 0xf3, 0x66, 0xa6, 0x0a, 0xa3, 0xff, 0x25, 0xf0, 0x0b, 0xb7, 0x6c, 0x0d, 0x1b, 0x90, 0x07, 0x10, 0xd7, 0x4d, 0x37, 0x84, 0xab, 0x7c, 0xe8, 0xf8, 0xff, 0xb4, 0xe3, 0x5d, 0x0c }; static const uint8_t nist_186_2_ecdsa_testvector_36_private[] = { /* d */ 0x00, 0xc2, 0xfe, 0x3b, 0x0d, 0x4f, 0x3d, 0x69, 0x09, 0xa3, 0x99, 0xa4, 0x32, 0x47, 0xa2, 0x12, 0x92, 0xff, 0x63, 0x3f, 0x8f, 0x0f, 0x05, 0x3e, 0x39, 0x45, 0x9a, 0xf6, 0xb8, 0x43, 0x7e, 0x6b }; static const uint8_t nist_186_2_ecdsa_testvector_36_public_x[] = { /* Qx */ 0x1b, 0xaf, 0x23, 0xf8, 0x6d, 0x78, 0xaa, 0x82, 0xda, 0x24, 0x8d, 0x2f, 0x9a, 0xcf, 0x65, 0xdf, 0xa2, 0xe7, 0x84, 0x8a, 0x8b, 0xde, 0xbb, 0x93, 0x19, 0x91, 0x68, 0xe6, 0xf0, 0xd4, 0xf5, 0xf9 }; static const uint8_t nist_186_2_ecdsa_testvector_36_public_y[] = { /* Qy */ 0xca, 0x61, 0x98, 0x5b, 0xfc, 0xd0, 0xac, 0x55, 0xf9, 0x5b, 0x73, 0xf0, 0x77, 0x74, 0xd8, 0x71, 0x4b, 0x6c, 0x3b, 0x80, 0xdd, 0xd6, 0x12, 0x3b, 0x3d, 0xac, 0x8a, 0x45, 0xc3, 0x4e, 0x43, 0x5b }; /* k = 00c8c9e7cf43fe62a67a3c998c36931a3a5332f3a47972c26a7813f405ffe851 */ static const uint8_t nist_186_2_ecdsa_testvector_36_out[] = { /* R */ 0xdd, 0xf8, 0xfc, 0x4d, 0x06, 0xef, 0x4b, 0x7b, 0x69, 0xe2, 0x6a, 0xc9, 0xc0, 0x0a, 0xc7, 0xed, 0x9a, 0xe5, 0x50, 0x12, 0xe9, 0xf2, 0xa9, 0x7f, 0x4e, 0xb9, 0x9c, 0xab, 0xae, 0x39, 0x36, 0x60, /* S */ 0x1f, 0x41, 0xca, 0x55, 0x3d, 0xbb, 0x07, 0xd8, 0xe7, 0xd6, 0x8e, 0x36, 0x50, 0xc5, 0x77, 0x7e, 0x42, 0xb3, 0x47, 0x3e, 0x31, 0x90, 0x86, 0x88, 0xc0, 0xd7, 0x32, 0x4a, 0xfa, 0x63, 0x7e, 0xd0 }; static const uint8_t nist_186_2_ecdsa_testvector_37_ptx[] = { /* Msg */ 0x07, 0x2f, 0x0e, 0x1e, 0xd6, 0x22, 0x57, 0x1f, 0x80, 0x60, 0x26, 0x54, 0x3f, 0x4c, 0x24, 0x4e, 0xaf, 0x25, 0x68, 0x5d, 0x2f, 0xd7, 0xf6, 0x04, 0x8a, 0x17, 0x85, 0xab, 0xd7, 0xae, 0x86, 0x94, 0x9d, 0x15, 0x61, 0x10, 0x3b, 0x43, 0x02, 0xf3, 0x87, 0xc3, 0x94, 0x45, 0xb6, 0x09, 0x8c, 0x3a, 0x7c, 0x06, 0xea, 0x64, 0x73, 0xfa, 0xbb, 0x28, 0xc1, 0x8a, 0xe3, 0x6f, 0xf6, 0x12, 0x19, 0x9d, 0x33, 0x3c, 0x33, 0xc7, 0x91, 0xd2, 0xa4, 0x21, 0xc0, 0xd0, 0x43, 0xb5, 0xef, 0xbe, 0x4e, 0x5b, 0xec, 0x3c, 0xae, 0xe5, 0x8d, 0xdf, 0x7c, 0x9a, 0x4e, 0x3b, 0xc5, 0xe6, 0x3b, 0x41, 0x8a, 0x4f, 0x11, 0xcc, 0x0b, 0xab, 0xa0, 0x76, 0x46, 0x90, 0x73, 0xb0, 0xba, 0x0d, 0xb3, 0x12, 0x70, 0x97, 0x49, 0xef, 0x3c, 0x46, 0x43, 0x2d, 0x41, 0x42, 0x79, 0x53, 0xb3, 0x78, 0x70, 0xe4, 0xe1, 0x91 }; static const uint8_t nist_186_2_ecdsa_testvector_37_private[] = { /* d */ 0x00, 0x37, 0xd4, 0xac, 0x2a, 0x27, 0x52, 0x0b, 0x13, 0x03, 0x99, 0x03, 0x91, 0x80, 0x5a, 0xa3, 0xc1, 0x90, 0x65, 0x6e, 0x30, 0xcc, 0x8c, 0x5b, 0x54, 0xb4, 0x89, 0xac, 0x4d, 0x0b, 0x29, 0x5e }; static const uint8_t nist_186_2_ecdsa_testvector_37_public_x[] = { /* Qx */ 0x83, 0x4f, 0x19, 0xc9, 0x36, 0x4b, 0x77, 0xec, 0x0a, 0xcd, 0x04, 0x99, 0x7f, 0x1b, 0x8d, 0xa7, 0xe3, 0x5c, 0x7f, 0x9d, 0x90, 0xd3, 0x05, 0xe4, 0xbb, 0x15, 0x05, 0xd0, 0xc0, 0x72, 0xc2, 0xd9 }; static const uint8_t nist_186_2_ecdsa_testvector_37_public_y[] = { /* Qy */ 0x73, 0x43, 0xfc, 0x4f, 0x25, 0x50, 0x7e, 0x00, 0x0a, 0x12, 0xbf, 0x5c, 0xc5, 0xca, 0x99, 0xe3, 0x10, 0x38, 0x3d, 0x08, 0x24, 0x80, 0x7a, 0x74, 0xfb, 0x31, 0xd3, 0xbc, 0x89, 0xb9, 0x4d, 0x69 }; /* k = 001195d3f0a9f06fd529e351ea3defebd8a68fa6228fcba6e2c23167855d931b */ static const uint8_t nist_186_2_ecdsa_testvector_37_out[] = { /* R */ 0x2a, 0x7b, 0xbe, 0xba, 0x9a, 0x19, 0x25, 0xe6, 0x4c, 0x6e, 0x82, 0x9d, 0x88, 0xc7, 0xa8, 0x93, 0xc2, 0x96, 0x02, 0x73, 0xac, 0x40, 0xd8, 0x2e, 0xa9, 0xb6, 0x6c, 0x98, 0x1a, 0x24, 0xb3, 0x46, /* S */ 0x50, 0x77, 0x20, 0x70, 0x32, 0xc8, 0xa7, 0xbf, 0xd4, 0xae, 0x87, 0x6f, 0x22, 0xbb, 0x54, 0xb3, 0xec, 0x4d, 0x7f, 0x39, 0x4c, 0xf0, 0xc1, 0x52, 0xf6, 0x36, 0xa7, 0x8f, 0xda, 0x8e, 0xb3, 0x5a }; static const uint8_t nist_186_2_ecdsa_testvector_38_ptx[] = { /* Msg */ 0xc2, 0xc0, 0x47, 0x1e, 0x83, 0x03, 0x27, 0xbf, 0x1b, 0x0d, 0xda, 0x7b, 0xb0, 0x36, 0xe1, 0x17, 0xff, 0x1c, 0xf8, 0xb9, 0xab, 0xa4, 0x00, 0x06, 0xd4, 0x3b, 0x3d, 0x87, 0xec, 0x62, 0xc1, 0x51, 0xc6, 0x69, 0x28, 0xe5, 0xf0, 0x7a, 0x86, 0x55, 0x43, 0xda, 0x9e, 0xa8, 0xb8, 0x6c, 0x55, 0x80, 0x7e, 0x77, 0x66, 0xfa, 0x49, 0xa8, 0x56, 0xd6, 0xec, 0x5b, 0xab, 0xd8, 0x2a, 0x16, 0x59, 0x6d, 0xc9, 0x56, 0x7d, 0x92, 0xe9, 0x8f, 0x4d, 0xf2, 0x94, 0x6e, 0x4f, 0x4e, 0x96, 0x61, 0xca, 0x22, 0x8f, 0x59, 0x7b, 0x86, 0x46, 0xcf, 0x88, 0x52, 0x40, 0x05, 0xba, 0x85, 0x92, 0x8e, 0xe6, 0xe8, 0xf3, 0x10, 0xac, 0xee, 0x15, 0x49, 0x64, 0xdf, 0x36, 0x50, 0x56, 0x35, 0xf2, 0x1d, 0x29, 0x47, 0x5b, 0x4c, 0x9f, 0x24, 0x4b, 0x1e, 0x7f, 0xc2, 0xf9, 0xc1, 0xd2, 0x58, 0xcb, 0xd1, 0x51, 0x08 }; static const uint8_t nist_186_2_ecdsa_testvector_38_private[] = { /* d */ 0x00, 0xb3, 0xea, 0x91, 0x54, 0xc8, 0x47, 0x49, 0xf4, 0xd5, 0xee, 0x11, 0x60, 0xfd, 0xd1, 0xca, 0x69, 0x91, 0x87, 0xf3, 0xb3, 0x39, 0xd4, 0xbd, 0x8c, 0xac, 0x32, 0x66, 0xe0, 0x71, 0x4d, 0x0b }; static const uint8_t nist_186_2_ecdsa_testvector_38_public_x[] = { /* Qx */ 0xd2, 0x5e, 0x48, 0xc8, 0x81, 0xcd, 0x1a, 0x8b, 0xf8, 0x01, 0x75, 0x07, 0xa6, 0x51, 0x1e, 0x1c, 0x49, 0x40, 0x98, 0x02, 0xf1, 0x4d, 0x22, 0x6b, 0x56, 0x50, 0x7a, 0x28, 0x0f, 0x82, 0x40, 0xb1 }; static const uint8_t nist_186_2_ecdsa_testvector_38_public_y[] = { /* Qy */ 0xe0, 0xad, 0x27, 0x83, 0x11, 0xc6, 0xe0, 0x8b, 0x65, 0xe7, 0xb1, 0xbb, 0x86, 0x62, 0x7a, 0x43, 0xfc, 0x45, 0xd0, 0x4a, 0x89, 0xc4, 0x28, 0x04, 0xb5, 0x5a, 0x37, 0x88, 0x05, 0x65, 0x56, 0xe2 }; /* k = 0023ded046abaa7858849550559af1ab74205904ba560a050abfa9358958622e */ static const uint8_t nist_186_2_ecdsa_testvector_38_out[] = { /* R */ 0xfe, 0x7e, 0x11, 0x0c, 0x27, 0xf6, 0x9d, 0x4d, 0x8c, 0x31, 0x91, 0x13, 0x67, 0x6c, 0x83, 0xd7, 0xb9, 0xb4, 0xd8, 0xde, 0xdd, 0x5d, 0xb6, 0xa7, 0x58, 0x53, 0xa8, 0xb3, 0x99, 0xaa, 0x27, 0x89, /* S */ 0xc5, 0xd7, 0x71, 0x0e, 0xf8, 0x8a, 0x11, 0x20, 0x0d, 0x84, 0xc7, 0x02, 0xb2, 0x8d, 0x17, 0x48, 0x00, 0xbb, 0xf5, 0xa9, 0xe0, 0x8e, 0xbb, 0xd6, 0x39, 0xfd, 0x4f, 0xb8, 0xaa, 0x6d, 0xd4, 0xdb }; static const uint8_t nist_186_2_ecdsa_testvector_39_ptx[] = { /* Msg */ 0x4f, 0x0f, 0x98, 0x13, 0x0c, 0xd6, 0x88, 0xaf, 0x32, 0xb1, 0x4b, 0xac, 0xad, 0x31, 0x3c, 0xc8, 0xcc, 0xb5, 0x4d, 0xfc, 0x3a, 0x8e, 0x9e, 0xba, 0x2f, 0x60, 0x4e, 0x74, 0xe7, 0xcb, 0x91, 0x5d, 0x54, 0x4b, 0x02, 0x73, 0x10, 0x5d, 0x3b, 0xbd, 0x95, 0xe4, 0xa3, 0xd1, 0xb0, 0xca, 0x88, 0x9a, 0x33, 0xea, 0x6e, 0x58, 0xeb, 0x2e, 0xa6, 0xe8, 0xd1, 0xf4, 0x22, 0x46, 0x84, 0xb7, 0x87, 0x50, 0xf7, 0xeb, 0x84, 0xcd, 0x67, 0x28, 0x63, 0xad, 0x91, 0x8b, 0xdd, 0x92, 0x21, 0x5a, 0x33, 0x90, 0x6d, 0xe6, 0x7a, 0x31, 0x63, 0xb6, 0x36, 0xbd, 0xc0, 0xe1, 0x2b, 0xb8, 0x84, 0xbc, 0x70, 0xab, 0xa2, 0xb5, 0xc5, 0x28, 0xfb, 0x7f, 0x26, 0x08, 0x8d, 0x70, 0xa1, 0xf7, 0xe8, 0x27, 0x64, 0x33, 0xe2, 0x71, 0x1a, 0x90, 0x8c, 0x6e, 0x78, 0xc0, 0x65, 0xef, 0x12, 0xd1, 0xcd, 0x23, 0x74, 0xf7 }; static const uint8_t nist_186_2_ecdsa_testvector_39_private[] = { /* d */ 0x00, 0x48, 0x0a, 0xb6, 0xfa, 0x57, 0x4a, 0xea, 0xa0, 0x41, 0x13, 0x80, 0xcb, 0xfd, 0xc3, 0x87, 0x79, 0x24, 0x32, 0xc3, 0xe0, 0xb4, 0xea, 0xea, 0xf1, 0x61, 0x70, 0x96, 0xf4, 0xf1, 0x1b, 0x89 }; static const uint8_t nist_186_2_ecdsa_testvector_39_public_x[] = { /* Qx */ 0xaf, 0xb9, 0x82, 0x0f, 0xba, 0xb1, 0xf3, 0x1e, 0x84, 0xb7, 0xbe, 0xd0, 0xef, 0x93, 0x05, 0x3e, 0xec, 0x01, 0xe7, 0x09, 0x91, 0x00, 0xbb, 0x29, 0x0d, 0xf1, 0x2a, 0x59, 0x02, 0x8d, 0x0a, 0x37 }; static const uint8_t nist_186_2_ecdsa_testvector_39_public_y[] = { /* Qy */ 0xf3, 0x96, 0x22, 0x09, 0xd8, 0x68, 0x3a, 0x90, 0x7b, 0x8c, 0x20, 0x13, 0x89, 0xb4, 0xcd, 0x2a, 0xb4, 0xd0, 0x78, 0x21, 0x66, 0xa8, 0x8d, 0xc4, 0x20, 0x4a, 0x47, 0x9e, 0x7b, 0x34, 0xd1, 0x01 }; /* k = 0006a94c845c7ef871b0c440bbcb997f688b3fee833354b6981702bc3159479c */ static const uint8_t nist_186_2_ecdsa_testvector_39_out[] = { /* R */ 0xa4, 0x17, 0xad, 0xcf, 0x86, 0xb1, 0xde, 0x7c, 0x40, 0xd3, 0x40, 0x97, 0x79, 0x44, 0x80, 0x55, 0x14, 0xe7, 0x63, 0x7c, 0xba, 0x5e, 0xe8, 0x3e, 0xbb, 0xdb, 0x24, 0x43, 0x56, 0x23, 0x18, 0xa9, /* S */ 0x48, 0xcc, 0x6e, 0xff, 0x80, 0x33, 0x08, 0xb0, 0x2c, 0x9d, 0xdd, 0x73, 0x99, 0x24, 0x13, 0x8f, 0xd5, 0x72, 0xa8, 0xe9, 0xc2, 0x37, 0x64, 0xa1, 0x83, 0x1e, 0xe3, 0xd8, 0x19, 0xbf, 0x08, 0x7a }; static const uint8_t nist_186_2_ecdsa_testvector_40_ptx[] = { /* Msg */ 0x48, 0x49, 0x4b, 0x66, 0x1d, 0x94, 0x4a, 0x04, 0xb2, 0xc3, 0x32, 0x35, 0xaa, 0x7f, 0x51, 0x1b, 0x6a, 0x2a, 0xd4, 0x43, 0x1c, 0xd0, 0xe8, 0x35, 0xfa, 0x5a, 0x20, 0x4a, 0xc9, 0x05, 0x17, 0xbe, 0xa3, 0x13, 0x56, 0x06, 0xfa, 0xc1, 0x78, 0x64, 0xda, 0x78, 0x8c, 0xb8, 0x6e, 0x47, 0xba, 0x99, 0xc6, 0x91, 0x2a, 0xa4, 0xd7, 0x03, 0x21, 0x14, 0xc4, 0xc9, 0x6d, 0x94, 0x5c, 0x02, 0x04, 0x51, 0xe3, 0x71, 0xe8, 0x52, 0x15, 0x75, 0x4d, 0x0c, 0x68, 0x3b, 0xfe, 0x31, 0x92, 0x32, 0xfd, 0xca, 0x4b, 0xbf, 0x69, 0x85, 0x54, 0x33, 0xa5, 0x50, 0xb8, 0xfa, 0xb7, 0x26, 0x52, 0x14, 0xee, 0x29, 0x8f, 0xca, 0xc8, 0xf2, 0x75, 0x99, 0x12, 0x25, 0xe4, 0x73, 0x51, 0x48, 0x1c, 0x27, 0x61, 0xd5, 0x80, 0x1d, 0x5c, 0x8d, 0x9a, 0x46, 0xbe, 0x10, 0x5e, 0x53, 0xc6, 0xab, 0xb3, 0x25, 0x1f, 0x71 }; static const uint8_t nist_186_2_ecdsa_testvector_40_private[] = { /* d */ 0x00, 0xe1, 0x1c, 0x4e, 0xb5, 0x7b, 0xdd, 0x6c, 0x26, 0x6b, 0x57, 0x95, 0xe2, 0xe9, 0x5d, 0x3f, 0x34, 0xf8, 0x02, 0xf8, 0xce, 0x87, 0x28, 0xa6, 0xd9, 0x81, 0xb8, 0x78, 0x7e, 0xcc, 0x10, 0x2c }; static const uint8_t nist_186_2_ecdsa_testvector_40_public_x[] = { /* Qx */ 0x99, 0x7a, 0x53, 0x5b, 0x89, 0x2a, 0xdf, 0x06, 0xaf, 0xe8, 0xfd, 0x17, 0xd9, 0x1b, 0x52, 0xc9, 0x14, 0x9e, 0x1d, 0x83, 0xc3, 0xc7, 0x31, 0x79, 0x00, 0x87, 0x27, 0xef, 0xcd, 0xba, 0x55, 0x21 }; static const uint8_t nist_186_2_ecdsa_testvector_40_public_y[] = { /* Qy */ 0xef, 0x14, 0x2f, 0xa4, 0x8a, 0x4b, 0x75, 0x77, 0x1a, 0x9f, 0x15, 0x6d, 0x22, 0x9c, 0x9d, 0x61, 0xb2, 0x23, 0xa5, 0x73, 0xfa, 0xdb, 0x31, 0x38, 0xb3, 0xd0, 0xb4, 0xd4, 0x11, 0x41, 0x5a, 0x94 }; /* k = 009d3dc147bc10b23b1156aa120e1933f31fa98a4233587941c355ca0b99f0c3 */ static const uint8_t nist_186_2_ecdsa_testvector_40_out[] = { /* R */ 0xd4, 0xed, 0x66, 0xd8, 0xa5, 0xbc, 0x64, 0x0e, 0x01, 0xfd, 0xf9, 0x5a, 0x7f, 0xf2, 0xd0, 0xfe, 0x13, 0x69, 0x2e, 0xb1, 0x21, 0xbf, 0x68, 0x83, 0xfd, 0xc2, 0xbe, 0x93, 0x8d, 0x99, 0x10, 0x60, /* S */ 0xf4, 0x31, 0x68, 0x41, 0x45, 0x38, 0xb8, 0x81, 0x7a, 0x3e, 0x48, 0x35, 0x02, 0x43, 0x7f, 0xd1, 0x68, 0x1a, 0x84, 0xf2, 0x05, 0x39, 0xc0, 0x55, 0x66, 0x8e, 0xaa, 0x5a, 0x93, 0xfa, 0x4d, 0xb0 }; static const uint8_t nist_186_2_ecdsa_testvector_41_ptx[] = { /* Msg */ 0xe6, 0x58, 0x23, 0x93, 0x3d, 0xfb, 0x7d, 0xf5, 0x03, 0x28, 0xbc, 0x28, 0xde, 0x79, 0x61, 0xb4, 0x06, 0xd9, 0xf8, 0x07, 0x05, 0x3b, 0xfb, 0xc5, 0xbb, 0x8c, 0xf3, 0x5f, 0xa4, 0xe5, 0xe0, 0xe7, 0x5e, 0x06, 0xdb, 0x23, 0x65, 0x00, 0xfa, 0xe0, 0x22, 0x31, 0x74, 0x88, 0x24, 0x75, 0x05, 0xf7, 0xad, 0x9b, 0x94, 0x8b, 0x70, 0x16, 0x14, 0x7a, 0x99, 0xf5, 0xa8, 0x69, 0x0e, 0x16, 0x0a, 0x3a, 0xf4, 0x96, 0x2d, 0x25, 0x76, 0x8b, 0x21, 0x0a, 0xc1, 0xf6, 0x38, 0x05, 0x53, 0xf3, 0x67, 0x44, 0x76, 0x33, 0xee, 0x15, 0x07, 0xac, 0x3b, 0x43, 0x7c, 0x8f, 0x0c, 0xa3, 0x26, 0x7b, 0xd5, 0xea, 0xb2, 0xf0, 0x61, 0xc1, 0xf6, 0x06, 0xbb, 0x1c, 0xeb, 0x5f, 0x4f, 0xc7, 0xf5, 0x5a, 0x4d, 0x41, 0x6b, 0x89, 0x4e, 0xce, 0x53, 0x66, 0x3a, 0xc8, 0x6d, 0x41, 0x69, 0x36, 0x74, 0x7d, 0x08, 0xa0 }; static const uint8_t nist_186_2_ecdsa_testvector_41_private[] = { /* d */ 0x00, 0x5e, 0xeb, 0x60, 0x90, 0x1d, 0x07, 0xf4, 0x9f, 0x43, 0x37, 0x44, 0x71, 0x53, 0x06, 0xce, 0xa0, 0x6c, 0xf7, 0x55, 0x07, 0xb7, 0x4f, 0xb8, 0x23, 0x22, 0x3d, 0xc3, 0xad, 0x33, 0xd2, 0x0e }; static const uint8_t nist_186_2_ecdsa_testvector_41_public_x[] = { /* Qx */ 0x00, 0xfe, 0x1a, 0xd1, 0x8e, 0x96, 0x56, 0xd9, 0xd5, 0xfd, 0xc1, 0xcc, 0xce, 0x2f, 0x26, 0x8d, 0xeb, 0xeb, 0x64, 0xeb, 0xb0, 0xb3, 0x9f, 0xed, 0x65, 0x7d, 0x20, 0x51, 0x72, 0x7b, 0x0a, 0x57 }; static const uint8_t nist_186_2_ecdsa_testvector_41_public_y[] = { /* Qy */ 0xef, 0x4d, 0x02, 0xfd, 0xa8, 0x98, 0x26, 0x6c, 0x96, 0xd7, 0xcf, 0x20, 0x31, 0xd1, 0xe0, 0xd5, 0x6e, 0x15, 0x8e, 0xe0, 0xa0, 0x7f, 0xec, 0xb4, 0xc8, 0xa1, 0x4a, 0x02, 0x1d, 0x98, 0x45, 0x84 }; /* k = 007188abf3ed30221ff28c8adf1c2af5b40bb4021ea5d94672ee7308c5154807 */ static const uint8_t nist_186_2_ecdsa_testvector_41_out[] = { /* R */ 0xd5, 0x60, 0x4a, 0xec, 0xac, 0x4f, 0x8b, 0x69, 0xd5, 0xfe, 0x0e, 0xe8, 0xee, 0x9d, 0x0d, 0x59, 0x18, 0xd3, 0x78, 0xcc, 0x9c, 0x38, 0x86, 0x2a, 0x85, 0xca, 0xb1, 0x01, 0x82, 0x83, 0x6f, 0x62, /* S */ 0xc7, 0x10, 0x48, 0x58, 0xcd, 0x7b, 0xcc, 0x41, 0x8b, 0x4f, 0x2c, 0x36, 0x73, 0x94, 0x5d, 0x47, 0xe9, 0x56, 0x7f, 0xa0, 0x5a, 0x90, 0x28, 0xe0, 0x0d, 0x9a, 0xed, 0x06, 0xea, 0x85, 0x40, 0x68 }; static const uint8_t nist_186_2_ecdsa_testvector_42_ptx[] = { /* Msg */ 0x4c, 0xe3, 0x7a, 0x16, 0xce, 0xed, 0xe9, 0x5d, 0x71, 0xd6, 0xf9, 0x10, 0xfa, 0x9f, 0xb3, 0xda, 0xef, 0x05, 0xf8, 0xee, 0x4d, 0x5d, 0xd0, 0x02, 0x7d, 0xc3, 0xfe, 0x9b, 0x85, 0x73, 0xd8, 0x8c, 0x7c, 0x77, 0x55, 0xb9, 0x40, 0x83, 0x68, 0x21, 0x6b, 0x1d, 0x8c, 0x1c, 0x82, 0x00, 0xa0, 0xe0, 0x70, 0xc3, 0xf6, 0x4a, 0x33, 0xb6, 0xa7, 0xdc, 0xd6, 0x0d, 0x29, 0x02, 0x9f, 0x40, 0x23, 0x99, 0x89, 0xb1, 0x7f, 0xb1, 0xf4, 0x90, 0xc1, 0x92, 0x9c, 0xfb, 0x98, 0xfe, 0xc8, 0x6a, 0xb3, 0xb6, 0xc4, 0x4b, 0xd6, 0x40, 0x90, 0xe9, 0x2d, 0xe6, 0xda, 0x92, 0xe0, 0x02, 0x2a, 0xf9, 0xe7, 0x79, 0x5d, 0xd9, 0x20, 0x86, 0x54, 0xdb, 0x9f, 0xb9, 0xed, 0xba, 0x45, 0x3f, 0x32, 0xa5, 0x94, 0x63, 0xd1, 0xe5, 0xc1, 0x55, 0xcd, 0xbf, 0x0b, 0x2a, 0x72, 0x9c, 0x4c, 0x25, 0x8e, 0x67, 0xce, 0x35 }; static const uint8_t nist_186_2_ecdsa_testvector_42_private[] = { /* d */ 0x00, 0x9d, 0x5f, 0xd2, 0x23, 0x02, 0xb0, 0xb2, 0xd0, 0xd8, 0xe9, 0x0c, 0x62, 0x3b, 0xa5, 0x36, 0x1c, 0xaa, 0x2c, 0xa0, 0x53, 0x23, 0x97, 0x2c, 0x62, 0x82, 0x9a, 0xe1, 0x60, 0xb4, 0xfb, 0xfe }; static const uint8_t nist_186_2_ecdsa_testvector_42_public_x[] = { /* Qx */ 0xad, 0xcf, 0x9c, 0x09, 0x04, 0x41, 0x48, 0xd3, 0xe2, 0x4a, 0xc4, 0x12, 0xeb, 0x96, 0x85, 0x30, 0x19, 0xcc, 0x39, 0xdf, 0x61, 0xd3, 0xa6, 0xdc, 0x25, 0xa4, 0xa1, 0x74, 0xd1, 0xe6, 0x55, 0x03 }; static const uint8_t nist_186_2_ecdsa_testvector_42_public_y[] = { /* Qy */ 0x0c, 0x53, 0xf5, 0x52, 0x19, 0x2b, 0x2e, 0x70, 0x93, 0xef, 0x35, 0x8d, 0x11, 0x27, 0x58, 0x49, 0x5e, 0x67, 0xb8, 0x7a, 0x4e, 0x26, 0x90, 0x4f, 0xbf, 0x3b, 0xbb, 0x89, 0x9b, 0xde, 0x7c, 0x26 }; /* k = 001b1768e9de3db0bb64886c4e3becf3af3c680bc49e28263bdeddd10ede71d7 */ static const uint8_t nist_186_2_ecdsa_testvector_42_out[] = { /* R */ 0x3e, 0x6d, 0xdd, 0xb2, 0x0c, 0xea, 0x38, 0x8e, 0x69, 0x47, 0xb8, 0xb8, 0xaf, 0x28, 0x60, 0xf5, 0xbc, 0x38, 0x5d, 0xb8, 0x19, 0xdf, 0x33, 0x7e, 0x2f, 0x7c, 0x05, 0x64, 0xfc, 0x69, 0xdd, 0xb6, /* S */ 0x13, 0xb2, 0xf3, 0xfe, 0x0f, 0x6e, 0x3f, 0x33, 0x01, 0x5e, 0xc2, 0x7c, 0xa9, 0xbb, 0xaa, 0x4e, 0x0e, 0xf9, 0x37, 0x12, 0x19, 0x2d, 0x37, 0x9d, 0xdb, 0xbf, 0x09, 0x13, 0xa8, 0xbd, 0x04, 0x59 }; static const uint8_t nist_186_2_ecdsa_testvector_43_ptx[] = { /* Msg */ 0xb3, 0xa9, 0xa9, 0xb4, 0x63, 0x11, 0x43, 0xaa, 0x6e, 0x67, 0x1f, 0xc1, 0x68, 0xfc, 0x15, 0xff, 0x90, 0x27, 0xf2, 0x8f, 0xae, 0x98, 0x77, 0xb9, 0x42, 0xe9, 0xa4, 0x12, 0xda, 0x76, 0x36, 0xf0, 0xc4, 0x6f, 0x6e, 0x21, 0xe5, 0x2b, 0x14, 0xdd, 0xe9, 0xbf, 0xbc, 0xf8, 0x9d, 0xd0, 0x48, 0x5c, 0x98, 0xa5, 0xae, 0xb7, 0x21, 0x80, 0xfb, 0x71, 0x4d, 0x2f, 0x98, 0xe1, 0x68, 0xde, 0xcc, 0xc0, 0x96, 0x2f, 0x83, 0xde, 0xba, 0x8d, 0x4e, 0x13, 0x97, 0xbd, 0xaa, 0x79, 0x36, 0xb5, 0x85, 0xd8, 0x87, 0xb2, 0xfe, 0x62, 0x4a, 0x85, 0x6d, 0xa1, 0x30, 0x2d, 0xa3, 0xad, 0x3e, 0xab, 0x73, 0xa2, 0x73, 0x12, 0x71, 0x51, 0xaa, 0xde, 0xf9, 0x36, 0xc2, 0x86, 0x73, 0xab, 0xfb, 0x55, 0xd6, 0x5a, 0xa3, 0x75, 0x6b, 0xf8, 0xf3, 0x4d, 0xd4, 0x31, 0x34, 0x0d, 0x4c, 0xde, 0x25, 0x86, 0x30, 0x7e }; static const uint8_t nist_186_2_ecdsa_testvector_43_private[] = { /* d */ 0x00, 0x41, 0x2b, 0xc9, 0x4f, 0x1a, 0x48, 0xff, 0xee, 0x13, 0xc3, 0xe9, 0x6c, 0xdf, 0xc9, 0x4f, 0x3f, 0xe6, 0xef, 0x9d, 0x62, 0xf2, 0x26, 0x3a, 0x11, 0x82, 0xed, 0xcc, 0x62, 0xfe, 0x9c, 0x84 }; static const uint8_t nist_186_2_ecdsa_testvector_43_public_x[] = { /* Qx */ 0x5c, 0xa2, 0xc1, 0x76, 0x1d, 0x40, 0x0a, 0x62, 0x61, 0x7e, 0x79, 0xfe, 0x5f, 0xb2, 0x8c, 0xe6, 0x6d, 0xca, 0x62, 0xd0, 0xac, 0x26, 0x37, 0x93, 0x5e, 0xd1, 0xca, 0xf4, 0x94, 0x7f, 0x70, 0xed }; static const uint8_t nist_186_2_ecdsa_testvector_43_public_y[] = { /* Qy */ 0x5d, 0x79, 0xc1, 0xb7, 0x78, 0xd6, 0xd3, 0x1c, 0x84, 0x91, 0xc3, 0x83, 0x47, 0xf2, 0x67, 0x8f, 0xc4, 0x5c, 0x86, 0x75, 0xc7, 0x4a, 0x5a, 0x42, 0x89, 0x5b, 0x1e, 0xd5, 0x38, 0x5f, 0xc7, 0xf9 }; /* k = 00a0d4137f3e02ee6b17f1ce5204bf138802ec7136bc3a048579a28efec5635f */ static const uint8_t nist_186_2_ecdsa_testvector_43_out[] = { /* R */ 0xb2, 0x62, 0x19, 0xaf, 0x8c, 0xbd, 0xb9, 0x5c, 0x24, 0xba, 0x66, 0x9f, 0x0c, 0x54, 0x63, 0x7b, 0x27, 0xec, 0x05, 0xc7, 0x12, 0x1a, 0x3c, 0x21, 0xb9, 0x0e, 0xfd, 0xc0, 0x55, 0xf2, 0x3f, 0xd2, /* S */ 0x7f, 0x9a, 0x56, 0xfd, 0x23, 0xf6, 0xe9, 0x30, 0x34, 0x10, 0x7d, 0xbc, 0xb3, 0xd5, 0xf2, 0x5d, 0xcf, 0x32, 0x5d, 0xbf, 0x59, 0xbb, 0x9f, 0xc8, 0x6b, 0x7b, 0xb6, 0x2b, 0x54, 0x5f, 0xf2, 0x59 }; static const uint8_t nist_186_2_ecdsa_testvector_44_ptx[] = { /* Msg */ 0xec, 0x23, 0x56, 0xa8, 0xa3, 0xcc, 0x35, 0xbe, 0x88, 0xeb, 0xaf, 0x0d, 0xa7, 0xac, 0x4e, 0xc5, 0xfe, 0x66, 0x21, 0x8b, 0x32, 0x7c, 0x0e, 0x79, 0x81, 0x81, 0x6a, 0x66, 0xf8, 0x9f, 0xc7, 0x68, 0xe6, 0x39, 0x0d, 0x98, 0x90, 0xcf, 0xcd, 0x15, 0x26, 0x22, 0xd1, 0x4c, 0xf6, 0x99, 0xf8, 0x76, 0xe0, 0xe4, 0x41, 0x61, 0x0a, 0xdf, 0x25, 0x74, 0xd5, 0xb9, 0x2a, 0xee, 0x0f, 0x55, 0xb5, 0x6e, 0x6a, 0xf0, 0x1f, 0xb8, 0x2c, 0x05, 0x0c, 0xb6, 0x29, 0x6d, 0xf8, 0xbd, 0xee, 0xcb, 0x13, 0x12, 0x40, 0x27, 0x4f, 0xad, 0xc5, 0xd9, 0xb7, 0x3c, 0x00, 0xa9, 0x02, 0x6b, 0x83, 0x34, 0x68, 0x63, 0x5f, 0x92, 0xb4, 0x90, 0xe0, 0x35, 0x9b, 0xa8, 0x77, 0x14, 0x4c, 0xe9, 0xf8, 0x09, 0x48, 0xa2, 0x05, 0x78, 0x74, 0xf4, 0xca, 0x32, 0x6c, 0xda, 0xec, 0x99, 0x1b, 0x67, 0xbb, 0x04, 0x89, 0x4f }; static const uint8_t nist_186_2_ecdsa_testvector_44_private[] = { /* d */ 0x00, 0x81, 0x27, 0xb4, 0xaa, 0x2a, 0xec, 0x3b, 0x30, 0x27, 0xab, 0x7f, 0x8b, 0x5d, 0xf1, 0xcb, 0x41, 0x54, 0xdc, 0x5c, 0x6a, 0x03, 0x30, 0xa2, 0x32, 0xec, 0x07, 0xe5, 0x94, 0xd3, 0x06, 0xcc }; static const uint8_t nist_186_2_ecdsa_testvector_44_public_x[] = { /* Qx */ 0x79, 0x89, 0x9b, 0x96, 0xa4, 0x40, 0xc9, 0x12, 0xe4, 0x6e, 0x31, 0xc6, 0x4d, 0xcd, 0xb8, 0xc1, 0x8d, 0x3d, 0x8a, 0x29, 0xb7, 0x75, 0xe4, 0xc0, 0xff, 0xec, 0xe9, 0x1f, 0xaf, 0xb7, 0xc4, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_44_public_y[] = { /* Qy */ 0x4f, 0x14, 0x68, 0x9d, 0xed, 0x44, 0xbe, 0xcc, 0x4d, 0x74, 0x01, 0xbf, 0x39, 0xcc, 0x36, 0x8f, 0xa1, 0x83, 0xfe, 0xba, 0x2e, 0x41, 0x6c, 0xe1, 0x61, 0x7d, 0x59, 0xfe, 0x4c, 0x2b, 0xa7, 0x7c }; /* k = 00d30706db4e88261037558bf275fb93c7d8778fe20b832e4e3b9b162b1ed12b */ static const uint8_t nist_186_2_ecdsa_testvector_44_out[] = { /* R */ 0x54, 0xe8, 0x2e, 0xa0, 0xaf, 0xf8, 0x3d, 0xfb, 0xeb, 0x8c, 0xea, 0x1f, 0xdd, 0x7d, 0x69, 0x50, 0xd6, 0xdd, 0x34, 0x46, 0xc1, 0xee, 0x52, 0x45, 0x53, 0xc6, 0x0d, 0x54, 0x81, 0xcc, 0x52, 0x1e, /* S */ 0xf7, 0x51, 0x43, 0x14, 0xdf, 0x4c, 0x0e, 0xb7, 0xfe, 0x0d, 0x95, 0xdf, 0x0f, 0xc6, 0xfe, 0x5e, 0x38, 0xb8, 0x59, 0x06, 0x13, 0x55, 0x5a, 0x8d, 0xb2, 0x86, 0x9c, 0x6f, 0x87, 0x41, 0xdc, 0x25 }; static const uint8_t nist_186_2_ecdsa_testvector_45_ptx[] = { /* Msg */ 0x3b, 0xda, 0x9b, 0xb0, 0xd7, 0xe0, 0x36, 0x13, 0x51, 0xc2, 0xdf, 0x68, 0xa1, 0x28, 0xee, 0xb9, 0x75, 0x95, 0x2a, 0xbd, 0x79, 0x98, 0x33, 0xac, 0xd6, 0x46, 0x1d, 0x51, 0xf8, 0xe7, 0x5e, 0x61, 0x95, 0xf0, 0xea, 0x0b, 0xeb, 0x32, 0x9c, 0xd0, 0x49, 0x50, 0xd8, 0x95, 0xd0, 0x76, 0x6f, 0xf7, 0x7b, 0x48, 0xc2, 0xde, 0x5d, 0x19, 0x2b, 0x55, 0x2a, 0x5e, 0x98, 0x99, 0xf9, 0x62, 0x79, 0x6f, 0x48, 0x3b, 0xdd, 0xbb, 0x41, 0xfc, 0xd7, 0x4f, 0x3c, 0x2c, 0x27, 0x01, 0x84, 0x77, 0x16, 0x00, 0x5e, 0xa4, 0xa2, 0x68, 0x47, 0xc7, 0xdb, 0x13, 0x7e, 0xb8, 0x8d, 0xb3, 0xc2, 0xc3, 0x1f, 0x1d, 0x5d, 0xa1, 0xbb, 0xe8, 0x61, 0xa7, 0xb0, 0x37, 0x32, 0x3e, 0x14, 0xd3, 0x44, 0x93, 0xad, 0x7d, 0x26, 0x90, 0x12, 0x82, 0xc0, 0x0a, 0x0d, 0x8f, 0xd9, 0x3c, 0x44, 0xc7, 0xdc, 0x74, 0x18, 0x13 }; static const uint8_t nist_186_2_ecdsa_testvector_45_private[] = { /* d */ 0x00, 0xd0, 0x07, 0xe1, 0xb9, 0xaf, 0xcc, 0x31, 0x2e, 0xec, 0x9c, 0xec, 0xff, 0xa0, 0x28, 0x07, 0x52, 0xbb, 0xd1, 0x95, 0x31, 0x82, 0xed, 0xef, 0x12, 0xf3, 0xfc, 0x36, 0x6e, 0x8f, 0x43, 0x56 }; static const uint8_t nist_186_2_ecdsa_testvector_45_public_x[] = { /* Qx */ 0xd6, 0x60, 0x62, 0x71, 0x13, 0x1e, 0x7e, 0x7e, 0x61, 0x7a, 0x81, 0xaa, 0x11, 0xf0, 0x9e, 0x7e, 0xd5, 0x63, 0x11, 0x82, 0x88, 0x23, 0x36, 0x7a, 0x86, 0x9b, 0x45, 0x40, 0x40, 0xb3, 0xf9, 0x05 }; static const uint8_t nist_186_2_ecdsa_testvector_45_public_y[] = { /* Qy */ 0xcf, 0x48, 0x97, 0x76, 0x61, 0x31, 0xaa, 0x8b, 0x7f, 0x80, 0x45, 0x3a, 0x15, 0xbf, 0x90, 0xf7, 0x51, 0x78, 0x78, 0x57, 0x9d, 0x5a, 0x4f, 0x97, 0x3a, 0xea, 0x5b, 0xb1, 0x15, 0x42, 0xe0, 0x7f }; /* k = 00c03c3b8b1e40cb328a61d51783356935625884399e26a5828f387c2bde6ebc */ static const uint8_t nist_186_2_ecdsa_testvector_45_out[] = { /* R */ 0xb5, 0xb4, 0x17, 0x61, 0x9b, 0xf9, 0xfa, 0x89, 0xd5, 0x0b, 0x3e, 0x22, 0x78, 0x2a, 0x2d, 0xe8, 0x0a, 0x86, 0xdb, 0x67, 0xe7, 0x28, 0x11, 0x4e, 0x6e, 0x0e, 0x91, 0xca, 0xb1, 0xa4, 0x16, 0x12, /* S */ 0xe4, 0x3e, 0x81, 0x11, 0x25, 0x8b, 0xea, 0x6f, 0x5c, 0x96, 0xbd, 0x6d, 0x66, 0x71, 0x57, 0x48, 0xfb, 0xee, 0x75, 0x6d, 0xa4, 0x18, 0xde, 0x90, 0xf6, 0x40, 0x66, 0xc6, 0xb3, 0xe0, 0x72, 0xf1 }; /* [P-384] */ static const uint8_t nist_186_2_ecdsa_testvector_46_ptx[] = { /* Msg */ 0x4c, 0x06, 0x49, 0x1c, 0x03, 0x9e, 0x8a, 0x81, 0x9b, 0xbc, 0xbd, 0x80, 0x15, 0x2d, 0x0c, 0xed, 0xfe, 0x1a, 0x8c, 0xd6, 0x44, 0x8a, 0xb8, 0x1e, 0x48, 0x28, 0x1f, 0x68, 0x34, 0x47, 0x59, 0x36, 0x8f, 0x23, 0x3f, 0x52, 0x0f, 0x69, 0x5c, 0x6e, 0xae, 0xfa, 0x9e, 0x07, 0xff, 0xec, 0x51, 0x8f, 0xc3, 0xd2, 0x4e, 0xca, 0xb8, 0x3e, 0x70, 0x79, 0xb1, 0x84, 0x48, 0x36, 0xeb, 0xc0, 0x12, 0x9f, 0x9f, 0x1a, 0xe7, 0xb6, 0xd4, 0x48, 0x34, 0x88, 0x77, 0x55, 0x6a, 0x0d, 0xad, 0xa1, 0xf7, 0x50, 0x68, 0x2a, 0x76, 0xcf, 0x39, 0x09, 0x22, 0x25, 0x65, 0x40, 0x91, 0xe6, 0x3a, 0xb2, 0x9f, 0xcb, 0xa3, 0x73, 0xa8, 0x0f, 0xfb, 0x42, 0xfa, 0x18, 0x1f, 0x54, 0x89, 0x5a, 0xc7, 0x54, 0xe5, 0x79, 0x16, 0xa7, 0x6a, 0xad, 0x6f, 0xf4, 0xb6, 0x6b, 0x8b, 0xe4, 0x61, 0x42, 0xc8, 0x26, 0xe8, 0x03 }; static const uint8_t nist_186_2_ecdsa_testvector_46_private[] = { /* d */ 0x00, 0x82, 0x75, 0x7d, 0x5b, 0x9d, 0xb0, 0x84, 0xbd, 0x2e, 0x09, 0x21, 0xa6, 0xce, 0x62, 0x10, 0x76, 0xf3, 0xf4, 0x3a, 0x52, 0x35, 0x65, 0xa7, 0x67, 0x10, 0xc9, 0xa1, 0xdc, 0xc7, 0xc5, 0xf4, 0xb1, 0xa4, 0x23, 0x7f, 0x24, 0xc5, 0x36, 0x14, 0x15, 0x3e, 0xd9, 0x7b, 0x42, 0x3a, 0x27, 0x77 }; static const uint8_t nist_186_2_ecdsa_testvector_46_public_x[] = { /* Qx */ 0x32, 0x71, 0x93, 0x8d, 0x4c, 0xd1, 0x44, 0x00, 0x6b, 0x45, 0xc7, 0x3f, 0x2a, 0x89, 0x30, 0xdf, 0xf8, 0x23, 0x8e, 0x72, 0x20, 0x49, 0x60, 0x00, 0xbe, 0x36, 0x94, 0xaa, 0x54, 0x18, 0x06, 0x32, 0x71, 0xc2, 0xe1, 0x29, 0x12, 0xb6, 0xc1, 0xcb, 0xc0, 0x3c, 0x41, 0x75, 0x37, 0x3c, 0x3a, 0x3e }; static const uint8_t nist_186_2_ecdsa_testvector_46_public_y[] = { /* Qy */ 0xd3, 0x4f, 0x52, 0x57, 0xd2, 0x30, 0xa4, 0x64, 0x95, 0x8d, 0x1f, 0xff, 0x57, 0x0a, 0x2f, 0x55, 0xfe, 0x64, 0x01, 0xc8, 0x3a, 0x61, 0x3a, 0x53, 0x38, 0x9a, 0x82, 0x95, 0x7e, 0xaa, 0x63, 0x9e, 0x38, 0x98, 0xcf, 0xe9, 0x82, 0x3d, 0x57, 0xb3, 0x8b, 0xae, 0xe3, 0x0f, 0x5c, 0x94, 0xf7, 0xe1 }; /* k = 003d87d4516517e73854719d4ba3ecc1c6f90e1438b540c628f22d177b7bff158f6dc5b11d20ac390a57516f061c25b4 */ static const uint8_t nist_186_2_ecdsa_testvector_46_out[] = { /* R */ 0xa8, 0x92, 0x97, 0x84, 0xc4, 0x3f, 0xa3, 0xd1, 0x1e, 0x31, 0x69, 0x61, 0x61, 0x31, 0xa9, 0x61, 0xc8, 0x80, 0xba, 0x74, 0x42, 0xca, 0xdc, 0xab, 0x6d, 0xf9, 0x87, 0x44, 0xdb, 0x7d, 0x1e, 0xc0, 0x15, 0x0a, 0x5e, 0x34, 0x5c, 0xc1, 0x49, 0x9d, 0xb7, 0x1e, 0xd7, 0x17, 0x5d, 0xb2, 0x95, 0x4d, /* S */ 0x56, 0xdd, 0xef, 0x0b, 0x15, 0xa8, 0x80, 0x4b, 0x08, 0x90, 0x9e, 0x66, 0x96, 0x58, 0x1b, 0x7d, 0x5a, 0x3a, 0xba, 0x1c, 0x7d, 0x28, 0x0c, 0x74, 0x86, 0xbc, 0x26, 0x4a, 0x24, 0x63, 0x54, 0x47, 0x0d, 0x80, 0x3e, 0xac, 0x03, 0x4b, 0xbe, 0x0d, 0xc9, 0xe7, 0x8a, 0x74, 0x2c, 0x83, 0x16, 0x0f }; static const uint8_t nist_186_2_ecdsa_testvector_47_ptx[] = { /* Msg */ 0x9d, 0xb0, 0xc2, 0x58, 0x24, 0x41, 0xd8, 0xfa, 0xd4, 0xb5, 0x2f, 0x1f, 0x29, 0xa8, 0xc2, 0x64, 0xa0, 0xb2, 0x99, 0x42, 0x1c, 0x3b, 0x4a, 0x86, 0x87, 0x91, 0xc0, 0x02, 0xbc, 0x37, 0x3b, 0x83, 0xa5, 0x81, 0x98, 0x03, 0xa0, 0x5d, 0xd3, 0x1f, 0x28, 0x74, 0xca, 0xcb, 0xb1, 0x72, 0x43, 0x44, 0xd3, 0xa1, 0x31, 0x46, 0xab, 0xbd, 0x33, 0x80, 0x7f, 0x04, 0x5e, 0x45, 0xa0, 0x8c, 0x3c, 0x84, 0x95, 0xd9, 0x14, 0xfa, 0x75, 0xaf, 0x6c, 0xa6, 0x95, 0x25, 0xcd, 0x7d, 0x63, 0xfb, 0xc6, 0x60, 0x92, 0x2d, 0x33, 0x4b, 0x78, 0xc8, 0xc0, 0xcf, 0xb4, 0xfd, 0xa8, 0xc2, 0x13, 0x74, 0xc3, 0x35, 0xb5, 0xe3, 0xbf, 0xa6, 0x6b, 0xde, 0xad, 0x77, 0x64, 0xf1, 0xc0, 0x9f, 0x09, 0xec, 0x52, 0xa0, 0x25, 0x7e, 0x28, 0xb9, 0x49, 0x05, 0xf7, 0x5c, 0x6f, 0xa5, 0x27, 0xe2, 0xdd, 0x97, 0xd6, 0x7e }; static const uint8_t nist_186_2_ecdsa_testvector_47_private[] = { /* d */ 0x00, 0x73, 0x04, 0x6c, 0x07, 0xdf, 0x4a, 0x1d, 0xbf, 0xba, 0xb1, 0x9c, 0x24, 0x8b, 0x8c, 0x2b, 0x5c, 0x27, 0xe5, 0x86, 0x4a, 0xd4, 0x4b, 0xe3, 0x4d, 0xf4, 0x76, 0x78, 0xde, 0x5b, 0x9c, 0xbd, 0xc7, 0x47, 0x3b, 0xe9, 0x52, 0x58, 0xfb, 0x43, 0x20, 0xfd, 0x70, 0x03, 0x15, 0x62, 0x84, 0xfc }; static const uint8_t nist_186_2_ecdsa_testvector_47_public_x[] = { /* Qx */ 0x24, 0x38, 0xdf, 0xad, 0x2b, 0x99, 0x6d, 0x6e, 0xad, 0xf9, 0x78, 0x45, 0xdc, 0xc2, 0xe6, 0x86, 0xd8, 0xc5, 0x48, 0x43, 0x07, 0x70, 0xb8, 0x1e, 0xf9, 0xaf, 0x84, 0xd7, 0xae, 0xe5, 0x5c, 0xbd, 0x14, 0xeb, 0x84, 0xfc, 0xce, 0x7e, 0x3c, 0x5e, 0x90, 0x19, 0xd2, 0x1b, 0x1d, 0xbb, 0x58, 0x97 }; static const uint8_t nist_186_2_ecdsa_testvector_47_public_y[] = { /* Qy */ 0xb3, 0xa0, 0xee, 0x8e, 0x90, 0x95, 0x70, 0x18, 0x92, 0xf7, 0x37, 0x09, 0x9a, 0x74, 0xc7, 0xde, 0xe3, 0x50, 0x5e, 0x87, 0xbe, 0x8d, 0xbe, 0xa4, 0xbf, 0x1e, 0xa5, 0x55, 0xf9, 0x3d, 0x44, 0x8f, 0xde, 0xef, 0x50, 0x9d, 0x9b, 0x67, 0x95, 0xf8, 0x4d, 0x6d, 0x9a, 0xc0, 0x9c, 0x9b, 0xa8, 0x12 }; /* k = 002ec0faebc17e7fa2dcdbc11a94049022b2cdc2afce60428a97206fb3f35194d75e7b1d305a3069e590b13800256bc1 */ static const uint8_t nist_186_2_ecdsa_testvector_47_out[] = { /* R */ 0xf6, 0xb7, 0xbb, 0x08, 0x2f, 0x67, 0x75, 0x75, 0x1e, 0x12, 0x3c, 0x67, 0x54, 0x8a, 0xaf, 0xc3, 0x44, 0xce, 0x68, 0x9b, 0x63, 0xb7, 0xbd, 0x3b, 0x6b, 0x34, 0x9b, 0xe1, 0x6e, 0x19, 0xda, 0x9b, 0x9d, 0xac, 0x4e, 0x42, 0x4a, 0xc6, 0x46, 0xc0, 0xf2, 0x44, 0xd6, 0xbc, 0x51, 0x6d, 0x30, 0xac, /* S */ 0x5b, 0x95, 0x57, 0x4d, 0x2f, 0x2c, 0x99, 0xef, 0xe9, 0xbb, 0x1b, 0xbe, 0xea, 0xda, 0x2d, 0x17, 0x42, 0xd4, 0xff, 0xff, 0xf2, 0x11, 0x02, 0x14, 0x77, 0x07, 0x62, 0x94, 0x90, 0x76, 0x5e, 0xe4, 0x51, 0x3a, 0x90, 0x9e, 0xa7, 0xa4, 0x05, 0xce, 0x84, 0x02, 0x2f, 0xbd, 0xde, 0x77, 0x26, 0xc8 }; static const uint8_t nist_186_2_ecdsa_testvector_48_ptx[] = { /* Msg */ 0xd4, 0xe1, 0x2e, 0x9a, 0x4a, 0x91, 0x28, 0xca, 0xa0, 0x1d, 0x19, 0x7c, 0x41, 0x55, 0x5e, 0x24, 0x21, 0x6e, 0x2a, 0xbc, 0xa1, 0x54, 0x87, 0xba, 0xb3, 0x41, 0x97, 0x3f, 0x3e, 0x8f, 0x20, 0x91, 0xc4, 0xcb, 0x47, 0xcb, 0x42, 0x0a, 0x9c, 0xd3, 0x57, 0x80, 0x57, 0x8d, 0xa9, 0x4e, 0xe1, 0x4e, 0x85, 0x9c, 0x97, 0x94, 0xc5, 0xe8, 0xca, 0xf4, 0xf7, 0x9d, 0x0a, 0x53, 0xbb, 0xe8, 0xa4, 0x59, 0x6d, 0xc7, 0x69, 0x23, 0x04, 0x63, 0xb1, 0x38, 0x3a, 0x9f, 0xa0, 0xbf, 0xee, 0xf1, 0xa8, 0xef, 0xc6, 0x71, 0x4f, 0xc6, 0x18, 0x2f, 0x33, 0xfe, 0x0b, 0xca, 0x4b, 0x3d, 0xf9, 0x3e, 0x6f, 0x8c, 0x18, 0xfe, 0x1b, 0x0a, 0x5a, 0x43, 0x70, 0xe1, 0x91, 0xa3, 0x7b, 0x7a, 0xd7, 0xe5, 0xba, 0xed, 0x2d, 0x14, 0xdc, 0xbc, 0x62, 0xd2, 0xc9, 0xc0, 0x37, 0xef, 0xe2, 0x63, 0xc0, 0x3a, 0x8a, 0x10 }; static const uint8_t nist_186_2_ecdsa_testvector_48_private[] = { /* d */ 0x00, 0xf3, 0x64, 0xa5, 0x72, 0x6d, 0x99, 0x6f, 0x6d, 0xd8, 0xd6, 0x37, 0x22, 0xe8, 0xbf, 0x54, 0xfc, 0xed, 0x1e, 0x5d, 0xc0, 0x67, 0x34, 0xef, 0xff, 0xc4, 0xdf, 0x46, 0x58, 0xa8, 0x80, 0x14, 0xe1, 0x51, 0xd2, 0x04, 0x9f, 0x28, 0x4c, 0xbf, 0x32, 0xb4, 0xfd, 0xc0, 0x9d, 0x0e, 0xca, 0xf4 }; static const uint8_t nist_186_2_ecdsa_testvector_48_public_x[] = { /* Qx */ 0x8b, 0xb6, 0x3e, 0xa0, 0x43, 0x94, 0x81, 0xf6, 0x97, 0x14, 0x2c, 0x89, 0x86, 0x70, 0xce, 0x27, 0x54, 0xe0, 0x4f, 0x3b, 0xae, 0x95, 0x5b, 0xa5, 0xf4, 0x5c, 0xe9, 0xbc, 0x2d, 0x24, 0x55, 0x3a, 0xbb, 0xb8, 0xa3, 0x58, 0x33, 0x9c, 0x25, 0x7f, 0xdc, 0x39, 0x7a, 0xb1, 0x58, 0x76, 0x7b, 0x7a }; static const uint8_t nist_186_2_ecdsa_testvector_48_public_y[] = { /* Qy */ 0xc8, 0x5c, 0x9c, 0x73, 0xc3, 0x1d, 0x4e, 0x10, 0x5d, 0x4e, 0x8f, 0x1e, 0x6a, 0x93, 0xcb, 0x39, 0xa4, 0xdb, 0x39, 0xd5, 0x78, 0xae, 0xa5, 0xa3, 0xac, 0x04, 0x2b, 0xae, 0x28, 0x93, 0x48, 0x5a, 0x27, 0xeb, 0x23, 0x6d, 0x0f, 0xa1, 0xe3, 0xe6, 0x75, 0xea, 0x29, 0x19, 0x01, 0xea, 0xd2, 0xe2 }; /* k = 00040825897316c3c233a99b9b75c1017c97f25770a6384c7b45e5cb8a0db87941b1e193362e9fc6971480c111939ecc */ static const uint8_t nist_186_2_ecdsa_testvector_48_out[] = { /* R */ 0x61, 0xd9, 0x46, 0x4f, 0x89, 0xd0, 0x0c, 0x77, 0xc4, 0x27, 0x19, 0x78, 0xdc, 0xec, 0x8e, 0x7e, 0xd2, 0xb3, 0x71, 0xa5, 0x59, 0x10, 0x1e, 0xc6, 0xa2, 0xe3, 0x9a, 0x36, 0xe5, 0xfb, 0xe3, 0xbc, 0x22, 0x0e, 0xad, 0xff, 0xa1, 0x8f, 0xf3, 0x6f, 0x74, 0xf3, 0xb1, 0x6e, 0x05, 0x52, 0x77, 0xa5, /* S */ 0xf9, 0xbc, 0xc9, 0x97, 0x15, 0x83, 0x1b, 0x63, 0x32, 0x1c, 0xa2, 0x4b, 0xd1, 0x23, 0x33, 0x9c, 0x72, 0xb3, 0x97, 0x92, 0x7e, 0x53, 0x32, 0x8f, 0x9f, 0xb3, 0x21, 0x19, 0xda, 0x23, 0x2a, 0x98, 0xb3, 0xfc, 0xf8, 0x90, 0x8c, 0xfa, 0x62, 0x31, 0x0c, 0x52, 0x6b, 0xf1, 0x7f, 0x8d, 0x61, 0xf6 }; static const uint8_t nist_186_2_ecdsa_testvector_49_ptx[] = { /* Msg */ 0xcb, 0x2b, 0x95, 0x2b, 0x99, 0xaa, 0x98, 0xd9, 0xa8, 0x77, 0x82, 0x6d, 0x36, 0x29, 0x97, 0xe9, 0xd6, 0x58, 0x25, 0x30, 0x64, 0xb9, 0x18, 0x56, 0x3e, 0x8a, 0xc8, 0x1a, 0xb1, 0x31, 0x15, 0xb1, 0xb2, 0x20, 0xb6, 0xc6, 0xcf, 0xfb, 0xce, 0xbe, 0x65, 0xfd, 0xc0, 0x40, 0x12, 0x98, 0x45, 0xf5, 0x6d, 0x5b, 0xbc, 0x8c, 0xf5, 0x19, 0xc1, 0x02, 0x48, 0x48, 0x00, 0x20, 0x96, 0xa7, 0x4b, 0x45, 0x54, 0x24, 0xeb, 0x65, 0x35, 0xfc, 0x34, 0x52, 0x56, 0x24, 0x5d, 0x3a, 0xb8, 0xe8, 0x8e, 0x71, 0xf4, 0xd2, 0x39, 0x71, 0x2a, 0xcd, 0xae, 0x20, 0x3b, 0x8a, 0xea, 0x51, 0x38, 0x23, 0xb0, 0x8c, 0x1a, 0xfe, 0xdc, 0x12, 0xb3, 0xf5, 0xf3, 0x1c, 0xe4, 0xb3, 0xfe, 0x64, 0x11, 0x61, 0x99, 0xe6, 0xd2, 0x83, 0x47, 0xe8, 0xeb, 0x1c, 0x08, 0x38, 0x7f, 0x19, 0x2e, 0xb5, 0x80, 0xec, 0x6c, 0x10 }; static const uint8_t nist_186_2_ecdsa_testvector_49_private[] = { /* d */ 0x00, 0x9b, 0xf1, 0x50, 0x1f, 0xd7, 0xb7, 0xdd, 0x4a, 0x4c, 0xfe, 0x01, 0x87, 0x58, 0x2c, 0xa2, 0x96, 0xed, 0x31, 0xe7, 0xfb, 0x15, 0xe8, 0x5b, 0xed, 0x0d, 0x2c, 0x95, 0xba, 0xb2, 0x67, 0xd1, 0x62, 0x7f, 0x58, 0x17, 0xde, 0x28, 0x6e, 0xe5, 0x06, 0x32, 0x71, 0x26, 0x18, 0x18, 0x25, 0x52 }; static const uint8_t nist_186_2_ecdsa_testvector_49_public_x[] = { /* Qx */ 0xdf, 0x9b, 0x25, 0x6d, 0x12, 0xbf, 0x94, 0xcd, 0x58, 0xea, 0x44, 0xb3, 0x6c, 0x64, 0xaf, 0xbb, 0xf1, 0x98, 0x0a, 0x98, 0xc4, 0x7b, 0xc0, 0x14, 0x3f, 0x11, 0xa2, 0xed, 0x9e, 0x98, 0x76, 0x66, 0x67, 0xf7, 0x49, 0xef, 0xc5, 0xaf, 0x76, 0x7c, 0x99, 0xdd, 0x9e, 0xb5, 0xb1, 0xa9, 0x96, 0x91 }; static const uint8_t nist_186_2_ecdsa_testvector_49_public_y[] = { /* Qy */ 0x94, 0x53, 0xa0, 0xe0, 0x01, 0x5b, 0x8d, 0x94, 0x3d, 0xf7, 0xa2, 0xba, 0x26, 0xd8, 0xdf, 0xaf, 0xce, 0x07, 0xb6, 0x74, 0xd9, 0x0c, 0x6b, 0x6f, 0xee, 0xd0, 0x74, 0xe0, 0xab, 0xfd, 0x7e, 0xef, 0x3d, 0x49, 0x62, 0x56, 0xc1, 0xc4, 0x12, 0x46, 0x29, 0xc2, 0xeb, 0xb3, 0xe4, 0xcd, 0xe6, 0x11 }; /* k = 0018ea0c817eee1dba088205eaacf0c2c48b40b546371c31a74998beee52d6b1937eee33755e3d20a2c1433d56a90844 */ static const uint8_t nist_186_2_ecdsa_testvector_49_out[] = { /* R */ 0x25, 0x0a, 0x4b, 0x5d, 0xee, 0x20, 0x3d, 0x0e, 0x56, 0xad, 0x5b, 0x95, 0x42, 0x61, 0x21, 0x8d, 0xb5, 0xe2, 0x3a, 0x07, 0xe4, 0x4f, 0x46, 0x07, 0xe0, 0x8a, 0x34, 0x54, 0xfa, 0x84, 0x8c, 0x45, 0x27, 0x17, 0x2e, 0x95, 0x11, 0xb4, 0xed, 0x3c, 0x6f, 0x60, 0x58, 0x17, 0x07, 0x5f, 0xbc, 0x7e, /* S */ 0x86, 0xd0, 0x4b, 0x60, 0xb7, 0x58, 0x6f, 0x11, 0xca, 0xe4, 0xfd, 0x12, 0xd4, 0x2f, 0xa7, 0x9b, 0x27, 0x28, 0x90, 0x6b, 0x76, 0xa3, 0x9e, 0xeb, 0x2e, 0xb5, 0xd3, 0x84, 0x78, 0x4a, 0xc1, 0x53, 0xb7, 0x6f, 0xd2, 0xfb, 0xd3, 0x2d, 0xbe, 0xcc, 0x48, 0x54, 0x90, 0x93, 0x68, 0xe5, 0x54, 0xe2 }; static const uint8_t nist_186_2_ecdsa_testvector_50_ptx[] = { /* Msg */ 0xd1, 0xb5, 0x10, 0x9d, 0x0c, 0xa8, 0x8a, 0x78, 0xdf, 0x42, 0xc6, 0xe0, 0x8e, 0xc4, 0xd5, 0x36, 0x44, 0xbd, 0xd6, 0xad, 0xb4, 0x24, 0xb9, 0x02, 0x01, 0xa4, 0x48, 0x67, 0xdb, 0x37, 0x67, 0xc0, 0xec, 0xf6, 0x9a, 0x11, 0x72, 0x30, 0xc9, 0x37, 0x2d, 0xb9, 0x40, 0xd7, 0x7b, 0x84, 0xfa, 0x95, 0xc2, 0x74, 0x1f, 0x86, 0x0e, 0x70, 0xcb, 0xe7, 0xfb, 0xb6, 0x11, 0x0f, 0xd6, 0x71, 0x40, 0xa2, 0xff, 0x8d, 0x64, 0x08, 0x91, 0xca, 0x10, 0x1d, 0x45, 0x0f, 0x5b, 0x2a, 0x94, 0x02, 0x29, 0x15, 0x1c, 0xd5, 0xac, 0xd4, 0x45, 0x62, 0x2a, 0x27, 0x24, 0x7b, 0x00, 0x87, 0xa0, 0x7b, 0xe7, 0x59, 0xd3, 0x21, 0x76, 0x68, 0xb3, 0x9f, 0xe8, 0x92, 0xf1, 0xed, 0x20, 0xc2, 0x21, 0x63, 0xea, 0x1e, 0x1c, 0x87, 0x84, 0x81, 0xa2, 0x24, 0x5d, 0x2b, 0x44, 0x9c, 0x1c, 0xb7, 0x81, 0x7e, 0xe4, 0x4e }; static const uint8_t nist_186_2_ecdsa_testvector_50_private[] = { /* d */ 0x00, 0xb7, 0x69, 0x01, 0x62, 0x28, 0x64, 0x4e, 0xcb, 0x3e, 0xda, 0xaf, 0x65, 0x1c, 0x7b, 0x86, 0xbc, 0x28, 0xda, 0xf4, 0xa8, 0xdc, 0x4a, 0xaa, 0x2f, 0xcc, 0xa2, 0xdb, 0x5a, 0xba, 0x25, 0x6f, 0xe5, 0xea, 0xc2, 0xf6, 0x91, 0x1e, 0xbf, 0xf8, 0x08, 0x22, 0xb0, 0xcc, 0x57, 0x5a, 0x9f, 0xb5 }; static const uint8_t nist_186_2_ecdsa_testvector_50_public_x[] = { /* Qx */ 0xfa, 0xe8, 0x8b, 0xf1, 0x19, 0x0c, 0x5e, 0xf9, 0x3d, 0x49, 0xae, 0xa2, 0xce, 0xe1, 0xa4, 0x67, 0xc8, 0xb2, 0xe3, 0xdd, 0x45, 0x7e, 0x29, 0x78, 0x77, 0x31, 0xc1, 0x0a, 0x4f, 0x6c, 0xb7, 0x13, 0xbd, 0xc6, 0x1a, 0x7b, 0x20, 0x64, 0xb2, 0x54, 0x8f, 0xc6, 0x1e, 0x66, 0x01, 0x64, 0x6b, 0x6d }; static const uint8_t nist_186_2_ecdsa_testvector_50_public_y[] = { /* Qy */ 0x46, 0x9f, 0x73, 0x00, 0x45, 0x02, 0x27, 0x62, 0x61, 0x67, 0x24, 0x62, 0x1c, 0x0b, 0x20, 0xfe, 0x4f, 0x4b, 0x8b, 0xf7, 0x30, 0xbd, 0xf4, 0x4d, 0xad, 0xec, 0x59, 0xd0, 0x14, 0x6b, 0x91, 0x39, 0x3b, 0xe9, 0xbf, 0x49, 0x79, 0xfd, 0xb3, 0x1f, 0x83, 0x0e, 0x86, 0x7b, 0xab, 0x49, 0xd9, 0xe8 }; /* k = 00c7454092e11ce4d4aef9c710a219dc8513aa3aa34de85c3c6d3a50d3ccc993d029bca4013ee6fd7ec9ab5e5806f209 */ static const uint8_t nist_186_2_ecdsa_testvector_50_out[] = { /* R */ 0x07, 0xfb, 0x1b, 0xa7, 0x93, 0xa3, 0x4c, 0x92, 0x32, 0x46, 0x60, 0xb7, 0x8b, 0xe1, 0xb5, 0x02, 0x75, 0xdc, 0x3e, 0x6c, 0xff, 0x82, 0xd3, 0x3c, 0x4c, 0x6d, 0xb7, 0xfb, 0xcd, 0x9a, 0x53, 0xb9, 0x27, 0xcc, 0xe0, 0x75, 0x93, 0xaf, 0x77, 0x9c, 0xff, 0x48, 0xff, 0x7f, 0x2d, 0xed, 0xfe, 0x8e, /* S */ 0xc7, 0x1b, 0x22, 0x17, 0x9e, 0xfb, 0x3a, 0xd7, 0xd9, 0x12, 0x79, 0xc0, 0x8c, 0x7c, 0x31, 0x94, 0x78, 0xc7, 0xaa, 0x05, 0xda, 0x2a, 0x9c, 0x12, 0x06, 0x8f, 0xb1, 0xb8, 0xd6, 0x8d, 0x0d, 0x47, 0xdb, 0x02, 0x26, 0xb3, 0xa3, 0x5f, 0xbf, 0x91, 0x4e, 0xe1, 0x7a, 0x49, 0xae, 0x70, 0x86, 0x11 }; static const uint8_t nist_186_2_ecdsa_testvector_51_ptx[] = { /* Msg */ 0x52, 0x82, 0x49, 0x5b, 0xa2, 0x45, 0x27, 0x95, 0xbd, 0xd8, 0xfd, 0x9c, 0x47, 0xa2, 0xae, 0x9f, 0x40, 0xee, 0x68, 0xde, 0x7d, 0x8d, 0xc1, 0x69, 0x59, 0xc3, 0x06, 0x2a, 0xa8, 0x61, 0xcf, 0x25, 0xec, 0x2e, 0xd7, 0xff, 0xcc, 0x8b, 0x0b, 0xbd, 0xc1, 0x57, 0xe1, 0xcf, 0x13, 0x11, 0xeb, 0x4d, 0x04, 0x3c, 0xac, 0x80, 0x4a, 0x08, 0xaa, 0xa4, 0xc3, 0x2e, 0xc4, 0xec, 0x65, 0x1c, 0xc6, 0xc7, 0x74, 0x52, 0x3b, 0x62, 0xf7, 0x0c, 0x83, 0x6e, 0x6c, 0x21, 0x25, 0x23, 0xbb, 0x2b, 0x66, 0x85, 0x69, 0xe8, 0x1a, 0xe6, 0x0e, 0xe0, 0xba, 0xac, 0x09, 0x48, 0xb7, 0x54, 0x72, 0x27, 0x0e, 0xb7, 0x50, 0xb7, 0x1d, 0x8c, 0x0c, 0x0e, 0xb4, 0x2f, 0x26, 0xfd, 0x70, 0xa1, 0x27, 0x39, 0x44, 0xcf, 0xd7, 0xb8, 0x59, 0x17, 0xaf, 0x5e, 0x18, 0x08, 0x91, 0xd9, 0x85, 0x69, 0xb7, 0xca, 0xce, 0x7d }; static const uint8_t nist_186_2_ecdsa_testvector_51_private[] = { /* d */ 0x00, 0x66, 0x14, 0x40, 0x20, 0xde, 0xa9, 0x67, 0x35, 0x0d, 0x34, 0x09, 0xe0, 0x6a, 0xe3, 0xe9, 0x31, 0x9b, 0xe3, 0x25, 0xa3, 0x23, 0xf9, 0x37, 0xee, 0xaf, 0xf9, 0x1a, 0xb1, 0x34, 0xe2, 0x19, 0x9c, 0x79, 0x28, 0x9c, 0xd6, 0x7c, 0x01, 0x0f, 0xe1, 0xbb, 0x0b, 0x7a, 0x57, 0x20, 0x32, 0x37 }; static const uint8_t nist_186_2_ecdsa_testvector_51_public_x[] = { /* Qx */ 0xc4, 0x8e, 0x79, 0xb3, 0xb9, 0xe9, 0x35, 0xce, 0x9a, 0x84, 0x55, 0x26, 0xd9, 0x5d, 0x32, 0x25, 0xb2, 0x57, 0x2b, 0x3c, 0x39, 0x81, 0xbe, 0x8b, 0xd9, 0x1d, 0x30, 0xa1, 0x07, 0xf1, 0x51, 0x35, 0xa6, 0x05, 0xa3, 0x8f, 0x79, 0x84, 0xb6, 0xde, 0x7f, 0x10, 0x30, 0x91, 0x53, 0xe7, 0x17, 0x50 }; static const uint8_t nist_186_2_ecdsa_testvector_51_public_y[] = { /* Qy */ 0x80, 0xd9, 0x34, 0x5c, 0x25, 0x23, 0xf4, 0x39, 0x72, 0xa8, 0x16, 0x63, 0xac, 0xfd, 0xa5, 0x4b, 0x8f, 0xf7, 0x43, 0x0b, 0x3a, 0xce, 0xaf, 0x5f, 0xdd, 0x86, 0x5f, 0x6e, 0x4b, 0x25, 0xa4, 0x87, 0x61, 0x60, 0xb6, 0x2b, 0xa8, 0xda, 0x98, 0xa6, 0x13, 0xa2, 0x30, 0xe2, 0x9f, 0x87, 0xd0, 0x3f }; /* k = 002a565c981e0d48912970345e72db8e0c848b04f8c51de1480d61da4cce03895007683a55a30be940357c08c967cb30 */ static const uint8_t nist_186_2_ecdsa_testvector_51_out[] = { /* R */ 0xb7, 0xf0, 0xc1, 0x59, 0x47, 0xee, 0xab, 0xb3, 0xf8, 0xd7, 0x76, 0x0a, 0xee, 0x8a, 0x8d, 0xc3, 0x3d, 0x46, 0x42, 0xce, 0x3c, 0x97, 0x54, 0x8f, 0xe7, 0x6d, 0x01, 0x4a, 0xc9, 0x95, 0xf1, 0xf1, 0xf5, 0x6e, 0x1b, 0xd9, 0x9e, 0x1d, 0xe1, 0xc0, 0xed, 0xb2, 0xd2, 0xd0, 0xc6, 0xde, 0x47, 0x04, /* S */ 0x63, 0xf8, 0xbf, 0xb9, 0x30, 0xdb, 0x61, 0x37, 0xfb, 0x87, 0x61, 0xa8, 0x40, 0xcf, 0x9e, 0x48, 0xdb, 0x6e, 0x35, 0x5d, 0xb9, 0xab, 0xc7, 0x67, 0xd3, 0x15, 0xb3, 0x0d, 0x2b, 0x4c, 0x90, 0xcf, 0x9a, 0x71, 0xaa, 0xad, 0x21, 0xf2, 0x1c, 0x70, 0x5b, 0x60, 0x18, 0x9e, 0xe2, 0xd9, 0x2e, 0x12 }; static const uint8_t nist_186_2_ecdsa_testvector_52_ptx[] = { /* Msg */ 0x04, 0xd1, 0xab, 0xca, 0x18, 0x1f, 0x64, 0xf7, 0xc6, 0xb1, 0x1f, 0xb7, 0xf3, 0x26, 0x0a, 0x50, 0x59, 0x9e, 0xdc, 0x70, 0x80, 0xd8, 0x65, 0x70, 0xea, 0x98, 0x69, 0xd9, 0x8e, 0x4c, 0xae, 0x28, 0x89, 0xee, 0x54, 0xce, 0x0f, 0x2c, 0x65, 0x7b, 0xa7, 0xc7, 0xad, 0x9c, 0x98, 0x39, 0xcc, 0x23, 0x9e, 0x9a, 0x89, 0x86, 0xe2, 0xc4, 0x69, 0x0a, 0x29, 0xb6, 0x81, 0x41, 0x4c, 0x36, 0x88, 0xd1, 0xe8, 0xbb, 0x30, 0x78, 0x56, 0x89, 0xb6, 0x4d, 0xde, 0x1e, 0xb8, 0x49, 0x27, 0xcd, 0x48, 0x05, 0xf2, 0xa9, 0x3e, 0xc5, 0x08, 0xa4, 0xd2, 0xb6, 0x71, 0xf8, 0x6a, 0x74, 0xe7, 0xc6, 0xb0, 0xcf, 0x8b, 0xfd, 0xe8, 0xcf, 0xd6, 0x7e, 0x81, 0xf6, 0xd1, 0x7e, 0xe9, 0xc4, 0x89, 0x2b, 0xa6, 0x81, 0xbd, 0x92, 0xa3, 0x36, 0xdb, 0xc0, 0xc7, 0xfd, 0x2b, 0x27, 0xcc, 0x7a, 0x49, 0x44, 0x4f, 0xaa }; static const uint8_t nist_186_2_ecdsa_testvector_52_private[] = { /* d */ 0x00, 0x1f, 0xde, 0x5b, 0x8c, 0x4a, 0x03, 0xe1, 0x27, 0xc6, 0xe2, 0x4b, 0x99, 0x8b, 0xd3, 0x5a, 0xab, 0x25, 0x77, 0xaf, 0x84, 0xb0, 0xcd, 0x6a, 0x06, 0xc7, 0x4f, 0xf6, 0x5d, 0xe1, 0x64, 0x39, 0x33, 0x6a, 0x15, 0xab, 0x89, 0x6b, 0xc6, 0x62, 0xde, 0x2b, 0x0b, 0x70, 0x86, 0xc6, 0xa6, 0xe8 }; static const uint8_t nist_186_2_ecdsa_testvector_52_public_x[] = { /* Qx */ 0xbb, 0xa3, 0x46, 0xc6, 0x53, 0x5b, 0x85, 0x32, 0x1e, 0x6c, 0xbd, 0xff, 0xfd, 0xa6, 0xa8, 0xfe, 0x8e, 0x6e, 0x56, 0x27, 0x83, 0x0d, 0x80, 0xb6, 0x46, 0x4e, 0x40, 0xbe, 0x1c, 0x44, 0xc7, 0x2f, 0x9f, 0x19, 0x29, 0x07, 0x34, 0x59, 0x11, 0x68, 0x64, 0xd6, 0xd3, 0xa6, 0x22, 0x0f, 0xcc, 0x76 }; static const uint8_t nist_186_2_ecdsa_testvector_52_public_y[] = { /* Qy */ 0x91, 0xd6, 0xba, 0x52, 0x3f, 0x75, 0xca, 0x63, 0x0c, 0xda, 0x60, 0x4c, 0x39, 0xb5, 0x87, 0x33, 0x7f, 0x7a, 0x9c, 0xc0, 0x6f, 0xa8, 0x20, 0x55, 0x35, 0x02, 0xf9, 0xc3, 0x19, 0xc6, 0xde, 0xc4, 0x8a, 0xbb, 0xea, 0x21, 0xcb, 0xc8, 0x97, 0x5f, 0xea, 0x58, 0x6a, 0xa3, 0x8c, 0x66, 0x75, 0x7b }; /* k = 00b5c6ab008fad701bb612cbaa1d0036f368292e8780addbb3349c9538a42ef8faa022a6545f44ae5be69613bb6879e9 */ static const uint8_t nist_186_2_ecdsa_testvector_52_out[] = { /* R */ 0x9a, 0xf3, 0x75, 0xad, 0x85, 0xd8, 0x43, 0x4b, 0x70, 0x84, 0x84, 0x39, 0xe0, 0xa7, 0xc8, 0x5f, 0x36, 0x94, 0xb3, 0xec, 0x03, 0xbb, 0x48, 0x58, 0x68, 0x4c, 0x86, 0x4f, 0xa1, 0xea, 0x83, 0xaf, 0x8d, 0x80, 0xdb, 0x42, 0xac, 0xe5, 0x43, 0x01, 0xe6, 0xf3, 0x98, 0xaa, 0xbe, 0x51, 0x6c, 0x7b, /* S */ 0x6a, 0x93, 0x34, 0x8b, 0xcd, 0xc6, 0xf9, 0x65, 0x84, 0x54, 0x4c, 0x70, 0x0c, 0x19, 0xd8, 0x0f, 0xeb, 0xf9, 0x62, 0x40, 0x4f, 0xe3, 0x82, 0x6a, 0xa5, 0x06, 0xfc, 0x7b, 0x17, 0xa8, 0x66, 0x71, 0x65, 0x0d, 0x85, 0xc4, 0x70, 0x7a, 0xc5, 0x87, 0xd4, 0xd4, 0x3a, 0x66, 0x0e, 0x1d, 0xa2, 0x11 }; static const uint8_t nist_186_2_ecdsa_testvector_53_ptx[] = { /* Msg */ 0x3a, 0x7e, 0xe7, 0xc2, 0xda, 0xc3, 0xe5, 0x9b, 0x1b, 0xe3, 0x1e, 0x66, 0x95, 0x26, 0x87, 0xd9, 0x78, 0x0a, 0x75, 0x7f, 0x72, 0x95, 0xa7, 0xae, 0xd3, 0xe9, 0x87, 0xba, 0xef, 0x19, 0xad, 0x68, 0xc3, 0x3b, 0xa5, 0xa5, 0xdc, 0xbf, 0xf2, 0x78, 0x75, 0xff, 0x52, 0x36, 0xe0, 0x16, 0x44, 0xf5, 0x27, 0xf6, 0xc8, 0x42, 0xf2, 0xb5, 0x66, 0x17, 0xab, 0x28, 0x71, 0x07, 0xe1, 0xb3, 0x8d, 0xbc, 0xea, 0x5f, 0x6f, 0xa3, 0xcd, 0x2d, 0xe4, 0xe6, 0x5f, 0xab, 0x15, 0x9b, 0xab, 0xc4, 0x09, 0x3b, 0x97, 0xdc, 0x6b, 0x55, 0xc5, 0x1d, 0x8e, 0x83, 0xb8, 0x0b, 0xae, 0x9e, 0x38, 0x5f, 0x79, 0x2e, 0xf7, 0x12, 0xcd, 0x24, 0x74, 0xb8, 0xc4, 0xcc, 0x20, 0x0f, 0xee, 0xfd, 0xc0, 0xd8, 0xdd, 0x93, 0x12, 0xe5, 0xe7, 0x1e, 0xb3, 0x74, 0x27, 0xdc, 0x40, 0xbb, 0xc5, 0xe5, 0xbb, 0xc4, 0x77, 0xa6 }; static const uint8_t nist_186_2_ecdsa_testvector_53_private[] = { /* d */ 0x00, 0x02, 0xd3, 0x72, 0xdb, 0xa2, 0x59, 0x85, 0x6c, 0x17, 0x18, 0x44, 0xa2, 0xf6, 0x18, 0xaa, 0x03, 0xb8, 0xcb, 0xa5, 0xaf, 0x7a, 0xc2, 0x6f, 0x6c, 0x90, 0x50, 0xe4, 0x86, 0x5d, 0x78, 0x19, 0x74, 0xdb, 0x81, 0x16, 0xbe, 0xd2, 0x55, 0x8f, 0x1e, 0x04, 0x83, 0x2a, 0x36, 0x0e, 0xe4, 0x4a }; static const uint8_t nist_186_2_ecdsa_testvector_53_public_x[] = { /* Qx */ 0x7b, 0x23, 0x89, 0x36, 0x7a, 0xeb, 0x04, 0xdb, 0xde, 0x75, 0xd5, 0x8d, 0xad, 0xac, 0xa0, 0xe9, 0x6d, 0xd2, 0x65, 0x00, 0x23, 0xf6, 0xa6, 0xe4, 0x31, 0xf2, 0x72, 0x5f, 0x3d, 0x91, 0x9e, 0x3f, 0xb2, 0x37, 0xce, 0x93, 0x05, 0xb8, 0xfb, 0x6a, 0x28, 0xa5, 0x7c, 0x0f, 0x2f, 0xda, 0x5b, 0xbe }; static const uint8_t nist_186_2_ecdsa_testvector_53_public_y[] = { /* Qy */ 0x6d, 0x44, 0xf8, 0xd3, 0x79, 0x52, 0x4c, 0x9f, 0x27, 0x82, 0x1c, 0x80, 0xf9, 0xa5, 0x75, 0xf8, 0x7b, 0x28, 0xd6, 0x3a, 0x6c, 0x69, 0x10, 0x0f, 0x94, 0x18, 0xa5, 0x08, 0xa9, 0x55, 0x80, 0x55, 0x56, 0x2b, 0x47, 0xb9, 0x48, 0x47, 0x06, 0x48, 0x2c, 0xaf, 0xc0, 0xf0, 0x36, 0x4a, 0xd0, 0x97 }; /* k = 005485a3b918e08070cec54c4d45fd17993b9269d171e68865cf8a8cf8ebca1d65e5dfdb61ae45ce8fad783663d6bcf6 */ static const uint8_t nist_186_2_ecdsa_testvector_53_out[] = { /* R */ 0x8b, 0x7e, 0xd3, 0x27, 0x70, 0x08, 0xf1, 0x9a, 0x57, 0xc1, 0xf4, 0x72, 0x89, 0xef, 0x1e, 0x9f, 0x3d, 0xf8, 0xe4, 0x40, 0xb8, 0x2e, 0x34, 0xf2, 0x77, 0x4f, 0x30, 0x58, 0x4c, 0xe6, 0x54, 0xdc, 0xc9, 0xdc, 0xca, 0x9a, 0xad, 0x7b, 0x47, 0x53, 0xe8, 0x9f, 0xa9, 0xc6, 0x11, 0x54, 0x20, 0x3f, /* S */ 0x9a, 0x53, 0xf6, 0xd0, 0x63, 0xf1, 0xb0, 0xab, 0xd1, 0x26, 0x47, 0x0d, 0xf6, 0x4f, 0xf0, 0x96, 0xcb, 0xcd, 0x2f, 0x50, 0x16, 0x7c, 0xb9, 0x9b, 0x8c, 0x33, 0x30, 0xdb, 0xf5, 0xa8, 0x16, 0xc2, 0x4a, 0xe1, 0x56, 0x4f, 0xc7, 0x83, 0xa9, 0x00, 0x36, 0x1e, 0x8c, 0xdb, 0x85, 0x7c, 0x3d, 0xb3 }; static const uint8_t nist_186_2_ecdsa_testvector_54_ptx[] = { /* Msg */ 0xbb, 0xb6, 0x4f, 0x9a, 0x67, 0x26, 0xe6, 0x5c, 0xca, 0x3c, 0x25, 0x5b, 0xda, 0x2a, 0x47, 0x75, 0x48, 0xe8, 0x2f, 0x95, 0xa8, 0xce, 0xa9, 0xe1, 0xd3, 0x62, 0xf3, 0x34, 0x89, 0x6f, 0x7c, 0xce, 0x5b, 0x57, 0xeb, 0x4a, 0xc8, 0xa9, 0x63, 0xd1, 0xa7, 0xf6, 0x05, 0x8e, 0xc5, 0xe1, 0xb7, 0x61, 0xce, 0x76, 0x24, 0xd8, 0x71, 0xbd, 0x04, 0x5b, 0xbf, 0x8e, 0x9e, 0xa6, 0xd4, 0xa6, 0x8b, 0x7d, 0xba, 0xfb, 0xbc, 0x9a, 0x8a, 0x4d, 0xbf, 0xeb, 0xd4, 0xfe, 0x3d, 0xfa, 0x41, 0x23, 0xc8, 0xad, 0x77, 0xdb, 0xd3, 0x2f, 0x3d, 0xe0, 0x02, 0x2e, 0xe0, 0x5b, 0xa5, 0x47, 0xd5, 0xfd, 0x7f, 0xbe, 0x9f, 0x4b, 0xcb, 0x73, 0xf4, 0x39, 0x81, 0x11, 0x1b, 0xfb, 0xd5, 0x89, 0x98, 0x18, 0x00, 0xbf, 0x0b, 0xc0, 0x44, 0x82, 0x56, 0x5f, 0x2a, 0xc2, 0xfe, 0x72, 0x0f, 0xfd, 0xd4, 0x9a, 0xde, 0xfb }; static const uint8_t nist_186_2_ecdsa_testvector_54_private[] = { /* d */ 0x00, 0xe3, 0x97, 0x4c, 0xd7, 0x75, 0x43, 0xda, 0xdd, 0xa2, 0x44, 0x96, 0xe5, 0x3e, 0x8b, 0x69, 0xe7, 0x4a, 0xb3, 0xdc, 0x92, 0xa8, 0x7f, 0x3d, 0x5b, 0x19, 0x92, 0xb7, 0x2b, 0x85, 0xe4, 0xe6, 0x46, 0x14, 0x4d, 0xb0, 0x96, 0xfd, 0x81, 0xd4, 0xdb, 0x80, 0xbc, 0x8b, 0x16, 0xfe, 0x72, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_54_public_x[] = { /* Qx */ 0xe8, 0xc3, 0x5b, 0x6d, 0x8a, 0x41, 0xfa, 0xce, 0x0a, 0xa8, 0x2d, 0xee, 0xac, 0x83, 0xa1, 0xd3, 0x17, 0x82, 0xe0, 0xdd, 0xbb, 0x6a, 0x1a, 0x1f, 0x26, 0x68, 0x3a, 0xe6, 0x56, 0xb8, 0xbf, 0xcb, 0xca, 0x61, 0x63, 0xaf, 0x20, 0x48, 0x74, 0x8f, 0xeb, 0x0c, 0xcc, 0xa2, 0xab, 0x39, 0xe1, 0x78 }; static const uint8_t nist_186_2_ecdsa_testvector_54_public_y[] = { /* Qy */ 0x4b, 0xe3, 0x15, 0xe0, 0x4b, 0xed, 0x3d, 0x59, 0xf9, 0x6a, 0xe4, 0x86, 0xb8, 0x48, 0x5f, 0x96, 0x62, 0xc6, 0x74, 0x4c, 0x62, 0x38, 0x16, 0x58, 0x8c, 0xe2, 0xef, 0xa3, 0x71, 0x2c, 0xb7, 0xb6, 0xca, 0x93, 0x66, 0xb5, 0xbd, 0x43, 0xe7, 0x30, 0x77, 0x12, 0x85, 0x2d, 0xe3, 0xf7, 0xd2, 0x18 }; /* k = 00af94eba17be9aa7b85d4124c3df72da3a6dd0c65293f936bd4c1cba834727e97b86de277b4699347002f5361b7df1b */ static const uint8_t nist_186_2_ecdsa_testvector_54_out[] = { /* R */ 0x8a, 0xe1, 0xd5, 0x45, 0x89, 0xd7, 0xe8, 0x5e, 0x84, 0x4d, 0xfb, 0xba, 0x76, 0xec, 0x04, 0xf6, 0xfd, 0x1c, 0x70, 0xa4, 0x9d, 0xf1, 0x03, 0x9a, 0xc7, 0x0a, 0x3b, 0x34, 0x97, 0x6c, 0xe0, 0x5f, 0xa5, 0x05, 0xe1, 0x75, 0xb7, 0x9f, 0x21, 0xb8, 0x2a, 0x50, 0xea, 0x1a, 0x93, 0x8b, 0x8d, 0x79, /* S */ 0xf0, 0x86, 0xf2, 0x65, 0xe3, 0xdb, 0xf0, 0x5c, 0x42, 0x0f, 0x39, 0xde, 0xe8, 0xc5, 0x3c, 0xa2, 0xf3, 0x05, 0x51, 0x9d, 0xcb, 0xb4, 0xfb, 0xa3, 0x83, 0x71, 0xf0, 0x3a, 0x6c, 0x90, 0xfe, 0xc4, 0xe0, 0x35, 0x75, 0xf3, 0x3c, 0x48, 0xb2, 0xd2, 0xf5, 0xf5, 0x9c, 0x4e, 0xef, 0xd7, 0xb0, 0x74 }; static const uint8_t nist_186_2_ecdsa_testvector_55_ptx[] = { /* Msg */ 0x96, 0x8a, 0xda, 0x50, 0xe8, 0xa6, 0x8e, 0x59, 0xa0, 0x48, 0x86, 0x19, 0xaf, 0x70, 0x52, 0x2b, 0x55, 0x2c, 0x57, 0xb2, 0x36, 0x5d, 0x80, 0x41, 0xb1, 0xbd, 0x31, 0xf8, 0x6d, 0x21, 0x7d, 0xf0, 0x34, 0xfc, 0x98, 0xda, 0x05, 0x25, 0x8f, 0xe2, 0x64, 0xda, 0x36, 0xda, 0xf5, 0x04, 0x62, 0x94, 0x49, 0xbc, 0x59, 0x8f, 0xf8, 0x0f, 0x87, 0xd6, 0xf0, 0xfe, 0x73, 0x26, 0x0c, 0xc9, 0xf1, 0x4f, 0xe9, 0x6e, 0x98, 0xdc, 0xf5, 0x6c, 0x76, 0xf6, 0xc8, 0xcc, 0x03, 0x86, 0xb8, 0x62, 0x54, 0x9a, 0xa7, 0x51, 0x91, 0x0a, 0x20, 0xcd, 0xa9, 0x5b, 0xa3, 0x25, 0x44, 0xe3, 0x3c, 0x00, 0xfa, 0x2e, 0x5a, 0xe6, 0xc2, 0xa1, 0xdf, 0x03, 0xad, 0x5d, 0x74, 0x28, 0xd4, 0x67, 0x1f, 0x13, 0x8e, 0x05, 0x17, 0xf0, 0xe7, 0x6b, 0xd7, 0x20, 0x4e, 0x96, 0x71, 0x38, 0x8e, 0x79, 0x25, 0x4d, 0x00, 0x57 }; static const uint8_t nist_186_2_ecdsa_testvector_55_private[] = { /* d */ 0x00, 0xe4, 0x45, 0x4a, 0x8e, 0x6e, 0x76, 0xce, 0x5e, 0x2f, 0x16, 0xde, 0xdf, 0x3d, 0xe9, 0xa2, 0x6e, 0x62, 0x08, 0x50, 0x7e, 0xad, 0x5b, 0xd4, 0x79, 0x17, 0xba, 0xbd, 0x37, 0x98, 0xb4, 0x16, 0x51, 0xc4, 0xed, 0xde, 0xd7, 0xbf, 0xd8, 0xa0, 0x92, 0xd2, 0x29, 0x24, 0xbd, 0xb6, 0x1a, 0x92 }; static const uint8_t nist_186_2_ecdsa_testvector_55_public_x[] = { /* Qx */ 0xbf, 0x81, 0xdf, 0x29, 0xc4, 0xa9, 0x1c, 0x5d, 0xc7, 0x83, 0xc1, 0x46, 0xba, 0xe6, 0xff, 0x74, 0xf2, 0x04, 0xaa, 0x8f, 0x75, 0x21, 0xc4, 0x86, 0xef, 0x6d, 0xbb, 0xa3, 0x97, 0x47, 0xab, 0xaf, 0xf3, 0xf4, 0x47, 0xf0, 0xef, 0xf1, 0x5c, 0x4f, 0x84, 0x80, 0xcf, 0x89, 0x0e, 0xa0, 0x4c, 0x0a }; static const uint8_t nist_186_2_ecdsa_testvector_55_public_y[] = { /* Qy */ 0x34, 0xbb, 0xbd, 0xf8, 0xc0, 0xeb, 0xf3, 0x5a, 0x3c, 0x06, 0x76, 0xbd, 0xc1, 0xe7, 0xb8, 0x40, 0x68, 0x79, 0x49, 0x4d, 0xca, 0x62, 0x88, 0xa7, 0xeb, 0xd9, 0x80, 0xf7, 0x3d, 0xb7, 0xfc, 0x82, 0x86, 0x2e, 0x22, 0x9b, 0x3a, 0xcf, 0x38, 0x8c, 0xa3, 0xe7, 0x3b, 0x14, 0xa8, 0x8a, 0xb8, 0xdc }; /* k = 00d1bb590604cec37be8b994af4cd515f63362a0093930fb65389e20c5875e5968b0c635441d50ef72e96d655ce929d8 */ static const uint8_t nist_186_2_ecdsa_testvector_55_out[] = { /* R */ 0xbe, 0x29, 0xeb, 0x63, 0xb4, 0x01, 0x3d, 0x31, 0x7c, 0xad, 0x04, 0xf7, 0x91, 0x93, 0xfa, 0xcf, 0xca, 0xf6, 0x1a, 0x9d, 0xb7, 0x0d, 0x36, 0x55, 0x0e, 0x75, 0xa7, 0x1c, 0x3d, 0x09, 0x2a, 0x94, 0xa5, 0x66, 0xe6, 0x16, 0x9f, 0x88, 0xba, 0x32, 0x1a, 0x4a, 0x62, 0x71, 0xdc, 0xc9, 0x23, 0x3b, /* S */ 0x9d, 0x66, 0x2d, 0xcc, 0xc6, 0x7d, 0x6d, 0xad, 0x4a, 0x2d, 0x86, 0xa5, 0x22, 0x38, 0x46, 0x2a, 0xa7, 0x5a, 0x85, 0xd8, 0xdb, 0xa6, 0x76, 0xdb, 0x2b, 0xd9, 0x40, 0x53, 0x12, 0xf5, 0xe2, 0x47, 0x9e, 0x93, 0x4d, 0x41, 0x35, 0x48, 0xa7, 0x24, 0x6b, 0xd2, 0xdb, 0xc8, 0x54, 0x5a, 0x2f, 0x41 }; static const uint8_t nist_186_2_ecdsa_testvector_56_ptx[] = { /* Msg */ 0x3d, 0xac, 0xf9, 0xf9, 0x2d, 0x22, 0x02, 0xdb, 0xd9, 0x74, 0x53, 0x58, 0x51, 0x7b, 0x2c, 0x41, 0x76, 0xaa, 0x05, 0xc1, 0x17, 0xa1, 0xcf, 0x91, 0x5a, 0x00, 0x7d, 0x6c, 0x5e, 0x79, 0xc3, 0xc3, 0x1e, 0x2a, 0x1d, 0xb1, 0x99, 0x29, 0x14, 0x31, 0x30, 0x60, 0xbd, 0x8f, 0x4f, 0x9b, 0x82, 0x1c, 0x4f, 0xdf, 0x24, 0x26, 0x9b, 0xfe, 0x01, 0x27, 0x12, 0x68, 0x93, 0x3d, 0xad, 0x44, 0x3a, 0xda, 0x62, 0xbf, 0x3b, 0xbd, 0x48, 0xa4, 0x08, 0x21, 0xfb, 0x2e, 0xc2, 0x34, 0x42, 0x1a, 0xfc, 0xca, 0xef, 0xff, 0xc2, 0x53, 0x07, 0xe2, 0xd9, 0x0a, 0x23, 0x05, 0x49, 0x70, 0x16, 0x01, 0x19, 0xf9, 0xd0, 0x14, 0x5a, 0x05, 0x83, 0xbc, 0x67, 0x11, 0x04, 0x85, 0x6a, 0x2f, 0x73, 0x1f, 0x22, 0xb3, 0x1e, 0xb3, 0xe4, 0x30, 0xa3, 0x77, 0xe0, 0xa3, 0x55, 0x81, 0xa6, 0xed, 0xe1, 0xd9, 0xe9, 0x87 }; static const uint8_t nist_186_2_ecdsa_testvector_56_private[] = { /* d */ 0x00, 0x67, 0x54, 0x3b, 0xb6, 0x91, 0x7b, 0xd7, 0xb3, 0xfb, 0x5b, 0x40, 0xfc, 0x23, 0xb8, 0x66, 0x8d, 0x24, 0xdb, 0x12, 0x54, 0xeb, 0xf1, 0x0a, 0xa7, 0x71, 0x4b, 0x26, 0x5c, 0x7d, 0x84, 0x9a, 0xfe, 0xc4, 0x58, 0xce, 0x06, 0xf2, 0x6c, 0x15, 0x00, 0x5b, 0xc8, 0x04, 0x11, 0xe2, 0xb2, 0x34 }; static const uint8_t nist_186_2_ecdsa_testvector_56_public_x[] = { /* Qx */ 0xaa, 0x1f, 0x66, 0xc6, 0x03, 0x29, 0xa7, 0x90, 0xd9, 0x67, 0xff, 0xe5, 0x86, 0xa4, 0x4a, 0xd0, 0x5c, 0xaf, 0x9e, 0x61, 0x26, 0x34, 0x23, 0x94, 0xfd, 0x6c, 0x02, 0x2a, 0x1e, 0xb1, 0x17, 0xf7, 0xed, 0x53, 0x0e, 0xc1, 0x4e, 0x71, 0x14, 0xca, 0x91, 0x76, 0x7e, 0x96, 0x41, 0x49, 0xcf, 0x5f }; static const uint8_t nist_186_2_ecdsa_testvector_56_public_y[] = { /* Qy */ 0x33, 0x2b, 0xff, 0x23, 0x4b, 0xfb, 0x5e, 0x87, 0xe6, 0x19, 0x4b, 0x35, 0xda, 0xe8, 0x21, 0x4b, 0xa4, 0x1f, 0x9b, 0xa1, 0x32, 0x5f, 0x03, 0x4f, 0xfe, 0xd7, 0x27, 0xb5, 0x73, 0x53, 0xa7, 0x79, 0x49, 0x72, 0xc5, 0x8e, 0x5b, 0x27, 0xd6, 0xba, 0x72, 0xfd, 0x22, 0x43, 0x47, 0xec, 0x2c, 0x7f }; /* k = 00d1f288633a2e827ced39b5b29b925b4242e8cab7cabf51de74e55f3a600cf1d778dd748ec073f8cb3b056e86cabc8c */ static const uint8_t nist_186_2_ecdsa_testvector_56_out[] = { /* R */ 0x17, 0x1d, 0x44, 0xf5, 0xbb, 0xbb, 0x34, 0xb3, 0x5f, 0x3f, 0xb1, 0xaf, 0xae, 0x4e, 0x10, 0xd6, 0x1b, 0x2f, 0x5d, 0xe5, 0x63, 0xa1, 0x10, 0x9e, 0x24, 0x8f, 0xa9, 0x3e, 0x02, 0xca, 0x2d, 0xe8, 0xc1, 0x83, 0x18, 0x48, 0x28, 0x85, 0x57, 0x63, 0x7b, 0x5a, 0x8f, 0xfc, 0x30, 0xb9, 0xed, 0xaa, /* S */ 0x4d, 0x65, 0xe1, 0xb9, 0xc8, 0xb7, 0xff, 0x65, 0x3a, 0x5d, 0x36, 0x0f, 0x86, 0xb5, 0xf9, 0x16, 0x39, 0x02, 0x10, 0x1f, 0x81, 0x8b, 0x09, 0xf7, 0x09, 0x0c, 0x40, 0x74, 0xb1, 0x19, 0x73, 0xa0, 0x80, 0x14, 0x3e, 0x4e, 0x57, 0xaf, 0xb6, 0xfb, 0x41, 0x18, 0x60, 0x29, 0xca, 0xf1, 0xc9, 0x63 }; static const uint8_t nist_186_2_ecdsa_testvector_57_ptx[] = { /* Msg */ 0xac, 0xe2, 0x5c, 0x0d, 0x4f, 0x7d, 0x46, 0x5f, 0x68, 0x43, 0xfb, 0x69, 0x0c, 0x4c, 0x46, 0x9a, 0x83, 0x0a, 0xdc, 0xa4, 0x42, 0x74, 0xec, 0xc8, 0x19, 0x64, 0xf7, 0x54, 0xae, 0x3e, 0xe2, 0x6a, 0x2a, 0xd3, 0x4a, 0x02, 0x32, 0x85, 0x17, 0x32, 0x19, 0xab, 0x54, 0xae, 0x54, 0x37, 0x3e, 0x8b, 0x2e, 0x96, 0x9a, 0x48, 0xbd, 0xd7, 0x4c, 0x0e, 0x14, 0x10, 0x26, 0x37, 0xba, 0xfd, 0xfe, 0x0e, 0x5b, 0xeb, 0x03, 0xd5, 0xbe, 0xd4, 0x51, 0x0d, 0xf7, 0xcc, 0xc2, 0xf1, 0xde, 0x9b, 0x07, 0x44, 0xbf, 0xac, 0xf8, 0x4c, 0x53, 0x26, 0x29, 0x1f, 0xef, 0x58, 0xbe, 0x1d, 0xfc, 0x5a, 0x80, 0xbe, 0xa7, 0xf1, 0x30, 0x8e, 0xd9, 0xb4, 0x1b, 0x75, 0x6a, 0x6d, 0xee, 0x3c, 0x92, 0xc2, 0xcc, 0x4d, 0xa0, 0x15, 0x9e, 0xba, 0xee, 0xa8, 0xaa, 0x81, 0x14, 0x05, 0x68, 0x0f, 0x5c, 0x9d, 0x90, 0x02 }; static const uint8_t nist_186_2_ecdsa_testvector_57_private[] = { /* d */ 0x00, 0x58, 0xfe, 0x57, 0x51, 0x16, 0xc0, 0x54, 0x9b, 0x78, 0x53, 0xf3, 0x36, 0x69, 0x4d, 0xef, 0xda, 0x21, 0xea, 0x42, 0x3b, 0x13, 0x1e, 0x32, 0x28, 0xae, 0x21, 0x3e, 0x05, 0x0d, 0x3e, 0xeb, 0x4c, 0x5e, 0xac, 0x9f, 0x24, 0x96, 0x82, 0x1d, 0x87, 0x18, 0xcd, 0x86, 0xef, 0x94, 0x3e, 0xc4 }; static const uint8_t nist_186_2_ecdsa_testvector_57_public_x[] = { /* Qx */ 0xfa, 0xa6, 0xc0, 0x91, 0x4b, 0x18, 0x9d, 0x9d, 0xf2, 0xf7, 0xef, 0xe2, 0x27, 0xf6, 0xb9, 0x5c, 0x31, 0x02, 0x51, 0xc1, 0xa8, 0xd7, 0xb2, 0x61, 0xa0, 0xbd, 0xb0, 0xce, 0xfa, 0x4f, 0x66, 0x1b, 0xfd, 0xb4, 0xbb, 0x5b, 0xf5, 0x9d, 0x5f, 0x42, 0x0d, 0x57, 0xf7, 0xf2, 0xc8, 0xb3, 0x2e, 0x73 }; static const uint8_t nist_186_2_ecdsa_testvector_57_public_y[] = { /* Qy */ 0x96, 0xf8, 0x23, 0x15, 0xc2, 0x5f, 0x68, 0xf2, 0xbf, 0x7e, 0x5c, 0x8e, 0x74, 0x9f, 0xbc, 0x8c, 0x4d, 0xd8, 0x5f, 0xe1, 0x9a, 0x76, 0xde, 0x7a, 0xe3, 0x5a, 0xbf, 0x80, 0x61, 0x41, 0xb9, 0x5e, 0x02, 0xe5, 0x8d, 0xef, 0xab, 0x62, 0xab, 0x0c, 0x3d, 0x47, 0x97, 0x23, 0x48, 0x1f, 0x2e, 0x02 }; /* k = 004c3a262bc2374600194d52d1e329f32b6dfa30b04f18c6f7bd3e2da69785847fd01142355306a2d94c14fdea1e2a33 */ static const uint8_t nist_186_2_ecdsa_testvector_57_out[] = { /* R */ 0xe9, 0x60, 0xde, 0x23, 0xe2, 0x9b, 0x6f, 0x9d, 0x70, 0x81, 0x39, 0xbe, 0x50, 0xfa, 0xf1, 0xf2, 0x38, 0xae, 0x27, 0x1e, 0x87, 0xa0, 0xad, 0x02, 0x13, 0x51, 0x17, 0xde, 0x08, 0xe6, 0xcb, 0x61, 0x9f, 0x77, 0x01, 0x6d, 0x77, 0x3c, 0xe5, 0x5b, 0x68, 0xb8, 0xbc, 0x4e, 0x63, 0x42, 0xbb, 0x98, /* S */ 0xf3, 0x53, 0xcb, 0x04, 0x5a, 0xb7, 0x2f, 0x01, 0x0b, 0x1b, 0xec, 0x34, 0x42, 0x82, 0xfc, 0xe0, 0xf0, 0x05, 0xe0, 0xa8, 0x3d, 0xaf, 0x9f, 0xa9, 0x3d, 0x9a, 0xf3, 0x81, 0x18, 0xea, 0x33, 0x4c, 0x37, 0xf4, 0xdb, 0xc5, 0x74, 0xe8, 0x13, 0xda, 0x1b, 0x03, 0x9e, 0xea, 0xb8, 0x81, 0x11, 0x7b }; static const uint8_t nist_186_2_ecdsa_testvector_58_ptx[] = { /* Msg */ 0x72, 0xe1, 0x91, 0x7b, 0xf8, 0x3e, 0xe9, 0x68, 0x9b, 0x5f, 0xa8, 0xfe, 0x9e, 0x4a, 0x50, 0x0a, 0xac, 0xcb, 0x0d, 0x58, 0x6e, 0xb8, 0xe9, 0x1c, 0x5d, 0x78, 0x3f, 0x92, 0xd5, 0xc6, 0x72, 0xe2, 0x6b, 0xb3, 0xde, 0x46, 0x81, 0xea, 0x0f, 0x6e, 0x18, 0x38, 0x31, 0x24, 0xe5, 0x4c, 0xc8, 0x2c, 0xa6, 0xbb, 0xa2, 0x6e, 0xb6, 0x47, 0x09, 0x57, 0xdf, 0x60, 0x3d, 0x7c, 0x70, 0xeb, 0x21, 0x80, 0x90, 0x43, 0x34, 0x38, 0xd2, 0x7d, 0xc3, 0x0e, 0x0a, 0xf1, 0x5d, 0xa3, 0x5e, 0xf5, 0x88, 0xb9, 0xa0, 0xec, 0xb2, 0x4f, 0xdb, 0x80, 0x6a, 0x0d, 0x2b, 0x2b, 0xd0, 0xe3, 0xd2, 0xfc, 0x4a, 0xee, 0x89, 0x98, 0x79, 0x9b, 0x14, 0x7f, 0x6c, 0x0e, 0x19, 0x90, 0x13, 0xc5, 0x32, 0xd0, 0xf6, 0x78, 0x41, 0x67, 0x26, 0x44, 0x04, 0xeb, 0x74, 0x09, 0xe9, 0xe1, 0xe2, 0x11, 0x23, 0x81, 0x57, 0xf2 }; static const uint8_t nist_186_2_ecdsa_testvector_58_private[] = { /* d */ 0x00, 0xa9, 0x86, 0xfa, 0x91, 0xca, 0xc9, 0x51, 0x41, 0x0a, 0x7b, 0xec, 0xc9, 0x25, 0x30, 0xa3, 0xf2, 0x24, 0x30, 0xb4, 0xfd, 0xfa, 0xb2, 0x91, 0x68, 0x93, 0xc6, 0x44, 0x18, 0x9a, 0x6a, 0x56, 0x35, 0x41, 0x73, 0x04, 0xaa, 0xc6, 0x02, 0x69, 0x36, 0xef, 0x21, 0x1f, 0x38, 0x37, 0x03, 0xbd }; static const uint8_t nist_186_2_ecdsa_testvector_58_public_x[] = { /* Qx */ 0x37, 0x8c, 0xe7, 0x3b, 0x4a, 0x19, 0x5e, 0xc7, 0x57, 0x54, 0xb2, 0xf5, 0x75, 0x28, 0x36, 0x4a, 0x1f, 0x5d, 0x2c, 0x71, 0x9a, 0xab, 0xd1, 0x29, 0x68, 0x20, 0xa3, 0x53, 0x86, 0xb0, 0x55, 0x64, 0xb3, 0x27, 0x22, 0xaf, 0xa6, 0xcb, 0x22, 0x2b, 0x02, 0xf7, 0x51, 0xfc, 0x45, 0x04, 0xb2, 0x4f }; static const uint8_t nist_186_2_ecdsa_testvector_58_public_y[] = { /* Qy */ 0x10, 0xcb, 0xec, 0x24, 0xb5, 0x0e, 0xc9, 0x0f, 0x64, 0xf0, 0x83, 0x20, 0xea, 0x96, 0xd1, 0x58, 0x10, 0x1f, 0x29, 0x79, 0x9c, 0xc6, 0x69, 0xd0, 0xcd, 0x6a, 0x7a, 0x4d, 0x38, 0x0e, 0x51, 0xec, 0x98, 0xdc, 0xbf, 0x41, 0xea, 0xd7, 0x2a, 0xbd, 0xf2, 0xc7, 0x51, 0x31, 0x95, 0x7e, 0xa0, 0x89 }; /* k = 00444b31ec4e95af9529be93fe41ed60ced6441b5313d635adac9116142fe7e8e19f28a869486656cd99b8013b6a9642 */ static const uint8_t nist_186_2_ecdsa_testvector_58_out[] = { /* R */ 0x19, 0x1b, 0xd6, 0xd5, 0xcd, 0x8b, 0xca, 0x92, 0xa2, 0x87, 0x44, 0xf7, 0x6d, 0x29, 0x6a, 0x9a, 0x92, 0x06, 0xad, 0x67, 0x55, 0xe7, 0x5e, 0x90, 0x2a, 0xac, 0x01, 0x80, 0x40, 0xf6, 0xa6, 0xd3, 0xe3, 0x87, 0x86, 0x37, 0x41, 0x67, 0x01, 0xb2, 0xef, 0x5b, 0x22, 0x94, 0x3e, 0xe4, 0x7d, 0x92, /* S */ 0xdf, 0x07, 0xb2, 0x56, 0x3a, 0x1b, 0xd7, 0x00, 0x7e, 0x62, 0xc8, 0x2d, 0x6a, 0xd1, 0xeb, 0x10, 0xd0, 0xf6, 0xd9, 0x76, 0x6e, 0x01, 0x43, 0x87, 0x84, 0x8e, 0x94, 0xe5, 0x92, 0x2f, 0xa5, 0x82, 0xc9, 0x32, 0x91, 0x7a, 0xcf, 0x30, 0xfd, 0x83, 0xa9, 0xd7, 0xe2, 0xfc, 0xd9, 0xc8, 0x08, 0x9c }; static const uint8_t nist_186_2_ecdsa_testvector_59_ptx[] = { /* Msg */ 0x6c, 0xf7, 0x75, 0xc9, 0xd5, 0x4b, 0x0a, 0x99, 0xf1, 0x8b, 0xca, 0x17, 0x7f, 0x0b, 0x0d, 0x49, 0x3a, 0x2a, 0x01, 0xb7, 0x5a, 0xcd, 0x4b, 0x7c, 0x5d, 0x0d, 0xf1, 0x9c, 0x07, 0x2d, 0x77, 0x98, 0xa8, 0xcf, 0x48, 0x40, 0x9d, 0x67, 0x58, 0xc9, 0x19, 0xef, 0x08, 0x1f, 0x26, 0xdd, 0x4a, 0x7c, 0xe6, 0x52, 0x05, 0x3a, 0x1f, 0x94, 0xbb, 0xe6, 0xf6, 0xbe, 0x69, 0x95, 0xfb, 0xb6, 0xae, 0x7b, 0x66, 0x60, 0x30, 0xb9, 0xa0, 0x11, 0x3c, 0x77, 0x06, 0x47, 0xac, 0x33, 0xe9, 0x97, 0x0e, 0x58, 0xd9, 0xe6, 0x02, 0x13, 0x23, 0xdc, 0xe4, 0x62, 0x98, 0x96, 0xab, 0x6e, 0x90, 0x9b, 0x11, 0x1a, 0x2f, 0x12, 0xf5, 0xdc, 0xe7, 0x32, 0xfd, 0xcc, 0x3e, 0xf9, 0x7f, 0xfa, 0xd2, 0x21, 0xa2, 0x05, 0x9a, 0x50, 0xc0, 0xe9, 0x6e, 0x8f, 0x0f, 0x19, 0xca, 0xfd, 0x81, 0xce, 0xcf, 0xc4, 0xe8, 0x9e }; static const uint8_t nist_186_2_ecdsa_testvector_59_private[] = { /* d */ 0x00, 0x33, 0xac, 0xf6, 0xc1, 0x1e, 0x48, 0xd2, 0x01, 0x0c, 0x5a, 0x82, 0xc5, 0x7b, 0xb6, 0xdc, 0xfe, 0x43, 0x6b, 0x07, 0xc0, 0x0b, 0x67, 0xb6, 0x1e, 0xec, 0x4e, 0xb5, 0xc4, 0xc8, 0x3c, 0xcd, 0x16, 0x56, 0x22, 0x91, 0xc0, 0x4d, 0x3b, 0x5e, 0x0d, 0x22, 0xcf, 0xf6, 0x1c, 0x15, 0x09, 0xb1 }; static const uint8_t nist_186_2_ecdsa_testvector_59_public_x[] = { /* Qx */ 0x5c, 0xa5, 0xbe, 0xa1, 0x70, 0xdd, 0x19, 0xcc, 0x88, 0xd7, 0x11, 0x3f, 0xd6, 0x28, 0xc0, 0x84, 0xad, 0x42, 0xf3, 0xc5, 0xd1, 0xe8, 0x29, 0x40, 0x8c, 0x12, 0x6e, 0xc5, 0xaa, 0xc0, 0x6c, 0x34, 0xc6, 0x89, 0x3f, 0x9d, 0x44, 0x53, 0x9f, 0xd1, 0x60, 0x1b, 0x49, 0x3d, 0x52, 0x61, 0x87, 0xe9 }; static const uint8_t nist_186_2_ecdsa_testvector_59_public_y[] = { /* Qy */ 0xa4, 0x98, 0xb6, 0xec, 0xed, 0x71, 0x9c, 0x9a, 0xc2, 0xf8, 0xc7, 0x3e, 0x97, 0x94, 0xb4, 0x8f, 0x59, 0x47, 0x0f, 0x16, 0xfc, 0x22, 0x47, 0x2e, 0x4c, 0x7d, 0xe0, 0x76, 0xa7, 0x36, 0xad, 0x2e, 0x43, 0x99, 0xe9, 0xe9, 0xe1, 0xb7, 0x26, 0x00, 0x22, 0x50, 0xbe, 0xe6, 0xdc, 0xa7, 0xfd, 0xa9 }; /* k = 0090c4418f19d7bd59736d4ddfade964e38cd3d159434a73c8e2d1e8c3fde153a742fa3f7b6c74d15601e0601987eaa9 */ static const uint8_t nist_186_2_ecdsa_testvector_59_out[] = { /* R */ 0xff, 0xfc, 0x02, 0x1b, 0x5e, 0x5a, 0x7b, 0x67, 0x5d, 0x3d, 0x34, 0x5e, 0xca, 0x74, 0xc9, 0x7e, 0x31, 0x51, 0x6d, 0xe0, 0x21, 0x5d, 0xde, 0x3a, 0x79, 0x9e, 0x7a, 0x2f, 0x83, 0x04, 0xaf, 0xd8, 0x1c, 0xa2, 0x95, 0xa7, 0xf1, 0xe9, 0x6c, 0xd2, 0xa5, 0x21, 0x87, 0x65, 0xe2, 0xb2, 0xfc, 0x5f, /* S */ 0x60, 0x12, 0x80, 0xd4, 0xd4, 0xc2, 0x50, 0x19, 0x9e, 0x11, 0x42, 0xb3, 0x4b, 0x80, 0x6d, 0x16, 0x51, 0x61, 0x99, 0xf1, 0x43, 0xf0, 0x7a, 0xdf, 0xb4, 0xb9, 0x6a, 0xc6, 0x44, 0xbe, 0xf3, 0xb2, 0x51, 0x36, 0x09, 0x25, 0xb8, 0xdb, 0xbe, 0x4b, 0xe2, 0x08, 0x20, 0x1a, 0x7e, 0xe4, 0x1b, 0x48 }; static const uint8_t nist_186_2_ecdsa_testvector_60_ptx[] = { /* Msg */ 0xc9, 0xf1, 0xbc, 0x04, 0xe1, 0x1c, 0x29, 0x36, 0x26, 0xfe, 0xae, 0x66, 0x96, 0xf0, 0x50, 0x59, 0x71, 0x84, 0x66, 0xd9, 0xea, 0x6c, 0xf1, 0xb5, 0x23, 0x98, 0x2b, 0x0a, 0x58, 0x9f, 0x63, 0xc1, 0x5b, 0x60, 0x07, 0x59, 0x40, 0xe9, 0x03, 0xe6, 0x59, 0x98, 0x49, 0x5a, 0x65, 0x7f, 0xb1, 0x04, 0x04, 0x0d, 0x04, 0x56, 0x6e, 0xeb, 0x53, 0xeb, 0x65, 0x25, 0x8e, 0xc9, 0x68, 0x8a, 0x52, 0xe3, 0x2a, 0x55, 0x01, 0xe2, 0x42, 0x0d, 0x18, 0x24, 0x24, 0xa9, 0xbd, 0x05, 0x50, 0xf8, 0x98, 0x5e, 0xc9, 0x40, 0xe4, 0x4c, 0xc9, 0x26, 0xc6, 0x33, 0xb3, 0xcd, 0xdd, 0x02, 0x49, 0x42, 0x1a, 0xb8, 0x1f, 0x18, 0xd2, 0x27, 0x4f, 0x4f, 0x11, 0xf7, 0x6f, 0x7b, 0x32, 0xef, 0xc0, 0x21, 0xac, 0x70, 0xa8, 0x65, 0x2f, 0x42, 0x63, 0xe2, 0xf0, 0x94, 0xf5, 0xda, 0x41, 0x3d, 0x63, 0x8f, 0x64, 0x48 }; static const uint8_t nist_186_2_ecdsa_testvector_60_private[] = { /* d */ 0x00, 0x4b, 0xf7, 0xfd, 0x8d, 0x0e, 0xde, 0x8f, 0xf1, 0xf5, 0x68, 0xed, 0x3a, 0xb9, 0xce, 0xd8, 0x2c, 0x4e, 0xfe, 0xe7, 0xb2, 0xb6, 0x49, 0x32, 0x39, 0x2e, 0x6c, 0x70, 0xf1, 0xf3, 0x89, 0x7c, 0x3a, 0xf5, 0x43, 0x53, 0xb5, 0xf4, 0x1d, 0x19, 0x9e, 0x44, 0x33, 0x9f, 0x73, 0xac, 0x6d, 0xaa }; static const uint8_t nist_186_2_ecdsa_testvector_60_public_x[] = { /* Qx */ 0x50, 0x67, 0x5a, 0x40, 0x95, 0x31, 0x71, 0xe5, 0xf3, 0x56, 0x51, 0xad, 0x8d, 0xd7, 0xb7, 0x44, 0x72, 0x32, 0x13, 0x26, 0x99, 0x2e, 0xbc, 0xae, 0xb2, 0x47, 0xe0, 0x2b, 0x7d, 0x40, 0x29, 0xf2, 0x93, 0x6b, 0x13, 0x00, 0x96, 0xfc, 0x3d, 0xae, 0x36, 0xc4, 0xc0, 0x73, 0x6d, 0x2b, 0xaf, 0xc8 }; static const uint8_t nist_186_2_ecdsa_testvector_60_public_y[] = { /* Qy */ 0x3e, 0x28, 0x73, 0x8b, 0x00, 0xb2, 0xcb, 0x5b, 0x6c, 0x69, 0xe4, 0x94, 0x94, 0xf3, 0x10, 0xe6, 0x69, 0x33, 0xfe, 0x9b, 0xa0, 0x6f, 0xaa, 0x85, 0x02, 0x87, 0xa0, 0x05, 0x8c, 0xd6, 0x09, 0x35, 0xce, 0x08, 0xda, 0x14, 0x3c, 0x5d, 0x04, 0x04, 0x4a, 0xea, 0x40, 0x1a, 0xbf, 0x63, 0xd4, 0xfb }; /* k = 001bac143611a010a5713f1db6bcc93c18ddb809e07f1c96e7f296b878c2a747f7b5b47b5f4dcec1d65c28abc8918bef */ static const uint8_t nist_186_2_ecdsa_testvector_60_out[] = { /* R */ 0x99, 0x04, 0xcb, 0x5c, 0xb4, 0x92, 0x7b, 0x9c, 0xd6, 0x1b, 0xe9, 0x0a, 0x49, 0x8d, 0xd5, 0xf3, 0xa5, 0xb1, 0x66, 0x10, 0x32, 0xa1, 0x3e, 0xa2, 0x0d, 0x0c, 0x9c, 0x9a, 0xb5, 0x7a, 0xe6, 0xf5, 0x0d, 0x62, 0xa1, 0xee, 0x14, 0x46, 0xa3, 0xd6, 0xe3, 0x5a, 0x46, 0xa9, 0x65, 0x34, 0x52, 0x0a, /* S */ 0xaa, 0x1f, 0xd2, 0x69, 0xfb, 0xad, 0xa3, 0xbd, 0xe4, 0x20, 0x10, 0x0e, 0x54, 0xa4, 0x8e, 0xc4, 0x77, 0xb2, 0xe9, 0x63, 0xe9, 0x6e, 0x43, 0x7f, 0xc3, 0x1c, 0x52, 0xad, 0xe5, 0xab, 0x32, 0x0a, 0x70, 0x7f, 0x9f, 0xd6, 0xd6, 0x29, 0x41, 0x0c, 0x45, 0x18, 0x06, 0xdf, 0x7f, 0xcc, 0x2e, 0x46 }; /* [P-521] */ static const uint8_t nist_186_2_ecdsa_testvector_61_ptx[] = { /* Msg */ 0xcc, 0x92, 0xca, 0x36, 0xa7, 0x67, 0x60, 0x75, 0x2b, 0x5a, 0x45, 0xca, 0x5d, 0x72, 0x35, 0x94, 0x71, 0x22, 0xa6, 0x00, 0x2f, 0x1d, 0x4e, 0x7d, 0x9c, 0x6b, 0xe5, 0x70, 0xd7, 0xbd, 0x2c, 0x29, 0x41, 0xfe, 0x2e, 0x16, 0xe0, 0x2a, 0xc6, 0x37, 0x06, 0x63, 0x61, 0xd2, 0x2d, 0x42, 0x05, 0x68, 0x26, 0x6b, 0x93, 0xe7, 0x73, 0x64, 0x49, 0x21, 0xf1, 0xa7, 0x8a, 0x7d, 0xba, 0xf5, 0xe2, 0xed, 0x49, 0xee, 0x45, 0x20, 0xdf, 0xdf, 0x97, 0xf8, 0x26, 0xdb, 0x72, 0x3e, 0x14, 0x0d, 0x23, 0x95, 0x13, 0x4c, 0xf5, 0xac, 0x5f, 0xf0, 0xb3, 0xb8, 0xaf, 0xe4, 0x68, 0x22, 0x17, 0xfd, 0x69, 0x7c, 0x2d, 0x8a, 0x95, 0xba, 0x6b, 0x2d, 0xdc, 0x9f, 0xd4, 0xe9, 0xfe, 0x75, 0xda, 0x7b, 0x95, 0x01, 0x80, 0xee, 0x56, 0xb6, 0xbc, 0x6a, 0x94, 0x29, 0x1f, 0x4d, 0x05, 0xc5, 0xb7, 0x7c, 0xc9, 0xc0 }; static const uint8_t nist_186_2_ecdsa_testvector_61_private[] = { /* d - byte alignment */ 0x00, 0x3d, 0x72, 0xbc, 0xc7, 0x00, 0x69, 0x5d, 0x40, 0x0c, 0x81, 0x3d, 0xfd, 0xa1, 0xe3, 0xb3, 0xbf, 0x2c, 0xbc, 0x15, 0xf2, 0x8d, 0x27, 0x2d, 0xcb, 0x3b, 0xd7, 0xf9, 0x35, 0xfd, 0xab, 0xac, 0x9c, 0x27, 0x7d, 0xc4, 0x7a, 0x32, 0x45, 0x73, 0x7b, 0x40, 0xde, 0xd8, 0xd0, 0xd2, 0x46, 0x4c, 0xaa, 0x6a, 0xfa, 0x8b, 0x97, 0x16, 0x93, 0xcb, 0x25, 0x8a, 0x8f, 0x58, 0xe6, 0x3f, 0xab, 0x2c, 0x48, 0x56 }; static const uint8_t nist_186_2_ecdsa_testvector_61_public_x[] = { /* Qx - byte alignment */ 0x00, 0xf1, 0xdc, 0x7c, 0xcb, 0x09, 0xd6, 0x1e, 0x6a, 0xf3, 0x79, 0xb8, 0x9a, 0xca, 0x90, 0x5b, 0x49, 0x77, 0x9f, 0xbe, 0x43, 0xa9, 0x4c, 0x8e, 0xf3, 0x84, 0xcc, 0xbf, 0x66, 0x0f, 0x48, 0x05, 0xc9, 0x65, 0xa3, 0xa2, 0x4e, 0xd5, 0xa9, 0x62, 0xc2, 0x48, 0x09, 0x41, 0x5c, 0xde, 0xcf, 0xdf, 0xe5, 0x0f, 0xd1, 0x8f, 0x12, 0x66, 0x07, 0x31, 0x54, 0xb6, 0x2f, 0x35, 0x5f, 0xe4, 0xc9, 0x8a, 0xf6, 0xe5 }; static const uint8_t nist_186_2_ecdsa_testvector_61_public_y[] = { /* Qy - byte alignment */ 0x01, 0x74, 0x0e, 0xb9, 0x5b, 0x8e, 0x31, 0xa0, 0x43, 0x4c, 0x98, 0x8f, 0x2e, 0xdd, 0x55, 0x0b, 0x8d, 0xc6, 0xc4, 0x5c, 0x6f, 0x50, 0x43, 0x09, 0x25, 0x53, 0x70, 0xcc, 0xe5, 0x7e, 0x82, 0x1f, 0xcb, 0x4f, 0x60, 0xba, 0xd1, 0x7a, 0x8f, 0xb9, 0xa3, 0xf4, 0xdc, 0x67, 0xed, 0x48, 0x60, 0xae, 0x6d, 0xd3, 0xed, 0x4b, 0x1f, 0x51, 0xb9, 0x84, 0x51, 0xb7, 0xe7, 0x09, 0x5c, 0xc8, 0x7d, 0x4d, 0x62, 0x79 }; /* k = 1fc81abec3fab91a439df81eb49a7179230866c2e0e505d696ca37972e4af043f6ce6edea69c5711d14c43905b3dcc9ed48d225d50d8b136b6f0787215b3500be53 */ static const uint8_t nist_186_2_ecdsa_testvector_61_out[] = { /* R - byte alignment */ 0x00, 0xd3, 0x14, 0xdd, 0xe7, 0x4c, 0xce, 0x60, 0x24, 0x51, 0x89, 0x80, 0xad, 0x85, 0xcc, 0x7d, 0x5a, 0x29, 0x4e, 0x14, 0x8f, 0xa2, 0x6f, 0x06, 0x48, 0x48, 0x6a, 0x6d, 0x28, 0x82, 0xca, 0x7a, 0x92, 0xa1, 0xc9, 0x34, 0xc4, 0xb0, 0x1e, 0xe1, 0xf6, 0xcc, 0x1d, 0xcc, 0x59, 0x20, 0xd4, 0x97, 0x19, 0xa1, 0x82, 0x3c, 0xfa, 0x32, 0xa6, 0x9c, 0xda, 0x71, 0x0b, 0x0e, 0x95, 0x62, 0x3b, 0xbb, 0x04, 0x51, /* S - byte alignment */ 0x01, 0x4b, 0x0b, 0x93, 0xbd, 0xa1, 0x37, 0xa5, 0x29, 0x39, 0x00, 0xeb, 0x6c, 0xb6, 0xb1, 0x51, 0xe3, 0x30, 0x1b, 0x8e, 0x29, 0x44, 0xea, 0xee, 0x5c, 0xe0, 0xf8, 0xdf, 0x87, 0xc9, 0x84, 0x1b, 0x61, 0x37, 0x2a, 0x2d, 0x70, 0xe7, 0x75, 0xc6, 0x75, 0x8d, 0x29, 0xa7, 0xd2, 0x4f, 0x62, 0xc6, 0x9d, 0xc8, 0x84, 0xb5, 0x4c, 0xe6, 0x7a, 0x8e, 0xdb, 0x51, 0xa0, 0x72, 0xe4, 0x79, 0x7a, 0x9b, 0x03, 0x6d }; static const uint8_t nist_186_2_ecdsa_testvector_62_ptx[] = { /* Msg */ 0x7a, 0x32, 0xe2, 0x33, 0x4f, 0x40, 0x4d, 0x73, 0x4d, 0x4c, 0x54, 0x22, 0x3c, 0xd0, 0x16, 0x2d, 0x63, 0xc7, 0x38, 0xfb, 0x9c, 0x6b, 0x93, 0x50, 0xae, 0x43, 0x29, 0x72, 0xd6, 0x5d, 0x5e, 0x8b, 0xa7, 0xd9, 0x65, 0x4f, 0x15, 0xa7, 0xf8, 0xde, 0xcc, 0x90, 0x4c, 0xec, 0xc6, 0x7b, 0x44, 0x1f, 0x1c, 0xe9, 0xe5, 0xb8, 0x1c, 0xc3, 0x0a, 0x76, 0x9d, 0x55, 0x58, 0xb7, 0x8f, 0x9a, 0x75, 0xe1, 0xd6, 0xba, 0x75, 0x00, 0x59, 0xd1, 0x95, 0xb1, 0x55, 0xf2, 0x2c, 0x3e, 0xf8, 0x6c, 0xde, 0x0a, 0x2b, 0x4b, 0x13, 0x30, 0xaf, 0x22, 0xa7, 0x67, 0x6b, 0x08, 0xe4, 0x29, 0x04, 0xe1, 0xad, 0x14, 0xaf, 0xdf, 0xfb, 0x90, 0x43, 0x48, 0x8e, 0xb2, 0x93, 0x79, 0xdc, 0x60, 0xfa, 0x2b, 0x4e, 0xb6, 0x37, 0xf5, 0xab, 0xa9, 0x7b, 0x12, 0xd4, 0xea, 0xc1, 0x65, 0xb3, 0x0d, 0x5e, 0xba, 0x6e, 0xeb }; static const uint8_t nist_186_2_ecdsa_testvector_62_private[] = { /* d - byte alignment */ 0x01, 0x80, 0x52, 0x67, 0x3f, 0xd9, 0x1a, 0x37, 0x44, 0x8f, 0x1f, 0x33, 0xad, 0x88, 0x52, 0x6e, 0xf7, 0x38, 0xf2, 0x2e, 0x64, 0x76, 0x25, 0x6d, 0xab, 0x6c, 0x74, 0x48, 0x37, 0x1e, 0x60, 0x85, 0x0d, 0xa9, 0xd7, 0x38, 0xab, 0x9f, 0x3e, 0x40, 0x20, 0x61, 0xee, 0x95, 0xab, 0xb7, 0x04, 0x36, 0xd2, 0x82, 0xd3, 0xe8, 0xe6, 0x35, 0x95, 0xd4, 0xdd, 0xfa, 0xcf, 0x94, 0xd5, 0x3b, 0x3a, 0xf5, 0xd3, 0x48 }; static const uint8_t nist_186_2_ecdsa_testvector_62_public_x[] = { /* Qx - byte alignment */ 0x00, 0x62, 0xa0, 0x05, 0xd8, 0x0e, 0xc3, 0xee, 0x67, 0xc1, 0xc1, 0x84, 0xeb, 0x2e, 0xfe, 0x8d, 0x10, 0x63, 0xe8, 0x1e, 0xb2, 0xf9, 0x19, 0x35, 0x7b, 0xb4, 0x42, 0x05, 0x2d, 0x97, 0x7d, 0x14, 0x3d, 0xd7, 0xca, 0x9b, 0xe4, 0x3f, 0x62, 0x40, 0x28, 0xb7, 0xf8, 0xc8, 0x24, 0x22, 0xe5, 0xfd, 0xf6, 0x3d, 0x19, 0xf2, 0xce, 0xa7, 0xe2, 0xa4, 0xf6, 0x67, 0x8a, 0x57, 0x16, 0x5a, 0x1c, 0x45, 0xaa, 0x34 }; static const uint8_t nist_186_2_ecdsa_testvector_62_public_y[] = { /* Qy - byte alignment */ 0x01, 0x72, 0x4c, 0xb8, 0x34, 0xd5, 0x38, 0x3a, 0x18, 0x9c, 0xcf, 0x7f, 0x37, 0x2f, 0x16, 0x69, 0x4a, 0xf1, 0xdb, 0xaf, 0xad, 0xb3, 0xf5, 0x69, 0xd3, 0x4d, 0x2e, 0xd5, 0x4d, 0x70, 0xaa, 0xb1, 0x06, 0xbb, 0xbf, 0x04, 0x1f, 0x53, 0x9d, 0xae, 0x97, 0xc6, 0xef, 0xa3, 0x5d, 0x41, 0xb3, 0x90, 0xb1, 0xad, 0x75, 0x1e, 0xed, 0x2c, 0x0d, 0x83, 0x87, 0x84, 0x11, 0x1b, 0xb5, 0x62, 0xde, 0x9b, 0xeb, 0x72 }; /* k = 160bcb5a661ffb58dda4110a003e83623e5eecf39de285fd8c79674a40cd89959a04936aa0288ef7e8d6621f882b5c8ab3eca58bb3ba48919087313def041433339 */ static const uint8_t nist_186_2_ecdsa_testvector_62_out[] = { /* R - byte alignment */ 0x00, 0x21, 0xbc, 0xa7, 0x96, 0xda, 0xfa, 0x1c, 0xb5, 0xbf, 0xbd, 0xc3, 0xfd, 0x70, 0x78, 0x7e, 0xd6, 0x40, 0x5d, 0x41, 0x8a, 0x12, 0xe2, 0x24, 0xb3, 0x4d, 0x95, 0x16, 0xb8, 0x9e, 0x29, 0xa4, 0x86, 0x60, 0x7b, 0xb7, 0xd5, 0x1f, 0x68, 0x23, 0xb5, 0x85, 0x57, 0x9f, 0x33, 0xa8, 0x6f, 0x6a, 0x6b, 0x31, 0x19, 0x7e, 0x7d, 0xd1, 0x67, 0x44, 0xe9, 0x07, 0x16, 0xa7, 0xdc, 0x94, 0x7a, 0xc9, 0x69, 0x30, /* S - byte alignment */ 0x00, 0xc4, 0x26, 0xdd, 0xe5, 0x52, 0xbb, 0x1c, 0x56, 0xbb, 0xa1, 0x73, 0x93, 0x0b, 0xd5, 0x47, 0x63, 0x9a, 0xc8, 0xbc, 0x75, 0x2f, 0x76, 0x2e, 0xaa, 0xf8, 0x92, 0x4a, 0x8a, 0xe5, 0xf6, 0x46, 0xca, 0x93, 0xae, 0x46, 0x48, 0x8e, 0xad, 0x0f, 0x37, 0x58, 0xe7, 0x87, 0xf2, 0x37, 0x95, 0x92, 0x0a, 0xf0, 0x26, 0x39, 0x50, 0xf8, 0x3c, 0x73, 0xf5, 0x99, 0x4b, 0x7f, 0x4a, 0xd6, 0x82, 0x32, 0x86, 0x6c }; static const uint8_t nist_186_2_ecdsa_testvector_63_ptx[] = { /* Msg */ 0xd7, 0xf3, 0x4b, 0x6d, 0xf5, 0x43, 0x9d, 0xf3, 0x35, 0x51, 0x45, 0xc2, 0xb1, 0x60, 0xca, 0x56, 0xc6, 0xea, 0x11, 0x14, 0x18, 0x93, 0x7e, 0xdb, 0xd6, 0x5b, 0x5c, 0xdd, 0x40, 0x17, 0x7f, 0xad, 0x66, 0x22, 0x27, 0x98, 0x32, 0x50, 0x28, 0x39, 0xa8, 0x23, 0x48, 0x48, 0x6d, 0x42, 0xe9, 0xb3, 0x86, 0x26, 0xe8, 0xf0, 0x63, 0x17, 0xc4, 0x91, 0x1c, 0x57, 0x03, 0x19, 0xfa, 0x9d, 0xd1, 0x0e, 0x39, 0xc4, 0xeb, 0x4f, 0x0c, 0xc5, 0xbb, 0xa8, 0xe2, 0xe3, 0xc4, 0xa4, 0xe8, 0x25, 0x41, 0xa2, 0xcf, 0x09, 0x09, 0x2b, 0xcf, 0x77, 0xb6, 0x83, 0xec, 0xf4, 0x06, 0x7e, 0x78, 0x18, 0x82, 0x95, 0xd9, 0x42, 0x5d, 0x39, 0x8c, 0x8a, 0x9e, 0x68, 0x6a, 0xf7, 0x82, 0x7d, 0x2a, 0xf3, 0x1b, 0x4c, 0x28, 0xfb, 0x3e, 0x6e, 0x64, 0x9b, 0x9c, 0xda, 0xce, 0x9a, 0x2f, 0xb5, 0xc1, 0x72, 0xd8, 0x6c }; static const uint8_t nist_186_2_ecdsa_testvector_63_private[] = { /* d - byte alignment */ 0x01, 0x0e, 0xae, 0xa9, 0x31, 0x4d, 0xf0, 0x9f, 0x87, 0xf6, 0xd8, 0x96, 0x07, 0x24, 0x2d, 0xfe, 0xb2, 0x5f, 0x20, 0x63, 0xcd, 0xeb, 0x50, 0x4e, 0xcd, 0x01, 0xff, 0xa6, 0xe2, 0x2d, 0xab, 0xc0, 0x58, 0x78, 0xba, 0x56, 0xcd, 0x7b, 0x54, 0x38, 0x40, 0x9d, 0x2e, 0x64, 0x78, 0xe1, 0x03, 0xa3, 0xe7, 0xef, 0x4f, 0xa8, 0x79, 0x96, 0xc7, 0x95, 0x15, 0x56, 0xc1, 0x38, 0x09, 0x90, 0x18, 0x16, 0x9c, 0x65 }; static const uint8_t nist_186_2_ecdsa_testvector_63_public_x[] = { /* Qx - byte alignment */ 0x00, 0xd2, 0xec, 0x1e, 0xd0, 0x13, 0xcc, 0x92, 0x75, 0xc0, 0x4a, 0x8d, 0xdb, 0xea, 0x61, 0x68, 0xd9, 0x2e, 0x52, 0x2a, 0xae, 0x42, 0x00, 0x2c, 0x3b, 0x0f, 0xf1, 0x00, 0x86, 0xb2, 0x16, 0x71, 0xd6, 0xd5, 0xe0, 0x85, 0xe9, 0x5d, 0x41, 0x1a, 0xc9, 0x71, 0xfc, 0x57, 0x4a, 0x93, 0xd9, 0x94, 0x43, 0x1d, 0x62, 0x1e, 0x67, 0xfb, 0x3e, 0xe4, 0x59, 0x9b, 0x7d, 0xd7, 0xd4, 0x89, 0xd0, 0xc8, 0x4b, 0xa6 }; static const uint8_t nist_186_2_ecdsa_testvector_63_public_y[] = { /* Qy - byte alignment */ 0x00, 0x56, 0x45, 0x3c, 0x78, 0x3a, 0xb4, 0x6f, 0x55, 0x3c, 0x6e, 0xae, 0x03, 0xc4, 0x6d, 0x4f, 0x44, 0x63, 0xc6, 0x1c, 0x4c, 0xaa, 0xde, 0x1b, 0x58, 0x3c, 0x3c, 0x82, 0x89, 0x1f, 0x2f, 0xda, 0x17, 0x17, 0x35, 0x1f, 0x7d, 0x24, 0xff, 0x71, 0x8e, 0xf7, 0xb3, 0xf0, 0x2b, 0x39, 0xf2, 0xbd, 0x97, 0xf9, 0xd0, 0x3a, 0xd0, 0x8d, 0x05, 0xa2, 0xea, 0xed, 0xb0, 0x59, 0x0d, 0x94, 0x1f, 0x77, 0x60, 0x01 }; /* k = 1ee6d3bc2a6f7806bbb8e6993ff5a5cd2c4e34eac96d499814a387e88a3af15cfa251361fe02d376b8952f01c701246eaa1cdb6c40ef9537db1d9764c23242a0712 */ static const uint8_t nist_186_2_ecdsa_testvector_63_out[] = { /* R - byte alignment */ 0x00, 0xe7, 0x7d, 0x33, 0x8c, 0x32, 0x41, 0x62, 0x09, 0x89, 0xa4, 0xd1, 0x78, 0xb8, 0x51, 0xbd, 0x6c, 0x8d, 0xd0, 0x66, 0x70, 0x02, 0xc2, 0xfe, 0xe6, 0x03, 0xdd, 0x2b, 0xbe, 0xe1, 0x9f, 0x57, 0x2d, 0x2d, 0x47, 0x9c, 0x63, 0xed, 0x41, 0xee, 0xb9, 0x59, 0x88, 0xcb, 0x8f, 0xaa, 0x91, 0x23, 0x42, 0xf5, 0x46, 0xf0, 0x44, 0x5e, 0xdb, 0x15, 0x8b, 0x0f, 0x2c, 0x6d, 0x7a, 0xee, 0x4b, 0x37, 0xa7, 0x41, /* S - byte alignment */ 0x01, 0x02, 0x39, 0x4e, 0x35, 0x36, 0xa9, 0xd4, 0xc5, 0x9e, 0x8f, 0xfa, 0x19, 0x45, 0xc0, 0x7b, 0xee, 0xbf, 0x53, 0x5c, 0xd3, 0xea, 0x00, 0x1a, 0x4c, 0x31, 0x09, 0xd7, 0xdb, 0x6b, 0x11, 0xf3, 0xc8, 0x94, 0x03, 0xc4, 0x9e, 0x06, 0xd5, 0x0d, 0xb4, 0xaa, 0xa9, 0xe5, 0x2e, 0x32, 0xb9, 0xdd, 0x4d, 0x3c, 0xf4, 0xfe, 0xdb, 0x5e, 0x72, 0x80, 0x8f, 0xdc, 0x5b, 0x14, 0xd6, 0xc4, 0xd2, 0x91, 0x9d, 0x96 }; static const uint8_t nist_186_2_ecdsa_testvector_64_ptx[] = { /* Msg */ 0x05, 0xeb, 0xa7, 0x19, 0xfd, 0x16, 0x2f, 0xa6, 0x27, 0x63, 0x26, 0x67, 0x34, 0x91, 0xde, 0xb6, 0x23, 0x70, 0x7c, 0x76, 0x5b, 0xa0, 0xa8, 0xf9, 0xf7, 0x9b, 0x89, 0x21, 0x61, 0xf5, 0xf0, 0xc6, 0x22, 0xe3, 0xd3, 0x58, 0xf8, 0xfb, 0xfe, 0xc6, 0x29, 0x3a, 0x05, 0x9e, 0x18, 0x4b, 0x7d, 0x75, 0x16, 0x06, 0x6b, 0x89, 0x7a, 0x38, 0xfd, 0xa5, 0xf4, 0xa2, 0x78, 0x45, 0x1e, 0x44, 0x72, 0xfb, 0x54, 0xdb, 0x41, 0x11, 0xc6, 0xa8, 0xb3, 0x70, 0xcb, 0x73, 0x00, 0xc0, 0x79, 0xd0, 0xfc, 0xd1, 0x72, 0xa1, 0x91, 0x3a, 0x00, 0xdc, 0x6d, 0x40, 0x65, 0x8e, 0xf8, 0xf9, 0x6c, 0x20, 0x89, 0xb1, 0x44, 0xd9, 0xd9, 0x8c, 0x8e, 0xa5, 0xb8, 0x6d, 0xb5, 0x15, 0xfe, 0x17, 0x7e, 0xa6, 0xc5, 0x92, 0xe0, 0x46, 0xd5, 0xd1, 0x15, 0x14, 0x60, 0x91, 0xf1, 0x68, 0xf0, 0x84, 0x73, 0x13, 0x9d, 0xaf }; static const uint8_t nist_186_2_ecdsa_testvector_64_private[] = { /* d - byte alignment */ 0x00, 0x5b, 0xb2, 0xc9, 0xf4, 0x51, 0xdd, 0x3e, 0x11, 0x13, 0x03, 0x5b, 0x8f, 0x8a, 0x2f, 0xb7, 0xc2, 0xa5, 0xa2, 0xdf, 0x96, 0x30, 0x1e, 0x7b, 0x42, 0xe9, 0xed, 0xf3, 0x65, 0xa9, 0x5e, 0x6e, 0xe6, 0x84, 0xa8, 0xfd, 0xf1, 0x52, 0x67, 0x2a, 0x7f, 0x1a, 0x0b, 0x2a, 0xda, 0x2f, 0xa3, 0x30, 0xaa, 0x91, 0x32, 0x99, 0x4d, 0x19, 0x69, 0xdb, 0x57, 0x0a, 0x19, 0x5f, 0x1e, 0xf1, 0xea, 0xfe, 0x8d, 0x64 }; static const uint8_t nist_186_2_ecdsa_testvector_64_public_x[] = { /* Qx - byte alignment */ 0x00, 0xe1, 0xd4, 0x25, 0x54, 0xf0, 0x60, 0x16, 0xc2, 0x20, 0x24, 0xa0, 0x57, 0xa1, 0xb9, 0xe0, 0x6c, 0x6a, 0x42, 0x2a, 0x85, 0x24, 0x2d, 0x7a, 0xb6, 0x91, 0xc5, 0xf8, 0x78, 0x52, 0x9b, 0x69, 0xbc, 0xed, 0x42, 0x99, 0x6a, 0x0d, 0xad, 0x50, 0x8b, 0x4d, 0x88, 0x7d, 0x33, 0xa3, 0x23, 0xfa, 0x09, 0x3a, 0x10, 0x90, 0xe3, 0x17, 0x29, 0x7a, 0xf7, 0x38, 0x60, 0xad, 0x89, 0x56, 0x3c, 0xa9, 0xd0, 0x2b }; static const uint8_t nist_186_2_ecdsa_testvector_64_public_y[] = { /* Qy - byte alignment */ 0x00, 0xbd, 0x54, 0xce, 0x4b, 0x34, 0xbf, 0xd9, 0x1c, 0x23, 0xf2, 0xfe, 0xfa, 0x19, 0xbb, 0xaf, 0x2b, 0x36, 0x5d, 0x46, 0x43, 0x03, 0x2f, 0x2d, 0xb0, 0x33, 0x13, 0xae, 0xfd, 0x23, 0x2d, 0xad, 0xef, 0xc3, 0x9a, 0xa9, 0x67, 0x0f, 0xcc, 0x75, 0xe6, 0xf6, 0x06, 0x1f, 0xab, 0xa6, 0x2f, 0xc3, 0x8c, 0x67, 0x4a, 0x4a, 0xc8, 0xe8, 0x53, 0x08, 0xd9, 0x6d, 0x2b, 0x97, 0x6e, 0xe1, 0x72, 0x58, 0x78, 0xa9 }; /* k = 1a4b9f5a4c1b3662863c98ee560364fb046033b6b667ee42334113c661641e826fdcfabfea43ed8142e0a2b63e3d52fb0e5c1d8f5ea89cb756876cda91e58deb803 */ static const uint8_t nist_186_2_ecdsa_testvector_64_out[] = { /* R - byte alignment */ 0x01, 0xf9, 0x6c, 0xb2, 0x22, 0x15, 0x97, 0xb9, 0x74, 0x36, 0x96, 0xad, 0x42, 0xde, 0x0e, 0xcf, 0x76, 0x45, 0xc6, 0x3e, 0x49, 0x02, 0x58, 0xc2, 0xbe, 0xf6, 0xd1, 0x2b, 0xde, 0x51, 0xb7, 0xd1, 0x7e, 0xfb, 0x98, 0xa9, 0x70, 0x09, 0x03, 0x30, 0x17, 0x0e, 0x80, 0x7f, 0x81, 0x49, 0xf2, 0xb2, 0x78, 0xff, 0x56, 0x72, 0x36, 0x73, 0xa3, 0x5c, 0x2b, 0xeb, 0xba, 0x13, 0x0e, 0x19, 0x95, 0x16, 0xa2, 0xf3, /* S - byte alignment */ 0x00, 0x54, 0xa2, 0xce, 0x36, 0x1b, 0x35, 0x14, 0x27, 0x0d, 0x41, 0x1b, 0x46, 0xf1, 0xab, 0xa6, 0xbf, 0xd4, 0xc0, 0x82, 0xc1, 0x97, 0xd9, 0xd1, 0xa9, 0x2c, 0xb0, 0x4a, 0x77, 0x05, 0x0a, 0x2f, 0xa6, 0xe0, 0x99, 0x13, 0x37, 0xce, 0x28, 0x5d, 0xe1, 0xa1, 0x46, 0x65, 0x00, 0x91, 0x96, 0x9d, 0x17, 0xbb, 0xe5, 0x89, 0x38, 0x7a, 0x5d, 0x6e, 0x9a, 0x4d, 0x43, 0x2f, 0x1c, 0xd0, 0xd8, 0x6a, 0x2a, 0x28 }; static const uint8_t nist_186_2_ecdsa_testvector_65_ptx[] = { /* Msg */ 0x93, 0x47, 0x74, 0x46, 0x34, 0xed, 0x26, 0x81, 0xcd, 0x80, 0x91, 0x0d, 0xfd, 0xb3, 0xf1, 0x4a, 0x73, 0x08, 0x08, 0xfd, 0xb1, 0x8b, 0x08, 0xa2, 0x10, 0xc0, 0xb3, 0x04, 0x05, 0xda, 0xc1, 0x0a, 0xa2, 0x2d, 0x82, 0xd4, 0x60, 0xe6, 0xc4, 0x06, 0x1b, 0xfa, 0xf7, 0x64, 0x5e, 0x5c, 0x8f, 0xa0, 0xe1, 0x73, 0xaa, 0x6f, 0x50, 0xcb, 0xf3, 0xe2, 0x4e, 0x0b, 0xc6, 0xf4, 0xba, 0x27, 0x95, 0x60, 0x31, 0xd6, 0x8a, 0xb5, 0xd4, 0x47, 0x6d, 0xab, 0x4b, 0x0f, 0xc9, 0xb8, 0x0a, 0x67, 0x4a, 0xdf, 0xd2, 0x94, 0x6a, 0xc9, 0x7b, 0xa6, 0x4c, 0x16, 0xf2, 0x65, 0xe8, 0xf5, 0x7e, 0x89, 0x69, 0xf2, 0x47, 0x29, 0xd3, 0x10, 0x18, 0x76, 0xe9, 0x18, 0x64, 0xa9, 0x4e, 0x30, 0x87, 0x3a, 0xea, 0xaf, 0x4f, 0x53, 0x8f, 0x30, 0xbb, 0x84, 0xdd, 0xe6, 0x02, 0xb8, 0x63, 0x2f, 0xd7, 0x68, 0x06, 0x6b }; static const uint8_t nist_186_2_ecdsa_testvector_65_private[] = { /* d - byte alignment */ 0x00, 0x6b, 0x7b, 0xc1, 0x6c, 0xc1, 0x5f, 0xce, 0x1c, 0xc4, 0x63, 0x7e, 0x7f, 0x1b, 0x9f, 0x98, 0x4c, 0xb7, 0x52, 0x05, 0x45, 0x8d, 0xb7, 0xd1, 0xb8, 0xb5, 0xab, 0x83, 0xf0, 0x92, 0xa7, 0x08, 0xa5, 0x5b, 0xdd, 0xb5, 0xb5, 0x02, 0x42, 0x18, 0x26, 0xdf, 0xe3, 0xa3, 0x97, 0x6e, 0x13, 0x44, 0x91, 0xf5, 0x78, 0x84, 0x23, 0x61, 0x7c, 0xcf, 0x41, 0x8c, 0x33, 0x0d, 0x5b, 0x53, 0xc4, 0x05, 0x48, 0x57 }; static const uint8_t nist_186_2_ecdsa_testvector_65_public_x[] = { /* Qx - byte alignment */ 0x01, 0x33, 0x01, 0x27, 0xe2, 0xd1, 0x9c, 0xa0, 0xa2, 0xcb, 0xec, 0xad, 0xe2, 0xe0, 0x86, 0xcc, 0x91, 0x53, 0xdd, 0xaa, 0xe2, 0x4a, 0xa6, 0xef, 0x11, 0x1a, 0xc0, 0xa9, 0x9d, 0x82, 0x70, 0x8e, 0x2b, 0x2b, 0x64, 0xd3, 0x8c, 0x9d, 0xcc, 0x83, 0x3b, 0xb0, 0x91, 0xd3, 0x9e, 0x2a, 0xff, 0x69, 0xca, 0xc6, 0x0b, 0x2a, 0x2b, 0x49, 0x05, 0x20, 0x44, 0xb2, 0xc7, 0xbf, 0x09, 0x34, 0xe9, 0xf2, 0x21, 0x17 }; static const uint8_t nist_186_2_ecdsa_testvector_65_public_y[] = { /* Qy - byte alignment */ 0x01, 0x7e, 0x82, 0xf5, 0xfa, 0x31, 0xed, 0xa6, 0x9c, 0x1b, 0x78, 0xbf, 0x9a, 0xd8, 0x08, 0x20, 0xfd, 0x47, 0x0a, 0x77, 0xf7, 0x73, 0xb0, 0xd4, 0xde, 0x4e, 0x35, 0xc8, 0x50, 0x45, 0x40, 0x43, 0x4f, 0x2d, 0x50, 0x48, 0xc9, 0x2d, 0xf6, 0x39, 0xf0, 0xf3, 0x50, 0x4c, 0x0b, 0x24, 0xa1, 0xa9, 0xbe, 0x08, 0xf6, 0x6a, 0xa1, 0xe9, 0x21, 0x8a, 0x95, 0xc9, 0x29, 0x91, 0x51, 0x58, 0xc4, 0x56, 0x3b, 0xc9 }; /* k = 0fc6c339a31bed7d3c4a86424c3c1b2aa5dabc5b570c00d69b01429950636ce7a7b1a22d02a185a6fcc3b87c06a27399b4bfd94fb31d8acd731eb2716d66eefc563 */ static const uint8_t nist_186_2_ecdsa_testvector_65_out[] = { /* R - byte alignment */ 0x01, 0x50, 0x5b, 0x84, 0x34, 0x60, 0x26, 0x6a, 0xff, 0xb1, 0x30, 0x39, 0x72, 0x79, 0x47, 0x7c, 0xd1, 0x92, 0x03, 0x93, 0xa4, 0xd7, 0x80, 0x08, 0xb1, 0xf1, 0x1b, 0xff, 0x53, 0xb4, 0x6b, 0x0d, 0xf0, 0x5c, 0x78, 0x3d, 0xae, 0x9a, 0x49, 0x4a, 0xa1, 0x2e, 0x48, 0xb6, 0xfd, 0x86, 0x71, 0xc2, 0xd5, 0x8d, 0x86, 0x12, 0xce, 0x01, 0x9d, 0x94, 0xf0, 0x8e, 0xd8, 0xed, 0x40, 0x31, 0x7d, 0x14, 0xda, 0xc7, /* S - byte alignment */ 0x00, 0x35, 0x99, 0x8e, 0xbb, 0x40, 0x50, 0x2b, 0xae, 0xb5, 0xec, 0x86, 0xbc, 0xde, 0x04, 0x63, 0xd7, 0xcc, 0x95, 0x97, 0xd0, 0xae, 0x17, 0xe6, 0x48, 0x91, 0x68, 0x00, 0x49, 0xef, 0xe3, 0x9b, 0xa4, 0x6d, 0x87, 0x42, 0x5a, 0xcf, 0x47, 0xf1, 0x62, 0x23, 0x65, 0x97, 0x5e, 0xa7, 0x96, 0x88, 0x05, 0xe7, 0xd0, 0x8a, 0xeb, 0x3c, 0x30, 0x77, 0x92, 0xcd, 0xd1, 0x30, 0xce, 0x3b, 0xf4, 0x2e, 0x13, 0x48 }; static const uint8_t nist_186_2_ecdsa_testvector_66_ptx[] = { /* Msg */ 0xc3, 0xeb, 0xab, 0xf4, 0xef, 0x29, 0xe3, 0xb0, 0xce, 0x98, 0xbd, 0xf2, 0xd2, 0x69, 0xef, 0xab, 0xfc, 0x2f, 0x13, 0x1b, 0x59, 0x4f, 0x4d, 0xe6, 0xcd, 0xb1, 0x2d, 0x6b, 0x0f, 0xbc, 0xd7, 0x51, 0xf5, 0x82, 0x61, 0x62, 0xf2, 0x37, 0x7c, 0x9d, 0xdd, 0xe8, 0x57, 0x86, 0xf3, 0x69, 0xc0, 0xc1, 0x20, 0x90, 0x8d, 0xdf, 0x7a, 0xa0, 0x3a, 0x78, 0x0e, 0x08, 0xd3, 0x7a, 0xe0, 0x4e, 0x14, 0xc0, 0x2d, 0x46, 0xd0, 0xe7, 0xf3, 0x87, 0x8f, 0x5d, 0xb4, 0x1f, 0x7b, 0xba, 0x76, 0x86, 0x7d, 0x54, 0x0e, 0xd1, 0xa3, 0x0d, 0x9e, 0x28, 0xc5, 0x70, 0x5d, 0x7a, 0x68, 0xfd, 0x96, 0x6f, 0xe2, 0xc0, 0xf4, 0x9f, 0xbf, 0x29, 0xfc, 0x01, 0x64, 0x17, 0xdb, 0xa6, 0xf2, 0x36, 0x62, 0xa7, 0x6d, 0x8b, 0x4f, 0x5c, 0x1e, 0x4d, 0xce, 0xce, 0x35, 0xf7, 0x3f, 0x6f, 0xb3, 0x9b, 0x3a, 0x09, 0x87, 0x79 }; static const uint8_t nist_186_2_ecdsa_testvector_66_private[] = { /* d - byte alignment */ 0x01, 0x8e, 0x5c, 0xe7, 0x41, 0x9e, 0x51, 0x18, 0xe7, 0x15, 0xd7, 0x37, 0xb1, 0xee, 0x69, 0x7b, 0x46, 0xb8, 0x97, 0x04, 0xd9, 0xc2, 0x45, 0xb2, 0x51, 0xa2, 0x56, 0xd4, 0xda, 0x2a, 0xdb, 0xe4, 0x70, 0xba, 0x31, 0xe1, 0x0e, 0x5a, 0xca, 0x41, 0x06, 0xa2, 0xb9, 0x90, 0x27, 0x2f, 0xc5, 0x26, 0xd0, 0xdf, 0xf0, 0x05, 0x45, 0xa3, 0x78, 0xb8, 0x45, 0x86, 0x55, 0x3e, 0xe2, 0xa6, 0x39, 0xb6, 0xd0, 0xd5 }; static const uint8_t nist_186_2_ecdsa_testvector_66_public_x[] = { /* Qx - byte alignment */ 0x01, 0x2b, 0x13, 0xbc, 0xae, 0xc1, 0x0e, 0x9b, 0x4b, 0xd4, 0x37, 0x6e, 0xbc, 0x54, 0x13, 0xbe, 0xb7, 0x42, 0x65, 0xa8, 0x39, 0xc8, 0xcd, 0x84, 0x0e, 0x42, 0x39, 0x3f, 0xf2, 0x8c, 0xca, 0x74, 0xca, 0xb3, 0xdc, 0x24, 0x35, 0xfd, 0x20, 0x9a, 0xb9, 0xd6, 0x14, 0xa5, 0xaf, 0x71, 0x56, 0x37, 0x2f, 0x86, 0xfc, 0x78, 0x44, 0x65, 0xd3, 0x8c, 0x12, 0xa4, 0x04, 0x22, 0x55, 0x91, 0xf3, 0xf2, 0x19, 0x96 }; static const uint8_t nist_186_2_ecdsa_testvector_66_public_y[] = { /* Qy - byte alignment */ 0x01, 0x41, 0xfc, 0x89, 0x51, 0x69, 0xd2, 0x5f, 0x33, 0x73, 0x16, 0x1d, 0x77, 0x8b, 0x29, 0xca, 0x13, 0x80, 0x0e, 0x41, 0x1c, 0x21, 0x55, 0x2e, 0xb7, 0x80, 0xfe, 0x32, 0xc8, 0x67, 0x6b, 0x5b, 0xcb, 0xbc, 0x88, 0x2d, 0x25, 0xc0, 0xaa, 0x59, 0x8b, 0xe4, 0x70, 0x22, 0x42, 0x2d, 0x71, 0xb1, 0x8f, 0x0c, 0x24, 0xe2, 0xa1, 0x98, 0x61, 0x5e, 0x7e, 0xda, 0xcb, 0x12, 0xd1, 0x68, 0xf4, 0x39, 0x1a, 0x5d }; /* k = 00cb71ea593cb7804c2848be95d3ad3dbf04f9da524b1f0f98c92137b861baa8de20ef6ce6089ab2a6f79c6e76c92f6ededac1d2bb9dbd929cb9d4952f1ff3b4ec7 */ static const uint8_t nist_186_2_ecdsa_testvector_66_out[] = { /* R - byte alignment */ 0x00, 0x7b, 0x89, 0x81, 0x5a, 0xfd, 0x85, 0x08, 0x60, 0xf8, 0xd1, 0x96, 0x35, 0x4d, 0x73, 0xe5, 0x0c, 0x76, 0x1c, 0xb5, 0xb8, 0x32, 0x31, 0xa2, 0x94, 0x65, 0x5e, 0x20, 0xc8, 0x1a, 0xe3, 0x82, 0x13, 0xc3, 0x33, 0x7b, 0x45, 0x0e, 0x05, 0x3d, 0x7b, 0xf0, 0x2a, 0xca, 0x6f, 0x31, 0x35, 0xe6, 0x95, 0x70, 0x4c, 0xc3, 0x37, 0x18, 0x84, 0x71, 0x29, 0xba, 0xb6, 0xb5, 0x41, 0xad, 0x11, 0x3c, 0xf7, 0xeb, /* S - byte alignment */ 0x01, 0x31, 0xf6, 0x79, 0x2c, 0x60, 0x83, 0x00, 0xd4, 0x20, 0x66, 0xc8, 0x6c, 0xa8, 0x91, 0x5a, 0xf8, 0x0e, 0x16, 0x75, 0xcd, 0xa7, 0xe0, 0xf3, 0x06, 0x49, 0xe4, 0xbd, 0x08, 0x33, 0xef, 0x6f, 0x58, 0xb3, 0xc0, 0xa5, 0xb3, 0x19, 0x53, 0x65, 0xf5, 0x83, 0x59, 0x33, 0xf5, 0xa4, 0x54, 0x92, 0xca, 0x3a, 0x8f, 0x70, 0x32, 0x89, 0x7e, 0x2d, 0x0f, 0xfc, 0xc8, 0x44, 0x1d, 0x5c, 0x44, 0x3d, 0xea, 0xd1 }; static const uint8_t nist_186_2_ecdsa_testvector_67_ptx[] = { /* Msg */ 0xce, 0xb5, 0x5a, 0x4a, 0x0e, 0x78, 0xc5, 0x32, 0x22, 0x1c, 0x82, 0x43, 0x58, 0x7e, 0x88, 0xe9, 0x7b, 0x14, 0x08, 0xe3, 0x60, 0x2e, 0xa0, 0xa4, 0xbc, 0x7c, 0xd3, 0xf9, 0x38, 0xd1, 0xb6, 0xed, 0xc8, 0x26, 0xeb, 0xea, 0x38, 0xe2, 0xd3, 0x20, 0x08, 0x59, 0x00, 0x2a, 0x79, 0x92, 0xe9, 0xef, 0xe8, 0x4d, 0xe2, 0xc7, 0x5b, 0x44, 0x4b, 0xe0, 0x5a, 0xb2, 0x07, 0xdf, 0x00, 0x12, 0x30, 0xca, 0x51, 0x29, 0x08, 0x25, 0xce, 0x46, 0x33, 0x5b, 0x47, 0xc9, 0x24, 0x60, 0xf1, 0xe2, 0xd6, 0x95, 0xb8, 0x9b, 0xbc, 0xec, 0xd6, 0x19, 0xfa, 0x4c, 0xa5, 0x1e, 0xd5, 0x37, 0xb1, 0xd3, 0x68, 0xaa, 0x12, 0xc5, 0x99, 0x44, 0xf9, 0x2d, 0x4c, 0xab, 0x88, 0x74, 0xd7, 0x2c, 0xe7, 0xf6, 0xb5, 0xa1, 0x94, 0x07, 0x7e, 0x98, 0xfa, 0x33, 0x16, 0xb1, 0x46, 0xca, 0x25, 0x48, 0x76, 0x9d, 0xc8, 0x54 }; static const uint8_t nist_186_2_ecdsa_testvector_67_private[] = { /* d - byte alignment */ 0x00, 0x52, 0x06, 0x28, 0x11, 0x2a, 0x15, 0xad, 0x5f, 0xe4, 0xd9, 0x00, 0xce, 0x73, 0xb0, 0x6a, 0xea, 0x1d, 0x91, 0x45, 0xca, 0x9c, 0x6c, 0x0b, 0x77, 0xc0, 0x19, 0xc1, 0xc3, 0x23, 0x58, 0x05, 0xab, 0xd3, 0x27, 0x50, 0x7b, 0x10, 0x67, 0x82, 0xf7, 0xcb, 0x90, 0xdc, 0xa0, 0xb6, 0xdf, 0xe1, 0xa9, 0x9e, 0xc7, 0xeb, 0x77, 0xfe, 0x6b, 0x54, 0x8b, 0xa9, 0x8d, 0x5b, 0x91, 0x14, 0x11, 0x54, 0x0f, 0x02 }; static const uint8_t nist_186_2_ecdsa_testvector_67_public_x[] = { /* Qx - byte alignment */ 0x00, 0xc6, 0xca, 0x7d, 0x88, 0xf5, 0xcd, 0x5a, 0xd1, 0xd1, 0xfc, 0xdc, 0x4d, 0x5c, 0x10, 0x87, 0x7a, 0x9f, 0x5b, 0xd5, 0x18, 0xb4, 0x53, 0x23, 0x4b, 0x40, 0x2b, 0xcf, 0x9e, 0x16, 0x25, 0x67, 0xa7, 0xc6, 0xb0, 0x47, 0x7b, 0x72, 0xc2, 0x7e, 0xbb, 0x79, 0xa4, 0x25, 0x6e, 0xb3, 0xdf, 0x6b, 0x89, 0xe7, 0xc6, 0xc5, 0x00, 0x19, 0x4b, 0x91, 0x7e, 0xc0, 0xcf, 0xdb, 0x8d, 0xb5, 0x23, 0x24, 0x97, 0xfe }; static const uint8_t nist_186_2_ecdsa_testvector_67_public_y[] = { /* Qy - byte alignment */ 0x01, 0xe7, 0x06, 0xe7, 0xc6, 0xb9, 0xee, 0x85, 0xa9, 0xf7, 0xf8, 0xe5, 0x15, 0xa3, 0xa4, 0x04, 0xe0, 0x11, 0xf8, 0xcc, 0x1e, 0x92, 0x0c, 0x59, 0xb0, 0xf6, 0x57, 0xd7, 0x95, 0x21, 0x2f, 0x01, 0x97, 0x5b, 0x1e, 0xc8, 0x06, 0x5a, 0xb1, 0xc3, 0xcf, 0x6f, 0xd9, 0x2d, 0x12, 0xeb, 0x2f, 0x54, 0x6f, 0xa1, 0xb0, 0xb2, 0x95, 0xb1, 0xd9, 0x70, 0xf5, 0x52, 0xfc, 0x3f, 0x8d, 0xa0, 0xd2, 0x15, 0x18, 0xd3 }; /* k = 0787b4a2f40954128fd6463a4a67d79dc042c3ac99c2836e2342449c81eff65ad6175c077a5b748e6235101b6ab7cd15cd7af27fc73018c3b447409ff535f6396a1 */ static const uint8_t nist_186_2_ecdsa_testvector_67_out[] = { /* R - byte alignment */ 0x01, 0x45, 0x56, 0xd7, 0x5f, 0xf5, 0x41, 0xb9, 0x15, 0xc5, 0x85, 0xd8, 0x0f, 0xed, 0xc1, 0x78, 0x16, 0x72, 0xce, 0x63, 0xdf, 0x34, 0x77, 0x7a, 0x4a, 0x37, 0x39, 0xc1, 0xe6, 0x6d, 0x41, 0x2f, 0xd7, 0xa2, 0x8b, 0x5b, 0x02, 0x9f, 0x68, 0x67, 0xd9, 0x4f, 0xf0, 0xd1, 0x3e, 0xa5, 0xa1, 0x71, 0x27, 0xd9, 0x38, 0x95, 0xd8, 0x73, 0x81, 0x46, 0x61, 0x10, 0x50, 0x9f, 0x36, 0x9d, 0x15, 0xf5, 0x99, 0xea, /* S - byte alignment */ 0x00, 0xd9, 0xce, 0xd8, 0x28, 0xd8, 0xda, 0xb1, 0x25, 0x28, 0x98, 0x93, 0x27, 0x6b, 0xed, 0xa8, 0xda, 0xa4, 0x66, 0x0d, 0x2f, 0xf8, 0xa3, 0xf1, 0x57, 0xb1, 0xb6, 0x16, 0xd1, 0x8e, 0x4a, 0x79, 0x83, 0xc7, 0xb8, 0xf8, 0x79, 0xe4, 0x23, 0xbf, 0xac, 0x39, 0x90, 0x90, 0x5f, 0x84, 0xf1, 0xc9, 0x07, 0x9e, 0x23, 0x99, 0xdf, 0x5f, 0x4f, 0x1d, 0xa9, 0x47, 0xb2, 0x2a, 0xf8, 0xe0, 0xed, 0x0a, 0x68, 0xf1 }; static const uint8_t nist_186_2_ecdsa_testvector_68_ptx[] = { /* Msg */ 0x74, 0x53, 0x54, 0x64, 0x27, 0x79, 0x68, 0xda, 0xf4, 0xc7, 0x97, 0x3f, 0x30, 0x14, 0xee, 0xbd, 0x6d, 0x76, 0xbc, 0xb7, 0x93, 0x06, 0x46, 0xad, 0x33, 0xe3, 0xbc, 0x60, 0x17, 0x7a, 0x6c, 0x37, 0x1e, 0x04, 0x36, 0xe2, 0x47, 0x4f, 0x40, 0x3d, 0x0b, 0xc2, 0xeb, 0x77, 0xf0, 0x9c, 0x05, 0x73, 0x5b, 0x7c, 0x40, 0x6e, 0xa5, 0x26, 0xe2, 0xe3, 0x72, 0x84, 0xbf, 0xab, 0x3e, 0xeb, 0x64, 0x69, 0x39, 0xa0, 0x96, 0x25, 0x55, 0x9b, 0xfb, 0x37, 0x9d, 0x8a, 0x16, 0x67, 0xc8, 0x19, 0x79, 0x52, 0x0e, 0x71, 0x35, 0x10, 0x3a, 0xfe, 0x96, 0x13, 0x01, 0x76, 0x0d, 0x52, 0x92, 0x17, 0x6e, 0xa7, 0x6e, 0x30, 0x5b, 0x76, 0x7a, 0xe2, 0x00, 0x90, 0x52, 0x28, 0x02, 0x57, 0xe1, 0x15, 0xb1, 0x22, 0x2f, 0x5d, 0x85, 0xe3, 0x79, 0x17, 0xc8, 0x07, 0x87, 0xc1, 0x90, 0x9d, 0x3a, 0x85, 0xf0, 0xbb }; static const uint8_t nist_186_2_ecdsa_testvector_68_private[] = { /* d - byte alignment */ 0x00, 0xef, 0xe1, 0xf5, 0x92, 0x83, 0xcf, 0xef, 0x65, 0xc8, 0x4b, 0x0d, 0xe9, 0x46, 0x93, 0xd2, 0x99, 0xd9, 0x81, 0x34, 0x08, 0x8f, 0xf1, 0xc1, 0x9b, 0x3d, 0xfd, 0xac, 0x78, 0x95, 0x01, 0x32, 0x75, 0xfb, 0x4e, 0xa4, 0xc3, 0x45, 0xe7, 0x8e, 0xf5, 0x39, 0x4d, 0x8e, 0x2f, 0xb1, 0x0f, 0xa6, 0xf7, 0xe7, 0xd1, 0x86, 0xa7, 0xaa, 0xfe, 0x38, 0x20, 0x6d, 0xd7, 0xf3, 0xe3, 0x36, 0x05, 0x17, 0x36, 0x0f }; static const uint8_t nist_186_2_ecdsa_testvector_68_public_x[] = { /* Qx - byte alignment */ 0x00, 0xc0, 0x39, 0xc9, 0x86, 0xf5, 0xd7, 0x1b, 0xae, 0x5a, 0x15, 0x79, 0x86, 0xfd, 0x80, 0xed, 0xd5, 0x0c, 0xa1, 0x5a, 0x0a, 0xc0, 0x00, 0xd4, 0x15, 0x30, 0xb8, 0xb0, 0xf3, 0xd9, 0xd8, 0x81, 0x9f, 0x64, 0xee, 0xde, 0xa9, 0x1c, 0xd8, 0xf0, 0x0d, 0xb1, 0x93, 0x1e, 0x53, 0xe0, 0x6c, 0xb5, 0x34, 0x4b, 0x82, 0xc6, 0x92, 0xf8, 0x73, 0x11, 0xcf, 0xb1, 0xc4, 0x7d, 0xc7, 0x31, 0x8c, 0x06, 0x13, 0x8f }; static const uint8_t nist_186_2_ecdsa_testvector_68_public_y[] = { /* Qy - byte alignment */ 0x01, 0x3b, 0x17, 0xf8, 0x33, 0xfe, 0x30, 0xce, 0xce, 0x8c, 0xa5, 0x45, 0x48, 0xb5, 0x31, 0xf9, 0x4f, 0xba, 0x92, 0x09, 0x15, 0x69, 0xa3, 0x2f, 0x68, 0x11, 0xe2, 0x31, 0x5d, 0x8b, 0x0f, 0xc6, 0x4a, 0x62, 0xf4, 0x32, 0xac, 0x0f, 0xd5, 0x42, 0x77, 0xf8, 0x19, 0x63, 0xf2, 0xb2, 0x9c, 0x13, 0x11, 0x07, 0x75, 0xda, 0x93, 0xea, 0xa0, 0x3a, 0x31, 0xcd, 0xd3, 0x1d, 0xd0, 0x39, 0x20, 0x47, 0xd4, 0x3a }; /* k = 17eaddf16a30e150adace9e1f3284f5ef34c0deb8f819c388e9a27fa091d2e3a1098cedf0a0cc7d3b245ca722b1acd347997961d9a2dc60fe96bda520aad4d2a8eb */ static const uint8_t nist_186_2_ecdsa_testvector_68_out[] = { /* R - byte alignment */ 0x01, 0xaf, 0xb0, 0x93, 0x6e, 0x04, 0x23, 0x5b, 0xcd, 0xf2, 0x77, 0x42, 0x06, 0x70, 0x35, 0xa4, 0xff, 0x67, 0x3a, 0x0d, 0xe8, 0xff, 0xbb, 0x12, 0x59, 0xcd, 0x61, 0xab, 0x07, 0xee, 0xf0, 0x85, 0xb9, 0x9d, 0x76, 0xe1, 0x1b, 0x3c, 0xca, 0x16, 0x97, 0xbf, 0x93, 0xd7, 0x3b, 0x3a, 0x72, 0xe8, 0xa0, 0x0c, 0x61, 0xae, 0x66, 0xea, 0xe9, 0x6c, 0x95, 0x1a, 0xd0, 0xb7, 0xfe, 0x8e, 0xf6, 0x70, 0xb2, 0xe0, /* S - byte alignment */ 0x01, 0x01, 0xce, 0x08, 0xad, 0x3c, 0xec, 0xec, 0x9e, 0x5c, 0x42, 0x6b, 0xf0, 0x0b, 0xc9, 0x9e, 0x2e, 0x47, 0x14, 0x91, 0xb3, 0x41, 0xe9, 0xac, 0x6d, 0xe2, 0x0c, 0xa8, 0xf0, 0xd3, 0x32, 0xc0, 0x9c, 0x36, 0xb5, 0x6a, 0xb0, 0x59, 0x18, 0xf5, 0xdd, 0x0d, 0x16, 0x8a, 0xca, 0xb6, 0xc3, 0x19, 0xcf, 0x14, 0x61, 0xfb, 0x61, 0xf8, 0xcc, 0x33, 0xfb, 0x96, 0x1e, 0x0a, 0xa6, 0x68, 0x84, 0xce, 0xce, 0x30 }; static const uint8_t nist_186_2_ecdsa_testvector_69_ptx[] = { /* Msg */ 0x07, 0xe3, 0xc8, 0x9d, 0xc3, 0xd1, 0xd8, 0x20, 0x5b, 0xe4, 0x4b, 0xfd, 0x63, 0x32, 0x77, 0x82, 0xff, 0x1b, 0xc2, 0xc8, 0xf7, 0x17, 0x5c, 0x92, 0x0e, 0xb2, 0x2e, 0x77, 0x90, 0xd4, 0x0d, 0x44, 0x2b, 0x46, 0x34, 0x9c, 0xff, 0x72, 0xf1, 0xe1, 0xf8, 0x6a, 0x9e, 0x58, 0x5c, 0x2c, 0xd3, 0x87, 0xa0, 0x25, 0xda, 0xe2, 0x80, 0xf3, 0x63, 0xa7, 0x4f, 0x6f, 0x79, 0x07, 0x8b, 0xeb, 0xb5, 0x86, 0xb4, 0xb8, 0xb2, 0xa4, 0x5e, 0xec, 0xc0, 0xbd, 0x86, 0x61, 0xdd, 0x2e, 0x22, 0x01, 0xe1, 0xb9, 0xfb, 0x41, 0xf8, 0x2b, 0xbf, 0xec, 0x55, 0x3b, 0x52, 0x22, 0x25, 0xb6, 0x66, 0xa0, 0xc2, 0xd9, 0x4b, 0x42, 0x2a, 0xfe, 0x08, 0xc5, 0xaf, 0x7c, 0xaa, 0xd2, 0xf0, 0xc8, 0xdc, 0x38, 0x07, 0xe0, 0xb8, 0x7a, 0x04, 0xe9, 0xdd, 0x89, 0x9b, 0x16, 0xc2, 0xd2, 0x19, 0xcd, 0x4a, 0x7b, 0x9c, 0x05 }; static const uint8_t nist_186_2_ecdsa_testvector_69_private[] = { /* d - byte alignment */ 0x01, 0xdf, 0xf5, 0x6f, 0x8c, 0x4d, 0xa7, 0x8f, 0x84, 0x5c, 0x1d, 0xd7, 0x60, 0xc7, 0x87, 0x3f, 0x2d, 0x6f, 0x86, 0x61, 0x3a, 0x59, 0x01, 0x66, 0x6f, 0x57, 0x99, 0x8a, 0x59, 0xd0, 0xfa, 0x64, 0x5c, 0xc9, 0xa1, 0xab, 0x38, 0x8f, 0x6f, 0x99, 0xfa, 0xef, 0x83, 0xdb, 0x24, 0xc0, 0x19, 0xac, 0x83, 0xaa, 0xc6, 0xee, 0x44, 0x60, 0xe4, 0xfb, 0x83, 0x71, 0x8d, 0xf0, 0x92, 0x26, 0x03, 0x3d, 0x7a, 0xd6 }; static const uint8_t nist_186_2_ecdsa_testvector_69_public_x[] = { /* Qx - byte alignment */ 0x01, 0x1b, 0xda, 0x77, 0x68, 0x21, 0x8b, 0x82, 0xec, 0xb8, 0xb1, 0xbf, 0x1f, 0x08, 0x2a, 0xc5, 0x7d, 0x14, 0x6a, 0x36, 0x71, 0x54, 0x0d, 0x20, 0x0e, 0xe4, 0xa2, 0x9b, 0x5b, 0x01, 0xfd, 0x6f, 0xb7, 0xf4, 0x64, 0x48, 0xaa, 0x46, 0xf6, 0x40, 0xa6, 0xcc, 0x36, 0x31, 0x9e, 0x62, 0x37, 0xa0, 0xfe, 0x26, 0xbf, 0x8a, 0x0c, 0x5b, 0xd6, 0xd1, 0x4d, 0xa1, 0x0c, 0xee, 0x4b, 0x4d, 0x24, 0x66, 0x12, 0xf8 }; static const uint8_t nist_186_2_ecdsa_testvector_69_public_y[] = { /* Qy - byte alignment */ 0x00, 0x2b, 0xbd, 0x5c, 0x3d, 0x13, 0x92, 0xe4, 0x61, 0x6d, 0x8d, 0xf0, 0x85, 0x6e, 0x18, 0xfe, 0xb9, 0x5c, 0xe5, 0xbd, 0x37, 0x3b, 0x3a, 0x04, 0x1f, 0x48, 0x52, 0x00, 0x62, 0x8c, 0x20, 0xe4, 0x2a, 0xbc, 0xa5, 0x9f, 0xd0, 0xdd, 0x93, 0x6c, 0x64, 0x3d, 0xc2, 0xdc, 0xd8, 0xb5, 0xd9, 0x33, 0x14, 0x75, 0x6e, 0xec, 0x63, 0xdd, 0x01, 0x37, 0xbf, 0x61, 0xbf, 0x2f, 0xca, 0xd1, 0xa0, 0x6b, 0x45, 0x80 }; /* k = 04a8d24aa509b9aa0515920528b86ec50bee63a3e852d162f0723e83f744c6de3adf95c7aebeff779938259db3089d4df3a14315b811e07a2f451c7183588b8cfb5 */ static const uint8_t nist_186_2_ecdsa_testvector_69_out[] = { /* R - byte alignment */ 0x01, 0xce, 0x49, 0xa1, 0x10, 0xb5, 0x7e, 0xf3, 0x61, 0x04, 0x95, 0x31, 0x84, 0xba, 0x30, 0x3d, 0xc4, 0xf6, 0xf1, 0xbe, 0xa3, 0x86, 0x73, 0x57, 0xb5, 0x7b, 0x07, 0x3d, 0x2c, 0xfc, 0x6c, 0xeb, 0xb6, 0xb3, 0xf5, 0xd0, 0x7b, 0x3b, 0xcc, 0x21, 0xc4, 0x39, 0x81, 0x08, 0xb4, 0xf0, 0xe2, 0xf4, 0xab, 0x77, 0xaf, 0xe6, 0x01, 0xbd, 0xdf, 0x33, 0x11, 0x55, 0x8f, 0x99, 0x12, 0x33, 0x29, 0xf2, 0x73, 0xa9, /* S - byte alignment */ 0x00, 0xdb, 0xe7, 0xba, 0xb4, 0x9e, 0xe2, 0x6f, 0x51, 0xc2, 0xe8, 0x60, 0x90, 0x7e, 0xc2, 0x19, 0x47, 0x65, 0x00, 0x5b, 0xad, 0x98, 0xb0, 0x9b, 0x68, 0x9f, 0xc5, 0x8e, 0x22, 0x7f, 0xf6, 0x1e, 0x8e, 0xb2, 0x9b, 0x79, 0xa5, 0xc5, 0x4f, 0x54, 0x47, 0xe9, 0x33, 0xa7, 0x18, 0x02, 0x56, 0x45, 0xd9, 0x15, 0x61, 0x06, 0xdc, 0x7b, 0x3d, 0x43, 0x33, 0xf3, 0xa6, 0xe0, 0x67, 0x0e, 0x73, 0xc7, 0x7a, 0x15 }; static const uint8_t nist_186_2_ecdsa_testvector_70_ptx[] = { /* Msg */ 0xd4, 0xa6, 0x50, 0x9f, 0xbe, 0x6f, 0x9b, 0x0d, 0xcd, 0x7a, 0x1b, 0xed, 0x45, 0x02, 0xea, 0x86, 0xa4, 0xa6, 0x00, 0x82, 0x3d, 0x77, 0xf6, 0x9f, 0x23, 0x50, 0x10, 0xa7, 0x48, 0x66, 0x7b, 0xa2, 0xe6, 0x1f, 0xd3, 0x4a, 0x1e, 0x28, 0xe9, 0xbf, 0xe0, 0xc2, 0xc2, 0x7c, 0x0a, 0x5c, 0xe3, 0x8a, 0xd4, 0x67, 0xcb, 0xf3, 0x6b, 0x66, 0xc2, 0x7a, 0xdc, 0x44, 0xd1, 0x89, 0x34, 0xeb, 0x12, 0x6b, 0xe5, 0x12, 0x2a, 0xbb, 0x6c, 0x56, 0x13, 0x1d, 0x31, 0x8d, 0x1f, 0x2c, 0xaf, 0x57, 0x39, 0xb3, 0xd4, 0xf5, 0x6e, 0x1f, 0xab, 0x5f, 0xad, 0x34, 0x38, 0x90, 0xcb, 0x00, 0xa4, 0x25, 0xca, 0x0d, 0x9a, 0x26, 0x5b, 0xdb, 0xf0, 0x24, 0xa1, 0x8d, 0x8a, 0x84, 0x38, 0xe3, 0x7b, 0x1a, 0x76, 0x68, 0x6e, 0xfa, 0xf1, 0xed, 0x45, 0x8a, 0x41, 0x35, 0xff, 0xdc, 0x07, 0xf2, 0xdf, 0x3b, 0x2e, 0xf0 }; static const uint8_t nist_186_2_ecdsa_testvector_70_private[] = { /* d - byte alignment */ 0x01, 0x5f, 0x5a, 0x6d, 0x61, 0xc0, 0x66, 0xe7, 0x4c, 0xfd, 0x41, 0xf7, 0xa9, 0x45, 0xc7, 0x1e, 0xc0, 0x8d, 0x5c, 0x99, 0xdc, 0xe3, 0x58, 0x54, 0x6e, 0x5a, 0x17, 0xfa, 0xca, 0xe5, 0xd6, 0x57, 0xff, 0x27, 0xd0, 0x20, 0x45, 0x66, 0xb2, 0x9d, 0x78, 0x27, 0x5d, 0x67, 0x38, 0x43, 0x38, 0xb7, 0x7d, 0xb6, 0x1d, 0x60, 0x2a, 0x99, 0x72, 0x09, 0x61, 0xc3, 0xe7, 0xb0, 0x86, 0x81, 0xff, 0x31, 0xba, 0xe6 }; static const uint8_t nist_186_2_ecdsa_testvector_70_public_x[] = { /* Qx - byte alignment */ 0x00, 0xf4, 0x20, 0x22, 0x85, 0x12, 0xec, 0x74, 0xa1, 0x45, 0xd4, 0x72, 0xc4, 0x13, 0x94, 0x8c, 0x4a, 0x6d, 0xbf, 0xfb, 0x42, 0x01, 0x4d, 0x35, 0x9a, 0x31, 0x5e, 0x8c, 0x85, 0xa1, 0x82, 0xd0, 0x11, 0xd8, 0x08, 0x03, 0xd9, 0x07, 0xe0, 0x71, 0x47, 0xa7, 0x8a, 0x2e, 0x86, 0x2d, 0xc8, 0x19, 0x27, 0xc9, 0x95, 0x36, 0x52, 0xfe, 0xf7, 0x52, 0x3a, 0xb0, 0xfb, 0x9e, 0x18, 0xc4, 0x66, 0xb2, 0x3c, 0x96 }; static const uint8_t nist_186_2_ecdsa_testvector_70_public_y[] = { /* Qy - byte alignment */ 0x00, 0x26, 0x9f, 0x90, 0x9e, 0xc3, 0x35, 0x51, 0xb4, 0xea, 0x92, 0x58, 0x9e, 0x72, 0x94, 0xb2, 0x72, 0xe3, 0xdb, 0x1c, 0x32, 0x72, 0xef, 0xa9, 0x79, 0x3b, 0xa9, 0x53, 0x1d, 0xf9, 0xd3, 0x02, 0xbc, 0x3a, 0x43, 0x78, 0xb0, 0x2e, 0x3d, 0x1b, 0x41, 0x20, 0x71, 0x68, 0x62, 0x0a, 0x0a, 0x84, 0x32, 0x7c, 0x9f, 0x24, 0x7b, 0xeb, 0x6f, 0xec, 0xab, 0xca, 0x38, 0x41, 0x08, 0xd1, 0xd1, 0xaf, 0xce, 0xa7 }; /* k = 1cdf0e8fa606b24c12bfd2f1e6f954f5963e6ce308040d8f664d61777ed640e56e8e2dfc2480cf7bbad6cbe160b6b41abbec0070baabbd5d4ca2ec7d1af59711b54 */ static const uint8_t nist_186_2_ecdsa_testvector_70_out[] = { /* R - byte alignment */ 0x01, 0x30, 0xed, 0xf4, 0x96, 0x4a, 0x6b, 0xd5, 0x33, 0x6a, 0xb5, 0x2c, 0xe4, 0x0f, 0x32, 0x2c, 0x13, 0x1a, 0x3c, 0x45, 0x63, 0xc9, 0x9e, 0x5e, 0x72, 0xc4, 0xaf, 0xf8, 0xd8, 0x66, 0xf7, 0x95, 0x51, 0x8a, 0xa1, 0xed, 0xbc, 0x6c, 0xb7, 0x8d, 0xd8, 0x61, 0xdf, 0xa3, 0x73, 0x0a, 0xc0, 0xc7, 0xe6, 0xf1, 0x94, 0x68, 0xd7, 0xa6, 0xc6, 0x43, 0xf8, 0xa2, 0xdd, 0x62, 0x00, 0x9a, 0xec, 0x3c, 0xb4, 0xd3, /* S - byte alignment */ 0x01, 0x15, 0x99, 0xbf, 0xf4, 0x26, 0xcf, 0x80, 0xee, 0xd7, 0x9f, 0x36, 0xa9, 0x9d, 0x0d, 0x68, 0xf0, 0x8e, 0xc7, 0x91, 0xa2, 0xba, 0xb8, 0x5d, 0x95, 0xd8, 0xbf, 0xc4, 0x8e, 0x16, 0x1a, 0xc8, 0x06, 0xf0, 0x0c, 0xb2, 0x91, 0x47, 0x0d, 0x4a, 0xdf, 0xd1, 0xbf, 0x9a, 0xd4, 0x04, 0xf3, 0x83, 0x74, 0xae, 0x34, 0xce, 0x06, 0x4f, 0xb4, 0x4b, 0xed, 0x4d, 0xeb, 0x48, 0x15, 0xf8, 0x16, 0x61, 0xc3, 0x1a }; static const uint8_t nist_186_2_ecdsa_testvector_71_ptx[] = { /* Msg */ 0x65, 0xbe, 0x26, 0x41, 0xeb, 0x2d, 0x11, 0x16, 0xe5, 0x10, 0x3a, 0x69, 0xca, 0x0d, 0x7f, 0x2a, 0x11, 0xd1, 0xa7, 0x9a, 0x52, 0xa6, 0xa2, 0x72, 0xa8, 0x48, 0x12, 0x61, 0x59, 0xf4, 0x0b, 0xbc, 0xb9, 0xc3, 0x17, 0x72, 0x4b, 0x36, 0x7e, 0x3e, 0x2a, 0x12, 0xc4, 0x20, 0xa7, 0x6e, 0x72, 0x0d, 0x34, 0x0a, 0x1a, 0xe6, 0x81, 0xe2, 0x95, 0xa7, 0xe4, 0x03, 0x8f, 0xe1, 0xfe, 0x9e, 0x46, 0x6a, 0x9c, 0x5b, 0x8e, 0x52, 0xdb, 0xef, 0x19, 0x1a, 0x90, 0xf1, 0xf5, 0x21, 0xe6, 0xe9, 0x56, 0x5f, 0x49, 0xab, 0x96, 0x55, 0x83, 0xe3, 0x7a, 0x44, 0x25, 0xf0, 0xb7, 0x9e, 0x29, 0xf6, 0xb4, 0xba, 0xd5, 0x2e, 0x92, 0xcb, 0xe3, 0x81, 0x6a, 0x13, 0xde, 0x56, 0xd5, 0x54, 0xcf, 0xa8, 0xb2, 0x88, 0x19, 0x5b, 0x23, 0xd1, 0xa2, 0xd0, 0xd9, 0xb3, 0x33, 0xb7, 0x92, 0x81, 0x22, 0x24, 0xdf, 0x15 }; static const uint8_t nist_186_2_ecdsa_testvector_71_private[] = { /* d - byte alignment */ 0x01, 0x8b, 0xfb, 0xd7, 0xbc, 0x20, 0xc4, 0xc4, 0xf0, 0x95, 0x66, 0xda, 0xbb, 0xa0, 0x18, 0x15, 0x53, 0x6a, 0xfc, 0xb9, 0x6b, 0x55, 0x83, 0x58, 0xda, 0xaf, 0xf6, 0x11, 0x24, 0x6b, 0x14, 0xd4, 0xc2, 0xe0, 0x17, 0x91, 0x1d, 0xc4, 0xb0, 0x5c, 0x60, 0xdb, 0xbe, 0x1c, 0x9b, 0x46, 0xb8, 0x18, 0xac, 0xfd, 0x1d, 0x18, 0x3e, 0x83, 0x65, 0x07, 0x72, 0x99, 0x88, 0x7f, 0x83, 0x2d, 0x8d, 0x83, 0x71, 0xb2 }; static const uint8_t nist_186_2_ecdsa_testvector_71_public_x[] = { /* Qx - byte alignment */ 0x01, 0xa5, 0xe5, 0xb9, 0x8e, 0xc1, 0x76, 0xf7, 0x51, 0x55, 0xac, 0x94, 0x18, 0xf7, 0x80, 0x97, 0x96, 0x6d, 0xf7, 0xc0, 0x97, 0x68, 0x02, 0x77, 0x0f, 0xbc, 0x47, 0xc9, 0xa1, 0x60, 0xb4, 0x57, 0x57, 0xdf, 0xc1, 0xea, 0x1e, 0xda, 0xc1, 0x64, 0xd8, 0xf3, 0x64, 0x06, 0xc7, 0x33, 0x1c, 0xe0, 0x99, 0x2a, 0x41, 0x28, 0x82, 0x6b, 0x9d, 0x2a, 0x4c, 0xa6, 0x26, 0x7c, 0x16, 0x92, 0x43, 0x1c, 0xac, 0x43 }; static const uint8_t nist_186_2_ecdsa_testvector_71_public_y[] = { /* Qy - byte alignment */ 0x00, 0x0d, 0x10, 0x0c, 0x8e, 0xe8, 0x93, 0x60, 0x9e, 0xdc, 0x97, 0x52, 0xb3, 0xdf, 0x71, 0x47, 0x7d, 0x70, 0xc4, 0x72, 0x77, 0xeb, 0xbb, 0xd5, 0x60, 0x08, 0x26, 0x29, 0x15, 0x14, 0x92, 0x8c, 0x33, 0xeb, 0x9b, 0x48, 0x94, 0x52, 0x33, 0x7d, 0x1e, 0x8e, 0xd1, 0xab, 0xc2, 0xb5, 0xf0, 0x6d, 0x5d, 0x40, 0xf9, 0x13, 0x20, 0xad, 0xcc, 0xa8, 0x92, 0x1f, 0xf5, 0x32, 0xc0, 0xca, 0xb6, 0x0e, 0x4e, 0xbe }; /* k = 11b49c065e990979ea28bcbf13a82f5464de7f8dcf7e06eedf550482926611b0f80eea2bf528b6a7c86dbbff281fa0105bd474f56af86560bfc394fc1b824997ef8 */ static const uint8_t nist_186_2_ecdsa_testvector_71_out[] = { /* R - byte alignment */ 0x01, 0x37, 0xab, 0x30, 0x74, 0x37, 0xbd, 0xd4, 0x7e, 0x5c, 0xc0, 0x4d, 0x51, 0x4c, 0xa1, 0x33, 0xa6, 0xb9, 0x8c, 0x96, 0xa2, 0x7c, 0x4b, 0xee, 0x65, 0x81, 0xb7, 0x59, 0x7b, 0x8c, 0xd8, 0xda, 0xc6, 0x9f, 0x06, 0xdb, 0x84, 0xd9, 0xab, 0x58, 0x35, 0xf4, 0x6e, 0x88, 0x71, 0xa0, 0xc1, 0x25, 0xa7, 0xf7, 0xb1, 0x59, 0x4c, 0x53, 0x2c, 0x37, 0x81, 0xde, 0xbb, 0xf5, 0x1e, 0xa2, 0xce, 0x27, 0x32, 0x23, /* S - byte alignment */ 0x00, 0xb6, 0x21, 0x3c, 0xec, 0xcd, 0x39, 0x1d, 0x96, 0xe4, 0xf5, 0x46, 0x86, 0x47, 0x79, 0x8f, 0x7f, 0x4d, 0xbd, 0x65, 0xe8, 0xf5, 0x40, 0xae, 0x74, 0x6f, 0x72, 0xec, 0xf5, 0x2b, 0x50, 0xd0, 0x62, 0x9c, 0xd5, 0x5f, 0x1d, 0x59, 0x01, 0x17, 0x5e, 0x0d, 0xdd, 0xf4, 0x66, 0xad, 0x1f, 0x6d, 0x64, 0xf2, 0xe1, 0x29, 0xd3, 0xbf, 0xd1, 0x09, 0x18, 0x00, 0xcf, 0xf2, 0x58, 0xa1, 0xb4, 0xfb, 0xc7, 0xbc }; static const uint8_t nist_186_2_ecdsa_testvector_72_ptx[] = { /* Msg */ 0x30, 0xbb, 0xd8, 0xf6, 0x29, 0x1a, 0x1f, 0x38, 0x61, 0xb9, 0xad, 0x88, 0xc0, 0xef, 0x50, 0x10, 0x18, 0x57, 0x07, 0x60, 0x08, 0x23, 0x09, 0x63, 0x21, 0xb3, 0x09, 0x92, 0x48, 0x67, 0xb9, 0x67, 0x5b, 0xb1, 0x8d, 0x15, 0x18, 0x6e, 0xc1, 0x76, 0x3a, 0x76, 0x9d, 0x45, 0xe4, 0x71, 0xf8, 0x8d, 0x43, 0xed, 0xfb, 0x61, 0x70, 0xae, 0x27, 0xce, 0x93, 0x45, 0x99, 0x0e, 0x4e, 0xe5, 0x8d, 0xfe, 0x59, 0x71, 0x22, 0xd3, 0x69, 0xd9, 0x5d, 0x08, 0x57, 0xa7, 0x6f, 0x9a, 0x7e, 0xd5, 0x3b, 0x78, 0x65, 0xe2, 0x13, 0x35, 0x9e, 0x25, 0xc2, 0x01, 0xed, 0x60, 0xd0, 0xd7, 0xad, 0x98, 0x01, 0xf8, 0x70, 0x24, 0x1f, 0x97, 0xe6, 0x05, 0xf9, 0xd6, 0x00, 0x75, 0xac, 0xf1, 0x54, 0xc2, 0x21, 0xb9, 0xc4, 0x5d, 0xd7, 0x45, 0x5a, 0x2e, 0xe3, 0xe4, 0x77, 0x2b, 0x35, 0x55, 0x2d, 0x29, 0x1c, 0x3b }; static const uint8_t nist_186_2_ecdsa_testvector_72_private[] = { /* d - byte alignment */ 0x01, 0x1e, 0xf5, 0x50, 0x1b, 0xe4, 0x84, 0x0f, 0x9a, 0xdc, 0x12, 0x63, 0xfd, 0x22, 0x58, 0x1d, 0x58, 0xf9, 0x83, 0x22, 0xaf, 0x32, 0xff, 0x3b, 0x32, 0x3f, 0xce, 0x67, 0x91, 0xe2, 0xc6, 0x18, 0x27, 0xd8, 0x71, 0x43, 0xec, 0x98, 0x0c, 0xda, 0x54, 0x94, 0xe1, 0xc8, 0xbe, 0xf8, 0x15, 0x00, 0x6b, 0x22, 0xca, 0x9c, 0xd9, 0x1c, 0x14, 0x77, 0xae, 0x8f, 0xfe, 0x86, 0x63, 0x2c, 0xd7, 0x0a, 0xc6, 0x8a }; static const uint8_t nist_186_2_ecdsa_testvector_72_public_x[] = { /* Qx - byte alignment */ 0x01, 0x62, 0xb9, 0x10, 0x63, 0x5a, 0x71, 0xce, 0x46, 0x44, 0xa7, 0x06, 0x2f, 0x4e, 0xb4, 0x27, 0xc8, 0x4b, 0x49, 0xe0, 0x89, 0x1f, 0x0d, 0xd0, 0xef, 0x56, 0x40, 0x4f, 0x10, 0x2d, 0xc4, 0xe7, 0xff, 0x6f, 0xe9, 0x53, 0x6f, 0x84, 0x06, 0xcd, 0xe4, 0x17, 0x1b, 0x0a, 0xed, 0x3c, 0xa8, 0x20, 0xdf, 0x75, 0xfd, 0x45, 0x85, 0x68, 0xec, 0xf7, 0x71, 0x86, 0x06, 0x71, 0x4a, 0xb3, 0x1d, 0xd8, 0x89, 0x87 }; static const uint8_t nist_186_2_ecdsa_testvector_72_public_y[] = { /* Qy - byte alignment */ 0x00, 0x78, 0xa7, 0x5f, 0x70, 0xb4, 0x7e, 0xa4, 0x2d, 0x43, 0x90, 0xf6, 0x16, 0x67, 0x6c, 0x10, 0x08, 0x53, 0x0c, 0x1d, 0xb4, 0xf8, 0x49, 0x9c, 0x21, 0xaf, 0x25, 0xa7, 0x59, 0x9b, 0x10, 0x02, 0x0f, 0x22, 0xe7, 0xbd, 0x94, 0x05, 0x71, 0xeb, 0x82, 0xeb, 0x98, 0xbd, 0x41, 0x2a, 0xee, 0x49, 0x07, 0xc0, 0xf1, 0x12, 0xe3, 0x81, 0x7b, 0x40, 0xd5, 0x37, 0x3f, 0x0f, 0xc4, 0x15, 0x2e, 0xb9, 0xda, 0xd5 }; /* k = 043e176a6fd627fbd7e058d8a3dacacd1f232120e312f9fcc825b720ab15e459108622be15cd6026c4b05bea6ed2cbe6817ea6be2427034d5db80703c759ce0190d */ static const uint8_t nist_186_2_ecdsa_testvector_72_out[] = { /* R - byte alignment */ 0x01, 0x23, 0x9e, 0x1d, 0x43, 0xa3, 0xda, 0x16, 0x57, 0x8c, 0x77, 0xdd, 0xcf, 0xc0, 0x92, 0xed, 0x53, 0x97, 0x4a, 0x97, 0xd7, 0x9b, 0x5e, 0xbf, 0x58, 0xcc, 0xf8, 0x36, 0x26, 0xbb, 0xeb, 0x4a, 0x8d, 0xc4, 0xe6, 0xcf, 0xd7, 0xe9, 0x1c, 0xac, 0x19, 0x72, 0x23, 0x24, 0x80, 0x44, 0x7a, 0x82, 0x3b, 0x7b, 0xdc, 0x6f, 0x5e, 0x5b, 0x0f, 0xf3, 0xf8, 0x03, 0x79, 0x5c, 0xbc, 0x10, 0x91, 0x12, 0x8e, 0x1b, /* S - byte alignment */ 0x00, 0x1f, 0x04, 0x20, 0x25, 0x23, 0xb6, 0xc2, 0x0b, 0xa2, 0x85, 0x39, 0x12, 0x58, 0x43, 0x91, 0x27, 0x8a, 0xf6, 0x0e, 0x89, 0x22, 0x6c, 0x01, 0xb7, 0x10, 0x90, 0xee, 0x95, 0x2e, 0x76, 0xfe, 0x38, 0x83, 0x5c, 0x89, 0x80, 0xd2, 0x40, 0x87, 0xc9, 0xbd, 0x29, 0x3b, 0x9d, 0xee, 0x79, 0xae, 0xee, 0x6f, 0x80, 0xf0, 0xff, 0xc3, 0x69, 0x23, 0x0e, 0xcf, 0x9d, 0x26, 0x55, 0x27, 0xbb, 0xd7, 0xb8, 0x46 }; static const uint8_t nist_186_2_ecdsa_testvector_73_ptx[] = { /* Msg */ 0x64, 0xf1, 0x6a, 0x92, 0x91, 0x99, 0x24, 0x8d, 0x64, 0x1a, 0xf9, 0x4a, 0xbd, 0x9f, 0xf5, 0xf1, 0x33, 0x38, 0x7c, 0xaa, 0x63, 0xda, 0x3b, 0xba, 0x88, 0xa8, 0x5e, 0xef, 0x4d, 0x70, 0x03, 0x3f, 0xdf, 0x79, 0xef, 0xac, 0x45, 0x7c, 0x80, 0x6b, 0xf4, 0xf0, 0xe3, 0x44, 0x9e, 0x8a, 0x87, 0x3c, 0x4c, 0x05, 0xd2, 0x72, 0xac, 0x1f, 0x12, 0x47, 0xac, 0xe4, 0xb6, 0xc1, 0x47, 0x2e, 0xbe, 0x32, 0x9f, 0x6d, 0x70, 0x14, 0x4d, 0xa4, 0x4d, 0x38, 0xf5, 0xb4, 0x43, 0x20, 0x1d, 0xdd, 0x24, 0xa9, 0x3f, 0x82, 0x57, 0xec, 0x1c, 0x2c, 0xce, 0x67, 0x54, 0xd2, 0x37, 0x58, 0x34, 0x58, 0x77, 0x6a, 0xcf, 0x55, 0x54, 0x93, 0x50, 0x19, 0x71, 0x3d, 0x8e, 0xef, 0x80, 0xa4, 0xe1, 0x9f, 0xb3, 0x7f, 0x35, 0x37, 0x73, 0xe2, 0x5c, 0x0b, 0x55, 0x63, 0xa9, 0xfb, 0x4a, 0x7c, 0xba, 0xf4, 0x16, 0x30 }; static const uint8_t nist_186_2_ecdsa_testvector_73_private[] = { /* d - byte alignment */ 0x01, 0x97, 0xd5, 0xa8, 0x11, 0x8e, 0xc8, 0x70, 0xe7, 0x37, 0x3d, 0x48, 0x44, 0x36, 0xd4, 0x9f, 0xa4, 0xc3, 0xf9, 0xff, 0xe8, 0xf6, 0x4a, 0x4c, 0xd8, 0x08, 0x74, 0x82, 0x94, 0x8d, 0x96, 0x1d, 0xd3, 0x0e, 0x85, 0x00, 0xe1, 0xfe, 0x66, 0x3b, 0x49, 0x3a, 0xa5, 0x3b, 0x80, 0xa2, 0x1f, 0x57, 0xc1, 0x44, 0xb9, 0x7f, 0x9d, 0xfa, 0xc7, 0x24, 0xc2, 0xb9, 0xd7, 0xed, 0xbc, 0x82, 0x41, 0x73, 0x63, 0x1f }; static const uint8_t nist_186_2_ecdsa_testvector_73_public_x[] = { /* Qx - byte alignment */ 0x01, 0xc9, 0x29, 0x07, 0x41, 0xf8, 0xd8, 0x3e, 0x60, 0x50, 0x5f, 0x90, 0xd1, 0x11, 0x6b, 0xb5, 0x97, 0x1b, 0x82, 0x27, 0x37, 0x3c, 0x2a, 0xde, 0x7a, 0xc9, 0xf6, 0x46, 0xe4, 0xb7, 0x4f, 0xe5, 0xde, 0xfa, 0xd0, 0xb7, 0xa6, 0x15, 0xcd, 0xac, 0x9d, 0x04, 0x15, 0x34, 0x01, 0xfb, 0x54, 0x26, 0xac, 0xe5, 0x6e, 0x28, 0xac, 0x8f, 0x9d, 0x81, 0xf1, 0x5d, 0xa8, 0x60, 0xc0, 0x82, 0x21, 0xa6, 0xd5, 0xde }; static const uint8_t nist_186_2_ecdsa_testvector_73_public_y[] = { /* Qy - byte alignment */ 0x01, 0x02, 0x8d, 0xb7, 0xea, 0x9a, 0x29, 0xc7, 0x31, 0x42, 0x48, 0xb9, 0x3f, 0x21, 0x4b, 0x7c, 0x65, 0xff, 0x05, 0x54, 0xc0, 0xe8, 0xe5, 0x08, 0x16, 0xd0, 0x03, 0x2c, 0x9a, 0xfe, 0x7d, 0xe6, 0x1f, 0x1f, 0x7e, 0x3c, 0xa7, 0xb3, 0x4f, 0xe4, 0x4a, 0xa9, 0x9a, 0x92, 0xf0, 0xcc, 0xbc, 0xa8, 0xce, 0xd9, 0xb7, 0xca, 0xba, 0x4d, 0xb2, 0xb2, 0x91, 0xcf, 0xaf, 0x39, 0x79, 0x66, 0x7c, 0xf6, 0x14, 0x74 }; /* k = 0c097b10e7533825ba682ef6a445ded274a1d0524eb790db11deb61f7f481d78b960e90d5fdb4a9771fcf99a3746cfada273a6548525d66d7774b92146adfda5214 */ static const uint8_t nist_186_2_ecdsa_testvector_73_out[] = { /* R - byte alignment */ 0x01, 0x48, 0x83, 0x2a, 0x67, 0x00, 0x27, 0xa7, 0x09, 0x82, 0x2e, 0x3b, 0x9f, 0x25, 0x1d, 0x57, 0xc1, 0xde, 0xce, 0xd7, 0x46, 0x4e, 0xf4, 0xbd, 0x8d, 0x16, 0x8f, 0x80, 0xb3, 0x60, 0x58, 0x54, 0x53, 0xc8, 0x56, 0x88, 0xaa, 0x09, 0x6d, 0x40, 0x90, 0xcf, 0x3d, 0x70, 0x89, 0xe1, 0x84, 0xdb, 0x0c, 0xff, 0x97, 0x39, 0x32, 0x66, 0x50, 0x8d, 0x1e, 0xc8, 0xbe, 0xa4, 0xc4, 0x87, 0x97, 0x8a, 0x8c, 0x46, /* S - byte alignment */ 0x01, 0xba, 0x38, 0x83, 0xed, 0x44, 0x1a, 0x49, 0xd3, 0x9c, 0x66, 0xda, 0xf7, 0x1a, 0x29, 0x05, 0x40, 0xcf, 0x50, 0x86, 0xc0, 0xa4, 0xbe, 0x76, 0xf3, 0xfb, 0xe3, 0xd1, 0xf0, 0xc9, 0xfa, 0xbc, 0xab, 0xc3, 0x4f, 0xb8, 0x18, 0x01, 0x54, 0xbf, 0x79, 0xd6, 0x81, 0xda, 0x2d, 0x0a, 0xd3, 0x15, 0xdf, 0x51, 0x9d, 0x13, 0x05, 0xbf, 0x63, 0xbb, 0x1a, 0xce, 0x7d, 0xb9, 0xec, 0xdf, 0x36, 0x9c, 0x03, 0xda }; static const uint8_t nist_186_2_ecdsa_testvector_74_ptx[] = { /* Msg */ 0xac, 0xc3, 0x7a, 0x55, 0xf3, 0xf7, 0x01, 0x92, 0x02, 0xbc, 0x1a, 0x4c, 0x05, 0x5f, 0x70, 0xd1, 0x24, 0x37, 0x8c, 0xd4, 0x57, 0x2a, 0x4a, 0x10, 0x7c, 0x72, 0x8e, 0x2e, 0xa7, 0xa1, 0x33, 0xe9, 0xb9, 0xe3, 0x44, 0x70, 0x34, 0x84, 0x6f, 0x0b, 0x4d, 0xb2, 0xb6, 0x02, 0x43, 0x83, 0x68, 0xbb, 0xf0, 0x3a, 0x50, 0x22, 0x9e, 0xc6, 0x2c, 0x4d, 0x1b, 0x8b, 0x61, 0x61, 0x10, 0x65, 0xec, 0xaf, 0x8e, 0xea, 0x9c, 0x23, 0xea, 0xf0, 0x7e, 0xdf, 0xcb, 0x50, 0x99, 0x23, 0x81, 0xe9, 0xdc, 0x70, 0x98, 0xe7, 0x55, 0xed, 0xad, 0x45, 0xa4, 0x09, 0x81, 0x90, 0xae, 0x62, 0x4c, 0xee, 0x96, 0xe6, 0x54, 0x60, 0xe9, 0x37, 0xbd, 0x44, 0x18, 0x54, 0xa3, 0x1e, 0x2c, 0x77, 0x66, 0x97, 0xb5, 0x39, 0x45, 0xc6, 0x03, 0xfc, 0x2f, 0xaf, 0x99, 0x8a, 0xd5, 0x09, 0xdf, 0xfa, 0x04, 0x45, 0x17, 0xd4 }; static const uint8_t nist_186_2_ecdsa_testvector_74_private[] = { /* d - byte alignment */ 0x00, 0x17, 0xdd, 0xec, 0xce, 0x87, 0x0a, 0xaa, 0x4a, 0x82, 0xbc, 0x3a, 0x0a, 0xe8, 0x14, 0x6b, 0xdb, 0x33, 0x02, 0x54, 0x4e, 0x5f, 0x13, 0x66, 0x85, 0x16, 0xf8, 0xb4, 0x03, 0x85, 0x6f, 0xb7, 0x47, 0x2f, 0x9c, 0xb4, 0x3c, 0x4c, 0x8a, 0x64, 0x74, 0x23, 0x32, 0x0f, 0xb9, 0xa1, 0xcd, 0xcf, 0x13, 0xb7, 0xc7, 0xc5, 0x84, 0x39, 0xa9, 0xdd, 0x67, 0x42, 0x95, 0x64, 0x63, 0x78, 0x4a, 0xd3, 0xdc, 0xf0 }; static const uint8_t nist_186_2_ecdsa_testvector_74_public_x[] = { /* Qx - byte alignment */ 0x01, 0xb3, 0x64, 0xfb, 0x81, 0x93, 0xdf, 0x3e, 0xaf, 0xb3, 0x92, 0x8b, 0x0f, 0xb4, 0xcb, 0x85, 0xcb, 0x3b, 0xc7, 0x0b, 0x41, 0x28, 0x53, 0xae, 0x1c, 0x8d, 0x72, 0x59, 0x46, 0xc5, 0xb1, 0x3f, 0x0a, 0x4f, 0x43, 0x95, 0x42, 0x16, 0x28, 0xdd, 0xdf, 0x16, 0x2f, 0xc6, 0xfd, 0x63, 0x76, 0x16, 0x1b, 0xf2, 0x7b, 0x15, 0x71, 0xcd, 0x18, 0x61, 0xe5, 0x24, 0xa8, 0x66, 0xc2, 0x3b, 0x07, 0x5a, 0x03, 0x93 }; static const uint8_t nist_186_2_ecdsa_testvector_74_public_y[] = { /* Qy - byte alignment */ 0x01, 0x4c, 0x44, 0x4f, 0xc0, 0x06, 0x9f, 0xa9, 0x0f, 0x43, 0x64, 0x35, 0x00, 0xf3, 0x9b, 0xfd, 0xf0, 0x0c, 0x17, 0x4c, 0xda, 0xa1, 0x0b, 0xac, 0x56, 0x5c, 0xa2, 0xde, 0x67, 0x98, 0xc1, 0x06, 0xbf, 0x43, 0x41, 0x15, 0x81, 0xbf, 0x24, 0xcd, 0xb8, 0xa1, 0x5b, 0xfd, 0x85, 0x32, 0xa1, 0xa8, 0xfd, 0x3b, 0x46, 0x5c, 0x20, 0x1a, 0xee, 0xe9, 0x0f, 0x12, 0xf5, 0x8d, 0xfe, 0x70, 0x53, 0x98, 0x40, 0x55 }; /* k = 0bf348f48bccfa65a24118d70f6ae96bd604287cb83cd644a94d652dca636bfef2a5d48768373dd97b64f916f0328166fc8b3636e1a7776a2b9e5dcf4c90536f45e */ static const uint8_t nist_186_2_ecdsa_testvector_74_out[] = { /* R - byte alignment */ 0x01, 0x86, 0xa8, 0x2f, 0x8f, 0xcb, 0xf5, 0xcc, 0x8a, 0xbd, 0x4e, 0x61, 0x77, 0x71, 0xc3, 0x74, 0x12, 0xc4, 0x13, 0xbd, 0x51, 0xb9, 0xf2, 0xb9, 0x7b, 0x76, 0xe5, 0x6c, 0x99, 0xa4, 0x1f, 0x1c, 0xa2, 0x76, 0xc3, 0xfc, 0xd8, 0xbb, 0xea, 0xe0, 0xd7, 0xcc, 0xf1, 0x82, 0x86, 0x81, 0x02, 0xce, 0xcb, 0x8a, 0xd1, 0x09, 0xd7, 0x7e, 0xc7, 0x77, 0xf5, 0x0c, 0xc4, 0xa1, 0x21, 0x52, 0xa3, 0xe3, 0x0b, 0xfd, /* S - byte alignment */ 0x01, 0xa2, 0x97, 0xd1, 0xf7, 0x48, 0xd8, 0xbd, 0x8e, 0x84, 0xb9, 0x40, 0x2b, 0xa4, 0xc4, 0x87, 0xa1, 0xd8, 0x37, 0x42, 0x83, 0x45, 0xef, 0x7f, 0x82, 0x76, 0x39, 0x47, 0x65, 0xc5, 0x06, 0xee, 0x6e, 0x2c, 0x52, 0x17, 0x21, 0x45, 0x4e, 0x2e, 0x71, 0x80, 0x1d, 0x73, 0xd2, 0x3e, 0x5a, 0x56, 0x6d, 0xfb, 0x79, 0x34, 0x90, 0xdb, 0x32, 0x13, 0xad, 0x50, 0x95, 0x91, 0x07, 0x47, 0x04, 0xfb, 0x27, 0xe4 }; static const uint8_t nist_186_2_ecdsa_testvector_75_ptx[] = { /* Msg */ 0x4b, 0xc8, 0x83, 0xa6, 0x72, 0xe4, 0xbf, 0x88, 0x55, 0xe3, 0x06, 0x25, 0x61, 0x52, 0x43, 0x13, 0xe9, 0x05, 0x89, 0x66, 0xbe, 0x5b, 0x4a, 0x1a, 0x00, 0xc2, 0xcb, 0xb1, 0x33, 0x7e, 0xd4, 0x1c, 0x95, 0xa7, 0xac, 0xdf, 0xaf, 0x71, 0x45, 0x71, 0x2b, 0xb1, 0xb3, 0xe1, 0xe5, 0x9c, 0xe2, 0xbf, 0x45, 0xd1, 0x89, 0x3a, 0xcb, 0x9a, 0x5a, 0x86, 0xeb, 0x6e, 0x7c, 0x81, 0x1c, 0xbb, 0x3a, 0x95, 0x2c, 0xe3, 0xfd, 0xe0, 0xd6, 0x84, 0x77, 0x92, 0x96, 0xfd, 0x22, 0x97, 0xbc, 0x2e, 0xe9, 0x77, 0xc0, 0x7f, 0x24, 0x7a, 0xd5, 0x23, 0xca, 0x0f, 0xc0, 0x9e, 0xe2, 0x6e, 0xeb, 0x84, 0x3b, 0x7d, 0xb5, 0x84, 0x5d, 0xf0, 0x0d, 0xa6, 0xbf, 0xb5, 0x3f, 0xd1, 0x3b, 0x8f, 0x0d, 0x90, 0xbe, 0x01, 0x02, 0x15, 0x44, 0x6d, 0x03, 0x7f, 0x04, 0x7d, 0x27, 0x58, 0xe7, 0xc2, 0xc9, 0x62, 0x3f, 0x9b }; static const uint8_t nist_186_2_ecdsa_testvector_75_private[] = { /* d - byte alignment */ 0x01, 0xfe, 0x1b, 0x13, 0x76, 0xf8, 0x0b, 0x0c, 0x0f, 0xf2, 0x7c, 0x1c, 0xe2, 0x4d, 0xed, 0x67, 0x6b, 0x0e, 0xb0, 0xd5, 0x78, 0x22, 0x8f, 0xd5, 0x1c, 0x65, 0x00, 0x64, 0x1e, 0x2e, 0x0e, 0x54, 0x1d, 0xe3, 0x32, 0xcb, 0xb8, 0x1b, 0xe6, 0xa5, 0xd6, 0xf1, 0x9a, 0x7c, 0xd6, 0x5a, 0x4b, 0x59, 0xa6, 0x23, 0x83, 0x58, 0x15, 0xf7, 0x4c, 0x42, 0x2d, 0x23, 0x7f, 0xd7, 0xf0, 0x39, 0x59, 0x8e, 0x6b, 0xb9 }; static const uint8_t nist_186_2_ecdsa_testvector_75_public_x[] = { /* Qx - byte alignment */ 0x01, 0xab, 0x5a, 0x78, 0x7d, 0xe5, 0xf1, 0xc1, 0xc5, 0xb4, 0x22, 0x8c, 0x0b, 0x4a, 0x30, 0x40, 0xe4, 0x8a, 0xd3, 0x40, 0xdb, 0xb7, 0xda, 0xa4, 0x5a, 0xd1, 0xab, 0x0a, 0x04, 0x8e, 0xbe, 0xc2, 0x4f, 0xb4, 0xf3, 0xfe, 0xee, 0xb2, 0x23, 0xb3, 0x6a, 0xdf, 0xe4, 0xe7, 0xd1, 0xc5, 0xaa, 0x42, 0x86, 0x41, 0x74, 0xea, 0x02, 0xea, 0x81, 0x51, 0x59, 0xea, 0xa1, 0x56, 0x8d, 0xae, 0x67, 0xe8, 0x28, 0xb3 }; static const uint8_t nist_186_2_ecdsa_testvector_75_public_y[] = { /* Qy - byte alignment */ 0x00, 0x2e, 0x1e, 0x35, 0xbf, 0x55, 0xfd, 0x6e, 0xd0, 0x7a, 0x6d, 0x62, 0xcd, 0x30, 0xeb, 0xfc, 0x3f, 0x6d, 0x60, 0xd4, 0x23, 0x11, 0xba, 0x17, 0x6b, 0x99, 0xc3, 0x68, 0x71, 0xc0, 0x33, 0xa2, 0xd9, 0xe5, 0xac, 0x36, 0x0c, 0x67, 0xf1, 0xe7, 0xaa, 0xa2, 0x1a, 0x8a, 0x63, 0xf6, 0x52, 0xda, 0xac, 0x01, 0x3f, 0x18, 0x9e, 0xf6, 0x16, 0x6a, 0x64, 0x27, 0x60, 0x15, 0x83, 0xec, 0x9e, 0x19, 0x18, 0x57 }; /* k = 0dafe91e7502aab9143d6bb7d127cfefa374030c10fa0f69b9bc7a071f38ff1b28518dc16852080e04c7da89792587228e7eaf03a00953cec725999216a7dc8ac88 */ static const uint8_t nist_186_2_ecdsa_testvector_75_out[] = { /* R - byte alignment */ 0x01, 0x43, 0x7a, 0x67, 0x47, 0x42, 0x82, 0xfa, 0xd0, 0x15, 0x4b, 0xfc, 0xa2, 0x99, 0x53, 0x80, 0xee, 0x44, 0xef, 0x12, 0x49, 0x2c, 0x8c, 0x78, 0x37, 0x4b, 0x16, 0x9d, 0x2a, 0x7d, 0x45, 0xe1, 0x6b, 0x5b, 0x71, 0xf1, 0x84, 0x3a, 0x28, 0x73, 0x00, 0xbe, 0x7b, 0x6c, 0xdd, 0xa3, 0xb2, 0xfa, 0x8b, 0xa7, 0xd8, 0x9d, 0x84, 0x77, 0xb7, 0x3a, 0x0a, 0xa8, 0x0b, 0x0c, 0xb0, 0xcf, 0x5b, 0x33, 0xb6, 0x93, /* S - byte alignment */ 0x01, 0x83, 0x3b, 0xf3, 0xe4, 0x58, 0xed, 0x65, 0xfe, 0xf4, 0x0e, 0x59, 0xfa, 0xb6, 0xfa, 0x16, 0x30, 0x2d, 0xaf, 0xf0, 0x58, 0x8b, 0xe4, 0x2a, 0x6b, 0xe8, 0xa3, 0xa0, 0x43, 0x01, 0xe4, 0xb4, 0xd9, 0x00, 0x6b, 0x2a, 0xc5, 0x68, 0xc9, 0x9c, 0x7f, 0x52, 0xb3, 0x57, 0x0c, 0x61, 0x1a, 0xb9, 0xd8, 0xb6, 0xf8, 0x3c, 0xa8, 0x32, 0xf5, 0x15, 0x8a, 0xa9, 0x51, 0xd3, 0x96, 0xa7, 0xc7, 0x97, 0xed, 0xe3 }; /* [K-163] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_76_ptx[] = { /* Msg */ 0xa2, 0xc1, 0xa0, 0x3f, 0xdd, 0x00, 0x52, 0x1b, 0xb0, 0x8f, 0xc8, 0x8d, 0x20, 0x34, 0x43, 0x21, 0x97, 0x7a, 0xaf, 0x63, 0x7e, 0xf9, 0xd5, 0x47, 0x0d, 0xd7, 0xd2, 0xc8, 0x62, 0x8f, 0xc8, 0xd0, 0xd1, 0xf1, 0xd3, 0x58, 0x7c, 0x6b, 0x3f, 0xd0, 0x23, 0x86, 0xf8, 0xc1, 0x3d, 0xb3, 0x41, 0xb1, 0x47, 0x48, 0xa9, 0x47, 0x5c, 0xc6, 0x3b, 0xaf, 0x06, 0x5d, 0xf6, 0x40, 0x54, 0xb2, 0x7d, 0x5c, 0x2c, 0xdf, 0x0f, 0x98, 0xe3, 0xbb, 0xb8, 0x1d, 0x0b, 0x5d, 0xc9, 0x4f, 0x8c, 0xdb, 0x87, 0xac, 0xf7, 0x57, 0x20, 0xf6, 0x16, 0x3d, 0xe3, 0x94, 0xc8, 0xc6, 0xaf, 0x36, 0x0b, 0xc1, 0xac, 0xb8, 0x5b, 0x92, 0x3a, 0x49, 0x3b, 0x7b, 0x27, 0xcc, 0x11, 0x1a, 0x25, 0x7e, 0x36, 0x33, 0x7b, 0xd9, 0x4e, 0xb0, 0xfa, 0xb9, 0xd5, 0xe6, 0x33, 0xbe, 0xfb, 0x1a, 0xe7, 0xf1, 0xb2, 0x44, 0xbf, 0xaa }; static const uint8_t nist_186_2_ecdsa_testvector_76_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0x1f, 0x26, 0x26, 0xd9, 0x0d, 0x26, 0xcb, 0x4c, 0x03, 0x79, 0x04, 0x3b, 0x26, 0xe6, 0x41, 0x07, 0xfc }; static const uint8_t nist_186_2_ecdsa_testvector_76_public_x[] = { /* Qx - byte alignment */ 0x00, 0x38, 0x9f, 0xa5, 0xad, 0x7f, 0x83, 0x04, 0x32, 0x5a, 0x8c, 0x06, 0x0e, 0xf7, 0xdc, 0xb8, 0x30, 0x42, 0xc0, 0x45, 0xbc }; static const uint8_t nist_186_2_ecdsa_testvector_76_public_y[] = { /* Qy - byte alignment */ 0x00, 0xee, 0xfa, 0x09, 0x4a, 0x50, 0x54, 0xda, 0x19, 0x69, 0x43, 0xcc, 0x80, 0x50, 0x9d, 0xcb, 0x9f, 0x59, 0xe5, 0xbc, 0x2e }; /* k = 0000000c3a4ff97286126dab1e5089395fcc47ebb */ static const uint8_t nist_186_2_ecdsa_testvector_76_out[] = { /* R - byte alignment */ 0x00, 0xdb, 0xe6, 0xc3, 0xa1, 0xdc, 0x85, 0x1e, 0x7f, 0x23, 0x38, 0xb5, 0xc2, 0x6c, 0x62, 0xb4, 0xb3, 0x7b, 0xf8, 0x03, 0x5c, /* S - byte alignment */ 0x01, 0xc7, 0x64, 0x58, 0x13, 0x5b, 0x1f, 0xf9, 0xfb, 0xd2, 0x30, 0x09, 0xb8, 0x41, 0x4a, 0x47, 0x99, 0x61, 0x26, 0xb5, 0x6a }; static const uint8_t nist_186_2_ecdsa_testvector_77_ptx[] = { /* Msg */ 0x67, 0x04, 0x80, 0x80, 0xda, 0xae, 0xb7, 0x7d, 0x3a, 0xc3, 0x1b, 0xab, 0xdf, 0x8b, 0xe2, 0x3d, 0xbe, 0x75, 0xce, 0xb4, 0xdf, 0xb9, 0x4a, 0xa8, 0x11, 0x3d, 0xb5, 0xc5, 0xdc, 0xb6, 0xfe, 0x14, 0xb7, 0x0f, 0x71, 0x7b, 0x7b, 0x0e, 0xd0, 0x88, 0x18, 0x35, 0xa6, 0x6a, 0x86, 0xe6, 0xd8, 0x40, 0xff, 0xcb, 0x7d, 0x97, 0x6c, 0x75, 0xef, 0x2d, 0x1d, 0x43, 0x22, 0xfb, 0xbc, 0x86, 0x35, 0x73, 0x84, 0xe2, 0x47, 0x07, 0xae, 0xf8, 0x8c, 0xea, 0x2c, 0x41, 0xa0, 0x1a, 0x9a, 0x3d, 0x1b, 0x9e, 0x72, 0xce, 0x65, 0x0c, 0x7f, 0xde, 0xcc, 0x4f, 0x94, 0x48, 0xd3, 0xa7, 0x7d, 0xf6, 0xcd, 0xf1, 0x36, 0x47, 0xab, 0x29, 0x5b, 0xb3, 0x13, 0x2d, 0xe0, 0xb1, 0xb2, 0xc4, 0x02, 0xd8, 0xd2, 0xde, 0x7d, 0x45, 0x2f, 0x1e, 0x00, 0x3e, 0x06, 0x95, 0xde, 0x14, 0x70, 0xd1, 0x06, 0x4e, 0xee, 0x16 }; static const uint8_t nist_186_2_ecdsa_testvector_77_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x6a, 0x38, 0x03, 0x30, 0x1d, 0xae, 0xe9, 0xaf, 0x09, 0xbb, 0x5b, 0x6c, 0x99, 0x1a, 0x4f, 0x49, 0xa4 }; static const uint8_t nist_186_2_ecdsa_testvector_77_public_x[] = { /* Qx - byte alignment */ 0x04, 0xb5, 0x00, 0xf5, 0x55, 0xe8, 0x57, 0xda, 0x8c, 0x29, 0x97, 0x80, 0x13, 0x0c, 0x5c, 0x3f, 0x48, 0xf0, 0x2e, 0xe3, 0x22 }; static const uint8_t nist_186_2_ecdsa_testvector_77_public_y[] = { /* Qy - byte alignment */ 0x05, 0xc1, 0xc0, 0xae, 0x25, 0xb4, 0x7f, 0x06, 0xcc, 0x46, 0xfb, 0x86, 0xb1, 0x2d, 0x2d, 0x8c, 0x0b, 0xa6, 0xa4, 0xbf, 0x07 }; /* k = 0000002f39fbf77f3e0dc046116de692b6cf91b16 */ static const uint8_t nist_186_2_ecdsa_testvector_77_out[] = { /* R - byte alignment */ 0x03, 0xd3, 0xee, 0xda, 0x42, 0xf6, 0x5d, 0x72, 0x7f, 0x4a, 0x56, 0x4f, 0x14, 0x15, 0x65, 0x43, 0x56, 0xc6, 0xc5, 0x7a, 0x6c, /* S - byte alignment */ 0x03, 0x5e, 0x4d, 0x43, 0xc5, 0xf0, 0x8b, 0xad, 0xdf, 0x13, 0x84, 0x49, 0xdb, 0x1a, 0xd0, 0xb7, 0x87, 0x25, 0x52, 0xb7, 0xcd }; static const uint8_t nist_186_2_ecdsa_testvector_78_ptx[] = { /* Msg */ 0x77, 0xe0, 0x07, 0xdc, 0x2a, 0xcd, 0x72, 0x48, 0x25, 0x61, 0x65, 0xa4, 0xb3, 0x0e, 0x98, 0x98, 0x6f, 0x51, 0xa8, 0x1e, 0xfd, 0x92, 0x6b, 0x85, 0xf7, 0x4c, 0x81, 0xbc, 0x2a, 0x6d, 0x2b, 0xcd, 0x03, 0x00, 0x60, 0xa8, 0x44, 0x09, 0x1e, 0x22, 0xfb, 0xb0, 0xff, 0x3d, 0xb5, 0xa2, 0x0c, 0xaa, 0xef, 0xb5, 0xd5, 0x8c, 0xcd, 0xcb, 0xc2, 0x7f, 0x0f, 0xf8, 0xa4, 0xd9, 0x40, 0xe7, 0x8f, 0x30, 0x30, 0x79, 0xec, 0x1c, 0xa5, 0xb0, 0xca, 0x3d, 0x4e, 0xcc, 0x75, 0x80, 0xf8, 0xb3, 0x4a, 0x9f, 0x04, 0x96, 0xc9, 0xe7, 0x19, 0xd2, 0xec, 0x3e, 0x16, 0x14, 0xb7, 0x64, 0x4b, 0xc1, 0x11, 0x79, 0xe8, 0x95, 0xd2, 0xc0, 0xb5, 0x8a, 0x1d, 0xa2, 0x04, 0xfb, 0xf0, 0xf6, 0xe5, 0x09, 0xf9, 0x7f, 0x98, 0x3e, 0xac, 0xb6, 0x48, 0x70, 0x92, 0xca, 0xf6, 0xe8, 0xe4, 0xe6, 0xb3, 0xc4, 0x58, 0xb2 }; static const uint8_t nist_186_2_ecdsa_testvector_78_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x02, 0xe2, 0x86, 0x76, 0x51, 0x4b, 0xd9, 0x3f, 0xea, 0x11, 0xb6, 0x2d, 0xb0, 0xf6, 0xe3, 0x24, 0xb1, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_78_public_x[] = { /* Qx - byte alignment */ 0x03, 0xf9, 0xc9, 0x0b, 0x71, 0xf6, 0xa1, 0xde, 0x20, 0xa2, 0x71, 0x6f, 0x38, 0xef, 0x1b, 0x5f, 0x98, 0xc7, 0x57, 0xbd, 0x42 }; static const uint8_t nist_186_2_ecdsa_testvector_78_public_y[] = { /* Qy - byte alignment */ 0x02, 0xff, 0x0a, 0x5d, 0x26, 0x6d, 0x44, 0x7e, 0xf6, 0x2d, 0x43, 0xfb, 0xca, 0x6c, 0x34, 0xc0, 0x8c, 0x1c, 0xe3, 0x5a, 0x40 }; /* k = 00000001233ae699883e74e7f4dfb5279ff22280a */ static const uint8_t nist_186_2_ecdsa_testvector_78_out[] = { /* R - byte alignment */ 0x03, 0x9d, 0xe3, 0xcd, 0x2c, 0xf0, 0x41, 0x45, 0xe5, 0x22, 0xb8, 0xfb, 0xa3, 0xf2, 0x3e, 0x92, 0x18, 0x22, 0x6e, 0x08, 0x60, /* S - byte alignment */ 0x02, 0xaf, 0x62, 0xbf, 0xb3, 0xcf, 0xa2, 0x02, 0xe2, 0x34, 0x26, 0x06, 0xee, 0x5b, 0xb0, 0x93, 0x4c, 0x3b, 0x03, 0x75, 0xb6 }; static const uint8_t nist_186_2_ecdsa_testvector_79_ptx[] = { /* Msg */ 0xfb, 0xac, 0xfc, 0xce, 0x46, 0x88, 0x74, 0x84, 0x06, 0xdd, 0xf5, 0xc3, 0x49, 0x50, 0x21, 0xee, 0xf8, 0xfb, 0x39, 0x98, 0x65, 0xb6, 0x49, 0xeb, 0x23, 0x95, 0xa0, 0x4a, 0x1a, 0xb2, 0x83, 0x35, 0xda, 0x2c, 0x23, 0x6d, 0x30, 0x6f, 0xcc, 0x59, 0xf7, 0xb6, 0x5e, 0xa9, 0x31, 0xcf, 0x01, 0x39, 0x57, 0x1e, 0x15, 0x38, 0xed, 0xe5, 0x68, 0x89, 0x58, 0xc3, 0xac, 0x69, 0xf4, 0x7a, 0x28, 0x53, 0x62, 0xf5, 0xad, 0x20, 0x1f, 0x89, 0xcc, 0x73, 0x5b, 0x7b, 0x46, 0x54, 0x08, 0xc2, 0xc4, 0x1b, 0x31, 0x0f, 0xc8, 0x90, 0x8d, 0x0b, 0xe4, 0x50, 0x54, 0xdf, 0x2a, 0x73, 0x51, 0xfa, 0xe3, 0x6b, 0x39, 0x0e, 0x84, 0x2f, 0x3b, 0x5c, 0xdd, 0x9a, 0xd8, 0x32, 0x94, 0x0d, 0xf5, 0xb2, 0xd2, 0x5c, 0x2e, 0xd4, 0x3c, 0xe8, 0x6e, 0xaf, 0x25, 0x08, 0xbc, 0xf4, 0x01, 0xae, 0x58, 0xbb, 0x1d, 0x47 }; static const uint8_t nist_186_2_ecdsa_testvector_79_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0x61, 0xdd, 0x08, 0x8e, 0x3a, 0x6d, 0x3c, 0x91, 0x06, 0x86, 0xc8, 0xdc, 0xe5, 0x7e, 0x5d, 0x4d, 0x8e }; static const uint8_t nist_186_2_ecdsa_testvector_79_public_x[] = { /* Qx - byte alignment */ 0x00, 0x64, 0xf9, 0x05, 0xc1, 0xda, 0x9d, 0x7e, 0x9c, 0x32, 0xd8, 0x18, 0x90, 0xae, 0x6f, 0x30, 0xdc, 0xc7, 0x83, 0x9d, 0x32 }; static const uint8_t nist_186_2_ecdsa_testvector_79_public_y[] = { /* Qy - byte alignment */ 0x00, 0x6f, 0x1f, 0xae, 0xdb, 0x6d, 0x90, 0x32, 0x01, 0x6d, 0x3b, 0x68, 0x1e, 0x7c, 0xf6, 0x9c, 0x29, 0xd2, 0x9e, 0xb2, 0x7b }; /* k = 00000022f723e9f5da56d3d0837d5dca2f937395f */ static const uint8_t nist_186_2_ecdsa_testvector_79_out[] = { /* R - byte alignment */ 0x03, 0x74, 0xcd, 0xc8, 0x57, 0x10, 0x83, 0xfe, 0xcf, 0xbd, 0x4e, 0x25, 0xe1, 0xcd, 0x69, 0xec, 0xc6, 0x6b, 0x71, 0x5f, 0x2d, /* S - byte alignment */ 0x03, 0x13, 0xb1, 0x09, 0x49, 0x22, 0x29, 0x29, 0xb2, 0xf2, 0x0b, 0x15, 0xd4, 0x46, 0xc2, 0x7d, 0x6d, 0xca, 0xe3, 0xf0, 0x86 }; static const uint8_t nist_186_2_ecdsa_testvector_80_ptx[] = { /* Msg */ 0x22, 0x0f, 0x5c, 0xeb, 0xca, 0xbe, 0x9f, 0x75, 0x74, 0x20, 0x8f, 0x9c, 0x59, 0xa0, 0xc0, 0x35, 0x4a, 0xdc, 0x29, 0xec, 0x94, 0xf8, 0x28, 0x35, 0x26, 0x37, 0xc6, 0x85, 0xf6, 0xcc, 0x3d, 0xc1, 0xa0, 0xed, 0xb7, 0xf7, 0x50, 0x2a, 0x59, 0x4c, 0xe3, 0xfd, 0x80, 0x35, 0x49, 0xa2, 0x4a, 0xea, 0x2e, 0x28, 0x59, 0x18, 0xd9, 0xc9, 0xd3, 0xd6, 0x54, 0x77, 0xad, 0xdb, 0xcd, 0xb7, 0x2a, 0xee, 0x3c, 0xb2, 0x9e, 0x9d, 0x46, 0x89, 0x78, 0x32, 0x61, 0xea, 0x7f, 0xe3, 0x3a, 0xe1, 0x5c, 0x49, 0x54, 0xf0, 0x59, 0x14, 0xf1, 0x61, 0x68, 0xfc, 0x35, 0xdb, 0x67, 0xfb, 0x89, 0x34, 0xa2, 0xb9, 0x3e, 0x86, 0x9a, 0x48, 0x72, 0x85, 0x05, 0x11, 0x38, 0x0f, 0x15, 0x0e, 0xf3, 0x05, 0xfd, 0x3a, 0x03, 0x5a, 0xb2, 0x46, 0xa4, 0x69, 0xee, 0x8e, 0x12, 0x8c, 0x7b, 0x4b, 0xf2, 0xea, 0xae, 0x0a }; static const uint8_t nist_186_2_ecdsa_testvector_80_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0xea, 0x9b, 0xc0, 0x41, 0x22, 0x9b, 0x8b, 0x6d, 0x2d, 0x69, 0x20, 0x3a, 0x88, 0x36, 0x5f, 0xfd, 0x5e }; static const uint8_t nist_186_2_ecdsa_testvector_80_public_x[] = { /* Qx - byte alignment */ 0x04, 0x17, 0x11, 0xcd, 0xff, 0x26, 0x44, 0x2d, 0xd6, 0x77, 0x07, 0xf4, 0x45, 0xaf, 0x77, 0xd7, 0x0e, 0x01, 0x1b, 0xcd, 0x51 }; static const uint8_t nist_186_2_ecdsa_testvector_80_public_y[] = { /* Qy - byte alignment */ 0x06, 0x9c, 0x58, 0x5b, 0x72, 0xbc, 0x26, 0xef, 0xee, 0x95, 0x29, 0xf3, 0x98, 0xf0, 0x66, 0xe6, 0x74, 0x1c, 0xa3, 0xec, 0x35 }; /* k = 00000016a031feed289363088b92e9d87f98b184f */ static const uint8_t nist_186_2_ecdsa_testvector_80_out[] = { /* R - byte alignment */ 0x00, 0xb7, 0x2f, 0xf8, 0xa8, 0xb4, 0x05, 0xd4, 0xfc, 0x33, 0xa5, 0x0f, 0x21, 0x07, 0x83, 0xe2, 0x5b, 0x02, 0x6f, 0x29, 0x8b, /* S - byte alignment */ 0x00, 0x1d, 0xb7, 0x46, 0x29, 0x9f, 0xd3, 0x0d, 0x20, 0x3b, 0x2b, 0xe4, 0x4b, 0xb2, 0x3c, 0xcf, 0x61, 0x05, 0x5c, 0x9a, 0x09 }; static const uint8_t nist_186_2_ecdsa_testvector_81_ptx[] = { /* Msg */ 0xb2, 0x7e, 0x3e, 0xfe, 0x6f, 0xfc, 0xe7, 0xe1, 0x76, 0x1c, 0x27, 0x84, 0x9e, 0xab, 0xa3, 0xcc, 0xce, 0x43, 0xa5, 0xae, 0xb5, 0x28, 0x6c, 0x38, 0xbb, 0x70, 0xc7, 0xd1, 0x37, 0x67, 0xe2, 0xc1, 0xe2, 0x31, 0x5f, 0xf4, 0x8c, 0xb1, 0xa8, 0xfa, 0x0d, 0xaa, 0x84, 0x53, 0x7f, 0x24, 0xe9, 0xea, 0xaa, 0x12, 0x12, 0xdf, 0xc0, 0x31, 0xd0, 0x89, 0x4b, 0x33, 0x25, 0xbc, 0x63, 0x1d, 0x0f, 0x47, 0x24, 0xee, 0xa2, 0xc1, 0x5f, 0x81, 0x59, 0x86, 0x90, 0xb4, 0xae, 0xfc, 0x10, 0xca, 0xe8, 0x1b, 0x8c, 0x0e, 0x35, 0x2c, 0xb6, 0xb9, 0xf8, 0xd0, 0x3a, 0x16, 0x64, 0x45, 0xf4, 0xe4, 0x4a, 0xe5, 0x60, 0xfc, 0x2f, 0xef, 0x52, 0x34, 0xa2, 0x8a, 0xe7, 0x82, 0xcd, 0x07, 0xbb, 0x65, 0x49, 0x67, 0x5c, 0x80, 0x37, 0x1d, 0xff, 0x88, 0x8c, 0x15, 0x72, 0x61, 0xac, 0xf4, 0x52, 0x84, 0x3b, 0xa2 }; static const uint8_t nist_186_2_ecdsa_testvector_81_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0x0d, 0x5c, 0x1d, 0xc7, 0x23, 0x12, 0xfb, 0x6e, 0x0a, 0x99, 0xb1, 0x2c, 0xd1, 0x49, 0xbc, 0x87, 0xa0 }; static const uint8_t nist_186_2_ecdsa_testvector_81_public_x[] = { /* Qx - byte alignment */ 0x03, 0x64, 0x4d, 0x39, 0x7d, 0x5d, 0xa9, 0xca, 0x51, 0x2e, 0x53, 0x1a, 0xd7, 0xea, 0xbd, 0xd4, 0x6e, 0x94, 0xee, 0x64, 0x34 }; static const uint8_t nist_186_2_ecdsa_testvector_81_public_y[] = { /* Qy - byte alignment */ 0x03, 0x07, 0x6e, 0xce, 0x39, 0xb0, 0xa6, 0x20, 0x12, 0x79, 0xda, 0x46, 0x6a, 0x6e, 0x94, 0xb1, 0x06, 0xec, 0xaf, 0x0b, 0xb4 }; /* k = 000000217f4ff46866a7d6245ba213da3c4ea7abd */ static const uint8_t nist_186_2_ecdsa_testvector_81_out[] = { /* R - byte alignment */ 0x01, 0x3c, 0xb5, 0x49, 0x9d, 0xef, 0x63, 0x9a, 0xc6, 0xd2, 0x8b, 0xe0, 0x65, 0x99, 0x20, 0x63, 0x42, 0xf5, 0x53, 0xb8, 0x96, /* S - byte alignment */ 0x02, 0x0b, 0xd7, 0x31, 0xcf, 0x1e, 0xfd, 0xe7, 0x53, 0x59, 0xf9, 0x25, 0xd9, 0xb9, 0xff, 0xb1, 0x18, 0x60, 0xfb, 0xed, 0xb8 }; static const uint8_t nist_186_2_ecdsa_testvector_82_ptx[] = { /* Msg */ 0x87, 0xf3, 0xb9, 0xf9, 0x71, 0x94, 0xfb, 0x07, 0x0e, 0xa8, 0x3c, 0x0c, 0xe6, 0xa8, 0xe2, 0x67, 0x2e, 0x05, 0x6a, 0x30, 0xed, 0xbc, 0xad, 0x6e, 0x5d, 0x2b, 0x62, 0x8a, 0x94, 0x22, 0xe5, 0x04, 0x63, 0x3e, 0x37, 0x65, 0x7f, 0x72, 0x45, 0x75, 0xde, 0xe7, 0x6d, 0xad, 0x64, 0x06, 0x3e, 0xef, 0xbf, 0xd3, 0x7f, 0x75, 0x90, 0x7c, 0x73, 0x08, 0xcb, 0x31, 0x5c, 0x72, 0x60, 0x37, 0x3e, 0x35, 0x1b, 0x38, 0xe5, 0x7d, 0xc8, 0xde, 0x29, 0x54, 0x9c, 0xa0, 0x71, 0x15, 0xd0, 0xdb, 0x76, 0x23, 0x8f, 0x24, 0x4a, 0xda, 0x12, 0xdd, 0x98, 0xc6, 0x0a, 0x06, 0x2d, 0x13, 0x3e, 0x56, 0xb7, 0x45, 0x75, 0x8a, 0xcd, 0x2a, 0x96, 0xfe, 0x30, 0x0c, 0x0e, 0x7a, 0x51, 0x2a, 0x72, 0x4e, 0x13, 0x6a, 0x65, 0xa1, 0xd1, 0x48, 0xbd, 0x06, 0xa3, 0x12, 0xe1, 0x50, 0xdd, 0x57, 0x75, 0xa8, 0xd9, 0x9d }; static const uint8_t nist_186_2_ecdsa_testvector_82_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0x61, 0xe9, 0x60, 0x4c, 0x1c, 0xf3, 0xa7, 0x2a, 0x25, 0x59, 0xf5, 0x2f, 0x2e, 0x5a, 0x33, 0xa0, 0x0d }; static const uint8_t nist_186_2_ecdsa_testvector_82_public_x[] = { /* Qx - byte alignment */ 0x03, 0xaa, 0x80, 0x97, 0x24, 0x50, 0xe0, 0x1b, 0x6a, 0x92, 0x9a, 0x50, 0x61, 0xc1, 0xe2, 0xfa, 0x89, 0x46, 0x02, 0xf8, 0x06 }; static const uint8_t nist_186_2_ecdsa_testvector_82_public_y[] = { /* Qy - byte alignment */ 0x07, 0x14, 0x40, 0x7f, 0x01, 0x02, 0xa1, 0xe3, 0xc2, 0xb9, 0x76, 0xb5, 0xc1, 0x4d, 0x27, 0xc3, 0x6c, 0xc7, 0xc9, 0x79, 0xcf }; /* k = 0000003a825776cddc985306cd5aa113f7c564063 */ static const uint8_t nist_186_2_ecdsa_testvector_82_out[] = { /* R - byte alignment */ 0x01, 0xcf, 0x66, 0xa6, 0x8f, 0x88, 0x23, 0xae, 0xe8, 0xdf, 0x5a, 0x84, 0x2d, 0x76, 0x9c, 0x59, 0xab, 0x81, 0x52, 0xdd, 0xf2, /* S - byte alignment */ 0x01, 0x9a, 0xdf, 0x89, 0x20, 0x11, 0x10, 0x5e, 0xcf, 0x4a, 0x9f, 0xf3, 0x7a, 0xb6, 0x1b, 0x11, 0x12, 0x90, 0x3b, 0x0e, 0xa9 }; static const uint8_t nist_186_2_ecdsa_testvector_83_ptx[] = { /* Msg */ 0x4c, 0xf2, 0xee, 0x62, 0x40, 0xa7, 0x5c, 0xb1, 0xc7, 0xf9, 0xf3, 0x81, 0xd1, 0xa4, 0xd0, 0x8e, 0x01, 0x57, 0x39, 0x15, 0x68, 0x65, 0x7f, 0x2f, 0x94, 0xbd, 0x29, 0x5d, 0xc9, 0x1c, 0x4e, 0x64, 0x8e, 0x81, 0x43, 0x5b, 0x6b, 0xe2, 0x77, 0x02, 0xf2, 0x1d, 0x9a, 0x55, 0xfc, 0x31, 0x05, 0x61, 0x35, 0xae, 0x56, 0x57, 0xdb, 0x6a, 0x5a, 0xdf, 0xc2, 0x76, 0x31, 0xae, 0x9c, 0x50, 0xac, 0x5b, 0x77, 0x5a, 0xfa, 0x6e, 0x87, 0x8b, 0x84, 0xbb, 0x26, 0x65, 0x15, 0xee, 0x19, 0x27, 0x3e, 0x66, 0x15, 0x43, 0xf9, 0x47, 0x81, 0x12, 0x8c, 0xca, 0x7e, 0xc7, 0xb0, 0xd8, 0x25, 0xa2, 0xf3, 0xd8, 0x0f, 0x66, 0x5b, 0xc5, 0x1b, 0x0c, 0x4c, 0x83, 0x6b, 0xb9, 0xab, 0x73, 0xb0, 0xee, 0x44, 0x45, 0xa8, 0xfe, 0x69, 0x0d, 0xe5, 0xc6, 0xdc, 0x99, 0xcf, 0x98, 0xf0, 0x02, 0xec, 0x78, 0xea, 0x82 }; static const uint8_t nist_186_2_ecdsa_testvector_83_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0x12, 0xd8, 0xd8, 0x62, 0xd6, 0x3a, 0xa8, 0xcc, 0x9a, 0xae, 0x8f, 0xc6, 0x08, 0x93, 0x10, 0x26, 0x1a }; static const uint8_t nist_186_2_ecdsa_testvector_83_public_x[] = { /* Qx - byte alignment */ 0x01, 0xfb, 0x53, 0x45, 0x0e, 0x99, 0x8e, 0x10, 0xf3, 0xd7, 0xe2, 0x50, 0xaf, 0x25, 0x09, 0x1b, 0x34, 0x16, 0xf9, 0x55, 0x7c }; static const uint8_t nist_186_2_ecdsa_testvector_83_public_y[] = { /* Qy - byte alignment */ 0x04, 0x20, 0x13, 0xa4, 0x3e, 0x83, 0xde, 0x70, 0xea, 0xe3, 0x4e, 0xc0, 0xf1, 0xc9, 0xe0, 0x64, 0xf8, 0xb8, 0xa4, 0xcf, 0x96 }; /* k = 0000000f87c1a90f06df81b91e3f5ea2b901dc1ce */ static const uint8_t nist_186_2_ecdsa_testvector_83_out[] = { /* R - byte alignment */ 0x03, 0x86, 0x52, 0x6c, 0x35, 0x5a, 0x58, 0x65, 0xdd, 0x24, 0x4e, 0x0d, 0x1d, 0xc7, 0x60, 0x8c, 0x68, 0xa0, 0x5d, 0x09, 0x24, /* S - byte alignment */ 0x01, 0x2a, 0x0c, 0x46, 0x92, 0x44, 0x23, 0x4a, 0xcf, 0x9e, 0xf7, 0x6a, 0xab, 0x62, 0x5e, 0xe4, 0xf0, 0x87, 0xd5, 0x87, 0x1d }; static const uint8_t nist_186_2_ecdsa_testvector_84_ptx[] = { /* Msg */ 0x72, 0xdd, 0xa4, 0x28, 0x45, 0x65, 0x4c, 0xb2, 0x5d, 0x35, 0xcf, 0x8c, 0xe3, 0xa7, 0xb3, 0x77, 0xa5, 0x1b, 0x66, 0x72, 0xb1, 0x3b, 0x77, 0x25, 0x23, 0x84, 0x06, 0x80, 0x3b, 0x02, 0x7a, 0xa0, 0xb3, 0x5a, 0x72, 0xf2, 0x4f, 0x0e, 0xfd, 0x9a, 0xb5, 0xfd, 0x0d, 0x16, 0x7f, 0x29, 0x29, 0x1e, 0x8f, 0xbd, 0x63, 0xcf, 0xa2, 0x4f, 0x8a, 0x09, 0x28, 0x62, 0xa0, 0x16, 0x54, 0x2f, 0x8e, 0x8c, 0x6f, 0xa5, 0x17, 0x74, 0x71, 0xae, 0x0b, 0xab, 0xd2, 0xb4, 0xbd, 0x89, 0x9e, 0x64, 0xb6, 0xc1, 0xc8, 0xb1, 0xab, 0x88, 0xc0, 0x1c, 0xad, 0xfa, 0x47, 0x33, 0xa0, 0xb9, 0x83, 0x58, 0xee, 0xd7, 0x4e, 0xc4, 0x7d, 0xf6, 0xd4, 0xcc, 0xde, 0xad, 0x5d, 0x62, 0xc7, 0x2e, 0x67, 0xde, 0xc3, 0x26, 0xf8, 0xff, 0x28, 0xe5, 0x32, 0x2c, 0x49, 0xbf, 0x28, 0x00, 0xee, 0xb2, 0xf0, 0x06, 0x01, 0x49 }; static const uint8_t nist_186_2_ecdsa_testvector_84_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0x10, 0x0c, 0x44, 0x9f, 0x8f, 0x2a, 0xfb, 0x6c, 0xc3, 0x7c, 0xb5, 0x9a, 0xbb, 0x74, 0x42, 0x35, 0xaa }; static const uint8_t nist_186_2_ecdsa_testvector_84_public_x[] = { /* Qx - byte alignment */ 0x00, 0xcc, 0x30, 0x8b, 0xd9, 0x87, 0xb7, 0x3d, 0xe3, 0xda, 0xde, 0x37, 0x50, 0xb6, 0x02, 0xb2, 0xaf, 0x38, 0x97, 0x5d, 0x2f }; static const uint8_t nist_186_2_ecdsa_testvector_84_public_y[] = { /* Qy - byte alignment */ 0x04, 0x43, 0x40, 0x7a, 0x50, 0xec, 0xcf, 0x27, 0x33, 0x85, 0x84, 0x04, 0xdb, 0x64, 0x6b, 0x47, 0x81, 0x6a, 0xeb, 0xbf, 0x5d }; /* k = 0000001f196493e41d9aa701ae69b9efa6ef754d0 */ static const uint8_t nist_186_2_ecdsa_testvector_84_out[] = { /* R - byte alignment */ 0x02, 0xe9, 0x13, 0xb4, 0x69, 0x87, 0x46, 0x0d, 0x86, 0x35, 0xc8, 0x63, 0x71, 0xae, 0xb0, 0x89, 0x8d, 0x51, 0xfc, 0x57, 0x9f, /* S - byte alignment */ 0x01, 0x76, 0x8e, 0xde, 0x6f, 0xa5, 0xbc, 0x7a, 0x16, 0x55, 0x41, 0x89, 0xd5, 0xdd, 0x8c, 0x6d, 0x64, 0xbb, 0x35, 0x36, 0x5b }; static const uint8_t nist_186_2_ecdsa_testvector_85_ptx[] = { /* Msg */ 0xbe, 0xc9, 0x65, 0x87, 0xaf, 0x3c, 0x78, 0x4d, 0xa0, 0xe5, 0x47, 0xbc, 0xfb, 0x15, 0x34, 0xc0, 0xd2, 0x25, 0x81, 0x9f, 0x23, 0xad, 0xb8, 0xce, 0x5b, 0xf7, 0x4a, 0x09, 0x18, 0xb4, 0x76, 0xa2, 0x33, 0xed, 0x6c, 0x1a, 0xfe, 0x3c, 0xb3, 0xee, 0xca, 0x3b, 0xc8, 0xb3, 0xad, 0x3d, 0x08, 0x65, 0x82, 0x3c, 0xcf, 0xfd, 0x30, 0x13, 0xe2, 0x41, 0x30, 0xed, 0x0a, 0xe0, 0x49, 0xfe, 0x02, 0xbe, 0x9e, 0x71, 0x93, 0x8d, 0xeb, 0xa1, 0xfe, 0x9d, 0x0c, 0x8b, 0x9a, 0xf5, 0xbf, 0x84, 0xbe, 0xa2, 0xaa, 0x27, 0xe1, 0x4f, 0xa0, 0x92, 0x00, 0x16, 0x20, 0xd2, 0x41, 0x96, 0x1e, 0x9b, 0xd5, 0x46, 0x06, 0x3c, 0x22, 0x08, 0xff, 0xd3, 0x22, 0x02, 0x6d, 0xbd, 0x06, 0xa9, 0xb9, 0x51, 0x20, 0x1e, 0x54, 0xce, 0xff, 0xbe, 0xf9, 0x91, 0xdc, 0xf5, 0x33, 0x8c, 0x35, 0x52, 0x20, 0xf3, 0xb7, 0xe1 }; static const uint8_t nist_186_2_ecdsa_testvector_85_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0xc8, 0x7d, 0x11, 0xdf, 0x7c, 0x27, 0xdd, 0x15, 0x99, 0x03, 0x5c, 0x33, 0xa5, 0x48, 0x7f, 0xaf, 0x21 }; static const uint8_t nist_186_2_ecdsa_testvector_85_public_x[] = { /* Qx - byte alignment */ 0x01, 0xa7, 0xd1, 0xab, 0xee, 0x8f, 0x7f, 0x94, 0x12, 0x83, 0x8f, 0xcb, 0x46, 0x86, 0xf2, 0x46, 0xd8, 0x2b, 0x71, 0xf9, 0x7a }; static const uint8_t nist_186_2_ecdsa_testvector_85_public_y[] = { /* Qy - byte alignment */ 0x00, 0xfe, 0xf6, 0x98, 0x42, 0xfb, 0xde, 0x66, 0x1e, 0xee, 0x35, 0xfb, 0xde, 0x66, 0xf2, 0x69, 0x31, 0xc5, 0x61, 0x54, 0x06 }; /* k = 0000002e991f95b13753b6c9ffb941d4553681bce */ static const uint8_t nist_186_2_ecdsa_testvector_85_out[] = { /* R - byte alignment */ 0x03, 0x8e, 0x87, 0x1a, 0x80, 0xd0, 0x4d, 0x37, 0x53, 0xaf, 0xee, 0x22, 0xd4, 0x0e, 0xda, 0xee, 0xa8, 0x55, 0x51, 0xdf, 0x74, /* S - byte alignment */ 0x03, 0xe2, 0xa9, 0xd7, 0x5c, 0xc3, 0xd7, 0x98, 0x92, 0x89, 0x88, 0xe3, 0x98, 0x52, 0x59, 0xef, 0x4b, 0x69, 0x6c, 0x91, 0x83 }; static const uint8_t nist_186_2_ecdsa_testvector_86_ptx[] = { /* Msg */ 0xee, 0xe8, 0x3f, 0x9a, 0xd3, 0xf8, 0x0c, 0x73, 0xc6, 0xe3, 0x3e, 0x4c, 0x34, 0xf5, 0x38, 0x08, 0x41, 0x4d, 0xf4, 0xca, 0x54, 0x48, 0xa6, 0x0a, 0xd5, 0x3d, 0x9c, 0xe9, 0x35, 0x6b, 0x69, 0xc1, 0x2f, 0x2f, 0x42, 0x01, 0x4e, 0x7b, 0xa8, 0x38, 0xb0, 0x83, 0x48, 0x6f, 0x09, 0xb9, 0x1f, 0xbc, 0xea, 0xfc, 0xe1, 0x14, 0x44, 0x0c, 0x9c, 0x61, 0x28, 0x42, 0x98, 0xd4, 0xd0, 0x7e, 0x83, 0x7d, 0xe3, 0x60, 0xca, 0x19, 0xf5, 0xbb, 0x4a, 0x2b, 0x4d, 0x46, 0x28, 0x4e, 0xec, 0x95, 0xfd, 0xc9, 0xcb, 0x48, 0x37, 0x64, 0x63, 0x83, 0xbc, 0x7a, 0x72, 0x9e, 0xd0, 0x50, 0xfd, 0x1d, 0x38, 0xa5, 0x91, 0xe2, 0x9f, 0x8a, 0xcf, 0xa1, 0x3a, 0x74, 0x28, 0x95, 0xa8, 0x90, 0xe4, 0x71, 0x1c, 0x56, 0x69, 0x9a, 0xbd, 0x61, 0xba, 0x93, 0x4d, 0x7e, 0x3e, 0xb8, 0x09, 0x03, 0xc3, 0x30, 0xd1, 0x62 }; static const uint8_t nist_186_2_ecdsa_testvector_86_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x02, 0x17, 0x95, 0xe5, 0x62, 0xec, 0x44, 0xfa, 0xbf, 0x86, 0xa7, 0x75, 0xa5, 0x8c, 0xb6, 0x15, 0x8a, 0x4c }; static const uint8_t nist_186_2_ecdsa_testvector_86_public_x[] = { /* Qx - byte alignment */ 0x07, 0x45, 0x73, 0x40, 0xc9, 0xec, 0xa2, 0x80, 0xbf, 0x33, 0xd2, 0x97, 0xa4, 0x65, 0xd4, 0x00, 0xe3, 0x14, 0x18, 0xba, 0xf7 }; static const uint8_t nist_186_2_ecdsa_testvector_86_public_y[] = { /* Qy - byte alignment */ 0x06, 0xf3, 0x35, 0xb0, 0x7b, 0x49, 0x02, 0x1b, 0xe5, 0x6f, 0x0e, 0x7b, 0x32, 0x0f, 0x0b, 0x2f, 0xe5, 0x7a, 0x92, 0x36, 0xf2 }; /* k = 00000016d19275205c1d866392ff232ddc4e0e41d */ static const uint8_t nist_186_2_ecdsa_testvector_86_out[] = { /* R - byte alignment */ 0x00, 0xe8, 0xf2, 0x08, 0xd7, 0x40, 0x8d, 0x23, 0x1b, 0xc0, 0xa0, 0xf8, 0x85, 0xfc, 0x50, 0xc9, 0xd0, 0x98, 0xf3, 0xe6, 0x9d, /* S - byte alignment */ 0x03, 0xd7, 0x20, 0xaa, 0xff, 0x03, 0x43, 0xd0, 0xd7, 0xff, 0x93, 0xc1, 0xff, 0xf9, 0x0e, 0x83, 0xfc, 0x18, 0xc0, 0x7c, 0xcb }; static const uint8_t nist_186_2_ecdsa_testvector_87_ptx[] = { /* Msg */ 0x3d, 0x0c, 0x9a, 0x35, 0x03, 0x6a, 0xae, 0xaa, 0xd2, 0xb2, 0xf7, 0xac, 0x72, 0x1e, 0x15, 0x6c, 0x24, 0x76, 0xfe, 0x17, 0x2a, 0x87, 0xa1, 0xf3, 0x8a, 0xd0, 0xca, 0xaa, 0x10, 0x7e, 0x46, 0xe6, 0x92, 0x9b, 0x47, 0x1d, 0x77, 0x82, 0x0a, 0xaf, 0x7a, 0x96, 0xb6, 0x2e, 0xac, 0x33, 0x88, 0xfc, 0xb8, 0xe5, 0x2d, 0x1c, 0x6b, 0xd8, 0x6f, 0x42, 0x74, 0x90, 0x14, 0x2c, 0x68, 0xda, 0x03, 0x35, 0x09, 0x03, 0xa9, 0x28, 0xc7, 0x47, 0x9b, 0x52, 0x87, 0x8c, 0x7d, 0xdb, 0xa4, 0x51, 0x22, 0x56, 0x33, 0xe1, 0xf4, 0x96, 0x8c, 0xcc, 0x97, 0xc3, 0x06, 0x97, 0xc9, 0xae, 0x01, 0xb3, 0x8d, 0x62, 0x2a, 0xac, 0x88, 0xfc, 0xfa, 0xa3, 0xab, 0xbc, 0x80, 0xfe, 0x12, 0x5b, 0x61, 0x5e, 0x2c, 0x9f, 0x1d, 0xd1, 0x1d, 0x2e, 0x93, 0x4a, 0x60, 0xa0, 0xc8, 0x4e, 0xb1, 0xd7, 0xe4, 0xef, 0x2a, 0x93 }; static const uint8_t nist_186_2_ecdsa_testvector_87_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0x10, 0xb1, 0x81, 0xa9, 0x71, 0xc6, 0x5b, 0x40, 0x46, 0xb8, 0x9a, 0x12, 0x76, 0xe1, 0x48, 0x09, 0x47 }; static const uint8_t nist_186_2_ecdsa_testvector_87_public_x[] = { /* Qx - byte alignment */ 0x04, 0xce, 0x4a, 0xd1, 0x99, 0x09, 0x31, 0xf9, 0x41, 0xf3, 0x38, 0xa9, 0xd9, 0x6a, 0xf9, 0x57, 0x1a, 0x1d, 0xb9, 0x44, 0xc7 }; static const uint8_t nist_186_2_ecdsa_testvector_87_public_y[] = { /* Qy - byte alignment */ 0x03, 0xc5, 0x15, 0x88, 0x97, 0xa7, 0xd9, 0x6c, 0x06, 0x56, 0x50, 0xed, 0x31, 0x41, 0x6f, 0x30, 0x0f, 0xf4, 0x5d, 0xf8, 0x08 }; /* k = 00000010a625837343a44a7d8701636b82a8a950c */ static const uint8_t nist_186_2_ecdsa_testvector_87_out[] = { /* R - byte alignment */ 0x02, 0xcd, 0xb0, 0x81, 0x1a, 0xc0, 0x4a, 0x55, 0xe2, 0x0d, 0x60, 0x67, 0x7f, 0xda, 0x53, 0x98, 0x2e, 0xa2, 0x40, 0x71, 0x89, /* S - byte alignment */ 0x03, 0x67, 0xe4, 0x48, 0x88, 0xd8, 0x29, 0x50, 0xa2, 0x08, 0x14, 0x99, 0x39, 0xc6, 0xae, 0x73, 0x26, 0x7c, 0x9d, 0x16, 0xc5 }; static const uint8_t nist_186_2_ecdsa_testvector_88_ptx[] = { /* Msg */ 0x14, 0xd1, 0xfb, 0x46, 0x3a, 0x53, 0xde, 0xad, 0x1c, 0xaa, 0x23, 0x3c, 0x94, 0x18, 0x9a, 0xd8, 0x00, 0x50, 0xb6, 0x74, 0x99, 0x7e, 0x86, 0x35, 0x00, 0x88, 0xe7, 0xd4, 0x1a, 0x93, 0xf9, 0x45, 0x1e, 0xca, 0xcf, 0x96, 0xec, 0x5a, 0x6b, 0x19, 0xa1, 0xc1, 0xe9, 0xc5, 0x68, 0x49, 0xfa, 0xda, 0x93, 0xcf, 0x94, 0xc4, 0xea, 0xc9, 0xe8, 0x42, 0x42, 0x88, 0x95, 0xc7, 0x52, 0xba, 0x1b, 0x21, 0xc3, 0x32, 0x92, 0x58, 0x86, 0xec, 0x9c, 0xd9, 0x6a, 0x4b, 0x98, 0xd3, 0xee, 0xa6, 0x18, 0xe2, 0x53, 0x03, 0x95, 0xeb, 0xf6, 0x22, 0x62, 0x47, 0xdd, 0xbe, 0xdf, 0x23, 0x90, 0x0f, 0xef, 0x26, 0x2a, 0x93, 0xac, 0x55, 0xaf, 0x0e, 0x59, 0x34, 0xa0, 0xd0, 0x97, 0x2e, 0xcd, 0x36, 0xdc, 0x37, 0x6b, 0x73, 0x22, 0xb0, 0x66, 0x90, 0xdc, 0x8b, 0xf9, 0xb2, 0x2e, 0xaf, 0x7b, 0x9c, 0x5d, 0x9e }; static const uint8_t nist_186_2_ecdsa_testvector_88_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x5b, 0xbc, 0xe8, 0xf1, 0xf0, 0xd1, 0xad, 0xb7, 0xbd, 0xf2, 0xf5, 0xdd, 0xa8, 0x2f, 0xa4, 0xc6, 0xba }; static const uint8_t nist_186_2_ecdsa_testvector_88_public_x[] = { /* Qx - byte alignment */ 0x00, 0xfa, 0xb0, 0x00, 0x0b, 0xb5, 0xd8, 0x16, 0x3e, 0xdf, 0x17, 0xb9, 0x6c, 0xd5, 0xb7, 0x77, 0x26, 0x1d, 0xf0, 0xfe, 0x12 }; static const uint8_t nist_186_2_ecdsa_testvector_88_public_y[] = { /* Qy - byte alignment */ 0x05, 0x2a, 0xc5, 0xec, 0x94, 0xf8, 0x87, 0x3a, 0x7b, 0x60, 0xff, 0x2e, 0x71, 0xfc, 0x17, 0x22, 0x3e, 0xfb, 0xb4, 0x6e, 0x38 }; /* k = 000000067b782d169e842d0077bde068705aee8e7 */ static const uint8_t nist_186_2_ecdsa_testvector_88_out[] = { /* R - byte alignment */ 0x03, 0x1f, 0x6c, 0x99, 0x6e, 0xc0, 0xd1, 0x61, 0x05, 0xff, 0x1a, 0xc7, 0x5e, 0xda, 0x35, 0xf1, 0x5e, 0x14, 0x29, 0x25, 0xda, /* S - byte alignment */ 0x01, 0xe2, 0x3e, 0xef, 0x66, 0xc3, 0x12, 0x6a, 0x36, 0xee, 0x19, 0xa9, 0x04, 0x80, 0x95, 0xf9, 0x61, 0x38, 0x57, 0x08, 0x23 }; static const uint8_t nist_186_2_ecdsa_testvector_89_ptx[] = { /* Msg */ 0x1e, 0xf7, 0x9e, 0x82, 0xfd, 0x0c, 0x8d, 0x6e, 0x52, 0xfd, 0x25, 0xa5, 0xec, 0xb3, 0xbb, 0xfd, 0xd9, 0x51, 0xf6, 0x4e, 0x1e, 0x16, 0x26, 0x79, 0xab, 0x86, 0xd7, 0xa9, 0x8d, 0xc4, 0xa7, 0xd9, 0x66, 0x43, 0x54, 0x97, 0x1a, 0x9d, 0x19, 0x07, 0xcc, 0xc3, 0x3b, 0x2a, 0x09, 0x57, 0xdf, 0x60, 0x42, 0x56, 0x1e, 0x2c, 0x80, 0xfa, 0x5b, 0x38, 0x53, 0xdf, 0xd4, 0x99, 0x0b, 0x64, 0x78, 0x53, 0x2b, 0x54, 0xf9, 0x20, 0x1b, 0xc6, 0x21, 0x6d, 0x1d, 0x41, 0x69, 0xa6, 0x82, 0x24, 0xc8, 0xb3, 0x1e, 0x45, 0xc9, 0xc3, 0xf9, 0xd9, 0xe0, 0x48, 0x47, 0x94, 0xfe, 0x42, 0x9b, 0x11, 0x63, 0xc1, 0x57, 0x73, 0xb4, 0xa5, 0x67, 0x4d, 0x4d, 0xa9, 0x2f, 0xbf, 0xd8, 0xa0, 0xc1, 0xe2, 0x1e, 0xfe, 0x54, 0x66, 0x1e, 0x99, 0xf2, 0x7a, 0x5c, 0xb1, 0x70, 0xec, 0x7c, 0x2e, 0xa3, 0x92, 0x0f, 0x2a }; static const uint8_t nist_186_2_ecdsa_testvector_89_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x02, 0x34, 0xe1, 0xb3, 0x04, 0x6e, 0xd2, 0x9e, 0xcc, 0xa9, 0x2e, 0x31, 0xd8, 0x6a, 0x0d, 0xc2, 0x2b, 0xc6 }; static const uint8_t nist_186_2_ecdsa_testvector_89_public_x[] = { /* Qx - byte alignment */ 0x03, 0x0b, 0x3e, 0x2f, 0xae, 0x4d, 0xdc, 0x9b, 0xde, 0x52, 0x58, 0x68, 0x95, 0x24, 0x54, 0xd5, 0x93, 0x42, 0x32, 0x70, 0x79 }; static const uint8_t nist_186_2_ecdsa_testvector_89_public_y[] = { /* Qy - byte alignment */ 0x06, 0x9c, 0xa8, 0x67, 0xd2, 0xd7, 0x9c, 0xd3, 0xa2, 0x32, 0x12, 0x84, 0x4d, 0x76, 0xb5, 0x0d, 0xbf, 0x9b, 0x47, 0x48, 0xcd }; /* k = 0000000261db3bb5df417062578d6699ac24bf28a */ static const uint8_t nist_186_2_ecdsa_testvector_89_out[] = { /* R - byte alignment */ 0x00, 0x49, 0x67, 0xf9, 0xca, 0xe7, 0x4a, 0xcf, 0x37, 0x26, 0xa2, 0x41, 0xe5, 0x3c, 0xf7, 0x68, 0x1f, 0x7d, 0xc7, 0x2e, 0x2f, /* S - byte alignment */ 0x03, 0x52, 0x45, 0x77, 0x7c, 0x0e, 0x01, 0xf3, 0x0c, 0x61, 0x31, 0x20, 0x73, 0x77, 0xbb, 0xae, 0x3c, 0xf8, 0x81, 0x0f, 0xea }; static const uint8_t nist_186_2_ecdsa_testvector_90_ptx[] = { /* Msg */ 0xd5, 0xdd, 0x3b, 0x6c, 0xe9, 0x77, 0x2d, 0x9a, 0x97, 0xfe, 0x21, 0x64, 0x84, 0x97, 0x78, 0x3b, 0xac, 0x5b, 0xb5, 0x25, 0x4a, 0xad, 0x82, 0xb6, 0xf7, 0xcb, 0xf4, 0x3b, 0x15, 0xa4, 0x0f, 0x38, 0x6e, 0xea, 0x8d, 0x15, 0x19, 0x67, 0xdb, 0x14, 0x9e, 0x94, 0x65, 0x86, 0x59, 0x68, 0x13, 0x3f, 0x24, 0x6e, 0x13, 0x47, 0x30, 0x1a, 0xda, 0xd2, 0x34, 0x5d, 0x65, 0x72, 0xca, 0x77, 0xc5, 0x8c, 0x15, 0x0d, 0xda, 0x09, 0xa8, 0x7b, 0x5f, 0x4d, 0xa3, 0x6b, 0x26, 0x6d, 0x1f, 0xa7, 0xa5, 0x9c, 0xcd, 0x2b, 0xb2, 0xe7, 0xd9, 0x7f, 0x8b, 0x23, 0x15, 0x43, 0x19, 0x23, 0x53, 0x0b, 0x76, 0x2e, 0x12, 0x6e, 0xac, 0xaf, 0x5e, 0x5a, 0xc0, 0x2f, 0xf1, 0xaa, 0xef, 0x81, 0x9e, 0xfb, 0x37, 0x3c, 0xf0, 0xbb, 0x19, 0x6f, 0x0e, 0x82, 0x9e, 0x8f, 0xe1, 0xa6, 0x98, 0xb4, 0x79, 0x0a, 0x2a, 0x05 }; static const uint8_t nist_186_2_ecdsa_testvector_90_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0xf0, 0x76, 0x90, 0x78, 0x0b, 0xd7, 0x56, 0x01, 0x56, 0x5b, 0x3c, 0x4c, 0xc9, 0x67, 0x15, 0x9f, 0x0e }; static const uint8_t nist_186_2_ecdsa_testvector_90_public_x[] = { /* Qx - byte alignment */ 0x00, 0x85, 0xdb, 0x6d, 0x13, 0x12, 0xda, 0xb2, 0xfd, 0x00, 0xc8, 0x01, 0x62, 0xbe, 0xd1, 0x79, 0x10, 0x7a, 0x4b, 0x7c, 0xf3 }; static const uint8_t nist_186_2_ecdsa_testvector_90_public_y[] = { /* Qy - byte alignment */ 0x05, 0x80, 0x07, 0xc8, 0x61, 0x93, 0xb2, 0x22, 0x98, 0x77, 0xf2, 0x9b, 0xce, 0x5b, 0xea, 0xc1, 0xe5, 0x47, 0xee, 0xf2, 0xd2 }; /* k = 000000113523759c8e2b89b3fb82f490a2f9a413f */ static const uint8_t nist_186_2_ecdsa_testvector_90_out[] = { /* R - byte alignment */ 0x00, 0xe8, 0xe4, 0x2b, 0x4a, 0x02, 0xba, 0x46, 0xb5, 0x85, 0x24, 0xce, 0x93, 0x3f, 0xad, 0x94, 0x47, 0xd8, 0x7f, 0x01, 0x77, /* S - byte alignment */ 0x03, 0x4e, 0x41, 0xac, 0x5e, 0x05, 0xc0, 0x76, 0x30, 0x34, 0x91, 0x2f, 0xd8, 0x6e, 0xb4, 0x6e, 0x2d, 0xbe, 0xbc, 0x2f, 0x4f }; /* [K-233] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_91_ptx[] = { /* Msg */ 0xf7, 0x64, 0xf4, 0x2d, 0x70, 0xcf, 0x6e, 0xce, 0xa6, 0x26, 0xc3, 0x06, 0x9a, 0xb0, 0x27, 0x07, 0x4b, 0xca, 0x9e, 0x9c, 0xe1, 0x41, 0xc7, 0xb3, 0x2b, 0x00, 0xf8, 0x18, 0x4b, 0xeb, 0x90, 0x83, 0xb0, 0x0a, 0x89, 0xd5, 0x45, 0xea, 0x4d, 0x9f, 0xe8, 0x40, 0xcb, 0xe4, 0x1e, 0xd0, 0xc9, 0x20, 0x05, 0x8d, 0x7c, 0x88, 0x8a, 0x02, 0x56, 0x94, 0xdb, 0xf0, 0x1f, 0xbb, 0x20, 0x39, 0x47, 0x7d, 0x66, 0xfc, 0x7b, 0xa7, 0xdb, 0x02, 0x76, 0xd3, 0x41, 0x59, 0x1a, 0x2e, 0x9d, 0x3e, 0xbf, 0x7e, 0x2f, 0x41, 0xcb, 0x63, 0xa7, 0xa3, 0x82, 0xdc, 0x96, 0x03, 0x20, 0x0e, 0x23, 0x39, 0x25, 0x41, 0xff, 0x83, 0xf1, 0x2c, 0x9b, 0xdf, 0x90, 0x72, 0x98, 0xb7, 0xd7, 0x6c, 0x7f, 0xc3, 0xb0, 0x29, 0xb2, 0x2c, 0xb2, 0xb3, 0xa2, 0xed, 0xf5, 0x94, 0x43, 0x7f, 0x24, 0x99, 0xbd, 0xb5, 0xd3, 0xd6 }; static const uint8_t nist_186_2_ecdsa_testvector_91_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x4f, 0xaa, 0xe1, 0x14, 0x0e, 0x1f, 0x42, 0x79, 0xe1, 0x89, 0x21, 0xc9, 0x41, 0x03, 0x79, 0xfc, 0xe7, 0x16, 0x92, 0xe5, 0x67, 0x83, 0x41, 0x90, 0x9c, 0xac }; static const uint8_t nist_186_2_ecdsa_testvector_91_public_x[] = { /* Qx - byte alignment */ 0x00, 0xc6, 0x36, 0x4b, 0x59, 0x33, 0xbe, 0xcd, 0x86, 0x78, 0xda, 0xa7, 0x9d, 0xc8, 0xd7, 0x92, 0x73, 0x2e, 0x2f, 0xa7, 0xfa, 0x74, 0xf3, 0xb7, 0x21, 0x78, 0x71, 0xfb, 0xe5, 0xc7 }; static const uint8_t nist_186_2_ecdsa_testvector_91_public_y[] = { /* Qy - byte alignment */ 0x00, 0x79, 0x76, 0x4b, 0xdd, 0x86, 0x02, 0xe4, 0x5c, 0x4e, 0x26, 0x68, 0x9d, 0x0c, 0x39, 0x8c, 0x48, 0x94, 0x66, 0x7c, 0xd6, 0x7f, 0x18, 0x63, 0x4d, 0x8d, 0xcc, 0x93, 0x20, 0xe8 }; /* k = 00000000e6acf6a5eefdab8b6ad75e200b0a055bffd9293f73ca13d6d41 */ static const uint8_t nist_186_2_ecdsa_testvector_91_out[] = { /* R - byte alignment */ 0x00, 0x7b, 0x9d, 0x20, 0x1e, 0x5c, 0xf2, 0xb3, 0x80, 0x66, 0xba, 0xca, 0x3b, 0xbb, 0xa5, 0x5c, 0xb1, 0x64, 0x2d, 0xb5, 0x8e, 0xdf, 0xca, 0xbe, 0xef, 0xdb, 0x36, 0x60, 0x5f, 0x0d, /* S - byte alignment */ 0x00, 0x0d, 0x96, 0x6c, 0xf5, 0xed, 0x16, 0x09, 0x11, 0x36, 0x03, 0x1f, 0xf0, 0xcb, 0x5b, 0x83, 0x04, 0xf5, 0x1a, 0x46, 0xaa, 0xcd, 0x0c, 0xa7, 0x0e, 0xdf, 0xb8, 0xdd, 0x9e, 0x94 }; static const uint8_t nist_186_2_ecdsa_testvector_92_ptx[] = { /* Msg */ 0x4f, 0x01, 0x17, 0x01, 0xb0, 0x91, 0x94, 0x4a, 0xd9, 0x43, 0x33, 0x90, 0xdf, 0xef, 0x3b, 0x8f, 0xdb, 0x52, 0x47, 0x08, 0xd8, 0x62, 0x47, 0xb9, 0xef, 0xdf, 0xc9, 0x8c, 0xb0, 0x2b, 0x77, 0x0f, 0xc4, 0x5b, 0xe0, 0x24, 0xd1, 0x8e, 0x7b, 0xfa, 0x9e, 0x7d, 0xe8, 0x3b, 0x78, 0x54, 0x7a, 0x87, 0xd4, 0xc1, 0xf3, 0x22, 0x35, 0x4a, 0x8e, 0xe9, 0x50, 0xe3, 0x43, 0x8b, 0x6e, 0xc0, 0x46, 0xf5, 0x13, 0x68, 0xd1, 0x0e, 0xdd, 0x0b, 0x23, 0xa5, 0xae, 0x15, 0xc9, 0xa7, 0x0e, 0x03, 0x1c, 0x96, 0xca, 0x75, 0x0b, 0x36, 0xe1, 0x85, 0x1a, 0x8a, 0xa1, 0x58, 0xab, 0xfe, 0x0e, 0xf2, 0x7c, 0xe6, 0x83, 0x4f, 0x72, 0x27, 0x9c, 0xaf, 0x95, 0x34, 0x52, 0x31, 0x5b, 0x3d, 0x68, 0xa3, 0x29, 0xa3, 0x07, 0x99, 0x17, 0xae, 0xa5, 0xbc, 0xf4, 0x82, 0x2b, 0x65, 0x8a, 0x4f, 0x56, 0x6b, 0x22, 0xc9 }; static const uint8_t nist_186_2_ecdsa_testvector_92_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x1a, 0x65, 0x57, 0x96, 0xb6, 0x89, 0x6b, 0x4a, 0xd8, 0xf1, 0xf9, 0xfb, 0x7c, 0x8d, 0xeb, 0x2f, 0xc5, 0xa1, 0x2e, 0x35, 0x0c, 0xd2, 0x62, 0xda, 0xa0, 0xd7 }; static const uint8_t nist_186_2_ecdsa_testvector_92_public_x[] = { /* Qx - byte alignment */ 0x00, 0x4b, 0xc5, 0x01, 0x44, 0x1d, 0xdf, 0x32, 0x30, 0x88, 0x78, 0x65, 0xc9, 0x74, 0x95, 0x41, 0xc7, 0x31, 0x67, 0x53, 0x08, 0x15, 0x58, 0xe5, 0xdf, 0x20, 0xca, 0xdd, 0x5d, 0x96 }; static const uint8_t nist_186_2_ecdsa_testvector_92_public_y[] = { /* Qy - byte alignment */ 0x01, 0x7f, 0x90, 0x8f, 0x1b, 0x85, 0xcf, 0x0a, 0xf2, 0xfd, 0xb6, 0x50, 0xba, 0x58, 0xbb, 0x1d, 0x1a, 0x50, 0xa5, 0x38, 0xf4, 0x22, 0x64, 0x45, 0xaa, 0xab, 0x67, 0x74, 0x16, 0x7b }; /* k = 00000001575c1e51145323e428693bdda6c974e997622cf9193aafde2b6 */ static const uint8_t nist_186_2_ecdsa_testvector_92_out[] = { /* R - byte alignment */ 0x00, 0x0b, 0xfd, 0xa7, 0x98, 0x6f, 0xdf, 0xe8, 0x51, 0xec, 0x65, 0x0e, 0x57, 0x57, 0xa7, 0x0c, 0x1b, 0xbf, 0xe9, 0xa4, 0x17, 0xdc, 0xa4, 0x4e, 0xa1, 0xa9, 0x30, 0xb1, 0x5d, 0x63, /* S - byte alignment */ 0x00, 0x1b, 0xb9, 0x20, 0x16, 0xc9, 0xad, 0xb8, 0x6a, 0x94, 0x02, 0x0a, 0x79, 0xfa, 0xf0, 0x41, 0xa5, 0xe5, 0xbe, 0xb1, 0x7d, 0x95, 0x05, 0x8b, 0xe6, 0x46, 0x31, 0xd4, 0x77, 0x4f }; static const uint8_t nist_186_2_ecdsa_testvector_93_ptx[] = { /* Msg */ 0x93, 0x8b, 0x1f, 0x1d, 0x62, 0x88, 0x29, 0x39, 0x9e, 0x62, 0x2d, 0xb6, 0xd1, 0x0d, 0xa1, 0x3f, 0xc8, 0xb1, 0x59, 0x68, 0x97, 0xa3, 0xaa, 0x42, 0xdd, 0x93, 0xd0, 0x2e, 0x49, 0x07, 0x8d, 0xee, 0x5d, 0x08, 0x13, 0x02, 0x72, 0x1a, 0x24, 0x31, 0xfd, 0x72, 0x78, 0x66, 0x10, 0x64, 0x5f, 0xbd, 0x24, 0x1b, 0xa7, 0xde, 0x15, 0x8c, 0xc0, 0x8a, 0x6e, 0xac, 0x1e, 0x73, 0xe7, 0xe1, 0xdf, 0x51, 0x2c, 0xb7, 0xae, 0x32, 0xe0, 0xd5, 0xe7, 0x11, 0xe2, 0x2f, 0xfb, 0xab, 0xcf, 0x7d, 0x17, 0x8e, 0xc8, 0xeb, 0x00, 0x73, 0x75, 0x12, 0x42, 0xcd, 0x49, 0x27, 0x89, 0xa2, 0x08, 0x72, 0x4f, 0x9a, 0x87, 0x02, 0xb7, 0x56, 0xb4, 0xa0, 0xb9, 0x02, 0xd5, 0x01, 0x80, 0x2e, 0x15, 0x40, 0x10, 0xd9, 0x3c, 0x8b, 0x2c, 0xcf, 0xbe, 0x1c, 0x77, 0x36, 0xf7, 0x6a, 0xd9, 0x63, 0xb5, 0xa1, 0x24, 0xf2 }; static const uint8_t nist_186_2_ecdsa_testvector_93_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x9b, 0x4f, 0xa1, 0x7e, 0x60, 0xdf, 0x6d, 0x11, 0xd4, 0x36, 0xed, 0xae, 0x33, 0x4d, 0xd5, 0xc3, 0xf3, 0x04, 0xb9, 0xa9, 0xf4, 0x1a, 0x4d, 0xfe, 0x01 }; static const uint8_t nist_186_2_ecdsa_testvector_93_public_x[] = { /* Qx - byte alignment */ 0x00, 0xc7, 0x5a, 0x98, 0xf2, 0xd8, 0x55, 0x17, 0x5b, 0x60, 0xc4, 0xc8, 0xc6, 0xc3, 0xf7, 0x06, 0x2a, 0x6d, 0x2b, 0x42, 0x56, 0x52, 0xdf, 0x1b, 0xb2, 0xd6, 0x42, 0x8e, 0x6b, 0x47 }; static const uint8_t nist_186_2_ecdsa_testvector_93_public_y[] = { /* Qy - byte alignment */ 0x00, 0xbe, 0xe7, 0xf3, 0x0a, 0x60, 0xed, 0x09, 0xba, 0xf3, 0xe2, 0x6d, 0x30, 0x04, 0x54, 0x62, 0x4f, 0x88, 0x63, 0x41, 0x2a, 0x51, 0x1d, 0x2a, 0x29, 0x2f, 0xd3, 0x2b, 0xed, 0x6b }; /* k = 0000000296f1a8b7941f2cfb3fc9a02eadb92e3ca70f3ee32b5f0715a2a */ static const uint8_t nist_186_2_ecdsa_testvector_93_out[] = { /* R - byte alignment */ 0x00, 0x49, 0xb5, 0x8c, 0x83, 0x38, 0xf8, 0x71, 0x08, 0x94, 0x63, 0x4a, 0xd4, 0xcd, 0xae, 0x92, 0xa2, 0x59, 0x16, 0x47, 0xe3, 0xa6, 0xd6, 0xb4, 0xa2, 0xb0, 0x4f, 0x29, 0x24, 0xee, /* S - byte alignment */ 0x00, 0x5d, 0x2f, 0xb9, 0x19, 0x7e, 0x25, 0xad, 0xc6, 0x01, 0x93, 0xce, 0x94, 0x01, 0x06, 0x5c, 0xd1, 0xb1, 0x1a, 0x41, 0x29, 0x47, 0x04, 0x96, 0x31, 0x92, 0xf5, 0x23, 0xff, 0xf5 }; static const uint8_t nist_186_2_ecdsa_testvector_94_ptx[] = { /* Msg */ 0x44, 0x32, 0x87, 0x17, 0xed, 0x47, 0x56, 0xc5, 0xd2, 0x14, 0xbf, 0x59, 0xee, 0x71, 0xcd, 0xfb, 0xde, 0x60, 0x0e, 0x58, 0xaa, 0x8f, 0xff, 0x46, 0xe3, 0x25, 0xc4, 0xa6, 0xee, 0xbb, 0x1c, 0x8f, 0x9f, 0xa7, 0x95, 0xa9, 0x0a, 0x81, 0xfc, 0xd6, 0x95, 0xe0, 0x18, 0x18, 0x52, 0x65, 0x98, 0xaf, 0x8c, 0xfb, 0x49, 0x81, 0xa0, 0x5c, 0x8c, 0xbf, 0x0e, 0xd8, 0x08, 0xc6, 0xd0, 0x52, 0x9c, 0x43, 0xeb, 0x8b, 0x97, 0x9b, 0x43, 0xa3, 0x2c, 0x8a, 0xb3, 0xdc, 0x20, 0x0a, 0x5d, 0xa2, 0xc6, 0x76, 0x3f, 0xc8, 0x2d, 0xef, 0x08, 0x15, 0x98, 0xff, 0x29, 0xff, 0x2e, 0x7c, 0x2e, 0xb6, 0xf3, 0xaf, 0x4f, 0x64, 0xf7, 0xb6, 0x42, 0xb3, 0xce, 0x27, 0x54, 0x91, 0x3f, 0xf6, 0xb8, 0x30, 0x40, 0x99, 0x1f, 0x50, 0x23, 0x69, 0x89, 0xc0, 0x0a, 0x4c, 0x5a, 0x22, 0xa0, 0x91, 0xb0, 0xf0, 0x0b, 0x1b }; static const uint8_t nist_186_2_ecdsa_testvector_94_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x53, 0xf2, 0x25, 0x5c, 0xfe, 0xd5, 0x6f, 0x12, 0x79, 0xc9, 0xec, 0xc2, 0x3c, 0xce, 0xe7, 0x25, 0x65, 0x0d, 0x72, 0x76, 0x99, 0x34, 0x49, 0x3e, 0x9a, 0x00 }; static const uint8_t nist_186_2_ecdsa_testvector_94_public_x[] = { /* Qx - byte alignment */ 0x01, 0x7d, 0xc7, 0x4b, 0x9d, 0x26, 0xa4, 0xce, 0x66, 0x66, 0x24, 0x1e, 0xfd, 0xaf, 0x16, 0x9c, 0xec, 0x9b, 0x82, 0x4a, 0xf6, 0xe7, 0x06, 0xd6, 0x56, 0x93, 0x04, 0x94, 0x5a, 0x02 }; static const uint8_t nist_186_2_ecdsa_testvector_94_public_y[] = { /* Qy - byte alignment */ 0x01, 0x09, 0x97, 0x4b, 0x20, 0xb3, 0xb4, 0x33, 0x23, 0x7f, 0xc2, 0xd8, 0x01, 0x84, 0x84, 0xc2, 0x18, 0xa7, 0xbe, 0x9b, 0x94, 0xa3, 0x21, 0x60, 0xd4, 0xc2, 0xa1, 0x5f, 0xdb, 0x4c }; /* k = 00000001c438cc6db3c3c47925f1ea6c1807a84a1f54acac4609bf1af5b */ static const uint8_t nist_186_2_ecdsa_testvector_94_out[] = { /* R - byte alignment */ 0x00, 0x66, 0x6c, 0xf8, 0xed, 0x39, 0x59, 0x68, 0xf5, 0xfd, 0x1b, 0xe2, 0x56, 0xc3, 0xc9, 0xf5, 0xe2, 0x23, 0x18, 0x40, 0x03, 0xc4, 0x77, 0xa5, 0x20, 0xa6, 0xe3, 0x37, 0x26, 0x94, /* S - byte alignment */ 0x00, 0x4d, 0xca, 0xcd, 0xee, 0x85, 0x9f, 0xce, 0x43, 0x06, 0xe7, 0xa6, 0x8b, 0x89, 0x2c, 0xb6, 0x0c, 0x36, 0x12, 0x28, 0xfd, 0x5d, 0x3d, 0x91, 0x6e, 0xc0, 0xad, 0xb4, 0x8a, 0xa7 }; static const uint8_t nist_186_2_ecdsa_testvector_95_ptx[] = { /* Msg */ 0xca, 0x70, 0x40, 0xfd, 0xec, 0x98, 0x5b, 0x31, 0xff, 0x8e, 0x28, 0xf7, 0x64, 0x82, 0x2b, 0x95, 0xd4, 0x93, 0x13, 0xce, 0x99, 0x36, 0x8f, 0x63, 0xfe, 0xdc, 0x63, 0xd9, 0x04, 0xcf, 0xbb, 0x7d, 0x56, 0x5d, 0xbf, 0xa6, 0x7f, 0x39, 0x67, 0x3a, 0x5b, 0x1e, 0x91, 0x73, 0xcb, 0xb5, 0x51, 0xe3, 0xad, 0xb9, 0x88, 0xb6, 0x0c, 0x59, 0xb8, 0x38, 0x93, 0xde, 0x16, 0x97, 0x48, 0x8d, 0xe1, 0xe9, 0x77, 0xcf, 0xf3, 0x70, 0xeb, 0x8f, 0x96, 0x1d, 0x64, 0xe4, 0x98, 0x54, 0x46, 0xf0, 0xa2, 0xef, 0x8f, 0x08, 0xc5, 0x85, 0x0b, 0x14, 0x56, 0xec, 0xcb, 0x39, 0xfc, 0xfc, 0xd3, 0xb6, 0x07, 0x96, 0x13, 0x0c, 0x03, 0xe5, 0x99, 0x62, 0x8d, 0xe4, 0x04, 0x27, 0x66, 0x21, 0x3c, 0xf9, 0xc6, 0xc0, 0x60, 0xc6, 0xf3, 0xc2, 0x00, 0x31, 0x11, 0x88, 0x8d, 0x37, 0x3c, 0x92, 0x0d, 0x12, 0xd4, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_95_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x36, 0xb1, 0x7d, 0x3a, 0x44, 0x85, 0xc8, 0x60, 0x32, 0xa4, 0xca, 0x73, 0xdc, 0xd5, 0x04, 0x00, 0x2d, 0x89, 0x07, 0xa2, 0x64, 0x98, 0xc4, 0xa3, 0xf3, 0xda }; static const uint8_t nist_186_2_ecdsa_testvector_95_public_x[] = { /* Qx - byte alignment */ 0x00, 0x14, 0x98, 0xc5, 0xda, 0x88, 0x68, 0x34, 0x7c, 0xc9, 0xc3, 0x50, 0x7d, 0x5b, 0x4e, 0x53, 0x53, 0x22, 0x0e, 0x2b, 0xf0, 0xd0, 0xfd, 0x0e, 0xfb, 0xde, 0x84, 0xc9, 0x9b, 0x65 }; static const uint8_t nist_186_2_ecdsa_testvector_95_public_y[] = { /* Qy - byte alignment */ 0x00, 0x95, 0x7f, 0x22, 0xe2, 0x8b, 0x3d, 0x17, 0xfb, 0xa8, 0x6c, 0xaa, 0x03, 0xb5, 0xcb, 0xd3, 0x7d, 0xad, 0xb7, 0x51, 0x95, 0x98, 0xdf, 0xc6, 0x8b, 0x38, 0xed, 0x12, 0xc4, 0x43 }; /* k = 000000057915cb92004afcb45505796ad55ece04dbc4228dfcbf784f1b6 */ static const uint8_t nist_186_2_ecdsa_testvector_95_out[] = { /* R - byte alignment */ 0x00, 0x18, 0x2c, 0x2d, 0xfe, 0x78, 0x26, 0xc7, 0x68, 0x58, 0xb8, 0x41, 0xbd, 0xb9, 0xbb, 0x47, 0x31, 0x1b, 0xee, 0xe3, 0x62, 0xc0, 0xdf, 0x3a, 0xdd, 0x26, 0x8e, 0x3e, 0xd9, 0xbb, /* S - byte alignment */ 0x00, 0x19, 0x27, 0x58, 0x30, 0xe0, 0x7b, 0x4d, 0x7c, 0x76, 0xec, 0xf2, 0xf7, 0x42, 0x4b, 0x06, 0x8b, 0xb9, 0x8e, 0x0c, 0x59, 0x7f, 0x76, 0x4f, 0xa7, 0xec, 0x52, 0x5e, 0x76, 0x7f }; static const uint8_t nist_186_2_ecdsa_testvector_96_ptx[] = { /* Msg */ 0xe7, 0xde, 0x41, 0x36, 0x2e, 0x2d, 0x2a, 0x37, 0x30, 0x52, 0x74, 0x67, 0xb5, 0xcb, 0x3a, 0xc7, 0xc5, 0x47, 0xfa, 0x26, 0x06, 0xae, 0x91, 0x45, 0x45, 0x61, 0x66, 0x38, 0x52, 0xc3, 0xe5, 0x0f, 0x11, 0xf8, 0x2f, 0xb6, 0xce, 0xed, 0x0f, 0x1a, 0xd1, 0x98, 0x31, 0x8d, 0x32, 0x81, 0x8e, 0x6c, 0xef, 0x81, 0x2b, 0xff, 0x3c, 0xc9, 0x03, 0xa0, 0x1a, 0x27, 0x41, 0x20, 0x2b, 0x85, 0xb3, 0x66, 0xc5, 0xb3, 0x7c, 0x59, 0x45, 0x66, 0x09, 0x01, 0xa6, 0x80, 0x46, 0xe8, 0x52, 0x91, 0x11, 0xc7, 0x37, 0x9e, 0xef, 0x5e, 0x1e, 0x22, 0xfd, 0xa4, 0x38, 0x53, 0x2a, 0x20, 0xfa, 0xa6, 0xa4, 0x97, 0x2b, 0x95, 0x90, 0xe7, 0x3c, 0xa0, 0xfe, 0x33, 0xd7, 0x92, 0x1c, 0x40, 0xba, 0x05, 0xa9, 0x1f, 0xc6, 0x28, 0xad, 0x0d, 0x53, 0xc0, 0x68, 0x97, 0xc7, 0x6d, 0x88, 0x02, 0x67, 0x2f, 0x9f, 0xe9 }; static const uint8_t nist_186_2_ecdsa_testvector_96_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x40, 0xc9, 0xf8, 0x81, 0x6a, 0xca, 0x2e, 0xfc, 0xbe, 0x6d, 0xfe, 0x1a, 0xf9, 0xcc, 0x22, 0x57, 0xbc, 0x7d, 0x50, 0xde, 0x18, 0x6e, 0xea, 0x81, 0xa7, 0x8b }; static const uint8_t nist_186_2_ecdsa_testvector_96_public_x[] = { /* Qx - byte alignment */ 0x00, 0xf4, 0x32, 0xdd, 0x0f, 0xf3, 0x5b, 0x71, 0x46, 0x19, 0x00, 0x7b, 0x3f, 0x4e, 0xd8, 0x6c, 0x6a, 0x2a, 0x13, 0x4c, 0xf4, 0xc3, 0xbb, 0x77, 0xfd, 0xde, 0x9f, 0xff, 0x4d, 0x18 }; static const uint8_t nist_186_2_ecdsa_testvector_96_public_y[] = { /* Qy - byte alignment */ 0x00, 0x61, 0x08, 0xe7, 0xd7, 0x5c, 0x57, 0xc2, 0xdd, 0x65, 0x6d, 0x17, 0x9e, 0x23, 0x60, 0x81, 0x27, 0xd7, 0x0b, 0x1c, 0x58, 0xf2, 0x58, 0x2a, 0x82, 0x85, 0x7c, 0xbf, 0xb9, 0xd8 }; /* k = 0000000325b8f2d8947423b268761b0544c668df4475bcd722aa1857101 */ static const uint8_t nist_186_2_ecdsa_testvector_96_out[] = { /* R - byte alignment */ 0x00, 0x0e, 0x46, 0xa7, 0x3e, 0x81, 0xea, 0xdb, 0x86, 0xe0, 0x77, 0xcd, 0x66, 0x27, 0x15, 0xcd, 0xe1, 0x8e, 0x8f, 0xee, 0x6e, 0xf9, 0xf5, 0x8e, 0x0a, 0x5b, 0x90, 0x88, 0x91, 0x52, /* S - byte alignment */ 0x00, 0x2d, 0x7c, 0xa8, 0x42, 0x74, 0xd7, 0x61, 0x89, 0x6d, 0x7a, 0x1f, 0x4b, 0xb9, 0xd7, 0x13, 0x61, 0xcd, 0x00, 0xc5, 0xcb, 0x80, 0x6a, 0xe1, 0xb0, 0x83, 0x9b, 0xbf, 0x3c, 0x1e }; static const uint8_t nist_186_2_ecdsa_testvector_97_ptx[] = { /* Msg */ 0x4b, 0x39, 0x8c, 0x6d, 0xa9, 0x09, 0x9c, 0xf8, 0x1a, 0xc5, 0x7c, 0x61, 0x08, 0xbf, 0x82, 0xb4, 0x20, 0x81, 0x61, 0xe6, 0x56, 0xbe, 0x51, 0x67, 0x29, 0x88, 0x6a, 0xf6, 0x28, 0xc2, 0x51, 0xb9, 0xb5, 0xd9, 0x17, 0x8d, 0x09, 0xaf, 0x5e, 0x9b, 0x78, 0xd8, 0xbe, 0x2c, 0xf6, 0x09, 0x67, 0xbe, 0xdb, 0xcd, 0x07, 0x56, 0xe3, 0x7a, 0xee, 0x19, 0x79, 0x64, 0x70, 0x16, 0x35, 0x50, 0x8a, 0x67, 0xa3, 0x2c, 0xc9, 0x78, 0x46, 0xfd, 0x68, 0xa6, 0xdc, 0x18, 0xb8, 0x0c, 0xe4, 0x95, 0xc5, 0x99, 0x5e, 0x01, 0x37, 0x66, 0xd2, 0x53, 0x76, 0x47, 0x93, 0x21, 0x12, 0xa1, 0x45, 0x14, 0x61, 0x7b, 0x9d, 0x9a, 0x6a, 0xd7, 0x68, 0xda, 0x01, 0x42, 0xcf, 0xed, 0x34, 0xaa, 0xd9, 0x4b, 0xe6, 0x70, 0x31, 0x83, 0xba, 0xbe, 0x2a, 0x30, 0x33, 0x1b, 0x00, 0x28, 0x19, 0x3c, 0x61, 0xf6, 0x1e, 0x1d }; static const uint8_t nist_186_2_ecdsa_testvector_97_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x71, 0xb6, 0x27, 0x13, 0x2c, 0xc5, 0x27, 0x96, 0x7d, 0xba, 0xf7, 0x92, 0x29, 0x03, 0x83, 0x56, 0x33, 0x2d, 0xf1, 0x4a, 0xc6, 0xd3, 0x9b, 0x0c, 0xd3, 0xdf }; static const uint8_t nist_186_2_ecdsa_testvector_97_public_x[] = { /* Qx - byte alignment */ 0x00, 0x54, 0xc5, 0x6c, 0x17, 0x94, 0x87, 0x93, 0x75, 0xd4, 0x2f, 0xed, 0x34, 0x65, 0xb4, 0x68, 0x28, 0xc0, 0xf6, 0x93, 0x32, 0x3b, 0xcd, 0x39, 0x3f, 0x59, 0x9f, 0x27, 0xc5, 0xa6 }; static const uint8_t nist_186_2_ecdsa_testvector_97_public_y[] = { /* Qy - byte alignment */ 0x01, 0x0a, 0x7a, 0xcf, 0x85, 0xe9, 0xbd, 0xff, 0xdd, 0xcf, 0xe7, 0x96, 0xb1, 0xdb, 0xa2, 0x7c, 0xd4, 0x8c, 0x3d, 0x8a, 0xf5, 0xba, 0xea, 0xff, 0x31, 0x7d, 0x9e, 0x58, 0x76, 0x97 }; /* k = 000000014c667d9fecec4fcb0c8e80c2dca83cb3919f094b1eb061180d7 */ static const uint8_t nist_186_2_ecdsa_testvector_97_out[] = { /* R - byte alignment */ 0x00, 0x48, 0x1e, 0xb3, 0x29, 0xf1, 0x48, 0xb4, 0x86, 0x4c, 0xf6, 0x2b, 0x0f, 0xc7, 0x70, 0xd5, 0x81, 0xd2, 0x4a, 0x15, 0xad, 0xb3, 0x64, 0x15, 0x2a, 0xc5, 0xb7, 0x13, 0x32, 0x35, /* S - byte alignment */ 0x00, 0x23, 0x8d, 0x6a, 0x8a, 0x5e, 0x5b, 0x7d, 0x1c, 0x2c, 0x77, 0x0a, 0x6c, 0x1e, 0x40, 0x53, 0x00, 0xb5, 0xa8, 0x9b, 0x4c, 0xad, 0x39, 0x08, 0x6d, 0x97, 0xbb, 0x57, 0x6e, 0x19 }; static const uint8_t nist_186_2_ecdsa_testvector_98_ptx[] = { /* Msg */ 0x9f, 0xc5, 0xd8, 0x40, 0x92, 0xa9, 0x2a, 0x8b, 0x31, 0x93, 0x5c, 0x61, 0xa5, 0x92, 0x93, 0x66, 0xd5, 0x81, 0x88, 0x7e, 0xe6, 0x80, 0x2e, 0xe0, 0x02, 0xa5, 0x96, 0x6d, 0x59, 0xee, 0x0f, 0x3f, 0x66, 0x7a, 0x91, 0x84, 0x74, 0xf9, 0x5c, 0x8d, 0x60, 0x62, 0xdc, 0x22, 0xa0, 0xe4, 0xd0, 0x19, 0x84, 0x1e, 0xab, 0x27, 0xbc, 0x92, 0x3a, 0xf5, 0x1b, 0x57, 0x88, 0x76, 0x9b, 0x0f, 0xff, 0x79, 0xa0, 0x19, 0xcf, 0x7a, 0x81, 0x08, 0x94, 0xbe, 0x44, 0x53, 0x33, 0x9f, 0xa9, 0x4d, 0x04, 0x24, 0x6b, 0x58, 0x37, 0xd4, 0xc2, 0x56, 0x70, 0xcc, 0x2c, 0x61, 0xb5, 0x10, 0x6d, 0xbc, 0x8a, 0x1f, 0xd4, 0x09, 0x5a, 0xca, 0xc1, 0xbc, 0x19, 0x45, 0x64, 0xcf, 0x28, 0x7f, 0xc7, 0xb8, 0x79, 0xaf, 0x0f, 0x98, 0xf3, 0x2f, 0xff, 0xb5, 0x18, 0x8e, 0xbd, 0x2a, 0xe5, 0xe1, 0xd9, 0xdd, 0xf9, 0x59 }; static const uint8_t nist_186_2_ecdsa_testvector_98_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x93, 0x42, 0x62, 0x16, 0x94, 0xf3, 0xaa, 0x5f, 0x90, 0xd2, 0x8c, 0xd5, 0x4c, 0x4d, 0x82, 0x5b, 0xf9, 0x01, 0x7f, 0x35, 0x91, 0xc4, 0x30, 0x26 }; static const uint8_t nist_186_2_ecdsa_testvector_98_public_x[] = { /* Qx - byte alignment */ 0x01, 0xd3, 0x35, 0x12, 0x91, 0xe1, 0xbe, 0xfd, 0x05, 0x1b, 0x6e, 0x84, 0xdd, 0x72, 0xf1, 0xe5, 0x87, 0xf7, 0xe0, 0x5c, 0xc8, 0x9a, 0xb0, 0x19, 0x57, 0xea, 0xc9, 0x97, 0xb2, 0xb4 }; static const uint8_t nist_186_2_ecdsa_testvector_98_public_y[] = { /* Qy - byte alignment */ 0x00, 0x9c, 0x49, 0x2f, 0x3e, 0x35, 0x24, 0xd9, 0x28, 0x8e, 0xe6, 0x1c, 0x8e, 0x64, 0xa3, 0xf3, 0x21, 0x48, 0x90, 0x19, 0xa2, 0x71, 0x15, 0xda, 0x34, 0xab, 0x6b, 0xde, 0x30, 0x99 }; /* k = 0000000095a7927a0389b06597f60703194fb6c3ff7493aa3e7b5aeb1da */ static const uint8_t nist_186_2_ecdsa_testvector_98_out[] = { /* R - byte alignment */ 0x00, 0x4c, 0xbd, 0xfc, 0x77, 0xdc, 0x32, 0x19, 0xad, 0x89, 0x32, 0xe3, 0x54, 0xc0, 0xdc, 0xf1, 0xc6, 0x52, 0xef, 0x31, 0x70, 0x70, 0xa3, 0x19, 0x6f, 0x8c, 0x65, 0x42, 0x54, 0x8c, /* S - byte alignment */ 0x00, 0x04, 0x7c, 0x14, 0xc9, 0xc4, 0xd0, 0x05, 0xbb, 0xae, 0x11, 0x00, 0x41, 0xfd, 0xfe, 0x82, 0x25, 0x61, 0x51, 0x39, 0x84, 0x24, 0xe9, 0x41, 0x84, 0xda, 0xf6, 0x13, 0x2c, 0x82 }; static const uint8_t nist_186_2_ecdsa_testvector_99_ptx[] = { /* Msg */ 0x24, 0x05, 0x89, 0x34, 0x7a, 0x03, 0xca, 0x00, 0xac, 0xed, 0xd2, 0xdc, 0x7f, 0x7e, 0x3b, 0x88, 0x04, 0x98, 0x34, 0x0a, 0x78, 0x93, 0x82, 0xa2, 0x68, 0xd5, 0xc5, 0x00, 0x18, 0xa2, 0xfd, 0xb5, 0x26, 0x36, 0x4c, 0xe8, 0x6b, 0x11, 0xfe, 0x4a, 0x22, 0x93, 0xc6, 0x4c, 0x4c, 0xc8, 0x4a, 0x8f, 0x53, 0x85, 0xe2, 0x9b, 0xed, 0xb4, 0x9d, 0xd5, 0x43, 0xec, 0x86, 0xab, 0x53, 0x45, 0x25, 0x12, 0x92, 0x6a, 0x48, 0x32, 0xd6, 0xef, 0x03, 0x5f, 0x74, 0xe5, 0xf5, 0x4c, 0xa5, 0xac, 0xcd, 0x7b, 0x2f, 0x09, 0x0d, 0xf8, 0x41, 0x78, 0x0e, 0x47, 0x9e, 0xc4, 0x44, 0x9b, 0xfd, 0xd4, 0xc4, 0x49, 0xb0, 0xc8, 0x03, 0x7b, 0x85, 0x45, 0xe1, 0x29, 0xea, 0x0c, 0xe6, 0x45, 0x54, 0xd2, 0xcb, 0x36, 0xe1, 0x4c, 0x3c, 0x88, 0x3c, 0x89, 0xdc, 0xe2, 0xc1, 0x84, 0x8a, 0x38, 0xe1, 0xfa, 0xe3, 0x41 }; static const uint8_t nist_186_2_ecdsa_testvector_99_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x55, 0x12, 0xcb, 0x10, 0x56, 0x46, 0x8e, 0xa7, 0x82, 0x22, 0xc2, 0xca, 0xd6, 0x7c, 0xb0, 0x59, 0xc0, 0xbe, 0x34, 0x26, 0x82, 0x20, 0x24, 0x3f, 0xa5, 0xee }; static const uint8_t nist_186_2_ecdsa_testvector_99_public_x[] = { /* Qx - byte alignment */ 0x00, 0x2b, 0x21, 0xb8, 0xce, 0x38, 0x27, 0x60, 0x02, 0x03, 0x9d, 0xfa, 0x33, 0xd3, 0xfe, 0xea, 0xa6, 0xc5, 0x3b, 0x74, 0xa8, 0x0f, 0x0f, 0xcf, 0x8d, 0xc9, 0xfd, 0x79, 0xe3, 0x89 }; static const uint8_t nist_186_2_ecdsa_testvector_99_public_y[] = { /* Qy - byte alignment */ 0x01, 0x89, 0x47, 0xf6, 0xa0, 0x01, 0x61, 0xb8, 0xa6, 0x4a, 0xb2, 0x88, 0x2f, 0x8d, 0x00, 0xd4, 0xa5, 0xe4, 0xf4, 0x1f, 0x22, 0x2e, 0xc7, 0x72, 0x8c, 0x6a, 0x01, 0x66, 0x56, 0x26 }; /* k = 000000072670f9c6948a6e0f8f3b3b84fba3511ae360a7af745a885671d */ static const uint8_t nist_186_2_ecdsa_testvector_99_out[] = { /* R - byte alignment */ 0x00, 0x5c, 0x77, 0xee, 0xe6, 0x2d, 0xad, 0x21, 0x8f, 0x7e, 0x94, 0xc9, 0x43, 0x86, 0xcc, 0xaf, 0x16, 0xfc, 0x3e, 0x33, 0x4e, 0xac, 0x7c, 0x2c, 0x7d, 0x7f, 0x9d, 0x60, 0x36, 0xf3, /* S - byte alignment */ 0x00, 0x55, 0x8f, 0x88, 0xe2, 0xf3, 0x48, 0xe4, 0xa4, 0xd5, 0xb1, 0x4c, 0x05, 0xf5, 0x32, 0xb1, 0x28, 0x3e, 0x7a, 0x05, 0xe5, 0x9e, 0xf2, 0xc8, 0xd2, 0xa3, 0xd4, 0xe4, 0xa6, 0xc8 }; static const uint8_t nist_186_2_ecdsa_testvector_100_ptx[] = { /* Msg */ 0x07, 0xde, 0xe1, 0x2f, 0x72, 0x94, 0x1e, 0xa3, 0xdc, 0x45, 0x7c, 0x70, 0xf7, 0xae, 0x59, 0xd7, 0x13, 0xaa, 0xaf, 0x2f, 0x37, 0xf9, 0xd3, 0xcf, 0x70, 0x41, 0x63, 0x2e, 0x69, 0x52, 0x79, 0x49, 0x3c, 0xae, 0x25, 0x45, 0x88, 0x49, 0x1b, 0x56, 0xc4, 0x8d, 0xa8, 0xdf, 0xd2, 0xa1, 0xeb, 0xdb, 0xd7, 0xeb, 0x41, 0x7b, 0x4b, 0xd4, 0x01, 0x10, 0x4c, 0xcb, 0x6a, 0x2c, 0x38, 0x8c, 0xd9, 0x04, 0x7a, 0xa2, 0x3f, 0x19, 0xa4, 0x2a, 0xd3, 0x18, 0xbf, 0xdb, 0x04, 0xfe, 0xde, 0x43, 0xb2, 0x7f, 0xfa, 0x53, 0x9d, 0xa9, 0xf9, 0x1e, 0x1e, 0xc5, 0x10, 0xde, 0x15, 0x7e, 0x4b, 0x38, 0x22, 0x45, 0x6a, 0xc1, 0x18, 0xf3, 0xef, 0xc0, 0xae, 0xb0, 0x75, 0x36, 0x78, 0x14, 0x43, 0x1b, 0x16, 0x8d, 0x21, 0xeb, 0xac, 0x01, 0x6b, 0x61, 0x92, 0xb4, 0x63, 0x82, 0x4c, 0x6b, 0xcb, 0xde, 0xbc, 0xd2 }; static const uint8_t nist_186_2_ecdsa_testvector_100_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x47, 0xbc, 0x59, 0xbd, 0x9d, 0x2f, 0xb5, 0xb2, 0x95, 0x6d, 0x9d, 0x54, 0xc8, 0x98, 0xac, 0x70, 0x05, 0x55, 0x9a, 0x16, 0xb0, 0x60, 0xde, 0x4a, 0xd2, 0xe6 }; static const uint8_t nist_186_2_ecdsa_testvector_100_public_x[] = { /* Qx - byte alignment */ 0x00, 0xe9, 0xa7, 0xf6, 0xab, 0xe2, 0x72, 0xee, 0xbf, 0xbc, 0x85, 0x12, 0xe7, 0x2d, 0x17, 0xfe, 0x92, 0x2b, 0x58, 0xc6, 0x51, 0x8a, 0xe7, 0xf8, 0x9f, 0x76, 0x28, 0x06, 0x10, 0x61 }; static const uint8_t nist_186_2_ecdsa_testvector_100_public_y[] = { /* Qy - byte alignment */ 0x01, 0x22, 0x60, 0xab, 0xa4, 0x24, 0x41, 0x71, 0x0b, 0x54, 0xc1, 0x77, 0xd2, 0x47, 0xc6, 0x1d, 0xd9, 0x5c, 0xaf, 0x2c, 0xde, 0x1d, 0x12, 0x90, 0x5e, 0x3c, 0xf3, 0x8a, 0x32, 0xc9 }; /* k = 0000000524234bf1ea81de91d3a69a9c9f5eef0e429d7b2304f45bf60d6 */ static const uint8_t nist_186_2_ecdsa_testvector_100_out[] = { /* R - byte alignment */ 0x00, 0x7f, 0xb3, 0xa7, 0x8f, 0x41, 0x6f, 0x16, 0x25, 0x35, 0x0c, 0x1b, 0x96, 0xfd, 0x53, 0x8a, 0x74, 0x5f, 0x9b, 0x3e, 0xc7, 0xb5, 0x0f, 0xb5, 0xf0, 0x18, 0x27, 0xd4, 0x62, 0x93, /* S - byte alignment */ 0x00, 0x4a, 0x61, 0xe8, 0xb4, 0xbd, 0x50, 0xf2, 0x62, 0x3a, 0xb8, 0xa8, 0xd6, 0x7c, 0xc3, 0x15, 0xb5, 0x1c, 0x70, 0xde, 0x29, 0xa7, 0x14, 0x01, 0x18, 0x2e, 0xb7, 0x15, 0xac, 0x99 }; static const uint8_t nist_186_2_ecdsa_testvector_101_ptx[] = { /* Msg */ 0x4d, 0x2f, 0xb9, 0xb7, 0x5a, 0x4f, 0xc7, 0x83, 0x52, 0x92, 0xbf, 0xa1, 0x2e, 0x9d, 0xfd, 0x07, 0xda, 0x3d, 0x6d, 0x04, 0x3a, 0x59, 0xab, 0xd4, 0x6b, 0x25, 0x69, 0x72, 0x4b, 0x99, 0x12, 0xad, 0x3b, 0x22, 0xac, 0x7e, 0x23, 0x97, 0x03, 0x99, 0xb7, 0x6e, 0x04, 0x42, 0xf9, 0x30, 0x67, 0x62, 0xff, 0x2a, 0x91, 0xda, 0xf7, 0x66, 0xb8, 0x17, 0x68, 0xd9, 0x48, 0xe6, 0xbb, 0xde, 0x85, 0x8a, 0xf9, 0xe3, 0x72, 0x0d, 0xd6, 0x62, 0xf2, 0xd3, 0xef, 0x14, 0x2e, 0x75, 0x50, 0x61, 0x36, 0xcc, 0x39, 0x1a, 0xeb, 0x4b, 0x22, 0x6a, 0x1c, 0x92, 0xfc, 0x0a, 0xef, 0x41, 0xba, 0xb5, 0x83, 0x0a, 0x10, 0xdc, 0xd3, 0x0b, 0x7a, 0x9a, 0xde, 0x5a, 0x81, 0xea, 0x05, 0xe1, 0x3a, 0x18, 0xb4, 0x6c, 0x0f, 0x75, 0x44, 0x00, 0xc1, 0x4f, 0x20, 0x6f, 0xae, 0x20, 0x27, 0x29, 0x50, 0x06, 0x52, 0x55 }; static const uint8_t nist_186_2_ecdsa_testvector_101_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x4a, 0x54, 0xeb, 0xe2, 0x0a, 0x0d, 0x5f, 0x31, 0x03, 0x76, 0x63, 0x66, 0x3a, 0xa5, 0xbb, 0x62, 0x82, 0x49, 0x92, 0xd9, 0x49, 0xea, 0xce, 0xc5, 0xfd, 0xcb }; static const uint8_t nist_186_2_ecdsa_testvector_101_public_x[] = { /* Qx - byte alignment */ 0x01, 0x28, 0x97, 0xe3, 0x6d, 0x2a, 0x25, 0xe2, 0x3f, 0x01, 0x1a, 0x20, 0xb7, 0xfd, 0xf5, 0xb4, 0x94, 0x9d, 0x70, 0xd6, 0xb2, 0x87, 0xaf, 0x45, 0xad, 0x53, 0x4b, 0x90, 0x38, 0xfa }; static const uint8_t nist_186_2_ecdsa_testvector_101_public_y[] = { /* Qy - byte alignment */ 0x00, 0x0d, 0x38, 0x8f, 0x45, 0x7f, 0x2b, 0x2d, 0xf0, 0xf8, 0x61, 0x3e, 0x9b, 0x57, 0x1f, 0xf0, 0x51, 0xc3, 0x12, 0xf1, 0x1a, 0xe0, 0x9a, 0x20, 0x03, 0x8d, 0x08, 0x98, 0x46, 0xbc }; /* k = 00000000750665d8bd56f486fd2627689719630e89671455caeaad89c34 */ static const uint8_t nist_186_2_ecdsa_testvector_101_out[] = { /* R - byte alignment */ 0x00, 0x27, 0xa0, 0xda, 0xd7, 0x5d, 0x50, 0x4a, 0x7a, 0xdb, 0xbd, 0xd2, 0x47, 0xd8, 0x0e, 0xb0, 0x51, 0xc7, 0xb8, 0x84, 0xf4, 0xec, 0xd5, 0x53, 0x7a, 0xba, 0x2f, 0x59, 0xef, 0x57, /* S - byte alignment */ 0x00, 0x77, 0x20, 0x86, 0x7f, 0x79, 0x76, 0x9d, 0x27, 0xc8, 0x2e, 0x2f, 0x1f, 0x3e, 0x19, 0x0f, 0xbd, 0xf9, 0xcd, 0xe2, 0x86, 0x35, 0xa8, 0x56, 0x4b, 0x25, 0x63, 0x16, 0x79, 0x6b }; static const uint8_t nist_186_2_ecdsa_testvector_102_ptx[] = { /* Msg */ 0x96, 0x16, 0xdf, 0x5b, 0x4f, 0x67, 0xb5, 0xb9, 0xd2, 0x47, 0x18, 0xc6, 0x4b, 0x44, 0x2e, 0xa0, 0xa9, 0x9c, 0x0a, 0x9c, 0x47, 0x53, 0x75, 0xf0, 0xcc, 0x82, 0xee, 0xaf, 0x50, 0xf2, 0xef, 0xfb, 0xc0, 0xe9, 0x72, 0x76, 0x83, 0x44, 0xb4, 0xf9, 0x5d, 0xc6, 0x39, 0x89, 0x94, 0xb0, 0x10, 0x86, 0x52, 0x92, 0x58, 0x26, 0x4b, 0x60, 0x03, 0x22, 0x9f, 0xc8, 0xda, 0xaf, 0x02, 0xc3, 0xc1, 0xb0, 0x1a, 0x6b, 0x3d, 0x2a, 0x28, 0x0c, 0x33, 0xf8, 0xeb, 0x7d, 0xf3, 0xc0, 0xc2, 0xb1, 0x74, 0x25, 0x10, 0x89, 0xe1, 0x3e, 0xe4, 0xec, 0x55, 0x47, 0xda, 0x1a, 0xe4, 0x97, 0x3c, 0x3d, 0xda, 0xd2, 0x6d, 0x42, 0x47, 0x60, 0x88, 0xe6, 0xbb, 0x1e, 0x44, 0x14, 0x4e, 0x53, 0x1b, 0x6e, 0xe3, 0xe5, 0xab, 0x2a, 0xae, 0xcd, 0x5c, 0x1f, 0xf4, 0xc8, 0x43, 0x1f, 0x12, 0x4f, 0x46, 0x88, 0xc1, 0xca }; static const uint8_t nist_186_2_ecdsa_testvector_102_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x2a, 0xa6, 0xc4, 0x61, 0xf8, 0xb0, 0xf5, 0x0f, 0xf7, 0x21, 0xcc, 0x0f, 0x77, 0x3e, 0xcc, 0x19, 0x9f, 0x51, 0xcb, 0xb0, 0x72, 0xc8, 0xb8, 0xba, 0x39, 0x2e }; static const uint8_t nist_186_2_ecdsa_testvector_102_public_x[] = { /* Qx - byte alignment */ 0x01, 0xaa, 0x8e, 0x0d, 0x74, 0x8d, 0x2d, 0x3d, 0xe4, 0xe8, 0x64, 0x14, 0x9f, 0x32, 0xe2, 0xd7, 0xaf, 0x95, 0x1a, 0xe9, 0x63, 0x7c, 0x46, 0xdb, 0xfa, 0xd8, 0x78, 0x24, 0x66, 0xae }; static const uint8_t nist_186_2_ecdsa_testvector_102_public_y[] = { /* Qy - byte alignment */ 0x01, 0x4a, 0xd6, 0xf2, 0x18, 0x6a, 0xec, 0x78, 0xcc, 0x79, 0x84, 0x79, 0x5d, 0x5b, 0x9f, 0x5e, 0x1e, 0xe7, 0x0d, 0xe4, 0x3a, 0x53, 0x67, 0x0e, 0x6d, 0x28, 0xa5, 0x36, 0x25, 0x55 }; /* k = 00000007a73a1ed4c2700b4cbb0beea6c4f5f7721fe00b0d2cdefd62e5c */ static const uint8_t nist_186_2_ecdsa_testvector_102_out[] = { /* R - byte alignment */ 0x00, 0x3c, 0x50, 0xaf, 0x64, 0xac, 0x35, 0x69, 0x68, 0xd1, 0xc8, 0xde, 0x2b, 0x4e, 0x13, 0xe7, 0x76, 0xb5, 0xd4, 0xa6, 0x83, 0x41, 0x06, 0xe6, 0xa8, 0x10, 0x77, 0x2f, 0xe2, 0x75, /* S - byte alignment */ 0x00, 0x1b, 0x68, 0x89, 0x7e, 0x67, 0x25, 0x87, 0xa6, 0x8c, 0x43, 0xae, 0xa6, 0x04, 0x4a, 0x09, 0x72, 0x77, 0x3c, 0x4e, 0xd5, 0xfe, 0xe3, 0xfd, 0xd5, 0xfb, 0x49, 0xc3, 0x33, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_103_ptx[] = { /* Msg */ 0xda, 0xd1, 0x2a, 0xcf, 0x81, 0x77, 0x9f, 0x7e, 0x90, 0x3b, 0xc6, 0xec, 0xd7, 0xf7, 0x24, 0x60, 0x0e, 0xd1, 0x53, 0xdb, 0xc9, 0x62, 0x9b, 0x55, 0xa8, 0x18, 0xc2, 0x4a, 0xce, 0xd8, 0x24, 0x75, 0x95, 0xe8, 0x06, 0xdc, 0x80, 0x0d, 0x27, 0x0c, 0x72, 0xf0, 0x98, 0xa6, 0x1d, 0xc6, 0xce, 0x1a, 0xbc, 0x30, 0xf6, 0xb3, 0x05, 0x60, 0x88, 0xd4, 0x59, 0x7e, 0x1f, 0x81, 0x3f, 0x4a, 0x88, 0x20, 0x10, 0x02, 0x18, 0x81, 0xf4, 0x86, 0x43, 0x1d, 0x0c, 0xba, 0x6b, 0x9b, 0xf1, 0x2c, 0xf6, 0x99, 0x5e, 0xf7, 0xa3, 0xa8, 0x29, 0xe7, 0x1e, 0x98, 0x78, 0xdd, 0xd2, 0xf7, 0x31, 0x75, 0xfe, 0xd4, 0xb2, 0xe7, 0x0b, 0xc8, 0xc3, 0x2b, 0x1d, 0x38, 0xc8, 0x61, 0xe8, 0xd4, 0x3c, 0x6f, 0xc5, 0x63, 0x5a, 0xec, 0x04, 0xc3, 0x1d, 0x3d, 0x84, 0x2b, 0x6b, 0xfd, 0x82, 0xb4, 0x8d, 0xa3, 0xaf, 0x18 }; static const uint8_t nist_186_2_ecdsa_testvector_103_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x67, 0x4f, 0xd6, 0x30, 0x51, 0x76, 0x9b, 0x32, 0x1d, 0x74, 0x56, 0x4c, 0x0b, 0xc9, 0xde, 0x95, 0x84, 0x38, 0xe1, 0x3f, 0xdd, 0xb4, 0xf8, 0xa9, 0x51, 0x71 }; static const uint8_t nist_186_2_ecdsa_testvector_103_public_x[] = { /* Qx - byte alignment */ 0x01, 0x01, 0x9e, 0xfa, 0x37, 0x20, 0x62, 0xa1, 0x5e, 0x62, 0xd4, 0x84, 0x85, 0x31, 0xf6, 0xf2, 0xe3, 0xcc, 0x37, 0x4c, 0xea, 0x5b, 0x01, 0x03, 0x44, 0xb4, 0x05, 0xa0, 0xbe, 0x37 }; static const uint8_t nist_186_2_ecdsa_testvector_103_public_y[] = { /* Qy - byte alignment */ 0x01, 0x02, 0x8a, 0x9b, 0xd5, 0xef, 0xad, 0xbb, 0xe9, 0xc2, 0x32, 0x35, 0x6f, 0x93, 0x10, 0xeb, 0xd5, 0x0d, 0x54, 0xcb, 0x34, 0x9e, 0xf7, 0x0c, 0x72, 0x37, 0xdf, 0xc3, 0x55, 0xd4 }; /* k = 00000001f92d4ce1bc35799bd39adf7613ca26088c659f80426a21014db */ static const uint8_t nist_186_2_ecdsa_testvector_103_out[] = { /* R - byte alignment */ 0x00, 0x1d, 0x26, 0xcc, 0xdb, 0xa5, 0xca, 0x39, 0x7e, 0x73, 0xcf, 0x7c, 0x8e, 0x35, 0x7e, 0x9a, 0xd8, 0x7c, 0x4f, 0xda, 0x86, 0x6d, 0x87, 0x23, 0x63, 0x23, 0xb8, 0x9c, 0xeb, 0x82, /* S - byte alignment */ 0x00, 0x69, 0xf0, 0xa5, 0xf2, 0x86, 0x53, 0xbf, 0x40, 0x08, 0x43, 0x8e, 0xbf, 0x19, 0x50, 0xd9, 0x39, 0xe4, 0xdb, 0x9c, 0x53, 0x08, 0xde, 0xdd, 0x29, 0x1e, 0x8d, 0x61, 0xa3, 0x2a }; static const uint8_t nist_186_2_ecdsa_testvector_104_ptx[] = { /* Msg */ 0x56, 0xc8, 0x64, 0xa8, 0xc4, 0x25, 0x91, 0x96, 0xe0, 0x66, 0x57, 0xe8, 0x3b, 0x9f, 0x0a, 0xf3, 0xe7, 0x6f, 0x5d, 0xf3, 0x44, 0x85, 0xd2, 0xaa, 0x17, 0x63, 0x75, 0x4a, 0xdc, 0x62, 0xca, 0x95, 0x5e, 0xf7, 0x04, 0x43, 0x84, 0x34, 0x77, 0xa4, 0x6e, 0x92, 0x50, 0x86, 0xc0, 0xed, 0x84, 0x59, 0x3e, 0xd0, 0x06, 0x91, 0x9a, 0xf3, 0x3d, 0x4c, 0x89, 0x02, 0xb5, 0x35, 0x1c, 0xa0, 0x15, 0xa8, 0x4e, 0xac, 0x51, 0x17, 0xda, 0xc3, 0x20, 0xac, 0x4f, 0x06, 0xb1, 0x2f, 0x65, 0x1d, 0x99, 0x2b, 0x92, 0x7c, 0x11, 0x4c, 0xd9, 0xe4, 0x5e, 0x0c, 0xe3, 0x2d, 0x90, 0x8e, 0x50, 0x44, 0x6f, 0xca, 0x4f, 0x70, 0xb3, 0xeb, 0x6c, 0xd9, 0x73, 0xf5, 0xaa, 0x4a, 0xe0, 0xab, 0xd2, 0x36, 0x33, 0xb0, 0x0a, 0xf9, 0xe4, 0xec, 0xa9, 0x61, 0x1d, 0x31, 0x4a, 0x6d, 0x6e, 0x1f, 0x20, 0x54, 0xc2, 0x45 }; static const uint8_t nist_186_2_ecdsa_testvector_104_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x5e, 0xc1, 0x55, 0xc1, 0x53, 0xc2, 0xae, 0x7b, 0xb9, 0xf6, 0xdb, 0xa5, 0xd3, 0x01, 0x6a, 0x3d, 0x44, 0xae, 0x80, 0x03, 0x55, 0x40, 0xce, 0xa9, 0xf4 }; static const uint8_t nist_186_2_ecdsa_testvector_104_public_x[] = { /* Qx - byte alignment */ 0x01, 0x7c, 0x13, 0x91, 0x21, 0xbe, 0x81, 0xda, 0x9a, 0xb4, 0xf9, 0x28, 0xb7, 0xd5, 0xd9, 0x06, 0x46, 0x8b, 0x76, 0x84, 0xa1, 0x1e, 0x14, 0x14, 0xf3, 0x45, 0x90, 0x01, 0x15, 0x4b }; static const uint8_t nist_186_2_ecdsa_testvector_104_public_y[] = { /* Qy - byte alignment */ 0x00, 0x9d, 0x05, 0x50, 0x8f, 0x18, 0x00, 0x93, 0x1b, 0x03, 0xdd, 0x29, 0x0a, 0x9c, 0x74, 0xc4, 0x7e, 0xd4, 0x3a, 0x0b, 0x47, 0x9d, 0x55, 0x84, 0xd9, 0xbf, 0xfc, 0x2b, 0xca, 0x32 }; /* k = 0000000195eeed8137349bb0ae8c941ca8a6fe0dbdf4cacac9a28507c95 */ static const uint8_t nist_186_2_ecdsa_testvector_104_out[] = { /* R - byte alignment */ 0x00, 0x49, 0x17, 0x29, 0xe9, 0x92, 0x91, 0x68, 0x4d, 0xc8, 0x75, 0xf1, 0x80, 0x1d, 0xda, 0x25, 0xa9, 0x97, 0xe9, 0x89, 0x44, 0x54, 0x15, 0xd0, 0xf7, 0x4f, 0xc8, 0xab, 0xe7, 0x7b, /* S - byte alignment */ 0x00, 0x7b, 0x28, 0x90, 0x2f, 0x9f, 0x6c, 0x9d, 0x35, 0xde, 0x0f, 0x1b, 0x3a, 0xd1, 0xff, 0x1a, 0x60, 0xee, 0xc2, 0x3a, 0x0e, 0x8d, 0x5c, 0x8b, 0xa4, 0x7b, 0xf2, 0x4e, 0x5e, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_105_ptx[] = { /* Msg */ 0x75, 0x8f, 0x26, 0xa0, 0xa2, 0xbd, 0xb5, 0xe5, 0x3e, 0xea, 0x6c, 0x43, 0xdb, 0x2c, 0x9a, 0x1d, 0x61, 0x9c, 0x84, 0xf3, 0x61, 0x59, 0x5a, 0x86, 0xa5, 0xd0, 0x6a, 0x3d, 0x0c, 0x3a, 0x94, 0xc8, 0x95, 0x65, 0xfe, 0x03, 0xb9, 0xb8, 0x09, 0x1d, 0xfe, 0x72, 0x83, 0xf9, 0xc9, 0x32, 0x1e, 0xd4, 0x73, 0xbc, 0x20, 0x29, 0xa0, 0xfa, 0x5d, 0xd1, 0xcc, 0x41, 0x62, 0x6f, 0x27, 0xd6, 0xf4, 0x0b, 0xa3, 0xb1, 0xb9, 0xfd, 0x4b, 0x80, 0x34, 0x0d, 0xd6, 0xef, 0xf7, 0xd8, 0x7c, 0x27, 0x13, 0x76, 0x08, 0x94, 0xd4, 0x59, 0x2f, 0xec, 0xab, 0x78, 0x20, 0x6d, 0x6c, 0xad, 0x5c, 0x66, 0xb9, 0x5c, 0xc8, 0xf8, 0xbe, 0x56, 0x00, 0x1e, 0x20, 0xfd, 0xef, 0xeb, 0x2f, 0xa8, 0x9d, 0x13, 0x63, 0x49, 0x47, 0xad, 0x06, 0x4d, 0xb5, 0x37, 0x2e, 0xc3, 0xc8, 0xdb, 0xee, 0xc1, 0x53, 0xf0, 0xcd, 0x03 }; static const uint8_t nist_186_2_ecdsa_testvector_105_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x64, 0x52, 0xe5, 0xca, 0x45, 0x76, 0xad, 0x01, 0x52, 0x29, 0xdf, 0x08, 0xc3, 0xf2, 0xff, 0xdb, 0x58, 0x90, 0x4b, 0xa8, 0x92, 0x3c, 0xf3, 0x50, 0xd4 }; static const uint8_t nist_186_2_ecdsa_testvector_105_public_x[] = { /* Qx - byte alignment */ 0x00, 0x2b, 0x7c, 0xd9, 0x24, 0xc4, 0x41, 0x00, 0x39, 0x5f, 0x23, 0x90, 0x68, 0x99, 0x24, 0x76, 0x3d, 0x59, 0x74, 0x99, 0xe0, 0xcb, 0x4e, 0x15, 0xc7, 0x8e, 0x80, 0x7f, 0xca, 0x02 }; static const uint8_t nist_186_2_ecdsa_testvector_105_public_y[] = { /* Qy - byte alignment */ 0x00, 0x32, 0xd2, 0xd4, 0xae, 0x07, 0xdd, 0x7e, 0x6c, 0xc9, 0xe6, 0xf6, 0x59, 0x18, 0xd6, 0x49, 0xfe, 0xe9, 0x8b, 0x08, 0xe2, 0xd8, 0x97, 0x9b, 0xe8, 0x87, 0x58, 0x5c, 0x0f, 0xe1 }; /* k = 00000000f1f9a014d98bc3729a23f74820c2395cfba1ff7cf767af47573 */ static const uint8_t nist_186_2_ecdsa_testvector_105_out[] = { /* R - byte alignment */ 0x00, 0x51, 0x82, 0x91, 0x4d, 0x54, 0x5b, 0xc8, 0xb5, 0x21, 0xba, 0x6c, 0x92, 0xa4, 0x92, 0x4c, 0x18, 0x05, 0x35, 0xf0, 0x9a, 0x9c, 0xd0, 0xdd, 0x22, 0xd5, 0xa5, 0xe4, 0x28, 0x89, /* S - byte alignment */ 0x00, 0x76, 0x42, 0xf4, 0xf1, 0x3b, 0xca, 0xe9, 0xa2, 0x7a, 0x47, 0xa8, 0x63, 0xc8, 0x45, 0xd3, 0x39, 0x53, 0x17, 0x55, 0xc9, 0x5b, 0x27, 0x83, 0xf9, 0x81, 0xa2, 0x12, 0xaa, 0x1b }; /* [K-283] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_106_ptx[] = { /* Msg */ 0xf0, 0x6b, 0x64, 0x2f, 0xdb, 0x21, 0x1d, 0xad, 0xa7, 0x2e, 0xea, 0xae, 0xa5, 0x6c, 0xc7, 0x93, 0xc7, 0xd7, 0x50, 0xd3, 0xb2, 0x4f, 0x79, 0xe5, 0x15, 0x9a, 0x7f, 0x61, 0x39, 0xa9, 0x1f, 0x62, 0xda, 0x1c, 0x05, 0x2e, 0x36, 0x08, 0x87, 0x19, 0x63, 0xf7, 0x93, 0xa6, 0xe5, 0x30, 0xe6, 0xf0, 0x80, 0x39, 0x7f, 0x48, 0x4b, 0x9b, 0x54, 0x20, 0x06, 0xe5, 0x43, 0x28, 0xad, 0xf3, 0x4b, 0xb6, 0x4d, 0x70, 0xfc, 0x6b, 0x17, 0x9a, 0x2c, 0x14, 0xb3, 0x45, 0xec, 0xce, 0xd7, 0x23, 0xbb, 0x6e, 0x17, 0x42, 0xf9, 0x1f, 0xff, 0xd6, 0x9e, 0x4d, 0x5f, 0x39, 0x2b, 0xc2, 0xe6, 0x30, 0xe1, 0x0f, 0xf2, 0x70, 0x31, 0x2e, 0xa7, 0x61, 0x75, 0x65, 0x3f, 0x21, 0xdd, 0x6d, 0xa0, 0xcc, 0xac, 0xd4, 0x34, 0xfb, 0xa4, 0xa0, 0xf5, 0x8a, 0xbe, 0x35, 0xc7, 0x9f, 0x1f, 0x79, 0x0b, 0xe7, 0x48, 0x35 }; static const uint8_t nist_186_2_ecdsa_testvector_106_private[] = { /* d - byte alignment */ 0x00, 0x5b, 0xa8, 0x71, 0x21, 0x9b, 0xd8, 0x03, 0x5f, 0xfe, 0x4f, 0xca, 0xfd, 0x38, 0x1f, 0x38, 0x02, 0x73, 0x46, 0x97, 0x00, 0xdb, 0x81, 0xb4, 0xb3, 0xab, 0x35, 0xe9, 0xe8, 0x82, 0x8b, 0x22, 0x7b, 0x97, 0x58, 0x7f }; static const uint8_t nist_186_2_ecdsa_testvector_106_public_x[] = { /* Qx - byte alignment */ 0x02, 0xac, 0x04, 0xf2, 0xa3, 0xfc, 0x49, 0x91, 0x2b, 0x16, 0x67, 0x75, 0xe6, 0xb2, 0x37, 0x15, 0x11, 0x64, 0xe9, 0x38, 0x11, 0x25, 0x76, 0x5c, 0x51, 0x2c, 0x4c, 0x23, 0x12, 0x21, 0xaa, 0x22, 0x13, 0x1a, 0xb7, 0xec }; static const uint8_t nist_186_2_ecdsa_testvector_106_public_y[] = { /* Qy - byte alignment */ 0x06, 0x5c, 0x18, 0x36, 0x2b, 0xb4, 0x6d, 0x48, 0x68, 0x3d, 0x14, 0xfe, 0xb3, 0xd0, 0x07, 0x88, 0xec, 0x13, 0xe2, 0xf4, 0xcb, 0xc2, 0x1e, 0x09, 0x4a, 0x76, 0xc1, 0x18, 0x3f, 0x0d, 0xb0, 0x0e, 0x52, 0x92, 0xb9, 0x38 }; /* k = 0f291f9fd39310ecbd8e6067e82f4d18c3b35a081d9ce2fb9d9f5847f80afd5074f76eb */ static const uint8_t nist_186_2_ecdsa_testvector_106_out[] = { /* R - byte alignment */ 0x00, 0xc1, 0xf8, 0xd8, 0x6e, 0xf4, 0x95, 0x78, 0x28, 0xab, 0x0a, 0xf8, 0x9a, 0x18, 0x2c, 0x54, 0x95, 0xd6, 0x4f, 0xb4, 0xb9, 0x16, 0x46, 0xb7, 0x82, 0x4c, 0x41, 0x9b, 0x7c, 0x92, 0xe6, 0x87, 0xd7, 0x6b, 0x88, 0xf3, /* S - byte alignment */ 0x00, 0x66, 0x79, 0x13, 0xe0, 0xcb, 0x09, 0xfe, 0x65, 0x65, 0xac, 0x5a, 0x27, 0xe6, 0x85, 0xc1, 0x76, 0x99, 0xcd, 0xaf, 0x44, 0x3d, 0xe3, 0xfb, 0xb6, 0x53, 0x77, 0x4f, 0xe2, 0x63, 0xb2, 0xed, 0xba, 0x0d, 0xac, 0xa3 }; static const uint8_t nist_186_2_ecdsa_testvector_107_ptx[] = { /* Msg */ 0xd8, 0xf7, 0xf3, 0xe9, 0x79, 0xdf, 0x1c, 0x0a, 0x81, 0xcc, 0x8c, 0x58, 0xfd, 0x62, 0xe2, 0x44, 0xad, 0x38, 0xf1, 0xa7, 0x13, 0x95, 0x71, 0xa9, 0xca, 0x77, 0xf3, 0xe3, 0x19, 0xda, 0x1b, 0xc0, 0xc8, 0x36, 0x09, 0x29, 0x32, 0x4a, 0x18, 0x61, 0x9c, 0x18, 0xcb, 0x2d, 0xc5, 0x31, 0x04, 0x39, 0xbe, 0x32, 0x77, 0xb7, 0xfc, 0x8f, 0x5f, 0x49, 0xac, 0x8f, 0x6f, 0x21, 0x46, 0x98, 0x0c, 0x66, 0x65, 0xad, 0xb9, 0xda, 0xd6, 0x35, 0xd3, 0xbb, 0xef, 0xfe, 0x7e, 0xe7, 0x22, 0x81, 0xdf, 0x43, 0xd2, 0x68, 0x8c, 0x5c, 0x64, 0x4d, 0x40, 0x4f, 0x9a, 0xc5, 0xd4, 0xe7, 0x1c, 0x9d, 0x6a, 0x06, 0x58, 0x63, 0xec, 0x46, 0x8c, 0x28, 0xb5, 0xdf, 0x21, 0x85, 0x8d, 0xcc, 0x3b, 0xdc, 0xdb, 0x29, 0x8e, 0xe0, 0x16, 0xe0, 0x73, 0x58, 0x7d, 0x84, 0x3b, 0x20, 0x08, 0x7d, 0xc3, 0x70, 0x9e, 0x66 }; static const uint8_t nist_186_2_ecdsa_testvector_107_private[] = { /* d - byte alignment */ 0x01, 0xf4, 0x12, 0x2e, 0x6b, 0xbf, 0xd5, 0x4c, 0x74, 0xc2, 0x09, 0x09, 0xb5, 0x17, 0xad, 0xca, 0x2a, 0xa6, 0x15, 0xa3, 0xa9, 0x70, 0xaf, 0x49, 0xf1, 0xb6, 0xd4, 0x82, 0xe5, 0x29, 0x55, 0x67, 0x8d, 0x90, 0x08, 0xca }; static const uint8_t nist_186_2_ecdsa_testvector_107_public_x[] = { /* Qx - byte alignment */ 0x07, 0xc9, 0x29, 0x09, 0x8f, 0x03, 0x9b, 0xd5, 0xb1, 0xcd, 0x28, 0x85, 0x45, 0xd2, 0xed, 0xa3, 0x52, 0x5a, 0x4f, 0xc3, 0x1b, 0x1c, 0x50, 0x50, 0x78, 0xb2, 0x1b, 0xd9, 0x33, 0x70, 0x6a, 0xa8, 0xa3, 0x09, 0x6c, 0x00 }; static const uint8_t nist_186_2_ecdsa_testvector_107_public_y[] = { /* Qy - byte alignment */ 0x01, 0xb9, 0x09, 0x6a, 0x35, 0x68, 0x91, 0xfe, 0xe0, 0xf7, 0xa3, 0x46, 0xf4, 0xa5, 0xc4, 0xfd, 0xa4, 0xb5, 0xac, 0xe8, 0x2b, 0xc3, 0xb6, 0x68, 0xe3, 0x1f, 0x50, 0x5d, 0x82, 0x11, 0x7a, 0xfb, 0x1e, 0x9b, 0x2d, 0xa6 }; /* k = 139c2fb0c80eb68c87b60947fdbcfc542f522b17684153bc6fc68abd76f97d1543dedd0 */ static const uint8_t nist_186_2_ecdsa_testvector_107_out[] = { /* R - byte alignment */ 0x01, 0x69, 0xac, 0x4c, 0x71, 0x42, 0xfd, 0x56, 0x29, 0xe9, 0x80, 0x0d, 0x4c, 0x80, 0xf2, 0x02, 0xba, 0x9b, 0xae, 0xb7, 0xf1, 0xbe, 0x25, 0xed, 0xb2, 0x49, 0xe1, 0x54, 0x2d, 0xd3, 0x0a, 0xf1, 0xce, 0x5e, 0x1d, 0x0a, /* S - byte alignment */ 0x00, 0x6e, 0x84, 0x72, 0xe5, 0x5f, 0x81, 0x7f, 0xcf, 0xf2, 0x88, 0x6f, 0x1b, 0x3d, 0x67, 0x54, 0xa6, 0x09, 0xe7, 0x25, 0xfc, 0x2c, 0xea, 0x17, 0x92, 0x07, 0xf4, 0x9d, 0xf0, 0x47, 0xac, 0x07, 0x38, 0x4f, 0x08, 0x1c }; static const uint8_t nist_186_2_ecdsa_testvector_108_ptx[] = { /* Msg */ 0xc8, 0x27, 0xf3, 0x8a, 0xc2, 0x4f, 0x78, 0x3c, 0x28, 0xf2, 0x5a, 0x7e, 0xec, 0x43, 0xc7, 0x51, 0x5d, 0x6d, 0x14, 0x4e, 0x04, 0xe2, 0xb8, 0x95, 0xcc, 0xef, 0x9c, 0x07, 0x67, 0x95, 0x92, 0xb5, 0xec, 0x94, 0x22, 0x97, 0xc5, 0xc8, 0x8d, 0x82, 0xc8, 0xb8, 0x0c, 0x54, 0xa4, 0x6d, 0x59, 0x72, 0x7f, 0x80, 0x70, 0x74, 0xdd, 0x77, 0x97, 0x1e, 0xc4, 0x52, 0x9c, 0x92, 0x1e, 0x60, 0x5e, 0xc5, 0x5e, 0x57, 0x8e, 0x30, 0x66, 0xa4, 0xb7, 0xc8, 0xa8, 0x00, 0x7c, 0x2f, 0x8c, 0x44, 0x22, 0x2c, 0x12, 0x7e, 0x4e, 0x59, 0xb9, 0x44, 0x0f, 0x1b, 0x9f, 0x48, 0x1e, 0xd7, 0xe9, 0x2d, 0x65, 0x63, 0x65, 0x99, 0xbf, 0xbb, 0x6e, 0x8c, 0xff, 0xf6, 0x11, 0xf0, 0x33, 0x78, 0x6e, 0x71, 0x2a, 0x68, 0x60, 0x8e, 0x33, 0x65, 0x60, 0xf0, 0x28, 0x74, 0xa6, 0xfb, 0xab, 0x3d, 0x92, 0xa4, 0xb0, 0x78 }; static const uint8_t nist_186_2_ecdsa_testvector_108_private[] = { /* d - byte alignment */ 0x01, 0x10, 0xac, 0xab, 0x54, 0xde, 0x0a, 0xee, 0x30, 0xf9, 0xcf, 0x6b, 0x02, 0xc7, 0xa4, 0x96, 0xe2, 0x19, 0xbc, 0x0a, 0x13, 0xf7, 0x45, 0xa5, 0xf5, 0xb9, 0xed, 0xbd, 0x9f, 0xa4, 0x81, 0xb9, 0x48, 0x5c, 0xea, 0x58 }; static const uint8_t nist_186_2_ecdsa_testvector_108_public_x[] = { /* Qx - byte alignment */ 0x04, 0xb1, 0x89, 0x0a, 0xcf, 0x9b, 0x84, 0xbb, 0xc2, 0x3f, 0xce, 0x4f, 0xcf, 0x05, 0x49, 0x93, 0xe3, 0xa2, 0x09, 0x05, 0x8e, 0x3f, 0x68, 0x70, 0xc9, 0xb9, 0xb7, 0x55, 0x2d, 0xbe, 0x4d, 0x01, 0xe6, 0xa5, 0x7a, 0x5b }; static const uint8_t nist_186_2_ecdsa_testvector_108_public_y[] = { /* Qy - byte alignment */ 0x05, 0xda, 0x10, 0xfb, 0x30, 0x80, 0xa0, 0x27, 0xfb, 0x1d, 0x8c, 0x06, 0x66, 0x11, 0xad, 0x52, 0x9f, 0x2f, 0x22, 0x58, 0xfb, 0xed, 0x2b, 0xde, 0x4c, 0x44, 0x1a, 0x41, 0x59, 0xf4, 0x3f, 0x35, 0x49, 0x3c, 0xd7, 0xbc }; /* k = 18b3ca7f07bd7598ff56b8039eb37b38771ccf2bf01943188001636ef35303a603ffa6f */ static const uint8_t nist_186_2_ecdsa_testvector_108_out[] = { /* R - byte alignment */ 0x00, 0xba, 0x25, 0x30, 0xcc, 0x00, 0xb0, 0xc5, 0x5f, 0xdd, 0x5c, 0x37, 0xcc, 0x37, 0xb6, 0x8e, 0x9b, 0x9f, 0x88, 0xaa, 0x26, 0x4b, 0x57, 0x6e, 0x9f, 0x60, 0xad, 0xf0, 0xef, 0x41, 0x92, 0x11, 0x5f, 0xd2, 0x07, 0x05, /* S - byte alignment */ 0x01, 0x1b, 0x07, 0x37, 0x0a, 0xe7, 0x1d, 0x82, 0x1f, 0xd5, 0x70, 0xbc, 0x3d, 0x25, 0xf0, 0x85, 0x98, 0x48, 0x13, 0x03, 0x07, 0x0a, 0xa9, 0x4b, 0x99, 0xc9, 0x56, 0x2e, 0xf2, 0xc9, 0x7e, 0x06, 0x04, 0x85, 0xa6, 0xd4 }; static const uint8_t nist_186_2_ecdsa_testvector_109_ptx[] = { /* Msg */ 0x75, 0xea, 0xda, 0x8d, 0x9f, 0xda, 0x06, 0x5d, 0x74, 0xca, 0x2d, 0x45, 0xe7, 0x2f, 0x01, 0xfd, 0x5f, 0x27, 0x3a, 0x31, 0x68, 0x5c, 0xe6, 0x84, 0xa8, 0x2c, 0x00, 0xd5, 0x16, 0x08, 0x45, 0xc1, 0x66, 0x1a, 0x43, 0x69, 0xc7, 0x2b, 0xb3, 0x75, 0xd1, 0xc3, 0x08, 0x59, 0xb9, 0x92, 0x48, 0xd6, 0xc8, 0x0e, 0x1b, 0xc4, 0x0b, 0x5e, 0x22, 0x10, 0x4b, 0x77, 0x89, 0x01, 0x3f, 0x85, 0xe0, 0xbf, 0x01, 0x8c, 0x26, 0x15, 0xbf, 0x4f, 0x27, 0x76, 0xb3, 0x71, 0x09, 0x3e, 0x55, 0xda, 0x21, 0x3b, 0xcf, 0x5c, 0x0b, 0x6c, 0xb1, 0x96, 0xf9, 0x08, 0xe6, 0x19, 0x4b, 0xc2, 0xe7, 0xca, 0x60, 0x4c, 0x2e, 0x88, 0xac, 0x1a, 0xee, 0x0e, 0x0b, 0x68, 0x01, 0x1a, 0x55, 0x7e, 0x21, 0xcf, 0x33, 0x33, 0x5c, 0x57, 0x31, 0xb0, 0xc2, 0xce, 0x14, 0x76, 0x61, 0x5b, 0x6d, 0xa3, 0x73, 0xa0, 0x6e, 0x70 }; static const uint8_t nist_186_2_ecdsa_testvector_109_private[] = { /* d - byte alignment */ 0x01, 0x4c, 0xb8, 0x48, 0x03, 0x78, 0x9e, 0x2b, 0xb7, 0x1e, 0xf8, 0x4e, 0xb2, 0xbd, 0x35, 0xa3, 0xed, 0x51, 0x61, 0xf9, 0xc8, 0x95, 0xf5, 0x30, 0x37, 0xef, 0xf8, 0x35, 0x2d, 0xe6, 0x10, 0x71, 0xc1, 0xc1, 0x0a, 0x22 }; static const uint8_t nist_186_2_ecdsa_testvector_109_public_x[] = { /* Qx - byte alignment */ 0x03, 0xdb, 0x6c, 0x52, 0x07, 0x76, 0xe5, 0x85, 0x7b, 0x1c, 0xf7, 0xf0, 0xc2, 0xff, 0x5a, 0xf8, 0x9f, 0x32, 0x9b, 0xe2, 0x73, 0xa8, 0xd7, 0xb6, 0x28, 0xc0, 0x08, 0xa6, 0x62, 0x7d, 0xdf, 0x08, 0x45, 0xa7, 0x98, 0x30 }; static const uint8_t nist_186_2_ecdsa_testvector_109_public_y[] = { /* Qy - byte alignment */ 0x02, 0xdc, 0x68, 0xac, 0x24, 0x69, 0xaf, 0x1b, 0xfa, 0x7c, 0xc7, 0xde, 0x61, 0x46, 0x6a, 0xd9, 0xf1, 0x64, 0xa0, 0x2d, 0x65, 0x42, 0x8f, 0xef, 0x7e, 0x57, 0x6a, 0xa5, 0x51, 0x79, 0x09, 0xb0, 0x00, 0xf3, 0x40, 0xaa }; /* k = 1dc37802ec3d06d3fa6e665214a5e7ca7dc6e51584af57edfdf6c2171e89c29fbd5bc0b */ static const uint8_t nist_186_2_ecdsa_testvector_109_out[] = { /* R - byte alignment */ 0x01, 0xfa, 0x2d, 0xd3, 0xcd, 0x44, 0x95, 0xe9, 0x21, 0x8e, 0x1f, 0x6e, 0x19, 0xe3, 0x38, 0x66, 0x68, 0xc5, 0x69, 0x77, 0x3b, 0x51, 0xd5, 0xf0, 0xe2, 0x15, 0x8a, 0xf9, 0x4d, 0x98, 0xa7, 0x90, 0x7b, 0x52, 0xf8, 0x18, /* S - byte alignment */ 0x00, 0xe8, 0x56, 0x1e, 0x4c, 0xb6, 0x76, 0xce, 0x73, 0xe3, 0xbd, 0xed, 0x25, 0x72, 0xcc, 0xb3, 0x68, 0xca, 0xb7, 0xb7, 0x56, 0x2a, 0x18, 0x4f, 0xcd, 0x58, 0x28, 0x41, 0x57, 0x48, 0x00, 0x24, 0xfd, 0x14, 0x46, 0x94 }; static const uint8_t nist_186_2_ecdsa_testvector_110_ptx[] = { /* Msg */ 0x3f, 0x30, 0x1e, 0x82, 0x81, 0xf0, 0x90, 0x55, 0xc5, 0x29, 0x15, 0x7b, 0x76, 0xed, 0x84, 0x3b, 0x50, 0x58, 0x9b, 0x2e, 0x14, 0x74, 0x4d, 0x45, 0x80, 0x5a, 0x5d, 0x0d, 0x7e, 0x9a, 0x2c, 0x32, 0x9c, 0xdd, 0xd0, 0x43, 0xbc, 0xc9, 0x65, 0xb4, 0x0c, 0x25, 0xa8, 0x29, 0x39, 0x3e, 0xc2, 0xf2, 0xe0, 0x89, 0x61, 0xd1, 0x46, 0x89, 0x0d, 0x04, 0x48, 0xf3, 0xba, 0x7f, 0x95, 0x11, 0x99, 0x7a, 0x1a, 0x64, 0x34, 0x2b, 0xbe, 0x8d, 0xba, 0xd5, 0x50, 0x6e, 0x97, 0x01, 0xbd, 0x8c, 0x48, 0x0b, 0x87, 0xb7, 0x6e, 0xe1, 0x72, 0xee, 0x21, 0x08, 0x81, 0x7d, 0x86, 0xe0, 0x20, 0x68, 0xa4, 0x28, 0xa3, 0x0c, 0x73, 0xc4, 0xef, 0x04, 0x36, 0xbe, 0x77, 0x4a, 0x0b, 0x8c, 0x6b, 0x9e, 0xc1, 0x91, 0x2b, 0x2c, 0xe9, 0xe6, 0x02, 0x69, 0x30, 0x59, 0x11, 0x3e, 0xec, 0xb6, 0x89, 0x68, 0xf4, 0x46 }; static const uint8_t nist_186_2_ecdsa_testvector_110_private[] = { /* d - byte alignment */ 0x00, 0xc8, 0xd5, 0x48, 0x6a, 0x78, 0x1e, 0x1e, 0x3d, 0xa0, 0x0f, 0x48, 0x8e, 0x6c, 0xc7, 0x64, 0x42, 0xfb, 0x96, 0xb3, 0x86, 0xdf, 0xd4, 0xf9, 0x8f, 0x64, 0x61, 0x10, 0xd7, 0xde, 0x44, 0x14, 0xcb, 0x17, 0x86, 0xf7 }; static const uint8_t nist_186_2_ecdsa_testvector_110_public_x[] = { /* Qx - byte alignment */ 0x03, 0x79, 0x06, 0xd4, 0xf2, 0xfb, 0xaf, 0x1e, 0x35, 0x35, 0x7e, 0xcc, 0xc6, 0xfd, 0xe7, 0xe1, 0xce, 0x23, 0x8c, 0xfd, 0x86, 0xa1, 0xe0, 0x1b, 0xb3, 0x12, 0x50, 0x80, 0xb5, 0x43, 0x44, 0xe0, 0x0f, 0x30, 0xdb, 0x42 }; static const uint8_t nist_186_2_ecdsa_testvector_110_public_y[] = { /* Qy - byte alignment */ 0x01, 0xd3, 0x3f, 0xfa, 0x8b, 0x33, 0xb3, 0xcb, 0x3c, 0xc4, 0x0e, 0x31, 0x71, 0x48, 0x61, 0x66, 0x72, 0xfe, 0xa4, 0x44, 0xdc, 0x58, 0x67, 0x2b, 0x2e, 0xff, 0x9a, 0xea, 0x53, 0xb1, 0x51, 0x64, 0x58, 0x03, 0x81, 0x12 }; /* k = 01121d761d048f9792b699e0130cde517e5170c9f898457e72604791053bba2a7efee9a */ static const uint8_t nist_186_2_ecdsa_testvector_110_out[] = { /* R - byte alignment */ 0x00, 0x91, 0xb7, 0x67, 0x07, 0x5b, 0x3a, 0xbf, 0xe2, 0x20, 0xb0, 0xf6, 0xbd, 0x05, 0x71, 0x41, 0xb8, 0x5c, 0x21, 0x5b, 0x37, 0x49, 0x00, 0xe7, 0xff, 0x67, 0x52, 0x8c, 0xa8, 0x02, 0x14, 0x26, 0xe5, 0xec, 0x4a, 0x5d, /* S - byte alignment */ 0x00, 0xda, 0x1f, 0x7d, 0x29, 0xe0, 0x24, 0x49, 0x52, 0x41, 0xe1, 0x71, 0x96, 0x5d, 0xb5, 0x50, 0xdc, 0x40, 0x80, 0xe8, 0x8b, 0x7b, 0xfc, 0xf2, 0xee, 0x90, 0x24, 0x3d, 0xe0, 0x9e, 0x79, 0xd4, 0x90, 0x98, 0x13, 0x70 }; static const uint8_t nist_186_2_ecdsa_testvector_111_ptx[] = { /* Msg */ 0x79, 0x51, 0xcb, 0xcb, 0x32, 0xb5, 0x33, 0x19, 0xf8, 0x93, 0x49, 0x04, 0xec, 0xda, 0x51, 0x94, 0x87, 0x6b, 0xba, 0x4b, 0xd2, 0x7b, 0xf2, 0xa9, 0xda, 0x38, 0x7f, 0xf6, 0x5e, 0xaf, 0x4c, 0x3b, 0xcc, 0xed, 0x40, 0x92, 0x6c, 0x64, 0x15, 0x9f, 0xda, 0x91, 0x68, 0x5f, 0xb9, 0xdc, 0x0c, 0x20, 0xa6, 0xc0, 0xa4, 0xd1, 0x6b, 0x2b, 0x71, 0x7c, 0x75, 0x28, 0x68, 0x11, 0x89, 0xbb, 0x88, 0x65, 0xb2, 0x0c, 0x6a, 0x7a, 0x7e, 0xc8, 0x1a, 0x01, 0x69, 0xc5, 0x25, 0x1d, 0x9a, 0xe5, 0xf3, 0x6a, 0xcd, 0x3c, 0x57, 0x3e, 0x91, 0x75, 0x65, 0x2f, 0xb3, 0x71, 0x84, 0xd5, 0xfa, 0x32, 0xc4, 0xd1, 0x14, 0xf8, 0x71, 0x0d, 0xd1, 0xa9, 0xe8, 0x46, 0x8f, 0x76, 0xa9, 0xc8, 0xf6, 0xbc, 0xae, 0x79, 0xe5, 0x28, 0xfb, 0x19, 0xab, 0x1f, 0x77, 0xc8, 0x7b, 0x5d, 0xfa, 0xc9, 0x1a, 0xdc, 0xa7, 0x85 }; static const uint8_t nist_186_2_ecdsa_testvector_111_private[] = { /* d - byte alignment */ 0x00, 0xff, 0x58, 0x02, 0xe7, 0x58, 0x94, 0x55, 0xfe, 0x8e, 0x87, 0x75, 0x6a, 0x7c, 0xb7, 0x21, 0x4e, 0x73, 0x70, 0x1b, 0xd6, 0x35, 0x70, 0x97, 0x13, 0xb5, 0xbe, 0x4b, 0xcb, 0xe5, 0x10, 0x91, 0xcb, 0xab, 0x25, 0x80 }; static const uint8_t nist_186_2_ecdsa_testvector_111_public_x[] = { /* Qx - byte alignment */ 0x06, 0x42, 0xf1, 0x1a, 0xc3, 0xbd, 0x7e, 0xff, 0x65, 0x01, 0x77, 0x66, 0x33, 0xa1, 0x0c, 0x14, 0x23, 0x3c, 0xc6, 0x56, 0xf8, 0x89, 0x15, 0xcd, 0x90, 0x48, 0xa4, 0xfc, 0x41, 0x19, 0xb1, 0x82, 0xa0, 0xe7, 0x84, 0x47 }; static const uint8_t nist_186_2_ecdsa_testvector_111_public_y[] = { /* Qy - byte alignment */ 0x02, 0x5f, 0x7e, 0xa4, 0x34, 0xdb, 0xab, 0x0c, 0x2c, 0x4c, 0xd7, 0x75, 0xcf, 0x3d, 0x8c, 0xb7, 0x18, 0x9e, 0x47, 0xf1, 0x0e, 0x40, 0xde, 0xaa, 0x47, 0xf0, 0x56, 0x80, 0x9c, 0xb1, 0x62, 0xd2, 0x8e, 0xb3, 0x2b, 0xb2 }; /* k = 13dbae9d89dd59876b87934fd6025084d6bdbe946f1bee4a173665063f9af9d61b5e92f */ static const uint8_t nist_186_2_ecdsa_testvector_111_out[] = { /* R - byte alignment */ 0x01, 0xeb, 0x31, 0x93, 0x04, 0xff, 0xd6, 0xdc, 0xce, 0x3b, 0x57, 0x32, 0xe3, 0x42, 0x19, 0x6b, 0x48, 0x27, 0xde, 0xc3, 0x16, 0x85, 0x81, 0xc8, 0x65, 0x78, 0x82, 0xbb, 0xc5, 0xe2, 0x7e, 0x73, 0xa2, 0x73, 0x6b, 0x90, /* S - byte alignment */ 0x00, 0x29, 0xcf, 0xcc, 0x7e, 0xff, 0x79, 0x15, 0xe1, 0xd4, 0xc8, 0xb7, 0x0f, 0xda, 0x11, 0x86, 0xc7, 0xfe, 0xab, 0x22, 0xd7, 0x58, 0xbc, 0x10, 0x28, 0x51, 0xfa, 0x9b, 0xa5, 0x6c, 0x31, 0xf6, 0x21, 0xc1, 0xbb, 0xa4 }; static const uint8_t nist_186_2_ecdsa_testvector_112_ptx[] = { /* Msg */ 0x9c, 0x84, 0x64, 0x69, 0x1a, 0xb7, 0xfe, 0x42, 0xe0, 0xb5, 0x54, 0x8c, 0x56, 0x95, 0x33, 0xb8, 0xbe, 0xdf, 0x11, 0x2e, 0x69, 0xf0, 0xe6, 0xda, 0x2b, 0x9f, 0x3d, 0xe7, 0x0c, 0x20, 0x8a, 0xca, 0x40, 0x29, 0xbe, 0x83, 0x5a, 0x54, 0x19, 0x1f, 0xbc, 0xc5, 0x3f, 0x82, 0x52, 0x0c, 0x8f, 0x63, 0x80, 0x4c, 0xb0, 0x98, 0x58, 0x9d, 0x6c, 0x94, 0x11, 0xb0, 0xc2, 0x2e, 0xb4, 0xb2, 0x36, 0xa4, 0x19, 0x72, 0x6c, 0xdf, 0x12, 0xc5, 0xf5, 0xf8, 0xe6, 0x2a, 0x69, 0xfc, 0x01, 0xaa, 0xb6, 0xec, 0xe9, 0x02, 0xb7, 0x08, 0x74, 0x04, 0x09, 0x4d, 0x39, 0x3b, 0x1a, 0x3d, 0x44, 0xce, 0x82, 0xde, 0x0e, 0xa6, 0x97, 0x05, 0xac, 0xd3, 0x3b, 0xd4, 0x46, 0x2c, 0xf9, 0x82, 0xcb, 0x36, 0x51, 0x5a, 0xe3, 0x48, 0x4f, 0x07, 0x25, 0xec, 0x63, 0x0e, 0x8b, 0x87, 0x6c, 0x9c, 0x22, 0x3d, 0x16, 0x82 }; static const uint8_t nist_186_2_ecdsa_testvector_112_private[] = { /* d - byte alignment */ 0x00, 0x3f, 0xf4, 0x93, 0x07, 0x06, 0x3d, 0xe1, 0x26, 0x27, 0x1b, 0xa6, 0x65, 0x00, 0x9c, 0x1a, 0xb2, 0x7b, 0xe4, 0x12, 0xbe, 0xe1, 0xc6, 0x15, 0xc9, 0x6b, 0x26, 0x6a, 0xb7, 0x13, 0x24, 0xf0, 0x11, 0x61, 0x9f, 0x3a }; static const uint8_t nist_186_2_ecdsa_testvector_112_public_x[] = { /* Qx - byte alignment */ 0x01, 0x08, 0x8d, 0x92, 0x98, 0x98, 0xc3, 0xae, 0xcd, 0x20, 0x94, 0xb6, 0xd5, 0x2b, 0x6b, 0xa1, 0x0c, 0x5f, 0xd6, 0x3a, 0x73, 0xea, 0xd1, 0x50, 0x77, 0x0a, 0x9d, 0xaa, 0x98, 0xb1, 0x26, 0xfc, 0x0e, 0x21, 0xd1, 0x79 }; static const uint8_t nist_186_2_ecdsa_testvector_112_public_y[] = { /* Qy - byte alignment */ 0x06, 0x0c, 0x27, 0x16, 0x3f, 0xc8, 0x4d, 0xc5, 0xb4, 0xe5, 0xa4, 0x78, 0xeb, 0x4e, 0xf8, 0xbf, 0xbb, 0xdb, 0xfa, 0x52, 0xd1, 0xbe, 0xf0, 0xb8, 0xa2, 0x4f, 0xe4, 0x8d, 0x9c, 0xf2, 0x36, 0x0a, 0x18, 0x85, 0xe0, 0x91 }; /* k = 1d304d9fc85e8e31cf7ab232dd851341db971c67c83b1f5e3312f53b4d2df053db2b9d7 */ static const uint8_t nist_186_2_ecdsa_testvector_112_out[] = { /* R - byte alignment */ 0x01, 0xd9, 0xcc, 0x14, 0xaf, 0x94, 0x23, 0x07, 0x80, 0x24, 0x66, 0x12, 0x38, 0xb5, 0xe4, 0x9b, 0x20, 0xfe, 0x8e, 0x98, 0x9e, 0x6b, 0xe6, 0x95, 0xd8, 0x0a, 0xab, 0xb7, 0xf4, 0x9b, 0xe0, 0xf3, 0x24, 0x9d, 0x7d, 0x84, /* S - byte alignment */ 0x01, 0xff, 0x18, 0x9c, 0x0c, 0x55, 0x77, 0xb6, 0xcf, 0x7f, 0xde, 0x2c, 0xf6, 0xf7, 0x11, 0x59, 0x0c, 0xbc, 0x58, 0x3d, 0x61, 0xef, 0x19, 0x4e, 0xa2, 0x89, 0x97, 0x0c, 0x4c, 0x18, 0x34, 0x6d, 0x80, 0xf7, 0xcd, 0x12 }; static const uint8_t nist_186_2_ecdsa_testvector_113_ptx[] = { /* Msg */ 0x37, 0xf2, 0x2d, 0x64, 0x75, 0xd3, 0xf9, 0xf4, 0x2c, 0xbe, 0x47, 0x1b, 0xc3, 0x0d, 0x5d, 0x16, 0x5b, 0xf0, 0xf5, 0xcb, 0x0d, 0xaa, 0x9a, 0xa1, 0x72, 0xfd, 0x55, 0x95, 0x69, 0xe2, 0x89, 0x8b, 0x14, 0x7e, 0x1c, 0xe1, 0x24, 0x52, 0xd7, 0x4a, 0x57, 0xb2, 0x10, 0xda, 0x3e, 0x78, 0x86, 0x5d, 0x44, 0xf9, 0x8c, 0xed, 0xec, 0x38, 0x6a, 0xc4, 0x5a, 0x5a, 0x00, 0x4e, 0x15, 0x5a, 0xac, 0x82, 0x0b, 0xfe, 0x6e, 0x73, 0xd6, 0x0a, 0x4a, 0x22, 0x3d, 0xb3, 0xee, 0x97, 0xfe, 0x56, 0x95, 0x30, 0xcb, 0x6a, 0x2b, 0x38, 0x92, 0xb4, 0xb2, 0xbb, 0x01, 0xb9, 0xe4, 0x99, 0x4a, 0x79, 0x1a, 0xda, 0x23, 0x5a, 0x6c, 0x41, 0x11, 0x63, 0x1a, 0x24, 0xe7, 0xaa, 0x2b, 0x7b, 0x89, 0x10, 0x53, 0x36, 0xf6, 0x2b, 0x1a, 0xd4, 0x86, 0x84, 0x3b, 0x31, 0x70, 0x03, 0x4a, 0x9f, 0x8e, 0xa7, 0x9a, 0x39 }; static const uint8_t nist_186_2_ecdsa_testvector_113_private[] = { /* d - byte alignment */ 0x01, 0xe5, 0x69, 0x3c, 0xfc, 0xe0, 0xf4, 0x1b, 0x4f, 0xaf, 0xbd, 0x6b, 0x44, 0xd4, 0x93, 0x65, 0x12, 0x15, 0xe2, 0x5a, 0xfe, 0x3f, 0x40, 0x3d, 0x3f, 0x45, 0xc7, 0x3a, 0x87, 0x9d, 0xf7, 0xf3, 0x42, 0x5b, 0xde, 0x81 }; static const uint8_t nist_186_2_ecdsa_testvector_113_public_x[] = { /* Qx - byte alignment */ 0x01, 0xad, 0xf6, 0x7f, 0x4b, 0x2f, 0xba, 0xcf, 0x3f, 0xa8, 0x65, 0x67, 0xcd, 0x54, 0xdc, 0x86, 0x85, 0x62, 0x39, 0x1a, 0x06, 0xd6, 0x11, 0xf1, 0xbc, 0xc0, 0x5c, 0x0e, 0x4a, 0xad, 0x28, 0x5c, 0x99, 0x13, 0x5a, 0xa9 }; static const uint8_t nist_186_2_ecdsa_testvector_113_public_y[] = { /* Qy - byte alignment */ 0x05, 0x2f, 0x13, 0x75, 0xee, 0xec, 0x12, 0xf4, 0x4d, 0x0d, 0x18, 0x67, 0x04, 0x73, 0xf2, 0x4f, 0xee, 0xb3, 0x82, 0x0b, 0xf5, 0x0a, 0x57, 0x45, 0x41, 0xbe, 0xc0, 0x97, 0x11, 0x67, 0x6e, 0xf7, 0xc0, 0xa9, 0x1b, 0x2b }; /* k = 16706bb67cc99d89560a49ba21a1644ae83e22f5bc1be388343dfca768536b5220204a0 */ static const uint8_t nist_186_2_ecdsa_testvector_113_out[] = { /* R - byte alignment */ 0x00, 0xc9, 0xad, 0xd0, 0x5e, 0xec, 0x55, 0xf4, 0x28, 0xba, 0x4d, 0xd3, 0xbc, 0xba, 0xbe, 0x90, 0xb6, 0xa7, 0xc1, 0xb7, 0x1c, 0x28, 0xce, 0x25, 0x59, 0x84, 0xf0, 0xf0, 0x89, 0xf4, 0x0a, 0x6d, 0x15, 0xf7, 0x37, 0x74, /* S - byte alignment */ 0x00, 0x50, 0x46, 0x50, 0x03, 0x3a, 0x44, 0x8b, 0xcc, 0xfb, 0xb1, 0x77, 0x83, 0x88, 0xac, 0x6a, 0x28, 0xe4, 0x85, 0x85, 0x77, 0x74, 0x00, 0xd6, 0xf3, 0xdf, 0xbf, 0x74, 0x2c, 0x5d, 0x7b, 0x70, 0x1a, 0xa5, 0x5e, 0xa0 }; static const uint8_t nist_186_2_ecdsa_testvector_114_ptx[] = { /* Msg */ 0xc9, 0x49, 0xc2, 0x96, 0xd1, 0xae, 0x5a, 0xbe, 0xcb, 0xa3, 0x13, 0x0d, 0xae, 0xd2, 0x3b, 0xad, 0xc3, 0xf0, 0x0b, 0x05, 0xac, 0xa9, 0xcc, 0x45, 0xa4, 0xd6, 0x3d, 0x3e, 0x08, 0xf6, 0x39, 0x78, 0x17, 0xdc, 0x95, 0x7e, 0xf6, 0xa5, 0x48, 0x7d, 0xf6, 0xed, 0xce, 0x0d, 0x1a, 0x43, 0xce, 0x4f, 0xd4, 0xd9, 0xfa, 0x38, 0x10, 0x80, 0x36, 0x2c, 0x73, 0xd4, 0xfd, 0xcf, 0xe5, 0xb4, 0x01, 0x18, 0x4d, 0xf6, 0x12, 0xa7, 0x9b, 0x58, 0x41, 0x58, 0x0c, 0xb9, 0x45, 0x18, 0xa9, 0x89, 0x1e, 0xf7, 0x12, 0x7e, 0xf8, 0x7f, 0x79, 0x88, 0x51, 0x44, 0xf1, 0x08, 0x5e, 0xbd, 0xe9, 0x3d, 0xab, 0x52, 0xf3, 0xfe, 0x03, 0xb6, 0xcb, 0xaf, 0x8f, 0x77, 0x94, 0x6e, 0x41, 0xd4, 0x64, 0x8d, 0x74, 0xce, 0x03, 0x45, 0xcc, 0x82, 0xf0, 0xa8, 0x64, 0xb5, 0xa5, 0xd8, 0x28, 0xb1, 0x1c, 0x77, 0x7f, 0x50 }; static const uint8_t nist_186_2_ecdsa_testvector_114_private[] = { /* d - byte alignment */ 0x00, 0x2f, 0xdd, 0xd8, 0xf3, 0xe8, 0x14, 0x0b, 0x9a, 0x06, 0x6b, 0x80, 0x40, 0x2d, 0xb5, 0xb3, 0x45, 0xbf, 0x89, 0x8d, 0x80, 0xae, 0xd2, 0xd0, 0xe3, 0xa0, 0x7c, 0x27, 0xd8, 0x7d, 0xaf, 0x27, 0x76, 0x93, 0x25, 0xc4 }; static const uint8_t nist_186_2_ecdsa_testvector_114_public_x[] = { /* Qx - byte alignment */ 0x01, 0xfe, 0x5f, 0x36, 0xa1, 0xac, 0x57, 0x70, 0x03, 0xc8, 0x8e, 0xa4, 0xa0, 0x95, 0x70, 0x4f, 0x39, 0xef, 0xbb, 0x44, 0xdf, 0xe2, 0x1f, 0x33, 0xc2, 0xeb, 0x84, 0xfe, 0x77, 0x80, 0x91, 0x94, 0x06, 0x24, 0xff, 0xa4 }; static const uint8_t nist_186_2_ecdsa_testvector_114_public_y[] = { /* Qy - byte alignment */ 0x02, 0x75, 0x4c, 0x7b, 0xde, 0x4c, 0x7c, 0xc0, 0x5f, 0x6b, 0x30, 0x8b, 0xa8, 0x72, 0x50, 0x18, 0x00, 0xea, 0xc3, 0x8d, 0x52, 0x2d, 0xf0, 0xc6, 0x04, 0x70, 0xce, 0xa1, 0xab, 0x10, 0xb2, 0x95, 0xe2, 0x84, 0x1c, 0x6c }; /* k = 1f0682ed3f910946c617e385c78b410104ed341d4fc3068958980ad1955a2516d553380 */ static const uint8_t nist_186_2_ecdsa_testvector_114_out[] = { /* R - byte alignment */ 0x00, 0x59, 0x93, 0x2e, 0x17, 0x60, 0x54, 0x7c, 0x91, 0xa5, 0x0f, 0x4d, 0x9b, 0xf6, 0x33, 0xe7, 0x2f, 0x5f, 0x96, 0x3b, 0x79, 0x3f, 0x16, 0xe6, 0xbe, 0xa3, 0x59, 0xa7, 0xd4, 0xf8, 0x1e, 0xee, 0x16, 0xb1, 0xf8, 0xcd, /* S - byte alignment */ 0x00, 0xda, 0x9e, 0x43, 0x7b, 0x65, 0x01, 0x93, 0x73, 0x1a, 0xbb, 0xb9, 0x2f, 0xdd, 0x57, 0x50, 0x78, 0xdf, 0x41, 0x1b, 0xc4, 0xbb, 0x12, 0xfc, 0xf3, 0x3f, 0xa4, 0xe0, 0xed, 0xad, 0x9a, 0xff, 0x3a, 0x90, 0xac, 0xa5 }; static const uint8_t nist_186_2_ecdsa_testvector_115_ptx[] = { /* Msg */ 0x89, 0xa5, 0x35, 0x8b, 0x6c, 0x4f, 0x82, 0x01, 0x30, 0xd2, 0xcf, 0xde, 0x90, 0x0d, 0x49, 0x26, 0xcf, 0x47, 0xf4, 0x63, 0xa0, 0x7b, 0xa8, 0x9b, 0x44, 0xf2, 0x59, 0x7f, 0xf2, 0x17, 0x9b, 0xe5, 0x7b, 0x88, 0x64, 0x78, 0x2e, 0x69, 0x14, 0xae, 0xf9, 0xfd, 0xb4, 0xfb, 0xd2, 0x77, 0x7b, 0x45, 0x55, 0x0d, 0x97, 0x97, 0xaf, 0x4f, 0x2a, 0x19, 0xba, 0xb7, 0x92, 0x40, 0x69, 0x81, 0xed, 0x42, 0x67, 0xbc, 0xdc, 0xcd, 0xfb, 0xa2, 0x88, 0xf8, 0x2f, 0x25, 0xe3, 0x7a, 0x31, 0xca, 0x31, 0x19, 0xf9, 0xba, 0xc6, 0x66, 0x2c, 0x17, 0x11, 0xa8, 0x41, 0x8c, 0xd9, 0x16, 0xe2, 0x28, 0xc7, 0x49, 0x95, 0x6c, 0x25, 0xf0, 0x9b, 0xa2, 0xe5, 0xc6, 0x18, 0x71, 0xe5, 0xc1, 0x75, 0xaf, 0x71, 0x8c, 0x03, 0x76, 0x0a, 0x38, 0xe1, 0x7a, 0x65, 0x2f, 0x1f, 0x99, 0xb7, 0x69, 0x23, 0xb4, 0x30, 0xe2 }; static const uint8_t nist_186_2_ecdsa_testvector_115_private[] = { /* d - byte alignment */ 0x01, 0xda, 0x9c, 0x38, 0x43, 0x43, 0xe2, 0xde, 0x38, 0xa1, 0x5f, 0x27, 0x68, 0x64, 0x6f, 0x63, 0x26, 0x4e, 0xa5, 0x7b, 0xe6, 0x61, 0x59, 0x15, 0x53, 0x20, 0x08, 0x7b, 0x18, 0x41, 0x80, 0x44, 0x0d, 0x76, 0x75, 0xd0 }; static const uint8_t nist_186_2_ecdsa_testvector_115_public_x[] = { /* Qx - byte alignment */ 0x03, 0xd0, 0x5a, 0x98, 0xcc, 0x74, 0x68, 0xbc, 0xcb, 0x23, 0x37, 0x32, 0xa9, 0xa3, 0x8f, 0x60, 0x42, 0x25, 0x61, 0x9c, 0xd6, 0x16, 0x74, 0x70, 0xcf, 0xd7, 0xc5, 0x57, 0x05, 0xa8, 0x29, 0xf0, 0x55, 0xc2, 0x34, 0x54 }; static const uint8_t nist_186_2_ecdsa_testvector_115_public_y[] = { /* Qy - byte alignment */ 0x06, 0x30, 0x34, 0xb8, 0xc1, 0x2c, 0xbc, 0x1d, 0x6d, 0x01, 0xfe, 0x64, 0x6f, 0xbf, 0xde, 0x6e, 0x4f, 0xfb, 0x9b, 0xa1, 0x65, 0xce, 0x1b, 0x7e, 0xcb, 0xad, 0x60, 0x81, 0x2d, 0x22, 0x07, 0x4e, 0x65, 0xc9, 0x5e, 0xcb }; /* k = 1f2c34ee3c4a2c2d9504b4c560c572f0c9e713dabcc215e784314fecfb2c3b771fe6362 */ static const uint8_t nist_186_2_ecdsa_testvector_115_out[] = { /* R - byte alignment */ 0x01, 0x3b, 0x10, 0xfb, 0xc3, 0x3d, 0xc4, 0xd0, 0xcf, 0x16, 0x72, 0xae, 0x57, 0x7b, 0x70, 0xf8, 0x22, 0x3e, 0x9c, 0x64, 0x8b, 0x9a, 0x79, 0x18, 0x80, 0xb3, 0xd5, 0x74, 0x5a, 0x80, 0x5f, 0xa4, 0x2c, 0x99, 0xe7, 0xc5, /* S - byte alignment */ 0x01, 0xa4, 0x24, 0xc8, 0x6e, 0x66, 0x15, 0xa7, 0x1b, 0x61, 0x7d, 0xee, 0x72, 0xa8, 0xe4, 0x97, 0x02, 0x18, 0x2b, 0x36, 0x06, 0x98, 0xba, 0x5f, 0x06, 0xdd, 0xda, 0x19, 0x3f, 0xa6, 0xf3, 0x6b, 0xfd, 0xcb, 0xfe, 0xae }; static const uint8_t nist_186_2_ecdsa_testvector_116_ptx[] = { /* Msg */ 0x5e, 0x78, 0x56, 0xa7, 0xa6, 0xcb, 0x24, 0x2f, 0x7f, 0x27, 0x91, 0x9f, 0x46, 0xcd, 0xf0, 0xd2, 0xf8, 0x14, 0x47, 0x88, 0xe7, 0x53, 0xa3, 0x67, 0xb2, 0x01, 0xaf, 0x3f, 0x73, 0x1b, 0x85, 0x92, 0x3a, 0xc6, 0xc4, 0x54, 0xbb, 0x36, 0xe3, 0xef, 0x43, 0xce, 0xc5, 0x8a, 0xf1, 0x89, 0x8d, 0x8b, 0x22, 0x98, 0xb3, 0x5a, 0x2d, 0x4d, 0x58, 0x68, 0x51, 0x37, 0xd6, 0x71, 0xeb, 0x8f, 0x9c, 0xfe, 0xec, 0xd2, 0x39, 0x2d, 0x8b, 0xb0, 0xb6, 0xb4, 0x37, 0x25, 0x29, 0x24, 0xd0, 0xe6, 0x87, 0x6b, 0x16, 0xfe, 0xba, 0x9d, 0x62, 0xb9, 0xf3, 0xf4, 0x94, 0xc1, 0x42, 0x15, 0x4c, 0x87, 0x64, 0x94, 0x5d, 0xe4, 0xdc, 0xbb, 0x7e, 0x01, 0x45, 0x87, 0x43, 0x74, 0xe6, 0xf4, 0x4c, 0xab, 0x87, 0x7a, 0xbd, 0x8e, 0x83, 0xd8, 0xed, 0x60, 0x1f, 0x10, 0x63, 0xe6, 0x1a, 0xb3, 0xfe, 0xcc, 0x85, 0x5e }; static const uint8_t nist_186_2_ecdsa_testvector_116_private[] = { /* d - byte alignment */ 0x01, 0x58, 0x0d, 0x8a, 0xca, 0x42, 0x6c, 0x30, 0x55, 0x45, 0x63, 0x08, 0xd3, 0x99, 0xcb, 0x94, 0xa7, 0xf0, 0xc9, 0xbd, 0x3f, 0x04, 0x49, 0xc9, 0x79, 0xf1, 0xeb, 0xfb, 0x9d, 0xf9, 0x50, 0xa9, 0xda, 0x54, 0xca, 0x71 }; static const uint8_t nist_186_2_ecdsa_testvector_116_public_x[] = { /* Qx - byte alignment */ 0x01, 0xe8, 0xbe, 0x02, 0xe0, 0x6f, 0x92, 0x07, 0x85, 0xaf, 0x95, 0x3b, 0xe0, 0x9a, 0x12, 0x2d, 0x42, 0x1a, 0xf5, 0x49, 0x5d, 0x5a, 0x56, 0x17, 0xed, 0xfa, 0x99, 0x67, 0xe6, 0x8f, 0x2f, 0xca, 0xe1, 0xf6, 0xe3, 0xdb }; static const uint8_t nist_186_2_ecdsa_testvector_116_public_y[] = { /* Qy - byte alignment */ 0x06, 0x85, 0x28, 0xbc, 0xa3, 0x28, 0x78, 0xd7, 0x41, 0xb6, 0xfe, 0xfb, 0xb0, 0x2a, 0xe9, 0x7f, 0x11, 0x4a, 0xdb, 0x81, 0x6f, 0xf4, 0xb9, 0xc9, 0xb2, 0xd0, 0x4a, 0x6b, 0x65, 0xb1, 0x3b, 0x9b, 0xbb, 0xdd, 0x55, 0x4d }; /* k = 1e90d37fe1d50b7d1ceadf965452ef3b724ff79fec1c907102ca873fbf33fd788341c30 */ static const uint8_t nist_186_2_ecdsa_testvector_116_out[] = { /* R - byte alignment */ 0x00, 0xf5, 0x77, 0x63, 0xe5, 0x26, 0x31, 0xde, 0xb2, 0x4a, 0x53, 0x4f, 0xba, 0xde, 0x5d, 0x71, 0xec, 0x38, 0x1c, 0xe1, 0xf3, 0x9d, 0xcf, 0xd3, 0xea, 0xbe, 0x52, 0x32, 0xe1, 0x0b, 0xbc, 0x4c, 0x91, 0x98, 0x51, 0x4c, /* S - byte alignment */ 0x01, 0x1a, 0xb8, 0x2d, 0x77, 0x0a, 0x91, 0xa3, 0x23, 0x3b, 0x72, 0x7c, 0x31, 0x3f, 0x68, 0xbf, 0x7c, 0x6d, 0x82, 0xe3, 0xf5, 0xe5, 0xfa, 0x22, 0xf1, 0x81, 0xf5, 0xfb, 0x38, 0x29, 0x82, 0x41, 0x9b, 0xbd, 0x95, 0x4c }; static const uint8_t nist_186_2_ecdsa_testvector_117_ptx[] = { /* Msg */ 0x72, 0xf3, 0xf9, 0xfb, 0xa5, 0xc0, 0x98, 0x4a, 0x73, 0x6d, 0x8f, 0xa6, 0xd8, 0x10, 0x6f, 0xef, 0x89, 0x9e, 0x26, 0xe5, 0x91, 0x01, 0xc8, 0xe1, 0x3c, 0x6a, 0x8f, 0xc3, 0x34, 0xe9, 0x20, 0x2b, 0xea, 0x3b, 0x0f, 0xec, 0x37, 0xe3, 0xa6, 0xbd, 0x44, 0x7c, 0xe2, 0x32, 0xa7, 0x4d, 0xbf, 0xeb, 0xce, 0x1e, 0xb5, 0x0c, 0xa1, 0x4a, 0x83, 0xec, 0x63, 0x16, 0x2b, 0x12, 0xd9, 0x41, 0x3e, 0x5d, 0xaf, 0xdc, 0x59, 0x82, 0x17, 0x5c, 0xf0, 0xbc, 0xb3, 0xee, 0x4a, 0xbe, 0xb5, 0x0a, 0xcd, 0xed, 0x45, 0x4b, 0x7c, 0xcc, 0x23, 0x7e, 0xbe, 0xb7, 0x8d, 0xf9, 0x61, 0xd5, 0x63, 0x2e, 0xde, 0x48, 0x89, 0x7f, 0xdf, 0xa6, 0x8d, 0x54, 0xfe, 0xad, 0x89, 0x6b, 0xd0, 0x32, 0x4b, 0x70, 0x22, 0x5b, 0xb4, 0xce, 0x82, 0x0e, 0x5e, 0xc4, 0x02, 0xa9, 0x81, 0xbb, 0x38, 0xf4, 0x18, 0xd7, 0x89, 0x54 }; static const uint8_t nist_186_2_ecdsa_testvector_117_private[] = { /* d - byte alignment */ 0x00, 0x7a, 0x71, 0xfd, 0x04, 0xdf, 0xfa, 0x5c, 0x22, 0xe2, 0xde, 0x6b, 0xea, 0x0b, 0xc1, 0xa9, 0x8f, 0xd6, 0xac, 0x39, 0xcf, 0x26, 0x12, 0xa4, 0xaf, 0x1c, 0x4b, 0x3f, 0x2f, 0x82, 0xf9, 0xd8, 0x80, 0xd8, 0x1c, 0x29 }; static const uint8_t nist_186_2_ecdsa_testvector_117_public_x[] = { /* Qx - byte alignment */ 0x06, 0x01, 0xc0, 0xc4, 0xe9, 0xe9, 0xbe, 0x16, 0x86, 0x12, 0x00, 0xb8, 0x1f, 0x48, 0xe4, 0xbf, 0x3b, 0x7e, 0x4c, 0x7a, 0xb2, 0xf4, 0x8b, 0xbe, 0xe3, 0xbf, 0x26, 0x92, 0x26, 0xf6, 0x9d, 0x57, 0xa3, 0xe3, 0x00, 0xe9 }; static const uint8_t nist_186_2_ecdsa_testvector_117_public_y[] = { /* Qy - byte alignment */ 0x02, 0x91, 0x7b, 0x38, 0xac, 0x03, 0x74, 0x89, 0x36, 0x7b, 0x57, 0x20, 0x9a, 0x45, 0x59, 0xe1, 0xfe, 0xe9, 0x09, 0x72, 0x5a, 0xb8, 0x54, 0x34, 0x27, 0x4e, 0xff, 0x49, 0xaf, 0x0e, 0x6d, 0xf2, 0x0c, 0x60, 0x5b, 0xff }; /* k = 03837ed333cef5e0ff44c70808e7a0e3d4c90eced420249c6aba43a064612add2256b93 */ static const uint8_t nist_186_2_ecdsa_testvector_117_out[] = { /* R - byte alignment */ 0x01, 0x29, 0x82, 0xe4, 0x95, 0x21, 0x0f, 0x20, 0xe8, 0xfa, 0x92, 0x01, 0xa1, 0x53, 0x5e, 0xeb, 0xec, 0xdd, 0xf3, 0x7e, 0x2f, 0x5c, 0x8b, 0xd8, 0xc3, 0x20, 0x4f, 0xfe, 0x3a, 0x93, 0x4a, 0x30, 0x09, 0x32, 0xf2, 0xd7, /* S - byte alignment */ 0x00, 0x40, 0x08, 0xa9, 0x69, 0x3d, 0x40, 0x27, 0x78, 0x12, 0xe8, 0xf1, 0x12, 0x1a, 0x3e, 0xc1, 0x92, 0xba, 0x88, 0x04, 0x8d, 0xce, 0x82, 0x11, 0x83, 0xbd, 0xda, 0x79, 0x5f, 0x2b, 0x79, 0xe6, 0xcd, 0x1c, 0x05, 0x3f }; static const uint8_t nist_186_2_ecdsa_testvector_118_ptx[] = { /* Msg */ 0xd5, 0xec, 0xb0, 0xbe, 0x35, 0xdf, 0xe0, 0x4d, 0x67, 0xec, 0x11, 0xf5, 0x02, 0x9e, 0xb1, 0x37, 0x15, 0x1c, 0x58, 0x1c, 0x15, 0x4f, 0x5c, 0x76, 0x1a, 0x47, 0xa0, 0x68, 0x4b, 0xdb, 0xac, 0x28, 0x97, 0x90, 0x03, 0x04, 0xa7, 0xbd, 0xb0, 0xa3, 0x10, 0xec, 0x23, 0x8e, 0xcc, 0x82, 0x3b, 0xee, 0xeb, 0xa3, 0xa4, 0x98, 0x86, 0x50, 0x63, 0x46, 0xf5, 0xd2, 0xaf, 0x27, 0x41, 0x5c, 0x03, 0x9b, 0xdc, 0xec, 0x71, 0x37, 0x90, 0x72, 0x39, 0x10, 0xb6, 0x34, 0x9a, 0x36, 0xa8, 0x71, 0xe8, 0x7e, 0x79, 0x44, 0xdf, 0x85, 0xe3, 0xcc, 0x37, 0xf1, 0x80, 0x8a, 0x78, 0xfa, 0x3d, 0x0a, 0x10, 0x2a, 0x0d, 0xc6, 0xa3, 0x60, 0xda, 0x47, 0xa2, 0x1b, 0xc1, 0x8d, 0x1f, 0xf5, 0x7e, 0xb1, 0xe0, 0x6e, 0x25, 0xc9, 0xb2, 0xeb, 0x14, 0x0c, 0xff, 0xff, 0x25, 0x37, 0xa3, 0xe8, 0x28, 0x2f, 0xfc, 0x5d }; static const uint8_t nist_186_2_ecdsa_testvector_118_private[] = { /* d - byte alignment */ 0x01, 0xab, 0x85, 0x82, 0x15, 0x5c, 0xfa, 0x50, 0x64, 0x33, 0xac, 0xf6, 0xc1, 0x25, 0x3f, 0xf2, 0x04, 0x34, 0x5c, 0x32, 0xe3, 0xe1, 0x41, 0x88, 0x28, 0xe4, 0x68, 0xa6, 0x36, 0xbf, 0x65, 0xf4, 0x60, 0x01, 0xa2, 0x63 }; static const uint8_t nist_186_2_ecdsa_testvector_118_public_x[] = { /* Qx - byte alignment */ 0x03, 0x35, 0x03, 0x5d, 0x24, 0x2f, 0x45, 0xe0, 0xf2, 0x57, 0x85, 0x53, 0xe5, 0xc3, 0x10, 0x73, 0x57, 0x30, 0x7a, 0xa2, 0xde, 0x71, 0x3d, 0xf6, 0xbe, 0xce, 0x98, 0x20, 0x90, 0xc1, 0xca, 0x76, 0x00, 0x96, 0xac, 0xa8 }; static const uint8_t nist_186_2_ecdsa_testvector_118_public_y[] = { /* Qy - byte alignment */ 0x01, 0xe6, 0x82, 0x34, 0x13, 0xd9, 0x75, 0xe2, 0xf1, 0x23, 0x9f, 0x42, 0xcb, 0x30, 0xbf, 0x4f, 0xbb, 0x8b, 0x88, 0x19, 0xde, 0xe6, 0x3f, 0x99, 0x56, 0xa9, 0x53, 0xea, 0x10, 0xea, 0x6b, 0xd3, 0xc7, 0x4d, 0x91, 0x11 }; /* k = 11f07fdfe8534ff7b1d370bf3ee284e69e074ebd7c379cf5dbd271f6197adbb31a643f2 */ static const uint8_t nist_186_2_ecdsa_testvector_118_out[] = { /* R - byte alignment */ 0x00, 0xd4, 0x83, 0xde, 0x90, 0x09, 0xee, 0xa6, 0x55, 0xc0, 0xf6, 0x6b, 0x38, 0x8f, 0xc3, 0x55, 0xfe, 0x6d, 0xa7, 0x5e, 0x38, 0x64, 0xa2, 0x4c, 0x78, 0x77, 0xf8, 0x7c, 0x33, 0x47, 0x3e, 0x5c, 0x5f, 0x72, 0x7b, 0xce, /* S - byte alignment */ 0x00, 0x5e, 0xdb, 0x94, 0xfd, 0xc3, 0xac, 0x1d, 0x55, 0x3c, 0x0f, 0xb4, 0xde, 0x54, 0x1a, 0x0f, 0x84, 0x97, 0x15, 0xe2, 0x82, 0xbb, 0xf5, 0xd1, 0xde, 0xc0, 0xec, 0x0e, 0x8f, 0xb2, 0x13, 0x0c, 0x95, 0x4a, 0x94, 0x38 }; static const uint8_t nist_186_2_ecdsa_testvector_119_ptx[] = { /* Msg */ 0xe3, 0xc8, 0x76, 0x07, 0x77, 0xf1, 0x96, 0x1e, 0x0b, 0xe4, 0xed, 0xc6, 0x50, 0xa1, 0x52, 0x09, 0x75, 0xac, 0x02, 0xbc, 0x48, 0xa9, 0xe9, 0xb4, 0x9f, 0x29, 0x1d, 0x37, 0xf6, 0xc4, 0xac, 0xb1, 0x59, 0x68, 0x97, 0xa8, 0x85, 0xf0, 0x1e, 0xf2, 0x4a, 0xf8, 0x3e, 0x26, 0x33, 0xf0, 0x79, 0x50, 0x69, 0x70, 0xd5, 0xe9, 0xd5, 0xcb, 0x27, 0x06, 0x85, 0xe7, 0x91, 0xcf, 0x51, 0x4c, 0x4a, 0x33, 0xbe, 0x7a, 0x9d, 0xda, 0x22, 0x80, 0x35, 0x5b, 0x09, 0xca, 0x97, 0xb0, 0xd8, 0x3b, 0xf0, 0xe7, 0xb0, 0x7c, 0x11, 0x19, 0x95, 0x93, 0xb8, 0xa0, 0xd0, 0xb7, 0x11, 0x85, 0x91, 0x62, 0x7c, 0x38, 0xd9, 0xa9, 0x91, 0x84, 0x97, 0xc9, 0x61, 0xc1, 0x12, 0x02, 0xff, 0x4c, 0x86, 0xa8, 0x40, 0x34, 0x12, 0x77, 0xbe, 0x36, 0xd1, 0x27, 0x23, 0xec, 0x48, 0x40, 0xa4, 0x41, 0x00, 0x30, 0xcb, 0x28 }; static const uint8_t nist_186_2_ecdsa_testvector_119_private[] = { /* d - byte alignment */ 0x00, 0x11, 0x06, 0x8d, 0x2c, 0x25, 0x04, 0x2c, 0x60, 0x84, 0x59, 0x61, 0x57, 0x90, 0x91, 0x2e, 0x58, 0x7b, 0x67, 0xcf, 0x65, 0xa9, 0xb3, 0x0a, 0x61, 0x96, 0x15, 0xf9, 0x16, 0x5e, 0xd8, 0x9f, 0x30, 0xdb, 0xb1, 0x2c }; static const uint8_t nist_186_2_ecdsa_testvector_119_public_x[] = { /* Qx - byte alignment */ 0x01, 0x02, 0xc0, 0x2e, 0x0b, 0x3c, 0xaa, 0xd8, 0x5b, 0x1c, 0xbf, 0x31, 0xf9, 0x2d, 0x00, 0x41, 0x0a, 0xc3, 0xcd, 0x31, 0xb0, 0x08, 0x0c, 0x56, 0x4b, 0x5a, 0x31, 0xb1, 0x5e, 0x7a, 0xa8, 0x3e, 0xef, 0x2d, 0xab, 0x21 }; static const uint8_t nist_186_2_ecdsa_testvector_119_public_y[] = { /* Qy - byte alignment */ 0x07, 0x6b, 0xe5, 0xed, 0xa9, 0x3a, 0x20, 0x78, 0xb0, 0xbb, 0x72, 0x2b, 0xd9, 0x0e, 0x38, 0xe6, 0x18, 0xe8, 0x3d, 0x6b, 0x95, 0x01, 0x4f, 0x96, 0x7f, 0xad, 0xb3, 0xbe, 0xd2, 0x87, 0x52, 0x9b, 0x0c, 0x1a, 0xa8, 0x28 }; /* k = 07e2c03faa50b97a323ed2622ac95da642d1e2c69e2635c2506c736f9cd9cb4aee27383 */ static const uint8_t nist_186_2_ecdsa_testvector_119_out[] = { /* R - byte alignment */ 0x01, 0x39, 0x39, 0x0c, 0xf1, 0x1a, 0x28, 0x51, 0x48, 0x67, 0x2a, 0x70, 0x6b, 0x69, 0x65, 0x03, 0x48, 0x8e, 0x11, 0xa2, 0xed, 0xc0, 0xff, 0x17, 0x7a, 0x70, 0x00, 0x15, 0xfd, 0x5f, 0x87, 0x5c, 0xdd, 0xcc, 0xab, 0x7f, /* S - byte alignment */ 0x01, 0x0c, 0x8d, 0x96, 0x3c, 0x0d, 0xff, 0x78, 0x84, 0x96, 0x8b, 0xa6, 0xb9, 0x6b, 0xbc, 0x42, 0xb1, 0xc7, 0x70, 0x6c, 0x30, 0xad, 0x35, 0xb7, 0xec, 0x19, 0xde, 0xe5, 0xad, 0x8b, 0xb2, 0x40, 0xa8, 0x1b, 0x02, 0x50 }; static const uint8_t nist_186_2_ecdsa_testvector_120_ptx[] = { /* Msg */ 0x58, 0xc9, 0x19, 0xf5, 0xe8, 0xa7, 0x14, 0x7d, 0x23, 0xc1, 0xa6, 0x66, 0xca, 0xe2, 0x3c, 0xf8, 0x59, 0xaa, 0xc8, 0xef, 0xe8, 0xe0, 0xc0, 0x74, 0x4f, 0x09, 0x69, 0x4c, 0x8d, 0x3a, 0x55, 0x50, 0x6b, 0x2a, 0x2a, 0x1d, 0x5c, 0x8b, 0xa6, 0x0c, 0xa8, 0x9b, 0xe0, 0x65, 0xc9, 0xf6, 0xd1, 0xcf, 0x15, 0xae, 0x12, 0x0b, 0x9e, 0x9d, 0xe7, 0xe2, 0x57, 0xfa, 0x7d, 0x5c, 0x78, 0x2b, 0x70, 0x33, 0x23, 0xda, 0x90, 0x87, 0x47, 0x4b, 0xe5, 0xd3, 0xc5, 0xed, 0xf1, 0x20, 0xd1, 0x2f, 0x34, 0x79, 0x9b, 0x94, 0xf6, 0x9e, 0x2f, 0x0a, 0x40, 0xfd, 0x9a, 0x78, 0x2c, 0xdd, 0x4f, 0x96, 0x5e, 0xdd, 0xc9, 0x01, 0xd3, 0x9d, 0x71, 0x8f, 0xda, 0xbb, 0xc1, 0xdf, 0x5f, 0x01, 0xaa, 0x35, 0x6f, 0xdc, 0x33, 0x85, 0xf9, 0x10, 0x64, 0xce, 0xd2, 0xab, 0x62, 0xaa, 0xfc, 0x37, 0xdb, 0x22, 0x28, 0x34 }; static const uint8_t nist_186_2_ecdsa_testvector_120_private[] = { /* d - byte alignment */ 0x00, 0xef, 0xeb, 0xf8, 0x3d, 0xff, 0xf3, 0x4f, 0x1b, 0x3f, 0x4b, 0x33, 0xd0, 0xa5, 0x5d, 0x53, 0xdd, 0xa7, 0xcc, 0xed, 0xbf, 0xfb, 0xe2, 0x59, 0x4e, 0x4d, 0xb2, 0xd7, 0xcb, 0xc6, 0x81, 0xe2, 0x6f, 0xd3, 0x0c, 0xe0 }; static const uint8_t nist_186_2_ecdsa_testvector_120_public_x[] = { /* Qx - byte alignment */ 0x03, 0x01, 0xa1, 0xba, 0x3c, 0x25, 0xfa, 0xb1, 0xf6, 0xd3, 0xa0, 0x2a, 0xfc, 0xe1, 0xad, 0xf3, 0x9c, 0x69, 0xa5, 0x1d, 0xe8, 0xce, 0x92, 0x58, 0xe9, 0xec, 0x91, 0x12, 0xb8, 0x88, 0x55, 0x4b, 0x90, 0xc3, 0x39, 0xcb }; static const uint8_t nist_186_2_ecdsa_testvector_120_public_y[] = { /* Qy - byte alignment */ 0x02, 0xca, 0xdd, 0x42, 0x98, 0x5e, 0xe5, 0x9e, 0x7b, 0xb3, 0x61, 0xbe, 0x74, 0xc7, 0x20, 0x87, 0xa8, 0x88, 0x76, 0x2b, 0x43, 0xae, 0xcb, 0xbe, 0xc7, 0x70, 0x5b, 0x5e, 0x9e, 0x5c, 0x01, 0x16, 0x34, 0x2f, 0xd3, 0x44 }; /* k = 11c175da1bcf4459d0da24dc404885157216c49dda35ceb2b055d5794ab7f1b6ac4002a */ static const uint8_t nist_186_2_ecdsa_testvector_120_out[] = { /* R - byte alignment */ 0x00, 0xdc, 0x41, 0xd0, 0xa1, 0x32, 0x61, 0xe5, 0x14, 0xdf, 0x2a, 0x5c, 0x73, 0x92, 0xfb, 0xed, 0xed, 0xf1, 0x12, 0x5b, 0x05, 0xaa, 0xd3, 0x49, 0x68, 0xc9, 0xdd, 0x73, 0x2c, 0x26, 0x16, 0xc7, 0x73, 0xb2, 0xa0, 0x3a, /* S - byte alignment */ 0x00, 0x14, 0xa2, 0x53, 0x79, 0x4a, 0x90, 0xe6, 0x6a, 0xea, 0x23, 0xf5, 0x31, 0x3a, 0x29, 0x55, 0x3b, 0xb7, 0xbf, 0x46, 0xfd, 0x46, 0x89, 0x17, 0x78, 0xc7, 0x98, 0xd5, 0x8c, 0xe4, 0xa0, 0x24, 0x80, 0x52, 0x07, 0x9e }; /* [K-409] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_121_ptx[] = { /* Msg */ 0xb6, 0xab, 0x51, 0x3b, 0x9d, 0x08, 0x45, 0x80, 0xae, 0x77, 0x51, 0x95, 0x01, 0x02, 0x64, 0x7d, 0x23, 0x51, 0x97, 0xbf, 0x0b, 0xcf, 0xbe, 0xaf, 0x4f, 0x08, 0x3d, 0xee, 0x98, 0x55, 0x1e, 0x34, 0x54, 0xbc, 0x60, 0x4d, 0xaa, 0x12, 0x91, 0x62, 0xb3, 0x62, 0x9f, 0x7a, 0xe7, 0x93, 0xeb, 0x40, 0xd5, 0x44, 0x9f, 0x07, 0x18, 0xfb, 0x42, 0x0b, 0x86, 0x7f, 0x89, 0xfa, 0xaa, 0x82, 0x70, 0xb3, 0x75, 0x83, 0x8a, 0x4d, 0x30, 0xf3, 0x95, 0x5b, 0xb5, 0x97, 0x52, 0x6e, 0xdf, 0x2d, 0x94, 0xdc, 0x3f, 0x52, 0x96, 0xc0, 0x10, 0xa3, 0x91, 0x42, 0x6d, 0x23, 0x8e, 0x19, 0xc2, 0xdd, 0x79, 0x4e, 0x81, 0xca, 0x78, 0x42, 0x16, 0xf4, 0x7b, 0xf2, 0x1c, 0xdc, 0x13, 0x7a, 0xd1, 0x19, 0x87, 0xd8, 0xc7, 0x43, 0x25, 0xf3, 0xdd, 0x0f, 0xd6, 0xdc, 0x6e, 0xbb, 0xf5, 0x53, 0xc8, 0xad, 0x61, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_121_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x31, 0xb7, 0x2b, 0x38, 0x79, 0x86, 0x2d, 0xbf, 0xb6, 0xd0, 0xb5, 0x74, 0x26, 0x7a, 0x56, 0x0e, 0xd5, 0xde, 0x2b, 0x88, 0x20, 0x63, 0xe9, 0x67, 0xc1, 0x8a, 0x62, 0xbb, 0x4e, 0xe3, 0x42, 0xab, 0x54, 0x15, 0x06, 0x32, 0xa9, 0xa8, 0x46, 0x28, 0x36, 0x02, 0x4c, 0xe6, 0x5d, 0x4c, 0x79, 0x97, 0x2a, 0x3b }; static const uint8_t nist_186_2_ecdsa_testvector_121_public_x[] = { /* Qx - byte alignment */ 0x00, 0x2e, 0x80, 0x26, 0x16, 0x36, 0xdd, 0x38, 0x58, 0xf3, 0x12, 0x81, 0xbd, 0x40, 0xd5, 0x19, 0x14, 0x64, 0x8b, 0x1b, 0x95, 0xb6, 0xab, 0x62, 0x17, 0x84, 0xec, 0x11, 0xb2, 0x76, 0x77, 0x85, 0x90, 0xdd, 0x88, 0xf2, 0x56, 0x64, 0x3d, 0xf3, 0xf2, 0x04, 0xba, 0x82, 0xdb, 0xc3, 0x8c, 0x19, 0x7a, 0x92, 0xb6, 0x0a }; static const uint8_t nist_186_2_ecdsa_testvector_121_public_y[] = { /* Qy - byte alignment */ 0x00, 0xca, 0x47, 0x73, 0x03, 0xa5, 0x91, 0x65, 0x82, 0x81, 0xfb, 0x9f, 0x48, 0x66, 0x3b, 0x53, 0x05, 0x65, 0xfa, 0x8e, 0xa0, 0x58, 0x7f, 0xd0, 0x36, 0x1d, 0x6c, 0x83, 0x01, 0x30, 0xa9, 0xae, 0x14, 0x98, 0x55, 0x93, 0x0a, 0x35, 0x86, 0x27, 0xc2, 0xcd, 0x8b, 0x66, 0x82, 0xe1, 0x6a, 0x72, 0x70, 0x1d, 0x46, 0xa7 }; /* k = 00038421e9318c4cc05519a6eb81d87a1d16331f8e7cdac4f0c47c390a381e4bb193c43ea7eb5e47d4756d41e1eef586acf6741 */ static const uint8_t nist_186_2_ecdsa_testvector_121_out[] = { /* R - byte alignment */ 0x00, 0x7a, 0xca, 0xa9, 0xa1, 0x3d, 0x6a, 0x0c, 0x7d, 0xf8, 0xe6, 0x0d, 0x5d, 0x32, 0x44, 0x65, 0x85, 0x4d, 0x6f, 0x78, 0xa3, 0xe8, 0x1e, 0x94, 0xee, 0x74, 0x4c, 0x7a, 0xe4, 0x5c, 0xce, 0x94, 0x68, 0xc8, 0x5b, 0x16, 0xe2, 0xea, 0xfb, 0x18, 0x49, 0x01, 0xd9, 0x8b, 0xef, 0x18, 0xd5, 0x2e, 0x8d, 0x93, 0x33, 0xf1, /* S - byte alignment */ 0x00, 0x3b, 0x24, 0x7f, 0x58, 0x1f, 0x59, 0x04, 0x70, 0xa9, 0x06, 0x64, 0x28, 0x75, 0xb7, 0x49, 0x9b, 0x3a, 0xf1, 0x4a, 0x96, 0x14, 0xf4, 0xe6, 0xaa, 0x00, 0xcd, 0x5e, 0xa3, 0xf5, 0xda, 0xc4, 0xf7, 0xf5, 0xf1, 0x33, 0x32, 0x27, 0xb6, 0xcb, 0x0d, 0xea, 0x73, 0x62, 0xc7, 0x95, 0x69, 0x53, 0x21, 0xf8, 0x00, 0x21 }; static const uint8_t nist_186_2_ecdsa_testvector_122_ptx[] = { /* Msg */ 0x12, 0x5c, 0x4b, 0x0a, 0x58, 0x3f, 0xc2, 0x86, 0x85, 0x18, 0x5b, 0x8a, 0x46, 0xaa, 0x5f, 0x92, 0x39, 0xf4, 0x60, 0x30, 0xb7, 0xb3, 0xb8, 0xae, 0xf1, 0x28, 0x32, 0xf4, 0x3e, 0x1b, 0x06, 0xad, 0xb3, 0x20, 0x0b, 0xa6, 0xf5, 0x19, 0x28, 0x76, 0x4b, 0xfc, 0x0b, 0x64, 0xf7, 0xd7, 0x1e, 0x85, 0xc7, 0x11, 0xb7, 0x25, 0xe7, 0xf2, 0x90, 0x68, 0xf9, 0x65, 0x76, 0x31, 0x67, 0xfd, 0x45, 0x43, 0xf8, 0x37, 0x13, 0xa7, 0xa2, 0xff, 0xac, 0x4d, 0xa0, 0x75, 0x3f, 0xf6, 0xc4, 0xf0, 0x56, 0x50, 0x0d, 0x43, 0x0b, 0x63, 0x7c, 0x40, 0x79, 0x2d, 0x24, 0x7b, 0x72, 0x89, 0x81, 0x51, 0x70, 0x56, 0x0a, 0x28, 0xcd, 0xd4, 0x09, 0xf7, 0x36, 0x51, 0xab, 0x0a, 0x5d, 0x06, 0x53, 0xff, 0xee, 0x3c, 0x34, 0x15, 0xc5, 0xb3, 0x1f, 0xa6, 0x5e, 0x43, 0x99, 0xf1, 0x8c, 0xc4, 0x31, 0x1d, 0x6e, 0x2c }; static const uint8_t nist_186_2_ecdsa_testvector_122_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x7a, 0x7c, 0x91, 0x60, 0x9a, 0x8b, 0x4f, 0xe2, 0xf9, 0x78, 0x67, 0x88, 0x8f, 0x20, 0xbd, 0x02, 0x8d, 0xff, 0xf0, 0xf9, 0xd2, 0x78, 0xb6, 0x85, 0x62, 0x33, 0xed, 0xa9, 0x2a, 0xb6, 0x52, 0x1a, 0x47, 0x90, 0xb7, 0xd3, 0x17, 0xa1, 0x25, 0xec, 0xef, 0xe1, 0xcd, 0xce, 0x03, 0xe2, 0x2e, 0xc4, 0xdc, 0x55 }; static const uint8_t nist_186_2_ecdsa_testvector_122_public_x[] = { /* Qx - byte alignment */ 0x00, 0x1c, 0xc6, 0xe1, 0xc8, 0x78, 0x91, 0xc7, 0x27, 0x20, 0x4a, 0xcb, 0xcc, 0x85, 0x3e, 0xbe, 0x42, 0x29, 0x93, 0x38, 0xb8, 0x14, 0x44, 0x6b, 0x9a, 0xe4, 0x0f, 0x73, 0x1f, 0x9e, 0x8f, 0x9e, 0x5c, 0xd9, 0x9a, 0x5e, 0x47, 0x07, 0x87, 0x5e, 0xa8, 0x0e, 0x06, 0x7e, 0x08, 0x8e, 0x22, 0xe9, 0xcc, 0x12, 0x5a, 0xc0 }; static const uint8_t nist_186_2_ecdsa_testvector_122_public_y[] = { /* Qy - byte alignment */ 0x01, 0xab, 0x77, 0x02, 0xd8, 0x7a, 0x34, 0x09, 0x3c, 0x0a, 0xb9, 0xfb, 0xac, 0xbe, 0x7d, 0x93, 0x31, 0xc4, 0xfd, 0xc5, 0x22, 0x0f, 0x8f, 0x02, 0xc0, 0x69, 0xd4, 0xe4, 0xdb, 0x5a, 0x2f, 0xcd, 0x4f, 0x42, 0xea, 0x7f, 0xab, 0xad, 0x70, 0x4c, 0x8c, 0x10, 0xb1, 0x2b, 0xd8, 0x13, 0x91, 0xa4, 0x0a, 0xff, 0x90, 0xba }; /* k = 000700d3107da55e6b926e2b749bb4a7efc19775e838d19bdb647f0afb8d69ea58f42efb421850e7c0d3aec09790a44f29ed6ca */ static const uint8_t nist_186_2_ecdsa_testvector_122_out[] = { /* R - byte alignment */ 0x00, 0x2b, 0xb5, 0xbf, 0x94, 0xce, 0x12, 0x29, 0xa0, 0xdc, 0xfc, 0x5c, 0x49, 0xf8, 0xb1, 0x14, 0xe2, 0x4f, 0xb5, 0x65, 0xca, 0x2c, 0x72, 0x11, 0xf0, 0x44, 0xe2, 0x9d, 0xf2, 0xae, 0x55, 0xec, 0xad, 0x9d, 0x4e, 0x7d, 0x47, 0x49, 0xa8, 0xb9, 0x6f, 0x1f, 0x47, 0xa8, 0x77, 0x94, 0x6d, 0x85, 0x93, 0x94, 0xda, 0xd4, /* S - byte alignment */ 0x00, 0x61, 0x68, 0xfd, 0x2d, 0x43, 0xa3, 0xcf, 0x8c, 0x8a, 0x1d, 0xf8, 0xdd, 0x03, 0x81, 0x20, 0xdf, 0x95, 0xbd, 0x8c, 0x5b, 0xd0, 0xef, 0x85, 0x4a, 0x11, 0x8b, 0x88, 0x14, 0x01, 0x76, 0x52, 0x9a, 0x9b, 0xfc, 0x71, 0x31, 0x42, 0x72, 0x68, 0xa7, 0x25, 0xda, 0xec, 0x4b, 0x6a, 0x86, 0xe6, 0xc2, 0x23, 0x50, 0x84 }; static const uint8_t nist_186_2_ecdsa_testvector_123_ptx[] = { /* Msg */ 0xaf, 0x81, 0x7d, 0xe5, 0x87, 0x42, 0xa0, 0x88, 0xb6, 0xab, 0xc4, 0x3d, 0x72, 0x29, 0x73, 0xf9, 0x27, 0x89, 0x12, 0x17, 0x19, 0x0e, 0xae, 0x05, 0x4c, 0xc1, 0xf8, 0x3e, 0xa1, 0x09, 0x8d, 0x78, 0x41, 0x7b, 0x7b, 0x1e, 0x3e, 0xf3, 0x01, 0x00, 0x78, 0xe4, 0x97, 0x4a, 0xbe, 0xec, 0x2e, 0xb2, 0x36, 0xac, 0xb9, 0xf6, 0xff, 0xd6, 0xec, 0x86, 0x14, 0x87, 0x44, 0x7d, 0x74, 0xd8, 0x47, 0xd6, 0x80, 0xb0, 0x0d, 0xdd, 0xa4, 0xdc, 0xff, 0xe3, 0x39, 0x61, 0xdf, 0x36, 0xaa, 0x10, 0x09, 0x51, 0xd6, 0x5c, 0xf8, 0x4f, 0xb6, 0x69, 0x0b, 0xa6, 0x40, 0x65, 0x89, 0x11, 0x8b, 0x1b, 0xe4, 0xce, 0x33, 0xc5, 0x3a, 0x0a, 0xff, 0x22, 0x21, 0x9a, 0xc1, 0xc9, 0xa4, 0xeb, 0x7e, 0xbd, 0x89, 0x3c, 0xcf, 0x41, 0xd6, 0x0a, 0x87, 0xee, 0x93, 0xcc, 0x96, 0x02, 0xd0, 0xe1, 0x2e, 0xfb, 0xea, 0xc7 }; static const uint8_t nist_186_2_ecdsa_testvector_123_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x38, 0x42, 0x1e, 0x93, 0x18, 0xc4, 0xcc, 0x05, 0x51, 0x9a, 0x6e, 0xb8, 0x1d, 0x87, 0xa1, 0xd1, 0x63, 0x31, 0xf8, 0xe7, 0xcd, 0xac, 0x4f, 0x0c, 0x47, 0xc3, 0x90, 0xa3, 0x81, 0xe4, 0xbb, 0x19, 0x3c, 0x43, 0xea, 0x7e, 0xb5, 0xe4, 0x7d, 0x47, 0x56, 0xd4, 0x1e, 0x1e, 0xef, 0x58, 0x6a, 0xcf, 0x67, 0x41 }; static const uint8_t nist_186_2_ecdsa_testvector_123_public_x[] = { /* Qx - byte alignment */ 0x01, 0xfa, 0xca, 0xa9, 0xa1, 0x3d, 0x6a, 0x0c, 0x7d, 0xf8, 0xe6, 0x0d, 0x5d, 0x32, 0x44, 0x65, 0x85, 0x4d, 0x6f, 0x78, 0xa3, 0xe8, 0x1e, 0x94, 0xee, 0x74, 0x47, 0x99, 0x6f, 0x75, 0x4d, 0x52, 0xc9, 0x88, 0x87, 0x63, 0xe3, 0x63, 0x17, 0x93, 0xf4, 0xb9, 0x38, 0x9d, 0xd1, 0x2e, 0x60, 0x59, 0x2d, 0xee, 0x53, 0x5e }; static const uint8_t nist_186_2_ecdsa_testvector_123_public_y[] = { /* Qy - byte alignment */ 0x01, 0x50, 0x25, 0x9a, 0x8e, 0xfd, 0xf3, 0x9f, 0x94, 0x79, 0x72, 0x24, 0x88, 0xb3, 0x6f, 0x8f, 0x37, 0xd6, 0x25, 0xc4, 0xfa, 0x98, 0xfc, 0xd7, 0x1e, 0x37, 0x06, 0x7d, 0x2a, 0xda, 0x08, 0x6d, 0xd4, 0x7e, 0x35, 0xf9, 0xb3, 0x0d, 0xb2, 0xbe, 0xd8, 0x70, 0x3d, 0xdf, 0x42, 0x5c, 0x67, 0x02, 0xc5, 0xe0, 0xc3, 0xab }; /* k = 00062b38c52225795d13c0c60c0124cb90748338c1a3960166d0d5282e203207c2da1dacd1d4af81614a6ad94ad3a64c29cb344 */ static const uint8_t nist_186_2_ecdsa_testvector_123_out[] = { /* R - byte alignment */ 0x00, 0x42, 0xd6, 0x10, 0x96, 0x59, 0xda, 0xbb, 0xa1, 0x15, 0x30, 0x53, 0xa5, 0x45, 0x98, 0x7c, 0x13, 0x0e, 0x54, 0x3c, 0x0e, 0x60, 0xa7, 0x06, 0xa8, 0x8a, 0xdf, 0x93, 0x81, 0x1a, 0xee, 0xe4, 0x88, 0x19, 0xf7, 0x6a, 0x66, 0xc1, 0x05, 0xf9, 0x99, 0xd9, 0x2c, 0x9f, 0x5c, 0x66, 0xb8, 0xcd, 0xc1, 0xde, 0x9e, 0x01, /* S - byte alignment */ 0x00, 0x15, 0x17, 0x07, 0xd2, 0x54, 0x34, 0x04, 0xf2, 0x6f, 0x8b, 0x6a, 0xf3, 0x8f, 0x82, 0x63, 0xea, 0x2a, 0x7a, 0x0a, 0x42, 0xb0, 0x53, 0x35, 0x85, 0xb4, 0x41, 0x99, 0x1e, 0x81, 0xf8, 0x04, 0xf4, 0x32, 0x5e, 0x3a, 0xb4, 0x08, 0x4c, 0x91, 0x69, 0xda, 0x5a, 0xe3, 0x0c, 0x11, 0x2d, 0x13, 0x39, 0x8f, 0x15, 0xb1 }; static const uint8_t nist_186_2_ecdsa_testvector_124_ptx[] = { /* Msg */ 0xa2, 0x8c, 0x69, 0xb4, 0x21, 0x1f, 0xc1, 0xb6, 0x35, 0xd1, 0x27, 0x56, 0x23, 0xdf, 0xb1, 0xe0, 0x54, 0x23, 0x9f, 0x1f, 0xb3, 0xe9, 0xe3, 0xd3, 0x57, 0xff, 0xe1, 0x60, 0x62, 0x0b, 0x73, 0xc4, 0x29, 0x21, 0x30, 0xcb, 0x95, 0x95, 0xee, 0x86, 0xc9, 0x0e, 0x85, 0xf9, 0x04, 0xdc, 0xd6, 0x14, 0xc9, 0x8c, 0x0c, 0xe5, 0x3e, 0xb9, 0x22, 0x0b, 0xd3, 0x25, 0xa6, 0x6e, 0x23, 0x08, 0xbc, 0x2d, 0x1f, 0xa7, 0x65, 0xd8, 0x69, 0x29, 0x01, 0xe0, 0xfe, 0xa6, 0x13, 0x4b, 0x18, 0x82, 0x45, 0xac, 0x53, 0xf9, 0xac, 0x53, 0x0e, 0xfa, 0x4c, 0xc1, 0x14, 0x39, 0xdf, 0x5f, 0x7c, 0x80, 0xd2, 0x6f, 0xcd, 0x45, 0x91, 0x42, 0x66, 0x82, 0x04, 0xab, 0x1d, 0xc1, 0x59, 0xb5, 0x27, 0x76, 0x05, 0x91, 0x38, 0x92, 0x05, 0xd2, 0xea, 0x55, 0x6a, 0xdd, 0x63, 0x64, 0x14, 0x9a, 0x32, 0x1b, 0xbe, 0x70 }; static const uint8_t nist_186_2_ecdsa_testvector_124_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x76, 0x2e, 0x08, 0xaa, 0x0b, 0xad, 0xdf, 0x4a, 0x50, 0xb1, 0x69, 0xca, 0x78, 0xc5, 0xa1, 0x9b, 0xe0, 0x3e, 0x7f, 0x11, 0x6f, 0xad, 0x0e, 0x41, 0x69, 0x72, 0x32, 0x49, 0x20, 0x60, 0xa5, 0x2e, 0x30, 0x64, 0xf2, 0xc8, 0xd0, 0x54, 0x86, 0x13, 0x85, 0xb0, 0x44, 0xba, 0xa1, 0xec, 0xaa, 0x0b, 0x90, 0x1c }; static const uint8_t nist_186_2_ecdsa_testvector_124_public_x[] = { /* Qx - byte alignment */ 0x00, 0xb3, 0xec, 0x10, 0x86, 0x8f, 0xc3, 0x6d, 0x33, 0x25, 0x4f, 0xd3, 0xf1, 0x25, 0xf0, 0xe6, 0xac, 0x7c, 0x73, 0x47, 0x49, 0x45, 0x98, 0x7a, 0xc2, 0x7e, 0x13, 0x13, 0xba, 0x00, 0x45, 0xe8, 0xd2, 0x43, 0x77, 0x16, 0x0f, 0x43, 0xa6, 0xea, 0xcf, 0x02, 0xcb, 0x70, 0x02, 0x9c, 0xee, 0xd1, 0x88, 0x43, 0x1d, 0x4c }; static const uint8_t nist_186_2_ecdsa_testvector_124_public_y[] = { /* Qy - byte alignment */ 0x01, 0x21, 0x5e, 0xe1, 0xa5, 0xf5, 0xd0, 0x2b, 0xf0, 0xda, 0xfe, 0x15, 0x5e, 0x9c, 0x95, 0x64, 0x11, 0xc6, 0xff, 0xcc, 0x6c, 0x4a, 0x2c, 0x4b, 0x0b, 0xdc, 0xeb, 0x11, 0x26, 0xb4, 0xa1, 0x21, 0xe6, 0xf7, 0x70, 0x28, 0xa3, 0x69, 0x96, 0x51, 0x06, 0xe3, 0x04, 0xa5, 0x38, 0xae, 0xa8, 0x83, 0x97, 0xb7, 0xd0, 0xf7 }; /* k = 0007a496e31791af248ee59fdcb77eb5547ac6d4ca36383d0870d3a35c81b3d620426458586241519543b33e394be5cfa2b9139 */ static const uint8_t nist_186_2_ecdsa_testvector_124_out[] = { /* R - byte alignment */ 0x00, 0x69, 0xb8, 0xc4, 0xbe, 0x27, 0xf0, 0x5e, 0xc3, 0x48, 0x36, 0xbc, 0xd8, 0xac, 0xc6, 0x65, 0xe4, 0x57, 0xf1, 0x55, 0x2c, 0x1d, 0x4b, 0x36, 0x09, 0x43, 0xc3, 0x50, 0x39, 0xb6, 0xf2, 0xf3, 0xa7, 0xba, 0xe9, 0x7b, 0x91, 0x02, 0xca, 0x7a, 0xf2, 0x87, 0x5c, 0x73, 0x6d, 0x1e, 0xf2, 0x90, 0xed, 0x8d, 0x75, 0x88, /* S - byte alignment */ 0x00, 0x52, 0xcb, 0x8b, 0xd5, 0xdd, 0x83, 0xe5, 0xd5, 0xa7, 0x40, 0xb5, 0x62, 0x02, 0xb4, 0xf2, 0xf3, 0x9f, 0xf6, 0xe9, 0x8f, 0xfa, 0x38, 0x19, 0x3e, 0x6b, 0x6c, 0xc4, 0x5b, 0x76, 0x8e, 0x90, 0xa8, 0xe3, 0xeb, 0x66, 0x52, 0x07, 0x85, 0xf9, 0x69, 0xb6, 0xed, 0xf0, 0x87, 0x4d, 0xd8, 0xc5, 0xdf, 0x5d, 0x1a, 0x9c }; static const uint8_t nist_186_2_ecdsa_testvector_125_ptx[] = { /* Msg */ 0x1a, 0x11, 0x2a, 0x50, 0x38, 0x63, 0x6f, 0x16, 0x6e, 0x6e, 0x84, 0x74, 0xc0, 0x77, 0xab, 0x72, 0xa4, 0x6c, 0x2c, 0x0e, 0xb5, 0xc9, 0xa5, 0x3a, 0xab, 0xb8, 0xa2, 0x25, 0x8b, 0x7c, 0x6d, 0xbb, 0x1b, 0x0f, 0x28, 0x6f, 0x99, 0x0a, 0x18, 0x38, 0xac, 0xc6, 0x44, 0xd9, 0x9b, 0xc1, 0x3f, 0x66, 0xbd, 0x43, 0x42, 0x04, 0x31, 0x41, 0x7d, 0xf0, 0xce, 0x81, 0xaf, 0xc3, 0x5d, 0xff, 0xf5, 0xf4, 0x06, 0x90, 0xdf, 0x9e, 0x09, 0xc5, 0xc9, 0x83, 0xaf, 0x12, 0x69, 0x52, 0x7f, 0x2f, 0xa4, 0x25, 0xb4, 0xbf, 0xa6, 0x4e, 0xef, 0x30, 0x31, 0x53, 0x2a, 0xe2, 0x35, 0x37, 0xed, 0x8b, 0xa2, 0xfb, 0xc4, 0xda, 0x7a, 0x65, 0xf0, 0x5a, 0x2a, 0x00, 0x5d, 0x9a, 0x1a, 0x64, 0xd4, 0x8b, 0x83, 0xb7, 0x72, 0x29, 0x81, 0x74, 0x59, 0x5d, 0x69, 0x6b, 0xa5, 0x22, 0x5c, 0x0a, 0xa2, 0xe8, 0x1c, 0xda }; static const uint8_t nist_186_2_ecdsa_testvector_125_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x61, 0xeb, 0x2b, 0xae, 0x31, 0x10, 0x95, 0xea, 0x51, 0x9f, 0x89, 0xea, 0xd3, 0x8d, 0xa3, 0x78, 0xe3, 0x2e, 0xfa, 0x65, 0xab, 0x4f, 0xf8, 0xc2, 0xe9, 0xbf, 0xaa, 0x6f, 0xeb, 0x8f, 0x44, 0x38, 0x74, 0x2a, 0xd3, 0x31, 0x1a, 0x4b, 0x8d, 0x4f, 0x07, 0x38, 0x93, 0xeb, 0xb2, 0x11, 0x41, 0x0f, 0xc8, 0xa1 }; static const uint8_t nist_186_2_ecdsa_testvector_125_public_x[] = { /* Qx - byte alignment */ 0x00, 0xfa, 0xa2, 0x6a, 0xf7, 0xa4, 0x77, 0xc2, 0x41, 0x38, 0x7d, 0xfb, 0xec, 0x89, 0xf6, 0xd2, 0x46, 0xdd, 0x46, 0x45, 0xa2, 0xd6, 0x89, 0x27, 0x67, 0xe3, 0xf3, 0xa4, 0x6e, 0x26, 0x2a, 0xb4, 0x9a, 0x89, 0xc6, 0x9a, 0x9a, 0xb8, 0x88, 0x78, 0x24, 0x1f, 0xf7, 0xe2, 0x67, 0xb1, 0x18, 0xab, 0x11, 0x65, 0xcd, 0x16 }; static const uint8_t nist_186_2_ecdsa_testvector_125_public_y[] = { /* Qy - byte alignment */ 0x00, 0xdb, 0xde, 0x2e, 0x35, 0xc7, 0xec, 0xbb, 0x73, 0xca, 0x32, 0x76, 0x1b, 0x87, 0x2e, 0x09, 0xe1, 0x92, 0xdc, 0xd3, 0x0f, 0xcd, 0xd6, 0x36, 0x6a, 0x7c, 0xb7, 0x60, 0x0b, 0x1d, 0xcc, 0x0d, 0xe3, 0x33, 0xfe, 0xec, 0xf5, 0x90, 0xf1, 0x0b, 0xa4, 0xe3, 0x7e, 0xf0, 0x55, 0xba, 0xde, 0x25, 0xff, 0xc9, 0x98, 0xc6 }; /* k = 00036dc870af1992f9dac60892e35b7d3feb89a05a1fff46652816de8d8f8ebe1c51ad06009eaf1483269856bf1cb1a85a14c11 */ static const uint8_t nist_186_2_ecdsa_testvector_125_out[] = { /* R - byte alignment */ 0x00, 0x28, 0xa9, 0xc2, 0xbd, 0x4b, 0xa0, 0x2f, 0x64, 0x5b, 0xc5, 0x0a, 0xdb, 0xfe, 0x28, 0x9c, 0x22, 0xfb, 0x90, 0xd7, 0x1b, 0x6e, 0x92, 0x6f, 0x67, 0xfb, 0x6b, 0x17, 0x7b, 0xea, 0x53, 0x8f, 0xef, 0x57, 0x83, 0xf5, 0x5f, 0xa6, 0x46, 0xb0, 0xc4, 0x45, 0xff, 0x54, 0x10, 0xc8, 0x39, 0xfd, 0xd5, 0xf1, 0x7f, 0xef, /* S - byte alignment */ 0x00, 0x75, 0x40, 0x75, 0xcc, 0x6f, 0xfe, 0x8d, 0xcb, 0xe0, 0x72, 0x6f, 0x22, 0x22, 0x0a, 0xf5, 0x69, 0xc0, 0x69, 0x1a, 0xf0, 0x11, 0x5a, 0xeb, 0x1d, 0x09, 0x05, 0x4f, 0xfa, 0x77, 0xd2, 0x74, 0xff, 0x02, 0xe3, 0x1c, 0xc3, 0xa2, 0xc8, 0x42, 0x8a, 0xfc, 0x9c, 0x24, 0x67, 0xbf, 0xb0, 0x64, 0x3e, 0x56, 0xcd, 0x47 }; static const uint8_t nist_186_2_ecdsa_testvector_126_ptx[] = { /* Msg */ 0x1f, 0xaf, 0x00, 0x7c, 0x6e, 0x57, 0x8e, 0x86, 0x79, 0xfc, 0x92, 0xe5, 0x5b, 0x9a, 0x25, 0x1f, 0x0f, 0x95, 0x30, 0x4c, 0xe1, 0x58, 0x7f, 0xd5, 0x22, 0x3c, 0x17, 0x7c, 0x20, 0xac, 0xca, 0x9c, 0x56, 0x88, 0x08, 0xb2, 0xdf, 0xc6, 0xf8, 0x1d, 0x31, 0x5f, 0xc7, 0x22, 0x07, 0x69, 0x41, 0x33, 0x9f, 0x80, 0x9e, 0x71, 0x26, 0x6b, 0x9e, 0x6f, 0x71, 0xfd, 0xd8, 0x39, 0xed, 0x38, 0x4e, 0x95, 0xd9, 0xb9, 0x46, 0x88, 0xb2, 0x50, 0x55, 0x1c, 0xef, 0xee, 0xbd, 0x61, 0xef, 0xc4, 0xf9, 0xb2, 0x30, 0xa9, 0x95, 0x39, 0xc1, 0xbc, 0x43, 0xb6, 0xfa, 0x4b, 0x2c, 0x7b, 0x6a, 0xf4, 0x84, 0xbb, 0x11, 0x0a, 0x61, 0x05, 0xcf, 0x3b, 0xcd, 0x0c, 0x1d, 0x6f, 0x19, 0xa9, 0xfb, 0xf2, 0x75, 0x23, 0x29, 0xd6, 0xbe, 0xad, 0x9a, 0x93, 0x97, 0x30, 0x26, 0xf1, 0xbb, 0x4b, 0x7f, 0x28, 0x92, 0x99 }; static const uint8_t nist_186_2_ecdsa_testvector_126_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x48, 0x67, 0xad, 0xe1, 0x7b, 0x1c, 0x21, 0x96, 0xfb, 0x37, 0x7e, 0xa1, 0x7a, 0xaa, 0x1c, 0xb1, 0x75, 0x2d, 0x5e, 0xfe, 0x9f, 0xff, 0xaf, 0xf7, 0x7b, 0x76, 0xf6, 0x3d, 0xa7, 0xf6, 0xb4, 0x09, 0x3d, 0xc9, 0x83, 0xca, 0xe2, 0xa4, 0x44, 0x79, 0xdd, 0xfe, 0xc3, 0x99, 0x92, 0xee, 0x3b, 0x37, 0xf2, 0xc7 }; static const uint8_t nist_186_2_ecdsa_testvector_126_public_x[] = { /* Qx - byte alignment */ 0x00, 0xb3, 0xce, 0x1f, 0xbf, 0x76, 0x41, 0x0f, 0x49, 0x23, 0xea, 0x96, 0x8e, 0xa4, 0xf2, 0x6e, 0x2f, 0x5a, 0xb0, 0x34, 0xb8, 0xa1, 0xb7, 0xe3, 0x7f, 0xf2, 0xa6, 0xb9, 0x57, 0x24, 0x5e, 0x68, 0x21, 0xf3, 0x05, 0x38, 0x7f, 0xdf, 0xbd, 0xb0, 0x73, 0xf7, 0x2d, 0x2c, 0x18, 0xc2, 0x28, 0x5b, 0x12, 0xd8, 0xb1, 0x86 }; static const uint8_t nist_186_2_ecdsa_testvector_126_public_y[] = { /* Qy - byte alignment */ 0x00, 0x5d, 0x15, 0xf2, 0x47, 0x12, 0x82, 0xac, 0x16, 0x3d, 0x9d, 0x66, 0xd7, 0x19, 0xd0, 0x0a, 0x33, 0xcd, 0x99, 0x5d, 0x59, 0xb5, 0xd7, 0xd5, 0xb2, 0xa9, 0x21, 0x34, 0x4f, 0xb6, 0x59, 0x1c, 0x60, 0x65, 0x34, 0x89, 0x40, 0x84, 0x84, 0xd8, 0xa4, 0x3f, 0xd2, 0x71, 0xa1, 0x2b, 0xc7, 0x45, 0x1a, 0xb4, 0x38, 0xdc }; /* k = 00071d3e240a04eac60d80f26557009d8f66ecdf9be60ad72ce159bdbbc597cfe6e9125beec626d6769cef109fa0d732978646e */ static const uint8_t nist_186_2_ecdsa_testvector_126_out[] = { /* R - byte alignment */ 0x00, 0x45, 0x7b, 0x85, 0x03, 0x6a, 0x52, 0x26, 0x69, 0xf6, 0xd5, 0xf8, 0x22, 0xb8, 0x85, 0x77, 0xf6, 0x3f, 0x58, 0xcb, 0x87, 0x98, 0x01, 0x59, 0xa7, 0xb8, 0xfb, 0xde, 0xad, 0x41, 0xde, 0x4f, 0x24, 0x03, 0xe1, 0x7a, 0xab, 0x49, 0xdd, 0xca, 0x29, 0x1c, 0x8d, 0x39, 0xe4, 0x51, 0x73, 0x68, 0xb4, 0xaf, 0xef, 0x71, /* S - byte alignment */ 0x00, 0x10, 0x8f, 0xc9, 0x58, 0x3b, 0x97, 0x90, 0x8f, 0xfb, 0x8e, 0xf4, 0x7c, 0x6e, 0xea, 0xa9, 0xeb, 0x10, 0xf3, 0xed, 0xa1, 0xad, 0x66, 0xf8, 0x24, 0x7a, 0xa8, 0xf6, 0x72, 0x7b, 0xb1, 0xdb, 0x15, 0x42, 0x4c, 0xbf, 0x2f, 0x7e, 0x8a, 0xbf, 0x29, 0xf9, 0xb3, 0x34, 0x15, 0xb3, 0xc6, 0xff, 0x99, 0x73, 0x83, 0x61 }; static const uint8_t nist_186_2_ecdsa_testvector_127_ptx[] = { /* Msg */ 0xc4, 0x31, 0x0a, 0x0d, 0x8c, 0xec, 0xe8, 0x90, 0xee, 0x3f, 0xbe, 0xdb, 0xe9, 0x02, 0x9a, 0x13, 0x16, 0x37, 0x09, 0xe6, 0x81, 0x8c, 0x88, 0x2a, 0xb7, 0x28, 0x3b, 0xc0, 0x20, 0xa3, 0xe2, 0xbf, 0x8f, 0x56, 0x08, 0xce, 0x18, 0xd6, 0x7d, 0xd2, 0x22, 0xbb, 0x07, 0xca, 0xbc, 0xa6, 0x55, 0xf6, 0x35, 0x82, 0x34, 0x3f, 0xe6, 0x09, 0x06, 0xd3, 0x53, 0x8a, 0x6f, 0x10, 0x73, 0xea, 0x51, 0xa3, 0x4b, 0xea, 0xfb, 0xf1, 0xc2, 0xa7, 0x9d, 0xb6, 0xb0, 0x67, 0xff, 0xeb, 0x38, 0x92, 0x73, 0xee, 0x58, 0xff, 0x09, 0xdd, 0xbe, 0x71, 0x01, 0x42, 0xdd, 0x62, 0x86, 0xf6, 0x41, 0xff, 0x99, 0x3f, 0x1f, 0x73, 0x4b, 0x3c, 0x31, 0x68, 0x2f, 0x83, 0xc0, 0xcb, 0x0f, 0x08, 0x03, 0xd0, 0xde, 0x41, 0xa7, 0x37, 0xee, 0x87, 0xaf, 0xcd, 0x63, 0xc0, 0x7e, 0x35, 0xe8, 0x3b, 0x32, 0xe8, 0xa0, 0xdb }; static const uint8_t nist_186_2_ecdsa_testvector_127_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x54, 0xe2, 0xa7, 0xc7, 0x44, 0x93, 0x63, 0xd7, 0x2f, 0x66, 0x10, 0xf2, 0x93, 0x1e, 0x82, 0xa7, 0x24, 0xab, 0xea, 0x79, 0x30, 0xbd, 0x36, 0xed, 0xcc, 0xa5, 0x7b, 0xdc, 0x84, 0xd4, 0x2e, 0x07, 0x0b, 0xf0, 0xb7, 0x94, 0xde, 0x47, 0xd1, 0xb1, 0xe0, 0xc0, 0x97, 0x35, 0x0e, 0xf6, 0x64, 0x97, 0x29, 0xa0 }; static const uint8_t nist_186_2_ecdsa_testvector_127_public_x[] = { /* Qx - byte alignment */ 0x00, 0x25, 0xb1, 0x0b, 0x27, 0x9a, 0x04, 0x10, 0xbd, 0x42, 0x45, 0x11, 0x2e, 0x51, 0xc2, 0x98, 0xbc, 0xa1, 0x43, 0x65, 0xf0, 0xd7, 0x26, 0xfe, 0x85, 0xfb, 0x57, 0x7a, 0x17, 0xd3, 0xbe, 0xc8, 0xdc, 0x5d, 0x06, 0x92, 0xdc, 0x83, 0xf4, 0x99, 0x03, 0x57, 0xf2, 0x99, 0x61, 0xa9, 0x61, 0xf0, 0xd0, 0x16, 0x0a, 0xac }; static const uint8_t nist_186_2_ecdsa_testvector_127_public_y[] = { /* Qy - byte alignment */ 0x01, 0xa4, 0xbb, 0x6f, 0xe1, 0x8d, 0x9e, 0xd9, 0x78, 0xf8, 0xd6, 0x8a, 0x0e, 0xda, 0xe6, 0x59, 0xe4, 0xa9, 0x3f, 0x23, 0xfa, 0x2a, 0x5a, 0xd3, 0xcf, 0x70, 0x32, 0x77, 0xa5, 0x53, 0x34, 0xfa, 0x0b, 0x5a, 0x22, 0x1d, 0x30, 0x51, 0xdf, 0x5a, 0xbd, 0x4f, 0x36, 0x50, 0x98, 0xbb, 0x88, 0x32, 0x71, 0x62, 0x06, 0x25 }; /* k = 00016e79c6ee8d97dedd9c2b0fd56ad8a06d9a3690735656a47e664cfbb745ab61b620d8c33ef6467b316b2488566208397f4be */ static const uint8_t nist_186_2_ecdsa_testvector_127_out[] = { /* R - byte alignment */ 0x00, 0x70, 0x9a, 0x59, 0x35, 0x1f, 0x81, 0x73, 0xf9, 0xdc, 0x85, 0x07, 0x6c, 0x1d, 0xfa, 0x25, 0x79, 0x2f, 0xc9, 0xa2, 0xf8, 0xcc, 0xe5, 0x4b, 0x72, 0xd0, 0x14, 0x66, 0x60, 0x67, 0x4c, 0x1f, 0x20, 0x5a, 0xec, 0x5f, 0xef, 0x6d, 0x93, 0x52, 0xcb, 0xd8, 0xc4, 0xde, 0xc2, 0x44, 0x93, 0x0e, 0xdd, 0x7c, 0x70, 0x9a, /* S - byte alignment */ 0x00, 0x26, 0x23, 0xbf, 0xa0, 0x1c, 0x32, 0xcc, 0x0a, 0x84, 0x43, 0x8d, 0x60, 0xdd, 0xe1, 0xfe, 0x82, 0xe9, 0xb5, 0x61, 0x0f, 0x45, 0x19, 0xae, 0x48, 0xe8, 0xa8, 0x82, 0xb2, 0x2b, 0xe6, 0x7e, 0xce, 0x8b, 0xa2, 0x98, 0xec, 0x19, 0xce, 0x4b, 0xa7, 0xe6, 0x20, 0xa1, 0xa6, 0xc0, 0xb6, 0xde, 0x12, 0x99, 0x6d, 0x77 }; static const uint8_t nist_186_2_ecdsa_testvector_128_ptx[] = { /* Msg */ 0xa8, 0xc9, 0xa5, 0x8a, 0xe4, 0x68, 0x16, 0x90, 0x05, 0xab, 0x9b, 0x57, 0xed, 0x7e, 0xc1, 0x49, 0x2d, 0xbf, 0x3d, 0x54, 0xc8, 0xf2, 0xd3, 0x41, 0x3a, 0x37, 0x76, 0x41, 0xb8, 0x7a, 0xb1, 0xc9, 0xba, 0xea, 0x45, 0xa0, 0xb7, 0xac, 0x14, 0x37, 0x2f, 0xd0, 0x3d, 0x38, 0xef, 0x84, 0x89, 0x61, 0x91, 0x87, 0x06, 0x93, 0x42, 0xe1, 0xf1, 0x26, 0xc8, 0xd2, 0xd9, 0x80, 0xc3, 0x08, 0x02, 0xe6, 0x32, 0x14, 0x08, 0x91, 0x3a, 0x1f, 0xc4, 0x05, 0x23, 0xd9, 0x73, 0x9e, 0xa4, 0xb3, 0x15, 0x6c, 0x60, 0x4e, 0x14, 0x41, 0xb0, 0x33, 0x26, 0x07, 0xa3, 0xc4, 0x74, 0x57, 0x43, 0x73, 0xfc, 0x48, 0x1a, 0x31, 0x34, 0x85, 0xf5, 0x29, 0xf0, 0xa3, 0xe8, 0xaf, 0x85, 0xb1, 0x92, 0x73, 0x2f, 0x10, 0xa2, 0xfb, 0xb0, 0x85, 0x9a, 0x50, 0x3a, 0x8c, 0xd4, 0xf7, 0x8f, 0xef, 0xc2, 0x22, 0x67, 0x98 }; static const uint8_t nist_186_2_ecdsa_testvector_128_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x58, 0xd1, 0x3f, 0x58, 0x45, 0xfd, 0xba, 0xa2, 0x3d, 0xb9, 0xde, 0x5f, 0xb7, 0xdd, 0x25, 0x80, 0x1e, 0x49, 0x28, 0x8b, 0xee, 0x32, 0xf6, 0x03, 0x5e, 0x69, 0xa2, 0x1d, 0xa8, 0xd3, 0x36, 0xe1, 0xc7, 0x6b, 0x59, 0xe4, 0x26, 0x9f, 0x3a, 0xf8, 0x4d, 0x8d, 0x47, 0xaf, 0xfb, 0x48, 0x25, 0xe4, 0x6e, 0xf2 }; static const uint8_t nist_186_2_ecdsa_testvector_128_public_x[] = { /* Qx - byte alignment */ 0x01, 0x42, 0xa7, 0xe9, 0x7e, 0xa9, 0xec, 0x59, 0xfa, 0x59, 0x6b, 0x50, 0x1c, 0xef, 0xc0, 0x31, 0x89, 0x91, 0x29, 0x32, 0xef, 0xd3, 0xa5, 0xf5, 0xf3, 0xcf, 0x5d, 0x3f, 0x68, 0x11, 0x66, 0x57, 0x35, 0x22, 0xbf, 0xcf, 0xf4, 0x0f, 0x08, 0x0b, 0x01, 0x3d, 0x57, 0x01, 0x0d, 0x33, 0x13, 0x63, 0x5c, 0x06, 0x40, 0x90 }; static const uint8_t nist_186_2_ecdsa_testvector_128_public_y[] = { /* Qy - byte alignment */ 0x00, 0x45, 0xf0, 0x57, 0x14, 0x21, 0xd4, 0x88, 0x85, 0x3f, 0x5c, 0x61, 0x46, 0x33, 0x03, 0xdd, 0x99, 0x6a, 0x7d, 0xca, 0xe2, 0x80, 0xa0, 0x13, 0x8f, 0xdd, 0xbd, 0x8c, 0x05, 0xee, 0x51, 0xf2, 0xd4, 0x89, 0xf6, 0xbb, 0xb9, 0x56, 0x16, 0x48, 0x02, 0xe2, 0xb6, 0xc6, 0xa8, 0x07, 0xf8, 0xdf, 0x49, 0x01, 0x0e, 0x66 }; /* k = 00010d75461d11156b46f7dac65750135ced6271516de97b660ac9b535bf3ef20739089443c2257673591a970dabc12ba8e4064 */ static const uint8_t nist_186_2_ecdsa_testvector_128_out[] = { /* R - byte alignment */ 0x00, 0x7d, 0xfc, 0x37, 0x83, 0x3f, 0x96, 0x63, 0xd4, 0xa4, 0xab, 0x2c, 0xfa, 0x40, 0x20, 0x02, 0x10, 0x6d, 0x83, 0xb8, 0x9a, 0x3d, 0xa7, 0xc9, 0x74, 0xff, 0x35, 0xf6, 0xd0, 0xa5, 0xa0, 0x30, 0x44, 0xf7, 0x83, 0x67, 0xb9, 0xb4, 0x01, 0xd5, 0x22, 0x2b, 0x4d, 0xb2, 0xcd, 0xe1, 0x39, 0x7a, 0xbb, 0xd7, 0x35, 0xb6, /* S - byte alignment */ 0x00, 0x37, 0x61, 0x43, 0xde, 0x67, 0xfe, 0xcd, 0xb6, 0xda, 0x1c, 0x82, 0x65, 0xfb, 0x79, 0xea, 0x92, 0x79, 0x76, 0x78, 0xf2, 0x60, 0x13, 0xa0, 0x25, 0x75, 0xde, 0xac, 0x47, 0x6c, 0xcd, 0x5d, 0x35, 0x92, 0xc4, 0xda, 0xfa, 0x99, 0xc9, 0x2b, 0x84, 0x4c, 0xf7, 0x21, 0x63, 0xe8, 0xe8, 0x98, 0x01, 0xbe, 0x32, 0x31 }; static const uint8_t nist_186_2_ecdsa_testvector_129_ptx[] = { /* Msg */ 0xf2, 0x32, 0x3a, 0x75, 0xbe, 0x27, 0x91, 0x18, 0x23, 0x50, 0x52, 0x5f, 0xec, 0x58, 0x4f, 0x69, 0x0f, 0x6e, 0xcb, 0xf9, 0x90, 0x99, 0x82, 0x6e, 0xa3, 0x4b, 0xea, 0xf5, 0x11, 0x3a, 0xb9, 0xfd, 0xdc, 0x6b, 0xa7, 0xeb, 0x26, 0x8f, 0x75, 0x0f, 0x4f, 0x93, 0x2e, 0xd7, 0x5e, 0x73, 0xad, 0x43, 0xa2, 0x4f, 0x5f, 0x99, 0x99, 0xc0, 0x4a, 0x5a, 0x10, 0x6c, 0x4e, 0x74, 0x8c, 0xd8, 0xab, 0xb9, 0xe9, 0x7e, 0xc4, 0x90, 0x41, 0x20, 0x23, 0xeb, 0x0f, 0x5b, 0xbc, 0x79, 0x94, 0x7f, 0x76, 0x1c, 0x7a, 0x9e, 0xe7, 0x9d, 0xb8, 0xe3, 0x5f, 0x9f, 0xb5, 0x25, 0x29, 0xd1, 0xb0, 0xbc, 0x0d, 0x68, 0x5f, 0x94, 0x19, 0xcd, 0xd6, 0x80, 0xa2, 0x92, 0xab, 0xd0, 0x85, 0xab, 0x58, 0x25, 0xb2, 0xdb, 0xe0, 0x84, 0xec, 0x6c, 0xb6, 0xaa, 0xca, 0x23, 0xda, 0x9f, 0x02, 0x73, 0x45, 0x8e, 0xe6, 0xf1 }; static const uint8_t nist_186_2_ecdsa_testvector_129_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x6d, 0xff, 0xc3, 0xf5, 0x92, 0x2c, 0x17, 0xfa, 0x81, 0x38, 0xf0, 0x9c, 0xce, 0x93, 0x47, 0x4d, 0xfd, 0x06, 0x78, 0x6c, 0x27, 0xe2, 0x23, 0x38, 0x40, 0xb8, 0xcf, 0xd2, 0xbf, 0xf3, 0x83, 0xe1, 0xd7, 0x16, 0x2b, 0xc5, 0x94, 0xd6, 0xf9, 0x58, 0x8c, 0xf8, 0xf9, 0x65, 0x3d, 0x28, 0xa6, 0x99, 0xaa, 0x6d }; static const uint8_t nist_186_2_ecdsa_testvector_129_public_x[] = { /* Qx - byte alignment */ 0x01, 0x15, 0xb5, 0x99, 0x8b, 0x3a, 0xd4, 0xd8, 0x98, 0x77, 0xa0, 0x52, 0x9d, 0x63, 0x15, 0x59, 0x47, 0xfa, 0x36, 0x8f, 0xaf, 0x70, 0x90, 0x5d, 0xd2, 0xd3, 0x3b, 0x18, 0x3c, 0xb9, 0xeb, 0xef, 0x11, 0x49, 0x2d, 0x81, 0x25, 0x8c, 0xa5, 0xca, 0x3f, 0xdd, 0x7a, 0x4d, 0xa3, 0x75, 0xa9, 0x85, 0xe4, 0x75, 0xe3, 0x42 }; static const uint8_t nist_186_2_ecdsa_testvector_129_public_y[] = { /* Qy - byte alignment */ 0x00, 0x5d, 0x00, 0x7b, 0x8f, 0xb5, 0x2d, 0x28, 0x26, 0xd0, 0x0d, 0xa4, 0x7e, 0x72, 0xd5, 0xa9, 0xaf, 0xc3, 0x69, 0xed, 0x7e, 0x30, 0x88, 0x5f, 0x65, 0xa0, 0x80, 0x87, 0xcf, 0x3c, 0x70, 0x57, 0xac, 0xed, 0xa4, 0x87, 0x00, 0x38, 0x34, 0x43, 0x5b, 0xbd, 0xc9, 0xcb, 0xd1, 0xe1, 0x41, 0x82, 0x13, 0x05, 0x01, 0xc8 }; /* k = 000478825379adb579470f028566011597ea6d63429a9d13e019b628e83c5b11732f2c9a430f7e8892566868e12a058ad1ce2ec */ static const uint8_t nist_186_2_ecdsa_testvector_129_out[] = { /* R - byte alignment */ 0x00, 0x18, 0x35, 0x4d, 0xaf, 0xae, 0x65, 0xb5, 0xed, 0x8a, 0xdb, 0xc1, 0x2b, 0x90, 0xa0, 0x96, 0xd5, 0x0d, 0x94, 0xf0, 0x39, 0xba, 0xd9, 0x56, 0x46, 0xd7, 0x7c, 0xed, 0x3c, 0x5b, 0x62, 0x06, 0xa9, 0x7b, 0x2f, 0x6b, 0x0a, 0x65, 0xa7, 0x98, 0xab, 0x14, 0x85, 0x92, 0xd0, 0x23, 0x5d, 0x79, 0xe7, 0xe5, 0xc0, 0x2d, /* S - byte alignment */ 0x00, 0x2c, 0x8b, 0xaf, 0x9f, 0xd4, 0x7b, 0x26, 0xb4, 0x4c, 0x7c, 0xcb, 0x96, 0x7c, 0x36, 0xa5, 0xbd, 0xc5, 0x49, 0x21, 0x5e, 0x72, 0x90, 0x5f, 0x3a, 0x77, 0xb9, 0xd5, 0x70, 0x05, 0x83, 0x2a, 0xcc, 0x65, 0xe5, 0x4b, 0x7e, 0x1d, 0x22, 0x84, 0x83, 0x8c, 0xf4, 0x1f, 0x7f, 0x78, 0x8f, 0x87, 0x8d, 0x85, 0xc2, 0xf9 }; static const uint8_t nist_186_2_ecdsa_testvector_130_ptx[] = { /* Msg */ 0x79, 0x63, 0x32, 0x4b, 0xdf, 0x37, 0xe2, 0xfb, 0xd0, 0xa1, 0x31, 0xad, 0x26, 0xa0, 0x70, 0x79, 0x63, 0x3e, 0xd2, 0xd8, 0xf5, 0xc4, 0xd2, 0x6e, 0xb9, 0x2a, 0xcf, 0x26, 0xbd, 0xd1, 0xf9, 0x84, 0x4a, 0x75, 0x71, 0x37, 0x22, 0x5d, 0xac, 0xee, 0x06, 0xd4, 0x19, 0x6d, 0x7b, 0xdd, 0x03, 0xe0, 0xce, 0x23, 0xb8, 0x6f, 0x56, 0x2f, 0xeb, 0x12, 0xf9, 0xdd, 0x57, 0xa7, 0xf1, 0x11, 0xa5, 0x42, 0xd0, 0xa6, 0x90, 0xc4, 0xc2, 0xa7, 0x47, 0xaf, 0x13, 0xc2, 0x12, 0x38, 0xf1, 0xf9, 0x39, 0x9e, 0x72, 0x9b, 0x22, 0xbb, 0xd9, 0x73, 0xb9, 0xd9, 0x15, 0x3f, 0x14, 0xc6, 0x8a, 0x64, 0x58, 0x2b, 0x14, 0xdf, 0xd6, 0x19, 0x49, 0x7f, 0x7a, 0xe5, 0xff, 0x51, 0x66, 0x36, 0x0f, 0x5c, 0xda, 0x5c, 0x58, 0x8f, 0x57, 0xe3, 0x06, 0xf8, 0x04, 0x68, 0x14, 0x37, 0x50, 0xac, 0x0f, 0x31, 0xd9, 0xe7 }; static const uint8_t nist_186_2_ecdsa_testvector_130_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x66, 0x9a, 0x1d, 0xa4, 0xa2, 0x16, 0x9b, 0x6d, 0xdd, 0x27, 0xb0, 0x98, 0x97, 0x38, 0x7b, 0x4c, 0x64, 0x24, 0xfc, 0x4a, 0x4b, 0xab, 0x74, 0xbc, 0xf7, 0x68, 0x97, 0xe7, 0x75, 0xc0, 0x11, 0x03, 0xf6, 0x27, 0xe3, 0x57, 0x8f, 0x5d, 0xd6, 0x14, 0xf8, 0x8b, 0x80, 0x94, 0xcb, 0x47, 0x5e, 0x17, 0xf1, 0x0c }; static const uint8_t nist_186_2_ecdsa_testvector_130_public_x[] = { /* Qx - byte alignment */ 0x01, 0x13, 0xc1, 0x7a, 0xa3, 0xbf, 0x85, 0x86, 0x59, 0x2c, 0xed, 0x7e, 0x80, 0x2b, 0xa8, 0x71, 0x08, 0x8f, 0xfd, 0xd1, 0x7c, 0xa1, 0xe3, 0xc1, 0x28, 0xac, 0x11, 0x83, 0x83, 0x16, 0x66, 0x6f, 0x4f, 0x06, 0xd4, 0x64, 0x67, 0x76, 0x39, 0xc8, 0xc8, 0x08, 0xf6, 0x2d, 0xbd, 0xcf, 0x07, 0xdd, 0x4f, 0xa1, 0x24, 0xf0 }; static const uint8_t nist_186_2_ecdsa_testvector_130_public_y[] = { /* Qy - byte alignment */ 0x00, 0x9b, 0x86, 0x7e, 0x2e, 0x29, 0x60, 0x8a, 0xad, 0x63, 0x5b, 0xb2, 0x57, 0xb2, 0xa2, 0x4f, 0x71, 0x39, 0x5c, 0x8e, 0x6a, 0x22, 0xbb, 0xef, 0x60, 0x8a, 0xf9, 0x38, 0x19, 0x75, 0x44, 0x99, 0xf9, 0x1d, 0xe4, 0xc3, 0x37, 0xed, 0x21, 0xed, 0x81, 0xd1, 0x65, 0xe9, 0xcf, 0xa9, 0x71, 0x57, 0xa3, 0xa0, 0xc8, 0xde }; /* k = 000033608dd88995c994f72266cfff53c4901a04560f9c5b33f9478ed32461ea3a28d67634a8fbaf497d315e1a2b178300fde2e */ static const uint8_t nist_186_2_ecdsa_testvector_130_out[] = { /* R - byte alignment */ 0x00, 0x72, 0xea, 0xaf, 0xde, 0xfd, 0x9a, 0xfd, 0x85, 0x76, 0xf0, 0xda, 0x99, 0x93, 0x3a, 0x9c, 0xf4, 0x51, 0x36, 0xb7, 0x3c, 0xb7, 0xd7, 0xa1, 0x15, 0xa5, 0x83, 0xd3, 0x7e, 0xe6, 0x44, 0x20, 0xeb, 0x4d, 0x51, 0x92, 0xb4, 0x33, 0x2a, 0x84, 0x6f, 0xa1, 0xc3, 0x81, 0xaa, 0x37, 0xec, 0xda, 0x89, 0x66, 0x20, 0xfc, /* S - byte alignment */ 0x00, 0x34, 0x96, 0x3b, 0x47, 0xf5, 0x28, 0x9b, 0xd9, 0x81, 0xe2, 0x3b, 0xff, 0x06, 0xa2, 0x15, 0xa7, 0xfe, 0x97, 0x55, 0xa1, 0xf8, 0xcf, 0xa7, 0xb2, 0x90, 0x2b, 0xb8, 0x30, 0xa0, 0xb1, 0x0e, 0xa1, 0x51, 0xa0, 0x0a, 0x6e, 0x98, 0x4b, 0xcb, 0xef, 0x13, 0x7d, 0x06, 0xdf, 0xf0, 0x11, 0xd4, 0xfd, 0xd8, 0x72, 0x3d }; static const uint8_t nist_186_2_ecdsa_testvector_131_ptx[] = { /* Msg */ 0x59, 0xa4, 0x50, 0xd6, 0x16, 0x92, 0x56, 0x92, 0xb8, 0x66, 0xec, 0xdb, 0xfd, 0x74, 0x63, 0xcc, 0x64, 0xd4, 0xc7, 0x54, 0xed, 0x13, 0xc0, 0x8c, 0x20, 0x28, 0xb6, 0x48, 0x50, 0xaa, 0x38, 0xed, 0x21, 0x40, 0x9f, 0x82, 0x48, 0x58, 0xee, 0x09, 0x92, 0x1c, 0xfd, 0x0f, 0x28, 0xa1, 0xd7, 0x82, 0x11, 0x62, 0x60, 0xc3, 0xf8, 0xee, 0x3b, 0xfc, 0x30, 0xdd, 0xea, 0xb4, 0xf5, 0x08, 0x37, 0xa0, 0xf5, 0xfa, 0xd3, 0xbc, 0x0f, 0xa1, 0x3e, 0x9b, 0x5a, 0x49, 0xe6, 0xfb, 0x69, 0xcc, 0x93, 0x9d, 0xcd, 0x02, 0x02, 0x54, 0xdc, 0x7f, 0xd0, 0x5b, 0xb1, 0x7e, 0x9b, 0xeb, 0x74, 0x18, 0x63, 0x0d, 0xdc, 0xba, 0x36, 0xae, 0xf1, 0xd5, 0x0c, 0xf1, 0x17, 0xd7, 0xf0, 0xc9, 0x48, 0x5b, 0x60, 0xc6, 0xa1, 0x9c, 0xf7, 0x2f, 0x20, 0x30, 0x49, 0x52, 0xac, 0xf3, 0x0f, 0x18, 0x55, 0x41, 0x84, 0xdc }; static const uint8_t nist_186_2_ecdsa_testvector_131_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x11, 0x82, 0x52, 0x18, 0x93, 0xfe, 0x9b, 0xbd, 0xab, 0x3d, 0x51, 0x7b, 0x99, 0x2c, 0xe4, 0xc8, 0xb5, 0xb9, 0x13, 0x44, 0x9a, 0x1e, 0x8a, 0x64, 0x6d, 0x46, 0x82, 0x6e, 0x3d, 0x39, 0x2c, 0x9e, 0xd8, 0x37, 0x9f, 0x1f, 0xab, 0x71, 0x24, 0x31, 0x27, 0xf0, 0xf3, 0x7f, 0x9b, 0xcc, 0xdc, 0x48, 0xb3, 0xab }; static const uint8_t nist_186_2_ecdsa_testvector_131_public_x[] = { /* Qx - byte alignment */ 0x00, 0x22, 0xda, 0x40, 0x19, 0x4e, 0x34, 0xf7, 0xa1, 0xe5, 0x15, 0xaf, 0x92, 0x19, 0x73, 0xe3, 0x36, 0x60, 0xb2, 0xcf, 0x4f, 0xc1, 0xbc, 0xee, 0xbf, 0x3f, 0xf9, 0x42, 0x4c, 0xf7, 0x52, 0x84, 0x63, 0x75, 0x7f, 0xcd, 0x25, 0x8e, 0xd2, 0x58, 0x42, 0xa1, 0xdf, 0xc3, 0x96, 0x2d, 0xd3, 0xcc, 0x7b, 0x09, 0x86, 0xee }; static const uint8_t nist_186_2_ecdsa_testvector_131_public_y[] = { /* Qy - byte alignment */ 0x00, 0x99, 0x30, 0x3a, 0x1c, 0x50, 0x7e, 0x07, 0x97, 0xd5, 0xac, 0x19, 0xd2, 0xb6, 0xfc, 0x42, 0xec, 0xfd, 0xed, 0x12, 0x70, 0xa1, 0x63, 0xa9, 0x5e, 0x51, 0x53, 0xe8, 0xbd, 0xa4, 0x84, 0xc3, 0x26, 0x30, 0x03, 0xcd, 0xcb, 0x4b, 0x4c, 0xeb, 0xfb, 0xca, 0x2d, 0x0b, 0x4b, 0x07, 0x66, 0x45, 0x16, 0xd9, 0x19, 0x43 }; /* k = 000591d2484fd67a396b07bdd351d61b66eb791e22991530de6fce16be730a95af789789bf86dcffe8d3e49af64fcd7aa026d0e */ static const uint8_t nist_186_2_ecdsa_testvector_131_out[] = { /* R - byte alignment */ 0x00, 0x6c, 0x33, 0x31, 0xc5, 0x87, 0x19, 0x7e, 0x5d, 0x4b, 0x74, 0x02, 0x99, 0x39, 0xd9, 0xc0, 0x8b, 0xd0, 0x65, 0xed, 0x5b, 0x03, 0x16, 0x1e, 0xfa, 0xc2, 0x49, 0x5d, 0x2e, 0x86, 0x41, 0x55, 0xf2, 0x02, 0x0c, 0x52, 0xb1, 0xbf, 0xdf, 0xa1, 0x13, 0x20, 0x74, 0x86, 0x4b, 0x29, 0x5f, 0xe4, 0x5b, 0xe3, 0x07, 0x07, /* S - byte alignment */ 0x00, 0x38, 0x08, 0x1e, 0x2c, 0x12, 0x60, 0x31, 0x1d, 0xd1, 0xb7, 0x53, 0x3d, 0xf3, 0x14, 0x55, 0xe0, 0xf9, 0x7f, 0x98, 0x89, 0x22, 0x5e, 0x73, 0x6c, 0x81, 0xd7, 0x61, 0xb9, 0x74, 0xdd, 0x6c, 0xd0, 0x62, 0xd9, 0x58, 0x6c, 0x6c, 0x4f, 0x93, 0xf9, 0x0b, 0x15, 0xfb, 0xa9, 0xb8, 0x86, 0x42, 0x89, 0x32, 0x70, 0xac }; static const uint8_t nist_186_2_ecdsa_testvector_132_ptx[] = { /* Msg */ 0x31, 0x04, 0x25, 0x69, 0x53, 0x62, 0x01, 0x2e, 0x38, 0x55, 0x7b, 0x02, 0x37, 0x2e, 0xb4, 0x54, 0x8f, 0x7c, 0x06, 0xe0, 0x9d, 0x78, 0xe0, 0x31, 0x53, 0xa0, 0xd1, 0x64, 0xe5, 0xa1, 0xe2, 0x30, 0xc5, 0x7a, 0x29, 0x23, 0xd2, 0xdf, 0x9b, 0x2e, 0xcd, 0xdb, 0x22, 0x64, 0x0c, 0xba, 0xf0, 0xff, 0x72, 0x26, 0x12, 0xa4, 0x9e, 0x90, 0x48, 0xe8, 0x63, 0xd2, 0x14, 0x12, 0x78, 0x12, 0x11, 0x22, 0x71, 0xe9, 0x86, 0x13, 0xee, 0xc4, 0x3b, 0x5e, 0x13, 0x8b, 0x8b, 0xbf, 0x38, 0x81, 0xbb, 0x3b, 0xe1, 0x6c, 0x8a, 0x62, 0xf0, 0xf5, 0x09, 0xd2, 0x19, 0x51, 0xad, 0xfc, 0x97, 0x21, 0xa3, 0x2b, 0x1d, 0x97, 0x63, 0xc2, 0x10, 0xdb, 0x88, 0xc4, 0xf3, 0xad, 0xdf, 0x9a, 0x23, 0x4b, 0xbe, 0x11, 0xc4, 0x95, 0x97, 0xa3, 0xfb, 0x6f, 0xcc, 0xf7, 0x5d, 0x67, 0xc5, 0xab, 0xa8, 0x98, 0x41, 0x50 }; static const uint8_t nist_186_2_ecdsa_testvector_132_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x39, 0xe1, 0x29, 0x56, 0xad, 0xcc, 0x35, 0x0f, 0xea, 0x48, 0x18, 0xe4, 0x65, 0xef, 0xde, 0x85, 0x1d, 0xfa, 0x14, 0x0d, 0xa9, 0x82, 0x2f, 0xde, 0x7a, 0x26, 0xe2, 0xd7, 0xf7, 0x4d, 0x65, 0x1e, 0x59, 0x77, 0x1e, 0x3f, 0xa0, 0x89, 0xb7, 0x6c, 0xaf, 0x73, 0x22, 0x38, 0xd5, 0xc9, 0x82, 0x6d, 0xbe, 0x66 }; static const uint8_t nist_186_2_ecdsa_testvector_132_public_x[] = { /* Qx - byte alignment */ 0x00, 0xb2, 0x5d, 0x8a, 0xf0, 0x8e, 0x3e, 0x91, 0xac, 0x51, 0x98, 0x5a, 0x2b, 0x0f, 0xd4, 0x37, 0xbf, 0x32, 0xf9, 0x1b, 0x2c, 0x87, 0x6f, 0x68, 0xbd, 0x7a, 0x19, 0x94, 0x17, 0xeb, 0xc0, 0x75, 0x59, 0x3f, 0x09, 0xba, 0x5c, 0xcf, 0x90, 0xf1, 0x41, 0x26, 0x60, 0x34, 0x75, 0x5a, 0x03, 0x2b, 0xeb, 0x78, 0x4c, 0x28 }; static const uint8_t nist_186_2_ecdsa_testvector_132_public_y[] = { /* Qy - byte alignment */ 0x01, 0xe2, 0x2e, 0x1d, 0xc5, 0xe4, 0xfb, 0x11, 0x19, 0xc3, 0x30, 0x3e, 0x6f, 0x33, 0x77, 0xc2, 0x26, 0x10, 0x01, 0xcd, 0xbb, 0xa9, 0x5f, 0xd4, 0xa4, 0x96, 0x90, 0xb6, 0x26, 0xaf, 0x4a, 0xdb, 0x0f, 0x92, 0xd5, 0xb3, 0x71, 0x82, 0x1d, 0x9b, 0xfe, 0x6d, 0xcd, 0xcf, 0x83, 0xff, 0x89, 0x40, 0x27, 0xaf, 0xbc, 0x19 }; /* k = 000572dba48019e2779fadeae40f8efcc690aa39811814f5218781382e2e4460da443d2a81eff5d0aabbb37693408e0a45e1964 */ static const uint8_t nist_186_2_ecdsa_testvector_132_out[] = { /* R - byte alignment */ 0x00, 0x04, 0xac, 0x35, 0x7f, 0xe0, 0x9a, 0x9c, 0x05, 0x36, 0x23, 0x52, 0xd0, 0xa8, 0xe7, 0xde, 0xfd, 0xf2, 0x03, 0x4e, 0x98, 0x09, 0x07, 0x3a, 0x24, 0x87, 0x10, 0x8e, 0x66, 0x64, 0x0a, 0x7b, 0x97, 0x23, 0x80, 0x53, 0x59, 0x63, 0x64, 0x3d, 0x5e, 0xfb, 0xa4, 0xe8, 0x27, 0x1c, 0x74, 0xd7, 0xaf, 0x18, 0x01, 0xbd, /* S - byte alignment */ 0x00, 0x22, 0x14, 0x1c, 0x29, 0x0b, 0xcb, 0xab, 0x70, 0x9b, 0xaa, 0xb7, 0x0c, 0xa5, 0x86, 0xda, 0x85, 0x05, 0x2c, 0x1e, 0x0d, 0x94, 0xe9, 0xf6, 0xf8, 0x4e, 0x8f, 0x55, 0x15, 0x51, 0x81, 0xff, 0x7f, 0xf9, 0x9c, 0x25, 0x26, 0x6f, 0x6a, 0x35, 0xf2, 0xa7, 0x98, 0xe2, 0x72, 0xe6, 0xf5, 0x5b, 0x05, 0x5e, 0x17, 0xf1 }; static const uint8_t nist_186_2_ecdsa_testvector_133_ptx[] = { /* Msg */ 0x74, 0xb1, 0xfb, 0x86, 0x5f, 0x5d, 0xf6, 0xe1, 0xac, 0x90, 0x45, 0x78, 0x9f, 0xd7, 0x56, 0xcf, 0x35, 0x82, 0x4a, 0x5a, 0xa3, 0x4b, 0x01, 0x43, 0xfe, 0x38, 0x77, 0x67, 0x3c, 0xc2, 0x54, 0xa2, 0x5b, 0x36, 0xbe, 0x4c, 0xe0, 0x5c, 0x72, 0x03, 0x83, 0x57, 0x13, 0xab, 0x29, 0xcc, 0xc1, 0xb4, 0x12, 0x46, 0xee, 0x9b, 0x54, 0xd9, 0x6d, 0xb4, 0x88, 0x06, 0xcc, 0x26, 0xc3, 0xdf, 0xe4, 0x37, 0xc8, 0x6b, 0xae, 0xca, 0x7b, 0x4c, 0x59, 0x25, 0x99, 0x9f, 0x99, 0xf8, 0xa7, 0x24, 0x41, 0x9b, 0x28, 0x9f, 0x14, 0x98, 0x13, 0x7e, 0xd8, 0x69, 0x84, 0xbb, 0xad, 0x83, 0xb2, 0x04, 0x9d, 0x93, 0x21, 0x1a, 0x74, 0x07, 0x19, 0x77, 0xd2, 0xd0, 0x56, 0x33, 0x7e, 0x66, 0x01, 0x28, 0xfd, 0x0d, 0xdf, 0x55, 0x64, 0x58, 0xc9, 0x80, 0x6a, 0xeb, 0x5c, 0x1f, 0xc1, 0x84, 0xf1, 0x79, 0xa7, 0x3d }; static const uint8_t nist_186_2_ecdsa_testvector_133_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x1e, 0x24, 0xd2, 0xd3, 0x63, 0x56, 0xa6, 0x4c, 0x9f, 0xe3, 0xb1, 0xb9, 0x55, 0xe9, 0x9c, 0x30, 0xf6, 0xa2, 0x23, 0xc3, 0x0b, 0xcf, 0x33, 0xf3, 0x6e, 0xeb, 0x4a, 0xa8, 0x46, 0x63, 0xf4, 0x36, 0xac, 0x02, 0x48, 0x9b, 0xe1, 0x9c, 0xe3, 0x91, 0x3c, 0xcf, 0x19, 0xca, 0xe0, 0xc6, 0xee, 0x45, 0xe6, 0x57 }; static const uint8_t nist_186_2_ecdsa_testvector_133_public_x[] = { /* Qx - byte alignment */ 0x00, 0xe4, 0x00, 0x75, 0xcc, 0x1a, 0x8d, 0xb1, 0xdc, 0x3a, 0xe8, 0x4f, 0xb1, 0x1d, 0xf4, 0x9f, 0x0e, 0xb6, 0x4c, 0x57, 0xea, 0xcf, 0x77, 0x65, 0x5c, 0x6d, 0x4c, 0x88, 0x1d, 0x52, 0x84, 0x12, 0x7f, 0x68, 0xf9, 0x91, 0x5c, 0xbd, 0x84, 0x79, 0x7d, 0x59, 0x95, 0x93, 0x2c, 0x40, 0x3b, 0x99, 0x69, 0xe3, 0x0e, 0xaa }; static const uint8_t nist_186_2_ecdsa_testvector_133_public_y[] = { /* Qy - byte alignment */ 0x01, 0x71, 0x77, 0x1c, 0x3e, 0xc1, 0x82, 0x76, 0x0c, 0x14, 0xc1, 0x10, 0xb2, 0x22, 0x4e, 0xe0, 0x29, 0x1c, 0xc2, 0x51, 0x8f, 0xa1, 0xfd, 0xcd, 0x43, 0x1e, 0x41, 0x66, 0x66, 0xe8, 0x5d, 0xac, 0x29, 0x92, 0x70, 0xe1, 0x0d, 0xe2, 0xd2, 0x02, 0x6a, 0x4f, 0xa7, 0x27, 0xa2, 0x4a, 0x3d, 0x61, 0x47, 0x5e, 0x64, 0x8c }; /* k = 0000b9ce98a3e275f6b96ebeb01e29766e32057d51ff5ed2b76f0465d63988e557fde97ed3bd79ec76bf1d3f4bc466696228b99 */ static const uint8_t nist_186_2_ecdsa_testvector_133_out[] = { /* R - byte alignment */ 0x00, 0x41, 0x47, 0x63, 0x15, 0x8b, 0xf4, 0xa2, 0x43, 0x07, 0xe0, 0x54, 0x92, 0x9d, 0x63, 0x74, 0xa0, 0x4c, 0x9a, 0x35, 0x0d, 0x54, 0x45, 0xd1, 0x20, 0xbc, 0xca, 0x19, 0xa8, 0x23, 0x04, 0x67, 0x87, 0x0f, 0xe6, 0xc7, 0xce, 0xc6, 0x9d, 0x3d, 0xeb, 0xc1, 0x5d, 0xe8, 0xb8, 0x1d, 0xd3, 0x13, 0x3b, 0xaf, 0xde, 0xbc, /* S - byte alignment */ 0x00, 0x22, 0xc4, 0xc3, 0xd8, 0xa4, 0x59, 0x33, 0xce, 0x59, 0xb7, 0x80, 0x2a, 0x35, 0xc6, 0xd2, 0xc7, 0x16, 0x01, 0x6a, 0x74, 0x66, 0x08, 0xe0, 0x23, 0x24, 0x4e, 0x42, 0xeb, 0x34, 0xde, 0x87, 0x68, 0xe9, 0xbe, 0x16, 0xeb, 0xc4, 0xe5, 0x6f, 0x9a, 0x50, 0xc1, 0xa6, 0x6a, 0x5e, 0x32, 0xd9, 0x0d, 0x4b, 0x66, 0x95 }; static const uint8_t nist_186_2_ecdsa_testvector_134_ptx[] = { /* Msg */ 0xbd, 0xda, 0xd3, 0xed, 0xbf, 0x5a, 0x09, 0x67, 0x37, 0x7e, 0x38, 0x49, 0x84, 0xfb, 0xd2, 0x8d, 0xca, 0x38, 0x2e, 0x79, 0x42, 0x56, 0x7f, 0xc7, 0xd5, 0x6e, 0x07, 0x02, 0xea, 0x19, 0x88, 0x33, 0x7c, 0x36, 0xfc, 0xbd, 0x6f, 0xe7, 0x85, 0x86, 0x24, 0xdd, 0xa7, 0x57, 0x4b, 0xd6, 0xb5, 0x86, 0xf8, 0x63, 0x89, 0xd2, 0xf9, 0xef, 0x78, 0x8e, 0x68, 0xfd, 0x86, 0x02, 0x7c, 0xb1, 0xd5, 0x0e, 0xa4, 0x92, 0x64, 0x10, 0xd7, 0x8e, 0xf6, 0x08, 0x25, 0x3f, 0x4f, 0xfa, 0x93, 0x6c, 0xa6, 0x94, 0x25, 0xd3, 0x58, 0x11, 0x3c, 0x25, 0xda, 0x5d, 0x22, 0x53, 0xf1, 0x7a, 0xe4, 0x08, 0x25, 0x22, 0x60, 0x76, 0x73, 0xae, 0x9e, 0x56, 0x42, 0x36, 0x64, 0x2a, 0x98, 0xfa, 0x04, 0xc6, 0x8e, 0x00, 0x79, 0x0e, 0x01, 0xff, 0xb2, 0x01, 0x8b, 0x7c, 0x2e, 0xf7, 0xb1, 0x33, 0xc9, 0x26, 0x5e, 0xb8 }; static const uint8_t nist_186_2_ecdsa_testvector_134_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x74, 0x29, 0xb9, 0xed, 0x32, 0x37, 0x19, 0x5e, 0x77, 0x45, 0x66, 0xb7, 0xb6, 0xe3, 0xbb, 0x51, 0xdf, 0xcc, 0xe9, 0x5f, 0xbd, 0x2d, 0x6f, 0x67, 0x74, 0xa3, 0xcd, 0xc2, 0x55, 0x86, 0xae, 0x0a, 0xae, 0x09, 0xbd, 0x7e, 0xf7, 0x32, 0xc9, 0x69, 0x16, 0x15, 0xa0, 0xb3, 0x11, 0x86, 0x31, 0x33, 0xfd, 0xaf }; static const uint8_t nist_186_2_ecdsa_testvector_134_public_x[] = { /* Qx - byte alignment */ 0x00, 0x67, 0xdc, 0xe3, 0x69, 0x17, 0x67, 0xdc, 0x30, 0xc2, 0xaf, 0x5c, 0x39, 0x6b, 0x9d, 0xc0, 0xc8, 0x40, 0x91, 0x41, 0xc5, 0x79, 0x3c, 0xea, 0x87, 0xab, 0x8c, 0x18, 0xfd, 0xc6, 0x43, 0xf3, 0x7f, 0xac, 0x2a, 0x8c, 0xc2, 0x11, 0xe8, 0x2f, 0x9e, 0x11, 0x4d, 0x0b, 0x05, 0xce, 0xd8, 0x27, 0x25, 0x09, 0xf1, 0xe4 }; static const uint8_t nist_186_2_ecdsa_testvector_134_public_y[] = { /* Qy - byte alignment */ 0x00, 0xda, 0x55, 0xee, 0xc9, 0x01, 0xca, 0x02, 0xad, 0x05, 0xa5, 0x59, 0x46, 0x53, 0xa3, 0x51, 0x1d, 0x7d, 0x45, 0xa5, 0x77, 0xb7, 0xf4, 0x9e, 0x3d, 0x53, 0x70, 0x41, 0xe7, 0x96, 0xed, 0xe1, 0xb0, 0x13, 0xd0, 0xeb, 0x9e, 0x5f, 0xd2, 0x49, 0x28, 0x0d, 0x59, 0xdd, 0xac, 0x85, 0xe8, 0xa0, 0xf1, 0xf7, 0x08, 0xb0 }; /* k = 0005c0c854e66eb2df3381f4de0f8b05e187735b4e2b329ff96dd0710edfc950eaaeb09b8b7242da5a1639300a981f6cb5e62ec */ static const uint8_t nist_186_2_ecdsa_testvector_134_out[] = { /* R - byte alignment */ 0x00, 0x0e, 0xbe, 0x27, 0x77, 0xcc, 0x4d, 0x7b, 0x02, 0x6a, 0xd5, 0x6d, 0x2d, 0xc0, 0x89, 0xb5, 0xd6, 0xf7, 0xb2, 0x29, 0xa2, 0xf4, 0x4f, 0x8b, 0xb5, 0x36, 0xa3, 0x21, 0x92, 0x02, 0xf8, 0xef, 0x9c, 0xe8, 0x00, 0x04, 0x06, 0xe0, 0x32, 0x86, 0x2b, 0x1c, 0xc5, 0x68, 0x5c, 0x5d, 0xf8, 0x6e, 0xba, 0x97, 0xd2, 0x30, /* S - byte alignment */ 0x00, 0x58, 0xdd, 0x30, 0x1a, 0xc3, 0x66, 0xc2, 0x44, 0xd0, 0x5c, 0x06, 0x49, 0x18, 0x09, 0x53, 0x29, 0x00, 0x2a, 0x18, 0xa0, 0x82, 0x51, 0xf1, 0xbd, 0x04, 0x9a, 0x2c, 0x42, 0x21, 0xd7, 0xbe, 0xe7, 0x5e, 0x26, 0x66, 0x92, 0x37, 0xf8, 0x53, 0xd1, 0xdc, 0xab, 0x6d, 0x1d, 0x5c, 0x59, 0x7b, 0x23, 0x71, 0x2d, 0xc0 }; static const uint8_t nist_186_2_ecdsa_testvector_135_ptx[] = { /* Msg */ 0x81, 0x73, 0xcc, 0x65, 0x1e, 0x14, 0xc1, 0x3d, 0xae, 0x61, 0x23, 0x7e, 0xfa, 0x8f, 0xa3, 0x22, 0xe7, 0x81, 0xe8, 0x42, 0xf7, 0x3c, 0x33, 0x2c, 0x12, 0x9b, 0x43, 0xb7, 0x87, 0x43, 0x76, 0xd3, 0x4e, 0xda, 0x32, 0x64, 0x90, 0x74, 0x83, 0x51, 0x68, 0x4e, 0x05, 0xd7, 0xec, 0xbf, 0x05, 0x24, 0x67, 0x6b, 0xe3, 0x21, 0xe9, 0xba, 0xba, 0x8f, 0x02, 0x89, 0x43, 0x55, 0xca, 0x1f, 0xf7, 0x18, 0x24, 0x62, 0x74, 0x0d, 0x44, 0x4a, 0x22, 0x0b, 0x6f, 0x97, 0x16, 0xe5, 0x02, 0xbf, 0x37, 0xf6, 0xb6, 0x2b, 0x9f, 0xfd, 0x22, 0xa2, 0x44, 0x2c, 0x82, 0x06, 0xd7, 0x7b, 0xb6, 0x3e, 0xec, 0x42, 0x8e, 0x73, 0x5c, 0x07, 0x44, 0x7f, 0xe7, 0x94, 0x4a, 0xa2, 0x1e, 0x4d, 0x46, 0x77, 0x81, 0xc1, 0x5c, 0x27, 0xe4, 0x7f, 0xab, 0xdd, 0x17, 0x2b, 0x1a, 0x7a, 0xc5, 0xd1, 0x54, 0x89, 0x9d, 0x78 }; static const uint8_t nist_186_2_ecdsa_testvector_135_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x2e, 0x1a, 0x6f, 0x65, 0x8a, 0x05, 0x8b, 0x79, 0xa8, 0xc0, 0x62, 0x8a, 0x93, 0xab, 0x3b, 0x35, 0xb6, 0x04, 0xce, 0xa4, 0xa9, 0x5b, 0x89, 0xe2, 0x3e, 0xf5, 0xa8, 0xf8, 0xd5, 0x7c, 0x1b, 0xda, 0xe7, 0x3f, 0x76, 0x60, 0x72, 0xca, 0x53, 0x16, 0xd0, 0x96, 0x70, 0x41, 0x7f, 0xae, 0x85, 0x46, 0xa5, 0x24 }; static const uint8_t nist_186_2_ecdsa_testvector_135_public_x[] = { /* Qx - byte alignment */ 0x01, 0x75, 0x7b, 0xa5, 0x97, 0x3d, 0xf2, 0x80, 0x09, 0x27, 0xf7, 0x3f, 0xa4, 0x13, 0x25, 0x47, 0xe6, 0x98, 0x99, 0xb7, 0xc3, 0xf7, 0x0b, 0x82, 0xf6, 0xe7, 0x23, 0x01, 0x6a, 0xf3, 0xa2, 0x26, 0xa5, 0x26, 0xc6, 0xc1, 0x15, 0x39, 0x5e, 0x67, 0x1a, 0x59, 0x8a, 0x1b, 0xc2, 0x31, 0x78, 0x00, 0x28, 0x81, 0xb6, 0xaa }; static const uint8_t nist_186_2_ecdsa_testvector_135_public_y[] = { /* Qy - byte alignment */ 0x01, 0x81, 0x25, 0xaf, 0x3b, 0x70, 0x2c, 0x4a, 0x2c, 0x36, 0xeb, 0x95, 0x5c, 0x70, 0x36, 0x04, 0x29, 0xdc, 0x0b, 0xd0, 0x82, 0xc4, 0x09, 0x7c, 0x56, 0xe1, 0xae, 0x13, 0xd8, 0x3c, 0xeb, 0x53, 0xe0, 0x08, 0x03, 0xda, 0x18, 0x60, 0xea, 0xac, 0xd8, 0x57, 0x6c, 0x09, 0x2a, 0xcb, 0x91, 0x47, 0xb5, 0xc0, 0x4f, 0xe5 }; /* k = 0007b7c4449d744e373a38aab13ff033d14ab96dd2e56ed9a650e4e03f9a29f1ad5f788c754f3e5e90662e6277f7548051ff84e */ static const uint8_t nist_186_2_ecdsa_testvector_135_out[] = { /* R - byte alignment */ 0x00, 0x75, 0x00, 0x24, 0x69, 0x8e, 0xfa, 0xc4, 0xe1, 0xce, 0x6b, 0x6b, 0xc3, 0x00, 0x4e, 0x4b, 0x73, 0xf8, 0x7b, 0x7e, 0x5e, 0x22, 0x6a, 0x0e, 0x8a, 0x10, 0x02, 0xba, 0x23, 0x09, 0xa4, 0xca, 0xca, 0xb0, 0x54, 0x58, 0xdc, 0xf2, 0x40, 0x7c, 0x30, 0xff, 0x34, 0xe5, 0xf8, 0x8f, 0xbc, 0xd7, 0xd5, 0xfa, 0xfa, 0x1b, /* S - byte alignment */ 0x00, 0x28, 0xae, 0xb1, 0xc4, 0x04, 0xa5, 0xc2, 0x9b, 0x3c, 0x4a, 0xa5, 0x61, 0x56, 0xab, 0x8f, 0x92, 0x0a, 0xfe, 0x25, 0xfe, 0xd6, 0x69, 0x68, 0x5d, 0xdb, 0xbc, 0x2c, 0xfc, 0x69, 0xab, 0x62, 0x5d, 0xd5, 0xed, 0xf2, 0x63, 0xab, 0xe5, 0x2b, 0x75, 0xad, 0x2c, 0x8a, 0x3d, 0x3e, 0x1d, 0xe3, 0xf0, 0x4f, 0xe3, 0xee }; /* [K-571] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_136_ptx[] = { /* Msg */ 0xc8, 0xca, 0x3f, 0xa3, 0xa0, 0xe0, 0x69, 0x22, 0x6c, 0xdd, 0x8f, 0x9a, 0x87, 0x43, 0x7c, 0xb9, 0xb6, 0x51, 0xc1, 0xde, 0xae, 0x79, 0x57, 0x2a, 0xd6, 0x14, 0x87, 0xda, 0x4f, 0x55, 0x07, 0xd4, 0x32, 0x7b, 0x66, 0x7f, 0x18, 0x4b, 0xa9, 0xd8, 0xe0, 0xbe, 0x37, 0xc3, 0xac, 0xf7, 0xf2, 0x9e, 0x2d, 0x77, 0xa7, 0x1c, 0x21, 0x94, 0xa8, 0x51, 0x19, 0x27, 0xb7, 0x09, 0x80, 0x86, 0x26, 0x5e, 0xd9, 0xb2, 0x3d, 0x8a, 0x48, 0xd1, 0xdc, 0xf9, 0x54, 0xde, 0x61, 0xa3, 0xeb, 0x9f, 0xcc, 0x98, 0xa6, 0xd7, 0x22, 0xdc, 0x4f, 0xbe, 0x0f, 0x76, 0xa1, 0xae, 0xce, 0xc4, 0x4e, 0x1f, 0x4e, 0x11, 0x47, 0xd5, 0x8d, 0x69, 0x37, 0x58, 0x48, 0xac, 0x50, 0xa5, 0xd7, 0xe2, 0x4b, 0x23, 0x53, 0xce, 0xaa, 0xd8, 0xf9, 0xc6, 0x41, 0xdd, 0xd3, 0xc2, 0xf4, 0x0f, 0x95, 0xb2, 0xc2, 0x08, 0xc5, 0x15 }; static const uint8_t nist_186_2_ecdsa_testvector_136_private[] = { /* d - byte alignment */ 0x01, 0xa6, 0xfc, 0xa9, 0xb7, 0x19, 0x13, 0xac, 0xe1, 0x5d, 0xe7, 0x92, 0xbe, 0x91, 0x29, 0xdd, 0x4a, 0x25, 0xdb, 0x43, 0xfb, 0xf2, 0xee, 0x5f, 0x01, 0x97, 0xe2, 0x48, 0xa5, 0xeb, 0x31, 0x2b, 0xaf, 0x72, 0xa7, 0x84, 0x59, 0xc4, 0xb3, 0x55, 0xcb, 0x6f, 0x1f, 0x24, 0x4f, 0x05, 0x1a, 0x17, 0x26, 0xe2, 0xce, 0xe4, 0xcb, 0xcb, 0x16, 0x7e, 0x09, 0x69, 0x4a, 0x04, 0x74, 0x5b, 0xaa, 0xec, 0x61, 0x0f, 0x3a, 0xcb, 0x08, 0x7d, 0xaf, 0xa9 }; static const uint8_t nist_186_2_ecdsa_testvector_136_public_x[] = { /* Qx - byte alignment */ 0x03, 0xb8, 0x1a, 0xc9, 0x91, 0xf6, 0x19, 0xb2, 0x14, 0xc6, 0xce, 0x1e, 0x4f, 0xb4, 0x80, 0x9d, 0x18, 0xdb, 0xc1, 0x2f, 0x8b, 0x30, 0xf8, 0x6e, 0x34, 0x92, 0xc4, 0x54, 0xbc, 0x5c, 0x22, 0x06, 0x77, 0x92, 0x68, 0x2c, 0xcd, 0xd8, 0xd5, 0x3f, 0x8f, 0xd8, 0x61, 0x32, 0x53, 0x5d, 0x73, 0x1e, 0x64, 0xcc, 0x2a, 0x85, 0x51, 0x3a, 0x86, 0x12, 0xf7, 0x52, 0x11, 0xa6, 0x0a, 0x1c, 0x47, 0x5b, 0xa1, 0x24, 0x5e, 0xd9, 0x43, 0xe4, 0xfe, 0xc5 }; static const uint8_t nist_186_2_ecdsa_testvector_136_public_y[] = { /* Qy - byte alignment */ 0x06, 0x88, 0xb0, 0xb2, 0x58, 0xc4, 0x1f, 0xf1, 0x74, 0xad, 0xb6, 0x5c, 0x8c, 0xfd, 0x63, 0x0c, 0x88, 0xc5, 0x77, 0x17, 0x30, 0x37, 0x05, 0xd3, 0x4f, 0xd0, 0x71, 0x01, 0x40, 0xb2, 0x5c, 0x4a, 0xd2, 0x04, 0x0e, 0x40, 0x66, 0xa5, 0xbd, 0x21, 0x64, 0xf2, 0xfb, 0x98, 0xb0, 0x96, 0x2d, 0x6a, 0x88, 0x71, 0x90, 0x2d, 0x8d, 0x6e, 0xef, 0x02, 0x46, 0x0d, 0xa5, 0x7d, 0xcd, 0x92, 0xb3, 0x0e, 0x24, 0xe8, 0xd7, 0x59, 0xb1, 0x1a, 0xd6, 0x39 }; /* k = 17cd7b62dde55ca12e74b81a852b4f8f400fca8df8a3c03027a247dba330b08ea751d3fa704c1a6521d8494a8fc8c670fdc35208d61722bb1d4d7efe7a42c32b0afb713369fbfa0 */ static const uint8_t nist_186_2_ecdsa_testvector_136_out[] = { /* R - byte alignment */ 0x00, 0x31, 0x2a, 0xa5, 0x93, 0xaf, 0xe9, 0x87, 0x55, 0x4e, 0xff, 0x95, 0x66, 0x47, 0xf6, 0xc8, 0xc4, 0xa2, 0x33, 0xa9, 0xc7, 0x72, 0xd3, 0x82, 0x4b, 0x2b, 0xfb, 0x12, 0xfe, 0x9f, 0x5e, 0xfd, 0x47, 0x63, 0xc2, 0x84, 0x75, 0xcd, 0x76, 0x4f, 0x67, 0xe0, 0x94, 0x7d, 0x43, 0x94, 0x5d, 0x78, 0x38, 0x4f, 0xfb, 0xf7, 0xd9, 0xf9, 0xc4, 0x7b, 0x96, 0x77, 0xb5, 0x9d, 0xc2, 0xdf, 0xd6, 0x58, 0x77, 0xab, 0xff, 0x95, 0xe1, 0x16, 0xf1, 0x90, /* S - byte alignment */ 0x00, 0x66, 0xba, 0x80, 0xd6, 0x13, 0xe9, 0x80, 0x7e, 0xc1, 0x7b, 0x46, 0xe9, 0x62, 0x53, 0x57, 0xeb, 0x5a, 0x32, 0xb3, 0xaf, 0x21, 0x96, 0x2d, 0x4e, 0xd1, 0x2a, 0x52, 0x3a, 0xf8, 0xc8, 0x4b, 0x6c, 0x5e, 0x35, 0x7b, 0xee, 0x20, 0x6c, 0xe7, 0x34, 0xf5, 0xe1, 0x96, 0x6a, 0xe5, 0xc0, 0x47, 0xe9, 0x8d, 0x56, 0xd4, 0x35, 0xc0, 0xe6, 0xa3, 0xe9, 0xb7, 0x61, 0xce, 0xf9, 0xdc, 0x57, 0x7e, 0x14, 0x5e, 0x72, 0x47, 0xe2, 0x39, 0x09, 0x1d }; static const uint8_t nist_186_2_ecdsa_testvector_137_ptx[] = { /* Msg */ 0x6d, 0x0b, 0x8b, 0xb0, 0x43, 0xb2, 0x5c, 0x2a, 0x4e, 0x69, 0xf8, 0x59, 0xfb, 0xf4, 0xdf, 0x4c, 0x6e, 0xf9, 0xf0, 0xf3, 0x25, 0x12, 0x30, 0xd6, 0xd8, 0x21, 0xc7, 0x06, 0xa4, 0xe4, 0x4b, 0x54, 0x69, 0xc9, 0x41, 0xc2, 0x71, 0x03, 0xe1, 0x37, 0x52, 0xdd, 0x1a, 0x77, 0x15, 0x4e, 0xd6, 0x51, 0x97, 0xce, 0x7f, 0x1b, 0x30, 0x69, 0xc2, 0x5b, 0x93, 0x12, 0x93, 0xc7, 0xf5, 0x39, 0x71, 0x70, 0x72, 0xa0, 0xeb, 0x3a, 0xac, 0x6a, 0x63, 0x8f, 0xb5, 0x75, 0x12, 0x54, 0x2f, 0xe9, 0x4c, 0x1c, 0xb1, 0x11, 0x05, 0x9c, 0x6d, 0x6a, 0x95, 0x60, 0x10, 0xfa, 0xb8, 0xbc, 0xea, 0xe3, 0xd9, 0x04, 0x4f, 0x38, 0x90, 0xff, 0x3d, 0x0f, 0x69, 0x9a, 0x3e, 0xd8, 0xe7, 0xda, 0x90, 0xed, 0xc8, 0x14, 0x84, 0x6a, 0x8b, 0x60, 0x24, 0x3e, 0x30, 0x4b, 0x18, 0x82, 0x3f, 0xcc, 0xcb, 0x0a, 0x0b, 0x7a }; static const uint8_t nist_186_2_ecdsa_testvector_137_private[] = { /* d - byte alignment */ 0x00, 0x31, 0xdc, 0xf1, 0xb8, 0xaf, 0x2a, 0xb6, 0x2b, 0x76, 0xe1, 0x6a, 0x99, 0x52, 0x06, 0xd2, 0x4c, 0x14, 0xae, 0x95, 0xa1, 0x36, 0x59, 0x69, 0x97, 0xb8, 0x97, 0x23, 0xcd, 0xc1, 0xbd, 0xf0, 0xbe, 0x2d, 0x1d, 0x62, 0xff, 0x6f, 0x2b, 0xeb, 0x88, 0xa5, 0x59, 0x2f, 0xcd, 0x4d, 0x88, 0xca, 0x67, 0x6a, 0x8c, 0xa2, 0xb5, 0x2c, 0xb5, 0x25, 0xa2, 0x8e, 0x91, 0xec, 0xf6, 0x49, 0x22, 0xac, 0xde, 0xf3, 0x88, 0x49, 0x49, 0x2d, 0x62, 0x3f }; static const uint8_t nist_186_2_ecdsa_testvector_137_public_x[] = { /* Qx - byte alignment */ 0x06, 0xcd, 0xa2, 0xb2, 0xb3, 0x0b, 0xac, 0xf5, 0xd1, 0x7f, 0x34, 0x25, 0xba, 0x7e, 0x56, 0x24, 0x15, 0x19, 0xe4, 0xe7, 0x61, 0x5c, 0x22, 0xed, 0xad, 0xc4, 0xfd, 0x0c, 0x3e, 0x73, 0x1b, 0x33, 0x5e, 0xa7, 0x4d, 0x2f, 0xc0, 0xb5, 0x11, 0x01, 0xdc, 0xd2, 0x39, 0xbc, 0xab, 0xd8, 0xab, 0xf6, 0xa1, 0x6d, 0x2b, 0x96, 0xa8, 0x5c, 0x0e, 0x39, 0xbd, 0x9a, 0x67, 0x59, 0x1b, 0xc1, 0x4c, 0x05, 0xd3, 0x17, 0x6d, 0xbc, 0xe6, 0x65, 0xa8, 0xcb }; static const uint8_t nist_186_2_ecdsa_testvector_137_public_y[] = { /* Qy - byte alignment */ 0x05, 0xb1, 0xe2, 0x71, 0xff, 0x46, 0x4f, 0x0e, 0x2b, 0x30, 0xee, 0xe4, 0x14, 0x47, 0xed, 0xb0, 0x65, 0xff, 0xf9, 0x37, 0x5a, 0x0c, 0x49, 0x69, 0x01, 0xc3, 0x8e, 0xf2, 0x54, 0xaa, 0x1a, 0x7d, 0x90, 0x24, 0x74, 0x1f, 0x99, 0x84, 0x1a, 0xf2, 0xaa, 0xb8, 0xe3, 0x08, 0x66, 0x23, 0x46, 0x4f, 0x23, 0x15, 0x09, 0x4c, 0x02, 0x56, 0x4f, 0x8b, 0xfe, 0x8c, 0xec, 0x30, 0xe4, 0xd6, 0xa8, 0x19, 0x51, 0xfd, 0x3b, 0x4b, 0x45, 0x81, 0x39, 0x12 }; /* k = 0f660a7340497ba7a7fe947d51573bc9e0cadb7890cb8f8969651467d4172efa0d201d9f19fc047177a04261794cd85e17829eb569e414b7829f07f8546b38c454a9ab124daf638 */ static const uint8_t nist_186_2_ecdsa_testvector_137_out[] = { /* R - byte alignment */ 0x01, 0xf4, 0x8f, 0xb9, 0xc3, 0x18, 0x15, 0x34, 0x19, 0x85, 0x9f, 0xc2, 0xe3, 0x3d, 0x42, 0x6f, 0x3d, 0x04, 0x83, 0xb6, 0x0e, 0x6f, 0x2d, 0x27, 0xb7, 0xa8, 0xef, 0xb5, 0xce, 0x70, 0xde, 0x48, 0x61, 0xe4, 0xf9, 0xbc, 0x01, 0xcc, 0xfb, 0x95, 0x7a, 0x17, 0x94, 0x13, 0x9e, 0x06, 0x91, 0x25, 0xcf, 0x25, 0xa4, 0xd4, 0x5e, 0x2b, 0xfa, 0xd1, 0x5f, 0x79, 0x77, 0x4a, 0xb9, 0x73, 0x33, 0x57, 0x79, 0xb0, 0x95, 0xea, 0xef, 0x7f, 0x06, 0xac, /* S - byte alignment */ 0x01, 0x83, 0x81, 0x4e, 0x2e, 0x7d, 0xdd, 0x53, 0xaa, 0x0d, 0xd3, 0xec, 0x36, 0x89, 0x0b, 0xe7, 0x0c, 0x30, 0xd6, 0x24, 0x19, 0x21, 0x7b, 0x60, 0x74, 0x61, 0xa6, 0xfe, 0xf8, 0x28, 0x84, 0xfe, 0x91, 0xaf, 0x44, 0xee, 0xc6, 0xad, 0xd4, 0xc0, 0x58, 0x6d, 0x27, 0x2d, 0x9c, 0x57, 0x39, 0x8c, 0x3f, 0x94, 0x42, 0xa3, 0x22, 0x21, 0xed, 0x0f, 0x71, 0xd4, 0xe5, 0x84, 0x46, 0x03, 0x94, 0xcf, 0x34, 0xe0, 0x18, 0x2f, 0x0b, 0x92, 0x24, 0xbd }; static const uint8_t nist_186_2_ecdsa_testvector_138_ptx[] = { /* Msg */ 0x6d, 0x6b, 0x2c, 0xeb, 0x19, 0xfa, 0x08, 0xfa, 0x47, 0xa8, 0x9c, 0xae, 0x1b, 0x97, 0xc8, 0x76, 0x1c, 0xc6, 0xea, 0x49, 0x38, 0xf8, 0x02, 0x37, 0x09, 0xf1, 0x14, 0x45, 0x56, 0xe8, 0xce, 0x77, 0xdd, 0x3a, 0x6b, 0x2e, 0x4f, 0x5c, 0xd7, 0xb4, 0x9d, 0x13, 0x14, 0x16, 0x72, 0xe7, 0xdc, 0x32, 0x00, 0xd5, 0x88, 0x10, 0x00, 0x44, 0x30, 0x76, 0xf4, 0x3a, 0x14, 0xb6, 0xb0, 0xd0, 0x3a, 0xcb, 0x18, 0xe3, 0x59, 0xa4, 0x2b, 0x0d, 0xf6, 0xc0, 0x41, 0xd3, 0xcd, 0xfb, 0x90, 0x20, 0x72, 0xa8, 0xf5, 0xf3, 0x38, 0xdf, 0xf2, 0x54, 0x52, 0x18, 0xf3, 0x8c, 0x38, 0xf9, 0xd5, 0x95, 0x4d, 0x6d, 0xa8, 0xd0, 0xbe, 0xf6, 0xb4, 0xf6, 0xad, 0x44, 0xbb, 0x51, 0x8f, 0x06, 0x7e, 0x2c, 0xd2, 0x00, 0x82, 0x88, 0xc3, 0x5e, 0x14, 0x10, 0xb0, 0x48, 0x8b, 0x4f, 0x49, 0xb6, 0xcd, 0x21, 0x4c, 0x86 }; static const uint8_t nist_186_2_ecdsa_testvector_138_private[] = { /* d - byte alignment */ 0x01, 0x45, 0x45, 0x6a, 0x77, 0x55, 0x32, 0x1b, 0x3c, 0xbc, 0x7b, 0xf9, 0x9e, 0x06, 0x12, 0xa8, 0xfc, 0x0a, 0x2b, 0x2d, 0x12, 0xee, 0x48, 0xb1, 0xe6, 0xb5, 0x34, 0x79, 0xb1, 0x4b, 0x0a, 0xf5, 0x61, 0xe9, 0xa9, 0xce, 0x95, 0x38, 0x6b, 0xd1, 0x33, 0x2c, 0x25, 0xaf, 0x0f, 0x35, 0x19, 0x2b, 0x13, 0x9a, 0x46, 0x7c, 0x3e, 0xbc, 0x6d, 0xf2, 0x23, 0x44, 0xc9, 0xc4, 0xdd, 0xaf, 0xe5, 0x4d, 0x9a, 0x87, 0x5e, 0xc1, 0xad, 0x34, 0xb1, 0xa4 }; static const uint8_t nist_186_2_ecdsa_testvector_138_public_x[] = { /* Qx - byte alignment */ 0x07, 0x4a, 0x4e, 0x54, 0x6d, 0x69, 0x27, 0xb6, 0xab, 0xc9, 0xd2, 0x82, 0x6e, 0x23, 0xbb, 0x4c, 0x2d, 0x2a, 0x3a, 0x67, 0x96, 0xe8, 0x61, 0xae, 0x8f, 0x4e, 0xab, 0x8a, 0x4f, 0x90, 0x16, 0xbd, 0xa3, 0x69, 0x71, 0xe1, 0x04, 0xba, 0x38, 0xcf, 0x1a, 0xba, 0x3a, 0x4f, 0x42, 0xe4, 0x76, 0x9d, 0xad, 0x09, 0xbd, 0xa9, 0x5a, 0x75, 0x00, 0x1a, 0xe6, 0x15, 0xc5, 0x0d, 0x52, 0x79, 0x3b, 0xec, 0x9f, 0xdf, 0x77, 0x63, 0x21, 0xac, 0xd5, 0x8c }; static const uint8_t nist_186_2_ecdsa_testvector_138_public_y[] = { /* Qy - byte alignment */ 0x00, 0xd6, 0xf8, 0x52, 0x91, 0xc9, 0xa1, 0x41, 0x08, 0xbd, 0xbd, 0x1e, 0x57, 0xf5, 0x45, 0xac, 0xd3, 0x96, 0x02, 0x88, 0x71, 0x1d, 0x06, 0x14, 0xd7, 0x4d, 0x6c, 0xdf, 0x85, 0x06, 0x67, 0x0b, 0xcb, 0x20, 0xa6, 0x80, 0xbf, 0x6b, 0xc5, 0x34, 0xab, 0x2f, 0x82, 0xfa, 0x9d, 0x8a, 0x5a, 0xe2, 0xd6, 0x01, 0xc8, 0xb3, 0xf4, 0x7c, 0xdd, 0x5a, 0xbf, 0x01, 0x23, 0xaf, 0x80, 0xf7, 0xce, 0x4d, 0xcb, 0x98, 0xb0, 0xd8, 0x10, 0xd8, 0x52, 0x19 }; /* k = 1bb40f8257538fc900ce705b7ba3beab9b736871de75092547320051960fac4c531fcc7d67d849aa07ea35eb7773cd344329aa8a50c949cb2ef9e12a5cd46b4d10e02f8d4f31bb9 */ static const uint8_t nist_186_2_ecdsa_testvector_138_out[] = { /* R - byte alignment */ 0x00, 0x63, 0xca, 0x4a, 0xbb, 0x7e, 0x43, 0x9f, 0x90, 0xd1, 0x4d, 0x76, 0x76, 0x86, 0x91, 0x01, 0xb5, 0xcc, 0x88, 0xc0, 0xa5, 0xdd, 0x1c, 0xb9, 0x6c, 0x36, 0xef, 0x1a, 0xee, 0x9b, 0xce, 0x43, 0x13, 0x68, 0x92, 0x62, 0x20, 0xda, 0x46, 0x19, 0x5f, 0xf4, 0x64, 0x29, 0x45, 0x43, 0xfe, 0xd4, 0xce, 0x21, 0xb9, 0xfa, 0x5a, 0x50, 0x6f, 0x6e, 0x13, 0x18, 0x3c, 0x4a, 0x50, 0x52, 0xca, 0xf1, 0x0d, 0x8b, 0xd4, 0x81, 0xe5, 0x1c, 0x87, 0x1d, /* S - byte alignment */ 0x01, 0xda, 0x94, 0x69, 0x30, 0xd6, 0xcf, 0x5b, 0x27, 0xe3, 0x64, 0xc1, 0x9b, 0x7a, 0x16, 0xd4, 0x70, 0x59, 0xde, 0x3a, 0x43, 0x91, 0xb9, 0x9c, 0x80, 0xd8, 0x2b, 0x35, 0x4d, 0x77, 0xde, 0x00, 0xe2, 0x70, 0xe6, 0xda, 0x67, 0x87, 0x96, 0x84, 0xfa, 0x5f, 0x51, 0x85, 0xe6, 0x39, 0x11, 0xde, 0x52, 0x1c, 0x80, 0xbf, 0xc3, 0xf4, 0x2a, 0xfd, 0x37, 0x2a, 0xd7, 0x22, 0x2f, 0xfd, 0xa1, 0xbd, 0xc2, 0x90, 0x35, 0x4f, 0x55, 0x84, 0xa2, 0x93 }; static const uint8_t nist_186_2_ecdsa_testvector_139_ptx[] = { /* Msg */ 0x89, 0x38, 0x19, 0x18, 0xe8, 0x03, 0x41, 0x47, 0xa8, 0x1a, 0x32, 0x14, 0xa3, 0x43, 0xa8, 0x17, 0x9f, 0x7a, 0xc3, 0xc9, 0xc5, 0x94, 0x13, 0x45, 0x55, 0x22, 0xf1, 0x4b, 0x97, 0x98, 0x16, 0x8a, 0x15, 0xaf, 0x66, 0x1f, 0x07, 0x07, 0x0d, 0x59, 0x0f, 0x11, 0xcd, 0xbf, 0x26, 0x2c, 0x96, 0x54, 0xd6, 0x0e, 0x58, 0x19, 0xab, 0x66, 0x15, 0xd4, 0xe4, 0xbf, 0x3a, 0x10, 0x6d, 0xa8, 0x2f, 0x65, 0x12, 0x12, 0x2d, 0xf9, 0xed, 0xf9, 0x50, 0x47, 0x20, 0x47, 0xed, 0x1f, 0xca, 0xf5, 0x25, 0xee, 0x33, 0x73, 0xba, 0x40, 0x4a, 0x4a, 0x22, 0x83, 0x52, 0x00, 0xda, 0x0e, 0xd8, 0x3b, 0xfd, 0x62, 0xe8, 0x2a, 0x15, 0xaf, 0x80, 0x21, 0x31, 0x9a, 0x45, 0x83, 0x38, 0x3d, 0x75, 0xe5, 0x7c, 0x6f, 0x1d, 0x70, 0x92, 0x46, 0x8c, 0x87, 0x62, 0xdb, 0x07, 0xaa, 0x7a, 0x4d, 0xbe, 0x9b, 0xa8, 0x09 }; static const uint8_t nist_186_2_ecdsa_testvector_139_private[] = { /* d - byte alignment */ 0x01, 0xf8, 0x79, 0x9a, 0xda, 0x52, 0x27, 0x82, 0xb4, 0x25, 0x39, 0x72, 0x1c, 0x9a, 0x41, 0x87, 0x03, 0xd1, 0x75, 0xf4, 0xfa, 0x72, 0xe9, 0x8f, 0x73, 0x87, 0x74, 0xd6, 0x8e, 0x02, 0x6f, 0xf6, 0x0d, 0x57, 0xa0, 0x39, 0x70, 0xb2, 0xf6, 0x07, 0xc9, 0xce, 0x6d, 0x32, 0x6d, 0x6f, 0xad, 0x7e, 0x1c, 0x86, 0x5f, 0x15, 0x1e, 0x89, 0xf7, 0xa3, 0x33, 0x3e, 0xa6, 0xfc, 0xfc, 0x9c, 0x51, 0xd1, 0xeb, 0xe6, 0xf6, 0xaa, 0xfd, 0x9f, 0xf9, 0xfc }; static const uint8_t nist_186_2_ecdsa_testvector_139_public_x[] = { /* Qx - byte alignment */ 0x05, 0x40, 0x1a, 0x65, 0x61, 0x79, 0xf5, 0x45, 0x2b, 0x1a, 0x1f, 0xdd, 0x17, 0xe7, 0x35, 0xc6, 0xc4, 0x09, 0xa6, 0xd9, 0xbb, 0xa2, 0x99, 0xce, 0xe1, 0x66, 0xc4, 0xf4, 0xa7, 0x7f, 0xfc, 0xbb, 0x1c, 0x83, 0x3c, 0x18, 0x54, 0xb7, 0xc0, 0x99, 0x07, 0x3e, 0x2d, 0x16, 0xce, 0x24, 0xac, 0xfd, 0x02, 0x68, 0xaf, 0x65, 0xc3, 0x56, 0x6e, 0xf3, 0xdd, 0xe7, 0x96, 0x61, 0xee, 0xd1, 0x8b, 0x58, 0x64, 0xaa, 0x94, 0xd0, 0x27, 0x7c, 0x1f, 0x12 }; static const uint8_t nist_186_2_ecdsa_testvector_139_public_y[] = { /* Qy - byte alignment */ 0x05, 0x6a, 0xf9, 0x9d, 0x03, 0xe7, 0x22, 0x2d, 0x03, 0x3c, 0x30, 0x91, 0x42, 0x30, 0x01, 0x88, 0xdd, 0xf4, 0xfa, 0x52, 0xfb, 0xdc, 0x46, 0xe7, 0xbe, 0xe8, 0xe3, 0x74, 0x49, 0x00, 0x86, 0xa8, 0xeb, 0x4f, 0xc9, 0x1f, 0xdb, 0xab, 0x67, 0xe5, 0xaa, 0x55, 0xd9, 0xfd, 0x80, 0x91, 0xe1, 0x40, 0x12, 0x93, 0xeb, 0x96, 0x3b, 0x2c, 0x14, 0x5b, 0x52, 0xc7, 0xfa, 0xa3, 0x8d, 0x80, 0x12, 0xe8, 0x85, 0xbe, 0xaf, 0x15, 0x5e, 0xca, 0x7a, 0x4b }; /* k = 1bd9d3ecf3ac1c7b8c1631d9647222372d6830e81b880f1dc86a23a24849d7eb3602d970b7cffb138023702ca02164cc62f526daec5158619ea8b79f2384b60ab4ddf034d2c5f28 */ static const uint8_t nist_186_2_ecdsa_testvector_139_out[] = { /* R - byte alignment */ 0x01, 0x4c, 0x44, 0xb4, 0x90, 0xdb, 0x92, 0x39, 0x26, 0xbd, 0x9b, 0x39, 0x6f, 0x7e, 0xfb, 0xab, 0xd1, 0x11, 0xa6, 0x2a, 0x98, 0x13, 0xeb, 0x4b, 0x86, 0x95, 0xb0, 0x87, 0x95, 0x80, 0x22, 0x26, 0x3b, 0x10, 0xdd, 0xd9, 0x96, 0x4b, 0x0e, 0xc2, 0x20, 0x1c, 0x0f, 0xb5, 0x47, 0x77, 0x45, 0x86, 0x55, 0x3f, 0x9e, 0x09, 0xe2, 0x33, 0x97, 0x5e, 0x85, 0xcb, 0x74, 0x98, 0xa9, 0xeb, 0x69, 0x01, 0x76, 0x8f, 0xea, 0x70, 0xfa, 0x53, 0x0d, 0x42, /* S - byte alignment */ 0x01, 0x79, 0x72, 0xbf, 0x17, 0xf9, 0xa7, 0x52, 0x9b, 0xdb, 0x84, 0xe2, 0xbb, 0xd7, 0x6c, 0x95, 0x72, 0x17, 0x6f, 0x3c, 0x02, 0x17, 0xaf, 0x1f, 0x98, 0x19, 0xd2, 0x16, 0xd8, 0x71, 0xff, 0x91, 0xb4, 0xdc, 0xc0, 0x90, 0xc3, 0x93, 0xee, 0xc2, 0x76, 0x62, 0xf4, 0xb2, 0x72, 0xa5, 0xe0, 0x70, 0x60, 0xb6, 0xd6, 0xf4, 0xf4, 0xe5, 0x72, 0x96, 0x2b, 0xc4, 0xec, 0x3f, 0x70, 0xd5, 0x2b, 0x73, 0x1c, 0xb6, 0x54, 0xeb, 0x3b, 0x3f, 0xa7, 0x08 }; static const uint8_t nist_186_2_ecdsa_testvector_140_ptx[] = { /* Msg */ 0x43, 0x78, 0x26, 0x28, 0x31, 0x57, 0xd8, 0x6b, 0x9f, 0xab, 0x3c, 0x58, 0xcb, 0x8f, 0x9a, 0x6a, 0x53, 0xf8, 0x99, 0xf7, 0x49, 0x83, 0xfa, 0x11, 0x85, 0x71, 0x86, 0xab, 0x3f, 0xef, 0x45, 0xfc, 0xdd, 0x9b, 0xf1, 0x29, 0x09, 0x45, 0xaa, 0x1e, 0x07, 0xf2, 0xeb, 0xbc, 0x45, 0x27, 0xbd, 0x3a, 0x34, 0x64, 0x2b, 0xc5, 0x57, 0xee, 0xf5, 0x6a, 0x9a, 0xd1, 0x89, 0x36, 0xe4, 0x26, 0x2e, 0x9c, 0xef, 0x92, 0x83, 0x16, 0x58, 0x0f, 0x28, 0x0f, 0xf2, 0xef, 0xbb, 0x01, 0x60, 0x1e, 0x06, 0xdb, 0xe3, 0xa7, 0x76, 0xa5, 0x70, 0x79, 0xcf, 0x66, 0x06, 0x6c, 0x1f, 0x46, 0x3e, 0x7f, 0xf1, 0xf0, 0x24, 0x63, 0xc2, 0x3a, 0x45, 0x3e, 0xb9, 0x08, 0x09, 0xa9, 0x92, 0x6d, 0x43, 0xfa, 0xdc, 0x14, 0x07, 0xc9, 0x64, 0xdf, 0xbc, 0xad, 0xf1, 0xcd, 0x71, 0x47, 0x31, 0x21, 0x75, 0x82, 0xf4, 0xc1 }; static const uint8_t nist_186_2_ecdsa_testvector_140_private[] = { /* d - byte alignment */ 0x01, 0x7f, 0x4f, 0xd6, 0x76, 0x9e, 0x2b, 0x06, 0xe2, 0x8a, 0xd0, 0x7b, 0x58, 0x6c, 0x88, 0x8a, 0x3f, 0xb6, 0x2d, 0x90, 0x4a, 0x79, 0x5d, 0x82, 0x97, 0x5d, 0xaf, 0x90, 0x02, 0xad, 0xda, 0x1a, 0x48, 0x12, 0xad, 0xbc, 0xa3, 0x27, 0x21, 0x52, 0x26, 0x88, 0x5d, 0x70, 0x24, 0x1d, 0xd4, 0xf5, 0xfd, 0xf6, 0xdb, 0xf5, 0xdd, 0xbc, 0x97, 0xfb, 0x43, 0x81, 0x53, 0x11, 0xd3, 0x9c, 0x82, 0xa0, 0xc3, 0xc7, 0xaf, 0xad, 0x7d, 0xf7, 0x5a, 0x83 }; static const uint8_t nist_186_2_ecdsa_testvector_140_public_x[] = { /* Qx - byte alignment */ 0x04, 0x52, 0xd9, 0x55, 0x8a, 0x4e, 0x7c, 0x0a, 0x74, 0xfc, 0xe5, 0x1a, 0x62, 0x27, 0x00, 0x13, 0x61, 0x67, 0xe7, 0x0f, 0x07, 0xf2, 0xcb, 0x4c, 0x11, 0x3d, 0xd2, 0xdd, 0x42, 0x60, 0xf0, 0xc6, 0x63, 0x36, 0xb4, 0x0d, 0xb3, 0xc5, 0xf9, 0x00, 0xae, 0x15, 0xf9, 0x0f, 0x58, 0x0d, 0x0a, 0x2f, 0x4e, 0xe8, 0x87, 0xc1, 0x6c, 0x12, 0xc2, 0xa7, 0x00, 0x61, 0x80, 0x1a, 0x96, 0xdd, 0x6f, 0xcb, 0x89, 0xb5, 0xca, 0x13, 0x08, 0xc0, 0xba, 0x91 }; static const uint8_t nist_186_2_ecdsa_testvector_140_public_y[] = { /* Qy - byte alignment */ 0x06, 0x08, 0xfa, 0x08, 0xed, 0xe3, 0x83, 0x3a, 0x0a, 0xce, 0xba, 0xb0, 0x03, 0xb9, 0xc2, 0x2c, 0x43, 0x7e, 0x7a, 0x2b, 0x2a, 0x25, 0x20, 0xb1, 0x50, 0x33, 0xbf, 0x4f, 0x9e, 0x94, 0x3f, 0x2f, 0x77, 0x6b, 0x3e, 0xdc, 0x55, 0xa6, 0xcc, 0x41, 0x2c, 0xf6, 0x08, 0x9f, 0x0c, 0x48, 0x65, 0x64, 0xc3, 0x71, 0x8c, 0x4a, 0x15, 0x41, 0x48, 0x6b, 0x79, 0x24, 0xe8, 0x60, 0x5d, 0x72, 0xc5, 0x91, 0x80, 0x7c, 0x1c, 0x83, 0xbd, 0x09, 0xf9, 0x34 }; /* k = 07d322958bb1c35a57a5c12b9791419a127a7731d550acb027bebe102140e1ecb72cb7f986e930320733dbbe7d8680f221c3fea64416db7484da8270ff7b1e32be7d30e27169954 */ static const uint8_t nist_186_2_ecdsa_testvector_140_out[] = { /* R - byte alignment */ 0x01, 0xd8, 0x56, 0x2a, 0xb3, 0x89, 0x78, 0xd1, 0xdd, 0x6a, 0x64, 0xd8, 0x23, 0xf9, 0x4c, 0x1a, 0xd5, 0xbe, 0x5d, 0xd4, 0x1e, 0x78, 0x5d, 0xd9, 0x1f, 0x2e, 0xb5, 0xc5, 0x20, 0x42, 0x0e, 0x4e, 0xdc, 0x4d, 0xec, 0xfc, 0x2e, 0xb6, 0x9e, 0x4a, 0x43, 0xe3, 0x22, 0x41, 0xb9, 0xbb, 0x5a, 0x41, 0x77, 0x22, 0xac, 0xeb, 0xad, 0x1c, 0x5f, 0x43, 0x98, 0x30, 0x0f, 0xde, 0xc3, 0x47, 0x35, 0xeb, 0x22, 0x97, 0x43, 0xd4, 0x14, 0x75, 0xfd, 0xcc, /* S - byte alignment */ 0x00, 0xd7, 0xa8, 0xfe, 0x30, 0x04, 0x07, 0x2c, 0x40, 0xbe, 0xd0, 0x3c, 0xc2, 0xbf, 0x7f, 0x32, 0x9d, 0xef, 0x7e, 0xb2, 0x90, 0x44, 0x37, 0x2b, 0xd8, 0x3c, 0x6b, 0xeb, 0xa0, 0xbb, 0x6c, 0xab, 0x90, 0xec, 0xb8, 0x6c, 0x94, 0x32, 0xa0, 0xbc, 0xb8, 0x25, 0xce, 0xce, 0x47, 0x19, 0x00, 0xc0, 0xe6, 0x0a, 0xad, 0x50, 0x4d, 0xac, 0xc7, 0xd4, 0x6f, 0x63, 0x27, 0x68, 0x2d, 0xc4, 0xc8, 0x51, 0x24, 0x83, 0xcf, 0x47, 0x6f, 0xc8, 0x3d, 0xb5 }; static const uint8_t nist_186_2_ecdsa_testvector_141_ptx[] = { /* Msg */ 0xbe, 0xd6, 0xe6, 0x9f, 0xe6, 0x2e, 0xae, 0x11, 0x73, 0x1e, 0x55, 0xf7, 0x70, 0x5a, 0x50, 0x43, 0x1a, 0xf7, 0xea, 0x62, 0x36, 0x74, 0x39, 0x63, 0xa8, 0xfa, 0x50, 0x5c, 0x42, 0xe3, 0xb6, 0x09, 0xda, 0x7a, 0x17, 0xb7, 0x9f, 0x01, 0x3a, 0x60, 0xad, 0xf9, 0x33, 0x18, 0xde, 0x9d, 0xda, 0xa7, 0xe3, 0xb0, 0x7b, 0x78, 0x94, 0x78, 0xcf, 0xb2, 0x85, 0x0b, 0x2b, 0xa4, 0xda, 0xc9, 0xf8, 0x66, 0x5c, 0x2a, 0x63, 0xbd, 0xcc, 0xba, 0x55, 0x40, 0x77, 0x61, 0xa6, 0xb9, 0x0a, 0xe8, 0x8e, 0xce, 0xa8, 0xb9, 0x5c, 0xe1, 0x3a, 0xe6, 0x6a, 0x34, 0x06, 0x6d, 0x50, 0x51, 0x84, 0xbb, 0x58, 0xa9, 0x6c, 0x6e, 0x32, 0x7b, 0x14, 0x5f, 0xe9, 0xf7, 0xf9, 0xe0, 0x16, 0xa4, 0x9b, 0x42, 0x54, 0xff, 0x8f, 0x9b, 0xf3, 0x65, 0xcf, 0xc5, 0xf1, 0x32, 0x54, 0xaa, 0x25, 0x2b, 0xe7, 0xbf, 0xbe, 0x19 }; static const uint8_t nist_186_2_ecdsa_testvector_141_private[] = { /* d - byte alignment */ 0x00, 0x6d, 0xdd, 0xac, 0x33, 0x80, 0xd7, 0x99, 0x85, 0x0f, 0xb7, 0xe2, 0xd2, 0xc8, 0x71, 0x35, 0x47, 0xf7, 0x6b, 0x30, 0x92, 0x4b, 0xa7, 0xa3, 0xc2, 0xa0, 0x51, 0x10, 0x52, 0xe0, 0x63, 0x51, 0xe0, 0xc2, 0x10, 0x51, 0x79, 0xd5, 0xb4, 0x30, 0xad, 0x3e, 0xa9, 0xbe, 0x3d, 0xa5, 0x1a, 0x8d, 0x4f, 0x3c, 0xa9, 0x13, 0xb4, 0xa8, 0x4b, 0xfe, 0x0a, 0x4a, 0x38, 0xfc, 0xfe, 0xe6, 0xd5, 0x11, 0x71, 0x44, 0x3b, 0x31, 0x52, 0x71, 0xc5, 0x85 }; static const uint8_t nist_186_2_ecdsa_testvector_141_public_x[] = { /* Qx - byte alignment */ 0x05, 0xb5, 0x73, 0x91, 0x18, 0xa1, 0x9a, 0xa7, 0x2e, 0xfa, 0x96, 0x97, 0x16, 0x82, 0x7f, 0xff, 0xf7, 0x4d, 0xa1, 0x7f, 0xae, 0x33, 0xdc, 0xa2, 0xe7, 0xfe, 0xbc, 0x36, 0x96, 0x6f, 0x27, 0xb5, 0x4e, 0xac, 0x18, 0xd0, 0x01, 0x8c, 0x98, 0xcf, 0xe5, 0xaa, 0x84, 0xd4, 0x54, 0x11, 0xae, 0x69, 0xc8, 0x15, 0xeb, 0x92, 0x99, 0xf0, 0x11, 0x5d, 0xc4, 0x44, 0x3f, 0xdc, 0x6d, 0x01, 0x8a, 0x38, 0x92, 0x0c, 0x63, 0x99, 0x43, 0x2c, 0xb5, 0x04 }; static const uint8_t nist_186_2_ecdsa_testvector_141_public_y[] = { /* Qy - byte alignment */ 0x07, 0x6a, 0xa0, 0x85, 0x67, 0x97, 0xe3, 0x7b, 0x6f, 0x16, 0xf7, 0x0e, 0xb5, 0xcd, 0xd8, 0xb8, 0xef, 0x20, 0x13, 0xae, 0xcf, 0xa4, 0x4c, 0x43, 0xd4, 0x7f, 0xca, 0x5e, 0x41, 0x72, 0xd0, 0xa0, 0x35, 0x47, 0xe4, 0xf5, 0xdf, 0x2a, 0xe3, 0x61, 0x12, 0xe4, 0x0b, 0x69, 0x98, 0x40, 0xc9, 0xff, 0x1a, 0xa5, 0x9e, 0x76, 0xe3, 0xfe, 0xc8, 0x72, 0x1a, 0x01, 0xb5, 0xe5, 0xa4, 0x04, 0xda, 0xaa, 0x39, 0x58, 0x12, 0x62, 0xa2, 0x60, 0xe4, 0xb8 }; /* k = 030222f1352ac2444d325de02d037d8dbe9a7c40e5db167f0d76d2f805c04a1c6a4535ca435fe38628b65aeb0043dbd14d35363bd138dc8543da3646b419672f9d193e4c9383fcb */ static const uint8_t nist_186_2_ecdsa_testvector_141_out[] = { /* R - byte alignment */ 0x01, 0x2b, 0xbd, 0xae, 0xbe, 0x06, 0xe3, 0xf5, 0x26, 0xcc, 0x72, 0x22, 0xa8, 0x0f, 0xea, 0xc9, 0x37, 0xa1, 0x2d, 0xa5, 0xf4, 0xd7, 0x78, 0x04, 0x39, 0x58, 0x57, 0x80, 0xee, 0x52, 0x6c, 0x83, 0x8b, 0x38, 0xd2, 0x6d, 0x12, 0x65, 0x6b, 0x61, 0xf2, 0xcb, 0x5b, 0x9c, 0xf0, 0xf9, 0x6e, 0xbc, 0x64, 0x21, 0x0f, 0x29, 0xac, 0xc4, 0x01, 0x24, 0xa8, 0x93, 0x74, 0xb4, 0x27, 0xb7, 0x18, 0xfb, 0x5d, 0x0f, 0x47, 0xdb, 0x02, 0xd6, 0x7d, 0x89, /* S - byte alignment */ 0x01, 0xb6, 0xd0, 0x8c, 0xc5, 0x3e, 0xbc, 0xa5, 0xd9, 0x09, 0x61, 0xa6, 0xd8, 0x7c, 0x61, 0x78, 0xc3, 0x62, 0xc4, 0xb1, 0xef, 0x2f, 0xee, 0xc3, 0x8d, 0x87, 0xac, 0x4d, 0x37, 0x92, 0x42, 0x3b, 0x83, 0x4b, 0x70, 0xce, 0xc9, 0x19, 0x47, 0xdb, 0x65, 0x05, 0xb0, 0x31, 0x9a, 0xba, 0xb7, 0xb5, 0xdb, 0x0d, 0x4d, 0x8b, 0x6e, 0xbe, 0x29, 0x0b, 0xe0, 0xb9, 0xf5, 0x6a, 0x19, 0x53, 0xd4, 0xb6, 0x1e, 0xce, 0x9e, 0xde, 0x96, 0x91, 0x45, 0xdf }; static const uint8_t nist_186_2_ecdsa_testvector_142_ptx[] = { /* Msg */ 0x9c, 0x1f, 0xdd, 0xc0, 0xf4, 0x33, 0x97, 0xf5, 0x68, 0xd7, 0xe2, 0xab, 0xca, 0x6e, 0x2c, 0xe1, 0x25, 0xa2, 0x04, 0x3f, 0x95, 0xed, 0x8a, 0xb5, 0x5c, 0x5e, 0x24, 0x60, 0x33, 0x9a, 0x73, 0xad, 0xde, 0x21, 0x86, 0xc0, 0x03, 0xd2, 0x4d, 0x17, 0x3c, 0xb2, 0x50, 0x6a, 0x6b, 0xe9, 0xa0, 0xd6, 0x4e, 0x0d, 0x0e, 0x3b, 0x53, 0xa3, 0x9c, 0xe3, 0xad, 0xe3, 0x31, 0x64, 0xa7, 0xbc, 0x91, 0xc7, 0x38, 0x18, 0x8b, 0xe9, 0xd8, 0x61, 0x75, 0x22, 0x93, 0x44, 0xd5, 0x25, 0x5c, 0xb5, 0x61, 0x27, 0xa3, 0x33, 0x2a, 0x44, 0x2a, 0x4d, 0x14, 0x1e, 0x14, 0x65, 0x89, 0xc7, 0x3f, 0xb4, 0x6e, 0xe1, 0xd3, 0x8e, 0x56, 0x03, 0x1b, 0xe7, 0xf6, 0x5f, 0x94, 0x17, 0xda, 0xa2, 0x44, 0xda, 0x56, 0x1c, 0x4d, 0x9b, 0xbe, 0x21, 0xc2, 0xf2, 0xd9, 0xaf, 0xb9, 0x6b, 0x94, 0x50, 0xa2, 0x89, 0xf4, 0x42 }; static const uint8_t nist_186_2_ecdsa_testvector_142_private[] = { /* d - byte alignment */ 0x01, 0x09, 0xb0, 0x9c, 0x1b, 0xb1, 0x8f, 0x36, 0x3e, 0x67, 0x35, 0xa6, 0xd0, 0xae, 0xd4, 0xa2, 0x2e, 0x83, 0xe3, 0x3d, 0xc1, 0xf7, 0xbd, 0x74, 0xe0, 0x28, 0xd2, 0x07, 0xe2, 0xc8, 0x88, 0x37, 0x1b, 0x42, 0xd1, 0x8c, 0x37, 0x6b, 0xd5, 0x0f, 0x16, 0xdb, 0x9b, 0xef, 0x49, 0x11, 0x3f, 0xc3, 0xc0, 0x09, 0x21, 0x4c, 0xcc, 0x78, 0xb5, 0x8a, 0x73, 0x1b, 0xc0, 0x1d, 0xbe, 0x37, 0x4a, 0xfb, 0x58, 0x8f, 0x09, 0xbe, 0x08, 0xba, 0x14, 0xcc }; static const uint8_t nist_186_2_ecdsa_testvector_142_public_x[] = { /* Qx - byte alignment */ 0x05, 0x6e, 0xd6, 0x64, 0x95, 0xaa, 0x19, 0x9e, 0x00, 0x88, 0xfd, 0x9a, 0xe6, 0xba, 0x4a, 0xbe, 0x61, 0x71, 0xcf, 0xfe, 0x75, 0x67, 0xfb, 0x37, 0x3c, 0x59, 0x86, 0xec, 0x0f, 0xbb, 0xe6, 0xad, 0x4e, 0x8d, 0xbb, 0x90, 0x16, 0x69, 0x02, 0x81, 0xa9, 0x72, 0x89, 0xbd, 0x58, 0x96, 0x4d, 0x62, 0xf7, 0xf7, 0x84, 0x30, 0x93, 0x53, 0xbe, 0xfa, 0x0f, 0x82, 0x47, 0xbf, 0xd1, 0xd5, 0x42, 0x7d, 0x06, 0xfb, 0x25, 0x64, 0xb8, 0x9d, 0x11, 0x0b }; static const uint8_t nist_186_2_ecdsa_testvector_142_public_y[] = { /* Qy - byte alignment */ 0x00, 0x08, 0xc7, 0x0b, 0x99, 0x35, 0xb3, 0x6e, 0xb4, 0x07, 0x60, 0x16, 0x8e, 0x67, 0xae, 0x5a, 0x25, 0x06, 0x76, 0x32, 0xcd, 0xce, 0xc5, 0x87, 0x75, 0x8a, 0x62, 0x66, 0x43, 0xbd, 0x9b, 0xca, 0x16, 0x67, 0x06, 0x95, 0xe0, 0xbc, 0x79, 0x2a, 0x9b, 0x1e, 0x32, 0xc5, 0x01, 0xbb, 0xf6, 0xc7, 0x19, 0x0f, 0x98, 0xc3, 0x3e, 0xdd, 0x68, 0x45, 0xd6, 0xfb, 0x55, 0x2f, 0x31, 0x4c, 0x13, 0x60, 0x59, 0x97, 0x0a, 0xf7, 0xe6, 0xc6, 0xe6, 0x01 }; /* k = 0d8acc4a715cdf8aeaed8d4fafd06459f4d4d88a0a7f66f59319ad2402ba250f8fc7da47ff2215fd6f59783344f900e1615d9c3e287623a5534afaa1f9cd1dd96bbbca443477be4 */ static const uint8_t nist_186_2_ecdsa_testvector_142_out[] = { /* R - byte alignment */ 0x00, 0x33, 0xfa, 0xd5, 0xd3, 0x5e, 0x11, 0x35, 0x3a, 0xf1, 0x88, 0x11, 0xa1, 0xe7, 0x8d, 0xd8, 0xd0, 0xe6, 0xd4, 0xbd, 0xd9, 0xf3, 0xe5, 0xc2, 0x99, 0xfa, 0x48, 0x0e, 0x0b, 0x8f, 0x41, 0xfb, 0x5a, 0x38, 0xa7, 0x0d, 0x0e, 0x7a, 0x07, 0x38, 0xaa, 0xde, 0xe8, 0xed, 0xdc, 0x06, 0x98, 0xfd, 0x8b, 0x7d, 0x33, 0x31, 0x14, 0x08, 0xf5, 0xfe, 0xc2, 0x2a, 0x45, 0x69, 0x53, 0x08, 0xa2, 0xb6, 0x04, 0x62, 0xe4, 0x94, 0xb3, 0x56, 0xe0, 0x65, /* S - byte alignment */ 0x01, 0xdb, 0x16, 0xa2, 0xf2, 0x25, 0xfb, 0xc4, 0xd4, 0x01, 0xe9, 0x81, 0x76, 0x6e, 0x69, 0x1e, 0x69, 0x47, 0x76, 0xcb, 0xf2, 0x21, 0xc3, 0x2f, 0x4c, 0x1f, 0xf2, 0xee, 0xc6, 0xf4, 0xd9, 0xd5, 0x50, 0xb5, 0x7f, 0xe1, 0xe7, 0x08, 0xcf, 0x4c, 0x48, 0x0f, 0xe4, 0xa2, 0xf4, 0x51, 0xe0, 0xa0, 0xc3, 0x90, 0x52, 0xfb, 0xc5, 0x89, 0x51, 0xa5, 0x76, 0x0c, 0x55, 0x78, 0xaa, 0x22, 0x01, 0x4e, 0xba, 0x22, 0x47, 0xd9, 0x52, 0x92, 0x04, 0xc8 }; static const uint8_t nist_186_2_ecdsa_testvector_143_ptx[] = { /* Msg */ 0xd0, 0x0d, 0x1c, 0x0f, 0x85, 0x28, 0x5b, 0xda, 0xc9, 0xa7, 0x40, 0x4d, 0x4e, 0xc4, 0x25, 0x29, 0x5a, 0xfa, 0xab, 0x59, 0xc1, 0x25, 0x51, 0x32, 0x11, 0xe5, 0x46, 0xf9, 0x0c, 0x43, 0x7c, 0xa5, 0x5b, 0x97, 0xfe, 0xe7, 0x80, 0xa9, 0x83, 0x68, 0x0d, 0x16, 0x43, 0x52, 0x13, 0xf5, 0x09, 0x11, 0xde, 0xbb, 0x8a, 0x5b, 0xdf, 0x5c, 0xf5, 0x6d, 0xea, 0xb3, 0xcb, 0x98, 0xa2, 0x24, 0xf1, 0xfd, 0x31, 0x80, 0x04, 0x95, 0x3c, 0x28, 0xec, 0x74, 0x15, 0x76, 0xb4, 0x4e, 0x33, 0x58, 0x98, 0x3a, 0xe0, 0x3e, 0x60, 0xb6, 0x32, 0x37, 0xed, 0xeb, 0x3c, 0x56, 0x12, 0x33, 0x85, 0x5b, 0xa5, 0xd9, 0xba, 0x8f, 0xd5, 0x20, 0x9f, 0xf0, 0xbd, 0x86, 0x4b, 0x8e, 0x3a, 0x49, 0x95, 0x35, 0xfa, 0x2b, 0xca, 0x4c, 0xd6, 0x72, 0xa1, 0xfd, 0x62, 0x34, 0x70, 0x97, 0xc2, 0xd1, 0x9f, 0x30, 0xbf, 0xc1 }; static const uint8_t nist_186_2_ecdsa_testvector_143_private[] = { /* d - byte alignment */ 0x00, 0xfd, 0xbf, 0x5b, 0x8e, 0xc9, 0x97, 0xdc, 0x35, 0x30, 0xe5, 0xdb, 0x8b, 0x43, 0x18, 0xb0, 0x8b, 0x5b, 0xe2, 0xc7, 0x63, 0x82, 0x2b, 0x0a, 0xe3, 0x1e, 0x45, 0x6f, 0x76, 0xad, 0xa1, 0xde, 0x4e, 0x1b, 0xc5, 0x2f, 0xbc, 0x9a, 0x2c, 0x8b, 0xa3, 0x54, 0x46, 0x7b, 0x09, 0xca, 0xd6, 0xec, 0x28, 0x18, 0x08, 0x10, 0x52, 0xd7, 0xa9, 0x4e, 0x48, 0x1f, 0xb8, 0xd1, 0x03, 0xc6, 0x55, 0x8c, 0xaa, 0x5d, 0x9d, 0x07, 0x62, 0xf0, 0xe5, 0xd6 }; static const uint8_t nist_186_2_ecdsa_testvector_143_public_x[] = { /* Qx - byte alignment */ 0x01, 0x57, 0x13, 0x80, 0x19, 0xcd, 0x1f, 0xc5, 0x0c, 0xb6, 0x99, 0x6b, 0xdb, 0x4d, 0xe7, 0x33, 0x2a, 0x95, 0xb4, 0x34, 0x46, 0x83, 0x87, 0xcb, 0x1a, 0xcc, 0x82, 0xec, 0x7b, 0x8f, 0x25, 0xd9, 0xee, 0xa7, 0xf0, 0x48, 0x4f, 0x26, 0x32, 0x0e, 0x9c, 0x32, 0x16, 0xf0, 0x89, 0xce, 0x5b, 0xfc, 0xbf, 0x0a, 0xb5, 0xd2, 0x77, 0xe3, 0xc4, 0xd2, 0xd5, 0xbf, 0x04, 0xa7, 0x69, 0x5b, 0xab, 0x50, 0x4e, 0x28, 0xc2, 0xe8, 0x2d, 0x21, 0x93, 0x37 }; static const uint8_t nist_186_2_ecdsa_testvector_143_public_y[] = { /* Qy - byte alignment */ 0x00, 0x60, 0xec, 0x1b, 0x48, 0x8a, 0x47, 0x8a, 0x19, 0xf3, 0x33, 0x8b, 0xfb, 0x91, 0x38, 0xe7, 0xb8, 0x7f, 0x67, 0xfb, 0x7e, 0xf8, 0xb1, 0xa0, 0xeb, 0x26, 0x78, 0x46, 0x2a, 0xf5, 0x90, 0xc5, 0xa2, 0xc9, 0x00, 0xa1, 0xbb, 0x3c, 0xaf, 0xfb, 0x30, 0xff, 0x80, 0x3e, 0x04, 0xff, 0x26, 0x7c, 0x97, 0x1f, 0x05, 0xd4, 0x81, 0xd4, 0x20, 0x0c, 0x6e, 0xe8, 0x9d, 0x8c, 0x20, 0x5c, 0xa8, 0xa6, 0xe1, 0x3b, 0x47, 0x28, 0xbc, 0x23, 0xc5, 0xe8 }; /* k = 00795bb246effbdd1cf8e9ef2313851f9d0ebfcf1b8d78b7026960559e675f0435dff97e7d6cfa33951a12f63c4b6aebe4fe8f32e32af170f27547a92d670405b9764aae85029d8 */ static const uint8_t nist_186_2_ecdsa_testvector_143_out[] = { /* R - byte alignment */ 0x01, 0xbc, 0xc7, 0x85, 0x3b, 0xa5, 0x34, 0x83, 0x5b, 0xbb, 0x2e, 0x41, 0xb3, 0xa8, 0x92, 0x70, 0xba, 0xac, 0xd7, 0x3f, 0x9c, 0xf1, 0x0d, 0x58, 0x41, 0x57, 0xee, 0xcf, 0xa7, 0x3a, 0xe6, 0x76, 0x82, 0x94, 0x99, 0x16, 0x6e, 0x34, 0x69, 0x19, 0x8e, 0xc3, 0x86, 0xfd, 0x55, 0x73, 0x85, 0xfd, 0x9b, 0x93, 0xf8, 0x0a, 0xdb, 0xde, 0x19, 0x3c, 0x4f, 0x20, 0x73, 0x5c, 0x7b, 0x4d, 0xe7, 0xe2, 0xac, 0x44, 0x84, 0x14, 0x81, 0xf9, 0xad, 0x2e, /* S - byte alignment */ 0x00, 0x6f, 0xae, 0xc4, 0xdf, 0xd4, 0x07, 0x81, 0xb8, 0xba, 0x3b, 0x66, 0x94, 0x3b, 0x72, 0xe4, 0x6e, 0x50, 0x20, 0x57, 0xd0, 0x5e, 0xda, 0xbc, 0x3f, 0xfe, 0xa9, 0x35, 0x1e, 0xfc, 0xe6, 0xde, 0xd2, 0x65, 0x0f, 0x96, 0xeb, 0xf0, 0xd5, 0x86, 0x7f, 0x3a, 0xcd, 0x38, 0xc3, 0x43, 0xb2, 0x80, 0x4b, 0x36, 0xbc, 0xbb, 0x8c, 0x1c, 0x69, 0x63, 0x16, 0x4d, 0x38, 0xec, 0x9a, 0x61, 0x88, 0x71, 0x09, 0x24, 0x63, 0xbd, 0x4b, 0x84, 0x42, 0x63 }; static const uint8_t nist_186_2_ecdsa_testvector_144_ptx[] = { /* Msg */ 0xda, 0xde, 0xab, 0xe7, 0xb8, 0x6a, 0xd4, 0x42, 0x63, 0x74, 0xd4, 0x26, 0x4b, 0x3b, 0x40, 0xe2, 0x55, 0xa2, 0xbc, 0x9d, 0xdc, 0x28, 0x1b, 0xea, 0xf6, 0x1a, 0xc8, 0x9d, 0xf8, 0x08, 0x64, 0xdc, 0x3c, 0x75, 0xb0, 0x79, 0x21, 0xd2, 0xae, 0x7f, 0x54, 0xae, 0x03, 0x0a, 0x4e, 0x27, 0xa0, 0x5c, 0x1e, 0xa4, 0xa1, 0x2e, 0x69, 0xc6, 0x75, 0x44, 0xaf, 0x9b, 0x40, 0x44, 0xcf, 0x15, 0x7d, 0xc8, 0xce, 0xbb, 0xe8, 0xb2, 0xd4, 0x9f, 0x9b, 0xc0, 0x77, 0x90, 0x77, 0x60, 0x3c, 0x90, 0xc5, 0xc5, 0x5b, 0x89, 0x1d, 0x3a, 0xc3, 0x3b, 0x87, 0xb6, 0x5e, 0x79, 0xe1, 0xb1, 0x96, 0x95, 0x81, 0x37, 0x18, 0x19, 0x1b, 0x3b, 0xd8, 0xb7, 0xe4, 0x2d, 0x55, 0x83, 0xf7, 0xcf, 0x1e, 0x60, 0xf8, 0x44, 0x95, 0xb8, 0xf8, 0x69, 0xf3, 0x71, 0x99, 0x69, 0x8c, 0x1c, 0x73, 0x8c, 0x55, 0x6f, 0xb6, 0x50 }; static const uint8_t nist_186_2_ecdsa_testvector_144_private[] = { /* d - byte alignment */ 0x00, 0x4a, 0xfe, 0x51, 0x29, 0x80, 0x6d, 0x0a, 0xb6, 0xb8, 0x8d, 0x86, 0x0b, 0x71, 0xd9, 0x8a, 0x00, 0xf1, 0x0d, 0x5a, 0x79, 0x5b, 0x35, 0xd0, 0x98, 0x7b, 0x7c, 0x97, 0xf8, 0xbb, 0x9c, 0x2f, 0x2e, 0x8c, 0x53, 0x8c, 0x72, 0x44, 0x36, 0xab, 0xf6, 0x66, 0x47, 0xfa, 0x90, 0xbc, 0x01, 0xff, 0xe3, 0xa8, 0x7f, 0xbd, 0xa1, 0xe6, 0x8f, 0x71, 0x71, 0xf7, 0x6e, 0xe6, 0x64, 0x01, 0x4f, 0x33, 0x0c, 0x4d, 0x4a, 0x28, 0xf9, 0x37, 0x20, 0xba }; static const uint8_t nist_186_2_ecdsa_testvector_144_public_x[] = { /* Qx - byte alignment */ 0x00, 0x9b, 0x36, 0xab, 0x8f, 0xcb, 0x8c, 0x9d, 0x6e, 0xe8, 0xa6, 0x39, 0x2c, 0xa1, 0x90, 0x09, 0xd4, 0xfe, 0xb9, 0x02, 0xdb, 0xbd, 0xf9, 0x4b, 0xb9, 0xd0, 0x69, 0x15, 0x2e, 0xb5, 0xb6, 0x7f, 0x41, 0xa4, 0x97, 0x23, 0xe3, 0xc4, 0xdf, 0xd8, 0xce, 0x77, 0xb5, 0xd0, 0x91, 0x9b, 0xea, 0x8b, 0x26, 0x81, 0xf7, 0x48, 0xe8, 0x04, 0xbd, 0xd1, 0x11, 0x1b, 0x7c, 0xae, 0xc3, 0x02, 0x73, 0xde, 0x28, 0xba, 0x47, 0x62, 0xe9, 0x7f, 0x56, 0x0d }; static const uint8_t nist_186_2_ecdsa_testvector_144_public_y[] = { /* Qy - byte alignment */ 0x07, 0x87, 0x8e, 0x31, 0x10, 0xe4, 0x96, 0x3a, 0xab, 0x77, 0xde, 0x8d, 0xb2, 0x04, 0xde, 0xfe, 0x4e, 0xaa, 0x6b, 0xe6, 0x16, 0x95, 0x0e, 0x67, 0x80, 0xc2, 0x3d, 0x1b, 0x88, 0x88, 0xc1, 0xac, 0x22, 0x82, 0xd3, 0x80, 0x45, 0xcc, 0x4d, 0xdd, 0x0e, 0xa8, 0x41, 0xdf, 0x48, 0x44, 0xf8, 0x75, 0x16, 0xd0, 0x4b, 0x1d, 0x2e, 0x99, 0x4f, 0x12, 0xf6, 0xe9, 0xe0, 0xc0, 0xa6, 0xbb, 0x64, 0x0a, 0xf7, 0x4e, 0xb4, 0xa6, 0xb4, 0x05, 0x45, 0x86 }; /* k = 03d86bdadcb891157e3fe27b57adf717388fcad072c32ba8a8e90c3c2f9410b61ec376f9512eb1a190a34c4ac7fbfbcce77e4cdf4bf31aa2577b1a8a7c3d0505e926a21c4a10253 */ static const uint8_t nist_186_2_ecdsa_testvector_144_out[] = { /* R - byte alignment */ 0x00, 0xa9, 0x4e, 0xaa, 0x42, 0xdb, 0x67, 0xd1, 0x3a, 0xa3, 0x76, 0xcf, 0x0c, 0xed, 0x26, 0x01, 0x9c, 0x04, 0x90, 0xa6, 0x2c, 0x09, 0x28, 0xbf, 0x8f, 0xfe, 0x56, 0xc7, 0x25, 0x1b, 0xab, 0xd3, 0x77, 0x6f, 0x04, 0x35, 0xa5, 0xf9, 0x94, 0x4b, 0xca, 0xea, 0x78, 0x48, 0xd5, 0x51, 0xd6, 0x20, 0x19, 0x81, 0xa1, 0x82, 0x53, 0x40, 0x7e, 0x18, 0x76, 0x18, 0x1e, 0xa3, 0x40, 0x06, 0xc7, 0xe0, 0x0e, 0x1a, 0x0b, 0x64, 0xf2, 0x0a, 0x8b, 0x96, /* S - byte alignment */ 0x00, 0x96, 0xe9, 0x8e, 0xcb, 0x15, 0x68, 0xcc, 0x09, 0x1e, 0x22, 0x7e, 0x46, 0xb6, 0xc0, 0x13, 0xf7, 0xf2, 0x0a, 0x22, 0xae, 0x10, 0x78, 0x20, 0xad, 0x9b, 0xc4, 0xf4, 0x81, 0x0e, 0x90, 0x06, 0x2a, 0xb6, 0xb3, 0xb0, 0x26, 0x0e, 0x39, 0xf8, 0xb8, 0x07, 0xeb, 0xd3, 0xd0, 0xb2, 0x86, 0xe7, 0x18, 0x7e, 0xd9, 0x84, 0x73, 0x20, 0x59, 0xe3, 0xf9, 0xc2, 0xb8, 0x49, 0x06, 0xd7, 0x46, 0x11, 0x97, 0x5d, 0x6e, 0xbc, 0x41, 0x25, 0xf6, 0x86 }; static const uint8_t nist_186_2_ecdsa_testvector_145_ptx[] = { /* Msg */ 0x7c, 0x86, 0xb7, 0xa4, 0x12, 0x18, 0x47, 0x65, 0xb7, 0xad, 0x39, 0xba, 0x77, 0x73, 0x16, 0xda, 0x3b, 0xfd, 0x34, 0x8b, 0x40, 0xe6, 0xd2, 0xe7, 0xc8, 0xb7, 0x64, 0x60, 0x10, 0x0a, 0x2c, 0x02, 0x81, 0xf0, 0x0a, 0xf8, 0x2a, 0x91, 0x95, 0x52, 0x6e, 0x12, 0x6a, 0x05, 0xfa, 0xbc, 0xc5, 0x33, 0xfb, 0x5a, 0x4e, 0xad, 0x8d, 0xe2, 0x35, 0xb7, 0x76, 0x58, 0x80, 0x0b, 0x14, 0xf0, 0xa4, 0x20, 0x94, 0x73, 0x53, 0xab, 0x65, 0xe3, 0x96, 0x67, 0xec, 0x62, 0x1b, 0x11, 0x7a, 0x50, 0xd0, 0xb7, 0x7b, 0xb4, 0xb1, 0x33, 0xf0, 0xdd, 0xdd, 0xf3, 0x1f, 0x49, 0xf0, 0xfb, 0x88, 0xc5, 0x8d, 0x2c, 0x1c, 0xd6, 0x3a, 0xc6, 0xaa, 0x58, 0x71, 0x2c, 0x9a, 0x65, 0xf3, 0xe7, 0xdd, 0x78, 0x60, 0xee, 0x24, 0xd2, 0x05, 0x24, 0x50, 0x1d, 0xf5, 0x23, 0x2a, 0x50, 0x5b, 0x38, 0x55, 0xd2, 0x0e, 0xae }; static const uint8_t nist_186_2_ecdsa_testvector_145_private[] = { /* d - byte alignment */ 0x00, 0x6a, 0x46, 0xb7, 0x27, 0xb6, 0x4f, 0x68, 0x81, 0x0c, 0x10, 0x3b, 0x8e, 0x9d, 0x33, 0xa0, 0x16, 0x8e, 0xad, 0xd2, 0xca, 0x6d, 0xc8, 0xb8, 0x08, 0x0f, 0xa0, 0x5a, 0x05, 0x23, 0x33, 0xc0, 0xb5, 0x67, 0xd2, 0x26, 0xc7, 0x20, 0xd4, 0xea, 0x5a, 0x90, 0x40, 0xf2, 0x46, 0x7f, 0xd9, 0x3a, 0xdf, 0x0b, 0x43, 0xd5, 0xdc, 0x0a, 0x77, 0x0a, 0x66, 0xf8, 0x6c, 0x29, 0x7d, 0x35, 0xdf, 0x29, 0xc4, 0x42, 0x60, 0xfe, 0x1b, 0x17, 0xe4, 0x49 }; static const uint8_t nist_186_2_ecdsa_testvector_145_public_x[] = { /* Qx - byte alignment */ 0x02, 0xad, 0x7e, 0xe2, 0xda, 0x9e, 0x6d, 0x28, 0xd5, 0xc2, 0x60, 0x5e, 0x9d, 0x95, 0xf6, 0x74, 0x97, 0x17, 0x90, 0x92, 0x35, 0x0d, 0x4b, 0xe4, 0x44, 0x1b, 0x08, 0x93, 0x26, 0x3e, 0xa7, 0x08, 0x91, 0x79, 0xbe, 0x06, 0x08, 0xe6, 0x44, 0x93, 0xde, 0xb7, 0xc6, 0x50, 0x84, 0x2e, 0xa3, 0x81, 0x3e, 0x70, 0xa9, 0x10, 0xad, 0x3d, 0x2b, 0x78, 0x56, 0xa5, 0xb5, 0x89, 0x25, 0x0a, 0x99, 0x75, 0x9c, 0x6f, 0xa8, 0xe5, 0xd4, 0xff, 0x3a, 0xc1 }; static const uint8_t nist_186_2_ecdsa_testvector_145_public_y[] = { /* Qy - byte alignment */ 0x03, 0x16, 0xa6, 0x04, 0x01, 0x9d, 0xf5, 0x55, 0x27, 0x89, 0x6c, 0x79, 0xb7, 0xdf, 0xc0, 0xe2, 0x38, 0x78, 0xe1, 0x8b, 0x6f, 0xf1, 0x80, 0x3f, 0xe8, 0x5d, 0xc4, 0x3f, 0x42, 0xc7, 0xfc, 0xe8, 0x02, 0x8d, 0xa8, 0x8a, 0xc5, 0x5b, 0x61, 0x38, 0x07, 0xb3, 0x13, 0x95, 0x5f, 0x29, 0xe7, 0x2b, 0x16, 0xed, 0xba, 0x7c, 0xc3, 0xdb, 0xfc, 0x3c, 0x24, 0xf1, 0x55, 0x98, 0xc9, 0x16, 0x10, 0x1f, 0x1e, 0x32, 0x01, 0x0b, 0xd6, 0x16, 0xc9, 0xc0 }; /* k = 0403d95f88d2713cc6ed6b6fb96562d4406a8dc54290d943ab01cfb9a548f5e47246a33ee995d2a9878bba141dcf0aa22382f6bd41173862bf698315750081d15b4d6024fd05792 */ static const uint8_t nist_186_2_ecdsa_testvector_145_out[] = { /* R - byte alignment */ 0x01, 0xc5, 0x63, 0x2f, 0xa6, 0x52, 0x90, 0xf1, 0x55, 0x6e, 0x4e, 0x9b, 0x20, 0x02, 0xb8, 0x02, 0x87, 0x82, 0xcc, 0x9e, 0x3e, 0x92, 0x18, 0xff, 0x59, 0xb2, 0x52, 0xce, 0x6f, 0xe7, 0xe9, 0x11, 0x4c, 0x79, 0x9a, 0x6e, 0x72, 0xca, 0xcc, 0x1b, 0x54, 0xe7, 0xe7, 0xe2, 0x94, 0xee, 0x32, 0x39, 0x6a, 0x2b, 0x49, 0xe2, 0x87, 0x89, 0xe7, 0xbb, 0x5a, 0xe8, 0x49, 0x2f, 0x49, 0x5f, 0x7f, 0x2c, 0x8c, 0x01, 0xcd, 0x51, 0xe3, 0x23, 0x08, 0xe4, /* S - byte alignment */ 0x00, 0x32, 0xbc, 0x1c, 0x37, 0x3a, 0x54, 0x14, 0x96, 0x86, 0x42, 0x27, 0x7b, 0xf9, 0x66, 0x1f, 0x7f, 0x2e, 0x1f, 0x2e, 0x26, 0xc9, 0xa1, 0x57, 0x2b, 0x2a, 0x00, 0xbb, 0x8a, 0x9e, 0x93, 0x68, 0x81, 0x49, 0x7d, 0x8c, 0xb4, 0x50, 0x0a, 0xf3, 0xfe, 0xda, 0xe9, 0x53, 0xdc, 0x44, 0x5c, 0x84, 0xe0, 0x62, 0x74, 0xa3, 0xe4, 0x2d, 0x78, 0x46, 0xfd, 0xb7, 0x62, 0xb1, 0x85, 0xa1, 0x5e, 0xc9, 0x69, 0xa5, 0xb2, 0xf1, 0xe9, 0xfe, 0x68, 0x83 }; static const uint8_t nist_186_2_ecdsa_testvector_146_ptx[] = { /* Msg */ 0x2b, 0xab, 0xf4, 0x2f, 0xe8, 0x6c, 0x04, 0x3e, 0x40, 0x1f, 0xff, 0x55, 0x21, 0x46, 0x6a, 0xb5, 0x5d, 0xbe, 0xbf, 0xc0, 0x5b, 0xa1, 0xc0, 0x02, 0x0d, 0x6a, 0x0a, 0x6f, 0x21, 0x5a, 0xed, 0xeb, 0x7c, 0x1b, 0x7b, 0x10, 0xe4, 0xa4, 0xdf, 0x2b, 0xfc, 0x5c, 0xf1, 0x87, 0x76, 0x82, 0x07, 0xef, 0x84, 0xcc, 0x0d, 0x6e, 0x8f, 0x4e, 0xd8, 0x59, 0x2c, 0x9e, 0xb7, 0x8f, 0x4c, 0x36, 0x4b, 0x00, 0xb2, 0x19, 0x99, 0x6c, 0xab, 0xba, 0x5e, 0x6d, 0xf9, 0x19, 0xa2, 0xb8, 0x10, 0x2f, 0x90, 0xa0, 0x85, 0x8c, 0x85, 0xdc, 0xc3, 0x3f, 0x67, 0x89, 0x00, 0xf6, 0x38, 0x73, 0x6f, 0x66, 0xeb, 0x90, 0xb7, 0xed, 0x76, 0xcd, 0xa5, 0x76, 0x28, 0x0d, 0x1d, 0x9e, 0x3d, 0x6f, 0x57, 0x15, 0xb0, 0xd0, 0x48, 0x46, 0x50, 0x92, 0x5d, 0x3a, 0x16, 0x9b, 0x6f, 0xb9, 0xb6, 0xa0, 0xf4, 0xb3, 0x74, 0xa3 }; static const uint8_t nist_186_2_ecdsa_testvector_146_private[] = { /* d - byte alignment */ 0x00, 0x31, 0x43, 0x90, 0xd2, 0x1e, 0xf2, 0x41, 0x32, 0x8c, 0xc0, 0xe1, 0xf6, 0x27, 0xe2, 0xde, 0x01, 0xcd, 0x3c, 0x64, 0x45, 0x7e, 0xc0, 0xe0, 0x11, 0x3b, 0xbf, 0xdd, 0x05, 0x5f, 0x84, 0x75, 0x55, 0xbc, 0xe1, 0xde, 0x8a, 0x5b, 0x15, 0xa1, 0x15, 0x78, 0x57, 0xb6, 0x1d, 0x85, 0x97, 0xc1, 0xe9, 0x78, 0xfe, 0xdc, 0xa4, 0x5a, 0x99, 0xf2, 0x81, 0x33, 0x24, 0x42, 0xf4, 0x4a, 0x1e, 0x68, 0xfc, 0x3a, 0x05, 0x09, 0xc4, 0x95, 0x79, 0x4b }; static const uint8_t nist_186_2_ecdsa_testvector_146_public_x[] = { /* Qx - byte alignment */ 0x06, 0x78, 0xbd, 0x75, 0xdf, 0xa0, 0xbc, 0x87, 0x4f, 0x88, 0xc6, 0x79, 0x9b, 0x59, 0x86, 0xe1, 0x80, 0xa4, 0x81, 0xd3, 0xc3, 0x84, 0xa8, 0x10, 0xef, 0x43, 0xbc, 0x7e, 0x8c, 0x0e, 0x07, 0x89, 0x94, 0x30, 0x89, 0x4a, 0xe6, 0x87, 0x72, 0x2d, 0x7f, 0x06, 0x7c, 0x83, 0x31, 0xc2, 0xd9, 0x7d, 0x31, 0xd5, 0x58, 0x97, 0xd3, 0xa3, 0xa9, 0xf6, 0x6d, 0xf1, 0xa3, 0xbe, 0x25, 0xa8, 0x0e, 0x49, 0x0e, 0xe0, 0x79, 0x24, 0xf2, 0x3b, 0x56, 0x23 }; static const uint8_t nist_186_2_ecdsa_testvector_146_public_y[] = { /* Qy - byte alignment */ 0x07, 0x61, 0xac, 0x3b, 0xee, 0xc4, 0xe0, 0xb2, 0x38, 0xc2, 0x66, 0xb0, 0x57, 0x23, 0xe1, 0x98, 0x3e, 0x24, 0x67, 0x70, 0x9e, 0x9f, 0xed, 0x61, 0xc1, 0x31, 0xfc, 0x1e, 0xab, 0xcd, 0x8f, 0x43, 0x1f, 0x62, 0x77, 0x5c, 0x5c, 0xc2, 0xd4, 0x5c, 0xac, 0x83, 0xd0, 0x00, 0x3c, 0x9a, 0xd6, 0xc3, 0x95, 0x3a, 0x18, 0x9d, 0x13, 0xd9, 0xf6, 0x42, 0xf6, 0x56, 0x52, 0x06, 0x30, 0x89, 0xf1, 0xf2, 0xec, 0x57, 0x43, 0x85, 0xce, 0x33, 0x3b, 0x0e }; /* k = 1c562493602d5a35eb6e7ebbf821c8aa021f0125f845f32f33fc8fac1955cbd8f6ecd370fe8e0a405248d00de47c0d596d90c796dbecd13c2edc9fadc28b98f07e9e2f288a745b2 */ static const uint8_t nist_186_2_ecdsa_testvector_146_out[] = { /* R - byte alignment */ 0x00, 0x48, 0xf2, 0x80, 0x47, 0x8d, 0xe4, 0xec, 0x2d, 0xfd, 0x9a, 0x15, 0x10, 0x02, 0x2b, 0xfe, 0x97, 0xe9, 0xe1, 0xe8, 0x3e, 0x0a, 0xef, 0x24, 0xa4, 0xfe, 0x08, 0x70, 0x06, 0xca, 0x27, 0xec, 0x28, 0xf2, 0x72, 0x23, 0x7a, 0xe3, 0x75, 0x05, 0x72, 0x27, 0xbc, 0xb5, 0x41, 0x72, 0x24, 0xa3, 0xff, 0xc2, 0x9a, 0x26, 0xfe, 0xb5, 0x07, 0xea, 0xc4, 0x19, 0xdc, 0x8d, 0x69, 0x32, 0x7a, 0x97, 0xae, 0xc2, 0xfd, 0xea, 0x80, 0x7e, 0xbc, 0x08, /* S - byte alignment */ 0x00, 0x5a, 0xd5, 0xbb, 0xfa, 0xf9, 0xc5, 0x33, 0x2b, 0xd9, 0xa4, 0x45, 0xd5, 0x8c, 0xa0, 0xcc, 0xeb, 0x55, 0x91, 0xc2, 0x84, 0x41, 0xca, 0xe9, 0xe6, 0xab, 0xd6, 0x68, 0x1b, 0xcb, 0x48, 0x45, 0xc3, 0xb2, 0xc9, 0xd6, 0x3c, 0xc1, 0x58, 0xcd, 0x24, 0x85, 0xc1, 0xd8, 0x78, 0xf0, 0x4f, 0xbd, 0x64, 0x9a, 0xd9, 0x6f, 0x06, 0x3c, 0x6a, 0x9e, 0xe8, 0xa4, 0xa9, 0xed, 0x56, 0x21, 0x12, 0xd4, 0x81, 0x3d, 0xe8, 0x36, 0xf5, 0xe6, 0xdc, 0x24 }; static const uint8_t nist_186_2_ecdsa_testvector_147_ptx[] = { /* Msg */ 0xc4, 0xe1, 0xd8, 0x3d, 0xa0, 0x6f, 0x0e, 0x3b, 0x05, 0x64, 0x00, 0x32, 0xf8, 0x46, 0x6b, 0xfd, 0xb6, 0xeb, 0x1f, 0x39, 0x3d, 0xea, 0xa7, 0x54, 0x0e, 0x4f, 0x2c, 0xe6, 0x32, 0x93, 0x97, 0x45, 0x7b, 0xcb, 0xf6, 0x54, 0x0c, 0x1f, 0x21, 0x9b, 0x1b, 0x7e, 0x9d, 0x9d, 0xf6, 0x90, 0xc0, 0x65, 0x44, 0xec, 0x16, 0x63, 0x8e, 0x8c, 0x04, 0x76, 0xfe, 0x7d, 0xab, 0x4a, 0x66, 0xdb, 0x0f, 0xe4, 0x83, 0xfd, 0x79, 0x7b, 0x84, 0xed, 0x1a, 0x8a, 0xc6, 0x1b, 0xf0, 0x23, 0xe2, 0x52, 0xee, 0x86, 0xe9, 0xea, 0x57, 0xf2, 0xee, 0x40, 0x6b, 0xbb, 0xc5, 0x63, 0x45, 0x9d, 0x0b, 0x10, 0x04, 0x50, 0x66, 0xe1, 0x29, 0x5c, 0x0e, 0xc1, 0x40, 0x2f, 0x8d, 0xa3, 0xc3, 0x6d, 0xc3, 0x74, 0x3b, 0x87, 0x2c, 0x4d, 0xa8, 0x8f, 0x66, 0xee, 0x23, 0x4b, 0xed, 0x68, 0xc2, 0x88, 0x2a, 0x19, 0xbc, 0xb0 }; static const uint8_t nist_186_2_ecdsa_testvector_147_private[] = { /* d - byte alignment */ 0x00, 0x5f, 0x3f, 0x6c, 0x0a, 0x13, 0xa2, 0x11, 0x23, 0x85, 0x4a, 0x6f, 0xfa, 0x49, 0xf1, 0x5a, 0x3f, 0x06, 0x35, 0x2a, 0xfe, 0x9b, 0x85, 0xf4, 0xae, 0xc4, 0x0d, 0x8b, 0x22, 0x4c, 0x78, 0x54, 0xc5, 0x06, 0x3e, 0xa1, 0xe1, 0xe6, 0x72, 0x52, 0xc1, 0x63, 0x43, 0x86, 0x8d, 0xdf, 0x2a, 0xb3, 0xd1, 0xc9, 0xc1, 0x03, 0x78, 0x8e, 0x72, 0xe7, 0xab, 0x73, 0x63, 0x81, 0x60, 0x3b, 0xb9, 0xf7, 0xf9, 0x1e, 0x2b, 0xcb, 0x26, 0xc3, 0xe2, 0x03 }; static const uint8_t nist_186_2_ecdsa_testvector_147_public_x[] = { /* Qx - byte alignment */ 0x06, 0xf9, 0xa3, 0x87, 0x0b, 0x2a, 0x26, 0x2e, 0xdd, 0x5c, 0x03, 0x5e, 0x4e, 0xb2, 0x58, 0x1f, 0x70, 0x58, 0x9d, 0xdd, 0x0d, 0x20, 0x97, 0xe7, 0xfa, 0x62, 0xd7, 0x27, 0xd0, 0xd2, 0x66, 0x97, 0x45, 0x7a, 0xf6, 0x8e, 0x27, 0x3e, 0x92, 0x71, 0xe2, 0x80, 0xdc, 0x09, 0x2c, 0x08, 0x11, 0x6b, 0xc8, 0x3a, 0x88, 0x09, 0x94, 0x1a, 0xdc, 0x89, 0xe7, 0x8b, 0x6e, 0xa1, 0x40, 0x1d, 0xd7, 0x06, 0xe5, 0x95, 0xfd, 0xa0, 0xdd, 0xec, 0xa6, 0xcf }; static const uint8_t nist_186_2_ecdsa_testvector_147_public_y[] = { /* Qy - byte alignment */ 0x03, 0xab, 0xbb, 0x91, 0xd7, 0x38, 0x20, 0xed, 0x69, 0x0f, 0x90, 0x94, 0x05, 0x9f, 0x90, 0xcf, 0x66, 0x9c, 0x69, 0x91, 0x05, 0x0c, 0xd4, 0x9b, 0x09, 0x12, 0x1e, 0x87, 0x6e, 0x33, 0x10, 0x57, 0x2b, 0xdf, 0xd6, 0x77, 0xab, 0x7f, 0x96, 0x2c, 0x69, 0x2a, 0xb2, 0xda, 0x1f, 0xc2, 0x1f, 0xfc, 0xa4, 0x68, 0xe9, 0x15, 0xbd, 0x44, 0x85, 0x37, 0xe0, 0xee, 0xe1, 0x24, 0x11, 0x90, 0x18, 0x77, 0x08, 0xab, 0x71, 0xf6, 0x59, 0xcd, 0xe6, 0x17 }; /* k = 0e3f1ea1fd26217e314d8bb1bb06930fc4f98039a4067aa5bfa9825d706e9ce89354d2a215298e003b227eb7defa5c3cefc8f5696135e7373c6d278f17eaee4d0b9bd9eddcc75ea */ static const uint8_t nist_186_2_ecdsa_testvector_147_out[] = { /* R - byte alignment */ 0x00, 0xd1, 0x61, 0x48, 0x13, 0x0f, 0xde, 0xfb, 0x6c, 0x2b, 0x6c, 0xb3, 0x05, 0xea, 0x8c, 0x58, 0x6f, 0x7c, 0x5e, 0x9c, 0x06, 0xcb, 0xed, 0xe1, 0x34, 0x50, 0xde, 0x7b, 0xe7, 0xbd, 0xf2, 0xaa, 0x18, 0x22, 0xcf, 0x10, 0x91, 0x86, 0xde, 0x3b, 0xf1, 0x14, 0xc2, 0x74, 0xca, 0x3a, 0x05, 0x66, 0x2b, 0x56, 0xb9, 0x78, 0x30, 0x46, 0x45, 0x7e, 0xae, 0x64, 0x5c, 0x14, 0xdc, 0x72, 0x2e, 0x36, 0xd7, 0x7e, 0x62, 0x89, 0x64, 0xd5, 0x2f, 0xbc, /* S - byte alignment */ 0x01, 0x9d, 0xed, 0x7e, 0xd1, 0xa6, 0x12, 0xa2, 0xe6, 0x53, 0x60, 0xd6, 0x15, 0x19, 0xf9, 0x8b, 0xfe, 0x98, 0x15, 0xdb, 0x1b, 0x2a, 0xc8, 0xfc, 0x7d, 0xa8, 0xca, 0x76, 0xfc, 0xa8, 0x86, 0x93, 0x3b, 0xfb, 0x95, 0xd9, 0x20, 0xeb, 0x7a, 0xf4, 0xfd, 0xe7, 0x31, 0xee, 0xbf, 0x19, 0x20, 0x0d, 0xbd, 0x1e, 0x9e, 0xa5, 0x1f, 0x1f, 0x9e, 0x41, 0xf5, 0xd6, 0xd0, 0xc9, 0x09, 0xfe, 0x3b, 0x45, 0x10, 0x4e, 0xc3, 0xad, 0xc8, 0x99, 0xd4, 0x60 }; static const uint8_t nist_186_2_ecdsa_testvector_148_ptx[] = { /* Msg */ 0x3f, 0xdd, 0xfe, 0x5f, 0xe1, 0x9b, 0x1a, 0x4a, 0x9f, 0x23, 0x7f, 0x61, 0xcb, 0x8e, 0xb7, 0x92, 0xe9, 0x5d, 0x09, 0x9a, 0x14, 0x55, 0xfb, 0x78, 0x9d, 0x8d, 0x16, 0x22, 0xf6, 0xc5, 0xe9, 0x76, 0xce, 0xf9, 0x51, 0x73, 0x7e, 0x36, 0xf7, 0xa9, 0xa4, 0xad, 0x19, 0xee, 0x0d, 0x06, 0x8e, 0x53, 0xd9, 0xf6, 0x04, 0x57, 0xd9, 0x14, 0x8d, 0x5a, 0x3c, 0xe8, 0x5a, 0x54, 0x6b, 0x45, 0xc5, 0xc6, 0x31, 0xd9, 0x95, 0xf1, 0x1f, 0x03, 0x7e, 0x47, 0x2f, 0xe4, 0xe8, 0x1f, 0xa7, 0xb9, 0xf2, 0xac, 0x40, 0x68, 0xb5, 0x30, 0x88, 0x58, 0xcd, 0x6d, 0x85, 0x86, 0x16, 0x5c, 0x9b, 0xd6, 0xb3, 0x22, 0xaf, 0xa7, 0x55, 0x40, 0x8d, 0xa9, 0xb9, 0x0a, 0x87, 0xf3, 0x73, 0x5a, 0x5f, 0x50, 0xeb, 0x85, 0x68, 0xda, 0xa5, 0x8e, 0xe7, 0xcb, 0xc5, 0x9a, 0xbf, 0x8f, 0xd2, 0xa4, 0x4e, 0x1e, 0xba, 0x72 }; static const uint8_t nist_186_2_ecdsa_testvector_148_private[] = { /* d - byte alignment */ 0x01, 0x06, 0x22, 0x53, 0x72, 0xae, 0x1a, 0x8c, 0x90, 0xb4, 0x61, 0xef, 0x65, 0x7b, 0xc7, 0xf5, 0x6f, 0x14, 0x7e, 0x06, 0x4d, 0x2b, 0x9e, 0xcc, 0x3e, 0x25, 0xf0, 0x1a, 0xcb, 0xd3, 0xd7, 0xd9, 0x79, 0xef, 0xf4, 0x8d, 0x70, 0x36, 0x34, 0x28, 0x4a, 0x2d, 0x6f, 0xdd, 0xb2, 0x16, 0x19, 0x18, 0xe9, 0xa1, 0x8a, 0x9a, 0x2d, 0x5d, 0x4e, 0x7b, 0xbe, 0xd2, 0xf7, 0x5b, 0x7a, 0x4c, 0xad, 0x37, 0x2a, 0x11, 0xbf, 0x7e, 0x11, 0x8d, 0xab, 0x4a }; static const uint8_t nist_186_2_ecdsa_testvector_148_public_x[] = { /* Qx - byte alignment */ 0x05, 0xab, 0x89, 0x4b, 0x73, 0xae, 0x5f, 0xcf, 0x82, 0x2e, 0x79, 0x2c, 0x06, 0x78, 0xfc, 0xaf, 0xa8, 0x10, 0x84, 0x71, 0x19, 0xa1, 0xbf, 0x44, 0x75, 0x6d, 0xd1, 0x5e, 0x44, 0xab, 0xd9, 0x94, 0x57, 0x7f, 0xdc, 0x33, 0x66, 0xc9, 0xf8, 0x1e, 0xaf, 0xa8, 0xaa, 0x1b, 0x50, 0x97, 0x7e, 0x86, 0xe1, 0xcf, 0xc9, 0xdc, 0x0a, 0xe9, 0xde, 0x38, 0xa9, 0x2c, 0x66, 0x90, 0x05, 0x93, 0x7d, 0xa7, 0xd5, 0xbc, 0x8a, 0xdf, 0x1a, 0xbc, 0x3e, 0x97 }; static const uint8_t nist_186_2_ecdsa_testvector_148_public_y[] = { /* Qy - byte alignment */ 0x04, 0xba, 0xf7, 0x96, 0x45, 0x66, 0xb3, 0x8b, 0xaa, 0xa3, 0x33, 0x4d, 0xe1, 0x21, 0x14, 0x99, 0x43, 0xf2, 0x12, 0xd2, 0xd6, 0xa8, 0xb8, 0x91, 0xe0, 0x68, 0x24, 0xb4, 0x59, 0x9a, 0x03, 0x3a, 0xdd, 0x0c, 0x47, 0xa7, 0xf3, 0xa3, 0xe2, 0x33, 0x7b, 0x88, 0xf6, 0x24, 0x6c, 0xd2, 0xbe, 0x4f, 0x78, 0xdd, 0xd4, 0x1a, 0xdf, 0xb5, 0xb5, 0xae, 0x1f, 0x11, 0x16, 0x96, 0x6b, 0xad, 0xa7, 0xb3, 0x05, 0x98, 0xef, 0x5e, 0x9e, 0x5f, 0x0e, 0xe7 }; /* k = 0e16e40c853dc6c904ae4ed9c43a362c3a3edec8475b624b93e38002934f609aaec6a673bd38b6f4f579abe36435a608ec286ba1b3f56fdf9691a23bc70a276d4247f5310e04d7a */ static const uint8_t nist_186_2_ecdsa_testvector_148_out[] = { /* R - byte alignment */ 0x00, 0x73, 0xe1, 0x3e, 0x82, 0xa6, 0x62, 0xfd, 0x94, 0xb0, 0x2b, 0xea, 0xd7, 0x1d, 0x9b, 0x8c, 0x68, 0x22, 0x3b, 0xc5, 0x7d, 0x1b, 0x89, 0x28, 0x2a, 0xa2, 0x0a, 0x7a, 0xad, 0x71, 0xae, 0xc9, 0xae, 0xf3, 0x12, 0xa7, 0x67, 0x27, 0x55, 0x9c, 0xa6, 0xd1, 0xe9, 0xc5, 0xcd, 0xdb, 0x63, 0xe1, 0x0e, 0x18, 0x88, 0x42, 0xa7, 0x9b, 0x78, 0xe2, 0x71, 0x8b, 0x31, 0x21, 0x93, 0x1d, 0x7e, 0x12, 0x02, 0xb0, 0x42, 0x7b, 0x94, 0x64, 0x30, 0x29, /* S - byte alignment */ 0x01, 0x04, 0x80, 0x75, 0xf9, 0x68, 0x12, 0x13, 0x5c, 0xdf, 0x64, 0x4f, 0x3c, 0x7b, 0x3c, 0x02, 0xe5, 0x71, 0x97, 0x56, 0x1c, 0xf1, 0x7b, 0x6b, 0xa1, 0xd4, 0xd7, 0x7f, 0x48, 0xcf, 0x53, 0x01, 0x67, 0xa4, 0x6e, 0xa7, 0x82, 0x9b, 0xec, 0x00, 0x9b, 0x20, 0xde, 0x15, 0xe5, 0x75, 0x3b, 0x35, 0x51, 0xda, 0x65, 0xc2, 0xc5, 0x5d, 0xb0, 0xb4, 0x90, 0x06, 0xd0, 0x85, 0x95, 0x53, 0xd0, 0xfe, 0xe0, 0x31, 0xc2, 0xc5, 0x82, 0xf4, 0x78, 0xc9 }; static const uint8_t nist_186_2_ecdsa_testvector_149_ptx[] = { /* Msg */ 0x11, 0x94, 0x75, 0xc3, 0x75, 0x3a, 0x4e, 0x1a, 0x09, 0xf6, 0xf4, 0xd9, 0xff, 0xbe, 0xd7, 0xbc, 0xf0, 0x5e, 0xe6, 0x0a, 0xd9, 0x6a, 0xaf, 0x25, 0x63, 0x77, 0xc7, 0x60, 0x67, 0x8a, 0x6c, 0x12, 0xb1, 0xd1, 0x69, 0xe9, 0x04, 0x91, 0x3a, 0x80, 0x5f, 0x60, 0x71, 0x33, 0x7f, 0x94, 0x58, 0x32, 0xa5, 0xfb, 0xd8, 0xd4, 0x99, 0xcd, 0x99, 0x2e, 0xef, 0xde, 0x6b, 0xe5, 0x89, 0x18, 0xe5, 0x40, 0x5d, 0x29, 0x4b, 0x81, 0x78, 0x79, 0xb5, 0x76, 0x43, 0x5f, 0x6e, 0x4b, 0x06, 0x94, 0x9b, 0xa2, 0xaa, 0xe8, 0x1d, 0xe5, 0xc3, 0x33, 0xb8, 0xdb, 0xce, 0x8f, 0x74, 0x7a, 0xb6, 0xc4, 0x43, 0xfd, 0x9e, 0x04, 0xe5, 0x36, 0xda, 0xd9, 0x09, 0x24, 0x3e, 0x5b, 0xb5, 0xc8, 0x9c, 0xa6, 0xe7, 0x35, 0x88, 0x8b, 0x7d, 0xe7, 0x5e, 0x86, 0x52, 0x55, 0x87, 0xf0, 0xaa, 0xc9, 0xf7, 0x76, 0xd0, 0x70 }; static const uint8_t nist_186_2_ecdsa_testvector_149_private[] = { /* d - byte alignment */ 0x00, 0xea, 0x88, 0xfc, 0x4d, 0x45, 0xc3, 0x68, 0x56, 0xc0, 0x4d, 0x6f, 0x90, 0x00, 0x3d, 0xdc, 0xfa, 0x10, 0xc0, 0xe4, 0x9a, 0x4e, 0xb4, 0x36, 0xe1, 0xe9, 0x92, 0x41, 0x37, 0x80, 0x91, 0x70, 0x87, 0xf2, 0xb0, 0x52, 0xde, 0x62, 0x39, 0x09, 0xfa, 0xeb, 0x99, 0x5b, 0x67, 0x4a, 0x8a, 0xb2, 0x14, 0x20, 0x8c, 0xaa, 0x3c, 0xd5, 0x0c, 0xf4, 0x53, 0x08, 0x95, 0xcf, 0x5a, 0xa9, 0xaf, 0x27, 0xc9, 0xbe, 0x7d, 0xc4, 0x47, 0x37, 0x7d, 0x4d }; static const uint8_t nist_186_2_ecdsa_testvector_149_public_x[] = { /* Qx - byte alignment */ 0x02, 0x8c, 0x5a, 0x67, 0x38, 0x2e, 0x01, 0xdc, 0x19, 0xf9, 0x49, 0xd9, 0xc8, 0xfb, 0x0b, 0x0e, 0xab, 0x5b, 0x08, 0x3b, 0x89, 0xf3, 0x63, 0x61, 0x58, 0x0c, 0x94, 0x61, 0xdd, 0xbe, 0x34, 0x15, 0x55, 0x9c, 0x6b, 0xdc, 0x6e, 0xd7, 0x61, 0xb4, 0x53, 0x73, 0x54, 0x57, 0xe2, 0x0c, 0xb8, 0x46, 0x8a, 0xa8, 0xaf, 0x81, 0x66, 0x0e, 0x4d, 0x5f, 0xb0, 0x0f, 0x7e, 0x50, 0x8e, 0x14, 0x18, 0xfa, 0xbd, 0xba, 0x20, 0xe9, 0x31, 0x35, 0x25, 0x9b }; static const uint8_t nist_186_2_ecdsa_testvector_149_public_y[] = { /* Qy - byte alignment */ 0x04, 0x43, 0xdf, 0x4d, 0x7b, 0xc9, 0x7d, 0xff, 0x16, 0xf5, 0xeb, 0xb7, 0xe9, 0x25, 0x1d, 0x3a, 0x33, 0xe2, 0x1f, 0xe3, 0x5c, 0xee, 0x80, 0xa9, 0x17, 0xfe, 0x46, 0xd9, 0xce, 0x6f, 0xef, 0xee, 0xd6, 0x8b, 0xe9, 0x60, 0x1b, 0x8f, 0xd4, 0x75, 0x0f, 0x63, 0x0d, 0x9e, 0xf5, 0x02, 0x8c, 0xb6, 0xc6, 0x19, 0x00, 0x9d, 0x05, 0xcd, 0xa1, 0xf9, 0xc4, 0x68, 0x6b, 0x89, 0x8d, 0x7e, 0x40, 0x23, 0x87, 0xf3, 0x97, 0xce, 0xd8, 0xc8, 0xec, 0x90 }; /* k = 17466571d853ff59d6471ac324805af5d5d72d2360a3f7a3e9529cb3489ed0c66c71b0dac9f0fa2d1de1f67c2eb01553e0c14b77e35f2db48ae361025241afd4ecc818dc50133a4 */ static const uint8_t nist_186_2_ecdsa_testvector_149_out[] = { /* R - byte alignment */ 0x00, 0xd4, 0x0d, 0xb5, 0x62, 0xa9, 0xac, 0xe3, 0x40, 0xbb, 0xfb, 0x70, 0xb0, 0x7a, 0xd9, 0x90, 0x29, 0x4b, 0xfb, 0xaf, 0x5b, 0xe6, 0xb8, 0x83, 0x9c, 0x9d, 0xf5, 0x34, 0x75, 0x46, 0x35, 0x03, 0xae, 0x55, 0x99, 0xda, 0xf2, 0xa6, 0x56, 0xcf, 0xcc, 0xbf, 0xa9, 0x08, 0xc8, 0x8c, 0xe3, 0x7c, 0x2b, 0x46, 0xb3, 0xac, 0x71, 0xcc, 0x58, 0x45, 0x60, 0xa7, 0x50, 0x7d, 0xb8, 0x00, 0x9e, 0x63, 0xb0, 0x88, 0x8c, 0x8e, 0x53, 0x19, 0xfe, 0xde, /* S - byte alignment */ 0x00, 0xc7, 0xf0, 0x6c, 0xb8, 0xb8, 0xf8, 0x3c, 0x86, 0x2c, 0xd3, 0x50, 0x62, 0xe9, 0x09, 0xe3, 0xee, 0x61, 0x5a, 0x8c, 0x3f, 0x83, 0x15, 0x67, 0x80, 0x45, 0xa0, 0x1e, 0xdc, 0x4d, 0x89, 0x88, 0xe1, 0x01, 0xc1, 0xea, 0xe8, 0x80, 0x1e, 0x3d, 0xa4, 0x7f, 0x92, 0xa2, 0xd3, 0xcc, 0x67, 0xba, 0x84, 0x2e, 0x5a, 0xf1, 0x3e, 0x0b, 0xaf, 0x96, 0xe0, 0x4e, 0x60, 0xfc, 0xb2, 0xa4, 0x85, 0x2e, 0x11, 0x54, 0xb6, 0x27, 0xfe, 0xbb, 0x72, 0x7a }; static const uint8_t nist_186_2_ecdsa_testvector_150_ptx[] = { /* Msg */ 0x31, 0x94, 0x16, 0xc2, 0x93, 0x4e, 0x83, 0xe5, 0x2e, 0xb3, 0xf1, 0x01, 0xe8, 0xa3, 0x11, 0x14, 0x94, 0x2f, 0xfd, 0xe1, 0xba, 0x50, 0x1c, 0x43, 0x9b, 0xd8, 0x45, 0xc2, 0x70, 0xa8, 0x27, 0x64, 0xf3, 0x24, 0xe8, 0xc5, 0x20, 0xe4, 0x0c, 0x6a, 0x3d, 0xac, 0x99, 0x53, 0x18, 0x9f, 0x78, 0xcf, 0x90, 0xaf, 0x1f, 0x95, 0x56, 0x58, 0x6d, 0x0f, 0xf5, 0x8e, 0xd5, 0xf9, 0x10, 0xf4, 0xbf, 0x2b, 0xeb, 0x4e, 0x2b, 0xb3, 0x2e, 0x39, 0x98, 0x27, 0xe5, 0x1a, 0x24, 0x3a, 0xca, 0x54, 0xf4, 0x8c, 0xc7, 0xbe, 0xd6, 0xc7, 0xb7, 0x54, 0x25, 0xe7, 0x6d, 0x2c, 0xee, 0xd9, 0xf7, 0xac, 0x50, 0x48, 0x23, 0xfb, 0x29, 0xb4, 0x43, 0xb5, 0xef, 0xc4, 0x2e, 0xe3, 0xdb, 0xdd, 0x87, 0x2a, 0x4d, 0xf3, 0x42, 0x42, 0x6c, 0x9f, 0x63, 0xaa, 0x0c, 0x72, 0x09, 0x9a, 0xd6, 0x8a, 0xac, 0x3a, 0xa2, 0x62 }; static const uint8_t nist_186_2_ecdsa_testvector_150_private[] = { /* d - byte alignment */ 0x00, 0xd7, 0x64, 0x1d, 0x00, 0xae, 0x2a, 0xa1, 0xb8, 0x4e, 0x28, 0x5e, 0x8a, 0xec, 0x02, 0xf3, 0xd0, 0xdb, 0x16, 0x83, 0xec, 0xa0, 0x2e, 0xee, 0x2a, 0x1e, 0x14, 0x52, 0x3e, 0x32, 0x6f, 0x1f, 0x5b, 0x7c, 0xbd, 0x14, 0xa0, 0x9f, 0x90, 0x5b, 0xe2, 0xad, 0x6b, 0xde, 0x53, 0x99, 0x18, 0x51, 0x66, 0xb0, 0xe0, 0x13, 0x50, 0xcb, 0x28, 0x88, 0x5b, 0x0f, 0x6b, 0x09, 0x5a, 0x81, 0x9d, 0xe5, 0x6c, 0xe3, 0x15, 0xbf, 0x05, 0x0c, 0x02, 0x9b }; static const uint8_t nist_186_2_ecdsa_testvector_150_public_x[] = { /* Qx - byte alignment */ 0x07, 0x3d, 0x87, 0x9a, 0x43, 0x3d, 0x98, 0x9f, 0x74, 0xb2, 0x13, 0xd7, 0x67, 0x69, 0x64, 0x48, 0x50, 0x57, 0x92, 0x3d, 0xd1, 0x73, 0x50, 0x16, 0xa3, 0x61, 0x36, 0xca, 0x62, 0xad, 0xf8, 0xa6, 0xa4, 0xec, 0x40, 0x25, 0x5e, 0xdf, 0x9b, 0x07, 0xcb, 0x40, 0x75, 0xc2, 0xef, 0x0e, 0xc5, 0x8e, 0xeb, 0x9e, 0x02, 0xba, 0xfc, 0x75, 0x9d, 0x67, 0xbe, 0xeb, 0xe8, 0xdb, 0x14, 0xe2, 0x23, 0x58, 0x50, 0xbe, 0x1d, 0x2b, 0x59, 0x48, 0x5b, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_150_public_y[] = { /* Qy - byte alignment */ 0x07, 0x0e, 0x91, 0x0d, 0xbf, 0x6e, 0x83, 0xcc, 0xd6, 0x46, 0xea, 0x00, 0x44, 0x85, 0x75, 0x03, 0xab, 0x42, 0x74, 0x9a, 0xfb, 0x92, 0x70, 0x17, 0x98, 0xda, 0x87, 0x1e, 0xbe, 0x35, 0x0e, 0x69, 0x1b, 0x14, 0xc6, 0xbd, 0xcb, 0x23, 0x28, 0xdf, 0x0d, 0x41, 0x18, 0x3e, 0x83, 0xec, 0xc3, 0x5a, 0xbc, 0x47, 0x55, 0xbc, 0xfb, 0x28, 0xdd, 0x8f, 0x3b, 0xbf, 0x60, 0x40, 0xd1, 0x9e, 0x6d, 0x89, 0x95, 0x3c, 0x47, 0xa3, 0x94, 0x30, 0xa2, 0xf5 }; /* k = 122174974c29e11768cf326bbd0f82c042b4f380f2920d2a331e08f5f8755067a7269a2d8ac0798509ed42ac00f3a1c7fbdaaa8d673f9524eb269d2eff04d86ac0cb0f6d809748a */ static const uint8_t nist_186_2_ecdsa_testvector_150_out[] = { /* R - byte alignment */ 0x01, 0x80, 0x33, 0x77, 0xea, 0x63, 0xf9, 0xf5, 0x57, 0x45, 0x11, 0x28, 0xb1, 0xa8, 0x85, 0xf4, 0xaf, 0xab, 0xc2, 0x86, 0x8a, 0xef, 0xe6, 0xa9, 0xfe, 0x2e, 0x84, 0xee, 0x15, 0x29, 0x40, 0x5c, 0x60, 0xd3, 0x13, 0x2a, 0x22, 0x1b, 0x6d, 0x7c, 0xe1, 0xb6, 0xd2, 0x8c, 0x55, 0xd5, 0x5c, 0xac, 0x2d, 0x00, 0x0e, 0x96, 0x9d, 0xa0, 0xab, 0x90, 0xa1, 0x8a, 0x0a, 0xf2, 0x8c, 0xd3, 0x59, 0x0b, 0xca, 0xc8, 0x5d, 0x71, 0xf8, 0x1b, 0x5e, 0x48, /* S - byte alignment */ 0x01, 0x64, 0xc4, 0x20, 0xcc, 0x98, 0x41, 0x41, 0xa4, 0xbd, 0x14, 0x42, 0xd1, 0x8a, 0xb8, 0xdc, 0x6f, 0x57, 0xa8, 0xe8, 0xf7, 0x7c, 0xd2, 0xfa, 0x89, 0x94, 0x56, 0xff, 0xd1, 0x72, 0x89, 0xd1, 0x05, 0x46, 0x01, 0xfc, 0x10, 0x54, 0x70, 0xbc, 0x9a, 0xce, 0xc8, 0x60, 0xcd, 0xa2, 0x07, 0x4c, 0xe7, 0xb7, 0xbb, 0xdf, 0xf5, 0x9a, 0xf1, 0x33, 0x1d, 0xf1, 0x91, 0xae, 0xf4, 0x29, 0x8c, 0xf1, 0x3f, 0xf7, 0x65, 0x06, 0x7b, 0xd1, 0x63, 0x74 }; /* [B-163] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_151_ptx[] = { /* Msg */ 0xc2, 0xd1, 0xaf, 0xa4, 0x0b, 0x33, 0x18, 0x01, 0x6d, 0xe5, 0xb6, 0x42, 0x91, 0xfe, 0x1b, 0x45, 0x32, 0x5e, 0x73, 0x15, 0x7f, 0x87, 0x0a, 0x5d, 0xc0, 0xaf, 0x0e, 0x23, 0x3d, 0x13, 0x95, 0xb2, 0x5b, 0x8d, 0xe1, 0xd8, 0x09, 0x69, 0xe3, 0x52, 0x5a, 0x75, 0xff, 0x85, 0x73, 0x57, 0x0f, 0x6f, 0xa8, 0x23, 0xaa, 0xdc, 0xe2, 0x2d, 0xa6, 0xdd, 0x44, 0x1c, 0xdb, 0x76, 0x0e, 0x40, 0x2a, 0x97, 0xc1, 0x26, 0xbf, 0x4d, 0x84, 0x69, 0x92, 0x3a, 0xc6, 0xca, 0x34, 0x43, 0x25, 0x83, 0xc8, 0x88, 0x8e, 0xd9, 0x4f, 0x99, 0xa6, 0xf1, 0x2a, 0xe7, 0x69, 0xe4, 0xd9, 0x78, 0x11, 0x15, 0x09, 0xdf, 0x3a, 0xc3, 0xce, 0x6c, 0x43, 0xda, 0x2d, 0xa0, 0xf7, 0x0f, 0xdd, 0xe3, 0x6d, 0x2b, 0x4e, 0x79, 0x2c, 0xa7, 0xeb, 0xb3, 0x93, 0x7a, 0x9d, 0x62, 0x79, 0x2f, 0x90, 0x91, 0x10, 0x3a, 0x39, 0x74 }; static const uint8_t nist_186_2_ecdsa_testvector_151_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0x87, 0xc0, 0xc5, 0x88, 0xfb, 0xdc, 0xf9, 0x4a, 0x53, 0xb4, 0x51, 0x6d, 0x62, 0xd8, 0x98, 0xd0, 0x20 }; static const uint8_t nist_186_2_ecdsa_testvector_151_public_x[] = { /* Qx - byte alignment */ 0x01, 0xe1, 0x6c, 0x18, 0xb8, 0x00, 0xd4, 0xd5, 0x5c, 0xea, 0x0e, 0x77, 0x22, 0x46, 0x73, 0x11, 0xd8, 0x98, 0xe4, 0x65, 0x4e }; static const uint8_t nist_186_2_ecdsa_testvector_151_public_y[] = { /* Qy - byte alignment */ 0x06, 0x9e, 0xc2, 0xe9, 0x5a, 0x75, 0xa5, 0x9f, 0x01, 0x41, 0x4c, 0xed, 0x5c, 0xeb, 0x72, 0xb8, 0xf3, 0x47, 0xa9, 0x62, 0x09 }; /* k = 0000002e9c9c0846b936a6c112c0131cfe9e997b7 */ static const uint8_t nist_186_2_ecdsa_testvector_151_out[] = { /* R - byte alignment */ 0x02, 0x66, 0x06, 0xf4, 0xab, 0xd3, 0xb5, 0x8b, 0x9f, 0x68, 0xd6, 0x4a, 0x55, 0xbf, 0x68, 0xa2, 0x2c, 0xf7, 0x3d, 0x02, 0x6d, /* S - byte alignment */ 0x00, 0x20, 0xda, 0x66, 0x4d, 0x91, 0x19, 0x81, 0x36, 0x07, 0xaf, 0xbb, 0x17, 0xf4, 0xc3, 0xcb, 0x55, 0x5e, 0x1b, 0xc0, 0xd0 }; static const uint8_t nist_186_2_ecdsa_testvector_152_ptx[] = { /* Msg */ 0xf0, 0x1c, 0x31, 0x54, 0x3a, 0x4a, 0xc1, 0x99, 0xca, 0xbd, 0x42, 0xc7, 0x67, 0xac, 0x61, 0xec, 0xba, 0xb0, 0xa0, 0x89, 0x0d, 0x78, 0x44, 0xe9, 0x52, 0xbf, 0x6e, 0xb0, 0x67, 0x7b, 0x88, 0xb7, 0x98, 0x57, 0xe2, 0x17, 0x66, 0x64, 0x9d, 0x84, 0x86, 0x0b, 0xc9, 0xdd, 0x2d, 0x47, 0xca, 0x00, 0x8b, 0x11, 0x00, 0xe3, 0x95, 0x1b, 0xa7, 0xe1, 0x08, 0xc0, 0xfb, 0x51, 0xab, 0x3b, 0xa0, 0x5d, 0xd4, 0x18, 0x42, 0x12, 0x2d, 0xe9, 0x79, 0xb3, 0xb8, 0x3a, 0xef, 0x53, 0x11, 0xc7, 0xc4, 0xa2, 0xf4, 0xec, 0x31, 0x08, 0xfe, 0x5c, 0x6c, 0xf0, 0xb8, 0x16, 0xcc, 0x67, 0xd1, 0x95, 0x2e, 0xe5, 0xab, 0x47, 0x97, 0x6a, 0x1a, 0x41, 0x1b, 0xcd, 0x68, 0x31, 0xfd, 0x51, 0x9c, 0x94, 0x17, 0x7a, 0xfb, 0x29, 0x7c, 0x1f, 0xd0, 0xa5, 0x5d, 0xbf, 0x69, 0xa8, 0x29, 0x19, 0x62, 0xf0, 0xf8, 0xf6 }; static const uint8_t nist_186_2_ecdsa_testvector_152_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x02, 0xc9, 0x5e, 0xdf, 0x46, 0xf6, 0xe6, 0x10, 0x38, 0x48, 0xed, 0x80, 0xfa, 0x5b, 0x8c, 0x69, 0xa6, 0x29 }; static const uint8_t nist_186_2_ecdsa_testvector_152_public_x[] = { /* Qx - byte alignment */ 0x02, 0xbb, 0xcf, 0x0a, 0xa9, 0x0a, 0xea, 0xd1, 0x76, 0x8b, 0x54, 0xb4, 0xb4, 0xf6, 0x64, 0x50, 0xd1, 0x8f, 0xd3, 0xc3, 0x96 }; static const uint8_t nist_186_2_ecdsa_testvector_152_public_y[] = { /* Qy - byte alignment */ 0x00, 0xe1, 0x6e, 0x24, 0xf6, 0x01, 0xd7, 0xdd, 0x5d, 0x53, 0x22, 0x0f, 0x86, 0x38, 0x3c, 0x5d, 0x93, 0x4b, 0x57, 0x6b, 0xfb }; /* k = 000000333fd7cc66b6f57a447d0bab348fb697710 */ static const uint8_t nist_186_2_ecdsa_testvector_152_out[] = { /* R - byte alignment */ 0x02, 0xe8, 0x4a, 0x2c, 0xef, 0x9d, 0x8e, 0x24, 0x69, 0xe1, 0x05, 0x93, 0x6d, 0x9f, 0x52, 0x23, 0x9f, 0xdf, 0x7c, 0x68, 0x0c, /* S - byte alignment */ 0x01, 0xb7, 0x8c, 0xa4, 0xe6, 0xe8, 0xe6, 0x34, 0x08, 0x1f, 0x9d, 0x1a, 0x1f, 0x50, 0xaa, 0xdc, 0xe2, 0x64, 0x6a, 0x0c, 0x58 }; static const uint8_t nist_186_2_ecdsa_testvector_153_ptx[] = { /* Msg */ 0xd0, 0xfa, 0xbb, 0x6f, 0x60, 0x95, 0x4c, 0xd1, 0x36, 0x59, 0x6d, 0x6a, 0xbb, 0x1c, 0x6a, 0xe2, 0x42, 0xf8, 0xc3, 0x4b, 0xe9, 0xa1, 0x30, 0x0e, 0xc0, 0xf5, 0xe3, 0x25, 0x2e, 0xd5, 0x0d, 0x8b, 0x90, 0x34, 0xa3, 0xf1, 0x22, 0x6d, 0x62, 0xb3, 0x23, 0xda, 0x11, 0x0a, 0x34, 0xa2, 0x06, 0x83, 0x02, 0xd2, 0xeb, 0xb0, 0x24, 0xb0, 0xc2, 0x1d, 0x47, 0x4c, 0x27, 0x85, 0x88, 0x57, 0xd5, 0x46, 0x21, 0x38, 0x6c, 0x13, 0x48, 0x5d, 0x72, 0xe9, 0x54, 0xcf, 0x97, 0x44, 0x22, 0x0a, 0x3d, 0x92, 0xb7, 0x0b, 0x37, 0xe8, 0x26, 0xaa, 0xd1, 0xf4, 0xb4, 0x2a, 0x11, 0x33, 0x3b, 0x0f, 0x3d, 0x63, 0xcc, 0x2f, 0x9d, 0x3c, 0x98, 0x0c, 0x82, 0x5b, 0x11, 0x61, 0x88, 0x7f, 0x4c, 0xfb, 0x17, 0xf7, 0xaa, 0xca, 0x30, 0x5b, 0xb7, 0x38, 0x66, 0x7b, 0x52, 0xb9, 0x2a, 0x95, 0x0f, 0xa4, 0x4c, 0xcb }; static const uint8_t nist_186_2_ecdsa_testvector_153_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0xf4, 0xc3, 0x94, 0xa9, 0xa5, 0xfa, 0x49, 0xf7, 0x8b, 0x90, 0x21, 0xe2, 0xb4, 0x7a, 0xfd, 0xb3, 0x8b }; static const uint8_t nist_186_2_ecdsa_testvector_153_public_x[] = { /* Qx - byte alignment */ 0x05, 0x78, 0x31, 0x04, 0xa8, 0x2a, 0x81, 0xf2, 0xe9, 0x77, 0xa7, 0xde, 0x8d, 0x8c, 0xdd, 0xed, 0x90, 0x23, 0x81, 0x41, 0xe6 }; static const uint8_t nist_186_2_ecdsa_testvector_153_public_y[] = { /* Qy - byte alignment */ 0x05, 0x4d, 0x41, 0xba, 0x6a, 0xc3, 0xc4, 0xec, 0x5e, 0x49, 0x1c, 0x96, 0x4a, 0x9d, 0xe5, 0xeb, 0x04, 0x2a, 0xb8, 0x6c, 0xca }; /* k = 00000009afe938c8eb8a501a12d6c6cb7759f72e5 */ static const uint8_t nist_186_2_ecdsa_testvector_153_out[] = { /* R - byte alignment */ 0x01, 0xda, 0x8a, 0xa8, 0xd7, 0x1f, 0x1e, 0x4f, 0x41, 0x70, 0x76, 0xd3, 0x5e, 0xa0, 0x9d, 0x28, 0x1f, 0x78, 0xbb, 0xd3, 0x15, /* S - byte alignment */ 0x01, 0x4c, 0x68, 0x88, 0xc2, 0x4e, 0xb3, 0x17, 0x58, 0x32, 0x76, 0xb8, 0x21, 0x71, 0x34, 0x0c, 0x83, 0x72, 0x3c, 0xb0, 0x1e }; static const uint8_t nist_186_2_ecdsa_testvector_154_ptx[] = { /* Msg */ 0xa4, 0xa3, 0x72, 0xcf, 0xcb, 0x4e, 0x50, 0xd6, 0x14, 0x99, 0x41, 0xcf, 0x02, 0x89, 0x83, 0x14, 0x53, 0x73, 0x67, 0xc1, 0x86, 0x6f, 0xf7, 0xc5, 0x9b, 0x0a, 0xdb, 0x39, 0x1a, 0x3b, 0x7e, 0xf1, 0x56, 0x99, 0x6c, 0x51, 0xf3, 0xca, 0xff, 0x62, 0xa6, 0x3f, 0x3a, 0x25, 0x3c, 0x1e, 0xf5, 0x28, 0xde, 0x80, 0x3a, 0x56, 0x93, 0xdd, 0xf0, 0x13, 0x06, 0xc4, 0xb6, 0x89, 0x8a, 0xd0, 0x12, 0x3c, 0x5b, 0xd7, 0xcb, 0xe5, 0x26, 0x64, 0x93, 0x7d, 0xcc, 0x68, 0xe9, 0x98, 0x64, 0x2c, 0x3e, 0xf4, 0x7f, 0x8a, 0x57, 0x52, 0xaf, 0x5d, 0xf2, 0x84, 0x4a, 0x36, 0xac, 0xc8, 0x6b, 0x51, 0x22, 0x54, 0x3a, 0xc7, 0x57, 0x32, 0x6d, 0x04, 0x56, 0x4e, 0x0f, 0x7c, 0x18, 0xce, 0x80, 0x9a, 0xa7, 0xa1, 0xbe, 0xf9, 0x84, 0x5b, 0xe2, 0xd7, 0x46, 0x40, 0xee, 0xc7, 0x85, 0x9e, 0xc5, 0xa5, 0xf6, 0x61 }; static const uint8_t nist_186_2_ecdsa_testvector_154_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x32, 0x29, 0x78, 0x79, 0x14, 0xb2, 0xc6, 0x85, 0x06, 0xdd, 0xc2, 0xef, 0xe5, 0x63, 0x01, 0x69 }; static const uint8_t nist_186_2_ecdsa_testvector_154_public_x[] = { /* Qx - byte alignment */ 0x01, 0x81, 0x7c, 0xb0, 0x47, 0x6e, 0x95, 0x5d, 0xad, 0x76, 0x8f, 0x77, 0xba, 0x52, 0x23, 0x3d, 0xb1, 0xa5, 0x8c, 0x03, 0x5d }; static const uint8_t nist_186_2_ecdsa_testvector_154_public_y[] = { /* Qy - byte alignment */ 0x06, 0x18, 0xa8, 0x5d, 0x44, 0x19, 0x31, 0x11, 0x0d, 0xdd, 0x2e, 0xdc, 0x5b, 0x13, 0x4e, 0xa1, 0x06, 0x34, 0xe1, 0x79, 0x5a }; /* k = 0000002fb9b0762de99093bb55e342fea56ee5330 */ static const uint8_t nist_186_2_ecdsa_testvector_154_out[] = { /* R - byte alignment */ 0x00, 0x86, 0xeb, 0x7a, 0x66, 0x59, 0x76, 0xa5, 0xd5, 0x8a, 0xa3, 0x6c, 0xbb, 0x50, 0xfd, 0x2a, 0xa4, 0x6a, 0x11, 0x8b, 0x2d, /* S - byte alignment */ 0x00, 0xf9, 0x9a, 0x5d, 0xac, 0x0b, 0x35, 0xc5, 0x9f, 0x87, 0x03, 0x5f, 0x20, 0xbb, 0xba, 0x30, 0xba, 0xaa, 0x99, 0xb8, 0x79 }; static const uint8_t nist_186_2_ecdsa_testvector_155_ptx[] = { /* Msg */ 0xd1, 0xb4, 0x16, 0x83, 0x6f, 0x44, 0x6b, 0xb1, 0x9e, 0xcd, 0xd0, 0xc5, 0xdc, 0xe3, 0x55, 0x1d, 0x5e, 0xfd, 0x6a, 0xfb, 0xb0, 0x83, 0xa1, 0x36, 0x9d, 0x28, 0xb5, 0x2f, 0x4e, 0x7a, 0xcc, 0x07, 0xb6, 0xb7, 0xf9, 0x0f, 0x2d, 0xe3, 0x05, 0x80, 0x5a, 0x17, 0x6f, 0x6d, 0x57, 0x1c, 0xb1, 0xf5, 0x10, 0x39, 0xc5, 0xbd, 0xec, 0x48, 0xe8, 0x9e, 0xb0, 0x0f, 0x9e, 0x9a, 0xa0, 0xce, 0xf6, 0x15, 0xe7, 0x15, 0x0f, 0x41, 0x38, 0xd8, 0xdb, 0xdb, 0xb6, 0xc5, 0x23, 0x15, 0x11, 0xd5, 0xcb, 0xd3, 0xf2, 0x22, 0x58, 0x19, 0x9a, 0xf8, 0xaf, 0xc4, 0xc6, 0x2e, 0x1f, 0x79, 0xd5, 0xb7, 0xa2, 0xdc, 0x2c, 0x74, 0x60, 0x02, 0xda, 0x4c, 0x75, 0x28, 0x78, 0x7f, 0xf4, 0xa5, 0x53, 0x37, 0x2c, 0x1d, 0xce, 0x61, 0x2a, 0xf8, 0x01, 0xba, 0x7f, 0x12, 0xa6, 0x2d, 0x43, 0xb4, 0x36, 0x5c, 0x59, 0xc4 }; static const uint8_t nist_186_2_ecdsa_testvector_155_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x90, 0x0c, 0x60, 0x8d, 0x8a, 0x2f, 0x46, 0xf1, 0x0e, 0x02, 0x39, 0x0e, 0x74, 0xec, 0x61, 0x14, 0xaf }; static const uint8_t nist_186_2_ecdsa_testvector_155_public_x[] = { /* Qx - byte alignment */ 0x01, 0xaa, 0x21, 0x7c, 0x61, 0x15, 0xe2, 0x60, 0x0d, 0x97, 0xde, 0xc6, 0x64, 0x55, 0x87, 0x64, 0x8b, 0xf6, 0x6b, 0x69, 0xf2 }; static const uint8_t nist_186_2_ecdsa_testvector_155_public_y[] = { /* Qy - byte alignment */ 0x06, 0xc2, 0xf3, 0x05, 0x37, 0xeb, 0xbb, 0x44, 0x2d, 0xf6, 0x9e, 0xdf, 0x9f, 0xcd, 0xe8, 0xa2, 0x73, 0xc3, 0xe0, 0x26, 0xcc }; /* k = 000000129013ba5076d03a52ed0bbeafadd591a72 */ static const uint8_t nist_186_2_ecdsa_testvector_155_out[] = { /* R - byte alignment */ 0x00, 0x60, 0x2f, 0x25, 0x0e, 0x61, 0x71, 0xac, 0x1a, 0xb8, 0x5f, 0x13, 0xad, 0x6b, 0x0c, 0x75, 0x19, 0xe7, 0xaa, 0xc3, 0xe0, /* S - byte alignment */ 0x01, 0x45, 0x8f, 0xb5, 0xf2, 0x88, 0xa6, 0x52, 0x4d, 0xec, 0x62, 0x06, 0x76, 0xd7, 0xd3, 0xc0, 0x1c, 0x22, 0xfe, 0xa6, 0xcb }; static const uint8_t nist_186_2_ecdsa_testvector_156_ptx[] = { /* Msg */ 0x18, 0xab, 0xee, 0x60, 0xc8, 0x09, 0xc6, 0x41, 0x2d, 0x00, 0xb7, 0x33, 0x4b, 0x0f, 0x8d, 0xe0, 0xee, 0x63, 0x17, 0xf1, 0xee, 0x06, 0x86, 0xdf, 0xb2, 0x53, 0x17, 0x06, 0xf3, 0xad, 0xf2, 0xfc, 0xc2, 0x70, 0x51, 0x20, 0xcd, 0x28, 0xe4, 0x76, 0xde, 0x01, 0x75, 0xb2, 0xa4, 0x7f, 0xc8, 0x92, 0xb6, 0x6f, 0xc5, 0x71, 0xd5, 0x1e, 0xd8, 0x1a, 0x71, 0xc8, 0x99, 0xda, 0x6f, 0x53, 0xa8, 0xd9, 0x2a, 0x3d, 0xdb, 0xa9, 0xb8, 0xd4, 0x9c, 0x20, 0x6e, 0xa5, 0x8c, 0x63, 0xa6, 0x36, 0x6d, 0x44, 0xbf, 0xf8, 0x3e, 0xce, 0x66, 0x77, 0xa7, 0x1d, 0x14, 0xd4, 0x98, 0x74, 0xd8, 0x75, 0x2e, 0x89, 0x57, 0xfb, 0xd6, 0x23, 0x11, 0x74, 0xb4, 0xe7, 0xe6, 0xd2, 0x46, 0x6f, 0xd8, 0x9d, 0x44, 0x9d, 0x12, 0xe4, 0xcb, 0x2f, 0x2a, 0x79, 0xbb, 0x93, 0xa3, 0x5e, 0x5e, 0xfc, 0xb6, 0x7a, 0x4a, 0xb5 }; static const uint8_t nist_186_2_ecdsa_testvector_156_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0x7b, 0x61, 0x94, 0xa9, 0xe4, 0xbe, 0xc4, 0xd1, 0x58, 0x6a, 0x2a, 0x24, 0x5f, 0xae, 0xab, 0x25, 0xac }; static const uint8_t nist_186_2_ecdsa_testvector_156_public_x[] = { /* Qx - byte alignment */ 0x01, 0x05, 0x8a, 0x0a, 0xb4, 0x61, 0xe8, 0x06, 0x53, 0x34, 0xc5, 0x4c, 0x80, 0x72, 0x31, 0x90, 0x93, 0x8c, 0xac, 0x81, 0x57 }; static const uint8_t nist_186_2_ecdsa_testvector_156_public_y[] = { /* Qy - byte alignment */ 0x00, 0x7b, 0x51, 0x1e, 0xad, 0xd2, 0x50, 0x39, 0x5d, 0x96, 0x8a, 0x0a, 0x95, 0x94, 0xb2, 0x80, 0x9d, 0x88, 0x6a, 0x36, 0xc4 }; /* k = 0000001b020387027d94b94f2a8959e1e8634f544 */ static const uint8_t nist_186_2_ecdsa_testvector_156_out[] = { /* R - byte alignment */ 0x02, 0xae, 0x2d, 0x90, 0xd5, 0x73, 0xa8, 0x2e, 0x2c, 0x70, 0x4f, 0x1a, 0x1d, 0x6c, 0x1b, 0xb3, 0x36, 0xb3, 0x08, 0xd0, 0x0e, /* S - byte alignment */ 0x01, 0x7e, 0xfb, 0x4e, 0x03, 0xe3, 0x0a, 0xee, 0x08, 0x91, 0x6a, 0xaa, 0xe8, 0x03, 0xf9, 0x3b, 0x9f, 0xa8, 0x9e, 0x88, 0x97 }; static const uint8_t nist_186_2_ecdsa_testvector_157_ptx[] = { /* Msg */ 0xa9, 0xd6, 0x26, 0xa2, 0x1a, 0x5a, 0x4c, 0x54, 0xd8, 0xe4, 0xa9, 0x91, 0x62, 0xc2, 0xdd, 0xcb, 0x74, 0x90, 0xa6, 0x17, 0xdb, 0xb9, 0x53, 0xd6, 0x87, 0x3a, 0x7c, 0x94, 0xe2, 0xa9, 0xf1, 0x30, 0x60, 0x76, 0xf0, 0x3d, 0x57, 0x72, 0x9b, 0xa9, 0x12, 0x8d, 0xa8, 0x9c, 0x21, 0xe4, 0x5b, 0xa3, 0xf2, 0xfb, 0xb1, 0x0e, 0xa6, 0x46, 0xdf, 0x97, 0x1d, 0xef, 0xfa, 0x44, 0x53, 0xd3, 0xf8, 0x8e, 0xf0, 0xce, 0xd7, 0xc2, 0x1a, 0x38, 0x1c, 0xa8, 0x8e, 0xaf, 0x7f, 0x63, 0xef, 0x17, 0xe5, 0x98, 0x5d, 0xe0, 0x8e, 0xd2, 0x4a, 0x87, 0x90, 0x25, 0x89, 0x60, 0x84, 0x12, 0xa8, 0x92, 0x7f, 0xab, 0x80, 0x63, 0x44, 0xf7, 0x0a, 0xb6, 0xb7, 0x98, 0x75, 0xd1, 0x95, 0xab, 0x75, 0x64, 0x63, 0xf0, 0xdd, 0xc7, 0xa4, 0x2b, 0x70, 0x84, 0x4f, 0xca, 0xf4, 0x15, 0x80, 0xc7, 0x89, 0xef, 0x6e, 0xd0 }; static const uint8_t nist_186_2_ecdsa_testvector_157_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0xe8, 0xd0, 0x55, 0xc3, 0x29, 0xc4, 0xa6, 0x00, 0x5f, 0xd2, 0x8c, 0xb0, 0x9e, 0xe0, 0x28, 0xcf, 0x84 }; static const uint8_t nist_186_2_ecdsa_testvector_157_public_x[] = { /* Qx - byte alignment */ 0x00, 0xbb, 0x20, 0x5e, 0x46, 0xcf, 0x73, 0xd7, 0x6a, 0x06, 0x5f, 0xfd, 0xdb, 0xdc, 0x2c, 0x55, 0x7c, 0xd8, 0xba, 0x63, 0xf4 }; static const uint8_t nist_186_2_ecdsa_testvector_157_public_y[] = { /* Qy - byte alignment */ 0x03, 0x33, 0x92, 0x53, 0xcd, 0xc8, 0x2c, 0xcf, 0x24, 0x58, 0x05, 0x33, 0x89, 0x59, 0x59, 0xbc, 0xeb, 0x46, 0x7a, 0xda, 0xd0 }; /* k = 0000000d70f69010361a39558ae58c460cc9fdf0a */ static const uint8_t nist_186_2_ecdsa_testvector_157_out[] = { /* R - byte alignment */ 0x02, 0xa7, 0x75, 0xfa, 0xfe, 0xb8, 0x16, 0xbe, 0x66, 0x0f, 0xcd, 0x7f, 0x1a, 0x94, 0xa9, 0x45, 0x50, 0x52, 0x55, 0xa8, 0xd9, /* S - byte alignment */ 0x02, 0x68, 0xbd, 0x5e, 0xdb, 0xb6, 0x43, 0x27, 0x46, 0xa2, 0xfd, 0xe7, 0xa5, 0xfb, 0xcc, 0x37, 0xdf, 0x6f, 0x04, 0xbf, 0xd4 }; static const uint8_t nist_186_2_ecdsa_testvector_158_ptx[] = { /* Msg */ 0x32, 0x83, 0xa8, 0x5c, 0x84, 0x30, 0xf2, 0xca, 0x98, 0x1b, 0x00, 0x74, 0x5e, 0xbe, 0x73, 0x47, 0x9c, 0x1c, 0x50, 0x07, 0x9b, 0xa8, 0x54, 0x4b, 0x21, 0x62, 0x88, 0xc9, 0x9e, 0x43, 0x15, 0xd3, 0xaa, 0xdb, 0x58, 0x22, 0xaf, 0x39, 0x39, 0xd3, 0xe3, 0x0b, 0xb9, 0xaf, 0x7a, 0x06, 0xcb, 0xaf, 0x19, 0x88, 0x65, 0xbf, 0x8d, 0x7c, 0xd6, 0xc3, 0xbd, 0x7f, 0x5a, 0xd8, 0xdd, 0x40, 0xec, 0xdc, 0xe5, 0x2d, 0x5b, 0x30, 0x42, 0x4c, 0xa0, 0xbc, 0xcb, 0x66, 0x6f, 0x34, 0xf6, 0x6b, 0x0c, 0x9a, 0x4c, 0x12, 0x60, 0x05, 0x1a, 0xc0, 0x4c, 0xa0, 0x6a, 0xab, 0x3d, 0xf5, 0x31, 0x3f, 0x01, 0x6c, 0xca, 0xc1, 0xd9, 0x0e, 0xa3, 0x32, 0xcf, 0x8f, 0x37, 0x76, 0x49, 0x8c, 0x3c, 0xb5, 0xdf, 0x11, 0x1d, 0x02, 0x6a, 0x5e, 0xaa, 0x3a, 0x5d, 0xeb, 0x0f, 0x2f, 0x59, 0xa9, 0x02, 0x06, 0xfb, 0x8b }; static const uint8_t nist_186_2_ecdsa_testvector_158_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0x03, 0xd9, 0xc3, 0x95, 0x81, 0x45, 0xf2, 0x4c, 0x41, 0x60, 0x07, 0x69, 0x0d, 0x7d, 0xf1, 0x43, 0x88 }; static const uint8_t nist_186_2_ecdsa_testvector_158_public_x[] = { /* Qx - byte alignment */ 0x06, 0xa3, 0xbe, 0x2c, 0x25, 0x99, 0x7e, 0x75, 0x6d, 0xe9, 0xe2, 0x28, 0x6e, 0x7a, 0xc0, 0x33, 0xac, 0xb1, 0xbd, 0x90, 0x78 }; static const uint8_t nist_186_2_ecdsa_testvector_158_public_y[] = { /* Qy - byte alignment */ 0x05, 0xed, 0xfa, 0x21, 0x57, 0x65, 0x58, 0xbb, 0x32, 0xe6, 0xbb, 0x7c, 0x4e, 0x4a, 0xed, 0xdf, 0x57, 0xf2, 0x17, 0xd4, 0x89 }; /* k = 0000002b007ad6ec8aebb6388cfe7a060672e50fb */ static const uint8_t nist_186_2_ecdsa_testvector_158_out[] = { /* R - byte alignment */ 0x03, 0xa6, 0x91, 0xe5, 0xbe, 0x8c, 0xbe, 0x8b, 0x5e, 0xd3, 0xeb, 0x8e, 0x2e, 0xbb, 0x6e, 0xee, 0xf1, 0xa5, 0x64, 0xae, 0xd2, /* S - byte alignment */ 0x02, 0xd8, 0x64, 0xaa, 0x86, 0x20, 0x16, 0x34, 0x08, 0xe5, 0xff, 0x81, 0x52, 0x5e, 0x16, 0xf2, 0x77, 0xec, 0x4e, 0x4c, 0x40 }; static const uint8_t nist_186_2_ecdsa_testvector_159_ptx[] = { /* Msg */ 0xc2, 0xdc, 0x36, 0xa2, 0xa3, 0xc2, 0x2f, 0xfd, 0xfe, 0xa9, 0xce, 0x61, 0x54, 0x62, 0xb7, 0xaf, 0x93, 0x6f, 0x70, 0x25, 0x8d, 0xad, 0x73, 0x26, 0xa9, 0x36, 0x81, 0x3e, 0xd9, 0x85, 0x3a, 0x61, 0xcc, 0xdb, 0xeb, 0x73, 0x64, 0xe2, 0xa7, 0x0e, 0x6a, 0x90, 0x99, 0x7f, 0x81, 0x4f, 0x98, 0x11, 0x58, 0x5b, 0xfc, 0x8f, 0x24, 0x6b, 0xb0, 0x04, 0x4e, 0x93, 0x89, 0xc5, 0x68, 0x69, 0xd6, 0xb1, 0x66, 0x67, 0x39, 0xb8, 0x0b, 0x90, 0xb5, 0x9a, 0xa1, 0x56, 0x07, 0xf1, 0xed, 0xbc, 0x3a, 0x72, 0x62, 0xb8, 0x76, 0x70, 0x95, 0xdb, 0x19, 0xa1, 0xf1, 0x33, 0x08, 0x25, 0xac, 0x71, 0x48, 0xc4, 0xf9, 0x47, 0xc8, 0x78, 0x80, 0x14, 0x81, 0x2b, 0x0b, 0xc3, 0xc1, 0xc1, 0x82, 0xf0, 0xc4, 0x59, 0x19, 0x4d, 0x85, 0xd0, 0xc8, 0x45, 0xd3, 0x87, 0xfc, 0xdf, 0xa7, 0x67, 0x8c, 0xe4, 0xb5, 0x22 }; static const uint8_t nist_186_2_ecdsa_testvector_159_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0x2f, 0xee, 0x2b, 0xb5, 0xf7, 0xb2, 0xcf, 0x24, 0x2a, 0x14, 0x9c, 0xdc, 0x2a, 0xf3, 0x28, 0x8c, 0x98 }; static const uint8_t nist_186_2_ecdsa_testvector_159_public_x[] = { /* Qx - byte alignment */ 0x02, 0x74, 0xb4, 0x32, 0x30, 0xb8, 0xb7, 0x4c, 0x55, 0x4b, 0xf4, 0xf4, 0x0a, 0x94, 0x30, 0xb5, 0xc9, 0xdf, 0x16, 0x24, 0xe8 }; static const uint8_t nist_186_2_ecdsa_testvector_159_public_y[] = { /* Qy - byte alignment */ 0x02, 0x35, 0xc4, 0xf1, 0xfa, 0xe7, 0x72, 0xcc, 0xca, 0x08, 0xa4, 0xe7, 0xb7, 0x00, 0xc1, 0xbe, 0x54, 0x80, 0xfa, 0x84, 0x38 }; /* k = 0000000d91ac5eb54506ebfe2a8ab846e2b30c3a2 */ static const uint8_t nist_186_2_ecdsa_testvector_159_out[] = { /* R - byte alignment */ 0x01, 0x74, 0xf2, 0xba, 0xf3, 0xf7, 0xb3, 0x1a, 0xdc, 0x85, 0xdb, 0x39, 0x6c, 0xf2, 0xcc, 0x8b, 0x34, 0x50, 0xb8, 0x0c, 0x40, /* S - byte alignment */ 0x03, 0xec, 0x94, 0xcb, 0x19, 0xf4, 0xf2, 0xb0, 0x29, 0x5a, 0x14, 0x27, 0x3d, 0xea, 0xe9, 0xd6, 0xa1, 0x5a, 0xcc, 0xa8, 0x0f }; static const uint8_t nist_186_2_ecdsa_testvector_160_ptx[] = { /* Msg */ 0xf4, 0x84, 0x1c, 0xb2, 0x46, 0x37, 0x4d, 0x7b, 0x0a, 0xc6, 0x4a, 0xc1, 0xc4, 0x3a, 0x4d, 0xe4, 0x1d, 0x23, 0xef, 0x23, 0x2c, 0xd1, 0x92, 0x6d, 0xf5, 0xc7, 0x00, 0x73, 0x2f, 0x6d, 0x50, 0x02, 0x4b, 0x05, 0x0a, 0x90, 0xb1, 0xe0, 0x8b, 0x15, 0x4d, 0xd2, 0xaa, 0x1c, 0x4a, 0xe3, 0x9b, 0x19, 0x1d, 0x47, 0x14, 0xfd, 0xc6, 0x91, 0xaf, 0x08, 0x52, 0x23, 0x90, 0xde, 0xa5, 0xe9, 0x47, 0xde, 0x76, 0x47, 0xf7, 0xaf, 0x9b, 0x4f, 0xb8, 0x1b, 0x87, 0x38, 0x3b, 0x21, 0x11, 0x0b, 0xad, 0x45, 0x77, 0xa0, 0xdd, 0x2b, 0xa2, 0xc9, 0xa0, 0x64, 0xab, 0xcd, 0x75, 0x88, 0x9f, 0x18, 0x65, 0x85, 0x7f, 0x30, 0x2d, 0x36, 0x8b, 0xeb, 0x9f, 0x38, 0xc0, 0xe0, 0x46, 0xf9, 0xa0, 0x1b, 0x49, 0x11, 0x31, 0x15, 0x91, 0xd6, 0x48, 0xe3, 0x2e, 0x2a, 0x07, 0xad, 0xf7, 0x98, 0xa5, 0x62, 0x71, 0xa0 }; static const uint8_t nist_186_2_ecdsa_testvector_160_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0xf8, 0x99, 0x5d, 0xc1, 0xeb, 0x5b, 0x51, 0x69, 0xb2, 0x3b, 0x3f, 0x79, 0x1b, 0xe9, 0x10, 0x30, 0xe2 }; static const uint8_t nist_186_2_ecdsa_testvector_160_public_x[] = { /* Qx - byte alignment */ 0x02, 0xfd, 0xe9, 0xa6, 0x3f, 0x79, 0xc8, 0xc8, 0x5b, 0x95, 0x9e, 0x89, 0x66, 0xd2, 0xa5, 0x25, 0x21, 0xa6, 0x39, 0xc2, 0xd0 }; static const uint8_t nist_186_2_ecdsa_testvector_160_public_y[] = { /* Qy - byte alignment */ 0x01, 0xc1, 0x84, 0x87, 0xed, 0xe8, 0x81, 0x54, 0x98, 0xc0, 0xfa, 0x1a, 0x75, 0x6a, 0x95, 0x0f, 0xef, 0x03, 0x3d, 0x52, 0x3b }; /* k = 00000013d1e8e7e08d3e5f315a32d2061bedf8065 */ static const uint8_t nist_186_2_ecdsa_testvector_160_out[] = { /* R - byte alignment */ 0x02, 0x71, 0x5e, 0x19, 0x54, 0x44, 0x80, 0x01, 0x06, 0xb9, 0x56, 0xcb, 0xcb, 0x8f, 0x25, 0x8a, 0xd8, 0x35, 0x21, 0x4b, 0x22, /* S - byte alignment */ 0x01, 0x64, 0xa1, 0xd8, 0x2d, 0x2a, 0xc3, 0xcd, 0x5b, 0x76, 0x1e, 0x58, 0x8d, 0xd4, 0xc5, 0xc6, 0x83, 0x8b, 0xad, 0xfd, 0x43 }; static const uint8_t nist_186_2_ecdsa_testvector_161_ptx[] = { /* Msg */ 0x56, 0x52, 0x6f, 0x99, 0x8e, 0x82, 0x99, 0x2f, 0xd1, 0xf0, 0xf3, 0x79, 0x26, 0x93, 0x65, 0x50, 0x56, 0x1f, 0xa3, 0x2a, 0x51, 0xda, 0xaf, 0x8d, 0xce, 0xac, 0xa0, 0xca, 0x32, 0x76, 0xa1, 0xe7, 0xb3, 0xa5, 0x3c, 0xdd, 0xbd, 0x07, 0xd9, 0x04, 0x94, 0xdd, 0x81, 0xcb, 0x3c, 0x31, 0xe8, 0xac, 0x96, 0x6a, 0xab, 0x5f, 0xcb, 0x1d, 0xd6, 0x4e, 0xed, 0x26, 0xa9, 0x4a, 0xdc, 0xf8, 0x9c, 0x7c, 0x67, 0x31, 0xa0, 0x9e, 0xb4, 0x72, 0xa8, 0x6b, 0xe2, 0x6d, 0x68, 0x53, 0xec, 0x3f, 0x5c, 0x74, 0xd1, 0x01, 0x0d, 0xc6, 0xf2, 0x99, 0x90, 0x95, 0xbb, 0xd6, 0x4f, 0x35, 0x85, 0xbd, 0x0c, 0xf1, 0xbb, 0x1d, 0x22, 0x44, 0x3c, 0x6a, 0x0e, 0x4c, 0x01, 0xc7, 0x2f, 0x7b, 0x00, 0x65, 0xca, 0x90, 0x50, 0x0c, 0x51, 0xc5, 0x8d, 0xf7, 0xe5, 0x4a, 0x7e, 0xe5, 0x19, 0xf3, 0xf5, 0x6d, 0xf9, 0x2e }; static const uint8_t nist_186_2_ecdsa_testvector_161_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x09, 0xed, 0x47, 0x3f, 0xc4, 0xd9, 0x06, 0x96, 0x46, 0xe8, 0xda, 0xe1, 0x43, 0x4f, 0x2a, 0x05, 0x66 }; static const uint8_t nist_186_2_ecdsa_testvector_161_public_x[] = { /* Qx - byte alignment */ 0x04, 0xd0, 0xfa, 0x3a, 0xc7, 0x35, 0xcf, 0x1c, 0xc1, 0x56, 0xf0, 0x47, 0x70, 0xff, 0x3f, 0x71, 0x48, 0x9e, 0xcb, 0x44, 0x4f }; static const uint8_t nist_186_2_ecdsa_testvector_161_public_y[] = { /* Qy - byte alignment */ 0x04, 0x54, 0x3c, 0xb6, 0x4c, 0xfa, 0xe5, 0xed, 0x2c, 0xd8, 0x1e, 0x54, 0x70, 0xe5, 0x89, 0x88, 0x1e, 0x32, 0xaf, 0x76, 0x16 }; /* k = 000000383482f2cd0b0635e07dc0179f8d4a478ca */ static const uint8_t nist_186_2_ecdsa_testvector_161_out[] = { /* R - byte alignment */ 0x01, 0xa0, 0x0a, 0xa7, 0xce, 0xc4, 0xf1, 0xbf, 0x5d, 0xc0, 0x86, 0x5c, 0xf2, 0xf6, 0x6b, 0x2a, 0x23, 0x6f, 0x92, 0xf0, 0xf6, /* S - byte alignment */ 0x03, 0x65, 0x7c, 0xdd, 0x4f, 0x17, 0xfe, 0x59, 0x2f, 0xa0, 0x17, 0x3c, 0x57, 0xc8, 0x55, 0x4e, 0xf6, 0xb1, 0xf6, 0x3b, 0x90 }; static const uint8_t nist_186_2_ecdsa_testvector_162_ptx[] = { /* Msg */ 0x0c, 0x12, 0x8f, 0x1c, 0x5f, 0x04, 0x38, 0xe8, 0xe2, 0x05, 0xda, 0x4e, 0x08, 0xc7, 0x33, 0xa6, 0x19, 0x88, 0x5a, 0x38, 0x8f, 0xe4, 0x47, 0xab, 0xc1, 0xed, 0x96, 0xc1, 0xbe, 0x7d, 0x88, 0x41, 0x7c, 0xcb, 0x4b, 0x34, 0x32, 0x3d, 0x7b, 0x53, 0x02, 0x7d, 0xe8, 0xc1, 0xdb, 0xcf, 0x9a, 0xf6, 0x9e, 0xa2, 0x12, 0xfb, 0x7f, 0x64, 0xd3, 0xdd, 0xaf, 0x9b, 0x21, 0x5c, 0x38, 0x32, 0x09, 0xe3, 0x28, 0x10, 0xa1, 0xbd, 0xf1, 0xf0, 0x91, 0x85, 0x10, 0x6c, 0xd2, 0xde, 0xed, 0x5a, 0xb6, 0x65, 0x02, 0x5c, 0x29, 0xe4, 0x40, 0xb3, 0x36, 0xc9, 0xae, 0x54, 0xcd, 0xd6, 0x54, 0x3e, 0xc3, 0x19, 0x57, 0x0a, 0x1a, 0x1f, 0x65, 0xc4, 0x83, 0x65, 0x53, 0xf9, 0x21, 0x0f, 0x05, 0x11, 0x90, 0xdc, 0x8f, 0xdf, 0x26, 0x5a, 0x99, 0x77, 0x78, 0x56, 0x08, 0x40, 0x20, 0x97, 0xdb, 0x4a, 0xbe, 0xcc }; static const uint8_t nist_186_2_ecdsa_testvector_162_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0x7a, 0xeb, 0x88, 0x81, 0xcc, 0x1a, 0x37, 0x86, 0x8f, 0xee, 0xbf, 0x0a, 0xfb, 0x16, 0x63, 0x47, 0xe3 }; static const uint8_t nist_186_2_ecdsa_testvector_162_public_x[] = { /* Qx - byte alignment */ 0x05, 0x3c, 0x87, 0x66, 0x95, 0x7f, 0xa8, 0x79, 0x0a, 0xde, 0x8a, 0xbb, 0xe0, 0xe7, 0x43, 0xfe, 0x97, 0x07, 0x5e, 0xe0, 0xd4 }; static const uint8_t nist_186_2_ecdsa_testvector_162_public_y[] = { /* Qy - byte alignment */ 0x01, 0x54, 0x17, 0x7a, 0x8f, 0xb1, 0x82, 0xd8, 0xb1, 0xdf, 0x53, 0x12, 0xc4, 0x90, 0x21, 0xdc, 0x8d, 0x23, 0x1c, 0xb7, 0x87 }; /* k = 00000023c13933cd6db18498861ce7341b3769879 */ static const uint8_t nist_186_2_ecdsa_testvector_162_out[] = { /* R - byte alignment */ 0x00, 0x50, 0xb4, 0x70, 0x1f, 0xbf, 0xfa, 0x98, 0xad, 0x36, 0x3c, 0x2b, 0x2a, 0xaf, 0xa3, 0xdb, 0xeb, 0x71, 0x82, 0xde, 0x3f, /* S - byte alignment */ 0x03, 0x10, 0x65, 0xd4, 0xb4, 0x20, 0xe1, 0xac, 0xe0, 0x9d, 0x5b, 0xd9, 0x57, 0x02, 0xbf, 0x8b, 0x76, 0x4e, 0xd3, 0x04, 0x48 }; static const uint8_t nist_186_2_ecdsa_testvector_163_ptx[] = { /* Msg */ 0xf1, 0x76, 0xec, 0x2d, 0x74, 0xb0, 0x34, 0xa9, 0x38, 0xf2, 0x02, 0xcd, 0x68, 0xd0, 0x62, 0xfc, 0x28, 0xe8, 0x4d, 0xe3, 0xc1, 0x75, 0xe2, 0xae, 0xfe, 0x21, 0xf3, 0x7c, 0xd6, 0x1b, 0xc3, 0x10, 0x4a, 0x6a, 0x0e, 0xc9, 0x91, 0x81, 0x4a, 0xd4, 0x73, 0x13, 0x2d, 0xa0, 0xf3, 0x28, 0x6f, 0x92, 0x30, 0x71, 0xd1, 0xfb, 0x8d, 0xd8, 0x5e, 0x47, 0x10, 0x5c, 0xf1, 0x77, 0x08, 0x1c, 0xf7, 0xd1, 0xf3, 0xb1, 0x76, 0xd5, 0x9e, 0xc1, 0x4f, 0x74, 0x8e, 0xd1, 0xc0, 0x7d, 0x9f, 0x5b, 0x2c, 0x58, 0xeb, 0x21, 0x1f, 0xf6, 0xed, 0xc0, 0x8d, 0x08, 0xe7, 0x88, 0x5a, 0x6f, 0x80, 0x8b, 0x1f, 0xf4, 0xb2, 0xf4, 0x2c, 0x3a, 0xe3, 0x9b, 0xc9, 0xf0, 0x52, 0xd6, 0xc2, 0x4b, 0xb5, 0x91, 0x22, 0xb4, 0x21, 0xa1, 0x3e, 0xbe, 0x29, 0x55, 0xf5, 0x5a, 0x4a, 0x4e, 0x37, 0x4e, 0x87, 0x91, 0xc4, 0xe3 }; static const uint8_t nist_186_2_ecdsa_testvector_163_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x01, 0x29, 0x01, 0x3b, 0xa5, 0x07, 0x6d, 0x03, 0xa5, 0x2e, 0xd0, 0xbb, 0xea, 0xfa, 0xdd, 0x59, 0x1a, 0x72 }; static const uint8_t nist_186_2_ecdsa_testvector_163_public_x[] = { /* Qx - byte alignment */ 0x00, 0x60, 0x2f, 0x25, 0x0e, 0x61, 0x71, 0xac, 0x1a, 0xb8, 0x5f, 0x13, 0xad, 0x6b, 0x0c, 0x75, 0x19, 0xe7, 0xaa, 0xc3, 0xe0 }; static const uint8_t nist_186_2_ecdsa_testvector_163_public_y[] = { /* Qy - byte alignment */ 0x00, 0x82, 0xbb, 0x2d, 0xda, 0xaf, 0x24, 0xca, 0xe0, 0xe6, 0xb0, 0x6b, 0x8c, 0x6a, 0xdf, 0xd5, 0xcc, 0xb4, 0x52, 0xa9, 0x93 }; /* k = 00000022ff25c072ee5833817bc0c9a30d3a08374 */ static const uint8_t nist_186_2_ecdsa_testvector_163_out[] = { /* R - byte alignment */ 0x03, 0x1e, 0x58, 0x80, 0xe9, 0xd7, 0x3d, 0xbb, 0xa8, 0x0e, 0xc7, 0x68, 0x7c, 0x56, 0x2c, 0xf1, 0x0f, 0x7a, 0x21, 0xf3, 0x57, /* S - byte alignment */ 0x00, 0xb9, 0x96, 0x5d, 0x7d, 0xb0, 0xf4, 0x92, 0x9e, 0x5e, 0xe7, 0xf3, 0xbd, 0x8d, 0xa8, 0xc3, 0xfe, 0xb9, 0x4e, 0x77, 0x3c }; static const uint8_t nist_186_2_ecdsa_testvector_164_ptx[] = { /* Msg */ 0x8a, 0x9e, 0x55, 0x09, 0x57, 0x5c, 0xea, 0x1b, 0xea, 0x88, 0xff, 0x55, 0x18, 0xac, 0xc6, 0xaa, 0x54, 0x84, 0xd8, 0xe6, 0x8c, 0x57, 0x31, 0xa0, 0x4e, 0x87, 0x7c, 0x69, 0x2f, 0x68, 0x92, 0x4a, 0x6d, 0x4e, 0x3d, 0x6e, 0xd3, 0xea, 0x41, 0x1b, 0xdd, 0xd6, 0x9d, 0xe7, 0x1d, 0x6e, 0x0e, 0x28, 0xdd, 0xe2, 0xd5, 0xac, 0x06, 0x89, 0xba, 0xaa, 0x41, 0x78, 0x51, 0xf9, 0x5b, 0x54, 0x7c, 0x80, 0xee, 0x64, 0x31, 0xee, 0x3e, 0xea, 0x7d, 0xab, 0x61, 0xb4, 0xc9, 0x0e, 0xa3, 0xee, 0x5d, 0xd0, 0x28, 0x3a, 0x22, 0xc0, 0xd3, 0x03, 0xac, 0xb9, 0x67, 0x0d, 0x77, 0xd1, 0xec, 0x51, 0x71, 0xd4, 0x55, 0x09, 0xb9, 0xf1, 0x5f, 0x07, 0xa7, 0xb2, 0xbc, 0x4a, 0x0c, 0x32, 0x71, 0xd3, 0xbb, 0x8a, 0x7d, 0xb5, 0x48, 0x8c, 0xbb, 0x6c, 0x0f, 0xb4, 0x09, 0x6f, 0x78, 0x5b, 0xaa, 0x09, 0x7a, 0x2e }; static const uint8_t nist_186_2_ecdsa_testvector_164_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x03, 0x64, 0xad, 0xbc, 0x7d, 0x7d, 0x8c, 0x34, 0x7e, 0x80, 0x41, 0xa0, 0x90, 0xd7, 0xbe, 0x32, 0x0d, 0x43 }; static const uint8_t nist_186_2_ecdsa_testvector_164_public_x[] = { /* Qx - byte alignment */ 0x06, 0x4e, 0x52, 0xdf, 0x28, 0xfa, 0xd7, 0x75, 0xcc, 0x62, 0xd5, 0x75, 0x39, 0x38, 0x4b, 0x8a, 0x0c, 0xf2, 0x25, 0x2c, 0x0b }; static const uint8_t nist_186_2_ecdsa_testvector_164_public_y[] = { /* Qy - byte alignment */ 0x04, 0xb7, 0xd2, 0x72, 0xad, 0x99, 0xb4, 0x1b, 0x88, 0x50, 0x68, 0x26, 0x92, 0xd3, 0xe1, 0xbc, 0x35, 0x0e, 0x47, 0xb8, 0xc5 }; /* k = 00000008bd7183a6955813153d452d4fe92571e5f */ static const uint8_t nist_186_2_ecdsa_testvector_164_out[] = { /* R - byte alignment */ 0x03, 0xd6, 0xf4, 0x9e, 0xc3, 0x50, 0xaf, 0x2d, 0x0d, 0x5d, 0x4e, 0xbf, 0x37, 0x60, 0xb3, 0xd8, 0x5d, 0xcd, 0x39, 0xef, 0xc0, /* S - byte alignment */ 0x01, 0xe6, 0x84, 0x91, 0xf6, 0x42, 0xab, 0x6f, 0xf6, 0xfc, 0x60, 0xf0, 0x8d, 0xcc, 0xb0, 0x71, 0x51, 0x5d, 0x09, 0x78, 0x21 }; static const uint8_t nist_186_2_ecdsa_testvector_165_ptx[] = { /* Msg */ 0xa0, 0x78, 0x53, 0xcc, 0xb3, 0xb7, 0x70, 0x25, 0xd9, 0xf3, 0xfa, 0x14, 0xa8, 0xf5, 0xdf, 0xdd, 0x20, 0x54, 0xaf, 0xe3, 0xe9, 0xa4, 0xff, 0x79, 0xdc, 0xeb, 0x0b, 0xf6, 0xc5, 0x54, 0x9f, 0x07, 0x67, 0x28, 0x37, 0x4a, 0xc1, 0xf9, 0x65, 0x18, 0x90, 0x21, 0x73, 0xa2, 0x15, 0x6b, 0x49, 0x3f, 0x18, 0x0f, 0x92, 0x04, 0x2d, 0xe4, 0x1b, 0x96, 0x36, 0xd1, 0x7b, 0x3c, 0x29, 0x84, 0xf9, 0x38, 0x14, 0x67, 0xaa, 0x58, 0x5e, 0xd0, 0xda, 0xc8, 0x4f, 0x79, 0xad, 0x2a, 0xd2, 0x2f, 0x06, 0xe8, 0x7a, 0xce, 0xa8, 0xc9, 0xc4, 0x6c, 0x9c, 0xc3, 0x9c, 0xd5, 0xd2, 0x11, 0x22, 0x38, 0x0b, 0x85, 0xad, 0x1f, 0xf5, 0x1e, 0x10, 0xa4, 0x98, 0xdd, 0x1d, 0xe2, 0xf2, 0xd5, 0x68, 0xab, 0xde, 0x82, 0x4e, 0x79, 0x3b, 0x5b, 0x35, 0xa6, 0x49, 0xaa, 0x14, 0xdf, 0x56, 0x9c, 0x37, 0xd6, 0x9b, 0x94 }; static const uint8_t nist_186_2_ecdsa_testvector_165_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x00, 0x70, 0xd5, 0x9b, 0xc0, 0x59, 0xdf, 0x30, 0xc6, 0x0e, 0xc0, 0x38, 0x55, 0x38, 0x05, 0x24, 0xdc, 0xb5 }; static const uint8_t nist_186_2_ecdsa_testvector_165_public_x[] = { /* Qx - byte alignment */ 0x06, 0x21, 0x11, 0x9b, 0xcf, 0xbb, 0xcd, 0xff, 0xf8, 0x8a, 0x82, 0x6c, 0xc8, 0xbb, 0x54, 0xbb, 0xa6, 0xb4, 0xa3, 0x9b, 0x6e }; static const uint8_t nist_186_2_ecdsa_testvector_165_public_y[] = { /* Qy - byte alignment */ 0x04, 0x3e, 0xbc, 0x3a, 0xd3, 0x8b, 0x32, 0x3a, 0x36, 0x8a, 0xe0, 0xbb, 0xb2, 0x9f, 0xbc, 0xc4, 0x84, 0xbf, 0x76, 0x71, 0xeb }; /* k = 0000001ecd85d31dfba4ce8e363a548e259f207c1 */ static const uint8_t nist_186_2_ecdsa_testvector_165_out[] = { /* R - byte alignment */ 0x03, 0xd8, 0x53, 0x45, 0x25, 0xb3, 0xce, 0xf4, 0x0c, 0xc4, 0xa5, 0x51, 0xfe, 0x77, 0x81, 0x50, 0x83, 0xb0, 0x8b, 0x6f, 0x1f, /* S - byte alignment */ 0x02, 0x15, 0x62, 0x2f, 0xc7, 0xa0, 0x59, 0x7f, 0x3e, 0xda, 0x19, 0xd3, 0xc6, 0xe6, 0x7b, 0x76, 0xfb, 0x36, 0x22, 0xba, 0x00 }; /* [B-233] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_166_ptx[] = { /* Msg */ 0xc2, 0xd1, 0xaf, 0xa4, 0x0b, 0x33, 0x18, 0x01, 0x6d, 0xe5, 0xb6, 0x42, 0x91, 0xfe, 0x1b, 0x45, 0x32, 0x5e, 0x73, 0x15, 0x7f, 0x87, 0x0a, 0x5d, 0xc0, 0xaf, 0x0e, 0x23, 0x3d, 0x13, 0x95, 0xb2, 0x5b, 0x8d, 0xe1, 0xd8, 0x09, 0x69, 0xe3, 0x52, 0x5a, 0x75, 0xff, 0x85, 0x73, 0x57, 0x0f, 0x6f, 0xa8, 0x23, 0xaa, 0xdc, 0xe2, 0x2d, 0xa6, 0xdd, 0x44, 0x1c, 0xdb, 0x76, 0x0e, 0x40, 0x2a, 0x97, 0xc1, 0x26, 0xbf, 0x4d, 0x84, 0x69, 0x92, 0x3a, 0xc6, 0xca, 0x34, 0x43, 0x25, 0x83, 0xc8, 0x88, 0x8e, 0xd9, 0x4f, 0x99, 0xa6, 0xf1, 0x2a, 0xe7, 0x69, 0xe4, 0xd9, 0x78, 0x11, 0x15, 0x09, 0xdf, 0x3a, 0xc3, 0xce, 0x6c, 0x43, 0xda, 0x2d, 0xa0, 0xf7, 0x0f, 0xdd, 0xe3, 0x6d, 0x2b, 0x4e, 0x79, 0x2c, 0xa7, 0xeb, 0xb3, 0x93, 0x7a, 0x9d, 0x62, 0x79, 0x2f, 0x90, 0x91, 0x10, 0x3a, 0x39, 0x74 }; static const uint8_t nist_186_2_ecdsa_testvector_166_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xd4, 0x67, 0xbb, 0x20, 0x60, 0xec, 0xb1, 0x05, 0x29, 0x68, 0x49, 0x47, 0xe1, 0xe9, 0x5a, 0x74, 0x03, 0x48, 0xab, 0x21, 0xc3, 0x8a, 0xfa, 0xf6, 0xe4, 0x64, 0xa2 }; static const uint8_t nist_186_2_ecdsa_testvector_166_public_x[] = { /* Qx - byte alignment */ 0x00, 0xb8, 0x93, 0x2e, 0xe9, 0x9a, 0xdf, 0x72, 0xb6, 0x20, 0xe1, 0xa6, 0x77, 0x9c, 0x9d, 0xc5, 0xf9, 0xad, 0x38, 0xbd, 0x3f, 0x64, 0x75, 0xca, 0xe8, 0x4e, 0x20, 0x9c, 0x70, 0x4e }; static const uint8_t nist_186_2_ecdsa_testvector_166_public_y[] = { /* Qy - byte alignment */ 0x01, 0x04, 0x05, 0x1c, 0xed, 0x12, 0x59, 0xd5, 0x08, 0x5f, 0x2e, 0x1c, 0x8f, 0x5c, 0xa5, 0x39, 0x4e, 0x09, 0x4c, 0x33, 0xe7, 0x57, 0xa6, 0x3c, 0xe4, 0x3d, 0x1c, 0x06, 0xd3, 0xec }; /* k = 000005f77b867f215519eafb9807e239068db9cb19253ed669163cb7cec */ static const uint8_t nist_186_2_ecdsa_testvector_166_out[] = { /* R - byte alignment */ 0x00, 0x5f, 0x25, 0xaf, 0x72, 0xc9, 0x8e, 0x8e, 0x9b, 0x4a, 0x2c, 0x73, 0x0f, 0xec, 0x92, 0x2c, 0x29, 0x4f, 0x4d, 0xaa, 0x78, 0x19, 0xa4, 0xef, 0xe3, 0x5a, 0x80, 0x56, 0xea, 0x84, /* S - byte alignment */ 0x00, 0x0d, 0xbd, 0xb0, 0x01, 0x3d, 0x94, 0x8a, 0xe6, 0x84, 0xb5, 0x86, 0x96, 0xa2, 0x60, 0xa2, 0x25, 0xba, 0x09, 0x1c, 0xbd, 0xa3, 0x70, 0x49, 0x86, 0x94, 0x41, 0x13, 0x70, 0x0d }; static const uint8_t nist_186_2_ecdsa_testvector_167_ptx[] = { /* Msg */ 0xf3, 0x19, 0xf9, 0x53, 0x85, 0xa1, 0xe9, 0x2a, 0x49, 0xb9, 0xae, 0xf3, 0xe2, 0x4e, 0x11, 0xa6, 0x7c, 0xa9, 0xc7, 0x6e, 0xa4, 0xf1, 0xeb, 0x4f, 0x5d, 0xf1, 0xab, 0x0c, 0x70, 0x1c, 0x41, 0x48, 0x03, 0xce, 0x25, 0xeb, 0x6d, 0xd5, 0x80, 0xc7, 0x49, 0x30, 0xe4, 0x7c, 0xc9, 0x16, 0x3b, 0x98, 0x4e, 0x3b, 0xfe, 0x03, 0x35, 0x4e, 0xa8, 0x9b, 0xf3, 0xc6, 0x69, 0x1b, 0x64, 0xde, 0x1e, 0x41, 0x60, 0xde, 0x81, 0x30, 0x90, 0x9d, 0x9d, 0x13, 0x7f, 0x44, 0x86, 0x03, 0xf4, 0x54, 0x46, 0x2b, 0x80, 0xeb, 0x1a, 0x29, 0x53, 0x43, 0xdf, 0xb8, 0x53, 0x7b, 0xc7, 0x8c, 0x70, 0x9a, 0x50, 0x7e, 0x31, 0xd1, 0x77, 0xe9, 0x93, 0x00, 0x28, 0x54, 0x14, 0x7c, 0xfa, 0x51, 0x0b, 0x10, 0x19, 0xa4, 0x3a, 0x41, 0x83, 0xa8, 0xa6, 0xd6, 0x78, 0xef, 0xa7, 0x98, 0x2b, 0x29, 0x3b, 0x57, 0xbe, 0x47 }; static const uint8_t nist_186_2_ecdsa_testvector_167_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xdb, 0xd1, 0xb2, 0x54, 0x78, 0xb8, 0x2c, 0x19, 0x44, 0xc4, 0x1f, 0x89, 0x05, 0xfe, 0x27, 0x1c, 0x2c, 0x01, 0xd6, 0xe6, 0xe9, 0xfa, 0xfd, 0x42, 0xd8, 0xbc, 0xdf }; static const uint8_t nist_186_2_ecdsa_testvector_167_public_x[] = { /* Qx - byte alignment */ 0x01, 0x08, 0x90, 0x15, 0xf7, 0x85, 0xed, 0x88, 0x0a, 0x20, 0x0c, 0x2c, 0x8e, 0x09, 0xa8, 0xd7, 0x0f, 0x5e, 0x79, 0x17, 0x4c, 0x60, 0x9b, 0x25, 0x2a, 0xb4, 0xf5, 0x4d, 0xcc, 0x43 }; static const uint8_t nist_186_2_ecdsa_testvector_167_public_y[] = { /* Qy - byte alignment */ 0x01, 0x5e, 0x5e, 0x52, 0x97, 0xd2, 0x96, 0x36, 0xd6, 0xae, 0xb2, 0xca, 0x63, 0x54, 0xf5, 0x18, 0x39, 0x36, 0x52, 0xb7, 0xeb, 0x2c, 0x7a, 0xa5, 0x5f, 0x9e, 0x08, 0xfb, 0xe7, 0x10 }; /* k = 000008a3e301af481418118308ee6a5e93fa25b8cd87e778611ce96e726 */ static const uint8_t nist_186_2_ecdsa_testvector_167_out[] = { /* R - byte alignment */ 0x00, 0xf5, 0x9a, 0x4f, 0xf3, 0xb7, 0xb4, 0x2b, 0x64, 0x93, 0x1d, 0xcd, 0xe2, 0x47, 0x88, 0x3c, 0x05, 0x79, 0x15, 0xcc, 0x67, 0x84, 0xc7, 0xf9, 0xc8, 0x34, 0x9e, 0xf7, 0x53, 0x53, /* S - byte alignment */ 0x00, 0x3f, 0x3c, 0x4a, 0x48, 0xe4, 0x06, 0x80, 0x74, 0x4c, 0x89, 0x10, 0x43, 0xc6, 0xff, 0x8f, 0xd0, 0x4a, 0x6f, 0x4b, 0xd3, 0x54, 0x80, 0xb1, 0x4e, 0xdc, 0x6c, 0xe7, 0x7b, 0x61 }; static const uint8_t nist_186_2_ecdsa_testvector_168_ptx[] = { /* Msg */ 0x7e, 0xc7, 0x30, 0x55, 0x38, 0x4b, 0xd2, 0x28, 0xd2, 0x80, 0x60, 0x35, 0xc8, 0x8b, 0xbe, 0xdf, 0xc0, 0x02, 0x7a, 0x8c, 0x58, 0xa0, 0xaf, 0xfb, 0x21, 0x3e, 0x29, 0xd8, 0xeb, 0xfe, 0xc9, 0x8d, 0x44, 0xca, 0x2b, 0x5c, 0x3b, 0xfd, 0x87, 0xaa, 0x6a, 0x5f, 0xd5, 0x9e, 0x33, 0x57, 0x35, 0xeb, 0x49, 0x5c, 0x8d, 0xea, 0x72, 0xad, 0x74, 0xec, 0x8c, 0x42, 0x4f, 0xce, 0xce, 0x02, 0xb9, 0xce, 0x51, 0x36, 0x29, 0x9c, 0xcf, 0x3e, 0xce, 0xb5, 0xaa, 0x82, 0xbe, 0xec, 0x30, 0xac, 0x50, 0x49, 0x1d, 0x15, 0xc6, 0x17, 0x61, 0x7c, 0x30, 0x39, 0x24, 0xfe, 0x8d, 0xbd, 0x08, 0x42, 0x32, 0xb4, 0xae, 0xf5, 0x70, 0x40, 0x7b, 0x76, 0x71, 0xee, 0x9c, 0xd2, 0x63, 0x46, 0x47, 0xf2, 0xd8, 0xa1, 0x44, 0x13, 0x6d, 0x3b, 0xad, 0x77, 0xaa, 0x89, 0xf2, 0x5a, 0x2a, 0xcd, 0x1f, 0x28, 0xfc, 0xe7 }; static const uint8_t nist_186_2_ecdsa_testvector_168_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x66, 0x38, 0x78, 0xeb, 0xb3, 0x4c, 0x38, 0xdf, 0x8d, 0xca, 0xf9, 0x68, 0xaa, 0xbe, 0x48, 0xca, 0xe2, 0xbf, 0xa4, 0xd1, 0xe3, 0xb6, 0x7e, 0xce, 0xeb, 0x5f, 0xaa }; static const uint8_t nist_186_2_ecdsa_testvector_168_public_x[] = { /* Qx - byte alignment */ 0x01, 0x9c, 0x72, 0x22, 0xce, 0x23, 0x4b, 0xf3, 0xca, 0x69, 0x8f, 0xe0, 0x6c, 0x61, 0x5f, 0x69, 0x2b, 0xfa, 0x89, 0xd2, 0xc3, 0x2b, 0xb7, 0xb0, 0x46, 0x2e, 0xfa, 0x2b, 0xa9, 0x8c }; static const uint8_t nist_186_2_ecdsa_testvector_168_public_y[] = { /* Qy - byte alignment */ 0x00, 0x63, 0xab, 0x9a, 0xd6, 0x0b, 0xb7, 0x76, 0x24, 0xae, 0xfc, 0x10, 0x0e, 0x30, 0xc4, 0xc3, 0x81, 0x58, 0x6e, 0x12, 0x21, 0xcf, 0xa5, 0x2a, 0x9d, 0x99, 0x71, 0x46, 0x47, 0x34 }; /* k = 000003c78b556033fddac988ffd24bb952d59be10c7e6a104acd76bedc5 */ static const uint8_t nist_186_2_ecdsa_testvector_168_out[] = { /* R - byte alignment */ 0x00, 0xde, 0xd3, 0xe1, 0xa3, 0xdf, 0x2c, 0xc4, 0xb1, 0x3b, 0xbe, 0xec, 0xb0, 0x12, 0x72, 0x86, 0x81, 0xe9, 0x80, 0x78, 0x61, 0x72, 0x9f, 0xba, 0xd0, 0x64, 0xed, 0xa4, 0x16, 0x2b, /* S - byte alignment */ 0x00, 0x1f, 0x35, 0x1e, 0xa6, 0xfd, 0x7b, 0xaa, 0xb5, 0x7a, 0x8c, 0xc6, 0x7c, 0xd2, 0xac, 0x90, 0x8a, 0xc4, 0x4f, 0x86, 0x0c, 0xfb, 0xbf, 0x3a, 0x34, 0x2b, 0x8a, 0x80, 0xa6, 0xfb }; static const uint8_t nist_186_2_ecdsa_testvector_169_ptx[] = { /* Msg */ 0x85, 0xad, 0x5f, 0xba, 0x82, 0x13, 0x55, 0xa0, 0xb9, 0xf5, 0x5a, 0xc9, 0xd2, 0x2a, 0x7f, 0x55, 0x82, 0x60, 0x43, 0x15, 0x60, 0xa9, 0x06, 0x38, 0xf4, 0x36, 0xc0, 0x27, 0x11, 0x61, 0xf2, 0xad, 0x65, 0xf1, 0xdd, 0x5b, 0x4f, 0x9a, 0xf3, 0x2b, 0xf0, 0xc4, 0x8b, 0x63, 0x85, 0x8e, 0xd8, 0xbc, 0xf4, 0x11, 0x1c, 0xc4, 0xa4, 0xe9, 0x19, 0x81, 0x92, 0xf2, 0xc8, 0x57, 0xa2, 0x4f, 0x4e, 0x2b, 0x33, 0xb1, 0x2c, 0xc9, 0xf5, 0xd5, 0xb6, 0x83, 0xff, 0x4f, 0xc6, 0x1b, 0x1c, 0x87, 0xb1, 0xe4, 0x66, 0x01, 0x7a, 0x23, 0x17, 0xe1, 0x46, 0xbb, 0x9b, 0xae, 0x10, 0x0a, 0xea, 0x56, 0x9e, 0x0e, 0x14, 0x72, 0xb4, 0xcc, 0x1d, 0xcc, 0x87, 0xf2, 0x0c, 0x1e, 0x74, 0xbb, 0x3f, 0x1d, 0xf2, 0x13, 0x01, 0xb6, 0xc6, 0xfc, 0x5f, 0x98, 0x76, 0x30, 0x37, 0xf2, 0xff, 0x07, 0x91, 0x7e, 0xca, 0x9c }; static const uint8_t nist_186_2_ecdsa_testvector_169_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xed, 0xd6, 0xa7, 0xa4, 0x6a, 0x1f, 0xdb, 0x56, 0xf4, 0xd4, 0xd3, 0xa5, 0x92, 0x3a, 0x96, 0x13, 0xf5, 0x19, 0x79, 0x0a, 0x6a, 0x9e, 0x45, 0x6c, 0x1d, 0x1a, 0xca }; static const uint8_t nist_186_2_ecdsa_testvector_169_public_x[] = { /* Qx - byte alignment */ 0x00, 0xad, 0x3e, 0x9c, 0xef, 0xf5, 0x2b, 0xa5, 0x51, 0xfe, 0x95, 0x18, 0x69, 0xc0, 0xf2, 0xb3, 0xcf, 0x83, 0xde, 0xb1, 0x8e, 0x7a, 0xaa, 0xbd, 0x1e, 0x28, 0xc5, 0x5d, 0xa0, 0x00 }; static const uint8_t nist_186_2_ecdsa_testvector_169_public_y[] = { /* Qy - byte alignment */ 0x00, 0xb8, 0x28, 0x65, 0x60, 0x56, 0xbd, 0x75, 0xdd, 0xa5, 0xa3, 0xa7, 0xba, 0x49, 0x0a, 0x70, 0x39, 0x50, 0xc3, 0x51, 0xcb, 0x29, 0x4e, 0xd7, 0x37, 0x7e, 0x73, 0xc1, 0x70, 0x9f }; /* k = 0000062d295aa4294802636682b2a5b59b30fe637e7d462f34752dc93de */ static const uint8_t nist_186_2_ecdsa_testvector_169_out[] = { /* R - byte alignment */ 0x00, 0x72, 0x10, 0xe8, 0xe4, 0x8e, 0xff, 0xca, 0xfd, 0xa6, 0x87, 0x04, 0xdd, 0xc2, 0x1c, 0x23, 0x58, 0x9a, 0x8d, 0x8e, 0xfd, 0x32, 0xad, 0x67, 0x8f, 0x4f, 0x7b, 0x05, 0xbd, 0xc6, /* S - byte alignment */ 0x00, 0xc8, 0x8a, 0x70, 0xc6, 0x61, 0x5e, 0xb3, 0x5a, 0x90, 0xe3, 0xe0, 0x22, 0xcf, 0x96, 0x6c, 0x5b, 0x09, 0x4f, 0x5f, 0x74, 0x8b, 0x9b, 0xbb, 0x55, 0x67, 0x75, 0x10, 0x1e, 0x0e }; static const uint8_t nist_186_2_ecdsa_testvector_170_ptx[] = { /* Msg */ 0x0d, 0xcd, 0xe4, 0x4a, 0x0c, 0x16, 0x75, 0x8f, 0x8b, 0xee, 0x34, 0xc5, 0xda, 0x6f, 0x9e, 0xfa, 0x1a, 0x4d, 0x6c, 0x9b, 0x5b, 0x66, 0xd0, 0x9f, 0x01, 0x9b, 0xfb, 0x02, 0x6c, 0xdf, 0xe2, 0x75, 0xd8, 0x8d, 0x42, 0x54, 0x81, 0xff, 0xe1, 0xd8, 0x0b, 0x5c, 0x18, 0x8e, 0x22, 0xb1, 0x8e, 0x07, 0x5e, 0x44, 0x46, 0xd1, 0x69, 0x25, 0xdc, 0xa7, 0x63, 0x05, 0x0b, 0xe5, 0x85, 0x4b, 0x73, 0x3f, 0x05, 0x65, 0x99, 0xb1, 0x3a, 0x5c, 0x30, 0xb9, 0x01, 0xac, 0x97, 0xc5, 0x5f, 0x52, 0xa2, 0xe7, 0x68, 0x26, 0x9d, 0xd0, 0x5f, 0x6b, 0x8e, 0xfc, 0x1e, 0xa5, 0xbb, 0x2a, 0xb8, 0xaa, 0x6c, 0x0f, 0x5e, 0xfc, 0xf2, 0x4b, 0x7f, 0x56, 0xe8, 0x9c, 0x33, 0x85, 0xb9, 0x52, 0xda, 0x79, 0x63, 0x03, 0x00, 0x9c, 0x7a, 0x7f, 0x85, 0x63, 0x6f, 0x06, 0xfa, 0x22, 0x12, 0xb9, 0x4d, 0x24, 0x56, 0x4f }; static const uint8_t nist_186_2_ecdsa_testvector_170_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xac, 0x9c, 0xfc, 0x36, 0xde, 0x28, 0x04, 0xc8, 0x07, 0x16, 0xbe, 0xf7, 0xcb, 0x64, 0xe8, 0x6f, 0xd2, 0xbd, 0x10, 0xe2, 0xe2, 0xa3, 0xff, 0x75, 0xeb, 0x3d, 0x3b }; static const uint8_t nist_186_2_ecdsa_testvector_170_public_x[] = { /* Qx - byte alignment */ 0x00, 0xa9, 0xc5, 0xd9, 0x6b, 0x46, 0xf6, 0xa3, 0x58, 0xd2, 0x57, 0xb1, 0x73, 0x18, 0x61, 0x0a, 0xc3, 0xbc, 0x03, 0xd6, 0x54, 0xe3, 0x50, 0x86, 0x9e, 0xae, 0xb5, 0x22, 0xc6, 0x2d }; static const uint8_t nist_186_2_ecdsa_testvector_170_public_y[] = { /* Qy - byte alignment */ 0x00, 0xef, 0xe9, 0x12, 0x9c, 0x74, 0xf9, 0xf0, 0x6c, 0xc4, 0x85, 0xff, 0x93, 0x1a, 0x94, 0x30, 0x2f, 0x47, 0xa3, 0xbd, 0x19, 0x03, 0x5f, 0xf9, 0x84, 0xe1, 0x56, 0x47, 0x11, 0xcb }; /* k = 000009e397d554cac46643884ae3fb87110f2e58d9106ed66b23dd901d5 */ static const uint8_t nist_186_2_ecdsa_testvector_170_out[] = { /* R - byte alignment */ 0x00, 0x11, 0x9f, 0xb2, 0xff, 0xfc, 0x19, 0xf6, 0x78, 0x2b, 0xd3, 0x44, 0x59, 0x61, 0x87, 0xbe, 0x6b, 0xaf, 0x1d, 0x7f, 0x98, 0x22, 0x80, 0xe7, 0x1b, 0x86, 0x62, 0x31, 0x30, 0x16, /* S - byte alignment */ 0x00, 0xce, 0xac, 0x24, 0x8e, 0x4b, 0x31, 0xc3, 0x64, 0x08, 0xe1, 0xc8, 0xbf, 0x3f, 0x63, 0x4d, 0xb5, 0xa5, 0xf5, 0xaf, 0x3d, 0x98, 0x94, 0x5b, 0xa2, 0x53, 0x7d, 0x08, 0x8e, 0xcc }; static const uint8_t nist_186_2_ecdsa_testvector_171_ptx[] = { /* Msg */ 0x37, 0x92, 0x8d, 0x29, 0x9f, 0x8b, 0x4d, 0x25, 0x32, 0x80, 0xa3, 0xc7, 0xa3, 0x69, 0x74, 0xeb, 0xad, 0x24, 0xfb, 0x75, 0xf9, 0xc4, 0xc8, 0x40, 0x42, 0x2d, 0x08, 0x57, 0xb7, 0xde, 0x06, 0x68, 0xa1, 0x0d, 0xf2, 0x75, 0x45, 0xf9, 0xe2, 0xcd, 0x0c, 0x7c, 0x16, 0x3b, 0xe1, 0xdf, 0x80, 0x7d, 0xdb, 0xf3, 0x83, 0xf7, 0x1c, 0x5d, 0xfc, 0xa9, 0xf9, 0x32, 0x7f, 0x5f, 0x5b, 0xc4, 0xe3, 0x27, 0x64, 0xbb, 0x00, 0x08, 0x56, 0x67, 0xb7, 0xf1, 0xb1, 0x54, 0x33, 0xf0, 0x9c, 0x1f, 0x6f, 0xa4, 0x86, 0x89, 0xf8, 0xf5, 0x0d, 0xca, 0xf5, 0x02, 0x1f, 0x28, 0x64, 0x5b, 0x5f, 0xc7, 0xa6, 0x71, 0xca, 0xc3, 0x3e, 0x4b, 0x9a, 0x7c, 0xd6, 0x7a, 0x6a, 0x31, 0x82, 0x4e, 0x9c, 0xd1, 0x49, 0x4a, 0xf8, 0x0d, 0xe2, 0xd6, 0x95, 0xb2, 0xbb, 0x34, 0xfd, 0x36, 0x40, 0xb5, 0x8c, 0x90, 0x59, 0x2d }; static const uint8_t nist_186_2_ecdsa_testvector_171_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x45, 0xae, 0x3c, 0x55, 0x41, 0xfd, 0x4a, 0xba, 0xb4, 0xa3, 0x2b, 0xc5, 0xb3, 0x59, 0x20, 0x51, 0x3c, 0x74, 0xce, 0x8b, 0xf9, 0xd5, 0xd9, 0x6e, 0x30, 0x5a, 0xd8 }; static const uint8_t nist_186_2_ecdsa_testvector_171_public_x[] = { /* Qx - byte alignment */ 0x00, 0xb4, 0xb2, 0xc4, 0xdd, 0x07, 0x8a, 0xc1, 0x7b, 0x2f, 0x84, 0x08, 0x9a, 0x9a, 0xd4, 0x78, 0x80, 0x9f, 0x3a, 0x14, 0x53, 0x06, 0x81, 0xb0, 0xcc, 0xdc, 0xea, 0xa9, 0x4b, 0x56 }; static const uint8_t nist_186_2_ecdsa_testvector_171_public_y[] = { /* Qy - byte alignment */ 0x00, 0xa5, 0x0c, 0x5f, 0xde, 0xd7, 0xdb, 0xc9, 0x82, 0xfe, 0x90, 0x40, 0x33, 0xa6, 0xef, 0xa0, 0xf7, 0xb8, 0xb8, 0x13, 0x3c, 0xa9, 0x1d, 0xc7, 0x8b, 0xc8, 0x19, 0xb8, 0xe6, 0x3f }; /* k = 0000002bc8d93e325751d5dbbe2383c74faafa4087c33bbc421a61f046a */ static const uint8_t nist_186_2_ecdsa_testvector_171_out[] = { /* R - byte alignment */ 0x00, 0x68, 0xdf, 0x21, 0x6e, 0xe2, 0xb1, 0xe6, 0x92, 0xe3, 0xcf, 0xac, 0x3f, 0x66, 0x52, 0xa7, 0xdf, 0xcc, 0xf0, 0x13, 0x2d, 0x52, 0x41, 0xe5, 0xf0, 0x8d, 0x2c, 0xe3, 0xf5, 0x62, /* S - byte alignment */ 0x00, 0x44, 0xfa, 0xd1, 0xed, 0x97, 0x12, 0x9a, 0xa6, 0x93, 0xcd, 0xfe, 0x1a, 0xc9, 0x60, 0xb7, 0xed, 0x15, 0xec, 0x3b, 0x4f, 0xd0, 0xcf, 0xb4, 0x5b, 0x96, 0xab, 0x8a, 0x0a, 0xeb }; static const uint8_t nist_186_2_ecdsa_testvector_172_ptx[] = { /* Msg */ 0xa7, 0x72, 0xdd, 0xe5, 0xe6, 0xc9, 0xdf, 0x0e, 0x19, 0x60, 0xc9, 0x87, 0x4f, 0x1a, 0xc0, 0x6a, 0x89, 0x07, 0x69, 0x5f, 0x1c, 0x37, 0x64, 0x12, 0x56, 0xcc, 0x16, 0xe5, 0x64, 0x53, 0xac, 0xe2, 0x73, 0x55, 0x5c, 0xf3, 0x16, 0x28, 0xee, 0x55, 0xe8, 0x0b, 0x7c, 0x4a, 0x72, 0x73, 0x76, 0x0e, 0x4f, 0x9f, 0xe8, 0x0d, 0x8d, 0x72, 0x00, 0x53, 0x57, 0x82, 0xcb, 0x44, 0xd1, 0x6d, 0x3f, 0x8d, 0x44, 0x6c, 0x7e, 0x5a, 0x7b, 0x2a, 0x59, 0xca, 0x6d, 0xd6, 0x13, 0x9f, 0x1c, 0x76, 0x68, 0x3b, 0xbc, 0x7f, 0xce, 0xc8, 0x18, 0xa3, 0xfb, 0xb6, 0x32, 0xeb, 0xa7, 0x6a, 0x29, 0x05, 0x93, 0x34, 0x60, 0xdf, 0xca, 0x82, 0xdd, 0x75, 0x27, 0x54, 0xef, 0xe7, 0x17, 0xf0, 0x14, 0xce, 0xa0, 0xd7, 0x19, 0xd0, 0xa3, 0xf7, 0x83, 0x72, 0x5e, 0x22, 0x2e, 0x2e, 0x34, 0xbf, 0x34, 0xc6, 0xb1, 0xc0 }; static const uint8_t nist_186_2_ecdsa_testvector_172_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x11, 0x43, 0xbe, 0x2c, 0x59, 0x9d, 0x6b, 0xb5, 0x81, 0xe9, 0x88, 0xa5, 0xa2, 0x7b, 0xeb, 0x8f, 0x2f, 0xe8, 0x95, 0x8c, 0x5d, 0x33, 0x80, 0xe9, 0x15, 0x33, 0x0e }; static const uint8_t nist_186_2_ecdsa_testvector_172_public_x[] = { /* Qx - byte alignment */ 0x01, 0xfa, 0xe6, 0x45, 0x98, 0x83, 0x06, 0xe8, 0x2c, 0x47, 0xdf, 0x92, 0xf4, 0xba, 0x5d, 0x3a, 0xd8, 0x05, 0xe6, 0x94, 0x93, 0x69, 0xd3, 0x02, 0x96, 0xac, 0x0a, 0x16, 0x20, 0x52 }; static const uint8_t nist_186_2_ecdsa_testvector_172_public_y[] = { /* Qy - byte alignment */ 0x01, 0x47, 0x9b, 0x9a, 0xd3, 0x7a, 0xd3, 0xba, 0xea, 0x5d, 0xaa, 0x6e, 0x5e, 0x1d, 0xdf, 0x8e, 0x22, 0x8c, 0x03, 0x14, 0xe6, 0x97, 0x2e, 0xd5, 0x28, 0xeb, 0xca, 0xc5, 0x1d, 0xdb }; /* k = 000000bbcddc5a72df1abd6186f85ccec9426d11995f5fe0de315afff86 */ static const uint8_t nist_186_2_ecdsa_testvector_172_out[] = { /* R - byte alignment */ 0x00, 0x12, 0x68, 0xce, 0xe2, 0xf2, 0x5e, 0x98, 0xb5, 0x2b, 0xe0, 0xeb, 0xda, 0xb3, 0x0e, 0x09, 0xdb, 0x73, 0x54, 0xd8, 0x86, 0xdb, 0x55, 0xb9, 0x84, 0x28, 0x27, 0x9b, 0xd1, 0xc1, /* S - byte alignment */ 0x00, 0x79, 0x77, 0x6e, 0xcf, 0xdc, 0x94, 0x51, 0xe2, 0x5b, 0x93, 0x67, 0x6b, 0x04, 0xfd, 0xf4, 0x1d, 0xdf, 0x7d, 0xb5, 0xb4, 0x5d, 0xea, 0x3c, 0x26, 0x9a, 0x23, 0xf9, 0xb4, 0x47 }; static const uint8_t nist_186_2_ecdsa_testvector_173_ptx[] = { /* Msg */ 0x97, 0xfe, 0x91, 0x73, 0x2b, 0x56, 0x8c, 0xb9, 0xf6, 0x65, 0x57, 0xb0, 0x4a, 0xfd, 0x0d, 0x58, 0x37, 0xc7, 0x41, 0x44, 0x14, 0x87, 0x37, 0xfc, 0x5c, 0xa1, 0x54, 0xa1, 0xbc, 0xdd, 0xd4, 0xcf, 0x69, 0x67, 0xbb, 0xc7, 0xb7, 0x1a, 0x0e, 0xce, 0xe8, 0xfd, 0x42, 0xd0, 0x41, 0x0e, 0xf5, 0x49, 0x64, 0x3f, 0xdc, 0x66, 0xd9, 0xbf, 0xfd, 0x67, 0xee, 0x7a, 0x1e, 0x47, 0xc1, 0xe3, 0x7d, 0x9f, 0x9b, 0xf1, 0xc1, 0xc8, 0x7f, 0x67, 0x31, 0x3f, 0x03, 0x59, 0x24, 0x4e, 0x5f, 0xec, 0xb8, 0xe9, 0xc4, 0x5d, 0xc7, 0xd7, 0xef, 0x45, 0x17, 0x12, 0xfd, 0x1b, 0xd1, 0x6f, 0x81, 0xfa, 0x35, 0x81, 0xd4, 0xa4, 0x8b, 0xbb, 0xac, 0xc8, 0x5d, 0xd6, 0xf0, 0x80, 0xe3, 0x72, 0xcb, 0x1e, 0xbf, 0x00, 0x00, 0x28, 0xeb, 0xdf, 0x7d, 0xa1, 0xef, 0xc5, 0x32, 0x8a, 0x57, 0x61, 0x23, 0xa9, 0x64, 0x3f }; static const uint8_t nist_186_2_ecdsa_testvector_173_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x1f, 0x73, 0x5a, 0x6c, 0x43, 0x4a, 0xe8, 0x0a, 0xed, 0x64, 0x42, 0x43, 0x8b, 0x46, 0xe4, 0x24, 0x16, 0x19, 0xc7, 0x81, 0x27, 0x81, 0x1c, 0x4a, 0x01, 0xe4, 0x78 }; static const uint8_t nist_186_2_ecdsa_testvector_173_public_x[] = { /* Qx - byte alignment */ 0x00, 0xa9, 0xe2, 0x95, 0x86, 0xe5, 0x67, 0xff, 0x7e, 0xd1, 0xfd, 0x86, 0x63, 0xf0, 0xa3, 0x2b, 0x01, 0x1d, 0x94, 0xf2, 0xbe, 0x69, 0xe5, 0xbb, 0xb3, 0x88, 0x7b, 0xec, 0x8f, 0x66 }; static const uint8_t nist_186_2_ecdsa_testvector_173_public_y[] = { /* Qy - byte alignment */ 0x00, 0xa4, 0xea, 0x53, 0xc8, 0x6c, 0x27, 0x04, 0xc0, 0x13, 0x95, 0xf5, 0x8f, 0x88, 0x38, 0x8a, 0x7b, 0xa0, 0x39, 0xe1, 0x94, 0x03, 0xad, 0x80, 0x33, 0xea, 0x09, 0xdd, 0x2e, 0x4a }; /* k = 00000642e71d725e137731d250648fd8f5d1aa2bd7da608f08065700242 */ static const uint8_t nist_186_2_ecdsa_testvector_173_out[] = { /* R - byte alignment */ 0x00, 0x7f, 0x00, 0x0c, 0xea, 0x21, 0x71, 0x7b, 0x7e, 0xcf, 0x27, 0x9d, 0xae, 0xff, 0x07, 0xbc, 0x81, 0x61, 0xfd, 0xaa, 0x79, 0x6b, 0xfa, 0x87, 0xad, 0x00, 0xeb, 0x08, 0xb6, 0xf1, /* S - byte alignment */ 0x00, 0xd2, 0x05, 0x9c, 0xd4, 0xfc, 0x81, 0x4b, 0x4d, 0x0d, 0xa7, 0x1d, 0xa5, 0x31, 0xa4, 0x7c, 0x72, 0xfa, 0x14, 0x31, 0x6a, 0x67, 0x08, 0xf0, 0x3b, 0x8b, 0x6b, 0xcc, 0x3e, 0xbb }; static const uint8_t nist_186_2_ecdsa_testvector_174_ptx[] = { /* Msg */ 0x1e, 0xa6, 0x72, 0x92, 0x99, 0x7e, 0x53, 0xf2, 0xae, 0xe2, 0x7c, 0xc2, 0xa3, 0x14, 0xef, 0x86, 0x3d, 0xd7, 0x3d, 0x20, 0x25, 0x39, 0x03, 0x44, 0x90, 0xb0, 0xb5, 0x2d, 0x1f, 0x68, 0x9a, 0x8e, 0x04, 0xdc, 0x18, 0xcc, 0x67, 0xa4, 0x32, 0x6a, 0x08, 0x8d, 0x4f, 0xc5, 0x25, 0xef, 0x3d, 0x01, 0x9e, 0x3b, 0x75, 0x43, 0x57, 0xd4, 0xa1, 0x20, 0xde, 0x20, 0x5b, 0x56, 0x4e, 0xde, 0x38, 0xba, 0x73, 0xba, 0x05, 0x72, 0x2e, 0x1e, 0x50, 0x64, 0x1b, 0x4c, 0x2b, 0xee, 0x72, 0xaa, 0x2c, 0xd8, 0x2b, 0x5c, 0xb8, 0x87, 0x66, 0x18, 0x81, 0x73, 0x09, 0x36, 0x4e, 0xdb, 0xab, 0x07, 0xfb, 0xb7, 0xb1, 0x68, 0xc0, 0xee, 0xb6, 0x97, 0xb6, 0xc9, 0x31, 0x45, 0x96, 0xa7, 0x51, 0xec, 0xc4, 0xf3, 0x2c, 0x62, 0x8d, 0x54, 0x19, 0xaf, 0xad, 0x23, 0x5a, 0x1c, 0x15, 0x22, 0xff, 0x8c, 0xeb, 0x6b }; static const uint8_t nist_186_2_ecdsa_testvector_174_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xc0, 0x9c, 0x66, 0xf8, 0x94, 0x32, 0xee, 0xe8, 0xf6, 0x36, 0xb2, 0x32, 0x4a, 0x56, 0x40, 0x68, 0x5f, 0x71, 0xf1, 0x3e, 0x20, 0x02, 0x0d, 0x46, 0x0b, 0x86, 0x6c }; static const uint8_t nist_186_2_ecdsa_testvector_174_public_x[] = { /* Qx - byte alignment */ 0x01, 0x40, 0x52, 0x34, 0xb9, 0x95, 0x5b, 0xd0, 0xb6, 0xf3, 0x94, 0xc4, 0x59, 0xec, 0x58, 0xcc, 0xc2, 0xf6, 0x8f, 0x0f, 0x2d, 0x7b, 0x5f, 0xc0, 0xef, 0x2b, 0x0b, 0x5e, 0xb3, 0xea }; static const uint8_t nist_186_2_ecdsa_testvector_174_public_y[] = { /* Qy - byte alignment */ 0x01, 0x5c, 0xd0, 0x85, 0x77, 0x35, 0x7c, 0x97, 0xa8, 0xb1, 0x86, 0x13, 0xa2, 0xa2, 0xb7, 0x9d, 0x64, 0x54, 0xe6, 0x54, 0xd0, 0x48, 0xf3, 0x46, 0xdc, 0x28, 0xef, 0x50, 0x5e, 0x8e }; /* k = 000008ce062ed814f46fba5276d2439cd455f6d22aaf77f31dbc4f8a417 */ static const uint8_t nist_186_2_ecdsa_testvector_174_out[] = { /* R - byte alignment */ 0x00, 0xe5, 0xff, 0xd3, 0xda, 0x8d, 0xd8, 0x07, 0x66, 0x9e, 0xac, 0x82, 0xc5, 0xb8, 0xe9, 0xfc, 0x37, 0x05, 0x5e, 0x18, 0xf3, 0x36, 0x6a, 0x78, 0xc4, 0x52, 0xa7, 0xf4, 0x5c, 0x68, /* S - byte alignment */ 0x00, 0x24, 0xbf, 0xcd, 0x45, 0x8c, 0x67, 0xb6, 0xf2, 0x96, 0x7e, 0x89, 0xe3, 0x80, 0x37, 0xdf, 0xe4, 0xc1, 0x86, 0xfd, 0xb7, 0xec, 0x75, 0x10, 0x6f, 0x07, 0x44, 0x5a, 0x2c, 0xcc }; static const uint8_t nist_186_2_ecdsa_testvector_175_ptx[] = { /* Msg */ 0xfc, 0xb2, 0x9e, 0x64, 0x68, 0x88, 0x12, 0x63, 0x93, 0xcd, 0x32, 0x75, 0x47, 0x32, 0xba, 0xf4, 0xc4, 0x0a, 0x86, 0xdd, 0x64, 0x59, 0x54, 0x85, 0x7b, 0x2d, 0xca, 0x87, 0x81, 0x31, 0xbb, 0x01, 0x73, 0x7f, 0xa6, 0x00, 0x76, 0xb6, 0x7f, 0x38, 0xbe, 0x4c, 0xb2, 0xf9, 0xae, 0x26, 0x66, 0x5e, 0x40, 0x66, 0xfe, 0xc8, 0xa8, 0x85, 0xe6, 0x8a, 0x34, 0xa1, 0x8c, 0xe6, 0x77, 0x18, 0xac, 0x39, 0xa6, 0x55, 0xd1, 0x72, 0x42, 0xea, 0x19, 0xc8, 0xf7, 0xdf, 0x38, 0xad, 0xc5, 0x4a, 0xbf, 0xfd, 0x5d, 0x20, 0x9f, 0x7c, 0xce, 0x4b, 0xe8, 0x7f, 0x60, 0xfd, 0xd7, 0xe9, 0xc0, 0x43, 0x10, 0x59, 0x5e, 0xdd, 0x28, 0xa2, 0x14, 0x4d, 0x66, 0x7c, 0x08, 0x2e, 0xcb, 0x79, 0xd3, 0xc7, 0x4f, 0x3a, 0xe3, 0xe0, 0x6e, 0xe2, 0x1d, 0xd4, 0xe3, 0xcb, 0xc7, 0xe8, 0xb4, 0x78, 0xa6, 0xdb, 0x6e, 0xcb }; static const uint8_t nist_186_2_ecdsa_testvector_175_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xdc, 0xa4, 0x78, 0xf7, 0xf5, 0xa5, 0xbe, 0x46, 0xb4, 0x07, 0x0c, 0x9f, 0x22, 0x97, 0xe8, 0x0c, 0x3d, 0x7c, 0xd1, 0x06, 0x31, 0xc0, 0x25, 0x9e, 0xc4, 0xaa, 0x83 }; static const uint8_t nist_186_2_ecdsa_testvector_175_public_x[] = { /* Qx - byte alignment */ 0x00, 0x19, 0xd3, 0x90, 0xa8, 0x6e, 0x98, 0xd1, 0x3b, 0x47, 0xd4, 0x6b, 0xea, 0x13, 0xd0, 0x98, 0xd0, 0x4f, 0xd1, 0x81, 0xf1, 0x48, 0x5f, 0xc3, 0x7c, 0xc1, 0x8c, 0x92, 0xd3, 0xca }; static const uint8_t nist_186_2_ecdsa_testvector_175_public_y[] = { /* Qy - byte alignment */ 0x01, 0x11, 0xa6, 0x6a, 0xff, 0x04, 0x27, 0x38, 0x16, 0x3d, 0x0a, 0x7e, 0x89, 0x55, 0x5b, 0x5c, 0xf4, 0x19, 0x30, 0x34, 0xc4, 0x17, 0xe6, 0x48, 0x6f, 0xc0, 0xff, 0x41, 0xf8, 0x43 }; /* k = 000000720c7f812ae1b94da84b4c6f206a253692e7a9da1a4e0ba7115b6 */ static const uint8_t nist_186_2_ecdsa_testvector_175_out[] = { /* R - byte alignment */ 0x00, 0xa3, 0x33, 0x48, 0xc7, 0xbf, 0x63, 0xd7, 0x24, 0x22, 0x7e, 0x09, 0x65, 0x15, 0x2f, 0x31, 0xca, 0x4c, 0xc1, 0x06, 0x5b, 0x1d, 0x76, 0x22, 0x60, 0x94, 0x23, 0xd0, 0xda, 0xa4, /* S - byte alignment */ 0x00, 0x3e, 0xbd, 0x07, 0x20, 0x45, 0x41, 0x66, 0xed, 0x6f, 0x04, 0xbf, 0x32, 0x15, 0x3a, 0xf1, 0xa8, 0xd7, 0x60, 0xad, 0x1c, 0x98, 0x97, 0xa6, 0xd1, 0x93, 0x54, 0xd1, 0xc6, 0x0f }; static const uint8_t nist_186_2_ecdsa_testvector_176_ptx[] = { /* Msg */ 0x19, 0x35, 0xf9, 0x50, 0x92, 0x66, 0xce, 0xda, 0x1e, 0x89, 0x53, 0xc4, 0x35, 0x03, 0xe8, 0x3d, 0x5d, 0x13, 0x5e, 0x28, 0xfb, 0x5b, 0x63, 0xc2, 0x69, 0x9c, 0x41, 0x86, 0x48, 0xc1, 0xc9, 0x4e, 0x18, 0x1f, 0x89, 0xba, 0x06, 0xfb, 0x46, 0xd5, 0x04, 0x4c, 0xa6, 0xf6, 0x1f, 0xc3, 0x2c, 0xe5, 0x0d, 0x09, 0x69, 0x3f, 0x06, 0x48, 0x71, 0x1c, 0xd6, 0xec, 0x8d, 0xee, 0x2f, 0xab, 0x2f, 0xad, 0x43, 0xc2, 0x2b, 0x31, 0x92, 0x82, 0x23, 0xdf, 0x01, 0x0c, 0x43, 0x87, 0x2d, 0x59, 0x2f, 0x8d, 0xfe, 0x7d, 0x3a, 0x47, 0x7f, 0x2c, 0xd9, 0xa7, 0xed, 0x7d, 0x57, 0x1a, 0x0e, 0xee, 0xca, 0xaf, 0xc3, 0xa8, 0x45, 0x7c, 0xe1, 0x05, 0x4f, 0x3e, 0x3d, 0x50, 0x94, 0x3f, 0x06, 0xcc, 0xdb, 0x7d, 0x58, 0xf7, 0x38, 0x08, 0x0d, 0x0f, 0x83, 0xac, 0xd7, 0xd6, 0x08, 0xd0, 0x8c, 0x93, 0x80, 0x9e }; static const uint8_t nist_186_2_ecdsa_testvector_176_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xf7, 0x7c, 0x1d, 0x84, 0x93, 0x2b, 0xd0, 0xe8, 0x87, 0x84, 0xac, 0x00, 0xf6, 0x07, 0xe0, 0x35, 0xb2, 0xb8, 0x51, 0x6e, 0xbc, 0xe8, 0xd2, 0x83, 0xfd, 0xf9, 0x1b }; static const uint8_t nist_186_2_ecdsa_testvector_176_public_x[] = { /* Qx - byte alignment */ 0x01, 0x5e, 0x55, 0x9e, 0x4a, 0x07, 0xb1, 0x46, 0xb4, 0x94, 0x02, 0x4d, 0xd9, 0x9f, 0x95, 0x95, 0xd1, 0x48, 0xd8, 0x3f, 0xd4, 0x66, 0x65, 0x65, 0x6c, 0xc2, 0x14, 0x8b, 0x32, 0x8b }; static const uint8_t nist_186_2_ecdsa_testvector_176_public_y[] = { /* Qy - byte alignment */ 0x00, 0x75, 0xea, 0x9f, 0x8e, 0xed, 0xd0, 0x1a, 0xea, 0xab, 0xfe, 0x81, 0x00, 0x95, 0x28, 0x88, 0xf0, 0x50, 0xb6, 0x99, 0x6a, 0x9a, 0xab, 0x65, 0x1b, 0x50, 0x11, 0x4f, 0xee, 0xa7 }; /* k = 000006f702f3b453551bd67d4414e5604f4a48382890ead5efea1a4d747 */ static const uint8_t nist_186_2_ecdsa_testvector_176_out[] = { /* R - byte alignment */ 0x00, 0x43, 0xc0, 0x93, 0x0b, 0x46, 0x2d, 0x98, 0x76, 0xf8, 0xb6, 0x09, 0x86, 0x6a, 0xa3, 0x1d, 0x86, 0x0d, 0x89, 0xff, 0x38, 0xce, 0xd0, 0x97, 0x76, 0x11, 0x4b, 0xde, 0x23, 0x20, /* S - byte alignment */ 0x00, 0x76, 0x64, 0x90, 0xc3, 0xd0, 0xed, 0x29, 0x92, 0xf4, 0x52, 0xd4, 0xc8, 0x6f, 0x3c, 0x35, 0x80, 0xf3, 0x8b, 0xa4, 0xd5, 0xd1, 0xf5, 0x18, 0xa4, 0xe1, 0x52, 0xd0, 0x12, 0xf1 }; static const uint8_t nist_186_2_ecdsa_testvector_177_ptx[] = { /* Msg */ 0x52, 0xe1, 0xf6, 0x5d, 0x62, 0x18, 0x54, 0x76, 0xba, 0x62, 0xbf, 0x9b, 0x5e, 0x83, 0x7a, 0x50, 0xcd, 0xca, 0x27, 0x00, 0xd8, 0x97, 0x3a, 0x9f, 0xb3, 0x1a, 0xad, 0x8e, 0x4d, 0x5d, 0xf6, 0xbf, 0xdd, 0x85, 0x36, 0x19, 0xbd, 0x55, 0xb3, 0x1e, 0x7c, 0xf3, 0x88, 0xcb, 0x2f, 0xef, 0x9b, 0xbf, 0x07, 0x81, 0xd0, 0xa0, 0x29, 0x12, 0x7c, 0xbb, 0xb9, 0xfe, 0x1d, 0xea, 0x38, 0x99, 0x48, 0xbb, 0x11, 0x70, 0xe2, 0xce, 0x6e, 0xd1, 0x93, 0x7f, 0x50, 0x8d, 0x78, 0xc5, 0xdf, 0xfc, 0x18, 0x5a, 0xff, 0x42, 0x9a, 0x1d, 0x23, 0xd1, 0x35, 0xb4, 0x66, 0x2f, 0xe7, 0x75, 0xd8, 0xfa, 0x6a, 0x87, 0x15, 0x29, 0x64, 0x44, 0x1d, 0x94, 0xde, 0xe2, 0x5f, 0xb7, 0xf7, 0x53, 0x17, 0xb2, 0xd9, 0x69, 0xda, 0x95, 0xed, 0x3e, 0x6f, 0xdb, 0x4b, 0xd3, 0xe1, 0x34, 0x75, 0xf7, 0xd2, 0x88, 0x44, 0x6b }; static const uint8_t nist_186_2_ecdsa_testvector_177_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xb7, 0x16, 0x9e, 0xfc, 0xe7, 0x77, 0x48, 0x43, 0x04, 0x4a, 0xc9, 0x8a, 0x9f, 0xc8, 0x94, 0x10, 0xf0, 0xa6, 0x98, 0x96, 0x83, 0x6a, 0x8c, 0x4e, 0xd0, 0xa9, 0x4c }; static const uint8_t nist_186_2_ecdsa_testvector_177_public_x[] = { /* Qx - byte alignment */ 0x01, 0xba, 0x0d, 0xac, 0xef, 0x4d, 0x48, 0x32, 0x53, 0x42, 0xe9, 0x94, 0xa3, 0xfb, 0x7a, 0xc5, 0x49, 0x79, 0xda, 0x27, 0x35, 0x27, 0x2c, 0x38, 0x64, 0xa4, 0x42, 0x63, 0x6f, 0xd2 }; static const uint8_t nist_186_2_ecdsa_testvector_177_public_y[] = { /* Qy - byte alignment */ 0x01, 0x3d, 0x8c, 0x12, 0x74, 0xce, 0xf3, 0x6b, 0xb3, 0xe1, 0x72, 0x77, 0x3a, 0xb5, 0x2d, 0xbb, 0x33, 0xbc, 0xfc, 0xb9, 0xd4, 0xf5, 0x0c, 0x89, 0xf5, 0x9f, 0xa2, 0x96, 0x6d, 0x1a }; /* k = 0000029215f5e7f6dd5fe45200b03952e76b3af952d7622e7d05eef86c8 */ static const uint8_t nist_186_2_ecdsa_testvector_177_out[] = { /* R - byte alignment */ 0x00, 0xd5, 0xc7, 0x02, 0xb0, 0x43, 0xea, 0xf7, 0xb5, 0xa8, 0x31, 0x86, 0x8e, 0xcb, 0xde, 0x23, 0x4e, 0xc1, 0x0f, 0x78, 0x72, 0x2e, 0xcc, 0x46, 0x62, 0x42, 0xa9, 0xda, 0x42, 0x29, /* S - byte alignment */ 0x00, 0x36, 0x5b, 0x0f, 0x55, 0xb7, 0x90, 0xf9, 0xe9, 0xd3, 0x4d, 0x3c, 0x78, 0xa3, 0x1c, 0x27, 0x96, 0x16, 0xf2, 0xf5, 0x75, 0xcf, 0x68, 0x84, 0x4e, 0x7d, 0xd8, 0xe7, 0xc7, 0xb7 }; static const uint8_t nist_186_2_ecdsa_testvector_178_ptx[] = { /* Msg */ 0x83, 0x69, 0xf3, 0xd5, 0x21, 0x18, 0x8d, 0x4e, 0x1b, 0x38, 0x47, 0x18, 0x1e, 0x51, 0xd5, 0x1e, 0x32, 0xda, 0x25, 0xaf, 0x40, 0xac, 0xfa, 0x8d, 0xd2, 0xb7, 0xd7, 0x40, 0x1b, 0xf4, 0x1e, 0xb0, 0x37, 0x9a, 0x79, 0xf3, 0xb4, 0x95, 0x79, 0x64, 0x50, 0x34, 0x7d, 0xf5, 0x04, 0x22, 0xd6, 0xc6, 0x42, 0x97, 0x28, 0xf6, 0x7c, 0xcf, 0x13, 0xb9, 0xe5, 0xbc, 0x13, 0xaa, 0x7b, 0xf8, 0xa5, 0x63, 0x45, 0xfd, 0xac, 0x4b, 0xd9, 0x98, 0x12, 0xb0, 0x22, 0x9b, 0xb2, 0x16, 0x60, 0xd3, 0x76, 0xce, 0x70, 0x39, 0xbc, 0xca, 0x4e, 0x6c, 0xff, 0xaf, 0xd8, 0x5f, 0xb3, 0x2c, 0xd5, 0x4f, 0x70, 0x8b, 0x35, 0xf9, 0x53, 0x85, 0x9a, 0x09, 0xa2, 0x5b, 0x18, 0xd5, 0xae, 0x22, 0x39, 0x4b, 0xfe, 0x5e, 0x45, 0x28, 0xa9, 0xd3, 0xc0, 0x6c, 0x04, 0x98, 0x33, 0x0a, 0x7d, 0x6d, 0x30, 0xe3, 0xc7, 0x4e }; static const uint8_t nist_186_2_ecdsa_testvector_178_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xb5, 0x3d, 0x07, 0xd9, 0xde, 0xd1, 0x2e, 0xf7, 0x22, 0x3e, 0x5a, 0xd3, 0x0f, 0xea, 0x81, 0xa5, 0x42, 0x50, 0x27, 0x7c, 0xa7, 0xb1, 0x4e, 0x39, 0xd7, 0xf7, 0x0f }; static const uint8_t nist_186_2_ecdsa_testvector_178_public_x[] = { /* Qx - byte alignment */ 0x01, 0xae, 0x55, 0x28, 0x58, 0xd6, 0x30, 0x0b, 0x9b, 0xf2, 0x07, 0x11, 0xca, 0xde, 0x4d, 0xb4, 0x7c, 0x70, 0xdb, 0x9a, 0x1c, 0x65, 0x88, 0xdb, 0xc6, 0xe7, 0x2d, 0x8d, 0xe1, 0x85 }; static const uint8_t nist_186_2_ecdsa_testvector_178_public_y[] = { /* Qy - byte alignment */ 0x00, 0xcf, 0xdb, 0x85, 0xf3, 0xea, 0xf4, 0xa9, 0x51, 0xd8, 0x37, 0xf5, 0x51, 0xac, 0x09, 0xdb, 0x28, 0xc4, 0x68, 0x7b, 0x00, 0x4d, 0x1f, 0x16, 0x95, 0x20, 0xbf, 0xcf, 0xc5, 0xa4 }; /* k = 00000980235bd756979641956e695fc5152b88d3f279e95b0e3ffb786cb */ static const uint8_t nist_186_2_ecdsa_testvector_178_out[] = { /* R - byte alignment */ 0x00, 0xa0, 0xaf, 0x0e, 0xab, 0x40, 0x12, 0xf8, 0x13, 0x40, 0x8b, 0x3b, 0x13, 0x6e, 0xe4, 0xd2, 0x39, 0x7f, 0x28, 0x6b, 0x5c, 0xf0, 0x7a, 0xbf, 0x6d, 0xf7, 0xd6, 0x6e, 0x5f, 0xd7, /* S - byte alignment */ 0x00, 0xae, 0xdf, 0x9e, 0xd2, 0xf6, 0x6b, 0xe4, 0x79, 0x60, 0x29, 0xdb, 0x91, 0xc9, 0x67, 0xbf, 0xcd, 0xb8, 0x1e, 0x2d, 0x3a, 0x59, 0x94, 0xd2, 0x82, 0x91, 0x84, 0x6f, 0xbb, 0xa1 }; static const uint8_t nist_186_2_ecdsa_testvector_179_ptx[] = { /* Msg */ 0x06, 0xd5, 0x53, 0x4b, 0x77, 0x69, 0x25, 0x6e, 0x8c, 0xf6, 0x5c, 0x6c, 0xe5, 0x2a, 0x3e, 0x86, 0x96, 0x5a, 0x1f, 0xd1, 0x2c, 0x75, 0x82, 0xd2, 0xeb, 0x36, 0x82, 0x4a, 0x5a, 0x9d, 0x70, 0x53, 0x02, 0x9f, 0xbe, 0xac, 0x72, 0x1d, 0x1b, 0x52, 0x86, 0x13, 0xe0, 0x50, 0xe9, 0x12, 0xab, 0xd7, 0xd9, 0xf0, 0x49, 0x91, 0x2a, 0xbe, 0xda, 0x33, 0x8e, 0xfa, 0x2f, 0x52, 0x13, 0x06, 0x77, 0x77, 0xed, 0xd9, 0x1b, 0x75, 0x76, 0xf5, 0xe6, 0xfa, 0x73, 0x98, 0x69, 0x65, 0x99, 0x37, 0x9e, 0xd7, 0x50, 0x28, 0xcb, 0x8d, 0xb6, 0x9f, 0xa9, 0x6d, 0xe7, 0xdb, 0xc6, 0xde, 0x7c, 0xa1, 0x28, 0xdd, 0x51, 0xea, 0x33, 0x4e, 0x8c, 0xd9, 0xcd, 0x8f, 0xda, 0xef, 0xbf, 0x53, 0xfc, 0x82, 0x5e, 0xae, 0x83, 0x6b, 0x6c, 0x6c, 0xd7, 0x00, 0x39, 0xa7, 0x7e, 0x42, 0x0d, 0x99, 0x9b, 0x57, 0xca, 0xae }; static const uint8_t nist_186_2_ecdsa_testvector_179_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0xe1, 0xa5, 0x11, 0xbf, 0x74, 0xa9, 0xf8, 0x2d, 0x2e, 0xe3, 0x1a, 0x75, 0x0d, 0x64, 0x2d, 0x62, 0x0d, 0x9d, 0x0d, 0x1e, 0x13, 0xb2, 0xfd, 0xcf, 0xf9, 0xa7, 0xa8 }; static const uint8_t nist_186_2_ecdsa_testvector_179_public_x[] = { /* Qx - byte alignment */ 0x00, 0x90, 0x94, 0x29, 0x95, 0x53, 0x21, 0xe4, 0x27, 0xd9, 0x3a, 0x52, 0xa1, 0x16, 0x38, 0xc0, 0x45, 0x4c, 0x85, 0x5e, 0xba, 0xa5, 0xc0, 0xb3, 0x3e, 0x0e, 0x04, 0x11, 0x32, 0x17 }; static const uint8_t nist_186_2_ecdsa_testvector_179_public_y[] = { /* Qy - byte alignment */ 0x00, 0x2a, 0xbb, 0x5f, 0x53, 0xa0, 0x78, 0x46, 0xbb, 0x88, 0x8a, 0xec, 0x61, 0x1b, 0xce, 0x88, 0x35, 0xeb, 0x4b, 0x36, 0xfd, 0xe6, 0x9a, 0x7e, 0x9d, 0xd9, 0xe6, 0xfa, 0x89, 0xed }; /* k = 000001c22bc25286ee5b895d61d834780e4fa197cf90f3003cb60e79514 */ static const uint8_t nist_186_2_ecdsa_testvector_179_out[] = { /* R - byte alignment */ 0x00, 0x0b, 0x8e, 0x42, 0xc1, 0x39, 0xa9, 0xf1, 0xd8, 0x6b, 0x67, 0x24, 0xac, 0x62, 0xbc, 0x4d, 0xac, 0xc7, 0x9a, 0x85, 0xd9, 0xc0, 0x84, 0xca, 0xbb, 0x99, 0xc5, 0xf7, 0xa2, 0x59, /* S - byte alignment */ 0x00, 0xfa, 0x52, 0x3a, 0x97, 0xe8, 0x53, 0x5e, 0xa1, 0x08, 0x45, 0x4b, 0xca, 0x9f, 0xe4, 0x8b, 0xc1, 0xc6, 0xb6, 0x55, 0x9e, 0x3c, 0x97, 0x58, 0x76, 0x59, 0x4b, 0xdb, 0x62, 0xdc }; static const uint8_t nist_186_2_ecdsa_testvector_180_ptx[] = { /* Msg */ 0xa7, 0xa2, 0x2d, 0x03, 0x51, 0x6d, 0xb5, 0xf6, 0x16, 0x7f, 0x9a, 0x32, 0xdf, 0xec, 0x35, 0xff, 0xe0, 0xee, 0x66, 0x0a, 0x25, 0x2a, 0xcd, 0xc3, 0x6e, 0x34, 0x3d, 0x04, 0x3d, 0x56, 0x6d, 0xf3, 0x2d, 0x8d, 0xf1, 0x29, 0x85, 0xd5, 0x69, 0x14, 0x0d, 0xa6, 0xf9, 0x99, 0x21, 0xbf, 0xf9, 0xfe, 0x03, 0x22, 0xed, 0x08, 0x76, 0x60, 0xb7, 0x60, 0x88, 0x16, 0x0b, 0x3b, 0xaf, 0xb8, 0x24, 0x3a, 0x17, 0x8d, 0xb5, 0x8f, 0x3b, 0xfb, 0x23, 0x62, 0xb3, 0x05, 0xf1, 0x73, 0x4c, 0x12, 0x7c, 0x00, 0x5e, 0xf0, 0xe8, 0xe9, 0x5a, 0x18, 0x5a, 0x12, 0xa3, 0x34, 0x67, 0x09, 0x9f, 0xde, 0xcd, 0xe9, 0x0d, 0xab, 0x61, 0x7e, 0x99, 0x68, 0x49, 0xa9, 0xad, 0xa3, 0x6b, 0x06, 0x8b, 0x6e, 0x25, 0xcd, 0x99, 0x5f, 0x3f, 0xf6, 0xfb, 0xdb, 0x1e, 0xa1, 0x67, 0x94, 0x3a, 0xb4, 0x35, 0x51, 0xd2, 0xc6 }; static const uint8_t nist_186_2_ecdsa_testvector_180_private[] = { /* d - byte alignment */ 0x00, 0x00, 0x00, 0x30, 0x74, 0x6b, 0x53, 0xd2, 0x07, 0x22, 0x80, 0x69, 0xd5, 0x8b, 0x60, 0xfb, 0xf9, 0xf3, 0x84, 0x99, 0x88, 0x81, 0xa2, 0x7c, 0x04, 0x7e, 0x22, 0xb9, 0x78, 0x89 }; static const uint8_t nist_186_2_ecdsa_testvector_180_public_x[] = { /* Qx - byte alignment */ 0x00, 0xbb, 0x1b, 0xc2, 0xe3, 0x7b, 0x85, 0x2c, 0x23, 0x74, 0x02, 0xfa, 0xb4, 0xba, 0x65, 0x84, 0xc6, 0x85, 0x36, 0x32, 0xa2, 0xc0, 0x60, 0xf5, 0x03, 0x99, 0x2b, 0x03, 0x37, 0xa7 }; static const uint8_t nist_186_2_ecdsa_testvector_180_public_y[] = { /* Qy - byte alignment */ 0x00, 0x3a, 0x0e, 0xa8, 0xb4, 0x3f, 0x49, 0xd9, 0x42, 0x26, 0x9b, 0xbd, 0x31, 0xd6, 0x0d, 0x8f, 0xd7, 0xc1, 0xf2, 0x88, 0x89, 0x18, 0x35, 0x69, 0xac, 0xd8, 0x8e, 0xe4, 0x6c, 0xc3 }; /* k = 00000ad833129fbb7605452a7b9bc5dcece7ed67b81d5fdd93569e76c17 */ static const uint8_t nist_186_2_ecdsa_testvector_180_out[] = { /* R - byte alignment */ 0x00, 0x2f, 0x13, 0xc7, 0xd7, 0xd7, 0x51, 0xb2, 0x40, 0xdc, 0x80, 0x56, 0xca, 0xce, 0x86, 0x83, 0x47, 0xd4, 0xef, 0xc7, 0x27, 0x01, 0x80, 0xf1, 0x0d, 0x5e, 0x24, 0xbd, 0xc8, 0x29, /* S - byte alignment */ 0x00, 0xd3, 0x45, 0x23, 0xbe, 0xe6, 0x0f, 0xe2, 0xc9, 0x12, 0xef, 0x53, 0x51, 0x95, 0x91, 0x34, 0x5f, 0xc9, 0xa9, 0xb7, 0x1b, 0x7a, 0x08, 0x0a, 0x19, 0xc8, 0x3a, 0xb4, 0xbb, 0xe5 }; /* [B-283] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_181_ptx[] = { /* Msg */ 0x9b, 0xfc, 0x4d, 0xac, 0x8c, 0x22, 0x32, 0x38, 0x72, 0x16, 0xa5, 0x32, 0xce, 0x62, 0xd9, 0x8c, 0x1a, 0xaf, 0xa3, 0x5c, 0x65, 0xdc, 0x38, 0x8e, 0x3d, 0x4d, 0x37, 0xd6, 0xd1, 0x86, 0xea, 0xe9, 0x57, 0xf8, 0xc9, 0xed, 0xac, 0x1a, 0x3f, 0x2e, 0x3a, 0xbc, 0xb1, 0x12, 0x1f, 0x99, 0xbd, 0x4f, 0x8c, 0x2b, 0xbf, 0x5b, 0x6a, 0xc3, 0x9a, 0x25, 0x44, 0xd8, 0xb5, 0x02, 0x61, 0x9f, 0x43, 0xea, 0x30, 0xdd, 0xc8, 0xe4, 0xea, 0xfa, 0xd8, 0xbf, 0x72, 0x56, 0x22, 0x03, 0x80, 0xe0, 0xae, 0x27, 0xfe, 0xe4, 0x63, 0x04, 0xb2, 0x24, 0xcc, 0x8a, 0x1e, 0x2b, 0x1c, 0xb2, 0xa4, 0xde, 0x6f, 0xb3, 0xee, 0x54, 0x52, 0x79, 0x8d, 0xe7, 0x86, 0x53, 0xe0, 0x8b, 0x01, 0xec, 0x38, 0x5f, 0x36, 0x7c, 0x39, 0x82, 0x96, 0x3f, 0x84, 0x28, 0x57, 0x27, 0x93, 0xed, 0x74, 0xce, 0xe3, 0x69, 0xf5, 0xae }; static const uint8_t nist_186_2_ecdsa_testvector_181_private[] = { /* d - byte alignment */ 0x00, 0x31, 0xca, 0x77, 0xb8, 0x9d, 0xf0, 0xc2, 0xf9, 0x0a, 0xe6, 0xd3, 0x8c, 0x93, 0x5a, 0x75, 0xeb, 0xd7, 0x4d, 0x64, 0xf8, 0x26, 0xcf, 0xe6, 0xd2, 0x3d, 0x13, 0x5e, 0x28, 0xbb, 0x66, 0xa0, 0xba, 0xea, 0xfb, 0xa9 }; static const uint8_t nist_186_2_ecdsa_testvector_181_public_x[] = { /* Qx - byte alignment */ 0x03, 0x23, 0x0e, 0x12, 0x93, 0x9f, 0x6d, 0x02, 0x0d, 0xbf, 0xe0, 0x77, 0x26, 0x7a, 0x40, 0xe8, 0xe3, 0xc4, 0x21, 0x9c, 0x5d, 0x3b, 0x1f, 0x04, 0x25, 0x89, 0x97, 0x66, 0xa5, 0x97, 0x0c, 0x90, 0x95, 0x06, 0x83, 0x85 }; static const uint8_t nist_186_2_ecdsa_testvector_181_public_y[] = { /* Qy - byte alignment */ 0x01, 0xc5, 0x57, 0xb8, 0x84, 0xef, 0x70, 0x03, 0xfd, 0x84, 0x69, 0x2b, 0x6b, 0x69, 0xcd, 0xa8, 0x5f, 0xf9, 0xb5, 0x86, 0xd5, 0xfd, 0x6a, 0xe2, 0x3a, 0xc9, 0x42, 0x1b, 0xb3, 0xb1, 0xb5, 0x70, 0x26, 0x5c, 0xa7, 0x7a }; /* k = 0c20977aed96ec8ec3abce9ed21ffd7f6469ef0696150418844edd960b9d7d90391ee7f */ static const uint8_t nist_186_2_ecdsa_testvector_181_out[] = { /* R - byte alignment */ 0x03, 0x07, 0x40, 0x7b, 0x6a, 0x2d, 0xcc, 0x40, 0x01, 0x2a, 0xdc, 0x4e, 0x7b, 0x72, 0xb4, 0xc1, 0x20, 0x02, 0xbf, 0x5c, 0x94, 0xb4, 0x40, 0x2c, 0x78, 0x53, 0x65, 0x81, 0x06, 0x48, 0xb8, 0xb3, 0x5a, 0x7d, 0xab, 0x10, /* S - byte alignment */ 0x01, 0xc4, 0x49, 0x49, 0x1c, 0xc8, 0xd5, 0x61, 0x06, 0x34, 0xb7, 0xb3, 0x6c, 0xf2, 0x8e, 0xc3, 0x0f, 0x08, 0xa3, 0xdb, 0xa2, 0x28, 0x02, 0x0a, 0x08, 0xb6, 0x46, 0x52, 0xda, 0xb5, 0xb1, 0xb8, 0x86, 0xbb, 0x5f, 0xcd }; static const uint8_t nist_186_2_ecdsa_testvector_182_ptx[] = { /* Msg */ 0xc0, 0x7b, 0xe7, 0xf9, 0x32, 0xe6, 0xa0, 0x20, 0x07, 0xcf, 0xef, 0x54, 0x4d, 0x99, 0xff, 0x1e, 0x38, 0x39, 0x3c, 0x51, 0x22, 0x31, 0x70, 0x9b, 0xd0, 0xc2, 0x2c, 0x5b, 0xf7, 0x5d, 0x6a, 0xb2, 0xfe, 0x5c, 0x70, 0xdd, 0x06, 0xef, 0xf8, 0xc2, 0x28, 0x59, 0x8d, 0xc8, 0xfd, 0x5c, 0x38, 0xec, 0x64, 0xf1, 0x5c, 0x12, 0x7f, 0x3d, 0xdf, 0x98, 0xff, 0xc1, 0x8a, 0x31, 0xa2, 0xd1, 0xb3, 0xf1, 0xf9, 0x47, 0x19, 0xa4, 0x6f, 0x78, 0x0f, 0x64, 0x87, 0x67, 0xdd, 0x6b, 0x65, 0x39, 0x63, 0x25, 0x90, 0xe9, 0xff, 0x89, 0xf6, 0x3d, 0xb1, 0xaa, 0x31, 0xf9, 0x7d, 0x89, 0x08, 0x52, 0x11, 0x2e, 0x39, 0xa5, 0xa8, 0xf7, 0x76, 0x69, 0x2e, 0x2f, 0xad, 0x63, 0xa5, 0xe2, 0x8c, 0x18, 0xc7, 0xf0, 0x45, 0x88, 0xed, 0x61, 0x8e, 0x19, 0x2f, 0xf8, 0xec, 0xd2, 0xcd, 0x0b, 0x32, 0xc9, 0xce, 0x92 }; static const uint8_t nist_186_2_ecdsa_testvector_182_private[] = { /* d - byte alignment */ 0x03, 0xa3, 0xa1, 0xc1, 0x6d, 0x76, 0xa6, 0xd7, 0x60, 0xcc, 0x20, 0x67, 0x05, 0x82, 0xd0, 0xc9, 0xf8, 0xd1, 0x9c, 0x99, 0x19, 0x59, 0x54, 0x8d, 0x46, 0x58, 0x91, 0xb7, 0xed, 0xcb, 0xd3, 0x3c, 0xb1, 0xf2, 0xf3, 0x4d }; static const uint8_t nist_186_2_ecdsa_testvector_182_public_x[] = { /* Qx - byte alignment */ 0x04, 0x3c, 0xf4, 0x26, 0x11, 0x9b, 0xdb, 0xa4, 0xb6, 0x83, 0x38, 0x8d, 0xd3, 0xc4, 0x90, 0x77, 0x71, 0x9e, 0xe3, 0x98, 0x9d, 0x29, 0x0d, 0x07, 0xb4, 0x9c, 0xf5, 0xf4, 0xf8, 0x24, 0x1e, 0xc4, 0xb3, 0xfa, 0x8a, 0x76 }; static const uint8_t nist_186_2_ecdsa_testvector_182_public_y[] = { /* Qy - byte alignment */ 0x01, 0x79, 0xe8, 0x77, 0xcb, 0x44, 0x8c, 0x84, 0x61, 0xca, 0x7f, 0x82, 0x52, 0x97, 0xec, 0x06, 0xc1, 0xac, 0x21, 0x60, 0x80, 0x88, 0x42, 0x08, 0xfe, 0x18, 0x51, 0x6d, 0xd0, 0xeb, 0x56, 0xec, 0x7a, 0xab, 0x9e, 0x2a }; /* k = 0f4568a9683e9da78745a492b8d3aea0a0f734abd1594687013f09aef361f34b806bdfb */ static const uint8_t nist_186_2_ecdsa_testvector_182_out[] = { /* R - byte alignment */ 0x02, 0xc0, 0x19, 0x76, 0xc9, 0x64, 0xe8, 0x46, 0xab, 0x4d, 0x05, 0xd4, 0x97, 0x85, 0x19, 0x84, 0x30, 0x1a, 0xb6, 0x80, 0xf1, 0xf3, 0xc1, 0x59, 0xda, 0x27, 0xed, 0x4f, 0x10, 0xc7, 0xe8, 0x53, 0x37, 0x27, 0x79, 0x56, /* S - byte alignment */ 0x02, 0xa2, 0xd8, 0x8d, 0xdf, 0x6b, 0x89, 0x57, 0xfb, 0x2c, 0x04, 0xda, 0x26, 0xe3, 0x38, 0x3e, 0xc8, 0x30, 0x58, 0x63, 0x6f, 0x8a, 0xcb, 0x8d, 0xdf, 0xc0, 0xb6, 0x39, 0x90, 0xf0, 0x33, 0x0e, 0x98, 0xce, 0xbc, 0xd7 }; static const uint8_t nist_186_2_ecdsa_testvector_183_ptx[] = { /* Msg */ 0x7a, 0xfd, 0xac, 0xad, 0x6e, 0x0d, 0xfe, 0x6d, 0x4c, 0x59, 0xa8, 0x09, 0xe6, 0x7d, 0x9f, 0x34, 0x76, 0xde, 0x8b, 0x85, 0x83, 0xf6, 0xcb, 0x70, 0x04, 0xec, 0xb9, 0x75, 0xc8, 0x68, 0x2f, 0x97, 0x15, 0xa5, 0x4a, 0x10, 0x90, 0xc8, 0x6d, 0x43, 0x5c, 0x70, 0x89, 0xf2, 0x86, 0x8e, 0x9c, 0xb1, 0xa1, 0x77, 0x78, 0x9b, 0xad, 0x37, 0xc6, 0x43, 0x3e, 0x28, 0x4a, 0xee, 0xda, 0xc4, 0x69, 0xff, 0xa2, 0xb8, 0xe8, 0xb2, 0x34, 0x39, 0xf6, 0x0d, 0xd1, 0x9b, 0x6d, 0x14, 0xbb, 0x20, 0x55, 0x3d, 0xe1, 0x0e, 0xaa, 0x23, 0xbe, 0x04, 0x5e, 0x7e, 0x7f, 0x8d, 0xa2, 0x53, 0x64, 0xf6, 0x62, 0x68, 0x68, 0x5d, 0x0e, 0xfb, 0x24, 0x0b, 0xa0, 0xb3, 0xf1, 0x04, 0xdb, 0xd7, 0x4d, 0xdb, 0xd0, 0xbe, 0x80, 0xcb, 0xa7, 0x87, 0x7f, 0x04, 0x9c, 0x0a, 0x10, 0x43, 0x48, 0x0d, 0x2f, 0xa5, 0x22, 0xbc }; static const uint8_t nist_186_2_ecdsa_testvector_183_private[] = { /* d - byte alignment */ 0x01, 0x18, 0x7c, 0xa0, 0x9d, 0xba, 0x19, 0x51, 0x0a, 0x5e, 0x55, 0x5a, 0xf2, 0x62, 0x6e, 0xd1, 0xfb, 0x00, 0x50, 0x72, 0xbe, 0x13, 0x0d, 0x77, 0x45, 0xd7, 0xd4, 0xc0, 0x43, 0x13, 0x62, 0xd0, 0x49, 0x81, 0xa5, 0x5b }; static const uint8_t nist_186_2_ecdsa_testvector_183_public_x[] = { /* Qx - byte alignment */ 0x00, 0x5c, 0xd1, 0x3a, 0xe1, 0xe8, 0xfd, 0x9c, 0x9b, 0x02, 0x50, 0xf2, 0xfa, 0xe1, 0x5b, 0xa4, 0x9b, 0xb5, 0x9b, 0x03, 0x77, 0xff, 0x48, 0x05, 0x36, 0x1f, 0x83, 0x9a, 0x95, 0x8e, 0x41, 0x42, 0x36, 0x8b, 0xc6, 0xa6 }; static const uint8_t nist_186_2_ecdsa_testvector_183_public_y[] = { /* Qy - byte alignment */ 0x00, 0xc3, 0x1a, 0x44, 0x1a, 0x21, 0x36, 0x8a, 0x40, 0xe3, 0x6b, 0x17, 0x09, 0x0e, 0x9b, 0x5e, 0x11, 0xf1, 0x9a, 0x72, 0xd6, 0x40, 0xa2, 0x1f, 0x02, 0x9d, 0x61, 0x13, 0x4c, 0xca, 0xed, 0xa9, 0x50, 0x99, 0xdb, 0xec }; /* k = 2e23b033f329a2b605c8cdee982b78099be3157b06b32bbd4fe10bb475c2fca92c55a54 */ static const uint8_t nist_186_2_ecdsa_testvector_183_out[] = { /* R - byte alignment */ 0x02, 0x1d, 0xb5, 0xc4, 0x50, 0x3c, 0x3b, 0x7d, 0x8b, 0x51, 0x63, 0x1f, 0x39, 0x26, 0xeb, 0x8e, 0x9d, 0xf2, 0x49, 0x5a, 0xa2, 0xef, 0x17, 0x3c, 0x29, 0x4b, 0xf9, 0xe4, 0xc5, 0x60, 0xe0, 0xb2, 0xc4, 0x64, 0x03, 0x15, /* S - byte alignment */ 0x00, 0x56, 0x14, 0x22, 0xc5, 0x55, 0x9c, 0x17, 0x00, 0xac, 0xf6, 0xc8, 0xb2, 0x13, 0xfa, 0x04, 0xf0, 0x1c, 0x1f, 0x3f, 0xaa, 0x2d, 0x84, 0x79, 0x0e, 0xd7, 0x40, 0xa4, 0xdf, 0xc1, 0x0f, 0xce, 0xf6, 0x0c, 0x9d, 0x9b }; static const uint8_t nist_186_2_ecdsa_testvector_184_ptx[] = { /* Msg */ 0xf3, 0x6d, 0x12, 0x96, 0x9c, 0x07, 0xbf, 0x5b, 0x2b, 0xfe, 0x30, 0x48, 0xe5, 0x90, 0x7a, 0xb0, 0x1e, 0xd3, 0x27, 0x82, 0x5a, 0x4b, 0x7f, 0x7b, 0xb1, 0xbc, 0x06, 0x9a, 0x78, 0x3d, 0x45, 0xd5, 0x1d, 0x8e, 0xcd, 0x0a, 0x53, 0xab, 0x7a, 0x38, 0x6f, 0xa1, 0xf5, 0xef, 0x12, 0xa1, 0x7c, 0x05, 0x09, 0x53, 0xe6, 0x8b, 0x71, 0x6c, 0xe1, 0xff, 0x1f, 0x83, 0x7f, 0xc3, 0x3f, 0x21, 0xf1, 0xce, 0x3a, 0x17, 0x92, 0xa2, 0xde, 0x14, 0x27, 0x7e, 0xb9, 0x76, 0x64, 0xd4, 0xc5, 0x61, 0xb3, 0xfd, 0x4b, 0x0e, 0x32, 0x2c, 0x01, 0x66, 0xfa, 0xa1, 0x75, 0xd0, 0xa7, 0x1f, 0xaf, 0x47, 0x15, 0x9f, 0x12, 0xaf, 0x67, 0x46, 0x84, 0x69, 0x4e, 0x95, 0xcf, 0x25, 0x88, 0xe0, 0x46, 0xf7, 0xa6, 0x01, 0xab, 0xae, 0x13, 0x4d, 0x50, 0x61, 0x52, 0xc7, 0x7d, 0x4a, 0x87, 0x94, 0x12, 0xd7, 0x39, 0xaf }; static const uint8_t nist_186_2_ecdsa_testvector_184_private[] = { /* d - byte alignment */ 0x02, 0xdf, 0x90, 0x2b, 0xc8, 0xa6, 0x55, 0x0a, 0x1c, 0x3c, 0xf3, 0x80, 0x3a, 0x38, 0x91, 0xe8, 0x94, 0xc3, 0xbe, 0xb5, 0x6d, 0xc0, 0x06, 0xb9, 0x49, 0xb8, 0x26, 0x03, 0xd7, 0x64, 0xe1, 0x81, 0x91, 0xd0, 0xf4, 0x90 }; static const uint8_t nist_186_2_ecdsa_testvector_184_public_x[] = { /* Qx - byte alignment */ 0x05, 0x37, 0xf9, 0x64, 0x6c, 0x9c, 0x0d, 0xdb, 0x8d, 0x88, 0x1f, 0xef, 0x33, 0x1c, 0x5c, 0xbf, 0xaf, 0xe8, 0x25, 0x77, 0x11, 0xbd, 0x3e, 0xa0, 0xf6, 0xdc, 0xb0, 0xaf, 0xbe, 0x12, 0x2b, 0xc0, 0xf0, 0xeb, 0x5c, 0x9e }; static const uint8_t nist_186_2_ecdsa_testvector_184_public_y[] = { /* Qy - byte alignment */ 0x06, 0x6b, 0xcd, 0x06, 0xcd, 0x95, 0xa5, 0xa6, 0xdf, 0x5a, 0x4d, 0xbd, 0x6a, 0x5a, 0xdb, 0x9e, 0x3a, 0xb0, 0x8a, 0x4b, 0x30, 0xae, 0x54, 0x98, 0x4a, 0x5a, 0x36, 0x65, 0xca, 0x98, 0xd0, 0xee, 0x86, 0xa7, 0x0c, 0xf5 }; /* k = 01e4cfdf4a0d809bf6e464fe6c1561672571b40ed9aa78d4546d4719ccbc32ec81da657 */ static const uint8_t nist_186_2_ecdsa_testvector_184_out[] = { /* R - byte alignment */ 0x00, 0xf9, 0x55, 0x29, 0xf3, 0xf4, 0x78, 0x6d, 0xdb, 0xbd, 0x90, 0xb6, 0x35, 0x8d, 0xf8, 0x88, 0x42, 0x83, 0xd3, 0xe8, 0xc3, 0x6c, 0xda, 0xe5, 0xb3, 0x83, 0x14, 0xb9, 0xb3, 0x10, 0x50, 0xba, 0xbf, 0xd8, 0x17, 0xd6, /* S - byte alignment */ 0x03, 0xe7, 0x6e, 0x4a, 0xd3, 0x9c, 0xff, 0xa3, 0x8b, 0x3f, 0x2b, 0xb5, 0x43, 0x53, 0xd1, 0xda, 0x6c, 0x53, 0x8c, 0xd1, 0x47, 0xc4, 0x5e, 0xea, 0x83, 0xfe, 0xe3, 0x32, 0x5b, 0xdb, 0xa6, 0xa2, 0x92, 0x39, 0x95, 0x32 }; static const uint8_t nist_186_2_ecdsa_testvector_185_ptx[] = { /* Msg */ 0x4d, 0xfc, 0x7c, 0x45, 0x3b, 0xd2, 0x55, 0xe6, 0x17, 0x48, 0x14, 0x85, 0xe3, 0x28, 0xeb, 0xde, 0x7d, 0xa7, 0xc9, 0x73, 0x73, 0xea, 0xd1, 0x2c, 0x18, 0xc8, 0x0a, 0x41, 0xd8, 0xd2, 0x58, 0x59, 0xc8, 0x90, 0xab, 0xf4, 0x81, 0x0e, 0x76, 0x06, 0x2f, 0x97, 0x63, 0xe4, 0xe5, 0xc1, 0x45, 0x64, 0x34, 0xaa, 0x4d, 0x40, 0xfb, 0x80, 0x82, 0xbc, 0x80, 0x47, 0x6b, 0x89, 0xc0, 0xd6, 0x0e, 0xe8, 0x04, 0x23, 0x1f, 0x13, 0xb5, 0xc1, 0x71, 0xd8, 0x71, 0xa7, 0xb0, 0x87, 0x5e, 0x33, 0x52, 0x0e, 0xbf, 0x6f, 0xcb, 0x63, 0xc5, 0x92, 0x00, 0x22, 0xa7, 0xca, 0xff, 0x78, 0xf5, 0x38, 0xed, 0x3f, 0x29, 0x3c, 0x3f, 0x6a, 0x7f, 0xf4, 0x2e, 0xa4, 0x06, 0xff, 0x64, 0x34, 0xf7, 0x87, 0xfc, 0x24, 0x46, 0x7e, 0xa9, 0xa2, 0x78, 0x27, 0x35, 0xa6, 0xb4, 0xd9, 0x2e, 0xd5, 0x1c, 0x00, 0xdc, 0xa6 }; static const uint8_t nist_186_2_ecdsa_testvector_185_private[] = { /* d - byte alignment */ 0x02, 0x99, 0xcb, 0xae, 0xc3, 0x25, 0x75, 0xd3, 0x64, 0x9f, 0xaf, 0xb0, 0xa5, 0xa3, 0xe5, 0x19, 0xa1, 0x64, 0x1f, 0xc3, 0xa5, 0x07, 0x95, 0xb1, 0x2e, 0x95, 0xb9, 0xf2, 0xda, 0xa7, 0xb2, 0x72, 0x76, 0xf5, 0x0e, 0xc7 }; static const uint8_t nist_186_2_ecdsa_testvector_185_public_x[] = { /* Qx - byte alignment */ 0x06, 0x86, 0xfc, 0xf9, 0x70, 0x31, 0x83, 0xc1, 0xe8, 0xb0, 0x4b, 0x4d, 0xcf, 0xfb, 0x90, 0xd2, 0x97, 0x4c, 0x78, 0xcc, 0x5e, 0x95, 0xb6, 0x55, 0xdb, 0x23, 0x6b, 0x23, 0x4f, 0x8a, 0x7e, 0x25, 0xbc, 0xa9, 0x81, 0xfa }; static const uint8_t nist_186_2_ecdsa_testvector_185_public_y[] = { /* Qy - byte alignment */ 0x04, 0xfe, 0x9b, 0x68, 0x60, 0xff, 0x39, 0xed, 0x30, 0x1d, 0x94, 0xf8, 0x38, 0xbf, 0x1f, 0x2a, 0xb9, 0xda, 0x1f, 0x21, 0x5c, 0x3a, 0x78, 0x23, 0xa0, 0xe9, 0x6d, 0x94, 0xca, 0x54, 0x79, 0xa6, 0x61, 0xf4, 0x85, 0x34 }; /* k = 2b71bc909d8ca418ebf17c6ca61fb51d839b44989991023ff35d556c98c788c5922e877 */ static const uint8_t nist_186_2_ecdsa_testvector_185_out[] = { /* R - byte alignment */ 0x03, 0x63, 0x16, 0x8d, 0x66, 0x5a, 0x86, 0xea, 0xef, 0x81, 0x16, 0x1c, 0x49, 0xa2, 0xf9, 0x60, 0x73, 0x7f, 0x60, 0x9c, 0x18, 0xad, 0x30, 0x59, 0xf5, 0xf6, 0xc8, 0xbd, 0x7f, 0xaf, 0xf1, 0x91, 0x89, 0xb5, 0x71, 0x18, /* S - byte alignment */ 0x00, 0xbe, 0xfa, 0x58, 0x07, 0xde, 0x6b, 0x72, 0x2d, 0x0c, 0xa5, 0x15, 0xa4, 0x97, 0xf3, 0xca, 0x83, 0xe7, 0x5e, 0x1b, 0x09, 0xcf, 0x4b, 0x0a, 0xbd, 0x14, 0xb8, 0x99, 0xfc, 0x49, 0x6e, 0x63, 0xd2, 0x1a, 0xc0, 0x06 }; static const uint8_t nist_186_2_ecdsa_testvector_186_ptx[] = { /* Msg */ 0x8e, 0x96, 0x36, 0x9a, 0x51, 0x77, 0x58, 0x2f, 0xea, 0xe5, 0x9c, 0xf4, 0x27, 0xca, 0x58, 0xb8, 0x2b, 0x0c, 0xeb, 0x32, 0x63, 0xb3, 0x4f, 0x43, 0xbb, 0x4a, 0xee, 0x7c, 0x11, 0x87, 0xb7, 0xe0, 0xe9, 0x2e, 0x70, 0xeb, 0x63, 0x32, 0x4e, 0xd3, 0x6b, 0x1d, 0xc3, 0x0d, 0x30, 0xb3, 0x97, 0x13, 0xd7, 0xd2, 0x3a, 0x65, 0x70, 0x9d, 0x59, 0xcd, 0x29, 0xda, 0xaf, 0xe8, 0xc1, 0x97, 0x1e, 0xe2, 0x40, 0x14, 0xfe, 0x81, 0xe6, 0xdd, 0xb5, 0x65, 0x61, 0x37, 0x87, 0x8e, 0x43, 0xbd, 0xb0, 0x1e, 0xb2, 0x4b, 0xb0, 0x60, 0x61, 0x1b, 0xe7, 0x0a, 0xc0, 0x2e, 0x61, 0xbf, 0x70, 0xee, 0xf3, 0xd8, 0xfa, 0x11, 0x87, 0x64, 0xc0, 0xc0, 0xb4, 0x6d, 0x34, 0xf9, 0x92, 0x7e, 0x47, 0x32, 0xcc, 0x61, 0x25, 0x3f, 0xf6, 0x2d, 0x1f, 0x75, 0x21, 0x81, 0xe8, 0x10, 0xad, 0x0a, 0x05, 0xd2, 0x5f, 0x4b }; static const uint8_t nist_186_2_ecdsa_testvector_186_private[] = { /* d - byte alignment */ 0x03, 0x2e, 0x5f, 0x90, 0xe7, 0xb2, 0xd3, 0x67, 0x62, 0x69, 0x70, 0x0e, 0x54, 0x91, 0x1d, 0x2f, 0x93, 0x69, 0xb1, 0xbd, 0x4f, 0xe7, 0x6a, 0x80, 0x97, 0xf0, 0xfa, 0x88, 0x01, 0xe4, 0xdb, 0xe0, 0xcc, 0xd6, 0x3c, 0x48 }; static const uint8_t nist_186_2_ecdsa_testvector_186_public_x[] = { /* Qx - byte alignment */ 0x01, 0xf5, 0x64, 0xb6, 0x7c, 0x00, 0x09, 0xb3, 0x85, 0xd0, 0x33, 0xc4, 0x71, 0x8e, 0xd0, 0xbc, 0x33, 0x58, 0x9e, 0xa3, 0x2a, 0x25, 0xe5, 0xff, 0xca, 0x8d, 0x06, 0x0a, 0xf5, 0x8e, 0x3f, 0x2a, 0x9f, 0xd6, 0x74, 0x87 }; static const uint8_t nist_186_2_ecdsa_testvector_186_public_y[] = { /* Qy - byte alignment */ 0x04, 0x4f, 0x74, 0xeb, 0xdd, 0x5f, 0x03, 0x87, 0xf3, 0xb4, 0x27, 0x3f, 0x2d, 0xb6, 0x1d, 0xb0, 0xff, 0x8d, 0xd6, 0xee, 0xbd, 0xaa, 0xd8, 0xb3, 0xb2, 0xdf, 0xa5, 0x34, 0x0e, 0x59, 0xea, 0x34, 0xb2, 0xfe, 0x63, 0xb6 }; /* k = 33c1685b8aa35959f6e76228bf71f3d1ddcd04ea6c39f153fd34b21407ea001d74d1c79 */ static const uint8_t nist_186_2_ecdsa_testvector_186_out[] = { /* R - byte alignment */ 0x00, 0x95, 0x45, 0x89, 0x47, 0x0e, 0x0e, 0x87, 0xd5, 0x3a, 0xc0, 0x2b, 0xfc, 0x08, 0x42, 0x07, 0x30, 0x2b, 0x62, 0x14, 0xa9, 0xdb, 0x45, 0xfb, 0xdf, 0x66, 0xb1, 0x9e, 0x61, 0x85, 0x10, 0xe1, 0xdd, 0x92, 0x80, 0xe4, /* S - byte alignment */ 0x01, 0xc6, 0xd7, 0x91, 0xa8, 0x5b, 0x7c, 0x75, 0xcc, 0xc3, 0x29, 0xf4, 0x18, 0x5b, 0xb5, 0x94, 0x78, 0x66, 0xcc, 0x65, 0xe0, 0xd7, 0x27, 0x84, 0x5f, 0x9a, 0xf0, 0x61, 0xfe, 0x1f, 0x88, 0x08, 0x72, 0x1c, 0x1b, 0x9c }; static const uint8_t nist_186_2_ecdsa_testvector_187_ptx[] = { /* Msg */ 0x48, 0x8a, 0xfd, 0x29, 0x87, 0x79, 0x70, 0x54, 0xbc, 0xfa, 0xcc, 0xe1, 0x73, 0xfb, 0x9c, 0x40, 0x2f, 0x81, 0x1c, 0xcb, 0xaf, 0xe1, 0x9d, 0x9d, 0x6f, 0x33, 0x2b, 0xa8, 0x72, 0x04, 0x6e, 0x02, 0x3f, 0x4b, 0xce, 0x80, 0x2a, 0x9e, 0xda, 0x86, 0xd4, 0xa6, 0xeb, 0x1d, 0xf5, 0xd1, 0x04, 0x46, 0x59, 0x46, 0xfd, 0x8f, 0x29, 0x1e, 0xe1, 0xe3, 0x6c, 0xd1, 0x94, 0xa6, 0xcd, 0xee, 0xb9, 0x02, 0x9f, 0x10, 0xd2, 0x7b, 0x1e, 0x0d, 0xa9, 0xca, 0xf8, 0x70, 0xf0, 0xe8, 0x0c, 0x2a, 0x24, 0x69, 0x71, 0x84, 0xb7, 0x0b, 0xba, 0x58, 0x6d, 0x8f, 0x78, 0x81, 0x07, 0xc7, 0x01, 0x90, 0x1f, 0xf1, 0x70, 0xc0, 0x53, 0x43, 0xed, 0x2d, 0xa5, 0xc7, 0x2f, 0x40, 0x22, 0x69, 0x3e, 0x6e, 0xc2, 0x4f, 0x7e, 0x22, 0x90, 0x68, 0xe9, 0xf7, 0x0a, 0x48, 0x9c, 0x2b, 0xcb, 0x33, 0x95, 0x51, 0x67, 0x77 }; static const uint8_t nist_186_2_ecdsa_testvector_187_private[] = { /* d - byte alignment */ 0x02, 0x15, 0x2c, 0x3e, 0x39, 0x02, 0x8f, 0x07, 0xe7, 0xe3, 0xbe, 0x6c, 0x13, 0x2c, 0xd7, 0x3b, 0x65, 0xe8, 0xf3, 0x94, 0xfc, 0x57, 0x02, 0x0e, 0xcb, 0x3d, 0xa4, 0xc9, 0xa9, 0x07, 0x31, 0x49, 0xcb, 0x80, 0xcb, 0x90 }; static const uint8_t nist_186_2_ecdsa_testvector_187_public_x[] = { /* Qx - byte alignment */ 0x02, 0x12, 0x4d, 0x9f, 0x3a, 0x3a, 0x3c, 0x23, 0xf1, 0xc5, 0x89, 0xe4, 0x57, 0x9e, 0x7c, 0xd0, 0xf8, 0xe1, 0x86, 0x99, 0x78, 0x2e, 0xf9, 0x5b, 0xef, 0xd4, 0x33, 0x31, 0x95, 0x73, 0x57, 0x84, 0xc4, 0xbe, 0x3c, 0x05 }; static const uint8_t nist_186_2_ecdsa_testvector_187_public_y[] = { /* Qy - byte alignment */ 0x04, 0x36, 0xe2, 0xb0, 0x9b, 0xf2, 0x6e, 0xee, 0xa0, 0xcb, 0xeb, 0x8b, 0x93, 0xdb, 0xb3, 0x60, 0xae, 0x07, 0x36, 0x9a, 0xd9, 0x9d, 0x21, 0x10, 0xf9, 0x2d, 0x36, 0xe5, 0x04, 0xd5, 0x0c, 0x79, 0x91, 0xb0, 0x1e, 0x77 }; /* k = 34ca338d6fd6ef9815416b00cec2277972856cc3ff1eaa5e022ecba782084963aea90c7 */ static const uint8_t nist_186_2_ecdsa_testvector_187_out[] = { /* R - byte alignment */ 0x01, 0x60, 0xfb, 0x38, 0xf0, 0x9d, 0x0b, 0x90, 0x82, 0xf9, 0xcb, 0xdf, 0xab, 0xfc, 0x80, 0xb5, 0x80, 0xcb, 0x93, 0xee, 0xe2, 0x53, 0x20, 0x1b, 0x1e, 0x3e, 0xcd, 0xa1, 0xb8, 0x8f, 0x23, 0xe9, 0x7a, 0x5a, 0x8e, 0xb9, /* S - byte alignment */ 0x03, 0x20, 0xc8, 0x1b, 0xd2, 0x4f, 0xd6, 0x10, 0xa1, 0x25, 0xa8, 0xa8, 0x4e, 0xab, 0x73, 0x72, 0xcc, 0xe1, 0x7a, 0xad, 0x0f, 0xc6, 0xb7, 0xef, 0x49, 0x6b, 0xb3, 0xd0, 0xfd, 0x2b, 0xc6, 0xfa, 0xd1, 0x22, 0x9b, 0x12 }; static const uint8_t nist_186_2_ecdsa_testvector_188_ptx[] = { /* Msg */ 0x5f, 0x53, 0x8e, 0x87, 0xd3, 0xb6, 0x65, 0x44, 0x14, 0xcc, 0xd6, 0x13, 0x7a, 0x5f, 0x17, 0xa6, 0x03, 0x3e, 0x47, 0xed, 0xec, 0x86, 0xa3, 0x7f, 0x83, 0x20, 0xfc, 0x3b, 0x37, 0x8b, 0x69, 0x2f, 0xf1, 0xdc, 0x39, 0xb9, 0xa7, 0x03, 0x2b, 0xeb, 0x2e, 0x4f, 0xe2, 0x34, 0x4f, 0x35, 0x93, 0x3d, 0x1e, 0x4d, 0x01, 0x12, 0x87, 0x9d, 0xab, 0x82, 0x2a, 0x1a, 0x43, 0xc8, 0x69, 0x6c, 0x63, 0x6b, 0xbe, 0xf2, 0x7c, 0x62, 0x52, 0x06, 0x0f, 0x7c, 0xcc, 0x82, 0x1f, 0xff, 0x67, 0x82, 0xe6, 0x8f, 0x48, 0x6c, 0xc7, 0x52, 0x0e, 0x2e, 0x84, 0x52, 0xaa, 0xc7, 0xb1, 0x23, 0x71, 0x09, 0x68, 0xc5, 0x6f, 0x9d, 0x3f, 0xcb, 0xff, 0x47, 0x77, 0xbd, 0x99, 0x6b, 0x76, 0xbc, 0xea, 0xd1, 0x77, 0x64, 0x2a, 0xa5, 0x81, 0xf7, 0xaa, 0xc2, 0x95, 0xb7, 0xac, 0x30, 0x2c, 0x93, 0x78, 0xea, 0xe1, 0x06 }; static const uint8_t nist_186_2_ecdsa_testvector_188_private[] = { /* d - byte alignment */ 0x02, 0x1f, 0x71, 0x54, 0xf5, 0x23, 0xa0, 0xf3, 0x28, 0x92, 0x8f, 0x9b, 0x86, 0x63, 0xc0, 0x2a, 0x58, 0x8c, 0x4d, 0x9d, 0xa2, 0x8a, 0xe6, 0x55, 0xa3, 0x67, 0x91, 0x7e, 0x18, 0x78, 0xf2, 0xff, 0x39, 0x99, 0x7b, 0x38 }; static const uint8_t nist_186_2_ecdsa_testvector_188_public_x[] = { /* Qx - byte alignment */ 0x05, 0xa1, 0xbf, 0xc7, 0x0e, 0x68, 0xb4, 0xda, 0xf6, 0xe2, 0xde, 0x91, 0xf7, 0x51, 0xf6, 0x05, 0xbf, 0x16, 0xf3, 0x99, 0xd1, 0xc7, 0x00, 0xd4, 0x2c, 0x3d, 0xe8, 0x94, 0x4b, 0x00, 0x8d, 0x8b, 0x19, 0x71, 0x23, 0x82 }; static const uint8_t nist_186_2_ecdsa_testvector_188_public_y[] = { /* Qy - byte alignment */ 0x02, 0x03, 0xc3, 0x98, 0xda, 0x7c, 0xc1, 0xd2, 0x54, 0x2d, 0xcf, 0xc7, 0x30, 0x0a, 0x05, 0x9c, 0x2d, 0xad, 0xf8, 0x0e, 0xe9, 0x3b, 0x01, 0xb3, 0xf3, 0xa7, 0xcc, 0x8f, 0x67, 0xd8, 0x43, 0x5d, 0x54, 0xc9, 0xc2, 0x19 }; /* k = 3ccf0daf98653825495b36ef481a3d810fc81cd6dad82e7667780d6c7b08b462fe5c510 */ static const uint8_t nist_186_2_ecdsa_testvector_188_out[] = { /* R - byte alignment */ 0x00, 0xe1, 0xe8, 0x3a, 0x74, 0x62, 0xb5, 0xf4, 0xc0, 0xa2, 0xcd, 0x62, 0x47, 0x65, 0xfb, 0x50, 0xa4, 0x64, 0x05, 0x66, 0x85, 0x81, 0x4a, 0x70, 0xc6, 0x5d, 0x85, 0x5c, 0x8e, 0x3e, 0x96, 0x7f, 0x72, 0x58, 0x8f, 0xd0, /* S - byte alignment */ 0x03, 0x6b, 0x92, 0x69, 0x15, 0x11, 0xf9, 0xc0, 0x16, 0xdb, 0xd6, 0xda, 0xbf, 0xdf, 0x12, 0x61, 0x98, 0xee, 0x61, 0x11, 0x2e, 0x8a, 0x95, 0x0b, 0xca, 0xab, 0xca, 0x9f, 0xbd, 0x05, 0x6e, 0xd8, 0x1c, 0x96, 0xc1, 0x0b }; static const uint8_t nist_186_2_ecdsa_testvector_189_ptx[] = { /* Msg */ 0x36, 0xf7, 0x1a, 0xad, 0x73, 0x51, 0x13, 0xeb, 0x75, 0x53, 0x35, 0x4e, 0x32, 0xac, 0xc4, 0x18, 0xb5, 0xc3, 0xd6, 0x14, 0x68, 0xf1, 0xb7, 0x71, 0x92, 0xef, 0x8b, 0xd0, 0x1f, 0x8a, 0x35, 0x9c, 0xa0, 0x9e, 0x78, 0x9a, 0x92, 0x41, 0x5c, 0xc1, 0xe3, 0x3f, 0xd4, 0x4b, 0xb2, 0xc7, 0x9d, 0x0c, 0x57, 0x63, 0x69, 0x03, 0xa3, 0x2d, 0x3d, 0x2f, 0x68, 0x41, 0x18, 0xa3, 0x3c, 0x6e, 0xd5, 0xdd, 0x7b, 0x31, 0x52, 0x54, 0x8b, 0xe3, 0xd2, 0x50, 0x64, 0x31, 0xa0, 0xfe, 0x4f, 0xcd, 0xf6, 0xc4, 0xed, 0x63, 0x1c, 0xd2, 0x7c, 0xcf, 0xd4, 0xfa, 0x56, 0x8d, 0xf6, 0xc1, 0xba, 0x70, 0x58, 0xb6, 0xcf, 0x97, 0xf0, 0x02, 0xe6, 0x9e, 0x3d, 0x41, 0x00, 0x11, 0xe2, 0x90, 0x90, 0x26, 0x95, 0xe7, 0x82, 0xab, 0x37, 0xaa, 0x7b, 0x3d, 0x44, 0x7a, 0x63, 0xbb, 0x6e, 0x51, 0x21, 0xfa, 0x85, 0xce }; static const uint8_t nist_186_2_ecdsa_testvector_189_private[] = { /* d - byte alignment */ 0x03, 0xcb, 0xbe, 0xbf, 0xcd, 0x2d, 0xc6, 0x13, 0xbf, 0x16, 0xfc, 0xe4, 0x7b, 0xb4, 0xa0, 0xf7, 0xf7, 0xc3, 0x2b, 0x7a, 0xdf, 0x74, 0xfd, 0x85, 0x8f, 0xa1, 0x96, 0xa1, 0xc8, 0x7c, 0xf1, 0x52, 0xd0, 0xa0, 0x03, 0x19 }; static const uint8_t nist_186_2_ecdsa_testvector_189_public_x[] = { /* Qx - byte alignment */ 0x04, 0x5f, 0x75, 0x5e, 0x65, 0x7c, 0x50, 0xda, 0xd7, 0xdf, 0x12, 0x71, 0x7d, 0x7b, 0x0b, 0x17, 0x99, 0x3a, 0x90, 0x2a, 0x4f, 0xb4, 0xa2, 0xd5, 0x4f, 0x8b, 0xaa, 0x4f, 0xc0, 0x56, 0x06, 0x1f, 0x0d, 0x4a, 0xba, 0x07 }; static const uint8_t nist_186_2_ecdsa_testvector_189_public_y[] = { /* Qy - byte alignment */ 0x06, 0x52, 0xcf, 0x38, 0x73, 0x94, 0x95, 0x0f, 0xe9, 0xe0, 0xba, 0xcb, 0x73, 0xf5, 0x98, 0xea, 0x42, 0xe4, 0xf6, 0xe3, 0x86, 0x46, 0x71, 0x3a, 0x2f, 0x84, 0x66, 0xaf, 0x03, 0x33, 0xc4, 0x77, 0xc6, 0x67, 0xd1, 0x2f }; /* k = 0991a66ea073a99b9bde01e928ca6caba36af91ef9a6f1307e898eb15e90c8f15a08725 */ static const uint8_t nist_186_2_ecdsa_testvector_189_out[] = { /* R - byte alignment */ 0x01, 0x2a, 0x18, 0x33, 0x2c, 0xf4, 0xc8, 0x1e, 0x44, 0x09, 0xa4, 0x99, 0x30, 0x9f, 0xc0, 0xf7, 0xc2, 0x5d, 0x06, 0x97, 0x8c, 0x43, 0x8b, 0x4a, 0x5a, 0x5d, 0xd5, 0x09, 0x7e, 0x34, 0x53, 0xc6, 0x99, 0x81, 0xcb, 0x69, /* S - byte alignment */ 0x03, 0xbb, 0x17, 0xd7, 0xb8, 0x85, 0xbd, 0x26, 0x5c, 0xf9, 0x0d, 0x93, 0xc3, 0x61, 0x1f, 0xbf, 0x44, 0x7d, 0x17, 0xb6, 0x4a, 0x45, 0x39, 0x54, 0x94, 0xb4, 0x7e, 0x12, 0x94, 0x42, 0x0d, 0xa1, 0xe3, 0x94, 0x3e, 0xf2 }; static const uint8_t nist_186_2_ecdsa_testvector_190_ptx[] = { /* Msg */ 0x82, 0xe2, 0xdb, 0x12, 0xb8, 0xd5, 0x81, 0xe5, 0x32, 0xce, 0xa2, 0x9e, 0xf0, 0x1c, 0x60, 0xaa, 0x38, 0x3d, 0x54, 0x0f, 0x8b, 0xfe, 0x22, 0xad, 0xd7, 0xe4, 0x50, 0xc4, 0xee, 0xcb, 0x58, 0xb7, 0x37, 0xcd, 0xfb, 0x10, 0xa3, 0x65, 0xd9, 0xc3, 0xe3, 0xd4, 0x3f, 0xb7, 0xd9, 0xc4, 0x40, 0x82, 0x4c, 0x2c, 0x07, 0x75, 0xdf, 0x73, 0x6b, 0xd8, 0x44, 0xd8, 0xc4, 0x76, 0xad, 0x11, 0xfd, 0x5d, 0x83, 0x32, 0xeb, 0xdf, 0x5b, 0xd1, 0xdd, 0xdc, 0x26, 0x68, 0x75, 0x44, 0xa7, 0xfa, 0xb6, 0xd7, 0x2b, 0xfa, 0x5d, 0x2f, 0x74, 0x68, 0x75, 0x01, 0xf6, 0x3d, 0x26, 0xa0, 0x46, 0x09, 0xce, 0xc2, 0xcf, 0xdb, 0x53, 0x87, 0xc7, 0x61, 0xb7, 0xb7, 0x61, 0x50, 0xec, 0x4b, 0x44, 0x06, 0xea, 0x30, 0x3d, 0x6f, 0x00, 0x47, 0x30, 0x25, 0x67, 0xb0, 0x55, 0xdb, 0x1d, 0x48, 0xa0, 0xfb, 0xf0, 0x70 }; static const uint8_t nist_186_2_ecdsa_testvector_190_private[] = { /* d - byte alignment */ 0x03, 0xfb, 0x84, 0xca, 0xa7, 0xcb, 0xeb, 0x11, 0xd4, 0x91, 0x45, 0x95, 0x51, 0x0c, 0x5d, 0x02, 0xdd, 0x16, 0xd2, 0xd6, 0x58, 0x06, 0x47, 0x3e, 0x1d, 0x52, 0xd8, 0x2a, 0x20, 0xa0, 0x44, 0x42, 0x80, 0xd9, 0x1b, 0x6d }; static const uint8_t nist_186_2_ecdsa_testvector_190_public_x[] = { /* Qx - byte alignment */ 0x07, 0x52, 0x01, 0x15, 0x70, 0x50, 0xa7, 0x73, 0x71, 0x01, 0x73, 0x7e, 0xe9, 0x47, 0xd1, 0x65, 0x9d, 0x76, 0x69, 0x2b, 0x4d, 0x39, 0x1b, 0x99, 0x6d, 0x6e, 0x99, 0x55, 0x1a, 0x74, 0x2e, 0x31, 0x17, 0xb8, 0x53, 0x9f }; static const uint8_t nist_186_2_ecdsa_testvector_190_public_y[] = { /* Qy - byte alignment */ 0x00, 0x00, 0x99, 0xc1, 0xcf, 0x05, 0x77, 0xe0, 0x81, 0x13, 0x09, 0x57, 0x93, 0x09, 0x72, 0x19, 0x19, 0xe8, 0xd8, 0x9b, 0xae, 0xc5, 0xab, 0x83, 0xa1, 0x8e, 0x6b, 0x60, 0x9f, 0x70, 0x71, 0x2b, 0xf4, 0x9c, 0x13, 0x5b }; /* k = 3cc06e9dd24971a106849f45d780284e8fca99d19abd79aba02d07ded33006c601d6374 */ static const uint8_t nist_186_2_ecdsa_testvector_190_out[] = { /* R - byte alignment */ 0x03, 0xd9, 0x75, 0x57, 0x6d, 0x05, 0x48, 0x2e, 0x95, 0xca, 0x1e, 0xc8, 0x02, 0x30, 0xf9, 0x96, 0xa5, 0x7a, 0x43, 0x0a, 0x78, 0x5a, 0x7b, 0xf1, 0x48, 0xa6, 0x46, 0x77, 0x0c, 0x70, 0xd9, 0x05, 0x58, 0xb7, 0xdc, 0x65, /* S - byte alignment */ 0x02, 0xc5, 0x70, 0x0a, 0x18, 0x2f, 0xe3, 0x58, 0x54, 0xde, 0xbe, 0x4c, 0x13, 0xcd, 0x23, 0x19, 0x55, 0x5f, 0x4e, 0x18, 0x52, 0x4f, 0x8a, 0x50, 0x6b, 0xee, 0x3b, 0x75, 0x95, 0xe4, 0xb8, 0xf8, 0x01, 0xaa, 0x37, 0x99 }; static const uint8_t nist_186_2_ecdsa_testvector_191_ptx[] = { /* Msg */ 0xd3, 0x38, 0x3b, 0x11, 0x9c, 0xbf, 0x3b, 0x8b, 0x04, 0x4d, 0x87, 0x08, 0xa7, 0x58, 0xc9, 0x5f, 0x8e, 0x19, 0x63, 0x36, 0x5e, 0xf0, 0x4a, 0x7d, 0xcf, 0x04, 0x17, 0x3c, 0x60, 0x2a, 0x5b, 0x8f, 0x4a, 0x08, 0x33, 0xee, 0xb2, 0x7a, 0x1d, 0xb2, 0x22, 0x34, 0x0a, 0xd5, 0x3a, 0xa9, 0xb5, 0xfa, 0xa3, 0x2c, 0x32, 0xad, 0x45, 0x55, 0xca, 0xeb, 0xba, 0xa7, 0x06, 0xe5, 0x02, 0x6f, 0x0a, 0x01, 0x78, 0xef, 0x24, 0x22, 0x04, 0xbc, 0xa5, 0x29, 0x93, 0x65, 0xf0, 0xbc, 0xc4, 0x55, 0xd0, 0x46, 0xe4, 0xfb, 0x0f, 0x3e, 0x1d, 0x28, 0x44, 0xad, 0xea, 0xb8, 0xec, 0xea, 0xce, 0x74, 0xbc, 0xa8, 0x46, 0x37, 0x36, 0x33, 0xfc, 0x50, 0x7b, 0xf7, 0x3d, 0x28, 0x60, 0x42, 0xad, 0x25, 0xc3, 0x4b, 0x3a, 0xcd, 0x20, 0x72, 0x4e, 0x2f, 0x5f, 0xc9, 0x49, 0x7e, 0xf0, 0xd4, 0x2e, 0x00, 0x1a, 0x8d }; static const uint8_t nist_186_2_ecdsa_testvector_191_private[] = { /* d - byte alignment */ 0x02, 0xe3, 0x01, 0x5f, 0xc3, 0x01, 0x78, 0x20, 0x19, 0x46, 0x19, 0xb9, 0x2a, 0xb7, 0x51, 0xa8, 0x25, 0x5c, 0xd2, 0xfd, 0xab, 0x80, 0x6b, 0xb5, 0x7b, 0x12, 0x18, 0xa8, 0xce, 0xca, 0xfe, 0x26, 0xe9, 0xf6, 0xa5, 0x12 }; static const uint8_t nist_186_2_ecdsa_testvector_191_public_x[] = { /* Qx - byte alignment */ 0x00, 0x61, 0x5a, 0xb2, 0x40, 0xb7, 0xd2, 0x04, 0xa8, 0x25, 0x0d, 0x37, 0xfc, 0x3d, 0x29, 0x89, 0xde, 0x1b, 0x49, 0xde, 0x75, 0xa9, 0x62, 0x79, 0xa6, 0x40, 0xe6, 0x12, 0x85, 0xe5, 0x00, 0x4d, 0xb5, 0x07, 0xd1, 0xa3 }; static const uint8_t nist_186_2_ecdsa_testvector_191_public_y[] = { /* Qy - byte alignment */ 0x02, 0x6b, 0x8b, 0xe9, 0x30, 0xdf, 0x02, 0x42, 0x48, 0x56, 0xe0, 0x53, 0xbf, 0x93, 0x6d, 0xbc, 0xf2, 0xe9, 0xee, 0xf6, 0x1d, 0x24, 0x19, 0xc4, 0x53, 0x29, 0x3c, 0x37, 0xc9, 0x75, 0x41, 0xe9, 0xb6, 0x31, 0x60, 0x66 }; /* k = 194b411a9fbd218da63883fa439585a9c86a0e4f4a2526b6eab8de30e959e0a5872f3d3 */ static const uint8_t nist_186_2_ecdsa_testvector_191_out[] = { /* R - byte alignment */ 0x02, 0xba, 0x5a, 0xb6, 0x22, 0x4c, 0x46, 0x5b, 0xa1, 0x44, 0x09, 0xd9, 0x18, 0xdf, 0x41, 0xb0, 0xc8, 0x90, 0x9a, 0xba, 0x61, 0x1b, 0xb8, 0xf2, 0xf5, 0x25, 0xdc, 0xa1, 0x6c, 0xa0, 0x37, 0x9c, 0x74, 0x27, 0xcb, 0x2c, /* S - byte alignment */ 0x00, 0x71, 0x1f, 0x14, 0x2d, 0x5e, 0x68, 0xde, 0x71, 0x6e, 0x2a, 0xb6, 0x6f, 0x50, 0xf9, 0xbe, 0xe8, 0xa8, 0x66, 0x76, 0xe0, 0x3a, 0x74, 0x88, 0xb6, 0x38, 0xf8, 0x66, 0x57, 0x46, 0xf2, 0xb5, 0x2d, 0x4e, 0x64, 0x2d }; static const uint8_t nist_186_2_ecdsa_testvector_192_ptx[] = { /* Msg */ 0x6b, 0x58, 0x16, 0xfe, 0xd0, 0xe5, 0x75, 0x09, 0x71, 0xff, 0x79, 0x4d, 0xf9, 0xac, 0xdb, 0x2b, 0x91, 0x88, 0x97, 0x3f, 0xbd, 0x18, 0xf3, 0x4a, 0x80, 0x5c, 0xbd, 0x6f, 0xc7, 0xa3, 0xd4, 0xa3, 0x05, 0xa3, 0xea, 0x5f, 0x1a, 0xc9, 0x87, 0x97, 0x79, 0xce, 0x51, 0xf0, 0x8a, 0x8b, 0x8c, 0x2e, 0x4d, 0x0e, 0xdd, 0xeb, 0x41, 0xed, 0x53, 0x8f, 0x84, 0xda, 0xa7, 0x7c, 0x3b, 0x78, 0xc3, 0x89, 0x34, 0x6e, 0x82, 0xb2, 0xca, 0xb9, 0xb7, 0x0e, 0x09, 0x46, 0x70, 0x01, 0x13, 0xc0, 0x7c, 0xb2, 0xc2, 0xa7, 0x2a, 0xbf, 0x8f, 0xa2, 0x54, 0x30, 0xb3, 0x16, 0x9c, 0xaa, 0x8c, 0xf7, 0xf6, 0xe5, 0x41, 0xde, 0x67, 0x60, 0xa9, 0x5c, 0x0c, 0x54, 0x69, 0x8f, 0x5d, 0xe6, 0x5d, 0xf2, 0xb3, 0xa0, 0x3a, 0x79, 0x08, 0x22, 0x71, 0xde, 0xfe, 0x15, 0x56, 0x35, 0x23, 0x61, 0x81, 0xc7, 0x74, 0xa0 }; static const uint8_t nist_186_2_ecdsa_testvector_192_private[] = { /* d - byte alignment */ 0x03, 0x9f, 0x1b, 0x78, 0x58, 0x8a, 0x7a, 0xee, 0x6f, 0x2b, 0x05, 0x23, 0xa4, 0x88, 0x58, 0x8b, 0xea, 0xc1, 0x21, 0xaf, 0x07, 0x22, 0x95, 0xd0, 0x9c, 0x1b, 0x00, 0xcb, 0xce, 0xd9, 0xf6, 0xf3, 0x5d, 0xed, 0xe5, 0xd1 }; static const uint8_t nist_186_2_ecdsa_testvector_192_public_x[] = { /* Qx - byte alignment */ 0x06, 0x46, 0x51, 0x62, 0x5b, 0xcd, 0xfe, 0xdc, 0x22, 0x12, 0xa5, 0x33, 0xc8, 0x07, 0xec, 0x31, 0x64, 0xbe, 0x42, 0x13, 0x3b, 0x4f, 0xbf, 0x8b, 0xa2, 0xd8, 0x0c, 0xf1, 0xef, 0x17, 0x11, 0xec, 0x3a, 0x5f, 0xb8, 0x43 }; static const uint8_t nist_186_2_ecdsa_testvector_192_public_y[] = { /* Qy - byte alignment */ 0x07, 0x0a, 0xae, 0x79, 0xc0, 0x17, 0xd3, 0x45, 0x25, 0x6d, 0x43, 0x50, 0xb8, 0x44, 0xaa, 0x20, 0x42, 0x9b, 0x2c, 0x49, 0x8d, 0x64, 0x9d, 0x35, 0x97, 0x47, 0xd8, 0x84, 0x56, 0x03, 0x4c, 0x5b, 0xb4, 0x39, 0xe3, 0x28 }; /* k = 07480702d0232848fb242113f468c39d83ccf4bce0451b29f379297dfbc78b7cc782477 */ static const uint8_t nist_186_2_ecdsa_testvector_192_out[] = { /* R - byte alignment */ 0x00, 0xf8, 0xe9, 0xbd, 0x16, 0xf8, 0xd2, 0x21, 0x06, 0x58, 0x69, 0x14, 0xc7, 0x87, 0x39, 0x2c, 0x35, 0xfe, 0xd3, 0xf5, 0xaf, 0xdc, 0x12, 0x06, 0xfd, 0x4b, 0x07, 0x3d, 0x9c, 0xbb, 0x87, 0x88, 0x3a, 0x99, 0xbb, 0xe0, /* S - byte alignment */ 0x00, 0x52, 0x05, 0x5f, 0x74, 0x2b, 0x05, 0xc5, 0x56, 0x79, 0xcf, 0xcc, 0x1b, 0x7a, 0xe0, 0x17, 0xce, 0x08, 0xc7, 0x95, 0x6e, 0x5d, 0x76, 0xc1, 0xad, 0xa0, 0x2a, 0x69, 0x80, 0xa5, 0x53, 0xee, 0x96, 0xc2, 0x59, 0xf2 }; static const uint8_t nist_186_2_ecdsa_testvector_193_ptx[] = { /* Msg */ 0x6b, 0xea, 0xfa, 0x91, 0x27, 0x47, 0x75, 0xaf, 0x63, 0x12, 0xd1, 0xa2, 0xb3, 0xe4, 0x55, 0x66, 0xb7, 0x2a, 0xc9, 0x73, 0x92, 0xcc, 0x88, 0x88, 0x9e, 0x0d, 0xd7, 0xa7, 0x5f, 0xb3, 0x75, 0x60, 0xb5, 0x67, 0x74, 0x53, 0x55, 0x5e, 0x46, 0xf1, 0x79, 0x39, 0x1b, 0x82, 0xd7, 0x2a, 0x6b, 0x6c, 0xd0, 0x59, 0xce, 0xb2, 0xeb, 0x86, 0x14, 0xbb, 0x81, 0xef, 0x92, 0x55, 0xba, 0x74, 0xba, 0xf9, 0xb8, 0xf9, 0xef, 0x51, 0x11, 0x0c, 0x97, 0xf7, 0x83, 0xc7, 0x71, 0x80, 0xe3, 0xf8, 0x28, 0xb9, 0x57, 0x80, 0x29, 0x30, 0xc5, 0xf9, 0xb2, 0xf6, 0x8b, 0x9c, 0x2c, 0xa4, 0x71, 0x61, 0xbb, 0x9c, 0xdb, 0x67, 0x13, 0x91, 0x44, 0x97, 0x8d, 0x4a, 0xe7, 0x85, 0x7a, 0xa2, 0xbf, 0x96, 0xb7, 0xd4, 0xb2, 0x68, 0x82, 0xf5, 0x0a, 0x6e, 0x8b, 0xc2, 0x24, 0xdb, 0x4e, 0x9c, 0x6c, 0xc2, 0xa1, 0xd1 }; static const uint8_t nist_186_2_ecdsa_testvector_193_private[] = { /* d - byte alignment */ 0x00, 0x8d, 0x2e, 0x32, 0x5a, 0xd4, 0xaf, 0x49, 0xfe, 0x2e, 0x60, 0xd7, 0xff, 0xab, 0xee, 0xc2, 0x42, 0xf4, 0x76, 0xd2, 0xac, 0xe5, 0x27, 0x3f, 0x00, 0x45, 0xe3, 0xb5, 0x15, 0xd1, 0x65, 0x20, 0x9a, 0x09, 0xfd, 0x60 }; static const uint8_t nist_186_2_ecdsa_testvector_193_public_x[] = { /* Qx - byte alignment */ 0x04, 0x63, 0x74, 0x38, 0x13, 0x86, 0x12, 0xce, 0xad, 0x95, 0x84, 0x6c, 0x71, 0x6e, 0x3f, 0xdf, 0x8b, 0xd1, 0xa9, 0x0d, 0x99, 0xda, 0x93, 0xcd, 0xc6, 0x08, 0xbd, 0x42, 0x83, 0x31, 0x7a, 0xfe, 0x05, 0x36, 0x69, 0xe1 }; static const uint8_t nist_186_2_ecdsa_testvector_193_public_y[] = { /* Qy - byte alignment */ 0x03, 0xf7, 0x81, 0x99, 0x62, 0x2b, 0x25, 0x16, 0x58, 0xa2, 0xe7, 0x3f, 0x5d, 0x0b, 0x74, 0xa2, 0xb4, 0xae, 0x88, 0x11, 0x19, 0xb9, 0x74, 0xfa, 0xf0, 0xb6, 0x5f, 0xed, 0x8b, 0x21, 0x75, 0x95, 0xaa, 0x94, 0x10, 0x3e }; /* k = 0a06efb818ad3ba2f917b8003c0c1c18a4196c94a8e2b42612ed53ed71859c6a1353bf0 */ static const uint8_t nist_186_2_ecdsa_testvector_193_out[] = { /* R - byte alignment */ 0x01, 0x45, 0x4c, 0x36, 0x2f, 0x36, 0xee, 0x53, 0x2f, 0x11, 0x0c, 0x39, 0x53, 0xdc, 0x6a, 0xa1, 0x31, 0xbd, 0xa4, 0x71, 0xb4, 0x98, 0x06, 0x0e, 0xf8, 0x6e, 0xf3, 0x53, 0x3b, 0x3d, 0xcd, 0x92, 0x34, 0x98, 0xda, 0x4b, /* S - byte alignment */ 0x03, 0xff, 0x22, 0x58, 0x3b, 0x80, 0x5c, 0xc8, 0xfe, 0xa3, 0x03, 0x48, 0x8b, 0x13, 0x22, 0x13, 0x49, 0x69, 0xd8, 0x6e, 0xe4, 0xe2, 0x43, 0xcf, 0x5b, 0x49, 0xa7, 0x7c, 0x4d, 0x85, 0x71, 0xfe, 0xa7, 0xff, 0x27, 0xce }; static const uint8_t nist_186_2_ecdsa_testvector_194_ptx[] = { /* Msg */ 0x3a, 0x5e, 0x0b, 0xeb, 0x07, 0x2c, 0x40, 0xa7, 0xfa, 0x1c, 0x52, 0x0e, 0x36, 0x57, 0x14, 0xaf, 0xdd, 0x08, 0x56, 0x2d, 0xd2, 0x10, 0xc3, 0x96, 0xc4, 0xfa, 0x0a, 0xf1, 0x68, 0x31, 0x3c, 0x16, 0x05, 0x70, 0x75, 0xc3, 0x36, 0x7b, 0xbf, 0xeb, 0xec, 0x0d, 0x33, 0x51, 0xb2, 0x11, 0x62, 0x56, 0x35, 0x14, 0xf3, 0x0f, 0x03, 0xfb, 0x8d, 0x9b, 0x93, 0xf1, 0xf7, 0xb4, 0x86, 0xa4, 0x7d, 0x83, 0x2c, 0xb1, 0x96, 0xb9, 0x4a, 0x5c, 0xc5, 0xdb, 0x1a, 0x85, 0xbd, 0xdd, 0x94, 0xd8, 0xc8, 0xf3, 0xec, 0x43, 0x69, 0xa4, 0x5c, 0xad, 0x40, 0x20, 0x23, 0xe5, 0x2f, 0xd3, 0xce, 0xd8, 0xbb, 0x3a, 0xb6, 0x08, 0xb5, 0xf6, 0xca, 0x39, 0x19, 0x1f, 0x8e, 0x6d, 0x36, 0xda, 0x64, 0x13, 0x0f, 0x2e, 0x0b, 0x7c, 0x02, 0x13, 0x65, 0x8e, 0xa7, 0xcc, 0x7d, 0xbc, 0xfb, 0x77, 0xc8, 0x36, 0xbe, 0xe3 }; static const uint8_t nist_186_2_ecdsa_testvector_194_private[] = { /* d - byte alignment */ 0x03, 0x22, 0x30, 0x44, 0xf9, 0x7b, 0xc3, 0x01, 0xa6, 0x70, 0x7e, 0xa3, 0xd8, 0x0f, 0x5a, 0x58, 0x5e, 0x1e, 0x48, 0xbe, 0x45, 0x23, 0x86, 0x20, 0x60, 0xa1, 0xf4, 0x59, 0xcd, 0xaa, 0x62, 0x6b, 0x7c, 0x07, 0x09, 0xc1 }; static const uint8_t nist_186_2_ecdsa_testvector_194_public_x[] = { /* Qx - byte alignment */ 0x01, 0xba, 0xa5, 0xb0, 0x12, 0xef, 0x1b, 0x1c, 0xb4, 0xd8, 0xb4, 0x11, 0x3b, 0x30, 0x54, 0xf7, 0xe5, 0xc9, 0x21, 0x9e, 0x88, 0x26, 0x92, 0xdb, 0xde, 0xaa, 0xf1, 0x0f, 0x2b, 0x5a, 0x76, 0x36, 0xd0, 0x1c, 0x98, 0xe4 }; static const uint8_t nist_186_2_ecdsa_testvector_194_public_y[] = { /* Qy - byte alignment */ 0x04, 0x15, 0xea, 0x87, 0xe5, 0xc5, 0xbb, 0xc9, 0x60, 0x18, 0xdf, 0x31, 0xe8, 0xb5, 0x57, 0x9f, 0x9f, 0x95, 0x24, 0xd0, 0x36, 0x83, 0x74, 0x58, 0xdf, 0xc4, 0x62, 0x86, 0x8e, 0x6f, 0x44, 0xff, 0x0a, 0x80, 0x9e, 0xf9 }; /* k = 19d0f59f71634f979df2f75b17e5737a2013cd01e9f0f0ede74789485b2f585ecb6ff38 */ static const uint8_t nist_186_2_ecdsa_testvector_194_out[] = { /* R - byte alignment */ 0x03, 0xf2, 0xd8, 0x41, 0x61, 0x4e, 0x11, 0x76, 0xbf, 0xd7, 0x35, 0xb2, 0x59, 0x5a, 0x3a, 0xf1, 0xbf, 0x3a, 0x46, 0xf1, 0xd6, 0xbf, 0xa3, 0xd2, 0xbe, 0xf3, 0x3c, 0x01, 0x75, 0xde, 0x29, 0x6b, 0xec, 0x07, 0x30, 0x77, /* S - byte alignment */ 0x01, 0xeb, 0xff, 0x29, 0x92, 0x88, 0xb7, 0x73, 0x2a, 0x91, 0xea, 0xe3, 0x30, 0x20, 0x81, 0xd6, 0x01, 0x0d, 0x80, 0x0b, 0xb0, 0x60, 0x2a, 0x8f, 0x32, 0x7d, 0xc8, 0x06, 0x3f, 0xae, 0x6d, 0xf4, 0x8d, 0xaa, 0x63, 0xa2 }; static const uint8_t nist_186_2_ecdsa_testvector_195_ptx[] = { /* Msg */ 0x9a, 0x7d, 0xd0, 0x9a, 0xe3, 0x42, 0xe2, 0x75, 0x57, 0x11, 0x35, 0x85, 0x4f, 0xf0, 0x7e, 0x37, 0xd1, 0xe1, 0x8a, 0xb5, 0xb2, 0x71, 0x82, 0x15, 0xfd, 0x8e, 0x6d, 0xcf, 0x99, 0x99, 0xf6, 0x75, 0x25, 0xbc, 0x6f, 0x9e, 0x27, 0x7e, 0x17, 0x24, 0x66, 0x94, 0x98, 0x8f, 0x94, 0xfa, 0xd4, 0xd0, 0x30, 0x43, 0xe1, 0x33, 0xab, 0x2e, 0x52, 0x8f, 0xca, 0x79, 0xb9, 0xbf, 0x4b, 0xfa, 0x6a, 0x56, 0xcb, 0xeb, 0x81, 0x8f, 0xe7, 0x86, 0x26, 0x83, 0xa2, 0xd2, 0x0f, 0x9f, 0x06, 0xbc, 0x47, 0x54, 0x0f, 0x69, 0x2e, 0x10, 0xc4, 0xcb, 0xc2, 0x6e, 0xa7, 0x72, 0x1c, 0xaa, 0x4f, 0xa5, 0x3d, 0x57, 0x54, 0xb2, 0x0b, 0x54, 0x6b, 0x82, 0x97, 0xfc, 0xd2, 0x70, 0xa1, 0x9d, 0xef, 0x5b, 0x5e, 0x2b, 0x34, 0xfa, 0x79, 0x36, 0x45, 0x70, 0x57, 0x1a, 0x5d, 0x21, 0x9f, 0x76, 0xee, 0xc3, 0xfa, 0xdf }; static const uint8_t nist_186_2_ecdsa_testvector_195_private[] = { /* d - byte alignment */ 0x00, 0x83, 0xff, 0xa9, 0x7b, 0x2b, 0xd8, 0x59, 0xce, 0x0c, 0xd7, 0xb9, 0xb3, 0x68, 0x0e, 0xc2, 0xb3, 0x0e, 0xd6, 0x3b, 0xed, 0x24, 0x44, 0x04, 0xe1, 0x9c, 0x81, 0xa8, 0x88, 0x3b, 0x7a, 0xd8, 0x68, 0xec, 0xbf, 0xb9 }; static const uint8_t nist_186_2_ecdsa_testvector_195_public_x[] = { /* Qx - byte alignment */ 0x00, 0x36, 0x7a, 0x18, 0xb2, 0xbf, 0x2f, 0xb1, 0x24, 0x41, 0x76, 0x39, 0xf7, 0x71, 0xaa, 0x84, 0xc4, 0xc4, 0xdf, 0x68, 0xed, 0x50, 0x9e, 0x54, 0x36, 0xf7, 0xce, 0x48, 0x6a, 0x79, 0x1b, 0xf2, 0x16, 0x30, 0xf1, 0x25 }; static const uint8_t nist_186_2_ecdsa_testvector_195_public_y[] = { /* Qy - byte alignment */ 0x01, 0x48, 0x26, 0x14, 0xac, 0x11, 0x65, 0x3d, 0x51, 0x36, 0xa8, 0xfa, 0x73, 0xe2, 0x98, 0x78, 0x25, 0x75, 0x1d, 0x71, 0x9f, 0x19, 0x61, 0x54, 0x4c, 0x2e, 0x8a, 0x83, 0x87, 0x2c, 0x65, 0x0c, 0x6e, 0xad, 0x34, 0xcc }; /* k = 3e035a2c4706c4690fa5aee52828f2af2d00394927141ea1c1ea4e6fd5d1c7ac4fbe4fb */ static const uint8_t nist_186_2_ecdsa_testvector_195_out[] = { /* R - byte alignment */ 0x01, 0xdf, 0xee, 0xdf, 0x32, 0x25, 0xb0, 0x11, 0xa1, 0x03, 0xf0, 0xa7, 0xd9, 0x0a, 0x86, 0x01, 0xbc, 0x6c, 0x61, 0x4e, 0xa3, 0xce, 0x29, 0xb6, 0xa7, 0xfa, 0x85, 0x82, 0x99, 0x39, 0x65, 0x80, 0x54, 0xd7, 0x3b, 0x3c, /* S - byte alignment */ 0x02, 0x7e, 0x4a, 0xf9, 0x09, 0x0e, 0xa2, 0x0c, 0x21, 0x84, 0x0c, 0xb1, 0xbf, 0x82, 0xdc, 0xc5, 0xe8, 0x83, 0x97, 0x03, 0x63, 0x03, 0x31, 0xd6, 0xef, 0x64, 0x64, 0xdd, 0x88, 0x68, 0x74, 0x5f, 0x68, 0xb3, 0xfb, 0xa4 }; /* [B-409] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_196_ptx[] = { /* Msg */ 0x84, 0x16, 0xd3, 0xb1, 0x82, 0xc3, 0x17, 0x43, 0xf4, 0x33, 0xb1, 0xfd, 0x72, 0xf2, 0x08, 0x75, 0xcc, 0xdf, 0x94, 0x1c, 0x40, 0x8d, 0xa8, 0xc0, 0xf0, 0xea, 0x8f, 0x55, 0x93, 0x1e, 0xdb, 0xf4, 0x6a, 0xb6, 0xfa, 0x24, 0x75, 0x02, 0x0a, 0x59, 0xe8, 0xbb, 0xee, 0xba, 0xd9, 0xe9, 0xa2, 0x27, 0x3b, 0x04, 0xcb, 0x7b, 0x0f, 0x5a, 0x93, 0x0e, 0xd9, 0xb0, 0xb3, 0x7f, 0x51, 0x2c, 0xd1, 0xb0, 0x5c, 0x73, 0x0d, 0x11, 0x3a, 0x0e, 0xd7, 0x22, 0x01, 0x12, 0x03, 0x33, 0x4a, 0x00, 0x1f, 0x6e, 0x2a, 0xea, 0x04, 0x18, 0x64, 0xd7, 0xab, 0x14, 0xdc, 0x69, 0x42, 0xa9, 0x4f, 0xbd, 0x7f, 0x85, 0x42, 0x93, 0x35, 0x01, 0x38, 0xaf, 0x25, 0xa6, 0x28, 0x7f, 0x16, 0xf0, 0x2e, 0xfd, 0x28, 0x53, 0x81, 0xd7, 0x65, 0x7c, 0xa5, 0xcd, 0x99, 0xd9, 0xe2, 0x5b, 0x63, 0x5b, 0xf4, 0x99, 0x8d, 0x7b }; static const uint8_t nist_186_2_ecdsa_testvector_196_private[] = { /* d - byte alignment */ 0x00, 0x83, 0xd2, 0x07, 0x00, 0x93, 0xf0, 0xcf, 0x1e, 0xec, 0xec, 0x5b, 0xee, 0x3d, 0xeb, 0x44, 0x03, 0xb2, 0xe4, 0x71, 0x49, 0xbe, 0x09, 0x55, 0x08, 0x8f, 0x95, 0xa7, 0x50, 0xd7, 0x7f, 0xd2, 0xe5, 0x93, 0xd3, 0x7b, 0xaf, 0xe5, 0x37, 0xea, 0x79, 0xa7, 0xad, 0x33, 0xf8, 0x0b, 0xc3, 0xda, 0xf3, 0xb4, 0x58, 0xd1 }; static const uint8_t nist_186_2_ecdsa_testvector_196_public_x[] = { /* Qx - byte alignment */ 0x01, 0x2a, 0x05, 0xf6, 0xe3, 0x18, 0x4e, 0x97, 0x24, 0x00, 0xf2, 0x6f, 0xfa, 0xad, 0x2b, 0xee, 0x81, 0x3f, 0x4f, 0x0e, 0x9a, 0x7e, 0x76, 0xbc, 0x21, 0x65, 0xa1, 0x07, 0xc9, 0x77, 0x0c, 0x67, 0xfa, 0x14, 0x2f, 0xe5, 0x06, 0xb9, 0x39, 0xc7, 0x94, 0x06, 0xaa, 0x99, 0xde, 0x29, 0x1b, 0x65, 0x7f, 0x39, 0xe8, 0xa9 }; static const uint8_t nist_186_2_ecdsa_testvector_196_public_y[] = { /* Qy - byte alignment */ 0x00, 0xe2, 0x6d, 0x28, 0xe6, 0xa0, 0x56, 0xe9, 0x4e, 0xd6, 0xc0, 0x12, 0x60, 0x69, 0x5f, 0xaf, 0xe4, 0x4d, 0x44, 0xcd, 0xf3, 0x4f, 0xb4, 0x09, 0x58, 0xdc, 0xa1, 0x80, 0xd1, 0x5f, 0x3e, 0x67, 0xb6, 0xda, 0x1d, 0x4b, 0x2b, 0x0e, 0xc9, 0xfa, 0xa0, 0xdc, 0x3c, 0x6d, 0x60, 0x8f, 0x27, 0xb2, 0x5c, 0x2b, 0x08, 0x7a }; /* k = 0eb71c20ffcf0445bc220da612064ea36f0b8f1a6e9532f6739d3888f906785ebd04987671df192e77fd070b090fba2e8a67b8d */ static const uint8_t nist_186_2_ecdsa_testvector_196_out[] = { /* R - byte alignment */ 0x00, 0x4f, 0x4d, 0x74, 0x92, 0x7e, 0x6a, 0x86, 0x06, 0x54, 0xf1, 0x3d, 0xe1, 0xda, 0x11, 0x20, 0x1a, 0x54, 0xcf, 0x2c, 0x52, 0xcd, 0x2a, 0x25, 0xbf, 0xb7, 0x1a, 0x6a, 0xf3, 0xf1, 0xbd, 0x1c, 0x2b, 0x2c, 0xdb, 0x73, 0x20, 0x09, 0x8d, 0x5c, 0xc7, 0x2e, 0x39, 0x63, 0xf7, 0x03, 0xc2, 0x9c, 0xcf, 0xeb, 0x1b, 0x82, /* S - byte alignment */ 0x00, 0x20, 0x71, 0x0e, 0x88, 0xc7, 0x79, 0x36, 0x38, 0x9b, 0xd0, 0x77, 0x42, 0xe4, 0x16, 0xca, 0xb0, 0x94, 0x8a, 0x17, 0x31, 0x4a, 0x49, 0xe1, 0xa9, 0xec, 0x59, 0xd0, 0x1f, 0xb4, 0xe0, 0x82, 0x9a, 0x27, 0x59, 0x68, 0xc9, 0x7b, 0x5a, 0x69, 0x25, 0x6b, 0x4e, 0x9d, 0x2b, 0x40, 0x80, 0x8d, 0x02, 0x44, 0x26, 0xcf }; static const uint8_t nist_186_2_ecdsa_testvector_197_ptx[] = { /* Msg */ 0x9d, 0xbc, 0x49, 0x51, 0xe3, 0x23, 0xae, 0x97, 0xec, 0xaf, 0x51, 0x1f, 0x46, 0x0a, 0x42, 0x85, 0xac, 0x54, 0x32, 0x84, 0x7a, 0xc6, 0x88, 0xbc, 0x64, 0x96, 0xb2, 0xb2, 0x66, 0x1b, 0xb9, 0x19, 0xfe, 0x32, 0x19, 0x50, 0x9a, 0xe0, 0xcf, 0x2b, 0x4c, 0x39, 0xb3, 0xf6, 0xc5, 0x80, 0x08, 0xb7, 0x81, 0x8f, 0x52, 0xb4, 0x3f, 0x79, 0x67, 0x35, 0xb4, 0x6f, 0xc9, 0x8b, 0x80, 0xe0, 0x33, 0x51, 0x61, 0xe4, 0x72, 0xf2, 0xa7, 0xdb, 0x76, 0x6c, 0xe8, 0x51, 0xa9, 0x53, 0xf4, 0x26, 0x80, 0x18, 0x0b, 0xeb, 0x4f, 0x8b, 0x4e, 0x8e, 0x61, 0x9f, 0x74, 0x3a, 0x48, 0x6d, 0xbe, 0x79, 0x72, 0x7c, 0x2d, 0x9c, 0xfd, 0x40, 0xf2, 0x5c, 0xcc, 0xe0, 0x26, 0xc1, 0xdb, 0x3d, 0xbb, 0x43, 0xcf, 0x2f, 0xb3, 0x30, 0xd2, 0x11, 0x8f, 0x4d, 0x9d, 0x81, 0x0b, 0xc0, 0xd6, 0x61, 0x08, 0x2d, 0x9d, 0x21 }; static const uint8_t nist_186_2_ecdsa_testvector_197_private[] = { /* d - byte alignment */ 0x00, 0x0a, 0x9c, 0x92, 0x40, 0xd3, 0xe8, 0x29, 0x09, 0xd8, 0x6a, 0xf8, 0x98, 0xa9, 0xf1, 0x69, 0x4b, 0x5e, 0x6c, 0x19, 0x38, 0xa3, 0x23, 0x5f, 0x5c, 0x14, 0x8b, 0xa4, 0xfd, 0x5f, 0x07, 0x50, 0xc9, 0xe7, 0x33, 0x82, 0x4c, 0xa9, 0xda, 0x34, 0xca, 0x23, 0x25, 0x54, 0xd8, 0x60, 0x1a, 0x11, 0xcc, 0xec, 0x7c, 0xed }; static const uint8_t nist_186_2_ecdsa_testvector_197_public_x[] = { /* Qx - byte alignment */ 0x01, 0xf5, 0x35, 0xe9, 0xf4, 0xe7, 0x8c, 0x2e, 0x20, 0x7c, 0xa5, 0x92, 0x88, 0x5d, 0x03, 0x31, 0x37, 0x5d, 0x72, 0xf9, 0x99, 0x7a, 0x22, 0x76, 0xc4, 0x12, 0xe7, 0x74, 0x8f, 0xa1, 0x7d, 0x5d, 0xe6, 0x86, 0xfe, 0x85, 0x9e, 0xdd, 0x64, 0x3e, 0x18, 0x0f, 0xd7, 0x87, 0x2b, 0x3c, 0x75, 0x98, 0x4d, 0x11, 0x4e, 0x2f }; static const uint8_t nist_186_2_ecdsa_testvector_197_public_y[] = { /* Qy - byte alignment */ 0x00, 0xf2, 0x43, 0x3a, 0x78, 0xac, 0xae, 0xad, 0x2a, 0x3c, 0xca, 0x87, 0xea, 0xbd, 0x0a, 0x03, 0xa2, 0xf1, 0x22, 0x69, 0xbb, 0xea, 0x25, 0xe5, 0xdd, 0x56, 0x5c, 0xf3, 0x46, 0xd6, 0x56, 0x95, 0x3c, 0xa9, 0x6d, 0x70, 0x3d, 0x11, 0x34, 0x30, 0xa0, 0xb2, 0xa0, 0xb2, 0xe6, 0xe9, 0x90, 0xd8, 0x23, 0xe8, 0x9d, 0x5b }; /* k = 021133e73d9ea0bdab83640d1652b88804454500893f1653a673b84cc6a6b9877adbd655c076af2980299e98f67738a5258c54f */ static const uint8_t nist_186_2_ecdsa_testvector_197_out[] = { /* R - byte alignment */ 0x00, 0x72, 0x39, 0xa2, 0xc9, 0x1e, 0xc7, 0x01, 0x88, 0x3f, 0xb9, 0x63, 0xd6, 0x52, 0xd9, 0x82, 0xd5, 0x91, 0x9e, 0xd7, 0x4f, 0x3b, 0xce, 0x8d, 0xc7, 0x3c, 0x18, 0x19, 0x72, 0x2c, 0x85, 0x65, 0x0e, 0x89, 0x6b, 0x3d, 0x95, 0xb9, 0xe4, 0x7d, 0xbe, 0xda, 0x72, 0x47, 0x60, 0x29, 0x17, 0x13, 0xb1, 0x70, 0xe0, 0x95, /* S - byte alignment */ 0x00, 0x32, 0x8e, 0x43, 0x23, 0x00, 0x14, 0xef, 0x7c, 0x6e, 0xa0, 0x87, 0x72, 0xa3, 0xb7, 0x95, 0x89, 0xf4, 0x12, 0xf3, 0xaf, 0x4e, 0x4e, 0x23, 0x14, 0xe4, 0x0a, 0xb6, 0x7b, 0x81, 0xdc, 0x5a, 0xab, 0x46, 0x7e, 0x31, 0x5b, 0xa3, 0x0a, 0x0b, 0xa3, 0xd1, 0x82, 0x49, 0xb1, 0xeb, 0x9e, 0x45, 0xd3, 0x50, 0xae, 0x35 }; static const uint8_t nist_186_2_ecdsa_testvector_198_ptx[] = { /* Msg */ 0xe7, 0x70, 0x25, 0xc9, 0x85, 0x8e, 0x2a, 0xdc, 0x23, 0x65, 0xcc, 0xbc, 0x6e, 0x03, 0xb4, 0x01, 0xeb, 0xe9, 0x2c, 0x5b, 0xdb, 0x62, 0x26, 0x82, 0x63, 0x13, 0x80, 0x70, 0xe9, 0xd2, 0x86, 0xcd, 0xc1, 0xbc, 0xb9, 0xab, 0x09, 0x81, 0xcf, 0x73, 0xd1, 0x03, 0xfa, 0x1f, 0x80, 0x20, 0x6d, 0xaa, 0x72, 0xcb, 0x1d, 0xc5, 0xe6, 0x62, 0xc4, 0xcc, 0x18, 0x3b, 0x2c, 0xf8, 0xaa, 0x81, 0xaa, 0xd6, 0x48, 0x3e, 0xe8, 0xf8, 0x8c, 0xb8, 0xe8, 0xea, 0x1f, 0x01, 0x46, 0x67, 0x22, 0xca, 0xbe, 0xcd, 0xcc, 0x78, 0xed, 0xcf, 0x54, 0x7a, 0x5c, 0x6a, 0x11, 0xd9, 0xba, 0x1a, 0xe0, 0x10, 0x69, 0x4d, 0xc6, 0x1f, 0x3d, 0x18, 0xd6, 0xdb, 0x80, 0x29, 0x55, 0x88, 0x39, 0xfd, 0x1d, 0xa9, 0xad, 0x53, 0x3f, 0x17, 0x27, 0xe0, 0xec, 0x51, 0xf5, 0x44, 0x96, 0x13, 0xb3, 0x3d, 0x52, 0x2a, 0xcc, 0x1a }; static const uint8_t nist_186_2_ecdsa_testvector_198_private[] = { /* d - byte alignment */ 0x00, 0xb9, 0xad, 0x78, 0x4b, 0xfd, 0x87, 0xb3, 0xea, 0xa6, 0x13, 0x1f, 0xc8, 0x27, 0x3c, 0x88, 0x93, 0xad, 0xe1, 0xca, 0x44, 0x49, 0x76, 0xdd, 0x25, 0x8b, 0xe5, 0xdd, 0xab, 0xa0, 0xb8, 0xdd, 0xfb, 0x9d, 0xce, 0x58, 0x95, 0x7a, 0x7e, 0x41, 0xf9, 0xad, 0x60, 0xc9, 0x49, 0x70, 0x22, 0xbb, 0xe7, 0x24, 0x49, 0x9d }; static const uint8_t nist_186_2_ecdsa_testvector_198_public_x[] = { /* Qx - byte alignment */ 0x00, 0xc6, 0xf4, 0x92, 0x77, 0x11, 0x0d, 0xef, 0xb2, 0x02, 0x7b, 0x3e, 0xac, 0xc9, 0x32, 0x8b, 0x4c, 0x9b, 0xb7, 0x7e, 0x7b, 0xa2, 0xf8, 0xbf, 0x68, 0x89, 0x55, 0xe4, 0xa8, 0x59, 0x84, 0xe7, 0x51, 0x36, 0xab, 0x6a, 0x98, 0x91, 0x76, 0x6d, 0x87, 0xf2, 0xde, 0x5a, 0x23, 0x49, 0x2f, 0xc1, 0x06, 0x72, 0x74, 0x0d }; static const uint8_t nist_186_2_ecdsa_testvector_198_public_y[] = { /* Qy - byte alignment */ 0x00, 0xf6, 0xf3, 0xe5, 0x87, 0x4b, 0x9a, 0x51, 0x4a, 0xac, 0xfc, 0x66, 0x1e, 0x7d, 0x98, 0x7c, 0x01, 0xbd, 0xe6, 0xee, 0xf2, 0x81, 0xb9, 0xce, 0xe6, 0x6f, 0x66, 0xc6, 0x54, 0x3f, 0xe9, 0x26, 0x19, 0xf9, 0x42, 0xa4, 0x0d, 0x7a, 0xd5, 0xa7, 0xea, 0xd3, 0x98, 0x5b, 0x2b, 0x5f, 0x39, 0x1f, 0x20, 0x45, 0xfd, 0x69 }; /* k = 053a5ae09193c3ba143cb46dc8803eadcf0cff0cb5739efc349c5e8172845ee8f27d5ae18847a8e0996ab649f5986e80cac0320 */ static const uint8_t nist_186_2_ecdsa_testvector_198_out[] = { /* R - byte alignment */ 0x00, 0x67, 0x16, 0xff, 0x3d, 0x60, 0x1d, 0x13, 0x01, 0xf1, 0xe4, 0xff, 0xc1, 0xcf, 0xef, 0x3e, 0x90, 0xc0, 0x7b, 0x95, 0x8d, 0xb8, 0x61, 0xbd, 0x43, 0x2c, 0x39, 0xcc, 0xdc, 0x38, 0x41, 0xda, 0x5b, 0x9e, 0x0b, 0x8b, 0x39, 0xeb, 0xc2, 0xef, 0xf8, 0x03, 0xb9, 0x11, 0x44, 0x03, 0x7a, 0x63, 0xf1, 0x1c, 0x97, 0xb3, /* S - byte alignment */ 0x00, 0x35, 0xe7, 0x30, 0x6a, 0x4c, 0x0f, 0xdb, 0x82, 0x35, 0xbd, 0x21, 0x28, 0x96, 0x9d, 0xda, 0x0f, 0x64, 0x35, 0x59, 0xda, 0xeb, 0xa7, 0x51, 0x78, 0xe5, 0x66, 0x6d, 0x5f, 0x21, 0xa5, 0xf8, 0x3d, 0x12, 0xfe, 0xf7, 0x95, 0xfd, 0xa3, 0x40, 0xa8, 0x15, 0xe1, 0x96, 0x2e, 0x9b, 0xd0, 0x0d, 0xe8, 0xcb, 0x08, 0x7f }; static const uint8_t nist_186_2_ecdsa_testvector_199_ptx[] = { /* Msg */ 0x4d, 0xcc, 0x25, 0x48, 0x48, 0x3f, 0xdf, 0x25, 0xd6, 0x69, 0x2e, 0x15, 0xab, 0x39, 0x13, 0xaa, 0x62, 0xf0, 0x9b, 0x49, 0x1e, 0x32, 0xaa, 0xdb, 0x72, 0x5d, 0xf7, 0xc4, 0x7e, 0x1b, 0x58, 0x19, 0x5b, 0x33, 0x40, 0x0d, 0xba, 0xa5, 0x85, 0xad, 0xc7, 0xf5, 0x67, 0xce, 0x54, 0xc7, 0xcf, 0x43, 0x33, 0xac, 0xd4, 0x53, 0xe3, 0x3c, 0x83, 0x6a, 0x70, 0x65, 0xe0, 0x0e, 0x94, 0x02, 0x28, 0x15, 0x22, 0xaf, 0x59, 0x15, 0xa4, 0xdc, 0xf4, 0x1d, 0x43, 0x21, 0x02, 0xa2, 0xe8, 0xd1, 0x55, 0xbc, 0xa1, 0xd2, 0x10, 0x93, 0x46, 0xac, 0x6a, 0x13, 0x5c, 0xdf, 0xae, 0xe8, 0x39, 0x7a, 0x86, 0xa6, 0x69, 0xe9, 0x7a, 0x47, 0x51, 0x0f, 0xb4, 0xdb, 0x12, 0x95, 0x06, 0x7b, 0xb1, 0x81, 0x2e, 0x7f, 0x74, 0x0a, 0x58, 0xf1, 0x8f, 0xaa, 0xe4, 0x41, 0xff, 0x76, 0x6a, 0x39, 0xb7, 0xab, 0xfb, 0x34 }; static const uint8_t nist_186_2_ecdsa_testvector_199_private[] = { /* d - byte alignment */ 0x00, 0x9b, 0xb0, 0x0b, 0x37, 0xcd, 0x84, 0xb4, 0x15, 0x5e, 0xc5, 0x94, 0x91, 0xa0, 0x02, 0xb7, 0xf0, 0xdb, 0x38, 0xb4, 0xa1, 0xaf, 0x39, 0xe8, 0xae, 0xab, 0x83, 0xe7, 0x10, 0xb2, 0xe4, 0xe4, 0x3e, 0xbb, 0xa3, 0x64, 0xc6, 0xeb, 0x6a, 0x5e, 0x61, 0xd3, 0x64, 0x26, 0xcd, 0x66, 0x81, 0x5c, 0x79, 0xfa, 0x21, 0x9d }; static const uint8_t nist_186_2_ecdsa_testvector_199_public_x[] = { /* Qx - byte alignment */ 0x00, 0x85, 0x8a, 0x4a, 0xc6, 0x13, 0x19, 0x53, 0xd6, 0xbf, 0x24, 0x58, 0xf2, 0x3c, 0x83, 0x2f, 0x23, 0x1d, 0xad, 0x09, 0x4d, 0x08, 0x74, 0xca, 0x02, 0x2d, 0x99, 0x11, 0xa7, 0x86, 0x12, 0xd5, 0xe6, 0x3e, 0xf9, 0x07, 0xd8, 0x2f, 0xf8, 0xb4, 0x39, 0x2e, 0x40, 0xe5, 0x53, 0x53, 0x83, 0x85, 0x5e, 0x28, 0xa5, 0x39 }; static const uint8_t nist_186_2_ecdsa_testvector_199_public_y[] = { /* Qy - byte alignment */ 0x01, 0xf9, 0xa5, 0x52, 0xbd, 0x3c, 0x18, 0x3a, 0xc8, 0x85, 0xe4, 0x11, 0x8b, 0x21, 0x85, 0x4a, 0x0d, 0x36, 0x9a, 0xd9, 0x1b, 0x3a, 0xce, 0x47, 0x07, 0xcb, 0x6e, 0x6a, 0x99, 0xe0, 0xe6, 0xb0, 0x54, 0xda, 0x4d, 0x71, 0xfe, 0x69, 0xe9, 0x9d, 0x07, 0x2a, 0xb8, 0x65, 0x33, 0x4f, 0x6f, 0x63, 0xdb, 0x9b, 0x4e, 0xa7 }; /* k = 029691df256d0b4794600f785f809922326b9c2553488cfb7aa60b311932b32822583b5c60463b2ff901a1a35cca0641c4fc0cc */ static const uint8_t nist_186_2_ecdsa_testvector_199_out[] = { /* R - byte alignment */ 0x00, 0xd9, 0x3c, 0x6f, 0xfd, 0x1f, 0x80, 0x7a, 0x49, 0x08, 0xcb, 0x3b, 0xef, 0x22, 0xf5, 0x57, 0x66, 0x4a, 0x16, 0x07, 0xce, 0x04, 0x40, 0x74, 0xc4, 0x1e, 0x56, 0x8d, 0xb4, 0x7e, 0x67, 0x19, 0x6a, 0x6e, 0x50, 0x38, 0x5b, 0x8a, 0xb5, 0x95, 0x89, 0x82, 0x77, 0x67, 0xb1, 0xaa, 0xa1, 0xb3, 0x48, 0xb2, 0xf2, 0xbd, /* S - byte alignment */ 0x00, 0xa1, 0x8f, 0x0f, 0x28, 0xb5, 0xbf, 0x3c, 0xe8, 0x70, 0xb9, 0x48, 0xb5, 0x5f, 0xdb, 0xce, 0xa9, 0x91, 0x61, 0x3d, 0x0b, 0x74, 0xa5, 0xc5, 0x0e, 0xaf, 0xc2, 0x65, 0xff, 0x02, 0x3b, 0x8c, 0x6f, 0x85, 0x64, 0xde, 0xa5, 0x5c, 0xa7, 0x61, 0x7f, 0x46, 0xab, 0x90, 0x62, 0x55, 0xf4, 0x30, 0x3b, 0x96, 0x15, 0xda }; static const uint8_t nist_186_2_ecdsa_testvector_200_ptx[] = { /* Msg */ 0xa3, 0xcb, 0x2e, 0x23, 0xd8, 0x2b, 0x4b, 0x50, 0x01, 0xde, 0xe9, 0x91, 0x31, 0xb7, 0x5e, 0x71, 0x13, 0xca, 0x3f, 0xc1, 0x89, 0x7e, 0x27, 0x44, 0x92, 0xe3, 0xb3, 0xac, 0x71, 0x45, 0xd1, 0xc5, 0x0c, 0x01, 0x3b, 0xf1, 0x92, 0x97, 0x3e, 0xd4, 0x60, 0x01, 0xc0, 0x50, 0x26, 0x43, 0x81, 0xb4, 0x45, 0x44, 0xa1, 0x30, 0x7c, 0xdc, 0x63, 0x8d, 0xc4, 0x2e, 0x30, 0x1a, 0x78, 0x38, 0xdf, 0xea, 0xb9, 0xa8, 0x33, 0x3c, 0x11, 0xf1, 0xa5, 0x3b, 0x56, 0x9f, 0x64, 0xe8, 0xd2, 0xe7, 0x9b, 0x54, 0xa0, 0x83, 0xf2, 0x12, 0x59, 0xbd, 0x57, 0xec, 0xf1, 0xc9, 0xfe, 0xd5, 0xdb, 0x57, 0xa6, 0x1f, 0x74, 0x69, 0x1f, 0xee, 0x9e, 0x62, 0x09, 0xed, 0xab, 0x60, 0xde, 0x3f, 0x7e, 0xcc, 0x33, 0xb9, 0xec, 0x30, 0x3a, 0x4e, 0x68, 0x48, 0x8c, 0xca, 0xe0, 0x5b, 0x25, 0xc4, 0xe2, 0xcb, 0xb0, 0xcd }; static const uint8_t nist_186_2_ecdsa_testvector_200_private[] = { /* d - byte alignment */ 0x00, 0x4a, 0xba, 0xab, 0x51, 0xaa, 0xd7, 0x0e, 0x18, 0x6d, 0xe5, 0x77, 0x34, 0xeb, 0x32, 0xbf, 0xfc, 0x39, 0x28, 0x7c, 0xf3, 0x59, 0x7c, 0xa5, 0xa1, 0x5f, 0x18, 0x1b, 0xc1, 0x69, 0xc8, 0x87, 0xdd, 0xb1, 0x4e, 0x20, 0x94, 0xac, 0xcb, 0xba, 0x06, 0xd4, 0xa7, 0xed, 0x6d, 0x86, 0xfd, 0x38, 0x89, 0x9a, 0x5c, 0x4e }; static const uint8_t nist_186_2_ecdsa_testvector_200_public_x[] = { /* Qx - byte alignment */ 0x01, 0x8b, 0x4a, 0x5f, 0x7c, 0xd1, 0x2b, 0x74, 0xe7, 0xe3, 0xd3, 0x3a, 0xe4, 0x79, 0x15, 0xf7, 0x25, 0xe5, 0x6a, 0x13, 0xe2, 0x2a, 0x4e, 0x07, 0xcd, 0x8c, 0x5e, 0x1f, 0x65, 0x0a, 0xcb, 0x69, 0x74, 0x91, 0x8a, 0x81, 0x44, 0xeb, 0xf7, 0xe7, 0x8d, 0xad, 0xb1, 0x8f, 0x0f, 0x30, 0x5a, 0xac, 0x68, 0x75, 0x74, 0xef }; static const uint8_t nist_186_2_ecdsa_testvector_200_public_y[] = { /* Qy - byte alignment */ 0x01, 0x9c, 0x5f, 0xc9, 0xce, 0x7d, 0x5a, 0x4a, 0xe3, 0x42, 0x8f, 0xc9, 0x4c, 0xf2, 0x4e, 0xcb, 0xab, 0xf2, 0x68, 0xcc, 0x47, 0x21, 0xce, 0xcb, 0x8b, 0xd7, 0x02, 0x84, 0x20, 0x0e, 0x97, 0x55, 0xde, 0x4a, 0xf2, 0x01, 0x4f, 0xaa, 0xa6, 0x38, 0x54, 0xd6, 0x0f, 0x2a, 0xda, 0x89, 0x5b, 0x90, 0x55, 0x91, 0x10, 0xd4 }; /* k = 0c0109b439973efd6d62bf38c4d7afa79d756e9d97433d7748dbaa635a3ffbd5ff3b9224d926d71f5c9e3eefc57f9a3da352523 */ static const uint8_t nist_186_2_ecdsa_testvector_200_out[] = { /* R - byte alignment */ 0x00, 0xce, 0xe8, 0xe0, 0x19, 0xd4, 0xb2, 0x3d, 0x36, 0xd8, 0x9f, 0xd4, 0x39, 0x1a, 0x92, 0x2c, 0x66, 0xb0, 0xc2, 0xf0, 0x1e, 0xda, 0x9a, 0x22, 0xdd, 0x1e, 0x9a, 0x48, 0x0d, 0x3f, 0x4f, 0xdb, 0x50, 0xb1, 0x29, 0x63, 0xec, 0x7f, 0x55, 0x92, 0x87, 0x94, 0x72, 0x9c, 0x7d, 0x6c, 0x0a, 0x0c, 0x1e, 0x1f, 0x8b, 0xdf, /* S - byte alignment */ 0x00, 0x45, 0x94, 0x13, 0x1a, 0x93, 0x19, 0x66, 0x08, 0xca, 0x3a, 0x24, 0xd3, 0x9a, 0xaf, 0xdd, 0x5d, 0xb2, 0xee, 0xb0, 0x3c, 0x2e, 0x8d, 0x6b, 0xdf, 0xc8, 0x22, 0xb5, 0x6f, 0x64, 0x82, 0xbe, 0xac, 0xa1, 0xdf, 0x3c, 0x47, 0x2f, 0xec, 0x59, 0xab, 0x88, 0x28, 0x2e, 0x02, 0x07, 0xb3, 0x7e, 0x35, 0x17, 0x8f, 0x3e }; static const uint8_t nist_186_2_ecdsa_testvector_201_ptx[] = { /* Msg */ 0x73, 0x1c, 0x69, 0x97, 0xfc, 0x71, 0xd6, 0x4c, 0x29, 0x43, 0x91, 0xc7, 0xf1, 0x80, 0x60, 0x08, 0x65, 0xc1, 0x07, 0x13, 0x87, 0xd0, 0xbb, 0x96, 0x5e, 0x68, 0xd9, 0xcc, 0x4a, 0x3b, 0xd8, 0xa1, 0x96, 0x39, 0x7d, 0x17, 0x4c, 0x10, 0x4d, 0xe8, 0x4d, 0xef, 0x48, 0x6d, 0xa0, 0x90, 0xd4, 0xbe, 0x0b, 0x75, 0xf8, 0x1b, 0xe0, 0x72, 0xca, 0x8b, 0x1a, 0x6b, 0x2b, 0xc2, 0xa8, 0x5f, 0xb1, 0x48, 0x09, 0xa5, 0xe5, 0xd8, 0x19, 0x76, 0xaf, 0x07, 0x2b, 0xac, 0x0e, 0x26, 0x57, 0xc9, 0x0c, 0x68, 0x16, 0x3b, 0xf2, 0x48, 0x0c, 0xdf, 0xb8, 0x25, 0x24, 0xc3, 0xbf, 0x2f, 0xe2, 0x30, 0xc3, 0x87, 0xf5, 0xe8, 0x0b, 0xa2, 0x0c, 0xac, 0xe2, 0xef, 0xeb, 0x01, 0x4b, 0xb9, 0xbe, 0x34, 0xf1, 0x4e, 0xad, 0x9c, 0x5d, 0x61, 0xb0, 0x1f, 0x6b, 0xad, 0xa5, 0xf7, 0xff, 0xdb, 0xa0, 0xb6, 0xf4, 0xa6 }; static const uint8_t nist_186_2_ecdsa_testvector_201_private[] = { /* d - byte alignment */ 0x00, 0x12, 0xee, 0xe9, 0x8d, 0x39, 0xf1, 0x54, 0x1f, 0x70, 0xb2, 0xc5, 0x45, 0xbe, 0xc7, 0x4b, 0x66, 0x84, 0x47, 0xb9, 0x42, 0x45, 0x9a, 0x1e, 0xd8, 0xdf, 0xcd, 0x93, 0xc0, 0xf1, 0x5f, 0x94, 0x4d, 0xb7, 0x66, 0x66, 0x36, 0x40, 0x81, 0xfc, 0x0d, 0xd3, 0xaf, 0xb3, 0xbe, 0xf7, 0xf5, 0xb5, 0x90, 0x92, 0xcf, 0x8f }; static const uint8_t nist_186_2_ecdsa_testvector_201_public_x[] = { /* Qx - byte alignment */ 0x00, 0xdc, 0x4b, 0xca, 0x5f, 0xf4, 0x2c, 0xe3, 0xf0, 0xf4, 0x14, 0x1e, 0x91, 0x2c, 0xbb, 0xcf, 0x56, 0x20, 0x87, 0x1f, 0xa3, 0x5d, 0xe2, 0x7d, 0xc7, 0xf3, 0xf0, 0xfd, 0x80, 0x75, 0x24, 0xba, 0x64, 0x98, 0x1f, 0x16, 0x4c, 0xa5, 0x45, 0x3d, 0xc5, 0xb2, 0xa3, 0x63, 0x8e, 0x1f, 0xea, 0x84, 0x18, 0x72, 0x8a, 0x3f }; static const uint8_t nist_186_2_ecdsa_testvector_201_public_y[] = { /* Qy - byte alignment */ 0x01, 0x1e, 0xc0, 0xf5, 0x90, 0x1e, 0xe9, 0x03, 0xe6, 0x04, 0xe9, 0xe6, 0xc8, 0x3c, 0x5e, 0xf8, 0x4b, 0x0a, 0x16, 0x54, 0xe9, 0xdd, 0xbd, 0xd5, 0x62, 0xd2, 0xb2, 0x23, 0x1b, 0x8f, 0x5b, 0x5f, 0xdd, 0x6d, 0x8e, 0xaf, 0x04, 0x3b, 0xf3, 0x27, 0x4e, 0xf5, 0x12, 0xab, 0x7a, 0xd7, 0x88, 0x64, 0xef, 0x89, 0xa0, 0x6d }; /* k = 0d98a9c6d99e49fc3657a674f483cf87d3848b199d8decf7478035807f25bcbf02af09055f8156176ab814ee87e29d5ae978bed */ static const uint8_t nist_186_2_ecdsa_testvector_201_out[] = { /* R - byte alignment */ 0x00, 0x16, 0xd5, 0xc0, 0xc9, 0xca, 0xed, 0x1e, 0xf8, 0x71, 0x09, 0x6f, 0xea, 0x97, 0x10, 0x29, 0x8b, 0x21, 0x01, 0x4b, 0x00, 0xba, 0x27, 0xaa, 0x22, 0x81, 0x77, 0x84, 0x8d, 0xdf, 0x63, 0x9a, 0xef, 0xbe, 0x8f, 0xae, 0x05, 0xd4, 0x04, 0xb4, 0xca, 0x57, 0x06, 0x15, 0xa7, 0x1d, 0xa4, 0xf4, 0xae, 0x0a, 0xaa, 0x43, /* S - byte alignment */ 0x00, 0xca, 0xe8, 0xea, 0xbd, 0x63, 0x3f, 0xef, 0x32, 0x15, 0x39, 0x3b, 0x5b, 0x84, 0x98, 0xc6, 0xfb, 0xf4, 0x82, 0xd6, 0x6b, 0xf8, 0x5e, 0x91, 0x13, 0x83, 0xc6, 0x4c, 0x97, 0x6e, 0x22, 0xb5, 0x53, 0x68, 0x8d, 0xdd, 0x9c, 0xdc, 0xdb, 0xca, 0x26, 0x78, 0x5d, 0xc0, 0x1f, 0x39, 0x50, 0x21, 0xd1, 0x97, 0x17, 0xad }; static const uint8_t nist_186_2_ecdsa_testvector_202_ptx[] = { /* Msg */ 0x7a, 0x4d, 0xde, 0x7d, 0x59, 0x8a, 0xd7, 0xc3, 0x35, 0x34, 0x66, 0xb2, 0xd7, 0x39, 0xcf, 0x4a, 0xd6, 0x29, 0x75, 0x33, 0xc6, 0x99, 0xab, 0x46, 0xad, 0xc5, 0xc8, 0x4f, 0xb6, 0x79, 0x79, 0x11, 0x2a, 0x31, 0x5c, 0x8b, 0x9b, 0x7f, 0xca, 0x7a, 0x63, 0xad, 0xf4, 0x1f, 0x4d, 0xa3, 0x31, 0x42, 0x91, 0x0c, 0x96, 0x77, 0x06, 0xb5, 0xc8, 0xa0, 0x93, 0x35, 0x0e, 0xb3, 0xe6, 0xd3, 0xaa, 0xbe, 0x69, 0xa4, 0x6a, 0x28, 0x72, 0xf4, 0x7a, 0x39, 0xbb, 0xe7, 0x7c, 0xdc, 0x11, 0x60, 0xda, 0xa4, 0x50, 0x22, 0x5b, 0x0e, 0x8e, 0x36, 0xf5, 0x06, 0x97, 0x8c, 0xe3, 0xac, 0x9a, 0xe5, 0xf7, 0x57, 0x21, 0xef, 0x30, 0xda, 0x46, 0xb2, 0x8f, 0x07, 0x24, 0x2c, 0x27, 0x72, 0x8d, 0x38, 0x74, 0x78, 0xfb, 0xb5, 0xed, 0x7f, 0xc8, 0xe3, 0xdc, 0x7e, 0xa1, 0x10, 0x6e, 0xc1, 0x38, 0x75, 0x06, 0xe6 }; static const uint8_t nist_186_2_ecdsa_testvector_202_private[] = { /* d - byte alignment */ 0x00, 0x3d, 0xda, 0x4a, 0xcf, 0x12, 0x75, 0xa9, 0xc8, 0xd7, 0xda, 0x0c, 0x7b, 0xcc, 0x1f, 0x06, 0xb8, 0xc3, 0xeb, 0x44, 0x47, 0x2d, 0x81, 0xf5, 0x01, 0x5e, 0x7b, 0x39, 0x74, 0xbc, 0x72, 0x71, 0x7f, 0x4c, 0x81, 0x13, 0xf7, 0x2f, 0xcf, 0xb6, 0xba, 0xd5, 0xe1, 0x0a, 0x4f, 0x57, 0xe0, 0x6a, 0x4a, 0x7d, 0x61, 0x62 }; static const uint8_t nist_186_2_ecdsa_testvector_202_public_x[] = { /* Qx - byte alignment */ 0x01, 0xd8, 0x64, 0x9a, 0xc8, 0xd0, 0x85, 0x6c, 0x86, 0x21, 0xe7, 0xb7, 0x01, 0xaa, 0x2d, 0x86, 0x9f, 0x18, 0xf0, 0x12, 0x39, 0x16, 0x89, 0xa7, 0xfb, 0xb3, 0x82, 0x8d, 0xc8, 0xef, 0xac, 0xcc, 0xa7, 0x04, 0x87, 0x8b, 0xc2, 0x97, 0xe1, 0x06, 0x33, 0xb4, 0x2b, 0x1c, 0x22, 0x15, 0xc8, 0xf4, 0x16, 0xf7, 0xd8, 0x49 }; static const uint8_t nist_186_2_ecdsa_testvector_202_public_y[] = { /* Qy - byte alignment */ 0x01, 0x4d, 0x30, 0x26, 0xd0, 0xe8, 0x77, 0x1c, 0xf3, 0x27, 0xc3, 0x81, 0xbf, 0xfe, 0x50, 0xc2, 0x8f, 0xdd, 0x00, 0x88, 0x24, 0xd8, 0x89, 0xc0, 0x37, 0x2b, 0x27, 0x02, 0xd4, 0xb2, 0x1d, 0x46, 0x51, 0x1d, 0x00, 0xba, 0x42, 0x4f, 0xe5, 0x61, 0x39, 0x40, 0xc9, 0x8b, 0xde, 0x1c, 0x0c, 0x37, 0x31, 0x52, 0x24, 0x1e }; /* k = 035f0a268fa93e03e6c2ad7a28c61ab3e19e83a41d5d9f28865cce8eb3a5bc8ed4bd6c5e744444959d762f6b30ed63405667ee7 */ static const uint8_t nist_186_2_ecdsa_testvector_202_out[] = { /* R - byte alignment */ 0x00, 0x98, 0x98, 0xd7, 0x3a, 0xee, 0x50, 0xeb, 0x24, 0x16, 0xc7, 0x03, 0x75, 0x62, 0xe2, 0xa3, 0xa7, 0x14, 0xbe, 0x98, 0xff, 0x63, 0xf0, 0xec, 0x7e, 0x6e, 0x32, 0x8b, 0x3f, 0x40, 0x2c, 0xb9, 0x97, 0xc5, 0x78, 0x3d, 0x5d, 0x27, 0x1a, 0x58, 0x4f, 0x96, 0x7e, 0xba, 0xf6, 0x1d, 0x6d, 0xfc, 0x78, 0x56, 0xcb, 0xd4, /* S - byte alignment */ 0x00, 0xb5, 0x3e, 0xf2, 0x5a, 0x9a, 0x7b, 0xe8, 0x6f, 0xc8, 0xb8, 0xe9, 0x12, 0x76, 0xfa, 0x46, 0x10, 0xdc, 0x63, 0xae, 0x4b, 0xee, 0x7d, 0x22, 0xfa, 0x5a, 0x85, 0xda, 0x54, 0x49, 0x85, 0x45, 0x15, 0xcb, 0xae, 0xe1, 0x60, 0x1d, 0xab, 0xef, 0x7c, 0x37, 0x52, 0x35, 0x7b, 0xe0, 0x62, 0x29, 0x33, 0xcc, 0x89, 0x2f }; static const uint8_t nist_186_2_ecdsa_testvector_203_ptx[] = { /* Msg */ 0xb5, 0x11, 0xd8, 0xdf, 0xe9, 0xe0, 0x6a, 0x6d, 0xac, 0x8a, 0xce, 0x58, 0xe7, 0x27, 0x50, 0x0b, 0x66, 0x20, 0x41, 0xdf, 0x2e, 0x37, 0xef, 0x3f, 0x11, 0xc7, 0xd5, 0x0b, 0x7f, 0x4d, 0x0e, 0x39, 0x9f, 0x28, 0x10, 0xc2, 0x9e, 0x9d, 0x96, 0xbc, 0x48, 0x1e, 0xde, 0xc3, 0xd5, 0xcc, 0x15, 0x9e, 0x05, 0x3a, 0x10, 0x20, 0x6f, 0x74, 0x3c, 0x4b, 0x15, 0x40, 0xd8, 0xbc, 0x3d, 0xa3, 0x61, 0x43, 0x7c, 0xa7, 0x4e, 0xd1, 0x14, 0x5c, 0xfe, 0x97, 0x80, 0x1d, 0xef, 0x6c, 0x4c, 0x14, 0x30, 0x6f, 0x2a, 0x01, 0x19, 0xee, 0x43, 0x36, 0x39, 0x87, 0xcb, 0xe6, 0x90, 0x8d, 0xd8, 0xa0, 0xfe, 0xae, 0x74, 0x17, 0xfc, 0xd2, 0xf0, 0x24, 0x8a, 0x45, 0x7c, 0x0e, 0x68, 0x19, 0xf5, 0x08, 0x89, 0xc6, 0xfe, 0xfb, 0xc5, 0x14, 0x52, 0x86, 0xce, 0x3b, 0x59, 0x44, 0x65, 0x48, 0xf9, 0x4d, 0xce, 0xc2 }; static const uint8_t nist_186_2_ecdsa_testvector_203_private[] = { /* d - byte alignment */ 0x00, 0x17, 0x14, 0xa3, 0x15, 0xa0, 0xf3, 0xd7, 0x1e, 0xe5, 0x53, 0xb8, 0x20, 0x4b, 0xc6, 0x57, 0xa7, 0x24, 0x65, 0xe4, 0x37, 0x4e, 0xb6, 0xae, 0x77, 0xcc, 0x2f, 0x04, 0x9b, 0x68, 0x58, 0x3b, 0x87, 0x09, 0x60, 0x7e, 0x32, 0x1c, 0xa7, 0x61, 0x44, 0x9c, 0x66, 0x33, 0x03, 0x4c, 0x28, 0xa7, 0x2c, 0x38, 0xda, 0x20 }; static const uint8_t nist_186_2_ecdsa_testvector_203_public_x[] = { /* Qx - byte alignment */ 0x00, 0x7f, 0xc8, 0xfa, 0xfd, 0x2c, 0xe5, 0x85, 0xcd, 0xea, 0xd3, 0x17, 0x7b, 0x8c, 0xfc, 0xfa, 0x09, 0x61, 0xc6, 0xf1, 0x21, 0x99, 0x11, 0xa0, 0x70, 0xaa, 0x45, 0x10, 0xe9, 0xdc, 0x11, 0x09, 0x6e, 0xed, 0xb2, 0x3b, 0xfd, 0xcd, 0xd8, 0xe7, 0xbd, 0x27, 0x49, 0x90, 0x6b, 0x4f, 0x15, 0x59, 0x3a, 0x3b, 0xf7, 0x61 }; static const uint8_t nist_186_2_ecdsa_testvector_203_public_y[] = { /* Qy - byte alignment */ 0x01, 0xaf, 0x05, 0x22, 0x54, 0x63, 0x1f, 0xf7, 0x99, 0x97, 0x39, 0x85, 0x9d, 0x93, 0x22, 0x9d, 0xce, 0x24, 0x22, 0x43, 0xda, 0xde, 0xae, 0x42, 0xc1, 0xef, 0xb7, 0xba, 0xc4, 0x8b, 0x7f, 0x09, 0xc2, 0x7d, 0xb7, 0xc8, 0x7d, 0xd5, 0x20, 0xa7, 0xa2, 0xb9, 0x90, 0x65, 0x60, 0x32, 0x8a, 0x67, 0xdb, 0x6c, 0x8d, 0xf2 }; /* k = 0c5f8589aff6152ef23d020157f712083d7901b711de486da9fa0ec3243a1780ea6941e1a2e9ca5082e9127f16e930e6a82eb5e */ static const uint8_t nist_186_2_ecdsa_testvector_203_out[] = { /* R - byte alignment */ 0x00, 0xaf, 0xc9, 0x92, 0xe4, 0x79, 0xf2, 0x59, 0x51, 0x90, 0x3c, 0x52, 0x21, 0xf0, 0x9f, 0x11, 0xb3, 0x38, 0xf2, 0x7c, 0x65, 0x70, 0x11, 0x8f, 0xfb, 0x2a, 0xdc, 0xec, 0xb9, 0x9e, 0x9c, 0x91, 0x55, 0x6c, 0xe4, 0xbd, 0x4d, 0xb0, 0x11, 0xcd, 0x8a, 0xf8, 0x1b, 0x4e, 0x67, 0x09, 0x0e, 0x12, 0xdc, 0xb1, 0x92, 0x4b, /* S - byte alignment */ 0x00, 0x48, 0x46, 0xc5, 0x03, 0xdd, 0xe7, 0x2b, 0x6d, 0x72, 0xaf, 0xbf, 0x60, 0x65, 0x9c, 0xcb, 0x2f, 0x4c, 0x7d, 0x94, 0x87, 0x82, 0x19, 0x56, 0x0e, 0xde, 0x27, 0xc2, 0x76, 0x4b, 0xa4, 0x36, 0xce, 0x52, 0x1f, 0xd0, 0x64, 0xc7, 0xa0, 0x6f, 0x3a, 0xf4, 0x2b, 0xef, 0xb7, 0x77, 0x55, 0xbe, 0x52, 0x6a, 0xc1, 0xc8 }; static const uint8_t nist_186_2_ecdsa_testvector_204_ptx[] = { /* Msg */ 0xd6, 0x7a, 0xa8, 0xfd, 0xd8, 0x68, 0x44, 0x3c, 0x1c, 0xd5, 0x90, 0xd9, 0x01, 0x32, 0x8e, 0xdf, 0x34, 0x0e, 0xe3, 0x6a, 0x2e, 0x87, 0x80, 0xbc, 0xfe, 0x04, 0x81, 0x8e, 0x49, 0x26, 0x55, 0xa4, 0x8f, 0xfb, 0x20, 0xa4, 0xaf, 0x75, 0x5d, 0x28, 0xae, 0x1b, 0xc8, 0x12, 0xb4, 0xff, 0x7b, 0x20, 0x57, 0xf0, 0x57, 0xc0, 0x1c, 0xf0, 0xa5, 0x25, 0x3b, 0xe9, 0xfd, 0x9a, 0xa3, 0x9b, 0x67, 0x16, 0x3e, 0xd9, 0xc1, 0x11, 0x76, 0xf5, 0x61, 0x97, 0xf8, 0x79, 0xfb, 0x9b, 0xb8, 0x17, 0xc4, 0x8d, 0x35, 0xe3, 0xd7, 0x2f, 0xfe, 0xc0, 0xd8, 0xa4, 0x75, 0x18, 0xd8, 0xc9, 0xd3, 0xd1, 0x79, 0xc9, 0x6c, 0x7c, 0x53, 0xec, 0x35, 0xcf, 0x96, 0xb0, 0x83, 0x55, 0xf0, 0x1b, 0x15, 0x64, 0xb1, 0x4f, 0x55, 0x50, 0x2d, 0x5f, 0xdb, 0xde, 0x61, 0x61, 0x33, 0xfb, 0xda, 0xc5, 0xe0, 0xae, 0xd3, 0xe5 }; static const uint8_t nist_186_2_ecdsa_testvector_204_private[] = { /* d - byte alignment */ 0x00, 0xe1, 0x6f, 0x43, 0x1c, 0x80, 0x4c, 0x22, 0x20, 0x5d, 0xaa, 0xcd, 0x72, 0x2b, 0x0b, 0xae, 0xb6, 0xb0, 0x3e, 0xe0, 0x2e, 0x3a, 0x0e, 0x49, 0xe8, 0x8e, 0xda, 0x3f, 0x8f, 0xe9, 0x5f, 0xc3, 0x1f, 0xb5, 0x16, 0xfa, 0x51, 0xab, 0x02, 0x14, 0xda, 0xb0, 0xcf, 0x74, 0xd4, 0x26, 0x22, 0x4e, 0x52, 0x4d, 0xc3, 0x0d }; static const uint8_t nist_186_2_ecdsa_testvector_204_public_x[] = { /* Qx - byte alignment */ 0x00, 0x47, 0x08, 0xc0, 0x64, 0x1f, 0x07, 0xc8, 0x8d, 0x4f, 0xf2, 0xc2, 0xfe, 0x4d, 0x7a, 0x11, 0x7d, 0xf8, 0xfb, 0x96, 0x9e, 0x86, 0x04, 0x17, 0x3f, 0x72, 0x1d, 0x69, 0x1c, 0xa5, 0x08, 0x8c, 0x38, 0x9b, 0xd4, 0x17, 0x5b, 0x71, 0xf2, 0x0d, 0x89, 0x93, 0x76, 0xf0, 0x8d, 0xef, 0xcd, 0x01, 0xe1, 0xed, 0x47, 0x41 }; static const uint8_t nist_186_2_ecdsa_testvector_204_public_y[] = { /* Qy - byte alignment */ 0x01, 0x14, 0xd1, 0x16, 0x1d, 0x1a, 0xda, 0x4a, 0x30, 0x15, 0xa0, 0xfc, 0x9a, 0x61, 0x63, 0xe3, 0xd3, 0x48, 0x09, 0x91, 0x5e, 0x47, 0x7a, 0x63, 0x77, 0x8f, 0xdf, 0x09, 0xe8, 0x20, 0x2f, 0xc9, 0xba, 0x6d, 0x41, 0xd0, 0x9f, 0x9f, 0x8f, 0xa1, 0x37, 0x7e, 0xf3, 0xaa, 0x06, 0xa6, 0xe4, 0x5d, 0xcb, 0x36, 0xdf, 0x5c }; /* k = 05f3f6c0a13a21123854a6ffa49f15a3f048181aa05de4b8a951e35745d19b53ccf73d47d9e7b4f580ac0a28a52d2be059aaf21 */ static const uint8_t nist_186_2_ecdsa_testvector_204_out[] = { /* R - byte alignment */ 0x00, 0x9c, 0x9b, 0xd4, 0x83, 0x71, 0x61, 0x59, 0xee, 0xda, 0x02, 0x20, 0x66, 0x5f, 0xfa, 0x68, 0x20, 0xa3, 0xd6, 0x9e, 0x88, 0x20, 0x7e, 0xcc, 0x6b, 0xc9, 0x20, 0xf6, 0x05, 0xdf, 0x6c, 0x15, 0xd1, 0x47, 0x37, 0xf7, 0xca, 0xaf, 0x96, 0xea, 0x62, 0xac, 0xb5, 0x30, 0xb2, 0x08, 0xb3, 0xc6, 0xfc, 0x25, 0xe3, 0x3e, /* S - byte alignment */ 0x00, 0xb6, 0x1d, 0x36, 0xb3, 0xce, 0x87, 0x60, 0xc2, 0x06, 0x2a, 0x0a, 0x54, 0x1d, 0x87, 0xa9, 0x19, 0xaa, 0x33, 0x93, 0x5c, 0xa9, 0x96, 0x55, 0x0b, 0x00, 0x7f, 0x74, 0xe2, 0x44, 0x6a, 0xf8, 0x59, 0xc9, 0xfa, 0xd1, 0x66, 0xaf, 0x23, 0x1e, 0xba, 0x62, 0x62, 0x2d, 0xcc, 0x96, 0x5a, 0x1c, 0xa2, 0x06, 0x30, 0x04 }; static const uint8_t nist_186_2_ecdsa_testvector_205_ptx[] = { /* Msg */ 0x88, 0x60, 0xd5, 0x6c, 0xf5, 0xe0, 0x3c, 0xc1, 0x95, 0x5f, 0xd9, 0xd6, 0xd3, 0x72, 0x83, 0x75, 0x5f, 0xd1, 0x9b, 0xca, 0xc8, 0xa2, 0x42, 0xc4, 0x4c, 0xfb, 0xc9, 0xbe, 0xef, 0xa2, 0x69, 0x5f, 0xca, 0x17, 0x35, 0xbe, 0xa6, 0xd4, 0x4c, 0xca, 0xc9, 0xd3, 0x53, 0xea, 0x10, 0x51, 0x23, 0xe0, 0x3e, 0xd2, 0xbe, 0xf3, 0x94, 0x65, 0x88, 0x4d, 0xa2, 0x29, 0xb4, 0xa2, 0x5c, 0x10, 0xfc, 0x12, 0x70, 0xe3, 0x95, 0x51, 0xd7, 0x86, 0x62, 0x05, 0xaa, 0x7e, 0x68, 0x6f, 0x38, 0xb0, 0x82, 0x4e, 0x55, 0x6b, 0x55, 0x00, 0xf5, 0xa9, 0x87, 0xeb, 0xf9, 0x92, 0x2c, 0x1b, 0x48, 0x42, 0x81, 0x2c, 0x22, 0xcc, 0xdd, 0x6b, 0xb1, 0x7f, 0xe4, 0x38, 0xe1, 0x68, 0xfe, 0xaf, 0x72, 0x17, 0x08, 0x87, 0x4c, 0xa6, 0x49, 0x39, 0x12, 0xf8, 0xa7, 0x65, 0xf9, 0x3f, 0x1a, 0x72, 0xdb, 0xc1, 0x62, 0x76 }; static const uint8_t nist_186_2_ecdsa_testvector_205_private[] = { /* d - byte alignment */ 0x00, 0x98, 0x8d, 0x40, 0xb2, 0x1e, 0xa9, 0x9e, 0x93, 0xf4, 0xf5, 0x08, 0xb5, 0x3e, 0x18, 0x96, 0xcb, 0xfc, 0xd1, 0x0f, 0x4e, 0xcd, 0xbe, 0x30, 0x27, 0x8b, 0x95, 0xbb, 0x14, 0xc0, 0x75, 0x10, 0xd0, 0x12, 0x5f, 0xa3, 0xf5, 0x31, 0xf6, 0xcb, 0xcc, 0x3c, 0x39, 0x23, 0x77, 0xbc, 0xd6, 0x04, 0xc5, 0x82, 0xfe, 0xa9 }; static const uint8_t nist_186_2_ecdsa_testvector_205_public_x[] = { /* Qx - byte alignment */ 0x01, 0xc5, 0x64, 0x64, 0xa2, 0xff, 0x1f, 0xa2, 0x7a, 0x5c, 0x61, 0x5a, 0x30, 0x1e, 0xfa, 0xe2, 0xd0, 0x52, 0xa5, 0x2b, 0xd9, 0x9b, 0x32, 0x52, 0x94, 0x00, 0xcb, 0xe0, 0xed, 0x44, 0x06, 0xdd, 0x15, 0x73, 0x6e, 0xb4, 0x13, 0xb6, 0x38, 0x1c, 0x56, 0xca, 0x68, 0x9d, 0xd0, 0xe4, 0x0d, 0x0e, 0x1b, 0x2e, 0x25, 0x19 }; static const uint8_t nist_186_2_ecdsa_testvector_205_public_y[] = { /* Qy - byte alignment */ 0x00, 0xcd, 0xcd, 0x0c, 0x8e, 0x3a, 0x9a, 0xde, 0x00, 0x9d, 0xca, 0x37, 0xa3, 0x99, 0xd8, 0xe4, 0x12, 0xed, 0x1a, 0x55, 0xdc, 0x0c, 0x9c, 0x92, 0x64, 0x67, 0xe3, 0x5c, 0x9b, 0x89, 0x5d, 0x4d, 0x59, 0x08, 0x3c, 0x8f, 0xeb, 0xb2, 0xe8, 0xa3, 0x81, 0x81, 0x24, 0x65, 0xff, 0x70, 0x64, 0x99, 0x6a, 0xed, 0xb6, 0x68 }; /* k = 09611532af142d75dfbda90b6a375351660ad39c30b7320f73b56ac7488ce62a2357538fc2a7cb73147ca2a8163b754d6d2e94e */ static const uint8_t nist_186_2_ecdsa_testvector_205_out[] = { /* R - byte alignment */ 0x00, 0x25, 0xd8, 0x0a, 0xb8, 0x45, 0x97, 0x76, 0xfd, 0xf1, 0x88, 0xc1, 0x03, 0xe9, 0xcc, 0x7a, 0x4c, 0xa2, 0xce, 0xaa, 0x2f, 0xee, 0xa1, 0x8e, 0xa7, 0xf2, 0xb4, 0xba, 0x06, 0x30, 0xec, 0x0f, 0xf3, 0x03, 0xd4, 0x0a, 0xbb, 0xe2, 0x5e, 0xc2, 0x08, 0xa9, 0xcc, 0xe3, 0xd3, 0xd9, 0x2d, 0x81, 0xa5, 0xa4, 0xfd, 0xcc, /* S - byte alignment */ 0x00, 0x1a, 0x08, 0x28, 0x4e, 0xd5, 0xd9, 0xbf, 0xed, 0x00, 0x3b, 0xb5, 0xf0, 0x64, 0x57, 0x00, 0x38, 0xc4, 0xa8, 0x31, 0x65, 0xbd, 0x78, 0xc1, 0x63, 0xf1, 0xeb, 0x41, 0x7a, 0x93, 0x37, 0x4e, 0x19, 0xdc, 0x87, 0xc4, 0x7b, 0x79, 0xf0, 0x46, 0x27, 0xe9, 0x39, 0x0f, 0xa0, 0xcf, 0x93, 0xe6, 0x9e, 0xd8, 0x4d, 0xc5 }; static const uint8_t nist_186_2_ecdsa_testvector_206_ptx[] = { /* Msg */ 0x59, 0x24, 0xcd, 0xe8, 0xbf, 0x72, 0xa6, 0x55, 0xd2, 0x6b, 0x5c, 0x88, 0x7c, 0xe7, 0xbf, 0x21, 0xad, 0xa3, 0xe0, 0xfc, 0xa0, 0x7e, 0x76, 0x06, 0x5f, 0xe8, 0x80, 0x4f, 0x89, 0x97, 0x2c, 0x61, 0x53, 0x7b, 0xf8, 0xd1, 0xcd, 0xf5, 0x17, 0x13, 0x67, 0x44, 0x16, 0x92, 0xb3, 0x40, 0xbf, 0x00, 0x6c, 0x4a, 0x3e, 0xeb, 0xb8, 0x83, 0x82, 0x92, 0xaa, 0x3c, 0xe6, 0xf6, 0x0b, 0xae, 0x11, 0x34, 0x5a, 0xeb, 0x1a, 0x11, 0x11, 0x15, 0xf0, 0xd7, 0x2a, 0xce, 0xfa, 0x60, 0xe2, 0xef, 0xfa, 0x70, 0xbd, 0x7d, 0x37, 0x48, 0xca, 0xd9, 0xdb, 0x77, 0x28, 0x36, 0x9a, 0xf4, 0xc9, 0x50, 0x94, 0x6a, 0x76, 0x5c, 0x7d, 0xd3, 0x13, 0x3a, 0xfb, 0x48, 0x25, 0xf2, 0x4f, 0x17, 0x91, 0x5e, 0x38, 0x17, 0xa6, 0x24, 0x14, 0x38, 0x5e, 0xe8, 0x49, 0x5e, 0xe1, 0xbf, 0xe3, 0x70, 0x4b, 0xe6, 0x7f, 0xab }; static const uint8_t nist_186_2_ecdsa_testvector_206_private[] = { /* d - byte alignment */ 0x00, 0x76, 0xa9, 0x20, 0x86, 0x24, 0x0f, 0x51, 0xa0, 0x00, 0xb7, 0x87, 0x35, 0x06, 0xf6, 0x4e, 0xb1, 0x44, 0xaa, 0xc0, 0xd0, 0xa8, 0xda, 0x2b, 0x28, 0x9f, 0x94, 0x0a, 0xbd, 0x35, 0x39, 0xef, 0x58, 0x67, 0xb0, 0x8d, 0x4a, 0x79, 0xc0, 0xb5, 0xbf, 0x18, 0x36, 0x6d, 0x7c, 0xfe, 0xfa, 0xc7, 0xb0, 0x91, 0x9c, 0x0e }; static const uint8_t nist_186_2_ecdsa_testvector_206_public_x[] = { /* Qx - byte alignment */ 0x01, 0x1e, 0x48, 0x59, 0x66, 0x9e, 0x29, 0xaa, 0xdb, 0x00, 0x20, 0xf3, 0x76, 0xc1, 0x21, 0x4d, 0x1b, 0x34, 0x44, 0x4b, 0x92, 0x9c, 0xee, 0xe2, 0x6a, 0xdb, 0xf6, 0xf2, 0xc5, 0x4f, 0x65, 0xf6, 0xa7, 0x4a, 0x52, 0xbe, 0x67, 0xb2, 0x12, 0x53, 0x63, 0xcd, 0xe3, 0xaa, 0xbe, 0x9d, 0xa3, 0xa3, 0xe0, 0x18, 0x1a, 0x77 }; static const uint8_t nist_186_2_ecdsa_testvector_206_public_y[] = { /* Qy - byte alignment */ 0x00, 0x83, 0xab, 0x0d, 0xa1, 0xf5, 0x29, 0xa5, 0x8c, 0x3e, 0x68, 0x75, 0x06, 0x18, 0xcb, 0x40, 0x99, 0x63, 0x31, 0xac, 0xdc, 0x2a, 0x70, 0x90, 0xc3, 0x2f, 0x1f, 0x2b, 0xb5, 0x94, 0x14, 0xd1, 0x1a, 0x30, 0x0d, 0x13, 0x6e, 0x08, 0x79, 0xc3, 0x66, 0x8a, 0xeb, 0xbe, 0x66, 0x27, 0x26, 0x7c, 0x49, 0xcc, 0x19, 0x06 }; /* k = 0e52a50b6bbdd7f109b01341502dd471e60de74c0c3b37bdefa78d9f4e5b875d3744c109fa205e25109d081dfc2fbd363939551 */ static const uint8_t nist_186_2_ecdsa_testvector_206_out[] = { /* R - byte alignment */ 0x00, 0xfd, 0xc5, 0x3f, 0xe5, 0xe4, 0x97, 0x62, 0x5c, 0x8d, 0x69, 0xb7, 0x66, 0x61, 0xda, 0x56, 0x6a, 0x97, 0xde, 0x20, 0x09, 0xd2, 0xcc, 0xde, 0xd1, 0x1e, 0x02, 0x4e, 0xad, 0x4c, 0xbc, 0xb3, 0xf7, 0x38, 0x3a, 0x1e, 0x3d, 0xab, 0x04, 0x64, 0xc4, 0x9f, 0xdd, 0x7b, 0xe2, 0x3c, 0xcd, 0xbf, 0xc1, 0x6d, 0xc7, 0x9b, /* S - byte alignment */ 0x00, 0x6f, 0x64, 0x9e, 0x3a, 0x89, 0xbd, 0x86, 0x03, 0x10, 0xf9, 0x7b, 0x3f, 0x0f, 0xc4, 0xf9, 0x66, 0x38, 0x55, 0x56, 0xe1, 0xff, 0x62, 0x0b, 0x4c, 0x5b, 0x0d, 0x6e, 0x84, 0xaa, 0xac, 0x50, 0x3c, 0x42, 0x81, 0x03, 0xd2, 0xf1, 0x43, 0xac, 0x9f, 0xb1, 0x4b, 0xc4, 0xff, 0xbe, 0xde, 0xe5, 0xa5, 0x38, 0xc5, 0xd8 }; static const uint8_t nist_186_2_ecdsa_testvector_207_ptx[] = { /* Msg */ 0x30, 0x3b, 0x55, 0x09, 0xd2, 0xf9, 0x6f, 0xfb, 0x7b, 0xbe, 0x1e, 0x35, 0x3f, 0x61, 0xac, 0x65, 0x61, 0x25, 0x20, 0x08, 0xbb, 0x8e, 0xbf, 0xdd, 0x60, 0x73, 0xd4, 0x99, 0x81, 0x53, 0xad, 0xdc, 0x8d, 0xed, 0xe6, 0x64, 0x9c, 0x0a, 0xea, 0x81, 0x0e, 0x9e, 0xb6, 0xc8, 0x6f, 0x0f, 0xe0, 0x0c, 0x9e, 0xd5, 0xd8, 0x8a, 0x2f, 0x43, 0x6f, 0x64, 0x0d, 0xa4, 0x95, 0x51, 0x64, 0x8a, 0x67, 0x92, 0xbe, 0x63, 0x69, 0x28, 0x6c, 0x4d, 0x0f, 0x44, 0x27, 0x2c, 0x83, 0xff, 0xf7, 0xf9, 0xa2, 0x4b, 0x54, 0x5d, 0x47, 0x29, 0x8b, 0x7e, 0xcd, 0x1d, 0x64, 0x19, 0xcf, 0xdf, 0x02, 0xd1, 0x32, 0x54, 0x0a, 0xc6, 0x66, 0xbc, 0x08, 0x6a, 0xe8, 0x2d, 0x0e, 0x90, 0x0c, 0x40, 0x9e, 0xc6, 0xf9, 0x0a, 0xc9, 0xe5, 0xf5, 0x4e, 0x99, 0xe6, 0xe3, 0xf0, 0xad, 0xf7, 0x09, 0xad, 0x23, 0xce, 0x17, 0x0a }; static const uint8_t nist_186_2_ecdsa_testvector_207_private[] = { /* d - byte alignment */ 0x00, 0x53, 0x1e, 0xd2, 0xc1, 0x33, 0x5a, 0x2b, 0x8c, 0x8c, 0x40, 0x99, 0x25, 0x00, 0xc5, 0xfe, 0x5d, 0xd3, 0xde, 0x77, 0x95, 0x3b, 0x20, 0xc6, 0x7d, 0xc5, 0xc3, 0xe1, 0x42, 0x97, 0xd9, 0x64, 0xdd, 0xef, 0xb7, 0x4e, 0x82, 0x67, 0x9c, 0xbd, 0x32, 0x60, 0xed, 0x52, 0xdb, 0xd8, 0xca, 0x1c, 0xf4, 0x6a, 0x77, 0xe7 }; static const uint8_t nist_186_2_ecdsa_testvector_207_public_x[] = { /* Qx - byte alignment */ 0x00, 0x55, 0xc7, 0x44, 0x98, 0x28, 0x54, 0xc1, 0x22, 0x02, 0xe5, 0x51, 0x72, 0x36, 0x25, 0xd5, 0x22, 0x88, 0x30, 0x4f, 0x62, 0x8d, 0x33, 0xd6, 0xa8, 0x4b, 0xcf, 0x5d, 0xb3, 0x17, 0xd1, 0x5b, 0x4c, 0xed, 0x7f, 0xf9, 0x36, 0x02, 0x5e, 0x7e, 0x86, 0x34, 0xab, 0x99, 0x52, 0x6a, 0x50, 0x01, 0x01, 0xc7, 0xf4, 0x53 }; static const uint8_t nist_186_2_ecdsa_testvector_207_public_y[] = { /* Qy - byte alignment */ 0x01, 0x67, 0x6a, 0xb6, 0x66, 0xa9, 0xe9, 0xcd, 0xd7, 0xda, 0x45, 0x20, 0xfe, 0x82, 0x10, 0x80, 0x75, 0x9e, 0x9b, 0xe2, 0x3f, 0xd5, 0xdd, 0x74, 0x9d, 0x66, 0x89, 0xab, 0xae, 0x50, 0x1e, 0xd2, 0x55, 0xda, 0xfe, 0x02, 0x13, 0x60, 0xe5, 0xab, 0xbd, 0xde, 0x07, 0xdf, 0x05, 0xf5, 0x46, 0x57, 0xa6, 0x87, 0x12, 0x53 }; /* k = 09213abf4a10b44c52c89d0dee38089cd52fc54959d1a4006a3f8771b57ebd30f4f58c9ab3f54d4dbfd6fcc304dea203137c34b */ static const uint8_t nist_186_2_ecdsa_testvector_207_out[] = { /* R - byte alignment */ 0x00, 0x8e, 0x0c, 0x19, 0xef, 0x52, 0x51, 0x9e, 0xb2, 0x27, 0x4e, 0xa0, 0x53, 0xa6, 0xb3, 0x4e, 0xa8, 0x82, 0xc1, 0xb7, 0xd3, 0xe1, 0x9c, 0x9f, 0x05, 0x97, 0x48, 0x82, 0x31, 0x0b, 0x05, 0x9c, 0x02, 0xa4, 0x85, 0xbd, 0xe6, 0x31, 0xaf, 0x08, 0xd2, 0x0f, 0x3e, 0x12, 0x04, 0x32, 0x51, 0xb5, 0x02, 0x7c, 0xa3, 0xa7, /* S - byte alignment */ 0x00, 0x15, 0xeb, 0xc7, 0x7e, 0xb4, 0x55, 0x66, 0x61, 0x08, 0x11, 0xb6, 0xa4, 0xac, 0xcc, 0x5c, 0x85, 0x08, 0xff, 0x8b, 0xab, 0x68, 0x7c, 0xb9, 0xa7, 0xd6, 0x0d, 0x61, 0x85, 0x6c, 0x73, 0x80, 0x27, 0x39, 0x33, 0x06, 0xc3, 0x40, 0x07, 0x8e, 0x7d, 0x77, 0xeb, 0x1c, 0x43, 0xb9, 0x41, 0xe1, 0x97, 0xcd, 0xed, 0x48 }; static const uint8_t nist_186_2_ecdsa_testvector_208_ptx[] = { /* Msg */ 0x8c, 0xf2, 0x2f, 0x5a, 0xa2, 0x23, 0x84, 0xe7, 0x98, 0xa9, 0xf9, 0xb3, 0xfc, 0x6c, 0x29, 0xf6, 0xf2, 0x8b, 0x05, 0xf5, 0x7b, 0x96, 0x2f, 0xd7, 0xf7, 0xfe, 0xa4, 0xb4, 0xe9, 0xc9, 0x9e, 0xf0, 0xfb, 0x8a, 0xb9, 0xc7, 0x42, 0x91, 0x54, 0x28, 0xc2, 0x5f, 0x3a, 0xc7, 0x35, 0x5d, 0x82, 0x6e, 0x08, 0xcd, 0xb3, 0x93, 0xa7, 0x00, 0x2c, 0x30, 0xfa, 0xc9, 0xc3, 0xcf, 0x2f, 0x33, 0xad, 0xe4, 0xbb, 0x6f, 0x9e, 0x60, 0x9b, 0x10, 0x30, 0x83, 0xe0, 0x7b, 0x89, 0xf2, 0x6a, 0x98, 0x38, 0x09, 0xf4, 0xce, 0x61, 0x72, 0x51, 0x2f, 0x1a, 0xf7, 0xf4, 0xef, 0x14, 0x94, 0xb6, 0x1b, 0x7e, 0xd1, 0xd4, 0x87, 0x26, 0x4f, 0x37, 0x09, 0xe2, 0xa0, 0xf9, 0xe4, 0x2e, 0x5b, 0x24, 0x87, 0x16, 0x70, 0xbd, 0x78, 0x57, 0xba, 0x01, 0x8b, 0xc1, 0xd3, 0xee, 0x57, 0xdf, 0x2c, 0x05, 0xea, 0xda, 0x5d }; static const uint8_t nist_186_2_ecdsa_testvector_208_private[] = { /* d - byte alignment */ 0x00, 0x57, 0x2e, 0x4c, 0x0f, 0x38, 0x1b, 0x61, 0xa0, 0xd4, 0x7d, 0xfd, 0xa6, 0x77, 0xe9, 0x91, 0x5d, 0x98, 0x46, 0x3d, 0xfd, 0x3d, 0x5b, 0x87, 0xf2, 0xa4, 0xa4, 0x10, 0x54, 0xdf, 0xab, 0x92, 0x7b, 0xbc, 0x9b, 0x5e, 0x45, 0xf0, 0xe4, 0x37, 0xd0, 0x15, 0xc3, 0x79, 0xcb, 0x3d, 0x18, 0xc3, 0x75, 0x1f, 0x2b, 0x8f }; static const uint8_t nist_186_2_ecdsa_testvector_208_public_x[] = { /* Qx - byte alignment */ 0x00, 0xfd, 0xec, 0xb7, 0xbf, 0xe2, 0xd0, 0xa0, 0x5a, 0xf1, 0xa9, 0xbc, 0xfb, 0xa7, 0x75, 0xf1, 0x99, 0xa9, 0x6c, 0x95, 0x7f, 0x9d, 0xc7, 0x76, 0x25, 0x1f, 0x7a, 0x76, 0x1f, 0x11, 0xc6, 0x90, 0x3f, 0xa2, 0xc0, 0xb0, 0x11, 0x82, 0xee, 0xa0, 0xdb, 0xdb, 0xe1, 0x4f, 0x05, 0x42, 0x87, 0x6c, 0xb8, 0xf9, 0x72, 0xff }; static const uint8_t nist_186_2_ecdsa_testvector_208_public_y[] = { /* Qy - byte alignment */ 0x00, 0x23, 0x38, 0x98, 0x88, 0xf2, 0x1b, 0x65, 0x88, 0x5c, 0x86, 0xa1, 0x2a, 0x87, 0x05, 0x82, 0x9c, 0xa1, 0x96, 0x77, 0xcd, 0x34, 0x42, 0xf5, 0x8c, 0x0e, 0x7b, 0xa1, 0xde, 0x37, 0x9b, 0x0c, 0x6e, 0xe8, 0xd4, 0x64, 0x9f, 0x79, 0x99, 0xa4, 0x3f, 0x9c, 0x21, 0x0f, 0x12, 0xf2, 0x83, 0xe8, 0xd5, 0x63, 0x30, 0x64 }; /* k = 0e96980c24a092c58f466f7bbbc194b03e0200a0a714f778caab9fe956feaa4d2e3a1bfd8f2bbe376588d3d3cb90071fec4502a */ static const uint8_t nist_186_2_ecdsa_testvector_208_out[] = { /* R - byte alignment */ 0x00, 0xb8, 0x3b, 0xdd, 0xf5, 0x8e, 0x3e, 0x82, 0x77, 0x0f, 0x38, 0x12, 0x71, 0x53, 0x2d, 0x11, 0xc4, 0xb4, 0xc0, 0x15, 0x38, 0x09, 0x1c, 0x29, 0xd3, 0x6a, 0x34, 0x24, 0x0b, 0xfa, 0x63, 0xe1, 0x1f, 0x03, 0x2b, 0xad, 0x90, 0xa4, 0x3a, 0xed, 0x00, 0x71, 0x0c, 0xf7, 0x97, 0xb5, 0xe8, 0x54, 0xa6, 0x55, 0x23, 0xe3, /* S - byte alignment */ 0x00, 0xe1, 0x24, 0x36, 0x09, 0x1b, 0xc3, 0x50, 0x51, 0x48, 0xab, 0x15, 0x73, 0xc9, 0x73, 0xbe, 0x1e, 0xa1, 0x5e, 0x8e, 0x55, 0x96, 0x7d, 0xf3, 0xad, 0x54, 0xf7, 0xca, 0x03, 0xe2, 0x69, 0x96, 0x17, 0x90, 0xbf, 0x26, 0xcc, 0x87, 0xbd, 0xaa, 0x09, 0xc9, 0x47, 0x65, 0xaa, 0x1e, 0xeb, 0xfb, 0x2c, 0x10, 0xe0, 0x2f }; static const uint8_t nist_186_2_ecdsa_testvector_209_ptx[] = { /* Msg */ 0xb9, 0x52, 0x06, 0xdd, 0x32, 0x95, 0x79, 0x17, 0x0b, 0xb8, 0x45, 0x51, 0xc7, 0x82, 0x2b, 0x15, 0x5d, 0x60, 0xf2, 0xdd, 0xe9, 0x4d, 0xb9, 0x1d, 0xa2, 0xf4, 0x8d, 0x84, 0x0c, 0x19, 0x37, 0x7f, 0x6f, 0x35, 0x57, 0x00, 0x87, 0x60, 0xb7, 0x7d, 0x7d, 0x74, 0xd9, 0x3b, 0x16, 0x70, 0xd2, 0xcc, 0x2b, 0x1a, 0x5b, 0xd7, 0x59, 0xe9, 0x26, 0x17, 0xf9, 0x21, 0x6e, 0xa6, 0x52, 0x40, 0xd2, 0x7c, 0x0e, 0x99, 0x63, 0x32, 0xeb, 0x3f, 0xfc, 0x0c, 0xb3, 0x24, 0xd2, 0x37, 0x6e, 0x82, 0x4b, 0x4f, 0xd6, 0x7a, 0x14, 0x25, 0x0b, 0xfc, 0x6e, 0xbe, 0x88, 0xe6, 0xc8, 0x9f, 0x56, 0x70, 0x93, 0x47, 0x7f, 0xc7, 0x52, 0xfe, 0xc6, 0xf8, 0xf0, 0xcd, 0x95, 0x10, 0x57, 0xce, 0x37, 0x81, 0x3e, 0xa6, 0x47, 0xc8, 0x42, 0x4f, 0x69, 0x4d, 0x39, 0x1b, 0x38, 0x8b, 0xc3, 0xf5, 0x7f, 0x70, 0x21, 0xea }; static const uint8_t nist_186_2_ecdsa_testvector_209_private[] = { /* d - byte alignment */ 0x00, 0x02, 0x74, 0x8f, 0xaa, 0x0b, 0x51, 0x0d, 0x0f, 0x79, 0x14, 0xfb, 0x57, 0x0d, 0xf3, 0xd7, 0x17, 0x43, 0x58, 0x14, 0xc4, 0x9e, 0xe1, 0x21, 0x06, 0xbd, 0xa7, 0x93, 0xdd, 0x1c, 0xfa, 0xb5, 0x9b, 0x78, 0xe0, 0x94, 0xf1, 0x47, 0x54, 0x39, 0x4a, 0x05, 0xc1, 0x72, 0xaf, 0xcf, 0xa7, 0x37, 0xd3, 0xdc, 0xa8, 0x44 }; static const uint8_t nist_186_2_ecdsa_testvector_209_public_x[] = { /* Qx - byte alignment */ 0x00, 0xf8, 0xbf, 0xfd, 0xe3, 0xab, 0x80, 0x2c, 0x82, 0xd6, 0xaa, 0xe2, 0x90, 0x17, 0x7b, 0xf5, 0xcd, 0x8a, 0x6d, 0x2a, 0x66, 0x9b, 0x0d, 0x4a, 0x42, 0x43, 0x29, 0x13, 0xa4, 0xa6, 0x28, 0x95, 0x29, 0x30, 0xf6, 0x05, 0x0c, 0x56, 0xb5, 0xfc, 0xaf, 0x08, 0xb9, 0x22, 0xab, 0x31, 0xdb, 0x48, 0x55, 0xb4, 0xa4, 0x71 }; static const uint8_t nist_186_2_ecdsa_testvector_209_public_y[] = { /* Qy - byte alignment */ 0x00, 0xaf, 0xca, 0xe3, 0xc8, 0x34, 0x82, 0xba, 0xbc, 0x04, 0xe3, 0xc5, 0x80, 0x9d, 0x32, 0xb6, 0x2f, 0x45, 0x19, 0xe8, 0x6e, 0xa4, 0x45, 0x7d, 0x40, 0xbf, 0xaa, 0xa2, 0xd1, 0xe4, 0x9a, 0x8a, 0x99, 0x57, 0x2e, 0x9c, 0x1f, 0xaf, 0xeb, 0x76, 0x15, 0xd2, 0x5e, 0x7e, 0xa5, 0xc8, 0x13, 0x4d, 0x2a, 0x47, 0x9e, 0x7c }; /* k = 060cd7168ba4135379d0766c577acbbceb2e713f9ce2b1babe49ce98cf68320ae0906ef2288560c4f0d7973bcbf7f9d3bd085bb */ static const uint8_t nist_186_2_ecdsa_testvector_209_out[] = { /* R - byte alignment */ 0x00, 0xfa, 0xf8, 0x3a, 0x27, 0x99, 0x14, 0x1b, 0xe5, 0x83, 0x2b, 0x39, 0x33, 0xcd, 0xfc, 0xe9, 0x36, 0x9b, 0xbb, 0x6a, 0x98, 0xfc, 0x8d, 0x82, 0x57, 0x1b, 0xe6, 0xb9, 0x73, 0x48, 0x83, 0x26, 0xce, 0x10, 0x37, 0xae, 0x72, 0x29, 0x14, 0x77, 0xa1, 0xff, 0x0e, 0xcc, 0xdb, 0xda, 0x12, 0x75, 0x02, 0xaa, 0x57, 0x99, /* S - byte alignment */ 0x00, 0x7c, 0x2b, 0xfe, 0xa0, 0xd2, 0x7c, 0xc2, 0x5e, 0x95, 0xbe, 0xe0, 0x33, 0x33, 0xed, 0xca, 0x21, 0xa9, 0xc5, 0x63, 0xda, 0xcb, 0x6a, 0xfd, 0xe7, 0x12, 0x7a, 0x62, 0x08, 0x03, 0x65, 0xd5, 0x5a, 0xc3, 0x2a, 0xdf, 0xba, 0xd9, 0xa4, 0x4b, 0x8f, 0xcf, 0xcc, 0xae, 0x18, 0x1e, 0xf5, 0x1e, 0x70, 0xfa, 0x06, 0x30 }; static const uint8_t nist_186_2_ecdsa_testvector_210_ptx[] = { /* Msg */ 0x6e, 0xe8, 0xbc, 0xaa, 0x0f, 0x01, 0xbc, 0x07, 0x24, 0x83, 0x33, 0xe9, 0xdf, 0x67, 0x86, 0x38, 0x5e, 0xe4, 0x5c, 0x0a, 0x2e, 0xe6, 0x47, 0xba, 0x0e, 0xbc, 0xa6, 0x3a, 0xf5, 0x10, 0xca, 0xaa, 0x56, 0x1d, 0x57, 0x29, 0xa2, 0x1c, 0xed, 0xeb, 0x0f, 0xff, 0x08, 0x8b, 0x98, 0x62, 0x25, 0xa3, 0x44, 0xbf, 0x27, 0x9b, 0xac, 0xe1, 0xf8, 0xbe, 0xb7, 0x9b, 0x73, 0x93, 0xa9, 0xb9, 0x82, 0x6a, 0x5c, 0x37, 0x83, 0x35, 0xcc, 0xb1, 0xf1, 0x99, 0xda, 0x1b, 0x40, 0x45, 0x49, 0xb2, 0x08, 0x83, 0x0d, 0x32, 0x66, 0x0c, 0xc5, 0x4a, 0xa0, 0x21, 0x86, 0x4d, 0x07, 0xd7, 0xda, 0x2a, 0x22, 0xb3, 0x08, 0x9e, 0x08, 0x76, 0x96, 0xa8, 0x0e, 0x3a, 0x0d, 0x3e, 0xa2, 0xbe, 0xfc, 0x3e, 0x77, 0xff, 0x3f, 0xa7, 0xe3, 0x08, 0x81, 0x09, 0x85, 0x0a, 0x00, 0x3a, 0x2a, 0xaf, 0x90, 0x4b, 0xf1, 0xac }; static const uint8_t nist_186_2_ecdsa_testvector_210_private[] = { /* d - byte alignment */ 0x00, 0x46, 0x79, 0xf6, 0x42, 0xe2, 0x68, 0xf4, 0x01, 0x78, 0x35, 0xa1, 0xfb, 0xba, 0x9b, 0xfd, 0x9b, 0x7b, 0x4a, 0x40, 0xe0, 0xc7, 0x5d, 0xcc, 0x57, 0x46, 0x16, 0xe7, 0x5a, 0x82, 0x7a, 0xf3, 0xd7, 0x07, 0x04, 0x49, 0x12, 0xd1, 0x8e, 0xb6, 0x21, 0xd2, 0x44, 0x1a, 0x38, 0xd1, 0xa9, 0xc8, 0x52, 0x3a, 0x30, 0x57 }; static const uint8_t nist_186_2_ecdsa_testvector_210_public_x[] = { /* Qx - byte alignment */ 0x00, 0x0c, 0x98, 0x9d, 0xdd, 0x76, 0xe0, 0x8e, 0xf5, 0x3a, 0xb8, 0x58, 0x38, 0x49, 0xa2, 0xe3, 0x97, 0x3c, 0xfc, 0xeb, 0x31, 0x15, 0x58, 0xe1, 0x7c, 0x21, 0x70, 0x58, 0x95, 0x46, 0x5a, 0xee, 0x0b, 0x5c, 0xf5, 0x53, 0x51, 0x70, 0x1e, 0xc1, 0x24, 0x21, 0x01, 0x89, 0x66, 0xeb, 0xf9, 0x56, 0xa7, 0x68, 0xc9, 0x3b }; static const uint8_t nist_186_2_ecdsa_testvector_210_public_y[] = { /* Qy - byte alignment */ 0x00, 0x33, 0xc0, 0x1e, 0xcb, 0xfd, 0xe5, 0x03, 0xb7, 0xd3, 0xc4, 0xaa, 0xca, 0xfd, 0x05, 0xd9, 0xff, 0xad, 0xd2, 0x30, 0x00, 0x6b, 0xb0, 0xea, 0xda, 0x2c, 0x33, 0x13, 0x6c, 0x54, 0x92, 0xca, 0x5f, 0x22, 0x50, 0xf1, 0x59, 0x74, 0x3d, 0xe6, 0xe4, 0xa7, 0x9d, 0x82, 0x1a, 0xe4, 0x35, 0xfb, 0x6f, 0x0c, 0xaf, 0x45 }; /* k = 087740649e3f08744d614e862ec6c928f33682cd013f9ab67e3992452f5522dfaf8001641f7c798125106dd8b947b5e7c070fa1 */ static const uint8_t nist_186_2_ecdsa_testvector_210_out[] = { /* R - byte alignment */ 0x00, 0xc7, 0x0c, 0x32, 0x7c, 0x2d, 0x2c, 0x78, 0x9d, 0xaa, 0x7d, 0x25, 0xd9, 0xc4, 0x36, 0xd4, 0x54, 0x42, 0xff, 0xe1, 0x45, 0x32, 0x4f, 0x5f, 0x36, 0x74, 0x99, 0x4b, 0x4c, 0xd1, 0x0a, 0x15, 0x48, 0x3a, 0x64, 0xc2, 0xe9, 0xea, 0xe3, 0xee, 0x20, 0x39, 0x92, 0x36, 0xde, 0x5f, 0x21, 0x2b, 0x8c, 0x25, 0x06, 0x14, /* S - byte alignment */ 0x00, 0xb4, 0xad, 0xb3, 0x9b, 0x33, 0xb9, 0x98, 0xb9, 0x4a, 0xc5, 0x0c, 0x22, 0x57, 0xbd, 0xe9, 0x45, 0xff, 0x77, 0x6f, 0xe9, 0x3b, 0x45, 0x8e, 0x68, 0xc7, 0x70, 0xc1, 0x7c, 0x9b, 0x19, 0x67, 0x26, 0x50, 0x68, 0x4c, 0x3a, 0x55, 0x36, 0xf2, 0x7f, 0x9a, 0x3d, 0xae, 0x20, 0x24, 0x48, 0x74, 0xb6, 0x0a, 0x63, 0x47 }; /* [B-571] - GP NOT SUPPORTED */ static const uint8_t nist_186_2_ecdsa_testvector_211_ptx[] = { /* Msg */ 0x70, 0x2b, 0x22, 0xb5, 0xc2, 0xba, 0x25, 0xdf, 0xf7, 0x4b, 0x28, 0xf5, 0x91, 0x24, 0xe7, 0x19, 0x40, 0x08, 0xab, 0xc0, 0xb3, 0xb8, 0xbf, 0x58, 0xae, 0xb9, 0x24, 0x2f, 0x5d, 0x58, 0x85, 0x90, 0xe8, 0xec, 0x6d, 0x2f, 0x47, 0x5b, 0xb8, 0xc6, 0x58, 0xdf, 0x48, 0x01, 0x2e, 0x0a, 0xf9, 0x98, 0xac, 0x08, 0xd6, 0xba, 0x53, 0x25, 0x8d, 0xb2, 0x59, 0x8e, 0x20, 0xc5, 0xfb, 0x5c, 0xde, 0x59, 0x14, 0xce, 0x92, 0x5d, 0xed, 0xd6, 0xfa, 0xe4, 0x57, 0xd8, 0x7a, 0x13, 0xf7, 0xae, 0x12, 0x3e, 0xe2, 0xef, 0x8e, 0x4e, 0x6a, 0x71, 0xfc, 0x66, 0x37, 0x0c, 0x63, 0xc6, 0x99, 0xa1, 0xb2, 0xef, 0x1c, 0x5b, 0xf7, 0x07, 0x5d, 0x35, 0xd1, 0x80, 0x1d, 0xbd, 0x28, 0xf5, 0x94, 0x17, 0x1b, 0x54, 0x07, 0x44, 0x3a, 0x42, 0x9d, 0xa5, 0xf6, 0xbb, 0x6f, 0xba, 0x55, 0xf9, 0xde, 0x30, 0xeb, 0x98 }; static const uint8_t nist_186_2_ecdsa_testvector_211_private[] = { /* d - byte alignment */ 0x01, 0x60, 0x1d, 0x26, 0x08, 0xcc, 0xba, 0xc5, 0x9e, 0x9f, 0x16, 0xeb, 0x12, 0x3f, 0x98, 0x8c, 0xeb, 0x1e, 0xee, 0x23, 0x9c, 0xa0, 0x38, 0x80, 0xd1, 0xdc, 0x25, 0x44, 0x6d, 0x84, 0xae, 0x67, 0xff, 0xc4, 0xe0, 0xa7, 0xea, 0xf2, 0x6c, 0x33, 0xbf, 0x3d, 0x6d, 0x2b, 0x27, 0x91, 0x3e, 0x5e, 0x33, 0x7f, 0x58, 0xe4, 0x8b, 0x5e, 0xf2, 0xab, 0xa6, 0xbb, 0x5b, 0xeb, 0x42, 0x1d, 0x25, 0x58, 0x9e, 0xce, 0x18, 0xa6, 0x41, 0x2c, 0x0d, 0x50 }; static const uint8_t nist_186_2_ecdsa_testvector_211_public_x[] = { /* Qx - byte alignment */ 0x05, 0xac, 0xc7, 0x28, 0x79, 0x8f, 0xfb, 0x2d, 0xea, 0x9f, 0x3b, 0x34, 0x5c, 0x7e, 0x4d, 0x86, 0xb9, 0xd0, 0x53, 0x00, 0xd2, 0xc5, 0x9d, 0x2d, 0x15, 0xef, 0x99, 0xad, 0x0b, 0xc9, 0x87, 0x32, 0x89, 0x74, 0xc4, 0xe1, 0x78, 0x00, 0x74, 0x2d, 0x98, 0xc7, 0x8b, 0x2b, 0x70, 0x10, 0x93, 0xba, 0xed, 0xe6, 0x86, 0x33, 0x93, 0x4b, 0xaa, 0xa8, 0x7e, 0xb2, 0xb0, 0xa0, 0xe0, 0x10, 0x8b, 0x0f, 0x48, 0x3e, 0xd1, 0x87, 0xa0, 0xc7, 0x25, 0xd3 }; static const uint8_t nist_186_2_ecdsa_testvector_211_public_y[] = { /* Qy - byte alignment */ 0x00, 0x62, 0xe9, 0x27, 0xac, 0x17, 0xbf, 0xd2, 0x42, 0xdc, 0xac, 0x4a, 0xfa, 0xb0, 0xd2, 0x0c, 0x65, 0xba, 0xde, 0xf4, 0x64, 0x68, 0xf2, 0x02, 0x11, 0xad, 0xf5, 0x4e, 0xc4, 0xd2, 0x14, 0x5a, 0x85, 0x1d, 0x11, 0x21, 0xd4, 0xcb, 0xf0, 0x13, 0x10, 0x9e, 0x06, 0xc5, 0xaf, 0x21, 0x5c, 0xdb, 0x3d, 0x38, 0xa8, 0x5f, 0xf9, 0x2f, 0x6d, 0x54, 0x6b, 0x4a, 0xa8, 0x17, 0xa4, 0xe5, 0x80, 0x34, 0x9a, 0xea, 0xc0, 0xca, 0x74, 0x41, 0x25, 0x88 }; /* k = 1510cc95330968b97382d63c46071c75ab92e9175862e5272222735a12e906625bb59b1843908d0e94052e2d90f82291fbbb5f853a40d8a4354f37015e5dc8118266747c19bfa95 */ static const uint8_t nist_186_2_ecdsa_testvector_211_out[] = { /* R - byte alignment */ 0x03, 0xf4, 0x00, 0xdd, 0x5c, 0xc3, 0x87, 0xf1, 0xd8, 0xc5, 0x68, 0xd5, 0xbc, 0x6d, 0x3e, 0xb0, 0x7e, 0x79, 0x28, 0x23, 0x06, 0x1d, 0x38, 0x44, 0xe8, 0x04, 0x44, 0x0c, 0x3d, 0x78, 0x89, 0xa7, 0x78, 0x02, 0x19, 0x41, 0x00, 0x0d, 0x6a, 0x47, 0x55, 0xe4, 0x89, 0xdd, 0xcb, 0xb0, 0x34, 0x5b, 0x79, 0x8c, 0x4a, 0xbe, 0xbb, 0x7b, 0xb5, 0xfe, 0x57, 0x8e, 0x4a, 0x44, 0x09, 0x3d, 0x2b, 0x17, 0x00, 0x37, 0xd2, 0xe7, 0x8c, 0x7a, 0x18, 0x65, /* S - byte alignment */ 0x00, 0x98, 0x66, 0xd2, 0x4d, 0x6f, 0x00, 0xc9, 0x4f, 0x67, 0xde, 0x16, 0xec, 0xfa, 0xa5, 0xaa, 0x8b, 0x87, 0xdb, 0x45, 0x88, 0xff, 0x32, 0x03, 0xf8, 0xdb, 0xc5, 0xee, 0x79, 0x01, 0x8a, 0x54, 0x12, 0x55, 0x76, 0x0c, 0xdb, 0xac, 0xdd, 0xe6, 0xda, 0xf6, 0xad, 0xa8, 0xf2, 0x2a, 0x5d, 0x13, 0x62, 0xc0, 0x81, 0x4d, 0xf4, 0x6d, 0x76, 0x64, 0x8b, 0x7a, 0x0f, 0xf1, 0x37, 0x2a, 0xcd, 0x89, 0x9f, 0x38, 0x5e, 0xd5, 0x12, 0xd6, 0x3a, 0x25 }; static const uint8_t nist_186_2_ecdsa_testvector_212_ptx[] = { /* Msg */ 0x2b, 0x8a, 0x1e, 0x3e, 0x77, 0x71, 0x41, 0x82, 0xdd, 0xe3, 0x3c, 0xe1, 0x11, 0x97, 0x77, 0x72, 0xdd, 0xfb, 0x34, 0xbc, 0xb8, 0x7a, 0xc4, 0x1e, 0x99, 0xff, 0xfb, 0x6f, 0x0d, 0xb5, 0xe1, 0xe1, 0x88, 0x12, 0xaa, 0x2b, 0xf8, 0x13, 0xe9, 0xe7, 0xa0, 0xc9, 0x00, 0x38, 0x24, 0x14, 0xdb, 0xb1, 0xe0, 0xaf, 0xde, 0x72, 0x7e, 0x6c, 0x1b, 0x94, 0xc8, 0xc1, 0xc9, 0xc8, 0xba, 0x84, 0xf1, 0x3a, 0xdc, 0xf3, 0x6b, 0xbc, 0xcf, 0xf7, 0x09, 0x20, 0x25, 0xaa, 0x12, 0xe5, 0x76, 0x16, 0xf2, 0x17, 0xaf, 0x40, 0x2f, 0x70, 0xae, 0x65, 0x9f, 0xc3, 0x0c, 0x83, 0xd9, 0x9b, 0x3a, 0x1b, 0xe9, 0x1f, 0xd0, 0x35, 0x48, 0x38, 0x21, 0xa6, 0x0b, 0xf6, 0x13, 0x8e, 0x5a, 0x30, 0x2e, 0x24, 0x24, 0x6b, 0xf2, 0xb6, 0x11, 0xfd, 0x6e, 0xeb, 0xb8, 0x73, 0x0e, 0x4c, 0x13, 0x2f, 0xb5, 0x02, 0x2f, 0x56 }; static const uint8_t nist_186_2_ecdsa_testvector_212_private[] = { /* d - byte alignment */ 0x01, 0x85, 0x07, 0x58, 0xe4, 0xf1, 0xc0, 0x73, 0x09, 0x27, 0x2f, 0xf2, 0xbf, 0x8d, 0xca, 0x7d, 0xf0, 0x07, 0xb4, 0xd9, 0x4e, 0x18, 0xbc, 0x41, 0xeb, 0xb8, 0xb4, 0x34, 0xda, 0x48, 0x2f, 0x8b, 0xf0, 0xed, 0x67, 0xf3, 0x66, 0xe8, 0xef, 0x6f, 0xcc, 0xd6, 0xc1, 0xd6, 0x54, 0xf6, 0xc4, 0x01, 0xed, 0x02, 0x8e, 0xe3, 0x1b, 0x7c, 0x4c, 0x92, 0xeb, 0x07, 0x5b, 0x02, 0xdd, 0xe7, 0xdd, 0xef, 0xe9, 0xa7, 0xad, 0x89, 0xb8, 0xd9, 0x4e, 0xfc }; static const uint8_t nist_186_2_ecdsa_testvector_212_public_x[] = { /* Qx - byte alignment */ 0x05, 0x28, 0x7b, 0x78, 0x75, 0x97, 0xd6, 0x61, 0x3d, 0xda, 0x0c, 0x27, 0xad, 0xb6, 0x41, 0x0b, 0x2b, 0xf3, 0xb9, 0x93, 0xbb, 0x7a, 0xfa, 0x71, 0xa8, 0xe0, 0x11, 0x3d, 0x48, 0xdb, 0x32, 0x94, 0x1a, 0x6f, 0xeb, 0x01, 0xca, 0xb6, 0x04, 0x5d, 0xcb, 0x68, 0x84, 0xe9, 0x86, 0x9e, 0xea, 0xd3, 0x58, 0xb2, 0xc5, 0x1f, 0x17, 0x36, 0xa9, 0xf8, 0x8f, 0xe3, 0x3a, 0x8b, 0x4c, 0xbc, 0xb8, 0x76, 0xa4, 0x56, 0x34, 0xdf, 0x41, 0xf7, 0x5e, 0x29 }; static const uint8_t nist_186_2_ecdsa_testvector_212_public_y[] = { /* Qy - byte alignment */ 0x04, 0x63, 0x6e, 0x68, 0xf1, 0x97, 0x0d, 0x90, 0x58, 0xab, 0xd3, 0x4d, 0xd2, 0x90, 0xe1, 0x64, 0xb5, 0x96, 0xc1, 0xd1, 0xdd, 0xee, 0x8d, 0xb6, 0x04, 0x02, 0x74, 0xd9, 0xa5, 0x6a, 0x47, 0xbb, 0xf9, 0xd8, 0x2e, 0xd7, 0x34, 0x4b, 0x01, 0x7e, 0xf5, 0x9a, 0xe6, 0x33, 0x6f, 0xd0, 0x2d, 0x16, 0xcb, 0x32, 0x5a, 0xb2, 0x90, 0xc4, 0xbf, 0x0c, 0xa5, 0x61, 0xfd, 0xad, 0xc7, 0xcc, 0xcc, 0x81, 0x55, 0x5a, 0x25, 0x1d, 0xd7, 0x39, 0xe1, 0xf7 }; /* k = 0612df3727988c24712035d9070fae6eb3cf2ff2f2cac00265140a660afd738829906f479b5f55e9591e412f874f03adb8f09ff8faf91c5f86294296bbc2bf7c9fad3660bb47606 */ static const uint8_t nist_186_2_ecdsa_testvector_212_out[] = { /* R - byte alignment */ 0x01, 0x3b, 0x24, 0xdc, 0x81, 0xfb, 0x93, 0xfc, 0xdf, 0x70, 0xfa, 0xac, 0x12, 0x90, 0x72, 0xce, 0x5f, 0x95, 0x0a, 0xd3, 0xfb, 0x55, 0x3a, 0x4d, 0x32, 0x26, 0x07, 0xa6, 0x9a, 0x29, 0xb6, 0xbe, 0x3d, 0x9f, 0xf7, 0x27, 0x65, 0xd6, 0xee, 0x2d, 0x93, 0x43, 0xe0, 0x0a, 0x25, 0x2e, 0x67, 0x2e, 0x00, 0xb1, 0x99, 0x09, 0x52, 0x38, 0x34, 0x8c, 0x06, 0x6c, 0x95, 0xb4, 0x24, 0x32, 0x84, 0x60, 0xcc, 0xb1, 0x0d, 0xd7, 0x7b, 0x13, 0x71, 0x43, /* S - byte alignment */ 0x00, 0xd6, 0x07, 0x5c, 0xbd, 0xf3, 0xa5, 0x3c, 0x93, 0x27, 0x76, 0x59, 0xcf, 0x1f, 0xdd, 0xfc, 0xfe, 0x7c, 0xf0, 0x97, 0x33, 0x19, 0xad, 0xe7, 0x0f, 0xce, 0x19, 0xf6, 0x6c, 0xf8, 0xb2, 0xd7, 0xd7, 0xae, 0x5e, 0xeb, 0x44, 0x71, 0x1d, 0x51, 0x9a, 0x16, 0xfb, 0x05, 0xa7, 0x11, 0x8d, 0x74, 0xf2, 0xc1, 0x17, 0x41, 0xa7, 0x29, 0x4b, 0x98, 0x51, 0x98, 0x9d, 0x5f, 0xad, 0xb8, 0x4c, 0xd6, 0x32, 0x49, 0xaf, 0x87, 0x70, 0x6d, 0x42, 0xe8 }; static const uint8_t nist_186_2_ecdsa_testvector_213_ptx[] = { /* Msg */ 0x07, 0xe2, 0xce, 0x83, 0x25, 0x6d, 0xba, 0x59, 0x1a, 0x6f, 0x55, 0xe2, 0xb1, 0x51, 0xf6, 0x6a, 0x19, 0x5a, 0x56, 0x15, 0xf3, 0x76, 0x45, 0xc6, 0xaa, 0x36, 0x9b, 0x40, 0x03, 0x17, 0x72, 0x8b, 0xf5, 0x07, 0x92, 0x9a, 0xba, 0x25, 0x2d, 0x2a, 0x26, 0xc9, 0xcd, 0xed, 0x38, 0xc4, 0x8a, 0xe8, 0xef, 0xe9, 0x80, 0x19, 0x5e, 0xcc, 0x80, 0x5e, 0x03, 0xc9, 0x06, 0x92, 0x55, 0x48, 0x6b, 0xf9, 0x9c, 0x40, 0x5c, 0xde, 0x05, 0xfa, 0x8b, 0x7a, 0xf6, 0x18, 0xa4, 0x18, 0x9f, 0xd5, 0x83, 0x77, 0xd2, 0x8e, 0xa4, 0x70, 0x14, 0x82, 0xdb, 0xd8, 0xf4, 0xd6, 0x45, 0xa8, 0x9b, 0xdc, 0x7e, 0x5b, 0xa5, 0x94, 0x14, 0x98, 0x2f, 0x73, 0x3c, 0x11, 0x31, 0x64, 0xc4, 0xab, 0x0f, 0x0d, 0x49, 0xdf, 0x6a, 0x53, 0xaa, 0x60, 0x3c, 0x20, 0xbc, 0xfe, 0x24, 0x63, 0x40, 0xca, 0xfe, 0x59, 0x12, 0x7b }; static const uint8_t nist_186_2_ecdsa_testvector_213_private[] = { /* d - byte alignment */ 0x03, 0xf8, 0xe4, 0x73, 0x72, 0x8c, 0xd7, 0xaa, 0x7c, 0xe1, 0x52, 0xce, 0xf8, 0x99, 0x3b, 0xd6, 0x3b, 0xdd, 0xb3, 0x10, 0x75, 0xb2, 0x89, 0x0c, 0xd0, 0xc2, 0x2f, 0x36, 0xe8, 0xec, 0x39, 0xb7, 0xde, 0xae, 0xab, 0x89, 0x03, 0x28, 0x7f, 0x27, 0xbe, 0x9f, 0x6c, 0x69, 0x57, 0x47, 0xf9, 0x45, 0xf3, 0x43, 0x8b, 0xea, 0x91, 0x1d, 0xb8, 0xa0, 0x79, 0xdd, 0x27, 0x81, 0x44, 0x42, 0xb1, 0x64, 0x62, 0x4f, 0xdb, 0xe7, 0x0b, 0xea, 0xb9, 0xf9 }; static const uint8_t nist_186_2_ecdsa_testvector_213_public_x[] = { /* Qx - byte alignment */ 0x00, 0x0e, 0x15, 0x36, 0x08, 0xa7, 0x3e, 0x25, 0xc0, 0xa7, 0x88, 0xbe, 0x27, 0xc7, 0x1b, 0xfb, 0x2d, 0x4c, 0x11, 0x35, 0xa4, 0xd6, 0xa9, 0x52, 0xc5, 0x39, 0x59, 0x32, 0xeb, 0x56, 0xfa, 0xfe, 0xbf, 0xc3, 0xda, 0xa1, 0xb8, 0xce, 0x6b, 0x38, 0x82, 0x5e, 0xf0, 0xe4, 0xfa, 0x08, 0xad, 0xa8, 0xcb, 0xf6, 0x5e, 0xae, 0x17, 0x5d, 0x59, 0xfc, 0x13, 0x71, 0x0f, 0x76, 0xc9, 0x19, 0x13, 0x7f, 0xbe, 0x23, 0x3e, 0x46, 0xd3, 0x4c, 0x72, 0x56 }; static const uint8_t nist_186_2_ecdsa_testvector_213_public_y[] = { /* Qy - byte alignment */ 0x05, 0xbc, 0x33, 0x01, 0xb3, 0xb8, 0xee, 0xb3, 0xba, 0xb2, 0xc9, 0xc4, 0xed, 0x9e, 0x35, 0x39, 0x7d, 0x5a, 0x91, 0x2b, 0xdc, 0xf2, 0x62, 0xe2, 0x1c, 0xc3, 0xef, 0xab, 0x70, 0x69, 0xef, 0x61, 0xc4, 0x09, 0x21, 0xa1, 0xf2, 0x3c, 0x25, 0xc5, 0xcd, 0xaa, 0x86, 0x93, 0x5a, 0x15, 0x98, 0x3c, 0xf4, 0xa1, 0xe3, 0xdd, 0xdd, 0x7a, 0xeb, 0x52, 0x0c, 0x22, 0xeb, 0xb4, 0x89, 0x24, 0x37, 0x9e, 0x18, 0x49, 0x18, 0x21, 0x33, 0x56, 0x4a, 0xc1 }; /* k = 3e3aac20908ac81c6906f5c8d011ed9a2117997d16d6b0093f602278e13335718b22aa88e9f1d0b8373d513b3dd7138a914d26a5b4f7fb4a75881a83ef05ac61efa580caef69702 */ static const uint8_t nist_186_2_ecdsa_testvector_213_out[] = { /* R - byte alignment */ 0x02, 0x97, 0x8c, 0xcb, 0x53, 0x14, 0x5a, 0xfd, 0x54, 0x96, 0x23, 0x0f, 0x0f, 0x30, 0xf7, 0x11, 0x2b, 0x42, 0x5a, 0x0a, 0xf6, 0xf9, 0x1b, 0xeb, 0x64, 0xdd, 0xf0, 0xcc, 0x7d, 0xc2, 0xeb, 0xe0, 0x49, 0xe9, 0x7e, 0x73, 0xf5, 0xdd, 0xb7, 0xbe, 0xf6, 0xb4, 0x86, 0x91, 0xea, 0x7d, 0x78, 0x89, 0x23, 0x6e, 0xf5, 0x2c, 0x08, 0x41, 0x13, 0xe4, 0x06, 0x3f, 0x51, 0x99, 0x4b, 0x73, 0x75, 0xe3, 0x42, 0x82, 0x0f, 0x62, 0x45, 0x09, 0xb1, 0xe1, /* S - byte alignment */ 0x03, 0xf2, 0x52, 0xc5, 0x6c, 0x6d, 0x4e, 0x56, 0x52, 0x36, 0x8c, 0x22, 0x43, 0x72, 0xd9, 0x83, 0xb9, 0xe4, 0x27, 0x4f, 0x57, 0x21, 0xc8, 0x85, 0xc7, 0x1a, 0x08, 0x9d, 0x31, 0x41, 0xf7, 0x06, 0x33, 0xfa, 0xb7, 0xa0, 0xe9, 0x80, 0x89, 0xea, 0x1a, 0x66, 0xaf, 0xa9, 0xb1, 0xc6, 0x57, 0xe8, 0x1a, 0xb7, 0xc5, 0x7c, 0x18, 0x96, 0xc6, 0xf4, 0xf8, 0xba, 0x74, 0x14, 0xf1, 0xcf, 0x2d, 0xaf, 0x53, 0xee, 0xaa, 0x43, 0xac, 0x1c, 0x71, 0x28 }; static const uint8_t nist_186_2_ecdsa_testvector_214_ptx[] = { /* Msg */ 0xf6, 0xe7, 0x64, 0x6e, 0x7a, 0xc8, 0xba, 0xc1, 0xc9, 0x4a, 0x2b, 0xcb, 0xd6, 0xe1, 0x69, 0x45, 0x08, 0xab, 0x2c, 0xdb, 0xeb, 0x53, 0x82, 0x30, 0x26, 0x35, 0x66, 0x23, 0xad, 0xc3, 0x95, 0x51, 0x37, 0x27, 0x9d, 0xda, 0xf3, 0x2a, 0x37, 0x69, 0x76, 0x54, 0xd6, 0x6e, 0xf8, 0x54, 0x80, 0xae, 0xc1, 0xa3, 0xdd, 0xfe, 0xde, 0x65, 0x8e, 0x4b, 0x18, 0x90, 0xbf, 0xde, 0x27, 0x4f, 0x00, 0xde, 0x22, 0xa9, 0x50, 0x17, 0x3a, 0x5e, 0x7b, 0xf9, 0xa8, 0x11, 0xa7, 0xe4, 0xe4, 0xac, 0x29, 0xa3, 0x18, 0x01, 0x9d, 0x36, 0xd4, 0xad, 0x35, 0xd4, 0x03, 0x42, 0x51, 0x30, 0x1e, 0xa5, 0x50, 0xfc, 0x9f, 0xb4, 0xa6, 0xab, 0xb9, 0x2c, 0x2f, 0x7c, 0x46, 0xca, 0xc4, 0xb4, 0x01, 0xb1, 0x0b, 0x2a, 0xf5, 0x0c, 0x93, 0x09, 0x35, 0xf4, 0x20, 0xd2, 0xce, 0x94, 0x43, 0xa0, 0xfa, 0x8b, 0x2e, 0xb0 }; static const uint8_t nist_186_2_ecdsa_testvector_214_private[] = { /* d - byte alignment */ 0x03, 0xc3, 0x26, 0x9d, 0x22, 0x23, 0xb2, 0xbf, 0xc9, 0x2e, 0x28, 0xdc, 0x58, 0x63, 0x77, 0xd5, 0x50, 0x11, 0xee, 0xd1, 0x37, 0x08, 0xcf, 0x47, 0x62, 0xc2, 0xec, 0x5b, 0x97, 0x7f, 0x40, 0x49, 0xe6, 0xab, 0x90, 0x90, 0xde, 0x5f, 0x3d, 0xc7, 0x6b, 0xb8, 0x6f, 0x2e, 0xce, 0x59, 0xd1, 0x4f, 0xd9, 0xb9, 0xc3, 0x15, 0x52, 0x94, 0x3e, 0x7b, 0xda, 0x92, 0x20, 0xb7, 0x73, 0xff, 0x2c, 0x0d, 0x61, 0x0e, 0xe7, 0xd2, 0xc7, 0x16, 0x57, 0xbd }; static const uint8_t nist_186_2_ecdsa_testvector_214_public_x[] = { /* Qx - byte alignment */ 0x03, 0x15, 0xad, 0x90, 0xc4, 0x4e, 0xe2, 0xa4, 0x24, 0x5e, 0x7a, 0x11, 0xb2, 0xbc, 0xa9, 0x6c, 0x86, 0x65, 0x7a, 0x60, 0x1f, 0xdc, 0x64, 0xb3, 0x96, 0x36, 0x12, 0x0c, 0xfd, 0x40, 0xfa, 0x35, 0xeb, 0xd8, 0xc5, 0xfe, 0x0c, 0xf8, 0xd2, 0x8e, 0x33, 0xb7, 0x3d, 0xb5, 0x2a, 0xf5, 0xd2, 0x77, 0x51, 0x5d, 0xee, 0x9f, 0x62, 0xd7, 0x55, 0x90, 0x77, 0x4a, 0xc2, 0x46, 0xc0, 0x1a, 0xe2, 0x3a, 0x96, 0x95, 0xf9, 0x31, 0x6d, 0xec, 0xd6, 0xb4 }; static const uint8_t nist_186_2_ecdsa_testvector_214_public_y[] = { /* Qy - byte alignment */ 0x00, 0xb0, 0xd1, 0xb9, 0xf0, 0x48, 0x09, 0x23, 0x63, 0x78, 0xf8, 0xfe, 0xe9, 0x26, 0xb9, 0x2c, 0x2e, 0xf9, 0x87, 0x1e, 0xb9, 0x1b, 0xf6, 0xfa, 0xab, 0x54, 0x34, 0x8f, 0xda, 0x84, 0x86, 0xf8, 0x8b, 0xa6, 0x90, 0x2b, 0x97, 0x26, 0x8a, 0xf8, 0x93, 0x9d, 0x59, 0x0b, 0xec, 0xfa, 0x97, 0x7a, 0x90, 0xcf, 0x2a, 0xf0, 0x89, 0x3b, 0x3a, 0x0e, 0xe0, 0x4a, 0x6c, 0x37, 0x1a, 0x79, 0x57, 0x7e, 0x99, 0xf5, 0xc7, 0x20, 0x99, 0xe2, 0xaa, 0x6d }; /* k = 1a2670992bc17d4be856b4aef9fe5ea6e5764f1215317657c77fec4feb0d94de2b2cf5cfd56218122fd3b5c24cfc23d3a9e1d289de99c61f1a64ea2a93597e78da2a8621c0cb84f */ static const uint8_t nist_186_2_ecdsa_testvector_214_out[] = { /* R - byte alignment */ 0x01, 0xa5, 0x36, 0x61, 0xe2, 0x8f, 0x57, 0xae, 0x75, 0xb3, 0x9c, 0xe0, 0x44, 0x3a, 0x13, 0xcf, 0xb8, 0x1b, 0xd6, 0xbf, 0x64, 0x96, 0x2d, 0x29, 0x99, 0x81, 0x54, 0xf3, 0xeb, 0x7d, 0xa9, 0x1e, 0x4e, 0x34, 0x82, 0xdd, 0x67, 0xc6, 0x4a, 0xb2, 0x27, 0x1e, 0x4e, 0xbd, 0x26, 0x8f, 0xb1, 0x0d, 0x36, 0xee, 0xe6, 0x74, 0xb3, 0xd0, 0xd7, 0xb1, 0xe0, 0xdd, 0x83, 0x4c, 0x02, 0x8f, 0x31, 0x4c, 0x68, 0xec, 0xdd, 0x59, 0xf0, 0x99, 0x76, 0xb0, /* S - byte alignment */ 0x02, 0x56, 0x57, 0x15, 0xde, 0x56, 0x8b, 0x2e, 0x43, 0x28, 0xbb, 0xbc, 0x5a, 0xab, 0xd2, 0xc4, 0xdf, 0xde, 0xae, 0x5d, 0xf7, 0xcf, 0x85, 0x91, 0x06, 0x66, 0x47, 0x5b, 0xe4, 0x5b, 0x3b, 0xf8, 0xe5, 0x1c, 0x95, 0x32, 0x17, 0x75, 0x27, 0xcb, 0x0e, 0x4c, 0x41, 0x7d, 0x9e, 0x58, 0x91, 0x50, 0x29, 0x21, 0x07, 0x54, 0x8d, 0x8f, 0x53, 0x0b, 0xd8, 0xed, 0x27, 0x58, 0xbd, 0x23, 0xf3, 0x63, 0x2d, 0xef, 0x1d, 0x08, 0xcc, 0x7b, 0xd8, 0xaf }; static const uint8_t nist_186_2_ecdsa_testvector_215_ptx[] = { /* Msg */ 0x4b, 0x59, 0x6e, 0x1f, 0x2a, 0xe2, 0xa0, 0x65, 0x06, 0x81, 0x68, 0x5f, 0x69, 0xaa, 0x3d, 0x35, 0x29, 0xe6, 0x4f, 0xe8, 0x90, 0x6e, 0xc8, 0x8b, 0xb9, 0xf8, 0x52, 0xb1, 0x3d, 0xd1, 0xda, 0x22, 0x10, 0x2c, 0x94, 0xd2, 0xa5, 0xba, 0x40, 0x13, 0x59, 0x7a, 0xab, 0x09, 0x0e, 0xd3, 0x78, 0x5e, 0x16, 0xe0, 0x20, 0x38, 0x54, 0x0b, 0x38, 0x68, 0x9d, 0xdd, 0xf3, 0xe5, 0x64, 0x14, 0xe7, 0x78, 0x97, 0xf6, 0x14, 0xb8, 0xc4, 0xe6, 0x22, 0x39, 0x80, 0x35, 0xea, 0x01, 0x09, 0x3a, 0x38, 0x3b, 0x2a, 0xa5, 0xcf, 0x30, 0x5f, 0x10, 0xae, 0x72, 0x3a, 0xd7, 0x92, 0x5a, 0x05, 0x2a, 0xbc, 0xb5, 0xa9, 0x60, 0xf4, 0xbb, 0xcf, 0x8e, 0xce, 0x41, 0x44, 0x59, 0x2c, 0x2f, 0xa2, 0x08, 0x04, 0x33, 0x2d, 0xde, 0x64, 0xb7, 0xfb, 0xa6, 0xb3, 0x11, 0x58, 0x8f, 0x39, 0xfa, 0x68, 0x3a, 0xe2, 0x42 }; static const uint8_t nist_186_2_ecdsa_testvector_215_private[] = { /* d - byte alignment */ 0x00, 0xc5, 0xfe, 0x0b, 0x12, 0xd4, 0x5a, 0x0e, 0xc0, 0xdb, 0x7f, 0x60, 0xfd, 0x0b, 0xb9, 0x6f, 0xe8, 0x92, 0x05, 0x05, 0xa8, 0xb6, 0xbe, 0xaa, 0x85, 0x3c, 0x0c, 0x85, 0xc8, 0xe0, 0x4d, 0x6c, 0x61, 0xdf, 0x5b, 0xac, 0x49, 0x05, 0x66, 0x29, 0xf8, 0x21, 0x18, 0x40, 0xf9, 0x78, 0xc9, 0x9c, 0x4f, 0x67, 0x3c, 0xbe, 0x5b, 0xf9, 0x8b, 0xcb, 0x0d, 0x1c, 0xfe, 0x85, 0xc0, 0x4f, 0x66, 0xed, 0x18, 0xd3, 0x46, 0xb8, 0x20, 0x1c, 0xa2, 0x36 }; static const uint8_t nist_186_2_ecdsa_testvector_215_public_x[] = { /* Qx - byte alignment */ 0x07, 0xc6, 0x29, 0x37, 0xd0, 0xc4, 0x4b, 0xf8, 0x6c, 0x3a, 0xb5, 0x82, 0x25, 0x2a, 0x5e, 0x64, 0x57, 0xc4, 0x36, 0x7c, 0x6a, 0x0e, 0x41, 0xe2, 0xf9, 0x2e, 0xdb, 0x1c, 0x7a, 0x56, 0x05, 0xba, 0x4a, 0x42, 0xc6, 0xd5, 0xfe, 0x19, 0xa1, 0x63, 0xf9, 0xcf, 0x5c, 0x83, 0x12, 0xf8, 0xac, 0x47, 0x29, 0xef, 0x01, 0x53, 0xb5, 0x5c, 0xc9, 0x81, 0xd1, 0x13, 0xd6, 0xdc, 0x8b, 0x39, 0x61, 0x0f, 0x4f, 0x57, 0x7e, 0x73, 0x70, 0xb2, 0xfb, 0xb9 }; static const uint8_t nist_186_2_ecdsa_testvector_215_public_y[] = { /* Qy - byte alignment */ 0x01, 0x48, 0x76, 0x4e, 0x23, 0xec, 0x53, 0x5b, 0x17, 0x1d, 0x3f, 0x9e, 0x70, 0x29, 0x54, 0x7f, 0x3c, 0xac, 0xe7, 0xfb, 0x06, 0xa8, 0x54, 0xa7, 0x54, 0xbe, 0x63, 0x5b, 0x69, 0xb8, 0xc1, 0x51, 0xa5, 0x1f, 0x5c, 0x5b, 0xf0, 0x11, 0x29, 0x92, 0x31, 0xd5, 0xad, 0x2f, 0x99, 0xf0, 0xdb, 0x96, 0xaa, 0x6e, 0x0d, 0xad, 0x4f, 0xef, 0x45, 0x00, 0x1a, 0x57, 0x63, 0x95, 0x19, 0x85, 0xa3, 0xb0, 0x91, 0xc5, 0xdb, 0xef, 0xe6, 0x8a, 0x2a, 0x09 }; /* k = 0d04bc12c2eefad9bca46c727801d39231e72a8d8c0cf3ea9416530da56f3339165406a08a45901e3b210ac8597cf588b0a48c61ef300ef2c96ee02d13a30ffeb4fc5f386d1a0ea */ static const uint8_t nist_186_2_ecdsa_testvector_215_out[] = { /* R - byte alignment */ 0x02, 0x63, 0x16, 0x99, 0x79, 0x89, 0xb9, 0xf7, 0x48, 0x34, 0x83, 0xc5, 0x2d, 0x3f, 0x68, 0x04, 0xe9, 0x2d, 0xb3, 0xb8, 0x21, 0x2d, 0x5b, 0x1f, 0xd0, 0x47, 0x4f, 0xd4, 0xfe, 0x51, 0xe3, 0xfe, 0xe6, 0xb7, 0x91, 0xbe, 0xfe, 0x7d, 0x5e, 0x07, 0x4b, 0xe9, 0xf0, 0xc5, 0x61, 0xcf, 0xa7, 0x3b, 0x7b, 0x2b, 0x6a, 0x8e, 0x46, 0x89, 0x18, 0xfe, 0x69, 0x41, 0x53, 0x25, 0x48, 0xb5, 0x99, 0x1d, 0xc0, 0x90, 0x31, 0xfb, 0x2f, 0xe1, 0xa0, 0x27, /* S - byte alignment */ 0x03, 0x27, 0x4c, 0xe2, 0xca, 0x05, 0xd0, 0xfe, 0x8b, 0x0a, 0x95, 0x8c, 0x66, 0x60, 0x46, 0xcb, 0x0b, 0x94, 0x4e, 0x31, 0xa2, 0x8a, 0xef, 0xbb, 0x6b, 0x3f, 0xfa, 0x76, 0x6f, 0x68, 0xc5, 0xee, 0xf6, 0xeb, 0x34, 0xe9, 0x52, 0xc2, 0xf3, 0x12, 0x6d, 0x73, 0x59, 0x8e, 0x22, 0x26, 0x47, 0xfb, 0x70, 0x96, 0xbd, 0x98, 0x27, 0xec, 0x6c, 0x01, 0xf9, 0x7e, 0xd2, 0x3e, 0x3b, 0xac, 0xf7, 0xc7, 0xb3, 0x7c, 0xa6, 0xe8, 0x5f, 0xb1, 0x84, 0x42 }; static const uint8_t nist_186_2_ecdsa_testvector_216_ptx[] = { /* Msg */ 0xff, 0x93, 0x70, 0xf9, 0x30, 0x84, 0x51, 0x7d, 0x70, 0xa1, 0xa1, 0xd6, 0xcf, 0x8a, 0x16, 0x30, 0xd7, 0x71, 0xa0, 0x09, 0x1c, 0x69, 0xa0, 0x96, 0x15, 0xe1, 0x55, 0x63, 0x2a, 0x6b, 0x96, 0x3b, 0x0e, 0xc3, 0xc7, 0x47, 0x4f, 0x0c, 0x06, 0x79, 0x2c, 0x5c, 0xa5, 0x2c, 0xa6, 0x7b, 0xdd, 0x04, 0xda, 0xe8, 0xc0, 0x1c, 0x8d, 0x1d, 0x70, 0x60, 0x09, 0x14, 0x8f, 0x37, 0x28, 0x0a, 0xf6, 0x66, 0xae, 0x83, 0xaa, 0x31, 0xdb, 0x8e, 0x0b, 0xc2, 0x41, 0x4a, 0x4f, 0xcf, 0xd4, 0xa9, 0x2f, 0x78, 0x40, 0x74, 0xe0, 0x6e, 0x7f, 0x90, 0x45, 0x5a, 0xaa, 0x7f, 0x63, 0x7d, 0x0f, 0x29, 0x15, 0x93, 0x85, 0xdd, 0x01, 0xfe, 0xfc, 0x93, 0xca, 0x20, 0x58, 0x74, 0x88, 0x09, 0x80, 0x9c, 0x75, 0x52, 0xb1, 0x1e, 0xe8, 0x48, 0x19, 0x48, 0x88, 0x4e, 0xa1, 0x29, 0xb9, 0x7c, 0x0a, 0x51, 0x5b, 0x8c }; static const uint8_t nist_186_2_ecdsa_testvector_216_private[] = { /* d - byte alignment */ 0x03, 0xe5, 0xa9, 0xc2, 0x5a, 0xe4, 0xb7, 0x42, 0x3a, 0xeb, 0xac, 0x13, 0x28, 0x3e, 0xb1, 0x0e, 0xce, 0x49, 0x53, 0x37, 0x1c, 0xcd, 0x3f, 0xca, 0xf2, 0x1f, 0x0c, 0x1f, 0x39, 0xfa, 0x75, 0x3c, 0xa2, 0x0a, 0x6a, 0x2f, 0x47, 0x9b, 0x82, 0x10, 0x64, 0xec, 0x52, 0xd4, 0x57, 0x45, 0x9c, 0xfd, 0xb6, 0xab, 0x6e, 0x7c, 0x7f, 0xcd, 0x86, 0x6c, 0x8b, 0x0b, 0x6c, 0x9d, 0x84, 0x8c, 0x4d, 0xbf, 0x22, 0x1c, 0x06, 0xa1, 0x6b, 0xb9, 0x91, 0x85 }; static const uint8_t nist_186_2_ecdsa_testvector_216_public_x[] = { /* Qx - byte alignment */ 0x03, 0x42, 0xd3, 0x9b, 0x3f, 0x2c, 0xc9, 0x33, 0x6d, 0xcb, 0xf7, 0xa0, 0x9c, 0x06, 0xaf, 0x6f, 0x60, 0xa0, 0x8f, 0xb7, 0x63, 0x17, 0xb3, 0x71, 0x15, 0x5b, 0xf9, 0x96, 0x5b, 0x6b, 0x96, 0x9c, 0x99, 0xc7, 0xf5, 0x73, 0x65, 0xe6, 0x03, 0x10, 0xa8, 0xaf, 0xc5, 0x8b, 0xec, 0x92, 0x43, 0xfc, 0xf4, 0x81, 0x42, 0xa3, 0x19, 0xaa, 0xb1, 0x54, 0x25, 0xac, 0x09, 0x5f, 0x53, 0x8a, 0xdf, 0xd1, 0x20, 0x4c, 0x7b, 0xe6, 0x07, 0xb9, 0x97, 0x7d }; static const uint8_t nist_186_2_ecdsa_testvector_216_public_y[] = { /* Qy - byte alignment */ 0x00, 0x07, 0xfb, 0x19, 0xc9, 0xd3, 0xd0, 0xad, 0x25, 0x69, 0xa4, 0x63, 0x45, 0x53, 0x08, 0x46, 0xc3, 0xf6, 0x6a, 0x34, 0xd6, 0x24, 0x1e, 0x0b, 0x9d, 0xe4, 0xb8, 0x4b, 0xc5, 0x08, 0x2a, 0x09, 0xb7, 0xfc, 0x98, 0x58, 0x6b, 0x16, 0x8a, 0x9f, 0xed, 0xdf, 0x67, 0x58, 0x3f, 0x0f, 0xd9, 0xfb, 0x75, 0x9e, 0x95, 0x2c, 0xa4, 0x2c, 0xb6, 0x29, 0x44, 0x40, 0x47, 0x03, 0x9f, 0xd8, 0xc1, 0xc6, 0x01, 0xac, 0x80, 0x8d, 0x8b, 0xba, 0x06, 0xb4 }; /* k = 3d3c85e9b396d0b691dd3449647d786a06024e46ccfed1555b03ade3d57b339cdab9b0905d7395c603ea609b6175ce3083b2c38a93324acd08e7acc2a9b9d971fc4a80abe458574 */ static const uint8_t nist_186_2_ecdsa_testvector_216_out[] = { /* R - byte alignment */ 0x00, 0x7b, 0x4c, 0x54, 0x4e, 0x06, 0x35, 0x56, 0x71, 0xd6, 0x8b, 0xbc, 0xf7, 0xc7, 0x0d, 0x39, 0xc8, 0xb4, 0xd1, 0xee, 0xc2, 0xbe, 0x71, 0xd7, 0x61, 0x41, 0x7f, 0xda, 0x2d, 0xa7, 0x4f, 0x72, 0x60, 0x7b, 0xbc, 0xb0, 0x95, 0xe3, 0x80, 0x94, 0x48, 0xfa, 0xd6, 0x85, 0x62, 0x39, 0x59, 0xea, 0xe5, 0xb6, 0xb5, 0x66, 0x3d, 0xde, 0xf4, 0xcc, 0xda, 0x9b, 0x6c, 0xc9, 0x59, 0x84, 0x17, 0xfc, 0x9f, 0x6c, 0x93, 0xf9, 0xc2, 0xf3, 0xd4, 0xb8, /* S - byte alignment */ 0x00, 0x7c, 0x15, 0x21, 0xdf, 0x33, 0xc2, 0x28, 0x2b, 0xf8, 0xb0, 0x5e, 0xf3, 0x86, 0x42, 0x40, 0xdd, 0x09, 0x87, 0x04, 0x78, 0x47, 0xdc, 0x33, 0x14, 0x99, 0x05, 0x0e, 0x1d, 0x86, 0xa9, 0x8f, 0x12, 0xe5, 0x8d, 0x55, 0x26, 0xd2, 0x29, 0x02, 0x23, 0x15, 0xc4, 0xd8, 0xfc, 0xcd, 0xe6, 0xf0, 0x83, 0x19, 0xeb, 0xd0, 0x25, 0x55, 0x49, 0xd2, 0x15, 0x22, 0x95, 0x93, 0x4e, 0xb1, 0xad, 0xb9, 0x8a, 0x34, 0x69, 0x60, 0x22, 0x6b, 0x8d, 0x39 }; static const uint8_t nist_186_2_ecdsa_testvector_217_ptx[] = { /* Msg */ 0xf3, 0xa7, 0xf1, 0x92, 0x28, 0x29, 0x4d, 0x19, 0xfe, 0xa1, 0x2e, 0xd7, 0xe1, 0xe3, 0xee, 0x4d, 0x9b, 0x9b, 0x52, 0xbc, 0xbd, 0x28, 0x0f, 0x96, 0x41, 0xae, 0x8c, 0x32, 0x6d, 0x66, 0xea, 0xc3, 0xfb, 0x39, 0x42, 0x8b, 0x76, 0x8e, 0x2d, 0x4c, 0xe7, 0x60, 0x8a, 0x00, 0xb1, 0x93, 0x7b, 0xc9, 0xba, 0x88, 0xb1, 0x2b, 0xcb, 0xef, 0xea, 0x79, 0x3a, 0xdc, 0xb7, 0x8d, 0xc6, 0x1d, 0x83, 0xbc, 0xc2, 0xcc, 0xd1, 0x0a, 0x76, 0x20, 0xc5, 0x99, 0xc2, 0x88, 0xe6, 0x68, 0x04, 0xfb, 0x22, 0x3a, 0x3c, 0x89, 0x13, 0xd3, 0x6e, 0x37, 0x80, 0x6a, 0x48, 0x09, 0x27, 0x5c, 0x05, 0x60, 0xb9, 0x1e, 0x91, 0x86, 0x27, 0x75, 0xee, 0x88, 0x1c, 0xe9, 0xd6, 0x44, 0xca, 0x77, 0xa2, 0xc2, 0xea, 0x86, 0x6a, 0xc8, 0xfe, 0x1c, 0x6e, 0xa8, 0xda, 0x52, 0xb4, 0x5d, 0x62, 0x05, 0xf3, 0xd6, 0x95, 0xcf }; static const uint8_t nist_186_2_ecdsa_testvector_217_private[] = { /* d - byte alignment */ 0x02, 0x7c, 0xb0, 0x16, 0xc5, 0xe7, 0x48, 0xe1, 0xd1, 0xe9, 0xf3, 0x9e, 0xc9, 0x13, 0x7e, 0x5a, 0xee, 0xc4, 0xce, 0xb1, 0x7e, 0x26, 0x1e, 0x61, 0x4e, 0x29, 0xde, 0x53, 0x3d, 0xe5, 0x82, 0x30, 0xd3, 0xd8, 0x17, 0xb6, 0x5a, 0xec, 0x05, 0x11, 0xad, 0x1a, 0x9d, 0x5d, 0x23, 0x58, 0x71, 0x59, 0xf5, 0xf8, 0x38, 0xed, 0xeb, 0x26, 0x56, 0xc2, 0x01, 0x6c, 0xcf, 0x21, 0x1f, 0xb3, 0x3d, 0xd1, 0x06, 0x0a, 0xbc, 0x01, 0xa4, 0xa3, 0x66, 0xaf }; static const uint8_t nist_186_2_ecdsa_testvector_217_public_x[] = { /* Qx - byte alignment */ 0x06, 0xdd, 0xbf, 0x57, 0xed, 0xe6, 0xbd, 0x2c, 0x24, 0x49, 0xdc, 0x49, 0xc2, 0xc9, 0x34, 0xfb, 0xd7, 0x59, 0x1f, 0x7b, 0xcb, 0xd6, 0x83, 0x26, 0x51, 0x9e, 0xef, 0xbe, 0x5e, 0xfe, 0x92, 0xd0, 0x54, 0x2f, 0x29, 0xc1, 0xad, 0xe9, 0xfd, 0x25, 0x1d, 0x36, 0x7d, 0xfd, 0x18, 0x17, 0x7c, 0x4f, 0xff, 0x10, 0xe3, 0x6c, 0xcb, 0xd4, 0xb4, 0x66, 0x63, 0x9e, 0x8f, 0x1b, 0x25, 0xad, 0xbd, 0xbe, 0x0f, 0x8d, 0xe8, 0x8a, 0x07, 0xf8, 0x25, 0xfc }; static const uint8_t nist_186_2_ecdsa_testvector_217_public_y[] = { /* Qy - byte alignment */ 0x04, 0x1e, 0x23, 0xa5, 0x43, 0x40, 0xe3, 0xed, 0x9b, 0x94, 0xdb, 0xbf, 0x40, 0xb5, 0x88, 0xfa, 0x83, 0x12, 0xe5, 0x76, 0x9f, 0xb4, 0x72, 0xe8, 0xca, 0x8c, 0x4d, 0xe1, 0x14, 0x9b, 0xab, 0xff, 0xc4, 0x2a, 0xee, 0xc3, 0x3a, 0xee, 0xb9, 0xc4, 0x66, 0xd2, 0xa6, 0x99, 0x34, 0x07, 0x48, 0xc0, 0xbf, 0xc4, 0xd3, 0x6c, 0xe1, 0x61, 0x5c, 0x09, 0x59, 0x2b, 0xa9, 0xe4, 0xbc, 0xee, 0x7e, 0x5b, 0xaf, 0xfc, 0xf4, 0xfd, 0x60, 0x04, 0xb8, 0xe5 }; /* k = 176e893cdb9bb48d19e67a2cf0fccdfeb8adfecbcc375b86efbb8b37245b7108332e149409643f916693f38f2f966e55c77cf19edee58584344bb159ab7aa93b6f59113d83e3b9b */ static const uint8_t nist_186_2_ecdsa_testvector_217_out[] = { /* R - byte alignment */ 0x01, 0x16, 0x03, 0x17, 0x82, 0x59, 0xb2, 0x8c, 0x0f, 0x94, 0xe1, 0xe9, 0xbd, 0xf2, 0xef, 0xe3, 0x23, 0x5f, 0xfb, 0x39, 0x4e, 0xc1, 0x43, 0xd7, 0x0a, 0xc0, 0xf0, 0xdc, 0xfa, 0x86, 0x37, 0xb0, 0x3c, 0x6e, 0xa9, 0x83, 0x30, 0xd3, 0x6b, 0x6b, 0x32, 0x0f, 0x2d, 0xfe, 0x77, 0x6d, 0x57, 0xdf, 0x71, 0x9a, 0xfd, 0xd7, 0x3c, 0x8b, 0x1b, 0x5a, 0x85, 0xdf, 0x65, 0xca, 0x09, 0xaf, 0xa5, 0xcf, 0xcf, 0xc3, 0x25, 0x77, 0x07, 0xe3, 0xa7, 0x1f, /* S - byte alignment */ 0x03, 0xaa, 0x5f, 0xa8, 0x27, 0x2e, 0xd3, 0x4c, 0x09, 0xfc, 0x43, 0x21, 0xfe, 0x22, 0x3c, 0x2a, 0xc1, 0xaf, 0x03, 0xc1, 0x4a, 0x80, 0x37, 0xa1, 0x4d, 0x2c, 0x38, 0xf5, 0x81, 0x71, 0x89, 0xb7, 0xd1, 0xb1, 0xa7, 0xc9, 0x67, 0x05, 0xd4, 0xf9, 0x11, 0xbf, 0xe0, 0x3e, 0x00, 0xcf, 0xb0, 0xb3, 0x64, 0x94, 0x4b, 0x5b, 0x70, 0x27, 0x8d, 0xa5, 0x78, 0xf9, 0x6f, 0x57, 0xc0, 0x82, 0xb5, 0xa5, 0xd6, 0x40, 0xbf, 0x83, 0x87, 0xc3, 0xdb, 0x01 }; static const uint8_t nist_186_2_ecdsa_testvector_218_ptx[] = { /* Msg */ 0x99, 0x75, 0x3b, 0xca, 0xab, 0xcd, 0xc6, 0xa8, 0xce, 0x6c, 0x15, 0x7d, 0x49, 0x4b, 0xc8, 0xb7, 0xe4, 0xe3, 0x03, 0x3c, 0xfa, 0xf2, 0x1e, 0x50, 0xd0, 0x7d, 0x9d, 0xb8, 0x25, 0x11, 0x62, 0x1f, 0x0a, 0x4f, 0x21, 0xba, 0xf4, 0xa8, 0x15, 0x28, 0x10, 0x64, 0xf1, 0x9c, 0xd6, 0xe9, 0x1a, 0x3d, 0xe1, 0x3a, 0x13, 0xcd, 0xfe, 0xbe, 0x38, 0x89, 0x83, 0x43, 0xb0, 0x51, 0xe2, 0x42, 0x9d, 0x09, 0x7d, 0x64, 0x95, 0x3f, 0xbc, 0x46, 0x56, 0x0e, 0x5d, 0x79, 0xb5, 0x42, 0x0c, 0xce, 0xd8, 0xbc, 0x34, 0xd0, 0xa5, 0x19, 0x14, 0x91, 0x7a, 0x8e, 0x15, 0xaa, 0x1f, 0x16, 0x5b, 0x7d, 0xf9, 0xd0, 0x9a, 0xbd, 0x80, 0xa2, 0x2b, 0x31, 0xf3, 0x23, 0x5f, 0xb4, 0x4a, 0xb8, 0x13, 0x81, 0x6c, 0xfd, 0x84, 0xad, 0xa2, 0x66, 0x65, 0xf5, 0x4b, 0x26, 0x2f, 0xba, 0xd2, 0x4f, 0xb9, 0x4a, 0xde, 0x3b }; static const uint8_t nist_186_2_ecdsa_testvector_218_private[] = { /* d - byte alignment */ 0x03, 0x4e, 0x5a, 0xd3, 0xa2, 0xd9, 0x7b, 0xd4, 0xef, 0x31, 0xa5, 0xbf, 0x0a, 0x91, 0x45, 0xc8, 0xaf, 0x88, 0x79, 0xca, 0xa8, 0x05, 0x62, 0xc1, 0xb0, 0x49, 0xe5, 0x81, 0x4b, 0x20, 0xb4, 0x71, 0x5d, 0xc6, 0xbe, 0x9a, 0x9c, 0xa6, 0x11, 0x2e, 0x58, 0x2d, 0x5c, 0x6e, 0xa3, 0xf3, 0x21, 0x81, 0xd3, 0x23, 0xbd, 0xca, 0x35, 0xd9, 0xd0, 0x95, 0x26, 0x07, 0x46, 0xa6, 0x03, 0xbb, 0xd6, 0xef, 0xeb, 0x4a, 0xf8, 0xcf, 0x8f, 0x55, 0x00, 0xa8 }; static const uint8_t nist_186_2_ecdsa_testvector_218_public_x[] = { /* Qx - byte alignment */ 0x00, 0xd4, 0x9d, 0x90, 0x4b, 0x28, 0xff, 0x3a, 0x76, 0x54, 0x98, 0x3c, 0x1c, 0x14, 0x5c, 0x25, 0xd5, 0x1e, 0xbc, 0xfb, 0xa7, 0x67, 0x28, 0xd6, 0xdf, 0xc9, 0xb0, 0x8a, 0xe2, 0x41, 0xa7, 0x68, 0xb5, 0x6c, 0x2d, 0x7d, 0x04, 0x95, 0x34, 0x74, 0x69, 0xa5, 0xe3, 0xea, 0xc8, 0xf7, 0x69, 0x5c, 0xf8, 0x72, 0xec, 0x4d, 0x9f, 0x08, 0xe5, 0xe1, 0x40, 0xd4, 0x5d, 0x47, 0x52, 0x13, 0xe2, 0xeb, 0xfc, 0x43, 0x8f, 0x43, 0x53, 0x7d, 0x71, 0xed }; static const uint8_t nist_186_2_ecdsa_testvector_218_public_y[] = { /* Qy - byte alignment */ 0x04, 0x2e, 0x3d, 0x6e, 0xc8, 0xf7, 0xdc, 0x2c, 0xc1, 0x5d, 0xea, 0xaa, 0xae, 0x66, 0x59, 0x3f, 0x01, 0xb8, 0x0f, 0xa2, 0xcf, 0x40, 0xb5, 0x2a, 0xf6, 0x8c, 0x47, 0x16, 0x3a, 0x86, 0xd8, 0x4f, 0xaa, 0xa8, 0x34, 0x51, 0xc8, 0xc1, 0x69, 0x37, 0x80, 0xee, 0x6a, 0xbf, 0x3f, 0x9b, 0x91, 0xc1, 0x20, 0xd2, 0xd9, 0xc2, 0xeb, 0x9b, 0x7f, 0xf2, 0x13, 0x86, 0x16, 0x25, 0x52, 0x91, 0x64, 0x9e, 0xe3, 0xcb, 0x40, 0xd1, 0xf2, 0x76, 0x28, 0x17 }; /* k = 1fcb55dab8822e70a4ffeff66138660f48612175d26df8445f1da492f4b525d311031c6b41948e08a1f22e4cc81fbfd0298ce565bb65c2d1cb002d674f65f4aa235da0cd5baa7a6 */ static const uint8_t nist_186_2_ecdsa_testvector_218_out[] = { /* R - byte alignment */ 0x01, 0x70, 0xa3, 0x81, 0x06, 0x57, 0xa1, 0x73, 0x55, 0x42, 0xfd, 0xd8, 0xe1, 0xdf, 0xe0, 0x21, 0x93, 0x9e, 0xa2, 0xf3, 0x44, 0xd2, 0x9f, 0x92, 0x42, 0x82, 0x9c, 0x17, 0xe6, 0xf2, 0xfd, 0x59, 0x5f, 0xa4, 0xf7, 0xed, 0x58, 0xe2, 0x8e, 0xe8, 0xe5, 0xc3, 0x09, 0xe3, 0x43, 0x7b, 0xee, 0x82, 0x77, 0xcf, 0x47, 0xdb, 0x60, 0x93, 0xf6, 0x93, 0xa7, 0xf1, 0xac, 0x89, 0x65, 0x1c, 0x04, 0x31, 0x31, 0xfc, 0x58, 0x4a, 0x80, 0x57, 0x4f, 0x0d, /* S - byte alignment */ 0x00, 0x57, 0xec, 0xdd, 0x33, 0xd0, 0x4a, 0x47, 0x1e, 0x8e, 0xd4, 0x48, 0xbb, 0xe0, 0xf8, 0x18, 0xf2, 0x11, 0x4c, 0x0b, 0x51, 0xcd, 0x22, 0x47, 0x3c, 0x19, 0x4d, 0xf0, 0x5b, 0x87, 0x00, 0xcf, 0x36, 0x99, 0x68, 0x42, 0xef, 0x0b, 0xbb, 0x41, 0x3c, 0x2f, 0xd3, 0x32, 0xe8, 0x2e, 0x24, 0x9b, 0xc2, 0xf9, 0x41, 0xe9, 0x18, 0x15, 0x25, 0x75, 0xa6, 0xf6, 0xd6, 0x6f, 0xdf, 0xd8, 0x6f, 0x42, 0xfe, 0xd9, 0x2f, 0x45, 0x7c, 0x06, 0xad, 0xda }; static const uint8_t nist_186_2_ecdsa_testvector_219_ptx[] = { /* Msg */ 0xb8, 0x3c, 0xf7, 0xe1, 0x01, 0x77, 0x4a, 0x1e, 0xe7, 0x30, 0x16, 0x13, 0x41, 0xba, 0xf4, 0x42, 0x9a, 0x3f, 0xf9, 0xbd, 0xcb, 0x02, 0xe8, 0x8b, 0xd0, 0xe6, 0xa5, 0x4e, 0xd4, 0x34, 0xed, 0x23, 0x8e, 0x99, 0x45, 0xca, 0xd0, 0x6e, 0x30, 0x07, 0x5d, 0x3c, 0xa5, 0x47, 0xfc, 0x80, 0xc0, 0x87, 0xca, 0xab, 0xb8, 0x72, 0xd4, 0x6d, 0x11, 0xc9, 0xe5, 0x33, 0x13, 0x08, 0x9d, 0xef, 0x7a, 0x47, 0xc3, 0x17, 0x6f, 0x5e, 0xdc, 0xf0, 0xb7, 0x4c, 0xfd, 0x0c, 0x2b, 0xda, 0xdd, 0x11, 0x68, 0x7b, 0x2e, 0xbd, 0xc7, 0x77, 0x2e, 0x27, 0x90, 0x48, 0x79, 0x48, 0x6a, 0x44, 0x21, 0xb9, 0x16, 0x7d, 0x00, 0xbe, 0x5d, 0xe6, 0x4d, 0x84, 0x47, 0xb7, 0x6e, 0xa7, 0x8e, 0x12, 0x0d, 0xf7, 0x52, 0xe6, 0x6e, 0x7c, 0x0e, 0x14, 0x00, 0xb8, 0xcb, 0xd0, 0x32, 0x2b, 0x94, 0x4a, 0x87, 0x1d, 0x29, 0x8e }; static const uint8_t nist_186_2_ecdsa_testvector_219_private[] = { /* d - byte alignment */ 0x02, 0x64, 0xee, 0xc5, 0x75, 0xfe, 0xac, 0x9b, 0x93, 0xd1, 0x46, 0xbf, 0xf0, 0x9d, 0x0a, 0x66, 0x78, 0x56, 0xca, 0x00, 0x62, 0x2b, 0x0c, 0x5a, 0xfb, 0x94, 0x7e, 0x3d, 0x21, 0x19, 0x6d, 0xa5, 0x4e, 0xc0, 0xaa, 0xad, 0x3e, 0xbd, 0xee, 0x0f, 0x76, 0x08, 0xf6, 0x4e, 0x48, 0x7b, 0x18, 0xcd, 0x7d, 0x45, 0xb0, 0x0a, 0x8f, 0xd9, 0x3c, 0xad, 0x39, 0x6d, 0xc1, 0xb2, 0xd1, 0xa3, 0x9a, 0xe1, 0x52, 0xb5, 0x10, 0x8e, 0x9c, 0xd2, 0x02, 0x6e }; static const uint8_t nist_186_2_ecdsa_testvector_219_public_x[] = { /* Qx - byte alignment */ 0x04, 0x34, 0xdc, 0x73, 0xbc, 0x7a, 0x96, 0xe7, 0x9c, 0x7d, 0x11, 0x8e, 0x2d, 0xf4, 0x19, 0xdb, 0x00, 0x30, 0xce, 0x90, 0xb3, 0xd2, 0xd7, 0x6d, 0x6e, 0x7a, 0x0d, 0xcf, 0x97, 0x19, 0x99, 0x13, 0x8e, 0xc8, 0x3b, 0x53, 0xc0, 0xbf, 0x54, 0x6d, 0x95, 0xa3, 0xa0, 0x54, 0x9b, 0xc9, 0xf6, 0x20, 0x48, 0xbf, 0xe4, 0x54, 0xf9, 0x6a, 0x1e, 0xfc, 0x7d, 0xd9, 0x72, 0x0f, 0xf8, 0x8b, 0x2c, 0x0f, 0x55, 0xbd, 0x9f, 0x8b, 0xbc, 0x0d, 0xeb, 0x79 }; static const uint8_t nist_186_2_ecdsa_testvector_219_public_y[] = { /* Qy - byte alignment */ 0x02, 0x72, 0x68, 0xbf, 0x70, 0x31, 0x65, 0x4d, 0x96, 0xc4, 0x05, 0xb9, 0x4a, 0xcb, 0x9d, 0x2c, 0x9b, 0xa8, 0x33, 0xba, 0x71, 0x5c, 0x11, 0x23, 0xa4, 0x0d, 0x89, 0x50, 0xc9, 0x58, 0x6c, 0x1d, 0xcc, 0xce, 0xd0, 0xf7, 0x66, 0x19, 0x90, 0x9c, 0xd5, 0x4f, 0x3b, 0x36, 0x26, 0x80, 0xfc, 0x41, 0x2f, 0x87, 0xe9, 0x59, 0xa0, 0xd0, 0xfb, 0x70, 0x74, 0x1a, 0x99, 0x44, 0x2a, 0x85, 0xaa, 0xff, 0x09, 0x0c, 0x24, 0x23, 0x86, 0x76, 0x64, 0x8a }; /* k = 0e24f9bdd9e99e974723782982cec708b7e479ff01f414fdfa32d5cd56b73a82802030cce77a7a3def73844901e6a1b6d7d7d7d4131925d20f8c2f1d57ed6c38a0c44343ef4354c */ static const uint8_t nist_186_2_ecdsa_testvector_219_out[] = { /* R - byte alignment */ 0x02, 0x0e, 0x3a, 0xb1, 0xba, 0x07, 0xbc, 0xee, 0xa8, 0xe0, 0x7b, 0x67, 0x5e, 0x4b, 0x99, 0x03, 0x6d, 0xd5, 0x99, 0x45, 0x2d, 0x46, 0x55, 0x4b, 0x20, 0x2d, 0xee, 0xf6, 0xb3, 0xc7, 0x3c, 0x95, 0x3f, 0xdf, 0x41, 0x1f, 0xcc, 0x62, 0xb9, 0x52, 0x4d, 0xee, 0xba, 0xf1, 0x7b, 0x70, 0x0a, 0x62, 0xa3, 0x51, 0xbb, 0xd8, 0xe2, 0xe7, 0xe1, 0x9e, 0x47, 0x23, 0x37, 0xc2, 0x8a, 0x25, 0xd8, 0x09, 0xe3, 0x94, 0xd5, 0x01, 0xd5, 0x0f, 0xe8, 0x29, /* S - byte alignment */ 0x02, 0x4c, 0x08, 0x46, 0x4f, 0x28, 0x31, 0x5a, 0x0a, 0x07, 0xcb, 0x5a, 0x2d, 0x66, 0x98, 0x0b, 0xb5, 0x3d, 0x7d, 0x72, 0xc5, 0xf4, 0x32, 0x7e, 0x84, 0x19, 0xbf, 0xa2, 0x99, 0xf3, 0xf9, 0x3c, 0x4e, 0x42, 0xee, 0x4f, 0x9e, 0xc6, 0x01, 0x17, 0x28, 0x95, 0xc4, 0x59, 0xea, 0x08, 0x2b, 0xa1, 0xdd, 0xc1, 0x3d, 0x8b, 0x37, 0x66, 0xad, 0xd7, 0xc7, 0x4b, 0xdf, 0x69, 0xdb, 0x53, 0x72, 0x47, 0x20, 0x0e, 0x95, 0x94, 0x0c, 0x80, 0xab, 0xdc }; static const uint8_t nist_186_2_ecdsa_testvector_220_ptx[] = { /* Msg */ 0xb5, 0x7d, 0xfa, 0x37, 0xcf, 0xc8, 0x8d, 0x60, 0xf2, 0xcd, 0x75, 0x06, 0x22, 0x11, 0x70, 0x01, 0xb1, 0x2c, 0x06, 0xc7, 0x05, 0x7d, 0x6d, 0xca, 0x9c, 0x1c, 0xa9, 0x07, 0x4c, 0x10, 0xf7, 0xdb, 0xd0, 0xc2, 0x6c, 0x19, 0x80, 0xb2, 0xda, 0x5b, 0x60, 0x69, 0xf3, 0x95, 0x5c, 0xaf, 0xb1, 0xf0, 0xd2, 0xfd, 0xf5, 0xd5, 0x51, 0x35, 0x6e, 0x47, 0xa1, 0x91, 0xbc, 0x77, 0x03, 0xd9, 0xd5, 0x92, 0xb9, 0xda, 0xa8, 0xde, 0xc9, 0x13, 0x01, 0x05, 0xff, 0xb1, 0xad, 0xb1, 0x31, 0xbe, 0xde, 0x58, 0xc6, 0x95, 0xd1, 0x5a, 0x79, 0x99, 0xad, 0x49, 0x5b, 0x26, 0xaf, 0x87, 0x17, 0xc8, 0x84, 0x17, 0x7a, 0xab, 0xf6, 0xad, 0x33, 0x53, 0xcb, 0x07, 0xd7, 0x8d, 0xea, 0x80, 0x28, 0xa6, 0xc0, 0xe3, 0x96, 0xda, 0xe2, 0x7d, 0x06, 0x0f, 0xf4, 0x76, 0xd3, 0xc4, 0xc9, 0x61, 0x12, 0x44, 0xcb, 0x11 }; static const uint8_t nist_186_2_ecdsa_testvector_220_private[] = { /* d - byte alignment */ 0x01, 0x23, 0x56, 0x16, 0x00, 0x10, 0x42, 0x2b, 0x88, 0x83, 0xb1, 0x8e, 0x1a, 0xda, 0xb3, 0xf9, 0xd3, 0xc8, 0xb4, 0x6c, 0x90, 0x70, 0x94, 0xcc, 0xc2, 0xc5, 0x8b, 0xa1, 0x40, 0x87, 0x6d, 0x81, 0x7d, 0x5c, 0x37, 0x49, 0xf6, 0xbb, 0x9d, 0x5f, 0x64, 0xfc, 0xe6, 0x53, 0x2d, 0x43, 0xef, 0x6f, 0xd2, 0xbe, 0x41, 0xf0, 0x1a, 0x33, 0xd9, 0xcd, 0x81, 0x3e, 0x18, 0x82, 0x8a, 0x84, 0xea, 0x99, 0x64, 0x40, 0x28, 0x85, 0x27, 0xa8, 0x1a, 0x09 }; static const uint8_t nist_186_2_ecdsa_testvector_220_public_x[] = { /* Qx - byte alignment */ 0x04, 0x42, 0x4d, 0x5e, 0x39, 0x42, 0x31, 0xc8, 0x6d, 0xfd, 0x0d, 0xdc, 0x96, 0xe8, 0x49, 0xfc, 0xc5, 0xcb, 0x89, 0x9c, 0x32, 0x41, 0x78, 0xa1, 0xf0, 0x6f, 0x13, 0x50, 0x30, 0x4a, 0x31, 0x08, 0xf7, 0xd0, 0xc7, 0xa5, 0xe6, 0xd3, 0x22, 0x19, 0xaf, 0xac, 0x6e, 0x5d, 0x1f, 0x69, 0x7d, 0x82, 0x75, 0x79, 0x2a, 0x51, 0x2f, 0x33, 0x70, 0xdd, 0x0c, 0xb8, 0x7f, 0x09, 0xc9, 0xfb, 0x04, 0xb6, 0x14, 0xd9, 0xcd, 0xe0, 0xcf, 0xe8, 0x90, 0x70 }; static const uint8_t nist_186_2_ecdsa_testvector_220_public_y[] = { /* Qy - byte alignment */ 0x00, 0x84, 0xfd, 0x10, 0x4b, 0x23, 0x89, 0xfb, 0x82, 0x77, 0x47, 0x94, 0xce, 0xd5, 0xe9, 0xcc, 0x39, 0x85, 0x1c, 0x11, 0xef, 0xde, 0xb7, 0xe4, 0x49, 0xb7, 0x35, 0xd1, 0x82, 0x15, 0xc6, 0xdd, 0xcb, 0xb7, 0xc5, 0xbb, 0xc0, 0x8b, 0x5e, 0xfe, 0x0b, 0x3d, 0x22, 0x14, 0x4f, 0x26, 0x56, 0xd5, 0xb0, 0x17, 0x1d, 0x3b, 0x57, 0x3d, 0x85, 0xa8, 0x0a, 0x92, 0x4d, 0xb3, 0x86, 0x87, 0xfe, 0x59, 0x35, 0x4b, 0x9a, 0x96, 0x06, 0xa6, 0x42, 0x83 }; /* k = 151f25d130f9e4bad9523c90ae32f53bebf95515a5ee5e8344c0766c2c9550fe139355bdaa5874d5cb1364c0591a8f0a6affd32234bb93252909b5ab475b87334101a4e257c8a16 */ static const uint8_t nist_186_2_ecdsa_testvector_220_out[] = { /* R - byte alignment */ 0x02, 0x39, 0x7d, 0x48, 0x45, 0x1c, 0x8c, 0x15, 0xd9, 0x32, 0x6d, 0x5a, 0x06, 0x15, 0xb4, 0xe3, 0x2d, 0x79, 0xa6, 0xdd, 0xe9, 0x24, 0x28, 0x0e, 0x1f, 0x4d, 0x10, 0x28, 0x0a, 0xd8, 0xd5, 0x38, 0x23, 0x2f, 0x22, 0x53, 0xa0, 0xcc, 0x9d, 0xc4, 0xdd, 0x3a, 0x7e, 0xdf, 0xa1, 0x2e, 0x4e, 0x00, 0x65, 0x26, 0x61, 0xd3, 0x61, 0xc9, 0x26, 0x6a, 0xb3, 0x52, 0xe2, 0x99, 0xd4, 0xae, 0x0f, 0x2f, 0x88, 0xb2, 0x17, 0x94, 0x25, 0x7f, 0x8e, 0xf7, /* S - byte alignment */ 0x01, 0xe9, 0xae, 0x69, 0xac, 0x91, 0x4a, 0xa6, 0xa3, 0x37, 0x3f, 0x38, 0xf2, 0xf1, 0x96, 0x63, 0xb7, 0x79, 0x76, 0x65, 0x3a, 0x6a, 0x09, 0xba, 0x88, 0x46, 0x17, 0x65, 0xa3, 0x8a, 0x51, 0x99, 0x25, 0x1b, 0xb5, 0x63, 0xda, 0x93, 0xb9, 0x55, 0x7c, 0x19, 0x92, 0x84, 0xa6, 0x3f, 0x63, 0x47, 0xe9, 0x38, 0x07, 0xe7, 0xb3, 0xb3, 0xb7, 0x18, 0x72, 0x00, 0x07, 0x49, 0xf3, 0x9e, 0x53, 0x45, 0xe9, 0x93, 0xcb, 0x77, 0x8b, 0x56, 0x01, 0x09 }; static const uint8_t nist_186_2_ecdsa_testvector_221_ptx[] = { /* Msg */ 0x98, 0xdc, 0xbb, 0x87, 0x95, 0x09, 0x0a, 0x5d, 0x0d, 0xf4, 0x89, 0x5b, 0xe0, 0x50, 0x35, 0x5e, 0x0d, 0x72, 0x19, 0x0f, 0x21, 0xfb, 0x66, 0xac, 0xf6, 0xb8, 0xc6, 0x0c, 0x99, 0xc6, 0xee, 0xdd, 0x8c, 0xfa, 0x72, 0x31, 0x2e, 0x7f, 0xde, 0x39, 0x77, 0xc1, 0x02, 0x4f, 0xe8, 0x8a, 0x8d, 0x3a, 0xc2, 0x6b, 0xde, 0xae, 0x77, 0x5e, 0x16, 0x13, 0x5e, 0xa9, 0x72, 0x87, 0xaa, 0x06, 0xd8, 0x26, 0x9d, 0x00, 0xaf, 0x89, 0xf9, 0xa0, 0xf4, 0x8c, 0xb8, 0x49, 0x8a, 0x55, 0xfc, 0xe1, 0xd2, 0x92, 0x49, 0x31, 0x7c, 0x01, 0xf2, 0x8f, 0x9d, 0x36, 0xd1, 0xba, 0x01, 0x99, 0x3b, 0x05, 0xc2, 0xae, 0x33, 0xb8, 0x19, 0x99, 0xde, 0xb3, 0x75, 0xe1, 0x38, 0x54, 0xca, 0x74, 0x04, 0x9b, 0x2c, 0xeb, 0x09, 0x8c, 0x9c, 0x10, 0x7b, 0xd5, 0x22, 0x9d, 0xb8, 0xb1, 0x1c, 0x47, 0x35, 0x0c, 0xd5, 0xfb }; static const uint8_t nist_186_2_ecdsa_testvector_221_private[] = { /* d - byte alignment */ 0x02, 0xe2, 0x3e, 0xdb, 0xb2, 0x01, 0xcf, 0xc1, 0x32, 0xcb, 0x7b, 0x77, 0xa1, 0x6c, 0xa6, 0x9d, 0x60, 0xcb, 0x62, 0x23, 0x26, 0x6a, 0x20, 0xd3, 0xfe, 0x76, 0xb5, 0x21, 0x06, 0x08, 0xf4, 0x15, 0x81, 0x7d, 0xae, 0x6d, 0x0b, 0xb2, 0x30, 0x2e, 0x51, 0x9b, 0xde, 0xda, 0x4b, 0xd7, 0x9e, 0x3d, 0x7d, 0x36, 0xd3, 0x9d, 0x63, 0x65, 0xe1, 0x06, 0xd4, 0xe4, 0x54, 0x40, 0x2d, 0xef, 0xbf, 0xa8, 0xe5, 0xce, 0x54, 0xff, 0xec, 0x45, 0xcd, 0x4b }; static const uint8_t nist_186_2_ecdsa_testvector_221_public_x[] = { /* Qx - byte alignment */ 0x01, 0x52, 0x6d, 0x32, 0xef, 0x32, 0xd7, 0xad, 0xa5, 0xc1, 0xf0, 0x0f, 0x1a, 0x3c, 0x27, 0xaa, 0x76, 0x7f, 0x6e, 0x33, 0x4e, 0x7d, 0x9d, 0x5b, 0x20, 0x5b, 0x59, 0x5f, 0xc9, 0x29, 0x9c, 0xd2, 0xaf, 0x61, 0xdc, 0x8f, 0xc6, 0x7b, 0xef, 0x93, 0x75, 0xf7, 0xc9, 0x1a, 0xfd, 0xd6, 0x0d, 0x8c, 0xca, 0xaf, 0x63, 0x25, 0x41, 0xb0, 0xeb, 0xd6, 0xbe, 0x28, 0x5a, 0xfa, 0x85, 0xaa, 0x5d, 0xd8, 0x9c, 0x2d, 0xab, 0xac, 0xba, 0x2a, 0x24, 0x56 }; static const uint8_t nist_186_2_ecdsa_testvector_221_public_y[] = { /* Qy - byte alignment */ 0x03, 0xe4, 0x48, 0x32, 0x2e, 0x90, 0x00, 0x97, 0x1b, 0x6f, 0x1f, 0xcf, 0x5d, 0xbd, 0x37, 0xd9, 0xa0, 0x07, 0xcb, 0xca, 0x6e, 0xed, 0xc1, 0x6e, 0xf8, 0xd8, 0x34, 0x40, 0xf7, 0x42, 0x1b, 0xa1, 0xf7, 0xac, 0xe1, 0x3a, 0x17, 0x3c, 0x36, 0x34, 0xd7, 0x13, 0x06, 0x1b, 0x54, 0x97, 0xff, 0x9a, 0xf9, 0xb7, 0x2f, 0x1a, 0x88, 0xf6, 0xba, 0xad, 0xa7, 0x1b, 0xa4, 0x26, 0x79, 0x2e, 0x3b, 0xd8, 0xe9, 0x7a, 0x82, 0x60, 0x61, 0x11, 0xe1, 0xd0 }; /* k = 21aa9009e6abca6b88fd0cbf68ae4a40bf7014b427c2e31cded299652e924f214e006853f72b957796c35b12425e9d3b0f12d01a02303e6f2ead725d056340bcd4c58214d770b73 */ static const uint8_t nist_186_2_ecdsa_testvector_221_out[] = { /* R - byte alignment */ 0x00, 0xc5, 0xc9, 0xc8, 0xa5, 0xe2, 0x72, 0xd3, 0x25, 0x4e, 0x3c, 0xeb, 0x1a, 0x9c, 0x5c, 0x6a, 0xf4, 0xcf, 0x2f, 0xa8, 0x5b, 0xed, 0x53, 0xaa, 0x78, 0xc4, 0x8f, 0xc2, 0x86, 0x20, 0x0b, 0x31, 0xe6, 0xc8, 0x45, 0x88, 0xb4, 0x38, 0x2e, 0xfd, 0x98, 0x57, 0x90, 0x2c, 0x1b, 0x68, 0xd8, 0xe3, 0x33, 0xa2, 0x3b, 0x3c, 0x62, 0x18, 0x81, 0x65, 0x3c, 0x69, 0xb5, 0x5e, 0x63, 0x93, 0xe4, 0x05, 0x7b, 0x70, 0x3d, 0xcd, 0xd4, 0x3f, 0x0c, 0x39, /* S - byte alignment */ 0x00, 0xaf, 0x3e, 0xb2, 0x1d, 0xd6, 0x7b, 0x0f, 0x9d, 0x4a, 0x5d, 0x43, 0x07, 0x4e, 0xf8, 0x1e, 0x95, 0x51, 0x57, 0x63, 0x34, 0xfe, 0xf6, 0xde, 0xf4, 0x32, 0xdd, 0x97, 0x3e, 0x67, 0x30, 0x9e, 0x42, 0xd9, 0x50, 0x0b, 0xed, 0x14, 0xc7, 0x8a, 0x40, 0x2a, 0x41, 0x22, 0xaa, 0xfb, 0xc9, 0xba, 0xc6, 0x94, 0x30, 0x8b, 0x00, 0xb6, 0x0e, 0xcf, 0x5a, 0x1e, 0xa2, 0xdd, 0xdf, 0x77, 0xb5, 0xb8, 0xa5, 0xc1, 0x06, 0x2b, 0x82, 0xe6, 0xa3, 0x2f }; static const uint8_t nist_186_2_ecdsa_testvector_222_ptx[] = { /* Msg */ 0x41, 0x38, 0xb2, 0x52, 0xb9, 0x65, 0xac, 0x22, 0x4e, 0xcd, 0x35, 0x83, 0x7d, 0x92, 0x3a, 0xbb, 0x3d, 0x56, 0x22, 0xa7, 0xcc, 0xf2, 0xb1, 0x0a, 0xad, 0x6b, 0x2d, 0x25, 0xf2, 0x22, 0xc0, 0x88, 0xb7, 0x4a, 0x1e, 0x27, 0xef, 0x9f, 0x67, 0xb0, 0x63, 0x55, 0x4f, 0x1c, 0xf7, 0x4f, 0x7c, 0x85, 0x2f, 0x92, 0x30, 0x37, 0xf3, 0xf9, 0x27, 0x09, 0x8f, 0x2a, 0xc3, 0xee, 0xfe, 0xc8, 0x66, 0xc7, 0x68, 0xeb, 0x1f, 0x7b, 0xe9, 0xcd, 0x8a, 0x4a, 0x94, 0xc6, 0xf1, 0x5e, 0xb8, 0x7a, 0xb7, 0xa3, 0x61, 0x51, 0xf7, 0xd9, 0x22, 0x27, 0x68, 0xe8, 0x12, 0x45, 0x84, 0x73, 0x15, 0x90, 0xe9, 0xaf, 0x5d, 0x01, 0xff, 0x76, 0x30, 0x55, 0xdb, 0x97, 0xeb, 0x06, 0x63, 0x71, 0x47, 0x79, 0xb3, 0xc0, 0xdb, 0x79, 0xc0, 0xb6, 0xe2, 0xe4, 0x3b, 0x4e, 0x3f, 0xa4, 0xb9, 0xdd, 0xbe, 0xe1, 0x10, 0xe9 }; static const uint8_t nist_186_2_ecdsa_testvector_222_private[] = { /* d - byte alignment */ 0x01, 0x13, 0x5a, 0xfa, 0xea, 0x83, 0x71, 0x7f, 0x9c, 0xd4, 0xe8, 0xc0, 0xb2, 0x3b, 0xd9, 0x12, 0x84, 0xc4, 0x06, 0xf2, 0x23, 0x3e, 0x05, 0x00, 0xca, 0x18, 0xec, 0xe6, 0x24, 0x18, 0x47, 0x55, 0xfc, 0xe5, 0x69, 0xb5, 0xf3, 0x62, 0x11, 0x5b, 0xd9, 0x2f, 0xf5, 0xc5, 0xa9, 0x27, 0x74, 0x42, 0x14, 0x96, 0x6a, 0xfe, 0x28, 0x1a, 0x7c, 0xcb, 0x3e, 0x56, 0x6e, 0x87, 0xc3, 0x53, 0x1f, 0x85, 0xac, 0x7f, 0xda, 0xcc, 0x75, 0xcd, 0x13, 0x59 }; static const uint8_t nist_186_2_ecdsa_testvector_222_public_x[] = { /* Qx - byte alignment */ 0x02, 0x1a, 0x07, 0xd9, 0x09, 0x01, 0x29, 0x30, 0xc0, 0x49, 0x76, 0xa1, 0xae, 0x44, 0x1b, 0x1f, 0x99, 0x9f, 0x9f, 0x9d, 0x64, 0xd7, 0xcd, 0x0e, 0xd8, 0xdc, 0x1a, 0xd3, 0x3f, 0x78, 0x51, 0x8d, 0x7c, 0xa7, 0x77, 0x3b, 0x65, 0x23, 0x4a, 0xd8, 0xfe, 0x45, 0x44, 0xf6, 0xbe, 0xdd, 0x07, 0x12, 0x30, 0xbb, 0x00, 0x70, 0x1d, 0xfa, 0x9b, 0xea, 0xca, 0x6e, 0x47, 0x40, 0x80, 0x06, 0x0c, 0xb7, 0xfc, 0xb4, 0x87, 0xd3, 0x55, 0x15, 0x66, 0xe5 }; static const uint8_t nist_186_2_ecdsa_testvector_222_public_y[] = { /* Qy - byte alignment */ 0x07, 0xe4, 0xa9, 0x1b, 0x8d, 0xc9, 0x5b, 0x8b, 0x7a, 0x17, 0x7d, 0x6b, 0x18, 0x34, 0xa0, 0xa2, 0x34, 0x6a, 0x62, 0xd3, 0xe2, 0x66, 0xb7, 0x3a, 0x29, 0x73, 0x25, 0xeb, 0xcf, 0xcc, 0x9a, 0x33, 0xe0, 0x7c, 0x4d, 0x3e, 0x27, 0x79, 0xd3, 0x64, 0x7e, 0x8d, 0x51, 0xac, 0x4e, 0x55, 0x44, 0x7d, 0xff, 0x5a, 0xc2, 0x39, 0x87, 0x86, 0x33, 0x8a, 0xc1, 0x55, 0x94, 0x42, 0xac, 0xcc, 0x8f, 0x52, 0x75, 0x9e, 0x4f, 0xe9, 0x9e, 0x37, 0x94, 0x8b }; /* k = 041b977a3a59f4faf5d2dfd47d3a1a58c39c615e0c366b3f81c775bd360a05721fdaea34078de53f22cc082bd48f341bc658c458424c3fbbc8f4c472818a37f79838db8ca8e687c */ static const uint8_t nist_186_2_ecdsa_testvector_222_out[] = { /* R - byte alignment */ 0x01, 0x2c, 0x92, 0x87, 0x46, 0xf5, 0x16, 0x9d, 0x2d, 0x3d, 0x4b, 0xc0, 0xad, 0x5c, 0x00, 0x15, 0xd1, 0x3e, 0xd3, 0x9e, 0xf0, 0xe1, 0xd5, 0xa4, 0x5d, 0x64, 0x60, 0xc7, 0xa0, 0x2f, 0xdb, 0xd0, 0x28, 0x97, 0x61, 0x62, 0x24, 0xfa, 0x94, 0x94, 0xd2, 0x2f, 0xfd, 0xde, 0x6b, 0x7a, 0xf6, 0x6a, 0xfe, 0xc2, 0x16, 0x65, 0x53, 0x89, 0x27, 0x54, 0x8c, 0x3f, 0x5a, 0x42, 0xc9, 0x13, 0x52, 0x5e, 0x7e, 0x95, 0x68, 0xbd, 0x10, 0xf2, 0x8a, 0x52, /* S - byte alignment */ 0x01, 0x9b, 0x1b, 0x02, 0xb2, 0x32, 0x02, 0x62, 0x1f, 0x1a, 0x9a, 0x5b, 0x10, 0x50, 0x50, 0x07, 0x6f, 0x9f, 0x97, 0x7b, 0x2b, 0xc9, 0x23, 0x94, 0xe9, 0x55, 0xa2, 0x98, 0x5b, 0x33, 0x6a, 0x96, 0xbc, 0x4f, 0xbf, 0xd7, 0xf0, 0xc4, 0xc7, 0x68, 0x64, 0xbf, 0x4e, 0x8c, 0x5a, 0x44, 0x7f, 0x30, 0x58, 0x69, 0x8e, 0xef, 0x6a, 0x27, 0xfd, 0xa1, 0x64, 0x23, 0xcb, 0xbe, 0x9f, 0x53, 0xe1, 0x35, 0x97, 0x67, 0x2c, 0x30, 0xf3, 0x97, 0xb5, 0x9b }; static const uint8_t nist_186_2_ecdsa_testvector_223_ptx[] = { /* Msg */ 0xdd, 0x4f, 0x69, 0xfb, 0x13, 0x11, 0x36, 0x99, 0x6b, 0xb2, 0x99, 0xe0, 0x82, 0xec, 0xb1, 0x88, 0xfe, 0x59, 0xff, 0x19, 0x17, 0xe6, 0x0f, 0x01, 0x57, 0x86, 0x5b, 0xe4, 0x9d, 0x23, 0x6c, 0x33, 0x68, 0xda, 0x42, 0x00, 0x52, 0x67, 0xf6, 0x11, 0xdb, 0xde, 0x9e, 0x33, 0x68, 0x9d, 0x71, 0xd0, 0x8c, 0x7e, 0x2c, 0xc4, 0x85, 0x51, 0xb4, 0x6d, 0x0a, 0x89, 0xfc, 0x01, 0x44, 0x35, 0x29, 0x25, 0x1a, 0x32, 0xf4, 0xbb, 0xb1, 0x9f, 0x50, 0xfb, 0x33, 0x92, 0x4d, 0xc5, 0xd0, 0x09, 0x3d, 0x35, 0x03, 0x24, 0x15, 0x79, 0x17, 0x91, 0x16, 0xdf, 0xe9, 0x47, 0xac, 0x32, 0xef, 0x77, 0x96, 0x47, 0x79, 0xbf, 0x47, 0xd3, 0x37, 0xa2, 0x8c, 0x7f, 0xfc, 0x35, 0x70, 0x3f, 0xc1, 0x1a, 0x5d, 0xdf, 0xed, 0xb2, 0x83, 0xdf, 0xd4, 0x8f, 0x7d, 0x80, 0x7d, 0x28, 0x32, 0x1f, 0xa8, 0xd1, 0xfa, 0xc2 }; static const uint8_t nist_186_2_ecdsa_testvector_223_private[] = { /* d - byte alignment */ 0x01, 0x15, 0xe7, 0x47, 0xfb, 0xc4, 0x5a, 0xd1, 0x10, 0x2b, 0x61, 0x1b, 0x57, 0x5e, 0xf3, 0x9c, 0x6c, 0x47, 0xd3, 0xb7, 0x70, 0x79, 0x60, 0x75, 0xfa, 0xc4, 0x4b, 0xa5, 0x7f, 0x94, 0x80, 0xed, 0xc6, 0xb6, 0xe0, 0x9d, 0xbe, 0xe1, 0x08, 0x57, 0x66, 0xb9, 0x7c, 0x8e, 0x08, 0x63, 0xff, 0xd7, 0x5e, 0x18, 0x1f, 0x13, 0x8d, 0x80, 0x0f, 0x58, 0x50, 0x77, 0xf9, 0xd7, 0x38, 0x23, 0xaa, 0x0d, 0x25, 0xd4, 0xed, 0xb6, 0x46, 0xda, 0x54, 0xeb }; static const uint8_t nist_186_2_ecdsa_testvector_223_public_x[] = { /* Qx - byte alignment */ 0x04, 0x94, 0xf3, 0x8a, 0xd1, 0x02, 0x0f, 0x0c, 0x66, 0xe1, 0xb7, 0xbe, 0x27, 0x6e, 0x67, 0x84, 0x56, 0xa8, 0x6f, 0x5a, 0x14, 0x43, 0x60, 0x8c, 0x34, 0x32, 0xa1, 0xe4, 0xef, 0xe1, 0xed, 0x9c, 0xc3, 0x27, 0x16, 0xbd, 0x65, 0xee, 0x78, 0x66, 0xa6, 0x38, 0x66, 0x7f, 0x70, 0x70, 0x30, 0x64, 0x28, 0x84, 0x9d, 0x5c, 0x66, 0xb5, 0x43, 0xa4, 0xe7, 0x59, 0x21, 0xc3, 0x63, 0x76, 0xef, 0x91, 0xbe, 0xdf, 0xee, 0x36, 0xf8, 0xfe, 0x5b, 0xb5 }; static const uint8_t nist_186_2_ecdsa_testvector_223_public_y[] = { /* Qy - byte alignment */ 0x03, 0xd1, 0xc4, 0xe1, 0xcc, 0xa6, 0x10, 0xb1, 0x8f, 0x1f, 0x8a, 0x8c, 0x80, 0x27, 0x09, 0x77, 0x29, 0x14, 0x71, 0xaf, 0x9d, 0xff, 0xe5, 0xa3, 0x92, 0xf6, 0x92, 0x97, 0x94, 0x08, 0xc7, 0x3e, 0xb5, 0x38, 0x11, 0x4f, 0x3e, 0x3e, 0xfe, 0x16, 0xeb, 0xac, 0x44, 0x08, 0x4c, 0xb4, 0x03, 0xe7, 0x0e, 0xf1, 0xc7, 0x9f, 0xb7, 0xa0, 0x45, 0xc0, 0x9f, 0x82, 0x01, 0x19, 0xf6, 0x2f, 0x7c, 0x6e, 0xf7, 0xd1, 0x9b, 0x29, 0xe5, 0xe2, 0xce, 0xd5 }; /* k = 28228918e93708cfe1c8c283f368696f93e618a85d544aa87e9e1181dcc2017a747058ed6db1deda0a51e4754d53a7823c894981fc691e8f5d9d27d88acaba16b2b973733f24f13 */ static const uint8_t nist_186_2_ecdsa_testvector_223_out[] = { /* R - byte alignment */ 0x00, 0x3e, 0xd5, 0xa1, 0x7a, 0x6b, 0x70, 0xa1, 0x01, 0xe9, 0xb9, 0x10, 0xbf, 0x1a, 0xc4, 0x2b, 0xc2, 0xce, 0x81, 0x75, 0xb5, 0x8a, 0x9b, 0x3f, 0xb7, 0x96, 0xe8, 0x09, 0xf8, 0x33, 0x14, 0x1d, 0x75, 0x07, 0x0d, 0xee, 0x73, 0xc7, 0x06, 0x1e, 0xa7, 0xee, 0x1a, 0x72, 0x7a, 0xbd, 0x76, 0x25, 0x96, 0x23, 0x36, 0x1a, 0xf4, 0xe0, 0xe7, 0xdb, 0x7c, 0x7f, 0x44, 0x09, 0x6b, 0x3a, 0x88, 0xe4, 0x21, 0x04, 0x0b, 0x48, 0xb9, 0xe7, 0x11, 0xc7, /* S - byte alignment */ 0x02, 0x70, 0x89, 0x2e, 0x50, 0x23, 0x71, 0x55, 0x46, 0x57, 0x27, 0xee, 0xf7, 0xb1, 0x5e, 0x97, 0x01, 0xa0, 0xf8, 0x6a, 0x1b, 0x79, 0xe9, 0x3e, 0x47, 0x4a, 0xf1, 0xb9, 0x57, 0xb9, 0xbf, 0xf5, 0x0f, 0x81, 0x8b, 0x6e, 0x71, 0x8e, 0x07, 0xc0, 0x1a, 0x69, 0x07, 0xc8, 0x99, 0x4c, 0x26, 0x9a, 0xc6, 0x23, 0x26, 0xd2, 0xa6, 0x40, 0x7b, 0xb3, 0x07, 0x9e, 0x19, 0x54, 0xd9, 0x7d, 0x2a, 0x79, 0xbb, 0x6e, 0x10, 0x6d, 0x3f, 0x2a, 0xdf, 0x9a }; static const uint8_t nist_186_2_ecdsa_testvector_224_ptx[] = { /* Msg */ 0xe1, 0xd2, 0x4f, 0x97, 0x74, 0xec, 0xca, 0x0d, 0x9e, 0x0d, 0xc9, 0x2c, 0x2d, 0xdf, 0x1f, 0x0c, 0x29, 0x53, 0xc5, 0x4f, 0xff, 0x38, 0x22, 0x54, 0xde, 0x0d, 0x89, 0xad, 0x62, 0x13, 0x04, 0xd4, 0x70, 0xa7, 0x50, 0x19, 0x61, 0xcf, 0x28, 0xdf, 0x62, 0x13, 0xc7, 0x08, 0x1a, 0x8e, 0xa8, 0xae, 0x8e, 0x44, 0x90, 0x14, 0x42, 0xb6, 0xce, 0xdc, 0xa1, 0xb4, 0xc1, 0x7a, 0x9f, 0x73, 0x9c, 0xe8, 0x9d, 0xdf, 0x66, 0x9b, 0x8d, 0x32, 0x45, 0xb7, 0x56, 0xc6, 0xfb, 0x7f, 0x7a, 0x27, 0xb1, 0x0f, 0xf6, 0x6d, 0xf4, 0x4d, 0x6a, 0xc9, 0xfd, 0x1d, 0x79, 0x5d, 0x35, 0xd4, 0x73, 0x51, 0xf8, 0xf0, 0x31, 0x23, 0x99, 0x06, 0x41, 0x3e, 0xa7, 0xfb, 0x44, 0xcf, 0x6f, 0x77, 0x93, 0xd4, 0xc2, 0x97, 0x29, 0x75, 0xf9, 0xe2, 0xbd, 0x98, 0x35, 0x7f, 0x2e, 0xb0, 0xec, 0xa5, 0x24, 0xd5, 0xa1, 0x52 }; static const uint8_t nist_186_2_ecdsa_testvector_224_private[] = { /* d - byte alignment */ 0x03, 0x1a, 0xa2, 0x47, 0xb6, 0x9d, 0x1b, 0x0f, 0xa8, 0xef, 0x8c, 0x2e, 0x47, 0xa7, 0xb6, 0xc6, 0xf2, 0x59, 0x26, 0xdc, 0xa4, 0x2e, 0xab, 0x73, 0x07, 0x85, 0x04, 0x6c, 0x12, 0x42, 0x57, 0x74, 0xa3, 0x60, 0x02, 0x73, 0xfe, 0x41, 0x08, 0x35, 0xbc, 0x0c, 0xdd, 0x20, 0xd1, 0x0c, 0x21, 0xc4, 0x0a, 0x07, 0xd8, 0x56, 0x7f, 0xb4, 0x98, 0x70, 0x93, 0x15, 0x47, 0xb2, 0x2e, 0x60, 0xa6, 0xea, 0xdb, 0x2e, 0x26, 0x24, 0x7b, 0x10, 0x82, 0x57 }; static const uint8_t nist_186_2_ecdsa_testvector_224_public_x[] = { /* Qx - byte alignment */ 0x00, 0x98, 0x10, 0xb1, 0xdf, 0x87, 0x95, 0xcf, 0x27, 0x93, 0x86, 0xfb, 0x65, 0xce, 0xe6, 0x9b, 0x89, 0xe0, 0xb6, 0xb3, 0x53, 0x97, 0x42, 0x04, 0xbf, 0xa1, 0xc7, 0xb0, 0xd8, 0xd4, 0x22, 0x8c, 0x7e, 0x9a, 0xbc, 0x46, 0xdc, 0xbb, 0x8c, 0xff, 0xc6, 0x24, 0x41, 0x5f, 0x57, 0xbf, 0xad, 0x60, 0xe1, 0x7c, 0x8b, 0x36, 0xb1, 0x13, 0xb1, 0xb9, 0xbb, 0x03, 0x21, 0xe0, 0xd0, 0x77, 0xdf, 0x7a, 0x1c, 0xdf, 0x82, 0xe1, 0x09, 0xbd, 0xae, 0x7f }; static const uint8_t nist_186_2_ecdsa_testvector_224_public_y[] = { /* Qy - byte alignment */ 0x04, 0x16, 0xbe, 0x11, 0x79, 0x44, 0x68, 0xa2, 0x7a, 0xb6, 0xf4, 0x4a, 0x54, 0xfb, 0x27, 0x38, 0x15, 0x08, 0x4d, 0xb4, 0xf0, 0xb7, 0x93, 0xb5, 0x73, 0x1e, 0xad, 0x8e, 0x9d, 0xff, 0xe2, 0xec, 0x6d, 0x19, 0x9d, 0xe1, 0x06, 0xeb, 0xca, 0xba, 0xed, 0x14, 0x7e, 0xd1, 0x79, 0x3b, 0xde, 0xb0, 0xc0, 0xbf, 0x1f, 0x40, 0x81, 0xe5, 0xe8, 0xc7, 0x2b, 0xd3, 0x29, 0x15, 0xd0, 0xb0, 0xb4, 0xb1, 0x8e, 0x16, 0xaa, 0xb4, 0x51, 0x32, 0xaf, 0x6f }; /* k = 16804100a6aa43fac2c18325b07acf9782fa957ead28e30bfb991f5c1526f1b8c6a82c9e5ffc4fdf7981fa12f961bdac94f9f6a441760cd9cc391ac43956ce32719a96a11f4e792 */ static const uint8_t nist_186_2_ecdsa_testvector_224_out[] = { /* R - byte alignment */ 0x00, 0xd3, 0x01, 0xbe, 0x45, 0x90, 0xf7, 0x54, 0xbb, 0x46, 0x82, 0x3e, 0x7b, 0x9f, 0x67, 0x71, 0x18, 0x6f, 0x77, 0xb6, 0xf4, 0xa4, 0x7f, 0x6b, 0x4b, 0xd7, 0x74, 0xc4, 0xea, 0xcd, 0x2d, 0x9b, 0x3d, 0x3c, 0x5f, 0x9e, 0xa3, 0xc9, 0x41, 0x66, 0x6f, 0x94, 0x62, 0xc7, 0x52, 0x49, 0xbc, 0x50, 0xb4, 0x24, 0x93, 0x70, 0xf6, 0xbb, 0xc0, 0x9f, 0x98, 0x35, 0xdb, 0xbc, 0xe1, 0x0f, 0x1a, 0x00, 0x10, 0x80, 0xc3, 0x31, 0x1d, 0x3d, 0x08, 0xd9, /* S - byte alignment */ 0x01, 0x67, 0x07, 0x61, 0x30, 0x2b, 0x30, 0xc3, 0xba, 0x1d, 0xe4, 0x5b, 0x44, 0x2a, 0xbb, 0xe6, 0x36, 0xeb, 0x8c, 0x47, 0xf6, 0x6f, 0x77, 0x83, 0x36, 0x32, 0x80, 0x11, 0x3d, 0xa8, 0xdc, 0x47, 0x09, 0x74, 0x15, 0x8f, 0xcd, 0x0d, 0x27, 0xb7, 0x09, 0xce, 0xa7, 0xae, 0x31, 0xa1, 0x27, 0x63, 0xf4, 0x5d, 0xde, 0x13, 0x47, 0xb6, 0x63, 0xc8, 0x80, 0x55, 0xa0, 0xaf, 0xf0, 0xbd, 0xc9, 0xc3, 0xfd, 0x73, 0x0c, 0x3b, 0xbb, 0xe9, 0x84, 0xcb }; static const uint8_t nist_186_2_ecdsa_testvector_225_ptx[] = { /* Msg */ 0xa9, 0xe2, 0xa7, 0xba, 0x51, 0x4d, 0x81, 0x18, 0xab, 0x1d, 0xb6, 0xcc, 0xd7, 0x06, 0xf9, 0x4d, 0xbb, 0x61, 0x0e, 0xda, 0xee, 0x7f, 0xd4, 0x6b, 0xd4, 0x3d, 0x82, 0xe7, 0x0b, 0xd8, 0x31, 0x97, 0x06, 0x03, 0x9b, 0xdb, 0xf8, 0x37, 0x22, 0x1b, 0xf4, 0x4b, 0x14, 0x01, 0x52, 0x44, 0x2d, 0xe5, 0x54, 0x6e, 0x5d, 0x89, 0x0a, 0xac, 0xcc, 0x07, 0x72, 0x0c, 0x1c, 0x07, 0xe4, 0x9e, 0xee, 0x35, 0xad, 0x87, 0xa7, 0xf3, 0xfb, 0x51, 0x74, 0x4a, 0xf9, 0x85, 0x8b, 0x27, 0x3a, 0x7c, 0xb4, 0xc4, 0x5b, 0x72, 0x08, 0x64, 0xe4, 0xdc, 0xf9, 0x43, 0x70, 0xfb, 0x93, 0xcd, 0x0e, 0xb2, 0x02, 0x0e, 0xe6, 0x95, 0x53, 0x6a, 0x20, 0x42, 0x7f, 0x8e, 0x01, 0xf4, 0xa5, 0xa6, 0x57, 0x55, 0x97, 0xd0, 0x18, 0x94, 0x98, 0xd1, 0x46, 0xb8, 0x64, 0x08, 0x15, 0x34, 0x71, 0xa0, 0x50, 0xbb, 0x75, 0x09 }; static const uint8_t nist_186_2_ecdsa_testvector_225_private[] = { /* d - byte alignment */ 0x01, 0x62, 0x40, 0xcb, 0xf2, 0x1f, 0x7c, 0x2e, 0x8f, 0x74, 0xd1, 0xda, 0x2e, 0xc4, 0xb0, 0xa5, 0xec, 0xe0, 0x6d, 0x00, 0x23, 0x85, 0x2c, 0xf3, 0xae, 0x09, 0x49, 0xc6, 0xac, 0xb4, 0x4b, 0xc4, 0x88, 0x1d, 0x1a, 0x13, 0x66, 0x12, 0xfd, 0xf2, 0x7a, 0x26, 0xfe, 0x59, 0x4e, 0xee, 0xa7, 0x00, 0xe6, 0x31, 0x16, 0x4f, 0x21, 0x34, 0x30, 0xff, 0xab, 0x45, 0x61, 0x17, 0x91, 0xa6, 0x41, 0xd5, 0x69, 0x88, 0x18, 0x27, 0x2c, 0x8b, 0xb4, 0xff }; static const uint8_t nist_186_2_ecdsa_testvector_225_public_x[] = { /* Qx - byte alignment */ 0x01, 0x16, 0xce, 0xd6, 0xa8, 0x20, 0x56, 0xa3, 0x69, 0x27, 0x56, 0x81, 0x72, 0x10, 0x88, 0xef, 0x79, 0x4c, 0xff, 0xe7, 0x1b, 0x61, 0xd4, 0x0d, 0x54, 0x4e, 0xf7, 0x41, 0x5a, 0xfb, 0x8e, 0x97, 0xd2, 0xc9, 0x1e, 0xf0, 0x13, 0xc2, 0x07, 0xeb, 0x43, 0x45, 0xdb, 0xec, 0x26, 0x0c, 0xff, 0x31, 0x5f, 0x2e, 0x93, 0xfb, 0xe4, 0x92, 0x67, 0x18, 0x13, 0x9a, 0x6d, 0xf6, 0x5b, 0xa7, 0x07, 0xe4, 0xca, 0xa9, 0x23, 0x6a, 0xce, 0x08, 0x23, 0xa0 }; static const uint8_t nist_186_2_ecdsa_testvector_225_public_y[] = { /* Qy - byte alignment */ 0x00, 0x02, 0x29, 0xa0, 0xe0, 0x2c, 0xcf, 0x8c, 0x4d, 0x52, 0xce, 0xba, 0xff, 0x42, 0xa0, 0x0e, 0x13, 0x43, 0xb8, 0xdb, 0xfd, 0x79, 0x5d, 0xa4, 0x2e, 0x21, 0x3a, 0xf4, 0xdd, 0x24, 0x90, 0x49, 0x73, 0x36, 0x01, 0xad, 0xfb, 0x0b, 0x3e, 0x98, 0x23, 0xf0, 0xf0, 0x3f, 0xcc, 0xb2, 0x21, 0xd1, 0x8d, 0x31, 0x48, 0x94, 0xb8, 0xba, 0xf3, 0x80, 0x14, 0xa1, 0x2d, 0x0c, 0x8c, 0xd0, 0xaf, 0xf7, 0x57, 0x2c, 0x1c, 0x0b, 0x63, 0xbd, 0x6d, 0x55 }; /* k = 0d4e667480b9abef5c841ff725972b8f8543bdb689b28a0ab7c21105dee935dce3fde34bcefa7da3e44e9915ce1788b2ff421abbd36bd336c3f9e66c57b499e97ce93d5bc657472 */ static const uint8_t nist_186_2_ecdsa_testvector_225_out[] = { /* R - byte alignment */ 0x01, 0x70, 0x20, 0xca, 0x84, 0xab, 0x6e, 0x1d, 0xf5, 0xd8, 0x44, 0xb5, 0x5d, 0xac, 0xe5, 0x40, 0x88, 0xa2, 0x69, 0x5d, 0xa7, 0x60, 0x40, 0x87, 0x85, 0x55, 0xc9, 0xb2, 0xd1, 0x2d, 0x8c, 0x2c, 0x3d, 0x32, 0x0d, 0x7d, 0x8d, 0xd6, 0x22, 0x10, 0xde, 0x5d, 0x3a, 0xb7, 0x0b, 0x58, 0xbd, 0x86, 0xa9, 0x56, 0x59, 0x9c, 0x69, 0x92, 0xde, 0x0d, 0x16, 0xe6, 0xe9, 0x7c, 0x62, 0x76, 0xe4, 0xa1, 0xce, 0x77, 0x35, 0x9d, 0x35, 0x03, 0xb3, 0xba, /* S - byte alignment */ 0x02, 0xf7, 0x8c, 0x46, 0xc3, 0xe5, 0x84, 0xd6, 0x16, 0x9a, 0x85, 0x61, 0xf4, 0x88, 0xa3, 0xc0, 0xfd, 0x9f, 0xe8, 0x6d, 0xdd, 0x77, 0x49, 0x62, 0x6c, 0xb1, 0xea, 0x30, 0xfa, 0xe0, 0x9b, 0x3c, 0x18, 0x03, 0xf1, 0x4a, 0x80, 0xa7, 0xde, 0x23, 0xe9, 0xe3, 0xaa, 0x44, 0x7b, 0x5b, 0x20, 0x3a, 0x53, 0x01, 0xcf, 0x70, 0x37, 0x5e, 0xcf, 0x9d, 0xe3, 0x83, 0x8f, 0xd3, 0x8c, 0x75, 0xed, 0xd6, 0x64, 0x32, 0x53, 0xe6, 0x0d, 0x8a, 0xd7, 0xc1 }; optee_test-4.3.0/host/xtest/nist/186-3dsatestvectors.h000066400000000000000000040271241464074351400226410ustar00rootroot00000000000000/* * DSA Test data automatically generated from * from http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3dsatestvectors.zip * SigGen.txt */ /* [mod = L=1024, N=160, SHA-1] */ static const uint8_t ac_dsa_vect1_prime[] = { /* P */ 0xa8, 0xf9, 0xcd, 0x20, 0x1e, 0x5e, 0x35, 0xd8, 0x92, 0xf8, 0x5f, 0x80, 0xe4, 0xdb, 0x25, 0x99, 0xa5, 0x67, 0x6a, 0x3b, 0x1d, 0x4f, 0x19, 0x03, 0x30, 0xed, 0x32, 0x56, 0xb2, 0x6d, 0x0e, 0x80, 0xa0, 0xe4, 0x9a, 0x8f, 0xff, 0xaa, 0xad, 0x2a, 0x24, 0xf4, 0x72, 0xd2, 0x57, 0x32, 0x41, 0xd4, 0xd6, 0xd6, 0xc7, 0x48, 0x0c, 0x80, 0xb4, 0xc6, 0x7b, 0xb4, 0x47, 0x9c, 0x15, 0xad, 0xa7, 0xea, 0x84, 0x24, 0xd2, 0x50, 0x2f, 0xa0, 0x14, 0x72, 0xe7, 0x60, 0x24, 0x17, 0x13, 0xda, 0xb0, 0x25, 0xae, 0x1b, 0x02, 0xe1, 0x70, 0x3a, 0x14, 0x35, 0xf6, 0x2d, 0xdf, 0x4e, 0xe4, 0xc1, 0xb6, 0x64, 0x06, 0x6e, 0xb2, 0x2f, 0x2e, 0x3b, 0xf2, 0x8b, 0xb7, 0x0a, 0x2a, 0x76, 0xe4, 0xfd, 0x5e, 0xbe, 0x2d, 0x12, 0x29, 0x68, 0x1b, 0x5b, 0x06, 0x43, 0x9a, 0xc9, 0xc7, 0xe9, 0xd8, 0xbd, 0xe2, 0x83 }; static const uint8_t ac_dsa_vect1_sub_prime[] = { /* Q */ 0xf8, 0x5f, 0x0f, 0x83, 0xac, 0x4d, 0xf7, 0xea, 0x0c, 0xdf, 0x8f, 0x46, 0x9b, 0xfe, 0xea, 0xea, 0x14, 0x15, 0x64, 0x95 }; static const uint8_t ac_dsa_vect1_base[] = { /* G */ 0x2b, 0x31, 0x52, 0xff, 0x6c, 0x62, 0xf1, 0x46, 0x22, 0xb8, 0xf4, 0x8e, 0x59, 0xf8, 0xaf, 0x46, 0x88, 0x3b, 0x38, 0xe7, 0x9b, 0x8c, 0x74, 0xde, 0xea, 0xe9, 0xdf, 0x13, 0x1f, 0x8b, 0x85, 0x6e, 0x3a, 0xd6, 0xc8, 0x45, 0x5d, 0xab, 0x87, 0xcc, 0x0d, 0xa8, 0xac, 0x97, 0x34, 0x17, 0xce, 0x4f, 0x78, 0x78, 0x55, 0x7d, 0x6c, 0xdf, 0x40, 0xb3, 0x5b, 0x4a, 0x0c, 0xa3, 0xeb, 0x31, 0x0c, 0x6a, 0x95, 0xd6, 0x8c, 0xe2, 0x84, 0xad, 0x4e, 0x25, 0xea, 0x28, 0x59, 0x16, 0x11, 0xee, 0x08, 0xb8, 0x44, 0x4b, 0xd6, 0x4b, 0x25, 0xf3, 0xf7, 0xc5, 0x72, 0x41, 0x0d, 0xdf, 0xb3, 0x9c, 0xc7, 0x28, 0xb9, 0xc9, 0x36, 0xf8, 0x5f, 0x41, 0x91, 0x29, 0x86, 0x99, 0x29, 0xcd, 0xb9, 0x09, 0xa6, 0xa3, 0xa9, 0x9b, 0xbe, 0x08, 0x92, 0x16, 0x36, 0x81, 0x71, 0xbd, 0x0b, 0xa8, 0x1d, 0xe4, 0xfe, 0x33 }; static const uint8_t ac_dsa_vect1_ptx[] = { /* Msg */ 0x3b, 0x46, 0x73, 0x6d, 0x55, 0x9b, 0xd4, 0xe0, 0xc2, 0xc1, 0xb2, 0x55, 0x3a, 0x33, 0xad, 0x3c, 0x6c, 0xf2, 0x3c, 0xac, 0x99, 0x8d, 0x3d, 0x0c, 0x0e, 0x8f, 0xa4, 0xb1, 0x9b, 0xca, 0x06, 0xf2, 0xf3, 0x86, 0xdb, 0x2d, 0xcf, 0xf9, 0xdc, 0xa4, 0xf4, 0x0a, 0xd8, 0xf5, 0x61, 0xff, 0xc3, 0x08, 0xb4, 0x6c, 0x5f, 0x31, 0xa7, 0x73, 0x5b, 0x5f, 0xa7, 0xe0, 0xf9, 0xe6, 0xcb, 0x51, 0x2e, 0x63, 0xd7, 0xee, 0xa0, 0x55, 0x38, 0xd6, 0x6a, 0x75, 0xcd, 0x0d, 0x42, 0x34, 0xb5, 0xcc, 0xf6, 0xc1, 0x71, 0x5c, 0xca, 0xaf, 0x9c, 0xdc, 0x0a, 0x22, 0x28, 0x13, 0x5f, 0x71, 0x6e, 0xe9, 0xbd, 0xee, 0x7f, 0xc1, 0x3e, 0xc2, 0x7a, 0x03, 0xa6, 0xd1, 0x1c, 0x5c, 0x5b, 0x36, 0x85, 0xf5, 0x19, 0x00, 0xb1, 0x33, 0x71, 0x53, 0xbc, 0x6c, 0x4e, 0x8f, 0x52, 0x92, 0x0c, 0x33, 0xfa, 0x37, 0xf4, 0xe7 }; static const uint8_t ac_dsa_vect1_priv_val[] = { /* X */ 0xc5, 0x3e, 0xae, 0x6d, 0x45, 0x32, 0x31, 0x64, 0xc7, 0xd0, 0x7a, 0xf5, 0x71, 0x57, 0x03, 0x74, 0x4a, 0x63, 0xfc, 0x3a }; static const uint8_t ac_dsa_vect1_pub_val[] = { /* Y */ 0x31, 0x3f, 0xd9, 0xeb, 0xca, 0x91, 0x57, 0x4e, 0x1c, 0x2e, 0xeb, 0xe1, 0x51, 0x7c, 0x57, 0xe0, 0xc2, 0x1b, 0x02, 0x09, 0x87, 0x21, 0x40, 0xc5, 0x32, 0x87, 0x61, 0xbb, 0xb2, 0x45, 0x0b, 0x33, 0xf1, 0xb1, 0x8b, 0x40, 0x9c, 0xe9, 0xab, 0x7c, 0x4c, 0xd8, 0xfd, 0xa3, 0x39, 0x1e, 0x8e, 0x34, 0x86, 0x83, 0x57, 0xc1, 0x99, 0xe1, 0x6a, 0x6b, 0x2e, 0xba, 0x06, 0xd6, 0x74, 0x9d, 0xef, 0x79, 0x1d, 0x79, 0xe9, 0x5d, 0x3a, 0x4d, 0x09, 0xb2, 0x4c, 0x39, 0x2a, 0xd8, 0x9d, 0xbf, 0x10, 0x09, 0x95, 0xae, 0x19, 0xc0, 0x10, 0x62, 0x05, 0x6b, 0xb1, 0x4b, 0xce, 0x00, 0x5e, 0x87, 0x31, 0xef, 0xde, 0x17, 0x5f, 0x95, 0xb9, 0x75, 0x08, 0x9b, 0xdc, 0xda, 0xea, 0x56, 0x2b, 0x32, 0x78, 0x6d, 0x96, 0xf5, 0xa3, 0x1a, 0xed, 0xf7, 0x53, 0x64, 0x00, 0x8a, 0xd4, 0xff, 0xfe, 0xbb, 0x97, 0x0b }; /* K = 98cbcc4969d845e2461b5f66383dd503712bbcfa */ static const uint8_t ac_dsa_vect1_out[] = { /* R */ 0x50, 0xed, 0x0e, 0x81, 0x0e, 0x3f, 0x1c, 0x7c, 0xb6, 0xac, 0x62, 0x33, 0x20, 0x58, 0x44, 0x8b, 0xd8, 0xb2, 0x84, 0xc0, /* S */ 0xc6, 0xad, 0xed, 0x17, 0x21, 0x6b, 0x46, 0xb7, 0xe4, 0xb6, 0xf2, 0xa9, 0x7c, 0x1a, 0xd7, 0xcc, 0x3d, 0xa8, 0x3f, 0xde }; #define ac_dsa_vect2_prime ac_dsa_vect1_prime #define ac_dsa_vect2_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect2_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect2_ptx[] = { /* Msg */ 0xd2, 0xbc, 0xb5, 0x3b, 0x04, 0x4b, 0x3e, 0x2e, 0x4b, 0x61, 0xba, 0x2f, 0x91, 0xc0, 0x99, 0x5f, 0xb8, 0x3a, 0x6a, 0x97, 0x52, 0x5e, 0x66, 0x44, 0x1a, 0x3b, 0x48, 0x9d, 0x95, 0x94, 0x23, 0x8b, 0xc7, 0x40, 0xbd, 0xee, 0xa0, 0xf7, 0x18, 0xa7, 0x69, 0xc9, 0x77, 0xe2, 0xde, 0x00, 0x38, 0x77, 0xb5, 0xd7, 0xdc, 0x25, 0xb1, 0x82, 0xae, 0x53, 0x3d, 0xb3, 0x3e, 0x78, 0xf2, 0xc3, 0xff, 0x06, 0x45, 0xf2, 0x13, 0x7a, 0xbc, 0x13, 0x7d, 0x4e, 0x7d, 0x93, 0xcc, 0xf2, 0x4f, 0x60, 0xb1, 0x8a, 0x82, 0x0b, 0xc0, 0x7c, 0x7b, 0x4b, 0x5f, 0xe0, 0x8b, 0x4f, 0x9e, 0x7d, 0x21, 0xb2, 0x56, 0xc1, 0x8f, 0x3b, 0x9d, 0x49, 0xac, 0xc4, 0xf9, 0x3e, 0x2c, 0xe6, 0xf3, 0x75, 0x4c, 0x78, 0x07, 0x75, 0x7d, 0x2e, 0x11, 0x76, 0x04, 0x26, 0x12, 0xcb, 0x32, 0xfc, 0x3f, 0x4f, 0x70, 0x70, 0x0e, 0x25 }; static const uint8_t ac_dsa_vect2_priv_val[] = { /* X */ 0xe6, 0x51, 0x31, 0xd7, 0x34, 0x70, 0xf6, 0xad, 0x2e, 0x58, 0x78, 0xbd, 0xc9, 0xbe, 0xf5, 0x36, 0xfa, 0xf7, 0x88, 0x31 }; static const uint8_t ac_dsa_vect2_pub_val[] = { /* Y */ 0x29, 0xbd, 0xd7, 0x59, 0xaa, 0xa6, 0x2d, 0x4b, 0xf1, 0x6b, 0x48, 0x61, 0xc8, 0x1c, 0xf4, 0x2e, 0xac, 0x2e, 0x16, 0x37, 0xb9, 0xec, 0xba, 0x51, 0x2b, 0xdb, 0xc1, 0x3a, 0xc1, 0x2a, 0x80, 0xae, 0x8d, 0xe2, 0x52, 0x6b, 0x89, 0x9a, 0xe5, 0xe4, 0xa2, 0x31, 0xae, 0xf8, 0x84, 0x19, 0x7c, 0x94, 0x4c, 0x73, 0x26, 0x93, 0xa6, 0x34, 0xd7, 0x65, 0x9a, 0xbc, 0x69, 0x75, 0xa7, 0x73, 0xf8, 0xd3, 0xcd, 0x5a, 0x36, 0x1f, 0xe2, 0x49, 0x23, 0x86, 0xa3, 0xc0, 0x9a, 0xae, 0xf1, 0x2e, 0x4a, 0x7e, 0x73, 0xad, 0x7d, 0xfc, 0x36, 0x37, 0xf7, 0xb0, 0x93, 0xf2, 0xc4, 0x0d, 0x62, 0x23, 0xa1, 0x95, 0xc1, 0x36, 0xad, 0xf2, 0xea, 0x3f, 0xbf, 0x87, 0x04, 0xa6, 0x75, 0xaa, 0x78, 0x17, 0xaa, 0x7e, 0xc7, 0xf9, 0xad, 0xfb, 0x28, 0x54, 0xd4, 0xe0, 0x5c, 0x3c, 0xe7, 0xf7, 0x65, 0x60, 0x31, 0x3b }; /* K = 87256a64e98cf5be1034ecfa766f9d25d1ac7ceb */ static const uint8_t ac_dsa_vect2_out[] = { /* R */ 0xa2, 0x6c, 0x00, 0xb5, 0x75, 0x0a, 0x2d, 0x27, 0xfe, 0x74, 0x35, 0xb9, 0x34, 0x76, 0xb3, 0x54, 0x38, 0xb4, 0xd8, 0xab, /* S */ 0x61, 0xc9, 0xbf, 0xcb, 0x29, 0x38, 0x75, 0x5a, 0xfa, 0x7d, 0xad, 0x1d, 0x1e, 0x07, 0xc6, 0x28, 0x86, 0x17, 0xbf, 0x70 }; #define ac_dsa_vect3_prime ac_dsa_vect1_prime #define ac_dsa_vect3_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect3_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect3_ptx[] = { /* Msg */ 0xd5, 0x43, 0x1e, 0x6b, 0x16, 0xfd, 0xae, 0x31, 0x48, 0x17, 0x42, 0xbd, 0x39, 0x47, 0x58, 0xbe, 0xb8, 0xe2, 0x4f, 0x31, 0x94, 0x7e, 0x19, 0xb7, 0xea, 0x7b, 0x45, 0x85, 0x21, 0x88, 0x22, 0x70, 0xc1, 0xf4, 0x31, 0x92, 0xaa, 0x05, 0x0f, 0x44, 0x85, 0x14, 0x5a, 0xf8, 0xf3, 0xf9, 0xc5, 0x14, 0x2d, 0x68, 0xb8, 0x50, 0x18, 0xd2, 0xec, 0x9c, 0xb7, 0xa3, 0x7b, 0xa1, 0x2e, 0xd2, 0x3e, 0x73, 0xb9, 0x5f, 0xd6, 0x80, 0xfb, 0xa3, 0xc6, 0x12, 0x65, 0xe9, 0xf5, 0xa0, 0xa0, 0x27, 0xd7, 0x0f, 0xad, 0x0c, 0x8a, 0xa0, 0x8a, 0x3c, 0xbf, 0xbe, 0x99, 0x01, 0x8d, 0x00, 0x45, 0x38, 0x61, 0x73, 0xe5, 0xfa, 0xe2, 0x25, 0xfa, 0xeb, 0xe0, 0xce, 0xf5, 0xdd, 0x45, 0x91, 0x0f, 0x40, 0x0a, 0x86, 0xc2, 0xbe, 0x4e, 0x15, 0x25, 0x2a, 0x16, 0xde, 0x41, 0x20, 0xa2, 0x67, 0xbe, 0x2b, 0x59, 0x4d }; static const uint8_t ac_dsa_vect3_priv_val[] = { /* X */ 0x20, 0xbc, 0xab, 0xc6, 0xd9, 0x34, 0x7a, 0x6e, 0x79, 0xb8, 0xe4, 0x98, 0xc6, 0x0c, 0x44, 0xa1, 0x9c, 0x73, 0x25, 0x8c }; static const uint8_t ac_dsa_vect3_pub_val[] = { /* Y */ 0x23, 0xb4, 0xf4, 0x04, 0xaa, 0x3c, 0x57, 0x5e, 0x55, 0x0b, 0xb3, 0x20, 0xfd, 0xb1, 0xa0, 0x85, 0xcd, 0x39, 0x6a, 0x10, 0xe5, 0xeb, 0xc6, 0x77, 0x1d, 0xa6, 0x2f, 0x03, 0x7c, 0xab, 0x19, 0xea, 0xcd, 0x67, 0xd8, 0x22, 0x2b, 0x63, 0x44, 0x03, 0x8c, 0x4f, 0x7a, 0xf4, 0x5f, 0x5e, 0x62, 0xb5, 0x54, 0x80, 0xcb, 0xe2, 0x11, 0x11, 0x54, 0xca, 0x96, 0x97, 0xca, 0x76, 0xd8, 0x7b, 0x56, 0x94, 0x41, 0x38, 0x08, 0x4e, 0x74, 0xc6, 0xf9, 0x0a, 0x05, 0xcf, 0x43, 0x66, 0x0d, 0xff, 0x8b, 0x8b, 0x3f, 0xab, 0xfc, 0xab, 0x3f, 0x0e, 0x44, 0x16, 0x77, 0x5f, 0xdf, 0x40, 0x05, 0x58, 0x64, 0xbe, 0x10, 0x2b, 0x45, 0x87, 0x39, 0x2e, 0x77, 0x75, 0x2e, 0xd2, 0xae, 0xb1, 0x82, 0xee, 0x4f, 0x70, 0xbe, 0x4a, 0x29, 0x1d, 0xbe, 0x77, 0xb8, 0x4a, 0x44, 0xee, 0x34, 0x00, 0x79, 0x57, 0xb1, 0xe0 }; /* K = 7d9bcfc9225432de9860f605a38d389e291ca750 */ static const uint8_t ac_dsa_vect3_out[] = { /* R */ 0x3f, 0x0a, 0x4a, 0xd3, 0x2f, 0x08, 0x16, 0x82, 0x1b, 0x8a, 0xff, 0xb5, 0x18, 0xe9, 0xb5, 0x99, 0xf3, 0x5d, 0x57, 0xc2, /* S */ 0xea, 0x06, 0x63, 0x8f, 0x2b, 0x2f, 0xc9, 0xd1, 0xdf, 0xe9, 0x9c, 0x2a, 0x49, 0x28, 0x06, 0xb4, 0x97, 0xe2, 0xb0, 0xea }; #define ac_dsa_vect4_prime ac_dsa_vect1_prime #define ac_dsa_vect4_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect4_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect4_ptx[] = { /* Msg */ 0x85, 0x66, 0x2b, 0x69, 0x75, 0x50, 0xe4, 0x91, 0x5c, 0x29, 0xe3, 0x38, 0xb6, 0x24, 0xb9, 0x12, 0x84, 0x5d, 0x6d, 0x1a, 0x92, 0x0d, 0x9e, 0x4c, 0x16, 0x04, 0xdd, 0x47, 0xd6, 0x92, 0xbc, 0x7c, 0x0f, 0xfb, 0x95, 0xae, 0x61, 0x4e, 0x85, 0x2b, 0xeb, 0xaf, 0x15, 0x73, 0x75, 0x8a, 0xd0, 0x1c, 0x71, 0x3c, 0xac, 0x0b, 0x47, 0x6e, 0x2f, 0x12, 0x17, 0x45, 0xa3, 0xcf, 0xee, 0xff, 0xb2, 0x44, 0x1f, 0xf6, 0xab, 0xfb, 0x9b, 0xbe, 0xb9, 0x8a, 0xa6, 0x34, 0xca, 0x6f, 0xf5, 0x41, 0x94, 0x7d, 0xcc, 0x99, 0x27, 0x65, 0x9d, 0x44, 0xf9, 0x5c, 0x5f, 0xf9, 0x17, 0x0f, 0xdc, 0x3c, 0x86, 0x47, 0x3c, 0xb6, 0x01, 0xba, 0x31, 0xb4, 0x87, 0xfe, 0x59, 0x36, 0xba, 0xc5, 0xd9, 0xc6, 0x32, 0xcb, 0xcc, 0x3d, 0xb0, 0x62, 0x46, 0xba, 0x01, 0xc5, 0x5a, 0x03, 0x8d, 0x79, 0x7f, 0xe3, 0xf6, 0xc3 }; static const uint8_t ac_dsa_vect4_priv_val[] = { /* X */ 0x52, 0xd1, 0xfb, 0xe6, 0x87, 0xaa, 0x07, 0x02, 0xa5, 0x1a, 0x5b, 0xf9, 0x56, 0x6b, 0xd5, 0x1b, 0xd5, 0x69, 0x42, 0x4c }; static const uint8_t ac_dsa_vect4_pub_val[] = { /* Y */ 0x6b, 0xc3, 0x6c, 0xb3, 0xfa, 0x61, 0xce, 0xcc, 0x15, 0x7b, 0xe0, 0x86, 0x39, 0xa7, 0xca, 0x9e, 0x3d, 0xe0, 0x73, 0xb8, 0xa0, 0xff, 0x23, 0x57, 0x4c, 0xe5, 0xab, 0x0a, 0x86, 0x7d, 0xfd, 0x60, 0x66, 0x9a, 0x56, 0xe6, 0x0d, 0x1c, 0x98, 0x9b, 0x3a, 0xf8, 0xc8, 0xa4, 0x3f, 0x56, 0x95, 0xd5, 0x03, 0xe3, 0x09, 0x89, 0x63, 0x99, 0x0e, 0x12, 0xb6, 0x35, 0x66, 0x78, 0x41, 0x71, 0x05, 0x8e, 0xac, 0xe8, 0x5c, 0x72, 0x8c, 0xd4, 0xc0, 0x82, 0x24, 0xc7, 0xa6, 0xef, 0xea, 0x75, 0xdc, 0xa2, 0x0d, 0xf4, 0x61, 0x01, 0x3c, 0x75, 0xf4, 0x0a, 0xcb, 0xc2, 0x37, 0x99, 0xeb, 0xee, 0x7f, 0x33, 0x61, 0x33, 0x6d, 0xad, 0xc4, 0xa5, 0x6f, 0x30, 0x57, 0x08, 0x66, 0x7b, 0xfe, 0x60, 0x2b, 0x8e, 0xa7, 0x5a, 0x49, 0x1a, 0x5c, 0xf0, 0xc0, 0x6e, 0xbd, 0x6f, 0xdc, 0x71, 0x61, 0xe1, 0x04, 0x97 }; /* K = 960c211891c090d05454646ebac1bfe1f381e82b */ static const uint8_t ac_dsa_vect4_out[] = { /* R */ 0x3b, 0xc2, 0x9d, 0xee, 0x96, 0x95, 0x70, 0x50, 0xba, 0x43, 0x8d, 0x1b, 0x3e, 0x17, 0xb0, 0x2c, 0x17, 0x25, 0xd2, 0x29, /* S */ 0x0a, 0xf8, 0x79, 0xcf, 0x84, 0x6c, 0x43, 0x4e, 0x08, 0xfb, 0x6c, 0x63, 0x78, 0x2f, 0x4d, 0x03, 0xe0, 0xd8, 0x88, 0x65 }; #define ac_dsa_vect5_prime ac_dsa_vect1_prime #define ac_dsa_vect5_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect5_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect5_ptx[] = { /* Msg */ 0x87, 0xb6, 0xe7, 0x5b, 0x9f, 0x8e, 0x99, 0xc4, 0xdd, 0x62, 0xad, 0xb6, 0x93, 0xdd, 0x58, 0x90, 0xed, 0xff, 0x1b, 0xd0, 0x02, 0x8f, 0x4e, 0xf8, 0x49, 0xdf, 0x0f, 0x1d, 0x2c, 0xe6, 0xb1, 0x81, 0xfc, 0x3a, 0x55, 0xae, 0xa6, 0xd0, 0xa1, 0xf0, 0xae, 0xca, 0xb8, 0xed, 0x9e, 0x24, 0x8a, 0x00, 0xe9, 0x6b, 0xe7, 0x94, 0xa7, 0xcf, 0xba, 0x12, 0x46, 0xef, 0xb7, 0x10, 0xef, 0x4b, 0x37, 0x47, 0x1c, 0xef, 0x0a, 0x1b, 0xcf, 0x55, 0xce, 0xbc, 0x8d, 0x5a, 0xd0, 0x71, 0x61, 0x2b, 0xd2, 0x37, 0xef, 0xed, 0xd5, 0x10, 0x23, 0x62, 0xdb, 0x07, 0xa1, 0xe2, 0xc7, 0xa6, 0xf1, 0x5e, 0x09, 0xfe, 0x64, 0xba, 0x42, 0xb6, 0x0a, 0x26, 0x28, 0xd8, 0x69, 0xae, 0x05, 0xef, 0x61, 0x1f, 0xe3, 0x8d, 0x9c, 0xe1, 0x5e, 0xee, 0xc9, 0xbb, 0x3d, 0xec, 0xc8, 0xdc, 0x17, 0x80, 0x9f, 0x3b, 0x6e, 0x95 }; static const uint8_t ac_dsa_vect5_priv_val[] = { /* X */ 0xc8, 0x6a, 0x54, 0xec, 0x5c, 0x4e, 0xc6, 0x3d, 0x73, 0x32, 0xcf, 0x43, 0xdd, 0xb0, 0x82, 0xa3, 0x4e, 0xd6, 0xd5, 0xf5 }; static const uint8_t ac_dsa_vect5_pub_val[] = { /* Y */ 0x01, 0x4a, 0xc7, 0x46, 0xd3, 0x60, 0x5e, 0xfc, 0xb8, 0xa2, 0xc7, 0xda, 0xe1, 0xf5, 0x46, 0x82, 0xa2, 0x62, 0xe2, 0x76, 0x62, 0xb2, 0x52, 0xc0, 0x94, 0x78, 0xce, 0x87, 0xd0, 0xaa, 0xa5, 0x22, 0xd7, 0xc2, 0x00, 0x04, 0x34, 0x06, 0x01, 0x6c, 0x0c, 0x42, 0x89, 0x6d, 0x21, 0x75, 0x0b, 0x15, 0xdb, 0xd5, 0x7f, 0x97, 0x07, 0xec, 0x37, 0xdc, 0xea, 0x56, 0x51, 0x78, 0x1b, 0x67, 0xad, 0x8d, 0x01, 0xf5, 0x09, 0x9f, 0xe7, 0x58, 0x4b, 0x35, 0x3b, 0x64, 0x1b, 0xb1, 0x59, 0xcc, 0x71, 0x7d, 0x8c, 0xeb, 0x18, 0xb6, 0x67, 0x05, 0xe6, 0x56, 0xf3, 0x36, 0xf1, 0x21, 0x4b, 0x34, 0xf0, 0x35, 0x7e, 0x57, 0x7a, 0xb8, 0x36, 0x41, 0x96, 0x9e, 0x31, 0x1b, 0xf4, 0x0b, 0xdc, 0xb3, 0xff, 0xd5, 0xe0, 0xbb, 0x59, 0x41, 0x9f, 0x22, 0x95, 0x08, 0xd2, 0xf4, 0x32, 0xcc, 0x28, 0x59, 0xff, 0x75 }; /* K = 6c445cee68042553fbe63be61be4ddb99d8134af */ static const uint8_t ac_dsa_vect5_out[] = { /* R */ 0x63, 0x7e, 0x07, 0xa5, 0x77, 0x0f, 0x3d, 0xc6, 0x5e, 0x45, 0x06, 0xc6, 0x8c, 0x77, 0x0e, 0x5e, 0xf6, 0xb8, 0xce, 0xd3, /* S */ 0x7d, 0xfc, 0x6f, 0x83, 0xe2, 0x4f, 0x09, 0x74, 0x5e, 0x01, 0xd3, 0xf7, 0xae, 0x0e, 0xd1, 0x47, 0x4e, 0x81, 0x1d, 0x47 }; #define ac_dsa_vect6_prime ac_dsa_vect1_prime #define ac_dsa_vect6_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect6_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect6_ptx[] = { /* Msg */ 0x22, 0x59, 0xee, 0xad, 0x2d, 0x6b, 0xbc, 0x76, 0xd4, 0x92, 0x13, 0xea, 0x0d, 0xc8, 0xb7, 0x35, 0x0a, 0x97, 0x69, 0x9f, 0x22, 0x34, 0x10, 0x44, 0xc3, 0x94, 0x07, 0x82, 0x36, 0x4a, 0xc9, 0xea, 0x68, 0x31, 0x79, 0xa4, 0x38, 0xa5, 0xea, 0x45, 0x99, 0x8d, 0xf9, 0x7c, 0x29, 0x72, 0xda, 0xe0, 0x38, 0x51, 0xf5, 0xbe, 0x23, 0xfa, 0x9f, 0x04, 0x18, 0x2e, 0x79, 0xdd, 0xb2, 0xb5, 0x6d, 0xc8, 0x65, 0x23, 0x93, 0xec, 0xb2, 0x7f, 0x3f, 0x3b, 0x7c, 0x8a, 0x8d, 0x76, 0x1a, 0x86, 0xb3, 0xb8, 0xf4, 0xd4, 0x1a, 0x07, 0xb4, 0xbe, 0x7d, 0x02, 0xfd, 0xde, 0xfc, 0x42, 0xb9, 0x28, 0x12, 0x4a, 0x5a, 0x45, 0xb9, 0xf4, 0x60, 0x90, 0x42, 0x20, 0x9b, 0x3a, 0x7f, 0x58, 0x5b, 0xd5, 0x14, 0xcc, 0x39, 0xc0, 0x0e, 0xff, 0xcc, 0x42, 0xc7, 0xfe, 0x70, 0xfa, 0x83, 0xed, 0xf8, 0xa3, 0x2b, 0xf4 }; static const uint8_t ac_dsa_vect6_priv_val[] = { /* X */ 0xae, 0xe6, 0xf2, 0x13, 0xb9, 0x90, 0x3c, 0x80, 0x69, 0x38, 0x7e, 0x64, 0x72, 0x9a, 0x08, 0x99, 0x9e, 0x5b, 0xaf, 0x65 }; static const uint8_t ac_dsa_vect6_pub_val[] = { /* Y */ 0x0f, 0xe7, 0x40, 0x45, 0xd7, 0xb0, 0xd4, 0x72, 0x41, 0x12, 0x02, 0x83, 0x1d, 0x49, 0x32, 0x39, 0x6f, 0x24, 0x2a, 0x97, 0x65, 0xe9, 0x2b, 0xe3, 0x87, 0xfd, 0x81, 0xbb, 0xe3, 0x8d, 0x84, 0x50, 0x54, 0x52, 0x8b, 0x34, 0x8c, 0x03, 0x98, 0x41, 0x79, 0xb8, 0xe5, 0x05, 0x67, 0x4c, 0xb7, 0x9d, 0x88, 0xcc, 0x0d, 0x8d, 0x3e, 0x8d, 0x73, 0x92, 0xf9, 0xaa, 0x77, 0x3b, 0x29, 0xc2, 0x9e, 0x54, 0xa9, 0xe3, 0x26, 0x40, 0x60, 0x75, 0xd7, 0x55, 0xc2, 0x91, 0xfc, 0xed, 0xbc, 0xc5, 0x77, 0x93, 0x4c, 0x82, 0x4a, 0xf9, 0x88, 0x25, 0x0f, 0x64, 0xed, 0x56, 0x85, 0xfc, 0xe7, 0x26, 0xcf, 0xf6, 0x5e, 0x92, 0xd7, 0x08, 0xae, 0x11, 0xcb, 0xfa, 0xa9, 0x58, 0xab, 0x8d, 0x8b, 0x15, 0x34, 0x0a, 0x29, 0xa1, 0x37, 0xb5, 0xb4, 0x35, 0x7f, 0x7e, 0xd1, 0xc7, 0xa5, 0x19, 0x0c, 0xbf, 0x98, 0xa4 }; /* K = e1704bae025942e2e63c6d76bab88da79640073a */ static const uint8_t ac_dsa_vect6_out[] = { /* R */ 0x83, 0x36, 0x6b, 0xa3, 0xfe, 0xd9, 0x3d, 0xfb, 0x38, 0xd5, 0x41, 0x20, 0x3e, 0xcb, 0xf8, 0x1c, 0x36, 0x39, 0x98, 0xe2, /* S */ 0x1f, 0xe2, 0x99, 0xc3, 0x6a, 0x13, 0x32, 0xf2, 0x3b, 0xf2, 0xe1, 0x0a, 0x6c, 0x6a, 0x4e, 0x0d, 0x3c, 0xdd, 0x2b, 0xf4 }; #define ac_dsa_vect7_prime ac_dsa_vect1_prime #define ac_dsa_vect7_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect7_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect7_ptx[] = { /* Msg */ 0x21, 0x9e, 0x8d, 0xf5, 0xbf, 0x88, 0x15, 0x90, 0x43, 0x0e, 0xce, 0x60, 0x82, 0x50, 0xf7, 0x67, 0x0d, 0xc5, 0x65, 0x37, 0x24, 0x93, 0x02, 0x42, 0x9e, 0x28, 0xec, 0xfe, 0xb9, 0xce, 0xaa, 0xa5, 0x49, 0x10, 0xa6, 0x94, 0x90, 0xf7, 0x65, 0xf3, 0xdf, 0x82, 0xe8, 0xb0, 0x1c, 0xd7, 0xd7, 0x6e, 0x56, 0x1d, 0x0f, 0x6c, 0xe2, 0x26, 0xef, 0x3c, 0xf7, 0x52, 0xca, 0xda, 0x6f, 0xeb, 0xdc, 0x5b, 0xf0, 0x0d, 0x67, 0x94, 0x7f, 0x92, 0xd4, 0x20, 0x51, 0x6b, 0x9e, 0x37, 0xc9, 0x6c, 0x8f, 0x1f, 0x2d, 0xa0, 0xb0, 0x75, 0x09, 0x7c, 0x3b, 0xda, 0x75, 0x8a, 0x8d, 0x91, 0xbd, 0x2e, 0xbe, 0x9c, 0x75, 0xcf, 0x14, 0x7f, 0x25, 0x4c, 0x25, 0x69, 0x63, 0xb3, 0x3b, 0x67, 0xd0, 0x2b, 0x6a, 0xa0, 0x9e, 0x7d, 0x74, 0x65, 0xd0, 0x38, 0xe5, 0x01, 0x95, 0xec, 0xe4, 0x18, 0x9b, 0x41, 0xe7, 0x68 }; static const uint8_t ac_dsa_vect7_priv_val[] = { /* X */ 0x69, 0x9f, 0x1c, 0x07, 0xaa, 0x45, 0x8c, 0x67, 0x86, 0xe7, 0x70, 0xb4, 0x01, 0x97, 0x23, 0x5f, 0xe4, 0x9c, 0xf2, 0x1a }; static const uint8_t ac_dsa_vect7_pub_val[] = { /* Y */ 0x3a, 0x41, 0xb0, 0x67, 0x8f, 0xf3, 0xc4, 0xdd, 0xe2, 0x0f, 0xa3, 0x97, 0x72, 0xba, 0xc3, 0x1a, 0x2f, 0x18, 0xba, 0xe4, 0xbe, 0xde, 0xc9, 0xe1, 0x2e, 0xe8, 0xe0, 0x2e, 0x30, 0xe5, 0x56, 0xb1, 0xa1, 0x36, 0x01, 0x3b, 0xef, 0x96, 0xb0, 0xd3, 0x0b, 0x56, 0x82, 0x33, 0xdc, 0xec, 0xc7, 0x1e, 0x48, 0x5e, 0xd7, 0x5c, 0x92, 0x2a, 0xfb, 0x4d, 0x06, 0x54, 0xe7, 0x09, 0xbe, 0xe8, 0x49, 0x93, 0x79, 0x21, 0x30, 0x22, 0x0e, 0x30, 0x05, 0xfd, 0xb0, 0x6e, 0xbd, 0xfc, 0x0e, 0x2d, 0xf1, 0x63, 0xb5, 0xec, 0x42, 0x4e, 0x83, 0x64, 0x65, 0xac, 0xd6, 0xd9, 0x2e, 0x24, 0x3c, 0x86, 0xf2, 0xb9, 0x4b, 0x26, 0xb8, 0xd7, 0x3b, 0xd9, 0xcf, 0x72, 0x2c, 0x75, 0x7e, 0x0b, 0x80, 0xb0, 0xaf, 0x16, 0xf1, 0x85, 0xde, 0x70, 0xe8, 0xca, 0x85, 0x0b, 0x14, 0x02, 0xd1, 0x26, 0xea, 0x60, 0xf3, 0x09 }; /* K = 5bbb795bfa5fa72191fed3434a08741410367491 */ static const uint8_t ac_dsa_vect7_out[] = { /* R */ 0x57, 0x97, 0x61, 0x03, 0x9a, 0xe0, 0xdd, 0xb8, 0x11, 0x06, 0xbf, 0x49, 0x68, 0xe3, 0x20, 0x08, 0x3b, 0xbc, 0xb9, 0x47, /* S */ 0x50, 0x3e, 0xa1, 0x5d, 0xba, 0xc9, 0xde, 0xde, 0xba, 0x91, 0x7f, 0xa8, 0xe9, 0xf3, 0x86, 0xb9, 0x3a, 0xa3, 0x03, 0x53 }; #define ac_dsa_vect8_prime ac_dsa_vect1_prime #define ac_dsa_vect8_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect8_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect8_ptx[] = { /* Msg */ 0x2d, 0xa7, 0x9d, 0x06, 0x78, 0x85, 0xeb, 0x3c, 0xcf, 0x5e, 0x29, 0x3a, 0xe3, 0xb1, 0xd8, 0x22, 0x53, 0x22, 0x20, 0x3a, 0xbb, 0x5a, 0xdf, 0xde, 0x3b, 0x0f, 0x53, 0xbb, 0xe2, 0x4c, 0x4f, 0xe0, 0x01, 0x54, 0x1e, 0x11, 0x83, 0xd8, 0x70, 0xa9, 0x97, 0xf1, 0xf9, 0x46, 0x01, 0x00, 0xb5, 0xd7, 0x11, 0x92, 0x31, 0x80, 0x15, 0x43, 0x45, 0x28, 0x7a, 0x02, 0x14, 0xcf, 0x1c, 0xac, 0x37, 0xb7, 0xa4, 0x7d, 0xfb, 0xb2, 0xa0, 0xe8, 0xce, 0x49, 0x16, 0xf9, 0x4e, 0xbd, 0x6f, 0xa5, 0x4e, 0x31, 0x5b, 0x7a, 0x8e, 0xb5, 0xb6, 0x3c, 0xd9, 0x54, 0xc5, 0xba, 0x05, 0xc1, 0xbf, 0x7e, 0x33, 0xa4, 0xe8, 0xa1, 0x51, 0xf3, 0x2d, 0x28, 0x77, 0xb0, 0x17, 0x29, 0xc1, 0xad, 0x0e, 0x7c, 0x01, 0xbb, 0x8a, 0xe7, 0x23, 0xc9, 0x95, 0x18, 0x38, 0x03, 0xe4, 0x56, 0x36, 0x52, 0x0e, 0xa3, 0x8c, 0xa1 }; static const uint8_t ac_dsa_vect8_priv_val[] = { /* X */ 0xd6, 0xe0, 0x8c, 0x20, 0xc8, 0x29, 0x49, 0xdd, 0xba, 0x93, 0xea, 0x81, 0xeb, 0x2f, 0xea, 0x8c, 0x59, 0x58, 0x94, 0xdc }; static const uint8_t ac_dsa_vect8_pub_val[] = { /* Y */ 0x56, 0xf7, 0x27, 0x22, 0x10, 0xf3, 0x16, 0xc5, 0x1a, 0xf8, 0xbf, 0xc4, 0x5a, 0x42, 0x1f, 0xd4, 0xe9, 0xb1, 0x04, 0x38, 0x53, 0x27, 0x1b, 0x7e, 0x79, 0xf4, 0x09, 0x36, 0xf0, 0xad, 0xcf, 0x26, 0x2a, 0x86, 0x09, 0x7a, 0xa8, 0x6e, 0x19, 0xe6, 0xcb, 0x53, 0x07, 0x68, 0x5d, 0x86, 0x3d, 0xba, 0x76, 0x13, 0x42, 0xdb, 0x6c, 0x97, 0x3b, 0x38, 0x49, 0xb1, 0xe0, 0x60, 0xac, 0xa9, 0x26, 0xf4, 0x1f, 0xe0, 0x73, 0x23, 0x60, 0x10, 0x62, 0x51, 0x5a, 0xe8, 0x5f, 0x31, 0x72, 0xb8, 0xf3, 0x48, 0x99, 0xc6, 0x21, 0xd5, 0x9f, 0xa2, 0x1f, 0x73, 0xd5, 0xae, 0x97, 0xa3, 0xde, 0xb5, 0xe8, 0x40, 0xb2, 0x5a, 0x18, 0xfd, 0x58, 0x08, 0x62, 0xfd, 0x7b, 0x1c, 0xf4, 0x16, 0xc7, 0xae, 0x9f, 0xc5, 0x84, 0x2a, 0x01, 0x97, 0xfd, 0xb0, 0xc5, 0x17, 0x3f, 0xf4, 0xa4, 0xf1, 0x02, 0xa8, 0xcf, 0x89 }; /* K = 6d72c30d4430959800740f2770651095d0c181c2 */ static const uint8_t ac_dsa_vect8_out[] = { /* R */ 0x5d, 0xd9, 0x0d, 0x69, 0xad, 0xd6, 0x7a, 0x5f, 0xae, 0x13, 0x8e, 0xec, 0x1a, 0xaf, 0xf0, 0x22, 0x9a, 0xa4, 0xaf, 0xc4, /* S */ 0x47, 0xf3, 0x9c, 0x4d, 0xb2, 0x38, 0x7f, 0x10, 0x76, 0x2f, 0x45, 0xb8, 0x0d, 0xfd, 0x02, 0x79, 0x06, 0xd7, 0xef, 0x04 }; #define ac_dsa_vect9_prime ac_dsa_vect1_prime #define ac_dsa_vect9_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect9_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect9_ptx[] = { /* Msg */ 0xba, 0x30, 0xd8, 0x5b, 0xe3, 0x57, 0xe7, 0xfb, 0x29, 0xf8, 0xa0, 0x7e, 0x1f, 0x12, 0x7b, 0xaa, 0xa2, 0x4b, 0x2e, 0xe0, 0x27, 0xf6, 0x4c, 0xb5, 0xef, 0xee, 0xc6, 0xaa, 0xea, 0xbc, 0xc7, 0x34, 0x5c, 0x5d, 0x55, 0x6e, 0xbf, 0x4b, 0xdc, 0x7a, 0x61, 0xc7, 0x7c, 0x7b, 0x7e, 0xa4, 0x3c, 0x73, 0xba, 0xbc, 0x18, 0xf7, 0xb4, 0x80, 0x77, 0x22, 0xda, 0x23, 0x9e, 0x45, 0xdd, 0xf2, 0x49, 0x84, 0x9c, 0xbb, 0xfe, 0x35, 0x07, 0x11, 0x2e, 0xbf, 0x87, 0xd7, 0xef, 0x56, 0x0c, 0x2e, 0x7d, 0x39, 0x1e, 0xd8, 0x42, 0x4f, 0x87, 0x10, 0xce, 0xa4, 0x16, 0x85, 0x14, 0x3e, 0x30, 0x06, 0xf8, 0x1b, 0x68, 0xfb, 0xb4, 0xd5, 0xf9, 0x64, 0x4c, 0x7c, 0xd1, 0x0f, 0x70, 0x92, 0xef, 0x24, 0x39, 0xb8, 0xd1, 0x8c, 0x0d, 0xf6, 0x55, 0xe0, 0x02, 0x89, 0x37, 0x2a, 0x41, 0x66, 0x38, 0x5d, 0x64, 0x0c }; static const uint8_t ac_dsa_vect9_priv_val[] = { /* X */ 0x50, 0x01, 0x84, 0x82, 0x86, 0x4c, 0x18, 0x64, 0xe9, 0xdb, 0x1f, 0x04, 0xbd, 0xe8, 0xdb, 0xfd, 0x38, 0x75, 0xc7, 0x6d }; static const uint8_t ac_dsa_vect9_pub_val[] = { /* Y */ 0x09, 0x42, 0xa5, 0xb7, 0xa7, 0x2a, 0xb1, 0x16, 0xea, 0xd2, 0x93, 0x08, 0xcf, 0x65, 0x8d, 0xfe, 0x3d, 0x55, 0xd5, 0xd6, 0x1a, 0xfe, 0xd9, 0xe3, 0x83, 0x6e, 0x64, 0x23, 0x7f, 0x9d, 0x68, 0x84, 0xfd, 0xd8, 0x27, 0xd2, 0xd5, 0x89, 0x0c, 0x9a, 0x41, 0xae, 0x88, 0xe7, 0xa6, 0x9f, 0xc9, 0xf3, 0x45, 0xad, 0xe9, 0xc4, 0x80, 0xc6, 0xf0, 0x8c, 0xff, 0x06, 0x7c, 0x18, 0x32, 0x14, 0xc2, 0x27, 0x23, 0x6c, 0xed, 0xb6, 0xdd, 0x12, 0x83, 0xca, 0x2a, 0x60, 0x25, 0x74, 0xe8, 0x32, 0x75, 0x10, 0x22, 0x1d, 0x4c, 0x27, 0xb1, 0x62, 0x14, 0x3b, 0x70, 0x02, 0xd8, 0xc7, 0x26, 0x91, 0x68, 0x26, 0x26, 0x59, 0x37, 0xb8, 0x7b, 0xe9, 0xd5, 0xec, 0x6d, 0x7b, 0xd2, 0x8f, 0xb0, 0x15, 0xf8, 0x4e, 0x0a, 0xb7, 0x30, 0xda, 0x7a, 0x4e, 0xaf, 0x4e, 0xf3, 0x17, 0x4b, 0xf0, 0xa2, 0x2a, 0x63, 0x92 }; /* K = df3a9348f37b5d2d4c9176db266ae388f1fa7e0f */ static const uint8_t ac_dsa_vect9_out[] = { /* R */ 0x44, 0x84, 0x34, 0xb2, 0x14, 0xee, 0xe3, 0x8b, 0xde, 0x08, 0x0f, 0x8e, 0xc4, 0x33, 0xe8, 0xd1, 0x9b, 0x3d, 0xdf, 0x0d, /* S */ 0x0c, 0x02, 0xe8, 0x81, 0xb7, 0x77, 0x92, 0x3f, 0xe0, 0xea, 0x67, 0x4f, 0x26, 0x21, 0x29, 0x8e, 0x00, 0x19, 0x9d, 0x5f }; #define ac_dsa_vect10_prime ac_dsa_vect1_prime #define ac_dsa_vect10_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect10_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect10_ptx[] = { /* Msg */ 0x83, 0x49, 0x9e, 0xfb, 0x06, 0xbb, 0x7f, 0xf0, 0x2f, 0xfb, 0x46, 0xc2, 0x78, 0xa5, 0xe9, 0x26, 0x30, 0xac, 0x5b, 0xc3, 0xf9, 0xe5, 0x3d, 0xd2, 0xe7, 0x8f, 0xf1, 0x5e, 0x36, 0x8c, 0x7e, 0x31, 0xaa, 0xd7, 0x7c, 0xf7, 0x71, 0xf3, 0x5f, 0xa0, 0x2d, 0x0b, 0x5f, 0x13, 0x52, 0x08, 0xa4, 0xaf, 0xdd, 0x86, 0x7b, 0xb2, 0xec, 0x26, 0xea, 0x2e, 0x7d, 0xd6, 0x4c, 0xde, 0xf2, 0x37, 0x50, 0x8a, 0x38, 0xb2, 0x7f, 0x39, 0xd8, 0xb2, 0x2d, 0x45, 0xca, 0xc5, 0xa6, 0x8a, 0x90, 0xb6, 0xea, 0x76, 0x05, 0x86, 0x45, 0xf6, 0x35, 0x6a, 0x93, 0x44, 0xd3, 0x6f, 0x00, 0xec, 0x66, 0x52, 0xea, 0xa4, 0xe9, 0xba, 0xe7, 0xb6, 0x94, 0xf9, 0xf1, 0xfc, 0x8c, 0x6c, 0x5e, 0x86, 0xfa, 0xdc, 0x7b, 0x27, 0xa2, 0x19, 0xb5, 0xc1, 0xb2, 0xae, 0x80, 0xa7, 0x25, 0xe5, 0xf6, 0x11, 0x65, 0xfe, 0x2e, 0xdc }; static const uint8_t ac_dsa_vect10_priv_val[] = { /* X */ 0xae, 0x56, 0xf6, 0x6b, 0x0a, 0x94, 0x05, 0xb9, 0xcc, 0xa5, 0x4c, 0x60, 0xec, 0x4a, 0x3b, 0xb5, 0xf8, 0xbe, 0x7c, 0x3f }; static const uint8_t ac_dsa_vect10_pub_val[] = { /* Y */ 0xa0, 0x15, 0x42, 0xc3, 0xda, 0x41, 0x0d, 0xd5, 0x79, 0x30, 0xca, 0x72, 0x4f, 0x0f, 0x50, 0x7c, 0x4d, 0xf4, 0x3d, 0x55, 0x3c, 0x7f, 0x69, 0x45, 0x99, 0x39, 0x68, 0x59, 0x41, 0xce, 0xb9, 0x5c, 0x7d, 0xcc, 0x3f, 0x17, 0x5a, 0x40, 0x3b, 0x35, 0x96, 0x21, 0xc0, 0xd4, 0x32, 0x8e, 0x98, 0xf1, 0x5f, 0x33, 0x0a, 0x63, 0x86, 0x5b, 0xaf, 0x3e, 0x7e, 0xb1, 0x60, 0x4a, 0x07, 0x15, 0xe1, 0x6e, 0xed, 0x64, 0xfd, 0x14, 0xb3, 0x5d, 0x3a, 0x53, 0x42, 0x59, 0xa6, 0xa7, 0xdd, 0xf8, 0x88, 0xc4, 0xdb, 0xb5, 0xf5, 0x1b, 0xbc, 0x6e, 0xd3, 0x39, 0xe5, 0xbb, 0x2a, 0x23, 0x9d, 0x5c, 0xfe, 0x21, 0x00, 0xac, 0x8e, 0x2f, 0x9c, 0x16, 0xe5, 0x36, 0xf2, 0x51, 0x19, 0xab, 0x43, 0x58, 0x43, 0xaf, 0x27, 0xdc, 0x33, 0x41, 0x4a, 0x9e, 0x46, 0x02, 0xf9, 0x6d, 0x7c, 0x94, 0xd6, 0x02, 0x1c, 0xec }; /* K = 8857ff301ad0169d164fa269977a116e070bac17 */ static const uint8_t ac_dsa_vect10_out[] = { /* R */ 0x8c, 0x2f, 0xab, 0x48, 0x9c, 0x34, 0x67, 0x21, 0x40, 0x41, 0x5d, 0x41, 0xa6, 0x5c, 0xef, 0x1e, 0x70, 0x19, 0x2e, 0x23, /* S */ 0x3d, 0xf8, 0x6a, 0x9e, 0x2e, 0xfe, 0x94, 0x4a, 0x1c, 0x7e, 0xa9, 0xc3, 0x0c, 0xac, 0x33, 0x1d, 0x00, 0x59, 0x9a, 0x0e }; #define ac_dsa_vect11_prime ac_dsa_vect1_prime #define ac_dsa_vect11_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect11_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect11_ptx[] = { /* Msg */ 0xf2, 0x3e, 0xe7, 0x9e, 0xb4, 0xfc, 0xe5, 0xcb, 0xf3, 0xb0, 0x8d, 0x65, 0xa1, 0x80, 0x3d, 0x2e, 0x3e, 0x19, 0x1d, 0x35, 0x80, 0xa4, 0x4d, 0x17, 0x7d, 0x8f, 0xf0, 0x69, 0xf9, 0x07, 0x84, 0xd0, 0x12, 0xca, 0x57, 0x46, 0xe6, 0xdd, 0x66, 0x38, 0xdf, 0xe8, 0x41, 0x3f, 0x1d, 0xb3, 0xd8, 0xfe, 0x28, 0x2c, 0x21, 0x60, 0xf5, 0xdd, 0x96, 0x60, 0x7d, 0xd6, 0x3d, 0x61, 0x0f, 0x79, 0x1d, 0xfc, 0x10, 0xab, 0xad, 0x18, 0x72, 0x15, 0x87, 0x10, 0x1c, 0xec, 0x8a, 0x2a, 0x12, 0x91, 0x3c, 0xfb, 0xad, 0xa3, 0xa5, 0xb7, 0x59, 0x39, 0x58, 0xb9, 0xbf, 0xa6, 0xe9, 0xaf, 0x3a, 0xf5, 0xd7, 0x1f, 0xf1, 0x7e, 0xc7, 0x2a, 0xaa, 0xee, 0xca, 0xaf, 0xfc, 0x5d, 0x17, 0x4e, 0x62, 0x9a, 0x09, 0x02, 0x97, 0xe9, 0x4c, 0xdf, 0xe9, 0x88, 0xd9, 0xbf, 0x6c, 0x80, 0x82, 0x7c, 0x23, 0xdf, 0x51, 0x37 }; static const uint8_t ac_dsa_vect11_priv_val[] = { /* X */ 0xa6, 0x20, 0x79, 0xb4, 0xf4, 0x57, 0x72, 0xbf, 0x17, 0xb8, 0x5d, 0x75, 0x60, 0xe3, 0xbe, 0x4e, 0x52, 0x14, 0x39, 0xeb }; static const uint8_t ac_dsa_vect11_pub_val[] = { /* Y */ 0x22, 0x9a, 0x26, 0xdc, 0xaf, 0xf2, 0x9e, 0xd1, 0xa7, 0x26, 0x4e, 0xd0, 0xf7, 0x7d, 0x67, 0x62, 0x39, 0xb9, 0xba, 0x1e, 0xf4, 0x77, 0x8e, 0x7d, 0xd6, 0x40, 0xe8, 0xaa, 0x6f, 0xab, 0xdc, 0x1f, 0x1b, 0xd3, 0xf5, 0x82, 0xe2, 0x11, 0xbd, 0x01, 0xc2, 0x6b, 0x3d, 0x9d, 0x3b, 0xff, 0xe7, 0x19, 0x9f, 0x9e, 0xd4, 0x5d, 0x76, 0x4c, 0xd9, 0xd0, 0xe8, 0x44, 0xb3, 0x85, 0xcb, 0x34, 0xe6, 0xde, 0x22, 0x37, 0x0e, 0xbc, 0x6b, 0xa4, 0x1d, 0xb4, 0x09, 0xd6, 0x3f, 0x50, 0xc1, 0xac, 0x09, 0xbe, 0xd0, 0x0c, 0xdc, 0x2b, 0x7c, 0x55, 0x22, 0x3c, 0x59, 0x6b, 0x7e, 0x13, 0x3b, 0xa2, 0x5b, 0xa9, 0xe7, 0x8f, 0x33, 0x50, 0x2f, 0x8d, 0xd5, 0x2f, 0x32, 0xa6, 0x67, 0xa7, 0x68, 0x3e, 0x50, 0x40, 0x47, 0x81, 0x79, 0x63, 0x23, 0x8d, 0x96, 0x29, 0xa9, 0x18, 0xa0, 0xce, 0xeb, 0xaa, 0xd5, 0x18 }; /* K = c01acd36910f2f2bff608386b81c35a0a7c0b378 */ static const uint8_t ac_dsa_vect11_out[] = { /* R */ 0x8d, 0x38, 0x8e, 0xc7, 0xf2, 0x86, 0x3d, 0xd5, 0xb7, 0xc9, 0x9a, 0xc9, 0x35, 0x05, 0xd1, 0x58, 0x0b, 0xf2, 0xe0, 0xc7, /* S */ 0x76, 0xae, 0x93, 0x17, 0x69, 0x6d, 0x37, 0xf2, 0xd8, 0xbd, 0x61, 0xc4, 0x77, 0x33, 0xe9, 0x45, 0x5b, 0x61, 0xd3, 0x47 }; #define ac_dsa_vect12_prime ac_dsa_vect1_prime #define ac_dsa_vect12_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect12_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect12_ptx[] = { /* Msg */ 0x68, 0x36, 0x25, 0x5e, 0x6e, 0x65, 0x9d, 0xe4, 0xff, 0xb5, 0x35, 0x89, 0x2d, 0x46, 0x6a, 0x3b, 0xea, 0x09, 0x69, 0x3e, 0x58, 0x7e, 0xb5, 0xbd, 0x50, 0xf4, 0x4f, 0x8a, 0x22, 0xf1, 0x16, 0x97, 0x05, 0x7d, 0x68, 0x66, 0x0b, 0xc6, 0x56, 0x24, 0x00, 0xd5, 0x87, 0xba, 0xac, 0x1c, 0x19, 0xd3, 0x30, 0xff, 0x79, 0x4a, 0x70, 0xdf, 0x53, 0x00, 0xa5, 0x21, 0x1c, 0x72, 0x54, 0x1a, 0x56, 0xd0, 0xff, 0x2a, 0xf0, 0x2a, 0x27, 0x8e, 0xd2, 0xdb, 0x1d, 0xf9, 0x4c, 0xcb, 0x20, 0x26, 0xd3, 0x13, 0x8b, 0x2d, 0x92, 0x42, 0x45, 0x02, 0x1e, 0xe8, 0x35, 0xd3, 0xc1, 0x7b, 0x0b, 0x3b, 0x76, 0x77, 0xde, 0xf8, 0x56, 0x11, 0x22, 0x7f, 0x6c, 0xe2, 0x91, 0x3e, 0x7c, 0xb4, 0x46, 0xa4, 0x79, 0xb9, 0x5a, 0xcf, 0xd0, 0x10, 0x5c, 0x25, 0xe4, 0x65, 0x6f, 0xbc, 0x56, 0xc2, 0xa1, 0x0a, 0x22, 0xb3 }; static const uint8_t ac_dsa_vect12_priv_val[] = { /* X */ 0x78, 0x61, 0xe8, 0x2e, 0x66, 0xb6, 0xca, 0xea, 0x54, 0xb1, 0x59, 0xc5, 0x9c, 0x88, 0x7e, 0xc2, 0x7b, 0x2e, 0x91, 0x5f }; static const uint8_t ac_dsa_vect12_pub_val[] = { /* Y */ 0xa7, 0xbb, 0xc3, 0x54, 0x23, 0x51, 0x0e, 0xdf, 0xeb, 0xf7, 0x9c, 0x4e, 0x2e, 0x56, 0x98, 0x6f, 0x28, 0x06, 0xd1, 0x11, 0x16, 0xbc, 0xae, 0x90, 0xa7, 0x16, 0xf0, 0x5d, 0xcb, 0xfc, 0x46, 0xdc, 0xbf, 0xeb, 0xe2, 0xec, 0x94, 0x6c, 0x40, 0xf9, 0xcc, 0x8c, 0x1a, 0x74, 0x39, 0xcd, 0xd0, 0x4e, 0x27, 0x01, 0x22, 0xec, 0x1c, 0x3b, 0xac, 0xa8, 0x38, 0x11, 0xa9, 0xf1, 0xbd, 0xae, 0xd9, 0xb1, 0x17, 0x21, 0x50, 0xaf, 0x1c, 0x8c, 0xe1, 0xc5, 0xd5, 0x02, 0xdf, 0xe5, 0xf4, 0xe8, 0x46, 0x7e, 0x50, 0x60, 0x50, 0x87, 0xa8, 0xf8, 0xc5, 0xf4, 0x5c, 0xa6, 0x72, 0xfd, 0x04, 0x9e, 0xec, 0x0a, 0x06, 0xf5, 0xe0, 0x1f, 0x78, 0x2d, 0x51, 0xf3, 0xba, 0x56, 0x40, 0x4b, 0xf1, 0x38, 0x80, 0x65, 0x55, 0x2f, 0xc8, 0x7a, 0xd2, 0x1a, 0xc0, 0xfa, 0x40, 0x27, 0xa1, 0x45, 0xd0, 0xb0, 0xd9, 0xe6 }; /* K = 4e22cfa2e8ca2b33a9fd91ff4837fc205864e8b1 */ static const uint8_t ac_dsa_vect12_out[] = { /* R */ 0xc0, 0xab, 0x43, 0xd3, 0x09, 0xa5, 0xe9, 0x4b, 0x6e, 0xf4, 0xdb, 0x99, 0x43, 0x30, 0x6e, 0x6d, 0x96, 0x6f, 0xc9, 0xb5, /* S */ 0x07, 0xec, 0x5a, 0xa1, 0x92, 0x8f, 0x19, 0xfc, 0x3a, 0x42, 0x0f, 0x29, 0xb9, 0x35, 0xba, 0xc4, 0x61, 0x24, 0xc0, 0xe2 }; #define ac_dsa_vect13_prime ac_dsa_vect1_prime #define ac_dsa_vect13_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect13_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect13_ptx[] = { /* Msg */ 0x4b, 0x08, 0x45, 0xc9, 0x9d, 0xb3, 0x48, 0x29, 0x4f, 0x1d, 0x83, 0x16, 0x6b, 0x27, 0xf4, 0x48, 0xec, 0x29, 0xab, 0x79, 0x65, 0x46, 0x44, 0x77, 0xf4, 0x54, 0x44, 0xf4, 0x46, 0x72, 0xa4, 0x09, 0xdd, 0xca, 0xfa, 0xf3, 0x5e, 0x91, 0xfa, 0xf4, 0x01, 0xec, 0xa7, 0x49, 0x8e, 0x32, 0x68, 0xca, 0xa2, 0xd9, 0x6b, 0xf1, 0xaa, 0x84, 0x0c, 0x0e, 0x1e, 0xd4, 0x3a, 0x5a, 0xb6, 0x08, 0x88, 0xfc, 0xf0, 0x2b, 0x2f, 0x8a, 0x2c, 0x89, 0xda, 0xa5, 0x98, 0xad, 0xf0, 0xb7, 0xd2, 0xda, 0xce, 0x92, 0x10, 0xef, 0xd4, 0x1a, 0xb4, 0x96, 0xa1, 0xe7, 0x3a, 0x18, 0x2d, 0xa4, 0x30, 0xc1, 0xd0, 0x43, 0xe2, 0x49, 0xa1, 0x28, 0x9c, 0x91, 0x80, 0x9c, 0x8c, 0x72, 0x98, 0xcf, 0xdb, 0xb0, 0xae, 0x43, 0x8b, 0x00, 0x93, 0x6c, 0x28, 0x3a, 0x0e, 0xc2, 0xd7, 0x9c, 0xdc, 0x81, 0xc9, 0xce, 0x3c, 0x2d }; static const uint8_t ac_dsa_vect13_priv_val[] = { /* X */ 0x6f, 0x2d, 0x3b, 0x09, 0xfa, 0xe6, 0x91, 0x0d, 0xd9, 0x75, 0x87, 0x0d, 0xb3, 0xa2, 0xc1, 0x9d, 0x97, 0x16, 0x94, 0x91 }; static const uint8_t ac_dsa_vect13_pub_val[] = { /* Y */ 0x54, 0x1a, 0x9c, 0x45, 0xe1, 0x65, 0xd3, 0xd9, 0x1e, 0x71, 0xbb, 0x13, 0x70, 0xd7, 0xc0, 0x32, 0xc3, 0x60, 0x32, 0x2a, 0xa1, 0x5e, 0x99, 0xd8, 0xc1, 0xc1, 0x6e, 0xa3, 0x5c, 0x8c, 0x19, 0x32, 0x24, 0xa0, 0x64, 0x67, 0xab, 0x77, 0xa6, 0x54, 0x78, 0xc4, 0x67, 0xb3, 0xf2, 0x0c, 0xb0, 0xc5, 0xfd, 0xb8, 0xc8, 0x4c, 0xef, 0xa6, 0x95, 0x66, 0xa5, 0x94, 0xa2, 0xaa, 0x54, 0xc3, 0xa9, 0x48, 0xeb, 0xc1, 0xea, 0x7e, 0x6c, 0x3d, 0x28, 0xd3, 0x80, 0xcb, 0xd0, 0x17, 0x40, 0x63, 0x4c, 0x96, 0xb7, 0x6d, 0x6a, 0x03, 0xcc, 0x6e, 0xba, 0x0a, 0xfa, 0x72, 0x26, 0xf2, 0x3f, 0xc1, 0x0a, 0x18, 0xb0, 0xb6, 0xf9, 0x72, 0x70, 0xdf, 0xa0, 0x38, 0x16, 0x09, 0x60, 0xb5, 0xb8, 0x39, 0xba, 0x66, 0xaf, 0x50, 0xfd, 0xa0, 0x72, 0x45, 0x81, 0x0e, 0x80, 0xd3, 0x8b, 0x66, 0x93, 0xe8, 0xa9, 0xce }; /* K = 8588557c12ec6fe176b0be7bbd8b482ad78f1fef */ static const uint8_t ac_dsa_vect13_out[] = { /* R */ 0x44, 0x28, 0x60, 0x19, 0xc1, 0xd5, 0x31, 0x03, 0x98, 0x06, 0x16, 0x94, 0x0c, 0x02, 0x8b, 0xad, 0x32, 0x17, 0xf7, 0x8d, /* S */ 0x4b, 0x37, 0x2b, 0xf5, 0x27, 0xc5, 0x15, 0xf5, 0x80, 0x25, 0x69, 0x9a, 0x45, 0xf2, 0x02, 0x1e, 0xf1, 0x8e, 0x11, 0xb9 }; #define ac_dsa_vect14_prime ac_dsa_vect1_prime #define ac_dsa_vect14_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect14_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect14_ptx[] = { /* Msg */ 0x45, 0x97, 0xc1, 0xca, 0x0b, 0x07, 0x64, 0xbe, 0x31, 0xfa, 0x73, 0xcc, 0xc5, 0x89, 0x11, 0x6c, 0xc8, 0xd0, 0xa3, 0x16, 0x05, 0xf2, 0x55, 0x0e, 0xb3, 0x7f, 0xa5, 0x69, 0xb2, 0x49, 0x6c, 0x4f, 0x34, 0x32, 0x1d, 0x61, 0xbb, 0x8e, 0x49, 0xf8, 0x58, 0xc8, 0x67, 0x1b, 0x74, 0x37, 0xfc, 0x15, 0xf2, 0x69, 0xdd, 0x2d, 0x41, 0x46, 0x47, 0x0b, 0x81, 0x7d, 0xfe, 0x30, 0x69, 0x22, 0x5d, 0xdd, 0x3c, 0xd4, 0xa6, 0xc9, 0x77, 0xfb, 0x6c, 0xfc, 0x0d, 0x43, 0x26, 0x4a, 0x7b, 0xf6, 0x65, 0x92, 0x83, 0xe1, 0x40, 0xe4, 0xc8, 0x9a, 0xb2, 0xe8, 0xa4, 0xd0, 0xed, 0xe6, 0x27, 0x49, 0x61, 0xd6, 0x55, 0xbd, 0x79, 0xc7, 0xe4, 0x78, 0x80, 0xa7, 0x41, 0xfb, 0x01, 0x80, 0xc3, 0x25, 0xb5, 0xb7, 0xd2, 0xf7, 0xb8, 0xa5, 0x7a, 0xed, 0x52, 0xd0, 0x20, 0x6a, 0x83, 0xbb, 0x69, 0xa9, 0xd7, 0xa4 }; static const uint8_t ac_dsa_vect14_priv_val[] = { /* X */ 0x49, 0xf6, 0xc1, 0xac, 0x8e, 0x63, 0x9b, 0xcc, 0x99, 0xb2, 0xd9, 0xd1, 0xf1, 0xe3, 0x25, 0x71, 0x3f, 0x29, 0xb9, 0x7c }; static const uint8_t ac_dsa_vect14_pub_val[] = { /* Y */ 0x53, 0x15, 0xad, 0xf9, 0x0e, 0x19, 0x69, 0x46, 0xbe, 0x6b, 0x04, 0xc5, 0x41, 0x4d, 0xa1, 0xfa, 0xfd, 0x98, 0xb0, 0xd1, 0x7c, 0x3a, 0x39, 0x00, 0x0a, 0x00, 0x09, 0x1b, 0x7b, 0x56, 0x57, 0x4b, 0x1e, 0xcd, 0x02, 0x6e, 0xab, 0xb2, 0x5b, 0xe9, 0xec, 0xd0, 0xad, 0x69, 0x1d, 0xf2, 0xb7, 0xbf, 0x7e, 0xec, 0xd6, 0xad, 0x95, 0xbb, 0x4d, 0x7d, 0x17, 0xac, 0x74, 0x70, 0x60, 0xee, 0x7e, 0x3e, 0xb5, 0xc6, 0xfb, 0x75, 0x57, 0xcf, 0x7e, 0x80, 0x03, 0xa6, 0x20, 0xe4, 0x3e, 0x58, 0x7d, 0x06, 0x12, 0x85, 0x44, 0x72, 0xc3, 0xad, 0x85, 0x18, 0x39, 0xf7, 0x44, 0x15, 0x94, 0x11, 0xa3, 0x38, 0x76, 0xae, 0xc3, 0x65, 0xeb, 0x04, 0x91, 0xde, 0xc8, 0x0b, 0xa1, 0x4c, 0xba, 0x2d, 0x11, 0xde, 0xc4, 0x2a, 0xf4, 0xa4, 0xbf, 0x9c, 0x99, 0x31, 0x2a, 0x2a, 0xe7, 0xe5, 0x46, 0x2a, 0x2a, 0xdf }; /* K = 8ef1c5976ac8caf74df65d9ecdbe78a6490bc220 */ static const uint8_t ac_dsa_vect14_out[] = { /* R */ 0x90, 0xd5, 0x47, 0x71, 0x2b, 0xc0, 0xce, 0xbb, 0xd3, 0xeb, 0xd1, 0x8a, 0x63, 0xd9, 0xb9, 0x2a, 0x03, 0x95, 0x30, 0x50, /* S */ 0x34, 0xea, 0x61, 0x76, 0xb4, 0xc6, 0x30, 0x43, 0x29, 0x5f, 0x12, 0x9a, 0x48, 0x95, 0xe1, 0x4e, 0xe5, 0x81, 0x65, 0x63 }; #define ac_dsa_vect15_prime ac_dsa_vect1_prime #define ac_dsa_vect15_sub_prime ac_dsa_vect1_sub_prime #define ac_dsa_vect15_base ac_dsa_vect1_base static const uint8_t ac_dsa_vect15_ptx[] = { /* Msg */ 0x18, 0xc6, 0x2a, 0x40, 0xb5, 0x23, 0x47, 0xa4, 0x73, 0xf5, 0x7a, 0xa6, 0x68, 0xee, 0xbb, 0x44, 0x84, 0xbe, 0xb5, 0xf1, 0x0f, 0xdc, 0x51, 0x77, 0x9e, 0x67, 0x70, 0x10, 0x6c, 0x0d, 0x12, 0x2e, 0xb6, 0x35, 0x6a, 0xe5, 0x3a, 0x33, 0x79, 0xe2, 0x70, 0xed, 0xca, 0x39, 0x01, 0x5d, 0xa3, 0x00, 0x57, 0x70, 0xc7, 0xb2, 0xa5, 0xaf, 0xd1, 0x12, 0x17, 0x99, 0x31, 0x53, 0xff, 0x43, 0xa0, 0xb2, 0x6d, 0xb0, 0x1a, 0xa2, 0xa4, 0x93, 0xde, 0x06, 0x14, 0x92, 0xa0, 0xaa, 0x3f, 0x22, 0x9b, 0x5a, 0xbd, 0x1a, 0xff, 0x29, 0x39, 0x5e, 0x31, 0xb0, 0x63, 0x50, 0x4e, 0xb3, 0x56, 0x20, 0x21, 0x9b, 0xa2, 0x99, 0x97, 0xf9, 0x2a, 0x52, 0xe1, 0xb2, 0xe6, 0xff, 0x20, 0x74, 0x80, 0xfd, 0x13, 0xd5, 0x8f, 0xf0, 0x29, 0x0e, 0xec, 0x5a, 0xab, 0xf2, 0x3b, 0x84, 0x94, 0x3e, 0xea, 0x20, 0xa4, 0x3c }; static const uint8_t ac_dsa_vect15_priv_val[] = { /* X */ 0x39, 0x6c, 0xbe, 0x3e, 0x71, 0xd7, 0x4f, 0x6d, 0xb7, 0x95, 0xc3, 0x8d, 0x49, 0xc3, 0x2d, 0x78, 0xea, 0xb0, 0x33, 0x97 }; static const uint8_t ac_dsa_vect15_pub_val[] = { /* Y */ 0x3b, 0x73, 0x82, 0x46, 0xf9, 0xe3, 0x8c, 0xeb, 0xf4, 0x54, 0x2c, 0xed, 0x3f, 0xc0, 0xc0, 0x09, 0x6a, 0xeb, 0x9e, 0x9a, 0x3a, 0xd9, 0x28, 0xf4, 0xdd, 0x47, 0x45, 0xd8, 0x75, 0xfe, 0x6e, 0x20, 0xfb, 0x65, 0x55, 0x6d, 0x06, 0x69, 0x64, 0x32, 0xec, 0xff, 0xd5, 0x5b, 0x33, 0x49, 0x40, 0xc6, 0xe2, 0x3c, 0x90, 0x3f, 0x0a, 0xa4, 0xa1, 0x33, 0x5f, 0x73, 0x94, 0xc5, 0x50, 0x70, 0x58, 0x6b, 0xaa, 0xc8, 0x6c, 0x38, 0xcc, 0x19, 0x8e, 0xba, 0xf1, 0x54, 0x01, 0x25, 0x95, 0x28, 0xc5, 0x51, 0x92, 0xe9, 0x29, 0x8d, 0x2a, 0x0c, 0x89, 0x14, 0xda, 0xf2, 0xad, 0x00, 0x25, 0x9f, 0xe7, 0x25, 0x55, 0xc3, 0xc0, 0x44, 0x2e, 0x38, 0xc1, 0xe6, 0xe5, 0x02, 0x09, 0x28, 0xc6, 0xe6, 0x57, 0x1a, 0x0a, 0x98, 0xf6, 0xf4, 0x85, 0xe4, 0x37, 0x91, 0xae, 0x8a, 0xaa, 0xb1, 0x80, 0x46, 0x1f, 0xa4 }; /* K = 04bfe51616f5c244d2e01648362f5bbe5fa73501 */ static const uint8_t ac_dsa_vect15_out[] = { /* R */ 0x29, 0xb7, 0xc0, 0xf9, 0x0d, 0x62, 0x4f, 0x8d, 0x58, 0x7e, 0xfd, 0x3f, 0x49, 0xf9, 0x7d, 0xa7, 0x0f, 0x6e, 0x63, 0xe7, /* S */ 0x22, 0x2a, 0x3d, 0x9f, 0xfc, 0xa0, 0xdc, 0xf5, 0x79, 0x37, 0xe8, 0x9c, 0x92, 0x53, 0x8e, 0x32, 0xe7, 0xa8, 0x68, 0x0f }; /* [mod = L=1024, N=160, SHA-224] */ static const uint8_t ac_dsa_vect16_prime[] = { /* P */ 0x8b, 0x9b, 0x32, 0xf5, 0xba, 0x38, 0xfa, 0xad, 0x5e, 0x0d, 0x50, 0x6e, 0xb5, 0x55, 0x54, 0x0d, 0x0d, 0x79, 0x63, 0x19, 0x55, 0x58, 0xca, 0x30, 0x8b, 0x74, 0x66, 0x22, 0x8d, 0x92, 0xa1, 0x7b, 0x3b, 0x14, 0xb8, 0xe0, 0xab, 0x77, 0xa9, 0xf3, 0xb2, 0x95, 0x9a, 0x09, 0x84, 0x8a, 0xa6, 0x9f, 0x8d, 0xf9, 0x2c, 0xd9, 0xe9, 0xed, 0xef, 0x0a, 0xdf, 0x79, 0x2c, 0xe7, 0x7b, 0xfc, 0xec, 0xca, 0xdd, 0x93, 0x52, 0x70, 0x0c, 0xa5, 0xfa, 0xec, 0xf1, 0x81, 0xfa, 0x0c, 0x32, 0x6d, 0xb1, 0xd6, 0xe5, 0xd3, 0x52, 0x45, 0x80, 0x11, 0xe5, 0x1b, 0xd3, 0x24, 0x8f, 0x4e, 0x3b, 0xd7, 0xc8, 0x20, 0xd7, 0xe0, 0xa8, 0x19, 0x32, 0xac, 0xa1, 0xeb, 0xa3, 0x90, 0x17, 0x5e, 0x53, 0xea, 0xda, 0x19, 0x72, 0x23, 0x67, 0x4e, 0x39, 0x00, 0x26, 0x3e, 0x90, 0xf7, 0x2d, 0x94, 0xe7, 0x44, 0x7b, 0xff }; static const uint8_t ac_dsa_vect16_sub_prime[] = { /* Q */ 0xbc, 0x55, 0x0e, 0x96, 0x56, 0x47, 0xfb, 0x3a, 0x20, 0xf2, 0x45, 0xec, 0x84, 0x75, 0x62, 0x4a, 0xbb, 0xb2, 0x6e, 0xdd }; static const uint8_t ac_dsa_vect16_base[] = { /* G */ 0x11, 0x33, 0x3a, 0x93, 0x1f, 0xba, 0x50, 0x34, 0x87, 0x77, 0x73, 0x76, 0x85, 0x9f, 0xdc, 0x12, 0xf7, 0xc6, 0x87, 0xb0, 0x94, 0x8a, 0xe8, 0x89, 0xd2, 0x87, 0xf1, 0xb7, 0xa7, 0x12, 0xad, 0x22, 0x0a, 0xe4, 0xf1, 0xce, 0x37, 0x9d, 0x0d, 0xbb, 0x5c, 0x9a, 0xbf, 0x41, 0x96, 0x21, 0xf0, 0x05, 0xfc, 0x12, 0x3c, 0x32, 0x7e, 0x50, 0x55, 0xd1, 0x85, 0x06, 0x34, 0xc3, 0x6d, 0x39, 0x7e, 0x68, 0x9e, 0x11, 0x1d, 0x59, 0x8c, 0x1c, 0x36, 0x36, 0xb9, 0x40, 0xc8, 0x4f, 0x42, 0xf4, 0x36, 0x84, 0x6e, 0x8e, 0x7f, 0xca, 0xd9, 0x01, 0x2c, 0xed, 0xa3, 0x98, 0x72, 0x0f, 0x32, 0xff, 0xfd, 0x1a, 0x45, 0xab, 0x61, 0x36, 0xce, 0x41, 0x70, 0x69, 0x20, 0x7a, 0xc1, 0x40, 0x67, 0x5b, 0x8f, 0x86, 0xdd, 0x06, 0x39, 0x15, 0xae, 0x6f, 0x62, 0xb0, 0xce, 0xc7, 0x29, 0xfb, 0xd5, 0x09, 0xac, 0x17 }; static const uint8_t ac_dsa_vect16_ptx[] = { /* Msg */ 0xfb, 0x21, 0x28, 0x05, 0x25, 0x09, 0x48, 0x8c, 0xad, 0x07, 0x45, 0xed, 0x3e, 0x63, 0x12, 0x85, 0x0d, 0xd9, 0x6d, 0xda, 0xf7, 0x91, 0xf1, 0xe6, 0x24, 0xe2, 0x2a, 0x6b, 0x9b, 0xea, 0xa6, 0x53, 0x19, 0xc3, 0x25, 0xc7, 0x8e, 0xf5, 0x9c, 0xac, 0xba, 0x0c, 0xcf, 0xa7, 0x22, 0x25, 0x9f, 0x24, 0xf9, 0x2c, 0x17, 0xb7, 0x7a, 0x8f, 0x6d, 0x8e, 0x97, 0xc9, 0x3d, 0x88, 0x0d, 0x2d, 0x8d, 0xbb, 0xbe, 0xdc, 0xf6, 0xac, 0xef, 0xa0, 0x6b, 0x0e, 0x47, 0x6c, 0xa2, 0x01, 0x3d, 0x03, 0x94, 0xbd, 0x90, 0xd5, 0x6c, 0x10, 0x62, 0x6e, 0xf4, 0x3c, 0xea, 0x79, 0xd1, 0xef, 0x0b, 0xc7, 0xac, 0x45, 0x2b, 0xf9, 0xb9, 0xac, 0xae, 0xf7, 0x03, 0x25, 0xe0, 0x55, 0xac, 0x00, 0x6d, 0x34, 0x02, 0x4b, 0x32, 0x20, 0x4a, 0xbe, 0xa4, 0xbe, 0x5f, 0xaa, 0xe0, 0xa6, 0xd4, 0x6d, 0x36, 0x5e, 0xd0, 0xd9 }; static const uint8_t ac_dsa_vect16_priv_val[] = { /* X */ 0x6e, 0x2e, 0x31, 0xbb, 0xfc, 0x67, 0x09, 0x44, 0xd7, 0xa7, 0x12, 0x0e, 0x39, 0xa9, 0x81, 0x52, 0x06, 0x14, 0xd8, 0xa8 }; static const uint8_t ac_dsa_vect16_pub_val[] = { /* Y */ 0x7e, 0x33, 0x9f, 0x37, 0x57, 0x45, 0x03, 0x90, 0x16, 0x0e, 0x02, 0x29, 0x15, 0x59, 0xf3, 0x0b, 0xed, 0x0b, 0x2d, 0x75, 0x8c, 0x5c, 0xcc, 0x2d, 0x8d, 0x45, 0x62, 0x32, 0xbb, 0x43, 0x5a, 0xe4, 0x9d, 0xe7, 0xe7, 0x95, 0x7e, 0x3a, 0xad, 0x9b, 0xfd, 0xcf, 0x6f, 0xd5, 0xd9, 0xb6, 0xee, 0x3b, 0x52, 0x1b, 0xc2, 0x22, 0x9a, 0x84, 0x21, 0xdc, 0x2a, 0xa5, 0x9b, 0x99, 0x52, 0x34, 0x5a, 0x8f, 0xc1, 0xde, 0x49, 0xb3, 0x48, 0x00, 0x3a, 0x9b, 0x18, 0xda, 0x64, 0x2d, 0x7f, 0x6f, 0x56, 0xe3, 0xbc, 0x66, 0x51, 0x31, 0xae, 0x97, 0x62, 0x08, 0x8a, 0x93, 0x78, 0x6f, 0x7b, 0x4b, 0x72, 0xa4, 0xbc, 0xc3, 0x08, 0xc6, 0x7e, 0x25, 0x32, 0xa3, 0xa5, 0xbf, 0x09, 0x65, 0x20, 0x55, 0xcc, 0x26, 0xbf, 0x3b, 0x18, 0x83, 0x35, 0x98, 0xcf, 0xfd, 0x70, 0x11, 0xf2, 0x28, 0x5f, 0x79, 0x45, 0x57 }; /* K = 8cb35d255505a4c41421e562d10827266aa68663 */ static const uint8_t ac_dsa_vect16_out[] = { /* R */ 0xaf, 0xee, 0x71, 0x9e, 0x7f, 0x84, 0x8b, 0x54, 0x34, 0x9c, 0xcc, 0x3b, 0x4f, 0xb2, 0x60, 0x65, 0x83, 0x3a, 0x4d, 0x8e, /* S */ 0x73, 0x4e, 0xfe, 0x99, 0x22, 0x56, 0xf3, 0x13, 0x25, 0xe7, 0x49, 0xbc, 0x32, 0xa2, 0x4a, 0x1f, 0x95, 0x7b, 0x3a, 0x1b }; #define ac_dsa_vect17_prime ac_dsa_vect16_prime #define ac_dsa_vect17_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect17_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect17_ptx[] = { /* Msg */ 0x02, 0x97, 0x1e, 0x0c, 0xdd, 0x48, 0xae, 0x23, 0x31, 0xdb, 0x9c, 0x62, 0x85, 0xe9, 0x88, 0x0e, 0x96, 0x10, 0x4f, 0xa7, 0xa9, 0xf3, 0x78, 0xdf, 0xea, 0x71, 0x8e, 0x63, 0xef, 0xe9, 0x83, 0x52, 0xfe, 0x4d, 0x35, 0xa2, 0xbc, 0x94, 0xb3, 0xa8, 0x88, 0xcf, 0xb8, 0x8b, 0x8b, 0x7d, 0x9f, 0x6c, 0x8c, 0x54, 0xe4, 0x86, 0x13, 0xf3, 0x2c, 0x99, 0x46, 0xff, 0xe6, 0xe9, 0xa4, 0xb7, 0x10, 0x8e, 0xce, 0xcd, 0xda, 0x41, 0xbc, 0x15, 0x1b, 0x3d, 0x87, 0x24, 0xb6, 0x1f, 0x5b, 0x83, 0xa4, 0xe2, 0x74, 0x76, 0x91, 0x43, 0x87, 0xb0, 0x48, 0x8e, 0x41, 0xbe, 0x54, 0xf6, 0x3a, 0xa7, 0x73, 0x17, 0x5e, 0xb3, 0x73, 0xa3, 0x64, 0x1e, 0x6e, 0x79, 0x50, 0xee, 0xe8, 0xfa, 0xf0, 0x48, 0xa8, 0x41, 0xf1, 0x07, 0xd3, 0x0c, 0xf9, 0xbe, 0x26, 0x84, 0x93, 0x23, 0x15, 0x45, 0xd8, 0x98, 0x46, 0x94 }; static const uint8_t ac_dsa_vect17_priv_val[] = { /* X */ 0x0b, 0x44, 0x8f, 0x49, 0xa0, 0x85, 0xa5, 0x2a, 0x03, 0xd7, 0xf6, 0x68, 0xa1, 0xd6, 0xfb, 0x87, 0xf2, 0xe2, 0x21, 0xac }; static const uint8_t ac_dsa_vect17_pub_val[] = { /* Y */ 0x63, 0x3b, 0xb7, 0x57, 0xb3, 0xc0, 0xe3, 0xb7, 0x86, 0x7b, 0xf8, 0x45, 0x30, 0x1e, 0xa4, 0xe3, 0x9f, 0x75, 0xc9, 0x75, 0x9c, 0x22, 0x3f, 0x46, 0xce, 0x26, 0x6d, 0x40, 0x6b, 0x9d, 0xf5, 0xdb, 0x50, 0x1f, 0xb8, 0x26, 0xb6, 0xe6, 0x1c, 0xba, 0x61, 0x04, 0xc6, 0x04, 0x45, 0x8c, 0x90, 0x79, 0x9f, 0x2a, 0x36, 0xab, 0x51, 0x16, 0x6d, 0x0e, 0x83, 0xb7, 0x70, 0x84, 0x06, 0x24, 0xfe, 0xdc, 0x35, 0xeb, 0xfb, 0x98, 0x53, 0x41, 0x9e, 0x7e, 0x09, 0xb3, 0x2b, 0x4b, 0xd6, 0x52, 0xda, 0x4f, 0x1c, 0xe9, 0x73, 0xac, 0x26, 0x20, 0xc9, 0x66, 0xb6, 0x1e, 0x35, 0xa3, 0xf2, 0x16, 0x43, 0x9a, 0x8d, 0xe1, 0xa1, 0x04, 0xf1, 0x72, 0xe1, 0xb6, 0xe2, 0x87, 0x81, 0x12, 0xa6, 0x6c, 0x34, 0xd1, 0x6a, 0x9a, 0xef, 0x3a, 0xc2, 0x4a, 0x34, 0xaf, 0x5e, 0xdb, 0xf3, 0x98, 0x18, 0xa3, 0xe2, 0xef }; /* K = 4481a4be9db6821e3b0a08c9c82603631971a682 */ static const uint8_t ac_dsa_vect17_out[] = { /* R */ 0x92, 0xc6, 0x5e, 0x07, 0x46, 0x2d, 0x66, 0x8b, 0x06, 0xdd, 0x45, 0xb6, 0x08, 0x78, 0x49, 0x65, 0x89, 0x78, 0x38, 0xbc, /* S */ 0x2e, 0x40, 0xad, 0xf4, 0x1c, 0xaf, 0xb8, 0x04, 0x8c, 0x79, 0x3c, 0x70, 0x92, 0xa7, 0xe8, 0x23, 0x51, 0x5b, 0x6c, 0xfa }; #define ac_dsa_vect18_prime ac_dsa_vect16_prime #define ac_dsa_vect18_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect18_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect18_ptx[] = { /* Msg */ 0x06, 0x2e, 0x82, 0xfb, 0x43, 0x23, 0x6e, 0xe1, 0x7e, 0xbf, 0xaa, 0x3d, 0x36, 0x3b, 0x9b, 0x87, 0x3d, 0x0f, 0xe4, 0x14, 0x44, 0xc7, 0x4c, 0xef, 0x7f, 0x7e, 0x3b, 0xd8, 0x1f, 0x72, 0x3f, 0xd9, 0x0f, 0xd1, 0x48, 0xa2, 0x8e, 0x99, 0x75, 0x85, 0x41, 0x36, 0x95, 0x11, 0x37, 0x57, 0x75, 0x8a, 0xa4, 0xdd, 0x27, 0x5f, 0x70, 0xb3, 0x75, 0xf8, 0x90, 0x3c, 0x7b, 0xe4, 0x6e, 0x3a, 0x3a, 0xd3, 0x19, 0x0c, 0xd0, 0x49, 0x71, 0xab, 0xd2, 0xf1, 0xdb, 0x19, 0x2e, 0xf0, 0xd2, 0xb9, 0x8b, 0xbb, 0x80, 0x18, 0x1a, 0x72, 0x1a, 0x58, 0x09, 0x92, 0x8b, 0x5b, 0xca, 0x5c, 0x11, 0x8a, 0x29, 0x11, 0x13, 0x2a, 0xd2, 0x33, 0xcd, 0x27, 0xc7, 0xe4, 0x1a, 0xdf, 0xcc, 0xfe, 0xb4, 0xe9, 0x52, 0x87, 0x4b, 0xfa, 0x81, 0x96, 0x61, 0x18, 0x29, 0x75, 0xe4, 0x4d, 0x37, 0xc6, 0x17, 0x34, 0x75, 0x9c }; static const uint8_t ac_dsa_vect18_priv_val[] = { /* X */ 0xa4, 0xa2, 0x5a, 0x8b, 0xb1, 0xc2, 0xba, 0x69, 0xf9, 0x61, 0x19, 0x39, 0xb5, 0x91, 0x03, 0x2b, 0x96, 0x33, 0x3f, 0xa3 }; static const uint8_t ac_dsa_vect18_pub_val[] = { /* Y */ 0x3b, 0x0a, 0x09, 0x1d, 0xfc, 0xa0, 0x5d, 0xce, 0x61, 0xe9, 0xf0, 0x5b, 0x15, 0xb0, 0x74, 0x87, 0xd2, 0xe3, 0xea, 0x4f, 0x56, 0x8d, 0xc9, 0xac, 0x75, 0x2d, 0x42, 0xc0, 0xaa, 0x77, 0x1a, 0xe0, 0xcc, 0xc3, 0x72, 0xce, 0x97, 0x74, 0xfb, 0x9f, 0xd1, 0x6a, 0x30, 0xcb, 0x37, 0x59, 0xbb, 0x19, 0x89, 0x48, 0x8c, 0xe8, 0x5d, 0xb7, 0xcd, 0xfa, 0x50, 0x64, 0x76, 0xac, 0xec, 0x64, 0x4c, 0x21, 0x16, 0x8f, 0x2d, 0xb1, 0xf3, 0x6e, 0xfe, 0x02, 0x30, 0xc6, 0xfb, 0x8f, 0x1f, 0x2a, 0xe4, 0xea, 0xf1, 0x79, 0x9d, 0x5e, 0x29, 0xe2, 0x12, 0x46, 0x7b, 0x11, 0xbf, 0xbc, 0x1e, 0xeb, 0xed, 0x14, 0x2d, 0x7a, 0x01, 0x72, 0x62, 0xcd, 0x87, 0x35, 0xe3, 0xe2, 0x9d, 0x8e, 0x0c, 0x4a, 0x6e, 0x76, 0x6c, 0x07, 0xd7, 0xaa, 0x9f, 0x8d, 0x17, 0x6f, 0x53, 0x60, 0x87, 0xbf, 0xec, 0xf4, 0xc4, 0x14 }; /* K = a7135820910f041b27321534a17bb1f33ac51aca */ static const uint8_t ac_dsa_vect18_out[] = { /* R */ 0xba, 0x55, 0x41, 0x24, 0x87, 0x4d, 0x06, 0xa6, 0xce, 0xf6, 0x27, 0x40, 0xe1, 0x58, 0x21, 0xcc, 0xdd, 0xbf, 0xe6, 0xf3, /* S */ 0x59, 0x62, 0xbe, 0x75, 0x7d, 0x75, 0xb0, 0xf1, 0x7d, 0x15, 0x48, 0x2e, 0xbb, 0x59, 0x5c, 0xa4, 0xe9, 0xfb, 0xfe, 0x22 }; #define ac_dsa_vect19_prime ac_dsa_vect16_prime #define ac_dsa_vect19_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect19_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect19_ptx[] = { /* Msg */ 0x4f, 0xca, 0x07, 0x48, 0x44, 0xea, 0xe2, 0x47, 0xd1, 0x9c, 0x06, 0xe9, 0x20, 0x32, 0xae, 0x8e, 0x77, 0x30, 0x43, 0xe2, 0xe1, 0xf4, 0x5d, 0x40, 0x0e, 0x9d, 0xce, 0xbb, 0xde, 0x5d, 0x65, 0xe7, 0xc1, 0x42, 0x3b, 0x03, 0x90, 0x16, 0x19, 0x91, 0xc0, 0x26, 0xf3, 0x8a, 0x0e, 0x2b, 0xfe, 0xef, 0x40, 0xda, 0xe1, 0x87, 0x41, 0x73, 0x7b, 0x1d, 0x53, 0x5a, 0xb4, 0x6b, 0x56, 0x6a, 0x1b, 0x67, 0x2f, 0xc2, 0x2d, 0xec, 0x86, 0x74, 0x7a, 0x7c, 0x76, 0x38, 0xfa, 0x65, 0x04, 0x7f, 0x1e, 0xde, 0x36, 0xad, 0x43, 0xf6, 0xae, 0xdf, 0x51, 0xb5, 0xbf, 0x29, 0x79, 0xad, 0xf4, 0xd9, 0xa9, 0x4e, 0xd8, 0x02, 0xa2, 0x9d, 0xe5, 0x60, 0x3b, 0x70, 0x47, 0x70, 0xb3, 0x2c, 0x8b, 0x94, 0x6a, 0x32, 0xe1, 0xb6, 0x05, 0x4c, 0xd7, 0x0c, 0x3a, 0xdd, 0x02, 0x5c, 0xc9, 0x37, 0x1d, 0x1e, 0x40, 0x4d }; static const uint8_t ac_dsa_vect19_priv_val[] = { /* X */ 0x1f, 0x15, 0xca, 0xfc, 0xa2, 0x82, 0x08, 0x3e, 0x82, 0xd7, 0xe5, 0x42, 0x58, 0x64, 0x7b, 0x29, 0x14, 0x41, 0x89, 0x86 }; static const uint8_t ac_dsa_vect19_pub_val[] = { /* Y */ 0x40, 0xb6, 0x38, 0xc9, 0x4b, 0x1e, 0x71, 0x9a, 0x33, 0x7d, 0x83, 0x35, 0x86, 0x99, 0xc7, 0x0c, 0xd8, 0x67, 0xff, 0x88, 0x8c, 0x65, 0x5a, 0x5f, 0x5a, 0x1d, 0xe8, 0x73, 0x2d, 0x05, 0x8b, 0xf0, 0x27, 0xd4, 0x74, 0x7e, 0xfe, 0x3b, 0x8d, 0xed, 0xca, 0x32, 0x76, 0xde, 0x5a, 0x58, 0xf1, 0x36, 0xed, 0x35, 0xcf, 0xf0, 0x30, 0x30, 0xf6, 0x72, 0xda, 0x65, 0xc7, 0x1f, 0x18, 0xe5, 0x82, 0x78, 0xdd, 0xfc, 0x7b, 0x9b, 0x50, 0xa2, 0x48, 0xef, 0xf9, 0x23, 0x68, 0x74, 0xee, 0x3c, 0xb0, 0xd0, 0xa3, 0x5b, 0x7b, 0x2e, 0xe1, 0x85, 0xb1, 0x39, 0xea, 0x84, 0xee, 0xd7, 0xbf, 0xfc, 0x50, 0x94, 0xab, 0x87, 0x43, 0xa7, 0x53, 0x74, 0xbc, 0x36, 0xc7, 0xd6, 0x9d, 0x5f, 0x3e, 0x6f, 0xe5, 0xf3, 0xef, 0x1f, 0x93, 0x58, 0xf0, 0x0a, 0x3c, 0x58, 0x92, 0xff, 0xf4, 0x1e, 0xd6, 0xaf, 0xee, 0x3b }; /* K = 128ab9677c7ade5e1c02a8427650ff054db6390e */ static const uint8_t ac_dsa_vect19_out[] = { /* R */ 0x65, 0x1a, 0x38, 0x9d, 0x8c, 0xa5, 0x0d, 0x6e, 0x32, 0x73, 0xca, 0xbb, 0xe7, 0x1c, 0xd8, 0x4c, 0xcc, 0xd0, 0x23, 0x61, /* S */ 0x34, 0x01, 0xfe, 0x47, 0xb3, 0x81, 0x2d, 0xaa, 0x8c, 0x02, 0x0c, 0x9b, 0xd4, 0x26, 0x09, 0xcb, 0xeb, 0xdf, 0xa7, 0x28 }; #define ac_dsa_vect20_prime ac_dsa_vect16_prime #define ac_dsa_vect20_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect20_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect20_ptx[] = { /* Msg */ 0x4d, 0x96, 0x30, 0xfe, 0x05, 0x89, 0x98, 0xca, 0x5b, 0x80, 0xae, 0x62, 0xf3, 0xf7, 0x3d, 0xc8, 0x5b, 0xee, 0x29, 0x15, 0x09, 0x84, 0x3a, 0xc0, 0x02, 0x40, 0xd1, 0x3d, 0x55, 0x25, 0x1a, 0xe5, 0x3b, 0x37, 0x79, 0x47, 0x83, 0xb9, 0x7d, 0x53, 0xe0, 0x42, 0xca, 0xb2, 0x6f, 0x8c, 0x84, 0xde, 0x0a, 0x70, 0xf5, 0xb4, 0x30, 0x51, 0xfb, 0xef, 0xb3, 0xe4, 0x3f, 0x08, 0xf5, 0xd2, 0xe8, 0xaa, 0xd9, 0xe2, 0xde, 0x27, 0x17, 0x41, 0x2d, 0xbb, 0x90, 0x2a, 0xcc, 0x88, 0x49, 0xad, 0xc0, 0x4d, 0x06, 0xfe, 0xd8, 0xc1, 0x42, 0x1c, 0x4c, 0xfe, 0x8b, 0x81, 0xee, 0x7f, 0x5a, 0xc5, 0xd4, 0xf0, 0xc0, 0xb6, 0x8e, 0x80, 0xb6, 0xf8, 0x8f, 0xd3, 0xc7, 0xd5, 0xb3, 0x20, 0x22, 0x57, 0x2b, 0x0a, 0x68, 0x1b, 0xd2, 0xd4, 0xdf, 0x2d, 0x04, 0x7b, 0x0b, 0x23, 0xb6, 0x88, 0x71, 0x45, 0xaf, 0xe1 }; static const uint8_t ac_dsa_vect20_priv_val[] = { /* X */ 0x14, 0x85, 0xf7, 0x19, 0xb8, 0xbe, 0x77, 0xc7, 0x88, 0x29, 0xba, 0xa0, 0xd2, 0xc3, 0x22, 0xdf, 0x60, 0x17, 0x44, 0x76 }; static const uint8_t ac_dsa_vect20_pub_val[] = { /* Y */ 0x72, 0x7b, 0x65, 0x28, 0x35, 0x7d, 0x67, 0x05, 0xc2, 0x0d, 0x31, 0x35, 0x8f, 0x64, 0x19, 0x34, 0xfd, 0xec, 0x63, 0xcc, 0x66, 0xdf, 0x98, 0x83, 0x7d, 0x2f, 0x37, 0x81, 0x64, 0xe1, 0x5f, 0xa0, 0x84, 0x22, 0x07, 0xac, 0xf3, 0x22, 0x0c, 0x80, 0x23, 0xa9, 0xf4, 0xf8, 0xd2, 0x05, 0x71, 0x65, 0xb3, 0xc8, 0x49, 0xea, 0xeb, 0x53, 0x76, 0xe3, 0xfa, 0xd1, 0x17, 0x85, 0xf1, 0xd0, 0x26, 0x17, 0x79, 0xaa, 0xed, 0xd5, 0x3b, 0x1e, 0x52, 0x79, 0x80, 0x07, 0xeb, 0x4c, 0x8e, 0x83, 0xb1, 0xff, 0x32, 0x1b, 0x62, 0x0d, 0x88, 0x33, 0x91, 0xa1, 0x4f, 0xa4, 0x7f, 0xec, 0x49, 0x01, 0xd9, 0x6e, 0xc2, 0x32, 0xea, 0xbb, 0x4a, 0x0b, 0xb4, 0x45, 0x33, 0x68, 0xfe, 0xf5, 0x17, 0x6c, 0x67, 0x13, 0x56, 0x49, 0x97, 0x9d, 0x32, 0x14, 0xd3, 0xfb, 0x67, 0xa1, 0x31, 0x9a, 0xc5, 0x4f, 0xeb, 0x01 }; /* K = 8f4cc1254c787ec8cbf54405105f7ef83ffdeee0 */ static const uint8_t ac_dsa_vect20_out[] = { /* R */ 0x9c, 0xa3, 0xe4, 0x33, 0x50, 0x4c, 0x55, 0x7b, 0xa1, 0xaa, 0xc6, 0x64, 0x69, 0x78, 0x11, 0x75, 0xcd, 0xfb, 0x4a, 0xd5, /* S */ 0x72, 0x14, 0x5d, 0xfa, 0x52, 0x79, 0xdd, 0x82, 0xae, 0x99, 0x60, 0x4d, 0x16, 0xa2, 0xb8, 0xdf, 0x71, 0xb9, 0x53, 0x20 }; #define ac_dsa_vect21_prime ac_dsa_vect16_prime #define ac_dsa_vect21_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect21_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect21_ptx[] = { /* Msg */ 0x62, 0xb9, 0xd6, 0x01, 0xe3, 0x0b, 0x42, 0xa2, 0x79, 0xc7, 0xe0, 0x4d, 0xf3, 0xca, 0x8d, 0x81, 0x40, 0xa5, 0x5c, 0xd5, 0x87, 0x6c, 0x7e, 0x91, 0x81, 0xc7, 0x35, 0x75, 0xe4, 0xc4, 0xf9, 0x21, 0xa9, 0x4e, 0x4e, 0x2d, 0x0b, 0xdd, 0x7b, 0xa9, 0x86, 0x00, 0xd6, 0x52, 0xe5, 0xdf, 0x5b, 0xe9, 0x46, 0x4e, 0x7a, 0x90, 0x11, 0xab, 0x48, 0x69, 0x60, 0xf6, 0x9d, 0x57, 0xec, 0xe1, 0xd2, 0xc4, 0xaf, 0x93, 0x24, 0x45, 0x7c, 0x1e, 0x3d, 0x83, 0xfb, 0xa4, 0x26, 0x5b, 0xeb, 0x47, 0x40, 0x7e, 0x47, 0x61, 0xdb, 0xc9, 0x49, 0xd5, 0xbd, 0x67, 0xfe, 0xe4, 0xa4, 0x76, 0xa4, 0xd5, 0xa9, 0x3d, 0x77, 0xac, 0xda, 0x96, 0xa2, 0x21, 0xa0, 0xa3, 0x1e, 0x0f, 0x02, 0x4b, 0x3f, 0x0b, 0x82, 0x34, 0xc0, 0x15, 0x23, 0x8f, 0x32, 0x58, 0xda, 0xa0, 0x85, 0xae, 0x9f, 0x4e, 0x1a, 0xa7, 0xb1, 0xcc }; static const uint8_t ac_dsa_vect21_priv_val[] = { /* X */ 0x43, 0xc7, 0x6a, 0x9a, 0x00, 0x04, 0x5c, 0xdf, 0xb2, 0xe7, 0x92, 0x7b, 0x5c, 0x87, 0x30, 0xe0, 0x06, 0x42, 0x3c, 0x05 }; static const uint8_t ac_dsa_vect21_pub_val[] = { /* Y */ 0x5f, 0x6d, 0xfb, 0x06, 0x4c, 0xad, 0xdf, 0x64, 0x4a, 0xf3, 0x99, 0xe3, 0x3a, 0x67, 0x25, 0x65, 0x76, 0x67, 0x61, 0xd5, 0x5a, 0xc0, 0xb8, 0x4b, 0xea, 0xd4, 0x2c, 0x39, 0x80, 0xe7, 0xe3, 0x96, 0x04, 0x37, 0x44, 0x36, 0x17, 0x78, 0xf0, 0x4d, 0xcb, 0x69, 0x8e, 0x45, 0x63, 0x85, 0x34, 0x20, 0xfe, 0xca, 0xcd, 0x59, 0x4a, 0xf8, 0x28, 0xf5, 0x7d, 0xf5, 0x41, 0xd9, 0xe4, 0xde, 0x89, 0x9d, 0x61, 0xf0, 0x4f, 0x63, 0x79, 0xc1, 0xc9, 0x62, 0x46, 0xd1, 0x52, 0x36, 0x93, 0x95, 0x24, 0x2a, 0x1c, 0x2e, 0x70, 0xee, 0xf8, 0xf3, 0x54, 0x17, 0xa0, 0xff, 0xdb, 0x03, 0x92, 0x82, 0x51, 0x6c, 0xe2, 0x1b, 0x85, 0x68, 0x79, 0x04, 0xc5, 0x11, 0x08, 0x7f, 0x11, 0x3e, 0x51, 0x42, 0xf0, 0x27, 0xf1, 0x17, 0x97, 0x12, 0xed, 0xcb, 0xce, 0x27, 0x93, 0x9a, 0xb1, 0x5e, 0xc4, 0x9c, 0x08, 0x5f }; /* K = 5e4b5e4595e31397422c7a4487ae51051289be61 */ static const uint8_t ac_dsa_vect21_out[] = { /* R */ 0x33, 0x19, 0x20, 0xa7, 0xb7, 0x9e, 0x3c, 0xfa, 0x76, 0x38, 0xe4, 0x09, 0xd9, 0x70, 0x2a, 0xaf, 0xd0, 0x8f, 0xbe, 0xc6, /* S */ 0x07, 0x1d, 0x06, 0xe6, 0xcd, 0x30, 0x15, 0x15, 0xf3, 0x7b, 0x60, 0x69, 0x0a, 0xfa, 0x21, 0x9f, 0xe5, 0x08, 0x3d, 0x96 }; #define ac_dsa_vect22_prime ac_dsa_vect16_prime #define ac_dsa_vect22_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect22_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect22_ptx[] = { /* Msg */ 0x00, 0x06, 0xe0, 0x9c, 0x20, 0x37, 0x64, 0x42, 0xe6, 0x89, 0xbf, 0x2d, 0x34, 0x26, 0x8f, 0xd6, 0x91, 0x09, 0xc1, 0x30, 0x1e, 0xa6, 0x6c, 0xbe, 0x90, 0x39, 0x4c, 0xc0, 0xf4, 0x1f, 0x94, 0x82, 0x2c, 0x28, 0x84, 0x58, 0x19, 0xb9, 0xa9, 0x87, 0x64, 0xd2, 0xf7, 0x26, 0x2e, 0x98, 0x89, 0x14, 0x87, 0xff, 0x55, 0xb0, 0x5b, 0xd6, 0x9e, 0x18, 0xb7, 0xca, 0xd4, 0x1b, 0xd9, 0x8e, 0x13, 0x75, 0x66, 0xb6, 0x04, 0x1c, 0x73, 0x9d, 0xb1, 0x1f, 0x78, 0xe5, 0x67, 0xca, 0xc0, 0x2f, 0x33, 0xf1, 0x40, 0xd1, 0x9a, 0x48, 0x05, 0x00, 0x25, 0x45, 0x37, 0x5d, 0xae, 0xbf, 0xd7, 0xdc, 0xbe, 0xa3, 0x32, 0x42, 0xe7, 0x3c, 0x8e, 0x26, 0x91, 0x49, 0xd7, 0xeb, 0x9d, 0xb9, 0xf9, 0x00, 0x6e, 0x17, 0xac, 0xb7, 0x36, 0xb5, 0xe9, 0x77, 0x64, 0x5a, 0xb6, 0x51, 0xb8, 0x12, 0x25, 0xc5, 0xe5, 0x43 }; static const uint8_t ac_dsa_vect22_priv_val[] = { /* X */ 0x16, 0xf8, 0x9d, 0x97, 0xdd, 0x3b, 0x31, 0xc1, 0x91, 0x49, 0x51, 0x73, 0xae, 0x0e, 0x14, 0x5c, 0x6c, 0xe1, 0x85, 0xd6 }; static const uint8_t ac_dsa_vect22_pub_val[] = { /* Y */ 0x1b, 0x1f, 0x72, 0x56, 0x64, 0xd7, 0x5b, 0xdc, 0xb2, 0xa5, 0xa4, 0xc6, 0x53, 0x06, 0x1c, 0x46, 0x07, 0x99, 0xdd, 0x48, 0xbf, 0x1e, 0x6b, 0x03, 0xe1, 0x3c, 0x71, 0xd8, 0x3e, 0x3f, 0xdb, 0x50, 0x6f, 0xa9, 0x4e, 0x6c, 0xaf, 0xb5, 0xdb, 0xde, 0xad, 0x88, 0xa3, 0x3d, 0x23, 0xd4, 0xe9, 0x28, 0x7b, 0x47, 0x07, 0xe1, 0xfb, 0xa8, 0x71, 0xb9, 0x7c, 0x9a, 0x48, 0xf9, 0x30, 0xcd, 0xcc, 0xba, 0x0d, 0xc0, 0x6a, 0x4f, 0x0a, 0x8b, 0xfb, 0xb4, 0xe1, 0x4d, 0x0b, 0x4d, 0x5a, 0x08, 0x71, 0xfa, 0x13, 0x41, 0xca, 0xec, 0x7b, 0xc0, 0x81, 0x38, 0x71, 0x31, 0x21, 0xd4, 0x19, 0x76, 0x9f, 0x31, 0x20, 0x35, 0x08, 0xdf, 0x71, 0x94, 0x72, 0x65, 0x64, 0x4f, 0xdc, 0x61, 0x37, 0xd8, 0xe4, 0x66, 0xc8, 0xcb, 0x0c, 0xe9, 0x85, 0x34, 0x0c, 0xb2, 0xe2, 0x79, 0xb4, 0xce, 0x93, 0x15, 0xa7, 0x72 }; /* K = 475b5aa12ff77d49e4c8171f80d3d1f15147ed12 */ static const uint8_t ac_dsa_vect22_out[] = { /* R */ 0xb6, 0xaa, 0x83, 0x3b, 0x82, 0x51, 0x84, 0x72, 0x9a, 0xf3, 0x08, 0xf8, 0x1b, 0xf5, 0xe5, 0x8e, 0x2d, 0x7e, 0x92, 0x84, /* S */ 0x54, 0x53, 0xb4, 0xb2, 0xe3, 0xfc, 0x80, 0x2b, 0x2f, 0x97, 0x7d, 0x0c, 0xf6, 0xeb, 0x7f, 0x5c, 0x16, 0x67, 0x3f, 0xa3 }; #define ac_dsa_vect23_prime ac_dsa_vect16_prime #define ac_dsa_vect23_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect23_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect23_ptx[] = { /* Msg */ 0xe0, 0x4a, 0x71, 0xf2, 0xb5, 0xc1, 0x76, 0xa0, 0xdb, 0x17, 0xa9, 0x83, 0xa1, 0x7d, 0xec, 0x58, 0x8c, 0x00, 0xf4, 0x2c, 0x9a, 0xa3, 0x02, 0x6b, 0x5e, 0xb4, 0x40, 0xf0, 0x7a, 0x21, 0x40, 0xc2, 0xed, 0x84, 0x02, 0x4e, 0x05, 0x31, 0xea, 0x77, 0x88, 0xdf, 0xea, 0xa9, 0x18, 0x83, 0xfb, 0x6a, 0x98, 0x41, 0xc1, 0x7d, 0xcf, 0xd3, 0x12, 0x96, 0x8a, 0xdb, 0x00, 0xe5, 0x56, 0xbc, 0x7e, 0xb3, 0x02, 0x1f, 0x57, 0xb7, 0xa1, 0x68, 0x94, 0xfa, 0x4f, 0xe1, 0x2e, 0xc9, 0x3d, 0xfd, 0x49, 0x4a, 0x0a, 0x1c, 0x69, 0x3d, 0x6a, 0xde, 0x15, 0x4e, 0xf6, 0x48, 0xc0, 0x55, 0x52, 0xda, 0x41, 0x22, 0x4d, 0x49, 0x22, 0xd1, 0x86, 0x1d, 0x9f, 0x76, 0x71, 0xb8, 0xce, 0x6c, 0xe4, 0x48, 0xe8, 0x95, 0xea, 0x0e, 0xed, 0x25, 0x80, 0x2e, 0x33, 0x50, 0xec, 0x08, 0xae, 0x79, 0xf2, 0xd6, 0x1e, 0x0f }; static const uint8_t ac_dsa_vect23_priv_val[] = { /* X */ 0x3e, 0xda, 0x44, 0xe3, 0xc3, 0x83, 0x80, 0xdf, 0x7a, 0x4f, 0x47, 0xd8, 0xe1, 0x02, 0x45, 0x96, 0x23, 0x8b, 0xce, 0xf1 }; static const uint8_t ac_dsa_vect23_pub_val[] = { /* Y */ 0x68, 0x7e, 0x16, 0x30, 0x9b, 0x06, 0x81, 0x7b, 0x93, 0x23, 0x6d, 0xd9, 0x90, 0xfa, 0xef, 0x9e, 0x23, 0x2e, 0xb8, 0x1c, 0xb9, 0xc7, 0xd6, 0xda, 0xe4, 0xfd, 0xd4, 0xf8, 0xe7, 0xca, 0x93, 0x3e, 0x18, 0x5b, 0x1d, 0xa6, 0x22, 0xd7, 0xc7, 0xfa, 0x35, 0xe0, 0xa3, 0x90, 0x6f, 0x91, 0x5d, 0xed, 0x14, 0xba, 0x96, 0xd6, 0x03, 0x5b, 0x46, 0xbd, 0x6c, 0xa5, 0xfe, 0x17, 0x2a, 0xf9, 0x4e, 0x08, 0x1f, 0xb0, 0xb9, 0xa9, 0x58, 0x3a, 0x45, 0x8b, 0xd2, 0x06, 0xc1, 0xe8, 0x7f, 0x97, 0xa5, 0x7d, 0x00, 0xd6, 0xea, 0xde, 0x19, 0xec, 0x56, 0xac, 0x2e, 0x9b, 0xbd, 0x8c, 0x15, 0xdf, 0x35, 0x6e, 0xe7, 0xb1, 0x2c, 0x91, 0x31, 0x1a, 0x38, 0xfc, 0x33, 0x15, 0xcf, 0xde, 0x9f, 0xf4, 0x62, 0xca, 0x6a, 0xdf, 0xf2, 0x80, 0x8b, 0x3f, 0x8e, 0x80, 0x5e, 0xe9, 0x15, 0xae, 0x88, 0x5c, 0xa9, 0x57 }; /* K = aeaa655b6febfec50b05562c3f358865533e4736 */ static const uint8_t ac_dsa_vect23_out[] = { /* R */ 0x14, 0x89, 0x2b, 0x1e, 0xc7, 0xfc, 0x71, 0x6c, 0x75, 0xa1, 0x7f, 0x7a, 0xd2, 0xe4, 0x1e, 0xc6, 0xfa, 0xa7, 0x88, 0x36, /* S */ 0x72, 0xcc, 0x56, 0xa9, 0x89, 0x0e, 0x8b, 0xdf, 0x1a, 0x53, 0xd3, 0xac, 0xc6, 0xf8, 0x91, 0x37, 0x26, 0x4f, 0x9f, 0xf8 }; #define ac_dsa_vect24_prime ac_dsa_vect16_prime #define ac_dsa_vect24_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect24_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect24_ptx[] = { /* Msg */ 0x5e, 0x8e, 0xb9, 0x6b, 0x5c, 0x6a, 0xd7, 0x5d, 0x3d, 0xab, 0x1e, 0x28, 0xbb, 0x2c, 0xe7, 0x51, 0xec, 0xc3, 0x16, 0x11, 0xa0, 0x19, 0xe8, 0xd4, 0xb5, 0x61, 0xc7, 0xe4, 0x53, 0x3c, 0xc7, 0xab, 0x73, 0xbd, 0x9d, 0xe9, 0x31, 0xe8, 0xc5, 0x4c, 0x51, 0xc5, 0x71, 0x1e, 0x6c, 0x27, 0x6a, 0x8e, 0xd9, 0x2f, 0x4b, 0xb4, 0x57, 0xdd, 0xf2, 0x82, 0x33, 0xda, 0x2c, 0xa3, 0xe3, 0x01, 0x3c, 0x56, 0xe3, 0xcd, 0x2b, 0xc6, 0x1d, 0x4d, 0x4e, 0x0e, 0x22, 0xcf, 0x63, 0x61, 0x30, 0x4e, 0x56, 0xd6, 0x8b, 0x31, 0x5c, 0xa5, 0xd3, 0xfc, 0xc4, 0x72, 0xa7, 0xee, 0xf8, 0xcc, 0xa5, 0x75, 0x20, 0x4d, 0xd0, 0x84, 0xa2, 0x1a, 0x99, 0xba, 0x67, 0xfd, 0xdb, 0xf9, 0x0d, 0xf7, 0xc6, 0xc6, 0x58, 0x76, 0x17, 0x34, 0xbc, 0xe1, 0x3c, 0x3d, 0x22, 0xd8, 0x0b, 0x6f, 0xb9, 0xbe, 0xce, 0x55, 0x14, 0x92 }; static const uint8_t ac_dsa_vect24_priv_val[] = { /* X */ 0x0b, 0x55, 0xf9, 0x9a, 0xd9, 0x58, 0xa7, 0x66, 0xea, 0xf5, 0xac, 0x20, 0xa1, 0x27, 0xa4, 0xdf, 0x1b, 0x94, 0x6b, 0xae }; static const uint8_t ac_dsa_vect24_pub_val[] = { /* Y */ 0x50, 0xb0, 0xf7, 0x60, 0x59, 0x11, 0xbc, 0xe6, 0xed, 0x5e, 0xcf, 0xf1, 0xe3, 0xc1, 0x81, 0x6f, 0xbb, 0xf0, 0x3a, 0x14, 0x79, 0xa0, 0x82, 0x06, 0x03, 0xff, 0xa7, 0x15, 0xae, 0xf9, 0xff, 0xbc, 0xcb, 0xd0, 0x67, 0x57, 0x9c, 0xbb, 0xc8, 0xc8, 0x7c, 0x39, 0x2e, 0x85, 0xbb, 0xe9, 0x29, 0xa0, 0xb5, 0xe1, 0x05, 0x9f, 0xaa, 0xe6, 0xf9, 0x12, 0x1d, 0xf4, 0x9c, 0x66, 0xa0, 0x49, 0xa9, 0x8a, 0x90, 0xd8, 0x4c, 0x70, 0xa2, 0x13, 0x12, 0xbf, 0x83, 0x7f, 0x47, 0x23, 0x99, 0x3d, 0x0e, 0xc0, 0xac, 0x4c, 0x2a, 0x7f, 0xfb, 0x9d, 0x40, 0x09, 0x57, 0xb3, 0x9f, 0xb8, 0x3e, 0x95, 0x1e, 0xf4, 0x13, 0x62, 0x45, 0x2c, 0xf4, 0x58, 0xd7, 0x84, 0xc4, 0x3f, 0xe8, 0x22, 0xea, 0x7a, 0x7a, 0xbb, 0xea, 0x0a, 0x69, 0x98, 0x32, 0x1a, 0x93, 0x81, 0x9d, 0x2d, 0x28, 0x2c, 0x78, 0x84, 0xf5, 0xc2 }; /* K = 9e9b9afb43a7157761f6c2011138d2f65ac1cba9 */ static const uint8_t ac_dsa_vect24_out[] = { /* R */ 0x73, 0x99, 0xb1, 0x20, 0xd4, 0xbf, 0xbd, 0x6d, 0xc4, 0x06, 0x4d, 0x2f, 0x3f, 0x8f, 0x0c, 0xa5, 0xc3, 0x62, 0xb2, 0xd8, /* S */ 0x23, 0x02, 0xd8, 0x1d, 0x7e, 0xbb, 0x24, 0x17, 0xee, 0xf4, 0x5d, 0x88, 0x94, 0x1b, 0x07, 0x0e, 0xca, 0xb1, 0x1c, 0xab }; #define ac_dsa_vect25_prime ac_dsa_vect16_prime #define ac_dsa_vect25_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect25_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect25_ptx[] = { /* Msg */ 0xda, 0x91, 0xc6, 0x92, 0xcd, 0xb0, 0xa5, 0x95, 0x62, 0xe2, 0xb6, 0x64, 0xdc, 0xfe, 0x75, 0x54, 0xac, 0x58, 0x9d, 0x57, 0xf8, 0x22, 0x46, 0xc4, 0xa8, 0xa3, 0xf9, 0x57, 0x3b, 0xf4, 0x7b, 0x25, 0x7e, 0xb8, 0xf9, 0x34, 0x47, 0xc1, 0xeb, 0xab, 0x13, 0xdc, 0xe5, 0x3d, 0x6f, 0x44, 0x16, 0xfb, 0x2c, 0x6c, 0x36, 0x30, 0x3e, 0xd9, 0x78, 0x85, 0xcf, 0x7a, 0x6c, 0xae, 0xf0, 0x55, 0xf7, 0xe3, 0x14, 0x5e, 0xf3, 0x83, 0x8c, 0x31, 0x87, 0x7f, 0xad, 0x7a, 0x88, 0x83, 0xff, 0xc8, 0x4e, 0xbd, 0x97, 0x3f, 0x8c, 0x06, 0xd1, 0x7c, 0xdd, 0x33, 0x9b, 0xb3, 0x37, 0x1f, 0x9d, 0x3d, 0x4f, 0x2d, 0x9f, 0x0b, 0x80, 0xae, 0x2b, 0xcc, 0x87, 0x8b, 0x4a, 0xf7, 0x8f, 0x84, 0x5e, 0xac, 0x4f, 0x2a, 0xac, 0xee, 0x6a, 0x94, 0x51, 0xda, 0xf8, 0x14, 0xa4, 0x4e, 0x92, 0x7b, 0xb5, 0x42, 0x88, 0x20 }; static const uint8_t ac_dsa_vect25_priv_val[] = { /* X */ 0xac, 0x70, 0x12, 0x52, 0xc7, 0x73, 0xba, 0x36, 0x71, 0x1b, 0x97, 0x31, 0xaf, 0xdc, 0x07, 0x7c, 0x5d, 0x3f, 0x92, 0x71 }; static const uint8_t ac_dsa_vect25_pub_val[] = { /* Y */ 0x67, 0x8b, 0x39, 0x58, 0xed, 0x24, 0xfc, 0x84, 0x94, 0x20, 0x54, 0xf4, 0x9d, 0x9e, 0x6f, 0x27, 0xbb, 0xac, 0x7d, 0xe3, 0xa4, 0xa5, 0x2a, 0xf9, 0xff, 0xcb, 0x9c, 0xe6, 0xc1, 0xfb, 0x8b, 0xdd, 0x99, 0xdb, 0x0e, 0x80, 0xc8, 0x68, 0xac, 0x54, 0x7c, 0x4c, 0xfc, 0x78, 0x2d, 0xe7, 0xeb, 0xcf, 0x69, 0x43, 0xb2, 0xe4, 0x64, 0x33, 0xc6, 0x70, 0x17, 0x8d, 0xe0, 0x10, 0x4b, 0xd6, 0xfc, 0x25, 0xdc, 0x30, 0x54, 0xdb, 0x9c, 0x48, 0xc1, 0x27, 0x06, 0xe1, 0xde, 0xa3, 0x5e, 0x16, 0x3b, 0xe3, 0x6a, 0x4a, 0xb7, 0x21, 0x95, 0x0c, 0x02, 0x8b, 0x05, 0x46, 0xf1, 0x71, 0x9f, 0xf2, 0xed, 0xd8, 0x1b, 0x2b, 0x79, 0x74, 0xfb, 0x9b, 0x12, 0x12, 0x24, 0xcc, 0xfa, 0xab, 0xc4, 0x7e, 0x9e, 0x62, 0x9a, 0x97, 0xbc, 0x6b, 0xa4, 0x26, 0x91, 0xca, 0x3f, 0x64, 0x9c, 0xca, 0xc4, 0x7d, 0x0f, 0x1e }; /* K = 6cabf2c0e2890b2b393da3ea6aac2782216efa73 */ static const uint8_t ac_dsa_vect25_out[] = { /* R */ 0x6f, 0x15, 0x79, 0xed, 0xcf, 0x43, 0x75, 0x84, 0xd3, 0xe9, 0x39, 0xfa, 0x5b, 0x00, 0x2e, 0xee, 0x83, 0xe3, 0xb6, 0x14, /* S */ 0x71, 0x20, 0x8a, 0x87, 0xa4, 0xcf, 0x2b, 0x3a, 0x9b, 0x65, 0x47, 0x77, 0x73, 0xb0, 0x09, 0x6d, 0x45, 0x2d, 0xae, 0x60 }; #define ac_dsa_vect26_prime ac_dsa_vect16_prime #define ac_dsa_vect26_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect26_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect26_ptx[] = { /* Msg */ 0x0f, 0x2e, 0xdc, 0x87, 0xf4, 0xd2, 0x94, 0x2c, 0x46, 0x93, 0xb0, 0x64, 0xa5, 0x11, 0xb9, 0x3f, 0x79, 0x0c, 0x60, 0xdc, 0x14, 0x9a, 0x1b, 0x0b, 0x70, 0x41, 0xaf, 0x51, 0x83, 0xbc, 0x0f, 0x42, 0x23, 0x41, 0x34, 0xb2, 0x84, 0x27, 0x0e, 0x4c, 0x7e, 0x53, 0x61, 0x4f, 0x7e, 0xcf, 0xe7, 0x11, 0xde, 0x0e, 0xfb, 0x28, 0x33, 0x6d, 0x0b, 0xb3, 0x59, 0xc8, 0x6e, 0x8b, 0xe8, 0x83, 0x9f, 0x58, 0x32, 0x11, 0xe9, 0x17, 0x48, 0x32, 0xb3, 0xd4, 0x1e, 0xe6, 0xd2, 0x18, 0x64, 0xac, 0x61, 0x86, 0xfd, 0x1d, 0xb9, 0x20, 0xdd, 0xa6, 0x5b, 0x25, 0x96, 0x6c, 0x59, 0x51, 0xab, 0x8a, 0x20, 0x50, 0xdd, 0xa8, 0x7d, 0x1d, 0x72, 0xe3, 0x03, 0x28, 0x52, 0xad, 0x43, 0xda, 0x9f, 0xb4, 0x30, 0xe8, 0x50, 0x02, 0x2b, 0x4b, 0xb6, 0xcc, 0x9c, 0xb9, 0x0e, 0x42, 0x8f, 0x3a, 0x5c, 0xa3, 0x2a, 0x62 }; static const uint8_t ac_dsa_vect26_priv_val[] = { /* X */ 0x58, 0x8f, 0x40, 0xe3, 0xeb, 0x81, 0x3c, 0xd2, 0x2a, 0x41, 0xc9, 0xcd, 0xea, 0xdb, 0x68, 0x95, 0xa3, 0x48, 0xdb, 0x3c }; static const uint8_t ac_dsa_vect26_pub_val[] = { /* Y */ 0x3a, 0x97, 0x8e, 0x90, 0x22, 0xa8, 0xf7, 0xa0, 0xca, 0xa9, 0x1f, 0x27, 0x5b, 0xf9, 0xcf, 0x76, 0x48, 0xe1, 0xb9, 0xa3, 0x1a, 0x07, 0x02, 0xd8, 0xac, 0xdb, 0xf5, 0x9a, 0xff, 0xb5, 0x46, 0x7f, 0xb0, 0x7a, 0x8f, 0x7e, 0x5b, 0x4c, 0x86, 0x77, 0x5a, 0xc4, 0xef, 0xb6, 0x09, 0xb9, 0x46, 0xf0, 0x5a, 0x3f, 0x13, 0x03, 0x4d, 0xb9, 0x4a, 0xcc, 0x64, 0x05, 0x7f, 0x90, 0x6d, 0x18, 0x54, 0x91, 0x0d, 0xe5, 0x38, 0xf8, 0x43, 0x67, 0x18, 0x1c, 0x61, 0x8e, 0x96, 0xc3, 0xf9, 0x22, 0x54, 0x7d, 0x40, 0x8e, 0xe6, 0x40, 0x8b, 0x7a, 0x70, 0xac, 0xed, 0xc7, 0x5d, 0xe8, 0xae, 0x44, 0x5c, 0x5d, 0x4d, 0xd5, 0xde, 0xf4, 0xa3, 0x52, 0xd2, 0x52, 0x82, 0x34, 0x07, 0x0c, 0xc7, 0x20, 0x70, 0x0c, 0x14, 0xce, 0x12, 0xd2, 0xf3, 0x69, 0x90, 0xd3, 0x6b, 0x29, 0xd7, 0xb0, 0x05, 0x96, 0xe3, 0x4b }; /* K = 8ac2fe7bcd690a7239d294b22725b818d262a446 */ static const uint8_t ac_dsa_vect26_out[] = { /* R */ 0xb6, 0xea, 0x9c, 0xdb, 0x21, 0x1c, 0x45, 0x60, 0xb3, 0xd5, 0x92, 0xe9, 0x3a, 0xf6, 0xd5, 0xf1, 0x33, 0xb6, 0x4b, 0x9b, /* S */ 0x62, 0x42, 0xe4, 0x5a, 0x47, 0x2f, 0xa8, 0x14, 0x7c, 0xb5, 0x25, 0x3d, 0xbd, 0xde, 0xba, 0xe3, 0x1e, 0xf3, 0x1e, 0x4e }; #define ac_dsa_vect27_prime ac_dsa_vect16_prime #define ac_dsa_vect27_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect27_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect27_ptx[] = { /* Msg */ 0xd1, 0x2f, 0xc1, 0x98, 0x3e, 0x00, 0x95, 0xe9, 0xe2, 0xb6, 0xb8, 0x74, 0x3f, 0xb3, 0x43, 0x86, 0xcc, 0x48, 0x21, 0x54, 0x0e, 0x3e, 0xfe, 0x1a, 0x29, 0xf8, 0x4c, 0xf7, 0xe6, 0x3e, 0x2a, 0x06, 0x68, 0xd5, 0x51, 0xf9, 0x12, 0xad, 0x22, 0x21, 0xb5, 0xa3, 0xd6, 0xb9, 0xeb, 0xd1, 0x21, 0x36, 0xde, 0xf5, 0xe6, 0x69, 0x0e, 0x1d, 0x32, 0xaa, 0xe9, 0x19, 0xf9, 0xf1, 0xcf, 0x5d, 0x24, 0xd6, 0x2a, 0x46, 0xa9, 0xa9, 0xa6, 0x04, 0xba, 0xe1, 0x1b, 0x9c, 0x08, 0x66, 0x35, 0x03, 0x67, 0x20, 0x4a, 0x92, 0x0b, 0x58, 0x9a, 0x31, 0x7d, 0xdf, 0xbb, 0x87, 0x7f, 0x9f, 0xad, 0x6b, 0x0d, 0x36, 0x29, 0xaf, 0x96, 0x35, 0xda, 0x46, 0x93, 0x31, 0x51, 0xc0, 0xd9, 0xa2, 0x0a, 0xaa, 0xbd, 0xdd, 0x3d, 0xf5, 0xd0, 0x49, 0x65, 0x9b, 0x28, 0x60, 0xdd, 0xb8, 0xb2, 0x09, 0x63, 0x26, 0x1e, 0xa0 }; static const uint8_t ac_dsa_vect27_priv_val[] = { /* X */ 0x67, 0xcd, 0x81, 0xc7, 0xd6, 0xac, 0x2d, 0x8b, 0xd4, 0x4e, 0xf2, 0x62, 0x97, 0xac, 0x02, 0xec, 0xba, 0x41, 0xf7, 0x3f }; static const uint8_t ac_dsa_vect27_pub_val[] = { /* Y */ 0x10, 0xb7, 0xb1, 0x4a, 0xd2, 0x9f, 0xb3, 0x4d, 0x7a, 0x39, 0xf3, 0xe9, 0x53, 0x05, 0x1f, 0x45, 0x6a, 0x0c, 0xd1, 0x23, 0x3e, 0xf5, 0x4d, 0x90, 0xa4, 0xad, 0xc8, 0x2d, 0xfb, 0xd9, 0xfa, 0x7a, 0x85, 0x62, 0x8f, 0x11, 0x03, 0x96, 0x32, 0xb4, 0x7b, 0xa9, 0xda, 0xec, 0xa6, 0xe4, 0x63, 0xec, 0x46, 0x44, 0xf5, 0xe2, 0xa2, 0xa4, 0xbf, 0x95, 0xd3, 0x92, 0xe8, 0xc9, 0xc9, 0xf2, 0x87, 0xa2, 0x0b, 0xa4, 0x5a, 0x19, 0x88, 0x15, 0xca, 0x0e, 0x9b, 0xa8, 0x54, 0xd7, 0xf3, 0xc7, 0x9d, 0x90, 0x37, 0xfa, 0x14, 0x17, 0x72, 0x4f, 0xb7, 0xf0, 0x27, 0x99, 0xb1, 0xc2, 0xb2, 0xbc, 0xc7, 0x9d, 0x64, 0x36, 0x7b, 0x90, 0xc0, 0x6d, 0x17, 0x89, 0xdc, 0xc6, 0xde, 0x57, 0xca, 0x19, 0xfc, 0xef, 0xaf, 0xc0, 0x4f, 0xcc, 0xe2, 0x9c, 0x8f, 0x49, 0x5e, 0xd5, 0x64, 0xf5, 0xd9, 0xa1, 0x12, 0xca }; /* K = 1341e376e8919e01991e5e48b8e0c7255929b3d2 */ static const uint8_t ac_dsa_vect27_out[] = { /* R */ 0x36, 0x06, 0x17, 0x96, 0x5f, 0x65, 0xa6, 0x8a, 0xbc, 0xb8, 0x3d, 0xbf, 0x2d, 0x88, 0x6a, 0x1a, 0x10, 0xca, 0x05, 0xde, /* S */ 0x71, 0xab, 0xb6, 0xac, 0xbf, 0x7e, 0x65, 0x3d, 0x2e, 0xbc, 0x3c, 0xb7, 0x14, 0x9b, 0x51, 0xcc, 0x0c, 0x92, 0xfb, 0xa8 }; #define ac_dsa_vect28_prime ac_dsa_vect16_prime #define ac_dsa_vect28_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect28_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect28_ptx[] = { /* Msg */ 0x87, 0xa6, 0xdf, 0xb8, 0x48, 0x7f, 0x16, 0xf6, 0xfe, 0xf1, 0xd6, 0x8b, 0xc3, 0x14, 0x69, 0xac, 0x21, 0x0e, 0xa5, 0x53, 0x87, 0x96, 0x5b, 0xb4, 0x45, 0x8c, 0xa0, 0xd0, 0x0d, 0x6c, 0x46, 0x85, 0x8b, 0xe2, 0x8a, 0x01, 0x9c, 0xe9, 0x14, 0xc3, 0x9c, 0x24, 0x79, 0xf3, 0x21, 0xf0, 0x25, 0x2c, 0xa4, 0xa8, 0xbd, 0x68, 0x1a, 0x5b, 0x35, 0x8a, 0x09, 0x3f, 0xc8, 0x34, 0x1c, 0x31, 0xbc, 0x47, 0xc6, 0x18, 0x40, 0x3f, 0x93, 0x32, 0x2b, 0x44, 0x30, 0x84, 0xce, 0x58, 0x18, 0x49, 0x0b, 0x74, 0xe8, 0x3c, 0x38, 0x66, 0xb8, 0x16, 0x4b, 0xbc, 0xf7, 0x9b, 0xf8, 0x25, 0x39, 0xf4, 0x28, 0xc9, 0x35, 0x1c, 0x40, 0xb1, 0x0d, 0x77, 0x3c, 0xbe, 0x1c, 0xba, 0xa8, 0xc9, 0x80, 0x0a, 0x6d, 0xcf, 0x38, 0xd8, 0x55, 0x15, 0xe2, 0xdf, 0xf5, 0xd4, 0xf8, 0xa9, 0x65, 0xec, 0xae, 0xf3, 0x7e, 0x38 }; static const uint8_t ac_dsa_vect28_priv_val[] = { /* X */ 0x22, 0xbb, 0xb8, 0x46, 0x8f, 0x3e, 0x90, 0x76, 0x8d, 0x34, 0x7c, 0xb3, 0x49, 0x2f, 0x64, 0xdb, 0x2a, 0x23, 0xf7, 0x21 }; static const uint8_t ac_dsa_vect28_pub_val[] = { /* Y */ 0x75, 0xef, 0x5d, 0x5f, 0x67, 0x02, 0x24, 0x26, 0xf5, 0x31, 0xe9, 0xb8, 0xca, 0x91, 0x15, 0x92, 0x1d, 0x5a, 0x5c, 0x44, 0x6b, 0xcd, 0xf1, 0xaf, 0x70, 0x1b, 0x60, 0x5b, 0xae, 0x68, 0x7d, 0xff, 0x8d, 0x1e, 0x7b, 0x3c, 0x4f, 0x8b, 0x28, 0x95, 0x37, 0xeb, 0x09, 0xa7, 0x46, 0x1d, 0x66, 0x88, 0xa3, 0x71, 0x19, 0x74, 0x37, 0x1a, 0x5b, 0x73, 0xa2, 0x08, 0x2e, 0x99, 0x14, 0x10, 0x11, 0x86, 0x66, 0xcc, 0xd9, 0x4f, 0x44, 0x49, 0x77, 0xd0, 0xc8, 0x9b, 0xa3, 0x61, 0x62, 0xde, 0x02, 0x3a, 0xa5, 0x19, 0x03, 0x7a, 0x6b, 0xa6, 0x30, 0x54, 0x17, 0xda, 0xd3, 0xf2, 0xdc, 0x38, 0x75, 0x6a, 0x40, 0x04, 0x64, 0x91, 0xe8, 0xee, 0x80, 0xc4, 0xf1, 0x47, 0x82, 0x5b, 0x8c, 0x02, 0x1b, 0x5d, 0x09, 0xa2, 0x42, 0x2d, 0x39, 0xd7, 0xc4, 0xab, 0xc3, 0x95, 0xf6, 0xc2, 0xd7, 0x90, 0x3c, 0x66 }; /* K = 9c609e56c19f74ddc46eb2e2cfe26b1519ff0d1b */ static const uint8_t ac_dsa_vect28_out[] = { /* R */ 0x54, 0x09, 0xcd, 0x62, 0xf5, 0x53, 0x93, 0x06, 0xae, 0x8c, 0x93, 0x60, 0x82, 0xee, 0xf9, 0x32, 0xc6, 0x50, 0x5c, 0x39, /* S */ 0x07, 0xc0, 0xcc, 0xb3, 0x0e, 0xc9, 0x0b, 0x14, 0x81, 0x40, 0x9c, 0xbf, 0xa2, 0xf5, 0xde, 0x6c, 0xfa, 0xf1, 0xef, 0xc5 }; #define ac_dsa_vect29_prime ac_dsa_vect16_prime #define ac_dsa_vect29_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect29_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect29_ptx[] = { /* Msg */ 0xa3, 0x32, 0xb3, 0x8e, 0x64, 0x2b, 0xca, 0xd8, 0xbd, 0x27, 0x1f, 0x77, 0x6f, 0xff, 0x24, 0xa7, 0x31, 0x72, 0x4a, 0x43, 0x40, 0x0c, 0x16, 0x14, 0xf5, 0xe2, 0x12, 0x96, 0xdb, 0x04, 0xf7, 0x25, 0xee, 0xba, 0xd2, 0x8d, 0x62, 0xe2, 0x0c, 0xa3, 0xf7, 0xf1, 0x83, 0x28, 0xa7, 0x6b, 0x80, 0x92, 0xd9, 0x7b, 0x63, 0x2b, 0xb7, 0x87, 0x18, 0xf0, 0xf2, 0xf9, 0xec, 0xc7, 0xc1, 0x2c, 0xc3, 0x6b, 0x50, 0x59, 0x59, 0x91, 0x7b, 0x5c, 0x54, 0x31, 0x2a, 0xd4, 0x71, 0x7b, 0xe8, 0x4f, 0xa8, 0x40, 0xb9, 0xf0, 0x6d, 0xe0, 0x05, 0xc7, 0x92, 0xaf, 0x3e, 0x9e, 0xa7, 0x2b, 0x7a, 0xe2, 0xe3, 0x42, 0x3d, 0x07, 0xc7, 0x81, 0xc9, 0xc2, 0x55, 0x3f, 0x89, 0x95, 0x54, 0xa0, 0xd8, 0xde, 0xc9, 0xa2, 0x85, 0xc1, 0xee, 0x25, 0x16, 0x0f, 0xa2, 0x78, 0x48, 0x94, 0x74, 0xa0, 0xe4, 0x37, 0x95, 0x16 }; static const uint8_t ac_dsa_vect29_priv_val[] = { /* X */ 0xbb, 0xb1, 0x85, 0x4e, 0x9b, 0x09, 0x42, 0xcb, 0x5d, 0x1e, 0xb7, 0x1e, 0x8c, 0xc6, 0xfc, 0x7e, 0x0f, 0x4c, 0xfc, 0xb5 }; static const uint8_t ac_dsa_vect29_pub_val[] = { /* Y */ 0x41, 0xcc, 0x1d, 0x6d, 0x9e, 0x0c, 0xf5, 0xf1, 0x58, 0xda, 0xb5, 0x99, 0x11, 0x4f, 0x3e, 0xe4, 0x73, 0x8f, 0x19, 0x7c, 0xf2, 0xc9, 0x56, 0xb6, 0xbb, 0x0d, 0xdd, 0x6d, 0xfd, 0xcf, 0x5e, 0x4d, 0xb3, 0x99, 0xaa, 0xcc, 0x16, 0xc5, 0x38, 0x94, 0x8c, 0x4b, 0x50, 0xde, 0x85, 0xba, 0xd6, 0xd9, 0x16, 0xdb, 0xc4, 0x15, 0xba, 0xd2, 0xf6, 0x73, 0x70, 0x23, 0xfc, 0x70, 0x63, 0xc1, 0x33, 0xbd, 0x0c, 0x42, 0x31, 0xd6, 0xb3, 0x3c, 0xe8, 0x13, 0xc0, 0xd6, 0x02, 0x4d, 0x13, 0x15, 0x26, 0x95, 0x71, 0xb2, 0x55, 0x4b, 0xbb, 0x2e, 0xdf, 0x2a, 0x99, 0x10, 0x8a, 0x43, 0x59, 0xe8, 0xe2, 0x3b, 0xf8, 0xa1, 0x43, 0xbf, 0xc5, 0x38, 0xab, 0x9f, 0x88, 0x42, 0xcd, 0x4e, 0x92, 0x59, 0x68, 0xf4, 0x9a, 0xc5, 0x6a, 0x02, 0xe3, 0xf0, 0x67, 0xe2, 0x60, 0x01, 0xe5, 0x20, 0x7b, 0xcb, 0x56, 0xd4 }; /* K = 336e458fc213c0b2775537ae61decc034ccb1d32 */ static const uint8_t ac_dsa_vect29_out[] = { /* R */ 0xa1, 0x6a, 0x73, 0x08, 0xa6, 0x82, 0x4d, 0x92, 0x9b, 0x6a, 0x9a, 0x3b, 0xdb, 0x28, 0x0d, 0x15, 0x1a, 0x6e, 0xed, 0x81, /* S */ 0x7a, 0x42, 0xad, 0xda, 0xb7, 0xdd, 0xb9, 0x80, 0x00, 0x28, 0x60, 0x44, 0xd9, 0x99, 0x3d, 0x5c, 0xf8, 0x18, 0xf2, 0xb1 }; #define ac_dsa_vect30_prime ac_dsa_vect16_prime #define ac_dsa_vect30_sub_prime ac_dsa_vect16_sub_prime #define ac_dsa_vect30_base ac_dsa_vect16_base static const uint8_t ac_dsa_vect30_ptx[] = { /* Msg */ 0x79, 0xb1, 0x44, 0xd5, 0x0e, 0x00, 0x47, 0x59, 0x6c, 0xf0, 0x6b, 0xfc, 0xb3, 0xe9, 0xce, 0x39, 0x59, 0xec, 0x4b, 0x8c, 0xc9, 0xba, 0x01, 0x43, 0x4f, 0xc3, 0xf6, 0x8f, 0x47, 0xc8, 0x68, 0xce, 0xa0, 0x48, 0xb9, 0x90, 0xe6, 0x2c, 0xd7, 0xa5, 0x0e, 0xee, 0x28, 0x8b, 0x35, 0xae, 0x62, 0xaa, 0x79, 0x79, 0x24, 0xc9, 0xdc, 0xab, 0x76, 0x40, 0x9b, 0x86, 0x9b, 0x33, 0xde, 0x28, 0x88, 0x5e, 0x62, 0xf1, 0x7d, 0xb7, 0xa7, 0x75, 0x89, 0x73, 0x48, 0x29, 0x68, 0xb9, 0xf9, 0x60, 0xeb, 0x2d, 0xba, 0x84, 0xae, 0x85, 0x10, 0x1a, 0xa6, 0xc6, 0x14, 0x1b, 0x3f, 0x08, 0x39, 0xa4, 0x18, 0x5a, 0x4c, 0x49, 0x6e, 0xae, 0x87, 0x6e, 0xcd, 0xc4, 0x56, 0x27, 0x33, 0x0d, 0x36, 0xf0, 0x1a, 0x67, 0xcb, 0xb7, 0xfa, 0xef, 0x83, 0x43, 0x57, 0x33, 0x0a, 0xac, 0x36, 0xc7, 0xc6, 0xf4, 0x7a, 0xc9 }; static const uint8_t ac_dsa_vect30_priv_val[] = { /* X */ 0x75, 0x4b, 0x24, 0xea, 0x5c, 0x8c, 0xb8, 0xe8, 0x8e, 0x37, 0x00, 0x74, 0xe7, 0x9c, 0xb6, 0x26, 0x05, 0x53, 0x00, 0x18 }; static const uint8_t ac_dsa_vect30_pub_val[] = { /* Y */ 0x74, 0xdb, 0x74, 0x60, 0xc5, 0x19, 0x19, 0xa9, 0xe8, 0x7b, 0x43, 0x0d, 0x10, 0x5d, 0x86, 0x36, 0x2e, 0xe4, 0xac, 0xd9, 0x68, 0x2b, 0xf6, 0xc9, 0xfe, 0x87, 0xd9, 0x95, 0x6c, 0x2f, 0x5f, 0xf1, 0x7d, 0x95, 0x93, 0x0c, 0xcc, 0x12, 0xf7, 0xe9, 0x2d, 0x8b, 0xcb, 0x6a, 0xf5, 0xf7, 0xef, 0x18, 0x48, 0xda, 0x8d, 0x15, 0xc9, 0x15, 0x20, 0x82, 0x47, 0x7d, 0xe9, 0x95, 0x94, 0x78, 0x1b, 0x99, 0x8d, 0xaa, 0xfb, 0xf8, 0xae, 0x4a, 0xf2, 0x37, 0x72, 0x12, 0x5c, 0x19, 0xe1, 0x66, 0x42, 0x1f, 0x80, 0x6b, 0xd0, 0xfb, 0xea, 0xc3, 0x65, 0x07, 0x6e, 0xcd, 0x9e, 0x15, 0x43, 0x2a, 0xd4, 0xac, 0x25, 0x23, 0x41, 0x8f, 0x6e, 0x41, 0x0c, 0xbf, 0xcb, 0xc5, 0xa7, 0x1a, 0x0e, 0xdf, 0x22, 0xe6, 0x94, 0xa6, 0x7d, 0x14, 0xb9, 0xcf, 0xc9, 0x72, 0x2b, 0xc4, 0xbd, 0x8c, 0x43, 0xe2, 0x2a, 0x91 }; /* K = 1b50341e94f4498b92cce4d17ab9d4016fb2e074 */ static const uint8_t ac_dsa_vect30_out[] = { /* R */ 0x02, 0x1a, 0x3d, 0xe9, 0x8c, 0x3d, 0xa6, 0x98, 0xb4, 0x77, 0xb4, 0xc3, 0xd5, 0x0b, 0x21, 0x69, 0xe6, 0x5f, 0x5e, 0x91, /* S */ 0xaf, 0xd7, 0x64, 0x31, 0x8d, 0xd0, 0xfe, 0xe0, 0x4f, 0xd6, 0xb0, 0x7f, 0x55, 0x03, 0x20, 0x78, 0x9c, 0xd9, 0xbf, 0xa5 }; /* [mod = L=1024, N=160, SHA-256] */ static const uint8_t ac_dsa_vect31_prime[] = { /* P */ 0xcb, 0xa1, 0x3e, 0x53, 0x36, 0x37, 0xc3, 0x7c, 0x0e, 0x80, 0xd9, 0xfc, 0xd0, 0x52, 0xc1, 0xe4, 0x1a, 0x88, 0xac, 0x32, 0x5c, 0x4e, 0xbe, 0x13, 0xb7, 0x17, 0x00, 0x88, 0xd5, 0x4e, 0xef, 0x48, 0x81, 0xf3, 0xd3, 0x5e, 0xae, 0x47, 0xc2, 0x10, 0x38, 0x5a, 0x84, 0x85, 0xd2, 0x42, 0x3a, 0x64, 0xda, 0x3f, 0xfd, 0xa6, 0x3a, 0x26, 0xf9, 0x2c, 0xf5, 0xa3, 0x04, 0xf3, 0x92, 0x60, 0x38, 0x4a, 0x9b, 0x77, 0x59, 0xd8, 0xac, 0x1a, 0xdc, 0x81, 0xd3, 0xf8, 0xbf, 0xc5, 0xe6, 0xcb, 0x10, 0xef, 0xb4, 0xe0, 0xf7, 0x58, 0x67, 0xf4, 0xe8, 0x48, 0xd1, 0xa3, 0x38, 0x58, 0x6d, 0xd0, 0x64, 0x8f, 0xee, 0xb1, 0x63, 0x64, 0x7f, 0xfe, 0x71, 0x76, 0x17, 0x43, 0x70, 0x54, 0x0e, 0xe8, 0xa8, 0xf5, 0x88, 0xda, 0x8c, 0xc1, 0x43, 0xd9, 0x39, 0xf7, 0x0b, 0x11, 0x4a, 0x7f, 0x98, 0x1b, 0x84, 0x83 }; static const uint8_t ac_dsa_vect31_sub_prime[] = { /* Q */ 0x95, 0x03, 0x1b, 0x8a, 0xa7, 0x1f, 0x29, 0xd5, 0x25, 0xb7, 0x73, 0xef, 0x8b, 0x7c, 0x67, 0x01, 0xad, 0x8a, 0x5d, 0x99 }; static const uint8_t ac_dsa_vect31_base[] = { /* G */ 0x45, 0xbc, 0xaa, 0x44, 0x3d, 0x4c, 0xd1, 0x60, 0x2d, 0x27, 0xaa, 0xf8, 0x41, 0x26, 0xed, 0xc7, 0x3b, 0xd7, 0x73, 0xde, 0x6e, 0xce, 0x15, 0xe9, 0x7e, 0x7f, 0xef, 0x46, 0xf1, 0x30, 0x72, 0xb7, 0xad, 0xca, 0xf7, 0xb0, 0x05, 0x3c, 0xf4, 0x70, 0x69, 0x44, 0xdf, 0x8c, 0x45, 0x68, 0xf2, 0x6c, 0x99, 0x7e, 0xe7, 0x75, 0x30, 0x00, 0xfb, 0xe4, 0x77, 0xa3, 0x77, 0x66, 0xa4, 0xe9, 0x70, 0xff, 0x40, 0x00, 0x8e, 0xb9, 0x00, 0xb9, 0xde, 0x4b, 0x5f, 0x9a, 0xe0, 0x6e, 0x06, 0xdb, 0x61, 0x06, 0xe7, 0x87, 0x11, 0xf3, 0xa6, 0x7f, 0xec, 0xa7, 0x4d, 0xd5, 0xbd, 0xdc, 0xdf, 0x67, 0x5a, 0xe4, 0x01, 0x4e, 0xe9, 0x48, 0x9a, 0x42, 0x91, 0x7f, 0xbe, 0xe3, 0xbb, 0x9f, 0x2a, 0x24, 0xdf, 0x67, 0x51, 0x2c, 0x1c, 0x35, 0xc9, 0x7b, 0xfb, 0xf2, 0x30, 0x8e, 0xaa, 0xcd, 0x28, 0x36, 0x8c, 0x5c }; static const uint8_t ac_dsa_vect31_ptx[] = { /* Msg */ 0x81, 0x21, 0x72, 0xf0, 0x9c, 0xba, 0xe6, 0x25, 0x17, 0x80, 0x48, 0x85, 0x75, 0x41, 0x25, 0xfc, 0x60, 0x66, 0xe9, 0xa9, 0x02, 0xf9, 0xdb, 0x20, 0x41, 0xee, 0xdd, 0xd7, 0xe8, 0xda, 0x67, 0xe4, 0xa2, 0xe6, 0x5d, 0x00, 0x29, 0xc4, 0x5e, 0xca, 0xce, 0xa6, 0x00, 0x2f, 0x95, 0x40, 0xeb, 0x10, 0x04, 0xc8, 0x83, 0xa8, 0xf9, 0x00, 0xfd, 0x84, 0xa9, 0x8b, 0x5c, 0x44, 0x9a, 0xc4, 0x9c, 0x56, 0xf3, 0xa9, 0x1d, 0x8b, 0xed, 0x3f, 0x08, 0xf4, 0x27, 0x93, 0x5f, 0xbe, 0x43, 0x7c, 0xe4, 0x6f, 0x75, 0xcd, 0x66, 0x6a, 0x07, 0x07, 0x26, 0x5c, 0x61, 0xa0, 0x96, 0x69, 0x8d, 0xc2, 0xf3, 0x6b, 0x28, 0xc6, 0x5e, 0xc7, 0xb6, 0xe4, 0x75, 0xc8, 0xb6, 0x7d, 0xdf, 0xb4, 0x44, 0xb2, 0xee, 0x6a, 0x98, 0x4e, 0x9d, 0x6d, 0x15, 0x23, 0x3e, 0x25, 0xe4, 0x4b, 0xd8, 0xd7, 0x92, 0x4d, 0x12, 0x9d }; static const uint8_t ac_dsa_vect31_priv_val[] = { /* X */ 0x2e, 0xac, 0x4f, 0x41, 0x96, 0xfe, 0xdb, 0x3e, 0x65, 0x1b, 0x3b, 0x00, 0x04, 0x01, 0x84, 0xcf, 0xd6, 0xda, 0x2a, 0xb4 }; static const uint8_t ac_dsa_vect31_pub_val[] = { /* Y */ 0x4c, 0xd6, 0x17, 0x86, 0x37, 0xd0, 0xf0, 0xde, 0x14, 0x88, 0x51, 0x5c, 0x3b, 0x12, 0xe2, 0x03, 0xa3, 0xc0, 0xca, 0x65, 0x2f, 0x2f, 0xe3, 0x0d, 0x08, 0x8d, 0xc7, 0x27, 0x8a, 0x87, 0xaf, 0xfa, 0x63, 0x4a, 0x72, 0x7a, 0x72, 0x19, 0x32, 0xd6, 0x71, 0x99, 0x4a, 0x95, 0x8a, 0x0f, 0x89, 0x22, 0x3c, 0x28, 0x6c, 0x3a, 0x9b, 0x10, 0xa9, 0x65, 0x60, 0x54, 0x2e, 0x26, 0x26, 0xb7, 0x2e, 0x0c, 0xd2, 0x8e, 0x51, 0x33, 0xfb, 0x57, 0xdc, 0x23, 0x8b, 0x7f, 0xab, 0x2d, 0xe2, 0xa4, 0x98, 0x63, 0xec, 0xf9, 0x98, 0x75, 0x18, 0x61, 0xae, 0x66, 0x8b, 0xf7, 0xca, 0xd1, 0x36, 0xe6, 0x93, 0x3f, 0x57, 0xdf, 0xdb, 0xa5, 0x44, 0xe3, 0x14, 0x7c, 0xe0, 0xe7, 0x37, 0x0f, 0xa6, 0xe8, 0xff, 0x1d, 0xe6, 0x90, 0xc5, 0x1b, 0x4a, 0xee, 0xdf, 0x04, 0x85, 0x18, 0x38, 0x89, 0x20, 0x55, 0x91, 0xe8 }; /* K = 85976c5610a74959531040a5512b347eac587e48 */ static const uint8_t ac_dsa_vect31_out[] = { /* R */ 0x76, 0x68, 0x3a, 0x08, 0x5d, 0x67, 0x42, 0xea, 0xdf, 0x95, 0xa6, 0x1a, 0xf7, 0x5f, 0x88, 0x12, 0x76, 0xcf, 0xd2, 0x6a, /* S */ 0x3b, 0x9d, 0xa7, 0xf9, 0x92, 0x6e, 0xaa, 0xad, 0x0b, 0xeb, 0xd4, 0x84, 0x5c, 0x67, 0xfc, 0xdb, 0x64, 0xd1, 0x24, 0x53 }; #define ac_dsa_vect32_prime ac_dsa_vect31_prime #define ac_dsa_vect32_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect32_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect32_ptx[] = { /* Msg */ 0xc1, 0xb1, 0xf1, 0x47, 0x2f, 0x08, 0xdf, 0x38, 0xa5, 0x2a, 0x55, 0xba, 0x55, 0x82, 0x7b, 0xa3, 0xb7, 0xcd, 0xd6, 0xbe, 0xde, 0xd9, 0x04, 0xfc, 0xd5, 0x26, 0x10, 0xc8, 0x99, 0xed, 0xa3, 0xc6, 0x16, 0x82, 0x65, 0x68, 0x73, 0xbb, 0xfa, 0xab, 0x0d, 0x90, 0x74, 0x95, 0xda, 0xcf, 0x45, 0x8e, 0xa3, 0x45, 0x0a, 0xfd, 0x93, 0xbe, 0x96, 0x7a, 0x37, 0x43, 0x4d, 0x41, 0x2b, 0x63, 0x25, 0x66, 0x9a, 0xd8, 0x4b, 0x4e, 0xaa, 0x27, 0x8a, 0x24, 0x87, 0x0e, 0xcc, 0x2d, 0xf0, 0xda, 0x13, 0xad, 0x52, 0x6a, 0x9e, 0x66, 0x69, 0x95, 0x8d, 0x4e, 0x52, 0xdb, 0xfb, 0xa2, 0x80, 0x3a, 0xe9, 0xae, 0x13, 0x5d, 0x0c, 0x0a, 0xcc, 0xa8, 0x6a, 0x04, 0xc4, 0x2b, 0xa9, 0xca, 0xfb, 0x09, 0xb7, 0xaf, 0x96, 0x34, 0x71, 0x88, 0x88, 0x0b, 0x08, 0x61, 0x69, 0xeb, 0xdf, 0x9f, 0x1f, 0x5f, 0x31, 0x73 }; static const uint8_t ac_dsa_vect32_priv_val[] = { /* X */ 0x1a, 0x22, 0x05, 0x85, 0xa9, 0x89, 0xef, 0x2c, 0x12, 0xbb, 0xfa, 0x9f, 0xc0, 0xd2, 0x58, 0x71, 0x35, 0x56, 0xfe, 0x38 }; static const uint8_t ac_dsa_vect32_pub_val[] = { /* Y */ 0x99, 0x18, 0x74, 0x98, 0x53, 0x4f, 0x31, 0x3d, 0xc7, 0xcd, 0x7f, 0x3a, 0x48, 0xd6, 0x2b, 0x23, 0x35, 0xbc, 0xdc, 0x36, 0xf0, 0xdc, 0x98, 0xdb, 0xf8, 0x45, 0xdc, 0x60, 0x85, 0xc2, 0x67, 0x47, 0x4c, 0x36, 0xfd, 0xfc, 0xa3, 0x88, 0x54, 0x21, 0x98, 0x30, 0xe6, 0x14, 0xbb, 0xca, 0xb2, 0xbb, 0x9d, 0xec, 0xb8, 0x1e, 0x86, 0x12, 0x4b, 0xd7, 0x8f, 0x86, 0xd4, 0x71, 0xbd, 0x84, 0xbe, 0x06, 0xac, 0x1f, 0x0f, 0x41, 0xfe, 0x5b, 0x4b, 0x37, 0x40, 0xb2, 0x10, 0x7e, 0x0c, 0x9c, 0x48, 0xf8, 0x1e, 0x31, 0xe9, 0xbf, 0x55, 0x0d, 0x96, 0x56, 0x4d, 0xd3, 0x80, 0xca, 0x47, 0xa1, 0x1d, 0x72, 0xf0, 0xd0, 0xa3, 0x27, 0x5f, 0x07, 0x5f, 0x95, 0xbb, 0xd5, 0x98, 0x69, 0xc1, 0x4d, 0xc9, 0x12, 0xa1, 0xcb, 0xcf, 0x01, 0xdb, 0x9f, 0xb7, 0xf7, 0x10, 0x15, 0xcc, 0x14, 0x99, 0x86, 0x82, 0x5e }; /* K = 8fef50b7121a04a24755b6f3e1cdc93848a9081c */ static const uint8_t ac_dsa_vect32_out[] = { /* R */ 0x54, 0xed, 0x4e, 0xfa, 0xec, 0xdf, 0xc7, 0x8d, 0x02, 0x64, 0x71, 0xb6, 0x5c, 0xfe, 0xfc, 0x65, 0x29, 0x94, 0x5b, 0xbf, /* S */ 0x6d, 0x6d, 0xac, 0x29, 0x6e, 0xbd, 0xe3, 0xf8, 0x73, 0xb7, 0x51, 0xc6, 0xb1, 0x48, 0x43, 0xf0, 0xb7, 0xbe, 0xfd, 0xff }; #define ac_dsa_vect33_prime ac_dsa_vect31_prime #define ac_dsa_vect33_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect33_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect33_ptx[] = { /* Msg */ 0xb8, 0x0a, 0x47, 0x07, 0x1d, 0x13, 0x76, 0xfe, 0x61, 0x7e, 0x59, 0xfd, 0xc0, 0x05, 0xa8, 0x90, 0x36, 0x9a, 0x4c, 0xa5, 0xe6, 0x78, 0xff, 0x46, 0xeb, 0x9b, 0x20, 0x5d, 0x6e, 0xc0, 0x9c, 0xbd, 0x49, 0x37, 0x3b, 0xb3, 0x41, 0xfe, 0x78, 0x13, 0xee, 0x44, 0x2a, 0x6e, 0xce, 0x17, 0xe7, 0x20, 0xbf, 0x71, 0xa7, 0x45, 0x57, 0xac, 0x9a, 0x37, 0x5c, 0x05, 0x9e, 0x55, 0x35, 0xe7, 0x73, 0xa4, 0x5e, 0x79, 0xe1, 0xbf, 0xf3, 0x46, 0x5a, 0x38, 0x86, 0xc8, 0x6e, 0x2a, 0x2b, 0xc8, 0x82, 0xf0, 0xbe, 0xce, 0xef, 0xff, 0xb2, 0xae, 0x1a, 0x52, 0x2f, 0x13, 0xc8, 0x2d, 0xef, 0x4c, 0xfd, 0x0c, 0xfc, 0xa6, 0xfc, 0xee, 0xb4, 0xce, 0xce, 0x71, 0x86, 0x9e, 0x90, 0xcd, 0x10, 0xd0, 0xaf, 0xf2, 0x7a, 0x84, 0xb5, 0x60, 0x1d, 0xaa, 0xe0, 0x61, 0xcb, 0xeb, 0x3a, 0xa6, 0x2b, 0x37, 0xfd, 0x3a }; static const uint8_t ac_dsa_vect33_priv_val[] = { /* X */ 0x42, 0x47, 0xe7, 0xe4, 0xdc, 0x42, 0x70, 0xfc, 0x76, 0x80, 0xbc, 0x05, 0x74, 0x68, 0x07, 0xc1, 0x83, 0xe0, 0xdd, 0x98 }; static const uint8_t ac_dsa_vect33_pub_val[] = { /* Y */ 0x91, 0xf5, 0x02, 0x70, 0xa7, 0x54, 0x05, 0x5e, 0x5d, 0xa6, 0x11, 0xc7, 0x20, 0xa4, 0x26, 0x2f, 0x3c, 0xb8, 0xbd, 0x41, 0x61, 0xf7, 0x7d, 0x07, 0x40, 0x16, 0x04, 0xd3, 0xd1, 0x16, 0x5e, 0x45, 0x51, 0x8f, 0x7e, 0x19, 0x01, 0xad, 0xef, 0x66, 0x28, 0xf2, 0x3d, 0xc4, 0x82, 0x71, 0xd3, 0x5f, 0xf4, 0x92, 0xaf, 0x8d, 0x62, 0xaa, 0x53, 0x8c, 0x0e, 0x77, 0xe0, 0x42, 0xf2, 0x3a, 0x52, 0x2f, 0x22, 0x14, 0xe6, 0x21, 0x14, 0xbf, 0xee, 0xa4, 0x6a, 0xe8, 0x88, 0x8b, 0xda, 0xda, 0xcd, 0xaa, 0x0a, 0x9a, 0x5b, 0x50, 0x3d, 0x79, 0xc2, 0x3e, 0x4c, 0x20, 0xc9, 0x8b, 0xd4, 0xeb, 0xb3, 0x6f, 0x95, 0xbf, 0x44, 0x51, 0xcc, 0xb0, 0xb5, 0xbb, 0x44, 0xdf, 0xd0, 0x11, 0x34, 0x1c, 0xfa, 0x29, 0xa9, 0xe1, 0x56, 0xa3, 0xcd, 0x82, 0x8e, 0x12, 0x6e, 0x68, 0xcb, 0x91, 0x1e, 0x8f, 0x9d, 0xc0 }; /* K = 3aeb3383a3c0f53217c0d7077c3cd66d2ef74a2e */ static const uint8_t ac_dsa_vect33_out[] = { /* R */ 0x1f, 0xc2, 0xd1, 0xcb, 0x80, 0xbf, 0x6e, 0x0e, 0x78, 0xb2, 0x5f, 0xac, 0x29, 0x3b, 0x75, 0x2c, 0xbf, 0xf2, 0xb5, 0xac, /* S */ 0x75, 0xbc, 0xc7, 0x72, 0xf7, 0x73, 0xd5, 0xfd, 0x98, 0xdd, 0xe1, 0xf9, 0x07, 0xe7, 0xec, 0x2c, 0xba, 0x20, 0x1d, 0xfb }; #define ac_dsa_vect34_prime ac_dsa_vect31_prime #define ac_dsa_vect34_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect34_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect34_ptx[] = { /* Msg */ 0xa9, 0x60, 0x30, 0x54, 0x46, 0x58, 0x87, 0xdf, 0x15, 0xdb, 0x07, 0xc0, 0x70, 0x9a, 0x8c, 0x87, 0x8d, 0x2f, 0x1a, 0xbd, 0xcf, 0xc6, 0x19, 0x5e, 0xab, 0xf3, 0xe9, 0xb3, 0xad, 0x07, 0xe8, 0x55, 0x8b, 0x99, 0xcc, 0x4a, 0x7a, 0xa0, 0x76, 0xda, 0xf6, 0x7e, 0x9b, 0x7d, 0x84, 0x80, 0xf1, 0x1e, 0x8a, 0xfb, 0x18, 0xe2, 0xac, 0x56, 0xa9, 0x54, 0x7b, 0x48, 0x45, 0x3f, 0xed, 0xca, 0x32, 0xda, 0x9e, 0xb0, 0xc2, 0x92, 0x71, 0xeb, 0x60, 0xf0, 0xa1, 0xd9, 0x5c, 0x18, 0xf4, 0x2d, 0x99, 0x23, 0x94, 0xb3, 0x26, 0x4f, 0xf3, 0xe2, 0x1e, 0x60, 0x6e, 0x0b, 0xea, 0xc0, 0x8a, 0x7b, 0xa7, 0x1b, 0x8e, 0x57, 0x95, 0xa8, 0xda, 0x98, 0x51, 0x18, 0xe4, 0x32, 0xcf, 0x5b, 0x30, 0xb6, 0xcd, 0x3a, 0x60, 0x3d, 0x8b, 0x0d, 0x58, 0x0f, 0x06, 0xc6, 0x26, 0xee, 0x93, 0x7c, 0x6c, 0xd0, 0x5f, 0x40 }; static const uint8_t ac_dsa_vect34_priv_val[] = { /* X */ 0x4d, 0x2a, 0x54, 0x62, 0xeb, 0xcc, 0xc5, 0xd1, 0x9b, 0xc6, 0xc1, 0xca, 0xbb, 0x60, 0x9c, 0x08, 0xad, 0x08, 0x8e, 0x08 }; static const uint8_t ac_dsa_vect34_pub_val[] = { /* Y */ 0xa2, 0xc4, 0x56, 0x9a, 0x30, 0x14, 0x73, 0xae, 0x4f, 0x16, 0x4d, 0x68, 0xb9, 0xa3, 0xc6, 0xeb, 0x70, 0x5a, 0xe8, 0x1f, 0x75, 0xd6, 0xe5, 0xcc, 0x30, 0x70, 0xa5, 0x59, 0xcc, 0xcb, 0x8b, 0x1a, 0x2d, 0x8c, 0x21, 0x09, 0x0e, 0xd7, 0x0e, 0x61, 0x67, 0x0c, 0x7e, 0x9d, 0xbf, 0x5f, 0x75, 0x5a, 0x37, 0xd5, 0x8d, 0x3a, 0xbb, 0x34, 0xc2, 0xdf, 0xd4, 0x0d, 0xb9, 0xf2, 0x6f, 0x68, 0x68, 0xd0, 0xdd, 0x91, 0xbe, 0x98, 0xf3, 0x95, 0xac, 0x0e, 0xbd, 0xc3, 0x7e, 0x1b, 0x54, 0x23, 0x80, 0x2b, 0xea, 0x7a, 0x6c, 0xb1, 0x96, 0xd7, 0xe0, 0xf9, 0x3d, 0xb9, 0x2f, 0x66, 0x3b, 0x6c, 0x9c, 0x72, 0x6e, 0x80, 0xfe, 0xb2, 0xe9, 0x22, 0x71, 0x54, 0xce, 0x1c, 0x15, 0xf8, 0xe8, 0xdf, 0x93, 0xec, 0x0d, 0x37, 0xfa, 0x47, 0xe5, 0xfa, 0x11, 0x2b, 0xb0, 0xa4, 0x8f, 0x4a, 0x23, 0x9d, 0x60, 0x52 }; /* K = 36a3cd0101358a4d30c5b7117bc239fb4f6ce2e7 */ static const uint8_t ac_dsa_vect34_out[] = { /* R */ 0x48, 0x53, 0x95, 0x23, 0x81, 0x5b, 0xd8, 0xd7, 0x3c, 0xe7, 0x02, 0x36, 0x7c, 0x77, 0x12, 0xb9, 0xb1, 0x38, 0x67, 0xf2, /* S */ 0x20, 0xff, 0x4c, 0xfe, 0xf8, 0xa6, 0x68, 0x82, 0x9f, 0xea, 0xe7, 0x3b, 0x52, 0x0e, 0x8a, 0xa4, 0xd0, 0x2c, 0x81, 0x68 }; #define ac_dsa_vect35_prime ac_dsa_vect31_prime #define ac_dsa_vect35_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect35_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect35_ptx[] = { /* Msg */ 0x19, 0xeb, 0x08, 0x8c, 0x32, 0x29, 0xa4, 0x4f, 0x95, 0x86, 0xf0, 0x04, 0x21, 0xcf, 0xe7, 0x42, 0x3a, 0x48, 0x6d, 0x5f, 0x7e, 0x28, 0xad, 0x2c, 0x91, 0x19, 0xdd, 0x2e, 0x13, 0x95, 0xdf, 0x1a, 0xcc, 0x06, 0xcb, 0x28, 0xe9, 0x06, 0x9c, 0xee, 0x62, 0xf0, 0x9f, 0x48, 0xe4, 0xca, 0x29, 0x26, 0x9d, 0xd8, 0x9d, 0xf9, 0xfe, 0xc1, 0xff, 0xdf, 0x64, 0xb1, 0xfe, 0x27, 0x17, 0xfe, 0x52, 0xb1, 0x42, 0x1f, 0xcf, 0x6c, 0x70, 0x5c, 0x0c, 0xf3, 0x99, 0x30, 0xf9, 0x0e, 0xcb, 0x33, 0x9b, 0x51, 0xef, 0x95, 0xb2, 0xef, 0x38, 0xa6, 0xd9, 0x6a, 0x57, 0x5f, 0x7b, 0x36, 0xf5, 0xed, 0xf4, 0xf2, 0xcb, 0xd6, 0xd2, 0x61, 0xe1, 0xfd, 0xd7, 0x7d, 0x44, 0x59, 0x28, 0x8c, 0x02, 0xe6, 0x8c, 0x82, 0xa3, 0x91, 0x0f, 0xf8, 0xca, 0x17, 0x47, 0xc8, 0x6b, 0xb1, 0x87, 0xd5, 0x20, 0x5f, 0x51, 0xa8 }; static const uint8_t ac_dsa_vect35_priv_val[] = { /* X */ 0x08, 0x42, 0xdd, 0xd5, 0xa0, 0x41, 0x61, 0xe4, 0x57, 0x97, 0x97, 0xb5, 0xd8, 0xed, 0xa0, 0x00, 0x2d, 0xd8, 0x47, 0xad }; static const uint8_t ac_dsa_vect35_pub_val[] = { /* Y */ 0x49, 0xe6, 0x06, 0xaa, 0xd5, 0xd2, 0xe5, 0x4e, 0x1b, 0xae, 0x25, 0x17, 0x91, 0x5c, 0x66, 0x0b, 0xa3, 0x0e, 0xc4, 0xfd, 0x28, 0xd7, 0x18, 0x61, 0x3a, 0x7c, 0x84, 0x46, 0x4b, 0x0f, 0x44, 0xbc, 0x6d, 0x54, 0x6e, 0x5a, 0x9b, 0xc1, 0xdc, 0x60, 0x42, 0x3b, 0x45, 0xdd, 0x01, 0xec, 0x29, 0x55, 0x64, 0xec, 0x08, 0xf2, 0x9d, 0x68, 0x87, 0xe6, 0x9f, 0x68, 0x9d, 0x6b, 0x34, 0x88, 0xf9, 0xda, 0x5d, 0x5a, 0x60, 0xf3, 0x9c, 0xdd, 0x5a, 0x15, 0x8d, 0x51, 0xa3, 0xd0, 0x73, 0xb2, 0x22, 0x5f, 0xea, 0x55, 0x9e, 0x58, 0xbb, 0x22, 0x2e, 0x29, 0xa8, 0x7b, 0x5f, 0x0f, 0x5a, 0xb3, 0x1d, 0xd7, 0xc0, 0xce, 0xaa, 0xd8, 0x87, 0x07, 0x0d, 0xac, 0x95, 0x5d, 0x28, 0x97, 0x36, 0x07, 0xa9, 0x9e, 0x46, 0xdd, 0xd7, 0x73, 0x7b, 0xea, 0xb6, 0x51, 0x99, 0xf2, 0x50, 0xd7, 0xf0, 0x3b, 0x65, 0x83 }; /* K = 712eed73c8d2567809b4d9ec2f59e77d39290b2b */ static const uint8_t ac_dsa_vect35_out[] = { /* R */ 0x6b, 0xf4, 0xf5, 0xd3, 0x25, 0x12, 0x01, 0x05, 0x9e, 0xe8, 0x5e, 0xdb, 0x99, 0xa6, 0x7a, 0x70, 0x6f, 0x37, 0x19, 0x7d, /* S */ 0x31, 0x25, 0xc5, 0xaf, 0x39, 0x77, 0x59, 0x99, 0x6b, 0x87, 0x6c, 0xb5, 0x85, 0x7b, 0xe2, 0x63, 0x2a, 0xaa, 0xf3, 0xb6 }; #define ac_dsa_vect36_prime ac_dsa_vect31_prime #define ac_dsa_vect36_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect36_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect36_ptx[] = { /* Msg */ 0xad, 0xdb, 0x5a, 0x04, 0x5c, 0x9f, 0x4f, 0x4f, 0xb9, 0xeb, 0x5e, 0x5d, 0xb4, 0x4d, 0x65, 0x15, 0x98, 0x0c, 0x9e, 0x08, 0x80, 0x15, 0xb6, 0x85, 0x93, 0xd8, 0xbc, 0xbf, 0xfc, 0x6f, 0xf5, 0x7f, 0x18, 0x86, 0x5a, 0xb8, 0x24, 0xd3, 0xd1, 0x58, 0x64, 0x25, 0xcb, 0x50, 0x81, 0x19, 0x7e, 0x9e, 0x01, 0xcb, 0x72, 0x97, 0xb0, 0x6b, 0x64, 0x10, 0x3c, 0xea, 0x43, 0x7e, 0xee, 0xec, 0x9c, 0x50, 0x79, 0x86, 0x79, 0xfb, 0x86, 0x9e, 0xc3, 0x06, 0xa7, 0x25, 0x75, 0x05, 0x7f, 0xd3, 0x68, 0xae, 0xb0, 0xf6, 0x74, 0xa2, 0x9c, 0x3a, 0xc2, 0x48, 0xb6, 0xa0, 0x8f, 0x91, 0x33, 0x1d, 0x84, 0x56, 0xd0, 0x62, 0x02, 0x53, 0x47, 0xc1, 0x2a, 0x0a, 0x61, 0xc6, 0x1f, 0x76, 0xe5, 0x20, 0x6f, 0xe6, 0xca, 0x43, 0x77, 0x35, 0xaf, 0x43, 0x0d, 0xea, 0x7c, 0xc8, 0xf3, 0x9f, 0x1a, 0x5b, 0x75, 0x05 }; static const uint8_t ac_dsa_vect36_priv_val[] = { /* X */ 0x1f, 0x1c, 0xfc, 0x68, 0x20, 0x48, 0x37, 0x59, 0x15, 0xfb, 0x48, 0x3b, 0x77, 0x03, 0x7c, 0x81, 0xc0, 0x5e, 0xd7, 0x28 }; static const uint8_t ac_dsa_vect36_pub_val[] = { /* Y */ 0x22, 0x1c, 0xed, 0x57, 0xa9, 0x13, 0x25, 0xb1, 0x0f, 0x8d, 0xcd, 0x12, 0x20, 0xb1, 0xaf, 0x68, 0xf8, 0xda, 0xf3, 0x97, 0xf4, 0x19, 0xa4, 0x3b, 0xbd, 0x8f, 0xbe, 0x64, 0x43, 0x11, 0x75, 0x5b, 0x11, 0x1a, 0xae, 0x52, 0x57, 0xc6, 0x42, 0xfa, 0xfd, 0x83, 0xb0, 0x47, 0xa1, 0xf5, 0x6f, 0x2a, 0x82, 0x9f, 0xcd, 0xf4, 0xdf, 0x3e, 0x5d, 0xcc, 0xb2, 0x36, 0x45, 0xb2, 0x8c, 0x0a, 0x34, 0xc6, 0xe8, 0xa6, 0x50, 0xef, 0xcd, 0xfa, 0xdd, 0x48, 0xfe, 0xa4, 0x67, 0xcc, 0x94, 0x3c, 0xa4, 0xe7, 0x37, 0x88, 0x29, 0x30, 0x07, 0x13, 0x83, 0x8b, 0x6c, 0x71, 0x09, 0x62, 0xba, 0x72, 0xe7, 0x90, 0xc1, 0x0a, 0xb8, 0x79, 0xa0, 0x1f, 0xe1, 0x45, 0x7e, 0xa3, 0xdd, 0x4b, 0x7c, 0x3c, 0x3a, 0x54, 0x2e, 0x35, 0x22, 0xa7, 0x5d, 0x0d, 0xb2, 0x61, 0xe5, 0x76, 0xcd, 0x3f, 0x22, 0xc9, 0x98, 0xe4 }; /* K = 703154f6c6e12f163ecad0494897dfcf5657fbe2 */ static const uint8_t ac_dsa_vect36_out[] = { /* R */ 0x7c, 0xc6, 0x62, 0xe3, 0x52, 0xe0, 0xee, 0xde, 0x85, 0x14, 0x01, 0x07, 0xa7, 0x77, 0x3a, 0xd8, 0x66, 0x3e, 0x70, 0xbd, /* S */ 0x15, 0xc1, 0x7b, 0x9d, 0x24, 0x58, 0x72, 0x84, 0x4e, 0xaa, 0xc3, 0xd4, 0x6b, 0xb0, 0x8c, 0x3e, 0x08, 0x59, 0x74, 0x23 }; #define ac_dsa_vect37_prime ac_dsa_vect31_prime #define ac_dsa_vect37_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect37_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect37_ptx[] = { /* Msg */ 0x02, 0x70, 0x9d, 0x2b, 0xe0, 0xd9, 0xdc, 0x1d, 0xc0, 0xeb, 0xc5, 0x5f, 0x63, 0x0d, 0x91, 0xfa, 0x23, 0x60, 0x9f, 0x61, 0xb5, 0x13, 0xc2, 0x27, 0x57, 0x66, 0x03, 0x4d, 0x8f, 0x40, 0xe8, 0x19, 0xaa, 0xf9, 0x32, 0x6c, 0x8d, 0xb3, 0x7c, 0x35, 0xc5, 0xa1, 0x7e, 0x96, 0xbc, 0x95, 0x6d, 0xf6, 0xd1, 0x1b, 0x55, 0x8d, 0x16, 0xd9, 0x18, 0x71, 0xaf, 0xc0, 0x10, 0xb3, 0x11, 0x9c, 0x57, 0x98, 0xc2, 0xe2, 0x94, 0x11, 0xff, 0x4f, 0x0d, 0x71, 0x96, 0xe7, 0xe4, 0x76, 0xbf, 0x0a, 0xd0, 0x3b, 0xf7, 0x2e, 0x89, 0x7f, 0xed, 0x87, 0x3c, 0x10, 0x61, 0x3d, 0xd2, 0x55, 0xd1, 0x52, 0x43, 0x87, 0x0b, 0x81, 0xcd, 0x87, 0xd0, 0xab, 0xc1, 0x6e, 0x14, 0x0d, 0x03, 0x2f, 0xe5, 0xbd, 0x1c, 0x8e, 0xeb, 0x2f, 0x66, 0xe0, 0x4d, 0x13, 0xd4, 0x92, 0x69, 0xfc, 0x7d, 0xa6, 0xb6, 0x5a, 0x7c, 0x1c }; static const uint8_t ac_dsa_vect37_priv_val[] = { /* X */ 0x1d, 0x9c, 0xf9, 0x8d, 0xc0, 0xc1, 0xd7, 0xbf, 0x8d, 0xec, 0x98, 0x96, 0x2a, 0xc6, 0xef, 0x6e, 0x94, 0x06, 0xce, 0x76 }; static const uint8_t ac_dsa_vect37_pub_val[] = { /* Y */ 0x9e, 0x93, 0xbc, 0x03, 0xe6, 0xe8, 0x15, 0x30, 0x87, 0x34, 0xe3, 0xb8, 0xf1, 0xd1, 0x06, 0x96, 0x1b, 0xeb, 0xdf, 0xf1, 0x0a, 0x52, 0x53, 0x03, 0x25, 0x7a, 0x05, 0x3d, 0xea, 0x4d, 0xa6, 0xdc, 0xf5, 0x04, 0xc7, 0x83, 0x9b, 0x54, 0xd5, 0x75, 0x22, 0xf2, 0xac, 0xb3, 0xaa, 0xc9, 0x59, 0xff, 0x4a, 0xe8, 0x61, 0x00, 0x22, 0xca, 0x5a, 0x1e, 0x68, 0x82, 0x32, 0x33, 0x6c, 0xa1, 0xee, 0x8f, 0xd7, 0x02, 0x8b, 0xf7, 0xb6, 0xe9, 0xee, 0xdf, 0x8a, 0x4b, 0x0d, 0x09, 0x89, 0x69, 0xf5, 0xe5, 0xfd, 0x3d, 0x93, 0x00, 0xc3, 0x40, 0xe7, 0xf1, 0x9f, 0xd4, 0x71, 0xa4, 0x51, 0xaf, 0xb9, 0x2e, 0xd4, 0x82, 0x9f, 0xa4, 0xd9, 0x02, 0x49, 0x14, 0x4a, 0xa3, 0x63, 0xdc, 0x18, 0x80, 0x7b, 0x3e, 0x29, 0xd2, 0x7e, 0x6e, 0xc3, 0xda, 0x73, 0x6c, 0x33, 0xb1, 0x85, 0x51, 0x1b, 0xb3, 0xaa, 0xa0 }; /* K = 68ae16534c5f6225fc7ef980f0063de483a76903 */ static const uint8_t ac_dsa_vect37_out[] = { /* R */ 0x72, 0xb0, 0xbc, 0xc6, 0xde, 0xfa, 0x66, 0xfa, 0x8b, 0xab, 0x02, 0x96, 0x76, 0xa1, 0xc7, 0x70, 0x3f, 0x96, 0x08, 0xf2, /* S */ 0x69, 0xd9, 0x11, 0xe0, 0x5a, 0xcd, 0x7b, 0xe5, 0x2f, 0x28, 0x34, 0xc0, 0xaa, 0x00, 0x51, 0x28, 0xe7, 0xfa, 0x85, 0xb8 }; #define ac_dsa_vect38_prime ac_dsa_vect31_prime #define ac_dsa_vect38_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect38_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect38_ptx[] = { /* Msg */ 0xcc, 0x06, 0x1e, 0xdb, 0x31, 0xc3, 0x4d, 0x39, 0x81, 0x51, 0x7f, 0x4d, 0x89, 0xaf, 0xbe, 0x98, 0x0f, 0x74, 0x18, 0x52, 0x60, 0xcf, 0x48, 0xb3, 0x04, 0x3b, 0xc1, 0x3a, 0x14, 0x49, 0x44, 0xad, 0x43, 0xe0, 0xe5, 0x76, 0xd2, 0xa5, 0x8b, 0xf5, 0x89, 0xcc, 0x02, 0x1d, 0xc1, 0xc1, 0xd3, 0x32, 0xc4, 0xd7, 0x68, 0x96, 0xea, 0x77, 0xdd, 0xa1, 0x97, 0xf6, 0x83, 0xe5, 0x1e, 0xed, 0x71, 0xb4, 0xd6, 0xdf, 0x46, 0x66, 0x6a, 0x1b, 0x14, 0x2e, 0x67, 0x9b, 0x02, 0x83, 0xcf, 0x33, 0x9e, 0x5b, 0xca, 0x90, 0xe2, 0xff, 0x9c, 0x34, 0xdd, 0x5f, 0xd7, 0xcc, 0x49, 0x17, 0xd6, 0x67, 0x04, 0xfe, 0xe4, 0x36, 0x4f, 0x76, 0x93, 0x10, 0x1d, 0xc7, 0x66, 0x70, 0x71, 0x04, 0xef, 0xb2, 0xb9, 0x33, 0xc4, 0x84, 0x8b, 0x93, 0xe1, 0x3f, 0x94, 0x85, 0x5f, 0x75, 0xe4, 0xfd, 0x75, 0x6c, 0xb6, 0xe3 }; static const uint8_t ac_dsa_vect38_priv_val[] = { /* X */ 0x78, 0xff, 0xb4, 0x0f, 0xd8, 0x94, 0x16, 0x38, 0x88, 0x04, 0xe5, 0x64, 0x44, 0xc9, 0xa6, 0x42, 0xcb, 0x5e, 0x98, 0xe8 }; static const uint8_t ac_dsa_vect38_pub_val[] = { /* Y */ 0x5d, 0x7d, 0x2e, 0x34, 0x21, 0x54, 0x98, 0x3e, 0xbc, 0x20, 0x15, 0xbc, 0x67, 0x50, 0xf9, 0x87, 0x6f, 0x56, 0x89, 0xca, 0x0a, 0xda, 0x85, 0x29, 0x90, 0x8e, 0xd4, 0xfd, 0xbc, 0x59, 0x6b, 0x97, 0x2c, 0x5c, 0xc6, 0xd5, 0x3e, 0x80, 0xa8, 0xad, 0x8a, 0x8c, 0xed, 0xf3, 0xce, 0x64, 0xb6, 0x2a, 0x75, 0xdb, 0x44, 0x1c, 0x96, 0x20, 0x7f, 0xc7, 0x47, 0x7e, 0x3f, 0x7b, 0x9f, 0x10, 0xdf, 0x28, 0xe0, 0xcc, 0x2f, 0xb7, 0x73, 0x83, 0xe7, 0xca, 0x4c, 0x51, 0x50, 0xf7, 0x12, 0xdd, 0x82, 0x3c, 0x23, 0x09, 0xf0, 0x16, 0x1b, 0xe0, 0xbd, 0x5e, 0xed, 0xd6, 0x0c, 0xf6, 0xba, 0x23, 0x08, 0x61, 0xa0, 0x8b, 0x9d, 0x9a, 0x74, 0x68, 0x43, 0x8b, 0x4d, 0x6e, 0xc6, 0x73, 0xd2, 0x8a, 0x54, 0xd8, 0x3c, 0x70, 0x10, 0xd5, 0x06, 0x31, 0xe5, 0x5f, 0x0a, 0x02, 0x83, 0x2a, 0xbc, 0x5a, 0x0a, 0x46 }; /* K = 07c6857486160ef4003470411573399fc4e5f7af */ static const uint8_t ac_dsa_vect38_out[] = { /* R */ 0x21, 0xf5, 0x12, 0x42, 0x56, 0x70, 0x94, 0x34, 0x77, 0x53, 0x4e, 0x90, 0x75, 0xce, 0xb5, 0xb7, 0xd6, 0x3f, 0x20, 0xdf, /* S */ 0x73, 0xc6, 0xf6, 0xf8, 0xde, 0x3a, 0xae, 0xa5, 0x20, 0xa0, 0x83, 0xb2, 0x26, 0x42, 0x99, 0xe8, 0x1c, 0xfc, 0x91, 0xc5 }; #define ac_dsa_vect39_prime ac_dsa_vect31_prime #define ac_dsa_vect39_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect39_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect39_ptx[] = { /* Msg */ 0x79, 0xd5, 0x29, 0xe4, 0x0c, 0x2b, 0xa4, 0xe5, 0xb9, 0xc7, 0xd7, 0x7d, 0x72, 0x07, 0x6f, 0x1f, 0xd9, 0x49, 0x09, 0x28, 0xff, 0x44, 0x19, 0xc8, 0x24, 0xe6, 0x4d, 0xb8, 0xfb, 0x9a, 0x05, 0x1e, 0x01, 0xe8, 0xe1, 0x73, 0xc6, 0xf2, 0x14, 0xe0, 0xe9, 0xe6, 0x45, 0xed, 0x25, 0x0b, 0x6d, 0xaa, 0xa6, 0xf8, 0xc1, 0xa5, 0xcc, 0x90, 0x0d, 0x52, 0xcf, 0x3e, 0x1e, 0xfb, 0xfe, 0xa2, 0x57, 0x48, 0xe8, 0x9a, 0x1a, 0x54, 0x8c, 0x73, 0xe2, 0xd1, 0x10, 0xb2, 0x5f, 0x53, 0x08, 0xbc, 0xf7, 0x57, 0xb2, 0x13, 0x52, 0x16, 0xc9, 0x1d, 0xca, 0x27, 0x83, 0x33, 0x2c, 0x0d, 0x79, 0x03, 0xeb, 0x21, 0xc2, 0x26, 0xdb, 0xd3, 0x3a, 0x69, 0xee, 0xf5, 0x75, 0xaa, 0x8a, 0x41, 0xcb, 0xbd, 0xcd, 0x1b, 0x3d, 0x94, 0x92, 0x8a, 0xa8, 0xf8, 0xba, 0x58, 0xc5, 0xce, 0x0d, 0x31, 0x77, 0x86, 0xe8, 0x7b }; static const uint8_t ac_dsa_vect39_priv_val[] = { /* X */ 0x78, 0x4b, 0x9d, 0xb2, 0xd1, 0x9e, 0xf0, 0xca, 0x8e, 0x69, 0x68, 0x84, 0xc7, 0x71, 0x1d, 0xc2, 0xf8, 0xce, 0x15, 0x0a }; static const uint8_t ac_dsa_vect39_pub_val[] = { /* Y */ 0x28, 0x2d, 0xec, 0xc0, 0xe3, 0x79, 0x94, 0xc2, 0x85, 0x6e, 0x61, 0xf3, 0x6b, 0x83, 0x1b, 0x61, 0xbd, 0xc0, 0x2b, 0x7c, 0xa6, 0x75, 0xdb, 0xc3, 0xc2, 0x03, 0x28, 0x00, 0xb7, 0xef, 0xd3, 0xb7, 0x11, 0xac, 0xf1, 0x4c, 0x88, 0x69, 0x96, 0x88, 0x31, 0xe1, 0x45, 0x36, 0x1b, 0xf2, 0x18, 0x2b, 0x06, 0x0e, 0x48, 0x38, 0xf0, 0x7d, 0xc6, 0x1f, 0x76, 0x58, 0x4c, 0xf1, 0x02, 0xa9, 0x13, 0xbb, 0x28, 0xa5, 0x2c, 0x73, 0x17, 0xaf, 0x5f, 0x9d, 0x23, 0x22, 0x92, 0x7c, 0x96, 0x66, 0xe5, 0xe8, 0x7c, 0x2f, 0x2b, 0xfd, 0x2f, 0x18, 0x1d, 0xd3, 0x26, 0x12, 0xd7, 0xb2, 0xb2, 0xa6, 0x45, 0xbf, 0x1a, 0x47, 0xc0, 0xeb, 0xfd, 0x79, 0xa9, 0x40, 0xf6, 0x27, 0xa6, 0x68, 0xa8, 0xf2, 0xeb, 0x72, 0x9f, 0xd0, 0x51, 0xaa, 0x2c, 0x65, 0x9a, 0xbc, 0x91, 0x8e, 0x55, 0x71, 0x99, 0x4e, 0x65, 0x93 }; /* K = 1bfcf3290fa84652a476655506b145743213e1b4 */ static const uint8_t ac_dsa_vect39_out[] = { /* R */ 0x92, 0x9a, 0x48, 0x51, 0xbe, 0x0a, 0xe4, 0xba, 0x91, 0xda, 0x0e, 0x6c, 0x73, 0x76, 0xd7, 0x1d, 0xf7, 0x59, 0x2d, 0xbb, /* S */ 0x7e, 0x6b, 0x65, 0x04, 0xb7, 0x48, 0xef, 0x00, 0x24, 0xd9, 0xd2, 0xa2, 0xe6, 0xf3, 0xbc, 0xd7, 0xcf, 0x13, 0x5a, 0xc7 }; #define ac_dsa_vect40_prime ac_dsa_vect31_prime #define ac_dsa_vect40_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect40_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect40_ptx[] = { /* Msg */ 0xf5, 0x51, 0x64, 0x10, 0x70, 0x63, 0x23, 0x54, 0x9b, 0x20, 0xc5, 0x2d, 0xaf, 0xa2, 0xf2, 0xf9, 0x07, 0x99, 0x78, 0x6c, 0x0d, 0xdb, 0x85, 0x04, 0x88, 0x92, 0xcc, 0xc1, 0x87, 0x20, 0xdc, 0xe5, 0xc1, 0x29, 0xa1, 0x0e, 0xb4, 0x38, 0x87, 0x88, 0xa3, 0xd9, 0x7a, 0x03, 0xb0, 0x00, 0x17, 0x99, 0xcb, 0x65, 0xa7, 0x9c, 0x88, 0x08, 0x36, 0xbc, 0x9f, 0x32, 0x04, 0xea, 0x75, 0xa5, 0x77, 0x20, 0x4d, 0xc1, 0xe2, 0x89, 0x4c, 0x57, 0x2a, 0x25, 0x8f, 0x9e, 0x51, 0x7c, 0xa3, 0x7c, 0x5b, 0x79, 0x1e, 0x48, 0xb2, 0x7c, 0x8d, 0xc1, 0xc8, 0x21, 0xb3, 0x4e, 0xbb, 0x1f, 0x29, 0x85, 0x8c, 0x4a, 0x72, 0xa0, 0xd5, 0x17, 0x2c, 0x56, 0x5e, 0x9d, 0xbe, 0x1b, 0xdd, 0xdf, 0x6e, 0x02, 0x48, 0x91, 0xcd, 0x62, 0x91, 0xfa, 0xa8, 0x1e, 0xd5, 0x65, 0x74, 0x6c, 0x61, 0xc2, 0xed, 0xa2, 0x01, 0x1f }; static const uint8_t ac_dsa_vect40_priv_val[] = { /* X */ 0x67, 0x3a, 0x38, 0x46, 0x87, 0xef, 0x29, 0xeb, 0xfa, 0x66, 0xe3, 0x31, 0x86, 0x6b, 0xd2, 0x06, 0xca, 0x2f, 0x76, 0x64 }; static const uint8_t ac_dsa_vect40_pub_val[] = { /* Y */ 0x74, 0xcc, 0xc6, 0xeb, 0x83, 0xad, 0xbc, 0xba, 0xd0, 0xfc, 0x37, 0x14, 0x4d, 0x9b, 0xfb, 0x85, 0xfd, 0xcc, 0x85, 0xab, 0x92, 0xc9, 0xf8, 0x87, 0x7c, 0x9c, 0xda, 0x66, 0x25, 0x1d, 0x1a, 0xff, 0x2f, 0xb2, 0x24, 0x88, 0x8d, 0xdd, 0xb7, 0xd7, 0x72, 0xa8, 0xb7, 0x38, 0xc5, 0x3e, 0x03, 0xec, 0xad, 0x99, 0x03, 0x79, 0x6f, 0xa3, 0xc9, 0xc6, 0x02, 0x4d, 0x06, 0x36, 0x7e, 0x08, 0x70, 0xad, 0x79, 0x76, 0x94, 0xf5, 0x98, 0x70, 0x8d, 0x08, 0x91, 0x2c, 0x0f, 0xe0, 0x98, 0x81, 0x76, 0x3a, 0x0a, 0x72, 0x2d, 0xda, 0x95, 0xd9, 0x4e, 0xee, 0x88, 0x24, 0x92, 0x7c, 0xbf, 0xa6, 0x76, 0x1a, 0x79, 0xa0, 0x38, 0xaa, 0x6d, 0x33, 0x1d, 0xa3, 0x4d, 0x9b, 0xd5, 0xc5, 0x83, 0x3c, 0x94, 0xc5, 0x26, 0xa8, 0x6a, 0xf1, 0xcd, 0xfb, 0x2d, 0x40, 0x79, 0xd2, 0xdb, 0x6d, 0x0b, 0x9a, 0x12, 0x38 }; /* K = 52ee4510675f0da529684fa60f6848ce63c4689f */ static const uint8_t ac_dsa_vect40_out[] = { /* R */ 0x27, 0xb3, 0xf2, 0x35, 0xe4, 0xaf, 0xc1, 0x8c, 0x66, 0x13, 0xb4, 0xfa, 0x7f, 0x27, 0xd7, 0xa8, 0x26, 0x2b, 0xa4, 0xc0, /* S */ 0x8b, 0x22, 0x63, 0x4e, 0x4d, 0x45, 0xb7, 0x1a, 0x84, 0xea, 0xba, 0xa1, 0xe5, 0xa4, 0xbf, 0x1e, 0x37, 0x33, 0x7a, 0x59 }; #define ac_dsa_vect41_prime ac_dsa_vect31_prime #define ac_dsa_vect41_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect41_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect41_ptx[] = { /* Msg */ 0x55, 0xbd, 0x15, 0x26, 0xe0, 0x8f, 0x64, 0x43, 0xb2, 0x55, 0xac, 0xd3, 0x2c, 0x28, 0x68, 0x07, 0x54, 0x2d, 0x34, 0xc0, 0xf3, 0xd7, 0x98, 0x92, 0x71, 0x3f, 0x9d, 0x6d, 0x6d, 0x6b, 0x3b, 0xe7, 0x07, 0xe4, 0xaf, 0x6e, 0x71, 0xf7, 0xda, 0xb4, 0xa2, 0xc5, 0xf6, 0xbd, 0x25, 0xf5, 0xae, 0x1f, 0x51, 0x4b, 0x26, 0x44, 0xa4, 0xcd, 0xaf, 0xce, 0xce, 0x1e, 0x58, 0xf7, 0x57, 0x6f, 0x82, 0xe2, 0xab, 0x0a, 0xf2, 0x32, 0x6c, 0x71, 0x27, 0x9e, 0x9b, 0xce, 0xf1, 0xe1, 0xc5, 0x4a, 0x76, 0xfa, 0x77, 0xec, 0x2b, 0x2d, 0x05, 0x67, 0x17, 0x64, 0x57, 0x64, 0xe7, 0x99, 0x1b, 0x52, 0x0b, 0x0e, 0x5a, 0x1b, 0x04, 0x91, 0x09, 0x51, 0x9b, 0x22, 0xaa, 0x52, 0x04, 0xe3, 0xed, 0x53, 0xb1, 0xe0, 0x95, 0x7d, 0xab, 0x5e, 0xc3, 0x24, 0x79, 0xd0, 0x6a, 0xc3, 0xe1, 0x1a, 0x5d, 0x1c, 0xbd, 0x03 }; static const uint8_t ac_dsa_vect41_priv_val[] = { /* X */ 0x49, 0x50, 0x09, 0xf3, 0xa9, 0x25, 0x48, 0xbe, 0x4c, 0x9a, 0x56, 0x2f, 0xf7, 0x03, 0x18, 0x7b, 0x0e, 0xc2, 0xcc, 0x86 }; static const uint8_t ac_dsa_vect41_pub_val[] = { /* Y */ 0x5d, 0x6e, 0xdf, 0x6d, 0xb6, 0xe6, 0xc2, 0x7e, 0x80, 0xa7, 0xf0, 0x25, 0x97, 0x23, 0x79, 0x19, 0x17, 0x0b, 0x49, 0x36, 0x48, 0x9d, 0x6f, 0x15, 0xf5, 0x98, 0xb8, 0x20, 0xcd, 0x91, 0x7e, 0x17, 0x25, 0x09, 0xb7, 0xe2, 0x87, 0xb8, 0x8b, 0x0c, 0xc1, 0x4e, 0x1a, 0x01, 0x86, 0x79, 0x38, 0x86, 0x80, 0x9a, 0xb4, 0x17, 0x02, 0x09, 0x98, 0x70, 0x95, 0x09, 0x22, 0x34, 0xb4, 0xfd, 0xc4, 0x4b, 0x3d, 0x1f, 0xc1, 0x6e, 0xeb, 0x2e, 0xfa, 0xf8, 0x52, 0xed, 0x39, 0x16, 0x69, 0x8c, 0xf9, 0xec, 0xa4, 0x61, 0x2b, 0x49, 0x61, 0xbb, 0x6e, 0x20, 0xc3, 0x2e, 0x18, 0x84, 0x69, 0x88, 0x3f, 0x97, 0xf4, 0x9e, 0x29, 0xa8, 0x19, 0x7c, 0x30, 0xd0, 0x72, 0x3b, 0xab, 0xb0, 0x6d, 0xea, 0x70, 0x4f, 0x77, 0x04, 0xb2, 0x78, 0x8e, 0x57, 0xd7, 0x6d, 0x6d, 0x9a, 0x3c, 0xfa, 0x68, 0xf6, 0xc7, 0x83 }; /* K = 423308bb414ef959025bf1a4b27db278f904241d */ static const uint8_t ac_dsa_vect41_out[] = { /* R */ 0x62, 0x1a, 0x29, 0x09, 0x30, 0xac, 0x43, 0x67, 0x37, 0xa7, 0x2f, 0xb4, 0xc6, 0x2b, 0xf5, 0xc4, 0xb6, 0x74, 0x81, 0xaf, /* S */ 0x62, 0xdb, 0x20, 0xf8, 0x2a, 0x57, 0x54, 0xf1, 0x09, 0xf7, 0xa2, 0xce, 0x58, 0x1d, 0x4c, 0x8d, 0x71, 0xc6, 0x8d, 0x29 }; #define ac_dsa_vect42_prime ac_dsa_vect31_prime #define ac_dsa_vect42_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect42_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect42_ptx[] = { /* Msg */ 0x62, 0x78, 0x9a, 0x89, 0xf0, 0xd7, 0x08, 0xe2, 0x1a, 0x12, 0x1f, 0xc3, 0x40, 0x09, 0xaf, 0x88, 0x41, 0x33, 0x68, 0x1b, 0x9d, 0x4a, 0x66, 0xcc, 0x36, 0xc0, 0x36, 0x5c, 0x34, 0xbe, 0x72, 0xa4, 0x98, 0x2e, 0xb0, 0x96, 0x1c, 0xe2, 0x57, 0xf3, 0x5e, 0x6e, 0x71, 0x83, 0xf0, 0x20, 0x4a, 0x96, 0xa5, 0x45, 0x19, 0x30, 0x01, 0x02, 0x3d, 0x33, 0x09, 0xa8, 0x99, 0x7e, 0x7c, 0x4b, 0x76, 0x2a, 0xb4, 0xf4, 0xc4, 0x0e, 0x03, 0xe1, 0x3f, 0x4e, 0xdb, 0x32, 0x8b, 0x23, 0xcf, 0x00, 0xc0, 0x91, 0x19, 0xde, 0xb4, 0x0a, 0xdd, 0xf6, 0x56, 0x7b, 0x3b, 0x74, 0xac, 0xef, 0x5c, 0xef, 0xf0, 0x45, 0x30, 0x4d, 0x61, 0x84, 0x21, 0xe8, 0x73, 0xc4, 0x1a, 0x72, 0xd3, 0x1e, 0x45, 0x1d, 0x21, 0x3b, 0x06, 0x08, 0x29, 0xb2, 0x86, 0xf6, 0x40, 0x13, 0xd4, 0xd9, 0x34, 0x2a, 0xe7, 0xab, 0x80, 0x64 }; static const uint8_t ac_dsa_vect42_priv_val[] = { /* X */ 0x2b, 0x8d, 0xd3, 0x96, 0x59, 0x92, 0xfc, 0xff, 0xd1, 0x58, 0xa0, 0x81, 0x6a, 0x59, 0x87, 0xf8, 0x09, 0x08, 0xb8, 0x4c }; static const uint8_t ac_dsa_vect42_pub_val[] = { /* Y */ 0xad, 0x59, 0x05, 0x90, 0xa8, 0x2e, 0x89, 0x29, 0xca, 0x86, 0xf4, 0x05, 0x51, 0x6c, 0x32, 0x91, 0x3b, 0xf5, 0x28, 0x2f, 0x70, 0x30, 0x9c, 0x6d, 0x4a, 0x88, 0xcc, 0xf1, 0x65, 0xce, 0x15, 0xfc, 0xf1, 0x1e, 0x14, 0x0c, 0x36, 0x6b, 0xb2, 0x73, 0x83, 0x9a, 0x71, 0x1c, 0xb6, 0xae, 0x52, 0xbb, 0x71, 0x78, 0x59, 0x57, 0x0f, 0xdb, 0xf9, 0xfc, 0x26, 0x72, 0x67, 0x28, 0x59, 0x6e, 0x6f, 0xc7, 0x19, 0x23, 0xde, 0xad, 0xb3, 0x5a, 0x9d, 0x57, 0xcd, 0xb2, 0x13, 0xc0, 0xf2, 0x9c, 0x13, 0x75, 0xf8, 0xb1, 0xd3, 0xc6, 0xb5, 0x26, 0x90, 0xc4, 0x28, 0xf7, 0x48, 0x1c, 0x14, 0xaa, 0xd8, 0x2f, 0xba, 0x7f, 0x24, 0xee, 0xa8, 0xcd, 0x8d, 0xa7, 0xf0, 0xef, 0x7a, 0xe7, 0x81, 0xc1, 0xa9, 0x26, 0x67, 0x1a, 0x61, 0xd4, 0xe5, 0xff, 0xc8, 0xdd, 0xf1, 0xbc, 0x10, 0xd6, 0x88, 0xa9, 0x04, 0xc6 }; /* K = 58ccff88958d5fc48d671ba22ed71f5f82370ac6 */ static const uint8_t ac_dsa_vect42_out[] = { /* R */ 0x89, 0xdc, 0xbc, 0xa7, 0xc8, 0xcd, 0x6b, 0x90, 0xaa, 0x90, 0x6a, 0x4c, 0x54, 0x71, 0x53, 0x76, 0x2f, 0xcf, 0xff, 0xd6, /* S */ 0x23, 0xe8, 0x92, 0x6b, 0x18, 0xcf, 0xd4, 0xb6, 0x7c, 0x53, 0xfa, 0xc4, 0xa2, 0xd5, 0x32, 0x1e, 0x5c, 0x3d, 0x88, 0x0c }; #define ac_dsa_vect43_prime ac_dsa_vect31_prime #define ac_dsa_vect43_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect43_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect43_ptx[] = { /* Msg */ 0x4e, 0xaf, 0xcc, 0x68, 0x74, 0xae, 0x2a, 0x6d, 0x52, 0x57, 0x38, 0x96, 0x7a, 0xfb, 0x30, 0x54, 0x35, 0x7a, 0x39, 0x67, 0x0d, 0x1e, 0x55, 0x55, 0xd7, 0xdc, 0x55, 0xbe, 0x24, 0xdd, 0x5a, 0x32, 0xa0, 0xc7, 0xca, 0x3f, 0x1b, 0x5c, 0x6d, 0x94, 0x8c, 0x9c, 0xe3, 0x91, 0x01, 0x3a, 0xbe, 0xb4, 0x7f, 0x7e, 0x24, 0xcd, 0x2c, 0x54, 0xe1, 0xfc, 0x7c, 0x0e, 0x92, 0xc4, 0xab, 0x77, 0xf5, 0x97, 0x3a, 0x70, 0x54, 0xbd, 0x1c, 0x6c, 0x84, 0x5b, 0x80, 0x2b, 0x79, 0x37, 0xd6, 0x52, 0x05, 0x08, 0xae, 0x01, 0x8a, 0xe1, 0x4b, 0x27, 0xff, 0x4b, 0x1e, 0x34, 0x0a, 0x4b, 0x9f, 0x6f, 0x6b, 0x48, 0x14, 0xd0, 0x7e, 0x90, 0xcb, 0x8f, 0x19, 0xb1, 0x5e, 0x91, 0x5d, 0x6a, 0xd1, 0x83, 0x4c, 0x0f, 0x7a, 0x3c, 0x3e, 0x1e, 0x45, 0x20, 0x67, 0x72, 0xa0, 0xee, 0xc2, 0xd3, 0xf9, 0x16, 0x08, 0x97 }; static const uint8_t ac_dsa_vect43_priv_val[] = { /* X */ 0x6b, 0x3a, 0xce, 0xe4, 0x22, 0x76, 0xbb, 0xa1, 0x55, 0x15, 0x6f, 0x23, 0xdf, 0xb7, 0xcd, 0xf6, 0x4e, 0x4b, 0x1a, 0xe8 }; static const uint8_t ac_dsa_vect43_pub_val[] = { /* Y */ 0xb9, 0x3d, 0x79, 0x47, 0x2f, 0x04, 0x98, 0x93, 0x77, 0x9a, 0x3a, 0x0e, 0x83, 0xb3, 0x85, 0x3f, 0x78, 0xb3, 0xcf, 0x69, 0xb7, 0x59, 0x61, 0xa6, 0x0e, 0x95, 0x0f, 0x0c, 0x00, 0xf4, 0x98, 0xf3, 0xea, 0xa2, 0x38, 0x43, 0x25, 0xf7, 0x4d, 0xdd, 0x38, 0x29, 0x2f, 0xbd, 0xbd, 0xb1, 0x99, 0x21, 0x2e, 0x90, 0xb1, 0x4e, 0xc9, 0xe5, 0x54, 0x72, 0x7d, 0xf8, 0x1e, 0x06, 0xeb, 0x77, 0x83, 0xad, 0xda, 0x38, 0x69, 0x1c, 0x63, 0xa7, 0xcb, 0x00, 0xcd, 0x76, 0xd8, 0xe1, 0x8e, 0x3d, 0x29, 0xc7, 0x93, 0xe9, 0xf1, 0xfe, 0x83, 0x37, 0xf1, 0x59, 0x8b, 0x89, 0x65, 0x1f, 0x63, 0x4c, 0xb7, 0x03, 0xf2, 0x18, 0xe1, 0x90, 0x63, 0x19, 0xf8, 0x2a, 0xc6, 0xd5, 0x8e, 0x67, 0x86, 0xda, 0x7a, 0xec, 0xfb, 0xca, 0x59, 0x39, 0xf0, 0x3a, 0x13, 0xe7, 0xb4, 0xd5, 0xa8, 0xac, 0x81, 0x2d, 0x78, 0x29 }; /* K = 1c48f62bd097d7686879d33ee5771558e453bb3d */ static const uint8_t ac_dsa_vect43_out[] = { /* R */ 0x63, 0x3e, 0x98, 0x12, 0xa0, 0x65, 0x7c, 0xec, 0x33, 0x26, 0xaa, 0x54, 0x15, 0x34, 0x0c, 0x46, 0x36, 0x2f, 0xcd, 0x4b, /* S */ 0x6b, 0x20, 0x1f, 0x0c, 0x3f, 0xd4, 0x42, 0x47, 0xf6, 0xc2, 0x8c, 0x01, 0xd1, 0x21, 0x7e, 0xb9, 0x91, 0x46, 0xc0, 0x40 }; #define ac_dsa_vect44_prime ac_dsa_vect31_prime #define ac_dsa_vect44_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect44_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect44_ptx[] = { /* Msg */ 0x86, 0xd9, 0x89, 0x2b, 0x48, 0xf5, 0x95, 0x41, 0x01, 0x48, 0x27, 0x42, 0xc0, 0xda, 0xfb, 0x68, 0xdc, 0x97, 0x12, 0x24, 0x83, 0xb9, 0xe4, 0x59, 0xf9, 0x74, 0x95, 0xcc, 0x97, 0x0e, 0x05, 0x6d, 0x21, 0x62, 0xc7, 0xc7, 0x1d, 0xb1, 0x67, 0x22, 0x9f, 0xb7, 0xf4, 0x52, 0x09, 0xe0, 0xc0, 0x1e, 0xb0, 0x6f, 0xf9, 0x24, 0xb8, 0x23, 0xed, 0xa5, 0x1a, 0x7e, 0x99, 0x0f, 0x3c, 0x98, 0x6e, 0xb9, 0xaf, 0x2a, 0x7a, 0x07, 0x3f, 0x75, 0x4c, 0xb8, 0x4d, 0xb4, 0x53, 0xa9, 0xe8, 0xc0, 0xae, 0x7f, 0xa5, 0xc0, 0x5a, 0x26, 0x55, 0xd2, 0x61, 0xad, 0x7e, 0xc5, 0x61, 0x28, 0x76, 0xfa, 0x7d, 0xf0, 0x95, 0x22, 0xe0, 0xb6, 0x9a, 0xe9, 0x24, 0x77, 0xf6, 0x3d, 0xef, 0x19, 0x92, 0xc9, 0x6c, 0xe9, 0x5e, 0xe7, 0xbd, 0x63, 0x0e, 0xc1, 0x61, 0x46, 0x21, 0xda, 0x6a, 0x51, 0x2a, 0xb5, 0x3d, 0xd7 }; static const uint8_t ac_dsa_vect44_priv_val[] = { /* X */ 0x83, 0x6d, 0x90, 0xfd, 0x90, 0xd2, 0x1b, 0x84, 0xbb, 0x01, 0x2d, 0xa7, 0xb2, 0x16, 0x8e, 0xa8, 0xf0, 0x52, 0x02, 0xcf }; static const uint8_t ac_dsa_vect44_pub_val[] = { /* Y */ 0xae, 0x26, 0x4e, 0xa9, 0x6b, 0xf0, 0x93, 0xef, 0x2d, 0xe2, 0x73, 0x81, 0x73, 0x82, 0x19, 0xe3, 0xbf, 0xdb, 0x08, 0x61, 0x69, 0x67, 0xcd, 0x13, 0xe9, 0x41, 0x5f, 0x47, 0x5c, 0x4a, 0x79, 0x4c, 0x19, 0xf1, 0x2a, 0x60, 0x7b, 0x89, 0x8d, 0xb1, 0xe3, 0xe6, 0xbc, 0x54, 0x02, 0x32, 0x75, 0x85, 0xd3, 0x28, 0x41, 0xae, 0x15, 0xe3, 0x46, 0x28, 0x80, 0x85, 0x0e, 0x9e, 0x41, 0x36, 0xa4, 0x75, 0x1b, 0x64, 0xa7, 0x29, 0xea, 0x27, 0xb7, 0x2c, 0xe3, 0x61, 0x28, 0xa4, 0x4f, 0xa5, 0x37, 0x52, 0xa0, 0x8d, 0x73, 0x58, 0x4f, 0xaa, 0x44, 0xfb, 0x14, 0x12, 0x0f, 0x47, 0xa0, 0x4c, 0x47, 0xe9, 0x89, 0xea, 0xda, 0xbc, 0x7e, 0x5c, 0xdb, 0x15, 0xd2, 0x7c, 0x2b, 0x0e, 0xa4, 0x25, 0x7c, 0xec, 0x22, 0x9a, 0x2c, 0x7b, 0xf7, 0xc9, 0x3c, 0x57, 0x1e, 0x8d, 0x22, 0xae, 0xaa, 0x2e, 0x38, 0xbe }; /* K = 7956ea15111ff392d6a9359067bfd8c21f0bfc0b */ static const uint8_t ac_dsa_vect44_out[] = { /* R */ 0x77, 0xb4, 0x80, 0x88, 0x5c, 0x70, 0xc1, 0xfe, 0xe2, 0x05, 0x62, 0x37, 0xd1, 0xb7, 0x9c, 0xfd, 0x9f, 0xb5, 0x4a, 0x1f, /* S */ 0x22, 0x83, 0xf4, 0xc0, 0x64, 0x0f, 0xf6, 0xda, 0xac, 0xbd, 0xfb, 0xbe, 0xf7, 0x22, 0x4a, 0xfa, 0x59, 0xca, 0x39, 0x59 }; #define ac_dsa_vect45_prime ac_dsa_vect31_prime #define ac_dsa_vect45_sub_prime ac_dsa_vect31_sub_prime #define ac_dsa_vect45_base ac_dsa_vect31_base static const uint8_t ac_dsa_vect45_ptx[] = { /* Msg */ 0x8b, 0x60, 0xb9, 0xb6, 0xba, 0x37, 0x54, 0x48, 0xde, 0x4f, 0x00, 0xde, 0x51, 0xd1, 0x87, 0x06, 0xef, 0x8c, 0x4f, 0x97, 0xba, 0x34, 0xc9, 0xcc, 0xe2, 0xb0, 0xab, 0xb0, 0x69, 0x84, 0x36, 0x00, 0x9d, 0x1d, 0x2b, 0xaf, 0xcb, 0xef, 0x73, 0xa8, 0xb5, 0xdf, 0xf6, 0xa3, 0xcd, 0x5d, 0xb5, 0x25, 0x8a, 0xc8, 0x4e, 0xf7, 0x24, 0xb2, 0x8d, 0x8a, 0x62, 0xd7, 0x15, 0xda, 0x6e, 0x11, 0x19, 0x39, 0x73, 0x53, 0x66, 0xa7, 0xc6, 0x64, 0x70, 0x36, 0x45, 0x57, 0xf5, 0x46, 0x37, 0x7d, 0x5c, 0x0e, 0x7e, 0xa9, 0x06, 0x47, 0x31, 0xcb, 0x71, 0x49, 0xe1, 0x05, 0x1d, 0x66, 0xa7, 0xbe, 0xd1, 0x4a, 0xa2, 0x05, 0xbd, 0xc5, 0xd4, 0xb9, 0xca, 0x02, 0x9a, 0x1e, 0x68, 0xa6, 0xfa, 0x2c, 0x1d, 0xb2, 0x2d, 0x27, 0xfb, 0x79, 0xd8, 0x38, 0x77, 0xcf, 0xaa, 0x67, 0x42, 0x11, 0x92, 0x29, 0xa4, 0x93 }; static const uint8_t ac_dsa_vect45_priv_val[] = { /* X */ 0x5a, 0x4a, 0xe9, 0xf8, 0xfc, 0x82, 0xc9, 0x19, 0x8d, 0x94, 0x00, 0xc5, 0x1f, 0x28, 0x24, 0x93, 0xb1, 0x94, 0xa0, 0x7b }; static const uint8_t ac_dsa_vect45_pub_val[] = { /* Y */ 0x87, 0x03, 0x2f, 0x26, 0x3d, 0xe2, 0xbf, 0x2f, 0x26, 0x8a, 0x09, 0x3f, 0x33, 0xc3, 0x66, 0xd6, 0xbc, 0xda, 0x77, 0x2c, 0xa9, 0x59, 0xfa, 0x17, 0xcf, 0xe9, 0x48, 0xf1, 0xdc, 0xa3, 0xe7, 0x5e, 0xc9, 0x42, 0x76, 0xde, 0x91, 0xd9, 0xbc, 0x60, 0xfc, 0x6a, 0xb9, 0x22, 0x48, 0x61, 0xc5, 0x5d, 0xc9, 0xcc, 0xc5, 0xf7, 0x15, 0xc2, 0x51, 0xdd, 0x50, 0x8b, 0xd4, 0x38, 0x68, 0x1c, 0xab, 0x20, 0x50, 0x59, 0x05, 0x0f, 0x8e, 0x11, 0xe8, 0xa5, 0x46, 0x8d, 0xa4, 0x2d, 0x20, 0xae, 0xfa, 0xc5, 0x3d, 0x7a, 0x9f, 0xb7, 0x1f, 0x64, 0x24, 0xd7, 0xbd, 0xc6, 0x5d, 0xb8, 0x73, 0xee, 0x4f, 0x9d, 0xcd, 0x91, 0x80, 0x91, 0xaa, 0x72, 0x4b, 0x26, 0x1b, 0x60, 0x56, 0xf3, 0x20, 0xca, 0x77, 0x24, 0x51, 0x8e, 0x14, 0xcb, 0x8d, 0xba, 0x0b, 0x71, 0x3f, 0x54, 0xa0, 0xfe, 0x44, 0xff, 0x15, 0x97 }; /* K = 662351e9b8c3a607afdf3ee599b46681e27b83c0 */ static const uint8_t ac_dsa_vect45_out[] = { /* R */ 0x5d, 0x15, 0x9f, 0x89, 0x4d, 0x25, 0x0d, 0xb9, 0x0d, 0x7f, 0xcc, 0xd4, 0x93, 0x29, 0xe4, 0x4d, 0x11, 0x12, 0xdb, 0x47, /* S */ 0x37, 0x23, 0x1b, 0xc1, 0x51, 0x95, 0xec, 0xb6, 0xba, 0xdb, 0x7c, 0x3f, 0xe8, 0x03, 0x80, 0xff, 0x91, 0x2b, 0xae, 0xda }; /* [mod = L=1024, N=160, SHA-384] */ static const uint8_t ac_dsa_vect46_prime[] = { /* P */ 0xf2, 0x4a, 0x4a, 0xfc, 0x72, 0xc7, 0xe3, 0x73, 0xa3, 0xc3, 0x09, 0x62, 0x33, 0x2f, 0xe5, 0x40, 0x5c, 0x45, 0x93, 0x09, 0x63, 0x90, 0x94, 0x18, 0xc3, 0x07, 0x92, 0xaa, 0xf1, 0x35, 0xdd, 0xea, 0x56, 0x1e, 0x94, 0xf2, 0x47, 0x26, 0x71, 0x6b, 0x75, 0xa1, 0x88, 0x28, 0x98, 0x2e, 0x4c, 0xe4, 0x4c, 0x1f, 0xdd, 0xcb, 0x74, 0x64, 0x87, 0xb6, 0xb7, 0x7a, 0x9a, 0x5a, 0x17, 0xf8, 0x68, 0xab, 0x50, 0xcd, 0x62, 0x1b, 0x5b, 0xc9, 0xda, 0x47, 0x08, 0x80, 0xb2, 0x87, 0xd7, 0x39, 0x81, 0x90, 0xa4, 0x2a, 0x5e, 0xe2, 0x2e, 0xd8, 0xd1, 0xff, 0x14, 0x7e, 0x20, 0x19, 0x81, 0x0c, 0x82, 0x98, 0xed, 0x68, 0xe1, 0xca, 0x69, 0xd4, 0x1d, 0x55, 0x5f, 0x24, 0x9e, 0x64, 0x9f, 0xb1, 0x72, 0x5d, 0xdb, 0x07, 0x5c, 0x17, 0xb3, 0x7b, 0xef, 0xf4, 0x67, 0xfd, 0xd1, 0x60, 0x92, 0x43, 0x37, 0x3f }; static const uint8_t ac_dsa_vect46_sub_prime[] = { /* Q */ 0xda, 0x06, 0x5a, 0x07, 0x8d, 0xdb, 0x56, 0xee, 0x5d, 0x2a, 0xd0, 0x6c, 0xaf, 0xab, 0x20, 0x82, 0x0d, 0x2c, 0x47, 0x55 }; static const uint8_t ac_dsa_vect46_base[] = { /* G */ 0x47, 0xb5, 0x59, 0x1b, 0x79, 0x04, 0x3e, 0x4e, 0x03, 0xca, 0x78, 0xa0, 0xe2, 0x77, 0xc9, 0xa2, 0x1e, 0x2a, 0x6b, 0x54, 0x3b, 0xf4, 0xf0, 0x44, 0x10, 0x4c, 0xd9, 0xac, 0x93, 0xef, 0xf8, 0xe1, 0x01, 0xbb, 0x60, 0x31, 0xef, 0xc8, 0xc5, 0x96, 0xd5, 0xd2, 0xf9, 0x2e, 0x3a, 0x3d, 0x0f, 0x1f, 0x74, 0x70, 0x2d, 0xd5, 0x4f, 0x77, 0xd3, 0xcd, 0x46, 0xc0, 0x4d, 0xee, 0x7a, 0x5d, 0xe9, 0xf0, 0x0a, 0xd3, 0x17, 0x69, 0x1f, 0xdd, 0xce, 0xfe, 0x4a, 0x22, 0x0a, 0x26, 0x51, 0xac, 0xae, 0x7f, 0xce, 0xdd, 0xa9, 0x2b, 0xfc, 0xca, 0x85, 0x5d, 0xb6, 0x70, 0x5e, 0x8d, 0x86, 0x4f, 0x81, 0x92, 0xbf, 0x6b, 0xf8, 0x60, 0xc0, 0x0f, 0x08, 0xad, 0x64, 0x93, 0xec, 0xc1, 0x87, 0x2e, 0x00, 0x28, 0xd5, 0xc8, 0x6d, 0x44, 0x50, 0x5d, 0xb5, 0x74, 0x22, 0x51, 0x5c, 0x38, 0x25, 0xa6, 0xf7, 0x8a }; static const uint8_t ac_dsa_vect46_ptx[] = { /* Msg */ 0xb0, 0xdb, 0xbf, 0x4a, 0x42, 0x1b, 0xa5, 0xc5, 0xb0, 0xe5, 0x2f, 0x09, 0x62, 0x98, 0x01, 0xc1, 0x13, 0x25, 0x8c, 0x25, 0x2f, 0x29, 0x89, 0x8c, 0x33, 0x54, 0x70, 0x6e, 0x39, 0xec, 0x58, 0x24, 0xbe, 0x52, 0x3d, 0x0e, 0x2f, 0x8c, 0xfe, 0x02, 0x2c, 0xd6, 0x11, 0x65, 0x30, 0x12, 0x74, 0xd5, 0xd6, 0x21, 0xa5, 0x97, 0x55, 0xf5, 0x04, 0x04, 0xd8, 0xb8, 0x02, 0x37, 0x1c, 0xe6, 0x16, 0xde, 0xfa, 0x96, 0x2e, 0x36, 0x36, 0xae, 0x93, 0x4e, 0xc3, 0x4e, 0x4b, 0xcf, 0x77, 0xa1, 0x6c, 0x7e, 0xff, 0x8c, 0xf4, 0xcc, 0x08, 0xa0, 0xf4, 0x84, 0x9d, 0x6a, 0xd4, 0x30, 0x7e, 0x9f, 0x8d, 0xf8, 0x3f, 0x24, 0xad, 0x16, 0xab, 0x46, 0xd1, 0xa6, 0x1d, 0x2d, 0x7d, 0x4e, 0x21, 0x68, 0x1e, 0xb2, 0xae, 0x28, 0x1a, 0x1a, 0x5f, 0x9b, 0xca, 0x85, 0x73, 0xa3, 0xf5, 0x28, 0x1d, 0x30, 0x8a, 0x5a }; static const uint8_t ac_dsa_vect46_priv_val[] = { /* X */ 0x64, 0x98, 0x20, 0x16, 0x8e, 0xb5, 0x94, 0xf5, 0x9c, 0xd9, 0xb2, 0x8b, 0x9a, 0xef, 0xe8, 0xcc, 0x10, 0x6a, 0x6c, 0x4f }; static const uint8_t ac_dsa_vect46_pub_val[] = { /* Y */ 0x43, 0xa2, 0x7b, 0x74, 0x0f, 0x42, 0x2c, 0xb2, 0xdc, 0x3e, 0xaa, 0x23, 0x23, 0x15, 0x88, 0x3a, 0x2f, 0x6a, 0x22, 0x92, 0x7f, 0x99, 0x7d, 0x02, 0x4f, 0x5a, 0x63, 0x8b, 0x50, 0x7b, 0x17, 0xd3, 0xb1, 0xcb, 0xd3, 0xec, 0x69, 0x1c, 0xc6, 0x74, 0x47, 0x09, 0x60, 0xa0, 0x14, 0x6e, 0xfd, 0xec, 0xb9, 0x5b, 0xb5, 0xfe, 0x24, 0x97, 0x49, 0xe3, 0xc8, 0x06, 0xcd, 0x5c, 0xc3, 0xe7, 0xf7, 0xba, 0xb8, 0x45, 0xda, 0xdb, 0xe1, 0xf5, 0x0b, 0x33, 0x66, 0xfb, 0x82, 0x7a, 0x94, 0x2c, 0xe6, 0x24, 0x6d, 0xda, 0x7b, 0xd2, 0xc1, 0x3e, 0x1b, 0x4a, 0x92, 0x6c, 0x0c, 0x82, 0xc8, 0x84, 0x63, 0x95, 0x52, 0xd9, 0xd4, 0x60, 0x36, 0xf9, 0xa4, 0xbc, 0x2a, 0x9e, 0x51, 0xc2, 0xd7, 0x6e, 0x30, 0x74, 0xd1, 0xf5, 0x3a, 0x63, 0x22, 0x4c, 0x42, 0x79, 0xe0, 0xfa, 0x46, 0x04, 0x74, 0xd4, 0xff, 0xde }; /* K = 33c7ba88ff69707971b25ac344ae4a566e195f99 */ static const uint8_t ac_dsa_vect46_out[] = { /* R */ 0x77, 0xc4, 0xd9, 0x9f, 0x62, 0xb3, 0xad, 0x7d, 0xd1, 0xfe, 0x64, 0x98, 0xdb, 0x45, 0xa5, 0xda, 0x73, 0xce, 0x7b, 0xde, /* S */ 0x23, 0x87, 0x1a, 0x00, 0x2a, 0xe5, 0x03, 0xfd, 0xab, 0xaa, 0x6a, 0x84, 0xdc, 0xc8, 0xf3, 0x87, 0x69, 0x73, 0x7f, 0x01 }; #define ac_dsa_vect47_prime ac_dsa_vect46_prime #define ac_dsa_vect47_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect47_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect47_ptx[] = { /* Msg */ 0xec, 0x84, 0xbe, 0xd0, 0x9e, 0xcb, 0x4a, 0x6f, 0xee, 0xec, 0x3a, 0x70, 0x71, 0xb6, 0x5a, 0x4c, 0x12, 0x67, 0xa0, 0x3c, 0xac, 0x8b, 0x5a, 0x05, 0x00, 0xc2, 0x37, 0xb2, 0x0d, 0xc0, 0x58, 0x51, 0x4d, 0xa7, 0x98, 0x33, 0x5a, 0x21, 0xb2, 0x3d, 0x7e, 0x8c, 0xbb, 0x15, 0xef, 0xcf, 0x92, 0xe6, 0x06, 0x0a, 0x13, 0xfb, 0x77, 0xf4, 0x99, 0x81, 0x47, 0xde, 0xc1, 0xd0, 0xfa, 0x0e, 0xdd, 0x41, 0x8b, 0x0a, 0xae, 0x8e, 0xb0, 0x05, 0x6f, 0xc7, 0xd4, 0x00, 0x8b, 0x19, 0x8b, 0xd4, 0x0b, 0x96, 0x9d, 0xc1, 0x0d, 0x79, 0xe1, 0x5b, 0x23, 0x00, 0x82, 0x03, 0x23, 0xbd, 0x5e, 0x1b, 0x7d, 0x89, 0x4c, 0xe8, 0xe7, 0xbc, 0x8f, 0x7c, 0xec, 0xa1, 0x29, 0xb5, 0xe5, 0x11, 0xee, 0x1c, 0x8c, 0xae, 0xc2, 0x55, 0x14, 0xf5, 0x37, 0x35, 0x3a, 0x91, 0x2a, 0x97, 0x1b, 0x80, 0x70, 0xe3, 0xf1, 0x41 }; static const uint8_t ac_dsa_vect47_priv_val[] = { /* X */ 0x95, 0x2b, 0x61, 0xea, 0x90, 0xdf, 0x3f, 0x78, 0x8e, 0xab, 0x61, 0xd9, 0x5b, 0xe1, 0x6c, 0xa2, 0x80, 0x01, 0x80, 0x0c }; static const uint8_t ac_dsa_vect47_pub_val[] = { /* Y */ 0xd7, 0xa0, 0x95, 0x0d, 0x0e, 0x63, 0x62, 0xb0, 0xc9, 0x42, 0xad, 0x8a, 0xf6, 0x71, 0x61, 0xdf, 0x07, 0xde, 0xbc, 0xa5, 0x9a, 0x4c, 0xfa, 0x72, 0x8f, 0x93, 0xd4, 0x9b, 0x6e, 0x29, 0x6a, 0x23, 0x96, 0x9a, 0x65, 0xa9, 0x2b, 0x2e, 0x05, 0x39, 0x8a, 0x11, 0x4d, 0x73, 0xd5, 0xa5, 0x2b, 0x73, 0xb7, 0x1e, 0xbb, 0x28, 0x57, 0x1c, 0xf6, 0xb6, 0x00, 0x2f, 0x85, 0x3a, 0x8f, 0x59, 0x4b, 0x5c, 0x93, 0xb9, 0xa8, 0x42, 0x33, 0xf3, 0xc5, 0x52, 0x82, 0x36, 0x19, 0xe0, 0xaa, 0x84, 0x7d, 0x60, 0x20, 0x3d, 0xb1, 0x5d, 0x2a, 0x91, 0x6a, 0xd0, 0x22, 0x28, 0x32, 0x5e, 0x15, 0x78, 0x39, 0x88, 0xf4, 0x15, 0x9e, 0x05, 0xc8, 0xca, 0x08, 0x83, 0x60, 0xe6, 0xea, 0x7a, 0xce, 0x51, 0xb0, 0x55, 0x10, 0x21, 0x53, 0xc0, 0x0a, 0xdf, 0x33, 0x5f, 0xf6, 0xaf, 0xfd, 0x17, 0x54, 0xf2, 0xa8, 0xaa }; /* K = 7982f6b8956c2bc0a2c2d02ecdb9e47d23a7ba81 */ static const uint8_t ac_dsa_vect47_out[] = { /* R */ 0xb2, 0x57, 0x0e, 0x0e, 0x19, 0x93, 0x54, 0x38, 0xd3, 0x26, 0x86, 0xc4, 0x78, 0x47, 0x3a, 0x0e, 0x45, 0xda, 0xd0, 0x23, /* S */ 0x39, 0xa0, 0x2e, 0x98, 0x03, 0x62, 0x4f, 0x7e, 0x90, 0xfe, 0xab, 0x87, 0x14, 0xcd, 0xdc, 0x41, 0xe0, 0x1f, 0x8f, 0xce }; #define ac_dsa_vect48_prime ac_dsa_vect46_prime #define ac_dsa_vect48_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect48_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect48_ptx[] = { /* Msg */ 0x80, 0xf7, 0x57, 0xfc, 0x06, 0x40, 0x9b, 0x70, 0xd7, 0x33, 0xef, 0xdb, 0x68, 0xb5, 0x20, 0xf3, 0xf9, 0x07, 0x8a, 0xb9, 0x36, 0xc4, 0x47, 0x9f, 0xb9, 0x8d, 0x0b, 0xeb, 0x16, 0x31, 0xd8, 0x30, 0x33, 0x24, 0x47, 0x08, 0x24, 0x86, 0x22, 0x24, 0xb4, 0x39, 0xbc, 0x85, 0xde, 0xcf, 0xcc, 0xb8, 0xde, 0x8f, 0xbf, 0x36, 0xa2, 0xbc, 0x4c, 0xe3, 0xa0, 0x92, 0x68, 0x82, 0x49, 0xab, 0x4e, 0xb9, 0xfe, 0xbf, 0xad, 0x26, 0x82, 0x45, 0xfb, 0xd7, 0xe7, 0x2e, 0x0f, 0x24, 0x05, 0x00, 0xaf, 0x71, 0x29, 0x2e, 0xa2, 0x3c, 0x8a, 0xd4, 0xb7, 0x1e, 0x03, 0x21, 0x06, 0xf5, 0x87, 0xf4, 0x61, 0x16, 0x63, 0x13, 0x76, 0x90, 0xcb, 0x25, 0x24, 0x19, 0x12, 0x76, 0x3c, 0x5e, 0x18, 0x79, 0xb3, 0xab, 0x67, 0xe2, 0x18, 0x7f, 0x92, 0xd8, 0x21, 0xfc, 0x81, 0xf5, 0x52, 0xe2, 0xc3, 0x55, 0xbd, 0x73 }; static const uint8_t ac_dsa_vect48_priv_val[] = { /* X */ 0x2a, 0x5f, 0x63, 0x7f, 0x4b, 0x88, 0x6a, 0x3d, 0x37, 0xc4, 0x36, 0x9c, 0xab, 0x04, 0xd7, 0x8c, 0x79, 0xf1, 0xa3, 0xa8 }; static const uint8_t ac_dsa_vect48_pub_val[] = { /* Y */ 0x1f, 0x03, 0x01, 0x3e, 0x66, 0xfd, 0x1e, 0x63, 0x3f, 0xf7, 0x43, 0x89, 0x4c, 0x37, 0xf6, 0x96, 0x48, 0x39, 0xa5, 0x2c, 0xfb, 0xb6, 0xe8, 0x49, 0xcf, 0xb4, 0xea, 0xc9, 0xa3, 0xc9, 0xcd, 0xb5, 0x5c, 0x28, 0xe1, 0x47, 0x88, 0x86, 0x5c, 0x21, 0x2b, 0xe6, 0x20, 0x47, 0xcb, 0x39, 0xc6, 0x36, 0x57, 0x80, 0xbb, 0x2e, 0x62, 0x79, 0x57, 0xd3, 0x4e, 0x99, 0x23, 0x2f, 0x69, 0x17, 0x0a, 0x8e, 0xfb, 0x89, 0x4d, 0x80, 0x29, 0xd1, 0xb8, 0xbe, 0xa8, 0xb9, 0x11, 0xce, 0xbc, 0xd4, 0x3b, 0x86, 0xbd, 0x53, 0x66, 0x93, 0xf1, 0x8b, 0xfe, 0x50, 0xc8, 0x4b, 0x99, 0x91, 0x11, 0x81, 0xac, 0xe1, 0x4c, 0x3f, 0xab, 0x9f, 0xb6, 0xac, 0xd9, 0x87, 0x86, 0xf9, 0xd2, 0xad, 0x12, 0x9c, 0x5e, 0xfe, 0xb8, 0xcd, 0x09, 0x41, 0xa3, 0xd8, 0x90, 0x98, 0xd5, 0x72, 0x1d, 0x43, 0x53, 0x43, 0xcb, 0x76 }; /* K = b7c75c380bce0fffd59dfc3993e1d0724da877b6 */ static const uint8_t ac_dsa_vect48_out[] = { /* R */ 0xc7, 0xdb, 0x4a, 0x9f, 0x54, 0xd8, 0x82, 0xec, 0x5f, 0x56, 0x17, 0x05, 0x39, 0x6c, 0x94, 0x83, 0x4d, 0xd5, 0x3c, 0x5a, /* S */ 0x67, 0x52, 0xcb, 0x6b, 0xe9, 0xb8, 0x72, 0x65, 0xd7, 0x6d, 0x69, 0xb3, 0x82, 0x29, 0x96, 0x78, 0xf9, 0x6a, 0x5f, 0xaf }; #define ac_dsa_vect49_prime ac_dsa_vect46_prime #define ac_dsa_vect49_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect49_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect49_ptx[] = { /* Msg */ 0x36, 0xa2, 0x56, 0x59, 0xa7, 0xf1, 0xde, 0x66, 0xb4, 0x72, 0x1b, 0x48, 0x85, 0x5c, 0xde, 0xbe, 0x98, 0xfe, 0x61, 0x13, 0x24, 0x1b, 0x7b, 0xed, 0xdc, 0x26, 0x91, 0x49, 0x3e, 0xd0, 0xad, 0xd0, 0xb6, 0xa9, 0xfb, 0xbf, 0x9f, 0xb8, 0x70, 0xa1, 0xbc, 0x68, 0xa9, 0x01, 0xb9, 0x32, 0xf4, 0x7d, 0xed, 0x53, 0x2f, 0x93, 0x49, 0x3b, 0x1c, 0x08, 0x14, 0x08, 0x16, 0x58, 0x07, 0xb3, 0x8e, 0xfc, 0xe7, 0xac, 0xc7, 0xdb, 0xc2, 0x16, 0xbe, 0xf7, 0x4e, 0xd5, 0x9e, 0x20, 0x97, 0x33, 0x26, 0x55, 0x3c, 0xc8, 0x37, 0x79, 0xf7, 0x42, 0xe3, 0xf4, 0x69, 0xa7, 0x27, 0x8e, 0xeb, 0x15, 0x37, 0xdd, 0x71, 0xcd, 0x8f, 0x15, 0x11, 0x4d, 0x84, 0x69, 0x3c, 0x2e, 0x6b, 0xbf, 0x62, 0x81, 0x4a, 0x08, 0xe8, 0x2b, 0xa7, 0x15, 0x39, 0xf4, 0xcb, 0x4b, 0xf0, 0x8c, 0x86, 0x9d, 0x7d, 0xb9, 0xde, 0xa9 }; static const uint8_t ac_dsa_vect49_priv_val[] = { /* X */ 0xbb, 0x31, 0x89, 0x87, 0xa0, 0x43, 0x15, 0x8b, 0x97, 0xfd, 0xbb, 0xc2, 0x70, 0x74, 0x71, 0xa3, 0x83, 0x16, 0xce, 0x58 }; static const uint8_t ac_dsa_vect49_pub_val[] = { /* Y */ 0xc9, 0x00, 0x39, 0x95, 0xb0, 0x14, 0xaf, 0xad, 0x66, 0xde, 0x25, 0xfc, 0x0a, 0x22, 0x10, 0xb1, 0xf1, 0xb2, 0x2d, 0x27, 0x5d, 0xa5, 0x1a, 0x27, 0xfa, 0xac, 0xda, 0x04, 0x2f, 0xd7, 0x64, 0x56, 0x86, 0xec, 0x8b, 0x1b, 0x62, 0xd5, 0x8d, 0x8a, 0xf2, 0xe1, 0x06, 0x3a, 0xb8, 0xe1, 0x46, 0xd1, 0x1e, 0x3a, 0x07, 0x71, 0x0b, 0xc4, 0x52, 0x12, 0x28, 0xf3, 0x5f, 0x51, 0x73, 0x44, 0x3b, 0xbf, 0xd0, 0x89, 0xf6, 0x42, 0xcd, 0x16, 0x64, 0x1c, 0x57, 0x19, 0x9c, 0x9a, 0xb6, 0xe0, 0xd9, 0xb0, 0xc0, 0x19, 0x31, 0xc2, 0xd1, 0x62, 0xf5, 0xe2, 0x0d, 0xbe, 0x73, 0x65, 0xc9, 0x3a, 0xdc, 0x62, 0xfd, 0x5a, 0x46, 0x1b, 0xea, 0x59, 0x56, 0xd7, 0xc1, 0x1a, 0xc6, 0x76, 0x47, 0xbe, 0xdc, 0xea, 0xd5, 0xbb, 0x31, 0x12, 0x24, 0xa4, 0x96, 0xaa, 0x15, 0x59, 0x92, 0xae, 0xe7, 0x4e, 0x45, 0xad }; /* K = 2ff654b680e722ce65a560e785e8ce0b4773c86d */ static const uint8_t ac_dsa_vect49_out[] = { /* R */ 0x17, 0xcc, 0x53, 0xb5, 0xb9, 0x55, 0x8c, 0xc4, 0x1d, 0xf9, 0x46, 0x05, 0x5b, 0x8d, 0x7e, 0x19, 0x71, 0xbe, 0x86, 0xd7, /* S */ 0x00, 0x3c, 0x21, 0x50, 0x39, 0x71, 0xc0, 0x3b, 0x5e, 0xf4, 0xed, 0xc8, 0x04, 0xd2, 0xf7, 0xd3, 0x3f, 0x9e, 0xa9, 0xcc }; #define ac_dsa_vect50_prime ac_dsa_vect46_prime #define ac_dsa_vect50_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect50_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect50_ptx[] = { /* Msg */ 0x65, 0xa3, 0xc9, 0x24, 0x53, 0xf9, 0x61, 0xde, 0x7f, 0x57, 0x6d, 0x5a, 0x1e, 0x31, 0x06, 0xc3, 0x8b, 0x7f, 0x20, 0x81, 0x39, 0x94, 0xb5, 0xdd, 0x20, 0x15, 0x46, 0xdc, 0x45, 0x50, 0x65, 0xdd, 0xe5, 0x9e, 0xdc, 0xd8, 0x4d, 0x0f, 0xa1, 0x7a, 0x85, 0xc0, 0xf9, 0xf9, 0x91, 0x71, 0xd6, 0x7a, 0x34, 0x47, 0x5c, 0xef, 0x4f, 0x31, 0x19, 0x51, 0xf2, 0xee, 0xf7, 0xf6, 0xb6, 0x4a, 0x5b, 0xbc, 0x6d, 0xa6, 0xd1, 0xb6, 0x22, 0x48, 0x0c, 0xde, 0x56, 0xa0, 0x7a, 0x77, 0xaa, 0x60, 0x40, 0xeb, 0xc1, 0xfc, 0xb2, 0x65, 0xb3, 0xb6, 0x24, 0x88, 0x1f, 0xd2, 0x72, 0x03, 0xdc, 0xfe, 0x8a, 0x12, 0x49, 0x21, 0x98, 0x47, 0x4a, 0x99, 0x0c, 0xb9, 0xf3, 0x4a, 0x19, 0x43, 0x35, 0x6f, 0xde, 0x5b, 0xce, 0x3f, 0xd8, 0x35, 0x16, 0xda, 0x8b, 0xf7, 0x80, 0xf8, 0xcb, 0x18, 0x51, 0xb3, 0xb9, 0x54 }; static const uint8_t ac_dsa_vect50_priv_val[] = { /* X */ 0x59, 0xd9, 0x2a, 0xba, 0x23, 0xf5, 0x0a, 0xd0, 0x8b, 0x1d, 0x7c, 0x2a, 0xd5, 0x60, 0xde, 0xd3, 0x6b, 0x94, 0xeb, 0xc8 }; static const uint8_t ac_dsa_vect50_pub_val[] = { /* Y */ 0x0f, 0xc5, 0x14, 0xca, 0x16, 0x0f, 0x34, 0xf2, 0xf6, 0xed, 0xe1, 0xba, 0x59, 0x14, 0xd5, 0x84, 0x4c, 0x9d, 0xe5, 0x14, 0x20, 0x8c, 0x72, 0x56, 0x9a, 0x0b, 0x36, 0xec, 0x92, 0xc8, 0xb2, 0xc8, 0xfd, 0xfb, 0x7d, 0x68, 0x12, 0x74, 0x86, 0xe5, 0x8a, 0x04, 0xa3, 0x2d, 0x0d, 0x15, 0x0e, 0x51, 0xbb, 0x05, 0xe6, 0x66, 0x24, 0xcb, 0x62, 0x2e, 0xda, 0xe1, 0x9a, 0x6b, 0x4b, 0x1d, 0x83, 0x17, 0x68, 0x9b, 0xaa, 0xfa, 0x30, 0x16, 0x8e, 0xf3, 0x75, 0x9e, 0xe8, 0x2e, 0x61, 0x4e, 0x47, 0x61, 0x90, 0x01, 0x82, 0xdf, 0x90, 0xe9, 0xcd, 0x2d, 0x93, 0x11, 0x53, 0x77, 0x1b, 0x8b, 0xe3, 0x0d, 0x89, 0xc2, 0xfb, 0xb9, 0x5b, 0xe7, 0xe0, 0x5a, 0x4b, 0x29, 0xda, 0x96, 0x8f, 0xfe, 0xbb, 0xda, 0x5c, 0x0c, 0x98, 0x39, 0x35, 0x4b, 0xb5, 0x9d, 0xc6, 0x97, 0xa2, 0x69, 0x06, 0x3f, 0x2f, 0x50 }; /* K = 3d0ea569b4dc69342955f5b240af66d228791e50 */ static const uint8_t ac_dsa_vect50_out[] = { /* R */ 0x77, 0xff, 0xaf, 0x42, 0x90, 0xc4, 0x1e, 0xb0, 0x89, 0xc1, 0xd7, 0xbe, 0x5c, 0x8d, 0x38, 0x33, 0x02, 0x77, 0x02, 0xef, /* S */ 0xcb, 0x75, 0x3a, 0x2d, 0x4c, 0xe0, 0xe5, 0x98, 0x51, 0xf8, 0x14, 0x77, 0x9f, 0x34, 0x3b, 0xeb, 0x61, 0x5f, 0x27, 0x70 }; #define ac_dsa_vect51_prime ac_dsa_vect46_prime #define ac_dsa_vect51_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect51_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect51_ptx[] = { /* Msg */ 0x15, 0x26, 0xb6, 0x4c, 0xe4, 0x1c, 0xc8, 0xe2, 0xce, 0xf2, 0x6f, 0x37, 0x06, 0xbe, 0x53, 0x0a, 0x36, 0xac, 0x9c, 0xd1, 0x6f, 0xf6, 0x9f, 0x05, 0x77, 0x3e, 0x94, 0x47, 0xed, 0x94, 0x52, 0x06, 0x4b, 0x77, 0x51, 0xf3, 0xa6, 0x49, 0x19, 0xbf, 0xa3, 0xa7, 0xe1, 0x02, 0x0d, 0xfc, 0x17, 0x5a, 0x10, 0xac, 0xfd, 0xf0, 0x96, 0xfd, 0x41, 0xc0, 0x33, 0x72, 0xe4, 0xd2, 0xab, 0xd7, 0xba, 0x88, 0x7e, 0x00, 0x76, 0x71, 0x6c, 0xe9, 0x55, 0x2f, 0x2c, 0x7c, 0x8e, 0xdd, 0xb1, 0xb3, 0xfc, 0xa1, 0xbd, 0xcd, 0x23, 0x30, 0x0c, 0xe2, 0xb1, 0x67, 0x7d, 0x4a, 0x2d, 0xeb, 0xea, 0xa7, 0x05, 0x34, 0x66, 0xe5, 0x9b, 0x09, 0x87, 0x71, 0xbf, 0xb9, 0x21, 0x8e, 0x0f, 0xb4, 0xab, 0x6b, 0x74, 0x18, 0xab, 0xeb, 0xcc, 0x34, 0xd6, 0x81, 0xe1, 0x4c, 0x4a, 0x89, 0x75, 0x00, 0x0d, 0x83, 0xbb, 0x44 }; static const uint8_t ac_dsa_vect51_priv_val[] = { /* X */ 0x71, 0x62, 0x90, 0xd0, 0xff, 0x2a, 0xd2, 0x32, 0x9b, 0xe2, 0xcc, 0xcf, 0x82, 0x5f, 0x20, 0x75, 0xbe, 0x65, 0x97, 0x43 }; static const uint8_t ac_dsa_vect51_pub_val[] = { /* Y */ 0xd3, 0x0e, 0xed, 0x73, 0x9f, 0x46, 0x47, 0x93, 0x64, 0xd4, 0xc2, 0xbe, 0xc1, 0x8c, 0xf4, 0xc7, 0x5c, 0x32, 0x4f, 0x8d, 0xb8, 0x18, 0x4d, 0x9c, 0x3c, 0x17, 0x55, 0x56, 0xa0, 0x0a, 0xcf, 0xb0, 0xa6, 0x81, 0x38, 0x87, 0xb6, 0x87, 0x06, 0xe7, 0x0c, 0x16, 0x7f, 0x40, 0x63, 0xbc, 0x00, 0x46, 0x39, 0x6b, 0xa1, 0xbb, 0x32, 0x26, 0xc2, 0x92, 0x21, 0xbd, 0x64, 0xec, 0x4c, 0xeb, 0xc9, 0x90, 0xa7, 0xb4, 0x04, 0xe2, 0x6e, 0x2c, 0xf0, 0x42, 0x30, 0x4a, 0x7c, 0x57, 0xab, 0x7d, 0xe4, 0x18, 0xba, 0x67, 0x1e, 0x17, 0xf7, 0xf5, 0x02, 0xb9, 0xe1, 0xbb, 0x59, 0x84, 0x46, 0x9b, 0x30, 0x4e, 0xbc, 0x0c, 0x3c, 0x3a, 0x5a, 0x69, 0xcf, 0xf7, 0xab, 0xff, 0x41, 0x10, 0x13, 0x03, 0x16, 0x65, 0x1e, 0x0f, 0x93, 0xeb, 0xd2, 0x83, 0x4d, 0xd0, 0x44, 0xea, 0xe1, 0xfd, 0x6f, 0x04, 0x51, 0x02 }; /* K = 919d698fe37c027e3e40cdf6e77f81e96d8bfffb */ static const uint8_t ac_dsa_vect51_out[] = { /* R */ 0x31, 0xab, 0xe8, 0xe7, 0x45, 0x8c, 0xe3, 0x63, 0xa5, 0xf3, 0x98, 0x51, 0x11, 0xb2, 0x39, 0xbc, 0x8d, 0xf8, 0xdc, 0xb9, /* S */ 0x1d, 0x96, 0x7b, 0xe0, 0x11, 0x61, 0x28, 0x69, 0x9d, 0x16, 0x7f, 0xc1, 0x6e, 0x5e, 0x92, 0x0a, 0x41, 0x31, 0x16, 0x69 }; #define ac_dsa_vect52_prime ac_dsa_vect46_prime #define ac_dsa_vect52_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect52_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect52_ptx[] = { /* Msg */ 0xd7, 0x85, 0x2e, 0xe9, 0x0b, 0x3f, 0x11, 0x20, 0xbb, 0x11, 0x24, 0x98, 0x08, 0xc7, 0xe7, 0xbe, 0x14, 0xfe, 0x57, 0x7b, 0xff, 0x18, 0x86, 0xbe, 0x3c, 0x42, 0x58, 0x9a, 0x6e, 0xeb, 0x06, 0xa1, 0x83, 0x41, 0x10, 0x86, 0x2b, 0x65, 0xd2, 0x6c, 0xc5, 0xa2, 0xe5, 0xd9, 0x03, 0xed, 0x24, 0x32, 0x8d, 0x68, 0x4c, 0x96, 0xe3, 0xba, 0xbb, 0x37, 0xae, 0x31, 0xf9, 0x6d, 0x32, 0xf5, 0x76, 0x57, 0xa3, 0xbd, 0x77, 0x98, 0xaa, 0xfa, 0xe8, 0x6f, 0x44, 0xad, 0x89, 0x81, 0xe7, 0xcd, 0x47, 0xd7, 0xf3, 0x1b, 0xb4, 0x56, 0x4a, 0x75, 0x7c, 0x92, 0x5c, 0x64, 0xda, 0x98, 0x20, 0x96, 0x3c, 0x1c, 0x51, 0x48, 0xf5, 0x89, 0xd6, 0x39, 0x30, 0x04, 0xa6, 0xa5, 0x8a, 0xa2, 0xc8, 0xa5, 0x78, 0xf4, 0xdb, 0x75, 0x95, 0xf8, 0x86, 0x17, 0x0e, 0x79, 0xe9, 0xd5, 0x7b, 0xf7, 0xff, 0x8f, 0xd0, 0xa7 }; static const uint8_t ac_dsa_vect52_priv_val[] = { /* X */ 0x05, 0x31, 0xcb, 0x42, 0xf4, 0x5b, 0xb8, 0x13, 0xf4, 0x01, 0xbd, 0x23, 0x90, 0x44, 0xdf, 0x2d, 0x3d, 0x19, 0x68, 0xb2 }; static const uint8_t ac_dsa_vect52_pub_val[] = { /* Y */ 0x0d, 0xd3, 0x79, 0x85, 0x16, 0x3f, 0x93, 0x61, 0x8f, 0xde, 0xa8, 0xe3, 0x97, 0x54, 0x19, 0xfc, 0xf7, 0x44, 0x6f, 0xf9, 0x80, 0x85, 0x1e, 0x18, 0x93, 0x2d, 0x74, 0x94, 0xf8, 0x09, 0xc0, 0xae, 0x9c, 0x03, 0xcc, 0x39, 0x77, 0x9f, 0xf0, 0x42, 0x2c, 0xb2, 0x24, 0x8a, 0xe1, 0x98, 0x6f, 0x9a, 0xad, 0x2a, 0x43, 0xd6, 0xfa, 0x68, 0x78, 0xd2, 0x44, 0xb4, 0x29, 0xaa, 0xc5, 0xea, 0x80, 0x15, 0x79, 0x80, 0x57, 0x7e, 0x5b, 0xa0, 0xd1, 0x1b, 0x1f, 0xa3, 0x40, 0xa2, 0x83, 0xfa, 0x0a, 0x2d, 0x65, 0x1e, 0x02, 0x43, 0x31, 0xe6, 0xbb, 0xe7, 0xd0, 0x1a, 0xc0, 0x34, 0xdb, 0x37, 0xb0, 0x08, 0xb9, 0x1f, 0x9f, 0x88, 0xd1, 0x35, 0xfa, 0xd2, 0x3a, 0xf8, 0xc2, 0x27, 0x65, 0xd8, 0x33, 0xa9, 0xc9, 0xef, 0xf7, 0xac, 0xcf, 0x66, 0x8e, 0x17, 0xf9, 0xa8, 0xbd, 0xf5, 0x93, 0x17, 0xc2, 0x02 }; /* K = 739dbd1f84b6be2efdb921a0dfb76dbc6136915c */ static const uint8_t ac_dsa_vect52_out[] = { /* R */ 0x44, 0xc2, 0xd6, 0x50, 0x98, 0x74, 0xac, 0xe7, 0x1a, 0xcd, 0x1d, 0xcc, 0x32, 0x33, 0x5b, 0x39, 0x4c, 0x4e, 0x41, 0xe0, /* S */ 0x37, 0xe7, 0x8f, 0x13, 0xae, 0xc0, 0x52, 0xeb, 0x7b, 0x07, 0xa8, 0xb9, 0xf6, 0xd5, 0x4d, 0xbc, 0x77, 0x82, 0x90, 0x06 }; #define ac_dsa_vect53_prime ac_dsa_vect46_prime #define ac_dsa_vect53_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect53_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect53_ptx[] = { /* Msg */ 0x9a, 0xb9, 0x14, 0x48, 0xa0, 0xdc, 0x96, 0x94, 0xbe, 0x17, 0x3c, 0xe6, 0xd9, 0xb5, 0x22, 0xce, 0x0e, 0x2f, 0x75, 0xfc, 0xb5, 0x77, 0x20, 0xfc, 0x5e, 0xb8, 0xf9, 0x2d, 0x8f, 0xb0, 0xe1, 0x95, 0x03, 0x00, 0x63, 0x96, 0x89, 0x25, 0xa5, 0x68, 0x63, 0x6f, 0x4a, 0xea, 0x1e, 0xdf, 0x6c, 0x5f, 0xcb, 0x86, 0xdc, 0xed, 0xd2, 0x04, 0x53, 0x9d, 0x8c, 0x29, 0x17, 0x57, 0xfb, 0x8a, 0x51, 0x62, 0x0a, 0xbd, 0xa5, 0x9a, 0xa8, 0xf8, 0x50, 0x2e, 0x69, 0x04, 0xbc, 0xe0, 0x66, 0x7d, 0x92, 0xc8, 0xcb, 0x3f, 0xcf, 0x1a, 0x61, 0xb1, 0xfb, 0x0b, 0xb4, 0xe9, 0x38, 0x3b, 0x37, 0xeb, 0x46, 0x9b, 0xd5, 0xc2, 0xf5, 0xa7, 0x76, 0x80, 0xda, 0x62, 0xf9, 0x07, 0xc2, 0xe2, 0x63, 0xcb, 0x48, 0x40, 0x2b, 0x4b, 0x12, 0x98, 0x5e, 0xaa, 0xb9, 0x04, 0x51, 0x88, 0x5e, 0x81, 0x9b, 0x3e, 0x8c, 0x3a }; static const uint8_t ac_dsa_vect53_priv_val[] = { /* X */ 0x6d, 0x76, 0x4c, 0xf6, 0x2a, 0x26, 0x8b, 0x00, 0x70, 0xbf, 0x80, 0x30, 0x86, 0x22, 0xbb, 0x31, 0x94, 0x1d, 0x47, 0x63 }; static const uint8_t ac_dsa_vect53_pub_val[] = { /* Y */ 0x49, 0xd7, 0xf0, 0x8f, 0xde, 0x0a, 0x83, 0xcf, 0xb8, 0x11, 0x6c, 0x9b, 0x7c, 0xdc, 0xab, 0x29, 0x75, 0x1f, 0xca, 0x5f, 0xfe, 0x31, 0x07, 0x60, 0xfe, 0xa7, 0x13, 0xc3, 0x0e, 0x95, 0xe7, 0x75, 0x5e, 0x65, 0xce, 0x60, 0x92, 0x88, 0x93, 0xc6, 0x50, 0x20, 0xee, 0x9b, 0x61, 0xf6, 0xc9, 0xc8, 0x9c, 0x07, 0xe0, 0xfc, 0x50, 0x3b, 0x7b, 0x03, 0x13, 0x68, 0xf0, 0x69, 0x57, 0x8a, 0x9e, 0x6b, 0x45, 0x1f, 0xef, 0x36, 0x9e, 0xf9, 0x0c, 0x26, 0xdd, 0x66, 0x0e, 0xe1, 0xa6, 0xb8, 0xb7, 0x14, 0xd1, 0xcc, 0x28, 0x24, 0x5e, 0x9f, 0x13, 0xf1, 0x87, 0x12, 0x2d, 0xe2, 0x6a, 0xc2, 0xfb, 0xf5, 0xbc, 0xcb, 0x7c, 0xaf, 0xf5, 0x9f, 0x1d, 0xe9, 0x10, 0x55, 0x11, 0x04, 0xd3, 0xa0, 0xe8, 0xfa, 0x9f, 0xe6, 0xb7, 0xea, 0xcc, 0x9a, 0x5f, 0xd5, 0x56, 0xb7, 0xbf, 0x71, 0x39, 0xd6, 0xed, 0xf9 }; /* K = c66ea7177cd6edf6b9079fbcf6737d3890469b19 */ static const uint8_t ac_dsa_vect53_out[] = { /* R */ 0x95, 0xda, 0x25, 0xd0, 0x6f, 0xf9, 0xc0, 0x2b, 0xc8, 0x93, 0xfb, 0x03, 0x25, 0x08, 0x30, 0x4c, 0x17, 0xeb, 0xcf, 0x08, /* S */ 0x61, 0x7a, 0xdb, 0x8d, 0xe1, 0x0d, 0xa1, 0xa8, 0x74, 0x13, 0xd6, 0x44, 0x66, 0xb4, 0x82, 0x40, 0x9d, 0x27, 0xbc, 0xe7 }; #define ac_dsa_vect54_prime ac_dsa_vect46_prime #define ac_dsa_vect54_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect54_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect54_ptx[] = { /* Msg */ 0xc9, 0xc0, 0xe6, 0x9f, 0x84, 0x0c, 0xb6, 0xde, 0xb9, 0x84, 0xc2, 0x57, 0x5d, 0x7f, 0x68, 0x16, 0xfa, 0x35, 0xaf, 0x03, 0xb4, 0x42, 0x9c, 0x70, 0x3a, 0x5a, 0xec, 0x90, 0xe7, 0xcb, 0x26, 0xe5, 0x24, 0x13, 0x58, 0x7f, 0x3b, 0xc5, 0xa0, 0x77, 0x2b, 0xe7, 0xb5, 0xe5, 0x89, 0xc9, 0xa7, 0x60, 0x71, 0xc1, 0x73, 0x98, 0x33, 0xf4, 0x61, 0x1f, 0xa9, 0x51, 0xd3, 0x75, 0x82, 0x0b, 0x48, 0xd7, 0x40, 0x62, 0x6c, 0x66, 0x55, 0x34, 0xd6, 0x04, 0x87, 0xbf, 0x3e, 0x0a, 0x84, 0xeb, 0x63, 0x89, 0xe0, 0x99, 0xfe, 0x62, 0x1f, 0x26, 0x94, 0x91, 0xc3, 0xb8, 0x94, 0x2e, 0x03, 0xbb, 0xad, 0x2a, 0x52, 0x20, 0xca, 0xf5, 0x1e, 0x7b, 0x4a, 0x26, 0x50, 0xe4, 0xb3, 0x00, 0x02, 0x4a, 0x0a, 0x96, 0xf0, 0x86, 0x1b, 0x32, 0x06, 0xff, 0xfc, 0xa8, 0x3d, 0x08, 0x50, 0xf2, 0xa3, 0xe2, 0xa0, 0x6c }; static const uint8_t ac_dsa_vect54_priv_val[] = { /* X */ 0x38, 0xa6, 0x2d, 0x23, 0x4e, 0x1a, 0xea, 0x0e, 0x84, 0x76, 0x21, 0xe7, 0x9d, 0xd1, 0x7e, 0xe9, 0xd0, 0x8b, 0xd9, 0xc6 }; static const uint8_t ac_dsa_vect54_pub_val[] = { /* Y */ 0x26, 0xf7, 0x32, 0x19, 0xd0, 0xe7, 0xdd, 0x3a, 0x80, 0xe7, 0xfb, 0xc0, 0x79, 0xd9, 0xba, 0xad, 0x45, 0x12, 0x89, 0x1a, 0xad, 0xfd, 0x24, 0x16, 0xb1, 0x85, 0x9f, 0x41, 0xad, 0xac, 0x31, 0x17, 0x1e, 0xc6, 0x24, 0xd8, 0xa4, 0xd6, 0xa1, 0x0d, 0x5d, 0xe1, 0xb9, 0x39, 0x59, 0xbc, 0x49, 0x95, 0x3f, 0x23, 0x49, 0x2f, 0x18, 0xab, 0x76, 0x5f, 0x96, 0x3a, 0x98, 0x58, 0x48, 0x07, 0xd6, 0x66, 0x29, 0xe5, 0xa1, 0xe0, 0x57, 0xd7, 0x7d, 0x42, 0xe3, 0x36, 0x34, 0x58, 0x64, 0x1a, 0x04, 0x69, 0x16, 0x6a, 0x0d, 0x85, 0x3b, 0x27, 0x79, 0x8b, 0xd8, 0x48, 0xaa, 0x0d, 0x3c, 0xcd, 0xbb, 0x40, 0xfa, 0x21, 0xb9, 0xfe, 0x62, 0x82, 0x4c, 0xb2, 0xc7, 0xcc, 0x62, 0x42, 0x59, 0x78, 0xe6, 0x72, 0xaf, 0xf0, 0xbb, 0xd8, 0xc8, 0xcd, 0x08, 0xe4, 0x63, 0x85, 0xb0, 0xd6, 0x21, 0x9d, 0xc5, 0x6e }; /* K = 5f5755dce464174adfe00affb55a71222d83da85 */ static const uint8_t ac_dsa_vect54_out[] = { /* R */ 0xb6, 0xb2, 0x5a, 0x9d, 0xa1, 0x10, 0xb5, 0xd5, 0x76, 0x75, 0x88, 0x9e, 0xae, 0x75, 0xab, 0x58, 0xa4, 0xd8, 0xe2, 0x81, /* S */ 0x5a, 0x60, 0xc2, 0xb0, 0xad, 0xbe, 0xa4, 0xc5, 0xbe, 0x06, 0x5b, 0xbd, 0x0f, 0xd0, 0xe3, 0xce, 0x4b, 0xf2, 0x92, 0x00 }; #define ac_dsa_vect55_prime ac_dsa_vect46_prime #define ac_dsa_vect55_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect55_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect55_ptx[] = { /* Msg */ 0x40, 0x02, 0xde, 0x82, 0x5b, 0xb8, 0x7a, 0xc3, 0x46, 0xbd, 0x84, 0x87, 0xcf, 0x6b, 0xe0, 0x53, 0xcb, 0x30, 0xee, 0x67, 0xc6, 0x64, 0x34, 0x21, 0x71, 0x07, 0xa8, 0xb0, 0xb5, 0x2e, 0x57, 0x26, 0x90, 0x06, 0x15, 0xed, 0xd2, 0xfd, 0x0a, 0xcd, 0xf8, 0x8a, 0x7e, 0x65, 0xe7, 0xdd, 0x3b, 0xa6, 0xab, 0xbb, 0xb3, 0x71, 0xa1, 0xc8, 0x40, 0x25, 0x0d, 0x9c, 0xe8, 0x09, 0xe7, 0xb1, 0x11, 0x1f, 0x16, 0xda, 0xf5, 0x19, 0x42, 0x11, 0x71, 0x5f, 0xf5, 0xfe, 0x63, 0x1e, 0x37, 0x84, 0x08, 0x74, 0x98, 0x48, 0xa0, 0xc8, 0x1a, 0x28, 0x9b, 0x43, 0x38, 0xbc, 0xcd, 0x8d, 0x10, 0x53, 0xf8, 0x63, 0x19, 0x7a, 0xd0, 0x29, 0x20, 0xfc, 0xbc, 0xa5, 0x14, 0xe2, 0xdf, 0xd9, 0x4a, 0x8b, 0x00, 0xf9, 0x0c, 0xf0, 0x34, 0xad, 0xfd, 0x77, 0x6f, 0x4d, 0xca, 0xef, 0x2c, 0x8d, 0xce, 0x3b, 0x05, 0x39 }; static const uint8_t ac_dsa_vect55_priv_val[] = { /* X */ 0xc8, 0xf0, 0xd6, 0x97, 0xbb, 0xcb, 0xcc, 0x0e, 0x31, 0x86, 0x4f, 0x83, 0x19, 0x98, 0x41, 0x25, 0xf5, 0x2f, 0xf5, 0xaa }; static const uint8_t ac_dsa_vect55_pub_val[] = { /* Y */ 0x14, 0x9b, 0xcb, 0xb4, 0xf5, 0x98, 0x3d, 0xb5, 0x6f, 0xbe, 0x99, 0x8f, 0xcd, 0x02, 0xd7, 0x36, 0xe6, 0xd2, 0xf1, 0x8f, 0xcf, 0x96, 0x46, 0x8c, 0xd7, 0xe9, 0x9b, 0xc6, 0x47, 0x43, 0x6f, 0xbd, 0x74, 0xfd, 0x7a, 0x2c, 0xc2, 0xf0, 0xd8, 0x86, 0x69, 0x52, 0xb9, 0x7b, 0x44, 0xff, 0x64, 0x4b, 0x56, 0x65, 0xcd, 0x10, 0x65, 0xb0, 0x7a, 0x2c, 0x33, 0xd9, 0x15, 0x1d, 0xeb, 0x33, 0x5e, 0x35, 0x22, 0xc1, 0xb7, 0x7d, 0xa1, 0x44, 0x3a, 0x13, 0x73, 0xc9, 0x3b, 0xfa, 0x04, 0x0d, 0xa5, 0xa1, 0x35, 0x3b, 0x88, 0xa7, 0x8e, 0x3a, 0x5a, 0x08, 0x4e, 0x6c, 0x44, 0x2d, 0xb0, 0x3f, 0x7f, 0xbb, 0x4b, 0xdb, 0xd3, 0x0b, 0x1a, 0xf3, 0x96, 0x3f, 0x8c, 0x5d, 0x3e, 0x83, 0x45, 0x32, 0x94, 0xe3, 0xa0, 0x7d, 0xda, 0xcf, 0xd4, 0x3d, 0xc8, 0xf9, 0xe8, 0x30, 0x32, 0xfe, 0xf7, 0x84, 0x20, 0xc4 }; /* K = b4281920a775fbeefb89615b236217fd1046f2cf */ static const uint8_t ac_dsa_vect55_out[] = { /* R */ 0xd3, 0xcd, 0xe1, 0x70, 0xd8, 0x21, 0x54, 0xec, 0x1b, 0xbd, 0x90, 0x77, 0xc4, 0x86, 0x97, 0x11, 0x20, 0x60, 0x03, 0x76, /* S */ 0xb0, 0x08, 0xfc, 0xd0, 0x1b, 0x5e, 0x49, 0xa8, 0x5a, 0x92, 0x1b, 0xee, 0x1d, 0xdd, 0x70, 0x62, 0x12, 0x79, 0x90, 0x86 }; #define ac_dsa_vect56_prime ac_dsa_vect46_prime #define ac_dsa_vect56_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect56_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect56_ptx[] = { /* Msg */ 0xf7, 0x01, 0x8f, 0xf0, 0xaf, 0x67, 0x76, 0xed, 0x42, 0x34, 0xc1, 0xfb, 0x9c, 0xca, 0x1f, 0x8c, 0xff, 0x31, 0x29, 0x5c, 0xb9, 0xf7, 0x6d, 0x8b, 0x73, 0x89, 0x84, 0x30, 0x09, 0x7c, 0x49, 0xa4, 0x00, 0x28, 0x44, 0x17, 0x71, 0xea, 0x1d, 0xe0, 0x8f, 0xfd, 0x5c, 0xec, 0x7e, 0xaa, 0x59, 0xe3, 0x2b, 0x3a, 0x17, 0x03, 0x29, 0x13, 0x92, 0x27, 0xba, 0x86, 0xe0, 0xc5, 0xef, 0xca, 0xee, 0x38, 0x2b, 0xff, 0xf9, 0x62, 0x24, 0x9d, 0xa8, 0x53, 0xde, 0xe4, 0x18, 0x41, 0x3f, 0x20, 0x1a, 0x28, 0xfe, 0x45, 0xb8, 0x29, 0x3c, 0x26, 0x20, 0x89, 0xd2, 0xce, 0xeb, 0x9a, 0xf6, 0x75, 0x29, 0xab, 0x01, 0x1f, 0x04, 0xf5, 0xee, 0xaf, 0x82, 0xba, 0x32, 0xdc, 0xe9, 0xa9, 0x82, 0x17, 0x62, 0xc3, 0x35, 0x1b, 0x00, 0x20, 0x65, 0x91, 0xa3, 0xf8, 0x7c, 0x52, 0x60, 0xa4, 0x26, 0x36, 0x59, 0xf0 }; static const uint8_t ac_dsa_vect56_priv_val[] = { /* X */ 0x9d, 0xbd, 0x26, 0x2d, 0xa7, 0xa5, 0x29, 0xf8, 0x0a, 0xa6, 0x67, 0xb2, 0x7a, 0x29, 0xd6, 0xa5, 0x26, 0x71, 0xfb, 0x89 }; static const uint8_t ac_dsa_vect56_pub_val[] = { /* Y */ 0x6c, 0x20, 0x6e, 0x71, 0xfe, 0xd8, 0xb3, 0x63, 0xfc, 0xf5, 0x71, 0x78, 0x6c, 0xe1, 0xb4, 0xe5, 0x2a, 0x40, 0x4d, 0xe7, 0xed, 0xa7, 0x03, 0x1e, 0x5d, 0x93, 0xa4, 0x7e, 0xa6, 0x68, 0xde, 0x43, 0xdc, 0x70, 0x73, 0xe3, 0x1d, 0x3b, 0x6b, 0x12, 0x5a, 0xe3, 0xe8, 0xee, 0x45, 0xae, 0xd2, 0x73, 0xbc, 0x87, 0x8c, 0x73, 0x42, 0x3b, 0x22, 0x5a, 0x15, 0x26, 0xbb, 0xb1, 0x49, 0xa0, 0xce, 0x5e, 0x9a, 0x2d, 0x29, 0x62, 0xbd, 0x6d, 0x33, 0x23, 0x75, 0x86, 0x0f, 0x84, 0xce, 0x0e, 0x78, 0x7a, 0x0a, 0xf9, 0x3f, 0x44, 0xe6, 0x4e, 0xda, 0xa2, 0xdc, 0xe6, 0xca, 0x22, 0xbc, 0xc6, 0xd4, 0x8b, 0x84, 0xb0, 0xaf, 0xfb, 0xa3, 0x42, 0x75, 0x3b, 0x18, 0x42, 0x94, 0x10, 0x67, 0xd5, 0xb8, 0x41, 0x4c, 0x35, 0x61, 0x38, 0xe6, 0x25, 0xbb, 0x50, 0x65, 0x66, 0xa2, 0x7b, 0x33, 0x50, 0x94, 0xb0 }; /* K = 0f0e02596ce6674684e7ec448d2938de12842fe2 */ static const uint8_t ac_dsa_vect56_out[] = { /* R */ 0x07, 0x9b, 0x08, 0xbc, 0x01, 0x6c, 0x54, 0x3d, 0x09, 0xd6, 0xb2, 0x76, 0xc0, 0x23, 0x34, 0x7a, 0x3a, 0xac, 0xe9, 0xae, /* S */ 0x16, 0x4c, 0x3c, 0x38, 0x0f, 0x20, 0x9f, 0xea, 0xf8, 0xff, 0xcf, 0x53, 0x69, 0x1e, 0xe3, 0x03, 0x1c, 0x3b, 0x3f, 0xff }; #define ac_dsa_vect57_prime ac_dsa_vect46_prime #define ac_dsa_vect57_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect57_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect57_ptx[] = { /* Msg */ 0x4a, 0x18, 0xbd, 0xcc, 0xcd, 0x46, 0xbb, 0x89, 0x56, 0x7c, 0xeb, 0x9c, 0x1e, 0x2e, 0x50, 0x0a, 0x3b, 0xae, 0xd2, 0x4f, 0xf2, 0xc5, 0xfc, 0x7f, 0x83, 0xcb, 0x3c, 0xf6, 0xa6, 0xf3, 0x88, 0x59, 0xa1, 0xa9, 0x27, 0xfa, 0xb5, 0xe2, 0xfd, 0x7e, 0xa1, 0xe1, 0xa4, 0x15, 0x47, 0x39, 0x30, 0x1c, 0xb1, 0x95, 0x77, 0x09, 0x10, 0x3a, 0xf8, 0x86, 0xc9, 0x29, 0xcf, 0x88, 0xd2, 0x5c, 0xed, 0x5c, 0xd6, 0xf8, 0xcf, 0x3f, 0xfe, 0xe7, 0xb0, 0x88, 0xed, 0xc2, 0xf6, 0xab, 0xd1, 0x11, 0x43, 0x98, 0xa3, 0xab, 0x00, 0xfc, 0x21, 0xbe, 0xc0, 0x2e, 0x8e, 0x53, 0x9b, 0xa1, 0x2d, 0xf7, 0x0a, 0x58, 0x7f, 0xbf, 0xba, 0x63, 0x19, 0x5c, 0x64, 0x49, 0xb2, 0xb8, 0x49, 0x54, 0x7c, 0x42, 0x27, 0x78, 0x34, 0xe1, 0xec, 0x08, 0x6b, 0x5e, 0x53, 0xd9, 0x49, 0x84, 0x67, 0x69, 0xe8, 0x97, 0x15, 0xbf }; static const uint8_t ac_dsa_vect57_priv_val[] = { /* X */ 0x5b, 0x3e, 0x9c, 0xc0, 0xe0, 0xbe, 0x3d, 0x71, 0x4d, 0x1b, 0xb2, 0xd9, 0x5e, 0x51, 0x46, 0xd2, 0x7a, 0x58, 0xf2, 0xee }; static const uint8_t ac_dsa_vect57_pub_val[] = { /* Y */ 0x8e, 0x66, 0x8d, 0xd1, 0x52, 0x7b, 0x5d, 0x1e, 0x56, 0xaa, 0xe4, 0xa6, 0xca, 0x22, 0x5e, 0x67, 0x73, 0x68, 0x41, 0x23, 0x24, 0xa7, 0x9d, 0x98, 0xbf, 0xda, 0xd9, 0xa8, 0x4d, 0x9f, 0x87, 0xc1, 0x35, 0x75, 0x18, 0xc9, 0xa5, 0x05, 0x6e, 0xa6, 0xa0, 0x88, 0x2e, 0x94, 0xd4, 0xff, 0xad, 0xd9, 0x7d, 0x89, 0xbc, 0xf2, 0xf3, 0x2f, 0xf4, 0x42, 0xb2, 0x5d, 0xd2, 0xaf, 0x2a, 0x78, 0xdd, 0xad, 0xe4, 0x6b, 0x75, 0xaa, 0x8a, 0x5b, 0x1a, 0x14, 0x71, 0x76, 0x4a, 0xb6, 0x99, 0xd7, 0x00, 0xcb, 0x2a, 0x28, 0xb9, 0x59, 0xa3, 0x84, 0x8e, 0xdb, 0xbd, 0x6c, 0x95, 0x14, 0xee, 0x84, 0x9f, 0x83, 0x3c, 0x43, 0x00, 0x85, 0x31, 0x36, 0x5a, 0x01, 0x54, 0x1f, 0x9c, 0x0b, 0x65, 0xd5, 0xe7, 0xd3, 0xc2, 0x1d, 0xc8, 0xbe, 0xf1, 0x36, 0x9a, 0x41, 0xc0, 0x40, 0x5f, 0x37, 0x23, 0xf6, 0x79, 0x10 }; /* K = 3d9b8166860e18a9306026ba669a3620c2954ad4 */ static const uint8_t ac_dsa_vect57_out[] = { /* R */ 0xb2, 0x2c, 0x00, 0xfe, 0x0b, 0xc2, 0xfa, 0xe7, 0xa4, 0xab, 0x74, 0xed, 0xcd, 0x49, 0x6c, 0x64, 0xa9, 0x99, 0xc7, 0xd3, /* S */ 0x85, 0xba, 0x8d, 0xbb, 0xc9, 0x3a, 0xb9, 0x4a, 0x76, 0x13, 0x3d, 0x47, 0x9e, 0x3f, 0x79, 0x57, 0x69, 0x44, 0xe6, 0xca }; #define ac_dsa_vect58_prime ac_dsa_vect46_prime #define ac_dsa_vect58_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect58_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect58_ptx[] = { /* Msg */ 0x75, 0x47, 0x47, 0x11, 0x82, 0x17, 0x66, 0xb0, 0x65, 0xe2, 0x44, 0x86, 0x01, 0xe8, 0x2b, 0x88, 0x15, 0x3a, 0x41, 0xbf, 0xb5, 0xc6, 0xb6, 0xa9, 0xdd, 0xcf, 0x73, 0x17, 0x0e, 0xe3, 0x74, 0xa6, 0x62, 0x5d, 0xe1, 0x9c, 0x56, 0x0b, 0xcb, 0xd2, 0x02, 0x0b, 0xfe, 0xab, 0x5c, 0xbf, 0xad, 0x8f, 0xc6, 0x0c, 0xcf, 0xc9, 0x5a, 0x1b, 0x94, 0xfb, 0xef, 0xdf, 0x81, 0x5d, 0x9b, 0xfc, 0x43, 0xfa, 0x59, 0x31, 0x5e, 0x70, 0x93, 0xd5, 0x68, 0x52, 0x74, 0xb8, 0xaf, 0xc3, 0x13, 0x9b, 0x92, 0x5e, 0xbf, 0x69, 0x7f, 0xe2, 0x69, 0x9b, 0x0f, 0xeb, 0x1e, 0x42, 0xbc, 0xa6, 0x5e, 0x5d, 0x4e, 0xb0, 0xb4, 0x51, 0x4a, 0xf9, 0x2d, 0xfa, 0xb8, 0x5e, 0x7f, 0x26, 0x66, 0xc8, 0x7e, 0x97, 0x89, 0x39, 0x5f, 0x35, 0x4c, 0xe3, 0x39, 0x38, 0xe9, 0x62, 0x30, 0x61, 0x11, 0x34, 0x65, 0xa4, 0xe2, 0xb9 }; static const uint8_t ac_dsa_vect58_priv_val[] = { /* X */ 0x9b, 0x4a, 0x25, 0x36, 0xa1, 0x08, 0x89, 0x22, 0x40, 0xfc, 0x40, 0xc8, 0xc6, 0x9a, 0x4b, 0x9b, 0x90, 0x3a, 0xc7, 0x60 }; static const uint8_t ac_dsa_vect58_pub_val[] = { /* Y */ 0x74, 0xa9, 0x3c, 0x73, 0xd7, 0x55, 0x00, 0xca, 0x43, 0x05, 0xca, 0x31, 0x84, 0x47, 0x5b, 0x53, 0xd9, 0x6c, 0x6f, 0xdd, 0x41, 0x7e, 0xf2, 0x3d, 0x9d, 0xc6, 0x1b, 0x80, 0xbb, 0xc1, 0x10, 0x82, 0x28, 0xd2, 0x54, 0x3c, 0x1c, 0x3a, 0x9f, 0x2e, 0x77, 0x83, 0xca, 0x69, 0xb0, 0x19, 0xc0, 0xcd, 0x9a, 0x6d, 0x2b, 0x62, 0xb0, 0xed, 0x93, 0xd4, 0x22, 0x9d, 0xa8, 0x7b, 0xfc, 0x21, 0xf9, 0xe4, 0xbd, 0x0d, 0xea, 0x2c, 0x4e, 0x6d, 0x4d, 0x2f, 0x88, 0x20, 0x1a, 0xb0, 0x50, 0x4b, 0x31, 0xf4, 0xef, 0x15, 0x58, 0xad, 0xf4, 0x93, 0xe4, 0x70, 0xad, 0xfc, 0x57, 0x2c, 0xa6, 0x8d, 0xeb, 0xc4, 0x61, 0x23, 0x58, 0x9a, 0xe9, 0x13, 0xb9, 0x67, 0x98, 0x3d, 0xbc, 0xac, 0x6b, 0xf3, 0xbd, 0x86, 0x11, 0x13, 0x7e, 0x39, 0xd5, 0x87, 0x00, 0x57, 0xae, 0x18, 0xcb, 0x84, 0xa7, 0x6a, 0xae, 0x30 }; /* K = a993b059a49855e359014151700d02e8292ae708 */ static const uint8_t ac_dsa_vect58_out[] = { /* R */ 0x1e, 0xd1, 0x31, 0xc9, 0x6a, 0x2c, 0x31, 0x0e, 0x1f, 0x79, 0x76, 0xd3, 0x08, 0x2a, 0x69, 0xa5, 0xaf, 0x45, 0xbd, 0xd0, /* S */ 0x70, 0x66, 0x3e, 0x9a, 0xd7, 0x11, 0x3a, 0xe5, 0x7d, 0x4a, 0xf6, 0x90, 0x77, 0x12, 0xe0, 0xaa, 0xf8, 0x8b, 0xc0, 0x7a }; #define ac_dsa_vect59_prime ac_dsa_vect46_prime #define ac_dsa_vect59_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect59_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect59_ptx[] = { /* Msg */ 0x34, 0x0d, 0xf7, 0x08, 0xd4, 0x57, 0xdf, 0x94, 0x13, 0xef, 0x2b, 0xda, 0x22, 0x5c, 0x5f, 0x55, 0x8b, 0x90, 0x96, 0x6c, 0xdd, 0x53, 0x1a, 0x0b, 0x5a, 0xa7, 0x45, 0xd5, 0xc3, 0xea, 0x79, 0x0d, 0xeb, 0xea, 0x22, 0x48, 0x61, 0xef, 0x12, 0xfb, 0x16, 0x38, 0xbf, 0xf0, 0x12, 0x1f, 0xf2, 0x6d, 0xbd, 0xcf, 0xfc, 0x29, 0x9b, 0xf9, 0xf3, 0xa9, 0xc1, 0xfe, 0x60, 0x27, 0x40, 0x0f, 0xf1, 0x4c, 0x34, 0xfb, 0x06, 0xf6, 0x7d, 0xb9, 0xc3, 0x0a, 0x1d, 0xcb, 0xfd, 0x99, 0x69, 0x03, 0x52, 0x3d, 0x85, 0x04, 0x63, 0x82, 0xff, 0x28, 0x04, 0x18, 0xd9, 0x74, 0xa3, 0xec, 0xe6, 0xb5, 0xfa, 0xfe, 0x30, 0x5e, 0x2e, 0x79, 0xb1, 0xd0, 0x7a, 0x7c, 0x1e, 0xeb, 0x7a, 0x12, 0x77, 0xa8, 0x22, 0x82, 0xbe, 0x62, 0x83, 0x1d, 0xf7, 0xfe, 0xe3, 0x88, 0x41, 0x46, 0x26, 0x02, 0x98, 0x6a, 0x8e, 0x9b }; static const uint8_t ac_dsa_vect59_priv_val[] = { /* X */ 0x06, 0x7e, 0x6e, 0x55, 0xbe, 0x47, 0x44, 0x72, 0x3b, 0x6f, 0x05, 0x6b, 0x76, 0x62, 0x9e, 0x93, 0xc2, 0x97, 0xa5, 0x85 }; static const uint8_t ac_dsa_vect59_pub_val[] = { /* Y */ 0x61, 0x50, 0xa6, 0x8d, 0x64, 0xad, 0xda, 0x3d, 0x3f, 0xb5, 0xa9, 0x73, 0xc6, 0x2b, 0x99, 0x2a, 0xd3, 0xfe, 0x53, 0x8a, 0xf7, 0x16, 0x1b, 0xae, 0x41, 0xea, 0x2f, 0x17, 0x99, 0x30, 0x4f, 0xe5, 0xb8, 0xc8, 0x64, 0xe0, 0x61, 0xd1, 0x33, 0xd9, 0x4c, 0x16, 0xa4, 0xc6, 0xb0, 0xed, 0x8d, 0xff, 0xdf, 0x2c, 0xef, 0xa7, 0x39, 0x40, 0x15, 0xe7, 0x5c, 0x57, 0xb1, 0x81, 0x41, 0x9d, 0xcf, 0xef, 0xe3, 0x40, 0x9d, 0x3b, 0x53, 0xd8, 0x69, 0x11, 0xc7, 0x49, 0xf9, 0xf2, 0x8f, 0x7c, 0x1d, 0xe9, 0x9f, 0x7e, 0x4b, 0x2e, 0xa2, 0x2a, 0x48, 0x81, 0x7a, 0xce, 0x4f, 0xd9, 0x97, 0x4f, 0xa5, 0x3b, 0x8d, 0x4f, 0x05, 0xf5, 0x73, 0x14, 0x88, 0x81, 0x38, 0x03, 0xd7, 0xf3, 0xaa, 0xf1, 0xcf, 0xa1, 0x38, 0xbc, 0x73, 0xc4, 0xd2, 0x7c, 0xa1, 0x62, 0x1e, 0x92, 0x26, 0x66, 0x18, 0x83, 0xe9, 0xdd }; /* K = 77857e6de8f37eeb6925a87c027a3cd88b9d3584 */ static const uint8_t ac_dsa_vect59_out[] = { /* R */ 0x4f, 0x18, 0x2a, 0xd4, 0x2c, 0xb5, 0x67, 0x1d, 0x31, 0x62, 0xbb, 0x9d, 0x04, 0xa0, 0x6c, 0xd2, 0x0e, 0xdb, 0xc5, 0x58, /* S */ 0xa6, 0xc5, 0x41, 0x79, 0x47, 0x44, 0x77, 0x18, 0xed, 0x1c, 0xb8, 0x9a, 0x6e, 0xfc, 0xe2, 0xd3, 0x11, 0x6e, 0x50, 0xd1 }; #define ac_dsa_vect60_prime ac_dsa_vect46_prime #define ac_dsa_vect60_sub_prime ac_dsa_vect46_sub_prime #define ac_dsa_vect60_base ac_dsa_vect46_base static const uint8_t ac_dsa_vect60_ptx[] = { /* Msg */ 0x9f, 0x23, 0xc8, 0x25, 0x63, 0xab, 0x7c, 0x0b, 0xa8, 0x6b, 0xbb, 0x98, 0x93, 0x35, 0x00, 0x0a, 0x49, 0x3b, 0x29, 0x1e, 0x5d, 0xc1, 0x7c, 0xe7, 0x29, 0x49, 0x49, 0x58, 0x90, 0x36, 0x23, 0xed, 0x99, 0xdf, 0x34, 0x42, 0x30, 0xff, 0xb6, 0x26, 0xb1, 0xdb, 0xef, 0xcc, 0xe0, 0x59, 0xae, 0x16, 0xc2, 0xee, 0x7e, 0xe6, 0xfd, 0x2a, 0x78, 0x07, 0x33, 0x6c, 0xb7, 0x1b, 0x88, 0x53, 0xe2, 0xed, 0x3b, 0x74, 0xb2, 0xfa, 0xac, 0x82, 0xa8, 0x31, 0xd5, 0x3e, 0x03, 0xd7, 0xbb, 0xb9, 0x6d, 0x38, 0xdf, 0x98, 0xfd, 0x19, 0xbd, 0x4c, 0x1a, 0x62, 0x48, 0xcd, 0x50, 0x7c, 0x89, 0xf7, 0x99, 0x5f, 0x59, 0x57, 0x9a, 0xfe, 0x53, 0x19, 0x73, 0x1b, 0x44, 0x3d, 0x68, 0x71, 0xe5, 0x58, 0xf5, 0xb7, 0x7f, 0x2f, 0x9a, 0x4d, 0xd9, 0x9e, 0xfb, 0x30, 0x5e, 0x27, 0x91, 0x65, 0x94, 0x52, 0x4e, 0x02 }; static const uint8_t ac_dsa_vect60_priv_val[] = { /* X */ 0xb4, 0x57, 0xe1, 0x75, 0x6e, 0xe9, 0x05, 0x6f, 0xda, 0x72, 0x07, 0x61, 0x6c, 0xf7, 0xc0, 0x4a, 0x33, 0xaf, 0xa6, 0x6a }; static const uint8_t ac_dsa_vect60_pub_val[] = { /* Y */ 0x96, 0xd7, 0x45, 0x11, 0x81, 0xfb, 0x25, 0x3f, 0xbc, 0x3f, 0x44, 0x14, 0x09, 0xbe, 0x5e, 0x5e, 0x01, 0x44, 0x97, 0x26, 0x10, 0xe3, 0x7f, 0xa8, 0x2b, 0xc2, 0xaf, 0x24, 0x66, 0x37, 0xa4, 0xc9, 0x18, 0x02, 0x30, 0x97, 0x87, 0x52, 0x55, 0xa2, 0x17, 0xea, 0x89, 0x5d, 0xad, 0xdf, 0x46, 0xbf, 0xbb, 0x17, 0x47, 0x49, 0xb0, 0x4c, 0x59, 0xfe, 0xfa, 0x62, 0x89, 0x68, 0x4f, 0x2f, 0x9a, 0xea, 0xdf, 0x5c, 0xe7, 0xca, 0x47, 0xf0, 0x03, 0x2e, 0x38, 0x4b, 0x7d, 0x50, 0x59, 0x79, 0x01, 0x18, 0x15, 0x01, 0xcb, 0x59, 0x15, 0xfb, 0x46, 0x86, 0xa6, 0xad, 0x7b, 0xcd, 0x5b, 0x46, 0x86, 0x24, 0x11, 0xa4, 0xdf, 0x22, 0xb1, 0xed, 0x2a, 0x56, 0x90, 0x5e, 0x07, 0xc0, 0xa9, 0x36, 0xc9, 0x94, 0x42, 0x13, 0x19, 0x4e, 0xbe, 0xfd, 0x4e, 0xc6, 0x85, 0x97, 0xcc, 0xa0, 0x36, 0x33, 0x8b, 0x3c }; /* K = b29f28659dffea28449435b5a044487e29d82d6a */ static const uint8_t ac_dsa_vect60_out[] = { /* R */ 0xb6, 0x59, 0x9f, 0xbd, 0xdb, 0x48, 0x56, 0x27, 0x6d, 0xf4, 0x48, 0xcf, 0x09, 0xd6, 0x2f, 0xd7, 0x65, 0x7d, 0xe6, 0xc3, /* S */ 0x4b, 0x49, 0x58, 0x90, 0x99, 0xbe, 0x55, 0x78, 0x32, 0x2d, 0x82, 0x9b, 0x87, 0xb4, 0x3a, 0xc0, 0x7f, 0x62, 0xe3, 0x5d }; /* [mod = L=1024, N=160, SHA-512] */ static const uint8_t ac_dsa_vect61_prime[] = { /* P */ 0x88, 0xd9, 0x68, 0xe9, 0x60, 0x2e, 0xcb, 0xda, 0x6d, 0x86, 0xf7, 0xc9, 0x70, 0xa3, 0xff, 0xbe, 0xb1, 0xda, 0x96, 0x2f, 0x28, 0xc0, 0xaf, 0xb9, 0x27, 0x0e, 0xf0, 0x5b, 0xc3, 0x30, 0xca, 0x98, 0xc3, 0xad, 0xf8, 0x3c, 0x07, 0x2f, 0xeb, 0x05, 0xfb, 0x2e, 0x29, 0x3b, 0x50, 0x65, 0xbb, 0xb0, 0xcb, 0xcc, 0x93, 0x0c, 0x24, 0xd8, 0xd0, 0x78, 0x69, 0xde, 0xae, 0xcd, 0x92, 0xa2, 0x60, 0x4c, 0x0f, 0x5d, 0xd3, 0x5c, 0x5b, 0x43, 0x1f, 0xda, 0x6a, 0x22, 0x2c, 0x52, 0xc3, 0x56, 0x2b, 0xf7, 0x57, 0x1c, 0x71, 0x02, 0x09, 0xbe, 0x8b, 0x3b, 0x85, 0x88, 0x18, 0x78, 0x87, 0x25, 0xfe, 0x81, 0x12, 0xb7, 0xd6, 0xbc, 0x82, 0xe0, 0xff, 0x1c, 0xbb, 0xf5, 0xd6, 0xfe, 0x94, 0x69, 0x0a, 0xf2, 0xb5, 0x10, 0xe4, 0x1a, 0xd8, 0x20, 0x7d, 0xc2, 0xc0, 0x2f, 0xb9, 0xfa, 0x5c, 0xef, 0xaa, 0xb5 }; static const uint8_t ac_dsa_vect61_sub_prime[] = { /* Q */ 0xa6, 0x65, 0x68, 0x9b, 0x9e, 0x5b, 0x9c, 0xe8, 0x2f, 0xd1, 0x67, 0x60, 0x06, 0xcf, 0x4c, 0xf6, 0x7e, 0xcc, 0x56, 0xb7 }; static const uint8_t ac_dsa_vect61_base[] = { /* G */ 0x26, 0x7e, 0x28, 0x28, 0x57, 0x41, 0x77, 0x52, 0x11, 0x3f, 0xba, 0x3f, 0xca, 0x71, 0x55, 0xb5, 0xce, 0x89, 0xe7, 0xc8, 0xa3, 0x3c, 0x1a, 0x29, 0x12, 0x2e, 0x2b, 0x72, 0x09, 0x65, 0xfc, 0x04, 0x24, 0x52, 0x67, 0xff, 0x87, 0xfc, 0x67, 0xa5, 0x73, 0x0f, 0xe5, 0xb3, 0x08, 0x01, 0x3a, 0xa3, 0x26, 0x69, 0x90, 0xfb, 0xb3, 0x98, 0x18, 0x5a, 0x87, 0xe0, 0x55, 0xb4, 0x43, 0xa8, 0x68, 0xce, 0x0c, 0xe1, 0x3a, 0xe6, 0xae, 0xe3, 0x30, 0xb9, 0xd2, 0x5d, 0x3b, 0xbb, 0x36, 0x26, 0x65, 0xc5, 0x88, 0x1d, 0xaf, 0x0c, 0x5a, 0xa7, 0x5e, 0x9d, 0x4a, 0x82, 0xe8, 0xf0, 0x4c, 0x91, 0xa9, 0xad, 0x29, 0x48, 0x22, 0xe3, 0x39, 0x78, 0xab, 0x0c, 0x13, 0xfa, 0xdc, 0x45, 0x83, 0x1f, 0x9d, 0x37, 0xda, 0x4e, 0xfa, 0x0f, 0xc2, 0xc5, 0xeb, 0x01, 0x37, 0x1f, 0xa8, 0x5b, 0x7d, 0xdb, 0x1f, 0x82 }; static const uint8_t ac_dsa_vect61_ptx[] = { /* Msg */ 0x3a, 0x84, 0xa5, 0x31, 0x4e, 0x90, 0xfd, 0x33, 0xbb, 0x7c, 0xd6, 0xca, 0x68, 0x72, 0x0c, 0x69, 0x05, 0x8d, 0xa1, 0xda, 0x1b, 0x35, 0x90, 0x46, 0xae, 0x89, 0x22, 0xca, 0xc8, 0xaf, 0xc5, 0xe0, 0x25, 0x77, 0x16, 0x35, 0xfb, 0x47, 0x35, 0x49, 0x15, 0x21, 0xa7, 0x28, 0x44, 0x1b, 0x5c, 0xb0, 0x87, 0xd6, 0x07, 0x76, 0xee, 0x0e, 0xcc, 0x21, 0x74, 0xa4, 0x19, 0x85, 0xa8, 0x2c, 0xf4, 0x6d, 0x8f, 0x8d, 0x8b, 0x27, 0x4a, 0x0c, 0xc4, 0x39, 0xb0, 0x09, 0x71, 0x07, 0x7c, 0x74, 0x5f, 0x8c, 0xf7, 0x01, 0xcf, 0x56, 0xbf, 0x99, 0x14, 0xcc, 0x57, 0x20, 0x9b, 0x55, 0x5d, 0xc8, 0x7c, 0xa8, 0xc1, 0x3d, 0xa0, 0x63, 0x27, 0x0c, 0x60, 0xfc, 0x2c, 0x98, 0x8e, 0x69, 0x2b, 0x75, 0xa7, 0xf2, 0xa6, 0x69, 0x90, 0x3b, 0x93, 0xd2, 0xe1, 0x4e, 0x8e, 0xfb, 0x6f, 0xb9, 0xf8, 0x69, 0x4a, 0x78 }; static const uint8_t ac_dsa_vect61_priv_val[] = { /* X */ 0x07, 0xce, 0x88, 0x62, 0xe6, 0x4b, 0x7f, 0x6c, 0x74, 0x82, 0x04, 0x6d, 0xbf, 0xc9, 0x39, 0x07, 0x12, 0x3e, 0x52, 0x14 }; static const uint8_t ac_dsa_vect61_pub_val[] = { /* Y */ 0x60, 0xf5, 0x34, 0x1e, 0x48, 0xca, 0x7a, 0x3b, 0xc5, 0xde, 0xce, 0xe6, 0x12, 0x11, 0xdd, 0x27, 0x27, 0xcd, 0x8e, 0x2f, 0xc7, 0x63, 0x5f, 0x3a, 0xab, 0xea, 0x26, 0x23, 0x66, 0xe4, 0x58, 0xf5, 0xc5, 0x1c, 0x31, 0x1a, 0xfd, 0xa9, 0x16, 0xcb, 0x0d, 0xcd, 0xc5, 0xd5, 0xa5, 0x72, 0x9f, 0x57, 0x3a, 0x53, 0x2b, 0x59, 0x47, 0x43, 0x19, 0x9b, 0xcf, 0xa7, 0x45, 0x49, 0x03, 0xe7, 0x4b, 0x33, 0xdd, 0xfe, 0x65, 0x89, 0x63, 0x06, 0xce, 0xc2, 0x0e, 0xbd, 0x84, 0x27, 0x68, 0x2f, 0xa5, 0x01, 0xee, 0x06, 0xbc, 0x4c, 0x5d, 0x14, 0x25, 0xcb, 0xe3, 0x18, 0x28, 0xba, 0x00, 0x8b, 0x19, 0xc9, 0xda, 0x68, 0x13, 0x6c, 0xf7, 0x18, 0x40, 0xb2, 0x05, 0x91, 0x9e, 0x78, 0x3a, 0x62, 0x8a, 0x5a, 0x57, 0xcf, 0x91, 0xcf, 0x56, 0x9b, 0x28, 0x54, 0xff, 0xef, 0x7a, 0x09, 0x6e, 0xda, 0x96, 0xc9 }; /* K = 2f170907ac69726b14f22056dcb37b4df85f7424 */ static const uint8_t ac_dsa_vect61_out[] = { /* R */ 0xa5, 0x3f, 0x1f, 0x8f, 0x20, 0xb8, 0xd3, 0xd4, 0x72, 0x0f, 0x14, 0xa8, 0xba, 0xb5, 0x22, 0x6b, 0x07, 0x9d, 0x99, 0x53, /* S */ 0x11, 0xf5, 0x3f, 0x6a, 0x4e, 0x56, 0xb5, 0x1f, 0x60, 0xe2, 0x0d, 0x49, 0x57, 0xae, 0x89, 0xe1, 0x62, 0xae, 0xa6, 0x16 }; #define ac_dsa_vect62_prime ac_dsa_vect61_prime #define ac_dsa_vect62_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect62_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect62_ptx[] = { /* Msg */ 0x6f, 0x39, 0x97, 0x3f, 0xd2, 0x25, 0x16, 0x7a, 0x76, 0x73, 0xcd, 0x71, 0xab, 0x35, 0x34, 0xd2, 0x68, 0x66, 0x87, 0xc3, 0x32, 0xf9, 0x3f, 0xd6, 0x6d, 0xb5, 0xf1, 0xca, 0x99, 0x67, 0x8e, 0xfd, 0x28, 0x25, 0xa8, 0x4c, 0xd7, 0xa7, 0x10, 0x7a, 0xdf, 0x96, 0x50, 0x1d, 0xd1, 0xd0, 0x5e, 0x7b, 0xbc, 0x8d, 0x11, 0x3e, 0x08, 0x7b, 0xba, 0x77, 0xb2, 0x34, 0x6b, 0x43, 0x64, 0x13, 0x21, 0x25, 0x24, 0x5e, 0x9a, 0xac, 0xe3, 0xa1, 0x46, 0xb5, 0x76, 0xf6, 0x54, 0xc8, 0x6e, 0x07, 0xfc, 0x19, 0x14, 0xca, 0xfa, 0x20, 0x9d, 0xd6, 0xd0, 0x48, 0x45, 0x57, 0x5d, 0xbb, 0x27, 0x9c, 0xd1, 0xb2, 0x32, 0x96, 0xd0, 0x1e, 0xf5, 0x05, 0xb5, 0xe1, 0xce, 0x7f, 0x21, 0x94, 0xf1, 0x89, 0x88, 0xf3, 0x55, 0xc9, 0xb3, 0x4f, 0x92, 0x0a, 0xb3, 0x51, 0x52, 0xe0, 0x3b, 0xcf, 0x79, 0x2a, 0xc5, 0x29 }; static const uint8_t ac_dsa_vect62_priv_val[] = { /* X */ 0x8d, 0x75, 0x29, 0x4b, 0x56, 0x26, 0x2e, 0x42, 0xa8, 0x2d, 0xb4, 0x1a, 0x40, 0x39, 0x61, 0x53, 0x96, 0x57, 0x4d, 0xbf }; static const uint8_t ac_dsa_vect62_pub_val[] = { /* Y */ 0x11, 0x0e, 0x39, 0x8e, 0x36, 0xc9, 0xd2, 0x72, 0x6e, 0x77, 0xde, 0xb4, 0x65, 0xdd, 0x23, 0x30, 0x3f, 0x9e, 0x38, 0x77, 0x78, 0xb5, 0x49, 0x70, 0x0a, 0x52, 0xb9, 0xa5, 0x46, 0x85, 0x12, 0xee, 0x37, 0x7c, 0xe3, 0xd7, 0xdc, 0xbf, 0xc6, 0xb6, 0x4e, 0xe3, 0x53, 0xea, 0xc6, 0xa4, 0x38, 0x98, 0xb2, 0x64, 0x84, 0x05, 0x8b, 0xa1, 0xb2, 0x4b, 0x22, 0x9c, 0xd6, 0x9c, 0x99, 0x4d, 0x97, 0x6d, 0x43, 0x34, 0x4c, 0x18, 0x1e, 0xa6, 0xc4, 0x7d, 0xf0, 0x06, 0x2c, 0x09, 0xa1, 0x6b, 0x23, 0xab, 0x60, 0x75, 0xc0, 0x4a, 0x08, 0x99, 0xba, 0xc3, 0xe4, 0xf0, 0x34, 0xa9, 0x83, 0xbf, 0x90, 0x43, 0x8f, 0x6a, 0xc2, 0x68, 0x55, 0xd8, 0xa5, 0xfd, 0xed, 0x90, 0x17, 0x2e, 0x7e, 0x8c, 0x19, 0x6a, 0x2c, 0xe7, 0xe1, 0xfc, 0x0d, 0xac, 0x94, 0x27, 0x8a, 0xff, 0x16, 0x53, 0xc3, 0xae, 0x09, 0xf5 }; /* K = 66a1322607ab98aaa57c12a5cc3f59dce8d7d0cc */ static const uint8_t ac_dsa_vect62_out[] = { /* R */ 0x1b, 0x9e, 0xd3, 0x9b, 0xcc, 0x4b, 0x46, 0xed, 0x00, 0x07, 0x67, 0x9c, 0xe9, 0xc3, 0xf6, 0xdc, 0x7c, 0x41, 0x57, 0xb9, /* S */ 0x25, 0x8d, 0x41, 0x36, 0xad, 0x95, 0xb7, 0x04, 0xa7, 0x95, 0x9d, 0x04, 0x09, 0x6d, 0xcd, 0x78, 0x1e, 0xb5, 0x4b, 0xde }; #define ac_dsa_vect63_prime ac_dsa_vect61_prime #define ac_dsa_vect63_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect63_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect63_ptx[] = { /* Msg */ 0x7f, 0x59, 0x74, 0x4c, 0x79, 0x0c, 0x0f, 0x98, 0x5a, 0x9a, 0xe1, 0x01, 0xd9, 0xfa, 0x00, 0xda, 0x3b, 0x95, 0xd2, 0x47, 0x3d, 0x79, 0x28, 0x05, 0xec, 0x1d, 0x6d, 0x1e, 0x95, 0x22, 0x2a, 0x6f, 0x30, 0xee, 0x6a, 0xb8, 0xfc, 0x5a, 0x63, 0x20, 0x57, 0x15, 0x3f, 0x23, 0x7a, 0xd3, 0xaa, 0x2f, 0xae, 0x8f, 0x1e, 0x51, 0xea, 0xe7, 0x59, 0x06, 0xd0, 0x7e, 0x57, 0x6d, 0xd0, 0x02, 0x1a, 0xc1, 0x71, 0x1b, 0x1c, 0x88, 0x53, 0xe6, 0x2d, 0x27, 0xfe, 0x6b, 0x09, 0x87, 0x66, 0xb8, 0xce, 0x3e, 0x76, 0xd3, 0x47, 0xc8, 0xe4, 0x9b, 0xe0, 0xab, 0x05, 0xd0, 0xd1, 0x2f, 0xd7, 0x77, 0xa8, 0x5c, 0xff, 0xc7, 0xad, 0x12, 0x07, 0xa9, 0xaa, 0x75, 0x64, 0x3d, 0x7b, 0x41, 0x5b, 0xa4, 0xb1, 0xb9, 0x7d, 0xc0, 0xee, 0x19, 0xd0, 0x5a, 0x60, 0x7b, 0xa0, 0x63, 0xa0, 0x34, 0x1f, 0x17, 0x61, 0x04 }; static const uint8_t ac_dsa_vect63_priv_val[] = { /* X */ 0x25, 0xb7, 0xfe, 0xdc, 0xba, 0x71, 0xed, 0xa8, 0x5f, 0xe1, 0x89, 0xbf, 0x0d, 0x0c, 0x43, 0x21, 0x4a, 0xb6, 0x38, 0x8a }; static const uint8_t ac_dsa_vect63_pub_val[] = { /* Y */ 0x3e, 0xad, 0x9c, 0xf2, 0x11, 0xf3, 0x85, 0x9d, 0x5b, 0xaa, 0x51, 0x55, 0xfb, 0x62, 0x33, 0x1b, 0xca, 0x3f, 0xff, 0x9e, 0xcb, 0xe1, 0x82, 0xeb, 0xf8, 0xb0, 0x4d, 0xb0, 0xeb, 0xb1, 0x9e, 0xda, 0x54, 0x8c, 0x86, 0xdb, 0x4c, 0xbb, 0x5e, 0xca, 0x98, 0xce, 0x44, 0x9c, 0xfd, 0x51, 0xf1, 0xc4, 0x60, 0xd7, 0x84, 0x83, 0x26, 0xee, 0xe2, 0x2f, 0xca, 0xc7, 0x24, 0x7f, 0xb8, 0x89, 0xee, 0x41, 0x5c, 0x49, 0x33, 0xa9, 0x09, 0xc7, 0x8c, 0xe9, 0xbc, 0x50, 0xee, 0x19, 0x01, 0x16, 0xda, 0x9a, 0xe2, 0x54, 0x7a, 0xe6, 0x24, 0x2a, 0x34, 0x0d, 0xdb, 0xb9, 0xa1, 0x5a, 0xc8, 0x18, 0xc4, 0x67, 0x7f, 0x29, 0x19, 0xc6, 0x45, 0x09, 0xd0, 0x3c, 0x49, 0xd1, 0x30, 0x7b, 0xb2, 0xcd, 0x78, 0xe0, 0x1c, 0xe5, 0xb2, 0x5a, 0x9f, 0x47, 0xd8, 0x28, 0xfc, 0x75, 0x84, 0xeb, 0xce, 0x36, 0x6c, 0x2f }; /* K = 8fd754defb1274bb7ddea0fc13fdc76722442d86 */ static const uint8_t ac_dsa_vect63_out[] = { /* R */ 0x38, 0xf5, 0x2d, 0xf7, 0x8b, 0x0e, 0x45, 0x4d, 0x35, 0x83, 0x20, 0x8a, 0x0f, 0xce, 0x03, 0xb9, 0x04, 0xee, 0xc8, 0x16, /* S */ 0x5c, 0xdc, 0x57, 0xa9, 0x43, 0xab, 0x1f, 0x26, 0x9c, 0xa1, 0x1c, 0x63, 0xbc, 0xb1, 0x05, 0x9e, 0xe7, 0x6f, 0x9c, 0x2e }; #define ac_dsa_vect64_prime ac_dsa_vect61_prime #define ac_dsa_vect64_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect64_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect64_ptx[] = { /* Msg */ 0x16, 0x25, 0x0c, 0x74, 0xcc, 0xb4, 0x04, 0x43, 0x62, 0x5a, 0x37, 0xc4, 0xb7, 0xe2, 0xb3, 0x61, 0x52, 0x55, 0x76, 0x82, 0x41, 0xf2, 0x54, 0xa5, 0x06, 0xfa, 0x81, 0x9e, 0xfb, 0xb8, 0x69, 0x8a, 0xde, 0x38, 0xfc, 0x75, 0x94, 0x6b, 0x3a, 0xf0, 0x90, 0x55, 0x57, 0x8f, 0x28, 0xa1, 0x81, 0x82, 0x7d, 0xda, 0x31, 0x1b, 0xd4, 0x03, 0x8f, 0xd4, 0x7f, 0x6d, 0x86, 0xcc, 0xeb, 0x1b, 0xbb, 0xef, 0x2d, 0xf2, 0x0b, 0xf5, 0x95, 0xa0, 0xad, 0x77, 0xaf, 0xd3, 0x9c, 0x84, 0x87, 0x74, 0x34, 0xad, 0xe3, 0x81, 0x2f, 0x05, 0xec, 0x54, 0x1e, 0x04, 0x03, 0xab, 0xad, 0xc7, 0x78, 0xd1, 0x16, 0xfd, 0x07, 0x7c, 0x95, 0xc6, 0xec, 0x0f, 0x47, 0x24, 0x1f, 0x4d, 0xb8, 0x13, 0xf3, 0x19, 0x86, 0xb7, 0x50, 0x4c, 0x1c, 0xd9, 0xdd, 0xb4, 0x96, 0xac, 0x6e, 0xd2, 0x2b, 0x45, 0xe7, 0xdf, 0x72, 0xcc }; static const uint8_t ac_dsa_vect64_priv_val[] = { /* X */ 0x3f, 0xee, 0x04, 0xcc, 0x08, 0x62, 0x4f, 0x3a, 0x7f, 0x34, 0xc5, 0x38, 0xd8, 0x76, 0x92, 0x20, 0x9d, 0xd7, 0x47, 0x97 }; static const uint8_t ac_dsa_vect64_pub_val[] = { /* Y */ 0x6e, 0x8c, 0x85, 0x15, 0x0c, 0x5c, 0x9c, 0xa6, 0xdc, 0xb0, 0x48, 0x06, 0x67, 0x1d, 0xb1, 0xb6, 0x72, 0xfc, 0x10, 0x87, 0xc9, 0x95, 0x31, 0x1d, 0x70, 0x87, 0xad, 0x12, 0xab, 0x18, 0xf2, 0xc1, 0x4b, 0x61, 0x2c, 0xea, 0x13, 0xbf, 0x79, 0x51, 0x8d, 0x2b, 0x57, 0x0b, 0x8b, 0x69, 0x6b, 0x3e, 0x4e, 0xfc, 0xd0, 0xfd, 0xa5, 0x22, 0xa2, 0x53, 0xbb, 0xcb, 0x7d, 0xbb, 0x71, 0x1d, 0x98, 0x4c, 0x59, 0x8f, 0xa2, 0x01, 0xc2, 0x1a, 0x8a, 0x9e, 0x27, 0x74, 0xbc, 0x15, 0x02, 0x09, 0x20, 0xcd, 0x8c, 0x27, 0xc2, 0x87, 0x5c, 0x77, 0x9b, 0x08, 0xef, 0x95, 0x09, 0x3c, 0xaa, 0xc2, 0xc9, 0xce, 0xa3, 0x7e, 0xc4, 0x98, 0xc2, 0x3d, 0xd2, 0x4b, 0x68, 0x4a, 0xbc, 0xb4, 0x67, 0xec, 0x95, 0x2a, 0x20, 0x2c, 0xbd, 0x2d, 0xf7, 0x96, 0x0c, 0x1e, 0xf9, 0x29, 0xcc, 0x2b, 0x61, 0x1c, 0xa6, 0xc8 }; /* K = 934552738360670c98b9c5384b639c46cdecfa83 */ static const uint8_t ac_dsa_vect64_out[] = { /* R */ 0x00, 0x01, 0x8f, 0x0f, 0xdc, 0x16, 0xd9, 0x14, 0x97, 0x1c, 0x8f, 0x31, 0x0f, 0x1a, 0xf7, 0x79, 0x6c, 0x6f, 0x66, 0x2a, /* S */ 0x62, 0xb7, 0xae, 0xcc, 0x75, 0xcb, 0xc6, 0xdb, 0x00, 0xdd, 0x0c, 0x24, 0x33, 0x9f, 0x7b, 0xdb, 0x5a, 0xe9, 0x66, 0xa5 }; #define ac_dsa_vect65_prime ac_dsa_vect61_prime #define ac_dsa_vect65_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect65_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect65_ptx[] = { /* Msg */ 0xa2, 0xce, 0x90, 0xb5, 0x1a, 0x48, 0x0c, 0x06, 0x68, 0xb5, 0x59, 0x36, 0xbb, 0xee, 0xbe, 0x36, 0x79, 0xf8, 0xd4, 0x06, 0xa0, 0xb6, 0x94, 0xb9, 0x03, 0x45, 0x74, 0x9e, 0x3b, 0x9c, 0x67, 0x77, 0x6c, 0xae, 0x9a, 0x62, 0xc2, 0x5c, 0xc0, 0x11, 0xcd, 0xb3, 0x18, 0x02, 0x63, 0xdd, 0xd7, 0x3a, 0xa2, 0x09, 0x0e, 0xc7, 0xa7, 0x49, 0x09, 0x2f, 0x6c, 0x78, 0x16, 0xc2, 0x67, 0x44, 0xc5, 0x39, 0x3a, 0xcb, 0x08, 0xc6, 0xb7, 0xb3, 0x59, 0xbb, 0x3a, 0x3c, 0x75, 0x43, 0x68, 0x4f, 0x80, 0x50, 0xec, 0xc6, 0x42, 0x22, 0x34, 0xff, 0x24, 0x97, 0x8a, 0xe0, 0x6b, 0x91, 0xd6, 0xa2, 0x4c, 0x08, 0x6d, 0x71, 0xeb, 0x17, 0x61, 0xca, 0xf1, 0x41, 0x76, 0xd8, 0xba, 0xcd, 0xca, 0xd5, 0x3b, 0x78, 0x95, 0xbd, 0xb0, 0xe0, 0x53, 0xc6, 0x16, 0xb1, 0x47, 0xff, 0x73, 0xd2, 0xd8, 0x6b, 0xa3, 0xbc }; static const uint8_t ac_dsa_vect65_priv_val[] = { /* X */ 0x2d, 0x66, 0x7b, 0xeb, 0xf4, 0x45, 0xcd, 0x3e, 0xe4, 0x5d, 0x58, 0x15, 0xe0, 0x7c, 0xa5, 0x73, 0x5b, 0x85, 0x8a, 0xda }; static const uint8_t ac_dsa_vect65_pub_val[] = { /* Y */ 0x0e, 0x6b, 0x41, 0x9d, 0xa8, 0xb4, 0xdb, 0x80, 0x2d, 0x93, 0x88, 0x73, 0xe3, 0xb1, 0x05, 0xab, 0x3e, 0xff, 0x43, 0x2d, 0x8a, 0x13, 0x76, 0x60, 0x20, 0x59, 0xcf, 0x2e, 0x51, 0x0f, 0x69, 0x6a, 0x2a, 0x4e, 0x42, 0x02, 0x56, 0x70, 0xdb, 0x00, 0x11, 0xe9, 0xbe, 0x31, 0xe8, 0xb1, 0x40, 0x36, 0x15, 0xb9, 0xa3, 0x39, 0xce, 0x65, 0x4a, 0x89, 0xa2, 0xd4, 0x62, 0xee, 0x20, 0xc0, 0x80, 0xc4, 0x47, 0x96, 0x48, 0xc5, 0xc0, 0x0e, 0x17, 0x2e, 0xcd, 0x53, 0x7c, 0x93, 0x4e, 0x75, 0x34, 0xaf, 0x70, 0x02, 0xbd, 0x6f, 0xda, 0xfa, 0xb5, 0x65, 0x06, 0x68, 0x0c, 0x01, 0x9c, 0xed, 0x38, 0x77, 0x9d, 0x95, 0x40, 0x91, 0x64, 0x5f, 0xed, 0xf5, 0xd0, 0x05, 0x7a, 0x23, 0xff, 0x63, 0x49, 0x19, 0xfc, 0x56, 0xa9, 0x67, 0x71, 0xce, 0x21, 0xfa, 0x99, 0xec, 0xd9, 0xaa, 0x7f, 0x79, 0x85, 0xf1 }; /* K = 4aeb4911d38f1f634ddf5fe6c970d943ea51b266 */ static const uint8_t ac_dsa_vect65_out[] = { /* R */ 0x5b, 0x13, 0xf1, 0x33, 0x7a, 0xc7, 0x2e, 0x41, 0x98, 0x67, 0xc9, 0x2f, 0x93, 0x87, 0xf9, 0xdf, 0x62, 0x88, 0x3a, 0xa5, /* S */ 0x90, 0xab, 0x5b, 0x68, 0xfd, 0x82, 0x53, 0xb6, 0xbb, 0x64, 0xc6, 0x17, 0x59, 0x16, 0x4a, 0x97, 0x83, 0x4c, 0x39, 0xe1 }; #define ac_dsa_vect66_prime ac_dsa_vect61_prime #define ac_dsa_vect66_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect66_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect66_ptx[] = { /* Msg */ 0x3b, 0x6e, 0xea, 0xed, 0xc5, 0xfb, 0x38, 0xce, 0x86, 0x91, 0x68, 0x6c, 0x89, 0x99, 0x3c, 0xaf, 0x17, 0xc9, 0xe2, 0x4f, 0xa5, 0x65, 0xa9, 0xe8, 0xd4, 0x84, 0x36, 0xb8, 0x7d, 0xb6, 0x2f, 0xab, 0x83, 0x9c, 0x42, 0xd8, 0x1f, 0xb1, 0xf8, 0xb8, 0x96, 0x8c, 0x82, 0x6e, 0x78, 0xd3, 0x33, 0xb1, 0xd9, 0x9d, 0x5c, 0x36, 0xe0, 0x8a, 0x9a, 0x0e, 0xc7, 0x55, 0x4c, 0x2b, 0xde, 0x07, 0xfd, 0x8e, 0xc4, 0x22, 0xaf, 0x12, 0x82, 0x46, 0xba, 0x3b, 0xea, 0xe1, 0x8e, 0xf2, 0xbe, 0x75, 0x5d, 0xb2, 0x2a, 0x86, 0x92, 0x02, 0x95, 0x1c, 0xd9, 0x57, 0x96, 0xfc, 0x2f, 0xf7, 0xba, 0x2a, 0x69, 0x67, 0xd1, 0x9e, 0x5c, 0xa2, 0x30, 0x46, 0x55, 0xbf, 0xdf, 0x87, 0x9b, 0x77, 0x47, 0xf8, 0x0a, 0x59, 0xb1, 0xda, 0xc0, 0x46, 0x1c, 0xf6, 0xe4, 0x90, 0x37, 0x8e, 0x56, 0xab, 0x37, 0x85, 0x84, 0xf2 }; static const uint8_t ac_dsa_vect66_priv_val[] = { /* X */ 0x71, 0xdb, 0xba, 0xc5, 0x97, 0x68, 0xe1, 0xe3, 0x09, 0x3f, 0x0c, 0x60, 0x40, 0x47, 0x31, 0xa2, 0xea, 0xd4, 0x82, 0xc3 }; static const uint8_t ac_dsa_vect66_pub_val[] = { /* Y */ 0x4a, 0x7f, 0xf6, 0x67, 0xf7, 0xab, 0x28, 0x91, 0xa8, 0xa6, 0x9a, 0xb5, 0xd1, 0x5d, 0x93, 0xd1, 0xfd, 0x83, 0x39, 0x06, 0xc9, 0xb6, 0x29, 0xfc, 0xb9, 0xb4, 0x9e, 0x84, 0xd8, 0xec, 0xb3, 0x5b, 0x39, 0x7d, 0x93, 0x83, 0x9d, 0x79, 0x85, 0x59, 0x03, 0x26, 0xcf, 0xfb, 0x55, 0xa7, 0x0e, 0x4a, 0x51, 0xa2, 0x82, 0x9e, 0x38, 0x72, 0x90, 0xf6, 0xfa, 0xfb, 0x7d, 0x22, 0x61, 0x51, 0xc2, 0x82, 0x47, 0x02, 0x24, 0xfd, 0x71, 0x7f, 0x3d, 0x52, 0x65, 0x89, 0xc6, 0xee, 0xd9, 0x61, 0x1c, 0x5b, 0xdf, 0x4b, 0xde, 0x63, 0xfc, 0xc9, 0x20, 0x4c, 0x80, 0x07, 0xb0, 0xb1, 0x43, 0xc4, 0x9d, 0x19, 0x81, 0x83, 0x56, 0x58, 0xbc, 0xf8, 0x00, 0xa2, 0x15, 0x7c, 0x5c, 0x14, 0x3d, 0x76, 0x36, 0x9f, 0xd6, 0xe7, 0x8d, 0x0a, 0x3f, 0x80, 0x0b, 0x8a, 0x3a, 0x8f, 0x0e, 0x11, 0xc9, 0x05, 0x9d, 0xcd }; /* K = 8f78910d1e8a9daad9523626ee7ab1d0a5b4d977 */ static const uint8_t ac_dsa_vect66_out[] = { /* R */ 0x61, 0x38, 0x0c, 0xa8, 0x67, 0x98, 0xfc, 0x5f, 0xb6, 0x1c, 0x35, 0x67, 0x5a, 0xf0, 0x8d, 0x5c, 0xc1, 0x3c, 0x25, 0xaa, /* S */ 0x54, 0xdd, 0xf6, 0x8f, 0x47, 0x68, 0x84, 0xaf, 0x3e, 0x0e, 0x65, 0x36, 0xf3, 0xa8, 0x09, 0x25, 0xee, 0x63, 0xa4, 0x02 }; #define ac_dsa_vect67_prime ac_dsa_vect61_prime #define ac_dsa_vect67_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect67_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect67_ptx[] = { /* Msg */ 0x01, 0x19, 0x7a, 0xe9, 0x60, 0xde, 0x90, 0xa9, 0x3d, 0x97, 0x36, 0x89, 0x6f, 0xe1, 0x36, 0xbc, 0x56, 0x1f, 0x05, 0x50, 0xc6, 0xb1, 0xcc, 0x36, 0x31, 0xb3, 0x1d, 0xf6, 0x83, 0x01, 0x7c, 0x2a, 0xb8, 0xc6, 0xf4, 0x1d, 0x27, 0x45, 0xf1, 0xa7, 0x97, 0xe0, 0xe8, 0x9d, 0xc3, 0xd5, 0x87, 0x88, 0x66, 0xc3, 0x69, 0x4a, 0x08, 0x03, 0x66, 0x75, 0x7e, 0x6f, 0xd8, 0x92, 0xd2, 0x66, 0x68, 0xfd, 0x2d, 0x86, 0x0e, 0xa2, 0xa2, 0xb6, 0x7f, 0xda, 0xca, 0x96, 0xe3, 0x22, 0x97, 0x75, 0x87, 0x87, 0xec, 0xc0, 0xa7, 0xe1, 0xd3, 0x04, 0xcc, 0x71, 0x98, 0x03, 0x27, 0x2e, 0x72, 0xe3, 0x39, 0xb3, 0xf3, 0x4c, 0x34, 0x7e, 0x47, 0xb9, 0x1a, 0x1e, 0xd6, 0x9c, 0xa8, 0x06, 0x2c, 0xd3, 0x50, 0xdc, 0xcc, 0x9c, 0x22, 0x64, 0x73, 0x2b, 0x9f, 0xdd, 0x84, 0x62, 0xd9, 0xf6, 0xfc, 0x76, 0x85, 0x0c }; static const uint8_t ac_dsa_vect67_priv_val[] = { /* X */ 0x45, 0x96, 0x3a, 0x07, 0x71, 0x45, 0x6d, 0x6a, 0xe8, 0x97, 0xed, 0xf7, 0x57, 0x90, 0x91, 0xf5, 0xf8, 0xc7, 0x67, 0x47 }; static const uint8_t ac_dsa_vect67_pub_val[] = { /* Y */ 0x37, 0x30, 0x81, 0x77, 0x0a, 0x9f, 0x4d, 0xae, 0x8d, 0xf5, 0xdf, 0xa7, 0x05, 0x03, 0xe1, 0x49, 0xd7, 0x59, 0xca, 0x37, 0x40, 0x85, 0x49, 0xaa, 0x34, 0xd1, 0xb4, 0x9b, 0x31, 0x76, 0xa3, 0x9d, 0x7c, 0x46, 0x61, 0xe4, 0x21, 0xa1, 0xf5, 0xd6, 0x1e, 0x3f, 0x77, 0xb3, 0xc4, 0xb3, 0x9b, 0xb2, 0xe6, 0x3c, 0xd2, 0x49, 0x19, 0xa2, 0x91, 0x0a, 0x8b, 0x15, 0x5e, 0x17, 0x58, 0xf5, 0xa3, 0x75, 0xda, 0x60, 0xf1, 0x9d, 0x2b, 0xf4, 0x02, 0x0e, 0x82, 0x8f, 0x42, 0x37, 0xeb, 0x3e, 0x2a, 0x36, 0x12, 0x4a, 0x6a, 0x39, 0x14, 0x46, 0x9d, 0x68, 0x33, 0x69, 0x5b, 0x83, 0xb9, 0x37, 0x7f, 0xb2, 0x85, 0xb2, 0x7b, 0xd2, 0x68, 0x99, 0x33, 0xc1, 0x89, 0xc7, 0xfd, 0xe4, 0x2e, 0x1e, 0x0e, 0x20, 0x30, 0x83, 0x31, 0xfd, 0x56, 0xed, 0x0d, 0xb2, 0xef, 0xbc, 0x77, 0xea, 0x3a, 0xc7, 0x12, 0x1f }; /* K = 1f68d020331b81fc1aea51907e94f7d62ace9135 */ static const uint8_t ac_dsa_vect67_out[] = { /* R */ 0x41, 0xed, 0x17, 0x0c, 0x8b, 0xf6, 0xf2, 0x0f, 0xd1, 0xce, 0x18, 0xfa, 0xac, 0x97, 0x56, 0x5f, 0xdb, 0x4f, 0xe6, 0xf4, /* S */ 0x7c, 0x8c, 0x6f, 0xea, 0xce, 0x68, 0xc9, 0x7c, 0xa4, 0x37, 0x80, 0x74, 0x1f, 0xae, 0x58, 0xf2, 0xf6, 0x1b, 0xf7, 0x65 }; #define ac_dsa_vect68_prime ac_dsa_vect61_prime #define ac_dsa_vect68_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect68_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect68_ptx[] = { /* Msg */ 0x0d, 0x5a, 0xb2, 0x7b, 0x2b, 0x7e, 0x18, 0xcf, 0xce, 0x4c, 0xcd, 0xa1, 0x3a, 0xa1, 0xa5, 0xa8, 0xc1, 0x8b, 0xaa, 0xf3, 0x9b, 0x14, 0xe6, 0x42, 0xb8, 0xf8, 0x1b, 0x30, 0xcd, 0x54, 0x18, 0xa1, 0xdd, 0x05, 0xdf, 0x22, 0x59, 0x9f, 0xbb, 0xb3, 0xba, 0xe4, 0xfe, 0xe1, 0xe4, 0xb2, 0xc1, 0x50, 0xa2, 0x3e, 0x21, 0x6c, 0x13, 0x3f, 0xe2, 0xd8, 0x23, 0x54, 0x85, 0xe3, 0x4f, 0x80, 0x68, 0x5c, 0x66, 0xbc, 0x0c, 0x19, 0x0a, 0xf6, 0x7a, 0x0a, 0x49, 0x93, 0x0b, 0x47, 0x6b, 0x28, 0x03, 0xe1, 0x22, 0x74, 0xcd, 0x43, 0x09, 0x09, 0x21, 0xbf, 0x66, 0x8f, 0xdf, 0xef, 0x15, 0x50, 0x72, 0xa3, 0xcd, 0xf1, 0x79, 0x01, 0x42, 0x7a, 0xfa, 0x51, 0x31, 0x8a, 0xfd, 0xda, 0x93, 0x7e, 0x28, 0x3e, 0x2c, 0x60, 0xd8, 0x5e, 0x3b, 0xfe, 0x07, 0xf3, 0xda, 0x5f, 0x99, 0x2c, 0x1f, 0xca, 0x4b, 0x98 }; static const uint8_t ac_dsa_vect68_priv_val[] = { /* X */ 0x95, 0xbc, 0x58, 0x8b, 0xb8, 0x48, 0x75, 0x1b, 0xa5, 0x7d, 0x7a, 0x9a, 0xb3, 0x40, 0xcb, 0x00, 0xe7, 0x9e, 0x06, 0xd8 }; static const uint8_t ac_dsa_vect68_pub_val[] = { /* Y */ 0x1c, 0xa3, 0x6e, 0x35, 0x05, 0xee, 0x70, 0xa5, 0x6a, 0xfd, 0x5d, 0xc4, 0x0a, 0x48, 0xe9, 0x79, 0x79, 0xe9, 0x84, 0xdd, 0x2d, 0x89, 0x6a, 0xbc, 0x7a, 0x49, 0x1d, 0x34, 0x61, 0xc6, 0x93, 0x16, 0x68, 0xa0, 0xce, 0xf1, 0x1e, 0x45, 0xbb, 0x66, 0xc6, 0x11, 0x13, 0x79, 0x99, 0x90, 0x7a, 0xd7, 0xe1, 0xf7, 0xcf, 0xea, 0x7f, 0x7e, 0xd4, 0x9a, 0xae, 0x93, 0x5b, 0xfc, 0x41, 0x44, 0x32, 0x93, 0xe7, 0x1d, 0xd2, 0xfe, 0xc2, 0x9f, 0x37, 0xa9, 0x54, 0x46, 0x72, 0xab, 0x92, 0x50, 0xca, 0xa2, 0x81, 0x88, 0xf3, 0x90, 0xb5, 0xd4, 0xaf, 0x13, 0xbb, 0x05, 0xe9, 0x69, 0x2c, 0x1c, 0x6a, 0x4d, 0x6a, 0xaf, 0xeb, 0xdd, 0xaf, 0x7e, 0xef, 0x18, 0x34, 0xff, 0xfe, 0x0f, 0x53, 0x91, 0xbc, 0xe2, 0x43, 0x78, 0x9a, 0x2d, 0x55, 0xd2, 0x9e, 0x2b, 0x90, 0xce, 0x12, 0x04, 0x29, 0xf2, 0xa0, 0x75 }; /* K = 07a4f8000f0ecddb72302cf4d7975c7efc41c143 */ static const uint8_t ac_dsa_vect68_out[] = { /* R */ 0x66, 0x01, 0x5e, 0x5f, 0xb3, 0xab, 0xe9, 0xd7, 0x85, 0x23, 0x77, 0x0f, 0x7b, 0xa0, 0x99, 0x00, 0x31, 0x06, 0x5a, 0xd7, /* S */ 0x4b, 0x8b, 0x15, 0x3d, 0x5b, 0x01, 0xdd, 0xfa, 0x91, 0xf2, 0xde, 0xc6, 0xf0, 0xfa, 0xff, 0x02, 0xe6, 0xe8, 0x72, 0x18 }; #define ac_dsa_vect69_prime ac_dsa_vect61_prime #define ac_dsa_vect69_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect69_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect69_ptx[] = { /* Msg */ 0x90, 0x6a, 0x93, 0x3b, 0xc8, 0x23, 0xa3, 0x07, 0xe2, 0xab, 0x29, 0xa4, 0xa8, 0xf7, 0xf1, 0x51, 0x0d, 0x5d, 0x30, 0x35, 0x04, 0xfd, 0xe3, 0x81, 0x69, 0xde, 0xd1, 0x68, 0x91, 0x3e, 0x3b, 0xf8, 0x1d, 0x53, 0xa4, 0x38, 0x9a, 0x3e, 0x73, 0xa3, 0xef, 0xeb, 0xd5, 0xe4, 0x2c, 0xf4, 0x02, 0xbf, 0x9f, 0xdc, 0x5d, 0xa5, 0xef, 0x46, 0x87, 0x81, 0x65, 0xad, 0xa6, 0xd2, 0xe0, 0x72, 0x99, 0x03, 0x5a, 0x39, 0x87, 0xed, 0x6c, 0x2c, 0x6c, 0x8b, 0xec, 0xc4, 0x4e, 0xa1, 0x31, 0xa9, 0x49, 0x3e, 0x72, 0xae, 0xe2, 0x82, 0x42, 0xcf, 0x7c, 0xfa, 0xc3, 0x8e, 0xe8, 0x70, 0xe5, 0x4e, 0xb9, 0x5a, 0x6e, 0xfa, 0x9f, 0xad, 0x74, 0x35, 0x4b, 0x28, 0x1c, 0xb6, 0x3e, 0xa7, 0x16, 0x52, 0xeb, 0xa1, 0xad, 0x73, 0xf8, 0x41, 0xdb, 0xa7, 0x77, 0x8f, 0x3a, 0x03, 0xd3, 0xe0, 0x01, 0x90, 0xed, 0x68 }; static const uint8_t ac_dsa_vect69_priv_val[] = { /* X */ 0x82, 0x95, 0xed, 0x7e, 0x12, 0x5a, 0x65, 0xea, 0x17, 0x62, 0xaa, 0xaa, 0xda, 0x34, 0x60, 0x2a, 0x7b, 0xc7, 0x68, 0x45 }; static const uint8_t ac_dsa_vect69_pub_val[] = { /* Y */ 0x4f, 0x3a, 0xde, 0x3e, 0xa4, 0xf7, 0x06, 0x61, 0x07, 0x32, 0x1e, 0x8b, 0xfb, 0x12, 0xee, 0xaf, 0x9b, 0x3c, 0x7b, 0xdc, 0xc6, 0x14, 0x79, 0x08, 0x75, 0x42, 0x31, 0x15, 0x6b, 0x46, 0xe0, 0x63, 0x9c, 0x9d, 0xb9, 0xd5, 0x44, 0x7a, 0xbd, 0x2d, 0x0a, 0x92, 0x23, 0xc8, 0x5d, 0x63, 0xd8, 0xb1, 0xdf, 0xa6, 0x97, 0x42, 0xeb, 0xf7, 0xe0, 0x41, 0x9e, 0x60, 0x8c, 0x4b, 0x18, 0xc3, 0xad, 0x9f, 0x55, 0xf5, 0xd2, 0x84, 0x8e, 0xdb, 0xec, 0x4e, 0x71, 0x80, 0xe3, 0x4b, 0xfb, 0xb1, 0xf6, 0xb6, 0xeb, 0xbb, 0x68, 0x64, 0x97, 0x14, 0xb5, 0xfb, 0xfa, 0x6c, 0xfa, 0xb4, 0xa0, 0x1f, 0x65, 0x50, 0x08, 0xa9, 0x5a, 0x7e, 0xed, 0xcd, 0xc2, 0xf7, 0x17, 0x10, 0x94, 0x56, 0x3a, 0x3c, 0x18, 0x31, 0xe8, 0x1f, 0x5c, 0xa0, 0x75, 0xc6, 0xe8, 0x53, 0xbe, 0xea, 0xe8, 0x7a, 0x67, 0xff, 0x90, 0x22 }; /* K = 8148e40362a255d240a3e6af746a8880162d78ad */ static const uint8_t ac_dsa_vect69_out[] = { /* R */ 0x99, 0xc9, 0x1e, 0x07, 0x94, 0x72, 0x3b, 0xcd, 0xe3, 0x45, 0x94, 0xdd, 0x22, 0x68, 0x41, 0x8d, 0xfb, 0x35, 0x34, 0x43, /* S */ 0x42, 0xe9, 0xc4, 0x9d, 0x60, 0xad, 0x8f, 0x9b, 0x41, 0xf2, 0x90, 0xae, 0x6b, 0x77, 0x2f, 0x44, 0xbe, 0x62, 0xce, 0xa9 }; #define ac_dsa_vect70_prime ac_dsa_vect61_prime #define ac_dsa_vect70_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect70_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect70_ptx[] = { /* Msg */ 0x1d, 0x6b, 0xa4, 0x3a, 0x0f, 0xf6, 0x77, 0xcf, 0x8c, 0xf6, 0x8d, 0x6a, 0x1d, 0x33, 0x04, 0xd9, 0x94, 0x90, 0xa7, 0xca, 0xe5, 0x6f, 0xe3, 0x53, 0x18, 0xf3, 0x8e, 0xd0, 0xf5, 0x87, 0x9f, 0xe2, 0x54, 0x70, 0x3f, 0xa7, 0x74, 0x58, 0xc4, 0x5e, 0x8a, 0x69, 0x84, 0x69, 0xb8, 0x99, 0xa2, 0x15, 0xc2, 0x5e, 0x86, 0x9f, 0xd2, 0x87, 0x41, 0x10, 0x1d, 0x27, 0xdc, 0x11, 0x1f, 0xfa, 0xd6, 0x98, 0x0f, 0x8e, 0xbd, 0x74, 0x8f, 0x69, 0x77, 0xd5, 0xd6, 0x04, 0x38, 0xe6, 0xed, 0xec, 0x37, 0xa4, 0x9d, 0x30, 0x11, 0xf8, 0xf0, 0xf0, 0x85, 0x25, 0x15, 0x6a, 0xe6, 0x0b, 0xc9, 0x1a, 0xbe, 0x66, 0x16, 0x38, 0xf4, 0xb9, 0xc6, 0xc3, 0x65, 0xc3, 0xaf, 0x17, 0x13, 0xbf, 0x7f, 0x72, 0x25, 0xd4, 0xaf, 0xad, 0x7a, 0x1b, 0x53, 0x1a, 0x33, 0x11, 0x33, 0xd8, 0xb8, 0xfd, 0x23, 0x85, 0x98, 0xa4 }; static const uint8_t ac_dsa_vect70_priv_val[] = { /* X */ 0x8d, 0x3c, 0x30, 0x2d, 0xa7, 0xb7, 0x7e, 0xce, 0x9c, 0xe6, 0xe2, 0x80, 0xe6, 0x03, 0xbd, 0x26, 0x0d, 0x2d, 0xc1, 0x44 }; static const uint8_t ac_dsa_vect70_pub_val[] = { /* Y */ 0x08, 0xad, 0x77, 0xf2, 0x33, 0x33, 0x4c, 0x04, 0xca, 0x22, 0x82, 0xf6, 0xda, 0xc0, 0xb0, 0xd8, 0xa0, 0x0d, 0x59, 0x6e, 0x02, 0xe8, 0x36, 0xa7, 0x67, 0xa1, 0x46, 0xef, 0x80, 0x62, 0x4b, 0x33, 0xfd, 0xba, 0x8b, 0x35, 0x20, 0x4b, 0x20, 0xbe, 0xe8, 0xff, 0x2b, 0xe9, 0xa8, 0x2b, 0xd8, 0x01, 0x31, 0xc0, 0xaa, 0x89, 0x8b, 0x17, 0xee, 0xab, 0x5a, 0xf2, 0x4c, 0x20, 0x55, 0x1d, 0x5d, 0x63, 0x6a, 0x11, 0x54, 0x8f, 0xdd, 0x2e, 0x6c, 0x61, 0x6b, 0x09, 0xdf, 0x86, 0xb0, 0x57, 0xe5, 0x70, 0x21, 0x46, 0xec, 0xc4, 0xfa, 0x2d, 0x44, 0xd8, 0x5b, 0xb1, 0x42, 0x7e, 0x7e, 0x35, 0x76, 0xf6, 0x98, 0xb4, 0xf2, 0x16, 0x45, 0xa1, 0xe0, 0x04, 0x79, 0xd0, 0x89, 0x82, 0xb0, 0x57, 0x3d, 0xd1, 0x98, 0x1b, 0xbd, 0x40, 0x5c, 0x2a, 0x45, 0xd7, 0xde, 0x92, 0x42, 0xaf, 0xae, 0x8f, 0x95, 0xc9 }; /* K = 79989e8eb43520091706039415794d2306329861 */ static const uint8_t ac_dsa_vect70_out[] = { /* R */ 0xa2, 0xb4, 0x2c, 0xca, 0x55, 0xbc, 0x1b, 0xa3, 0x3f, 0x82, 0x52, 0xd1, 0xa8, 0x9c, 0x8d, 0x89, 0xb0, 0x0b, 0x39, 0x50, /* S */ 0x2e, 0xc5, 0x16, 0x6e, 0x35, 0xe6, 0x3f, 0x0f, 0xa1, 0x16, 0xb3, 0xdb, 0x1b, 0xd1, 0x86, 0x81, 0xa4, 0x39, 0x9c, 0x04 }; #define ac_dsa_vect71_prime ac_dsa_vect61_prime #define ac_dsa_vect71_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect71_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect71_ptx[] = { /* Msg */ 0x3b, 0xd0, 0xc5, 0xb7, 0x59, 0xcb, 0x71, 0x0c, 0x52, 0xb8, 0x1f, 0xba, 0x48, 0xb6, 0x77, 0x1c, 0xab, 0x17, 0xbf, 0x1b, 0x67, 0xea, 0xfd, 0x08, 0xf4, 0xee, 0x17, 0x77, 0xdd, 0x47, 0x30, 0x64, 0xdd, 0x0b, 0xec, 0x98, 0xd3, 0x58, 0x2e, 0xe1, 0xe9, 0x91, 0xab, 0x9a, 0x91, 0xa6, 0xfe, 0x55, 0x8a, 0x41, 0xdb, 0x9a, 0xe6, 0xb2, 0x1a, 0x05, 0x79, 0x32, 0x81, 0x14, 0x40, 0xd6, 0x4c, 0x78, 0x6b, 0x22, 0xd1, 0x50, 0xe3, 0xd3, 0x8c, 0x71, 0x90, 0x0a, 0xd5, 0xb6, 0x1e, 0x05, 0x30, 0x74, 0x4e, 0x76, 0x5b, 0x5c, 0x2e, 0xf3, 0x0b, 0xcb, 0x96, 0xe7, 0x26, 0xe3, 0x07, 0x9e, 0x44, 0x00, 0x86, 0xef, 0x30, 0x0b, 0xae, 0x90, 0x00, 0xdf, 0x34, 0x03, 0xc3, 0x3a, 0x79, 0x84, 0x9f, 0x8f, 0x83, 0xd6, 0xc0, 0x3f, 0x77, 0xea, 0xe9, 0x80, 0x52, 0x57, 0x8d, 0x82, 0xd6, 0x28, 0xe6, 0x5c }; static const uint8_t ac_dsa_vect71_priv_val[] = { /* X */ 0x4d, 0x3e, 0x42, 0xef, 0x42, 0xa6, 0x06, 0x30, 0xed, 0xcc, 0x84, 0x2f, 0x25, 0xa1, 0xb3, 0x3c, 0x88, 0x51, 0xc7, 0x42 }; static const uint8_t ac_dsa_vect71_pub_val[] = { /* Y */ 0x3a, 0x1e, 0xd9, 0x76, 0xb7, 0x93, 0x4b, 0xee, 0x3e, 0x80, 0xd6, 0x9f, 0xbc, 0xdd, 0x35, 0xf8, 0x20, 0x51, 0xcc, 0xc2, 0x14, 0xbd, 0xe6, 0xfa, 0x75, 0x6b, 0xe6, 0x70, 0x17, 0xff, 0x60, 0xac, 0x68, 0x47, 0xcf, 0x8d, 0x1f, 0x82, 0x3f, 0x89, 0x0d, 0x26, 0xaf, 0x8c, 0xd3, 0x51, 0x71, 0x6a, 0xd2, 0xd4, 0xee, 0xfd, 0x7f, 0x06, 0xc1, 0x95, 0x1e, 0xa4, 0xa7, 0xdb, 0x5c, 0xaf, 0x25, 0x0f, 0x40, 0x7b, 0x78, 0xf2, 0x1f, 0xff, 0x42, 0x5d, 0x0c, 0xba, 0x1b, 0x5f, 0xb3, 0x5a, 0x5b, 0x5d, 0xcf, 0x06, 0x2a, 0x1c, 0xdf, 0x25, 0x07, 0xaf, 0x74, 0x78, 0x93, 0x26, 0x71, 0x0e, 0x33, 0x4f, 0xaf, 0x3c, 0x50, 0x1b, 0xd8, 0xc8, 0x34, 0x72, 0x25, 0xf9, 0x4f, 0x89, 0x73, 0xad, 0xb7, 0xa8, 0xb5, 0xde, 0xf9, 0x89, 0x61, 0x09, 0xd1, 0xef, 0xe5, 0x50, 0x32, 0x5d, 0xd8, 0x9f, 0x31, 0xd6 }; /* K = 6c59f3cec7e34db174dcbd6bfe224d52226c56cd */ static const uint8_t ac_dsa_vect71_out[] = { /* R */ 0x77, 0xd6, 0x2e, 0xc2, 0xa9, 0x5b, 0xeb, 0xa6, 0xc6, 0x72, 0xd8, 0x42, 0x2e, 0xe6, 0x63, 0xd1, 0xd1, 0x80, 0x49, 0xd0, /* S */ 0x2a, 0x33, 0x9c, 0xc8, 0xf5, 0x67, 0xc1, 0x21, 0x49, 0xa8, 0x91, 0x73, 0x75, 0xec, 0x6c, 0xa4, 0xb4, 0x72, 0x54, 0xa1 }; #define ac_dsa_vect72_prime ac_dsa_vect61_prime #define ac_dsa_vect72_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect72_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect72_ptx[] = { /* Msg */ 0x8d, 0xc5, 0x82, 0xa2, 0xb5, 0xaf, 0x65, 0xe6, 0x6e, 0xbd, 0xf5, 0xb5, 0x33, 0xd8, 0xe2, 0x2b, 0x38, 0xb5, 0xc1, 0x97, 0x7e, 0x57, 0x8d, 0x32, 0x13, 0xa1, 0x10, 0xe9, 0xd4, 0x83, 0x7a, 0x74, 0xd4, 0xb7, 0xbf, 0x7d, 0x71, 0x87, 0x56, 0x90, 0xb5, 0xb7, 0x1c, 0x8e, 0x8a, 0xfa, 0xb8, 0x94, 0x34, 0xc4, 0x6a, 0x86, 0x41, 0xcc, 0xed, 0x1a, 0x13, 0x0e, 0x21, 0xcd, 0x0c, 0x80, 0x5e, 0xe4, 0x5c, 0x13, 0x4c, 0x7c, 0x0d, 0xf7, 0x5d, 0x5c, 0xd3, 0x0c, 0x41, 0x81, 0x8f, 0x7a, 0xe4, 0x75, 0xdd, 0x60, 0x22, 0x87, 0x7c, 0x74, 0x3d, 0x09, 0xd5, 0x4f, 0x0c, 0x94, 0x58, 0x1a, 0xe7, 0xbd, 0x4b, 0x42, 0x3f, 0x02, 0xe1, 0x93, 0x97, 0xbe, 0x7b, 0xd4, 0xa9, 0x04, 0xb8, 0x8c, 0xbd, 0x2f, 0x81, 0x4b, 0x1d, 0xff, 0x1e, 0x79, 0x6d, 0x9f, 0x2d, 0x1c, 0x84, 0x70, 0xb7, 0x96, 0xc6, 0x9a }; static const uint8_t ac_dsa_vect72_priv_val[] = { /* X */ 0x6a, 0x6a, 0x98, 0x74, 0xf0, 0xf8, 0x9f, 0x04, 0xcb, 0xea, 0xeb, 0xde, 0x38, 0x33, 0xae, 0x17, 0x9a, 0xde, 0x3f, 0x5a }; static const uint8_t ac_dsa_vect72_pub_val[] = { /* Y */ 0x5d, 0x6d, 0xc1, 0x74, 0x9f, 0x28, 0xcb, 0x8f, 0x7c, 0x01, 0x4d, 0x5c, 0x55, 0x16, 0xcf, 0x5b, 0xc2, 0x22, 0xc6, 0xd9, 0x33, 0x7a, 0xc0, 0x08, 0x9b, 0x19, 0xb9, 0x0b, 0x32, 0x19, 0x56, 0xcf, 0x61, 0x92, 0xf3, 0x25, 0x5d, 0x0e, 0xec, 0x45, 0x84, 0x08, 0x10, 0xc2, 0x1f, 0xe9, 0x1c, 0xf5, 0x30, 0x89, 0x48, 0x85, 0x2a, 0x57, 0xcd, 0x01, 0x89, 0xf1, 0x5b, 0xd9, 0x6a, 0xf8, 0x38, 0x0d, 0x19, 0xcb, 0x82, 0x1b, 0x1c, 0x56, 0xaf, 0xdc, 0x38, 0xa9, 0x4b, 0x2c, 0x32, 0xfe, 0xb1, 0x82, 0x13, 0x93, 0x96, 0x93, 0xb6, 0x9f, 0x2b, 0xcb, 0xae, 0x7e, 0x70, 0xab, 0x09, 0xea, 0xd3, 0xb6, 0xa8, 0xb7, 0xda, 0xd3, 0xc4, 0xf5, 0x21, 0xad, 0x04, 0x55, 0xdd, 0x4e, 0x87, 0x2b, 0x36, 0x27, 0xd4, 0xfe, 0xd2, 0x0d, 0x5e, 0xfc, 0x78, 0xf6, 0xae, 0x46, 0x7f, 0xb9, 0x26, 0x7a, 0xb1, 0xd4 }; /* K = 27b2661922214411aec66e58cb36142ab3e5a256 */ static const uint8_t ac_dsa_vect72_out[] = { /* R */ 0x05, 0x36, 0x3b, 0xcc, 0xa1, 0x93, 0xd7, 0x26, 0xcd, 0x20, 0xe0, 0x34, 0x89, 0xe1, 0xb1, 0x3b, 0x7d, 0xf3, 0xbc, 0x98, /* S */ 0x31, 0xbd, 0xac, 0xcb, 0x29, 0xe4, 0xa6, 0x00, 0x23, 0x92, 0x9f, 0x18, 0x21, 0x99, 0xc0, 0x70, 0xb7, 0x1a, 0xc5, 0x75 }; #define ac_dsa_vect73_prime ac_dsa_vect61_prime #define ac_dsa_vect73_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect73_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect73_ptx[] = { /* Msg */ 0x47, 0x7a, 0xf8, 0xc0, 0x25, 0x18, 0x1b, 0x55, 0x77, 0x32, 0xb9, 0x56, 0x86, 0x34, 0xb1, 0x32, 0x4e, 0x66, 0x69, 0xb4, 0xc2, 0x8a, 0x0b, 0xcd, 0x4c, 0x65, 0x3d, 0x4c, 0x81, 0xed, 0x68, 0xb2, 0xa2, 0x04, 0x3a, 0x80, 0x0a, 0x31, 0x4b, 0xa9, 0x5e, 0x50, 0xde, 0xea, 0xcc, 0x5e, 0xe9, 0xc2, 0xba, 0x6f, 0x6f, 0x62, 0xfd, 0xba, 0x0e, 0x86, 0xac, 0xa2, 0x27, 0xd7, 0x27, 0x37, 0x75, 0x52, 0xa3, 0xab, 0xdb, 0xab, 0x60, 0x1c, 0x26, 0x01, 0x84, 0x6e, 0xc2, 0x7a, 0x19, 0x2a, 0x3f, 0x33, 0xe7, 0xff, 0xdb, 0xe4, 0xa4, 0xaa, 0x7b, 0xeb, 0x2b, 0x3f, 0xf6, 0xc9, 0x1b, 0xd5, 0xcd, 0x5c, 0x89, 0x0b, 0xcb, 0x6f, 0x4c, 0x90, 0x8f, 0xf5, 0xb9, 0xb5, 0x55, 0xe2, 0xa0, 0xa7, 0xdf, 0x8c, 0x3e, 0xf6, 0x77, 0x01, 0x36, 0xbb, 0xf0, 0x09, 0x75, 0x5b, 0xf6, 0xc3, 0xe6, 0x30, 0x73, 0x10 }; static const uint8_t ac_dsa_vect73_priv_val[] = { /* X */ 0x17, 0x94, 0x9e, 0x83, 0x8d, 0x7c, 0x93, 0xe1, 0xd8, 0x37, 0xbe, 0x65, 0xb3, 0xc4, 0x48, 0x24, 0x33, 0xa1, 0xb2, 0x08 }; static const uint8_t ac_dsa_vect73_pub_val[] = { /* Y */ 0x2c, 0xce, 0xdd, 0xc9, 0xe2, 0xce, 0xbb, 0xc1, 0xe9, 0x9b, 0x83, 0xb0, 0x30, 0x53, 0xbb, 0x14, 0xa9, 0xcf, 0xaf, 0x07, 0x2b, 0x45, 0xe4, 0x74, 0x6d, 0x18, 0xcb, 0x39, 0x01, 0xf6, 0xa2, 0xc3, 0xcf, 0x72, 0xda, 0x66, 0xb0, 0xb9, 0xb3, 0xe1, 0x05, 0xbd, 0x4c, 0xd0, 0xe5, 0x42, 0x7d, 0x7e, 0x9b, 0x65, 0x7e, 0xd7, 0x18, 0x84, 0xcd, 0x49, 0xf5, 0x1f, 0xe8, 0xfa, 0x18, 0xa3, 0x66, 0x01, 0x8a, 0x3e, 0xaf, 0xac, 0x33, 0x81, 0xe0, 0x7a, 0x5b, 0x19, 0xf6, 0xd3, 0x86, 0x2e, 0xd2, 0x91, 0x60, 0x94, 0x90, 0x6e, 0x75, 0x28, 0x6e, 0xaf, 0x1d, 0x13, 0xc4, 0x85, 0x74, 0x4b, 0x27, 0x04, 0x04, 0xff, 0x9a, 0xdc, 0x8e, 0x17, 0x78, 0x33, 0x04, 0x3b, 0xdc, 0x34, 0xc3, 0x07, 0xe6, 0xfc, 0x9c, 0x55, 0xc5, 0x3d, 0x8f, 0xf8, 0x4a, 0x6e, 0x25, 0x10, 0x38, 0xdb, 0xeb, 0x5e, 0xf7, 0x74 }; /* K = 620f07d7e7ced030e669685ab8c39174d88c79eb */ static const uint8_t ac_dsa_vect73_out[] = { /* R */ 0x35, 0x91, 0xc5, 0x21, 0xb2, 0xa5, 0x6c, 0xf4, 0x60, 0x51, 0xc0, 0xcb, 0x3d, 0x44, 0x4b, 0x9a, 0x22, 0xff, 0xf6, 0x3f, /* S */ 0x7a, 0xc7, 0x8e, 0xe2, 0x52, 0x44, 0x0c, 0xf9, 0xe8, 0x51, 0x04, 0x94, 0xd1, 0xfa, 0xd8, 0xb5, 0x18, 0xf1, 0xe1, 0x28 }; #define ac_dsa_vect74_prime ac_dsa_vect61_prime #define ac_dsa_vect74_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect74_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect74_ptx[] = { /* Msg */ 0xbb, 0x65, 0x93, 0xff, 0x21, 0x9c, 0x9f, 0x20, 0xaa, 0x47, 0xe1, 0xe1, 0x57, 0xe8, 0x8e, 0xd5, 0x9a, 0xe2, 0x9c, 0x89, 0x40, 0xa5, 0x27, 0xc8, 0x2e, 0x0e, 0x0f, 0x2e, 0x85, 0x5f, 0xa9, 0x8e, 0x94, 0xe0, 0x7b, 0xe1, 0xf6, 0xbc, 0xe3, 0x83, 0x2b, 0x7e, 0xa1, 0xe6, 0x0a, 0x5c, 0x9e, 0xf5, 0x83, 0xf2, 0xec, 0x7b, 0x17, 0x92, 0x27, 0xe4, 0xaf, 0xdc, 0xf8, 0x29, 0xd6, 0x73, 0xe1, 0x37, 0x7f, 0x83, 0x2a, 0xe3, 0x8e, 0x7c, 0xad, 0xed, 0xe4, 0x15, 0x96, 0x4f, 0x12, 0xba, 0xf7, 0x75, 0xd3, 0x8c, 0xe3, 0x8e, 0x94, 0x55, 0x63, 0xe7, 0x28, 0x61, 0x51, 0x91, 0x97, 0xc2, 0xd0, 0x8f, 0x28, 0xd8, 0xb6, 0x46, 0x65, 0x62, 0xe0, 0x59, 0xec, 0x41, 0x74, 0x1d, 0xe3, 0x49, 0xed, 0x5d, 0xe2, 0xc7, 0xd6, 0xcc, 0x75, 0x18, 0xa8, 0x77, 0x20, 0xa2, 0x48, 0xb3, 0x01, 0x73, 0x3a, 0x47 }; static const uint8_t ac_dsa_vect74_priv_val[] = { /* X */ 0x30, 0x1c, 0x11, 0xa3, 0x4e, 0xdc, 0xe1, 0xf7, 0xab, 0x04, 0x07, 0x54, 0xe0, 0xb2, 0xd4, 0xfd, 0x88, 0x57, 0x21, 0x87 }; static const uint8_t ac_dsa_vect74_pub_val[] = { /* Y */ 0x15, 0xd9, 0xe2, 0x0c, 0x3f, 0x39, 0xcc, 0x9e, 0x3b, 0x8f, 0xb6, 0x5f, 0xeb, 0x64, 0xfb, 0x15, 0x68, 0xf6, 0xef, 0xde, 0xf6, 0x45, 0x7d, 0x23, 0x1c, 0x49, 0x1e, 0xd5, 0x17, 0x31, 0xd5, 0x8f, 0x06, 0xe4, 0x5e, 0xa5, 0xd6, 0x65, 0xd0, 0x49, 0x69, 0x82, 0x3d, 0xa4, 0xe6, 0x75, 0x0a, 0x2c, 0x3d, 0x16, 0xc5, 0xff, 0x60, 0x80, 0xec, 0xd0, 0x9a, 0xa3, 0x9c, 0x00, 0x6e, 0xed, 0xce, 0xb4, 0xdb, 0xc1, 0x6e, 0xbd, 0x64, 0xbc, 0x5b, 0x1e, 0x44, 0xb8, 0x31, 0xa6, 0xbb, 0x25, 0xaf, 0xbc, 0xb3, 0x00, 0x0f, 0xa6, 0xb6, 0xc2, 0x00, 0x08, 0x60, 0x01, 0x40, 0x11, 0x18, 0x9c, 0x22, 0x54, 0x2c, 0x14, 0x5e, 0x40, 0x7e, 0x7b, 0x59, 0xf6, 0xd3, 0xfb, 0x1e, 0x13, 0x62, 0x95, 0xec, 0x85, 0x0b, 0x14, 0xff, 0x2f, 0x49, 0x94, 0xea, 0x37, 0x48, 0x1e, 0x80, 0x19, 0x99, 0x10, 0xbe, 0x8e }; /* K = 117e12f88d6e44fc7f4d51d5384fc31b2e3419a2 */ static const uint8_t ac_dsa_vect74_out[] = { /* R */ 0x61, 0xe7, 0x27, 0x71, 0x6c, 0xc9, 0x69, 0x14, 0x50, 0x97, 0x40, 0xa7, 0xcb, 0xa6, 0xe7, 0x4a, 0x9d, 0xec, 0x64, 0x06, /* S */ 0x2e, 0x77, 0xc1, 0x4f, 0x01, 0xf2, 0x21, 0x80, 0xbc, 0xda, 0x57, 0x25, 0xcf, 0x0e, 0xaa, 0xc9, 0xad, 0x13, 0xa7, 0xd1 }; #define ac_dsa_vect75_prime ac_dsa_vect61_prime #define ac_dsa_vect75_sub_prime ac_dsa_vect61_sub_prime #define ac_dsa_vect75_base ac_dsa_vect61_base static const uint8_t ac_dsa_vect75_ptx[] = { /* Msg */ 0x56, 0x5f, 0x19, 0x24, 0x44, 0x68, 0x51, 0x5e, 0x84, 0x63, 0xd0, 0x7b, 0x42, 0x5b, 0x4d, 0x5f, 0x81, 0xff, 0x2e, 0xfa, 0xb5, 0x15, 0x6b, 0xa1, 0x9a, 0x63, 0x73, 0x42, 0x19, 0xc2, 0x26, 0xcc, 0xca, 0x59, 0x03, 0xbf, 0x9c, 0x35, 0xdb, 0xca, 0x09, 0x61, 0xdb, 0x7c, 0x2e, 0x3f, 0x69, 0x44, 0xd0, 0x57, 0xed, 0xfa, 0x6c, 0x23, 0x94, 0xc3, 0x9a, 0x00, 0xf1, 0xc4, 0x25, 0x96, 0xe7, 0xee, 0x72, 0xed, 0x64, 0x4c, 0x6a, 0x18, 0x21, 0x15, 0xbd, 0xc4, 0x4b, 0x90, 0x10, 0xc8, 0x6e, 0x7b, 0x0e, 0xc2, 0xe3, 0xbd, 0xf7, 0x01, 0x6c, 0x5e, 0x04, 0xf4, 0x55, 0xb4, 0xcb, 0x69, 0x3e, 0x32, 0x49, 0x0b, 0x8f, 0x49, 0x4b, 0xb4, 0x10, 0x3b, 0x3b, 0x5e, 0xa6, 0x80, 0x82, 0x22, 0x45, 0x28, 0x41, 0xb7, 0x33, 0xfa, 0xf7, 0x35, 0xf1, 0x0a, 0x95, 0xfb, 0x28, 0x3d, 0xd8, 0x6c, 0xe5, 0x93 }; static const uint8_t ac_dsa_vect75_priv_val[] = { /* X */ 0x07, 0xdf, 0xca, 0x41, 0x44, 0x6b, 0x2f, 0x4e, 0x1a, 0xf2, 0xa6, 0x7b, 0xc8, 0x46, 0x8d, 0xb9, 0xa9, 0xc2, 0xdf, 0xe0 }; static const uint8_t ac_dsa_vect75_pub_val[] = { /* Y */ 0x66, 0x42, 0x45, 0xaa, 0xeb, 0xcf, 0x5c, 0x05, 0x5c, 0x32, 0x10, 0x9b, 0x21, 0x59, 0xa1, 0x74, 0x73, 0x04, 0x30, 0x87, 0x91, 0x5f, 0x14, 0xe9, 0x59, 0xdd, 0xdc, 0x0c, 0x9b, 0x20, 0xc7, 0x26, 0xf0, 0x12, 0x4f, 0x1e, 0xcb, 0xaf, 0x20, 0x2f, 0xe2, 0x67, 0x6a, 0xfd, 0xab, 0xd3, 0x46, 0xa7, 0xb5, 0xbe, 0xf7, 0x69, 0xa2, 0x5c, 0x6f, 0x73, 0x36, 0x12, 0xd7, 0x37, 0x8d, 0xf1, 0xb2, 0xd4, 0xc5, 0x18, 0xa2, 0xda, 0x5b, 0x3a, 0x4c, 0xd0, 0x25, 0x2b, 0xb8, 0x18, 0x08, 0x38, 0xa4, 0x63, 0x89, 0xa8, 0x46, 0x93, 0xbe, 0x8c, 0xc2, 0x4f, 0xbd, 0xc6, 0x39, 0xb6, 0x2c, 0xb2, 0x1d, 0x8a, 0xbe, 0x12, 0x72, 0xb5, 0xaa, 0x06, 0x22, 0x2f, 0xe2, 0x13, 0x3f, 0xc5, 0x55, 0x6d, 0x24, 0xe7, 0x54, 0x96, 0xa5, 0x3e, 0x19, 0x34, 0xd3, 0xb5, 0x84, 0x8e, 0x51, 0x0b, 0x69, 0xda, 0x04, 0xa4 }; /* K = 4522d27cd17a6ee739873d69f107d872ed7e2db5 */ static const uint8_t ac_dsa_vect75_out[] = { /* R */ 0x5c, 0xa0, 0x7b, 0xc7, 0xcd, 0x9f, 0x7a, 0x60, 0xcf, 0x79, 0x39, 0x1d, 0x87, 0x3b, 0x6f, 0xdd, 0xf5, 0xa4, 0x8c, 0xca, /* S */ 0x97, 0x99, 0xc7, 0x4a, 0x80, 0x6f, 0xc1, 0x96, 0xe0, 0x22, 0x3f, 0xb1, 0xa6, 0x13, 0xfd, 0x17, 0x8c, 0xaf, 0xbd, 0x99 }; /* [mod = L=2048, N=224, SHA-1] */ static const uint8_t ac_dsa_vect76_prime[] = { /* P */ 0xf2, 0xd3, 0x9e, 0xd3, 0x06, 0x2b, 0x13, 0xc9, 0x16, 0x27, 0x36, 0x00, 0xa0, 0xf2, 0xa0, 0x29, 0xe8, 0x6d, 0x7a, 0x4b, 0x92, 0x17, 0xb4, 0xf1, 0x81, 0x5b, 0xf2, 0xb2, 0x4d, 0x97, 0x10, 0xa5, 0x7a, 0xb3, 0x3f, 0x99, 0x72, 0x94, 0xb0, 0x14, 0x58, 0x5b, 0x8d, 0x01, 0x98, 0xdf, 0xdc, 0xcb, 0xcd, 0x75, 0x31, 0x4d, 0xa5, 0xff, 0x85, 0xaa, 0x34, 0x4b, 0x45, 0xad, 0xae, 0xaa, 0x97, 0x9b, 0x51, 0xa3, 0x12, 0xa7, 0xbf, 0xa9, 0x44, 0x72, 0xfb, 0x63, 0x3f, 0x1a, 0x6f, 0x15, 0x6b, 0xb4, 0x45, 0x88, 0x67, 0xdf, 0xd3, 0x84, 0x03, 0xf0, 0x6b, 0x85, 0x1f, 0x00, 0xfe, 0x2d, 0x34, 0x84, 0x07, 0x7b, 0xde, 0xd7, 0x1a, 0xb7, 0x51, 0x3d, 0x04, 0xa1, 0x40, 0x22, 0x05, 0x75, 0xfb, 0x69, 0x33, 0x95, 0x48, 0x0e, 0x4c, 0x84, 0x02, 0xb7, 0xa4, 0x6c, 0xec, 0x2d, 0x37, 0xa7, 0x78, 0xc3, 0x05, 0xac, 0xcd, 0x1f, 0x13, 0xe9, 0xf6, 0x2e, 0x86, 0x53, 0x15, 0xf4, 0xb2, 0x2c, 0xc4, 0x67, 0xc8, 0x98, 0x6e, 0xc8, 0xe4, 0x96, 0x1d, 0xdf, 0x81, 0x05, 0x66, 0xb0, 0xc4, 0xee, 0x36, 0x9a, 0xc6, 0xaa, 0x15, 0xe4, 0x3f, 0x47, 0x44, 0x00, 0x58, 0x26, 0xf5, 0xbd, 0xe8, 0x07, 0x1a, 0x19, 0xe3, 0x0b, 0x69, 0x09, 0xaa, 0xc4, 0xb3, 0xd1, 0x74, 0x23, 0x72, 0x70, 0xda, 0xd0, 0x27, 0x99, 0xd0, 0x9b, 0x8a, 0x2c, 0xc5, 0xf2, 0x2e, 0x66, 0x89, 0x4b, 0x54, 0x22, 0x22, 0x8b, 0x2c, 0x23, 0x4f, 0x11, 0xf5, 0xa7, 0x71, 0xc5, 0xb8, 0x9c, 0xf4, 0x65, 0xa2, 0xac, 0xec, 0xbb, 0xee, 0xaa, 0x17, 0x25, 0xfe, 0x8f, 0x9b, 0x59, 0x42, 0x2b, 0xe8, 0x99, 0x10, 0x52, 0xcb, 0x55, 0x6d, 0xdf, 0x2c, 0x8c, 0xe8, 0xfa, 0x92, 0x06, 0xdb, 0xf3, 0x9f, 0xea, 0xdc, 0x19, 0x4e, 0x00, 0xf8, 0xe5 }; static const uint8_t ac_dsa_vect76_sub_prime[] = { /* Q */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x18, 0xf4, 0x98, 0x35, 0xe4, 0xef, 0x73, 0x3c, 0x4d, 0x15, 0x80, 0x0f, 0xcf, 0x05, 0x9e, 0x88, 0x4d, 0x31, 0xb1 }; static const uint8_t ac_dsa_vect76_base[] = { /* G */ 0xe3, 0xa9, 0x3c, 0x09, 0xda, 0x6f, 0x56, 0x0e, 0x4d, 0x48, 0x3a, 0x38, 0x2a, 0x4c, 0x54, 0x6f, 0x23, 0x35, 0xc3, 0x6a, 0x4c, 0x35, 0xac, 0x14, 0x63, 0xc0, 0x8a, 0x3e, 0x6d, 0xd4, 0x15, 0xdf, 0x56, 0xfd, 0xc5, 0x37, 0xf2, 0x5f, 0xd5, 0x37, 0x2b, 0xe6, 0x3e, 0x4f, 0x53, 0x00, 0x78, 0x0b, 0x78, 0x2f, 0x1a, 0xcd, 0x01, 0xc8, 0xb4, 0xeb, 0x33, 0x41, 0x46, 0x15, 0xfd, 0x0e, 0xa8, 0x25, 0x73, 0xac, 0xba, 0x7e, 0xf8, 0x3f, 0x5a, 0x94, 0x38, 0x54, 0x15, 0x1a, 0xfc, 0x2d, 0x7d, 0xfe, 0x12, 0x1f, 0xb8, 0xcd, 0x03, 0x33, 0x5b, 0x06, 0x5b, 0x54, 0x9c, 0x5d, 0xcc, 0x60, 0x6b, 0xe9, 0x05, 0x24, 0x83, 0xbc, 0x28, 0x4e, 0x12, 0xac, 0x3c, 0x8d, 0xba, 0x09, 0xb4, 0x26, 0xe0, 0x84, 0x02, 0x03, 0x0e, 0x70, 0xbc, 0x1c, 0xc2, 0xbf, 0x89, 0x57, 0xc4, 0xba, 0x06, 0x30, 0xf3, 0xf3, 0x2a, 0xd6, 0x89, 0x38, 0x9a, 0xc4, 0x74, 0x43, 0x17, 0x60, 0x63, 0xf2, 0x47, 0xd9, 0xe2, 0x29, 0x6b, 0x3e, 0xa5, 0xb5, 0xbc, 0x23, 0x35, 0x82, 0x8e, 0xa1, 0xa0, 0x80, 0xed, 0x35, 0x91, 0x8d, 0xee, 0x21, 0x2f, 0xd0, 0x31, 0x27, 0x9d, 0x1b, 0x89, 0x4f, 0x01, 0xaf, 0xec, 0x52, 0x38, 0x33, 0x66, 0x9e, 0xac, 0x03, 0x1a, 0x42, 0x0e, 0x54, 0x0b, 0xa1, 0x32, 0x0a, 0x59, 0xc4, 0x24, 0xa3, 0xe5, 0x84, 0x9a, 0x46, 0x0a, 0x56, 0xbc, 0xb0, 0x01, 0x64, 0x78, 0x85, 0xb1, 0x43, 0x3c, 0x4f, 0x99, 0x29, 0x71, 0x74, 0x6b, 0xfe, 0x29, 0x77, 0xce, 0x72, 0x59, 0xc5, 0x50, 0xb5, 0x51, 0xa6, 0xc3, 0x57, 0x61, 0xe4, 0xa4, 0x1a, 0xf7, 0x64, 0xe8, 0xd9, 0x21, 0x32, 0xfc, 0xc0, 0xa5, 0x9d, 0x16, 0x84, 0xea, 0xb9, 0x0d, 0x86, 0x3f, 0x29, 0xf4, 0x1c, 0xf7, 0x57, 0x8f, 0xaa, 0x90, 0x8c }; static const uint8_t ac_dsa_vect76_ptx[] = { /* Msg */ 0xed, 0xc6, 0xfd, 0x9b, 0x6c, 0x6e, 0x8a, 0x59, 0xf2, 0x83, 0x01, 0x6f, 0x7f, 0x29, 0xee, 0x16, 0xde, 0xea, 0xa6, 0x09, 0xb5, 0x73, 0x79, 0x27, 0x16, 0x2a, 0xef, 0x34, 0xfe, 0xd9, 0x85, 0xd0, 0xbc, 0xb5, 0x50, 0x27, 0x56, 0x37, 0xba, 0x67, 0x83, 0x1a, 0x2d, 0x4e, 0xfc, 0xcb, 0x35, 0x29, 0x6d, 0xfe, 0x73, 0x0f, 0x4a, 0x0b, 0x4f, 0x47, 0x28, 0xd1, 0xd7, 0xd1, 0xbb, 0x8f, 0x4a, 0x36, 0x23, 0x8a, 0x5c, 0x94, 0x31, 0x1f, 0xa1, 0x13, 0x4a, 0x93, 0xa6, 0xb4, 0xde, 0x39, 0xc0, 0x85, 0xe9, 0xf6, 0x0a, 0xe4, 0xe2, 0x37, 0xc0, 0x41, 0x6d, 0x58, 0x04, 0x2b, 0xb3, 0x6b, 0xaa, 0x38, 0xcb, 0xa8, 0xc8, 0x96, 0x29, 0x5b, 0x74, 0x5d, 0x53, 0x76, 0xfd, 0x8c, 0xe4, 0x2e, 0xb6, 0xee, 0x5a, 0x1b, 0x38, 0xf8, 0x77, 0x16, 0xb2, 0x65, 0xb7, 0x6e, 0x58, 0xcf, 0xb2, 0x4a, 0x91, 0x70 }; static const uint8_t ac_dsa_vect76_priv_val[] = { /* X */ 0x61, 0x32, 0xe5, 0x51, 0xcd, 0xac, 0x88, 0x40, 0x91, 0x83, 0xbd, 0x37, 0xee, 0x14, 0x52, 0xcd, 0x24, 0x7d, 0x48, 0x34, 0xb0, 0x88, 0x14, 0xb2, 0x75, 0xbe, 0x3f, 0xf5 }; static const uint8_t ac_dsa_vect76_pub_val[] = { /* Y */ 0x28, 0x9f, 0xf1, 0x8c, 0x32, 0xa5, 0x6b, 0xb0, 0xb8, 0x83, 0x93, 0x70, 0x64, 0x76, 0x83, 0xa3, 0x8a, 0x5a, 0x7e, 0x29, 0x14, 0x10, 0xb9, 0x32, 0x07, 0x21, 0x2a, 0xdc, 0x80, 0x88, 0xd3, 0x0f, 0x93, 0xe9, 0xe4, 0xab, 0xc5, 0x23, 0xf3, 0xd4, 0x69, 0x36, 0xe7, 0xd5, 0xc9, 0x0d, 0x88, 0x74, 0x2b, 0x36, 0xaf, 0xd3, 0x75, 0x63, 0x40, 0x8f, 0x15, 0xc8, 0xc1, 0xa4, 0xf7, 0xac, 0x24, 0xbf, 0x05, 0xf0, 0x10, 0x08, 0xff, 0xee, 0x70, 0xc8, 0x82, 0x5d, 0x57, 0xc3, 0xa9, 0x30, 0x8b, 0xad, 0x8a, 0x09, 0x5a, 0xf2, 0xb5, 0x3b, 0x2d, 0xda, 0x3c, 0xbe, 0xd8, 0x46, 0xd9, 0x5e, 0x30, 0x1e, 0xb9, 0xb8, 0x47, 0x66, 0x41, 0x5d, 0x11, 0xf6, 0xc3, 0x32, 0x09, 0xa0, 0xd2, 0x85, 0x71, 0x09, 0x6a, 0xb0, 0x4a, 0x79, 0xaa, 0x0d, 0xc4, 0x65, 0x99, 0x75, 0x29, 0x68, 0x6b, 0x68, 0xe8, 0x87, 0xcd, 0x8a, 0x20, 0x5c, 0x2d, 0xc8, 0x19, 0x5a, 0xef, 0x04, 0x22, 0xeb, 0xa9, 0x97, 0x9f, 0x54, 0x9a, 0xc8, 0x55, 0x48, 0xe4, 0x19, 0x41, 0x36, 0x43, 0xb7, 0x24, 0x43, 0x61, 0x15, 0x3a, 0xda, 0x14, 0x80, 0xd2, 0x38, 0xcd, 0x00, 0xdc, 0x16, 0x52, 0x79, 0x38, 0x95, 0x55, 0x48, 0xdd, 0x5d, 0x02, 0x7d, 0xed, 0x10, 0x29, 0xee, 0xeb, 0x8e, 0xd6, 0xc6, 0x1b, 0x4c, 0xd5, 0x93, 0x41, 0xd8, 0xb1, 0x54, 0x66, 0xe9, 0xda, 0x89, 0x0a, 0x98, 0x99, 0x96, 0xf4, 0xd7, 0x69, 0x1e, 0x60, 0x72, 0xde, 0x13, 0x6a, 0xf2, 0x8b, 0x58, 0x74, 0xbf, 0x08, 0xbd, 0x1f, 0x8a, 0x60, 0xcf, 0xb1, 0xc0, 0x08, 0x88, 0x13, 0x29, 0x09, 0xf5, 0x15, 0xe0, 0x4b, 0xce, 0x81, 0xb0, 0x29, 0x51, 0xaa, 0x41, 0xba, 0xac, 0x68, 0xff, 0xdb, 0x8c, 0x5d, 0xc7, 0x7a, 0x1d, 0x32, 0xd8, 0xf2, 0xc1, 0x0d, 0xd7 }; /* K = 7197392d32d0af6a7183cc3398556f8f687d86a8ff742be6ad38562f */ static const uint8_t ac_dsa_vect76_out[] = { /* R */ 0x45, 0xdf, 0x2f, 0x42, 0x3e, 0x94, 0xbf, 0x15, 0x5d, 0xd4, 0xe1, 0xd9, 0xe6, 0x3f, 0x31, 0x5e, 0xa6, 0x06, 0xdd, 0x38, 0x52, 0x7d, 0x4c, 0xf6, 0x32, 0x87, 0x38, 0xc8, /* S */ 0x59, 0xb3, 0xe8, 0xef, 0xa5, 0xbc, 0x0c, 0xcb, 0xf4, 0xa3, 0xcb, 0xb6, 0x51, 0x5c, 0x4b, 0x9b, 0xf7, 0x84, 0xcf, 0xac, 0xdc, 0xc1, 0x01, 0xdc, 0x9f, 0x81, 0xd3, 0x1f }; #define ac_dsa_vect77_prime ac_dsa_vect76_prime #define ac_dsa_vect77_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect77_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect77_ptx[] = { /* Msg */ 0x3b, 0xd2, 0xab, 0x08, 0x21, 0x78, 0x78, 0xe6, 0x77, 0x4e, 0xc7, 0x79, 0x7d, 0xeb, 0x75, 0xd5, 0xc9, 0x4c, 0x40, 0xe2, 0x4d, 0xdf, 0x1f, 0xac, 0x8d, 0xde, 0x3a, 0x29, 0xc8, 0x6b, 0x26, 0xf5, 0x71, 0x57, 0xd3, 0x29, 0xaa, 0xc3, 0x1a, 0x66, 0x22, 0xe1, 0xd6, 0xda, 0xc9, 0x7e, 0x22, 0x69, 0x5d, 0x7d, 0x1f, 0x8e, 0x20, 0xaa, 0x26, 0xb0, 0x67, 0x95, 0xc2, 0xf8, 0x78, 0xba, 0x5d, 0x2b, 0x9c, 0xc4, 0xb1, 0x6d, 0x5f, 0xa6, 0x0a, 0x5f, 0xa5, 0xc2, 0x4c, 0x09, 0x03, 0x1d, 0xe2, 0xf9, 0x70, 0xa9, 0xb5, 0x7e, 0xa2, 0x4a, 0xf1, 0x71, 0x92, 0xec, 0xe2, 0x1a, 0x4d, 0x12, 0x0f, 0xdb, 0x52, 0xe6, 0x2b, 0x82, 0x38, 0xf7, 0x78, 0xff, 0x85, 0x52, 0xfa, 0x45, 0x3c, 0x0a, 0x88, 0x91, 0x24, 0x3f, 0xc8, 0x75, 0x71, 0x88, 0xe9, 0xc4, 0xe0, 0xe7, 0x49, 0xf7, 0xe9, 0xcd, 0xf1, 0xc1 }; static const uint8_t ac_dsa_vect77_priv_val[] = { /* X */ 0x32, 0xd5, 0x3a, 0xd2, 0x62, 0x0c, 0x15, 0x6e, 0x46, 0x17, 0xa8, 0x68, 0x0c, 0x54, 0x38, 0x39, 0xc9, 0xbe, 0x93, 0x10, 0x3e, 0x80, 0xcc, 0x0f, 0xef, 0xa4, 0x4c, 0xe5 }; static const uint8_t ac_dsa_vect77_pub_val[] = { /* Y */ 0xb9, 0xb0, 0xe1, 0xcd, 0x37, 0xba, 0xfb, 0xed, 0xee, 0xd1, 0x73, 0xfd, 0x70, 0x99, 0x83, 0xf5, 0x3c, 0x2c, 0x42, 0x7f, 0x9f, 0x61, 0xc8, 0x95, 0xfa, 0xc9, 0xeb, 0x54, 0x9b, 0xd6, 0x20, 0x1d, 0x05, 0xef, 0xd5, 0x51, 0xae, 0xcb, 0x98, 0xb2, 0xdf, 0x80, 0x14, 0x2d, 0xea, 0x7a, 0x35, 0x49, 0x1d, 0x47, 0x4a, 0x3a, 0xdc, 0x83, 0xf0, 0xda, 0x8d, 0xc4, 0xea, 0xcd, 0x7f, 0x6d, 0x72, 0x01, 0xc6, 0xfc, 0x0a, 0xb7, 0x98, 0xab, 0xe8, 0x9d, 0xcd, 0x7d, 0x03, 0x10, 0xd5, 0xf0, 0x0f, 0xa1, 0x0d, 0x21, 0x1f, 0x18, 0xea, 0x85, 0x35, 0x79, 0xe2, 0xfe, 0x31, 0xee, 0x55, 0x37, 0x1d, 0x1c, 0x9f, 0xc4, 0xcf, 0xb0, 0x50, 0x78, 0x65, 0x86, 0x65, 0x9b, 0xdc, 0x0f, 0x1a, 0xac, 0x4c, 0x10, 0x9b, 0x9e, 0x4f, 0x94, 0x16, 0xd2, 0x2c, 0x42, 0xb3, 0x9a, 0x47, 0x13, 0x11, 0xe2, 0x8a, 0x8e, 0xd6, 0x2f, 0x1f, 0x41, 0xbc, 0xfe, 0x06, 0xe0, 0x74, 0xbb, 0x2f, 0x1a, 0xcd, 0x29, 0x59, 0x79, 0x53, 0xc3, 0xb6, 0x9d, 0x3a, 0x78, 0x83, 0x1f, 0xb2, 0xf8, 0x36, 0x65, 0xd0, 0x4a, 0x13, 0x95, 0x77, 0x5e, 0xa3, 0xa2, 0xa6, 0xea, 0x14, 0x2e, 0xc0, 0x05, 0x07, 0xba, 0xdd, 0x4d, 0xe0, 0xd9, 0xc1, 0x02, 0xea, 0xc7, 0xbb, 0x89, 0x4f, 0x74, 0x53, 0xe6, 0xa8, 0xe0, 0xdd, 0x3f, 0x14, 0x97, 0x83, 0x77, 0xd1, 0xdd, 0xb1, 0xfd, 0xf1, 0xc5, 0x58, 0x35, 0xb9, 0x92, 0x4f, 0x42, 0xad, 0x45, 0xc8, 0x47, 0xc7, 0x9b, 0x3f, 0x83, 0xfb, 0xf9, 0x24, 0xf8, 0x0b, 0x78, 0xf5, 0x03, 0x29, 0x73, 0x10, 0x16, 0x76, 0x3e, 0x01, 0xba, 0x8e, 0xf6, 0x9e, 0x81, 0x52, 0x3e, 0x18, 0x15, 0x84, 0xf4, 0x5c, 0x21, 0xe3, 0xc8, 0xed, 0xfe, 0xd4, 0xe2, 0xec, 0x56, 0xfb, 0x7b, 0x02, 0xaa, 0x4e, 0xe9 }; /* K = 2e8e4625de74e31bea9e480a5de92890095b6ce36897a2337ff97d53 */ static const uint8_t ac_dsa_vect77_out[] = { /* R */ 0x6d, 0x19, 0xfe, 0x3c, 0x41, 0x5d, 0x6b, 0x07, 0xd6, 0xa1, 0x03, 0x9a, 0x1f, 0xe3, 0x4b, 0x10, 0x6d, 0xaa, 0x2e, 0xea, 0x4c, 0xbc, 0xa9, 0x71, 0xcb, 0x66, 0x9e, 0xac, /* S */ 0x14, 0xd7, 0xde, 0xcc, 0x2c, 0xc0, 0x5a, 0x17, 0x00, 0xfa, 0x25, 0x6e, 0x4d, 0x29, 0x94, 0xbc, 0x4b, 0xd9, 0x57, 0xbe, 0xd0, 0xba, 0xf9, 0xa1, 0x8b, 0xda, 0x70, 0x90 }; #define ac_dsa_vect78_prime ac_dsa_vect76_prime #define ac_dsa_vect78_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect78_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect78_ptx[] = { /* Msg */ 0xc6, 0x7f, 0xa7, 0x7c, 0xd7, 0x35, 0x1d, 0x10, 0x0c, 0x76, 0x24, 0xe2, 0x54, 0x18, 0x48, 0x1f, 0x8f, 0xa4, 0x99, 0xd7, 0x5f, 0x59, 0x49, 0xa5, 0xca, 0xe6, 0x0f, 0x96, 0xa0, 0xf7, 0xbf, 0xcd, 0xda, 0x7d, 0xba, 0x37, 0x3f, 0x9f, 0x75, 0x12, 0xa5, 0xf1, 0x46, 0x0a, 0x95, 0x21, 0x30, 0x77, 0xce, 0xbd, 0x91, 0x2e, 0x26, 0x62, 0xc4, 0x3a, 0xc6, 0xbb, 0xe3, 0x8c, 0x44, 0x79, 0xb0, 0x41, 0x51, 0xa5, 0xe2, 0xd2, 0x88, 0x09, 0x02, 0xd0, 0x31, 0xaa, 0x0d, 0xff, 0x3f, 0x41, 0x12, 0x6d, 0xd0, 0x9f, 0xba, 0x5c, 0x05, 0x07, 0x63, 0x4e, 0xd1, 0x6c, 0x39, 0x38, 0xfb, 0xd3, 0xa9, 0x64, 0x73, 0xa8, 0xb1, 0xeb, 0xdc, 0x37, 0xd3, 0x2c, 0x76, 0x7f, 0xd5, 0x93, 0x2e, 0xfa, 0x23, 0x55, 0x55, 0xf3, 0x82, 0x5a, 0x15, 0x95, 0x36, 0x92, 0x38, 0x67, 0x54, 0x53, 0x60, 0x4d, 0x27, 0x8e }; static const uint8_t ac_dsa_vect78_priv_val[] = { /* X */ 0x06, 0x2b, 0xd0, 0x14, 0x87, 0xe4, 0x13, 0x07, 0x41, 0x26, 0xd9, 0xd4, 0x72, 0x58, 0xb5, 0xc7, 0xc7, 0x77, 0x90, 0xa9, 0xdb, 0x0a, 0xf9, 0x52, 0xce, 0x79, 0x9e, 0xb0 }; static const uint8_t ac_dsa_vect78_pub_val[] = { /* Y */ 0x31, 0x93, 0x9c, 0xcd, 0xd3, 0x93, 0xf7, 0x47, 0x54, 0x1a, 0x5c, 0x69, 0xf8, 0xe5, 0x09, 0x76, 0x1d, 0xd6, 0x7e, 0xdd, 0xb4, 0x2e, 0x0b, 0xdf, 0xc4, 0x12, 0xd4, 0xcc, 0x30, 0xd3, 0x68, 0xd8, 0x78, 0xd2, 0x6d, 0x85, 0x6c, 0x52, 0x90, 0xec, 0x74, 0x6b, 0x59, 0xc5, 0xe5, 0xaf, 0x65, 0xef, 0x3f, 0xd6, 0x2c, 0x9a, 0x2d, 0xcc, 0xfc, 0x15, 0x58, 0xdf, 0xbf, 0xb6, 0x2c, 0xfe, 0xcd, 0x78, 0x38, 0xe6, 0xd5, 0x94, 0x95, 0xb2, 0x0d, 0xb5, 0xad, 0x9d, 0x78, 0xe8, 0x2f, 0x04, 0x6f, 0x9f, 0x15, 0x98, 0x11, 0x3a, 0xae, 0x0a, 0x79, 0x60, 0x1d, 0x6b, 0x94, 0xa3, 0x2e, 0x05, 0xf6, 0xec, 0xfd, 0xf2, 0xb9, 0xc4, 0xcf, 0xa7, 0x20, 0xde, 0xbf, 0xc2, 0x12, 0x22, 0x1b, 0x14, 0xb0, 0xdd, 0x6f, 0x70, 0x78, 0x20, 0x5a, 0x4f, 0x21, 0x8c, 0xd4, 0xb8, 0xf1, 0x0b, 0xea, 0x8f, 0xa4, 0x81, 0xec, 0xa5, 0x25, 0x4f, 0x36, 0x5d, 0x01, 0xf3, 0xc8, 0x65, 0x20, 0xbf, 0x25, 0x43, 0x23, 0xd5, 0x63, 0x4b, 0x96, 0x92, 0x0a, 0x13, 0xb8, 0xf2, 0x9d, 0x73, 0x4e, 0x07, 0xfd, 0xe8, 0x06, 0x4e, 0xb0, 0xc9, 0xf8, 0xeb, 0xb6, 0xae, 0x0b, 0x40, 0xb4, 0xaa, 0x7d, 0x26, 0xbb, 0x8d, 0x80, 0x86, 0x82, 0x31, 0xd4, 0x55, 0x8a, 0x27, 0x80, 0x45, 0xcb, 0x5f, 0x29, 0x51, 0xcb, 0xfe, 0x0d, 0xc9, 0x7b, 0xbd, 0xce, 0xe7, 0xaf, 0x8c, 0x9b, 0x1e, 0x3b, 0x63, 0xcb, 0x49, 0xdc, 0x29, 0xf3, 0x00, 0x77, 0x5c, 0xdb, 0xe4, 0xd2, 0xd2, 0x78, 0x94, 0xe2, 0x7e, 0x0e, 0x7c, 0x9e, 0xad, 0xa1, 0x3a, 0x35, 0x9f, 0x0b, 0x92, 0xb4, 0x49, 0xe9, 0xd0, 0x69, 0xb9, 0x5b, 0xdc, 0x2a, 0xa7, 0xc8, 0x5e, 0x56, 0x81, 0x1c, 0x07, 0x20, 0x7a, 0x15, 0x0e, 0x59, 0x87, 0x35, 0x99, 0x6a, 0x6e, 0x53, 0x49 }; /* K = 7439c7aa4446ed540ba50b9c817792b08fc0278fa0af2daded03756b */ static const uint8_t ac_dsa_vect78_out[] = { /* R */ 0x79, 0x24, 0xb7, 0x6e, 0xe7, 0x6a, 0xd7, 0xff, 0x2a, 0xb3, 0x27, 0xda, 0xbb, 0xbd, 0x31, 0x33, 0x67, 0x50, 0xfc, 0x76, 0x63, 0xdf, 0x4b, 0x5b, 0x94, 0xee, 0xb6, 0x2d, /* S */ 0x59, 0x14, 0xcf, 0x96, 0x54, 0x90, 0xb0, 0xbf, 0x81, 0x92, 0xfc, 0x6e, 0x16, 0x97, 0x54, 0xbd, 0xfd, 0x31, 0xc4, 0x8d, 0x71, 0x63, 0x61, 0xdd, 0x15, 0xf4, 0x5b, 0xf7 }; #define ac_dsa_vect79_prime ac_dsa_vect76_prime #define ac_dsa_vect79_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect79_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect79_ptx[] = { /* Msg */ 0xfd, 0xe7, 0x43, 0x4c, 0x41, 0x66, 0x60, 0x22, 0xd6, 0xd7, 0xda, 0xbc, 0x7a, 0x67, 0x31, 0x5b, 0x1f, 0xf4, 0x9a, 0x2a, 0x85, 0xa6, 0x16, 0x8f, 0x2b, 0x60, 0x63, 0xe3, 0x03, 0x6a, 0x4f, 0x35, 0xe6, 0x6d, 0x28, 0x72, 0xaf, 0x3d, 0x97, 0xe5, 0xbe, 0xba, 0x23, 0x96, 0x98, 0xd8, 0x8e, 0x13, 0xbd, 0x03, 0x6e, 0xf0, 0x8c, 0xf0, 0xe8, 0x3a, 0x41, 0x66, 0x4c, 0x3d, 0x0d, 0x21, 0x86, 0x3c, 0x24, 0x12, 0x9a, 0x6a, 0x9b, 0x27, 0xb8, 0xe9, 0x6c, 0x80, 0x29, 0xec, 0x67, 0x3e, 0x07, 0xaf, 0x72, 0x46, 0xab, 0x77, 0xa5, 0x6c, 0x21, 0xca, 0x20, 0x8d, 0xf4, 0xb1, 0x81, 0x8d, 0xed, 0xa9, 0x06, 0xb5, 0x53, 0xb2, 0xb2, 0x3a, 0x37, 0xb5, 0xa0, 0x5e, 0x29, 0x82, 0x5e, 0xbe, 0xb4, 0x7f, 0x53, 0x98, 0x6c, 0x2b, 0xf2, 0x6d, 0x73, 0x1a, 0x5b, 0x73, 0x1f, 0xff, 0xc3, 0x53, 0x25, 0x8c }; static const uint8_t ac_dsa_vect79_priv_val[] = { /* X */ 0x6e, 0x6b, 0xae, 0x97, 0xe3, 0xb3, 0x7a, 0x40, 0x2e, 0xca, 0x05, 0x0d, 0x66, 0x6b, 0x64, 0x83, 0xcf, 0x7d, 0x70, 0x04, 0x19, 0xc5, 0xab, 0x1e, 0xed, 0x1b, 0xed, 0x05 }; static const uint8_t ac_dsa_vect79_pub_val[] = { /* Y */ 0x59, 0xa1, 0x4e, 0x36, 0xc9, 0xed, 0xed, 0xdc, 0xe8, 0x00, 0x0f, 0x04, 0xc6, 0xf7, 0x40, 0x1a, 0xd9, 0x87, 0xf1, 0xc7, 0xa5, 0xa0, 0x70, 0xb8, 0x0e, 0x0a, 0xae, 0xd7, 0x75, 0x1d, 0x1d, 0x50, 0xd9, 0x9a, 0x58, 0x0c, 0xf2, 0x05, 0xdb, 0xcc, 0x37, 0x97, 0xa0, 0xa0, 0x40, 0x6b, 0x04, 0x77, 0x6d, 0x80, 0xf2, 0xf2, 0xdf, 0x41, 0x8c, 0xee, 0x24, 0x9b, 0x98, 0x67, 0x2d, 0xe7, 0xe6, 0x1c, 0xda, 0x85, 0xcf, 0xbe, 0x90, 0x36, 0x90, 0xe5, 0x46, 0x42, 0xdc, 0x2a, 0x12, 0xa9, 0x0e, 0xcf, 0x88, 0xc5, 0x92, 0x56, 0xa4, 0xd7, 0x7c, 0x4c, 0x0c, 0xb5, 0x4e, 0x13, 0xfa, 0x36, 0x47, 0xb1, 0x14, 0x31, 0xe1, 0x73, 0x4f, 0x3c, 0xee, 0xea, 0x04, 0xfb, 0xf3, 0x45, 0x96, 0x65, 0xe9, 0x99, 0xfc, 0x0f, 0x7a, 0x75, 0x46, 0x83, 0xe4, 0x8c, 0xef, 0xeb, 0x4a, 0x95, 0xfe, 0x47, 0x39, 0x11, 0xff, 0xe0, 0xde, 0x0f, 0x73, 0x89, 0x60, 0x75, 0x3d, 0xac, 0x33, 0x66, 0x6c, 0x53, 0xed, 0x28, 0x93, 0xbc, 0x63, 0xdd, 0x41, 0x62, 0xd7, 0xa6, 0x32, 0x87, 0x39, 0xa2, 0x52, 0xcd, 0xae, 0xa7, 0xa9, 0x48, 0xc9, 0x7d, 0x02, 0x41, 0x53, 0xb5, 0x5d, 0x14, 0xfd, 0x53, 0x04, 0xe3, 0x57, 0x50, 0x48, 0x41, 0x88, 0x08, 0xa9, 0x52, 0x67, 0x5f, 0xaf, 0xb9, 0x5f, 0xad, 0x84, 0xb1, 0x15, 0x6b, 0x24, 0xe9, 0x8e, 0x04, 0x8a, 0xa7, 0x77, 0xa7, 0x45, 0x32, 0x4e, 0xc1, 0x3b, 0xa3, 0x78, 0xe8, 0x3b, 0x23, 0x84, 0xbc, 0x2e, 0x96, 0xc6, 0x09, 0x5a, 0xa7, 0x86, 0xbd, 0x28, 0xfc, 0x3b, 0xe6, 0xbf, 0xa4, 0xdb, 0x0c, 0x3c, 0x44, 0xfe, 0xd4, 0xc3, 0x51, 0xbd, 0x88, 0xa1, 0x9e, 0x17, 0x9a, 0x6a, 0x7b, 0xc1, 0x2f, 0xc0, 0x14, 0xf1, 0x7d, 0xe4, 0x6f, 0xd1, 0x2e, 0xf1, 0x28, 0x7f, 0x72 }; /* K = 08544a6237ac967e5d11f2eccc6618399818b891df7a04d08cbc5e74 */ static const uint8_t ac_dsa_vect79_out[] = { /* R */ 0x49, 0xea, 0x82, 0x71, 0x3a, 0xaa, 0xd7, 0x99, 0xe2, 0x63, 0x80, 0x9e, 0x16, 0x1b, 0x06, 0x55, 0xf1, 0xe7, 0x43, 0x23, 0xa0, 0x60, 0x41, 0x83, 0x6f, 0x67, 0x69, 0x80, /* S */ 0x76, 0xb3, 0xf6, 0xc1, 0x64, 0x7f, 0x8d, 0x17, 0x71, 0x8f, 0xfb, 0x92, 0xd6, 0xe1, 0x42, 0x46, 0x06, 0xba, 0x97, 0x24, 0xe5, 0x29, 0x0d, 0xaa, 0x4e, 0xe9, 0x5e, 0xfb }; #define ac_dsa_vect80_prime ac_dsa_vect76_prime #define ac_dsa_vect80_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect80_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect80_ptx[] = { /* Msg */ 0x66, 0x76, 0xa3, 0xa1, 0x31, 0xce, 0xf7, 0xe5, 0x64, 0x7e, 0xa7, 0x59, 0x0d, 0xa3, 0xc7, 0x04, 0xa0, 0xf5, 0xdc, 0x3f, 0x37, 0xf2, 0x69, 0x13, 0xa7, 0x0d, 0x43, 0x06, 0x09, 0xcc, 0x24, 0x97, 0xc4, 0x5e, 0x68, 0xb7, 0xbd, 0x6f, 0x58, 0x93, 0xdb, 0xa2, 0x62, 0x87, 0xff, 0x0d, 0x24, 0x0b, 0xab, 0x8a, 0x07, 0x61, 0x93, 0x6a, 0xa7, 0x09, 0xa2, 0x16, 0x2e, 0xbf, 0x1c, 0x20, 0xa6, 0x13, 0x6a, 0x74, 0x83, 0x52, 0xdc, 0x39, 0xba, 0x44, 0x03, 0xcb, 0xe4, 0xb0, 0xa5, 0xa5, 0x4a, 0x72, 0x92, 0x86, 0xdd, 0x19, 0x3e, 0xac, 0x1a, 0x2e, 0x6b, 0xdc, 0x15, 0x0f, 0xb0, 0x63, 0x69, 0xbe, 0x44, 0x43, 0xa6, 0x0e, 0x75, 0xe5, 0x33, 0x00, 0x83, 0xff, 0x00, 0x9e, 0xab, 0xb0, 0x52, 0x32, 0xc5, 0x23, 0x68, 0xa2, 0x6f, 0xd2, 0x37, 0xc7, 0xc3, 0x18, 0x5c, 0x1c, 0x7e, 0x7d, 0x59, 0x55 }; static const uint8_t ac_dsa_vect80_priv_val[] = { /* X */ 0x18, 0xfa, 0xf5, 0x83, 0x21, 0x5b, 0xc4, 0xfa, 0x71, 0x79, 0x1f, 0x6f, 0x34, 0xe6, 0x82, 0xab, 0x35, 0x29, 0xaa, 0x9a, 0x1a, 0x71, 0xc1, 0xfc, 0x7b, 0xd4, 0x56, 0xa8 }; static const uint8_t ac_dsa_vect80_pub_val[] = { /* Y */ 0xdd, 0xcd, 0xf4, 0xc6, 0x16, 0xfd, 0x6e, 0x40, 0x16, 0x09, 0x9f, 0xb3, 0x4e, 0xbc, 0x4e, 0xc5, 0x07, 0x29, 0x07, 0x62, 0xc5, 0xee, 0x68, 0x76, 0xf1, 0x0c, 0x6a, 0x2d, 0xed, 0xec, 0x97, 0xba, 0x86, 0xa6, 0x06, 0x3a, 0xa8, 0xff, 0x06, 0x9f, 0x3f, 0x3d, 0xb4, 0x0c, 0x94, 0x64, 0xaf, 0xb1, 0xba, 0x7e, 0xd6, 0x91, 0x77, 0x3a, 0xfd, 0x60, 0x83, 0x58, 0x6b, 0x14, 0xe3, 0x56, 0x94, 0xa9, 0xdd, 0xc3, 0x76, 0xdd, 0xc3, 0x9d, 0xac, 0x57, 0x13, 0x2a, 0x05, 0xbf, 0x88, 0xa0, 0xa6, 0x08, 0x5c, 0x72, 0xa8, 0x0a, 0x21, 0xc1, 0x3e, 0x59, 0x0c, 0x68, 0xc4, 0xe9, 0x8e, 0xed, 0xb6, 0x7f, 0x1e, 0x16, 0xc8, 0xcc, 0x7e, 0x9e, 0x25, 0xff, 0x37, 0xc8, 0x7e, 0xe3, 0xbe, 0x9a, 0xdf, 0x1a, 0xd0, 0xb8, 0x38, 0x65, 0x1b, 0x0f, 0xdd, 0xf8, 0xd0, 0x26, 0x96, 0x9d, 0x4a, 0x16, 0xbb, 0xb8, 0x28, 0xfc, 0xaf, 0x00, 0xef, 0xa3, 0x06, 0xfc, 0xed, 0xd5, 0xae, 0x19, 0xca, 0x1a, 0x1a, 0xbf, 0x44, 0xa2, 0xbd, 0xf6, 0xf9, 0x94, 0x12, 0x3c, 0xe9, 0x41, 0xfd, 0x35, 0x23, 0xbc, 0x13, 0x35, 0xf5, 0x1f, 0xa8, 0xdc, 0x5d, 0x52, 0x53, 0x58, 0xbd, 0xdf, 0x0c, 0x55, 0xfe, 0x2c, 0xe0, 0x7c, 0xe9, 0x74, 0x40, 0x8d, 0x90, 0x90, 0x48, 0x88, 0x37, 0x97, 0x6f, 0x16, 0x84, 0x5e, 0xb7, 0xa8, 0x2d, 0x04, 0xc4, 0x3a, 0x70, 0x4b, 0xe2, 0xde, 0xe1, 0xbe, 0x2c, 0x86, 0x83, 0xb2, 0xd9, 0xe5, 0xc4, 0x4f, 0x18, 0x33, 0xf5, 0xc4, 0x6c, 0x65, 0xb6, 0xe6, 0x2c, 0x2a, 0x72, 0x04, 0x21, 0xbb, 0x35, 0x84, 0x3f, 0xea, 0xd7, 0xb9, 0xe0, 0xb3, 0xfc, 0x04, 0xc6, 0x46, 0xbe, 0x39, 0xe8, 0x90, 0xe3, 0x70, 0xb9, 0x82, 0xbd, 0xe9, 0x1f, 0x2f, 0xc1, 0x84, 0x42, 0xb6, 0x50, 0xae, 0x60, 0x2f }; /* K = 11b25b09408bb5dd784ad70264e585c978dc02cc1df8bb95a28aedfe */ static const uint8_t ac_dsa_vect80_out[] = { /* R */ 0x16, 0x58, 0xa7, 0xef, 0x2f, 0x44, 0x4b, 0x01, 0x4a, 0x18, 0x85, 0xb1, 0xed, 0xa8, 0xda, 0xd3, 0x60, 0x5b, 0x96, 0xc3, 0x94, 0x8e, 0x54, 0x4e, 0x4c, 0x88, 0x25, 0xeb, /* S */ 0x60, 0x21, 0x50, 0xf6, 0x7b, 0x19, 0xa5, 0xe3, 0xe3, 0x9f, 0xc5, 0x3a, 0xbe, 0xa0, 0x2d, 0xd8, 0xf3, 0xb3, 0x0d, 0x25, 0xc0, 0xb4, 0xea, 0x0b, 0xcd, 0xdc, 0xbd, 0xb0 }; #define ac_dsa_vect81_prime ac_dsa_vect76_prime #define ac_dsa_vect81_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect81_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect81_ptx[] = { /* Msg */ 0x07, 0x1f, 0x06, 0xa1, 0x15, 0x88, 0x58, 0x4d, 0xa5, 0x57, 0x60, 0x13, 0x02, 0x9b, 0x5a, 0x14, 0x71, 0x25, 0x81, 0xa4, 0x84, 0x08, 0xbb, 0xfd, 0xbe, 0x34, 0xe1, 0x75, 0x68, 0xc0, 0xa0, 0xe4, 0xd1, 0x2c, 0x1e, 0x9c, 0x3f, 0xb2, 0x27, 0x10, 0x14, 0x40, 0xdd, 0x8d, 0xcd, 0xc4, 0x15, 0xe3, 0xb4, 0x9f, 0x68, 0xa2, 0x6a, 0x0e, 0xc7, 0x61, 0x2a, 0x10, 0xbb, 0xc6, 0x4d, 0xdb, 0x8f, 0x7e, 0xc9, 0xe9, 0x75, 0x0d, 0x1e, 0xfc, 0x9c, 0x05, 0x74, 0x70, 0x08, 0x75, 0xfc, 0xf5, 0x2d, 0x00, 0xd3, 0x7b, 0x9d, 0xd7, 0x44, 0xca, 0x84, 0x1e, 0xcf, 0x75, 0x66, 0x97, 0x7c, 0x1b, 0x57, 0x99, 0xdc, 0x41, 0x05, 0xd0, 0xb7, 0xa9, 0x25, 0x51, 0xc5, 0xb3, 0x3a, 0x50, 0x13, 0x3f, 0xa3, 0x00, 0xa5, 0x90, 0x8b, 0x18, 0xf4, 0xc0, 0x19, 0x36, 0x34, 0x7c, 0x60, 0x49, 0x44, 0x7a, 0xbf, 0x29 }; static const uint8_t ac_dsa_vect81_priv_val[] = { /* X */ 0x58, 0x88, 0x2f, 0x1a, 0x41, 0xe0, 0x8b, 0xf6, 0xc8, 0xda, 0xd0, 0x91, 0xa2, 0x99, 0xaf, 0x0f, 0xbb, 0xd1, 0x45, 0x15, 0xc1, 0x55, 0x09, 0x06, 0xff, 0x77, 0xf6, 0xae }; static const uint8_t ac_dsa_vect81_pub_val[] = { /* Y */ 0xb1, 0xf4, 0xdf, 0xc9, 0xc8, 0x34, 0x55, 0xf2, 0x79, 0xa3, 0xe7, 0x52, 0x27, 0x34, 0xd6, 0xb1, 0x20, 0xab, 0x8e, 0xd3, 0x6c, 0xcb, 0xa7, 0x85, 0x4e, 0x26, 0x50, 0x4c, 0x70, 0x79, 0x83, 0xd2, 0xa9, 0xc0, 0x75, 0x04, 0x57, 0x23, 0xf4, 0x41, 0xab, 0xfc, 0x7b, 0x36, 0xfb, 0xb5, 0xd4, 0xbf, 0x04, 0x47, 0x67, 0x8f, 0x5b, 0x70, 0x9c, 0xa5, 0x12, 0x9b, 0x74, 0x88, 0x8a, 0x07, 0x23, 0xe9, 0x05, 0x76, 0x98, 0x36, 0xb9, 0xda, 0xc1, 0x30, 0x3f, 0x1b, 0x9a, 0xce, 0x26, 0x55, 0x43, 0x42, 0xb6, 0xe6, 0xd0, 0x32, 0xac, 0x4b, 0x47, 0x7e, 0x01, 0x1a, 0x4d, 0xdd, 0x3e, 0x29, 0x78, 0xfc, 0x0c, 0x44, 0x9c, 0x64, 0xa6, 0x6e, 0xfe, 0x7d, 0x4e, 0x22, 0xe5, 0xa5, 0xfa, 0x2b, 0x01, 0xbb, 0x17, 0xfc, 0xdb, 0xec, 0x71, 0x85, 0xdd, 0x41, 0x15, 0xa1, 0x9d, 0x97, 0x2f, 0xb0, 0x1a, 0x06, 0xb3, 0x3b, 0xb1, 0x8b, 0x93, 0x49, 0xff, 0x95, 0xfb, 0x10, 0xdb, 0xbf, 0x2d, 0xcf, 0x89, 0x9b, 0x18, 0x17, 0xd3, 0x0a, 0xd4, 0x8a, 0x99, 0xa6, 0x14, 0xd5, 0x77, 0x70, 0xba, 0x76, 0x4a, 0x11, 0xa8, 0x4a, 0x8d, 0xb3, 0xaf, 0x30, 0x41, 0xec, 0x36, 0x26, 0x14, 0xf8, 0x07, 0x19, 0x6e, 0xa3, 0xb9, 0x0d, 0x05, 0xb0, 0x14, 0x05, 0x4f, 0xf4, 0xe1, 0x85, 0x24, 0xc7, 0x95, 0xe6, 0x72, 0x2c, 0x0f, 0xa1, 0xf6, 0xd1, 0x20, 0x5d, 0x53, 0x2d, 0x94, 0x34, 0x76, 0x33, 0xeb, 0x13, 0x2e, 0x6c, 0xbb, 0x59, 0x6d, 0x8b, 0x34, 0x1e, 0x65, 0xf2, 0xb2, 0xf9, 0x55, 0x87, 0x2e, 0xbd, 0x4d, 0x30, 0x06, 0xc4, 0x5a, 0xc3, 0x3d, 0xa1, 0x11, 0x67, 0xfa, 0x46, 0x86, 0x9c, 0x7e, 0xe7, 0x0e, 0x9c, 0xf1, 0x47, 0xb2, 0x33, 0x68, 0xb3, 0xaa, 0xcd, 0x9c, 0x18, 0x80, 0xb0, 0x9a, 0xc8, 0x6a, 0x8d }; /* K = 5ff04e754fe3246f35b3400b87a450192a7bfd9b3c03f3ece93449f4 */ static const uint8_t ac_dsa_vect81_out[] = { /* R */ 0x07, 0xbd, 0x3f, 0x67, 0x18, 0xe3, 0x98, 0x39, 0x30, 0x4e, 0xf5, 0x4a, 0xc4, 0x8b, 0xda, 0x8d, 0x9a, 0xc8, 0xee, 0x05, 0x1a, 0x49, 0xbb, 0x91, 0x31, 0xdc, 0xc9, 0x18, /* S */ 0x64, 0x96, 0xb2, 0x46, 0x9b, 0xfb, 0x58, 0x45, 0x48, 0x50, 0x04, 0x70, 0x2b, 0x0c, 0x79, 0x94, 0x1b, 0xc3, 0xc3, 0x00, 0x70, 0x07, 0xba, 0x16, 0x9d, 0x83, 0x07, 0xce }; #define ac_dsa_vect82_prime ac_dsa_vect76_prime #define ac_dsa_vect82_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect82_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect82_ptx[] = { /* Msg */ 0x71, 0x27, 0x9b, 0x84, 0x8c, 0x00, 0x20, 0x8f, 0xb4, 0xe4, 0xd8, 0x79, 0x79, 0xcf, 0x97, 0x3b, 0x32, 0x1b, 0x20, 0xd0, 0x98, 0xde, 0xa9, 0x12, 0xa3, 0xb4, 0xb5, 0x78, 0x9c, 0xdd, 0x3b, 0x7c, 0xcd, 0x8f, 0x39, 0x93, 0xa9, 0xc9, 0x2c, 0x34, 0xb7, 0x0e, 0x9b, 0x0b, 0xd5, 0x75, 0x20, 0xdb, 0x56, 0xf2, 0xde, 0xd3, 0xa6, 0x12, 0xa6, 0x16, 0x9d, 0x2a, 0x1c, 0xc6, 0x35, 0x09, 0x05, 0xed, 0x02, 0x02, 0xa2, 0x5c, 0x11, 0x3b, 0x7b, 0xf8, 0xfa, 0xec, 0x4e, 0xdd, 0x2e, 0xa3, 0xb8, 0xf4, 0x47, 0xca, 0x75, 0xd1, 0x5a, 0x71, 0x2b, 0x4b, 0x43, 0x94, 0xc2, 0x2d, 0xe0, 0xc2, 0x55, 0x4b, 0x9a, 0xa0, 0x7e, 0xc8, 0x46, 0x67, 0x27, 0xe7, 0xef, 0x6f, 0x1f, 0x04, 0xac, 0x45, 0x68, 0xd7, 0x72, 0x6d, 0x9d, 0x77, 0xf5, 0x0a, 0x2f, 0xd5, 0x51, 0xac, 0x29, 0xe4, 0x2f, 0x8d, 0xda, 0x23 }; static const uint8_t ac_dsa_vect82_priv_val[] = { /* X */ 0x29, 0x2b, 0x16, 0x66, 0xd0, 0xb1, 0xfb, 0x36, 0x1d, 0xa2, 0x68, 0xde, 0x72, 0x5b, 0x11, 0x31, 0x00, 0x00, 0x70, 0x59, 0x64, 0x70, 0x5e, 0xe9, 0x75, 0xd4, 0xeb, 0xae }; static const uint8_t ac_dsa_vect82_pub_val[] = { /* Y */ 0x7c, 0x8d, 0x63, 0xb9, 0xd5, 0x5f, 0x59, 0x29, 0x0b, 0x02, 0xa0, 0xfc, 0xea, 0x6d, 0x98, 0xc6, 0xc5, 0x45, 0xe2, 0xc0, 0xd4, 0xb1, 0x09, 0xa0, 0x69, 0x69, 0x4d, 0x80, 0xcb, 0x03, 0x4d, 0xbd, 0xbd, 0x9e, 0xdb, 0x6b, 0x4d, 0x9b, 0x15, 0x28, 0x49, 0xca, 0xbd, 0x65, 0x5f, 0xc7, 0x70, 0x71, 0x64, 0x4b, 0xbf, 0x4a, 0x0c, 0x7e, 0xa4, 0xed, 0xfe, 0x86, 0x4a, 0x43, 0xc4, 0x4f, 0xde, 0xd1, 0x63, 0xdd, 0x89, 0x9c, 0x21, 0xcc, 0x2f, 0x9c, 0x33, 0xcb, 0xf5, 0x6e, 0x8c, 0xaf, 0x84, 0x39, 0x4b, 0x24, 0xf8, 0xc1, 0x4e, 0x84, 0xf2, 0x2c, 0x3b, 0x0f, 0x74, 0x71, 0x29, 0xd9, 0xae, 0xf4, 0x1b, 0x6f, 0x1b, 0x1f, 0xa8, 0xff, 0x5a, 0x8f, 0x68, 0x0b, 0x49, 0x65, 0x95, 0xdb, 0xc7, 0xb7, 0xb6, 0x3a, 0x77, 0x90, 0xe3, 0x62, 0x87, 0x47, 0x01, 0x1b, 0x32, 0x77, 0xb0, 0x6e, 0x80, 0xde, 0x0b, 0x67, 0x94, 0x2f, 0x60, 0x2e, 0xad, 0xa6, 0x0b, 0x51, 0x8f, 0x28, 0x2c, 0xde, 0x69, 0xcd, 0x71, 0x7a, 0x5f, 0x6a, 0x19, 0xc8, 0xe1, 0x69, 0x44, 0x9e, 0x0d, 0x32, 0xa9, 0xd8, 0xce, 0x8f, 0x09, 0xa5, 0xad, 0xa2, 0x3c, 0x12, 0xa0, 0x2d, 0xcc, 0xfc, 0xdc, 0x02, 0x90, 0xa8, 0xbd, 0x46, 0xe8, 0xb7, 0xeb, 0x39, 0x74, 0x94, 0xf3, 0x2a, 0x0e, 0xcb, 0x49, 0xfa, 0x5a, 0x8e, 0xdd, 0x41, 0x84, 0x5e, 0xb4, 0x17, 0xfb, 0xb8, 0xcd, 0xb8, 0x9a, 0x9f, 0x18, 0xb9, 0xad, 0x1b, 0x41, 0xdd, 0x41, 0x22, 0xab, 0x34, 0x9b, 0xb3, 0xc4, 0x49, 0x51, 0xe4, 0xf9, 0x60, 0x43, 0x60, 0xfc, 0xb1, 0xb7, 0x95, 0x31, 0x15, 0x45, 0xa6, 0x1c, 0xfd, 0x67, 0xc2, 0x87, 0xa7, 0xc9, 0xd4, 0xd3, 0x53, 0x02, 0x14, 0x98, 0x8e, 0x76, 0x16, 0x97, 0x9e, 0x2c, 0xe9, 0x07, 0xd5, 0xc7, 0xf3, 0xe9, 0xad }; /* K = 6b1b752bb180d8787c71505be758c0ce41fef428ac10591502c9a04b */ static const uint8_t ac_dsa_vect82_out[] = { /* R */ 0x4c, 0xf5, 0xc2, 0x6c, 0x4c, 0x2c, 0xd4, 0x8c, 0x05, 0x50, 0x8e, 0x52, 0xd7, 0x43, 0xef, 0x48, 0x68, 0x5f, 0x63, 0x24, 0x14, 0x1a, 0xde, 0xf2, 0x3d, 0x79, 0xa3, 0x96, /* S */ 0x59, 0xf6, 0x47, 0x55, 0xa0, 0x4c, 0x90, 0xa1, 0x4b, 0x18, 0x7a, 0xe1, 0x42, 0xec, 0x48, 0x3c, 0x46, 0x00, 0xb6, 0xfb, 0xbe, 0x19, 0xf0, 0x4a, 0x49, 0xe9, 0xff, 0x88 }; #define ac_dsa_vect83_prime ac_dsa_vect76_prime #define ac_dsa_vect83_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect83_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect83_ptx[] = { /* Msg */ 0x3e, 0xa0, 0x3e, 0x9b, 0x00, 0x5e, 0xc1, 0x95, 0x4f, 0xee, 0x0c, 0x73, 0x32, 0x6d, 0x8a, 0xca, 0x1a, 0x4f, 0x63, 0x64, 0x8e, 0xb4, 0xcc, 0x59, 0x26, 0x55, 0x28, 0xee, 0x8e, 0x96, 0x9e, 0xce, 0xfe, 0xcf, 0x27, 0x97, 0xa0, 0x14, 0x4c, 0x83, 0x36, 0x50, 0x0e, 0x26, 0xa1, 0xc7, 0xcb, 0x1a, 0x64, 0x2b, 0x1e, 0xc6, 0x52, 0x01, 0x41, 0x6e, 0x5d, 0xeb, 0x35, 0x52, 0x01, 0xde, 0x2b, 0xda, 0x69, 0x5d, 0x1b, 0xeb, 0xa8, 0xde, 0xe6, 0x27, 0x72, 0xf4, 0xd5, 0x91, 0x4a, 0x24, 0x5b, 0xe9, 0xff, 0xec, 0xf3, 0x94, 0x08, 0xae, 0x7b, 0xf1, 0xbf, 0xf7, 0xc2, 0x45, 0x10, 0x29, 0xc4, 0xba, 0x0c, 0x52, 0x25, 0x16, 0xe8, 0x99, 0x55, 0xad, 0x3b, 0xd6, 0x99, 0xcc, 0xe9, 0x4c, 0x74, 0x40, 0x81, 0xa9, 0xf2, 0xd6, 0x0f, 0x5c, 0x51, 0x27, 0xec, 0x72, 0x2f, 0xa5, 0x73, 0x16, 0xce, 0xde }; static const uint8_t ac_dsa_vect83_priv_val[] = { /* X */ 0x08, 0x7e, 0x43, 0x2b, 0x1c, 0x29, 0xc0, 0x05, 0x08, 0xd7, 0x68, 0xfd, 0xa7, 0xc4, 0xb2, 0x79, 0xfc, 0x08, 0x8c, 0x48, 0x43, 0x9f, 0x09, 0x98, 0x0b, 0xfa, 0x15, 0x9c }; static const uint8_t ac_dsa_vect83_pub_val[] = { /* Y */ 0x12, 0x39, 0xc3, 0x47, 0xbe, 0x4c, 0xe6, 0xf1, 0xda, 0xa7, 0x21, 0xfb, 0xbb, 0x14, 0x1e, 0xe6, 0xe2, 0xf7, 0xc7, 0x30, 0x98, 0xef, 0xfe, 0x8e, 0x71, 0xbe, 0xb9, 0xf1, 0xab, 0x72, 0xd1, 0xb5, 0xbd, 0x3e, 0x78, 0xdf, 0x77, 0x0f, 0x7f, 0xbd, 0x4b, 0x3a, 0x95, 0x05, 0x70, 0x2d, 0xac, 0xf1, 0x02, 0xee, 0xb8, 0xa1, 0x6f, 0x11, 0xb4, 0xf8, 0x09, 0xca, 0x00, 0x2a, 0xe3, 0x77, 0x4a, 0xc0, 0x40, 0x7e, 0x25, 0x72, 0xae, 0x3e, 0xe1, 0x71, 0x64, 0x58, 0xe5, 0xf4, 0x5c, 0x49, 0x3f, 0x4b, 0x92, 0x11, 0x44, 0xe8, 0x58, 0xd8, 0x7d, 0x63, 0x77, 0x3d, 0x02, 0x37, 0x45, 0x51, 0x2b, 0x0c, 0xc0, 0x2b, 0x31, 0xeb, 0xfe, 0x5c, 0x24, 0xad, 0x37, 0xef, 0xe5, 0x39, 0xcd, 0x39, 0x3c, 0xfc, 0x2b, 0x95, 0x1f, 0xe1, 0xb6, 0xff, 0xad, 0x2a, 0x28, 0x24, 0xc0, 0xf5, 0x4b, 0xd7, 0x76, 0xaa, 0x0a, 0xfc, 0xf9, 0xc1, 0xef, 0x42, 0x7a, 0xfc, 0x6c, 0xf4, 0xc4, 0xb1, 0x7f, 0x66, 0x35, 0x5d, 0x68, 0x57, 0x41, 0x32, 0xe1, 0xd8, 0x8a, 0xde, 0x37, 0x22, 0x51, 0x3e, 0x39, 0x5f, 0xc6, 0x2d, 0x65, 0xe9, 0x48, 0x51, 0x57, 0xc8, 0x20, 0x64, 0xc9, 0x08, 0x03, 0xa1, 0xa9, 0x1f, 0x9e, 0x6b, 0x10, 0xaf, 0x2f, 0x80, 0x69, 0x9d, 0x91, 0x7d, 0xaa, 0x6b, 0x81, 0x41, 0x5e, 0x50, 0x81, 0x93, 0x15, 0x2b, 0x4c, 0xcd, 0xed, 0x59, 0x3d, 0xde, 0x35, 0xf6, 0x45, 0xe5, 0x4b, 0x7c, 0xba, 0x44, 0x57, 0x75, 0xeb, 0x16, 0xc5, 0xe1, 0x90, 0x73, 0xf0, 0xa9, 0xeb, 0x53, 0x69, 0xbf, 0x25, 0x13, 0xb9, 0x21, 0x58, 0x16, 0x5b, 0x94, 0xde, 0xa5, 0x11, 0xe9, 0x38, 0xfb, 0x6a, 0x87, 0x98, 0xe0, 0x40, 0xa0, 0x5d, 0xa9, 0x4f, 0xdb, 0x5a, 0x4d, 0x44, 0xbe, 0xe9, 0x43, 0xb9, 0x5b, 0x39, 0xd9 }; /* K = 0a8a45ce2412cb84e4e0174d7ecd2eb5b37ad0a53b474fa9bcf56d9a */ static const uint8_t ac_dsa_vect83_out[] = { /* R */ 0x5c, 0xa2, 0xe9, 0x71, 0xf2, 0x1b, 0x70, 0x12, 0x7a, 0x70, 0xc6, 0x55, 0xeb, 0x87, 0xe2, 0x0b, 0x25, 0x17, 0x97, 0x62, 0x28, 0xa2, 0xc4, 0xe6, 0x48, 0xd5, 0x49, 0xb2, /* S */ 0x44, 0x03, 0x6b, 0x34, 0x66, 0x71, 0x36, 0xa5, 0x14, 0x0d, 0xd1, 0x94, 0x8d, 0xdc, 0x2f, 0xb2, 0xbf, 0x67, 0x9e, 0xfe, 0xe2, 0x1f, 0x29, 0xb7, 0xad, 0x87, 0xaf, 0x7c }; #define ac_dsa_vect84_prime ac_dsa_vect76_prime #define ac_dsa_vect84_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect84_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect84_ptx[] = { /* Msg */ 0xa3, 0xf7, 0x03, 0x39, 0x58, 0xc5, 0xb7, 0x79, 0x07, 0x2b, 0x05, 0x48, 0xba, 0xed, 0xf4, 0xf8, 0x8d, 0x14, 0xf1, 0x1a, 0x6d, 0xd6, 0xee, 0xc0, 0x18, 0x1b, 0x39, 0x99, 0x43, 0xd7, 0x24, 0x6a, 0x45, 0xd5, 0x0c, 0x4f, 0x7b, 0x52, 0x95, 0xda, 0xe4, 0xcd, 0x3b, 0xa7, 0xc4, 0xc1, 0x81, 0xfa, 0x20, 0x15, 0x81, 0xad, 0x5c, 0x4b, 0x38, 0x79, 0x3b, 0xcf, 0x45, 0x4f, 0x17, 0x68, 0x68, 0xe9, 0xcb, 0xe0, 0x99, 0x7a, 0xa4, 0x19, 0x87, 0xb1, 0xaa, 0x3d, 0x5d, 0xdc, 0x04, 0x6b, 0xe7, 0xb0, 0x22, 0xfb, 0x51, 0x30, 0x59, 0x4c, 0x8a, 0x9d, 0xf0, 0x3c, 0xfa, 0xa7, 0xac, 0xef, 0x81, 0x7e, 0x3b, 0xa5, 0xe1, 0x92, 0xc6, 0x9a, 0x12, 0x02, 0x99, 0x49, 0x2b, 0xaa, 0x52, 0xa9, 0xbe, 0x83, 0xb8, 0xe8, 0x71, 0xab, 0xe3, 0x18, 0xb4, 0xa1, 0xf5, 0x88, 0xf9, 0xed, 0xcd, 0xda, 0xfc, 0x17 }; static const uint8_t ac_dsa_vect84_priv_val[] = { /* X */ 0x58, 0x31, 0xab, 0xf9, 0x84, 0x3e, 0xee, 0x92, 0x89, 0x44, 0xe3, 0xdb, 0xb7, 0x59, 0xdc, 0x72, 0x24, 0x91, 0x0e, 0x1a, 0xda, 0xb8, 0x27, 0xa0, 0x4f, 0x59, 0x6e, 0x3c }; static const uint8_t ac_dsa_vect84_pub_val[] = { /* Y */ 0x62, 0xde, 0x24, 0x65, 0xed, 0xbc, 0x1e, 0xf8, 0x45, 0x8b, 0xea, 0xa2, 0x05, 0xf4, 0x5f, 0x9d, 0xc0, 0xfc, 0x3d, 0xb7, 0x7b, 0xae, 0x0f, 0x2b, 0x13, 0xbe, 0xf6, 0xd8, 0x03, 0xdb, 0x68, 0x9b, 0x8f, 0x5c, 0x74, 0x7e, 0x3a, 0x04, 0x1c, 0x08, 0xd3, 0x26, 0xcd, 0x7e, 0x18, 0x91, 0x67, 0x5b, 0x02, 0x2a, 0x9d, 0xa3, 0xbb, 0xae, 0xf8, 0x00, 0x77, 0x84, 0xc5, 0x6c, 0x86, 0xc4, 0x17, 0x6c, 0x0a, 0xc8, 0x76, 0x35, 0x1d, 0x10, 0x62, 0xd9, 0xc2, 0x70, 0xd5, 0x48, 0xc8, 0xf4, 0xec, 0x39, 0xa4, 0x55, 0x6c, 0x66, 0xe7, 0x6e, 0x50, 0x7f, 0xc5, 0xf2, 0x54, 0x0a, 0xbf, 0xa7, 0x7c, 0x17, 0x8a, 0x9b, 0xae, 0x15, 0x34, 0x35, 0xa7, 0xca, 0xaa, 0x00, 0x8f, 0x36, 0xb9, 0xca, 0xb2, 0x13, 0xec, 0xf5, 0xe1, 0x9a, 0x0f, 0x7b, 0x1e, 0x62, 0xfb, 0x9a, 0x9c, 0x82, 0x23, 0xbb, 0x68, 0x9e, 0x85, 0x47, 0xb5, 0xec, 0x91, 0x5b, 0x04, 0xa8, 0x5b, 0x2f, 0x53, 0xcc, 0xc7, 0x92, 0xdc, 0x0a, 0x7a, 0x41, 0xd1, 0x72, 0xe6, 0xf5, 0x9f, 0x5b, 0x5e, 0x7c, 0x44, 0x03, 0x50, 0xac, 0x6a, 0x72, 0xca, 0x9c, 0x06, 0x56, 0x2d, 0x4c, 0xf8, 0xc6, 0x0e, 0x70, 0x87, 0x0a, 0x97, 0x83, 0x12, 0xe1, 0x9b, 0xf5, 0x4c, 0x24, 0x81, 0xc5, 0x82, 0x29, 0x6b, 0x64, 0x55, 0x4b, 0xd8, 0x71, 0xac, 0xcc, 0x8b, 0x25, 0x1a, 0x76, 0x17, 0xca, 0x5e, 0x5d, 0x2a, 0xad, 0xc1, 0x9d, 0x48, 0x4d, 0x76, 0xbc, 0x38, 0x26, 0x84, 0x1f, 0x88, 0xfa, 0xd1, 0x49, 0x1d, 0x80, 0x67, 0x92, 0x43, 0xe1, 0x52, 0x71, 0x97, 0xd0, 0x2a, 0x40, 0x63, 0x48, 0xb2, 0x47, 0xae, 0x78, 0x61, 0x08, 0xe5, 0x40, 0x09, 0x75, 0xa3, 0x8f, 0x39, 0x61, 0x75, 0x8a, 0xdc, 0x07, 0xce, 0x74, 0x0d, 0x8d, 0x44, 0x2f, 0x15, 0x2f }; /* K = 36b3d1d36d1a8c41442b6fffd46bcd7977a306b53dcf7fa590538194 */ static const uint8_t ac_dsa_vect84_out[] = { /* R */ 0x18, 0x23, 0xf0, 0xa8, 0x07, 0xfb, 0x9e, 0x71, 0xad, 0x69, 0xb8, 0xe9, 0xfc, 0x67, 0x4c, 0xf7, 0x6f, 0x67, 0xc4, 0x2c, 0xad, 0xbe, 0xa6, 0xd3, 0x4c, 0xf1, 0xf1, 0xcc, /* S */ 0x66, 0x7f, 0xc5, 0x7a, 0x44, 0xb2, 0x89, 0xfc, 0x34, 0xa1, 0x98, 0x55, 0x61, 0x17, 0xaf, 0xd6, 0x96, 0xdc, 0xbd, 0x96, 0xbf, 0x1b, 0xaa, 0xcb, 0x40, 0xd3, 0xf8, 0xb2 }; #define ac_dsa_vect85_prime ac_dsa_vect76_prime #define ac_dsa_vect85_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect85_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect85_ptx[] = { /* Msg */ 0x68, 0x0d, 0x87, 0x8c, 0xa6, 0xee, 0xb8, 0x7e, 0x4a, 0xe1, 0x58, 0xdd, 0xdc, 0x37, 0x32, 0x78, 0x40, 0x13, 0xeb, 0xb1, 0xda, 0x89, 0x40, 0x1a, 0xcd, 0xd6, 0x10, 0x90, 0x89, 0xe5, 0x60, 0x1d, 0x69, 0x5f, 0x9e, 0x4e, 0x6e, 0xbf, 0x16, 0x02, 0x6a, 0xa7, 0x46, 0xde, 0xe8, 0x0a, 0x01, 0x23, 0x50, 0x33, 0xf2, 0x42, 0x07, 0x9a, 0xf1, 0xb7, 0xfa, 0x69, 0x65, 0xc8, 0x7e, 0xae, 0x8b, 0x32, 0x91, 0xa0, 0x09, 0xe4, 0xf1, 0x9d, 0x5b, 0x8f, 0x13, 0x94, 0xd8, 0x66, 0xe7, 0xc9, 0xb7, 0x20, 0x73, 0xa9, 0x56, 0x52, 0xc0, 0xee, 0xd9, 0x8e, 0x94, 0x84, 0xa1, 0x5c, 0x92, 0x44, 0x76, 0x4d, 0x8c, 0xba, 0xab, 0xd4, 0x9d, 0x24, 0xc2, 0x07, 0xc7, 0x05, 0x70, 0x3c, 0xc3, 0x5e, 0xbf, 0xc7, 0x68, 0x3f, 0x4a, 0x0e, 0x6a, 0xbf, 0x23, 0xfa, 0x07, 0x67, 0x83, 0x50, 0xa6, 0xa0, 0x0c, 0xde }; static const uint8_t ac_dsa_vect85_priv_val[] = { /* X */ 0x73, 0x8a, 0x8b, 0xfc, 0x47, 0x8e, 0x46, 0x2c, 0x4b, 0xef, 0x8d, 0x56, 0x33, 0xe0, 0x79, 0x34, 0x75, 0x20, 0x65, 0x51, 0xbb, 0xdd, 0xd0, 0x85, 0x07, 0xf0, 0x05, 0xf5 }; static const uint8_t ac_dsa_vect85_pub_val[] = { /* Y */ 0x51, 0x1a, 0x36, 0x08, 0xc4, 0xbd, 0xa7, 0xc8, 0x2d, 0x7d, 0x68, 0xa5, 0xd3, 0x0b, 0xd4, 0xc7, 0x1e, 0x45, 0x7b, 0x0f, 0x32, 0x30, 0x27, 0xd6, 0x01, 0xd6, 0x32, 0x4a, 0x94, 0x89, 0x3a, 0xb3, 0xd6, 0x28, 0x78, 0xb1, 0x2d, 0x98, 0xc4, 0x4d, 0xcf, 0x30, 0xad, 0xab, 0x43, 0x52, 0xb7, 0x0f, 0x4d, 0xaa, 0x77, 0x2d, 0xf6, 0xae, 0xd3, 0xc0, 0x75, 0x87, 0xe9, 0x6c, 0x68, 0xf8, 0xa8, 0x47, 0xa3, 0x35, 0x05, 0x14, 0x81, 0xd5, 0x39, 0x03, 0xd1, 0xd1, 0xae, 0x0c, 0xf9, 0x9a, 0x54, 0x38, 0x7b, 0x00, 0x16, 0x9a, 0x1c, 0x97, 0x04, 0xbb, 0x62, 0xf1, 0xd9, 0x80, 0x47, 0xdb, 0xa8, 0xa0, 0xfd, 0xda, 0x73, 0x4c, 0xd4, 0x16, 0x11, 0x58, 0x4d, 0x50, 0x55, 0x4a, 0xd7, 0x78, 0x90, 0x72, 0x0c, 0x8a, 0xc2, 0x99, 0x32, 0x09, 0x7c, 0xf2, 0xbb, 0x1a, 0x8d, 0x0d, 0xaf, 0x86, 0x63, 0x24, 0x1e, 0x23, 0x64, 0x0c, 0xc3, 0x96, 0xf9, 0xe6, 0x87, 0x73, 0x48, 0xf0, 0x14, 0x07, 0x3f, 0x4f, 0xdc, 0x5b, 0xeb, 0xd1, 0x15, 0xa0, 0xd7, 0x4c, 0x2c, 0xe8, 0x57, 0xe1, 0x00, 0xae, 0x3d, 0xc0, 0x70, 0x7b, 0x95, 0xef, 0xfa, 0x4a, 0x2c, 0xd8, 0x62, 0x9f, 0xdd, 0x9b, 0xce, 0x72, 0x09, 0x1c, 0x0e, 0x26, 0x12, 0xd2, 0xb3, 0x03, 0x20, 0x42, 0x0f, 0x42, 0xec, 0xb0, 0x98, 0x6a, 0xc3, 0x28, 0x92, 0x51, 0xb4, 0xae, 0x54, 0xe5, 0x1e, 0xd8, 0x3d, 0x01, 0x95, 0xde, 0xda, 0x9d, 0x4e, 0x5b, 0x39, 0x8b, 0x03, 0x72, 0x13, 0xd2, 0xf8, 0xf0, 0xff, 0xdb, 0xf7, 0x27, 0x21, 0x40, 0x85, 0x53, 0x4a, 0x32, 0x4d, 0x4f, 0xef, 0xc1, 0x65, 0x36, 0x42, 0x03, 0x5e, 0xbd, 0xbe, 0x81, 0x67, 0xb1, 0x50, 0xbd, 0x92, 0xb7, 0xcd, 0xf2, 0x76, 0xfc, 0xf5, 0xe0, 0xbf, 0xfc, 0xe9, 0x56, 0xa4, 0x7e }; /* K = 58d8b64bc8c2da02a294e9db46bfefb273e74870651e19d6cd017c55 */ static const uint8_t ac_dsa_vect85_out[] = { /* R */ 0x7c, 0xeb, 0x71, 0x48, 0x0b, 0x5a, 0x71, 0x33, 0x40, 0x1b, 0x52, 0x27, 0xfa, 0x22, 0x53, 0x33, 0x2e, 0x04, 0xf7, 0x8e, 0xa5, 0xd0, 0xfe, 0x23, 0x7c, 0x85, 0x25, 0xd1, /* S */ 0x48, 0x48, 0x00, 0xe8, 0x1f, 0x7b, 0x56, 0x92, 0xb7, 0x9e, 0xb2, 0x1a, 0xc2, 0xff, 0xf8, 0x3c, 0x49, 0xc9, 0xf0, 0xd4, 0x09, 0xc7, 0x56, 0xc7, 0x3f, 0xbd, 0xd2, 0xf0 }; #define ac_dsa_vect86_prime ac_dsa_vect76_prime #define ac_dsa_vect86_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect86_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect86_ptx[] = { /* Msg */ 0x69, 0x7f, 0x9e, 0xfc, 0x86, 0x53, 0xfe, 0xdb, 0x89, 0x8c, 0x77, 0xf9, 0x0f, 0x12, 0x4b, 0xea, 0x5c, 0x3b, 0x89, 0x3c, 0x49, 0xd7, 0xf1, 0xb1, 0x16, 0x47, 0x9e, 0x83, 0xd3, 0x5c, 0xb6, 0xc3, 0x94, 0x07, 0x97, 0x50, 0x1e, 0x7f, 0x52, 0x88, 0x7d, 0x18, 0xae, 0x9f, 0x40, 0x55, 0xe1, 0xbd, 0xd1, 0x24, 0xb5, 0x72, 0xf7, 0xa6, 0xfa, 0xd1, 0x01, 0xf5, 0x8b, 0x52, 0xb3, 0x0c, 0xa3, 0x0d, 0x97, 0x43, 0xa9, 0x01, 0x6a, 0xf8, 0x91, 0x89, 0x6d, 0x25, 0x35, 0x6e, 0x44, 0xf9, 0x82, 0xd4, 0x06, 0xea, 0x26, 0xa9, 0xb2, 0x5f, 0xc4, 0xf9, 0x03, 0x09, 0x2d, 0x7e, 0x8e, 0x87, 0x13, 0x77, 0x4a, 0x8b, 0xe7, 0xaa, 0xac, 0x93, 0xa6, 0x94, 0x2c, 0x1f, 0x2c, 0x48, 0xe9, 0xde, 0xa6, 0x49, 0x84, 0xae, 0x54, 0xf7, 0xef, 0x99, 0x96, 0x1b, 0xfd, 0x9b, 0x8d, 0x93, 0x22, 0x6a, 0xf7, 0x76 }; static const uint8_t ac_dsa_vect86_priv_val[] = { /* X */ 0x55, 0x0c, 0x87, 0x55, 0x23, 0x78, 0x57, 0xa0, 0xc8, 0xfc, 0x8a, 0x63, 0x52, 0x5d, 0x40, 0x25, 0x71, 0x3b, 0x89, 0xbd, 0xb1, 0x27, 0xd1, 0xc3, 0x30, 0xc3, 0x32, 0x4a }; static const uint8_t ac_dsa_vect86_pub_val[] = { /* Y */ 0x64, 0xb5, 0x88, 0x49, 0x9c, 0x9d, 0xb3, 0xe5, 0x86, 0x41, 0x92, 0x46, 0x4d, 0x32, 0xfa, 0x35, 0x47, 0xf6, 0x48, 0xfe, 0x67, 0x6c, 0x15, 0x0a, 0x8f, 0x9e, 0x15, 0x3c, 0x5a, 0xf5, 0x79, 0x25, 0xc7, 0x6d, 0xda, 0x4b, 0x41, 0x9d, 0x60, 0xb2, 0x2f, 0xa5, 0xcd, 0xea, 0x0f, 0xb6, 0xf0, 0xb8, 0x47, 0x9c, 0x98, 0x8a, 0x32, 0x4d, 0x27, 0x5b, 0xd4, 0x2e, 0xf1, 0x0d, 0x89, 0x98, 0xc3, 0x60, 0x39, 0xeb, 0x40, 0x21, 0xfc, 0x0d, 0x27, 0x88, 0xb5, 0x9a, 0x75, 0xcf, 0x25, 0xed, 0x6e, 0xe4, 0xd4, 0x48, 0x82, 0xb0, 0xc5, 0xc5, 0xcb, 0x8d, 0xcc, 0x10, 0x02, 0xc0, 0xba, 0xa4, 0x79, 0x81, 0x07, 0xe0, 0xb5, 0x7c, 0xd2, 0x6d, 0xeb, 0xbc, 0xd0, 0xba, 0x41, 0xd1, 0xb1, 0xb8, 0x60, 0xb8, 0xeb, 0x90, 0xf6, 0xf3, 0x05, 0x00, 0xb2, 0xe4, 0xbe, 0x7a, 0x00, 0xb6, 0x7d, 0x93, 0xc8, 0x7d, 0x3f, 0xf7, 0xa6, 0xce, 0x53, 0xb9, 0x77, 0xa9, 0x30, 0x99, 0x98, 0x07, 0xfc, 0xbe, 0xf5, 0x7d, 0x8d, 0xc6, 0x7a, 0x8f, 0x36, 0x61, 0x24, 0x99, 0x13, 0x89, 0x32, 0x8c, 0xe7, 0xe7, 0x0f, 0x9e, 0x5c, 0x22, 0xff, 0xde, 0xdb, 0x28, 0x49, 0x82, 0x82, 0xb4, 0xa9, 0xa9, 0xc6, 0x85, 0x34, 0xa2, 0x38, 0x32, 0x2e, 0x0d, 0xb6, 0x08, 0x8e, 0xd0, 0xaf, 0xa8, 0xbc, 0x77, 0xce, 0x99, 0x8c, 0x81, 0x44, 0x71, 0xab, 0x56, 0x76, 0x7b, 0x35, 0xd0, 0x7b, 0x94, 0x29, 0x0e, 0xa1, 0x06, 0xff, 0x0c, 0x99, 0x8b, 0x51, 0xf0, 0x22, 0x22, 0x73, 0x8e, 0xf9, 0x30, 0x1f, 0x29, 0x0c, 0x6b, 0x48, 0x5d, 0xbc, 0x4f, 0x12, 0xb4, 0x72, 0xa1, 0x19, 0x2f, 0xd9, 0x3f, 0x2d, 0x23, 0x52, 0x7a, 0x02, 0xd9, 0x5a, 0xf0, 0xb4, 0x22, 0xbe, 0x76, 0x40, 0xa9, 0x70, 0x2e, 0xca, 0xac, 0x26, 0xc9, 0xe0, 0x04 }; /* K = 0b4329f9e5ac4a117689883db2ca8e968d30a3aced61e27ba27c6242 */ static const uint8_t ac_dsa_vect86_out[] = { /* R */ 0x62, 0x05, 0x4d, 0x11, 0x52, 0x9b, 0x99, 0x3a, 0x6f, 0x19, 0xa0, 0xd5, 0x48, 0x1b, 0x99, 0xb4, 0xb4, 0x46, 0x1a, 0x49, 0x86, 0x6c, 0x29, 0x53, 0x4a, 0x36, 0x1a, 0x8b, /* S */ 0x7a, 0x7f, 0xd0, 0x98, 0x2e, 0x4e, 0x21, 0x18, 0xd1, 0xa0, 0x69, 0x78, 0x7a, 0x80, 0xb9, 0x02, 0x49, 0x34, 0x65, 0xf6, 0x62, 0x0a, 0x35, 0x5c, 0x86, 0xa9, 0x48, 0x67 }; #define ac_dsa_vect87_prime ac_dsa_vect76_prime #define ac_dsa_vect87_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect87_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect87_ptx[] = { /* Msg */ 0xd0, 0x80, 0xa7, 0xdf, 0xf1, 0xef, 0x20, 0xe3, 0x38, 0x32, 0xb9, 0x9c, 0xf8, 0x3c, 0x6c, 0x91, 0x9c, 0x07, 0x62, 0x0b, 0xf6, 0x08, 0xe0, 0x80, 0xaa, 0x30, 0x18, 0x31, 0xca, 0x61, 0x78, 0xe4, 0x4e, 0xf7, 0xa4, 0xc1, 0x15, 0xe9, 0x3a, 0xb6, 0xd8, 0x77, 0xe9, 0x66, 0x52, 0x17, 0x16, 0x10, 0xa5, 0x1d, 0x92, 0x7d, 0x20, 0x34, 0xf4, 0x2f, 0x28, 0x0f, 0xe8, 0x7d, 0x7c, 0x17, 0x47, 0xc4, 0x80, 0xeb, 0xcc, 0xbf, 0x56, 0x5a, 0x15, 0x0f, 0x32, 0x40, 0xf6, 0xd4, 0xce, 0x5d, 0x6e, 0xb0, 0xb2, 0xe9, 0x64, 0x41, 0x67, 0x91, 0x37, 0x6e, 0xd2, 0x2b, 0x35, 0x59, 0xcf, 0x93, 0xa0, 0x19, 0x67, 0x6e, 0x9e, 0x0b, 0xe3, 0xc8, 0xd3, 0x4f, 0x0e, 0x0d, 0x11, 0x52, 0xec, 0x6c, 0x32, 0x6d, 0x3d, 0xbf, 0x1d, 0x33, 0x03, 0xbe, 0xad, 0xd1, 0x88, 0xc3, 0xaa, 0x0d, 0x77, 0xe8, 0xa1, 0x17 }; static const uint8_t ac_dsa_vect87_priv_val[] = { /* X */ 0x21, 0x71, 0xd5, 0xe7, 0xcd, 0xda, 0x9a, 0x69, 0x1d, 0xd2, 0x7f, 0x05, 0x24, 0xf2, 0x4c, 0xa4, 0x1d, 0x5d, 0x80, 0x1e, 0xb2, 0xab, 0x0d, 0xcd, 0xbe, 0x60, 0x14, 0xad }; static const uint8_t ac_dsa_vect87_pub_val[] = { /* Y */ 0x41, 0x76, 0x7c, 0xe2, 0x6c, 0x78, 0x0e, 0x3f, 0x20, 0x19, 0xf5, 0xa4, 0x9a, 0x70, 0x15, 0x70, 0x14, 0x8e, 0x9f, 0xf3, 0x38, 0x22, 0x03, 0x83, 0x3d, 0x1b, 0x18, 0xe9, 0xd8, 0xd6, 0xa0, 0x0c, 0x0b, 0x22, 0x58, 0xf2, 0xe5, 0x67, 0xdb, 0x31, 0xad, 0x4e, 0x8c, 0xfb, 0x26, 0x21, 0x79, 0x4b, 0xac, 0x87, 0xd9, 0xb3, 0xb5, 0x3b, 0x79, 0x19, 0x9a, 0x77, 0x50, 0x58, 0xfe, 0xbc, 0x19, 0x0d, 0x00, 0xad, 0xed, 0xae, 0x0f, 0xd3, 0x02, 0x12, 0x91, 0xbc, 0x2d, 0x1f, 0xf0, 0x50, 0x8b, 0xf0, 0x19, 0xec, 0xa0, 0xc5, 0x73, 0xfd, 0x86, 0x37, 0x22, 0xf3, 0x67, 0xd5, 0xd0, 0x2b, 0xd9, 0xfa, 0x0d, 0x07, 0xf7, 0x54, 0x06, 0xac, 0x20, 0x4f, 0xd3, 0xa5, 0xca, 0x16, 0x32, 0x5c, 0x66, 0x1f, 0xe8, 0x54, 0xfd, 0x00, 0xfb, 0x26, 0x65, 0x47, 0x52, 0xfe, 0xbb, 0xe4, 0x39, 0x09, 0x6d, 0xd2, 0x28, 0x4d, 0x5a, 0xb1, 0x3d, 0xe9, 0xeb, 0x00, 0x48, 0x47, 0xd1, 0xd8, 0x59, 0x9f, 0xee, 0x68, 0x7c, 0xb2, 0xec, 0xd0, 0xe5, 0xb7, 0x61, 0xd9, 0x1a, 0x7e, 0x9c, 0x58, 0xe6, 0x92, 0x1f, 0x10, 0x30, 0x24, 0x21, 0x5e, 0x74, 0xf3, 0xde, 0x3c, 0xc1, 0x2f, 0x5e, 0xd7, 0x70, 0x3d, 0xef, 0x04, 0x1d, 0xd3, 0x26, 0x7f, 0x1c, 0xde, 0x0d, 0x4f, 0xda, 0x8d, 0xd5, 0xcc, 0xc9, 0xc0, 0x7b, 0x65, 0xde, 0x59, 0x48, 0x2c, 0x47, 0x84, 0xb4, 0xf6, 0xfa, 0x85, 0x66, 0x71, 0x86, 0xe2, 0xdf, 0x6c, 0x5d, 0xc8, 0xb4, 0x95, 0xbe, 0x8e, 0xc6, 0x13, 0x79, 0xf2, 0x09, 0x23, 0x57, 0x6f, 0x17, 0x68, 0x0c, 0x4d, 0xab, 0x99, 0x31, 0x2d, 0x0b, 0x64, 0x41, 0x30, 0x6a, 0xe7, 0x17, 0xc9, 0x5d, 0x3f, 0x35, 0x2b, 0xa4, 0xc0, 0x96, 0xf0, 0x1d, 0x14, 0xa7, 0xdc, 0x05, 0xb2, 0x8b, 0xa9, 0xa3, 0xca }; /* K = 0f6626008e50c19def9bd694c00522cc861eb7069d55892e08ddff58 */ static const uint8_t ac_dsa_vect87_out[] = { /* R */ 0x44, 0xe7, 0x0d, 0x2e, 0xad, 0x3c, 0x51, 0xdd, 0x0c, 0x54, 0x61, 0xdd, 0x41, 0x86, 0x82, 0x5e, 0x23, 0xb4, 0xe7, 0x51, 0xd8, 0xab, 0x17, 0xd0, 0xb7, 0xed, 0xfa, 0xac, /* S */ 0x48, 0xff, 0xad, 0xe2, 0x75, 0x31, 0xdb, 0x47, 0x8f, 0x22, 0xfa, 0x0e, 0xc9, 0x2b, 0xcf, 0xd2, 0xff, 0xeb, 0x6d, 0xb6, 0x77, 0x15, 0xdc, 0xdc, 0x79, 0xbc, 0xb0, 0x28 }; #define ac_dsa_vect88_prime ac_dsa_vect76_prime #define ac_dsa_vect88_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect88_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect88_ptx[] = { /* Msg */ 0xf6, 0xa9, 0xaf, 0xe2, 0x41, 0xdd, 0x98, 0x4e, 0x3b, 0xc2, 0x65, 0x78, 0x7d, 0xcc, 0x49, 0x49, 0x1b, 0x3b, 0xca, 0x67, 0xfe, 0xef, 0x32, 0xfc, 0x1e, 0x07, 0xfd, 0xaf, 0x0a, 0xf6, 0xc5, 0xd0, 0x6d, 0xcc, 0xb4, 0x7c, 0xdb, 0x69, 0x07, 0x51, 0x1c, 0xb3, 0x0c, 0x10, 0x9f, 0x62, 0xe6, 0x67, 0x18, 0xc5, 0xc4, 0xbb, 0x43, 0xd4, 0xb0, 0x0b, 0x51, 0x23, 0x5d, 0xf4, 0x32, 0x23, 0xd6, 0x0c, 0xe1, 0xf9, 0xbe, 0x34, 0x93, 0xa4, 0xdc, 0xb0, 0x2e, 0x25, 0xed, 0x3d, 0xda, 0xe1, 0x0d, 0x13, 0x1b, 0x48, 0x1a, 0x61, 0xae, 0xf3, 0x34, 0xb6, 0x90, 0xc7, 0xa1, 0xec, 0x74, 0x86, 0x59, 0x54, 0xb3, 0x9c, 0xcf, 0xa7, 0xa5, 0x1a, 0x9a, 0x1e, 0x62, 0xe6, 0x54, 0xbb, 0x89, 0x27, 0x0c, 0x77, 0x4f, 0x08, 0x2a, 0xdf, 0x09, 0xb5, 0x79, 0xc8, 0x35, 0x8d, 0xac, 0xb9, 0xdb, 0x7c, 0xa1, 0xc2 }; static const uint8_t ac_dsa_vect88_priv_val[] = { /* X */ 0x77, 0x20, 0x7c, 0xf0, 0x96, 0x3f, 0x1e, 0x96, 0x1c, 0x35, 0x39, 0xd7, 0xd0, 0xf6, 0x78, 0xfc, 0xe5, 0x17, 0xf6, 0x7b, 0x72, 0x8b, 0xf1, 0x5e, 0x0c, 0xab, 0x3a, 0xe6 }; static const uint8_t ac_dsa_vect88_pub_val[] = { /* Y */ 0xb4, 0x13, 0x8f, 0xa4, 0xe1, 0xdc, 0x67, 0x72, 0xb4, 0x7e, 0x5a, 0x3e, 0xd1, 0x30, 0xa1, 0x3b, 0x82, 0x23, 0x94, 0xc3, 0xce, 0x8a, 0x01, 0x93, 0xd1, 0xdd, 0xe4, 0xc9, 0x0e, 0x7d, 0xa1, 0x17, 0x8e, 0x11, 0x26, 0xdd, 0x29, 0x62, 0x52, 0xfa, 0x7d, 0x2f, 0x13, 0x9a, 0x14, 0x8a, 0xc4, 0x4d, 0xc0, 0x6a, 0x05, 0x8b, 0x84, 0xec, 0xb0, 0x3a, 0xd8, 0x27, 0xe6, 0x68, 0x92, 0xe8, 0x55, 0x29, 0xc3, 0x62, 0xce, 0xac, 0x2e, 0x71, 0x04, 0xb7, 0x97, 0xb2, 0xe9, 0x82, 0x60, 0x54, 0xde, 0x35, 0x05, 0x96, 0xab, 0x58, 0x17, 0x65, 0xe9, 0xa5, 0xc9, 0xff, 0x51, 0x43, 0x33, 0x2c, 0x2f, 0x3b, 0xfd, 0x24, 0x9a, 0x87, 0xfe, 0x1e, 0x30, 0xef, 0xd6, 0xfc, 0x05, 0x7e, 0x23, 0x4a, 0x1c, 0xd4, 0xc1, 0x9e, 0x07, 0x2b, 0xd7, 0x1b, 0x32, 0xd5, 0x5e, 0xf1, 0x22, 0xea, 0x93, 0x09, 0x11, 0x08, 0x1e, 0x26, 0xd9, 0x98, 0x49, 0x03, 0x76, 0xe3, 0xb7, 0x21, 0xcc, 0x32, 0xfe, 0xd9, 0x2b, 0x82, 0xd5, 0x45, 0xa7, 0xe6, 0xba, 0x6e, 0x4e, 0xb4, 0x34, 0x06, 0x3c, 0x87, 0xdb, 0x84, 0x8d, 0xf4, 0xef, 0x02, 0xed, 0xa3, 0xfd, 0xf4, 0xf9, 0xd2, 0x90, 0x5b, 0x78, 0xf7, 0xb1, 0x6b, 0x5e, 0xa0, 0xb5, 0x99, 0x8f, 0x1f, 0xbb, 0x0a, 0xaf, 0x62, 0xa1, 0x73, 0x55, 0x91, 0x60, 0x0f, 0x98, 0x01, 0x97, 0x7b, 0x1b, 0x94, 0x7f, 0x61, 0xa9, 0x1f, 0xf2, 0xaf, 0xb8, 0x72, 0x7c, 0x55, 0x26, 0x89, 0x72, 0xc8, 0x72, 0x16, 0xaa, 0xe9, 0x00, 0x61, 0x7a, 0x56, 0xf5, 0x35, 0xed, 0x18, 0xc4, 0xc5, 0xdd, 0xf8, 0xd7, 0xa5, 0x44, 0x63, 0x25, 0x6d, 0x09, 0x14, 0x4d, 0x88, 0x9c, 0x14, 0x9e, 0x5b, 0x09, 0xbd, 0xd9, 0xd8, 0x50, 0x93, 0x14, 0xb1, 0x03, 0xb8, 0x46, 0xf3, 0xe6, 0xfa, 0x1b, 0xb2 }; /* K = 57585204d88d73c21f66a150991531973978dfeaedd8024e268f18d5 */ static const uint8_t ac_dsa_vect88_out[] = { /* R */ 0x55, 0x5a, 0x45, 0x48, 0x80, 0x08, 0x4f, 0x6c, 0xb2, 0x52, 0x2d, 0xaf, 0x33, 0x99, 0xfb, 0x4a, 0x50, 0x1a, 0x94, 0x3a, 0x9b, 0x6a, 0xac, 0xd5, 0x8e, 0x2c, 0x7d, 0x37, /* S */ 0x73, 0x0f, 0xed, 0xb3, 0xa5, 0x91, 0x18, 0x44, 0x14, 0x60, 0x98, 0xac, 0x56, 0x03, 0xe2, 0xba, 0xaa, 0xe7, 0x69, 0x62, 0xb3, 0x3a, 0x32, 0x7b, 0x50, 0x42, 0x0a, 0x50 }; #define ac_dsa_vect89_prime ac_dsa_vect76_prime #define ac_dsa_vect89_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect89_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect89_ptx[] = { /* Msg */ 0x2d, 0x1c, 0x57, 0x3b, 0xf3, 0x24, 0x02, 0x8d, 0xc2, 0xfe, 0x00, 0x92, 0x8f, 0x55, 0xf7, 0xfa, 0xc7, 0x90, 0x37, 0xd4, 0xd9, 0x9e, 0xb1, 0x85, 0xf3, 0xb9, 0x97, 0xe0, 0x42, 0xcd, 0xf8, 0x08, 0xb5, 0x38, 0x2d, 0x50, 0xa6, 0xaa, 0x80, 0x85, 0xc5, 0xd1, 0x95, 0x8e, 0x67, 0x28, 0x3d, 0xf6, 0x69, 0x86, 0xb9, 0x34, 0x71, 0xc1, 0x2e, 0x30, 0x45, 0xba, 0x14, 0x6e, 0xd5, 0x96, 0x5c, 0x8a, 0xc5, 0xb4, 0x46, 0x68, 0xf6, 0x19, 0x84, 0xd2, 0x17, 0x36, 0xcf, 0x1c, 0x27, 0x67, 0x54, 0xb8, 0x48, 0xe9, 0xfa, 0x63, 0x6b, 0x63, 0x15, 0xb2, 0x27, 0x2c, 0x19, 0xe6, 0x56, 0x26, 0xbf, 0x8b, 0x12, 0x14, 0xd7, 0x09, 0x89, 0xa6, 0x23, 0xb5, 0xff, 0xf7, 0x80, 0x3d, 0x28, 0xa6, 0x63, 0xbb, 0xbb, 0xeb, 0xb8, 0x4c, 0x83, 0x9b, 0x42, 0x72, 0x0f, 0xd0, 0xe6, 0x22, 0x46, 0xb3, 0xb0, 0x34 }; static const uint8_t ac_dsa_vect89_priv_val[] = { /* X */ 0x78, 0x93, 0x75, 0x05, 0x5f, 0x94, 0xb9, 0xad, 0xe4, 0x0b, 0x0a, 0xf8, 0xf7, 0x06, 0x40, 0x33, 0x6f, 0x5d, 0xe2, 0x13, 0x57, 0x1c, 0xa1, 0xc6, 0x45, 0xca, 0x46, 0x8f }; static const uint8_t ac_dsa_vect89_pub_val[] = { /* Y */ 0x5c, 0xcd, 0xca, 0x35, 0x55, 0x1c, 0xf3, 0x55, 0xec, 0x85, 0xdb, 0x8d, 0x68, 0x01, 0x0d, 0xed, 0x63, 0x58, 0x32, 0x55, 0xb1, 0xd5, 0xfd, 0x2a, 0x52, 0x2e, 0x29, 0x51, 0x3a, 0xd3, 0xce, 0x61, 0x57, 0xbe, 0x30, 0xea, 0x1c, 0x30, 0x5d, 0x87, 0xde, 0x6c, 0x27, 0xfb, 0xe3, 0xa3, 0xfa, 0x50, 0x07, 0x12, 0x82, 0x75, 0xd6, 0xe6, 0x18, 0x3a, 0x65, 0xce, 0xc5, 0xb6, 0x94, 0xbc, 0x6c, 0x02, 0x73, 0x35, 0x06, 0x6e, 0x01, 0x27, 0x3f, 0xd6, 0x98, 0x1c, 0xc5, 0xf6, 0x0c, 0x3e, 0x33, 0x75, 0x13, 0x86, 0xce, 0x79, 0x2c, 0xcb, 0x6e, 0x6a, 0x6d, 0xb5, 0xd7, 0xf0, 0x73, 0x80, 0x03, 0x29, 0xf9, 0xcc, 0x46, 0xd1, 0x9f, 0x42, 0x29, 0x23, 0xb9, 0x74, 0x8d, 0xcc, 0xa4, 0x97, 0x1e, 0x43, 0xa9, 0xd1, 0xf5, 0x9d, 0x1c, 0x74, 0x97, 0x88, 0xa8, 0x52, 0x7a, 0xd5, 0x24, 0xdf, 0x74, 0x15, 0x0b, 0x39, 0xea, 0xfa, 0x7f, 0x4d, 0x56, 0x08, 0xd1, 0xc9, 0x72, 0x55, 0x65, 0x44, 0x56, 0xea, 0xdd, 0x4d, 0x38, 0x2a, 0xc5, 0x4f, 0xdd, 0x12, 0x53, 0x8b, 0x2f, 0x2e, 0xf7, 0x5a, 0x50, 0x98, 0x01, 0x71, 0xa0, 0x4d, 0x40, 0x54, 0xb4, 0xcd, 0x79, 0xc7, 0x1e, 0x1c, 0x4d, 0xeb, 0x3b, 0xc6, 0xaf, 0x4c, 0x87, 0x4f, 0x5c, 0xf0, 0x27, 0x38, 0x96, 0xd4, 0xfd, 0xc5, 0x84, 0x7f, 0xef, 0xdc, 0xc9, 0x7f, 0x54, 0x02, 0xc7, 0xe7, 0x64, 0x84, 0xd3, 0xd2, 0xd7, 0x0a, 0xc1, 0x6b, 0xda, 0x41, 0x99, 0x6c, 0xad, 0xcd, 0x83, 0xad, 0x92, 0xcb, 0x37, 0xc0, 0xc1, 0xe9, 0xd6, 0x4f, 0xa1, 0xab, 0xd9, 0xa2, 0xcf, 0x00, 0x5c, 0x2c, 0x29, 0xa1, 0x73, 0x7c, 0xdd, 0x6d, 0x63, 0xaa, 0x2f, 0xda, 0xa5, 0x60, 0x79, 0x9b, 0x9f, 0x07, 0xd4, 0x48, 0x76, 0x06, 0x78, 0x47, 0x76, 0x29, 0xf2, 0x2f }; /* K = 325b1562d5c9c61f95e6944fb12a4bb08d227c4dc0c8e9a79e391b08 */ static const uint8_t ac_dsa_vect89_out[] = { /* R */ 0x7b, 0xf3, 0xc0, 0xc5, 0x47, 0xe2, 0x18, 0x46, 0x21, 0x2b, 0xf4, 0xcf, 0x3e, 0x38, 0x36, 0x2d, 0xd4, 0xd3, 0x59, 0xb7, 0xaf, 0x64, 0x20, 0xf9, 0x0d, 0xa5, 0x79, 0x07, /* S */ 0x5e, 0xbd, 0x5d, 0x2d, 0x88, 0xca, 0xe4, 0x0b, 0x37, 0xa9, 0xa5, 0xa8, 0x4e, 0x62, 0x18, 0xd2, 0x45, 0x3a, 0xfa, 0x14, 0x6c, 0x79, 0xa5, 0xd5, 0xf5, 0xdf, 0x44, 0xf4 }; #define ac_dsa_vect90_prime ac_dsa_vect76_prime #define ac_dsa_vect90_sub_prime ac_dsa_vect76_sub_prime #define ac_dsa_vect90_base ac_dsa_vect76_base static const uint8_t ac_dsa_vect90_ptx[] = { /* Msg */ 0xba, 0xb4, 0xdb, 0x55, 0xbf, 0x6d, 0x3a, 0xbe, 0xfd, 0x1b, 0xb4, 0xe0, 0xf7, 0xbc, 0xec, 0x65, 0xee, 0x6c, 0x6d, 0x8e, 0xb0, 0x4b, 0x7c, 0x48, 0x0d, 0xf4, 0xe9, 0xe3, 0x91, 0x50, 0xf1, 0x0c, 0x38, 0xf1, 0xab, 0xb6, 0x3d, 0xfe, 0x1b, 0xb9, 0x75, 0x5c, 0x41, 0xb3, 0x89, 0x55, 0xba, 0x38, 0xba, 0x93, 0x8b, 0x6c, 0xee, 0xdf, 0xec, 0x02, 0x00, 0x1f, 0xa8, 0x70, 0x07, 0x0c, 0x59, 0xdf, 0x1f, 0xd2, 0xd7, 0x2a, 0x81, 0x41, 0x04, 0xc5, 0x14, 0x33, 0x76, 0xa3, 0x13, 0x6b, 0x81, 0x18, 0xf7, 0xb4, 0x7b, 0xd1, 0xff, 0xab, 0x53, 0x35, 0x9e, 0x53, 0xf9, 0x5c, 0x66, 0xee, 0x12, 0x70, 0x5e, 0x31, 0xa4, 0x62, 0xa8, 0xca, 0xae, 0x48, 0x15, 0x56, 0xce, 0xff, 0x60, 0x7c, 0xcc, 0x8b, 0xf1, 0x45, 0x07, 0x72, 0xcd, 0x68, 0x08, 0x1d, 0x3f, 0x15, 0xa7, 0x10, 0xe6, 0x56, 0xae, 0x56 }; static const uint8_t ac_dsa_vect90_priv_val[] = { /* X */ 0x6f, 0x4a, 0x94, 0xc9, 0x25, 0x4a, 0x55, 0x77, 0x87, 0xde, 0x9a, 0xfa, 0x08, 0x21, 0x54, 0x14, 0xdb, 0x5a, 0x0d, 0xbc, 0x67, 0xc6, 0x6c, 0xde, 0x1c, 0x1e, 0x6f, 0x04 }; static const uint8_t ac_dsa_vect90_pub_val[] = { /* Y */ 0x53, 0xc0, 0xb0, 0xb0, 0x26, 0x9f, 0xcf, 0x29, 0x48, 0x66, 0x7e, 0x28, 0xb1, 0x1c, 0xcd, 0xa9, 0xcb, 0xb9, 0x27, 0x54, 0x63, 0xf2, 0x1e, 0xe3, 0x0d, 0xa3, 0x3c, 0x45, 0x75, 0xbe, 0x5e, 0x11, 0x1a, 0x18, 0x2a, 0x6f, 0x38, 0xb8, 0x90, 0xf2, 0x0b, 0x8f, 0x2d, 0x22, 0x4f, 0x59, 0x81, 0x89, 0x53, 0x10, 0xdb, 0x7c, 0x47, 0x03, 0xc1, 0xce, 0xc2, 0xb2, 0x57, 0xf4, 0x52, 0xd9, 0x64, 0xbe, 0x50, 0xc0, 0x14, 0xb7, 0x52, 0x36, 0x0e, 0xe2, 0x4f, 0x2f, 0xe1, 0xbc, 0xc0, 0x23, 0x47, 0x7a, 0x2d, 0x70, 0x85, 0xf5, 0x82, 0x14, 0xdf, 0x86, 0x6b, 0x13, 0xa8, 0xd8, 0xaf, 0x91, 0x31, 0x46, 0xdc, 0x0b, 0xee, 0x07, 0x8a, 0xea, 0x1c, 0xe6, 0x45, 0x99, 0x9b, 0x57, 0x94, 0x98, 0xea, 0xe9, 0x27, 0x7e, 0xd7, 0xe8, 0xb2, 0xc7, 0x5f, 0x49, 0x4e, 0xfa, 0xa7, 0x3a, 0x97, 0x3f, 0x32, 0x23, 0x2f, 0x08, 0xce, 0x7f, 0x0a, 0xfc, 0xba, 0x31, 0x66, 0x23, 0xb9, 0x41, 0x58, 0xde, 0x39, 0xbd, 0x4c, 0x0d, 0x51, 0x32, 0x34, 0xee, 0x1a, 0x48, 0x1d, 0x5b, 0x72, 0xf4, 0xee, 0xa3, 0x77, 0x49, 0xb4, 0x0f, 0xff, 0x12, 0xab, 0x62, 0x0f, 0x11, 0xaa, 0xa0, 0x1e, 0x35, 0x58, 0xe7, 0xa4, 0xc5, 0x50, 0x70, 0x7b, 0x71, 0xc1, 0x6c, 0xb8, 0xcd, 0xa9, 0x8f, 0x46, 0xbf, 0x71, 0x76, 0x9a, 0x47, 0x6c, 0x33, 0x85, 0xa8, 0xca, 0xf7, 0xc8, 0x86, 0xae, 0x47, 0xd2, 0x28, 0xb1, 0x77, 0x1a, 0x8b, 0xd4, 0xb7, 0xf1, 0x9e, 0x6f, 0x53, 0x04, 0x7f, 0x62, 0xf0, 0x29, 0xc3, 0x39, 0xfe, 0x75, 0x75, 0xbe, 0x93, 0x08, 0x0a, 0xc7, 0x48, 0x28, 0x91, 0x49, 0xa5, 0x7a, 0x0d, 0xdc, 0xed, 0x54, 0xd7, 0x2f, 0x6d, 0x4d, 0x34, 0x4f, 0xb8, 0x74, 0xcc, 0xc8, 0x5e, 0xa7, 0xf3, 0xdd, 0x21, 0x64, 0xdf }; /* K = 14fe2a5a75756885240ff29abd19d346b2e7e5dfa76d2430f0d069d6 */ static const uint8_t ac_dsa_vect90_out[] = { /* R */ 0x11, 0x8d, 0x22, 0x27, 0xbe, 0x4b, 0xd9, 0x1e, 0x98, 0xa2, 0xef, 0xde, 0x15, 0x60, 0x9b, 0x2b, 0x91, 0x24, 0xb2, 0xe8, 0x3c, 0x27, 0x4b, 0x63, 0x23, 0x00, 0x43, 0x2b, /* S */ 0x3a, 0x44, 0x74, 0x61, 0x94, 0x4b, 0x2a, 0x59, 0x27, 0x8a, 0x8e, 0x11, 0x18, 0xb4, 0x06, 0xbd, 0x3f, 0xf4, 0x16, 0x77, 0x5d, 0x65, 0x53, 0x0e, 0x54, 0xf9, 0xe6, 0x23 }; /* [mod = L=2048, N=224, SHA-224] */ static const uint8_t ac_dsa_vect91_prime[] = { /* P */ 0xaa, 0x81, 0x5c, 0x9d, 0xb1, 0xc4, 0xd3, 0xd2, 0x77, 0x3c, 0x7d, 0x0d, 0x4d, 0x1d, 0xa7, 0x5e, 0xcf, 0xc4, 0xa3, 0x9e, 0x97, 0xd5, 0xfa, 0x19, 0x1f, 0xfe, 0xc8, 0xb1, 0x49, 0x0a, 0x29, 0x0c, 0xe3, 0x35, 0xe5, 0xce, 0x87, 0xea, 0x62, 0x0a, 0x8a, 0x17, 0xde, 0x0b, 0xb6, 0x47, 0x14, 0xe2, 0xec, 0x84, 0x0b, 0xf0, 0x0e, 0x6e, 0xbd, 0xb4, 0xff, 0xb4, 0xe3, 0x24, 0xca, 0x07, 0xc3, 0xc8, 0x71, 0x73, 0x09, 0xaf, 0x14, 0x10, 0x36, 0x2a, 0x77, 0x2c, 0x9a, 0xdd, 0x83, 0x8b, 0x2b, 0x0c, 0xae, 0x1e, 0x90, 0xab, 0x44, 0x8a, 0xda, 0xbd, 0xac, 0xd2, 0xe5, 0xdf, 0x59, 0xc4, 0x18, 0x7a, 0x32, 0xa2, 0x37, 0x19, 0xd6, 0xc5, 0x7e, 0x94, 0x00, 0x88, 0x53, 0x83, 0xbf, 0x8f, 0x06, 0x6f, 0x23, 0xb9, 0x41, 0x92, 0x0d, 0x54, 0xc3, 0x5b, 0x4f, 0x7c, 0xc5, 0x04, 0x4f, 0x3b, 0x40, 0xf1, 0x70, 0x46, 0x95, 0x63, 0x07, 0xb7, 0x48, 0xe8, 0x40, 0x73, 0x28, 0x44, 0xd0, 0x0a, 0x9c, 0xe6, 0xec, 0x57, 0x14, 0x29, 0x3b, 0x62, 0x65, 0x14, 0x7f, 0x15, 0xc6, 0x7f, 0x4b, 0xe3, 0x8b, 0x08, 0x2b, 0x55, 0xfd, 0xea, 0xdb, 0x61, 0x24, 0x68, 0x9f, 0xb7, 0x6f, 0x9d, 0x25, 0xcc, 0x28, 0xb8, 0xea, 0xa9, 0x8b, 0x56, 0x2d, 0x5c, 0x10, 0x11, 0xe0, 0xdc, 0xf9, 0xb3, 0x99, 0x23, 0x24, 0x0d, 0x33, 0x2d, 0x89, 0xdc, 0x96, 0x03, 0xb7, 0xbd, 0xdd, 0x0c, 0x70, 0xb8, 0x3c, 0xaa, 0x29, 0x05, 0x63, 0x1b, 0x1c, 0x83, 0xca, 0xbb, 0xae, 0x6c, 0x0c, 0x0c, 0x2e, 0xfe, 0x8f, 0x58, 0x13, 0x1e, 0xd8, 0x35, 0x1b, 0xf9, 0x3e, 0x87, 0x5f, 0x6a, 0x73, 0xa9, 0x3c, 0xba, 0xd4, 0x70, 0x14, 0x1a, 0x26, 0x87, 0xfb, 0xac, 0xf2, 0xd7, 0x1c, 0x8d, 0xde, 0xe9, 0x71, 0xad, 0x66, 0x07, 0x29, 0xad }; static const uint8_t ac_dsa_vect91_sub_prime[] = { /* Q */ 0xea, 0x34, 0x7e, 0x90, 0xbe, 0x7c, 0x28, 0x75, 0xd1, 0xfe, 0x1d, 0xb6, 0x22, 0xb4, 0x76, 0x38, 0x37, 0xc5, 0xe2, 0x7a, 0x60, 0x37, 0x31, 0x03, 0x48, 0xc1, 0xaa, 0x11 }; static const uint8_t ac_dsa_vect91_base[] = { /* G */ 0x20, 0x42, 0x09, 0x4c, 0xcb, 0xc8, 0xb8, 0x72, 0x3f, 0xc9, 0x28, 0xc1, 0x2f, 0xda, 0x67, 0x1b, 0x83, 0x29, 0x5e, 0x99, 0xc7, 0x43, 0x57, 0x6f, 0x44, 0x50, 0x4b, 0xe1, 0x18, 0x63, 0x23, 0x31, 0x9b, 0x50, 0x02, 0xd2, 0x4f, 0x17, 0x3d, 0xf9, 0x09, 0xea, 0x24, 0x1d, 0x6e, 0xa5, 0x28, 0x99, 0x04, 0xee, 0x46, 0x36, 0x20, 0x4b, 0x2f, 0xbe, 0x94, 0xb0, 0x68, 0xfe, 0x09, 0x3f, 0x79, 0x62, 0x57, 0x95, 0x49, 0x55, 0x1d, 0x3a, 0xf2, 0x19, 0xad, 0x8e, 0xd1, 0x99, 0x39, 0xef, 0xf8, 0x6b, 0xce, 0xc8, 0x34, 0xde, 0x2f, 0x2f, 0x78, 0x59, 0x6e, 0x89, 0xe7, 0xcb, 0x52, 0xc5, 0x24, 0xe1, 0x77, 0x09, 0x8a, 0x56, 0xc2, 0x32, 0xeb, 0x1f, 0x56, 0x3a, 0xa8, 0x4b, 0xc6, 0xb0, 0x26, 0xde, 0xee, 0x6f, 0xf5, 0x1c, 0xb4, 0x41, 0xe0, 0x80, 0xf2, 0xda, 0xfa, 0xea, 0x1c, 0xed, 0x86, 0x42, 0x7d, 0x1c, 0x34, 0x6b, 0xe5, 0x5c, 0x66, 0x80, 0x3d, 0x4b, 0x76, 0xd1, 0x33, 0xcd, 0x44, 0x5b, 0x4c, 0x34, 0x82, 0xfa, 0x41, 0x50, 0x23, 0x46, 0x3c, 0x9b, 0xf3, 0x0f, 0x2f, 0x78, 0x42, 0x23, 0xe2, 0x60, 0x57, 0xd3, 0xaa, 0x0d, 0x7f, 0xbb, 0x66, 0x06, 0x30, 0xc5, 0x2e, 0x49, 0xd4, 0xa0, 0x32, 0x5c, 0x73, 0x89, 0xe0, 0x72, 0xaa, 0x34, 0x9f, 0x13, 0xc9, 0x66, 0xe1, 0x59, 0x75, 0x2f, 0xbb, 0x71, 0xe9, 0x33, 0x68, 0x90, 0xf9, 0x32, 0x43, 0xfa, 0x6e, 0x72, 0xd2, 0x99, 0x36, 0x5e, 0xe5, 0xb3, 0xfe, 0x26, 0x6e, 0xbf, 0x11, 0x10, 0x56, 0x8f, 0xee, 0x44, 0x25, 0xc8, 0x47, 0xb5, 0x02, 0x10, 0xbd, 0x48, 0x4b, 0x97, 0x43, 0x1a, 0x42, 0x85, 0x6a, 0xdc, 0xa3, 0xe7, 0xd1, 0xa9, 0xc9, 0xc6, 0x75, 0xc7, 0xe2, 0x66, 0x91, 0x83, 0x20, 0xdd, 0x5a, 0x78, 0xa4, 0x8c, 0x48, 0xa9 }; static const uint8_t ac_dsa_vect91_ptx[] = { /* Msg */ 0xe9, 0x20, 0xfc, 0x16, 0x10, 0x71, 0x8f, 0x2b, 0x02, 0x13, 0xd3, 0x01, 0xc0, 0x09, 0x2a, 0x51, 0xf3, 0xc6, 0xb0, 0x10, 0x7b, 0xbb, 0xd8, 0x24, 0x3a, 0x96, 0x89, 0xc0, 0x44, 0xe2, 0xd1, 0x42, 0xf2, 0x02, 0xd9, 0xd1, 0x95, 0xa5, 0xfa, 0xef, 0x4b, 0xe5, 0xac, 0xad, 0xc9, 0xff, 0x6f, 0x7d, 0x22, 0x61, 0xe5, 0x8b, 0x51, 0x71, 0x39, 0xbc, 0xb9, 0x48, 0x9b, 0x11, 0x04, 0x23, 0xc2, 0xe5, 0x9e, 0xb1, 0x81, 0x29, 0x4f, 0xfd, 0xae, 0x8a, 0xad, 0x0e, 0x62, 0x4f, 0xab, 0x97, 0x4c, 0x97, 0xf9, 0xf5, 0xe7, 0xdc, 0x19, 0xd6, 0x78, 0xa9, 0xcb, 0x34, 0x29, 0xcf, 0x05, 0xec, 0x50, 0x90, 0x72, 0x85, 0x6f, 0x5a, 0xdf, 0xec, 0x6e, 0x29, 0xba, 0xfe, 0x8e, 0x5b, 0xa9, 0x55, 0x93, 0xe6, 0x12, 0x84, 0x3e, 0x34, 0x31, 0x11, 0xd8, 0x8a, 0x1e, 0xaf, 0xf7, 0xdc, 0x0a, 0x2e, 0x27, 0x7f }; static const uint8_t ac_dsa_vect91_priv_val[] = { /* X */ 0x7b, 0x48, 0x90, 0x21, 0x57, 0x8e, 0x79, 0xe7, 0xbd, 0x3e, 0xe7, 0xab, 0x45, 0x6f, 0x65, 0x9f, 0x3d, 0xc0, 0x7c, 0x88, 0xf5, 0xc9, 0xa3, 0x9e, 0x4f, 0x8c, 0xee, 0x81 }; static const uint8_t ac_dsa_vect91_pub_val[] = { /* Y */ 0x1a, 0xe1, 0x0c, 0x78, 0x6a, 0xd0, 0x90, 0x2c, 0x5c, 0x68, 0x5d, 0xae, 0x5c, 0x71, 0x21, 0x41, 0x8a, 0x37, 0x7b, 0x88, 0x8b, 0x5f, 0x2f, 0x2b, 0xc7, 0x66, 0x23, 0x57, 0x0f, 0xd6, 0x2b, 0xcb, 0x19, 0x0b, 0x47, 0x1a, 0xd5, 0x35, 0x9c, 0x5f, 0x06, 0x2f, 0x88, 0x19, 0x28, 0x9e, 0x95, 0x6d, 0x8a, 0xa6, 0xf9, 0x0d, 0x1f, 0x8c, 0xf1, 0xee, 0x72, 0xd3, 0xa1, 0xbd, 0xfd, 0x56, 0xc4, 0x78, 0xdc, 0x29, 0xa1, 0x9c, 0x45, 0x69, 0xb5, 0xa6, 0x0e, 0x3a, 0x8f, 0x34, 0xf6, 0x06, 0x56, 0xea, 0xc5, 0xb2, 0x5d, 0xde, 0x55, 0x14, 0xa5, 0xc6, 0x7b, 0x67, 0x54, 0x23, 0x20, 0x4f, 0x6c, 0xca, 0xf0, 0x99, 0x06, 0x17, 0xcc, 0x73, 0x55, 0xb9, 0xd3, 0xed, 0x86, 0x89, 0x78, 0xa2, 0x52, 0x02, 0x0a, 0x76, 0x9e, 0xd5, 0x9a, 0x6e, 0xda, 0xa6, 0xef, 0xe3, 0x37, 0x7e, 0xef, 0x45, 0xf3, 0xf6, 0xf3, 0xe6, 0x41, 0x79, 0xcc, 0x7d, 0xb8, 0xb1, 0x43, 0xfb, 0x83, 0x5c, 0x5d, 0x71, 0xbf, 0xcf, 0xa1, 0xe2, 0xa9, 0x04, 0x9b, 0xcc, 0xf7, 0xfe, 0x9a, 0xb5, 0x75, 0x46, 0x22, 0x0f, 0xe3, 0xf4, 0xb7, 0x52, 0x1c, 0x86, 0x17, 0x39, 0xd1, 0x38, 0x50, 0x7e, 0x81, 0xa4, 0x6a, 0x69, 0x93, 0x60, 0x54, 0x41, 0xdc, 0xb9, 0x0d, 0x6e, 0xe4, 0xaf, 0xbc, 0x42, 0xca, 0xbe, 0x90, 0xa2, 0x54, 0x44, 0x49, 0x68, 0x10, 0x9d, 0x7e, 0xdd, 0x96, 0x94, 0xa0, 0x23, 0x23, 0x9f, 0x1d, 0x56, 0x17, 0x5d, 0xd1, 0xfa, 0xc1, 0x15, 0x91, 0x5e, 0x24, 0xfa, 0xb5, 0x63, 0xf4, 0xfc, 0x3f, 0x26, 0x9b, 0xed, 0x2f, 0x30, 0x08, 0x32, 0xd1, 0x12, 0x59, 0x64, 0x85, 0xa7, 0x11, 0x41, 0x7a, 0xa7, 0x3b, 0xb4, 0xac, 0x72, 0xa6, 0x51, 0xa1, 0xfa, 0x5b, 0xae, 0xd3, 0x63, 0x6c, 0x72, 0x0d, 0x39, 0x70, 0x08 }; /* K = 37fadd419fcbd2b073a06ae96b9eceb63e29aee9ac5fa2bdb31ab85d */ static const uint8_t ac_dsa_vect91_out[] = { /* R */ 0x65, 0x10, 0x2e, 0x8f, 0x64, 0xec, 0xb1, 0x1f, 0x06, 0x01, 0x7b, 0x1a, 0x0c, 0x0d, 0xef, 0x3c, 0x29, 0x89, 0x7c, 0x27, 0x7c, 0x4a, 0x94, 0x8b, 0x1f, 0x4d, 0xa6, 0xb9, /* S */ 0x21, 0xad, 0x0a, 0xbb, 0x27, 0xbd, 0x3c, 0x21, 0x16, 0x6c, 0xb9, 0x6a, 0xef, 0x70, 0xc0, 0xdb, 0xd5, 0xf3, 0x07, 0x9c, 0xab, 0x0d, 0xd5, 0x43, 0xd4, 0x12, 0x5b, 0xd1 }; #define ac_dsa_vect92_prime ac_dsa_vect91_prime #define ac_dsa_vect92_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect92_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect92_ptx[] = { /* Msg */ 0xda, 0x5e, 0x7b, 0x05, 0x1c, 0x18, 0x59, 0xd2, 0x2f, 0x2a, 0x31, 0x63, 0x33, 0x5d, 0x27, 0x79, 0x51, 0x97, 0x3c, 0x17, 0x2e, 0x06, 0x69, 0x7c, 0x04, 0x90, 0xff, 0x15, 0xb5, 0x92, 0xc1, 0xeb, 0xd0, 0xfa, 0x5e, 0xfa, 0x24, 0x63, 0x11, 0x98, 0x04, 0xa3, 0xfe, 0xa2, 0x24, 0xb9, 0x6b, 0x46, 0x3e, 0x30, 0x08, 0x3e, 0x00, 0x29, 0x49, 0xa2, 0x4e, 0x92, 0x20, 0x31, 0x76, 0x4b, 0xb3, 0xda, 0xff, 0x81, 0x01, 0xfa, 0x08, 0x8a, 0xf5, 0x45, 0x7a, 0xf3, 0x66, 0x54, 0xc6, 0x68, 0xf2, 0x34, 0xa0, 0x0c, 0xd8, 0x28, 0xcc, 0x74, 0x0a, 0x89, 0x8c, 0x0c, 0xd3, 0xdf, 0x09, 0x31, 0x5d, 0xa9, 0xb3, 0x46, 0xb3, 0x25, 0xb2, 0xfb, 0xec, 0x47, 0x52, 0x10, 0xb7, 0x54, 0x82, 0xaf, 0xfa, 0x61, 0xa3, 0xef, 0xf5, 0x0c, 0x83, 0xc3, 0xa0, 0x39, 0xfa, 0xe5, 0xcf, 0xa8, 0xd9, 0x71, 0xfd, 0xdd }; static const uint8_t ac_dsa_vect92_priv_val[] = { /* X */ 0x9d, 0x8b, 0xba, 0x12, 0x44, 0x17, 0xc1, 0x26, 0xc1, 0xc0, 0x11, 0x11, 0x59, 0x06, 0xa7, 0xbd, 0xb7, 0xa4, 0x93, 0x66, 0x1d, 0x8a, 0x94, 0x5e, 0x32, 0xcb, 0x28, 0x3c }; static const uint8_t ac_dsa_vect92_pub_val[] = { /* Y */ 0x5e, 0x27, 0x69, 0x87, 0xb8, 0x47, 0xb8, 0x52, 0xcc, 0x37, 0x2e, 0x98, 0x6e, 0x8a, 0xba, 0x06, 0x33, 0xdd, 0x46, 0xc4, 0x61, 0xba, 0xb5, 0x8a, 0xca, 0xe0, 0x56, 0xd4, 0xd1, 0xa9, 0xdf, 0x03, 0xa1, 0x9d, 0xf1, 0x14, 0xf6, 0x48, 0xb2, 0x8e, 0x03, 0x85, 0x06, 0xfd, 0x09, 0xad, 0x0d, 0x95, 0x44, 0x9d, 0x9d, 0x80, 0x58, 0xaa, 0x1b, 0x24, 0x1b, 0x2a, 0xcd, 0x3b, 0xad, 0xbf, 0x98, 0x82, 0x69, 0x73, 0x31, 0xde, 0x45, 0xb4, 0x52, 0x34, 0x5c, 0x05, 0x1c, 0x2c, 0xd8, 0x30, 0xf7, 0xcd, 0xd7, 0x48, 0x6b, 0x11, 0x66, 0xb9, 0x38, 0x91, 0xa7, 0x2a, 0x8b, 0x7d, 0xc6, 0x22, 0x8b, 0xad, 0x70, 0x87, 0x20, 0xef, 0x33, 0x23, 0x58, 0x01, 0xc4, 0xd4, 0xc3, 0xc4, 0xf2, 0x80, 0x36, 0xdf, 0x60, 0x29, 0xa1, 0x95, 0xd0, 0x01, 0x91, 0x24, 0xd1, 0x6f, 0xe8, 0xf7, 0x6c, 0x52, 0x5b, 0x7e, 0x8f, 0x04, 0xbf, 0x4b, 0x8d, 0x8b, 0xa6, 0xef, 0x60, 0x8e, 0x62, 0x32, 0x24, 0xfa, 0x8d, 0x98, 0x84, 0x20, 0xf4, 0x05, 0x26, 0xc2, 0x5a, 0xe3, 0xe4, 0xc7, 0x9d, 0x5a, 0xe7, 0xfe, 0xe6, 0x97, 0x93, 0xe0, 0x2b, 0xad, 0x96, 0x51, 0xea, 0x0f, 0xef, 0xd3, 0xea, 0xdc, 0x5f, 0xf1, 0xca, 0x2d, 0x14, 0x29, 0x30, 0x35, 0x5b, 0x1f, 0x3a, 0xea, 0x10, 0x22, 0x21, 0xfa, 0x17, 0xb7, 0x35, 0xa1, 0x8a, 0xf3, 0xb8, 0x33, 0x27, 0xc8, 0xf3, 0x3e, 0xfb, 0x9a, 0x49, 0xb7, 0x02, 0x11, 0x01, 0x4e, 0xba, 0x43, 0xfa, 0x65, 0xee, 0xaf, 0x25, 0xeb, 0xf4, 0x52, 0xbc, 0x4b, 0x7d, 0xc1, 0xf4, 0x07, 0xd0, 0xcf, 0x1b, 0x83, 0x46, 0x19, 0xb5, 0xf7, 0x3c, 0x6c, 0xab, 0x70, 0x51, 0xc9, 0x20, 0x70, 0xaa, 0x06, 0xf7, 0xf9, 0x40, 0x6c, 0x50, 0x7d, 0x1a, 0x15, 0xd1, 0x2c, 0x11, 0xbc, 0x83, 0x9a }; /* K = 1abaec5b4efaa83403fa970ff6027fdb596359df930a02baa12ed854 */ static const uint8_t ac_dsa_vect92_out[] = { /* R */ 0x31, 0x36, 0x15, 0x83, 0x6f, 0x0d, 0x33, 0x8d, 0x81, 0xb6, 0x70, 0xf1, 0x16, 0xa5, 0x41, 0x4d, 0x2c, 0xe9, 0x0e, 0xa5, 0xca, 0x53, 0x08, 0xba, 0x4f, 0x0c, 0x8a, 0x7d, /* S */ 0xdc, 0x1d, 0x4c, 0x3c, 0x06, 0x20, 0x3f, 0xd5, 0x98, 0xa4, 0x76, 0xc8, 0x91, 0xdf, 0xe5, 0x93, 0x41, 0x62, 0xd0, 0xd3, 0x5f, 0x37, 0xf1, 0xc0, 0x9d, 0xd6, 0x39, 0x5d }; #define ac_dsa_vect93_prime ac_dsa_vect91_prime #define ac_dsa_vect93_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect93_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect93_ptx[] = { /* Msg */ 0xf4, 0x98, 0x95, 0xb3, 0x29, 0x0d, 0x9a, 0xae, 0xb4, 0xaf, 0x61, 0x1c, 0x5e, 0x30, 0xaf, 0xc0, 0x04, 0x7d, 0xd4, 0x2c, 0x07, 0x21, 0x62, 0x11, 0xd5, 0x49, 0x77, 0xd1, 0x49, 0x7f, 0xa4, 0xee, 0x6a, 0xbe, 0x11, 0x00, 0x0d, 0x6a, 0xc0, 0x4d, 0x24, 0xb4, 0xc5, 0x0f, 0x31, 0xe0, 0x6e, 0xe8, 0xa7, 0x47, 0x74, 0xd3, 0xd3, 0x04, 0x13, 0x7c, 0xc6, 0xb1, 0x14, 0xd1, 0x45, 0x25, 0x0e, 0xe7, 0xe9, 0x4a, 0x12, 0xa1, 0xab, 0x59, 0x2a, 0xe3, 0x07, 0xef, 0x5d, 0x93, 0x0c, 0xf3, 0x91, 0x70, 0xe9, 0x75, 0x6a, 0xdc, 0x5e, 0x7b, 0xa6, 0x2a, 0x54, 0xab, 0xb6, 0xf0, 0x47, 0xb4, 0x50, 0x0b, 0x61, 0x21, 0xe1, 0xf4, 0xa9, 0x5d, 0x3c, 0x6a, 0x96, 0xf7, 0xf8, 0x33, 0x3c, 0xbb, 0x1e, 0xbe, 0xed, 0x8b, 0x4d, 0xb1, 0xa7, 0xfe, 0x75, 0xf4, 0x07, 0x1c, 0xeb, 0xfb, 0xbd, 0xfd, 0xab, 0x90 }; static const uint8_t ac_dsa_vect93_priv_val[] = { /* X */ 0xb9, 0x17, 0x4a, 0x6c, 0xb4, 0xd3, 0xb2, 0xe7, 0xe4, 0xd1, 0x68, 0x07, 0x8e, 0x92, 0x0e, 0xcb, 0x65, 0x13, 0x43, 0x22, 0x35, 0x75, 0xdd, 0x37, 0xc0, 0x67, 0x73, 0x71 }; static const uint8_t ac_dsa_vect93_pub_val[] = { /* Y */ 0x6d, 0x62, 0x25, 0x25, 0xec, 0xf5, 0x4d, 0xbe, 0xca, 0xa8, 0x11, 0x93, 0x9e, 0xe0, 0x7e, 0xf2, 0x97, 0x5d, 0x9d, 0xa9, 0xf7, 0xa3, 0xc5, 0x8b, 0xbb, 0x89, 0x3c, 0xe3, 0x88, 0x06, 0x77, 0x40, 0x4f, 0x2c, 0x6e, 0x59, 0x63, 0xb8, 0xc0, 0xb4, 0x49, 0x26, 0x01, 0xf1, 0x5b, 0xc6, 0xfd, 0xfd, 0x74, 0x7a, 0x00, 0xab, 0x83, 0x34, 0xe9, 0x05, 0x32, 0x01, 0xe1, 0xc9, 0xfb, 0xa5, 0x5f, 0xbf, 0xde, 0x36, 0xec, 0x54, 0x23, 0x75, 0x01, 0xb8, 0x74, 0x16, 0x99, 0x27, 0x71, 0xcb, 0x5a, 0xb8, 0x78, 0x1d, 0x0a, 0x96, 0x7b, 0x7f, 0x14, 0xf3, 0xd5, 0xde, 0x6b, 0x16, 0x65, 0xf6, 0x62, 0x88, 0x58, 0x78, 0xe5, 0x0a, 0xd3, 0x78, 0x27, 0xb9, 0x5c, 0x8f, 0x0e, 0x21, 0xd6, 0xbb, 0xeb, 0xc9, 0xdf, 0xd4, 0x7b, 0x29, 0x57, 0xd2, 0xfc, 0xdd, 0x1a, 0x2b, 0x25, 0xa6, 0x16, 0xe6, 0x98, 0x12, 0x9b, 0x45, 0x99, 0x8b, 0x6b, 0x6a, 0xa2, 0xa9, 0x9c, 0x1e, 0xbf, 0x42, 0x75, 0x49, 0x3e, 0x28, 0xee, 0xf1, 0xae, 0x34, 0xe9, 0xca, 0x63, 0xcd, 0x88, 0x86, 0xda, 0x58, 0x57, 0x29, 0x07, 0xaa, 0x9b, 0x71, 0x4e, 0x89, 0xbd, 0x36, 0x44, 0xa7, 0xea, 0x02, 0x9f, 0xa3, 0xa4, 0xae, 0x9c, 0x26, 0xe6, 0x65, 0xc8, 0x52, 0x96, 0x20, 0x4f, 0xdf, 0x86, 0xb7, 0xb1, 0xdd, 0x78, 0x66, 0xbc, 0x8e, 0x93, 0x85, 0xe9, 0x51, 0x8a, 0x27, 0x02, 0x48, 0x29, 0x25, 0x94, 0xc5, 0x4a, 0x4a, 0x03, 0xdc, 0x14, 0x92, 0x66, 0x4d, 0xda, 0xe5, 0x32, 0x77, 0xc6, 0xfb, 0xb9, 0xdd, 0x0c, 0xdd, 0x99, 0xbf, 0x11, 0xea, 0xf6, 0xae, 0x31, 0x92, 0x3e, 0x4f, 0x97, 0x9a, 0x7f, 0x58, 0x17, 0x99, 0xdc, 0x43, 0x2b, 0x19, 0x40, 0xf6, 0x13, 0xa7, 0xa7, 0xea, 0x68, 0x55, 0x23, 0x7f, 0x77, 0x6e, 0x91, 0xd4 }; /* K = 1c52eec9523245bd82707f2ebdb05fee6d34749f23023ba72a5a60ef */ static const uint8_t ac_dsa_vect93_out[] = { /* R */ 0x79, 0xd5, 0x44, 0xcd, 0xec, 0xfd, 0x1e, 0xc1, 0xb7, 0xd1, 0xba, 0x63, 0x22, 0xa5, 0xe0, 0xeb, 0x85, 0x8a, 0xeb, 0x4b, 0x76, 0xd5, 0xb3, 0x20, 0x2c, 0xea, 0x23, 0x3a, /* S */ 0x0e, 0xa5, 0x3d, 0xea, 0x4c, 0xcb, 0x25, 0x97, 0x8a, 0x0a, 0xf5, 0x52, 0x95, 0x98, 0x91, 0x1b, 0x47, 0xc2, 0x5e, 0x0b, 0xa3, 0xb2, 0xa0, 0x50, 0x5f, 0xd1, 0xd7, 0xfc }; #define ac_dsa_vect94_prime ac_dsa_vect91_prime #define ac_dsa_vect94_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect94_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect94_ptx[] = { /* Msg */ 0x31, 0xd7, 0x39, 0x56, 0x69, 0x14, 0x54, 0x9e, 0xb2, 0x57, 0x26, 0xbf, 0x6d, 0x4b, 0x6c, 0x67, 0x4f, 0x47, 0x9b, 0xa7, 0xa4, 0x06, 0xac, 0xd1, 0x08, 0xa1, 0x06, 0xf3, 0x6c, 0x7f, 0x52, 0x14, 0x97, 0x6d, 0xcf, 0x3a, 0xdf, 0x2c, 0x83, 0xfd, 0x26, 0xb3, 0x7d, 0x52, 0xc0, 0xb5, 0xff, 0x51, 0xe6, 0xb3, 0x81, 0x1a, 0x8d, 0xcb, 0x02, 0x6a, 0x1f, 0xbb, 0x52, 0xf9, 0x50, 0x27, 0xea, 0x60, 0x34, 0xd9, 0x11, 0x49, 0xb3, 0x0a, 0xb4, 0x92, 0x8e, 0xde, 0x26, 0xdd, 0xd6, 0x92, 0xdd, 0xb8, 0xdd, 0xd9, 0x29, 0xfb, 0xff, 0x83, 0xfc, 0x67, 0x37, 0x88, 0xfa, 0xa0, 0xba, 0x5d, 0x96, 0x7f, 0xd1, 0x33, 0x92, 0x99, 0xe5, 0x5b, 0xe5, 0x1c, 0xea, 0x80, 0x60, 0x9d, 0x2b, 0x3c, 0x34, 0x33, 0xcf, 0x71, 0x3a, 0x96, 0x86, 0xe2, 0x29, 0x33, 0x6c, 0xfa, 0x7e, 0x72, 0x0f, 0xd5, 0x30, 0x3d }; static const uint8_t ac_dsa_vect94_priv_val[] = { /* X */ 0x4c, 0xb5, 0x6c, 0x8a, 0xcb, 0x9c, 0x10, 0x70, 0x87, 0x83, 0x7e, 0xf5, 0xe0, 0x21, 0xf7, 0x7c, 0xb0, 0x15, 0x02, 0x3c, 0x8a, 0xc1, 0xec, 0x73, 0x57, 0x5e, 0x52, 0x89 }; static const uint8_t ac_dsa_vect94_pub_val[] = { /* Y */ 0x38, 0x6c, 0xbb, 0x8f, 0x7e, 0x72, 0x87, 0x51, 0xd4, 0xf6, 0xa7, 0x5f, 0x89, 0x05, 0x02, 0x98, 0x9b, 0x51, 0x22, 0x8d, 0x30, 0x39, 0xdd, 0x1a, 0xf7, 0xf2, 0xdd, 0x01, 0x86, 0xbf, 0x97, 0xa9, 0xff, 0x76, 0x3b, 0x40, 0x32, 0x3b, 0x30, 0xab, 0x0d, 0xc8, 0x1b, 0xf0, 0x9e, 0xf4, 0x8d, 0xb7, 0x2c, 0x0c, 0xfb, 0xe7, 0x72, 0xb3, 0xd3, 0x14, 0x92, 0x7e, 0xd1, 0x9b, 0xad, 0xee, 0x7b, 0x88, 0xb4, 0x9e, 0xe2, 0x94, 0x92, 0x37, 0x14, 0xad, 0xae, 0x30, 0xc9, 0x55, 0xd3, 0x7b, 0x99, 0xc1, 0xda, 0xdc, 0x4a, 0x29, 0xf0, 0xf8, 0xc2, 0xb9, 0xd1, 0x03, 0x8d, 0x17, 0x05, 0x9c, 0x58, 0x6a, 0x21, 0x2a, 0x97, 0x48, 0x72, 0x0f, 0xde, 0xc9, 0x5b, 0x42, 0x89, 0x71, 0xdf, 0x19, 0x23, 0xf0, 0x8a, 0x01, 0xd3, 0x58, 0x93, 0xd1, 0x2e, 0xd1, 0x7e, 0x0b, 0x14, 0x2e, 0xd8, 0xe9, 0xef, 0x77, 0xd4, 0x40, 0xa0, 0x1d, 0x77, 0x90, 0x5b, 0x92, 0xc5, 0x1d, 0xac, 0xe1, 0xb3, 0x45, 0xcd, 0x19, 0xf9, 0x16, 0x23, 0xa6, 0x96, 0x42, 0x88, 0xdd, 0xee, 0x6e, 0x99, 0x08, 0x19, 0x7f, 0x91, 0xda, 0x9a, 0x26, 0xf8, 0x06, 0xbb, 0x14, 0xe2, 0x37, 0x17, 0x42, 0xf8, 0x49, 0xcd, 0xc6, 0xce, 0x7a, 0x04, 0x5a, 0x70, 0x4a, 0x79, 0x2e, 0x57, 0x60, 0xd6, 0x64, 0x4e, 0xad, 0xb7, 0xcf, 0xfa, 0xba, 0x80, 0x6b, 0x05, 0x45, 0xfa, 0xe3, 0xb9, 0xfa, 0xda, 0xe4, 0xe3, 0x6b, 0xdf, 0x3b, 0x69, 0xc6, 0xdb, 0xbf, 0x0d, 0x8b, 0x05, 0x3d, 0xa3, 0x8b, 0x90, 0x4e, 0x9c, 0x4b, 0x94, 0x93, 0x25, 0xb2, 0xa0, 0x05, 0xb2, 0x49, 0x27, 0x6a, 0xc3, 0x69, 0x27, 0xb3, 0x17, 0x93, 0xf8, 0x01, 0x15, 0xb5, 0xe2, 0xf2, 0x10, 0x7f, 0x98, 0x77, 0x10, 0x38, 0x07, 0x08, 0xe2, 0xc3, 0x22, 0x89, 0x4f, 0xa8 }; /* K = d223b9e9c662ba6651cdbad84f2616fa223fa8742f783c87c2fb9e8e */ static const uint8_t ac_dsa_vect94_out[] = { /* R */ 0xc8, 0xb8, 0xa9, 0x2e, 0x8c, 0x10, 0x15, 0x05, 0xa1, 0x99, 0x1b, 0xcb, 0x02, 0xfb, 0x6e, 0x38, 0x2a, 0x3e, 0xcb, 0xae, 0xc8, 0xf4, 0x37, 0x45, 0x01, 0xb6, 0x57, 0xbe, /* S */ 0x20, 0xd1, 0x61, 0xce, 0xfd, 0x58, 0x49, 0x79, 0x22, 0x43, 0x79, 0xf2, 0x8d, 0x82, 0x7a, 0xa2, 0x19, 0xc5, 0x72, 0xf9, 0x60, 0x01, 0x47, 0xf4, 0x04, 0x8b, 0xa7, 0xcf }; #define ac_dsa_vect95_prime ac_dsa_vect91_prime #define ac_dsa_vect95_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect95_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect95_ptx[] = { /* Msg */ 0xd0, 0xa8, 0xa1, 0xca, 0x0f, 0xf2, 0xb4, 0x4b, 0x37, 0xff, 0x86, 0x00, 0x07, 0x33, 0x4b, 0x23, 0xbe, 0x49, 0x34, 0xff, 0x89, 0x05, 0x1d, 0x78, 0x7c, 0xe6, 0x9d, 0x3d, 0x7f, 0xa7, 0x34, 0xb9, 0x77, 0x9e, 0x2f, 0x0b, 0x38, 0xc2, 0x35, 0x39, 0x1a, 0x89, 0x7f, 0xb8, 0x51, 0x4b, 0x85, 0x7b, 0x99, 0x1d, 0x10, 0xe3, 0x4a, 0x00, 0xdc, 0x25, 0xb0, 0xc4, 0x38, 0x2d, 0xfb, 0x6d, 0x53, 0xaa, 0x87, 0xec, 0x17, 0x84, 0xf1, 0xca, 0xe2, 0x59, 0x92, 0x59, 0x40, 0x6d, 0x47, 0x56, 0x53, 0x98, 0x67, 0x67, 0x9d, 0x30, 0x88, 0x91, 0x3a, 0x13, 0x88, 0x71, 0xe2, 0xa4, 0x34, 0x74, 0x72, 0x22, 0xfc, 0xfa, 0xb0, 0x79, 0xd9, 0xe6, 0x55, 0xba, 0x25, 0x44, 0x63, 0xcb, 0x0c, 0x57, 0x86, 0xb9, 0x85, 0x8d, 0xc4, 0x29, 0xff, 0xda, 0xdf, 0x4c, 0x3b, 0x6a, 0x25, 0x3f, 0x90, 0xee, 0xba, 0x24 }; static const uint8_t ac_dsa_vect95_priv_val[] = { /* X */ 0x22, 0x86, 0x42, 0x4f, 0x36, 0x8e, 0x5e, 0x64, 0xba, 0xc0, 0xc9, 0x77, 0xff, 0x0d, 0x92, 0xa5, 0x60, 0xb7, 0x8e, 0x4f, 0x21, 0xb4, 0x9f, 0x3a, 0xee, 0x7c, 0xde, 0xc6 }; static const uint8_t ac_dsa_vect95_pub_val[] = { /* Y */ 0x72, 0x47, 0xd4, 0xe1, 0x25, 0x3f, 0x0b, 0x52, 0xa1, 0x38, 0x8b, 0x79, 0x48, 0x15, 0xdb, 0x61, 0xc1, 0xa3, 0x54, 0xcb, 0x0f, 0x73, 0xfd, 0x19, 0xfe, 0xde, 0x61, 0x5c, 0x1c, 0x30, 0x25, 0x84, 0x0f, 0xff, 0x20, 0x4b, 0x0c, 0x6e, 0x61, 0x0e, 0xbe, 0xf1, 0x11, 0x3d, 0xf5, 0x6f, 0x67, 0x40, 0x6b, 0xad, 0xeb, 0x99, 0x44, 0x58, 0x91, 0xdc, 0xaf, 0xe1, 0x8d, 0x28, 0xf5, 0x97, 0x12, 0x60, 0x64, 0xdd, 0xf7, 0xaa, 0xf2, 0x03, 0xb2, 0xfb, 0x0d, 0x35, 0xd2, 0xf4, 0x58, 0xbb, 0x74, 0x34, 0x1a, 0xd9, 0x37, 0x21, 0x1e, 0xdc, 0x39, 0x4e, 0xc1, 0xa3, 0xf7, 0x90, 0x9a, 0x3f, 0x97, 0x2d, 0xb2, 0x7a, 0xa1, 0x35, 0xd3, 0x1b, 0xbd, 0x7e, 0x36, 0xc2, 0xbb, 0xc3, 0x60, 0x58, 0x5e, 0x7b, 0xb6, 0xe8, 0x32, 0x76, 0x40, 0x6b, 0x95, 0x25, 0xf6, 0x88, 0xee, 0x59, 0x95, 0xe7, 0xaa, 0x8e, 0xf7, 0xa7, 0x2c, 0x27, 0xe9, 0x90, 0xd6, 0x40, 0x16, 0xb9, 0x9a, 0x0a, 0xe4, 0xd0, 0x4b, 0x2f, 0x1b, 0x7d, 0x23, 0x8a, 0xf8, 0x8a, 0xc4, 0xc2, 0xe4, 0xe0, 0xf3, 0x29, 0x4c, 0xfe, 0xe9, 0xbe, 0x24, 0x57, 0xe4, 0x89, 0x55, 0x94, 0x8c, 0xf4, 0xbb, 0x3a, 0x44, 0x5a, 0x1d, 0x77, 0x8c, 0xed, 0xfa, 0x4b, 0x86, 0xf5, 0x9f, 0x15, 0x61, 0x18, 0x03, 0x4b, 0x2b, 0x83, 0x4a, 0x9a, 0xa1, 0x21, 0xe9, 0xd4, 0x82, 0xd6, 0x92, 0x22, 0x92, 0x82, 0x3b, 0xe2, 0x99, 0x1b, 0x3b, 0x5b, 0x42, 0xc2, 0x39, 0x25, 0xda, 0x29, 0x4d, 0x5e, 0xa3, 0x74, 0x06, 0xea, 0xf7, 0x8b, 0x7d, 0xc7, 0x25, 0x19, 0xd8, 0xf2, 0x61, 0x48, 0x2d, 0x6a, 0xff, 0xf0, 0xe5, 0x67, 0xbf, 0x6e, 0x67, 0x3d, 0xd8, 0x99, 0x60, 0xce, 0x73, 0x4f, 0x09, 0x2d, 0x98, 0x95, 0x63, 0x52, 0x42, 0x9a, 0x91, 0x84, 0x56, 0x94 }; /* K = c2795f65f0f077e32c022a703f7eb8e5dc068fa67cb087ef366b243a */ static const uint8_t ac_dsa_vect95_out[] = { /* R */ 0x9d, 0xab, 0xff, 0x22, 0xa4, 0x30, 0x12, 0xdb, 0xf4, 0x7d, 0x56, 0xb9, 0xae, 0x5a, 0x09, 0xf4, 0xd7, 0x39, 0xdd, 0x69, 0xfe, 0x90, 0x77, 0x25, 0xaf, 0xcd, 0x84, 0xf4, /* S */ 0xb6, 0x0c, 0x44, 0x72, 0x8e, 0x4b, 0x13, 0x90, 0xf3, 0x02, 0x38, 0xfb, 0xa1, 0xdc, 0x10, 0x03, 0xfd, 0xd3, 0x95, 0x07, 0xff, 0x5d, 0x6b, 0xa7, 0xe6, 0x09, 0xf2, 0xae }; #define ac_dsa_vect96_prime ac_dsa_vect91_prime #define ac_dsa_vect96_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect96_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect96_ptx[] = { /* Msg */ 0xe4, 0xff, 0xe7, 0x2c, 0x77, 0xc3, 0xa4, 0x3a, 0xf8, 0xa6, 0x1f, 0x58, 0xf9, 0x24, 0x0e, 0x1a, 0x07, 0xb5, 0xc2, 0x89, 0x4d, 0x5b, 0xdb, 0x65, 0x4b, 0x2b, 0x99, 0x4d, 0xc0, 0xc9, 0x87, 0xba, 0xd9, 0xb7, 0x04, 0x07, 0x5d, 0x3d, 0x0a, 0x96, 0x9c, 0xec, 0xfc, 0x98, 0xb1, 0xdc, 0x20, 0xe7, 0x6c, 0xd8, 0xe0, 0x12, 0x28, 0x58, 0x19, 0x46, 0x22, 0x26, 0xa8, 0x4d, 0xcd, 0xd6, 0x78, 0x95, 0xf6, 0xea, 0x27, 0x82, 0x66, 0xf1, 0x57, 0x5e, 0xa7, 0x85, 0xa2, 0xc3, 0x59, 0xf8, 0xf4, 0x59, 0x3b, 0xef, 0x31, 0xa5, 0x80, 0x91, 0xb6, 0x4a, 0xfb, 0x84, 0xcd, 0xfd, 0x23, 0xe4, 0xaa, 0xff, 0x29, 0xd9, 0x62, 0x6f, 0x0c, 0x82, 0x3d, 0x93, 0x42, 0x83, 0xa4, 0xfa, 0xaf, 0xc9, 0xc6, 0xcc, 0x18, 0x62, 0x23, 0x28, 0xca, 0xd9, 0x6f, 0x77, 0xd7, 0x9b, 0x9b, 0xa3, 0x5a, 0x43, 0xd8, 0x25 }; static const uint8_t ac_dsa_vect96_priv_val[] = { /* X */ 0x86, 0xb0, 0xe5, 0x64, 0xef, 0x08, 0xe0, 0x89, 0xc4, 0xc8, 0x56, 0x75, 0xb6, 0xe5, 0x28, 0x1d, 0xaa, 0x4e, 0x82, 0xbc, 0x2f, 0xc0, 0xe2, 0x76, 0x68, 0x05, 0x2e, 0x4e }; static const uint8_t ac_dsa_vect96_pub_val[] = { /* Y */ 0x71, 0x46, 0x00, 0x9d, 0x12, 0xb0, 0x3b, 0x2f, 0x32, 0x30, 0x5f, 0x49, 0x5f, 0xaf, 0xcc, 0x4d, 0x45, 0x2e, 0xfb, 0x85, 0xcc, 0x80, 0xd6, 0x71, 0xff, 0x42, 0x49, 0x49, 0x2c, 0x66, 0x99, 0xfb, 0x26, 0xa8, 0x9c, 0xa4, 0xb2, 0x24, 0xd5, 0x6f, 0x6b, 0x8e, 0x74, 0x5d, 0xf9, 0xfb, 0xc7, 0x35, 0x2c, 0xa5, 0x83, 0x22, 0x2f, 0x4d, 0xea, 0xb1, 0x18, 0xf9, 0xfe, 0xc0, 0xb3, 0x4e, 0x33, 0x40, 0x60, 0xbd, 0xc2, 0x8d, 0xb8, 0x72, 0xe0, 0x09, 0x06, 0x49, 0x14, 0x94, 0x99, 0xe7, 0xa1, 0xc1, 0x97, 0x87, 0x8d, 0x3c, 0x72, 0x62, 0x43, 0x93, 0x03, 0xb9, 0x02, 0x01, 0xd0, 0xb7, 0xf5, 0xbe, 0x94, 0xd0, 0xa7, 0xc4, 0xeb, 0x15, 0x18, 0x29, 0x35, 0x29, 0x6c, 0x3e, 0x3f, 0xa2, 0xd7, 0x7d, 0x74, 0xd7, 0x8f, 0x41, 0xca, 0xda, 0xa4, 0x0e, 0xaf, 0xd4, 0x0d, 0x01, 0x78, 0x88, 0xca, 0xa0, 0x2a, 0x47, 0x48, 0x68, 0xe4, 0x0f, 0x49, 0x6b, 0x7b, 0xc1, 0xce, 0x36, 0x7f, 0x50, 0x34, 0x35, 0xe0, 0xd9, 0xa6, 0x37, 0x5a, 0xab, 0x03, 0xc2, 0x31, 0xd9, 0xcd, 0xaa, 0x15, 0xde, 0x23, 0xc4, 0x8a, 0xc0, 0x87, 0x8e, 0xf6, 0x49, 0xeb, 0x14, 0x4c, 0xe6, 0xbe, 0x4d, 0x2d, 0xe1, 0x1d, 0xa2, 0x02, 0xfa, 0xe8, 0x20, 0x90, 0x67, 0x3c, 0x83, 0xb3, 0x28, 0x40, 0xa3, 0x2d, 0xf6, 0x17, 0x6e, 0x1d, 0x55, 0x02, 0x7d, 0x7a, 0x1c, 0x1c, 0x56, 0xe6, 0x42, 0xf5, 0x1a, 0xae, 0xcc, 0xb3, 0xc9, 0x90, 0x89, 0x80, 0x61, 0xbf, 0xa1, 0x6b, 0x3d, 0xc1, 0x46, 0x10, 0x73, 0xc3, 0x33, 0x33, 0x7f, 0xd7, 0x6a, 0x31, 0x03, 0xf3, 0xfd, 0xe8, 0x21, 0xbc, 0x99, 0x4e, 0xbe, 0xdd, 0x6f, 0xfd, 0x79, 0x74, 0xd0, 0xca, 0x1b, 0x54, 0x96, 0x1d, 0x7d, 0xf5, 0xb9, 0xee, 0xbb, 0xfa, 0x26, 0xc3, 0xd6 }; /* K = 5aba2fdf6b24bf24151943a4f32d2794e44d1f62e8c968ceb5b073c7 */ static const uint8_t ac_dsa_vect96_out[] = { /* R */ 0x4a, 0x2a, 0xbc, 0x68, 0x9d, 0x2a, 0x63, 0xe8, 0xb2, 0x32, 0x14, 0xa3, 0x21, 0x2a, 0x5d, 0x20, 0xa7, 0x38, 0x68, 0x82, 0xd5, 0xe1, 0x1c, 0x5d, 0x5d, 0xaa, 0x66, 0xbc, /* S */ 0x08, 0xe0, 0xc6, 0x54, 0x70, 0x87, 0xb5, 0x8b, 0xc9, 0x4f, 0xae, 0x24, 0x7e, 0x96, 0x2d, 0xa1, 0xa2, 0x89, 0x78, 0x88, 0xd1, 0xbc, 0x9c, 0x8c, 0xbf, 0x3a, 0xd6, 0xaf }; #define ac_dsa_vect97_prime ac_dsa_vect91_prime #define ac_dsa_vect97_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect97_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect97_ptx[] = { /* Msg */ 0xf8, 0xfe, 0xc1, 0x92, 0x88, 0xf3, 0xa8, 0xbd, 0x1d, 0x0d, 0x57, 0x3b, 0xbb, 0xc1, 0x80, 0x10, 0x60, 0x65, 0x69, 0x74, 0x81, 0xbe, 0xd9, 0x12, 0xf8, 0x75, 0x27, 0x50, 0xd3, 0x31, 0xe3, 0xa0, 0x97, 0x77, 0x5a, 0x12, 0x27, 0x6b, 0xc4, 0x29, 0x3a, 0x78, 0xa8, 0x07, 0x48, 0xb2, 0xb2, 0xc3, 0x7d, 0x20, 0xb8, 0x00, 0x33, 0x5c, 0x1d, 0x1b, 0x43, 0x0a, 0x71, 0xbb, 0xdf, 0xd8, 0xf7, 0xaf, 0xee, 0xec, 0x82, 0xce, 0xff, 0x2f, 0xd3, 0x3f, 0x26, 0x24, 0xe4, 0x9d, 0x37, 0x45, 0x7f, 0x26, 0x2c, 0xf5, 0xde, 0xde, 0xf9, 0x02, 0x5c, 0xe9, 0x6e, 0x0b, 0x7d, 0x49, 0x9f, 0xcc, 0x7a, 0x7f, 0xf0, 0x6c, 0x02, 0x59, 0x0e, 0xa8, 0x21, 0xdd, 0x8e, 0xd0, 0x60, 0xca, 0xbc, 0xf4, 0xfe, 0xec, 0x95, 0x92, 0xac, 0xed, 0xdf, 0xd3, 0x2b, 0x4c, 0x09, 0xe4, 0xd4, 0x49, 0x38, 0x43, 0x5b, 0x82 }; static const uint8_t ac_dsa_vect97_priv_val[] = { /* X */ 0xe5, 0xad, 0xa2, 0x9e, 0x91, 0xcc, 0xae, 0x11, 0xfd, 0x06, 0x01, 0x12, 0x54, 0x0e, 0xac, 0x31, 0xd9, 0x65, 0x1b, 0x34, 0xb2, 0x75, 0x4e, 0xe5, 0x16, 0x20, 0x62, 0x4c }; static const uint8_t ac_dsa_vect97_pub_val[] = { /* Y */ 0x7e, 0x50, 0x01, 0x1d, 0x42, 0x29, 0x86, 0xea, 0xe0, 0x1a, 0xe6, 0x89, 0x43, 0xdc, 0xa0, 0xc8, 0x7a, 0xf4, 0x4f, 0x7b, 0x87, 0x9b, 0xd1, 0x25, 0x6d, 0x4c, 0xaf, 0xfa, 0x0e, 0xb1, 0x92, 0x50, 0x29, 0xc0, 0x63, 0x3a, 0x7a, 0xc6, 0x74, 0x87, 0xa7, 0xb6, 0xf9, 0x8a, 0xd7, 0x7e, 0xe7, 0xe1, 0x44, 0x2d, 0x12, 0x9d, 0x06, 0xdb, 0x47, 0x5a, 0x4f, 0x78, 0x04, 0xfd, 0x8c, 0x6a, 0x03, 0x81, 0x51, 0x91, 0x1f, 0x81, 0x39, 0x7e, 0x96, 0x35, 0x94, 0xb9, 0xc9, 0x1e, 0x3b, 0xfe, 0x94, 0x32, 0x8f, 0x05, 0x6e, 0x9b, 0xdb, 0xb9, 0xb1, 0x1f, 0x54, 0x93, 0x9d, 0x7e, 0x23, 0x7a, 0xaf, 0xb0, 0xc9, 0x50, 0xe0, 0x58, 0x1c, 0xab, 0xfe, 0x94, 0xbc, 0x26, 0xf0, 0xe0, 0xd5, 0x56, 0x09, 0x97, 0xbf, 0xb0, 0xf6, 0x35, 0x7b, 0xbf, 0x2c, 0xad, 0xb0, 0x10, 0x8e, 0xc0, 0x09, 0x56, 0x46, 0xe4, 0xca, 0xa2, 0x2f, 0x71, 0xe1, 0xf1, 0x7a, 0x9f, 0x34, 0xe8, 0xa8, 0xc4, 0xb7, 0x1c, 0xf0, 0xb1, 0x26, 0x5e, 0x00, 0x15, 0x54, 0xfa, 0x91, 0xf1, 0x8a, 0x17, 0x56, 0x2b, 0xc0, 0x94, 0x8c, 0x43, 0x1f, 0x25, 0x94, 0x59, 0x62, 0xba, 0x7f, 0xaf, 0x7d, 0xcb, 0x64, 0xff, 0x0b, 0x8b, 0xdd, 0xe7, 0x01, 0xe1, 0xdf, 0x62, 0x0a, 0x11, 0xaa, 0xd0, 0x71, 0x96, 0xd6, 0x7a, 0x95, 0x6e, 0xbe, 0x49, 0x8a, 0xe6, 0xf8, 0x23, 0x24, 0xf7, 0x5c, 0xaf, 0xbe, 0x80, 0xed, 0xaa, 0xbe, 0xf0, 0x03, 0x7b, 0x79, 0xc3, 0xed, 0x65, 0x8d, 0x9b, 0xa1, 0xb5, 0x42, 0x2c, 0x4a, 0xc0, 0x53, 0xba, 0x69, 0xbb, 0xaf, 0x7f, 0xa9, 0xdb, 0x99, 0x0e, 0x8b, 0x5e, 0x7f, 0x9a, 0xf5, 0x7a, 0x79, 0xf3, 0xe3, 0x1c, 0x07, 0x61, 0x1f, 0x50, 0x2b, 0x30, 0x15, 0x96, 0x2b, 0x02, 0xb6, 0xb4, 0x25, 0x70, 0x6e, 0x0a }; /* K = cf0544a08823ea2ad5f13716b43b154aa4bf80d6bbcafe6040ad91c3 */ static const uint8_t ac_dsa_vect97_out[] = { /* R */ 0x2f, 0x38, 0xc5, 0xcf, 0x86, 0xaa, 0x0e, 0x53, 0xd1, 0xfe, 0xa0, 0xe6, 0x5d, 0xd0, 0x38, 0x13, 0x64, 0x04, 0x04, 0xb8, 0xd9, 0xa8, 0xcd, 0x6d, 0x26, 0x4d, 0x92, 0x85, /* S */ 0x47, 0x60, 0x38, 0x80, 0xf3, 0xd6, 0x7b, 0xa1, 0xa6, 0xea, 0xbc, 0x20, 0x13, 0x7d, 0xc4, 0x88, 0x2e, 0x41, 0x73, 0x04, 0xcb, 0x95, 0xd6, 0x22, 0x17, 0x7d, 0xf5, 0x11 }; #define ac_dsa_vect98_prime ac_dsa_vect91_prime #define ac_dsa_vect98_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect98_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect98_ptx[] = { /* Msg */ 0x75, 0x59, 0x46, 0x5a, 0xf5, 0xca, 0x04, 0xc1, 0xe7, 0x4d, 0xeb, 0x9f, 0x8e, 0x46, 0xb0, 0xef, 0x17, 0xde, 0x4d, 0x7a, 0x2a, 0xe0, 0xfa, 0xf4, 0xe9, 0x03, 0xa2, 0x99, 0x8b, 0xca, 0xa0, 0x9b, 0x7f, 0x17, 0x30, 0x39, 0x33, 0x20, 0xeb, 0xc5, 0x7d, 0x05, 0x2d, 0x2e, 0x98, 0xf5, 0x48, 0x6e, 0x8e, 0x92, 0xbd, 0x1e, 0xe6, 0xbb, 0x0f, 0xfd, 0x02, 0xd6, 0x9e, 0x5d, 0x45, 0x91, 0xe2, 0xfa, 0x12, 0xe4, 0xeb, 0xff, 0x8b, 0x6b, 0x9d, 0x32, 0x70, 0xfc, 0x75, 0x27, 0x4f, 0x8f, 0x82, 0xe1, 0xc6, 0x0e, 0xdb, 0x2a, 0x21, 0xf8, 0xd5, 0x53, 0x1a, 0x23, 0x80, 0xcb, 0xeb, 0xb2, 0x4f, 0x64, 0x57, 0x17, 0x6e, 0x54, 0x76, 0x9a, 0x13, 0x66, 0x01, 0xa9, 0xb8, 0x1d, 0xa6, 0x8f, 0xf1, 0x96, 0xff, 0x8c, 0xc7, 0x8c, 0xf0, 0x59, 0xc0, 0x4a, 0xe2, 0x24, 0x59, 0xce, 0xc7, 0xda, 0x89, 0xb6 }; static const uint8_t ac_dsa_vect98_priv_val[] = { /* X */ 0x6b, 0xa8, 0x14, 0xfb, 0x6c, 0x1d, 0x9f, 0xe5, 0xd2, 0x82, 0x00, 0x8d, 0xcc, 0x9a, 0xf2, 0x76, 0x1d, 0x1b, 0x03, 0xeb, 0x1f, 0xd0, 0x2e, 0x24, 0x99, 0xc1, 0xb5, 0x09 }; static const uint8_t ac_dsa_vect98_pub_val[] = { /* Y */ 0x5b, 0xcd, 0x42, 0xe5, 0x86, 0xca, 0x18, 0x0f, 0x74, 0x33, 0x95, 0xfc, 0x39, 0xe2, 0xbd, 0x39, 0x38, 0x20, 0xf5, 0xb4, 0xc4, 0x9c, 0x7c, 0xb7, 0x69, 0x21, 0xec, 0x38, 0xbb, 0x53, 0xe8, 0x64, 0xfb, 0xe8, 0x09, 0xa0, 0x33, 0x77, 0x5f, 0x16, 0xc7, 0xf5, 0xc6, 0x48, 0x72, 0xfe, 0xdd, 0xe6, 0xab, 0xc5, 0x60, 0x48, 0x8e, 0x57, 0x29, 0x55, 0xed, 0xd3, 0xf9, 0x56, 0x90, 0x92, 0x07, 0x1e, 0x56, 0xdf, 0x21, 0x15, 0x64, 0xf3, 0x31, 0x85, 0xdb, 0xff, 0x18, 0x0e, 0x7a, 0xb2, 0x29, 0x77, 0x00, 0xc6, 0x4d, 0xb6, 0xe2, 0x20, 0x70, 0x1c, 0xb8, 0xa2, 0x1e, 0xad, 0x2e, 0xa8, 0x09, 0xf0, 0x6a, 0x16, 0x55, 0x43, 0x19, 0xb2, 0x73, 0x9d, 0xe2, 0xac, 0xa8, 0x05, 0x7a, 0x62, 0xd4, 0xca, 0xa7, 0x95, 0x7a, 0x2b, 0x9f, 0x03, 0x9b, 0x3c, 0x7d, 0x4f, 0xb0, 0x76, 0x1a, 0x73, 0x30, 0x2a, 0x6f, 0xbb, 0x58, 0x31, 0x00, 0xb2, 0x39, 0xd7, 0x27, 0x15, 0x8b, 0x4c, 0xdc, 0x97, 0x65, 0xfe, 0x04, 0x85, 0xaf, 0xb6, 0xa1, 0xb0, 0xac, 0x0d, 0xb5, 0x04, 0xa9, 0x47, 0xf3, 0xd8, 0x7f, 0xaa, 0x55, 0x42, 0xc6, 0xee, 0xf7, 0xa6, 0x81, 0xc5, 0xfc, 0xd2, 0x8f, 0x46, 0x36, 0x36, 0x0f, 0x55, 0x93, 0xbf, 0xf7, 0xe4, 0x33, 0xb6, 0xa3, 0x38, 0xd7, 0x7e, 0x3d, 0x63, 0xf6, 0xce, 0xff, 0x69, 0x53, 0x6e, 0x2a, 0x3f, 0xf7, 0x7a, 0xce, 0x74, 0x5b, 0x65, 0xa5, 0x16, 0x0d, 0x7f, 0xbf, 0x91, 0x05, 0xa9, 0x0f, 0x46, 0xce, 0x1c, 0x54, 0xfa, 0x35, 0x3c, 0x8a, 0xee, 0xbe, 0x16, 0xfb, 0x23, 0x8c, 0x8e, 0xd9, 0x98, 0x61, 0x7b, 0x63, 0x28, 0x75, 0x11, 0x20, 0x8d, 0x9d, 0xb3, 0xf6, 0x6d, 0x50, 0x33, 0x74, 0xbb, 0xda, 0x48, 0xa5, 0x52, 0xd0, 0x4b, 0x2c, 0x30, 0x4a, 0x15, 0xba, 0xc0 }; /* K = 70af9c79fad2b3a0677fccadd95e6f72eb8a51464e443d1e5c007f98 */ static const uint8_t ac_dsa_vect98_out[] = { /* R */ 0xc5, 0xd3, 0x3f, 0x5a, 0x4f, 0xe2, 0x28, 0x0a, 0x9b, 0x96, 0xd7, 0xa9, 0xb5, 0x53, 0x0d, 0xc1, 0x7c, 0xd1, 0x05, 0x4b, 0xf1, 0xe8, 0xcf, 0x6f, 0x4a, 0xa3, 0xe2, 0xac, /* S */ 0xc9, 0xbf, 0x1c, 0x06, 0x2b, 0xd1, 0xe8, 0x6f, 0x3b, 0xd3, 0xc1, 0xff, 0x58, 0x2c, 0x33, 0x27, 0x05, 0x37, 0xfa, 0x77, 0x69, 0xb9, 0x59, 0x2a, 0xef, 0x12, 0xe1, 0x04 }; #define ac_dsa_vect99_prime ac_dsa_vect91_prime #define ac_dsa_vect99_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect99_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect99_ptx[] = { /* Msg */ 0x16, 0x74, 0x82, 0x38, 0x96, 0xc5, 0xa7, 0x64, 0xc6, 0x1f, 0xd1, 0x9b, 0x12, 0x5a, 0x7d, 0x6c, 0xd5, 0x8c, 0x88, 0x3d, 0x86, 0x79, 0x43, 0x91, 0x47, 0x73, 0x49, 0xf0, 0x36, 0x16, 0xd7, 0x5b, 0x69, 0x25, 0xe9, 0xdc, 0xc5, 0x53, 0xde, 0xa3, 0x70, 0x47, 0xf0, 0xcd, 0x15, 0x31, 0x68, 0xeb, 0x26, 0xe5, 0xad, 0x4b, 0x8f, 0xe7, 0xcc, 0x65, 0xe4, 0xfa, 0x27, 0x55, 0x14, 0xc8, 0x42, 0xaf, 0x63, 0x50, 0x7f, 0x90, 0x1f, 0xd1, 0x10, 0xb9, 0x82, 0x49, 0x13, 0x3d, 0x3d, 0x12, 0x66, 0xd2, 0xf9, 0x67, 0xc8, 0x5b, 0x7f, 0x88, 0xdd, 0x76, 0xc7, 0xf7, 0x6b, 0x78, 0x6b, 0x55, 0x72, 0xdc, 0xae, 0x68, 0xcc, 0x64, 0x6e, 0x45, 0x8b, 0x82, 0x78, 0xdb, 0x34, 0x6b, 0x2e, 0x97, 0x0c, 0x78, 0x70, 0xcf, 0xfd, 0x84, 0x57, 0xfb, 0xec, 0x06, 0xbb, 0xb5, 0x14, 0x15, 0x75, 0xf4, 0x0f, 0xde }; static const uint8_t ac_dsa_vect99_priv_val[] = { /* X */ 0xb5, 0xa6, 0x07, 0x13, 0x6e, 0x5d, 0xfa, 0x76, 0x64, 0x5f, 0x4f, 0xee, 0x9d, 0xb1, 0x7b, 0xbc, 0xd2, 0x60, 0xb1, 0xf6, 0x02, 0x3f, 0x28, 0x47, 0x49, 0x21, 0x71, 0x4b }; static const uint8_t ac_dsa_vect99_pub_val[] = { /* Y */ 0x5c, 0x34, 0x13, 0x5c, 0x90, 0xf9, 0x7e, 0xbc, 0x9b, 0xf1, 0xed, 0x98, 0x6e, 0xba, 0x56, 0x3e, 0x32, 0xce, 0x8c, 0x25, 0xae, 0x71, 0x41, 0xdf, 0xef, 0xca, 0x86, 0x00, 0xad, 0x2f, 0x3c, 0xbe, 0x8e, 0x45, 0xb4, 0xa0, 0x10, 0xae, 0x49, 0x97, 0x82, 0x0a, 0x38, 0xb4, 0x88, 0x81, 0x87, 0xbf, 0x20, 0x7b, 0xde, 0x43, 0x8a, 0x1e, 0xc7, 0xbe, 0xff, 0xf8, 0x1a, 0x64, 0x26, 0x5a, 0x4c, 0xe9, 0x90, 0x0b, 0x37, 0xa3, 0x8e, 0x4f, 0xc2, 0x36, 0x13, 0x88, 0x7b, 0x63, 0x8a, 0x11, 0x3e, 0xf4, 0x16, 0x65, 0xad, 0x2b, 0x1f, 0x15, 0x76, 0x4c, 0xb5, 0x36, 0x07, 0xd0, 0xee, 0xc3, 0x03, 0xac, 0x48, 0xc0, 0x55, 0xf5, 0xaa, 0xda, 0xbc, 0xfb, 0xe2, 0xc5, 0xfa, 0xa8, 0x5e, 0x02, 0x9c, 0x43, 0xe1, 0x60, 0x7a, 0x3a, 0x29, 0xf6, 0x58, 0x02, 0x95, 0x9b, 0x68, 0x6b, 0x46, 0x8e, 0x81, 0x07, 0xc4, 0x66, 0xa7, 0x31, 0x7b, 0x50, 0x63, 0xe0, 0x38, 0x02, 0x19, 0x75, 0xb2, 0xf0, 0x17, 0xf1, 0xf3, 0xba, 0xd0, 0x7c, 0xd0, 0xeb, 0xb4, 0x87, 0x96, 0x41, 0x51, 0xe4, 0xf8, 0x2b, 0xb5, 0x27, 0x7c, 0x35, 0xa2, 0x18, 0xec, 0x57, 0x0c, 0xb5, 0x68, 0xad, 0x04, 0x04, 0xa3, 0x71, 0x3a, 0xb7, 0xfc, 0xc1, 0x29, 0x7b, 0x1e, 0xa9, 0x74, 0x3f, 0x85, 0xac, 0x5d, 0x5a, 0x7e, 0xc8, 0x18, 0xe5, 0xf9, 0x0a, 0x4a, 0x58, 0xf2, 0xc2, 0x19, 0x2b, 0xba, 0x6d, 0xff, 0xec, 0xbc, 0xd3, 0x9f, 0x24, 0x5c, 0xc9, 0x32, 0x95, 0x31, 0x90, 0xee, 0x35, 0x3a, 0x0c, 0xa9, 0x9d, 0xc6, 0x1e, 0xac, 0x4b, 0x4f, 0x83, 0x46, 0x18, 0x14, 0x0c, 0x9a, 0x32, 0xec, 0xa3, 0x1d, 0x71, 0x8c, 0x95, 0xee, 0x03, 0xb2, 0x99, 0x2c, 0x63, 0xa6, 0x83, 0xb0, 0x62, 0x88, 0x83, 0xa5, 0xc2, 0x22, 0xfd, 0xde, 0xf0 }; /* K = 02e860266b3b7919a3d74f37f4fa9054f62f37959ee1ce66baea3b15 */ static const uint8_t ac_dsa_vect99_out[] = { /* R */ 0xb1, 0xa9, 0x46, 0xfa, 0x42, 0xa3, 0x6d, 0x83, 0x6d, 0xaa, 0xb5, 0x6f, 0xe0, 0x15, 0xc9, 0xf2, 0x9c, 0x45, 0x44, 0xa4, 0xa4, 0x7d, 0x48, 0x2e, 0xa2, 0xd9, 0xcc, 0x5b, /* S */ 0xe2, 0x90, 0x5e, 0xe7, 0x0a, 0x5d, 0xc0, 0x99, 0xb7, 0xe0, 0xba, 0xec, 0x55, 0x66, 0xb2, 0x29, 0xe9, 0xca, 0x8e, 0x7e, 0x00, 0x84, 0x09, 0x66, 0xcf, 0x56, 0xc4, 0xd5 }; #define ac_dsa_vect100_prime ac_dsa_vect91_prime #define ac_dsa_vect100_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect100_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect100_ptx[] = { /* Msg */ 0x28, 0x1f, 0xd1, 0x4a, 0xe2, 0xe7, 0x02, 0xdb, 0xd2, 0x5f, 0x77, 0xd8, 0xba, 0x8a, 0xf0, 0x9f, 0xdd, 0x77, 0xb1, 0x83, 0x96, 0x48, 0xab, 0x9c, 0x88, 0x0b, 0xd1, 0x19, 0xd4, 0x47, 0x53, 0x78, 0xfc, 0xd0, 0xd1, 0x24, 0x15, 0xab, 0xb9, 0xf2, 0x6b, 0xfb, 0x8e, 0x26, 0xf1, 0x08, 0xb1, 0x29, 0x88, 0x59, 0x23, 0x5e, 0xd1, 0x2e, 0x7f, 0x9e, 0x91, 0x56, 0x28, 0xe3, 0xca, 0x36, 0xc5, 0x98, 0x6d, 0x18, 0x81, 0x1a, 0x59, 0x05, 0xae, 0xf7, 0x87, 0x8c, 0x63, 0x00, 0xa9, 0x5e, 0xa8, 0x71, 0x82, 0x01, 0x6e, 0xc5, 0x95, 0xd3, 0x2e, 0x4d, 0xfc, 0x27, 0x4a, 0xdb, 0x47, 0xc3, 0xed, 0x0f, 0x6c, 0x38, 0xec, 0x89, 0x3b, 0x33, 0x1f, 0x70, 0x92, 0xf1, 0x9b, 0x72, 0x4b, 0x9f, 0xe4, 0x3f, 0x0e, 0xf8, 0xde, 0xc1, 0x4f, 0xb7, 0xbf, 0x8b, 0x90, 0x41, 0xb5, 0x39, 0x0b, 0xeb, 0x44, 0x08 }; static const uint8_t ac_dsa_vect100_priv_val[] = { /* X */ 0x27, 0x2b, 0x54, 0xa7, 0x7c, 0x97, 0xfd, 0xfa, 0xaa, 0xdf, 0x12, 0xee, 0x05, 0xe1, 0x27, 0x9f, 0x65, 0xe8, 0x74, 0x8e, 0xf8, 0x73, 0xc4, 0x07, 0x37, 0x2a, 0xaf, 0x80 }; static const uint8_t ac_dsa_vect100_pub_val[] = { /* Y */ 0x48, 0xed, 0x8f, 0xa8, 0x9d, 0x07, 0xde, 0xb5, 0xf8, 0xee, 0x6d, 0x38, 0x74, 0x8a, 0x4e, 0x66, 0x00, 0x20, 0x20, 0xf7, 0x9f, 0xf2, 0x2d, 0x66, 0xfa, 0x53, 0xad, 0x91, 0x3d, 0x59, 0x68, 0x60, 0xd4, 0xdb, 0xcb, 0x7c, 0x3a, 0x66, 0x33, 0xcd, 0x42, 0x24, 0xa8, 0x0e, 0x5e, 0x95, 0x90, 0x8f, 0x87, 0xb1, 0x8a, 0xcc, 0x2e, 0x36, 0x4c, 0x14, 0xb5, 0x1d, 0xe6, 0xbd, 0xda, 0x7a, 0xd8, 0x96, 0x1d, 0xfd, 0xa4, 0x54, 0xef, 0x47, 0x98, 0xd0, 0xf7, 0xa3, 0x0e, 0xf1, 0x0e, 0xae, 0x87, 0xde, 0x40, 0x86, 0x77, 0x64, 0xb8, 0x4b, 0xc5, 0x5d, 0x7c, 0x02, 0x83, 0xf9, 0xc7, 0xcd, 0x2b, 0xe0, 0x8e, 0x18, 0x52, 0x48, 0x75, 0x12, 0xff, 0x43, 0xa8, 0xd1, 0xe6, 0x8a, 0x95, 0x11, 0x97, 0xc7, 0x71, 0xf9, 0xe6, 0xc2, 0xff, 0xdf, 0x2c, 0x00, 0xed, 0x21, 0x63, 0xf8, 0x6d, 0xff, 0x52, 0x41, 0xf9, 0xe2, 0xff, 0x1c, 0xdb, 0x05, 0xa0, 0xb3, 0xe6, 0x47, 0xe6, 0xfd, 0x23, 0xcc, 0xad, 0xa8, 0x3b, 0x9c, 0x59, 0x61, 0xe6, 0xe2, 0xfe, 0xf3, 0x29, 0x74, 0x93, 0xdd, 0xb0, 0xe9, 0x90, 0x29, 0x5d, 0x38, 0x40, 0x5a, 0x24, 0x44, 0x8e, 0x24, 0x96, 0x27, 0xc0, 0xa7, 0x99, 0x8c, 0xc4, 0x07, 0x2d, 0xd2, 0x91, 0x39, 0xc5, 0x33, 0x6d, 0x98, 0x56, 0x01, 0x66, 0x42, 0x99, 0x2c, 0xd2, 0x45, 0xc7, 0x58, 0xa3, 0x03, 0x1e, 0xc2, 0x80, 0x7b, 0x17, 0x1a, 0xba, 0xee, 0xf1, 0x4c, 0x82, 0xa3, 0xda, 0xb2, 0x01, 0x75, 0x23, 0x51, 0xde, 0x2b, 0xff, 0xa5, 0x08, 0x5c, 0x13, 0x76, 0x56, 0xe4, 0x69, 0x58, 0x1f, 0x63, 0xf8, 0x63, 0x79, 0xd6, 0x28, 0x68, 0xac, 0x3e, 0x3a, 0xa2, 0x4d, 0xf9, 0x82, 0x6a, 0x83, 0x33, 0x14, 0xbd, 0x41, 0xe0, 0xd9, 0xa0, 0xae, 0x56, 0x80, 0xe6, 0xa4, 0xd2 }; /* K = bc06f559baf16de28e915dd27485338abf2bd0e62cdda5b3f1ad05f5 */ static const uint8_t ac_dsa_vect100_out[] = { /* R */ 0x5a, 0x77, 0x63, 0x96, 0x63, 0x66, 0x4e, 0x3f, 0x0b, 0x19, 0xfd, 0x58, 0x3b, 0xab, 0x6e, 0x68, 0x06, 0x88, 0xcd, 0x89, 0xd5, 0xe0, 0x12, 0xdd, 0xcb, 0x1e, 0x06, 0xbc, /* S */ 0xd4, 0x1c, 0x78, 0x4b, 0x58, 0x3c, 0xbc, 0x52, 0x5b, 0xce, 0x87, 0xc6, 0xca, 0xa4, 0x40, 0x62, 0xea, 0xc8, 0x47, 0xbc, 0xa8, 0xb0, 0x05, 0xc1, 0x2a, 0xb5, 0xe5, 0x54 }; #define ac_dsa_vect101_prime ac_dsa_vect91_prime #define ac_dsa_vect101_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect101_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect101_ptx[] = { /* Msg */ 0x50, 0x3f, 0x20, 0x42, 0x35, 0x8f, 0x7e, 0x41, 0x42, 0x96, 0xab, 0x2d, 0x41, 0xf3, 0xa1, 0xf3, 0xf1, 0x11, 0x82, 0xec, 0xa6, 0xc8, 0x2b, 0x2a, 0xe6, 0xee, 0x83, 0x3d, 0xd7, 0x37, 0xbc, 0xb3, 0x46, 0x91, 0x79, 0x3e, 0x30, 0x11, 0x00, 0x36, 0xae, 0x54, 0xd4, 0x03, 0xa5, 0xea, 0x45, 0xcb, 0xf3, 0xe5, 0x51, 0x5b, 0xbf, 0x80, 0xb1, 0xaf, 0x13, 0x98, 0x53, 0xf5, 0x06, 0x79, 0x2d, 0xf7, 0xff, 0x52, 0x35, 0x99, 0x5e, 0x08, 0x0f, 0x82, 0xb5, 0x62, 0x32, 0x6a, 0xda, 0xf3, 0x21, 0x15, 0x9a, 0xde, 0xef, 0x20, 0x38, 0x80, 0x24, 0x50, 0x9f, 0x22, 0x5e, 0x8c, 0x52, 0x35, 0x36, 0x8a, 0x7b, 0x04, 0x5d, 0x69, 0xe4, 0x72, 0xe6, 0xb2, 0xad, 0x7d, 0x47, 0x0a, 0x11, 0xf6, 0xaa, 0x8d, 0x4c, 0xa6, 0xc6, 0xcd, 0xb0, 0xf3, 0xed, 0x4e, 0x06, 0xfb, 0x9a, 0x95, 0xe2, 0xcf, 0x20, 0x0c }; static const uint8_t ac_dsa_vect101_priv_val[] = { /* X */ 0xc3, 0xff, 0x27, 0xec, 0xdb, 0x6a, 0x7d, 0xe6, 0x42, 0xfb, 0x2d, 0x2f, 0x9d, 0x93, 0xcc, 0xb5, 0x1d, 0xd0, 0x9b, 0x54, 0x3a, 0x77, 0xfb, 0x2e, 0x7a, 0x22, 0xa2, 0x9f }; static const uint8_t ac_dsa_vect101_pub_val[] = { /* Y */ 0x7e, 0x51, 0x4a, 0x04, 0xbb, 0x57, 0x5a, 0xb9, 0x3e, 0x71, 0xb3, 0x55, 0x5c, 0xdb, 0xac, 0x63, 0x4d, 0x47, 0x5c, 0x58, 0xc1, 0xd9, 0xb4, 0x80, 0x2e, 0x15, 0x3a, 0x85, 0x8d, 0x02, 0x78, 0x04, 0xea, 0x74, 0x8c, 0x29, 0x07, 0xeb, 0x99, 0x87, 0xf7, 0x8e, 0x41, 0xc6, 0x75, 0x7e, 0xd5, 0xcb, 0xf1, 0x02, 0x54, 0x4a, 0x71, 0x46, 0x99, 0xa0, 0x2a, 0x9e, 0xf1, 0x47, 0x68, 0xf9, 0x6d, 0xbb, 0xdf, 0x48, 0xf3, 0xb2, 0xb3, 0x79, 0x2e, 0xfb, 0x97, 0x3a, 0x7f, 0x91, 0xf2, 0x60, 0xe0, 0xde, 0xa2, 0x80, 0x34, 0xc9, 0x15, 0xd9, 0xd5, 0xa8, 0x7a, 0x8f, 0x98, 0x6a, 0x15, 0xf5, 0xd6, 0xf9, 0x8d, 0x7d, 0x6d, 0x35, 0xbe, 0xe7, 0xe0, 0x59, 0xae, 0xdb, 0x59, 0xfe, 0x59, 0x5b, 0xa7, 0xda, 0x17, 0xce, 0x0d, 0xb8, 0x95, 0xf3, 0x41, 0x1b, 0x83, 0x2a, 0x1e, 0x22, 0x1a, 0x83, 0x1f, 0x70, 0x65, 0x87, 0x84, 0x1d, 0x93, 0x23, 0xe0, 0xc7, 0xf4, 0x43, 0x57, 0x03, 0x12, 0x70, 0x84, 0xb2, 0x0e, 0xda, 0x9c, 0x6a, 0x24, 0x97, 0x28, 0x01, 0x90, 0xa2, 0xb5, 0x27, 0x3b, 0x23, 0x1b, 0x44, 0x48, 0x2c, 0x92, 0x53, 0x50, 0x1c, 0x66, 0xef, 0x11, 0x22, 0x25, 0x3b, 0xe4, 0xea, 0x34, 0x77, 0xff, 0x61, 0x86, 0xaf, 0x87, 0x18, 0x69, 0xaf, 0x1b, 0xa1, 0x0f, 0x6a, 0x15, 0xd1, 0xc4, 0x32, 0x94, 0x03, 0x17, 0xd1, 0x19, 0xdd, 0x76, 0x1c, 0xa0, 0x34, 0x2a, 0xb6, 0x06, 0xd5, 0x32, 0xc4, 0x71, 0x78, 0x3a, 0x4d, 0xcd, 0x6f, 0xac, 0x9b, 0x8a, 0x67, 0xa6, 0xba, 0xe1, 0x87, 0xc7, 0xdc, 0x64, 0xc7, 0x61, 0x1d, 0xed, 0x72, 0x73, 0xdc, 0x34, 0x8c, 0xd7, 0x61, 0x3a, 0x52, 0xd0, 0x26, 0x70, 0xe8, 0x77, 0xe1, 0x8d, 0x0b, 0x60, 0xc8, 0xbb, 0xdd, 0x1a, 0xdb, 0x04, 0xef, 0xf2, 0x13 }; /* K = ac8009b8bc2503f5a68d667696c7fbf66ebba6f88ed3db3504c0c9b6 */ static const uint8_t ac_dsa_vect101_out[] = { /* R */ 0x84, 0x86, 0xab, 0x31, 0xc8, 0x27, 0x8f, 0xad, 0x06, 0x91, 0xfd, 0xd6, 0xca, 0xc2, 0xf5, 0xfd, 0x79, 0x0b, 0x2f, 0x3f, 0xed, 0x52, 0xb0, 0x99, 0x86, 0x76, 0x60, 0x42, /* S */ 0xb6, 0x96, 0x7b, 0x9e, 0xac, 0xde, 0x5f, 0x48, 0x83, 0x71, 0x0e, 0xba, 0x38, 0x7b, 0x3c, 0x6f, 0xed, 0xfc, 0x91, 0x94, 0x4e, 0xa5, 0x1f, 0x6f, 0xfa, 0xb7, 0x25, 0x31 }; #define ac_dsa_vect102_prime ac_dsa_vect91_prime #define ac_dsa_vect102_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect102_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect102_ptx[] = { /* Msg */ 0x65, 0x0c, 0x3c, 0x40, 0x9a, 0x88, 0x5f, 0xa6, 0xd1, 0xac, 0x1f, 0xf4, 0x1e, 0x15, 0xf9, 0x00, 0x1f, 0x6c, 0xd6, 0xa1, 0x52, 0xc3, 0x76, 0xfd, 0x22, 0xe2, 0x85, 0x1c, 0x9c, 0xba, 0xa5, 0x35, 0x0d, 0x8a, 0x92, 0xb7, 0x40, 0x10, 0x30, 0x80, 0x93, 0x95, 0xcf, 0x0b, 0x1a, 0x0c, 0xb0, 0x3a, 0x24, 0xdc, 0x3b, 0x43, 0x47, 0x05, 0x0e, 0x85, 0x53, 0xda, 0x0e, 0x61, 0xd8, 0x1d, 0xee, 0x44, 0x02, 0xb1, 0xce, 0xc9, 0x7d, 0x89, 0x8d, 0xc6, 0x88, 0x66, 0x01, 0x02, 0x4f, 0x6b, 0xfb, 0xc4, 0x8d, 0x2f, 0x2c, 0x40, 0xbf, 0x96, 0xde, 0x9b, 0xc0, 0xe0, 0x78, 0xe4, 0x40, 0xc7, 0x71, 0xf7, 0x4e, 0x71, 0x15, 0xad, 0x22, 0xba, 0x99, 0x4a, 0xe2, 0xf8, 0x57, 0xc7, 0xfb, 0x86, 0x5e, 0xa7, 0x50, 0xb1, 0x8c, 0x79, 0xe7, 0xb0, 0x48, 0x56, 0x3b, 0xec, 0xef, 0x88, 0x98, 0xce, 0xd3, 0xdd }; static const uint8_t ac_dsa_vect102_priv_val[] = { /* X */ 0xd3, 0x9e, 0x52, 0xc3, 0x9e, 0xa4, 0x6d, 0x6c, 0xe2, 0x74, 0x67, 0x0d, 0x3e, 0x8a, 0x22, 0x87, 0x5c, 0xb9, 0x87, 0x3d, 0xaf, 0x4c, 0x2e, 0xd8, 0x3b, 0xd3, 0xbe, 0x37 }; static const uint8_t ac_dsa_vect102_pub_val[] = { /* Y */ 0x55, 0x18, 0x6d, 0xe3, 0x9e, 0x6a, 0x01, 0x31, 0xad, 0xb7, 0xd8, 0x41, 0x70, 0xa8, 0xd3, 0x6a, 0xc4, 0xbf, 0x31, 0x36, 0x16, 0xe7, 0x50, 0x22, 0x0d, 0xe3, 0x56, 0xfb, 0xb1, 0x89, 0x9d, 0xba, 0xaa, 0x65, 0x0d, 0x8d, 0xe9, 0xa7, 0xaf, 0xab, 0xf3, 0xc4, 0xdd, 0x6a, 0x3c, 0x8b, 0xac, 0x24, 0x19, 0x22, 0xac, 0xbc, 0xc4, 0xbb, 0x7f, 0xa4, 0xce, 0x5f, 0xcd, 0xb5, 0xf2, 0x31, 0xcb, 0x17, 0xa8, 0xc0, 0x97, 0x8c, 0x8e, 0x69, 0xfb, 0x82, 0xd4, 0x46, 0x83, 0xeb, 0xb9, 0xfb, 0x17, 0x89, 0x8e, 0x0b, 0xa4, 0x93, 0x91, 0x96, 0xed, 0x99, 0x80, 0xeb, 0xec, 0xab, 0xba, 0xad, 0x7b, 0x5b, 0x34, 0xcd, 0x9e, 0xc0, 0xea, 0x6d, 0xf9, 0x62, 0x43, 0x82, 0x3b, 0x1d, 0x17, 0x0e, 0xfc, 0xcb, 0x4d, 0x59, 0xbc, 0xba, 0x24, 0xce, 0x5f, 0xaa, 0xd3, 0x2d, 0x59, 0x1a, 0xd6, 0xec, 0xe0, 0x44, 0x0d, 0x2b, 0x62, 0xa2, 0x12, 0x05, 0x9e, 0x00, 0x0f, 0xb5, 0x00, 0x5a, 0xbf, 0xec, 0x12, 0x7c, 0x1e, 0x9f, 0xa7, 0xd3, 0x46, 0x9c, 0x72, 0xb8, 0x9a, 0x96, 0x97, 0x6e, 0xb4, 0x70, 0x2f, 0x09, 0xf9, 0xc0, 0xa0, 0x97, 0x1b, 0x30, 0xdf, 0xc3, 0x39, 0x07, 0x2b, 0x5e, 0x3a, 0x6c, 0xe4, 0x0b, 0xfe, 0xa2, 0xd5, 0x2f, 0x2c, 0x93, 0x0a, 0x11, 0xdd, 0x65, 0x5d, 0xd3, 0x6a, 0xc9, 0xfa, 0xd8, 0x6f, 0xc3, 0x98, 0x6b, 0x48, 0x71, 0xe7, 0xc9, 0x04, 0x59, 0xa2, 0xea, 0xa3, 0xb3, 0xd2, 0x2d, 0xd0, 0x4c, 0xb8, 0x24, 0x17, 0x3c, 0xcc, 0x08, 0x7d, 0x42, 0x9b, 0xb2, 0xa1, 0x88, 0xe0, 0x5d, 0x8a, 0xf0, 0xac, 0x29, 0x11, 0xc9, 0x07, 0xfd, 0x95, 0x7b, 0x2b, 0xb3, 0x30, 0xa6, 0xf3, 0x98, 0x7a, 0x59, 0x59, 0x30, 0xb3, 0x12, 0x05, 0x3c, 0x4b, 0xdf, 0x85, 0x6d, 0xe7, 0x29, 0x38, 0x58 }; /* K = 78683cfccca3e13d49999e7bacccb43fa33e11547014baf66b987b83 */ static const uint8_t ac_dsa_vect102_out[] = { /* R */ 0xa0, 0xc4, 0x9d, 0x3c, 0x47, 0x24, 0x0d, 0x30, 0xd2, 0x6f, 0x0c, 0x20, 0xe4, 0x50, 0x8b, 0x36, 0x0a, 0x84, 0x12, 0x85, 0xde, 0x3f, 0xc1, 0x98, 0x6f, 0x1e, 0xf9, 0xf6, /* S */ 0x97, 0xca, 0xa2, 0xb7, 0x6d, 0x15, 0xb1, 0xf9, 0xf1, 0x77, 0xe2, 0x09, 0x00, 0x4a, 0x2b, 0x1f, 0xdd, 0x23, 0xa3, 0x94, 0x50, 0x34, 0x58, 0x4c, 0x2c, 0x15, 0xbf, 0xa2 }; #define ac_dsa_vect103_prime ac_dsa_vect91_prime #define ac_dsa_vect103_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect103_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect103_ptx[] = { /* Msg */ 0x64, 0x12, 0x91, 0x53, 0xeb, 0x9c, 0xcc, 0x74, 0xcc, 0x3a, 0xae, 0x1d, 0x59, 0x99, 0xc6, 0xe9, 0x0d, 0x98, 0x6b, 0xe6, 0xfa, 0x40, 0xc6, 0xc4, 0xbc, 0x00, 0xb1, 0xc3, 0xf8, 0x07, 0x2d, 0x10, 0xa9, 0xd8, 0xe6, 0xc3, 0x14, 0xd8, 0x2a, 0x76, 0x41, 0xf8, 0xa3, 0xae, 0x29, 0xd3, 0xe7, 0xdd, 0x19, 0x42, 0xdb, 0xf0, 0xdc, 0x52, 0xb4, 0xb4, 0xb3, 0x5b, 0xb6, 0x7a, 0x99, 0x49, 0x42, 0xaf, 0xf0, 0x29, 0xca, 0x6f, 0xa1, 0x87, 0x09, 0x91, 0x5f, 0xf7, 0x20, 0xab, 0x8f, 0x65, 0xf2, 0x31, 0x15, 0x5c, 0xb1, 0xd0, 0xdb, 0xcb, 0xa0, 0x4f, 0xc5, 0x19, 0x3a, 0xfc, 0x71, 0xa5, 0xed, 0xdb, 0x4a, 0x03, 0x86, 0x7e, 0x5c, 0x4b, 0xb9, 0x2d, 0x37, 0xb7, 0xef, 0x77, 0x1d, 0xa9, 0x54, 0xec, 0x67, 0x54, 0xd5, 0xfb, 0xe2, 0xe3, 0x72, 0xb9, 0x2d, 0xf6, 0xa3, 0xea, 0x8c, 0x3a, 0x4a, 0xff }; static const uint8_t ac_dsa_vect103_priv_val[] = { /* X */ 0xa7, 0xd5, 0x66, 0x4e, 0x78, 0x1c, 0x28, 0xf4, 0x85, 0x9f, 0x5c, 0x12, 0x6c, 0xbe, 0x8d, 0x87, 0xf9, 0xb2, 0xaa, 0x00, 0x27, 0x14, 0x9f, 0x8b, 0x0a, 0x92, 0x1d, 0x46 }; static const uint8_t ac_dsa_vect103_pub_val[] = { /* Y */ 0x23, 0xf5, 0x38, 0xd4, 0xec, 0x34, 0x5f, 0xaa, 0x90, 0x6e, 0xff, 0x12, 0xf6, 0xc5, 0x94, 0x2a, 0xc1, 0x66, 0x91, 0x4b, 0xaf, 0x8e, 0x73, 0x7d, 0xaf, 0xc7, 0x1e, 0x47, 0x28, 0x55, 0x12, 0xeb, 0xc5, 0x7e, 0xbf, 0x3e, 0xc6, 0x66, 0x34, 0x2a, 0xbc, 0x05, 0x9b, 0x0e, 0xbd, 0xdb, 0x02, 0x1c, 0xea, 0xff, 0x6e, 0xf7, 0x58, 0x28, 0xc7, 0xbe, 0x37, 0x66, 0x25, 0x7f, 0x72, 0x47, 0xa6, 0x7e, 0x14, 0x08, 0x23, 0x9f, 0xa4, 0xdd, 0x1c, 0xaa, 0xc2, 0xb7, 0x22, 0x9e, 0x8c, 0x1b, 0xcf, 0xd5, 0x7a, 0xee, 0xa4, 0xc0, 0x4e, 0x15, 0x86, 0x76, 0x4e, 0x28, 0x66, 0x9c, 0x36, 0x12, 0xd8, 0xa0, 0x06, 0x58, 0x2c, 0xf8, 0xf8, 0x29, 0x10, 0x48, 0x26, 0x91, 0xc1, 0x0e, 0x41, 0x13, 0x21, 0x6f, 0xc2, 0x4f, 0xeb, 0x29, 0x9f, 0x84, 0xba, 0x58, 0x70, 0x0a, 0x3b, 0xb6, 0xfd, 0xef, 0xa1, 0x7a, 0x7f, 0xac, 0x9a, 0xa9, 0xbb, 0x41, 0x0f, 0xe4, 0x11, 0xfb, 0x29, 0x4d, 0x62, 0x94, 0x39, 0x6f, 0x7f, 0x62, 0x7d, 0xca, 0x04, 0x52, 0xef, 0x59, 0x5d, 0xc2, 0x41, 0x70, 0xc1, 0x47, 0xd3, 0x86, 0x3f, 0xc1, 0x6e, 0x23, 0x64, 0x50, 0x19, 0xac, 0xa6, 0x3f, 0xcc, 0x11, 0x52, 0xb0, 0xf7, 0x66, 0xf5, 0xf6, 0x51, 0xc9, 0xbb, 0x69, 0x9e, 0x2f, 0x50, 0x47, 0xfa, 0x1e, 0x96, 0x03, 0x97, 0x2d, 0x2c, 0x75, 0x51, 0xb1, 0x8f, 0x3b, 0x16, 0xc1, 0x06, 0xdd, 0xd6, 0xcc, 0x2e, 0x24, 0xd2, 0xd0, 0x5e, 0x79, 0x68, 0x7e, 0xfe, 0x65, 0x51, 0x02, 0xe6, 0xbc, 0x15, 0xbc, 0x3a, 0x57, 0xf6, 0x0c, 0x1a, 0x6a, 0xd2, 0x0b, 0xf1, 0xcb, 0xe6, 0x20, 0x52, 0xad, 0x09, 0x47, 0x43, 0x7b, 0x92, 0xb2, 0xc9, 0x32, 0xaf, 0x5d, 0x72, 0x77, 0x5d, 0x43, 0x18, 0x3b, 0xbc, 0x6f, 0x35, 0x9a, 0x4d, 0xf6 }; /* K = 85adc235c0060b510825ed2b436bdf003f4d63e299e973b5ddc81fc8 */ static const uint8_t ac_dsa_vect103_out[] = { /* R */ 0x3d, 0x72, 0x89, 0x62, 0xae, 0xc3, 0x58, 0x22, 0xff, 0xf9, 0x9e, 0x1b, 0x52, 0x17, 0xd8, 0xa6, 0x26, 0x4a, 0x7c, 0x60, 0x8d, 0x80, 0x66, 0xf4, 0xfc, 0xc9, 0x00, 0x8a, /* S */ 0xca, 0x5c, 0x8e, 0x17, 0x8a, 0x14, 0xba, 0x00, 0x6e, 0x93, 0xcf, 0x4a, 0xd1, 0x19, 0xf0, 0x45, 0xbb, 0xf8, 0x2b, 0x82, 0x87, 0x67, 0xd3, 0xe5, 0x83, 0xd0, 0xbd, 0x15 }; #define ac_dsa_vect104_prime ac_dsa_vect91_prime #define ac_dsa_vect104_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect104_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect104_ptx[] = { /* Msg */ 0x9f, 0xd2, 0x79, 0x1c, 0x41, 0xa2, 0xff, 0xa6, 0xdf, 0x26, 0x10, 0x98, 0x04, 0xea, 0xf0, 0x70, 0x12, 0x2e, 0x20, 0xbb, 0xb6, 0x2e, 0xcd, 0x98, 0x11, 0x55, 0x11, 0x36, 0xaa, 0x95, 0x6d, 0xc1, 0xc3, 0x21, 0x32, 0x78, 0x93, 0xa0, 0xdd, 0xe6, 0xdd, 0x1d, 0x5b, 0x3a, 0x0d, 0x2a, 0x5a, 0xa9, 0x7e, 0xd7, 0x54, 0xe5, 0xbc, 0x06, 0x67, 0x53, 0x33, 0x8d, 0xdd, 0xfc, 0x68, 0xeb, 0xa2, 0x17, 0xd2, 0x48, 0x35, 0x05, 0xb0, 0xd7, 0xc0, 0xa4, 0x37, 0x73, 0x2f, 0x80, 0x46, 0xcf, 0x3b, 0xf5, 0x93, 0x0a, 0x11, 0xef, 0xd3, 0xf6, 0x59, 0x9c, 0x0f, 0x8d, 0x46, 0x5f, 0xca, 0x76, 0x76, 0xce, 0x1f, 0x39, 0x10, 0x2c, 0xc0, 0xcd, 0xf1, 0x32, 0x81, 0xb2, 0xc7, 0xb9, 0xcf, 0x7a, 0x7a, 0xfc, 0xde, 0x68, 0x10, 0x05, 0xe5, 0xa2, 0xe4, 0xe3, 0x8c, 0xf8, 0x2e, 0x42, 0x13, 0x57, 0xa4, 0x1f }; static const uint8_t ac_dsa_vect104_priv_val[] = { /* X */ 0xdd, 0xff, 0xa0, 0xc5, 0xaa, 0xfa, 0x1a, 0xcf, 0x98, 0x29, 0x0c, 0xe6, 0xaa, 0x7a, 0x48, 0xdb, 0x2d, 0xdf, 0xec, 0x48, 0xd6, 0xea, 0x88, 0x17, 0x45, 0xf2, 0x37, 0x3a }; static const uint8_t ac_dsa_vect104_pub_val[] = { /* Y */ 0x14, 0x7a, 0xa8, 0xd9, 0xe4, 0xcc, 0xac, 0x90, 0x6d, 0x6a, 0x5a, 0x0b, 0x65, 0xbf, 0xeb, 0x59, 0xd4, 0xd6, 0x60, 0x37, 0xad, 0x40, 0xd2, 0x88, 0xd7, 0x53, 0x4f, 0xc9, 0xae, 0x33, 0xc5, 0xaa, 0x70, 0x1c, 0xa1, 0x8e, 0x60, 0xf0, 0xb6, 0x89, 0x08, 0x28, 0x05, 0x62, 0x11, 0x0a, 0xf7, 0xd1, 0xd1, 0xbf, 0xb5, 0x38, 0xc5, 0x9d, 0x91, 0x00, 0x98, 0x03, 0x84, 0xae, 0x93, 0xb7, 0x7b, 0xe0, 0x33, 0x2a, 0x03, 0xcc, 0x56, 0x7d, 0x4d, 0x63, 0x4f, 0x76, 0x48, 0xa1, 0xb9, 0xfd, 0x25, 0xda, 0xf2, 0x50, 0xb2, 0x86, 0x96, 0x83, 0xe9, 0x42, 0x6d, 0x75, 0x56, 0x1a, 0x5e, 0x17, 0x87, 0xc2, 0xba, 0xb7, 0x11, 0x32, 0x75, 0x7d, 0xff, 0xc4, 0xb7, 0x66, 0x51, 0x43, 0xe7, 0xd8, 0x7d, 0x50, 0xf1, 0x2d, 0x01, 0x07, 0x5b, 0xef, 0x5f, 0x4b, 0x0f, 0x14, 0xcb, 0x3f, 0x10, 0x9d, 0x15, 0x99, 0xe5, 0xbf, 0x94, 0xde, 0x01, 0x11, 0xa0, 0x1a, 0xf5, 0x7e, 0x8c, 0x13, 0xf5, 0x83, 0xbe, 0x4d, 0xc9, 0x00, 0x89, 0x61, 0x9c, 0x72, 0xd2, 0x2a, 0x49, 0x5c, 0x45, 0x25, 0x6e, 0xc7, 0x87, 0xa5, 0x83, 0x2d, 0x2e, 0x4c, 0x4a, 0x42, 0xf0, 0x00, 0x18, 0x37, 0xa9, 0x75, 0xac, 0x8f, 0xbb, 0x8c, 0x56, 0x5f, 0x77, 0xb2, 0x53, 0x30, 0x3b, 0x1a, 0x87, 0x33, 0x06, 0xfa, 0x5c, 0xf6, 0xa5, 0xda, 0xb6, 0x2d, 0x7b, 0x1b, 0xa3, 0xd7, 0x0d, 0xc1, 0x1b, 0x4e, 0x4f, 0x87, 0x5e, 0x3e, 0xda, 0xe5, 0x0e, 0xe8, 0xe5, 0x17, 0x8d, 0xd0, 0x9a, 0x33, 0x4c, 0xf9, 0x26, 0x0c, 0x3e, 0x0a, 0x10, 0x91, 0x1d, 0x38, 0x1d, 0x7f, 0x56, 0x01, 0xc0, 0xb3, 0xf2, 0x69, 0x46, 0x68, 0x20, 0x18, 0x62, 0x99, 0x22, 0x94, 0x6d, 0xd7, 0x3f, 0x81, 0x24, 0x08, 0x16, 0xae, 0x96, 0x06, 0x91, 0x1c, 0xbf, 0xd6 }; /* K = 3ee8b1f03687b9726de846f54618ac45f8e2d6e8957ce6996bf50c2d */ static const uint8_t ac_dsa_vect104_out[] = { /* R */ 0xa7, 0xcc, 0x74, 0x86, 0xf4, 0x7f, 0xe6, 0x2f, 0xe3, 0x25, 0x4e, 0xd6, 0x55, 0xe1, 0xc9, 0x94, 0x90, 0x2d, 0x79, 0x7f, 0x0d, 0x7c, 0xa9, 0x3f, 0xb9, 0x7d, 0xf9, 0xc1, /* S */ 0x91, 0x4b, 0xf7, 0xd1, 0x5c, 0xe2, 0xc9, 0xec, 0xc5, 0xae, 0x15, 0x0d, 0x63, 0x08, 0xfc, 0x55, 0x7d, 0x94, 0xe1, 0xef, 0x18, 0xc0, 0x86, 0x0a, 0xa6, 0x8a, 0xd4, 0x8e }; #define ac_dsa_vect105_prime ac_dsa_vect91_prime #define ac_dsa_vect105_sub_prime ac_dsa_vect91_sub_prime #define ac_dsa_vect105_base ac_dsa_vect91_base static const uint8_t ac_dsa_vect105_ptx[] = { /* Msg */ 0x6b, 0x78, 0xb4, 0xde, 0x5f, 0x75, 0x26, 0xdb, 0xed, 0x08, 0xee, 0x0f, 0xf4, 0xe4, 0x33, 0x35, 0xb6, 0x0c, 0xd3, 0xbc, 0x37, 0x1b, 0x70, 0xcd, 0x4f, 0xd9, 0xce, 0x45, 0xbf, 0x06, 0x50, 0x83, 0x91, 0x08, 0x5d, 0x14, 0x2c, 0xc3, 0x89, 0x1b, 0x17, 0x91, 0x67, 0xc7, 0x6a, 0x13, 0x50, 0xca, 0x8e, 0xf8, 0xce, 0x75, 0x4a, 0xb1, 0xd6, 0x24, 0x57, 0x2e, 0x43, 0x71, 0x95, 0x66, 0x0f, 0x00, 0x4c, 0xb7, 0xbe, 0xd2, 0xff, 0x3b, 0x0f, 0x7c, 0x7e, 0x53, 0xf8, 0x53, 0x30, 0x5a, 0x38, 0x21, 0xdf, 0xba, 0xec, 0x33, 0xe2, 0x20, 0xdf, 0x3c, 0x3e, 0xf7, 0xa7, 0x9f, 0x34, 0xe8, 0x2c, 0xc8, 0xff, 0xf8, 0x41, 0x5f, 0x10, 0x8c, 0x00, 0x0f, 0x21, 0xc3, 0xbb, 0x21, 0xa4, 0xc3, 0x32, 0x67, 0xa2, 0x13, 0xcb, 0x4a, 0x55, 0x8e, 0x3b, 0x37, 0x0d, 0x17, 0xc6, 0x39, 0x24, 0x7b, 0xff, 0xeb }; static const uint8_t ac_dsa_vect105_priv_val[] = { /* X */ 0x9d, 0xa0, 0x93, 0xf7, 0x3c, 0x71, 0x4e, 0x0b, 0x99, 0x94, 0x07, 0x8b, 0x6c, 0xc7, 0x48, 0xa6, 0x75, 0xcf, 0x4f, 0x3b, 0xbc, 0x50, 0x2a, 0x23, 0x89, 0x50, 0x97, 0xb3 }; static const uint8_t ac_dsa_vect105_pub_val[] = { /* Y */ 0x91, 0x47, 0x67, 0x0f, 0x64, 0xae, 0xdf, 0xa2, 0x46, 0x93, 0x8b, 0xa7, 0x7f, 0xb9, 0xc1, 0xac, 0x27, 0x1c, 0xa1, 0x09, 0x1d, 0x86, 0x3f, 0x32, 0xf0, 0x0d, 0x5c, 0xcd, 0xeb, 0xe7, 0x02, 0x2d, 0x26, 0x8b, 0xa9, 0x05, 0x1d, 0x80, 0xfe, 0x55, 0xdf, 0xc5, 0xf6, 0x4b, 0x07, 0x16, 0xc4, 0xbb, 0x8d, 0xa4, 0xb1, 0x1e, 0x9e, 0x28, 0x34, 0x48, 0xed, 0x8b, 0xe4, 0x27, 0x8e, 0x93, 0xb5, 0x2d, 0x67, 0x56, 0x49, 0xab, 0xb4, 0x59, 0x56, 0x52, 0x2f, 0x92, 0x63, 0x4c, 0x92, 0xa0, 0x9a, 0xc5, 0xa5, 0xd6, 0x03, 0xaa, 0xe2, 0xa6, 0xd0, 0x4a, 0x43, 0x52, 0x39, 0x53, 0x8d, 0xe3, 0x03, 0xfc, 0x05, 0xb9, 0xed, 0x5f, 0xcb, 0x84, 0x3f, 0x05, 0x36, 0xa8, 0xab, 0x94, 0x2d, 0x9c, 0x3b, 0xdc, 0x90, 0xfe, 0xed, 0x97, 0x44, 0x9c, 0xe3, 0x09, 0xbe, 0x8a, 0xb1, 0x19, 0x67, 0x6a, 0x96, 0xc2, 0xa6, 0x0a, 0x06, 0x69, 0x2e, 0x8c, 0xd5, 0x9e, 0x55, 0xe6, 0xff, 0x8d, 0x91, 0xfa, 0x46, 0x29, 0x66, 0x55, 0x55, 0x26, 0xc9, 0x87, 0xfc, 0x44, 0xba, 0x42, 0x0b, 0xbf, 0xf7, 0x68, 0xf7, 0xa7, 0xfd, 0x36, 0x36, 0x38, 0xd5, 0xce, 0x4d, 0x9e, 0xa1, 0xed, 0xd7, 0xfd, 0x39, 0x9d, 0x6c, 0x65, 0x62, 0x7b, 0xbc, 0x33, 0x7f, 0x13, 0x1c, 0x73, 0x45, 0xb3, 0xd7, 0x9b, 0x4d, 0xb7, 0x41, 0x25, 0x62, 0x54, 0x7c, 0xa2, 0xa7, 0xc8, 0xea, 0x55, 0xeb, 0xdd, 0xdd, 0x05, 0xa4, 0xb4, 0x20, 0x0c, 0x72, 0xab, 0x2b, 0x83, 0x31, 0x11, 0x52, 0xb7, 0x1c, 0x99, 0x30, 0x6c, 0x1d, 0x3b, 0x3d, 0x44, 0x66, 0x57, 0xbe, 0x65, 0xe5, 0x8d, 0x7c, 0xf8, 0xa0, 0x62, 0xb2, 0x25, 0xce, 0x93, 0x78, 0x02, 0x59, 0x05, 0x46, 0x85, 0x3f, 0x19, 0x2a, 0x6a, 0x8c, 0x8b, 0x3f, 0xf7, 0xa6, 0x2f, 0xcf, 0x80 }; /* K = bdd792b1ece3d0ce428cc1294b9d7497208de86929a2aad2ef481557 */ static const uint8_t ac_dsa_vect105_out[] = { /* R */ 0x2f, 0x85, 0xee, 0x5c, 0x32, 0xd5, 0x46, 0xc6, 0x8f, 0x0a, 0xa2, 0x69, 0x8b, 0xea, 0xe5, 0x3e, 0x28, 0x48, 0xc3, 0x75, 0x51, 0x7a, 0x57, 0x0e, 0x0f, 0x1b, 0x55, 0x46, /* S */ 0x54, 0x76, 0x67, 0xe8, 0xb1, 0x3f, 0x21, 0x63, 0x5a, 0x0b, 0x10, 0x6d, 0x32, 0x4d, 0x06, 0xc8, 0x5b, 0x74, 0xa6, 0x4c, 0xe9, 0x22, 0x5c, 0xc5, 0xe0, 0x84, 0x35, 0x81 }; /* [mod = L=2048, N=224, SHA-256] */ static const uint8_t ac_dsa_vect106_prime[] = { /* P */ 0xa4, 0xc7, 0xea, 0xab, 0x42, 0xc4, 0xc7, 0x3b, 0x75, 0x77, 0x70, 0x91, 0x64, 0x89, 0xf1, 0x7c, 0xd5, 0x07, 0x25, 0xcd, 0x0a, 0x4b, 0xc4, 0xe1, 0xcf, 0x67, 0xf7, 0x63, 0xb8, 0xc1, 0xde, 0x2d, 0x6d, 0xab, 0x98, 0x56, 0xba, 0xaf, 0xb0, 0x08, 0xf3, 0x65, 0xb1, 0x8a, 0x42, 0xe1, 0x4d, 0xc5, 0x1f, 0x35, 0x0b, 0x88, 0xec, 0xa0, 0x20, 0x9c, 0x5a, 0xa4, 0xfd, 0x71, 0xa7, 0xa9, 0x6c, 0x76, 0x5f, 0x59, 0x01, 0xc2, 0x1e, 0x72, 0x05, 0x70, 0xd7, 0x83, 0x7b, 0xec, 0x7c, 0x76, 0xd2, 0xe4, 0x93, 0x44, 0x73, 0x1c, 0xa3, 0x94, 0x05, 0xd0, 0xa8, 0x79, 0xb9, 0xe0, 0xdc, 0xd1, 0xa8, 0x12, 0x5f, 0xd1, 0x30, 0xec, 0x1e, 0x78, 0x3e, 0x65, 0x4b, 0x94, 0xe3, 0x00, 0x2e, 0x6b, 0x62, 0x9e, 0x90, 0x4a, 0xb3, 0x87, 0x78, 0x67, 0x72, 0x0c, 0xbd, 0x54, 0xb4, 0x27, 0x0a, 0x9e, 0x15, 0xcd, 0x02, 0x8c, 0x7c, 0xc7, 0x96, 0xf0, 0x6c, 0x27, 0x2a, 0x66, 0x09, 0x51, 0x92, 0x8f, 0xdb, 0xeb, 0x2d, 0xca, 0x06, 0x1b, 0x41, 0xe9, 0x32, 0x25, 0x73, 0x05, 0x74, 0x2f, 0xf1, 0x6e, 0x2f, 0x42, 0x91, 0x91, 0xd5, 0xe5, 0xf1, 0xa6, 0xdd, 0xf6, 0xe7, 0x8c, 0x5d, 0x77, 0x22, 0xcf, 0xf8, 0x0a, 0x9c, 0x0b, 0xd5, 0xc8, 0xd7, 0xae, 0xba, 0x8c, 0x04, 0x43, 0x89, 0x92, 0xb0, 0x75, 0xe3, 0x07, 0xc1, 0x53, 0x4c, 0x49, 0xad, 0x38, 0x0f, 0x47, 0x7f, 0x5f, 0x79, 0x87, 0xdc, 0x17, 0x2c, 0x16, 0x1d, 0xca, 0x38, 0xdc, 0xaf, 0x3f, 0xb3, 0x84, 0x6c, 0x72, 0xc9, 0x11, 0x9a, 0x52, 0x99, 0xad, 0xc7, 0x48, 0x95, 0x1b, 0x3d, 0xce, 0x0d, 0x00, 0xd4, 0xa9, 0x01, 0x38, 0x00, 0xb2, 0x00, 0x82, 0x03, 0xb7, 0x24, 0x65, 0xbc, 0x6a, 0x84, 0xae, 0x05, 0x9a, 0x30, 0xc4, 0x52, 0x2d, 0xea, 0x57 }; static const uint8_t ac_dsa_vect106_sub_prime[] = { /* Q */ 0xce, 0x89, 0xfe, 0x33, 0x2b, 0x8e, 0x4e, 0xb3, 0xd1, 0xe8, 0xdd, 0xce, 0xa5, 0xd1, 0x63, 0xa5, 0xbc, 0x13, 0xb6, 0x3f, 0x16, 0x99, 0x37, 0x55, 0x42, 0x7a, 0xef, 0x43 }; static const uint8_t ac_dsa_vect106_base[] = { /* G */ 0x8c, 0x46, 0x5e, 0xdf, 0x5a, 0x18, 0x07, 0x30, 0x29, 0x1e, 0x08, 0x0d, 0xfc, 0x53, 0x85, 0x39, 0x7a, 0x50, 0x06, 0x45, 0x0d, 0xba, 0x2e, 0xfe, 0x01, 0x29, 0x26, 0x4f, 0xbd, 0x89, 0x7b, 0xb5, 0x57, 0x9c, 0xa0, 0xea, 0xb1, 0x9a, 0xa2, 0x78, 0x22, 0x04, 0x24, 0x72, 0x4b, 0x4f, 0x2a, 0x6f, 0x6e, 0xe6, 0x32, 0x84, 0x32, 0xab, 0xf6, 0x61, 0x38, 0x06, 0x46, 0x09, 0x72, 0x33, 0x50, 0x53, 0x39, 0xc5, 0x51, 0x9d, 0x35, 0x7d, 0x71, 0x12, 0xb6, 0xee, 0xc9, 0x38, 0xb8, 0x5d, 0x5a, 0xa7, 0x5c, 0xc2, 0xe3, 0x80, 0x92, 0xf0, 0xa5, 0x30, 0xac, 0xb5, 0x4e, 0x50, 0xfe, 0x82, 0xc4, 0xd5, 0x62, 0xfb, 0x0f, 0x30, 0x36, 0xb8, 0x0b, 0x30, 0x33, 0x40, 0x23, 0xeb, 0xbe, 0x66, 0x37, 0xa0, 0x01, 0x0b, 0x00, 0xc7, 0xdb, 0x86, 0x37, 0x11, 0x68, 0x56, 0x36, 0x71, 0xe1, 0xe0, 0xf0, 0x28, 0xae, 0xdb, 0xd4, 0x5d, 0x2d, 0x57, 0x26, 0x21, 0xa6, 0x09, 0x98, 0x2a, 0x07, 0x3e, 0x51, 0xaa, 0xe2, 0x77, 0x07, 0xaf, 0xbe, 0xef, 0x29, 0xe2, 0xec, 0xee, 0x84, 0xd7, 0xa6, 0xd5, 0xda, 0x38, 0x2b, 0xe3, 0xa3, 0x5f, 0x42, 0xb6, 0xc6, 0x68, 0x49, 0x20, 0x2a, 0xb1, 0x9d, 0x02, 0x5b, 0x86, 0x9d, 0x08, 0x77, 0x64, 0x76, 0xd1, 0xab, 0x98, 0x14, 0x75, 0xad, 0x2a, 0xd2, 0xf3, 0xe6, 0xfd, 0x07, 0xe3, 0x06, 0x96, 0xd9, 0x0a, 0x62, 0x68, 0x16, 0xdf, 0x60, 0xd6, 0xca, 0x7a, 0xfd, 0x7b, 0x48, 0x2f, 0x94, 0x2f, 0x83, 0xb4, 0x5c, 0xc8, 0x29, 0x33, 0x73, 0x1f, 0x87, 0xfa, 0xee, 0x32, 0x09, 0x00, 0xf2, 0xaa, 0x3e, 0x70, 0xb1, 0x86, 0x7e, 0x14, 0x30, 0xe4, 0x0b, 0xe6, 0x7c, 0x07, 0xf9, 0x29, 0x02, 0x99, 0xef, 0x06, 0x7b, 0x8b, 0x24, 0xa7, 0x51, 0x5b, 0x3f, 0x99, 0x2c, 0x07 }; static const uint8_t ac_dsa_vect106_ptx[] = { /* Msg */ 0xce, 0xc8, 0xd2, 0x84, 0x3d, 0xee, 0x7c, 0xb5, 0xf9, 0x11, 0x9b, 0x75, 0x56, 0x25, 0x85, 0xe0, 0x5c, 0x5c, 0xe2, 0xf4, 0xe6, 0x45, 0x7e, 0x9b, 0xcc, 0x3c, 0x1c, 0x78, 0x1c, 0xcd, 0x2c, 0x04, 0x42, 0xb6, 0x28, 0x2a, 0xea, 0x61, 0x0f, 0x71, 0x61, 0xdc, 0xed, 0xe1, 0x76, 0xe7, 0x74, 0x86, 0x1f, 0x7d, 0x26, 0x91, 0xbe, 0x6c, 0x89, 0x4a, 0xc3, 0xeb, 0xf8, 0x0c, 0x0f, 0xab, 0x21, 0xe5, 0x2a, 0x3e, 0x63, 0xae, 0x0b, 0x35, 0x02, 0x57, 0x62, 0xcc, 0xd6, 0xc9, 0xe1, 0xfe, 0xcc, 0x7f, 0x9f, 0xe0, 0x0a, 0xa5, 0x5c, 0x0c, 0x3a, 0xe3, 0x3a, 0xe8, 0x8f, 0x66, 0x18, 0x7f, 0x95, 0x98, 0xeb, 0xa9, 0xf8, 0x63, 0x17, 0x1f, 0x3f, 0x56, 0x48, 0x46, 0x25, 0xbf, 0x39, 0xd8, 0x83, 0x42, 0x73, 0x49, 0xb8, 0x67, 0x1d, 0x9b, 0xb7, 0xd3, 0x96, 0x18, 0x06, 0x94, 0xe5, 0xb5, 0x46, 0xae }; static const uint8_t ac_dsa_vect106_priv_val[] = { /* X */ 0x55, 0x15, 0x95, 0xec, 0xcb, 0xb0, 0x03, 0xb0, 0xbf, 0x8d, 0xdd, 0xa1, 0x84, 0xa5, 0x9d, 0xa5, 0x1e, 0x45, 0x9a, 0x0d, 0x28, 0x20, 0x5e, 0x55, 0x92, 0xca, 0x4c, 0xb1 }; static const uint8_t ac_dsa_vect106_pub_val[] = { /* Y */ 0x74, 0x8a, 0x40, 0x23, 0x72, 0x11, 0xa2, 0xd9, 0x85, 0x25, 0x96, 0xe7, 0xa8, 0x91, 0xf4, 0x3d, 0x4e, 0xb0, 0xee, 0x48, 0x82, 0x6c, 0x9c, 0xfb, 0x33, 0x6b, 0xbb, 0x68, 0xdb, 0xe5, 0xa5, 0xe1, 0x6b, 0x2e, 0x12, 0x71, 0xd4, 0xd1, 0x3d, 0xe0, 0x36, 0x44, 0xbb, 0x85, 0xef, 0x6b, 0xe5, 0x23, 0xa4, 0xd4, 0xd8, 0x84, 0x15, 0xbc, 0xd5, 0x96, 0xba, 0x8e, 0x0a, 0x3c, 0x4f, 0x64, 0x39, 0xe9, 0x81, 0xed, 0x01, 0x3d, 0x7d, 0x9c, 0x70, 0x33, 0x6f, 0xeb, 0xf7, 0xd4, 0x20, 0xcf, 0xed, 0x02, 0xc2, 0x67, 0x45, 0x7b, 0xb3, 0xf3, 0xe7, 0xc8, 0x21, 0x45, 0xd2, 0xaf, 0x54, 0x83, 0x0b, 0x94, 0x2e, 0xc7, 0x4a, 0x5d, 0x50, 0x3e, 0x42, 0x26, 0xcd, 0x25, 0xdd, 0x75, 0xde, 0xcd, 0x3f, 0x50, 0xf0, 0xa8, 0x58, 0x15, 0x5d, 0x7b, 0xe7, 0x99, 0x41, 0x08, 0x36, 0xdd, 0xc5, 0x59, 0xce, 0x99, 0xe1, 0xae, 0x51, 0x38, 0x08, 0xfd, 0xae, 0xac, 0x34, 0x84, 0x3d, 0xd7, 0x25, 0x8f, 0x16, 0xf6, 0x7f, 0x19, 0x20, 0x5f, 0x6f, 0x13, 0x92, 0x51, 0xa4, 0x18, 0x6d, 0xa8, 0x49, 0x6d, 0x5e, 0x90, 0xd3, 0xfe, 0xcf, 0x8e, 0xd1, 0x0b, 0xe6, 0xc2, 0x5f, 0xf5, 0xeb, 0x33, 0xd9, 0x60, 0xc9, 0xa8, 0xf4, 0xc5, 0x81, 0xc8, 0xc7, 0x24, 0xca, 0x43, 0xb7, 0x61, 0xe9, 0xfd, 0xb5, 0xaf, 0x66, 0xbf, 0xfb, 0x9d, 0x2e, 0xbb, 0x11, 0xa6, 0xb5, 0x04, 0xa1, 0xfb, 0xe4, 0xf8, 0x34, 0xec, 0xb6, 0xac, 0x25, 0x4c, 0xab, 0x51, 0x3e, 0x94, 0x3b, 0x9a, 0x95, 0x3a, 0x70, 0x84, 0xb3, 0x30, 0x5c, 0x66, 0x1b, 0xfa, 0xd4, 0x34, 0xf6, 0xa8, 0x35, 0x50, 0x3c, 0x9a, 0xde, 0x7f, 0x4a, 0x57, 0xf5, 0xc9, 0x65, 0xec, 0x30, 0x1e, 0xcd, 0xe9, 0x38, 0xee, 0x31, 0xb4, 0xde, 0xb0, 0x38, 0xaf, 0x97, 0xb3 }; /* K = 6f326546aa174b3d319ef7331ec8dfd363dd78ae583a920165ff7e54 */ static const uint8_t ac_dsa_vect106_out[] = { /* R */ 0x9c, 0x5f, 0xa4, 0x68, 0x79, 0xdd, 0xaf, 0x5c, 0x14, 0xf0, 0x7d, 0xfb, 0x53, 0x20, 0x71, 0x5f, 0x67, 0xa6, 0xfe, 0xc1, 0x79, 0xe3, 0xad, 0x53, 0x34, 0x2f, 0xb6, 0xd1, /* S */ 0xc3, 0xe1, 0x7e, 0x7b, 0x3c, 0x4d, 0x0a, 0xc8, 0xd4, 0x9f, 0x4d, 0xd0, 0xf0, 0x4c, 0x16, 0xa0, 0x94, 0xf4, 0x2d, 0xa0, 0xaf, 0xcc, 0x6c, 0x90, 0xf5, 0xf1, 0xbb, 0xc8 }; #define ac_dsa_vect107_prime ac_dsa_vect106_prime #define ac_dsa_vect107_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect107_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect107_ptx[] = { /* Msg */ 0xf3, 0xbb, 0x27, 0xbf, 0x9d, 0x41, 0x2f, 0x13, 0x22, 0x9a, 0x56, 0xd2, 0xd1, 0x53, 0x3e, 0xae, 0x63, 0xf4, 0x00, 0x04, 0xc1, 0x43, 0xc6, 0xb9, 0x2f, 0x6e, 0x60, 0x6d, 0x26, 0x3d, 0xd2, 0xda, 0x75, 0x81, 0xe5, 0xeb, 0x20, 0xb6, 0xcd, 0x02, 0x1e, 0x3a, 0xb6, 0x3b, 0x49, 0x8a, 0xba, 0xfc, 0xe0, 0x1b, 0x4a, 0xd7, 0xac, 0x86, 0x28, 0xf7, 0xa1, 0x84, 0x9c, 0x4e, 0x45, 0x4f, 0x11, 0x68, 0xae, 0x97, 0xad, 0xfa, 0xb1, 0xfa, 0xdb, 0xd3, 0x13, 0xfc, 0xa7, 0x38, 0x17, 0x26, 0xf5, 0x04, 0x57, 0x52, 0xda, 0xba, 0xad, 0x6e, 0xa3, 0x25, 0x0d, 0x30, 0x3a, 0x54, 0x96, 0xbb, 0xa2, 0xfa, 0x48, 0x95, 0xae, 0x49, 0xf0, 0x6a, 0x9a, 0xa6, 0x45, 0x1a, 0xe7, 0x0c, 0xf3, 0x3b, 0x5f, 0x06, 0xfa, 0x17, 0xca, 0xc0, 0x14, 0x4f, 0x28, 0xbd, 0x19, 0xfb, 0x2a, 0xc0, 0x41, 0xa5, 0x78, 0xed }; static const uint8_t ac_dsa_vect107_priv_val[] = { /* X */ 0x02, 0x7d, 0x01, 0x71, 0x59, 0x8e, 0x7e, 0xcf, 0x23, 0xf2, 0x92, 0x2d, 0x02, 0x57, 0xe6, 0x04, 0x29, 0x1c, 0xef, 0xa7, 0x7b, 0x5c, 0xfa, 0xf1, 0xb3, 0xe3, 0x1a, 0xc4 }; static const uint8_t ac_dsa_vect107_pub_val[] = { /* Y */ 0x00, 0xc7, 0xaa, 0xbe, 0x30, 0xfa, 0x4c, 0x3d, 0x1b, 0xa8, 0x5e, 0x7a, 0xe0, 0xaa, 0xe7, 0x93, 0x60, 0xe5, 0xea, 0xb3, 0x04, 0x1b, 0xca, 0xaa, 0x5d, 0x32, 0x1c, 0x92, 0xf3, 0x47, 0x1e, 0x41, 0x94, 0xc1, 0x04, 0x84, 0xcf, 0xf1, 0x52, 0xba, 0xde, 0x6b, 0x7d, 0x61, 0x9c, 0xf2, 0x86, 0x77, 0x34, 0x75, 0x29, 0x8f, 0x88, 0x3e, 0xfd, 0xf6, 0x4c, 0x08, 0xb6, 0x92, 0x58, 0x3d, 0xe3, 0x1b, 0xe0, 0xa4, 0xe2, 0xb8, 0xe8, 0xd5, 0x08, 0xec, 0x14, 0x5c, 0x65, 0xa3, 0x69, 0xce, 0x61, 0x95, 0x44, 0x6c, 0x52, 0xd0, 0x23, 0x72, 0xeb, 0xa5, 0x62, 0xf9, 0xa9, 0xd7, 0xcb, 0x24, 0xd2, 0xec, 0x3b, 0x0a, 0x1a, 0xb8, 0x33, 0xe4, 0xd7, 0x62, 0x3b, 0x04, 0x55, 0xa4, 0x1e, 0xec, 0x75, 0x9d, 0x07, 0xa3, 0xc8, 0xa2, 0x0d, 0x88, 0xa9, 0x26, 0x40, 0x8c, 0x20, 0xf1, 0x67, 0x56, 0x01, 0xbe, 0x53, 0xcf, 0xfd, 0x65, 0x61, 0x7b, 0x66, 0xfd, 0x4e, 0xb3, 0x53, 0xa1, 0xf2, 0xdb, 0x31, 0xf6, 0x63, 0x43, 0xb0, 0x7f, 0xaf, 0x60, 0xde, 0x0b, 0x6a, 0x68, 0x08, 0x09, 0xc6, 0x16, 0x6a, 0xdb, 0xf5, 0xe5, 0x04, 0xc5, 0xc6, 0x1b, 0xab, 0xb8, 0x4b, 0xe7, 0x2c, 0x02, 0xd3, 0xeb, 0xee, 0xe0, 0x66, 0xd9, 0xea, 0xb0, 0xd0, 0xec, 0xdf, 0xe0, 0x1b, 0x8c, 0xcd, 0x67, 0x28, 0xee, 0x91, 0x23, 0xb9, 0xd2, 0x11, 0x54, 0xb2, 0xbc, 0x9a, 0x13, 0x43, 0x63, 0x56, 0x64, 0x02, 0x29, 0x1a, 0xc8, 0xa4, 0x84, 0xee, 0x32, 0xeb, 0x88, 0x40, 0x46, 0xd4, 0x0f, 0xde, 0x7c, 0xab, 0xbf, 0x51, 0xd1, 0xd1, 0x20, 0x6d, 0xf1, 0xc5, 0xec, 0xf2, 0x90, 0xab, 0x7e, 0xa7, 0x2a, 0xbb, 0x5b, 0xd3, 0xbe, 0x8d, 0x91, 0xc0, 0x2b, 0xb6, 0x3f, 0x80, 0x97, 0x18, 0xba, 0x1d, 0x38, 0x0a, 0xf8, 0x83, 0x31 }; /* K = 7494772f199ab7a7e9a248f6c2df918c9da62dc2d4176b7db9419b37 */ static const uint8_t ac_dsa_vect107_out[] = { /* R */ 0x79, 0xa6, 0xae, 0xd7, 0x3c, 0xe1, 0x77, 0xed, 0x35, 0x81, 0xf5, 0xd1, 0x81, 0xa7, 0x7f, 0x00, 0x0d, 0x63, 0x58, 0x51, 0x4e, 0xa9, 0x5c, 0xb0, 0x38, 0x8a, 0x6a, 0xdd, /* S */ 0x2b, 0x85, 0x97, 0xa6, 0x94, 0x56, 0x4e, 0x26, 0x7b, 0x6f, 0x25, 0x0a, 0x4c, 0x76, 0x36, 0x1f, 0x8c, 0xdf, 0x49, 0x86, 0x3a, 0x79, 0x02, 0xaf, 0xa4, 0x8f, 0xd6, 0xd8 }; #define ac_dsa_vect108_prime ac_dsa_vect106_prime #define ac_dsa_vect108_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect108_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect108_ptx[] = { /* Msg */ 0xe7, 0x14, 0xc0, 0x16, 0x31, 0x70, 0x4e, 0x94, 0x47, 0x39, 0x0f, 0x5c, 0x31, 0x5c, 0x96, 0x15, 0xa7, 0xa5, 0x28, 0x63, 0xb1, 0x43, 0x70, 0x65, 0x83, 0xf6, 0x61, 0x59, 0x5c, 0x50, 0x5a, 0xec, 0x47, 0x7e, 0xeb, 0x5a, 0xd6, 0xd6, 0x40, 0xca, 0x81, 0x2c, 0xe1, 0x17, 0x50, 0xb6, 0x7b, 0xc8, 0xbe, 0xde, 0x2e, 0x4f, 0x96, 0x18, 0xdb, 0xe7, 0x37, 0x6c, 0xab, 0x62, 0x31, 0xb2, 0x12, 0x48, 0xec, 0x91, 0x4a, 0xe1, 0x82, 0xdf, 0x87, 0x53, 0x36, 0x2d, 0x21, 0x18, 0xa6, 0x5e, 0x66, 0xf6, 0x40, 0x18, 0x81, 0x08, 0x04, 0xad, 0x97, 0xfc, 0xc1, 0xa8, 0x7b, 0x8c, 0x9f, 0x34, 0x9d, 0x10, 0x01, 0xe4, 0xb0, 0x9b, 0x04, 0x69, 0x91, 0xe6, 0xab, 0xe6, 0x33, 0x8f, 0xbe, 0xf7, 0xbe, 0x48, 0xf1, 0xc8, 0x0c, 0x35, 0x0d, 0x29, 0x62, 0xeb, 0x6b, 0x8f, 0xce, 0x25, 0xb6, 0x9f, 0x8d, 0xc9 }; static const uint8_t ac_dsa_vect108_priv_val[] = { /* X */ 0x69, 0x11, 0xc2, 0x1a, 0x3d, 0xa8, 0x8d, 0x54, 0xff, 0x9a, 0xb5, 0x8a, 0xe2, 0x07, 0x5a, 0x2a, 0xff, 0xa3, 0xf3, 0xeb, 0x65, 0x69, 0x78, 0xea, 0x26, 0xbf, 0xa7, 0x02 }; static const uint8_t ac_dsa_vect108_pub_val[] = { /* Y */ 0x04, 0xd3, 0x01, 0xf0, 0x01, 0x82, 0x1b, 0x03, 0xc9, 0x13, 0x94, 0xc5, 0x20, 0x83, 0x9a, 0xb6, 0xaa, 0xa9, 0x53, 0x25, 0xc1, 0x08, 0xa0, 0x2d, 0xad, 0x9d, 0xb4, 0x8b, 0x3c, 0x80, 0x33, 0xd6, 0x44, 0x3b, 0xcb, 0xf0, 0x50, 0x45, 0x23, 0x0c, 0xa8, 0x8a, 0xaf, 0x98, 0xa8, 0xc4, 0xcb, 0x6b, 0x09, 0x5b, 0x35, 0x2d, 0x91, 0xb4, 0xc4, 0x16, 0xf6, 0x32, 0xfa, 0xb4, 0x9d, 0x45, 0xac, 0x90, 0x69, 0x9a, 0x5a, 0x41, 0x96, 0x30, 0xa8, 0x1d, 0x47, 0x3b, 0xc8, 0x91, 0x22, 0xeb, 0x5b, 0xac, 0xb9, 0x1c, 0x40, 0xca, 0xa4, 0xe4, 0xbc, 0xc4, 0x76, 0xf3, 0xca, 0x77, 0xbf, 0x6a, 0x21, 0x03, 0x7a, 0x06, 0xbe, 0x24, 0xf1, 0x1c, 0x64, 0x5b, 0x0c, 0x21, 0xb8, 0x57, 0xfd, 0xc5, 0xc0, 0x4f, 0xbb, 0xf0, 0xa2, 0x6e, 0xfc, 0x56, 0x9c, 0xdb, 0xb0, 0xea, 0x98, 0x9b, 0xa0, 0xe0, 0x37, 0xc2, 0x3f, 0x22, 0xb0, 0xc5, 0xf1, 0x64, 0x3d, 0x77, 0xd9, 0x8f, 0x2d, 0xe2, 0x48, 0xcc, 0xc3, 0x66, 0x72, 0xd3, 0x97, 0xd3, 0x0c, 0x1c, 0x5e, 0x13, 0x19, 0xfc, 0x7e, 0x58, 0x42, 0xae, 0x1a, 0x9f, 0xcd, 0x9e, 0x96, 0xfe, 0x89, 0x0a, 0x74, 0xdd, 0xee, 0x91, 0xa3, 0x9c, 0xe7, 0x32, 0xe4, 0xc0, 0xea, 0xf7, 0x09, 0x4b, 0x53, 0xb7, 0xb4, 0x09, 0x30, 0x38, 0x60, 0xb0, 0xb4, 0x94, 0x4c, 0xc8, 0x1b, 0x4a, 0x42, 0xd4, 0x05, 0x38, 0xcf, 0xe5, 0x12, 0xb9, 0x68, 0x0e, 0x0a, 0x28, 0x1b, 0x1f, 0xbb, 0xf6, 0x39, 0x13, 0x9e, 0x80, 0x66, 0xad, 0x63, 0x8c, 0xf8, 0x46, 0xc9, 0xea, 0x51, 0xfb, 0x4c, 0x4e, 0xf8, 0x49, 0x21, 0xf1, 0x6a, 0x6c, 0xa3, 0xf2, 0xbd, 0x15, 0x81, 0x57, 0xc5, 0x51, 0x73, 0x9c, 0x9d, 0x02, 0x3e, 0x27, 0x0b, 0x3d, 0xe7, 0xc2, 0xf1, 0xd7, 0x68, 0x3c, 0xf8, 0x09 }; /* K = bfb79665f7d6df843d2c39357173e415724c83e1a10932efb9e22676 */ static const uint8_t ac_dsa_vect108_out[] = { /* R */ 0x79, 0x0b, 0x4d, 0xca, 0xe3, 0x1f, 0xe4, 0x5c, 0xd3, 0xa7, 0xbb, 0x6f, 0xa1, 0x0d, 0xcf, 0x9e, 0xde, 0x1f, 0x06, 0x71, 0x23, 0xf9, 0x3b, 0xaa, 0xd7, 0xed, 0xb4, 0x89, /* S */ 0x71, 0xe3, 0xe4, 0x6d, 0xfe, 0x04, 0x04, 0x96, 0xce, 0x4c, 0x5e, 0x49, 0x0f, 0x69, 0x44, 0xa2, 0x3c, 0xd5, 0xe6, 0x6c, 0xe9, 0xb4, 0xd9, 0xac, 0xbe, 0x41, 0x30, 0xce }; #define ac_dsa_vect109_prime ac_dsa_vect106_prime #define ac_dsa_vect109_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect109_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect109_ptx[] = { /* Msg */ 0x3f, 0x6e, 0x48, 0x2f, 0xd4, 0x84, 0xed, 0x3d, 0x07, 0xf1, 0xd0, 0x76, 0x1f, 0x2d, 0x60, 0xfc, 0x96, 0xd4, 0x6e, 0xb0, 0xec, 0xd1, 0x0a, 0x59, 0xdd, 0x4f, 0x39, 0x2e, 0x3d, 0x3b, 0x2c, 0xbe, 0x18, 0x40, 0x10, 0xe1, 0x32, 0x68, 0x55, 0x78, 0xb1, 0xf6, 0x30, 0x32, 0x39, 0x79, 0x8a, 0x53, 0x03, 0xa8, 0x11, 0x69, 0xd4, 0xf5, 0x2f, 0xba, 0x0d, 0x20, 0xa4, 0x28, 0x34, 0xde, 0x29, 0x3e, 0x3a, 0x7b, 0x32, 0x84, 0x8b, 0x65, 0xdd, 0x30, 0x8e, 0xef, 0x53, 0x50, 0xd6, 0x33, 0x29, 0x74, 0x65, 0x42, 0x5b, 0x7b, 0x15, 0x95, 0xff, 0xc8, 0xea, 0x7b, 0x12, 0x58, 0x96, 0xf8, 0x9e, 0x28, 0x44, 0x56, 0x16, 0x35, 0xf5, 0x2e, 0xc6, 0x2f, 0xab, 0x2e, 0xcf, 0xea, 0x28, 0x8d, 0x23, 0xf0, 0xa7, 0x71, 0xcd, 0x63, 0x11, 0x80, 0x61, 0x03, 0x13, 0x51, 0x72, 0xcf, 0x9f, 0xef, 0x14, 0x55 }; static const uint8_t ac_dsa_vect109_priv_val[] = { /* X */ 0x20, 0x32, 0x80, 0x83, 0xaa, 0x86, 0x51, 0x11, 0x40, 0x32, 0x4f, 0xd0, 0x35, 0x70, 0x67, 0xa1, 0xd6, 0xab, 0xfc, 0x31, 0x6e, 0x77, 0xfe, 0x3d, 0x26, 0x0f, 0x0e, 0xf2 }; static const uint8_t ac_dsa_vect109_pub_val[] = { /* Y */ 0x9f, 0xc1, 0xb2, 0x92, 0xeb, 0xe1, 0x55, 0x31, 0x57, 0x9f, 0x35, 0xdd, 0xa8, 0xd7, 0x06, 0xbe, 0xe0, 0xda, 0x85, 0x7c, 0xd6, 0x96, 0xa1, 0x0a, 0xf7, 0x70, 0xdc, 0x35, 0x62, 0x32, 0x73, 0x6c, 0xf8, 0x93, 0xf7, 0x41, 0x1a, 0x9d, 0x27, 0x18, 0xb3, 0x9f, 0x38, 0x81, 0x18, 0xd1, 0x77, 0xcd, 0x8d, 0x0f, 0xd7, 0xca, 0x3b, 0x3c, 0x22, 0x0f, 0x3a, 0xa7, 0x43, 0xd8, 0xb1, 0x67, 0x21, 0x9d, 0x3c, 0x2c, 0x78, 0x3e, 0x1f, 0x09, 0xd8, 0xb8, 0xdf, 0x8e, 0xc7, 0xe1, 0x75, 0x78, 0xc5, 0x32, 0x94, 0x88, 0xc8, 0x7a, 0x89, 0x67, 0x8d, 0x28, 0x18, 0xa9, 0x93, 0x66, 0xb7, 0x85, 0xd5, 0x3f, 0x6c, 0xa6, 0x99, 0x5e, 0x19, 0x3b, 0xa5, 0xca, 0x26, 0xc0, 0x0b, 0x84, 0x9f, 0x90, 0x27, 0xca, 0x5d, 0xf5, 0xbb, 0x7e, 0xc8, 0x7f, 0xe7, 0x87, 0x35, 0xae, 0x88, 0x0f, 0x1a, 0x97, 0xda, 0xbc, 0x3c, 0xa7, 0x98, 0x5d, 0x8c, 0xbc, 0x81, 0xbe, 0x82, 0x4c, 0x1f, 0xfb, 0x95, 0x3f, 0x10, 0x96, 0xbf, 0x92, 0x62, 0x26, 0xfb, 0x5e, 0x9d, 0x4a, 0xd4, 0x3e, 0x93, 0x63, 0xda, 0x5e, 0x6b, 0x73, 0x8c, 0x9a, 0x2f, 0x95, 0x1a, 0xb3, 0x29, 0x4e, 0x2b, 0x28, 0x22, 0xcf, 0x52, 0x82, 0xbb, 0x41, 0x34, 0x15, 0x8a, 0xa9, 0x0a, 0xb9, 0xc8, 0xf0, 0xf6, 0x4d, 0x05, 0xa0, 0xd6, 0x25, 0xa7, 0x5b, 0xc2, 0xd6, 0xa4, 0xae, 0x3d, 0xd1, 0x1f, 0xc0, 0x5e, 0xde, 0x7b, 0x66, 0x47, 0xae, 0x7c, 0x07, 0x50, 0xdd, 0xb2, 0x73, 0xfe, 0x5f, 0x88, 0x28, 0x31, 0x8a, 0x91, 0xdb, 0x31, 0x72, 0xad, 0x59, 0x16, 0x6a, 0xac, 0xf2, 0xda, 0x4f, 0x37, 0x04, 0xd1, 0x69, 0xeb, 0xc8, 0x60, 0xd9, 0xe1, 0xc6, 0x46, 0x4a, 0xbc, 0x2b, 0x65, 0x30, 0x13, 0x77, 0x4d, 0x29, 0x37, 0x5b, 0x77, 0xba, 0xc1, 0xec }; /* K = 8f4398bb9fe1b393c1d90a62e178899261fa0501c98bd9a8178b364c */ static const uint8_t ac_dsa_vect109_out[] = { /* R */ 0x3b, 0x5d, 0x80, 0x34, 0xc4, 0xb8, 0xad, 0x97, 0x01, 0xbf, 0x29, 0xb1, 0x00, 0x06, 0xdb, 0x69, 0xd0, 0x17, 0xfd, 0xe8, 0x63, 0x80, 0x79, 0xdd, 0x7b, 0xbf, 0xac, 0xe7, /* S */ 0xcd, 0xe0, 0x1d, 0xf5, 0x4a, 0x66, 0xce, 0xf3, 0xc0, 0x53, 0x86, 0x48, 0x52, 0x5b, 0x25, 0x0c, 0xb1, 0xf0, 0x87, 0x07, 0xf5, 0xff, 0x11, 0x4b, 0xde, 0xbf, 0xf8, 0xf7 }; #define ac_dsa_vect110_prime ac_dsa_vect106_prime #define ac_dsa_vect110_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect110_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect110_ptx[] = { /* Msg */ 0x31, 0xa2, 0x78, 0xf8, 0x81, 0xfd, 0xd3, 0x75, 0x56, 0x5c, 0x0f, 0x28, 0xff, 0x75, 0x75, 0xf2, 0x16, 0x11, 0x04, 0x86, 0xd6, 0xfe, 0x08, 0xda, 0xe8, 0xfd, 0x07, 0x29, 0x50, 0x97, 0x8b, 0xdf, 0xf6, 0x01, 0xde, 0xd1, 0xef, 0x22, 0x6b, 0x5d, 0x90, 0x4c, 0x47, 0xf7, 0x14, 0x2a, 0x8f, 0x46, 0x65, 0xe0, 0x3e, 0xfe, 0x58, 0x70, 0xda, 0x2d, 0xd1, 0xab, 0x80, 0xe4, 0x49, 0xf5, 0xc7, 0x57, 0xb3, 0xb6, 0x99, 0x6a, 0x9d, 0xc0, 0xb5, 0xb2, 0x75, 0x0b, 0x97, 0xbb, 0xad, 0x2f, 0x55, 0x3f, 0xba, 0xff, 0x2a, 0xed, 0xec, 0xfc, 0x9f, 0xf6, 0xa9, 0x70, 0xd1, 0x56, 0xe4, 0xfe, 0x38, 0x52, 0x97, 0x9d, 0xc9, 0x13, 0xbd, 0xb2, 0x96, 0xa3, 0x21, 0xf7, 0x66, 0x36, 0x72, 0x39, 0xde, 0x45, 0xe4, 0x7c, 0xbe, 0xf4, 0xd7, 0x9b, 0xfa, 0x3d, 0x57, 0x68, 0x87, 0xc6, 0x5f, 0x7f, 0x8a, 0x60 }; static const uint8_t ac_dsa_vect110_priv_val[] = { /* X */ 0xb7, 0x5e, 0xe8, 0x0c, 0x89, 0x6b, 0x42, 0x14, 0x8e, 0xeb, 0x7d, 0x18, 0x5d, 0x45, 0xf5, 0x87, 0x2a, 0x37, 0x58, 0xe9, 0x83, 0xb4, 0xfd, 0xd8, 0xc2, 0xe7, 0x1c, 0xa0 }; static const uint8_t ac_dsa_vect110_pub_val[] = { /* Y */ 0x7e, 0xc0, 0xa5, 0x41, 0x88, 0x28, 0x15, 0x9e, 0x3e, 0xc8, 0x29, 0xf7, 0x93, 0xb9, 0x6e, 0xa3, 0x46, 0x03, 0x28, 0xde, 0xa2, 0x1b, 0xa1, 0x57, 0xd7, 0x1a, 0xc3, 0x06, 0xf9, 0xbc, 0xde, 0x61, 0x7d, 0xb6, 0x73, 0x68, 0xd5, 0x92, 0xbf, 0x46, 0xd4, 0x69, 0x18, 0xb1, 0x30, 0xfc, 0x7e, 0x3d, 0x11, 0x89, 0xee, 0xb7, 0x99, 0x6d, 0x5f, 0x66, 0x0a, 0xce, 0x30, 0xbe, 0x50, 0x9a, 0x26, 0xb2, 0x18, 0xd8, 0x65, 0xd9, 0xe5, 0x6b, 0xa7, 0xf6, 0x19, 0x42, 0xe5, 0x67, 0xd8, 0xcd, 0xab, 0x96, 0xa7, 0x8c, 0xa3, 0x03, 0xc6, 0xb0, 0x1d, 0x98, 0x9b, 0x1e, 0x78, 0xae, 0x95, 0x64, 0x23, 0xe3, 0x5b, 0x5a, 0x46, 0x6c, 0x16, 0x07, 0x4e, 0x0b, 0xc9, 0xe8, 0x37, 0x23, 0x40, 0xd2, 0xc1, 0x25, 0x16, 0xc2, 0x2d, 0x5e, 0x1f, 0xf6, 0x5a, 0xbd, 0x5d, 0x44, 0x82, 0x15, 0xb6, 0xba, 0xf5, 0x65, 0xde, 0x18, 0x20, 0x1c, 0x1f, 0xd5, 0xba, 0x3d, 0xe8, 0x7e, 0x5d, 0x5b, 0x43, 0x7d, 0x2f, 0x48, 0xde, 0xee, 0x72, 0xa1, 0x2e, 0x65, 0x5f, 0x8c, 0x7f, 0xa3, 0x13, 0xd2, 0x4b, 0xd0, 0xc8, 0xc2, 0x0e, 0x59, 0xc9, 0x0e, 0xdf, 0xbf, 0x5d, 0xfc, 0x05, 0x7c, 0x6b, 0x67, 0x98, 0x50, 0xae, 0x41, 0x82, 0x61, 0x78, 0xf2, 0xf3, 0x04, 0xca, 0x3b, 0x92, 0xa9, 0xba, 0xc3, 0x1a, 0xb3, 0xcf, 0x74, 0xdf, 0xb8, 0xee, 0x5b, 0x64, 0x3b, 0x4a, 0x34, 0x1e, 0xbb, 0xdb, 0x5d, 0xbd, 0x24, 0xd0, 0xb7, 0x82, 0xc5, 0xb4, 0x50, 0x59, 0x6a, 0xbf, 0xc3, 0xdf, 0x9e, 0xe0, 0x5f, 0x45, 0xd0, 0xea, 0x2e, 0x8f, 0xf4, 0x35, 0x7c, 0xd3, 0x60, 0x5f, 0x35, 0x06, 0xce, 0x58, 0xa5, 0x39, 0x4f, 0x1f, 0x24, 0x44, 0xc2, 0x63, 0x59, 0x29, 0x9a, 0xf1, 0x53, 0x53, 0x2b, 0xc9, 0x0d, 0xaa, 0xf9, 0x54, 0xae }; /* K = ba98b478a9e12a1d03b6aca65c0acb265764357cca67d04d782fded9 */ static const uint8_t ac_dsa_vect110_out[] = { /* R */ 0x2b, 0x47, 0xe2, 0x57, 0xbf, 0x72, 0xad, 0xf3, 0x4d, 0x61, 0x8d, 0x3a, 0x6c, 0x46, 0x14, 0x28, 0x81, 0xbd, 0xd0, 0x68, 0x9a, 0x46, 0xf1, 0xcb, 0x31, 0x99, 0xee, 0x6c, /* S */ 0xcc, 0x1f, 0xf2, 0xfa, 0x37, 0x55, 0xa0, 0xe8, 0x1e, 0xdf, 0xc7, 0x53, 0xbc, 0xf1, 0x4e, 0x63, 0x74, 0x13, 0xea, 0xee, 0x0f, 0x22, 0xd7, 0x88, 0x6b, 0x05, 0x8d, 0xcc }; #define ac_dsa_vect111_prime ac_dsa_vect106_prime #define ac_dsa_vect111_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect111_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect111_ptx[] = { /* Msg */ 0xa6, 0xd7, 0x60, 0x47, 0xbd, 0x18, 0xde, 0xef, 0xe7, 0x0d, 0xc0, 0xa4, 0xbd, 0x08, 0x2a, 0x10, 0xfa, 0x52, 0x1d, 0xff, 0xda, 0x78, 0x2a, 0x93, 0x64, 0xb9, 0xe2, 0xb1, 0x1e, 0x14, 0x7e, 0x1a, 0x36, 0xa1, 0x1c, 0x43, 0x00, 0x67, 0x21, 0x44, 0xd9, 0xb9, 0x74, 0x13, 0x2b, 0x49, 0x75, 0xf2, 0x7e, 0xa6, 0xe8, 0xe4, 0x6b, 0x55, 0xae, 0xdd, 0x67, 0x23, 0xe5, 0x3e, 0x7b, 0xc9, 0xb4, 0x0d, 0xce, 0x24, 0x49, 0x28, 0x5a, 0x69, 0x08, 0x85, 0xc3, 0x22, 0x3b, 0x63, 0x6c, 0xb5, 0xc4, 0x87, 0x3c, 0x5d, 0xda, 0xeb, 0xb0, 0xb6, 0xdc, 0x5b, 0x69, 0x43, 0x8d, 0x88, 0x1a, 0x52, 0x59, 0x05, 0xa5, 0x1b, 0xdb, 0x97, 0xb0, 0x51, 0xdb, 0xfe, 0xc6, 0xdd, 0x4a, 0x7b, 0x58, 0x02, 0x97, 0xb0, 0x8f, 0x2b, 0xa6, 0x0f, 0x2e, 0xad, 0x3a, 0x07, 0x53, 0x1c, 0xf2, 0x99, 0x97, 0x74, 0x13, 0xaf }; static const uint8_t ac_dsa_vect111_priv_val[] = { /* X */ 0x1c, 0x0e, 0x4c, 0x78, 0xa4, 0xad, 0x4f, 0x50, 0x46, 0xf9, 0x29, 0xe7, 0xcd, 0x3d, 0xb3, 0xf4, 0x8b, 0x86, 0xe5, 0xea, 0xb4, 0xa5, 0xe2, 0xbe, 0x61, 0xa0, 0x8d, 0xfe }; static const uint8_t ac_dsa_vect111_pub_val[] = { /* Y */ 0x8b, 0x26, 0x62, 0x77, 0x5b, 0xb7, 0xf1, 0x92, 0x52, 0x20, 0x45, 0x94, 0xa8, 0x4b, 0x46, 0x9f, 0x3d, 0xc8, 0xd6, 0x6e, 0xb7, 0x99, 0x3b, 0xed, 0x12, 0x2d, 0x8a, 0x06, 0x5f, 0x59, 0xea, 0x81, 0xd4, 0xc4, 0x84, 0xce, 0xe5, 0xbd, 0x76, 0x6a, 0x5c, 0x13, 0x7d, 0xd5, 0x7e, 0x43, 0xe9, 0x41, 0x33, 0x98, 0x52, 0x15, 0x05, 0x09, 0xac, 0xbd, 0xe6, 0xf7, 0x95, 0x7a, 0x1b, 0x04, 0xec, 0xe7, 0x18, 0x56, 0x5c, 0xe8, 0xb6, 0x37, 0xea, 0x03, 0x1b, 0xfa, 0x34, 0x10, 0xa5, 0x80, 0x74, 0x4b, 0x3d, 0x49, 0x59, 0xa5, 0xe7, 0x5e, 0x31, 0x5d, 0xd3, 0x3c, 0x02, 0xb5, 0x2c, 0x7c, 0x56, 0x21, 0x8b, 0x7c, 0xdf, 0xdc, 0x24, 0xf5, 0x1d, 0xdb, 0x4e, 0x78, 0x49, 0xfa, 0xf2, 0x89, 0xcf, 0x80, 0x6c, 0x4d, 0x3c, 0x6b, 0x87, 0x7c, 0x63, 0xdb, 0xfa, 0xb5, 0x69, 0x92, 0x0a, 0x2b, 0x21, 0x9c, 0x39, 0x21, 0x5c, 0x5e, 0x3e, 0x63, 0x8a, 0x3e, 0xbe, 0xeb, 0xfb, 0x52, 0xc8, 0xb3, 0x8e, 0x82, 0x85, 0xa8, 0x5d, 0x62, 0x5f, 0xc1, 0xb4, 0x2f, 0xbf, 0x0e, 0x51, 0x8c, 0x58, 0xeb, 0x8f, 0x45, 0xfa, 0x54, 0x67, 0x6e, 0xd8, 0xb0, 0x09, 0x41, 0x5d, 0x26, 0x96, 0xee, 0x9b, 0x51, 0x53, 0xdd, 0xdc, 0x5e, 0xeb, 0xef, 0x49, 0xcc, 0x76, 0x59, 0x81, 0x0a, 0x98, 0xd4, 0xb5, 0xe8, 0xb9, 0x69, 0x5f, 0xb2, 0xd9, 0xe4, 0xbf, 0x19, 0x20, 0x93, 0x74, 0x7c, 0x87, 0x8a, 0x95, 0x65, 0xb4, 0x7c, 0xba, 0x05, 0x3c, 0x48, 0xba, 0x7c, 0x0b, 0x9b, 0x1c, 0xe7, 0x7f, 0x8a, 0x3e, 0x10, 0x43, 0xe8, 0x7f, 0xcc, 0x61, 0x32, 0xcb, 0xe8, 0xfa, 0xd7, 0xc7, 0x38, 0xe9, 0xbf, 0x79, 0xbc, 0xcb, 0x41, 0x4e, 0xf2, 0x49, 0x07, 0x67, 0x5b, 0xa7, 0xcb, 0x05, 0x9a, 0x83, 0x89, 0xee, 0xe7, 0xeb, 0xbe }; /* K = 5135933094326e3953250a29d5f5c4c9a1033ccb844ab35a14c19d31 */ static const uint8_t ac_dsa_vect111_out[] = { /* R */ 0xb8, 0x67, 0x4d, 0x1b, 0xa6, 0xf1, 0x33, 0x98, 0xf5, 0xe8, 0x94, 0x4b, 0x82, 0x15, 0x0d, 0x9e, 0x9b, 0xc9, 0xb2, 0x10, 0xa8, 0x14, 0x95, 0xb3, 0x35, 0x94, 0x7e, 0x64, /* S */ 0x75, 0xfc, 0xfe, 0x96, 0x92, 0x61, 0x86, 0xef, 0xa1, 0x2c, 0x00, 0x7c, 0x09, 0x85, 0x20, 0x51, 0x47, 0xcf, 0x65, 0xab, 0xd1, 0x08, 0x36, 0x3d, 0x8b, 0x89, 0x11, 0x90 }; #define ac_dsa_vect112_prime ac_dsa_vect106_prime #define ac_dsa_vect112_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect112_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect112_ptx[] = { /* Msg */ 0xf0, 0xd5, 0xb3, 0x33, 0x27, 0x69, 0x55, 0x36, 0xe3, 0x51, 0xb3, 0x7c, 0xd3, 0xfe, 0xea, 0x69, 0x3f, 0x10, 0x37, 0x7a, 0x5f, 0x8b, 0xdd, 0x91, 0x34, 0x02, 0xc2, 0xed, 0x67, 0xa0, 0xfc, 0x1e, 0x7b, 0xca, 0xab, 0x00, 0x2f, 0xa7, 0x79, 0x93, 0x59, 0x50, 0xc7, 0x6e, 0x42, 0xa4, 0x91, 0xa6, 0x8f, 0xa6, 0xfe, 0x44, 0x5c, 0xd3, 0x55, 0x75, 0xcf, 0xce, 0x5f, 0x37, 0x6c, 0x29, 0xc4, 0xe8, 0xc0, 0xfe, 0xd5, 0xa5, 0x48, 0x7e, 0xf4, 0x18, 0xb9, 0x6f, 0xa5, 0x75, 0x2a, 0x03, 0x3a, 0xd0, 0x79, 0x59, 0x65, 0x3d, 0x1b, 0x8a, 0xf6, 0x70, 0x2d, 0xcc, 0xe4, 0x0e, 0xfe, 0xf2, 0x1b, 0x2d, 0x64, 0xcf, 0x06, 0xbd, 0x8b, 0x03, 0xda, 0xdb, 0x2f, 0xda, 0xaa, 0x73, 0xfb, 0x2d, 0x3d, 0x75, 0xb0, 0x98, 0x5e, 0x9a, 0xef, 0xa1, 0xf9, 0x44, 0x42, 0xa5, 0x49, 0x1a, 0xe4, 0x6d, 0x7c, 0x51 }; static const uint8_t ac_dsa_vect112_priv_val[] = { /* X */ 0x26, 0x90, 0x55, 0xde, 0x62, 0xd0, 0x74, 0x23, 0x24, 0x80, 0x36, 0x24, 0x52, 0x2e, 0x67, 0x82, 0x34, 0xc3, 0x60, 0x0a, 0xe7, 0xbc, 0x39, 0x96, 0xc8, 0xd1, 0x7b, 0xc9 }; static const uint8_t ac_dsa_vect112_pub_val[] = { /* Y */ 0xa4, 0x48, 0xb0, 0xd4, 0x48, 0x24, 0x9a, 0x0e, 0x54, 0xa9, 0x45, 0x86, 0x88, 0x29, 0x85, 0xa0, 0x8e, 0x19, 0x97, 0x22, 0x81, 0xd1, 0x0d, 0x9e, 0x7f, 0xb5, 0x7f, 0x95, 0xdf, 0xee, 0xbf, 0x97, 0x1f, 0x6d, 0x9d, 0xfe, 0x88, 0xdb, 0xd0, 0xa4, 0x95, 0x0f, 0x52, 0x82, 0x00, 0xbe, 0x7b, 0x60, 0x58, 0x65, 0xee, 0xfd, 0x8e, 0xc2, 0x74, 0xac, 0x53, 0xe4, 0xed, 0x5b, 0x28, 0x8c, 0x6a, 0x00, 0x72, 0x1e, 0x02, 0x88, 0x81, 0xb9, 0x72, 0x5f, 0xb0, 0xa9, 0xce, 0x41, 0x53, 0xdc, 0xc1, 0xfe, 0x7b, 0x5c, 0xe7, 0x25, 0x9f, 0x16, 0xea, 0x8b, 0x32, 0x45, 0x6c, 0xb0, 0x3b, 0xae, 0x81, 0xbe, 0x77, 0xf3, 0xf6, 0xe8, 0xb3, 0x9f, 0x52, 0x58, 0x7b, 0xc9, 0xdd, 0x47, 0xa2, 0x64, 0x27, 0x8d, 0x5d, 0x8e, 0xcb, 0xe1, 0xba, 0x57, 0x42, 0x69, 0x69, 0x6a, 0x7b, 0xb1, 0xe1, 0x67, 0xa3, 0xae, 0x71, 0x10, 0xec, 0x05, 0x7f, 0x42, 0x91, 0xa1, 0xba, 0xe8, 0x25, 0x7d, 0x69, 0xc1, 0x0a, 0xe0, 0x95, 0xf3, 0x27, 0x16, 0x21, 0xc6, 0xd6, 0xb5, 0x60, 0x79, 0x25, 0xc3, 0x49, 0x81, 0x89, 0xd7, 0x51, 0xb7, 0xc9, 0xbf, 0x30, 0xe6, 0x56, 0x83, 0xcb, 0x39, 0xfb, 0x51, 0xbd, 0x59, 0x2f, 0x1f, 0x98, 0x27, 0x9f, 0x2e, 0x7b, 0x2b, 0x53, 0xad, 0x54, 0x68, 0x16, 0xa8, 0x50, 0x8c, 0x93, 0xf0, 0x34, 0x96, 0xde, 0x7c, 0x47, 0x16, 0x5f, 0x5c, 0xf2, 0x97, 0x68, 0x7a, 0xd7, 0xd6, 0x0f, 0x01, 0x0a, 0xb9, 0xfa, 0xad, 0x01, 0x53, 0x43, 0x2e, 0xc1, 0xcc, 0xdf, 0x26, 0xd4, 0xf4, 0x41, 0xdf, 0x62, 0x53, 0x94, 0xe2, 0x10, 0x42, 0x08, 0xbb, 0x67, 0x5e, 0x7f, 0x97, 0x2b, 0x6c, 0x66, 0xed, 0x70, 0x28, 0xa1, 0xe3, 0xf4, 0x5a, 0x67, 0x1a, 0xb2, 0x71, 0x6c, 0x60, 0xfe, 0xab, 0xcc, 0x22 }; /* K = 0d9d0b3e1f24cbb18320f9ce896cfca2a5a6bb28ceec83e1ff3218d3 */ static const uint8_t ac_dsa_vect112_out[] = { /* R */ 0x01, 0xa4, 0xf4, 0xbc, 0x63, 0x3e, 0xbf, 0x84, 0x2a, 0x28, 0xd0, 0x45, 0x18, 0x4d, 0x25, 0x05, 0x29, 0x92, 0x0d, 0xf2, 0x80, 0x54, 0x5c, 0xba, 0x00, 0x50, 0x1c, 0xad, /* S */ 0x09, 0xfc, 0xeb, 0x2d, 0xf2, 0x00, 0xb7, 0xc0, 0xa5, 0x6a, 0xe7, 0x96, 0x9f, 0x54, 0x73, 0xb7, 0xa1, 0xf6, 0xb7, 0x03, 0xf7, 0x43, 0xf9, 0x54, 0xa4, 0xfb, 0xdb, 0xe3 }; #define ac_dsa_vect113_prime ac_dsa_vect106_prime #define ac_dsa_vect113_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect113_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect113_ptx[] = { /* Msg */ 0xf5, 0x8e, 0x03, 0x9d, 0x66, 0x6e, 0xf0, 0x64, 0xcc, 0xcc, 0x7e, 0xd0, 0x15, 0x01, 0x7c, 0x68, 0x39, 0x3d, 0x14, 0x55, 0x30, 0x0d, 0x0c, 0x4f, 0xd4, 0xf0, 0xd3, 0x02, 0xc4, 0x3a, 0x00, 0x22, 0x36, 0x3a, 0x7c, 0xb0, 0x1b, 0xf0, 0x67, 0x3d, 0x32, 0x52, 0x93, 0xbd, 0x50, 0xb2, 0x7f, 0x81, 0x87, 0xd8, 0x8e, 0xe2, 0xb5, 0x53, 0xb1, 0x59, 0xa9, 0x7d, 0x15, 0xac, 0x54, 0x34, 0x21, 0x44, 0x6c, 0x2a, 0xec, 0x39, 0x56, 0x63, 0x15, 0x21, 0x1b, 0x9b, 0x41, 0x08, 0xca, 0xcf, 0x90, 0x85, 0xda, 0xcd, 0xb4, 0xde, 0x94, 0xbc, 0xe8, 0x40, 0x97, 0xc0, 0x89, 0x2b, 0x1c, 0xc6, 0x5f, 0x2e, 0x10, 0xd7, 0x4e, 0x52, 0x93, 0xa0, 0x4a, 0x83, 0x7b, 0x61, 0x6d, 0x41, 0x81, 0xf3, 0xfe, 0x4c, 0xaa, 0x4c, 0xc2, 0xe7, 0x44, 0x91, 0x6e, 0x77, 0x0f, 0xf0, 0xab, 0x13, 0x68, 0xc8, 0x6c, 0xfc }; static const uint8_t ac_dsa_vect113_priv_val[] = { /* X */ 0x37, 0x52, 0xb2, 0x00, 0x33, 0x84, 0x3d, 0x1e, 0xa4, 0xf4, 0x80, 0x18, 0xbe, 0xde, 0x79, 0xf3, 0x9c, 0x15, 0xde, 0x33, 0xdf, 0x64, 0x14, 0x02, 0x59, 0xae, 0xbb, 0x82 }; static const uint8_t ac_dsa_vect113_pub_val[] = { /* Y */ 0x40, 0x52, 0x53, 0x4a, 0x77, 0x26, 0xcb, 0xe1, 0x7e, 0x34, 0x55, 0x56, 0x48, 0xe5, 0xf2, 0x97, 0xb9, 0x63, 0xf2, 0x2d, 0x3a, 0xca, 0x24, 0x97, 0x85, 0xad, 0x93, 0x2f, 0x6e, 0xa1, 0xfb, 0x5d, 0xf3, 0x1d, 0x37, 0x9b, 0x68, 0x52, 0x2f, 0x8e, 0xeb, 0xed, 0xfc, 0x9b, 0x5c, 0x52, 0x77, 0xe9, 0x15, 0x74, 0xfa, 0x79, 0xec, 0xf0, 0x37, 0x80, 0xcc, 0x44, 0x35, 0x1f, 0x3e, 0x3b, 0xfa, 0x1a, 0x05, 0x87, 0xc8, 0x8d, 0x0e, 0x04, 0xe0, 0xa0, 0x2c, 0xd1, 0xee, 0x9a, 0xe2, 0x10, 0xb3, 0xc9, 0xaa, 0xcc, 0x65, 0xc7, 0x1c, 0xf1, 0xb8, 0x64, 0x63, 0x36, 0x7e, 0x2b, 0xe2, 0x5c, 0xca, 0xdd, 0x9d, 0x5a, 0x4d, 0x1f, 0xcb, 0xd5, 0x87, 0x72, 0xf7, 0xa1, 0x17, 0xf3, 0x67, 0x3c, 0x76, 0xee, 0x2a, 0x8d, 0x93, 0x44, 0x6f, 0xfd, 0x7c, 0xda, 0x7f, 0x84, 0x30, 0x49, 0x05, 0x02, 0xc1, 0x6b, 0x1a, 0x50, 0x22, 0xe1, 0x2a, 0x3a, 0x95, 0xa7, 0xa9, 0xf2, 0x0e, 0x98, 0xd3, 0xb2, 0x85, 0xab, 0xe3, 0x0e, 0x8d, 0xe4, 0x2a, 0x11, 0xc5, 0x17, 0xc1, 0x4e, 0xf3, 0xb6, 0xe5, 0xb6, 0xc4, 0x71, 0x14, 0xa9, 0x61, 0xd8, 0x58, 0xc6, 0x87, 0x55, 0x61, 0xc7, 0xd5, 0xd2, 0x1b, 0x7c, 0x93, 0xf3, 0x73, 0xcb, 0x33, 0x08, 0x00, 0x72, 0x8e, 0xa1, 0x88, 0xb2, 0x57, 0x8a, 0x6d, 0xf3, 0x47, 0x72, 0xa7, 0xac, 0xdd, 0xb8, 0x29, 0xc0, 0x9b, 0x3a, 0xcf, 0x9b, 0xc5, 0xb0, 0x61, 0x40, 0xb9, 0xb0, 0x35, 0x26, 0x7a, 0x40, 0xe8, 0x6c, 0x1a, 0xf5, 0x57, 0x7b, 0x3d, 0x02, 0xa8, 0x9b, 0x20, 0xa4, 0x65, 0x73, 0xc8, 0x75, 0x00, 0xa2, 0xeb, 0xed, 0x4b, 0x00, 0xb1, 0xfb, 0x13, 0xa8, 0x6f, 0x14, 0x3e, 0x35, 0x67, 0x02, 0xd7, 0x91, 0x37, 0x9a, 0x90, 0xdf, 0xcc, 0x26, 0xb8, 0x07, 0x19, 0xad }; /* K = 1220ac99b9124f1dc2212ade5691fd330d6d868f3e90694236d44b70 */ static const uint8_t ac_dsa_vect113_out[] = { /* R */ 0x31, 0xfd, 0xe5, 0xf2, 0x2e, 0xbb, 0x42, 0x6f, 0x25, 0x6b, 0x17, 0x50, 0x57, 0xa7, 0x61, 0x25, 0xc4, 0x01, 0x36, 0x97, 0x4a, 0xd5, 0x8e, 0x68, 0x1e, 0xc2, 0xc4, 0xa9, /* S */ 0x77, 0xb0, 0x61, 0x4d, 0xd9, 0x9a, 0xcb, 0xbf, 0x4c, 0x43, 0xaa, 0x92, 0x6b, 0x3f, 0x0b, 0xe1, 0xcd, 0x52, 0xd5, 0x27, 0x75, 0xf2, 0x2a, 0x40, 0x8c, 0x4e, 0x03, 0x04 }; #define ac_dsa_vect114_prime ac_dsa_vect106_prime #define ac_dsa_vect114_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect114_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect114_ptx[] = { /* Msg */ 0x14, 0x77, 0xaa, 0x0b, 0x9f, 0x1b, 0x19, 0x9b, 0x6a, 0xa0, 0x93, 0x1d, 0x4d, 0x3f, 0x76, 0x6d, 0x80, 0xa3, 0xaf, 0x10, 0xc9, 0xff, 0x73, 0x15, 0x39, 0x1f, 0x15, 0xed, 0xc4, 0xe9, 0x26, 0x32, 0xf9, 0xd4, 0xd2, 0x1a, 0x80, 0x33, 0x21, 0x5d, 0x5e, 0x99, 0xcf, 0xf1, 0x70, 0xd9, 0x88, 0x8f, 0x02, 0x0b, 0x0d, 0xb0, 0xe5, 0xb9, 0x7e, 0x12, 0x3a, 0x28, 0x89, 0x89, 0x8c, 0x5b, 0x0e, 0xf7, 0xc8, 0x32, 0xd0, 0x28, 0xaf, 0xd5, 0xe3, 0x85, 0x00, 0x45, 0x31, 0xff, 0x99, 0x89, 0x79, 0x7c, 0x3b, 0xd9, 0x54, 0xb1, 0xac, 0x72, 0x90, 0x66, 0x57, 0x76, 0x67, 0x56, 0x78, 0x84, 0xcd, 0x4b, 0xc5, 0xd0, 0x55, 0xa3, 0xf6, 0x45, 0x58, 0x3d, 0x29, 0xcf, 0x47, 0x58, 0x50, 0x7c, 0x88, 0x3c, 0x5b, 0xbf, 0xa7, 0x44, 0x44, 0xb9, 0xc5, 0xb9, 0xb4, 0x95, 0x07, 0x2c, 0x32, 0x61, 0xb6, 0xec }; static const uint8_t ac_dsa_vect114_priv_val[] = { /* X */ 0x83, 0x77, 0x07, 0x84, 0x91, 0x62, 0x27, 0xab, 0x2a, 0x73, 0xed, 0xaa, 0xc5, 0xa9, 0x5f, 0x75, 0x38, 0xfd, 0x94, 0xf8, 0x96, 0x50, 0x84, 0x1d, 0x79, 0xa3, 0x7d, 0x7a }; static const uint8_t ac_dsa_vect114_pub_val[] = { /* Y */ 0x46, 0x75, 0xf1, 0x9b, 0x00, 0x95, 0xfa, 0xf8, 0xec, 0x96, 0x88, 0x8e, 0x48, 0x3f, 0x3a, 0x0a, 0xa6, 0x75, 0xf5, 0xb4, 0x25, 0x91, 0x07, 0x65, 0x06, 0x9a, 0xb5, 0x7c, 0x97, 0xa1, 0x2b, 0x7c, 0x50, 0x64, 0x37, 0xc8, 0x75, 0x7f, 0xef, 0x54, 0xec, 0xc6, 0xd3, 0x10, 0x92, 0x1d, 0x71, 0x59, 0xff, 0x39, 0xf2, 0xf1, 0xcd, 0x95, 0x35, 0xb6, 0x4f, 0x27, 0xf1, 0x36, 0x91, 0x37, 0x15, 0x77, 0x5a, 0x23, 0x8f, 0xbe, 0x01, 0x23, 0x7e, 0x18, 0x1a, 0xde, 0xbe, 0x55, 0x1f, 0xfe, 0x5d, 0x21, 0xe3, 0xc3, 0x57, 0x74, 0xe7, 0xad, 0xe8, 0xc7, 0x9d, 0xf7, 0x41, 0xc5, 0x2d, 0xab, 0xd8, 0xbe, 0x47, 0x82, 0xee, 0x5a, 0x3b, 0x60, 0x7a, 0x39, 0xd1, 0xb4, 0x55, 0xdc, 0x84, 0x83, 0x01, 0x84, 0x73, 0x12, 0x98, 0x05, 0x66, 0xf5, 0x5e, 0xba, 0x08, 0x06, 0x21, 0xe3, 0xc1, 0x23, 0x14, 0x2a, 0x1a, 0x20, 0x74, 0xe2, 0xe3, 0x9f, 0x6c, 0x06, 0x30, 0xb3, 0x68, 0x31, 0xf0, 0x74, 0x86, 0x9d, 0x46, 0xa6, 0x84, 0x29, 0xf6, 0x25, 0x73, 0xcd, 0x2c, 0x67, 0x17, 0x26, 0x13, 0x1f, 0xbf, 0xd5, 0x66, 0xa6, 0xd0, 0x71, 0x93, 0xdb, 0x4f, 0x36, 0x78, 0x02, 0xd7, 0xde, 0x8f, 0x4e, 0x83, 0x0a, 0xa8, 0x78, 0xee, 0x2c, 0xdf, 0xb8, 0x6d, 0x85, 0x37, 0x74, 0x6b, 0x71, 0xc7, 0x0f, 0xbc, 0xb6, 0xa1, 0xfa, 0xd6, 0x62, 0x13, 0xd6, 0xfb, 0xea, 0x68, 0x24, 0x1e, 0xb9, 0xf6, 0x17, 0x47, 0x8a, 0xdc, 0xc9, 0xfa, 0xaa, 0xb2, 0x6c, 0xf8, 0x1b, 0x91, 0x20, 0x89, 0xda, 0x0c, 0x4b, 0x18, 0x7b, 0x49, 0x6a, 0x17, 0xd8, 0x86, 0xce, 0xf5, 0x71, 0xe3, 0x93, 0xd6, 0xf1, 0xf8, 0x57, 0xeb, 0xf5, 0x17, 0xc8, 0x01, 0xf9, 0x23, 0x1e, 0x95, 0xdb, 0x66, 0x1e, 0x8c, 0xb2, 0x09, 0x54, 0x56, 0xa3 }; /* K = 6406035023c5e150e8758baeb00a9b858ebd0e4090334c69e2fd2377 */ static const uint8_t ac_dsa_vect114_out[] = { /* R */ 0xa2, 0x38, 0x0b, 0x5e, 0xce, 0x76, 0x67, 0x26, 0x69, 0xe2, 0x61, 0x87, 0xa1, 0x7d, 0xa4, 0x5a, 0xd8, 0x9d, 0xe1, 0x72, 0x6c, 0x82, 0x6e, 0x57, 0x37, 0x8a, 0xf7, 0x07, /* S */ 0x9c, 0xc2, 0x6c, 0x34, 0x56, 0xc0, 0xa4, 0x09, 0xf4, 0xcc, 0x98, 0xc8, 0x3e, 0xa5, 0x17, 0x6e, 0xb2, 0x93, 0xec, 0x71, 0x57, 0xe5, 0x13, 0x70, 0x72, 0x64, 0x29, 0xce }; #define ac_dsa_vect115_prime ac_dsa_vect106_prime #define ac_dsa_vect115_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect115_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect115_ptx[] = { /* Msg */ 0xfc, 0x82, 0x37, 0x25, 0x66, 0xef, 0x2c, 0x62, 0x6b, 0x21, 0x45, 0x54, 0x9a, 0x5d, 0xb9, 0x73, 0x11, 0x8d, 0xff, 0x4c, 0x6d, 0x1d, 0x7c, 0x4a, 0x2e, 0x16, 0xec, 0xc3, 0x1b, 0x43, 0xc1, 0x4a, 0xd3, 0x68, 0x31, 0x73, 0x53, 0x5b, 0x0b, 0x82, 0x33, 0x1f, 0x15, 0xa1, 0x83, 0xe6, 0xa5, 0x02, 0x00, 0xfd, 0x1e, 0x88, 0xff, 0x90, 0x3e, 0xcf, 0xc5, 0x0b, 0xdd, 0x4f, 0x58, 0x75, 0xe2, 0x64, 0xa4, 0x49, 0x9e, 0xad, 0xbd, 0xaf, 0x80, 0x7f, 0x97, 0x4f, 0x8d, 0x81, 0x04, 0x47, 0x7a, 0x0e, 0x4d, 0x30, 0x46, 0x3d, 0xfc, 0x61, 0xcd, 0xac, 0x5b, 0xf4, 0x4e, 0xab, 0x96, 0xc7, 0x70, 0xa7, 0xdb, 0x91, 0x2e, 0xee, 0x2d, 0xb2, 0x48, 0xcd, 0xd2, 0xb9, 0xb3, 0x62, 0x11, 0xf9, 0x38, 0x70, 0xbe, 0xae, 0x6b, 0xdf, 0x8e, 0x0a, 0xed, 0x00, 0x97, 0x51, 0x9e, 0xcd, 0xe3, 0x47, 0x0c, 0xdd }; static const uint8_t ac_dsa_vect115_priv_val[] = { /* X */ 0x8d, 0x28, 0x55, 0xe4, 0xea, 0x3e, 0x50, 0x85, 0xa5, 0xc1, 0x45, 0xe3, 0x24, 0xe5, 0xd5, 0xa5, 0xf8, 0xf2, 0x37, 0x56, 0x28, 0x46, 0x69, 0x27, 0x97, 0x28, 0xec, 0x9c }; static const uint8_t ac_dsa_vect115_pub_val[] = { /* Y */ 0x38, 0x84, 0xab, 0x23, 0xab, 0x93, 0xd9, 0xd1, 0xb7, 0x16, 0x71, 0x2c, 0x8d, 0xaa, 0x08, 0x0b, 0x26, 0xaf, 0x01, 0x65, 0x7f, 0x0d, 0xab, 0x71, 0x5e, 0xbe, 0x6b, 0xd7, 0x66, 0xde, 0xca, 0x76, 0x12, 0xbe, 0xa6, 0xa4, 0xcf, 0x1f, 0xf7, 0xd0, 0x8a, 0xbb, 0x2d, 0x44, 0x42, 0xac, 0x0e, 0xaa, 0xb0, 0x1e, 0x68, 0x57, 0x0b, 0xdc, 0xc2, 0x22, 0xf8, 0x4b, 0xc3, 0xdd, 0x6d, 0x8c, 0x54, 0x90, 0x13, 0x2d, 0x1c, 0x36, 0xe2, 0x39, 0x13, 0xf0, 0x0d, 0x11, 0xc8, 0x03, 0xb7, 0x03, 0xa6, 0x9a, 0x51, 0xa1, 0xb4, 0x75, 0xf5, 0x6d, 0xb0, 0x0f, 0xca, 0x47, 0xd2, 0x34, 0xaa, 0xc3, 0x07, 0xb9, 0xe7, 0x98, 0xe9, 0xfd, 0x89, 0x1d, 0xff, 0x9c, 0x12, 0x57, 0xbe, 0xe5, 0x56, 0x31, 0x4b, 0x02, 0x1f, 0xbf, 0x93, 0xf7, 0x5e, 0xd8, 0xc4, 0x34, 0x33, 0xaf, 0xa7, 0x15, 0xb8, 0x2d, 0x5e, 0xc6, 0xaf, 0x8e, 0xf9, 0x47, 0x1e, 0x9b, 0x02, 0xf9, 0x55, 0x4e, 0xd7, 0x95, 0x7c, 0x1f, 0x46, 0xd8, 0xdb, 0x35, 0xa5, 0x92, 0x1f, 0x4a, 0x83, 0x72, 0x7f, 0x75, 0x4e, 0x82, 0xb6, 0xff, 0xa6, 0xd1, 0xb8, 0x25, 0x95, 0x22, 0x08, 0x76, 0xd2, 0x2e, 0x18, 0xfb, 0xaf, 0xa5, 0x33, 0x3b, 0x26, 0xc2, 0xcf, 0xd4, 0x7d, 0x89, 0x4a, 0xaa, 0x71, 0x64, 0xa2, 0x63, 0x02, 0x94, 0xd0, 0xa3, 0x85, 0xfc, 0x8a, 0x8c, 0xf5, 0x7d, 0x10, 0xed, 0x0f, 0xc5, 0x3f, 0x21, 0xf1, 0xfd, 0x6b, 0x4c, 0x27, 0xe9, 0xc6, 0x9e, 0x65, 0xa2, 0x88, 0x44, 0x46, 0x19, 0xa3, 0xc2, 0x48, 0xbc, 0xc4, 0x4e, 0xc2, 0x56, 0x05, 0x02, 0x83, 0x25, 0x24, 0x32, 0x74, 0xd7, 0x21, 0x00, 0xed, 0xf5, 0x60, 0xcd, 0x38, 0x2b, 0xab, 0xee, 0x1c, 0xa5, 0x32, 0xb7, 0xf0, 0x6a, 0x43, 0x88, 0xf1, 0x81, 0xdb, 0xbb, 0x5d, 0xb5 }; /* K = 5cc12f090fd965c719efa2ee907a43b3643ca8f9ef7c537adcb09189 */ static const uint8_t ac_dsa_vect115_out[] = { /* R */ 0x54, 0x61, 0xb2, 0x07, 0x04, 0x45, 0x3b, 0x6c, 0x51, 0x83, 0x7f, 0x7b, 0x9e, 0xf5, 0x83, 0x61, 0x31, 0xb5, 0x01, 0xf2, 0x53, 0x91, 0x45, 0xca, 0x34, 0x81, 0xe6, 0xaf, /* S */ 0xb6, 0x5f, 0x69, 0xd2, 0x91, 0xff, 0xae, 0x2d, 0x16, 0xe3, 0x10, 0x8d, 0x69, 0xae, 0xb0, 0x1b, 0x4f, 0x92, 0x02, 0xaf, 0xa0, 0x13, 0x82, 0xe5, 0x3d, 0xea, 0x4d, 0x54 }; #define ac_dsa_vect116_prime ac_dsa_vect106_prime #define ac_dsa_vect116_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect116_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect116_ptx[] = { /* Msg */ 0xe6, 0x6a, 0xad, 0x54, 0x04, 0x8b, 0xec, 0xec, 0xa5, 0x68, 0x26, 0x44, 0xd5, 0x27, 0x4c, 0x18, 0x06, 0x83, 0x63, 0xe9, 0x68, 0xe3, 0x7e, 0x6c, 0x11, 0xc1, 0xf8, 0xa0, 0xd7, 0xe3, 0x20, 0x57, 0x85, 0x14, 0xe1, 0x87, 0x4e, 0x9d, 0x4e, 0xaf, 0x1b, 0xd0, 0x2d, 0xa6, 0xb7, 0x22, 0xed, 0x22, 0xac, 0xfc, 0xa4, 0x8c, 0x3a, 0xcb, 0x67, 0x0a, 0x6f, 0x9e, 0xe6, 0x2e, 0x3a, 0xa7, 0x1d, 0xeb, 0x18, 0x09, 0x75, 0x08, 0xf4, 0x31, 0xb0, 0x52, 0x14, 0xc1, 0x99, 0xc1, 0x66, 0xfa, 0x42, 0xcd, 0x6a, 0x07, 0x97, 0xbc, 0x7b, 0x4d, 0x1a, 0x2f, 0x33, 0x0c, 0xb6, 0x2c, 0x2c, 0x95, 0x18, 0x2f, 0xef, 0x0d, 0x06, 0x86, 0x25, 0x42, 0x84, 0x5e, 0x43, 0x0d, 0x77, 0x8c, 0x82, 0x07, 0x63, 0x87, 0xad, 0xad, 0x43, 0x55, 0xc2, 0x58, 0xe6, 0xc5, 0x43, 0xcd, 0x65, 0x6f, 0xe3, 0xcd, 0x23, 0x32 }; static const uint8_t ac_dsa_vect116_priv_val[] = { /* X */ 0x2c, 0x98, 0x4e, 0x84, 0x64, 0xcf, 0x57, 0x16, 0x05, 0x35, 0x20, 0xb6, 0xa7, 0x2c, 0x69, 0x79, 0x8b, 0x9e, 0xec, 0x1e, 0x11, 0x5b, 0x0a, 0x1e, 0x30, 0xe2, 0xe4, 0x4e }; static const uint8_t ac_dsa_vect116_pub_val[] = { /* Y */ 0x06, 0x24, 0x5b, 0xc5, 0x09, 0xb4, 0x95, 0x54, 0x40, 0xb0, 0xe4, 0x01, 0x71, 0x0d, 0xdb, 0x2c, 0x4e, 0xa2, 0xe5, 0x59, 0x59, 0x83, 0x61, 0xa3, 0x66, 0x6c, 0x4a, 0xb1, 0x2e, 0x76, 0x6b, 0x43, 0x9f, 0x21, 0xb9, 0x53, 0x96, 0x2f, 0x6e, 0xf5, 0xa1, 0x1d, 0xbe, 0xe5, 0x67, 0x7a, 0xb7, 0xf8, 0x90, 0x6d, 0x8b, 0x32, 0x51, 0x80, 0xef, 0x4e, 0x45, 0xd0, 0x5c, 0x12, 0x94, 0xfc, 0xe5, 0xdc, 0xaf, 0x63, 0x60, 0xf7, 0x1b, 0x10, 0xb7, 0x05, 0x56, 0xf3, 0x06, 0x99, 0x3d, 0x29, 0x5b, 0x69, 0x5f, 0xfe, 0x57, 0x29, 0xc5, 0xc5, 0xbb, 0xb6, 0xcb, 0x48, 0x34, 0xad, 0x03, 0x7b, 0xd8, 0x36, 0x4a, 0x12, 0xc9, 0x92, 0xc2, 0x59, 0x8e, 0x8e, 0xe6, 0xbe, 0xb1, 0x60, 0x6e, 0xbc, 0x0a, 0xc0, 0xff, 0x00, 0xc0, 0xea, 0x2e, 0xb8, 0xae, 0xd7, 0x5d, 0xca, 0x01, 0xa8, 0x90, 0x08, 0x5a, 0x40, 0x0e, 0xbf, 0x99, 0x3e, 0x58, 0x79, 0x38, 0x2f, 0xf9, 0x1a, 0xbf, 0x1b, 0xe2, 0xce, 0xed, 0xd1, 0xfc, 0x4a, 0x87, 0x43, 0x42, 0xb7, 0x7b, 0x6c, 0x55, 0xff, 0xe7, 0xf6, 0x76, 0xa1, 0xc9, 0x5e, 0xe4, 0xec, 0xc3, 0x23, 0x58, 0xa0, 0x80, 0xc9, 0x23, 0x61, 0xcf, 0xcd, 0x2e, 0x34, 0x26, 0xf7, 0x8c, 0x21, 0x7a, 0xe2, 0x95, 0x56, 0x70, 0x9e, 0xd0, 0x29, 0xb2, 0x87, 0xe7, 0x1f, 0xea, 0xe0, 0x60, 0x8c, 0xf3, 0x93, 0x88, 0x57, 0x04, 0x0d, 0x7f, 0x06, 0xb0, 0xf9, 0x1b, 0x3b, 0x4d, 0xa8, 0x92, 0x9d, 0xf4, 0xb5, 0x69, 0x8e, 0x73, 0x4a, 0x37, 0x31, 0x68, 0x79, 0xc3, 0x08, 0xa8, 0x1c, 0x09, 0x6b, 0x72, 0x3b, 0xf2, 0x08, 0x99, 0x10, 0xd5, 0xab, 0x30, 0xb8, 0xef, 0xf3, 0x88, 0x58, 0xaf, 0xf6, 0xec, 0xf7, 0x64, 0xe2, 0x68, 0xed, 0x69, 0x8b, 0x70, 0xe8, 0xfb, 0x7f, 0x3c, 0x66 }; /* K = b20370d79e097e7c65e956d76aea1e288b668dacb8e7944aba5fbadd */ static const uint8_t ac_dsa_vect116_out[] = { /* R */ 0x86, 0xd5, 0xba, 0xc3, 0xae, 0xee, 0x9b, 0x50, 0x1f, 0x91, 0xf2, 0xfa, 0x71, 0xb1, 0x06, 0x67, 0x60, 0xdf, 0x2e, 0x0e, 0xe1, 0x47, 0x38, 0x3f, 0x14, 0x5b, 0xb0, 0xd3, /* S */ 0x8d, 0x6a, 0x20, 0x78, 0x02, 0xd6, 0xfd, 0x6e, 0x53, 0x4e, 0x1b, 0x8a, 0x1e, 0xdb, 0x99, 0x7b, 0x7c, 0xc9, 0xa2, 0x5a, 0x97, 0xa9, 0xe4, 0xb6, 0xee, 0xbd, 0x0e, 0x23 }; #define ac_dsa_vect117_prime ac_dsa_vect106_prime #define ac_dsa_vect117_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect117_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect117_ptx[] = { /* Msg */ 0xc8, 0x57, 0x47, 0xcd, 0xd2, 0xac, 0x9d, 0xa0, 0x99, 0x9b, 0x7e, 0x5d, 0x7f, 0x64, 0xd1, 0x1d, 0xce, 0x76, 0x73, 0xdf, 0x5b, 0xc6, 0x05, 0x05, 0x13, 0x16, 0xb4, 0xb9, 0x4b, 0xc7, 0xfc, 0x77, 0x6f, 0xb1, 0xd3, 0xda, 0x5a, 0x43, 0x95, 0xa6, 0x74, 0xaa, 0x8a, 0x07, 0x98, 0xa3, 0x41, 0xb3, 0x1b, 0x11, 0xe6, 0x3c, 0xdf, 0xac, 0x5f, 0x85, 0x43, 0x46, 0xf6, 0xa4, 0xb7, 0x4b, 0x49, 0xf2, 0xd0, 0x89, 0xcb, 0xb8, 0x6f, 0xae, 0x54, 0xeb, 0xfd, 0x95, 0xeb, 0x9f, 0x05, 0xa1, 0xb5, 0xe8, 0x43, 0x06, 0xe9, 0x30, 0x46, 0x1a, 0xd7, 0xf8, 0x27, 0xcf, 0xb9, 0x10, 0x01, 0x4a, 0x3a, 0xf4, 0xda, 0xe0, 0xd4, 0x6e, 0xce, 0x91, 0x2b, 0xc2, 0x68, 0x70, 0xa4, 0x33, 0xf7, 0x0f, 0x0a, 0x38, 0xbf, 0x23, 0xb1, 0x5d, 0x98, 0xcc, 0x65, 0x88, 0x48, 0xf4, 0xba, 0xd9, 0xc8, 0x4e, 0x89, 0xf0 }; static const uint8_t ac_dsa_vect117_priv_val[] = { /* X */ 0x40, 0x76, 0xf4, 0xab, 0xf4, 0xd3, 0xc9, 0xa5, 0x5b, 0x3f, 0x06, 0x35, 0x35, 0xf6, 0xa6, 0x9c, 0x22, 0x11, 0x99, 0x58, 0x1e, 0x72, 0xc5, 0xa8, 0xc3, 0x1f, 0x1a, 0x71 }; static const uint8_t ac_dsa_vect117_pub_val[] = { /* Y */ 0x29, 0x72, 0x78, 0x7d, 0xcb, 0xd6, 0x7e, 0x5b, 0xdd, 0xaa, 0xf1, 0xbd, 0x3f, 0x05, 0xeb, 0xd6, 0x69, 0x49, 0x60, 0x1d, 0xda, 0x44, 0x23, 0x7e, 0xc9, 0x36, 0x15, 0x91, 0xce, 0x9b, 0x80, 0x9f, 0x87, 0x22, 0xfb, 0x39, 0x9e, 0x6b, 0x9b, 0x81, 0x09, 0xa7, 0x9e, 0xa7, 0xb8, 0x3f, 0xe9, 0x83, 0x59, 0xa0, 0x7a, 0x27, 0xe2, 0x32, 0xcd, 0xea, 0x8f, 0x65, 0x33, 0xe3, 0x4e, 0x37, 0xdb, 0x3a, 0xe5, 0x33, 0x09, 0xf6, 0x2f, 0x10, 0x8b, 0x2e, 0xe7, 0xb4, 0x89, 0xa9, 0x33, 0xe4, 0xef, 0x58, 0xdd, 0x4d, 0xb8, 0xc0, 0x10, 0x8a, 0x36, 0x70, 0xc6, 0x75, 0xb9, 0x8b, 0x75, 0x79, 0x8a, 0xc0, 0x88, 0x4c, 0xf5, 0xa4, 0x61, 0xaf, 0x28, 0x1f, 0x6d, 0xd8, 0xe7, 0xea, 0x3d, 0x41, 0x39, 0x6f, 0x04, 0x96, 0x01, 0xa9, 0xaf, 0x2e, 0x39, 0x08, 0x8a, 0xe0, 0xa1, 0xec, 0x0d, 0x2d, 0x10, 0xfa, 0xe1, 0xdc, 0x1d, 0xe9, 0x62, 0xd8, 0x4d, 0x8c, 0xf0, 0x42, 0x15, 0xfc, 0x6d, 0x62, 0x62, 0xac, 0x43, 0x25, 0x41, 0xaf, 0x2c, 0x48, 0xc0, 0x9c, 0xd4, 0xe1, 0x5b, 0xd9, 0x46, 0x0e, 0x9a, 0x7b, 0xae, 0x17, 0xe0, 0x03, 0x5a, 0xf0, 0xb1, 0x3d, 0x8d, 0xe7, 0x07, 0x87, 0x0c, 0x54, 0xbc, 0x85, 0x11, 0x12, 0xf4, 0xae, 0x1d, 0x69, 0x07, 0x47, 0x12, 0xc2, 0x12, 0xbc, 0x7e, 0x13, 0xf1, 0x99, 0xff, 0xc8, 0xf3, 0x77, 0x23, 0xcd, 0x6d, 0xcf, 0x53, 0x9f, 0x8d, 0xf8, 0xcf, 0x0c, 0xf1, 0xed, 0x4c, 0x10, 0xee, 0xaf, 0x0f, 0x44, 0x48, 0x04, 0xf1, 0xeb, 0x9d, 0x9c, 0x32, 0x9d, 0x6f, 0x19, 0x97, 0x3e, 0xec, 0x27, 0x32, 0x22, 0xfa, 0x04, 0xb5, 0xf1, 0xf0, 0xe1, 0x79, 0x71, 0xce, 0x39, 0x98, 0x69, 0x58, 0x20, 0x27, 0xb1, 0xc4, 0x54, 0xdc, 0x1a, 0xdd, 0xd4, 0x84, 0x90, 0x2c, 0xb0 }; /* K = 7149f49e3d07c45c97db09632740560e5b0e843240255da43ae97ec1 */ static const uint8_t ac_dsa_vect117_out[] = { /* R */ 0x28, 0xe3, 0xdd, 0x71, 0x09, 0x8f, 0xf0, 0x4d, 0x1c, 0xa8, 0x85, 0xc2, 0x77, 0x4f, 0x78, 0xec, 0xb3, 0xec, 0xea, 0x70, 0x8f, 0xab, 0x2e, 0x16, 0xbd, 0x5c, 0xec, 0xe1, /* S */ 0xac, 0x8b, 0x6e, 0xe4, 0x98, 0xee, 0x38, 0x3e, 0x28, 0x40, 0x4b, 0xa4, 0xb5, 0x3e, 0x64, 0xac, 0xa0, 0xfc, 0xd2, 0x67, 0x90, 0x71, 0x32, 0x64, 0xfe, 0x3c, 0xf6, 0xa1 }; #define ac_dsa_vect118_prime ac_dsa_vect106_prime #define ac_dsa_vect118_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect118_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect118_ptx[] = { /* Msg */ 0xa7, 0xa5, 0x9d, 0xa6, 0x2a, 0x93, 0x91, 0xcf, 0xe6, 0x28, 0x69, 0x75, 0x48, 0xb0, 0x5f, 0x8a, 0xf3, 0x9e, 0xa9, 0x82, 0x1d, 0x76, 0xc3, 0x14, 0x47, 0x8e, 0x21, 0x0f, 0xbc, 0xd2, 0x7f, 0xbf, 0x6b, 0x0b, 0xf4, 0x60, 0xa6, 0x5d, 0xbc, 0xba, 0xdc, 0xdd, 0xfc, 0x01, 0x78, 0xec, 0xe1, 0x35, 0x26, 0x4a, 0x7d, 0x7c, 0x5b, 0x70, 0x53, 0x20, 0x8b, 0xfb, 0xde, 0x54, 0xe3, 0x33, 0x8d, 0x90, 0x19, 0x27, 0xe9, 0x5e, 0x1d, 0xc8, 0xee, 0xb7, 0x3d, 0x29, 0x9e, 0x6f, 0xa6, 0x58, 0x45, 0x55, 0xcf, 0xea, 0xfd, 0x19, 0x25, 0xe9, 0x5e, 0x0b, 0x35, 0x58, 0xdd, 0xec, 0x64, 0x11, 0x75, 0xfc, 0x72, 0x93, 0xc0, 0x31, 0x02, 0x66, 0xac, 0xe1, 0x8b, 0xbb, 0x16, 0xf9, 0x08, 0x4f, 0xd4, 0xac, 0x22, 0xad, 0x2d, 0xc8, 0x52, 0x8c, 0x3f, 0x3f, 0x33, 0x26, 0x84, 0x03, 0x9e, 0x74, 0xb3, 0x90 }; static const uint8_t ac_dsa_vect118_priv_val[] = { /* X */ 0x22, 0xfd, 0xd4, 0x4a, 0xfd, 0x37, 0x2e, 0x15, 0x84, 0x24, 0x13, 0xc0, 0x82, 0x9c, 0x9a, 0x89, 0x4c, 0xe6, 0x1a, 0x3f, 0x0b, 0x13, 0x5c, 0x15, 0x46, 0xf5, 0x7f, 0xb0 }; static const uint8_t ac_dsa_vect118_pub_val[] = { /* Y */ 0x0a, 0xa0, 0x40, 0xbb, 0xb2, 0x3c, 0x33, 0x7d, 0x58, 0x87, 0x4d, 0x95, 0xef, 0xe9, 0x27, 0x70, 0x80, 0x86, 0x2e, 0xa0, 0x88, 0x8d, 0x92, 0x09, 0xec, 0xc2, 0xf5, 0xd7, 0xe0, 0xd5, 0x6b, 0x3e, 0x84, 0x44, 0xca, 0x93, 0x38, 0x00, 0x45, 0x0f, 0x10, 0xb8, 0x12, 0x4f, 0xf8, 0x81, 0x2f, 0x87, 0xe1, 0xbe, 0xcf, 0x1a, 0x31, 0x7a, 0xce, 0x0c, 0x3a, 0x13, 0x76, 0xd6, 0x24, 0x93, 0x8c, 0xab, 0x61, 0x7b, 0xb5, 0x46, 0xd0, 0xaa, 0xd4, 0xf1, 0xd0, 0xaa, 0x23, 0xc6, 0x67, 0x0c, 0xfa, 0xe0, 0xda, 0x28, 0x66, 0x03, 0x93, 0xa9, 0x09, 0x11, 0xb3, 0xdb, 0xe3, 0x84, 0x7e, 0xab, 0x4e, 0xbb, 0x7d, 0xd0, 0x50, 0x4a, 0xeb, 0x02, 0x69, 0x12, 0x66, 0x55, 0xd1, 0x35, 0xd2, 0xe9, 0x14, 0x9c, 0xd8, 0xac, 0x52, 0x21, 0x15, 0x16, 0x40, 0x91, 0x4d, 0x48, 0x05, 0x69, 0xb3, 0x83, 0xe9, 0x83, 0x64, 0xcc, 0x41, 0xce, 0xc5, 0x6e, 0xa1, 0x57, 0xce, 0x8d, 0x7e, 0x73, 0xa9, 0x49, 0xb3, 0x48, 0xe5, 0xff, 0xd3, 0xce, 0xef, 0xea, 0x7f, 0x76, 0x25, 0xf5, 0x99, 0xaa, 0x9a, 0xfe, 0x2d, 0xb4, 0xcf, 0x3b, 0x0d, 0x59, 0xf2, 0x70, 0x0f, 0x6c, 0xec, 0xc5, 0x4f, 0x8b, 0xf7, 0x85, 0x38, 0x92, 0xf0, 0x73, 0x37, 0xdb, 0xe7, 0x6b, 0xe7, 0x81, 0x99, 0x4e, 0xf4, 0xe1, 0x4d, 0xf2, 0xf0, 0xcf, 0x7c, 0xb3, 0x42, 0xee, 0x1c, 0x8b, 0x18, 0x8a, 0x7d, 0xcc, 0x31, 0x7a, 0x09, 0x7c, 0x9f, 0x9e, 0x33, 0xff, 0x89, 0x46, 0x2c, 0x26, 0x46, 0x5b, 0xb5, 0x3e, 0xec, 0x05, 0xd1, 0x08, 0x5f, 0xc6, 0x15, 0x6c, 0xad, 0x0f, 0x7c, 0x9b, 0x80, 0xd2, 0xa6, 0x89, 0x53, 0x50, 0x1a, 0x97, 0xac, 0xb7, 0x46, 0xac, 0x3a, 0x2b, 0x9b, 0xdc, 0xf1, 0x8d, 0xfc, 0xea, 0xa1, 0x96, 0x71, 0x6e, 0xc7, 0x73 }; /* K = b93120b594e8994f533c1811d61495f2ebf32fde9e7ecec856033f20 */ static const uint8_t ac_dsa_vect118_out[] = { /* R */ 0x84, 0x93, 0x4f, 0x3f, 0x56, 0xd6, 0x48, 0x15, 0xfc, 0x66, 0xb0, 0xdb, 0xf3, 0xb1, 0xfa, 0x56, 0xd1, 0x38, 0x7b, 0xe7, 0x61, 0x1a, 0x1e, 0x57, 0x1c, 0x40, 0x51, 0x00, /* S */ 0x43, 0x1f, 0x11, 0x34, 0x69, 0x50, 0xe7, 0x7c, 0x9e, 0x9e, 0xd0, 0x12, 0x7c, 0x50, 0xbf, 0x62, 0x0f, 0x6f, 0x69, 0xa6, 0x99, 0xcd, 0x01, 0x7c, 0x7d, 0x87, 0x36, 0x8a }; #define ac_dsa_vect119_prime ac_dsa_vect106_prime #define ac_dsa_vect119_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect119_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect119_ptx[] = { /* Msg */ 0xd4, 0xc5, 0xb4, 0x39, 0xa1, 0xcc, 0xf5, 0xd9, 0x8c, 0xf0, 0xb9, 0x31, 0xf2, 0x53, 0xf7, 0x33, 0x03, 0x79, 0x21, 0xd4, 0xef, 0xb0, 0x2c, 0xf8, 0x7b, 0x25, 0x09, 0xe7, 0x32, 0xa5, 0x6c, 0xcb, 0x49, 0xe0, 0xc8, 0x3b, 0x14, 0x09, 0xcc, 0x00, 0x9f, 0x1d, 0x2d, 0x1c, 0xb4, 0xc0, 0xc7, 0xab, 0x00, 0xc4, 0x02, 0xee, 0x01, 0x8e, 0xc5, 0x09, 0x80, 0x31, 0xac, 0x9e, 0x71, 0x97, 0xd4, 0x39, 0x5d, 0x49, 0x17, 0x21, 0x70, 0x8a, 0x41, 0xff, 0x5c, 0xda, 0x5a, 0x03, 0xbe, 0x6a, 0x11, 0x69, 0xbf, 0x45, 0x94, 0x70, 0xb1, 0xaa, 0xf5, 0x3c, 0x8a, 0x96, 0x68, 0xac, 0xae, 0x13, 0x85, 0xb9, 0x21, 0xf5, 0xa2, 0x6c, 0x73, 0x36, 0x54, 0x44, 0x51, 0x5c, 0x3c, 0x12, 0x6c, 0x69, 0x40, 0xb4, 0xbf, 0x57, 0x59, 0x1a, 0x0b, 0xfd, 0x6c, 0x2c, 0x74, 0xc7, 0x24, 0x42, 0x6c, 0xb2, 0xad, 0x3f }; static const uint8_t ac_dsa_vect119_priv_val[] = { /* X */ 0xc9, 0xed, 0x82, 0x46, 0x21, 0x58, 0xcc, 0x9c, 0x99, 0x23, 0x1f, 0xd4, 0x8a, 0x81, 0xe4, 0xf8, 0x31, 0x8a, 0x88, 0x73, 0x5c, 0x35, 0xb9, 0xf2, 0xc0, 0x8a, 0xd2, 0x80 }; static const uint8_t ac_dsa_vect119_pub_val[] = { /* Y */ 0x37, 0xc5, 0xf0, 0x29, 0x81, 0x63, 0x22, 0xda, 0x51, 0x61, 0xc4, 0xe2, 0x0d, 0xc4, 0xf5, 0xab, 0xde, 0x9f, 0x04, 0xf5, 0xf9, 0xdf, 0xf5, 0xd5, 0x81, 0xb2, 0x53, 0x10, 0x91, 0x91, 0xb3, 0x84, 0x24, 0xdd, 0xe7, 0x5f, 0xeb, 0xac, 0x32, 0xd6, 0xce, 0x31, 0xb1, 0x16, 0x06, 0x34, 0x94, 0xa7, 0x0c, 0x5c, 0x1d, 0x9d, 0x8b, 0x73, 0x51, 0x25, 0x2e, 0xd3, 0x77, 0xea, 0x38, 0xfb, 0xe8, 0x5b, 0x9f, 0x61, 0x4e, 0xca, 0x13, 0x46, 0xbf, 0xf6, 0x53, 0x45, 0xd5, 0x7e, 0x64, 0x6b, 0xfb, 0x03, 0x2e, 0x9b, 0xef, 0xa9, 0xe6, 0xe5, 0xa8, 0x9c, 0x16, 0xd7, 0x15, 0x42, 0x0e, 0x24, 0x12, 0x9b, 0x6f, 0x70, 0xe4, 0xf6, 0x81, 0xbc, 0x1d, 0x38, 0xad, 0x17, 0x37, 0xdb, 0x79, 0x65, 0x5d, 0x24, 0x4b, 0x4d, 0x67, 0xad, 0x3d, 0x2b, 0xd8, 0x0f, 0xd9, 0xd8, 0x0c, 0x2e, 0x15, 0x24, 0x02, 0x14, 0x85, 0x9f, 0xdc, 0x0b, 0x6c, 0x43, 0xdd, 0x1e, 0x80, 0x5d, 0xcd, 0xd2, 0xa5, 0xb9, 0x78, 0x13, 0x97, 0xbd, 0x4a, 0x4e, 0x8b, 0xc4, 0xd6, 0xf9, 0xa1, 0x66, 0x40, 0x36, 0xe9, 0x0c, 0xac, 0x55, 0x0e, 0x83, 0xd6, 0x64, 0x13, 0x67, 0x61, 0x37, 0x07, 0xd0, 0xde, 0x4f, 0x2d, 0xee, 0x55, 0xe9, 0xa5, 0xbe, 0x6d, 0x3d, 0xe8, 0x93, 0xd6, 0x15, 0x61, 0xf4, 0xba, 0x90, 0xd3, 0x87, 0xb7, 0xab, 0x48, 0x80, 0x10, 0x86, 0x01, 0x6c, 0x84, 0x2f, 0x3e, 0x0c, 0xe6, 0x0e, 0x6b, 0x46, 0xaa, 0x98, 0x01, 0x91, 0xcb, 0xa1, 0x47, 0x40, 0x7a, 0xa4, 0xcc, 0xbe, 0x19, 0xb0, 0x0b, 0x0a, 0xc7, 0x16, 0x48, 0xd5, 0x29, 0x6d, 0x13, 0xe4, 0x8c, 0x75, 0xd5, 0x28, 0x48, 0xbb, 0xd3, 0x9f, 0x1d, 0xed, 0x98, 0x8c, 0x36, 0x16, 0xfa, 0xaf, 0x64, 0xf9, 0x1a, 0x30, 0x74, 0x25, 0x06, 0x31, 0x68, 0x93 }; /* K = 9f1fc151bcf8fe18bde1ac505737dc6868c34be605bf2ead6ae3294b */ static const uint8_t ac_dsa_vect119_out[] = { /* R */ 0x1b, 0x51, 0xb8, 0xd2, 0xd3, 0xee, 0xb3, 0xd6, 0x21, 0x8d, 0xa3, 0x49, 0x47, 0x14, 0xd0, 0xe8, 0x8c, 0xd7, 0x36, 0x6f, 0x38, 0x7e, 0x6e, 0xde, 0x00, 0xf6, 0x53, 0xe0, /* S */ 0x84, 0x42, 0x03, 0xa8, 0x1f, 0xb3, 0x8f, 0x57, 0x50, 0x5b, 0xf8, 0x3b, 0xc8, 0xc1, 0xda, 0x00, 0x2a, 0x39, 0xe8, 0x1a, 0xbb, 0xdd, 0x2f, 0x99, 0xab, 0x6a, 0x4d, 0x65 }; #define ac_dsa_vect120_prime ac_dsa_vect106_prime #define ac_dsa_vect120_sub_prime ac_dsa_vect106_sub_prime #define ac_dsa_vect120_base ac_dsa_vect106_base static const uint8_t ac_dsa_vect120_ptx[] = { /* Msg */ 0x40, 0xd4, 0xd9, 0x73, 0x6b, 0x54, 0x99, 0x3c, 0x1b, 0xce, 0xe7, 0x07, 0x1c, 0x68, 0x23, 0x90, 0xd3, 0x4d, 0x47, 0xc3, 0x5f, 0x17, 0x79, 0x39, 0xca, 0x5b, 0x70, 0xf4, 0x57, 0xb3, 0x45, 0x8f, 0xd5, 0xec, 0xa4, 0xcb, 0x03, 0xf0, 0xef, 0xe1, 0xae, 0xc1, 0x0b, 0xf7, 0x94, 0xb8, 0x41, 0x21, 0x60, 0x56, 0xa1, 0x55, 0xda, 0xb5, 0x8a, 0x3d, 0xbf, 0xc1, 0x9d, 0xdf, 0x05, 0xd4, 0x58, 0x61, 0xba, 0xe6, 0xee, 0xa2, 0xbd, 0x7f, 0xfb, 0x87, 0xa6, 0xfd, 0x0f, 0xd2, 0x39, 0x4e, 0x84, 0x7d, 0xc3, 0x6c, 0x94, 0xc8, 0x15, 0x61, 0xde, 0xe1, 0x20, 0x77, 0x9b, 0xbe, 0xcb, 0xc3, 0x22, 0x06, 0x32, 0x7f, 0xeb, 0xaa, 0x17, 0xc9, 0x65, 0x05, 0xec, 0xb9, 0x7d, 0x56, 0x0c, 0x93, 0x4c, 0x38, 0x6f, 0x6f, 0x76, 0x6a, 0x2f, 0x51, 0x54, 0xf5, 0x45, 0xf2, 0x21, 0x81, 0xc1, 0x9f, 0xc6, 0x98 }; static const uint8_t ac_dsa_vect120_priv_val[] = { /* X */ 0x5a, 0x05, 0x0b, 0xfa, 0xe6, 0x3d, 0x34, 0x7d, 0x64, 0x37, 0x9a, 0xd0, 0x14, 0x41, 0xb0, 0xef, 0x9a, 0xb0, 0x6e, 0xc5, 0x84, 0x2c, 0x95, 0x2f, 0x7a, 0x1c, 0x29, 0xce }; static const uint8_t ac_dsa_vect120_pub_val[] = { /* Y */ 0x24, 0xaa, 0x1c, 0x7c, 0x6a, 0x04, 0x1f, 0x6d, 0x2c, 0x53, 0x30, 0x06, 0xce, 0xbc, 0xc2, 0xad, 0x04, 0x8b, 0x3d, 0xc0, 0x8f, 0xa8, 0x62, 0x82, 0xf5, 0x87, 0x9a, 0x23, 0x72, 0x31, 0xd2, 0x30, 0xcd, 0x85, 0x4a, 0xa1, 0x01, 0x58, 0xce, 0xbb, 0x45, 0xf3, 0x87, 0x92, 0x3f, 0xad, 0xa8, 0xc5, 0xf4, 0xb9, 0x1a, 0x7b, 0xc2, 0xdc, 0x3e, 0x2c, 0x39, 0x46, 0x37, 0x97, 0xe6, 0xeb, 0x19, 0x58, 0xab, 0xc9, 0xb9, 0xe7, 0x48, 0xbb, 0xfe, 0x80, 0xe3, 0x60, 0x23, 0x3e, 0x96, 0x95, 0x22, 0x79, 0x95, 0x9a, 0x6b, 0x80, 0x61, 0x91, 0x00, 0xf6, 0xf1, 0x87, 0x6f, 0xad, 0xeb, 0x79, 0x04, 0x91, 0x46, 0x2f, 0x59, 0x17, 0xda, 0x36, 0xce, 0xa3, 0x79, 0x3c, 0x44, 0xdb, 0x90, 0x90, 0x8c, 0xb9, 0xda, 0x18, 0xf6, 0x96, 0xce, 0xd9, 0x0f, 0x2a, 0xcb, 0x82, 0x63, 0x55, 0x10, 0x4c, 0x4c, 0x8f, 0x06, 0xc7, 0x37, 0xd4, 0x8a, 0xcf, 0x98, 0x5d, 0x6b, 0x8c, 0x2a, 0xbf, 0x31, 0x80, 0x72, 0x82, 0xb6, 0xe6, 0x51, 0xd2, 0x96, 0x7a, 0x16, 0x90, 0x7b, 0xe3, 0xd8, 0xe4, 0xb7, 0xf3, 0x2e, 0xd3, 0x4e, 0xba, 0x8c, 0x26, 0x2d, 0x6c, 0x0e, 0xcb, 0x13, 0x19, 0x46, 0xd2, 0x54, 0x63, 0x62, 0xc2, 0x17, 0xae, 0x19, 0x5d, 0x05, 0x65, 0x6a, 0x4f, 0xcf, 0xac, 0x73, 0x71, 0x7a, 0xe8, 0x5a, 0x57, 0x1d, 0x81, 0x1c, 0xbc, 0x99, 0xe0, 0xb3, 0x12, 0x4b, 0xba, 0x76, 0x7f, 0xea, 0xd6, 0x05, 0x26, 0x6d, 0x99, 0x02, 0x1c, 0xdd, 0x8c, 0xb4, 0xc0, 0x81, 0xbe, 0xf1, 0x02, 0x43, 0x10, 0x07, 0xee, 0x12, 0x52, 0x3b, 0x48, 0xbb, 0x83, 0x86, 0x98, 0xa5, 0x97, 0x1e, 0x51, 0x72, 0x52, 0xd6, 0xd9, 0x3e, 0x1c, 0x7f, 0xe9, 0xfb, 0xe0, 0x7b, 0xf4, 0x34, 0x16, 0x4b, 0xaa, 0xa1, 0x02, 0x6d, 0xa4 }; /* K = 5de3d5e6b78c888ba4185c1547272fe562b44e507c871a0524765aea */ static const uint8_t ac_dsa_vect120_out[] = { /* R */ 0x32, 0x5a, 0xa7, 0xb1, 0x73, 0xca, 0xc9, 0x6d, 0x58, 0x65, 0xaa, 0x50, 0xea, 0x54, 0xe5, 0xdf, 0x45, 0xa1, 0x0e, 0x72, 0xfd, 0x5d, 0xd1, 0xfb, 0x26, 0x5a, 0xae, 0x09, /* S */ 0x0a, 0x72, 0x03, 0xf6, 0xb8, 0xfb, 0xf6, 0x68, 0xb8, 0xf6, 0x43, 0x5e, 0x92, 0x9f, 0xd5, 0x2f, 0x52, 0xe2, 0x3a, 0xd4, 0xb8, 0xa1, 0x56, 0xae, 0x5f, 0x3c, 0x9c, 0x47 }; /* [mod = L=2048, N=224, SHA-384] */ static const uint8_t ac_dsa_vect121_prime[] = { /* P */ 0xa6, 0xbb, 0x53, 0x33, 0xce, 0x34, 0x3c, 0x31, 0xc9, 0xb2, 0xc8, 0x78, 0xab, 0x91, 0xee, 0xf2, 0xfd, 0xea, 0x35, 0xc6, 0xdb, 0x0e, 0x71, 0x67, 0x62, 0xbf, 0xc0, 0xd4, 0x36, 0xd8, 0x75, 0x06, 0xe8, 0x65, 0xa4, 0xd2, 0xc8, 0xcf, 0xbb, 0xd6, 0x26, 0xce, 0x8b, 0xfe, 0x64, 0x56, 0x3c, 0xa5, 0x68, 0x6c, 0xd8, 0xcf, 0x08, 0x14, 0x90, 0xf0, 0x24, 0x45, 0xb2, 0x89, 0x08, 0x79, 0x82, 0x49, 0x5f, 0xb6, 0x99, 0x76, 0xb1, 0x02, 0x42, 0xd6, 0xd5, 0x0f, 0xc2, 0x3b, 0x4d, 0xbd, 0xb0, 0xbe, 0xf7, 0x83, 0x05, 0xd9, 0xa4, 0xd0, 0x5d, 0x9e, 0xae, 0x65, 0xd8, 0x7a, 0x89, 0x3e, 0xaf, 0x39, 0x7e, 0x04, 0xe3, 0x9b, 0xaa, 0x85, 0xa2, 0x6c, 0x8f, 0xfb, 0xde, 0xf1, 0x23, 0x32, 0x87, 0xb5, 0xf5, 0xb6, 0xef, 0x6a, 0x90, 0xf2, 0x7a, 0x69, 0x48, 0x1a, 0x93, 0x2e, 0xe4, 0x7b, 0x18, 0xd5, 0xd2, 0x7e, 0xb1, 0x07, 0xff, 0xb0, 0x50, 0x25, 0xe6, 0x46, 0xe8, 0x87, 0x6b, 0x5c, 0xb5, 0x67, 0xfe, 0xc1, 0xdd, 0x35, 0x83, 0x5d, 0x42, 0x08, 0x21, 0x98, 0x53, 0x1f, 0xaf, 0xbe, 0x5a, 0xe2, 0x80, 0xc5, 0x75, 0xa1, 0xfb, 0x0e, 0x62, 0xe9, 0xb3, 0xca, 0x37, 0xe1, 0x97, 0xad, 0x96, 0xd9, 0xdd, 0xe1, 0xf3, 0x3f, 0x2c, 0xec, 0x7d, 0x27, 0xde, 0xae, 0x26, 0x1c, 0x83, 0xee, 0x8e, 0x20, 0x02, 0xaf, 0x7e, 0xb6, 0xe8, 0x2f, 0x6a, 0x14, 0x79, 0x6a, 0xf0, 0x37, 0x57, 0x7a, 0x10, 0x32, 0xbb, 0xc7, 0x09, 0x12, 0x9c, 0xaa, 0xbd, 0x8a, 0xdd, 0xf8, 0x70, 0xae, 0x2d, 0x05, 0x95, 0xc8, 0xfd, 0xb3, 0x71, 0x55, 0x74, 0x8f, 0x0d, 0xea, 0x34, 0xb4, 0x4d, 0x4f, 0x82, 0xed, 0x58, 0xc2, 0xf5, 0xb1, 0xb8, 0x48, 0x16, 0x62, 0xac, 0x53, 0x47, 0x3c, 0x69, 0x34, 0x10, 0x08, 0x2f, 0xbd }; static const uint8_t ac_dsa_vect121_sub_prime[] = { /* Q */ 0x8c, 0x3e, 0xe5, 0xbd, 0x9a, 0x2a, 0xaf, 0x06, 0x8b, 0xd5, 0x84, 0x5b, 0xd5, 0x5e, 0xcf, 0x27, 0x41, 0x70, 0x55, 0x30, 0x75, 0x77, 0xbb, 0xc3, 0x77, 0x0e, 0xc6, 0x8b }; static const uint8_t ac_dsa_vect121_base[] = { /* G */ 0x43, 0xb5, 0xa6, 0xb6, 0xd0, 0xbb, 0x96, 0x2e, 0xc9, 0x76, 0x6a, 0x37, 0x7c, 0x32, 0xcc, 0x41, 0x24, 0xf1, 0x31, 0x11, 0x88, 0xc2, 0xec, 0xf9, 0x5c, 0x0c, 0xd4, 0xa4, 0xfa, 0x09, 0x72, 0x25, 0xb7, 0x61, 0x8c, 0xb1, 0x27, 0x6c, 0x47, 0x45, 0x78, 0xd3, 0xbf, 0x56, 0x4c, 0x14, 0x51, 0x99, 0xc0, 0x92, 0xa1, 0xb1, 0x4b, 0xaa, 0x92, 0x9c, 0x2f, 0x3f, 0x0f, 0x36, 0xe0, 0xc2, 0xda, 0xe9, 0x1e, 0xba, 0x08, 0xbe, 0x30, 0x99, 0x2a, 0x88, 0x9f, 0x29, 0x52, 0xe0, 0x44, 0x2c, 0x37, 0xaf, 0x48, 0x4a, 0x4e, 0xcd, 0xc3, 0x24, 0x3c, 0xcf, 0xcb, 0x9e, 0x34, 0x13, 0xcf, 0x5c, 0xdd, 0x66, 0x30, 0xb0, 0x9f, 0xe1, 0x7e, 0xfb, 0xfd, 0xe1, 0x4d, 0x87, 0x25, 0x49, 0x30, 0x19, 0xb7, 0xb7, 0x3d, 0x1f, 0x78, 0x2b, 0x48, 0xef, 0x30, 0xbe, 0xc3, 0x6e, 0x00, 0xe0, 0x2b, 0xa3, 0x36, 0xd2, 0x25, 0x4f, 0xc2, 0x02, 0xa6, 0x96, 0x12, 0xcd, 0x94, 0x46, 0xf9, 0x1d, 0x76, 0xb7, 0x39, 0xff, 0xa6, 0xd8, 0xb8, 0x60, 0x52, 0xf8, 0xdc, 0x5f, 0x11, 0x45, 0x80, 0x1c, 0x56, 0x24, 0x1a, 0xf5, 0xba, 0x90, 0x37, 0x24, 0x1b, 0xd8, 0x9e, 0x63, 0x38, 0xb5, 0x8e, 0x01, 0x31, 0x06, 0x71, 0xc2, 0x68, 0xeb, 0x5e, 0x33, 0xac, 0xb5, 0x7d, 0x1f, 0x99, 0xf1, 0x64, 0x40, 0xa6, 0x75, 0x82, 0x7d, 0x40, 0x17, 0x75, 0x4d, 0x60, 0x1a, 0x17, 0xad, 0xa2, 0xfb, 0xed, 0xf9, 0x04, 0x55, 0x4a, 0x90, 0xb0, 0x15, 0x30, 0xda, 0x8c, 0x93, 0xcd, 0x14, 0xce, 0x29, 0x3c, 0xb2, 0xbd, 0x3e, 0x79, 0x37, 0xe9, 0x34, 0xb7, 0x9e, 0x31, 0x0f, 0xe4, 0xd8, 0x0c, 0x13, 0xf9, 0x2f, 0x63, 0x38, 0x13, 0x55, 0xbd, 0x80, 0xa1, 0xab, 0xee, 0x1a, 0x73, 0xfd, 0xfb, 0x6d, 0xa2, 0x4e, 0xf2, 0x80, 0x02, 0xa3 }; static const uint8_t ac_dsa_vect121_ptx[] = { /* Msg */ 0xdf, 0x5d, 0x56, 0x4d, 0xb8, 0x35, 0x92, 0xc1, 0x12, 0x8b, 0xe5, 0xd2, 0x9b, 0x70, 0x36, 0x88, 0x0d, 0x55, 0xe8, 0x34, 0xa2, 0x91, 0xa7, 0x45, 0xed, 0x8d, 0xcd, 0x43, 0x8c, 0x4d, 0xa6, 0xb1, 0xb9, 0xf3, 0x94, 0x12, 0xb2, 0xc5, 0x11, 0x07, 0x30, 0xdb, 0x83, 0xc1, 0xcc, 0xdf, 0xe9, 0x05, 0x9d, 0xd9, 0x6e, 0xc7, 0xea, 0x2b, 0xbc, 0xb3, 0x4e, 0x3e, 0xba, 0x72, 0xef, 0x0a, 0x1d, 0x47, 0x21, 0xc7, 0xc0, 0x22, 0x1e, 0x29, 0x27, 0x9f, 0x01, 0x4d, 0x63, 0xfa, 0xcc, 0x5b, 0xc8, 0xf1, 0x8c, 0x53, 0x9b, 0x92, 0xff, 0x2a, 0xf8, 0x9e, 0x56, 0x82, 0x25, 0xd6, 0xb4, 0xcf, 0x59, 0x9c, 0xb3, 0xdf, 0xf5, 0xe3, 0xc6, 0xdd, 0xfa, 0xc0, 0xa2, 0x7f, 0x10, 0xf6, 0x36, 0xec, 0x22, 0x0a, 0xbb, 0x72, 0x63, 0x0b, 0xae, 0x9a, 0x39, 0xc1, 0x8f, 0xd3, 0x66, 0x3e, 0x46, 0x51, 0xcc, 0xac }; static const uint8_t ac_dsa_vect121_priv_val[] = { /* X */ 0x4e, 0xfa, 0x51, 0x36, 0xeb, 0x6a, 0xa7, 0x4e, 0x92, 0xbb, 0xfc, 0x91, 0x3b, 0x0b, 0xfe, 0xbb, 0x61, 0x3d, 0xb7, 0xa4, 0x72, 0x21, 0xfb, 0x7b, 0x64, 0xf4, 0x2e, 0x6f }; static const uint8_t ac_dsa_vect121_pub_val[] = { /* Y */ 0x64, 0x79, 0x79, 0xb7, 0x96, 0x0c, 0xe7, 0xb9, 0x71, 0xff, 0x0e, 0x5f, 0x64, 0x35, 0xf4, 0x2a, 0x41, 0xb1, 0x8c, 0x9d, 0xe0, 0x9a, 0x30, 0x11, 0x14, 0xa0, 0x13, 0xa7, 0xcd, 0x01, 0x18, 0x3f, 0x17, 0x6f, 0x88, 0x83, 0x83, 0x79, 0xdc, 0xb4, 0xef, 0xb6, 0x7d, 0xae, 0xa7, 0x9d, 0xef, 0x3f, 0x04, 0x2c, 0xbc, 0xf9, 0xcc, 0x50, 0x3b, 0x4c, 0x21, 0x51, 0xa2, 0x36, 0x4f, 0x7c, 0x94, 0x37, 0xb1, 0x96, 0x43, 0xe6, 0x7e, 0x24, 0xa3, 0x6b, 0xac, 0x4a, 0x4c, 0xfa, 0x29, 0x3d, 0xee, 0xdf, 0x8e, 0xc6, 0xb1, 0x54, 0xa3, 0x2a, 0xa7, 0x29, 0x85, 0xf7, 0xd8, 0xde, 0x23, 0x53, 0x34, 0xb5, 0x46, 0xc2, 0x9d, 0xef, 0x45, 0x8c, 0x55, 0xd0, 0xc5, 0xc0, 0xac, 0x5d, 0x74, 0xe2, 0x02, 0x4e, 0xc7, 0xd4, 0xab, 0xc2, 0xfd, 0xa5, 0x16, 0xa2, 0xa0, 0xb1, 0xa4, 0xd8, 0x86, 0xad, 0x92, 0xc2, 0x04, 0x70, 0x78, 0x28, 0xa4, 0xfc, 0x77, 0x94, 0xf6, 0x0e, 0xe8, 0xa4, 0xbe, 0x11, 0x01, 0xc9, 0xe5, 0x51, 0x8f, 0x7e, 0x19, 0xee, 0xbd, 0x47, 0x5f, 0x2d, 0xe6, 0xf6, 0xba, 0x89, 0xc2, 0x8b, 0xd1, 0x29, 0xf1, 0x39, 0x93, 0xbe, 0xfe, 0x58, 0x18, 0x44, 0x03, 0x19, 0xa7, 0x95, 0x49, 0x83, 0x31, 0x96, 0x34, 0x2a, 0x31, 0xdb, 0xaf, 0x7d, 0x79, 0x49, 0x7d, 0xec, 0x65, 0xee, 0x7d, 0xbe, 0xf7, 0x0e, 0x58, 0xf9, 0x9d, 0x05, 0x95, 0xf6, 0xa7, 0x11, 0x40, 0x9a, 0xde, 0x31, 0x51, 0xd4, 0x55, 0x63, 0xd5, 0x3c, 0x1c, 0xd0, 0xa8, 0xab, 0x1a, 0x18, 0xbe, 0xff, 0x65, 0x02, 0xcb, 0xb0, 0xc0, 0x69, 0xb1, 0x14, 0xea, 0x7b, 0xe7, 0x78, 0x98, 0xd0, 0xf4, 0xe5, 0x49, 0x99, 0x1b, 0xa0, 0xb3, 0x68, 0x97, 0x1b, 0x10, 0x72, 0xec, 0xe4, 0xaf, 0xc3, 0x80, 0xe9, 0xae, 0x32, 0x9a, 0x50 }; /* K = 7e0f1ce21d185ae65c0a00395567ea9cf217462b58b9c89c4e5ff9cf */ static const uint8_t ac_dsa_vect121_out[] = { /* R */ 0x5a, 0xb4, 0x3e, 0xde, 0x66, 0xa1, 0x56, 0x88, 0x14, 0x6d, 0x1f, 0x4c, 0xd7, 0x16, 0x47, 0x02, 0xc0, 0xc4, 0x45, 0x7b, 0xd4, 0xfd, 0xde, 0xba, 0xc0, 0x48, 0x29, 0x53, /* S */ 0x6c, 0x58, 0xe8, 0xab, 0x27, 0xd2, 0x85, 0x12, 0xc4, 0x60, 0x63, 0xc9, 0x6b, 0xf5, 0xbc, 0xeb, 0x8f, 0xba, 0xd2, 0x32, 0xd8, 0xf5, 0xb3, 0x9c, 0x47, 0x55, 0xd0, 0xb1 }; #define ac_dsa_vect122_prime ac_dsa_vect121_prime #define ac_dsa_vect122_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect122_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect122_ptx[] = { /* Msg */ 0xeb, 0xeb, 0x9e, 0x2b, 0x69, 0x2e, 0xc6, 0xc9, 0xaf, 0xad, 0x2a, 0x0c, 0x2b, 0x90, 0x89, 0x39, 0x94, 0x3f, 0xdf, 0x4b, 0xb7, 0x43, 0x8e, 0x3b, 0xd9, 0x28, 0x8e, 0x76, 0x81, 0x98, 0x40, 0x87, 0xff, 0xdc, 0xf8, 0x65, 0x02, 0x07, 0x9c, 0x29, 0x12, 0x36, 0xd7, 0xf1, 0xad, 0xb5, 0x04, 0xe6, 0x7e, 0x0f, 0x88, 0xbe, 0xe6, 0x1b, 0x61, 0x71, 0x70, 0x14, 0xcf, 0x06, 0xb5, 0xfa, 0xd5, 0xcb, 0x36, 0xf1, 0xb2, 0x23, 0xb6, 0x39, 0x12, 0xcd, 0xcd, 0x2b, 0x94, 0x16, 0x52, 0x4d, 0x37, 0xf5, 0xd7, 0xb0, 0x5c, 0x37, 0xd1, 0x78, 0x96, 0x69, 0xe1, 0x41, 0xaf, 0xf6, 0x67, 0x0d, 0xb2, 0xe0, 0xde, 0x31, 0x67, 0x3b, 0x20, 0x55, 0xf6, 0x79, 0x9a, 0xc8, 0x87, 0x93, 0x7e, 0x56, 0x64, 0xa6, 0x59, 0xea, 0x02, 0x54, 0xa8, 0xd4, 0xba, 0x6f, 0x20, 0x4d, 0xf2, 0xa3, 0x8c, 0x2a, 0x77, 0xe4 }; static const uint8_t ac_dsa_vect122_priv_val[] = { /* X */ 0x1c, 0x84, 0xc5, 0xc0, 0x65, 0xff, 0x16, 0x5a, 0x0e, 0x1d, 0x27, 0x6c, 0x2e, 0xa9, 0xfd, 0xbf, 0x84, 0x23, 0xc1, 0x2a, 0xa1, 0xc7, 0x38, 0x44, 0xd6, 0xc6, 0x49, 0x42 }; static const uint8_t ac_dsa_vect122_pub_val[] = { /* Y */ 0x31, 0xd3, 0x1a, 0x5b, 0xb8, 0x28, 0x74, 0xbd, 0xc7, 0x6c, 0xab, 0xae, 0x3e, 0xc8, 0x56, 0x90, 0xaa, 0x51, 0x03, 0xca, 0xcb, 0xe5, 0x23, 0x4e, 0x0d, 0x5e, 0xf6, 0x45, 0xee, 0xf3, 0x80, 0xd3, 0xae, 0x2f, 0x62, 0x39, 0x14, 0x4b, 0x82, 0xb1, 0x01, 0xa7, 0xef, 0x47, 0x44, 0xaa, 0xdb, 0x8f, 0xc9, 0x8e, 0x82, 0xb4, 0x13, 0x72, 0xe9, 0x9d, 0x6c, 0x90, 0x5c, 0xa9, 0x74, 0xb8, 0x1c, 0x9f, 0xa5, 0x21, 0xf9, 0x20, 0xa1, 0xdf, 0xfa, 0xb4, 0xe2, 0xee, 0x15, 0xf6, 0x1e, 0x03, 0xb7, 0x42, 0xf4, 0x24, 0x70, 0xdc, 0x2f, 0xa9, 0xab, 0x25, 0x7f, 0x11, 0x36, 0xf9, 0xfe, 0x4b, 0x5a, 0xa2, 0xec, 0xe5, 0x20, 0x72, 0x30, 0xc4, 0x90, 0x6d, 0x67, 0xa1, 0x56, 0xa3, 0xff, 0xef, 0x47, 0x0c, 0xbf, 0x3a, 0x65, 0xe3, 0x18, 0x9b, 0x38, 0x9d, 0xdc, 0x66, 0xc6, 0x04, 0x0a, 0x79, 0x95, 0xc6, 0x8a, 0xe1, 0xdf, 0x20, 0x85, 0x94, 0x1b, 0x5b, 0x1d, 0xf7, 0xd9, 0x57, 0xfb, 0xcf, 0x36, 0x68, 0x24, 0xe0, 0x29, 0x1d, 0xf8, 0x8e, 0xae, 0x55, 0xd8, 0xd3, 0x04, 0x0d, 0x8d, 0x09, 0xf4, 0xf6, 0xff, 0xee, 0x34, 0xcc, 0xbd, 0x19, 0x61, 0x85, 0x2a, 0x5a, 0x62, 0xb2, 0x6c, 0x8d, 0xaa, 0xaa, 0x56, 0xa8, 0xff, 0x7f, 0xa8, 0x63, 0xb6, 0x3c, 0x6d, 0x60, 0x4f, 0xd3, 0x37, 0x82, 0x62, 0xe8, 0x15, 0xf5, 0x51, 0x71, 0xdc, 0xa3, 0x5d, 0x04, 0x76, 0x1f, 0xe3, 0xd9, 0xed, 0xdc, 0x6d, 0x32, 0x65, 0x7a, 0x96, 0xd6, 0x43, 0xd4, 0x60, 0x8e, 0xf2, 0x14, 0x3b, 0x19, 0xf1, 0xc9, 0xd8, 0xc0, 0x0e, 0xd2, 0x65, 0x47, 0x1b, 0x24, 0x5b, 0x60, 0xf3, 0x1f, 0x8c, 0x7e, 0xd4, 0x8d, 0xd6, 0xb1, 0x8b, 0x5b, 0xec, 0x1a, 0x6e, 0xde, 0x14, 0x5d, 0xea, 0x40, 0x28, 0x32, 0x30, 0x72, 0x4e, 0xc8 }; /* K = 6f399d636570476f7a2013efdc74a1bb75f5b35ce835079c4e19cc4d */ static const uint8_t ac_dsa_vect122_out[] = { /* R */ 0x82, 0xc3, 0x74, 0x7a, 0x06, 0x58, 0xdf, 0x00, 0x6a, 0x7a, 0x20, 0x5a, 0x6a, 0xe2, 0xae, 0xdd, 0x5d, 0x29, 0x48, 0x48, 0x85, 0x59, 0xfc, 0x3c, 0xfd, 0x64, 0x3a, 0x64, /* S */ 0x86, 0x36, 0x79, 0x6d, 0xf6, 0x22, 0xd1, 0x3f, 0x07, 0x0f, 0xbe, 0xd4, 0x18, 0x4c, 0x81, 0x38, 0x35, 0x8c, 0x21, 0xdb, 0x30, 0xc6, 0x06, 0xb8, 0xf9, 0xbe, 0x52, 0x1a }; #define ac_dsa_vect123_prime ac_dsa_vect121_prime #define ac_dsa_vect123_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect123_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect123_ptx[] = { /* Msg */ 0xdb, 0xd2, 0x51, 0x6b, 0x03, 0xfd, 0xc5, 0x8b, 0x32, 0xc0, 0x23, 0x30, 0x80, 0xff, 0xee, 0xa4, 0x1c, 0x0d, 0x9c, 0x15, 0x6b, 0x30, 0x33, 0x2e, 0xc4, 0x2b, 0xe5, 0xe1, 0x05, 0x84, 0xbe, 0x3e, 0x3d, 0xb8, 0x5f, 0xfd, 0x5b, 0x5b, 0xae, 0x16, 0xfc, 0x87, 0x6a, 0x0c, 0x92, 0x17, 0x62, 0x7d, 0x84, 0x01, 0x12, 0x23, 0xfa, 0xb5, 0x7d, 0x17, 0x6d, 0xef, 0x61, 0xe4, 0x0d, 0x91, 0x2e, 0x7e, 0xeb, 0x2b, 0xf8, 0x68, 0x73, 0x4a, 0xe8, 0xf2, 0x76, 0xa9, 0x6a, 0xb1, 0x3d, 0xe5, 0x58, 0xec, 0x42, 0x61, 0x41, 0x67, 0xc5, 0xaa, 0x4c, 0x60, 0x35, 0x7f, 0x71, 0xfa, 0xc5, 0x89, 0x80, 0xe5, 0x79, 0x44, 0x0f, 0x69, 0x96, 0x8d, 0x22, 0x80, 0xbc, 0x97, 0x0d, 0x00, 0x66, 0xb5, 0xbd, 0x6a, 0x6f, 0x50, 0x02, 0x48, 0x15, 0x10, 0x25, 0x6b, 0x3e, 0xb2, 0x1b, 0xbb, 0x92, 0xef, 0x2c, 0xdd }; static const uint8_t ac_dsa_vect123_priv_val[] = { /* X */ 0x38, 0x35, 0x85, 0x09, 0x8e, 0xdd, 0x86, 0x7a, 0x85, 0x22, 0xdf, 0xad, 0x08, 0x99, 0x70, 0x95, 0xaa, 0x23, 0x53, 0x9b, 0x9c, 0x81, 0x6a, 0x5e, 0x28, 0x35, 0x9b, 0x51 }; static const uint8_t ac_dsa_vect123_pub_val[] = { /* Y */ 0x6e, 0x6e, 0xe0, 0x31, 0x9a, 0xf8, 0xfa, 0xfd, 0x7a, 0xe0, 0x20, 0x13, 0xf4, 0x22, 0x7e, 0x26, 0x62, 0x44, 0xae, 0x5d, 0x87, 0xfe, 0x15, 0x6c, 0xef, 0xd4, 0x51, 0x8b, 0xcd, 0x71, 0xaa, 0x73, 0xf9, 0x36, 0x4b, 0xff, 0x35, 0xd4, 0xd2, 0x3d, 0x45, 0xb0, 0xf4, 0x7d, 0xfe, 0x93, 0xa6, 0x07, 0xd9, 0xf8, 0xb3, 0x99, 0xb4, 0x24, 0xba, 0x75, 0x07, 0x2f, 0xdc, 0xed, 0x6c, 0x3e, 0xd2, 0x11, 0x06, 0x06, 0xfa, 0x48, 0xed, 0x63, 0x3f, 0xae, 0xf2, 0x06, 0x4f, 0xb3, 0x36, 0x06, 0x9e, 0xec, 0x7e, 0xbd, 0x8a, 0xe4, 0x75, 0x97, 0x83, 0x89, 0xe6, 0xe4, 0x33, 0xd5, 0xa4, 0x35, 0xd6, 0x52, 0x9a, 0x66, 0xc4, 0x89, 0xce, 0x15, 0x39, 0x40, 0xd2, 0xb1, 0xb8, 0xc8, 0x86, 0xc8, 0x11, 0x0d, 0x8b, 0x0a, 0xeb, 0x64, 0x1a, 0x40, 0xe2, 0x85, 0xd6, 0x75, 0x1c, 0xe7, 0x10, 0x27, 0xc3, 0x0e, 0xc6, 0x2f, 0x4b, 0x1f, 0xc1, 0x4f, 0x4d, 0xa2, 0x0b, 0x1d, 0x50, 0x57, 0x42, 0xca, 0xda, 0x20, 0x1c, 0xea, 0x81, 0x93, 0x0c, 0x38, 0x1f, 0x8a, 0x6f, 0x13, 0xdd, 0x0a, 0x42, 0xaa, 0xc1, 0xe0, 0xbd, 0x7f, 0xcd, 0x19, 0xc6, 0xbd, 0xd1, 0x70, 0xfa, 0xc6, 0xa4, 0x23, 0x76, 0x7b, 0x83, 0x1c, 0x1e, 0x28, 0x9e, 0x0a, 0x29, 0xef, 0x85, 0xd8, 0x17, 0xad, 0x23, 0x8d, 0x91, 0xac, 0x3a, 0xce, 0x2f, 0x40, 0xa1, 0x63, 0xb0, 0xa9, 0xbb, 0xdd, 0xc6, 0xf0, 0x5d, 0x0b, 0xdc, 0xd8, 0xcc, 0x27, 0x4a, 0x74, 0xd0, 0x74, 0x3c, 0x9f, 0xb5, 0x65, 0x56, 0xec, 0x1c, 0xb8, 0xe9, 0xcb, 0xa9, 0x82, 0xc1, 0x5a, 0x9a, 0x66, 0xfa, 0x6b, 0x69, 0x99, 0xb8, 0x48, 0x5d, 0xb1, 0xa8, 0x6e, 0xe1, 0x8b, 0xe1, 0x6e, 0x06, 0x8e, 0x12, 0xa8, 0xa1, 0x65, 0xe3, 0x59, 0x9d, 0xf9, 0x66, 0x69, 0xa1, 0xb7 }; /* K = 0183d11f1597ec9db32db21c1e910fa2be2f276f35d0583ce8b8f6ab */ static const uint8_t ac_dsa_vect123_out[] = { /* R */ 0x04, 0x04, 0x05, 0x13, 0x6a, 0x12, 0x20, 0xad, 0xbb, 0x64, 0xab, 0x75, 0x1d, 0xb3, 0x30, 0x7f, 0xaf, 0xad, 0x54, 0x47, 0xab, 0x2d, 0x9b, 0xcc, 0x52, 0xf7, 0x9b, 0xe3, /* S */ 0x1d, 0x35, 0xf3, 0x26, 0x9c, 0x77, 0xc5, 0x77, 0x24, 0x3f, 0x1d, 0xb8, 0xdf, 0xdb, 0xc4, 0xcc, 0x45, 0x31, 0x57, 0x42, 0x76, 0xf0, 0xda, 0x1f, 0x7a, 0x44, 0xac, 0xd4 }; #define ac_dsa_vect124_prime ac_dsa_vect121_prime #define ac_dsa_vect124_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect124_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect124_ptx[] = { /* Msg */ 0x34, 0xc4, 0x54, 0x35, 0xd0, 0xcc, 0x29, 0x26, 0x92, 0x72, 0xa9, 0x3d, 0x43, 0x32, 0x06, 0x98, 0xe4, 0x54, 0xa7, 0xc2, 0x87, 0xdb, 0x9d, 0x06, 0x20, 0x92, 0xac, 0xac, 0xd7, 0xca, 0x08, 0x64, 0x55, 0xe5, 0x83, 0xba, 0xee, 0x12, 0x76, 0xca, 0xba, 0x06, 0x8f, 0xde, 0xeb, 0x52, 0x18, 0x33, 0x96, 0xd5, 0x44, 0x4c, 0x5a, 0x14, 0xad, 0x52, 0xa5, 0xc2, 0xbc, 0x08, 0x2c, 0xd8, 0x74, 0x52, 0xaa, 0x8f, 0x9b, 0x23, 0x05, 0x6b, 0x5f, 0x8a, 0xf2, 0x63, 0x8d, 0x96, 0x5e, 0xf4, 0xfe, 0x6e, 0x4e, 0x68, 0xe8, 0x8b, 0x0f, 0x50, 0xe0, 0x12, 0x48, 0xfe, 0x6a, 0x6a, 0x1d, 0x9d, 0x6d, 0x93, 0xb0, 0x3c, 0xd5, 0x5d, 0x16, 0xfd, 0x83, 0xcd, 0x4e, 0x06, 0x76, 0x3d, 0x92, 0x6f, 0x7c, 0x50, 0xf2, 0x0f, 0x0e, 0xd6, 0x73, 0x06, 0x13, 0xf0, 0xf4, 0xdb, 0x57, 0x1e, 0x22, 0xd2, 0x88, 0xe4 }; static const uint8_t ac_dsa_vect124_priv_val[] = { /* X */ 0x0f, 0x11, 0x5f, 0xc7, 0x07, 0x32, 0x62, 0xe2, 0xf9, 0x3a, 0x9d, 0x46, 0xb4, 0x07, 0xb0, 0xf1, 0xbc, 0x29, 0x29, 0x2a, 0xa0, 0x9c, 0xd1, 0xa9, 0x8a, 0x34, 0xa2, 0x19 }; static const uint8_t ac_dsa_vect124_pub_val[] = { /* Y */ 0x5e, 0xbd, 0x81, 0x52, 0x93, 0x5f, 0xf2, 0xa3, 0xf9, 0xa6, 0x1b, 0x27, 0x5e, 0x98, 0x08, 0xa0, 0x41, 0xaa, 0xd5, 0x65, 0x0f, 0x59, 0x3f, 0x61, 0x2a, 0xf3, 0x3b, 0xc4, 0x62, 0xb8, 0xc9, 0x94, 0x16, 0x93, 0x72, 0xe8, 0xf8, 0x0f, 0x51, 0xb1, 0x5f, 0x5c, 0xe9, 0x66, 0xea, 0x3e, 0x76, 0xa9, 0x12, 0xc6, 0x53, 0x97, 0x83, 0x37, 0xe9, 0x62, 0x21, 0x9e, 0x32, 0x3b, 0x6e, 0x92, 0x2d, 0xea, 0x4b, 0xcc, 0x23, 0xc6, 0x46, 0xa2, 0x2e, 0xec, 0xde, 0x02, 0x43, 0x31, 0x26, 0xfb, 0xac, 0xe0, 0xe3, 0xa0, 0x1f, 0xa6, 0xd0, 0xb9, 0xfd, 0xea, 0x92, 0x45, 0xd6, 0x78, 0x99, 0xa7, 0xb7, 0x45, 0xb8, 0x84, 0x7c, 0x80, 0x87, 0xfa, 0x7f, 0x6c, 0x0f, 0x3e, 0xda, 0xfa, 0xb4, 0xc3, 0xb4, 0x72, 0x20, 0x82, 0x1f, 0xe4, 0x6f, 0x1b, 0xcb, 0x00, 0xa3, 0x23, 0xdf, 0xf3, 0xde, 0xe4, 0x7e, 0xe1, 0xde, 0x2e, 0xce, 0x44, 0xe1, 0xfd, 0xf3, 0xe6, 0x4a, 0xa2, 0x0c, 0x9e, 0x6b, 0x58, 0xe5, 0x34, 0x48, 0x2e, 0x73, 0x13, 0xda, 0xce, 0x1c, 0x61, 0x7d, 0x8e, 0xa9, 0xa6, 0x5d, 0xd5, 0x1f, 0xd3, 0x30, 0x24, 0xf7, 0x35, 0xc3, 0x84, 0x4c, 0x5c, 0x6b, 0x4a, 0x3f, 0x44, 0x7e, 0x71, 0x4a, 0xb0, 0xc1, 0x7d, 0xc8, 0x8e, 0x33, 0xf0, 0x8b, 0x14, 0x2b, 0x72, 0xe8, 0x11, 0xe6, 0xda, 0x00, 0x29, 0x9c, 0x82, 0x89, 0x8a, 0xaf, 0x2b, 0xed, 0x5a, 0xe5, 0x17, 0x0c, 0x1d, 0xd0, 0x05, 0x67, 0x8d, 0x2b, 0x57, 0x6b, 0x9c, 0xe3, 0xe6, 0xbc, 0x6b, 0x2a, 0xeb, 0x04, 0xc9, 0xf0, 0x4e, 0x44, 0x4e, 0x2a, 0x98, 0x08, 0x40, 0x5f, 0xf5, 0x92, 0x65, 0x48, 0xb5, 0x93, 0x04, 0xdd, 0xdc, 0xa8, 0x97, 0x26, 0x31, 0xf7, 0xfb, 0x13, 0x68, 0x08, 0xe2, 0x13, 0xec, 0xd9, 0x3a, 0xf9, 0x8e, 0x2e, 0x54 }; /* K = 835a744aa418a297b7e11febe7f3bba590752e58fa1ae12ffa3bfacc */ static const uint8_t ac_dsa_vect124_out[] = { /* R */ 0x66, 0x48, 0x1f, 0x24, 0x1f, 0x6b, 0x44, 0x31, 0x48, 0xf0, 0xb1, 0xf2, 0x45, 0x9b, 0xe5, 0xca, 0x16, 0x41, 0x3d, 0x94, 0x7d, 0x09, 0x81, 0x62, 0x87, 0x17, 0xc1, 0x08, /* S */ 0x2c, 0xda, 0xa7, 0x35, 0x00, 0xd0, 0xad, 0x29, 0x12, 0x52, 0xd0, 0x7c, 0xef, 0xf9, 0xcf, 0xea, 0xb8, 0x7a, 0x73, 0x97, 0x52, 0x29, 0x1e, 0xb5, 0xdc, 0xef, 0xea, 0x87 }; #define ac_dsa_vect125_prime ac_dsa_vect121_prime #define ac_dsa_vect125_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect125_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect125_ptx[] = { /* Msg */ 0xd7, 0xac, 0x5c, 0xc8, 0xa4, 0xc3, 0xf3, 0x8c, 0xfe, 0x5c, 0x0e, 0x10, 0x68, 0xea, 0x28, 0xf0, 0xf9, 0x5d, 0x32, 0x50, 0xd1, 0xae, 0xae, 0x5f, 0x66, 0xbd, 0xc4, 0xd2, 0x2e, 0x23, 0xe2, 0x46, 0xff, 0x30, 0x42, 0x9c, 0xbc, 0xba, 0xd3, 0xb0, 0x2a, 0x62, 0xa0, 0xa1, 0x79, 0xd4, 0xd1, 0x07, 0x13, 0x0f, 0xa3, 0xa7, 0x80, 0xc0, 0x09, 0x2c, 0x32, 0x9c, 0x2b, 0x02, 0x6e, 0x12, 0xe6, 0x73, 0x5a, 0x75, 0xc4, 0x95, 0xb0, 0x97, 0xaa, 0x69, 0xeb, 0xe9, 0x8a, 0x96, 0xff, 0x89, 0x12, 0x34, 0xff, 0x37, 0x95, 0x11, 0x14, 0x9e, 0x07, 0xc6, 0xe2, 0x41, 0x1e, 0x58, 0x97, 0x6e, 0xe9, 0x3f, 0xba, 0x7d, 0x3d, 0x57, 0x0c, 0x91, 0x1f, 0x6f, 0x20, 0x83, 0x75, 0x78, 0x3f, 0xf5, 0xd9, 0x47, 0xa3, 0xaf, 0x0c, 0x83, 0x9d, 0x21, 0x0a, 0x8e, 0x4a, 0x8c, 0x8f, 0xa4, 0x1e, 0xfb, 0xc5, 0x7e }; static const uint8_t ac_dsa_vect125_priv_val[] = { /* X */ 0x53, 0x39, 0xec, 0x1f, 0x86, 0xa0, 0xdf, 0xd8, 0x13, 0x24, 0xfc, 0xa6, 0xa0, 0xd3, 0xe1, 0x02, 0xb1, 0x2f, 0xba, 0x8f, 0xe8, 0xc1, 0xbc, 0xa4, 0x5d, 0x8d, 0xdf, 0x10 }; static const uint8_t ac_dsa_vect125_pub_val[] = { /* Y */ 0x7b, 0x5f, 0xb0, 0x22, 0xb5, 0x5f, 0xb6, 0x1f, 0x8e, 0xf8, 0xcd, 0xbf, 0xee, 0x46, 0xc0, 0xfc, 0x61, 0xe5, 0x9f, 0xc6, 0x2d, 0xee, 0x5c, 0x14, 0xd0, 0xc3, 0x13, 0x4b, 0x4f, 0x26, 0x59, 0x11, 0x2e, 0x3f, 0x4e, 0x70, 0x17, 0xf9, 0x57, 0x4a, 0x27, 0x24, 0x18, 0x8b, 0xa6, 0xa1, 0xce, 0x77, 0x7a, 0x89, 0x15, 0xbc, 0x11, 0x71, 0xd7, 0x38, 0x75, 0x4b, 0x5a, 0xc1, 0xdf, 0x92, 0x31, 0x03, 0xad, 0x7b, 0x19, 0x85, 0x11, 0xed, 0x36, 0x27, 0x26, 0x68, 0xae, 0x0c, 0x2e, 0x31, 0x42, 0xba, 0x01, 0x1c, 0xb4, 0x5f, 0x89, 0x3d, 0xdb, 0xf7, 0xb3, 0x86, 0x25, 0x81, 0x8c, 0xba, 0x9a, 0x9b, 0x78, 0xae, 0xf8, 0xd0, 0x60, 0x07, 0xed, 0x50, 0x5e, 0x6d, 0xd6, 0xe2, 0x0c, 0x92, 0xd2, 0x50, 0x02, 0x34, 0xf1, 0x04, 0xc1, 0x28, 0x3f, 0x7c, 0x00, 0xcf, 0x2a, 0x3a, 0x32, 0x45, 0x8d, 0x97, 0xf7, 0xbd, 0x17, 0x09, 0x0f, 0x76, 0x23, 0x5c, 0x6c, 0x4f, 0x8a, 0xe1, 0x94, 0xd5, 0x2d, 0x67, 0xc7, 0x4a, 0x85, 0x49, 0x73, 0xfd, 0x12, 0x47, 0x51, 0xf7, 0xf5, 0x80, 0x4b, 0x67, 0x87, 0x9b, 0x02, 0x3b, 0xb6, 0xee, 0xac, 0x76, 0xe9, 0x6f, 0xe6, 0x76, 0xda, 0xeb, 0xbc, 0xb1, 0xbc, 0x94, 0xd5, 0xd8, 0x51, 0xd7, 0xbc, 0x56, 0xbf, 0xb3, 0xd2, 0xa0, 0xa6, 0xd9, 0x92, 0x31, 0x37, 0x86, 0xd9, 0xfb, 0x38, 0xad, 0x29, 0xb7, 0x62, 0x34, 0x94, 0x51, 0xd1, 0x49, 0xd0, 0xe5, 0xfd, 0xe6, 0xad, 0x49, 0x71, 0x83, 0xe3, 0x52, 0x82, 0x8e, 0x25, 0x1b, 0xcc, 0x7c, 0x3a, 0x91, 0x8b, 0xe4, 0xd0, 0x3b, 0x17, 0xaf, 0x60, 0xf3, 0xf3, 0xef, 0x6d, 0x9f, 0xb2, 0x45, 0x5d, 0xf7, 0xe8, 0xb6, 0xb1, 0x69, 0x47, 0x5e, 0x5f, 0x89, 0xdb, 0x99, 0x08, 0x54, 0x1b, 0x56, 0x7d, 0x0f, 0x29, 0x9b }; /* K = 7c62eb8fd725a453fdb2d1e75bbe22f0c5d27a5835135c788061ddfb */ static const uint8_t ac_dsa_vect125_out[] = { /* R */ 0x5b, 0x6b, 0xe6, 0xba, 0xd7, 0x25, 0xaf, 0xa4, 0x42, 0xf2, 0x9a, 0xb7, 0xd3, 0x43, 0xd2, 0xf8, 0xb4, 0xb4, 0x94, 0x1c, 0xbd, 0x23, 0xd6, 0x91, 0x64, 0xb3, 0xc5, 0xfd, /* S */ 0x3a, 0x1b, 0x94, 0x63, 0x4e, 0x31, 0x3f, 0xc4, 0xdf, 0x82, 0x92, 0xe0, 0x38, 0xc6, 0xe8, 0x76, 0x33, 0x6c, 0xef, 0x88, 0xd6, 0x91, 0xb8, 0x94, 0xc0, 0xec, 0xcd, 0x3f }; #define ac_dsa_vect126_prime ac_dsa_vect121_prime #define ac_dsa_vect126_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect126_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect126_ptx[] = { /* Msg */ 0x7a, 0x96, 0x87, 0x3f, 0x07, 0x77, 0xe8, 0xad, 0xa9, 0x86, 0x75, 0x32, 0xae, 0x5f, 0x51, 0x93, 0x8b, 0xae, 0x2d, 0x56, 0xfb, 0x47, 0x1e, 0x0f, 0xef, 0xa6, 0x93, 0xb7, 0x1a, 0x2a, 0xea, 0x25, 0x71, 0xc0, 0x10, 0x8b, 0xa5, 0x9e, 0x63, 0x44, 0x01, 0xbb, 0xaf, 0x20, 0xa8, 0x48, 0xad, 0x8c, 0x30, 0x58, 0x48, 0x42, 0x0c, 0xee, 0x65, 0x4a, 0x30, 0x40, 0x00, 0x7f, 0x05, 0x5d, 0x4e, 0x97, 0x58, 0x07, 0x89, 0x4b, 0x56, 0x18, 0xb9, 0x39, 0x23, 0x63, 0xbc, 0x7f, 0x8c, 0x88, 0xd5, 0x26, 0xbc, 0x49, 0x1a, 0xdb, 0xd8, 0x92, 0xa9, 0x37, 0x51, 0xa2, 0x1d, 0x13, 0x7c, 0xee, 0xde, 0x8a, 0x04, 0x42, 0x3a, 0x4d, 0x0c, 0xa1, 0x55, 0x7b, 0xcf, 0x33, 0x4e, 0x4f, 0x85, 0x5b, 0x04, 0x47, 0x45, 0x44, 0x21, 0x29, 0x29, 0xa8, 0x1d, 0xc7, 0x1f, 0xb3, 0xfc, 0x41, 0xf7, 0x0d, 0x6b, 0x18 }; static const uint8_t ac_dsa_vect126_priv_val[] = { /* X */ 0x49, 0x4b, 0x68, 0x62, 0x47, 0x28, 0xaa, 0xae, 0x98, 0x98, 0xc3, 0xca, 0x22, 0xc1, 0xbc, 0xe8, 0x10, 0xa0, 0x52, 0xe2, 0x5c, 0x88, 0x1a, 0x18, 0x5a, 0xf4, 0x3c, 0xd1 }; static const uint8_t ac_dsa_vect126_pub_val[] = { /* Y */ 0x05, 0x31, 0x51, 0x81, 0x77, 0x08, 0x7d, 0xff, 0x8d, 0x04, 0xa0, 0x66, 0x6c, 0x13, 0x01, 0xa9, 0xb3, 0x84, 0x27, 0xc2, 0xea, 0x1b, 0x16, 0x2e, 0x6f, 0xca, 0x52, 0x01, 0x81, 0xef, 0x22, 0xa2, 0xd2, 0x05, 0xce, 0xff, 0xff, 0xb1, 0x54, 0x9c, 0x97, 0x07, 0x80, 0x55, 0x60, 0xc6, 0xc4, 0xb3, 0x19, 0x43, 0xd5, 0x25, 0x56, 0xbf, 0x30, 0x1c, 0x5e, 0x0e, 0x75, 0x92, 0x4f, 0xbe, 0x6b, 0x5c, 0x36, 0x2f, 0xc9, 0x80, 0x17, 0x53, 0xe6, 0x30, 0x43, 0x3a, 0x9a, 0x34, 0x8f, 0x53, 0xe6, 0x2c, 0x07, 0x46, 0xb2, 0x6e, 0x34, 0x8d, 0xfb, 0x85, 0x85, 0x3d, 0x1e, 0xf6, 0xec, 0xa0, 0x2c, 0xf3, 0xf3, 0x43, 0xe7, 0x7c, 0x17, 0x69, 0xff, 0xc1, 0xc1, 0x09, 0xb8, 0x8e, 0xce, 0xa1, 0x6a, 0xb6, 0xcf, 0x47, 0x6e, 0x54, 0x31, 0x25, 0x00, 0x98, 0x36, 0x22, 0xdf, 0x41, 0xe6, 0x95, 0xec, 0x27, 0xa4, 0x1c, 0xa7, 0xa6, 0x31, 0x21, 0xba, 0x97, 0xbe, 0xe7, 0xb0, 0xe9, 0xd5, 0x47, 0xbf, 0x42, 0x0f, 0x64, 0x7d, 0x0f, 0x86, 0x71, 0xbf, 0x41, 0x07, 0xa7, 0x12, 0xa7, 0xdb, 0xc1, 0xaf, 0x3a, 0xa8, 0xd1, 0x5b, 0x98, 0x54, 0x8d, 0x39, 0x09, 0xf7, 0x2b, 0x9a, 0x27, 0xf8, 0x1c, 0x46, 0xe3, 0xde, 0xfa, 0x95, 0xea, 0xff, 0x75, 0x90, 0xc6, 0x26, 0xb9, 0xba, 0x10, 0x97, 0x4a, 0xe8, 0xb9, 0xf5, 0x85, 0x35, 0xd0, 0x9c, 0xa3, 0x0f, 0x9f, 0x52, 0x35, 0x39, 0xcf, 0x58, 0x4f, 0x9b, 0xc6, 0xc7, 0x41, 0x85, 0xc2, 0xff, 0x12, 0x50, 0x4f, 0x55, 0x98, 0xff, 0xde, 0x6f, 0x86, 0x02, 0x1a, 0xe5, 0x14, 0x56, 0x2f, 0xed, 0x38, 0x81, 0x19, 0x7f, 0xca, 0x22, 0xdb, 0x55, 0x90, 0xfc, 0xf9, 0x52, 0x2e, 0xf7, 0x60, 0xed, 0x0e, 0x36, 0x31, 0xa6, 0xbd, 0x79, 0xf2, 0x90, 0x00, 0xb4, 0x2b }; /* K = 065a3ebed489d78ad676afb5373c7028f843816fa97c30169149897f */ static const uint8_t ac_dsa_vect126_out[] = { /* R */ 0x76, 0xbd, 0x6f, 0xf4, 0xcd, 0xc4, 0xfe, 0x37, 0xf6, 0x70, 0x5e, 0x77, 0xef, 0xdc, 0xac, 0x6f, 0xbb, 0x9d, 0x54, 0xfc, 0x0b, 0x22, 0x06, 0x43, 0xc6, 0x62, 0xac, 0xbf, /* S */ 0x8a, 0x12, 0x4a, 0x36, 0x40, 0xad, 0x73, 0x28, 0x0f, 0x30, 0x5a, 0xfc, 0x2b, 0xc3, 0xe5, 0x7f, 0x7a, 0x2e, 0x07, 0x40, 0x81, 0xbe, 0x7b, 0xc9, 0x0b, 0x5b, 0x1f, 0xaa }; #define ac_dsa_vect127_prime ac_dsa_vect121_prime #define ac_dsa_vect127_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect127_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect127_ptx[] = { /* Msg */ 0xd6, 0x96, 0x94, 0xbf, 0x9a, 0x93, 0xac, 0x0c, 0xc3, 0x91, 0x59, 0x73, 0xd4, 0x0e, 0x35, 0x12, 0x47, 0xc3, 0xbc, 0xac, 0xa9, 0x80, 0x69, 0xcd, 0x9c, 0x1e, 0x7a, 0x3c, 0x58, 0x50, 0x63, 0x6a, 0x59, 0x2e, 0xa7, 0x5f, 0xae, 0x7b, 0xfd, 0x38, 0xb1, 0x29, 0x0e, 0x3f, 0x4d, 0x0a, 0xae, 0x8e, 0xe6, 0x89, 0xce, 0x41, 0x37, 0xea, 0x86, 0x8a, 0xae, 0xbb, 0x17, 0xda, 0xfb, 0x25, 0x5c, 0x4a, 0x20, 0xe0, 0xfa, 0xc1, 0xf4, 0x66, 0x66, 0x12, 0xf9, 0x0c, 0x46, 0x32, 0x0a, 0x62, 0x00, 0x2e, 0xde, 0x31, 0x67, 0xa3, 0x4d, 0xff, 0x74, 0xa3, 0x06, 0xa0, 0x84, 0x24, 0x27, 0xcb, 0x9d, 0x2c, 0x61, 0x59, 0x9b, 0x05, 0xc6, 0x7b, 0x67, 0x31, 0x44, 0xf6, 0xc0, 0x82, 0x32, 0xd7, 0x71, 0xf2, 0xe0, 0xaf, 0x38, 0x25, 0x3f, 0x36, 0xe1, 0x22, 0x87, 0x0e, 0x04, 0xeb, 0xc5, 0x4a, 0x51, 0x2f }; static const uint8_t ac_dsa_vect127_priv_val[] = { /* X */ 0x04, 0x4b, 0x1b, 0xcb, 0x76, 0xdb, 0x64, 0xab, 0x75, 0x00, 0x74, 0x1f, 0x43, 0x98, 0x9d, 0x3d, 0x87, 0x89, 0x91, 0x78, 0x89, 0x47, 0xb6, 0x79, 0xbf, 0x22, 0xc0, 0x88 }; static const uint8_t ac_dsa_vect127_pub_val[] = { /* Y */ 0x9c, 0x58, 0x8b, 0x76, 0x26, 0x9b, 0x2f, 0x08, 0x7f, 0x7e, 0x7a, 0xf4, 0xec, 0x4c, 0x0e, 0xf2, 0x63, 0xe9, 0x63, 0x6f, 0x45, 0xe7, 0x3e, 0x60, 0x45, 0x02, 0xd6, 0x2f, 0xae, 0x90, 0xa2, 0x51, 0x01, 0xbc, 0x2b, 0xad, 0x2a, 0x00, 0x21, 0x27, 0xd4, 0xb6, 0x0f, 0x5c, 0x4a, 0x13, 0x88, 0x88, 0x0c, 0xad, 0xe9, 0x46, 0x3a, 0xb5, 0xf7, 0x99, 0x7d, 0x54, 0xa0, 0x2c, 0x24, 0xe7, 0xd5, 0x1a, 0x4b, 0x8a, 0x7d, 0x91, 0xcd, 0xf6, 0xaf, 0xca, 0x2b, 0x43, 0x37, 0x68, 0x09, 0x45, 0x33, 0xa0, 0xde, 0x08, 0xde, 0xc1, 0xf1, 0x9e, 0xcc, 0xb4, 0x6d, 0xf1, 0x80, 0x0f, 0x53, 0xd3, 0xdf, 0xee, 0xfb, 0xfb, 0x76, 0x9a, 0x80, 0xe1, 0x68, 0x6e, 0x8d, 0x53, 0xc6, 0x0e, 0x8c, 0x15, 0x11, 0xa6, 0xdd, 0x4f, 0x42, 0xa1, 0x55, 0xbd, 0x85, 0xf7, 0x57, 0x40, 0xbc, 0xbb, 0x7b, 0x11, 0x27, 0x59, 0x18, 0x22, 0x92, 0x6d, 0x16, 0x82, 0x98, 0x23, 0x75, 0xea, 0x5e, 0xc2, 0x9f, 0xd1, 0xef, 0x4f, 0x28, 0x3b, 0x94, 0xe0, 0x24, 0x23, 0xa8, 0x30, 0xb3, 0x5e, 0x97, 0x3c, 0xaf, 0x12, 0x37, 0x7e, 0xe1, 0x8d, 0x2c, 0x6e, 0xe7, 0x77, 0x11, 0x84, 0xd7, 0xa9, 0x4e, 0x7a, 0x0c, 0x4a, 0x01, 0x04, 0x4a, 0xfc, 0x4e, 0xfb, 0x2f, 0xfe, 0xcb, 0x69, 0x5e, 0x23, 0x3a, 0xeb, 0x80, 0xc5, 0x16, 0xc7, 0x7d, 0x1c, 0x73, 0x0d, 0x30, 0xd1, 0xaa, 0x4f, 0x39, 0xda, 0x51, 0xbc, 0xc4, 0x8f, 0x44, 0xd0, 0x7a, 0xbf, 0xbe, 0x75, 0xf2, 0x28, 0xab, 0xec, 0x2e, 0x72, 0x73, 0x59, 0x3c, 0x98, 0xf3, 0x23, 0xa9, 0xb0, 0x03, 0x56, 0x2a, 0x16, 0x87, 0x52, 0xe8, 0x37, 0xa1, 0x23, 0x2f, 0x46, 0x2a, 0x23, 0xd3, 0xb1, 0x85, 0xea, 0x8a, 0x05, 0x36, 0x15, 0x70, 0x45, 0x5a, 0xad, 0xd1, 0x03, 0x70, 0x63 }; /* K = 4707e611f7d2dbb66f5ff083bab786a525884b49390213300b088fde */ static const uint8_t ac_dsa_vect127_out[] = { /* R */ 0x10, 0x8a, 0x08, 0x2d, 0x2b, 0xf6, 0x35, 0x8a, 0x73, 0x74, 0x65, 0x62, 0x43, 0x20, 0xc4, 0xfa, 0x9d, 0x37, 0x19, 0x74, 0x4c, 0x2d, 0xb6, 0x9d, 0x18, 0x96, 0x3d, 0x75, /* S */ 0x42, 0x0f, 0x35, 0x37, 0xfa, 0x68, 0x58, 0x65, 0x7d, 0xb7, 0xa2, 0x1e, 0x72, 0xe1, 0x1e, 0xc0, 0xec, 0x8c, 0xc8, 0x5a, 0x09, 0xa0, 0xd1, 0xa4, 0x45, 0x94, 0x49, 0x80 }; #define ac_dsa_vect128_prime ac_dsa_vect121_prime #define ac_dsa_vect128_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect128_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect128_ptx[] = { /* Msg */ 0x17, 0x45, 0x5b, 0xfb, 0xb1, 0x28, 0xdf, 0x0f, 0x96, 0x54, 0x4b, 0xbf, 0x83, 0xca, 0x0f, 0xf3, 0x74, 0xbc, 0x08, 0x6b, 0x2d, 0xe1, 0x8f, 0x74, 0xf5, 0x90, 0x49, 0xf7, 0x3e, 0xff, 0x3c, 0x8e, 0xf3, 0x2a, 0x48, 0x42, 0x9a, 0x40, 0x38, 0x25, 0x63, 0x04, 0x63, 0x6f, 0x30, 0x32, 0x19, 0x27, 0x95, 0xba, 0x28, 0x07, 0x40, 0x7e, 0xf5, 0x2b, 0x8d, 0x59, 0xb4, 0x0b, 0xfd, 0x51, 0x75, 0x83, 0xf9, 0x98, 0x81, 0x02, 0x79, 0xc0, 0x21, 0x17, 0x71, 0xd9, 0xe5, 0x4f, 0x2b, 0x84, 0xe8, 0x98, 0xf9, 0x89, 0x2e, 0xf7, 0x7b, 0xeb, 0xa3, 0x3f, 0xf3, 0x1a, 0x28, 0x68, 0x69, 0x3f, 0x1f, 0x09, 0x78, 0xb8, 0x98, 0x95, 0xe3, 0x50, 0xd5, 0xde, 0xd2, 0x59, 0xfb, 0x13, 0x97, 0xe9, 0xc6, 0x98, 0x99, 0x86, 0x45, 0x2a, 0x0d, 0x77, 0xdf, 0x99, 0x04, 0x8f, 0xff, 0x84, 0xb6, 0xeb, 0x15, 0x0e }; static const uint8_t ac_dsa_vect128_priv_val[] = { /* X */ 0x2b, 0xca, 0x3c, 0x61, 0x3b, 0xe5, 0x3a, 0x6a, 0xab, 0x12, 0x1d, 0xe9, 0x1d, 0xb4, 0xfa, 0x06, 0xb4, 0x68, 0xfc, 0x65, 0x50, 0xc8, 0x2e, 0xee, 0xc4, 0xbc, 0xe9, 0xb1 }; static const uint8_t ac_dsa_vect128_pub_val[] = { /* Y */ 0x85, 0x0c, 0x0f, 0xca, 0xc0, 0x73, 0xc5, 0x63, 0x18, 0xa9, 0x21, 0x04, 0x65, 0x4e, 0x6a, 0x8a, 0xe7, 0x67, 0x8f, 0xc4, 0x01, 0x47, 0x28, 0x30, 0x46, 0x49, 0xbf, 0x10, 0x70, 0x27, 0x77, 0x06, 0xfb, 0xd3, 0x2e, 0xa4, 0xd4, 0x1f, 0x77, 0xf8, 0x0a, 0x80, 0xc8, 0x8f, 0x27, 0x01, 0xe3, 0x66, 0x5b, 0xe7, 0x3f, 0x59, 0xf9, 0x14, 0xa9, 0x15, 0xd6, 0x6b, 0x41, 0x1b, 0xb0, 0x5a, 0xe5, 0xc1, 0x8b, 0x00, 0xbc, 0x21, 0x62, 0x51, 0x39, 0x97, 0x32, 0xfd, 0xc2, 0xa6, 0x8b, 0xe6, 0xa2, 0x1b, 0x3b, 0x08, 0x87, 0x97, 0x41, 0x6a, 0xe0, 0x5c, 0xe8, 0x76, 0xb6, 0x80, 0x2e, 0x4f, 0x94, 0x1a, 0x21, 0xb1, 0xc6, 0x61, 0xe3, 0xf0, 0x6d, 0x50, 0x1e, 0xf2, 0xa1, 0x76, 0x59, 0xf0, 0x88, 0xd2, 0x19, 0x5d, 0xd1, 0x61, 0xf0, 0x64, 0x04, 0x48, 0x7a, 0x27, 0xb7, 0x9d, 0xf1, 0xec, 0x57, 0x4a, 0xc3, 0xab, 0xc3, 0x0e, 0xce, 0x2a, 0x14, 0x28, 0xc5, 0xe0, 0xc1, 0xd4, 0xc4, 0x98, 0x03, 0x39, 0x8d, 0x07, 0x14, 0xca, 0xcd, 0x98, 0x53, 0x85, 0x4b, 0x08, 0x74, 0x6f, 0xa4, 0x53, 0x56, 0x15, 0x45, 0xe6, 0xf0, 0xd9, 0x6c, 0xd2, 0xc7, 0xce, 0x1b, 0x89, 0xbc, 0xac, 0xe1, 0xc6, 0x97, 0xec, 0x4d, 0x61, 0x6b, 0xf1, 0x4d, 0x18, 0x89, 0xa7, 0x9a, 0x80, 0x6a, 0x36, 0x99, 0xf8, 0x4f, 0x19, 0xef, 0xe6, 0x90, 0xfa, 0x13, 0xa3, 0xb4, 0x38, 0x3e, 0xbf, 0x77, 0x26, 0x14, 0x00, 0xfc, 0xbe, 0x30, 0x9c, 0x2e, 0x5e, 0xab, 0x0b, 0x24, 0xb1, 0x97, 0xcb, 0x85, 0x6a, 0xa2, 0x7d, 0x7d, 0x71, 0xd9, 0x2d, 0x32, 0xaa, 0xb6, 0x56, 0xfa, 0xec, 0x5f, 0xf7, 0x92, 0xec, 0xe5, 0x38, 0x74, 0xc4, 0x06, 0x9f, 0x54, 0x0d, 0x94, 0x8f, 0x8b, 0x2e, 0x55, 0x99, 0x08, 0x2e, 0x21, 0xf0, 0x2d, 0x72 }; /* K = 4b528d2b2bdfa4f2fce09dc9806ed5302e41cc52f35962653d7f222c */ static const uint8_t ac_dsa_vect128_out[] = { /* R */ 0x42, 0x3d, 0xe9, 0xe1, 0x12, 0xec, 0x38, 0xe3, 0xa0, 0x34, 0xf5, 0xd9, 0x67, 0x5c, 0x76, 0xf9, 0xdc, 0x85, 0x36, 0xb3, 0x0d, 0x05, 0x67, 0x8a, 0x29, 0x63, 0xec, 0x16, /* S */ 0x74, 0x05, 0x1e, 0x79, 0x69, 0x9f, 0xa4, 0x4d, 0xe1, 0x8e, 0x36, 0xab, 0x11, 0x68, 0x73, 0x59, 0x3a, 0x31, 0x0e, 0x4e, 0x09, 0xdc, 0xe1, 0x8b, 0x83, 0x3f, 0xc2, 0xf5 }; #define ac_dsa_vect129_prime ac_dsa_vect121_prime #define ac_dsa_vect129_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect129_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect129_ptx[] = { /* Msg */ 0xde, 0x1f, 0x96, 0x06, 0x26, 0x1f, 0xf8, 0x22, 0x18, 0xc8, 0xc1, 0x45, 0xaa, 0x4d, 0x58, 0x47, 0x67, 0x3b, 0x45, 0x9e, 0xb5, 0x5f, 0xe7, 0xe6, 0x45, 0x4c, 0x04, 0x43, 0x26, 0x6b, 0xbf, 0x80, 0x0c, 0x1d, 0x09, 0x05, 0x1f, 0x5e, 0x31, 0x41, 0xc4, 0x37, 0x0d, 0x1b, 0x99, 0x0c, 0xf5, 0xfe, 0xa9, 0xd2, 0x68, 0x39, 0x86, 0xc3, 0xbd, 0xd2, 0x82, 0x31, 0x07, 0x82, 0x9a, 0xce, 0x6e, 0xd7, 0x03, 0x4c, 0xae, 0xb2, 0xf6, 0x57, 0xa0, 0x7b, 0x25, 0xb7, 0xd6, 0x02, 0x40, 0xa0, 0x20, 0x50, 0x26, 0xc2, 0xe3, 0x01, 0x81, 0x41, 0xd4, 0x79, 0xc0, 0x77, 0x87, 0xa1, 0x4e, 0x70, 0x26, 0x22, 0xf8, 0xe6, 0xdf, 0x70, 0x9b, 0x63, 0x6c, 0x6d, 0x3d, 0x0b, 0x5f, 0xd5, 0x4f, 0x55, 0x16, 0xdb, 0xad, 0x97, 0x03, 0x8e, 0x5c, 0x0e, 0xb3, 0x1f, 0x54, 0xdb, 0x12, 0x64, 0xd6, 0x00, 0xef, 0xc6 }; static const uint8_t ac_dsa_vect129_priv_val[] = { /* X */ 0x36, 0x6a, 0x49, 0x17, 0x3a, 0x17, 0x83, 0xb9, 0x95, 0x50, 0xd8, 0x4c, 0x7f, 0xa0, 0x2b, 0x6c, 0xcc, 0xab, 0x12, 0xee, 0x9a, 0x30, 0x6b, 0xed, 0x7b, 0xb8, 0x1b, 0xa7 }; static const uint8_t ac_dsa_vect129_pub_val[] = { /* Y */ 0x4d, 0x6e, 0x89, 0xb0, 0x22, 0xc2, 0x78, 0xf3, 0xbf, 0x89, 0x32, 0xe7, 0x06, 0xe4, 0x18, 0xec, 0xb2, 0x0c, 0x1b, 0xba, 0xb1, 0x3e, 0xa8, 0xc9, 0x0b, 0x6b, 0xd8, 0x43, 0x84, 0xf3, 0x8b, 0x31, 0x1e, 0x8f, 0xb2, 0xc4, 0xc0, 0xa9, 0x4b, 0xa7, 0xd3, 0xaf, 0xca, 0x1b, 0xa9, 0x42, 0x52, 0xa4, 0xc1, 0xac, 0x11, 0x87, 0x62, 0x2c, 0xd9, 0xc1, 0x6a, 0xa7, 0x3b, 0xb1, 0xb4, 0xa5, 0xcf, 0x55, 0xb5, 0xaa, 0x34, 0xbd, 0x93, 0x52, 0x6f, 0x18, 0x7b, 0xee, 0xb1, 0x17, 0x00, 0xe4, 0xaf, 0xb8, 0x8c, 0x81, 0x6e, 0xda, 0x50, 0xa5, 0x0e, 0x81, 0x86, 0x0c, 0x87, 0xfa, 0x66, 0xa1, 0xb6, 0x3f, 0x5f, 0xfe, 0xc3, 0xc3, 0xae, 0x39, 0xbd, 0xc0, 0x09, 0xd3, 0x8f, 0xa1, 0x3d, 0xa8, 0x63, 0xca, 0x5e, 0xc1, 0x34, 0xa7, 0xff, 0xcf, 0x5d, 0xc3, 0xca, 0x85, 0xcc, 0x34, 0xd6, 0x1c, 0x5d, 0xf8, 0xf9, 0xd9, 0xbd, 0xbe, 0x6a, 0x54, 0x10, 0x45, 0xb4, 0x5c, 0xb5, 0x12, 0xef, 0x64, 0xd1, 0xad, 0x3d, 0xb7, 0xb3, 0x7d, 0xba, 0x33, 0xc6, 0xe3, 0xc9, 0x61, 0x80, 0xcf, 0xb2, 0x6f, 0x48, 0xc6, 0x33, 0x73, 0xa0, 0xf0, 0x00, 0x3a, 0xe6, 0x58, 0x26, 0x79, 0xda, 0x48, 0x50, 0xad, 0x2a, 0x0b, 0x89, 0x9e, 0x0e, 0x8a, 0x18, 0x47, 0xdf, 0x07, 0xfe, 0xf3, 0xa4, 0x33, 0x0a, 0x72, 0xf8, 0xa8, 0x02, 0xc0, 0x6e, 0x8e, 0x95, 0x70, 0x7e, 0x0c, 0x7d, 0xc1, 0x91, 0x5f, 0x6e, 0x17, 0x31, 0xfe, 0x65, 0x0f, 0x1a, 0xe3, 0x52, 0xe7, 0x82, 0xd2, 0xdd, 0x77, 0xf5, 0x4e, 0x5d, 0xac, 0x52, 0x53, 0x9a, 0x10, 0xa2, 0x2b, 0xbc, 0x2e, 0xea, 0x31, 0xef, 0xb9, 0x44, 0x38, 0xa0, 0x30, 0xc4, 0xb2, 0x45, 0x1b, 0xbf, 0xf6, 0x90, 0x1b, 0x5f, 0xb3, 0x01, 0x6c, 0xd1, 0x62, 0xaf, 0x6b, 0xf0, 0xfb }; /* K = 13894dda6721bf3af8a40603a3d97af240976a8ecb3ead998eee0ff0 */ static const uint8_t ac_dsa_vect129_out[] = { /* R */ 0x5f, 0x38, 0x39, 0xeb, 0x66, 0x3f, 0x02, 0x6f, 0x79, 0x29, 0x12, 0xd1, 0xcb, 0x0b, 0x44, 0x8f, 0x5e, 0x2e, 0x59, 0x31, 0x39, 0x00, 0x1e, 0x83, 0x9f, 0x71, 0xc9, 0x42, /* S */ 0x6b, 0x07, 0xed, 0xb6, 0xa0, 0x34, 0xd0, 0x84, 0xa6, 0x1b, 0xf3, 0xc0, 0xa3, 0x6e, 0x7e, 0xe6, 0x91, 0x19, 0x48, 0xad, 0x8f, 0x6e, 0x50, 0xac, 0x68, 0x44, 0xb1, 0xf3 }; #define ac_dsa_vect130_prime ac_dsa_vect121_prime #define ac_dsa_vect130_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect130_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect130_ptx[] = { /* Msg */ 0xc1, 0xed, 0xd8, 0x61, 0x51, 0xaf, 0x66, 0xc6, 0x22, 0x3e, 0x41, 0x3f, 0x17, 0xe7, 0x34, 0xb2, 0xbc, 0x02, 0x4f, 0xf0, 0x66, 0x57, 0x8c, 0x55, 0x30, 0x8f, 0x13, 0x88, 0xa9, 0x1a, 0xb8, 0x72, 0x70, 0xcd, 0x25, 0xca, 0x2e, 0xfb, 0xc2, 0x86, 0x7e, 0xb7, 0x15, 0xeb, 0xed, 0x6d, 0x10, 0x01, 0x2b, 0x6f, 0x48, 0x08, 0xf2, 0xde, 0x19, 0x86, 0xff, 0x7f, 0x4c, 0x36, 0x9d, 0xaf, 0x46, 0xc8, 0x0a, 0x61, 0x87, 0x07, 0x88, 0x8a, 0xe3, 0xf8, 0x6e, 0x38, 0xe7, 0xf2, 0x5d, 0x6c, 0xaa, 0x50, 0x91, 0x04, 0xd4, 0x85, 0x1c, 0xbe, 0xef, 0xbb, 0x75, 0x69, 0x2a, 0xad, 0x49, 0x9a, 0x33, 0xaa, 0x35, 0xb1, 0x14, 0x09, 0x30, 0x0e, 0x49, 0x5f, 0xe0, 0x07, 0x52, 0x4b, 0x4a, 0xf2, 0xc2, 0x0d, 0x33, 0xf1, 0xc8, 0xc0, 0x45, 0x16, 0xb6, 0x97, 0x3a, 0xc1, 0xe0, 0x7d, 0xf3, 0xf1, 0x60, 0xdd }; static const uint8_t ac_dsa_vect130_priv_val[] = { /* X */ 0x84, 0x1b, 0xa9, 0x1e, 0x27, 0x3f, 0x1c, 0x57, 0x84, 0x7a, 0xd3, 0x36, 0xce, 0xa4, 0x7c, 0x64, 0x33, 0x35, 0xe6, 0x8f, 0x61, 0x14, 0x82, 0xa3, 0x0d, 0x6c, 0x0b, 0xb7 }; static const uint8_t ac_dsa_vect130_pub_val[] = { /* Y */ 0x90, 0xdb, 0xbe, 0x47, 0x41, 0xa7, 0x6a, 0x5f, 0xf2, 0x22, 0xdd, 0xc8, 0x33, 0xc0, 0xe2, 0xdd, 0x44, 0x5a, 0xd0, 0x17, 0x26, 0xbb, 0xea, 0x25, 0xca, 0xc2, 0x47, 0xf9, 0xef, 0x9d, 0xa6, 0x43, 0x93, 0x27, 0x36, 0xdb, 0x07, 0xcd, 0x9a, 0xef, 0xfe, 0xb4, 0x51, 0x19, 0x35, 0x1e, 0x00, 0x33, 0x2d, 0x9d, 0xfc, 0x89, 0xf5, 0x90, 0x3a, 0x54, 0x1e, 0x74, 0xe2, 0xe9, 0x70, 0x9d, 0x0f, 0x85, 0x2a, 0xd6, 0x52, 0x40, 0xd0, 0x61, 0x59, 0xfe, 0x54, 0x43, 0x6d, 0xd8, 0x20, 0x1f, 0x8c, 0x56, 0x92, 0x6e, 0x8d, 0x23, 0xc2, 0xec, 0xad, 0xeb, 0x8c, 0xbc, 0x9a, 0xeb, 0xf1, 0x2d, 0x52, 0xbe, 0x64, 0x89, 0xe0, 0xac, 0xb0, 0xe7, 0x52, 0x6f, 0xba, 0x37, 0x54, 0xb7, 0xec, 0x16, 0x3d, 0xc7, 0xe2, 0xfa, 0x91, 0x93, 0x31, 0x91, 0x24, 0xf0, 0xcb, 0xb6, 0x1c, 0x2a, 0xb7, 0xab, 0x1a, 0x28, 0xc1, 0x4e, 0x7d, 0x58, 0x1d, 0xfb, 0x8d, 0xe2, 0x3f, 0x53, 0x36, 0x4d, 0x20, 0x41, 0x90, 0xa5, 0x8f, 0xcb, 0x9e, 0xa5, 0xb6, 0xf6, 0x1a, 0x79, 0x79, 0xb8, 0x6b, 0xb7, 0xa7, 0xa4, 0x26, 0x3a, 0x10, 0x66, 0xf0, 0x51, 0x6e, 0x58, 0x70, 0xde, 0x42, 0x3a, 0x7e, 0x3b, 0x90, 0x6d, 0x90, 0x31, 0x3d, 0x1f, 0xf9, 0x32, 0x24, 0x50, 0xf7, 0x2d, 0xdd, 0xa4, 0x73, 0x3a, 0xc7, 0x4f, 0xca, 0x5d, 0x4a, 0xd2, 0xbe, 0x22, 0xc2, 0x66, 0x7b, 0x92, 0x21, 0x20, 0x69, 0x44, 0x6b, 0x42, 0xa3, 0x91, 0x23, 0x3d, 0x85, 0x21, 0x6a, 0x88, 0xc2, 0x5b, 0x76, 0xc9, 0x47, 0xd8, 0xd5, 0x65, 0x91, 0x00, 0x3d, 0xf2, 0x53, 0x2f, 0xcd, 0x7b, 0x18, 0xf9, 0x23, 0xed, 0x48, 0x2d, 0x46, 0x4f, 0xb7, 0x6f, 0x2c, 0x85, 0x61, 0x78, 0x40, 0xd3, 0x70, 0xab, 0x99, 0xe3, 0x20, 0xe8, 0x8c, 0xf9, 0xef, 0x8d }; /* K = 5ed84fb90761dc03a5e60f3b396d6cc7f8c16c77f065a6ec0049fa51 */ static const uint8_t ac_dsa_vect130_out[] = { /* R */ 0x83, 0x6d, 0x84, 0xd8, 0x62, 0x71, 0xe1, 0x64, 0x84, 0x66, 0xd1, 0x95, 0x5c, 0x2b, 0x60, 0xb2, 0xa0, 0x4c, 0xc0, 0x21, 0x40, 0x50, 0x83, 0x62, 0x63, 0x47, 0xae, 0xf9, /* S */ 0x63, 0xc7, 0xee, 0xb5, 0xe0, 0x6e, 0x81, 0xd8, 0x92, 0x33, 0x56, 0xf7, 0x99, 0x81, 0x0a, 0x26, 0xaf, 0x67, 0xc0, 0xfa, 0xa1, 0x8b, 0x39, 0x22, 0x58, 0xe4, 0xa9, 0xa0 }; #define ac_dsa_vect131_prime ac_dsa_vect121_prime #define ac_dsa_vect131_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect131_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect131_ptx[] = { /* Msg */ 0x2b, 0x5f, 0xb6, 0x13, 0x59, 0x8c, 0x02, 0x91, 0x6b, 0xf6, 0xb4, 0xb0, 0xfd, 0x7a, 0x6b, 0x54, 0x26, 0xac, 0x5b, 0x56, 0x95, 0x43, 0x92, 0xfb, 0xa3, 0x2d, 0xe0, 0x0b, 0xdf, 0x4b, 0x70, 0x95, 0x3b, 0xe1, 0x96, 0xad, 0x51, 0xff, 0x2c, 0x09, 0x7a, 0x81, 0xe6, 0xce, 0x1d, 0x17, 0xcf, 0x83, 0x7d, 0x24, 0x44, 0x75, 0x2b, 0xe9, 0x2b, 0xd4, 0xa9, 0xd1, 0xa8, 0xb4, 0x13, 0x27, 0x52, 0x7f, 0xf6, 0xbd, 0xc0, 0xe5, 0xc3, 0xe0, 0xcf, 0x46, 0xf7, 0xe3, 0x79, 0x66, 0xaa, 0xe1, 0x8a, 0x29, 0xce, 0x19, 0x81, 0xf2, 0x12, 0xd7, 0x14, 0xdd, 0x6c, 0x0c, 0xbb, 0x41, 0x0d, 0x3a, 0x5f, 0x3d, 0x00, 0x6b, 0xa9, 0xb5, 0x93, 0xda, 0x15, 0x0c, 0xe4, 0x22, 0xb5, 0xcc, 0x42, 0x0f, 0x3b, 0x56, 0x1b, 0xfd, 0xf1, 0x1d, 0xcb, 0x99, 0x10, 0x00, 0x57, 0x09, 0xee, 0xb1, 0x29, 0xe2, 0x06, 0x65 }; static const uint8_t ac_dsa_vect131_priv_val[] = { /* X */ 0x22, 0x09, 0x47, 0x39, 0x6c, 0x2d, 0xe8, 0x5d, 0x48, 0x0b, 0xae, 0x73, 0x02, 0x98, 0xdf, 0x67, 0x28, 0x3d, 0x0d, 0x06, 0x94, 0x95, 0x0f, 0x5e, 0xfa, 0x4e, 0xa5, 0xd6 }; static const uint8_t ac_dsa_vect131_pub_val[] = { /* Y */ 0x95, 0x94, 0x7f, 0xbc, 0x50, 0xd5, 0xa8, 0x02, 0x99, 0xc9, 0x0d, 0xd2, 0x7c, 0xf3, 0x91, 0x00, 0x91, 0x42, 0x0d, 0x8a, 0xf8, 0x49, 0x24, 0x0e, 0xbb, 0x54, 0x1a, 0x21, 0xb4, 0x9e, 0x52, 0x8b, 0x0f, 0x33, 0x17, 0xac, 0xc1, 0x04, 0x93, 0xd5, 0x0e, 0x6b, 0xce, 0x67, 0x6c, 0x43, 0x3c, 0x31, 0x14, 0x7f, 0x81, 0x28, 0x67, 0x89, 0xe6, 0xa4, 0x1f, 0x4b, 0x26, 0x03, 0xba, 0xc0, 0xf6, 0xe5, 0xee, 0x7a, 0xff, 0xdb, 0x44, 0xcc, 0xeb, 0x42, 0x86, 0x43, 0x58, 0x60, 0x7d, 0x45, 0xf4, 0x65, 0x5a, 0x70, 0x9d, 0x7d, 0x67, 0xf7, 0x16, 0xd7, 0x36, 0x7b, 0xb5, 0xea, 0xb3, 0x34, 0xf6, 0x1c, 0xef, 0x37, 0x20, 0xc0, 0x80, 0xca, 0xb1, 0x75, 0x12, 0x32, 0x9e, 0x6d, 0x99, 0x92, 0x5b, 0x47, 0xe4, 0x96, 0x0c, 0x85, 0x03, 0x1b, 0xfd, 0xdb, 0x13, 0xf0, 0xc6, 0x1a, 0xf8, 0x0e, 0xa4, 0x6b, 0x7b, 0x87, 0x02, 0xf8, 0xad, 0x34, 0x8d, 0x57, 0xd4, 0x81, 0xef, 0xe8, 0x21, 0x05, 0x4f, 0xc8, 0x3b, 0x52, 0x66, 0x78, 0x27, 0x56, 0xa4, 0x2d, 0xd4, 0x31, 0x88, 0x1e, 0xa6, 0xcf, 0xeb, 0x7f, 0x79, 0x00, 0xd8, 0xf7, 0x47, 0xaa, 0xc9, 0x97, 0x6b, 0xe8, 0x94, 0x59, 0x52, 0xaf, 0xb8, 0xa2, 0x74, 0xda, 0xd0, 0x34, 0x28, 0x08, 0x83, 0x10, 0xa2, 0x45, 0x6e, 0xc2, 0x54, 0xd1, 0xcc, 0xfb, 0x63, 0xee, 0xde, 0xa5, 0xd3, 0x74, 0xed, 0x8c, 0xc6, 0x37, 0xa7, 0xba, 0xab, 0xf8, 0xf4, 0x22, 0xe1, 0xa1, 0x2d, 0x5f, 0xf3, 0x16, 0xdf, 0xf8, 0xa0, 0x82, 0x06, 0x89, 0x31, 0x49, 0x0a, 0x47, 0x06, 0x50, 0x3d, 0x19, 0xf9, 0x35, 0x54, 0xf2, 0x52, 0x43, 0x75, 0x1d, 0xfe, 0x62, 0xcd, 0x87, 0xcb, 0x85, 0x6f, 0x64, 0x4f, 0xbb, 0x6f, 0xc4, 0x6f, 0xb9, 0xcf, 0x89, 0xaf, 0x5a, 0xea, 0x1a }; /* K = 2697349761cc4ccbdb4550bb9ca73654280ade31f577ef86100ff4cf */ static const uint8_t ac_dsa_vect131_out[] = { /* R */ 0x7b, 0x45, 0x5f, 0xae, 0x10, 0x02, 0xfa, 0x87, 0xf3, 0x6c, 0xf6, 0xf3, 0x45, 0x71, 0x62, 0x25, 0xd4, 0xaa, 0x14, 0x07, 0x80, 0x2a, 0xf4, 0x08, 0x2b, 0xfb, 0xb1, 0x4a, /* S */ 0x23, 0x5d, 0x8b, 0xe4, 0xce, 0xb0, 0x17, 0x6f, 0x5d, 0x0c, 0x47, 0xc1, 0x19, 0x9a, 0xfc, 0x7e, 0x30, 0x41, 0xc7, 0xd7, 0x50, 0x8b, 0x9f, 0xed, 0xdc, 0xaa, 0x0d, 0x74 }; #define ac_dsa_vect132_prime ac_dsa_vect121_prime #define ac_dsa_vect132_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect132_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect132_ptx[] = { /* Msg */ 0xbd, 0x7d, 0x69, 0xbc, 0xc2, 0xe4, 0xf8, 0xa4, 0x2e, 0x62, 0x7f, 0xa2, 0x1c, 0x7f, 0xa9, 0xfd, 0xd3, 0xe5, 0x74, 0xb6, 0xdc, 0x5a, 0xd2, 0x02, 0x17, 0xe8, 0x0b, 0xcc, 0x99, 0x97, 0xb4, 0xc5, 0xef, 0xb3, 0x1c, 0x7b, 0x65, 0xdb, 0xe8, 0xa0, 0xa3, 0x94, 0xf0, 0xaf, 0x58, 0x03, 0x87, 0xb9, 0x91, 0x78, 0x88, 0x15, 0x2d, 0xc4, 0xf6, 0x3c, 0xe5, 0x2d, 0x3e, 0xc4, 0xb7, 0x23, 0xbf, 0xea, 0x81, 0x14, 0x82, 0x5f, 0x9f, 0x1e, 0x25, 0x9f, 0x67, 0xb5, 0xd1, 0x3b, 0xca, 0xa6, 0x6c, 0x97, 0xde, 0x72, 0x5f, 0xae, 0x4a, 0xd2, 0x47, 0xbb, 0x92, 0x24, 0x97, 0xeb, 0xed, 0x0f, 0x09, 0x2b, 0xba, 0xc1, 0x2f, 0x2c, 0xbd, 0x9b, 0x71, 0xb2, 0x29, 0x08, 0x73, 0x78, 0xe8, 0xbe, 0x06, 0x26, 0xb8, 0xd5, 0xe8, 0x95, 0x0b, 0x0a, 0x6e, 0x69, 0xe0, 0x51, 0x29, 0xf0, 0xd3, 0x84, 0x2d, 0x27 }; static const uint8_t ac_dsa_vect132_priv_val[] = { /* X */ 0x42, 0x77, 0x73, 0x74, 0x11, 0x45, 0x19, 0xbf, 0x32, 0x3b, 0xd0, 0x3b, 0x6e, 0x0e, 0xc2, 0x38, 0x66, 0x0d, 0xc8, 0x63, 0xb1, 0xa3, 0xb8, 0x5e, 0x0c, 0xf8, 0xf8, 0xa5 }; static const uint8_t ac_dsa_vect132_pub_val[] = { /* Y */ 0x6f, 0xa6, 0xde, 0xdc, 0x84, 0xa1, 0x47, 0x9b, 0xe4, 0x39, 0x06, 0xf2, 0xf6, 0x8d, 0xf0, 0xe9, 0x32, 0x34, 0xca, 0x22, 0x30, 0xc8, 0x32, 0xdb, 0x07, 0x9d, 0x9c, 0xbd, 0x93, 0x42, 0xb2, 0xdf, 0x13, 0xde, 0x4b, 0xff, 0x10, 0xbd, 0xd8, 0x31, 0x31, 0x34, 0x53, 0xb3, 0x3b, 0x72, 0x5c, 0xd6, 0x16, 0xac, 0xf1, 0xfe, 0x2f, 0x79, 0x27, 0xea, 0x32, 0xd4, 0x6f, 0xf1, 0x0e, 0xf1, 0x15, 0x4e, 0x50, 0x3f, 0x71, 0x16, 0x5a, 0xde, 0xaf, 0xfd, 0xd5, 0x00, 0xa8, 0x3b, 0xf1, 0x00, 0x1e, 0xd3, 0x6c, 0xa6, 0x5b, 0xb6, 0x97, 0x4d, 0x03, 0x72, 0xcb, 0x0f, 0x21, 0x18, 0x27, 0x84, 0x66, 0xfe, 0x12, 0x86, 0xad, 0xff, 0x3c, 0x7e, 0xf7, 0x19, 0xc2, 0xa0, 0x2c, 0xff, 0x9e, 0xd9, 0x37, 0x4f, 0xbb, 0xe6, 0x05, 0x18, 0x14, 0xd2, 0x68, 0x48, 0xb7, 0xd9, 0x70, 0xfb, 0xec, 0xfb, 0xbf, 0xfe, 0xdf, 0x40, 0xa0, 0x30, 0x83, 0xfe, 0x33, 0xd3, 0x06, 0x78, 0x38, 0xac, 0xe2, 0x28, 0x54, 0xa8, 0xe8, 0x8b, 0xfc, 0xb0, 0x2e, 0xcd, 0x76, 0xc3, 0x78, 0xbb, 0x5c, 0x8b, 0xab, 0xd2, 0x2d, 0xfb, 0xe0, 0x90, 0x75, 0x3a, 0xbf, 0x9e, 0x97, 0xcb, 0x6b, 0xa7, 0x08, 0xce, 0x00, 0xff, 0xea, 0x5c, 0x55, 0x0b, 0x09, 0xf2, 0x49, 0x30, 0x69, 0x8d, 0xf1, 0x15, 0xc0, 0x20, 0xb1, 0x30, 0x1d, 0x57, 0x1a, 0x47, 0x0e, 0x5a, 0x8a, 0x6c, 0xcf, 0xc7, 0x4a, 0xd1, 0x89, 0x49, 0xa5, 0x7f, 0x61, 0x4f, 0xcb, 0x0f, 0x7e, 0x8b, 0xf7, 0x53, 0x0a, 0x73, 0x1b, 0xb6, 0x09, 0x1a, 0x73, 0x01, 0xaf, 0x42, 0x89, 0x9d, 0x9e, 0xe9, 0xe4, 0x5a, 0xa6, 0x2c, 0xa4, 0x90, 0x3e, 0x66, 0x73, 0x3e, 0x47, 0xd0, 0x1e, 0x26, 0xb2, 0x99, 0x74, 0x6d, 0xa7, 0x5c, 0x7a, 0x57, 0xdc, 0x00, 0xbc, 0xeb, 0x4d, 0x6c }; /* K = 3ad0d788fbfaf4caef4beec9c1566a8c7a1de26bf75dba82a8243270 */ static const uint8_t ac_dsa_vect132_out[] = { /* R */ 0x16, 0xa2, 0xa4, 0x85, 0x78, 0xa0, 0xb5, 0xb5, 0x75, 0x53, 0xcd, 0x20, 0x00, 0x5b, 0x7e, 0x84, 0x00, 0xe1, 0x06, 0x1c, 0x4f, 0xef, 0x20, 0xd0, 0x33, 0xf7, 0x2f, 0x8a, /* S */ 0x6c, 0x34, 0xd1, 0x76, 0xe9, 0x5d, 0xd4, 0x92, 0x71, 0xee, 0x48, 0xa3, 0x80, 0x2e, 0xdf, 0x42, 0x38, 0x40, 0x10, 0x84, 0xbc, 0x39, 0x30, 0x20, 0x14, 0x05, 0x69, 0x3a }; #define ac_dsa_vect133_prime ac_dsa_vect121_prime #define ac_dsa_vect133_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect133_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect133_ptx[] = { /* Msg */ 0x77, 0x66, 0xe1, 0xab, 0x76, 0x38, 0xbc, 0xda, 0x3e, 0x6f, 0xdb, 0xd4, 0xc8, 0x5b, 0x36, 0x61, 0xac, 0xb2, 0x76, 0x3d, 0x41, 0x13, 0x76, 0xb2, 0xee, 0xdb, 0x4b, 0x2c, 0x6b, 0xff, 0x5d, 0x8f, 0xa2, 0x0c, 0x0a, 0xe5, 0xb3, 0xcb, 0xed, 0x20, 0x79, 0x6a, 0x6d, 0x8b, 0x81, 0xa1, 0x09, 0x6d, 0xc3, 0x6a, 0x39, 0x82, 0x6a, 0x18, 0xff, 0xb8, 0x97, 0xd3, 0x6b, 0xfb, 0x16, 0x36, 0x3c, 0xca, 0x76, 0x32, 0xec, 0xb7, 0x1d, 0x2f, 0x99, 0x6c, 0xf7, 0xca, 0xc6, 0x66, 0x69, 0xbf, 0x4c, 0x83, 0x11, 0x4b, 0xd5, 0x3b, 0xe3, 0xbe, 0x33, 0x05, 0xef, 0xc9, 0x9d, 0x22, 0x76, 0x91, 0x88, 0xf8, 0x42, 0x89, 0xcb, 0x1d, 0x11, 0x50, 0x1f, 0x04, 0x0b, 0x85, 0xd1, 0x58, 0x90, 0xd2, 0x9a, 0xf2, 0xc8, 0xea, 0xe6, 0x14, 0xf7, 0x4b, 0xee, 0xee, 0xb5, 0xfc, 0x91, 0x5a, 0xfa, 0x43, 0x22, 0xc2 }; static const uint8_t ac_dsa_vect133_priv_val[] = { /* X */ 0x36, 0x4b, 0xdc, 0xe9, 0x3d, 0xf0, 0xea, 0xad, 0x45, 0xee, 0x0e, 0xf5, 0xc1, 0x88, 0x28, 0xbf, 0xe2, 0xe3, 0x81, 0xdb, 0x60, 0x7e, 0x5b, 0x6a, 0x77, 0xff, 0xc6, 0xe9 }; static const uint8_t ac_dsa_vect133_pub_val[] = { /* Y */ 0x4c, 0x2b, 0x55, 0x90, 0x24, 0xf1, 0xb3, 0xff, 0x5c, 0x71, 0x67, 0x27, 0x0c, 0xd1, 0xf3, 0x3b, 0xbf, 0x0f, 0x40, 0xb9, 0xef, 0xa2, 0x5e, 0x13, 0x74, 0x41, 0xab, 0x46, 0x98, 0x15, 0x4e, 0x74, 0xda, 0x3c, 0xad, 0x34, 0x23, 0x6d, 0xa4, 0xbd, 0x1c, 0x57, 0xd7, 0x63, 0x8e, 0x42, 0x77, 0x27, 0x8b, 0x50, 0x8e, 0x85, 0xe3, 0xa9, 0x8d, 0x30, 0x38, 0x8a, 0xb8, 0x63, 0x8f, 0x55, 0x3e, 0x2a, 0x70, 0x00, 0x11, 0x92, 0x3e, 0x5d, 0x15, 0x4f, 0x8c, 0x14, 0x07, 0x45, 0x2d, 0xc4, 0xf8, 0x07, 0x70, 0xc9, 0xc3, 0x1c, 0x36, 0x8a, 0x21, 0xe4, 0x99, 0xd5, 0xdf, 0xb6, 0xf0, 0x5f, 0xd6, 0x77, 0x91, 0xe7, 0x61, 0xa4, 0x94, 0x20, 0x07, 0x10, 0xaf, 0x8c, 0x21, 0x88, 0x89, 0x2c, 0x2d, 0x1c, 0x31, 0x95, 0xbe, 0x4a, 0x0a, 0x1d, 0x67, 0x55, 0x1a, 0xd4, 0x66, 0xfe, 0xe8, 0x0d, 0x7e, 0xdc, 0x43, 0x53, 0x79, 0xa7, 0x2c, 0x3b, 0xff, 0xad, 0x27, 0x1d, 0xe3, 0x1a, 0xd2, 0xed, 0x10, 0x7d, 0x78, 0x4f, 0x40, 0xe2, 0x4c, 0x5a, 0x6e, 0x8d, 0x5a, 0xae, 0x8f, 0x24, 0x05, 0x96, 0x4f, 0xe3, 0xc2, 0x8c, 0xc3, 0x65, 0x2d, 0xc3, 0xc9, 0x52, 0x3b, 0x39, 0xd4, 0xb0, 0x83, 0xee, 0x65, 0xe9, 0xa0, 0x7c, 0xe8, 0x97, 0xa1, 0x7b, 0x02, 0xb3, 0x54, 0x76, 0x6f, 0x1b, 0x19, 0xc2, 0xb1, 0x22, 0x9a, 0xb4, 0x68, 0xb0, 0x14, 0x8c, 0xa8, 0xfe, 0x89, 0x48, 0x4b, 0x7b, 0x36, 0x00, 0x24, 0x21, 0x80, 0x86, 0xaf, 0x56, 0x40, 0x37, 0x07, 0xbe, 0xc6, 0x5c, 0x52, 0x28, 0x1c, 0xb8, 0xaa, 0x53, 0x46, 0xcb, 0x6f, 0x64, 0x81, 0x43, 0x0e, 0x8e, 0x05, 0x71, 0x46, 0xf3, 0x90, 0x60, 0x7c, 0x57, 0x2b, 0x5b, 0xd8, 0x42, 0x6b, 0x90, 0xef, 0x3a, 0x82, 0x7c, 0xb0, 0xd5, 0x8b, 0xd4, 0x38, 0xd1 }; /* K = 576f8454ff45df954d123bd1384cbe004413c8f85493ed7d6425bfaa */ static const uint8_t ac_dsa_vect133_out[] = { /* R */ 0x09, 0xc6, 0x18, 0x78, 0xa9, 0x91, 0x71, 0x77, 0x05, 0x8e, 0x9d, 0xff, 0x27, 0x10, 0x6b, 0xdc, 0xa7, 0xd0, 0x6c, 0x50, 0x0e, 0x09, 0x09, 0x93, 0x06, 0x66, 0x8c, 0xbf, /* S */ 0x7b, 0x8b, 0x6c, 0x4c, 0x56, 0x15, 0x97, 0x6d, 0x7a, 0x73, 0x5a, 0xc3, 0xe1, 0x84, 0xcd, 0xe9, 0x61, 0x54, 0xff, 0xc8, 0x7b, 0x45, 0x89, 0x24, 0xd4, 0x60, 0x28, 0x95 }; #define ac_dsa_vect134_prime ac_dsa_vect121_prime #define ac_dsa_vect134_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect134_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect134_ptx[] = { /* Msg */ 0x84, 0x09, 0x52, 0x78, 0xf7, 0xf1, 0xd5, 0x78, 0xe7, 0x98, 0x39, 0x9a, 0xf0, 0xbc, 0x9f, 0x46, 0x95, 0xf9, 0x30, 0x2e, 0xa5, 0x97, 0x24, 0x79, 0xad, 0xf9, 0x0c, 0x95, 0xfc, 0x25, 0xd5, 0x9e, 0x57, 0x6d, 0x97, 0xb8, 0x9b, 0x73, 0xde, 0xc6, 0x29, 0xce, 0xf0, 0x5d, 0x61, 0x73, 0xb5, 0x5d, 0x01, 0x5a, 0x3f, 0xb1, 0xd8, 0x19, 0x1a, 0xe5, 0x40, 0xd5, 0x52, 0x40, 0x9b, 0x03, 0xa7, 0xa8, 0xdb, 0x51, 0x1b, 0xad, 0x09, 0x51, 0x89, 0x6d, 0xb9, 0x49, 0xfc, 0xc2, 0x88, 0x70, 0xf9, 0xd1, 0x73, 0x14, 0x73, 0x4c, 0xa6, 0xa3, 0x47, 0x26, 0x83, 0xd0, 0x2f, 0xdc, 0x8d, 0xef, 0xa7, 0xb9, 0xd3, 0x76, 0x2a, 0xe9, 0x35, 0x7c, 0xa2, 0xa6, 0xab, 0x62, 0x3b, 0x04, 0x63, 0x50, 0xfa, 0x21, 0x1d, 0x52, 0x13, 0x78, 0x71, 0x27, 0xd2, 0x71, 0x1c, 0xbd, 0x91, 0x40, 0x5a, 0xbb, 0xe5, 0x0d }; static const uint8_t ac_dsa_vect134_priv_val[] = { /* X */ 0x16, 0x1f, 0xff, 0x26, 0xa7, 0xb9, 0xd7, 0xdd, 0xc1, 0x52, 0x37, 0xed, 0xba, 0xb3, 0xc1, 0xf9, 0x9b, 0x72, 0x94, 0xc7, 0x0f, 0xeb, 0x96, 0xf9, 0x62, 0xdf, 0x89, 0x73 }; static const uint8_t ac_dsa_vect134_pub_val[] = { /* Y */ 0x4b, 0x52, 0xc5, 0x6f, 0xc6, 0x49, 0x22, 0xac, 0x04, 0xee, 0x7a, 0x80, 0xfc, 0x5c, 0x22, 0x40, 0x13, 0xe2, 0xff, 0xda, 0xa1, 0x67, 0x38, 0x12, 0x57, 0xe0, 0x0c, 0x59, 0x7b, 0x43, 0x36, 0x41, 0xce, 0xad, 0xbc, 0x9b, 0x16, 0x56, 0x8b, 0xbc, 0x9c, 0x6d, 0x31, 0xd0, 0x2c, 0x8e, 0x36, 0xdb, 0x2e, 0x39, 0x87, 0x52, 0x0c, 0xe8, 0x59, 0x08, 0x56, 0xbd, 0x4a, 0x84, 0x1b, 0x72, 0x5e, 0xc9, 0x5a, 0x46, 0x59, 0xa6, 0x1a, 0x00, 0x86, 0xf6, 0x6a, 0x6b, 0xfd, 0xbf, 0x1e, 0x4b, 0xf9, 0x2b, 0x44, 0x19, 0x28, 0xcf, 0x31, 0x9f, 0x92, 0x9a, 0x64, 0x28, 0xf5, 0xe3, 0xba, 0x7c, 0x89, 0x12, 0x3d, 0xbb, 0x0c, 0xac, 0xc1, 0x6b, 0xb0, 0xe2, 0xb8, 0x08, 0x54, 0xb0, 0xf6, 0x0d, 0xfa, 0xa9, 0x9f, 0x9c, 0x4c, 0xaa, 0x41, 0x2c, 0x44, 0x3a, 0x07, 0x3b, 0x7a, 0x51, 0x25, 0x91, 0x25, 0xf0, 0x12, 0xd9, 0x8f, 0x0f, 0x66, 0x99, 0xd7, 0x0a, 0xde, 0x66, 0xdf, 0x9c, 0x5e, 0x18, 0x18, 0x56, 0x72, 0xe0, 0xe2, 0x83, 0x0e, 0x05, 0x85, 0x41, 0x3d, 0xa2, 0x95, 0x6c, 0x89, 0xd2, 0x32, 0x0f, 0xaa, 0xc0, 0x3a, 0xaa, 0x83, 0xfe, 0x71, 0x8a, 0x0d, 0x6c, 0xf7, 0xfe, 0xb3, 0x8a, 0x19, 0x4e, 0x43, 0x62, 0xd7, 0xc8, 0x9e, 0x4a, 0x13, 0x96, 0x7e, 0x3a, 0x2d, 0x44, 0x93, 0xf4, 0xec, 0x09, 0xac, 0x2f, 0xc8, 0x9d, 0x56, 0xa5, 0x95, 0x47, 0x2e, 0x60, 0x33, 0x24, 0x48, 0x54, 0x8d, 0x91, 0xcd, 0x6a, 0xac, 0x84, 0xa2, 0xf9, 0xb4, 0xd7, 0xa8, 0x04, 0x62, 0xdc, 0x15, 0x47, 0x79, 0xbe, 0x5f, 0x9e, 0x1f, 0x70, 0x9b, 0x9d, 0x9a, 0x15, 0x62, 0x73, 0x03, 0x3f, 0xe6, 0xe4, 0x84, 0x2e, 0xc4, 0x75, 0x21, 0x96, 0x4d, 0x2e, 0x2f, 0xe2, 0x62, 0x28, 0x0f, 0xdd, 0xec, 0x64, 0x03, 0xe8 }; /* K = 7cbe0c1c29b955fa1fdafcab79c02177c15ec5789a4dd53a6ad29ce8 */ static const uint8_t ac_dsa_vect134_out[] = { /* R */ 0x0c, 0x4d, 0x45, 0x27, 0x81, 0x5a, 0x94, 0xbc, 0x2d, 0x77, 0x06, 0x3e, 0xa6, 0x90, 0x49, 0xbe, 0x6a, 0x2b, 0x3b, 0x3a, 0x3a, 0x0b, 0xad, 0xd5, 0xe6, 0x2a, 0x8f, 0x9a, /* S */ 0x57, 0x87, 0xce, 0xd7, 0x08, 0x1f, 0xad, 0x3f, 0xe1, 0x9a, 0xb5, 0xb9, 0x02, 0x8e, 0x9e, 0x8d, 0xf1, 0x86, 0x39, 0xe4, 0x99, 0x1a, 0xb6, 0xe1, 0xe2, 0x43, 0x41, 0x6e }; #define ac_dsa_vect135_prime ac_dsa_vect121_prime #define ac_dsa_vect135_sub_prime ac_dsa_vect121_sub_prime #define ac_dsa_vect135_base ac_dsa_vect121_base static const uint8_t ac_dsa_vect135_ptx[] = { /* Msg */ 0x30, 0xee, 0xdc, 0x9d, 0x63, 0x0b, 0x63, 0x20, 0x82, 0xc1, 0x96, 0xb9, 0x69, 0xd2, 0x4f, 0x6e, 0xb9, 0xcf, 0x1b, 0x1e, 0x2c, 0x53, 0xd2, 0x44, 0xe8, 0xd8, 0xb5, 0x0a, 0x40, 0x98, 0x2a, 0xb5, 0x3c, 0x4d, 0x57, 0xff, 0x99, 0x5f, 0xa8, 0x45, 0x89, 0x08, 0xa7, 0x43, 0x89, 0x03, 0x82, 0xda, 0x65, 0x13, 0xcf, 0xe9, 0xc1, 0x99, 0x18, 0x24, 0x87, 0x36, 0x15, 0xa8, 0xa1, 0x63, 0x74, 0xa5, 0xe5, 0xdc, 0x2f, 0xab, 0x3f, 0x5c, 0xd2, 0x56, 0x52, 0xec, 0x8a, 0xa3, 0x93, 0x9f, 0x48, 0x84, 0xf7, 0x4a, 0xc7, 0x37, 0x98, 0x9b, 0x6a, 0xc2, 0xe4, 0x3f, 0x45, 0xb8, 0x85, 0x20, 0x6a, 0x31, 0xe7, 0x97, 0xfd, 0x85, 0x76, 0x35, 0x7e, 0x4b, 0x4b, 0xaa, 0x56, 0x62, 0x91, 0x81, 0x5d, 0xac, 0x2f, 0x54, 0x6f, 0x4a, 0xbf, 0x8b, 0xa1, 0xde, 0x11, 0x20, 0xfd, 0x80, 0x42, 0x84, 0xe9, 0x59 }; static const uint8_t ac_dsa_vect135_priv_val[] = { /* X */ 0x02, 0x09, 0xc0, 0x0e, 0xda, 0xd1, 0x05, 0x94, 0xf7, 0xcd, 0x78, 0x78, 0x47, 0x21, 0x69, 0xd5, 0x12, 0xa7, 0xe8, 0xdc, 0x3f, 0xc1, 0xcd, 0x69, 0x28, 0x5e, 0x69, 0xd5 }; static const uint8_t ac_dsa_vect135_pub_val[] = { /* Y */ 0x89, 0x20, 0xf6, 0xab, 0x95, 0xb1, 0xdc, 0x6b, 0x93, 0xe0, 0x8e, 0xad, 0x6b, 0x08, 0x14, 0x1c, 0xc2, 0xa8, 0xf1, 0xff, 0xbb, 0x71, 0xd5, 0xec, 0x59, 0x64, 0xf6, 0xb2, 0xc3, 0xd7, 0x2f, 0xf3, 0xad, 0xad, 0xe5, 0x22, 0x54, 0x37, 0x0f, 0x13, 0x09, 0x90, 0xb4, 0x34, 0x87, 0x77, 0x5c, 0x2f, 0xe0, 0x17, 0xa8, 0x20, 0x0d, 0x81, 0x19, 0x81, 0x8a, 0x15, 0xed, 0x7e, 0x56, 0x36, 0xbf, 0xbf, 0x31, 0x64, 0x04, 0x2f, 0x27, 0xbb, 0x1e, 0xa4, 0x18, 0x69, 0x8b, 0x67, 0x56, 0xf7, 0x5a, 0x8f, 0xda, 0xeb, 0xf0, 0xf6, 0xe5, 0x42, 0x3e, 0x46, 0x02, 0x87, 0xf4, 0xfd, 0xd2, 0xa0, 0xef, 0x30, 0x5e, 0x65, 0x87, 0x41, 0x37, 0x3d, 0x3b, 0xae, 0xcc, 0xe7, 0x90, 0x63, 0x96, 0x2f, 0x88, 0x33, 0x98, 0xc3, 0x14, 0xe3, 0x62, 0x30, 0xba, 0x8c, 0x57, 0x0e, 0x66, 0x7c, 0x30, 0xca, 0xc8, 0xfb, 0xaa, 0x4e, 0x70, 0x20, 0x2a, 0x91, 0x57, 0xd2, 0x27, 0x08, 0xca, 0x60, 0x54, 0x03, 0x06, 0x6d, 0x0f, 0xc8, 0x48, 0x45, 0xbc, 0xe9, 0xb8, 0xc3, 0xb4, 0x1e, 0xc3, 0x2f, 0x40, 0xc8, 0x45, 0xa5, 0x32, 0xfd, 0xff, 0x4d, 0xd1, 0x0c, 0xf6, 0x2a, 0x71, 0x41, 0x21, 0xea, 0x8a, 0x61, 0x88, 0x50, 0x06, 0x45, 0xaf, 0xa9, 0x31, 0x6f, 0xb3, 0xe1, 0x16, 0x28, 0xb1, 0x63, 0xd3, 0x5d, 0x8c, 0xfc, 0xc5, 0x52, 0x72, 0xb6, 0x50, 0xe8, 0x07, 0x2c, 0x23, 0x76, 0x45, 0x60, 0x01, 0x50, 0xbb, 0xb6, 0x6d, 0x39, 0x3c, 0x1c, 0x97, 0x34, 0x5d, 0x58, 0x20, 0xf1, 0x78, 0xdd, 0x40, 0x5b, 0x5d, 0x46, 0xfc, 0x4a, 0xc8, 0xa5, 0xf3, 0x92, 0x9e, 0x6b, 0x16, 0x27, 0x94, 0x40, 0x93, 0x17, 0x8a, 0x8d, 0x65, 0x10, 0x10, 0x59, 0xfb, 0xbb, 0xb7, 0x08, 0x11, 0x74, 0xf2, 0x30, 0x8b, 0x26, 0x53, 0xce }; /* K = 36454e085b6b3dcc7c755b65ff46697b099485abd6ceb00cbf5dceed */ static const uint8_t ac_dsa_vect135_out[] = { /* R */ 0x45, 0x21, 0x2d, 0x1c, 0x8c, 0x12, 0x80, 0x02, 0xfc, 0xb3, 0xce, 0x35, 0x58, 0x3f, 0xf8, 0xd0, 0x83, 0x63, 0x71, 0x1c, 0x15, 0x98, 0x30, 0x7d, 0x9e, 0xc6, 0xa1, 0x08, /* S */ 0x48, 0x58, 0x10, 0x56, 0x49, 0xdb, 0x59, 0x92, 0x76, 0x4d, 0xd3, 0x2b, 0x10, 0x2d, 0x9b, 0x9d, 0x2b, 0xc6, 0xaf, 0x64, 0xc6, 0xa8, 0x15, 0x95, 0x61, 0x1e, 0x3e, 0x20 }; /* [mod = L=2048, N=224, SHA-512] */ static const uint8_t ac_dsa_vect136_prime[] = { /* P */ 0xbf, 0xeb, 0xd0, 0x00, 0xb2, 0xd6, 0xcd, 0x4a, 0xb3, 0x8e, 0xfb, 0xa3, 0x5d, 0xf3, 0x34, 0xdf, 0x72, 0x1d, 0x6c, 0x2f, 0x2b, 0x3d, 0x95, 0x66, 0x79, 0xcb, 0xad, 0x00, 0x9f, 0x3d, 0xfb, 0xd0, 0x02, 0x95, 0x2c, 0xc8, 0x99, 0xcc, 0x23, 0x56, 0xec, 0x87, 0x69, 0xbd, 0x3d, 0x1b, 0xa5, 0xa7, 0x30, 0x23, 0x72, 0x98, 0x88, 0xda, 0x92, 0xca, 0x48, 0xa5, 0xee, 0x94, 0xc9, 0x7f, 0x4f, 0x04, 0xa2, 0xe3, 0xac, 0xb4, 0xf3, 0x3a, 0x2f, 0x0f, 0xb3, 0x78, 0x3c, 0x31, 0xf2, 0xc7, 0x0f, 0xa7, 0xc7, 0x0f, 0x38, 0x21, 0x4a, 0x27, 0xda, 0xde, 0xc8, 0xb1, 0x2e, 0x67, 0x99, 0x6a, 0x9e, 0x85, 0xee, 0x3b, 0xb1, 0x48, 0x80, 0x31, 0x30, 0x14, 0x73, 0x92, 0xdc, 0x52, 0x53, 0xc0, 0x4d, 0x70, 0x63, 0x53, 0x5e, 0x6c, 0xd6, 0x46, 0xbf, 0xb1, 0x86, 0x98, 0x4e, 0x08, 0xb5, 0x8b, 0x74, 0xa7, 0xbe, 0x5b, 0x33, 0x3b, 0xf3, 0x2b, 0x0a, 0xbf, 0xd5, 0x66, 0x53, 0x60, 0xe9, 0xa9, 0x23, 0xa0, 0xc5, 0x28, 0xff, 0x1c, 0x62, 0xc7, 0x25, 0x34, 0x58, 0xf5, 0x67, 0x85, 0x28, 0x71, 0x9d, 0x43, 0x6e, 0x50, 0x14, 0x87, 0x41, 0xf4, 0x5d, 0xc7, 0xdd, 0x2c, 0x6c, 0xac, 0x71, 0xc5, 0x52, 0x31, 0xf1, 0x2a, 0x83, 0xfe, 0xfd, 0x2e, 0xd0, 0xa3, 0x3e, 0xde, 0x1b, 0x8a, 0x51, 0xf5, 0x66, 0xfc, 0xf7, 0x89, 0x06, 0x82, 0xcd, 0xc1, 0x93, 0x1d, 0xc2, 0x07, 0xc9, 0x2b, 0xf2, 0xef, 0x4e, 0x28, 0xab, 0x31, 0x66, 0x1e, 0xeb, 0x77, 0xf1, 0x60, 0x1e, 0xea, 0x94, 0x1c, 0x95, 0x91, 0xf0, 0x38, 0xd3, 0xf0, 0x0d, 0x91, 0x28, 0x57, 0xdb, 0x05, 0xe6, 0x4b, 0x2a, 0xd5, 0x69, 0x32, 0x00, 0x61, 0xc6, 0xf8, 0x63, 0xff, 0x33, 0x54, 0xd8, 0x42, 0xe7, 0xe7, 0xea, 0x71, 0x5a, 0xfe, 0xf8, 0xd1 }; static const uint8_t ac_dsa_vect136_sub_prime[] = { /* Q */ 0xaa, 0x98, 0x6d, 0xf8, 0xa0, 0x64, 0x27, 0x8e, 0x93, 0x63, 0x31, 0x6a, 0x98, 0x30, 0xbc, 0xfa, 0x49, 0x06, 0x56, 0xfa, 0xa6, 0xd5, 0xda, 0xa8, 0x17, 0xd8, 0x79, 0x49 }; static const uint8_t ac_dsa_vect136_base[] = { /* G */ 0x81, 0x95, 0xad, 0x9a, 0x47, 0x8f, 0xd9, 0x85, 0x21, 0x6e, 0xe5, 0x83, 0x68, 0x36, 0x6d, 0x2e, 0xdd, 0x13, 0xc1, 0x2b, 0x3d, 0x62, 0x23, 0x91, 0x69, 0xfa, 0x04, 0x2d, 0x91, 0x15, 0x64, 0x08, 0xb4, 0x83, 0x12, 0x2f, 0x44, 0xed, 0x62, 0x36, 0xb8, 0x30, 0x8a, 0x6c, 0xdb, 0x52, 0xf9, 0xaf, 0x3d, 0xe8, 0x8e, 0xc8, 0x9e, 0x03, 0x9a, 0xfa, 0xd7, 0xda, 0x3a, 0xa6, 0x6c, 0x19, 0x76, 0x04, 0x9a, 0x8e, 0x0a, 0x7d, 0x18, 0xd5, 0x67, 0xba, 0xf9, 0x9f, 0xce, 0xfe, 0x31, 0x5c, 0xad, 0xa0, 0x15, 0x48, 0x38, 0x6b, 0x10, 0xb2, 0x5e, 0x52, 0xf5, 0x2e, 0xd7, 0x8e, 0xb4, 0xd2, 0x80, 0x82, 0xe5, 0xe1, 0xff, 0xee, 0x94, 0x80, 0xc4, 0xfe, 0x2c, 0xc4, 0xaa, 0xfd, 0x1e, 0xfc, 0x9d, 0x4f, 0xd2, 0xcc, 0x6d, 0x15, 0x59, 0x68, 0x93, 0x12, 0x71, 0xef, 0x15, 0xb3, 0x24, 0x0e, 0x7f, 0xb0, 0x43, 0xa8, 0x0c, 0x8f, 0x62, 0x8b, 0xef, 0xe0, 0x9d, 0x64, 0x50, 0x77, 0xc1, 0x02, 0x9d, 0x21, 0xe0, 0xac, 0x8b, 0xf0, 0xba, 0x9c, 0x27, 0x71, 0x4d, 0x1b, 0x58, 0x0e, 0xde, 0x59, 0x4a, 0xa0, 0x1b, 0x3b, 0x76, 0xf6, 0xe7, 0x45, 0xfc, 0x1e, 0xc0, 0x7d, 0xb3, 0x7e, 0x2f, 0xd7, 0xe9, 0x8c, 0x6c, 0x8c, 0x69, 0x15, 0x22, 0x8e, 0x42, 0x2c, 0x30, 0x9d, 0xe9, 0xf5, 0xdb, 0x16, 0x8f, 0x50, 0x24, 0x9d, 0x1b, 0xe1, 0xed, 0x32, 0x98, 0x09, 0x08, 0x08, 0xe2, 0xeb, 0xb8, 0x96, 0xbb, 0x79, 0xb8, 0xc4, 0xcb, 0xf9, 0x4d, 0x4c, 0x20, 0x64, 0xe3, 0x7e, 0x61, 0x2b, 0xa4, 0x44, 0x9d, 0x7a, 0xc2, 0x10, 0xed, 0xde, 0x21, 0x14, 0x16, 0xd6, 0x4b, 0x05, 0x1d, 0xd8, 0x04, 0x6a, 0xb0, 0x41, 0x73, 0x26, 0x65, 0x41, 0x1a, 0x7f, 0x15, 0x4d, 0x31, 0xb3, 0xe1, 0x1a, 0x51, 0xda, 0x7f, 0xc0 }; static const uint8_t ac_dsa_vect136_ptx[] = { /* Msg */ 0xe9, 0xf5, 0x9c, 0x6a, 0x5c, 0xbe, 0x8f, 0x5b, 0x0c, 0xf7, 0x50, 0x08, 0xd0, 0x6a, 0x07, 0x6a, 0x67, 0x39, 0xbd, 0xdd, 0xb3, 0x9b, 0x82, 0x14, 0x3c, 0xd0, 0x39, 0x39, 0xaa, 0x47, 0x38, 0xa2, 0x87, 0xc2, 0xa6, 0xf3, 0x18, 0x29, 0xbb, 0xe1, 0x5f, 0x02, 0xcc, 0x2e, 0xe7, 0xd7, 0x12, 0x2d, 0xbd, 0x13, 0x28, 0x25, 0x97, 0x0d, 0xad, 0xdd, 0x8a, 0x4d, 0x85, 0x1d, 0xa8, 0x6e, 0x7e, 0xdc, 0x89, 0x40, 0xcb, 0x11, 0x88, 0x31, 0x92, 0x18, 0xb8, 0xe0, 0x24, 0x8a, 0x10, 0x3e, 0xae, 0x34, 0xbc, 0x68, 0xd8, 0x5f, 0x5a, 0x32, 0x83, 0x0d, 0x7e, 0x5d, 0xc7, 0x71, 0x8f, 0x74, 0xdb, 0x5e, 0x42, 0x24, 0xc0, 0xde, 0xbe, 0x1e, 0x84, 0x1e, 0x1e, 0xea, 0x1a, 0x88, 0xfe, 0xe0, 0xf8, 0x5d, 0x9f, 0xb0, 0x87, 0xcb, 0xce, 0xe5, 0x5f, 0x86, 0x03, 0x7a, 0x64, 0x6e, 0x38, 0x34, 0x6d, 0x2b }; static const uint8_t ac_dsa_vect136_priv_val[] = { /* X */ 0x6a, 0x5b, 0x4f, 0xfc, 0x44, 0x23, 0x8d, 0x18, 0x52, 0xfb, 0x9b, 0x74, 0xe4, 0xc1, 0x66, 0x1b, 0xe8, 0x59, 0x84, 0x04, 0x3c, 0xfe, 0xee, 0x02, 0x3f, 0x57, 0xca, 0xc6 }; static const uint8_t ac_dsa_vect136_pub_val[] = { /* Y */ 0xaf, 0x67, 0x21, 0xbf, 0x75, 0xde, 0xc6, 0xa1, 0xb7, 0x6a, 0xd3, 0x5c, 0xa3, 0x75, 0x0d, 0xef, 0x31, 0x11, 0x7c, 0x5b, 0x44, 0x1c, 0x15, 0xa3, 0x06, 0x83, 0x5a, 0x1d, 0xb7, 0x4c, 0x00, 0x3b, 0x86, 0xae, 0x90, 0x99, 0xeb, 0xfb, 0x74, 0x5b, 0x0a, 0xa9, 0xcb, 0x00, 0x0c, 0xf4, 0x3f, 0xb0, 0x21, 0x51, 0x3b, 0x8f, 0x19, 0x7b, 0xc8, 0x65, 0xb2, 0x2b, 0xf9, 0x49, 0xb4, 0x91, 0x80, 0x9a, 0xd7, 0x52, 0xff, 0xc1, 0xca, 0x8e, 0x54, 0xbe, 0xa1, 0x6d, 0xc7, 0xf5, 0x39, 0xe4, 0xc5, 0x5f, 0xb7, 0x0a, 0x77, 0x43, 0xdd, 0x28, 0xf2, 0x62, 0xf6, 0x0e, 0xf0, 0xf2, 0xfc, 0xaa, 0xc2, 0x9e, 0x80, 0x21, 0xa7, 0x93, 0x8c, 0x18, 0xff, 0xe0, 0x30, 0x75, 0xd0, 0xb7, 0xe0, 0xa2, 0xb4, 0xdc, 0xab, 0xe4, 0x6e, 0xd1, 0x95, 0x3d, 0x33, 0xe3, 0x7f, 0x11, 0x3a, 0xf5, 0x19, 0xab, 0x0b, 0xf0, 0xb6, 0x18, 0x6c, 0x12, 0xb5, 0xf6, 0x48, 0x84, 0x37, 0xf5, 0x19, 0x30, 0x96, 0xe2, 0xfd, 0x6a, 0x6a, 0x18, 0x35, 0x60, 0x47, 0x94, 0xc6, 0x6b, 0x42, 0xae, 0x52, 0x65, 0xc1, 0xcf, 0x1c, 0xb5, 0x3a, 0xe8, 0x49, 0x97, 0x97, 0x5e, 0x03, 0x18, 0xa9, 0x3c, 0xe4, 0x1e, 0x39, 0x02, 0xe4, 0xef, 0x54, 0xde, 0x3c, 0x56, 0x55, 0x5b, 0xd1, 0x94, 0x91, 0xac, 0xd5, 0x3f, 0x3e, 0x57, 0x46, 0x4e, 0x1f, 0x46, 0x03, 0x89, 0xdb, 0xc5, 0xfa, 0x80, 0x64, 0x8f, 0xa5, 0xa5, 0xa0, 0xf2, 0x95, 0x6e, 0x9e, 0xc3, 0xb8, 0xdc, 0x44, 0x1b, 0x53, 0x5c, 0x64, 0x1c, 0x36, 0x2e, 0xed, 0x77, 0x0d, 0xa8, 0x28, 0x64, 0x9b, 0xfd, 0x14, 0x64, 0x72, 0xb0, 0xf4, 0x6a, 0x4c, 0x06, 0x4e, 0x45, 0x9f, 0x88, 0xbf, 0xf9, 0x0d, 0xed, 0xe7, 0xec, 0x56, 0x17, 0x7a, 0x9a, 0x71, 0xd1, 0x67, 0x94, 0x87, 0x12 }; /* K = 9ced89ea5050982222830efef26e7394f5ab7d837d4549962d285fae */ static const uint8_t ac_dsa_vect136_out[] = { /* R */ 0x9d, 0xa9, 0x96, 0x65, 0x00, 0xde, 0x9d, 0x3b, 0x6b, 0x7f, 0x44, 0x1c, 0xa5, 0x50, 0x23, 0x3f, 0xc4, 0x50, 0x94, 0x4b, 0xc5, 0x07, 0xe0, 0x1c, 0xd4, 0xac, 0xb0, 0x30, /* S */ 0x2d, 0x72, 0xf1, 0xf6, 0x68, 0x1e, 0x86, 0x7f, 0x7d, 0x8b, 0xea, 0xeb, 0xeb, 0xa4, 0xbc, 0x5b, 0x23, 0x28, 0x76, 0x04, 0xa6, 0x4c, 0xfe, 0xe1, 0xc1, 0x64, 0x59, 0x5a }; #define ac_dsa_vect137_prime ac_dsa_vect136_prime #define ac_dsa_vect137_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect137_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect137_ptx[] = { /* Msg */ 0x97, 0x1d, 0x16, 0xd1, 0x11, 0xc9, 0x6d, 0xe0, 0xf7, 0x09, 0x8b, 0x25, 0x6a, 0xf2, 0x13, 0xf4, 0x47, 0x5a, 0xef, 0x31, 0x00, 0x7e, 0x12, 0xe2, 0x97, 0x4c, 0x5f, 0x64, 0xb2, 0xf3, 0x35, 0xe0, 0x18, 0x3c, 0x19, 0x6c, 0x33, 0xd5, 0x0f, 0x64, 0x45, 0xc5, 0xf6, 0x14, 0x64, 0x95, 0x49, 0x77, 0x0b, 0x18, 0x74, 0xdd, 0x07, 0x56, 0xa9, 0xa8, 0xe3, 0x99, 0x71, 0xdf, 0xec, 0xc3, 0xf2, 0x67, 0xeb, 0xcc, 0x1f, 0x53, 0x01, 0x70, 0x3f, 0x88, 0x74, 0x3b, 0x0f, 0x37, 0x64, 0x82, 0xcf, 0xc0, 0x6d, 0x59, 0x48, 0xbd, 0x79, 0x26, 0xd9, 0x6e, 0xc4, 0xd7, 0x31, 0xa4, 0x4b, 0x0c, 0x0e, 0xee, 0x5e, 0x85, 0xda, 0x26, 0x68, 0x72, 0x65, 0xde, 0x5a, 0x66, 0xcb, 0x1a, 0x73, 0xa7, 0xe4, 0xf3, 0x23, 0x6f, 0x60, 0x64, 0x7b, 0xee, 0x5c, 0x16, 0x33, 0x40, 0xe1, 0x95, 0x05, 0x57, 0x7c, 0xf6 }; static const uint8_t ac_dsa_vect137_priv_val[] = { /* X */ 0x90, 0x53, 0xec, 0x8a, 0xb1, 0xf9, 0x70, 0x0c, 0x2a, 0xb5, 0x92, 0x59, 0xbf, 0x2e, 0x07, 0x89, 0x29, 0x04, 0xf0, 0x3c, 0x84, 0x4c, 0xd5, 0x8a, 0x7f, 0xf5, 0x9c, 0x79 }; static const uint8_t ac_dsa_vect137_pub_val[] = { /* Y */ 0x29, 0x05, 0x17, 0x29, 0x7e, 0x42, 0x49, 0xfc, 0x32, 0x12, 0xba, 0xd6, 0x72, 0x69, 0xe0, 0x32, 0x81, 0x8d, 0x76, 0x0b, 0x0e, 0xe0, 0x52, 0x5d, 0xc5, 0xa1, 0x7c, 0x97, 0x11, 0x6e, 0xe2, 0x9e, 0xb3, 0xb4, 0x50, 0xb4, 0x1d, 0x15, 0xce, 0xa4, 0x05, 0xd5, 0xe9, 0x83, 0xa8, 0x55, 0x81, 0x84, 0x06, 0x7f, 0x42, 0x4a, 0xcc, 0x49, 0x86, 0x76, 0x41, 0x5e, 0x17, 0x50, 0x6a, 0x35, 0x1c, 0x12, 0x4b, 0x54, 0x04, 0xf1, 0xd1, 0x71, 0x53, 0x27, 0x26, 0x19, 0xdf, 0x71, 0x3c, 0xe3, 0x4d, 0x03, 0xf1, 0xf9, 0xee, 0x28, 0x59, 0x2f, 0x22, 0xf8, 0x29, 0xa3, 0x19, 0x93, 0xb1, 0x06, 0xc7, 0x85, 0xfa, 0x6d, 0xbe, 0x57, 0xd0, 0x04, 0x9c, 0x81, 0x5d, 0xb5, 0xee, 0x2d, 0xfe, 0x94, 0x8d, 0xde, 0xdd, 0x1a, 0x5e, 0x2c, 0xd2, 0x34, 0x6c, 0xf2, 0xf6, 0x6f, 0x04, 0xfb, 0xad, 0x61, 0x9c, 0xd9, 0x83, 0xa1, 0xb0, 0x69, 0xb4, 0x71, 0xef, 0x9a, 0xdb, 0x4d, 0xf6, 0xce, 0xae, 0xa2, 0x3d, 0x09, 0xf0, 0xa5, 0x48, 0xc3, 0xc7, 0x20, 0x96, 0x34, 0xc8, 0xa0, 0x5e, 0x58, 0x97, 0x44, 0x59, 0x06, 0xde, 0xa0, 0x8a, 0x52, 0xe4, 0x07, 0x4b, 0xe2, 0x2d, 0x84, 0x85, 0xf2, 0x0e, 0xaa, 0xea, 0xdb, 0xaa, 0xb3, 0x97, 0x19, 0x9b, 0x06, 0x7a, 0xa8, 0x60, 0x05, 0x69, 0x91, 0xee, 0x08, 0x84, 0x80, 0xb4, 0x92, 0x12, 0x67, 0xa6, 0x98, 0xa8, 0xf7, 0xa0, 0x37, 0x77, 0xf5, 0x6b, 0xac, 0x84, 0xe5, 0x09, 0x03, 0xe8, 0x8d, 0x07, 0x26, 0x1f, 0x24, 0xd0, 0xa4, 0xf3, 0x17, 0x12, 0x8e, 0x01, 0xfe, 0x8a, 0x92, 0x24, 0xf1, 0x22, 0x93, 0x94, 0x9c, 0xb6, 0xc3, 0xf0, 0x95, 0xaf, 0xd1, 0x9a, 0xec, 0xb1, 0x6b, 0x20, 0x9a, 0x99, 0x48, 0x7d, 0xcc, 0x2a, 0x1b, 0x83, 0xc4, 0x9d, 0x75, 0xe3, 0x51 }; /* K = 901632e0b8ffea7efebe2fc9ea0d1a52442817fe1e1b5455bd39a687 */ static const uint8_t ac_dsa_vect137_out[] = { /* R */ 0x1f, 0x44, 0xf6, 0xea, 0xc2, 0x18, 0x23, 0x6a, 0x1d, 0x99, 0xcf, 0x76, 0x25, 0xab, 0xcf, 0x5c, 0x96, 0x4b, 0x0a, 0x0c, 0x5d, 0x88, 0xb8, 0xd0, 0x5d, 0x74, 0xa3, 0xc0, /* S */ 0x71, 0x01, 0x5c, 0xbe, 0x86, 0x22, 0xd2, 0xa3, 0x4f, 0xbb, 0x5e, 0x7c, 0xca, 0x8c, 0x59, 0xe8, 0x28, 0xad, 0xee, 0x71, 0xf5, 0x05, 0x24, 0x48, 0x2d, 0x9e, 0x79, 0x04 }; #define ac_dsa_vect138_prime ac_dsa_vect136_prime #define ac_dsa_vect138_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect138_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect138_ptx[] = { /* Msg */ 0x08, 0xea, 0x09, 0xfa, 0x5e, 0xfd, 0xe2, 0x15, 0xbd, 0x8b, 0x3c, 0x4d, 0x6a, 0x9c, 0x90, 0xee, 0x93, 0x87, 0xff, 0xb7, 0xbd, 0x65, 0xbe, 0xcd, 0xb8, 0x8b, 0x40, 0x13, 0x2c, 0x63, 0x84, 0x10, 0x6a, 0xa6, 0x19, 0xb7, 0xc6, 0x6c, 0xa9, 0x20, 0x34, 0xd2, 0x84, 0x60, 0x85, 0x93, 0x86, 0x4c, 0xe6, 0xb9, 0x28, 0x77, 0x11, 0x2a, 0xa1, 0x39, 0x24, 0x0c, 0xb4, 0x4b, 0x38, 0x8f, 0xe6, 0x8a, 0x8f, 0xe0, 0x50, 0x1c, 0xa5, 0x84, 0xf6, 0xa2, 0xde, 0x27, 0xc0, 0xfb, 0x65, 0x8e, 0x72, 0xbb, 0x13, 0xfd, 0xdb, 0x8d, 0x03, 0x9a, 0x6b, 0xf8, 0x5d, 0x63, 0xa6, 0xc0, 0x73, 0xb2, 0x66, 0x80, 0x13, 0xce, 0x8f, 0xe5, 0x89, 0xa0, 0x15, 0x0e, 0x46, 0xd5, 0xb1, 0xd9, 0xb0, 0xcb, 0xb5, 0xa1, 0x4c, 0x10, 0x0a, 0xe4, 0xb2, 0x0d, 0x6c, 0xe8, 0x1a, 0x98, 0x7a, 0x50, 0xa9, 0x49, 0xf4, 0x34 }; static const uint8_t ac_dsa_vect138_priv_val[] = { /* X */ 0xa2, 0xcd, 0xf2, 0x51, 0x5c, 0xb0, 0x98, 0x55, 0x9f, 0xa1, 0x3c, 0xb7, 0x0b, 0x6a, 0x89, 0x7e, 0x89, 0xdf, 0x12, 0x0a, 0x97, 0x10, 0x64, 0xbb, 0x37, 0x79, 0x88, 0xee }; static const uint8_t ac_dsa_vect138_pub_val[] = { /* Y */ 0xb3, 0xe2, 0xb7, 0xe0, 0x64, 0x17, 0x21, 0xd6, 0x96, 0x16, 0x67, 0x95, 0x96, 0xcc, 0x75, 0x09, 0x1f, 0xad, 0xe2, 0xda, 0x05, 0x58, 0xe3, 0x10, 0xb8, 0xd1, 0x4d, 0xb0, 0xf4, 0x68, 0x6f, 0x1f, 0xed, 0x48, 0xd0, 0xfb, 0x7f, 0x0b, 0x3b, 0x27, 0xbf, 0x6e, 0x19, 0x81, 0xea, 0xfa, 0x77, 0x37, 0xa3, 0xe6, 0x51, 0x82, 0x8d, 0x1f, 0xcb, 0xf8, 0x83, 0x87, 0xd0, 0x6f, 0x78, 0x40, 0x4a, 0x7a, 0xfa, 0xea, 0xaf, 0x8f, 0xae, 0x18, 0x93, 0xbe, 0xa3, 0xa0, 0x9a, 0x11, 0x88, 0x93, 0x93, 0x7a, 0xe2, 0xa8, 0xfd, 0xef, 0x33, 0x20, 0x94, 0x2a, 0x15, 0x84, 0x63, 0xde, 0x4f, 0xdd, 0xc1, 0x19, 0x87, 0xf2, 0x3f, 0xee, 0x96, 0x33, 0xe0, 0x6a, 0xc2, 0x39, 0xc0, 0x66, 0x10, 0xbc, 0x45, 0x31, 0x9a, 0xba, 0xfe, 0x51, 0x7c, 0xe4, 0xae, 0xae, 0x62, 0x47, 0xea, 0x78, 0x9d, 0x7d, 0xa6, 0x0d, 0x3e, 0xed, 0xdf, 0xdc, 0x4b, 0x23, 0x2b, 0x4d, 0x7a, 0x06, 0x9b, 0xcc, 0x0e, 0xac, 0x7b, 0x99, 0xfc, 0x08, 0x8f, 0xb7, 0xec, 0x19, 0x46, 0x03, 0x4a, 0x98, 0xd7, 0xe6, 0x9c, 0xab, 0x0c, 0xb2, 0xb0, 0x6b, 0x3d, 0x9d, 0xea, 0xcd, 0x1b, 0x43, 0x3e, 0xbe, 0x94, 0xf5, 0x47, 0xa3, 0x22, 0x89, 0x5c, 0xca, 0x9b, 0x0e, 0xd3, 0x19, 0xb1, 0xd4, 0x58, 0xc3, 0xbf, 0xb2, 0x60, 0xbe, 0xb6, 0x41, 0xa5, 0x34, 0x5d, 0xbe, 0x3d, 0x01, 0xce, 0x80, 0x0e, 0xc2, 0xc6, 0xbd, 0x43, 0x0c, 0xe3, 0xe3, 0xf5, 0xf7, 0x8f, 0xca, 0xbf, 0x91, 0xa2, 0x96, 0x58, 0x66, 0x1c, 0x57, 0x3b, 0x9f, 0x6f, 0xd3, 0x81, 0x2e, 0x56, 0x0d, 0x88, 0x8b, 0x6c, 0xdf, 0x3d, 0x57, 0x67, 0x3c, 0x16, 0x30, 0xe0, 0x0c, 0xa8, 0x41, 0xee, 0x99, 0x49, 0x58, 0xb2, 0x50, 0xda, 0xfb, 0xc3, 0xe8, 0x3b, 0xcb, 0x8b, 0xe5 }; /* K = 077b3adce42ba0622772eaaa8cabd16107c92f7a134c715a4dda5ebd */ static const uint8_t ac_dsa_vect138_out[] = { /* R */ 0x6c, 0x03, 0x63, 0x7d, 0x25, 0x3a, 0x8d, 0xcd, 0x09, 0x07, 0xd6, 0xde, 0x93, 0x92, 0x6b, 0xdb, 0x3e, 0x1e, 0xa3, 0x13, 0x5a, 0x70, 0x9d, 0xa2, 0x30, 0x9a, 0x8d, 0xa6, /* S */ 0x23, 0x6e, 0x51, 0x63, 0xf2, 0xc2, 0xeb, 0xe0, 0xec, 0xcd, 0xbd, 0x33, 0x51, 0xe4, 0x28, 0x55, 0x31, 0xa4, 0xf5, 0x3e, 0x45, 0x28, 0x4e, 0x41, 0xdb, 0x37, 0xe2, 0x66 }; #define ac_dsa_vect139_prime ac_dsa_vect136_prime #define ac_dsa_vect139_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect139_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect139_ptx[] = { /* Msg */ 0x95, 0x7c, 0xef, 0x16, 0x3b, 0x16, 0xd8, 0x07, 0x3d, 0x5d, 0x3f, 0xe1, 0x58, 0xfa, 0x0c, 0x73, 0x38, 0xbd, 0x10, 0x7c, 0x6a, 0x65, 0x3c, 0xb0, 0xf1, 0x1e, 0xbe, 0x41, 0x40, 0x26, 0x07, 0xb8, 0x22, 0xab, 0xe3, 0x0e, 0x36, 0xca, 0x9e, 0xe4, 0xc9, 0xde, 0x00, 0xcf, 0x72, 0xdb, 0x97, 0xf5, 0x7d, 0x78, 0xf3, 0xdb, 0x49, 0xa8, 0xe1, 0x09, 0x32, 0x85, 0x56, 0x3c, 0x68, 0xb0, 0xf4, 0xe1, 0x24, 0x83, 0x0b, 0x9f, 0xeb, 0xfa, 0x3e, 0x75, 0xce, 0x2e, 0xa5, 0x9c, 0xba, 0x2c, 0xc6, 0xd7, 0x1e, 0x90, 0x8b, 0x5e, 0x6d, 0x8f, 0x46, 0x39, 0x54, 0x92, 0x2b, 0x82, 0xbb, 0x55, 0xa6, 0x9f, 0xb2, 0xff, 0x14, 0x3f, 0xfc, 0xae, 0x6b, 0x56, 0x56, 0x14, 0x3c, 0x8b, 0x6c, 0xc2, 0x4f, 0x57, 0xb1, 0x7c, 0xfb, 0x02, 0x0f, 0x6e, 0x15, 0xbd, 0xc5, 0xf2, 0x54, 0x36, 0xd0, 0x7b, 0x7f, 0x8a }; static const uint8_t ac_dsa_vect139_priv_val[] = { /* X */ 0x15, 0xea, 0x86, 0xb9, 0x73, 0xef, 0x14, 0x6f, 0x03, 0xcc, 0x70, 0x1b, 0x17, 0xb5, 0x89, 0xb0, 0xff, 0xdd, 0x31, 0x8b, 0x64, 0x82, 0x7d, 0x49, 0xee, 0x3c, 0x00, 0x44 }; static const uint8_t ac_dsa_vect139_pub_val[] = { /* Y */ 0x3f, 0xcb, 0x8e, 0x44, 0xd6, 0x88, 0x0f, 0x9e, 0xeb, 0xae, 0xdf, 0xb7, 0x59, 0x94, 0x60, 0x5c, 0x9e, 0xc0, 0x01, 0xf0, 0x59, 0x5a, 0xeb, 0x5f, 0x2b, 0xca, 0xf6, 0xb3, 0x98, 0x7b, 0xc2, 0x8a, 0x7c, 0xa9, 0x05, 0xe1, 0xfe, 0xd7, 0xe3, 0xc7, 0x15, 0x40, 0x1b, 0x5c, 0x60, 0x8d, 0x12, 0x07, 0x69, 0x38, 0xa1, 0x80, 0x13, 0x47, 0x3d, 0x8a, 0x43, 0x32, 0x77, 0xfd, 0x9c, 0xe5, 0xa5, 0xca, 0xe0, 0x38, 0x28, 0x1e, 0x76, 0x8f, 0xf9, 0x09, 0xae, 0xbe, 0x4d, 0x25, 0x7d, 0xcb, 0x5d, 0x93, 0x48, 0x80, 0x22, 0xd0, 0x7d, 0x4c, 0x28, 0x62, 0xaf, 0xb2, 0xbf, 0x8a, 0x2b, 0x1e, 0x97, 0x4a, 0x8e, 0x7b, 0x6e, 0x17, 0x6b, 0x1b, 0x0b, 0x7a, 0xd6, 0xf6, 0x3b, 0xda, 0x1b, 0x71, 0x42, 0xe4, 0x6f, 0x50, 0x4d, 0xcc, 0xcc, 0xa7, 0xd1, 0xe2, 0xe7, 0x66, 0x27, 0x58, 0xf7, 0x60, 0xe6, 0x24, 0xe5, 0x95, 0x28, 0xc5, 0xa0, 0xc9, 0x56, 0x3e, 0xd5, 0x17, 0xc6, 0x91, 0xfb, 0xa2, 0xab, 0xf6, 0x68, 0x99, 0x24, 0x11, 0x78, 0x22, 0x3b, 0xa2, 0x00, 0x13, 0xed, 0x0a, 0xb2, 0x1f, 0x91, 0xf3, 0xe6, 0xbe, 0xf7, 0x55, 0xc8, 0x10, 0x0c, 0x51, 0xee, 0x94, 0x7b, 0x7a, 0x9b, 0xa3, 0x85, 0x70, 0xf8, 0x80, 0xb5, 0xe4, 0x2f, 0x24, 0xb7, 0x2d, 0x53, 0x21, 0x13, 0x2e, 0x03, 0x1b, 0x98, 0x5a, 0x0d, 0xb8, 0x25, 0xbf, 0x3b, 0xb0, 0x0a, 0x77, 0x71, 0xa0, 0x30, 0x07, 0x38, 0x7e, 0x03, 0xce, 0x02, 0x0f, 0xc3, 0x58, 0xe6, 0x5e, 0xd3, 0xde, 0x8d, 0x84, 0x7f, 0x5b, 0xe6, 0x07, 0x20, 0x91, 0x7c, 0x06, 0x16, 0xa4, 0x50, 0xaa, 0x34, 0x1a, 0xe0, 0x0a, 0xbe, 0x0a, 0x80, 0x9c, 0x38, 0xe9, 0x73, 0x14, 0xf3, 0x03, 0xfe, 0x9b, 0x0c, 0x6c, 0xde, 0x44, 0x6d, 0x02, 0x17, 0xcc, 0x4e, 0xab }; /* K = 9af96c995f0b7b8283e2ea288e3c3a6f751a56b38041297e2bc34cd7 */ static const uint8_t ac_dsa_vect139_out[] = { /* R */ 0x15, 0x03, 0x62, 0xda, 0x79, 0x27, 0x01, 0x69, 0x4e, 0x23, 0xf0, 0xb0, 0xa9, 0xb7, 0x03, 0x54, 0x37, 0xcc, 0x8f, 0x4f, 0xaa, 0x45, 0xc6, 0xdf, 0x8f, 0x79, 0x82, 0xfb, /* S */ 0x6d, 0xf4, 0x32, 0x1c, 0x61, 0x73, 0x87, 0x43, 0xa9, 0xfe, 0x78, 0xec, 0x76, 0xb4, 0x95, 0x26, 0x92, 0xaa, 0xa3, 0x72, 0xd1, 0xc8, 0x53, 0x0f, 0xba, 0x0f, 0xcd, 0xec }; #define ac_dsa_vect140_prime ac_dsa_vect136_prime #define ac_dsa_vect140_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect140_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect140_ptx[] = { /* Msg */ 0x20, 0x4d, 0x9c, 0xde, 0x24, 0xa2, 0xf0, 0xde, 0x02, 0xaf, 0xf0, 0x20, 0xf6, 0x36, 0x3f, 0xd6, 0x8f, 0x70, 0x42, 0x0d, 0xc1, 0xa9, 0xb5, 0x13, 0x82, 0x16, 0x20, 0x13, 0x63, 0xf8, 0x32, 0xda, 0x0a, 0xa8, 0x01, 0x86, 0x5a, 0x75, 0xa2, 0x43, 0x42, 0x7d, 0x9d, 0x6c, 0x78, 0xdc, 0x5e, 0x60, 0x41, 0xb2, 0x7d, 0x03, 0x36, 0x60, 0xe1, 0xe4, 0x05, 0xab, 0xe1, 0xbe, 0x27, 0xc9, 0x09, 0x99, 0x4b, 0xd6, 0xfb, 0x57, 0x18, 0x0c, 0x3d, 0x6b, 0x49, 0x8c, 0xe8, 0x79, 0x3b, 0xee, 0x8e, 0xcf, 0x51, 0xe0, 0x6b, 0x96, 0x41, 0x1d, 0x00, 0x99, 0x62, 0x09, 0xf4, 0x4a, 0x38, 0x09, 0x26, 0xc7, 0xb1, 0x95, 0xe8, 0x4e, 0x78, 0xf0, 0x1f, 0xe0, 0x2e, 0x0b, 0xc7, 0x03, 0x2c, 0xa4, 0x62, 0xa5, 0x18, 0x26, 0x83, 0x47, 0x52, 0x22, 0xf9, 0xdd, 0x8f, 0x3a, 0xde, 0x1a, 0xb8, 0xfe, 0xa3, 0x18 }; static const uint8_t ac_dsa_vect140_priv_val[] = { /* X */ 0x52, 0x4a, 0x63, 0xcc, 0x5a, 0xca, 0xda, 0x85, 0x57, 0x60, 0x9a, 0x5f, 0x0d, 0x88, 0xfd, 0x3e, 0x9c, 0x6e, 0x63, 0x71, 0x97, 0x04, 0xcd, 0x8b, 0xab, 0x8f, 0xe3, 0x01 }; static const uint8_t ac_dsa_vect140_pub_val[] = { /* Y */ 0x99, 0xb8, 0xfc, 0x6e, 0x64, 0xcc, 0xe2, 0x62, 0xed, 0x74, 0x1c, 0x30, 0xcd, 0x58, 0x69, 0x86, 0xaa, 0x2e, 0x8f, 0x63, 0x71, 0xb8, 0x48, 0xa2, 0x61, 0x7c, 0x61, 0x98, 0x97, 0xde, 0x23, 0x72, 0x6b, 0xb5, 0x45, 0x36, 0xec, 0xe4, 0xb4, 0x60, 0xcc, 0x7f, 0x1f, 0x39, 0xe0, 0xc1, 0x84, 0xeb, 0x19, 0x29, 0x1e, 0x93, 0x0d, 0xc9, 0x14, 0x0e, 0x4b, 0x77, 0x35, 0x54, 0x1e, 0xee, 0xf8, 0xca, 0x8e, 0xbc, 0x81, 0x79, 0x0f, 0xed, 0x37, 0xa5, 0xf0, 0x8e, 0x9d, 0xa9, 0xab, 0xc6, 0x6a, 0x3a, 0x2e, 0x90, 0x99, 0x02, 0xa4, 0x21, 0x21, 0x06, 0x92, 0x7d, 0x08, 0xab, 0xec, 0x01, 0xf2, 0x7c, 0x60, 0x56, 0xb6, 0xe0, 0x38, 0x11, 0x50, 0xbd, 0x74, 0x2d, 0x40, 0x9f, 0x68, 0x10, 0xfa, 0x58, 0x18, 0xff, 0xcb, 0x3f, 0x18, 0x2a, 0xdf, 0x89, 0x4b, 0xa7, 0xf8, 0x06, 0x78, 0xce, 0x88, 0x3c, 0x10, 0x89, 0xa6, 0xae, 0x71, 0xdb, 0x3a, 0x11, 0x5c, 0x38, 0x6d, 0xd9, 0x15, 0x3f, 0x41, 0x91, 0xfc, 0x36, 0x54, 0x61, 0xac, 0x86, 0x83, 0x8e, 0xcf, 0x2f, 0x3f, 0x81, 0xcc, 0xf2, 0x83, 0x29, 0x7a, 0x6f, 0xbc, 0x64, 0x4f, 0x52, 0xaa, 0xe6, 0x64, 0x90, 0x1a, 0xe3, 0x0c, 0x96, 0xfe, 0x4d, 0xf9, 0x30, 0xcf, 0x1a, 0x41, 0x75, 0x72, 0x41, 0xcc, 0x4d, 0x9a, 0xdf, 0xcc, 0xdd, 0x9a, 0x6b, 0xd5, 0x00, 0x4b, 0x05, 0x75, 0x74, 0x43, 0x59, 0x88, 0x56, 0x40, 0x0d, 0xd7, 0x71, 0xdc, 0x08, 0x90, 0x95, 0xc7, 0xdc, 0xde, 0x82, 0xf7, 0x21, 0xf9, 0x86, 0xaf, 0x63, 0x66, 0x38, 0xee, 0xa2, 0xc7, 0x17, 0x70, 0x85, 0x6c, 0x2b, 0xa8, 0x03, 0x15, 0xe8, 0x69, 0x61, 0x42, 0xa1, 0x1e, 0x51, 0xeb, 0xd7, 0x55, 0x9e, 0x9d, 0xa6, 0xa0, 0x0b, 0xe3, 0xf9, 0xf3, 0x8c, 0x61, 0x4e, 0xf2, 0x07 }; /* K = 028091483753f5643b61e4093a7e0a5135d71c5fa318d6e8bb0efc66 */ static const uint8_t ac_dsa_vect140_out[] = { /* R */ 0x9c, 0x02, 0x33, 0x31, 0x75, 0x1c, 0x79, 0xd5, 0xda, 0x35, 0x5b, 0xb5, 0x8e, 0x2b, 0xbe, 0x2e, 0x97, 0x3e, 0x3e, 0x4b, 0x4f, 0x52, 0x74, 0x3c, 0xe1, 0xf1, 0xee, 0xc2, /* S */ 0x96, 0xad, 0x0e, 0x8c, 0xa9, 0x06, 0x27, 0xfb, 0x7a, 0xc4, 0x54, 0x0c, 0x9b, 0x58, 0xa0, 0x16, 0xee, 0x6c, 0x4e, 0x0a, 0x6f, 0x0a, 0xa1, 0xe7, 0xde, 0xf8, 0x1a, 0x51 }; #define ac_dsa_vect141_prime ac_dsa_vect136_prime #define ac_dsa_vect141_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect141_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect141_ptx[] = { /* Msg */ 0x1e, 0x4e, 0x58, 0xaf, 0xb3, 0x4c, 0x5d, 0x6f, 0x64, 0x5a, 0x82, 0x64, 0x5b, 0xe3, 0x58, 0xa2, 0xe2, 0x28, 0xcc, 0x7b, 0x9c, 0x23, 0xdd, 0x7f, 0x3a, 0xa7, 0x95, 0x95, 0x81, 0x4d, 0x05, 0x4b, 0x92, 0x3b, 0x9c, 0xbc, 0x6c, 0x9e, 0x6c, 0x6f, 0x94, 0x84, 0x8c, 0x1a, 0x4d, 0x21, 0x56, 0x79, 0x02, 0x3a, 0x96, 0x97, 0x6a, 0x44, 0xe9, 0xb5, 0x91, 0x36, 0x24, 0x1f, 0xdf, 0x26, 0xf8, 0xf7, 0x1f, 0xe5, 0xa9, 0xbf, 0x36, 0x6e, 0x49, 0x12, 0xb5, 0x93, 0x1e, 0x1c, 0x8f, 0x63, 0xc3, 0x7f, 0xae, 0x2b, 0xf1, 0xd5, 0x5b, 0xa3, 0x94, 0x3a, 0x65, 0x0b, 0xb4, 0x63, 0xcd, 0xed, 0x9a, 0x7b, 0x06, 0x2a, 0xe5, 0x5a, 0xa5, 0x7d, 0x9c, 0x5c, 0xee, 0xd3, 0x23, 0xfd, 0x9a, 0x75, 0x55, 0xe4, 0x8b, 0x83, 0x4d, 0x3a, 0xd4, 0x44, 0x1c, 0x35, 0xd9, 0xe0, 0x7c, 0x7c, 0x6e, 0x4d, 0x5d, 0x0f }; static const uint8_t ac_dsa_vect141_priv_val[] = { /* X */ 0x33, 0xb2, 0x5c, 0x6b, 0xbb, 0xf8, 0x16, 0xad, 0xda, 0xd0, 0x5e, 0x48, 0xb7, 0x2c, 0xa5, 0x60, 0xc5, 0x19, 0x12, 0x14, 0xd9, 0x03, 0xa9, 0x78, 0xb6, 0x70, 0x8a, 0x30 }; static const uint8_t ac_dsa_vect141_pub_val[] = { /* Y */ 0xb4, 0xde, 0xa0, 0xd5, 0xb6, 0x71, 0xcc, 0x81, 0x53, 0x82, 0xd0, 0xec, 0x6d, 0xce, 0x66, 0x1c, 0x30, 0xff, 0x93, 0x71, 0x9d, 0xc7, 0xf5, 0x6e, 0x7e, 0x61, 0xdf, 0x6e, 0xb6, 0xa3, 0x20, 0x7a, 0x05, 0x61, 0x79, 0x38, 0xc8, 0x74, 0xbc, 0x3a, 0xb0, 0x93, 0xbc, 0xdb, 0xbc, 0x98, 0x3a, 0x4b, 0x0b, 0x58, 0x7d, 0x60, 0xfd, 0xeb, 0x7b, 0x87, 0xf7, 0xb0, 0xbe, 0x4a, 0x65, 0x68, 0x83, 0xf5, 0x44, 0x3c, 0xa7, 0x86, 0x45, 0x41, 0xcc, 0xbf, 0xe0, 0xd0, 0x83, 0x56, 0x36, 0xef, 0x08, 0xa9, 0x36, 0xb2, 0x32, 0x1a, 0x51, 0x50, 0x3b, 0xe1, 0xee, 0xc5, 0xf7, 0xbc, 0xcd, 0x0c, 0x73, 0xc9, 0xcd, 0x52, 0x39, 0x7c, 0xc2, 0x14, 0x31, 0x8b, 0x30, 0xe8, 0xbe, 0x1e, 0xab, 0x57, 0x20, 0x0a, 0x4d, 0x4d, 0xf7, 0x8a, 0xf9, 0x91, 0xbd, 0xe1, 0x83, 0xe0, 0x16, 0x4e, 0x69, 0x4d, 0x83, 0x08, 0xb7, 0xd2, 0x0d, 0x06, 0x7b, 0xfc, 0xab, 0xdc, 0xb5, 0x0f, 0x7a, 0x2c, 0x19, 0x0c, 0x66, 0xce, 0x3d, 0xd0, 0xe1, 0x89, 0x60, 0x93, 0x9c, 0xb5, 0x7f, 0xc3, 0xa2, 0xe5, 0xa6, 0x04, 0xf3, 0xd9, 0xbd, 0x6f, 0xa4, 0x40, 0xd5, 0x4e, 0x9c, 0xc0, 0x38, 0x39, 0x58, 0xa0, 0xd6, 0xaa, 0x2a, 0xb6, 0x70, 0x97, 0x0f, 0x9b, 0x2c, 0xaf, 0x86, 0x6e, 0xe5, 0x07, 0x06, 0x73, 0x43, 0xf7, 0x51, 0x3e, 0x0a, 0x98, 0x1f, 0x3a, 0x34, 0x4f, 0x2f, 0x75, 0x3a, 0xf4, 0x4f, 0xda, 0x26, 0xd6, 0x61, 0x79, 0x60, 0x32, 0xbd, 0xa0, 0xf6, 0xcc, 0x30, 0xa9, 0xa7, 0x89, 0xdb, 0x8d, 0x3d, 0x54, 0x6f, 0x02, 0xf8, 0x98, 0x11, 0x68, 0x05, 0x18, 0x0c, 0x6f, 0x0d, 0x2f, 0x53, 0x88, 0xab, 0x51, 0x10, 0xa5, 0x21, 0x07, 0x7d, 0x88, 0xd2, 0x14, 0xfb, 0xb3, 0x2e, 0xed, 0x26, 0x64, 0x40, 0x6c, 0xde, 0x9b }; /* K = 989d87703853c4133b6d273686bf672492e90ce2a91b3c72a4188a1c */ static const uint8_t ac_dsa_vect141_out[] = { /* R */ 0x04, 0x34, 0xef, 0x1c, 0x12, 0x72, 0x07, 0xd0, 0xc8, 0x84, 0x70, 0x1e, 0x75, 0xd8, 0x01, 0x72, 0x5c, 0x45, 0x1c, 0xe6, 0x7d, 0x2e, 0x71, 0x53, 0x46, 0x38, 0xb2, 0x31, /* S */ 0x0c, 0x62, 0x5e, 0x4a, 0x33, 0x4d, 0xb0, 0x78, 0x25, 0xa4, 0x6b, 0x55, 0xda, 0x9c, 0x2e, 0x8a, 0x5f, 0x60, 0x0a, 0x36, 0xb7, 0x16, 0x06, 0x83, 0x40, 0x97, 0xe7, 0x77 }; #define ac_dsa_vect142_prime ac_dsa_vect136_prime #define ac_dsa_vect142_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect142_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect142_ptx[] = { /* Msg */ 0x5a, 0x47, 0x0a, 0x38, 0xb2, 0xeb, 0xbe, 0xad, 0x08, 0xe0, 0x10, 0xef, 0xef, 0x74, 0x61, 0xf6, 0xf8, 0x59, 0x25, 0x7d, 0x91, 0xa6, 0x1e, 0x2f, 0x0b, 0xa8, 0x09, 0xe2, 0x8c, 0x0e, 0xa3, 0xd4, 0x10, 0xe4, 0xf4, 0x14, 0x77, 0xa3, 0x98, 0xd5, 0x93, 0xdf, 0x58, 0x03, 0x9c, 0x43, 0x36, 0x26, 0x0e, 0xa7, 0xd8, 0xe9, 0x8c, 0x9d, 0x7d, 0xaa, 0xd0, 0xc3, 0x1e, 0xcd, 0x15, 0x67, 0xc7, 0xdb, 0x73, 0x01, 0x79, 0xe2, 0xa9, 0xa6, 0x20, 0x07, 0xbd, 0x56, 0xf9, 0xd9, 0xda, 0x48, 0xde, 0xaa, 0x65, 0x7a, 0xc9, 0x22, 0x93, 0xe5, 0xbf, 0xaf, 0xbd, 0xeb, 0xad, 0x1a, 0xfe, 0x25, 0xc4, 0x1e, 0x1a, 0xa0, 0x9d, 0xb6, 0x1f, 0xcc, 0x19, 0x19, 0x71, 0xc3, 0x75, 0x49, 0x15, 0x5b, 0x3e, 0x67, 0x95, 0x69, 0x13, 0xaa, 0xe3, 0xa5, 0xf6, 0x24, 0x5c, 0xfc, 0xb9, 0xaa, 0xd5, 0xdc, 0x1e, 0x15 }; static const uint8_t ac_dsa_vect142_priv_val[] = { /* X */ 0x13, 0x41, 0x1c, 0x1a, 0x6f, 0xe0, 0x06, 0x3e, 0x7f, 0x9b, 0x24, 0x67, 0xcc, 0xeb, 0xf2, 0xbe, 0x5c, 0xf3, 0x0e, 0x74, 0x2f, 0x9a, 0x35, 0xd7, 0x15, 0x55, 0x8b, 0xa7 }; static const uint8_t ac_dsa_vect142_pub_val[] = { /* Y */ 0x06, 0xa2, 0x0d, 0x55, 0x71, 0x29, 0x6e, 0xeb, 0x87, 0xe7, 0x9e, 0xb2, 0x74, 0x03, 0x6d, 0x81, 0x9e, 0x86, 0x23, 0xb1, 0x5d, 0xe4, 0x4c, 0x26, 0x97, 0xda, 0xde, 0xca, 0xb2, 0x99, 0x6f, 0x51, 0xa7, 0x5a, 0xa0, 0x88, 0x49, 0x0e, 0x68, 0x3f, 0x34, 0xd5, 0xe0, 0xe7, 0x1d, 0x9f, 0xb8, 0x73, 0x4b, 0xcf, 0xb7, 0x1e, 0x9d, 0x19, 0xcb, 0xda, 0x3c, 0xac, 0xa5, 0xce, 0xc4, 0x17, 0xfa, 0x37, 0xa0, 0x61, 0x42, 0xbf, 0xc0, 0x68, 0x2d, 0xe5, 0x6f, 0x0d, 0xce, 0x6e, 0x82, 0x6e, 0xe9, 0xf3, 0x0d, 0x01, 0x27, 0x98, 0x59, 0xd3, 0xff, 0xbd, 0x44, 0x33, 0xbf, 0x4a, 0x10, 0x57, 0xba, 0x0a, 0xd7, 0x50, 0x60, 0xd4, 0x1f, 0x96, 0x8f, 0x6d, 0xa8, 0x22, 0xc3, 0x3c, 0xbd, 0xa9, 0xf7, 0x72, 0xc2, 0xb7, 0x7b, 0xc1, 0xb2, 0x93, 0x05, 0xcb, 0x69, 0x71, 0x82, 0xc0, 0xd3, 0x9b, 0x13, 0x28, 0x68, 0x93, 0x2c, 0x64, 0x01, 0x6b, 0xc9, 0x07, 0x1b, 0x30, 0x92, 0x0e, 0xb3, 0x85, 0xc5, 0xae, 0x41, 0xc5, 0xd4, 0xf6, 0x31, 0xbf, 0x5f, 0x54, 0xb1, 0xeb, 0x4b, 0x37, 0x3b, 0xb3, 0xe0, 0xbf, 0x6e, 0x44, 0x8a, 0xd8, 0xc9, 0x88, 0xfe, 0xa1, 0x6e, 0x64, 0x37, 0x90, 0x30, 0x7b, 0x8b, 0x85, 0xf0, 0x09, 0xfb, 0x67, 0x31, 0x72, 0x17, 0xd9, 0x14, 0x8c, 0x6c, 0xd7, 0xa4, 0x61, 0x36, 0xee, 0xce, 0x19, 0x50, 0xa1, 0x19, 0xe5, 0xa4, 0x16, 0xa1, 0x97, 0xe0, 0x0d, 0x0e, 0x92, 0x9b, 0x04, 0xa5, 0xbb, 0xf6, 0xc9, 0x88, 0xd8, 0x59, 0x5a, 0x0b, 0x2a, 0x5c, 0xa7, 0x19, 0x26, 0xba, 0x35, 0x1a, 0x5f, 0x76, 0x74, 0xaf, 0x41, 0x83, 0xb5, 0xa6, 0x89, 0x79, 0xbe, 0xdd, 0x64, 0x91, 0x29, 0x5b, 0x0f, 0x17, 0x2e, 0x73, 0x73, 0xec, 0xa7, 0xe6, 0x2d, 0x78, 0xd7, 0x44, 0xfd, 0xcc, 0xec }; /* K = 7406254d3cfe3d55267236ff63b0f42b2e3b55d1cee7ed1ca3f06ce0 */ static const uint8_t ac_dsa_vect142_out[] = { /* R */ 0x74, 0xdd, 0xdf, 0xa3, 0x5b, 0x25, 0xd0, 0xc0, 0xb2, 0x85, 0xa5, 0xd2, 0x17, 0x19, 0xee, 0x39, 0xd6, 0xe3, 0xf4, 0x43, 0x44, 0x5c, 0xeb, 0x90, 0x55, 0x6b, 0x01, 0x86, /* S */ 0x47, 0x48, 0x65, 0xd3, 0xef, 0x07, 0xf5, 0xdf, 0x49, 0xe0, 0xa6, 0xeb, 0xfb, 0x5a, 0xb5, 0xc2, 0xed, 0xe4, 0x7c, 0x4c, 0x63, 0x14, 0xbe, 0x4c, 0xcf, 0x45, 0x5e, 0x21 }; #define ac_dsa_vect143_prime ac_dsa_vect136_prime #define ac_dsa_vect143_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect143_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect143_ptx[] = { /* Msg */ 0x08, 0x49, 0xd6, 0x7e, 0xad, 0x3e, 0x8c, 0x44, 0xad, 0x3b, 0x2f, 0x94, 0x9b, 0xe1, 0xcd, 0x9f, 0x9a, 0x4b, 0xf8, 0xb5, 0x78, 0x5b, 0xd0, 0x0c, 0xa6, 0x60, 0x38, 0xe9, 0xa8, 0xb9, 0x37, 0x27, 0xa6, 0x52, 0xa4, 0x15, 0xc1, 0xd8, 0xa1, 0xec, 0xfc, 0xad, 0x77, 0x78, 0x2d, 0x87, 0xd9, 0x12, 0x62, 0x3c, 0x2f, 0xef, 0x45, 0xb2, 0x08, 0x3e, 0xc0, 0xf7, 0x9a, 0x26, 0x4e, 0xf7, 0xc5, 0xbf, 0xb7, 0x6f, 0xde, 0x5b, 0x22, 0xb9, 0x84, 0x53, 0x92, 0xe7, 0x59, 0xa1, 0xec, 0x05, 0xfa, 0x63, 0x87, 0xcc, 0xd2, 0x94, 0x3e, 0xf1, 0x27, 0x7c, 0x2e, 0x06, 0x03, 0x37, 0xf8, 0x2a, 0xa5, 0x62, 0xce, 0xe5, 0xbd, 0x7c, 0x15, 0x82, 0x58, 0xf2, 0xe7, 0x79, 0xd5, 0x1e, 0x47, 0xe0, 0x00, 0xa7, 0xb0, 0x70, 0x60, 0x77, 0x49, 0x09, 0x76, 0xa0, 0x77, 0x63, 0xe2, 0xef, 0xb2, 0x75, 0xb5, 0xbf }; static const uint8_t ac_dsa_vect143_priv_val[] = { /* X */ 0x56, 0x31, 0xc7, 0xdf, 0xd3, 0xf5, 0xad, 0xc0, 0xb7, 0xb5, 0x42, 0xa8, 0xd1, 0x21, 0xa0, 0x7b, 0xb8, 0x25, 0x1b, 0x6a, 0x1b, 0xf3, 0xa8, 0xcb, 0xa7, 0x71, 0xc7, 0x24 }; static const uint8_t ac_dsa_vect143_pub_val[] = { /* Y */ 0xb1, 0xc6, 0x14, 0x42, 0xd8, 0xae, 0xda, 0xe0, 0xa0, 0x4d, 0xae, 0xf7, 0xb6, 0xf8, 0xa4, 0x9c, 0x6d, 0x07, 0xbd, 0x95, 0x8e, 0x8e, 0xc5, 0x61, 0x90, 0x6d, 0xdf, 0x31, 0xf3, 0xb4, 0xff, 0xd4, 0x81, 0xda, 0x54, 0x43, 0xfe, 0x87, 0x88, 0x05, 0x6c, 0x4e, 0xa7, 0xb5, 0xdf, 0xa2, 0xce, 0xe6, 0x47, 0x4e, 0x3f, 0xdc, 0x83, 0xfc, 0x04, 0x3a, 0x2b, 0xba, 0x33, 0x3d, 0x50, 0x3a, 0x2a, 0x93, 0x88, 0x65, 0xec, 0x3f, 0x11, 0x86, 0x40, 0xe8, 0x45, 0x7c, 0x7d, 0x97, 0x4e, 0x2a, 0x65, 0x65, 0x9c, 0xef, 0x5b, 0x7a, 0xe4, 0xf4, 0x9a, 0x05, 0x4d, 0x94, 0xae, 0x5e, 0x2e, 0xb6, 0x34, 0x5f, 0x5b, 0xda, 0xf9, 0x21, 0x48, 0xbe, 0xec, 0xc1, 0x09, 0xc5, 0x50, 0x31, 0xfc, 0xcd, 0x90, 0xce, 0xf8, 0x82, 0x13, 0xb6, 0x9d, 0xdb, 0x75, 0x4b, 0x40, 0xca, 0x8d, 0x8f, 0x0a, 0x4b, 0xfc, 0x81, 0xa2, 0x87, 0x63, 0x7a, 0x38, 0xc2, 0x18, 0x07, 0xf7, 0x27, 0xa6, 0x70, 0x25, 0xff, 0x67, 0xb7, 0xfc, 0xc5, 0x44, 0x18, 0xad, 0xad, 0x40, 0x8a, 0x5c, 0x7d, 0x1c, 0xe0, 0x5a, 0x1d, 0xe7, 0xe3, 0x09, 0x88, 0xd5, 0x60, 0xe7, 0x79, 0xfd, 0xea, 0x1b, 0x78, 0x75, 0x33, 0x14, 0xb0, 0xb8, 0x0f, 0xda, 0xcb, 0x62, 0x46, 0xfa, 0xa4, 0xb4, 0xc4, 0xee, 0x8a, 0xcc, 0x5a, 0xe2, 0x4b, 0x82, 0x31, 0x20, 0x40, 0x13, 0x4c, 0xd8, 0xcc, 0x2f, 0xd4, 0xfc, 0xb1, 0x91, 0xfe, 0x43, 0xf6, 0x4d, 0x14, 0x06, 0x24, 0xa8, 0xc6, 0xc2, 0xac, 0x5f, 0xa4, 0xbf, 0xdb, 0xa5, 0xd6, 0x25, 0xd7, 0xd2, 0x1e, 0x3c, 0x3f, 0x6a, 0xcd, 0x8a, 0x15, 0x3a, 0x04, 0xfb, 0x22, 0xf8, 0xd3, 0xb2, 0x44, 0xae, 0x8c, 0x6a, 0x1d, 0xd0, 0xe6, 0xe3, 0xb2, 0xf7, 0x3c, 0x06, 0x4f, 0xfa, 0xbf, 0xad, 0x6c, 0xc4, 0x61 }; /* K = 9c353ace0ae52501bbb98a2d1c9e28f3a833c2b0eaca49cd12c57ec7 */ static const uint8_t ac_dsa_vect143_out[] = { /* R */ 0x2a, 0xeb, 0x7f, 0xce, 0x1b, 0x77, 0x64, 0xd3, 0x2c, 0xfb, 0x7d, 0x85, 0x25, 0x4c, 0xee, 0xd9, 0xf3, 0xa6, 0x33, 0x7e, 0xe8, 0xda, 0xb4, 0x2c, 0x8a, 0xb7, 0xa4, 0x15, /* S */ 0x17, 0xcc, 0xe1, 0x3b, 0xcb, 0x91, 0x7c, 0xdb, 0xef, 0xe0, 0xc5, 0x66, 0x31, 0x8f, 0xc9, 0x74, 0x20, 0x4b, 0x70, 0x0c, 0x5c, 0xdd, 0xc5, 0xb2, 0xb4, 0x99, 0xa7, 0x8e }; #define ac_dsa_vect144_prime ac_dsa_vect136_prime #define ac_dsa_vect144_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect144_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect144_ptx[] = { /* Msg */ 0xe7, 0x46, 0x39, 0xf2, 0xba, 0xd4, 0x2f, 0xd6, 0x39, 0x3f, 0x9b, 0x35, 0x0d, 0x6e, 0x19, 0xcd, 0x4c, 0x1c, 0xe0, 0xf4, 0x1e, 0x8c, 0x90, 0x26, 0x84, 0xef, 0x6f, 0x86, 0x79, 0x0f, 0xfc, 0x83, 0x11, 0xac, 0xd9, 0xb5, 0x7d, 0x65, 0x21, 0xe8, 0x03, 0x39, 0xb3, 0x24, 0x3f, 0x6e, 0xc6, 0xb0, 0x1a, 0x06, 0xea, 0x89, 0x9f, 0xd7, 0x5d, 0xa9, 0x1e, 0x10, 0x80, 0xfd, 0xf0, 0x61, 0x29, 0xdd, 0x85, 0x1a, 0x89, 0x5d, 0x74, 0xb1, 0xef, 0xb9, 0x83, 0x72, 0x89, 0xc1, 0x1d, 0x68, 0xe1, 0x30, 0x8c, 0x47, 0xbb, 0x8c, 0x59, 0xd5, 0xeb, 0x89, 0x5d, 0xb5, 0x3b, 0xba, 0x29, 0x10, 0x2a, 0x5b, 0x48, 0xb1, 0xe7, 0x5c, 0x73, 0x38, 0x7f, 0xf2, 0x2e, 0x6c, 0x04, 0x61, 0x19, 0x6a, 0x7d, 0x48, 0x61, 0x5f, 0xfd, 0xb9, 0xc8, 0xff, 0x4e, 0xc6, 0x58, 0x7b, 0x4f, 0x68, 0xd2, 0x60, 0xad, 0x86 }; static const uint8_t ac_dsa_vect144_priv_val[] = { /* X */ 0x73, 0x19, 0xbd, 0xf7, 0x9a, 0x4c, 0x8d, 0xbc, 0x11, 0x5e, 0x37, 0x80, 0xc8, 0x18, 0xf6, 0xe2, 0xa3, 0x24, 0x3a, 0xb4, 0x72, 0x63, 0xe8, 0x4b, 0xa2, 0x59, 0xbd, 0x3d }; static const uint8_t ac_dsa_vect144_pub_val[] = { /* Y */ 0x9e, 0x1b, 0x77, 0x24, 0x3a, 0xba, 0x08, 0x86, 0xf9, 0xba, 0xec, 0xa6, 0xc1, 0x1b, 0xd2, 0xc5, 0xc5, 0x55, 0x47, 0xcc, 0x50, 0x2e, 0x73, 0x1d, 0x9c, 0x47, 0x25, 0xda, 0x87, 0x77, 0xab, 0x60, 0x50, 0xe3, 0x39, 0x9e, 0x25, 0x57, 0x77, 0x04, 0xcf, 0xc6, 0x61, 0x63, 0xf6, 0xdf, 0x8d, 0x74, 0x91, 0x42, 0xa7, 0xe9, 0x74, 0xe4, 0x9b, 0x73, 0x15, 0xab, 0x7c, 0x8b, 0x85, 0xad, 0x5d, 0x5c, 0xb2, 0x71, 0xcf, 0x20, 0x7e, 0xb7, 0x2e, 0x1c, 0x34, 0x76, 0xb0, 0xd8, 0x63, 0x72, 0x1c, 0x96, 0x7b, 0xe1, 0x5e, 0xcb, 0xfb, 0xf0, 0x6e, 0xad, 0xc2, 0x7d, 0xe3, 0x38, 0xea, 0xa3, 0xca, 0xc1, 0xdd, 0xe6, 0x42, 0xd5, 0x2a, 0xa5, 0x35, 0x91, 0x98, 0xd8, 0x90, 0x9d, 0x23, 0xd8, 0x7d, 0x82, 0x70, 0x90, 0xa8, 0xad, 0xa7, 0xb7, 0xa5, 0x55, 0x36, 0x42, 0xd5, 0x86, 0x60, 0x3e, 0xa2, 0x46, 0x4d, 0xab, 0xd2, 0xef, 0x5e, 0x18, 0xdb, 0x3a, 0x62, 0x3b, 0xe6, 0x5b, 0xe7, 0xb5, 0xa4, 0x69, 0x89, 0x0f, 0x9d, 0xde, 0x54, 0xa2, 0x7c, 0xa7, 0x23, 0xb4, 0xe0, 0x5d, 0x56, 0xb7, 0x18, 0x1b, 0x28, 0xd5, 0xc1, 0xf6, 0x54, 0x15, 0x68, 0x8e, 0xe4, 0x1d, 0x53, 0x37, 0xa9, 0x95, 0x2d, 0x92, 0xed, 0xe4, 0xd1, 0x92, 0xb9, 0x09, 0x16, 0x39, 0xca, 0xaa, 0x60, 0x33, 0xe4, 0x74, 0x94, 0x18, 0xdd, 0xe1, 0x5a, 0xbe, 0x4b, 0xad, 0x62, 0xc3, 0x7f, 0xab, 0x05, 0xe3, 0xbe, 0xf4, 0xcd, 0x73, 0x98, 0xa4, 0x97, 0x7e, 0x07, 0xe1, 0x21, 0xfe, 0xf2, 0xaa, 0xc5, 0x6b, 0xe7, 0xe0, 0x54, 0x6e, 0x40, 0xfc, 0xa8, 0x85, 0x69, 0x6a, 0x38, 0x50, 0xc9, 0xa2, 0x87, 0x09, 0xe6, 0x99, 0xd5, 0x26, 0x11, 0xc9, 0xb7, 0x92, 0x6e, 0x7a, 0xd1, 0x81, 0x49, 0x04, 0x05, 0x82, 0xc9, 0x97, 0xdb, 0x71 }; /* K = 6defbce0e72f014526c8ab02c6fc320a4bbd85365d99fc5d3423fa4c */ static const uint8_t ac_dsa_vect144_out[] = { /* R */ 0x51, 0x5b, 0x9c, 0xe5, 0x3e, 0xb1, 0x0c, 0x3e, 0x47, 0x89, 0x05, 0x56, 0xe0, 0xf0, 0xfd, 0x19, 0xad, 0xb2, 0x07, 0xb9, 0xc0, 0x1f, 0x12, 0xef, 0x5c, 0x6c, 0xaa, 0xad, /* S */ 0x09, 0x00, 0xe3, 0xac, 0xc4, 0xc3, 0x78, 0xbd, 0xfe, 0x9c, 0xda, 0x4d, 0xb8, 0xf8, 0xab, 0x54, 0x43, 0x69, 0x31, 0xc7, 0x3d, 0x8d, 0x31, 0x71, 0xc6, 0xdc, 0x8b, 0xb8 }; #define ac_dsa_vect145_prime ac_dsa_vect136_prime #define ac_dsa_vect145_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect145_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect145_ptx[] = { /* Msg */ 0x4a, 0x14, 0x5d, 0xd5, 0xcc, 0x4a, 0x12, 0xea, 0x43, 0x61, 0x7e, 0xc9, 0x79, 0x0f, 0x10, 0x38, 0x19, 0x0e, 0xd3, 0xd8, 0xaf, 0x24, 0xbb, 0xec, 0x14, 0xda, 0x3e, 0xcf, 0x5f, 0x38, 0x7c, 0xa9, 0x76, 0x4a, 0x8b, 0x9c, 0xbc, 0x5f, 0x62, 0x92, 0xa5, 0x3a, 0x9d, 0xa9, 0x53, 0x3c, 0x75, 0x11, 0x40, 0xf8, 0xda, 0x5f, 0xb6, 0xf3, 0xd4, 0x8e, 0xba, 0x1e, 0x7b, 0x98, 0x66, 0x27, 0x34, 0xd9, 0xa8, 0xb1, 0x20, 0xdd, 0x51, 0x54, 0x08, 0xba, 0x75, 0x6f, 0x75, 0xa5, 0x75, 0x52, 0x12, 0x76, 0x4a, 0xd9, 0x2c, 0x3f, 0x22, 0x63, 0x83, 0x52, 0x11, 0xad, 0xd5, 0xb4, 0xcc, 0x0e, 0xca, 0x8d, 0x4f, 0xc7, 0xa8, 0x43, 0xf4, 0x9c, 0x38, 0xce, 0x80, 0x86, 0x8f, 0xaf, 0x8b, 0x49, 0x8f, 0xb4, 0x14, 0xd3, 0x08, 0x0e, 0xd4, 0x1e, 0x36, 0x74, 0xe2, 0x85, 0xd3, 0xe4, 0x0d, 0x62, 0xf3, 0x05 }; static const uint8_t ac_dsa_vect145_priv_val[] = { /* X */ 0x79, 0x44, 0xfa, 0x1a, 0x2a, 0x93, 0x8f, 0xfa, 0xbb, 0x23, 0x4c, 0xa3, 0x85, 0x91, 0x6e, 0x01, 0xa8, 0x92, 0x20, 0xcd, 0x16, 0xf0, 0x6a, 0x47, 0x4b, 0x9d, 0x4a, 0xc4 }; static const uint8_t ac_dsa_vect145_pub_val[] = { /* Y */ 0xb3, 0xf6, 0xd4, 0x4d, 0xa8, 0x6a, 0x51, 0x5d, 0x71, 0x85, 0xb7, 0x0c, 0x5a, 0xda, 0xa3, 0xf6, 0x05, 0x9c, 0x0b, 0xb7, 0x99, 0x5a, 0x53, 0x91, 0x07, 0x61, 0xfe, 0xa3, 0x62, 0xd9, 0x84, 0x3f, 0x92, 0xf2, 0x27, 0x1d, 0xdb, 0x0b, 0xca, 0x0d, 0x45, 0x19, 0xe3, 0x3f, 0xdb, 0x13, 0xaf, 0x49, 0xd8, 0x55, 0xcd, 0x0b, 0x9a, 0xb0, 0xb9, 0x70, 0x26, 0x72, 0x43, 0xe4, 0x68, 0xd3, 0xc4, 0x16, 0x77, 0xac, 0x58, 0x8f, 0xdf, 0xcb, 0x1c, 0xb9, 0xaa, 0x4d, 0x23, 0x3f, 0x7a, 0xe0, 0x17, 0xe6, 0x70, 0x94, 0xf4, 0xf4, 0xd9, 0x04, 0xe1, 0x57, 0x5e, 0x76, 0xbd, 0xc6, 0xbd, 0x82, 0x99, 0xb4, 0x2a, 0x2f, 0x39, 0xad, 0xef, 0x63, 0xce, 0x04, 0x78, 0x62, 0xaa, 0xa0, 0xbb, 0x8b, 0xa3, 0x2e, 0xc2, 0x73, 0x34, 0x93, 0x64, 0x84, 0x06, 0xf5, 0x4f, 0x5d, 0x8e, 0x2e, 0xb1, 0x9e, 0xea, 0x83, 0x7f, 0x4d, 0x59, 0x63, 0xad, 0x31, 0x92, 0x91, 0x7f, 0x5f, 0xe3, 0xb6, 0xd0, 0x27, 0xb2, 0x2b, 0xc1, 0xbf, 0x0d, 0xce, 0x84, 0x01, 0xd6, 0x22, 0xca, 0x72, 0xb1, 0xd7, 0x3a, 0x89, 0xe8, 0x88, 0xde, 0x1e, 0x62, 0xbe, 0xad, 0x2e, 0x4e, 0x1d, 0xa6, 0xb5, 0xd0, 0x4b, 0x2a, 0x36, 0x94, 0xc7, 0x6f, 0xe0, 0x7a, 0xd3, 0xc6, 0x64, 0x26, 0x34, 0x3d, 0x67, 0xbe, 0x12, 0xb2, 0xa7, 0x2c, 0x3f, 0x76, 0x22, 0x55, 0x73, 0xfc, 0x05, 0x4f, 0x3b, 0x7d, 0x73, 0x59, 0x15, 0x23, 0x8d, 0x7b, 0xdb, 0xcb, 0x03, 0xba, 0x6d, 0xde, 0x3e, 0xdc, 0x00, 0xf8, 0xc9, 0x83, 0xb0, 0xb5, 0x01, 0x29, 0xfa, 0xb4, 0x26, 0x00, 0x4a, 0x27, 0xa0, 0x38, 0x13, 0x9f, 0x2d, 0x32, 0x95, 0xb5, 0xb0, 0x32, 0x70, 0x1f, 0xac, 0xe3, 0x4a, 0x75, 0x23, 0x55, 0x94, 0x85, 0xfa, 0x63, 0x1c, 0x21, 0x92, 0x37, 0xf6 }; /* K = 8ab9322319a138489eb773f3220d712d05cd14eed9aae402a8aa767b */ static const uint8_t ac_dsa_vect145_out[] = { /* R */ 0x5c, 0xfd, 0x4b, 0x9f, 0x92, 0xca, 0x72, 0x7d, 0x51, 0x3a, 0xc1, 0x41, 0x43, 0xb1, 0x25, 0x14, 0x86, 0x55, 0xf1, 0x64, 0x2c, 0x53, 0xb7, 0x3c, 0xc2, 0x51, 0x31, 0xc9, /* S */ 0x2a, 0xde, 0xf9, 0x4a, 0xae, 0x37, 0x2d, 0x57, 0x9c, 0x99, 0x62, 0x9c, 0xa0, 0x78, 0x63, 0x62, 0xcb, 0x02, 0x47, 0xaa, 0x6d, 0x99, 0x95, 0x70, 0x74, 0xcd, 0x7d, 0x43 }; #define ac_dsa_vect146_prime ac_dsa_vect136_prime #define ac_dsa_vect146_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect146_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect146_ptx[] = { /* Msg */ 0x42, 0x8a, 0x20, 0x79, 0x0c, 0xad, 0x1c, 0x7b, 0xa8, 0x21, 0x18, 0xae, 0x58, 0x41, 0xbd, 0x53, 0x80, 0xee, 0x50, 0xbe, 0x5b, 0x64, 0xb8, 0x04, 0x09, 0x35, 0xef, 0x3d, 0x6d, 0xa3, 0x7a, 0x26, 0xe6, 0xf0, 0x20, 0x35, 0xfb, 0x19, 0x37, 0xc7, 0xa6, 0xbc, 0xd8, 0x8c, 0x89, 0x4f, 0xad, 0x7d, 0x8a, 0xa4, 0x8a, 0xbb, 0x89, 0xe0, 0xc6, 0x42, 0x87, 0xcd, 0xc6, 0x37, 0x45, 0x4d, 0xb8, 0x9e, 0xaf, 0x0a, 0x7e, 0x69, 0x27, 0x34, 0xc8, 0xa2, 0x43, 0x85, 0x6d, 0xd7, 0x56, 0x90, 0xbd, 0xce, 0xfe, 0x55, 0x4e, 0x39, 0xa0, 0xdf, 0x84, 0xe6, 0xe0, 0xc9, 0x6b, 0x2c, 0x57, 0x74, 0xa3, 0xe4, 0xe2, 0xaf, 0xed, 0x02, 0x8f, 0xb4, 0x3d, 0x79, 0x98, 0xd3, 0xcd, 0xc9, 0xa6, 0x40, 0x93, 0x22, 0xcf, 0x3b, 0xfa, 0x4d, 0x1e, 0x36, 0xf5, 0xe7, 0x07, 0x20, 0x3b, 0x59, 0xc4, 0x9a, 0x75, 0x3e }; static const uint8_t ac_dsa_vect146_priv_val[] = { /* X */ 0x43, 0xde, 0xa1, 0xb4, 0xe5, 0xc2, 0xf2, 0x25, 0x48, 0x07, 0x4d, 0x7d, 0xdd, 0xbd, 0xcb, 0x94, 0xa2, 0x35, 0xa3, 0xdb, 0xbf, 0xdb, 0x7b, 0x3b, 0xfc, 0x59, 0x23, 0xd3 }; static const uint8_t ac_dsa_vect146_pub_val[] = { /* Y */ 0x47, 0xa9, 0x34, 0x0a, 0xc5, 0x13, 0x58, 0x5c, 0x83, 0xbb, 0x20, 0xa2, 0xfb, 0xa9, 0x46, 0x97, 0x18, 0x11, 0x18, 0x4f, 0xd2, 0x00, 0x65, 0xfb, 0x95, 0xcb, 0xb2, 0x06, 0x25, 0xb4, 0x7b, 0x21, 0x6f, 0x75, 0xe1, 0xf3, 0xd8, 0x97, 0x97, 0xf5, 0x40, 0xa0, 0x48, 0x5c, 0xfb, 0xf0, 0x7b, 0x17, 0x16, 0xa3, 0xec, 0xe7, 0x02, 0x7d, 0x86, 0xf4, 0x94, 0x0a, 0xb9, 0x0b, 0xbf, 0xdd, 0x8e, 0xbf, 0x15, 0x13, 0x7b, 0xcf, 0x88, 0x05, 0xf9, 0x3c, 0xea, 0x25, 0x9c, 0x4b, 0xea, 0x5a, 0x2d, 0x3b, 0xb3, 0xdd, 0xdf, 0x83, 0xaa, 0x29, 0x0d, 0x35, 0x73, 0xe9, 0x1a, 0xa3, 0x00, 0xbb, 0xf1, 0xaf, 0xb9, 0xb5, 0x25, 0x54, 0x2d, 0x67, 0xa8, 0xd8, 0x60, 0x51, 0xae, 0xd8, 0xff, 0x8a, 0x2c, 0xfc, 0x22, 0x5a, 0x9e, 0x51, 0xeb, 0x37, 0x4c, 0x31, 0xfe, 0x10, 0x3a, 0xe8, 0xf4, 0xa0, 0xc8, 0x91, 0x14, 0x21, 0xd2, 0x25, 0xc0, 0x19, 0xe1, 0xb5, 0xc0, 0x7d, 0xc1, 0x49, 0xba, 0xbc, 0x26, 0xb7, 0x08, 0xfc, 0x0f, 0xc0, 0xc1, 0x3c, 0x3b, 0x35, 0x39, 0x03, 0x17, 0xc4, 0x09, 0xfa, 0xae, 0x81, 0xaa, 0xc9, 0xab, 0x5d, 0x01, 0xce, 0x85, 0xad, 0xd2, 0x49, 0x17, 0xd9, 0x4c, 0xd1, 0xb2, 0x14, 0x1b, 0x63, 0x8d, 0xe3, 0xa2, 0x53, 0xbf, 0xca, 0x6b, 0x7f, 0x1a, 0x81, 0x04, 0x51, 0x8d, 0x15, 0x72, 0x21, 0x1b, 0xa5, 0x2d, 0xd1, 0x75, 0x63, 0x2c, 0x8f, 0x3f, 0x67, 0x48, 0x26, 0x5a, 0x4b, 0xf6, 0xc2, 0xb8, 0x36, 0x3d, 0x98, 0x10, 0xba, 0x1f, 0x1e, 0x58, 0x47, 0x94, 0xf6, 0x23, 0x19, 0xf0, 0x45, 0x1d, 0xa8, 0x31, 0xd4, 0x57, 0xb5, 0x26, 0x9b, 0xbe, 0x67, 0x78, 0x4c, 0x47, 0x4f, 0xff, 0xf6, 0x92, 0xbb, 0xe2, 0xba, 0xac, 0xa3, 0x2d, 0x3f, 0x85, 0xf4, 0xfe, 0x39, 0xe0, 0x3f }; /* K = 5615520867828ae7dbc8e9b116e7661e18f09e5cdae17518ead1484f */ static const uint8_t ac_dsa_vect146_out[] = { /* R */ 0x8a, 0x96, 0xc4, 0x19, 0xe0, 0xf3, 0x91, 0xda, 0xa2, 0x9f, 0xb1, 0x62, 0xa1, 0xb9, 0x57, 0x0f, 0x48, 0xa0, 0x08, 0x10, 0xaa, 0x48, 0x0c, 0xde, 0x0f, 0x27, 0xcf, 0xb0, /* S */ 0x02, 0x8e, 0xd9, 0x16, 0x55, 0x22, 0xfc, 0x59, 0xae, 0xeb, 0x79, 0xc4, 0x91, 0xa9, 0x5e, 0xd8, 0x42, 0x7f, 0xd1, 0xb6, 0x95, 0xf3, 0xde, 0xdf, 0x42, 0x28, 0xa3, 0x28 }; #define ac_dsa_vect147_prime ac_dsa_vect136_prime #define ac_dsa_vect147_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect147_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect147_ptx[] = { /* Msg */ 0x2a, 0x07, 0xe2, 0x8f, 0xc1, 0x02, 0xdf, 0xe1, 0x7c, 0x79, 0xb9, 0x36, 0x8e, 0x0b, 0xa9, 0x24, 0x14, 0xd2, 0xfc, 0xb4, 0x07, 0xd3, 0x4e, 0x90, 0x3a, 0x0a, 0x53, 0x37, 0x0f, 0x7d, 0x2d, 0x33, 0xaa, 0x13, 0xc0, 0x2e, 0x52, 0x75, 0x87, 0x71, 0x8c, 0x3b, 0x39, 0x66, 0x61, 0x25, 0xec, 0xa2, 0xe8, 0xfd, 0x4c, 0x94, 0xb9, 0x86, 0x7f, 0xb6, 0xef, 0x16, 0xd5, 0x55, 0x54, 0x9d, 0x8d, 0xd0, 0xf6, 0xe1, 0x04, 0x17, 0xeb, 0xec, 0xf4, 0x8f, 0x99, 0x2a, 0xd8, 0x4b, 0x5d, 0x97, 0x74, 0x54, 0x07, 0x85, 0xdd, 0xcd, 0x26, 0x4c, 0x55, 0x79, 0x6b, 0xc2, 0x16, 0x28, 0x98, 0xec, 0xef, 0x40, 0x27, 0xc3, 0x41, 0x87, 0xf8, 0xc0, 0xb1, 0xc2, 0x0d, 0x4d, 0xaa, 0x10, 0x8b, 0x70, 0xd7, 0x6c, 0x40, 0xdd, 0xbe, 0xbc, 0x1e, 0x0f, 0x50, 0xf4, 0xdc, 0x90, 0x4d, 0xbf, 0xbe, 0x6b, 0xeb, 0x9d }; static const uint8_t ac_dsa_vect147_priv_val[] = { /* X */ 0x5f, 0x4f, 0x3c, 0x4f, 0x95, 0xef, 0xb9, 0x1c, 0x6b, 0x49, 0xf4, 0x3a, 0xfb, 0xde, 0x6d, 0x0f, 0x9b, 0x5a, 0x13, 0x24, 0xb4, 0x92, 0x6f, 0x32, 0x76, 0xbc, 0x91, 0x3e }; static const uint8_t ac_dsa_vect147_pub_val[] = { /* Y */ 0x05, 0xf2, 0x7e, 0xc0, 0x35, 0x62, 0x78, 0x60, 0xc3, 0x1a, 0xa5, 0x97, 0xc9, 0x68, 0x37, 0x08, 0x46, 0x05, 0xf2, 0x70, 0xd1, 0x5a, 0x3f, 0xbb, 0xdd, 0xa1, 0xc3, 0x85, 0x3d, 0xb2, 0xea, 0x6f, 0x6c, 0x9d, 0xe4, 0xe1, 0x1a, 0x6f, 0xbd, 0x77, 0x3c, 0x30, 0x0e, 0xba, 0xd0, 0xf9, 0xdb, 0xc3, 0x36, 0x08, 0xf9, 0xc4, 0xc5, 0xce, 0xde, 0xde, 0x0c, 0x26, 0x79, 0x1c, 0xbe, 0xa3, 0x5a, 0xf0, 0x32, 0x2a, 0x60, 0x77, 0x39, 0xe9, 0x7c, 0x32, 0x42, 0xf0, 0xae, 0x7d, 0x36, 0xaf, 0xe2, 0x69, 0xaa, 0xe6, 0x4b, 0x5f, 0xb2, 0xdb, 0x26, 0x5c, 0xd7, 0x56, 0xce, 0xd4, 0x5d, 0x88, 0x8e, 0xaa, 0xb0, 0x46, 0x5e, 0x50, 0x9a, 0xb7, 0xf8, 0x3d, 0x62, 0x3f, 0x69, 0xe7, 0x3c, 0xdc, 0x0c, 0x76, 0x70, 0x67, 0x5c, 0xe0, 0xc2, 0x9f, 0x49, 0xa1, 0x9d, 0x70, 0x38, 0x62, 0x3b, 0xde, 0x36, 0xe2, 0x9f, 0xb8, 0x54, 0xe6, 0xfe, 0x6f, 0xfd, 0xb9, 0x16, 0xab, 0xb7, 0xd6, 0x1f, 0xab, 0x4b, 0x62, 0x0d, 0xc7, 0x39, 0xa5, 0xcb, 0xd9, 0x60, 0x8a, 0x45, 0xe8, 0x6c, 0x2b, 0xbf, 0xb4, 0x1b, 0x86, 0x99, 0x16, 0x68, 0x22, 0xe8, 0x32, 0xbb, 0x6c, 0xac, 0x66, 0xe0, 0x04, 0xe9, 0x3d, 0x19, 0x0b, 0x95, 0x14, 0x24, 0xed, 0xaf, 0x34, 0xbf, 0x6b, 0xd3, 0x43, 0xbf, 0x60, 0x15, 0x4f, 0x73, 0x9c, 0x43, 0x56, 0x2b, 0x03, 0xae, 0xb4, 0xd2, 0x3d, 0xe1, 0xf7, 0x6c, 0x18, 0xf7, 0x4b, 0x5f, 0x7a, 0x73, 0xc8, 0x05, 0xb2, 0x2a, 0xf8, 0xcc, 0x6b, 0xdc, 0x9b, 0x55, 0x77, 0x9c, 0xcf, 0x6d, 0x44, 0x1c, 0xfd, 0x31, 0x54, 0x61, 0x6c, 0xda, 0x18, 0x80, 0x7a, 0x9f, 0x5e, 0x2d, 0x76, 0x59, 0xe9, 0xe2, 0x13, 0x29, 0x75, 0x51, 0x57, 0xda, 0xbc, 0x62, 0x2b, 0xd1, 0xae, 0x2d, 0x50, 0x97, 0xc6 }; /* K = 97861b777e2a8cffc4c2d24e2df9eedf0b65ea2c9373c1085ba44efb */ static const uint8_t ac_dsa_vect147_out[] = { /* R */ 0x91, 0xa4, 0x57, 0x69, 0x31, 0xed, 0x62, 0x1a, 0x03, 0x42, 0xf1, 0x4e, 0xe2, 0xba, 0x8f, 0xa8, 0xe1, 0xbb, 0xdf, 0x89, 0x4c, 0x12, 0x51, 0xaf, 0xdf, 0x72, 0x14, 0x6f, /* S */ 0x56, 0x75, 0x5c, 0xa1, 0x63, 0xf7, 0xdc, 0x89, 0x45, 0x8a, 0x7a, 0x75, 0xd4, 0xdd, 0x3c, 0xe3, 0xad, 0xec, 0x42, 0xb4, 0xaa, 0x7d, 0x04, 0xb2, 0x85, 0x8c, 0x47, 0xf6 }; #define ac_dsa_vect148_prime ac_dsa_vect136_prime #define ac_dsa_vect148_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect148_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect148_ptx[] = { /* Msg */ 0x7e, 0x96, 0x38, 0x58, 0x16, 0xc9, 0x7b, 0xd9, 0xde, 0x81, 0xde, 0x30, 0xe6, 0x7d, 0xb7, 0x24, 0x36, 0xfb, 0x42, 0xfa, 0xa9, 0xb6, 0xcc, 0xfe, 0xab, 0x1f, 0xa5, 0x28, 0xc6, 0x9e, 0x63, 0x51, 0xb2, 0x01, 0x2a, 0x10, 0x97, 0xfb, 0x86, 0xd8, 0xc5, 0xcc, 0x60, 0x25, 0x6e, 0xf1, 0x1b, 0xe1, 0x8f, 0x16, 0x13, 0x76, 0x17, 0xf8, 0xcd, 0xd2, 0x9e, 0x3b, 0xab, 0x94, 0x68, 0xc1, 0x2a, 0xe3, 0x43, 0x36, 0xba, 0x0e, 0x0e, 0xb6, 0xc8, 0x28, 0x17, 0x7d, 0x1d, 0x55, 0xb0, 0x66, 0x98, 0xdd, 0xf7, 0x53, 0x75, 0x6a, 0xf8, 0x30, 0xa1, 0x0c, 0xe9, 0xc9, 0x9f, 0x1d, 0x13, 0x68, 0x26, 0x68, 0xe3, 0xeb, 0x33, 0x6a, 0x80, 0x61, 0x8e, 0x66, 0x62, 0x80, 0x09, 0x64, 0x17, 0xc1, 0xe2, 0xb0, 0x05, 0xb9, 0x35, 0x1f, 0x5e, 0xa3, 0x06, 0xb8, 0xc6, 0x3f, 0xd1, 0x84, 0xa5, 0x91, 0x32, 0xb5 }; static const uint8_t ac_dsa_vect148_priv_val[] = { /* X */ 0x91, 0x4e, 0x5d, 0x6d, 0x95, 0xec, 0x12, 0x44, 0x3f, 0x73, 0xc1, 0x27, 0xb7, 0x97, 0x22, 0x95, 0x44, 0x97, 0x11, 0x77, 0xf6, 0x45, 0xb8, 0xda, 0xc5, 0xf6, 0x91, 0x1d }; static const uint8_t ac_dsa_vect148_pub_val[] = { /* Y */ 0x2b, 0x69, 0xbf, 0x21, 0xbf, 0x68, 0x9a, 0x1f, 0x5e, 0xd7, 0x09, 0x6b, 0x27, 0xe4, 0x47, 0xc1, 0xd5, 0x2f, 0xc2, 0x47, 0x3e, 0x9e, 0x43, 0x53, 0xdb, 0xf1, 0x85, 0x63, 0x20, 0x22, 0xfc, 0x60, 0x5c, 0xef, 0xe5, 0x48, 0x91, 0x02, 0xf7, 0xcb, 0xe9, 0x84, 0xf0, 0x0c, 0x1a, 0xb3, 0x2f, 0x2d, 0xef, 0x1a, 0x84, 0xf1, 0xbe, 0xdd, 0xdb, 0xc1, 0x5f, 0x87, 0xae, 0xd0, 0xa2, 0xb1, 0xe9, 0x12, 0xe9, 0xed, 0xd7, 0x4e, 0xdb, 0xe2, 0xc1, 0x5a, 0x4c, 0x37, 0x53, 0x30, 0x14, 0xb9, 0xd3, 0x2b, 0x05, 0xf5, 0xa4, 0x4d, 0x32, 0x3d, 0xef, 0x1c, 0xeb, 0xae, 0x0e, 0x21, 0x6b, 0xc3, 0x5a, 0x1c, 0xa8, 0xa4, 0x26, 0x5c, 0x3d, 0xb5, 0x57, 0x4e, 0xb2, 0x3e, 0x17, 0xf1, 0x83, 0x8e, 0x22, 0x5e, 0x46, 0x7a, 0x94, 0x26, 0xe8, 0x79, 0x8c, 0x5a, 0x2e, 0x89, 0x65, 0x36, 0xc4, 0x8c, 0x4e, 0x24, 0xcd, 0x2e, 0xe9, 0xda, 0x1b, 0x61, 0xae, 0xd2, 0xe2, 0x5b, 0x98, 0xe4, 0xc1, 0xf4, 0xee, 0x55, 0xe0, 0xb4, 0x70, 0x5f, 0xeb, 0x2b, 0xb1, 0x69, 0x4c, 0xb1, 0x8a, 0x64, 0x14, 0xbc, 0xdc, 0x1a, 0x74, 0x89, 0xb4, 0xbf, 0x89, 0x67, 0x98, 0x54, 0x89, 0x31, 0x6b, 0x3e, 0x57, 0xea, 0x28, 0x12, 0x04, 0xce, 0xd3, 0xed, 0x88, 0xad, 0x1b, 0x20, 0x7b, 0xe7, 0xd2, 0x94, 0x12, 0x7b, 0xca, 0x86, 0xa9, 0xb8, 0x61, 0xcc, 0xca, 0x19, 0x2c, 0x15, 0xc8, 0x15, 0xe2, 0x32, 0x8c, 0xbd, 0xaa, 0x58, 0x99, 0xc9, 0xdd, 0x27, 0x1f, 0xcd, 0x6e, 0xea, 0x0d, 0x2a, 0xb0, 0x09, 0xa8, 0xba, 0x00, 0x1e, 0x67, 0x25, 0x13, 0x9b, 0xe2, 0x6c, 0x51, 0x51, 0x87, 0x5c, 0xdc, 0xa7, 0xf9, 0x14, 0x34, 0x44, 0x3b, 0x9e, 0x5e, 0x47, 0xa4, 0x5c, 0xdc, 0x8b, 0x73, 0x99, 0xbc, 0x5e, 0x8b, 0xed, 0x93, 0x00 }; /* K = 7d00160fa1ebb10b0465321748eba9ca6e1b3b5216c0c51dc34b98f7 */ static const uint8_t ac_dsa_vect148_out[] = { /* R */ 0x1b, 0xca, 0xa2, 0xca, 0xf4, 0x83, 0xab, 0xc8, 0x0b, 0x75, 0xf6, 0x70, 0x25, 0x2f, 0xaa, 0x2a, 0x8e, 0x18, 0xc3, 0x23, 0x01, 0xba, 0x6f, 0xc0, 0x6f, 0x37, 0xc0, 0x8e, /* S */ 0x90, 0x9a, 0x78, 0x52, 0xb8, 0xd5, 0xc8, 0x81, 0x3e, 0x17, 0xc0, 0x40, 0x77, 0x9a, 0xd0, 0xdc, 0x5e, 0x9e, 0x05, 0x56, 0x61, 0x20, 0x56, 0x83, 0x5e, 0x68, 0xd2, 0xb8 }; #define ac_dsa_vect149_prime ac_dsa_vect136_prime #define ac_dsa_vect149_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect149_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect149_ptx[] = { /* Msg */ 0x24, 0xed, 0x7a, 0x16, 0x78, 0x2b, 0x5c, 0x34, 0xbe, 0xb5, 0x8b, 0xab, 0x6a, 0x7d, 0x20, 0x28, 0x71, 0x9f, 0x97, 0x38, 0xe5, 0xd1, 0xba, 0x69, 0x78, 0xef, 0xac, 0x4b, 0x53, 0xb3, 0x7c, 0x88, 0xe7, 0xea, 0x02, 0xe0, 0xcf, 0x0f, 0xd8, 0x2a, 0x3e, 0x50, 0x04, 0x60, 0x52, 0xa9, 0x04, 0x95, 0x41, 0xd1, 0x29, 0x93, 0x25, 0x4a, 0x46, 0xfe, 0x40, 0x1f, 0x40, 0x2d, 0x38, 0x94, 0x3e, 0x94, 0x91, 0x8b, 0xf7, 0xa6, 0xfe, 0xcb, 0x08, 0xed, 0x13, 0x09, 0xb7, 0xb0, 0xf2, 0x18, 0x59, 0x67, 0xef, 0x28, 0x9a, 0x2e, 0xfa, 0x6c, 0x2e, 0x37, 0xa7, 0x4d, 0x65, 0x92, 0xa2, 0xeb, 0x74, 0x01, 0xca, 0x5e, 0x98, 0xbb, 0x86, 0x45, 0xa9, 0x4e, 0x57, 0x49, 0x9d, 0x36, 0x2e, 0x0f, 0x31, 0x33, 0xef, 0x33, 0x6e, 0x11, 0x95, 0x61, 0xce, 0xe1, 0xb5, 0x58, 0xc1, 0x55, 0x08, 0x78, 0x18, 0x68 }; static const uint8_t ac_dsa_vect149_priv_val[] = { /* X */ 0x3a, 0x42, 0xf9, 0x92, 0x7b, 0x4e, 0xb3, 0x9e, 0xe3, 0xa9, 0x10, 0xe4, 0x41, 0x89, 0x87, 0xd1, 0xaf, 0x1f, 0xfc, 0x1f, 0x3d, 0x5d, 0xf0, 0xc4, 0x92, 0x0e, 0x05, 0xd0 }; static const uint8_t ac_dsa_vect149_pub_val[] = { /* Y */ 0x9d, 0xcc, 0xc1, 0x37, 0x19, 0x7b, 0xb2, 0x98, 0x24, 0xb1, 0xc1, 0x0e, 0x9e, 0x8d, 0xed, 0xd7, 0x14, 0xef, 0xc9, 0x36, 0xcf, 0xf8, 0x3f, 0x42, 0x63, 0x4d, 0x64, 0x39, 0x1f, 0x9b, 0x7f, 0x4f, 0xc3, 0xa2, 0x31, 0x95, 0x4a, 0x8c, 0x3b, 0xfe, 0x4a, 0xe0, 0xf8, 0x22, 0x25, 0xfd, 0x52, 0xb5, 0xdd, 0xe6, 0xdc, 0xd1, 0x4c, 0x0c, 0xe5, 0x08, 0x59, 0x71, 0xc5, 0x15, 0xda, 0x38, 0x18, 0x34, 0x27, 0xc7, 0xe2, 0xa8, 0xd7, 0x6e, 0x40, 0xef, 0xb6, 0x71, 0xaf, 0x79, 0x7e, 0x0c, 0x57, 0x6e, 0x38, 0x81, 0xd4, 0x34, 0xca, 0x80, 0x9d, 0xd5, 0x53, 0xcc, 0xb0, 0xf7, 0xcd, 0x9f, 0x73, 0xc7, 0xae, 0xa2, 0x26, 0x8f, 0x36, 0xc8, 0x41, 0x70, 0xab, 0x0a, 0xe0, 0x3b, 0x2b, 0x46, 0xa2, 0x19, 0x54, 0x75, 0x64, 0xfd, 0x21, 0xc5, 0x40, 0xb1, 0x60, 0x3a, 0xd7, 0x30, 0x6d, 0x22, 0xa9, 0xeb, 0x8e, 0xf3, 0x7c, 0xa0, 0x8c, 0x2b, 0x28, 0xd1, 0x6c, 0x5b, 0x9c, 0x54, 0xa3, 0x28, 0xeb, 0xb3, 0xc0, 0xf9, 0x50, 0x50, 0x95, 0xc6, 0x12, 0x27, 0x0d, 0x52, 0x63, 0x7c, 0xb5, 0x58, 0x4e, 0xd0, 0x8b, 0xad, 0x71, 0x38, 0xd3, 0x38, 0x8c, 0x63, 0x4b, 0x65, 0x02, 0xfa, 0x64, 0x73, 0xa2, 0xf5, 0x94, 0x04, 0x0b, 0x9a, 0xcc, 0x14, 0x80, 0xb3, 0x43, 0xd2, 0x28, 0x7f, 0xdc, 0x70, 0xd1, 0x6b, 0xa1, 0x4b, 0x1c, 0x21, 0x17, 0x61, 0x2d, 0xcc, 0x58, 0x60, 0xdb, 0xef, 0x83, 0x87, 0xaf, 0x9a, 0xa5, 0xe1, 0x62, 0x1d, 0x37, 0xa3, 0x8f, 0x6c, 0xbe, 0x59, 0x35, 0x67, 0x3e, 0xa3, 0xcb, 0xcd, 0xe4, 0xf3, 0x2a, 0x24, 0x9e, 0xb6, 0xa5, 0xee, 0xd4, 0x1c, 0xfd, 0xca, 0xa4, 0xc8, 0x7e, 0x8b, 0xca, 0xba, 0xa6, 0xbd, 0x1f, 0xe5, 0xa8, 0x79, 0xd1, 0x7e, 0x9a, 0xe3, 0x58, 0x37, 0xce, 0x0f }; /* K = 23dda49474ec6cd13e1b0249ab24f50e9d69e40c6b5c07430780c44f */ static const uint8_t ac_dsa_vect149_out[] = { /* R */ 0x5f, 0x4f, 0x54, 0x49, 0xb8, 0xd0, 0xdd, 0xa3, 0xac, 0x59, 0x0b, 0xa1, 0x64, 0x0d, 0xf9, 0x77, 0x2f, 0xf0, 0x8c, 0xec, 0x08, 0x52, 0x8b, 0xc2, 0xd7, 0x0d, 0x7a, 0xc9, /* S */ 0x5b, 0xea, 0x04, 0xbf, 0xd3, 0x32, 0x48, 0xf2, 0x6a, 0xee, 0x98, 0xca, 0x85, 0x96, 0x77, 0x4e, 0x95, 0xce, 0x68, 0x54, 0x65, 0x17, 0x4d, 0x1c, 0xae, 0xd7, 0xd9, 0x20 }; #define ac_dsa_vect150_prime ac_dsa_vect136_prime #define ac_dsa_vect150_sub_prime ac_dsa_vect136_sub_prime #define ac_dsa_vect150_base ac_dsa_vect136_base static const uint8_t ac_dsa_vect150_ptx[] = { /* Msg */ 0x49, 0x06, 0xdb, 0xdd, 0x9d, 0xa6, 0xdd, 0xff, 0xa1, 0x52, 0xfa, 0x2e, 0x25, 0x0e, 0xea, 0xd3, 0xc6, 0xef, 0x70, 0x83, 0x87, 0xa3, 0xad, 0x64, 0xd3, 0x4a, 0x0e, 0x05, 0x74, 0x59, 0x47, 0x1f, 0x48, 0x75, 0x2f, 0xde, 0x07, 0x86, 0xdb, 0x28, 0xa4, 0xbb, 0xf5, 0x81, 0x14, 0xd8, 0xdc, 0x91, 0xb6, 0x9e, 0x56, 0xbe, 0x3c, 0x49, 0xec, 0x1b, 0x98, 0x80, 0xd9, 0x91, 0x7c, 0x73, 0xab, 0xc8, 0x95, 0x75, 0x4a, 0x60, 0x77, 0x9b, 0x18, 0xbc, 0x95, 0x15, 0x50, 0xb9, 0x57, 0xa7, 0x7c, 0x8c, 0xef, 0xa1, 0x59, 0x90, 0x81, 0x26, 0xcc, 0x80, 0x1c, 0x66, 0x5d, 0x1b, 0x01, 0x10, 0x9b, 0xa6, 0x04, 0xbb, 0x9e, 0x79, 0x7c, 0x7a, 0x37, 0x66, 0x0b, 0xfc, 0x05, 0x93, 0xba, 0xb0, 0x92, 0x4d, 0xf5, 0x80, 0x6c, 0xa8, 0x03, 0x38, 0x1b, 0x24, 0xb0, 0x3d, 0xe3, 0xd0, 0x3b, 0x48, 0x4d, 0x49 }; static const uint8_t ac_dsa_vect150_priv_val[] = { /* X */ 0x0c, 0x53, 0xe5, 0x31, 0x1c, 0x10, 0x4f, 0x11, 0xf6, 0xeb, 0xa6, 0x46, 0xe4, 0x84, 0x0d, 0x19, 0x60, 0xa9, 0x21, 0x18, 0x20, 0x4a, 0x49, 0xe3, 0xec, 0x8d, 0xde, 0xc4 }; static const uint8_t ac_dsa_vect150_pub_val[] = { /* Y */ 0x07, 0x2c, 0xb5, 0x61, 0x25, 0x96, 0xaa, 0x71, 0x61, 0x42, 0xf5, 0xf7, 0x56, 0xc9, 0x54, 0x20, 0x13, 0xf3, 0xf1, 0x62, 0x8c, 0xfc, 0x54, 0x97, 0xeb, 0x1b, 0xa0, 0xaa, 0x51, 0xbd, 0x5a, 0xdb, 0x8e, 0xb8, 0xad, 0xfe, 0x05, 0x9c, 0x0e, 0x08, 0x82, 0xe3, 0xc0, 0x9a, 0x17, 0xd1, 0xf5, 0x1a, 0xcc, 0xb6, 0x87, 0xb2, 0x43, 0xfd, 0x30, 0x52, 0xbb, 0xcb, 0x81, 0xb0, 0x63, 0xc1, 0xe7, 0xd5, 0xbe, 0x06, 0x65, 0x87, 0xeb, 0xca, 0x07, 0x80, 0x06, 0xf6, 0xd6, 0xee, 0x71, 0xa6, 0x9e, 0xf5, 0x9b, 0x63, 0x65, 0xcb, 0xcf, 0x64, 0xd4, 0xcf, 0x1b, 0x92, 0x99, 0xe7, 0x40, 0x30, 0x09, 0x27, 0x20, 0x26, 0xfc, 0x16, 0x65, 0xed, 0x40, 0x3a, 0xb8, 0xde, 0xe4, 0x0e, 0xea, 0x4e, 0xe7, 0xd5, 0x62, 0xaf, 0x00, 0x19, 0x51, 0x92, 0x6d, 0xc8, 0xbf, 0x0c, 0x78, 0x39, 0x84, 0x66, 0x4f, 0xfe, 0xf6, 0x29, 0xcb, 0x59, 0xd7, 0x09, 0xb3, 0xd9, 0xaa, 0x06, 0x80, 0x5d, 0x62, 0xaf, 0xd7, 0x94, 0x54, 0x1a, 0x2b, 0x4c, 0xe0, 0xc5, 0x90, 0x43, 0xac, 0xf7, 0x3e, 0x18, 0xe7, 0x44, 0x53, 0xe8, 0x6a, 0x08, 0x2f, 0x17, 0x91, 0x4b, 0xa6, 0xb2, 0xb0, 0xfa, 0x80, 0xda, 0x83, 0x53, 0xc7, 0xed, 0x91, 0x62, 0x60, 0x95, 0x75, 0xed, 0x41, 0xf8, 0xeb, 0x78, 0xdb, 0xaf, 0xaa, 0x7b, 0x51, 0x8d, 0xe0, 0xc8, 0x5b, 0x17, 0x20, 0xe7, 0xf4, 0x93, 0xb9, 0x14, 0xd5, 0xa3, 0xd2, 0xd0, 0x74, 0x82, 0x73, 0xd1, 0x69, 0xd5, 0x5c, 0x45, 0x55, 0x6b, 0xca, 0xe6, 0x70, 0x57, 0x5c, 0x96, 0xa4, 0x44, 0xfc, 0x1d, 0x78, 0x9f, 0x5b, 0xac, 0xfc, 0x8b, 0x24, 0x13, 0x2b, 0xfb, 0xd7, 0x5b, 0x30, 0x61, 0xfb, 0xac, 0xf2, 0x93, 0x5a, 0x21, 0x9b, 0x0f, 0x2a, 0xc5, 0xdc, 0xad, 0x71, 0x85, 0x16, 0xa9 }; /* K = 3523465a8417b3a05ba1032bf6c42511591f2830b55144f9662bf6c9 */ static const uint8_t ac_dsa_vect150_out[] = { /* R */ 0x77, 0x47, 0x59, 0x00, 0xfc, 0x7f, 0x3e, 0x0b, 0x80, 0xf3, 0x88, 0x4a, 0xf8, 0x60, 0x4e, 0xef, 0x60, 0xff, 0xe4, 0x84, 0xbc, 0x6c, 0xd3, 0xde, 0x12, 0x3f, 0x79, 0x59, /* S */ 0x26, 0xca, 0x92, 0x7d, 0xa0, 0xd1, 0x0b, 0x43, 0xdc, 0x15, 0x21, 0xbf, 0xeb, 0x58, 0xff, 0x34, 0x7e, 0xe1, 0x43, 0xfc, 0x38, 0xdb, 0x45, 0x1c, 0x11, 0xa0, 0x35, 0x10 }; /* [mod = L=2048, N=256, SHA-1] */ static const uint8_t ac_dsa_vect151_prime[] = { /* P */ 0xc1, 0xa5, 0x9d, 0x21, 0x55, 0x73, 0x94, 0x9e, 0x0b, 0x20, 0xa9, 0x74, 0xc2, 0xed, 0xf2, 0xe3, 0x13, 0x7f, 0xf2, 0x46, 0x30, 0x62, 0xf7, 0x5f, 0x1d, 0x13, 0xdf, 0x12, 0xab, 0xa1, 0x07, 0x6b, 0xb2, 0xd0, 0x13, 0x40, 0x2b, 0x60, 0xaf, 0x6c, 0x18, 0x7f, 0xb0, 0xfa, 0x36, 0x21, 0x67, 0xc9, 0x76, 0xc2, 0x61, 0x7c, 0x72, 0x6f, 0x90, 0x77, 0xf0, 0x9e, 0x18, 0xc1, 0x1b, 0x60, 0xf6, 0x50, 0x08, 0x82, 0x5b, 0xd6, 0xc0, 0x2a, 0x1f, 0x57, 0xd3, 0xeb, 0x0a, 0xd4, 0x1c, 0xd5, 0x47, 0xde, 0x43, 0xd8, 0x7f, 0x25, 0x25, 0xf9, 0x71, 0xd4, 0x2b, 0x30, 0x65, 0x06, 0xe7, 0xca, 0x03, 0xbe, 0x63, 0xb3, 0x5f, 0x4a, 0xda, 0x17, 0x2d, 0x0a, 0x06, 0x92, 0x44, 0x40, 0xa1, 0x42, 0x50, 0xd7, 0x82, 0x2a, 0xc2, 0xd5, 0xae, 0xaf, 0xed, 0x46, 0x19, 0xe7, 0x9d, 0x41, 0x58, 0xa7, 0xd5, 0xeb, 0x2d, 0x9f, 0x02, 0x3d, 0xb1, 0x81, 0xa8, 0xf0, 0x94, 0xb2, 0xc6, 0xcb, 0x87, 0xcb, 0x85, 0x35, 0x41, 0x6a, 0xc1, 0x98, 0x13, 0xf0, 0x71, 0x44, 0x66, 0x0c, 0x55, 0x77, 0x45, 0xf4, 0x4a, 0x01, 0xc6, 0xb1, 0x02, 0x90, 0x92, 0xc1, 0x29, 0xb0, 0xd2, 0x71, 0x83, 0xe8, 0x2c, 0x5a, 0x21, 0xa8, 0x01, 0x77, 0xee, 0x74, 0x76, 0xeb, 0x95, 0xc4, 0x66, 0xfb, 0x47, 0x2b, 0xd3, 0xd2, 0xdc, 0x28, 0x6c, 0xe2, 0x58, 0x47, 0xe9, 0x3c, 0xbf, 0xa9, 0xad, 0x39, 0xcc, 0x57, 0x03, 0x5d, 0x0c, 0x7b, 0x64, 0xb9, 0x26, 0xa9, 0xc7, 0xf5, 0xa7, 0xb2, 0xbc, 0x5a, 0xbc, 0xbf, 0xbd, 0xc0, 0xb0, 0xe3, 0xfe, 0xde, 0x3c, 0x1e, 0x02, 0xc4, 0x4a, 0xfc, 0x8a, 0xef, 0xc7, 0x95, 0x7d, 0xa0, 0x7a, 0x0e, 0x5f, 0xd1, 0x23, 0x39, 0xdb, 0x86, 0x67, 0x61, 0x6f, 0x62, 0x28, 0x6d, 0xf8, 0x0d, 0x58, 0xab }; static const uint8_t ac_dsa_vect151_sub_prime[] = { /* Q */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xd6, 0x2c, 0x65, 0xe8, 0xb8, 0x7c, 0x89, 0x79, 0x7f, 0x8f, 0x0c, 0xbf, 0xa5, 0x5e, 0x4a, 0x68, 0x10, 0xe2, 0xc7 }; static const uint8_t ac_dsa_vect151_base[] = { /* G */ 0xae, 0xa5, 0x87, 0x87, 0x40, 0xf1, 0x42, 0x4d, 0x3c, 0x6e, 0xa9, 0xc6, 0xb4, 0x79, 0x96, 0x15, 0xd2, 0x74, 0x92, 0x98, 0xa1, 0x7e, 0x26, 0x20, 0x7f, 0x76, 0xce, 0xf3, 0x40, 0xdd, 0xd3, 0x90, 0xe1, 0xb1, 0xad, 0x6b, 0x6c, 0x00, 0x10, 0xad, 0x01, 0x5a, 0x10, 0x33, 0x42, 0xdd, 0xd4, 0x52, 0xca, 0xc0, 0x24, 0xb3, 0x6e, 0x42, 0xd9, 0xb8, 0xed, 0x52, 0xfa, 0xfa, 0xe7, 0xa1, 0xd3, 0xce, 0x9e, 0x4b, 0x21, 0xf9, 0x10, 0xd1, 0x35, 0x6e, 0xb1, 0x63, 0xa3, 0xe5, 0xa8, 0x18, 0x4c, 0x78, 0x1b, 0xf1, 0x44, 0x92, 0xaf, 0xa2, 0xe4, 0xb0, 0xa5, 0x6d, 0x88, 0x84, 0xfd, 0x01, 0xa6, 0x28, 0xb9, 0x66, 0x27, 0x39, 0xc4, 0x2e, 0x5c, 0x57, 0x95, 0xad, 0xe2, 0xf5, 0xf2, 0x7e, 0x6d, 0xe1, 0xd9, 0x63, 0x91, 0x7c, 0xe8, 0x80, 0x6f, 0xc4, 0x0d, 0x02, 0x1c, 0xd8, 0x7a, 0xa3, 0xaa, 0x3a, 0x9e, 0x4f, 0x0c, 0x2c, 0x4c, 0x45, 0xd2, 0x95, 0x9b, 0x25, 0x78, 0xb2, 0xfb, 0x1a, 0x22, 0x29, 0xc3, 0x7e, 0x18, 0x10, 0x59, 0xb9, 0xd5, 0xe7, 0xb7, 0x86, 0x2f, 0xa8, 0x2e, 0x23, 0x77, 0xa4, 0x9e, 0xd0, 0xf9, 0xdc, 0xa8, 0x20, 0xa5, 0x81, 0x40, 0x79, 0xdd, 0x66, 0x10, 0x71, 0x4e, 0xfa, 0xf8, 0xb0, 0xcc, 0x68, 0x3d, 0x8e, 0x72, 0xe4, 0xc8, 0x84, 0xe6, 0xf9, 0xd4, 0x94, 0x6b, 0x3e, 0x8d, 0x4c, 0xbb, 0x92, 0xad, 0xbb, 0xe7, 0xd4, 0xc4, 0x7c, 0xc3, 0x0b, 0xe7, 0xf8, 0xc3, 0x7c, 0xa8, 0x18, 0x83, 0xa1, 0xaa, 0xc6, 0x86, 0x00, 0x59, 0xff, 0x46, 0x40, 0xa2, 0x9c, 0xca, 0xe7, 0x3d, 0xe2, 0x0b, 0x12, 0xe6, 0x3b, 0x00, 0xa8, 0x8b, 0x2e, 0xe9, 0xba, 0x94, 0xb7, 0x5e, 0xb4, 0x0a, 0x65, 0x6e, 0x15, 0xd9, 0xec, 0x83, 0x73, 0x1c, 0x85, 0xd0, 0xef, 0xfc, 0xb9, 0xef, 0x9f }; static const uint8_t ac_dsa_vect151_ptx[] = { /* Msg */ 0xde, 0x36, 0x05, 0xdb, 0xef, 0xde, 0x35, 0x3c, 0xbe, 0x05, 0xe0, 0xd6, 0x09, 0x86, 0x47, 0xb6, 0xd0, 0x41, 0x46, 0x0d, 0xfd, 0x4c, 0x00, 0x03, 0x12, 0xbe, 0x1a, 0xfe, 0x75, 0x51, 0xfd, 0x3b, 0x93, 0xfe, 0xd7, 0x6a, 0x97, 0x63, 0xc3, 0x4e, 0x00, 0x45, 0x64, 0xb8, 0xf7, 0xdc, 0xac, 0xbd, 0x99, 0xe8, 0x50, 0x30, 0x63, 0x2c, 0x94, 0xe9, 0xb0, 0xa0, 0x32, 0x04, 0x65, 0x23, 0xb7, 0xaa, 0xcd, 0xf9, 0x34, 0xa2, 0xdb, 0xbd, 0xcf, 0xce, 0xef, 0xe6, 0x6b, 0x4e, 0x3d, 0x1c, 0xb2, 0x9e, 0x99, 0x4f, 0xf3, 0xa4, 0x64, 0x8a, 0x8e, 0xdd, 0x9d, 0x58, 0xed, 0x71, 0xf1, 0x23, 0x99, 0xd9, 0x06, 0x24, 0x78, 0x9c, 0x4e, 0x0e, 0xeb, 0xb0, 0xfb, 0xd5, 0x08, 0x0f, 0x7d, 0x73, 0x0f, 0x87, 0x5a, 0x1f, 0x29, 0x07, 0x49, 0x33, 0x4c, 0xb4, 0x05, 0xe9, 0xfd, 0x2a, 0xe1, 0xb4, 0xed, 0x65 }; static const uint8_t ac_dsa_vect151_priv_val[] = { /* X */ 0x5a, 0x42, 0xe7, 0x72, 0x48, 0x35, 0x8f, 0x06, 0xae, 0x98, 0x0a, 0x2c, 0x64, 0xf6, 0xa2, 0x2b, 0xea, 0x2b, 0xf7, 0xb4, 0xfc, 0x00, 0x15, 0x74, 0x50, 0x53, 0xc4, 0x32, 0xb7, 0x13, 0x2a, 0x67 }; static const uint8_t ac_dsa_vect151_pub_val[] = { /* Y */ 0x88, 0x0e, 0x17, 0xc4, 0xae, 0x81, 0x41, 0x75, 0x06, 0x09, 0xd8, 0x25, 0x1c, 0x0b, 0xbd, 0x7a, 0xcf, 0x6d, 0x0b, 0x46, 0x0e, 0xd3, 0x68, 0x8e, 0x9a, 0x5f, 0x99, 0x0e, 0x6c, 0x4b, 0x5b, 0x00, 0x87, 0x5d, 0xa7, 0x50, 0xe0, 0x22, 0x8a, 0x04, 0x10, 0x2a, 0x35, 0xf5, 0x7e, 0x74, 0xb8, 0xd2, 0xf9, 0xb6, 0x95, 0x0f, 0x0d, 0x1d, 0xb8, 0xd3, 0x02, 0xc5, 0xc9, 0x0a, 0x5b, 0x87, 0x86, 0xa8, 0x2c, 0x68, 0xff, 0x5b, 0x17, 0xa5, 0x7a, 0x75, 0x84, 0x96, 0xc5, 0xf8, 0x05, 0x3e, 0x44, 0x84, 0xa2, 0x53, 0xd9, 0x94, 0x22, 0x04, 0xd9, 0xa1, 0x10, 0x9f, 0x4b, 0xd2, 0xa3, 0xec, 0x31, 0x1a, 0x60, 0xcf, 0x69, 0xc6, 0x85, 0xb5, 0x86, 0xd9, 0x86, 0xf5, 0x65, 0xd3, 0x3d, 0xbf, 0x5a, 0xab, 0x70, 0x91, 0xe3, 0x1a, 0xa4, 0x10, 0x2c, 0x4f, 0x4b, 0x53, 0xfb, 0xf8, 0x72, 0xd7, 0x00, 0x15, 0x64, 0x65, 0xb6, 0xc0, 0x75, 0xe7, 0xf7, 0x78, 0x47, 0x1a, 0x23, 0x50, 0x2d, 0xc0, 0xfe, 0xe4, 0x1b, 0x27, 0x1c, 0x83, 0x7a, 0x1c, 0x26, 0x69, 0x16, 0x99, 0xf3, 0x55, 0x0d, 0x06, 0x0a, 0x33, 0x10, 0x99, 0xf6, 0x48, 0x37, 0xcd, 0xde, 0xc6, 0x9c, 0xae, 0xbf, 0x51, 0xbf, 0x4e, 0xc9, 0xf3, 0x6f, 0x2a, 0x22, 0x0f, 0xe7, 0x73, 0xcb, 0x4d, 0x3c, 0x02, 0xd0, 0x44, 0x6d, 0xdd, 0x46, 0x13, 0x35, 0x32, 0xef, 0x1c, 0x3c, 0x69, 0xd4, 0x32, 0xe3, 0x03, 0x50, 0x2b, 0xd0, 0x5a, 0x75, 0x27, 0x9a, 0x78, 0x09, 0xa7, 0x42, 0xac, 0x4a, 0x78, 0x72, 0xb0, 0x7f, 0x19, 0x08, 0x65, 0x40, 0x49, 0x41, 0x93, 0x50, 0xe3, 0x7a, 0x95, 0xf2, 0xef, 0x33, 0x36, 0x1d, 0x8d, 0x87, 0x36, 0xd4, 0x08, 0x3d, 0xc1, 0x4c, 0x0b, 0xb9, 0x72, 0xe1, 0x4d, 0x4c, 0x7b, 0x97, 0xf3, 0xdd, 0xfc, 0xca, 0xef }; /* K = 2cb9c1d617e127a4770d0a946fb947c5100ed0ca59454ea80479f6885ec10534 */ static const uint8_t ac_dsa_vect151_out[] = { /* R */ 0x36, 0x3e, 0x01, 0xc5, 0x64, 0xf3, 0x80, 0xa2, 0x7d, 0x7d, 0x23, 0xb2, 0x07, 0xaf, 0x3f, 0x96, 0x1d, 0x48, 0xfc, 0x09, 0x95, 0x48, 0x7f, 0x60, 0x05, 0x27, 0x75, 0xd7, 0x24, 0xab, 0x3d, 0x10, /* S */ 0x49, 0x16, 0xd9, 0x1b, 0x29, 0x27, 0x29, 0x4e, 0x42, 0x9d, 0x53, 0x7c, 0x06, 0xdd, 0x24, 0x63, 0xd1, 0x84, 0x50, 0x18, 0xcc, 0xa2, 0x87, 0x3e, 0x90, 0xa6, 0xc8, 0x37, 0xb4, 0x45, 0xfd, 0xde }; #define ac_dsa_vect152_prime ac_dsa_vect151_prime #define ac_dsa_vect152_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect152_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect152_ptx[] = { /* Msg */ 0x49, 0x70, 0x7b, 0x65, 0x5b, 0x6d, 0x16, 0x8c, 0x70, 0xba, 0xed, 0xe0, 0x38, 0x66, 0xb0, 0xfb, 0xa6, 0x02, 0x39, 0xad, 0x4c, 0xf8, 0x2f, 0x53, 0xb4, 0x6e, 0x11, 0xb2, 0x6f, 0xa8, 0xf6, 0x27, 0x6f, 0xf6, 0x68, 0x7d, 0x09, 0xe8, 0xed, 0x1e, 0x5d, 0x96, 0x3c, 0x11, 0xe4, 0x76, 0x3b, 0x2e, 0x59, 0xa0, 0x92, 0x7f, 0x01, 0xe8, 0xff, 0xfd, 0x18, 0x94, 0xa6, 0x26, 0x23, 0x27, 0xc8, 0x4b, 0xbb, 0x42, 0x98, 0xd7, 0xd7, 0xfb, 0xca, 0x66, 0x06, 0x73, 0x12, 0x8b, 0xb7, 0xde, 0xa4, 0x61, 0x78, 0x14, 0x64, 0x85, 0x53, 0x9f, 0x9a, 0x8f, 0x88, 0xda, 0xc7, 0x61, 0xd0, 0xd5, 0xd4, 0x5c, 0xb5, 0x57, 0xcd, 0xac, 0x96, 0x0b, 0xe2, 0x3d, 0xd9, 0x19, 0x9a, 0xcd, 0x99, 0xcb, 0x64, 0xd1, 0xfe, 0xe2, 0xca, 0x68, 0xe4, 0x23, 0x46, 0x1a, 0x02, 0xab, 0xb3, 0x4c, 0x1d, 0xc4, 0x50, 0x11 }; static const uint8_t ac_dsa_vect152_priv_val[] = { /* X */ 0x62, 0x17, 0x7a, 0x5b, 0x2f, 0x0b, 0x44, 0x35, 0x2f, 0x64, 0x3a, 0x9e, 0x69, 0xc1, 0xad, 0xb4, 0xa0, 0xb2, 0x92, 0xa5, 0xea, 0x52, 0xfa, 0x80, 0x65, 0xe9, 0x4a, 0xd0, 0x43, 0xd4, 0x62, 0x18 }; static const uint8_t ac_dsa_vect152_pub_val[] = { /* Y */ 0x38, 0x53, 0x49, 0xec, 0xf9, 0x9c, 0xe7, 0x83, 0xd4, 0xe7, 0xa8, 0x0a, 0x7d, 0xd2, 0xc5, 0x33, 0xa3, 0x62, 0x3c, 0x38, 0x26, 0x02, 0x43, 0xac, 0x39, 0x2d, 0x4e, 0xab, 0x6d, 0xed, 0xa5, 0xb7, 0x9b, 0x8f, 0x91, 0x67, 0x92, 0x2e, 0x8b, 0x60, 0x46, 0x86, 0x23, 0xe4, 0x60, 0x3f, 0xa7, 0x68, 0x1f, 0x53, 0x5e, 0x20, 0xde, 0x67, 0x35, 0x31, 0x25, 0x5e, 0x10, 0x8f, 0x54, 0x2a, 0x26, 0xd5, 0xc8, 0x7f, 0x19, 0xe0, 0x63, 0x37, 0x2d, 0x14, 0x28, 0x69, 0xc5, 0xee, 0xf1, 0x32, 0x52, 0x81, 0xfe, 0xe7, 0xf1, 0xc7, 0x4d, 0x2a, 0x96, 0x25, 0x5d, 0x42, 0x0f, 0x27, 0x13, 0x86, 0x4d, 0x55, 0xd3, 0x6f, 0x81, 0x39, 0x19, 0x4f, 0x64, 0x3a, 0x6e, 0x98, 0xb5, 0xbf, 0x97, 0x32, 0xc8, 0x59, 0x74, 0x45, 0xaf, 0x5a, 0x71, 0xe2, 0x3e, 0x2a, 0xc5, 0xca, 0xe3, 0x60, 0x43, 0x23, 0xf7, 0xbf, 0x09, 0x44, 0x97, 0x86, 0x97, 0x4e, 0xd5, 0x3a, 0x57, 0x17, 0xf9, 0xae, 0xc1, 0x4d, 0xd0, 0x1b, 0xd1, 0xcf, 0x27, 0x6b, 0xf3, 0xc6, 0x3d, 0xec, 0x43, 0xc3, 0xec, 0x8e, 0xa6, 0x55, 0x7d, 0xe4, 0x69, 0x91, 0x64, 0x12, 0xf0, 0x45, 0x6c, 0x90, 0xf0, 0x12, 0x91, 0xbb, 0x71, 0x25, 0xe9, 0xf8, 0x55, 0xf4, 0x55, 0xb3, 0x60, 0xc0, 0x3d, 0x4a, 0x7b, 0x4a, 0x8d, 0x40, 0x90, 0xe4, 0x7a, 0xaf, 0x11, 0x11, 0xf3, 0x82, 0xdd, 0x26, 0x05, 0x73, 0x4f, 0xb5, 0x4f, 0x4b, 0x8f, 0xfe, 0x23, 0xc9, 0xde, 0xd2, 0x90, 0x0b, 0x31, 0x21, 0xb4, 0x97, 0xbd, 0x46, 0xd0, 0x45, 0x8a, 0x09, 0xa5, 0xdf, 0x4a, 0xa9, 0xcf, 0x1b, 0xe9, 0x06, 0xf5, 0x54, 0x23, 0x13, 0x38, 0x4f, 0x93, 0xd3, 0x77, 0xba, 0x9e, 0x0a, 0x76, 0x2b, 0x47, 0x93, 0x40, 0x3b, 0x91, 0x4e, 0x52, 0x86, 0x5a, 0xfa, 0xbb, 0x67 }; /* K = 2bae4225836dcbbcad976ed47ecb5f3fc05439358791be244e74d2cf0617fc26 */ static const uint8_t ac_dsa_vect152_out[] = { /* R */ 0x0f, 0xdc, 0x5a, 0x5a, 0x4a, 0x2c, 0x2f, 0x3d, 0xf5, 0x0c, 0x86, 0x83, 0x83, 0xba, 0x80, 0x03, 0x96, 0xae, 0x25, 0x26, 0x5b, 0xe1, 0xa1, 0x47, 0x62, 0xd3, 0x11, 0x0c, 0xbe, 0xb3, 0x48, 0x19, /* S */ 0x4b, 0x41, 0x84, 0x1c, 0xad, 0x45, 0xfe, 0xde, 0xa5, 0xaa, 0xd0, 0xa1, 0x6b, 0x05, 0x3e, 0x88, 0x35, 0x3b, 0x6f, 0x01, 0x02, 0xdf, 0x74, 0xc9, 0xfc, 0xe0, 0x9e, 0x38, 0xf5, 0xe6, 0xc2, 0x77 }; #define ac_dsa_vect153_prime ac_dsa_vect151_prime #define ac_dsa_vect153_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect153_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect153_ptx[] = { /* Msg */ 0x76, 0x3c, 0x1f, 0x15, 0xc5, 0xdd, 0x8a, 0x93, 0xaa, 0xc4, 0xe0, 0x48, 0x65, 0x1c, 0x4e, 0xa8, 0x4a, 0xf1, 0x8a, 0xee, 0x25, 0x5b, 0x56, 0x95, 0x9e, 0xae, 0xb1, 0x87, 0x66, 0x99, 0xbe, 0x75, 0x27, 0x1a, 0xf0, 0xda, 0x6c, 0x3c, 0xa9, 0x36, 0xe9, 0x9b, 0xe4, 0xff, 0x44, 0x36, 0x41, 0x0f, 0x69, 0xae, 0x70, 0x18, 0xb6, 0xc8, 0x43, 0xdc, 0xe9, 0xd8, 0xb7, 0x1a, 0x91, 0xef, 0xa5, 0x3c, 0x39, 0xbe, 0x55, 0xf2, 0x85, 0xfb, 0x8a, 0xd8, 0x54, 0x39, 0x52, 0xfd, 0x3c, 0xa8, 0x92, 0x71, 0xec, 0x23, 0xd3, 0x42, 0xcf, 0xd5, 0x57, 0xbf, 0xb7, 0x2d, 0xb4, 0x3b, 0x43, 0x4d, 0x0e, 0xd5, 0xb3, 0x07, 0x63, 0x03, 0x77, 0x54, 0xbb, 0x0f, 0x78, 0x2a, 0xb0, 0x82, 0x35, 0xa6, 0x4a, 0xbb, 0x7f, 0x0a, 0x82, 0x8f, 0x89, 0x2c, 0xde, 0x7e, 0x05, 0xe3, 0x01, 0xda, 0x7c, 0x21, 0xc0, 0x96 }; static const uint8_t ac_dsa_vect153_priv_val[] = { /* X */ 0x5d, 0x16, 0x97, 0x61, 0xa3, 0x88, 0x7a, 0x9e, 0xca, 0x0f, 0x7e, 0x59, 0xd7, 0x7b, 0x75, 0x67, 0x1a, 0xe0, 0x22, 0x10, 0x00, 0x6e, 0x75, 0x4b, 0xf2, 0xf1, 0x20, 0x91, 0xfc, 0x32, 0x75, 0xb0 }; static const uint8_t ac_dsa_vect153_pub_val[] = { /* Y */ 0x0b, 0xec, 0xd9, 0x17, 0xee, 0xd0, 0xbe, 0x9c, 0xb5, 0x8f, 0xf9, 0xd2, 0x59, 0xa8, 0xfa, 0x41, 0x5b, 0x81, 0x6d, 0xa4, 0xa2, 0x5d, 0x3f, 0x56, 0x9d, 0x7b, 0x9f, 0x31, 0x7b, 0x3f, 0x47, 0xe4, 0x24, 0x4c, 0xde, 0xf3, 0x57, 0x96, 0xfb, 0x45, 0x5c, 0x05, 0xc1, 0x56, 0x45, 0x2f, 0x1c, 0x86, 0x60, 0xf5, 0x34, 0x6f, 0xba, 0x16, 0x92, 0x76, 0x22, 0x14, 0x46, 0xf8, 0x2b, 0xbb, 0x20, 0x27, 0xb0, 0x56, 0xb5, 0x37, 0xcf, 0xd5, 0x9c, 0x57, 0x29, 0x91, 0x66, 0xa6, 0xf2, 0x08, 0x71, 0xc7, 0x4e, 0x6c, 0x1d, 0x3f, 0x5a, 0x37, 0xb7, 0x5e, 0x8d, 0xad, 0x6c, 0xad, 0xcf, 0x12, 0xc9, 0x09, 0x58, 0x6a, 0x32, 0xf1, 0x50, 0xc6, 0x8e, 0x33, 0x23, 0x06, 0xab, 0xef, 0x8b, 0xe1, 0xab, 0xd5, 0x6c, 0x42, 0xd3, 0xc3, 0x69, 0x36, 0xcf, 0x8f, 0x2a, 0xca, 0xce, 0xb7, 0x07, 0x99, 0x4a, 0x3d, 0x4c, 0x05, 0x55, 0xa0, 0x15, 0xde, 0x89, 0x20, 0x37, 0xaa, 0xc6, 0x8e, 0x33, 0x81, 0x3b, 0xf3, 0x05, 0x0f, 0x0f, 0x3a, 0x8d, 0xf5, 0xe8, 0x14, 0x65, 0x85, 0x2f, 0x6a, 0x19, 0x5e, 0xa6, 0x88, 0xac, 0x5d, 0x25, 0x8e, 0xee, 0x20, 0x76, 0xa6, 0xb2, 0x36, 0x36, 0x2e, 0x3d, 0x79, 0x2e, 0x7f, 0x35, 0x8c, 0x6b, 0xa9, 0x94, 0xda, 0x7a, 0x64, 0xb1, 0x82, 0x63, 0x96, 0x96, 0x55, 0x47, 0x3a, 0xaa, 0x37, 0xcb, 0x3c, 0xfb, 0x00, 0xa2, 0x7f, 0x8f, 0xb2, 0x4a, 0x4b, 0x73, 0xb0, 0x25, 0xc9, 0x63, 0x35, 0x43, 0x84, 0x84, 0xe9, 0x58, 0xad, 0x08, 0x48, 0x27, 0x7d, 0xf9, 0x50, 0x84, 0x7d, 0x46, 0xa9, 0x87, 0x4f, 0x10, 0x39, 0xfb, 0xea, 0x7e, 0x08, 0xbc, 0x79, 0x67, 0x5e, 0xf1, 0xdf, 0x6e, 0xf2, 0x12, 0x30, 0xa7, 0x9a, 0x3b, 0x16, 0x13, 0x08, 0xa0, 0xa4, 0x60, 0x0b, 0x53, 0x47 }; /* K = 66011bdefe8cc4a04fbd5d69252bb72da8f9a8d6e00bb7ca75719133ecd86f1d */ static const uint8_t ac_dsa_vect153_out[] = { /* R */ 0x76, 0xe9, 0xb6, 0xef, 0x7e, 0x8d, 0x48, 0xfb, 0xfc, 0x43, 0xbf, 0x46, 0x52, 0x81, 0x59, 0x22, 0x23, 0xfa, 0x7e, 0x0d, 0x99, 0x78, 0x39, 0x2d, 0x35, 0x58, 0x68, 0xc8, 0xa2, 0x02, 0x09, 0xbb, /* S */ 0x7f, 0x9c, 0x8d, 0xea, 0xb5, 0x1c, 0x60, 0xbb, 0x6f, 0x86, 0x6c, 0x76, 0x45, 0x01, 0x38, 0xe0, 0xd2, 0x94, 0x6a, 0xca, 0x6c, 0x5f, 0x88, 0xdf, 0xe3, 0x5a, 0x0c, 0x1b, 0xa4, 0x93, 0xee, 0x47 }; #define ac_dsa_vect154_prime ac_dsa_vect151_prime #define ac_dsa_vect154_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect154_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect154_ptx[] = { /* Msg */ 0x67, 0x85, 0x1d, 0xe9, 0x82, 0xfc, 0x70, 0xf9, 0x69, 0xd8, 0x2f, 0x65, 0xd8, 0x5b, 0x03, 0x32, 0xd6, 0x67, 0x11, 0x4f, 0x27, 0xb5, 0x8b, 0xb9, 0xe5, 0x65, 0xd2, 0xe4, 0x0a, 0xd0, 0x11, 0x98, 0x3d, 0x93, 0x60, 0x49, 0xcc, 0x97, 0xa2, 0x16, 0x26, 0x0f, 0xa2, 0xe4, 0x10, 0xad, 0x6d, 0x6c, 0x98, 0xa5, 0x48, 0x75, 0x9a, 0xa8, 0xe2, 0xd0, 0x22, 0xc1, 0xfb, 0xc1, 0xb1, 0x6b, 0x10, 0xd8, 0x3f, 0xbb, 0xbd, 0x12, 0x6e, 0xc4, 0x3d, 0x5f, 0xed, 0xc4, 0x07, 0xc8, 0x31, 0x46, 0x1c, 0x7f, 0x33, 0xed, 0x94, 0x74, 0x00, 0x31, 0xec, 0xd0, 0xf7, 0x01, 0xc7, 0xb1, 0xdf, 0x88, 0xa2, 0x49, 0x26, 0x5b, 0x3f, 0x60, 0xc3, 0x8f, 0x42, 0x85, 0xbb, 0xc9, 0xba, 0xe1, 0x64, 0xbc, 0x38, 0xe1, 0x62, 0xc2, 0x35, 0xc9, 0xa9, 0xdf, 0xc1, 0xb1, 0x50, 0xea, 0xeb, 0x14, 0x82, 0xeb, 0xed, 0x48 }; static const uint8_t ac_dsa_vect154_priv_val[] = { /* X */ 0x4f, 0x3e, 0x2c, 0x59, 0x01, 0xb6, 0x56, 0x11, 0x8d, 0x88, 0xa4, 0x7f, 0xe2, 0xbd, 0x52, 0xf8, 0x5c, 0xbf, 0x82, 0x8d, 0xbf, 0x9b, 0x67, 0x36, 0x5e, 0x20, 0x13, 0xa9, 0x37, 0xf0, 0xf2, 0xd9 }; static const uint8_t ac_dsa_vect154_pub_val[] = { /* Y */ 0xab, 0x9a, 0x99, 0xff, 0x87, 0x89, 0x9b, 0xd6, 0x65, 0x7b, 0x3a, 0x9e, 0x9b, 0x72, 0x06, 0x99, 0x6b, 0xbc, 0x77, 0x99, 0xdd, 0xe5, 0x7d, 0xcf, 0xff, 0x80, 0x98, 0x87, 0x5d, 0xc4, 0x65, 0x0d, 0x79, 0x1e, 0x90, 0xbc, 0x4c, 0xee, 0x10, 0x98, 0x9b, 0xf4, 0x9e, 0xb5, 0xe6, 0x23, 0x08, 0x57, 0xf9, 0x68, 0x41, 0xae, 0x83, 0x62, 0xe4, 0xee, 0x5c, 0xc8, 0x60, 0x2f, 0x6a, 0x1a, 0x2c, 0x6f, 0x8f, 0x2f, 0x68, 0x0a, 0xd3, 0xa7, 0x2b, 0x0e, 0x07, 0x51, 0x1e, 0xad, 0x30, 0x1f, 0x57, 0x52, 0x78, 0xa0, 0x74, 0x13, 0x8a, 0xa4, 0xea, 0xa5, 0x39, 0x19, 0xe3, 0x4f, 0x00, 0x1c, 0xbe, 0x2d, 0xcb, 0xc3, 0x45, 0xc7, 0x7f, 0x56, 0x87, 0xd0, 0x71, 0x98, 0x1a, 0x4d, 0xca, 0x29, 0xd0, 0x26, 0xbb, 0x53, 0xec, 0x9c, 0xf0, 0x3a, 0x88, 0xd6, 0x3c, 0x52, 0x20, 0x6d, 0x35, 0x1f, 0x8f, 0xca, 0x10, 0x23, 0x9e, 0x84, 0xf4, 0x91, 0x5c, 0xe3, 0x47, 0xf4, 0x8d, 0x65, 0x0a, 0xaa, 0xa6, 0xb0, 0x2d, 0x31, 0x64, 0x97, 0x3f, 0x82, 0xfc, 0x0e, 0x0f, 0x83, 0xa2, 0xd4, 0x58, 0xaf, 0x65, 0x73, 0x6d, 0x7e, 0x0d, 0xbb, 0x26, 0x4f, 0xd7, 0x79, 0xff, 0xd5, 0xa3, 0xf0, 0x66, 0x58, 0x44, 0x94, 0x59, 0x85, 0x26, 0xcd, 0x67, 0xe1, 0x2d, 0x6c, 0x67, 0x96, 0x5a, 0x70, 0xec, 0x3f, 0x09, 0xe2, 0xcc, 0x44, 0x7f, 0x17, 0x7e, 0xc8, 0x76, 0x04, 0xb5, 0x31, 0x48, 0x66, 0x83, 0x02, 0x5e, 0x3b, 0x52, 0x0a, 0x26, 0xe6, 0x9c, 0x95, 0x8c, 0xf8, 0x43, 0x5f, 0x7c, 0x6c, 0xe5, 0x64, 0xf0, 0xa7, 0x2d, 0x1f, 0xc4, 0x72, 0x05, 0xa5, 0x0b, 0x39, 0xd5, 0x16, 0xb1, 0x4a, 0x47, 0x6f, 0x6c, 0x2d, 0xca, 0xce, 0x50, 0x33, 0x9c, 0xae, 0x20, 0xcd, 0x34, 0x21, 0xa7, 0x5f, 0x6d, 0x37, 0x7b, 0x8b }; /* K = 72bd0808076af461353d98cb0191ec76a7c04fbe3a7f793e390cc773434c1d4f */ static const uint8_t ac_dsa_vect154_out[] = { /* R */ 0x76, 0x3e, 0x89, 0xfc, 0x8b, 0x2a, 0x09, 0x0b, 0x75, 0x81, 0x2a, 0xef, 0xa5, 0x5d, 0xe7, 0xb7, 0xcd, 0x61, 0xec, 0x3f, 0xdf, 0x87, 0x30, 0xce, 0x16, 0xb0, 0x5a, 0x7b, 0x94, 0x56, 0xfd, 0x2d, /* S */ 0x4a, 0x97, 0x08, 0x6b, 0x67, 0x17, 0xa7, 0x3a, 0x6b, 0xe6, 0xd4, 0xa9, 0x5b, 0x83, 0x43, 0xbd, 0x20, 0xb0, 0xd7, 0xb5, 0x1c, 0x3d, 0xa1, 0xd8, 0x6c, 0x58, 0x52, 0x35, 0x08, 0x71, 0x37, 0x9b }; #define ac_dsa_vect155_prime ac_dsa_vect151_prime #define ac_dsa_vect155_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect155_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect155_ptx[] = { /* Msg */ 0x61, 0x6d, 0xe9, 0xdd, 0x23, 0xeb, 0xed, 0xe4, 0x28, 0xe0, 0x32, 0xdb, 0x78, 0x38, 0x10, 0x8a, 0x22, 0x4f, 0x7a, 0xca, 0x57, 0xb1, 0xdf, 0x87, 0xf0, 0x31, 0xfe, 0x1d, 0x86, 0x08, 0x3d, 0x68, 0x8c, 0x5c, 0x3e, 0xf0, 0x78, 0xe6, 0x4d, 0x8d, 0x5a, 0x9e, 0x61, 0x2d, 0x39, 0x83, 0x46, 0x0c, 0xa1, 0xf8, 0x16, 0xf7, 0x87, 0xc0, 0x3c, 0xa4, 0x3a, 0x1f, 0xd8, 0xce, 0x13, 0x86, 0x55, 0xdf, 0x67, 0x70, 0x56, 0x36, 0x4c, 0x0e, 0xab, 0x8e, 0x04, 0x93, 0xc0, 0x7b, 0xd4, 0xb2, 0xb0, 0x50, 0x22, 0x19, 0x09, 0x32, 0xde, 0x79, 0x4f, 0x19, 0x5d, 0xbe, 0xf2, 0x97, 0x09, 0x3e, 0x7d, 0xa1, 0xc4, 0x30, 0x4d, 0xb4, 0x0b, 0x63, 0xca, 0x53, 0xe1, 0xb8, 0xbc, 0xda, 0xd9, 0x13, 0xd7, 0xa9, 0x02, 0xaf, 0x02, 0x5c, 0x36, 0x7c, 0x48, 0xde, 0x38, 0x7f, 0x1a, 0x9b, 0xcd, 0x7c, 0xa4, 0x2e }; static const uint8_t ac_dsa_vect155_priv_val[] = { /* X */ 0x4d, 0x02, 0x40, 0xa3, 0x4d, 0xd4, 0x5a, 0xac, 0xaa, 0xb9, 0xe2, 0x4e, 0x48, 0x38, 0x22, 0x3c, 0xcb, 0x75, 0x9f, 0x1d, 0x93, 0xfa, 0x87, 0x91, 0xf2, 0x8f, 0xc7, 0xc2, 0xe8, 0x31, 0x88, 0x20 }; static const uint8_t ac_dsa_vect155_pub_val[] = { /* Y */ 0x58, 0x4e, 0xae, 0xed, 0x2d, 0xc7, 0x85, 0xd8, 0xe2, 0xb8, 0xc8, 0x5f, 0xd0, 0xe5, 0xec, 0x25, 0x1f, 0x13, 0x49, 0x58, 0xbd, 0x9e, 0xea, 0xe4, 0xf7, 0x9f, 0x86, 0x2b, 0x62, 0xcf, 0x60, 0x2a, 0xb1, 0x0d, 0x22, 0xec, 0xa4, 0x99, 0x04, 0x2f, 0x2c, 0x87, 0x5f, 0x27, 0x08, 0xba, 0x0d, 0x69, 0x7a, 0xf3, 0x9f, 0x23, 0xf5, 0xe0, 0xb7, 0xde, 0x4f, 0xf7, 0x96, 0x4b, 0xab, 0x12, 0x79, 0xef, 0xa2, 0xaa, 0x79, 0x7a, 0x2d, 0x21, 0xe7, 0x88, 0xd2, 0x49, 0xf4, 0x26, 0x93, 0xcd, 0xbf, 0xd7, 0x1f, 0xdc, 0xb1, 0xaa, 0x93, 0xb7, 0x9b, 0xac, 0x0d, 0xbc, 0xb5, 0x87, 0xbb, 0xff, 0x4e, 0xf1, 0x5a, 0x37, 0x99, 0xa5, 0xfc, 0xa8, 0xb1, 0x58, 0x98, 0x38, 0xe3, 0x00, 0x96, 0x06, 0x9c, 0xa7, 0x93, 0x1f, 0x74, 0x08, 0x81, 0x5b, 0x58, 0x5d, 0x14, 0x0a, 0x74, 0x7d, 0xe4, 0x3b, 0xd9, 0x2c, 0xac, 0x3f, 0x9a, 0x9b, 0x18, 0x62, 0xfd, 0x70, 0x46, 0x73, 0xe1, 0xe5, 0x87, 0x10, 0xc1, 0x6d, 0xdb, 0xe7, 0xe5, 0x2d, 0x31, 0xa7, 0xdf, 0x15, 0x97, 0x49, 0x58, 0xb1, 0x28, 0x81, 0x16, 0xed, 0x98, 0xff, 0x24, 0x7f, 0x50, 0x28, 0xce, 0xc8, 0x6d, 0x9e, 0xb9, 0x7b, 0x12, 0x6a, 0x48, 0xad, 0xc9, 0x52, 0xe9, 0x0d, 0xc5, 0x2f, 0x2b, 0xd7, 0x81, 0x03, 0x55, 0xaa, 0x90, 0x75, 0x05, 0x1f, 0x26, 0x12, 0x9c, 0x2d, 0x2f, 0xb0, 0xba, 0x80, 0x66, 0xe4, 0x14, 0x98, 0x9d, 0x92, 0xe2, 0x9e, 0x68, 0x99, 0x60, 0xe3, 0x3e, 0xe5, 0x6c, 0xa6, 0x2d, 0x71, 0x4a, 0x42, 0xcb, 0x74, 0x87, 0xf7, 0x0c, 0x0c, 0x0b, 0xa6, 0x43, 0xfa, 0x9d, 0xd5, 0xf8, 0x52, 0x59, 0xfd, 0xec, 0xd4, 0x9f, 0xa9, 0x70, 0xc8, 0x32, 0x26, 0x82, 0xb1, 0x14, 0xf2, 0x64, 0x78, 0x37, 0x63, 0x7a, 0xbc, 0x0e, 0xd2 }; /* K = 325e19d8b7ee8c8d9cb7e70bb5417035a8183bdf73149a45f0e83f3af68decc0 */ static const uint8_t ac_dsa_vect155_out[] = { /* R */ 0x74, 0x8f, 0x46, 0x6b, 0x7f, 0xdc, 0xdf, 0xa7, 0x70, 0x17, 0xc8, 0x65, 0xa3, 0x3b, 0x1d, 0xad, 0x4d, 0xb9, 0x9d, 0xbd, 0x63, 0xef, 0xa1, 0xc8, 0x73, 0x45, 0xc4, 0x83, 0x3b, 0x06, 0x32, 0xac, /* S */ 0x0b, 0xf9, 0x93, 0x8e, 0x79, 0x72, 0xeb, 0xb0, 0x0f, 0xb0, 0xa3, 0xc0, 0xc2, 0x47, 0x6d, 0x25, 0x09, 0xdb, 0x23, 0xaf, 0xca, 0xec, 0xb1, 0x7d, 0xc5, 0x71, 0x90, 0x53, 0x17, 0xeb, 0x8c, 0xa7 }; #define ac_dsa_vect156_prime ac_dsa_vect151_prime #define ac_dsa_vect156_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect156_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect156_ptx[] = { /* Msg */ 0x11, 0x5f, 0x0a, 0x8b, 0xe3, 0x4e, 0x84, 0xd0, 0x9b, 0xdc, 0xca, 0x69, 0xd1, 0x9c, 0xe1, 0x7d, 0xd6, 0x7d, 0xf7, 0x39, 0xaa, 0x4f, 0xc6, 0xe8, 0x07, 0x70, 0x76, 0x53, 0x5f, 0x39, 0xaf, 0x83, 0x02, 0x88, 0x14, 0x71, 0xa5, 0xfb, 0x0e, 0x18, 0x39, 0xa3, 0xaa, 0x76, 0xdf, 0xda, 0x4b, 0xde, 0x2f, 0x9f, 0xa2, 0x5f, 0xa5, 0x82, 0xb7, 0x56, 0xa4, 0x96, 0x6d, 0x75, 0x32, 0x0a, 0xc1, 0x99, 0x54, 0x72, 0x27, 0x16, 0x66, 0x15, 0x6e, 0xa8, 0x6c, 0x19, 0xa2, 0x39, 0x89, 0x5e, 0x55, 0x78, 0xa3, 0xc3, 0x9b, 0x0b, 0xa3, 0x25, 0x88, 0x27, 0xa0, 0x1d, 0xf1, 0xf3, 0x0d, 0xb2, 0x2d, 0xdb, 0xc2, 0x67, 0xc9, 0xe2, 0x90, 0xd5, 0xd4, 0x57, 0xd0, 0xa9, 0x4d, 0x8a, 0xa7, 0x3f, 0x8e, 0x79, 0xf3, 0xac, 0xd3, 0x1b, 0xde, 0xee, 0x7a, 0xa3, 0x2c, 0x79, 0x2c, 0x22, 0xac, 0xb8, 0x07, 0xba }; static const uint8_t ac_dsa_vect156_priv_val[] = { /* X */ 0x08, 0x00, 0x39, 0x4a, 0x2c, 0xcd, 0xd1, 0xf5, 0x58, 0x00, 0x56, 0x53, 0x74, 0xd4, 0x6b, 0xe9, 0xbb, 0xc1, 0x19, 0x0b, 0x55, 0xee, 0xe2, 0x65, 0x02, 0xbf, 0x5f, 0x24, 0x59, 0xac, 0x5c, 0xc0 }; static const uint8_t ac_dsa_vect156_pub_val[] = { /* Y */ 0x2e, 0x06, 0x07, 0x3f, 0x59, 0x19, 0x6d, 0x3e, 0x29, 0xba, 0x71, 0x8e, 0x84, 0x48, 0x9b, 0x6f, 0x44, 0x7f, 0xd6, 0xf6, 0x7a, 0x9e, 0xe6, 0x35, 0x7c, 0x5e, 0x8a, 0x58, 0xfa, 0x3c, 0x4f, 0xb6, 0xac, 0x83, 0x14, 0xeb, 0xdc, 0x3b, 0x4d, 0x61, 0x27, 0xf2, 0xb4, 0xd2, 0x11, 0x2c, 0x27, 0x79, 0x9f, 0x0c, 0x1a, 0xc5, 0xf7, 0x94, 0x6b, 0x56, 0x07, 0x21, 0x2d, 0x79, 0x67, 0x41, 0xcc, 0x3b, 0xe1, 0x27, 0x21, 0x2a, 0x12, 0x5e, 0xdc, 0x3a, 0x7a, 0x91, 0xa5, 0x25, 0xcd, 0x62, 0x15, 0x21, 0x99, 0xb1, 0x8b, 0x4f, 0x1d, 0xc3, 0x32, 0x21, 0x5d, 0x65, 0xd6, 0x4a, 0xd0, 0x60, 0x98, 0xff, 0x21, 0x80, 0xab, 0x47, 0xbb, 0x57, 0x28, 0x72, 0x0c, 0x93, 0x7e, 0x12, 0x07, 0x64, 0x9e, 0xd1, 0x9c, 0x88, 0x33, 0x31, 0xea, 0x41, 0x5f, 0xaa, 0x51, 0xc5, 0x56, 0xd1, 0x26, 0x49, 0x66, 0x5f, 0x1e, 0xce, 0x88, 0x0d, 0x05, 0x5a, 0x2a, 0x79, 0x3a, 0xdc, 0x74, 0xb3, 0x8f, 0x15, 0xf5, 0x0a, 0xa9, 0xb4, 0x67, 0x86, 0xd9, 0x07, 0x01, 0x7b, 0x1d, 0x62, 0x35, 0xc4, 0x3b, 0x37, 0xc2, 0x03, 0x6a, 0x16, 0x40, 0xf6, 0xbf, 0xe3, 0xbe, 0xc2, 0xb9, 0x5b, 0x43, 0x00, 0xa3, 0xbd, 0x78, 0xf4, 0x71, 0xf6, 0xaa, 0x56, 0xe5, 0xe6, 0x34, 0x75, 0x71, 0x99, 0x6f, 0x77, 0x86, 0x70, 0xad, 0x94, 0xef, 0xaf, 0x20, 0x99, 0x1c, 0x55, 0x59, 0x24, 0xfd, 0x55, 0xcd, 0x51, 0x8d, 0xf0, 0xbd, 0x55, 0x8f, 0xaa, 0xc3, 0xf9, 0x82, 0x6a, 0x86, 0x5a, 0x3c, 0xed, 0x0f, 0x59, 0xcb, 0xea, 0x45, 0xc6, 0x54, 0x12, 0xbd, 0xdf, 0x8f, 0x2a, 0x8a, 0xab, 0x3d, 0xfc, 0xa1, 0xdf, 0xf5, 0x03, 0x74, 0x16, 0x3f, 0xa8, 0x99, 0xcc, 0x7f, 0x7f, 0x10, 0x8b, 0x19, 0x4f, 0xc9, 0x55, 0xca, 0xbe, 0x9c, 0xa4 }; /* K = 617d00444047d8e943e429947d28b4718a8b7603475e5453cacb80fa704f90f1 */ static const uint8_t ac_dsa_vect156_out[] = { /* R */ 0x5c, 0x8d, 0x76, 0x44, 0x07, 0x35, 0x05, 0x5c, 0x1b, 0x36, 0x69, 0x8d, 0xa7, 0x39, 0x03, 0xb3, 0x32, 0xd6, 0x4c, 0xa5, 0x60, 0x30, 0x46, 0x14, 0x4f, 0xb7, 0x66, 0x8b, 0x1a, 0xca, 0xc3, 0x37, /* S */ 0x11, 0xc5, 0x4e, 0xfb, 0xd4, 0x92, 0xa7, 0x14, 0x7a, 0x1c, 0x50, 0xb2, 0x87, 0x37, 0x7b, 0x52, 0xd2, 0x19, 0x39, 0x07, 0xd5, 0xbb, 0x63, 0x61, 0x59, 0xc1, 0x53, 0x18, 0xa4, 0x80, 0xca, 0x6a }; #define ac_dsa_vect157_prime ac_dsa_vect151_prime #define ac_dsa_vect157_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect157_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect157_ptx[] = { /* Msg */ 0x3c, 0x1f, 0x2b, 0x92, 0xdb, 0x1b, 0x43, 0x15, 0x83, 0x7b, 0xaa, 0x86, 0x30, 0x43, 0xa9, 0xb4, 0x49, 0x6a, 0x78, 0x14, 0x3c, 0xa7, 0x4f, 0x6e, 0x67, 0x18, 0x1f, 0xac, 0xf5, 0x0a, 0x6e, 0x08, 0xd2, 0x79, 0x45, 0xd0, 0x0e, 0x7b, 0x06, 0xf9, 0xc5, 0x7c, 0x0e, 0x2f, 0x15, 0x27, 0xc9, 0x4b, 0xce, 0xce, 0xa6, 0x99, 0x31, 0x75, 0xd0, 0xf0, 0x9b, 0xab, 0x4f, 0x15, 0xaf, 0x55, 0xab, 0x7a, 0xa9, 0xb1, 0x6b, 0x48, 0xc9, 0x4a, 0x6a, 0x99, 0xc2, 0xd7, 0xe4, 0x77, 0xb7, 0x44, 0xcd, 0x27, 0xcd, 0xb9, 0xb0, 0xbb, 0xf8, 0x10, 0x75, 0x6b, 0xc6, 0x37, 0x6f, 0xa1, 0x5b, 0xfb, 0xea, 0x3c, 0x93, 0x76, 0xca, 0x69, 0x79, 0x75, 0x2f, 0xdb, 0x3a, 0x65, 0x5a, 0xff, 0xd6, 0xc0, 0x18, 0x6d, 0x1a, 0x34, 0x35, 0x5d, 0xae, 0xa8, 0xcc, 0x75, 0xac, 0xf9, 0x6b, 0x88, 0x47, 0xdb, 0xdb, 0x8d }; static const uint8_t ac_dsa_vect157_priv_val[] = { /* X */ 0x59, 0xed, 0xd0, 0x34, 0x8c, 0xa6, 0xa8, 0x5c, 0x40, 0x88, 0x16, 0x54, 0x9e, 0x9c, 0x58, 0x33, 0x8e, 0xf9, 0x2f, 0x56, 0xed, 0xd8, 0xfa, 0x75, 0x32, 0x26, 0xac, 0xc0, 0xe1, 0x81, 0x75, 0x1c }; static const uint8_t ac_dsa_vect157_pub_val[] = { /* Y */ 0xa4, 0x74, 0x2d, 0x3c, 0x7e, 0x76, 0x81, 0xb0, 0x1c, 0xd6, 0xaa, 0xe1, 0x74, 0x23, 0xcc, 0x78, 0x04, 0x91, 0xd0, 0x8d, 0xf7, 0x3b, 0x4a, 0x71, 0xed, 0xf7, 0xbd, 0x2e, 0xe2, 0x9c, 0x69, 0x8c, 0xd6, 0x6d, 0xba, 0x04, 0x91, 0x68, 0x8f, 0xc7, 0xee, 0xfb, 0x4d, 0x70, 0x91, 0x47, 0xbf, 0xd4, 0xc8, 0xc4, 0xb7, 0x97, 0xab, 0x91, 0x97, 0x57, 0x3b, 0x5d, 0x36, 0x59, 0x9c, 0x4a, 0x59, 0x2c, 0x46, 0x69, 0x55, 0xe8, 0x0a, 0xe5, 0xd2, 0x12, 0x2b, 0xca, 0xa5, 0xd0, 0xe1, 0xd9, 0x4b, 0x4e, 0xd2, 0xa9, 0x9b, 0x1a, 0xf5, 0xd0, 0x8e, 0xec, 0x86, 0xc3, 0x77, 0x53, 0xa3, 0xc3, 0x65, 0x6c, 0x0f, 0xef, 0x0d, 0x2c, 0x47, 0x1e, 0x4f, 0xfa, 0x0f, 0xb1, 0x63, 0x17, 0x4a, 0x4d, 0xf1, 0x70, 0x78, 0x79, 0xfe, 0x08, 0x36, 0x55, 0x29, 0x11, 0x27, 0xa3, 0xbb, 0xb0, 0x59, 0x7e, 0x23, 0x80, 0x2e, 0x42, 0x4e, 0xfe, 0x40, 0x16, 0x36, 0x03, 0x64, 0x50, 0x6c, 0x8a, 0xb4, 0x08, 0x1f, 0x0a, 0x95, 0x69, 0x2c, 0x26, 0x29, 0x53, 0x7f, 0x05, 0x30, 0x61, 0x81, 0xdb, 0x66, 0x9b, 0xcf, 0xaf, 0x01, 0xc1, 0x53, 0x95, 0x61, 0x42, 0x38, 0xa2, 0x30, 0x94, 0x29, 0x19, 0x95, 0x55, 0x14, 0x26, 0x39, 0xb3, 0x44, 0x3e, 0xf8, 0x5a, 0xf7, 0x4b, 0x5e, 0x88, 0xb7, 0xc7, 0x0a, 0x81, 0x67, 0x33, 0x4f, 0x27, 0x29, 0x4a, 0x8b, 0xa1, 0x26, 0x66, 0x95, 0xa3, 0x69, 0x37, 0x2b, 0xad, 0xcb, 0xa7, 0x62, 0x3a, 0xa5, 0x8c, 0xbc, 0xf2, 0x5b, 0x4b, 0xbe, 0x66, 0x3d, 0x4e, 0xce, 0xd1, 0xa1, 0x8e, 0x77, 0x53, 0x39, 0x1d, 0x6c, 0x53, 0x85, 0x4c, 0x4a, 0x8d, 0x0e, 0xe1, 0xa7, 0x90, 0xa1, 0xa2, 0x10, 0x71, 0xf1, 0x38, 0x6c, 0x23, 0x5a, 0xc2, 0x61, 0x82, 0xd0, 0x1a, 0x1e, 0x81, 0xec, 0xf8 }; /* K = 0a96189b8740005f215ae5c5a8aa8686dbb4c353d2c55deb3904bccc4f9a9b9b */ static const uint8_t ac_dsa_vect157_out[] = { /* R */ 0x31, 0xc1, 0xc6, 0xae, 0xe7, 0xed, 0x54, 0x1a, 0x28, 0x1f, 0x37, 0x63, 0x2b, 0x27, 0xba, 0x88, 0x53, 0x6f, 0x36, 0xbc, 0xd9, 0x2f, 0xcc, 0x36, 0x0d, 0xa0, 0x41, 0xf4, 0x19, 0x7f, 0x7f, 0x95, /* S */ 0x45, 0xe1, 0x01, 0x9b, 0x2a, 0x17, 0x02, 0xb5, 0xdf, 0x1e, 0xef, 0x4f, 0xb7, 0xdf, 0x6a, 0x53, 0xaa, 0xa6, 0x6e, 0xcb, 0x8b, 0xe5, 0xcd, 0x2e, 0x28, 0xb3, 0x53, 0xc8, 0x70, 0xe0, 0x1f, 0x41 }; #define ac_dsa_vect158_prime ac_dsa_vect151_prime #define ac_dsa_vect158_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect158_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect158_ptx[] = { /* Msg */ 0xad, 0x38, 0x9f, 0x53, 0x23, 0x5d, 0xeb, 0x06, 0x8f, 0x70, 0x97, 0x78, 0x03, 0x30, 0x74, 0x64, 0x93, 0x60, 0x7f, 0xdb, 0x7e, 0x11, 0x70, 0xbd, 0x1f, 0xe0, 0xda, 0x01, 0x27, 0x14, 0xb8, 0xf1, 0xb1, 0x28, 0xc6, 0x9a, 0x53, 0xd7, 0xdd, 0x26, 0x46, 0xb0, 0x97, 0x20, 0x88, 0x3e, 0x23, 0x87, 0xdd, 0x15, 0xd4, 0x65, 0x64, 0xad, 0xff, 0x66, 0x42, 0x37, 0x2c, 0x83, 0x82, 0x87, 0xba, 0xfa, 0x5f, 0x43, 0x43, 0xa2, 0x7e, 0xc8, 0x06, 0x97, 0x70, 0xe5, 0xc3, 0x67, 0x54, 0x88, 0x33, 0xfd, 0xdc, 0xc5, 0xf8, 0x61, 0x7a, 0xaf, 0x41, 0x28, 0x9d, 0x96, 0xdd, 0x40, 0xf1, 0x09, 0x8d, 0xed, 0x9f, 0xbb, 0x11, 0x0a, 0xeb, 0x14, 0xd6, 0x92, 0x72, 0xdf, 0xb2, 0xdd, 0x7d, 0x75, 0xe7, 0xa8, 0x8d, 0xc4, 0x14, 0x7f, 0x27, 0xc6, 0x4e, 0xb1, 0xbf, 0x0a, 0xa0, 0x56, 0x9b, 0xbd, 0xa3, 0x20 }; static const uint8_t ac_dsa_vect158_priv_val[] = { /* X */ 0x19, 0xff, 0x4e, 0xec, 0x2e, 0x47, 0x30, 0x1d, 0x0b, 0x70, 0xa8, 0x26, 0xda, 0xd8, 0x22, 0xb6, 0x09, 0xc9, 0x97, 0xbc, 0x1b, 0x3a, 0x9d, 0x7c, 0xbd, 0x3d, 0x1d, 0x22, 0x52, 0xe8, 0xac, 0xda }; static const uint8_t ac_dsa_vect158_pub_val[] = { /* Y */ 0xbf, 0x4a, 0xa2, 0xd8, 0x67, 0xb4, 0x33, 0xf9, 0x34, 0xd1, 0xd5, 0x67, 0x01, 0x0d, 0xbe, 0x06, 0x79, 0x05, 0xf4, 0xe3, 0x5d, 0x7c, 0xe5, 0x68, 0xb5, 0x5a, 0xba, 0x69, 0x4d, 0x12, 0xdf, 0xba, 0x95, 0xc2, 0x35, 0x07, 0x84, 0x61, 0xaa, 0xab, 0x81, 0xf1, 0xe4, 0xdf, 0x32, 0x31, 0x9e, 0x57, 0x59, 0xc5, 0x26, 0x3e, 0xbf, 0xbe, 0xbf, 0x79, 0x60, 0xc5, 0x7a, 0xed, 0x79, 0xbf, 0x2d, 0xe3, 0x89, 0x48, 0xf8, 0xff, 0x79, 0xef, 0x26, 0xd6, 0x6a, 0x7f, 0x98, 0x38, 0x41, 0x17, 0xdc, 0xe1, 0xf3, 0x86, 0xae, 0xcc, 0x43, 0x69, 0xaf, 0xb2, 0xe0, 0xde, 0x77, 0xcc, 0xd2, 0xe7, 0xde, 0xc3, 0x28, 0x61, 0x42, 0x43, 0xef, 0xfa, 0xc6, 0x07, 0xc8, 0xd5, 0xfc, 0x5c, 0x7c, 0x0b, 0x11, 0x43, 0x96, 0x35, 0x73, 0xd9, 0xf1, 0x06, 0xfc, 0xec, 0xf2, 0xe1, 0x5c, 0x67, 0xa3, 0xbf, 0xf6, 0x90, 0x8b, 0x28, 0x6d, 0x0e, 0x41, 0x31, 0xfb, 0x81, 0x62, 0x2f, 0xff, 0x9e, 0x10, 0xf5, 0x77, 0x1a, 0xfe, 0xde, 0x22, 0x76, 0xe8, 0x34, 0x4d, 0x9a, 0xe2, 0xf4, 0x93, 0xfb, 0x48, 0x56, 0xd1, 0xba, 0x57, 0x60, 0xdd, 0xae, 0x38, 0xaf, 0x7d, 0xdc, 0xa4, 0x09, 0xe7, 0x90, 0x72, 0x68, 0x69, 0x1b, 0xaa, 0x33, 0xdf, 0xcb, 0xfd, 0x69, 0xe9, 0xaa, 0x9f, 0xaa, 0x79, 0xcf, 0x30, 0x3a, 0xc8, 0xb1, 0xfa, 0x07, 0xc1, 0xd4, 0x0d, 0x1c, 0xea, 0x01, 0xe8, 0xba, 0x0d, 0x65, 0x26, 0x5f, 0x4c, 0x6a, 0xab, 0xb1, 0x6e, 0xbe, 0x2f, 0x6e, 0xf5, 0xaa, 0xac, 0x25, 0xc0, 0xc2, 0x73, 0x0c, 0xbe, 0xed, 0xc1, 0x77, 0x66, 0x7e, 0xe0, 0x2b, 0xf4, 0x52, 0x34, 0x18, 0xa9, 0x86, 0xd5, 0xb8, 0x7a, 0x9b, 0x75, 0xec, 0x20, 0x1a, 0xf0, 0xf1, 0x96, 0x1c, 0xd5, 0x1b, 0x85, 0x87, 0x91, 0x47, 0xe6, 0x07 }; /* K = 7ff51bb8946842c7e2f7245e73461e2b0820528548f7ecb53bcadc7a20e826b7 */ static const uint8_t ac_dsa_vect158_out[] = { /* R */ 0x2f, 0x94, 0x84, 0xaa, 0xed, 0xa9, 0xdc, 0xb8, 0x8d, 0x2d, 0x36, 0x44, 0xdb, 0x2c, 0x58, 0xee, 0xfe, 0x2e, 0x76, 0x95, 0xa6, 0xc8, 0xbe, 0x9a, 0xbe, 0x97, 0x17, 0x3e, 0xfc, 0x9c, 0x0b, 0xc3, /* S */ 0x01, 0x66, 0xa7, 0xbf, 0x4e, 0x8b, 0xda, 0x6b, 0x86, 0x39, 0x69, 0x43, 0xa7, 0x4a, 0x8e, 0xbf, 0xc6, 0x03, 0xa8, 0x5e, 0xd2, 0x87, 0xbf, 0x3f, 0x5a, 0x30, 0xdd, 0x0b, 0xbe, 0x49, 0xcd, 0x8b }; #define ac_dsa_vect159_prime ac_dsa_vect151_prime #define ac_dsa_vect159_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect159_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect159_ptx[] = { /* Msg */ 0x12, 0xf9, 0x58, 0x2e, 0x3a, 0x1a, 0x76, 0xf2, 0x99, 0xd7, 0x2d, 0x9b, 0x15, 0x02, 0xb9, 0x90, 0x60, 0x80, 0x26, 0x60, 0x22, 0x6b, 0xc4, 0x7b, 0x71, 0xe5, 0x4e, 0xc9, 0x38, 0x8e, 0xac, 0x32, 0x59, 0x02, 0xac, 0xbe, 0x2b, 0xd7, 0x10, 0x9e, 0x19, 0xf3, 0x77, 0xc9, 0xd2, 0xb4, 0xd2, 0x80, 0xcd, 0xfa, 0xa4, 0x88, 0x88, 0xb9, 0xcf, 0x4e, 0xd0, 0x6c, 0xcf, 0x5a, 0xd8, 0x66, 0xd6, 0x93, 0x2d, 0x40, 0x25, 0x92, 0xf6, 0xbe, 0x6e, 0x68, 0x76, 0xdb, 0x5a, 0x62, 0xbe, 0xea, 0xf3, 0x73, 0xb6, 0x02, 0x38, 0xab, 0x96, 0x82, 0x92, 0x43, 0x75, 0x9b, 0xdb, 0x58, 0x6f, 0x45, 0xec, 0x4a, 0xe2, 0xcb, 0x22, 0x24, 0x8a, 0xb0, 0xb6, 0xaa, 0x7a, 0x75, 0x83, 0xa6, 0x1d, 0xd3, 0xb8, 0xf1, 0x19, 0xcd, 0x84, 0x04, 0x79, 0xa4, 0xa9, 0xaf, 0x8a, 0x43, 0x9d, 0xb9, 0x04, 0xac, 0x14, 0xec }; static const uint8_t ac_dsa_vect159_priv_val[] = { /* X */ 0x71, 0x42, 0xb1, 0x95, 0xeb, 0x24, 0x17, 0xbc, 0x23, 0x4c, 0xf3, 0x2c, 0x6f, 0xd7, 0xca, 0xe4, 0x70, 0xcb, 0x48, 0xc7, 0x4d, 0xbd, 0xb4, 0x69, 0xa2, 0x64, 0xc1, 0x98, 0x8e, 0xb3, 0xe5, 0x2d }; static const uint8_t ac_dsa_vect159_pub_val[] = { /* Y */ 0x72, 0xd8, 0x10, 0x06, 0x92, 0xe1, 0xa3, 0x0a, 0x32, 0xe3, 0x7c, 0x90, 0x9e, 0xb6, 0xc7, 0xba, 0xea, 0x72, 0x58, 0xb0, 0xb7, 0x86, 0x68, 0xe7, 0x59, 0x15, 0x07, 0x00, 0x37, 0x47, 0x9b, 0x88, 0x4f, 0xa9, 0xf1, 0x80, 0x66, 0xdf, 0x89, 0xb4, 0x90, 0xf9, 0xa2, 0x69, 0x6a, 0x85, 0x05, 0x03, 0x69, 0x77, 0x60, 0x4d, 0xad, 0x26, 0x8e, 0x90, 0x55, 0x28, 0x35, 0xfd, 0xca, 0x33, 0x39, 0xb3, 0x23, 0x60, 0xc9, 0x43, 0x58, 0xff, 0xcd, 0x0b, 0x1e, 0xa1, 0x10, 0x66, 0x12, 0x2e, 0xfd, 0x01, 0x7c, 0xd6, 0xfe, 0x1e, 0xcd, 0x0d, 0xd6, 0x67, 0x80, 0x81, 0xb8, 0x4c, 0xb6, 0xe1, 0x44, 0x47, 0x1d, 0xae, 0x76, 0x36, 0xb4, 0xa0, 0x92, 0x9c, 0xa7, 0x1a, 0xa4, 0x7b, 0x40, 0x86, 0x66, 0x5d, 0x66, 0xd4, 0x03, 0x4c, 0x18, 0x8d, 0x64, 0xd3, 0x8b, 0x69, 0xf0, 0xca, 0x17, 0x1c, 0x85, 0x92, 0x5c, 0xad, 0x28, 0x40, 0x27, 0x7d, 0x28, 0x87, 0xa7, 0xf7, 0xb8, 0x1e, 0x6b, 0x12, 0x87, 0x0c, 0xc3, 0xc6, 0x9e, 0x18, 0xca, 0x9c, 0x22, 0xc3, 0xd3, 0xa3, 0x9e, 0xe2, 0x86, 0xca, 0x65, 0xd2, 0x3f, 0x3e, 0x81, 0x11, 0xaa, 0x7c, 0x6e, 0xa9, 0xa0, 0xd1, 0x4c, 0x84, 0xdd, 0xf7, 0x6a, 0xbd, 0x44, 0xdb, 0x3b, 0x98, 0x33, 0xd6, 0x9c, 0xb9, 0x9b, 0x52, 0x4c, 0x98, 0xfd, 0xb9, 0xd0, 0xff, 0x20, 0xc9, 0xd2, 0x68, 0xe8, 0xe7, 0x17, 0x5f, 0x13, 0xc1, 0x1c, 0x57, 0x95, 0xd0, 0xfe, 0x0b, 0x38, 0x99, 0xb7, 0x4c, 0x0d, 0xca, 0x91, 0x47, 0x6f, 0xeb, 0xcb, 0x50, 0x9f, 0x7f, 0xd5, 0x07, 0x02, 0x39, 0x88, 0x14, 0x52, 0x42, 0xdf, 0xc8, 0x09, 0xce, 0x95, 0xc6, 0xf1, 0xb3, 0x1f, 0x67, 0xe0, 0x16, 0x50, 0xdd, 0x45, 0x87, 0x8e, 0xfc, 0x7e, 0xa8, 0x9c, 0xf6, 0xe3, 0x17, 0x1e, 0x43 }; /* K = 1043805a13045a36e1b6498db97d163571c61cc4a719e506173b5e6df33fc81d */ static const uint8_t ac_dsa_vect159_out[] = { /* R */ 0x38, 0xcf, 0x6b, 0x8c, 0xba, 0xe8, 0x2e, 0x62, 0x95, 0xf8, 0x33, 0x16, 0xa9, 0xc4, 0x9d, 0x2d, 0xc7, 0xc9, 0x2c, 0xb9, 0x0b, 0x19, 0xa2, 0xc2, 0xd4, 0x56, 0x49, 0x94, 0x93, 0x54, 0xd9, 0x30, /* S */ 0x35, 0x6a, 0x58, 0x50, 0xd0, 0x7a, 0xec, 0x6e, 0x9d, 0x4a, 0x4d, 0x7f, 0x79, 0xd9, 0xb0, 0x35, 0x2b, 0x08, 0x7d, 0x7e, 0xf4, 0x83, 0x94, 0x12, 0x8c, 0x5a, 0xe4, 0x99, 0x3e, 0x82, 0x59, 0xb8 }; #define ac_dsa_vect160_prime ac_dsa_vect151_prime #define ac_dsa_vect160_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect160_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect160_ptx[] = { /* Msg */ 0xb6, 0xac, 0x84, 0xc4, 0x9f, 0x6b, 0xd6, 0x01, 0xd5, 0x86, 0x8b, 0xa0, 0x6d, 0x49, 0xb8, 0xcb, 0xa8, 0x7a, 0x9d, 0x6e, 0x79, 0x05, 0x24, 0x75, 0x41, 0xfd, 0x33, 0x2c, 0x2b, 0x03, 0x74, 0xcf, 0x57, 0xd4, 0xa0, 0xdc, 0x0b, 0x5a, 0x6c, 0x3f, 0x8f, 0x7e, 0x24, 0xbe, 0x3a, 0x1e, 0xed, 0xc4, 0xa8, 0xc5, 0x75, 0x84, 0x7c, 0x02, 0xe4, 0xed, 0xd4, 0x74, 0x50, 0x40, 0x68, 0x56, 0x70, 0x05, 0x89, 0x96, 0x25, 0x0f, 0x73, 0xe2, 0x98, 0xa4, 0x3b, 0x39, 0x1a, 0x4a, 0xd5, 0x67, 0xf0, 0xc9, 0xbc, 0x4b, 0x6a, 0xbf, 0x6d, 0x1e, 0x5c, 0x56, 0xb2, 0x2f, 0x4e, 0xab, 0x36, 0xaa, 0x1a, 0x81, 0x2a, 0x1d, 0xae, 0x8d, 0x28, 0x73, 0xcb, 0x2c, 0x2a, 0x52, 0x1d, 0x32, 0x00, 0x19, 0xc7, 0xca, 0xb1, 0xef, 0xb1, 0x1f, 0xa4, 0x59, 0x5c, 0x53, 0x4c, 0xe5, 0x27, 0xd4, 0x3b, 0xa6, 0x05, 0xf7 }; static const uint8_t ac_dsa_vect160_priv_val[] = { /* X */ 0x13, 0x32, 0xc3, 0xc6, 0xe2, 0xd1, 0xb7, 0xb1, 0x6f, 0x50, 0x1b, 0x6d, 0x48, 0xc7, 0xb8, 0x66, 0x62, 0x8f, 0x0c, 0x82, 0xbf, 0x33, 0x35, 0x45, 0x35, 0xdf, 0x99, 0xa8, 0x43, 0xdd, 0x68, 0xce }; static const uint8_t ac_dsa_vect160_pub_val[] = { /* Y */ 0x06, 0xda, 0xb4, 0x8a, 0x07, 0x6e, 0x8c, 0xec, 0x27, 0xd4, 0xc4, 0xfb, 0x98, 0xe7, 0xc0, 0x0f, 0x36, 0xbe, 0xd7, 0x3f, 0x11, 0xe4, 0x91, 0xd9, 0x13, 0x86, 0x4c, 0xae, 0x0f, 0xdf, 0x88, 0x34, 0x68, 0xd7, 0x35, 0xde, 0xee, 0x52, 0x51, 0xdd, 0x38, 0xa1, 0xf8, 0xb1, 0xd2, 0xbc, 0x19, 0xd3, 0x7f, 0x31, 0x87, 0xa4, 0xef, 0x69, 0xc3, 0x3d, 0xc9, 0x52, 0x88, 0x01, 0xa2, 0x3a, 0x98, 0xd9, 0x6f, 0xd3, 0xf1, 0x29, 0xb8, 0xca, 0x29, 0x41, 0x42, 0x1b, 0xa1, 0x82, 0x8e, 0x0c, 0x4f, 0x8d, 0x88, 0xc5, 0x31, 0x93, 0x93, 0x02, 0x92, 0xa0, 0xdf, 0x11, 0x47, 0xb0, 0x7c, 0x20, 0xaa, 0x72, 0x6c, 0x71, 0x77, 0xef, 0x66, 0x0d, 0xdd, 0x4e, 0xcd, 0xd7, 0x33, 0x15, 0xd4, 0xb9, 0x35, 0x60, 0x13, 0xe1, 0x15, 0xf0, 0x67, 0xe8, 0x43, 0xc8, 0x96, 0xc1, 0xa5, 0x4c, 0x81, 0xff, 0xab, 0x1b, 0xfe, 0x7c, 0x78, 0x5e, 0xde, 0xc3, 0x2f, 0xba, 0x65, 0x2b, 0xab, 0xfd, 0xaa, 0xa0, 0x39, 0xb0, 0x56, 0x8c, 0x6b, 0xeb, 0x7d, 0x13, 0xfb, 0x4e, 0x45, 0x88, 0x14, 0x0e, 0xd6, 0x26, 0xb1, 0x87, 0x49, 0xb0, 0xf7, 0x9f, 0x66, 0x9f, 0x6e, 0x70, 0x45, 0x73, 0x8c, 0xf5, 0x0a, 0x6d, 0x00, 0x28, 0xba, 0x11, 0xfe, 0x18, 0x45, 0xa2, 0xdc, 0xbd, 0x9c, 0x1b, 0x02, 0x33, 0x6f, 0xb3, 0x0e, 0xaa, 0xa3, 0x97, 0x41, 0x8f, 0xe1, 0x7e, 0x14, 0x98, 0x29, 0xca, 0xb1, 0x3d, 0x2c, 0x2e, 0x6b, 0x90, 0xe5, 0xcc, 0x81, 0x83, 0x4e, 0x32, 0xfc, 0xa8, 0xa1, 0x73, 0x63, 0x4e, 0x01, 0xf9, 0xa9, 0x73, 0xe0, 0x29, 0x64, 0x4f, 0x01, 0x65, 0xb3, 0x03, 0x3d, 0xfb, 0x05, 0x4d, 0xd2, 0x1d, 0x65, 0xe0, 0xc0, 0xe1, 0x37, 0xb4, 0x8c, 0x34, 0xd4, 0x21, 0x34, 0xc4, 0x7b, 0x97, 0x24, 0x33, 0xcc, 0xde }; /* K = 167b97578e52869f49730df464f7e8d786594bb830d72db9af2cc88324ded288 */ static const uint8_t ac_dsa_vect160_out[] = { /* R */ 0x1d, 0x60, 0x0a, 0x74, 0x5a, 0x1d, 0xec, 0x93, 0x38, 0x68, 0xdc, 0x53, 0x5a, 0x19, 0xee, 0x9f, 0x1a, 0xf8, 0xbf, 0x09, 0xb5, 0xab, 0xee, 0x15, 0xdc, 0x4f, 0x7c, 0xbc, 0xb9, 0x5a, 0xc8, 0xc5, /* S */ 0x23, 0xb8, 0x10, 0x97, 0xd5, 0x83, 0x34, 0x2e, 0xbe, 0x4a, 0xed, 0x36, 0x4a, 0x7a, 0xf9, 0x88, 0x2f, 0x74, 0xe6, 0x45, 0x18, 0xaa, 0xed, 0xce, 0x34, 0x6c, 0x91, 0xd6, 0xd7, 0xac, 0x47, 0x0b }; #define ac_dsa_vect161_prime ac_dsa_vect151_prime #define ac_dsa_vect161_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect161_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect161_ptx[] = { /* Msg */ 0xa9, 0x2e, 0x2d, 0xdb, 0xfd, 0x18, 0xcd, 0x30, 0x73, 0x73, 0xfc, 0xb3, 0x9d, 0xff, 0xc3, 0x3e, 0x0b, 0x91, 0xa4, 0x8c, 0x62, 0x07, 0x1f, 0x2f, 0x7a, 0x8e, 0x50, 0xdb, 0xf2, 0xc2, 0x90, 0x88, 0x93, 0x07, 0x97, 0x5b, 0x6a, 0xcd, 0x64, 0x2c, 0x8e, 0x3d, 0x34, 0x44, 0xac, 0xac, 0x98, 0xc2, 0x2e, 0xd0, 0x65, 0x51, 0xfe, 0xc5, 0xdc, 0x7c, 0x9f, 0x22, 0x43, 0xb6, 0x81, 0xcc, 0x9f, 0xa4, 0xfc, 0xc1, 0x2c, 0x31, 0x82, 0x37, 0xe9, 0xa5, 0xdf, 0x0a, 0x77, 0xac, 0x22, 0x40, 0x20, 0x39, 0xce, 0xf3, 0x1b, 0x1e, 0x62, 0x3a, 0xf5, 0x82, 0x12, 0xa2, 0x2e, 0x7e, 0x60, 0x41, 0x9b, 0xb3, 0x6b, 0x77, 0x7c, 0xf6, 0xce, 0x65, 0xdd, 0x1f, 0x56, 0x96, 0x3e, 0xb2, 0x8b, 0x77, 0x06, 0xf1, 0x37, 0xc0, 0xf7, 0x36, 0x3a, 0x00, 0x2d, 0x82, 0x7e, 0x45, 0xba, 0xdc, 0x20, 0x23, 0x3c, 0x16 }; static const uint8_t ac_dsa_vect161_priv_val[] = { /* X */ 0x11, 0x9a, 0xb8, 0xa6, 0x3a, 0x22, 0xa8, 0x9b, 0xaf, 0x4e, 0xb8, 0xf0, 0x16, 0xdc, 0xce, 0x94, 0x23, 0xd5, 0xf4, 0x0a, 0x67, 0x7b, 0x25, 0x8f, 0xab, 0x07, 0x2a, 0x8c, 0xb6, 0x22, 0xeb, 0xe5 }; static const uint8_t ac_dsa_vect161_pub_val[] = { /* Y */ 0x51, 0x41, 0x22, 0x3f, 0x46, 0x97, 0xde, 0x27, 0x22, 0x69, 0xf3, 0xd9, 0x94, 0x37, 0xc4, 0x8d, 0xba, 0x5a, 0xb7, 0xf1, 0x37, 0x3f, 0xc6, 0xba, 0xd8, 0x16, 0x10, 0x18, 0xc5, 0xd6, 0xfc, 0xe2, 0xbc, 0xcc, 0x40, 0xca, 0x78, 0xe4, 0xd7, 0x3b, 0x6e, 0xeb, 0x09, 0x6f, 0x17, 0x5c, 0x4c, 0xd0, 0xc8, 0xe9, 0xf3, 0xe9, 0x31, 0x19, 0x51, 0xd5, 0x1e, 0xa2, 0x44, 0xfd, 0x33, 0xd9, 0xe4, 0x7d, 0xe7, 0x5f, 0x10, 0x00, 0x24, 0x8f, 0xdc, 0x00, 0x3b, 0xc0, 0x7b, 0x50, 0x1c, 0xe5, 0x8f, 0x6e, 0xc1, 0xae, 0xd1, 0x75, 0x4c, 0x36, 0x82, 0x6c, 0xd9, 0x19, 0x76, 0xb4, 0x08, 0xeb, 0x7a, 0xa9, 0xbc, 0x42, 0x44, 0x80, 0x58, 0xff, 0xd3, 0xb4, 0xe5, 0x13, 0xc6, 0x58, 0x9f, 0x8e, 0x1b, 0xc1, 0x45, 0xa4, 0x7b, 0x24, 0x70, 0xe7, 0x24, 0x1e, 0x23, 0x25, 0xe5, 0x43, 0x02, 0x25, 0x5c, 0x3d, 0x6d, 0x97, 0xab, 0xc5, 0xc6, 0x05, 0x62, 0x66, 0xa9, 0x52, 0x3d, 0x46, 0x1f, 0xc7, 0x44, 0x14, 0x6d, 0xa3, 0x5c, 0x04, 0xa4, 0xfc, 0x0b, 0x09, 0x58, 0x81, 0xcb, 0x94, 0xfc, 0x4c, 0x03, 0xbb, 0x86, 0x23, 0x95, 0x39, 0x28, 0x49, 0x0d, 0xbe, 0x7f, 0x84, 0xef, 0x68, 0x66, 0x7f, 0x23, 0xd4, 0xcb, 0x3e, 0xd8, 0x87, 0x44, 0x9f, 0x77, 0xae, 0xb1, 0x58, 0xa2, 0x6d, 0x1b, 0x39, 0xb4, 0xe6, 0x29, 0x7f, 0x23, 0xd4, 0x9f, 0x5b, 0x41, 0xf1, 0x70, 0xe7, 0x2f, 0x72, 0x13, 0xee, 0x40, 0x36, 0x4c, 0x1c, 0x9a, 0x63, 0x98, 0x5f, 0x69, 0xe4, 0x4e, 0xac, 0xdf, 0xdc, 0xb5, 0x8c, 0x35, 0xda, 0xce, 0x8b, 0x93, 0x5d, 0x07, 0x89, 0xa8, 0xc0, 0x66, 0x9a, 0x23, 0xd6, 0x73, 0x92, 0x9b, 0x2a, 0x58, 0x2d, 0x6d, 0x3b, 0x2f, 0x9e, 0x67, 0xbe, 0x89, 0x18, 0x90, 0xda, 0x12, 0x36, 0xc6, 0xf0 }; /* K = 77cefd7a6b0fcd0237ff8f51c458e5e8a79116eba6f11ea1af7f29aa608393e5 */ static const uint8_t ac_dsa_vect161_out[] = { /* R */ 0x34, 0xa6, 0x5e, 0x99, 0xbf, 0x01, 0x69, 0x8b, 0x5a, 0x68, 0xf2, 0x15, 0xb9, 0xc2, 0x92, 0x11, 0x5d, 0x17, 0xb3, 0xc2, 0x02, 0xea, 0x1f, 0xda, 0x17, 0xfc, 0xd8, 0xa0, 0xcd, 0x74, 0xb6, 0x36, /* S */ 0x7e, 0x67, 0xd4, 0x42, 0xb8, 0xf9, 0xac, 0x29, 0x74, 0xe8, 0x4b, 0xa6, 0x5a, 0xef, 0xf0, 0xdf, 0x5f, 0x83, 0xc2, 0x71, 0xec, 0xe7, 0x92, 0xa8, 0xda, 0xb9, 0xc4, 0xae, 0xe8, 0x7b, 0xfe, 0xa8 }; #define ac_dsa_vect162_prime ac_dsa_vect151_prime #define ac_dsa_vect162_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect162_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect162_ptx[] = { /* Msg */ 0xb5, 0xaa, 0x1c, 0xfe, 0x23, 0x48, 0xd5, 0x7f, 0x0e, 0x53, 0x33, 0xfc, 0x70, 0x27, 0x6d, 0x24, 0x18, 0xdd, 0xda, 0x49, 0x12, 0x2f, 0x4a, 0x88, 0xe8, 0x01, 0x0f, 0x6f, 0x78, 0xdc, 0x82, 0x9b, 0xa5, 0xc7, 0xcc, 0x68, 0xdb, 0x66, 0x40, 0x80, 0x94, 0x5c, 0x43, 0xee, 0xb7, 0x05, 0xc2, 0xef, 0x13, 0xde, 0x6e, 0x4b, 0x8f, 0x4d, 0xe1, 0xd0, 0x4f, 0xb3, 0x3d, 0x5b, 0xcd, 0x78, 0x93, 0xd8, 0xca, 0x8b, 0xfd, 0xe3, 0x8c, 0x9f, 0xec, 0xa6, 0xc4, 0xec, 0x03, 0xb2, 0xce, 0x7b, 0x35, 0xed, 0x60, 0xa6, 0xa4, 0x3f, 0x7f, 0xc9, 0xed, 0x08, 0x06, 0x1a, 0x09, 0x9b, 0x3e, 0xee, 0xae, 0x7f, 0x0f, 0x15, 0x16, 0x14, 0x9d, 0x17, 0x5a, 0x95, 0x3f, 0x52, 0xc8, 0xc5, 0x18, 0xf3, 0xad, 0x24, 0x7c, 0x9f, 0xba, 0x23, 0xf1, 0xf8, 0x29, 0xd5, 0xca, 0xe6, 0x26, 0x73, 0xee, 0x20, 0x1a, 0xda }; static const uint8_t ac_dsa_vect162_priv_val[] = { /* X */ 0x4b, 0x75, 0xdb, 0x03, 0x4e, 0xd0, 0xb8, 0x4d, 0xfc, 0xc6, 0x0b, 0x49, 0x3a, 0x00, 0x94, 0x0e, 0x80, 0x5f, 0xeb, 0x78, 0x57, 0x5f, 0xd2, 0x56, 0xb2, 0x4d, 0x14, 0x6b, 0x05, 0xa9, 0x50, 0x0c }; static const uint8_t ac_dsa_vect162_pub_val[] = { /* Y */ 0x0b, 0x66, 0xef, 0x2c, 0x7a, 0x34, 0x20, 0x5d, 0x70, 0xfc, 0x36, 0x40, 0x49, 0x57, 0x04, 0x3c, 0xf4, 0x6b, 0x28, 0xac, 0x4f, 0x08, 0x3e, 0xba, 0xc3, 0x78, 0x7f, 0x55, 0xe8, 0xdd, 0x1f, 0x75, 0xd9, 0x19, 0x3a, 0x84, 0x27, 0x59, 0x37, 0x6f, 0x05, 0x08, 0xc9, 0x4c, 0xc7, 0x52, 0x8d, 0x66, 0x11, 0xb5, 0x0a, 0x73, 0x26, 0x1a, 0x4a, 0x5c, 0xff, 0x73, 0x0d, 0x99, 0x85, 0xbb, 0x34, 0x1d, 0xfd, 0x73, 0x9a, 0x4e, 0x96, 0x3d, 0x1c, 0x40, 0xf1, 0x14, 0xd7, 0xa7, 0xac, 0xe8, 0x9e, 0x81, 0xdd, 0x70, 0x86, 0x1e, 0xfe, 0xf2, 0xba, 0x9d, 0x1c, 0x64, 0x25, 0xd5, 0xf8, 0x58, 0x09, 0x05, 0x9e, 0x8e, 0xf3, 0x1f, 0x45, 0x3c, 0x97, 0x74, 0x3f, 0xcc, 0x94, 0xd3, 0xb1, 0xbd, 0x62, 0x08, 0x4e, 0x97, 0x57, 0x90, 0xb3, 0x71, 0x93, 0xeb, 0x40, 0x58, 0x45, 0x4a, 0xb2, 0x83, 0xfe, 0x2b, 0xaf, 0xaa, 0xe8, 0x03, 0xde, 0x89, 0x28, 0x79, 0x55, 0x4a, 0x34, 0x0b, 0x9a, 0x3e, 0x25, 0x32, 0x93, 0x1e, 0xb9, 0x5d, 0x3a, 0xc5, 0xeb, 0x3f, 0x29, 0x0a, 0x3f, 0x56, 0x93, 0x69, 0x51, 0x28, 0x8e, 0x1c, 0x05, 0xbd, 0xa1, 0xfa, 0x74, 0xdc, 0x78, 0xd6, 0x31, 0xc2, 0xe7, 0xa5, 0x63, 0x67, 0xec, 0x57, 0x81, 0x01, 0x9d, 0xfe, 0xe7, 0x14, 0x53, 0xea, 0x6b, 0xbd, 0x90, 0x77, 0x8e, 0x92, 0xfe, 0xa8, 0xc2, 0x6b, 0xd6, 0xa8, 0x23, 0xfb, 0xca, 0x71, 0x57, 0x7b, 0x63, 0x35, 0xf3, 0xbd, 0xf4, 0x0a, 0x30, 0x83, 0x6e, 0x94, 0x8d, 0xb0, 0x32, 0xdb, 0x5a, 0x46, 0x03, 0xdd, 0x31, 0xb8, 0x51, 0xec, 0xbb, 0xdf, 0x76, 0xb4, 0xa6, 0xc9, 0x95, 0x1d, 0x21, 0x92, 0xb9, 0x7f, 0xf0, 0x1d, 0xaa, 0x5c, 0xb0, 0x30, 0xe1, 0x5a, 0xd1, 0xd4, 0xcf, 0xf3, 0x67, 0xf7, 0x00, 0xe7, 0x9f, 0xfb }; /* K = 654aa8be3b7bfc32f9b560b57a88a8aec1cfda276661283b7f44dd3b0944c20f */ static const uint8_t ac_dsa_vect162_out[] = { /* R */ 0x51, 0x7f, 0x7d, 0xf4, 0x83, 0x1f, 0xbd, 0x01, 0x90, 0x8b, 0x92, 0x18, 0xb1, 0x7a, 0xe1, 0xc4, 0x0e, 0x00, 0xc5, 0x34, 0x04, 0xb3, 0xbd, 0x72, 0xb6, 0x4f, 0x67, 0xce, 0xe7, 0x52, 0x15, 0xf2, /* S */ 0x19, 0x03, 0x43, 0x4a, 0x72, 0x7c, 0x8e, 0xf0, 0xe8, 0x0a, 0x43, 0xdc, 0xe2, 0x83, 0x4b, 0x80, 0x78, 0x39, 0xef, 0x43, 0xc2, 0x2a, 0xfb, 0x50, 0x2b, 0x35, 0xa3, 0x81, 0x78, 0x2b, 0xb6, 0x39 }; #define ac_dsa_vect163_prime ac_dsa_vect151_prime #define ac_dsa_vect163_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect163_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect163_ptx[] = { /* Msg */ 0x27, 0xaa, 0x81, 0xd2, 0xbc, 0x49, 0x60, 0x1c, 0x3f, 0x6b, 0xce, 0xb0, 0x87, 0x0b, 0xb5, 0x5d, 0xd1, 0x0e, 0x7b, 0xa6, 0xd1, 0xf8, 0xac, 0xad, 0xa7, 0x0b, 0x5f, 0x90, 0x2a, 0x0f, 0x40, 0x62, 0xeb, 0x93, 0xae, 0x72, 0xcd, 0xfd, 0x3f, 0x94, 0x30, 0x99, 0xcc, 0x2a, 0x10, 0xa3, 0xda, 0x7b, 0xdc, 0x9f, 0x24, 0xb0, 0x0b, 0xf3, 0x6a, 0x29, 0xd7, 0x51, 0x36, 0xaf, 0x10, 0xbb, 0x71, 0xec, 0x9c, 0x19, 0x32, 0x05, 0x8e, 0x22, 0xec, 0x9c, 0x06, 0x00, 0xd1, 0x73, 0xd3, 0x79, 0x70, 0xd5, 0x8a, 0xe1, 0xf6, 0x6c, 0xef, 0xd2, 0x7e, 0x29, 0x05, 0xaf, 0xdd, 0xe4, 0x22, 0x39, 0x79, 0xb4, 0x04, 0x1f, 0xd7, 0xd7, 0x16, 0x6e, 0xa3, 0x26, 0xbe, 0xfd, 0x5d, 0xd8, 0x96, 0xef, 0x47, 0xab, 0xc6, 0xd0, 0x45, 0xc1, 0xca, 0x23, 0xc1, 0x95, 0x3a, 0x6e, 0x12, 0xcc, 0x3c, 0x54, 0xb4, 0xf6 }; static const uint8_t ac_dsa_vect163_priv_val[] = { /* X */ 0x7e, 0x6b, 0x77, 0xd4, 0xbc, 0x92, 0x20, 0xc3, 0x35, 0x2e, 0x91, 0xab, 0xea, 0x67, 0xe3, 0x3a, 0x33, 0x5a, 0xce, 0x34, 0xec, 0x45, 0x16, 0x64, 0x6e, 0x8a, 0x4f, 0xf0, 0x98, 0x16, 0x6f, 0xf4 }; static const uint8_t ac_dsa_vect163_pub_val[] = { /* Y */ 0x93, 0x2b, 0x9c, 0x0f, 0x2d, 0x31, 0x0b, 0x6b, 0xfe, 0xe8, 0x00, 0xc0, 0x74, 0xa0, 0x96, 0x9e, 0xfa, 0x24, 0x62, 0x44, 0xfb, 0x06, 0x2a, 0x74, 0x5a, 0x9a, 0x3c, 0xfe, 0x6f, 0x53, 0x36, 0xa3, 0x13, 0x19, 0x2e, 0x92, 0xa2, 0x02, 0x7e, 0x1d, 0x2c, 0x3c, 0xfa, 0x93, 0xaa, 0xc5, 0x3d, 0xfe, 0x05, 0xcb, 0x8f, 0x83, 0x21, 0xac, 0x88, 0x2a, 0x63, 0xbd, 0x37, 0x5a, 0xf0, 0xf3, 0xd9, 0xec, 0xc7, 0x3a, 0xee, 0xbe, 0x12, 0x67, 0xf4, 0x73, 0xa9, 0xf9, 0x0b, 0x94, 0xf5, 0xb6, 0xde, 0x43, 0x57, 0xb7, 0x4e, 0xb3, 0x0c, 0xd4, 0x1a, 0xea, 0xfc, 0x25, 0x9e, 0x85, 0xca, 0xc7, 0xd3, 0x65, 0xee, 0x33, 0x38, 0x2a, 0x58, 0x4e, 0xec, 0x63, 0x71, 0x9e, 0xa3, 0x25, 0xa2, 0x41, 0x4e, 0x11, 0x6f, 0x84, 0xd2, 0xaf, 0x96, 0x54, 0x26, 0x8e, 0xc4, 0x4d, 0x6e, 0xa2, 0xe9, 0x81, 0x58, 0x1d, 0x45, 0xd8, 0x05, 0xb3, 0x83, 0xd8, 0x5c, 0x13, 0x0d, 0x2d, 0xcd, 0x1c, 0x71, 0xfa, 0x68, 0xd9, 0xc7, 0x6d, 0x79, 0xaa, 0x81, 0x96, 0x15, 0x2c, 0x1d, 0x94, 0x40, 0xc3, 0x3d, 0x99, 0xde, 0x45, 0x1a, 0x35, 0x9e, 0x0d, 0x2c, 0x51, 0xd6, 0xaa, 0xec, 0xb2, 0x67, 0x95, 0x40, 0x6e, 0x52, 0x8f, 0x5d, 0xe3, 0xe0, 0x09, 0x47, 0xd3, 0xda, 0xcc, 0x69, 0x5c, 0x08, 0xa9, 0x60, 0x88, 0x9a, 0x2e, 0x94, 0xec, 0xf0, 0xa4, 0x61, 0xc0, 0x2a, 0xfc, 0x58, 0xb5, 0x1e, 0x00, 0x36, 0x9c, 0x73, 0xc8, 0x14, 0x0e, 0x8b, 0x92, 0x38, 0x8c, 0xaa, 0xbd, 0x1f, 0x37, 0xa6, 0x2d, 0x1b, 0x21, 0x0e, 0x0f, 0x31, 0x41, 0x27, 0xf4, 0x6b, 0x57, 0x6a, 0x4b, 0x8e, 0xde, 0xb3, 0x47, 0x13, 0xaa, 0x41, 0x36, 0xb8, 0xa1, 0x87, 0x5b, 0xba, 0x8a, 0x59, 0x37, 0x06, 0x65, 0x44, 0xe3, 0x4c, 0x20, 0x6a, 0xa4 }; /* K = 73c28bca3c8067da792f6312153b298a8f714cad70bb2349803b6dad024f6bc1 */ static const uint8_t ac_dsa_vect163_out[] = { /* R */ 0x05, 0x05, 0x7a, 0x98, 0x2a, 0xb4, 0xa2, 0xe3, 0x22, 0x38, 0xef, 0x2e, 0x3e, 0xdb, 0xa0, 0x7f, 0xd1, 0x93, 0xd9, 0x0c, 0x5f, 0x05, 0x3c, 0x83, 0xa9, 0xf1, 0x76, 0xe2, 0x1a, 0x9d, 0x52, 0x08, /* S */ 0x03, 0xc2, 0xb2, 0x6c, 0xf4, 0x6b, 0x7f, 0x72, 0x69, 0x1a, 0x72, 0xd7, 0xcb, 0xf3, 0x36, 0x53, 0xdf, 0x34, 0x7f, 0x02, 0xb0, 0x68, 0x3e, 0xbc, 0x6c, 0xb7, 0xea, 0x7e, 0x72, 0xdc, 0x8a, 0x0a }; #define ac_dsa_vect164_prime ac_dsa_vect151_prime #define ac_dsa_vect164_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect164_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect164_ptx[] = { /* Msg */ 0x75, 0x27, 0x53, 0x3f, 0x2d, 0x10, 0xc1, 0x80, 0x78, 0xf5, 0xa8, 0xde, 0xc3, 0x50, 0xcd, 0xfa, 0xd0, 0x6d, 0x31, 0x57, 0x87, 0x1e, 0x4f, 0xf7, 0xd7, 0xc2, 0xb7, 0xab, 0x11, 0xdf, 0xf2, 0x32, 0xd3, 0x4f, 0x07, 0x69, 0x92, 0x78, 0xf0, 0x75, 0x44, 0x2e, 0x1d, 0x4e, 0xe0, 0x0c, 0xd6, 0xe8, 0x7c, 0x19, 0x31, 0x33, 0x38, 0x41, 0xc3, 0x99, 0x57, 0x6f, 0x4e, 0x58, 0x7a, 0x25, 0x16, 0x84, 0xe7, 0x31, 0xf7, 0xc8, 0x36, 0x9f, 0x71, 0x26, 0x56, 0xbc, 0x1e, 0x6c, 0x2d, 0x20, 0x9f, 0x51, 0x11, 0x79, 0xda, 0x09, 0x36, 0x8d, 0x93, 0x29, 0x0e, 0x05, 0x8e, 0x0c, 0xe9, 0xb6, 0x53, 0x0a, 0xc6, 0xc5, 0xe4, 0xcf, 0x0a, 0x1b, 0x22, 0xd5, 0x88, 0xd9, 0x8f, 0x32, 0xb3, 0x4e, 0x85, 0x20, 0x6e, 0x09, 0xaa, 0xc0, 0x4a, 0x0e, 0x1f, 0x2a, 0xe2, 0xa5, 0xcf, 0xda, 0xc4, 0xe6, 0xe2, 0xb3 }; static const uint8_t ac_dsa_vect164_priv_val[] = { /* X */ 0x40, 0x79, 0x2e, 0x5a, 0xb4, 0x65, 0x18, 0xc6, 0xff, 0xcf, 0x53, 0x57, 0xf0, 0xc5, 0xde, 0x5d, 0x9e, 0x2d, 0xe9, 0x9c, 0x92, 0xae, 0xbe, 0xa8, 0x2a, 0x30, 0x7a, 0xb0, 0xf5, 0xad, 0x25, 0x2b }; static const uint8_t ac_dsa_vect164_pub_val[] = { /* Y */ 0x72, 0xc4, 0x65, 0x05, 0xe4, 0xb0, 0x71, 0xf4, 0x6e, 0xd6, 0xb6, 0xd5, 0x30, 0x80, 0x16, 0x64, 0xa4, 0xfd, 0x51, 0x8e, 0x4c, 0x6b, 0xe8, 0x46, 0x8a, 0x38, 0xc2, 0x2b, 0xf7, 0x4e, 0xd9, 0x66, 0xfd, 0xc7, 0xbf, 0xd7, 0xc5, 0x72, 0x21, 0x89, 0x98, 0xfc, 0x4c, 0x14, 0x4b, 0x59, 0x46, 0x2a, 0xf7, 0xe2, 0x94, 0xbd, 0xf5, 0x79, 0x7e, 0xce, 0xa5, 0xcb, 0x2e, 0xdf, 0x8c, 0x8d, 0x2d, 0xab, 0xba, 0x88, 0xd0, 0xb8, 0x4c, 0xf2, 0x85, 0x24, 0x36, 0x9c, 0x50, 0x40, 0xb5, 0x8f, 0x09, 0x07, 0x72, 0xda, 0xc0, 0xfe, 0x45, 0x3c, 0x32, 0x90, 0x7e, 0x9b, 0x6c, 0x74, 0x0f, 0xb2, 0x4e, 0xd4, 0xda, 0xcb, 0x8f, 0xdd, 0x25, 0xe0, 0x66, 0x1b, 0xc0, 0xd7, 0x9d, 0x41, 0xf1, 0x03, 0xfb, 0xc8, 0xf9, 0x6b, 0x3e, 0x3a, 0x47, 0x08, 0xa5, 0xa7, 0xf5, 0xdb, 0xff, 0xc9, 0x8f, 0x34, 0x4b, 0xb7, 0xcc, 0xf0, 0xd5, 0xed, 0x07, 0xaf, 0x2c, 0x2f, 0x0d, 0x5f, 0x40, 0x7b, 0xcf, 0xef, 0xb5, 0x4d, 0x9b, 0x94, 0x76, 0x04, 0xe7, 0xa7, 0x83, 0x56, 0x87, 0x4c, 0x01, 0xb8, 0xc1, 0xfd, 0xd7, 0x49, 0xf6, 0xa3, 0xd6, 0x19, 0xd1, 0x09, 0x0c, 0x83, 0x72, 0x5e, 0x72, 0x57, 0x06, 0x84, 0x6c, 0x16, 0xbf, 0x9d, 0xfd, 0xf3, 0x9f, 0x21, 0x80, 0x62, 0x3f, 0x4f, 0x58, 0x54, 0x02, 0xcc, 0x7d, 0x6e, 0x2c, 0x10, 0xb5, 0x7c, 0x83, 0x00, 0x54, 0x36, 0x86, 0xa3, 0x86, 0x05, 0x6a, 0x93, 0x1b, 0xe6, 0x33, 0x6b, 0xb6, 0x17, 0x3d, 0x9f, 0xda, 0x8b, 0x10, 0x2c, 0xf3, 0x29, 0x89, 0xcf, 0x09, 0x78, 0xf9, 0x56, 0xd9, 0xae, 0x0d, 0x8f, 0x30, 0x75, 0x2f, 0x15, 0x6f, 0x9f, 0x92, 0xd2, 0x95, 0x4e, 0xf1, 0x31, 0x00, 0xa7, 0x5d, 0x9f, 0x7f, 0xf9, 0x6f, 0xe1, 0x5d, 0xf0, 0x7e, 0x79, 0x93, 0xe3 }; /* K = 0c9fe826a7618108684ba2d74f10ca39168feb85f74d2737fd12d18cf27a2f16 */ static const uint8_t ac_dsa_vect164_out[] = { /* R */ 0x6a, 0xa6, 0xc4, 0xd7, 0xaf, 0xda, 0x30, 0xff, 0x2d, 0x71, 0x78, 0xb5, 0x2a, 0x3e, 0x43, 0x7e, 0xd5, 0xb0, 0x74, 0x5a, 0x24, 0x7c, 0x9c, 0x9e, 0x12, 0x0b, 0xd3, 0xe8, 0x33, 0xa1, 0xdf, 0xac, /* S */ 0x26, 0xe0, 0x88, 0x79, 0x11, 0xbb, 0x5e, 0xdb, 0x6a, 0x56, 0x6a, 0x2a, 0x12, 0x76, 0x35, 0x33, 0x91, 0xb1, 0xe4, 0xab, 0x8a, 0xe0, 0xb2, 0x59, 0xc1, 0xbb, 0xb3, 0xaf, 0x3d, 0x85, 0xb4, 0x39 }; #define ac_dsa_vect165_prime ac_dsa_vect151_prime #define ac_dsa_vect165_sub_prime ac_dsa_vect151_sub_prime #define ac_dsa_vect165_base ac_dsa_vect151_base static const uint8_t ac_dsa_vect165_ptx[] = { /* Msg */ 0x99, 0x4a, 0x49, 0xe5, 0xe8, 0xa5, 0x69, 0x8f, 0xda, 0xc9, 0xa7, 0xfa, 0xac, 0x01, 0xfb, 0x09, 0xb2, 0xc6, 0x11, 0x3a, 0x18, 0x66, 0x77, 0x67, 0x6d, 0x11, 0xe6, 0x04, 0x9d, 0xc9, 0x8c, 0x93, 0xc5, 0x1e, 0xb5, 0x14, 0x4a, 0xf1, 0x81, 0xe1, 0xef, 0xbf, 0x44, 0x43, 0x9a, 0x13, 0xd2, 0x95, 0x65, 0x38, 0x54, 0x81, 0x36, 0x71, 0xf0, 0x32, 0xaa, 0x62, 0x25, 0x8c, 0x14, 0x19, 0x5c, 0x48, 0x64, 0xaf, 0xae, 0x0b, 0x5d, 0x15, 0x4f, 0x97, 0x56, 0x5c, 0xef, 0x07, 0x5b, 0xbb, 0x6d, 0x97, 0xe3, 0x41, 0x81, 0x41, 0x03, 0x09, 0xff, 0xe9, 0x8b, 0x45, 0xc1, 0xf8, 0x74, 0x32, 0x63, 0x43, 0xc3, 0x6c, 0x14, 0xf5, 0x5f, 0xa0, 0x58, 0x48, 0x9d, 0xff, 0x3b, 0x49, 0xdc, 0x78, 0x88, 0xf4, 0x5a, 0x09, 0x9c, 0x3c, 0x91, 0x9b, 0x25, 0xed, 0xac, 0x17, 0x06, 0xbb, 0x90, 0xf1, 0x64, 0xca }; static const uint8_t ac_dsa_vect165_priv_val[] = { /* X */ 0x26, 0x6c, 0xfb, 0xe6, 0x06, 0x01, 0x34, 0xec, 0xe2, 0xc8, 0xb9, 0xe6, 0xaa, 0x25, 0xbd, 0x6c, 0xc9, 0x35, 0xe4, 0x9c, 0x23, 0xfd, 0xd4, 0xfb, 0x6a, 0xdb, 0x2e, 0xcd, 0xe6, 0x3a, 0x49, 0x60 }; static const uint8_t ac_dsa_vect165_pub_val[] = { /* Y */ 0x05, 0xe2, 0x33, 0xac, 0x49, 0xc1, 0xfd, 0xa2, 0xa0, 0xc3, 0xc7, 0x8b, 0x0b, 0xc7, 0x2f, 0xa3, 0x96, 0x74, 0x05, 0x5d, 0x18, 0x8a, 0x12, 0x4a, 0x58, 0xab, 0x38, 0x50, 0xd9, 0xa8, 0x88, 0x86, 0x1c, 0x2f, 0xe4, 0xd0, 0x46, 0xc3, 0xe7, 0xc7, 0x5e, 0xe2, 0x54, 0xde, 0x70, 0xcd, 0xb1, 0xc3, 0x15, 0x02, 0x01, 0xc2, 0xe0, 0x47, 0x33, 0xeb, 0xcc, 0x25, 0xb8, 0x87, 0x70, 0xfc, 0x2a, 0xa8, 0x2f, 0x60, 0x52, 0x6b, 0xc6, 0x64, 0x04, 0x7a, 0x02, 0x6c, 0x22, 0x90, 0xfa, 0xd8, 0xe9, 0xf8, 0x1c, 0xed, 0xdd, 0xde, 0x7f, 0xe3, 0xba, 0x40, 0x65, 0x35, 0xbf, 0x27, 0x10, 0xd7, 0x9d, 0xa0, 0x1b, 0xd2, 0xd4, 0x2b, 0xb5, 0xf4, 0x09, 0x9c, 0x3f, 0x8b, 0xc2, 0xac, 0x86, 0x4b, 0xe7, 0x89, 0x2a, 0xeb, 0x6a, 0x1f, 0x34, 0x02, 0xc8, 0x14, 0x74, 0xda, 0x23, 0xe0, 0x79, 0x5c, 0xd6, 0xc2, 0x13, 0x67, 0x50, 0x9a, 0x54, 0x15, 0x91, 0xee, 0x1e, 0x63, 0x64, 0xf7, 0xe7, 0x55, 0xb1, 0x41, 0x9e, 0x90, 0xaf, 0x86, 0x99, 0x30, 0x15, 0x2f, 0x34, 0xde, 0x51, 0xf0, 0xf0, 0x6c, 0xa3, 0x07, 0x6e, 0x68, 0xc3, 0xe3, 0xea, 0x7f, 0x4f, 0x1b, 0xf1, 0xd3, 0xcd, 0xe3, 0xa0, 0xdf, 0xf0, 0xcf, 0xfa, 0x1b, 0x58, 0x42, 0x75, 0x23, 0x47, 0x08, 0x2d, 0xda, 0x34, 0x75, 0x99, 0x2f, 0x15, 0xa7, 0x4d, 0x29, 0x85, 0x24, 0xe6, 0x36, 0x22, 0x0b, 0xc9, 0xfa, 0xed, 0x08, 0xaf, 0x7a, 0xa5, 0xe4, 0x81, 0xba, 0x78, 0xd2, 0xd2, 0xfd, 0x8e, 0x51, 0x94, 0x2c, 0xfd, 0x08, 0x4e, 0xfe, 0x0e, 0xbd, 0xdd, 0x75, 0x00, 0xef, 0xc9, 0x5a, 0x6c, 0xad, 0x37, 0xfc, 0x49, 0x23, 0xf9, 0xbf, 0x65, 0x29, 0x78, 0x05, 0x84, 0x08, 0x76, 0xc6, 0x89, 0xee, 0x07, 0x9b, 0x7f, 0xa6, 0x16, 0x97, 0x68, 0xfa }; /* K = 60f8416735fa49ab567c0bf1b6da434e1df41579699c1a92a3e70e1d90705379 */ static const uint8_t ac_dsa_vect165_out[] = { /* R */ 0x3c, 0xc2, 0x69, 0xbc, 0x7b, 0x89, 0x58, 0x64, 0xa0, 0x32, 0x31, 0x31, 0x8c, 0xf3, 0x93, 0x79, 0xae, 0x33, 0xc7, 0x18, 0x0a, 0x18, 0xc0, 0x8b, 0x5a, 0xef, 0x74, 0x14, 0xfd, 0xac, 0x05, 0x8f, /* S */ 0x6a, 0x6e, 0xb8, 0x3c, 0x5f, 0xab, 0x10, 0xe3, 0x4f, 0x04, 0x16, 0x62, 0x8c, 0x82, 0x1a, 0x6d, 0xe0, 0xad, 0x0c, 0x20, 0x24, 0x43, 0xc6, 0xdf, 0x03, 0x2c, 0xc9, 0xd8, 0xe4, 0x94, 0x8a, 0xc6 }; /* [mod = L=2048, N=256, SHA-224] */ static const uint8_t ac_dsa_vect166_prime[] = { /* P */ 0xd0, 0x22, 0x76, 0xeb, 0xf3, 0xc2, 0x2f, 0xfd, 0x66, 0x69, 0x83, 0x18, 0x3a, 0x47, 0xae, 0x94, 0xc9, 0xbc, 0xcb, 0xcb, 0xf9, 0x5d, 0xdc, 0xb4, 0x91, 0xd1, 0xf7, 0xce, 0x64, 0x35, 0x49, 0x19, 0x99, 0x92, 0xd3, 0x7c, 0x79, 0xe7, 0xb0, 0x32, 0xd2, 0x6e, 0xd0, 0x31, 0xb6, 0xba, 0x44, 0x89, 0xf3, 0x12, 0x58, 0x26, 0xfa, 0xfb, 0x27, 0x26, 0xa9, 0x83, 0x33, 0xeb, 0xd9, 0xab, 0xdd, 0xe5, 0x92, 0xd8, 0x69, 0x3d, 0x98, 0x59, 0x53, 0x6d, 0x9c, 0xc3, 0x84, 0x1a, 0x1d, 0x24, 0xe0, 0x44, 0xd3, 0x5a, 0xce, 0xd6, 0x13, 0x62, 0x56, 0xfc, 0x6d, 0x6b, 0x61, 0x5c, 0xf4, 0xf4, 0x16, 0x3a, 0xa3, 0x81, 0xeb, 0x2b, 0x4c, 0x48, 0x08, 0x25, 0xa8, 0xec, 0xcc, 0x56, 0xd8, 0xdd, 0xcf, 0x5f, 0xe6, 0x37, 0xe3, 0x8a, 0xd9, 0xb2, 0x97, 0x4b, 0xd2, 0xcf, 0x68, 0xbf, 0x27, 0x1e, 0x0d, 0x06, 0x7d, 0x24, 0x65, 0xa8, 0xb6, 0xb6, 0x60, 0x52, 0x4f, 0x00, 0x82, 0x59, 0x89, 0x45, 0xad, 0xa5, 0x8e, 0xa6, 0x49, 0xb9, 0x80, 0x4e, 0xb4, 0x75, 0x34, 0x08, 0xc2, 0xc5, 0x97, 0x68, 0xc4, 0x6a, 0xbb, 0x82, 0xe3, 0x29, 0x5f, 0x3d, 0x9c, 0xa4, 0x69, 0xf8, 0x4c, 0xc1, 0x87, 0xf5, 0x72, 0xdc, 0x4b, 0x5a, 0x3b, 0x39, 0x34, 0x6e, 0xc8, 0x39, 0xdf, 0xad, 0x6f, 0x07, 0xd6, 0xd1, 0xf0, 0xe2, 0x15, 0x20, 0x9b, 0xb0, 0xec, 0xc0, 0x5c, 0x76, 0x7c, 0xf2, 0xe7, 0x94, 0x3a, 0xc9, 0xcf, 0xb0, 0x2e, 0xee, 0x1e, 0x9e, 0xf5, 0x94, 0x6e, 0x8c, 0xe8, 0x83, 0x16, 0xb5, 0xe1, 0x5f, 0xdc, 0xf9, 0x5a, 0x13, 0x2e, 0xf2, 0xe4, 0xbb, 0x08, 0x17, 0x13, 0x65, 0x28, 0xcf, 0xa5, 0xdd, 0x96, 0x53, 0x2f, 0x9c, 0x3a, 0xbe, 0x5c, 0x42, 0x16, 0x20, 0xed, 0xb6, 0xbc, 0xbd, 0x52, 0x23, 0x4c, 0xa9 }; static const uint8_t ac_dsa_vect166_sub_prime[] = { /* Q */ 0x80, 0x00, 0x00, 0x00, 0x12, 0x99, 0x7e, 0x82, 0x85, 0xe4, 0x08, 0x97, 0x08, 0xf5, 0x28, 0x07, 0x0c, 0x6d, 0x7a, 0xf8, 0xa0, 0xbd, 0x01, 0x40, 0x9e, 0x7a, 0x07, 0x9c, 0xdb, 0x6f, 0xc5, 0xbb }; static const uint8_t ac_dsa_vect166_base[] = { /* G */ 0x77, 0x84, 0x53, 0x04, 0x9e, 0xf2, 0x62, 0x14, 0x7f, 0xed, 0x7b, 0x59, 0xb0, 0xee, 0x67, 0x64, 0x60, 0x7c, 0x51, 0xe7, 0xb5, 0xb5, 0xfc, 0x6f, 0xea, 0x7a, 0x7a, 0x7b, 0x1d, 0xd6, 0xbb, 0x28, 0x3f, 0x4a, 0x9a, 0xe9, 0x8e, 0xfd, 0x39, 0x64, 0xb1, 0x55, 0x67, 0x58, 0xcb, 0x15, 0xb2, 0xa5, 0x3a, 0xf8, 0x61, 0x9e, 0x74, 0xd8, 0x58, 0x98, 0xbe, 0xc7, 0x7d, 0x3b, 0x3f, 0x38, 0x24, 0x94, 0xae, 0x59, 0x61, 0xa1, 0x3f, 0xfc, 0x74, 0x5d, 0xa3, 0x86, 0x18, 0x22, 0x91, 0x51, 0x98, 0x00, 0xf9, 0x9d, 0xd7, 0x10, 0xe0, 0x0a, 0xeb, 0x15, 0xad, 0xee, 0x08, 0x8e, 0x27, 0x98, 0xee, 0x2e, 0x46, 0xf5, 0x98, 0x52, 0x6c, 0xf0, 0xf4, 0x66, 0x70, 0x55, 0xd1, 0xba, 0x00, 0x97, 0x50, 0x04, 0x1d, 0xc5, 0xcd, 0xd2, 0x72, 0x5f, 0xf1, 0xd9, 0x7d, 0xd3, 0x40, 0xc8, 0x51, 0x8a, 0xf7, 0x67, 0x1b, 0x87, 0xd3, 0x9d, 0x67, 0xae, 0xce, 0xd8, 0x4b, 0x66, 0xf8, 0x4e, 0x07, 0x01, 0xef, 0xc8, 0x2a, 0x5c, 0x9e, 0xf9, 0x54, 0xee, 0x57, 0x6d, 0x24, 0xc3, 0x85, 0xb1, 0x4d, 0x63, 0x03, 0x7f, 0x0d, 0x86, 0x6f, 0xd4, 0x24, 0xb4, 0x97, 0x5b, 0xdd, 0x54, 0x85, 0xed, 0x74, 0x0c, 0xb9, 0x32, 0xe8, 0x43, 0xf9, 0x06, 0x68, 0x3f, 0x7c, 0x7b, 0x2c, 0x74, 0x77, 0x5d, 0x90, 0x1c, 0x36, 0x1b, 0x84, 0x7b, 0x51, 0x9c, 0x0d, 0xa6, 0x99, 0x63, 0x8d, 0xa4, 0x0b, 0xd7, 0x36, 0xb7, 0x83, 0xd2, 0x71, 0x0b, 0x2c, 0x2c, 0xc2, 0x6e, 0xf9, 0x12, 0x71, 0xbf, 0x4e, 0x2c, 0x19, 0x29, 0xf8, 0x76, 0xe9, 0x02, 0xe2, 0x05, 0x71, 0x64, 0x22, 0x3b, 0xc7, 0x8d, 0x6a, 0x2b, 0x9f, 0x6c, 0x0c, 0x7a, 0x7c, 0xb8, 0x59, 0x22, 0xf7, 0xd6, 0xc4, 0x28, 0x7a, 0xe2, 0x38, 0x61, 0xf8, 0x12, 0x88, 0x48 }; static const uint8_t ac_dsa_vect166_ptx[] = { /* Msg */ 0x39, 0xf2, 0xd8, 0xd5, 0x03, 0xaa, 0xe8, 0xcd, 0x17, 0x85, 0x44, 0x56, 0xec, 0xfa, 0xd4, 0x9a, 0x18, 0x90, 0x0d, 0x43, 0x75, 0x41, 0x2b, 0xc6, 0x89, 0x18, 0x1e, 0xd9, 0xc2, 0xcc, 0xaf, 0xea, 0x98, 0xdc, 0xa6, 0x89, 0xa7, 0x2d, 0xc7, 0x5e, 0x53, 0x67, 0xd3, 0xd3, 0xab, 0xfc, 0x21, 0x69, 0x70, 0x0d, 0x58, 0x91, 0xcf, 0xf7, 0x0f, 0x69, 0xd9, 0xac, 0xa0, 0x93, 0xb0, 0x61, 0xb9, 0xf5, 0x05, 0x7f, 0x94, 0x63, 0x6b, 0xc2, 0x78, 0x31, 0x15, 0x25, 0x43, 0x44, 0xfb, 0x12, 0xe3, 0x3b, 0x16, 0x72, 0x72, 0xe1, 0x98, 0x83, 0x8a, 0x87, 0x28, 0xe7, 0x74, 0x4e, 0xa9, 0xa2, 0xe8, 0x24, 0x8e, 0x34, 0xd5, 0x90, 0x6e, 0x29, 0x83, 0x02, 0x47, 0x26, 0x37, 0xb8, 0x79, 0xde, 0x91, 0xc1, 0xa6, 0xf9, 0xf3, 0x31, 0xa5, 0xcf, 0x98, 0xa5, 0xaf, 0x29, 0x13, 0x29, 0x90, 0xd2, 0x74, 0x16 }; static const uint8_t ac_dsa_vect166_priv_val[] = { /* X */ 0x6b, 0xa8, 0x1e, 0x6c, 0xd4, 0x36, 0x77, 0x98, 0xaa, 0xab, 0x8b, 0x7a, 0xf1, 0x13, 0x51, 0x83, 0xa3, 0x7c, 0x42, 0xa7, 0x66, 0xdb, 0xd6, 0x8c, 0xd2, 0xdc, 0xe7, 0x8f, 0x26, 0x70, 0xef, 0x0f }; static const uint8_t ac_dsa_vect166_pub_val[] = { /* Y */ 0x7b, 0xb3, 0x1e, 0x98, 0xc7, 0xa0, 0x43, 0x7f, 0x97, 0x8a, 0x73, 0xd5, 0xdc, 0xfb, 0xdf, 0xbb, 0x09, 0xcc, 0x24, 0x99, 0xdf, 0xaf, 0x1e, 0xb5, 0x25, 0x6b, 0xcc, 0xd6, 0x35, 0x8c, 0xab, 0xb5, 0xf6, 0x7d, 0x04, 0xa4, 0x28, 0x23, 0x46, 0x3b, 0x7e, 0x95, 0x7f, 0x2b, 0x92, 0x13, 0xf1, 0xfa, 0x8e, 0x5a, 0x98, 0xd6, 0x14, 0x48, 0x47, 0x01, 0xab, 0xb8, 0xc7, 0xd6, 0x76, 0x41, 0xfe, 0x6e, 0xd0, 0x6f, 0xa4, 0x52, 0x7b, 0x49, 0x3d, 0xda, 0xb2, 0xe7, 0x46, 0x40, 0xfd, 0xe3, 0xde, 0x70, 0xda, 0x69, 0x3f, 0x1d, 0xb2, 0xb8, 0xe2, 0x64, 0x17, 0x04, 0x0a, 0xf0, 0xee, 0xa6, 0xca, 0xb4, 0x51, 0xa7, 0x95, 0xa5, 0x2e, 0x18, 0x7d, 0x2e, 0xe2, 0x41, 0xb9, 0x3f, 0x65, 0xc8, 0x6c, 0x6d, 0x66, 0xf4, 0x58, 0x34, 0xcc, 0xe1, 0x65, 0xac, 0x5e, 0xb6, 0x70, 0xd4, 0xf0, 0x09, 0x5c, 0x23, 0xce, 0x97, 0x57, 0xe3, 0xbd, 0xc6, 0x36, 0xf9, 0x91, 0xee, 0x00, 0x73, 0xd9, 0x0a, 0x09, 0x20, 0x2e, 0xdb, 0x35, 0xcc, 0x3e, 0xa1, 0xcf, 0x9a, 0xdc, 0xa1, 0x61, 0x7f, 0xa0, 0xbf, 0xfd, 0x9c, 0x12, 0x62, 0x29, 0xa6, 0x04, 0xa1, 0xd3, 0xbf, 0x49, 0x31, 0xdd, 0xf0, 0xb9, 0x94, 0x2d, 0xfc, 0x8a, 0x2f, 0x8c, 0x09, 0xfc, 0xc9, 0x70, 0x32, 0x56, 0x4a, 0x79, 0xae, 0x1e, 0xbe, 0x1e, 0x2c, 0xe4, 0x9f, 0xf5, 0x78, 0x39, 0xe7, 0xc4, 0x3f, 0xa6, 0x0b, 0x16, 0x03, 0xd1, 0x5a, 0x45, 0x08, 0x98, 0xaa, 0x4e, 0x4a, 0x1e, 0xe8, 0x06, 0x57, 0x94, 0x12, 0x6d, 0x64, 0xf0, 0x13, 0x36, 0x70, 0x96, 0xa8, 0x36, 0x86, 0xb9, 0xf1, 0x58, 0xc3, 0x3b, 0x10, 0xf5, 0xf3, 0xb3, 0x6c, 0xf1, 0xf6, 0x35, 0x8b, 0x3f, 0x34, 0xf8, 0x4b, 0x10, 0x1d, 0xc2, 0x6d, 0x3d, 0xb6, 0x8b, 0xcc, 0x95, 0xc8 }; /* K = 45030b79a395b1632700cbaffead97998d02bed8e0656876fc0174e4bdb96f79 */ static const uint8_t ac_dsa_vect166_out[] = { /* R */ 0x05, 0x9b, 0xee, 0x9e, 0x70, 0x8b, 0x7f, 0x20, 0xc3, 0xf7, 0x91, 0xa6, 0x40, 0xed, 0xee, 0x96, 0x4e, 0x0a, 0xa6, 0x72, 0x89, 0x3c, 0x48, 0x47, 0x99, 0x71, 0x58, 0x17, 0xb3, 0xa8, 0xf6, 0xd4, /* S */ 0x4b, 0xd4, 0x1c, 0x84, 0xa7, 0x24, 0xcc, 0x86, 0xe4, 0xf0, 0x19, 0x4e, 0xc0, 0xfb, 0xf3, 0x79, 0xe6, 0x54, 0xd0, 0xd7, 0xf6, 0xa1, 0xf0, 0x8b, 0xd4, 0x68, 0x13, 0x94, 0x22, 0xa5, 0xc3, 0x53 }; #define ac_dsa_vect167_prime ac_dsa_vect166_prime #define ac_dsa_vect167_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect167_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect167_ptx[] = { /* Msg */ 0x05, 0x77, 0xee, 0x4a, 0x9b, 0x8d, 0xbe, 0x3c, 0x6f, 0xb9, 0x72, 0x51, 0x74, 0xe8, 0x99, 0x40, 0xb2, 0x7e, 0x8a, 0x98, 0x92, 0x17, 0xb6, 0x44, 0x17, 0xe6, 0x6f, 0x39, 0x6a, 0x35, 0xe5, 0x82, 0x4f, 0x21, 0xe5, 0x82, 0x36, 0xb2, 0x79, 0x10, 0xa3, 0xbe, 0x6b, 0x57, 0xd3, 0x11, 0xaa, 0x77, 0x8b, 0xef, 0x63, 0xdd, 0x02, 0x5d, 0x94, 0x35, 0x30, 0x1a, 0xef, 0xc9, 0x22, 0x23, 0xc1, 0xaa, 0xbb, 0x03, 0xd3, 0xd5, 0xd3, 0x85, 0xb1, 0xa3, 0xd1, 0xf9, 0x37, 0xf0, 0xf1, 0xf7, 0xf8, 0xba, 0xba, 0x91, 0xa0, 0x11, 0x20, 0x74, 0x80, 0xb5, 0xc2, 0x3a, 0x78, 0xeb, 0xae, 0xa6, 0x9a, 0xe8, 0xad, 0x43, 0x73, 0xb2, 0xb0, 0x52, 0xd6, 0x0c, 0x54, 0x61, 0x11, 0x14, 0x79, 0x59, 0x1f, 0x83, 0x30, 0x12, 0x3b, 0xf7, 0x43, 0x70, 0xfb, 0xa6, 0x6b, 0xc7, 0xe2, 0xb4, 0x00, 0x19, 0x2c, 0x47 }; static const uint8_t ac_dsa_vect167_priv_val[] = { /* X */ 0x7b, 0xd8, 0x11, 0xcf, 0x60, 0x56, 0xc1, 0xa8, 0x21, 0xa8, 0x5a, 0x31, 0x69, 0x11, 0x36, 0x39, 0xd7, 0x75, 0x24, 0x7b, 0xc6, 0x57, 0x8c, 0x9e, 0xeb, 0x28, 0xd4, 0xb0, 0x95, 0x03, 0xac, 0x0b }; static const uint8_t ac_dsa_vect167_pub_val[] = { /* Y */ 0xc5, 0x4a, 0x57, 0xb0, 0x8f, 0x25, 0x5d, 0xb1, 0xc7, 0x76, 0xbb, 0x21, 0x26, 0xea, 0x3c, 0x1e, 0x60, 0x22, 0x9f, 0x1e, 0x19, 0x81, 0xe4, 0x3f, 0x1d, 0x6b, 0x91, 0x10, 0xf9, 0x50, 0xed, 0xd8, 0x24, 0x5e, 0xec, 0xa7, 0xd5, 0x5b, 0xa0, 0x64, 0x68, 0x04, 0x08, 0x55, 0xb7, 0x36, 0xdb, 0x50, 0x2f, 0x01, 0xd6, 0xb3, 0xcb, 0x2d, 0x9d, 0x62, 0x1c, 0x4d, 0xb4, 0x4c, 0xf8, 0xcb, 0x39, 0x0a, 0xb2, 0xae, 0x33, 0x2b, 0xca, 0x21, 0x9e, 0x09, 0xbb, 0xbb, 0xc2, 0x25, 0x54, 0x1d, 0x4a, 0x0e, 0xc0, 0xb4, 0xf1, 0x1a, 0x59, 0x1c, 0x07, 0x7f, 0x23, 0x82, 0xf0, 0x4b, 0xd9, 0x3b, 0x36, 0x4c, 0x94, 0xfb, 0x1c, 0x61, 0x47, 0xff, 0x77, 0x84, 0xe8, 0x25, 0x58, 0xe5, 0xfb, 0x68, 0x42, 0x74, 0x59, 0xfa, 0x9a, 0x69, 0xd7, 0x8a, 0x9f, 0x60, 0x51, 0xbd, 0x94, 0x31, 0x88, 0x7a, 0xce, 0x46, 0xfa, 0x49, 0x70, 0xf0, 0xe2, 0x2d, 0x75, 0xd2, 0xbe, 0xfa, 0x5a, 0x22, 0x8e, 0x48, 0x9e, 0x00, 0x9a, 0xf9, 0x7c, 0xe9, 0x21, 0x14, 0x08, 0xb4, 0xe5, 0xbf, 0xe3, 0x7d, 0x3e, 0x07, 0x00, 0xb2, 0x58, 0xb5, 0x41, 0x74, 0xa5, 0x12, 0x5e, 0xb6, 0xbb, 0xec, 0xa3, 0x88, 0x05, 0xda, 0x53, 0xb1, 0xf5, 0x82, 0x9d, 0xfd, 0xec, 0x8c, 0x4c, 0x93, 0x76, 0xbf, 0x23, 0x5b, 0x7b, 0x0e, 0xb7, 0x11, 0x9d, 0x3d, 0x69, 0x76, 0x8b, 0x80, 0xee, 0x02, 0x23, 0x45, 0x89, 0xb8, 0xd9, 0x5f, 0xaf, 0x80, 0x62, 0xa8, 0xe1, 0xe9, 0xc3, 0xa6, 0x86, 0xb6, 0x35, 0x0e, 0x30, 0xfa, 0x53, 0x5e, 0xaa, 0xe7, 0x1d, 0x75, 0x3b, 0x7c, 0x3b, 0x04, 0x8f, 0x8e, 0x97, 0x22, 0x25, 0x4d, 0xed, 0xbc, 0x22, 0x0a, 0xc9, 0xc9, 0xaf, 0x07, 0x84, 0x53, 0x20, 0x32, 0xab, 0x65, 0xe4, 0x8c, 0xcf, 0xcf, 0xd6, 0x23 }; /* K = 7ce602ece3f821390641dec7ae01b44df0fc822de1c013496bade2e3e44fff0b */ static const uint8_t ac_dsa_vect167_out[] = { /* R */ 0x33, 0xc1, 0x98, 0xea, 0x68, 0xbe, 0xc4, 0xa7, 0xfe, 0xda, 0xf0, 0x30, 0x9c, 0x31, 0x7d, 0x33, 0x6b, 0x97, 0xd1, 0xeb, 0x1f, 0x1d, 0xc4, 0x4e, 0xba, 0xf5, 0xc8, 0x5c, 0x5a, 0x3a, 0xfa, 0x98, /* S */ 0x5c, 0x9b, 0x23, 0xc1, 0x3b, 0xb6, 0x07, 0xbe, 0x54, 0x73, 0xb3, 0x2a, 0xe2, 0xb5, 0xe8, 0xf2, 0xa1, 0xe1, 0x8f, 0x59, 0xdf, 0x8c, 0xa7, 0xfd, 0x93, 0x03, 0xf7, 0x6e, 0xd8, 0xe6, 0x80, 0xe3 }; #define ac_dsa_vect168_prime ac_dsa_vect166_prime #define ac_dsa_vect168_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect168_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect168_ptx[] = { /* Msg */ 0xc6, 0x43, 0x69, 0x5d, 0x29, 0xb2, 0x82, 0x10, 0x01, 0x7a, 0xa5, 0xa7, 0xd1, 0x6e, 0xbe, 0xd8, 0x1b, 0xa0, 0x0a, 0x86, 0x9d, 0x66, 0x81, 0xd1, 0xc0, 0xfe, 0x90, 0xa5, 0xe8, 0xbe, 0x9d, 0x59, 0x73, 0x29, 0xea, 0x15, 0xd2, 0x4b, 0xa1, 0x2d, 0x77, 0xe4, 0xc3, 0xf2, 0x16, 0x0b, 0xcb, 0xe8, 0x08, 0x84, 0x0c, 0x6e, 0x77, 0xb0, 0x52, 0x8b, 0xf9, 0xae, 0x58, 0x87, 0x38, 0xe2, 0x2f, 0x41, 0x91, 0x0a, 0x80, 0xa7, 0xc6, 0xe3, 0x34, 0x0c, 0x12, 0x7b, 0x9d, 0xe1, 0x79, 0x45, 0xe7, 0xf9, 0x22, 0x99, 0x53, 0xe2, 0x85, 0x02, 0x17, 0xb6, 0xd4, 0x86, 0xf7, 0xcc, 0x80, 0x4e, 0x72, 0x0d, 0xe2, 0x14, 0xce, 0xf0, 0x2d, 0xf4, 0xa8, 0x92, 0xf7, 0xe4, 0x28, 0x98, 0xf1, 0x5c, 0xaa, 0xd2, 0x6b, 0xb3, 0x0b, 0xfa, 0xf4, 0xb0, 0x55, 0x1a, 0xee, 0xa1, 0x40, 0x35, 0xcb, 0x75, 0x6b, 0x11 }; static const uint8_t ac_dsa_vect168_priv_val[] = { /* X */ 0x3f, 0xf2, 0x65, 0x3c, 0xbc, 0x1f, 0x27, 0x25, 0x34, 0x00, 0xa9, 0xb6, 0xb1, 0xf0, 0x64, 0x24, 0x70, 0x53, 0xc9, 0x81, 0x6c, 0xfd, 0xcb, 0x70, 0x4b, 0x14, 0xbd, 0xec, 0xe2, 0xa8, 0x55, 0x8b }; static const uint8_t ac_dsa_vect168_pub_val[] = { /* Y */ 0x17, 0xff, 0x2a, 0x5e, 0xff, 0x39, 0x26, 0xee, 0x15, 0x20, 0xd5, 0xa6, 0x3a, 0x13, 0xb4, 0xf7, 0x01, 0xdc, 0xee, 0xd2, 0x5a, 0x65, 0x39, 0x66, 0xf5, 0x25, 0x45, 0x0b, 0x3a, 0x63, 0xb0, 0x32, 0x29, 0xd6, 0x15, 0xec, 0x54, 0xcf, 0x4f, 0x6d, 0xdb, 0x86, 0x8b, 0x54, 0xdf, 0x36, 0x3f, 0xee, 0xcc, 0x95, 0xeb, 0x8a, 0x3a, 0xb2, 0x58, 0x7f, 0xc4, 0xde, 0x9c, 0x93, 0xdc, 0x8f, 0x8d, 0x7f, 0x38, 0xf9, 0x90, 0x82, 0xd2, 0x86, 0x7b, 0x23, 0xd0, 0x73, 0x58, 0x4c, 0x83, 0x1b, 0xaa, 0x09, 0x61, 0x65, 0x1e, 0x07, 0x1b, 0x43, 0xf9, 0xd5, 0xda, 0x97, 0xb6, 0x0e, 0x7b, 0x5b, 0x7a, 0x93, 0x5f, 0x6c, 0x1d, 0xc8, 0x82, 0x79, 0x60, 0x8e, 0x2b, 0xec, 0x5c, 0xac, 0x61, 0x62, 0x48, 0x80, 0x85, 0xd0, 0x92, 0xa9, 0x7c, 0x6b, 0x6f, 0x24, 0x53, 0x65, 0x89, 0xb8, 0x01, 0xb6, 0xb4, 0x8d, 0x47, 0x87, 0x96, 0xb5, 0x2c, 0x05, 0x56, 0x4e, 0x90, 0x4b, 0xc5, 0x8a, 0xc1, 0x50, 0x50, 0x74, 0xdb, 0x37, 0x34, 0xfc, 0xf3, 0x57, 0x5f, 0x79, 0x95, 0x2b, 0xa0, 0xa2, 0xa0, 0x69, 0x7e, 0x55, 0xe5, 0x79, 0xd5, 0x08, 0xa4, 0x00, 0xeb, 0xfb, 0x2d, 0x46, 0x94, 0xb7, 0x20, 0x80, 0x4a, 0x9d, 0x00, 0xf8, 0x84, 0x5e, 0xf0, 0xa8, 0xe6, 0x90, 0xe6, 0x75, 0xb4, 0xc1, 0xce, 0x07, 0x99, 0x6d, 0x64, 0xe6, 0x66, 0xb0, 0xd6, 0xa1, 0xd6, 0xfc, 0x6b, 0xbc, 0x3c, 0xd9, 0xb5, 0xcc, 0x38, 0x64, 0xe5, 0xe8, 0x88, 0xe3, 0xc3, 0x35, 0xe0, 0x5e, 0x83, 0xc6, 0x7c, 0x00, 0x33, 0xba, 0x5e, 0xfc, 0x3d, 0xcd, 0xec, 0x04, 0x46, 0xd3, 0xb4, 0x07, 0x93, 0x23, 0x6c, 0xa0, 0x74, 0xc5, 0x4d, 0x2a, 0x74, 0xda, 0xd2, 0x96, 0xd7, 0xc6, 0x39, 0xde, 0xc9, 0x38, 0xe3, 0xbf, 0x1c, 0xa0, 0x85, 0xdc }; /* K = 356b49268eb799dc4db7781a06be0f8b96d28f6a13b7523c0ecbe70cb3eea1aa */ static const uint8_t ac_dsa_vect168_out[] = { /* R */ 0x4d, 0xdd, 0x2a, 0x1f, 0x41, 0x1b, 0x57, 0x0f, 0xef, 0x6d, 0x91, 0x84, 0x40, 0x9b, 0x4f, 0xd5, 0x5d, 0x12, 0xc5, 0xe4, 0xbd, 0xdc, 0x2a, 0xc7, 0x21, 0x12, 0x35, 0x87, 0x33, 0x22, 0x15, 0x5d, /* S */ 0x40, 0x43, 0x95, 0x2c, 0x10, 0x8e, 0xf8, 0x4a, 0x25, 0xa1, 0x68, 0xea, 0x5b, 0x64, 0xa4, 0x38, 0x6f, 0x7a, 0x48, 0x33, 0x66, 0x05, 0x4c, 0x5d, 0xfb, 0xfc, 0x5f, 0xa9, 0x85, 0x79, 0x43, 0x2a }; #define ac_dsa_vect169_prime ac_dsa_vect166_prime #define ac_dsa_vect169_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect169_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect169_ptx[] = { /* Msg */ 0x2f, 0x64, 0xd1, 0x1e, 0x29, 0x02, 0x75, 0x98, 0x7b, 0x7d, 0x74, 0x30, 0x24, 0x22, 0x89, 0xaf, 0xd5, 0x4f, 0x1b, 0xe0, 0x28, 0xcf, 0x36, 0xf8, 0xf5, 0x5d, 0xb5, 0x4b, 0xe7, 0x0b, 0x8d, 0xd5, 0xad, 0x74, 0xae, 0x26, 0xe0, 0x79, 0xd0, 0xed, 0x31, 0xa3, 0x61, 0xc1, 0x16, 0x95, 0x1b, 0xde, 0x94, 0xd6, 0x86, 0xab, 0xf1, 0x5a, 0xc5, 0xed, 0x14, 0x70, 0xc3, 0xe9, 0x02, 0x46, 0x1c, 0xea, 0x8e, 0x5d, 0x58, 0xf4, 0x07, 0xd2, 0xe0, 0xc0, 0x72, 0xee, 0x61, 0x56, 0x7d, 0xa7, 0xb3, 0x53, 0xf6, 0xc4, 0x7e, 0x69, 0x4c, 0xd6, 0x07, 0xf3, 0xae, 0x89, 0x4a, 0x97, 0x05, 0xe8, 0xea, 0x2b, 0xf9, 0xce, 0xec, 0x3a, 0xcf, 0xa6, 0xd2, 0x0b, 0x23, 0x8b, 0xf0, 0xa7, 0xa7, 0xea, 0xc7, 0x6c, 0x44, 0x62, 0xb7, 0xe4, 0xe4, 0xe8, 0x68, 0x17, 0x4a, 0x88, 0xa6, 0xa6, 0xc9, 0x47, 0x6c, 0xdf }; static const uint8_t ac_dsa_vect169_priv_val[] = { /* X */ 0x48, 0x00, 0xe9, 0xec, 0xd9, 0xbe, 0xf5, 0xa4, 0xd4, 0x6a, 0xca, 0x60, 0xac, 0xa9, 0x69, 0x55, 0xd8, 0x56, 0x5e, 0x1b, 0x85, 0xd8, 0x4d, 0xd8, 0x14, 0x1d, 0x4f, 0x59, 0x7e, 0x17, 0x8b, 0xff }; static const uint8_t ac_dsa_vect169_pub_val[] = { /* Y */ 0x41, 0xcd, 0xb2, 0xc1, 0xbd, 0xfa, 0x36, 0x52, 0xee, 0x49, 0x69, 0x5d, 0x5e, 0x5e, 0xee, 0xc0, 0x0f, 0x64, 0xb5, 0x4b, 0x56, 0x76, 0xee, 0x27, 0xf0, 0x43, 0xb4, 0x3f, 0x24, 0x13, 0x3f, 0x61, 0x42, 0x5b, 0x0c, 0xeb, 0xaa, 0x1f, 0x88, 0xda, 0x07, 0x2c, 0xc6, 0x88, 0x65, 0xc1, 0x27, 0x90, 0xc4, 0x32, 0x85, 0xb7, 0xe1, 0x9c, 0x38, 0x44, 0xfc, 0x7d, 0x81, 0xd0, 0x64, 0x42, 0x3f, 0xf1, 0xe1, 0x92, 0x66, 0xf6, 0x9f, 0x7d, 0xcb, 0x3d, 0x02, 0x03, 0x73, 0x9f, 0x84, 0xd7, 0x3b, 0xf0, 0x0c, 0x52, 0xd6, 0x0b, 0x28, 0x75, 0x17, 0x12, 0x16, 0x67, 0x8d, 0x59, 0xfb, 0x55, 0x75, 0x53, 0xed, 0xc9, 0xeb, 0xa6, 0xb8, 0x41, 0x27, 0x16, 0x9f, 0xe5, 0xdd, 0x2f, 0x81, 0xfc, 0x90, 0x2c, 0x97, 0x0d, 0x1d, 0x8d, 0x9c, 0x47, 0x79, 0xdf, 0xa1, 0xb1, 0x43, 0x09, 0xf8, 0x10, 0x06, 0xee, 0x64, 0x17, 0x76, 0xa6, 0xfa, 0x36, 0x33, 0x9e, 0x96, 0x31, 0x17, 0x44, 0x7a, 0xce, 0xb8, 0x23, 0xc9, 0xca, 0x33, 0x67, 0x17, 0x2e, 0xdd, 0xaf, 0x6e, 0x36, 0x18, 0x29, 0xda, 0xe4, 0x3c, 0x40, 0x38, 0xcd, 0xb9, 0x0e, 0xbb, 0x68, 0xb5, 0x3c, 0x0a, 0x22, 0xd4, 0x10, 0xb6, 0xf1, 0xbf, 0xa7, 0xc4, 0x74, 0x96, 0xea, 0x3a, 0xed, 0xdc, 0x36, 0xbf, 0x24, 0xf2, 0x19, 0xb8, 0x59, 0x17, 0xa2, 0x4d, 0x30, 0x84, 0x7c, 0x77, 0xd8, 0x7d, 0x22, 0xa7, 0xf7, 0x48, 0x6c, 0x66, 0x84, 0x75, 0x5e, 0x04, 0x5d, 0xdf, 0x72, 0xd4, 0x16, 0x50, 0xe9, 0x7b, 0x64, 0xa6, 0x4b, 0xec, 0xad, 0xfc, 0x47, 0xd5, 0x35, 0x55, 0x12, 0x7f, 0x8b, 0x7a, 0xb7, 0x8d, 0x48, 0x05, 0x29, 0x57, 0x19, 0x96, 0xee, 0xde, 0x46, 0x18, 0x88, 0x2d, 0x83, 0x8b, 0xd6, 0x95, 0xef, 0xc8, 0x7e, 0x74, 0xd6, 0x8c, 0xa5 }; /* K = 460410eaeb111a18cf894468e10a88b8de8ef9dfd9a2ea1882a9fb696fd7823d */ static const uint8_t ac_dsa_vect169_out[] = { /* R */ 0x4f, 0xe6, 0xe2, 0xa7, 0x5d, 0x9c, 0x72, 0xe8, 0x1a, 0xc6, 0x0d, 0xd3, 0x3d, 0x31, 0x18, 0x0d, 0xf8, 0x29, 0xb3, 0x1a, 0x0d, 0xbd, 0x5f, 0xd2, 0x0b, 0x7e, 0x28, 0xc4, 0xfe, 0xe2, 0x7d, 0x5b, /* S */ 0x3c, 0xe4, 0xa0, 0x6b, 0xfa, 0xf7, 0x0c, 0xb6, 0xcc, 0x93, 0xf3, 0x3f, 0x95, 0xa4, 0x3a, 0xd7, 0x7e, 0xd7, 0xad, 0x7c, 0x77, 0xa1, 0x67, 0x4b, 0xf8, 0x49, 0xe9, 0xeb, 0xbc, 0x5e, 0xda, 0x29 }; #define ac_dsa_vect170_prime ac_dsa_vect166_prime #define ac_dsa_vect170_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect170_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect170_ptx[] = { /* Msg */ 0x17, 0x3c, 0x4a, 0x23, 0x62, 0x1c, 0x32, 0xc3, 0xe4, 0xb1, 0x57, 0xef, 0x96, 0xb0, 0x2f, 0xc1, 0xbb, 0x46, 0x6a, 0x25, 0x37, 0xd3, 0xf6, 0xe5, 0x1a, 0x58, 0xe5, 0x10, 0xc4, 0xae, 0xf3, 0xaa, 0xe4, 0xbc, 0xe4, 0xc0, 0xb4, 0xd5, 0x9b, 0xb1, 0xc0, 0x0e, 0x7a, 0x35, 0xf9, 0x89, 0x45, 0xca, 0x9d, 0x7f, 0xdf, 0x1f, 0x0b, 0xac, 0x73, 0x2d, 0x42, 0x50, 0x43, 0x06, 0x2b, 0xc6, 0xd3, 0x20, 0x15, 0x23, 0x3d, 0xfb, 0x29, 0x5a, 0xe0, 0x8a, 0x32, 0x4a, 0xc7, 0xc1, 0xe0, 0x2a, 0x11, 0x7c, 0xe4, 0x36, 0xd7, 0x7d, 0x4e, 0x46, 0xd0, 0xb7, 0x94, 0xaf, 0x04, 0xb1, 0xdb, 0x82, 0xa2, 0x70, 0x9d, 0xa1, 0xc4, 0x44, 0x9c, 0x29, 0xcc, 0xba, 0x93, 0xdb, 0x8e, 0xc4, 0x8e, 0xb1, 0x79, 0x21, 0xcb, 0x38, 0x9f, 0x6e, 0x0a, 0xe3, 0x29, 0x95, 0xd7, 0xfe, 0xe1, 0xfa, 0x07, 0x17, 0x7a, 0x7a }; static const uint8_t ac_dsa_vect170_priv_val[] = { /* X */ 0x3e, 0x69, 0x6f, 0x22, 0x6f, 0x21, 0x91, 0x64, 0x55, 0xf8, 0xcc, 0xc8, 0x61, 0xb1, 0x84, 0x53, 0x03, 0x86, 0x7b, 0x75, 0x30, 0x3e, 0xd9, 0x2f, 0x9a, 0xc7, 0x90, 0x88, 0xf5, 0x6e, 0xa7, 0x08 }; static const uint8_t ac_dsa_vect170_pub_val[] = { /* Y */ 0x67, 0x3e, 0x34, 0x9c, 0xf6, 0xd0, 0x5c, 0xaa, 0x16, 0x75, 0x1d, 0x97, 0xba, 0x6e, 0x34, 0x4e, 0x40, 0xe1, 0x58, 0xe6, 0xa7, 0xfc, 0x53, 0xea, 0x2d, 0xb8, 0x78, 0x91, 0x34, 0x1e, 0x64, 0x99, 0x82, 0x5b, 0x5b, 0x9e, 0xdb, 0xce, 0x91, 0x90, 0xbd, 0x87, 0xc3, 0xea, 0xdf, 0x7c, 0x6d, 0x5b, 0xf0, 0xa7, 0x93, 0xaf, 0x2c, 0x3a, 0x1c, 0x8d, 0xed, 0x79, 0x0b, 0xc3, 0x19, 0x44, 0x93, 0x94, 0xc6, 0x43, 0x84, 0x30, 0x58, 0x64, 0x72, 0x3a, 0x8a, 0x7b, 0xfe, 0xf2, 0x6c, 0x08, 0x20, 0x30, 0xab, 0x36, 0x0b, 0xf9, 0xab, 0xb1, 0x11, 0x17, 0xe6, 0x1b, 0x00, 0x54, 0x97, 0x26, 0xd7, 0x72, 0x22, 0x1f, 0x6f, 0x67, 0xc4, 0xa6, 0xa1, 0x10, 0xcd, 0x9a, 0x96, 0x58, 0x78, 0x1e, 0xa8, 0xf7, 0xef, 0x2f, 0x17, 0x6c, 0x6e, 0x88, 0x16, 0xa8, 0x65, 0xaf, 0x39, 0x6d, 0xb9, 0x5d, 0x84, 0x15, 0xb5, 0x41, 0xcf, 0x0f, 0x83, 0xe4, 0x5a, 0x41, 0x73, 0x74, 0xcf, 0x3a, 0xcf, 0x5c, 0x6b, 0x4a, 0x98, 0x39, 0x05, 0x22, 0xe7, 0x14, 0x0c, 0xc8, 0xaa, 0x3f, 0x9d, 0x2d, 0xd2, 0x63, 0x41, 0xd4, 0xeb, 0x79, 0xe4, 0xd9, 0x31, 0xa1, 0x78, 0xe3, 0xd5, 0x7d, 0xc5, 0x2b, 0xfd, 0xf9, 0x01, 0x15, 0xe0, 0x1b, 0x76, 0x09, 0x4a, 0xd0, 0x29, 0x49, 0x79, 0xd3, 0x5d, 0x92, 0xb5, 0x74, 0xce, 0x7b, 0x0c, 0x62, 0x7f, 0x08, 0xbe, 0x66, 0xf9, 0x9e, 0xff, 0xad, 0xc3, 0x3a, 0xed, 0x0f, 0x63, 0x4f, 0x6a, 0x89, 0x50, 0x74, 0x55, 0xd7, 0x34, 0x1e, 0xe6, 0x41, 0x83, 0xaa, 0x61, 0x0d, 0x8b, 0xb3, 0x23, 0x71, 0x47, 0xbd, 0x90, 0xdc, 0xd9, 0xc1, 0xa0, 0x3d, 0x89, 0xb2, 0x6e, 0xe3, 0x1d, 0xbe, 0xf5, 0xae, 0x7e, 0x76, 0x4b, 0xa9, 0xf7, 0x7b, 0x6a, 0x74, 0x34, 0xad, 0x2a, 0x8f, 0x96, 0x6c }; /* K = 2837f7fa85efafb433093231983ccef5d82080e6063f67c68ff93465b59d581e */ static const uint8_t ac_dsa_vect170_out[] = { /* R */ 0x39, 0x3d, 0x68, 0x1c, 0x3e, 0xdb, 0xa2, 0x8f, 0x7c, 0xb0, 0xf3, 0x05, 0x93, 0xb9, 0x4f, 0xc1, 0x5c, 0xca, 0x65, 0x9a, 0x80, 0xcf, 0xbc, 0xb3, 0xb2, 0x36, 0x45, 0x37, 0x22, 0xd5, 0xb4, 0x02, /* S */ 0x44, 0xf7, 0x42, 0x1b, 0xce, 0x1e, 0x52, 0x73, 0xa3, 0x0e, 0xc0, 0x16, 0xbb, 0x99, 0x69, 0xb7, 0x57, 0x19, 0x79, 0x87, 0x54, 0x8e, 0x43, 0x4e, 0x39, 0x5a, 0xb3, 0xde, 0x1b, 0x0e, 0x7b, 0xa2 }; #define ac_dsa_vect171_prime ac_dsa_vect166_prime #define ac_dsa_vect171_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect171_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect171_ptx[] = { /* Msg */ 0x7d, 0x6f, 0x2a, 0x97, 0xe1, 0xeb, 0x08, 0x5c, 0xb9, 0xe8, 0x3a, 0xa2, 0x40, 0x47, 0xaf, 0x9b, 0xa3, 0x0a, 0x05, 0xd7, 0xba, 0xb5, 0x64, 0xa1, 0x49, 0xb9, 0xcd, 0x23, 0x66, 0x51, 0x8e, 0x8f, 0x19, 0x91, 0x34, 0xfc, 0x2c, 0xa4, 0x03, 0x94, 0x7f, 0x2a, 0x61, 0x4c, 0x03, 0x63, 0xed, 0x4b, 0xc1, 0x34, 0x9d, 0xc4, 0x96, 0xa8, 0xec, 0x74, 0xd8, 0x80, 0x57, 0x84, 0x75, 0xe4, 0x74, 0x27, 0x62, 0x8b, 0xb0, 0x23, 0xf0, 0x27, 0x22, 0x08, 0x87, 0x6a, 0x3a, 0x73, 0x33, 0x30, 0x7a, 0x59, 0x6c, 0x15, 0x8e, 0xba, 0x64, 0xce, 0x42, 0xa3, 0xc7, 0x90, 0xe7, 0x16, 0x7b, 0xa4, 0xa3, 0x27, 0xac, 0x71, 0xaa, 0xba, 0xd2, 0xf3, 0x63, 0x41, 0xed, 0xea, 0x12, 0xce, 0x5b, 0x2b, 0x73, 0x58, 0x07, 0xb3, 0x4b, 0x71, 0x4a, 0x49, 0xa0, 0xaa, 0x47, 0x68, 0x93, 0x57, 0x8f, 0x06, 0x45, 0xdb }; static const uint8_t ac_dsa_vect171_priv_val[] = { /* X */ 0x66, 0x08, 0x98, 0x41, 0x3f, 0x7a, 0x71, 0x80, 0x44, 0x32, 0xec, 0xfa, 0x11, 0xcc, 0x68, 0xf8, 0x5a, 0x34, 0xfd, 0xf7, 0x50, 0x12, 0xc9, 0x65, 0x25, 0x9e, 0xa6, 0xca, 0x0b, 0xbc, 0xd9, 0x76 }; static const uint8_t ac_dsa_vect171_pub_val[] = { /* Y */ 0x77, 0x7c, 0x25, 0x10, 0x67, 0xc8, 0xab, 0x16, 0xcc, 0xe2, 0xc4, 0xa4, 0xd7, 0x84, 0xc7, 0xe8, 0x06, 0xfd, 0x29, 0x6c, 0xbb, 0xba, 0xb0, 0x13, 0x2e, 0x2a, 0xb9, 0x16, 0x23, 0xac, 0xec, 0xd8, 0x30, 0xe7, 0xcc, 0x7c, 0xde, 0x03, 0xe5, 0x44, 0xb5, 0x1f, 0xb1, 0xd8, 0xf0, 0xb2, 0xee, 0xc0, 0x9f, 0x55, 0x95, 0x39, 0xaa, 0x9d, 0x63, 0xeb, 0xc0, 0xc1, 0xe3, 0x25, 0x79, 0xf0, 0x95, 0x47, 0x3d, 0x12, 0x71, 0x7c, 0xe8, 0x8f, 0x66, 0x71, 0xec, 0x7e, 0x3d, 0x25, 0x81, 0xf6, 0x1b, 0xfd, 0xe6, 0x6c, 0xf9, 0xbe, 0x21, 0x6d, 0x6a, 0x20, 0x80, 0x86, 0xcd, 0x7b, 0xea, 0x77, 0x01, 0x50, 0xa9, 0xbb, 0x0a, 0x5a, 0x7a, 0x0d, 0xac, 0xe8, 0x2b, 0x46, 0x41, 0x80, 0x24, 0x12, 0x02, 0xa3, 0x0b, 0x26, 0xad, 0x5f, 0xb9, 0x33, 0xc8, 0x23, 0x5a, 0xc2, 0x91, 0x8e, 0x29, 0xbc, 0x53, 0xa5, 0xc0, 0x1e, 0xbc, 0x1e, 0x30, 0xb1, 0xb4, 0x6e, 0x37, 0x12, 0x4a, 0xec, 0x59, 0x6f, 0x8d, 0x1a, 0x73, 0xba, 0xea, 0xe5, 0x88, 0xce, 0x7d, 0x4a, 0xef, 0x1a, 0xe8, 0x4e, 0x9a, 0x97, 0x66, 0xc2, 0x43, 0x67, 0x32, 0x1c, 0x04, 0x7c, 0x3c, 0xab, 0xa6, 0x29, 0xf5, 0xd9, 0x18, 0x5f, 0x0f, 0xfb, 0x3a, 0xf7, 0xe5, 0x0e, 0xeb, 0xd1, 0xba, 0x0e, 0xb7, 0x7e, 0xb1, 0x21, 0xb9, 0x80, 0x73, 0x79, 0x4c, 0xbc, 0x66, 0x22, 0xb6, 0x78, 0x26, 0x2e, 0xd3, 0xe2, 0x29, 0xc6, 0xce, 0xeb, 0x60, 0x72, 0x74, 0xce, 0x34, 0x96, 0xf3, 0x70, 0xb4, 0x82, 0xbf, 0x8f, 0x68, 0xc2, 0x73, 0x66, 0x81, 0x84, 0x86, 0xb7, 0x2a, 0xdf, 0xc8, 0x10, 0xb2, 0xf5, 0x79, 0x77, 0x9a, 0xdc, 0x9c, 0x25, 0x00, 0x2e, 0x27, 0x76, 0x41, 0xdd, 0x9f, 0xfb, 0xc5, 0xdb, 0x52, 0x39, 0xf6, 0x77, 0xba, 0x1a, 0x9c, 0x1d }; /* K = 4abaf5c6f8e28356fd0dc6f096e9354baac1c2049170b2db05c81bacf02092f2 */ static const uint8_t ac_dsa_vect171_out[] = { /* R */ 0x46, 0x3b, 0x1f, 0xd6, 0xef, 0x29, 0x86, 0xf7, 0x5f, 0x96, 0x20, 0x77, 0x9b, 0xb6, 0xf4, 0x7e, 0x0b, 0xea, 0xfa, 0x93, 0x40, 0xe3, 0xe5, 0xee, 0x58, 0x9d, 0x92, 0x42, 0x8a, 0xcd, 0x4f, 0x2c, /* S */ 0x27, 0xed, 0xd3, 0x39, 0x17, 0xe4, 0x9b, 0xf7, 0x71, 0xf3, 0xfa, 0x13, 0x55, 0xcd, 0x39, 0x28, 0xd0, 0xbd, 0x40, 0x1a, 0xa7, 0xbf, 0x05, 0x41, 0xf3, 0xaf, 0x16, 0x43, 0xef, 0xd7, 0xb6, 0x77 }; #define ac_dsa_vect172_prime ac_dsa_vect166_prime #define ac_dsa_vect172_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect172_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect172_ptx[] = { /* Msg */ 0x7f, 0x87, 0x85, 0xe1, 0xc4, 0xf8, 0x2b, 0xc0, 0xbb, 0x75, 0xf7, 0x8d, 0x8c, 0x41, 0x13, 0xe0, 0x88, 0x7e, 0x76, 0x1a, 0x86, 0xb4, 0x8d, 0xfa, 0x43, 0xa3, 0x68, 0x3b, 0x2b, 0xb8, 0x86, 0xba, 0x53, 0xf5, 0x60, 0x3c, 0x8d, 0x94, 0xa0, 0x52, 0xaf, 0x36, 0x71, 0xc5, 0xc1, 0xe7, 0xc2, 0x32, 0x90, 0x8e, 0x10, 0xfa, 0xa6, 0xcd, 0x54, 0xef, 0xc7, 0x9c, 0xcf, 0xd6, 0x48, 0x11, 0x13, 0x1a, 0xcd, 0x7d, 0x60, 0xa9, 0x30, 0x97, 0x29, 0x45, 0x5a, 0xa7, 0x04, 0x43, 0xae, 0x8f, 0x32, 0xa3, 0x45, 0x80, 0xf9, 0xa1, 0xaa, 0x7d, 0x89, 0xe5, 0xfa, 0x8c, 0xd4, 0xe9, 0x58, 0x09, 0xa5, 0x73, 0xec, 0x6d, 0xfe, 0x9f, 0xe3, 0x5b, 0x11, 0x30, 0x57, 0x19, 0x82, 0xa0, 0xdd, 0x46, 0xee, 0xeb, 0xb6, 0xa1, 0x6f, 0x85, 0xee, 0x63, 0x14, 0x93, 0x18, 0x39, 0xe3, 0xa4, 0xc2, 0x9d, 0xc7, 0x00 }; static const uint8_t ac_dsa_vect172_priv_val[] = { /* X */ 0x4b, 0xe0, 0x92, 0x6f, 0xe2, 0x4d, 0xa1, 0x66, 0x7d, 0x71, 0xd2, 0xab, 0xc2, 0xbc, 0x0b, 0xf8, 0x71, 0x72, 0xc0, 0x5d, 0x7c, 0x36, 0x3a, 0x32, 0x4e, 0xc6, 0x1b, 0x46, 0x42, 0x77, 0x7e, 0x57 }; static const uint8_t ac_dsa_vect172_pub_val[] = { /* Y */ 0x28, 0xc0, 0x6e, 0x5a, 0xb3, 0xc8, 0x60, 0xbe, 0x8c, 0x13, 0xf7, 0x4f, 0x28, 0xb5, 0x79, 0x2b, 0x39, 0x48, 0x7b, 0x79, 0x54, 0x7f, 0x4a, 0xfa, 0xf6, 0xf7, 0x7a, 0x5c, 0x3a, 0x43, 0xe8, 0x81, 0x32, 0xed, 0xf9, 0x44, 0xee, 0x00, 0x15, 0x0a, 0x78, 0xb5, 0x8a, 0x78, 0xcf, 0x92, 0xed, 0x94, 0x15, 0x78, 0xec, 0x67, 0x9e, 0x10, 0x67, 0x67, 0x01, 0x4e, 0x5b, 0x27, 0x9c, 0x0e, 0xae, 0x9c, 0x40, 0x8e, 0x6e, 0xd6, 0x06, 0x87, 0xee, 0x14, 0x64, 0x98, 0x8e, 0xa5, 0x45, 0xf5, 0x5b, 0xe3, 0x67, 0x3e, 0xcd, 0xa1, 0x0c, 0x63, 0xfb, 0x0b, 0x19, 0x08, 0xe7, 0x96, 0xd6, 0x71, 0x5a, 0xbd, 0x54, 0x51, 0x84, 0x3d, 0xa6, 0xe6, 0x3b, 0xf8, 0x80, 0x2c, 0xca, 0xda, 0x32, 0xc7, 0xc5, 0x34, 0x23, 0x74, 0xab, 0x26, 0xee, 0x70, 0x1f, 0x9d, 0xb3, 0xd3, 0x4f, 0xc9, 0x6d, 0xe9, 0xd2, 0x30, 0x21, 0xb9, 0x8a, 0x93, 0xdf, 0x68, 0x77, 0xf8, 0x4f, 0xad, 0x67, 0x41, 0x16, 0x40, 0x55, 0x69, 0x6f, 0x3b, 0x72, 0x05, 0x03, 0x43, 0xea, 0x3e, 0x5c, 0xca, 0x01, 0xa3, 0xd5, 0x7e, 0x29, 0x72, 0x7e, 0xbc, 0xf8, 0x58, 0x31, 0x18, 0x14, 0x6c, 0x27, 0xf4, 0x2a, 0xda, 0xf6, 0x23, 0x65, 0xb9, 0x69, 0x7c, 0xf0, 0x3b, 0xdd, 0xc6, 0x9d, 0x0b, 0xd1, 0x51, 0xf7, 0x15, 0xb2, 0x3b, 0xfa, 0xaa, 0x27, 0xa3, 0x68, 0x11, 0x4b, 0x3d, 0xfb, 0x54, 0xc0, 0x84, 0xe0, 0x6d, 0x43, 0x43, 0xff, 0xde, 0x1c, 0xd2, 0x20, 0x58, 0xe9, 0x62, 0x3a, 0x70, 0xe9, 0x94, 0x2e, 0x09, 0x0e, 0xdc, 0x73, 0xdb, 0x06, 0xdd, 0x31, 0x80, 0xbb, 0x96, 0x0f, 0x0d, 0x7f, 0xed, 0x00, 0x5b, 0x14, 0x9b, 0x69, 0xd6, 0xd4, 0x5f, 0x40, 0x36, 0x8f, 0xc2, 0x5a, 0xe0, 0x43, 0x21, 0xed, 0xa4, 0x6d, 0x52, 0xa5, 0x92 }; /* K = 057cca710c8e4998e9fe154cc57847bf35a512e6caf3cd338372b5becc66e8e1 */ static const uint8_t ac_dsa_vect172_out[] = { /* R */ 0x31, 0x65, 0xb1, 0xcf, 0x3c, 0xa9, 0xbb, 0x89, 0x15, 0x4a, 0xd6, 0x84, 0xe0, 0x89, 0x36, 0x4f, 0x91, 0xb6, 0xe5, 0xd5, 0x94, 0x52, 0x60, 0x72, 0xf7, 0xb9, 0xdb, 0x3b, 0x23, 0x58, 0xe7, 0x11, /* S */ 0x49, 0xe1, 0xc8, 0xc3, 0x47, 0x24, 0xac, 0x55, 0x32, 0xff, 0xf1, 0xc7, 0xd2, 0x43, 0xb4, 0x86, 0xa2, 0xcd, 0xc0, 0x87, 0x2a, 0xb8, 0x4f, 0xda, 0x6c, 0xf2, 0xba, 0x96, 0xf9, 0x58, 0xf4, 0x6a }; #define ac_dsa_vect173_prime ac_dsa_vect166_prime #define ac_dsa_vect173_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect173_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect173_ptx[] = { /* Msg */ 0x3e, 0x17, 0xea, 0x8b, 0x9f, 0xeb, 0x2f, 0x4e, 0x55, 0xc1, 0x03, 0xe5, 0x8c, 0x4e, 0xad, 0x96, 0xb5, 0xcb, 0x89, 0x2d, 0x09, 0x82, 0xab, 0x2b, 0x0c, 0xb1, 0xee, 0xb9, 0xe1, 0xdd, 0xde, 0x99, 0x90, 0x23, 0x3a, 0x22, 0x58, 0x84, 0x73, 0x42, 0x1a, 0xad, 0xf5, 0x27, 0x67, 0xa8, 0xdf, 0x52, 0x4b, 0xc6, 0xe6, 0xed, 0x85, 0x7a, 0x9f, 0xd5, 0x94, 0x2e, 0xf9, 0x76, 0xb1, 0xfd, 0x8b, 0xca, 0xd3, 0x1e, 0x40, 0x3b, 0x1f, 0xeb, 0xb8, 0x65, 0xd2, 0x87, 0x2a, 0x7b, 0x34, 0xec, 0xdb, 0xab, 0x8b, 0x24, 0x5a, 0xda, 0x45, 0x24, 0x3a, 0x49, 0xc7, 0xbe, 0x67, 0xaa, 0x09, 0x78, 0x80, 0x29, 0x77, 0x9d, 0x61, 0x9d, 0xe3, 0x0d, 0xea, 0xd9, 0xf7, 0xd8, 0xc9, 0xc4, 0x21, 0x53, 0xb8, 0x65, 0xb1, 0xa9, 0xe8, 0x11, 0x80, 0x38, 0x0e, 0x27, 0xa3, 0x05, 0xa6, 0x39, 0x2f, 0x4b, 0x2a, 0x0b }; static const uint8_t ac_dsa_vect173_priv_val[] = { /* X */ 0x75, 0xc9, 0xb6, 0xc6, 0x3c, 0x80, 0x75, 0x5f, 0x7a, 0x7b, 0xf3, 0x8e, 0xab, 0xc5, 0x8e, 0x1b, 0xc2, 0xe0, 0xcc, 0x5c, 0xb4, 0xf2, 0x27, 0x4f, 0x2d, 0x63, 0x05, 0x81, 0x57, 0x65, 0x66, 0x08 }; static const uint8_t ac_dsa_vect173_pub_val[] = { /* Y */ 0xb7, 0x1d, 0x0a, 0xb2, 0xd4, 0x05, 0xa5, 0x01, 0x2d, 0x69, 0x4e, 0x0a, 0x4a, 0x82, 0x76, 0x92, 0x56, 0xcb, 0xdb, 0x49, 0xc1, 0x81, 0x12, 0xef, 0xee, 0x81, 0x53, 0xc8, 0xe8, 0x16, 0x31, 0x04, 0x86, 0xa1, 0x7b, 0xce, 0x19, 0x74, 0x8b, 0x11, 0xf3, 0xd5, 0xd1, 0x8c, 0xb4, 0x49, 0x98, 0xeb, 0x32, 0x9b, 0x95, 0x1c, 0x23, 0xa5, 0x7c, 0xac, 0x47, 0xec, 0x99, 0x73, 0x83, 0x9b, 0x13, 0x0f, 0x3a, 0x98, 0x0e, 0x62, 0x70, 0x5c, 0x07, 0x02, 0xe4, 0xd6, 0x84, 0x25, 0x84, 0x5d, 0x54, 0xe1, 0x52, 0xe2, 0xe8, 0x36, 0x46, 0xb5, 0x6a, 0x67, 0x57, 0xcd, 0xe0, 0x6f, 0x85, 0xba, 0x37, 0x79, 0xee, 0xa5, 0x85, 0xdf, 0xe8, 0x30, 0x2f, 0x12, 0xae, 0x77, 0xfa, 0x58, 0xcb, 0xc6, 0xdc, 0xca, 0x70, 0xb4, 0x61, 0x02, 0x4b, 0x7d, 0x17, 0x65, 0x10, 0xa3, 0x93, 0xec, 0x02, 0x7c, 0x76, 0x9c, 0xfe, 0x49, 0xb6, 0x98, 0xe5, 0x75, 0xfc, 0xf9, 0x9c, 0x60, 0x29, 0x3a, 0xf2, 0xad, 0xe3, 0xdc, 0x4d, 0xf2, 0x3f, 0xf3, 0x38, 0x6f, 0x13, 0x77, 0x73, 0x06, 0xc5, 0x2d, 0xe9, 0x7e, 0xd1, 0xa8, 0x86, 0xb8, 0x24, 0x78, 0x88, 0x63, 0xff, 0x72, 0x63, 0xbb, 0xbb, 0x5b, 0x5f, 0xa0, 0xd4, 0x68, 0x1c, 0x16, 0x94, 0x22, 0x72, 0xf5, 0xe4, 0x41, 0xbd, 0xf4, 0x9e, 0xec, 0x75, 0x56, 0xc1, 0xfd, 0x40, 0x9c, 0x78, 0xe3, 0xaa, 0xff, 0xeb, 0x95, 0xc1, 0x26, 0x7d, 0xee, 0x12, 0xc2, 0x4c, 0x04, 0x5e, 0xf6, 0x7a, 0xa7, 0x0e, 0x9a, 0x3d, 0x92, 0x44, 0xf2, 0xcf, 0x1a, 0xc6, 0x8c, 0xd9, 0x18, 0xdf, 0x5f, 0x62, 0xa3, 0xdd, 0x3d, 0xe7, 0xbc, 0xde, 0xaa, 0x3f, 0x61, 0xde, 0x51, 0xcc, 0x01, 0xaf, 0x63, 0x6b, 0xd6, 0x65, 0xc0, 0x09, 0x9d, 0x13, 0x93, 0x8e, 0xb4, 0xfc, 0x28, 0x9b, 0x42 }; /* K = 568b8f5049c2c411f05d74e1781be5718ff921026728d285f2a77025208dbd41 */ static const uint8_t ac_dsa_vect173_out[] = { /* R */ 0x11, 0xb7, 0xec, 0xfe, 0xb3, 0x39, 0xd6, 0x01, 0x49, 0x48, 0xde, 0x5a, 0xd4, 0xc9, 0x6f, 0x4b, 0xa5, 0x17, 0xa2, 0xcd, 0xdc, 0xa6, 0x11, 0xc8, 0x88, 0x7f, 0xc4, 0x4f, 0x14, 0xac, 0x9a, 0x63, /* S */ 0x13, 0x28, 0x7a, 0x22, 0xcf, 0xfd, 0x82, 0x53, 0x02, 0xb0, 0xfd, 0xc0, 0x95, 0x54, 0x58, 0xd9, 0x18, 0x72, 0x70, 0x92, 0xc7, 0xbf, 0xb3, 0xec, 0x4c, 0x3d, 0x7a, 0x83, 0x8e, 0xa6, 0xc4, 0x91 }; #define ac_dsa_vect174_prime ac_dsa_vect166_prime #define ac_dsa_vect174_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect174_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect174_ptx[] = { /* Msg */ 0xc3, 0xe1, 0x90, 0x3c, 0xec, 0xcb, 0x2a, 0xf5, 0xb0, 0xdc, 0x6b, 0x1f, 0xba, 0xaf, 0x1b, 0x2e, 0x96, 0x47, 0x7e, 0x00, 0x1c, 0x43, 0xee, 0xe3, 0x04, 0x6e, 0xed, 0x06, 0x12, 0x8c, 0x4c, 0x81, 0xeb, 0x2b, 0xc9, 0x17, 0xaa, 0x8a, 0xc3, 0x0d, 0x07, 0xe6, 0x6c, 0x9a, 0x94, 0x69, 0x51, 0x8e, 0x3c, 0xab, 0xc2, 0x64, 0xd6, 0x93, 0x6e, 0x5d, 0x72, 0x4a, 0x61, 0x3b, 0xf9, 0xa4, 0x4d, 0x60, 0x79, 0x7b, 0x89, 0x0c, 0xc5, 0xce, 0x0d, 0x04, 0x62, 0x9e, 0x5f, 0xaa, 0x1d, 0xd5, 0x3e, 0x7a, 0x12, 0x5a, 0x14, 0xa2, 0x6d, 0xf3, 0xcd, 0xd9, 0x87, 0x8d, 0x9c, 0x67, 0xe7, 0xe1, 0x8a, 0x46, 0x55, 0xa1, 0x88, 0x88, 0x53, 0x63, 0xdd, 0xab, 0xd7, 0x3a, 0x17, 0x65, 0x9d, 0x19, 0x1e, 0x51, 0xfa, 0xfb, 0x6d, 0x41, 0x71, 0xff, 0x6c, 0x4b, 0x65, 0x11, 0x68, 0xce, 0x16, 0x7a, 0xda, 0x01 }; static const uint8_t ac_dsa_vect174_priv_val[] = { /* X */ 0x5f, 0xeb, 0xa3, 0x70, 0xa5, 0x8c, 0x16, 0xf3, 0x4e, 0x93, 0x1b, 0x65, 0xc0, 0x42, 0xe6, 0xbf, 0xe7, 0x94, 0x30, 0x9c, 0xf3, 0x01, 0x05, 0xd2, 0xfd, 0xac, 0x4d, 0x9f, 0xb3, 0xe1, 0x43, 0x03 }; static const uint8_t ac_dsa_vect174_pub_val[] = { /* Y */ 0x42, 0x9e, 0x6b, 0xa2, 0x0b, 0x02, 0xcd, 0x69, 0xa2, 0x9b, 0x4a, 0x97, 0xa6, 0xea, 0x56, 0x4e, 0x5b, 0x88, 0x74, 0xad, 0xa1, 0x95, 0xa4, 0x9c, 0x3a, 0x52, 0x93, 0xc9, 0xbc, 0x8d, 0x19, 0xe0, 0xa3, 0xa3, 0xc4, 0xac, 0x85, 0x47, 0xbf, 0xdc, 0x7a, 0x20, 0x9b, 0xf3, 0xa6, 0x03, 0x7e, 0x5b, 0x0b, 0xb7, 0xaa, 0x29, 0x1d, 0x59, 0x40, 0xd2, 0x35, 0xc7, 0x87, 0xa2, 0xaf, 0x79, 0xa9, 0xcd, 0x7f, 0x83, 0x08, 0x4b, 0xa7, 0xdf, 0x85, 0xc0, 0x36, 0xad, 0x8e, 0xa2, 0x3c, 0x4f, 0xdb, 0xf9, 0x1d, 0x28, 0x5c, 0x7c, 0xaa, 0x64, 0x97, 0xaf, 0x38, 0x80, 0x17, 0xbd, 0x58, 0x1f, 0xf3, 0x08, 0xd9, 0xb5, 0x67, 0x99, 0x02, 0x9e, 0x21, 0x40, 0x0c, 0x0c, 0x99, 0xd1, 0x03, 0xa2, 0xca, 0xec, 0x19, 0x5e, 0x40, 0xc9, 0x0d, 0x24, 0x4d, 0xac, 0x89, 0x7b, 0xd4, 0x18, 0xae, 0x01, 0x6d, 0x25, 0xf7, 0x1e, 0x98, 0x9a, 0xf5, 0x16, 0xd5, 0xe2, 0x49, 0x1e, 0x1e, 0x4b, 0xc2, 0x59, 0x14, 0xec, 0x3a, 0xd0, 0xa9, 0xf8, 0x59, 0x68, 0xa6, 0x77, 0x7f, 0xbe, 0xbd, 0xc7, 0x3b, 0x1a, 0xc6, 0x81, 0x44, 0x96, 0xd9, 0x42, 0x1d, 0x2b, 0x7c, 0xdf, 0x17, 0xd5, 0x3f, 0x00, 0x62, 0x40, 0x10, 0xed, 0x66, 0x18, 0xf1, 0x25, 0x8d, 0xa1, 0x94, 0xf7, 0x7c, 0x28, 0x28, 0x62, 0x25, 0xd1, 0xb1, 0x6d, 0xa3, 0xfa, 0xb7, 0x6c, 0x9b, 0x70, 0xdb, 0x1f, 0x7d, 0xbc, 0xba, 0xcf, 0x4e, 0x60, 0xb6, 0xb9, 0x1a, 0x1f, 0x47, 0x50, 0x07, 0xee, 0x4d, 0x2c, 0x5e, 0x37, 0xfc, 0x31, 0xe8, 0x9a, 0x0f, 0xa8, 0x08, 0xf8, 0x9e, 0x8a, 0x4e, 0x54, 0x6b, 0xc9, 0x0e, 0x69, 0x6f, 0x45, 0x47, 0x21, 0xbe, 0x71, 0xc0, 0x73, 0x1f, 0x99, 0xee, 0x36, 0x8a, 0xfc, 0x69, 0x98, 0x76, 0x1a, 0xf9, 0xdd, 0x9d, 0x6d }; /* K = 7ba86d55b8b5a465f661944832862baf5f565ff0d9195986c809956db2872da9 */ static const uint8_t ac_dsa_vect174_out[] = { /* R */ 0x77, 0x47, 0x0f, 0x0d, 0x39, 0x23, 0xff, 0x40, 0x7e, 0x71, 0xa8, 0x6f, 0x03, 0x36, 0x81, 0x1b, 0xdd, 0x63, 0xe1, 0x79, 0x89, 0x1f, 0xd3, 0x0e, 0x34, 0x52, 0xda, 0xc1, 0xe5, 0x17, 0x50, 0x81, /* S */ 0x4b, 0x96, 0x9f, 0x77, 0xc7, 0x0b, 0x5e, 0x6f, 0xf9, 0x35, 0x0c, 0xa2, 0x5e, 0x7d, 0x95, 0x1a, 0xca, 0xae, 0xe9, 0x07, 0xfa, 0x7b, 0x83, 0x0a, 0x32, 0xdc, 0xe4, 0xf9, 0x1a, 0x89, 0xaf, 0xa4 }; #define ac_dsa_vect175_prime ac_dsa_vect166_prime #define ac_dsa_vect175_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect175_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect175_ptx[] = { /* Msg */ 0x4b, 0x7c, 0x08, 0x28, 0xb7, 0x15, 0xec, 0x2d, 0xa1, 0xe0, 0x92, 0x20, 0x4f, 0x55, 0xdd, 0xd6, 0x5d, 0x13, 0xf1, 0xcd, 0xd6, 0x4c, 0x10, 0x94, 0x78, 0xd3, 0x84, 0x74, 0x87, 0xbc, 0x48, 0xa8, 0xcb, 0x02, 0x99, 0x22, 0x2a, 0x74, 0x95, 0xef, 0xff, 0xa6, 0x3e, 0xa1, 0x58, 0x25, 0x3f, 0xae, 0xdc, 0xb5, 0x31, 0x48, 0x81, 0xab, 0x41, 0xb5, 0xe7, 0x73, 0x33, 0x76, 0x62, 0xcc, 0x2f, 0x50, 0xdb, 0xcc, 0xc7, 0x36, 0x97, 0x4e, 0x31, 0xb3, 0xd0, 0x80, 0x46, 0x75, 0x89, 0x95, 0x1d, 0x51, 0x10, 0x32, 0xe4, 0xcb, 0xa6, 0x64, 0x7f, 0x94, 0xc6, 0x79, 0xaa, 0x26, 0x9f, 0xca, 0x6d, 0xb9, 0x27, 0x15, 0xa4, 0xda, 0x28, 0xff, 0x98, 0x03, 0xa1, 0xdc, 0x61, 0x67, 0x5f, 0xa5, 0xac, 0x11, 0x4e, 0x37, 0x6f, 0xa4, 0xda, 0xdb, 0x37, 0xc1, 0xb0, 0x9e, 0xd5, 0xc3, 0x1b, 0xc5, 0xae, 0xe8 }; static const uint8_t ac_dsa_vect175_priv_val[] = { /* X */ 0x1b, 0xa8, 0x5c, 0x9c, 0x8f, 0x4f, 0x4a, 0xe9, 0x70, 0x13, 0xbc, 0x9f, 0x7f, 0xab, 0x37, 0x2e, 0x73, 0x3f, 0x34, 0x45, 0xfd, 0x9a, 0x68, 0xf8, 0xe0, 0x15, 0xc3, 0x75, 0xdf, 0x3b, 0x55, 0x15 }; static const uint8_t ac_dsa_vect175_pub_val[] = { /* Y */ 0x09, 0xa1, 0x6e, 0x0a, 0x60, 0x03, 0xf4, 0x5a, 0xaa, 0xa3, 0xc6, 0x31, 0x1a, 0xa9, 0x86, 0x62, 0x17, 0xd4, 0xa7, 0xc8, 0xcb, 0x50, 0x93, 0x51, 0x49, 0x76, 0xf6, 0xa3, 0x41, 0x26, 0x0e, 0x5a, 0xba, 0x7c, 0xb0, 0x0a, 0xb2, 0xad, 0xb7, 0x46, 0x2a, 0x47, 0xa8, 0xcf, 0xee, 0x4f, 0xdc, 0xae, 0x5a, 0xcc, 0xda, 0x6d, 0x42, 0xa3, 0x14, 0x47, 0x92, 0xa1, 0x46, 0x31, 0xbb, 0xe8, 0x55, 0x34, 0xc1, 0x11, 0xd2, 0xff, 0xcd, 0xbc, 0x15, 0xb6, 0xdb, 0x9d, 0xbf, 0xc4, 0xbc, 0x71, 0xd3, 0x00, 0x32, 0x4f, 0xd3, 0x10, 0xc4, 0x65, 0x44, 0x3c, 0xb2, 0xa6, 0xf2, 0xae, 0x33, 0x70, 0x1f, 0x39, 0x66, 0x8b, 0x11, 0x8c, 0x38, 0xef, 0x56, 0x2e, 0x85, 0x54, 0xfe, 0xa6, 0x61, 0xa3, 0xef, 0x80, 0x45, 0x56, 0x99, 0xc2, 0x34, 0x30, 0xd2, 0x8b, 0xa6, 0xdc, 0xf0, 0x42, 0xfc, 0x92, 0x0a, 0x67, 0x7c, 0x29, 0x71, 0xb2, 0xdf, 0x8c, 0x67, 0x29, 0xc5, 0xb3, 0xb1, 0xbe, 0x6c, 0x5a, 0x04, 0x7a, 0xc1, 0xbc, 0xc8, 0xcd, 0x8d, 0xc5, 0x19, 0xad, 0xa2, 0x21, 0xbd, 0x92, 0xca, 0x68, 0x93, 0xc1, 0xcc, 0x1d, 0xc1, 0x58, 0xf9, 0xd4, 0x72, 0xf8, 0x9a, 0x8e, 0x02, 0x64, 0x94, 0x40, 0xdd, 0xed, 0x0f, 0x72, 0x34, 0x85, 0x55, 0x8e, 0xff, 0xe8, 0xcf, 0x9d, 0xf1, 0x21, 0xc9, 0x69, 0xa2, 0xd1, 0xb7, 0x6a, 0x37, 0xdc, 0xbf, 0xfb, 0x17, 0xed, 0xf3, 0x12, 0x1d, 0x43, 0x38, 0xd4, 0xab, 0x68, 0xb1, 0x54, 0x22, 0x6c, 0x00, 0x72, 0xd8, 0xbd, 0x51, 0xf2, 0x3e, 0x56, 0x59, 0xa2, 0xaf, 0xe5, 0x20, 0xdd, 0x5e, 0x91, 0x00, 0x5a, 0x6f, 0xc1, 0x15, 0x7f, 0x07, 0x97, 0x36, 0x10, 0xc5, 0x57, 0x78, 0x24, 0xbf, 0x16, 0x66, 0xcc, 0xf8, 0x51, 0xd6, 0x9e, 0xfd, 0xe3, 0x47, 0xf0, 0xb9, 0x96 }; /* K = 11d09ab8f3140f98dd4076d398a9aafb9c98656dd7185567a562cd108932eb77 */ static const uint8_t ac_dsa_vect175_out[] = { /* R */ 0x1b, 0x8b, 0x8d, 0x67, 0xb6, 0x40, 0xaf, 0xda, 0x26, 0xfb, 0xe6, 0x7c, 0xfd, 0x4b, 0xea, 0x52, 0x13, 0x75, 0x52, 0x6a, 0xd5, 0x8a, 0x22, 0xd4, 0xd9, 0x7d, 0x7a, 0xf1, 0x34, 0x38, 0x4f, 0x4a, /* S */ 0x66, 0xd6, 0xc2, 0x40, 0x99, 0x22, 0x56, 0xee, 0xbe, 0x07, 0x82, 0x65, 0xc3, 0x02, 0x9a, 0x88, 0xc3, 0x40, 0x95, 0x14, 0x21, 0x34, 0xdf, 0xc3, 0x1f, 0xf0, 0xa2, 0xd8, 0xbb, 0xd6, 0x09, 0xb5 }; #define ac_dsa_vect176_prime ac_dsa_vect166_prime #define ac_dsa_vect176_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect176_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect176_ptx[] = { /* Msg */ 0xba, 0xea, 0x89, 0xdc, 0xc1, 0x02, 0xcd, 0x64, 0x91, 0x35, 0xd6, 0x3a, 0x5f, 0x52, 0xdf, 0x43, 0x7a, 0xf7, 0x84, 0x0d, 0x69, 0x9a, 0x9d, 0xaf, 0x13, 0x1e, 0xaa, 0xc3, 0x81, 0x34, 0x8d, 0x45, 0xb4, 0xe6, 0x04, 0x77, 0xfe, 0xa8, 0x88, 0x03, 0xfc, 0xa3, 0x1b, 0x54, 0x82, 0x9c, 0x58, 0x06, 0xc7, 0x03, 0xeb, 0x8f, 0xdf, 0x41, 0x23, 0x06, 0xff, 0x7a, 0x79, 0xb5, 0x5a, 0xab, 0x90, 0x64, 0xbc, 0x37, 0xcb, 0x26, 0xbf, 0xfa, 0xa6, 0x71, 0xde, 0xbb, 0x74, 0xc2, 0x28, 0xba, 0x2d, 0x2a, 0x06, 0xda, 0x36, 0x2f, 0x61, 0x3b, 0x78, 0xe5, 0xb1, 0xf0, 0xa0, 0xb5, 0xc5, 0xfe, 0xbf, 0x6b, 0xc3, 0x26, 0xb0, 0x21, 0xbd, 0x7f, 0xc7, 0x04, 0x71, 0xb2, 0x5e, 0x15, 0x3e, 0xa5, 0x1d, 0xe1, 0x01, 0x0b, 0x87, 0x11, 0x0e, 0x01, 0x49, 0x7a, 0x7f, 0x1a, 0xc3, 0x9c, 0xf4, 0xd4, 0x24, 0xc3 }; static const uint8_t ac_dsa_vect176_priv_val[] = { /* X */ 0x2c, 0x0a, 0x2b, 0x70, 0x0e, 0xa4, 0x3f, 0x5f, 0xd5, 0x89, 0xe6, 0x65, 0x81, 0x73, 0x39, 0xb6, 0x0f, 0x83, 0x7c, 0xa0, 0xb7, 0xdb, 0xab, 0x50, 0xd2, 0xca, 0x7e, 0x4c, 0x36, 0x2a, 0x14, 0xe6 }; static const uint8_t ac_dsa_vect176_pub_val[] = { /* Y */ 0xcb, 0xd4, 0x65, 0xce, 0x9c, 0x3d, 0x0a, 0x13, 0x7e, 0xe3, 0xd5, 0x82, 0xa5, 0x17, 0x21, 0x83, 0xb8, 0xa6, 0x3c, 0xfe, 0x41, 0x40, 0x70, 0xb2, 0x47, 0xda, 0x36, 0x74, 0x56, 0x20, 0x3f, 0x98, 0x6e, 0x67, 0x86, 0xff, 0xb8, 0x3a, 0xd7, 0x64, 0xab, 0xa3, 0x09, 0xc2, 0xef, 0x74, 0x42, 0xce, 0x38, 0x73, 0x5f, 0x49, 0x2c, 0x0c, 0xe6, 0xd9, 0x2e, 0xaf, 0x9a, 0xe6, 0xb1, 0xcc, 0x87, 0x3a, 0xb6, 0xff, 0x58, 0x31, 0x7c, 0xd1, 0x66, 0xa5, 0x10, 0xc3, 0xff, 0xd8, 0xd4, 0xe6, 0x00, 0x88, 0x25, 0xb5, 0x8c, 0xae, 0x21, 0x7f, 0xa3, 0x5c, 0x94, 0xc9, 0xbb, 0xd1, 0x2a, 0x4d, 0x63, 0x8c, 0x20, 0x11, 0x63, 0x98, 0xb2, 0x1b, 0x59, 0x29, 0xdc, 0xa1, 0xd4, 0x9a, 0x7b, 0x74, 0x89, 0x70, 0xe4, 0x5d, 0xe0, 0xd4, 0x32, 0xfc, 0x91, 0x2f, 0x76, 0x19, 0x91, 0x37, 0xf1, 0xbb, 0x0c, 0x0d, 0x2c, 0x95, 0xbd, 0xcb, 0xa0, 0xd3, 0x03, 0xec, 0xdb, 0xf4, 0x89, 0x84, 0x9b, 0xe8, 0xe6, 0x30, 0xff, 0xff, 0x06, 0x03, 0x94, 0x8c, 0x87, 0xa7, 0xe5, 0x81, 0x31, 0x65, 0x5c, 0x9f, 0x40, 0x77, 0x08, 0xe8, 0xa9, 0xd6, 0x75, 0xe2, 0x8e, 0x9b, 0x57, 0x72, 0x9f, 0x03, 0x46, 0xc0, 0x28, 0x7f, 0x43, 0xed, 0x67, 0xf9, 0xc0, 0xc0, 0xce, 0x15, 0x42, 0x98, 0x48, 0x51, 0xcc, 0x3b, 0x52, 0x1a, 0xfa, 0x5b, 0x9b, 0x8f, 0xa5, 0x36, 0x80, 0xbd, 0xb2, 0xd7, 0x3c, 0x2b, 0x6b, 0x09, 0x0e, 0xf0, 0x85, 0xa7, 0xe7, 0xc6, 0xf7, 0x6a, 0x2e, 0x50, 0x10, 0x64, 0xc8, 0x52, 0x59, 0x1d, 0xf6, 0x04, 0x39, 0xa9, 0x6d, 0xd8, 0xd6, 0x63, 0xb5, 0x64, 0xc9, 0xe5, 0xc2, 0x53, 0xee, 0x8d, 0x8e, 0xe5, 0x8a, 0xb2, 0x7d, 0x83, 0x32, 0x11, 0x3b, 0xdd, 0x51, 0xd8, 0xb4, 0x1a, 0xc7, 0x3c, 0x14, 0x3a }; /* K = 05c7a20e6e4ddb833c4e30a564436fd66716f349af551e9943bac61572e04107 */ static const uint8_t ac_dsa_vect176_out[] = { /* R */ 0x76, 0x89, 0xb5, 0x24, 0x9f, 0x19, 0x43, 0xe6, 0x85, 0x09, 0x51, 0x06, 0xd3, 0xf6, 0x83, 0x59, 0xcd, 0xb7, 0x6b, 0xe5, 0xd9, 0xa5, 0x0e, 0xbf, 0xdf, 0x36, 0xe7, 0x31, 0x57, 0x5f, 0x8b, 0xda, /* S */ 0x04, 0x9d, 0xa4, 0x2d, 0xe5, 0x1e, 0x61, 0x7c, 0xdc, 0xde, 0xf1, 0x7c, 0xdf, 0x60, 0x59, 0x34, 0x5b, 0x8e, 0x18, 0x1b, 0xac, 0x64, 0xc4, 0x71, 0x23, 0xd4, 0x7b, 0x5e, 0xfe, 0x10, 0x5e, 0xbb }; #define ac_dsa_vect177_prime ac_dsa_vect166_prime #define ac_dsa_vect177_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect177_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect177_ptx[] = { /* Msg */ 0xb1, 0x30, 0x37, 0x68, 0xbe, 0x17, 0x4d, 0x83, 0x57, 0x84, 0x07, 0xdd, 0xe1, 0xab, 0x91, 0xcf, 0x02, 0x11, 0x24, 0xa3, 0x4c, 0x4a, 0x35, 0xea, 0xfa, 0x45, 0x12, 0x70, 0x7a, 0x36, 0x60, 0xd1, 0xf8, 0x84, 0xfa, 0x6c, 0x3d, 0x7d, 0xf2, 0x99, 0x59, 0x80, 0x18, 0xdc, 0xa2, 0x2f, 0x27, 0x3f, 0x60, 0x2b, 0xab, 0x37, 0x15, 0x92, 0xb1, 0x1f, 0x45, 0x74, 0x88, 0x57, 0x41, 0xab, 0x3f, 0xe2, 0xaf, 0x5b, 0x71, 0x23, 0x7d, 0x00, 0x57, 0xae, 0x59, 0xf3, 0x7b, 0x61, 0xdf, 0xd1, 0xad, 0x5e, 0xa2, 0x7c, 0xf8, 0xf0, 0x5f, 0x5b, 0x69, 0xf2, 0x93, 0x6e, 0xc7, 0x9d, 0x10, 0x4f, 0x4a, 0x46, 0xc9, 0x02, 0xfb, 0x67, 0x90, 0xdf, 0xdc, 0x75, 0xb9, 0x76, 0x8c, 0xc7, 0xdf, 0xba, 0xe0, 0x11, 0xc7, 0x95, 0xe6, 0x46, 0xf9, 0xa2, 0x34, 0x72, 0x87, 0x07, 0xfb, 0x11, 0x2c, 0x46, 0x10, 0x07 }; static const uint8_t ac_dsa_vect177_priv_val[] = { /* X */ 0x24, 0x7f, 0xcc, 0xb4, 0x4c, 0x2c, 0x0c, 0xb1, 0xf1, 0xe5, 0x8d, 0x10, 0x33, 0xea, 0xbd, 0x20, 0x3d, 0x8d, 0x87, 0x4d, 0x0b, 0xf1, 0x8b, 0xa7, 0x0f, 0x04, 0xb7, 0x5b, 0xd6, 0x49, 0x5b, 0xad }; static const uint8_t ac_dsa_vect177_pub_val[] = { /* Y */ 0x56, 0x02, 0xdd, 0x57, 0x9f, 0xbe, 0x37, 0xf1, 0x87, 0xd4, 0x9d, 0x76, 0xfd, 0x59, 0x36, 0xfc, 0xde, 0xf2, 0x36, 0x9f, 0x7a, 0xf2, 0x9d, 0xa4, 0x3c, 0x64, 0x56, 0xa6, 0xac, 0x83, 0x17, 0xb3, 0x9e, 0x4c, 0xd6, 0x79, 0x14, 0x3a, 0x4d, 0x97, 0x75, 0x1b, 0x80, 0xce, 0x1c, 0xb4, 0x51, 0x86, 0xda, 0x7b, 0xee, 0x99, 0x1e, 0x25, 0xeb, 0x9a, 0x1a, 0xed, 0x14, 0x90, 0xfd, 0x74, 0xf6, 0xab, 0x50, 0x79, 0x40, 0x82, 0x1a, 0x1a, 0xdf, 0xbc, 0x30, 0xe1, 0x9a, 0x93, 0x3c, 0xc4, 0xd2, 0x17, 0x69, 0xcc, 0xdf, 0xc5, 0x7c, 0x96, 0xf0, 0xd2, 0x19, 0x44, 0xf8, 0xa0, 0xf1, 0x31, 0x62, 0x6e, 0xd0, 0x13, 0xb3, 0xe5, 0xc0, 0x13, 0x13, 0xa1, 0x75, 0x6b, 0x67, 0xb7, 0xd2, 0xa2, 0x1e, 0xda, 0xc4, 0x86, 0xcb, 0xc3, 0xcd, 0x1d, 0x2b, 0x6f, 0xcf, 0x20, 0xc8, 0x2d, 0xd7, 0x0b, 0x4f, 0x72, 0x92, 0x9c, 0x14, 0x99, 0xad, 0x79, 0x6d, 0xe8, 0x94, 0xdb, 0x8a, 0xf1, 0x03, 0xd9, 0xb9, 0x1c, 0x25, 0x73, 0x70, 0x73, 0xd9, 0xdf, 0x62, 0xe6, 0xb6, 0x24, 0xb9, 0x0f, 0xb3, 0x52, 0xdb, 0x78, 0x1c, 0x7f, 0x2f, 0xf8, 0xd3, 0xa2, 0x0a, 0x70, 0x63, 0xfb, 0x51, 0x27, 0x23, 0x95, 0xcc, 0x7d, 0x35, 0xef, 0x79, 0xc2, 0x7b, 0x76, 0x34, 0xe3, 0x9f, 0x74, 0xeb, 0x15, 0x29, 0x75, 0xfd, 0xf3, 0xb9, 0x03, 0xc2, 0x39, 0x90, 0xee, 0xde, 0x8a, 0xa5, 0x8d, 0xf9, 0xa2, 0x99, 0x54, 0x33, 0x3a, 0x3f, 0x52, 0x5d, 0x5b, 0xaa, 0xfd, 0x37, 0x9d, 0xd5, 0x7f, 0xe3, 0x96, 0xa5, 0x18, 0x76, 0xf2, 0x5d, 0x9e, 0x82, 0x65, 0xcf, 0x69, 0x71, 0xed, 0xc6, 0x27, 0x8c, 0xe9, 0x96, 0xbd, 0xee, 0x20, 0x68, 0x83, 0x44, 0x8a, 0xf1, 0x84, 0xfa, 0xe2, 0x3a, 0xf2, 0xa6, 0x95, 0x72, 0xb2, 0x00, 0x90 }; /* K = 0b94ed40c05a4ef445309afb5583cba8d411ff4092452c0a064dbbe6e3ccd1a5 */ static const uint8_t ac_dsa_vect177_out[] = { /* R */ 0x18, 0x00, 0xb6, 0xbd, 0x5c, 0x94, 0xa0, 0x31, 0xd9, 0x77, 0xb9, 0xd0, 0x17, 0x54, 0x17, 0x90, 0xa9, 0xfe, 0x7e, 0x41, 0x4c, 0x90, 0xfa, 0x4d, 0x38, 0x03, 0xd5, 0x6e, 0xf1, 0x6a, 0x64, 0x79, /* S */ 0x07, 0xec, 0xe1, 0xb6, 0x47, 0x11, 0xc9, 0xb3, 0xec, 0xa4, 0x89, 0xe7, 0x5f, 0x2e, 0x63, 0x43, 0x8e, 0x09, 0x74, 0x98, 0xe2, 0x89, 0x0d, 0xd0, 0x27, 0x37, 0x29, 0xa5, 0x5d, 0xf0, 0xd2, 0xdf }; #define ac_dsa_vect178_prime ac_dsa_vect166_prime #define ac_dsa_vect178_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect178_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect178_ptx[] = { /* Msg */ 0x25, 0xca, 0x3d, 0xc8, 0xe6, 0xea, 0x4e, 0xbb, 0x93, 0x6f, 0xa0, 0x1b, 0x1c, 0xcc, 0x08, 0xbb, 0x1d, 0xe9, 0x23, 0xbe, 0x62, 0x92, 0x42, 0x1f, 0xf9, 0xf7, 0x73, 0xaf, 0x9c, 0xc7, 0x39, 0x35, 0x10, 0xdf, 0x2f, 0xcb, 0x6e, 0xc1, 0x88, 0xb2, 0x7c, 0x26, 0x88, 0xc7, 0x2f, 0xdc, 0x2f, 0xf6, 0xc9, 0x0f, 0x0a, 0xb0, 0xed, 0x59, 0xc9, 0xc3, 0xa6, 0x50, 0x3f, 0x53, 0xe3, 0x27, 0x78, 0xb9, 0x54, 0xea, 0xe5, 0x82, 0xc9, 0x58, 0x03, 0xc5, 0x11, 0xff, 0x39, 0x18, 0xad, 0xda, 0x02, 0xe6, 0x8e, 0x2c, 0x3e, 0x73, 0xf8, 0xa6, 0xad, 0x60, 0x7a, 0x89, 0xd8, 0xeb, 0xa0, 0x05, 0x9e, 0xb8, 0x7f, 0x4d, 0x9b, 0x00, 0x81, 0xf2, 0x96, 0x96, 0x1e, 0xc6, 0xea, 0x78, 0x85, 0x3a, 0xa5, 0x3d, 0x24, 0xa4, 0x70, 0xa7, 0x4a, 0xcf, 0x16, 0xa2, 0xf8, 0x67, 0x48, 0xa8, 0xda, 0x34, 0xfb, 0x90 }; static const uint8_t ac_dsa_vect178_priv_val[] = { /* X */ 0x32, 0xb6, 0xf7, 0xce, 0x3c, 0xe9, 0x97, 0x70, 0xb8, 0x88, 0xc1, 0xef, 0x23, 0xa8, 0x63, 0x77, 0xf3, 0xe0, 0x0a, 0xdf, 0x5d, 0xab, 0x2e, 0x38, 0x0e, 0xf8, 0xc4, 0x29, 0x8d, 0x20, 0xa1, 0xee }; static const uint8_t ac_dsa_vect178_pub_val[] = { /* Y */ 0xbf, 0x2e, 0x14, 0x0f, 0x8b, 0x8d, 0x99, 0xd2, 0xdf, 0x10, 0x52, 0xe9, 0x81, 0xfa, 0x0a, 0xc5, 0x33, 0xc0, 0xd4, 0xea, 0x9f, 0x26, 0x6f, 0x92, 0x67, 0xcd, 0xe7, 0xba, 0x03, 0xcf, 0x10, 0x01, 0x5d, 0xa1, 0xcc, 0x13, 0x61, 0x2d, 0xcf, 0xc9, 0x20, 0x30, 0xb7, 0xc7, 0xd1, 0xc0, 0x57, 0xe2, 0x8a, 0x6f, 0xb4, 0x57, 0x48, 0xee, 0xb9, 0xc4, 0xbd, 0x2e, 0x6e, 0x79, 0xb2, 0x17, 0xf4, 0xb6, 0x8e, 0xf0, 0x3f, 0x96, 0x59, 0xc8, 0xe8, 0x4a, 0x20, 0xee, 0x92, 0x0d, 0x29, 0x71, 0x13, 0x81, 0xce, 0x39, 0xfe, 0x0a, 0xfc, 0x9a, 0x7f, 0xe2, 0xfb, 0xdf, 0xce, 0x63, 0x24, 0x96, 0x51, 0x23, 0x0f, 0x3e, 0x72, 0xee, 0xd5, 0x79, 0xf0, 0xd3, 0x65, 0x9c, 0x2b, 0xff, 0xc7, 0x0f, 0xb5, 0xd8, 0xbe, 0x88, 0x9a, 0x34, 0xbb, 0x67, 0xf1, 0xa9, 0x04, 0xc3, 0x18, 0x56, 0x83, 0x94, 0xb9, 0x46, 0xfd, 0x40, 0x38, 0x37, 0x82, 0xcb, 0x5e, 0x48, 0x09, 0xd0, 0xc6, 0x01, 0x9d, 0x20, 0xaf, 0xad, 0x09, 0xf2, 0x9f, 0xbb, 0xc9, 0x94, 0xd2, 0x8f, 0x4e, 0x41, 0xda, 0xf4, 0x66, 0x62, 0x98, 0xf3, 0x51, 0x89, 0x8d, 0x8d, 0xef, 0x40, 0x47, 0x12, 0xc4, 0x09, 0x74, 0x5a, 0x88, 0x96, 0x2e, 0x4a, 0x61, 0x8c, 0x23, 0x49, 0x76, 0x64, 0x55, 0x59, 0xc9, 0x0c, 0x54, 0xfe, 0x76, 0x4e, 0xea, 0x46, 0xfa, 0x03, 0x54, 0x3e, 0x4c, 0x4f, 0x25, 0xc8, 0xd2, 0xc3, 0xc1, 0x97, 0x9f, 0x95, 0x24, 0x58, 0x17, 0x7d, 0xc6, 0x96, 0x3e, 0x3f, 0x34, 0x6a, 0x7f, 0xdd, 0xbe, 0x0c, 0xdf, 0x23, 0xdd, 0xc7, 0xd2, 0xfa, 0x8a, 0x34, 0x55, 0xcd, 0x5b, 0x54, 0x6e, 0x47, 0x16, 0x99, 0x12, 0xce, 0x7f, 0x33, 0x3a, 0xc6, 0xf0, 0x1e, 0x64, 0xae, 0xc5, 0x96, 0x08, 0x0b, 0x5d, 0x3e, 0x0f, 0x25, 0xad, 0xb9 }; /* K = 73418db52c6594dd0956d9e3616a205de8204220648addd4bfd3a9fee412462a */ static const uint8_t ac_dsa_vect178_out[] = { /* R */ 0x7b, 0x1d, 0xfc, 0xf3, 0x9b, 0x62, 0x4d, 0x64, 0xdb, 0x08, 0xa3, 0x97, 0x4c, 0x8e, 0x14, 0x17, 0x31, 0x05, 0x01, 0x0f, 0x2b, 0xd5, 0x13, 0x5e, 0x92, 0x6f, 0x28, 0x84, 0xe3, 0x0b, 0x46, 0xfa, /* S */ 0x69, 0x7e, 0xea, 0xb6, 0x69, 0x67, 0x74, 0x69, 0xf6, 0x2c, 0xca, 0x46, 0xd3, 0xe6, 0x8c, 0x84, 0x9f, 0x44, 0x78, 0x81, 0xe2, 0xc9, 0xf7, 0x42, 0x94, 0xf4, 0xe8, 0xad, 0xa4, 0x42, 0x6c, 0x7d }; #define ac_dsa_vect179_prime ac_dsa_vect166_prime #define ac_dsa_vect179_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect179_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect179_ptx[] = { /* Msg */ 0xd5, 0x8a, 0x8f, 0x5a, 0xb4, 0x4f, 0x9d, 0xf9, 0xed, 0x93, 0x6a, 0x13, 0x18, 0x65, 0x7c, 0x32, 0x4f, 0xb1, 0x39, 0x9c, 0x25, 0x10, 0x54, 0x98, 0x6d, 0x19, 0x21, 0x4c, 0x15, 0xce, 0x95, 0x1f, 0x87, 0xcc, 0xb3, 0x51, 0x0a, 0xed, 0x90, 0x85, 0x41, 0x1d, 0x9c, 0x5a, 0x67, 0x40, 0xdf, 0x51, 0x60, 0xf3, 0xe5, 0x7e, 0xa8, 0xc9, 0x42, 0xd3, 0x35, 0x47, 0x31, 0x7c, 0x7a, 0x38, 0x7c, 0x60, 0xc7, 0xac, 0x2f, 0x0e, 0x14, 0x17, 0x1f, 0x0b, 0x77, 0x19, 0xab, 0xa7, 0x6a, 0xc4, 0x18, 0xd1, 0x57, 0xa4, 0xe3, 0xbe, 0xc6, 0xb7, 0x99, 0xb5, 0xda, 0x10, 0xbd, 0x3e, 0xcd, 0xda, 0xe0, 0x85, 0x7a, 0x29, 0x67, 0x0c, 0x99, 0xd3, 0x78, 0x10, 0x34, 0x9b, 0x82, 0xb7, 0xbb, 0x37, 0xc0, 0x93, 0x7b, 0x0d, 0xd2, 0x73, 0x4d, 0xa0, 0x8b, 0x8b, 0x1c, 0xb7, 0xbe, 0xec, 0xd4, 0x3c, 0xb6, 0x15 }; static const uint8_t ac_dsa_vect179_priv_val[] = { /* X */ 0x23, 0xa1, 0x29, 0x0f, 0x8a, 0xcb, 0xad, 0xc3, 0x52, 0xa2, 0x82, 0x01, 0x57, 0x13, 0xd6, 0xcf, 0x5a, 0x88, 0xe8, 0x90, 0x1c, 0xb9, 0x58, 0x8a, 0x57, 0x15, 0x17, 0x72, 0x61, 0x9f, 0x5a, 0xe6 }; static const uint8_t ac_dsa_vect179_pub_val[] = { /* Y */ 0xba, 0xa1, 0x36, 0x52, 0x64, 0x2d, 0x95, 0x0d, 0x8b, 0xce, 0xc1, 0x6c, 0x62, 0x4a, 0x07, 0x99, 0x9f, 0xb5, 0x57, 0xfb, 0x40, 0xa2, 0x66, 0x29, 0x7c, 0x15, 0x65, 0x97, 0x55, 0xfd, 0x61, 0x5c, 0xc7, 0xe2, 0x12, 0x5d, 0x4e, 0x8c, 0x8a, 0xf8, 0xc4, 0x33, 0x35, 0x53, 0x90, 0x05, 0xe9, 0xe2, 0xf2, 0xd4, 0x04, 0x28, 0xe7, 0xc8, 0xcc, 0x05, 0x5f, 0xf3, 0xf6, 0xfe, 0x3b, 0x3d, 0xf6, 0x04, 0xac, 0x12, 0x8d, 0x99, 0x5c, 0xfb, 0x9c, 0x86, 0x7e, 0x2a, 0x96, 0x07, 0xaa, 0x3b, 0x77, 0xcf, 0x0f, 0x69, 0x17, 0x38, 0xb7, 0x84, 0xd4, 0xbe, 0x2f, 0xea, 0x47, 0x39, 0xfd, 0xa1, 0xf0, 0x67, 0x42, 0x60, 0xf2, 0x1f, 0x66, 0x6a, 0xce, 0xf5, 0xbd, 0x56, 0xa7, 0x80, 0x0b, 0xbe, 0x95, 0x07, 0x92, 0xba, 0x05, 0xee, 0xe4, 0x2e, 0x80, 0xa2, 0x57, 0x8d, 0x2c, 0x50, 0xec, 0x28, 0xd4, 0x4a, 0xfb, 0x6b, 0x68, 0x76, 0x52, 0xbb, 0x94, 0x52, 0x40, 0x8f, 0xca, 0xf2, 0x57, 0xc4, 0xb5, 0xcd, 0x56, 0x4d, 0xdc, 0x4e, 0x63, 0xce, 0x9c, 0xa1, 0x3d, 0x4c, 0x74, 0x73, 0xf5, 0x1b, 0x01, 0xac, 0x8e, 0x4c, 0x3f, 0x79, 0x9a, 0xfc, 0x90, 0x8e, 0xae, 0xac, 0xca, 0xd0, 0x62, 0xb0, 0xf9, 0x7d, 0x95, 0x8a, 0x30, 0x08, 0xca, 0xe2, 0x20, 0x62, 0xbb, 0x16, 0x6c, 0x73, 0x00, 0xdf, 0x0b, 0x43, 0x86, 0xba, 0xec, 0xd5, 0x99, 0xfa, 0x8b, 0x08, 0x3f, 0xba, 0x6e, 0x7e, 0x4e, 0x5b, 0xa1, 0x19, 0x86, 0x02, 0x68, 0x51, 0x7d, 0x79, 0xeb, 0xdc, 0xbe, 0x02, 0x43, 0x7b, 0xf4, 0xeb, 0x5d, 0x91, 0xa8, 0x43, 0x72, 0x5d, 0xb0, 0xed, 0xa6, 0x6e, 0xed, 0xd4, 0x6d, 0x66, 0xb7, 0x81, 0xac, 0xed, 0x0d, 0xcc, 0x23, 0x15, 0x4e, 0x4b, 0x8a, 0x8f, 0x04, 0x53, 0xb2, 0xf4, 0x66, 0x03, 0x3b, 0xd9 }; /* K = 25f8923843d757ee4b7571b42de58925b0c2678ec89df07248b4cf34d83db926 */ static const uint8_t ac_dsa_vect179_out[] = { /* R */ 0x18, 0x76, 0xb2, 0x09, 0x26, 0xd8, 0xed, 0xe7, 0x8d, 0x28, 0x17, 0x4e, 0xeb, 0x4c, 0xb0, 0xc1, 0xaf, 0x8e, 0xe2, 0x06, 0xfc, 0x8d, 0xb4, 0xa8, 0xcd, 0xeb, 0xb5, 0xdb, 0xfb, 0x0c, 0x15, 0xcf, /* S */ 0x23, 0x1a, 0xf0, 0x7a, 0xeb, 0xa9, 0x9f, 0xfd, 0x00, 0x65, 0x93, 0x94, 0xab, 0x6e, 0xd1, 0x9a, 0x5e, 0x9f, 0x9e, 0x60, 0xe2, 0x19, 0x7f, 0x65, 0xfc, 0x88, 0xc8, 0x15, 0xbe, 0xae, 0x7f, 0xe0 }; #define ac_dsa_vect180_prime ac_dsa_vect166_prime #define ac_dsa_vect180_sub_prime ac_dsa_vect166_sub_prime #define ac_dsa_vect180_base ac_dsa_vect166_base static const uint8_t ac_dsa_vect180_ptx[] = { /* Msg */ 0xaa, 0x13, 0x4e, 0x9d, 0xb7, 0x39, 0x82, 0xe7, 0xa3, 0x7a, 0x10, 0x34, 0xaa, 0xb8, 0x2b, 0x50, 0xd5, 0xe5, 0x8e, 0x03, 0x4a, 0x56, 0x37, 0x08, 0x1d, 0xc8, 0x80, 0xa6, 0xe2, 0x65, 0xeb, 0xc7, 0xb3, 0x53, 0xdf, 0x21, 0x03, 0x04, 0xba, 0x00, 0x77, 0x1c, 0x5b, 0xab, 0x44, 0x5d, 0xc6, 0xc2, 0x49, 0x99, 0xfe, 0x8e, 0xaf, 0xde, 0xfa, 0xbc, 0xdd, 0x46, 0xf7, 0xa9, 0x1f, 0x30, 0x72, 0x1a, 0x68, 0x96, 0x33, 0x3c, 0x3f, 0x30, 0x1e, 0x19, 0x7f, 0x96, 0x19, 0x44, 0xf5, 0x45, 0xe4, 0xfe, 0x07, 0x30, 0xcd, 0x96, 0x77, 0x90, 0x50, 0x4c, 0x49, 0xb0, 0xab, 0x5b, 0x89, 0x08, 0x09, 0xbe, 0x5c, 0x7c, 0x1c, 0x3f, 0x8a, 0x2e, 0x52, 0xd9, 0x2a, 0x2c, 0x19, 0x9b, 0x98, 0x1b, 0x64, 0x8f, 0xdd, 0x52, 0x8e, 0x76, 0x8e, 0x6a, 0xb3, 0x92, 0x57, 0x9b, 0x54, 0xc7, 0x2c, 0x41, 0x61, 0x7d }; static const uint8_t ac_dsa_vect180_priv_val[] = { /* X */ 0x02, 0xef, 0x07, 0x8e, 0x61, 0xdf, 0x31, 0x82, 0x37, 0xc9, 0xa2, 0x17, 0xb5, 0xdd, 0xbd, 0xa1, 0x2a, 0xb9, 0xff, 0xde, 0x68, 0xa2, 0x01, 0x97, 0x17, 0x82, 0xb6, 0x1b, 0x73, 0x21, 0x4c, 0xae }; static const uint8_t ac_dsa_vect180_pub_val[] = { /* Y */ 0x69, 0x1d, 0xfe, 0xa1, 0x44, 0xe5, 0x1b, 0x9e, 0x0f, 0xf7, 0x53, 0x65, 0x57, 0xb5, 0x8a, 0xce, 0x87, 0x16, 0x26, 0x3a, 0x70, 0x55, 0x4e, 0x2f, 0x46, 0x76, 0xd1, 0x72, 0x33, 0x2a, 0xed, 0xaa, 0x67, 0x73, 0x6d, 0x72, 0x66, 0x7d, 0x32, 0x81, 0x70, 0xac, 0xa0, 0x70, 0xe1, 0xbb, 0x89, 0x86, 0x8b, 0xf4, 0xcc, 0x98, 0x96, 0x2d, 0x87, 0xeb, 0x05, 0x99, 0xf1, 0x08, 0x28, 0xc6, 0xea, 0x24, 0xcf, 0xfe, 0xde, 0x8e, 0xd7, 0xb3, 0x9a, 0xbb, 0xa6, 0x66, 0xbd, 0x6d, 0x0d, 0x35, 0x02, 0x4a, 0xde, 0x6a, 0xaa, 0x06, 0xfe, 0x6a, 0xe4, 0x5d, 0xc4, 0xb3, 0xa9, 0x1c, 0x21, 0x9d, 0x47, 0x2d, 0xb0, 0xef, 0xed, 0x46, 0x9d, 0x69, 0xcb, 0x5f, 0x11, 0xd4, 0x01, 0x58, 0xea, 0x81, 0x67, 0x2b, 0x1a, 0xe1, 0x16, 0xff, 0x2c, 0x30, 0x16, 0xf2, 0x45, 0x25, 0x4e, 0x98, 0x4a, 0x59, 0x94, 0x5e, 0x4e, 0x3b, 0x3d, 0x37, 0xad, 0x12, 0x05, 0x8d, 0x84, 0x08, 0x29, 0x55, 0xc7, 0x68, 0x64, 0x3e, 0x7d, 0x80, 0xc0, 0x55, 0xc1, 0x70, 0x3a, 0x88, 0x3f, 0x2a, 0xbb, 0x07, 0x5a, 0x24, 0xc2, 0xe9, 0x30, 0x56, 0x69, 0x73, 0x40, 0x93, 0x1c, 0x25, 0x89, 0x4d, 0x1d, 0x2f, 0xfa, 0xc4, 0xb1, 0x02, 0x20, 0x12, 0xc1, 0x5c, 0xb7, 0x07, 0xfb, 0x35, 0x96, 0x83, 0xad, 0x04, 0x08, 0xb6, 0x68, 0x77, 0x9e, 0x9d, 0x9b, 0xa2, 0x19, 0x89, 0xba, 0xa6, 0xa6, 0xb0, 0xb2, 0x56, 0xa3, 0x4e, 0xfb, 0x47, 0x51, 0xbc, 0xaf, 0x42, 0x85, 0xb1, 0x56, 0x35, 0xd4, 0x09, 0xfd, 0xa9, 0x93, 0xc0, 0x43, 0x8a, 0xcd, 0xdc, 0x9d, 0xa0, 0x06, 0xc3, 0x90, 0x36, 0x03, 0x04, 0xab, 0x12, 0xda, 0x76, 0xb4, 0x44, 0xd6, 0x4e, 0x11, 0xcc, 0xf0, 0x5d, 0x96, 0x3f, 0xfb, 0x7f, 0x38, 0x9b, 0xee, 0x83, 0x1d, 0xc7 }; /* K = 013e35ddd416e092335f3bb24a5e826e3e06cb90daad599a42cb5ae8da830b24 */ static const uint8_t ac_dsa_vect180_out[] = { /* R */ 0x04, 0x1d, 0x22, 0x93, 0x49, 0xce, 0xc7, 0x5f, 0xb2, 0xbd, 0x8c, 0x35, 0xc2, 0x49, 0xf9, 0x19, 0x6a, 0x18, 0x96, 0x2c, 0xa7, 0x5e, 0xbd, 0xb4, 0x2d, 0xca, 0x61, 0xd2, 0x1c, 0xb0, 0xe9, 0x10, /* S */ 0x77, 0xbb, 0x79, 0x75, 0xa5, 0x44, 0xc5, 0x1b, 0xf2, 0x49, 0xde, 0xe2, 0x35, 0x95, 0x23, 0x07, 0x28, 0x63, 0x93, 0x44, 0x97, 0xd1, 0xa4, 0x79, 0xd6, 0xe4, 0xb2, 0x45, 0xd4, 0x56, 0xeb, 0x2a }; /* [mod = L=2048, N=256, SHA-256] */ static const uint8_t ac_dsa_vect181_prime[] = { /* P */ 0xa8, 0xad, 0xb6, 0xc0, 0xb4, 0xcf, 0x95, 0x88, 0x01, 0x2e, 0x5d, 0xef, 0xf1, 0xa8, 0x71, 0xd3, 0x83, 0xe0, 0xe2, 0xa8, 0x5b, 0x5e, 0x8e, 0x03, 0xd8, 0x14, 0xfe, 0x13, 0xa0, 0x59, 0x70, 0x5e, 0x66, 0x32, 0x30, 0xa3, 0x77, 0xbf, 0x73, 0x23, 0xa8, 0xfa, 0x11, 0x71, 0x00, 0x20, 0x0b, 0xfd, 0x5a, 0xdf, 0x85, 0x73, 0x93, 0xb0, 0xbb, 0xd6, 0x79, 0x06, 0xc0, 0x81, 0xe5, 0x85, 0x41, 0x0e, 0x38, 0x48, 0x0e, 0xad, 0x51, 0x68, 0x4d, 0xac, 0x3a, 0x38, 0xf7, 0xb6, 0x4c, 0x9e, 0xb1, 0x09, 0xf1, 0x97, 0x39, 0xa4, 0x51, 0x7c, 0xd7, 0xd5, 0xd6, 0x29, 0x1e, 0x8a, 0xf2, 0x0a, 0x3f, 0xbf, 0x17, 0x33, 0x6c, 0x7b, 0xf8, 0x0e, 0xe7, 0x18, 0xee, 0x08, 0x7e, 0x32, 0x2e, 0xe4, 0x10, 0x47, 0xda, 0xbe, 0xfb, 0xcc, 0x34, 0xd1, 0x0b, 0x66, 0xb6, 0x44, 0xdd, 0xb3, 0x16, 0x0a, 0x28, 0xc0, 0x63, 0x95, 0x63, 0xd7, 0x19, 0x93, 0xa2, 0x65, 0x43, 0xea, 0xdb, 0x77, 0x18, 0xf3, 0x17, 0xbf, 0x5d, 0x95, 0x77, 0xa6, 0x15, 0x65, 0x61, 0xb0, 0x82, 0xa1, 0x00, 0x29, 0xcd, 0x44, 0x01, 0x2b, 0x18, 0xde, 0x68, 0x44, 0x50, 0x9f, 0xe0, 0x58, 0xba, 0x87, 0x98, 0x07, 0x92, 0x28, 0x5f, 0x27, 0x50, 0x96, 0x9f, 0xe8, 0x9c, 0x2c, 0xd6, 0x49, 0x8d, 0xb3, 0x54, 0x56, 0x38, 0xd5, 0x37, 0x9d, 0x12, 0x5d, 0xcc, 0xf6, 0x4e, 0x06, 0xc1, 0xaf, 0x33, 0xa6, 0x19, 0x08, 0x41, 0xd2, 0x23, 0xda, 0x15, 0x13, 0x33, 0x3a, 0x7c, 0x9d, 0x78, 0x46, 0x2a, 0xba, 0xab, 0x31, 0xb9, 0xf9, 0x6d, 0x5f, 0x34, 0x44, 0x5c, 0xeb, 0x63, 0x09, 0xf2, 0xf6, 0xd2, 0xc8, 0xdd, 0xe0, 0x64, 0x41, 0xe8, 0x79, 0x80, 0xd3, 0x03, 0xef, 0x9a, 0x1f, 0xf0, 0x07, 0xe8, 0xbe, 0x2f, 0x0b, 0xe0, 0x6c, 0xc1, 0x5f }; static const uint8_t ac_dsa_vect181_sub_prime[] = { /* Q */ 0xe7, 0x1f, 0x85, 0x67, 0x44, 0x7f, 0x42, 0xe7, 0x5f, 0x5e, 0xf8, 0x5c, 0xa2, 0x0f, 0xe5, 0x57, 0xab, 0x03, 0x43, 0xd3, 0x7e, 0xd0, 0x9e, 0xdc, 0x3f, 0x6e, 0x68, 0x60, 0x4d, 0x6b, 0x9d, 0xfb }; static const uint8_t ac_dsa_vect181_base[] = { /* G */ 0x5b, 0xa2, 0x4d, 0xe9, 0x60, 0x7b, 0x89, 0x98, 0xe6, 0x6c, 0xe6, 0xc4, 0xf8, 0x12, 0xa3, 0x14, 0xc6, 0x93, 0x58, 0x42, 0xf7, 0xab, 0x54, 0xcd, 0x82, 0xb1, 0x9f, 0xa1, 0x04, 0xab, 0xfb, 0x5d, 0x84, 0x57, 0x9a, 0x62, 0x3b, 0x25, 0x74, 0xb3, 0x7d, 0x22, 0xcc, 0xae, 0x9b, 0x3e, 0x41, 0x5e, 0x48, 0xf5, 0xc0, 0xf9, 0xbc, 0xbd, 0xff, 0x80, 0x71, 0xd6, 0x3b, 0x9b, 0xb9, 0x56, 0xe5, 0x47, 0xaf, 0x3a, 0x8d, 0xf9, 0x9e, 0x5d, 0x30, 0x61, 0x97, 0x96, 0x52, 0xff, 0x96, 0xb7, 0x65, 0xcb, 0x3e, 0xe4, 0x93, 0x64, 0x35, 0x44, 0xc7, 0x5d, 0xbe, 0x5b, 0xb3, 0x98, 0x34, 0x53, 0x19, 0x52, 0xa0, 0xfb, 0x4b, 0x03, 0x78, 0xb3, 0xfc, 0xbb, 0x4c, 0x8b, 0x58, 0x00, 0xa5, 0x33, 0x03, 0x92, 0xa2, 0xa0, 0x4e, 0x70, 0x0b, 0xb6, 0xed, 0x7e, 0x0b, 0x85, 0x79, 0x5e, 0xa3, 0x8b, 0x1b, 0x96, 0x27, 0x41, 0xb3, 0xf3, 0x3b, 0x9d, 0xde, 0x2f, 0x4e, 0xc1, 0x35, 0x4f, 0x09, 0xe2, 0xeb, 0x78, 0xe9, 0x5f, 0x03, 0x7a, 0x58, 0x04, 0xb6, 0x17, 0x16, 0x59, 0xf8, 0x87, 0x15, 0xce, 0x1a, 0x9b, 0x0c, 0xc9, 0x0c, 0x27, 0xf3, 0x5e, 0xf2, 0xf1, 0x0f, 0xf0, 0xc7, 0xc7, 0xa2, 0xbb, 0x01, 0x54, 0xd9, 0xb8, 0xeb, 0xe7, 0x6a, 0x3d, 0x76, 0x4a, 0xa8, 0x79, 0xaf, 0x37, 0x2f, 0x42, 0x40, 0xde, 0x83, 0x47, 0x93, 0x7e, 0x5a, 0x90, 0xce, 0xc9, 0xf4, 0x1f, 0xf2, 0xf2, 0x6b, 0x8d, 0xa9, 0xa9, 0x4a, 0x22, 0x5d, 0x1a, 0x91, 0x37, 0x17, 0xd7, 0x3f, 0x10, 0x39, 0x7d, 0x21, 0x83, 0xf1, 0xba, 0x3b, 0x7b, 0x45, 0xa6, 0x8f, 0x1f, 0xf1, 0x89, 0x3c, 0xaf, 0x69, 0xa8, 0x27, 0x80, 0x2f, 0x7b, 0x6a, 0x48, 0xd5, 0x1d, 0xa6, 0xfb, 0xef, 0xb6, 0x4f, 0xd9, 0xa6, 0xc5, 0xb7, 0x5c, 0x45, 0x61 }; static const uint8_t ac_dsa_vect181_ptx[] = { /* Msg */ 0x4e, 0x3a, 0x28, 0xbc, 0xf9, 0x0d, 0x1d, 0x2e, 0x75, 0xf0, 0x75, 0xd9, 0xfb, 0xe5, 0x5b, 0x36, 0xc5, 0x52, 0x9b, 0x17, 0xbc, 0x3a, 0x9c, 0xca, 0xba, 0x69, 0x35, 0xc9, 0xe2, 0x05, 0x48, 0x25, 0x5b, 0x3d, 0xfa, 0xe0, 0xf9, 0x1d, 0xb0, 0x30, 0xc1, 0x2f, 0x2c, 0x34, 0x4b, 0x3a, 0x29, 0xc4, 0x15, 0x1c, 0x5b, 0x20, 0x9f, 0x5e, 0x31, 0x9f, 0xdf, 0x1c, 0x23, 0xb1, 0x90, 0xf6, 0x4f, 0x1f, 0xe5, 0xb3, 0x30, 0xcb, 0x7c, 0x8f, 0xa9, 0x52, 0xf9, 0xd9, 0x0f, 0x13, 0xaf, 0xf1, 0xcb, 0x11, 0xd6, 0x31, 0x81, 0xda, 0x9e, 0xfc, 0x6f, 0x7e, 0x15, 0xbf, 0xed, 0x48, 0x62, 0xd1, 0xa6, 0x2c, 0x7d, 0xcf, 0x3b, 0xa8, 0xbf, 0x1f, 0xf3, 0x04, 0xb1, 0x02, 0xb1, 0xec, 0x3f, 0x14, 0x97, 0xdd, 0xdf, 0x09, 0x71, 0x2c, 0xf3, 0x23, 0xf5, 0x61, 0x0a, 0x9d, 0x10, 0xc3, 0xd9, 0x13, 0x26, 0x59 }; static const uint8_t ac_dsa_vect181_priv_val[] = { /* X */ 0x44, 0x69, 0x69, 0x02, 0x54, 0x46, 0x24, 0x7f, 0x84, 0xfd, 0xea, 0x74, 0xd0, 0x2d, 0x7d, 0xd1, 0x36, 0x72, 0xb2, 0xde, 0xb7, 0xc0, 0x85, 0xbe, 0x11, 0x11, 0x14, 0x41, 0x95, 0x5a, 0x37, 0x7b }; static const uint8_t ac_dsa_vect181_pub_val[] = { /* Y */ 0x5a, 0x55, 0xdc, 0xed, 0xdd, 0x11, 0x34, 0xee, 0x5f, 0x11, 0xed, 0x85, 0xde, 0xb4, 0xd6, 0x34, 0xa3, 0x64, 0x3f, 0x5f, 0x36, 0xdc, 0x3a, 0x70, 0x68, 0x92, 0x56, 0x46, 0x9a, 0x0b, 0x65, 0x1a, 0xd2, 0x28, 0x80, 0xf1, 0x4a, 0xb8, 0x57, 0x19, 0x43, 0x4f, 0x9c, 0x0e, 0x40, 0x7e, 0x60, 0xea, 0x42, 0x0e, 0x2a, 0x0c, 0xd2, 0x94, 0x22, 0xc4, 0x89, 0x9c, 0x41, 0x63, 0x59, 0xdb, 0xb1, 0xe5, 0x92, 0x45, 0x6f, 0x2b, 0x3c, 0xce, 0x23, 0x32, 0x59, 0xc1, 0x17, 0x54, 0x2f, 0xd0, 0x5f, 0x31, 0xea, 0x25, 0xb0, 0x15, 0xd9, 0x12, 0x1c, 0x89, 0x0b, 0x90, 0xe0, 0xba, 0xd0, 0x33, 0xbe, 0x13, 0x68, 0xd2, 0x29, 0x98, 0x5a, 0xac, 0x72, 0x26, 0xd1, 0xc8, 0xc2, 0xea, 0xb3, 0x25, 0xef, 0x3b, 0x2c, 0xd5, 0x9d, 0x3b, 0x9f, 0x7d, 0xe7, 0xdb, 0xc9, 0x4a, 0xf1, 0xa9, 0x33, 0x9e, 0xb4, 0x30, 0xca, 0x36, 0xc2, 0x6c, 0x46, 0xec, 0xfa, 0x6c, 0x54, 0x81, 0x71, 0x14, 0x96, 0xf6, 0x24, 0xe1, 0x88, 0xad, 0x75, 0x40, 0xef, 0x5d, 0xf2, 0x6f, 0x8e, 0xfa, 0xcb, 0x82, 0x0b, 0xd1, 0x7a, 0x1f, 0x61, 0x8a, 0xcb, 0x50, 0xc9, 0xbc, 0x19, 0x7d, 0x4c, 0xb7, 0xcc, 0xac, 0x45, 0xd8, 0x24, 0xa3, 0xbf, 0x79, 0x5c, 0x23, 0x4b, 0x55, 0x6b, 0x06, 0xae, 0xb9, 0x29, 0x17, 0x34, 0x53, 0x25, 0x20, 0x84, 0x00, 0x3f, 0x69, 0xfe, 0x98, 0x04, 0x5f, 0xe7, 0x40, 0x02, 0xba, 0x65, 0x8f, 0x93, 0x47, 0x56, 0x22, 0xf7, 0x67, 0x91, 0xd9, 0xb2, 0x62, 0x3d, 0x1b, 0x5f, 0xff, 0x2c, 0xc1, 0x68, 0x44, 0x74, 0x6e, 0xfd, 0x2d, 0x30, 0xa6, 0xa8, 0x13, 0x4b, 0xfc, 0x4c, 0x8c, 0xc8, 0x0a, 0x46, 0x10, 0x79, 0x01, 0xfb, 0x97, 0x3c, 0x28, 0xfc, 0x55, 0x31, 0x30, 0xf3, 0x28, 0x6c, 0x14, 0x89, 0xda }; /* K = 117a529e3fdfc79843a5a4c07539036b865214e014b4928c2a31f47bf62a4fdb */ static const uint8_t ac_dsa_vect181_out[] = { /* R */ 0x63, 0x30, 0x55, 0xe0, 0x55, 0xf2, 0x37, 0xc3, 0x89, 0x99, 0xd8, 0x1c, 0x39, 0x78, 0x48, 0xc3, 0x8c, 0xce, 0x80, 0xa5, 0x5b, 0x64, 0x9d, 0x9e, 0x79, 0x05, 0xc2, 0x98, 0xe2, 0xa5, 0x14, 0x47, /* S */ 0x2b, 0xbf, 0x68, 0x31, 0x76, 0x60, 0xec, 0x1e, 0x4b, 0x15, 0x49, 0x15, 0x02, 0x7b, 0x0b, 0xc0, 0x0e, 0xe1, 0x9c, 0xfc, 0x0b, 0xf7, 0x5d, 0x01, 0x93, 0x05, 0x04, 0xf2, 0xce, 0x10, 0xa8, 0xb0 }; #define ac_dsa_vect182_prime ac_dsa_vect181_prime #define ac_dsa_vect182_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect182_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect182_ptx[] = { /* Msg */ 0xa7, 0x33, 0xb3, 0xf5, 0x88, 0xd5, 0xac, 0x9b, 0x9d, 0x4f, 0xe2, 0xf8, 0x04, 0xdf, 0x8c, 0x25, 0x64, 0x03, 0xa9, 0xf8, 0xee, 0xf6, 0xf1, 0x91, 0xfc, 0x48, 0xe1, 0x26, 0x7f, 0xb5, 0xb4, 0xd5, 0x46, 0xba, 0x11, 0xe7, 0x7b, 0x66, 0x78, 0x44, 0xe4, 0x89, 0xbf, 0x0d, 0x5f, 0x72, 0x99, 0x0a, 0xeb, 0x06, 0x1d, 0x01, 0xcc, 0xd7, 0x94, 0x9a, 0x23, 0xde, 0xf7, 0x4a, 0x80, 0x3b, 0x7d, 0x92, 0xd5, 0x1a, 0xbf, 0xad, 0xeb, 0x48, 0x85, 0xff, 0xd8, 0xff, 0xd5, 0x8a, 0xb8, 0x75, 0x48, 0xa1, 0x5c, 0x08, 0x7a, 0x39, 0xb8, 0x99, 0x3b, 0x2f, 0xa6, 0x4c, 0x9d, 0x31, 0xa5, 0x94, 0xee, 0xb7, 0x51, 0x2d, 0xa1, 0x69, 0x55, 0x83, 0x43, 0x36, 0xa2, 0x34, 0x43, 0x5c, 0x5a, 0x9d, 0x0d, 0xd9, 0xb1, 0x5a, 0x94, 0xe1, 0x16, 0x15, 0x4d, 0xea, 0x63, 0xfd, 0xc8, 0xdd, 0x7a, 0x51, 0x21, 0x81 }; static const uint8_t ac_dsa_vect182_priv_val[] = { /* X */ 0x85, 0x3f, 0x75, 0xac, 0x81, 0xb3, 0xa8, 0x42, 0xc9, 0x99, 0x44, 0x85, 0x62, 0xc5, 0x84, 0xd1, 0xcd, 0x02, 0x77, 0x89, 0x6e, 0xc2, 0xf9, 0x3c, 0x05, 0xc3, 0x37, 0xee, 0xd4, 0x14, 0x36, 0x7a }; static const uint8_t ac_dsa_vect182_pub_val[] = { /* Y */ 0x35, 0x6e, 0xd4, 0x75, 0x37, 0xfb, 0xf0, 0x2c, 0xb3, 0x0a, 0x8c, 0xee, 0x05, 0x37, 0xf3, 0x00, 0xdf, 0xf1, 0xd0, 0xc4, 0x67, 0x39, 0x9c, 0xe7, 0x0b, 0x87, 0xa8, 0x75, 0x8d, 0x5e, 0xc9, 0xdd, 0x25, 0x62, 0x46, 0xfc, 0xca, 0xeb, 0x9d, 0xfe, 0x10, 0x9f, 0x2a, 0x98, 0x4f, 0x2d, 0xda, 0xa8, 0x7a, 0xad, 0x54, 0xce, 0x0d, 0x31, 0xf9, 0x07, 0xe5, 0x04, 0x52, 0x1b, 0xaf, 0x42, 0x07, 0xd7, 0x07, 0x3b, 0x0a, 0x4a, 0x9f, 0xc6, 0x7d, 0x8d, 0xdd, 0xa9, 0x9f, 0x87, 0xae, 0xd6, 0xe0, 0x36, 0x7c, 0xec, 0x27, 0xf9, 0xc6, 0x08, 0xaf, 0x74, 0x3b, 0xf1, 0xee, 0x6e, 0x11, 0xd5, 0x5a, 0x18, 0x2d, 0x43, 0xb0, 0x24, 0xac, 0xe5, 0x34, 0x02, 0x9b, 0x86, 0x6f, 0x64, 0x22, 0x82, 0x8b, 0xb8, 0x1a, 0x39, 0xaa, 0xe9, 0x60, 0x1e, 0xe8, 0x1c, 0x7f, 0x81, 0xdd, 0x35, 0x8e, 0x69, 0xf4, 0xe2, 0xed, 0xfa, 0x46, 0x54, 0xd8, 0xa6, 0x5b, 0xc6, 0x43, 0x11, 0xdc, 0x86, 0xaa, 0xc4, 0xab, 0xc1, 0xfc, 0x7a, 0x3f, 0x65, 0x15, 0x96, 0x61, 0xa0, 0xd8, 0xe2, 0x88, 0xeb, 0x8d, 0x66, 0x5c, 0xb0, 0xad, 0xf5, 0xac, 0x3d, 0x6b, 0xa8, 0xe9, 0x45, 0x3f, 0xac, 0xf7, 0x54, 0x23, 0x93, 0xae, 0x24, 0xfd, 0x50, 0x45, 0x1d, 0x38, 0x28, 0x08, 0x65, 0x58, 0xf7, 0xec, 0x52, 0x8e, 0x28, 0x49, 0x35, 0xa5, 0x3f, 0x67, 0xa1, 0xaa, 0x8e, 0x25, 0xd8, 0xad, 0x5c, 0x4a, 0xd5, 0x5d, 0x83, 0xae, 0xf8, 0x83, 0xa4, 0xd9, 0xee, 0xb6, 0x29, 0x7e, 0x6a, 0x53, 0xf6, 0x50, 0x49, 0xba, 0x9e, 0x2c, 0x6b, 0x79, 0x53, 0xa7, 0x60, 0xbc, 0x1d, 0xc4, 0x6f, 0x78, 0xce, 0xaa, 0xa2, 0xc0, 0x2f, 0x53, 0x75, 0xdd, 0x82, 0xe7, 0x08, 0x74, 0x4a, 0xa4, 0x0b, 0x15, 0x79, 0x9e, 0xb8, 0x1d, 0x7e, 0x5b, 0x1a }; /* K = d41b335753e1ff3f828f57b797ff5b2db5cd79f6a1abeaa137a2a830e24ed4b5 */ static const uint8_t ac_dsa_vect182_out[] = { /* R */ 0xbc, 0xd4, 0x90, 0x56, 0x8c, 0x0a, 0x89, 0xba, 0x31, 0x1b, 0xef, 0x88, 0xea, 0x4f, 0x4b, 0x03, 0xd2, 0x73, 0xe7, 0x93, 0x72, 0x27, 0x22, 0x32, 0x70, 0x95, 0xa3, 0x78, 0xdd, 0x6f, 0x35, 0x22, /* S */ 0x74, 0x49, 0x8f, 0xc4, 0x30, 0x91, 0xfc, 0xdd, 0x2d, 0x1e, 0xf0, 0x77, 0x5f, 0x82, 0x86, 0x94, 0x5a, 0x01, 0xcd, 0x72, 0xb8, 0x05, 0x25, 0x6b, 0x04, 0x51, 0xf9, 0xcb, 0xd9, 0x43, 0xcf, 0x82 }; #define ac_dsa_vect183_prime ac_dsa_vect181_prime #define ac_dsa_vect183_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect183_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect183_ptx[] = { /* Msg */ 0xac, 0x30, 0xfb, 0x15, 0x51, 0x04, 0x95, 0x4b, 0x9d, 0x71, 0x39, 0xde, 0x93, 0x46, 0xd5, 0x4c, 0xa0, 0x51, 0x78, 0x95, 0x40, 0x53, 0xfd, 0x36, 0x1c, 0x97, 0x19, 0xce, 0xa5, 0x30, 0xd2, 0xd2, 0xe1, 0x73, 0x7f, 0xc4, 0x6b, 0x0e, 0xe2, 0x73, 0x57, 0xce, 0xcb, 0xd4, 0x7e, 0x0f, 0xd4, 0x7a, 0xda, 0x0d, 0x52, 0x36, 0xa9, 0xd7, 0x7d, 0xd6, 0x1a, 0x1b, 0x0d, 0xb5, 0x2e, 0x62, 0x8b, 0x14, 0x58, 0x8f, 0xdb, 0xa8, 0x77, 0x48, 0x82, 0x86, 0x6b, 0x04, 0xb4, 0x9c, 0xf5, 0x20, 0x5d, 0xb4, 0x94, 0x45, 0xa8, 0xa2, 0x02, 0xa5, 0xfc, 0x3f, 0xcc, 0x36, 0xef, 0xe0, 0xbd, 0x0c, 0x1e, 0x51, 0xeb, 0x08, 0x61, 0x6c, 0x4a, 0x7a, 0xfe, 0x12, 0x00, 0x77, 0xea, 0x08, 0xca, 0xf1, 0x67, 0xe9, 0x04, 0x46, 0x86, 0x22, 0x98, 0x01, 0x1a, 0xd9, 0xa1, 0xf1, 0x1c, 0xef, 0xb5, 0xf7, 0x43, 0x35 }; static const uint8_t ac_dsa_vect183_priv_val[] = { /* X */ 0xd6, 0x92, 0xd2, 0xc6, 0x53, 0xbf, 0xca, 0xb2, 0xe7, 0x49, 0x2e, 0xc5, 0x6e, 0x51, 0x27, 0x24, 0xc9, 0x12, 0x22, 0x7d, 0x79, 0x3a, 0x59, 0x88, 0x28, 0x00, 0xd3, 0x7a, 0xd2, 0x60, 0xbf, 0xd9 }; static const uint8_t ac_dsa_vect183_pub_val[] = { /* Y */ 0x84, 0x74, 0x1b, 0xef, 0x3d, 0x9f, 0x9d, 0xab, 0x0e, 0x3f, 0xae, 0x78, 0x39, 0xd3, 0x9c, 0x1a, 0x19, 0x66, 0xab, 0x82, 0x79, 0x8d, 0x71, 0xaa, 0x46, 0xb7, 0xde, 0xf4, 0x65, 0xe3, 0x9e, 0xa5, 0xe7, 0xad, 0xae, 0xed, 0x2d, 0xfc, 0x92, 0xc9, 0xbe, 0xa7, 0x2d, 0x65, 0x26, 0x8b, 0x8d, 0xf9, 0x55, 0xf9, 0xb7, 0xe7, 0xb6, 0x92, 0x3d, 0x2b, 0xf0, 0x0e, 0x7e, 0x43, 0xf8, 0x3a, 0x0e, 0x54, 0xca, 0x94, 0x42, 0x75, 0xdc, 0x39, 0xc0, 0xfb, 0x0c, 0x8a, 0x00, 0xcc, 0xd0, 0xb2, 0x9b, 0x79, 0x0d, 0x9d, 0x8f, 0x34, 0x96, 0x05, 0x43, 0x90, 0x41, 0x0b, 0x4a, 0xe5, 0xc6, 0xea, 0xf2, 0xe2, 0x1b, 0xdb, 0x52, 0x42, 0x11, 0x79, 0x97, 0x0f, 0xa1, 0x3e, 0x09, 0x48, 0x28, 0x0a, 0x06, 0xa5, 0x76, 0xcd, 0xff, 0xae, 0x6f, 0xdb, 0x23, 0x9e, 0xbd, 0x48, 0x6b, 0xf4, 0x69, 0x92, 0x70, 0xe2, 0xbc, 0x08, 0x79, 0xbe, 0x25, 0xa6, 0xa0, 0xc2, 0xf7, 0x28, 0x0e, 0xa3, 0x3e, 0xeb, 0x32, 0xc5, 0xd2, 0xea, 0x60, 0x93, 0x38, 0x1f, 0xc4, 0xc8, 0x3c, 0x8f, 0x9a, 0x59, 0x1b, 0x0b, 0x0e, 0x72, 0xfc, 0xc1, 0x49, 0xc6, 0x85, 0xb0, 0x13, 0x81, 0xa7, 0x4a, 0xf4, 0xcc, 0xb9, 0x02, 0xc0, 0x05, 0x0e, 0x05, 0xba, 0xf7, 0x32, 0xba, 0xcd, 0x16, 0x06, 0x53, 0x3e, 0x2a, 0xcc, 0x63, 0x08, 0xc7, 0x77, 0x20, 0x1e, 0xec, 0xdc, 0xdc, 0xbe, 0x93, 0x51, 0x49, 0xc4, 0xe5, 0x72, 0xa1, 0x5a, 0x20, 0x5d, 0x2b, 0x80, 0xe7, 0x5e, 0xf2, 0x47, 0x31, 0x60, 0xf8, 0x5e, 0x64, 0x2d, 0x28, 0x37, 0x0c, 0x0f, 0x19, 0x46, 0x41, 0x25, 0xc6, 0x87, 0xc9, 0x69, 0x66, 0x5b, 0x13, 0xb0, 0x95, 0xaa, 0x87, 0xba, 0x47, 0x68, 0x02, 0xd7, 0x2c, 0x35, 0x4e, 0xbc, 0xbc, 0xd8, 0x9f, 0x28, 0xef, 0x00, 0x1c }; /* K = 39335e9193222c7ae3caf8e5ad77b751e9847c37b9016d355ac7520407c91e87 */ static const uint8_t ac_dsa_vect183_out[] = { /* R */ 0x28, 0xc6, 0xbf, 0xca, 0xdb, 0x5f, 0x52, 0x32, 0x4e, 0x39, 0x90, 0x3b, 0xf7, 0xa0, 0x4f, 0xae, 0xfb, 0x89, 0x38, 0x3f, 0x47, 0x3d, 0xaa, 0x43, 0x2c, 0xab, 0x91, 0x78, 0xf2, 0x47, 0x0d, 0x3c, /* S */ 0x4e, 0x88, 0xf6, 0x5f, 0xf7, 0x76, 0x94, 0x0b, 0xaf, 0xbb, 0xfb, 0x35, 0x64, 0x3b, 0xcd, 0xae, 0xb4, 0x3b, 0x25, 0xb4, 0x5d, 0xe2, 0xde, 0x3c, 0x01, 0x1f, 0xf1, 0x44, 0x9c, 0x8b, 0x8b, 0x32 }; #define ac_dsa_vect184_prime ac_dsa_vect181_prime #define ac_dsa_vect184_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect184_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect184_ptx[] = { /* Msg */ 0x22, 0x25, 0x03, 0x1f, 0xd2, 0x6a, 0x6b, 0xb4, 0xfd, 0x99, 0x90, 0x34, 0x7b, 0xc2, 0xc8, 0xea, 0x4b, 0xa4, 0x5b, 0xd7, 0x5d, 0xf6, 0x84, 0x76, 0xf9, 0x83, 0xdf, 0xfb, 0x55, 0x31, 0x89, 0x9f, 0x13, 0x17, 0xd9, 0x5f, 0x7c, 0xbb, 0x49, 0x3d, 0xe4, 0x5c, 0xd2, 0xf1, 0x19, 0x04, 0xcd, 0x5c, 0x5d, 0x5a, 0x74, 0x8b, 0x4a, 0xa1, 0x27, 0xca, 0x73, 0x0f, 0x89, 0xa9, 0x28, 0xdd, 0xcd, 0x25, 0x0a, 0x65, 0x51, 0xc2, 0xf7, 0xcc, 0xe1, 0x09, 0xe6, 0x4d, 0x3a, 0xb7, 0x4a, 0xfb, 0x2d, 0x4f, 0x4f, 0x7e, 0x34, 0x94, 0xeb, 0x7d, 0x55, 0x70, 0x60, 0xa1, 0xf2, 0x9e, 0xcb, 0x5b, 0x75, 0xf6, 0x48, 0x48, 0x37, 0x09, 0x02, 0xbd, 0x6a, 0xe2, 0xfb, 0xf6, 0x80, 0x2b, 0x2f, 0x9c, 0x37, 0xf3, 0x48, 0x36, 0xad, 0x71, 0xdd, 0x2e, 0x2a, 0xbf, 0x6a, 0x0a, 0x47, 0xdf, 0x4f, 0xd5, 0x57, 0x3d }; static const uint8_t ac_dsa_vect184_priv_val[] = { /* X */ 0x87, 0xbd, 0x74, 0xc5, 0xd7, 0x0a, 0x29, 0x29, 0x14, 0xd9, 0x6b, 0x47, 0xdc, 0x5e, 0x9e, 0x97, 0xa6, 0x79, 0x9c, 0x3b, 0x78, 0x80, 0x14, 0xe7, 0xf1, 0x06, 0xce, 0x7c, 0xe7, 0xe1, 0x7a, 0x95 }; static const uint8_t ac_dsa_vect184_pub_val[] = { /* Y */ 0x04, 0x96, 0x4c, 0x09, 0x3f, 0xdb, 0x85, 0x2c, 0x97, 0xb1, 0x65, 0xe1, 0x79, 0xf7, 0xef, 0x3b, 0x39, 0x35, 0x0c, 0x25, 0x88, 0xe6, 0x0a, 0x01, 0x77, 0xbc, 0x2e, 0x89, 0x0a, 0xb0, 0x8f, 0xfd, 0x73, 0xd8, 0xa5, 0xa6, 0x69, 0x2c, 0xfe, 0xbd, 0x0c, 0x91, 0x2d, 0xe2, 0xd5, 0x0b, 0xf0, 0x21, 0x39, 0xbf, 0x01, 0x7e, 0xc7, 0x15, 0xc2, 0xdd, 0x7b, 0xe1, 0xaa, 0xd9, 0xd0, 0xb9, 0x6c, 0x47, 0xd6, 0x46, 0x5d, 0x4e, 0xb0, 0xea, 0x02, 0x47, 0xff, 0x65, 0x59, 0x59, 0xd9, 0x4a, 0x34, 0x09, 0xe9, 0xf9, 0x26, 0x2d, 0x87, 0x70, 0x75, 0xf6, 0xf0, 0xc7, 0x78, 0x3a, 0x8d, 0xf3, 0xcc, 0x11, 0x5c, 0x52, 0x87, 0xc6, 0x9b, 0xdb, 0xf0, 0xff, 0xe0, 0xed, 0x37, 0x19, 0xe4, 0x18, 0xff, 0x99, 0xb5, 0xdc, 0xd5, 0xf0, 0xcf, 0xc1, 0x06, 0x5e, 0x40, 0x4a, 0x21, 0x6e, 0x09, 0x50, 0x86, 0xa6, 0xe2, 0x19, 0x7a, 0x69, 0xc4, 0x77, 0x74, 0x37, 0x72, 0x03, 0xd9, 0x9a, 0x23, 0x4e, 0x7b, 0xe6, 0x1c, 0xc4, 0xa9, 0x5a, 0x80, 0x9f, 0x9b, 0x9d, 0xd0, 0xa5, 0x50, 0xb7, 0x12, 0xbc, 0xe5, 0xd1, 0xcf, 0xda, 0xfd, 0xa2, 0x32, 0xd7, 0xc8, 0x31, 0xec, 0x52, 0x88, 0x47, 0x01, 0x15, 0x5a, 0x3d, 0xf2, 0xb0, 0x86, 0xbe, 0x87, 0x0a, 0xf8, 0xe8, 0x75, 0x55, 0x75, 0x18, 0xb0, 0x35, 0xc8, 0x49, 0x57, 0xc1, 0x74, 0x2b, 0x8c, 0x02, 0xb0, 0xd4, 0x6b, 0x64, 0xa7, 0x73, 0x01, 0x28, 0x09, 0xbf, 0xa4, 0xc5, 0x40, 0x7c, 0x3f, 0xbf, 0xed, 0x3b, 0x96, 0x08, 0x16, 0x60, 0x4c, 0xf4, 0x2b, 0x2d, 0xef, 0xb4, 0xfe, 0xea, 0xbc, 0x17, 0x2a, 0xfb, 0xfc, 0xbc, 0x82, 0x83, 0x6b, 0x44, 0xb9, 0x27, 0xe0, 0xcd, 0x4c, 0xa6, 0x3a, 0x1d, 0xae, 0xb3, 0xee, 0xb3, 0x0d, 0x1d, 0xe6, 0x08, 0x12, 0x7b }; /* K = 64f504110193cc4a3f400b6fcfd71d64a1e166c048829d23206da12a7dc1423a */ static const uint8_t ac_dsa_vect184_out[] = { /* R */ 0x55, 0x68, 0xd8, 0x10, 0xba, 0x66, 0x4a, 0x08, 0xb3, 0x01, 0x26, 0x6d, 0x08, 0xc6, 0x9e, 0xac, 0xcc, 0xec, 0x5a, 0xae, 0x87, 0x0a, 0x6d, 0x57, 0x9e, 0xda, 0x51, 0xa3, 0x1b, 0x18, 0x46, 0x55, /* S */ 0x9e, 0x81, 0x88, 0x68, 0xe0, 0x67, 0x87, 0xfb, 0x95, 0x19, 0xb5, 0x05, 0x46, 0xee, 0x21, 0xd0, 0x54, 0x6e, 0x16, 0xbb, 0x1b, 0x59, 0x20, 0x31, 0x1b, 0xa4, 0x47, 0x69, 0xdc, 0x69, 0xc7, 0xa6 }; #define ac_dsa_vect185_prime ac_dsa_vect181_prime #define ac_dsa_vect185_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect185_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect185_ptx[] = { /* Msg */ 0x4b, 0x1f, 0x93, 0x35, 0xfd, 0xfe, 0x88, 0xc0, 0x86, 0x6b, 0xb6, 0x48, 0xc0, 0x58, 0x57, 0xb7, 0x9c, 0x2f, 0xda, 0x92, 0xa9, 0x87, 0xb3, 0x59, 0x28, 0x2b, 0xbf, 0x08, 0x22, 0xdb, 0x74, 0x7a, 0x39, 0x40, 0xfe, 0xe0, 0x5a, 0xeb, 0x3c, 0xc0, 0x81, 0x23, 0x1e, 0x29, 0xb9, 0xd4, 0x60, 0xef, 0x30, 0xa5, 0x5f, 0x0f, 0x88, 0x70, 0x2a, 0x4e, 0xcd, 0xcb, 0x84, 0x2b, 0xee, 0xb3, 0x6a, 0x97, 0x61, 0x36, 0xc9, 0x24, 0x1f, 0x2e, 0xb5, 0xc2, 0xd9, 0x3f, 0xe3, 0x8a, 0x15, 0x80, 0xcd, 0x58, 0xfb, 0x93, 0xed, 0x13, 0x7a, 0x7d, 0x05, 0xea, 0x22, 0xd5, 0xe8, 0x73, 0x45, 0x63, 0x3a, 0x0e, 0x39, 0x3f, 0xee, 0xa6, 0x16, 0xea, 0xf8, 0x36, 0x84, 0xc3, 0xba, 0xca, 0x4f, 0xc5, 0xbf, 0x80, 0xa8, 0x7d, 0xbe, 0xc3, 0xa9, 0x78, 0x7d, 0xac, 0xce, 0xc4, 0x79, 0x66, 0x1a, 0xf0, 0xb9, 0x68 }; static const uint8_t ac_dsa_vect185_priv_val[] = { /* X */ 0xaf, 0xa0, 0x80, 0x28, 0x78, 0x98, 0xb0, 0x78, 0x7f, 0x5d, 0x06, 0xd5, 0x82, 0x6c, 0xc2, 0x85, 0xae, 0x5b, 0xee, 0x41, 0x76, 0x80, 0x98, 0x75, 0x04, 0x19, 0xa5, 0xc8, 0x86, 0x3a, 0xe7, 0x29 }; static const uint8_t ac_dsa_vect185_pub_val[] = { /* Y */ 0x57, 0x76, 0x7c, 0x34, 0x8a, 0xb0, 0xc6, 0x1e, 0xab, 0x4f, 0x2e, 0x08, 0x94, 0xbb, 0x62, 0x23, 0x64, 0x5a, 0x33, 0x1c, 0x5b, 0xe2, 0x49, 0x0d, 0x76, 0x48, 0x39, 0xfa, 0x4d, 0xac, 0x81, 0x4e, 0x05, 0xe7, 0x09, 0x25, 0xd7, 0x20, 0xd0, 0xe0, 0xab, 0x5f, 0xaa, 0x3d, 0xb6, 0xdc, 0x58, 0xba, 0x57, 0x3b, 0x4e, 0x0b, 0x7b, 0xc1, 0x3e, 0x4c, 0x04, 0x4b, 0x96, 0x25, 0x93, 0x85, 0xfc, 0xd1, 0xea, 0xde, 0x0d, 0x7c, 0x51, 0x74, 0x49, 0x8c, 0x70, 0xba, 0x8f, 0xb8, 0x66, 0x1e, 0xd5, 0x24, 0xfa, 0x81, 0x71, 0x57, 0x0f, 0xd5, 0x2f, 0xaa, 0xc9, 0x91, 0x5d, 0x94, 0x7b, 0x51, 0xf6, 0xcf, 0x5b, 0x74, 0xe3, 0xed, 0xfa, 0x06, 0x4a, 0x51, 0x61, 0xc7, 0x62, 0x3e, 0xc6, 0xe8, 0x0d, 0x29, 0x96, 0x0b, 0x57, 0x3f, 0xb9, 0x8d, 0xe9, 0xe7, 0x10, 0xc5, 0x6e, 0xe4, 0x5a, 0xab, 0xc4, 0x02, 0x23, 0x57, 0xf6, 0xc3, 0x71, 0x29, 0x62, 0xad, 0x19, 0xe4, 0x3a, 0x41, 0x48, 0x95, 0x7c, 0xc6, 0xb9, 0xc8, 0xf6, 0x91, 0x87, 0x7a, 0x59, 0xf4, 0x31, 0x62, 0xd8, 0xf9, 0x8f, 0x24, 0x72, 0x69, 0x9e, 0xa5, 0x10, 0x10, 0x93, 0x05, 0xf8, 0xf9, 0x8a, 0xa3, 0xf3, 0xf3, 0x1e, 0x43, 0x02, 0xeb, 0x05, 0xe5, 0xf1, 0xa4, 0x62, 0xd0, 0xf3, 0xbf, 0xdc, 0xd0, 0xc8, 0x4e, 0x76, 0xbf, 0xdd, 0x14, 0xb7, 0xc9, 0x0b, 0x98, 0x2b, 0x8c, 0x0e, 0xc7, 0xc7, 0x8c, 0xf3, 0xe6, 0xc2, 0x16, 0xed, 0x1d, 0x20, 0xb5, 0x2a, 0x13, 0x2f, 0x53, 0xc9, 0x74, 0x7c, 0x7f, 0xbe, 0x39, 0x09, 0x2d, 0x5c, 0xcf, 0xcc, 0x01, 0xa1, 0x19, 0xc9, 0x2f, 0xaa, 0x3f, 0x13, 0xd4, 0x64, 0x3e, 0x5d, 0xb2, 0x2c, 0xa1, 0x68, 0x1d, 0x65, 0x36, 0xbc, 0x7b, 0x70, 0x4b, 0xb0, 0x9b, 0xf6, 0xc6, 0x21, 0xc2, 0xff, 0x06 }; /* K = d23656910f6e8ea72cdb979cfd8c8f6676c47c6161c3aa14f2338392891d1afe */ static const uint8_t ac_dsa_vect185_out[] = { /* R */ 0x7a, 0xc9, 0x5d, 0x3e, 0x09, 0x36, 0xcd, 0xe4, 0x41, 0xe4, 0xa2, 0x90, 0x71, 0x1c, 0xc0, 0x44, 0xe6, 0xe9, 0x8e, 0x8a, 0x8d, 0xe6, 0x82, 0x98, 0xbf, 0x7f, 0xb9, 0x0e, 0xef, 0x58, 0x9e, 0xb2, /* S */ 0x14, 0x0e, 0x9d, 0xe3, 0x7e, 0xc5, 0xae, 0xb3, 0xfb, 0x79, 0x5b, 0x01, 0x6f, 0x51, 0xea, 0x3e, 0x92, 0xd6, 0xf1, 0x98, 0xc5, 0xa0, 0xe5, 0xa5, 0xd2, 0x36, 0x67, 0x1c, 0x91, 0x04, 0x2c, 0x94 }; #define ac_dsa_vect186_prime ac_dsa_vect181_prime #define ac_dsa_vect186_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect186_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect186_ptx[] = { /* Msg */ 0x3b, 0x87, 0x10, 0x9b, 0xf2, 0x15, 0x71, 0xfc, 0xfa, 0xe9, 0x2b, 0x85, 0x96, 0x49, 0xbf, 0x37, 0xdd, 0x23, 0xd5, 0x9f, 0x76, 0xd5, 0x0c, 0xf2, 0x6f, 0x4b, 0x2e, 0xbf, 0x7c, 0x5f, 0x4a, 0xe0, 0xb3, 0x77, 0xbf, 0x3b, 0xf2, 0xc7, 0xe0, 0x15, 0xa7, 0x4e, 0xfc, 0x80, 0x84, 0x33, 0x04, 0x7a, 0x71, 0xbf, 0x1e, 0xd4, 0xba, 0x90, 0x25, 0xf4, 0x56, 0x1d, 0xcb, 0x94, 0xbe, 0xf2, 0xc2, 0xa2, 0xc9, 0x4b, 0x3f, 0x55, 0xed, 0x61, 0x1c, 0x43, 0x2f, 0x98, 0xa6, 0x83, 0xab, 0xad, 0xc2, 0xc3, 0x1d, 0x00, 0x2e, 0xac, 0xa9, 0xb0, 0x70, 0xf2, 0xb2, 0x13, 0x19, 0xd0, 0x72, 0xdf, 0x75, 0xc6, 0x23, 0x85, 0xd7, 0xd0, 0x28, 0x97, 0xa0, 0x0f, 0x86, 0x3c, 0x28, 0x82, 0xb2, 0x89, 0x7a, 0x33, 0x13, 0x32, 0xbb, 0x95, 0x68, 0xb2, 0xfd, 0xfa, 0xcc, 0xf5, 0x0b, 0x3d, 0xe4, 0xb4, 0x2e, 0x8a }; static const uint8_t ac_dsa_vect186_priv_val[] = { /* X */ 0x66, 0x86, 0x06, 0xf4, 0xa8, 0x2b, 0x50, 0x87, 0x6a, 0xbd, 0x7f, 0x3d, 0xc0, 0xed, 0x58, 0x0a, 0x10, 0x34, 0x4c, 0x1d, 0xd0, 0x92, 0xc5, 0xbc, 0x1b, 0x26, 0xc4, 0x27, 0x02, 0x8c, 0xc5, 0xf3 }; static const uint8_t ac_dsa_vect186_pub_val[] = { /* Y */ 0x7c, 0x16, 0xa9, 0x64, 0x4c, 0x18, 0x25, 0x79, 0x11, 0xb8, 0x26, 0xda, 0x10, 0xb5, 0xb1, 0x01, 0x15, 0xff, 0x77, 0x67, 0x5b, 0xdc, 0x3c, 0x9f, 0x77, 0x09, 0x71, 0x62, 0xfc, 0x05, 0x9e, 0x86, 0xb0, 0x4c, 0x1f, 0xae, 0xed, 0x3c, 0x66, 0x30, 0x6c, 0x7e, 0x5f, 0xe2, 0xd5, 0xc6, 0x3e, 0x8f, 0xa5, 0xfa, 0x2b, 0x82, 0x56, 0x5a, 0xc6, 0x06, 0x54, 0x45, 0xde, 0x58, 0x19, 0xa2, 0xe4, 0xa5, 0x69, 0x25, 0xbd, 0xcc, 0xe1, 0x38, 0x65, 0x4d, 0xfb, 0x49, 0x0a, 0xc6, 0x24, 0xa3, 0x8a, 0xd6, 0x58, 0x49, 0xbe, 0x4b, 0xa7, 0x4d, 0x14, 0xc8, 0x29, 0xef, 0x10, 0x22, 0x48, 0xa1, 0x81, 0x93, 0x93, 0x33, 0x35, 0xea, 0xf0, 0xc7, 0x3b, 0x7b, 0xfe, 0x77, 0xd6, 0x69, 0xf8, 0x57, 0xef, 0x3a, 0xdd, 0xb1, 0xf4, 0xca, 0x42, 0x4d, 0xbf, 0xde, 0xdb, 0x9e, 0x2d, 0xe1, 0xfc, 0x0c, 0xc2, 0xd9, 0x77, 0x7e, 0xe8, 0x34, 0xa0, 0xac, 0x7d, 0x0c, 0xac, 0x1b, 0x2a, 0x61, 0x38, 0x90, 0x07, 0x14, 0x90, 0xef, 0xe5, 0xcb, 0x20, 0x97, 0xac, 0x83, 0x0f, 0xbc, 0x27, 0x88, 0x1f, 0x9f, 0xa5, 0x1d, 0x3b, 0x02, 0x47, 0xc5, 0xe1, 0xb7, 0xf6, 0xbe, 0x13, 0xc3, 0x0d, 0xd3, 0x1c, 0x2c, 0x59, 0xb7, 0x68, 0x3c, 0xe6, 0x0a, 0x0e, 0xbd, 0x66, 0x63, 0xde, 0x97, 0x87, 0x0a, 0xf2, 0xdd, 0x17, 0xd9, 0x14, 0x31, 0x32, 0x3a, 0x46, 0x86, 0xbf, 0x32, 0xe1, 0xe3, 0x97, 0x32, 0xda, 0xe1, 0x30, 0x0c, 0x57, 0xbd, 0x60, 0x0b, 0xe7, 0x90, 0x59, 0x3b, 0x2e, 0xfa, 0x04, 0x5b, 0xbf, 0xca, 0x95, 0x67, 0x68, 0x15, 0x7b, 0x47, 0x24, 0xca, 0x0a, 0x14, 0x72, 0xfe, 0x6c, 0x8d, 0xcd, 0x82, 0xa3, 0x80, 0x24, 0x76, 0x63, 0x41, 0xd1, 0xf5, 0x48, 0xad, 0x8f, 0x36, 0xdc, 0x67, 0x66, 0x76, 0xfb, 0xe3 }; /* K = a3d781e5385d66989b38034171da11594b20f15733fd4701a63cf24bb58ec341 */ static const uint8_t ac_dsa_vect186_out[] = { /* R */ 0x1e, 0x21, 0x9e, 0xef, 0xd6, 0x16, 0xca, 0xac, 0x54, 0x9a, 0x85, 0x9d, 0x45, 0x18, 0x6b, 0x5c, 0x52, 0x86, 0x27, 0x57, 0x39, 0x58, 0xfe, 0x55, 0xcf, 0x57, 0xfb, 0xbd, 0x16, 0x61, 0xf7, 0xb8, /* S */ 0xb0, 0x95, 0x45, 0x84, 0x3d, 0xc0, 0xf6, 0x29, 0x9b, 0x48, 0xf1, 0x43, 0x11, 0x50, 0x36, 0x05, 0x50, 0x28, 0x68, 0x85, 0x9e, 0x8c, 0x43, 0x86, 0x7f, 0x80, 0xdf, 0x3c, 0x23, 0x91, 0xc7, 0x62 }; #define ac_dsa_vect187_prime ac_dsa_vect181_prime #define ac_dsa_vect187_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect187_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect187_ptx[] = { /* Msg */ 0x04, 0x23, 0x65, 0xb1, 0x25, 0x69, 0x31, 0xa1, 0x11, 0xfa, 0xcc, 0x6c, 0x40, 0xf6, 0x18, 0xc4, 0x28, 0x80, 0x1b, 0x03, 0xe4, 0xf2, 0x22, 0xa1, 0xe1, 0xb7, 0x76, 0x3c, 0x3b, 0x02, 0xa6, 0x21, 0x4e, 0x4c, 0x51, 0x7b, 0xeb, 0x58, 0x7a, 0x4e, 0xa6, 0x9f, 0xdb, 0xd4, 0xea, 0x2d, 0x5d, 0x5f, 0x45, 0xaf, 0xde, 0xd9, 0x6d, 0xda, 0xc8, 0x7d, 0xc8, 0x99, 0x55, 0x61, 0x3a, 0xef, 0xf7, 0x64, 0x4f, 0xc6, 0xa5, 0x8b, 0xb8, 0x59, 0xa8, 0x52, 0x21, 0x31, 0x8f, 0xbc, 0x5e, 0x17, 0x5c, 0x69, 0x85, 0xb1, 0x9a, 0x1d, 0x16, 0xab, 0x6a, 0xd3, 0xca, 0x8f, 0xa1, 0x90, 0x3a, 0xcc, 0xa4, 0x2b, 0xc6, 0xd9, 0xef, 0xbe, 0x88, 0xfd, 0x6f, 0x2a, 0x86, 0x50, 0x42, 0x5b, 0xe9, 0x7b, 0xab, 0x9c, 0xb6, 0x70, 0xb2, 0xe3, 0x9f, 0x36, 0xd5, 0x26, 0x27, 0x8e, 0x0b, 0xcf, 0xcb, 0xff, 0xc3, 0xc6 }; static const uint8_t ac_dsa_vect187_priv_val[] = { /* X */ 0x1c, 0x08, 0x57, 0x0d, 0x1e, 0x1a, 0xc0, 0x85, 0x7f, 0x64, 0x9e, 0x4b, 0xa2, 0x0d, 0xe0, 0xe9, 0xac, 0xa9, 0x73, 0x74, 0xac, 0xba, 0x6b, 0xae, 0x35, 0x01, 0x04, 0xf1, 0xfc, 0xe2, 0x0b, 0xe0 }; static const uint8_t ac_dsa_vect187_pub_val[] = { /* Y */ 0x81, 0x54, 0x11, 0xac, 0x6a, 0xa1, 0xb4, 0x95, 0xc4, 0xba, 0xc8, 0x02, 0x80, 0x6a, 0x1a, 0x35, 0x92, 0x92, 0x4f, 0xd9, 0xc0, 0xa3, 0xcc, 0xa4, 0x1e, 0x07, 0x6d, 0xb2, 0x93, 0xd8, 0x15, 0xc2, 0xf2, 0xb0, 0xa5, 0x3e, 0x97, 0xcf, 0x65, 0x7c, 0x89, 0x51, 0xb8, 0x56, 0xcc, 0xa1, 0x16, 0x6a, 0xd4, 0x33, 0xbe, 0x58, 0x29, 0xb0, 0xb6, 0x36, 0xca, 0x9d, 0xe4, 0x91, 0x11, 0xce, 0x5c, 0xec, 0xce, 0xde, 0xdf, 0x36, 0xd7, 0x95, 0xed, 0xef, 0xef, 0xee, 0x1d, 0x55, 0x32, 0x50, 0xfb, 0xcd, 0x5b, 0xd0, 0x5b, 0x4d, 0x99, 0xde, 0x55, 0xf1, 0x47, 0x77, 0x3a, 0xb3, 0xa0, 0xf7, 0x54, 0xd0, 0x90, 0xca, 0x7b, 0x6f, 0xf7, 0x5c, 0x16, 0x0e, 0xef, 0xd1, 0x70, 0x9a, 0x5d, 0xf3, 0xcd, 0x8a, 0x0c, 0xae, 0x3e, 0x34, 0x1f, 0x22, 0x75, 0xfa, 0xae, 0xe3, 0xe3, 0xe3, 0x17, 0x37, 0xe7, 0xe9, 0xc7, 0xe7, 0x48, 0x45, 0x65, 0x1f, 0x4f, 0x83, 0x9c, 0x9d, 0x08, 0xda, 0x6b, 0xfd, 0x00, 0xf2, 0xc2, 0xb9, 0xc6, 0xed, 0x9a, 0xcb, 0x78, 0xd1, 0x11, 0x75, 0xfa, 0x6d, 0xed, 0x7a, 0xb9, 0x5d, 0xbb, 0x2b, 0xfe, 0xf1, 0x8f, 0xeb, 0x14, 0x9b, 0xc9, 0x4f, 0x6d, 0xe0, 0x5a, 0x20, 0x52, 0x21, 0xba, 0x04, 0x06, 0xc9, 0x6f, 0x63, 0x97, 0x2a, 0xef, 0xec, 0x1b, 0xee, 0xf0, 0x30, 0x13, 0x70, 0x11, 0xe6, 0x79, 0x6a, 0xf2, 0xe4, 0xeb, 0xaa, 0x10, 0x01, 0x50, 0xd5, 0x8c, 0xaf, 0x40, 0x82, 0x17, 0xac, 0xb1, 0x18, 0x3a, 0x1a, 0x46, 0xe0, 0x63, 0x68, 0xcf, 0xf6, 0xfd, 0x74, 0x4d, 0xa7, 0x01, 0x9e, 0x7c, 0xa1, 0x09, 0xac, 0xf1, 0x24, 0x4a, 0x76, 0x3c, 0xc2, 0xb2, 0x18, 0x6f, 0x49, 0x27, 0x2b, 0xa3, 0xae, 0x04, 0x25, 0xf2, 0xeb, 0xcd, 0x30, 0xe7, 0x7e, 0x9f, 0x7c, 0x95, 0x7a }; /* K = 0bc8f6e0b01bcb55a4d134c967f3a9411737103d400a33a968f9036292d6e3bd */ static const uint8_t ac_dsa_vect187_out[] = { /* R */ 0xe7, 0x14, 0x5c, 0x70, 0xe0, 0x03, 0x8a, 0xe7, 0xe7, 0xd9, 0x01, 0xb4, 0x88, 0x28, 0xb0, 0xb8, 0xbc, 0x96, 0x0c, 0xc4, 0xfa, 0x29, 0xa5, 0x2e, 0x11, 0xff, 0xc9, 0xab, 0x08, 0xee, 0xe7, 0x26, /* S */ 0xb9, 0xc5, 0x4e, 0xf6, 0xcb, 0x3e, 0x1b, 0x04, 0x98, 0x95, 0x22, 0x99, 0xd1, 0x46, 0x5e, 0xd2, 0xc5, 0xd4, 0xe6, 0x70, 0xcd, 0xfd, 0x25, 0x06, 0x46, 0x24, 0x66, 0xc3, 0xb0, 0xfc, 0xc5, 0x38 }; #define ac_dsa_vect188_prime ac_dsa_vect181_prime #define ac_dsa_vect188_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect188_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect188_ptx[] = { /* Msg */ 0x98, 0xff, 0xb2, 0x89, 0x9f, 0x17, 0xc8, 0x0a, 0x83, 0xe8, 0x2c, 0xa6, 0x26, 0x5e, 0x6f, 0x36, 0x17, 0x33, 0xa6, 0xbb, 0xc6, 0x3c, 0xdf, 0x88, 0x80, 0xdc, 0x75, 0x6b, 0xc7, 0x68, 0xb3, 0x5b, 0x90, 0xdb, 0x73, 0x90, 0xcf, 0xff, 0x74, 0x5e, 0xc1, 0xb5, 0x6f, 0x16, 0x55, 0xd8, 0xd9, 0xa2, 0x9a, 0x6e, 0x8a, 0x63, 0xbe, 0x0b, 0x1b, 0x2f, 0x9a, 0xa7, 0x43, 0x62, 0x09, 0xa1, 0xfa, 0x06, 0x1a, 0x7a, 0xec, 0x28, 0x62, 0x2c, 0x47, 0x2b, 0x3d, 0x02, 0x85, 0xa7, 0x01, 0x65, 0x5a, 0x49, 0x65, 0x46, 0xe8, 0x91, 0xa8, 0xab, 0x29, 0xd9, 0xf4, 0x0d, 0x2e, 0x74, 0x8d, 0x0a, 0xa2, 0xba, 0xbc, 0x06, 0xcf, 0xca, 0x64, 0x1b, 0x30, 0x0b, 0x7a, 0x21, 0x9c, 0xaa, 0x9e, 0x5b, 0xae, 0x3b, 0xf6, 0x89, 0xf6, 0x05, 0x67, 0xf9, 0x22, 0xe7, 0x79, 0x6f, 0xe4, 0x7b, 0xb7, 0x2f, 0xfb, 0x64 }; static const uint8_t ac_dsa_vect188_priv_val[] = { /* X */ 0x79, 0x88, 0x5f, 0xf1, 0x12, 0xbd, 0xb3, 0x26, 0x57, 0x7a, 0xbf, 0x52, 0xdb, 0x67, 0x78, 0x47, 0x68, 0x74, 0x2b, 0x36, 0xe5, 0x75, 0xf0, 0x6b, 0x8d, 0x1e, 0x4f, 0x0d, 0x2d, 0x49, 0xa3, 0xa3 }; static const uint8_t ac_dsa_vect188_pub_val[] = { /* Y */ 0x14, 0x11, 0x1d, 0xca, 0x30, 0xc0, 0x13, 0x87, 0x61, 0xfd, 0x2f, 0x55, 0x97, 0x2b, 0x98, 0x46, 0x04, 0x1e, 0x5c, 0xa8, 0xb9, 0xbc, 0x6b, 0x2d, 0xc8, 0x20, 0xf2, 0xa2, 0xf5, 0x10, 0x0a, 0xba, 0xab, 0x33, 0x7c, 0x7e, 0x0d, 0x1b, 0xc5, 0x9d, 0xe5, 0xae, 0x58, 0x6b, 0xbd, 0xcf, 0x4d, 0x4b, 0x14, 0xaa, 0x23, 0xbe, 0x40, 0x09, 0x52, 0x93, 0x12, 0x3b, 0xad, 0xbb, 0x11, 0x91, 0x9b, 0x78, 0xcd, 0x64, 0x12, 0x54, 0x8d, 0x9f, 0x9d, 0x15, 0xf6, 0x14, 0xb6, 0x92, 0x87, 0x13, 0x34, 0x41, 0x48, 0xfd, 0x7d, 0x30, 0x98, 0x5f, 0xd2, 0xc5, 0x09, 0xb4, 0x4d, 0x39, 0x6c, 0x56, 0x72, 0xa0, 0x82, 0xde, 0x41, 0x83, 0xfe, 0xe0, 0x3e, 0x45, 0xa9, 0x0e, 0xef, 0x6a, 0x08, 0xb0, 0xd9, 0xd4, 0x71, 0x32, 0xc8, 0x2a, 0x2c, 0xcf, 0xef, 0x05, 0xe2, 0xad, 0x0f, 0x34, 0x0d, 0xcc, 0x06, 0xd9, 0xe2, 0xe9, 0x79, 0xec, 0xc4, 0x38, 0x44, 0xc6, 0x05, 0x4e, 0x4f, 0xa5, 0xfb, 0x8a, 0x73, 0xa1, 0xe3, 0x87, 0x3f, 0x21, 0x45, 0xb0, 0xfd, 0x40, 0xf3, 0xec, 0x79, 0x46, 0xf1, 0xf4, 0x3d, 0xe8, 0xb8, 0x05, 0x7c, 0x1b, 0xe5, 0xbf, 0x04, 0x63, 0x0a, 0x12, 0x45, 0x3d, 0x62, 0x3c, 0x9b, 0x8d, 0x9f, 0x0e, 0x30, 0xc8, 0x8c, 0x30, 0x43, 0x42, 0x15, 0xd4, 0x8f, 0x77, 0x34, 0x8e, 0x6b, 0x04, 0x7f, 0x16, 0x93, 0x4e, 0xa0, 0x97, 0x43, 0xdd, 0x3b, 0x00, 0x9c, 0xeb, 0xc4, 0x9d, 0xbc, 0x3a, 0x3d, 0x35, 0x67, 0xc3, 0x32, 0x15, 0x55, 0xec, 0x96, 0xb2, 0x16, 0x0c, 0xaf, 0x78, 0x70, 0x97, 0x0a, 0xc3, 0xcd, 0x82, 0x94, 0x47, 0x7a, 0x06, 0x43, 0xad, 0x52, 0xc2, 0x3d, 0x9d, 0x98, 0x7d, 0xbf, 0xff, 0x64, 0xae, 0xd1, 0xa8, 0x83, 0xc3, 0x0a, 0x49, 0xf1, 0x4f, 0xf0, 0x62, 0x00, 0x95 }; /* K = 13ab2945ab2a40067a93ed8c1a4b305182cb070022b79a56740238e55b07e8a2 */ static const uint8_t ac_dsa_vect188_out[] = { /* R */ 0x45, 0x51, 0xb0, 0x96, 0x44, 0x6d, 0xb6, 0x76, 0x1b, 0x70, 0x8f, 0x35, 0x20, 0x9e, 0xdb, 0x91, 0xcc, 0x51, 0xee, 0x4e, 0xf9, 0x6a, 0x74, 0x95, 0x40, 0x7a, 0xb4, 0x16, 0x7a, 0x05, 0xc7, 0x91, /* S */ 0xcf, 0xe4, 0xc5, 0x8b, 0xdb, 0xf6, 0x1c, 0xaf, 0x09, 0xa4, 0x2a, 0xdb, 0x1a, 0xa5, 0xd9, 0x8b, 0x4c, 0x45, 0x9c, 0x01, 0x12, 0xc5, 0x78, 0x23, 0xbc, 0x15, 0xb5, 0xb9, 0x90, 0xd9, 0x2f, 0xf1 }; #define ac_dsa_vect189_prime ac_dsa_vect181_prime #define ac_dsa_vect189_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect189_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect189_ptx[] = { /* Msg */ 0x58, 0x98, 0xcc, 0x0b, 0x42, 0x2b, 0xb8, 0x9f, 0x06, 0x6d, 0xab, 0xbd, 0x30, 0xf5, 0x9e, 0x9a, 0x35, 0xa3, 0x92, 0xbd, 0xd7, 0xad, 0x31, 0x5e, 0xc8, 0xad, 0x32, 0xb8, 0xf0, 0xf3, 0xd0, 0x28, 0x64, 0xe7, 0x0e, 0xa3, 0x6e, 0x90, 0x76, 0xc3, 0x95, 0xf0, 0xba, 0x9d, 0xe1, 0xab, 0x60, 0x80, 0xdf, 0x3c, 0xf4, 0xa1, 0x47, 0x0e, 0x2b, 0x99, 0x90, 0xb8, 0xe7, 0x61, 0x4b, 0xb8, 0x31, 0x2b, 0x07, 0x5c, 0x0b, 0x2a, 0x13, 0x2d, 0x7e, 0x47, 0xde, 0xd9, 0xe4, 0xc0, 0xa1, 0x36, 0x84, 0x55, 0xb9, 0xd1, 0xa6, 0x7b, 0xc4, 0x4a, 0xf2, 0xf3, 0x74, 0x28, 0xf4, 0x8f, 0x7e, 0x08, 0x9a, 0xb4, 0x1d, 0x04, 0x63, 0x78, 0xb6, 0xd4, 0x8d, 0x9c, 0xb1, 0x35, 0xee, 0xe4, 0x57, 0x40, 0x72, 0xab, 0xea, 0x93, 0xbd, 0xa7, 0xeb, 0x4f, 0x15, 0xa2, 0x06, 0xcd, 0xaf, 0x3b, 0xbb, 0xeb, 0xd3, 0x18 }; static const uint8_t ac_dsa_vect189_priv_val[] = { /* X */ 0x41, 0x66, 0x34, 0xf9, 0xb7, 0x72, 0x21, 0x88, 0xc2, 0xa5, 0x26, 0x6c, 0xfd, 0x9b, 0xaf, 0x1b, 0xdd, 0x50, 0x8c, 0x0c, 0x06, 0x80, 0x10, 0xfb, 0x22, 0x8c, 0x09, 0x9f, 0xca, 0x7c, 0xec, 0x11 }; static const uint8_t ac_dsa_vect189_pub_val[] = { /* Y */ 0x76, 0x6d, 0x7e, 0x4f, 0x8b, 0xc3, 0x25, 0x4d, 0x92, 0xcf, 0x6a, 0x64, 0xab, 0xd5, 0x04, 0xd0, 0x1c, 0xdc, 0xf6, 0xc2, 0x39, 0x17, 0x8b, 0x0a, 0xeb, 0x3f, 0x69, 0xc9, 0xbf, 0x20, 0x2b, 0xff, 0x75, 0x66, 0xec, 0xa0, 0x9f, 0x29, 0xcf, 0x5d, 0x6f, 0xa4, 0x73, 0x6d, 0x57, 0xc0, 0x82, 0x05, 0x50, 0x0d, 0x64, 0x83, 0x36, 0x40, 0x9d, 0xf0, 0x6e, 0x7f, 0x2c, 0xf9, 0x91, 0x78, 0xb2, 0x0a, 0x7e, 0xc2, 0xb5, 0x12, 0x4b, 0xcf, 0xfc, 0x61, 0xad, 0xb6, 0x6f, 0x6f, 0xaf, 0xc5, 0x1e, 0x32, 0x52, 0x1d, 0xea, 0x21, 0x24, 0xe5, 0x78, 0x1c, 0x38, 0x3b, 0x11, 0x6d, 0x06, 0xa6, 0xa6, 0xe8, 0x9d, 0xec, 0x46, 0xb5, 0xe4, 0xad, 0x69, 0xf5, 0xa1, 0xe8, 0xdd, 0x7a, 0xc5, 0xe1, 0x60, 0xda, 0x33, 0x6c, 0x11, 0x86, 0x0b, 0x60, 0x1e, 0x7e, 0x6d, 0x58, 0x89, 0x5e, 0x67, 0x97, 0xdb, 0x5a, 0xa9, 0x2d, 0xeb, 0x7b, 0x94, 0x2f, 0x2e, 0xdf, 0x58, 0xd4, 0x3d, 0x3d, 0xac, 0x92, 0x09, 0x55, 0x7a, 0x6a, 0xa0, 0x7b, 0x22, 0x8e, 0x73, 0xa8, 0x0f, 0xf0, 0xe9, 0x2e, 0x4e, 0xc4, 0x60, 0x3d, 0x36, 0x2e, 0x1c, 0xca, 0x7e, 0x92, 0x8d, 0x94, 0x59, 0xc2, 0x14, 0x05, 0xaa, 0x0f, 0x65, 0x48, 0x73, 0x2c, 0x0f, 0xc5, 0x01, 0xce, 0x50, 0xf0, 0x89, 0x6f, 0x07, 0x63, 0xf6, 0x33, 0xc8, 0xc1, 0xa8, 0x53, 0x13, 0x21, 0xe1, 0xa0, 0xf4, 0x71, 0x34, 0xa0, 0xd2, 0xd8, 0x67, 0x6f, 0x45, 0xf1, 0x3e, 0xa5, 0x76, 0xe6, 0x4c, 0x78, 0x70, 0x02, 0x80, 0x33, 0xa4, 0x26, 0x1b, 0xdf, 0xce, 0xc9, 0x48, 0xeb, 0xb1, 0xaa, 0x25, 0xb0, 0x21, 0x34, 0xd0, 0x25, 0x9d, 0x73, 0x02, 0x4a, 0x01, 0xda, 0x0c, 0xad, 0x1c, 0xe6, 0x75, 0x71, 0xe3, 0x69, 0x63, 0xdc, 0x13, 0x04, 0x96, 0x16, 0x0e, 0xbf }; /* K = b057bf5a5ae4204f941ff5a01560cbc29033dc6a2e06ad168403cbc6512646df */ static const uint8_t ac_dsa_vect189_out[] = { /* R */ 0xa2, 0x37, 0xd2, 0xc3, 0xd2, 0x37, 0x06, 0xca, 0xf0, 0x04, 0xa2, 0xe9, 0x4d, 0xe2, 0x9f, 0x04, 0xc7, 0x48, 0x93, 0x6b, 0x62, 0xab, 0x54, 0x31, 0xfe, 0x73, 0xc7, 0x24, 0x85, 0x81, 0x42, 0x65, /* S */ 0xb4, 0x8b, 0x9e, 0xf9, 0xcb, 0xd8, 0xbd, 0xf7, 0x99, 0xb7, 0x06, 0x05, 0xf0, 0x05, 0x50, 0xb8, 0x1b, 0x30, 0x9c, 0x15, 0x73, 0x32, 0x15, 0x3b, 0xe9, 0x70, 0x7a, 0x39, 0x9f, 0xbd, 0xd6, 0x7f }; #define ac_dsa_vect190_prime ac_dsa_vect181_prime #define ac_dsa_vect190_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect190_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect190_ptx[] = { /* Msg */ 0x04, 0x18, 0xe0, 0x12, 0x36, 0xca, 0xed, 0x0f, 0x80, 0x24, 0x1c, 0xe8, 0xc6, 0x30, 0x7d, 0x02, 0x6f, 0x5e, 0x25, 0xf4, 0xa9, 0x22, 0xbb, 0xdb, 0x4a, 0xaf, 0xb8, 0xd9, 0xdb, 0x95, 0xa1, 0x81, 0x75, 0xf9, 0xdc, 0xea, 0x9a, 0xcb, 0x4d, 0x37, 0x6f, 0x36, 0xff, 0x7b, 0x7c, 0xb5, 0x98, 0xe0, 0x73, 0xde, 0x95, 0xad, 0x20, 0x12, 0xeb, 0x9d, 0x11, 0xe1, 0x5c, 0xb3, 0x94, 0x1c, 0x6d, 0xd0, 0xdd, 0x69, 0x42, 0x2e, 0x78, 0x51, 0x2e, 0xbf, 0xfb, 0x19, 0xcc, 0x8a, 0x40, 0x3a, 0x9a, 0x7d, 0x1f, 0x17, 0x20, 0xab, 0x0f, 0x2d, 0x25, 0x62, 0x75, 0x80, 0x36, 0x60, 0x93, 0xe2, 0x1a, 0xc1, 0x53, 0x7f, 0x93, 0xde, 0x90, 0xa9, 0x45, 0x08, 0xf1, 0xd7, 0xa7, 0xa1, 0xdb, 0x5a, 0x7b, 0x13, 0xc9, 0xfd, 0x00, 0xb8, 0x2b, 0xe0, 0x44, 0xc3, 0xa3, 0x5e, 0xc0, 0x45, 0x1c, 0x30, 0x9b, 0x82 }; static const uint8_t ac_dsa_vect190_priv_val[] = { /* X */ 0x6a, 0xd9, 0x29, 0x11, 0xdd, 0x4f, 0xce, 0x03, 0x3d, 0x7a, 0x50, 0x87, 0x5e, 0x46, 0x60, 0xbe, 0x08, 0xc4, 0x49, 0x57, 0xb8, 0x74, 0x33, 0x9c, 0x2a, 0x70, 0xd9, 0x15, 0xcc, 0x03, 0xe2, 0x7f }; static const uint8_t ac_dsa_vect190_pub_val[] = { /* Y */ 0x4c, 0xf4, 0xce, 0xe4, 0xd5, 0xab, 0xc2, 0xc9, 0x2d, 0xb5, 0x22, 0x92, 0x8b, 0x6d, 0x7e, 0x43, 0x6e, 0xa0, 0x08, 0x84, 0x00, 0x94, 0x97, 0xed, 0x58, 0x8e, 0x93, 0x28, 0x1c, 0xf0, 0x5b, 0x37, 0x47, 0xca, 0x00, 0x48, 0xb9, 0x17, 0x70, 0x82, 0x79, 0xcd, 0x02, 0x77, 0xce, 0x85, 0x60, 0xc2, 0x27, 0x75, 0xd2, 0xaa, 0x0e, 0x7e, 0xed, 0x1b, 0xba, 0x77, 0xbe, 0x45, 0x41, 0x7f, 0xa7, 0xaf, 0xd7, 0x76, 0xb8, 0xe5, 0x60, 0x67, 0x9c, 0x49, 0x3a, 0x52, 0x0a, 0x0e, 0x62, 0x6a, 0xcd, 0xc8, 0x3d, 0xf0, 0x21, 0x35, 0x16, 0x69, 0xbd, 0xf9, 0xda, 0x19, 0xb1, 0x2b, 0xef, 0x29, 0x26, 0xb5, 0x25, 0xfa, 0x4c, 0x8e, 0x3d, 0x1f, 0x20, 0x83, 0xea, 0x6b, 0xbb, 0x48, 0x98, 0x80, 0xf5, 0x94, 0xe6, 0x79, 0x34, 0xd1, 0xf3, 0x55, 0x81, 0xad, 0x18, 0xe0, 0xdb, 0x46, 0x2a, 0x1a, 0xc9, 0x44, 0x06, 0x6c, 0x65, 0xdd, 0x74, 0x3f, 0x35, 0x74, 0x1c, 0x6c, 0xf5, 0x88, 0x91, 0x8d, 0x83, 0x36, 0x70, 0x23, 0x29, 0xc6, 0x21, 0x13, 0xe9, 0x48, 0x6b, 0xfa, 0x49, 0xca, 0x54, 0x25, 0x91, 0x45, 0x26, 0xa9, 0x65, 0xe3, 0xc1, 0x97, 0x58, 0x24, 0xf4, 0xb3, 0x9f, 0xa5, 0xfe, 0xf8, 0x9c, 0xf6, 0xf9, 0xea, 0x51, 0x2f, 0x7f, 0xfc, 0x91, 0x38, 0xe7, 0x2d, 0xbd, 0x0f, 0x71, 0xb0, 0x1a, 0x70, 0x97, 0x53, 0x12, 0xea, 0xca, 0xb1, 0x11, 0x18, 0x47, 0x11, 0x15, 0xee, 0x3f, 0xc8, 0x10, 0x52, 0x29, 0x36, 0xc9, 0xdf, 0x35, 0x97, 0x75, 0x09, 0xb1, 0x96, 0xd8, 0x67, 0xfa, 0x11, 0xf6, 0x07, 0xb7, 0xef, 0x9a, 0xb7, 0x8c, 0xb7, 0x48, 0x21, 0x3a, 0x67, 0x63, 0x43, 0x9c, 0xe5, 0xe7, 0x64, 0x1b, 0x05, 0x35, 0x96, 0x70, 0x61, 0x22, 0x03, 0xa4, 0x7d, 0x4d, 0xe9, 0xc5, 0x38, 0x84, 0x05 }; /* K = 5aed2d19239189cd0bc8cfa3c329748c0555d8eafd5e80ff931966680e3ea454 */ static const uint8_t ac_dsa_vect190_out[] = { /* R */ 0x83, 0xee, 0x96, 0x0e, 0x6f, 0x90, 0x26, 0xfe, 0x24, 0x54, 0xd8, 0x59, 0x46, 0x2a, 0xc3, 0x34, 0xa1, 0x38, 0x96, 0xe7, 0x51, 0x79, 0x85, 0x8e, 0xf4, 0x0e, 0x2e, 0x9a, 0x06, 0x5c, 0x53, 0x6a, /* S */ 0x7c, 0xe8, 0x69, 0x9c, 0x6c, 0xcb, 0x18, 0x4d, 0x42, 0x40, 0xb8, 0x70, 0x9d, 0xa1, 0x14, 0x51, 0x32, 0x8c, 0xf1, 0xa7, 0xe0, 0xca, 0xfe, 0x6e, 0x1c, 0x8a, 0xb5, 0x3d, 0x7d, 0xe6, 0x7d, 0x9e }; #define ac_dsa_vect191_prime ac_dsa_vect181_prime #define ac_dsa_vect191_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect191_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect191_ptx[] = { /* Msg */ 0x92, 0xc9, 0x49, 0xfe, 0x23, 0x42, 0xf9, 0x1a, 0x38, 0x7b, 0x67, 0xc1, 0xb1, 0x2b, 0x1d, 0x04, 0xd0, 0x72, 0x12, 0x03, 0xca, 0xed, 0x59, 0x3c, 0x9c, 0x46, 0x4e, 0x5f, 0xda, 0x09, 0xfd, 0xcc, 0x91, 0xd3, 0x32, 0x1d, 0x29, 0x85, 0xee, 0xc0, 0x8a, 0xb2, 0x02, 0x6d, 0x1e, 0xc3, 0xfc, 0xfa, 0x83, 0x8c, 0xb6, 0xaf, 0x45, 0x29, 0x0c, 0x08, 0xdc, 0x30, 0xb9, 0xc1, 0x4c, 0x44, 0x45, 0xd7, 0x83, 0xb6, 0xf4, 0x84, 0x09, 0xa0, 0x04, 0x90, 0xf4, 0xe3, 0x08, 0xdb, 0xc8, 0x7f, 0xd1, 0xb2, 0xf8, 0x78, 0x38, 0x52, 0x12, 0xe1, 0xf4, 0xc3, 0xe1, 0xcf, 0x81, 0xc5, 0x6d, 0x71, 0xe7, 0x3f, 0xd7, 0xa0, 0x95, 0xb5, 0x6b, 0x4a, 0xbe, 0xc1, 0x5c, 0x57, 0x10, 0x74, 0x20, 0xfb, 0xdf, 0xa4, 0x44, 0x77, 0x07, 0x8c, 0xcf, 0x45, 0x19, 0xf9, 0xf6, 0x04, 0x4f, 0x07, 0x44, 0x05, 0x20, 0x35 }; static const uint8_t ac_dsa_vect191_priv_val[] = { /* X */ 0xb0, 0xd2, 0x3a, 0xab, 0x4d, 0x95, 0x44, 0x6f, 0x8c, 0x6c, 0x5d, 0x49, 0x6d, 0x47, 0x7d, 0xd9, 0x48, 0x6f, 0x50, 0xb2, 0x82, 0x7f, 0x7c, 0xd1, 0x97, 0x28, 0xbc, 0x96, 0xf8, 0x28, 0x40, 0xc7 }; static const uint8_t ac_dsa_vect191_pub_val[] = { /* Y */ 0x25, 0x6d, 0x23, 0x1a, 0xc2, 0xba, 0xe6, 0x50, 0xd2, 0x59, 0x99, 0xb2, 0x70, 0x6d, 0x4c, 0xb6, 0x3a, 0x89, 0xb1, 0x46, 0x8e, 0x0d, 0xf3, 0x6d, 0x67, 0x75, 0x35, 0xfa, 0x7a, 0x0e, 0xa8, 0x90, 0x59, 0x0d, 0x32, 0x90, 0xd4, 0xb5, 0x0b, 0xdb, 0x39, 0x9f, 0x33, 0xdc, 0x41, 0x5e, 0x44, 0x69, 0xc9, 0x7c, 0x6c, 0x0c, 0xee, 0x82, 0x05, 0xee, 0xc9, 0x62, 0xd7, 0x15, 0x3c, 0x4c, 0x85, 0xab, 0x88, 0xf7, 0xcf, 0x80, 0x97, 0x9d, 0x4a, 0x1f, 0xfd, 0x8c, 0x74, 0xe6, 0x81, 0xc1, 0xd2, 0x8d, 0xa0, 0x77, 0x32, 0x11, 0x6c, 0x32, 0x10, 0xee, 0x4b, 0x69, 0x33, 0x09, 0x33, 0x36, 0x86, 0x24, 0x6d, 0x66, 0x70, 0x74, 0xc7, 0x17, 0x20, 0x35, 0xfd, 0x60, 0x91, 0xb2, 0x84, 0x0b, 0x11, 0x39, 0x70, 0xb4, 0x59, 0x83, 0xd4, 0x74, 0xf5, 0x4b, 0x95, 0xd2, 0x63, 0x94, 0xb7, 0xa4, 0x3e, 0x81, 0xb4, 0x49, 0xa2, 0xee, 0x94, 0x23, 0xaa, 0x1c, 0x27, 0xf4, 0x59, 0x2b, 0x51, 0x6c, 0x12, 0xd5, 0x43, 0x3e, 0x2b, 0xa7, 0x24, 0xf5, 0x46, 0x3b, 0x41, 0x69, 0xa2, 0xb0, 0x94, 0x0e, 0x1b, 0xcc, 0xd6, 0x0c, 0xca, 0xb9, 0xb5, 0xa3, 0x82, 0x48, 0xac, 0xb6, 0x05, 0x82, 0xab, 0x8b, 0xbc, 0x01, 0xc5, 0xe7, 0x5f, 0x9e, 0xf7, 0x47, 0x42, 0x73, 0xfb, 0x51, 0xaa, 0x63, 0x16, 0xe6, 0x49, 0xf4, 0xf2, 0x24, 0x52, 0xdc, 0x70, 0xbf, 0xd4, 0xc3, 0xda, 0x07, 0x2c, 0x03, 0xea, 0x82, 0xee, 0x00, 0x9d, 0x42, 0x72, 0xa8, 0x49, 0x61, 0xc9, 0x8e, 0x51, 0x7a, 0xb9, 0x47, 0x74, 0x1d, 0x81, 0x21, 0x16, 0x01, 0x1d, 0xec, 0x03, 0x73, 0xca, 0x8f, 0xba, 0xc5, 0x57, 0x6c, 0x20, 0x69, 0xb0, 0x67, 0xf8, 0xb0, 0x05, 0xd6, 0x0a, 0x36, 0xec, 0xa4, 0x4f, 0x56, 0x01, 0x9a, 0x64, 0x83, 0x5d, 0x76 }; /* K = 17a199bd383a84e22029fb90d5abc9a8a7ccd3f0a33720ca80e3161971793526 */ static const uint8_t ac_dsa_vect191_out[] = { /* R */ 0x84, 0xca, 0xce, 0x71, 0xa8, 0x0e, 0xd4, 0x74, 0x94, 0x57, 0x0f, 0xc8, 0x48, 0x39, 0xf2, 0xe3, 0x50, 0x19, 0x1b, 0x74, 0xf0, 0xee, 0xff, 0xf2, 0xd7, 0xab, 0x2c, 0x68, 0x9d, 0xb7, 0x7b, 0xae, /* S */ 0x9c, 0xac, 0x33, 0x59, 0x4e, 0x19, 0x34, 0xb6, 0x8f, 0x62, 0xac, 0xa0, 0x5c, 0xa0, 0x40, 0xf3, 0xc8, 0x21, 0x10, 0xc1, 0x0b, 0x73, 0x79, 0x87, 0x8b, 0x78, 0x94, 0xb0, 0x91, 0x9a, 0x0f, 0x2f }; #define ac_dsa_vect192_prime ac_dsa_vect181_prime #define ac_dsa_vect192_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect192_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect192_ptx[] = { /* Msg */ 0xdf, 0x6a, 0x4e, 0xb7, 0xca, 0xd4, 0xff, 0x9b, 0xdd, 0x83, 0x56, 0xd3, 0x56, 0x8f, 0xcf, 0x02, 0x85, 0xc1, 0xa4, 0xe3, 0xc3, 0x10, 0x9f, 0xaa, 0x09, 0x1b, 0x58, 0xa9, 0xbd, 0x90, 0x7c, 0x62, 0x9d, 0x54, 0xaa, 0x7a, 0x23, 0xa7, 0x48, 0x70, 0x54, 0x5a, 0x09, 0x42, 0xa2, 0xd2, 0x39, 0x14, 0xf2, 0xf1, 0x67, 0xd9, 0x65, 0x73, 0xf0, 0x6f, 0x35, 0xea, 0x05, 0xef, 0x70, 0x4c, 0xac, 0x80, 0x14, 0xdd, 0x21, 0xb9, 0x61, 0xd3, 0xda, 0xcf, 0x7b, 0x93, 0x0b, 0xbd, 0x7e, 0x35, 0x55, 0x0f, 0x72, 0x10, 0x94, 0xc8, 0x63, 0x33, 0xe0, 0x3e, 0xd4, 0xda, 0xb7, 0xbc, 0x1b, 0x64, 0x16, 0xad, 0xd9, 0x57, 0x8d, 0x27, 0x9e, 0xda, 0xee, 0x37, 0x50, 0x4f, 0xd2, 0x5e, 0xc0, 0xc5, 0xe8, 0xa3, 0x7a, 0xc9, 0xec, 0x19, 0xbf, 0xb1, 0xe3, 0x77, 0x8e, 0xd6, 0xd9, 0xc6, 0xb6, 0xe3, 0x5e, 0xc7 }; static const uint8_t ac_dsa_vect192_priv_val[] = { /* X */ 0x67, 0x9e, 0xf4, 0x8b, 0x64, 0x3b, 0xe3, 0x94, 0x67, 0x7d, 0x17, 0xe8, 0x37, 0xa0, 0xbe, 0x6d, 0x4d, 0x80, 0x27, 0xa9, 0x00, 0xb6, 0x86, 0xae, 0xd7, 0xc4, 0xb1, 0x26, 0x34, 0xfe, 0xa7, 0x6a }; static const uint8_t ac_dsa_vect192_pub_val[] = { /* Y */ 0x2f, 0x4b, 0x0c, 0x01, 0xe4, 0xb1, 0x5e, 0xb5, 0xee, 0x7a, 0xfa, 0x98, 0x24, 0x09, 0x33, 0x30, 0x73, 0x8b, 0xe2, 0xf3, 0xf0, 0x6c, 0x42, 0xb2, 0xb7, 0xc6, 0x96, 0x8f, 0xa5, 0x4b, 0x98, 0x7c, 0x18, 0x4e, 0x7f, 0xa8, 0x9e, 0xff, 0x16, 0xda, 0x02, 0xb9, 0x3f, 0xf6, 0x1b, 0x9c, 0xe4, 0x8e, 0xeb, 0xe7, 0xea, 0xb0, 0xf7, 0xe2, 0x03, 0xad, 0x11, 0xc7, 0x1e, 0x7b, 0x29, 0x7d, 0x23, 0xf2, 0xd5, 0xa5, 0x99, 0x82, 0x72, 0xc3, 0x0c, 0x2e, 0x17, 0x24, 0xb5, 0xe9, 0x63, 0xbf, 0xd6, 0xf8, 0x32, 0x39, 0xf8, 0x74, 0xd8, 0x8e, 0xa0, 0x89, 0x43, 0x5b, 0x89, 0x6d, 0xd2, 0x10, 0x9b, 0x6a, 0x14, 0xb2, 0xd8, 0x48, 0xf9, 0xed, 0x7e, 0x92, 0x14, 0x3c, 0x06, 0x49, 0xf9, 0x7f, 0x4f, 0x2e, 0xb0, 0x5b, 0x8c, 0x5a, 0x07, 0xe9, 0x9e, 0x49, 0x7d, 0xbc, 0x75, 0x2d, 0x44, 0x3e, 0xba, 0x93, 0xd7, 0xf3, 0xdc, 0xdc, 0x32, 0x40, 0xa2, 0x71, 0x4e, 0xa0, 0xe3, 0xe7, 0x62, 0x7f, 0x21, 0x6e, 0x47, 0x01, 0x14, 0x8d, 0xd2, 0x11, 0x92, 0xf2, 0x74, 0xf1, 0xed, 0x5d, 0xf0, 0x5c, 0x60, 0xb1, 0x57, 0x6d, 0x3a, 0x0b, 0x7f, 0x69, 0xa7, 0x76, 0xb5, 0x01, 0x04, 0x04, 0xac, 0xd5, 0xaf, 0xaf, 0xd3, 0xd7, 0x0f, 0x57, 0x76, 0x3f, 0x2b, 0x77, 0x8d, 0x0c, 0x36, 0x1e, 0x5f, 0x7f, 0x0b, 0xbe, 0x17, 0xaa, 0xfa, 0xa5, 0xcd, 0x39, 0x33, 0x29, 0x17, 0x1d, 0x06, 0xec, 0x03, 0x20, 0x39, 0xa9, 0xff, 0xb3, 0x7c, 0x3a, 0xb8, 0xcd, 0x85, 0x8e, 0xa7, 0x88, 0xa7, 0xb9, 0xf5, 0x01, 0x99, 0x6b, 0xaf, 0x95, 0x9c, 0xa8, 0x5c, 0x7d, 0xaf, 0xe0, 0xcd, 0x3e, 0x30, 0x95, 0x76, 0x40, 0xef, 0xf1, 0x05, 0x89, 0x4c, 0x43, 0xf8, 0x66, 0xbc, 0xc4, 0x22, 0x69, 0x8d, 0x12, 0x8d, 0xca, 0x08, 0x87 }; /* K = 3cf9da6f182bade870946d3ed3b078208ea8153c45515d64f589bca72b703ebf */ static const uint8_t ac_dsa_vect192_out[] = { /* R */ 0x1d, 0xd2, 0xda, 0xea, 0xf3, 0xe8, 0x9f, 0xd6, 0x44, 0xc6, 0xcc, 0x94, 0x23, 0x11, 0xea, 0x50, 0x56, 0x41, 0x3d, 0x8a, 0x24, 0x08, 0x77, 0x87, 0x67, 0x5c, 0xef, 0xfd, 0x3d, 0x6c, 0x15, 0xe4, /* S */ 0x3e, 0x12, 0x78, 0x13, 0x96, 0x55, 0x85, 0x60, 0x45, 0x5c, 0x4e, 0x70, 0xf6, 0x10, 0x52, 0x2a, 0xb2, 0xb1, 0x0f, 0xc2, 0x53, 0x43, 0x29, 0x68, 0x18, 0xef, 0x7f, 0xfb, 0x03, 0x78, 0xfa, 0x47 }; #define ac_dsa_vect193_prime ac_dsa_vect181_prime #define ac_dsa_vect193_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect193_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect193_ptx[] = { /* Msg */ 0x4f, 0x16, 0x68, 0x1e, 0xaa, 0x5d, 0x97, 0x67, 0x3a, 0x7c, 0xca, 0x02, 0xee, 0x8a, 0x73, 0x74, 0xb7, 0x54, 0x11, 0xe0, 0xb5, 0x70, 0x4a, 0x94, 0x7f, 0x04, 0xd1, 0xa5, 0xb1, 0x4b, 0xe0, 0xb5, 0x06, 0xf3, 0x1c, 0x2f, 0xa3, 0x29, 0xe3, 0xca, 0x51, 0x6f, 0xa4, 0xf1, 0x62, 0x6a, 0x9b, 0x5e, 0x08, 0x0b, 0xda, 0x7f, 0x35, 0x3f, 0x85, 0x03, 0x65, 0xea, 0xc7, 0xc3, 0xd2, 0x59, 0x6f, 0x50, 0x2a, 0x5d, 0x70, 0xb1, 0x54, 0x22, 0x76, 0xc1, 0x2d, 0x4e, 0xa4, 0xa2, 0x2b, 0x53, 0x25, 0xb9, 0xeb, 0x3e, 0x94, 0x2e, 0x55, 0x67, 0x69, 0xb7, 0x96, 0xc4, 0xf5, 0x24, 0x59, 0x5f, 0x1c, 0xc6, 0xce, 0x17, 0xf9, 0x9f, 0x9d, 0xbf, 0x51, 0x33, 0x14, 0x53, 0x22, 0x8e, 0xad, 0x32, 0x7b, 0x61, 0x4f, 0x44, 0x38, 0xd3, 0x5d, 0x61, 0x42, 0x84, 0x29, 0xf7, 0x8c, 0x8c, 0x93, 0x77, 0xaa, 0xaa }; static const uint8_t ac_dsa_vect193_priv_val[] = { /* X */ 0xe0, 0xe5, 0x76, 0x43, 0x29, 0x13, 0xbc, 0x75, 0xa2, 0xe0, 0xde, 0x3b, 0x33, 0xbf, 0x30, 0x94, 0x14, 0x82, 0x98, 0x61, 0x2a, 0x9d, 0xc5, 0x6f, 0xed, 0xd4, 0x7a, 0xa5, 0x69, 0xaf, 0x8a, 0xc8 }; static const uint8_t ac_dsa_vect193_pub_val[] = { /* Y */ 0x2e, 0x33, 0x60, 0x4e, 0xd9, 0xe6, 0xc0, 0xf1, 0xba, 0x40, 0x3a, 0x8c, 0x3c, 0x3f, 0xe8, 0xe8, 0xf4, 0x88, 0x59, 0x18, 0x13, 0xaa, 0x3d, 0x2f, 0xcc, 0xcd, 0xf8, 0x8f, 0xe8, 0x08, 0xf7, 0x0a, 0xdf, 0x17, 0x3f, 0x0f, 0x14, 0x3a, 0xbd, 0xaa, 0xd4, 0x3b, 0x80, 0x76, 0x9e, 0x30, 0xff, 0xc5, 0x74, 0x9e, 0x8a, 0xd3, 0x59, 0x99, 0x95, 0x3d, 0xef, 0xf4, 0xf6, 0x1f, 0x4c, 0xa0, 0x73, 0x13, 0x60, 0x9e, 0x23, 0xac, 0xae, 0x7b, 0x35, 0xf7, 0x79, 0x34, 0xfd, 0xbb, 0xe1, 0xc3, 0x80, 0xb2, 0x72, 0x7b, 0x1c, 0x38, 0x99, 0x25, 0x0a, 0xf5, 0xb4, 0x39, 0x9b, 0x65, 0x8b, 0x79, 0x08, 0x67, 0x6d, 0x64, 0xd1, 0x17, 0x63, 0x78, 0x53, 0x73, 0xb2, 0x16, 0x98, 0x36, 0x61, 0x1d, 0x72, 0xa9, 0x57, 0x31, 0x99, 0x36, 0xc8, 0x4e, 0xfd, 0x72, 0xb7, 0x2f, 0x92, 0xbd, 0xd2, 0xdb, 0xe0, 0x00, 0x0d, 0x88, 0x41, 0xab, 0x6d, 0x8d, 0x0d, 0x66, 0x6e, 0x79, 0x36, 0x1a, 0xbb, 0x23, 0xb6, 0x00, 0x73, 0x48, 0xdb, 0xbe, 0x7a, 0x94, 0x93, 0x6d, 0xc6, 0xb0, 0x26, 0xf3, 0xb7, 0x10, 0x00, 0x81, 0xf5, 0x47, 0xb9, 0x94, 0xe0, 0xe0, 0x77, 0x8c, 0xb7, 0x61, 0xeb, 0xd4, 0x3a, 0x29, 0xd8, 0x76, 0x4c, 0x7f, 0x96, 0x2a, 0x74, 0x7e, 0xcc, 0x92, 0xe4, 0xa2, 0xa6, 0x28, 0xf5, 0x2d, 0x8a, 0xbf, 0x43, 0xf6, 0xe3, 0x27, 0x8a, 0x0d, 0x32, 0xea, 0x67, 0xc2, 0xd7, 0x9d, 0x04, 0xc8, 0x33, 0x87, 0xdd, 0xc7, 0x09, 0x36, 0x5c, 0x0a, 0x0b, 0xac, 0xc8, 0x3d, 0x75, 0xc9, 0x46, 0xe2, 0x83, 0xe0, 0x73, 0x92, 0x33, 0x58, 0x14, 0x41, 0xae, 0xdd, 0xb0, 0xd7, 0xd7, 0x65, 0x03, 0xd6, 0x21, 0x40, 0x5d, 0x27, 0xef, 0x66, 0xfa, 0x8b, 0x53, 0x79, 0xd1, 0x78, 0x61, 0x7d, 0x4b, 0xb5, 0xad, 0x59 }; /* K = 53cb2d046b391193efb14a4dfafa296c2ec92293c7b3c7d19a20e68c4a1141d9 */ static const uint8_t ac_dsa_vect193_out[] = { /* R */ 0xe2, 0xff, 0x3f, 0xc4, 0x41, 0xdb, 0x45, 0x40, 0x19, 0x4a, 0x7f, 0x5d, 0xa1, 0xea, 0xd8, 0x49, 0xc2, 0xc3, 0xc4, 0x8d, 0xcc, 0xf8, 0xb2, 0xc1, 0xb3, 0xb3, 0x59, 0xa7, 0xb1, 0x6e, 0x16, 0xab, /* S */ 0x52, 0xfb, 0xdc, 0xd5, 0xc6, 0x2a, 0x99, 0x9a, 0xab, 0x46, 0x14, 0x7f, 0xef, 0x9e, 0x18, 0xcb, 0xfc, 0x7d, 0xaf, 0x68, 0x0a, 0x7d, 0xdb, 0x89, 0x2e, 0xdf, 0xa4, 0x4d, 0x28, 0x5e, 0x21, 0x58 }; #define ac_dsa_vect194_prime ac_dsa_vect181_prime #define ac_dsa_vect194_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect194_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect194_ptx[] = { /* Msg */ 0x09, 0xe4, 0x8a, 0x36, 0x52, 0x3b, 0x52, 0x89, 0xec, 0x41, 0x85, 0x9f, 0xaa, 0x14, 0x1e, 0x2a, 0x29, 0xb3, 0xe8, 0x8a, 0xb2, 0xd6, 0x35, 0x1e, 0x20, 0xde, 0x00, 0x1e, 0x64, 0x24, 0xb8, 0x53, 0x37, 0x67, 0x5f, 0x0c, 0xe2, 0x6b, 0xe2, 0x24, 0xfa, 0x4f, 0x8d, 0xf0, 0xef, 0x97, 0x10, 0xea, 0x28, 0x56, 0x35, 0xb2, 0x7b, 0x29, 0x7d, 0x68, 0x8e, 0x33, 0x8b, 0x54, 0x61, 0x82, 0x0b, 0x57, 0xbe, 0x4b, 0xee, 0x21, 0x64, 0x5b, 0x04, 0x95, 0x7c, 0xa2, 0xf6, 0xcd, 0x7a, 0xf9, 0xa6, 0xa5, 0x2b, 0x3c, 0x97, 0xc5, 0xb9, 0xdb, 0x1c, 0x2f, 0x7e, 0xa8, 0x17, 0xcd, 0x6d, 0x3c, 0x85, 0x22, 0xd4, 0xe6, 0xa9, 0xde, 0x86, 0x9a, 0xef, 0x26, 0xec, 0x0d, 0xbd, 0xd2, 0x69, 0xc7, 0x9b, 0x38, 0x80, 0x69, 0x27, 0xbd, 0x3a, 0x51, 0x00, 0x73, 0x5e, 0x6f, 0x9f, 0x65, 0x5c, 0xa9, 0x4d, 0xae }; static const uint8_t ac_dsa_vect194_priv_val[] = { /* X */ 0x78, 0x91, 0xb0, 0x5e, 0x24, 0x82, 0x3f, 0x28, 0x31, 0x26, 0xd7, 0xd1, 0x75, 0xa4, 0xe8, 0xc8, 0x12, 0x4b, 0x37, 0x76, 0xf4, 0xf2, 0x96, 0xd0, 0xff, 0xc4, 0xb5, 0xe2, 0x1b, 0xb6, 0x4d, 0x70 }; static const uint8_t ac_dsa_vect194_pub_val[] = { /* Y */ 0x7e, 0x38, 0xcb, 0x66, 0x8d, 0x64, 0x7e, 0xe1, 0x5f, 0x71, 0xac, 0x5d, 0x2b, 0x55, 0xc1, 0x1f, 0xd4, 0x73, 0x1e, 0x1a, 0x6c, 0x03, 0x1d, 0xd7, 0x59, 0x4d, 0x61, 0x4f, 0x2f, 0x1e, 0xd2, 0x56, 0x23, 0xff, 0xfd, 0xc5, 0x95, 0x6f, 0x52, 0x56, 0xe6, 0x35, 0xc9, 0x14, 0x20, 0x5a, 0x29, 0x37, 0xa6, 0x07, 0x4c, 0xfe, 0x1f, 0x3e, 0x44, 0x3b, 0xbe, 0xb3, 0x23, 0xa2, 0x3b, 0x0f, 0x0f, 0xbc, 0xcf, 0x8c, 0x17, 0x70, 0xad, 0x18, 0xba, 0x97, 0xd0, 0xac, 0xbe, 0xa1, 0xe8, 0x46, 0xe1, 0x2c, 0xf1, 0x2c, 0x37, 0x06, 0x25, 0xb1, 0x55, 0x5d, 0x71, 0x09, 0x05, 0xee, 0xe9, 0x43, 0x53, 0x9f, 0x22, 0x41, 0xb8, 0xfb, 0x49, 0x0c, 0x9d, 0x6b, 0x44, 0xf3, 0x61, 0x39, 0x22, 0x6b, 0x4c, 0x1f, 0x00, 0xe9, 0x5f, 0xfe, 0x59, 0x50, 0x14, 0xf6, 0x1b, 0xf5, 0x79, 0x83, 0x6a, 0x14, 0x21, 0x2c, 0x07, 0x23, 0x1a, 0x5e, 0x9e, 0x87, 0xde, 0x4a, 0x9a, 0xaf, 0x0f, 0x46, 0xf3, 0x4c, 0x92, 0x29, 0xf2, 0xea, 0xbb, 0x71, 0xd4, 0x0d, 0xe2, 0x6a, 0x1c, 0xbe, 0x10, 0xdb, 0x06, 0x45, 0xce, 0xc3, 0x7d, 0x48, 0x57, 0x5a, 0x11, 0x54, 0xbb, 0x5a, 0xcc, 0x94, 0x7b, 0xec, 0xb2, 0xa7, 0x4b, 0x07, 0xe2, 0xa0, 0xe4, 0x5b, 0x90, 0x3b, 0xe3, 0x75, 0x02, 0xf9, 0x1b, 0x07, 0xfb, 0x4e, 0xcd, 0x7f, 0x21, 0xfb, 0x13, 0x0c, 0x6d, 0x63, 0x9e, 0xf0, 0xfd, 0x84, 0x44, 0xfa, 0x12, 0xde, 0x85, 0x9a, 0xbe, 0x95, 0x54, 0x88, 0x01, 0xf6, 0xa3, 0xc4, 0x0e, 0x7a, 0x65, 0xfd, 0x15, 0x18, 0x22, 0x1a, 0x27, 0x4d, 0x7b, 0x65, 0xed, 0x41, 0x75, 0xf6, 0x6c, 0x04, 0xd9, 0x19, 0xc8, 0x6d, 0x2a, 0xe8, 0xc3, 0x74, 0xb1, 0x47, 0x09, 0xe9, 0xc8, 0xa3, 0x9e, 0x1d, 0x0c, 0x4e, 0x99, 0x35, 0x54, 0x0b }; /* K = dc24b379ee2d26d5db792839795ad0d4b9622c0e3fd518df541a5f6e9cefba0f */ static const uint8_t ac_dsa_vect194_out[] = { /* R */ 0xe5, 0x50, 0xdc, 0x65, 0xaf, 0x27, 0x5e, 0x47, 0xbe, 0x48, 0x0f, 0xd6, 0x47, 0x36, 0x6e, 0x2b, 0x05, 0x5c, 0x79, 0xea, 0x33, 0xde, 0xd4, 0xf5, 0xa9, 0x55, 0x71, 0x21, 0xe0, 0x82, 0xaf, 0x26, /* S */ 0xe2, 0x6b, 0x1a, 0x5f, 0x27, 0xcc, 0x6c, 0x87, 0x86, 0x3e, 0x31, 0xef, 0x7f, 0x1e, 0x61, 0xbe, 0xa4, 0x76, 0xfc, 0x5d, 0x7c, 0x25, 0xfd, 0xf2, 0x2f, 0xe7, 0x40, 0xf2, 0x3a, 0xa9, 0xa7, 0x52 }; #define ac_dsa_vect195_prime ac_dsa_vect181_prime #define ac_dsa_vect195_sub_prime ac_dsa_vect181_sub_prime #define ac_dsa_vect195_base ac_dsa_vect181_base static const uint8_t ac_dsa_vect195_ptx[] = { /* Msg */ 0x88, 0x37, 0xbb, 0xce, 0xef, 0x57, 0x75, 0x11, 0xf2, 0xd0, 0xc0, 0x8f, 0x79, 0x0d, 0x5d, 0x2e, 0x85, 0x62, 0xd9, 0x3d, 0xf3, 0xd8, 0x2d, 0xd4, 0xc2, 0x82, 0x7c, 0xd9, 0xa9, 0x11, 0x53, 0x08, 0x11, 0x4a, 0x18, 0xc4, 0x52, 0xdb, 0x27, 0x85, 0x56, 0x10, 0x81, 0xeb, 0x52, 0x36, 0x85, 0xae, 0x2b, 0x3c, 0x8b, 0x09, 0x0e, 0x0d, 0x44, 0xdd, 0x40, 0xd2, 0xfc, 0x0c, 0xdf, 0xc8, 0x8d, 0x6f, 0x90, 0x63, 0xa7, 0x70, 0x7d, 0xf6, 0x09, 0xed, 0xf0, 0xa8, 0xc5, 0x50, 0x34, 0x81, 0x5e, 0xa9, 0xf1, 0xd8, 0xb0, 0xbc, 0xbc, 0x92, 0xfb, 0xa5, 0x13, 0xba, 0x81, 0xee, 0x64, 0x6b, 0xf9, 0x8a, 0xd4, 0xeb, 0x22, 0xbe, 0x26, 0xa4, 0x58, 0x2b, 0x1b, 0xe2, 0x89, 0x9c, 0x91, 0xee, 0xbc, 0xbc, 0x9f, 0xba, 0x58, 0x25, 0xe0, 0x21, 0xe9, 0x9b, 0xe0, 0xc9, 0xd2, 0x86, 0x42, 0xd1, 0x3f, 0xa4 }; static const uint8_t ac_dsa_vect195_priv_val[] = { /* X */ 0x11, 0x6d, 0x18, 0x36, 0xa1, 0x31, 0x31, 0x06, 0x44, 0xaa, 0xae, 0xe6, 0xac, 0x39, 0xb3, 0x64, 0x3c, 0xd5, 0x00, 0x26, 0xa6, 0xb4, 0x86, 0x16, 0x7c, 0xb4, 0xda, 0xac, 0x24, 0x2a, 0x4e, 0x7a }; static const uint8_t ac_dsa_vect195_pub_val[] = { /* Y */ 0x77, 0xd7, 0xa4, 0x0a, 0x7b, 0xab, 0x3f, 0x57, 0x78, 0xf8, 0x5d, 0x4f, 0xc4, 0x8b, 0x3e, 0x28, 0xce, 0x28, 0xb2, 0xdf, 0x9e, 0xb8, 0x7c, 0xc9, 0xcf, 0x39, 0x4e, 0xf2, 0x8e, 0x80, 0x64, 0xf3, 0x9a, 0x96, 0x90, 0x10, 0x39, 0x80, 0xa6, 0x6d, 0xa2, 0x19, 0xcb, 0x50, 0x22, 0xc1, 0x01, 0xf2, 0x20, 0x11, 0xa8, 0x15, 0x7a, 0x75, 0x68, 0xc5, 0xff, 0x2e, 0x97, 0x8b, 0xa2, 0x20, 0x13, 0x67, 0xd1, 0x7c, 0x22, 0xa8, 0x67, 0x86, 0x5d, 0x00, 0xc2, 0xa4, 0x37, 0x38, 0x56, 0x27, 0xbd, 0x08, 0x8b, 0xfc, 0xf7, 0x21, 0x92, 0x51, 0xbf, 0x6a, 0xe1, 0x58, 0x26, 0x9f, 0x4e, 0xf3, 0x5d, 0xa7, 0x09, 0x5a, 0x53, 0xc2, 0x4f, 0x37, 0xd6, 0x1b, 0xcf, 0xb7, 0xc0, 0x43, 0xfe, 0xb6, 0xe9, 0x38, 0x32, 0x34, 0x3f, 0x9e, 0x90, 0xee, 0x71, 0x04, 0xc8, 0x04, 0x86, 0xec, 0xd0, 0x87, 0xbe, 0x1b, 0x67, 0xf1, 0x8c, 0xda, 0xaa, 0x37, 0x5e, 0x03, 0x9c, 0xb7, 0xad, 0x60, 0x3c, 0xb0, 0xcd, 0x85, 0x56, 0x23, 0xe9, 0xfb, 0x48, 0xe4, 0xee, 0xde, 0x14, 0xea, 0x3c, 0x76, 0xa0, 0x36, 0x4a, 0xac, 0x00, 0x66, 0x50, 0xd3, 0xb5, 0xcd, 0x9b, 0x47, 0x4b, 0x56, 0xf8, 0x58, 0x4b, 0xe5, 0x8a, 0x72, 0x1b, 0xf3, 0x4d, 0xd0, 0x80, 0x8d, 0x33, 0x4c, 0xd8, 0x63, 0x2e, 0x80, 0x85, 0x36, 0x79, 0x1f, 0xcb, 0xea, 0x96, 0x1f, 0x71, 0x63, 0xda, 0xd2, 0x83, 0x53, 0xc1, 0x15, 0xeb, 0x3e, 0x85, 0x67, 0x37, 0xdb, 0xbe, 0xe0, 0x34, 0x36, 0x72, 0x16, 0x37, 0xa4, 0x77, 0x54, 0xa8, 0xa1, 0xfe, 0x0f, 0xed, 0xf5, 0x47, 0xb3, 0x58, 0xa7, 0x3d, 0x05, 0xb7, 0x69, 0xa9, 0x5b, 0xde, 0x34, 0x40, 0x00, 0x7c, 0x07, 0x73, 0xa3, 0xc7, 0xc8, 0xdc, 0x97, 0x14, 0xe1, 0x1c, 0x3a, 0x10, 0xee, 0x01, 0xd7 }; /* K = 4a6febb624c8ebd411cfb30c6db055dec3d0d17456dc0c54bd1b43531d4f2649 */ static const uint8_t ac_dsa_vect195_out[] = { /* R */ 0x7b, 0x6b, 0x3e, 0xae, 0xf6, 0xcd, 0x5f, 0xe6, 0xda, 0xed, 0xe8, 0x6d, 0x63, 0x94, 0x34, 0x78, 0xc7, 0x71, 0x58, 0x24, 0x83, 0xbe, 0x0b, 0x92, 0x6e, 0xe3, 0x02, 0x2d, 0x22, 0xef, 0x91, 0x2e, /* S */ 0x39, 0xd9, 0x28, 0xb5, 0x9a, 0x69, 0x04, 0x50, 0xd1, 0x33, 0x59, 0xa2, 0x9e, 0xfe, 0x20, 0xcb, 0x98, 0xbf, 0xd3, 0xfc, 0x97, 0x26, 0xf8, 0x0e, 0x51, 0x48, 0xf0, 0x59, 0x66, 0x3f, 0xfd, 0x08 }; /* [mod = L=2048, N=256, SHA-384] */ static const uint8_t ac_dsa_vect196_prime[] = { /* P */ 0xa6, 0x16, 0x7c, 0x16, 0xff, 0xf7, 0x4e, 0x29, 0x34, 0x2b, 0x85, 0x86, 0xae, 0xd3, 0xcd, 0x89, 0x6f, 0x7b, 0x16, 0x35, 0xa2, 0x28, 0x6f, 0xf1, 0x6f, 0xdf, 0xf4, 0x1a, 0x06, 0x31, 0x7c, 0xa6, 0xb0, 0x5c, 0xa2, 0xba, 0x7c, 0x06, 0x0a, 0xd6, 0xdb, 0x15, 0x61, 0x62, 0x1c, 0xcb, 0x0c, 0x40, 0xb8, 0x6a, 0x03, 0x61, 0x9b, 0xff, 0xf3, 0x2e, 0x20, 0x4c, 0xbd, 0x90, 0xb7, 0x9d, 0xcb, 0x5f, 0x86, 0xeb, 0xb4, 0x93, 0xe3, 0xbd, 0x19, 0x88, 0xd8, 0x09, 0x7f, 0xa2, 0x3f, 0xa4, 0xd7, 0x8f, 0xb3, 0xcd, 0xdc, 0xb0, 0x0c, 0x46, 0x64, 0x23, 0xd8, 0xfa, 0x71, 0x98, 0x73, 0xc3, 0x76, 0x45, 0xfe, 0x4e, 0xec, 0xc5, 0x71, 0x71, 0xbb, 0xed, 0xfe, 0x56, 0xfa, 0x94, 0x74, 0xc9, 0x63, 0x85, 0xb8, 0xba, 0x37, 0x8c, 0x79, 0x97, 0x2d, 0x7a, 0xaa, 0xe6, 0x9a, 0x2b, 0xa6, 0x4c, 0xde, 0x8e, 0x56, 0x54, 0xf0, 0xf7, 0xb7, 0x45, 0x50, 0xcd, 0x34, 0x47, 0xe7, 0xa4, 0x72, 0xa3, 0x3b, 0x40, 0x37, 0xdb, 0x46, 0x8d, 0xde, 0x31, 0xc3, 0x48, 0xaa, 0x25, 0xe8, 0x2b, 0x7f, 0xc4, 0x1b, 0x83, 0x7f, 0x7f, 0xc2, 0x26, 0xa6, 0x10, 0x39, 0x66, 0xec, 0xd8, 0xf9, 0xd1, 0x4c, 0x2d, 0x31, 0x49, 0x55, 0x6d, 0x43, 0x82, 0x9f, 0x13, 0x74, 0x51, 0xb8, 0xd2, 0x0f, 0x85, 0x20, 0xb0, 0xce, 0x8e, 0x3d, 0x70, 0x5f, 0x74, 0xd0, 0xa5, 0x7e, 0xa8, 0x72, 0xc2, 0xbd, 0xee, 0x97, 0x14, 0xe0, 0xb6, 0x39, 0x06, 0xcd, 0xdf, 0xdc, 0x28, 0xb6, 0x77, 0x7d, 0x19, 0x32, 0x50, 0x00, 0xf8, 0xed, 0x52, 0x78, 0xec, 0x5d, 0x91, 0x2d, 0x10, 0x21, 0x09, 0x31, 0x9c, 0xba, 0x3b, 0x64, 0x69, 0xd4, 0x67, 0x29, 0x09, 0xb4, 0xf0, 0xdb, 0xee, 0xc0, 0xbb, 0xb6, 0x34, 0xb5, 0x51, 0xba, 0x0c, 0xf2, 0x13 }; static const uint8_t ac_dsa_vect196_sub_prime[] = { /* Q */ 0x84, 0x27, 0x52, 0x90, 0x44, 0xd2, 0x14, 0xc0, 0x75, 0x74, 0xf7, 0xb3, 0x59, 0xc2, 0xe0, 0x1c, 0x23, 0xfd, 0x97, 0x70, 0x1b, 0x32, 0x8a, 0xc8, 0xc1, 0x38, 0x5b, 0x81, 0xc5, 0x37, 0x38, 0x95 }; static const uint8_t ac_dsa_vect196_base[] = { /* G */ 0x6f, 0xc2, 0x32, 0x41, 0x5c, 0x31, 0x20, 0x0c, 0xf5, 0x23, 0xaf, 0x34, 0x83, 0xf8, 0xe2, 0x6a, 0xce, 0x80, 0x8d, 0x2f, 0x1c, 0x6a, 0x8b, 0x86, 0x3a, 0xb0, 0x42, 0xcc, 0x7f, 0x6b, 0x71, 0x44, 0xb2, 0xd3, 0x94, 0x72, 0xc3, 0xcb, 0x4c, 0x76, 0x81, 0xd0, 0x73, 0x28, 0x43, 0x50, 0x3d, 0x8f, 0x85, 0x8c, 0xbe, 0x47, 0x6e, 0x67, 0x40, 0x32, 0x4a, 0xaa, 0x29, 0x59, 0x50, 0x10, 0x59, 0x78, 0xc3, 0x35, 0x06, 0x9b, 0x91, 0x9f, 0xf9, 0xa6, 0xff, 0x4b, 0x41, 0x05, 0x81, 0xb8, 0x07, 0x12, 0xfe, 0x5d, 0x3e, 0x04, 0xdd, 0xb4, 0xdf, 0xd2, 0x6d, 0x5e, 0x7f, 0xbc, 0xa2, 0xb0, 0xc5, 0x2d, 0x8d, 0x40, 0x43, 0x43, 0xd5, 0x7b, 0x2f, 0x9b, 0x2a, 0x26, 0xda, 0xa7, 0xec, 0xe3, 0x0c, 0xea, 0xb9, 0xe1, 0x78, 0x9f, 0x97, 0x51, 0xaa, 0xa9, 0x38, 0x70, 0x49, 0x96, 0x5a, 0xf3, 0x26, 0x50, 0xc6, 0xca, 0x5b, 0x37, 0x4a, 0x5a, 0xe7, 0x0b, 0x3f, 0x98, 0xe0, 0x53, 0xf5, 0x18, 0x57, 0xd6, 0xbb, 0xb1, 0x7a, 0x67, 0x0e, 0x6e, 0xaa, 0xf8, 0x98, 0x44, 0xd6, 0x41, 0xe1, 0xe1, 0x3d, 0x5a, 0x1b, 0x24, 0xd0, 0x53, 0xdc, 0x6b, 0x8f, 0xd1, 0x01, 0xc6, 0x24, 0x78, 0x69, 0x51, 0x92, 0x7e, 0x42, 0x63, 0x10, 0xab, 0xa9, 0x49, 0x8a, 0x00, 0x42, 0xb3, 0xdc, 0x7b, 0xbc, 0x59, 0xd7, 0x05, 0xf8, 0x0d, 0x9b, 0x80, 0x7d, 0xe4, 0x15, 0xf7, 0xe9, 0x4c, 0x5c, 0xf9, 0xd7, 0x89, 0x99, 0x2d, 0x3b, 0xb8, 0x33, 0x6d, 0x1d, 0x80, 0x8c, 0xb8, 0x6b, 0x56, 0xdd, 0xe0, 0x9d, 0x93, 0x4b, 0xb5, 0x27, 0x03, 0x39, 0x22, 0xde, 0x14, 0xbf, 0x30, 0x73, 0x76, 0xab, 0x7d, 0x22, 0xfb, 0xcd, 0x61, 0x6f, 0x9e, 0xda, 0x47, 0x9a, 0xb2, 0x14, 0xa1, 0x78, 0x50, 0xbd, 0xd0, 0x80, 0x2a, 0x87, 0x1c }; static const uint8_t ac_dsa_vect196_ptx[] = { /* Msg */ 0x8c, 0x78, 0xcf, 0xfd, 0xcf, 0x25, 0xd8, 0x23, 0x0b, 0x83, 0x5b, 0x30, 0x51, 0x26, 0x84, 0xc9, 0xb2, 0x52, 0x11, 0x58, 0x70, 0xb6, 0x03, 0xd1, 0xb4, 0xba, 0x2e, 0xb5, 0xd3, 0x5b, 0x33, 0xf2, 0x6d, 0x96, 0xb6, 0x84, 0x12, 0x6e, 0xc3, 0x4f, 0xff, 0x67, 0xdf, 0xe5, 0xc8, 0xc8, 0x56, 0xac, 0xfe, 0x3a, 0x9f, 0xf4, 0x5a, 0xe1, 0x1d, 0x41, 0x5f, 0x30, 0x44, 0x9b, 0xcd, 0xc3, 0xbf, 0x9a, 0x9f, 0xb5, 0xa7, 0xe4, 0x8a, 0xfe, 0xab, 0xa6, 0xd0, 0xb0, 0xfc, 0x9b, 0xce, 0x01, 0x97, 0xeb, 0x2b, 0xf7, 0xa8, 0x40, 0x24, 0x9d, 0x4e, 0x55, 0x0c, 0x5a, 0x25, 0xdc, 0x1c, 0x71, 0x37, 0x0e, 0x67, 0x93, 0x3e, 0xda, 0xd2, 0x36, 0x2f, 0xae, 0x6f, 0xad, 0x1e, 0xfb, 0xa5, 0xc0, 0x8d, 0xc1, 0x93, 0x1c, 0xa2, 0x84, 0x1b, 0x44, 0xb7, 0x8c, 0x0c, 0x63, 0xa1, 0x66, 0x5f, 0xfa, 0xc8, 0x60 }; static const uint8_t ac_dsa_vect196_priv_val[] = { /* X */ 0x45, 0x9e, 0xb1, 0x58, 0x8e, 0x9f, 0x7d, 0xd4, 0xf2, 0x86, 0x67, 0x7a, 0x74, 0x15, 0xcb, 0x25, 0xa1, 0xb4, 0x6e, 0x7a, 0x7c, 0xfa, 0xdc, 0x8a, 0x45, 0x10, 0x03, 0x83, 0xe2, 0x0d, 0xa6, 0x9d }; static const uint8_t ac_dsa_vect196_pub_val[] = { /* Y */ 0x5c, 0xa7, 0x15, 0x1b, 0xca, 0x0e, 0x45, 0x7b, 0xbc, 0x46, 0xf5, 0x9f, 0x71, 0xd8, 0x1a, 0xb1, 0x66, 0x88, 0xdc, 0x0e, 0xb7, 0xe4, 0xd1, 0x7b, 0x16, 0x6c, 0x33, 0x26, 0xc5, 0xb1, 0x2c, 0x5b, 0xde, 0xbb, 0x36, 0x13, 0x22, 0x4d, 0x1a, 0x75, 0x40, 0x23, 0xc5, 0x0b, 0x83, 0xcb, 0x5e, 0xcc, 0x13, 0x90, 0x96, 0xce, 0xf2, 0x89, 0x33, 0xb3, 0xb1, 0x2c, 0xa3, 0x10, 0x38, 0xe4, 0x08, 0x93, 0x83, 0x59, 0x7c, 0x59, 0xcc, 0x27, 0xb9, 0x02, 0xbe, 0x5d, 0xa6, 0x2c, 0xae, 0x7d, 0xa5, 0xf4, 0xaf, 0x90, 0xe9, 0x41, 0x0e, 0xd1, 0x60, 0x40, 0x82, 0xe2, 0xe3, 0x8e, 0x25, 0xeb, 0x0b, 0x78, 0xdf, 0xac, 0x0a, 0xeb, 0x2a, 0xd3, 0xb1, 0x9d, 0xc2, 0x35, 0x39, 0xd2, 0xbc, 0xd7, 0x55, 0xdb, 0x1c, 0xc6, 0xc9, 0x80, 0x5a, 0x7d, 0xd1, 0x09, 0xe1, 0xc9, 0x86, 0x67, 0xa5, 0xb9, 0xd5, 0x2b, 0x21, 0xc2, 0x77, 0x21, 0x21, 0xb8, 0xd0, 0xd2, 0xb2, 0x46, 0xe5, 0xfd, 0x3d, 0xa8, 0x07, 0x28, 0xe8, 0x5b, 0xbf, 0x0d, 0x70, 0x67, 0xd1, 0xc6, 0xba, 0xa6, 0x43, 0x94, 0xa2, 0x9e, 0x7f, 0xcb, 0xf8, 0x08, 0x42, 0xbd, 0x4a, 0xb0, 0x2b, 0x35, 0xd8, 0x3f, 0x59, 0x80, 0x5a, 0x10, 0x4e, 0x0b, 0xd6, 0x9d, 0x00, 0x79, 0xa0, 0x65, 0xf5, 0x9e, 0x3e, 0x6f, 0x21, 0x57, 0x3a, 0x00, 0xda, 0x99, 0x0b, 0x72, 0xea, 0x53, 0x7f, 0xa9, 0x8c, 0xaa, 0xa0, 0xa5, 0x88, 0x00, 0xa7, 0xe7, 0xa0, 0x62, 0x3e, 0x26, 0x3d, 0x4f, 0xca, 0x65, 0xeb, 0xb8, 0xed, 0xed, 0x46, 0xef, 0xdf, 0xe7, 0xdb, 0x92, 0xc9, 0xeb, 0xd3, 0x80, 0x62, 0xd8, 0xf1, 0x25, 0x34, 0xf0, 0x15, 0xb1, 0x86, 0x18, 0x6e, 0xe2, 0x36, 0x1d, 0x62, 0xc2, 0x4e, 0x4f, 0x22, 0xb3, 0xe9, 0x5d, 0xa0, 0xf9, 0x06, 0x2c, 0xe0, 0x4d }; /* K = 2368037a1c7647c683d7e301ac79b7feebc736effe3ab1644b68308b4b28620d */ static const uint8_t ac_dsa_vect196_out[] = { /* R */ 0x4f, 0xd8, 0xf2, 0x5c, 0x05, 0x90, 0x30, 0x02, 0x73, 0x81, 0xd4, 0x16, 0x7c, 0x31, 0x74, 0xb6, 0xbe, 0x00, 0x88, 0xc1, 0x5f, 0x0a, 0x57, 0x3d, 0x7e, 0xbd, 0x05, 0x96, 0x0f, 0x5a, 0x1e, 0xb2, /* S */ 0x5f, 0x56, 0x86, 0x9c, 0xee, 0x7b, 0xf6, 0x4f, 0xec, 0x5d, 0x5d, 0x6e, 0xa1, 0x5b, 0xb1, 0xfa, 0x11, 0x69, 0x00, 0x3a, 0x87, 0xec, 0xcc, 0x16, 0x21, 0xb9, 0x0a, 0x1b, 0x89, 0x22, 0x26, 0xf2 }; #define ac_dsa_vect197_prime ac_dsa_vect196_prime #define ac_dsa_vect197_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect197_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect197_ptx[] = { /* Msg */ 0x02, 0xbb, 0x64, 0xd2, 0xd5, 0x03, 0x2f, 0x54, 0xf1, 0xac, 0x9e, 0x9e, 0xe1, 0x64, 0xdb, 0x83, 0xaf, 0x0c, 0xb0, 0x36, 0xd8, 0x8d, 0x41, 0xe9, 0xb2, 0x11, 0x8c, 0xfc, 0x39, 0xd1, 0xb4, 0xb4, 0xdc, 0x2c, 0x49, 0x75, 0x49, 0xc7, 0x98, 0x2c, 0xca, 0xcf, 0x66, 0x5d, 0x1b, 0x00, 0x11, 0x26, 0x82, 0x46, 0xc7, 0xc1, 0x7f, 0x56, 0x2e, 0xcb, 0xa2, 0x5e, 0x26, 0x54, 0x89, 0x87, 0x3e, 0x0d, 0xd9, 0x26, 0x8e, 0x9b, 0x06, 0x88, 0x0b, 0xa7, 0x4e, 0x74, 0xb5, 0x6f, 0x50, 0xc7, 0x32, 0x4d, 0x29, 0x37, 0x38, 0x53, 0xe3, 0xa0, 0xf3, 0xff, 0x78, 0x7e, 0xba, 0x4e, 0x5e, 0x7f, 0x94, 0x37, 0xf8, 0xec, 0x8a, 0x5e, 0x86, 0x83, 0x24, 0xe9, 0xc1, 0x7f, 0xb3, 0xd0, 0xe1, 0x2d, 0xe2, 0xd3, 0x1d, 0x43, 0x8c, 0x5b, 0xf3, 0x8b, 0x27, 0x16, 0x7d, 0x43, 0xae, 0x43, 0x11, 0xb1, 0x10, 0x62 }; static const uint8_t ac_dsa_vect197_priv_val[] = { /* X */ 0x52, 0x1f, 0x08, 0xc1, 0x07, 0x74, 0x07, 0x7a, 0xc1, 0x5b, 0xc8, 0x5f, 0x2f, 0x6a, 0x03, 0xd8, 0x42, 0x07, 0xb4, 0xed, 0x7b, 0xff, 0xec, 0xc3, 0x5d, 0x73, 0x0c, 0xdd, 0x11, 0x26, 0x87, 0x7f }; static const uint8_t ac_dsa_vect197_pub_val[] = { /* Y */ 0x11, 0xf3, 0xa7, 0x16, 0xfb, 0xda, 0x7a, 0xf3, 0x5b, 0xdb, 0x62, 0xd1, 0x28, 0xaf, 0x6f, 0x21, 0xec, 0x2e, 0xd4, 0x89, 0x6a, 0xa8, 0x1e, 0x87, 0x69, 0xc6, 0xee, 0xa9, 0xc2, 0x1c, 0x81, 0xae, 0xf2, 0x3a, 0xe0, 0xf5, 0x25, 0x26, 0x9d, 0xc4, 0x05, 0xac, 0xce, 0xf0, 0x98, 0x37, 0x7f, 0x65, 0x27, 0x30, 0x96, 0x8a, 0x33, 0xb5, 0x0f, 0x0a, 0x4c, 0x77, 0x84, 0x34, 0x52, 0x80, 0x65, 0x1c, 0xaa, 0x03, 0x4d, 0xf8, 0x73, 0x42, 0xca, 0x89, 0x73, 0xad, 0x86, 0xff, 0x7f, 0x0f, 0x87, 0x73, 0xa9, 0x4f, 0x95, 0xdd, 0x2b, 0xfa, 0x80, 0x2d, 0x26, 0x8d, 0xbf, 0x3a, 0x21, 0x03, 0xb1, 0x27, 0x6e, 0x06, 0xdb, 0x2d, 0x73, 0x43, 0x99, 0xf2, 0xab, 0x7b, 0xdc, 0xca, 0x09, 0x76, 0x16, 0xfc, 0x46, 0xed, 0x24, 0x78, 0xe5, 0x2c, 0xef, 0x04, 0x9d, 0x19, 0x44, 0x45, 0x86, 0xe7, 0xb7, 0x5d, 0x6a, 0x56, 0x74, 0x1d, 0xa2, 0x27, 0x0f, 0x54, 0xd2, 0xc7, 0x39, 0xec, 0x8d, 0xb9, 0x96, 0xc7, 0x1f, 0x06, 0xa3, 0x9a, 0xf2, 0x38, 0x3c, 0x61, 0x14, 0x99, 0xbe, 0x0f, 0xb3, 0x48, 0x09, 0xb1, 0x71, 0x25, 0x4e, 0xf2, 0x73, 0x51, 0x6c, 0x33, 0xe1, 0x7e, 0x14, 0x04, 0x8e, 0xf2, 0xd2, 0x1d, 0x60, 0x0a, 0xa1, 0x53, 0xbc, 0xf7, 0x37, 0x7f, 0xba, 0x94, 0x05, 0xc6, 0xb2, 0xe5, 0xf2, 0xaa, 0xf0, 0xf2, 0xf3, 0x46, 0x7d, 0x74, 0x61, 0xf6, 0x2e, 0x81, 0x4a, 0x2c, 0x46, 0x1e, 0x8a, 0xc9, 0xdb, 0x0d, 0xf3, 0x70, 0xe1, 0x8e, 0xc6, 0xee, 0xd8, 0x21, 0x2a, 0xca, 0xec, 0xf1, 0xe7, 0x24, 0x1b, 0xcb, 0xcb, 0xca, 0x67, 0x10, 0x60, 0xe5, 0x0c, 0x29, 0xf9, 0x66, 0xf1, 0xea, 0x1e, 0x92, 0xaf, 0x69, 0x03, 0xf8, 0x1c, 0x7a, 0xb9, 0xee, 0x09, 0xf6, 0x05, 0x77, 0xbf, 0x30, 0xc1, 0x86 }; /* K = 08b161571ed031152677136b54e87119133f7de56268aec07cba07667b98bcd8 */ static const uint8_t ac_dsa_vect197_out[] = { /* R */ 0x7a, 0x5d, 0x20, 0x16, 0xaf, 0xe8, 0x78, 0x83, 0x49, 0x1b, 0xd6, 0xcd, 0x16, 0x6e, 0xdd, 0xdf, 0x13, 0x8c, 0x1c, 0x89, 0x96, 0x1e, 0x4a, 0xf6, 0x87, 0x6b, 0xe0, 0x8b, 0x0e, 0x06, 0xad, 0x74, /* S */ 0x34, 0xef, 0xbd, 0xa1, 0x84, 0x9d, 0xed, 0xd0, 0xd1, 0xaa, 0x77, 0x5d, 0xab, 0x2a, 0xa2, 0xb1, 0x4c, 0x9b, 0xa0, 0x20, 0x65, 0x92, 0xfb, 0xc3, 0x4e, 0xb4, 0x7b, 0x84, 0x46, 0x46, 0xad, 0xc2 }; #define ac_dsa_vect198_prime ac_dsa_vect196_prime #define ac_dsa_vect198_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect198_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect198_ptx[] = { /* Msg */ 0x4f, 0x1c, 0x00, 0x53, 0x98, 0x4a, 0xb5, 0x5a, 0x49, 0x1f, 0x36, 0x18, 0xdb, 0x1b, 0xe2, 0x37, 0x91, 0x74, 0xa4, 0x38, 0x59, 0x74, 0x82, 0x5f, 0xcb, 0xe5, 0x84, 0xe2, 0xb6, 0xd0, 0x70, 0x2a, 0xbb, 0x82, 0x98, 0xdd, 0x91, 0x84, 0xee, 0xf1, 0x74, 0x0b, 0x90, 0xa5, 0xea, 0xe8, 0x50, 0xe9, 0x45, 0x2b, 0x4e, 0x4a, 0xb2, 0x19, 0xe1, 0x87, 0x86, 0x0f, 0x0f, 0xb4, 0xad, 0x2b, 0xe3, 0x90, 0xef, 0x2b, 0xa7, 0xd7, 0x6c, 0xde, 0xdc, 0xaf, 0x10, 0xae, 0xaf, 0x4f, 0x25, 0xe4, 0x97, 0xb4, 0xda, 0x95, 0x13, 0x75, 0xb6, 0x87, 0xa8, 0xd6, 0x70, 0x12, 0xd3, 0xf9, 0x9c, 0x7b, 0x5c, 0xa8, 0x2e, 0x9b, 0xd0, 0x63, 0x0d, 0xff, 0xcd, 0x63, 0x5e, 0xcd, 0x82, 0x09, 0xcd, 0xdb, 0x87, 0x2d, 0xa5, 0xbf, 0x47, 0x36, 0x30, 0x97, 0x83, 0x34, 0x5a, 0x35, 0x37, 0x6b, 0x4f, 0xce, 0x4b, 0x91 }; static const uint8_t ac_dsa_vect198_priv_val[] = { /* X */ 0x6b, 0xa8, 0xf6, 0x63, 0x83, 0x16, 0xdd, 0x80, 0x4a, 0x24, 0xb7, 0x39, 0x0f, 0x31, 0x02, 0x3c, 0xd8, 0xb2, 0x6e, 0x93, 0x25, 0xbe, 0x90, 0x94, 0x1b, 0x90, 0xd5, 0xfd, 0x31, 0x55, 0x11, 0x5a }; static const uint8_t ac_dsa_vect198_pub_val[] = { /* Y */ 0x10, 0xe6, 0xf5, 0x0f, 0xd6, 0xdb, 0xb1, 0xca, 0x16, 0xf2, 0xdf, 0x51, 0x32, 0xa4, 0xa4, 0xea, 0xbc, 0x51, 0xda, 0x4a, 0x58, 0xfe, 0x61, 0x9b, 0x22, 0x25, 0xd7, 0xad, 0xab, 0x0c, 0xea, 0x3a, 0xfc, 0x2d, 0xb9, 0x0b, 0x15, 0x8b, 0x62, 0x31, 0xc8, 0xb0, 0x77, 0x4e, 0x0f, 0x0d, 0x90, 0x74, 0x51, 0x7f, 0x33, 0x6c, 0xa0, 0x53, 0xae, 0x11, 0x56, 0x71, 0xae, 0xe3, 0xc1, 0xde, 0x0f, 0x85, 0x72, 0x8c, 0xff, 0x99, 0xde, 0xeb, 0xc0, 0x7f, 0xfc, 0x9a, 0x63, 0x63, 0x19, 0x89, 0xa9, 0x27, 0x7e, 0x64, 0xc5, 0x4d, 0x9c, 0x25, 0xa7, 0xe7, 0x39, 0xae, 0x92, 0xf7, 0x06, 0xee, 0x23, 0x7b, 0x98, 0xb8, 0x70, 0x0a, 0x9d, 0xf0, 0xde, 0x12, 0xd2, 0x12, 0x4e, 0x2c, 0xfd, 0x81, 0xd9, 0xec, 0x7b, 0x04, 0x69, 0xee, 0x3a, 0x71, 0x8a, 0xb1, 0x53, 0x05, 0xde, 0x09, 0x9d, 0x9a, 0x2f, 0x8c, 0xec, 0xb7, 0x95, 0x27, 0xd0, 0x16, 0x44, 0x7c, 0x8f, 0x6f, 0xe4, 0x90, 0x5c, 0x37, 0x18, 0xce, 0x52, 0x34, 0xd1, 0x3b, 0xf4, 0xed, 0xd7, 0x16, 0x9b, 0x9d, 0x0d, 0xb9, 0xa6, 0xb0, 0xfc, 0x77, 0xb7, 0xd5, 0x3b, 0xdd, 0x32, 0xb0, 0x7d, 0xc1, 0x5b, 0xc8, 0x29, 0x62, 0x0d, 0xb0, 0x85, 0x11, 0x45, 0x81, 0x60, 0x8a, 0xc9, 0xe0, 0x93, 0x77, 0x52, 0x09, 0x59, 0x51, 0xd2, 0x89, 0x85, 0x5d, 0x0b, 0xcc, 0x9d, 0x42, 0x1b, 0x94, 0x5c, 0xc4, 0xf3, 0x7f, 0x80, 0xb0, 0xcb, 0x25, 0xf1, 0xff, 0xee, 0x9c, 0x61, 0xe5, 0x67, 0xf4, 0x9d, 0x21, 0xf8, 0x89, 0xec, 0xbc, 0x3f, 0x4e, 0xd3, 0x37, 0xbc, 0xa6, 0x66, 0xba, 0x3b, 0xa6, 0x84, 0x87, 0x4c, 0x88, 0x3f, 0xe2, 0x28, 0xac, 0x44, 0x95, 0x2a, 0x85, 0x13, 0xe1, 0x2d, 0x9f, 0x0c, 0x4e, 0xd4, 0x3c, 0x9b, 0x60, 0xf3, 0x52, 0x25, 0xb2 }; /* K = 2a4a4e014c94d8546c62f0db2fd488f5fac03073a11c3760376114ab3201930d */ static const uint8_t ac_dsa_vect198_out[] = { /* R */ 0x00, 0x6b, 0x75, 0x9f, 0xb7, 0x18, 0xc3, 0x4f, 0x1a, 0x6e, 0x51, 0x8f, 0x83, 0x40, 0x53, 0xb9, 0xf1, 0x82, 0x5d, 0xd3, 0xeb, 0x8d, 0x71, 0x94, 0x65, 0xc7, 0xbc, 0xc8, 0x30, 0x32, 0x2f, 0x4b, /* S */ 0x47, 0xfa, 0x59, 0x85, 0x2c, 0x9a, 0xe5, 0xe1, 0x81, 0x38, 0x1e, 0x34, 0x57, 0xa3, 0x3b, 0x25, 0x42, 0x00, 0x11, 0xd6, 0xf9, 0x11, 0xef, 0xa9, 0x0f, 0x3e, 0xac, 0xed, 0x1d, 0xee, 0x13, 0x29 }; #define ac_dsa_vect199_prime ac_dsa_vect196_prime #define ac_dsa_vect199_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect199_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect199_ptx[] = { /* Msg */ 0x42, 0x19, 0x91, 0x86, 0x43, 0x4d, 0x6c, 0x55, 0xbc, 0xef, 0x26, 0x9b, 0xee, 0x68, 0x5c, 0x4e, 0x15, 0x80, 0xe2, 0x43, 0x02, 0x7e, 0xd1, 0x28, 0xca, 0x99, 0x49, 0x20, 0x33, 0xa5, 0x29, 0x54, 0xbd, 0x1c, 0xa8, 0xec, 0xc5, 0x04, 0x38, 0x20, 0x72, 0x5a, 0x3c, 0x0d, 0x71, 0xa1, 0x81, 0xa0, 0x5a, 0xab, 0xcb, 0x4e, 0xcd, 0xa7, 0x18, 0x0d, 0x86, 0x85, 0x5e, 0x7b, 0x4d, 0xfa, 0x9a, 0x44, 0xc7, 0xaf, 0x4c, 0x98, 0xfb, 0xf1, 0xf0, 0x62, 0x40, 0x58, 0x80, 0x4f, 0xd8, 0xea, 0xae, 0x49, 0x90, 0xd4, 0xd7, 0xbb, 0x75, 0xf0, 0x17, 0x41, 0xce, 0x36, 0xcf, 0xc9, 0xc1, 0x37, 0x25, 0x4c, 0xab, 0x06, 0x5a, 0x46, 0x17, 0xd0, 0xd0, 0xcd, 0x5f, 0x58, 0xea, 0x56, 0x86, 0x8a, 0x40, 0xf3, 0xe0, 0xba, 0xf7, 0xdb, 0x5d, 0x25, 0x57, 0xf4, 0xb9, 0x77, 0x5c, 0x18, 0x20, 0xdc, 0x1d, 0x41 }; static const uint8_t ac_dsa_vect199_priv_val[] = { /* X */ 0x46, 0xd6, 0x90, 0xca, 0x6b, 0x9c, 0xc0, 0x1e, 0x9a, 0x8c, 0x7b, 0xfd, 0xed, 0xc5, 0x9a, 0x97, 0xeb, 0xa5, 0x2f, 0x09, 0x7b, 0x8f, 0xdc, 0x19, 0xbc, 0x1f, 0x8c, 0x0a, 0xb5, 0xd4, 0xbf, 0xdb }; static const uint8_t ac_dsa_vect199_pub_val[] = { /* Y */ 0x63, 0x64, 0xa3, 0x5a, 0xe9, 0x94, 0xf2, 0x77, 0x03, 0x31, 0x9c, 0x36, 0xd9, 0x07, 0x93, 0xc8, 0xf2, 0x65, 0x11, 0x84, 0x6b, 0xa0, 0x60, 0x38, 0x99, 0x5b, 0x65, 0x56, 0xe4, 0x44, 0x3a, 0xa6, 0x1e, 0xb0, 0xf8, 0xef, 0xcc, 0x3d, 0x47, 0xf7, 0xc5, 0xf8, 0x52, 0x76, 0xea, 0x92, 0x1d, 0xa0, 0x78, 0x4a, 0x67, 0x99, 0x82, 0x53, 0xc9, 0x92, 0x97, 0x5f, 0x9e, 0x13, 0x84, 0x7c, 0xca, 0xd0, 0x99, 0xd9, 0xc1, 0xe5, 0xc9, 0x4c, 0xfb, 0x19, 0x54, 0x88, 0xe1, 0x29, 0x3e, 0x23, 0xb7, 0x4d, 0xb0, 0x06, 0x03, 0xe8, 0xbd, 0x68, 0x14, 0xc9, 0x46, 0x90, 0xbf, 0x0c, 0xcc, 0xc1, 0xc0, 0xe4, 0x7f, 0x0c, 0x66, 0x09, 0xa4, 0x8e, 0x14, 0x45, 0x87, 0xec, 0xe1, 0x78, 0xf7, 0x2c, 0x85, 0x14, 0xa4, 0x35, 0x90, 0xbc, 0x4c, 0x21, 0x9d, 0xa9, 0x5c, 0xbe, 0x89, 0x66, 0xf4, 0x40, 0x4f, 0xe9, 0xc2, 0x88, 0xf2, 0x3c, 0xd0, 0xf9, 0x73, 0xe7, 0x7e, 0xc8, 0x4b, 0x4b, 0x0f, 0x16, 0x3b, 0x50, 0xa3, 0xc5, 0x56, 0xcd, 0x1d, 0x39, 0x51, 0xfa, 0xeb, 0xd9, 0x82, 0xaf, 0x44, 0x44, 0x7e, 0x60, 0xd7, 0x83, 0x4b, 0x93, 0xb6, 0xd9, 0xc3, 0xff, 0x09, 0x61, 0xfc, 0xcb, 0x90, 0x83, 0x12, 0xa2, 0x43, 0x76, 0xee, 0xdc, 0x50, 0x8f, 0x80, 0x66, 0x68, 0xd6, 0x61, 0x7b, 0x77, 0x49, 0x1a, 0x01, 0xd5, 0xd0, 0x69, 0xd6, 0xcc, 0xd5, 0xf2, 0x1b, 0x5e, 0xb3, 0xc3, 0xa3, 0xd4, 0xa0, 0x47, 0x95, 0x93, 0x84, 0x5c, 0x72, 0xf7, 0x20, 0x15, 0x7b, 0x18, 0x8d, 0x2d, 0xfa, 0xe4, 0x40, 0x1c, 0x57, 0xa6, 0x00, 0xb1, 0x42, 0xb6, 0xbd, 0xe2, 0xa6, 0x9f, 0x1a, 0x0a, 0xfb, 0xa2, 0xf5, 0x07, 0xa6, 0x3c, 0xd6, 0xdf, 0x05, 0x6b, 0xb5, 0xb3, 0x4f, 0xdf, 0xce, 0xe0, 0x12, 0xd3, 0x41, 0xb3, 0xf1 }; /* K = 638e5fd0885f4c9f7e5f4e6a103b2d2d9d1368c493f9822ef431f54e65a7a3be */ static const uint8_t ac_dsa_vect199_out[] = { /* R */ 0x25, 0x51, 0xd4, 0xf8, 0x55, 0x17, 0x4f, 0x7b, 0x28, 0xa7, 0x82, 0xb8, 0x96, 0x97, 0xd4, 0x8f, 0xbc, 0x31, 0x4c, 0xfe, 0xb1, 0x7e, 0xc4, 0xc9, 0x90, 0x2a, 0x8e, 0x55, 0x7c, 0xc6, 0xf6, 0xb9, /* S */ 0x27, 0x8b, 0x78, 0x6f, 0x9e, 0x28, 0xee, 0xcc, 0xd0, 0x05, 0x86, 0xb4, 0x45, 0xe7, 0x5f, 0x48, 0xcf, 0x26, 0x49, 0xf3, 0xf1, 0xb7, 0xbf, 0xf7, 0x2b, 0x0e, 0x76, 0x7f, 0x34, 0x43, 0xdc, 0x58 }; #define ac_dsa_vect200_prime ac_dsa_vect196_prime #define ac_dsa_vect200_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect200_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect200_ptx[] = { /* Msg */ 0x4f, 0xdd, 0x88, 0x87, 0x56, 0xac, 0x68, 0xf4, 0xc2, 0x9c, 0xd5, 0xb1, 0xde, 0x42, 0x75, 0x67, 0x94, 0x57, 0x0c, 0xa8, 0xf1, 0x8f, 0xf7, 0x95, 0xf6, 0xf0, 0xfc, 0x85, 0x67, 0x72, 0xb6, 0xa2, 0x18, 0x9b, 0x5e, 0xd4, 0xa9, 0xb7, 0x54, 0x73, 0x28, 0x07, 0x5b, 0x56, 0xc2, 0x8d, 0xdf, 0x50, 0xb8, 0x4c, 0x27, 0x20, 0x5c, 0xee, 0x57, 0xb2, 0x9d, 0x0b, 0x38, 0x79, 0x70, 0xe8, 0x9a, 0x6a, 0x22, 0x36, 0x29, 0x3b, 0xbc, 0x9e, 0x39, 0x90, 0x13, 0xd1, 0xdd, 0x3b, 0xd5, 0xa1, 0x0a, 0xb0, 0xd2, 0x59, 0xf7, 0xfd, 0xa7, 0x04, 0xf7, 0x1c, 0xbe, 0x3b, 0x8b, 0x87, 0x52, 0x80, 0x6a, 0x0c, 0x84, 0x66, 0x8d, 0x85, 0xe4, 0xd7, 0x39, 0xce, 0xc6, 0x28, 0xdf, 0xf6, 0x33, 0x71, 0xd2, 0x4a, 0x4b, 0x14, 0x13, 0x73, 0x82, 0x75, 0x9b, 0xa4, 0x00, 0xdf, 0x0e, 0x2c, 0x25, 0x94, 0x7d, 0x18 }; static const uint8_t ac_dsa_vect200_priv_val[] = { /* X */ 0x49, 0xda, 0x89, 0xd1, 0x67, 0x37, 0x04, 0xd1, 0xf2, 0x4a, 0xc7, 0xdc, 0x79, 0x9b, 0xf0, 0x06, 0xaa, 0x7d, 0x60, 0x6c, 0x59, 0x0e, 0x5e, 0x37, 0xe3, 0x80, 0x32, 0xec, 0x51, 0xa7, 0x03, 0x76 }; static const uint8_t ac_dsa_vect200_pub_val[] = { /* Y */ 0x5b, 0x61, 0x98, 0x45, 0xba, 0x96, 0x9f, 0x1c, 0xa5, 0x96, 0x3f, 0xcf, 0x04, 0xc0, 0x3a, 0xa4, 0x0e, 0x98, 0x92, 0x22, 0x77, 0x4e, 0x95, 0x7a, 0x54, 0x19, 0x1a, 0xcf, 0x9d, 0xdc, 0x40, 0x7a, 0x54, 0xa1, 0x61, 0xe2, 0x2a, 0x5a, 0xc5, 0x0c, 0xa5, 0xd6, 0x1e, 0x66, 0x01, 0xcc, 0x79, 0x95, 0xbf, 0x0d, 0xb3, 0x8f, 0xf0, 0xfa, 0x1f, 0x77, 0xb2, 0x44, 0xfe, 0x98, 0x14, 0x8c, 0x81, 0xf2, 0x08, 0xdc, 0xa2, 0x9f, 0xfa, 0x30, 0xf1, 0x13, 0x1c, 0x76, 0xdb, 0xbe, 0x43, 0x03, 0x42, 0x5e, 0x91, 0x80, 0xb4, 0xa4, 0x8f, 0x22, 0xc7, 0x57, 0xed, 0x8e, 0x38, 0x8b, 0x61, 0xbd, 0xc6, 0xd5, 0x55, 0x19, 0x52, 0x3d, 0x00, 0xc3, 0x1a, 0x5f, 0x83, 0x76, 0x64, 0x0d, 0x46, 0x88, 0xe6, 0x0d, 0xcc, 0x17, 0x2d, 0xee, 0xce, 0x73, 0xde, 0x28, 0x43, 0x7e, 0x90, 0x0c, 0xb1, 0x9a, 0x53, 0x11, 0xa0, 0xc9, 0xca, 0x9a, 0xf6, 0xcc, 0x6e, 0xeb, 0x68, 0x44, 0xe9, 0xb8, 0x35, 0x9e, 0x3e, 0xf1, 0xcb, 0xe0, 0x37, 0x84, 0x10, 0x7d, 0x2d, 0x0a, 0xeb, 0xec, 0x7c, 0x1d, 0x70, 0xd9, 0x38, 0x5a, 0x4d, 0x2b, 0x80, 0x33, 0x85, 0x1f, 0x5d, 0x5b, 0x7a, 0xa1, 0x8e, 0xf5, 0x70, 0xaa, 0x03, 0x7f, 0xcb, 0xd3, 0xe3, 0x0f, 0x2f, 0xc2, 0x01, 0x3f, 0xfb, 0xfa, 0x07, 0x87, 0xbe, 0x6d, 0x59, 0xff, 0xa1, 0x61, 0x6e, 0xed, 0x5e, 0x12, 0x1e, 0xe4, 0xdb, 0xee, 0x04, 0xa9, 0xed, 0xe0, 0x04, 0x95, 0x60, 0x75, 0x46, 0x5a, 0x76, 0x88, 0x70, 0x1e, 0x04, 0xec, 0x9b, 0x21, 0x53, 0xf5, 0x2c, 0xaf, 0xbf, 0xf7, 0xff, 0x92, 0x26, 0xe6, 0x93, 0x97, 0xc7, 0x08, 0x3c, 0x3a, 0xa5, 0x36, 0xd7, 0x10, 0x9e, 0xe4, 0x30, 0xa6, 0x54, 0x48, 0xb1, 0x0c, 0x18, 0x18, 0xc7, 0x05, 0x10, 0xa3, 0x39, 0xc1 }; /* K = 14dca45937cfdbca5c799f2ca50de2a44d8051e6d80af242c9f4d614419e6e07 */ static const uint8_t ac_dsa_vect200_out[] = { /* R */ 0x4b, 0x90, 0x99, 0x3d, 0x70, 0x7f, 0x33, 0x71, 0xd0, 0xa0, 0xcc, 0x87, 0x25, 0x5e, 0x99, 0xa8, 0xfb, 0xa1, 0x8c, 0x3b, 0x58, 0xdd, 0xdd, 0xc1, 0x06, 0x7c, 0xd3, 0x94, 0x17, 0x23, 0x66, 0xcc, /* S */ 0x4b, 0x26, 0x12, 0xd5, 0x06, 0xfb, 0x85, 0xe5, 0xaf, 0xf9, 0xfc, 0xd5, 0x6c, 0x09, 0xbd, 0x12, 0xbf, 0x60, 0xf7, 0x8a, 0xb7, 0xdf, 0xd0, 0x21, 0xa7, 0x42, 0xff, 0x85, 0xdc, 0x50, 0x7a, 0xe2 }; #define ac_dsa_vect201_prime ac_dsa_vect196_prime #define ac_dsa_vect201_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect201_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect201_ptx[] = { /* Msg */ 0x85, 0x07, 0xdb, 0x5f, 0x1d, 0xf9, 0xd2, 0x2f, 0x44, 0x7c, 0x20, 0xe4, 0x32, 0x0f, 0x90, 0xd9, 0xb3, 0x07, 0x22, 0x19, 0x71, 0x96, 0xd1, 0xa2, 0x41, 0x8d, 0x06, 0xdc, 0xa4, 0x1b, 0x33, 0x05, 0xf6, 0xfb, 0xe5, 0x2a, 0xb5, 0x8c, 0xc0, 0xb6, 0x0e, 0xf1, 0xa1, 0xd2, 0x57, 0xfc, 0x2f, 0xb2, 0x06, 0x2f, 0xe6, 0xc5, 0xf2, 0xa2, 0x5f, 0x02, 0x93, 0xca, 0x39, 0xd0, 0xc0, 0x83, 0xcf, 0xd5, 0xe4, 0xbd, 0xad, 0xf2, 0x16, 0x9a, 0xd4, 0xed, 0x17, 0x8c, 0x88, 0xec, 0xb5, 0x55, 0x4f, 0xfa, 0x2b, 0x53, 0xaa, 0x43, 0x98, 0x11, 0x5c, 0xde, 0x62, 0x7d, 0x30, 0x14, 0x4a, 0xce, 0x93, 0x25, 0xb2, 0xd7, 0x9d, 0x7d, 0xce, 0x95, 0x15, 0x09, 0xd7, 0x34, 0xaf, 0xb0, 0xff, 0x6d, 0x92, 0x65, 0xb9, 0x02, 0x67, 0x2e, 0xb5, 0x88, 0x4e, 0x9d, 0x8a, 0xcf, 0xf0, 0xea, 0x22, 0xc7, 0x69, 0x38 }; static const uint8_t ac_dsa_vect201_priv_val[] = { /* X */ 0x82, 0xab, 0x29, 0x08, 0xe3, 0xd2, 0x33, 0x5e, 0x07, 0xc1, 0x00, 0x27, 0x64, 0xb0, 0x7b, 0x1c, 0xa4, 0x6d, 0x03, 0x9a, 0x95, 0xb5, 0x9b, 0x45, 0x0b, 0x16, 0xd3, 0x7e, 0xd4, 0x83, 0x88, 0x72 }; static const uint8_t ac_dsa_vect201_pub_val[] = { /* Y */ 0x43, 0x88, 0x31, 0xcb, 0x0e, 0xb0, 0x9a, 0xab, 0x24, 0x27, 0x54, 0x54, 0x35, 0x4c, 0xe4, 0x2b, 0x9a, 0x2e, 0xed, 0xb3, 0x1f, 0x42, 0x12, 0x19, 0xde, 0xf7, 0x46, 0x87, 0xe6, 0xf9, 0xc9, 0x2f, 0x0b, 0x19, 0x82, 0x35, 0x5c, 0xad, 0xb2, 0x6e, 0x09, 0x5b, 0x7c, 0xa2, 0x5d, 0xe5, 0x30, 0xaa, 0xba, 0x63, 0xe6, 0x4f, 0xc2, 0x3a, 0xcc, 0x3d, 0x1d, 0x1f, 0x1b, 0x70, 0xcb, 0x72, 0x61, 0x56, 0xca, 0x0a, 0x79, 0x9b, 0x59, 0x09, 0x4b, 0xcc, 0x3b, 0x89, 0x98, 0xa4, 0xae, 0x77, 0x44, 0xd2, 0x15, 0xd6, 0x3b, 0x88, 0x70, 0x82, 0xf4, 0xc8, 0x41, 0x28, 0xe7, 0x4b, 0x9b, 0x99, 0x99, 0xc6, 0x0c, 0xad, 0x3b, 0xc6, 0xbb, 0x6f, 0x72, 0x72, 0x84, 0xb4, 0x31, 0x1a, 0x92, 0x9b, 0xbd, 0x96, 0x4c, 0x9a, 0x70, 0x74, 0xe8, 0x60, 0x62, 0x22, 0x4d, 0xce, 0xdb, 0x58, 0xb9, 0xb5, 0x98, 0x54, 0x6a, 0xc9, 0x5b, 0x3b, 0x43, 0x4e, 0xa1, 0x14, 0xab, 0x0d, 0x67, 0x85, 0x41, 0xd6, 0xca, 0xec, 0x0c, 0x56, 0x00, 0x9b, 0xc3, 0x47, 0xa4, 0x25, 0xf1, 0x67, 0xcd, 0x32, 0xa3, 0x4e, 0xec, 0xb7, 0x19, 0x24, 0x24, 0xd5, 0x7b, 0x0e, 0x54, 0xb4, 0xa9, 0xe8, 0x2f, 0x42, 0x51, 0x38, 0x70, 0x3c, 0xe8, 0x9b, 0x18, 0x90, 0x39, 0xe9, 0x2a, 0x77, 0x0b, 0x51, 0x49, 0x7f, 0x8f, 0x10, 0xea, 0xe9, 0xc3, 0x45, 0x9e, 0xd8, 0x7e, 0x51, 0x01, 0xf5, 0xab, 0x1b, 0x62, 0x71, 0x48, 0x5f, 0xdb, 0x2d, 0xd3, 0xdb, 0xc4, 0x21, 0x7f, 0xcf, 0x67, 0xc7, 0xe9, 0x2d, 0x00, 0x96, 0xdc, 0x7d, 0xa9, 0x72, 0x7f, 0x5a, 0x43, 0x4b, 0x75, 0x45, 0x28, 0x4c, 0xd8, 0xa2, 0x83, 0x07, 0x0b, 0x5a, 0x49, 0xd7, 0x11, 0xdf, 0xfa, 0x85, 0x90, 0x43, 0x11, 0xe0, 0x34, 0x5a, 0x99, 0x14, 0x7a, 0x16, 0x8e, 0xa0 }; /* K = 1ea475584982b639ada8c84e51ef72738390ed6fa44395f11428dc5fd794a81e */ static const uint8_t ac_dsa_vect201_out[] = { /* R */ 0x1d, 0x27, 0x81, 0xf5, 0xf9, 0xd0, 0x8a, 0xb2, 0xfe, 0xb1, 0x68, 0x39, 0x42, 0xc2, 0xc2, 0x9a, 0x66, 0x31, 0x88, 0x39, 0xa7, 0xdf, 0xef, 0x9a, 0xee, 0x9c, 0xd7, 0xa8, 0x9e, 0xfe, 0x2a, 0xb0, /* S */ 0x3a, 0xdc, 0x7b, 0xe9, 0x68, 0x50, 0x2e, 0xad, 0x10, 0xfe, 0xec, 0x19, 0x1e, 0x21, 0x2e, 0xa0, 0xe0, 0x7d, 0x44, 0x90, 0x06, 0xe7, 0xf2, 0x2d, 0xdf, 0x86, 0x9a, 0x9f, 0xae, 0x71, 0x18, 0x34 }; #define ac_dsa_vect202_prime ac_dsa_vect196_prime #define ac_dsa_vect202_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect202_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect202_ptx[] = { /* Msg */ 0xc7, 0x84, 0x49, 0x60, 0x96, 0x65, 0x84, 0xc8, 0xe3, 0xa5, 0x9d, 0xc3, 0x7d, 0xf3, 0x7b, 0x7e, 0xb3, 0xad, 0x33, 0x31, 0x48, 0xa3, 0x2b, 0x86, 0xc1, 0xec, 0x18, 0x07, 0x2f, 0x3b, 0x31, 0x6c, 0x59, 0xcd, 0xef, 0x98, 0xba, 0x4d, 0xc4, 0x6f, 0x53, 0x2a, 0x42, 0x80, 0x20, 0x0c, 0x22, 0x5f, 0xac, 0x6c, 0xd1, 0xad, 0xf0, 0xa4, 0x53, 0x82, 0xc2, 0xd8, 0x80, 0x54, 0xe4, 0x47, 0x74, 0x04, 0x54, 0x97, 0x6e, 0x52, 0x72, 0x33, 0x0c, 0x74, 0x87, 0xeb, 0x42, 0xa0, 0x95, 0xf7, 0x31, 0x41, 0x39, 0x93, 0x8c, 0x74, 0x19, 0x19, 0x3b, 0x1c, 0x12, 0x80, 0x54, 0xc1, 0xbb, 0xf1, 0x0d, 0x06, 0x34, 0xe2, 0x2c, 0x6e, 0x02, 0xd8, 0xe1, 0x22, 0x79, 0xca, 0xc0, 0xbf, 0xa0, 0x1d, 0x30, 0x58, 0xe0, 0xf8, 0xd5, 0x54, 0x7b, 0xa0, 0xf7, 0x15, 0x29, 0xc2, 0x7e, 0x00, 0x84, 0xd4, 0xbd, 0xe7 }; static const uint8_t ac_dsa_vect202_priv_val[] = { /* X */ 0x0c, 0x76, 0xbd, 0x64, 0x7c, 0x6f, 0xaf, 0xe7, 0xda, 0x10, 0x29, 0xb9, 0xbf, 0x36, 0xa9, 0xf0, 0x42, 0x19, 0x56, 0x91, 0xa2, 0x6f, 0x36, 0xbb, 0xe0, 0xec, 0xa3, 0xd4, 0xb1, 0xe6, 0xcb, 0xb4 }; static const uint8_t ac_dsa_vect202_pub_val[] = { /* Y */ 0x2d, 0xe9, 0xd2, 0x7f, 0x1a, 0x03, 0x01, 0x99, 0xff, 0xbb, 0xa7, 0x70, 0xe0, 0x8a, 0xeb, 0x1f, 0xf3, 0x70, 0x8e, 0xdf, 0x8e, 0xbb, 0x3a, 0x8e, 0x66, 0x4e, 0x3b, 0xd1, 0x51, 0x1d, 0xb1, 0x26, 0xed, 0x87, 0xbc, 0x44, 0xc2, 0xd2, 0xaf, 0x40, 0xb9, 0xd5, 0x12, 0xc5, 0x0a, 0x4d, 0x6c, 0x10, 0xb2, 0x3e, 0x3c, 0xa6, 0x18, 0x19, 0xf5, 0x84, 0x1c, 0xbf, 0x5d, 0x0b, 0xd6, 0xc8, 0x8d, 0x46, 0xf1, 0xac, 0x64, 0x74, 0xec, 0x20, 0xb9, 0x10, 0x0b, 0x32, 0x8c, 0xc1, 0x55, 0x87, 0x91, 0x66, 0xf4, 0x6b, 0x6d, 0x71, 0x14, 0x0b, 0x0c, 0xfb, 0x2b, 0x07, 0x25, 0xb6, 0x4a, 0x38, 0xd7, 0x0a, 0x91, 0xca, 0x8f, 0x0e, 0x3b, 0xae, 0xec, 0x61, 0x25, 0x26, 0x2c, 0x52, 0xa9, 0x5d, 0x5c, 0xa5, 0xd5, 0xff, 0x6f, 0x44, 0x82, 0xb1, 0x82, 0x50, 0x06, 0xcd, 0x46, 0x9f, 0x9e, 0x7f, 0x31, 0x76, 0x9a, 0x73, 0xed, 0xdb, 0x5f, 0x70, 0x17, 0xf1, 0x8b, 0xc7, 0x47, 0xae, 0x4f, 0xce, 0x45, 0x0c, 0x42, 0x74, 0xf4, 0xab, 0xb9, 0x60, 0x57, 0x7d, 0x13, 0xb6, 0xa7, 0x7d, 0xd9, 0x9e, 0x67, 0xd1, 0x1e, 0xdb, 0x41, 0x3e, 0x42, 0x8e, 0x50, 0x72, 0x6f, 0x70, 0x52, 0xe5, 0x35, 0x65, 0xfa, 0x1d, 0x6f, 0xde, 0x91, 0x85, 0x95, 0x73, 0xc9, 0x28, 0x92, 0x89, 0xff, 0xef, 0x05, 0x98, 0x80, 0x28, 0x08, 0xec, 0xc5, 0x50, 0x1c, 0xb3, 0x00, 0xe0, 0x64, 0x05, 0xed, 0x0f, 0xeb, 0xc3, 0xdf, 0x23, 0xf4, 0x0a, 0x1f, 0x65, 0x32, 0x41, 0x0f, 0x7d, 0x90, 0x49, 0xb9, 0x20, 0x21, 0x6f, 0x7d, 0x5c, 0x7a, 0x72, 0x8c, 0x8d, 0xd6, 0x3a, 0x8d, 0x00, 0x60, 0xfb, 0x53, 0xb3, 0x54, 0x3d, 0x62, 0xa6, 0x36, 0x66, 0x17, 0x50, 0xfd, 0x43, 0x77, 0x5e, 0x80, 0xb5, 0x09, 0x00, 0x43, 0x51, 0x47, 0x5f }; /* K = 71e12996d8aaa7cb1e730713fa441098347ca95eb39362c5a78ee6e847469c7c */ static const uint8_t ac_dsa_vect202_out[] = { /* R */ 0x09, 0xe6, 0x54, 0xb1, 0x7a, 0xb7, 0x75, 0x95, 0x96, 0x28, 0xe7, 0xca, 0xd0, 0xe2, 0x70, 0x53, 0xee, 0x49, 0x5b, 0xcc, 0x29, 0xcc, 0x2a, 0x5e, 0x3b, 0x02, 0x96, 0x60, 0xa7, 0x7b, 0x13, 0x30, /* S */ 0x26, 0x1a, 0xd4, 0x1d, 0x6b, 0xce, 0x6d, 0x04, 0xd8, 0x91, 0xa4, 0x3c, 0x16, 0xec, 0x2a, 0x81, 0x14, 0xe5, 0x1f, 0x0e, 0x47, 0xb4, 0x8b, 0x1d, 0xd1, 0xf3, 0xd6, 0x26, 0x15, 0x03, 0x38, 0xfb }; #define ac_dsa_vect203_prime ac_dsa_vect196_prime #define ac_dsa_vect203_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect203_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect203_ptx[] = { /* Msg */ 0x6f, 0x3f, 0x74, 0x38, 0x8c, 0xc9, 0x0b, 0x29, 0xc1, 0x09, 0xec, 0xbd, 0xa0, 0x8c, 0x79, 0x34, 0x9d, 0xff, 0xde, 0xb9, 0x07, 0x22, 0x97, 0x4d, 0x79, 0xd6, 0x40, 0x62, 0x09, 0x49, 0x44, 0x8f, 0x66, 0xae, 0x67, 0x3e, 0xaf, 0x4d, 0x4a, 0xf8, 0xc4, 0x3d, 0xa6, 0x73, 0xa4, 0x5e, 0xd1, 0x52, 0xea, 0x66, 0xfc, 0x97, 0x16, 0x6b, 0xaa, 0x7c, 0xe8, 0xbe, 0xb6, 0x66, 0xbd, 0x57, 0xca, 0x43, 0xda, 0x68, 0x01, 0xc0, 0xee, 0x5a, 0x5a, 0x9b, 0x50, 0xc5, 0x04, 0x79, 0x35, 0xd7, 0xa8, 0x55, 0x2c, 0x38, 0x1d, 0x93, 0xea, 0xf0, 0x3c, 0xbb, 0xbb, 0x88, 0xed, 0x0d, 0x3b, 0x5a, 0x25, 0x21, 0xb6, 0x76, 0x12, 0xa4, 0x40, 0x51, 0x20, 0xef, 0x02, 0x05, 0xe8, 0x9a, 0xeb, 0x48, 0xd5, 0x77, 0xbc, 0xda, 0x3a, 0xd2, 0x0e, 0x0a, 0x7c, 0xd0, 0x7f, 0x8c, 0x9b, 0x21, 0x5c, 0x84, 0x5d, 0xd8 }; static const uint8_t ac_dsa_vect203_priv_val[] = { /* X */ 0x34, 0xc0, 0xd0, 0xde, 0x98, 0xc8, 0x5b, 0xe2, 0x91, 0xb6, 0x8a, 0x5b, 0x8c, 0x7f, 0xb3, 0x53, 0x6b, 0x6f, 0x74, 0x47, 0xe8, 0x56, 0x5e, 0xad, 0x9b, 0x00, 0x24, 0x17, 0xf5, 0x6f, 0x46, 0x16 }; static const uint8_t ac_dsa_vect203_pub_val[] = { /* Y */ 0x08, 0x0c, 0xa4, 0x12, 0xbd, 0x19, 0x7c, 0x5a, 0xaf, 0xa2, 0xc6, 0xdf, 0x59, 0x33, 0xa6, 0x21, 0x0f, 0xa5, 0x40, 0x89, 0x82, 0x68, 0x28, 0xd5, 0x49, 0x6b, 0x45, 0x36, 0x09, 0xa5, 0x6b, 0x7d, 0x55, 0xd2, 0x32, 0xfb, 0xe6, 0x50, 0xdd, 0x9f, 0x62, 0xc0, 0x5c, 0x05, 0x0c, 0x02, 0x6a, 0x87, 0x17, 0xa7, 0x8b, 0x5d, 0xb0, 0x16, 0x14, 0xa1, 0x93, 0x01, 0xc6, 0x10, 0xd2, 0xb9, 0x96, 0x4a, 0x7e, 0x33, 0x57, 0xc7, 0x22, 0xa4, 0xc5, 0x53, 0x27, 0x3b, 0xf2, 0x7f, 0x87, 0x1b, 0x4b, 0x92, 0x41, 0x67, 0x8c, 0x33, 0x4e, 0x20, 0x82, 0x7a, 0x5f, 0x51, 0x1f, 0xe9, 0x31, 0x9a, 0x07, 0x5d, 0x12, 0x75, 0x3a, 0xc0, 0x96, 0x0d, 0xf6, 0x08, 0x70, 0xa0, 0x8a, 0x12, 0xf0, 0x9b, 0x9d, 0x35, 0x93, 0x78, 0x17, 0x81, 0xa0, 0xcd, 0x75, 0xe9, 0xd8, 0x1c, 0xc6, 0xb9, 0xb0, 0xd5, 0x06, 0xd1, 0x00, 0xfe, 0x97, 0x21, 0x65, 0xb6, 0x82, 0x97, 0xe6, 0x07, 0x0d, 0xb2, 0xd8, 0xb6, 0xea, 0x32, 0x17, 0x6d, 0x15, 0x62, 0x08, 0x4f, 0x6a, 0x06, 0xe0, 0x8e, 0x29, 0x29, 0x15, 0x5b, 0x25, 0x5d, 0x33, 0x85, 0x3d, 0xe6, 0x54, 0x9e, 0x79, 0xf8, 0xb5, 0x60, 0x49, 0xa1, 0xd0, 0x2f, 0x29, 0x16, 0x6d, 0x5f, 0x91, 0xcf, 0xbd, 0xe5, 0xaa, 0xf6, 0xbc, 0xae, 0x56, 0xf5, 0xd2, 0xd9, 0x0a, 0x9b, 0x4e, 0x8f, 0x6f, 0x45, 0x00, 0x80, 0xca, 0xe8, 0x25, 0x6c, 0x66, 0x19, 0xe9, 0x15, 0x55, 0x23, 0xc2, 0xb2, 0x05, 0x22, 0x55, 0xa8, 0xf6, 0xd9, 0xf5, 0x3d, 0x8a, 0x89, 0x7b, 0xe5, 0xb0, 0x47, 0x60, 0x02, 0x41, 0x0b, 0xf7, 0x98, 0x25, 0x6f, 0x62, 0xbb, 0x1a, 0x81, 0x82, 0x7c, 0x2c, 0x3f, 0xc4, 0xec, 0xf9, 0xab, 0xfd, 0x77, 0xe7, 0x41, 0x74, 0x78, 0x73, 0x70, 0x86, 0x4f, 0x05, 0xf9 }; /* K = 8086cc691e7e793a5c2a81bd3d5a1ff5ae261d9336b33f103d983a817f7eaf7b */ static const uint8_t ac_dsa_vect203_out[] = { /* R */ 0x43, 0x99, 0x3b, 0x68, 0xe8, 0x47, 0xf6, 0xba, 0x61, 0xd5, 0xad, 0x4d, 0xc8, 0xf5, 0xad, 0x70, 0xda, 0xbc, 0x31, 0x7a, 0x7b, 0x68, 0x11, 0xc2, 0x3e, 0x7f, 0x21, 0x5f, 0x95, 0x41, 0x5e, 0xd5, /* S */ 0x1e, 0xa7, 0x27, 0xaf, 0xdb, 0x90, 0x7d, 0x1d, 0x5b, 0x23, 0x37, 0xc1, 0xec, 0xea, 0x46, 0xc7, 0x1e, 0xb0, 0xfc, 0x83, 0x63, 0xaf, 0x23, 0x86, 0x5a, 0x34, 0x52, 0x02, 0xa7, 0x62, 0xa7, 0xc5 }; #define ac_dsa_vect204_prime ac_dsa_vect196_prime #define ac_dsa_vect204_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect204_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect204_ptx[] = { /* Msg */ 0x74, 0xa4, 0x33, 0xc2, 0xd3, 0x13, 0xf6, 0x62, 0x32, 0x32, 0x4d, 0xf8, 0x75, 0xb8, 0x25, 0x63, 0x80, 0x5d, 0x7e, 0xd6, 0x82, 0xb2, 0x66, 0xea, 0xf9, 0x62, 0x37, 0x5e, 0x42, 0x2b, 0x3a, 0xbb, 0xfe, 0x3d, 0xce, 0x7f, 0x3c, 0x19, 0x60, 0xa1, 0xe4, 0x10, 0x0f, 0x33, 0x3e, 0x16, 0x8d, 0x02, 0x19, 0x68, 0xb4, 0x83, 0x97, 0xe8, 0xcc, 0xe9, 0x00, 0x5e, 0x95, 0x1f, 0xdc, 0xb0, 0x96, 0xa9, 0xab, 0xea, 0x34, 0x2c, 0xb5, 0xb0, 0x8b, 0xab, 0x79, 0xef, 0x0c, 0x43, 0x1d, 0xd3, 0xa4, 0x3d, 0xe7, 0xd5, 0xbd, 0x6b, 0x86, 0xbe, 0xa8, 0x87, 0x2b, 0xa0, 0x38, 0xb4, 0x3a, 0x23, 0x6a, 0x73, 0x56, 0xb0, 0x3f, 0x89, 0xb0, 0x90, 0x04, 0xba, 0x2d, 0xef, 0x66, 0x3e, 0x6d, 0x29, 0x97, 0x63, 0xb6, 0xca, 0xfc, 0xb6, 0xb1, 0x50, 0xa5, 0x7f, 0x82, 0xb8, 0x90, 0xff, 0x6d, 0x56, 0xf8, 0x32 }; static const uint8_t ac_dsa_vect204_priv_val[] = { /* X */ 0x5c, 0x1a, 0x80, 0xe9, 0x26, 0xde, 0x19, 0x49, 0x95, 0x19, 0x5c, 0x4c, 0xee, 0x9a, 0x2e, 0x87, 0x4c, 0x7f, 0x6a, 0xf0, 0xfa, 0x8a, 0x4b, 0x2d, 0xf5, 0x43, 0x2f, 0x9c, 0xfc, 0x86, 0xb6, 0x43 }; static const uint8_t ac_dsa_vect204_pub_val[] = { /* Y */ 0x44, 0x4f, 0xaf, 0xab, 0x58, 0xdb, 0x4d, 0x6f, 0x52, 0x83, 0xc3, 0x44, 0x3d, 0x64, 0x78, 0xb5, 0xb7, 0x8d, 0xaa, 0x63, 0x1b, 0xd4, 0xc3, 0xd9, 0xa2, 0x8e, 0xd1, 0x72, 0x81, 0xda, 0x4c, 0x1c, 0x2e, 0xf4, 0xd5, 0xed, 0x57, 0x6d, 0x66, 0xbf, 0xe5, 0x31, 0x4e, 0x11, 0xfe, 0x68, 0xab, 0xff, 0xe4, 0xdf, 0x40, 0x6f, 0x60, 0x33, 0xed, 0xb8, 0x4f, 0x36, 0xa3, 0x8a, 0x3c, 0xe6, 0x14, 0x60, 0x1b, 0xc2, 0x58, 0x41, 0xf9, 0x41, 0x9a, 0xfb, 0x28, 0x67, 0xd9, 0x91, 0xe8, 0x7b, 0x44, 0xc4, 0xb7, 0x44, 0xe3, 0x9b, 0x64, 0x07, 0x9d, 0x9a, 0xad, 0x4b, 0x58, 0x5d, 0x79, 0xc8, 0xe2, 0x1c, 0x8f, 0x90, 0x99, 0x05, 0x40, 0xfe, 0xc8, 0xae, 0x98, 0x1f, 0x74, 0x83, 0xdc, 0x55, 0x23, 0xd2, 0x16, 0x08, 0x8a, 0x55, 0xcf, 0x23, 0x80, 0xea, 0x8e, 0xb5, 0x24, 0x67, 0x81, 0x29, 0x05, 0x59, 0xea, 0x1b, 0x20, 0x8a, 0xd4, 0xd0, 0xf5, 0x87, 0x1c, 0xb4, 0xd1, 0x3c, 0xdc, 0xa6, 0xef, 0x34, 0xfd, 0xf2, 0xde, 0x63, 0xe2, 0x09, 0xaa, 0x32, 0x0c, 0xdf, 0x14, 0x18, 0x5b, 0x8f, 0x5f, 0x60, 0xcc, 0xf9, 0x3f, 0x39, 0x8c, 0x1a, 0x6c, 0xf8, 0xb3, 0xce, 0x3d, 0x98, 0xda, 0xf0, 0x5e, 0x4c, 0xf9, 0x0c, 0x39, 0x80, 0x1c, 0xe3, 0x5f, 0x01, 0xec, 0x76, 0xa9, 0xf6, 0x03, 0x5c, 0xe1, 0xb5, 0xba, 0x10, 0x7a, 0x5f, 0x66, 0xcf, 0x25, 0x3b, 0x71, 0xfb, 0xa3, 0x83, 0x3e, 0x99, 0x69, 0xc3, 0x14, 0xeb, 0x6d, 0x50, 0x00, 0x05, 0x74, 0x92, 0x31, 0xf7, 0x99, 0xb0, 0xc7, 0x9a, 0x55, 0x5a, 0x10, 0xcd, 0xd6, 0x9f, 0x8e, 0xec, 0x4c, 0x11, 0x7d, 0x7c, 0x8b, 0x4e, 0xc6, 0xf6, 0x0a, 0x1e, 0xe5, 0x57, 0xb7, 0x0c, 0x0d, 0xea, 0x38, 0x0a, 0xf5, 0x3b, 0x92, 0xfd, 0xde, 0x88, 0x23, 0xca }; /* K = 13dcb7c12aeb75a417a93a22ce94618716996c3350909cfbff6d38b603d377f6 */ static const uint8_t ac_dsa_vect204_out[] = { /* R */ 0x3b, 0xda, 0x5b, 0x0c, 0x9e, 0x3d, 0xa2, 0x2f, 0x0b, 0x3e, 0x29, 0x35, 0x6a, 0x2f, 0x7d, 0xda, 0xce, 0x6e, 0x9b, 0x24, 0xa0, 0x63, 0xeb, 0x3f, 0x5a, 0x7d, 0x75, 0x5f, 0x2e, 0xea, 0xff, 0xb5, /* S */ 0x4c, 0xbb, 0x81, 0x53, 0x20, 0x31, 0x4a, 0x06, 0x53, 0x8d, 0x2a, 0x67, 0x40, 0xe6, 0xbf, 0x9d, 0x02, 0x2e, 0xac, 0x9a, 0xa2, 0x5c, 0x75, 0x08, 0xf6, 0x59, 0xf0, 0xf7, 0xc1, 0xf5, 0x9c, 0x45 }; #define ac_dsa_vect205_prime ac_dsa_vect196_prime #define ac_dsa_vect205_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect205_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect205_ptx[] = { /* Msg */ 0xf4, 0xea, 0xdf, 0xea, 0x11, 0x7f, 0xd3, 0xd6, 0x70, 0xce, 0xa2, 0x8a, 0xa9, 0xd2, 0x60, 0x2c, 0x95, 0x1e, 0xd8, 0x43, 0xe2, 0xe8, 0xcb, 0x28, 0x64, 0x07, 0x4c, 0x8c, 0x9b, 0xcc, 0xb0, 0x60, 0x6c, 0xed, 0x83, 0xae, 0x29, 0x80, 0x59, 0x8c, 0xc3, 0xe1, 0xb0, 0x47, 0xfc, 0xa8, 0x65, 0x91, 0x27, 0x40, 0x6d, 0x8f, 0x59, 0xf5, 0xb7, 0xbb, 0xfe, 0x8e, 0xce, 0x6d, 0x3e, 0x42, 0xf8, 0x7f, 0x4e, 0x42, 0xeb, 0xe9, 0x2a, 0xda, 0xa1, 0xe6, 0xe9, 0x2c, 0xed, 0x3d, 0xca, 0xcc, 0x2e, 0x0b, 0x2c, 0x98, 0xea, 0xde, 0x7c, 0x9c, 0x99, 0xda, 0x88, 0x7e, 0x74, 0xdb, 0x5a, 0x59, 0x13, 0x2c, 0x1d, 0x7d, 0xf7, 0xcd, 0xe8, 0x66, 0xcb, 0x2f, 0x3c, 0xa7, 0x50, 0x85, 0x2b, 0xa5, 0x3e, 0x26, 0x5e, 0x62, 0xbf, 0x7a, 0x93, 0xfd, 0x69, 0x3e, 0x4a, 0x13, 0x75, 0x1e, 0x18, 0x6e, 0x9d, 0x6b }; static const uint8_t ac_dsa_vect205_priv_val[] = { /* X */ 0x6a, 0xbf, 0x7c, 0xc8, 0x87, 0x54, 0x4b, 0xf8, 0xd3, 0x25, 0x6f, 0xb2, 0x10, 0x84, 0x8e, 0xb4, 0x62, 0x81, 0x52, 0x6b, 0x1e, 0x8c, 0xdf, 0x6c, 0x92, 0x04, 0xc4, 0xc4, 0x6a, 0x74, 0x74, 0x35 }; static const uint8_t ac_dsa_vect205_pub_val[] = { /* Y */ 0x10, 0x4f, 0x44, 0xfd, 0x76, 0x69, 0x60, 0x76, 0x44, 0xec, 0x55, 0xe6, 0xca, 0x40, 0x96, 0xc9, 0xa2, 0x79, 0x47, 0x27, 0x52, 0xa1, 0x75, 0x3d, 0xbb, 0x9f, 0x2a, 0x69, 0x41, 0xb8, 0x12, 0x22, 0x74, 0xc8, 0x7d, 0x16, 0xf6, 0x3d, 0x75, 0xdd, 0xa9, 0xeb, 0xcf, 0xd6, 0x58, 0x4b, 0x0c, 0xb3, 0x74, 0xfd, 0x17, 0x58, 0x13, 0x53, 0xd2, 0xa2, 0x46, 0xec, 0x0b, 0x37, 0x8d, 0xe6, 0x0e, 0x96, 0x13, 0x13, 0x16, 0x83, 0xc0, 0x56, 0x8b, 0xb5, 0x4d, 0x74, 0x45, 0x7a, 0xd7, 0x3d, 0xe8, 0x59, 0xa4, 0xf0, 0x24, 0x45, 0x34, 0x4d, 0x13, 0xee, 0x92, 0x8f, 0x3c, 0xda, 0x51, 0x34, 0x20, 0x2a, 0x93, 0x88, 0xe6, 0x4c, 0xf0, 0x5f, 0x81, 0x90, 0x04, 0x9d, 0xf4, 0xe7, 0x77, 0x70, 0x98, 0x38, 0xd0, 0xc9, 0xd3, 0xbc, 0xb3, 0x7e, 0xec, 0xdc, 0x38, 0xc1, 0xa5, 0xd2, 0xb4, 0x71, 0xc4, 0xb9, 0x10, 0xcf, 0xaa, 0x9a, 0x9b, 0xa8, 0x1f, 0x69, 0xb4, 0xb4, 0x5c, 0x40, 0x34, 0x40, 0x29, 0x95, 0x8f, 0xa4, 0x00, 0x00, 0xe5, 0x68, 0x81, 0xbc, 0x6a, 0x14, 0x86, 0x43, 0x30, 0xd5, 0xb3, 0x51, 0xc1, 0x61, 0x20, 0x86, 0x76, 0xcb, 0x85, 0x2b, 0xf4, 0x79, 0x70, 0x26, 0x8d, 0x37, 0xd4, 0xbf, 0xe9, 0x7b, 0x3b, 0x26, 0xef, 0x5b, 0x78, 0x5f, 0x50, 0xeb, 0xc8, 0xc4, 0x79, 0x49, 0xdc, 0x9b, 0xd0, 0xb2, 0xe6, 0x73, 0xfb, 0x04, 0x0e, 0x26, 0x78, 0x9f, 0x3f, 0x5c, 0xdb, 0xce, 0x8e, 0x4b, 0x78, 0x38, 0x99, 0x92, 0xbb, 0x83, 0xee, 0xb2, 0xb0, 0x63, 0xe9, 0xe1, 0xdb, 0x06, 0xa9, 0xed, 0xe9, 0x33, 0xfa, 0xef, 0x7e, 0x63, 0x5e, 0xff, 0xe5, 0xe1, 0xb1, 0xe2, 0x11, 0x53, 0xdc, 0x69, 0x34, 0x19, 0x7e, 0xfa, 0x1f, 0xd6, 0x8f, 0x18, 0xa4, 0x0e, 0xd5, 0x69, 0x74, 0x6c, 0x83, 0x74 }; /* K = 0711c4621a8bcd40ff3e8b95728ce67a000e1fa33741246d420b046bdec48657 */ static const uint8_t ac_dsa_vect205_out[] = { /* R */ 0x36, 0xc0, 0x86, 0x07, 0x03, 0x68, 0x26, 0x5f, 0x73, 0x6e, 0x7b, 0xba, 0xd5, 0x4a, 0xaf, 0x24, 0x82, 0xd2, 0x61, 0x61, 0xf8, 0x05, 0x7a, 0x97, 0xa4, 0xb8, 0xcd, 0x2b, 0x4d, 0xdd, 0x78, 0x55, /* S */ 0x31, 0xd9, 0x9d, 0x73, 0x6e, 0xa6, 0x70, 0x14, 0xfe, 0x59, 0xcb, 0x22, 0x12, 0xc4, 0x7e, 0xb9, 0x20, 0xf2, 0xaf, 0x44, 0xe3, 0x2b, 0x65, 0xdb, 0x15, 0xaf, 0x83, 0xcb, 0xe8, 0xe6, 0xaa, 0x70 }; #define ac_dsa_vect206_prime ac_dsa_vect196_prime #define ac_dsa_vect206_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect206_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect206_ptx[] = { /* Msg */ 0xcb, 0xc3, 0x7a, 0xfc, 0x75, 0x17, 0x7a, 0x83, 0x86, 0xdc, 0xe2, 0xc4, 0x0c, 0x33, 0xb8, 0xf5, 0xde, 0xdc, 0x23, 0x11, 0x3b, 0x45, 0x12, 0xcb, 0x96, 0x79, 0x0f, 0x2d, 0xd7, 0x40, 0x66, 0x10, 0x3e, 0x0c, 0x45, 0xa9, 0xc6, 0x17, 0x6f, 0xf9, 0x6b, 0x7d, 0x71, 0x91, 0x62, 0x00, 0x3c, 0xee, 0x10, 0xfa, 0xd6, 0xcc, 0xc1, 0x98, 0x55, 0x0a, 0x38, 0x92, 0x75, 0xd2, 0x1e, 0x70, 0x8b, 0x69, 0x61, 0x52, 0x32, 0x72, 0xec, 0xd5, 0xef, 0xab, 0x56, 0x80, 0xed, 0x74, 0x1c, 0x2d, 0xe0, 0x25, 0xb0, 0x2b, 0xbd, 0xc5, 0x63, 0x15, 0xa4, 0x42, 0xe4, 0x37, 0xc4, 0x3e, 0x3b, 0x37, 0x8e, 0x6d, 0x62, 0xea, 0x88, 0x78, 0xfd, 0x97, 0x89, 0x85, 0x8a, 0x8c, 0x68, 0xa5, 0x04, 0xbf, 0xf4, 0x95, 0x16, 0xe7, 0x62, 0xa2, 0x2a, 0xe5, 0x13, 0xa2, 0xdc, 0xeb, 0xa9, 0x25, 0x3b, 0x36, 0xf5, 0x53 }; static const uint8_t ac_dsa_vect206_priv_val[] = { /* X */ 0x7c, 0x6e, 0xe8, 0x6f, 0x45, 0xdd, 0xf8, 0xb8, 0x7f, 0x88, 0x84, 0xf5, 0x9a, 0xad, 0x9e, 0x32, 0x0b, 0x73, 0xb2, 0x46, 0xa8, 0x0b, 0x26, 0xa6, 0x45, 0x18, 0x8a, 0x40, 0xa9, 0xbc, 0xa6, 0x2d }; static const uint8_t ac_dsa_vect206_pub_val[] = { /* Y */ 0x35, 0x6c, 0xc7, 0x37, 0x0c, 0x84, 0x0f, 0xa2, 0x6b, 0x0d, 0x10, 0x6c, 0x47, 0xa6, 0x26, 0xe0, 0x28, 0xa0, 0xc9, 0x67, 0xc0, 0x93, 0x81, 0x0b, 0x52, 0x06, 0x39, 0xbd, 0xda, 0x0d, 0x33, 0x9b, 0x7f, 0xc2, 0x9a, 0xdc, 0x0d, 0x90, 0x36, 0xb9, 0x71, 0x03, 0x58, 0xef, 0x9f, 0x8c, 0x6c, 0x05, 0x25, 0x2b, 0x27, 0x82, 0x81, 0xb2, 0xaf, 0xe7, 0x95, 0x38, 0x86, 0x42, 0x9e, 0x85, 0xd2, 0x28, 0xfb, 0x54, 0x74, 0xac, 0xfd, 0x65, 0x21, 0x31, 0x51, 0xe9, 0xda, 0x0a, 0xef, 0x86, 0xa6, 0x6f, 0x9f, 0x9c, 0x59, 0xfa, 0x88, 0xfd, 0x48, 0xcc, 0x3a, 0xdd, 0xc8, 0x3d, 0x7a, 0xdf, 0x4a, 0xfb, 0x16, 0x65, 0x04, 0x9e, 0xd0, 0x94, 0x02, 0x02, 0x19, 0xc0, 0x19, 0x58, 0xb6, 0x97, 0xf2, 0x2e, 0x65, 0x21, 0x52, 0xe5, 0x3b, 0xf4, 0xe8, 0xf6, 0x8f, 0x47, 0x6a, 0x58, 0x18, 0x1d, 0xdd, 0x3f, 0x64, 0x34, 0x4e, 0x9b, 0x87, 0xa0, 0x8c, 0x5d, 0x0d, 0xe4, 0x9e, 0x7b, 0x3c, 0x29, 0x95, 0x84, 0x0c, 0x20, 0x00, 0x84, 0xe9, 0x0a, 0x76, 0xd2, 0xc0, 0x5f, 0x8b, 0x5c, 0x68, 0xe7, 0x71, 0x92, 0xd0, 0x67, 0x6b, 0x42, 0x19, 0xd4, 0x57, 0x9c, 0xb2, 0xde, 0x0f, 0x2a, 0x93, 0xa9, 0x16, 0xb4, 0xf9, 0xcf, 0xe0, 0xd8, 0x11, 0x3d, 0xc4, 0xbb, 0xd9, 0x7e, 0xd1, 0x2d, 0x8c, 0xe0, 0x44, 0x7f, 0xcf, 0x9d, 0xf1, 0x2e, 0x92, 0x2c, 0x63, 0x83, 0xca, 0x69, 0xc9, 0xde, 0x9a, 0xd3, 0x20, 0xf9, 0xc5, 0x33, 0x1a, 0xdb, 0x6e, 0xb1, 0xd2, 0x23, 0x07, 0x91, 0x96, 0xa2, 0x93, 0x9c, 0xc0, 0xa7, 0x25, 0x9c, 0x51, 0x2c, 0x47, 0x8c, 0x94, 0x3f, 0xe0, 0x57, 0x36, 0x71, 0x0e, 0x27, 0x3e, 0x4b, 0x58, 0x67, 0x17, 0x4d, 0xe7, 0x2e, 0x70, 0x3b, 0x5e, 0x7b, 0xf7, 0xaf, 0xdb, 0xc0, 0x64, 0x27 }; /* K = 685a19da2ee3dd94fe9726a32e712fac05eeffe11e3dd9f60e6f90af7c13e23a */ static const uint8_t ac_dsa_vect206_out[] = { /* R */ 0x56, 0x45, 0xef, 0x65, 0xe8, 0xe9, 0x23, 0x6d, 0x87, 0x4d, 0x45, 0x9e, 0x7a, 0x58, 0x09, 0x92, 0x3c, 0x05, 0xd6, 0x4b, 0x22, 0x75, 0x7b, 0xfc, 0x5b, 0x56, 0x21, 0x07, 0x9e, 0x84, 0x81, 0x9c, /* S */ 0x65, 0xf4, 0xc8, 0xfe, 0xba, 0xf3, 0xe9, 0xd4, 0x65, 0x81, 0xb1, 0x76, 0x85, 0xc4, 0xf2, 0xec, 0x9b, 0x95, 0x64, 0x21, 0xd0, 0x34, 0xa2, 0xc1, 0xaa, 0xab, 0xee, 0x94, 0xb7, 0x87, 0xa4, 0xf1 }; #define ac_dsa_vect207_prime ac_dsa_vect196_prime #define ac_dsa_vect207_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect207_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect207_ptx[] = { /* Msg */ 0x8e, 0xb3, 0x68, 0x5c, 0x3f, 0x40, 0x6c, 0x56, 0x15, 0xe8, 0x8a, 0xcc, 0xf4, 0xc0, 0xc7, 0xd2, 0x07, 0x1b, 0x6c, 0x7b, 0xde, 0x52, 0x44, 0x99, 0x4f, 0x73, 0xdc, 0x04, 0xf3, 0xcc, 0x0a, 0xb7, 0xe2, 0xb6, 0x66, 0x4a, 0x19, 0x94, 0xe6, 0xee, 0xc5, 0x2b, 0x62, 0x79, 0x0a, 0x04, 0x32, 0x8e, 0x43, 0x6a, 0x2b, 0x4a, 0xf3, 0xcb, 0xe3, 0xba, 0x6e, 0x4c, 0x8f, 0x36, 0x3a, 0x39, 0xb2, 0x52, 0x9e, 0xf5, 0x54, 0xc0, 0xc6, 0x27, 0xf9, 0xf6, 0xb2, 0x55, 0x92, 0x8a, 0x39, 0xa4, 0x65, 0xe6, 0x0a, 0xc5, 0x0c, 0xcf, 0x01, 0xf3, 0x2c, 0x7b, 0xa4, 0x83, 0x64, 0x03, 0x44, 0xb6, 0xa8, 0xf5, 0x83, 0xc9, 0x08, 0x76, 0xb8, 0x4d, 0x19, 0x55, 0x4b, 0x0a, 0x4b, 0xaa, 0xbc, 0x2c, 0x24, 0x0e, 0x29, 0x6b, 0x12, 0xc8, 0x19, 0x41, 0x0c, 0xac, 0xff, 0xe7, 0xa7, 0x46, 0x44, 0x19, 0xbe, 0xe0 }; static const uint8_t ac_dsa_vect207_priv_val[] = { /* X */ 0x7e, 0x5e, 0x3d, 0x72, 0x55, 0xa6, 0x29, 0xc3, 0x9f, 0x88, 0xb6, 0x04, 0x6f, 0xe0, 0x03, 0x91, 0x59, 0xe4, 0x4c, 0x2d, 0x23, 0x09, 0xb1, 0x12, 0xab, 0x05, 0xc6, 0x15, 0x61, 0xd9, 0xe4, 0x4a }; static const uint8_t ac_dsa_vect207_pub_val[] = { /* Y */ 0x94, 0xba, 0x48, 0x69, 0x77, 0xf5, 0x98, 0x2f, 0x2a, 0xe7, 0x5e, 0x98, 0x6b, 0x7e, 0x19, 0x44, 0x61, 0xcc, 0x3d, 0x65, 0xcd, 0xbf, 0x26, 0xf9, 0x36, 0x80, 0x5d, 0x12, 0xd7, 0xf8, 0x50, 0xaa, 0xd7, 0x58, 0x02, 0x06, 0xd7, 0xdc, 0x54, 0x4c, 0xd1, 0x2c, 0xa1, 0x89, 0x1c, 0x9d, 0xc4, 0x06, 0xc9, 0x49, 0xe5, 0x2b, 0x9f, 0xeb, 0xfa, 0x88, 0x83, 0x6f, 0x15, 0x66, 0xd5, 0x21, 0xa1, 0x10, 0xbb, 0x54, 0x5e, 0x07, 0xba, 0x28, 0xca, 0xf0, 0x7e, 0x1b, 0xbf, 0xa3, 0xb1, 0x76, 0xcc, 0x91, 0x7c, 0xc4, 0xbb, 0x45, 0xda, 0xe7, 0xf8, 0x73, 0xb7, 0x2d, 0xfa, 0x90, 0x00, 0xe9, 0xab, 0x60, 0x83, 0xe7, 0x05, 0xc0, 0x16, 0x7d, 0x85, 0x3d, 0xda, 0x11, 0x4c, 0x42, 0x9f, 0xd8, 0x12, 0xa0, 0x59, 0x61, 0xfc, 0x2e, 0x78, 0xba, 0x9e, 0x68, 0xcc, 0xdb, 0x9d, 0xc6, 0x7b, 0x11, 0x6f, 0x10, 0x53, 0x20, 0x34, 0xd9, 0xf0, 0xf7, 0xd3, 0x99, 0x01, 0xdc, 0x64, 0x31, 0x27, 0xc4, 0x30, 0x90, 0x58, 0xf8, 0xeb, 0xf4, 0x3b, 0x28, 0xa5, 0xce, 0x53, 0x4e, 0x29, 0xd6, 0x22, 0x7c, 0x4e, 0xc2, 0x7c, 0xcf, 0x77, 0x7b, 0x00, 0x08, 0xdf, 0x5c, 0xe8, 0xb8, 0xa1, 0x9b, 0x57, 0x71, 0x72, 0x5c, 0xb0, 0xf9, 0xf2, 0xa6, 0x2b, 0xb4, 0x1f, 0x01, 0x06, 0xc3, 0x90, 0x80, 0x3a, 0x30, 0x7c, 0x60, 0xac, 0xbe, 0xd6, 0xc2, 0xe1, 0xe0, 0xdb, 0x50, 0x36, 0xe0, 0xe7, 0x9d, 0xdc, 0xc3, 0xf7, 0x18, 0xb2, 0x9c, 0xa5, 0xaa, 0x02, 0x2f, 0x2f, 0x0b, 0xbe, 0x81, 0x5f, 0x9c, 0x0e, 0xb5, 0x04, 0xfc, 0x9f, 0xf8, 0xd1, 0x8a, 0x2d, 0xa9, 0x99, 0x02, 0x3a, 0xf8, 0x10, 0x5c, 0xdd, 0xfc, 0x67, 0x94, 0xdf, 0xdc, 0xc4, 0x13, 0x33, 0xbc, 0xcd, 0x44, 0x6a, 0xd7, 0xb8, 0x2a, 0x0a, 0x7b, 0xfe, 0x38 }; /* K = 3966daabf7854949475ff47f3932393a73f21e275b3baad861a92a3ab322e376 */ static const uint8_t ac_dsa_vect207_out[] = { /* R */ 0x27, 0xb4, 0xe3, 0xc3, 0xa4, 0x5e, 0xfa, 0x61, 0x31, 0xc3, 0xd0, 0x05, 0xca, 0x92, 0x4d, 0xff, 0x11, 0xfd, 0xcc, 0xf4, 0x09, 0xc2, 0xa6, 0x99, 0x3f, 0xcb, 0x50, 0x54, 0x77, 0xb6, 0xe4, 0x00, /* S */ 0x68, 0xa0, 0x85, 0xbd, 0x13, 0x0c, 0x4e, 0xc0, 0x8a, 0xa9, 0x67, 0x3c, 0x49, 0x5b, 0xa5, 0xaf, 0xd4, 0x6c, 0x9d, 0xda, 0xd2, 0x05, 0x2b, 0xa7, 0xab, 0x39, 0x63, 0x29, 0xd9, 0x00, 0xd8, 0x6c }; #define ac_dsa_vect208_prime ac_dsa_vect196_prime #define ac_dsa_vect208_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect208_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect208_ptx[] = { /* Msg */ 0xf2, 0xb0, 0x2a, 0xc6, 0x27, 0xb3, 0xf6, 0x6b, 0xaf, 0x4e, 0xba, 0xa5, 0x2b, 0x89, 0x9a, 0xdf, 0xd7, 0x07, 0x1a, 0xf5, 0x3e, 0x78, 0x92, 0x31, 0x82, 0xd8, 0xb4, 0xd5, 0xf3, 0xa9, 0x47, 0x42, 0x51, 0x30, 0x8b, 0x4d, 0xbd, 0x15, 0xfb, 0x6b, 0x65, 0x7b, 0xe6, 0x50, 0x28, 0xa1, 0x89, 0x35, 0x39, 0x12, 0xd7, 0xc1, 0x6d, 0x6d, 0x49, 0x89, 0x98, 0x5c, 0x15, 0xce, 0xdc, 0x43, 0x43, 0xf0, 0xce, 0xb6, 0x80, 0x61, 0x7b, 0xc7, 0x27, 0x85, 0x11, 0xf9, 0x06, 0x8a, 0xbd, 0x61, 0x37, 0x18, 0xa8, 0x62, 0x51, 0x3e, 0xe5, 0x14, 0xfd, 0xf8, 0x0c, 0xd2, 0x5b, 0x6f, 0x84, 0xc4, 0x88, 0x51, 0xe6, 0xa7, 0x85, 0x0f, 0xea, 0xea, 0x57, 0xea, 0x20, 0xde, 0xb1, 0x12, 0x3c, 0xa4, 0x20, 0x6b, 0xde, 0x8a, 0x93, 0xff, 0x99, 0x9e, 0xf7, 0x89, 0x58, 0x3e, 0x2c, 0x85, 0x0d, 0x9e, 0x06, 0x35 }; static const uint8_t ac_dsa_vect208_priv_val[] = { /* X */ 0x7e, 0x52, 0x07, 0x0b, 0x03, 0xab, 0xa0, 0xaf, 0x4c, 0xad, 0x1c, 0xba, 0x0a, 0x73, 0x36, 0x18, 0xe3, 0xad, 0xb7, 0xde, 0x87, 0x3e, 0xfb, 0xa0, 0x13, 0x87, 0x8f, 0xa7, 0x63, 0x31, 0xb5, 0xe1 }; static const uint8_t ac_dsa_vect208_pub_val[] = { /* Y */ 0x4e, 0x16, 0x0d, 0x69, 0x70, 0x68, 0x3f, 0x4d, 0x84, 0xeb, 0x88, 0xc5, 0x5b, 0xa2, 0xda, 0x58, 0xd7, 0x7f, 0x63, 0x74, 0xfc, 0x51, 0x27, 0x27, 0x3d, 0x65, 0xe8, 0xef, 0x96, 0xcc, 0xff, 0xf5, 0x1d, 0xf6, 0x9b, 0x0e, 0x2f, 0xdf, 0x3e, 0x98, 0xf6, 0xd3, 0x5e, 0x6a, 0x3d, 0xd9, 0xf7, 0xed, 0xd9, 0x0b, 0xba, 0xe4, 0xc6, 0x58, 0x1c, 0xd0, 0x2a, 0xd0, 0x13, 0x36, 0xc0, 0x08, 0x6d, 0x42, 0x48, 0xeb, 0x13, 0x73, 0x48, 0x07, 0x89, 0xf7, 0xd8, 0x33, 0x3b, 0x83, 0x1d, 0xb3, 0xba, 0xe0, 0xbd, 0xb4, 0x97, 0x89, 0xaa, 0xb9, 0x3c, 0xde, 0x1f, 0xaf, 0x1c, 0xe8, 0x8d, 0xcd, 0xc7, 0xa1, 0xa4, 0xf8, 0x61, 0x43, 0xce, 0x44, 0xf8, 0x51, 0xac, 0xe4, 0x59, 0xa5, 0x52, 0x8c, 0x96, 0x19, 0x5f, 0x44, 0x38, 0xee, 0x7c, 0x18, 0x56, 0xac, 0x61, 0xfd, 0x50, 0x35, 0xd8, 0x39, 0xd6, 0x2e, 0x48, 0xa1, 0xab, 0x6b, 0xd2, 0x3a, 0xd5, 0x2f, 0x1f, 0x6f, 0xfe, 0xd1, 0x98, 0x26, 0xb6, 0xd7, 0xf6, 0x49, 0x1c, 0xfb, 0x05, 0x00, 0x31, 0x76, 0xf2, 0x90, 0x79, 0x45, 0x54, 0x43, 0xf0, 0xab, 0x48, 0x21, 0x50, 0xfa, 0xc8, 0xe3, 0x2a, 0x39, 0x02, 0xa4, 0x09, 0x67, 0x75, 0xf3, 0x42, 0xed, 0xee, 0x2d, 0xaf, 0x4c, 0x4f, 0x33, 0x8d, 0x45, 0x5b, 0x4e, 0xa3, 0x5d, 0x39, 0x75, 0xf7, 0x2b, 0xe8, 0x5e, 0x98, 0xe8, 0x71, 0x58, 0x48, 0x6b, 0x4c, 0x3d, 0x6e, 0xc3, 0x7a, 0x37, 0x03, 0xf6, 0x3a, 0x3e, 0x19, 0x27, 0x2b, 0xa5, 0x25, 0x50, 0x89, 0xaa, 0xcd, 0x30, 0xfa, 0x39, 0x79, 0xb4, 0x58, 0xdf, 0x61, 0x6f, 0x57, 0xb7, 0x50, 0x2b, 0x42, 0x91, 0x38, 0x45, 0x62, 0x04, 0x1f, 0x61, 0x88, 0xdb, 0x50, 0x3f, 0x3d, 0xf7, 0xf5, 0x98, 0x1d, 0xa5, 0x70, 0x5e, 0xb0, 0xf1, 0xd2, 0x42 }; /* K = 57c141f543386db3bd6a97121f93b47e38891796f02565058ec6a5ce65f7a212 */ static const uint8_t ac_dsa_vect208_out[] = { /* R */ 0x64, 0x33, 0xbd, 0x33, 0xdb, 0x0a, 0xc8, 0x26, 0x1c, 0x69, 0x1a, 0xf3, 0xa2, 0x7f, 0x52, 0xcd, 0xd4, 0xa6, 0x5d, 0x79, 0x99, 0x39, 0xfa, 0xf2, 0x79, 0xac, 0x41, 0x78, 0x8e, 0x75, 0x28, 0xa6, /* S */ 0x04, 0xcf, 0xdc, 0xb9, 0x93, 0x38, 0x2e, 0x8f, 0xd2, 0xdb, 0x8d, 0x90, 0xdc, 0xa8, 0x0e, 0x94, 0xb1, 0x7b, 0x43, 0x20, 0x09, 0x85, 0x2c, 0xd3, 0xf8, 0x66, 0x25, 0x15, 0x9e, 0x83, 0x7c, 0x19 }; #define ac_dsa_vect209_prime ac_dsa_vect196_prime #define ac_dsa_vect209_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect209_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect209_ptx[] = { /* Msg */ 0x2b, 0x43, 0x65, 0xa4, 0xac, 0x68, 0x54, 0xc9, 0x72, 0xda, 0x73, 0x47, 0xaf, 0x1c, 0xec, 0xc6, 0xed, 0xcb, 0xae, 0x9d, 0x53, 0x3b, 0x74, 0xfb, 0xe6, 0xdb, 0x57, 0x12, 0x16, 0x3a, 0x6c, 0xe9, 0x84, 0xf9, 0xd7, 0xa4, 0xc5, 0x4b, 0x44, 0xdd, 0x75, 0x55, 0xe5, 0xc2, 0xd2, 0xf3, 0xd0, 0x98, 0xf3, 0x1d, 0x51, 0x7f, 0x8e, 0xbd, 0x33, 0x01, 0x99, 0xa5, 0x4b, 0x15, 0x29, 0x7e, 0x5a, 0xde, 0xe1, 0xbd, 0xf3, 0x91, 0x58, 0x1f, 0x10, 0x19, 0xb1, 0xad, 0x72, 0xdc, 0xcc, 0xd5, 0x48, 0x4b, 0x51, 0xd2, 0x75, 0xa3, 0x68, 0xc6, 0x9a, 0x76, 0x62, 0xe7, 0x9f, 0x9b, 0x29, 0xc9, 0xa3, 0x08, 0x4c, 0x94, 0xae, 0x76, 0xda, 0x04, 0xf9, 0x58, 0xc7, 0xd3, 0x6c, 0xec, 0xc5, 0xd4, 0x1d, 0x77, 0xf2, 0x30, 0x2f, 0xf2, 0x8f, 0x2e, 0xd9, 0xc6, 0x6a, 0x06, 0x62, 0xca, 0xbf, 0x51, 0xc8, 0x42 }; static const uint8_t ac_dsa_vect209_priv_val[] = { /* X */ 0x35, 0xb7, 0x01, 0xb7, 0xd5, 0x9a, 0xad, 0x55, 0xeb, 0x42, 0x99, 0xe0, 0xf9, 0xe0, 0x34, 0x8b, 0xae, 0xc8, 0x75, 0xea, 0xf6, 0x2d, 0x21, 0x74, 0xbc, 0xe9, 0x2d, 0xd2, 0x33, 0x02, 0xa8, 0x1a }; static const uint8_t ac_dsa_vect209_pub_val[] = { /* Y */ 0x58, 0xe6, 0x35, 0xee, 0xc8, 0x0b, 0xde, 0x1e, 0xb7, 0xbf, 0x2d, 0xa2, 0x06, 0x00, 0x61, 0x7a, 0xf2, 0x9f, 0x0a, 0x19, 0x17, 0x05, 0x67, 0x6b, 0xc1, 0x0f, 0x75, 0x53, 0xf7, 0x61, 0x11, 0x26, 0xe4, 0xc4, 0xd4, 0x4b, 0xcf, 0x14, 0xf7, 0xa9, 0xf4, 0x8d, 0xa6, 0xe1, 0xb1, 0xe5, 0x4d, 0x0a, 0x71, 0x57, 0x24, 0xaf, 0x5b, 0xca, 0x93, 0x86, 0x70, 0x90, 0xf9, 0xbf, 0xc9, 0x27, 0x41, 0xdf, 0xe1, 0xdd, 0x4f, 0x06, 0x07, 0x5e, 0xc2, 0xa9, 0x26, 0x2d, 0xa8, 0x1e, 0x0d, 0xca, 0xbf, 0xca, 0xb9, 0xe6, 0x94, 0xdd, 0xca, 0x86, 0xd0, 0xe1, 0xcf, 0xaa, 0x32, 0x1e, 0x2b, 0x58, 0x18, 0x18, 0x2e, 0xb6, 0x20, 0xbd, 0x5d, 0x16, 0xbc, 0x27, 0xa2, 0xda, 0x03, 0x5d, 0x4b, 0xc1, 0x78, 0x07, 0xcf, 0xe8, 0xae, 0x30, 0x38, 0xc5, 0xbb, 0xb8, 0xa0, 0x23, 0xfb, 0x23, 0x28, 0x14, 0xb9, 0x1b, 0x99, 0x74, 0x9f, 0x51, 0x9d, 0xe3, 0x9a, 0xa0, 0xf4, 0x34, 0x31, 0x33, 0x23, 0xb1, 0xb5, 0x82, 0x02, 0xc5, 0x91, 0x19, 0xb0, 0xbe, 0x21, 0x76, 0x17, 0x04, 0x7c, 0x9e, 0x2e, 0xa4, 0x53, 0xd6, 0x08, 0x56, 0x2c, 0xb9, 0x6c, 0x4f, 0x08, 0x51, 0xa7, 0x96, 0x5b, 0x16, 0x4f, 0x9b, 0xbe, 0x15, 0x1f, 0x9c, 0x50, 0x8c, 0xa2, 0x09, 0xf1, 0xaf, 0x65, 0x9e, 0x36, 0x38, 0x04, 0xc8, 0xd8, 0xfa, 0x1a, 0xd7, 0x00, 0xe2, 0x08, 0x66, 0xec, 0x9a, 0x1e, 0x50, 0x5b, 0x74, 0xbb, 0xab, 0x70, 0xcb, 0x47, 0x23, 0x08, 0x43, 0x1a, 0x3e, 0x87, 0x27, 0x2f, 0xeb, 0xf7, 0xcc, 0xe2, 0xc2, 0x0e, 0xc3, 0x7f, 0x5d, 0x68, 0xb4, 0xe4, 0x7b, 0xf3, 0x74, 0x10, 0x13, 0x72, 0x39, 0x36, 0xdb, 0x7c, 0x9b, 0x0f, 0x3d, 0xed, 0x96, 0x4a, 0xcb, 0x7f, 0x8a, 0xc9, 0xc5, 0xa6, 0xb4, 0xf2, 0x8d, 0xe1, 0x98 }; /* K = 1c6ceff82adebf8c81bb4842b90dbe2a12c9d07c3a9d4990d44106a1768bb082 */ static const uint8_t ac_dsa_vect209_out[] = { /* R */ 0x00, 0xa7, 0xc6, 0x64, 0xc5, 0x44, 0xcd, 0x7b, 0x61, 0x74, 0x94, 0x10, 0xdd, 0xa3, 0x3b, 0xb3, 0xa4, 0x7c, 0x3e, 0xb5, 0xa9, 0xa7, 0xbe, 0x5f, 0xba, 0x20, 0x1a, 0x39, 0x0c, 0xec, 0xfa, 0xef, /* S */ 0x6f, 0xbb, 0xda, 0x96, 0x7b, 0x58, 0x4b, 0xd9, 0xec, 0x6a, 0x0a, 0xe7, 0x6e, 0x0c, 0x55, 0x2b, 0x3d, 0x42, 0xbf, 0x0e, 0x9c, 0xf2, 0x93, 0x9c, 0xaf, 0x61, 0x23, 0xf6, 0xe8, 0x60, 0x46, 0xf6 }; #define ac_dsa_vect210_prime ac_dsa_vect196_prime #define ac_dsa_vect210_sub_prime ac_dsa_vect196_sub_prime #define ac_dsa_vect210_base ac_dsa_vect196_base static const uint8_t ac_dsa_vect210_ptx[] = { /* Msg */ 0xca, 0xb1, 0xd1, 0x76, 0x66, 0xb0, 0xc9, 0x65, 0x8c, 0xc7, 0x8c, 0xfc, 0xba, 0x17, 0xa0, 0x8e, 0x29, 0x89, 0xd3, 0xc2, 0x02, 0xc8, 0xb5, 0x08, 0x55, 0x31, 0x40, 0x4d, 0x92, 0x8c, 0x61, 0x8b, 0x6e, 0x23, 0x0b, 0x25, 0xc4, 0x6a, 0x5b, 0x58, 0x43, 0x7e, 0x43, 0x35, 0xfc, 0x04, 0x00, 0x20, 0xba, 0x00, 0xc8, 0x63, 0x18, 0x23, 0x25, 0x94, 0x0f, 0x00, 0xaa, 0xd3, 0x30, 0x14, 0x5e, 0x66, 0x6d, 0x07, 0xe9, 0xe9, 0xd8, 0x76, 0x13, 0x70, 0x10, 0x93, 0x2a, 0xe5, 0x20, 0xd9, 0x18, 0x8c, 0xa3, 0xd7, 0x99, 0x3c, 0x90, 0x53, 0x95, 0x21, 0x9c, 0x55, 0x84, 0x6d, 0x19, 0xb8, 0xfc, 0xdb, 0x1d, 0x0c, 0x15, 0x86, 0xb9, 0xb5, 0x10, 0x97, 0xaf, 0xd6, 0x97, 0x2a, 0xe1, 0x47, 0x2b, 0x0e, 0x20, 0x45, 0x3f, 0x8f, 0xbd, 0x5d, 0x6a, 0xa9, 0xe4, 0xa9, 0xa9, 0xb3, 0xdc, 0x37, 0xdd, 0x8f }; static const uint8_t ac_dsa_vect210_priv_val[] = { /* X */ 0x1c, 0xa2, 0xb2, 0x91, 0x70, 0x7c, 0xe4, 0xf7, 0x0e, 0x36, 0x6e, 0xe9, 0x7b, 0x5d, 0xa1, 0x58, 0xa1, 0xc9, 0x85, 0xba, 0x4f, 0x25, 0x2c, 0x57, 0x2f, 0x0f, 0xb3, 0x29, 0xe4, 0x3f, 0x9c, 0xb9 }; static const uint8_t ac_dsa_vect210_pub_val[] = { /* Y */ 0x50, 0x22, 0xc8, 0xa6, 0xfa, 0x79, 0xb7, 0xaa, 0x11, 0xa3, 0xd7, 0xaf, 0x5a, 0xce, 0xbb, 0x2e, 0xf8, 0xc5, 0x0b, 0x28, 0xd8, 0xf0, 0xe3, 0xa5, 0x56, 0x19, 0x65, 0x62, 0xd3, 0x41, 0x31, 0xfb, 0x44, 0xf2, 0x2c, 0x3b, 0xe3, 0xf9, 0x89, 0x5e, 0x35, 0xee, 0xe7, 0x0a, 0xa5, 0x3b, 0x6c, 0x67, 0x92, 0x0c, 0x54, 0x0b, 0xa6, 0xc1, 0x08, 0x5b, 0x0e, 0xa8, 0x18, 0xb1, 0x2a, 0xea, 0x81, 0x1f, 0x2d, 0xfa, 0xeb, 0x6d, 0xae, 0xd9, 0x76, 0xe3, 0x62, 0x43, 0x07, 0x98, 0xfd, 0xcc, 0xa3, 0x91, 0x2a, 0x08, 0x91, 0xe7, 0xd1, 0xc8, 0x3b, 0x74, 0x8a, 0xf1, 0xe7, 0x68, 0x9e, 0x03, 0x8b, 0x49, 0x0e, 0xb7, 0x3f, 0x7f, 0xe6, 0xe0, 0x61, 0x2e, 0x8f, 0x23, 0x85, 0x80, 0xe7, 0x88, 0x33, 0xb2, 0x07, 0x27, 0xa6, 0x02, 0x76, 0x8a, 0xb2, 0xd5, 0x9d, 0xda, 0x36, 0xe7, 0x51, 0x46, 0xfa, 0x4d, 0x36, 0x64, 0xf7, 0xb0, 0xce, 0xf7, 0xbe, 0x87, 0x7a, 0xfd, 0xcd, 0xba, 0x23, 0x00, 0x4e, 0xe3, 0x13, 0xa6, 0x9f, 0xd6, 0x1c, 0x32, 0x67, 0x59, 0xe7, 0xe7, 0x79, 0xad, 0x75, 0x0f, 0x7a, 0x5c, 0xad, 0x9f, 0xb2, 0xdd, 0x80, 0xa8, 0xee, 0xa6, 0xdc, 0xbd, 0xa0, 0x19, 0x5d, 0xcc, 0x17, 0xb3, 0x8a, 0xd6, 0xf0, 0xe2, 0xab, 0x68, 0xcf, 0xc6, 0x9b, 0x15, 0xc5, 0x72, 0xf8, 0x5f, 0x20, 0xc3, 0x67, 0x9c, 0x15, 0xa8, 0x30, 0x99, 0xcf, 0x08, 0xa3, 0x79, 0x05, 0x5f, 0x8f, 0xbd, 0xd8, 0xf5, 0x90, 0xd4, 0x3b, 0xd1, 0x2f, 0x75, 0xba, 0xf0, 0xec, 0xcd, 0x6c, 0x07, 0x7a, 0xc7, 0x58, 0x9a, 0xab, 0x81, 0x71, 0xe8, 0x87, 0x5d, 0xb0, 0x12, 0x2e, 0x6c, 0x78, 0x61, 0x7c, 0x13, 0x58, 0x61, 0x43, 0xa7, 0xeb, 0xe9, 0x04, 0xa7, 0x82, 0x2b, 0xac, 0xf4, 0x8a, 0x75, 0x27, 0xf7, 0xfa, 0x4e }; /* K = 4f1e2aae323c5309b3ee5d3b73e5d4090c75da17765559e118bfd1460c312859 */ static const uint8_t ac_dsa_vect210_out[] = { /* R */ 0x7b, 0x8b, 0x75, 0xac, 0x85, 0x14, 0xc6, 0x8d, 0xe0, 0xca, 0xa9, 0x8e, 0x9d, 0xe0, 0xb9, 0x60, 0x72, 0x53, 0xd8, 0x08, 0x8d, 0x3f, 0xea, 0xdf, 0x92, 0xb8, 0x3f, 0xfc, 0x26, 0xe0, 0x88, 0xce, /* S */ 0x4b, 0x10, 0xe1, 0x7f, 0xf6, 0x4a, 0x0e, 0xb7, 0x2f, 0x70, 0xa8, 0x63, 0xd0, 0x0a, 0x9b, 0xf3, 0x31, 0xbb, 0xb5, 0x15, 0xba, 0x3a, 0x9f, 0xef, 0x72, 0x75, 0x3a, 0xd7, 0xf0, 0xdf, 0x0b, 0xe5 }; /* [mod = L=2048, N=256, SHA-512] */ static const uint8_t ac_dsa_vect211_prime[] = { /* P */ 0xf6, 0x3d, 0xa3, 0xbe, 0x9a, 0x96, 0x16, 0x19, 0x6c, 0x65, 0x56, 0xf3, 0xce, 0x6f, 0xd8, 0xb9, 0x8b, 0xdd, 0xa9, 0x13, 0x74, 0x73, 0xda, 0x46, 0xfe, 0xd9, 0x70, 0xe2, 0xb8, 0xd1, 0x47, 0x38, 0x7a, 0x81, 0x92, 0x20, 0x65, 0xd5, 0x28, 0xa7, 0xd6, 0x43, 0x3e, 0xbc, 0x5e, 0x35, 0xb1, 0x5c, 0x67, 0xea, 0x35, 0xa5, 0xa5, 0xbf, 0xf5, 0xb9, 0xce, 0xf1, 0xcd, 0x1e, 0x6f, 0xe3, 0x1d, 0xda, 0x52, 0x83, 0x8d, 0xa3, 0xaa, 0x89, 0xb9, 0xb4, 0xe8, 0xd9, 0xd3, 0xc0, 0x73, 0x2c, 0xcc, 0x4f, 0x23, 0x8c, 0xe1, 0xb4, 0x16, 0xc4, 0xca, 0x93, 0xf2, 0xc6, 0x80, 0x0e, 0x5f, 0x4e, 0xd4, 0x1c, 0x4f, 0x76, 0x15, 0xce, 0xc5, 0x53, 0x1b, 0x98, 0x68, 0x0b, 0x20, 0xdc, 0x63, 0xf7, 0x3e, 0x70, 0xd8, 0x03, 0xaa, 0xcf, 0xae, 0xce, 0x33, 0xd4, 0x5f, 0xa0, 0xe3, 0x9d, 0x77, 0xc8, 0x50, 0x82, 0x09, 0x52, 0x8b, 0x90, 0x46, 0xb5, 0x91, 0x70, 0x10, 0x79, 0x12, 0x34, 0x39, 0x7e, 0x41, 0x2d, 0x22, 0xbc, 0x0b, 0x8d, 0x67, 0xcb, 0xd1, 0xcd, 0x28, 0xa3, 0x2c, 0x24, 0x60, 0xa0, 0xbd, 0x86, 0xaa, 0xba, 0x0e, 0xea, 0x80, 0xe1, 0x6e, 0x32, 0x45, 0x64, 0x31, 0x71, 0xe3, 0x42, 0x21, 0x76, 0x0c, 0x20, 0x3a, 0x56, 0xb8, 0x20, 0x7a, 0x10, 0x09, 0xe6, 0xc1, 0xa2, 0xf6, 0xcd, 0xa8, 0x5f, 0x85, 0xc4, 0xf9, 0xe4, 0x10, 0xb9, 0x49, 0x92, 0x33, 0xc0, 0xee, 0x07, 0x2e, 0x46, 0x5a, 0xf4, 0xfb, 0x4f, 0xb9, 0x28, 0x2c, 0x5c, 0x10, 0xe8, 0x23, 0x4f, 0xd6, 0x30, 0xea, 0x92, 0xf0, 0xaa, 0xe6, 0xb9, 0x7a, 0x52, 0x0d, 0xb3, 0x44, 0x75, 0x70, 0x7b, 0x79, 0xa4, 0xc1, 0x75, 0x26, 0x5c, 0x03, 0x56, 0xcc, 0xbc, 0xa8, 0x27, 0xe3, 0x83, 0x7d, 0xf3, 0xd6, 0xd0, 0x57, 0x6d, 0x90, 0x79 }; static const uint8_t ac_dsa_vect211_sub_prime[] = { /* Q */ 0x9b, 0x74, 0x63, 0xf8, 0x26, 0x9f, 0x0b, 0x90, 0x9a, 0xbe, 0xd1, 0x09, 0x91, 0x68, 0x4f, 0x36, 0xa6, 0x4a, 0xc8, 0x64, 0xe0, 0xd6, 0xd7, 0x17, 0xc0, 0xef, 0x21, 0x57, 0x7a, 0x4c, 0x39, 0x07 }; static const uint8_t ac_dsa_vect211_base[] = { /* G */ 0x97, 0x2a, 0x75, 0xf6, 0x06, 0xe8, 0xaa, 0x3a, 0x91, 0xff, 0x08, 0xfd, 0x13, 0x1a, 0x20, 0xf5, 0x96, 0x32, 0x51, 0x30, 0x4e, 0x3d, 0x14, 0x31, 0xb7, 0x12, 0xfa, 0x08, 0x03, 0xd5, 0x27, 0xfd, 0x71, 0x0f, 0xb7, 0xeb, 0x27, 0xe5, 0x29, 0x04, 0x97, 0x1c, 0xd4, 0x3c, 0xa9, 0x77, 0x19, 0x9a, 0x24, 0xdb, 0xee, 0xb4, 0xb7, 0xbc, 0x2b, 0xa0, 0x75, 0xd3, 0xb7, 0x2e, 0xb6, 0xb2, 0xc5, 0xad, 0x8f, 0x0e, 0x8b, 0x8f, 0x48, 0xc5, 0x0b, 0x55, 0x4c, 0x7e, 0x07, 0x11, 0xf4, 0xc7, 0x41, 0x63, 0x30, 0x80, 0x66, 0x72, 0x49, 0x8f, 0x43, 0x02, 0x92, 0x72, 0x4b, 0xf9, 0x8a, 0x8e, 0xa4, 0x8c, 0x7f, 0x53, 0xd7, 0xb3, 0x1d, 0x8b, 0x75, 0x28, 0xb1, 0xa6, 0xf0, 0x87, 0xd2, 0xc2, 0x7c, 0x33, 0x52, 0x02, 0x83, 0x5b, 0x1e, 0x31, 0x42, 0x25, 0xb3, 0x7a, 0xef, 0x8b, 0xfc, 0xec, 0x7d, 0x80, 0x92, 0x0c, 0x4a, 0x46, 0x0a, 0x3d, 0x68, 0x34, 0x4d, 0xed, 0x75, 0xed, 0x9e, 0xe8, 0x67, 0xfa, 0x2a, 0x69, 0x45, 0x06, 0x38, 0x94, 0xf5, 0x63, 0xb6, 0x86, 0x33, 0xb8, 0xb3, 0x9f, 0x83, 0xa1, 0xaa, 0xaf, 0x5a, 0x96, 0xc7, 0xf4, 0x22, 0x68, 0x7e, 0x7c, 0x84, 0xcf, 0x8f, 0xb8, 0xcc, 0x5f, 0x45, 0x04, 0xdf, 0xf0, 0x87, 0xbc, 0xb2, 0x6a, 0x95, 0xbb, 0xf8, 0x58, 0x3f, 0x03, 0xb3, 0xa0, 0xe4, 0x3a, 0x35, 0x6b, 0x2b, 0xd7, 0xe2, 0x5c, 0xdd, 0xdf, 0x7a, 0x01, 0x53, 0x00, 0xfa, 0xec, 0xc6, 0x79, 0x3c, 0x5e, 0xe9, 0x9b, 0x63, 0x27, 0xcb, 0x84, 0x56, 0xe3, 0x2d, 0x91, 0x15, 0x33, 0x9d, 0x5a, 0x6b, 0x71, 0x2b, 0x7f, 0x9d, 0x03, 0x01, 0xac, 0xb0, 0x51, 0x33, 0xe3, 0x11, 0x5e, 0x45, 0x4d, 0x3a, 0x6d, 0xd2, 0x4a, 0x16, 0x93, 0xc9, 0x4a, 0xab, 0x54, 0x06, 0x50, 0x4b, 0xf7 }; static const uint8_t ac_dsa_vect211_ptx[] = { /* Msg */ 0x8a, 0xb0, 0x15, 0x10, 0xcf, 0xa3, 0x3c, 0xfa, 0x5b, 0xcf, 0xf0, 0x03, 0xbb, 0xa3, 0x99, 0x96, 0xfa, 0x72, 0x76, 0x93, 0xab, 0xf6, 0xac, 0x01, 0x0b, 0xb9, 0x59, 0xb0, 0xb5, 0x9a, 0x15, 0x30, 0x6c, 0x0c, 0x3a, 0x19, 0x21, 0xaf, 0x2a, 0x76, 0x71, 0x7a, 0xa5, 0x5b, 0x39, 0xfa, 0x37, 0x23, 0xf4, 0xc3, 0x22, 0x9c, 0xa9, 0xac, 0xf6, 0xb7, 0x41, 0x61, 0x4b, 0xb5, 0x51, 0xcd, 0xe8, 0xa7, 0x22, 0x0a, 0xb9, 0x7d, 0x4b, 0x45, 0x3b, 0xec, 0x1e, 0x05, 0xa0, 0xea, 0xa4, 0x2e, 0x38, 0x2b, 0xbc, 0x7b, 0x9b, 0x84, 0xf8, 0x23, 0x7d, 0xc8, 0x96, 0x4e, 0xe5, 0xb6, 0x6e, 0x9b, 0x2a, 0x4c, 0xa6, 0x1c, 0xf6, 0x75, 0x14, 0x0e, 0xfe, 0xf5, 0x4f, 0xb3, 0x27, 0xa6, 0x65, 0xde, 0xf8, 0xd5, 0x7a, 0xb0, 0x97, 0xe8, 0xc5, 0x3c, 0x64, 0x3f, 0xcb, 0x58, 0x20, 0x9c, 0x42, 0x15, 0xb6, 0x08 }; static const uint8_t ac_dsa_vect211_priv_val[] = { /* X */ 0x5f, 0x6e, 0x54, 0x5d, 0xae, 0xf6, 0xcd, 0x1b, 0x8d, 0x98, 0x48, 0xdd, 0x98, 0x75, 0x88, 0x07, 0x23, 0x6a, 0xc0, 0xb7, 0xff, 0x05, 0x3b, 0x32, 0xc7, 0x03, 0xea, 0xa3, 0xb1, 0x14, 0x75, 0x57 }; static const uint8_t ac_dsa_vect211_pub_val[] = { /* Y */ 0x41, 0x19, 0x7c, 0xe2, 0x23, 0x3d, 0x7e, 0x48, 0xc8, 0x03, 0xcd, 0x64, 0xc7, 0x8f, 0x65, 0x79, 0x23, 0xb9, 0xe3, 0x6b, 0x87, 0x14, 0x01, 0xf8, 0x66, 0x1c, 0x21, 0xd8, 0xba, 0x38, 0xc6, 0xb9, 0xb3, 0x23, 0x9d, 0xb7, 0x67, 0xb1, 0x1d, 0x1d, 0x40, 0x1e, 0x5f, 0xae, 0xcb, 0xf7, 0xa4, 0x58, 0x60, 0xcc, 0x5f, 0x1a, 0x54, 0xd6, 0x02, 0x86, 0xb7, 0xd6, 0xe1, 0xc9, 0x9f, 0xd5, 0xb8, 0xc8, 0x4e, 0xd8, 0x51, 0xc5, 0x35, 0x7d, 0x41, 0xad, 0x60, 0x16, 0x3f, 0x22, 0x4d, 0x78, 0xc9, 0x96, 0x14, 0x3f, 0xff, 0x89, 0xdd, 0x3a, 0x8f, 0xe1, 0x23, 0xda, 0xe1, 0xf6, 0x21, 0x42, 0x7f, 0xd8, 0xcc, 0xe7, 0x6e, 0xd1, 0x38, 0xd6, 0x8f, 0xa2, 0x48, 0xf3, 0x74, 0xae, 0x23, 0x32, 0x49, 0x62, 0x5b, 0x93, 0xf3, 0xdd, 0x59, 0x37, 0xd1, 0x5e, 0x54, 0x1b, 0x7e, 0xff, 0xa4, 0xdf, 0x4f, 0xea, 0x7d, 0x52, 0xfa, 0xce, 0xd6, 0x15, 0xbf, 0xe0, 0x34, 0x84, 0x18, 0xff, 0x93, 0xe6, 0x9a, 0x20, 0xa5, 0x2e, 0x55, 0xc7, 0x6c, 0xc3, 0x0f, 0x30, 0x7f, 0x84, 0xe7, 0x1e, 0x4a, 0xab, 0xc0, 0x82, 0x5e, 0xca, 0x3a, 0x95, 0xb4, 0xbd, 0x58, 0xeb, 0xfb, 0x00, 0x29, 0xd2, 0x3a, 0x16, 0x9e, 0x9d, 0x80, 0xba, 0x7d, 0x1c, 0x5f, 0xd3, 0x53, 0x95, 0xe6, 0x60, 0x2e, 0x08, 0x9a, 0xa9, 0x91, 0x8f, 0x08, 0xba, 0xe3, 0x5a, 0xe1, 0xca, 0xc7, 0xaf, 0x33, 0x69, 0x41, 0x29, 0xe9, 0x8f, 0x0d, 0xad, 0xad, 0xd9, 0x0e, 0xae, 0xb6, 0xee, 0xd2, 0x50, 0x24, 0x39, 0x0b, 0x1a, 0x60, 0xaf, 0x79, 0x47, 0x34, 0xc3, 0x97, 0xb0, 0xf5, 0x09, 0x86, 0x5b, 0x13, 0x4b, 0x28, 0x67, 0xc1, 0x15, 0xd6, 0xf4, 0x89, 0xb6, 0xdd, 0x7e, 0x3c, 0x82, 0x99, 0x4b, 0x45, 0xdc, 0xe2, 0xa2, 0x3c, 0x6b, 0xc9, 0x02 }; /* K = 5fe61afddbdf04449b24295a52a1a037d3f31441a3cec138b7f0102db86ef132 */ static const uint8_t ac_dsa_vect211_out[] = { /* R */ 0x6a, 0x47, 0xea, 0x57, 0xce, 0xae, 0xcc, 0x11, 0x6d, 0x71, 0x90, 0xff, 0x6c, 0x6d, 0xd9, 0x83, 0x1a, 0xb7, 0x5b, 0x4b, 0xf6, 0xcb, 0x29, 0x10, 0x83, 0xe4, 0x26, 0x8b, 0x48, 0x6e, 0xd2, 0x45, /* S */ 0x01, 0x73, 0x55, 0xf6, 0x98, 0xa3, 0x2a, 0xbe, 0x9a, 0x4d, 0x4a, 0x7d, 0xda, 0x7c, 0x85, 0x95, 0x0c, 0xdd, 0xc3, 0x48, 0xab, 0x8a, 0x67, 0x51, 0xe7, 0x2f, 0xdd, 0xc0, 0x1a, 0xa5, 0xd1, 0xf0 }; #define ac_dsa_vect212_prime ac_dsa_vect211_prime #define ac_dsa_vect212_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect212_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect212_ptx[] = { /* Msg */ 0xb2, 0xf5, 0x69, 0x48, 0xa3, 0x36, 0x98, 0x2a, 0x5b, 0xcb, 0x4b, 0xb5, 0xd7, 0x9e, 0x3f, 0xe5, 0xc3, 0x60, 0x81, 0xbd, 0x28, 0x6e, 0x6e, 0x02, 0x1a, 0xb2, 0x9b, 0x52, 0x2f, 0x0b, 0xe5, 0xff, 0x5e, 0x81, 0xe6, 0x38, 0xf2, 0x3d, 0x07, 0x81, 0xc2, 0x68, 0xa8, 0x9b, 0x09, 0x33, 0x25, 0x75, 0xcb, 0x31, 0xc0, 0x80, 0x4b, 0xbd, 0x34, 0xc8, 0x05, 0x89, 0xfb, 0x11, 0x57, 0x0f, 0xc6, 0x5b, 0x3f, 0x67, 0x61, 0x26, 0x05, 0xa9, 0x41, 0x1c, 0xda, 0xb3, 0xac, 0x00, 0xff, 0x3f, 0xce, 0x33, 0xab, 0x22, 0xc4, 0x6d, 0x26, 0xbf, 0x9c, 0x3f, 0xc5, 0xad, 0x2d, 0x90, 0x18, 0xde, 0xb9, 0xb6, 0x69, 0xb5, 0x0f, 0xbf, 0xba, 0xf8, 0xbe, 0xd6, 0x23, 0x0c, 0x7b, 0xd6, 0x21, 0xd5, 0x64, 0xfb, 0x1a, 0xf9, 0x53, 0xf0, 0xe8, 0x2c, 0x5b, 0x55, 0x20, 0xab, 0x97, 0xba, 0xcc, 0xf5, 0x8d, 0x6e }; static const uint8_t ac_dsa_vect212_priv_val[] = { /* X */ 0x91, 0xe0, 0x16, 0x26, 0x20, 0x88, 0x63, 0xa9, 0x54, 0xeb, 0x89, 0x87, 0xf8, 0xe9, 0x87, 0xc8, 0xe6, 0x21, 0x35, 0x36, 0xbb, 0x18, 0xf5, 0xaf, 0xe3, 0xbd, 0x66, 0xa5, 0x25, 0xbb, 0xad, 0xfc }; static const uint8_t ac_dsa_vect212_pub_val[] = { /* Y */ 0x72, 0xb8, 0x4e, 0xb6, 0xa6, 0x0c, 0x68, 0x6f, 0x74, 0xf3, 0x76, 0xe2, 0x6b, 0x2e, 0x47, 0xe4, 0x4a, 0x6d, 0x5d, 0xd9, 0x2c, 0x06, 0xfd, 0xe4, 0x9f, 0xaa, 0xd0, 0xaf, 0x9b, 0x11, 0xe4, 0x31, 0x47, 0xce, 0x93, 0x08, 0xef, 0x35, 0x01, 0xa7, 0x52, 0xe7, 0xbf, 0x18, 0xe9, 0xe6, 0xdf, 0x3c, 0x0a, 0x49, 0xc4, 0x4c, 0xd2, 0x51, 0x5a, 0x05, 0x50, 0x8f, 0x80, 0x60, 0xa6, 0x1e, 0x6e, 0x6f, 0x1b, 0x2e, 0xcf, 0x14, 0xb3, 0x38, 0xcf, 0x0f, 0xd8, 0xb7, 0xcc, 0xbe, 0x67, 0x8d, 0x52, 0xdb, 0xdf, 0x20, 0x35, 0x2c, 0x15, 0x5a, 0x2b, 0xd5, 0x17, 0xd8, 0x27, 0xd6, 0xce, 0xfb, 0xf4, 0x8c, 0x56, 0x79, 0xc9, 0x98, 0x29, 0x8e, 0x21, 0x86, 0xef, 0x10, 0x98, 0x16, 0x0d, 0xfb, 0x65, 0x91, 0x45, 0x06, 0xa1, 0x77, 0x94, 0x3a, 0x4a, 0x05, 0x82, 0x82, 0x38, 0x2d, 0x32, 0x7a, 0xd3, 0x6f, 0x88, 0x30, 0x1b, 0xe6, 0x93, 0xc0, 0x20, 0x00, 0xc7, 0x24, 0x63, 0xe6, 0x82, 0x42, 0x1a, 0x02, 0x37, 0x80, 0x4d, 0xbb, 0x27, 0x33, 0x5c, 0x78, 0xe8, 0x49, 0x5f, 0xac, 0x78, 0x42, 0xd2, 0xaa, 0xfe, 0xbf, 0x90, 0xf3, 0xc3, 0x60, 0x5f, 0x75, 0x86, 0x15, 0xdf, 0x98, 0x9f, 0xdb, 0xd0, 0x6e, 0x23, 0xe4, 0xad, 0x69, 0x74, 0xb6, 0x23, 0x84, 0xf0, 0xaa, 0x01, 0x02, 0x7d, 0xb8, 0x9a, 0xc3, 0xdc, 0xb0, 0x1c, 0xb5, 0x25, 0x8c, 0xdb, 0xd9, 0xc1, 0x93, 0x72, 0xa6, 0xc4, 0xaa, 0xdf, 0x27, 0x29, 0x80, 0x62, 0xac, 0x9a, 0x16, 0xde, 0x2e, 0xb0, 0x76, 0xe1, 0x67, 0xad, 0x7c, 0x65, 0xd0, 0x50, 0x5c, 0x8f, 0xce, 0xcf, 0x35, 0x9b, 0xb5, 0xd0, 0x5c, 0xd2, 0x2e, 0x7d, 0x48, 0x62, 0x9a, 0xf5, 0x39, 0xfe, 0x7f, 0x60, 0xe2, 0x3e, 0x95, 0x7c, 0x84, 0xc7, 0xa6, 0x1a, 0xc9, 0x2b, 0xf8 }; /* K = 6aff566d97cc48ef6bac507d64973c95da14fd704d3a5332aaaca2bdf21e894e */ static const uint8_t ac_dsa_vect212_out[] = { /* R */ 0x43, 0x70, 0x4e, 0x96, 0xcc, 0x8d, 0x63, 0xe6, 0xf5, 0xb7, 0xe1, 0x18, 0xcb, 0x7c, 0x03, 0x0d, 0x0b, 0xd5, 0x63, 0xb8, 0xf7, 0xa1, 0xa3, 0x04, 0xb3, 0x68, 0xa6, 0xc6, 0x6d, 0x7e, 0x7f, 0xa8, /* S */ 0x49, 0x0d, 0xa4, 0x3f, 0xd0, 0xf1, 0x9f, 0xec, 0x4e, 0xe0, 0x81, 0xcc, 0xe2, 0x5d, 0xf6, 0xb2, 0x72, 0x0b, 0x1a, 0x76, 0xb0, 0x23, 0xc1, 0x57, 0x04, 0xdd, 0x03, 0xef, 0x1c, 0x3e, 0x48, 0xa7 }; #define ac_dsa_vect213_prime ac_dsa_vect211_prime #define ac_dsa_vect213_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect213_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect213_ptx[] = { /* Msg */ 0x9a, 0xe8, 0x47, 0x93, 0x27, 0xb8, 0xb8, 0xa5, 0x7f, 0x57, 0x0f, 0x6e, 0xc7, 0x6a, 0x1a, 0xc6, 0xf0, 0x2b, 0x19, 0x8c, 0x60, 0x48, 0xa1, 0xf0, 0x96, 0xe6, 0xce, 0x56, 0x30, 0xb6, 0xca, 0xf3, 0x63, 0x17, 0x64, 0x13, 0xd8, 0x80, 0x33, 0xb1, 0xcd, 0x07, 0xf4, 0xd3, 0x96, 0x0a, 0x12, 0xdb, 0xae, 0x8a, 0x65, 0x91, 0x74, 0xbb, 0x87, 0xc3, 0x7a, 0xca, 0x6e, 0xc5, 0x6e, 0xd5, 0xa6, 0x61, 0x9b, 0x8b, 0xa6, 0x76, 0xb6, 0x50, 0xd9, 0x7c, 0x6a, 0x21, 0xaf, 0x02, 0x39, 0x85, 0xdc, 0x36, 0x1f, 0xa2, 0x34, 0xb2, 0xb3, 0xc1, 0x7e, 0x77, 0x70, 0x3b, 0xa9, 0x9a, 0xe3, 0x21, 0x12, 0x60, 0xda, 0x10, 0xa6, 0x0f, 0x24, 0x0e, 0xee, 0xf4, 0x78, 0xf2, 0x64, 0x11, 0x84, 0xa2, 0x81, 0x71, 0x6a, 0xe5, 0x78, 0x88, 0x11, 0x7d, 0xba, 0x99, 0x28, 0x53, 0xf4, 0x94, 0xac, 0x3c, 0xaa, 0x45 }; static const uint8_t ac_dsa_vect213_priv_val[] = { /* X */ 0x8a, 0x56, 0x24, 0x69, 0x4a, 0x25, 0x20, 0x9a, 0x5f, 0xb3, 0x98, 0x3e, 0xca, 0xc3, 0xfe, 0xdf, 0x50, 0x8e, 0x0b, 0x23, 0xe8, 0x78, 0xf6, 0x0a, 0x18, 0xec, 0x0e, 0x89, 0x7c, 0x37, 0x9f, 0x7b }; static const uint8_t ac_dsa_vect213_pub_val[] = { /* Y */ 0xce, 0x34, 0x8b, 0x5c, 0xb3, 0xd3, 0x68, 0x08, 0x42, 0x2a, 0x50, 0x16, 0xdd, 0x58, 0x73, 0xdf, 0x79, 0xf3, 0xcb, 0xb5, 0xe1, 0xb4, 0x58, 0xe8, 0xc1, 0x11, 0x02, 0x26, 0x04, 0x75, 0x43, 0xd9, 0x65, 0x76, 0x9a, 0x11, 0x2a, 0xdb, 0x4f, 0xce, 0xd0, 0xd1, 0x46, 0x23, 0x09, 0x62, 0xa8, 0xd4, 0x13, 0x22, 0x5c, 0xc7, 0x0d, 0x81, 0x0d, 0x40, 0xe6, 0xa7, 0x2e, 0x6d, 0xc8, 0x0d, 0xb5, 0x09, 0x40, 0x0c, 0x09, 0xd2, 0x63, 0xd6, 0x62, 0x06, 0x96, 0x6e, 0xd5, 0x1a, 0xb6, 0x59, 0x30, 0xa2, 0xaa, 0xc9, 0x9f, 0xcc, 0xe3, 0xa3, 0x98, 0xb6, 0x4d, 0x59, 0x09, 0x76, 0x83, 0xd2, 0xba, 0xa5, 0x76, 0x82, 0x70, 0x5a, 0xbc, 0x32, 0xeb, 0x8c, 0x32, 0xd6, 0xf1, 0xe7, 0xd9, 0x4c, 0xa1, 0x7e, 0xd7, 0x06, 0x78, 0x22, 0xcd, 0x20, 0xfb, 0xa3, 0x79, 0x5e, 0xd1, 0x84, 0x3c, 0x01, 0xb0, 0xd7, 0x55, 0x1c, 0x7c, 0x4c, 0x75, 0x9d, 0x53, 0xa4, 0x19, 0x14, 0x83, 0xbd, 0xc6, 0xe3, 0x12, 0x1c, 0x2b, 0xc1, 0x26, 0x07, 0x70, 0x1f, 0x43, 0xe3, 0xba, 0x38, 0x2c, 0x67, 0x66, 0x81, 0x9d, 0xb0, 0x7e, 0xf9, 0xc5, 0x95, 0x86, 0x93, 0x75, 0x14, 0x77, 0x2c, 0x2e, 0xcc, 0xde, 0x4c, 0x54, 0xd9, 0x25, 0x75, 0x73, 0x4c, 0x45, 0xa8, 0xe8, 0x32, 0xc4, 0x41, 0x7b, 0x43, 0xa9, 0x2c, 0x9a, 0xbd, 0x15, 0x22, 0x59, 0xcc, 0x0a, 0x96, 0x9b, 0xac, 0x64, 0xb2, 0x37, 0xbb, 0x3a, 0x08, 0x26, 0xae, 0x72, 0x91, 0x9d, 0x7c, 0x2d, 0xd2, 0xef, 0xdf, 0x03, 0xe8, 0x37, 0x01, 0x98, 0x0c, 0x2a, 0x8f, 0x50, 0xce, 0x6e, 0x44, 0xd7, 0xcc, 0x88, 0x48, 0x64, 0x5b, 0xf4, 0x0a, 0xef, 0xdf, 0x24, 0xfa, 0x7a, 0x6d, 0xce, 0x5a, 0x3b, 0x9a, 0xca, 0x6f, 0x01, 0x76, 0x18, 0xa6, 0x4d, 0x91, 0xce, 0x4b }; /* K = 86c3ce567e7995a61bc00e088ff2f2a425433a453252b1a729d8d85ed506bdec */ static const uint8_t ac_dsa_vect213_out[] = { /* R */ 0x00, 0x91, 0xd7, 0x50, 0xad, 0x9a, 0x4f, 0x29, 0x57, 0x3f, 0xd4, 0x57, 0xa5, 0x89, 0x1b, 0x68, 0xd4, 0xb6, 0xc1, 0x57, 0x03, 0xa2, 0xbc, 0x19, 0x2c, 0x7c, 0x62, 0x0c, 0x4e, 0x4c, 0x45, 0x29, /* S */ 0x92, 0xc4, 0x09, 0xc8, 0x97, 0x79, 0x75, 0xa4, 0x17, 0xd9, 0xf5, 0xe0, 0xe2, 0xdc, 0x70, 0x68, 0x3a, 0x53, 0xa9, 0x56, 0x62, 0xad, 0x27, 0x0a, 0xe3, 0x5d, 0x49, 0x65, 0x67, 0xa9, 0xa2, 0xfc }; #define ac_dsa_vect214_prime ac_dsa_vect211_prime #define ac_dsa_vect214_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect214_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect214_ptx[] = { /* Msg */ 0xe5, 0xa1, 0xa3, 0x44, 0xc2, 0x5b, 0xa0, 0xcb, 0xbc, 0xff, 0xe6, 0x80, 0x01, 0x35, 0xf2, 0xed, 0xe8, 0x10, 0x49, 0x18, 0x0f, 0xb2, 0x75, 0x9f, 0xd9, 0xe1, 0xaf, 0x3b, 0x81, 0x6a, 0xd5, 0x43, 0x6a, 0x24, 0xfa, 0xf2, 0x9c, 0xf3, 0xad, 0x91, 0xcf, 0x41, 0x33, 0x32, 0xf4, 0x54, 0xf7, 0x4a, 0x9d, 0x4f, 0x5e, 0xfe, 0x76, 0xcf, 0x02, 0x51, 0x2c, 0x27, 0x3c, 0xd5, 0x25, 0xf0, 0x4a, 0xfd, 0xb5, 0xc2, 0x4b, 0x05, 0x88, 0xd6, 0x11, 0xd7, 0x21, 0x53, 0x68, 0x0d, 0x1e, 0x39, 0x95, 0xe0, 0xaa, 0x75, 0x0e, 0x90, 0x77, 0xb0, 0x75, 0x2b, 0xd4, 0x44, 0x2b, 0xf7, 0xbf, 0xa8, 0xdb, 0xa3, 0x8e, 0x1c, 0x5e, 0x7d, 0xdd, 0x68, 0x7f, 0x55, 0xaa, 0x54, 0xc1, 0x38, 0xc7, 0xe6, 0xd5, 0xf0, 0x64, 0xf3, 0xec, 0x55, 0x94, 0x2d, 0xc1, 0x92, 0xdd, 0x99, 0x6e, 0x55, 0x36, 0x33, 0xaf, 0xd6 }; static const uint8_t ac_dsa_vect214_priv_val[] = { /* X */ 0x97, 0x6f, 0xb0, 0x67, 0x15, 0x7b, 0x21, 0x4a, 0x80, 0x65, 0x8e, 0x7e, 0xd2, 0xf5, 0x66, 0x91, 0x1b, 0x35, 0xb1, 0x67, 0x1e, 0x5c, 0x0b, 0xdd, 0x55, 0xff, 0x58, 0x11, 0xe8, 0x22, 0xbf, 0x82 }; static const uint8_t ac_dsa_vect214_pub_val[] = { /* Y */ 0x38, 0x59, 0xd4, 0x73, 0x5c, 0x14, 0xba, 0xee, 0xc1, 0x4b, 0x79, 0xcc, 0x26, 0x93, 0xff, 0xca, 0xc9, 0x00, 0xa2, 0xc2, 0x6e, 0xc6, 0x34, 0xa8, 0xe9, 0x77, 0xd2, 0x06, 0xad, 0x6e, 0xc7, 0xb1, 0x3f, 0x2d, 0x45, 0x0e, 0xf0, 0x47, 0x82, 0xec, 0x0a, 0xbb, 0x0d, 0xa4, 0x8f, 0x00, 0x06, 0x28, 0xce, 0xc1, 0xf6, 0xe9, 0xa7, 0x27, 0xbb, 0x59, 0xd7, 0xc0, 0xf0, 0xd7, 0x43, 0xf5, 0x13, 0xac, 0x09, 0x25, 0xbe, 0xb6, 0x1b, 0xf3, 0xad, 0x75, 0x82, 0x4f, 0xff, 0xae, 0x1e, 0xb7, 0x83, 0xeb, 0x1b, 0x68, 0xfc, 0x40, 0xd2, 0x87, 0x70, 0xe2, 0x80, 0xfd, 0xe2, 0x38, 0x44, 0xa1, 0x44, 0xd4, 0xb1, 0xa9, 0x54, 0x09, 0xb7, 0x55, 0xc7, 0xff, 0x2e, 0x5c, 0x67, 0x81, 0x1f, 0x3b, 0x1c, 0x2e, 0xb9, 0x6c, 0xb1, 0x59, 0xa6, 0x42, 0xd8, 0x4d, 0xd7, 0xb5, 0xdc, 0xcc, 0x2c, 0x0a, 0xef, 0x06, 0xd1, 0xcd, 0x54, 0xea, 0xc9, 0x4a, 0x11, 0x27, 0x3f, 0x94, 0x98, 0xf1, 0xe7, 0xa7, 0xcd, 0x79, 0xc1, 0x08, 0xe4, 0x96, 0xdc, 0xf5, 0x73, 0xef, 0x3a, 0x66, 0x10, 0xb7, 0x73, 0x1a, 0xb1, 0x4c, 0x16, 0x2c, 0xe8, 0x37, 0x7c, 0xb9, 0xb9, 0x07, 0x88, 0xe3, 0x56, 0xf5, 0x1f, 0x4b, 0x51, 0xa1, 0xec, 0x8b, 0xd8, 0x6b, 0xd8, 0x8f, 0xd4, 0xc3, 0x8e, 0x62, 0xca, 0xd6, 0x19, 0xab, 0x89, 0x41, 0xbc, 0xb9, 0x8a, 0x2f, 0x35, 0xee, 0x51, 0x2f, 0x4f, 0x8f, 0xfd, 0xd5, 0xee, 0x70, 0xca, 0xed, 0x84, 0x67, 0x15, 0x6b, 0x89, 0x3b, 0x35, 0x32, 0xa0, 0xa2, 0xaa, 0x51, 0x99, 0xce, 0xae, 0xcc, 0x5b, 0x19, 0x4b, 0xc0, 0x57, 0x96, 0x4c, 0xf4, 0x50, 0x66, 0x8c, 0x44, 0xf2, 0x7e, 0xc8, 0x0d, 0xe2, 0x1e, 0xa1, 0xa4, 0x15, 0xee, 0x6a, 0x65, 0x69, 0x83, 0x23, 0x94, 0xf6, 0xb4, 0x05, 0xd1 }; /* K = 1ef4f08defdb5c59a3df3358e083ce804c969d046ab67f2f938eb1a8f06a5d0a */ static const uint8_t ac_dsa_vect214_out[] = { /* R */ 0x44, 0x36, 0x44, 0xe1, 0x27, 0xe3, 0x81, 0xb1, 0x7b, 0xb6, 0x6c, 0x53, 0x50, 0x97, 0x18, 0xa5, 0x8a, 0x30, 0xf9, 0x27, 0x42, 0x58, 0x06, 0xa6, 0x28, 0x40, 0x11, 0x9e, 0x78, 0xc2, 0x93, 0xb7, /* S */ 0x3f, 0x01, 0xe5, 0xd1, 0xe9, 0xfd, 0xb1, 0xcf, 0xda, 0x25, 0xef, 0xf3, 0xca, 0xcc, 0xf4, 0xed, 0xf5, 0x99, 0xfe, 0xa2, 0x77, 0x20, 0x1c, 0xf2, 0xb0, 0x1f, 0xfd, 0x7c, 0xb1, 0xa9, 0xa7, 0x27 }; #define ac_dsa_vect215_prime ac_dsa_vect211_prime #define ac_dsa_vect215_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect215_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect215_ptx[] = { /* Msg */ 0xb8, 0x8c, 0x21, 0x20, 0x70, 0xbe, 0x39, 0x8a, 0x1f, 0x81, 0xe8, 0x5d, 0xfd, 0x71, 0xdc, 0x24, 0x24, 0xa3, 0x8a, 0xe3, 0x8a, 0x9d, 0x61, 0x08, 0x51, 0x86, 0x50, 0x4f, 0x4c, 0x2c, 0xbf, 0xa4, 0x92, 0xb7, 0x6d, 0xbc, 0xc0, 0x51, 0xce, 0xfd, 0xe0, 0x61, 0x6a, 0x7e, 0x33, 0x10, 0xb4, 0xbf, 0x17, 0x24, 0x4d, 0xe7, 0xd1, 0x0f, 0x84, 0x7c, 0xe2, 0xa9, 0xf6, 0x65, 0x94, 0x8e, 0x76, 0x72, 0x4d, 0x8f, 0x1f, 0x4b, 0xb3, 0xa6, 0x19, 0x19, 0xb2, 0xec, 0x7d, 0xc4, 0x7a, 0xd8, 0xa7, 0x2c, 0xb5, 0x99, 0x8b, 0x79, 0xfe, 0x3a, 0x15, 0x63, 0x95, 0xe4, 0xae, 0x88, 0xe6, 0x82, 0xb1, 0xdd, 0x16, 0xc5, 0x2d, 0x64, 0xcb, 0x4b, 0x31, 0xc3, 0x9d, 0x4a, 0x42, 0xa2, 0x1e, 0x62, 0x42, 0xdc, 0x0c, 0xdb, 0xb0, 0xac, 0xf3, 0xd4, 0x71, 0x82, 0x63, 0x8c, 0x5f, 0x21, 0x6d, 0xc6, 0xe8, 0xb1 }; static const uint8_t ac_dsa_vect215_priv_val[] = { /* X */ 0x02, 0x16, 0x3c, 0xda, 0x61, 0x2e, 0x84, 0xeb, 0x5e, 0xa9, 0xe4, 0xe0, 0x68, 0xb1, 0x4c, 0x10, 0xda, 0xd0, 0x73, 0x40, 0x91, 0x54, 0xd8, 0x6f, 0xea, 0x6a, 0xae, 0xde, 0x59, 0x53, 0x8d, 0x2e }; static const uint8_t ac_dsa_vect215_pub_val[] = { /* Y */ 0x54, 0x1c, 0x69, 0x0f, 0x4c, 0xa0, 0xc4, 0x2e, 0x52, 0x67, 0x64, 0x6f, 0x78, 0xef, 0x42, 0xfd, 0x68, 0xc3, 0x63, 0x37, 0x5b, 0x2e, 0x98, 0x3b, 0xe4, 0x44, 0xe4, 0x81, 0x9e, 0x63, 0xcd, 0xc1, 0x29, 0x01, 0x8b, 0xd3, 0xb8, 0xc6, 0xda, 0x8b, 0x70, 0x7c, 0x19, 0x6c, 0x35, 0xc9, 0x3e, 0xab, 0xee, 0x10, 0xe8, 0x75, 0xc4, 0x1f, 0xd9, 0x25, 0xbb, 0x3c, 0xe8, 0x06, 0x96, 0x93, 0x5d, 0x16, 0x31, 0x3f, 0xd3, 0xa2, 0x68, 0x58, 0xec, 0xcf, 0x2d, 0x50, 0x7f, 0xc2, 0xa1, 0x09, 0x50, 0x52, 0x5c, 0x67, 0x0d, 0xad, 0xc8, 0x83, 0xdc, 0x67, 0x79, 0xac, 0x1c, 0xe8, 0x66, 0xd8, 0x82, 0x03, 0x95, 0xf3, 0x54, 0x1c, 0x86, 0x30, 0x18, 0x33, 0x7a, 0x6b, 0xe9, 0x44, 0xdd, 0xc6, 0x44, 0xaa, 0xa6, 0xc0, 0x07, 0x19, 0x7d, 0x7a, 0x5f, 0x9a, 0xa5, 0x3a, 0x5e, 0x11, 0x80, 0xad, 0x51, 0xc9, 0x8b, 0xe9, 0xd5, 0x61, 0xa8, 0x5f, 0xe9, 0x73, 0x41, 0x60, 0xca, 0x35, 0xe4, 0xfa, 0xdb, 0x02, 0x52, 0x7b, 0xa0, 0xfa, 0x58, 0x04, 0x1b, 0x4d, 0x96, 0x38, 0x5f, 0x7f, 0x8f, 0xf6, 0xae, 0x75, 0x6a, 0xdd, 0x49, 0x68, 0xc0, 0xc2, 0x79, 0x9c, 0x0d, 0x68, 0x0f, 0x66, 0xc8, 0xce, 0x96, 0xf4, 0x98, 0x22, 0x87, 0x38, 0xe3, 0xe8, 0x7b, 0x7c, 0x86, 0x63, 0x44, 0xdb, 0x7d, 0x5a, 0x4e, 0xc3, 0x28, 0x24, 0x31, 0xae, 0xe5, 0x95, 0x1d, 0x9b, 0x4c, 0x83, 0xec, 0x2a, 0x0c, 0xda, 0x36, 0xcb, 0x2e, 0x2c, 0x43, 0x73, 0x63, 0xce, 0xba, 0x4e, 0x8e, 0x9f, 0x61, 0x28, 0x43, 0x9d, 0x12, 0xc5, 0x18, 0x68, 0xd0, 0xcb, 0x1f, 0x61, 0xe5, 0x3a, 0x68, 0xd4, 0xe7, 0x1c, 0x5a, 0x9e, 0x7d, 0xe4, 0x3c, 0x6d, 0xfc, 0xa2, 0x6f, 0x17, 0x41, 0xac, 0xa9, 0x16, 0xe4, 0x28, 0x26, 0x53, 0xbf, 0xc1 }; /* K = 42cc30e9591b42486ce9998ab7594ddabc5328ca2e931e08c75b76bbe1f8b978 */ static const uint8_t ac_dsa_vect215_out[] = { /* R */ 0x07, 0x8a, 0x71, 0x46, 0xa2, 0xc5, 0x09, 0xb9, 0x7a, 0x6a, 0x8c, 0x96, 0x3b, 0xaf, 0x1f, 0xbf, 0xbd, 0x1a, 0x2a, 0x5a, 0xa2, 0x14, 0xa1, 0x5e, 0xa4, 0x57, 0x63, 0xf0, 0xe7, 0x93, 0x0b, 0xeb, /* S */ 0x29, 0x79, 0xcb, 0xf5, 0x9a, 0xdb, 0x70, 0xf2, 0x8a, 0xc4, 0xfc, 0xb6, 0x92, 0x97, 0x49, 0x8f, 0x81, 0x63, 0x76, 0x4c, 0x62, 0xb3, 0x19, 0x63, 0xda, 0x9c, 0x8f, 0x9c, 0x0c, 0x43, 0xe0, 0x75 }; #define ac_dsa_vect216_prime ac_dsa_vect211_prime #define ac_dsa_vect216_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect216_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect216_ptx[] = { /* Msg */ 0x4a, 0xdf, 0x1e, 0xd4, 0xfb, 0xb5, 0xb8, 0x2d, 0x7a, 0x2b, 0x1a, 0x29, 0x38, 0x43, 0x07, 0x53, 0xa6, 0x20, 0x7d, 0xa1, 0xcc, 0x04, 0x95, 0x74, 0xf0, 0xa1, 0x93, 0x14, 0x27, 0x2f, 0x9a, 0x80, 0xc6, 0xa5, 0x34, 0x98, 0xb7, 0x8e, 0x5c, 0x0b, 0x74, 0x01, 0xce, 0x48, 0x5f, 0xd4, 0xba, 0xeb, 0xc9, 0x66, 0xda, 0x6c, 0x1f, 0xcb, 0x02, 0x58, 0x16, 0xcf, 0xae, 0x32, 0xb5, 0x8a, 0xa8, 0x7f, 0x5e, 0x88, 0x85, 0x05, 0x47, 0x35, 0xf9, 0x3d, 0xf1, 0x9e, 0xd3, 0x2c, 0x81, 0x97, 0x86, 0xd4, 0x10, 0x9d, 0xbd, 0xa0, 0x47, 0xd6, 0x8c, 0x05, 0x89, 0x33, 0x07, 0x15, 0xe1, 0x05, 0x22, 0x64, 0x3b, 0xbe, 0x27, 0xe3, 0x2c, 0x0d, 0xc9, 0xc5, 0x83, 0x36, 0xbe, 0x30, 0x5b, 0x4c, 0x0c, 0x98, 0x1b, 0x40, 0xe0, 0xee, 0xda, 0x0d, 0xe4, 0x61, 0xd8, 0x44, 0x1c, 0x02, 0xc1, 0x8c, 0xea, 0xc5 }; static const uint8_t ac_dsa_vect216_priv_val[] = { /* X */ 0x5b, 0x44, 0xbf, 0xbb, 0x69, 0x27, 0x7f, 0xbe, 0x49, 0x7e, 0xc7, 0x29, 0x83, 0x88, 0x86, 0xe7, 0xa7, 0x87, 0xf3, 0x36, 0xc2, 0x46, 0x55, 0x15, 0x26, 0xb6, 0x60, 0xa7, 0x60, 0x3d, 0x16, 0x7e }; static const uint8_t ac_dsa_vect216_pub_val[] = { /* Y */ 0x8b, 0x69, 0x27, 0xfe, 0x29, 0x3a, 0xc9, 0x11, 0x1b, 0xa4, 0x06, 0x12, 0x5d, 0x6e, 0xbf, 0xbc, 0x30, 0xf9, 0x6c, 0xbf, 0xd6, 0x96, 0xfc, 0xac, 0x7d, 0xde, 0xd4, 0x23, 0x05, 0xc6, 0x10, 0x54, 0x53, 0xac, 0xcb, 0x1b, 0x0c, 0xa6, 0xf0, 0xf3, 0x16, 0x01, 0xf8, 0xc3, 0x4f, 0x96, 0xbb, 0x8e, 0xe4, 0xcc, 0xf1, 0x49, 0x92, 0x3a, 0x12, 0x82, 0x1d, 0xfa, 0xa2, 0xa3, 0x85, 0x9a, 0x39, 0xcf, 0x82, 0x56, 0x76, 0x09, 0xb2, 0x06, 0x0f, 0xf6, 0x09, 0x23, 0x2e, 0x90, 0x26, 0x1d, 0x66, 0xcf, 0x31, 0xfb, 0x92, 0x64, 0x67, 0x1f, 0x3f, 0x1b, 0xff, 0x6c, 0x8a, 0x95, 0x8e, 0x5c, 0xd0, 0x15, 0xdc, 0xc0, 0x2d, 0xfd, 0x2f, 0x02, 0xfb, 0x6a, 0x44, 0x3c, 0x2b, 0xf4, 0x5a, 0xbf, 0x13, 0x86, 0x20, 0x59, 0xdf, 0x98, 0x06, 0x6e, 0x00, 0x31, 0x1b, 0xb6, 0x43, 0x8b, 0x7f, 0xe2, 0xd9, 0x1e, 0x28, 0x75, 0x53, 0xd2, 0x54, 0x11, 0xf0, 0xfb, 0xa4, 0x74, 0x17, 0xc2, 0x90, 0x2f, 0x97, 0x8c, 0x57, 0x25, 0x7a, 0xe4, 0xea, 0xa3, 0xf9, 0x93, 0x17, 0xd5, 0xad, 0xee, 0x0f, 0x9a, 0xdf, 0x4d, 0x41, 0xe4, 0x10, 0x72, 0x55, 0x2b, 0x3f, 0x51, 0xeb, 0x99, 0x36, 0xa7, 0xf6, 0x3c, 0xc2, 0x8b, 0x46, 0x6f, 0xab, 0x64, 0x29, 0xd0, 0x68, 0x68, 0xd1, 0x8c, 0xa0, 0x9a, 0xba, 0x63, 0x40, 0x93, 0x76, 0x71, 0x92, 0x04, 0x9b, 0x02, 0xbc, 0xb7, 0x52, 0xeb, 0x67, 0x4c, 0x98, 0xa8, 0x68, 0x69, 0xd6, 0x72, 0x6f, 0x74, 0x2e, 0x57, 0xef, 0x8c, 0x3d, 0x45, 0x31, 0x17, 0x1c, 0x64, 0xf0, 0x3e, 0x10, 0xa4, 0xe4, 0x40, 0x39, 0xa4, 0x4d, 0x40, 0x7e, 0xbf, 0xc6, 0xb5, 0x6a, 0x7c, 0xdf, 0x6b, 0x17, 0x39, 0x4b, 0x53, 0xb5, 0x60, 0x43, 0x47, 0xc5, 0x1c, 0xf3, 0x75, 0x55, 0x1b, 0x73, 0x06 }; /* K = 5f02472e007874056abe7194e80845b81baeaf4f6f564d3640373757f4252f57 */ static const uint8_t ac_dsa_vect216_out[] = { /* R */ 0x5b, 0x20, 0x11, 0x16, 0xd8, 0xbb, 0xc8, 0x7d, 0xb9, 0x90, 0x01, 0x70, 0x7b, 0x56, 0x7e, 0x7c, 0x34, 0x51, 0xd8, 0x02, 0xfa, 0x6c, 0x67, 0x9b, 0xf3, 0xdb, 0x34, 0x56, 0x71, 0x1a, 0x19, 0x13, /* S */ 0x5b, 0xe7, 0xe4, 0xc4, 0x93, 0xfd, 0x5d, 0x19, 0xb7, 0x71, 0x37, 0x31, 0x41, 0x29, 0x4d, 0xaa, 0xd9, 0x76, 0x56, 0xa3, 0xdb, 0xe3, 0xfd, 0x2a, 0xbb, 0xd3, 0xb6, 0xc6, 0x2c, 0x16, 0x61, 0x26 }; #define ac_dsa_vect217_prime ac_dsa_vect211_prime #define ac_dsa_vect217_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect217_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect217_ptx[] = { /* Msg */ 0xbd, 0x49, 0x1c, 0xf6, 0x8b, 0x34, 0xf7, 0xba, 0x9a, 0xfe, 0x0c, 0x6e, 0xf5, 0xf2, 0xb7, 0x95, 0x6e, 0xf9, 0x64, 0x46, 0x5f, 0x28, 0xb2, 0x79, 0x7b, 0xc1, 0xd6, 0xe6, 0x70, 0xa6, 0xd8, 0x17, 0x30, 0xee, 0x29, 0x93, 0xd0, 0xb4, 0xaa, 0x96, 0x90, 0x51, 0x57, 0x02, 0x5d, 0x77, 0x5b, 0xa1, 0x04, 0xe7, 0xc1, 0x9b, 0x3b, 0x37, 0x2e, 0x85, 0x20, 0x26, 0xb1, 0x28, 0x6c, 0xbc, 0x6a, 0x48, 0xa1, 0x0c, 0xb9, 0x37, 0x8e, 0x97, 0xad, 0x96, 0x6f, 0x9c, 0xf0, 0x39, 0x17, 0xee, 0x8d, 0xb7, 0x5b, 0x62, 0x64, 0xe9, 0xb0, 0xa4, 0x8a, 0x0a, 0xe1, 0x0c, 0x2f, 0x46, 0x44, 0x47, 0x10, 0xd4, 0x23, 0x41, 0x26, 0xce, 0x45, 0x6b, 0x9f, 0xd1, 0x1a, 0xb7, 0xa3, 0x50, 0x49, 0x48, 0xd0, 0x46, 0xd5, 0xf4, 0x38, 0xd8, 0x93, 0xd9, 0xb1, 0x05, 0x2b, 0x8f, 0xac, 0x95, 0x47, 0x41, 0x54, 0x72 }; static const uint8_t ac_dsa_vect217_priv_val[] = { /* X */ 0x60, 0x9a, 0x37, 0x2d, 0x38, 0x44, 0xca, 0x82, 0x24, 0xdf, 0xe7, 0x80, 0xb4, 0x25, 0xe1, 0xa7, 0xc0, 0x0d, 0x09, 0x95, 0x7a, 0x86, 0x2d, 0xe6, 0xf6, 0x40, 0xaf, 0x57, 0xc0, 0x86, 0xdd, 0x6d }; static const uint8_t ac_dsa_vect217_pub_val[] = { /* Y */ 0xa9, 0x2e, 0x44, 0x65, 0x10, 0x76, 0x4e, 0xe1, 0xcf, 0x81, 0xc6, 0xb5, 0x9b, 0x51, 0x60, 0xa7, 0x60, 0x8f, 0xf8, 0x95, 0x2d, 0x04, 0x5d, 0xd6, 0x9f, 0x03, 0x4f, 0xdf, 0xef, 0x93, 0xf6, 0x33, 0x60, 0x7e, 0xc2, 0x09, 0xb1, 0x06, 0xc6, 0xac, 0x8f, 0x0c, 0xc6, 0xff, 0xa6, 0x4b, 0xb9, 0xa4, 0x48, 0x45, 0x60, 0xb8, 0x38, 0xd6, 0xf2, 0x4c, 0x99, 0x3a, 0x95, 0x4e, 0xfc, 0x9d, 0x5e, 0xe1, 0x66, 0x56, 0xaa, 0xba, 0x2a, 0x0d, 0x5a, 0x94, 0xe7, 0xa3, 0x46, 0xc7, 0xe5, 0x01, 0xaf, 0x83, 0xf1, 0x31, 0xdb, 0x9e, 0x0c, 0xab, 0x87, 0x89, 0xfa, 0xb1, 0x9b, 0xd5, 0x91, 0xec, 0x22, 0x7f, 0x39, 0xb3, 0x49, 0xbe, 0x7f, 0x8d, 0x0d, 0xf5, 0x8c, 0xa0, 0x39, 0x6e, 0xfb, 0x1e, 0x76, 0x54, 0x93, 0x35, 0x90, 0x4b, 0x88, 0xec, 0x21, 0xcd, 0x32, 0x65, 0xc5, 0x43, 0xc4, 0xe8, 0x0e, 0x9d, 0xde, 0x7c, 0xb5, 0xc9, 0xea, 0x8c, 0xdd, 0xa2, 0x3d, 0x96, 0xef, 0x1c, 0x38, 0x39, 0xad, 0xe8, 0xed, 0x4a, 0x5c, 0xd5, 0xfd, 0x98, 0xb7, 0x9b, 0xce, 0xee, 0xd9, 0xc6, 0x41, 0xc5, 0xa7, 0x75, 0x8d, 0x05, 0x29, 0xac, 0xea, 0xf2, 0x7b, 0x50, 0x14, 0xf1, 0x3d, 0xfc, 0xaa, 0x26, 0x7a, 0x14, 0xa0, 0x84, 0x1b, 0x36, 0x89, 0x7b, 0x6e, 0x1e, 0x89, 0x17, 0xb7, 0xf7, 0xcb, 0xf7, 0xcf, 0xf1, 0xd1, 0x95, 0x3a, 0xc4, 0x3c, 0xc0, 0x4a, 0xb0, 0x6c, 0xf1, 0x11, 0xe0, 0x06, 0x49, 0x7e, 0xb4, 0x2f, 0x28, 0xcb, 0xc9, 0x05, 0xd6, 0xf1, 0xcd, 0x5d, 0x83, 0x94, 0x85, 0x79, 0x83, 0xe1, 0xc9, 0xe5, 0x52, 0x01, 0x5a, 0x45, 0x1d, 0x0c, 0x13, 0xa6, 0x84, 0x8a, 0x8f, 0xc5, 0x6b, 0x79, 0xde, 0xc1, 0x72, 0x3a, 0x80, 0x67, 0xff, 0x18, 0x93, 0x1c, 0x85, 0x2c, 0xeb, 0x81, 0xaf, 0xfe, 0xc1 }; /* K = 8c70ac971b83f159d2e6ec26bca1463aadbc8e9987593f49a9258f7f0de9cb38 */ static const uint8_t ac_dsa_vect217_out[] = { /* R */ 0x0c, 0xf5, 0x26, 0xd8, 0xa0, 0xf9, 0xc9, 0x12, 0xd1, 0x43, 0xf3, 0xf8, 0xaf, 0xde, 0xd4, 0x59, 0x8b, 0x2a, 0x5a, 0xaf, 0x20, 0x0e, 0x07, 0x49, 0xea, 0x27, 0xde, 0xfe, 0xb7, 0xf2, 0x8f, 0x3a, /* S */ 0x87, 0x7a, 0x90, 0x66, 0xf6, 0xc5, 0xae, 0x78, 0x25, 0x1d, 0x9d, 0x14, 0x0b, 0xcf, 0x39, 0xae, 0x91, 0x2d, 0x18, 0xbf, 0x13, 0x1b, 0xdc, 0x7e, 0x9d, 0x61, 0x01, 0x2d, 0xaa, 0xa4, 0x29, 0x2c }; #define ac_dsa_vect218_prime ac_dsa_vect211_prime #define ac_dsa_vect218_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect218_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect218_ptx[] = { /* Msg */ 0xc0, 0x0a, 0x8a, 0x2f, 0xff, 0xd1, 0x0b, 0xc2, 0xea, 0xb6, 0x3b, 0x8e, 0x37, 0x5d, 0x0c, 0x10, 0xf9, 0xdf, 0xae, 0x28, 0x48, 0xba, 0x42, 0xaf, 0xe6, 0x08, 0x5a, 0xee, 0xc2, 0x6e, 0x21, 0xaf, 0x3e, 0xaa, 0x49, 0x3c, 0xe4, 0xb3, 0xd9, 0x5a, 0x31, 0xfa, 0x50, 0x2a, 0x60, 0xab, 0x88, 0xe8, 0x05, 0xf4, 0xfd, 0xf8, 0x89, 0xed, 0x91, 0xc1, 0x54, 0x21, 0x71, 0x80, 0x84, 0xcd, 0x0d, 0x64, 0x47, 0x95, 0x74, 0x9b, 0x1a, 0x6b, 0x18, 0x3d, 0x74, 0x78, 0x2d, 0x52, 0xc7, 0xba, 0xbf, 0x74, 0x00, 0x39, 0x3c, 0xee, 0x69, 0x8a, 0xf5, 0xdc, 0x01, 0x0c, 0x0f, 0xf7, 0xf5, 0xac, 0xdf, 0x02, 0x08, 0xf9, 0x3e, 0xe7, 0xe4, 0xef, 0x58, 0xda, 0x12, 0x3d, 0xfd, 0xe7, 0xf0, 0xa3, 0x4e, 0x20, 0x9b, 0xba, 0xec, 0x61, 0x00, 0x72, 0x93, 0xfd, 0x11, 0xaf, 0xa6, 0x0b, 0x65, 0x22, 0xc4, 0x5d }; static const uint8_t ac_dsa_vect218_priv_val[] = { /* X */ 0x68, 0x3e, 0x92, 0x48, 0x93, 0xdb, 0xbd, 0x75, 0x1e, 0x0a, 0x3f, 0x91, 0x08, 0x67, 0x47, 0x1a, 0x64, 0x10, 0xfe, 0xf5, 0x62, 0xcc, 0xa9, 0xf4, 0x64, 0x94, 0x3a, 0xbd, 0x88, 0xe0, 0x43, 0x0f }; static const uint8_t ac_dsa_vect218_pub_val[] = { /* Y */ 0x75, 0x60, 0x10, 0x5b, 0x85, 0x86, 0xc4, 0x53, 0x2b, 0xf1, 0xb5, 0x1e, 0x0d, 0x2c, 0xf9, 0xa7, 0x13, 0xa5, 0xea, 0x5d, 0x40, 0xe2, 0x62, 0xce, 0x01, 0xeb, 0xda, 0xf1, 0xee, 0x53, 0xd8, 0x57, 0x12, 0x9e, 0x15, 0x29, 0xa0, 0xf8, 0xdf, 0xf6, 0x3e, 0x86, 0x20, 0x2c, 0x11, 0x1c, 0x6e, 0xb2, 0x89, 0x43, 0x9c, 0xb1, 0x5c, 0xd5, 0x9f, 0xc2, 0x18, 0xab, 0xe6, 0x19, 0xc9, 0x51, 0x62, 0x50, 0xf1, 0x27, 0xfa, 0xfe, 0x9a, 0x53, 0x07, 0x62, 0x74, 0xf3, 0x06, 0xf0, 0xb7, 0x87, 0x1c, 0xff, 0xbd, 0x15, 0x6b, 0x1a, 0x88, 0x19, 0x79, 0x5f, 0x0a, 0x99, 0x55, 0x86, 0x47, 0x56, 0x65, 0x02, 0x74, 0xb8, 0x3e, 0x67, 0xca, 0xa4, 0xe2, 0x15, 0xf8, 0x33, 0xaf, 0xd5, 0xa7, 0x7d, 0x05, 0x94, 0xb2, 0x1b, 0x4b, 0x54, 0x35, 0x6a, 0x98, 0xa5, 0x6a, 0x0b, 0xf6, 0x17, 0x7f, 0xaf, 0xfb, 0x9f, 0xdf, 0xd8, 0x88, 0xd6, 0x53, 0x8a, 0x1c, 0xe7, 0x60, 0x59, 0x85, 0x4b, 0xd1, 0xf0, 0xa2, 0x07, 0x61, 0x28, 0x1d, 0x7b, 0x75, 0x17, 0x57, 0xc6, 0xec, 0xc9, 0xb1, 0xe8, 0x13, 0x11, 0x96, 0xd0, 0x66, 0x95, 0x97, 0x21, 0x3a, 0xe7, 0x3e, 0xdb, 0x99, 0x65, 0xda, 0x9f, 0xf3, 0x72, 0x42, 0x08, 0x51, 0x15, 0x50, 0x11, 0xf6, 0x91, 0xa0, 0x3a, 0x7f, 0x1e, 0x20, 0x40, 0x29, 0x15, 0x75, 0xb8, 0x6f, 0x59, 0x59, 0x98, 0xa0, 0x6e, 0xf7, 0x9f, 0x4e, 0xad, 0xba, 0xe2, 0xbd, 0x9e, 0x2e, 0x47, 0x7d, 0xd7, 0x26, 0x84, 0xd8, 0xef, 0xdc, 0x1e, 0x83, 0x5f, 0x7f, 0x0f, 0x5c, 0x93, 0x63, 0x5c, 0x18, 0x1b, 0x96, 0xcc, 0x7c, 0x0e, 0xaa, 0x27, 0xee, 0x62, 0xc9, 0x22, 0x7e, 0xd9, 0x48, 0x5a, 0x8c, 0x82, 0x2b, 0x32, 0x24, 0xe9, 0xe2, 0xb7, 0xac, 0xc1, 0x09, 0x56, 0xf3, 0xd4, 0x9a, 0x6f }; /* K = 3bf5f524e3a3903c149958d10ae68f0a87a03821445a98b0b9d08a3689738853 */ static const uint8_t ac_dsa_vect218_out[] = { /* R */ 0x98, 0xfe, 0xe1, 0x0c, 0x85, 0xab, 0x46, 0xd3, 0x34, 0x75, 0x87, 0x34, 0x81, 0x9e, 0x68, 0xb5, 0x04, 0x64, 0x39, 0xcd, 0x0b, 0x66, 0xbe, 0x26, 0xd4, 0x37, 0x60, 0x61, 0x3a, 0xc7, 0x7b, 0x8c, /* S */ 0x66, 0x5f, 0xab, 0x98, 0xdd, 0x43, 0x7e, 0x06, 0xa4, 0xf8, 0x77, 0xee, 0x21, 0x89, 0x86, 0xe3, 0x7c, 0x2c, 0xb2, 0xd2, 0x37, 0xe5, 0x98, 0xd9, 0x8f, 0x1b, 0x7d, 0x4e, 0x82, 0x9a, 0x84, 0x6b }; #define ac_dsa_vect219_prime ac_dsa_vect211_prime #define ac_dsa_vect219_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect219_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect219_ptx[] = { /* Msg */ 0x27, 0xf0, 0x1b, 0x47, 0xd1, 0x5f, 0x7d, 0x19, 0x6f, 0x26, 0x67, 0xb7, 0x5e, 0xd1, 0x5b, 0x89, 0xd7, 0x44, 0x3f, 0xb4, 0xfa, 0xb0, 0x68, 0xf4, 0xad, 0xb6, 0x71, 0x75, 0xca, 0x70, 0x07, 0x1d, 0x52, 0xe2, 0x70, 0xf6, 0x89, 0x64, 0xf9, 0xfb, 0x0e, 0x0e, 0x14, 0xed, 0x5d, 0x29, 0x54, 0xa3, 0x3d, 0x93, 0x80, 0x7a, 0xcf, 0x3c, 0x82, 0x50, 0x0e, 0x8b, 0x9f, 0x5f, 0xc5, 0x51, 0x0c, 0xc3, 0xbd, 0x6a, 0xaa, 0x1d, 0xaa, 0xc8, 0x30, 0x91, 0x28, 0xef, 0x4c, 0x0b, 0x4c, 0xac, 0x02, 0x64, 0x25, 0xae, 0xfd, 0xd7, 0xe6, 0x9c, 0x22, 0xc3, 0x2e, 0x5f, 0x8d, 0x2a, 0x6e, 0x8f, 0x2e, 0xa2, 0x91, 0xac, 0x33, 0xda, 0x6c, 0x71, 0xa1, 0x95, 0x3e, 0x44, 0x3c, 0x0e, 0xa2, 0x06, 0x56, 0x8a, 0xad, 0xef, 0x2b, 0x96, 0x46, 0x6c, 0xbf, 0x76, 0xbf, 0x14, 0x9d, 0x89, 0xd8, 0x6f, 0x52, 0x9f }; static const uint8_t ac_dsa_vect219_priv_val[] = { /* X */ 0x28, 0x5d, 0xcb, 0xa1, 0x40, 0x16, 0x2f, 0xc2, 0x03, 0x65, 0x1c, 0x5f, 0xf7, 0xf1, 0x15, 0x53, 0x41, 0x43, 0x6c, 0x5c, 0x5c, 0x98, 0xe1, 0xe9, 0xdf, 0x19, 0x2b, 0x3c, 0x94, 0x8a, 0x16, 0xca }; static const uint8_t ac_dsa_vect219_pub_val[] = { /* Y */ 0x38, 0xfa, 0x99, 0x4a, 0x1f, 0x61, 0xab, 0x79, 0xee, 0x7a, 0x7e, 0x6f, 0x68, 0x9c, 0x38, 0xf6, 0xc2, 0x82, 0x6f, 0x06, 0x64, 0x7b, 0x16, 0x63, 0xcd, 0x81, 0x2a, 0xdb, 0x36, 0xd7, 0xfd, 0x7c, 0xcc, 0x50, 0xe9, 0xa9, 0x0d, 0x02, 0xbf, 0x7c, 0x3f, 0x12, 0xa2, 0x28, 0xc6, 0x92, 0xc0, 0x56, 0xfb, 0x3b, 0xd6, 0x08, 0xf5, 0x1a, 0xa4, 0x01, 0x02, 0x2c, 0x83, 0x97, 0x91, 0xe6, 0xa6, 0x78, 0x18, 0x5c, 0xd3, 0x1d, 0x88, 0xcc, 0x66, 0x1a, 0xf2, 0x9e, 0x5d, 0x23, 0x81, 0x42, 0x18, 0x1d, 0xd3, 0xf6, 0xe7, 0xc8, 0xb0, 0x57, 0x85, 0x22, 0x1e, 0x62, 0xfd, 0xb3, 0x6c, 0x71, 0xe0, 0x7f, 0x51, 0xd7, 0x32, 0xe7, 0xe0, 0xca, 0xb5, 0x20, 0xa7, 0xf2, 0xfc, 0x5b, 0x18, 0x31, 0xb0, 0xa6, 0xba, 0x28, 0x0e, 0x00, 0x32, 0x1c, 0xb9, 0xa0, 0x25, 0xdb, 0x65, 0x38, 0xab, 0xd6, 0x72, 0x46, 0x3d, 0xbf, 0xf5, 0xca, 0x81, 0x99, 0x36, 0x76, 0xbc, 0xba, 0xf0, 0xf6, 0xe9, 0xc7, 0x54, 0xf2, 0x4d, 0x65, 0x4e, 0xe7, 0x87, 0x9b, 0xc0, 0x3d, 0x7d, 0x4b, 0xc8, 0xe8, 0xca, 0x58, 0xfb, 0x9b, 0x39, 0x29, 0xa3, 0xc3, 0x83, 0x65, 0xcd, 0x2e, 0x20, 0x57, 0x29, 0xe9, 0xde, 0xf0, 0xa0, 0x01, 0x08, 0xdf, 0xfe, 0x94, 0x07, 0x27, 0x1e, 0x17, 0xd3, 0x55, 0xec, 0x4b, 0x29, 0x00, 0x3e, 0x0c, 0xaf, 0x0c, 0x5b, 0x2a, 0xcb, 0x9b, 0xd8, 0xe5, 0x2d, 0x44, 0x10, 0xba, 0xa9, 0xb9, 0x7a, 0x49, 0x87, 0x4c, 0x14, 0xbe, 0xeb, 0xf0, 0x3a, 0xbf, 0x28, 0xa9, 0xec, 0x59, 0xbc, 0x17, 0x38, 0xb8, 0xdd, 0x42, 0x23, 0xd4, 0x7a, 0xa3, 0x36, 0xac, 0xbc, 0xa7, 0x66, 0x2f, 0xc6, 0x9a, 0x6f, 0xef, 0xee, 0xcf, 0xfd, 0x47, 0xf6, 0x73, 0x7e, 0xcd, 0xa3, 0x31, 0xd1, 0xba, 0x5c, 0xdf, 0x02, 0x3d }; /* K = 4029e06b437cbcf8e0788a393ba3aad0d182564ab6a53565eec1755c4f4b6e2f */ static const uint8_t ac_dsa_vect219_out[] = { /* R */ 0x8d, 0xad, 0x02, 0xc0, 0x2a, 0xd3, 0x4f, 0xe4, 0xe7, 0x58, 0xff, 0x5c, 0x81, 0xd5, 0x38, 0x4c, 0x40, 0xd2, 0xc4, 0x9d, 0x0a, 0xc7, 0x77, 0xba, 0xd1, 0xcd, 0xeb, 0xc5, 0x8e, 0xc0, 0x1c, 0xfd, /* S */ 0x0f, 0xe4, 0xe1, 0xf6, 0x87, 0x5c, 0x11, 0x3f, 0x1c, 0x17, 0xa0, 0xf0, 0xed, 0x22, 0x8d, 0x44, 0x21, 0x3f, 0x8d, 0x7e, 0x2f, 0x15, 0x56, 0x7e, 0x57, 0xce, 0xb2, 0xe8, 0xb1, 0x09, 0x8f, 0x7d }; #define ac_dsa_vect220_prime ac_dsa_vect211_prime #define ac_dsa_vect220_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect220_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect220_ptx[] = { /* Msg */ 0x73, 0xcc, 0x5e, 0x4a, 0x18, 0x8d, 0x28, 0x14, 0x46, 0x69, 0x41, 0x38, 0x90, 0x14, 0xea, 0x45, 0xa1, 0xa0, 0x65, 0x25, 0xd2, 0x06, 0x9c, 0xf4, 0x88, 0x3e, 0xbc, 0xb5, 0xf2, 0x2a, 0xb1, 0x28, 0xc0, 0x0f, 0x04, 0x1c, 0xf6, 0x9f, 0xd9, 0x4b, 0x33, 0xfd, 0xad, 0xe7, 0x85, 0x48, 0xf6, 0x52, 0x3c, 0x83, 0x8b, 0x87, 0xcc, 0xd8, 0x68, 0xf3, 0xd3, 0xd0, 0xa9, 0xa0, 0x00, 0xf2, 0x78, 0xba, 0x54, 0x04, 0x8b, 0x9c, 0xad, 0xac, 0x7a, 0x99, 0xd9, 0x8d, 0xef, 0x51, 0x71, 0x31, 0x91, 0xad, 0x83, 0xe5, 0x23, 0x2e, 0x3e, 0x86, 0x49, 0x72, 0x45, 0xc8, 0x0b, 0xc7, 0x10, 0xfd, 0xd7, 0xfa, 0xaa, 0xd8, 0x8c, 0xe9, 0x2c, 0x89, 0x4f, 0x8c, 0xad, 0x3d, 0xe0, 0x07, 0x5c, 0xab, 0xa3, 0x37, 0xa2, 0x22, 0xcb, 0x7a, 0x3d, 0x7c, 0x2d, 0x93, 0x7b, 0xcf, 0xe4, 0xb6, 0xe6, 0x9d, 0x38, 0x8d }; static const uint8_t ac_dsa_vect220_priv_val[] = { /* X */ 0x74, 0x22, 0x42, 0xf1, 0xcd, 0xe8, 0x95, 0x59, 0xda, 0xda, 0xe5, 0xe2, 0xce, 0xa2, 0x8c, 0xf4, 0x02, 0xc6, 0x0e, 0xa9, 0xaf, 0x2a, 0x52, 0x82, 0x20, 0x22, 0x81, 0xf5, 0x5a, 0x0d, 0x4d, 0x04 }; static const uint8_t ac_dsa_vect220_pub_val[] = { /* Y */ 0x52, 0x66, 0x42, 0x7a, 0xd4, 0xc1, 0xcf, 0x3e, 0xa2, 0x29, 0x37, 0x7a, 0xd3, 0x97, 0xc7, 0xd5, 0x61, 0x35, 0x12, 0xfc, 0x27, 0xf2, 0xce, 0x37, 0x40, 0x7d, 0x2c, 0xea, 0x8e, 0x19, 0x99, 0xae, 0xbb, 0x8f, 0x37, 0x67, 0xee, 0x96, 0xcb, 0x92, 0x7e, 0xbd, 0xd4, 0x3b, 0x8d, 0xbc, 0x10, 0xba, 0x2c, 0x47, 0x84, 0x3d, 0x3f, 0x43, 0x36, 0x8d, 0x9e, 0x44, 0x2b, 0xf5, 0x1e, 0xbc, 0xf2, 0x0b, 0x48, 0xb5, 0x43, 0xa4, 0xc3, 0x88, 0xbb, 0x3a, 0xe3, 0xe4, 0x02, 0x7a, 0xcb, 0x65, 0x7d, 0x1b, 0xf7, 0x4a, 0xbe, 0xb8, 0xb9, 0x98, 0x42, 0x13, 0x08, 0x77, 0x0f, 0x70, 0xb3, 0xf7, 0xb1, 0xd9, 0x10, 0x21, 0x9a, 0x12, 0x10, 0x26, 0x03, 0x40, 0x12, 0x3b, 0x95, 0xdb, 0xa1, 0x87, 0xe0, 0x0c, 0xb0, 0x67, 0xf7, 0xe3, 0x77, 0x92, 0x34, 0x12, 0x02, 0x55, 0x4b, 0xfc, 0x8a, 0x23, 0x5f, 0xc0, 0x1e, 0xcb, 0x09, 0x9e, 0xc3, 0x61, 0x5a, 0x67, 0xa3, 0x61, 0x0d, 0x4d, 0x8c, 0x2d, 0xad, 0x16, 0x08, 0x70, 0x24, 0xf5, 0x97, 0x3e, 0xb1, 0x84, 0x00, 0xc2, 0x9c, 0x05, 0xd6, 0x98, 0x4d, 0x1c, 0x15, 0xc1, 0x59, 0x42, 0x28, 0x27, 0xc0, 0xdb, 0xb2, 0xbf, 0x45, 0x09, 0xd7, 0x10, 0xc4, 0x97, 0x2e, 0xe9, 0x3b, 0xe7, 0x28, 0x3a, 0xad, 0xd9, 0x91, 0xae, 0x8e, 0xf0, 0xe9, 0x73, 0x12, 0x11, 0x8f, 0x19, 0x5d, 0x30, 0x4f, 0xbe, 0x96, 0xd5, 0xae, 0xbf, 0xb2, 0x12, 0x03, 0xea, 0xe6, 0x11, 0x78, 0x31, 0xf9, 0xbe, 0x90, 0x99, 0xd3, 0xd4, 0x76, 0xb8, 0x3f, 0x65, 0xab, 0x22, 0x5f, 0x8b, 0xe4, 0x93, 0xa8, 0xad, 0x21, 0x62, 0x0f, 0x25, 0x9d, 0x8a, 0x44, 0x20, 0x08, 0x10, 0xc8, 0xe5, 0x62, 0xae, 0xa8, 0xe7, 0xa6, 0xbc, 0x23, 0x8c, 0x12, 0x9b, 0x19, 0xf2, 0x53, 0x1a, 0x6a, 0xf0 }; /* K = 57d9723e0d17ed96a3a77ad47be6eafc06a5aa01b59b89be70a756d37dd0df2b */ static const uint8_t ac_dsa_vect220_out[] = { /* R */ 0x77, 0x23, 0x6b, 0x33, 0xb0, 0x42, 0x85, 0x42, 0x57, 0x75, 0xee, 0x3f, 0x65, 0x8b, 0x37, 0x61, 0x29, 0x5c, 0xbf, 0xf8, 0xe4, 0xbc, 0x05, 0xab, 0xdd, 0x22, 0xe3, 0xd7, 0x8b, 0x1b, 0x6d, 0xa2, /* S */ 0x43, 0xfd, 0xbd, 0x93, 0x6a, 0xb4, 0x04, 0x59, 0xf6, 0x84, 0x30, 0x56, 0xca, 0x77, 0xe1, 0x25, 0xb6, 0xec, 0x5a, 0xd9, 0x45, 0x04, 0x1c, 0x1f, 0x6a, 0x27, 0x70, 0xbe, 0x9d, 0xfc, 0xc6, 0x82 }; #define ac_dsa_vect221_prime ac_dsa_vect211_prime #define ac_dsa_vect221_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect221_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect221_ptx[] = { /* Msg */ 0xc0, 0x74, 0x6b, 0xef, 0xd2, 0xaf, 0xc6, 0xca, 0x15, 0xcd, 0xb1, 0x45, 0xc1, 0x84, 0x62, 0xc5, 0x15, 0xbd, 0x42, 0x79, 0x4c, 0x4c, 0x7e, 0xe5, 0x13, 0xcd, 0x9a, 0xeb, 0x0f, 0xc6, 0xfc, 0x30, 0x48, 0xb6, 0xc7, 0x23, 0x16, 0x34, 0x98, 0x4a, 0x1b, 0xe8, 0x24, 0xc7, 0x75, 0xf9, 0xc9, 0xb0, 0x28, 0x25, 0x5f, 0x5b, 0x3c, 0x3d, 0x8f, 0xa0, 0x8d, 0x47, 0xab, 0xa0, 0x77, 0x55, 0xb5, 0xf1, 0xb5, 0xb0, 0x08, 0x93, 0x3e, 0xff, 0x35, 0x83, 0x8f, 0x15, 0xa0, 0x2b, 0xa9, 0x36, 0x6c, 0x10, 0x36, 0xd3, 0xff, 0x19, 0xe8, 0x81, 0x99, 0xef, 0x86, 0xa8, 0x82, 0x27, 0x27, 0x2c, 0xf4, 0xe4, 0xe0, 0x0f, 0xfa, 0xd9, 0xc3, 0x6b, 0xeb, 0xac, 0x30, 0x57, 0x8b, 0x00, 0x21, 0x4f, 0xb2, 0x9b, 0xae, 0x43, 0xcf, 0x55, 0x5e, 0xd4, 0x31, 0xa2, 0xf2, 0x49, 0x22, 0x43, 0x0b, 0x14, 0x96, 0xfb }; static const uint8_t ac_dsa_vect221_priv_val[] = { /* X */ 0x47, 0xc0, 0xc6, 0xf4, 0xe6, 0xb5, 0x6c, 0xdf, 0x1e, 0x1d, 0x9b, 0x63, 0xff, 0x37, 0x39, 0xed, 0xec, 0x9c, 0x3d, 0x5a, 0x7c, 0x99, 0x04, 0x92, 0xa1, 0xc7, 0x2a, 0xa1, 0x49, 0x4f, 0xcf, 0x9c }; static const uint8_t ac_dsa_vect221_pub_val[] = { /* Y */ 0x43, 0x1e, 0xee, 0x49, 0x09, 0x0a, 0xd5, 0x8f, 0x4a, 0x87, 0x4c, 0x2e, 0xb5, 0x89, 0x79, 0x69, 0xfa, 0xfe, 0x32, 0x74, 0xbd, 0x74, 0x86, 0xb6, 0x5e, 0x35, 0x19, 0xe4, 0x30, 0x9d, 0x63, 0x6a, 0xce, 0x68, 0x64, 0xd5, 0xca, 0x4d, 0x84, 0x48, 0xa3, 0x57, 0xca, 0xfa, 0xc1, 0x5a, 0xc3, 0xcb, 0x3b, 0xd7, 0xb2, 0x75, 0x5b, 0x3c, 0xb6, 0xdb, 0x0a, 0xf1, 0xa4, 0xe9, 0x1b, 0x2d, 0x1f, 0xcb, 0x28, 0x56, 0x1b, 0x17, 0x0f, 0xaf, 0x2e, 0x06, 0x90, 0x07, 0x1b, 0xc0, 0xf6, 0xe4, 0x2b, 0x2d, 0x82, 0xab, 0xe5, 0x64, 0x6d, 0xdb, 0x8f, 0x9b, 0x99, 0xee, 0x1d, 0xaf, 0x59, 0x06, 0x03, 0x6f, 0x39, 0x5d, 0x82, 0x4d, 0x08, 0x0b, 0xfa, 0xea, 0x10, 0x30, 0x48, 0xb3, 0xf4, 0x4d, 0x06, 0x36, 0xbc, 0x7a, 0x6a, 0x88, 0xe9, 0xb0, 0x04, 0xa3, 0x63, 0xb9, 0x9d, 0x24, 0xa8, 0x9b, 0x6e, 0x97, 0x37, 0x9b, 0x20, 0xba, 0xcf, 0x48, 0xc7, 0xae, 0x2e, 0x9b, 0xf7, 0xe2, 0x81, 0xfe, 0x3b, 0x4d, 0x7e, 0xb9, 0x47, 0xa1, 0x02, 0x39, 0x6d, 0x52, 0x3a, 0x1e, 0x85, 0xce, 0x17, 0xfd, 0x25, 0xf2, 0x71, 0xf3, 0xc2, 0x21, 0xa5, 0x68, 0x1e, 0x9f, 0xb7, 0x7d, 0x64, 0xd6, 0x24, 0x10, 0x39, 0xac, 0x8a, 0x85, 0xda, 0x32, 0x74, 0x1b, 0xac, 0xf0, 0x06, 0x60, 0xe4, 0x21, 0xfe, 0x85, 0x0a, 0x0f, 0xe7, 0x3a, 0x08, 0xee, 0x3a, 0x9b, 0x06, 0x9c, 0x6d, 0x91, 0x14, 0xc1, 0x97, 0x52, 0x72, 0x12, 0x74, 0x68, 0xf9, 0x00, 0x85, 0x52, 0xea, 0x4c, 0xdf, 0x9d, 0x96, 0x56, 0x1e, 0xa6, 0x9a, 0x64, 0x66, 0x95, 0x24, 0x25, 0x00, 0xf2, 0x31, 0x8b, 0xda, 0x82, 0xda, 0x63, 0x3e, 0xf1, 0xae, 0x04, 0x97, 0x01, 0x4a, 0x63, 0x7b, 0x15, 0xa5, 0x72, 0xdd, 0xdd, 0xec, 0x07, 0x0d, 0x19, 0xd8, 0x84 }; /* K = 3598a6006fa3f8b8f9b7ff96ba06bf3837a1a1a92892e4a268c75285bfa6d660 */ static const uint8_t ac_dsa_vect221_out[] = { /* R */ 0x79, 0x6d, 0x7d, 0xba, 0x32, 0x2d, 0x92, 0xa0, 0x83, 0xda, 0x7a, 0x58, 0x8f, 0xb6, 0x23, 0x8d, 0xc8, 0x6b, 0x1f, 0xc5, 0x10, 0x4e, 0xd6, 0x00, 0xc9, 0xb4, 0xc6, 0x88, 0xed, 0xf8, 0x05, 0xe9, /* S */ 0x01, 0x2c, 0x1f, 0xf4, 0xde, 0x8e, 0xe3, 0x86, 0xb9, 0x51, 0x27, 0x5e, 0x25, 0x05, 0x81, 0xd6, 0x61, 0xd0, 0x30, 0xa4, 0xd8, 0xfe, 0x11, 0x54, 0x32, 0x28, 0x8a, 0xb0, 0xa4, 0xbd, 0x46, 0xcb }; #define ac_dsa_vect222_prime ac_dsa_vect211_prime #define ac_dsa_vect222_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect222_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect222_ptx[] = { /* Msg */ 0xb8, 0xb9, 0x15, 0xcf, 0x4e, 0xa3, 0xb0, 0xc4, 0xcd, 0xcd, 0x8b, 0x2a, 0x06, 0x47, 0x9e, 0x71, 0xbb, 0x47, 0x97, 0x29, 0x4b, 0x6c, 0x41, 0xca, 0x87, 0x0d, 0x3c, 0xb2, 0xec, 0x2c, 0xb5, 0xa4, 0x9f, 0x6b, 0xfe, 0x5b, 0xcd, 0x10, 0xbe, 0x60, 0x9e, 0xd3, 0xe1, 0x88, 0x2a, 0x31, 0x23, 0x95, 0xfc, 0x99, 0x13, 0x45, 0xab, 0xa5, 0xb5, 0x66, 0xe6, 0x79, 0x60, 0xb4, 0x29, 0x13, 0xdb, 0x66, 0x90, 0x41, 0xea, 0x30, 0xc2, 0x99, 0x47, 0xed, 0xde, 0x7b, 0xdc, 0xfc, 0x08, 0x96, 0xb9, 0x76, 0x60, 0x74, 0x0d, 0x6c, 0x79, 0xf0, 0x08, 0x86, 0x65, 0xf5, 0x1d, 0xad, 0xcf, 0xa0, 0x7f, 0x7b, 0xe4, 0x48, 0x21, 0xd6, 0x0a, 0x8f, 0xfd, 0xe4, 0xe5, 0xcb, 0x1f, 0x98, 0x13, 0x9f, 0xf9, 0x1c, 0x9c, 0x6f, 0x31, 0x26, 0x59, 0x63, 0x44, 0xc5, 0xf7, 0xef, 0xf4, 0x00, 0x49, 0xd3, 0xf9, 0xae }; static const uint8_t ac_dsa_vect222_priv_val[] = { /* X */ 0x0e, 0xb7, 0x4b, 0x51, 0x86, 0x69, 0x7a, 0xf2, 0x79, 0xce, 0x72, 0xda, 0x74, 0xf1, 0xeb, 0xf5, 0x99, 0x21, 0xed, 0x42, 0x5d, 0xa0, 0xf3, 0xee, 0xa1, 0x75, 0x17, 0xea, 0xdd, 0xdb, 0x7c, 0x90 }; static const uint8_t ac_dsa_vect222_pub_val[] = { /* Y */ 0x1b, 0x37, 0x22, 0x76, 0x42, 0x64, 0xe1, 0x79, 0x94, 0xf3, 0x34, 0x3b, 0xf2, 0x60, 0xc7, 0x35, 0x75, 0xd1, 0x06, 0xf6, 0x30, 0x7f, 0x2e, 0xaa, 0x3f, 0x7d, 0xcd, 0x5a, 0xf8, 0x04, 0x46, 0x3d, 0xdb, 0x6b, 0xbe, 0x38, 0xa3, 0x8f, 0x5a, 0xb5, 0xa8, 0xae, 0x67, 0x01, 0x31, 0x7c, 0xf6, 0xc2, 0x67, 0x04, 0x9f, 0xc9, 0xb8, 0x40, 0x78, 0x24, 0x1f, 0x82, 0xd3, 0xc6, 0xb7, 0xe5, 0xbe, 0xba, 0x5c, 0x14, 0x27, 0x03, 0x02, 0x97, 0xf1, 0xdf, 0x25, 0x81, 0x48, 0xe5, 0xf9, 0xeb, 0x41, 0xeb, 0x20, 0xa8, 0x68, 0x77, 0xfc, 0xc0, 0x6e, 0x53, 0x73, 0xcd, 0x50, 0x56, 0x26, 0x13, 0xd3, 0x07, 0x64, 0x95, 0x39, 0xd2, 0x8c, 0xb5, 0x24, 0x18, 0xd4, 0x2f, 0xd5, 0x97, 0x58, 0xb6, 0x11, 0x85, 0xe7, 0x92, 0x99, 0x2b, 0x5a, 0x58, 0x12, 0x29, 0xb4, 0x34, 0x03, 0xd7, 0x93, 0xb0, 0x4d, 0x87, 0x8e, 0xb9, 0xb9, 0xd1, 0x2e, 0xa1, 0x0d, 0x2e, 0x64, 0xd1, 0x53, 0xd3, 0xfa, 0x41, 0x88, 0x1f, 0xe7, 0x9a, 0x67, 0xac, 0x40, 0x8a, 0x53, 0x48, 0xd7, 0x92, 0x39, 0x56, 0x7d, 0xca, 0x96, 0xe1, 0xea, 0xd3, 0xc6, 0xac, 0x22, 0xdb, 0xcd, 0xbc, 0xb5, 0x18, 0x5b, 0xf8, 0xac, 0xe5, 0x76, 0x60, 0xa4, 0x25, 0x21, 0x04, 0xe5, 0x04, 0x7c, 0xac, 0x87, 0x85, 0x1d, 0x28, 0x15, 0xb1, 0x2a, 0xe8, 0xae, 0x96, 0xab, 0x2f, 0x33, 0x34, 0x5e, 0xa1, 0xcf, 0x5f, 0x2e, 0x58, 0xa4, 0xdd, 0xcb, 0xa2, 0x62, 0x65, 0xc0, 0x6d, 0xf6, 0x5a, 0xfc, 0xc6, 0xe8, 0x52, 0xb3, 0xf9, 0x10, 0xc8, 0x77, 0x8d, 0xe2, 0x8a, 0x9f, 0x09, 0x81, 0x58, 0xed, 0x0e, 0xca, 0x65, 0x2d, 0xda, 0x2f, 0x9f, 0x4a, 0xc8, 0xa1, 0x7a, 0x9b, 0x25, 0x24, 0x10, 0xec, 0x59, 0x73, 0xa6, 0x06, 0x3b, 0x64, 0x25, 0x68, 0xf1 }; /* K = 37128d19b2108a8e8fdf2cac984d45851078a194bb9946a4db260f27b4650439 */ static const uint8_t ac_dsa_vect222_out[] = { /* R */ 0x6b, 0x4b, 0x0e, 0x1e, 0x7c, 0xbd, 0xef, 0xed, 0xb1, 0xdf, 0x1f, 0x52, 0x9e, 0xce, 0x47, 0x89, 0x1f, 0x7b, 0x9e, 0x95, 0x9a, 0x3f, 0x85, 0x56, 0xba, 0x4b, 0xef, 0x7b, 0xb9, 0x85, 0x65, 0x60, /* S */ 0x7e, 0x93, 0x3b, 0x44, 0xed, 0xe6, 0xb2, 0xe9, 0x41, 0xb6, 0x0c, 0x37, 0xdc, 0xd1, 0x56, 0x82, 0x84, 0xde, 0xf2, 0x29, 0xc0, 0xa2, 0xbb, 0x90, 0x93, 0xf4, 0x82, 0x90, 0x00, 0xc4, 0x40, 0x9a }; #define ac_dsa_vect223_prime ac_dsa_vect211_prime #define ac_dsa_vect223_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect223_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect223_ptx[] = { /* Msg */ 0xdf, 0xfd, 0x45, 0x8a, 0x80, 0x8f, 0x18, 0x89, 0xd7, 0xf3, 0xd6, 0x19, 0x7f, 0x0e, 0x41, 0x92, 0x0a, 0xd7, 0x31, 0x12, 0x4c, 0xee, 0x30, 0x8c, 0xb9, 0x0d, 0x23, 0x61, 0xb2, 0x3f, 0xee, 0x96, 0x9c, 0x0e, 0x10, 0x58, 0x35, 0x54, 0x9e, 0x5d, 0x0a, 0x3f, 0x76, 0x90, 0xd5, 0x86, 0x2d, 0x4c, 0xd6, 0xcc, 0xb3, 0x3a, 0xd1, 0x80, 0x94, 0xc8, 0x5c, 0x96, 0x50, 0xd7, 0x5b, 0x24, 0x84, 0x96, 0x39, 0x0a, 0x0b, 0x89, 0xe7, 0xdc, 0x7d, 0xc0, 0xd3, 0xa6, 0x13, 0x0d, 0xd9, 0x77, 0x89, 0xeb, 0xf1, 0x05, 0xf8, 0xe5, 0x5d, 0x8f, 0x0a, 0x11, 0x62, 0xfb, 0x3c, 0x6b, 0x52, 0x9e, 0x2a, 0x80, 0xdd, 0x51, 0xe9, 0x04, 0x5e, 0xf8, 0xec, 0x42, 0xca, 0x4b, 0xc4, 0x6a, 0xbb, 0x65, 0x39, 0x58, 0x8b, 0x53, 0x1c, 0x97, 0x99, 0x56, 0x0c, 0xf4, 0xea, 0x80, 0x6c, 0x3d, 0x93, 0xd0, 0x43, 0xe5 }; static const uint8_t ac_dsa_vect223_priv_val[] = { /* X */ 0x36, 0xff, 0x71, 0xed, 0x60, 0x8f, 0x35, 0x1c, 0x73, 0x60, 0x42, 0xf3, 0xb6, 0x38, 0xa8, 0x96, 0x66, 0x00, 0x7c, 0xef, 0xe8, 0xab, 0x48, 0x7e, 0x51, 0x2d, 0x76, 0xfe, 0xdc, 0xe1, 0xff, 0x35 }; static const uint8_t ac_dsa_vect223_pub_val[] = { /* Y */ 0xea, 0x43, 0x7a, 0xd0, 0xee, 0x92, 0x64, 0xde, 0x87, 0x92, 0xb6, 0x77, 0x20, 0x7e, 0x54, 0x70, 0x90, 0xb3, 0x2d, 0x6a, 0xb4, 0x60, 0xb4, 0xd5, 0x89, 0xd8, 0x42, 0xed, 0x0a, 0x0b, 0x4f, 0xb4, 0xc6, 0x35, 0xe4, 0x44, 0x3b, 0xf6, 0x0e, 0x46, 0xcb, 0xa8, 0xd2, 0x26, 0xf6, 0x59, 0xc7, 0x6d, 0x2c, 0xa0, 0x1c, 0x69, 0x70, 0x7b, 0xa6, 0xd9, 0x77, 0x25, 0x5c, 0x45, 0x84, 0xb7, 0x47, 0x40, 0xa7, 0xcd, 0xec, 0x4c, 0x97, 0x3e, 0x3d, 0x16, 0xab, 0x6a, 0xf6, 0x0c, 0xd3, 0x12, 0x3c, 0xa1, 0x2e, 0xd5, 0x97, 0x1e, 0x69, 0xea, 0xff, 0xa3, 0xda, 0x07, 0x70, 0xd8, 0xe1, 0x22, 0x88, 0x89, 0xcd, 0x68, 0x25, 0xe1, 0xb8, 0x58, 0x46, 0xf4, 0xf7, 0xec, 0xdb, 0x33, 0xf1, 0xe5, 0xc7, 0xac, 0xd6, 0xb2, 0xad, 0xd1, 0x30, 0x8c, 0x5c, 0xec, 0x43, 0x97, 0x28, 0xd0, 0xcc, 0x62, 0x5e, 0xb8, 0x9d, 0xf3, 0x4f, 0xb9, 0xc0, 0xdd, 0x45, 0x68, 0xf9, 0x79, 0xde, 0xea, 0xd2, 0x86, 0xc5, 0x01, 0x45, 0x90, 0x3a, 0x0d, 0xcc, 0xca, 0x72, 0x39, 0x87, 0x4b, 0x46, 0x83, 0xd3, 0x67, 0xed, 0x31, 0x69, 0x6e, 0xec, 0xad, 0xa9, 0x0d, 0xce, 0xd8, 0xa9, 0xb1, 0xe0, 0x13, 0x64, 0xb8, 0x79, 0x46, 0x60, 0xc6, 0x0f, 0x40, 0x59, 0x07, 0x94, 0xc9, 0x5a, 0x61, 0x4c, 0x04, 0x56, 0x3c, 0x92, 0xd4, 0x44, 0xb5, 0xec, 0xf0, 0x12, 0x86, 0xb1, 0xbf, 0xfe, 0x9e, 0xd9, 0xef, 0x91, 0x5b, 0x4d, 0xb8, 0x20, 0xea, 0x5c, 0x9a, 0x5b, 0x3d, 0xed, 0xcf, 0x89, 0xa3, 0xe2, 0xc3, 0x78, 0x71, 0xd2, 0x1b, 0x76, 0x39, 0x90, 0xc7, 0xbb, 0xf4, 0x44, 0x18, 0xf9, 0x1c, 0xdb, 0xce, 0x43, 0x61, 0xee, 0xb2, 0x27, 0x51, 0x6c, 0xb3, 0x44, 0x40, 0x9d, 0x2c, 0x65, 0x1f, 0x0d, 0xc2, 0x9e, 0xc8, 0x26, 0x23 }; /* K = 91797ee940a167a57de7619334638f1b3ba63f9065b69f56dc04e4020a1682eb */ static const uint8_t ac_dsa_vect223_out[] = { /* R */ 0x31, 0x52, 0xfc, 0x28, 0x6f, 0xed, 0x44, 0xf2, 0x8b, 0x1a, 0xf2, 0xd5, 0x37, 0x59, 0x2c, 0x56, 0x91, 0xd6, 0x79, 0x8c, 0xae, 0xd9, 0x05, 0x91, 0xb5, 0x88, 0x8b, 0x0d, 0x6f, 0xe6, 0xbb, 0x07, /* S */ 0x7b, 0xff, 0x61, 0xa8, 0x67, 0x6f, 0x0d, 0xf1, 0x89, 0x65, 0x4f, 0x25, 0xc5, 0x81, 0x2b, 0x34, 0x1d, 0xd1, 0x7f, 0x4f, 0x44, 0x66, 0x77, 0x89, 0xcc, 0x88, 0x7c, 0x19, 0x1b, 0xf4, 0x72, 0x02 }; #define ac_dsa_vect224_prime ac_dsa_vect211_prime #define ac_dsa_vect224_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect224_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect224_ptx[] = { /* Msg */ 0xa6, 0x51, 0x60, 0x19, 0x72, 0x7d, 0x95, 0x63, 0x9d, 0xb0, 0x38, 0xf9, 0x03, 0x06, 0xa8, 0xd9, 0x4f, 0xac, 0x52, 0x43, 0xdc, 0x7b, 0x67, 0xc3, 0x56, 0x8d, 0x63, 0xd8, 0x5d, 0xea, 0xd1, 0xcf, 0xdd, 0xbb, 0x2b, 0x33, 0x0b, 0x61, 0x95, 0x89, 0xbd, 0x58, 0x2a, 0xf1, 0x5f, 0x08, 0x11, 0x17, 0x75, 0x04, 0xfd, 0x5b, 0x7a, 0xad, 0x7b, 0x29, 0x86, 0x47, 0xa3, 0xf6, 0x47, 0x97, 0xe3, 0xda, 0x5f, 0xe5, 0xbf, 0x87, 0xb6, 0x5c, 0x2d, 0xde, 0xc5, 0x76, 0xa8, 0xf4, 0x06, 0x60, 0x68, 0x6b, 0x80, 0x8b, 0xa4, 0x2e, 0x54, 0xbf, 0xd0, 0xe9, 0xe4, 0x80, 0x82, 0xd6, 0x90, 0x4f, 0x8e, 0x19, 0x05, 0x0e, 0x54, 0xea, 0x47, 0x97, 0xa2, 0xf4, 0x01, 0xff, 0x7c, 0x9f, 0x3d, 0x21, 0x7b, 0x52, 0x6c, 0x03, 0xbe, 0x92, 0x01, 0xc0, 0xdc, 0x1b, 0x0e, 0x8e, 0x05, 0x4b, 0xbb, 0x32, 0xc3, 0x82 }; static const uint8_t ac_dsa_vect224_priv_val[] = { /* X */ 0x39, 0x61, 0x02, 0xad, 0x11, 0x6c, 0xa2, 0xe4, 0x19, 0xb9, 0x22, 0x96, 0x67, 0xa3, 0x17, 0x37, 0x34, 0x4d, 0x0d, 0x78, 0x54, 0xca, 0xc8, 0x93, 0x0a, 0xf1, 0x8e, 0x12, 0xa9, 0xe2, 0xd6, 0x3e }; static const uint8_t ac_dsa_vect224_pub_val[] = { /* Y */ 0x97, 0x79, 0xeb, 0x53, 0x38, 0xdc, 0xae, 0x73, 0x77, 0xb1, 0x84, 0x70, 0x18, 0xce, 0x72, 0xc1, 0xed, 0x4c, 0x55, 0x29, 0x2a, 0x96, 0x3f, 0x81, 0x60, 0x8e, 0xf3, 0x32, 0x05, 0x0f, 0x0a, 0x48, 0x45, 0x19, 0xaa, 0x96, 0xb1, 0x8b, 0xcc, 0xe8, 0xe1, 0xb4, 0x9c, 0x11, 0xa2, 0x00, 0xc1, 0xab, 0x4a, 0x75, 0x72, 0x6b, 0xcc, 0x84, 0x24, 0x85, 0xdf, 0x63, 0x14, 0xe5, 0xc3, 0x9f, 0xec, 0x62, 0x2d, 0x81, 0x94, 0x34, 0x29, 0x4d, 0xbe, 0x1e, 0xb6, 0x47, 0x88, 0x5c, 0xe8, 0x41, 0x52, 0x7c, 0x03, 0x48, 0x1b, 0x7f, 0x22, 0xee, 0x58, 0x6d, 0x8c, 0x2b, 0x1a, 0x84, 0x71, 0xa2, 0x75, 0x7b, 0xff, 0xbd, 0xd9, 0xc2, 0x6f, 0x12, 0x50, 0x65, 0x68, 0x55, 0x09, 0xff, 0x0e, 0x4c, 0x8b, 0x82, 0x6d, 0x73, 0xc6, 0xe1, 0x2f, 0x6d, 0x4b, 0x93, 0x19, 0xcd, 0xfa, 0x72, 0xc0, 0x69, 0xe0, 0x7b, 0x2d, 0x2c, 0x25, 0x4b, 0x33, 0x0c, 0x06, 0xf4, 0x88, 0xd6, 0x59, 0x8c, 0x74, 0x76, 0xce, 0x0f, 0x33, 0x30, 0xc9, 0x7e, 0xc3, 0x6b, 0x7c, 0x10, 0x87, 0x13, 0x88, 0x47, 0x24, 0x51, 0xa3, 0x4a, 0xfb, 0x7b, 0x4d, 0x4e, 0x25, 0x1f, 0x9f, 0x72, 0xa4, 0xa3, 0x8a, 0x68, 0x51, 0xaa, 0xb8, 0x65, 0x07, 0xb2, 0x83, 0xe8, 0x90, 0xc3, 0x1b, 0xa9, 0x6d, 0x0a, 0x1e, 0x55, 0x72, 0x63, 0x7b, 0x2d, 0x84, 0x67, 0x06, 0x0c, 0x07, 0x36, 0xd1, 0x1d, 0x07, 0x44, 0xe3, 0x32, 0xa1, 0x9f, 0x59, 0xae, 0x29, 0x20, 0x89, 0x4e, 0x9c, 0xff, 0xac, 0xfe, 0xda, 0x64, 0xae, 0x1f, 0xf4, 0x86, 0x98, 0x82, 0xdf, 0x3b, 0x69, 0x0c, 0x7c, 0xe8, 0xfe, 0x0e, 0xb8, 0x81, 0x71, 0xe4, 0xf2, 0xab, 0x86, 0x24, 0xe6, 0xac, 0x77, 0xdc, 0x89, 0x07, 0x61, 0x32, 0x35, 0x16, 0x3e, 0x0a, 0x2c, 0x7d, 0x9f, 0xd6 }; /* K = 79753fbd43773b6757c01663b8f5ef642801aa5ccbf32082c780f71a22c4cb0d */ static const uint8_t ac_dsa_vect224_out[] = { /* R */ 0x72, 0x22, 0xd5, 0xeb, 0x39, 0x24, 0x60, 0xde, 0xfe, 0x8f, 0xe3, 0xdf, 0x18, 0xfa, 0x53, 0x4f, 0x30, 0x60, 0x23, 0x5f, 0x1e, 0x8d, 0xce, 0x53, 0x70, 0x76, 0x2e, 0xc6, 0xfc, 0x11, 0xe6, 0x90, /* S */ 0x43, 0x51, 0xc4, 0x28, 0x03, 0x1c, 0xd9, 0xaf, 0x56, 0x7b, 0x11, 0x63, 0x03, 0x7a, 0x4e, 0x37, 0x69, 0x62, 0x62, 0x0c, 0x4e, 0xc2, 0x3c, 0x43, 0xb7, 0x10, 0x58, 0x79, 0xf9, 0x5b, 0xf6, 0x14 }; #define ac_dsa_vect225_prime ac_dsa_vect211_prime #define ac_dsa_vect225_sub_prime ac_dsa_vect211_sub_prime #define ac_dsa_vect225_base ac_dsa_vect211_base static const uint8_t ac_dsa_vect225_ptx[] = { /* Msg */ 0x1f, 0xfa, 0x7c, 0xf5, 0x5f, 0x92, 0xf2, 0x34, 0xa2, 0x4b, 0xd3, 0x29, 0x67, 0x44, 0xd5, 0x43, 0xa4, 0x33, 0xc9, 0x07, 0xc1, 0xf7, 0x7d, 0x8b, 0x70, 0x6f, 0x4b, 0x62, 0x62, 0xd0, 0x96, 0xe2, 0xdf, 0xe7, 0x13, 0xfa, 0x9c, 0xa8, 0x0e, 0x68, 0x57, 0x93, 0x96, 0xfc, 0x11, 0xa1, 0x2c, 0x03, 0x31, 0xcf, 0xb7, 0x74, 0x5d, 0x96, 0xb0, 0x05, 0x20, 0x4e, 0x48, 0x3f, 0xbf, 0x8f, 0x9f, 0xdc, 0x45, 0x8e, 0x2c, 0xa8, 0x61, 0x34, 0x06, 0x06, 0x9d, 0xf5, 0xf4, 0x49, 0x18, 0xef, 0xf8, 0xc5, 0xf5, 0x4b, 0x8b, 0x4d, 0x97, 0x2e, 0x07, 0xa4, 0xb8, 0xe0, 0x6d, 0x84, 0x26, 0xa7, 0x08, 0x74, 0xce, 0xfe, 0x6e, 0x93, 0x40, 0x4c, 0x1e, 0xb3, 0x81, 0xc2, 0xd0, 0x70, 0x1c, 0x37, 0xf8, 0x5a, 0xfb, 0x16, 0x01, 0xa0, 0x9f, 0xff, 0x8e, 0xcf, 0xda, 0xf6, 0xcb, 0x64, 0xad, 0x9b, 0xd8, 0xb7 }; static const uint8_t ac_dsa_vect225_priv_val[] = { /* X */ 0x24, 0x03, 0x99, 0x63, 0xcc, 0x5a, 0xc2, 0x6a, 0x97, 0x77, 0x28, 0xb8, 0x52, 0x41, 0x4f, 0x60, 0xa2, 0x87, 0x17, 0x41, 0x86, 0xea, 0x81, 0x2e, 0x00, 0xa5, 0xc8, 0xa8, 0xa5, 0x35, 0x5d, 0xaf }; static const uint8_t ac_dsa_vect225_pub_val[] = { /* Y */ 0x18, 0xe2, 0x98, 0xe6, 0x30, 0x13, 0x89, 0xd4, 0x86, 0x44, 0x67, 0x4f, 0x83, 0x39, 0x48, 0x7a, 0x86, 0x51, 0xb0, 0x76, 0x8d, 0xee, 0x42, 0x59, 0x05, 0xe8, 0x03, 0xab, 0x35, 0x7c, 0x7f, 0x9f, 0xa0, 0x5d, 0xd5, 0xe2, 0xee, 0x84, 0xbf, 0xe1, 0x05, 0xa0, 0x92, 0x71, 0x62, 0x74, 0x55, 0x7e, 0x06, 0x3d, 0x08, 0x6e, 0x78, 0xb7, 0x81, 0xa4, 0x3c, 0x56, 0xa4, 0xe0, 0xea, 0x11, 0x5c, 0x5c, 0xfe, 0xac, 0x57, 0xa4, 0xc9, 0xb7, 0xe1, 0xef, 0xfb, 0x89, 0x41, 0x36, 0x89, 0x92, 0x8f, 0x15, 0x46, 0xfe, 0xb3, 0x07, 0x38, 0x58, 0x6d, 0x36, 0xff, 0xe3, 0x38, 0x08, 0x3e, 0xe2, 0xbf, 0x5c, 0x5b, 0xd3, 0x44, 0xbc, 0x3d, 0xb2, 0xa7, 0x97, 0x7d, 0xe2, 0xb1, 0xab, 0x5b, 0xa0, 0x06, 0xd9, 0xee, 0x93, 0xef, 0x86, 0x88, 0xa7, 0xd1, 0x0c, 0xaf, 0xe2, 0x7a, 0xf3, 0xe6, 0x71, 0x01, 0x3a, 0x81, 0x69, 0x84, 0x19, 0x6b, 0xfa, 0xcf, 0x00, 0x23, 0x35, 0xfe, 0x74, 0x14, 0x42, 0x3e, 0xd8, 0xbd, 0xc8, 0x03, 0x27, 0x37, 0x2b, 0x0d, 0x46, 0x08, 0x66, 0x48, 0x0b, 0xdf, 0x07, 0x3c, 0x9d, 0xef, 0x79, 0x77, 0x13, 0x1b, 0x06, 0xe2, 0x8d, 0x14, 0xae, 0x1a, 0x81, 0x6d, 0x32, 0x22, 0xeb, 0xaa, 0xdc, 0xc8, 0xd7, 0xc3, 0x00, 0xaa, 0x82, 0x0e, 0x03, 0x28, 0xaf, 0x66, 0xf7, 0x42, 0x06, 0x1a, 0xff, 0x5d, 0x4b, 0x71, 0x76, 0xa9, 0x94, 0xad, 0x69, 0xb3, 0x90, 0xbb, 0xdd, 0x61, 0x9f, 0xce, 0x04, 0x7d, 0xc7, 0xd1, 0x5a, 0x48, 0xea, 0x71, 0xaf, 0xa7, 0x20, 0x40, 0xbb, 0x14, 0xee, 0xaf, 0x4a, 0x2b, 0x23, 0xd9, 0x9b, 0x4d, 0x97, 0x7b, 0xeb, 0x6d, 0x80, 0x61, 0x01, 0x02, 0x1e, 0xb0, 0xc3, 0xa0, 0xe3, 0x1e, 0x54, 0x57, 0x9e, 0x58, 0xc9, 0x53, 0xb5, 0x5b, 0x6e, 0x32, 0x45 }; /* K = 2ae1af11ff810141c37b1c23796e54f027b4eb7c2f0c412b6c83076de3d4aba1 */ static const uint8_t ac_dsa_vect225_out[] = { /* R */ 0x21, 0xd7, 0x0e, 0xd9, 0x55, 0xb0, 0x9e, 0xa3, 0x02, 0xfb, 0x79, 0x29, 0x78, 0xd1, 0x25, 0x01, 0x07, 0x1a, 0x2e, 0x8e, 0x2c, 0xc8, 0xf6, 0x59, 0xde, 0xcd, 0x3d, 0xf2, 0x4e, 0x37, 0xc4, 0x66, /* S */ 0x2c, 0xda, 0xae, 0xe2, 0xa5, 0xa3, 0xdd, 0x74, 0xa6, 0x77, 0x95, 0xf9, 0x3a, 0xc1, 0xd8, 0x41, 0x62, 0x23, 0x83, 0x6c, 0x76, 0xf7, 0xfe, 0x31, 0xc7, 0x2e, 0xc6, 0x17, 0x09, 0x25, 0xfd, 0x73 }; /* [mod = L=3072, N=256, SHA-1] */ static const uint8_t ac_dsa_vect226_prime[] = { /* P */ 0xfd, 0x5a, 0x6c, 0x56, 0xdd, 0x29, 0x0f, 0x7d, 0xd8, 0x4a, 0x29, 0xde, 0x17, 0x12, 0x6e, 0xb4, 0xe4, 0x48, 0x7b, 0x3e, 0xff, 0x0a, 0x44, 0xab, 0xe5, 0xc5, 0x97, 0x92, 0xd2, 0xe1, 0x20, 0x0b, 0x9c, 0x3d, 0xb4, 0x4d, 0x52, 0x8b, 0x9f, 0x7d, 0x22, 0x48, 0x03, 0x2e, 0x4b, 0xa0, 0xf7, 0xbf, 0xc4, 0xfa, 0xfc, 0x70, 0x6b, 0xe5, 0x11, 0xdb, 0x22, 0x76, 0xc0, 0xb7, 0xec, 0xff, 0xd3, 0x8d, 0xa2, 0xe1, 0xc2, 0xf2, 0x37, 0xa7, 0x53, 0x90, 0xc1, 0xe4, 0xd3, 0x23, 0x9c, 0xba, 0x8e, 0x20, 0xe5, 0x58, 0x40, 0xec, 0xb0, 0x5d, 0xf5, 0xf0, 0x1a, 0x1b, 0x69, 0x77, 0xad, 0x19, 0x06, 0xf2, 0xcb, 0x54, 0x4c, 0xcf, 0xb9, 0x3b, 0x90, 0x1a, 0xd0, 0x96, 0x6b, 0x18, 0x32, 0xad, 0x2d, 0xab, 0x52, 0x62, 0x44, 0xa3, 0x15, 0x6c, 0x90, 0x5c, 0x01, 0xac, 0x51, 0xcb, 0x73, 0xb9, 0xdc, 0xd9, 0x86, 0x0d, 0x56, 0x17, 0x5a, 0x42, 0x5d, 0x84, 0x64, 0x85, 0xd9, 0xb1, 0xf4, 0x4a, 0x8a, 0x0c, 0x25, 0x78, 0xe6, 0xcf, 0x61, 0x94, 0x7b, 0xc1, 0xa1, 0x39, 0x2f, 0xdd, 0x32, 0x0b, 0x16, 0xa9, 0xd7, 0x04, 0x55, 0xfe, 0x43, 0x6f, 0x2d, 0x47, 0xde, 0xd8, 0xe8, 0xe6, 0x05, 0xf7, 0x48, 0x6e, 0xb5, 0x78, 0xea, 0x7f, 0xc4, 0xff, 0xd1, 0x3c, 0x07, 0xf9, 0x99, 0x6a, 0xf1, 0x59, 0xfd, 0x41, 0x1e, 0x94, 0x51, 0x40, 0x32, 0x78, 0xdd, 0x11, 0x41, 0xa8, 0xc9, 0x26, 0xb3, 0x5c, 0x96, 0x38, 0x4b, 0xbd, 0x6b, 0xee, 0x09, 0xc4, 0x6f, 0x44, 0xc3, 0x6b, 0x1f, 0xfc, 0x71, 0x97, 0xf5, 0xe9, 0x25, 0xdb, 0xe0, 0x54, 0x4a, 0x68, 0xe6, 0xab, 0x8c, 0x18, 0xe4, 0x26, 0xa4, 0x66, 0xb3, 0x92, 0xf9, 0xc2, 0x7d, 0xd7, 0x9f, 0xef, 0xa9, 0xca, 0x16, 0x3c, 0xc5, 0xa3, 0x75, 0x53, 0x9a, 0x85, 0x59, 0xf2, 0x77, 0xf6, 0x57, 0xa5, 0x35, 0xd1, 0x96, 0x4c, 0x6a, 0x5e, 0x91, 0x68, 0x3e, 0xf5, 0x69, 0x8e, 0xba, 0xa0, 0x1e, 0xf8, 0x18, 0xdb, 0xf7, 0x2c, 0xb0, 0x4c, 0x3f, 0xf0, 0x92, 0xd1, 0x88, 0x86, 0x6f, 0x25, 0xcd, 0x40, 0x51, 0x08, 0xf5, 0x66, 0xb0, 0x87, 0xf7, 0x3d, 0x2d, 0x5b, 0xeb, 0x51, 0xfa, 0xc6, 0xde, 0x84, 0xae, 0x51, 0x61, 0xa6, 0x6a, 0xf9, 0x60, 0x2c, 0x7e, 0x4b, 0xfc, 0x14, 0x6f, 0x48, 0x20, 0xbd, 0xfc, 0x09, 0x2f, 0xae, 0xac, 0x69, 0x13, 0x3e, 0x4a, 0x08, 0xa5, 0xb2, 0x02, 0xa1, 0x24, 0x98, 0xa2, 0x2e, 0x57, 0xba, 0xd5, 0x46, 0x74, 0xed, 0x4b, 0x51, 0x01, 0x09, 0xd5, 0x2b, 0x5f, 0x74, 0xe7, 0x0e, 0x1f, 0x6f, 0x82, 0x16, 0x17, 0x18, 0xcd, 0x4c, 0xf0, 0x0c, 0xc9, 0xf1, 0x95, 0x8a, 0xcc, 0x8b, 0xdd, 0xcd, 0xfb, 0xd1, 0xfb, 0xe4, 0x6c, 0xd1 }; static const uint8_t ac_dsa_vect226_sub_prime[] = { /* Q */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x4a, 0x26, 0xdd, 0x8f, 0x49, 0xc6, 0x81, 0x1c, 0xe8, 0x1b, 0xb1, 0x34, 0x2b, 0x06, 0xe9, 0x80, 0xf6, 0x4b, 0x75 }; static const uint8_t ac_dsa_vect226_base[] = { /* G */ 0x99, 0xab, 0x03, 0x0a, 0x21, 0xa5, 0xc9, 0x81, 0x81, 0x74, 0x87, 0x21, 0x67, 0x64, 0x1c, 0x81, 0xc1, 0xe0, 0x3c, 0x9b, 0x27, 0x4c, 0xfb, 0xc2, 0x7b, 0xc4, 0x72, 0x54, 0x29, 0x27, 0x76, 0x6d, 0xe5, 0xfa, 0x05, 0x39, 0xb3, 0xb7, 0x3f, 0x3f, 0x16, 0xac, 0x86, 0x6a, 0x9a, 0xec, 0x8b, 0x44, 0x5d, 0xed, 0x97, 0xfb, 0xff, 0x08, 0x83, 0x4e, 0xd9, 0x8c, 0x77, 0xe7, 0xfc, 0x89, 0xe5, 0xdc, 0x65, 0x7b, 0xef, 0x76, 0x6f, 0xf7, 0xfb, 0xf8, 0xe7, 0x68, 0x73, 0xe1, 0x7b, 0xee, 0x41, 0x27, 0x62, 0xd5, 0x6f, 0xe1, 0x14, 0x17, 0x60, 0xab, 0x4d, 0x25, 0xba, 0xfd, 0x4b, 0x6e, 0xf2, 0x5b, 0x49, 0xa3, 0x50, 0x66, 0x32, 0xd1, 0xf8, 0xe1, 0x07, 0x70, 0x93, 0x07, 0x60, 0xec, 0x13, 0x25, 0x93, 0x2c, 0x5a, 0x4b, 0xaf, 0x9e, 0x90, 0x15, 0x42, 0x64, 0xdd, 0xf4, 0x42, 0xec, 0x5c, 0x41, 0xfe, 0xd9, 0x5d, 0x11, 0x52, 0x51, 0x51, 0xdb, 0xcf, 0xb3, 0x75, 0x81, 0x49, 0xba, 0xd8, 0x1c, 0x62, 0xb9, 0xcf, 0xf7, 0x81, 0x6b, 0x8f, 0x95, 0x3b, 0x8b, 0x7c, 0x02, 0x25, 0x90, 0xd1, 0x58, 0x4e, 0x92, 0x1d, 0xc9, 0x55, 0xf5, 0x32, 0x8a, 0xc7, 0x29, 0x83, 0xed, 0x5c, 0xf0, 0xd0, 0x40, 0x56, 0xfe, 0x0d, 0x53, 0x1e, 0x62, 0xf8, 0xf6, 0xc9, 0xab, 0x3c, 0x0f, 0xcd, 0x44, 0xe1, 0x48, 0x60, 0xb7, 0x31, 0x1d, 0x25, 0x61, 0xc7, 0x7c, 0x1d, 0x32, 0xf6, 0xc6, 0x9d, 0xc8, 0xf7, 0x79, 0x68, 0xc9, 0xd8, 0x81, 0xad, 0x9d, 0xb5, 0xe0, 0xc1, 0x14, 0xfd, 0xa8, 0x62, 0x8b, 0xca, 0x03, 0x35, 0xeb, 0x7f, 0xb9, 0xe1, 0x5e, 0x62, 0x5a, 0xab, 0xab, 0x58, 0xfc, 0x01, 0x19, 0x4c, 0x81, 0xbf, 0x6f, 0xb2, 0xce, 0x54, 0x07, 0x7b, 0x82, 0x25, 0x0e, 0x57, 0xc6, 0xa7, 0xb2, 0x5d, 0xeb, 0x6e, 0xe3, 0x9d, 0x4b, 0x68, 0x6a, 0x5c, 0x30, 0x7a, 0x76, 0x12, 0xb2, 0xd8, 0x5e, 0xe9, 0x25, 0x12, 0x41, 0x3d, 0xea, 0x29, 0x7e, 0x44, 0xf3, 0x17, 0xbe, 0x7c, 0xeb, 0x70, 0xa3, 0x32, 0x8a, 0xf0, 0xb4, 0x01, 0x00, 0x1a, 0x41, 0x85, 0x62, 0xb8, 0xff, 0xe4, 0xe9, 0x77, 0x1b, 0x4b, 0x4a, 0x8e, 0x0b, 0x40, 0xc7, 0x91, 0x34, 0x9d, 0x5d, 0x4e, 0x45, 0x9f, 0xe6, 0x20, 0xa1, 0xa2, 0xfc, 0x72, 0xe2, 0xf6, 0xca, 0x28, 0x56, 0x7d, 0x4c, 0x26, 0x32, 0xbb, 0xde, 0x1b, 0x49, 0x86, 0x4c, 0x06, 0xbb, 0x12, 0x61, 0x9f, 0x13, 0x2c, 0x1d, 0xa8, 0xf5, 0x71, 0xef, 0x61, 0x3e, 0xac, 0x73, 0x9f, 0x66, 0xab, 0x39, 0x14, 0xcb, 0x3f, 0xa1, 0xab, 0x86, 0xe0, 0x5e, 0x50, 0x82, 0xeb, 0xaa, 0x24, 0xeb, 0xee, 0xa4, 0xcf, 0x51, 0xbe, 0xef, 0xc2, 0x7d, 0xf5, 0x12, 0xfe, 0x3f, 0xee, 0x7d }; static const uint8_t ac_dsa_vect226_ptx[] = { /* Msg */ 0xca, 0x84, 0xaf, 0x5c, 0x9a, 0xdb, 0xc0, 0x04, 0x4d, 0xb0, 0x0d, 0x7a, 0xcf, 0xb1, 0xb4, 0x93, 0xaa, 0xb0, 0x38, 0x8f, 0xfb, 0xad, 0x47, 0xb3, 0x8c, 0xd3, 0xe9, 0xe3, 0x11, 0x1c, 0xfe, 0x2c, 0xda, 0x2a, 0x45, 0xf7, 0x51, 0xc4, 0x68, 0x62, 0xf0, 0x5b, 0xdc, 0xec, 0x4b, 0x69, 0x8a, 0xdf, 0xd2, 0xe1, 0x60, 0x6e, 0x48, 0x4c, 0x3b, 0xe4, 0xac, 0x0c, 0x37, 0x9d, 0x4f, 0xbc, 0x7c, 0x2c, 0xda, 0x43, 0xe9, 0x22, 0x81, 0x1d, 0x7f, 0x6c, 0x33, 0x04, 0x0e, 0x8e, 0x65, 0xd5, 0xf3, 0x17, 0x68, 0x4b, 0x90, 0xe2, 0x63, 0x87, 0xcf, 0x93, 0x1f, 0xe7, 0xc2, 0xf5, 0x15, 0x05, 0x8d, 0x75, 0x3b, 0x08, 0x13, 0x7f, 0xf2, 0xc6, 0xb7, 0x9c, 0x91, 0x0d, 0xe8, 0x28, 0x31, 0x49, 0xe6, 0x87, 0x2c, 0xb6, 0x6f, 0x7e, 0x02, 0xe6, 0x6f, 0x23, 0x71, 0x78, 0x51, 0x29, 0x56, 0x93, 0x62, 0xf1 }; static const uint8_t ac_dsa_vect226_priv_val[] = { /* X */ 0x43, 0x3c, 0xfd, 0x05, 0x32, 0xcc, 0xfd, 0x8c, 0xdd, 0x1b, 0x25, 0x92, 0x0d, 0x2b, 0xb7, 0x39, 0x69, 0x87, 0xb7, 0x66, 0x24, 0x03, 0x79, 0x03, 0x5b, 0x0e, 0x86, 0x52, 0x7c, 0xe9, 0xc5, 0x2d }; static const uint8_t ac_dsa_vect226_pub_val[] = { /* Y */ 0xe7, 0xc2, 0xee, 0x18, 0xc3, 0xaa, 0x36, 0x2c, 0x01, 0x82, 0xc6, 0xa5, 0x6c, 0x25, 0x84, 0x62, 0x80, 0x83, 0xc7, 0x3e, 0x04, 0x5b, 0xed, 0xa8, 0xd6, 0x53, 0x69, 0x0c, 0x9c, 0x2f, 0x65, 0x44, 0xed, 0xf9, 0x70, 0x2c, 0x57, 0xc4, 0x55, 0x27, 0x39, 0x05, 0x33, 0x6a, 0x5f, 0x51, 0x71, 0x10, 0x7a, 0x31, 0x3c, 0xd7, 0xd0, 0xb0, 0xf5, 0x0f, 0x8d, 0x33, 0x42, 0xc6, 0x02, 0x19, 0xf2, 0x2a, 0x90, 0x23, 0x39, 0x40, 0x59, 0xd0, 0x5f, 0x46, 0x4c, 0x44, 0x96, 0xd5, 0x5d, 0xab, 0x6e, 0xb0, 0x89, 0x85, 0x27, 0xff, 0x4c, 0xf5, 0x67, 0x8e, 0x7b, 0x5b, 0xfb, 0x5e, 0x18, 0xd9, 0x2c, 0x4a, 0x9d, 0x73, 0x28, 0x8c, 0xce, 0x14, 0x53, 0x0f, 0xc4, 0x70, 0x2f, 0x6d, 0x03, 0x97, 0xec, 0x39, 0xa8, 0x80, 0xc4, 0xa7, 0x2d, 0x35, 0x87, 0x30, 0xc5, 0x66, 0x33, 0x38, 0x6e, 0xde, 0x02, 0x80, 0x23, 0xc1, 0x79, 0x1f, 0x31, 0x64, 0xd1, 0x57, 0x4e, 0x78, 0x23, 0xc7, 0x9b, 0x8a, 0x3c, 0xa1, 0x34, 0x3e, 0xa1, 0x66, 0xba, 0x6f, 0x02, 0xb7, 0xff, 0x7e, 0x9e, 0xf2, 0x19, 0x8d, 0xb1, 0x07, 0xf7, 0xcc, 0x15, 0x9f, 0x3b, 0x6a, 0x1c, 0x00, 0xa7, 0x8c, 0x35, 0x5c, 0x56, 0x6d, 0xeb, 0x0a, 0xc6, 0xfd, 0xe3, 0xf6, 0x33, 0xcb, 0x91, 0x77, 0xa1, 0xfb, 0xc6, 0xc1, 0x76, 0x6c, 0xa0, 0x21, 0xd5, 0xfe, 0xc4, 0x70, 0x10, 0x1a, 0xbb, 0x44, 0x0d, 0x2f, 0x06, 0x98, 0x21, 0x81, 0xa8, 0xc9, 0x2b, 0x7c, 0xdd, 0x76, 0x53, 0x36, 0xb9, 0xa1, 0xe1, 0xab, 0x70, 0x28, 0x3d, 0x6d, 0xb0, 0xa9, 0x63, 0xfb, 0x64, 0x8c, 0x37, 0xc4, 0xe2, 0x9a, 0x74, 0xc3, 0x75, 0x77, 0x29, 0x10, 0x49, 0xab, 0x47, 0xcd, 0xbc, 0x10, 0x4c, 0x04, 0xdb, 0x96, 0x66, 0x81, 0xea, 0x8e, 0xbb, 0x9f, 0x00, 0xcf, 0x4c, 0x4a, 0x54, 0x62, 0x11, 0x73, 0x79, 0x57, 0x5f, 0xbd, 0xa4, 0xb8, 0x01, 0x97, 0x94, 0x51, 0xfa, 0x94, 0xb1, 0x9b, 0x4e, 0x93, 0x65, 0x67, 0x05, 0xc0, 0xf7, 0x34, 0xf3, 0xe0, 0x91, 0x4b, 0xb9, 0x6c, 0x1e, 0x2b, 0x8a, 0x0f, 0xb6, 0x8f, 0xaf, 0x14, 0x29, 0x6e, 0xfd, 0xf3, 0x30, 0x0a, 0xd9, 0x5b, 0xcd, 0xe8, 0xb6, 0x7c, 0xc4, 0xb2, 0x6e, 0x64, 0x88, 0xee, 0xf9, 0x25, 0xcf, 0xae, 0xac, 0x6f, 0x0d, 0x65, 0x67, 0xe8, 0xb4, 0x13, 0x55, 0xf8, 0x9d, 0x1c, 0x2b, 0x8f, 0xe6, 0x87, 0xbf, 0xa2, 0xdf, 0x5e, 0x28, 0x7e, 0x13, 0x05, 0xb8, 0x9b, 0x8c, 0x38, 0x8c, 0x26, 0x19, 0x60, 0x90, 0xac, 0x03, 0x51, 0xab, 0xc5, 0x61, 0xaa, 0xdc, 0x79, 0x7d, 0xa8, 0xcc, 0xea, 0x41, 0x46, 0xc3, 0xe9, 0x60, 0x95, 0xeb, 0xce, 0x35, 0x3e, 0x0d, 0xa4, 0xc5, 0x50, 0x19, 0x05, 0x2c, 0xaa }; /* K = 40f503abd70fd49a76c67a83e08b062b3fd465ad92be433c080e5f295bb9f559 */ static const uint8_t ac_dsa_vect226_out[] = { /* R */ 0x21, 0xca, 0x14, 0x8c, 0xdf, 0x44, 0xbe, 0x4a, 0xe9, 0x3b, 0x2f, 0x35, 0x3b, 0x8e, 0x51, 0x2d, 0x03, 0xad, 0x96, 0xda, 0xfa, 0x80, 0x62, 0x3f, 0xde, 0x49, 0x22, 0xa9, 0x5f, 0x03, 0x27, 0x32, /* S */ 0x73, 0xe4, 0x8b, 0x77, 0xa3, 0xaa, 0x44, 0x30, 0x74, 0x83, 0xc2, 0xdd, 0x89, 0x5c, 0xb5, 0x1d, 0xb2, 0x11, 0x21, 0x77, 0xc1, 0x85, 0xc5, 0x9c, 0xb1, 0xdc, 0xff, 0x32, 0xfd, 0xa0, 0x2a, 0x4f }; #define ac_dsa_vect227_prime ac_dsa_vect226_prime #define ac_dsa_vect227_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect227_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect227_ptx[] = { /* Msg */ 0x3c, 0xca, 0xd0, 0x01, 0x85, 0x19, 0xa8, 0x98, 0xf8, 0x7d, 0x8c, 0xe5, 0xf2, 0x8c, 0x0d, 0x93, 0xab, 0x16, 0xc5, 0x1a, 0xdd, 0xf4, 0x17, 0x33, 0x22, 0xcb, 0xc4, 0x9d, 0x48, 0xca, 0x9e, 0xa3, 0x7e, 0xbe, 0x8b, 0xc9, 0xd8, 0xc1, 0xb3, 0xf7, 0x83, 0xf8, 0xcf, 0x59, 0xcf, 0x3f, 0xcb, 0xa1, 0x0a, 0x39, 0x3e, 0xb2, 0xdd, 0xd9, 0x89, 0xce, 0x25, 0x8e, 0x73, 0x78, 0x8c, 0xe7, 0x4b, 0x0c, 0xe8, 0x22, 0x3d, 0x24, 0xe9, 0x93, 0xcf, 0xea, 0xfa, 0x49, 0xcc, 0x8e, 0xc1, 0xb8, 0xec, 0xee, 0x01, 0x7d, 0x83, 0xa1, 0x1b, 0xb7, 0x03, 0x4c, 0x77, 0x92, 0x06, 0xc3, 0x64, 0xac, 0x46, 0x3c, 0xfe, 0xd3, 0x04, 0x7e, 0x1a, 0x2b, 0xf5, 0xc5, 0x91, 0x77, 0x3b, 0x1d, 0x88, 0x2b, 0x31, 0x0b, 0xfb, 0xa2, 0xdb, 0x87, 0x89, 0x3c, 0x89, 0xa5, 0x44, 0x2c, 0x08, 0x45, 0xbf, 0x64, 0x4e, 0x21 }; static const uint8_t ac_dsa_vect227_priv_val[] = { /* X */ 0x30, 0x6c, 0x13, 0x04, 0xb3, 0x80, 0xb7, 0xc3, 0xe0, 0x9e, 0x7a, 0x4b, 0x48, 0x9c, 0x64, 0xa2, 0x95, 0x58, 0x2b, 0xb3, 0xe0, 0x3c, 0xe5, 0x26, 0xf1, 0x3d, 0x74, 0x82, 0xef, 0x82, 0x63, 0xf0 }; static const uint8_t ac_dsa_vect227_pub_val[] = { /* Y */ 0x37, 0x50, 0xd3, 0x63, 0x53, 0xbf, 0xd2, 0xe9, 0x97, 0x3e, 0x26, 0xa5, 0x55, 0xbc, 0xf0, 0xd8, 0x34, 0xd3, 0xd6, 0x62, 0x0c, 0xb6, 0x65, 0x79, 0x19, 0x9e, 0x04, 0x0c, 0xe8, 0xec, 0xcf, 0xae, 0xe6, 0x60, 0x04, 0x6e, 0x78, 0xdf, 0x66, 0xe8, 0xff, 0x64, 0x15, 0x23, 0x04, 0x6a, 0xdc, 0xf4, 0x25, 0xb8, 0x31, 0x9d, 0xb2, 0x44, 0x76, 0x80, 0x19, 0x4c, 0x3a, 0x38, 0x6b, 0x52, 0x01, 0xdd, 0x1a, 0xc6, 0xbf, 0x3e, 0x66, 0x39, 0x4e, 0x93, 0x9e, 0xaa, 0xac, 0xa4, 0xfd, 0x3f, 0x38, 0x6f, 0xcf, 0xe1, 0xd5, 0xef, 0x45, 0x24, 0xb0, 0x6c, 0x5e, 0xd9, 0xa1, 0x57, 0x46, 0xf2, 0x4b, 0xae, 0xf1, 0xee, 0xc4, 0x1e, 0x68, 0x3b, 0xf3, 0x53, 0x71, 0x08, 0x44, 0x95, 0xd4, 0xda, 0x8e, 0x72, 0x7a, 0xeb, 0xa3, 0x07, 0xfb, 0xa0, 0x00, 0xa7, 0x69, 0xa2, 0x34, 0xe3, 0xc4, 0x60, 0x97, 0x04, 0xb3, 0xba, 0x4d, 0xfd, 0x6a, 0x86, 0x44, 0xfb, 0xa5, 0x60, 0x83, 0xda, 0xc8, 0x48, 0x75, 0x1b, 0x52, 0xa8, 0xc2, 0xcd, 0xc4, 0x79, 0x46, 0xcd, 0x21, 0xea, 0x24, 0x38, 0x3c, 0xc6, 0x24, 0x4f, 0x00, 0x09, 0x18, 0xe9, 0xa2, 0x32, 0x76, 0xb6, 0x06, 0xc5, 0x68, 0x85, 0x65, 0xc4, 0x4d, 0xdf, 0x77, 0x88, 0x18, 0x1b, 0x78, 0x95, 0x65, 0xa6, 0xbe, 0xcd, 0x25, 0x71, 0x23, 0xbb, 0x81, 0xa2, 0xcb, 0xf9, 0xdb, 0x7f, 0xa3, 0x84, 0xe0, 0xca, 0x41, 0x80, 0x4e, 0xd7, 0xcd, 0x3c, 0x9c, 0xa0, 0xe1, 0xf8, 0xbb, 0x39, 0x0b, 0xff, 0x50, 0x21, 0x3b, 0x06, 0x29, 0x68, 0x24, 0x09, 0x93, 0x37, 0x70, 0xf6, 0xe0, 0x3a, 0x5c, 0x4e, 0x7e, 0x89, 0xad, 0xe9, 0x02, 0x55, 0x60, 0x97, 0x86, 0xf6, 0xb2, 0xfc, 0x5a, 0x7a, 0xa7, 0x56, 0x6b, 0xcf, 0x7f, 0x72, 0x5a, 0xea, 0xd4, 0xcf, 0x45, 0x6c, 0x5f, 0x5e, 0xd7, 0xdc, 0x3e, 0x91, 0xe2, 0x0d, 0x94, 0xd1, 0xaa, 0x2f, 0x65, 0x68, 0xc9, 0x7a, 0xbd, 0xf2, 0x1e, 0x0b, 0xa8, 0xcb, 0xfb, 0x65, 0x61, 0x30, 0x5c, 0xb4, 0x51, 0x75, 0xb1, 0xab, 0xd7, 0xf3, 0x9b, 0x9a, 0x11, 0xc7, 0x97, 0x92, 0x6b, 0x94, 0x4f, 0x5d, 0x13, 0xc3, 0xd7, 0x0e, 0x0b, 0x2a, 0x8c, 0xa1, 0x8e, 0x1f, 0x5c, 0xda, 0x8c, 0xe6, 0xac, 0x43, 0xec, 0xbc, 0x1f, 0xef, 0x88, 0x1f, 0x5e, 0xef, 0x5a, 0x84, 0x2f, 0xd5, 0x98, 0x4a, 0xd1, 0xe3, 0x21, 0xa3, 0x17, 0x00, 0x5a, 0xd4, 0x78, 0xcb, 0x47, 0xc9, 0xcf, 0xf6, 0x12, 0x67, 0xf1, 0xd4, 0x96, 0xfd, 0xed, 0x0a, 0x48, 0x32, 0x8d, 0x62, 0x9b, 0x7b, 0x20, 0x0c, 0x44, 0x16, 0x34, 0xee, 0x90, 0x88, 0x79, 0x01, 0x17, 0x45, 0xbc, 0xab, 0x66, 0x60, 0xe1, 0x55, 0x83, 0x74, 0x80, 0x14, 0xd6, 0xde, 0x2f, 0xe2 }; /* K = 223e52fc516c0a79f55a5474321264fcce78c050cf79b3d9961b37e24d7f32d3 */ static const uint8_t ac_dsa_vect227_out[] = { /* R */ 0x1e, 0xf7, 0x72, 0x33, 0x45, 0xb2, 0x01, 0x3b, 0x71, 0x10, 0x4c, 0xee, 0xdb, 0xe7, 0xa9, 0xca, 0xd4, 0x30, 0x01, 0x89, 0x68, 0xbb, 0x29, 0x5b, 0x67, 0x2c, 0x2b, 0x57, 0xb9, 0xa1, 0x08, 0xb9, /* S */ 0x72, 0x85, 0x2d, 0xa4, 0x85, 0xc0, 0x83, 0x6a, 0x8e, 0xbd, 0xbc, 0x4c, 0x99, 0x6f, 0x7f, 0x6c, 0xb6, 0x5e, 0x99, 0x39, 0x1c, 0xe0, 0x6b, 0x19, 0xa7, 0x18, 0x76, 0x18, 0xe9, 0xa9, 0x55, 0x84 }; #define ac_dsa_vect228_prime ac_dsa_vect226_prime #define ac_dsa_vect228_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect228_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect228_ptx[] = { /* Msg */ 0x1f, 0xc9, 0x82, 0x88, 0x85, 0x7f, 0xb3, 0xa8, 0x3a, 0xb5, 0x07, 0x46, 0x5a, 0x53, 0xc0, 0x79, 0xed, 0x66, 0x67, 0x9c, 0xaf, 0xdf, 0xb8, 0x65, 0x3b, 0xfd, 0xeb, 0xb0, 0x30, 0x20, 0xfe, 0x86, 0xa9, 0x43, 0x18, 0x2d, 0x4f, 0x13, 0x77, 0xd5, 0x8e, 0xca, 0x3c, 0x77, 0x10, 0xd3, 0x2e, 0x21, 0x0d, 0x8d, 0x03, 0x72, 0x8b, 0xc6, 0x9e, 0x1b, 0x80, 0x03, 0x94, 0x4f, 0xfe, 0xda, 0xa1, 0xb6, 0x9a, 0xe6, 0xcc, 0x50, 0x63, 0x02, 0xbd, 0x69, 0x17, 0x01, 0x9f, 0x58, 0x8c, 0xc2, 0x95, 0x01, 0xcc, 0x82, 0x63, 0x57, 0x2e, 0xbc, 0x0f, 0xeb, 0x15, 0x38, 0x77, 0x17, 0x4b, 0xcf, 0xdb, 0xad, 0x4a, 0x58, 0x65, 0x91, 0x75, 0xd2, 0xde, 0x71, 0xd5, 0xf5, 0x01, 0x9c, 0x46, 0xd1, 0x12, 0xb6, 0x63, 0x1c, 0xf0, 0xc3, 0xf9, 0x12, 0xaa, 0xc8, 0x31, 0x40, 0xcd, 0x56, 0xcd, 0xf9, 0x03, 0xee }; static const uint8_t ac_dsa_vect228_priv_val[] = { /* X */ 0x04, 0x7a, 0x5e, 0x52, 0x03, 0x9d, 0xa4, 0x05, 0x23, 0xfe, 0xff, 0xe6, 0x33, 0x12, 0x88, 0x7e, 0x4d, 0x1e, 0xcd, 0xf6, 0x4f, 0x32, 0xab, 0xb3, 0x1d, 0xfe, 0x68, 0x0b, 0xd1, 0x51, 0x30, 0x77 }; static const uint8_t ac_dsa_vect228_pub_val[] = { /* Y */ 0x33, 0x53, 0x72, 0x77, 0x0c, 0x0e, 0x8e, 0x59, 0x1a, 0x36, 0x7d, 0xe9, 0x98, 0x33, 0xbd, 0xe6, 0xf0, 0x12, 0x40, 0xbc, 0x6e, 0x23, 0x6a, 0x5b, 0x4e, 0x36, 0x23, 0x3e, 0x12, 0x0b, 0x8e, 0xe6, 0xd1, 0xc1, 0x9c, 0x77, 0xf4, 0xcd, 0xbc, 0x29, 0x4d, 0x32, 0x78, 0xc3, 0xd4, 0xcf, 0x73, 0xed, 0x9e, 0x8e, 0xa5, 0x03, 0x2b, 0x05, 0x24, 0xa3, 0x91, 0xcf, 0x29, 0x3b, 0x35, 0xee, 0x7e, 0x02, 0x34, 0x30, 0x22, 0x22, 0x16, 0xd9, 0xf1, 0x8b, 0x45, 0x02, 0x2f, 0x4d, 0x5f, 0x93, 0x85, 0xf6, 0x38, 0x4d, 0x9f, 0xaf, 0x1a, 0x0f, 0xfa, 0x4a, 0x80, 0x0d, 0xa2, 0x3b, 0x93, 0x76, 0x51, 0xa0, 0x9e, 0x82, 0xc2, 0x22, 0x85, 0xb9, 0xde, 0x6a, 0x40, 0x8e, 0x23, 0x38, 0x6f, 0xfa, 0x67, 0xab, 0xb9, 0xd1, 0xc7, 0x1c, 0xda, 0x7b, 0xc0, 0xc9, 0x35, 0x25, 0xfc, 0xd7, 0x9e, 0x83, 0x15, 0x3e, 0x74, 0x60, 0x70, 0x78, 0x24, 0x67, 0x85, 0x8b, 0x69, 0x7a, 0xd1, 0x49, 0x14, 0x67, 0x30, 0x33, 0xfe, 0xdb, 0x2d, 0x7a, 0x10, 0x5a, 0xd2, 0xd4, 0x38, 0xda, 0xaa, 0x35, 0xb5, 0x03, 0xb5, 0x18, 0x31, 0x4a, 0xc3, 0x70, 0xfc, 0x5b, 0x11, 0x12, 0xd4, 0xfe, 0x51, 0x4e, 0x58, 0x35, 0xd9, 0xa8, 0x6d, 0xe2, 0x5e, 0x6b, 0x35, 0x69, 0x13, 0x92, 0xd1, 0xcd, 0x04, 0x83, 0x6d, 0x41, 0x26, 0xb2, 0x95, 0xb8, 0xa8, 0x9f, 0x21, 0x7d, 0x58, 0x12, 0x58, 0xaf, 0x95, 0x27, 0x7b, 0x8b, 0x91, 0xc3, 0x1e, 0x6b, 0x0d, 0x23, 0xa7, 0xc5, 0x2b, 0x0c, 0xe2, 0x64, 0x1c, 0xf1, 0xa2, 0x52, 0x83, 0x8b, 0x6e, 0x28, 0xe2, 0x26, 0xcf, 0xc4, 0xfa, 0x9d, 0xc9, 0x14, 0xc5, 0xf6, 0x75, 0xfc, 0x90, 0x0e, 0xd6, 0x80, 0xdc, 0x1a, 0xa9, 0xe1, 0xd1, 0x71, 0x93, 0xc4, 0x32, 0xaf, 0x40, 0x32, 0xeb, 0xab, 0x95, 0x41, 0x91, 0x32, 0x70, 0x83, 0xc5, 0x9a, 0x5f, 0x64, 0xc1, 0xea, 0x18, 0x10, 0x7c, 0xe4, 0xd7, 0x21, 0x1d, 0x1c, 0x22, 0xf0, 0x48, 0x05, 0xed, 0x54, 0x8f, 0xc2, 0x2d, 0xf4, 0xb1, 0x62, 0xf3, 0x0b, 0x6f, 0xf3, 0xa7, 0xf7, 0xc3, 0x8a, 0x5a, 0x95, 0xfe, 0x82, 0x4d, 0x29, 0x61, 0x18, 0x0e, 0x98, 0xb3, 0x02, 0x08, 0xdc, 0x7e, 0xa7, 0x07, 0x1f, 0x79, 0x22, 0x61, 0xd4, 0x5c, 0x7b, 0xb7, 0xb9, 0x11, 0xf3, 0xb1, 0x9c, 0x3e, 0xe0, 0x17, 0x1a, 0x32, 0x6c, 0x03, 0x3c, 0xf5, 0xfc, 0x2b, 0xf7, 0x9d, 0xe7, 0xd5, 0x11, 0x5a, 0xc5, 0x68, 0xe0, 0x47, 0x89, 0xcb, 0x44, 0xe0, 0x8f, 0x3a, 0x86, 0x27, 0xa1, 0xb1, 0xf3, 0x76, 0x23, 0x42, 0xb4, 0x9b, 0x76, 0x79, 0xbd, 0x7e, 0xdb, 0xe4, 0x7b, 0xc3, 0xee, 0x9c, 0x3f, 0x02, 0xdb, 0x15, 0xd5, 0x32, 0x56, 0xa5, 0xea, 0x28, 0x47 }; /* K = 69a22d61b152af35c1b43deda88d5ad456d38df75b318b82712b2690a5f2f647 */ static const uint8_t ac_dsa_vect228_out[] = { /* R */ 0x5d, 0xd0, 0xc7, 0xe8, 0xa3, 0x99, 0x3b, 0x9d, 0xe0, 0x67, 0x6a, 0x57, 0x9c, 0x89, 0x7e, 0xa3, 0x99, 0x43, 0xa4, 0x3d, 0xbe, 0xc5, 0x99, 0x6e, 0x58, 0xc1, 0x98, 0x5b, 0x54, 0x1d, 0x7c, 0x1a, /* S */ 0x67, 0x97, 0x10, 0x01, 0x82, 0x2a, 0x08, 0xa2, 0x14, 0x8a, 0x6b, 0x1a, 0xdb, 0x50, 0x27, 0x4a, 0x57, 0xda, 0xfe, 0x89, 0x6f, 0xb0, 0x4a, 0x12, 0xa6, 0xf9, 0x97, 0x07, 0x55, 0x53, 0x06, 0xac }; #define ac_dsa_vect229_prime ac_dsa_vect226_prime #define ac_dsa_vect229_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect229_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect229_ptx[] = { /* Msg */ 0xfd, 0xa9, 0x76, 0x5c, 0xc9, 0x1a, 0x9d, 0xb9, 0x22, 0xae, 0xc7, 0xb1, 0x3f, 0xc3, 0x2a, 0xc4, 0xec, 0x4e, 0x3b, 0x85, 0x34, 0xf9, 0xe9, 0x5a, 0xf9, 0x6e, 0x8e, 0xbe, 0xab, 0x89, 0xd8, 0x47, 0xdc, 0xd1, 0x50, 0x44, 0x48, 0x68, 0xcf, 0xaf, 0x42, 0x13, 0xf8, 0xd8, 0xba, 0xa6, 0xb1, 0xd0, 0x88, 0x62, 0x24, 0xe2, 0xaf, 0xd0, 0xae, 0xb9, 0x3d, 0x59, 0xb8, 0x86, 0x57, 0x20, 0x88, 0xd0, 0x5b, 0xf7, 0x21, 0xc7, 0xad, 0xfb, 0x54, 0xda, 0x47, 0xc6, 0xc4, 0x85, 0x12, 0x04, 0xa7, 0xa9, 0x2a, 0x11, 0xde, 0xb3, 0x9b, 0xa1, 0x7c, 0xf6, 0xc0, 0x7f, 0xb7, 0xce, 0x8b, 0xa3, 0x50, 0xa9, 0x9d, 0x01, 0x8d, 0x4e, 0xa6, 0x4b, 0xd5, 0x6d, 0x1d, 0x9f, 0x8f, 0x7d, 0x88, 0x15, 0x7f, 0x19, 0x0f, 0xcb, 0x37, 0x2a, 0xcf, 0x6f, 0x8d, 0x31, 0xcf, 0x7b, 0x79, 0x5b, 0x36, 0xc1, 0x0f, 0x5e }; static const uint8_t ac_dsa_vect229_priv_val[] = { /* X */ 0x7f, 0x6c, 0xe3, 0x53, 0x84, 0x19, 0x63, 0xc8, 0xa6, 0xff, 0x34, 0x05, 0x71, 0x3e, 0x36, 0x1e, 0xf9, 0xf1, 0xe0, 0x76, 0x5e, 0x66, 0x51, 0x95, 0xe7, 0xc1, 0x47, 0xdd, 0x98, 0x12, 0x0c, 0x4f }; static const uint8_t ac_dsa_vect229_pub_val[] = { /* Y */ 0x05, 0x39, 0xcc, 0x99, 0x2c, 0xa7, 0x0f, 0x91, 0x35, 0x37, 0xb1, 0x21, 0x1d, 0xd3, 0x26, 0xd8, 0x5f, 0x75, 0x31, 0xba, 0xa6, 0xbe, 0x05, 0x83, 0xba, 0x45, 0xb9, 0x57, 0x1b, 0xaa, 0x81, 0xcd, 0x58, 0x28, 0x05, 0x0d, 0xcd, 0x9a, 0xb7, 0xa2, 0x03, 0xbc, 0x4f, 0xe1, 0xd8, 0x74, 0xf7, 0x6e, 0xc1, 0xf3, 0x4d, 0x93, 0x55, 0x79, 0xed, 0x21, 0x32, 0x25, 0x57, 0x89, 0xd7, 0xe6, 0x01, 0x0c, 0xf5, 0x04, 0xb4, 0xc7, 0xf5, 0x86, 0xd4, 0x4a, 0x71, 0x66, 0x00, 0xac, 0xf8, 0xa0, 0x4a, 0xd3, 0x0c, 0xb7, 0xca, 0x05, 0x5d, 0x72, 0x23, 0xf9, 0x76, 0x1c, 0xda, 0xeb, 0xfd, 0xf7, 0xef, 0x72, 0xbd, 0xea, 0x3d, 0xfc, 0xd0, 0x20, 0x06, 0x9a, 0x96, 0x9c, 0x56, 0x01, 0x60, 0xf0, 0x53, 0x46, 0x76, 0xbe, 0xff, 0x5e, 0xa6, 0x11, 0xfc, 0xbc, 0x0f, 0xd4, 0x7c, 0x86, 0x7f, 0x31, 0x63, 0xe1, 0x37, 0x1e, 0x1d, 0xe6, 0x7a, 0x1a, 0x3c, 0x3e, 0x37, 0x16, 0x8b, 0xf0, 0xbe, 0x79, 0xc0, 0x9f, 0x45, 0xf2, 0xbc, 0x43, 0x51, 0x7a, 0xee, 0xa0, 0x10, 0x0a, 0x2a, 0x25, 0xd1, 0x48, 0xff, 0x19, 0x90, 0xc0, 0x61, 0x43, 0xfa, 0x25, 0x3d, 0x83, 0x06, 0xf4, 0x8d, 0x77, 0x36, 0x22, 0x24, 0xbc, 0x3e, 0xfe, 0x93, 0x38, 0x9e, 0x92, 0x2d, 0xef, 0x0f, 0xd1, 0x1d, 0x19, 0x92, 0xf5, 0x50, 0xed, 0x82, 0x94, 0xb6, 0x13, 0x65, 0x47, 0xff, 0xd6, 0x12, 0xb0, 0xbc, 0x8e, 0x4e, 0xe9, 0x0b, 0x31, 0x00, 0xbb, 0x89, 0x92, 0x21, 0x77, 0x14, 0x7b, 0xe0, 0x08, 0x32, 0x81, 0xbf, 0x66, 0x3f, 0x83, 0x70, 0x41, 0x7f, 0xa7, 0x90, 0xd4, 0x10, 0x5e, 0xb9, 0x8c, 0xc1, 0x26, 0xf5, 0x00, 0x5b, 0x7c, 0x08, 0xbc, 0x21, 0x1d, 0xea, 0x28, 0x98, 0xaa, 0x65, 0x3c, 0x3d, 0x2b, 0x51, 0xfc, 0x67, 0x73, 0x2b, 0xff, 0x56, 0x44, 0xe8, 0x04, 0xaa, 0xe6, 0x92, 0x00, 0xc4, 0x16, 0x03, 0x5a, 0xa0, 0xba, 0x5a, 0x14, 0xcc, 0x43, 0x9b, 0x56, 0x9f, 0x46, 0x21, 0x17, 0xb7, 0xdf, 0xcf, 0x3f, 0x2c, 0xc1, 0x3e, 0x72, 0x3a, 0x93, 0xff, 0x95, 0x33, 0x20, 0x8f, 0x20, 0x24, 0x1d, 0xaf, 0x36, 0xcd, 0x16, 0x06, 0x6b, 0xe3, 0xdb, 0xa2, 0x01, 0x17, 0xcb, 0x14, 0x5d, 0x75, 0x6f, 0x5a, 0x6f, 0x79, 0xce, 0x23, 0x56, 0xa0, 0x51, 0x64, 0x7a, 0xed, 0xd6, 0x45, 0xbf, 0xa6, 0xfa, 0xf8, 0xf8, 0x0a, 0x6f, 0xdf, 0x3e, 0xec, 0x42, 0xdd, 0xd4, 0x2b, 0xb2, 0xe7, 0xb7, 0x73, 0x82, 0x96, 0xe2, 0x39, 0x78, 0xc8, 0xbd, 0x63, 0xb8, 0x04, 0x59, 0x53, 0xe0, 0x6c, 0xef, 0x12, 0x63, 0xbf, 0xe0, 0x3b, 0xe2, 0xf6, 0x1b, 0x16, 0x00, 0x7d, 0xf1, 0xeb, 0x19, 0x85, 0x67, 0xa7, 0xbc, 0x6b, 0xff, 0x27, 0x4e }; /* K = 01cd3cdd3feb4d1a995103b1520fef17f60cd9370ad59b3efe9383a2c0126f00 */ static const uint8_t ac_dsa_vect229_out[] = { /* R */ 0x55, 0xc2, 0xb2, 0x7e, 0x76, 0x9f, 0xac, 0x99, 0xb4, 0x7b, 0xc0, 0xa5, 0x4f, 0xf1, 0x82, 0x1c, 0x7a, 0x46, 0xbe, 0x60, 0x01, 0xab, 0x66, 0x4f, 0xb6, 0x8f, 0xb1, 0xba, 0xfc, 0x04, 0x44, 0x6f, /* S */ 0x30, 0x59, 0xdb, 0x42, 0xa3, 0x99, 0xc4, 0x28, 0xf3, 0xcf, 0xbb, 0x10, 0x2d, 0x6c, 0x04, 0x09, 0xb0, 0x6f, 0x20, 0x06, 0x8d, 0x1c, 0xa8, 0xcb, 0xea, 0x48, 0x58, 0xac, 0x6e, 0x5d, 0xe1, 0xd3 }; #define ac_dsa_vect230_prime ac_dsa_vect226_prime #define ac_dsa_vect230_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect230_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect230_ptx[] = { /* Msg */ 0xe4, 0x9a, 0x12, 0xb8, 0xd7, 0x61, 0xef, 0x7a, 0xfb, 0xcb, 0x1c, 0x37, 0x7e, 0xed, 0xf6, 0x29, 0xd0, 0x8c, 0xc5, 0x09, 0xa8, 0x75, 0x3a, 0x5b, 0x92, 0xe2, 0x6a, 0x23, 0x97, 0x36, 0x51, 0x56, 0xe7, 0xc0, 0x81, 0xbc, 0xb4, 0x68, 0x66, 0x95, 0x57, 0x5c, 0x6a, 0x64, 0xf5, 0xd7, 0x7d, 0xfd, 0x55, 0x0b, 0x04, 0xdf, 0x39, 0x0a, 0xa5, 0x5e, 0x0d, 0x05, 0x1c, 0x75, 0x9f, 0x19, 0x7a, 0x75, 0x1a, 0x60, 0x41, 0xe2, 0xdd, 0x09, 0x59, 0xf9, 0x02, 0xf2, 0xe3, 0x59, 0xa1, 0x67, 0xd8, 0x80, 0xc4, 0x9c, 0xfa, 0x81, 0xe7, 0x19, 0x6f, 0xa1, 0x60, 0x4a, 0xd3, 0x2a, 0x80, 0x17, 0x07, 0x1f, 0x09, 0x8d, 0x4c, 0xb3, 0x46, 0xb3, 0x92, 0x66, 0xfb, 0xe7, 0x56, 0x59, 0xdf, 0xc6, 0x60, 0x7b, 0xf0, 0xd8, 0x29, 0x64, 0x07, 0x82, 0xcf, 0x3e, 0x12, 0xe3, 0x83, 0x76, 0xc5, 0xa9, 0x92, 0x82 }; static const uint8_t ac_dsa_vect230_priv_val[] = { /* X */ 0x28, 0xd9, 0xbc, 0x1d, 0x9a, 0xab, 0xa8, 0x82, 0x42, 0x7e, 0xe2, 0x6c, 0x26, 0x2b, 0xd4, 0x00, 0x3a, 0xae, 0xba, 0x42, 0x2b, 0xf0, 0x53, 0xb0, 0xdd, 0xe1, 0x4b, 0xb6, 0xd6, 0xd7, 0x4b, 0xdc }; static const uint8_t ac_dsa_vect230_pub_val[] = { /* Y */ 0xee, 0x7f, 0xff, 0x18, 0x82, 0x2f, 0xf4, 0x54, 0xa2, 0x07, 0xf9, 0xdb, 0x54, 0x2d, 0x24, 0x29, 0x8b, 0xb5, 0xed, 0xb1, 0x1d, 0x80, 0xdd, 0xc6, 0xdd, 0xb9, 0xbf, 0xae, 0x0c, 0x95, 0x2d, 0x4f, 0xe8, 0xd9, 0xdb, 0x0f, 0x1a, 0x86, 0xe8, 0xa0, 0xf2, 0x19, 0x3a, 0xf7, 0xca, 0xae, 0xe7, 0x26, 0x4d, 0x74, 0x10, 0x6d, 0xe5, 0xaf, 0x0a, 0x6c, 0x14, 0xf7, 0x10, 0xbb, 0x86, 0x3e, 0xb7, 0xdc, 0x16, 0x7a, 0x1e, 0x43, 0x78, 0xb6, 0xcd, 0xb7, 0xab, 0x68, 0x41, 0xc6, 0x64, 0xe9, 0x82, 0x45, 0x29, 0x11, 0x97, 0x73, 0x57, 0x8e, 0xf5, 0x5b, 0x7c, 0x35, 0xed, 0x22, 0x1e, 0xf0, 0x70, 0xdd, 0x46, 0x90, 0xb4, 0xc1, 0x2f, 0x27, 0x67, 0x3e, 0x5d, 0x1f, 0xe9, 0x64, 0xff, 0xe2, 0x9d, 0xa5, 0x7e, 0x2d, 0x1a, 0xcd, 0x21, 0xef, 0x13, 0xe0, 0x66, 0x9f, 0xa9, 0x76, 0x68, 0xbb, 0x19, 0x9b, 0x56, 0xa3, 0xa5, 0x3e, 0x10, 0x46, 0x91, 0x33, 0x02, 0x20, 0x81, 0xcd, 0xf6, 0x26, 0x48, 0x10, 0x0d, 0xca, 0x26, 0x7c, 0x4f, 0x6a, 0x3c, 0xa3, 0xa7, 0x5b, 0x57, 0x3b, 0xb1, 0xb3, 0x9c, 0x8a, 0x4e, 0x1f, 0xcf, 0x81, 0x26, 0x9e, 0x9e, 0x1b, 0x10, 0xc6, 0x3f, 0x5b, 0xa4, 0xfe, 0x75, 0xcf, 0x71, 0x39, 0xd0, 0x38, 0xd0, 0x2f, 0x5f, 0x53, 0x4a, 0xa0, 0x81, 0xfc, 0xe7, 0x32, 0xcd, 0x50, 0x51, 0x60, 0x9b, 0xc0, 0x6f, 0x18, 0x87, 0x4d, 0xd0, 0x11, 0x21, 0xd3, 0xc1, 0x79, 0xf0, 0xc3, 0xf0, 0x39, 0x9c, 0x18, 0x5e, 0xeb, 0xdc, 0x34, 0x63, 0x5b, 0x31, 0x39, 0xf1, 0xca, 0x50, 0xfb, 0xff, 0xb3, 0xb0, 0xad, 0x12, 0xe4, 0x81, 0xc1, 0xa6, 0x46, 0x82, 0x14, 0x37, 0x93, 0xf0, 0x72, 0xc7, 0xdb, 0x8b, 0x5b, 0x9e, 0xef, 0x41, 0xcc, 0xdd, 0x66, 0xb9, 0x04, 0x13, 0x9d, 0x64, 0x44, 0x42, 0xa9, 0x2f, 0x62, 0x55, 0xed, 0xb9, 0xbc, 0x12, 0x34, 0xe2, 0x7d, 0x07, 0xa6, 0xba, 0x32, 0xb1, 0xf1, 0x4c, 0xdf, 0x98, 0xa2, 0x2c, 0x6a, 0x12, 0x30, 0x0d, 0xff, 0x50, 0xac, 0x1b, 0x65, 0x56, 0x8b, 0x6e, 0x91, 0x55, 0x41, 0xbb, 0x38, 0x6e, 0xc7, 0x25, 0xda, 0x44, 0x44, 0x67, 0xca, 0x25, 0xe8, 0x14, 0x48, 0xcb, 0x78, 0x37, 0x51, 0x46, 0xad, 0x20, 0x78, 0xa8, 0x30, 0xe7, 0xd9, 0x05, 0xde, 0x9a, 0xd7, 0xd8, 0x95, 0x59, 0xc9, 0xd4, 0x30, 0xcf, 0x5f, 0x41, 0x9c, 0xe9, 0x45, 0x70, 0x4a, 0x42, 0x6a, 0xb2, 0x64, 0x01, 0x6e, 0xd8, 0x7c, 0x90, 0xd9, 0x7f, 0x51, 0xa7, 0xd6, 0xe1, 0xee, 0x2f, 0x51, 0xbb, 0xb3, 0xa8, 0xde, 0x81, 0x39, 0x16, 0x97, 0xb0, 0xe4, 0x22, 0xdf, 0x9e, 0x5d, 0x35, 0x51, 0xe9, 0x33, 0x74, 0xe5, 0xf3, 0x80, 0x16, 0xb2, 0x96, 0xd5, 0x3b, 0xc2 }; /* K = 0650ebc3e21bf1d90ffb3ef5a707013dfce78fbd2c21a0da9c8106d1fa98a46f */ static const uint8_t ac_dsa_vect230_out[] = { /* R */ 0x21, 0xd3, 0x4d, 0xf6, 0x05, 0x23, 0x79, 0x75, 0xdb, 0x31, 0xb8, 0x64, 0xf9, 0x8c, 0x9a, 0xb6, 0xe4, 0x65, 0xdb, 0xf0, 0xb3, 0xfc, 0x58, 0x68, 0xd6, 0x7c, 0xd6, 0xcb, 0x3a, 0x13, 0x96, 0x3b, /* S */ 0x70, 0xc4, 0x88, 0x07, 0xd6, 0x2d, 0x1f, 0xe7, 0x4d, 0x58, 0x95, 0x93, 0x47, 0xab, 0x12, 0xc9, 0x7b, 0x50, 0x0d, 0x20, 0x60, 0x7e, 0xd2, 0xa9, 0x5d, 0x8a, 0x38, 0x8f, 0xee, 0x26, 0x58, 0x12 }; #define ac_dsa_vect231_prime ac_dsa_vect226_prime #define ac_dsa_vect231_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect231_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect231_ptx[] = { /* Msg */ 0x28, 0xf7, 0xa0, 0x67, 0xa0, 0xea, 0x7f, 0x0a, 0x4d, 0x79, 0x7c, 0xea, 0x39, 0x39, 0xf6, 0x6b, 0x28, 0x1e, 0xd1, 0x9c, 0xc9, 0x8b, 0x85, 0x63, 0xef, 0x37, 0x57, 0x98, 0xb4, 0x06, 0x14, 0xf4, 0xdd, 0x85, 0xac, 0x2f, 0xcf, 0xcc, 0xbc, 0x5e, 0xbf, 0x0a, 0xc9, 0x32, 0x28, 0xc0, 0xb7, 0x29, 0x37, 0xa4, 0x81, 0xca, 0x4f, 0x9d, 0xf7, 0xa7, 0xe5, 0xd2, 0xe5, 0xda, 0x9a, 0xf0, 0x48, 0x74, 0xdc, 0xec, 0x35, 0x03, 0x5f, 0x6a, 0x7d, 0xb4, 0x93, 0x79, 0x3a, 0xa2, 0x36, 0x1f, 0xb6, 0x6e, 0xf2, 0xee, 0xdb, 0x75, 0x74, 0xd0, 0x4e, 0x21, 0x47, 0xc3, 0x57, 0x29, 0x8a, 0x2a, 0xdf, 0x99, 0xac, 0xa1, 0xee, 0xbe, 0x00, 0xce, 0xfa, 0x44, 0xb3, 0x91, 0x57, 0xeb, 0x1e, 0x94, 0xaa, 0x8a, 0xa9, 0x8d, 0x54, 0x51, 0x51, 0xfb, 0xb4, 0xde, 0x67, 0x07, 0x0b, 0x39, 0x04, 0xcc, 0xe9, 0x30 }; static const uint8_t ac_dsa_vect231_priv_val[] = { /* X */ 0x0c, 0x50, 0x88, 0xf5, 0xd3, 0x37, 0x80, 0x27, 0x70, 0xe6, 0xf9, 0x83, 0x49, 0xd5, 0x34, 0x61, 0xf1, 0x31, 0x61, 0x02, 0x0a, 0xb9, 0xa2, 0x41, 0xef, 0xed, 0x4f, 0xae, 0xd2, 0xe5, 0x69, 0xee }; static const uint8_t ac_dsa_vect231_pub_val[] = { /* Y */ 0xcd, 0xb9, 0x92, 0x2d, 0x69, 0xe9, 0x9c, 0x7f, 0x34, 0xa9, 0x21, 0x0e, 0x2a, 0xfc, 0x5b, 0xe0, 0x11, 0x5d, 0xa4, 0xaa, 0xf6, 0x82, 0xd9, 0xea, 0x37, 0x78, 0x8e, 0x0b, 0x6c, 0xaa, 0x6f, 0xde, 0x13, 0xc8, 0x8e, 0x51, 0xf5, 0x58, 0x82, 0x06, 0x68, 0xb5, 0x9d, 0x14, 0xc0, 0x6d, 0x2c, 0xbe, 0x65, 0x49, 0xd3, 0xf0, 0x6d, 0x10, 0xdb, 0xee, 0xe4, 0x6f, 0x59, 0x15, 0x4c, 0xd4, 0x67, 0xae, 0x19, 0xe1, 0x6b, 0xe2, 0x5e, 0x6f, 0x6c, 0xd2, 0x38, 0xcc, 0xd1, 0x94, 0x7f, 0xc5, 0x81, 0x56, 0x2d, 0x30, 0xca, 0x32, 0x9b, 0xb3, 0x27, 0x25, 0x8c, 0xa4, 0xae, 0xb9, 0x01, 0xf8, 0x14, 0x41, 0x40, 0x58, 0xb6, 0xf1, 0x69, 0xa4, 0x5f, 0xf5, 0x5e, 0x40, 0x23, 0x2d, 0x78, 0x70, 0x49, 0x9a, 0xe7, 0x8c, 0x05, 0x13, 0x77, 0x71, 0x40, 0x75, 0x2d, 0x55, 0xf0, 0xa4, 0x70, 0x76, 0x1b, 0xdc, 0xff, 0x5a, 0x66, 0x09, 0xcc, 0xa2, 0xd1, 0x80, 0x9f, 0x18, 0x4b, 0x29, 0x87, 0x18, 0x07, 0x1d, 0x21, 0x6a, 0x14, 0xad, 0x01, 0xf5, 0x6c, 0xcc, 0xce, 0xd2, 0x39, 0x69, 0x60, 0x7b, 0x62, 0xd4, 0xd1, 0x40, 0xc9, 0xef, 0x28, 0x50, 0x76, 0x74, 0xf5, 0x9f, 0xec, 0xc7, 0xe7, 0xce, 0x8a, 0xd2, 0x63, 0x6a, 0x5c, 0x53, 0xf0, 0x70, 0xad, 0x31, 0x7c, 0x8c, 0xd0, 0x23, 0x1f, 0x50, 0x0a, 0x79, 0x0e, 0xf6, 0x9a, 0xc7, 0x86, 0x00, 0x0f, 0xaf, 0x68, 0xe7, 0xb7, 0x85, 0x4d, 0x6e, 0xb2, 0x64, 0x99, 0xa9, 0xd5, 0x24, 0xcb, 0xf8, 0xf3, 0x73, 0xca, 0x41, 0xdd, 0x6a, 0x2f, 0xa5, 0x19, 0x8e, 0xba, 0x2a, 0x8e, 0x22, 0x8f, 0x5a, 0xb2, 0x9b, 0xe9, 0xf6, 0xd4, 0x50, 0xf7, 0xf5, 0xa1, 0x49, 0xae, 0xb2, 0x0d, 0x8a, 0x27, 0x79, 0x71, 0xfa, 0x6e, 0x64, 0xa0, 0xde, 0x36, 0xc8, 0x75, 0x0a, 0xfc, 0x38, 0x19, 0x61, 0x75, 0x69, 0x75, 0x62, 0x1f, 0x28, 0x7a, 0x39, 0x50, 0xf8, 0x84, 0x02, 0xc5, 0x08, 0x1f, 0xe0, 0xc5, 0x4f, 0x44, 0xf9, 0xfa, 0x7c, 0x50, 0xdf, 0x90, 0x6b, 0x26, 0x40, 0x98, 0x85, 0x36, 0x46, 0xb3, 0xd0, 0x5a, 0x4f, 0x04, 0xc6, 0xf1, 0xbb, 0xc6, 0xc4, 0x40, 0xf7, 0xe7, 0x35, 0x8d, 0x3a, 0x72, 0xb2, 0x9f, 0x76, 0x43, 0xf4, 0x40, 0x6b, 0x7d, 0xb1, 0x73, 0x69, 0x0d, 0x40, 0xaa, 0x29, 0x38, 0xea, 0xf0, 0x18, 0x74, 0xd2, 0xba, 0x80, 0x94, 0xcc, 0x5b, 0xe1, 0x14, 0x5b, 0x2b, 0x2e, 0xe9, 0xe7, 0xcf, 0x15, 0xbf, 0x39, 0x8e, 0x50, 0x83, 0x2d, 0x95, 0x01, 0x74, 0x30, 0xb1, 0x86, 0x99, 0x38, 0x73, 0x2c, 0xdd, 0x1d, 0xf5, 0x93, 0xf5, 0xdb, 0x2b, 0x2b, 0xd7, 0x13, 0x08, 0xd8, 0xc2, 0x53, 0xd2, 0x54, 0xef, 0x39, 0xb4, 0x75, 0xe2, 0x49, 0xd8, 0x90 }; /* K = 2be962ca1f82b879255e20d6971e633ba68582a5137bc55058fa42b48ddf0566 */ static const uint8_t ac_dsa_vect231_out[] = { /* R */ 0x12, 0xde, 0x25, 0x2d, 0xa2, 0x59, 0x3c, 0x59, 0x69, 0xa6, 0x49, 0x6a, 0xe8, 0x08, 0xd8, 0x51, 0xca, 0xd1, 0xde, 0xd2, 0x95, 0x9e, 0xa8, 0x90, 0x57, 0xa9, 0x2e, 0x5e, 0xc9, 0x1c, 0x5f, 0x95, /* S */ 0x16, 0x53, 0x38, 0x07, 0x5e, 0x6a, 0x4f, 0xea, 0x0b, 0x23, 0x8f, 0x9f, 0xac, 0x90, 0x4b, 0x7b, 0x33, 0xdb, 0xee, 0x5a, 0x55, 0x26, 0x46, 0xdf, 0xbe, 0xd8, 0x27, 0xf6, 0xd2, 0x8d, 0x64, 0x92 }; #define ac_dsa_vect232_prime ac_dsa_vect226_prime #define ac_dsa_vect232_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect232_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect232_ptx[] = { /* Msg */ 0x0e, 0x15, 0x6b, 0x0b, 0xd8, 0x45, 0x95, 0x15, 0x5e, 0xf4, 0xfc, 0x21, 0x3d, 0xfc, 0x7e, 0x46, 0xbf, 0x27, 0xa8, 0x9c, 0x27, 0x57, 0x23, 0xe0, 0x98, 0x40, 0x76, 0xb0, 0x27, 0xc4, 0x9c, 0xb2, 0xee, 0xe6, 0xac, 0x86, 0x6d, 0x75, 0x33, 0x35, 0x81, 0xcc, 0xa6, 0xf8, 0x97, 0xe1, 0x14, 0x18, 0xfb, 0x37, 0xba, 0x5c, 0xab, 0x13, 0x91, 0xcd, 0x23, 0x7e, 0x2c, 0x6a, 0xb3, 0xf1, 0x1a, 0x05, 0x5d, 0x3b, 0xd0, 0x3f, 0x42, 0x5b, 0xaa, 0xab, 0xe5, 0xa6, 0xa3, 0x4e, 0xba, 0x4b, 0x11, 0x8a, 0xf7, 0x3e, 0xdd, 0x61, 0x07, 0x87, 0xcb, 0x8e, 0xaf, 0x47, 0x6b, 0xd2, 0x17, 0x04, 0x82, 0x08, 0xea, 0x4c, 0x1d, 0x05, 0x91, 0x37, 0x29, 0x47, 0xa1, 0xc0, 0xef, 0x94, 0x69, 0x65, 0x68, 0x98, 0x34, 0x24, 0xfd, 0x1d, 0x80, 0x2f, 0xc9, 0x11, 0xe7, 0xbf, 0x71, 0x22, 0x4a, 0xfd, 0xbd, 0xd9 }; static const uint8_t ac_dsa_vect232_priv_val[] = { /* X */ 0x2c, 0x4d, 0x97, 0x2b, 0xb3, 0x53, 0x98, 0x76, 0xb8, 0xf3, 0x2c, 0xc6, 0x45, 0xcf, 0xf0, 0xd4, 0xbe, 0x87, 0x71, 0x75, 0xf3, 0x1a, 0x02, 0x8b, 0x9b, 0xfe, 0x97, 0x3f, 0x06, 0x51, 0x78, 0x9a }; static const uint8_t ac_dsa_vect232_pub_val[] = { /* Y */ 0xd0, 0x97, 0x36, 0x41, 0xd5, 0x6d, 0x8b, 0xaa, 0xa2, 0xc2, 0xd4, 0x30, 0x50, 0x1d, 0xff, 0x44, 0xea, 0xf9, 0xa3, 0x65, 0x74, 0x78, 0x79, 0x91, 0x34, 0xb0, 0xf3, 0x35, 0xae, 0x94, 0xff, 0x27, 0x91, 0xdf, 0xd4, 0x94, 0x40, 0x13, 0x32, 0x48, 0x6b, 0xa6, 0x37, 0x68, 0x3e, 0x70, 0x4b, 0xd9, 0x85, 0xf5, 0x26, 0x91, 0x9e, 0x66, 0x1a, 0x22, 0x80, 0xd9, 0x9b, 0xd4, 0x82, 0x62, 0xb6, 0xc9, 0x30, 0x5e, 0x0c, 0x8f, 0xd8, 0x79, 0xcd, 0x0a, 0x83, 0x61, 0x28, 0xd8, 0x8e, 0xdd, 0xae, 0x51, 0xfc, 0xfb, 0x51, 0xf7, 0x44, 0xb2, 0x3d, 0x2d, 0x2d, 0x27, 0xa2, 0xcc, 0x1e, 0xa5, 0xa9, 0xd5, 0xe0, 0xa7, 0xfa, 0xf4, 0x22, 0x7a, 0x2a, 0xdb, 0xfb, 0x7e, 0xd4, 0x5d, 0x6a, 0xa9, 0xc3, 0x37, 0x98, 0xab, 0xf0, 0x7b, 0xc6, 0x9e, 0xfc, 0x5f, 0xdd, 0xe5, 0xdc, 0x5c, 0x78, 0x01, 0x96, 0x25, 0x70, 0x93, 0xec, 0xa7, 0x54, 0x68, 0xb1, 0x61, 0xcb, 0xa4, 0x4b, 0xcd, 0x14, 0x2b, 0x21, 0xfa, 0xe9, 0xed, 0xc6, 0xab, 0x32, 0x78, 0x30, 0xc2, 0x8e, 0x1b, 0x3d, 0x2d, 0x7c, 0x81, 0x2d, 0x8a, 0xec, 0x3a, 0x19, 0x52, 0x62, 0x7a, 0x04, 0x01, 0x10, 0x87, 0x2e, 0x14, 0x8e, 0x15, 0xde, 0x5c, 0x7b, 0x4c, 0xa2, 0x4f, 0x08, 0x63, 0x36, 0xda, 0xec, 0xbb, 0xf9, 0x81, 0x6c, 0xdb, 0x9d, 0xc7, 0x30, 0xdb, 0x8a, 0x66, 0xa1, 0x92, 0x9a, 0xbe, 0xcd, 0x4b, 0x09, 0xa0, 0x39, 0xa1, 0x9b, 0xff, 0xa4, 0x5f, 0xfc, 0x85, 0xdd, 0xf0, 0xbe, 0x32, 0x77, 0xbf, 0x07, 0x5b, 0xbb, 0x46, 0xf0, 0x7b, 0xf0, 0xda, 0xea, 0x24, 0x89, 0x7e, 0x07, 0x04, 0x4b, 0x5e, 0xe3, 0x7f, 0x9f, 0x44, 0xfe, 0xe7, 0x57, 0x18, 0x81, 0x70, 0xda, 0x22, 0x92, 0x4f, 0xa1, 0x5e, 0xd9, 0xc0, 0x7f, 0x11, 0x3c, 0xdf, 0x37, 0xa8, 0xc4, 0x86, 0x48, 0xe5, 0x86, 0xfb, 0x55, 0xa0, 0xc3, 0x5f, 0x3b, 0x63, 0xa6, 0x96, 0x67, 0x24, 0x41, 0x93, 0xc7, 0x0d, 0x94, 0xbb, 0xe3, 0x6d, 0x04, 0x3b, 0x25, 0xa0, 0x41, 0xfb, 0xa9, 0x2a, 0x20, 0x42, 0xe2, 0xee, 0xf7, 0x67, 0xe7, 0xcd, 0x18, 0xdd, 0x1c, 0x1b, 0x5c, 0xa4, 0x87, 0x8f, 0xe7, 0x74, 0xc8, 0x33, 0xcb, 0x5c, 0x5a, 0xff, 0x9f, 0x67, 0xbf, 0xd6, 0xcf, 0xbf, 0x2d, 0xfc, 0x63, 0xb8, 0x84, 0x2a, 0xd2, 0xd4, 0x9c, 0xeb, 0xca, 0xff, 0x4c, 0x39, 0x27, 0xf3, 0x19, 0x9c, 0x10, 0x6d, 0x0c, 0x14, 0x9a, 0x9b, 0x1b, 0x49, 0xbe, 0xf1, 0xd6, 0xf8, 0x14, 0x3d, 0x93, 0xd2, 0x5d, 0xf9, 0xdb, 0x1b, 0x5b, 0x37, 0xd5, 0x22, 0xe7, 0x23, 0xff, 0x64, 0xd9, 0xee, 0x52, 0xe4, 0x76, 0x20, 0x67, 0x12, 0xa3, 0x82, 0x46, 0xdd, 0x92, 0x62, 0x71, 0xf5, 0x59, 0x0e }; /* K = 5e12de89504bc84836c14fc47628a517e898fa46769eba2b36e7c69e580a6473 */ static const uint8_t ac_dsa_vect232_out[] = { /* R */ 0x5e, 0xf5, 0xd7, 0x8c, 0x42, 0x1a, 0xe5, 0xa6, 0x39, 0x78, 0xbc, 0xbf, 0x7d, 0x20, 0x37, 0xb5, 0x02, 0x2b, 0xc4, 0x7b, 0xe7, 0xb2, 0x93, 0x80, 0x65, 0x80, 0xad, 0x5b, 0x4d, 0xe2, 0x7a, 0x4e, /* S */ 0x67, 0xcc, 0xb2, 0x83, 0x3c, 0x1d, 0x32, 0xc6, 0x8e, 0x91, 0xae, 0x38, 0x90, 0xb4, 0xc9, 0xa6, 0xe5, 0x22, 0x9b, 0x22, 0xa5, 0x79, 0x91, 0x68, 0xc0, 0x04, 0x6e, 0xad, 0x92, 0x57, 0x3c, 0x85 }; #define ac_dsa_vect233_prime ac_dsa_vect226_prime #define ac_dsa_vect233_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect233_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect233_ptx[] = { /* Msg */ 0x84, 0x9c, 0x53, 0x37, 0xd8, 0x8b, 0x3b, 0x24, 0x7d, 0xf5, 0x73, 0xeb, 0x0d, 0x66, 0x55, 0x48, 0xb6, 0x42, 0x37, 0x63, 0xd5, 0x57, 0x1f, 0x8a, 0xcb, 0x5e, 0x61, 0xe3, 0x16, 0xd7, 0xcd, 0xc2, 0x08, 0xcd, 0xa5, 0xb3, 0x9a, 0x19, 0x44, 0xa7, 0x17, 0x58, 0x7e, 0x58, 0xe2, 0x1b, 0x86, 0xed, 0x22, 0x2b, 0x8e, 0xe2, 0x65, 0x10, 0x5a, 0x32, 0xba, 0xff, 0x36, 0x92, 0xdc, 0xf7, 0xb8, 0x71, 0x3d, 0x0b, 0x53, 0x92, 0x62, 0xa5, 0xbd, 0x9a, 0x95, 0x4c, 0xb7, 0x14, 0x3e, 0xe6, 0x6f, 0x87, 0x64, 0xdb, 0x62, 0x36, 0x13, 0x6c, 0xb1, 0xcb, 0x3b, 0x34, 0xa8, 0x7c, 0xbd, 0x3f, 0xee, 0x3b, 0x11, 0x28, 0x8b, 0xc9, 0x4a, 0xc9, 0x91, 0x79, 0xc6, 0x81, 0xa4, 0x69, 0xd6, 0x2d, 0x9b, 0xcd, 0x91, 0xd4, 0x03, 0x32, 0xa6, 0x50, 0xa5, 0xbc, 0xe3, 0x3b, 0x60, 0x26, 0x88, 0x4e, 0xf9, 0x4a }; static const uint8_t ac_dsa_vect233_priv_val[] = { /* X */ 0x68, 0x08, 0x78, 0xe3, 0x82, 0xb7, 0x13, 0xd4, 0xdc, 0x9b, 0xed, 0x8b, 0x7e, 0xae, 0x88, 0x0f, 0x10, 0x54, 0xf5, 0x8e, 0x70, 0xcd, 0xa2, 0x71, 0x75, 0x77, 0xfe, 0xd3, 0xc6, 0x33, 0x93, 0xdc }; static const uint8_t ac_dsa_vect233_pub_val[] = { /* Y */ 0x1e, 0x8d, 0x4d, 0x6f, 0xef, 0x99, 0x05, 0xd6, 0x39, 0xe2, 0x56, 0x4d, 0x87, 0xdc, 0xbe, 0x0d, 0x8f, 0x99, 0xbd, 0xe3, 0x80, 0x82, 0xff, 0x09, 0x1a, 0x97, 0x7f, 0x2a, 0xff, 0xca, 0xb8, 0x65, 0x05, 0xae, 0xff, 0xe6, 0xef, 0x1d, 0xdb, 0xac, 0xf1, 0x5d, 0x91, 0x65, 0xb0, 0x06, 0xac, 0x05, 0x17, 0x43, 0x4a, 0xaa, 0x65, 0xdb, 0x21, 0x04, 0x52, 0xfb, 0x2f, 0xf4, 0xc9, 0x90, 0xb8, 0x7f, 0x25, 0xfe, 0xe7, 0xad, 0x5b, 0x26, 0xad, 0x87, 0x74, 0x95, 0x75, 0x19, 0x00, 0x89, 0xa5, 0x6c, 0xdb, 0xce, 0xee, 0x67, 0x82, 0xce, 0xaa, 0xf5, 0x69, 0x81, 0x4b, 0xb9, 0xe6, 0x58, 0xff, 0x50, 0xae, 0xbf, 0x6f, 0x3c, 0x97, 0x91, 0x89, 0x3e, 0x5d, 0x6a, 0xda, 0x5f, 0xdf, 0x8c, 0x47, 0x20, 0xfa, 0xfa, 0x18, 0x4c, 0xc8, 0x4a, 0x84, 0xf5, 0xfc, 0xa7, 0x9d, 0x89, 0x96, 0x36, 0xe0, 0x07, 0xbd, 0x0e, 0x1a, 0x89, 0xda, 0x09, 0x4a, 0x37, 0x8e, 0xdb, 0x6d, 0x72, 0x24, 0x0c, 0xc2, 0xd1, 0xd7, 0x09, 0x8b, 0x53, 0xba, 0x48, 0x37, 0xa5, 0xd0, 0xd7, 0xd0, 0x20, 0x19, 0xb9, 0x52, 0x71, 0x2e, 0x4f, 0x14, 0x20, 0xe5, 0x8a, 0xf2, 0x3d, 0x13, 0x77, 0xcd, 0x6d, 0x5f, 0x39, 0x89, 0xb3, 0xd6, 0x0b, 0x5f, 0xc5, 0x72, 0x04, 0x3b, 0x96, 0xc4, 0xf7, 0xbe, 0xb7, 0x13, 0x7c, 0x08, 0x94, 0xfa, 0x99, 0xd7, 0x27, 0xa5, 0xa8, 0x8a, 0x5d, 0x5d, 0xcb, 0xf2, 0xda, 0x7b, 0x0b, 0x2d, 0x83, 0xdb, 0x88, 0x74, 0x7f, 0xb0, 0xcc, 0xaa, 0x89, 0x91, 0xd2, 0x4f, 0xcc, 0xde, 0xf4, 0x21, 0x11, 0xff, 0x40, 0x2e, 0xd0, 0xd9, 0xbd, 0xb8, 0xa4, 0xad, 0x13, 0xf8, 0xfc, 0xff, 0x6a, 0x1d, 0xf5, 0x6c, 0x82, 0xa5, 0xf8, 0x8f, 0x57, 0x5f, 0x49, 0xa0, 0x62, 0x75, 0xa9, 0xe6, 0x60, 0x67, 0xf1, 0x5d, 0xae, 0xc4, 0x02, 0xed, 0x87, 0x70, 0x48, 0x49, 0x99, 0x09, 0xb9, 0xe7, 0x6e, 0x5f, 0xde, 0x52, 0xfe, 0xac, 0x94, 0x4e, 0x1d, 0xe7, 0x89, 0x4c, 0xf1, 0x3c, 0x51, 0x52, 0x99, 0xac, 0xc6, 0x44, 0x2d, 0x90, 0xf0, 0x27, 0x31, 0x7b, 0x07, 0x13, 0x80, 0x5a, 0x95, 0x12, 0x25, 0x6b, 0xca, 0xa7, 0x96, 0x3b, 0x94, 0x29, 0xa5, 0x10, 0xc5, 0x86, 0x97, 0x92, 0xc1, 0xe2, 0x90, 0x82, 0x92, 0x1d, 0x0e, 0x7d, 0x0c, 0xef, 0xff, 0xc3, 0x4d, 0x30, 0x76, 0x2f, 0xb8, 0x3e, 0x2a, 0xbb, 0x78, 0x21, 0xfa, 0xb4, 0xca, 0x89, 0xd0, 0x8b, 0x49, 0x7f, 0x75, 0xe3, 0x14, 0x9a, 0x5c, 0xd3, 0xd2, 0x3b, 0x29, 0xbc, 0x52, 0x13, 0x7d, 0x8b, 0xe9, 0xc4, 0xa9, 0x5c, 0x63, 0x76, 0xf6, 0x2e, 0xd6, 0x4f, 0xdc, 0x15, 0x9b, 0x1b, 0xb6, 0xc8, 0x42, 0xbd, 0x07, 0xf8, 0xcf, 0x03, 0xf7, 0xf2, 0xeb }; /* K = 48ea48cad85abe488665eb75359217b63387427093318bdfb5d7d8092d342caa */ static const uint8_t ac_dsa_vect233_out[] = { /* R */ 0x11, 0xb1, 0x63, 0x51, 0xf8, 0xf7, 0x20, 0x31, 0xba, 0x2a, 0x77, 0x20, 0x00, 0xac, 0x87, 0x26, 0xa4, 0x79, 0xe1, 0xbe, 0x45, 0x23, 0xa9, 0xee, 0xfa, 0xbe, 0x23, 0x94, 0x7a, 0x1d, 0xf0, 0xd9, /* S */ 0x26, 0x60, 0xfb, 0xb4, 0x4e, 0x29, 0xe7, 0x68, 0x7c, 0x10, 0xe2, 0x9d, 0xe9, 0x6f, 0xa1, 0xab, 0x03, 0xc0, 0x87, 0xcc, 0xce, 0x08, 0x6c, 0xdd, 0xab, 0x48, 0xec, 0x63, 0x77, 0x41, 0x41, 0xc1 }; #define ac_dsa_vect234_prime ac_dsa_vect226_prime #define ac_dsa_vect234_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect234_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect234_ptx[] = { /* Msg */ 0x4c, 0x37, 0xa4, 0xc8, 0xb4, 0x11, 0x09, 0x24, 0x0c, 0x4f, 0x53, 0xd8, 0x72, 0x77, 0xd3, 0xc7, 0x90, 0xb2, 0xf0, 0x71, 0x10, 0x5d, 0x15, 0xaa, 0x10, 0xbd, 0x0f, 0x77, 0x09, 0xda, 0x27, 0x4c, 0xce, 0xa1, 0x96, 0x1e, 0x0b, 0x99, 0x63, 0x5b, 0x31, 0xac, 0xd2, 0xc8, 0x05, 0x30, 0xd2, 0xb4, 0x03, 0xd7, 0x11, 0x0a, 0xd7, 0xcd, 0x0e, 0x35, 0x72, 0x51, 0x89, 0x09, 0xc1, 0x36, 0xe7, 0x3e, 0x57, 0xd3, 0x8c, 0x1c, 0x74, 0x43, 0xe5, 0x8a, 0x25, 0x7f, 0x07, 0x36, 0xb9, 0xf6, 0xf5, 0x1d, 0xa8, 0xfd, 0x1a, 0xe9, 0x21, 0x3e, 0x81, 0x93, 0x00, 0x3d, 0x69, 0x58, 0x33, 0x81, 0xf0, 0x20, 0xcc, 0xe7, 0xfc, 0x59, 0xba, 0x1b, 0x1e, 0xd5, 0x54, 0x1d, 0xbe, 0xf6, 0xb5, 0x99, 0x25, 0x75, 0x0d, 0x50, 0xb6, 0x51, 0x5a, 0x97, 0x7a, 0xa4, 0x32, 0x5d, 0x5f, 0xad, 0xe4, 0x2f, 0x82, 0x87 }; static const uint8_t ac_dsa_vect234_priv_val[] = { /* X */ 0x6b, 0xc0, 0x51, 0xfb, 0xa9, 0x3b, 0x92, 0x85, 0x9a, 0x8a, 0x06, 0xeb, 0x36, 0x1f, 0x34, 0x8f, 0x5e, 0x50, 0xd0, 0x91, 0xc5, 0x5b, 0x99, 0x84, 0x76, 0xec, 0xaa, 0x17, 0x77, 0xf2, 0x6f, 0xb8 }; static const uint8_t ac_dsa_vect234_pub_val[] = { /* Y */ 0x88, 0xa4, 0xdd, 0x59, 0x3b, 0x64, 0xa4, 0xeb, 0xcb, 0x27, 0xff, 0xea, 0x3d, 0xe9, 0xa7, 0xed, 0x78, 0x01, 0xf9, 0x67, 0x2b, 0x5c, 0x8d, 0xc2, 0x7b, 0x38, 0x3d, 0x6c, 0xba, 0x58, 0xb4, 0xf0, 0x01, 0x81, 0x63, 0x4d, 0x05, 0xeb, 0x49, 0x02, 0x82, 0xce, 0x4e, 0x57, 0xf0, 0x94, 0x03, 0x73, 0xd3, 0xa7, 0xbd, 0x7e, 0x9c, 0xca, 0xa9, 0xbb, 0x29, 0x65, 0x32, 0x2a, 0xb5, 0xfb, 0x21, 0xb4, 0x32, 0x7b, 0x47, 0xef, 0x4e, 0x2b, 0x42, 0x42, 0x4c, 0x13, 0x83, 0xbb, 0xd8, 0x55, 0x8b, 0x50, 0x6a, 0x7b, 0xf5, 0x53, 0x7b, 0x04, 0x9f, 0xff, 0x35, 0xc5, 0x58, 0xbc, 0xc7, 0x39, 0xb7, 0x60, 0x44, 0x37, 0x28, 0xc0, 0x90, 0xc3, 0x4d, 0x6d, 0x4e, 0xba, 0x81, 0xe2, 0x4e, 0x42, 0x39, 0x4f, 0x8f, 0xb8, 0x26, 0xf7, 0xc9, 0x2c, 0xa7, 0x1a, 0x9d, 0xab, 0x16, 0xe9, 0x99, 0x27, 0x47, 0x26, 0xb0, 0xc5, 0xd8, 0xf7, 0x2f, 0xb9, 0x14, 0x18, 0x70, 0xda, 0xc0, 0xbb, 0x9e, 0xc0, 0x42, 0x98, 0x02, 0xb6, 0x29, 0xad, 0x71, 0xae, 0x05, 0x60, 0xe5, 0x86, 0x2e, 0xcf, 0x3e, 0xab, 0xa9, 0xc2, 0xa5, 0x84, 0x88, 0x5b, 0x32, 0xc6, 0x84, 0xf6, 0xd5, 0x5f, 0xd1, 0xb0, 0x90, 0xd9, 0x3d, 0x03, 0x6a, 0x4e, 0x98, 0x58, 0xa4, 0xd8, 0x9b, 0x9b, 0x57, 0x50, 0x84, 0x9d, 0x92, 0x6c, 0x51, 0x91, 0x20, 0x13, 0x1d, 0x45, 0x6f, 0xce, 0x9d, 0x24, 0x73, 0x41, 0xeb, 0x17, 0x33, 0x6c, 0xa9, 0x72, 0x9a, 0x90, 0x80, 0xac, 0x5b, 0x12, 0x72, 0xfb, 0xf7, 0x07, 0x52, 0x6a, 0xfc, 0x8a, 0xe6, 0xa8, 0xc6, 0x61, 0xef, 0x3c, 0x15, 0x18, 0x45, 0xf6, 0xee, 0x09, 0x02, 0xde, 0x9a, 0xbb, 0x43, 0x22, 0xaf, 0xe5, 0x85, 0xe5, 0x9d, 0x6d, 0x41, 0x8e, 0x87, 0xd7, 0xcd, 0xce, 0x48, 0x97, 0xcc, 0xac, 0x81, 0xd0, 0x13, 0xfd, 0x72, 0xda, 0xe1, 0xa5, 0x55, 0x77, 0x62, 0x52, 0x73, 0x12, 0x58, 0x7c, 0xa6, 0x76, 0xf0, 0xe0, 0x67, 0x60, 0x00, 0xfc, 0x0c, 0x76, 0xb8, 0x26, 0x58, 0x42, 0xf2, 0xdb, 0x7e, 0x18, 0xe6, 0x21, 0xc0, 0xe3, 0xc2, 0xca, 0x92, 0x95, 0xe9, 0xe3, 0x6e, 0xc8, 0xce, 0x1c, 0x85, 0x09, 0x7c, 0xa5, 0xff, 0xfa, 0x62, 0xe7, 0xb8, 0x96, 0xbb, 0x16, 0x83, 0x6d, 0x06, 0x33, 0x86, 0xb1, 0xe6, 0x63, 0xef, 0x29, 0xec, 0x17, 0x02, 0x96, 0x5a, 0x7e, 0x05, 0x62, 0xd2, 0xd2, 0x82, 0xf8, 0x09, 0x52, 0xd7, 0x47, 0x6b, 0x32, 0x2f, 0xfa, 0x79, 0x29, 0xa4, 0x53, 0xa6, 0x38, 0xea, 0x3b, 0xed, 0xe8, 0x02, 0xff, 0x5f, 0x8f, 0x56, 0x60, 0x85, 0xa6, 0xe2, 0xa2, 0x41, 0x4e, 0xf7, 0xa6, 0xf1, 0x17, 0xac, 0x86, 0x28, 0x48, 0x6b, 0x23, 0x60, 0x3b, 0x14, 0x08, 0xfa, 0xae }; /* K = 40c6be904308e25af6616fe77c23e6e6570ac32ba5bf54aa81f6773a5071a904 */ static const uint8_t ac_dsa_vect234_out[] = { /* R */ 0x23, 0xe1, 0x3a, 0x35, 0x77, 0x7c, 0x18, 0x9a, 0xe5, 0x65, 0x09, 0xc7, 0xaf, 0xb4, 0x11, 0xb3, 0x13, 0x07, 0x73, 0x7e, 0x2f, 0xfc, 0x8d, 0xb3, 0xf2, 0x08, 0x94, 0x0c, 0x5e, 0x76, 0xed, 0xb3, /* S */ 0x05, 0x44, 0x75, 0x83, 0x62, 0xcb, 0xb6, 0x1d, 0x66, 0xb6, 0x68, 0x26, 0x95, 0x8a, 0xca, 0x63, 0xaf, 0x1b, 0x8a, 0xd6, 0x15, 0xa4, 0x9b, 0xa5, 0x57, 0x92, 0x39, 0x59, 0xb6, 0x8f, 0x82, 0x28 }; #define ac_dsa_vect235_prime ac_dsa_vect226_prime #define ac_dsa_vect235_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect235_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect235_ptx[] = { /* Msg */ 0x44, 0x34, 0x73, 0xd6, 0x15, 0xbe, 0xdc, 0xba, 0x2c, 0x8d, 0x9a, 0x9a, 0x45, 0xa2, 0x8c, 0x42, 0x8d, 0x7f, 0x1a, 0x26, 0xab, 0x14, 0x70, 0x56, 0x27, 0xd9, 0xad, 0x13, 0xf5, 0x3b, 0x76, 0x7c, 0xbb, 0x60, 0xbe, 0x52, 0x3f, 0xc2, 0x1a, 0x99, 0xc3, 0x73, 0xbd, 0x77, 0x61, 0x81, 0x7b, 0x31, 0x42, 0x90, 0xf2, 0xf6, 0xa8, 0x0e, 0x06, 0xe1, 0x2c, 0xce, 0x23, 0x89, 0x54, 0xc6, 0x48, 0xac, 0xe5, 0x0f, 0x3b, 0x0d, 0xfd, 0xf7, 0x1d, 0xc3, 0x08, 0xe1, 0xa8, 0xee, 0x11, 0x59, 0xfc, 0x1f, 0x19, 0xb7, 0x3a, 0xb6, 0x01, 0x5d, 0x18, 0x6d, 0x9b, 0x6b, 0xad, 0x96, 0x5a, 0x9a, 0xd6, 0x2e, 0x44, 0x0a, 0x9c, 0xed, 0x13, 0x55, 0x0a, 0x44, 0x4b, 0x5f, 0x04, 0x00, 0xb9, 0x6e, 0x2d, 0x23, 0x8e, 0x9e, 0x3d, 0xc6, 0xe6, 0xde, 0x12, 0xf4, 0x42, 0x05, 0xd4, 0xfd, 0x57, 0xf6, 0x0e, 0x9d }; static const uint8_t ac_dsa_vect235_priv_val[] = { /* X */ 0x0b, 0xdf, 0x6e, 0xd0, 0x48, 0x35, 0x8d, 0xcc, 0x9a, 0x2d, 0xc5, 0x55, 0xc3, 0xd4, 0x5a, 0xc3, 0x94, 0x57, 0x11, 0x35, 0xab, 0x36, 0x16, 0x8d, 0x9f, 0xc4, 0xff, 0xe4, 0xa3, 0x52, 0x9a, 0x80 }; static const uint8_t ac_dsa_vect235_pub_val[] = { /* Y */ 0x0f, 0x4e, 0xc6, 0xe2, 0xba, 0xae, 0xa9, 0xc8, 0x1e, 0x90, 0x70, 0x05, 0x19, 0xf2, 0xf0, 0x5f, 0x54, 0x5d, 0xdc, 0x0a, 0xe9, 0xbd, 0x3a, 0x09, 0x1e, 0x8b, 0x6b, 0xa5, 0x25, 0x5c, 0x15, 0xfc, 0xe5, 0xef, 0x3c, 0x04, 0x67, 0x71, 0xc5, 0xf3, 0x1b, 0xb0, 0x1d, 0xe4, 0x37, 0x7e, 0x14, 0x28, 0x31, 0xac, 0x17, 0x49, 0x90, 0x3f, 0x93, 0x17, 0xc7, 0xb0, 0x1a, 0x99, 0x07, 0x14, 0x98, 0x5f, 0x92, 0x51, 0x19, 0x8c, 0x82, 0x90, 0x73, 0x20, 0x59, 0x24, 0xc5, 0x68, 0x05, 0x0a, 0xcd, 0x6d, 0xcc, 0xa7, 0x57, 0x61, 0x8c, 0xd2, 0x80, 0x9b, 0xb7, 0xaa, 0xb6, 0x4d, 0xb1, 0xe8, 0x6c, 0xa9, 0x2e, 0xeb, 0x85, 0x41, 0x20, 0xc9, 0xd8, 0x9f, 0xb9, 0x36, 0x35, 0x96, 0xbe, 0x9c, 0xbb, 0xaf, 0x8e, 0xac, 0xae, 0x2f, 0x18, 0xf3, 0xed, 0x48, 0x35, 0x89, 0xeb, 0x46, 0x6a, 0x51, 0x44, 0x82, 0x4f, 0xeb, 0x1f, 0x88, 0xc3, 0x0c, 0xfc, 0xbb, 0x76, 0x28, 0xf7, 0xcb, 0x41, 0x59, 0xce, 0x32, 0xe7, 0xc2, 0xed, 0x04, 0xd0, 0xff, 0x04, 0x81, 0xc9, 0x58, 0xe5, 0xff, 0x74, 0x45, 0x22, 0x94, 0x4c, 0xf3, 0x20, 0x20, 0x38, 0x9b, 0x32, 0x95, 0x9b, 0x5e, 0x12, 0xf8, 0x0f, 0x08, 0x06, 0x49, 0x08, 0xa2, 0x70, 0xf8, 0x69, 0x5a, 0x3f, 0x99, 0xe7, 0x5e, 0x7e, 0x85, 0xba, 0x3b, 0x3c, 0x77, 0x3f, 0x04, 0xef, 0x9e, 0x09, 0xe7, 0x6b, 0x6c, 0x47, 0x30, 0x2e, 0x41, 0xd5, 0x0e, 0xad, 0x04, 0x54, 0x1e, 0x0f, 0xca, 0x4a, 0x42, 0x50, 0x27, 0x22, 0x26, 0x5f, 0x82, 0xff, 0x60, 0xef, 0x46, 0xaa, 0x75, 0x47, 0xf9, 0xde, 0x24, 0x91, 0x35, 0xdd, 0x07, 0x7f, 0x24, 0xa4, 0xe7, 0xe0, 0x3b, 0xe2, 0xe3, 0x09, 0x47, 0x72, 0x76, 0x7a, 0x97, 0x60, 0x88, 0x3c, 0x52, 0x08, 0x16, 0xfa, 0xe6, 0x37, 0xc0, 0x30, 0x95, 0x6e, 0xa2, 0x5f, 0x0a, 0x86, 0x9e, 0x4a, 0x00, 0xa4, 0xa8, 0x01, 0x7b, 0xcb, 0x72, 0xb2, 0xf2, 0xfd, 0x83, 0x64, 0x3b, 0xdc, 0x01, 0xd8, 0xff, 0x28, 0x68, 0xd3, 0xca, 0xf1, 0x00, 0xae, 0x8b, 0x81, 0x8b, 0x92, 0x6c, 0x96, 0xa8, 0x50, 0xbd, 0x69, 0xd8, 0x93, 0x1d, 0xbf, 0xdc, 0xff, 0x31, 0xc6, 0x7c, 0x53, 0x7c, 0x4f, 0x59, 0x59, 0xd0, 0x4b, 0x74, 0x4a, 0x34, 0x66, 0x47, 0x06, 0x6d, 0xcc, 0x61, 0xf6, 0x3b, 0xe6, 0x25, 0x1b, 0x59, 0x0d, 0x68, 0x8a, 0xe3, 0xc9, 0xb5, 0x3f, 0x39, 0x20, 0x07, 0xd8, 0x58, 0x4e, 0x46, 0x24, 0xff, 0xd2, 0x94, 0x16, 0x50, 0xa3, 0x1d, 0xcd, 0x5a, 0xbf, 0xae, 0x7c, 0xa1, 0x20, 0xb1, 0x1c, 0x8d, 0x01, 0x94, 0xbe, 0x96, 0xe8, 0xdd, 0x09, 0xb6, 0x43, 0xd5, 0x68, 0x5d, 0x10, 0x65, 0xd9, 0x8f, 0x39, 0xb6, 0xed, 0x7c }; /* K = 63066e05d16e79fd013a6ae456aa3f036e9d58675b3c9e08a412420a64c1f977 */ static const uint8_t ac_dsa_vect235_out[] = { /* R */ 0x76, 0xbb, 0x0e, 0xcb, 0x9f, 0xae, 0xc7, 0xc9, 0x71, 0x13, 0x7e, 0xa6, 0xfe, 0xac, 0xf1, 0x79, 0x20, 0x73, 0xae, 0x80, 0xbe, 0x1c, 0xa8, 0xed, 0x9c, 0xec, 0x2a, 0x5c, 0xa6, 0xcd, 0x51, 0x0f, /* S */ 0x34, 0x92, 0x02, 0x46, 0x73, 0x0e, 0x09, 0x74, 0xfb, 0x0f, 0xaa, 0x57, 0xe7, 0x7f, 0xc5, 0x0a, 0xb7, 0x87, 0x26, 0xc8, 0xe5, 0x15, 0x79, 0xa0, 0xef, 0x5e, 0xbe, 0x3f, 0xce, 0x3b, 0xa7, 0xcb }; #define ac_dsa_vect236_prime ac_dsa_vect226_prime #define ac_dsa_vect236_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect236_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect236_ptx[] = { /* Msg */ 0xce, 0xe0, 0x6f, 0x79, 0x23, 0x32, 0x08, 0x0d, 0x6e, 0x73, 0xb3, 0xf0, 0x2f, 0x5e, 0xc1, 0x69, 0x96, 0xb6, 0x69, 0x95, 0xbe, 0xab, 0x4a, 0x2b, 0xa0, 0x92, 0xf4, 0x0d, 0x85, 0xc8, 0xac, 0x1a, 0xcc, 0xf5, 0x4f, 0xba, 0x06, 0x81, 0x28, 0xc8, 0xcd, 0xba, 0xda, 0x20, 0x93, 0x60, 0x77, 0x6a, 0x77, 0x06, 0x45, 0x50, 0x15, 0xe7, 0x3e, 0x92, 0xc6, 0x24, 0xad, 0xa1, 0xdf, 0xa6, 0x2e, 0xc7, 0x94, 0xcf, 0x2a, 0x1a, 0x92, 0x94, 0xf3, 0xfb, 0x55, 0x99, 0x4b, 0xc5, 0x21, 0x1a, 0xdd, 0x1c, 0x68, 0x5d, 0x9a, 0x54, 0xac, 0xd5, 0xbc, 0xd8, 0x30, 0xd9, 0xa4, 0xfc, 0xff, 0x29, 0xae, 0xc5, 0x00, 0x1c, 0x3b, 0x2b, 0x2a, 0x97, 0x06, 0x04, 0x6f, 0x38, 0xbf, 0xe4, 0x8e, 0x85, 0x22, 0x76, 0x8f, 0x1c, 0x6f, 0x08, 0xa8, 0xe2, 0x40, 0xe1, 0x23, 0xed, 0x30, 0xe2, 0x0f, 0xc4, 0x6c, 0x19 }; static const uint8_t ac_dsa_vect236_priv_val[] = { /* X */ 0x53, 0x0e, 0x54, 0xbf, 0x51, 0xb3, 0xea, 0x01, 0x2e, 0x76, 0x20, 0x6b, 0x5f, 0xf5, 0x3c, 0x1d, 0x5a, 0xe6, 0xf3, 0x43, 0x3f, 0x2a, 0x50, 0xb6, 0x6b, 0x69, 0x47, 0xe8, 0x4d, 0xd5, 0x21, 0x71 }; static const uint8_t ac_dsa_vect236_pub_val[] = { /* Y */ 0x5c, 0x92, 0x05, 0xfb, 0x64, 0x9d, 0x3b, 0x4b, 0xa2, 0xd4, 0x4c, 0x80, 0xa9, 0x25, 0xe3, 0x0d, 0x27, 0xb0, 0x5b, 0xd3, 0x39, 0xf1, 0xce, 0x35, 0xe0, 0xd0, 0x41, 0x9a, 0x91, 0xed, 0x31, 0xfd, 0x10, 0x8c, 0x51, 0xa2, 0xa6, 0x2c, 0xf9, 0xd0, 0xad, 0xfd, 0x87, 0x7d, 0x27, 0xcf, 0x55, 0x75, 0xe4, 0x3a, 0xc7, 0xbf, 0xcf, 0xce, 0xec, 0x56, 0x73, 0x73, 0x6c, 0xae, 0x08, 0x95, 0x16, 0xdf, 0x8e, 0xb1, 0xea, 0x6b, 0x56, 0x31, 0x98, 0xb2, 0x4a, 0x6e, 0x25, 0x22, 0xf3, 0x20, 0xb1, 0x23, 0xbf, 0xb2, 0x50, 0xd4, 0x3b, 0x60, 0x0d, 0xf9, 0x29, 0x8e, 0x12, 0x1b, 0x6c, 0x5d, 0x2e, 0x63, 0x7a, 0x98, 0x92, 0x15, 0xe0, 0x95, 0xe6, 0x03, 0xee, 0x6d, 0x4e, 0x8a, 0x2d, 0xcd, 0x17, 0xb9, 0x08, 0x91, 0x8a, 0xa5, 0x14, 0xc8, 0x6a, 0x33, 0xd8, 0xc7, 0x17, 0x57, 0x8d, 0x86, 0x12, 0x61, 0xda, 0x43, 0xf7, 0x32, 0x50, 0xff, 0x2b, 0xe7, 0x46, 0xc6, 0x91, 0x6f, 0xc7, 0x28, 0x71, 0xfb, 0x42, 0xa2, 0x79, 0xd2, 0x25, 0x95, 0x05, 0x1b, 0x8a, 0xc0, 0x4a, 0xfb, 0xf2, 0x01, 0x30, 0x63, 0xe3, 0x16, 0x61, 0xb1, 0x17, 0xc5, 0xd0, 0x94, 0xb4, 0xc2, 0x32, 0xb2, 0x2f, 0x21, 0xd2, 0xc6, 0x5d, 0x63, 0x61, 0x29, 0x0c, 0x08, 0xf1, 0x2b, 0xef, 0xd1, 0xf5, 0xa2, 0xb9, 0xb5, 0x25, 0x9a, 0xf0, 0x43, 0x5b, 0x97, 0xb4, 0x32, 0x82, 0x97, 0xc2, 0x52, 0xd8, 0x13, 0x49, 0x9f, 0x52, 0x09, 0xdf, 0xa3, 0x5e, 0x91, 0x98, 0xde, 0x68, 0x50, 0x1a, 0xf4, 0xca, 0x86, 0x58, 0x94, 0x2d, 0x05, 0x9b, 0xb6, 0x2b, 0x8e, 0x55, 0xa3, 0xce, 0x61, 0x20, 0xa7, 0x8e, 0xe0, 0x98, 0x13, 0x2e, 0x8d, 0x2d, 0xc3, 0x75, 0x7f, 0x7e, 0x60, 0xf8, 0xc0, 0x8c, 0x4e, 0x43, 0xfe, 0xac, 0x67, 0xab, 0xcd, 0xdd, 0x1e, 0xa2, 0xf0, 0x16, 0x83, 0x9f, 0xb1, 0xa0, 0xf7, 0x97, 0xb8, 0xb1, 0x37, 0xab, 0x43, 0xb6, 0x45, 0x08, 0xef, 0x69, 0xf6, 0xae, 0x0f, 0x3a, 0xbc, 0x4e, 0xd6, 0x82, 0xaa, 0x7e, 0x38, 0xfa, 0x51, 0x46, 0xfe, 0xc6, 0x2e, 0x01, 0xe0, 0x95, 0x1a, 0x6e, 0x81, 0x15, 0x2d, 0xe4, 0x31, 0x71, 0xca, 0x88, 0x69, 0xfa, 0x1a, 0x42, 0xa4, 0xfb, 0x2d, 0x8a, 0xe5, 0x12, 0xc0, 0x05, 0xfd, 0x97, 0xd1, 0x2b, 0xb1, 0x3f, 0x29, 0x9a, 0xb9, 0xf5, 0x32, 0x1e, 0xe2, 0xfc, 0x39, 0xb2, 0x8e, 0x61, 0xc9, 0xeb, 0xcb, 0x91, 0xec, 0xd2, 0xb6, 0x10, 0xfd, 0x82, 0x91, 0xf5, 0x38, 0xa0, 0x0d, 0x06, 0xd0, 0x57, 0xc3, 0xe7, 0x94, 0x22, 0xa9, 0x31, 0x27, 0x9f, 0xed, 0x9d, 0x93, 0xb0, 0xb6, 0x53, 0x3f, 0xae, 0x44, 0x1e, 0x98, 0x41, 0x30, 0x25, 0xfb, 0x4f, 0xa7, 0x3c, 0xde, 0xfa, 0x80 }; /* K = 4e500b513c2e24ad17fcb8cc0d6a8c54e654e00a892545a33cb5af8877589520 */ static const uint8_t ac_dsa_vect236_out[] = { /* R */ 0x6d, 0x02, 0x53, 0x6d, 0xb5, 0x46, 0xf2, 0xbb, 0x1f, 0x65, 0xff, 0x0b, 0x91, 0xb9, 0x64, 0x80, 0x2b, 0x38, 0xd1, 0x71, 0xe6, 0x78, 0x05, 0x4e, 0xe4, 0x1f, 0x2b, 0x85, 0x63, 0x80, 0x9c, 0xfa, /* S */ 0x6b, 0xc5, 0x11, 0x20, 0xe3, 0x5c, 0x95, 0x5a, 0xb8, 0xf7, 0x17, 0xf8, 0x93, 0x0d, 0x8c, 0xc8, 0xde, 0xf8, 0x50, 0x54, 0x15, 0xcf, 0x15, 0x9d, 0x25, 0x16, 0xf9, 0x65, 0x78, 0x84, 0x2f, 0x31 }; #define ac_dsa_vect237_prime ac_dsa_vect226_prime #define ac_dsa_vect237_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect237_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect237_ptx[] = { /* Msg */ 0x58, 0xab, 0xa2, 0x4e, 0x94, 0x81, 0xd1, 0x15, 0x1b, 0x57, 0x4b, 0x14, 0x6a, 0xc2, 0x1b, 0x17, 0x11, 0x0e, 0xd0, 0xb9, 0xbf, 0xaa, 0x55, 0xa4, 0xe2, 0xe0, 0x6d, 0xcd, 0xc1, 0x8b, 0xd1, 0x0c, 0xdf, 0xaf, 0xac, 0x04, 0x71, 0x89, 0xf5, 0xba, 0x9f, 0x10, 0x37, 0x7a, 0xff, 0xb4, 0x0a, 0x51, 0x4d, 0x52, 0x8a, 0x34, 0x83, 0xfe, 0x8e, 0x64, 0xb8, 0x31, 0xea, 0x0c, 0xd0, 0x76, 0xce, 0x58, 0x39, 0x42, 0xb9, 0x38, 0xa4, 0xb2, 0x57, 0xd0, 0xb5, 0xa9, 0x24, 0x12, 0xe0, 0x1d, 0xfd, 0xa8, 0x21, 0x7d, 0x5f, 0x80, 0x54, 0x59, 0x6a, 0x61, 0xd5, 0x73, 0x7d, 0x8a, 0xd8, 0x11, 0x2a, 0xe2, 0x28, 0x22, 0x0e, 0x3b, 0xff, 0x60, 0xe2, 0xe8, 0x91, 0xd0, 0x3d, 0x53, 0xfb, 0x14, 0xf1, 0x4d, 0xd9, 0x19, 0x75, 0xdc, 0x15, 0xd6, 0xb7, 0xbd, 0x62, 0xe9, 0x9d, 0x74, 0xef, 0x38, 0x39, 0xfd }; static const uint8_t ac_dsa_vect237_priv_val[] = { /* X */ 0x7b, 0xc2, 0x31, 0x6b, 0x63, 0x01, 0xb7, 0x72, 0xb6, 0x74, 0x2d, 0x0c, 0x50, 0xf2, 0xc1, 0xc3, 0x9b, 0xbe, 0xde, 0x01, 0x44, 0x80, 0x26, 0xb6, 0xa2, 0x01, 0x79, 0x3b, 0xfe, 0x7d, 0xc3, 0xe3 }; static const uint8_t ac_dsa_vect237_pub_val[] = { /* Y */ 0x2a, 0xdb, 0xc0, 0x7d, 0x8a, 0xee, 0x28, 0x4e, 0xc9, 0x82, 0xc4, 0xb9, 0x5e, 0x1e, 0xc3, 0xec, 0x3f, 0x5f, 0xd5, 0x17, 0x23, 0x68, 0xdd, 0xf8, 0x3f, 0x9a, 0x3c, 0x69, 0x65, 0x52, 0x91, 0xde, 0xe6, 0xb9, 0x9e, 0xd7, 0x13, 0xe5, 0xa1, 0xfe, 0xc3, 0x38, 0x23, 0x9b, 0x81, 0x99, 0xc5, 0xa3, 0xbb, 0x2b, 0x5e, 0x2e, 0x7f, 0x23, 0xfc, 0x79, 0x50, 0x58, 0xa9, 0xac, 0x70, 0xeb, 0xdf, 0xf2, 0xb3, 0xda, 0xaf, 0xfa, 0x38, 0x9e, 0x97, 0xfe, 0xe3, 0x5f, 0x17, 0x49, 0x61, 0xf1, 0x2d, 0x63, 0x4e, 0x8b, 0x82, 0x50, 0xb8, 0xb7, 0x70, 0xb8, 0xd7, 0x11, 0x3d, 0x0f, 0xbc, 0x02, 0x0b, 0x7b, 0x10, 0x8f, 0x8d, 0x6b, 0x2d, 0x7c, 0xb6, 0xc5, 0x9e, 0x2e, 0x15, 0x10, 0x15, 0x14, 0x5a, 0x8e, 0x37, 0x4f, 0x9b, 0x73, 0x96, 0xe9, 0x70, 0xd9, 0x1e, 0x3c, 0x1f, 0x85, 0xce, 0x23, 0xdc, 0xae, 0x12, 0xb2, 0xf5, 0x37, 0x41, 0xcf, 0xc2, 0x35, 0x0b, 0x58, 0x2c, 0xa8, 0x7f, 0x0f, 0xf9, 0xab, 0x50, 0xad, 0x0c, 0xa2, 0x87, 0x9e, 0x21, 0x6e, 0x61, 0xa5, 0xc3, 0x58, 0x97, 0x0a, 0x3c, 0x35, 0x28, 0xdc, 0xd9, 0xec, 0xe6, 0xb8, 0x3d, 0x52, 0x5b, 0x31, 0xfe, 0x68, 0x76, 0x96, 0xa2, 0xa2, 0xc6, 0x5e, 0x34, 0xf2, 0x85, 0x4f, 0xea, 0x6f, 0xf9, 0x22, 0x44, 0xd2, 0x75, 0x00, 0xf7, 0xda, 0x94, 0x6c, 0x37, 0x16, 0x97, 0x56, 0xf4, 0xa4, 0x66, 0x4b, 0x29, 0x09, 0x61, 0x15, 0x49, 0xad, 0x2b, 0x93, 0xeb, 0xac, 0xeb, 0xfc, 0x27, 0x0e, 0xcf, 0x42, 0x04, 0xe6, 0x64, 0x1d, 0xbc, 0xe0, 0x5d, 0xa2, 0xc0, 0x00, 0xa4, 0xca, 0x5a, 0xc8, 0x85, 0x40, 0x6b, 0xa1, 0x55, 0x80, 0x74, 0x94, 0x70, 0x61, 0x80, 0xd5, 0x4c, 0xc0, 0x12, 0xce, 0x06, 0xe7, 0x34, 0x02, 0x4f, 0x4c, 0xcd, 0x88, 0x2b, 0xdd, 0xd2, 0x25, 0x7a, 0xfb, 0x5c, 0x28, 0x7b, 0xc3, 0xa8, 0x57, 0x0e, 0xdf, 0x21, 0xa2, 0x0a, 0xfe, 0xda, 0x0c, 0x76, 0x2a, 0xd6, 0x96, 0xfb, 0xa1, 0x77, 0xa5, 0xf2, 0xf9, 0xd6, 0x09, 0x35, 0x5c, 0xb9, 0x1d, 0x72, 0xcc, 0xac, 0x8b, 0xb9, 0xe7, 0xc3, 0xcf, 0xf1, 0x83, 0x4d, 0x86, 0xb0, 0x77, 0x2a, 0xec, 0x74, 0x1d, 0x7b, 0x4b, 0x3c, 0x3e, 0x43, 0xbb, 0x26, 0xec, 0x9f, 0x5e, 0x86, 0xb8, 0x68, 0x5e, 0xa5, 0xc6, 0x25, 0xb6, 0xae, 0xa4, 0x50, 0xa4, 0x6e, 0x85, 0xe3, 0x80, 0xb1, 0x58, 0xde, 0x6a, 0xaa, 0x27, 0x01, 0xff, 0xad, 0x0c, 0x7d, 0x1e, 0xd0, 0xdf, 0x35, 0x5d, 0x09, 0xd0, 0x6f, 0xe1, 0x75, 0x8b, 0x2f, 0x27, 0xa5, 0xd0, 0x2a, 0xa2, 0x83, 0xae, 0xc9, 0xfd, 0x12, 0xd3, 0xb6, 0x2d, 0x50, 0x4d, 0xca, 0x0b, 0x66, 0x32, 0xe8, 0x9f, 0xc5, 0x5f, 0xb0, 0x83 }; /* K = 0c2a0d2b326ad63e869384e3e2e32fcff8db83285fa0a5b9a7b13589a7dd7fc1 */ static const uint8_t ac_dsa_vect237_out[] = { /* R */ 0x2c, 0x46, 0x2d, 0x49, 0x34, 0x4f, 0x3a, 0xd0, 0x3b, 0x67, 0x98, 0xf9, 0x64, 0x52, 0xf7, 0xd6, 0x63, 0x51, 0xce, 0xad, 0x91, 0x9e, 0x82, 0x01, 0xb7, 0x66, 0x5c, 0x87, 0x7f, 0x82, 0x55, 0xbb, /* S */ 0x50, 0xe8, 0x90, 0x8a, 0x1c, 0x66, 0x84, 0xa2, 0xca, 0xa8, 0xaa, 0xfb, 0x43, 0x2c, 0xda, 0x4b, 0x76, 0x99, 0x00, 0x8c, 0x72, 0xd8, 0xd6, 0x22, 0xc3, 0xda, 0x41, 0x71, 0xe5, 0x1c, 0xfd, 0xbf }; #define ac_dsa_vect238_prime ac_dsa_vect226_prime #define ac_dsa_vect238_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect238_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect238_ptx[] = { /* Msg */ 0xe1, 0x06, 0x04, 0xca, 0x00, 0x72, 0x8e, 0x53, 0x36, 0x21, 0xdb, 0xb6, 0x61, 0x8b, 0x0c, 0x87, 0x7c, 0x49, 0x02, 0xa2, 0xed, 0x79, 0xaa, 0xf4, 0x0a, 0x4d, 0xaa, 0x34, 0xd6, 0xcc, 0x21, 0x6a, 0xd4, 0x64, 0x8d, 0xaa, 0xb6, 0xcc, 0x1e, 0x18, 0x45, 0x1b, 0xb9, 0x4e, 0x6a, 0x1c, 0x0c, 0x6f, 0x9d, 0x0d, 0x88, 0x39, 0x62, 0xee, 0xbd, 0x50, 0x7d, 0xa0, 0x99, 0x78, 0x80, 0x08, 0xda, 0x23, 0x20, 0x5e, 0x3b, 0x4e, 0x90, 0xfa, 0xd9, 0xae, 0x85, 0x70, 0x74, 0xff, 0xea, 0xc6, 0x34, 0x30, 0xc0, 0xfa, 0xcb, 0xae, 0x48, 0x9c, 0x54, 0xc9, 0x57, 0xdb, 0x09, 0xd5, 0x3e, 0x12, 0xb6, 0x56, 0xcc, 0x27, 0x86, 0x15, 0xa3, 0xa5, 0x61, 0x2a, 0xf4, 0xc2, 0xf1, 0x68, 0xbd, 0xeb, 0x11, 0x8a, 0x42, 0xa2, 0xa6, 0x71, 0x03, 0xfa, 0xc3, 0x21, 0xad, 0xf5, 0x68, 0x8b, 0x05, 0x84, 0x8f, 0x7c }; static const uint8_t ac_dsa_vect238_priv_val[] = { /* X */ 0x6d, 0xd5, 0x00, 0xe2, 0xae, 0xce, 0x9a, 0xe3, 0x31, 0xdf, 0x26, 0x9c, 0x26, 0xa4, 0xe5, 0xd5, 0x8f, 0xc6, 0xbe, 0x39, 0x63, 0xf5, 0x00, 0x2e, 0x36, 0xbd, 0x9c, 0xd0, 0x4c, 0x1a, 0xdb, 0xbd }; static const uint8_t ac_dsa_vect238_pub_val[] = { /* Y */ 0xb0, 0x44, 0x8d, 0x43, 0xc5, 0x20, 0x37, 0x7b, 0x7d, 0xf2, 0x14, 0x96, 0x9f, 0x59, 0xff, 0xd4, 0xe0, 0x01, 0x0c, 0x12, 0xd7, 0xe5, 0xfa, 0x8f, 0x24, 0x1e, 0x9c, 0xe1, 0xc6, 0x34, 0x43, 0x9c, 0x94, 0x70, 0x0e, 0xd5, 0x74, 0x2a, 0x83, 0x22, 0xd4, 0x05, 0xdd, 0x05, 0xde, 0x99, 0x53, 0x44, 0x78, 0x31, 0xc7, 0x67, 0x4e, 0x5a, 0xe1, 0xb8, 0x90, 0x41, 0xfb, 0x8f, 0x2e, 0xc1, 0x05, 0x4b, 0x92, 0x8c, 0x64, 0xab, 0x86, 0x2f, 0x02, 0x1a, 0x55, 0xeb, 0xce, 0x83, 0x8d, 0x2a, 0x3d, 0x2c, 0x76, 0x45, 0xec, 0x7c, 0x0a, 0x1a, 0x46, 0x03, 0x61, 0x7e, 0x4f, 0x50, 0x89, 0x29, 0x14, 0x4c, 0x1e, 0xf2, 0xb0, 0x39, 0xbc, 0x78, 0xb5, 0x93, 0x62, 0xd5, 0xba, 0x95, 0x37, 0x90, 0x6e, 0x66, 0xc8, 0xe9, 0xc9, 0xa3, 0xc6, 0x8e, 0x71, 0xb3, 0x5d, 0x88, 0xb8, 0xba, 0xc8, 0x6c, 0xac, 0xbe, 0xbd, 0x96, 0x2c, 0x66, 0xe1, 0x81, 0x29, 0x63, 0x7f, 0xad, 0x2d, 0x98, 0xd2, 0x1e, 0x45, 0xa3, 0x26, 0x72, 0x64, 0x94, 0x92, 0xf1, 0x31, 0xba, 0xe8, 0x8c, 0x99, 0x89, 0xbd, 0x63, 0x72, 0xe1, 0x74, 0x92, 0xbe, 0xdf, 0xf4, 0xd9, 0xb0, 0x91, 0xb3, 0xdd, 0x00, 0xeb, 0xca, 0x6b, 0xcc, 0x49, 0x14, 0x84, 0x80, 0x58, 0x9f, 0x95, 0x93, 0xe3, 0x27, 0x95, 0x29, 0x9f, 0x3d, 0xe7, 0xe0, 0x9d, 0x88, 0xbc, 0x0e, 0xd2, 0x7b, 0x7e, 0xf2, 0x2e, 0xf7, 0xd2, 0x02, 0x20, 0x7f, 0xb5, 0xce, 0x8c, 0x91, 0x71, 0x2c, 0x3b, 0xd5, 0xe7, 0x58, 0xd2, 0x82, 0x28, 0x09, 0xea, 0x5d, 0x2c, 0xb2, 0x88, 0x33, 0x2a, 0xa0, 0x76, 0x03, 0x68, 0x25, 0x92, 0x81, 0xa3, 0x44, 0x47, 0xff, 0x5a, 0x98, 0xc9, 0xc9, 0x7c, 0x1d, 0x58, 0x38, 0x3c, 0xd1, 0x4f, 0x6d, 0x59, 0xbb, 0x5e, 0x57, 0x63, 0x21, 0x7b, 0x23, 0x37, 0xec, 0x23, 0x21, 0x26, 0x81, 0x97, 0xf0, 0x2c, 0xec, 0xd0, 0xd9, 0xfd, 0x93, 0xdb, 0x39, 0xf8, 0x05, 0x9a, 0x38, 0xbb, 0xb3, 0x57, 0x92, 0xba, 0x0d, 0x4e, 0xd1, 0xba, 0xd9, 0x5a, 0x05, 0xb4, 0x81, 0xc3, 0x9f, 0x6a, 0xdc, 0x90, 0x17, 0xde, 0xc1, 0xd6, 0x62, 0xb0, 0x80, 0x3f, 0x2e, 0xcf, 0x08, 0x45, 0x93, 0x57, 0x65, 0xf9, 0x35, 0x6d, 0xb5, 0x36, 0xc8, 0xc1, 0x18, 0x87, 0xd9, 0xe4, 0x4b, 0x73, 0xb6, 0x99, 0x6a, 0xe7, 0xac, 0x24, 0xfc, 0xad, 0x9c, 0x23, 0x01, 0x7e, 0x5c, 0x2a, 0xca, 0x88, 0xb5, 0xa1, 0x36, 0xb6, 0x30, 0x72, 0x98, 0xb8, 0x5f, 0xf0, 0x10, 0xf9, 0x64, 0xb7, 0x47, 0x7a, 0x4f, 0x98, 0x08, 0x00, 0xe6, 0x9d, 0x3c, 0xc0, 0xf4, 0x38, 0xaf, 0xf7, 0xf2, 0xdf, 0x8a, 0xc6, 0x1d, 0x64, 0x43, 0x5f, 0xfa, 0xf5, 0xe4, 0x66, 0x33, 0x60, 0x9e, 0x87 }; /* K = 65243ccac0a014b9e52638171b4a88b02a8c6e617ab9467da523487122e6650c */ static const uint8_t ac_dsa_vect238_out[] = { /* R */ 0x56, 0xab, 0x99, 0x47, 0xac, 0x94, 0xfe, 0x3d, 0xf7, 0xe3, 0x58, 0x01, 0x66, 0x0f, 0x68, 0x75, 0x3b, 0x0b, 0x62, 0x0a, 0x26, 0x59, 0x4c, 0xb8, 0xfd, 0x37, 0x5b, 0xe3, 0xea, 0x4d, 0xbf, 0x05, /* S */ 0x60, 0x8e, 0xd1, 0x83, 0x51, 0x39, 0xaf, 0x29, 0xa2, 0xe3, 0xd8, 0x74, 0xdf, 0x46, 0x5e, 0xdd, 0x8d, 0x64, 0x28, 0xf4, 0x03, 0x57, 0xd9, 0xae, 0x49, 0x04, 0xef, 0xe8, 0xbc, 0xcb, 0xd0, 0x35 }; #define ac_dsa_vect239_prime ac_dsa_vect226_prime #define ac_dsa_vect239_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect239_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect239_ptx[] = { /* Msg */ 0x8a, 0xf3, 0x1f, 0x66, 0x77, 0x2f, 0xb0, 0xc3, 0x1a, 0x8c, 0x5b, 0x28, 0xe5, 0x68, 0xe6, 0x36, 0x8c, 0xb6, 0x6b, 0x59, 0x1e, 0xdf, 0xb0, 0xdb, 0x86, 0x7f, 0xd9, 0x9e, 0x83, 0xfe, 0xb3, 0x63, 0x8b, 0xc8, 0x0f, 0x0b, 0x14, 0x48, 0x3d, 0x06, 0x9e, 0x8f, 0x2e, 0x16, 0x7c, 0x8b, 0x0f, 0x10, 0xcd, 0x6b, 0x45, 0xd0, 0x39, 0xb7, 0xd6, 0xf8, 0x33, 0xbd, 0x58, 0xd9, 0x9b, 0x00, 0x59, 0x7a, 0xee, 0xf8, 0x2f, 0xa3, 0xaa, 0xe2, 0xe5, 0x5d, 0xed, 0x62, 0xab, 0x66, 0x08, 0x10, 0xde, 0x0f, 0xe1, 0xc9, 0x2d, 0x53, 0xad, 0xf9, 0x8c, 0x83, 0x8c, 0x18, 0xfd, 0x76, 0xa2, 0x73, 0xea, 0x12, 0x11, 0x9d, 0x67, 0x5a, 0xf7, 0x27, 0x01, 0x18, 0x69, 0x94, 0x3d, 0x76, 0x5b, 0x96, 0xef, 0x26, 0x62, 0x70, 0xb4, 0xf8, 0x9a, 0xc7, 0x2e, 0xda, 0xdc, 0xf7, 0x07, 0xa4, 0xa2, 0x1b, 0x75, 0x33 }; static const uint8_t ac_dsa_vect239_priv_val[] = { /* X */ 0x14, 0x5a, 0xbc, 0xe3, 0xea, 0xa8, 0xfa, 0x6b, 0x67, 0x0a, 0xfd, 0x65, 0x8b, 0xa0, 0xc1, 0x4f, 0xa9, 0x8d, 0x2d, 0x20, 0xe1, 0x42, 0x23, 0x67, 0xd4, 0x45, 0x59, 0x67, 0xf9, 0x84, 0x48, 0x58 }; static const uint8_t ac_dsa_vect239_pub_val[] = { /* Y */ 0x22, 0xf3, 0xdb, 0x9e, 0xa3, 0x69, 0x93, 0x8e, 0xd7, 0x50, 0xd5, 0xed, 0x37, 0x81, 0x36, 0x8d, 0x59, 0x4e, 0x62, 0x63, 0x5c, 0x6b, 0x6e, 0x10, 0x3d, 0x6d, 0xb4, 0x89, 0xa9, 0x97, 0x2f, 0x39, 0x82, 0x03, 0xab, 0xb9, 0x73, 0xd5, 0xad, 0x9c, 0x0d, 0xc1, 0x10, 0x58, 0x69, 0x78, 0xd2, 0x06, 0x14, 0x83, 0xc0, 0x20, 0x27, 0x38, 0xce, 0xb0, 0x1a, 0x66, 0x5d, 0xd2, 0x2f, 0xc5, 0x68, 0xcb, 0xdf, 0xf2, 0x14, 0x8a, 0xe6, 0x64, 0xdf, 0xfb, 0xf8, 0x88, 0xe4, 0xdd, 0xa5, 0xa0, 0x4f, 0xd3, 0xe8, 0x93, 0x98, 0xb4, 0xf1, 0xff, 0xc3, 0xa3, 0x81, 0x3a, 0xe9, 0x4d, 0xa1, 0xf8, 0x96, 0x5e, 0xfb, 0xe7, 0xf3, 0x00, 0x94, 0x87, 0x49, 0xe9, 0x75, 0x7c, 0xc7, 0xc0, 0x5f, 0x6e, 0x53, 0xfd, 0xbf, 0xf9, 0x94, 0xc2, 0x23, 0xab, 0xa2, 0xc1, 0x37, 0x15, 0x1b, 0x6a, 0x32, 0x0f, 0x5b, 0x7f, 0x8c, 0xdd, 0x60, 0x03, 0xba, 0xa6, 0x60, 0x20, 0x16, 0x29, 0x90, 0x62, 0x40, 0x99, 0xf3, 0xcf, 0x56, 0xd6, 0x8b, 0x74, 0xe9, 0x6e, 0xe0, 0x92, 0x40, 0xf2, 0xcf, 0x11, 0xe3, 0x95, 0x4e, 0x75, 0xb2, 0x61, 0xef, 0x9e, 0x8e, 0x35, 0x51, 0xc6, 0xc0, 0x0f, 0x41, 0xe9, 0xeb, 0x17, 0x42, 0x12, 0x03, 0xa4, 0x56, 0x53, 0x88, 0xc3, 0x21, 0xc1, 0x32, 0x5f, 0x72, 0xeb, 0x10, 0xc2, 0x8a, 0x9d, 0xee, 0xdd, 0xcb, 0x48, 0x06, 0xf6, 0x25, 0x38, 0x2b, 0x37, 0xf0, 0xbe, 0xcf, 0x77, 0x93, 0x6b, 0x7f, 0x83, 0xd2, 0x6b, 0xf1, 0xee, 0x1f, 0xe0, 0x5e, 0x8a, 0x00, 0x05, 0xa4, 0x05, 0x8c, 0x67, 0x8e, 0xb5, 0x69, 0xe3, 0x39, 0x42, 0x3e, 0x7c, 0x84, 0x43, 0x05, 0xf4, 0xa1, 0x8b, 0x11, 0x60, 0xa0, 0xc4, 0x30, 0x51, 0x3f, 0xad, 0x71, 0x58, 0x96, 0xb6, 0x2b, 0x9d, 0x6e, 0x24, 0x68, 0x23, 0x2a, 0xe3, 0x75, 0xf5, 0xf3, 0xc0, 0x05, 0x62, 0x45, 0xeb, 0x46, 0x16, 0xba, 0x11, 0xa6, 0x02, 0x94, 0x10, 0xa9, 0x55, 0xaf, 0x09, 0xf0, 0x75, 0x95, 0xfe, 0xfa, 0x03, 0xe5, 0x51, 0x6c, 0x95, 0xa4, 0xcf, 0xcd, 0x66, 0x04, 0x6b, 0xe2, 0xa4, 0xf7, 0xb3, 0xab, 0x27, 0x4b, 0x21, 0xc0, 0xa4, 0xf1, 0x26, 0xc4, 0x82, 0xc9, 0x34, 0xc7, 0x9d, 0xcb, 0xbd, 0x69, 0x16, 0xf3, 0xb8, 0x87, 0xb2, 0x60, 0x04, 0x72, 0x49, 0x5c, 0x83, 0x35, 0xde, 0x12, 0x1c, 0x77, 0x20, 0xf2, 0x9a, 0xe5, 0x6f, 0x5c, 0xcf, 0x9b, 0x99, 0xc9, 0xce, 0x56, 0x55, 0xc5, 0xe1, 0xd1, 0x5d, 0x67, 0x89, 0x5a, 0xf0, 0xde, 0xe5, 0x86, 0xbc, 0x49, 0x1a, 0x97, 0x24, 0x1f, 0x7e, 0xff, 0x43, 0x4b, 0xb7, 0x9a, 0xad, 0x83, 0x1d, 0xb0, 0x69, 0x57, 0x81, 0xe6, 0xb5, 0x12, 0xe8, 0x70, 0x24, 0x07, 0xa7, 0xd7, 0x48 }; /* K = 06f085f77088ec97cebe5397a588369e3dc15b70f2a5316a6dd5f94967fe3dbc */ static const uint8_t ac_dsa_vect239_out[] = { /* R */ 0x0f, 0xda, 0x7a, 0x8a, 0x3e, 0x5d, 0x32, 0x4f, 0xc0, 0xa1, 0xc2, 0x84, 0x1c, 0xd2, 0x2f, 0x98, 0x75, 0x7a, 0x0c, 0x6a, 0x2a, 0x46, 0x5b, 0x0d, 0x9d, 0x65, 0xbd, 0xa9, 0xb2, 0x3b, 0x3c, 0x1a, /* S */ 0x40, 0x86, 0x02, 0x65, 0x22, 0x90, 0x85, 0x45, 0x3f, 0xe5, 0x84, 0x87, 0xa9, 0x33, 0xed, 0xf3, 0xc2, 0x84, 0x33, 0x69, 0x4c, 0x7b, 0x85, 0xf6, 0x37, 0x0d, 0x9a, 0x47, 0x83, 0x16, 0x82, 0x37 }; #define ac_dsa_vect240_prime ac_dsa_vect226_prime #define ac_dsa_vect240_sub_prime ac_dsa_vect226_sub_prime #define ac_dsa_vect240_base ac_dsa_vect226_base static const uint8_t ac_dsa_vect240_ptx[] = { /* Msg */ 0xe2, 0x45, 0x6e, 0xf5, 0xd4, 0x65, 0x73, 0x1b, 0x97, 0x6f, 0x2a, 0xd1, 0xfc, 0x94, 0x63, 0x4c, 0x05, 0x69, 0xa0, 0xff, 0x75, 0x66, 0xa4, 0x9d, 0x47, 0xd6, 0x9e, 0x60, 0xb3, 0xb6, 0xd7, 0xeb, 0x2a, 0xb2, 0x5c, 0xd4, 0x9c, 0x93, 0x12, 0x99, 0x79, 0x6b, 0xff, 0x7e, 0x97, 0x74, 0x07, 0x5e, 0xa2, 0x0a, 0x97, 0x2e, 0x39, 0x49, 0xa2, 0x9d, 0xfb, 0x50, 0xb2, 0xb5, 0x61, 0x3b, 0x45, 0xc5, 0x96, 0xca, 0x5d, 0xab, 0x28, 0x2f, 0xf1, 0x83, 0xf5, 0x64, 0xa0, 0x63, 0x11, 0xa4, 0x96, 0x01, 0xa1, 0xe8, 0x56, 0x0d, 0x43, 0xc6, 0xa4, 0x81, 0xce, 0x71, 0x3f, 0x46, 0xc6, 0xea, 0x85, 0xbf, 0x4c, 0x16, 0x48, 0x9f, 0xbd, 0x72, 0xcf, 0x55, 0x2b, 0x26, 0x51, 0x62, 0x98, 0xbc, 0x66, 0x94, 0x2a, 0x05, 0xd5, 0xa8, 0xe6, 0xd0, 0xf6, 0xa8, 0x8f, 0x3e, 0x67, 0x8d, 0x31, 0x0e, 0x29, 0x7b }; static const uint8_t ac_dsa_vect240_priv_val[] = { /* X */ 0x28, 0x6d, 0x3c, 0xec, 0x1d, 0x2a, 0xd2, 0xa8, 0x5f, 0x0f, 0x16, 0x32, 0x45, 0x26, 0x74, 0x38, 0xf7, 0xd7, 0xd6, 0x21, 0x49, 0xba, 0x9e, 0x59, 0xa1, 0x8d, 0xff, 0xfa, 0xef, 0xe4, 0x43, 0x58 }; static const uint8_t ac_dsa_vect240_pub_val[] = { /* Y */ 0xdc, 0x9d, 0x68, 0xb5, 0x3f, 0x35, 0xc2, 0x9f, 0x7c, 0xa0, 0x03, 0xa2, 0x58, 0x3e, 0xc8, 0xf8, 0xef, 0x5d, 0x78, 0xa0, 0xe4, 0x5d, 0xb3, 0xc8, 0x84, 0xd3, 0x5d, 0xf4, 0xfb, 0x53, 0x1a, 0x08, 0x0e, 0xe3, 0x83, 0x1b, 0xff, 0xd3, 0xc7, 0x56, 0xea, 0x50, 0x42, 0xc7, 0x61, 0x45, 0x70, 0xfb, 0xa2, 0xf6, 0xca, 0x48, 0x70, 0xdb, 0x4a, 0x45, 0x3d, 0x0f, 0x79, 0x3f, 0xb4, 0xd0, 0x22, 0x5d, 0x94, 0xf2, 0x74, 0x12, 0xdb, 0xdf, 0x43, 0x43, 0x2f, 0x52, 0xcb, 0x8f, 0x86, 0x7f, 0xe5, 0xf4, 0x92, 0xa8, 0x87, 0x6d, 0x7b, 0xd8, 0x50, 0xd8, 0x99, 0xba, 0x2f, 0x0a, 0x53, 0x82, 0x0c, 0x44, 0x08, 0x41, 0xfe, 0x0c, 0xb7, 0x6f, 0xe0, 0x44, 0x4b, 0xd6, 0xc3, 0x23, 0x57, 0x85, 0xa3, 0xda, 0x30, 0x81, 0xfe, 0xf9, 0x9f, 0x53, 0xa1, 0x95, 0x31, 0x4a, 0xef, 0xe9, 0x55, 0xf2, 0x96, 0x4c, 0x56, 0x50, 0x6f, 0xcc, 0x96, 0x9b, 0x67, 0xb3, 0x23, 0x76, 0x6d, 0x29, 0x9c, 0x0b, 0x02, 0x98, 0x1c, 0x72, 0xa2, 0xce, 0x3d, 0x75, 0x24, 0xae, 0x6f, 0x08, 0x45, 0x87, 0x95, 0xfd, 0x32, 0xe3, 0x1b, 0x47, 0xaa, 0x1f, 0x97, 0x4e, 0x35, 0x60, 0x81, 0x16, 0x3c, 0xb2, 0x3e, 0xfd, 0x73, 0xa9, 0xe6, 0x55, 0xde, 0xef, 0xe5, 0xe7, 0x34, 0xce, 0xb5, 0x8e, 0x88, 0xa9, 0xdb, 0xb5, 0x24, 0xef, 0xf7, 0xe1, 0x1c, 0x3e, 0x30, 0x68, 0x07, 0x02, 0xd8, 0x56, 0x0d, 0xd8, 0xb6, 0xad, 0x9f, 0x61, 0xe7, 0x24, 0x6c, 0x6d, 0xde, 0x16, 0x4e, 0x91, 0x49, 0x51, 0xd6, 0xa0, 0x57, 0x31, 0x52, 0xec, 0x8b, 0xde, 0xa6, 0x79, 0xdc, 0xa1, 0x98, 0x5b, 0xcf, 0x26, 0x73, 0x04, 0xd5, 0xf1, 0xbc, 0xe2, 0xf3, 0x2b, 0xb9, 0x94, 0x6a, 0x05, 0x68, 0x57, 0x35, 0x9a, 0xfb, 0xaf, 0xfa, 0x59, 0xbe, 0xe6, 0x1a, 0xd9, 0x60, 0xc5, 0x67, 0xef, 0xe3, 0xf1, 0x14, 0x5a, 0x8a, 0x87, 0xc2, 0x49, 0x1f, 0xa6, 0xb3, 0x3f, 0x7e, 0x71, 0xfc, 0xdd, 0x8f, 0x1f, 0xfb, 0xcd, 0x2b, 0x89, 0x92, 0x09, 0x07, 0xd1, 0x14, 0x4a, 0x8c, 0xf0, 0x57, 0x3f, 0x5b, 0x89, 0x21, 0x7b, 0xc0, 0x59, 0x8c, 0x6e, 0x17, 0x54, 0xf1, 0xae, 0x7d, 0x9d, 0x42, 0xa6, 0x08, 0xa0, 0x51, 0x62, 0x14, 0x19, 0xda, 0x91, 0xd1, 0x1b, 0xda, 0x9b, 0xb9, 0xdf, 0xa7, 0x11, 0x8e, 0x4b, 0x66, 0x3e, 0x7b, 0xff, 0xe6, 0xe9, 0x94, 0x6c, 0x77, 0xce, 0x9f, 0x80, 0x86, 0xdf, 0xc8, 0x22, 0xa7, 0xef, 0x72, 0x88, 0x88, 0xb3, 0x16, 0x54, 0xa1, 0x9b, 0x6d, 0xeb, 0xd2, 0xca, 0x62, 0xf5, 0xe3, 0xb4, 0xe2, 0x89, 0x81, 0x04, 0x35, 0xb3, 0x63, 0xec, 0xab, 0x51, 0x1f, 0x47, 0xe9, 0xe1, 0x57, 0xf0, 0xf4, 0x19, 0x88, 0x62, 0xca, 0x13 }; /* K = 183ca3afd082bf3de19e89faffc5cfa7dd713a873c02c723279b3091f9bc627c */ static const uint8_t ac_dsa_vect240_out[] = { /* R */ 0x77, 0x86, 0x40, 0xce, 0x75, 0xda, 0x58, 0x4a, 0x6a, 0x83, 0xf9, 0x79, 0x4c, 0x4f, 0xfd, 0xbe, 0x30, 0x41, 0x1b, 0xe4, 0x30, 0x27, 0x75, 0x8c, 0x74, 0xf8, 0x9f, 0x7c, 0xcc, 0x7f, 0x39, 0x83, /* S */ 0x61, 0x25, 0x48, 0x1e, 0x10, 0x3f, 0x78, 0x03, 0xb2, 0xf1, 0x6d, 0x9a, 0x4d, 0x00, 0xf8, 0x81, 0xe0, 0xb3, 0x67, 0x02, 0x4d, 0xf5, 0x82, 0x2f, 0x7c, 0xbe, 0xb5, 0x71, 0x1e, 0x0e, 0x44, 0x01 }; /* [mod = L=3072, N=256, SHA-224] */ static const uint8_t ac_dsa_vect241_prime[] = { /* P */ 0xf6, 0x3b, 0x3c, 0xdd, 0x64, 0x6d, 0x8e, 0x7d, 0xdb, 0x57, 0x21, 0x6a, 0xa6, 0xee, 0xc2, 0x13, 0x4d, 0x70, 0x74, 0x88, 0xa1, 0xf2, 0x9c, 0xfa, 0x99, 0x70, 0x64, 0x5f, 0x12, 0x27, 0xea, 0x5d, 0xb2, 0xe3, 0x18, 0xee, 0xa5, 0xda, 0x16, 0x87, 0xc7, 0xed, 0x90, 0x50, 0x96, 0x69, 0x34, 0x5e, 0xd6, 0x13, 0x4c, 0xff, 0x32, 0x20, 0x3a, 0xb7, 0x2a, 0xec, 0xbf, 0xa6, 0x93, 0xd2, 0x16, 0xae, 0xb5, 0x5d, 0x8d, 0x28, 0xa9, 0x81, 0xf4, 0xab, 0xff, 0x07, 0xd1, 0x31, 0x9a, 0x79, 0x9b, 0xe5, 0xdd, 0x74, 0x6f, 0x84, 0x84, 0x28, 0x17, 0x92, 0x9c, 0x30, 0x5b, 0x40, 0x85, 0x98, 0xaf, 0x12, 0x04, 0x5d, 0xaa, 0x2f, 0x1c, 0xcc, 0x8b, 0xe4, 0xd8, 0x1b, 0x51, 0x3c, 0x63, 0x0f, 0x01, 0x7f, 0xec, 0x16, 0x58, 0xac, 0xa1, 0x08, 0xa1, 0xaf, 0x61, 0x20, 0xec, 0x05, 0xe3, 0x01, 0x8c, 0x42, 0x53, 0xc9, 0xdd, 0x35, 0xbc, 0xe0, 0x62, 0xb7, 0x3d, 0x0f, 0x2a, 0x93, 0xd4, 0x1c, 0x48, 0x1a, 0x5c, 0x43, 0xbb, 0x97, 0x90, 0x96, 0x82, 0xd3, 0x9a, 0x9a, 0x60, 0xdc, 0x3c, 0x35, 0xe3, 0x63, 0x75, 0xde, 0xc6, 0xce, 0xd0, 0xd2, 0xdb, 0x3b, 0xa0, 0xd1, 0x11, 0xbe, 0xde, 0xa7, 0x01, 0xa0, 0xe4, 0x75, 0x36, 0x24, 0x97, 0x7a, 0x9e, 0x75, 0xb7, 0x0a, 0x74, 0xe2, 0xb8, 0x1e, 0x38, 0xa5, 0x2a, 0xb2, 0x2d, 0xa1, 0x31, 0xb3, 0x54, 0x16, 0xd3, 0xce, 0xc9, 0x66, 0x30, 0x79, 0x74, 0x6a, 0x76, 0x34, 0x76, 0xe5, 0x75, 0x98, 0x14, 0x2e, 0x39, 0x86, 0x15, 0x45, 0xda, 0xaf, 0x8d, 0x38, 0xa1, 0x76, 0xf2, 0x6c, 0x71, 0xf5, 0xaf, 0xeb, 0xd9, 0xc5, 0x62, 0x0d, 0xa8, 0x0c, 0xf3, 0x45, 0x2b, 0x55, 0xc3, 0x7c, 0x66, 0x1b, 0x4a, 0x1e, 0xc0, 0x35, 0x17, 0x10, 0xb9, 0xde, 0x4a, 0x3c, 0xbe, 0x0b, 0x98, 0xb4, 0xd9, 0xec, 0x89, 0x12, 0x8d, 0x97, 0xaa, 0x7e, 0xfb, 0x19, 0xdb, 0x8b, 0xa4, 0x3c, 0xc0, 0xbe, 0x25, 0xc2, 0x00, 0xf9, 0x0e, 0x15, 0x06, 0xcb, 0x78, 0xec, 0x0c, 0x33, 0x6d, 0x7a, 0x95, 0x61, 0x3d, 0x42, 0x04, 0xe8, 0xed, 0x68, 0xd0, 0xf0, 0xa6, 0xc7, 0x84, 0x20, 0x10, 0x5a, 0x8d, 0x2d, 0x43, 0x8f, 0xbd, 0x25, 0x51, 0xa6, 0x4a, 0x1a, 0x0b, 0x03, 0xff, 0xb8, 0x78, 0x74, 0x2f, 0x8c, 0x99, 0x79, 0xcf, 0xa8, 0x73, 0x94, 0x15, 0x02, 0x81, 0x99, 0x8d, 0x51, 0x70, 0x1d, 0x5f, 0xcf, 0xa9, 0x69, 0x6a, 0x49, 0x89, 0xfd, 0x25, 0xf4, 0x00, 0x95, 0x5e, 0x62, 0x6b, 0x1a, 0xbe, 0x92, 0x6c, 0x0a, 0xfa, 0x69, 0xaa, 0x69, 0x81, 0x90, 0x0e, 0xff, 0xcd, 0xd0, 0x30, 0x59, 0x2f, 0x82, 0xb2, 0x04, 0x2a, 0x47, 0xa9, 0xa5, 0xa8, 0xcb, 0x02, 0x83, 0xdc, 0x4d }; static const uint8_t ac_dsa_vect241_sub_prime[] = { /* Q */ 0x80, 0x00, 0x00, 0x00, 0xba, 0x46, 0x34, 0xb5, 0xfa, 0x4d, 0xa0, 0x54, 0xbd, 0x0c, 0xa4, 0x8a, 0xe4, 0x90, 0xe5, 0x77, 0x11, 0xf3, 0x81, 0x19, 0x38, 0x42, 0x42, 0x91, 0x59, 0xba, 0x7c, 0xa1 }; static const uint8_t ac_dsa_vect241_base[] = { /* G */ 0x8a, 0xd4, 0x55, 0x3c, 0x4e, 0x49, 0xaa, 0x24, 0x72, 0x8a, 0xb5, 0x02, 0x44, 0x17, 0xb1, 0x32, 0xd2, 0xca, 0x53, 0xa5, 0x5d, 0x95, 0x94, 0x58, 0xf2, 0xf7, 0x59, 0xad, 0xb0, 0x43, 0x5b, 0xee, 0xef, 0xa3, 0xa2, 0xcf, 0xcd, 0x00, 0x38, 0xe2, 0x42, 0x06, 0x43, 0xfc, 0x4a, 0x4d, 0xee, 0xb5, 0xd9, 0xfe, 0xaa, 0x1e, 0xdf, 0x21, 0x19, 0x3b, 0x40, 0xe1, 0x4b, 0x42, 0x98, 0x2a, 0x94, 0xf3, 0x5c, 0x58, 0xb8, 0x11, 0x47, 0xd7, 0x18, 0x9d, 0x26, 0x3c, 0x9b, 0x12, 0xfe, 0x63, 0xab, 0x9f, 0xa5, 0xf6, 0xf0, 0x3a, 0x28, 0x60, 0xc1, 0x86, 0x43, 0x2e, 0x3a, 0xb0, 0x4f, 0x2a, 0xb0, 0xf2, 0xfb, 0x61, 0x47, 0xbd, 0x9b, 0xf7, 0xed, 0x5d, 0x20, 0x71, 0x3b, 0x9d, 0xa2, 0x13, 0x83, 0xe2, 0xc3, 0xa1, 0x68, 0xe7, 0xd0, 0x9d, 0x3d, 0x8a, 0x5a, 0x05, 0x8f, 0xd2, 0x30, 0x95, 0xb5, 0xac, 0xfe, 0xb8, 0x64, 0xa3, 0x30, 0x6b, 0xe2, 0x42, 0x5f, 0xa1, 0xad, 0x32, 0xad, 0x6d, 0x93, 0x82, 0xe6, 0x03, 0xb0, 0x3c, 0x68, 0xaf, 0x4a, 0xf0, 0x24, 0x63, 0x97, 0x10, 0x2c, 0x41, 0x55, 0xcb, 0xa8, 0x11, 0xab, 0xf9, 0x9d, 0xa7, 0x83, 0x9e, 0x77, 0xb2, 0xea, 0xc9, 0x97, 0x05, 0x88, 0xca, 0x1d, 0x0a, 0x23, 0x61, 0x72, 0x3a, 0x16, 0x4a, 0xc9, 0x22, 0x9c, 0x2e, 0x80, 0xdc, 0xfa, 0x8d, 0xb4, 0xf9, 0xe2, 0x98, 0x03, 0xef, 0xfb, 0x31, 0x68, 0xc7, 0xfe, 0xd7, 0xa3, 0xa6, 0xde, 0x40, 0xdd, 0xa1, 0x9a, 0x05, 0x36, 0xaf, 0x9b, 0x5b, 0x7a, 0xfa, 0xef, 0xb9, 0xc7, 0x0d, 0x6a, 0xe8, 0xdf, 0x12, 0xda, 0x65, 0x8f, 0x62, 0x36, 0x04, 0x3a, 0xea, 0x87, 0x3d, 0xb2, 0x9c, 0xeb, 0x6f, 0x07, 0xd1, 0x08, 0xf5, 0x22, 0x56, 0x87, 0xbd, 0x0c, 0x30, 0xe3, 0x08, 0x4e, 0x20, 0x90, 0xb4, 0x5a, 0xe2, 0xf9, 0x2a, 0x97, 0xb8, 0xec, 0xb7, 0xa9, 0x70, 0x5c, 0x49, 0x56, 0xb8, 0xb3, 0x1c, 0x4a, 0x3d, 0x61, 0x10, 0x7c, 0x84, 0xe4, 0x7a, 0xdd, 0xa6, 0xc8, 0x0d, 0x5d, 0x22, 0xda, 0xb3, 0xd8, 0x59, 0x22, 0x0f, 0x9d, 0x5a, 0xab, 0x13, 0x67, 0x7a, 0xe3, 0xdf, 0x16, 0x8f, 0x0c, 0x17, 0x6d, 0x17, 0x6b, 0x54, 0x50, 0x6c, 0x63, 0x98, 0x53, 0xf0, 0x4d, 0xde, 0xf2, 0x72, 0x2f, 0x39, 0xc1, 0x8e, 0x5c, 0xe4, 0x26, 0xe1, 0x45, 0x62, 0xad, 0x8f, 0xf2, 0x62, 0x47, 0xaf, 0x88, 0x87, 0x0e, 0xfb, 0x72, 0xc0, 0xcc, 0xe8, 0x36, 0xde, 0x8f, 0xee, 0x67, 0xa6, 0x62, 0x37, 0x82, 0x45, 0xb5, 0x02, 0xbf, 0x1f, 0x83, 0x09, 0x99, 0x88, 0xa0, 0x93, 0xce, 0x7c, 0xdc, 0x81, 0x36, 0x4c, 0x78, 0xb1, 0xf4, 0xa5, 0x1b, 0x80, 0x0d, 0xf6, 0x13, 0x7c, 0x71, 0xd6, 0x5e, 0x6b, 0x08, 0x9a }; static const uint8_t ac_dsa_vect241_ptx[] = { /* Msg */ 0x95, 0x79, 0x73, 0xfc, 0x3f, 0x3f, 0xe3, 0xf5, 0x59, 0x06, 0x5b, 0xe5, 0xd4, 0xa0, 0xc2, 0x81, 0xcf, 0x17, 0x95, 0x90, 0x18, 0xb9, 0xa6, 0x70, 0xd2, 0xb3, 0x70, 0x6d, 0x41, 0xd5, 0x81, 0x2e, 0x37, 0x30, 0x10, 0x05, 0xf8, 0xb7, 0x0e, 0xbd, 0x2f, 0xba, 0x3c, 0x40, 0xa3, 0xf3, 0x77, 0xa7, 0x51, 0xb6, 0xcb, 0x96, 0x93, 0xe3, 0xcb, 0x00, 0xd9, 0x28, 0x88, 0x24, 0x7d, 0x07, 0x92, 0x1d, 0x3c, 0x1e, 0x92, 0x57, 0xce, 0x08, 0x73, 0x3b, 0x89, 0x26, 0xe0, 0xdf, 0x7b, 0xdb, 0x6e, 0x85, 0x5f, 0x1f, 0x85, 0x10, 0x75, 0xd4, 0xe6, 0x28, 0xd1, 0x10, 0xd4, 0x2b, 0x64, 0x3b, 0x54, 0x87, 0x6e, 0x5f, 0xaa, 0x36, 0x11, 0x47, 0x7e, 0xe6, 0x83, 0x71, 0x56, 0x25, 0x55, 0x26, 0x9e, 0xd6, 0x2a, 0x92, 0x71, 0xba, 0xd5, 0x0c, 0xc4, 0xd4, 0x60, 0x38, 0xde, 0x2d, 0xd4, 0x19, 0x20, 0xc2 }; static const uint8_t ac_dsa_vect241_priv_val[] = { /* X */ 0x52, 0x4a, 0x7e, 0xa5, 0x97, 0x7f, 0x81, 0x02, 0xb3, 0x55, 0x29, 0x30, 0x47, 0x7f, 0x5f, 0x04, 0x24, 0x01, 0x16, 0x5d, 0x46, 0x37, 0xdc, 0xd8, 0xb9, 0xd1, 0x3d, 0xf4, 0xf3, 0xaa, 0xe5, 0xd0 }; static const uint8_t ac_dsa_vect241_pub_val[] = { /* Y */ 0x42, 0x24, 0x35, 0x39, 0xe4, 0x9d, 0xb9, 0xea, 0x19, 0xd9, 0x8d, 0x97, 0xf6, 0xf2, 0xa9, 0x4b, 0x23, 0x52, 0x98, 0x12, 0xdf, 0x88, 0x9e, 0xaa, 0xbc, 0xfe, 0xda, 0x01, 0xce, 0x4c, 0x75, 0x94, 0x87, 0xfb, 0x89, 0xbc, 0x82, 0xda, 0x75, 0xfe, 0x1c, 0x91, 0x34, 0x36, 0x1f, 0x86, 0xde, 0x47, 0xd1, 0x6d, 0x8e, 0xee, 0x80, 0xe5, 0x6a, 0xc5, 0x02, 0x17, 0x8e, 0x8e, 0xd8, 0x12, 0x94, 0x77, 0xaf, 0x8b, 0xfb, 0xd8, 0x26, 0x2c, 0x5e, 0xdd, 0x93, 0x7e, 0x1a, 0x86, 0xc0, 0xf0, 0xe7, 0xb2, 0xaf, 0xe7, 0xbc, 0xbd, 0xdf, 0xcb, 0x58, 0x14, 0xce, 0xd0, 0xb7, 0x56, 0xa7, 0x6c, 0xa1, 0x78, 0x42, 0x3b, 0xb4, 0xd5, 0x78, 0xc5, 0xda, 0x18, 0x37, 0x12, 0xd9, 0x68, 0x58, 0x26, 0x40, 0xaa, 0x0e, 0xc7, 0xe9, 0xfb, 0x56, 0xbf, 0xd9, 0x60, 0xd7, 0xa5, 0x75, 0x49, 0x74, 0x7d, 0x8f, 0xb7, 0xad, 0xe4, 0x7c, 0xfe, 0x81, 0x6c, 0x1e, 0x57, 0xda, 0x66, 0x33, 0xda, 0xcc, 0x53, 0x7d, 0xe0, 0x60, 0x81, 0x39, 0x64, 0xbb, 0x5b, 0x27, 0x57, 0xa3, 0x12, 0xf9, 0xda, 0x3d, 0x84, 0xe6, 0x0a, 0xff, 0x98, 0x17, 0x00, 0x51, 0xd3, 0xd9, 0x0e, 0x38, 0x0b, 0x8b, 0xcc, 0x19, 0x86, 0xc5, 0x8f, 0xf9, 0xdc, 0x91, 0xe8, 0x82, 0x7d, 0x4f, 0x9f, 0x5f, 0xc4, 0xb2, 0xb2, 0xe7, 0x43, 0xcf, 0x93, 0x89, 0xff, 0x02, 0xde, 0xc0, 0x1f, 0x5d, 0x43, 0x4b, 0x43, 0x0d, 0x16, 0x2e, 0x89, 0x1c, 0x33, 0x55, 0xf9, 0x18, 0x55, 0x33, 0x9f, 0x8d, 0xf5, 0x83, 0x00, 0xe4, 0xc9, 0x93, 0xae, 0x4d, 0xf8, 0xc4, 0x31, 0x8b, 0x5c, 0x4b, 0xd0, 0x52, 0x83, 0xca, 0x4b, 0x46, 0xb7, 0xd2, 0xfb, 0x0f, 0x64, 0x76, 0xbf, 0x15, 0x90, 0x7f, 0x50, 0xdd, 0x41, 0x41, 0xaa, 0x7a, 0xca, 0xc9, 0xda, 0xa6, 0x2e, 0xcc, 0xd3, 0xa6, 0x73, 0x57, 0x12, 0x20, 0x60, 0xb6, 0xce, 0xce, 0x04, 0x46, 0xa9, 0x3e, 0xb2, 0x30, 0xad, 0x93, 0xbc, 0x9a, 0x4d, 0x1b, 0x1e, 0xfe, 0xec, 0xa1, 0xe3, 0xfc, 0x83, 0xc1, 0x19, 0x78, 0x50, 0x35, 0xb4, 0x39, 0x50, 0x9f, 0xfb, 0x79, 0x68, 0xb1, 0xa4, 0x48, 0xb7, 0xbd, 0x83, 0x15, 0x75, 0x3f, 0xdf, 0x04, 0xa2, 0x56, 0xec, 0xa1, 0x56, 0x2a, 0x11, 0xb0, 0x96, 0xc9, 0x0a, 0x36, 0xb3, 0x53, 0x65, 0x9c, 0xbd, 0xe4, 0x42, 0x0e, 0x17, 0xe9, 0x0b, 0x94, 0xc4, 0x3c, 0x75, 0x19, 0xc6, 0x06, 0x41, 0xce, 0xec, 0x05, 0x6f, 0x89, 0x7b, 0x97, 0xd6, 0xbb, 0x18, 0x61, 0x26, 0x8e, 0x0d, 0xc7, 0x9b, 0x7c, 0x3b, 0x6b, 0x76, 0x39, 0xc2, 0x55, 0xbf, 0x06, 0x86, 0x57, 0x37, 0x45, 0x91, 0x26, 0xcb, 0x46, 0x5b, 0xc1, 0xda, 0x4a, 0x04, 0x3a, 0x19, 0x63, 0xda, 0x7d, 0x63 }; /* K = 29e4d7790e181b4767903fe0eb37757f33f13337c33588c1fdbfba0e655ab621 */ static const uint8_t ac_dsa_vect241_out[] = { /* R */ 0x2e, 0x59, 0xd5, 0xf3, 0x0f, 0x73, 0x78, 0x1d, 0x38, 0x25, 0x5b, 0x70, 0xde, 0xde, 0xeb, 0x38, 0xae, 0x78, 0xdf, 0x4f, 0x00, 0x2c, 0x1f, 0x74, 0x7c, 0x08, 0xde, 0xad, 0xc6, 0x53, 0x01, 0x55, /* S */ 0x61, 0x5c, 0x55, 0xb2, 0xdf, 0x0c, 0xa2, 0x8c, 0x60, 0xa6, 0xb3, 0x85, 0xc5, 0x8f, 0xa0, 0x36, 0xdf, 0x8c, 0x4b, 0x2f, 0x4f, 0x19, 0x35, 0x73, 0x0b, 0xf8, 0xf4, 0xf0, 0xbe, 0xd1, 0x36, 0x10 }; #define ac_dsa_vect242_prime ac_dsa_vect241_prime #define ac_dsa_vect242_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect242_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect242_ptx[] = { /* Msg */ 0x54, 0x07, 0x1a, 0xca, 0x28, 0x96, 0x97, 0x49, 0xce, 0x2e, 0x2d, 0xc8, 0x55, 0x05, 0x20, 0x19, 0xbe, 0xc2, 0x7d, 0x0d, 0xd6, 0xa3, 0x10, 0x21, 0x93, 0x11, 0xb4, 0xb6, 0xd8, 0x22, 0x46, 0x7b, 0x22, 0xb3, 0xf0, 0x2f, 0xb8, 0x31, 0x39, 0x93, 0xfc, 0x77, 0xc4, 0xaf, 0x1d, 0x76, 0xab, 0x9d, 0xb9, 0x9b, 0x0b, 0x2b, 0x78, 0x20, 0x4a, 0xa4, 0x5f, 0x40, 0x32, 0xa7, 0xd9, 0x45, 0xf9, 0x3d, 0x55, 0xbc, 0xb8, 0xa6, 0xbb, 0xd4, 0x7f, 0x98, 0x29, 0x9a, 0x09, 0x29, 0x71, 0x04, 0x61, 0x41, 0x9e, 0xdb, 0xe1, 0x13, 0x2d, 0xc2, 0x25, 0x75, 0xf5, 0xaf, 0xbe, 0x70, 0x78, 0xcf, 0x5f, 0x05, 0xb2, 0x31, 0x00, 0x0f, 0x4a, 0x0f, 0x9f, 0x36, 0x7d, 0x90, 0x25, 0xed, 0x3a, 0xe1, 0x78, 0x6e, 0x01, 0x83, 0xea, 0xc9, 0x3e, 0xa9, 0x6b, 0x55, 0x30, 0x4a, 0x8c, 0x2d, 0xbf, 0x69, 0x08, 0x21 }; static const uint8_t ac_dsa_vect242_priv_val[] = { /* X */ 0x4b, 0x2d, 0x62, 0xd0, 0xe7, 0xb8, 0x84, 0x36, 0x73, 0x7d, 0x03, 0xd6, 0xf6, 0x4d, 0xd6, 0xa6, 0xdd, 0x07, 0x57, 0x02, 0x18, 0x17, 0x16, 0x9b, 0xa3, 0x73, 0xe3, 0xa3, 0x1b, 0xc1, 0x2c, 0xb7 }; static const uint8_t ac_dsa_vect242_pub_val[] = { /* Y */ 0xef, 0x78, 0x15, 0x2e, 0xfd, 0x88, 0x13, 0x0a, 0x4f, 0xec, 0xfe, 0x23, 0x50, 0x37, 0xde, 0x23, 0x09, 0xb1, 0xe2, 0xf3, 0x22, 0xd4, 0xf4, 0x15, 0x47, 0x56, 0xca, 0xa8, 0xf0, 0xb3, 0xe4, 0x1b, 0xe4, 0x5c, 0x80, 0xd8, 0x95, 0xde, 0x56, 0x38, 0x92, 0x57, 0xc3, 0x91, 0x30, 0x72, 0x86, 0xbe, 0x8e, 0x87, 0x09, 0xb8, 0x01, 0x86, 0xe2, 0x72, 0x41, 0x72, 0xb0, 0xf2, 0x97, 0x4b, 0xe5, 0x91, 0x58, 0x49, 0x16, 0xfc, 0x0e, 0x75, 0x0c, 0x0c, 0xaf, 0x83, 0xd8, 0x39, 0xb5, 0xc2, 0x48, 0xf5, 0xde, 0x65, 0x86, 0x68, 0x66, 0x5f, 0x00, 0x4b, 0xab, 0x8a, 0xd3, 0x10, 0x11, 0x88, 0x35, 0x95, 0x7c, 0x02, 0xda, 0x6a, 0xe9, 0xa2, 0xa7, 0x9d, 0xa0, 0x39, 0xad, 0xc8, 0x84, 0xf9, 0xeb, 0x8b, 0x62, 0xe3, 0x79, 0xe2, 0x7f, 0x54, 0x9e, 0x7f, 0x8a, 0xff, 0x8a, 0xd2, 0xfc, 0x27, 0x6e, 0xce, 0x15, 0xf0, 0x42, 0x35, 0x28, 0xa0, 0x9e, 0x31, 0xb2, 0x64, 0x21, 0xdf, 0x93, 0x57, 0x3b, 0xec, 0x7a, 0x4d, 0x6c, 0x2c, 0xbf, 0xbe, 0x5c, 0xe0, 0xfc, 0xe0, 0x70, 0x20, 0x88, 0xfb, 0x38, 0x4a, 0xd1, 0xdc, 0x35, 0xbb, 0x2c, 0x1c, 0x74, 0x2d, 0x43, 0xd7, 0x9a, 0xd1, 0x36, 0xe7, 0x10, 0x57, 0xcb, 0x9f, 0x22, 0xca, 0x04, 0x2e, 0x61, 0xd2, 0xc5, 0xcc, 0x4c, 0xcf, 0x5b, 0x75, 0xa7, 0x37, 0x99, 0x22, 0xbc, 0x4f, 0xd8, 0x83, 0x72, 0xd2, 0xa8, 0xf6, 0xa2, 0x75, 0x08, 0x65, 0xf9, 0x1c, 0x14, 0x34, 0x12, 0xa3, 0xfc, 0x61, 0xe4, 0xad, 0x4a, 0xbd, 0x03, 0xdc, 0x1c, 0xa0, 0xfc, 0x42, 0x97, 0xab, 0x10, 0x7a, 0x19, 0x63, 0x53, 0x3a, 0x3d, 0x80, 0xa2, 0x4a, 0xe2, 0xec, 0x41, 0x46, 0xe8, 0x26, 0x5a, 0xcf, 0xd4, 0x44, 0x6f, 0xc2, 0x81, 0x03, 0xc5, 0x04, 0x7c, 0x17, 0x79, 0x6c, 0x41, 0x48, 0xb8, 0xe6, 0x58, 0xe4, 0x4e, 0x9b, 0x1c, 0x25, 0x9d, 0x63, 0xc9, 0x7f, 0x0e, 0x76, 0x6f, 0xba, 0x8d, 0x9a, 0x73, 0x94, 0xcd, 0xb7, 0x34, 0x50, 0x8b, 0xfa, 0x09, 0xae, 0x42, 0xd2, 0xda, 0x30, 0x68, 0xe2, 0xc8, 0x5a, 0xf2, 0x06, 0x5f, 0x61, 0x8e, 0xc3, 0xf3, 0xc7, 0x3d, 0x73, 0xa7, 0x50, 0xc1, 0x36, 0x44, 0xc9, 0x6e, 0x3d, 0xbb, 0xb7, 0x47, 0x43, 0x25, 0xaf, 0x48, 0xd1, 0xd1, 0x45, 0xc2, 0x8d, 0x69, 0xf2, 0x2c, 0xbb, 0x4a, 0x90, 0x73, 0x05, 0x9a, 0x9c, 0x40, 0x89, 0x18, 0x04, 0xc7, 0x3a, 0x22, 0x9f, 0x01, 0xce, 0xf0, 0x67, 0x8c, 0xf4, 0x85, 0x5d, 0x18, 0xf9, 0x00, 0xf0, 0x25, 0x3a, 0xcd, 0x6b, 0x3e, 0xe5, 0x3d, 0xd9, 0x6c, 0x4c, 0x92, 0xaf, 0xff, 0x1f, 0x30, 0x87, 0xee, 0xb4, 0xfb, 0xa8, 0x6d, 0x2e, 0x94, 0x95, 0xc5, 0xf7, 0x34, 0xa4, 0x6c, 0xa2 }; /* K = 5af719a9e5d8567dc26576782e8f247517fad5ac5de0f7115c5158748fc73b40 */ static const uint8_t ac_dsa_vect242_out[] = { /* R */ 0x0d, 0xeb, 0xcf, 0x6c, 0x88, 0x50, 0x4a, 0x88, 0x2a, 0x01, 0x91, 0xe6, 0xfa, 0x4c, 0x77, 0x4c, 0x10, 0x85, 0x83, 0x62, 0x62, 0x94, 0x28, 0xaf, 0xf2, 0x4c, 0x22, 0xe3, 0x36, 0x4b, 0xaa, 0x15, /* S */ 0x53, 0xd8, 0xc1, 0xdb, 0xb3, 0xa2, 0xc1, 0x02, 0x35, 0x21, 0xb7, 0x05, 0x00, 0x5c, 0xe6, 0x35, 0x0b, 0xcf, 0x66, 0xc0, 0x93, 0x58, 0x8c, 0x35, 0xd7, 0x68, 0xfc, 0xa2, 0x95, 0xa4, 0xa9, 0xce }; #define ac_dsa_vect243_prime ac_dsa_vect241_prime #define ac_dsa_vect243_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect243_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect243_ptx[] = { /* Msg */ 0x49, 0xd5, 0xf2, 0x0a, 0xcf, 0x1e, 0x9d, 0x59, 0xa6, 0x56, 0xbd, 0x16, 0x3f, 0xe4, 0x6f, 0xc8, 0x68, 0x47, 0x6c, 0xcd, 0x92, 0x63, 0x77, 0xa4, 0x0e, 0xd3, 0xd7, 0x47, 0x6e, 0x9e, 0xb7, 0xa8, 0xa7, 0x0c, 0x4b, 0x88, 0xb1, 0x6e, 0x79, 0x91, 0x48, 0xd2, 0x5f, 0xa2, 0x3b, 0xd0, 0xc9, 0x16, 0x11, 0xb7, 0x6c, 0x96, 0x65, 0xf5, 0x72, 0x2f, 0x40, 0x4f, 0xd9, 0x0e, 0xfd, 0xb8, 0xad, 0x14, 0xb7, 0x59, 0xc3, 0x49, 0xff, 0x6c, 0x83, 0x06, 0x42, 0xd5, 0x10, 0x76, 0xcc, 0xbd, 0xc5, 0x7f, 0x15, 0x2f, 0xba, 0x41, 0xc6, 0xa7, 0xf3, 0xcd, 0x39, 0x05, 0xfa, 0x7c, 0x85, 0x72, 0x65, 0xff, 0xc7, 0x59, 0x6a, 0x64, 0xdc, 0x69, 0x49, 0x0a, 0x93, 0x2b, 0x95, 0xad, 0xbc, 0x79, 0xa3, 0xb4, 0xf2, 0x1b, 0x2c, 0x6f, 0xb5, 0xd5, 0x83, 0x5d, 0x8b, 0xca, 0xe5, 0xd4, 0x4d, 0x91, 0x2a, 0x0a }; static const uint8_t ac_dsa_vect243_priv_val[] = { /* X */ 0x4a, 0xbe, 0xf2, 0x4f, 0x71, 0x5c, 0xfb, 0x3b, 0xa6, 0xe3, 0x9c, 0x26, 0xb0, 0x7c, 0xa4, 0x6b, 0x70, 0x0a, 0xac, 0x69, 0xfb, 0x8d, 0xf3, 0xc0, 0xe0, 0x9b, 0xe0, 0x8d, 0xf9, 0x0e, 0x44, 0xe2 }; static const uint8_t ac_dsa_vect243_pub_val[] = { /* Y */ 0x8f, 0xf1, 0x30, 0x22, 0x08, 0x03, 0x16, 0xbe, 0xa4, 0x9b, 0x89, 0xa0, 0x6d, 0xd5, 0xa9, 0x71, 0xd8, 0x6e, 0x0c, 0x9a, 0x3a, 0xf4, 0x14, 0x25, 0x8a, 0x8f, 0x48, 0x50, 0x88, 0xb6, 0x6c, 0xc3, 0x8c, 0xde, 0xa0, 0x2c, 0xdd, 0x62, 0x09, 0x6c, 0x00, 0xeb, 0x0d, 0x1c, 0x2e, 0xe6, 0x62, 0xcf, 0xf1, 0x6f, 0x6d, 0x2d, 0x30, 0x44, 0x0b, 0x2a, 0xd9, 0xe8, 0x97, 0xb9, 0xeb, 0x93, 0x9b, 0x12, 0x99, 0xff, 0x87, 0x95, 0x57, 0xf1, 0x63, 0xf1, 0x7c, 0x8a, 0xc6, 0x0d, 0x0c, 0x6e, 0x99, 0x8b, 0x3a, 0x04, 0x4b, 0x43, 0xfb, 0xfa, 0xc7, 0xb0, 0xcc, 0x30, 0xa5, 0x79, 0xa6, 0xbd, 0xa1, 0xb4, 0xff, 0x59, 0x8a, 0x53, 0x1f, 0x9e, 0x37, 0xcc, 0x19, 0x01, 0xa7, 0xb0, 0x8e, 0x79, 0x4a, 0x74, 0x01, 0xd0, 0xf8, 0xca, 0x4b, 0xe5, 0x5b, 0xff, 0x7b, 0x17, 0x63, 0x21, 0x82, 0x85, 0x75, 0xa4, 0x77, 0x68, 0x6a, 0x98, 0xb4, 0xb1, 0x72, 0x66, 0xe1, 0x01, 0x60, 0x1f, 0x43, 0x6e, 0x55, 0x4b, 0x9e, 0x42, 0x88, 0x05, 0x79, 0x70, 0xfa, 0x34, 0x63, 0x34, 0x3e, 0x7e, 0x52, 0xa5, 0x8c, 0xa1, 0x45, 0xec, 0x9b, 0xef, 0xd7, 0xbe, 0x31, 0xea, 0x76, 0x6e, 0xd7, 0x4a, 0xc1, 0x78, 0xbc, 0xcd, 0xfe, 0xe9, 0xd2, 0x95, 0x65, 0xe7, 0x93, 0x5e, 0x8d, 0x70, 0xc3, 0xeb, 0x09, 0x1e, 0x3e, 0x3b, 0x3e, 0x6e, 0x77, 0x71, 0x69, 0x31, 0xed, 0x72, 0x9c, 0x49, 0xb9, 0x64, 0x43, 0x60, 0x60, 0x98, 0xbd, 0x08, 0x10, 0x98, 0x9e, 0x0e, 0x6f, 0x25, 0x3c, 0xf3, 0xec, 0x38, 0x29, 0x42, 0x31, 0xb7, 0x11, 0xb0, 0x9a, 0x94, 0x16, 0x09, 0xac, 0xc8, 0x97, 0x68, 0x19, 0x07, 0x65, 0x43, 0x92, 0x6e, 0xc4, 0xe0, 0x6f, 0x3e, 0x4d, 0x7f, 0x12, 0x3c, 0x2b, 0x87, 0x71, 0xe5, 0x45, 0x89, 0xe0, 0x45, 0x24, 0xe3, 0xb4, 0xf9, 0x50, 0xda, 0x56, 0x0a, 0x25, 0xd1, 0x21, 0x72, 0xd4, 0xeb, 0xda, 0xdc, 0x17, 0x19, 0x40, 0x0d, 0x91, 0xcf, 0x02, 0x64, 0x70, 0x87, 0x14, 0x47, 0x92, 0x00, 0xc5, 0x0e, 0xf0, 0x0e, 0xc0, 0xe6, 0x04, 0x90, 0x9a, 0x54, 0x6c, 0x95, 0xeb, 0x2f, 0xa5, 0x3c, 0x65, 0xee, 0x72, 0xad, 0x53, 0xf1, 0x49, 0xc9, 0x38, 0xdc, 0x21, 0x93, 0x49, 0x6d, 0xb0, 0x7a, 0xf3, 0xb3, 0x0a, 0x1f, 0x43, 0x97, 0x08, 0xaa, 0x11, 0x5c, 0x8d, 0xd4, 0x7c, 0x81, 0xc1, 0xbc, 0x68, 0xea, 0x3a, 0xbd, 0x90, 0x26, 0x11, 0x3c, 0x01, 0xeb, 0x05, 0x55, 0x8b, 0x8a, 0x2b, 0xe9, 0x09, 0x34, 0x76, 0xf0, 0x12, 0x47, 0xbf, 0xbe, 0xb3, 0xf2, 0x85, 0x8b, 0x13, 0xe6, 0x22, 0x8b, 0x98, 0x20, 0x5f, 0xa7, 0x10, 0xb6, 0xaf, 0x1c, 0x5f, 0x71, 0x48, 0x0d, 0xee, 0x40, 0x1d, 0x74, 0x72, 0xd7 }; /* K = 5472e89286e6ccbed316fe7564e3eae899ed7bfc55ca7fb6fbc392d191304bfa */ static const uint8_t ac_dsa_vect243_out[] = { /* R */ 0x19, 0xa7, 0x3b, 0x04, 0x9b, 0x16, 0x4d, 0xbf, 0x7f, 0xb2, 0x82, 0x6f, 0x42, 0x53, 0x61, 0x7c, 0xf1, 0xc5, 0xbb, 0x46, 0xff, 0xc5, 0x20, 0x4e, 0xfa, 0x00, 0x00, 0x2a, 0x79, 0xe2, 0x3c, 0x0b, /* S */ 0x7b, 0xe1, 0x37, 0xc1, 0x09, 0xe6, 0x8f, 0x33, 0x7b, 0x5a, 0x21, 0xcb, 0x59, 0x1a, 0x87, 0xaf, 0x1c, 0xb8, 0x68, 0x14, 0x19, 0xf8, 0x75, 0xff, 0x8f, 0x04, 0x1e, 0x82, 0x99, 0x91, 0xfe, 0x28 }; #define ac_dsa_vect244_prime ac_dsa_vect241_prime #define ac_dsa_vect244_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect244_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect244_ptx[] = { /* Msg */ 0x11, 0x90, 0x85, 0x3e, 0xfb, 0x7e, 0x04, 0xcd, 0x49, 0x47, 0xc1, 0xea, 0x5b, 0x1b, 0x5d, 0x9e, 0x0a, 0xc5, 0xe6, 0xdf, 0x1d, 0xd0, 0x50, 0x87, 0x73, 0x08, 0xf1, 0xb2, 0xc7, 0xe0, 0xa4, 0x91, 0x7e, 0x58, 0x81, 0x03, 0xd2, 0x8c, 0x0f, 0x6e, 0x8b, 0x72, 0xd9, 0x67, 0xaa, 0x06, 0xac, 0xa6, 0x8a, 0x98, 0x6d, 0x80, 0x77, 0x40, 0xf2, 0xdd, 0xdd, 0xe7, 0x28, 0x1e, 0x55, 0x0a, 0xf4, 0xf6, 0x37, 0xea, 0xdf, 0x61, 0xf8, 0x80, 0xc7, 0x35, 0x1b, 0x48, 0x66, 0x15, 0x09, 0x6f, 0x6b, 0xa5, 0x0d, 0x87, 0x54, 0xbb, 0xf9, 0xba, 0x1c, 0x49, 0xa3, 0x48, 0x58, 0x15, 0xef, 0x06, 0xb3, 0xcd, 0x76, 0x1b, 0x55, 0x86, 0xc3, 0xfc, 0x2b, 0x46, 0x4c, 0x6f, 0xe1, 0x2c, 0x16, 0x0a, 0xb0, 0xf6, 0xf4, 0x46, 0xfa, 0xbf, 0x74, 0x21, 0x24, 0x30, 0xce, 0xc1, 0x5e, 0x75, 0xa5, 0x7b, 0x10, 0x2e }; static const uint8_t ac_dsa_vect244_priv_val[] = { /* X */ 0x7b, 0x25, 0x10, 0xc7, 0x3e, 0xa6, 0x44, 0x7b, 0xc3, 0x19, 0xde, 0x79, 0xaf, 0xeb, 0xcf, 0x45, 0x48, 0x29, 0x17, 0x04, 0x2a, 0x3c, 0xa3, 0xc1, 0xcb, 0x1c, 0x97, 0xd1, 0xa1, 0x21, 0x6b, 0x2b }; static const uint8_t ac_dsa_vect244_pub_val[] = { /* Y */ 0x9b, 0xb8, 0x1c, 0x80, 0xd2, 0xb8, 0xa6, 0x01, 0xa0, 0x9e, 0x22, 0x47, 0x5d, 0x70, 0xd1, 0xdc, 0x55, 0x13, 0x40, 0x9f, 0xb4, 0x66, 0x8b, 0x17, 0x6c, 0x76, 0xb3, 0xaa, 0x1a, 0xf8, 0x63, 0x0a, 0xc7, 0x79, 0x0a, 0x44, 0x44, 0xab, 0x82, 0x37, 0x87, 0xf6, 0xf5, 0x69, 0xbd, 0xf0, 0x2b, 0x9e, 0xef, 0x5e, 0x7b, 0xb2, 0x1a, 0x88, 0xe3, 0xd3, 0x29, 0x68, 0x57, 0xe9, 0x19, 0x19, 0xf3, 0xc4, 0x73, 0xad, 0xd1, 0x6b, 0xcd, 0x76, 0x3f, 0x31, 0xa2, 0xf9, 0x84, 0x4d, 0x7c, 0xbd, 0x8d, 0x48, 0x06, 0x72, 0xa0, 0x36, 0xc4, 0xb1, 0x04, 0xbe, 0x66, 0xac, 0xd6, 0x6e, 0x6e, 0xf0, 0xe8, 0xa7, 0x44, 0xb3, 0xd8, 0x78, 0x09, 0x0d, 0x1d, 0xe9, 0xf1, 0x05, 0x56, 0x02, 0x47, 0xc6, 0x21, 0x53, 0xe1, 0x17, 0xef, 0xa5, 0x5e, 0xc6, 0x1c, 0x17, 0x7c, 0xd8, 0x2f, 0x8d, 0x72, 0xc5, 0x1d, 0x25, 0x3f, 0x4d, 0xc7, 0x33, 0x6f, 0x79, 0x82, 0x60, 0x25, 0x61, 0x9f, 0xb2, 0x10, 0x3f, 0x91, 0x14, 0x4f, 0x90, 0xf6, 0xa6, 0x89, 0xab, 0xcc, 0x51, 0xc6, 0x8a, 0xff, 0xd2, 0x84, 0x62, 0x57, 0x8b, 0x18, 0x3e, 0xec, 0x94, 0x20, 0x58, 0xf4, 0x8a, 0xbf, 0x54, 0x6f, 0x73, 0x89, 0x40, 0xa6, 0xc2, 0x6d, 0x30, 0x1c, 0x4b, 0x90, 0xca, 0x40, 0xea, 0x49, 0xc1, 0x17, 0xd6, 0x11, 0x47, 0xe8, 0x68, 0x39, 0x89, 0xba, 0xed, 0x7a, 0x22, 0x1c, 0x4f, 0x22, 0x09, 0x2f, 0x72, 0xb1, 0xed, 0x60, 0x4b, 0x6a, 0xa9, 0x4f, 0xf6, 0xa5, 0x74, 0xb4, 0x21, 0x5b, 0xd6, 0xf8, 0xe9, 0xd7, 0xb6, 0x38, 0xaf, 0xa4, 0x35, 0xa3, 0x34, 0x65, 0x89, 0xa6, 0x1b, 0x1d, 0x1d, 0xb2, 0x98, 0x9d, 0x7b, 0x45, 0xf3, 0x23, 0x45, 0x45, 0xe8, 0xa2, 0x2d, 0x60, 0x5a, 0xd6, 0xcb, 0x03, 0x6e, 0xf7, 0x91, 0xf6, 0x25, 0xd2, 0xc6, 0xa9, 0x95, 0xed, 0xa3, 0xe0, 0xca, 0xfc, 0xe7, 0x04, 0xa2, 0xbf, 0x15, 0xab, 0x5d, 0xfa, 0xd0, 0x16, 0x21, 0x04, 0x59, 0x2d, 0x23, 0xf5, 0x2a, 0xa0, 0xfe, 0xa1, 0xf4, 0x32, 0xf0, 0xa3, 0x08, 0xd1, 0x6a, 0x45, 0xe1, 0xf4, 0x1f, 0x82, 0x32, 0x62, 0x07, 0x4e, 0x91, 0x73, 0x75, 0x4c, 0xeb, 0xa7, 0x0c, 0xd8, 0xa3, 0x70, 0xdb, 0xab, 0x1a, 0x14, 0xf8, 0x41, 0x59, 0x11, 0x6d, 0xa7, 0x3d, 0x3a, 0x9c, 0xf8, 0x25, 0x94, 0xcb, 0x3a, 0xf9, 0x57, 0x97, 0xcf, 0x44, 0x42, 0x72, 0x85, 0x05, 0x89, 0xac, 0xc6, 0xbc, 0xa4, 0x71, 0xd0, 0x76, 0x33, 0x5d, 0x67, 0xc4, 0x61, 0xdb, 0x60, 0x23, 0x95, 0xbf, 0xb1, 0x7c, 0x39, 0xbf, 0xa2, 0x4d, 0xf1, 0x40, 0xc0, 0xac, 0x43, 0x88, 0xdb, 0x05, 0x34, 0xa5, 0x0d, 0xfd, 0x26, 0x13, 0x74, 0xf8, 0x1b, 0x31, 0x0f, 0x75, 0x1d, 0x16 }; /* K = 0fd7617bfdc671127a1d7465f683b98d8951a741f85d43cf5a5bef9232a16ae8 */ static const uint8_t ac_dsa_vect244_out[] = { /* R */ 0x58, 0x7d, 0x7f, 0x44, 0x54, 0xd5, 0x94, 0x18, 0xa7, 0x52, 0x75, 0x70, 0xf2, 0x8f, 0x1b, 0x07, 0x45, 0x1f, 0x3b, 0xaf, 0x28, 0xf5, 0xca, 0xbe, 0x03, 0x10, 0xc4, 0xd7, 0x9e, 0x42, 0x53, 0xa5, /* S */ 0x18, 0x83, 0x94, 0x04, 0xaa, 0xad, 0x59, 0xff, 0x24, 0xd6, 0xac, 0xce, 0xc3, 0xb7, 0xcc, 0x6a, 0xc7, 0x00, 0x3d, 0xd4, 0xad, 0xf9, 0x6b, 0x77, 0xba, 0xb0, 0x68, 0xae, 0x72, 0xf2, 0x5f, 0x61 }; #define ac_dsa_vect245_prime ac_dsa_vect241_prime #define ac_dsa_vect245_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect245_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect245_ptx[] = { /* Msg */ 0xb1, 0xcb, 0x43, 0x0c, 0x5a, 0x1d, 0x72, 0x78, 0x8c, 0x79, 0x5a, 0xb5, 0x67, 0xa8, 0x4c, 0x7f, 0x59, 0x77, 0x96, 0x59, 0x33, 0xa5, 0xbf, 0x23, 0x80, 0x58, 0xf2, 0xfc, 0x81, 0x88, 0x80, 0xd2, 0x5b, 0x4d, 0xde, 0xf9, 0x63, 0x54, 0x81, 0xfd, 0x9f, 0xdd, 0x45, 0x98, 0xae, 0xce, 0xc3, 0x76, 0x4f, 0xa7, 0x30, 0x93, 0xa2, 0x25, 0xd4, 0xe4, 0xeb, 0xcf, 0x01, 0xe4, 0xb7, 0x5b, 0xdc, 0x18, 0x41, 0xdc, 0x01, 0x65, 0x2c, 0x4d, 0x99, 0x16, 0xaf, 0xa2, 0x4b, 0x89, 0xc2, 0xd6, 0x85, 0x4b, 0x72, 0xea, 0xa7, 0xb1, 0xf3, 0x08, 0x9d, 0x1a, 0x91, 0x92, 0x10, 0x83, 0x1a, 0xc8, 0x0f, 0x99, 0x83, 0x57, 0x90, 0xce, 0x64, 0xab, 0xc3, 0x42, 0x70, 0xcd, 0x45, 0x51, 0xd3, 0x1b, 0x8f, 0x53, 0x48, 0xce, 0x8a, 0x70, 0xdf, 0x60, 0xb8, 0x8e, 0x08, 0x5a, 0x98, 0x4a, 0xca, 0xc6, 0x65, 0xa7 }; static const uint8_t ac_dsa_vect245_priv_val[] = { /* X */ 0x40, 0x3b, 0x21, 0x37, 0xad, 0xe3, 0x9c, 0x1e, 0x5b, 0x81, 0x7f, 0xfb, 0xd0, 0xbc, 0x34, 0x48, 0x02, 0x40, 0x89, 0xfc, 0x19, 0x25, 0x55, 0x0b, 0x5b, 0x86, 0x04, 0x03, 0xe7, 0xba, 0x65, 0xbc }; static const uint8_t ac_dsa_vect245_pub_val[] = { /* Y */ 0xa8, 0x1a, 0x54, 0xbe, 0x06, 0x85, 0xf3, 0x35, 0x05, 0xae, 0xd9, 0x59, 0x1f, 0x33, 0x3a, 0x74, 0xa8, 0x42, 0x99, 0x5d, 0xa5, 0x13, 0x5f, 0xa4, 0x8f, 0x50, 0x53, 0xfa, 0xc2, 0x9f, 0xff, 0x08, 0xaf, 0xd9, 0xb9, 0x01, 0xc3, 0xdf, 0x13, 0x47, 0x20, 0x4a, 0x3f, 0x13, 0x3a, 0x7d, 0xff, 0x6b, 0x1a, 0xdb, 0xab, 0x07, 0x75, 0x26, 0xb6, 0x38, 0xa6, 0x38, 0x37, 0xd7, 0x84, 0x43, 0x39, 0xd4, 0x8f, 0xe1, 0x07, 0xaf, 0x08, 0xed, 0x62, 0xe8, 0x7d, 0xe5, 0x47, 0xce, 0xd8, 0x4d, 0xf9, 0xa2, 0xcc, 0xc4, 0x58, 0x76, 0xb2, 0x9b, 0xc5, 0x36, 0x1c, 0xe8, 0xa9, 0xa2, 0x1b, 0x81, 0xd4, 0xf8, 0x5d, 0x3b, 0x67, 0x1c, 0x9b, 0x44, 0xb5, 0x48, 0x3f, 0x26, 0x10, 0xef, 0xa0, 0x17, 0x51, 0xd3, 0xa0, 0x7f, 0xd6, 0x94, 0xe4, 0x66, 0x53, 0xac, 0x47, 0xac, 0x64, 0xa9, 0x10, 0xb7, 0xfc, 0x42, 0x1f, 0x07, 0xe5, 0xde, 0x54, 0xe8, 0x98, 0x78, 0x99, 0x89, 0x09, 0x1e, 0x9e, 0xd5, 0x8b, 0x7c, 0x04, 0xe9, 0xe1, 0xdc, 0xed, 0x60, 0x47, 0x5d, 0xc6, 0x93, 0xa0, 0xeb, 0x40, 0x15, 0xed, 0x65, 0x81, 0x10, 0xb8, 0x2f, 0x8e, 0x72, 0x0d, 0xc7, 0xaf, 0xff, 0x69, 0xce, 0xa7, 0xb8, 0xe5, 0x6b, 0x8a, 0x97, 0x55, 0xbf, 0x1e, 0x29, 0x33, 0xd0, 0x83, 0x60, 0x83, 0x77, 0x50, 0x4c, 0xab, 0x52, 0xd3, 0x8c, 0xce, 0x1b, 0xa8, 0x2f, 0x84, 0xc2, 0x62, 0x65, 0xe6, 0x93, 0xf1, 0x8c, 0xf5, 0x2e, 0x93, 0x0d, 0xc0, 0xd8, 0xbc, 0x9d, 0x41, 0xf4, 0xd2, 0x8b, 0x32, 0xb7, 0x40, 0x5c, 0xb1, 0xfc, 0xe8, 0x8a, 0x55, 0xbe, 0x40, 0xdc, 0xa1, 0xb1, 0xa3, 0x51, 0xaa, 0x7d, 0x77, 0xfa, 0x6e, 0xf8, 0x4c, 0x77, 0x6f, 0xa3, 0x01, 0xdb, 0xa2, 0xe2, 0x36, 0x93, 0x3d, 0x89, 0xc8, 0xb9, 0x44, 0xf5, 0x34, 0x03, 0x41, 0x4d, 0xf0, 0xd4, 0x34, 0xdb, 0x72, 0xca, 0xa7, 0x49, 0xfb, 0xcd, 0x56, 0x6d, 0x76, 0xf4, 0xf6, 0xf0, 0xbc, 0x40, 0xe4, 0x2a, 0x29, 0xae, 0xbe, 0x62, 0x10, 0xe8, 0x9f, 0xa0, 0xca, 0x8b, 0x6a, 0xc0, 0x8a, 0x4c, 0xac, 0x65, 0xc5, 0x90, 0x50, 0x35, 0x33, 0xc3, 0xe4, 0xf1, 0xb3, 0xc5, 0xbd, 0xe8, 0x68, 0xe7, 0x9d, 0x9d, 0xa9, 0x18, 0xb7, 0x2d, 0x1b, 0x09, 0x8a, 0x72, 0x78, 0x76, 0x95, 0x46, 0xb7, 0x84, 0x50, 0xe0, 0x0e, 0x46, 0xdd, 0x40, 0x0e, 0xfe, 0x97, 0xc8, 0x84, 0xdb, 0x96, 0x12, 0xba, 0xaa, 0xee, 0xe2, 0x48, 0x6f, 0x64, 0xcd, 0x83, 0x02, 0xa4, 0xc3, 0x2d, 0x8f, 0xdb, 0x87, 0x3f, 0xe0, 0xaf, 0xff, 0xd7, 0xbb, 0x74, 0x81, 0x12, 0x20, 0xb0, 0x13, 0x39, 0xdf, 0xc5, 0xe5, 0x67, 0xc7, 0x66, 0xaf, 0x28, 0x05, 0xec, 0x1c, 0x30, 0x12, 0x63, 0x99 }; /* K = 2c1ca8b5ce7247dca6173fbaf854d00020ded6300311f53ebec8eccef9570d07 */ static const uint8_t ac_dsa_vect245_out[] = { /* R */ 0x60, 0xd2, 0x76, 0x3f, 0x01, 0x38, 0x07, 0x6e, 0x9e, 0x0e, 0x20, 0xf8, 0x3e, 0x4a, 0xa2, 0xe9, 0xaa, 0x35, 0x2c, 0x19, 0xca, 0x79, 0xe3, 0x72, 0x63, 0x03, 0xfe, 0x89, 0xb1, 0x2e, 0x27, 0xf2, /* S */ 0x07, 0xe0, 0x8d, 0x91, 0x6c, 0x8a, 0x10, 0xba, 0x26, 0x9d, 0xc4, 0x60, 0xee, 0x9d, 0x83, 0xf8, 0x6a, 0x7b, 0x3d, 0x98, 0x62, 0x1b, 0xb7, 0x32, 0x4a, 0x6a, 0x7e, 0x60, 0x72, 0x38, 0xba, 0xa3 }; #define ac_dsa_vect246_prime ac_dsa_vect241_prime #define ac_dsa_vect246_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect246_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect246_ptx[] = { /* Msg */ 0x3b, 0xb9, 0x43, 0x0e, 0xea, 0x69, 0x79, 0x12, 0x9b, 0xe7, 0x45, 0xd5, 0xae, 0x6b, 0xab, 0xd4, 0x96, 0x6e, 0x3a, 0xbf, 0x7d, 0x9e, 0xe5, 0x85, 0x6f, 0x2c, 0xaa, 0xe6, 0x01, 0x4c, 0xb3, 0x40, 0xee, 0xbd, 0x28, 0xbd, 0x9f, 0x39, 0x1e, 0xb4, 0x6b, 0x3a, 0x2b, 0x8a, 0x4c, 0xdc, 0x22, 0x4e, 0x55, 0x08, 0x53, 0x2c, 0xa0, 0x8c, 0xb1, 0x04, 0xaf, 0xf6, 0x77, 0x13, 0x3c, 0xf4, 0x39, 0x3a, 0x20, 0xfe, 0x44, 0x99, 0x96, 0x7d, 0xfa, 0x64, 0x51, 0x54, 0x55, 0x93, 0x0c, 0x65, 0x9d, 0x43, 0xbb, 0xee, 0x23, 0x40, 0xb1, 0x4a, 0x3b, 0x33, 0x42, 0xd4, 0xb9, 0xa4, 0x66, 0xb8, 0x89, 0xe8, 0x50, 0xdf, 0xf4, 0xb2, 0xa5, 0x1d, 0x38, 0x9c, 0xa3, 0x2f, 0xb6, 0xa5, 0xf4, 0x33, 0xed, 0x93, 0x03, 0x2b, 0xe4, 0xe5, 0x63, 0x69, 0x57, 0x97, 0xb8, 0xc1, 0xe1, 0xe0, 0x19, 0x18, 0x41, 0x72 }; static const uint8_t ac_dsa_vect246_priv_val[] = { /* X */ 0x0d, 0x3f, 0xc8, 0xfc, 0x4c, 0x59, 0x97, 0x1a, 0x96, 0x3e, 0x8e, 0x41, 0xd2, 0x6a, 0x86, 0x49, 0x9c, 0x96, 0x26, 0x15, 0xc6, 0x4a, 0xbe, 0x01, 0x1e, 0x88, 0xe5, 0x90, 0xbd, 0xdd, 0x3b, 0x0b }; static const uint8_t ac_dsa_vect246_pub_val[] = { /* Y */ 0x75, 0xb7, 0x65, 0xec, 0xa4, 0xeb, 0xde, 0x0b, 0x65, 0x64, 0xc3, 0x13, 0x7f, 0x16, 0xcd, 0xae, 0x00, 0xee, 0xad, 0xd2, 0xd0, 0xb2, 0xcb, 0x83, 0xcd, 0x15, 0x00, 0xcd, 0x05, 0xed, 0x0d, 0xd1, 0x67, 0x30, 0xc9, 0x50, 0x1c, 0x8a, 0x35, 0x3a, 0x64, 0x63, 0x4d, 0x06, 0x5f, 0x61, 0x37, 0xff, 0xcf, 0x95, 0x63, 0xd9, 0x61, 0x27, 0x90, 0x6f, 0xb1, 0x7d, 0x5a, 0x79, 0xad, 0x29, 0x10, 0x24, 0xa4, 0xa6, 0xfb, 0x7e, 0x7d, 0x08, 0x02, 0x19, 0xa6, 0x23, 0x1c, 0xa1, 0x58, 0xb6, 0x5f, 0x52, 0x02, 0x91, 0x2d, 0xdc, 0xb8, 0xdd, 0x1f, 0x01, 0x8c, 0x9b, 0x0e, 0x76, 0xb3, 0xa4, 0x76, 0x33, 0x6c, 0x50, 0x41, 0xbc, 0x50, 0x2f, 0x8a, 0xcb, 0x74, 0x8f, 0x13, 0x6c, 0x3d, 0x78, 0xcb, 0x2c, 0x42, 0x9c, 0x8f, 0x1a, 0xc1, 0x7b, 0x63, 0xdd, 0x7e, 0x9e, 0x57, 0xb6, 0x07, 0xf9, 0xde, 0xbe, 0x57, 0x14, 0x59, 0xdf, 0x36, 0x88, 0xcf, 0x4c, 0x11, 0xfa, 0x1e, 0x84, 0x53, 0x3a, 0xec, 0xda, 0x2d, 0xfe, 0xce, 0x05, 0xf4, 0xbd, 0xb2, 0x68, 0xcc, 0x7b, 0x0c, 0x8f, 0xe7, 0xaf, 0x5a, 0x63, 0x3a, 0x83, 0x51, 0x5a, 0xda, 0x95, 0xf3, 0x18, 0x24, 0xd6, 0xa3, 0xc7, 0x12, 0x2f, 0xdc, 0xd1, 0x2f, 0x54, 0x99, 0x2c, 0xbe, 0x64, 0xd1, 0xd6, 0xbd, 0xbd, 0x0a, 0xb5, 0xae, 0x4d, 0x19, 0xaa, 0x52, 0x60, 0x97, 0x50, 0xa1, 0xde, 0x18, 0x6a, 0xfa, 0xb5, 0xa1, 0x63, 0x98, 0xda, 0x47, 0x3d, 0x12, 0x88, 0x82, 0xb0, 0x65, 0xe8, 0x73, 0x80, 0x9f, 0xae, 0x0b, 0xbd, 0xc0, 0x1a, 0x9c, 0x73, 0xb5, 0xc6, 0xee, 0x65, 0x85, 0x7f, 0xa7, 0x94, 0xa1, 0x50, 0x58, 0xdd, 0xfb, 0x24, 0xa9, 0xa1, 0x7a, 0x04, 0x08, 0x64, 0x6f, 0x20, 0x09, 0xdd, 0xa6, 0x10, 0xc8, 0x29, 0x1a, 0xe1, 0x48, 0xa1, 0x8c, 0x17, 0x3f, 0x83, 0x6b, 0x19, 0x7c, 0x78, 0xed, 0xe5, 0x65, 0x48, 0x95, 0xb4, 0x5a, 0x34, 0x19, 0xe9, 0xc3, 0x17, 0x7f, 0x25, 0x03, 0xa9, 0x3c, 0xe5, 0x26, 0xbe, 0x14, 0xad, 0x91, 0x99, 0x39, 0xeb, 0xe3, 0xf2, 0xd0, 0x7f, 0x00, 0x6a, 0x0b, 0x02, 0x2d, 0x6a, 0x62, 0x3c, 0x60, 0x17, 0xf0, 0xc7, 0x66, 0x19, 0xf0, 0x78, 0x05, 0x31, 0xd5, 0x39, 0x0d, 0x42, 0x39, 0xb2, 0xf9, 0x00, 0xef, 0xb4, 0x4c, 0x95, 0x30, 0xc7, 0xd9, 0xb3, 0xe8, 0x4a, 0x70, 0xc9, 0x04, 0xb1, 0x79, 0xad, 0x0c, 0x4f, 0x90, 0x92, 0x50, 0xf7, 0xcc, 0xf8, 0x3c, 0x5f, 0x42, 0xd6, 0x43, 0x7c, 0xbc, 0x9f, 0x03, 0xfb, 0xae, 0x81, 0x31, 0xa1, 0x2d, 0x33, 0xe0, 0x17, 0x21, 0xe6, 0x50, 0xae, 0xe9, 0x1e, 0x1c, 0x89, 0x3f, 0x5e, 0x7e, 0x03, 0x9e, 0x0d, 0x58, 0x5c, 0xd7, 0xcd, 0x74, 0x95, 0xc4, 0x0d }; /* K = 32d9aa04b104b5d7b59a122b368fe0cf476e28098b898662a78efee764545ea5 */ static const uint8_t ac_dsa_vect246_out[] = { /* R */ 0x74, 0x16, 0x72, 0x9a, 0x1f, 0x60, 0x20, 0x8b, 0x7f, 0x83, 0x74, 0x80, 0xfb, 0xa8, 0x18, 0x40, 0xe4, 0x5b, 0x33, 0x8a, 0xb9, 0x84, 0x6e, 0x9b, 0xbb, 0x91, 0x68, 0x22, 0x9f, 0x64, 0xbc, 0xea, /* S */ 0x58, 0xeb, 0x90, 0x40, 0x76, 0xa3, 0xac, 0x69, 0x07, 0xd7, 0x50, 0xff, 0x6c, 0xdf, 0xaa, 0x46, 0x54, 0x35, 0xe9, 0x98, 0x2e, 0xcb, 0xdf, 0x72, 0x19, 0x7b, 0x09, 0xbb, 0x6d, 0xf1, 0x37, 0x3a }; #define ac_dsa_vect247_prime ac_dsa_vect241_prime #define ac_dsa_vect247_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect247_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect247_ptx[] = { /* Msg */ 0x55, 0xa6, 0x9f, 0xc1, 0x6f, 0x6b, 0x75, 0x3d, 0x0b, 0xf6, 0x5e, 0x84, 0x4d, 0x06, 0x78, 0x59, 0xf5, 0x1d, 0xd3, 0x29, 0x27, 0x99, 0x80, 0x19, 0x60, 0x63, 0xfb, 0x59, 0xf8, 0x9b, 0xd7, 0x78, 0xa9, 0x24, 0x4f, 0x93, 0x2c, 0x2a, 0xdb, 0x68, 0x11, 0x18, 0x36, 0x12, 0x10, 0x5d, 0x1c, 0x52, 0x7e, 0x83, 0x02, 0xdf, 0xee, 0x50, 0x42, 0xcf, 0xce, 0x5d, 0xbe, 0xab, 0x16, 0x5a, 0x39, 0x6f, 0x5a, 0x4c, 0x21, 0x33, 0x9b, 0xe1, 0x02, 0x1b, 0x7e, 0xce, 0xc6, 0x6f, 0x21, 0x77, 0xf9, 0x42, 0x43, 0xef, 0x62, 0x61, 0x60, 0x8c, 0x56, 0x91, 0x96, 0x79, 0xd4, 0x48, 0x63, 0xcf, 0x9d, 0x2a, 0xfc, 0x60, 0x10, 0xfc, 0x2b, 0xf8, 0x21, 0xb9, 0x31, 0xca, 0x39, 0x70, 0xd6, 0x9b, 0x1e, 0x62, 0x2a, 0x90, 0x83, 0x89, 0xdb, 0x50, 0x49, 0xd7, 0x18, 0xe3, 0x57, 0x07, 0x10, 0x63, 0xae, 0xf8 }; static const uint8_t ac_dsa_vect247_priv_val[] = { /* X */ 0x3d, 0xd2, 0x24, 0xf0, 0x0e, 0xe1, 0xd4, 0x64, 0x8c, 0x60, 0x0b, 0x10, 0xba, 0x05, 0xff, 0x36, 0xad, 0x2c, 0x06, 0xdd, 0xc5, 0xa9, 0xf0, 0x11, 0x2e, 0x03, 0x31, 0xae, 0x95, 0x8f, 0x36, 0xaf }; static const uint8_t ac_dsa_vect247_pub_val[] = { /* Y */ 0x61, 0x46, 0xa5, 0x1d, 0xeb, 0x79, 0x95, 0x7a, 0x83, 0xb2, 0xc7, 0xa3, 0x20, 0x4b, 0x5c, 0x34, 0xae, 0x4f, 0x8e, 0x0d, 0xb6, 0x0f, 0x0c, 0x07, 0xe7, 0x08, 0x03, 0xf2, 0x2b, 0xf9, 0x9a, 0x39, 0x64, 0x72, 0x63, 0xdb, 0x9e, 0x28, 0x5d, 0x72, 0xf6, 0x27, 0x0e, 0xe1, 0x0f, 0x18, 0x58, 0x4c, 0x39, 0x08, 0x1d, 0x25, 0x44, 0xd4, 0x05, 0x02, 0xc5, 0x0d, 0xf1, 0xe3, 0x5a, 0x45, 0x76, 0x00, 0xb5, 0x56, 0x9d, 0x61, 0xe8, 0x12, 0x6c, 0x05, 0x5f, 0x7b, 0x96, 0x45, 0x72, 0xe9, 0xf3, 0x28, 0x2e, 0x4d, 0x97, 0x45, 0x00, 0x69, 0x55, 0xc2, 0x42, 0x61, 0xc6, 0x8d, 0x7c, 0x0c, 0xb3, 0xf0, 0x8b, 0x0b, 0x0d, 0x8e, 0xaa, 0x97, 0x1e, 0x1a, 0x63, 0x1c, 0x68, 0xa3, 0xa9, 0x14, 0xd3, 0x5e, 0xfe, 0x89, 0xf7, 0x6b, 0x9c, 0x21, 0x16, 0xaf, 0xb7, 0xbd, 0x19, 0x89, 0xe2, 0x02, 0xe0, 0x92, 0xb5, 0xb5, 0x70, 0xea, 0xef, 0xcc, 0x93, 0x35, 0x42, 0xe6, 0x50, 0xd9, 0x2c, 0x03, 0x3b, 0x59, 0x73, 0x82, 0x1d, 0x6d, 0x77, 0xcf, 0xc2, 0x43, 0xf7, 0x44, 0xda, 0x80, 0xb5, 0x6e, 0xae, 0xa7, 0x65, 0x0b, 0xf5, 0x08, 0x02, 0x51, 0x62, 0x28, 0xad, 0x6d, 0x5b, 0x0d, 0x4e, 0x88, 0x9c, 0x57, 0x5e, 0x36, 0x78, 0xff, 0xdb, 0x1c, 0x28, 0x9e, 0x59, 0xd9, 0xff, 0x7f, 0x84, 0xa3, 0xd6, 0x3d, 0x39, 0xd6, 0x88, 0x8d, 0xbe, 0x21, 0x3e, 0x2c, 0x3b, 0x31, 0x14, 0x08, 0x5e, 0x00, 0x6a, 0xd7, 0x45, 0x05, 0x73, 0x9f, 0xce, 0x82, 0x6f, 0x96, 0x32, 0x84, 0xdc, 0x4e, 0x2b, 0x01, 0xec, 0x2f, 0x92, 0x33, 0xd3, 0x47, 0x0e, 0x82, 0xd8, 0x72, 0xed, 0x94, 0x4e, 0x62, 0x96, 0x1f, 0x64, 0x13, 0x4e, 0x80, 0x80, 0xda, 0xf2, 0xdf, 0x49, 0x4a, 0x76, 0x24, 0x0a, 0xc0, 0xcd, 0x22, 0xf9, 0xaf, 0xae, 0x7e, 0x80, 0xd3, 0xcf, 0x3e, 0xfb, 0xe0, 0x55, 0x14, 0x7f, 0x62, 0xff, 0x8c, 0x61, 0x92, 0xe3, 0x88, 0xb4, 0x9e, 0x47, 0xd9, 0xfe, 0xaf, 0x19, 0xec, 0xcd, 0x65, 0xdc, 0xa9, 0x99, 0x16, 0x38, 0xeb, 0xd7, 0xb0, 0x48, 0x07, 0x77, 0x07, 0xad, 0xab, 0x1c, 0xb2, 0xa4, 0x35, 0x8e, 0xef, 0xc4, 0xaa, 0xb8, 0x25, 0x1f, 0xb0, 0xf9, 0xd5, 0xf0, 0xb0, 0x9f, 0x29, 0x9c, 0x72, 0x0d, 0x3a, 0x8c, 0x00, 0xa5, 0xa4, 0xd8, 0x4f, 0xee, 0xc0, 0x40, 0x05, 0x70, 0x40, 0xb7, 0x09, 0xcc, 0x0e, 0xd1, 0x85, 0xa8, 0x32, 0x53, 0x7b, 0xc4, 0xb2, 0xdf, 0x0e, 0xc1, 0xf7, 0x71, 0x69, 0xac, 0x96, 0xe9, 0x12, 0x82, 0xde, 0x21, 0xf3, 0x42, 0xd5, 0x42, 0x9e, 0xc3, 0xd6, 0x6a, 0xd9, 0xd3, 0x36, 0xc4, 0x40, 0x94, 0x9a, 0x12, 0x11, 0x21, 0x7b, 0xf5, 0x4a, 0xad, 0x93, 0xbb, 0x4b, 0x0a, 0x43 }; /* K = 7969d08c0cafe4019b64ad3e6614be0aaabc2c2be61b3b3dcdd10d5f75fa24bb */ static const uint8_t ac_dsa_vect247_out[] = { /* R */ 0x13, 0x6f, 0x93, 0xdc, 0xc7, 0xd3, 0x3e, 0x55, 0x9b, 0x8d, 0xb0, 0xaf, 0x13, 0xe0, 0x0c, 0x71, 0x90, 0x92, 0x8b, 0xff, 0x50, 0x86, 0xee, 0xdf, 0xd1, 0x17, 0x06, 0xe6, 0xf2, 0x34, 0x9a, 0xd0, /* S */ 0x32, 0xb9, 0x5b, 0x9b, 0x14, 0x7c, 0x7d, 0x1a, 0xc2, 0xa2, 0xf0, 0x05, 0x7f, 0xc0, 0x53, 0x8a, 0x4b, 0x7c, 0x9c, 0xd4, 0x65, 0x2e, 0x67, 0x83, 0xe5, 0xd7, 0xe3, 0x53, 0x46, 0x55, 0x63, 0x1a }; #define ac_dsa_vect248_prime ac_dsa_vect241_prime #define ac_dsa_vect248_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect248_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect248_ptx[] = { /* Msg */ 0x15, 0x67, 0x89, 0x0c, 0x69, 0xe5, 0x78, 0xa2, 0x7d, 0x62, 0x08, 0x91, 0x3d, 0xfb, 0xc2, 0x0e, 0xdd, 0xc6, 0x1f, 0x5f, 0xee, 0xd4, 0x57, 0x40, 0x06, 0x93, 0xdd, 0x17, 0x0f, 0x80, 0x67, 0xbf, 0x29, 0x0b, 0x11, 0x15, 0x07, 0x80, 0x68, 0x4c, 0x20, 0xd5, 0xcf, 0xd2, 0xbf, 0x1d, 0x53, 0x6d, 0xd3, 0xb7, 0x00, 0x25, 0x88, 0x3f, 0xb4, 0x17, 0x03, 0x43, 0x6f, 0xd0, 0x9c, 0x0a, 0x14, 0x11, 0x25, 0x78, 0x4f, 0x90, 0x91, 0x15, 0x13, 0x03, 0xef, 0x80, 0xcd, 0x34, 0x5e, 0x5a, 0x7d, 0x28, 0x54, 0x33, 0x5c, 0x29, 0x84, 0x53, 0x8c, 0x5c, 0xd7, 0x39, 0xb0, 0x07, 0x24, 0x8c, 0xd9, 0x9f, 0x1d, 0xbc, 0xd3, 0x14, 0x8c, 0xb0, 0xff, 0x0d, 0xb6, 0x33, 0xf8, 0xca, 0xfc, 0x7a, 0x0b, 0x99, 0xc6, 0x1e, 0x78, 0x4d, 0x03, 0x03, 0xa5, 0x12, 0x03, 0x07, 0xd3, 0xfb, 0x3c, 0x4c, 0x21, 0x9e }; static const uint8_t ac_dsa_vect248_priv_val[] = { /* X */ 0x3a, 0xc3, 0x74, 0xb2, 0xa4, 0x94, 0x0d, 0x92, 0xab, 0x35, 0xeb, 0xb8, 0xe5, 0x96, 0x77, 0xfb, 0xf9, 0x59, 0x80, 0xfe, 0x63, 0x2f, 0xfb, 0xb1, 0xdb, 0x4f, 0x38, 0x5e, 0xe4, 0xe1, 0x3a, 0x15 }; static const uint8_t ac_dsa_vect248_pub_val[] = { /* Y */ 0x5c, 0x53, 0xd1, 0x3a, 0x1b, 0xee, 0x17, 0xa2, 0x87, 0x20, 0xb7, 0x08, 0x96, 0x46, 0xd0, 0x7a, 0x3f, 0xd5, 0x8b, 0x9b, 0x2b, 0x23, 0xec, 0x94, 0xaf, 0x31, 0x44, 0x83, 0x07, 0x46, 0x17, 0x7b, 0x0d, 0x20, 0x73, 0x70, 0x7b, 0x6b, 0x84, 0x90, 0x1f, 0xfa, 0xa7, 0xa4, 0x16, 0x5c, 0xef, 0xf2, 0x42, 0x56, 0x40, 0xfc, 0xfe, 0x5d, 0x17, 0x65, 0x0a, 0x44, 0xa1, 0x68, 0xeb, 0xd7, 0x69, 0xc8, 0x33, 0x44, 0x5f, 0x1b, 0x2d, 0x26, 0x43, 0x4c, 0x22, 0x8c, 0x1e, 0x2e, 0xdf, 0x17, 0x04, 0xd7, 0x11, 0xa8, 0x62, 0x57, 0xbe, 0x25, 0x23, 0x5a, 0x7c, 0xea, 0x1e, 0x5c, 0xba, 0xc4, 0x12, 0x23, 0x5b, 0x75, 0x96, 0xd1, 0xdf, 0xa0, 0x39, 0x80, 0x81, 0xa4, 0xf1, 0x81, 0x51, 0xcb, 0xb5, 0x1d, 0xc6, 0x2c, 0x22, 0x6a, 0x2a, 0xbc, 0xaf, 0x33, 0x35, 0xe8, 0x6a, 0xb5, 0x46, 0x08, 0x04, 0x0e, 0xe8, 0x14, 0xe4, 0x43, 0xb6, 0x43, 0x98, 0x21, 0x3b, 0xa6, 0x0d, 0x7b, 0x5a, 0x3c, 0x8e, 0xa7, 0x8e, 0xc6, 0xb9, 0x89, 0x34, 0xc8, 0x9a, 0xca, 0x05, 0xb9, 0x7d, 0xf5, 0xf6, 0x5b, 0xc5, 0x74, 0xa3, 0x0a, 0xcd, 0xdd, 0x09, 0xf7, 0x3c, 0xec, 0x14, 0x52, 0x8b, 0xe4, 0x9a, 0x2f, 0xbe, 0xca, 0x70, 0x29, 0x1b, 0x1b, 0x29, 0xf7, 0x04, 0x2c, 0x59, 0x49, 0x94, 0xda, 0x12, 0x8f, 0xda, 0x22, 0xb3, 0xed, 0x3a, 0x93, 0x5a, 0x1a, 0x00, 0x57, 0x5f, 0xf1, 0xff, 0xd1, 0x93, 0xc4, 0xca, 0xc5, 0x3a, 0x2a, 0x2d, 0x4b, 0x0c, 0x51, 0x02, 0x28, 0xa7, 0x6a, 0x74, 0x33, 0x36, 0x07, 0xd1, 0x5b, 0x56, 0x86, 0x14, 0x42, 0x71, 0x44, 0xb4, 0x17, 0x4d, 0xa3, 0x58, 0xe3, 0x83, 0xf6, 0x58, 0xc6, 0x0b, 0x45, 0x71, 0x00, 0x36, 0xf5, 0x4f, 0x93, 0xf1, 0x7b, 0xc8, 0x08, 0xb3, 0x02, 0x67, 0x4e, 0x83, 0x8c, 0x1d, 0xfd, 0x7f, 0x81, 0x6f, 0x7e, 0xa4, 0x4b, 0x0d, 0x97, 0x38, 0x6e, 0x4e, 0x16, 0x34, 0xc9, 0x53, 0x95, 0x68, 0xdd, 0x6a, 0xe1, 0xc2, 0x8f, 0x25, 0xb2, 0x7a, 0xa9, 0x44, 0x99, 0xae, 0x38, 0x9a, 0x09, 0x26, 0xc8, 0xfa, 0x62, 0x95, 0x6c, 0x6e, 0x24, 0xdc, 0xed, 0x0a, 0xfb, 0x04, 0x91, 0xdd, 0x9f, 0xac, 0x05, 0x16, 0xd2, 0x7f, 0xd4, 0xd2, 0xdd, 0x01, 0x50, 0xee, 0x6b, 0x4c, 0xff, 0x7b, 0xfd, 0x57, 0x50, 0x43, 0xd7, 0x01, 0xda, 0xad, 0x0f, 0x1b, 0x94, 0x2a, 0x0e, 0x4c, 0x61, 0x95, 0x6b, 0x32, 0xa6, 0x8c, 0x90, 0x78, 0xf6, 0x07, 0x7f, 0xa9, 0x94, 0x51, 0x98, 0xd4, 0x47, 0xa5, 0xbf, 0x3c, 0x47, 0xb7, 0x28, 0x84, 0x27, 0xed, 0xc6, 0xf9, 0x96, 0x55, 0xae, 0xad, 0xf8, 0xde, 0x18, 0x51, 0x57, 0x14, 0xc6, 0xb9, 0xc0, 0xd4, 0xce, 0x5a, 0xb0, 0x92, 0xc2 }; /* K = 7ca690c92c8d4a3ac1d5255a2e5a12922093b8b2ee95906eab29b67f84fd21cc */ static const uint8_t ac_dsa_vect248_out[] = { /* R */ 0x49, 0x47, 0xd3, 0x6e, 0x74, 0x26, 0xf1, 0x44, 0x1b, 0xe5, 0xa7, 0x5d, 0xc9, 0xcd, 0x84, 0x54, 0x50, 0xc6, 0x11, 0x04, 0xf1, 0x9e, 0xd4, 0x0c, 0xe3, 0x3e, 0x25, 0x2f, 0xa2, 0xc2, 0x62, 0x68, /* S */ 0x35, 0x68, 0x79, 0xde, 0xb1, 0xda, 0xef, 0x01, 0xda, 0x04, 0x75, 0x0d, 0x58, 0xe5, 0x98, 0xdb, 0x47, 0xaa, 0xaf, 0xf5, 0x0b, 0x1c, 0xf4, 0x2d, 0x87, 0x33, 0x4a, 0x61, 0x57, 0x80, 0xff, 0x8c }; #define ac_dsa_vect249_prime ac_dsa_vect241_prime #define ac_dsa_vect249_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect249_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect249_ptx[] = { /* Msg */ 0x4f, 0x7d, 0x89, 0x4d, 0xfb, 0x7d, 0x82, 0x04, 0x0a, 0x9f, 0xed, 0x6c, 0x26, 0xa7, 0xd2, 0x7a, 0x9a, 0x15, 0x11, 0x38, 0x8c, 0x11, 0x3c, 0x64, 0x71, 0x5a, 0x06, 0xdc, 0x46, 0xfc, 0xf4, 0xf9, 0x04, 0x07, 0x0a, 0x6e, 0xd9, 0x5b, 0xdd, 0x8d, 0xc1, 0x73, 0x0a, 0x27, 0x64, 0x5d, 0x37, 0xeb, 0x3b, 0x02, 0x84, 0x7c, 0xb1, 0xc6, 0x31, 0xec, 0x0c, 0x67, 0xb2, 0xee, 0x07, 0xb8, 0x80, 0x5b, 0x34, 0xdd, 0x9b, 0x84, 0xe6, 0xab, 0x3f, 0x9a, 0xfb, 0x92, 0x46, 0x99, 0x4e, 0xa5, 0x79, 0x56, 0x7a, 0x8f, 0x4a, 0xf7, 0xfe, 0xb8, 0x68, 0x98, 0xcc, 0x9c, 0xb5, 0x34, 0xc3, 0x87, 0x99, 0x3c, 0x6e, 0xc1, 0x65, 0x84, 0xac, 0x85, 0xbe, 0xd3, 0x6b, 0xbc, 0x2c, 0x30, 0x57, 0x70, 0xf2, 0x11, 0x63, 0x68, 0x61, 0x67, 0xdd, 0x53, 0xfe, 0x56, 0x23, 0x62, 0xff, 0x54, 0x9d, 0x90, 0x35, 0x39 }; static const uint8_t ac_dsa_vect249_priv_val[] = { /* X */ 0x2c, 0x14, 0xcd, 0x97, 0x5b, 0xc1, 0x63, 0xf9, 0x74, 0x0d, 0xcb, 0x4a, 0x5b, 0xa9, 0xd8, 0x52, 0x9c, 0x5a, 0x07, 0x50, 0x16, 0xe0, 0x24, 0x00, 0xdb, 0xfe, 0xde, 0x8d, 0xd4, 0xf0, 0xd2, 0x45 }; static const uint8_t ac_dsa_vect249_pub_val[] = { /* Y */ 0x00, 0x96, 0x74, 0x78, 0x35, 0x8d, 0x7c, 0x16, 0x96, 0xce, 0xb9, 0x2b, 0xe8, 0x50, 0xf5, 0x53, 0x8a, 0xd8, 0x54, 0x3e, 0x15, 0x1a, 0xad, 0xd8, 0x4c, 0xab, 0xa1, 0xb7, 0x2f, 0x36, 0x36, 0xa2, 0x09, 0x2a, 0x86, 0xb6, 0x46, 0x28, 0x73, 0x90, 0x3d, 0x5b, 0xf1, 0x7f, 0x61, 0x2b, 0x45, 0xb5, 0x13, 0x3e, 0xac, 0x16, 0x30, 0xbf, 0x07, 0xc0, 0x37, 0x14, 0x23, 0xd2, 0xe5, 0xd7, 0x14, 0x7c, 0xea, 0xcc, 0x9b, 0xaa, 0x8c, 0xb3, 0xb0, 0x4c, 0xbc, 0x3c, 0xbd, 0xa4, 0x29, 0xab, 0x40, 0xd7, 0xe5, 0x92, 0x73, 0x0d, 0xc4, 0x77, 0xb0, 0xa9, 0x5f, 0x1f, 0xb5, 0xed, 0x5d, 0x91, 0xe1, 0x4b, 0x9d, 0x5a, 0x1a, 0xc8, 0xd4, 0x03, 0xa5, 0x5a, 0x65, 0x8d, 0x1c, 0x38, 0x3b, 0xb5, 0x98, 0x05, 0x3b, 0xe2, 0x38, 0xcd, 0x82, 0x38, 0x69, 0x68, 0xae, 0xdb, 0x81, 0x15, 0x86, 0xfa, 0x2a, 0x14, 0x11, 0x93, 0x24, 0x89, 0x6f, 0x21, 0x11, 0xb9, 0xbc, 0x7c, 0xff, 0x66, 0x6d, 0x37, 0xaf, 0xfe, 0x76, 0x04, 0x1d, 0x98, 0xf3, 0x62, 0xda, 0xa0, 0x9f, 0xf6, 0x5e, 0x82, 0xe8, 0x65, 0xeb, 0x29, 0xc5, 0xd4, 0x71, 0x0c, 0xa7, 0x80, 0x08, 0x86, 0x88, 0x7d, 0x38, 0x3d, 0xa0, 0xcb, 0x59, 0x9b, 0x22, 0x5f, 0xdd, 0x21, 0x0a, 0x3d, 0x70, 0x92, 0x9d, 0x35, 0xfb, 0x9c, 0xa8, 0x07, 0xe5, 0x6c, 0x91, 0xc0, 0x85, 0x12, 0x52, 0xb9, 0x5c, 0x07, 0xb6, 0xb1, 0x20, 0xb3, 0xb6, 0x50, 0x41, 0x8e, 0x0f, 0x54, 0xf4, 0x57, 0x36, 0xf8, 0x20, 0x18, 0xd0, 0x92, 0x94, 0x46, 0x2d, 0xde, 0x6e, 0xea, 0xfc, 0xb1, 0x5a, 0x2a, 0x72, 0x85, 0x77, 0xfa, 0xf3, 0xef, 0x3e, 0xb1, 0x3d, 0xb0, 0x44, 0x96, 0x5e, 0xa3, 0x89, 0x2f, 0x7e, 0xb0, 0x88, 0x4e, 0x47, 0x76, 0x60, 0x89, 0xd2, 0xa4, 0x3a, 0xbc, 0x62, 0xa3, 0xc3, 0x75, 0x83, 0x1c, 0x20, 0x84, 0x8d, 0xfd, 0xe8, 0xf8, 0x3c, 0x24, 0x9a, 0x8e, 0x27, 0xf2, 0x89, 0x7c, 0xaf, 0xcf, 0x5a, 0x06, 0xb7, 0xc3, 0x59, 0x1e, 0x09, 0xb4, 0x2f, 0x82, 0x84, 0x9d, 0x49, 0x86, 0x64, 0xf4, 0x85, 0xde, 0x26, 0xc7, 0x88, 0xe5, 0x59, 0xad, 0x5b, 0x15, 0xf9, 0x99, 0xdb, 0x92, 0x7f, 0x81, 0xf5, 0x4b, 0x96, 0xe9, 0x97, 0xb9, 0x09, 0x6b, 0x2a, 0x7e, 0x3e, 0x75, 0x6f, 0x5a, 0x9a, 0xab, 0x54, 0xc1, 0x60, 0xcf, 0xc2, 0xe6, 0x44, 0x92, 0x17, 0x94, 0x87, 0xc9, 0x8d, 0x0a, 0xa3, 0x83, 0x08, 0xd6, 0x74, 0x28, 0xf3, 0xa1, 0x13, 0x22, 0x8b, 0xc6, 0xdc, 0xdf, 0x7a, 0xb9, 0x3c, 0xbb, 0x1d, 0xa2, 0x25, 0xc7, 0x2c, 0x63, 0x6f, 0x49, 0xd2, 0x74, 0x42, 0xcf, 0x3c, 0xf2, 0xf9, 0xc4, 0x9b, 0x90, 0xac, 0x8b, 0xaf, 0xe7, 0x40, 0xdb, 0xbf, 0xd5 }; /* K = 141936264e075533a96952808935238d715e7cbd840c016ee7a9f508608e4808 */ static const uint8_t ac_dsa_vect249_out[] = { /* R */ 0x09, 0x40, 0x72, 0x48, 0x55, 0xa0, 0x67, 0x1d, 0x60, 0x14, 0x7d, 0xc6, 0x1f, 0xd2, 0x83, 0x19, 0x01, 0x34, 0xa6, 0x8c, 0x17, 0x81, 0x14, 0xd5, 0x9a, 0xb5, 0x8d, 0xa7, 0x3a, 0x1c, 0x81, 0x82, /* S */ 0x43, 0xf1, 0x94, 0xb9, 0x70, 0x78, 0xdc, 0x9b, 0x84, 0xc8, 0xe8, 0xe8, 0x67, 0xa7, 0x4b, 0xaf, 0xdc, 0x22, 0x11, 0x70, 0x6a, 0xe1, 0x10, 0xb5, 0xae, 0xc0, 0xb9, 0x9e, 0xde, 0x1f, 0xfe, 0xd8 }; #define ac_dsa_vect250_prime ac_dsa_vect241_prime #define ac_dsa_vect250_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect250_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect250_ptx[] = { /* Msg */ 0x9b, 0x62, 0xa7, 0x4b, 0xc4, 0x9e, 0xf4, 0xff, 0x5c, 0x62, 0x16, 0x5e, 0x7d, 0x25, 0x52, 0x1f, 0x13, 0x5c, 0x83, 0x6b, 0xc4, 0xef, 0x02, 0x3f, 0xb4, 0xbb, 0x1d, 0x6b, 0x42, 0xc6, 0x29, 0x10, 0x71, 0xea, 0xe0, 0xb4, 0x65, 0xc5, 0x92, 0x31, 0xcb, 0x29, 0x7c, 0xac, 0x6d, 0x14, 0x58, 0x75, 0xfd, 0x84, 0xf5, 0x72, 0x9f, 0x79, 0xf9, 0x22, 0x18, 0x52, 0x2b, 0x9e, 0x55, 0xcb, 0x70, 0xd4, 0x71, 0x03, 0x0d, 0x36, 0x29, 0x1a, 0x24, 0x92, 0x5a, 0xb7, 0x31, 0xa2, 0xd4, 0x45, 0x8c, 0xff, 0x67, 0x70, 0x79, 0xd2, 0x07, 0xce, 0x86, 0x5b, 0x3d, 0x55, 0x26, 0x00, 0x92, 0x38, 0x86, 0x1d, 0x64, 0x50, 0x6a, 0x92, 0xb7, 0x6b, 0xaf, 0xf5, 0x9b, 0x37, 0xb8, 0x63, 0x08, 0x75, 0x58, 0xd5, 0x96, 0x5d, 0x76, 0x68, 0x5f, 0x0f, 0xbd, 0x1f, 0xab, 0x1b, 0x1f, 0x95, 0x61, 0xf8, 0xf6, 0x9c }; static const uint8_t ac_dsa_vect250_priv_val[] = { /* X */ 0x70, 0xe1, 0x2e, 0x51, 0xa2, 0x54, 0x83, 0x1b, 0xde, 0xc0, 0x81, 0xa8, 0x88, 0x2e, 0x5a, 0x24, 0xd7, 0x8b, 0x48, 0xb6, 0xdd, 0x16, 0x37, 0x27, 0xb9, 0x3f, 0x80, 0x37, 0x34, 0xe0, 0x6a, 0x3e }; static const uint8_t ac_dsa_vect250_pub_val[] = { /* Y */ 0x75, 0xd7, 0xd9, 0xa5, 0xdb, 0xdd, 0x47, 0xce, 0xcd, 0x12, 0xf6, 0x9a, 0xb2, 0x12, 0xdf, 0xe0, 0x8a, 0x96, 0x56, 0xe2, 0xbc, 0xa9, 0x2c, 0x81, 0xdb, 0x2d, 0x26, 0x8a, 0x29, 0x3a, 0x32, 0x5e, 0x51, 0x1c, 0xd5, 0xaa, 0x1b, 0xa5, 0x9d, 0xee, 0xf2, 0xab, 0x63, 0x11, 0x66, 0x5d, 0xda, 0x58, 0x23, 0x0d, 0x48, 0xf1, 0x41, 0x63, 0x71, 0xde, 0x1a, 0x83, 0x64, 0xb3, 0x8f, 0x5a, 0xd5, 0x99, 0xc4, 0x72, 0xd3, 0x63, 0xa1, 0x8a, 0x2c, 0x13, 0xd5, 0x72, 0xcf, 0x84, 0x9b, 0xe2, 0xfe, 0xf9, 0xa1, 0x66, 0xe8, 0x38, 0xaa, 0x58, 0xb7, 0x21, 0xec, 0xfc, 0x4b, 0x36, 0x1f, 0xda, 0xb1, 0xd0, 0x87, 0x6b, 0x78, 0xe2, 0xe8, 0xf2, 0x3e, 0xf1, 0xc8, 0x2c, 0xc0, 0xe1, 0x70, 0x0f, 0xa0, 0x15, 0xa4, 0x00, 0x7b, 0x1d, 0x7b, 0x53, 0x5c, 0x82, 0xd2, 0x3c, 0x12, 0x9d, 0x1d, 0x1c, 0x9c, 0x4a, 0xfe, 0x87, 0x5a, 0x06, 0xc0, 0x5f, 0x71, 0xf0, 0x78, 0xcb, 0x8d, 0x90, 0x60, 0xf4, 0xd9, 0x36, 0x67, 0x1f, 0xae, 0xe2, 0x17, 0xd4, 0x04, 0x55, 0x25, 0xd5, 0x70, 0xb0, 0xc8, 0xca, 0x0c, 0x4e, 0x8b, 0x55, 0xdf, 0xe9, 0xb7, 0x80, 0xba, 0x69, 0xc9, 0xd8, 0xcd, 0xa1, 0x0c, 0x50, 0xfd, 0x61, 0xc4, 0xe7, 0x21, 0x4b, 0x94, 0x3c, 0x1c, 0x29, 0x79, 0x7b, 0x09, 0x9f, 0x57, 0xa4, 0xc6, 0x48, 0x59, 0x7c, 0xed, 0xd9, 0xd9, 0x09, 0xbc, 0x58, 0x4a, 0x9b, 0x75, 0x4b, 0x20, 0x95, 0x15, 0xdb, 0xfa, 0x0f, 0xec, 0xce, 0x2a, 0xd0, 0x5c, 0x84, 0x8e, 0x99, 0xdc, 0xa2, 0x1a, 0x6d, 0x0d, 0x5f, 0x2d, 0xac, 0x23, 0x61, 0xe4, 0xc0, 0xea, 0xf9, 0x6d, 0xf1, 0x99, 0xad, 0x28, 0x88, 0xd6, 0x71, 0x97, 0x4e, 0xf0, 0x5d, 0x65, 0xc9, 0x27, 0x88, 0x43, 0x4a, 0xb4, 0x2f, 0x1f, 0x1f, 0x79, 0xed, 0xc4, 0x9e, 0xc1, 0xfa, 0x92, 0x13, 0x95, 0xbd, 0x0f, 0xeb, 0x6a, 0x9e, 0x6a, 0x06, 0x22, 0xe8, 0x25, 0x5b, 0x0e, 0xf6, 0x93, 0x7b, 0x89, 0xd0, 0xcc, 0xcd, 0x58, 0x52, 0x87, 0x2d, 0x2b, 0x0a, 0xb5, 0xd7, 0x9c, 0x2f, 0x19, 0x8b, 0xff, 0x6b, 0x8a, 0xa3, 0x8a, 0xce, 0xe2, 0x1d, 0x6c, 0x3a, 0xdd, 0x55, 0x62, 0xd8, 0x4d, 0x96, 0x87, 0x58, 0xd9, 0x3e, 0x8c, 0x1d, 0x61, 0x1f, 0x7d, 0x61, 0x82, 0xb6, 0x2e, 0x44, 0xf5, 0x7d, 0xf3, 0x42, 0x89, 0x9b, 0xb5, 0x64, 0xa7, 0x94, 0xd1, 0x39, 0x15, 0x88, 0x21, 0x43, 0xd9, 0xdf, 0x45, 0xf8, 0xf2, 0x1c, 0xc0, 0x30, 0xaf, 0x33, 0x97, 0xe9, 0xe9, 0x49, 0x68, 0x3d, 0xdd, 0x8d, 0x8d, 0xa9, 0x90, 0x9c, 0xc1, 0x13, 0x96, 0x19, 0xe4, 0xb7, 0xb2, 0x52, 0xaa, 0xdd, 0x02, 0xc6, 0x6a, 0x5e, 0x20, 0x10, 0x5a, 0xdf, 0x26, 0xf2, 0xf0, 0x21 }; /* K = 5de7fe70b5c60ec0ba66ade4fb6b0c925d1d56d26d6f57c5d12d07b5f6f800ed */ static const uint8_t ac_dsa_vect250_out[] = { /* R */ 0x01, 0xe3, 0xde, 0x39, 0x8b, 0x01, 0x8a, 0x69, 0x47, 0x80, 0xdd, 0xc6, 0xca, 0x12, 0xb7, 0x8d, 0xc5, 0x5e, 0x7a, 0xd9, 0xfd, 0xdd, 0xb5, 0xa3, 0xf5, 0xb2, 0xca, 0xd0, 0x10, 0x32, 0x53, 0xdd, /* S */ 0x03, 0xc9, 0x82, 0x80, 0xab, 0xe3, 0x05, 0x0a, 0x67, 0xf8, 0x8e, 0xf2, 0x9f, 0xb2, 0x14, 0xa8, 0x01, 0x24, 0xf4, 0x73, 0x21, 0xc6, 0x2e, 0x41, 0xe3, 0x90, 0x5b, 0x85, 0x32, 0xf4, 0x93, 0x6c }; #define ac_dsa_vect251_prime ac_dsa_vect241_prime #define ac_dsa_vect251_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect251_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect251_ptx[] = { /* Msg */ 0x6c, 0x66, 0x05, 0x1e, 0x04, 0xc2, 0xe6, 0xaa, 0xa4, 0x3d, 0xe9, 0xaa, 0x42, 0xcd, 0x9f, 0x61, 0xe8, 0x32, 0x9c, 0x12, 0x4e, 0xd3, 0x03, 0x1b, 0x67, 0x45, 0x2d, 0xb4, 0xc4, 0x35, 0xdb, 0x29, 0x1d, 0x75, 0x6b, 0xa6, 0xef, 0x90, 0xab, 0x06, 0x30, 0x7c, 0xb8, 0xd7, 0x0f, 0x34, 0x96, 0x79, 0x2e, 0x63, 0x3b, 0xf5, 0xac, 0x98, 0x5c, 0x37, 0xc4, 0x3b, 0xdb, 0x4e, 0x45, 0x5c, 0x7f, 0x76, 0x1a, 0x5e, 0xe4, 0x50, 0x56, 0x7f, 0x85, 0xcc, 0x97, 0x7e, 0x96, 0x8e, 0x7f, 0xa4, 0x2a, 0x42, 0x8c, 0x1a, 0x7e, 0x91, 0x5c, 0x82, 0x87, 0x48, 0x65, 0x63, 0x1d, 0x80, 0x78, 0x89, 0x93, 0x77, 0x25, 0x59, 0x47, 0xc3, 0x44, 0x61, 0x82, 0x97, 0xb8, 0x3c, 0x96, 0x11, 0x4d, 0x11, 0xd7, 0x4d, 0x8c, 0xd5, 0x79, 0xb5, 0x53, 0x66, 0x7c, 0xac, 0x1d, 0x97, 0xae, 0xa4, 0xd1, 0x68, 0x49, 0x87 }; static const uint8_t ac_dsa_vect251_priv_val[] = { /* X */ 0x11, 0xd2, 0xf1, 0x02, 0x93, 0xc3, 0x88, 0x4b, 0x1e, 0x28, 0xa6, 0x00, 0xdd, 0x71, 0xb2, 0xed, 0x37, 0xbe, 0xa1, 0x33, 0x25, 0x5a, 0x0f, 0x97, 0xe6, 0x41, 0xf9, 0x53, 0x0b, 0xb4, 0x69, 0x3c }; static const uint8_t ac_dsa_vect251_pub_val[] = { /* Y */ 0xed, 0x2e, 0x10, 0xa4, 0x43, 0x16, 0xd6, 0x77, 0x46, 0x7d, 0x79, 0x94, 0x7b, 0xec, 0x9e, 0x40, 0x5d, 0x30, 0xf3, 0x2d, 0x86, 0x0a, 0x1c, 0xe4, 0x6b, 0x36, 0x68, 0x45, 0xdf, 0x9a, 0xd2, 0x22, 0xb0, 0xf9, 0x92, 0xf5, 0x84, 0x45, 0x71, 0xb1, 0x96, 0xa3, 0x10, 0xd5, 0x87, 0xff, 0xfa, 0x74, 0xbd, 0x51, 0x02, 0x15, 0xf3, 0xbd, 0xaf, 0xa1, 0xc9, 0x3d, 0x1b, 0x13, 0x15, 0x24, 0x6f, 0xd2, 0xf7, 0x94, 0xc4, 0xda, 0x07, 0xbd, 0x72, 0x2a, 0x98, 0xdd, 0xa9, 0xa0, 0x2a, 0xd4, 0x25, 0x5b, 0x6d, 0x52, 0x67, 0x73, 0x82, 0x56, 0xcb, 0x86, 0x39, 0xa1, 0x45, 0xc2, 0x84, 0x04, 0x56, 0x2a, 0xdd, 0x2b, 0xc7, 0x69, 0x1d, 0xac, 0x12, 0x60, 0x0b, 0xa9, 0xf8, 0xeb, 0xe0, 0x06, 0x14, 0xee, 0x3f, 0xc6, 0xe6, 0xb2, 0x48, 0x4d, 0x9c, 0x5c, 0x70, 0x90, 0xb3, 0xf3, 0xb1, 0x34, 0xba, 0x19, 0x90, 0x98, 0x64, 0x56, 0x30, 0x40, 0xfe, 0x87, 0x52, 0xd6, 0xc6, 0xab, 0x95, 0x11, 0x1f, 0xe1, 0x01, 0x4b, 0xf7, 0xbb, 0xe4, 0xe6, 0x74, 0xc9, 0xd0, 0x3b, 0xb8, 0xd2, 0x29, 0xe4, 0xb5, 0xf6, 0xa6, 0xe4, 0x71, 0xc6, 0x78, 0xb0, 0x26, 0x5e, 0x88, 0xcc, 0xad, 0x79, 0x60, 0xff, 0xfa, 0xe7, 0x00, 0xf3, 0xa7, 0x5e, 0x61, 0xa2, 0x4e, 0xa8, 0x82, 0xb9, 0x70, 0x53, 0x5e, 0xb7, 0x01, 0x7e, 0x16, 0xc4, 0x8c, 0xe9, 0xe2, 0xbc, 0x83, 0x57, 0xf7, 0xf0, 0x88, 0x9c, 0x87, 0x1d, 0x0b, 0x4c, 0xe2, 0x9d, 0x27, 0x9a, 0xfd, 0x1d, 0x11, 0x49, 0x98, 0xd1, 0xeb, 0x6f, 0xe4, 0xa5, 0x66, 0x1e, 0x42, 0x9b, 0x13, 0x27, 0xf0, 0xa3, 0x9e, 0x9e, 0xf0, 0x0a, 0x41, 0xa7, 0x4f, 0xe4, 0x79, 0xb9, 0x0f, 0xdd, 0xa2, 0x1d, 0x93, 0x15, 0x55, 0x5a, 0xfe, 0x22, 0x72, 0x74, 0xc1, 0x1a, 0x71, 0xc0, 0xd1, 0x0c, 0x9e, 0x5d, 0xfc, 0x89, 0x75, 0x0e, 0xda, 0x53, 0xc6, 0xa8, 0xb5, 0x2a, 0x52, 0x72, 0xc7, 0x55, 0x26, 0x37, 0x5e, 0x5f, 0xb9, 0x1f, 0xf7, 0x5d, 0x02, 0x8d, 0xf7, 0xaa, 0x2b, 0xce, 0xb5, 0xfd, 0xf6, 0xf8, 0xe3, 0xbc, 0x1e, 0xc3, 0xf1, 0xe2, 0x26, 0xd0, 0x4d, 0xf1, 0xd8, 0x42, 0xe4, 0xc8, 0xf4, 0x58, 0x98, 0x8c, 0xb7, 0x41, 0x5f, 0x0d, 0x2c, 0xa4, 0x49, 0x8b, 0x0c, 0xd6, 0x7e, 0x8b, 0x08, 0x5b, 0x00, 0x8f, 0xc4, 0xca, 0x06, 0x43, 0x93, 0xa0, 0xdf, 0x51, 0x7f, 0x0b, 0x48, 0x33, 0xea, 0x40, 0x51, 0xac, 0x3f, 0x1d, 0xe5, 0x68, 0x6d, 0xcc, 0xb7, 0xbb, 0xa8, 0xbd, 0x93, 0x90, 0x92, 0xd6, 0xd7, 0x8f, 0xa0, 0x8f, 0x5b, 0xf9, 0xbf, 0x6f, 0x13, 0xd7, 0xae, 0xf7, 0x2f, 0x04, 0x7f, 0xcc, 0x47, 0xa8, 0x82, 0x23, 0xdf, 0x6e, 0x1a, 0x62, 0xd2, 0x18, 0x16, 0x9f }; /* K = 2621703fb8f5094bc68eea72d5b5caf26f8ea3a173158b8d3e7f9565296767f0 */ static const uint8_t ac_dsa_vect251_out[] = { /* R */ 0x31, 0xf2, 0xc8, 0x62, 0x87, 0xe5, 0x72, 0xff, 0x4d, 0x07, 0x42, 0x1a, 0x58, 0xdc, 0x7b, 0x3d, 0x72, 0x7d, 0xe1, 0x13, 0x76, 0x99, 0x52, 0xb6, 0xd8, 0xd7, 0x36, 0x08, 0x8b, 0x36, 0xa8, 0x25, /* S */ 0x30, 0xac, 0xbd, 0x1c, 0x4c, 0xd6, 0xaa, 0x66, 0x6e, 0xe5, 0x2b, 0x0b, 0xdc, 0x41, 0xfc, 0x3b, 0x23, 0x9b, 0x60, 0xd5, 0x7e, 0x27, 0x9b, 0x3f, 0x54, 0x83, 0xc4, 0xd5, 0x4b, 0xdd, 0x97, 0xa6 }; #define ac_dsa_vect252_prime ac_dsa_vect241_prime #define ac_dsa_vect252_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect252_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect252_ptx[] = { /* Msg */ 0x5f, 0x8d, 0x7f, 0x28, 0x3a, 0xf0, 0x03, 0x84, 0xa5, 0x19, 0x76, 0x90, 0x29, 0xd2, 0x08, 0xb6, 0x1e, 0xee, 0x0e, 0x1c, 0xb2, 0x1c, 0xe9, 0xfb, 0x80, 0xe9, 0xd8, 0x59, 0x6b, 0x89, 0x45, 0x80, 0xda, 0x7a, 0xb3, 0x45, 0x74, 0x29, 0xe7, 0x2d, 0xfa, 0x64, 0xe7, 0xcb, 0x83, 0x94, 0x14, 0xde, 0x34, 0x4d, 0xa2, 0x1c, 0xff, 0x55, 0xb1, 0xb3, 0xa8, 0x31, 0x89, 0xd2, 0x08, 0xad, 0x20, 0x89, 0xb3, 0x5a, 0xbd, 0x78, 0xe2, 0x41, 0x6b, 0xce, 0xb6, 0x64, 0x66, 0x76, 0x2f, 0xd7, 0xab, 0x9c, 0x23, 0x4c, 0x4a, 0xec, 0x38, 0x72, 0xcb, 0xc8, 0x44, 0x3c, 0x92, 0xb8, 0xce, 0x4e, 0xe4, 0x59, 0x54, 0x25, 0xe7, 0x46, 0xe4, 0xb6, 0xf7, 0x97, 0x2e, 0xbd, 0x5d, 0x06, 0x5f, 0xb3, 0xfd, 0xc5, 0xe3, 0x29, 0xe8, 0xa8, 0x7e, 0xd3, 0xcd, 0xdb, 0xe2, 0x79, 0xd5, 0x72, 0x27, 0xae, 0x4b, 0x13 }; static const uint8_t ac_dsa_vect252_priv_val[] = { /* X */ 0x1d, 0xe9, 0x25, 0xbf, 0x53, 0x2a, 0x50, 0xdc, 0x7a, 0x10, 0x98, 0x4b, 0xd1, 0xdb, 0xd9, 0x05, 0x00, 0xec, 0x9a, 0xd2, 0x2d, 0xf0, 0xf2, 0xd6, 0xf1, 0x85, 0xfd, 0x1b, 0xa8, 0x06, 0x0d, 0x37 }; static const uint8_t ac_dsa_vect252_pub_val[] = { /* Y */ 0xaa, 0x4d, 0x06, 0x52, 0x70, 0xc3, 0x8b, 0xdf, 0x99, 0x6b, 0x1f, 0x5f, 0x1e, 0xe4, 0xb6, 0x7a, 0x76, 0xef, 0x1e, 0x7b, 0x13, 0x4e, 0xa2, 0x1f, 0xd0, 0xa6, 0x13, 0x75, 0x21, 0x24, 0x50, 0x52, 0xe7, 0x49, 0x54, 0xb9, 0x65, 0x44, 0xc7, 0x00, 0xd4, 0x0f, 0x36, 0x24, 0x8f, 0xf2, 0x9a, 0x71, 0x2a, 0x09, 0x8d, 0x80, 0xca, 0x12, 0xe2, 0x8f, 0xdd, 0x79, 0x01, 0xa6, 0x22, 0xdd, 0x09, 0x88, 0xe1, 0xc4, 0xd6, 0x7d, 0xe4, 0xc4, 0x97, 0xa9, 0x57, 0x88, 0x2c, 0xe9, 0x92, 0xfc, 0xb0, 0x8c, 0x5b, 0x85, 0xc6, 0x85, 0x84, 0x47, 0xed, 0x6f, 0xcb, 0xad, 0x26, 0xd8, 0xc4, 0x04, 0x85, 0xf0, 0xa8, 0x9d, 0x9d, 0x02, 0x0f, 0xe2, 0x33, 0xe8, 0x93, 0x19, 0x03, 0x84, 0x55, 0x64, 0x4c, 0x82, 0x8d, 0x60, 0x8d, 0xf9, 0x70, 0x7c, 0x63, 0x17, 0x0d, 0xd0, 0x61, 0x8c, 0x0b, 0xae, 0xf3, 0xec, 0xa8, 0xd1, 0x45, 0x54, 0x60, 0xa2, 0xeb, 0x25, 0xfa, 0xff, 0x44, 0x4f, 0x80, 0x3b, 0xca, 0x29, 0x7b, 0xb6, 0x80, 0xe5, 0xf0, 0xfd, 0x06, 0xe8, 0x87, 0xed, 0x50, 0xc8, 0x06, 0x0f, 0x55, 0xd0, 0x16, 0x0e, 0xc6, 0x45, 0x17, 0x08, 0x6f, 0x4e, 0x1d, 0x62, 0x4a, 0xb7, 0xd1, 0x2d, 0xf1, 0xb5, 0x94, 0x70, 0x17, 0xe6, 0x22, 0xeb, 0xbc, 0xd6, 0xf4, 0xed, 0xdb, 0x0a, 0x41, 0xdc, 0xba, 0x82, 0x74, 0x3e, 0xfd, 0xc5, 0x80, 0x42, 0x88, 0xd2, 0x86, 0x3f, 0x54, 0x00, 0x3e, 0xea, 0x12, 0x75, 0x32, 0x46, 0xe6, 0xe0, 0x35, 0x7d, 0xf0, 0x55, 0x01, 0xb1, 0x95, 0xfd, 0xf3, 0xa7, 0x76, 0x1c, 0x4c, 0x3a, 0xcf, 0x26, 0x53, 0x7b, 0xf9, 0x8b, 0x32, 0xf2, 0xe7, 0x2f, 0xf1, 0xe0, 0x15, 0x9d, 0x04, 0x6b, 0xbc, 0x05, 0x31, 0x71, 0xe3, 0xd5, 0x18, 0x34, 0x4f, 0x05, 0x37, 0xf2, 0xe7, 0x20, 0x0b, 0xcd, 0xd9, 0x57, 0xec, 0x96, 0x36, 0x5c, 0xaf, 0x55, 0xfc, 0xd2, 0x46, 0xaf, 0xe7, 0x71, 0x70, 0x9e, 0xce, 0xc2, 0x83, 0x48, 0xa3, 0x56, 0xa1, 0xd4, 0xeb, 0x13, 0x6a, 0x17, 0x6a, 0xdb, 0x5f, 0xa1, 0x02, 0xf5, 0xfa, 0x5c, 0x96, 0x9f, 0x90, 0x89, 0x64, 0x62, 0xe0, 0x67, 0x7a, 0xfc, 0x60, 0x6a, 0x94, 0x8b, 0x25, 0x58, 0x7c, 0x10, 0x31, 0x6d, 0x22, 0xe1, 0x26, 0x9f, 0xc6, 0x4f, 0x91, 0x5a, 0x79, 0x6c, 0x96, 0x5b, 0x8b, 0xe9, 0x7e, 0x5b, 0xea, 0xb0, 0x47, 0xca, 0x51, 0x98, 0xbf, 0x2f, 0xf8, 0x56, 0xdf, 0x74, 0x0a, 0xfb, 0xbc, 0x1a, 0xef, 0xaf, 0xef, 0xb1, 0xed, 0x47, 0x27, 0x8b, 0x15, 0x0e, 0x6a, 0x72, 0x22, 0x41, 0x7d, 0x3a, 0x86, 0x49, 0x4b, 0xdb, 0x51, 0xed, 0xd0, 0x61, 0x68, 0x99, 0x52, 0x6c, 0x27, 0xac, 0xc2, 0xa8, 0x18, 0xe8, 0x3b, 0xaf, 0x57, 0x9b }; /* K = 5f0d6676776f40cfd5ca255fd8e32b10bf3472b193818914876d4c3be68a83b9 */ static const uint8_t ac_dsa_vect252_out[] = { /* R */ 0x71, 0x87, 0xca, 0xe8, 0x36, 0x82, 0x36, 0x18, 0xf9, 0xa6, 0xe8, 0x47, 0x05, 0x5c, 0xa2, 0xbc, 0x38, 0xc8, 0x6e, 0x72, 0x6d, 0x02, 0xd3, 0x8f, 0x49, 0x50, 0xeb, 0x6b, 0x71, 0xb3, 0x6b, 0xcb, /* S */ 0x21, 0xf6, 0xff, 0x41, 0x75, 0x76, 0x54, 0x30, 0xe2, 0xdb, 0xed, 0x34, 0x2a, 0x85, 0xd3, 0x00, 0x56, 0xb2, 0x89, 0x05, 0x74, 0x4e, 0xce, 0x5d, 0xad, 0x79, 0x75, 0x5e, 0xe3, 0xd7, 0xbb, 0xbd }; #define ac_dsa_vect253_prime ac_dsa_vect241_prime #define ac_dsa_vect253_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect253_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect253_ptx[] = { /* Msg */ 0xb2, 0x16, 0xa0, 0x35, 0xb0, 0xff, 0x29, 0xfe, 0xaf, 0x7d, 0x4c, 0x34, 0xee, 0xb1, 0x60, 0x41, 0x55, 0xc9, 0x03, 0x38, 0x00, 0x67, 0x53, 0xee, 0x2b, 0x36, 0x06, 0x2d, 0x72, 0xf6, 0x2b, 0x52, 0x45, 0x04, 0x65, 0x9f, 0x70, 0xb9, 0x76, 0xc6, 0x89, 0x52, 0xa6, 0x2c, 0x2b, 0x9a, 0x2a, 0x00, 0xcf, 0x00, 0x66, 0xa5, 0xe5, 0x09, 0x8a, 0x63, 0x2d, 0xf2, 0xee, 0x56, 0xdd, 0x1a, 0x14, 0x0a, 0x98, 0xf7, 0xb3, 0xac, 0x12, 0xdb, 0x35, 0x76, 0xb6, 0x10, 0xd7, 0x65, 0x63, 0xe4, 0x62, 0x16, 0x37, 0xda, 0x10, 0x98, 0xaa, 0x20, 0xf3, 0xc8, 0x32, 0x47, 0xb7, 0x27, 0x88, 0x60, 0x41, 0x7c, 0xec, 0xf7, 0xe1, 0x37, 0x19, 0x4c, 0xf1, 0xba, 0xe1, 0x2b, 0xbc, 0x63, 0xa7, 0xba, 0xe0, 0x2c, 0x90, 0x6d, 0x50, 0x3f, 0x69, 0x4d, 0xea, 0x3b, 0xd5, 0x34, 0x71, 0x8e, 0x37, 0x70, 0x49, 0x62 }; static const uint8_t ac_dsa_vect253_priv_val[] = { /* X */ 0x3b, 0xae, 0x93, 0x30, 0xb4, 0x7a, 0xab, 0x85, 0xce, 0xc9, 0x48, 0xf9, 0x44, 0xac, 0x13, 0x22, 0x1a, 0xd3, 0x5d, 0x85, 0x9d, 0xe5, 0x6d, 0xb5, 0x6c, 0x31, 0xaa, 0xe8, 0x83, 0x45, 0xcb, 0xea }; static const uint8_t ac_dsa_vect253_pub_val[] = { /* Y */ 0x7d, 0x6b, 0x3b, 0x71, 0xb1, 0x41, 0x58, 0x07, 0xd1, 0x59, 0x01, 0x42, 0x7e, 0x6a, 0xb0, 0x02, 0xee, 0x98, 0x5c, 0xe7, 0xc8, 0xd8, 0x44, 0x96, 0x9c, 0x6e, 0x72, 0x94, 0xa2, 0x16, 0x7b, 0x4c, 0x26, 0x17, 0x1b, 0xcd, 0x64, 0x6f, 0x0d, 0x1b, 0xce, 0x14, 0xdf, 0x05, 0xe4, 0xce, 0x58, 0xa3, 0xae, 0x50, 0xb2, 0xab, 0xa5, 0xfb, 0x74, 0x45, 0x52, 0x33, 0xfa, 0x6d, 0x17, 0x9a, 0x07, 0x94, 0xcb, 0x26, 0xe9, 0x2c, 0xa9, 0x10, 0xcd, 0x1c, 0x16, 0xe5, 0x46, 0x4e, 0x8f, 0xa7, 0xba, 0x93, 0x63, 0x41, 0xd3, 0xac, 0x21, 0x1a, 0xc1, 0xf8, 0xa2, 0xf2, 0xa1, 0x9c, 0x14, 0x8a, 0x1c, 0x3d, 0x6b, 0x00, 0xac, 0x44, 0xc3, 0x5e, 0xa3, 0x45, 0xa3, 0xff, 0x73, 0xae, 0x9d, 0x5a, 0xbc, 0xc6, 0xab, 0x65, 0x16, 0x2a, 0x53, 0xda, 0xab, 0xdf, 0x6d, 0xa2, 0x5f, 0x96, 0x95, 0x8e, 0xaf, 0x89, 0xf5, 0x59, 0x89, 0x5c, 0xbe, 0xc5, 0x23, 0x51, 0x39, 0x4f, 0x91, 0x32, 0xc9, 0x56, 0x4d, 0x61, 0xaa, 0xc7, 0x92, 0x64, 0x0f, 0x11, 0xe0, 0x9a, 0xa6, 0xf6, 0xcd, 0xe9, 0xee, 0x9c, 0xa5, 0xe0, 0x5f, 0xd9, 0x02, 0x91, 0x11, 0x63, 0x81, 0x71, 0x77, 0xbf, 0x05, 0x4c, 0xf2, 0xea, 0xbf, 0x7c, 0xe8, 0xf3, 0x4b, 0xb1, 0xc4, 0xad, 0xed, 0x8d, 0xad, 0x93, 0x41, 0x1f, 0xb2, 0x76, 0xd2, 0xd0, 0xa2, 0x96, 0x79, 0x96, 0x61, 0x30, 0x7d, 0xe5, 0x79, 0x64, 0x1e, 0x60, 0x7f, 0xda, 0xd0, 0x58, 0xd9, 0xa3, 0xf1, 0x94, 0x57, 0x4e, 0xa7, 0x6f, 0x4b, 0xec, 0x46, 0xbe, 0xf8, 0xad, 0xc5, 0xd6, 0x2c, 0x73, 0x90, 0xda, 0x1c, 0x45, 0xf6, 0xfc, 0x5d, 0x9a, 0x78, 0x4f, 0x69, 0x6f, 0x24, 0xae, 0x7e, 0x6b, 0x27, 0xa8, 0x09, 0x02, 0x94, 0x18, 0xdd, 0x18, 0xa4, 0x20, 0x45, 0x5c, 0x2c, 0xc9, 0x69, 0x5e, 0x7c, 0x0f, 0xe0, 0x02, 0x19, 0xa1, 0x71, 0x14, 0x68, 0xe2, 0x86, 0x6b, 0x71, 0xf3, 0xf9, 0xc5, 0x38, 0x78, 0x9e, 0xd2, 0x84, 0x3f, 0x44, 0xf2, 0xa8, 0x21, 0x77, 0x3c, 0x52, 0xd2, 0x11, 0xdd, 0x13, 0x33, 0xb5, 0xf1, 0x64, 0xec, 0xdf, 0x6c, 0x3f, 0xfd, 0x71, 0xde, 0x66, 0x78, 0xb0, 0xc2, 0x72, 0xf9, 0x23, 0x55, 0xd5, 0x97, 0x4e, 0xb2, 0x1c, 0x3c, 0x8f, 0xbd, 0x0b, 0xca, 0x75, 0x38, 0xbb, 0xd9, 0x89, 0x47, 0x50, 0xb1, 0xdd, 0x01, 0x42, 0xbe, 0xa8, 0x51, 0x04, 0x35, 0x6f, 0x9a, 0x51, 0x5e, 0xf1, 0xab, 0x69, 0xda, 0xed, 0x98, 0xd9, 0x48, 0x03, 0xac, 0x91, 0x2c, 0x77, 0x0e, 0x26, 0xef, 0xa2, 0xfa, 0x0b, 0x04, 0xe1, 0x10, 0x51, 0xce, 0xd2, 0xf7, 0x0f, 0x06, 0xf2, 0xf0, 0x5e, 0xac, 0x80, 0x29, 0xd6, 0x8e, 0x12, 0x26, 0x16, 0x57, 0xcf, 0x4d, 0xbc, 0xc1 }; /* K = 248048e6fc52c48398f5cd2ccd8a659c4b7b76dedf54f3fb90c5bb173c5d24f7 */ static const uint8_t ac_dsa_vect253_out[] = { /* R */ 0x67, 0xdf, 0x1d, 0x51, 0x0d, 0x06, 0x3c, 0x90, 0x67, 0xe9, 0x75, 0x91, 0x80, 0xbe, 0x47, 0x0c, 0x71, 0xfe, 0x09, 0xc4, 0xf1, 0x33, 0xac, 0xa1, 0x81, 0xbd, 0xb4, 0x7b, 0xb8, 0x7b, 0x20, 0x97, /* S */ 0x73, 0x28, 0xb8, 0x87, 0xbf, 0x0d, 0x52, 0x0a, 0xbe, 0x6f, 0x24, 0xaf, 0xf2, 0x15, 0x3f, 0x40, 0xde, 0x00, 0x9e, 0x27, 0x06, 0xae, 0x04, 0x3d, 0xd3, 0xaa, 0x55, 0x52, 0x1d, 0x95, 0x72, 0xd6 }; #define ac_dsa_vect254_prime ac_dsa_vect241_prime #define ac_dsa_vect254_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect254_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect254_ptx[] = { /* Msg */ 0x6c, 0x67, 0x11, 0x6f, 0xbd, 0x21, 0xa0, 0xe3, 0xed, 0x16, 0xb3, 0xc4, 0xca, 0x58, 0xac, 0x49, 0x66, 0x19, 0x18, 0xbf, 0xc6, 0xa7, 0xc3, 0xa6, 0xac, 0xdb, 0xcd, 0x53, 0xdd, 0x40, 0x87, 0x03, 0x4f, 0xca, 0x16, 0x4d, 0xf8, 0xd3, 0x8f, 0x7e, 0xf7, 0xdb, 0x03, 0x36, 0x37, 0x01, 0x40, 0x92, 0x46, 0x38, 0x2e, 0xe0, 0x53, 0xc6, 0x9c, 0x84, 0xfa, 0xfa, 0x3c, 0x77, 0xad, 0x2c, 0xe0, 0x8d, 0xc7, 0xf4, 0x1c, 0x34, 0xa3, 0x1d, 0xa4, 0x96, 0xd0, 0x70, 0xa9, 0x94, 0x35, 0x79, 0x9f, 0x26, 0x9d, 0xc8, 0xef, 0xfd, 0x06, 0xd3, 0x1f, 0x85, 0x87, 0x9c, 0x29, 0x9c, 0xf7, 0x24, 0x1b, 0x37, 0xb9, 0xa4, 0xcf, 0xd5, 0x45, 0x08, 0x63, 0x93, 0x15, 0x67, 0x37, 0xcd, 0x9d, 0xa2, 0xd2, 0x82, 0xe7, 0xd5, 0x69, 0xfc, 0xfa, 0x5c, 0xbd, 0xe4, 0xbb, 0xa5, 0x1b, 0xd8, 0x9f, 0xdc, 0xc9, 0x13 }; static const uint8_t ac_dsa_vect254_priv_val[] = { /* X */ 0x7f, 0xa6, 0x61, 0x20, 0xc5, 0xac, 0xd5, 0xba, 0xc1, 0x32, 0xd0, 0x70, 0x83, 0xd0, 0x79, 0x68, 0xb2, 0x10, 0xcd, 0x9c, 0x26, 0xc2, 0xc5, 0x6d, 0x9b, 0x16, 0xd9, 0x80, 0x66, 0xf5, 0xdf, 0x6e }; static const uint8_t ac_dsa_vect254_pub_val[] = { /* Y */ 0x6a, 0x50, 0xd1, 0x12, 0x5f, 0x9f, 0x3f, 0xc2, 0xf7, 0xe0, 0x23, 0xc0, 0x93, 0xb3, 0x60, 0x8e, 0x69, 0x72, 0xac, 0xef, 0xe2, 0x9c, 0x0c, 0x6b, 0xa0, 0x7a, 0x2f, 0x61, 0xed, 0x74, 0x71, 0x53, 0xad, 0xa4, 0xa9, 0xb6, 0x80, 0x62, 0x2a, 0x84, 0x2b, 0x9a, 0x82, 0x01, 0x19, 0x67, 0x56, 0x20, 0xc1, 0x16, 0x88, 0x70, 0x0b, 0x85, 0x5d, 0x4b, 0x8d, 0x13, 0xbf, 0x72, 0x6c, 0x36, 0xac, 0xf9, 0x23, 0x25, 0x6f, 0xef, 0x1b, 0x53, 0x09, 0x36, 0x22, 0xd1, 0xbc, 0xbc, 0xf0, 0x23, 0x84, 0x8b, 0x8b, 0x8f, 0x4a, 0xbf, 0x43, 0xbb, 0x6e, 0x87, 0xb8, 0x4d, 0x06, 0x1d, 0xeb, 0x75, 0x23, 0x62, 0x24, 0xce, 0xda, 0x91, 0x4b, 0x18, 0xf7, 0xce, 0xb7, 0x27, 0x08, 0x78, 0x9d, 0xfb, 0x94, 0x07, 0x04, 0x13, 0xb0, 0xe6, 0x5c, 0x12, 0x31, 0xad, 0x02, 0xdb, 0x42, 0xde, 0xcb, 0xe0, 0xe5, 0x58, 0xae, 0xa0, 0x6c, 0x31, 0x0a, 0xa1, 0xa8, 0xd1, 0x13, 0xbe, 0x1f, 0x07, 0x14, 0x82, 0xfc, 0x61, 0x91, 0x32, 0x25, 0xf0, 0x07, 0xb5, 0x69, 0xb6, 0xe8, 0x67, 0xcf, 0xb3, 0x92, 0x72, 0x57, 0x76, 0xad, 0x71, 0xf5, 0x0d, 0xc9, 0x7b, 0x83, 0x4a, 0x71, 0x37, 0x5b, 0xac, 0x18, 0xfa, 0xbf, 0x78, 0x11, 0x26, 0xd0, 0x6d, 0xf6, 0x21, 0x24, 0x06, 0x4e, 0x6a, 0x72, 0x3b, 0x48, 0x63, 0x5e, 0x67, 0x54, 0xfc, 0x76, 0x7a, 0x50, 0x94, 0xd0, 0x64, 0x59, 0x74, 0x04, 0x15, 0x91, 0xd0, 0xad, 0x48, 0x28, 0xf6, 0x37, 0x83, 0x35, 0x66, 0x96, 0xaf, 0x7f, 0xf7, 0x7c, 0xd0, 0x01, 0x07, 0x94, 0x9f, 0xbf, 0xf4, 0x70, 0x9d, 0xff, 0x8a, 0x66, 0x0a, 0x41, 0x3f, 0x5b, 0x6c, 0x0d, 0xf3, 0x7a, 0xde, 0x84, 0xfc, 0xbc, 0x1d, 0x32, 0x53, 0xba, 0x61, 0x72, 0x65, 0xa1, 0x0c, 0xc0, 0x87, 0x60, 0x61, 0x30, 0x29, 0x09, 0x09, 0xa4, 0xf8, 0x13, 0x34, 0x1e, 0xfd, 0xb6, 0x11, 0x69, 0x6f, 0xeb, 0x5b, 0xea, 0x3d, 0x7d, 0x00, 0xa5, 0x3a, 0x81, 0xf3, 0xa2, 0x04, 0x3b, 0x88, 0x7a, 0x77, 0x60, 0x75, 0xd2, 0x50, 0xc1, 0xa0, 0x10, 0xec, 0x47, 0x66, 0x00, 0x87, 0xf3, 0xef, 0x05, 0x78, 0x2d, 0xd2, 0x1d, 0x29, 0x8d, 0x6d, 0x37, 0x55, 0x9c, 0xd4, 0x73, 0x00, 0x8f, 0x47, 0x4d, 0x8d, 0xec, 0xa6, 0x81, 0x7c, 0x13, 0x90, 0x18, 0x02, 0x76, 0x09, 0x7a, 0x81, 0xf4, 0x62, 0xc0, 0x52, 0x79, 0x28, 0xf9, 0x3a, 0x46, 0x1f, 0x4a, 0xc2, 0xd6, 0xed, 0x8c, 0x9d, 0x6d, 0x10, 0x1a, 0x2a, 0x9a, 0x29, 0x20, 0x1a, 0x83, 0xd0, 0x58, 0x9f, 0x57, 0xbe, 0x28, 0xa7, 0x27, 0x48, 0x45, 0x18, 0xc7, 0x42, 0x5c, 0xf5, 0x74, 0x4d, 0xf3, 0x96, 0xa0, 0xe1, 0x4a, 0x4d, 0x26, 0x0a, 0x5c, 0x8d, 0x29, 0xbf }; /* K = 5771223a25f539c80481baebe7b2862156fcf26220d6e953c37f2a22bce77c0e */ static const uint8_t ac_dsa_vect254_out[] = { /* R */ 0x7d, 0x48, 0x9a, 0xb0, 0xd4, 0x4b, 0xc7, 0x32, 0x71, 0xef, 0x42, 0xe2, 0x8a, 0x60, 0xe1, 0xb7, 0xef, 0x7d, 0xd2, 0x7a, 0xf4, 0x04, 0x55, 0x46, 0x04, 0x70, 0x85, 0xda, 0x40, 0x8b, 0xcc, 0xc7, /* S */ 0x31, 0x01, 0x51, 0xd9, 0x43, 0xf0, 0x88, 0xbb, 0x7d, 0xfd, 0xcd, 0x52, 0xd8, 0x28, 0x84, 0xa7, 0xf1, 0xee, 0x64, 0xd4, 0x6f, 0x9d, 0x60, 0x0d, 0x23, 0xf5, 0x2f, 0x4c, 0xea, 0x4d, 0x28, 0x62 }; #define ac_dsa_vect255_prime ac_dsa_vect241_prime #define ac_dsa_vect255_sub_prime ac_dsa_vect241_sub_prime #define ac_dsa_vect255_base ac_dsa_vect241_base static const uint8_t ac_dsa_vect255_ptx[] = { /* Msg */ 0xc8, 0xd4, 0x16, 0xc1, 0xef, 0xe6, 0x86, 0x63, 0x70, 0x78, 0x12, 0x2f, 0x79, 0x8d, 0x88, 0x04, 0xf6, 0x4a, 0x6e, 0x85, 0xe0, 0x5f, 0x7e, 0x8e, 0x07, 0x63, 0x4a, 0x30, 0x9a, 0x98, 0xe9, 0x2a, 0xbd, 0x54, 0x06, 0x1c, 0xcc, 0xc3, 0x19, 0xf1, 0xac, 0xd4, 0xa0, 0x87, 0xb1, 0xd7, 0xdb, 0xf0, 0xb6, 0xbf, 0x2a, 0x09, 0xc5, 0xdc, 0x50, 0x8e, 0xd1, 0x4d, 0xcd, 0x54, 0x42, 0x05, 0x6e, 0xad, 0xe7, 0x69, 0x1b, 0x7f, 0xb6, 0x5b, 0x67, 0x8e, 0xc2, 0xe1, 0x37, 0xb5, 0xfb, 0xe8, 0x75, 0x20, 0x8a, 0x42, 0x7c, 0x2a, 0x7a, 0xd9, 0x06, 0x65, 0x42, 0x6f, 0xbc, 0xbc, 0x76, 0x55, 0xe4, 0x8a, 0x89, 0x65, 0xd2, 0x3f, 0xde, 0xf1, 0x1c, 0xa8, 0x09, 0x2f, 0x51, 0x12, 0x07, 0xa6, 0x07, 0x35, 0x9f, 0x94, 0xe9, 0x1b, 0x19, 0x7f, 0xcc, 0x99, 0x3e, 0xe6, 0xce, 0x3c, 0x37, 0xad, 0x3b, 0x71 }; static const uint8_t ac_dsa_vect255_priv_val[] = { /* X */ 0x1f, 0x4a, 0x3c, 0xf1, 0xfb, 0x60, 0x36, 0x0d, 0xb3, 0x79, 0x0a, 0x03, 0xfe, 0x55, 0x19, 0x49, 0x85, 0x97, 0x7c, 0x68, 0x84, 0xa5, 0xfc, 0x05, 0xa6, 0xfb, 0x5e, 0xaf, 0xd5, 0x35, 0x87, 0xf5 }; static const uint8_t ac_dsa_vect255_pub_val[] = { /* Y */ 0xcc, 0x9b, 0x9d, 0x02, 0x92, 0x91, 0x5d, 0x63, 0x1a, 0xa0, 0xd9, 0xeb, 0x61, 0x61, 0xf9, 0x24, 0x70, 0x5c, 0x56, 0x6e, 0xe0, 0x9e, 0x74, 0xe4, 0x18, 0xd8, 0x8e, 0x6b, 0x67, 0xb7, 0xf5, 0x7a, 0xff, 0x51, 0x70, 0xf6, 0xc4, 0x2a, 0x83, 0x9b, 0xa8, 0x39, 0x40, 0x2b, 0xfe, 0x51, 0x7c, 0x28, 0x77, 0x81, 0xdc, 0x97, 0xdf, 0x2e, 0x05, 0x50, 0xb3, 0x86, 0x24, 0x84, 0xd2, 0x53, 0x15, 0x2f, 0x6c, 0xff, 0x89, 0x5f, 0x09, 0x23, 0x58, 0xb5, 0xc4, 0x45, 0x90, 0x48, 0x58, 0x13, 0x09, 0xef, 0xf2, 0xf6, 0x89, 0x23, 0x0b, 0x4c, 0x49, 0x51, 0xdb, 0x84, 0x13, 0x57, 0x3b, 0x6e, 0xae, 0x85, 0xc2, 0xdc, 0x50, 0xfd, 0x61, 0x34, 0x46, 0x13, 0x28, 0xe5, 0xb6, 0x43, 0x9f, 0x41, 0x44, 0x2b, 0x91, 0xe3, 0xa3, 0x42, 0x04, 0x42, 0x8d, 0x1e, 0x2c, 0x22, 0x41, 0x2b, 0x01, 0x22, 0x42, 0xb1, 0x4f, 0x92, 0xe2, 0xd1, 0xba, 0xd6, 0x26, 0xaf, 0x95, 0x05, 0x1b, 0xf0, 0x6c, 0x74, 0xda, 0x40, 0x81, 0xb0, 0xd6, 0x19, 0xe1, 0x36, 0xa9, 0x9c, 0x8d, 0xa3, 0xa9, 0x1a, 0xdb, 0x3b, 0x8c, 0xf8, 0xbc, 0x59, 0x64, 0xff, 0x65, 0x5d, 0x45, 0xc7, 0x5a, 0xda, 0x25, 0x3a, 0xba, 0x91, 0xc6, 0x40, 0x95, 0x39, 0x4c, 0x70, 0x1c, 0x53, 0xdd, 0xc1, 0x1f, 0x38, 0x8d, 0x61, 0x98, 0x4c, 0x32, 0xd4, 0x32, 0x6a, 0x8c, 0x62, 0x7d, 0xf8, 0x45, 0xb4, 0x10, 0x0f, 0x17, 0x1b, 0xbd, 0xb2, 0x52, 0xd3, 0xe2, 0x84, 0x94, 0xac, 0x17, 0x34, 0x32, 0xdd, 0x55, 0x31, 0xe0, 0x30, 0x40, 0x30, 0x2a, 0xac, 0x8c, 0x07, 0xc9, 0xea, 0x92, 0xa9, 0xab, 0x67, 0xfa, 0xf0, 0xc7, 0x8b, 0x3a, 0xd8, 0xd4, 0x54, 0xdc, 0xd4, 0x28, 0xf9, 0x42, 0xd8, 0xce, 0x6e, 0x29, 0x87, 0x30, 0x49, 0xfd, 0xbf, 0xa1, 0xdf, 0x0e, 0x6e, 0xc2, 0x24, 0xc9, 0xdd, 0x06, 0x6b, 0x98, 0x1a, 0x40, 0x0b, 0x1f, 0x51, 0x94, 0xfe, 0xe1, 0x3c, 0xc5, 0xca, 0x7f, 0xfb, 0xec, 0xa9, 0x8e, 0xd0, 0xa0, 0x22, 0x13, 0x77, 0xa1, 0xae, 0x61, 0x27, 0x40, 0xfc, 0xe7, 0x74, 0xee, 0xed, 0x68, 0x38, 0x2b, 0x32, 0xb6, 0x86, 0xa2, 0x5f, 0xfc, 0x01, 0x66, 0x82, 0x18, 0x64, 0x48, 0x20, 0x7c, 0x4d, 0x97, 0x83, 0xe8, 0x3d, 0xa2, 0x0a, 0x5e, 0x8b, 0x22, 0x8a, 0x13, 0x4d, 0xc3, 0xf4, 0x4e, 0xcc, 0x56, 0x5a, 0xb9, 0xae, 0x16, 0x2b, 0x85, 0x5e, 0xcd, 0x37, 0xe6, 0x40, 0x7e, 0x71, 0x40, 0x45, 0xf4, 0xe8, 0x3b, 0x97, 0x1a, 0x5f, 0x4e, 0x30, 0x4c, 0xd7, 0x78, 0xf3, 0xd3, 0x41, 0x37, 0x74, 0x5f, 0xc6, 0xea, 0x15, 0xb4, 0xb7, 0x4d, 0x60, 0x17, 0x6e, 0xf8, 0x07, 0x41, 0x0b, 0x1b, 0x26, 0xf6, 0x8e, 0xa1, 0x4f, 0x8f, 0x91 }; /* K = 589da8a8ac79ad6b62b353422691f35e6474e9c605d877670dd95738b4935f06 */ static const uint8_t ac_dsa_vect255_out[] = { /* R */ 0x7f, 0xa5, 0x12, 0x31, 0xbc, 0x84, 0x5f, 0xa8, 0xb6, 0x68, 0x39, 0x3b, 0x78, 0xa7, 0xb0, 0x40, 0x81, 0x13, 0xfb, 0x77, 0xc1, 0xe3, 0x6f, 0x3c, 0x78, 0xc6, 0x7d, 0x65, 0x71, 0x5a, 0x8b, 0x58, /* S */ 0x73, 0x0c, 0x9e, 0x34, 0x83, 0x81, 0x1c, 0x52, 0xcf, 0x29, 0x5b, 0xad, 0x04, 0x2a, 0xcb, 0x5d, 0xd6, 0xee, 0x90, 0x08, 0x38, 0x57, 0xbe, 0xe9, 0x5b, 0x63, 0x92, 0xb0, 0x80, 0xb5, 0x04, 0x1d }; /* [mod = L=3072, N=256, SHA-256] */ static const uint8_t ac_dsa_vect256_prime[] = { /* P */ 0xc7, 0xb8, 0x6d, 0x70, 0x44, 0x21, 0x8e, 0x36, 0x74, 0x53, 0xd2, 0x10, 0xe7, 0x64, 0x33, 0xe4, 0xe2, 0x7a, 0x98, 0x3d, 0xb1, 0xc5, 0x60, 0xbb, 0x97, 0x55, 0xa8, 0xfb, 0x7d, 0x81, 0x99, 0x12, 0xc5, 0x6c, 0xfe, 0x00, 0x2a, 0xb1, 0xff, 0x3f, 0x72, 0x16, 0x5b, 0x94, 0x3c, 0x0b, 0x28, 0xed, 0x46, 0x03, 0x9a, 0x07, 0xde, 0x50, 0x7d, 0x7a, 0x29, 0xf7, 0x38, 0x60, 0x3d, 0xec, 0xd1, 0x27, 0x03, 0x80, 0xa4, 0x1f, 0x97, 0x1f, 0x25, 0x92, 0x66, 0x1a, 0x64, 0xba, 0x2f, 0x35, 0x1d, 0x9a, 0x69, 0xe5, 0x1a, 0x88, 0x8a, 0x05, 0x15, 0x6b, 0x7f, 0xe1, 0x56, 0x3c, 0x4b, 0x77, 0xee, 0x93, 0xa4, 0x49, 0x49, 0x13, 0x84, 0x38, 0xa2, 0xab, 0x8b, 0xdc, 0xfc, 0x49, 0xb4, 0xe7, 0x8d, 0x1c, 0xde, 0x76, 0x6e, 0x54, 0x98, 0x47, 0x60, 0x05, 0x7d, 0x76, 0xcd, 0x74, 0x0c, 0x94, 0xa4, 0xdd, 0x25, 0xa4, 0x6a, 0xa7, 0x7b, 0x18, 0xe9, 0xd7, 0x07, 0xd6, 0x73, 0x84, 0x97, 0xd4, 0xea, 0xc3, 0x64, 0xf4, 0x79, 0x2d, 0x97, 0x66, 0xa1, 0x6a, 0x0e, 0x23, 0x48, 0x07, 0xe9, 0x6b, 0x8c, 0x64, 0xd4, 0x04, 0xbb, 0xdb, 0x87, 0x6e, 0x39, 0xb5, 0x79, 0x9e, 0xf5, 0x3f, 0xe6, 0xcb, 0x9b, 0xab, 0x62, 0xef, 0x19, 0xfd, 0xcc, 0x2b, 0xdd, 0x90, 0x5b, 0xed, 0xa1, 0x3b, 0x9e, 0xf7, 0xac, 0x35, 0xf1, 0xf5, 0x57, 0xcb, 0x0d, 0xc4, 0x58, 0xc0, 0x19, 0xe2, 0xbc, 0x19, 0xa9, 0xf5, 0xdf, 0xc1, 0xe4, 0xec, 0xa9, 0xe6, 0xd4, 0x66, 0x56, 0x41, 0x24, 0x30, 0x4a, 0x31, 0xf0, 0x38, 0x60, 0x5a, 0x3e, 0x34, 0x2d, 0xa0, 0x1b, 0xe1, 0xc2, 0xb5, 0x45, 0x61, 0x0e, 0xdd, 0x2c, 0x13, 0x97, 0xa3, 0xc8, 0x39, 0x65, 0x88, 0xc6, 0x32, 0x9e, 0xfe, 0xb4, 0xe1, 0x65, 0xaf, 0x5b, 0x36, 0x8a, 0x39, 0xa8, 0x8e, 0x48, 0x88, 0xe3, 0x9f, 0x40, 0xbb, 0x3d, 0xe4, 0xeb, 0x14, 0x16, 0x67, 0x2f, 0x99, 0x9f, 0xea, 0xd3, 0x7a, 0xef, 0x1c, 0xa9, 0x64, 0x3f, 0xf3, 0x2c, 0xdb, 0xc0, 0xfc, 0xeb, 0xe6, 0x28, 0xd7, 0xe4, 0x6d, 0x28, 0x1a, 0x98, 0x9d, 0x43, 0xdd, 0x21, 0x43, 0x21, 0x51, 0xaf, 0x68, 0xbe, 0x3f, 0x6d, 0x56, 0xac, 0xfb, 0xdb, 0x6c, 0x97, 0xd8, 0x7f, 0xcb, 0x5e, 0x62, 0x91, 0xbf, 0x8b, 0x4e, 0xe1, 0x27, 0x5a, 0xe0, 0xeb, 0x43, 0x83, 0xcc, 0x75, 0x39, 0x03, 0xc8, 0xd2, 0x9f, 0x4a, 0xdb, 0x6a, 0x54, 0x7e, 0x40, 0x5d, 0xec, 0xdf, 0xf2, 0x88, 0xc5, 0xf6, 0xc7, 0xaa, 0x30, 0xdc, 0xb1, 0x2f, 0x84, 0xd3, 0x92, 0x49, 0x3a, 0x70, 0x93, 0x33, 0x17, 0xc0, 0xf5, 0xe6, 0x55, 0x26, 0x01, 0xfa, 0xe1, 0x8f, 0x17, 0xe6, 0xe5, 0xbb, 0x6b, 0xf3, 0x96, 0xd3, 0x2d, 0x8a, 0xb9 }; static const uint8_t ac_dsa_vect256_sub_prime[] = { /* Q */ 0x87, 0x6f, 0xa0, 0x9e, 0x1d, 0xc6, 0x2b, 0x23, 0x6c, 0xe1, 0xc3, 0x15, 0x5b, 0xa4, 0x8b, 0x0c, 0xcf, 0xda, 0x29, 0xf3, 0xac, 0x5a, 0x97, 0xf7, 0xff, 0xa1, 0xbd, 0x87, 0xb6, 0x8d, 0x2a, 0x4b }; static const uint8_t ac_dsa_vect256_base[] = { /* G */ 0x11, 0x0a, 0xfe, 0xbb, 0x12, 0xc7, 0xf8, 0x62, 0xb6, 0xde, 0x03, 0xd4, 0x7f, 0xdb, 0xc3, 0x32, 0x6e, 0x0d, 0x4d, 0x31, 0xb1, 0x2a, 0x8c, 0xa9, 0x5b, 0x2d, 0xee, 0x21, 0x23, 0xbc, 0xc6, 0x67, 0xd4, 0xf7, 0x2c, 0x1e, 0x72, 0x09, 0x76, 0x7d, 0x27, 0x21, 0xf9, 0x5f, 0xbd, 0x9a, 0x4d, 0x03, 0x23, 0x6d, 0x54, 0x17, 0x4f, 0xbf, 0xaf, 0xf2, 0xc4, 0xff, 0x7d, 0xea, 0xe4, 0x73, 0x8b, 0x20, 0xd9, 0xf3, 0x7b, 0xf0, 0xa1, 0x13, 0x4c, 0x28, 0x8b, 0x42, 0x0a, 0xf0, 0xb5, 0x79, 0x2e, 0x47, 0xa9, 0x25, 0x13, 0xc0, 0x41, 0x3f, 0x34, 0x6a, 0x4e, 0xdb, 0xab, 0x2c, 0x45, 0xbd, 0xca, 0x13, 0xf5, 0x34, 0x1c, 0x2b, 0x55, 0xb8, 0xba, 0x54, 0x93, 0x2b, 0x92, 0x17, 0xb5, 0xa8, 0x59, 0xe5, 0x53, 0xf1, 0x4b, 0xb8, 0xc1, 0x20, 0xfb, 0xb9, 0xd9, 0x99, 0x09, 0xdf, 0xf5, 0xea, 0x68, 0xe1, 0x4b, 0x37, 0x99, 0x64, 0xfd, 0x3f, 0x38, 0x61, 0xe5, 0xba, 0x5c, 0xc9, 0x70, 0xc4, 0xa1, 0x80, 0xee, 0xf5, 0x44, 0x28, 0x70, 0x39, 0x61, 0x02, 0x1e, 0x7b, 0xd6, 0x8c, 0xb6, 0x37, 0x92, 0x7b, 0x8c, 0xbe, 0xe6, 0x80, 0x5f, 0xa2, 0x72, 0x85, 0xbf, 0xee, 0x4d, 0x1e, 0xf7, 0x0e, 0x02, 0xc1, 0xa1, 0x8a, 0x7c, 0xd7, 0x8b, 0xef, 0x1d, 0xd9, 0xcd, 0xad, 0x45, 0xdd, 0xe9, 0xcd, 0x69, 0x07, 0x55, 0x05, 0x0f, 0xc4, 0x66, 0x29, 0x37, 0xee, 0x1d, 0x6f, 0x4d, 0xb1, 0x28, 0x07, 0xcc, 0xc9, 0x5b, 0xc4, 0x35, 0xf1, 0x1b, 0x71, 0xe7, 0x08, 0x60, 0x48, 0xb1, 0xda, 0xb5, 0x91, 0x3c, 0x60, 0x55, 0x01, 0x2d, 0xe8, 0x2e, 0x43, 0xa4, 0xe5, 0x0c, 0xf9, 0x3f, 0xef, 0xf5, 0xdc, 0xab, 0x81, 0x4a, 0xbc, 0x22, 0x4c, 0x5e, 0x00, 0x25, 0xbd, 0x86, 0x8c, 0x3f, 0xc5, 0x92, 0x04, 0x1b, 0xba, 0x04, 0x74, 0x7c, 0x10, 0xaf, 0x51, 0x3f, 0xc3, 0x6e, 0x4d, 0x91, 0xc6, 0x3e, 0xe5, 0x25, 0x34, 0x22, 0xcf, 0x40, 0x63, 0x39, 0x8d, 0x77, 0xc5, 0x2f, 0xcb, 0x01, 0x14, 0x27, 0xcb, 0xfc, 0xfa, 0x67, 0xb1, 0xb2, 0xc2, 0xd1, 0xaa, 0x4a, 0x3d, 0xa7, 0x26, 0x45, 0xcb, 0x1c, 0x76, 0x70, 0x36, 0x05, 0x4e, 0x2f, 0x31, 0xf8, 0x86, 0x65, 0xa5, 0x44, 0x61, 0xc8, 0x85, 0xfb, 0x32, 0x19, 0xd5, 0xad, 0x87, 0x48, 0xa0, 0x11, 0x58, 0xf6, 0xc7, 0xc0, 0xdf, 0x5a, 0x8c, 0x90, 0x8b, 0xa8, 0xc3, 0xe5, 0x36, 0x82, 0x24, 0x28, 0x88, 0x6c, 0x7b, 0x50, 0x0b, 0xbc, 0x15, 0xb4, 0x9d, 0xf7, 0x46, 0xb9, 0xde, 0x5a, 0x78, 0xfe, 0x3b, 0x4f, 0x69, 0x91, 0xd0, 0x11, 0x0c, 0x3c, 0xbf, 0xf4, 0x58, 0x03, 0x9d, 0xc3, 0x62, 0x61, 0xcf, 0x46, 0xaf, 0x4b, 0xc2, 0x51, 0x53, 0x68, 0xf4, 0xab, 0xb7 }; static const uint8_t ac_dsa_vect256_ptx[] = { /* Msg */ 0xcb, 0x06, 0xe0, 0x22, 0x34, 0x26, 0x3c, 0x22, 0xb8, 0x0e, 0x83, 0x2d, 0x6d, 0xc5, 0xa1, 0xbe, 0xe5, 0xea, 0x8a, 0xf3, 0xbc, 0x2d, 0xa7, 0x52, 0x44, 0x1c, 0x04, 0x02, 0x7f, 0x17, 0x61, 0x58, 0xbf, 0xe6, 0x83, 0x72, 0xbd, 0x67, 0xf8, 0x4d, 0x48, 0x9c, 0x0d, 0x49, 0xb0, 0x7d, 0x40, 0x25, 0x96, 0x29, 0x76, 0xbe, 0x60, 0x43, 0x7b, 0xe1, 0xa2, 0xd0, 0x1d, 0x3b, 0xe0, 0x99, 0x2a, 0xfa, 0x5a, 0xbe, 0x09, 0x80, 0xe2, 0x6a, 0x9d, 0xa4, 0xae, 0x72, 0xf8, 0x27, 0xb4, 0x23, 0x66, 0x51, 0x95, 0xcc, 0x4e, 0xed, 0x6f, 0xe8, 0x5c, 0x33, 0x5b, 0x32, 0xd9, 0xc0, 0x3c, 0x94, 0x5a, 0x86, 0xe7, 0xfa, 0x99, 0x37, 0x3f, 0x0a, 0x30, 0xc6, 0xec, 0xa9, 0x38, 0xb3, 0xaf, 0xb6, 0xdf, 0xf6, 0x7a, 0xdb, 0x8b, 0xec, 0xe6, 0xf8, 0xcf, 0xec, 0x4b, 0x6a, 0x12, 0xea, 0x28, 0x1e, 0x23, 0x23 }; static const uint8_t ac_dsa_vect256_priv_val[] = { /* X */ 0x34, 0x70, 0x83, 0x20, 0x55, 0xda, 0xde, 0x94, 0xe1, 0x4c, 0xd8, 0x77, 0x71, 0x71, 0xd1, 0x8e, 0x5d, 0x06, 0xf6, 0x6a, 0xef, 0xf4, 0xc6, 0x14, 0x71, 0xe4, 0xeb, 0xa7, 0x4e, 0xe5, 0x61, 0x64 }; static const uint8_t ac_dsa_vect256_pub_val[] = { /* Y */ 0x45, 0x6a, 0x10, 0x5c, 0x71, 0x35, 0x66, 0x23, 0x48, 0x38, 0xbc, 0x07, 0x0b, 0x8a, 0x75, 0x1a, 0x0b, 0x57, 0x76, 0x7c, 0xb7, 0x5e, 0x99, 0x11, 0x4a, 0x1a, 0x46, 0x64, 0x1e, 0x11, 0xda, 0x1f, 0xa9, 0xf2, 0x29, 0x14, 0xd8, 0x08, 0xad, 0x71, 0x48, 0x61, 0x2c, 0x1e, 0xa5, 0x5d, 0x25, 0x30, 0x17, 0x81, 0xe9, 0xae, 0x0c, 0x9a, 0xe3, 0x6a, 0x69, 0xd8, 0x7b, 0xa0, 0x39, 0xec, 0x7c, 0xd8, 0x64, 0xc3, 0xad, 0x09, 0x48, 0x73, 0xe6, 0xe5, 0x67, 0x09, 0xfd, 0x10, 0xd9, 0x66, 0x85, 0x3d, 0x61, 0x1b, 0x1c, 0xff, 0x15, 0xd3, 0x7f, 0xde, 0xe4, 0x24, 0x50, 0x6c, 0x18, 0x4d, 0x62, 0xc7, 0x03, 0x33, 0x58, 0xbe, 0x78, 0xc2, 0x25, 0x09, 0x43, 0xb6, 0xf6, 0xd0, 0x43, 0xd6, 0x3b, 0x31, 0x7d, 0xe5, 0x6e, 0x5a, 0xd8, 0xd1, 0xfd, 0x97, 0xdd, 0x35, 0x5a, 0xbe, 0x96, 0x45, 0x2f, 0x8e, 0x43, 0x54, 0x85, 0xfb, 0x3b, 0x90, 0x7b, 0x51, 0x90, 0x0a, 0xa3, 0xf2, 0x44, 0x18, 0xdf, 0x50, 0xb4, 0xfc, 0xda, 0xfb, 0xf6, 0x13, 0x75, 0x48, 0xc3, 0x93, 0x73, 0xb8, 0xbc, 0x4b, 0xa3, 0xda, 0xbb, 0x47, 0x46, 0xeb, 0xd1, 0x7b, 0x87, 0xfc, 0xd6, 0xa2, 0xf1, 0x97, 0xc1, 0x07, 0xb1, 0x8e, 0xc5, 0xb4, 0x65, 0xe6, 0xe4, 0xcb, 0x43, 0x0d, 0x9c, 0x0c, 0xe7, 0x8d, 0xa5, 0x98, 0x84, 0x41, 0x05, 0x4a, 0x37, 0x07, 0x92, 0xb7, 0x30, 0xda, 0x9a, 0xba, 0x41, 0xa3, 0x16, 0x9a, 0xf2, 0x61, 0x76, 0xf7, 0x4e, 0x6f, 0x7c, 0x0c, 0x9c, 0x9b, 0x55, 0xb6, 0x2b, 0xbe, 0x7c, 0xe3, 0x8d, 0x46, 0x95, 0xd4, 0x81, 0x57, 0xe6, 0x60, 0xc2, 0xac, 0xb6, 0x3f, 0x48, 0x2f, 0x55, 0x41, 0x81, 0x50, 0xe5, 0xfe, 0xe4, 0x3a, 0xce, 0x84, 0xc5, 0x40, 0xc3, 0xba, 0x76, 0x62, 0xae, 0x80, 0x83, 0x5c, 0x1a, 0x2d, 0x51, 0x89, 0x0e, 0xa9, 0x6b, 0xa2, 0x06, 0x42, 0x7c, 0x41, 0xef, 0x8c, 0x38, 0xaa, 0x07, 0xd2, 0xa3, 0x65, 0xe7, 0xe5, 0x83, 0x80, 0xd8, 0xf4, 0x78, 0x2e, 0x22, 0xac, 0x21, 0x01, 0xaf, 0x73, 0x2e, 0xe2, 0x27, 0x58, 0x33, 0x7b, 0x25, 0x36, 0x37, 0x83, 0x8e, 0x16, 0xf5, 0x0f, 0x56, 0xd3, 0x13, 0xd0, 0x79, 0x81, 0x88, 0x0d, 0x68, 0x55, 0x57, 0xf7, 0xd7, 0x9a, 0x6d, 0xb8, 0x23, 0xc6, 0x1f, 0x1b, 0xb3, 0xdb, 0xc5, 0xd5, 0x04, 0x21, 0xa4, 0x84, 0x3a, 0x6f, 0x29, 0x69, 0x0e, 0x78, 0xaa, 0x0f, 0x0c, 0xff, 0x30, 0x42, 0x31, 0x81, 0x8b, 0x81, 0xfc, 0x4a, 0x24, 0x3f, 0xc0, 0x0f, 0x09, 0xa5, 0x4c, 0x46, 0x6d, 0x6a, 0x8c, 0x73, 0xd3, 0x2a, 0x55, 0xe1, 0xab, 0xd5, 0xec, 0x8b, 0x4e, 0x1a, 0xfa, 0x32, 0xa7, 0x9b, 0x01, 0xdf, 0x85, 0xa8, 0x1f, 0x3f, 0x5c, 0xfe }; /* K = 3d7c068a3978b2d8fe9034bcad65ad7c300c4440e4085de280e577eea72c1207 */ static const uint8_t ac_dsa_vect256_out[] = { /* R */ 0x53, 0xba, 0xe6, 0xc6, 0xf3, 0x36, 0xe2, 0xeb, 0x31, 0x1c, 0x1e, 0x92, 0xd9, 0x5f, 0xc4, 0x49, 0xa9, 0x29, 0x44, 0x4e, 0xf8, 0x1e, 0xc4, 0x27, 0x96, 0x60, 0xb2, 0x00, 0xd5, 0x94, 0x33, 0xde, /* S */ 0x49, 0xf3, 0xa7, 0x4e, 0x95, 0x3e, 0x77, 0xa7, 0x94, 0x1a, 0xf3, 0xae, 0xfe, 0xef, 0x4e, 0xd4, 0x99, 0xbe, 0x20, 0x99, 0x76, 0xa0, 0xed, 0xb3, 0xfa, 0x5e, 0x7c, 0xb9, 0x61, 0xb0, 0xc1, 0x12 }; #define ac_dsa_vect257_prime ac_dsa_vect256_prime #define ac_dsa_vect257_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect257_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect257_ptx[] = { /* Msg */ 0x06, 0x61, 0xc1, 0xbf, 0x79, 0xee, 0xd7, 0x8a, 0xd4, 0x87, 0x9e, 0x24, 0x0a, 0x46, 0xb9, 0x5a, 0x0d, 0xb2, 0xb2, 0x9b, 0xf8, 0x12, 0x63, 0xb9, 0xb1, 0x67, 0x6d, 0xaa, 0x25, 0x54, 0xaa, 0xd7, 0x22, 0x2c, 0x9e, 0xb7, 0xa8, 0x93, 0x04, 0x8e, 0x46, 0xfb, 0xd2, 0x82, 0x6a, 0xb6, 0xe8, 0xcf, 0x42, 0xab, 0x0c, 0xd6, 0x31, 0xc4, 0xc4, 0xa1, 0xa8, 0x19, 0x56, 0x0f, 0x73, 0xcc, 0x86, 0x1a, 0x5b, 0x64, 0x65, 0xcf, 0x28, 0x80, 0xa7, 0x30, 0x63, 0x5e, 0xd7, 0xf4, 0x9e, 0x28, 0xf7, 0xb5, 0x65, 0x76, 0x8f, 0x02, 0x9d, 0xb2, 0xa4, 0x43, 0xba, 0x0a, 0x1b, 0xd1, 0x07, 0x73, 0xf2, 0x6f, 0x75, 0x2c, 0x83, 0xda, 0x40, 0xfc, 0xd3, 0x3f, 0x32, 0xf7, 0x8d, 0x24, 0xac, 0x98, 0x20, 0xd0, 0xbf, 0x70, 0xda, 0xe5, 0x68, 0xa1, 0x25, 0x38, 0xaf, 0xfa, 0x86, 0x71, 0x60, 0xc8, 0x1e, 0x39 }; static const uint8_t ac_dsa_vect257_priv_val[] = { /* X */ 0x80, 0x76, 0x75, 0xfb, 0xaa, 0xf0, 0xb6, 0xd6, 0xba, 0x3d, 0x82, 0x06, 0x3c, 0xc0, 0x73, 0x27, 0xcc, 0xa3, 0xf3, 0x52, 0x2d, 0x39, 0x6f, 0xe5, 0xd2, 0xc6, 0x59, 0x90, 0x45, 0xd6, 0x68, 0xc5 }; static const uint8_t ac_dsa_vect257_pub_val[] = { /* Y */ 0x54, 0xb6, 0x81, 0x80, 0x54, 0xcc, 0x00, 0x0c, 0x3a, 0xf6, 0x1b, 0x62, 0xef, 0x41, 0x89, 0xba, 0x35, 0xe0, 0x48, 0x45, 0xde, 0xe0, 0x01, 0x5b, 0xe6, 0x27, 0x33, 0x92, 0xc6, 0x73, 0x32, 0xe2, 0xe0, 0x45, 0x10, 0xcd, 0x5b, 0x2b, 0xbf, 0x47, 0x23, 0xcd, 0x81, 0x96, 0xe0, 0x25, 0x51, 0x1f, 0x66, 0x23, 0xf0, 0x36, 0x07, 0xe5, 0x66, 0x48, 0x4c, 0x33, 0x07, 0x51, 0xd0, 0x3c, 0x71, 0x30, 0x68, 0xa7, 0x7e, 0x08, 0xbd, 0xe9, 0x07, 0xfc, 0x57, 0xb3, 0xc0, 0x21, 0xe3, 0x73, 0x03, 0x37, 0x3d, 0x9d, 0x81, 0x1e, 0x38, 0xf1, 0x4b, 0x54, 0x7d, 0x2b, 0xd8, 0x7d, 0x98, 0x12, 0x69, 0xc6, 0x77, 0xda, 0xc6, 0xad, 0xe6, 0xac, 0xbb, 0xae, 0x30, 0x14, 0xeb, 0xd3, 0x81, 0xb4, 0x00, 0x86, 0x37, 0x03, 0x1c, 0x9b, 0x6d, 0x49, 0xca, 0x90, 0x87, 0x65, 0x47, 0x2b, 0x05, 0x96, 0x2f, 0x55, 0xaa, 0x36, 0x1f, 0x7d, 0xd5, 0xa4, 0x26, 0x07, 0x05, 0xff, 0x5e, 0xcf, 0x7b, 0x31, 0x7d, 0xb1, 0xfe, 0x5d, 0x33, 0xfd, 0xbf, 0x48, 0xe6, 0xa3, 0x3b, 0x3c, 0x78, 0xb1, 0x4e, 0x62, 0x0d, 0x93, 0x80, 0x6b, 0x52, 0xe8, 0x6e, 0x08, 0x2f, 0xe4, 0xf5, 0x4d, 0x52, 0x65, 0xe8, 0xdf, 0x62, 0x3b, 0x0c, 0x9a, 0x25, 0x9f, 0x61, 0xb7, 0xfa, 0x2c, 0x04, 0x55, 0xfa, 0xdf, 0x39, 0x69, 0x3e, 0xf3, 0x97, 0x74, 0x40, 0xf3, 0x02, 0x06, 0x7c, 0x3a, 0xff, 0xbc, 0x45, 0x74, 0x22, 0x4d, 0x5a, 0x22, 0x04, 0x4e, 0x9b, 0xfe, 0x11, 0xd0, 0xd6, 0xed, 0xe2, 0x73, 0x9c, 0x7f, 0xfe, 0x92, 0x77, 0xc8, 0x64, 0x4d, 0x46, 0xbe, 0xec, 0xb9, 0x46, 0xf8, 0x17, 0x75, 0xc1, 0x16, 0x38, 0x8f, 0xd6, 0xc2, 0x4a, 0xf0, 0x2e, 0xc5, 0x9f, 0x62, 0x12, 0x33, 0xef, 0xe8, 0x79, 0x2d, 0x6d, 0x0c, 0xd2, 0xc8, 0x43, 0x33, 0xb1, 0x1f, 0x07, 0x65, 0x73, 0x33, 0xda, 0x4e, 0x27, 0x4b, 0x8c, 0xd3, 0x91, 0x4d, 0x97, 0x77, 0x06, 0xe7, 0x86, 0xf3, 0x25, 0xe1, 0x8a, 0x33, 0x9b, 0x80, 0x5c, 0x51, 0xb4, 0x5e, 0xac, 0xb3, 0xce, 0x24, 0x18, 0x45, 0x97, 0x0a, 0xcb, 0x9f, 0xd1, 0xa4, 0x82, 0xa5, 0x64, 0xb2, 0xae, 0xec, 0xda, 0xeb, 0x0a, 0x0d, 0xb3, 0x9f, 0x33, 0xad, 0x29, 0x91, 0xf2, 0x5c, 0xf6, 0x22, 0xbf, 0x22, 0xf0, 0xc4, 0x43, 0x0c, 0xf9, 0x4d, 0xf1, 0xdb, 0x59, 0xaa, 0x2d, 0x7c, 0x20, 0x04, 0xb5, 0x17, 0x7b, 0x9e, 0xa6, 0x9f, 0xf5, 0x56, 0xdd, 0x4c, 0x07, 0xed, 0xec, 0x62, 0x59, 0xee, 0x13, 0x9b, 0x42, 0x15, 0x73, 0xa1, 0x1c, 0xf8, 0x5d, 0x11, 0xe2, 0x45, 0xe2, 0x51, 0x19, 0x0b, 0xa8, 0x69, 0xc9, 0xcb, 0x4d, 0xaf, 0x9f, 0x49, 0x45, 0x1a, 0x85, 0xf3, 0x8b, 0x9b, 0x90, 0x3e }; /* K = 6215e72ef2d6f6e040b7b6ef4cf566a21fcc4f37783a68db445c1ddf3042a150 */ static const uint8_t ac_dsa_vect257_out[] = { /* R */ 0x51, 0x9f, 0xe4, 0xc5, 0xf9, 0xb7, 0x70, 0x7a, 0xe4, 0xb3, 0x62, 0x17, 0xea, 0x17, 0x07, 0xa1, 0x87, 0x1d, 0x8f, 0xce, 0x98, 0xee, 0xe9, 0xe6, 0x43, 0xc4, 0x5c, 0xd3, 0xeb, 0x50, 0xc5, 0xd3, /* S */ 0x1d, 0xf2, 0x24, 0xaf, 0x0b, 0x51, 0x51, 0x9e, 0x11, 0xd8, 0x42, 0x29, 0x99, 0xb1, 0xd3, 0xab, 0x09, 0x72, 0x06, 0x41, 0x80, 0xff, 0xc3, 0xf1, 0x11, 0x4c, 0x9f, 0x87, 0x6a, 0x1d, 0xe3, 0xb1 }; #define ac_dsa_vect258_prime ac_dsa_vect256_prime #define ac_dsa_vect258_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect258_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect258_ptx[] = { /* Msg */ 0x15, 0x97, 0x35, 0x3f, 0x24, 0xaa, 0xf5, 0x15, 0xfd, 0x7c, 0x0b, 0x0a, 0x74, 0x53, 0x44, 0x4d, 0x5f, 0x32, 0x9d, 0x6c, 0x3f, 0x09, 0x91, 0x13, 0xbb, 0x3a, 0x13, 0x30, 0x9b, 0x05, 0x3e, 0x6c, 0x12, 0x3a, 0x56, 0x22, 0x7a, 0x81, 0xe8, 0xb1, 0xa0, 0xc8, 0xab, 0x4b, 0x46, 0x16, 0x0c, 0xc5, 0x38, 0x0d, 0xf5, 0x91, 0xb1, 0x9d, 0x8a, 0x38, 0x6d, 0x29, 0xa8, 0xe4, 0x3c, 0xca, 0xb5, 0xd8, 0xc0, 0xe5, 0x47, 0xfb, 0xa2, 0x1b, 0xff, 0xcf, 0x5e, 0xf4, 0x2e, 0xfb, 0x9f, 0xb2, 0xe9, 0xbe, 0x62, 0x97, 0xc0, 0x3d, 0x57, 0xda, 0x0b, 0x58, 0x89, 0xb3, 0xb9, 0x74, 0x2d, 0xdc, 0x2c, 0x54, 0xb8, 0x37, 0x3f, 0xed, 0x1f, 0x21, 0x95, 0xf5, 0xbb, 0x23, 0x29, 0xa8, 0xf1, 0xf3, 0xf8, 0xaf, 0xce, 0xc2, 0x5e, 0xb1, 0x52, 0xe7, 0xfa, 0x81, 0x9e, 0x5d, 0x36, 0xcf, 0xd3, 0x62, 0x52, 0x39 }; static const uint8_t ac_dsa_vect258_priv_val[] = { /* X */ 0x16, 0x9b, 0x11, 0xd0, 0x3c, 0xba, 0x7e, 0x81, 0x7d, 0xa2, 0x7d, 0x88, 0x9c, 0xdb, 0x14, 0x7a, 0xe9, 0xcb, 0x04, 0x59, 0x35, 0x9b, 0xbf, 0x85, 0xa3, 0x67, 0xc6, 0x4c, 0x2a, 0xb5, 0x56, 0xad }; static const uint8_t ac_dsa_vect258_pub_val[] = { /* Y */ 0x50, 0x62, 0xaa, 0x1f, 0xdc, 0x67, 0x29, 0x4c, 0xd5, 0x76, 0x23, 0xce, 0xdd, 0x28, 0x08, 0x30, 0x3c, 0xeb, 0x43, 0x53, 0x7e, 0x3a, 0xbf, 0xa1, 0xbd, 0xbc, 0x49, 0x2b, 0x1a, 0xee, 0xce, 0xe6, 0x1b, 0x1f, 0xd9, 0x6c, 0xc0, 0x55, 0xd1, 0x45, 0x9a, 0xb5, 0x2d, 0xdc, 0x3f, 0x23, 0x44, 0x38, 0x9e, 0x5f, 0x21, 0x44, 0x8a, 0x90, 0xcb, 0x36, 0xe4, 0x48, 0xe6, 0x07, 0x87, 0xb1, 0xff, 0x5a, 0xb6, 0xe5, 0x54, 0x9a, 0x39, 0x21, 0x49, 0x6e, 0x83, 0x54, 0x64, 0x6b, 0xc1, 0xfd, 0x6c, 0xd5, 0xf2, 0x35, 0x9a, 0xe2, 0x99, 0xc0, 0xa0, 0x47, 0xfa, 0xc3, 0x92, 0x05, 0x12, 0xa1, 0xf4, 0x11, 0xc4, 0x38, 0xba, 0xfd, 0x03, 0xe9, 0x5e, 0x53, 0x8c, 0x6e, 0x21, 0xd1, 0xdd, 0x1f, 0x15, 0xa8, 0x9d, 0x38, 0xd4, 0x8f, 0x26, 0x30, 0x5c, 0x25, 0x34, 0xfa, 0x8e, 0x31, 0xd0, 0x54, 0xdc, 0xb0, 0x07, 0x74, 0x13, 0x8f, 0xb8, 0xfc, 0x61, 0xc6, 0xa8, 0xd4, 0xae, 0x1c, 0xa4, 0x64, 0x30, 0xd0, 0xe3, 0x1b, 0x4b, 0x92, 0xdf, 0xb1, 0x5b, 0xd6, 0xb8, 0x73, 0x9f, 0xd5, 0x37, 0x10, 0x1e, 0x77, 0x33, 0x4e, 0x6f, 0x3c, 0xe5, 0x46, 0x9e, 0x82, 0xa8, 0xdb, 0xc5, 0x8b, 0x3b, 0xe5, 0xca, 0x37, 0x03, 0x59, 0xf4, 0xa6, 0x13, 0x2f, 0xe0, 0x33, 0x60, 0xb8, 0xf6, 0xbe, 0x24, 0x8c, 0x34, 0x22, 0x0a, 0x80, 0x03, 0x77, 0x26, 0x48, 0x66, 0x40, 0x59, 0xf1, 0xf6, 0xa3, 0x22, 0xe0, 0xc1, 0x22, 0xf4, 0x27, 0xef, 0xdb, 0x7d, 0x64, 0x0e, 0xb5, 0xbb, 0x7f, 0x3d, 0xb2, 0xd9, 0x67, 0xa2, 0x15, 0x90, 0x92, 0xd8, 0xf8, 0xdf, 0x33, 0x3f, 0xf5, 0xba, 0x13, 0x56, 0x02, 0xb9, 0xee, 0x7e, 0x9d, 0xb6, 0xae, 0x0b, 0x95, 0x88, 0x6d, 0xf3, 0x8d, 0x4b, 0x4a, 0x26, 0xa4, 0xb2, 0xd7, 0x90, 0xc2, 0x4f, 0xa2, 0x14, 0xcd, 0x68, 0xd0, 0xa7, 0xed, 0xe6, 0x3e, 0x7d, 0xfa, 0xca, 0xea, 0xe1, 0x4d, 0x97, 0x85, 0xbe, 0x69, 0x3a, 0xd7, 0x8d, 0x88, 0x24, 0x2d, 0xfa, 0xd9, 0x88, 0xb7, 0x12, 0x2a, 0xdf, 0x5a, 0xfa, 0x9e, 0xfd, 0xd0, 0xc2, 0x04, 0x74, 0x70, 0xc6, 0x07, 0xd4, 0x7b, 0x30, 0x08, 0x9f, 0xf8, 0xbf, 0xc4, 0xcf, 0x5d, 0x7a, 0x8b, 0xa6, 0x9a, 0x7d, 0x0a, 0xb6, 0xc5, 0x4c, 0x05, 0x28, 0x0d, 0x66, 0xaa, 0x40, 0x19, 0xf6, 0x36, 0x2e, 0xa2, 0x4a, 0x1d, 0x3f, 0x8f, 0xcd, 0x80, 0xc3, 0xeb, 0x20, 0x83, 0x1b, 0x6e, 0x0d, 0xb0, 0x10, 0xfa, 0xf8, 0x26, 0x48, 0x8f, 0x01, 0x5f, 0x63, 0xf0, 0xb9, 0xac, 0x6d, 0xf7, 0x28, 0x83, 0xef, 0xd2, 0x86, 0xf0, 0x53, 0x2b, 0x5b, 0xef, 0xf1, 0xb9, 0xe8, 0x10, 0xff, 0x6a, 0x2b, 0x2d, 0x32, 0x8a, 0xf6, 0x75, 0xea, 0xfc, 0x2f, 0x56 }; /* K = 467e04dcd564f36cfe47c8fb9fa09cb142a99417a61797e047fcfd51e16e3e00 */ static const uint8_t ac_dsa_vect258_out[] = { /* R */ 0x05, 0x02, 0xa6, 0xe1, 0xd8, 0xc8, 0xdf, 0xdf, 0x56, 0xeb, 0x67, 0xf9, 0xa6, 0xf6, 0x60, 0x57, 0x35, 0xe4, 0xd1, 0xb0, 0x07, 0x6c, 0x8b, 0x08, 0xb6, 0x1d, 0xaf, 0x8e, 0x7c, 0x2b, 0xf2, 0xd6, /* S */ 0x7c, 0x67, 0xab, 0xdc, 0xf4, 0xe5, 0x80, 0x81, 0x2b, 0x13, 0xd0, 0xa4, 0xed, 0xba, 0xe8, 0xa2, 0x78, 0x6d, 0x66, 0x12, 0xbc, 0x86, 0x6e, 0x3c, 0x13, 0xbc, 0x09, 0xf3, 0xe9, 0x66, 0x16, 0xe0 }; #define ac_dsa_vect259_prime ac_dsa_vect256_prime #define ac_dsa_vect259_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect259_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect259_ptx[] = { /* Msg */ 0x71, 0x5f, 0x29, 0x69, 0x30, 0x31, 0x23, 0x68, 0xa2, 0xa9, 0x8d, 0x3f, 0x42, 0x81, 0x0d, 0xa5, 0x71, 0x15, 0xf0, 0x0f, 0xfc, 0x4a, 0x12, 0x02, 0x9c, 0x27, 0x6b, 0x10, 0x62, 0x9e, 0x6b, 0xdd, 0xd6, 0x0b, 0xca, 0x2c, 0x53, 0x5b, 0x79, 0xa5, 0xf4, 0xa0, 0x06, 0x81, 0x77, 0x91, 0xf7, 0xf3, 0xad, 0x2e, 0x01, 0xa0, 0x02, 0x16, 0x67, 0x2e, 0xe5, 0xad, 0xec, 0x57, 0x9d, 0xeb, 0x07, 0xe9, 0xd2, 0xb0, 0xdb, 0x22, 0x2c, 0x4e, 0x01, 0xe1, 0xf8, 0x19, 0xc1, 0xa5, 0x2d, 0x10, 0x1b, 0x1e, 0xf6, 0x78, 0xcf, 0xca, 0x85, 0x65, 0x5d, 0xd6, 0xb2, 0x42, 0x6f, 0x1a, 0xc3, 0x79, 0xa9, 0x2a, 0x9c, 0x69, 0xb0, 0xf8, 0x98, 0x74, 0x32, 0xd1, 0x09, 0xcd, 0x9a, 0x7b, 0xc0, 0x4e, 0xf2, 0x87, 0xc2, 0xaf, 0xb6, 0x63, 0x44, 0x46, 0x88, 0x60, 0x1c, 0xe3, 0xc5, 0x5f, 0xd9, 0x0d, 0x0f, 0xa3 }; static const uint8_t ac_dsa_vect259_priv_val[] = { /* X */ 0x4e, 0xe8, 0x0e, 0x4c, 0xf4, 0x6b, 0x4e, 0x07, 0x2e, 0x97, 0x68, 0x93, 0xa2, 0xd1, 0xe3, 0x4c, 0x03, 0xd2, 0x0f, 0x3a, 0xa1, 0x78, 0x5a, 0x74, 0x56, 0x4d, 0x6b, 0x46, 0x54, 0xb1, 0x1a, 0x54 }; static const uint8_t ac_dsa_vect259_pub_val[] = { /* Y */ 0xb6, 0x33, 0x40, 0xd6, 0xa1, 0x95, 0x57, 0x31, 0x28, 0x30, 0x64, 0xf6, 0xf2, 0x2a, 0xd7, 0xf0, 0xe2, 0x81, 0x99, 0xf6, 0xa5, 0x8c, 0x57, 0xdd, 0xcb, 0x44, 0xa0, 0x26, 0xc6, 0x1e, 0x44, 0x13, 0x18, 0xc4, 0xf8, 0x75, 0x5d, 0xfd, 0x71, 0xb2, 0x95, 0xe9, 0xe7, 0xba, 0xbe, 0x00, 0x08, 0x49, 0xc9, 0x72, 0xf6, 0x8d, 0x4b, 0xe0, 0x09, 0x54, 0xa3, 0xc2, 0x9c, 0xd4, 0xb4, 0xe8, 0x3a, 0xd5, 0x18, 0x30, 0x08, 0x0e, 0x29, 0xe7, 0x61, 0x9e, 0x45, 0xd3, 0xab, 0xbf, 0x9d, 0x82, 0xfd, 0x87, 0xe9, 0x75, 0x81, 0xfe, 0x90, 0x9d, 0x3d, 0xa1, 0xe3, 0xe9, 0x6c, 0xb3, 0xf0, 0xc8, 0x93, 0xaf, 0x9d, 0x07, 0xf4, 0x18, 0xdf, 0x90, 0x2e, 0x76, 0xb0, 0xbb, 0xc1, 0xc9, 0x71, 0x39, 0xcb, 0xd5, 0x12, 0x26, 0xac, 0x44, 0x2b, 0x3d, 0x0b, 0x05, 0x25, 0xc7, 0x84, 0xba, 0x13, 0x81, 0x31, 0x42, 0x1c, 0x60, 0x54, 0x3e, 0x6e, 0x29, 0x60, 0x69, 0xf6, 0x11, 0xb9, 0xc3, 0x7c, 0xf6, 0x03, 0x06, 0x36, 0xee, 0xca, 0xf4, 0x1c, 0x3b, 0x48, 0x38, 0xf5, 0x06, 0xc0, 0x2c, 0xc8, 0x4c, 0xde, 0x6b, 0x99, 0xca, 0xbd, 0x2c, 0xa5, 0x78, 0x44, 0x9c, 0xc1, 0x71, 0x8a, 0xa4, 0x18, 0xca, 0x12, 0xa2, 0xb7, 0x6f, 0x78, 0x25, 0x9c, 0x16, 0x91, 0xe0, 0xb4, 0x9f, 0x09, 0xdb, 0xda, 0xf5, 0x85, 0xf6, 0x26, 0xcf, 0x74, 0xd7, 0x32, 0x12, 0xb3, 0x42, 0x78, 0x45, 0xc6, 0x6f, 0x22, 0x83, 0xb6, 0x07, 0x03, 0xad, 0xf1, 0xa2, 0x62, 0xbb, 0x8b, 0x10, 0xac, 0x7a, 0xc5, 0xd1, 0xec, 0x73, 0x61, 0x4f, 0xdd, 0x37, 0xee, 0x51, 0xb7, 0x1c, 0xd1, 0xfb, 0x4e, 0x6d, 0xb8, 0x93, 0x83, 0x82, 0x64, 0x3c, 0x72, 0x1f, 0xbc, 0x4c, 0xfc, 0x98, 0x7b, 0xc5, 0xef, 0xbc, 0x81, 0x29, 0x9b, 0x37, 0x5a, 0x56, 0x0c, 0xde, 0x5a, 0xda, 0xe6, 0x28, 0x31, 0xca, 0x41, 0x38, 0xc3, 0x99, 0xd8, 0x2f, 0x1f, 0x8b, 0xc6, 0x80, 0xf9, 0xc6, 0xb4, 0x7e, 0xb4, 0x64, 0xa1, 0xe0, 0xaa, 0xc4, 0x48, 0xfe, 0x3b, 0x5c, 0x25, 0xbd, 0x8c, 0x0b, 0x7a, 0xfb, 0x70, 0x1b, 0x06, 0x80, 0xdb, 0x87, 0xab, 0x51, 0x73, 0x8f, 0x19, 0xf5, 0xb9, 0x65, 0x37, 0x5d, 0xd4, 0x8d, 0xac, 0xa0, 0x7b, 0xff, 0x38, 0x85, 0x63, 0x21, 0x75, 0x70, 0x0c, 0x67, 0x86, 0x19, 0xf1, 0x94, 0xe4, 0xee, 0x5f, 0x55, 0xaa, 0x44, 0x8a, 0xec, 0xa7, 0xf7, 0xb3, 0x32, 0x2f, 0x64, 0xa5, 0x47, 0x31, 0x5c, 0x5c, 0xee, 0x04, 0x51, 0x22, 0x54, 0x9f, 0xb3, 0x8b, 0x8a, 0xcc, 0x95, 0xda, 0x5e, 0x83, 0x30, 0x22, 0xb3, 0xb8, 0x94, 0xf0, 0x3c, 0xcb, 0x7f, 0x73, 0xb9, 0x1c, 0x1f, 0xe8, 0x2c, 0xe4, 0x14, 0xe1, 0x21, 0x94, 0x11, 0x78, 0x0e }; /* K = 3d7728ce25def9a31dfbe442fef8b162b30544065d9cb7bcc4914662a282bc10 */ static const uint8_t ac_dsa_vect259_out[] = { /* R */ 0x4c, 0x5e, 0x99, 0x0a, 0x6e, 0x24, 0xfe, 0xdd, 0xab, 0x48, 0xd0, 0xaf, 0x4a, 0x08, 0xb4, 0x5a, 0xe8, 0x09, 0x25, 0x94, 0xbf, 0xb3, 0xc0, 0x12, 0xfa, 0x1c, 0x32, 0x5c, 0x97, 0x7a, 0x3c, 0xc0, /* S */ 0x82, 0x0b, 0x6c, 0xaf, 0xa8, 0x9b, 0x41, 0xc4, 0xcc, 0xbe, 0xc8, 0x42, 0xd7, 0xc4, 0x08, 0xc6, 0x5d, 0x49, 0x98, 0xab, 0x1a, 0xc6, 0xb6, 0xbc, 0xe8, 0xd4, 0xd5, 0x69, 0xcd, 0xf0, 0x47, 0x26 }; #define ac_dsa_vect260_prime ac_dsa_vect256_prime #define ac_dsa_vect260_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect260_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect260_ptx[] = { /* Msg */ 0x1f, 0xe5, 0xad, 0x49, 0xe1, 0x1c, 0x20, 0x7d, 0x3d, 0x5e, 0x19, 0x23, 0x06, 0x08, 0x32, 0xaf, 0xbf, 0xc0, 0xaa, 0x0c, 0xb2, 0x9f, 0xc0, 0xb2, 0x2b, 0x3b, 0xe5, 0x9a, 0x59, 0x8f, 0x8c, 0x70, 0x3b, 0x9b, 0xf2, 0xc7, 0x34, 0x7f, 0x8a, 0xbd, 0xe2, 0x56, 0x77, 0xea, 0x9c, 0xc6, 0x0a, 0xf9, 0x30, 0x7d, 0x21, 0xd3, 0x01, 0xfd, 0xd2, 0x3c, 0x28, 0x27, 0x7f, 0xce, 0x11, 0x40, 0x03, 0x10, 0x03, 0x39, 0x62, 0xc0, 0x4e, 0xcd, 0x37, 0x7f, 0xd4, 0x46, 0x35, 0x8a, 0x34, 0x49, 0xef, 0xd6, 0xbc, 0x05, 0x72, 0x1b, 0x78, 0x4d, 0xdf, 0x0e, 0x23, 0x8f, 0x28, 0x60, 0x8e, 0x86, 0xbd, 0x4c, 0x3d, 0x7a, 0xc6, 0x31, 0xff, 0xf8, 0xbe, 0x06, 0x78, 0xd3, 0x7b, 0xfb, 0xac, 0x16, 0xb7, 0x5b, 0xc1, 0x5a, 0x50, 0xce, 0x13, 0x97, 0xdd, 0x4b, 0xa3, 0xbf, 0xfc, 0xf9, 0x4d, 0x34, 0x12, 0x74 }; static const uint8_t ac_dsa_vect260_priv_val[] = { /* X */ 0x0d, 0x69, 0x0f, 0x2c, 0x87, 0xfe, 0x2c, 0xeb, 0xc9, 0xf1, 0x55, 0x46, 0xf0, 0x5a, 0xfa, 0xf6, 0xdc, 0x84, 0x3b, 0x80, 0xab, 0xd2, 0x04, 0x6f, 0x33, 0xde, 0x30, 0xc2, 0xe8, 0x06, 0x35, 0x8f }; static const uint8_t ac_dsa_vect260_pub_val[] = { /* Y */ 0x53, 0xfc, 0xd0, 0x73, 0x99, 0xe4, 0xd3, 0x1b, 0x09, 0xab, 0xef, 0xf2, 0xf0, 0x96, 0xa7, 0xb2, 0xcc, 0x5c, 0xf4, 0x17, 0xde, 0xe1, 0x20, 0x7d, 0x8a, 0x5a, 0xab, 0xf9, 0xe8, 0xf9, 0xfb, 0x0f, 0x66, 0xbe, 0x48, 0x82, 0x6a, 0x3d, 0xc1, 0x1e, 0x39, 0xbe, 0xba, 0x2f, 0xf4, 0x7b, 0x76, 0x54, 0x4b, 0xcf, 0x55, 0x48, 0x5a, 0xcf, 0x1e, 0x3d, 0x49, 0xe1, 0x90, 0x57, 0x01, 0x5e, 0x49, 0xed, 0x01, 0x2a, 0x48, 0x77, 0xbe, 0x74, 0x16, 0x07, 0x74, 0x9b, 0x6f, 0x4b, 0xf9, 0x5c, 0x44, 0xec, 0x3c, 0x9e, 0x8b, 0x89, 0x3a, 0xae, 0x8d, 0x80, 0xe3, 0x69, 0x97, 0x8a, 0x35, 0x80, 0x37, 0x1c, 0xc1, 0x3d, 0xe8, 0xe7, 0x14, 0x09, 0x2b, 0xb8, 0x92, 0xe4, 0xa9, 0x56, 0xad, 0x36, 0x54, 0x03, 0x2f, 0x77, 0x58, 0xfb, 0x94, 0x54, 0xa1, 0xcb, 0x56, 0x40, 0x6e, 0x1b, 0xf4, 0x58, 0x55, 0x10, 0x8e, 0xe9, 0x60, 0x10, 0x7a, 0x65, 0xd4, 0x54, 0x53, 0xcb, 0x48, 0x2d, 0xc1, 0x90, 0x49, 0xb6, 0xc8, 0x3b, 0xac, 0x11, 0x17, 0x56, 0xca, 0xf6, 0x5b, 0xdb, 0xe5, 0xe6, 0xb2, 0x70, 0xd5, 0x87, 0x5b, 0x99, 0x7a, 0x17, 0x22, 0xee, 0x9d, 0x58, 0x38, 0x49, 0x41, 0xaa, 0x40, 0xe8, 0x10, 0xb6, 0x0b, 0x83, 0x41, 0x2e, 0xaf, 0xd0, 0xa7, 0x42, 0x8a, 0x0a, 0xbb, 0x55, 0xdf, 0x45, 0x68, 0x0c, 0xf2, 0x26, 0x56, 0x71, 0x1d, 0xb6, 0xbf, 0xce, 0x8b, 0xdc, 0xbb, 0x4c, 0x08, 0x3a, 0x40, 0x1c, 0xdb, 0x68, 0x28, 0x4e, 0x0c, 0x7e, 0xc0, 0x0f, 0x7d, 0xe7, 0x4e, 0x57, 0x14, 0x6a, 0xda, 0xe2, 0x21, 0xe5, 0x4c, 0xc4, 0xa5, 0x66, 0xb0, 0x5a, 0x11, 0x3d, 0xdb, 0x22, 0xcb, 0xc1, 0x9d, 0x88, 0x1a, 0x41, 0xcd, 0x75, 0xde, 0x8c, 0xf6, 0xc7, 0xb8, 0x9a, 0x5f, 0xae, 0x65, 0x0d, 0xf5, 0x85, 0xaa, 0x70, 0xc0, 0x45, 0xb8, 0x4b, 0x2c, 0xbb, 0xcc, 0xd0, 0xe7, 0xab, 0x72, 0x0c, 0x58, 0x96, 0xab, 0xfd, 0x35, 0x6a, 0x66, 0xf3, 0xdc, 0xbb, 0xb5, 0x38, 0x6b, 0xe6, 0xd0, 0x2e, 0xa9, 0xb3, 0x19, 0x1c, 0xa2, 0x75, 0xd2, 0x22, 0x48, 0xae, 0xdc, 0x36, 0x0e, 0xcd, 0x40, 0x57, 0xae, 0x06, 0xab, 0x2c, 0x2a, 0xaf, 0xb5, 0x06, 0x57, 0xa9, 0x1c, 0x62, 0xe0, 0x38, 0xea, 0xc9, 0xf5, 0xc4, 0xd8, 0x81, 0x06, 0xdb, 0x4c, 0x69, 0x26, 0xfb, 0x5d, 0xd2, 0xde, 0x1e, 0xc7, 0xe4, 0xe0, 0x05, 0xce, 0x18, 0x45, 0x70, 0xe7, 0xe9, 0x7d, 0x76, 0x42, 0x2f, 0xa0, 0x37, 0x62, 0x1a, 0x6f, 0x6d, 0x46, 0xcb, 0x83, 0xab, 0x6f, 0x4d, 0x43, 0x4b, 0x6a, 0x8f, 0x07, 0x39, 0x00, 0xcb, 0x03, 0xa7, 0x81, 0x04, 0x55, 0xd1, 0x9e, 0x77, 0xd4, 0xdf, 0x62, 0x4d, 0x08, 0xe7, 0x82, 0x09, 0x0f, 0xfa }; /* K = 796cef38518aed8644ec5a1b3389da5ee9b063b88e7fb4602af0709999f9a938 */ static const uint8_t ac_dsa_vect260_out[] = { /* R */ 0x41, 0xa2, 0xc9, 0x55, 0xf4, 0x14, 0x13, 0xa7, 0xab, 0x06, 0x7b, 0x4f, 0x50, 0xc6, 0x1e, 0x39, 0x6f, 0x9f, 0xeb, 0xff, 0x61, 0xc1, 0x50, 0x0b, 0x1a, 0x4b, 0xc6, 0x9e, 0x50, 0xa5, 0x19, 0x35, /* S */ 0x79, 0xed, 0xd7, 0x51, 0xa9, 0xdc, 0x23, 0x72, 0xb4, 0x05, 0x80, 0xfa, 0x4d, 0x53, 0x8f, 0xbe, 0x2c, 0xda, 0x41, 0x49, 0xf6, 0xb1, 0x19, 0x39, 0xdd, 0xad, 0x92, 0xc5, 0x74, 0x74, 0x08, 0x83 }; #define ac_dsa_vect261_prime ac_dsa_vect256_prime #define ac_dsa_vect261_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect261_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect261_ptx[] = { /* Msg */ 0xa3, 0x26, 0x97, 0x30, 0x93, 0xce, 0x50, 0x2c, 0x16, 0x47, 0x3d, 0x89, 0xba, 0x19, 0x65, 0x07, 0xd9, 0x22, 0x81, 0x50, 0x47, 0x59, 0xcb, 0x34, 0xc6, 0xcc, 0x35, 0x3d, 0x45, 0x19, 0x7f, 0x91, 0x5b, 0x5e, 0x73, 0x6b, 0x8f, 0xf8, 0x57, 0xa8, 0xb2, 0xec, 0x99, 0x64, 0x9a, 0x32, 0x24, 0xf8, 0x57, 0x40, 0x18, 0x98, 0xc9, 0xea, 0x60, 0x7e, 0x6a, 0x2c, 0x1d, 0x32, 0x0f, 0x27, 0x56, 0x4c, 0xcf, 0xf5, 0xdb, 0xda, 0xcf, 0xd8, 0x7a, 0x14, 0x5f, 0x1a, 0x02, 0x94, 0x25, 0xd7, 0x65, 0x02, 0xc0, 0x81, 0xac, 0x0f, 0x6a, 0x14, 0xde, 0x5b, 0x2c, 0xad, 0x1c, 0x23, 0xa6, 0x1d, 0x4e, 0x9e, 0xc6, 0xa0, 0x4e, 0x1a, 0x45, 0x5f, 0xd7, 0x10, 0xc3, 0xc7, 0x8c, 0x09, 0x67, 0x53, 0xc0, 0xb7, 0xf1, 0x51, 0x1e, 0x8b, 0xa5, 0xf5, 0xf1, 0xaf, 0x4f, 0x07, 0x41, 0xfe, 0xe8, 0x8b, 0x77, 0xeb }; static const uint8_t ac_dsa_vect261_priv_val[] = { /* X */ 0x37, 0xd0, 0xfa, 0x99, 0xe5, 0xee, 0xd0, 0xfb, 0x51, 0xc6, 0xe6, 0x90, 0xf0, 0xac, 0x55, 0x6a, 0xe7, 0x4c, 0xab, 0x9a, 0x84, 0xd8, 0x87, 0xa0, 0x73, 0x63, 0x59, 0x9b, 0x19, 0x84, 0x75, 0xdd }; static const uint8_t ac_dsa_vect261_pub_val[] = { /* Y */ 0x92, 0x91, 0x5d, 0xb2, 0x1c, 0x2c, 0x3e, 0x57, 0xfc, 0xcc, 0xb7, 0xdf, 0xdc, 0xe2, 0x8a, 0x12, 0xaa, 0xf6, 0xdd, 0x10, 0x58, 0x11, 0x93, 0xb9, 0x8b, 0x7d, 0x51, 0xa7, 0x28, 0xc3, 0x85, 0x16, 0xe3, 0x9e, 0xf5, 0xcf, 0xb1, 0xff, 0x9f, 0xa1, 0x65, 0x9c, 0x9b, 0xee, 0x56, 0xd4, 0xeb, 0xc1, 0xcd, 0x69, 0x64, 0x6c, 0x3c, 0xc3, 0xf7, 0xca, 0xae, 0x0c, 0x42, 0xd9, 0xcc, 0xa9, 0x21, 0x91, 0x48, 0xe4, 0x99, 0x8c, 0x2d, 0xdc, 0x89, 0xeb, 0x9a, 0x3e, 0xdc, 0xfa, 0x6f, 0x45, 0x71, 0x29, 0x00, 0x7a, 0x93, 0x44, 0x01, 0x3d, 0xd1, 0x23, 0xaf, 0xf1, 0x97, 0xbf, 0xcd, 0x3d, 0xb1, 0xd9, 0xe2, 0x19, 0x9b, 0xce, 0xa1, 0x61, 0x65, 0xa4, 0xc3, 0x4e, 0xd2, 0xac, 0x32, 0x16, 0x7a, 0xbd, 0x16, 0x77, 0x04, 0xea, 0xd3, 0x1d, 0x5f, 0xc2, 0x86, 0x0b, 0x83, 0x4d, 0x44, 0xf8, 0x6c, 0xb5, 0x30, 0xda, 0xd9, 0xe8, 0x87, 0x01, 0x3c, 0xa4, 0xd6, 0xe8, 0x83, 0x00, 0x8c, 0x28, 0x6d, 0x20, 0x6b, 0x6c, 0x7c, 0xb2, 0x52, 0xd1, 0x32, 0x8b, 0x50, 0x3a, 0xe0, 0x67, 0x9b, 0x50, 0x2e, 0xc1, 0x64, 0x6f, 0x69, 0xf2, 0x60, 0x2d, 0x5e, 0x3d, 0x63, 0x1d, 0x4a, 0x5a, 0x63, 0xfc, 0x7a, 0x5d, 0x06, 0xf2, 0x79, 0x26, 0xa4, 0xd6, 0xb1, 0xef, 0x2f, 0x77, 0xdd, 0xff, 0x3d, 0x85, 0x0d, 0x3d, 0x9f, 0x58, 0xa9, 0x58, 0xc3, 0xf4, 0xf1, 0x2c, 0xf0, 0x29, 0xf1, 0x48, 0x38, 0x6c, 0x5b, 0x8a, 0x71, 0xba, 0xe9, 0x09, 0x4d, 0xec, 0x85, 0x27, 0x9b, 0x1e, 0x38, 0x77, 0x99, 0xd2, 0x6b, 0x2a, 0x6a, 0x0e, 0x0d, 0xbf, 0x06, 0x49, 0x73, 0x66, 0xe4, 0x90, 0x3e, 0x55, 0x9e, 0x70, 0x97, 0x5d, 0xed, 0xc7, 0xd4, 0x93, 0x4d, 0x4e, 0x2d, 0x3d, 0x2c, 0xd3, 0x05, 0xab, 0x82, 0x64, 0x02, 0xea, 0x8f, 0x27, 0x78, 0xe2, 0x66, 0x25, 0x11, 0x9e, 0x7b, 0x0c, 0x24, 0xc4, 0x5d, 0xd9, 0xc0, 0x5a, 0x38, 0x90, 0xdd, 0x1d, 0x9d, 0x93, 0x0b, 0xd0, 0xbb, 0x40, 0x93, 0x66, 0xb0, 0x7a, 0x47, 0xce, 0x57, 0x2e, 0xd5, 0xbc, 0xd5, 0xf6, 0x3c, 0x46, 0x7d, 0x49, 0xc5, 0x68, 0x11, 0xfc, 0x3e, 0x40, 0x13, 0x41, 0xb9, 0xa4, 0x53, 0x1f, 0x77, 0x6d, 0xeb, 0xde, 0xa5, 0x40, 0xa3, 0x4c, 0x7c, 0xca, 0x3c, 0x3f, 0xb2, 0xea, 0x99, 0xc5, 0xfa, 0x9f, 0x9f, 0xdf, 0xde, 0x91, 0x8a, 0x94, 0xf7, 0x4e, 0x08, 0x0d, 0x19, 0x86, 0xb6, 0x8f, 0xc1, 0xe3, 0xfb, 0x97, 0x80, 0x54, 0x87, 0x2c, 0xed, 0x97, 0xba, 0xfd, 0x96, 0x73, 0x1e, 0x6d, 0x4f, 0x1c, 0x4a, 0x91, 0x27, 0x8c, 0x38, 0x3d, 0x47, 0x61, 0xc9, 0x74, 0x10, 0x09, 0x74, 0x52, 0x2f, 0x7b, 0x6e, 0x8a, 0x28, 0x84, 0xd5, 0xb3, 0xbb, 0xf6 }; /* K = 0b5c9b613708ea26bea151a0dd4222bb573d950588483483cd2b8ab537469e53 */ static const uint8_t ac_dsa_vect261_out[] = { /* R */ 0x73, 0xf1, 0x92, 0x2e, 0x26, 0xd9, 0xb8, 0x06, 0x8b, 0x68, 0xf8, 0x3c, 0x2b, 0xd5, 0xdb, 0xbb, 0x59, 0x60, 0x40, 0x3b, 0x49, 0x22, 0x3c, 0x02, 0xa4, 0x2c, 0xe6, 0xcf, 0x38, 0x10, 0xdb, 0x66, /* S */ 0x3a, 0xd3, 0x0b, 0xe9, 0xa6, 0x0f, 0x6d, 0x42, 0x27, 0x03, 0x94, 0x56, 0xc9, 0x82, 0x7d, 0x54, 0x24, 0x85, 0x8a, 0x02, 0xa8, 0xe6, 0xd3, 0x89, 0x17, 0x72, 0xcf, 0x80, 0xa5, 0xe4, 0xee, 0x21 }; #define ac_dsa_vect262_prime ac_dsa_vect256_prime #define ac_dsa_vect262_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect262_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect262_ptx[] = { /* Msg */ 0x75, 0x04, 0x38, 0x2f, 0xb7, 0xfb, 0xa1, 0xda, 0xb3, 0xc9, 0x3b, 0xd3, 0x1b, 0x16, 0xe7, 0x3d, 0x9a, 0xe1, 0xd0, 0x27, 0xdd, 0x23, 0x16, 0x6b, 0x3b, 0x94, 0xc7, 0x12, 0x41, 0x83, 0xfa, 0xf3, 0x96, 0x3c, 0x42, 0x0b, 0xe5, 0x20, 0x5a, 0x1f, 0x44, 0xa9, 0xa9, 0x02, 0x6c, 0x6e, 0xf7, 0x7e, 0x7c, 0x4e, 0xf1, 0xec, 0x48, 0x45, 0xfe, 0xf6, 0xe5, 0xea, 0x24, 0x87, 0xce, 0x01, 0x2f, 0xf5, 0x3f, 0x94, 0x50, 0xfc, 0xeb, 0x0d, 0x3a, 0xc6, 0x2f, 0x21, 0x02, 0xd7, 0x17, 0xe3, 0x28, 0x7d, 0xb3, 0x71, 0x47, 0x17, 0xa2, 0x8c, 0xd8, 0xb7, 0xfc, 0x64, 0x55, 0x6a, 0x86, 0x17, 0x3e, 0x6e, 0x7f, 0x47, 0x9f, 0x8a, 0x8d, 0xcd, 0x89, 0x54, 0x29, 0xcd, 0x7f, 0x0f, 0x53, 0x04, 0xef, 0x6a, 0xaf, 0x27, 0x5d, 0x94, 0xa7, 0xf4, 0xb3, 0x0a, 0xcc, 0x10, 0x71, 0x78, 0x7c, 0xa5, 0xf0, 0x62 }; static const uint8_t ac_dsa_vect262_priv_val[] = { /* X */ 0x1c, 0x21, 0xaa, 0x2e, 0xf3, 0xb1, 0x1d, 0x31, 0xf3, 0xc9, 0x4a, 0x27, 0x88, 0x59, 0xcb, 0x74, 0xbc, 0x40, 0xda, 0xf5, 0x99, 0x3d, 0xbd, 0x77, 0x4b, 0x32, 0xea, 0x3c, 0xa2, 0x4b, 0xf1, 0x62 }; static const uint8_t ac_dsa_vect262_pub_val[] = { /* Y */ 0x20, 0x55, 0xbb, 0xe8, 0x9d, 0xa0, 0xa0, 0xc4, 0x88, 0xc3, 0xdb, 0xf2, 0x95, 0x31, 0xf1, 0xf7, 0xcd, 0x3f, 0xb5, 0x5a, 0x26, 0xef, 0xc5, 0x40, 0xc2, 0xed, 0xdc, 0xcc, 0xea, 0x16, 0x15, 0xdd, 0x92, 0x3f, 0xea, 0x4c, 0x8d, 0x0c, 0x95, 0xa5, 0xaf, 0x7e, 0x1e, 0x78, 0x16, 0x04, 0x8f, 0x2a, 0xe8, 0x53, 0x23, 0xa9, 0x64, 0x11, 0xe7, 0xd1, 0xad, 0x62, 0xc4, 0xca, 0x67, 0x5b, 0x63, 0xdf, 0x9d, 0xba, 0x31, 0xc1, 0xc7, 0x68, 0x03, 0xfb, 0x1c, 0x82, 0x92, 0x46, 0x5a, 0xd0, 0xa7, 0xe4, 0x9b, 0xa3, 0x75, 0x6a, 0x8a, 0xd4, 0xc6, 0xce, 0x86, 0xfd, 0x30, 0xb8, 0xb2, 0x8e, 0x08, 0xc4, 0xb4, 0x77, 0x7e, 0x07, 0x9f, 0xaf, 0xf1, 0x0f, 0xf8, 0x52, 0xf7, 0xd8, 0x91, 0xa9, 0x84, 0x19, 0x8d, 0xd0, 0x49, 0x77, 0x97, 0x21, 0x08, 0xc5, 0x2c, 0xe8, 0xbd, 0xb1, 0x15, 0x64, 0x62, 0x24, 0xa7, 0x93, 0x37, 0x74, 0x6e, 0x36, 0x47, 0x21, 0x31, 0x98, 0xf1, 0x12, 0x74, 0x30, 0xf5, 0x60, 0x87, 0x33, 0xd8, 0x82, 0x04, 0xa6, 0x2b, 0xe6, 0xea, 0xee, 0x84, 0x62, 0x9f, 0xc7, 0x28, 0x2a, 0xce, 0xf4, 0xc4, 0xf5, 0xd3, 0xad, 0xbe, 0x72, 0x41, 0x0b, 0x1e, 0xdf, 0xb7, 0x4b, 0xe1, 0x6b, 0x2d, 0x67, 0x5c, 0xca, 0x89, 0x1b, 0xd8, 0xce, 0xf2, 0x05, 0x17, 0x89, 0x02, 0xb9, 0x92, 0x71, 0xb4, 0x80, 0x41, 0xab, 0xe3, 0x3a, 0xc1, 0x19, 0xad, 0x6b, 0x75, 0x6a, 0x47, 0x7a, 0x63, 0x06, 0x3a, 0xae, 0x8a, 0x17, 0xcc, 0xfb, 0xe2, 0xac, 0xae, 0x3c, 0x0a, 0x3c, 0x63, 0x0c, 0x13, 0xad, 0xe1, 0x97, 0xcf, 0x3d, 0x05, 0xa9, 0xfa, 0x9d, 0x68, 0x99, 0xc0, 0xa3, 0xf9, 0x48, 0x7e, 0x61, 0x48, 0x73, 0x2d, 0xc6, 0x3e, 0x90, 0x7e, 0xf7, 0x94, 0x88, 0xdf, 0x33, 0x73, 0xb8, 0xa2, 0x13, 0x70, 0x5d, 0x69, 0xdc, 0xce, 0x6e, 0xd9, 0xa2, 0x20, 0x9f, 0x59, 0xeb, 0xc5, 0x8b, 0xbb, 0xeb, 0x08, 0x05, 0x45, 0x10, 0xb5, 0xa6, 0x51, 0x69, 0xd0, 0xfc, 0x1d, 0x4d, 0x10, 0xbd, 0xa6, 0x8a, 0xa7, 0xec, 0xea, 0xe2, 0xe7, 0x2f, 0x03, 0x39, 0xa2, 0xea, 0xae, 0xa0, 0x83, 0x03, 0x06, 0x4d, 0xd6, 0x58, 0x84, 0x14, 0xee, 0x77, 0x05, 0xdf, 0x3a, 0xb9, 0x74, 0xde, 0xbe, 0xf5, 0x88, 0xf4, 0xe3, 0x1f, 0xd6, 0xa8, 0xf2, 0x59, 0x79, 0xc9, 0xf5, 0x21, 0xd2, 0x34, 0x31, 0x20, 0xe4, 0x07, 0x94, 0xf4, 0x1a, 0x46, 0x01, 0xbe, 0x57, 0x91, 0x83, 0xb8, 0x77, 0xe6, 0xa8, 0xf6, 0xc0, 0xab, 0x7c, 0xe8, 0x48, 0x0e, 0x7f, 0xbf, 0xf4, 0x67, 0xa5, 0x81, 0xdf, 0x57, 0x0a, 0xf8, 0x99, 0x29, 0xbc, 0x4b, 0x56, 0x39, 0x7b, 0x78, 0x7d, 0xf4, 0xd7, 0x29, 0xe6, 0x5f, 0x9b, 0x98, 0xee, 0x7e }; /* K = 44efaf7a15a1eb2a7ba04fd4717e938fe738666040b3d81560497ce166f31e86 */ static const uint8_t ac_dsa_vect262_out[] = { /* R */ 0x56, 0xe2, 0x1a, 0x7a, 0xb6, 0x1f, 0x9e, 0xab, 0xbf, 0xf4, 0x7c, 0x75, 0xe5, 0xf6, 0x8c, 0x31, 0x87, 0x3a, 0x9e, 0x1f, 0x2e, 0x1d, 0xb6, 0x62, 0x73, 0x11, 0x82, 0xf9, 0xa0, 0x29, 0xb8, 0xf6, /* S */ 0x2f, 0x24, 0xc5, 0x2f, 0x7b, 0xaa, 0xe2, 0x9c, 0x0b, 0x46, 0x33, 0xa3, 0x85, 0x52, 0x33, 0x18, 0x0e, 0xba, 0x80, 0x61, 0x1d, 0xbc, 0x7e, 0x88, 0xe2, 0x35, 0x48, 0xa5, 0x20, 0xb6, 0x0f, 0x66 }; #define ac_dsa_vect263_prime ac_dsa_vect256_prime #define ac_dsa_vect263_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect263_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect263_ptx[] = { /* Msg */ 0x0c, 0x0f, 0x7b, 0x0f, 0x99, 0x55, 0xbb, 0x54, 0xf1, 0x6e, 0x4e, 0x39, 0xad, 0x9b, 0xfd, 0x1d, 0xeb, 0x04, 0xb8, 0xe8, 0xb3, 0x8e, 0x67, 0x4d, 0xa4, 0x55, 0x69, 0x6b, 0xdf, 0x7c, 0xf2, 0x8e, 0x24, 0x11, 0x4a, 0xd0, 0x05, 0x13, 0xd8, 0xdd, 0x4e, 0x5c, 0x89, 0x5d, 0x35, 0x1e, 0xa9, 0x13, 0xfe, 0xe5, 0x16, 0xb6, 0x46, 0x82, 0x00, 0x87, 0x72, 0x1d, 0x9a, 0x0b, 0x5e, 0xcd, 0x76, 0x9b, 0x38, 0x25, 0x73, 0x91, 0x23, 0x54, 0x4e, 0x70, 0x58, 0xb6, 0x6d, 0x23, 0x42, 0xb0, 0x44, 0x62, 0xd5, 0xd1, 0x73, 0xcd, 0xb0, 0x0e, 0xf6, 0xac, 0xa6, 0x04, 0xaa, 0xa4, 0x38, 0xb8, 0x86, 0x8d, 0x15, 0xdd, 0x66, 0x24, 0xab, 0xb8, 0xd1, 0x93, 0x84, 0xdb, 0x48, 0xbd, 0xaa, 0x66, 0x47, 0x14, 0x13, 0xa8, 0x94, 0xd3, 0x61, 0x0b, 0xc9, 0x7d, 0x84, 0x8a, 0x59, 0xe2, 0xc6, 0x9c, 0x0c, 0x0a }; static const uint8_t ac_dsa_vect263_priv_val[] = { /* X */ 0x34, 0x65, 0x1f, 0x58, 0x44, 0xcb, 0xf8, 0x59, 0x60, 0xe9, 0x87, 0x19, 0x0e, 0xda, 0x4c, 0xa1, 0xfc, 0xf3, 0x2d, 0x8c, 0xbe, 0x1a, 0xd0, 0x8d, 0xd5, 0xaa, 0x36, 0xfb, 0xd0, 0xd4, 0x20, 0x00 }; static const uint8_t ac_dsa_vect263_pub_val[] = { /* Y */ 0x45, 0xef, 0x38, 0x4e, 0xd8, 0x17, 0x38, 0x66, 0x68, 0xe1, 0xb9, 0x0b, 0x42, 0xf1, 0xd4, 0x23, 0xad, 0x9b, 0x17, 0xea, 0x87, 0x01, 0x19, 0xc0, 0x93, 0x2a, 0xc2, 0xf5, 0x15, 0xf5, 0x46, 0xa3, 0xb6, 0xb8, 0x0a, 0x61, 0x2e, 0xe6, 0x6d, 0xfc, 0x00, 0xcc, 0x4d, 0x9e, 0x3b, 0x5d, 0xd1, 0x53, 0x03, 0xd5, 0xeb, 0xc0, 0xaa, 0x40, 0xcb, 0xcd, 0x77, 0x46, 0xf5, 0x4a, 0x3f, 0xfe, 0xa2, 0x3a, 0xea, 0x07, 0x04, 0xae, 0x9c, 0xf5, 0xad, 0x61, 0x45, 0x62, 0x9c, 0x61, 0xd1, 0x58, 0xdb, 0x6e, 0xe3, 0x9a, 0xc8, 0x99, 0xbb, 0xda, 0x59, 0x79, 0x4b, 0x17, 0x69, 0xa9, 0x29, 0x82, 0x08, 0x2b, 0x77, 0xa1, 0xd4, 0x88, 0x56, 0x42, 0x7b, 0x78, 0xbb, 0x6e, 0x07, 0x7e, 0x27, 0x33, 0x5f, 0x11, 0x5b, 0xb8, 0x42, 0xe5, 0x32, 0x51, 0xf6, 0x99, 0xf0, 0x44, 0x88, 0xbe, 0xaf, 0x83, 0xa6, 0xc4, 0xaa, 0x6a, 0x4b, 0x76, 0x37, 0x0c, 0xef, 0xc9, 0x09, 0x9c, 0x0a, 0x45, 0xbc, 0xf9, 0x73, 0x24, 0x2d, 0xf2, 0xa0, 0x1e, 0xf6, 0x8e, 0x66, 0xc8, 0x7e, 0xff, 0xd7, 0xf9, 0x8f, 0x44, 0x1e, 0x94, 0xa0, 0x9a, 0x28, 0x30, 0x07, 0x6c, 0x28, 0x95, 0xf9, 0x97, 0xaf, 0xd0, 0xa9, 0x09, 0xb4, 0x5b, 0x3c, 0x05, 0x91, 0x77, 0x00, 0x02, 0x36, 0xc5, 0x01, 0xbf, 0xaa, 0x56, 0xda, 0x80, 0x0e, 0xcf, 0x08, 0x70, 0x1d, 0x21, 0x20, 0x16, 0xb5, 0x25, 0xf3, 0x0d, 0x63, 0xcc, 0xf3, 0xaf, 0xea, 0x09, 0xdf, 0x39, 0xe1, 0xcf, 0xab, 0x7b, 0xf4, 0x5d, 0xe1, 0xa3, 0x9a, 0xc7, 0xf2, 0x8d, 0xe0, 0x03, 0x7e, 0xc5, 0x52, 0xe2, 0xea, 0x10, 0xc6, 0xb5, 0x6a, 0x5d, 0xb8, 0xc1, 0x3f, 0xcb, 0xf7, 0x3d, 0x2e, 0x50, 0xd5, 0x8b, 0x4f, 0x3c, 0xf2, 0x78, 0x50, 0x6f, 0x1e, 0xaf, 0x08, 0x73, 0xe9, 0xee, 0x94, 0x65, 0xcb, 0xaf, 0xf4, 0xae, 0x62, 0x6f, 0x3a, 0xa1, 0x09, 0xfc, 0xe4, 0x9e, 0x55, 0xd5, 0x7f, 0xe8, 0x81, 0xc5, 0x0f, 0x72, 0x79, 0x26, 0x26, 0x21, 0x28, 0x2a, 0xdc, 0xf3, 0x79, 0x14, 0x1c, 0x9b, 0x2c, 0x39, 0x81, 0x3f, 0xaf, 0x82, 0x3a, 0x7e, 0xc0, 0x77, 0xc6, 0xe6, 0xbf, 0x95, 0x3f, 0x13, 0x0a, 0xca, 0x58, 0xf3, 0x6e, 0x7a, 0x87, 0xab, 0x1a, 0xae, 0xea, 0x5e, 0xeb, 0x44, 0x02, 0xfa, 0x9e, 0x26, 0xef, 0x89, 0x38, 0xc8, 0xf3, 0x8a, 0x6c, 0x04, 0x08, 0x09, 0xf4, 0xd0, 0x4c, 0x81, 0xe2, 0x94, 0x83, 0x87, 0xd7, 0xbe, 0x81, 0x3a, 0x97, 0x3a, 0x9c, 0x95, 0x17, 0x67, 0x00, 0x11, 0x7d, 0xe2, 0xf3, 0x3e, 0x61, 0x94, 0x03, 0x87, 0xf8, 0x51, 0xa7, 0x3d, 0xfa, 0x4a, 0xc5, 0xc9, 0x84, 0xec, 0x97, 0x91, 0x8c, 0x96, 0x7b, 0xfe, 0xdd, 0x88, 0x6d, 0x1b, 0xb7, 0x05 }; /* K = 52c16c3e7b17f3e73d7965f584bfd7ca036423b0d42cc00e58d1ccbc419d33b2 */ static const uint8_t ac_dsa_vect263_out[] = { /* R */ 0x77, 0x56, 0x3b, 0x3b, 0x48, 0xfc, 0x9e, 0xe0, 0xdb, 0xea, 0x79, 0xfc, 0x74, 0xdd, 0x6c, 0x69, 0xb7, 0x2c, 0x42, 0x70, 0x91, 0x8e, 0x6a, 0x1b, 0xe2, 0xc9, 0x98, 0x17, 0x70, 0x23, 0xb4, 0x0f, /* S */ 0x09, 0x9c, 0xdd, 0x62, 0xdc, 0x04, 0x4a, 0x57, 0xea, 0x25, 0xd1, 0xb5, 0xc1, 0xf6, 0xed, 0x84, 0xd1, 0x1b, 0xac, 0xbb, 0x09, 0x75, 0x97, 0x6d, 0x58, 0x21, 0xc4, 0x14, 0xb5, 0x41, 0x6b, 0xde }; #define ac_dsa_vect264_prime ac_dsa_vect256_prime #define ac_dsa_vect264_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect264_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect264_ptx[] = { /* Msg */ 0xc6, 0x77, 0x35, 0x69, 0x8a, 0xe7, 0xbb, 0xae, 0xb6, 0xf3, 0x21, 0xa1, 0x08, 0x86, 0x17, 0x38, 0x2a, 0x5c, 0x92, 0x09, 0x21, 0x51, 0xec, 0x36, 0x45, 0x82, 0x96, 0x2c, 0x9c, 0x0e, 0xd9, 0xed, 0x8f, 0xc7, 0x90, 0xcd, 0xe0, 0xd9, 0x74, 0x4d, 0x4e, 0x38, 0x97, 0x0a, 0x84, 0x82, 0x40, 0x1c, 0x0f, 0x61, 0xe9, 0x18, 0x05, 0xf4, 0x98, 0x4b, 0x8c, 0xfd, 0xf9, 0xdc, 0x80, 0x93, 0xa5, 0xc6, 0x68, 0x1d, 0xac, 0x13, 0x80, 0x9b, 0xc4, 0x1d, 0x16, 0x7d, 0x3e, 0x11, 0xbc, 0x99, 0x69, 0x8a, 0x4b, 0xc0, 0x7f, 0xd2, 0x48, 0xa6, 0x74, 0x91, 0xe8, 0x64, 0x10, 0x81, 0xff, 0x1e, 0x97, 0x87, 0x17, 0x45, 0x15, 0x7c, 0xf9, 0x30, 0x19, 0x5a, 0x35, 0xa1, 0x4d, 0x08, 0x83, 0xa2, 0x6d, 0xb4, 0x42, 0xe4, 0xed, 0xb9, 0x62, 0xaa, 0x61, 0x87, 0xb8, 0xd1, 0xc7, 0x79, 0x1d, 0x61, 0xbd, 0x25 }; static const uint8_t ac_dsa_vect264_priv_val[] = { /* X */ 0x2a, 0xd2, 0x0d, 0x2e, 0x78, 0xa9, 0xec, 0x23, 0x4f, 0x99, 0xa4, 0xb2, 0xff, 0x52, 0xfa, 0xf4, 0x92, 0xc3, 0xe3, 0x24, 0x2a, 0xe6, 0xc0, 0x4e, 0xa8, 0xa3, 0x7d, 0x5f, 0x10, 0xfc, 0xe6, 0xdb }; static const uint8_t ac_dsa_vect264_pub_val[] = { /* Y */ 0x0d, 0x3b, 0x3c, 0x3d, 0xf0, 0x72, 0xb5, 0xf5, 0x12, 0x91, 0x18, 0x13, 0x2b, 0xb7, 0xbc, 0xa3, 0xc5, 0x2f, 0x51, 0xdf, 0x36, 0x76, 0x7f, 0x11, 0x52, 0x38, 0x7e, 0xc0, 0x0d, 0xf6, 0x5c, 0x72, 0x8f, 0x0c, 0xff, 0xc1, 0xcb, 0x6f, 0x22, 0x42, 0x58, 0xcb, 0x6d, 0x3e, 0x90, 0xf7, 0x9d, 0xd9, 0x76, 0xb5, 0xa1, 0x80, 0xb8, 0x39, 0x03, 0xd2, 0x10, 0xf0, 0xc4, 0xda, 0xb8, 0x2e, 0xb7, 0x2a, 0x1f, 0x89, 0x97, 0xbf, 0x09, 0x30, 0x1d, 0x0f, 0x7c, 0x89, 0x07, 0x5d, 0x55, 0x2c, 0x81, 0xfd, 0x95, 0x85, 0xb0, 0xb1, 0xb1, 0x29, 0x17, 0x44, 0xd2, 0x1b, 0xd1, 0xed, 0xcb, 0x51, 0x12, 0x17, 0xc2, 0x96, 0x2e, 0x1a, 0x6d, 0xe9, 0xbb, 0x01, 0xc2, 0xb9, 0x69, 0x8f, 0xf5, 0x5e, 0xa7, 0x5d, 0xcf, 0xe4, 0x56, 0xbe, 0x48, 0x1c, 0xb6, 0xf0, 0x64, 0xfe, 0xd4, 0xbf, 0xf8, 0x74, 0xeb, 0x1c, 0x9b, 0x74, 0x51, 0x97, 0x9f, 0x7d, 0xe7, 0x01, 0x1b, 0xaf, 0x5a, 0x47, 0xc9, 0x76, 0xa1, 0x79, 0xae, 0xe9, 0x09, 0xd2, 0x5c, 0xa8, 0x7f, 0xd5, 0xe3, 0xc7, 0x5d, 0xf7, 0x78, 0xe2, 0x12, 0x72, 0x93, 0x7c, 0x5b, 0xa7, 0x80, 0x6a, 0xef, 0xa7, 0x06, 0x47, 0x22, 0x1e, 0x5f, 0x7c, 0xc3, 0x2a, 0xb8, 0x01, 0x59, 0x21, 0xa5, 0xa9, 0x5e, 0xcb, 0xb3, 0xca, 0x4b, 0x66, 0x72, 0x49, 0xd0, 0xf3, 0x4d, 0xd2, 0xd8, 0xba, 0x86, 0xdc, 0x15, 0x8f, 0x9e, 0x84, 0x25, 0x17, 0x6e, 0x98, 0x80, 0x48, 0xef, 0xd9, 0xf7, 0xb7, 0xcc, 0x53, 0xe9, 0xfc, 0xdb, 0x29, 0xad, 0x24, 0x12, 0xab, 0x4c, 0xa6, 0xeb, 0xbd, 0xe6, 0xf4, 0xef, 0xca, 0x59, 0x45, 0xb5, 0x3b, 0x27, 0x53, 0xbf, 0xc4, 0xea, 0xbe, 0x62, 0x80, 0x23, 0x56, 0x20, 0xc4, 0x46, 0x4f, 0x69, 0x40, 0xac, 0xca, 0x1a, 0x94, 0x65, 0x9a, 0x52, 0x7a, 0xa1, 0x4c, 0xc7, 0xc5, 0x46, 0x73, 0x82, 0xa5, 0x4f, 0xe4, 0x79, 0x65, 0x6d, 0xfb, 0xc1, 0x19, 0x23, 0x09, 0x4f, 0xe8, 0x01, 0x9a, 0x08, 0xc3, 0xce, 0x7e, 0x99, 0xa2, 0x8f, 0x08, 0x6b, 0xda, 0xaf, 0x0f, 0xaa, 0xc6, 0xee, 0x16, 0x19, 0x0d, 0xca, 0x8e, 0x94, 0xbf, 0x87, 0x65, 0x70, 0x58, 0x49, 0x5a, 0xd0, 0x79, 0x31, 0xc8, 0x90, 0x08, 0xca, 0x1e, 0x56, 0x50, 0x76, 0x25, 0x6a, 0x93, 0xcb, 0x24, 0x68, 0xaa, 0x71, 0x22, 0x75, 0x8b, 0x8e, 0x17, 0x4f, 0x6a, 0x80, 0xf4, 0x1a, 0x90, 0xfc, 0x92, 0xf0, 0x5b, 0xf1, 0xf1, 0xf4, 0x7d, 0xa1, 0x85, 0xb2, 0xf2, 0x5a, 0x1a, 0xbf, 0x5e, 0x0c, 0xcc, 0x66, 0x13, 0xe3, 0xae, 0xf8, 0x71, 0x93, 0x40, 0x0d, 0x75, 0x1b, 0x4c, 0x87, 0xb4, 0x4d, 0x9b, 0xdf, 0x5c, 0x0e, 0x20, 0x7f, 0x0f, 0x6a, 0x7d, 0xc2, 0x11, 0x37, 0x99 }; /* K = 654dff8f0500b52adbb70fb7bb7aec4b4820963706964c19c8320e161c3ba365 */ static const uint8_t ac_dsa_vect264_out[] = { /* R */ 0x42, 0xc9, 0x02, 0xc5, 0x82, 0x68, 0x74, 0x77, 0x45, 0x50, 0x46, 0x4c, 0x4b, 0xb7, 0x36, 0xf2, 0xaf, 0x7f, 0xd2, 0xa3, 0x47, 0xf2, 0x7c, 0x65, 0xba, 0xe1, 0x18, 0x20, 0xee, 0xb7, 0x52, 0xaa, /* S */ 0x64, 0x11, 0xb4, 0x59, 0x47, 0xa4, 0x3c, 0x5b, 0x01, 0xc2, 0xf6, 0xce, 0xfc, 0xd4, 0x1c, 0xab, 0x73, 0xfc, 0xb6, 0xea, 0x0f, 0x2a, 0x35, 0xa2, 0x14, 0x75, 0x56, 0x30, 0x55, 0x31, 0x6e, 0x3e }; #define ac_dsa_vect265_prime ac_dsa_vect256_prime #define ac_dsa_vect265_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect265_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect265_ptx[] = { /* Msg */ 0xeb, 0x6a, 0x03, 0x59, 0xc6, 0xe4, 0x6e, 0x09, 0xa4, 0x2c, 0x55, 0x47, 0x05, 0xbc, 0xfc, 0x5c, 0x0c, 0x02, 0x26, 0x70, 0xb2, 0xf6, 0xc1, 0xa5, 0xbf, 0xe1, 0x4e, 0xa8, 0x05, 0x75, 0x9c, 0xa2, 0x25, 0x61, 0x53, 0xfd, 0xf8, 0x15, 0x05, 0x7c, 0xa9, 0xbd, 0x5f, 0x4c, 0xf8, 0x37, 0xe1, 0x4f, 0xdb, 0xa3, 0xad, 0x17, 0x61, 0x2c, 0xcd, 0x19, 0xfd, 0xe0, 0x07, 0x64, 0xba, 0x2e, 0x8e, 0xcd, 0x8f, 0x5a, 0x18, 0x5c, 0xb2, 0x65, 0x12, 0xf7, 0x45, 0x72, 0x59, 0xc2, 0xf0, 0x67, 0x08, 0x52, 0x74, 0x1e, 0x73, 0x93, 0xb4, 0x0c, 0x8b, 0xab, 0x67, 0x3b, 0xe2, 0xfa, 0x51, 0x9b, 0x48, 0xa9, 0x5d, 0xee, 0x65, 0x52, 0x36, 0x5f, 0xdb, 0x7d, 0xdb, 0x63, 0x2b, 0x1b, 0x33, 0xf1, 0xa5, 0x29, 0x0b, 0x82, 0x8d, 0xa5, 0x96, 0x5e, 0x82, 0xd8, 0x74, 0xf7, 0x9c, 0xdb, 0x92, 0x88, 0x14, 0xfb }; static const uint8_t ac_dsa_vect265_priv_val[] = { /* X */ 0x0d, 0x06, 0xd4, 0x05, 0xd2, 0x28, 0xc0, 0xed, 0x86, 0x0b, 0x9e, 0x21, 0xba, 0xe5, 0x70, 0xa6, 0xfd, 0x94, 0x0c, 0xc7, 0x02, 0xdd, 0x6e, 0x9a, 0x08, 0x46, 0xe7, 0xb2, 0xa4, 0xbe, 0x47, 0xa5 }; static const uint8_t ac_dsa_vect265_pub_val[] = { /* Y */ 0x6d, 0xb8, 0x3b, 0x06, 0xc6, 0x98, 0xed, 0x80, 0x12, 0x2e, 0xc4, 0xa2, 0x18, 0x33, 0x70, 0xed, 0x7d, 0xbd, 0x6e, 0xa4, 0x4d, 0xbb, 0x45, 0x42, 0x14, 0x95, 0x68, 0x57, 0x0c, 0x53, 0x52, 0x1d, 0x33, 0x99, 0xab, 0x44, 0xfe, 0x2b, 0xab, 0xd4, 0x90, 0x68, 0xe1, 0x19, 0x53, 0xc5, 0xd3, 0x8f, 0x7f, 0xfe, 0x3b, 0xcb, 0xe4, 0xcb, 0xce, 0xb9, 0x1c, 0x15, 0x5a, 0xc8, 0x74, 0x1d, 0xcf, 0x22, 0x6a, 0x59, 0xed, 0xe1, 0x0b, 0x05, 0x0b, 0x9f, 0x37, 0x43, 0xf2, 0x96, 0x89, 0x26, 0x6c, 0xe6, 0xee, 0x02, 0x0c, 0xa1, 0x7f, 0x9f, 0xa0, 0xe7, 0x5b, 0x3f, 0x71, 0x58, 0xa6, 0x5c, 0xef, 0x9f, 0xac, 0x76, 0xc8, 0x87, 0x86, 0xb5, 0xe3, 0x77, 0xaf, 0xea, 0xcb, 0x9b, 0x3d, 0xda, 0x55, 0xbe, 0x92, 0x2d, 0xa0, 0xef, 0x95, 0x8a, 0xa5, 0x56, 0xab, 0xfb, 0x43, 0x06, 0x7a, 0x41, 0x4e, 0x91, 0x5e, 0x31, 0xaf, 0x5f, 0x53, 0x70, 0x88, 0x1e, 0xd9, 0x7b, 0x25, 0xb4, 0xbf, 0xec, 0xbe, 0x08, 0x2a, 0x14, 0x5d, 0x02, 0x71, 0x7a, 0xf8, 0x00, 0xe7, 0x7e, 0x28, 0x96, 0x3c, 0xc0, 0xa6, 0xa1, 0xc1, 0x1b, 0x02, 0x83, 0x5e, 0x14, 0xbd, 0xba, 0x1a, 0x8c, 0x9c, 0xe4, 0xbf, 0xeb, 0x06, 0xaa, 0xeb, 0xd7, 0x60, 0xd7, 0xc4, 0x3c, 0xf5, 0x6b, 0xa2, 0x12, 0xd0, 0xc7, 0x5d, 0xa0, 0x26, 0x17, 0x65, 0x35, 0xf9, 0x82, 0xe8, 0xd7, 0x49, 0xf2, 0x0c, 0x2a, 0x8d, 0x5f, 0x53, 0x87, 0x5d, 0x89, 0x33, 0x74, 0xd8, 0x59, 0xb7, 0xce, 0xe5, 0x8b, 0x0e, 0xb3, 0x19, 0xd3, 0x31, 0x3c, 0xb8, 0xd1, 0x76, 0x02, 0xf4, 0x7e, 0x12, 0x0d, 0x1a, 0x24, 0xa0, 0xf8, 0xa6, 0x3c, 0xfe, 0x45, 0xa5, 0x02, 0x8c, 0xc0, 0x93, 0x7b, 0xbe, 0x89, 0xf6, 0xb3, 0xb7, 0xcd, 0xca, 0xa7, 0xdc, 0xd5, 0xec, 0x5f, 0x3e, 0xd2, 0xaa, 0x9f, 0x3a, 0xa8, 0xe9, 0x1a, 0x49, 0x6a, 0x8b, 0xad, 0x78, 0x74, 0xdd, 0x34, 0xbd, 0x8f, 0x2a, 0x95, 0x91, 0x99, 0x7d, 0x54, 0xf9, 0x2d, 0x58, 0x64, 0x21, 0x6c, 0x95, 0x36, 0x46, 0x84, 0x0b, 0x37, 0x8c, 0x7a, 0x05, 0x21, 0x5e, 0xcd, 0x97, 0xb6, 0xba, 0x94, 0x4c, 0xa1, 0x85, 0x97, 0xb7, 0xa5, 0x48, 0x32, 0xec, 0x98, 0xc1, 0xca, 0xc0, 0x00, 0x3d, 0x50, 0xd5, 0xa0, 0x53, 0x12, 0xcb, 0xc8, 0x52, 0xd5, 0x07, 0xcc, 0x97, 0x3e, 0xcb, 0x56, 0xf4, 0x24, 0xe8, 0xa1, 0xc1, 0x98, 0xbc, 0xdb, 0xaf, 0xaa, 0x6f, 0x92, 0x8f, 0xd2, 0x7a, 0x7c, 0x91, 0xf8, 0x4b, 0xc2, 0x34, 0xf2, 0x53, 0x26, 0x39, 0xa8, 0xaa, 0x21, 0x96, 0xf8, 0xfc, 0x2b, 0x71, 0x11, 0xb3, 0xd0, 0xb1, 0x15, 0x31, 0x65, 0xa0, 0xe0, 0x52, 0x5d, 0x4e, 0xa5, 0x95, 0xf8, 0x9a, 0xec, 0x33, 0xb6 }; /* K = 521906f186797e7f5ce85112ab2457ddc030d6f34be361929f4d373dda576e08 */ static const uint8_t ac_dsa_vect265_out[] = { /* R */ 0x04, 0x93, 0xdb, 0x0c, 0x18, 0xa3, 0x88, 0x27, 0x09, 0xb3, 0xcc, 0x9f, 0x8d, 0xbe, 0x05, 0x45, 0x45, 0x06, 0xc0, 0x4c, 0x3a, 0x12, 0xa4, 0x1d, 0x59, 0x9d, 0x20, 0x1d, 0x76, 0x15, 0xb6, 0xd8, /* S */ 0x74, 0x94, 0xb4, 0xd1, 0xb2, 0xf3, 0xae, 0x22, 0x79, 0x72, 0x55, 0xa1, 0xd0, 0x66, 0x27, 0x46, 0x35, 0x2a, 0x3d, 0x05, 0x32, 0x29, 0x04, 0x02, 0x06, 0x85, 0x94, 0xcf, 0xe4, 0x8c, 0x23, 0xa3 }; #define ac_dsa_vect266_prime ac_dsa_vect256_prime #define ac_dsa_vect266_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect266_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect266_ptx[] = { /* Msg */ 0x5c, 0x59, 0xb2, 0x09, 0xbb, 0xc0, 0xa1, 0xe0, 0x10, 0xcb, 0x10, 0x8d, 0xb4, 0x10, 0x1b, 0x8e, 0x2d, 0x04, 0xce, 0xd9, 0x12, 0x99, 0xa8, 0x74, 0x23, 0x22, 0x10, 0x2e, 0x0d, 0x57, 0x8c, 0x36, 0x98, 0x42, 0x2b, 0x43, 0xd1, 0x9d, 0x33, 0x16, 0x08, 0x18, 0x8b, 0xed, 0x4c, 0x7e, 0xdc, 0x03, 0xa4, 0x42, 0xf8, 0x9a, 0xae, 0x60, 0xf4, 0xe7, 0xee, 0x9b, 0x63, 0x25, 0xde, 0x3a, 0x8b, 0xb7, 0x02, 0x91, 0x8c, 0x21, 0x34, 0x3b, 0xc9, 0xb2, 0x66, 0xf2, 0xeb, 0xcf, 0x5a, 0x62, 0x03, 0x36, 0xa7, 0xbc, 0x99, 0xae, 0x36, 0x85, 0xf1, 0x90, 0x80, 0xdb, 0x46, 0xf2, 0x4a, 0x50, 0x12, 0x28, 0xc5, 0xbb, 0xfd, 0x9c, 0x0b, 0x4b, 0x0a, 0xbe, 0xcb, 0xfb, 0xd6, 0x76, 0xc3, 0x59, 0x60, 0x7c, 0xe2, 0x92, 0xcf, 0xfd, 0x52, 0xd2, 0x6a, 0xf8, 0x0b, 0x22, 0xe3, 0xc4, 0xd5, 0x16, 0xba, 0x0f }; static const uint8_t ac_dsa_vect266_priv_val[] = { /* X */ 0x42, 0x14, 0xd5, 0x5b, 0x0a, 0x05, 0x8c, 0x3d, 0xee, 0x27, 0x51, 0x40, 0x7d, 0x92, 0x96, 0x16, 0x8f, 0xed, 0x9f, 0x25, 0x5e, 0x5c, 0x68, 0x27, 0x3e, 0x1e, 0x5a, 0xeb, 0x3e, 0x50, 0x4e, 0x67 }; static const uint8_t ac_dsa_vect266_pub_val[] = { /* Y */ 0xbe, 0x31, 0xfd, 0x5d, 0x62, 0xdb, 0x69, 0x0b, 0xcd, 0xbc, 0x09, 0xe4, 0x53, 0xd4, 0x41, 0x7f, 0x82, 0xe8, 0x62, 0x1a, 0xd7, 0x17, 0xca, 0xb9, 0x46, 0x48, 0x20, 0x1a, 0x74, 0xf6, 0xff, 0xdf, 0xab, 0x96, 0x53, 0x11, 0xe8, 0xff, 0x35, 0xc4, 0xa0, 0xb5, 0xdd, 0xa3, 0x39, 0xb4, 0x35, 0xf1, 0x73, 0x17, 0x17, 0x5a, 0xc6, 0x42, 0xf7, 0x85, 0x12, 0x9e, 0x15, 0x16, 0x94, 0xea, 0x8b, 0x24, 0x46, 0x27, 0xe3, 0x00, 0xce, 0xb0, 0xf3, 0xbe, 0x08, 0xf9, 0x1c, 0x0f, 0x52, 0x7f, 0x2e, 0x0d, 0xf7, 0xc9, 0xf5, 0x54, 0x92, 0xd1, 0x32, 0x9b, 0x7d, 0x96, 0x89, 0x63, 0x4c, 0x8a, 0x4f, 0x52, 0x10, 0x15, 0x7e, 0x24, 0x19, 0xe6, 0x15, 0xd9, 0x43, 0x17, 0x36, 0xf8, 0x04, 0xb1, 0x64, 0x11, 0x03, 0x37, 0x1e, 0x7f, 0xfe, 0x72, 0x00, 0xe7, 0x42, 0x96, 0x12, 0x7d, 0x59, 0xa8, 0xf9, 0x7d, 0x41, 0xaf, 0x11, 0xd7, 0x0c, 0x3f, 0xd0, 0x25, 0x31, 0xf7, 0xb8, 0x11, 0xda, 0xa7, 0x51, 0x6a, 0xa2, 0xf2, 0xa9, 0xba, 0x70, 0xdc, 0xb7, 0x04, 0xf3, 0xfe, 0xe4, 0x7f, 0x2c, 0xbe, 0xd6, 0x5c, 0x1e, 0x3d, 0x06, 0xc8, 0x81, 0x4e, 0x1b, 0x28, 0xab, 0xe2, 0x9f, 0x3d, 0x05, 0x67, 0x92, 0xef, 0xdf, 0x9a, 0xc9, 0x30, 0x7e, 0xd0, 0x10, 0x6c, 0x5a, 0x32, 0x87, 0x21, 0xaf, 0x0e, 0x20, 0x2b, 0x6d, 0xf7, 0x37, 0xec, 0x4d, 0x82, 0x14, 0x3d, 0xd2, 0x50, 0x5e, 0x10, 0x3a, 0xd8, 0x45, 0x86, 0x3c, 0x45, 0x86, 0x9e, 0x69, 0xab, 0xd9, 0xe0, 0x2c, 0x7b, 0x6e, 0xaa, 0xff, 0x9e, 0x2e, 0x12, 0xbc, 0x18, 0x81, 0x38, 0x68, 0x8c, 0x0b, 0xe3, 0xe6, 0x94, 0x1c, 0x37, 0xc7, 0xdd, 0xc9, 0xb6, 0xd2, 0x89, 0xf7, 0xcc, 0x8f, 0xde, 0x42, 0xbc, 0x3c, 0x14, 0xe3, 0xee, 0x52, 0x16, 0x35, 0xf3, 0x2f, 0x54, 0x28, 0x0d, 0x11, 0x9c, 0xce, 0xdf, 0xc5, 0x10, 0x90, 0xa0, 0xad, 0x00, 0x6b, 0x24, 0x27, 0x60, 0x40, 0x14, 0xea, 0x4d, 0x0e, 0x0c, 0xd1, 0xef, 0xbc, 0xe0, 0x9c, 0x7f, 0x8e, 0x99, 0x81, 0xf9, 0x69, 0xae, 0xd6, 0xd4, 0x81, 0xca, 0xfb, 0x32, 0x9f, 0x99, 0x53, 0x43, 0x54, 0x1d, 0x36, 0x68, 0x6d, 0xe6, 0xcb, 0x8e, 0x4b, 0x1e, 0x7e, 0x37, 0x27, 0xab, 0xd5, 0xc1, 0xe3, 0xff, 0xa6, 0x93, 0x6a, 0xd4, 0x4b, 0x92, 0x60, 0x63, 0x56, 0x15, 0x12, 0xc0, 0xe9, 0xac, 0x78, 0x7f, 0x8e, 0xb7, 0x91, 0xf9, 0x63, 0xf7, 0x90, 0xba, 0x1b, 0x21, 0xdf, 0xe1, 0xb8, 0xd3, 0x1d, 0x4c, 0x16, 0xb1, 0x52, 0xa6, 0xde, 0x65, 0xbf, 0x54, 0xab, 0x0f, 0x0d, 0x1e, 0x3d, 0x45, 0x03, 0x17, 0xb1, 0xcf, 0x0c, 0x4e, 0x33, 0x1d, 0x18, 0x58, 0x7a, 0xcc, 0xb6, 0x96, 0x0c, 0xcd, 0x04, 0xdd }; /* K = 574cca3bd87ec1994449da2f2324a3945fa3047791274367bac0f12d4c064343 */ static const uint8_t ac_dsa_vect266_out[] = { /* R */ 0x7f, 0xc9, 0xba, 0xb3, 0x50, 0x5a, 0xdc, 0xd1, 0xb1, 0xc8, 0x12, 0x7e, 0x2d, 0x1f, 0xbc, 0xd0, 0xe1, 0x5e, 0xaa, 0xc3, 0x14, 0x25, 0x0d, 0xc1, 0xc6, 0x84, 0xfc, 0xc4, 0x7f, 0xda, 0x29, 0x93, /* S */ 0x70, 0xf2, 0x00, 0x7e, 0xdd, 0x68, 0xfb, 0x9d, 0xfe, 0x19, 0xa6, 0x3e, 0xee, 0x4d, 0x5a, 0x97, 0x72, 0x91, 0xab, 0xd2, 0x35, 0xed, 0x26, 0xe4, 0x29, 0x14, 0x76, 0xca, 0x5d, 0x0c, 0x81, 0x71 }; #define ac_dsa_vect267_prime ac_dsa_vect256_prime #define ac_dsa_vect267_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect267_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect267_ptx[] = { /* Msg */ 0xc8, 0x05, 0xd1, 0x8c, 0x0b, 0xb5, 0x3d, 0x32, 0xb5, 0x7c, 0xb6, 0x52, 0xf5, 0xb0, 0xe5, 0x29, 0x3b, 0xe4, 0x92, 0xa1, 0xc8, 0x8d, 0xfb, 0xec, 0x5b, 0xaf, 0x47, 0xee, 0x09, 0x3e, 0x2d, 0xf0, 0x69, 0x18, 0x99, 0x4e, 0x5c, 0xac, 0xbc, 0x3d, 0xff, 0xf2, 0x29, 0xab, 0xd3, 0x1f, 0xab, 0x7a, 0x95, 0xad, 0xe2, 0xfb, 0x53, 0xad, 0xaa, 0x7d, 0xff, 0x51, 0xf6, 0xc8, 0x58, 0x1c, 0x69, 0xeb, 0x5b, 0x09, 0x0b, 0xae, 0xc3, 0x86, 0x07, 0xee, 0x94, 0x35, 0x44, 0x7a, 0xd8, 0x13, 0x74, 0x55, 0xb6, 0xba, 0x17, 0x9f, 0xc5, 0x3a, 0xc0, 0x94, 0xf9, 0x7e, 0x3e, 0x29, 0xd0, 0x72, 0x4c, 0xd1, 0x08, 0x11, 0xf1, 0x42, 0xd6, 0x7d, 0x1c, 0xfc, 0xd5, 0xc3, 0xd1, 0xe9, 0xb4, 0x11, 0xda, 0xc3, 0x8f, 0x6e, 0x1c, 0x0c, 0x14, 0xdc, 0x9a, 0x50, 0xd8, 0x4b, 0xcf, 0x00, 0xec, 0xe8, 0xa6, 0x03 }; static const uint8_t ac_dsa_vect267_priv_val[] = { /* X */ 0x3c, 0xc7, 0xe5, 0x85, 0x77, 0x38, 0x25, 0x00, 0xcb, 0x46, 0x1c, 0x0a, 0xb8, 0xff, 0x01, 0xec, 0xe8, 0xfa, 0x76, 0x6b, 0x66, 0xf8, 0xbe, 0x74, 0x6e, 0x34, 0x7e, 0xd2, 0xeb, 0xc1, 0x8e, 0xbb }; static const uint8_t ac_dsa_vect267_pub_val[] = { /* Y */ 0x2b, 0x6e, 0x1a, 0x8d, 0x44, 0x82, 0xb4, 0x16, 0x97, 0xbb, 0xbe, 0x50, 0xb5, 0x5b, 0x3d, 0xcd, 0xec, 0xea, 0x8d, 0x2e, 0x2e, 0xb5, 0xcf, 0x27, 0xb8, 0x92, 0xbc, 0xbc, 0xab, 0xfb, 0x25, 0x3c, 0x19, 0x48, 0x6f, 0xa7, 0x7c, 0x98, 0xc1, 0x5a, 0xdd, 0x41, 0x49, 0x92, 0x5b, 0x55, 0x01, 0xe5, 0xa5, 0xef, 0x45, 0xb3, 0x2a, 0xd0, 0x9a, 0x87, 0x24, 0x62, 0xa0, 0xf4, 0x1d, 0x04, 0x8a, 0xf4, 0xe5, 0x30, 0x66, 0x0a, 0x38, 0x64, 0x93, 0x7b, 0xa6, 0xa9, 0xeb, 0x07, 0x34, 0xe9, 0x0f, 0xda, 0x3c, 0x9b, 0x6f, 0xcd, 0x30, 0xc9, 0x07, 0x87, 0x71, 0x29, 0x5a, 0x93, 0x80, 0x2d, 0x9e, 0x19, 0x92, 0xa4, 0xee, 0xe9, 0xaf, 0x7a, 0x04, 0x13, 0x88, 0x0f, 0x33, 0xbc, 0x0b, 0x62, 0x03, 0x62, 0x03, 0x28, 0x68, 0x44, 0xbc, 0x38, 0x41, 0x87, 0xec, 0x51, 0xa3, 0x3d, 0x39, 0x0e, 0xaa, 0xc0, 0xcc, 0x33, 0x28, 0x09, 0x8a, 0x84, 0x75, 0x09, 0x12, 0x9b, 0xda, 0x73, 0x59, 0x09, 0xfc, 0x7a, 0x11, 0x89, 0x3a, 0xd0, 0xec, 0x61, 0x27, 0x6b, 0x7a, 0x5d, 0xcd, 0x4e, 0x62, 0x6d, 0x9b, 0xa6, 0x76, 0x10, 0xea, 0xf0, 0xaf, 0x87, 0x6a, 0xfc, 0x04, 0x19, 0xfa, 0x4f, 0x00, 0x9a, 0xa5, 0xf9, 0x13, 0xa1, 0xc7, 0x37, 0x98, 0xc2, 0x70, 0x7e, 0xeb, 0x8f, 0xa7, 0x7f, 0x4e, 0xe0, 0x58, 0x22, 0x9a, 0x0a, 0xd3, 0x7e, 0x84, 0x57, 0x39, 0x66, 0x8d, 0x95, 0xde, 0x22, 0x67, 0x60, 0x89, 0x8c, 0x02, 0xd0, 0x6f, 0x15, 0x5f, 0x82, 0xdc, 0x16, 0x36, 0x0c, 0x3a, 0xbc, 0xa3, 0x78, 0x0b, 0xcd, 0xb7, 0x94, 0x46, 0xc8, 0x34, 0x35, 0x83, 0xdc, 0x0f, 0x69, 0x25, 0x43, 0x4b, 0x0d, 0xae, 0x7b, 0x59, 0xcb, 0x26, 0xb1, 0x00, 0x08, 0xf8, 0x65, 0x70, 0xca, 0x03, 0x50, 0xde, 0x34, 0x0b, 0x27, 0x55, 0x24, 0xf0, 0x05, 0x51, 0x31, 0x0f, 0x1d, 0x09, 0x5d, 0xb8, 0x48, 0x0b, 0x4a, 0xcc, 0x48, 0x9c, 0xf5, 0xe2, 0x94, 0x7e, 0xb9, 0x29, 0x04, 0xeb, 0xfd, 0x0d, 0x97, 0x8b, 0xbf, 0xb5, 0xd0, 0xc6, 0xa1, 0xa9, 0xdb, 0x50, 0xcc, 0x69, 0x17, 0x94, 0x9c, 0x71, 0x85, 0x46, 0x32, 0xb4, 0x40, 0x8b, 0xad, 0xe5, 0x19, 0x5d, 0x40, 0xdc, 0xaf, 0x61, 0xfe, 0x95, 0x0e, 0xff, 0x0c, 0x89, 0x97, 0xc3, 0x74, 0xf1, 0xd4, 0x65, 0xc8, 0x0b, 0xc6, 0x5a, 0xdd, 0xa6, 0x36, 0x43, 0x3e, 0x94, 0xf2, 0x2c, 0x5f, 0xbc, 0xf0, 0x9e, 0x99, 0x66, 0x6a, 0x53, 0x59, 0x19, 0xee, 0x6f, 0x88, 0x15, 0x49, 0x34, 0xf1, 0x13, 0x77, 0xa9, 0xa9, 0xe0, 0x21, 0xf2, 0xd7, 0xec, 0xab, 0xa3, 0x25, 0x10, 0xe9, 0x2b, 0xf5, 0xad, 0x67, 0xfa, 0x8b, 0x3d, 0x70, 0xdd, 0x20, 0x92, 0xb1, 0x38, 0x9e, 0x31, 0x93 }; /* K = 179c02ec8f18fd88146120fcc51628f23e250ad694aa47bd691c0f442a63a92d */ static const uint8_t ac_dsa_vect267_out[] = { /* R */ 0x38, 0x20, 0x8c, 0x09, 0x85, 0x62, 0x4b, 0xb9, 0xd6, 0x27, 0x13, 0xbc, 0x71, 0x50, 0x94, 0x2c, 0xbc, 0x92, 0xb8, 0xe8, 0xa3, 0x6e, 0xf6, 0xd1, 0xec, 0x4d, 0x08, 0xd1, 0xd9, 0xa5, 0x71, 0x5f, /* S */ 0x65, 0xd2, 0xba, 0x78, 0x7e, 0xd4, 0xc0, 0x8b, 0xea, 0xbf, 0x24, 0x34, 0x3d, 0x06, 0xed, 0x61, 0x87, 0x2d, 0x6d, 0x68, 0x4a, 0x3b, 0xc7, 0x03, 0x07, 0xfc, 0xb7, 0xe2, 0x0d, 0xf9, 0x31, 0xda }; #define ac_dsa_vect268_prime ac_dsa_vect256_prime #define ac_dsa_vect268_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect268_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect268_ptx[] = { /* Msg */ 0x9e, 0x0c, 0x66, 0xa4, 0xf1, 0x20, 0xe8, 0x5a, 0xea, 0x06, 0x4e, 0x7a, 0x8b, 0xa1, 0x32, 0xcf, 0x30, 0xa4, 0x5d, 0xe2, 0x88, 0x9f, 0x35, 0x47, 0x38, 0x4e, 0x4e, 0x84, 0xf4, 0x5b, 0x35, 0x72, 0xbb, 0x04, 0x23, 0xb8, 0x34, 0xde, 0x9f, 0x2c, 0x96, 0x36, 0xfa, 0xff, 0xdb, 0x63, 0x31, 0x92, 0x4f, 0x0d, 0x2f, 0x5b, 0x68, 0x76, 0x14, 0x5d, 0x9c, 0xae, 0x11, 0x0a, 0xb0, 0xcf, 0x6f, 0xc9, 0x0c, 0x2e, 0xef, 0xf9, 0x8c, 0x61, 0xfa, 0x18, 0x6c, 0xc3, 0x95, 0x2b, 0x57, 0x29, 0x9a, 0x73, 0x67, 0x8f, 0x45, 0x85, 0xbb, 0x18, 0xfb, 0xb8, 0x4e, 0xf4, 0x16, 0x67, 0x79, 0xff, 0x10, 0xee, 0xd1, 0x4d, 0x47, 0xae, 0x52, 0x8e, 0x03, 0x29, 0x8d, 0xbb, 0x97, 0xcf, 0x4f, 0x88, 0xb7, 0xe6, 0xd0, 0x95, 0x9b, 0x58, 0x94, 0x55, 0x0a, 0x3e, 0x2e, 0x35, 0x69, 0x47, 0xd2, 0x5f, 0xfe, 0x73 }; static const uint8_t ac_dsa_vect268_priv_val[] = { /* X */ 0x5c, 0x57, 0x91, 0xdd, 0x64, 0x87, 0x03, 0xf2, 0x90, 0x99, 0x73, 0x61, 0x46, 0xf5, 0xb1, 0xb5, 0xe3, 0x5d, 0xc7, 0x1a, 0x74, 0xd6, 0xee, 0xd3, 0x12, 0xd3, 0x7a, 0xeb, 0x6d, 0x38, 0x9e, 0xf0 }; static const uint8_t ac_dsa_vect268_pub_val[] = { /* Y */ 0xa6, 0x2a, 0xdb, 0xda, 0xa5, 0xa5, 0x5a, 0x2d, 0x1e, 0x43, 0x9b, 0x54, 0x89, 0xcd, 0x6c, 0x8f, 0xcb, 0x23, 0xe9, 0xc6, 0x4f, 0xbf, 0xae, 0x7c, 0x83, 0xe9, 0xd5, 0x59, 0x93, 0x19, 0xbf, 0x3f, 0x06, 0xc3, 0xc2, 0x90, 0xb9, 0x89, 0xa6, 0x38, 0x94, 0x0b, 0x1d, 0x0b, 0x7e, 0x8b, 0xf6, 0x74, 0x13, 0x19, 0xab, 0x4c, 0x38, 0xd4, 0x6e, 0x77, 0xeb, 0xd4, 0x94, 0x5e, 0x25, 0xcb, 0x89, 0xcb, 0xb6, 0x4e, 0x44, 0xb9, 0x47, 0x4b, 0xc7, 0xc9, 0xd9, 0xf6, 0x1a, 0x36, 0xe5, 0x7e, 0xb6, 0xaf, 0xab, 0x6c, 0x7a, 0x14, 0x9a, 0xfe, 0x02, 0xc1, 0xcd, 0x68, 0x54, 0x83, 0x20, 0x8c, 0x55, 0xfe, 0xec, 0xb0, 0xd0, 0xbd, 0x96, 0x69, 0x7b, 0x43, 0x79, 0x91, 0x05, 0x92, 0x67, 0xd7, 0x6a, 0x48, 0x84, 0x65, 0xfa, 0xab, 0x4a, 0x7e, 0x17, 0x59, 0x23, 0x29, 0x56, 0x70, 0x05, 0xfa, 0xa4, 0x21, 0xe0, 0x11, 0xd6, 0x7f, 0x4d, 0xa7, 0x5a, 0xcc, 0xb6, 0x27, 0x53, 0x7e, 0x93, 0x3e, 0x9e, 0xf0, 0xbe, 0x3c, 0x70, 0xf2, 0x1e, 0xd3, 0xf8, 0xc3, 0xb3, 0xd7, 0xd7, 0x69, 0xbb, 0x61, 0x1f, 0x82, 0xf2, 0xba, 0xa1, 0x0f, 0xbc, 0x73, 0x13, 0xad, 0x08, 0x19, 0x04, 0x8d, 0x35, 0x3d, 0x67, 0x97, 0x36, 0xc4, 0xd1, 0x4b, 0xca, 0x99, 0x85, 0xec, 0xd3, 0x70, 0x41, 0xaf, 0xff, 0xb2, 0x91, 0xa7, 0xd9, 0x09, 0xc7, 0x45, 0x81, 0x81, 0xd0, 0x15, 0x92, 0xe6, 0xc9, 0x0c, 0x0e, 0x34, 0xb4, 0x94, 0x61, 0xed, 0xe6, 0x6c, 0x5a, 0xc0, 0x02, 0x67, 0x1a, 0x49, 0x85, 0x54, 0x6a, 0x60, 0x75, 0xdf, 0x95, 0xb5, 0x23, 0xf1, 0x66, 0xd2, 0xe0, 0xd1, 0xf5, 0xda, 0x77, 0xba, 0xff, 0x5a, 0x24, 0xdf, 0x77, 0x5c, 0xc9, 0xd3, 0x67, 0xf2, 0xa0, 0x72, 0x8c, 0x48, 0x02, 0xd7, 0x97, 0x04, 0x17, 0x88, 0xc5, 0x6c, 0xb8, 0x71, 0x29, 0x03, 0x32, 0xc1, 0x36, 0x1f, 0x8d, 0xa8, 0x89, 0x7b, 0x5b, 0x8e, 0x25, 0xd4, 0xa9, 0x35, 0x94, 0xac, 0x64, 0x8b, 0xc5, 0x3c, 0x9d, 0x85, 0xb4, 0xfc, 0xdd, 0x7a, 0xb0, 0xf5, 0xa3, 0xee, 0x9c, 0x25, 0xcc, 0x14, 0xba, 0x65, 0x43, 0xb0, 0x78, 0x85, 0x95, 0x24, 0xec, 0x7f, 0x0b, 0x61, 0xcd, 0xb2, 0x09, 0xcc, 0x51, 0xc4, 0x0a, 0xa9, 0xaf, 0x08, 0x2e, 0xa9, 0xc1, 0xd4, 0xb9, 0x1b, 0x2c, 0x1f, 0x6d, 0xc1, 0x1c, 0xd8, 0x79, 0xfb, 0x38, 0x65, 0xd8, 0x79, 0xfe, 0x00, 0x0f, 0x0e, 0x0b, 0x4b, 0x23, 0x3d, 0xbd, 0x01, 0xc9, 0xc9, 0x8d, 0x01, 0xa6, 0x64, 0x74, 0x65, 0x77, 0xa6, 0x4b, 0xf2, 0x8d, 0x88, 0x25, 0x6b, 0x76, 0xde, 0x2b, 0xab, 0xf1, 0x49, 0x61, 0x11, 0x37, 0x33, 0xb1, 0xbb, 0x55, 0x53, 0x25, 0xc0, 0x9d, 0x8e, 0xc9, 0x18, 0x9f, 0xca }; /* K = 8327daa2fbd001858dea53d2dc0cb005e0ae5fb15bebc0c5efd33371637ef318 */ static const uint8_t ac_dsa_vect268_out[] = { /* R */ 0x4e, 0x35, 0xf5, 0x86, 0xfa, 0xd4, 0xf5, 0x12, 0x86, 0x3c, 0x48, 0x5e, 0xc6, 0x1e, 0xd0, 0x16, 0x29, 0xaa, 0x13, 0x99, 0xb1, 0x6f, 0xef, 0x4d, 0x80, 0xcb, 0x33, 0x27, 0x52, 0xb1, 0xda, 0x92, /* S */ 0x26, 0x2d, 0xfe, 0x6a, 0xc7, 0x2a, 0x2f, 0x60, 0x44, 0xf6, 0x26, 0x98, 0xe4, 0x2d, 0xd2, 0xf9, 0x2b, 0x1f, 0x9a, 0x91, 0xbe, 0x42, 0xb5, 0xfd, 0xd2, 0x93, 0xb1, 0xbf, 0x9a, 0x14, 0x5f, 0x00 }; #define ac_dsa_vect269_prime ac_dsa_vect256_prime #define ac_dsa_vect269_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect269_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect269_ptx[] = { /* Msg */ 0xed, 0x88, 0xd7, 0x07, 0x6c, 0x5f, 0x6a, 0x5e, 0x0f, 0x94, 0x75, 0x43, 0xd5, 0xfe, 0x74, 0x6a, 0xfc, 0xa9, 0xb2, 0xc4, 0xd0, 0x66, 0x55, 0xda, 0x46, 0x07, 0x68, 0x5c, 0x79, 0x9c, 0x21, 0x0b, 0xe4, 0xaa, 0xee, 0x0e, 0x6e, 0xd1, 0x97, 0x13, 0x81, 0x41, 0x82, 0xc7, 0xf7, 0xd5, 0x84, 0xdd, 0xbe, 0xd4, 0x88, 0xc8, 0xe3, 0x23, 0x9d, 0xdd, 0x81, 0x05, 0x55, 0xad, 0x63, 0x16, 0xd1, 0xdb, 0x37, 0xfd, 0x95, 0x53, 0xad, 0x74, 0xe3, 0xce, 0xef, 0x9e, 0xee, 0xfa, 0xf5, 0x45, 0x63, 0x60, 0x2f, 0x55, 0x47, 0xaa, 0xd4, 0x16, 0x1e, 0x93, 0x84, 0xed, 0xab, 0x65, 0x5a, 0x89, 0x84, 0x16, 0xdb, 0x53, 0xf7, 0x12, 0x37, 0xac, 0x5a, 0x14, 0x85, 0x71, 0x11, 0x82, 0xbc, 0x5b, 0xff, 0xf7, 0x24, 0x60, 0x25, 0x27, 0x84, 0xab, 0x1b, 0xba, 0x23, 0x63, 0x4a, 0x36, 0xbe, 0x77, 0x53, 0x3f }; static const uint8_t ac_dsa_vect269_priv_val[] = { /* X */ 0x22, 0xb4, 0x4b, 0xd6, 0xd2, 0x3e, 0xe6, 0x5e, 0xbc, 0x2e, 0x88, 0x03, 0x0f, 0x83, 0x7e, 0xf6, 0x55, 0x93, 0xee, 0xef, 0x09, 0x66, 0x23, 0x9a, 0x92, 0xd5, 0x12, 0x6c, 0xde, 0x86, 0x7a, 0x13 }; static const uint8_t ac_dsa_vect269_pub_val[] = { /* Y */ 0x3e, 0x1c, 0xe8, 0x78, 0x0f, 0x39, 0x44, 0x4c, 0x21, 0x30, 0xdb, 0xf9, 0xd8, 0x0c, 0xa4, 0xb2, 0x58, 0x17, 0xdc, 0x16, 0xd0, 0x8e, 0x2c, 0xda, 0xca, 0x0b, 0x56, 0xcd, 0x2a, 0xbd, 0xb9, 0xef, 0x5a, 0xdb, 0x74, 0x1c, 0xcc, 0x1a, 0xbe, 0xcf, 0x62, 0x80, 0x6a, 0xd7, 0xe8, 0x76, 0x36, 0xf5, 0x28, 0x31, 0xc6, 0xde, 0xa4, 0x8e, 0x07, 0x29, 0xb9, 0x04, 0xe5, 0xa0, 0x61, 0x5d, 0x7a, 0xb4, 0x45, 0x01, 0x04, 0x20, 0x8a, 0x5d, 0xdf, 0xdb, 0x2f, 0x25, 0x69, 0x14, 0x6e, 0xe8, 0x3a, 0xc9, 0xaa, 0x27, 0xb4, 0xd0, 0x66, 0x35, 0x5f, 0xc5, 0x3d, 0xc1, 0xa3, 0x68, 0x32, 0x11, 0xad, 0x3e, 0xfa, 0xd1, 0xae, 0x69, 0xb8, 0xa7, 0x73, 0x7b, 0xbd, 0x89, 0xf5, 0xff, 0x48, 0x48, 0x2e, 0x2c, 0x56, 0xed, 0xaa, 0x77, 0x6e, 0x43, 0xb2, 0xa0, 0xba, 0x62, 0xe5, 0x13, 0x86, 0x2d, 0xa2, 0x90, 0x28, 0x8f, 0x07, 0xf8, 0x4c, 0xa5, 0xa0, 0x68, 0x37, 0xd1, 0x9e, 0x9b, 0x18, 0x6d, 0xc8, 0xd3, 0x69, 0x52, 0x96, 0x6e, 0x08, 0xf7, 0x21, 0x33, 0x40, 0x18, 0x6d, 0x31, 0xfd, 0x41, 0xa2, 0xd1, 0x45, 0x5a, 0x08, 0x3a, 0xee, 0x62, 0x12, 0x7a, 0x28, 0xdf, 0xe4, 0xda, 0x6c, 0x87, 0x6a, 0x5a, 0x6f, 0x36, 0xc4, 0x52, 0x45, 0xde, 0xe6, 0xf6, 0x56, 0x6b, 0x83, 0x18, 0xd3, 0xd0, 0x19, 0x43, 0xb2, 0xad, 0xf8, 0xce, 0x94, 0xea, 0x01, 0xa0, 0x1b, 0xa4, 0x1a, 0x6e, 0x28, 0x68, 0x20, 0xa9, 0x67, 0x07, 0xcb, 0xd4, 0x00, 0x28, 0x75, 0xb7, 0x9d, 0x9f, 0xe2, 0xdb, 0x6c, 0xc3, 0xf8, 0x08, 0xef, 0x0f, 0x71, 0x38, 0x0e, 0xa9, 0xa7, 0x3f, 0xc7, 0xe3, 0x68, 0x50, 0xd0, 0x22, 0xff, 0xac, 0x13, 0x16, 0x36, 0x36, 0x78, 0x86, 0xa6, 0xe9, 0x96, 0x57, 0x59, 0xd7, 0x3f, 0x03, 0xac, 0xe6, 0x97, 0x04, 0xb5, 0x21, 0x44, 0xf6, 0x7b, 0x67, 0x8e, 0x2f, 0xa2, 0x01, 0xc1, 0x9b, 0xb3, 0x7b, 0x00, 0x37, 0x7d, 0xaa, 0xbc, 0x93, 0x77, 0xad, 0xcb, 0xdd, 0xea, 0x28, 0x16, 0xcb, 0xb5, 0x0b, 0x26, 0xad, 0x2e, 0x42, 0x9e, 0xa0, 0x57, 0x6e, 0x77, 0x21, 0xb3, 0xb7, 0x5c, 0x4f, 0xed, 0xb3, 0x1f, 0xdf, 0x1f, 0x0c, 0x6c, 0x2e, 0xaa, 0x13, 0x5f, 0x52, 0xc9, 0xa9, 0x7f, 0x0d, 0xf5, 0xfb, 0x25, 0xef, 0x28, 0x84, 0x8b, 0xdd, 0x73, 0x90, 0xcd, 0x05, 0x40, 0x03, 0x72, 0x25, 0x82, 0xd9, 0x4e, 0x90, 0xa3, 0xbb, 0xe8, 0x5b, 0xeb, 0x34, 0x70, 0x12, 0x71, 0xb4, 0xbb, 0x48, 0xbd, 0xf9, 0xb3, 0xd0, 0xe1, 0xbb, 0x56, 0x23, 0x44, 0x5c, 0x78, 0x28, 0xc9, 0x37, 0xa4, 0x23, 0xbe, 0x51, 0x2c, 0x11, 0x77, 0xc9, 0xc0, 0xb5, 0xb0, 0xb6, 0xb0, 0xe1, 0xf6, 0x39, 0xd3, 0x30, 0xe0, 0x51 }; /* K = 0c37eecd48682f897accf43b3e4a538cccdfd784625a6cc046dc54b093d16162 */ static const uint8_t ac_dsa_vect269_out[] = { /* R */ 0x2e, 0x7c, 0xb4, 0x04, 0xa6, 0xda, 0xaa, 0x8e, 0x00, 0x76, 0x0d, 0xaf, 0xc9, 0x5b, 0x4e, 0xb5, 0x54, 0x56, 0x83, 0x22, 0x4a, 0x61, 0xa1, 0xbc, 0xd6, 0x12, 0x8b, 0xc4, 0xe7, 0xac, 0x53, 0x5e, /* S */ 0x3a, 0x70, 0xb3, 0xa9, 0x7e, 0x06, 0xe6, 0x3b, 0x89, 0xd5, 0x6e, 0xd5, 0x23, 0x23, 0x46, 0x46, 0x1c, 0x1a, 0x3b, 0x6b, 0x14, 0x5d, 0x89, 0x04, 0x3a, 0x48, 0xd6, 0x66, 0xde, 0x02, 0x56, 0xd5 }; #define ac_dsa_vect270_prime ac_dsa_vect256_prime #define ac_dsa_vect270_sub_prime ac_dsa_vect256_sub_prime #define ac_dsa_vect270_base ac_dsa_vect256_base static const uint8_t ac_dsa_vect270_ptx[] = { /* Msg */ 0x9e, 0x44, 0x00, 0x52, 0xed, 0x92, 0x73, 0x21, 0x94, 0x83, 0x88, 0x77, 0x6d, 0x37, 0x19, 0xbe, 0x06, 0x87, 0x39, 0xdc, 0x2d, 0x6c, 0x64, 0xc5, 0x93, 0x71, 0x76, 0xb2, 0x00, 0x5c, 0x2d, 0x70, 0xa9, 0x38, 0x9e, 0x6a, 0x65, 0x56, 0x63, 0x36, 0x6c, 0x09, 0x70, 0xa8, 0xe2, 0xe3, 0x11, 0x7e, 0xce, 0xf2, 0x57, 0xe9, 0x51, 0xac, 0x81, 0xc0, 0x73, 0x1d, 0xfc, 0xd4, 0xfb, 0xdb, 0x12, 0x41, 0xbc, 0x24, 0x9a, 0xdd, 0xe9, 0xcb, 0x39, 0x8c, 0x7d, 0x15, 0xe3, 0x81, 0x36, 0x8a, 0xd3, 0xd2, 0x4e, 0xde, 0xe2, 0x33, 0x97, 0xc1, 0x5a, 0x5a, 0x35, 0x6e, 0x78, 0x7d, 0x8f, 0x2f, 0xe9, 0xbe, 0x76, 0x26, 0x0b, 0xd3, 0x63, 0xe1, 0x70, 0x06, 0x28, 0x1c, 0x19, 0x9f, 0xe5, 0xb7, 0x10, 0xf9, 0xdf, 0xca, 0xc5, 0x28, 0x95, 0xe3, 0x92, 0xf7, 0x38, 0x4d, 0x71, 0xbb, 0x83, 0x05, 0x3f, 0xfc }; static const uint8_t ac_dsa_vect270_priv_val[] = { /* X */ 0x68, 0x08, 0x83, 0xca, 0xf2, 0x36, 0x65, 0xe8, 0x13, 0x57, 0x2c, 0x1e, 0x42, 0x30, 0x21, 0x8e, 0xdf, 0x53, 0xb3, 0xa5, 0x16, 0x7f, 0x56, 0xa7, 0xd8, 0x0e, 0x53, 0xe7, 0xd3, 0xad, 0x1d, 0xf9 }; static const uint8_t ac_dsa_vect270_pub_val[] = { /* Y */ 0x89, 0xe8, 0x59, 0xfc, 0x63, 0xa2, 0x63, 0xbc, 0xc0, 0x51, 0xbc, 0x2e, 0xf5, 0x8c, 0xc9, 0x19, 0xee, 0x53, 0x73, 0x85, 0xcb, 0x36, 0x36, 0xd8, 0x3a, 0x62, 0x4a, 0x42, 0x30, 0xd4, 0xb0, 0x02, 0x4e, 0xc5, 0xe2, 0x8b, 0xcb, 0x88, 0x46, 0x67, 0xcd, 0x2b, 0xf8, 0xc2, 0x84, 0x51, 0xb6, 0x4d, 0xe0, 0x97, 0xf2, 0x19, 0x4c, 0xbb, 0x8c, 0x6e, 0x1c, 0xec, 0xbd, 0x6f, 0x9f, 0xbd, 0x57, 0x64, 0x81, 0x55, 0x5d, 0x0f, 0x0e, 0x8f, 0x13, 0x75, 0x2f, 0x24, 0x72, 0xf7, 0x61, 0x9d, 0x05, 0x23, 0x18, 0x42, 0x43, 0x10, 0xf6, 0x9d, 0x50, 0xde, 0x78, 0xad, 0x6c, 0x45, 0x7b, 0x98, 0xc6, 0x11, 0xf8, 0x48, 0x1d, 0x45, 0x43, 0x03, 0x1a, 0x73, 0xf8, 0x3d, 0x1e, 0x85, 0x2c, 0x1f, 0x20, 0x38, 0xa6, 0x43, 0x5e, 0x57, 0x1f, 0x77, 0x6b, 0xbb, 0x5c, 0xf9, 0x78, 0xa9, 0xb2, 0xc8, 0x8f, 0x05, 0xd1, 0x34, 0xfd, 0x5f, 0xf4, 0x65, 0x6a, 0x69, 0xd6, 0xfe, 0x6b, 0x66, 0x7d, 0xa6, 0xda, 0x54, 0xbe, 0x48, 0x38, 0x62, 0x50, 0x39, 0x4c, 0x75, 0xb4, 0x95, 0x68, 0x9f, 0xd4, 0x62, 0x8f, 0x66, 0x64, 0x24, 0xeb, 0x08, 0x00, 0x94, 0x44, 0x8d, 0x41, 0xb7, 0x06, 0x29, 0x2e, 0x51, 0xe7, 0x53, 0x86, 0x54, 0x3e, 0x5f, 0xcc, 0xe6, 0xa6, 0xf3, 0xaa, 0xc0, 0x3a, 0x7d, 0x6d, 0x5c, 0x25, 0x51, 0xca, 0x6b, 0x5b, 0x85, 0xfa, 0xdc, 0x86, 0xbf, 0xf1, 0x4c, 0x79, 0xa1, 0x60, 0x2f, 0xb0, 0xc1, 0xd4, 0x3d, 0x88, 0xd5, 0x67, 0x90, 0x21, 0xe8, 0x26, 0x06, 0x2e, 0xcf, 0x18, 0x6a, 0xaa, 0xae, 0xfc, 0x31, 0x2e, 0xab, 0x9f, 0x9e, 0x2d, 0xa1, 0x20, 0xa8, 0xd7, 0xd0, 0x8b, 0xa0, 0x9a, 0xa9, 0xab, 0xf4, 0xe3, 0x4f, 0x6d, 0x88, 0xc4, 0xc3, 0x14, 0xc5, 0x9c, 0x36, 0xba, 0x57, 0xf9, 0x28, 0xd8, 0x8d, 0x5d, 0x70, 0xfe, 0x48, 0xac, 0x67, 0x00, 0xf5, 0xcf, 0x60, 0x7a, 0x55, 0xe3, 0x64, 0x6d, 0xd0, 0x3d, 0x47, 0xe9, 0x6a, 0xd8, 0x69, 0xf7, 0xba, 0x2b, 0xcc, 0x7d, 0x65, 0xa9, 0x9c, 0x32, 0x21, 0xd4, 0x90, 0x9d, 0x1f, 0x22, 0xe4, 0xcc, 0xba, 0x81, 0x5f, 0xa5, 0xb7, 0x20, 0x57, 0x0e, 0x42, 0xf8, 0x62, 0x6c, 0x31, 0xd9, 0x9f, 0x60, 0xcd, 0x6a, 0x01, 0x53, 0x91, 0xfa, 0xb3, 0x53, 0x74, 0x46, 0xf7, 0x47, 0xc0, 0x11, 0x12, 0x93, 0xc5, 0xbd, 0x6b, 0x5d, 0xab, 0x2b, 0xc3, 0xd5, 0x13, 0x7d, 0x21, 0x24, 0x02, 0x9e, 0xed, 0x12, 0xdb, 0x71, 0xbd, 0xf7, 0x94, 0xde, 0x1a, 0x2e, 0xc5, 0x07, 0x0d, 0x83, 0xf8, 0x71, 0x95, 0x26, 0x4f, 0xf0, 0x9c, 0xb4, 0x8c, 0xdd, 0xb5, 0xe8, 0x52, 0xb2, 0x33, 0x57, 0x0f, 0x1b, 0x70, 0xcd, 0x45, 0x7c, 0xf8, 0x64, 0xe2, 0xef, 0x3b }; /* K = 69e6cb5bcf8cae88c96e464a9b26c6e1bbac1e229909e27542278a50c66959f1 */ static const uint8_t ac_dsa_vect270_out[] = { /* R */ 0x37, 0xc3, 0x4f, 0x9c, 0xce, 0x91, 0x6d, 0xf3, 0xde, 0xff, 0x26, 0xbe, 0x08, 0xa4, 0xe6, 0xbb, 0xae, 0x06, 0x61, 0xfb, 0xbb, 0x5d, 0x81, 0xd6, 0x03, 0x9f, 0x00, 0xb1, 0xe5, 0x63, 0x2b, 0x67, /* S */ 0x3f, 0x4a, 0x29, 0x32, 0x91, 0x7e, 0x6b, 0xb0, 0x88, 0x59, 0x9a, 0x26, 0x9d, 0x7b, 0x59, 0x07, 0x69, 0xac, 0xf9, 0x80, 0x7d, 0xc5, 0xa9, 0x42, 0x0a, 0x95, 0xe1, 0x2c, 0x73, 0x64, 0xc5, 0xfa }; /* [mod = L=3072, N=256, SHA-384] */ static const uint8_t ac_dsa_vect271_prime[] = { /* P */ 0xa4, 0x10, 0xd2, 0x3e, 0xd9, 0xad, 0x99, 0x64, 0xd3, 0xe4, 0x01, 0xcb, 0x93, 0x17, 0xa2, 0x52, 0x13, 0xf7, 0x57, 0x12, 0xac, 0xbc, 0x5c, 0x12, 0x19, 0x1a, 0xbf, 0x3f, 0x1c, 0x0e, 0x72, 0x3e, 0x23, 0x33, 0xb4, 0x9e, 0xb1, 0xf9, 0x5b, 0x0f, 0x97, 0x48, 0xd9, 0x52, 0xf0, 0x4a, 0x5a, 0xe3, 0x58, 0x85, 0x9d, 0x38, 0x44, 0x03, 0xce, 0x36, 0x4a, 0xa3, 0xf5, 0x8d, 0xd9, 0x76, 0x99, 0x09, 0xb4, 0x50, 0x48, 0x54, 0x8c, 0x55, 0x87, 0x2a, 0x6a, 0xfb, 0xb3, 0xb1, 0x5c, 0x54, 0x88, 0x2f, 0x96, 0xc2, 0x0d, 0xf1, 0xb2, 0xdf, 0x16, 0x4f, 0x0b, 0xac, 0x84, 0x9c, 0xa1, 0x7a, 0xd2, 0xdf, 0x63, 0xab, 0xd7, 0x5c, 0x88, 0x19, 0x22, 0xe7, 0x9a, 0x50, 0x09, 0xf0, 0x0b, 0x7d, 0x63, 0x16, 0x22, 0xe9, 0x0e, 0x7f, 0xa4, 0xe9, 0x80, 0x61, 0x85, 0x75, 0xe1, 0xd6, 0xbd, 0x1a, 0x72, 0xd5, 0xb6, 0xa5, 0x0f, 0x4f, 0x6a, 0x68, 0xb7, 0x93, 0x93, 0x7c, 0x4a, 0xf9, 0x5f, 0xc1, 0x15, 0x41, 0x75, 0x9a, 0x17, 0x36, 0x57, 0x7d, 0x94, 0x48, 0xb8, 0x77, 0x92, 0xdf, 0xf0, 0x72, 0x32, 0x41, 0x55, 0x12, 0xe9, 0x33, 0x75, 0x5e, 0x12, 0x25, 0x0d, 0x46, 0x6e, 0x9c, 0xc8, 0xdf, 0x15, 0x07, 0x27, 0xd7, 0x47, 0xe5, 0x1f, 0xea, 0x79, 0x64, 0x15, 0x83, 0x26, 0xb1, 0x36, 0x5d, 0x58, 0x0c, 0xb1, 0x90, 0xf4, 0x51, 0x82, 0x91, 0x59, 0x82, 0x21, 0xfd, 0xf3, 0x6c, 0x63, 0x05, 0xc8, 0xb8, 0xa8, 0xed, 0x05, 0x66, 0x3d, 0xd7, 0xb0, 0x06, 0xe9, 0x45, 0xf5, 0x92, 0xab, 0xbe, 0xca, 0xe4, 0x60, 0xf7, 0x7c, 0x71, 0xb6, 0xec, 0x64, 0x9d, 0x3f, 0xd5, 0x39, 0x42, 0x02, 0xed, 0x7b, 0xbb, 0xd0, 0x40, 0xf7, 0xb8, 0xfd, 0x57, 0xcb, 0x06, 0xa9, 0x9b, 0xe2, 0x54, 0xfa, 0x25, 0xd7, 0x1a, 0x37, 0x60, 0x73, 0x40, 0x46, 0xc2, 0xa0, 0xdb, 0x38, 0x3e, 0x02, 0x39, 0x79, 0x13, 0xae, 0x67, 0xce, 0x65, 0x87, 0x0d, 0x9f, 0x6c, 0x6f, 0x67, 0xa9, 0xd0, 0x04, 0x97, 0xbe, 0x1d, 0x76, 0x3b, 0x21, 0x93, 0x7c, 0xf9, 0xcb, 0xf9, 0xa2, 0x4e, 0xf9, 0x7b, 0xbc, 0xaa, 0x07, 0x91, 0x6f, 0x88, 0x94, 0xe5, 0xb7, 0xfb, 0x03, 0x25, 0x88, 0x21, 0xac, 0x46, 0x14, 0x09, 0x65, 0xb2, 0x3c, 0x54, 0x09, 0xca, 0x49, 0x02, 0x6e, 0xfb, 0x2b, 0xf9, 0x5b, 0xce, 0x02, 0x5c, 0x41, 0x83, 0xa5, 0xf6, 0x59, 0xbf, 0x6a, 0xae, 0xef, 0x56, 0xd7, 0x93, 0x3b, 0xb2, 0x96, 0x97, 0xd7, 0xd5, 0x41, 0x34, 0x8c, 0x87, 0x1f, 0xa0, 0x1f, 0x86, 0x96, 0x78, 0xb2, 0xe3, 0x45, 0x06, 0xf6, 0xdc, 0x0a, 0x4c, 0x13, 0x2b, 0x68, 0x9a, 0x0e, 0xd2, 0x7d, 0xc3, 0xc8, 0xd5, 0x37, 0x02, 0xaa, 0x58, 0x48, 0x77 }; static const uint8_t ac_dsa_vect271_sub_prime[] = { /* Q */ 0xab, 0xc6, 0x74, 0x17, 0x72, 0x5c, 0xf2, 0x8f, 0xc7, 0x64, 0x0d, 0x5d, 0xe4, 0x38, 0x25, 0xf4, 0x16, 0xeb, 0xfa, 0x80, 0xe1, 0x91, 0xc4, 0x2e, 0xe8, 0x86, 0x30, 0x33, 0x38, 0xf5, 0x60, 0x45 }; static const uint8_t ac_dsa_vect271_base[] = { /* G */ 0x86, 0x7d, 0x5f, 0xb7, 0x2f, 0x59, 0x36, 0xd1, 0xa1, 0x4e, 0xd3, 0xb6, 0x04, 0x99, 0x66, 0x2f, 0x31, 0x24, 0x68, 0x6e, 0xf1, 0x08, 0xc5, 0xb3, 0xda, 0x66, 0x63, 0xa0, 0xe8, 0x61, 0x97, 0xec, 0x2c, 0xc4, 0xc9, 0x46, 0x01, 0x93, 0xa7, 0x4f, 0xf1, 0x60, 0x28, 0xac, 0x94, 0x41, 0xb0, 0xc7, 0xd2, 0x7c, 0x22, 0x72, 0xd4, 0x83, 0xac, 0x7c, 0xd7, 0x94, 0xd5, 0x98, 0x41, 0x6c, 0x4f, 0xf9, 0x09, 0x9a, 0x61, 0x67, 0x9d, 0x41, 0x7d, 0x47, 0x8c, 0xe5, 0xdd, 0x97, 0x4b, 0xf3, 0x49, 0xa1, 0x45, 0x75, 0xaf, 0xe7, 0x4a, 0x88, 0xb1, 0x2d, 0xd5, 0xf6, 0xd1, 0xcb, 0xd3, 0xf9, 0x1d, 0xdd, 0x59, 0x7e, 0xd6, 0x8e, 0x79, 0xeb, 0xa4, 0x02, 0x61, 0x31, 0x30, 0xc2, 0x24, 0xb9, 0x4a, 0xc2, 0x87, 0x14, 0xa1, 0xf1, 0xc5, 0x52, 0x47, 0x5a, 0x5d, 0x29, 0xcf, 0xcd, 0xd8, 0xe0, 0x8a, 0x6b, 0x1d, 0x65, 0x66, 0x1e, 0x28, 0xef, 0x31, 0x35, 0x14, 0xd1, 0x40, 0x8f, 0x5a, 0xbd, 0x3e, 0x06, 0xeb, 0xe3, 0xa7, 0xd8, 0x14, 0xd1, 0xed, 0xe3, 0x16, 0xbf, 0x49, 0x52, 0x73, 0xca, 0x1d, 0x57, 0x4f, 0x42, 0xb4, 0x82, 0xee, 0xa3, 0x0d, 0xb5, 0x34, 0x66, 0xf4, 0x54, 0xb5, 0x1a, 0x17, 0x5a, 0x0b, 0x89, 0xb3, 0xc0, 0x5d, 0xda, 0x00, 0x6e, 0x71, 0x9a, 0x2e, 0x63, 0x71, 0x66, 0x90, 0x80, 0xd7, 0x68, 0xcc, 0x03, 0x8c, 0xdf, 0xb8, 0x09, 0x8e, 0x9a, 0xad, 0x9b, 0x8d, 0x83, 0xd4, 0xb7, 0x59, 0xf4, 0x3a, 0xc9, 0xd2, 0x2b, 0x35, 0x3e, 0xd8, 0x8a, 0x33, 0x72, 0x35, 0x50, 0x15, 0x0d, 0xe0, 0x36, 0x1b, 0x7a, 0x37, 0x6f, 0x37, 0xb4, 0x5d, 0x43, 0x7f, 0x71, 0xcb, 0x71, 0x1f, 0x28, 0x47, 0xde, 0x67, 0x1a, 0xd1, 0x05, 0x95, 0x16, 0xa1, 0xd4, 0x57, 0x55, 0x22, 0x4a, 0x15, 0xd3, 0x7b, 0x4a, 0xea, 0xda, 0x3f, 0x58, 0xc6, 0x9a, 0x13, 0x6d, 0xae, 0xf0, 0x63, 0x6f, 0xe3, 0x8e, 0x37, 0x52, 0x06, 0x4a, 0xfe, 0x59, 0x84, 0x33, 0xe8, 0x00, 0x89, 0xfd, 0xa2, 0x4b, 0x14, 0x4a, 0x46, 0x27, 0x34, 0xbe, 0xf8, 0xf7, 0x76, 0x38, 0x84, 0x5b, 0x00, 0xe5, 0x9c, 0xe7, 0xfa, 0x4f, 0x1d, 0xaf, 0x48, 0x7a, 0x2c, 0xad, 0xa1, 0x1e, 0xab, 0xa7, 0x2b, 0xb2, 0x3e, 0x1d, 0xf6, 0xb6, 0x6a, 0x18, 0x3e, 0xdd, 0x22, 0x6c, 0x44, 0x02, 0x72, 0xdd, 0x9b, 0x06, 0xbe, 0xc0, 0xe5, 0x7f, 0x1a, 0x08, 0x22, 0xd2, 0xe0, 0x02, 0x12, 0x06, 0x4b, 0x6d, 0xba, 0x64, 0x56, 0x20, 0x85, 0xf5, 0xa7, 0x59, 0x29, 0xaf, 0xa5, 0xfe, 0x50, 0x9e, 0x0b, 0x78, 0xe6, 0x30, 0xaa, 0xf1, 0x2f, 0x91, 0xe4, 0x98, 0x0c, 0x9b, 0x0d, 0x6f, 0x7e, 0x05, 0x9a, 0x2e, 0xa3, 0xe2, 0x34, 0x79, 0xd9, 0x30 }; static const uint8_t ac_dsa_vect271_ptx[] = { /* Msg */ 0xed, 0x9a, 0x64, 0xd3, 0x10, 0x9e, 0xf8, 0xa9, 0x29, 0x29, 0x56, 0xb9, 0x46, 0x87, 0x3c, 0xa4, 0xbd, 0x88, 0x7c, 0xe6, 0x24, 0xb8, 0x1b, 0xe8, 0x1b, 0x82, 0xc6, 0x9c, 0x67, 0xaa, 0xdd, 0xf5, 0x65, 0x5f, 0x70, 0xfe, 0x47, 0x68, 0x11, 0x4d, 0xb2, 0x83, 0x4c, 0x71, 0x78, 0x7f, 0x85, 0x8e, 0x51, 0x65, 0xda, 0x1a, 0x7f, 0xa9, 0x61, 0xd8, 0x55, 0xad, 0x7e, 0x5b, 0xc4, 0xb7, 0xbe, 0x31, 0xb9, 0x7d, 0xbe, 0x77, 0x07, 0x98, 0xef, 0x79, 0x66, 0x15, 0x2b, 0x14, 0xb8, 0x6a, 0xe3, 0x56, 0x25, 0xa2, 0x8a, 0xee, 0x56, 0x63, 0xb9, 0xef, 0x30, 0x67, 0xcb, 0xdf, 0xba, 0xbd, 0x87, 0x19, 0x7e, 0x5c, 0x84, 0x2d, 0x30, 0x92, 0xeb, 0x88, 0xdc, 0xa5, 0x7c, 0x6c, 0x8a, 0xd4, 0xc0, 0x0a, 0x19, 0xdd, 0xf2, 0xe1, 0x96, 0x7b, 0x59, 0xbd, 0x06, 0xcc, 0xae, 0xf9, 0x33, 0xbc, 0x28, 0xe7 }; static const uint8_t ac_dsa_vect271_priv_val[] = { /* X */ 0x6d, 0x4c, 0x93, 0x43, 0x91, 0xb7, 0xf6, 0xfb, 0x6e, 0x19, 0xe3, 0x14, 0x1f, 0x8c, 0x00, 0x18, 0xef, 0x57, 0x26, 0x11, 0x8a, 0x11, 0x06, 0x43, 0x58, 0xc7, 0xd3, 0x5b, 0x37, 0x73, 0x73, 0x77 }; static const uint8_t ac_dsa_vect271_pub_val[] = { /* Y */ 0x1f, 0x0a, 0x5c, 0x75, 0xe7, 0x98, 0x5d, 0x6e, 0x70, 0xe4, 0xfb, 0xfd, 0xa5, 0x1a, 0x10, 0xb9, 0x25, 0xf6, 0xac, 0xcb, 0x60, 0x0d, 0x7c, 0x65, 0x10, 0xdb, 0x90, 0xec, 0x36, 0x7b, 0x93, 0xbb, 0x06, 0x9b, 0xd2, 0x86, 0xe8, 0xf9, 0x79, 0xb2, 0x2e, 0xf0, 0x70, 0x2f, 0x71, 0x7a, 0x87, 0x55, 0xc1, 0x83, 0x09, 0xc8, 0x7d, 0xae, 0x3f, 0xe8, 0x2c, 0xc3, 0xdc, 0x8f, 0x4b, 0x7a, 0xa3, 0xd5, 0xf3, 0x87, 0x6f, 0x4d, 0x4b, 0x3e, 0xb6, 0x8b, 0xfe, 0x91, 0x0c, 0x43, 0x07, 0x6d, 0x6c, 0xd0, 0xd3, 0x9f, 0xc8, 0x8d, 0xde, 0x78, 0xf0, 0x94, 0x80, 0xdb, 0x55, 0x23, 0x4e, 0x6c, 0x8c, 0xa5, 0x9f, 0xe2, 0x70, 0x0e, 0xfe, 0xc0, 0x4f, 0xee, 0xe6, 0xb4, 0xe8, 0xee, 0x24, 0x13, 0x72, 0x18, 0x58, 0xbe, 0x71, 0x90, 0xdb, 0xe9, 0x05, 0xf4, 0x56, 0xed, 0xca, 0xb5, 0x5b, 0x2d, 0xc2, 0x91, 0x6d, 0xc1, 0xe8, 0x73, 0x19, 0x88, 0xd9, 0xef, 0x8b, 0x61, 0x9a, 0xbc, 0xf8, 0x95, 0x5a, 0xa9, 0x60, 0xef, 0x02, 0xb3, 0xf0, 0x2a, 0x8d, 0xc6, 0x49, 0x36, 0x92, 0x22, 0xaf, 0x50, 0xf1, 0x33, 0x8e, 0xd2, 0x8d, 0x66, 0x7f, 0x3f, 0x10, 0xca, 0xe2, 0xa3, 0xc2, 0x8a, 0x3c, 0x1d, 0x08, 0xdf, 0x63, 0x9c, 0x81, 0xad, 0xa1, 0x3c, 0x8f, 0xd1, 0x98, 0xc6, 0xda, 0xe3, 0xd6, 0x2a, 0x3f, 0xe9, 0xf0, 0x4c, 0x98, 0x5c, 0x65, 0xf6, 0x10, 0xc0, 0x6c, 0xb8, 0xfa, 0xea, 0x68, 0xed, 0xb8, 0x0d, 0xe6, 0xcf, 0x07, 0xa8, 0xe8, 0x9c, 0x00, 0x21, 0x81, 0x85, 0xa9, 0x52, 0xb2, 0x35, 0x72, 0xe3, 0x4d, 0xf0, 0x7c, 0xe5, 0xb4, 0x26, 0x1e, 0x5d, 0xe4, 0x27, 0xeb, 0x50, 0x3e, 0xe1, 0xba, 0xf5, 0x99, 0x2d, 0xb6, 0xd4, 0x38, 0xb4, 0x74, 0x34, 0xc4, 0x0c, 0x22, 0x65, 0x7b, 0xc1, 0x63, 0xe7, 0x95, 0x3f, 0xa3, 0x3e, 0xff, 0x39, 0xdc, 0x27, 0x34, 0x60, 0x70, 0x39, 0xaa, 0xdd, 0x6a, 0xc2, 0x7e, 0x43, 0x67, 0x13, 0x10, 0x41, 0xf8, 0x45, 0xff, 0xa1, 0xa1, 0x3f, 0x55, 0x6b, 0xfb, 0xa2, 0x30, 0x7a, 0x5c, 0x78, 0xf2, 0xcc, 0xf1, 0x12, 0x98, 0xc7, 0x62, 0xe0, 0x88, 0x71, 0x96, 0x8e, 0x48, 0xdc, 0x3d, 0x15, 0x69, 0xd0, 0x99, 0x65, 0xcd, 0x09, 0xda, 0x43, 0xcf, 0x03, 0x09, 0xa1, 0x6a, 0xf1, 0xe2, 0x0f, 0xee, 0x7d, 0xa3, 0xdc, 0x21, 0xb3, 0x64, 0xc4, 0x61, 0x5c, 0xd5, 0x12, 0x3f, 0xa5, 0xf9, 0xb2, 0x3c, 0xfc, 0x4f, 0xfd, 0x9c, 0xfd, 0xce, 0xa6, 0x70, 0x62, 0x38, 0x40, 0xb0, 0x62, 0xd4, 0x64, 0x8d, 0x2e, 0xba, 0x78, 0x6a, 0xd3, 0xf7, 0xae, 0x33, 0x7a, 0x42, 0x84, 0x32, 0x4a, 0xce, 0x23, 0x6f, 0x9f, 0x71, 0x74, 0xfb, 0xf4, 0x42, 0xb9, 0x90, 0x43, 0x00, 0x2f }; /* K = 40b5cc685c3d1f59072228af9551683b5b8c8ff65240114ad2dacfccf3928057 */ static const uint8_t ac_dsa_vect271_out[] = { /* R */ 0x76, 0x95, 0x69, 0x8a, 0x14, 0x75, 0x5d, 0xb4, 0x20, 0x6e, 0x85, 0x0b, 0x4f, 0x5f, 0x19, 0xc5, 0x40, 0xb0, 0x7d, 0x07, 0xe0, 0x8a, 0xac, 0x59, 0x1e, 0x20, 0x08, 0x16, 0x46, 0xe6, 0xee, 0xdc, /* S */ 0x3d, 0xae, 0x01, 0x15, 0x4e, 0xcf, 0xf7, 0xb1, 0x90, 0x07, 0xa9, 0x53, 0xf1, 0x85, 0xf0, 0x66, 0x3e, 0xf7, 0xf2, 0x53, 0x7f, 0x0b, 0x15, 0xe0, 0x4f, 0xb3, 0x43, 0xc9, 0x61, 0xf3, 0x6d, 0xe2 }; #define ac_dsa_vect272_prime ac_dsa_vect271_prime #define ac_dsa_vect272_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect272_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect272_ptx[] = { /* Msg */ 0x4b, 0xfd, 0x28, 0xa0, 0xa7, 0x9c, 0x94, 0xdb, 0xd6, 0x67, 0xc2, 0x75, 0xef, 0x77, 0xa2, 0x35, 0xd8, 0xea, 0xd7, 0xc6, 0x98, 0xd4, 0x2f, 0xb7, 0xf7, 0xc1, 0xfd, 0x3c, 0x8c, 0x2d, 0xc4, 0x8d, 0x0d, 0xda, 0x24, 0x08, 0xde, 0xa5, 0x63, 0x25, 0xd6, 0x92, 0x83, 0x69, 0x2a, 0x52, 0x3d, 0x28, 0x1f, 0xfe, 0xa8, 0x56, 0xff, 0xd9, 0xf8, 0x41, 0x7e, 0xaf, 0xbe, 0xa6, 0x06, 0xd8, 0x62, 0xdc, 0x58, 0x97, 0xbd, 0xf2, 0x41, 0xf3, 0xe8, 0xe4, 0x9a, 0xde, 0xd5, 0xea, 0xdc, 0x72, 0x95, 0xe5, 0xaf, 0xbf, 0x96, 0xb3, 0x97, 0x5d, 0x0e, 0x25, 0xda, 0xa2, 0x43, 0x36, 0x12, 0xe1, 0x20, 0xf6, 0x59, 0x03, 0x6b, 0x80, 0x7c, 0x18, 0x53, 0xc0, 0x3c, 0x90, 0xfa, 0xde, 0x2c, 0x19, 0xdc, 0xd9, 0x23, 0x49, 0x2e, 0xcc, 0x90, 0x6c, 0xaf, 0xc5, 0x7a, 0x95, 0xda, 0x6f, 0x20, 0xdd, 0x59, 0xd6 }; static const uint8_t ac_dsa_vect272_priv_val[] = { /* X */ 0x95, 0xfd, 0xed, 0x7e, 0x5e, 0x94, 0x96, 0x02, 0xc1, 0x12, 0x3d, 0x80, 0xf8, 0x95, 0x03, 0xcc, 0x5f, 0xb7, 0x45, 0x4b, 0xe3, 0x17, 0x3a, 0xf4, 0x95, 0xa1, 0x87, 0x09, 0xc1, 0xc2, 0x50, 0x6e }; static const uint8_t ac_dsa_vect272_pub_val[] = { /* Y */ 0x6c, 0x77, 0x8b, 0xcb, 0x14, 0x65, 0x82, 0x27, 0x76, 0x33, 0x93, 0x1b, 0xfd, 0x02, 0x9e, 0x69, 0xc9, 0xe8, 0xc0, 0xae, 0x9e, 0x24, 0x91, 0x3f, 0xa7, 0x34, 0x55, 0x4f, 0x24, 0xf6, 0x4a, 0xa6, 0x4f, 0xd9, 0xbc, 0x60, 0x8e, 0xf6, 0x77, 0xa1, 0xd4, 0x82, 0x9a, 0xa8, 0xa8, 0x56, 0x4c, 0x2f, 0xf0, 0xff, 0xa2, 0xfa, 0x6a, 0x0c, 0x1a, 0x2c, 0xcb, 0x60, 0x6d, 0xda, 0x01, 0x8b, 0xf0, 0x95, 0xf8, 0xc8, 0x97, 0xd7, 0xa4, 0x33, 0x49, 0xbe, 0xb9, 0x80, 0x7b, 0x7b, 0x11, 0x8f, 0x8d, 0xe8, 0x85, 0x6b, 0x16, 0x4b, 0x8d, 0x8b, 0xab, 0xdc, 0x17, 0xb4, 0x8f, 0x3a, 0x2b, 0x97, 0x2c, 0xe5, 0x37, 0xab, 0x4e, 0x7a, 0x7d, 0x9b, 0xa5, 0xd7, 0xe6, 0xfa, 0x36, 0x98, 0xac, 0xa9, 0x19, 0x73, 0xcd, 0x17, 0x87, 0xef, 0x7b, 0x6b, 0x4d, 0x04, 0x10, 0xde, 0x59, 0xcd, 0x31, 0x43, 0xe0, 0xf3, 0xac, 0xfd, 0xaa, 0xbe, 0x56, 0xb3, 0x71, 0xb4, 0x35, 0x4d, 0x0d, 0x32, 0xdb, 0xd1, 0xb5, 0xca, 0x6a, 0x87, 0x20, 0x54, 0xf3, 0xe6, 0x56, 0x63, 0x19, 0xd5, 0xd5, 0x0b, 0x2c, 0xf5, 0x4c, 0x12, 0x3f, 0xfc, 0x92, 0x90, 0x07, 0xad, 0x18, 0x57, 0xba, 0x13, 0xb7, 0xc4, 0x03, 0xf5, 0x51, 0xc2, 0xfa, 0x41, 0x09, 0xc4, 0x4e, 0x19, 0xef, 0x97, 0xaf, 0xb6, 0x2a, 0x61, 0x03, 0x35, 0x6f, 0xcc, 0x2e, 0xf4, 0x51, 0xe7, 0x36, 0x26, 0x10, 0x10, 0xb0, 0xef, 0x58, 0xae, 0x07, 0xa0, 0xc8, 0x01, 0xff, 0x75, 0xeb, 0xaf, 0x6c, 0xdd, 0x76, 0x3f, 0x8d, 0xf2, 0xf8, 0x3f, 0x0e, 0xbb, 0xda, 0x40, 0x84, 0x5b, 0x2f, 0x42, 0xd3, 0xfe, 0xea, 0xc0, 0x71, 0xfc, 0x62, 0x6e, 0xe5, 0xb5, 0x1f, 0x9b, 0xc1, 0xa1, 0x30, 0x51, 0x4f, 0x22, 0x04, 0x97, 0x1b, 0x4b, 0x72, 0x61, 0xb4, 0xbd, 0x78, 0x3f, 0xf7, 0x57, 0x75, 0xaa, 0x73, 0xa6, 0x3d, 0x7e, 0xbe, 0x99, 0x0b, 0x93, 0x9b, 0x0f, 0x44, 0xa9, 0x09, 0xec, 0x39, 0x00, 0x36, 0xf2, 0x97, 0xc3, 0x56, 0x3f, 0x64, 0xd1, 0x42, 0xc1, 0x4e, 0xa4, 0x3c, 0x5d, 0x3c, 0x6d, 0xef, 0x4a, 0x3a, 0x9c, 0xcf, 0x62, 0x74, 0x18, 0x2b, 0x93, 0x9b, 0x88, 0x65, 0x01, 0xae, 0xb4, 0xef, 0xb2, 0x3d, 0x00, 0x73, 0x43, 0x4c, 0xec, 0x6a, 0x91, 0x5a, 0x67, 0xe2, 0x4c, 0xbb, 0x23, 0x54, 0xc9, 0xbb, 0x10, 0x89, 0xaf, 0x48, 0x7e, 0xab, 0x5d, 0x8e, 0x49, 0x9a, 0x63, 0x2e, 0x6c, 0x61, 0x49, 0x2e, 0xa1, 0x5d, 0x2c, 0x44, 0x4c, 0x26, 0x9d, 0xe3, 0x32, 0x71, 0xa9, 0x00, 0x42, 0x46, 0x8d, 0xe2, 0x76, 0x7f, 0x0d, 0xcf, 0x7a, 0x66, 0x42, 0x4a, 0x3a, 0x40, 0xa6, 0x3e, 0xeb, 0xd1, 0x9c, 0xb8, 0x9c, 0x8d, 0x74, 0xc5, 0x85, 0x04, 0xc4, 0xe1, 0x03 }; /* K = 6bd1eede564ecb1b3fbbf2d96e334ab4cc002e6624e2cb8448d8608fe0e8c43b */ static const uint8_t ac_dsa_vect272_out[] = { /* R */ 0x37, 0xc3, 0xf7, 0x55, 0x6d, 0x6e, 0x5a, 0xcf, 0x79, 0x89, 0xf0, 0xba, 0xa7, 0x70, 0xc2, 0x45, 0x0d, 0xee, 0xbd, 0x4d, 0x5f, 0x58, 0xb6, 0x1e, 0x17, 0xb4, 0xb2, 0xb9, 0x26, 0xb5, 0x80, 0x31, /* S */ 0xa6, 0x1d, 0x86, 0x36, 0x5f, 0x10, 0xca, 0x5e, 0x1e, 0xe2, 0xc4, 0xbf, 0x27, 0x6f, 0x23, 0x74, 0xe8, 0x8b, 0x5a, 0x2d, 0x1a, 0xcd, 0x8e, 0xcc, 0x11, 0xe9, 0x77, 0x85, 0xb4, 0xfd, 0x99, 0x31 }; #define ac_dsa_vect273_prime ac_dsa_vect271_prime #define ac_dsa_vect273_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect273_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect273_ptx[] = { /* Msg */ 0xe3, 0xfc, 0x75, 0x1b, 0x69, 0x78, 0xfc, 0xf4, 0x0f, 0x09, 0x60, 0x6e, 0xe4, 0x26, 0x3e, 0x16, 0x60, 0xff, 0x20, 0xe9, 0xc6, 0x3a, 0x71, 0x38, 0xf0, 0x78, 0xae, 0x3e, 0x3e, 0x60, 0x3d, 0xfc, 0xad, 0x17, 0x2f, 0x3c, 0x7c, 0xb3, 0xf3, 0x54, 0x5f, 0xc2, 0x3b, 0xc3, 0x0c, 0x37, 0xc8, 0x43, 0x9c, 0x7b, 0x23, 0x83, 0x41, 0xf2, 0x91, 0x48, 0x27, 0x6e, 0xa2, 0x12, 0x2e, 0xa8, 0xed, 0x0f, 0xea, 0xcb, 0x14, 0x9d, 0xe1, 0x7c, 0xfd, 0x33, 0xb8, 0xc9, 0x40, 0x8a, 0xee, 0x8a, 0xb0, 0xea, 0x8b, 0xa4, 0xa2, 0xb2, 0xea, 0x23, 0x74, 0x18, 0xbc, 0x31, 0x65, 0x36, 0x9c, 0x8c, 0xd4, 0x20, 0x24, 0x2f, 0x8d, 0x32, 0xbc, 0xab, 0xe0, 0xc3, 0x52, 0xe2, 0x1f, 0x65, 0xde, 0x80, 0xd5, 0x87, 0xba, 0x27, 0x13, 0xce, 0xa6, 0xe5, 0x3c, 0xa5, 0x24, 0xae, 0xc3, 0x65, 0xbd, 0xf2, 0x1a, 0xdc }; static const uint8_t ac_dsa_vect273_priv_val[] = { /* X */ 0x3a, 0x09, 0x00, 0x6f, 0xae, 0xde, 0xc9, 0x14, 0x46, 0x99, 0x5a, 0x39, 0x3b, 0x03, 0x4b, 0x0c, 0x7f, 0xf3, 0xfc, 0xd0, 0x5c, 0xda, 0x2e, 0x9e, 0x3b, 0x2f, 0x98, 0xe3, 0xa4, 0xbb, 0xb9, 0xf5 }; static const uint8_t ac_dsa_vect273_pub_val[] = { /* Y */ 0x13, 0x49, 0xbb, 0xf1, 0x6d, 0x37, 0x5c, 0x39, 0x2a, 0x9a, 0xcd, 0x5b, 0xdc, 0xe6, 0x55, 0xf1, 0x4d, 0x61, 0x62, 0x74, 0x38, 0x8a, 0x45, 0xcd, 0x37, 0x29, 0x25, 0xc5, 0x07, 0xac, 0x12, 0x9f, 0xe6, 0x1b, 0x99, 0x8e, 0x25, 0x12, 0x7f, 0x21, 0x09, 0x26, 0xad, 0x11, 0x91, 0x58, 0x3e, 0xee, 0x8c, 0x41, 0x90, 0x02, 0x6b, 0xa0, 0xa9, 0x58, 0x94, 0xbe, 0x3f, 0x0a, 0xd5, 0xd0, 0x58, 0x86, 0xc5, 0x9a, 0x3c, 0x7a, 0x00, 0x44, 0xf7, 0xe2, 0xbd, 0x9b, 0xbe, 0x28, 0xbf, 0x93, 0x66, 0xd0, 0x34, 0xdb, 0x42, 0x4f, 0x34, 0x96, 0x0e, 0x30, 0xa8, 0xe7, 0x88, 0x8f, 0x92, 0x7d, 0x0b, 0xf9, 0x84, 0xb0, 0xff, 0x99, 0xea, 0x27, 0x18, 0x71, 0x12, 0x4a, 0xa1, 0x2e, 0x0c, 0x0e, 0x19, 0x62, 0x4e, 0x53, 0x3c, 0xb4, 0x14, 0x9c, 0xed, 0xb3, 0xe1, 0x1d, 0x32, 0x16, 0x00, 0xdc, 0x07, 0xb3, 0x2e, 0x53, 0x1a, 0x61, 0x5c, 0x8f, 0x7f, 0xd7, 0xf3, 0x3a, 0x07, 0x1c, 0xaa, 0xa7, 0x64, 0x33, 0xd1, 0xaa, 0xb0, 0xb7, 0x10, 0xfa, 0x7b, 0xa3, 0xdd, 0xb0, 0x17, 0x5c, 0xed, 0x4e, 0x55, 0x8d, 0x51, 0x17, 0xaf, 0xc7, 0x54, 0x2b, 0x9b, 0x07, 0xa8, 0xfe, 0x8e, 0x4b, 0x08, 0xa1, 0xde, 0x45, 0x64, 0x43, 0x55, 0x3f, 0xe8, 0x7a, 0x4c, 0x24, 0x55, 0xde, 0xd7, 0x2f, 0x98, 0x54, 0x4d, 0x6c, 0x41, 0xd6, 0xef, 0x66, 0xb7, 0x14, 0x2a, 0x4a, 0xa9, 0xaa, 0x1d, 0x3d, 0x20, 0xf7, 0x00, 0x01, 0x03, 0x89, 0xe4, 0x17, 0x84, 0x07, 0x82, 0xfa, 0xd6, 0x82, 0x15, 0x3d, 0x56, 0x9f, 0x94, 0x4d, 0x3d, 0x3a, 0xd1, 0xd8, 0x8d, 0xb5, 0xbf, 0xba, 0x34, 0x99, 0xe4, 0xc3, 0x66, 0x0b, 0x76, 0xb4, 0x4d, 0xa4, 0xb0, 0xe6, 0x72, 0x7e, 0xbc, 0x3f, 0x22, 0xb2, 0xa0, 0xaa, 0xf6, 0x2d, 0xc2, 0xa2, 0x9d, 0xb8, 0xba, 0xbc, 0xac, 0xc2, 0x16, 0x9c, 0x2b, 0x86, 0x74, 0x05, 0x4c, 0x89, 0xfd, 0x77, 0x0d, 0xb9, 0x8b, 0x12, 0xaf, 0x2d, 0x93, 0x3b, 0xec, 0xbe, 0xca, 0x9f, 0x22, 0x44, 0x4b, 0x52, 0x7a, 0xa8, 0x94, 0xb3, 0x76, 0x52, 0x92, 0xdc, 0xff, 0xaf, 0x34, 0x08, 0xe6, 0x99, 0x49, 0x5d, 0xf7, 0x9b, 0x98, 0xd9, 0x57, 0xfd, 0xba, 0x7e, 0x4c, 0x8e, 0x7a, 0xce, 0x3f, 0x98, 0x7a, 0x95, 0xdc, 0xb2, 0xe7, 0x77, 0xfa, 0x2d, 0x13, 0x04, 0x47, 0x9a, 0x6d, 0x13, 0x7e, 0xfc, 0xb0, 0xc4, 0x04, 0xe6, 0xd8, 0xed, 0x39, 0xd6, 0xaf, 0xba, 0x25, 0x49, 0xf3, 0xee, 0x2b, 0x9a, 0x45, 0xf3, 0x24, 0x56, 0x7c, 0x02, 0x27, 0x31, 0x9d, 0xc5, 0x9b, 0xca, 0xdf, 0xcf, 0xdf, 0x15, 0x66, 0xf3, 0x56, 0xf7, 0xc2, 0xba, 0x6d, 0xb2, 0x1c, 0xca, 0x2a, 0x8f, 0xb2, 0xfb, 0xea, 0xf3, 0x1c, 0xb7 }; /* K = 4212971feb32e25fbb22845ab8c9333cb2a265f003542838a128a25108a88365 */ static const uint8_t ac_dsa_vect273_out[] = { /* R */ 0x2d, 0x3f, 0x3c, 0x60, 0x5e, 0xca, 0x8f, 0xec, 0x37, 0xa7, 0x6d, 0x60, 0x6d, 0x20, 0xfd, 0xe8, 0x9c, 0xb6, 0xf9, 0x71, 0xa4, 0x47, 0x96, 0x09, 0x5a, 0x01, 0xdc, 0xf8, 0xe9, 0x00, 0xf5, 0xb2, /* S */ 0x6a, 0x43, 0x16, 0x83, 0x34, 0xe5, 0xb0, 0xea, 0x07, 0xcf, 0xa5, 0x97, 0x86, 0x09, 0xe8, 0x6f, 0x96, 0x9d, 0x10, 0x05, 0x52, 0x8e, 0xbb, 0x3e, 0xe9, 0x07, 0x3d, 0x56, 0x55, 0xd5, 0x4b, 0x44 }; #define ac_dsa_vect274_prime ac_dsa_vect271_prime #define ac_dsa_vect274_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect274_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect274_ptx[] = { /* Msg */ 0x45, 0xf6, 0x56, 0xa1, 0xef, 0x0e, 0x61, 0xde, 0x46, 0xdf, 0x2c, 0xa2, 0xd8, 0xea, 0x26, 0x64, 0x0a, 0x99, 0x4c, 0x30, 0x38, 0x0c, 0x0c, 0xfd, 0x66, 0xbe, 0x39, 0x98, 0xd8, 0x98, 0x49, 0x16, 0x1b, 0xbc, 0xf3, 0xbe, 0xe7, 0x7a, 0xd3, 0x0e, 0x76, 0x9f, 0x10, 0xe2, 0x3a, 0xad, 0x5b, 0x4d, 0xf4, 0xed, 0xc1, 0x9a, 0x86, 0xfb, 0xb5, 0xab, 0xde, 0xec, 0x87, 0x79, 0xb7, 0x6b, 0xe2, 0x79, 0x53, 0x2d, 0x76, 0x92, 0xbc, 0x58, 0x6c, 0x62, 0x69, 0x2f, 0xa1, 0xe3, 0xdb, 0xcc, 0xe3, 0x3f, 0xfd, 0xdc, 0x9f, 0x97, 0x58, 0x91, 0x72, 0xf6, 0x4a, 0x48, 0x53, 0x56, 0x93, 0xde, 0xd6, 0xbc, 0x73, 0xb2, 0xca, 0x32, 0x46, 0x9d, 0x0e, 0xaf, 0x67, 0x06, 0xd2, 0xa5, 0xf5, 0x8f, 0x8d, 0x28, 0xa7, 0x45, 0xdc, 0x32, 0x8b, 0xcc, 0x75, 0xb3, 0x41, 0x5c, 0xa9, 0x3e, 0x29, 0xea, 0xbb, 0x1e }; static const uint8_t ac_dsa_vect274_priv_val[] = { /* X */ 0x9f, 0x35, 0xb1, 0x03, 0x86, 0x86, 0xbd, 0xe0, 0x7a, 0x5f, 0x51, 0x7d, 0x68, 0xf5, 0x62, 0x73, 0x9c, 0xb7, 0x15, 0x0f, 0xa4, 0x7e, 0xba, 0xf7, 0xff, 0xd2, 0x93, 0x06, 0xaf, 0xd4, 0x68, 0x8a }; static const uint8_t ac_dsa_vect274_pub_val[] = { /* Y */ 0x31, 0xa9, 0x89, 0x60, 0x1f, 0x32, 0xb2, 0x05, 0x94, 0x3a, 0x84, 0x18, 0x87, 0xdf, 0x3c, 0x68, 0x14, 0xcf, 0xb2, 0x25, 0x8e, 0x52, 0x04, 0xd0, 0x4d, 0x39, 0x28, 0xdd, 0xfa, 0xba, 0x0d, 0xff, 0xad, 0x43, 0x15, 0x1e, 0x27, 0xd6, 0x66, 0xd2, 0x92, 0x8b, 0xed, 0xc6, 0x72, 0x75, 0x44, 0x0f, 0xb5, 0x02, 0xed, 0x3e, 0xaf, 0xc3, 0xad, 0xc1, 0x10, 0x09, 0xee, 0x70, 0x3f, 0x01, 0xea, 0xa0, 0x34, 0xaa, 0x72, 0x4f, 0xcc, 0x63, 0xc5, 0x9a, 0x8a, 0x59, 0x63, 0xf3, 0x35, 0x2f, 0x72, 0x93, 0xea, 0x24, 0x25, 0xea, 0x89, 0xbb, 0xf1, 0xe4, 0x17, 0x24, 0xb6, 0x9f, 0x38, 0x3b, 0xf1, 0x0a, 0x97, 0x31, 0x46, 0xed, 0x02, 0xf5, 0x52, 0x08, 0xb0, 0x48, 0x33, 0xd1, 0xbb, 0x53, 0x99, 0xa6, 0x7f, 0x04, 0x08, 0x15, 0x90, 0xac, 0xfc, 0xfb, 0xb1, 0x21, 0x05, 0x42, 0x3e, 0x26, 0x09, 0x1d, 0x09, 0x07, 0x8c, 0x45, 0x00, 0x7d, 0x43, 0x6e, 0xb1, 0x9f, 0x95, 0x2f, 0x87, 0x98, 0xb0, 0x01, 0xa3, 0xc6, 0x4a, 0x3b, 0xaa, 0x54, 0x96, 0xc9, 0xdb, 0xe6, 0x58, 0x07, 0x81, 0xd4, 0x02, 0x0b, 0xb7, 0xe4, 0xe7, 0xae, 0x23, 0x80, 0xce, 0x79, 0x65, 0x8c, 0x10, 0xa2, 0xe5, 0x7b, 0xbb, 0x8c, 0xac, 0x12, 0x08, 0x77, 0x28, 0xce, 0x43, 0xba, 0x2b, 0x9f, 0x38, 0x0e, 0x3a, 0xbc, 0x2d, 0xd1, 0x2a, 0x68, 0x24, 0x88, 0xc6, 0xb4, 0xfb, 0x2f, 0x8d, 0xd7, 0xf3, 0x84, 0x6b, 0x6a, 0x26, 0xf9, 0x13, 0xac, 0x15, 0x68, 0x79, 0xee, 0x6a, 0x1a, 0xe0, 0xad, 0xa9, 0x56, 0x85, 0x21, 0xa4, 0x42, 0x8e, 0xd9, 0xf7, 0x41, 0xe0, 0xe7, 0x9a, 0x84, 0x28, 0x80, 0x01, 0x9c, 0x01, 0xb3, 0x4e, 0x98, 0x8a, 0x7c, 0xf7, 0xe6, 0x35, 0x24, 0xe8, 0xcd, 0x02, 0x54, 0x53, 0x22, 0x3a, 0x26, 0x60, 0x27, 0x3e, 0x49, 0x19, 0x68, 0xaf, 0x7f, 0x4b, 0x1d, 0xc2, 0x12, 0x39, 0x61, 0xde, 0x37, 0x53, 0xab, 0x16, 0xec, 0xa5, 0xb1, 0x85, 0x9a, 0x4f, 0x71, 0x17, 0x25, 0x38, 0xf0, 0x5a, 0x2a, 0x82, 0xa3, 0x4f, 0x98, 0xba, 0x07, 0xc1, 0xe5, 0x31, 0xd8, 0x2e, 0xf5, 0x92, 0xe5, 0x49, 0x35, 0x33, 0x41, 0x6b, 0xd6, 0xc6, 0xa4, 0xc7, 0xca, 0x3b, 0x0d, 0x2a, 0x2f, 0xff, 0x88, 0xa8, 0xf0, 0x73, 0xa7, 0x6c, 0x69, 0x18, 0x02, 0xaa, 0xae, 0xce, 0x4e, 0x85, 0x2d, 0x66, 0x50, 0x87, 0x1a, 0x17, 0xcc, 0xa0, 0xf5, 0x25, 0x1e, 0xf2, 0x2d, 0xfc, 0x8e, 0x3b, 0x26, 0x1b, 0xfc, 0xbd, 0x5a, 0x22, 0xb2, 0x73, 0x2a, 0xa1, 0x7d, 0x7d, 0xf1, 0xf7, 0xb8, 0x2f, 0x6b, 0x22, 0x2e, 0x5f, 0x60, 0x65, 0xbf, 0x80, 0xd0, 0x4c, 0x2e, 0x57, 0x74, 0x09, 0x40, 0x84, 0xe4, 0xd5, 0xce, 0x0d, 0x3e, 0x89, 0x17 }; /* K = 55d1ffc73b52b6364d660fa4658a6351142ac538fd3cfb4eec40ba07bef5418b */ static const uint8_t ac_dsa_vect274_out[] = { /* R */ 0x3c, 0xed, 0x0e, 0xa5, 0xf7, 0xfd, 0x58, 0x86, 0x68, 0xa4, 0x1e, 0xfe, 0x0e, 0x90, 0x95, 0x4c, 0x09, 0x30, 0xaf, 0xb6, 0xbe, 0x18, 0xd9, 0x07, 0x52, 0x83, 0x1f, 0x68, 0x3c, 0xd9, 0x2a, 0x9c, /* S */ 0x9e, 0x46, 0xca, 0x12, 0x94, 0x17, 0x45, 0xea, 0x1a, 0x12, 0xc5, 0xa2, 0xd6, 0x09, 0x88, 0x4c, 0xb5, 0x79, 0x2f, 0x46, 0xaf, 0xaa, 0xcf, 0xf0, 0x72, 0x37, 0x13, 0x74, 0x00, 0x36, 0x68, 0x68 }; #define ac_dsa_vect275_prime ac_dsa_vect271_prime #define ac_dsa_vect275_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect275_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect275_ptx[] = { /* Msg */ 0xc7, 0x37, 0xd5, 0xae, 0x24, 0x8a, 0x96, 0x06, 0x2d, 0x6a, 0xfa, 0x8d, 0xca, 0xcc, 0x03, 0x84, 0xc5, 0xfb, 0xfb, 0x9d, 0x8b, 0x60, 0x52, 0xb5, 0x24, 0x93, 0xc6, 0x0d, 0x3e, 0xdf, 0xc5, 0x24, 0xb5, 0x67, 0xb1, 0xf8, 0x96, 0xe7, 0x44, 0x7d, 0x0e, 0x24, 0x01, 0x94, 0x03, 0xed, 0x83, 0xe4, 0x88, 0x9c, 0x0c, 0x4d, 0xe5, 0x7c, 0x70, 0xfa, 0xda, 0x6c, 0x8b, 0x5a, 0x09, 0x90, 0x43, 0x50, 0xa4, 0x4d, 0xfa, 0xf7, 0x7d, 0x60, 0xaf, 0x62, 0xde, 0x3e, 0xdf, 0xd8, 0x76, 0x0d, 0x07, 0x74, 0x73, 0xf2, 0x6d, 0xf2, 0x83, 0x7c, 0xfc, 0x20, 0x15, 0xf2, 0x27, 0xdd, 0x7d, 0x35, 0x1a, 0x53, 0x50, 0xf1, 0x42, 0x8f, 0x26, 0x99, 0xfd, 0x3f, 0x51, 0x83, 0x26, 0xfe, 0xa8, 0xae, 0xf9, 0x8f, 0xc4, 0xea, 0x67, 0x31, 0x30, 0xc8, 0x07, 0x9f, 0xac, 0x38, 0x95, 0xfe, 0x85, 0x6c, 0x77, 0xf8 }; static const uint8_t ac_dsa_vect275_priv_val[] = { /* X */ 0x40, 0xdb, 0xd4, 0x96, 0xfc, 0x46, 0x44, 0xbe, 0x7c, 0xcb, 0x24, 0xd9, 0xdc, 0x55, 0x89, 0x5c, 0x1b, 0x92, 0x3a, 0x05, 0xf4, 0xda, 0x56, 0x10, 0x58, 0x9d, 0x56, 0x4e, 0xe8, 0xaa, 0xc3, 0x3f }; static const uint8_t ac_dsa_vect275_pub_val[] = { /* Y */ 0x61, 0x12, 0xd3, 0xcd, 0x31, 0x91, 0xd1, 0x7d, 0xee, 0x77, 0x88, 0xf5, 0x68, 0x81, 0x5a, 0x0a, 0xab, 0x50, 0x00, 0x60, 0x02, 0xc9, 0xde, 0x2b, 0xd1, 0xa9, 0xbb, 0xa2, 0x45, 0xba, 0x02, 0x89, 0x4b, 0x02, 0xe9, 0x24, 0x75, 0x17, 0xac, 0xe6, 0x98, 0xae, 0x0a, 0x05, 0x17, 0x6b, 0x62, 0xb3, 0xa0, 0x25, 0xa5, 0x63, 0xdd, 0xa8, 0xde, 0xb7, 0xf2, 0xfc, 0x3e, 0x17, 0x7a, 0xe3, 0x47, 0x74, 0x48, 0xd3, 0x9a, 0xe4, 0xeb, 0xe7, 0xae, 0x8e, 0xc6, 0x5a, 0x44, 0x21, 0xf7, 0x54, 0x66, 0x7f, 0xd6, 0xd7, 0xc2, 0xeb, 0x93, 0xf1, 0xa1, 0x8d, 0x3d, 0x1a, 0x62, 0x35, 0x73, 0x6b, 0xcd, 0xb7, 0x47, 0x46, 0xf4, 0x6d, 0x88, 0xe6, 0x5d, 0xc0, 0x7c, 0x25, 0x91, 0xe1, 0xf9, 0x5d, 0xda, 0x5e, 0x5e, 0x20, 0xe1, 0x05, 0xee, 0x8b, 0x4d, 0xdc, 0xaa, 0xf3, 0x60, 0x21, 0x29, 0x0d, 0x6b, 0x64, 0x93, 0x67, 0x1d, 0x8a, 0xaf, 0xae, 0x14, 0x5d, 0x9b, 0x90, 0xbe, 0xc3, 0xcc, 0x60, 0x17, 0x9b, 0xb8, 0xfc, 0x30, 0xf1, 0x43, 0xc5, 0x75, 0xd5, 0xd8, 0x61, 0x62, 0x37, 0x21, 0xb6, 0x54, 0x7d, 0x3a, 0xaa, 0xad, 0xe4, 0x55, 0xf0, 0x5f, 0xef, 0x93, 0x18, 0xab, 0xcd, 0x29, 0xbd, 0x19, 0xb1, 0x2c, 0x35, 0xca, 0x75, 0x6d, 0xe5, 0x10, 0x8c, 0x18, 0x5e, 0xce, 0x4a, 0xa1, 0xbf, 0x1a, 0x8e, 0x38, 0x80, 0x97, 0x97, 0x06, 0x7b, 0xd1, 0xf5, 0x2b, 0x6c, 0xf2, 0xc4, 0x15, 0xe7, 0x3f, 0x92, 0x46, 0xbd, 0x5b, 0xfa, 0xdd, 0x7b, 0x9a, 0x9d, 0x2b, 0x53, 0x69, 0x70, 0x1e, 0x72, 0x14, 0x7e, 0x22, 0xda, 0x7e, 0x09, 0x2d, 0x9b, 0x57, 0x8f, 0xb0, 0xc0, 0x44, 0xa3, 0x6e, 0xff, 0xcb, 0xd7, 0x09, 0x25, 0x85, 0x00, 0xa0, 0x0c, 0xff, 0x23, 0x09, 0x62, 0xc4, 0x42, 0x25, 0x71, 0x2f, 0xc4, 0x3f, 0x9e, 0x80, 0x2b, 0xae, 0xad, 0x7f, 0x9c, 0xb4, 0x6a, 0xb4, 0x93, 0x1f, 0x66, 0x3c, 0x6e, 0x3e, 0xd4, 0x08, 0x2d, 0x59, 0x61, 0x0f, 0x01, 0x74, 0x1b, 0x5f, 0x24, 0x56, 0x6b, 0x01, 0xb3, 0xe3, 0x93, 0x3b, 0x29, 0xe0, 0x28, 0xc5, 0x4b, 0xd2, 0xfc, 0x75, 0xb5, 0x49, 0xfd, 0x05, 0xe6, 0x4c, 0x58, 0xc9, 0xae, 0x0b, 0xa4, 0x17, 0xa9, 0xe9, 0x85, 0x81, 0xdb, 0x77, 0xbe, 0x75, 0x23, 0x3a, 0x42, 0xf7, 0x71, 0xc9, 0x9f, 0x0a, 0x49, 0xb4, 0x94, 0xf0, 0x95, 0x52, 0x02, 0xb1, 0x9d, 0x6c, 0x74, 0x0e, 0x86, 0x60, 0x66, 0x10, 0x4e, 0x46, 0x3e, 0x65, 0xe4, 0xba, 0xd9, 0xa0, 0x81, 0x63, 0x6d, 0x05, 0x36, 0x74, 0x26, 0x15, 0x3f, 0x04, 0xbc, 0xb2, 0x71, 0x21, 0x86, 0xdc, 0xa6, 0x83, 0x43, 0x88, 0xe8, 0x25, 0x20, 0xd3, 0x4e, 0xfd, 0x8a, 0x89, 0x31, 0x3b, 0x2c, 0x7e, 0x60 }; /* K = aa63e91cb3fa545c447a8b8309a569d48104e14d5d05b8951033ac8a7d711c3f */ static const uint8_t ac_dsa_vect275_out[] = { /* R */ 0x00, 0x41, 0xb1, 0xc7, 0x56, 0xdd, 0x2e, 0x42, 0x71, 0x4f, 0x9e, 0xe7, 0xed, 0xce, 0x21, 0xea, 0x33, 0xef, 0x49, 0xdb, 0xf4, 0x52, 0xcc, 0xd9, 0x35, 0x7d, 0x5f, 0x45, 0xff, 0xab, 0x08, 0xf9, /* S */ 0x10, 0x2c, 0x6e, 0xaa, 0xd3, 0x8d, 0x39, 0xc0, 0xd0, 0x36, 0x33, 0x5a, 0xe1, 0x9d, 0xd0, 0xd7, 0x5e, 0x8d, 0xca, 0xba, 0xe5, 0x9b, 0x12, 0x0f, 0x69, 0xcb, 0xd2, 0xb5, 0xcf, 0x48, 0xab, 0xdb }; #define ac_dsa_vect276_prime ac_dsa_vect271_prime #define ac_dsa_vect276_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect276_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect276_ptx[] = { /* Msg */ 0xa6, 0xfc, 0x89, 0xa2, 0x23, 0x02, 0x2e, 0xe9, 0xe5, 0x08, 0x72, 0x52, 0x78, 0x58, 0x2f, 0x56, 0xdb, 0x9c, 0xd2, 0x4c, 0x0d, 0x75, 0xd0, 0x72, 0xa5, 0x28, 0xd0, 0xc6, 0x0f, 0x27, 0x17, 0x1e, 0xa3, 0x76, 0xe2, 0xdc, 0x28, 0xa9, 0xdc, 0x0b, 0x12, 0xe6, 0x68, 0xaf, 0x77, 0xdc, 0xbb, 0x38, 0x17, 0x37, 0xe1, 0xba, 0x7d, 0x9e, 0x80, 0xb9, 0xbe, 0xc8, 0x0b, 0xf9, 0x06, 0x1b, 0x8f, 0xa1, 0x0e, 0x43, 0xa7, 0x40, 0x3a, 0x29, 0x16, 0x24, 0xa6, 0x00, 0xdd, 0x4f, 0x5c, 0x2b, 0x50, 0xc5, 0x2d, 0x5c, 0x61, 0x55, 0xd5, 0x2b, 0xe5, 0xa3, 0x25, 0xf6, 0xad, 0x81, 0x3f, 0xb3, 0xec, 0xaf, 0x6d, 0x1f, 0x92, 0xe9, 0x8c, 0xc8, 0x7c, 0x26, 0xc6, 0x8c, 0xbd, 0x15, 0xd5, 0x48, 0xa3, 0x78, 0x2b, 0xff, 0xdd, 0x11, 0x16, 0xc7, 0xc1, 0x1f, 0xca, 0xbd, 0xe4, 0x02, 0x5f, 0xec, 0x51, 0x54 }; static const uint8_t ac_dsa_vect276_priv_val[] = { /* X */ 0x1b, 0x41, 0xc2, 0x93, 0x64, 0x94, 0x77, 0x68, 0x87, 0x6a, 0xd4, 0xe7, 0xab, 0xca, 0xe5, 0x9c, 0x8e, 0x61, 0x37, 0x3d, 0x25, 0x27, 0x4b, 0xa4, 0x2c, 0xeb, 0x3d, 0x87, 0x6d, 0x6c, 0xe6, 0x72 }; static const uint8_t ac_dsa_vect276_pub_val[] = { /* Y */ 0x6c, 0x1d, 0x4d, 0x6b, 0x52, 0xaa, 0x4b, 0xff, 0x35, 0xf4, 0x30, 0x23, 0x30, 0x05, 0x27, 0x77, 0xf5, 0x1f, 0x6a, 0x08, 0x49, 0x16, 0x1f, 0x90, 0x6e, 0xf2, 0x17, 0xb0, 0x4b, 0x18, 0x54, 0x5c, 0xe5, 0x2a, 0xe4, 0xae, 0x42, 0x3a, 0xd1, 0xb4, 0xf8, 0xb1, 0x73, 0x5a, 0xe0, 0x0a, 0xb0, 0xc0, 0x44, 0xa5, 0x6f, 0x94, 0x5d, 0xa8, 0x4d, 0x1c, 0xdc, 0x26, 0xe0, 0x82, 0xd7, 0xac, 0xd7, 0x72, 0xdf, 0xab, 0xcd, 0x18, 0xb5, 0xe1, 0x3c, 0x05, 0xc2, 0x79, 0x1a, 0x8d, 0xc1, 0x61, 0x46, 0xe1, 0x51, 0x32, 0x3e, 0x4e, 0xf2, 0xce, 0x5d, 0x64, 0x38, 0x9f, 0x69, 0xd9, 0x34, 0x7a, 0xa2, 0xa5, 0xbd, 0x01, 0x14, 0xde, 0x0e, 0xec, 0xdf, 0x99, 0x0a, 0x44, 0x0d, 0x1b, 0xf9, 0x89, 0x0d, 0xd9, 0x5f, 0xd6, 0x40, 0xd2, 0xfb, 0x17, 0x89, 0xca, 0x6a, 0x6d, 0xbe, 0xe1, 0x83, 0x6a, 0xd7, 0xcb, 0x47, 0x37, 0x0b, 0x74, 0x56, 0xe4, 0x9f, 0x3b, 0xac, 0x03, 0x31, 0x0f, 0x8c, 0xbe, 0x61, 0xdd, 0x1c, 0xc0, 0x6d, 0x78, 0xc7, 0x6f, 0xec, 0x63, 0x97, 0xe6, 0x08, 0xa4, 0xca, 0xc4, 0xe2, 0xc3, 0x89, 0x83, 0xce, 0x5a, 0xa9, 0xdc, 0xba, 0x07, 0x4a, 0x20, 0x6f, 0xa6, 0x08, 0xdb, 0x35, 0xf2, 0xad, 0x3d, 0x63, 0xd9, 0x5b, 0x2c, 0xb7, 0xa0, 0x1c, 0x33, 0xd4, 0x98, 0x76, 0x7e, 0x8e, 0x68, 0x57, 0x8e, 0x4e, 0x99, 0x53, 0x8b, 0xf3, 0xd7, 0x03, 0xe6, 0x38, 0x63, 0xa2, 0x50, 0x91, 0x45, 0x2e, 0x73, 0xb9, 0x6a, 0x37, 0x16, 0xe9, 0xcc, 0x10, 0x9b, 0x66, 0x00, 0x8f, 0xa5, 0xca, 0xfd, 0xbf, 0x96, 0xb7, 0xfc, 0x10, 0xc3, 0xbb, 0x89, 0xd7, 0x9d, 0x45, 0xff, 0xef, 0xc0, 0x19, 0x08, 0xd2, 0x47, 0xef, 0x1d, 0x4f, 0xcb, 0x90, 0x3b, 0xf5, 0xe7, 0x91, 0x7a, 0xf8, 0x86, 0x18, 0xa5, 0x2a, 0x12, 0x00, 0x47, 0x98, 0x89, 0x05, 0x40, 0xa5, 0xa7, 0x5c, 0x65, 0xfb, 0xc0, 0x57, 0xd8, 0x60, 0xf4, 0xb6, 0x5d, 0x8b, 0x08, 0xb8, 0xd2, 0x15, 0xf0, 0x56, 0xd8, 0xe5, 0xe3, 0x8b, 0xf0, 0xb3, 0x19, 0xe2, 0x94, 0xdb, 0x24, 0x2a, 0x4f, 0xc7, 0x9b, 0x2e, 0x10, 0x6f, 0xec, 0xa2, 0x55, 0x6d, 0x14, 0x6f, 0x52, 0x03, 0xfd, 0x72, 0xad, 0xc7, 0x3a, 0x48, 0xe3, 0xa5, 0xaa, 0xdb, 0xb2, 0x93, 0xa2, 0xef, 0x58, 0x62, 0x65, 0x4c, 0x31, 0x53, 0x9a, 0xd8, 0x56, 0xa1, 0x6e, 0x57, 0x16, 0xc4, 0x37, 0xb4, 0x74, 0xf3, 0x33, 0x9c, 0xd8, 0x4f, 0x0a, 0xc9, 0x2b, 0xc2, 0xca, 0x6f, 0xac, 0x10, 0xc7, 0x51, 0xd0, 0x99, 0xa9, 0x04, 0x08, 0xde, 0xf6, 0x10, 0x6c, 0xa8, 0x38, 0x93, 0xd8, 0x7e, 0x32, 0x81, 0x8d, 0x76, 0x34, 0x53, 0x7a, 0x4e, 0xf6, 0x67, 0xce, 0x7f, 0x26, 0xa5, 0xcb }; /* K = 4c9ace2c908648032151f638e3c909d1f0646fe018a1c9c22a170eff64447fbe */ static const uint8_t ac_dsa_vect276_out[] = { /* R */ 0x48, 0xbd, 0x01, 0x0c, 0x1a, 0xf7, 0x7b, 0x3c, 0x40, 0xdb, 0x50, 0x34, 0x97, 0x06, 0xd6, 0x4d, 0x16, 0xcb, 0xb7, 0x2d, 0xb5, 0x19, 0x43, 0xd3, 0x45, 0x15, 0x1d, 0xea, 0xcd, 0x4a, 0x41, 0x33, /* S */ 0x0f, 0x1c, 0x4b, 0xdb, 0x47, 0x58, 0xab, 0x3b, 0x55, 0x18, 0xd4, 0x60, 0x5b, 0x98, 0x64, 0x80, 0x57, 0x23, 0xd3, 0x3a, 0x36, 0x11, 0x6e, 0xa6, 0x50, 0x54, 0x6f, 0xee, 0xf1, 0x1c, 0x4a, 0x5e }; #define ac_dsa_vect277_prime ac_dsa_vect271_prime #define ac_dsa_vect277_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect277_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect277_ptx[] = { /* Msg */ 0x2a, 0xe4, 0xac, 0x7c, 0xe2, 0x9a, 0xe7, 0xd3, 0x24, 0x90, 0xd3, 0xa5, 0x4b, 0x71, 0x5d, 0xb3, 0xf4, 0x73, 0x06, 0xf8, 0x4b, 0x59, 0xb3, 0x3b, 0x21, 0x62, 0x2a, 0x18, 0xaa, 0x2c, 0x06, 0x0a, 0x44, 0x34, 0xad, 0xfa, 0x01, 0xff, 0x16, 0x86, 0xb5, 0xd1, 0xdd, 0x30, 0x35, 0x30, 0x8e, 0x92, 0xf7, 0xac, 0xc7, 0x6d, 0xea, 0x96, 0x9d, 0xee, 0xfb, 0x98, 0xc2, 0x97, 0x2b, 0x42, 0xa5, 0x96, 0xe1, 0x05, 0x5a, 0x5a, 0xa2, 0xc6, 0x61, 0xf0, 0xb7, 0x34, 0xba, 0x4f, 0x0b, 0x34, 0x1c, 0x77, 0x82, 0x7d, 0x88, 0x91, 0x5a, 0x5e, 0x89, 0xf9, 0x5a, 0x98, 0xd6, 0x3d, 0x77, 0x29, 0x87, 0x4f, 0xce, 0x4f, 0xf7, 0x5d, 0x7a, 0xdd, 0x74, 0xf4, 0x31, 0x3d, 0xff, 0x78, 0x4e, 0x41, 0x7b, 0x2e, 0xe1, 0xfc, 0xd2, 0x70, 0xc0, 0x38, 0xdb, 0xbb, 0xb9, 0x6a, 0x77, 0x68, 0x48, 0x4b, 0x88, 0x54 }; static const uint8_t ac_dsa_vect277_priv_val[] = { /* X */ 0x87, 0x98, 0x0d, 0xa0, 0x68, 0x45, 0x58, 0xf8, 0x7e, 0x58, 0x64, 0xae, 0x58, 0x58, 0x64, 0x62, 0x5a, 0xed, 0x61, 0xb1, 0x30, 0x9c, 0x1d, 0x5f, 0x30, 0xf6, 0x47, 0x7f, 0x94, 0x7c, 0x44, 0xfb }; static const uint8_t ac_dsa_vect277_pub_val[] = { /* Y */ 0x0a, 0x84, 0x29, 0x8f, 0x47, 0x68, 0xe9, 0xd7, 0xbf, 0x79, 0x6d, 0x06, 0x58, 0x5e, 0x8b, 0x75, 0xfb, 0xde, 0x65, 0x83, 0x98, 0xa2, 0x24, 0xa8, 0xac, 0x3a, 0x49, 0xfb, 0x91, 0x23, 0x5e, 0xaa, 0xa1, 0x83, 0xaa, 0x88, 0x27, 0xcc, 0x2a, 0xf7, 0x9e, 0xa3, 0x34, 0xdc, 0x8b, 0xe4, 0xcc, 0x72, 0x90, 0x29, 0xab, 0x5f, 0x81, 0x61, 0xf7, 0x18, 0xf7, 0xbf, 0xbe, 0x90, 0xad, 0x2a, 0x15, 0x98, 0x88, 0x52, 0x39, 0x82, 0xb6, 0xd4, 0x93, 0x2d, 0x81, 0x59, 0x49, 0x5b, 0xa8, 0x4d, 0x0a, 0xb3, 0x5d, 0x7e, 0x39, 0x5d, 0x14, 0xdb, 0xa9, 0x06, 0xa1, 0x67, 0x9a, 0xe3, 0xcb, 0xb7, 0x2c, 0x10, 0xed, 0x6f, 0xa1, 0x4d, 0xa4, 0xd6, 0x00, 0x77, 0xb0, 0xbf, 0xb5, 0x91, 0xa3, 0xde, 0xc6, 0x43, 0x99, 0x6c, 0x39, 0x63, 0x38, 0xa5, 0x1d, 0x44, 0x6b, 0xde, 0x62, 0x24, 0xae, 0xa1, 0x6a, 0xef, 0x41, 0xf3, 0x54, 0xe0, 0x9a, 0x9d, 0xce, 0x9f, 0x3a, 0x00, 0xcb, 0x44, 0x5a, 0x5c, 0x9c, 0xae, 0x4a, 0x6c, 0x3c, 0x19, 0x19, 0xc9, 0xe0, 0xc5, 0x30, 0x82, 0x17, 0x3d, 0x0e, 0xc0, 0x0a, 0xe5, 0xe1, 0x5a, 0xa7, 0x26, 0x07, 0x50, 0xb6, 0xa0, 0x3e, 0xf0, 0x5a, 0x51, 0x8a, 0x48, 0x61, 0x53, 0x40, 0xac, 0x20, 0x98, 0x40, 0x73, 0xce, 0xa5, 0xfc, 0x99, 0x0d, 0x48, 0x98, 0x58, 0x94, 0x9a, 0xaf, 0x6e, 0x9e, 0x34, 0x7b, 0x48, 0x02, 0xaf, 0xbe, 0x25, 0xa0, 0x66, 0x94, 0x72, 0xbd, 0x93, 0x16, 0xba, 0x2c, 0x23, 0xa6, 0x1c, 0xc3, 0xaa, 0xdf, 0x1b, 0x70, 0xd9, 0xfd, 0x97, 0x61, 0xbb, 0x03, 0x5f, 0x0c, 0xa5, 0x1e, 0xdb, 0x2b, 0x12, 0xfc, 0xfd, 0x65, 0x1c, 0xb9, 0x23, 0x63, 0xef, 0x48, 0x00, 0x5a, 0x26, 0x83, 0xfd, 0x2e, 0xd8, 0x66, 0x5d, 0x70, 0x58, 0x8f, 0xd9, 0xa1, 0xbe, 0x3a, 0xa5, 0x1c, 0x95, 0x8b, 0x81, 0xf1, 0x3e, 0x4a, 0xcf, 0xaf, 0x0d, 0x2a, 0x90, 0xaa, 0xae, 0xf2, 0x1b, 0x2c, 0xc9, 0xef, 0x2e, 0xd3, 0x7b, 0xce, 0x3c, 0x47, 0xc8, 0xbc, 0xbf, 0xc1, 0xfb, 0x9f, 0x94, 0xe4, 0x9b, 0xd2, 0xf1, 0xa3, 0x0a, 0x88, 0xdf, 0x22, 0x73, 0x5a, 0x0f, 0xdf, 0x0a, 0xc6, 0x02, 0x8a, 0x00, 0x8b, 0x06, 0x2c, 0x95, 0x60, 0xc4, 0x2a, 0x47, 0x69, 0x97, 0xdd, 0x21, 0x10, 0x06, 0x92, 0xef, 0x63, 0x96, 0xd5, 0xf3, 0xfb, 0x2c, 0x15, 0x53, 0x28, 0x25, 0x7e, 0x7b, 0x7d, 0x2b, 0xc0, 0x5f, 0xab, 0xd5, 0x4a, 0x81, 0xa2, 0x27, 0x29, 0x93, 0xd3, 0x42, 0xbe, 0xc8, 0x57, 0x7c, 0x64, 0xd5, 0x1b, 0x4c, 0xdb, 0xe3, 0x65, 0x4d, 0xae, 0x56, 0x8c, 0x4d, 0xa0, 0x18, 0x61, 0x8c, 0x30, 0x47, 0xae, 0xe0, 0x6b, 0xf2, 0x62, 0x1e, 0x05, 0x6b, 0x33, 0x5d, 0x04, 0x4b }; /* K = 25b9d8fbe7e3ab7017f2b1e53da579df460dfb72ba5fe4ae4c85b8c23472bc8c */ static const uint8_t ac_dsa_vect277_out[] = { /* R */ 0x6b, 0x7e, 0xd3, 0xa4, 0xc2, 0xa4, 0xf7, 0x85, 0x00, 0xc7, 0xe9, 0x47, 0xe6, 0x17, 0x5c, 0x5c, 0xa8, 0x57, 0xc9, 0xd6, 0x13, 0xe7, 0x79, 0x0b, 0x9b, 0xe0, 0xd1, 0x4e, 0xc8, 0x40, 0x3e, 0x5f, /* S */ 0xa1, 0x16, 0xf3, 0xde, 0x16, 0x62, 0x60, 0xd1, 0x10, 0xe2, 0x0e, 0x84, 0xeb, 0x8c, 0x97, 0xc3, 0xf0, 0x18, 0x17, 0x86, 0x08, 0xa2, 0xea, 0x3e, 0x3e, 0x2f, 0x5e, 0xd9, 0x1d, 0x43, 0xde, 0x11 }; #define ac_dsa_vect278_prime ac_dsa_vect271_prime #define ac_dsa_vect278_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect278_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect278_ptx[] = { /* Msg */ 0x3e, 0xad, 0xe9, 0xa1, 0x0f, 0xb5, 0x9a, 0xf3, 0x6a, 0x54, 0x01, 0x70, 0x73, 0x7f, 0xbc, 0x53, 0x6e, 0x4c, 0x52, 0x30, 0xb8, 0xf6, 0xc4, 0xb2, 0x16, 0xed, 0xdd, 0x3e, 0xa9, 0x23, 0x42, 0x12, 0x3a, 0x33, 0x74, 0xd0, 0xc7, 0x51, 0xb2, 0x4b, 0x62, 0x7f, 0x9e, 0xad, 0x4d, 0xe2, 0x6e, 0x9a, 0x78, 0x97, 0xd9, 0xbc, 0x5d, 0x58, 0xa6, 0xa3, 0xac, 0x74, 0xcd, 0x45, 0x75, 0xb3, 0x28, 0x6e, 0xc1, 0x5f, 0x84, 0x53, 0x22, 0x4f, 0x37, 0x17, 0x9e, 0x51, 0xd9, 0xc4, 0xad, 0x8a, 0x60, 0xbf, 0x37, 0xd7, 0x1c, 0x62, 0xad, 0x7f, 0xc5, 0x3e, 0x5c, 0x7b, 0x12, 0xf4, 0xaa, 0xa2, 0xd4, 0x28, 0xe5, 0xc8, 0x89, 0xfd, 0x7f, 0x06, 0x2c, 0x91, 0x3d, 0x9b, 0x57, 0x4f, 0x4b, 0x5d, 0xb5, 0x16, 0xc9, 0x76, 0xba, 0xd5, 0x88, 0x30, 0x2f, 0x21, 0x9f, 0xd8, 0x3e, 0x18, 0xbe, 0xe8, 0xe6, 0x8e }; static const uint8_t ac_dsa_vect278_priv_val[] = { /* X */ 0x6c, 0xf4, 0x53, 0x17, 0x8d, 0xb0, 0xdd, 0x7f, 0x2f, 0x94, 0xf9, 0xa1, 0xf5, 0x18, 0xc6, 0x22, 0xc1, 0xdd, 0xee, 0x46, 0xd4, 0xb0, 0x90, 0x46, 0x28, 0x12, 0xe9, 0xf7, 0xb8, 0x62, 0x26, 0x5b }; static const uint8_t ac_dsa_vect278_pub_val[] = { /* Y */ 0x08, 0xa1, 0x5b, 0x23, 0x84, 0xdf, 0xf4, 0xf3, 0x03, 0x3c, 0x87, 0x16, 0x86, 0x73, 0xc5, 0x67, 0x05, 0x98, 0x70, 0xc8, 0xe7, 0x8d, 0x2f, 0xdd, 0xc7, 0x54, 0x0a, 0xfd, 0xa8, 0x05, 0x8d, 0xf3, 0x84, 0xd3, 0x18, 0x2a, 0x42, 0x61, 0x54, 0x32, 0xff, 0x93, 0x77, 0x7d, 0x3f, 0xce, 0x49, 0xc1, 0x17, 0xc7, 0xbb, 0xe8, 0x21, 0xe6, 0x78, 0x9b, 0x51, 0x37, 0xdd, 0xf0, 0x84, 0x65, 0x60, 0x98, 0xaa, 0x7b, 0x05, 0x16, 0xfd, 0x30, 0xa4, 0x2c, 0x8c, 0x86, 0xd9, 0x4e, 0x6b, 0x26, 0x8b, 0x6e, 0x13, 0x01, 0x1d, 0x25, 0xeb, 0xa0, 0x18, 0xca, 0x40, 0xcf, 0x8a, 0x35, 0xe1, 0x96, 0x31, 0x35, 0xd5, 0xcd, 0x65, 0xa5, 0x7a, 0xca, 0x8b, 0x00, 0x79, 0x88, 0xa5, 0xea, 0x75, 0xad, 0xb4, 0xd0, 0x1c, 0xc0, 0xf0, 0x83, 0x8a, 0xb4, 0x2d, 0x3d, 0xf6, 0x43, 0xa7, 0xd2, 0x56, 0x1c, 0xfd, 0x1f, 0xde, 0xbe, 0x3a, 0xd8, 0x6a, 0xd0, 0x3d, 0xe3, 0x17, 0x02, 0x75, 0x33, 0xd5, 0x23, 0x35, 0x1b, 0xe5, 0x32, 0xbc, 0x73, 0x1a, 0xaf, 0x43, 0xb8, 0x64, 0x2a, 0x7d, 0xa8, 0x08, 0x73, 0xb8, 0x0d, 0xc6, 0x1b, 0x7a, 0x24, 0x9e, 0x58, 0x60, 0xfd, 0x1a, 0x3e, 0xae, 0x0f, 0x8f, 0x0c, 0xf2, 0x1e, 0x20, 0x5d, 0x6f, 0x40, 0x3c, 0xb0, 0xa1, 0x03, 0x29, 0x0c, 0x9e, 0x69, 0xd3, 0x8c, 0xbe, 0xd9, 0xe0, 0x92, 0xb6, 0x9f, 0x71, 0xf9, 0x17, 0x2b, 0x36, 0x76, 0xf2, 0x9a, 0x97, 0x13, 0x3f, 0xc3, 0xe1, 0x87, 0x46, 0xfe, 0xdc, 0x65, 0x3f, 0xbf, 0xb6, 0x2c, 0x5e, 0x0a, 0xfe, 0x89, 0xa8, 0xe1, 0xb8, 0x72, 0x4b, 0x1a, 0x33, 0x14, 0xc4, 0xca, 0xcc, 0x4b, 0xb8, 0xf3, 0x90, 0x43, 0x97, 0x01, 0xa6, 0x14, 0xae, 0x9b, 0xcd, 0xaf, 0xd4, 0x72, 0xb0, 0xab, 0x13, 0x16, 0x67, 0xdb, 0xbf, 0x1c, 0x79, 0x0f, 0x73, 0xab, 0x90, 0x46, 0xa5, 0x89, 0x32, 0x69, 0x1a, 0x93, 0x0b, 0x3c, 0x42, 0xe9, 0x08, 0xb4, 0xd1, 0xf4, 0x7e, 0xd6, 0xe2, 0xff, 0x18, 0xd6, 0xb7, 0x0b, 0xb1, 0x6d, 0x1a, 0xf7, 0x99, 0x3b, 0xdb, 0x2c, 0xa3, 0xcb, 0x35, 0x9a, 0x0b, 0x43, 0xf8, 0xdc, 0x84, 0x4d, 0xea, 0x6a, 0xeb, 0xaa, 0x34, 0xb8, 0xd2, 0xb6, 0xfc, 0x28, 0x84, 0x19, 0x78, 0x0f, 0xf9, 0x80, 0x90, 0x89, 0x26, 0xc4, 0x6c, 0x3b, 0x0e, 0x59, 0x5f, 0xa3, 0x08, 0xf4, 0xe8, 0x94, 0xec, 0xb6, 0x83, 0xc8, 0x04, 0xc9, 0x31, 0x40, 0xd9, 0x17, 0x69, 0x13, 0x2d, 0x37, 0xe9, 0x37, 0x91, 0xb9, 0xf8, 0x9d, 0x59, 0x5e, 0x69, 0x8f, 0x04, 0x9b, 0x3a, 0x95, 0x02, 0xab, 0xc4, 0x88, 0xbd, 0xd9, 0x47, 0x2f, 0x11, 0x31, 0xa7, 0x57, 0xf3, 0xd5, 0x4b, 0x14, 0x90, 0x67, 0x50, 0x7d, 0x1b, 0x04, 0xa9, 0x76 }; /* K = a3fb61e544d59206d334049e8554d97b6699db616871fd2b421229c28e84f73c */ static const uint8_t ac_dsa_vect278_out[] = { /* R */ 0x9e, 0x83, 0x3e, 0xc3, 0xde, 0xd9, 0xd8, 0x1e, 0xa7, 0x42, 0x2b, 0xda, 0xc7, 0x84, 0x22, 0x27, 0x4f, 0xa3, 0x53, 0x48, 0xe3, 0xfc, 0xe3, 0xbb, 0xc9, 0x3b, 0x3c, 0x10, 0xd7, 0x0b, 0x4f, 0x1e, /* S */ 0x65, 0x37, 0x56, 0x59, 0x4e, 0xac, 0x68, 0x1d, 0x48, 0xa2, 0x35, 0x8a, 0x0f, 0x82, 0xa1, 0x0f, 0xaa, 0x79, 0x29, 0xb0, 0x0f, 0xd9, 0xcd, 0x43, 0x94, 0xc3, 0x26, 0x79, 0x06, 0x0f, 0x96, 0xe3 }; #define ac_dsa_vect279_prime ac_dsa_vect271_prime #define ac_dsa_vect279_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect279_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect279_ptx[] = { /* Msg */ 0x33, 0xde, 0xcf, 0xc1, 0xe0, 0x6b, 0x92, 0xed, 0x81, 0xcd, 0x30, 0xee, 0x37, 0x71, 0x47, 0x0b, 0x59, 0xe2, 0x2c, 0x15, 0x64, 0x64, 0x7f, 0x1a, 0xae, 0x85, 0x10, 0x72, 0x97, 0x15, 0xa8, 0xce, 0x94, 0x62, 0x4a, 0x11, 0x55, 0x4a, 0xc9, 0x09, 0xc9, 0x24, 0xae, 0xc8, 0x53, 0xdf, 0x64, 0x32, 0x75, 0x46, 0xdb, 0x85, 0xd3, 0xdf, 0x59, 0x79, 0x16, 0xa3, 0x93, 0x53, 0x38, 0x8a, 0x8b, 0x33, 0x63, 0x76, 0x52, 0x81, 0xa4, 0x35, 0x27, 0x01, 0xff, 0x1a, 0xf4, 0x3f, 0xba, 0x6d, 0x03, 0x66, 0x41, 0x27, 0xc1, 0x5d, 0xa7, 0xb8, 0x4c, 0x04, 0xd5, 0x40, 0x9c, 0x36, 0x40, 0x94, 0xdc, 0x62, 0xe3, 0x79, 0x83, 0xa8, 0xeb, 0x06, 0x68, 0x80, 0xde, 0x81, 0x36, 0x70, 0x14, 0x06, 0xe6, 0x72, 0x50, 0x67, 0x93, 0x00, 0xd2, 0xb9, 0x7d, 0x22, 0x83, 0x27, 0xc1, 0x51, 0x4c, 0x0b, 0xc1, 0xea }; static const uint8_t ac_dsa_vect279_priv_val[] = { /* X */ 0x3b, 0xf2, 0xbe, 0x01, 0xd1, 0x54, 0xc2, 0x3c, 0xca, 0xe9, 0x2a, 0xe9, 0x3f, 0x78, 0xea, 0x36, 0xf7, 0x0e, 0xfc, 0xf7, 0xfb, 0x7e, 0xb4, 0x3c, 0xdc, 0xae, 0xb9, 0xff, 0xb8, 0x47, 0x1b, 0x10 }; static const uint8_t ac_dsa_vect279_pub_val[] = { /* Y */ 0x16, 0xea, 0x2e, 0x79, 0x5c, 0x63, 0x6c, 0x9d, 0x31, 0x21, 0x59, 0xa5, 0x79, 0xb8, 0xdf, 0x32, 0x9f, 0xfc, 0x28, 0xfe, 0xcc, 0x4a, 0x4c, 0x13, 0xb1, 0x6a, 0x29, 0x0b, 0xd1, 0x52, 0x5a, 0x53, 0xa9, 0x7d, 0x72, 0x31, 0x5b, 0xe2, 0x51, 0xd1, 0x1d, 0x23, 0xca, 0x78, 0xbb, 0xec, 0x45, 0xc0, 0xe2, 0x43, 0x27, 0x9b, 0x1e, 0xb6, 0xe2, 0x06, 0xa9, 0x27, 0x3c, 0x1e, 0x76, 0x6e, 0x21, 0x36, 0x48, 0xbd, 0xf9, 0x0c, 0x40, 0x47, 0x9d, 0xf4, 0x8a, 0xcf, 0xd9, 0xc2, 0x09, 0xa5, 0x23, 0xc8, 0xb4, 0xa9, 0x9a, 0x48, 0x1c, 0xa8, 0xdf, 0x47, 0x74, 0xb3, 0xbb, 0x29, 0xf8, 0x25, 0x26, 0x52, 0x0c, 0x2d, 0xc2, 0x8a, 0xb3, 0x14, 0xfe, 0x14, 0x14, 0x0f, 0x2b, 0xe1, 0x79, 0x2e, 0x1a, 0xc3, 0xc7, 0x59, 0xad, 0x44, 0xf7, 0x84, 0x5a, 0x20, 0x12, 0xf6, 0x4e, 0xca, 0xb0, 0xb1, 0xfe, 0xc0, 0xed, 0x16, 0x6b, 0xd1, 0x75, 0x95, 0x57, 0x04, 0xf6, 0x2d, 0x94, 0x01, 0x11, 0x1f, 0xfc, 0x04, 0xf8, 0x04, 0xe4, 0x8f, 0xe7, 0x74, 0xdf, 0xd3, 0x46, 0xbb, 0x41, 0xf4, 0xbe, 0xca, 0x2b, 0x34, 0xa8, 0x31, 0x34, 0xa3, 0x88, 0x4a, 0x01, 0x72, 0x9c, 0xce, 0x1a, 0xbc, 0x5b, 0x8d, 0x0d, 0xe3, 0xfe, 0x26, 0x54, 0xc3, 0x74, 0xde, 0xb2, 0x46, 0xd9, 0x6f, 0xfa, 0xff, 0xc7, 0xaa, 0x20, 0x55, 0xb7, 0x4e, 0x81, 0x9b, 0xbe, 0xec, 0x13, 0x7e, 0xb3, 0xca, 0xed, 0x1f, 0xc7, 0x1f, 0x12, 0x9c, 0x8e, 0xa8, 0xb7, 0x63, 0xf2, 0xf5, 0x7e, 0x88, 0xde, 0x08, 0x45, 0xf7, 0x6c, 0xeb, 0x18, 0x41, 0x55, 0x90, 0x19, 0x87, 0x2a, 0x5b, 0x5a, 0x96, 0x9c, 0x9c, 0xf3, 0x85, 0xd6, 0x57, 0x8b, 0x4f, 0x27, 0xb5, 0xb7, 0x6b, 0xe3, 0xef, 0x0a, 0x8f, 0xd3, 0xee, 0x47, 0xee, 0xd6, 0x95, 0xe1, 0x6f, 0x14, 0xe2, 0xa3, 0xb7, 0x91, 0xf2, 0xa0, 0x16, 0xd6, 0xb8, 0x6f, 0xf8, 0xec, 0x23, 0x43, 0xc6, 0xa5, 0xc8, 0x0a, 0xb6, 0x22, 0x4b, 0x65, 0x02, 0xeb, 0x37, 0x4c, 0x8f, 0xa6, 0x51, 0x0b, 0xce, 0x99, 0x0d, 0x70, 0xef, 0xdf, 0xa9, 0xa0, 0xb7, 0x02, 0x58, 0x55, 0x95, 0x18, 0x45, 0x14, 0xc7, 0x8f, 0x7e, 0x90, 0x5b, 0x6f, 0xd6, 0xc2, 0x37, 0x33, 0x3d, 0x56, 0x0f, 0xcc, 0x06, 0x30, 0x36, 0x37, 0xac, 0x0b, 0x2c, 0x7f, 0x7c, 0x4d, 0xa5, 0x59, 0xe3, 0x1f, 0x53, 0x1d, 0xf2, 0xe5, 0xd6, 0xc6, 0x51, 0x59, 0x17, 0x71, 0xd7, 0xea, 0x45, 0x75, 0x88, 0x8a, 0xfc, 0x40, 0x11, 0xfa, 0x11, 0x24, 0xfb, 0xd1, 0xa2, 0x82, 0xa4, 0x1d, 0x93, 0x39, 0x89, 0xef, 0xf9, 0x1a, 0x51, 0xcd, 0x39, 0xbc, 0xe7, 0xfb, 0x0d, 0x56, 0x9f, 0xed, 0xcc, 0x42, 0xde, 0x48, 0xbf, 0x18, 0xee, 0x75, 0x5f }; /* K = a0c97f80ca449fd8f69733e046664408da590dbbab6865c3275c389a478aa248 */ static const uint8_t ac_dsa_vect279_out[] = { /* R */ 0x6f, 0x77, 0xa5, 0x21, 0x69, 0xa2, 0xe8, 0x80, 0xa3, 0xb5, 0x5a, 0xa2, 0x78, 0xf6, 0x46, 0x30, 0x32, 0xdc, 0x5f, 0x81, 0xc3, 0x84, 0x68, 0x22, 0x4d, 0x55, 0x32, 0xf6, 0xa6, 0x01, 0xf2, 0xd9, /* S */ 0x96, 0xb7, 0x53, 0xef, 0xb4, 0xab, 0xbc, 0x8c, 0x17, 0x9d, 0x03, 0xcc, 0x2a, 0x1a, 0x0c, 0x12, 0x56, 0xe2, 0x3d, 0x1f, 0xa2, 0xe9, 0x7c, 0xfb, 0xf5, 0x5d, 0x2b, 0xb6, 0x98, 0x12, 0xd1, 0x00 }; #define ac_dsa_vect280_prime ac_dsa_vect271_prime #define ac_dsa_vect280_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect280_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect280_ptx[] = { /* Msg */ 0x6a, 0xe5, 0xa6, 0xda, 0x79, 0x4f, 0x92, 0x3f, 0x6d, 0x80, 0x32, 0x54, 0x9b, 0x81, 0xd0, 0x4a, 0xe7, 0xaa, 0x35, 0xc2, 0x09, 0x9d, 0xff, 0xbd, 0xd8, 0x3b, 0xb9, 0x4d, 0xb5, 0x74, 0xfa, 0xf8, 0xf9, 0x5c, 0x71, 0x26, 0xdb, 0x2d, 0xb6, 0x0f, 0xed, 0x50, 0xf7, 0x40, 0xe8, 0x7c, 0x35, 0x95, 0x44, 0xdc, 0x2e, 0xbf, 0xbc, 0xaf, 0xb0, 0x94, 0xdd, 0xca, 0x69, 0xc9, 0x14, 0xd2, 0x7e, 0x5f, 0x3d, 0x10, 0xfa, 0x0c, 0xe3, 0x2d, 0x2a, 0x13, 0x55, 0xbc, 0xf6, 0x1a, 0x25, 0x74, 0xc7, 0x55, 0xd7, 0xc3, 0x24, 0xa2, 0xe0, 0xed, 0x6f, 0x77, 0x19, 0xba, 0x2f, 0x2c, 0x9f, 0x11, 0x3d, 0xf8, 0xd0, 0x40, 0x25, 0xf4, 0xab, 0xd2, 0xe1, 0xc4, 0xb7, 0xbc, 0x18, 0xd8, 0xac, 0xec, 0x9f, 0x6d, 0x8d, 0x79, 0x7c, 0xd7, 0xb0, 0x42, 0xf5, 0x03, 0x48, 0xee, 0xb3, 0xf7, 0xa2, 0x92, 0x2d, 0xa7 }; static const uint8_t ac_dsa_vect280_priv_val[] = { /* X */ 0x3b, 0x4a, 0x52, 0xc8, 0xb5, 0xc3, 0x86, 0xf2, 0x6a, 0xc6, 0xff, 0xab, 0xce, 0xf2, 0xdf, 0x3b, 0xf8, 0xb2, 0x5e, 0x61, 0x08, 0xab, 0x54, 0x0d, 0x31, 0x4d, 0xd3, 0xd9, 0x24, 0x5c, 0x07, 0x5d }; static const uint8_t ac_dsa_vect280_pub_val[] = { /* Y */ 0x93, 0x10, 0x6f, 0xb0, 0x00, 0xc6, 0x7f, 0x11, 0x11, 0xc6, 0xfd, 0x3d, 0xa0, 0xf4, 0x4b, 0x4a, 0xe4, 0xcb, 0x36, 0x95, 0xde, 0x2e, 0x35, 0xb2, 0x41, 0xdf, 0xe8, 0x8d, 0x32, 0x69, 0xb8, 0xfd, 0xa2, 0x5b, 0xf3, 0x48, 0x00, 0x87, 0x25, 0xfd, 0x61, 0x3c, 0xd6, 0x1a, 0xa8, 0x26, 0xbd, 0x8f, 0x1a, 0xaa, 0xee, 0x22, 0xb4, 0xdc, 0x0a, 0x02, 0x84, 0x22, 0x90, 0xbb, 0x7d, 0xad, 0x91, 0xaf, 0x0b, 0x28, 0x54, 0xff, 0xab, 0x16, 0x93, 0x22, 0x08, 0xd2, 0x72, 0xf2, 0xc0, 0x81, 0xc1, 0x38, 0x89, 0xdb, 0x3e, 0xd0, 0xb2, 0x46, 0x46, 0xc6, 0x65, 0xaf, 0x9f, 0x4b, 0x72, 0x38, 0x98, 0xeb, 0x1a, 0xc0, 0x05, 0x3f, 0x2a, 0x0f, 0x4c, 0xf2, 0x2f, 0xd4, 0xe1, 0x29, 0x40, 0xb5, 0xb5, 0x22, 0x69, 0x48, 0x4e, 0xbb, 0x8a, 0xbc, 0x48, 0x4c, 0x06, 0xed, 0xdb, 0xd9, 0xb1, 0xa4, 0x26, 0x13, 0x2f, 0x40, 0x2e, 0xfd, 0xcd, 0x88, 0xab, 0x29, 0xe7, 0xe5, 0x10, 0x96, 0x1a, 0xf8, 0xec, 0x83, 0xa6, 0x42, 0xe3, 0x40, 0x15, 0x85, 0x8a, 0xc3, 0xf3, 0x21, 0x97, 0x60, 0x1a, 0x88, 0x8e, 0x16, 0xc7, 0x59, 0xc9, 0x4e, 0xc5, 0xb8, 0xde, 0xc0, 0xda, 0x30, 0x64, 0x3b, 0x9d, 0x9d, 0xb2, 0x57, 0x4a, 0xf2, 0x9e, 0x78, 0xf9, 0xd3, 0xf6, 0xa7, 0xb4, 0xc7, 0x6f, 0x45, 0xcd, 0x0b, 0x2a, 0xb5, 0xe8, 0x52, 0x49, 0x35, 0xb8, 0x86, 0x91, 0x8b, 0x5d, 0x9e, 0x9c, 0xcb, 0x5a, 0x68, 0x53, 0xe6, 0x2e, 0xfa, 0xd2, 0xdf, 0xf8, 0x3a, 0x85, 0x20, 0x98, 0x5e, 0xe8, 0x44, 0x2f, 0x2b, 0xdd, 0x1c, 0x5f, 0x9d, 0x48, 0x06, 0x2a, 0xde, 0x6b, 0x28, 0x8c, 0x8a, 0xd8, 0x2a, 0x41, 0xdb, 0x6c, 0x34, 0xe2, 0xde, 0xba, 0x54, 0x1a, 0xaa, 0xc3, 0xcd, 0x31, 0x56, 0xc9, 0x75, 0xef, 0xbb, 0xc7, 0x18, 0xeb, 0xd4, 0x96, 0x19, 0x96, 0xb3, 0xed, 0x1c, 0xc5, 0xc2, 0x98, 0x7a, 0xb7, 0x79, 0x05, 0x2c, 0xdb, 0xec, 0xf5, 0x1d, 0x17, 0x66, 0x1b, 0x49, 0x8e, 0x84, 0x37, 0x1f, 0xf8, 0x59, 0xf8, 0x99, 0x06, 0xf4, 0x26, 0xf5, 0x63, 0x57, 0x2f, 0x66, 0xc2, 0x79, 0xef, 0x3d, 0x03, 0x6a, 0x42, 0x77, 0x78, 0x46, 0x3f, 0x67, 0xf8, 0xd4, 0xde, 0x62, 0x3f, 0xb4, 0xb2, 0x80, 0x30, 0x07, 0x87, 0x1d, 0x0a, 0x34, 0x9e, 0xc2, 0x02, 0xa9, 0xaa, 0x1c, 0xff, 0xef, 0x70, 0x13, 0x7e, 0x00, 0x93, 0x03, 0x49, 0x72, 0x14, 0xad, 0xa7, 0x86, 0x35, 0x7a, 0x4d, 0x80, 0x46, 0x25, 0x5e, 0x40, 0xf8, 0x9e, 0xa5, 0x88, 0x00, 0x06, 0x34, 0xe7, 0xf0, 0xaa, 0xf6, 0x4d, 0x92, 0xaa, 0x21, 0xff, 0xf8, 0xfb, 0xe0, 0x78, 0xba, 0xa9, 0x69, 0x61, 0x69, 0x97, 0x38, 0xb2, 0x68, 0x23, 0x7e, 0xab, 0x60, 0x6c }; /* K = 39f68875cade6ae208d3043b010541624679df649cc5d97b09a3ebbe2c9d59be */ static const uint8_t ac_dsa_vect280_out[] = { /* R */ 0x86, 0x36, 0xd4, 0xd3, 0x20, 0x3a, 0xa0, 0x91, 0x2f, 0xbf, 0xc9, 0x38, 0xbe, 0x43, 0x70, 0x07, 0x7e, 0xa9, 0xc7, 0x51, 0x95, 0xcd, 0x2f, 0x67, 0xe6, 0xee, 0x42, 0x7c, 0xde, 0x53, 0x1c, 0x40, /* S */ 0x93, 0x02, 0x3d, 0x97, 0xef, 0xb4, 0x32, 0x7e, 0x9e, 0x88, 0x6e, 0x7b, 0x78, 0x37, 0x41, 0xe9, 0xd2, 0xc3, 0x97, 0xaf, 0x9c, 0x67, 0xb9, 0x1c, 0xdb, 0x8a, 0xa2, 0x7f, 0x83, 0xbb, 0x02, 0x5d }; #define ac_dsa_vect281_prime ac_dsa_vect271_prime #define ac_dsa_vect281_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect281_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect281_ptx[] = { /* Msg */ 0x86, 0xe0, 0x3b, 0xc3, 0xf4, 0xdd, 0xea, 0x6a, 0x93, 0x88, 0x8e, 0xe3, 0x89, 0xb1, 0x5e, 0xb6, 0x90, 0x82, 0x2c, 0x71, 0xf9, 0xb8, 0x5e, 0xfa, 0xaf, 0xfc, 0x52, 0xe4, 0x86, 0xb1, 0x14, 0x4a, 0xd7, 0xfc, 0xff, 0x3f, 0x53, 0xbf, 0x97, 0xda, 0x24, 0x81, 0xe8, 0x5e, 0x09, 0x83, 0xee, 0x1d, 0x52, 0x79, 0xe2, 0x7a, 0x36, 0x4d, 0x0e, 0x69, 0x0f, 0x58, 0x7a, 0x31, 0x53, 0x5f, 0xb9, 0x4e, 0xec, 0xe7, 0x47, 0xf8, 0xb6, 0x05, 0x72, 0x4a, 0xdf, 0xb2, 0x58, 0xc9, 0x98, 0x3c, 0x90, 0x02, 0xe0, 0xc1, 0x1b, 0x79, 0x76, 0x62, 0x76, 0x90, 0xd5, 0x82, 0x81, 0x30, 0x5e, 0xa9, 0x30, 0x8d, 0xb7, 0x4c, 0x49, 0x1a, 0x28, 0x19, 0x2e, 0x35, 0x4b, 0x60, 0x0e, 0x83, 0x76, 0x81, 0x1c, 0xce, 0xfb, 0x75, 0x1b, 0xb1, 0x0c, 0x7d, 0x97, 0xb4, 0x2f, 0xfe, 0x30, 0x4b, 0xee, 0x97, 0xec, 0xaf }; static const uint8_t ac_dsa_vect281_priv_val[] = { /* X */ 0x7f, 0x56, 0xc7, 0x4b, 0x49, 0x5a, 0x12, 0xdb, 0x96, 0x3e, 0x03, 0xcf, 0xaf, 0xe6, 0x0a, 0xc9, 0x5e, 0x80, 0x19, 0xcb, 0x21, 0x2c, 0x33, 0x2d, 0x1f, 0x19, 0xc6, 0x46, 0x15, 0x56, 0x81, 0x19 }; static const uint8_t ac_dsa_vect281_pub_val[] = { /* Y */ 0x23, 0xed, 0x54, 0x45, 0x39, 0x1a, 0x5b, 0xb9, 0x4e, 0x00, 0xc7, 0x6e, 0xc8, 0x0d, 0x83, 0x72, 0x8d, 0x5d, 0x46, 0x1b, 0xe4, 0x25, 0xda, 0x79, 0xf9, 0x21, 0xbc, 0xa2, 0x7d, 0x62, 0x5c, 0xb4, 0x2b, 0x32, 0x39, 0x71, 0x02, 0x2a, 0xd4, 0xc3, 0xf0, 0x5b, 0xca, 0x10, 0x99, 0x10, 0xfd, 0x06, 0xba, 0x39, 0xe9, 0x5b, 0xeb, 0xe7, 0x94, 0xed, 0x10, 0x8d, 0x2e, 0xad, 0x29, 0x7a, 0xd7, 0x94, 0xf9, 0x9c, 0x32, 0xc2, 0x19, 0xe6, 0x5f, 0xb7, 0x26, 0x53, 0x27, 0x15, 0xb1, 0xbc, 0x20, 0x75, 0xdd, 0x4b, 0x69, 0x49, 0x29, 0x77, 0x12, 0xf9, 0x1d, 0x5b, 0xa0, 0x61, 0x19, 0x6f, 0xb2, 0x57, 0x54, 0xc3, 0x43, 0x77, 0xbb, 0xbe, 0x6a, 0x37, 0xf6, 0x17, 0x87, 0xea, 0x84, 0x4d, 0x35, 0x92, 0x85, 0xc7, 0x8e, 0x73, 0x3e, 0xb6, 0x5f, 0x66, 0x5a, 0x6b, 0x15, 0x7f, 0x83, 0x2b, 0x56, 0x38, 0xd7, 0x4e, 0xbe, 0x1d, 0x5d, 0xce, 0x66, 0xd5, 0x28, 0x92, 0x5e, 0x44, 0xee, 0xf1, 0x3b, 0xf2, 0x3f, 0x80, 0x7d, 0xa3, 0x5f, 0x34, 0xd1, 0x69, 0xa6, 0x87, 0x75, 0x82, 0x29, 0xb9, 0x9a, 0x31, 0x3a, 0xce, 0xcf, 0xb2, 0x0b, 0x14, 0x2b, 0x53, 0x49, 0x26, 0xd5, 0x9a, 0xaa, 0x76, 0x43, 0xa7, 0x90, 0x30, 0xe9, 0x33, 0x5e, 0xf2, 0x8a, 0xbe, 0xdd, 0xac, 0x8a, 0xc9, 0x47, 0x1d, 0xa4, 0x99, 0x7e, 0x33, 0xf3, 0xe4, 0x91, 0xdb, 0x86, 0x68, 0xa2, 0xc3, 0x92, 0x0a, 0x3b, 0x3a, 0x37, 0x22, 0x51, 0x79, 0x36, 0x1d, 0x55, 0x39, 0xbe, 0xb3, 0x3f, 0x32, 0x52, 0x24, 0x42, 0x67, 0x46, 0x5e, 0x48, 0xfa, 0xf5, 0x75, 0xcd, 0xac, 0x93, 0x81, 0x33, 0xef, 0xfe, 0x9d, 0x1f, 0x69, 0xf1, 0x9f, 0x1b, 0x44, 0xb2, 0x45, 0xa4, 0x47, 0xb1, 0xfc, 0x2b, 0x85, 0x92, 0x44, 0xe2, 0xe3, 0x90, 0x53, 0x59, 0x5c, 0xf7, 0x97, 0x89, 0x33, 0xc3, 0xd4, 0x68, 0xc6, 0x5c, 0x23, 0x16, 0x63, 0x07, 0x0a, 0xea, 0xf2, 0xec, 0x23, 0x13, 0x8d, 0x16, 0x60, 0x08, 0x1a, 0x55, 0xbd, 0xc3, 0xdd, 0x3f, 0x24, 0x46, 0x17, 0x6b, 0x1d, 0x6d, 0x99, 0x77, 0xa1, 0x4e, 0xbd, 0x0e, 0xd4, 0xd8, 0xdf, 0xcd, 0xfc, 0x4a, 0x43, 0x31, 0x18, 0x40, 0x1f, 0x2c, 0x26, 0x32, 0x09, 0x5c, 0xe7, 0xae, 0x62, 0x00, 0xc7, 0x4b, 0xda, 0x5d, 0x2f, 0xd3, 0x85, 0x45, 0x24, 0xc3, 0x08, 0x17, 0x41, 0x97, 0x5a, 0x07, 0x6a, 0x1b, 0x4f, 0x93, 0x3e, 0xc3, 0x2a, 0x2b, 0xac, 0x91, 0x71, 0xbe, 0xbf, 0xdf, 0x3b, 0x35, 0x5e, 0xdd, 0xb1, 0xf4, 0x55, 0xec, 0xaf, 0x73, 0x39, 0x6e, 0x85, 0xfb, 0x04, 0x79, 0x75, 0x58, 0xba, 0x4f, 0x2b, 0xbc, 0x49, 0xd9, 0xf2, 0x32, 0x9a, 0x23, 0xb3, 0x93, 0x30, 0x1a, 0xe0, 0xdb, 0x92 }; /* K = 407180cc311aebdc1cdcb4685241597783f34076672362a24a21193c0d45d24d */ static const uint8_t ac_dsa_vect281_out[] = { /* R */ 0x68, 0xef, 0xaa, 0x05, 0xeb, 0x90, 0xc4, 0x8c, 0x6a, 0x7a, 0x45, 0x33, 0x7c, 0x29, 0x17, 0x5f, 0x8e, 0xe5, 0xb1, 0x9b, 0x53, 0xdb, 0x4e, 0xbd, 0x83, 0xa0, 0x2f, 0x53, 0xc5, 0xb2, 0x10, 0x4b, /* S */ 0x14, 0x5f, 0x13, 0xf1, 0xae, 0x36, 0x75, 0xc5, 0x21, 0xb3, 0x34, 0xce, 0x6a, 0x49, 0xfc, 0x6f, 0x50, 0x2e, 0x3a, 0xc6, 0xb2, 0xb5, 0x14, 0x3b, 0xe0, 0x64, 0x1d, 0x0d, 0x57, 0xb3, 0xc7, 0x22 }; #define ac_dsa_vect282_prime ac_dsa_vect271_prime #define ac_dsa_vect282_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect282_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect282_ptx[] = { /* Msg */ 0x1d, 0x09, 0x54, 0xee, 0x0d, 0xe1, 0xe9, 0xce, 0xee, 0x05, 0x32, 0x59, 0x7e, 0xe4, 0x34, 0xc7, 0x3f, 0xe4, 0xf6, 0x66, 0x35, 0xf7, 0xe7, 0x2d, 0x38, 0xb6, 0x77, 0x63, 0xc6, 0x68, 0x17, 0xf5, 0x3c, 0xf3, 0x6c, 0xa0, 0xf6, 0x13, 0xe0, 0x18, 0x96, 0xce, 0xbc, 0x9f, 0x77, 0xa7, 0x72, 0x60, 0x7f, 0x4a, 0xee, 0xdd, 0x38, 0x56, 0xc7, 0x3f, 0xc2, 0xf1, 0x91, 0x00, 0xaa, 0x7b, 0x54, 0x0c, 0xcd, 0x05, 0x7f, 0x26, 0xcd, 0x95, 0x64, 0xd6, 0x73, 0x22, 0x8c, 0x68, 0x08, 0x8e, 0x5f, 0x1a, 0xbf, 0x12, 0x54, 0xa9, 0x7e, 0xd1, 0x45, 0x3e, 0xe5, 0x58, 0xe0, 0x62, 0x71, 0x1c, 0xeb, 0x76, 0x43, 0xb3, 0x45, 0xad, 0x33, 0xb6, 0x49, 0xaf, 0xfb, 0xe8, 0xa6, 0x20, 0x67, 0xf9, 0xd8, 0x4e, 0xd4, 0xc8, 0x50, 0x6f, 0xcf, 0xf5, 0x78, 0xd2, 0xeb, 0xa5, 0x96, 0xa2, 0x05, 0x26, 0x73, 0x87 }; static const uint8_t ac_dsa_vect282_priv_val[] = { /* X */ 0x0b, 0x48, 0x49, 0x96, 0x25, 0xf0, 0xc2, 0x54, 0x8b, 0xf8, 0xa2, 0xfe, 0xd1, 0xf6, 0x69, 0x6f, 0x59, 0xdf, 0x8f, 0xbe, 0x6e, 0xaf, 0x91, 0xb8, 0x23, 0x85, 0x99, 0x42, 0x09, 0xc2, 0xd0, 0x4f }; static const uint8_t ac_dsa_vect282_pub_val[] = { /* Y */ 0x2f, 0x0d, 0x89, 0xac, 0x78, 0xa6, 0x1f, 0xb7, 0x4f, 0x81, 0x14, 0x2b, 0x17, 0x76, 0x66, 0x56, 0xd1, 0x78, 0x89, 0x40, 0x07, 0x78, 0x08, 0xe3, 0xd8, 0x80, 0xce, 0x10, 0xec, 0x60, 0xe2, 0xbb, 0xb1, 0x58, 0xd5, 0x4e, 0x02, 0x0d, 0xbc, 0x5f, 0x67, 0x86, 0xc0, 0xb4, 0x3c, 0xca, 0x2c, 0xb0, 0x02, 0xc8, 0xce, 0x13, 0xb2, 0x91, 0xb2, 0x50, 0xf3, 0x99, 0xe8, 0xe0, 0x2f, 0x19, 0x59, 0x26, 0x97, 0x8f, 0x6c, 0x5b, 0x00, 0x7d, 0x4f, 0x0a, 0x66, 0x04, 0x89, 0x96, 0xa9, 0x93, 0x2a, 0x91, 0x8b, 0x23, 0x63, 0xc4, 0x00, 0x8f, 0x54, 0x7a, 0xdc, 0xaa, 0x7d, 0x12, 0x69, 0x4b, 0xae, 0xe4, 0xfb, 0xca, 0x34, 0xbc, 0x6d, 0x7e, 0x29, 0xc5, 0x04, 0x9c, 0xda, 0x13, 0x69, 0x8f, 0xcc, 0xe6, 0x1b, 0xd3, 0xb3, 0xdb, 0x05, 0xd2, 0x15, 0x81, 0x32, 0xdd, 0x38, 0x0c, 0xf6, 0x53, 0xcc, 0xcd, 0xf2, 0x79, 0xaa, 0x16, 0x41, 0x34, 0xbf, 0xbd, 0xdd, 0x7e, 0xa3, 0x47, 0x76, 0x00, 0x41, 0xf9, 0x2c, 0x3a, 0x4c, 0xfd, 0xe0, 0x09, 0x2d, 0x5c, 0xb9, 0x6b, 0xb8, 0xc2, 0x4e, 0x98, 0x25, 0x94, 0x75, 0x59, 0x6f, 0x33, 0x77, 0xd5, 0x9f, 0x11, 0x66, 0x1b, 0xcc, 0x0d, 0x47, 0xe8, 0x3c, 0xb3, 0x1a, 0xae, 0x9d, 0xcb, 0x4a, 0x6f, 0x25, 0x61, 0x9a, 0x29, 0x05, 0x4b, 0x62, 0xaa, 0x8b, 0x42, 0x1e, 0x52, 0x9e, 0x61, 0xac, 0x95, 0xa0, 0xde, 0x01, 0xc5, 0x0b, 0x09, 0xe1, 0x19, 0x51, 0x6c, 0x2c, 0x5b, 0x35, 0x63, 0xd4, 0x7e, 0xed, 0x67, 0x9a, 0x1c, 0xf8, 0x0b, 0xa7, 0x0a, 0x50, 0x25, 0x4d, 0x85, 0x1a, 0x13, 0xa7, 0x78, 0xe1, 0xa0, 0x8d, 0xa8, 0x66, 0x7e, 0x46, 0xe3, 0x59, 0x79, 0xc1, 0x5d, 0xf4, 0x5c, 0xf7, 0x88, 0x6d, 0xde, 0x5a, 0xf9, 0xd7, 0x44, 0x62, 0x4b, 0x98, 0x1a, 0xcd, 0x25, 0x2e, 0xc5, 0xba, 0x46, 0x87, 0x0b, 0x8e, 0xe4, 0xb3, 0x2b, 0x1b, 0xe1, 0xb9, 0x44, 0x80, 0x2d, 0x91, 0xd8, 0x14, 0x8d, 0x38, 0xf5, 0x43, 0x15, 0xa7, 0xad, 0x4e, 0x38, 0x07, 0x9e, 0xa2, 0xbe, 0xd9, 0xdf, 0x8f, 0xa5, 0x94, 0x14, 0xdd, 0xde, 0xd3, 0xa1, 0xd2, 0x30, 0x8b, 0xa7, 0x69, 0xae, 0x2a, 0x65, 0x2f, 0x10, 0xc2, 0xd9, 0x69, 0x17, 0xed, 0xfe, 0x58, 0x74, 0x88, 0x5f, 0x3c, 0x99, 0xd6, 0x91, 0x2f, 0x69, 0xae, 0x3f, 0xc3, 0xb4, 0xde, 0x82, 0xde, 0xcc, 0x30, 0xed, 0xc9, 0x31, 0x4f, 0x7e, 0xc9, 0xe5, 0x67, 0xb7, 0xe0, 0x0d, 0xe2, 0x19, 0x59, 0x48, 0x6a, 0x88, 0x7d, 0x74, 0xa5, 0xb2, 0x18, 0x02, 0x93, 0xdf, 0x5d, 0xbe, 0xae, 0x1e, 0x35, 0xa6, 0xe9, 0x37, 0xb2, 0x50, 0x6d, 0x20, 0x50, 0x92, 0xcc, 0x4c, 0x35, 0x95, 0xdb, 0x92, 0xfc, 0x25, 0x5a, 0xf5 }; /* K = 1c020abb0e1d52b3ad95467f7baaf665e2281f34c342401ef1fb4c1fc2d7b2bd */ static const uint8_t ac_dsa_vect282_out[] = { /* R */ 0xa6, 0x72, 0x10, 0x34, 0x1a, 0x04, 0xcd, 0x3a, 0x4b, 0x63, 0xeb, 0xc7, 0xe6, 0x20, 0x8f, 0x37, 0xe4, 0x87, 0xa8, 0xc6, 0xf1, 0x13, 0x4c, 0xd2, 0x60, 0x1b, 0x84, 0x4d, 0x69, 0x03, 0x20, 0x3f, /* S */ 0x6b, 0x97, 0x2c, 0x62, 0x2c, 0xab, 0x48, 0xd8, 0x5a, 0x2d, 0xde, 0x35, 0x5f, 0x94, 0x7a, 0x81, 0x51, 0xa1, 0x7a, 0x0a, 0xcf, 0x06, 0xb7, 0xf3, 0x65, 0x9f, 0x86, 0x8d, 0x5e, 0xce, 0x92, 0xd9 }; #define ac_dsa_vect283_prime ac_dsa_vect271_prime #define ac_dsa_vect283_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect283_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect283_ptx[] = { /* Msg */ 0x14, 0xf5, 0x66, 0xc5, 0xfe, 0x44, 0xaa, 0xad, 0x6e, 0x8b, 0x3c, 0x62, 0x75, 0x70, 0xaa, 0xbd, 0xd4, 0xef, 0xb7, 0xfc, 0xfa, 0x1a, 0xb1, 0xbb, 0x74, 0xf2, 0xc6, 0xd8, 0x79, 0x5e, 0x88, 0x23, 0x3d, 0xac, 0x4e, 0x7d, 0x24, 0x0a, 0xbd, 0x5e, 0x9b, 0xbd, 0x8e, 0x1f, 0xb0, 0x3a, 0x3b, 0xf5, 0x0c, 0x0c, 0xa9, 0x2c, 0x9a, 0xef, 0x18, 0x94, 0xf2, 0xae, 0xd6, 0x00, 0xfc, 0x58, 0x73, 0xd2, 0x34, 0x51, 0xd3, 0x20, 0x4d, 0x75, 0xab, 0x95, 0x81, 0xcb, 0xcf, 0x82, 0xae, 0x8c, 0x0d, 0xf0, 0xdf, 0xbd, 0x3a, 0x1f, 0x14, 0x9f, 0x70, 0x66, 0x08, 0x65, 0x72, 0x6c, 0xdc, 0x73, 0xc0, 0x15, 0xd5, 0xdd, 0xbf, 0x75, 0x13, 0xee, 0xdc, 0xd1, 0xef, 0x17, 0x57, 0x8d, 0x27, 0x19, 0xfe, 0xa1, 0xe5, 0xba, 0x39, 0xae, 0xf3, 0xfa, 0x6f, 0x00, 0x84, 0x6f, 0x0f, 0xb8, 0xd9, 0xa1, 0xa4, 0x36 }; static const uint8_t ac_dsa_vect283_priv_val[] = { /* X */ 0x79, 0x28, 0xd3, 0xed, 0xc1, 0x1a, 0x89, 0x0f, 0xe3, 0x32, 0xc0, 0xd3, 0x75, 0x9b, 0xc6, 0xec, 0xb8, 0x22, 0x43, 0x8d, 0x7f, 0x60, 0x4d, 0xa7, 0x6b, 0x4f, 0xd7, 0x85, 0x90, 0x72, 0x0d, 0xdb }; static const uint8_t ac_dsa_vect283_pub_val[] = { /* Y */ 0xa3, 0x6a, 0x33, 0x39, 0x00, 0x03, 0x5d, 0x34, 0x53, 0x13, 0x9b, 0x28, 0x35, 0x6b, 0xf0, 0x12, 0x4e, 0x57, 0x1f, 0x55, 0xa5, 0xe4, 0x25, 0x9b, 0x8b, 0x2e, 0xe1, 0x45, 0x7c, 0xc3, 0x58, 0x80, 0x56, 0xd6, 0xc6, 0xa6, 0x45, 0xd4, 0x22, 0xca, 0xc7, 0x24, 0x74, 0xc5, 0x90, 0x1d, 0x0a, 0x7f, 0x41, 0x0d, 0xf7, 0xf9, 0xb4, 0xe2, 0x2f, 0x86, 0x84, 0x86, 0x7d, 0x93, 0x32, 0xe2, 0xd4, 0x26, 0x6a, 0x6e, 0x59, 0x5e, 0x51, 0x5b, 0xec, 0xff, 0x7f, 0xb9, 0x4d, 0x21, 0xa8, 0xa9, 0xad, 0x72, 0x11, 0x57, 0x2e, 0x44, 0xce, 0x84, 0x48, 0x31, 0x7b, 0x34, 0xc3, 0xc0, 0xb8, 0x9b, 0x30, 0x97, 0xab, 0x2e, 0xc1, 0x34, 0xec, 0x7c, 0x17, 0x8c, 0x22, 0x78, 0x30, 0x9c, 0xf9, 0x15, 0x2b, 0x22, 0x3b, 0xb9, 0x37, 0xe6, 0x86, 0x82, 0xf1, 0xf6, 0x80, 0xc1, 0x7e, 0xe5, 0x9e, 0xcd, 0x06, 0x98, 0xa0, 0x5c, 0x24, 0xc1, 0x35, 0xd2, 0xb0, 0x23, 0x8e, 0x71, 0xf8, 0x07, 0xe0, 0x79, 0xf1, 0x75, 0xe1, 0x16, 0x71, 0x30, 0x8f, 0x5b, 0xd9, 0xe5, 0xa6, 0x97, 0x12, 0xa9, 0xc5, 0x08, 0xb3, 0xb5, 0x09, 0x25, 0xd1, 0x27, 0x6d, 0x55, 0x2b, 0xda, 0x51, 0xce, 0xf3, 0xbd, 0x0f, 0xbd, 0x00, 0xa9, 0xd2, 0xdd, 0xdf, 0x0e, 0x5e, 0xcb, 0x6b, 0x32, 0x83, 0x78, 0xea, 0x63, 0x7b, 0x49, 0x38, 0x46, 0x48, 0x0e, 0xd7, 0x5a, 0x31, 0x52, 0xd9, 0xe6, 0xa4, 0x88, 0x4e, 0xeb, 0xad, 0x12, 0xb0, 0x7c, 0xad, 0x8d, 0x10, 0x1b, 0x3d, 0x00, 0x1b, 0xc9, 0x9f, 0xb1, 0xee, 0xe4, 0xe9, 0x8f, 0xd6, 0xfc, 0x92, 0x0c, 0xb5, 0x76, 0x5e, 0xc2, 0x4e, 0x62, 0xab, 0xd3, 0x2f, 0x97, 0x5a, 0x47, 0xd5, 0x0f, 0x61, 0x55, 0x3e, 0x1c, 0x14, 0x77, 0x51, 0x93, 0xb5, 0x3b, 0x05, 0xb7, 0xd0, 0x20, 0x24, 0xaa, 0xce, 0x81, 0x8a, 0xb6, 0x59, 0xd7, 0x17, 0xd1, 0x1d, 0xea, 0xcc, 0x98, 0x77, 0xb8, 0x18, 0xa5, 0x16, 0x89, 0xd2, 0x39, 0xb6, 0x0f, 0x7f, 0x9e, 0xd4, 0xca, 0xf7, 0x32, 0x5a, 0xc0, 0xb3, 0x1b, 0x31, 0x6c, 0x03, 0x65, 0x99, 0xea, 0x66, 0x95, 0x9d, 0x52, 0x5f, 0xd1, 0x6f, 0x5c, 0x1a, 0x2a, 0x80, 0x9f, 0x28, 0x66, 0xee, 0x9e, 0x99, 0xf6, 0xd8, 0xa3, 0xc4, 0x2b, 0x58, 0xd3, 0x3d, 0x0e, 0x5d, 0x38, 0x05, 0x5c, 0x55, 0xc7, 0xbc, 0xcd, 0xef, 0x31, 0x0c, 0xcd, 0x34, 0x26, 0x20, 0x7d, 0xbb, 0xc6, 0x0f, 0xaf, 0x9f, 0x2a, 0x21, 0x9a, 0xb3, 0x67, 0xce, 0x84, 0x62, 0x3b, 0x81, 0x10, 0x48, 0x22, 0xe2, 0xc7, 0x7e, 0xc5, 0xb1, 0x33, 0xce, 0x70, 0x50, 0xca, 0xed, 0x09, 0x09, 0x46, 0xc1, 0xf1, 0x35, 0x5d, 0x87, 0x8a, 0x13, 0x17, 0xde, 0x69, 0x4e, 0x68, 0x6c, 0x62, 0xff, 0xdf }; /* K = 01f77e5f125a9a1385349f77d7a32f26b1efa5b0a5d4a212753bb54d300d088e */ static const uint8_t ac_dsa_vect283_out[] = { /* R */ 0x12, 0xb4, 0x0b, 0xd1, 0xc8, 0x66, 0xce, 0x38, 0xe7, 0xda, 0x07, 0x64, 0xd8, 0x07, 0xae, 0x82, 0x51, 0x2b, 0x33, 0xb5, 0x1d, 0xc9, 0x08, 0xe5, 0xa5, 0xb3, 0xd7, 0xc1, 0x6f, 0x0d, 0x08, 0xa5, /* S */ 0x5c, 0xac, 0xce, 0xe2, 0xbc, 0x85, 0xe2, 0x8d, 0x50, 0x6a, 0x9b, 0xc6, 0xd2, 0x60, 0xdb, 0xd0, 0x82, 0x05, 0xb7, 0x5d, 0x20, 0x69, 0x0e, 0x26, 0xaa, 0x6b, 0xed, 0x30, 0xd7, 0x32, 0x70, 0x99 }; #define ac_dsa_vect284_prime ac_dsa_vect271_prime #define ac_dsa_vect284_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect284_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect284_ptx[] = { /* Msg */ 0x60, 0xc2, 0x9d, 0x99, 0x75, 0x3d, 0x08, 0x47, 0xbb, 0x52, 0xe9, 0x06, 0xc8, 0x62, 0xa1, 0xb0, 0x62, 0x84, 0x96, 0x41, 0x6c, 0x14, 0xdf, 0x5d, 0xcf, 0xbb, 0x5e, 0x28, 0x04, 0xf5, 0x02, 0xcb, 0x0a, 0x2d, 0x16, 0x3e, 0x9b, 0xc2, 0xd8, 0x41, 0x22, 0xc0, 0xb3, 0xf5, 0xd0, 0x60, 0x9b, 0x82, 0xac, 0x16, 0xaa, 0x15, 0xef, 0xd5, 0x5f, 0x55, 0xc8, 0xca, 0xa3, 0xd1, 0x11, 0x4a, 0xc0, 0xcb, 0x83, 0xe5, 0xff, 0x3d, 0xb1, 0x2a, 0x24, 0xb8, 0x9a, 0xca, 0x5f, 0x05, 0x14, 0xd2, 0xce, 0xb0, 0x9b, 0x14, 0xfa, 0x91, 0x60, 0x00, 0xc0, 0xf4, 0xde, 0xb0, 0x16, 0xdb, 0x75, 0x5e, 0x88, 0xb3, 0x26, 0x17, 0x21, 0x44, 0xe4, 0xf1, 0xa7, 0x05, 0xa8, 0x00, 0x55, 0x9b, 0x3d, 0xa3, 0xc2, 0x7a, 0xf5, 0x5c, 0xb3, 0x2b, 0x11, 0x47, 0x46, 0x0c, 0x31, 0x18, 0x6d, 0x99, 0xdc, 0x1c, 0xf2, 0xe5 }; static const uint8_t ac_dsa_vect284_priv_val[] = { /* X */ 0x3d, 0xd6, 0x4d, 0xb4, 0xbd, 0x8e, 0x28, 0xe7, 0x01, 0x23, 0x5a, 0xd8, 0x3a, 0x5d, 0x5e, 0x9d, 0xd1, 0x3e, 0xe8, 0xa3, 0xb3, 0xdc, 0xb4, 0xc9, 0x9c, 0x1b, 0xc9, 0x5b, 0x6a, 0xe2, 0x52, 0x91 }; static const uint8_t ac_dsa_vect284_pub_val[] = { /* Y */ 0xa3, 0x73, 0x97, 0xe6, 0xea, 0xfb, 0xdc, 0xf1, 0xe0, 0x15, 0x8f, 0x1f, 0x4e, 0xa1, 0xcb, 0x3a, 0x1e, 0xbd, 0x73, 0x9c, 0x85, 0x59, 0xa5, 0x00, 0xde, 0xf3, 0xb7, 0x55, 0x17, 0x99, 0xd6, 0x52, 0xb3, 0x27, 0x10, 0x1c, 0xfe, 0xa0, 0xb8, 0x70, 0x16, 0xdb, 0x59, 0x15, 0x22, 0xb9, 0xb3, 0x4e, 0xd2, 0x67, 0x13, 0x2c, 0x52, 0x55, 0xe7, 0x76, 0x53, 0xc4, 0xeb, 0x93, 0x5c, 0xe0, 0xc8, 0x22, 0xb4, 0xb1, 0x0a, 0x5e, 0x8f, 0x3c, 0xce, 0x39, 0xad, 0x1b, 0x96, 0x06, 0xde, 0x5b, 0xe2, 0xb2, 0xd3, 0x6e, 0x1c, 0x54, 0x11, 0xf0, 0x6a, 0xba, 0x04, 0x61, 0xea, 0x8d, 0xc4, 0x8b, 0x64, 0x9f, 0x10, 0x8e, 0xba, 0x88, 0xde, 0xf4, 0x4d, 0xaa, 0x2a, 0x5c, 0x65, 0x3d, 0xcc, 0xf1, 0xd8, 0xae, 0x29, 0x20, 0x5d, 0xd5, 0xc3, 0x40, 0xe3, 0x4b, 0x7b, 0xd6, 0x98, 0xec, 0xcd, 0xcd, 0x34, 0x5b, 0xd4, 0xaa, 0x5e, 0xee, 0x3c, 0x08, 0xb9, 0x16, 0x2c, 0xa1, 0x80, 0x48, 0x72, 0xde, 0x3c, 0x57, 0x5d, 0x57, 0x2f, 0x34, 0xdd, 0x48, 0xb4, 0x1f, 0x82, 0x35, 0xd0, 0xf5, 0x11, 0xc8, 0xdc, 0x65, 0xda, 0xeb, 0x07, 0x09, 0x5c, 0x3b, 0x5d, 0xbd, 0x3a, 0x07, 0x6f, 0x8e, 0xb2, 0x44, 0x12, 0xf3, 0x62, 0x1f, 0x49, 0x21, 0x26, 0x73, 0x7a, 0x9d, 0x73, 0x01, 0x4d, 0xef, 0xa5, 0xf5, 0xd5, 0x7b, 0xdc, 0x6f, 0xaf, 0x53, 0x14, 0x2e, 0xb1, 0x91, 0x60, 0x6f, 0x2f, 0xd3, 0xdc, 0x03, 0x5f, 0x4b, 0x8a, 0xe8, 0x4d, 0x65, 0x5c, 0xb6, 0xda, 0xaa, 0xf8, 0x89, 0x00, 0x5c, 0x3c, 0x33, 0x4f, 0xfd, 0x7e, 0x3b, 0x04, 0x98, 0xfa, 0xe2, 0xa6, 0xf8, 0xdc, 0x1b, 0xc6, 0x2f, 0x37, 0x04, 0xc8, 0xf8, 0xc0, 0x05, 0xc8, 0x01, 0x9e, 0x0b, 0xf4, 0x5b, 0x7a, 0xa8, 0xe0, 0x80, 0x3b, 0x93, 0xa9, 0x92, 0x67, 0x5e, 0x38, 0x1f, 0x61, 0xa8, 0x98, 0x58, 0x29, 0x50, 0xb9, 0xce, 0x40, 0xe7, 0xcd, 0xb0, 0x30, 0x0f, 0x4b, 0x26, 0xf9, 0xb4, 0x44, 0x84, 0xe8, 0x9c, 0x92, 0x34, 0x17, 0x9b, 0x60, 0xa3, 0x72, 0xfe, 0x94, 0x76, 0xf8, 0x4d, 0xe0, 0xed, 0x4b, 0x93, 0x49, 0x72, 0x16, 0xfb, 0x96, 0xba, 0xe4, 0x32, 0x97, 0xdc, 0xdc, 0x84, 0x96, 0xc6, 0x34, 0x10, 0x0c, 0xf0, 0x66, 0x40, 0x2c, 0x7d, 0x29, 0x0a, 0x7c, 0xd2, 0x8c, 0xbc, 0xf8, 0xb0, 0x8a, 0xd4, 0xc1, 0x36, 0xdb, 0x2f, 0xe9, 0x92, 0xff, 0xa0, 0x45, 0xbf, 0x8c, 0xb2, 0x49, 0x23, 0x4f, 0x29, 0xa6, 0x74, 0x76, 0x2a, 0x56, 0xd2, 0x08, 0x97, 0xea, 0x55, 0x38, 0xc6, 0x74, 0xa1, 0x43, 0x53, 0xdb, 0x64, 0xba, 0x60, 0xfe, 0x40, 0x52, 0xa0, 0x52, 0x8e, 0xb0, 0xb2, 0x58, 0x87, 0xe3, 0xc5, 0xea, 0x69, 0xb4, 0x1f, 0x68, 0xb3 }; /* K = 453b64f2dedfeb1419b5dbeb726a2c92b1a37ef11a7732c911d9a96184285f40 */ static const uint8_t ac_dsa_vect284_out[] = { /* R */ 0x72, 0xcf, 0x0e, 0x18, 0xe4, 0xbc, 0x37, 0x49, 0x64, 0x7c, 0xdf, 0xa6, 0x2d, 0xcb, 0xd2, 0x51, 0x3c, 0x7c, 0x2b, 0x1d, 0x39, 0x7c, 0x1f, 0xcb, 0xc7, 0xf6, 0xa4, 0x25, 0xeb, 0xb8, 0x97, 0xce, /* S */ 0x7b, 0x7d, 0x0a, 0x9e, 0x93, 0x34, 0x09, 0x41, 0xbb, 0x55, 0xf6, 0xaf, 0xa6, 0xcd, 0x63, 0xf7, 0x36, 0x49, 0x63, 0x67, 0x10, 0x08, 0xed, 0xe4, 0x57, 0xd0, 0x5b, 0x65, 0x45, 0xfa, 0xb1, 0xf1 }; #define ac_dsa_vect285_prime ac_dsa_vect271_prime #define ac_dsa_vect285_sub_prime ac_dsa_vect271_sub_prime #define ac_dsa_vect285_base ac_dsa_vect271_base static const uint8_t ac_dsa_vect285_ptx[] = { /* Msg */ 0xb3, 0xde, 0xa6, 0x2a, 0x20, 0xa9, 0xed, 0x9d, 0xa9, 0x90, 0x46, 0x5b, 0xeb, 0xe1, 0x8a, 0xa7, 0x1f, 0x08, 0xf9, 0x3f, 0xba, 0xee, 0x4f, 0xe5, 0xd5, 0x81, 0xff, 0xaa, 0x6f, 0xd5, 0x5c, 0xbe, 0x27, 0x2a, 0x11, 0x5d, 0x7f, 0xa1, 0x8f, 0xb9, 0xcf, 0x56, 0x62, 0xf5, 0x95, 0xb7, 0xcb, 0x9b, 0xdb, 0x97, 0xa8, 0x1b, 0xdc, 0x07, 0x8e, 0xe3, 0xbd, 0xce, 0xb2, 0xc0, 0x37, 0x22, 0x61, 0x01, 0x34, 0xc3, 0xbb, 0xfd, 0x7a, 0x6f, 0x8b, 0x79, 0xec, 0xc6, 0xa9, 0xa7, 0x70, 0x92, 0x65, 0x68, 0x7f, 0x9c, 0x23, 0x6f, 0xc6, 0x8b, 0x02, 0x20, 0x3b, 0xa6, 0x66, 0xe9, 0xec, 0xed, 0x51, 0x61, 0xde, 0x90, 0xc1, 0x10, 0xee, 0x7a, 0xf9, 0xbf, 0x54, 0xd8, 0x4a, 0x22, 0x18, 0x1f, 0x17, 0xb4, 0x32, 0x93, 0x48, 0xbd, 0xee, 0xfb, 0xb3, 0x24, 0x96, 0x2e, 0x63, 0x56, 0x9f, 0x07, 0xc2, 0x85 }; static const uint8_t ac_dsa_vect285_priv_val[] = { /* X */ 0x63, 0x27, 0xd3, 0x81, 0x8c, 0x87, 0xe4, 0xc9, 0x9b, 0x7e, 0x51, 0x16, 0xfc, 0x09, 0x1a, 0x9d, 0xa1, 0xe4, 0xc0, 0x2a, 0xab, 0x9b, 0x20, 0x7d, 0x61, 0xe8, 0x59, 0xdd, 0xa8, 0xd8, 0x59, 0xed }; static const uint8_t ac_dsa_vect285_pub_val[] = { /* Y */ 0x45, 0x01, 0x33, 0x18, 0xb9, 0x41, 0xa7, 0x10, 0xb8, 0xab, 0x10, 0x10, 0xd8, 0x18, 0xc3, 0x10, 0x36, 0x34, 0x65, 0x8d, 0x2e, 0x3e, 0x2f, 0x41, 0x31, 0x65, 0x86, 0x08, 0x05, 0xe0, 0x8d, 0x5c, 0x1e, 0x80, 0xad, 0xd9, 0x96, 0x9a, 0x3d, 0x3a, 0x0d, 0x23, 0x43, 0x2c, 0x8a, 0x48, 0xcc, 0xe8, 0x36, 0xb2, 0x4a, 0x41, 0x08, 0x92, 0x09, 0x9b, 0xbf, 0x53, 0xcc, 0x5a, 0x84, 0xa9, 0x5e, 0x1e, 0xb3, 0xb6, 0x82, 0xd2, 0x75, 0x4e, 0x72, 0x1e, 0xfc, 0x86, 0xd3, 0xf4, 0x24, 0x8b, 0xaa, 0x33, 0x7d, 0x6f, 0x6e, 0x5d, 0xac, 0x47, 0x59, 0xb2, 0x96, 0x16, 0x59, 0x18, 0xa7, 0x1b, 0x31, 0xce, 0xd2, 0x5b, 0xf1, 0xb0, 0x5d, 0x67, 0x5b, 0xfa, 0x22, 0x29, 0x80, 0x60, 0x8f, 0xda, 0x8f, 0x9d, 0x0e, 0xba, 0x9a, 0xa0, 0x84, 0x75, 0x51, 0x2d, 0x04, 0xc6, 0x12, 0x13, 0x3c, 0x88, 0x25, 0x3b, 0xf3, 0xe2, 0x7e, 0x9f, 0xfe, 0x3a, 0x85, 0x70, 0xbe, 0x20, 0x4f, 0x54, 0xbf, 0x8f, 0xf1, 0xc7, 0xfe, 0x42, 0xae, 0xce, 0x83, 0x20, 0x50, 0xaa, 0xbd, 0xd9, 0x41, 0x57, 0x64, 0xb8, 0xc8, 0x72, 0x69, 0x7f, 0x9c, 0x8e, 0x78, 0xe2, 0xf5, 0x6b, 0xd2, 0x35, 0xeb, 0xbb, 0xb4, 0xb9, 0xcf, 0x8f, 0x05, 0x4b, 0x60, 0x29, 0x29, 0x63, 0x76, 0x45, 0x36, 0xd6, 0xfd, 0x4c, 0x6c, 0xfa, 0xa1, 0xba, 0xea, 0x53, 0x54, 0x6c, 0x6f, 0xfb, 0x56, 0xa0, 0x4f, 0xbf, 0xae, 0xe0, 0x01, 0x22, 0x82, 0x80, 0xae, 0xc4, 0x0e, 0x66, 0xd9, 0xdc, 0x19, 0x2f, 0x9b, 0xa7, 0x43, 0xbd, 0x3f, 0xfc, 0x0e, 0xaf, 0x27, 0x7b, 0x6b, 0xa3, 0xd3, 0x3c, 0x36, 0x97, 0x02, 0x48, 0x92, 0xb0, 0xb3, 0x54, 0x19, 0x53, 0x48, 0x73, 0xfb, 0x7a, 0x3d, 0x59, 0x4d, 0xd6, 0xae, 0x07, 0x51, 0xa2, 0xfa, 0x43, 0x0b, 0xa4, 0x62, 0x37, 0xf4, 0xa5, 0x5e, 0x4a, 0x67, 0x80, 0x72, 0xc6, 0x51, 0xfe, 0x6a, 0xd3, 0x14, 0xa0, 0x10, 0xfd, 0xfe, 0x8f, 0x8b, 0x53, 0x42, 0xbd, 0xab, 0xe9, 0xae, 0x59, 0x10, 0xc6, 0xf4, 0x4a, 0x51, 0xf4, 0x75, 0x24, 0xa6, 0xfe, 0x82, 0x16, 0x83, 0x0c, 0xca, 0xed, 0xed, 0x26, 0xce, 0x1f, 0x13, 0xf7, 0xf2, 0x16, 0xe0, 0xb7, 0x80, 0x9e, 0x92, 0x72, 0x56, 0x3c, 0xab, 0x33, 0x52, 0xb8, 0xed, 0x76, 0x66, 0x50, 0x22, 0x7b, 0xfe, 0x16, 0xe9, 0x81, 0xb5, 0x05, 0x60, 0x9c, 0x41, 0xf0, 0x3d, 0xca, 0x98, 0xe2, 0x19, 0xd0, 0x2a, 0xa7, 0xd9, 0x19, 0x21, 0xed, 0xb3, 0xa8, 0x92, 0x29, 0xe7, 0x8c, 0x30, 0x16, 0x1c, 0xc1, 0x39, 0x73, 0xb3, 0x5d, 0xe3, 0xc8, 0x77, 0x79, 0x37, 0x8b, 0x8d, 0x60, 0x7a, 0x19, 0x32, 0x04, 0x05, 0x66, 0x13, 0x12, 0x43, 0x2d, 0xd8, 0xd0, 0x7a, 0xf2 }; /* K = 94a0f6f58f004e45ce5ffffa6e63abca8daf7768cdafd517f3a5e399828b1e72 */ static const uint8_t ac_dsa_vect285_out[] = { /* R */ 0x3e, 0xc6, 0x77, 0xe9, 0x1c, 0x63, 0xe6, 0x5a, 0xaa, 0x17, 0x4a, 0xee, 0x27, 0x91, 0xdc, 0x40, 0x92, 0x44, 0xcb, 0x80, 0xc0, 0x22, 0x09, 0x91, 0xdc, 0xb4, 0x97, 0x39, 0x7a, 0x3c, 0x5e, 0x9b, /* S */ 0x1d, 0xe0, 0xec, 0x46, 0x6b, 0x2a, 0xd4, 0xed, 0x1a, 0xdc, 0xe3, 0xbc, 0x38, 0xee, 0x52, 0x18, 0x03, 0xdc, 0x87, 0x08, 0x5e, 0x2f, 0xbf, 0xc5, 0x61, 0xd6, 0x38, 0x44, 0xc1, 0xa9, 0xa2, 0xe6 }; /* [mod = L=3072, N=256, SHA-512] */ static const uint8_t ac_dsa_vect286_prime[] = { /* P */ 0xc1, 0xd0, 0xa6, 0xd0, 0xb5, 0xed, 0x61, 0x5d, 0xee, 0x76, 0xac, 0x5a, 0x60, 0xdd, 0x35, 0xec, 0xb0, 0x00, 0xa2, 0x02, 0x06, 0x30, 0x18, 0xb1, 0xba, 0x0a, 0x06, 0xfe, 0x7a, 0x00, 0xf7, 0x65, 0xdb, 0x1c, 0x59, 0xa6, 0x80, 0xce, 0xcf, 0xe3, 0xad, 0x41, 0x47, 0x5b, 0xad, 0xb5, 0xad, 0x50, 0xb6, 0x14, 0x7e, 0x25, 0x96, 0xb8, 0x8d, 0x34, 0x65, 0x60, 0x52, 0xac, 0xa7, 0x94, 0x86, 0xea, 0x6f, 0x6e, 0xc9, 0x0b, 0x23, 0xe3, 0x63, 0xf3, 0xab, 0x8c, 0xdc, 0x8b, 0x93, 0xb6, 0x2a, 0x07, 0x0e, 0x02, 0x68, 0x8e, 0xa8, 0x77, 0x84, 0x3a, 0x46, 0x85, 0xc2, 0xba, 0x6d, 0xb1, 0x11, 0xe9, 0xad, 0xdb, 0xd7, 0xca, 0x4b, 0xce, 0x65, 0xbb, 0x10, 0xc9, 0xce, 0xb6, 0x9b, 0xf8, 0x06, 0xe2, 0xeb, 0xd7, 0xe5, 0x4e, 0xde, 0xb7, 0xf9, 0x96, 0xa6, 0x5c, 0x90, 0x7b, 0x50, 0xef, 0xdf, 0x8e, 0x57, 0x5b, 0xae, 0x46, 0x2a, 0x21, 0x9c, 0x30, 0x2f, 0xef, 0x2a, 0xe8, 0x1d, 0x73, 0xce, 0xe7, 0x52, 0x74, 0x62, 0x5b, 0x5f, 0xc2, 0x9c, 0x6d, 0x60, 0xc0, 0x57, 0xed, 0x9e, 0x7b, 0x0d, 0x46, 0xad, 0x2f, 0x57, 0xfe, 0x01, 0xf8, 0x23, 0x23, 0x0f, 0x31, 0x42, 0x27, 0x22, 0x31, 0x9c, 0xe0, 0xab, 0xf1, 0xf1, 0x41, 0xf3, 0x26, 0xc0, 0x0f, 0xbc, 0x2b, 0xe4, 0xcd, 0xb8, 0x94, 0x4b, 0x6f, 0xd0, 0x50, 0xbd, 0x30, 0x0b, 0xdb, 0x1c, 0x5f, 0x4d, 0xa7, 0x25, 0x37, 0xe5, 0x53, 0xe0, 0x1d, 0x51, 0x23, 0x9c, 0x4d, 0x46, 0x18, 0x60, 0xf1, 0xfb, 0x4f, 0xd8, 0xfa, 0x79, 0xf5, 0xd5, 0x26, 0x3f, 0xf6, 0x2f, 0xed, 0x70, 0x08, 0xe2, 0xe0, 0xa2, 0xd3, 0x6b, 0xf7, 0xb9, 0x06, 0x2d, 0x0d, 0x75, 0xdb, 0x22, 0x6c, 0x34, 0x64, 0xb6, 0x7b, 0xa2, 0x41, 0x01, 0xb0, 0x85, 0xf2, 0xc6, 0x70, 0xc0, 0xf8, 0x7a, 0xe5, 0x30, 0xd9, 0x8e, 0xe6, 0x0c, 0x54, 0x72, 0xf4, 0xaa, 0x15, 0xfb, 0x25, 0x04, 0x1e, 0x19, 0x10, 0x63, 0x54, 0xda, 0x06, 0xbc, 0x2b, 0x1d, 0x32, 0x2d, 0x40, 0xed, 0x97, 0xb2, 0x1f, 0xd1, 0xcd, 0xad, 0x30, 0x25, 0xc6, 0x9d, 0xa6, 0xce, 0x9c, 0x7d, 0xdf, 0x3d, 0xcf, 0x1e, 0xa4, 0xd5, 0x65, 0x77, 0xbf, 0xde, 0xc2, 0x30, 0x71, 0xc1, 0xf0, 0x5e, 0xe4, 0x07, 0x7b, 0x53, 0x91, 0xe9, 0xa4, 0x04, 0xea, 0xff, 0xe1, 0x2d, 0x1e, 0xa6, 0x2d, 0x06, 0xac, 0xd6, 0xbf, 0x19, 0xe9, 0x1a, 0x15, 0x8d, 0x20, 0x66, 0xb4, 0xcd, 0x20, 0xe4, 0xc4, 0xe5, 0x2f, 0xfb, 0x1d, 0x52, 0x04, 0xcd, 0x02, 0x2b, 0xc7, 0x10, 0x8f, 0x2c, 0x79, 0x9f, 0xb4, 0x68, 0x86, 0x6e, 0xf1, 0xcb, 0x09, 0xbc, 0xe0, 0x9d, 0xfd, 0x49, 0xe4, 0x74, 0x0f, 0xf8, 0x14, 0x04, 0x97, 0xbe, 0x61 }; static const uint8_t ac_dsa_vect286_sub_prime[] = { /* Q */ 0xbf, 0x65, 0x44, 0x1c, 0x98, 0x7b, 0x77, 0x37, 0x38, 0x5e, 0xad, 0xec, 0x15, 0x8d, 0xd0, 0x16, 0x14, 0xda, 0x6f, 0x15, 0x38, 0x62, 0x48, 0xe5, 0x9f, 0x3c, 0xdd, 0xbe, 0xfc, 0x8e, 0x9d, 0xd1 }; static const uint8_t ac_dsa_vect286_base[] = { /* G */ 0xc0, 0x2a, 0xc8, 0x53, 0x75, 0xfa, 0xb8, 0x0b, 0xa2, 0xa7, 0x84, 0xb9, 0x4e, 0x4d, 0x14, 0x5b, 0x3b, 0xe0, 0xf9, 0x20, 0x90, 0xeb, 0xa1, 0x7b, 0xd1, 0x23, 0x58, 0xcf, 0x3e, 0x03, 0xf4, 0x37, 0x95, 0x84, 0xf8, 0x74, 0x22, 0x52, 0xf7, 0x6b, 0x1e, 0xde, 0x3f, 0xc3, 0x72, 0x81, 0x42, 0x0e, 0x74, 0xa9, 0x63, 0xe4, 0xc0, 0x88, 0x79, 0x6f, 0xf2, 0xba, 0xb8, 0xdb, 0x6e, 0x9a, 0x45, 0x30, 0xfc, 0x67, 0xd5, 0x1f, 0x88, 0xb9, 0x05, 0xab, 0x43, 0x99, 0x5a, 0xab, 0x46, 0x36, 0x4c, 0xb4, 0x0c, 0x12, 0x56, 0xf0, 0x46, 0x6f, 0x3d, 0xbc, 0xe3, 0x62, 0x03, 0xef, 0x22, 0x8b, 0x35, 0xe9, 0x02, 0x47, 0xe9, 0x5e, 0x51, 0x15, 0xe8, 0x31, 0xb1, 0x26, 0xb6, 0x28, 0xee, 0x98, 0x4f, 0x34, 0x99, 0x11, 0xd3, 0x0f, 0xfb, 0x9d, 0x61, 0x3b, 0x50, 0xa8, 0x4d, 0xfa, 0x1f, 0x04, 0x2b, 0xa5, 0x36, 0xb8, 0x2d, 0x51, 0x01, 0xe7, 0x11, 0xc6, 0x29, 0xf9, 0xf2, 0x09, 0x6d, 0xc8, 0x34, 0xde, 0xec, 0x63, 0xb7, 0x0f, 0x2a, 0x23, 0x15, 0xa6, 0xd2, 0x73, 0x23, 0xb9, 0x95, 0xaa, 0x20, 0xd3, 0xd0, 0x73, 0x70, 0x75, 0x18, 0x6f, 0x50, 0x49, 0xaf, 0x6f, 0x51, 0x2a, 0x0c, 0x38, 0xa9, 0xda, 0x06, 0x81, 0x7f, 0x4b, 0x61, 0x9b, 0x94, 0x52, 0x0e, 0xdf, 0xac, 0x85, 0xc4, 0xa6, 0xe2, 0xe1, 0x86, 0x22, 0x5c, 0x95, 0xa0, 0x4e, 0xc3, 0xc3, 0x42, 0x2b, 0x8d, 0xeb, 0x28, 0x4e, 0x98, 0xd2, 0x4b, 0x31, 0x46, 0x58, 0x02, 0x00, 0x8a, 0x09, 0x7c, 0x25, 0x96, 0x9e, 0x82, 0x6c, 0x2b, 0xaa, 0x59, 0xd2, 0xcb, 0xa3, 0x3d, 0x6c, 0x1d, 0x9f, 0x39, 0x62, 0x33, 0x0c, 0x1f, 0xcd, 0xa7, 0xcf, 0xb1, 0x85, 0x08, 0xfe, 0xa7, 0xd0, 0x55, 0x5e, 0x3a, 0x16, 0x9d, 0xae, 0xd3, 0x53, 0xf3, 0xee, 0x6f, 0x4b, 0xb3, 0x02, 0x44, 0x31, 0x91, 0x61, 0xdf, 0xf6, 0x43, 0x8a, 0x37, 0xca, 0x79, 0x3b, 0x24, 0xbb, 0xb1, 0xb1, 0xbc, 0x21, 0x94, 0xfc, 0x6e, 0x6e, 0xf6, 0x02, 0x78, 0x15, 0x78, 0x99, 0xcb, 0x03, 0xc5, 0xdd, 0x6f, 0xc9, 0x1a, 0x83, 0x6e, 0xb2, 0x0a, 0x25, 0xc0, 0x99, 0x45, 0x64, 0x3d, 0x95, 0xf7, 0xbd, 0x50, 0xd2, 0x06, 0x68, 0x4d, 0x6f, 0xfc, 0x14, 0xd1, 0x6d, 0x82, 0xd5, 0xf7, 0x81, 0x22, 0x5b, 0xff, 0x90, 0x83, 0x92, 0xa5, 0x79, 0x3b, 0x80, 0x3f, 0x9b, 0x70, 0xb4, 0xdf, 0xcb, 0x39, 0x4f, 0x9e, 0xd8, 0x1c, 0x18, 0xe3, 0x91, 0xa0, 0x9e, 0xb3, 0xf9, 0x3a, 0x03, 0x2d, 0x81, 0xba, 0x67, 0x0c, 0xab, 0xfd, 0x6f, 0x64, 0xaa, 0x5e, 0x33, 0x74, 0xcb, 0x7c, 0x20, 0x29, 0xf4, 0x52, 0x00, 0xe4, 0xf0, 0xbf, 0xd8, 0x20, 0xc8, 0xbd, 0x58, 0xdc, 0x5e, 0xeb, 0x34 }; static const uint8_t ac_dsa_vect286_ptx[] = { /* Msg */ 0x49, 0x41, 0x80, 0xee, 0xd0, 0x95, 0x13, 0x71, 0xbb, 0xaf, 0x0a, 0x85, 0x0e, 0xf1, 0x36, 0x79, 0xdf, 0x49, 0xc1, 0xf1, 0x3f, 0xe3, 0x77, 0x0b, 0x6c, 0x13, 0x28, 0x5b, 0xf3, 0xad, 0x93, 0xdc, 0x4a, 0xb0, 0x18, 0xaa, 0xb9, 0x13, 0x9d, 0x74, 0x20, 0x08, 0x08, 0xe9, 0xc5, 0x5b, 0xf8, 0x83, 0x00, 0x32, 0x4c, 0xc6, 0x97, 0xef, 0xea, 0xa6, 0x41, 0xd3, 0x7f, 0x3a, 0xcf, 0x72, 0xd8, 0xc9, 0x7b, 0xff, 0x01, 0x82, 0xa3, 0x5b, 0x94, 0x01, 0x50, 0xc9, 0x8a, 0x03, 0xef, 0x41, 0xa3, 0xe1, 0x48, 0x74, 0x40, 0xc9, 0x23, 0xa9, 0x88, 0xe5, 0x3c, 0xa3, 0xce, 0x88, 0x3a, 0x2f, 0xb5, 0x32, 0xbb, 0x74, 0x41, 0xc1, 0x22, 0xf1, 0xdc, 0x2f, 0x9d, 0x0b, 0x0b, 0xc0, 0x7f, 0x26, 0xba, 0x29, 0xa3, 0x5c, 0xdf, 0x0d, 0xa8, 0x46, 0xa9, 0xd8, 0xea, 0xb4, 0x05, 0xcb, 0xf8, 0xc8, 0xe7, 0x7f }; static const uint8_t ac_dsa_vect286_priv_val[] = { /* X */ 0x15, 0x0b, 0x5c, 0x51, 0xea, 0x64, 0x02, 0x27, 0x6b, 0xc9, 0x12, 0x32, 0x2f, 0x04, 0x04, 0xf6, 0xd5, 0x7f, 0xf7, 0xd3, 0x2a, 0xfc, 0xaa, 0x83, 0xb6, 0xdf, 0xde, 0x11, 0xab, 0xb4, 0x81, 0x81 }; static const uint8_t ac_dsa_vect286_pub_val[] = { /* Y */ 0x6d, 0xa5, 0x4f, 0x2b, 0x0d, 0xdb, 0x4d, 0xcc, 0xe2, 0xda, 0x1e, 0xdf, 0xa1, 0x6b, 0xa8, 0x49, 0x53, 0xd8, 0x42, 0x9c, 0xe6, 0x0c, 0xd1, 0x11, 0xa5, 0xc6, 0x5e, 0xdc, 0xf7, 0xba, 0x5b, 0x8d, 0x93, 0x87, 0xab, 0x68, 0x81, 0xc2, 0x48, 0x80, 0xb2, 0xaf, 0xbd, 0xb4, 0x37, 0xe9, 0xed, 0x7f, 0xfb, 0x8e, 0x96, 0xbe, 0xca, 0x7e, 0xa8, 0x0d, 0x1d, 0x90, 0xf2, 0x4d, 0x54, 0x61, 0x12, 0x62, 0x9d, 0xf5, 0xc9, 0xe9, 0x66, 0x17, 0x42, 0xcc, 0x87, 0x2f, 0xdb, 0x3d, 0x40, 0x9b, 0xc7, 0x7b, 0x75, 0xb1, 0x7c, 0x7e, 0x6c, 0xff, 0xf8, 0x62, 0x61, 0x07, 0x1c, 0x4b, 0x5c, 0x9f, 0x98, 0x98, 0xbe, 0x1e, 0x9e, 0x27, 0x34, 0x9b, 0x93, 0x3c, 0x34, 0xfb, 0x34, 0x56, 0x85, 0xf8, 0xfc, 0x6c, 0x12, 0x47, 0x0d, 0x12, 0x4c, 0xec, 0xf5, 0x1b, 0x5d, 0x5a, 0xdb, 0xf5, 0xe7, 0xa2, 0x49, 0x0f, 0x8d, 0x67, 0xaa, 0xc5, 0x3a, 0x82, 0xed, 0x6a, 0x21, 0x10, 0x68, 0x6c, 0xf6, 0x31, 0xc3, 0x48, 0xbc, 0xbc, 0x4c, 0xf1, 0x56, 0xf3, 0xa6, 0x98, 0x01, 0x63, 0xe2, 0xfe, 0xca, 0x72, 0xa4, 0x5f, 0x6b, 0x3d, 0x68, 0xc1, 0x0e, 0x5a, 0x22, 0x83, 0xb4, 0x70, 0xb7, 0x29, 0x26, 0x74, 0x49, 0x03, 0x83, 0xf7, 0x5f, 0xa2, 0x6c, 0xcf, 0x93, 0xc0, 0xe1, 0xc8, 0xd0, 0x62, 0x8c, 0xa3, 0x5f, 0x2f, 0x3d, 0x9b, 0x68, 0x76, 0x50, 0x5d, 0x11, 0x89, 0x88, 0x95, 0x72, 0x37, 0xa2, 0xfc, 0x80, 0x51, 0xcb, 0x47, 0xb4, 0x10, 0xe8, 0xb7, 0xa6, 0x19, 0xe7, 0x3b, 0x13, 0x50, 0xa9, 0xf6, 0xa2, 0x60, 0xc5, 0xf1, 0x68, 0x41, 0xe7, 0xc4, 0xdb, 0x53, 0xd8, 0xea, 0xa0, 0xb4, 0x70, 0x8d, 0x62, 0xf9, 0x5b, 0x2a, 0x72, 0xe2, 0xf0, 0x4c, 0xa1, 0x46, 0x47, 0xbc, 0xa6, 0xb5, 0xe3, 0xee, 0x70, 0x7f, 0xcd, 0xf7, 0x58, 0xb9, 0x25, 0xeb, 0x8d, 0x4e, 0x6a, 0xce, 0x4f, 0xc7, 0x44, 0x3c, 0x9b, 0xc5, 0x81, 0x9f, 0xf9, 0xe5, 0x55, 0xbe, 0x09, 0x8a, 0xa0, 0x55, 0x06, 0x68, 0x28, 0xe2, 0x1b, 0x81, 0x8f, 0xed, 0xc3, 0xaa, 0xc5, 0x17, 0xa0, 0xee, 0x8f, 0x90, 0x60, 0xbd, 0x86, 0xe0, 0xd4, 0xcc, 0xe2, 0x12, 0xab, 0x6a, 0x3a, 0x24, 0x3c, 0x5e, 0xc0, 0x27, 0x45, 0x63, 0x35, 0x3c, 0xa7, 0x10, 0x3a, 0xf0, 0x85, 0xe8, 0xf4, 0x1b, 0xe5, 0x24, 0xfb, 0xb7, 0x5c, 0xda, 0x88, 0x90, 0x39, 0x07, 0xdf, 0x94, 0xbf, 0xd6, 0x93, 0x73, 0xe2, 0x88, 0x94, 0x9b, 0xd0, 0x62, 0x6d, 0x85, 0xc1, 0x39, 0x8b, 0x30, 0x73, 0xa1, 0x39, 0xd5, 0xc7, 0x47, 0xd2, 0x4a, 0xfd, 0xae, 0x7a, 0x3e, 0x74, 0x54, 0x37, 0x33, 0x5d, 0x0e, 0xe9, 0x93, 0xee, 0xf3, 0x6a, 0x30, 0x41, 0xc9, 0x12, 0xf7, 0xeb, 0x58 }; /* K = b599111b9f78402cefe7bde8bf553b6ca00d5abaf9a158aa42f2607bf78510bc */ static const uint8_t ac_dsa_vect286_out[] = { /* R */ 0xa4, 0x0a, 0x6c, 0x90, 0x56, 0x54, 0xc5, 0x5f, 0xc5, 0x8e, 0x99, 0xc7, 0xd1, 0xa3, 0xfe, 0xea, 0x2c, 0x5b, 0xe6, 0x48, 0x23, 0xd4, 0x08, 0x6c, 0xe8, 0x11, 0xf3, 0x34, 0xcf, 0xdc, 0x44, 0x8d, /* S */ 0x64, 0x78, 0x05, 0x09, 0x77, 0xec, 0x58, 0x59, 0x80, 0x45, 0x4e, 0x0a, 0x2f, 0x26, 0xa0, 0x30, 0x37, 0xb9, 0x21, 0xca, 0x58, 0x8a, 0x78, 0xa4, 0xda, 0xff, 0x7e, 0x84, 0xd4, 0x9a, 0x8a, 0x6c }; #define ac_dsa_vect287_prime ac_dsa_vect286_prime #define ac_dsa_vect287_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect287_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect287_ptx[] = { /* Msg */ 0xc0, 0x1c, 0x47, 0xbf, 0xa2, 0x08, 0xe2, 0xf1, 0x9d, 0xdd, 0xa5, 0xcd, 0xe5, 0x83, 0x33, 0x25, 0xd1, 0x6a, 0x83, 0xfb, 0xda, 0x29, 0xe6, 0x66, 0xfe, 0x67, 0xff, 0x34, 0x89, 0x80, 0x3a, 0x64, 0x78, 0xa5, 0xac, 0x17, 0xff, 0x01, 0xed, 0xc7, 0x97, 0x3d, 0x15, 0xfe, 0x49, 0x98, 0xf6, 0x3b, 0xbc, 0x09, 0x5f, 0xc1, 0xac, 0x07, 0x53, 0x42, 0x41, 0xc6, 0x43, 0xa4, 0x44, 0x44, 0xdc, 0x9a, 0x35, 0x6f, 0xa8, 0x12, 0xd5, 0xca, 0x19, 0x1a, 0x2f, 0x6e, 0xd1, 0x62, 0xa2, 0xd5, 0xfd, 0x6d, 0x0a, 0xa8, 0x98, 0xa2, 0x05, 0x63, 0xd9, 0x93, 0x83, 0x02, 0x54, 0xdb, 0x8a, 0x4b, 0xf6, 0x5b, 0xa8, 0x60, 0x99, 0xcc, 0x6b, 0x58, 0xa1, 0xbf, 0x6e, 0xbb, 0x01, 0xa1, 0x9c, 0x79, 0x30, 0x43, 0x08, 0xac, 0xeb, 0xe1, 0xda, 0x09, 0xf1, 0x75, 0x3a, 0x19, 0x5e, 0x9e, 0xf5, 0x86, 0xc7, 0xe1 }; static const uint8_t ac_dsa_vect287_priv_val[] = { /* X */ 0x9f, 0x11, 0x37, 0x0d, 0xdb, 0x3c, 0x43, 0xe2, 0xf4, 0x16, 0x2d, 0xc6, 0x1f, 0x7e, 0x08, 0xdf, 0xc6, 0xe8, 0x6d, 0x5d, 0x71, 0x74, 0x2c, 0x6a, 0xdc, 0xb5, 0x34, 0x0f, 0x7b, 0xea, 0x2a, 0xda }; static const uint8_t ac_dsa_vect287_pub_val[] = { /* Y */ 0x97, 0x0d, 0x38, 0xcd, 0x8b, 0x3f, 0x16, 0x65, 0x9e, 0xc4, 0x2a, 0x46, 0xa1, 0x9f, 0xf0, 0x6c, 0xe8, 0x49, 0x5b, 0x9f, 0x47, 0x7d, 0x9b, 0x7e, 0x35, 0xae, 0x10, 0x35, 0xb0, 0x8b, 0x0e, 0xe1, 0x7a, 0x0c, 0x3c, 0xee, 0xdf, 0x02, 0x98, 0x46, 0xe3, 0xae, 0xb9, 0x12, 0xf8, 0x50, 0x88, 0x1c, 0x22, 0x77, 0xf8, 0x22, 0x81, 0xe7, 0xc0, 0x74, 0x1d, 0x2f, 0x87, 0xe9, 0xfa, 0x5c, 0x30, 0x67, 0x7f, 0xe7, 0x26, 0x8c, 0xc5, 0xfd, 0x9a, 0xed, 0x29, 0xf3, 0x08, 0xd9, 0xbe, 0x8d, 0xe9, 0x2b, 0x96, 0x1e, 0x39, 0xc1, 0xdb, 0xc4, 0x67, 0x90, 0xc9, 0x9b, 0x7e, 0x29, 0x57, 0x9d, 0xaf, 0x88, 0x81, 0x76, 0xd5, 0xce, 0x16, 0xdb, 0x5c, 0xab, 0xfc, 0xbe, 0x42, 0x09, 0xac, 0x47, 0x53, 0xb0, 0xe9, 0x6b, 0x15, 0xd0, 0xb8, 0x2c, 0x7e, 0xef, 0xb4, 0x2a, 0x10, 0xde, 0x88, 0xf8, 0xa7, 0x72, 0x34, 0x92, 0xa2, 0xbe, 0x54, 0x51, 0xc1, 0xc6, 0xec, 0x68, 0xca, 0x75, 0x9d, 0x8b, 0x4e, 0xe4, 0x18, 0x82, 0x6e, 0x71, 0xf3, 0x9c, 0xd0, 0x76, 0x54, 0xd0, 0x0d, 0x0e, 0x0f, 0x88, 0xd0, 0x92, 0x4b, 0xdb, 0x97, 0xaa, 0xca, 0x5a, 0x63, 0x46, 0xad, 0x69, 0xfc, 0x22, 0x3c, 0xd5, 0x7f, 0x5b, 0xb0, 0x30, 0x04, 0x77, 0xb5, 0x94, 0xaa, 0x44, 0x5e, 0x5e, 0xa8, 0x89, 0x6c, 0xdf, 0x3b, 0xc8, 0x82, 0xe8, 0xfa, 0x55, 0x23, 0xb8, 0xa3, 0x32, 0xfd, 0x98, 0xe9, 0xd0, 0xa9, 0x24, 0x57, 0x89, 0x44, 0xd2, 0x4a, 0x41, 0xcb, 0xea, 0xe3, 0xed, 0x7b, 0x37, 0xdf, 0xfb, 0x2f, 0x60, 0xc0, 0x08, 0x4e, 0xaf, 0x00, 0x5c, 0x12, 0x51, 0x82, 0x3d, 0xa4, 0x1d, 0x2a, 0x5d, 0x97, 0x7d, 0x8e, 0x48, 0x3d, 0xdb, 0x33, 0xf7, 0x3f, 0xbc, 0x27, 0x25, 0x4a, 0x81, 0x4b, 0x61, 0x6d, 0x6a, 0x39, 0x05, 0x13, 0xf0, 0x56, 0x7a, 0x56, 0x3a, 0xc0, 0x53, 0xa7, 0x66, 0x67, 0x19, 0x7b, 0x45, 0x58, 0xf8, 0x71, 0xb6, 0x9c, 0xbf, 0x2c, 0x11, 0x6c, 0xe4, 0x57, 0x51, 0x3f, 0x60, 0xb4, 0xf5, 0x28, 0xe2, 0xdc, 0xda, 0xa7, 0x1a, 0x9a, 0x3a, 0x4c, 0xcc, 0xb3, 0x73, 0x8a, 0x22, 0x93, 0x7b, 0xca, 0x2a, 0x04, 0x2b, 0xef, 0x8a, 0x74, 0xa6, 0x00, 0xac, 0xd2, 0x69, 0x75, 0xc8, 0x91, 0x46, 0x6d, 0x7e, 0x57, 0xcc, 0x93, 0x09, 0x84, 0x21, 0x2e, 0xe0, 0xea, 0xf1, 0x74, 0xeb, 0xcb, 0xaf, 0xbe, 0xb8, 0xcc, 0x12, 0xbc, 0x43, 0xbf, 0xdb, 0x00, 0xfd, 0x11, 0x57, 0x6c, 0x43, 0x95, 0x13, 0xef, 0x5b, 0x59, 0xa8, 0x8f, 0xa5, 0xa9, 0xae, 0x96, 0x3d, 0x94, 0xda, 0xfd, 0x78, 0xf8, 0x1e, 0xe7, 0xb0, 0xd7, 0xfa, 0xb5, 0x3e, 0x41, 0xbb, 0xf6, 0x5f, 0x84, 0x49, 0xa4, 0xf5, 0x8b, 0x44, 0xf9, 0xe3 }; /* K = ab53984e0b154992ace73bba548185b49719bcc3b11fb150b5da279529750078 */ static const uint8_t ac_dsa_vect287_out[] = { /* R */ 0x5b, 0xb5, 0x0e, 0x4f, 0x53, 0x8a, 0x6e, 0x46, 0x38, 0x20, 0x6b, 0xe1, 0x19, 0xdb, 0xf7, 0x12, 0x77, 0x61, 0x54, 0xac, 0xfb, 0x4c, 0x06, 0xd6, 0x5d, 0x66, 0xc8, 0x02, 0x12, 0x34, 0x17, 0x39, /* S */ 0x7b, 0x7e, 0x64, 0x0c, 0xd7, 0x60, 0x86, 0xd3, 0xf6, 0x40, 0xd1, 0x8c, 0xeb, 0x26, 0xbb, 0x53, 0xe3, 0x02, 0x82, 0xaf, 0xb1, 0x74, 0x01, 0xe7, 0xb4, 0x8a, 0xa6, 0x81, 0x89, 0x34, 0xdc, 0x5c }; #define ac_dsa_vect288_prime ac_dsa_vect286_prime #define ac_dsa_vect288_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect288_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect288_ptx[] = { /* Msg */ 0x47, 0xe7, 0xaf, 0x22, 0xc9, 0x29, 0x8a, 0xd3, 0xbf, 0xef, 0x9b, 0xee, 0x50, 0x86, 0xbe, 0xdb, 0xdc, 0x51, 0x3d, 0x67, 0x41, 0x6d, 0x5f, 0x4e, 0x79, 0x81, 0xcd, 0xdb, 0x10, 0x02, 0xcb, 0xa2, 0x47, 0x00, 0xc4, 0x5d, 0xd6, 0xd4, 0xdc, 0xef, 0x4f, 0x81, 0xd0, 0x03, 0xf0, 0x51, 0x3d, 0xab, 0x4e, 0x04, 0xeb, 0x4c, 0x70, 0xd9, 0x44, 0x04, 0x2e, 0x1b, 0x72, 0x6d, 0x8a, 0x33, 0x05, 0x0d, 0x0e, 0x4f, 0x70, 0xc0, 0xa8, 0x34, 0x1b, 0x75, 0xfd, 0x4e, 0x27, 0xc7, 0x94, 0x87, 0x54, 0xe4, 0x41, 0x20, 0x8e, 0xb9, 0x3f, 0xc7, 0xb7, 0xc3, 0x73, 0x54, 0x25, 0x2f, 0x73, 0xb8, 0x38, 0xfd, 0x02, 0xd0, 0x78, 0xc6, 0xa1, 0xae, 0x07, 0x3e, 0xf1, 0x23, 0x3a, 0xa1, 0xc8, 0xaa, 0x27, 0x81, 0xe1, 0x93, 0xba, 0x28, 0x97, 0xcc, 0xdd, 0x8c, 0xf6, 0x17, 0xca, 0x23, 0x54, 0x1c, 0xe1, 0xc5 }; static const uint8_t ac_dsa_vect288_priv_val[] = { /* X */ 0x23, 0x2c, 0x1c, 0x88, 0xd5, 0x71, 0x49, 0x27, 0x79, 0x17, 0x2c, 0xe6, 0x65, 0x05, 0x24, 0xcb, 0x6d, 0x91, 0x17, 0x4e, 0x8a, 0x23, 0x78, 0x0d, 0x0f, 0xdf, 0x7c, 0x44, 0xff, 0xd8, 0x0c, 0x1a }; static const uint8_t ac_dsa_vect288_pub_val[] = { /* Y */ 0x75, 0x16, 0x3a, 0xf1, 0x5c, 0xd6, 0xb2, 0x28, 0x25, 0x15, 0x04, 0xba, 0x02, 0x4d, 0xf5, 0x1d, 0xf3, 0x2f, 0x63, 0x8e, 0x37, 0xf0, 0xf2, 0xf9, 0xd0, 0x88, 0x37, 0xf8, 0xc6, 0xec, 0xfb, 0xa4, 0x3e, 0xb5, 0x15, 0xcc, 0xba, 0xbe, 0xa1, 0x1b, 0x01, 0xe1, 0xe1, 0xfd, 0x3c, 0xfe, 0x7e, 0x40, 0x5f, 0xc7, 0xf8, 0x14, 0x2b, 0x07, 0x31, 0x5e, 0x1d, 0xc3, 0x7b, 0x08, 0xc7, 0x86, 0x68, 0x42, 0x1e, 0x2a, 0x21, 0xfc, 0x5d, 0x81, 0x1d, 0x26, 0x55, 0x8c, 0x50, 0x4a, 0xbc, 0x4e, 0x6f, 0xdd, 0xf0, 0x37, 0x40, 0xb8, 0xa2, 0x7f, 0xa2, 0xeb, 0xcd, 0xa5, 0x46, 0x0a, 0xd7, 0x85, 0x70, 0x6c, 0x53, 0xcd, 0x2d, 0x14, 0x09, 0x3d, 0x92, 0x3d, 0xf9, 0x42, 0x05, 0x1c, 0xbb, 0xa2, 0x58, 0x6b, 0x4d, 0x54, 0x70, 0x9d, 0x24, 0xba, 0xbe, 0x2f, 0x7c, 0x61, 0xa5, 0x0d, 0xa8, 0x45, 0x18, 0x95, 0x99, 0x91, 0x66, 0xe8, 0x0c, 0x0f, 0xab, 0x89, 0x2a, 0x37, 0xeb, 0x67, 0x82, 0x74, 0x55, 0x96, 0xb4, 0x9f, 0x96, 0xe1, 0x1e, 0x9a, 0x95, 0x7c, 0x8e, 0xc6, 0x50, 0xd2, 0xd9, 0xa4, 0x0a, 0xa4, 0xb0, 0x14, 0xd2, 0xe9, 0xa4, 0xc0, 0x8b, 0x9d, 0x7b, 0xfe, 0xaf, 0x1e, 0xcd, 0x42, 0x78, 0x5b, 0x95, 0xc0, 0x17, 0x2a, 0xe2, 0x1c, 0xf2, 0x5c, 0x4d, 0x36, 0x8b, 0xb5, 0x10, 0x0b, 0x6e, 0x6d, 0x92, 0x31, 0x0b, 0x28, 0xb7, 0xb1, 0xaf, 0xe6, 0x4d, 0x49, 0x6b, 0x9c, 0x60, 0xb7, 0x63, 0xca, 0xc0, 0x8a, 0xc4, 0x6a, 0x6b, 0xce, 0x1b, 0xbd, 0x3a, 0xc8, 0xbb, 0x76, 0xbb, 0x55, 0xb6, 0x49, 0xb7, 0x59, 0x48, 0x20, 0xab, 0x6e, 0xf7, 0xdd, 0x1b, 0x09, 0xbb, 0x12, 0x85, 0x28, 0x16, 0xb6, 0x1e, 0x6d, 0xbe, 0xfa, 0xb7, 0x42, 0xe0, 0xea, 0x2c, 0xda, 0x47, 0xea, 0xc7, 0xd9, 0xd9, 0x13, 0xdd, 0xd4, 0xbf, 0xd8, 0xb2, 0xeb, 0x5f, 0x01, 0x95, 0x1c, 0xaa, 0x4f, 0x41, 0x3e, 0xb5, 0xe7, 0xa4, 0x1a, 0x06, 0x85, 0x69, 0x5f, 0x83, 0x31, 0xa3, 0x94, 0xe0, 0x6b, 0x14, 0x95, 0xc1, 0x70, 0xf3, 0x0a, 0xc2, 0x94, 0x66, 0x0e, 0x89, 0x09, 0x84, 0x3f, 0x9f, 0x11, 0xc4, 0xbf, 0xa6, 0x4e, 0x87, 0x92, 0xdf, 0x67, 0x7d, 0xa0, 0xa0, 0x8a, 0xae, 0x32, 0xa8, 0xa4, 0xe7, 0x06, 0x7f, 0xc3, 0x5e, 0xee, 0x03, 0x96, 0x4e, 0x8a, 0xfb, 0xdb, 0x6a, 0x42, 0x1b, 0x82, 0x48, 0xad, 0xd2, 0x84, 0x78, 0x9e, 0x4e, 0xd3, 0xca, 0xce, 0x71, 0x06, 0xc2, 0x3f, 0xe6, 0x66, 0x6c, 0x4b, 0x12, 0xb8, 0x36, 0xe7, 0x30, 0x7a, 0x55, 0xab, 0x24, 0xd9, 0x2d, 0x58, 0xac, 0x84, 0xe7, 0x1f, 0x81, 0xdc, 0x9b, 0x0b, 0x74, 0x36, 0xad, 0x07, 0xf7, 0x49, 0x94, 0xaf, 0x7d, 0x0b, 0x04, 0x9b, 0xd0, 0x9a }; /* K = 101acd88a048a6a87c13ff23225dc2c4d2fe3fff039e072fbb268ef2dbfab9c3 */ static const uint8_t ac_dsa_vect288_out[] = { /* R */ 0x61, 0x75, 0x47, 0x3d, 0x7a, 0xa7, 0xd5, 0xce, 0x55, 0x59, 0x0c, 0x95, 0x2a, 0x19, 0x89, 0x72, 0x06, 0x08, 0x68, 0x87, 0xfd, 0x84, 0xbf, 0x2b, 0x56, 0x69, 0x26, 0xe4, 0x79, 0x81, 0xc2, 0xa3, /* S */ 0x71, 0xd7, 0x85, 0x7b, 0x6f, 0xf0, 0x6c, 0xa6, 0x78, 0x85, 0xfa, 0x9c, 0x9c, 0x71, 0xb8, 0xcc, 0x24, 0x6d, 0x03, 0x39, 0xb6, 0xc2, 0x72, 0x52, 0x47, 0x17, 0x2a, 0x29, 0x7e, 0x26, 0xa7, 0xb5 }; #define ac_dsa_vect289_prime ac_dsa_vect286_prime #define ac_dsa_vect289_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect289_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect289_ptx[] = { /* Msg */ 0x93, 0x11, 0xd8, 0xf9, 0x51, 0x14, 0x17, 0x13, 0xf4, 0x59, 0xeb, 0x65, 0xf0, 0x18, 0x80, 0xb9, 0x61, 0xc0, 0xa5, 0x90, 0xb3, 0x6f, 0x78, 0x5f, 0x1a, 0xeb, 0x88, 0x0e, 0xe7, 0x13, 0x00, 0xc0, 0xcb, 0xc6, 0x01, 0xb3, 0xa6, 0x07, 0x21, 0x93, 0xda, 0xd6, 0xdd, 0xf2, 0x02, 0x8e, 0xca, 0x4c, 0x8b, 0xd7, 0xb8, 0x57, 0x51, 0x87, 0x92, 0x8f, 0x84, 0xbd, 0x69, 0xc5, 0xdc, 0xfb, 0x0b, 0x9d, 0x32, 0x00, 0x03, 0xc3, 0xa8, 0x63, 0xc0, 0x9e, 0xe5, 0x03, 0xe3, 0x8a, 0xbe, 0x07, 0xce, 0x2e, 0x0d, 0x46, 0xb3, 0xce, 0xc9, 0x26, 0x23, 0x1a, 0x57, 0xde, 0xfa, 0x0a, 0xeb, 0xd1, 0xa6, 0xe0, 0x1e, 0xef, 0x4f, 0x9b, 0x53, 0x7a, 0xe1, 0xfc, 0xdf, 0x64, 0xe0, 0x14, 0x34, 0xd4, 0x0a, 0xb5, 0x01, 0x9f, 0x39, 0x65, 0xc7, 0x35, 0x41, 0x1a, 0x5c, 0x19, 0x94, 0x1f, 0x41, 0xfe, 0xbf, 0x4f }; static const uint8_t ac_dsa_vect289_priv_val[] = { /* X */ 0x87, 0xbd, 0xe6, 0x35, 0x0d, 0xa1, 0x58, 0x32, 0x96, 0x6f, 0xe7, 0x03, 0x00, 0xe5, 0xdc, 0x66, 0xb9, 0x6e, 0xc2, 0x63, 0x34, 0x4b, 0xcf, 0xb5, 0xde, 0x05, 0x1b, 0xe3, 0x4d, 0x76, 0x26, 0x2b }; static const uint8_t ac_dsa_vect289_pub_val[] = { /* Y */ 0x28, 0x7d, 0xdc, 0x19, 0x69, 0x15, 0x6c, 0x18, 0x42, 0x07, 0x43, 0xad, 0xe0, 0xfa, 0x12, 0x71, 0xea, 0x34, 0x6c, 0x33, 0x29, 0xf9, 0xca, 0x9b, 0x5d, 0x54, 0xeb, 0xfa, 0x21, 0xf6, 0x76, 0xf9, 0xe0, 0x13, 0x61, 0x62, 0x39, 0xf4, 0xbb, 0xe6, 0x0e, 0xaf, 0x8e, 0x19, 0x02, 0xed, 0x9a, 0xc7, 0x42, 0xd8, 0xdf, 0x91, 0x88, 0x76, 0x77, 0x08, 0x94, 0xb5, 0x12, 0xaa, 0xa2, 0x5c, 0x06, 0x8b, 0xde, 0x96, 0x1f, 0x56, 0xc9, 0xb5, 0xb8, 0x78, 0x06, 0xd7, 0xd0, 0xa9, 0xde, 0x78, 0x43, 0xd3, 0xcb, 0x07, 0x97, 0x90, 0x31, 0x26, 0xa4, 0x7b, 0xd9, 0x42, 0x23, 0x37, 0xe3, 0xb4, 0x6b, 0xb1, 0xf4, 0xf4, 0xa7, 0x9f, 0xdf, 0x9c, 0xf6, 0x76, 0x21, 0x57, 0x11, 0x8a, 0xee, 0xe1, 0xe7, 0x11, 0x16, 0xf3, 0x4d, 0xaf, 0xce, 0x00, 0x47, 0xf0, 0x5d, 0x43, 0xc7, 0xf2, 0xcb, 0xd4, 0xcd, 0x52, 0xd6, 0x14, 0xb7, 0xa9, 0x45, 0xd4, 0x8b, 0xe4, 0x4c, 0xfe, 0xbf, 0x78, 0x43, 0x32, 0xfe, 0x99, 0xc1, 0xee, 0x1a, 0xa8, 0x31, 0x08, 0x67, 0xdf, 0x20, 0xb2, 0x80, 0xda, 0x85, 0x5b, 0x19, 0x02, 0x9f, 0xa7, 0x9e, 0xcd, 0x6d, 0xd6, 0x91, 0x9a, 0x4d, 0x22, 0xb5, 0xa1, 0x40, 0x0c, 0x30, 0xe6, 0x2c, 0xe7, 0xac, 0xc4, 0xb2, 0x8e, 0xfb, 0xdb, 0x94, 0xea, 0x23, 0xaf, 0xbb, 0x64, 0xd6, 0xe5, 0xf7, 0xb3, 0x97, 0x5d, 0x2a, 0xc6, 0x3b, 0x1d, 0x04, 0x8f, 0xee, 0xa8, 0x35, 0xc7, 0xf5, 0x0b, 0x42, 0x5c, 0xe3, 0xcb, 0x41, 0x8a, 0xfd, 0xf4, 0xdc, 0x84, 0x00, 0x84, 0x73, 0x60, 0x65, 0x74, 0xe2, 0x0d, 0xb5, 0xeb, 0xf8, 0x6c, 0xb1, 0xad, 0x27, 0x73, 0x7d, 0x46, 0x49, 0x4b, 0x2e, 0x48, 0x5b, 0x26, 0xb8, 0xc9, 0x5d, 0x82, 0x9c, 0xf6, 0x56, 0xf8, 0x0f, 0x96, 0xb1, 0xa6, 0x2e, 0x7c, 0x03, 0xc8, 0xf2, 0x0f, 0x18, 0xdc, 0x58, 0xbf, 0x59, 0x91, 0x66, 0x82, 0xe6, 0xdc, 0xc6, 0x8d, 0x34, 0xc8, 0x9c, 0x1b, 0x1b, 0xd6, 0xe6, 0xb1, 0xe1, 0x5a, 0x7d, 0xc3, 0x25, 0xe2, 0x3f, 0xd7, 0xa3, 0x50, 0x99, 0x83, 0x1d, 0xbd, 0x75, 0x98, 0x9c, 0x73, 0x80, 0x20, 0xbf, 0x4d, 0xc4, 0x07, 0x9c, 0xcb, 0x0b, 0xf1, 0x2f, 0xaf, 0x3b, 0x9d, 0x64, 0x94, 0xa3, 0x79, 0xaa, 0xcb, 0x1b, 0x66, 0xd0, 0x7c, 0xbc, 0xeb, 0xbf, 0x77, 0xa6, 0xe2, 0x9a, 0xef, 0x22, 0xf4, 0xba, 0xa3, 0xdf, 0x40, 0xd2, 0x70, 0xb4, 0x57, 0xdd, 0xe6, 0x4f, 0x00, 0xb5, 0x37, 0x59, 0xae, 0x57, 0x81, 0x1b, 0x64, 0xe0, 0x40, 0xcb, 0xd4, 0x2e, 0xa9, 0x0f, 0x4e, 0x28, 0x08, 0xbc, 0x81, 0xdf, 0xd6, 0x63, 0xb2, 0x85, 0x84, 0xcd, 0xb8, 0x19, 0x9d, 0xa9, 0x6d, 0x3e, 0x03, 0xd0, 0x3f, 0xb4, 0x13, 0x3e, 0x2f }; /* K = 7d1b5d39e51af0c22a56bc57ba6bf8bb6de18f2c256bb2d6fea684add38b1f6f */ static const uint8_t ac_dsa_vect289_out[] = { /* R */ 0x66, 0xf7, 0x29, 0x71, 0x64, 0x56, 0xa2, 0x78, 0x1b, 0xdb, 0x85, 0x78, 0xfa, 0x18, 0xd1, 0xe6, 0x4a, 0xf0, 0xed, 0xf8, 0xec, 0x1d, 0xee, 0x0a, 0x50, 0xd2, 0x59, 0x81, 0x91, 0x2f, 0xc4, 0x5a, /* S */ 0x8c, 0x3c, 0xcc, 0xfe, 0x6f, 0x0c, 0xfd, 0xc0, 0xac, 0x3a, 0x54, 0x2c, 0x8e, 0x8c, 0x85, 0x21, 0x0b, 0xbd, 0x7f, 0x95, 0x13, 0x4c, 0x8f, 0x03, 0x5d, 0x1c, 0xe1, 0x6f, 0x44, 0xab, 0x7a, 0x06 }; #define ac_dsa_vect290_prime ac_dsa_vect286_prime #define ac_dsa_vect290_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect290_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect290_ptx[] = { /* Msg */ 0x80, 0x86, 0x03, 0xf7, 0xf8, 0x43, 0x94, 0x41, 0x27, 0x79, 0x13, 0xb2, 0x1b, 0xef, 0x4e, 0x01, 0xc8, 0x9e, 0x41, 0x13, 0xe0, 0x7c, 0xac, 0xc3, 0x3f, 0x65, 0xac, 0x98, 0x49, 0xdb, 0x1a, 0xd1, 0xa1, 0xcb, 0x7d, 0xd2, 0xfe, 0xcd, 0x88, 0xee, 0x41, 0x39, 0xb1, 0x63, 0x83, 0x55, 0xc6, 0x23, 0x82, 0x13, 0x09, 0xf3, 0x26, 0xc1, 0x6b, 0xc6, 0x58, 0xbb, 0x48, 0x21, 0x51, 0x82, 0x38, 0x98, 0x2e, 0x52, 0x51, 0xf7, 0xcd, 0x37, 0x80, 0x72, 0x92, 0x15, 0x3d, 0x2b, 0x07, 0xdd, 0xdc, 0x06, 0x6e, 0x00, 0x3c, 0x60, 0x69, 0xc3, 0x71, 0x15, 0x5d, 0x2d, 0x19, 0x1f, 0x15, 0x11, 0x1f, 0x20, 0x89, 0xce, 0x42, 0x3f, 0x5c, 0x2a, 0x1f, 0x85, 0x34, 0xe3, 0x01, 0x31, 0x3c, 0x69, 0x62, 0x3f, 0x62, 0xba, 0x63, 0x5a, 0xdc, 0xe8, 0x55, 0x17, 0x33, 0xa8, 0x2a, 0x8f, 0xac, 0x1a, 0x66, 0xb1 }; static const uint8_t ac_dsa_vect290_priv_val[] = { /* X */ 0x94, 0x64, 0xce, 0x02, 0x94, 0x52, 0xe8, 0x60, 0x22, 0x14, 0xc5, 0x23, 0x6d, 0x96, 0x37, 0xce, 0x7e, 0x59, 0xf9, 0x25, 0x36, 0xa0, 0x7a, 0xc5, 0xba, 0x30, 0xf6, 0x39, 0xe0, 0x98, 0x14, 0xd4 }; static const uint8_t ac_dsa_vect290_pub_val[] = { /* Y */ 0x38, 0x96, 0x72, 0xec, 0x6d, 0xe0, 0xb8, 0x66, 0x55, 0xcb, 0x10, 0xf1, 0x19, 0x9f, 0x85, 0x70, 0x13, 0xb6, 0x32, 0x0d, 0x52, 0xc8, 0x72, 0x8f, 0xbb, 0xb5, 0x36, 0x0a, 0x97, 0x01, 0xb1, 0xd6, 0xca, 0x4f, 0x9e, 0xec, 0xb8, 0x48, 0x7f, 0xb8, 0x79, 0x69, 0x0f, 0x85, 0x43, 0x0c, 0x58, 0x2d, 0x3d, 0x91, 0xef, 0x18, 0x4c, 0x82, 0x47, 0xd1, 0x62, 0xb9, 0x4d, 0x6d, 0xfd, 0xfe, 0x7c, 0x4a, 0xe8, 0x67, 0xac, 0x16, 0x72, 0x82, 0x79, 0x70, 0x41, 0x5a, 0xa6, 0x7a, 0x14, 0x06, 0xac, 0x1a, 0x6e, 0x2c, 0x6c, 0x13, 0x16, 0x77, 0x19, 0xe1, 0xd1, 0xa5, 0x36, 0xd1, 0x00, 0x78, 0x42, 0x7c, 0x21, 0x1c, 0xf6, 0x82, 0x05, 0x1a, 0x75, 0xee, 0x83, 0x22, 0xc1, 0x40, 0x8b, 0x89, 0xd9, 0x63, 0xbd, 0x8e, 0x85, 0xf9, 0xef, 0xf7, 0xbb, 0x8c, 0xe0, 0x5c, 0xa4, 0x22, 0x25, 0xb4, 0xbd, 0xfe, 0xad, 0x6b, 0x89, 0x7b, 0x0f, 0xea, 0xb7, 0x6c, 0x22, 0x72, 0xb4, 0x87, 0xd2, 0x7d, 0x4e, 0x8d, 0xcd, 0xe0, 0xf1, 0x9e, 0x46, 0x15, 0xf7, 0xe1, 0x11, 0x45, 0x41, 0xf6, 0x1d, 0x43, 0x53, 0x3c, 0xe7, 0x88, 0xcc, 0x45, 0x05, 0x60, 0x0b, 0x83, 0x26, 0x6b, 0x1b, 0xea, 0x66, 0x59, 0x12, 0x19, 0x6c, 0x2c, 0x84, 0xc3, 0x6a, 0xa9, 0x3b, 0xaf, 0x5b, 0x74, 0x64, 0xa6, 0xdd, 0xf5, 0x47, 0x18, 0x3e, 0x2c, 0xd0, 0x58, 0xbb, 0x50, 0xa1, 0x27, 0x65, 0x53, 0x6f, 0x0a, 0x4d, 0x35, 0x24, 0xaf, 0x4f, 0x31, 0xac, 0xc6, 0x09, 0xfc, 0x44, 0x7e, 0x17, 0x29, 0xaa, 0xb9, 0x7b, 0x5a, 0x36, 0xb0, 0x17, 0x64, 0xb8, 0x4b, 0xc5, 0xf7, 0x7f, 0x6c, 0xc5, 0x84, 0x86, 0x6d, 0x1a, 0x6c, 0xfb, 0x3a, 0xa8, 0x43, 0x78, 0x95, 0xf7, 0x77, 0xf2, 0xdc, 0x68, 0x97, 0x49, 0x9f, 0x6c, 0x5f, 0x02, 0xfa, 0x1e, 0x6c, 0x1e, 0xad, 0x68, 0xf3, 0x38, 0x5b, 0x73, 0x33, 0x87, 0xc6, 0xb5, 0x8f, 0x2d, 0x11, 0x28, 0x4a, 0x63, 0xae, 0x7c, 0x7c, 0xfe, 0xe4, 0x2c, 0x3f, 0x44, 0xa3, 0xc9, 0x26, 0xad, 0xad, 0x81, 0x07, 0xcc, 0xa1, 0xc3, 0xf9, 0x44, 0xf9, 0xb9, 0xe2, 0x37, 0xd9, 0xab, 0x35, 0xc8, 0x13, 0x91, 0xd7, 0xc5, 0xf5, 0x29, 0x2d, 0x1a, 0x32, 0x2f, 0x7a, 0x12, 0xce, 0x10, 0x8a, 0x86, 0x23, 0x7b, 0xa4, 0xde, 0x3c, 0x61, 0x2f, 0xa7, 0x38, 0xf5, 0x31, 0x94, 0xba, 0x67, 0xbe, 0xd8, 0x43, 0xcd, 0x2d, 0x43, 0x30, 0xa5, 0xd1, 0x94, 0xd6, 0x7c, 0xf4, 0x5f, 0xa0, 0x51, 0x83, 0xe0, 0xcb, 0x46, 0xc2, 0xd2, 0x3a, 0x1b, 0xae, 0x76, 0x75, 0x5c, 0x30, 0x9f, 0xa1, 0xc3, 0x16, 0x05, 0xc8, 0x8a, 0x92, 0x14, 0x22, 0x7c, 0xe0, 0x2f, 0xe9, 0x15, 0xbc, 0xf0, 0xd3, 0x4b, 0xce, 0x8c, 0x8e }; /* K = 5c2bb856c4d87b27e01e2ac1ae6f2fc526ab8bb49a67eda5c1d8cd4253610df3 */ static const uint8_t ac_dsa_vect290_out[] = { /* R */ 0x98, 0xfe, 0x58, 0x7e, 0x43, 0xaa, 0x96, 0xf9, 0xa9, 0xbb, 0xe8, 0xaf, 0x40, 0x4a, 0x08, 0xb0, 0x23, 0x07, 0xb3, 0x60, 0x53, 0xdb, 0x87, 0xf6, 0xdb, 0x25, 0xa3, 0xaa, 0x36, 0xfc, 0xc3, 0xdb, /* S */ 0x5c, 0x94, 0xea, 0x70, 0xf9, 0x9f, 0x9f, 0xf1, 0x4b, 0x8e, 0x5d, 0xd4, 0xa6, 0x68, 0x83, 0x98, 0x26, 0x09, 0x07, 0x17, 0x6e, 0xa8, 0x0e, 0x19, 0xc3, 0x9b, 0x14, 0x62, 0x11, 0x49, 0xf0, 0xd6 }; #define ac_dsa_vect291_prime ac_dsa_vect286_prime #define ac_dsa_vect291_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect291_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect291_ptx[] = { /* Msg */ 0xce, 0x2a, 0xa3, 0xed, 0x12, 0xc1, 0xb8, 0x84, 0x3a, 0x3e, 0x11, 0xb0, 0x6b, 0x5f, 0x0e, 0x5e, 0x63, 0xfe, 0x8e, 0x19, 0xc1, 0xa3, 0x8a, 0xc4, 0x46, 0xa4, 0x8e, 0xec, 0xa8, 0xda, 0xc6, 0xd8, 0xb7, 0x69, 0xd7, 0x80, 0x94, 0x42, 0xc3, 0x2a, 0xc8, 0x2e, 0x93, 0xf6, 0x86, 0xec, 0x64, 0x34, 0x7e, 0x94, 0x44, 0xc3, 0xf4, 0x52, 0x82, 0x3c, 0x84, 0x0e, 0x8d, 0x0c, 0xd3, 0x34, 0xb4, 0x15, 0x20, 0x02, 0x14, 0x8d, 0xa1, 0x6a, 0xc8, 0x85, 0x9d, 0x18, 0x9d, 0x87, 0xd6, 0x71, 0x64, 0xc5, 0xdb, 0x16, 0x19, 0x5c, 0x08, 0x1d, 0x2e, 0xdd, 0x7d, 0x81, 0x57, 0xe2, 0xbf, 0x3b, 0x97, 0xa9, 0x0b, 0x4b, 0x47, 0x84, 0x32, 0x4e, 0xb8, 0xce, 0xac, 0x42, 0x61, 0x80, 0x9f, 0x67, 0x42, 0x56, 0xda, 0xf0, 0x07, 0xc4, 0xab, 0x1f, 0x22, 0x2f, 0x5f, 0xd2, 0x83, 0x98, 0xa5, 0xb8, 0x24, 0xde }; static const uint8_t ac_dsa_vect291_priv_val[] = { /* X */ 0xb8, 0x87, 0xc1, 0x46, 0x73, 0xcb, 0xc6, 0x3f, 0x04, 0xf0, 0x83, 0x9e, 0xa5, 0x6a, 0x76, 0x15, 0x40, 0x27, 0xd7, 0xee, 0xcf, 0x41, 0xd8, 0xd0, 0xb5, 0x3d, 0x48, 0x92, 0x35, 0x3a, 0xe9, 0xa4 }; static const uint8_t ac_dsa_vect291_pub_val[] = { /* Y */ 0x58, 0x4f, 0xe0, 0xeb, 0x31, 0x4a, 0xfb, 0x86, 0x6c, 0x04, 0x66, 0xc3, 0x98, 0x0a, 0x2d, 0xf5, 0x45, 0x98, 0xd8, 0xa7, 0x05, 0xdc, 0x2d, 0x1b, 0xf5, 0x10, 0x2e, 0xac, 0x86, 0x31, 0x27, 0x84, 0xee, 0xbd, 0x01, 0x9b, 0x81, 0xa7, 0x64, 0x2d, 0x4a, 0x3c, 0x4c, 0xc6, 0x5d, 0xbe, 0xdd, 0x81, 0x87, 0xe3, 0x59, 0x3f, 0x0a, 0x9b, 0xcc, 0x06, 0xea, 0x36, 0x70, 0x09, 0xb7, 0xeb, 0x4d, 0x29, 0xb0, 0x45, 0x00, 0x61, 0x37, 0x8e, 0xdb, 0xe1, 0x63, 0xef, 0xd3, 0xf3, 0x44, 0xbb, 0x36, 0x23, 0x4f, 0xc8, 0x6f, 0xe1, 0xc3, 0x2f, 0x2c, 0x99, 0x95, 0xa0, 0x7c, 0x6e, 0x95, 0x7d, 0x19, 0x5e, 0x81, 0x05, 0xf5, 0x17, 0x9c, 0x2b, 0xd9, 0x76, 0xb3, 0x12, 0x70, 0x67, 0xc8, 0x0c, 0xa9, 0x34, 0x56, 0xc1, 0x6b, 0x98, 0xdf, 0xcc, 0x7d, 0xe3, 0x55, 0x79, 0x0f, 0x0b, 0x15, 0xcf, 0xd2, 0xff, 0x91, 0xdb, 0x09, 0x34, 0x55, 0x32, 0xd4, 0x60, 0x96, 0xc0, 0x6b, 0x40, 0xa2, 0x30, 0x46, 0x81, 0xd6, 0x28, 0x57, 0x67, 0x5a, 0xc5, 0x0e, 0x22, 0xc7, 0xd1, 0xab, 0x47, 0x58, 0x92, 0x35, 0x41, 0x9c, 0xbe, 0xdd, 0x4b, 0x7d, 0x24, 0xb9, 0x05, 0x31, 0xe5, 0xbf, 0xd8, 0x53, 0xe8, 0x8a, 0x28, 0x83, 0x6a, 0xc4, 0x6b, 0x6d, 0xf2, 0x67, 0x60, 0x98, 0x5b, 0x96, 0x2c, 0x6a, 0x24, 0x45, 0x80, 0x98, 0x66, 0xb4, 0x61, 0x26, 0x21, 0x2a, 0xa2, 0x63, 0xab, 0x2a, 0x46, 0x03, 0xff, 0x41, 0xa8, 0x52, 0xc7, 0x98, 0x8c, 0x2d, 0x43, 0x86, 0x24, 0x16, 0x55, 0xa7, 0x22, 0x2f, 0xa4, 0xe9, 0xf6, 0xea, 0xc6, 0xa1, 0x44, 0xa1, 0x6b, 0x05, 0x9e, 0xa2, 0x5b, 0x71, 0xa2, 0x13, 0x84, 0x91, 0xd5, 0x4e, 0xe9, 0x5a, 0x9d, 0x68, 0x19, 0x97, 0x7f, 0x90, 0xfe, 0x6a, 0x59, 0xe0, 0xca, 0xd8, 0x1b, 0x32, 0x9e, 0xba, 0x3e, 0x68, 0x27, 0x7d, 0xf0, 0x4f, 0x98, 0x28, 0xef, 0x6f, 0x08, 0x16, 0x10, 0xb4, 0x59, 0x5a, 0x92, 0x11, 0x3e, 0xc6, 0xd0, 0x69, 0xff, 0xe9, 0x71, 0x96, 0xd9, 0x56, 0x19, 0x1d, 0xaa, 0xbe, 0x98, 0x77, 0x37, 0x7a, 0xd0, 0x41, 0x6b, 0x0e, 0xe0, 0x65, 0x86, 0x63, 0x37, 0x7e, 0x07, 0xad, 0xb2, 0x46, 0x44, 0xe8, 0xa0, 0xe3, 0xce, 0x5f, 0xc1, 0x78, 0xf1, 0x52, 0xbe, 0x0c, 0xd9, 0xb0, 0x40, 0x71, 0x89, 0x04, 0x27, 0xc6, 0xb0, 0x01, 0xd5, 0x92, 0x62, 0xf3, 0x8f, 0xe8, 0x97, 0xce, 0x32, 0x04, 0x0d, 0xaa, 0x78, 0x07, 0x82, 0x1c, 0x40, 0xac, 0x8c, 0x63, 0x50, 0x5b, 0xed, 0x0a, 0xf0, 0x70, 0x44, 0x33, 0x37, 0xc9, 0xe9, 0xa6, 0x4e, 0x44, 0x20, 0x3c, 0x36, 0xa8, 0xca, 0x50, 0x64, 0xd8, 0x7a, 0xa0, 0xd3, 0xcd, 0x1d, 0x40, 0x3a, 0xa6, 0xa2, 0x4e, 0xcc }; /* K = 49548238215fed6525693bc3cca3872944a97790087fb35f329b206e6046b32a */ static const uint8_t ac_dsa_vect291_out[] = { /* R */ 0x54, 0xc9, 0x9b, 0x21, 0xf2, 0x8f, 0xee, 0xe2, 0x7f, 0x0e, 0x99, 0x9a, 0xac, 0x6b, 0x49, 0xb6, 0xb0, 0x76, 0x33, 0xe1, 0xdb, 0x18, 0xa4, 0x59, 0x52, 0xfc, 0xf7, 0xe7, 0x3b, 0x16, 0x6b, 0xdb, /* S */ 0x7a, 0x18, 0x58, 0x8e, 0xa1, 0x45, 0x6f, 0x67, 0x56, 0x2d, 0x67, 0x78, 0x78, 0x34, 0x6f, 0xb3, 0x4b, 0x68, 0x4b, 0x9a, 0x8a, 0x61, 0xa7, 0x21, 0xb3, 0xdb, 0x0e, 0x95, 0x69, 0x5a, 0xb4, 0x3a }; #define ac_dsa_vect292_prime ac_dsa_vect286_prime #define ac_dsa_vect292_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect292_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect292_ptx[] = { /* Msg */ 0x17, 0xb9, 0x25, 0xe2, 0xa1, 0xa5, 0x1c, 0x20, 0x36, 0xe2, 0x25, 0x71, 0x5f, 0x2f, 0x77, 0x1d, 0x8f, 0x0a, 0x6d, 0x98, 0xc7, 0xed, 0x9c, 0xac, 0xf5, 0xaa, 0x4c, 0xd3, 0x0a, 0xb1, 0x6a, 0xfb, 0x94, 0xe2, 0x1a, 0x7c, 0x95, 0x3e, 0x01, 0xca, 0x21, 0x1c, 0x28, 0x78, 0x2a, 0x06, 0x07, 0x3f, 0xda, 0xd2, 0x77, 0x13, 0xaa, 0x8c, 0x26, 0xae, 0x9e, 0xc4, 0x49, 0xaa, 0xaa, 0x8c, 0xcf, 0xda, 0x8c, 0x94, 0x71, 0x72, 0xde, 0x94, 0xb3, 0xf2, 0x0b, 0x54, 0xaf, 0x98, 0xdf, 0x15, 0x2d, 0x5d, 0x3a, 0x63, 0x6c, 0x73, 0x6f, 0xf0, 0x1b, 0xfa, 0x69, 0x9d, 0x62, 0x14, 0x00, 0x2d, 0xc7, 0x6d, 0xbb, 0x3f, 0x38, 0x60, 0xd9, 0x4e, 0x0e, 0x34, 0xed, 0xab, 0xa5, 0xf2, 0xbf, 0xd6, 0xb2, 0xbf, 0x66, 0x00, 0x86, 0xbe, 0x87, 0x64, 0x51, 0xa5, 0x0f, 0x6a, 0x2d, 0xc7, 0xc2, 0xb0, 0x98, 0xb7 }; static const uint8_t ac_dsa_vect292_priv_val[] = { /* X */ 0x06, 0x84, 0xa8, 0xfa, 0xd5, 0x51, 0xc8, 0xd0, 0x8b, 0xeb, 0x05, 0x03, 0x31, 0x85, 0xe3, 0xb4, 0xb6, 0xb6, 0xf6, 0xf4, 0x92, 0x0e, 0xf9, 0x98, 0x2d, 0x72, 0xd0, 0xa9, 0xc7, 0x54, 0x98, 0x55 }; static const uint8_t ac_dsa_vect292_pub_val[] = { /* Y */ 0x42, 0xa9, 0x3b, 0xf4, 0x4e, 0xc7, 0xd2, 0xfb, 0xd6, 0x51, 0xcc, 0x1d, 0x1a, 0xc3, 0x91, 0xd6, 0x3c, 0xab, 0x00, 0x97, 0x1a, 0x7f, 0xf7, 0xa5, 0x61, 0x66, 0x76, 0x8b, 0x22, 0xe6, 0x11, 0xdc, 0x4d, 0x72, 0x9f, 0xaf, 0x8c, 0x94, 0xe7, 0xed, 0x4d, 0x6f, 0x82, 0xb7, 0x02, 0x0b, 0x7b, 0x4d, 0x2f, 0xb3, 0x59, 0x1c, 0xf2, 0x29, 0x5c, 0xc6, 0xe1, 0xb4, 0xbe, 0x2c, 0x25, 0x6c, 0x2f, 0xdd, 0xa4, 0x3e, 0x00, 0x05, 0x11, 0x14, 0x64, 0x5d, 0xa9, 0x1c, 0xbe, 0xd5, 0xcc, 0x08, 0x70, 0x85, 0xf7, 0xce, 0xcd, 0x8b, 0xac, 0xe6, 0x78, 0x89, 0x10, 0x0b, 0xcc, 0xe7, 0x92, 0x82, 0x20, 0x26, 0x6f, 0xd3, 0xfa, 0xf2, 0xea, 0xd9, 0xc2, 0x1e, 0x42, 0x3c, 0x99, 0x48, 0xec, 0x70, 0xc2, 0xd3, 0x1b, 0x66, 0x8c, 0xdc, 0x36, 0x0d, 0xdc, 0xeb, 0xdf, 0x42, 0x97, 0x20, 0x60, 0x7f, 0x96, 0xd8, 0x51, 0x23, 0x55, 0x15, 0xd6, 0xdb, 0xdf, 0x16, 0x3f, 0x7e, 0xa5, 0xdd, 0xf3, 0x51, 0xba, 0xa7, 0x6f, 0x38, 0x66, 0x3f, 0xdb, 0xfb, 0xd5, 0x87, 0x1b, 0xb2, 0x15, 0x7d, 0xf0, 0xa4, 0x34, 0x20, 0x64, 0x8c, 0x10, 0xe4, 0x82, 0x7f, 0x54, 0x06, 0x56, 0x14, 0x62, 0x3e, 0xd3, 0xab, 0xad, 0x10, 0xd3, 0x17, 0xbe, 0x9d, 0x49, 0xa4, 0xc6, 0x65, 0x64, 0xf2, 0x0d, 0xca, 0xc1, 0x76, 0xb6, 0x60, 0x5a, 0x2e, 0x3c, 0x3c, 0x01, 0xc3, 0x62, 0x22, 0x0f, 0x35, 0x2e, 0x47, 0x74, 0x19, 0xf2, 0xb4, 0xb2, 0x38, 0xaf, 0xfb, 0xc3, 0x92, 0x0e, 0x5b, 0xb5, 0x7c, 0xeb, 0xb9, 0xa7, 0x47, 0x46, 0xd6, 0x2c, 0xdd, 0x07, 0x0f, 0x4a, 0x13, 0xaf, 0x00, 0x1d, 0x26, 0x2d, 0xef, 0x01, 0x4f, 0x29, 0xb7, 0xf7, 0x54, 0xfa, 0xc8, 0x4e, 0x02, 0xd2, 0x92, 0x85, 0xb7, 0x3b, 0xb2, 0x0a, 0xc0, 0xc8, 0x62, 0x41, 0x23, 0xa5, 0x77, 0xbe, 0x8d, 0x6a, 0x6b, 0x97, 0x39, 0x18, 0x5e, 0x44, 0x58, 0x09, 0x0d, 0xdb, 0x42, 0xb0, 0x05, 0xea, 0x4f, 0xa8, 0xb5, 0x10, 0x07, 0xbd, 0x9c, 0xa5, 0xb4, 0xcf, 0x2a, 0x3d, 0xca, 0x44, 0x6a, 0x87, 0xec, 0x83, 0xc9, 0x54, 0x8d, 0xab, 0x46, 0xcf, 0x3d, 0xaf, 0x86, 0xdb, 0x3b, 0xc6, 0x9a, 0x99, 0xba, 0xed, 0x45, 0x9d, 0x6a, 0x19, 0x7f, 0x9b, 0xf5, 0x03, 0x2c, 0x1d, 0xc3, 0xa8, 0x77, 0xdd, 0x7e, 0x5c, 0x11, 0x61, 0x12, 0x4a, 0x6d, 0x70, 0x13, 0x24, 0xe9, 0xa9, 0x71, 0x2b, 0x82, 0x4a, 0x4f, 0xc3, 0xb1, 0xb3, 0x53, 0x25, 0x9a, 0xf2, 0x25, 0x81, 0x3c, 0x27, 0xe8, 0x20, 0xb0, 0xba, 0x72, 0xfb, 0x4e, 0x78, 0xf5, 0xc7, 0x86, 0x73, 0x92, 0x4e, 0x7f, 0xa2, 0xf4, 0x86, 0x03, 0x02, 0x84, 0xf2, 0x6c, 0xb6, 0xfa, 0x31, 0xda, 0x56, 0xf4, 0x9d, 0x3f }; /* K = 4a258c125db1f7b775432b53c7a0ff47c00bf7af27abec7fcd42a2916e95e26d */ static const uint8_t ac_dsa_vect292_out[] = { /* R */ 0x72, 0x6e, 0x4d, 0x3b, 0xaf, 0x00, 0xb2, 0x59, 0xf4, 0xbd, 0xca, 0x8b, 0x0a, 0x5e, 0x1c, 0xbf, 0xd3, 0x78, 0x27, 0xc4, 0x83, 0x73, 0xef, 0x50, 0x29, 0xf7, 0x60, 0x1a, 0x77, 0x69, 0x47, 0x8c, /* S */ 0x90, 0x30, 0x79, 0x43, 0x9e, 0xbd, 0xe1, 0xf7, 0x66, 0xd1, 0xa8, 0xff, 0x33, 0xe0, 0xf7, 0x78, 0xd7, 0x7b, 0x5e, 0x8b, 0x7b, 0x0d, 0x68, 0x74, 0x43, 0xc2, 0x71, 0xe8, 0xa6, 0x3b, 0x59, 0x75 }; #define ac_dsa_vect293_prime ac_dsa_vect286_prime #define ac_dsa_vect293_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect293_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect293_ptx[] = { /* Msg */ 0x1c, 0x11, 0x69, 0xf0, 0xe7, 0x90, 0x05, 0x3c, 0xd7, 0xdf, 0x78, 0x0b, 0x5c, 0x83, 0x2c, 0x64, 0x14, 0x76, 0x94, 0xb4, 0xa6, 0x44, 0x8b, 0xa1, 0x4a, 0x42, 0x6d, 0x9d, 0xef, 0x7d, 0xdc, 0x78, 0xe3, 0xed, 0x36, 0xa1, 0x2d, 0xa8, 0x1c, 0xf9, 0xc3, 0xf2, 0x45, 0xd6, 0x4c, 0x85, 0x9b, 0x6b, 0x4d, 0x81, 0x21, 0xd1, 0x12, 0x85, 0x19, 0x74, 0xdf, 0x17, 0x8d, 0xef, 0xc9, 0x77, 0xdb, 0x69, 0x12, 0x34, 0xd1, 0x42, 0xdf, 0xf9, 0x9b, 0xea, 0x19, 0x57, 0x89, 0x1b, 0x5d, 0x6f, 0xe8, 0xa7, 0x87, 0xe9, 0x63, 0x69, 0xd9, 0x3c, 0x24, 0x68, 0x2d, 0xeb, 0xd1, 0xcf, 0x3f, 0xdb, 0x64, 0x37, 0x9b, 0x8c, 0x1b, 0x3b, 0x73, 0xe1, 0xbc, 0x24, 0x67, 0xdc, 0xb0, 0x8b, 0x86, 0xcb, 0xd4, 0x94, 0xc0, 0x14, 0x77, 0xbe, 0x24, 0xd7, 0x90, 0x0f, 0x5a, 0x57, 0x89, 0x30, 0xf4, 0xbd, 0xdc, 0xb6 }; static const uint8_t ac_dsa_vect293_priv_val[] = { /* X */ 0x3f, 0xa4, 0x47, 0x78, 0xb4, 0x14, 0xff, 0x27, 0x43, 0x6e, 0x27, 0x6c, 0xa4, 0x90, 0x45, 0x46, 0xd3, 0x54, 0x2d, 0x12, 0x8f, 0x73, 0xc4, 0x46, 0x3c, 0x69, 0xff, 0x9c, 0xea, 0x2b, 0x7a, 0x41 }; static const uint8_t ac_dsa_vect293_pub_val[] = { /* Y */ 0x7f, 0xca, 0x22, 0x68, 0xfb, 0xa3, 0x3b, 0xf9, 0x4e, 0x76, 0x41, 0x6a, 0x9e, 0x38, 0x69, 0xf8, 0xa9, 0x0c, 0x3b, 0x0d, 0x2d, 0x37, 0xaa, 0xce, 0xcd, 0x3f, 0x67, 0x85, 0xb9, 0xa9, 0x5a, 0xee, 0xfe, 0x93, 0x24, 0xc3, 0xab, 0x09, 0xce, 0x61, 0xff, 0xde, 0x37, 0xb5, 0x0f, 0x82, 0xb6, 0x99, 0x41, 0x3f, 0x3b, 0x54, 0xf2, 0x4d, 0x6c, 0x52, 0xec, 0xa6, 0x23, 0x25, 0x02, 0x95, 0x23, 0xde, 0xb0, 0x5d, 0xb1, 0x38, 0x77, 0x84, 0x47, 0xbc, 0x3d, 0x0d, 0x05, 0xaf, 0xf7, 0xd8, 0x5b, 0x55, 0x25, 0xf2, 0xb8, 0x63, 0xd2, 0x64, 0x86, 0xe8, 0x4c, 0xde, 0x13, 0xe2, 0xe2, 0x11, 0x7d, 0x3f, 0xa3, 0x8a, 0x38, 0xd1, 0x07, 0x3a, 0xaa, 0x79, 0x4e, 0xd8, 0xea, 0xa7, 0xb3, 0xd1, 0xda, 0xa4, 0xac, 0x3e, 0x80, 0x8c, 0x37, 0x38, 0xa9, 0xcb, 0xef, 0x35, 0x46, 0xcd, 0x79, 0xec, 0xcb, 0x4f, 0xaa, 0x28, 0xb5, 0x0f, 0xce, 0x57, 0xcd, 0xc2, 0x40, 0x15, 0xfe, 0xc3, 0x90, 0xf0, 0xe7, 0xa7, 0xdc, 0x9f, 0x9c, 0x47, 0x1d, 0x22, 0xb3, 0x0c, 0x3e, 0x41, 0x74, 0x35, 0x8f, 0x1a, 0xd0, 0x73, 0x4c, 0xf7, 0x9a, 0x09, 0xa6, 0x39, 0xbd, 0xf3, 0xf3, 0xea, 0xbd, 0xa2, 0xb4, 0x7b, 0x81, 0xf9, 0x2e, 0x2a, 0x4f, 0x90, 0x04, 0xdd, 0x64, 0x13, 0x70, 0x33, 0x8c, 0x02, 0x02, 0x9b, 0xbf, 0x49, 0x71, 0xaa, 0x67, 0x48, 0x3e, 0xea, 0x7a, 0x4b, 0xf7, 0xdf, 0xf3, 0x88, 0x9f, 0x84, 0xfa, 0xa5, 0x76, 0x56, 0x17, 0xcc, 0xab, 0x37, 0xd1, 0x90, 0xa9, 0x4c, 0x57, 0xf9, 0x9d, 0x79, 0x28, 0x07, 0xa6, 0x96, 0x5e, 0x21, 0x13, 0x58, 0x6c, 0x6c, 0x5d, 0x1a, 0x81, 0xab, 0xfd, 0x37, 0x2e, 0x1c, 0x79, 0x54, 0xe2, 0xe0, 0x90, 0x64, 0xdf, 0x4d, 0x2d, 0x82, 0x88, 0xf5, 0xcd, 0xd8, 0x10, 0x6e, 0xd8, 0x4f, 0xfa, 0x79, 0x88, 0x19, 0xa0, 0x9a, 0x73, 0x2b, 0xc2, 0x04, 0xa8, 0x12, 0xc0, 0x35, 0x2e, 0x4e, 0x39, 0xd2, 0xce, 0xb8, 0x8f, 0x8e, 0x7d, 0x36, 0x24, 0xa5, 0xa5, 0xf3, 0xdc, 0x56, 0xea, 0x0f, 0x9c, 0x52, 0x90, 0x78, 0x8e, 0x12, 0xdc, 0x46, 0x31, 0x61, 0x60, 0x1f, 0xf3, 0xab, 0x68, 0x1b, 0xd0, 0x40, 0x3e, 0xe0, 0x3a, 0xf4, 0x5d, 0x5e, 0x58, 0x6d, 0x84, 0xd9, 0xc9, 0x01, 0x98, 0x67, 0x18, 0x19, 0x3e, 0x66, 0x12, 0x56, 0xf4, 0x02, 0xde, 0x73, 0x5d, 0x2c, 0xa6, 0x96, 0xef, 0x6b, 0x59, 0x48, 0x68, 0x95, 0x0a, 0xe1, 0x73, 0xf2, 0x2d, 0x95, 0x85, 0x66, 0x56, 0xa9, 0xd0, 0x06, 0x10, 0xfe, 0x8c, 0x2b, 0xd7, 0x25, 0xae, 0x55, 0xd7, 0x91, 0x27, 0x7b, 0x13, 0x17, 0x08, 0x5b, 0x67, 0x18, 0x8d, 0xa0, 0x06, 0x45, 0xce, 0x91, 0xbb, 0xe6, 0x2e, 0x32, 0x43, 0x11 }; /* K = a05b9ca1c9532bc050cd0c1150c27bc192154cf64d59dc9a949906f1ded57e35 */ static const uint8_t ac_dsa_vect293_out[] = { /* R */ 0x10, 0x26, 0xec, 0xee, 0x0a, 0xc3, 0x1b, 0xdc, 0xdb, 0xd6, 0x10, 0x3b, 0x13, 0x43, 0xf8, 0x4b, 0x44, 0x1f, 0xc3, 0x26, 0xe1, 0xd8, 0x6a, 0xd0, 0x90, 0x3d, 0x0b, 0x17, 0xcf, 0xb2, 0xff, 0x9c, /* S */ 0xa5, 0xd3, 0xcb, 0x2e, 0x7c, 0x39, 0xd8, 0x76, 0x40, 0xc4, 0x54, 0x7a, 0xc6, 0xc3, 0x3a, 0xfc, 0xcb, 0xfc, 0x18, 0x20, 0x90, 0x5b, 0xa1, 0xe5, 0xbe, 0x5b, 0x26, 0x23, 0x13, 0x27, 0x7c, 0xb9 }; #define ac_dsa_vect294_prime ac_dsa_vect286_prime #define ac_dsa_vect294_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect294_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect294_ptx[] = { /* Msg */ 0x80, 0x5b, 0xaa, 0xbd, 0xd0, 0x18, 0xd9, 0xe5, 0xeb, 0xb4, 0xdc, 0x51, 0x43, 0x5b, 0xe6, 0x32, 0xd2, 0x38, 0x78, 0x69, 0x75, 0x6d, 0x74, 0x37, 0x88, 0x44, 0x27, 0x90, 0xd5, 0x5b, 0xb1, 0x83, 0xe2, 0x66, 0x55, 0xae, 0x3a, 0xac, 0x86, 0xdc, 0x16, 0xa4, 0x8d, 0xdd, 0x26, 0x8d, 0xd1, 0x5e, 0x18, 0xd8, 0x32, 0x0d, 0xf9, 0xa1, 0xa0, 0xa6, 0xcb, 0x2b, 0x49, 0xbc, 0x70, 0x1d, 0x7a, 0x15, 0xe3, 0xfe, 0x8d, 0xdd, 0x58, 0x4a, 0x75, 0xc8, 0xc9, 0xaa, 0xae, 0xcd, 0x1e, 0xfe, 0x17, 0x32, 0x4d, 0x62, 0x61, 0x88, 0x1f, 0x3d, 0x34, 0x68, 0x5b, 0x04, 0xf6, 0x2e, 0x96, 0x85, 0x05, 0x96, 0x6c, 0x9a, 0x5f, 0xeb, 0x0c, 0x39, 0xb5, 0x09, 0x5e, 0x55, 0x68, 0xe4, 0x0f, 0x20, 0xaa, 0x21, 0xcb, 0x25, 0x05, 0x35, 0x6d, 0xc9, 0x04, 0x9c, 0xe5, 0x61, 0x82, 0xd9, 0x4a, 0x2d, 0x94, 0xa9 }; static const uint8_t ac_dsa_vect294_priv_val[] = { /* X */ 0x77, 0x0b, 0x99, 0x93, 0x5d, 0x39, 0x3e, 0xb9, 0x0b, 0x58, 0x3d, 0x12, 0x51, 0x69, 0x60, 0x07, 0xcb, 0xeb, 0x1b, 0x35, 0xe6, 0xc3, 0xf4, 0xf9, 0xbc, 0xb6, 0x28, 0x79, 0x07, 0x0e, 0x09, 0x40 }; static const uint8_t ac_dsa_vect294_pub_val[] = { /* Y */ 0x43, 0x4d, 0x06, 0x12, 0xb2, 0xa8, 0x33, 0x2b, 0x0a, 0xb1, 0x56, 0x14, 0xe3, 0xee, 0x9f, 0xa2, 0x45, 0x13, 0x17, 0x12, 0xfb, 0x2b, 0xa8, 0x4f, 0x71, 0x39, 0x6f, 0xff, 0x94, 0x88, 0xdc, 0xa3, 0x40, 0xa3, 0x7e, 0x82, 0x0f, 0x44, 0xc1, 0x3a, 0xa8, 0x7f, 0xc9, 0xdf, 0x0b, 0x7a, 0xab, 0xea, 0xe2, 0xed, 0x85, 0xa9, 0x62, 0x2b, 0x8d, 0xef, 0xad, 0x47, 0x4a, 0xc3, 0x62, 0xa7, 0x03, 0x9a, 0xbd, 0xe3, 0x3d, 0x1d, 0xf7, 0x32, 0xa0, 0x52, 0x44, 0x6a, 0xff, 0x78, 0x57, 0xbc, 0x24, 0xd8, 0xf6, 0x1d, 0x25, 0x80, 0x15, 0xed, 0x2a, 0x30, 0x60, 0xa8, 0xbf, 0x9d, 0x44, 0x7e, 0x7d, 0x83, 0xd7, 0xb4, 0x97, 0xa8, 0xe6, 0x54, 0x73, 0x19, 0x69, 0xe4, 0x37, 0xb3, 0xf4, 0x6f, 0x83, 0xeb, 0x58, 0xf7, 0x88, 0x4f, 0xf2, 0xa2, 0x39, 0x0f, 0x5d, 0x82, 0x1e, 0xca, 0xa7, 0xfd, 0x09, 0xa1, 0x46, 0xc5, 0x5f, 0xc1, 0x18, 0x00, 0x73, 0xcc, 0x5a, 0xaa, 0x60, 0x7c, 0xab, 0xb9, 0x44, 0xf6, 0x07, 0x8a, 0x44, 0x86, 0xcf, 0x20, 0x6d, 0xdc, 0x56, 0x35, 0x24, 0x2d, 0xef, 0x2d, 0x3e, 0x2e, 0xdc, 0xbc, 0x02, 0x6b, 0xb8, 0x4e, 0x84, 0x95, 0x18, 0xf1, 0x97, 0x39, 0x9c, 0x22, 0xa9, 0x00, 0x9d, 0xde, 0x9a, 0xfc, 0xd8, 0x76, 0x9b, 0x24, 0x1c, 0x75, 0xd4, 0xcc, 0xce, 0x7f, 0x93, 0x90, 0x0b, 0x5f, 0x48, 0x83, 0x33, 0xdf, 0x47, 0xc0, 0x26, 0xc4, 0xf2, 0xb2, 0x76, 0x7e, 0x70, 0xd2, 0xd9, 0xdd, 0xe7, 0x84, 0x05, 0xe2, 0x26, 0xc9, 0x95, 0x2f, 0x6d, 0xb1, 0xa2, 0xe5, 0x58, 0x29, 0xbc, 0x8a, 0x76, 0xc7, 0xde, 0x5c, 0x2b, 0x58, 0x8f, 0x3f, 0x3e, 0x93, 0xce, 0x72, 0xfa, 0xda, 0xba, 0xcb, 0x75, 0xc7, 0xc1, 0x46, 0x69, 0x70, 0x1e, 0x0a, 0x2b, 0xa1, 0x27, 0xba, 0xc5, 0x68, 0x63, 0xc8, 0xc4, 0xe7, 0x20, 0x5c, 0xc0, 0xa7, 0x3c, 0x42, 0x9a, 0x80, 0x1e, 0x97, 0x97, 0xda, 0x4f, 0x26, 0xe8, 0x48, 0x98, 0x23, 0x06, 0xcc, 0x3c, 0x34, 0x39, 0xf9, 0xe3, 0x94, 0xdd, 0xc8, 0x0b, 0x0f, 0x13, 0xe0, 0xd5, 0x28, 0x19, 0x06, 0x38, 0xd8, 0xb9, 0x6b, 0xba, 0x3a, 0xf8, 0x89, 0xde, 0x37, 0x3b, 0x35, 0x49, 0xfc, 0x90, 0xa6, 0x82, 0x29, 0x64, 0xc2, 0x21, 0x71, 0xe7, 0x60, 0x1f, 0xde, 0xfb, 0xe5, 0x70, 0x89, 0x88, 0xb8, 0x4f, 0x3e, 0xa5, 0x54, 0xd6, 0x21, 0x60, 0x0a, 0x87, 0x64, 0x15, 0xd5, 0xbc, 0x1e, 0x55, 0x7e, 0x94, 0x8c, 0xaa, 0xce, 0x56, 0x3b, 0x37, 0x02, 0xf0, 0x91, 0x5a, 0x90, 0xa1, 0x3a, 0xad, 0xa7, 0x77, 0x09, 0xee, 0xba, 0x8c, 0x50, 0xa8, 0x62, 0x93, 0x51, 0xa4, 0x78, 0x7d, 0x0d, 0x58, 0x80, 0x8f, 0xfb, 0x8b, 0x21, 0x7c, 0x1d, 0x16, 0x4f }; /* K = 424a43cfd90f7b84e9e375572f82ebce7ffb197bd3237a353bf15ddc1a17095f */ static const uint8_t ac_dsa_vect294_out[] = { /* R */ 0x2d, 0x63, 0xe6, 0xd2, 0x56, 0x85, 0x71, 0xac, 0xfe, 0x4a, 0x93, 0x15, 0x80, 0xa0, 0x4b, 0x97, 0x4c, 0x7a, 0xae, 0x4c, 0xa9, 0xaa, 0x96, 0x10, 0xd8, 0x7b, 0xe1, 0xa9, 0x1c, 0x65, 0x7c, 0x31, /* S */ 0x57, 0x4b, 0x10, 0xd1, 0x4d, 0xcb, 0x8f, 0x07, 0x94, 0x61, 0xb2, 0x9a, 0xe1, 0xb9, 0x1e, 0xd6, 0xc5, 0xef, 0x32, 0xf9, 0x3c, 0xba, 0xd3, 0x06, 0x69, 0x75, 0x52, 0xc1, 0x17, 0x48, 0xfe, 0x0c }; #define ac_dsa_vect295_prime ac_dsa_vect286_prime #define ac_dsa_vect295_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect295_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect295_ptx[] = { /* Msg */ 0xbe, 0x8c, 0xa5, 0xed, 0x4c, 0x22, 0xa0, 0x50, 0xd8, 0x30, 0x9c, 0x7a, 0x31, 0xac, 0xf6, 0x67, 0xf0, 0xc0, 0xfb, 0xaa, 0xdc, 0x64, 0xa3, 0x4d, 0x2b, 0x63, 0x07, 0x4a, 0x76, 0x3a, 0x2b, 0x8d, 0xb7, 0x3b, 0x24, 0xcd, 0xba, 0xad, 0x26, 0xcc, 0x6f, 0x2c, 0x3e, 0x90, 0xdf, 0x4b, 0x25, 0xbf, 0xa7, 0x24, 0xfc, 0xe5, 0x87, 0xfa, 0xa0, 0xfd, 0x65, 0xff, 0xb7, 0x19, 0xf0, 0xa0, 0x35, 0x16, 0x48, 0x23, 0x0d, 0x53, 0x54, 0xd7, 0x21, 0xd8, 0xfa, 0x6d, 0x0d, 0x68, 0x6c, 0x37, 0xf2, 0x57, 0xd7, 0xd9, 0xdb, 0xd1, 0x5f, 0x55, 0x5d, 0x50, 0x73, 0xf8, 0xbc, 0x71, 0xc9, 0x21, 0x39, 0xd1, 0xf6, 0x27, 0xd7, 0x43, 0xf7, 0xd6, 0x58, 0x6d, 0x51, 0x0d, 0x19, 0xd0, 0xd8, 0xa5, 0x55, 0xd0, 0xbf, 0x79, 0xec, 0x70, 0x59, 0x6e, 0x71, 0x21, 0x83, 0x88, 0x0c, 0x89, 0xca, 0xf6, 0x9d, 0x6f }; static const uint8_t ac_dsa_vect295_priv_val[] = { /* X */ 0x98, 0x86, 0x13, 0x8d, 0x83, 0x7d, 0x20, 0xe8, 0xc6, 0xbe, 0x85, 0x3c, 0xd7, 0xde, 0x1a, 0x66, 0xa2, 0x57, 0x48, 0xc7, 0xa3, 0x3f, 0xd5, 0x51, 0x21, 0xa2, 0x72, 0x37, 0x62, 0x3d, 0x68, 0xd6 }; static const uint8_t ac_dsa_vect295_pub_val[] = { /* Y */ 0xaf, 0xaf, 0xf7, 0xa4, 0xd4, 0x38, 0xb4, 0x64, 0xf2, 0x74, 0x15, 0xd2, 0xe0, 0x3e, 0xd9, 0xc4, 0x16, 0xdb, 0x2b, 0xeb, 0xfb, 0xe0, 0xab, 0x34, 0xf1, 0x4e, 0xe1, 0x06, 0x44, 0x88, 0x5b, 0x5a, 0x45, 0x88, 0x87, 0x71, 0x50, 0xf4, 0x63, 0x27, 0xc2, 0xc7, 0xa6, 0xf7, 0x12, 0x67, 0x0b, 0xfd, 0x62, 0x37, 0xa2, 0x94, 0x52, 0x49, 0x48, 0x59, 0x94, 0x8f, 0x5e, 0x37, 0xc0, 0xe5, 0x86, 0x65, 0x6b, 0x11, 0x9a, 0x0e, 0x01, 0xc8, 0x1a, 0xce, 0xe5, 0x7c, 0x17, 0x75, 0xa3, 0xa1, 0x46, 0xe8, 0xfb, 0xaf, 0xc9, 0x9c, 0xd2, 0x03, 0xfc, 0x98, 0x19, 0x56, 0x87, 0xfb, 0x94, 0xa8, 0x8a, 0x4f, 0x44, 0x28, 0x0b, 0x03, 0xf0, 0x89, 0x5e, 0x0e, 0xca, 0x84, 0xdb, 0x08, 0x7c, 0x1b, 0xf7, 0xc4, 0x84, 0x3c, 0x85, 0x59, 0x73, 0x68, 0xe8, 0x39, 0x84, 0x11, 0x31, 0xe0, 0x27, 0x10, 0x9d, 0xaa, 0x7b, 0x81, 0x72, 0xa2, 0x5e, 0x11, 0x35, 0x5f, 0xa9, 0xa9, 0x20, 0x5a, 0xc3, 0x24, 0x94, 0x1a, 0x9f, 0xe4, 0x92, 0xc4, 0x84, 0x21, 0xf0, 0x68, 0x1a, 0x47, 0xe2, 0x80, 0x80, 0x3e, 0x8b, 0xd9, 0x1b, 0x11, 0x3e, 0x0f, 0xa1, 0x59, 0x76, 0x07, 0x43, 0x0b, 0xcb, 0x0a, 0xd5, 0x0b, 0x94, 0x08, 0xde, 0x00, 0x66, 0xd6, 0xa2, 0x32, 0x4d, 0x09, 0xcf, 0x6e, 0x99, 0x13, 0x36, 0x54, 0xdd, 0x64, 0xe8, 0xc8, 0xf7, 0x0c, 0xd6, 0x44, 0x53, 0x43, 0x75, 0x8b, 0x5c, 0xd5, 0xa0, 0xe7, 0x7e, 0x2d, 0x3f, 0xa1, 0xcb, 0x3f, 0x7e, 0xfe, 0xd7, 0x61, 0x24, 0xb2, 0x88, 0x1d, 0xfd, 0x20, 0x28, 0xab, 0x59, 0x18, 0xc3, 0x89, 0xb9, 0xc3, 0x97, 0x82, 0x71, 0xdb, 0x54, 0xa5, 0x17, 0x15, 0x15, 0xab, 0x2e, 0x85, 0xee, 0xb1, 0x0a, 0xb3, 0x07, 0x13, 0x01, 0x59, 0xbc, 0xa5, 0xfe, 0x13, 0xcc, 0x4a, 0x95, 0x9e, 0x88, 0xe9, 0x26, 0x72, 0x21, 0xac, 0x8d, 0x14, 0xee, 0x69, 0x38, 0xe1, 0x49, 0xf5, 0x2e, 0xc5, 0x91, 0x25, 0xb4, 0x49, 0xcb, 0x55, 0xc5, 0xa0, 0x02, 0x9f, 0x01, 0x87, 0x70, 0xb3, 0x1f, 0x08, 0x44, 0x0c, 0xe6, 0x87, 0x6e, 0x66, 0x00, 0xa3, 0x24, 0x11, 0x72, 0x2f, 0x58, 0xe6, 0x26, 0x33, 0x39, 0xbd, 0x9d, 0x34, 0xe1, 0x7a, 0xa5, 0x74, 0xb9, 0x21, 0x22, 0x89, 0x26, 0xff, 0x66, 0x8c, 0xe9, 0x03, 0x62, 0xc4, 0x39, 0x1e, 0xcd, 0x0c, 0x03, 0x74, 0x54, 0xe1, 0x2f, 0xdf, 0x80, 0xc9, 0x6b, 0xb7, 0xa8, 0x40, 0xcd, 0x86, 0x6e, 0x85, 0x70, 0xbb, 0x7d, 0x65, 0x86, 0xfb, 0xe3, 0xd1, 0xea, 0xe5, 0x33, 0x29, 0x31, 0x19, 0x8b, 0xa1, 0xd5, 0xd9, 0x02, 0xd6, 0xb7, 0xa1, 0x22, 0xdf, 0xa7, 0x70, 0x18, 0x55, 0x3a, 0x2d, 0xd3, 0x68, 0x0a, 0x80, 0x9b, 0xb0, 0x60, 0x53 }; /* K = 1689eba0aac66b3d0cca9ae1911602f9638937b6be17c23a187be323d0dec7be */ static const uint8_t ac_dsa_vect295_out[] = { /* R */ 0x9c, 0x7d, 0x40, 0xe2, 0x14, 0x08, 0x2b, 0xd5, 0xe7, 0x1f, 0x3b, 0xf4, 0xbe, 0x99, 0x78, 0x93, 0x03, 0xf3, 0x8e, 0x85, 0x1a, 0x76, 0xf8, 0x8c, 0xb9, 0x0a, 0xff, 0x71, 0x30, 0x80, 0xc5, 0x87, /* S */ 0x24, 0xca, 0x23, 0xbe, 0x94, 0xc6, 0x24, 0xb9, 0xd7, 0x36, 0x32, 0x8b, 0x53, 0x78, 0x2b, 0x5f, 0xeb, 0x38, 0x4d, 0xc9, 0xfe, 0x63, 0x70, 0x01, 0x6c, 0xc3, 0xf9, 0x7d, 0x8f, 0x48, 0xb6, 0xd0 }; #define ac_dsa_vect296_prime ac_dsa_vect286_prime #define ac_dsa_vect296_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect296_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect296_ptx[] = { /* Msg */ 0x62, 0xf0, 0xcb, 0x1b, 0xb0, 0x7f, 0x64, 0x97, 0xa1, 0xdc, 0x7a, 0x66, 0x95, 0x57, 0x65, 0xa9, 0xcc, 0x40, 0x3b, 0xde, 0x03, 0xfe, 0xf4, 0xe1, 0x6b, 0x09, 0xd7, 0xec, 0x54, 0x5b, 0x4c, 0x75, 0xd0, 0x8b, 0x6e, 0x9c, 0x4c, 0x5a, 0xf7, 0x23, 0x25, 0x48, 0xd4, 0x54, 0x45, 0x63, 0x8d, 0x71, 0x94, 0xa1, 0x99, 0xef, 0x15, 0x34, 0xe8, 0x12, 0x41, 0xea, 0xa9, 0xc7, 0xe7, 0x67, 0xfd, 0x54, 0xe2, 0xca, 0xce, 0xea, 0x4d, 0x2f, 0x72, 0x15, 0xd3, 0x7b, 0xaa, 0xd6, 0xb0, 0x5e, 0x28, 0xea, 0x09, 0x34, 0x97, 0xe2, 0xe8, 0xe1, 0xdb, 0x6e, 0x41, 0xa5, 0xeb, 0x13, 0xff, 0xa4, 0xca, 0xa2, 0x71, 0x08, 0xf2, 0x26, 0x3a, 0x74, 0xcf, 0x54, 0xbd, 0x5b, 0x6a, 0x6b, 0x62, 0x28, 0x4b, 0xac, 0x99, 0xfd, 0x79, 0x77, 0xaa, 0xa8, 0xff, 0xff, 0x18, 0xfa, 0x8a, 0x70, 0xab, 0x0d, 0xeb, 0xdf }; static const uint8_t ac_dsa_vect296_priv_val[] = { /* X */ 0xba, 0xde, 0xce, 0x34, 0x25, 0x7d, 0xa3, 0xd7, 0xb8, 0x71, 0x3f, 0x8f, 0x0f, 0x9f, 0x01, 0x07, 0xb1, 0x90, 0x9c, 0x7f, 0x99, 0xa7, 0x65, 0xad, 0x84, 0x05, 0xd8, 0xc2, 0xa2, 0x03, 0x10, 0xee }; static const uint8_t ac_dsa_vect296_pub_val[] = { /* Y */ 0x73, 0x55, 0x4a, 0x69, 0xe1, 0xa0, 0x9f, 0x61, 0x91, 0xf0, 0xad, 0xed, 0x54, 0x2a, 0x07, 0x7e, 0xe8, 0xc8, 0x14, 0x26, 0x5d, 0x74, 0x5d, 0x9a, 0xe5, 0xc7, 0x92, 0xf4, 0x42, 0xc5, 0xfa, 0x47, 0xb3, 0x46, 0x43, 0xd3, 0xba, 0x1d, 0x51, 0x47, 0x16, 0x18, 0x98, 0xde, 0x51, 0x88, 0xa8, 0x07, 0x14, 0xee, 0x36, 0x51, 0x2a, 0x61, 0x8a, 0x33, 0xe4, 0x03, 0x00, 0xff, 0x11, 0x87, 0xe5, 0x53, 0xf5, 0x44, 0x33, 0xe1, 0x74, 0x66, 0xaf, 0x48, 0x64, 0x72, 0xbc, 0x07, 0x78, 0xaf, 0x55, 0xba, 0x73, 0x46, 0xc9, 0x61, 0xd7, 0xf1, 0x3a, 0xc6, 0xd8, 0xd6, 0xac, 0x9a, 0x42, 0x09, 0x2c, 0x01, 0x57, 0x9e, 0xe2, 0x17, 0x05, 0x90, 0xcb, 0xc3, 0xb4, 0x5e, 0xef, 0x79, 0x5b, 0x5d, 0x9e, 0x5d, 0x0a, 0x84, 0x49, 0x43, 0x9a, 0xb3, 0x07, 0xc1, 0x4c, 0x56, 0x74, 0xc4, 0xa7, 0xa3, 0xea, 0xf8, 0xb2, 0x40, 0xef, 0x36, 0xdd, 0x21, 0xf4, 0x3c, 0xce, 0xd5, 0x8c, 0x2d, 0xcf, 0x23, 0xc3, 0x14, 0x36, 0x4e, 0x8e, 0x31, 0x4e, 0x96, 0x71, 0xe8, 0x08, 0x13, 0xd1, 0x85, 0x80, 0x13, 0x58, 0xd5, 0xdf, 0x61, 0xd7, 0xe7, 0xec, 0x0d, 0xd6, 0x9e, 0x90, 0xc2, 0xcc, 0x75, 0xc1, 0xc3, 0x54, 0x3e, 0xfe, 0xca, 0x82, 0xb2, 0xec, 0x6e, 0xc5, 0x9e, 0x6c, 0x99, 0xbc, 0xd1, 0xa8, 0x63, 0x1c, 0x62, 0x28, 0xe2, 0x16, 0x88, 0x40, 0x82, 0xda, 0x11, 0x91, 0x25, 0xcb, 0x0a, 0x80, 0xc8, 0xfe, 0x34, 0x4a, 0xfe, 0x66, 0xe0, 0xf2, 0x06, 0x46, 0x43, 0x24, 0x65, 0xf3, 0xe0, 0x09, 0x6a, 0x17, 0x72, 0x5a, 0x88, 0x67, 0xb3, 0xbd, 0xba, 0x3c, 0x69, 0xa1, 0xaa, 0xcb, 0xb8, 0xd6, 0x47, 0x55, 0xb7, 0xf2, 0xa3, 0xdf, 0x0a, 0x49, 0xba, 0x0b, 0x21, 0x14, 0xe1, 0x12, 0xd4, 0xca, 0xe0, 0xad, 0x6d, 0x8d, 0x0f, 0xd6, 0x18, 0xe5, 0x4d, 0x53, 0xf0, 0x7b, 0xa1, 0x09, 0xb7, 0x5a, 0x54, 0xa9, 0x89, 0x61, 0x8b, 0x28, 0x63, 0xe4, 0x41, 0x5e, 0x17, 0x6e, 0x0b, 0xfd, 0x88, 0xdb, 0xf3, 0x65, 0x53, 0xca, 0x85, 0x3b, 0xb3, 0x63, 0x16, 0xc6, 0x6e, 0xb9, 0x3d, 0xa3, 0x4f, 0xf3, 0xae, 0x74, 0xcd, 0x5f, 0x18, 0x7f, 0x49, 0xbf, 0x38, 0xaf, 0x0f, 0x39, 0x3b, 0x2d, 0x7f, 0x85, 0x4d, 0xf1, 0x92, 0xad, 0xe2, 0xdf, 0x6b, 0x39, 0xa1, 0x76, 0xd2, 0x15, 0x2c, 0x91, 0x2b, 0xba, 0x24, 0x8d, 0x84, 0xa5, 0xb0, 0xaa, 0x40, 0x84, 0xa1, 0x8b, 0xb6, 0x4f, 0xd1, 0x36, 0x97, 0x3f, 0x73, 0xb4, 0x13, 0xd7, 0x7d, 0xb2, 0x75, 0xea, 0x5e, 0xce, 0x93, 0xce, 0x2f, 0xa0, 0x0d, 0x7c, 0x88, 0x87, 0xb7, 0xe5, 0x0b, 0x00, 0x64, 0x9d, 0x03, 0x53, 0xa7, 0xf5, 0x8c, 0xc6, 0x3f, 0x6b, 0x5f, 0xbd, 0xfc }; /* K = 2d468a99e315c158a1af18abd4d58872d6e281dcd4c9b0b43298eddf346496d7 */ static const uint8_t ac_dsa_vect296_out[] = { /* R */ 0x54, 0xff, 0x5d, 0x3d, 0xc8, 0x76, 0x78, 0x56, 0xa1, 0x0f, 0x54, 0x08, 0x88, 0x82, 0xe2, 0x8c, 0x11, 0x09, 0x80, 0xef, 0x9b, 0x20, 0x4e, 0xb5, 0xf1, 0x62, 0xdb, 0xef, 0x73, 0xa3, 0x7c, 0x73, /* S */ 0x57, 0xed, 0x07, 0x48, 0x42, 0x7c, 0x08, 0x9d, 0x63, 0x95, 0x52, 0x8b, 0x2b, 0x45, 0x55, 0xc0, 0x1b, 0x4c, 0x13, 0x41, 0xab, 0x5f, 0xb9, 0x9c, 0x64, 0xd1, 0xcc, 0x24, 0x7a, 0x41, 0xc3, 0xa8 }; #define ac_dsa_vect297_prime ac_dsa_vect286_prime #define ac_dsa_vect297_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect297_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect297_ptx[] = { /* Msg */ 0xba, 0xeb, 0x12, 0xa1, 0xeb, 0xd8, 0x05, 0x7a, 0x99, 0xa0, 0x13, 0x7e, 0xe6, 0x0f, 0x60, 0xee, 0xd1, 0x0d, 0x26, 0xf1, 0xea, 0xb2, 0x2a, 0xe2, 0xd9, 0xad, 0xbc, 0x3e, 0x5f, 0xfc, 0x32, 0x52, 0xab, 0xf6, 0x2b, 0x61, 0x47, 0x07, 0xad, 0x25, 0x46, 0x14, 0x1b, 0xed, 0x77, 0x9f, 0x0c, 0xfa, 0xd9, 0x54, 0x4a, 0x74, 0xe5, 0x62, 0xda, 0x54, 0x9e, 0x2f, 0x7b, 0x28, 0x6e, 0xfb, 0x61, 0x54, 0x49, 0xb0, 0x94, 0x6d, 0xc7, 0xc4, 0x98, 0xd8, 0xf1, 0x21, 0x50, 0xb2, 0xea, 0xcb, 0xd2, 0x71, 0x57, 0x96, 0x6f, 0x59, 0x2a, 0xd5, 0xf3, 0xe4, 0x3a, 0x24, 0xc6, 0x0b, 0x7e, 0x06, 0x63, 0x0b, 0x82, 0xa4, 0xfd, 0xb6, 0x99, 0x11, 0x9d, 0xbd, 0x87, 0x8b, 0x13, 0xa9, 0x8b, 0xf2, 0x2a, 0x7b, 0x3d, 0xc7, 0xef, 0xdd, 0x99, 0x2c, 0xe6, 0xb8, 0xa9, 0x50, 0xe6, 0x12, 0x99, 0xc5, 0x66, 0x3b }; static const uint8_t ac_dsa_vect297_priv_val[] = { /* X */ 0xbd, 0x30, 0x06, 0xcf, 0x5d, 0x3a, 0xc0, 0x4a, 0x8a, 0x51, 0x28, 0x14, 0x0d, 0xf6, 0x02, 0x5d, 0x99, 0x42, 0xd7, 0x85, 0x44, 0xe9, 0xb2, 0x7e, 0xfe, 0x28, 0xb2, 0xca, 0x1f, 0x79, 0xe3, 0x13 }; static const uint8_t ac_dsa_vect297_pub_val[] = { /* Y */ 0x00, 0x72, 0x8e, 0x23, 0xe7, 0x4b, 0xb8, 0x2d, 0xe0, 0xe1, 0x31, 0x5d, 0x58, 0x16, 0x4a, 0x5c, 0xec, 0xc8, 0x95, 0x1d, 0x89, 0xe8, 0x8d, 0xa7, 0x02, 0xf5, 0xb8, 0x78, 0x02, 0x0f, 0xd8, 0xd2, 0xa1, 0x79, 0x1b, 0x3e, 0x8a, 0xb7, 0x70, 0xe0, 0x84, 0xac, 0x23, 0x97, 0xd2, 0x97, 0x97, 0x1c, 0xa8, 0x70, 0x8a, 0x30, 0xa4, 0x09, 0x7d, 0x86, 0x74, 0x01, 0x53, 0xee, 0x2d, 0xb6, 0xab, 0x63, 0x43, 0xc5, 0xb6, 0xcc, 0x2c, 0x8a, 0x7f, 0xa5, 0x90, 0x82, 0xa8, 0xd6, 0x59, 0x93, 0x1c, 0xc4, 0x8a, 0x04, 0x33, 0xa0, 0x33, 0xdb, 0xb2, 0xff, 0xf3, 0xaa, 0x54, 0x56, 0x86, 0xf9, 0x22, 0xc7, 0x06, 0x3d, 0xa1, 0xd5, 0x2d, 0x96, 0x88, 0x14, 0x2e, 0xc6, 0x4a, 0x10, 0x02, 0x94, 0x8e, 0x5d, 0xa8, 0x91, 0x65, 0xd9, 0xdf, 0x8e, 0xed, 0x9a, 0xa4, 0x69, 0xb6, 0x1e, 0xe0, 0x21, 0x0b, 0x40, 0x33, 0x56, 0x23, 0x33, 0x09, 0x7b, 0xa8, 0x65, 0x99, 0x44, 0xe5, 0xf7, 0x92, 0x4e, 0x04, 0xa2, 0x1b, 0xc3, 0xed, 0xc6, 0xd5, 0x51, 0xe2, 0x02, 0xe4, 0xc5, 0x43, 0xe9, 0x75, 0x18, 0xf9, 0x1e, 0x0c, 0xab, 0x49, 0x11, 0x10, 0x29, 0xb2, 0x9c, 0x3a, 0xa1, 0xbe, 0xd5, 0xf3, 0x5e, 0x5c, 0x90, 0xfe, 0xb9, 0xd3, 0xc7, 0x45, 0x95, 0x3d, 0xbf, 0x85, 0x9d, 0xef, 0xce, 0x45, 0x37, 0xb4, 0xa0, 0x98, 0x01, 0xfd, 0xc8, 0xfe, 0x69, 0x99, 0xfb, 0xde, 0x39, 0x90, 0x80, 0x79, 0x81, 0x1b, 0x4b, 0x99, 0x2c, 0x2e, 0x83, 0x33, 0xb9, 0xf8, 0x00, 0xea, 0x0d, 0x9f, 0x0a, 0x5f, 0x53, 0x60, 0x7e, 0x30, 0x89, 0x42, 0xe6, 0x8e, 0xfe, 0xf0, 0x1e, 0x03, 0xd7, 0xcc, 0xa6, 0xf1, 0x96, 0x87, 0x2b, 0xf0, 0x1f, 0x43, 0x6d, 0x4a, 0x8e, 0x05, 0xfc, 0x59, 0xd8, 0xfb, 0xc6, 0xb8, 0x8a, 0x16, 0x6f, 0x57, 0xa4, 0xe9, 0x9d, 0x67, 0xdd, 0xae, 0xce, 0x84, 0x46, 0x53, 0xbe, 0x77, 0x81, 0x97, 0x47, 0xdd, 0x2e, 0x07, 0xd5, 0x81, 0xc5, 0x18, 0xcb, 0x97, 0x79, 0xe9, 0xf7, 0x96, 0x0c, 0x17, 0xff, 0x0b, 0xae, 0x71, 0x0e, 0xcf, 0x57, 0x5b, 0x09, 0x59, 0x1b, 0x01, 0x3b, 0x48, 0x05, 0xc8, 0x8b, 0x23, 0x5d, 0xf2, 0x62, 0xe6, 0x1a, 0x4c, 0x94, 0xf4, 0x6b, 0xf9, 0xa0, 0x82, 0x84, 0x61, 0x1d, 0xf4, 0x4e, 0xad, 0xd9, 0x4f, 0x44, 0xce, 0xf6, 0x22, 0x5a, 0x80, 0x8e, 0x21, 0x1e, 0x4d, 0x3a, 0xf5, 0xe9, 0x6b, 0xce, 0x64, 0xa9, 0x0f, 0x80, 0x13, 0x87, 0x4f, 0x10, 0x74, 0x9a, 0x83, 0x82, 0xa6, 0x02, 0x6a, 0x85, 0x5d, 0x90, 0x85, 0x34, 0x40, 0xbf, 0xce, 0x31, 0xf2, 0x58, 0xb3, 0xa2, 0x58, 0xf7, 0xb5, 0xe6, 0x59, 0xb4, 0x3e, 0x70, 0x2d, 0xee, 0x7c, 0x24, 0xc0, 0x2d, 0x22, 0x84 }; /* K = 16aedfbe554de17a3e5b83e942702bd60702d9823ba154baa6d1e7e94308324d */ static const uint8_t ac_dsa_vect297_out[] = { /* R */ 0x8d, 0x35, 0x7b, 0x0b, 0x95, 0x6f, 0xb9, 0x0e, 0x8e, 0x0b, 0x9f, 0xf2, 0x84, 0xce, 0xdc, 0x88, 0xa0, 0x4d, 0x17, 0x1a, 0x90, 0xc5, 0x99, 0x7d, 0x8e, 0xe1, 0xe9, 0xbc, 0x4d, 0x0b, 0x35, 0xff, /* S */ 0xab, 0x37, 0x32, 0x9c, 0x50, 0x14, 0x5d, 0x14, 0x65, 0x05, 0x01, 0x57, 0x04, 0xfd, 0xc4, 0xfb, 0x0f, 0xd7, 0x20, 0x7e, 0x0b, 0x11, 0xd8, 0xbe, 0xcb, 0xad, 0x93, 0x4e, 0x62, 0x55, 0xc3, 0x0c }; #define ac_dsa_vect298_prime ac_dsa_vect286_prime #define ac_dsa_vect298_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect298_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect298_ptx[] = { /* Msg */ 0x18, 0x4e, 0x59, 0x9a, 0x4c, 0x1d, 0xe8, 0x6c, 0x41, 0x51, 0x20, 0x57, 0x54, 0xdf, 0x0b, 0x19, 0x12, 0xc2, 0xb3, 0xc5, 0x32, 0x55, 0x2c, 0x51, 0xa6, 0x1c, 0x64, 0x59, 0xdb, 0x98, 0xc8, 0x3e, 0x59, 0xd4, 0xa4, 0x08, 0x06, 0xc6, 0xa2, 0xc6, 0xb3, 0xfe, 0x74, 0xe3, 0xbb, 0x9e, 0x72, 0x0d, 0x7d, 0x0a, 0x3c, 0xc1, 0x1e, 0xf8, 0x89, 0x59, 0xa8, 0x99, 0x0c, 0x0f, 0xa0, 0x57, 0xa3, 0x91, 0x5f, 0xe0, 0xdd, 0x9a, 0x13, 0x8a, 0xa0, 0xec, 0x1c, 0xb1, 0xab, 0x69, 0xd9, 0x39, 0x10, 0xd8, 0xd6, 0xf9, 0xe1, 0x4f, 0x3b, 0x8a, 0x13, 0x5d, 0x3f, 0x03, 0x1a, 0x56, 0xc7, 0x6a, 0x9d, 0xc3, 0xae, 0xd1, 0x96, 0x2b, 0xdf, 0x05, 0x81, 0x5c, 0x24, 0x92, 0xd1, 0x4f, 0x23, 0x24, 0xd2, 0xda, 0x49, 0x18, 0x10, 0xd1, 0x67, 0x2b, 0x63, 0x3f, 0x24, 0x19, 0xda, 0x4e, 0x7e, 0xbd, 0xef, 0x24 }; static const uint8_t ac_dsa_vect298_priv_val[] = { /* X */ 0xa2, 0x9e, 0x90, 0xd3, 0x3f, 0x20, 0x0b, 0x1f, 0xaf, 0x61, 0xbe, 0xe5, 0xd9, 0x2c, 0xa8, 0xa3, 0x92, 0xb1, 0xea, 0xee, 0xaa, 0x08, 0x17, 0xce, 0xc9, 0x8b, 0x40, 0xc9, 0x7e, 0x25, 0x01, 0x8c }; static const uint8_t ac_dsa_vect298_pub_val[] = { /* Y */ 0x60, 0x15, 0x97, 0x20, 0x02, 0x1f, 0xd2, 0xd5, 0xa2, 0xf5, 0x75, 0xb3, 0x22, 0x09, 0x05, 0x78, 0x8d, 0x32, 0x8d, 0x0c, 0x46, 0x89, 0x5a, 0x46, 0xbb, 0x98, 0x59, 0x42, 0x46, 0x72, 0x09, 0xec, 0x28, 0xd8, 0xdd, 0xfd, 0xc9, 0x7e, 0xc3, 0x4d, 0xa6, 0x5b, 0x16, 0x4c, 0xf4, 0x86, 0x52, 0xac, 0x47, 0x5d, 0x89, 0x78, 0x95, 0x9c, 0xfc, 0x43, 0x30, 0x74, 0x3e, 0xd9, 0x81, 0x37, 0x55, 0x93, 0x91, 0xb1, 0x20, 0x4d, 0xa6, 0xb2, 0x6b, 0x45, 0x12, 0x11, 0x40, 0x7e, 0x8f, 0xc7, 0x7d, 0x81, 0x99, 0x34, 0xc4, 0x87, 0x09, 0xc8, 0xea, 0xdc, 0x62, 0x0f, 0x6d, 0xb2, 0x59, 0x2b, 0x65, 0x48, 0x32, 0x65, 0x14, 0x9a, 0x32, 0x44, 0x67, 0xd9, 0x3c, 0x37, 0x5d, 0x97, 0x23, 0x0f, 0x2b, 0x1a, 0x68, 0x28, 0x97, 0xcf, 0x6d, 0x28, 0x0d, 0xf6, 0x1a, 0x34, 0xf2, 0x0f, 0x0c, 0x7c, 0x72, 0x9a, 0x40, 0x14, 0x19, 0x58, 0x04, 0x48, 0x76, 0xc4, 0x4e, 0x59, 0x5d, 0x23, 0x78, 0xa7, 0xd2, 0x2c, 0x6c, 0xda, 0x9a, 0xb8, 0x16, 0x48, 0x6c, 0x29, 0x4e, 0x4e, 0xdd, 0xea, 0x7a, 0xda, 0x88, 0xb1, 0x5e, 0xca, 0x53, 0x71, 0xda, 0x16, 0x44, 0x71, 0xed, 0xaf, 0xcd, 0xef, 0xc6, 0x54, 0xe6, 0x4a, 0x1f, 0x99, 0x50, 0x68, 0xfa, 0x85, 0xdb, 0xbb, 0x55, 0x16, 0x13, 0x7b, 0xc4, 0x42, 0xf6, 0x07, 0x17, 0xfe, 0x59, 0xc6, 0x29, 0x08, 0x1c, 0x23, 0x4f, 0x27, 0x19, 0x5d, 0x5f, 0x9c, 0x2b, 0xf8, 0x5c, 0xdc, 0x1e, 0xa4, 0xca, 0xe5, 0x7a, 0xa9, 0x08, 0xcb, 0xff, 0x9b, 0x2a, 0x53, 0x35, 0x3b, 0x13, 0xe9, 0xf6, 0xfe, 0x45, 0xda, 0xa5, 0x17, 0x4c, 0xd9, 0x56, 0x23, 0x6d, 0x44, 0x7b, 0x52, 0x01, 0x1d, 0x68, 0x8c, 0xd2, 0x2f, 0x23, 0x01, 0x84, 0x09, 0xb3, 0x9a, 0x36, 0x07, 0x9c, 0xb5, 0x3e, 0x03, 0xb6, 0xd3, 0xa7, 0x52, 0x73, 0x32, 0x97, 0xfe, 0xa4, 0xca, 0x27, 0xc6, 0x39, 0x5b, 0xec, 0xef, 0x40, 0x81, 0xd2, 0x01, 0xf4, 0x1d, 0x4a, 0x00, 0xe9, 0x9d, 0x95, 0xf4, 0x22, 0x81, 0xdc, 0xf4, 0x4b, 0x9e, 0xf6, 0x75, 0x49, 0x98, 0xd9, 0x42, 0x31, 0x93, 0x7c, 0x82, 0x59, 0x42, 0x18, 0xa7, 0x84, 0x63, 0xcc, 0x83, 0x71, 0x93, 0xde, 0x6b, 0xf1, 0xd3, 0xc3, 0xec, 0x31, 0xd8, 0xdc, 0x54, 0x68, 0xcb, 0x56, 0xde, 0xfc, 0x9c, 0x70, 0xd0, 0x8b, 0x95, 0xb0, 0x29, 0xd9, 0x7a, 0xa0, 0x43, 0xd5, 0x57, 0xf6, 0x28, 0x6b, 0x87, 0xee, 0x40, 0x98, 0x44, 0x2d, 0xf4, 0x95, 0xc0, 0xad, 0x8a, 0xe4, 0xd4, 0xae, 0x03, 0x73, 0x12, 0xc5, 0xf7, 0x23, 0x90, 0x32, 0xc0, 0x3b, 0x08, 0x8c, 0x10, 0x36, 0xfa, 0xd7, 0x77, 0x4b, 0x15, 0x19, 0x70, 0x92, 0x42, 0xc9, 0x51, 0x1e, 0x6e }; /* K = 78e781b2874ca2441e2ce74a2a2a16417b51537eca876831f6593ae25fbd796c */ static const uint8_t ac_dsa_vect298_out[] = { /* R */ 0x07, 0x9d, 0x4d, 0xf1, 0x4a, 0xd7, 0x03, 0xa4, 0x35, 0xb2, 0x1b, 0xc7, 0x0a, 0x03, 0x45, 0x6c, 0xa8, 0x22, 0xb8, 0x76, 0xc9, 0xac, 0xcb, 0x01, 0x8b, 0xdd, 0xd6, 0x74, 0xbd, 0x63, 0x92, 0xd7, /* S */ 0x6c, 0x77, 0x65, 0xe1, 0xf1, 0xed, 0xdf, 0x91, 0x5a, 0x56, 0xa5, 0x73, 0x90, 0xdb, 0x45, 0x63, 0x6e, 0x52, 0xf0, 0x83, 0xce, 0x44, 0x07, 0x66, 0xad, 0x4f, 0x32, 0x58, 0x0f, 0x72, 0x24, 0x83 }; #define ac_dsa_vect299_prime ac_dsa_vect286_prime #define ac_dsa_vect299_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect299_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect299_ptx[] = { /* Msg */ 0xb1, 0x89, 0xdd, 0x34, 0xf5, 0x8f, 0x3e, 0xfa, 0x85, 0xb6, 0xf9, 0x76, 0x77, 0xed, 0xfb, 0x82, 0x66, 0x4c, 0xbe, 0x43, 0xa2, 0x55, 0x0c, 0x33, 0x6f, 0xfa, 0x08, 0x70, 0x5b, 0xbd, 0xa2, 0x54, 0x5e, 0xf2, 0x44, 0xa2, 0x75, 0x01, 0x4c, 0x6a, 0x26, 0x59, 0x71, 0xf4, 0xc3, 0x65, 0x8e, 0x5e, 0x8d, 0x6a, 0x3f, 0xaf, 0xc8, 0x89, 0xf3, 0xc4, 0xed, 0xa6, 0xb5, 0x61, 0x60, 0x92, 0x95, 0x4b, 0x15, 0xc6, 0x04, 0x35, 0xef, 0xd7, 0x68, 0x06, 0xe2, 0x85, 0x57, 0xc0, 0x5f, 0xaa, 0xaa, 0x8a, 0x05, 0xc2, 0x62, 0x65, 0x78, 0x40, 0x86, 0x5f, 0xf6, 0x9c, 0x51, 0x1a, 0x68, 0xd1, 0x30, 0x22, 0xa7, 0x12, 0xd3, 0x5b, 0xde, 0x13, 0x8e, 0xb7, 0xa2, 0xf8, 0xf1, 0xa8, 0x7b, 0x34, 0x2c, 0x7c, 0xaf, 0x38, 0x8c, 0x1a, 0x8b, 0x95, 0x07, 0x9b, 0xc4, 0xa8, 0x00, 0x3e, 0xef, 0x84, 0xb8, 0x99 }; static const uint8_t ac_dsa_vect299_priv_val[] = { /* X */ 0x97, 0x59, 0xc2, 0x48, 0x20, 0x67, 0x0e, 0xae, 0xaf, 0x92, 0x37, 0x01, 0x97, 0xd0, 0x03, 0x7f, 0x9f, 0x71, 0xdc, 0xc2, 0x83, 0x97, 0x0f, 0x34, 0x11, 0x17, 0xfb, 0x56, 0xa1, 0x76, 0x40, 0x01 }; static const uint8_t ac_dsa_vect299_pub_val[] = { /* Y */ 0x05, 0xe2, 0x80, 0x31, 0x08, 0x10, 0x71, 0x5d, 0x29, 0xea, 0x1c, 0xa0, 0x0a, 0x70, 0x03, 0x78, 0xbd, 0x59, 0x79, 0x49, 0x3b, 0x98, 0x03, 0x17, 0x4c, 0x93, 0x2b, 0x7d, 0xad, 0xb7, 0x02, 0x9a, 0x9a, 0x9f, 0x9c, 0x91, 0xcf, 0x8f, 0x93, 0x8a, 0xf2, 0xbc, 0xea, 0xa0, 0x52, 0xf2, 0x27, 0x3f, 0x0d, 0xe3, 0x93, 0xb0, 0xf7, 0x54, 0x44, 0x90, 0xd6, 0x93, 0xf5, 0x29, 0xa6, 0x8b, 0x81, 0x2e, 0x2e, 0x58, 0x9c, 0xc0, 0x92, 0xb8, 0x3e, 0xf8, 0x47, 0xc5, 0x30, 0x60, 0x39, 0xaa, 0x8e, 0xaf, 0x22, 0x51, 0x28, 0x92, 0x61, 0x45, 0x89, 0x3a, 0x51, 0x55, 0x1d, 0xb3, 0x82, 0xfd, 0xa4, 0xb6, 0x3e, 0x5a, 0xbc, 0x10, 0xfd, 0x07, 0x61, 0x00, 0x68, 0x4d, 0x4c, 0xa6, 0x57, 0xc8, 0x9b, 0x22, 0x65, 0xde, 0x6e, 0x0f, 0x04, 0x73, 0xf0, 0x1b, 0xb2, 0x22, 0xb2, 0xbc, 0x50, 0xec, 0x1c, 0x5f, 0xcd, 0xe9, 0x16, 0x18, 0x31, 0x01, 0x8a, 0xab, 0x30, 0x14, 0xa9, 0x56, 0x03, 0x3b, 0xb0, 0xa8, 0x38, 0x66, 0xdf, 0x11, 0x91, 0x58, 0x08, 0xf9, 0xe7, 0x46, 0x16, 0x45, 0xc8, 0x9c, 0x6e, 0x17, 0xab, 0x65, 0xdb, 0xf9, 0x7c, 0xbf, 0x4a, 0xc1, 0x16, 0x4d, 0x67, 0x1a, 0x15, 0x16, 0xca, 0x81, 0x64, 0x5b, 0xc3, 0xe0, 0x99, 0x13, 0xa0, 0x3f, 0x30, 0x64, 0x1b, 0xd0, 0x92, 0x00, 0x83, 0x57, 0x8c, 0xa8, 0x4d, 0xf7, 0x1f, 0x62, 0xeb, 0x75, 0x6b, 0xa4, 0x45, 0xa0, 0xdc, 0x44, 0xf8, 0x5a, 0x9e, 0x4f, 0x72, 0xce, 0x5f, 0x6b, 0xf8, 0x2c, 0xcb, 0xd6, 0x74, 0xd2, 0xce, 0x3c, 0x4a, 0xfc, 0x30, 0x05, 0x62, 0xa7, 0xdb, 0xd3, 0xe8, 0xab, 0x83, 0x89, 0x93, 0xf9, 0xde, 0xcc, 0x99, 0x33, 0xdc, 0x07, 0xdc, 0x01, 0xb5, 0x02, 0xfe, 0xe5, 0xb3, 0x90, 0x46, 0x1a, 0x8c, 0x82, 0xc4, 0xe6, 0x96, 0x15, 0xf1, 0x21, 0xb3, 0xf9, 0xfd, 0x4f, 0x0c, 0x8b, 0x76, 0x20, 0xa2, 0x59, 0x96, 0xdf, 0x43, 0xd7, 0xcf, 0x35, 0x5f, 0x15, 0xbe, 0x09, 0xe2, 0xc8, 0x21, 0x78, 0xc6, 0xf8, 0x83, 0x6c, 0x36, 0xc1, 0xd3, 0xef, 0x26, 0xad, 0x05, 0x21, 0x9f, 0xb5, 0x7e, 0x85, 0xef, 0x16, 0x2c, 0x8d, 0xd8, 0xf0, 0xe5, 0x50, 0x14, 0x76, 0x9d, 0x53, 0xcb, 0xa4, 0x78, 0xa2, 0xaa, 0x66, 0xd9, 0x0d, 0x8a, 0xcd, 0x6c, 0xb0, 0x48, 0x9d, 0x1e, 0xea, 0x46, 0xc2, 0xc4, 0x1b, 0xd5, 0x49, 0x5a, 0xb8, 0xde, 0xf4, 0x3b, 0x2c, 0xd5, 0xbb, 0x26, 0x73, 0x94, 0x5c, 0x21, 0xc8, 0x0a, 0x48, 0x33, 0xfd, 0x75, 0xd8, 0x84, 0xc7, 0x67, 0x5c, 0x09, 0xe7, 0x19, 0x1f, 0xb2, 0x6e, 0x92, 0xc5, 0x4c, 0x7c, 0x82, 0x08, 0xd0, 0xa0, 0xe8, 0xde, 0xe7, 0x5c, 0x29, 0x68, 0xe9, 0x62, 0xde, 0x44, 0x93, 0xe8 }; /* K = 86050bf276a649b13c18814430eadcff54edf7416f1a8b1559c6c2c808e8dc9f */ static const uint8_t ac_dsa_vect299_out[] = { /* R */ 0x9f, 0xd1, 0x05, 0xc7, 0x4a, 0x0d, 0x36, 0x97, 0x37, 0x40, 0x86, 0x7c, 0xcc, 0x1c, 0x73, 0x1c, 0xf1, 0xc5, 0x0c, 0x79, 0x35, 0xd5, 0xc0, 0x9e, 0x92, 0xf5, 0x74, 0xd7, 0xa5, 0x69, 0x15, 0x7e, /* S */ 0x50, 0x1f, 0x50, 0xc3, 0x2b, 0x02, 0x88, 0x67, 0x2e, 0x02, 0xac, 0xa7, 0x8f, 0x90, 0xf4, 0x46, 0xac, 0xf9, 0x26, 0x26, 0x36, 0x59, 0x57, 0xa3, 0x75, 0x55, 0x0c, 0x77, 0x98, 0x0c, 0x3c, 0x17 }; #define ac_dsa_vect300_prime ac_dsa_vect286_prime #define ac_dsa_vect300_sub_prime ac_dsa_vect286_sub_prime #define ac_dsa_vect300_base ac_dsa_vect286_base static const uint8_t ac_dsa_vect300_ptx[] = { /* Msg */ 0x42, 0xc0, 0x65, 0xfa, 0xdd, 0x56, 0xd6, 0xa1, 0xfe, 0x68, 0xdd, 0x4e, 0x86, 0xc1, 0x7e, 0xfd, 0x76, 0xd0, 0xf9, 0xdb, 0x87, 0x03, 0x6b, 0xd7, 0xb6, 0x09, 0x15, 0x9d, 0x66, 0x84, 0x7f, 0x46, 0xde, 0x01, 0xb8, 0xae, 0x43, 0x59, 0x03, 0x60, 0xfa, 0x32, 0x45, 0x59, 0xa2, 0xd7, 0x09, 0xd4, 0x5c, 0xf0, 0x10, 0x34, 0xf5, 0xfa, 0xcb, 0x7f, 0x52, 0x32, 0x4e, 0x60, 0xdd, 0x46, 0x4a, 0x58, 0x3d, 0x42, 0xe4, 0x12, 0x65, 0x9d, 0x84, 0x20, 0xf7, 0x26, 0x5e, 0x30, 0xcf, 0x82, 0xbb, 0xbc, 0xb2, 0xc9, 0x9b, 0x0f, 0x00, 0xca, 0x6a, 0x46, 0xd2, 0x85, 0x56, 0x42, 0x87, 0x89, 0xf4, 0x15, 0x00, 0x0d, 0xc3, 0x1b, 0xab, 0xbd, 0x67, 0xcc, 0xc8, 0xfb, 0xaa, 0x84, 0xa8, 0x80, 0x46, 0x6b, 0xca, 0x47, 0x83, 0xea, 0xf0, 0x0b, 0x7f, 0x78, 0x23, 0x1c, 0x66, 0x71, 0x26, 0x43, 0x3e, 0x6a }; static const uint8_t ac_dsa_vect300_priv_val[] = { /* X */ 0x30, 0x75, 0x55, 0x89, 0x36, 0x10, 0xe1, 0x55, 0x49, 0xa5, 0xbf, 0xb2, 0xb4, 0x46, 0x25, 0x1f, 0x95, 0x95, 0xeb, 0x0c, 0x16, 0xdf, 0x5f, 0xe3, 0xb7, 0x84, 0xeb, 0xfc, 0x3f, 0xc3, 0x01, 0x40 }; static const uint8_t ac_dsa_vect300_pub_val[] = { /* Y */ 0xb2, 0x65, 0xed, 0xfe, 0xd7, 0x7b, 0x3a, 0xd5, 0x11, 0xe5, 0x6d, 0x58, 0x31, 0x29, 0xb1, 0x2e, 0x57, 0x96, 0xd6, 0x59, 0xd4, 0x84, 0xa2, 0xfc, 0xe3, 0x50, 0x66, 0x1f, 0x79, 0xe5, 0x45, 0xdd, 0x0a, 0x06, 0xc2, 0x37, 0x74, 0xc8, 0xba, 0x2f, 0xb5, 0x10, 0x1a, 0x28, 0x48, 0xc4, 0x13, 0xdf, 0xc5, 0xb3, 0x74, 0xa7, 0xc5, 0xff, 0x3a, 0xcc, 0x73, 0x32, 0xf0, 0xff, 0x8b, 0xd6, 0xf5, 0xfa, 0x88, 0x2c, 0x0a, 0x67, 0x68, 0x93, 0x08, 0xbe, 0x71, 0x54, 0xc4, 0xef, 0xc5, 0x18, 0x35, 0xf3, 0x49, 0x52, 0x54, 0x19, 0xed, 0x72, 0x2a, 0x90, 0xbf, 0x26, 0xdd, 0xde, 0xd6, 0x5b, 0xc8, 0x96, 0x2b, 0xa1, 0x1d, 0xe9, 0xe7, 0x34, 0x44, 0x25, 0x71, 0xaf, 0xfc, 0x2d, 0x42, 0xb9, 0xf3, 0xf5, 0x4a, 0x46, 0x53, 0x5a, 0xe9, 0xeb, 0x01, 0x36, 0x1a, 0xdf, 0x03, 0xfc, 0x28, 0x41, 0x0a, 0xbf, 0x41, 0xdb, 0x3a, 0xe4, 0x11, 0x3d, 0xa4, 0xc4, 0x0e, 0x9a, 0x36, 0x8f, 0x9c, 0xd0, 0x29, 0xbe, 0x4d, 0x98, 0xc6, 0x6d, 0x83, 0x5d, 0x03, 0x4e, 0x3c, 0x86, 0x54, 0x4b, 0x60, 0xbc, 0xb0, 0x1f, 0xeb, 0x38, 0x3b, 0x2a, 0xdd, 0x9a, 0xfe, 0x7b, 0x62, 0x51, 0xa1, 0x7a, 0xd4, 0xe5, 0x43, 0x9a, 0x9c, 0xd2, 0xd1, 0xbf, 0x62, 0xb6, 0xcf, 0x53, 0x77, 0xc0, 0x97, 0xb7, 0x26, 0x8b, 0xd7, 0x36, 0xcc, 0xa9, 0xce, 0xb8, 0x22, 0xe5, 0xd1, 0x84, 0x4a, 0x09, 0xfa, 0x69, 0xc7, 0x82, 0x17, 0xc3, 0xd6, 0x73, 0x7f, 0x0b, 0xf4, 0x5e, 0x32, 0x36, 0x50, 0x8b, 0x5a, 0x3f, 0x5c, 0x46, 0x6d, 0xd0, 0xd7, 0x5a, 0xce, 0x95, 0xd4, 0x47, 0xf9, 0xbd, 0x7a, 0xa9, 0xee, 0x57, 0xbd, 0x10, 0xee, 0x3c, 0x5e, 0x83, 0x89, 0xa0, 0x6c, 0x00, 0x85, 0x7e, 0x69, 0x97, 0x94, 0xf5, 0xca, 0xcc, 0x7d, 0xc5, 0xbb, 0x15, 0x04, 0x42, 0x1d, 0xc9, 0x20, 0x56, 0x56, 0x18, 0xbe, 0xf0, 0x5d, 0xc1, 0x71, 0x3b, 0x6f, 0x08, 0xbc, 0x00, 0x68, 0x1c, 0x5a, 0x1c, 0x06, 0x85, 0x35, 0x97, 0x29, 0xfe, 0x4b, 0x54, 0x40, 0x90, 0xcc, 0xce, 0xaa, 0x82, 0xf4, 0xfe, 0xfa, 0x9f, 0x11, 0x17, 0xbf, 0x1e, 0x37, 0x1b, 0x99, 0xfe, 0x4e, 0xd7, 0x16, 0x35, 0xda, 0xd4, 0x15, 0x01, 0x7a, 0x62, 0x34, 0x1d, 0x70, 0x42, 0x27, 0xee, 0x7c, 0xfb, 0x64, 0xa8, 0xde, 0xae, 0x90, 0xd8, 0x6c, 0x0c, 0xfd, 0x37, 0xed, 0x36, 0x3d, 0x91, 0xa4, 0xa0, 0x6f, 0xd0, 0x6f, 0x64, 0xdb, 0xd8, 0x14, 0x2c, 0x12, 0x50, 0x3f, 0x49, 0xee, 0xb1, 0xb9, 0xa9, 0x71, 0xae, 0xb3, 0x43, 0xf1, 0x5c, 0xd2, 0x7d, 0x27, 0x9b, 0x99, 0xd4, 0xcf, 0xa5, 0x1f, 0x12, 0x12, 0x59, 0xb3, 0xc1, 0xb5, 0x5d, 0x28, 0xd9, 0x94, 0xbb, 0x32, 0x99 }; /* K = 5359fe067eb9d98ec2217500de743b0dbe88e8d94552b53a0117aac4d3390083 */ static const uint8_t ac_dsa_vect300_out[] = { /* R */ 0x6e, 0xd8, 0x2a, 0xf8, 0xe8, 0x9e, 0x38, 0xc4, 0x9a, 0x58, 0x01, 0x0f, 0x05, 0x64, 0x16, 0x5a, 0x16, 0xa7, 0x6a, 0x2b, 0xfb, 0x34, 0x84, 0x66, 0xd9, 0xb4, 0xa9, 0x1e, 0x5c, 0xe5, 0x3a, 0xb2, /* S */ 0x8c, 0x46, 0x6a, 0x8b, 0x3e, 0x4c, 0x90, 0x88, 0x6f, 0x29, 0x98, 0x6a, 0x4d, 0x51, 0x39, 0x04, 0xf3, 0x1d, 0xb4, 0x3a, 0x68, 0xce, 0x88, 0x03, 0x11, 0x40, 0x3c, 0xc7, 0x55, 0x46, 0x66, 0x04 }; optee_test-4.3.0/host/xtest/nist/ecccdhtestvectors.h000066400000000000000000021633171464074351400227070ustar00rootroot00000000000000/* * ECDH Test data automatically generated from * http://csrc.nist.gov/groups/STM/cavp/documents/components/ecccdhtestvectors.zip * KAS_ECC_CDH_PrimitiveTest.txt */ /* [P-192] */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_1_public_x[] = { /* QCAVSx */ 0x42, 0xea, 0x6d, 0xd9, 0x96, 0x9d, 0xd2, 0xa6, 0x1f, 0xea, 0x1a, 0xac, 0x7f, 0x8e, 0x98, 0xed, 0xcc, 0x89, 0x6c, 0x6e, 0x55, 0x85, 0x7c, 0xc0 }; static const uint8_t nist_kas_ecc_cdh_testvector_1_public_y[] = { /* QCAVSy */ 0xdf, 0xbe, 0x5d, 0x7c, 0x61, 0xfa, 0xc8, 0x8b, 0x11, 0x81, 0x1b, 0xde, 0x32, 0x8e, 0x8a, 0x0d, 0x12, 0xbf, 0x01, 0xa9, 0xd2, 0x04, 0xb5, 0x23 }; static const uint8_t nist_kas_ecc_cdh_testvector_1_private[] = { /* dIUT */ 0xf1, 0x7d, 0x3f, 0xea, 0x36, 0x7b, 0x74, 0xd3, 0x40, 0x85, 0x1c, 0xa4, 0x27, 0x0d, 0xcb, 0x24, 0xc2, 0x71, 0xf4, 0x45, 0xbe, 0xd9, 0xd5, 0x27 }; /* QIUTx = b15053401f57285637ec324c1cd2139e3a67de3739234b37 */ /* QIUTy = f269c158637482aad644cd692dd1d3ef2c8a7c49e389f7f6 */ static const uint8_t nist_kas_ecc_cdh_testvector_1_out[] = { /* ZIUT */ 0x80, 0x3d, 0x8a, 0xb2, 0xe5, 0xb6, 0xe6, 0xfc, 0xa7, 0x15, 0x73, 0x7c, 0x3a, 0x82, 0xf7, 0xce, 0x3c, 0x78, 0x31, 0x24, 0xf6, 0xd5, 0x1c, 0xd0 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_2_public_x[] = { /* QCAVSx */ 0xde, 0xb5, 0x71, 0x2f, 0xa0, 0x27, 0xac, 0x8d, 0x2f, 0x22, 0xc4, 0x55, 0xcc, 0xb7, 0x3a, 0x91, 0xe1, 0x7b, 0x65, 0x12, 0xb5, 0xe0, 0x30, 0xe7 }; static const uint8_t nist_kas_ecc_cdh_testvector_2_public_y[] = { /* QCAVSy */ 0x7e, 0x26, 0x90, 0xa0, 0x2c, 0xc9, 0xb2, 0x87, 0x08, 0x43, 0x1a, 0x29, 0xfb, 0x54, 0xb8, 0x7b, 0x1f, 0x0c, 0x14, 0xe0, 0x11, 0xac, 0x21, 0x25 }; static const uint8_t nist_kas_ecc_cdh_testvector_2_private[] = { /* dIUT */ 0x56, 0xe8, 0x53, 0x34, 0x9d, 0x96, 0xfe, 0x4c, 0x44, 0x24, 0x48, 0xda, 0xcb, 0x7c, 0xf9, 0x2b, 0xb7, 0xa9, 0x5d, 0xcf, 0x57, 0x4a, 0x9b, 0xd5 }; /* QIUTx = c00d435716ffea53fd8c162792414c37665187e582716539 */ /* QIUTy = ab711c62aa71a5a18e8a3c48f89dc6fa52fac0108e52a8a0 */ static const uint8_t nist_kas_ecc_cdh_testvector_2_out[] = { /* ZIUT */ 0xc2, 0x08, 0x84, 0x75, 0x68, 0xb9, 0x88, 0x35, 0xd7, 0x31, 0x2c, 0xef, 0x1f, 0x97, 0xf7, 0xaa, 0x29, 0x82, 0x83, 0x15, 0x23, 0x13, 0xc2, 0x9d }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_3_public_x[] = { /* QCAVSx */ 0x4e, 0xda, 0xa8, 0xef, 0xc5, 0xa0, 0xf4, 0x0f, 0x84, 0x36, 0x63, 0xec, 0x58, 0x15, 0xe7, 0x76, 0x2d, 0xdd, 0xc0, 0x08, 0xe6, 0x63, 0xc2, 0x0f }; static const uint8_t nist_kas_ecc_cdh_testvector_3_public_y[] = { /* QCAVSy */ 0x0a, 0x9f, 0x8d, 0xc6, 0x7a, 0x3e, 0x60, 0xef, 0x6d, 0x64, 0xb5, 0x22, 0x18, 0x5d, 0x03, 0xdf, 0x1f, 0xc0, 0xad, 0xfd, 0x42, 0x47, 0x82, 0x79 }; static const uint8_t nist_kas_ecc_cdh_testvector_3_private[] = { /* dIUT */ 0xc6, 0xef, 0x61, 0xfe, 0x12, 0xe8, 0x0b, 0xf5, 0x6f, 0x2d, 0x3f, 0x7d, 0x0b, 0xb7, 0x57, 0x39, 0x45, 0x19, 0x90, 0x6d, 0x55, 0x50, 0x09, 0x49 }; /* QIUTx = e184bc182482f3403c8787b83842477467fcd011db0f6c64 */ /* QIUTy = f9d1c14142f40de8639db97d51a63d2cce1007ccf773cdcb */ static const uint8_t nist_kas_ecc_cdh_testvector_3_out[] = { /* ZIUT */ 0x87, 0x22, 0x91, 0x07, 0x04, 0x7a, 0x3b, 0x61, 0x19, 0x20, 0xd6, 0xe3, 0xb2, 0xc0, 0xc8, 0x9b, 0xea, 0x4f, 0x49, 0x41, 0x22, 0x60, 0xb8, 0xdd }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_4_public_x[] = { /* QCAVSx */ 0x88, 0x87, 0xc2, 0x76, 0xed, 0xee, 0xd3, 0xe9, 0xe8, 0x66, 0xb4, 0x6d, 0x58, 0xd8, 0x95, 0xc7, 0x3f, 0xbd, 0x80, 0xb6, 0x3e, 0x38, 0x2e, 0x88 }; static const uint8_t nist_kas_ecc_cdh_testvector_4_public_y[] = { /* QCAVSy */ 0x04, 0xc5, 0x09, 0x7b, 0xa6, 0x64, 0x5e, 0x16, 0x20, 0x6c, 0xfb, 0x70, 0xf7, 0x05, 0x26, 0x55, 0x94, 0x7d, 0xd4, 0x4a, 0x17, 0xf1, 0xf9, 0xd5 }; static const uint8_t nist_kas_ecc_cdh_testvector_4_private[] = { /* dIUT */ 0xe6, 0x74, 0x7b, 0x9c, 0x23, 0xba, 0x70, 0x44, 0xf3, 0x8f, 0xf7, 0xe6, 0x2c, 0x35, 0xe4, 0x03, 0x89, 0x20, 0xf5, 0xa0, 0x16, 0x3d, 0x3c, 0xda }; /* QIUTx = 2b838dbe73735f37a39a78d3195783d26991e86ff4d92d1a */ /* QIUTy = 60d344942274489f98903b2e7f93f8d197fc9ae60a0ed53a */ static const uint8_t nist_kas_ecc_cdh_testvector_4_out[] = { /* ZIUT */ 0xee, 0xc0, 0xbe, 0xd8, 0xfc, 0x55, 0xe1, 0xfe, 0xdd, 0xc8, 0x21, 0x58, 0xfd, 0x6d, 0xc0, 0xd4, 0x8a, 0x4d, 0x79, 0x6a, 0xaf, 0x47, 0xd4, 0x6c }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_5_public_x[] = { /* QCAVSx */ 0x0d, 0x04, 0x5f, 0x30, 0x25, 0x4a, 0xdc, 0x1f, 0xce, 0xfa, 0x8a, 0x5b, 0x1f, 0x31, 0xbf, 0x4e, 0x73, 0x9d, 0xd3, 0x27, 0xcd, 0x18, 0xd5, 0x94 }; static const uint8_t nist_kas_ecc_cdh_testvector_5_public_y[] = { /* QCAVSy */ 0x54, 0x2c, 0x31, 0x4e, 0x41, 0x42, 0x7c, 0x08, 0x27, 0x8a, 0x08, 0xce, 0x8d, 0x73, 0x05, 0xf3, 0xb5, 0xb8, 0x49, 0xc7, 0x2d, 0x8a, 0xff, 0x73 }; static const uint8_t nist_kas_ecc_cdh_testvector_5_private[] = { /* dIUT */ 0xbe, 0xab, 0xed, 0xd0, 0x15, 0x4a, 0x1a, 0xfc, 0xfc, 0x85, 0xd5, 0x21, 0x81, 0xc1, 0x0f, 0x5e, 0xb4, 0x7a, 0xdc, 0x51, 0xf6, 0x55, 0x04, 0x7d }; /* QIUTx = 1f65cf6e8978e1c1bc10bb61a7db311de310088c8cf9768b */ /* QIUTy = f7d438168e7f42ab14b16af53a7a2f646ff40b53d74cbcc7 */ static const uint8_t nist_kas_ecc_cdh_testvector_5_out[] = { /* ZIUT */ 0x71, 0x6e, 0x74, 0x3b, 0x1b, 0x37, 0xa2, 0xcd, 0x84, 0x79, 0xf0, 0xa3, 0xd5, 0xa7, 0x4c, 0x10, 0xba, 0x25, 0x99, 0xbe, 0x18, 0xd7, 0xe2, 0xf4 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_6_public_x[] = { /* QCAVSx */ 0xfb, 0x35, 0xca, 0x20, 0xd2, 0xe9, 0x66, 0x65, 0xc5, 0x1b, 0x98, 0xe8, 0xf6, 0xeb, 0x3d, 0x79, 0x11, 0x35, 0x08, 0xd8, 0xbc, 0xcd, 0x45, 0x16 }; static const uint8_t nist_kas_ecc_cdh_testvector_6_public_y[] = { /* QCAVSy */ 0x36, 0x8e, 0xec, 0x0d, 0x5b, 0xfb, 0x84, 0x77, 0x21, 0xdf, 0x6a, 0xaf, 0xf0, 0xe5, 0xd4, 0x8c, 0x44, 0x4f, 0x74, 0xbf, 0x9c, 0xd8, 0xa5, 0xa7 }; static const uint8_t nist_kas_ecc_cdh_testvector_6_private[] = { /* dIUT */ 0xcf, 0x70, 0x35, 0x42, 0x26, 0x66, 0x73, 0x21, 0xd6, 0xe2, 0xba, 0xf4, 0x09, 0x99, 0xe2, 0xfd, 0x74, 0xc7, 0xa0, 0xf7, 0x93, 0xfa, 0x86, 0x99 }; /* QIUTx = 5f4844ffcce61005d24f737db98675e92f7b6543aeb6106c */ /* QIUTy = 5424f598139215d389b6b12b86d58014857f2ddadb540f51 */ static const uint8_t nist_kas_ecc_cdh_testvector_6_out[] = { /* ZIUT */ 0xf6, 0x70, 0x53, 0xb9, 0x34, 0x45, 0x99, 0x85, 0xa3, 0x15, 0xcb, 0x01, 0x7b, 0xf0, 0x30, 0x28, 0x91, 0x79, 0x8d, 0x45, 0xd0, 0xe1, 0x95, 0x08 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_7_public_x[] = { /* QCAVSx */ 0x82, 0x47, 0x52, 0x96, 0x0c, 0x13, 0x07, 0xe5, 0xf1, 0x3a, 0x83, 0xda, 0x21, 0xc7, 0x99, 0x8c, 0xa8, 0xb5, 0xb0, 0x0b, 0x95, 0x49, 0xf6, 0xd0 }; static const uint8_t nist_kas_ecc_cdh_testvector_7_public_y[] = { /* QCAVSy */ 0xbc, 0x52, 0xd9, 0x1e, 0x23, 0x43, 0x63, 0xbc, 0x32, 0xee, 0x0b, 0x67, 0x78, 0xf2, 0x5c, 0xd8, 0xc1, 0x84, 0x75, 0x10, 0xf4, 0x34, 0x8b, 0x94 }; static const uint8_t nist_kas_ecc_cdh_testvector_7_private[] = { /* dIUT */ 0xfe, 0x94, 0x25, 0x15, 0x23, 0x7f, 0xff, 0xdd, 0x7b, 0x4e, 0xb5, 0xc6, 0x49, 0x09, 0xee, 0xe4, 0x85, 0x6a, 0x07, 0x6c, 0xdf, 0x12, 0xba, 0xe2 }; /* QIUTx = e6369df79b207b8b8679f7c869cfc264859d1ab55aa401e8 */ /* QIUTy = 1f99c71f801a30b52f74da6e5e6dbb62ee4c5da1090cc020 */ static const uint8_t nist_kas_ecc_cdh_testvector_7_out[] = { /* ZIUT */ 0x75, 0x82, 0x29, 0x71, 0x19, 0x3e, 0xdd, 0x47, 0x2b, 0xf3, 0x01, 0x51, 0xa7, 0x82, 0x61, 0x9c, 0x55, 0xad, 0x0b, 0x27, 0x9c, 0x93, 0x03, 0xdd }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_8_public_x[] = { /* QCAVSx */ 0x10, 0xbb, 0x57, 0x02, 0x02, 0x91, 0x14, 0x19, 0x81, 0xf8, 0x33, 0xb4, 0x74, 0x9e, 0x56, 0x11, 0x03, 0x4b, 0x30, 0x8e, 0x84, 0x01, 0x1d, 0x21 }; static const uint8_t nist_kas_ecc_cdh_testvector_8_public_y[] = { /* QCAVSy */ 0xe1, 0xca, 0xcd, 0x6b, 0x7b, 0xd1, 0x7e, 0xd8, 0xdd, 0xb5, 0x0b, 0x6a, 0xee, 0x06, 0x54, 0xc3, 0x5f, 0x2d, 0x0e, 0xdd, 0xc1, 0xcf, 0xfc, 0xf6 }; static const uint8_t nist_kas_ecc_cdh_testvector_8_private[] = { /* dIUT */ 0x33, 0xfe, 0xd1, 0x04, 0x92, 0xaf, 0xa5, 0xbe, 0xa0, 0x33, 0x3c, 0x0a, 0xf1, 0x2c, 0xac, 0x94, 0x0c, 0x4d, 0x22, 0x24, 0x55, 0xbc, 0xd0, 0xfe }; /* QIUTx = ef0b28afc41637d737f42e4c8aaceadc84ba2e0b849ca18c */ /* QIUTy = 57797942e552173bba17f73278e029f42335068bd770ddf2 */ static const uint8_t nist_kas_ecc_cdh_testvector_8_out[] = { /* ZIUT */ 0x67, 0xcb, 0xa2, 0xcb, 0xb6, 0x9e, 0xe7, 0x8b, 0xf1, 0xab, 0xaf, 0xb0, 0xe6, 0xfb, 0xe3, 0x3f, 0xa2, 0x09, 0x4c, 0x12, 0x8d, 0x59, 0x65, 0x2d }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_9_public_x[] = { /* QCAVSx */ 0x51, 0x92, 0xfc, 0xe4, 0x18, 0x5a, 0x77, 0x58, 0xea, 0x1b, 0xc5, 0x6e, 0x0e, 0x4f, 0x4e, 0x8b, 0x2d, 0xce, 0x32, 0x34, 0x8d, 0x0d, 0xce, 0xd1 }; static const uint8_t nist_kas_ecc_cdh_testvector_9_public_y[] = { /* QCAVSy */ 0x20, 0x98, 0x99, 0x81, 0xbe, 0xaa, 0xf0, 0x00, 0x6d, 0x88, 0xa9, 0x6e, 0x79, 0x71, 0xa2, 0xfa, 0x3a, 0x33, 0xba, 0x46, 0x04, 0x7f, 0xc7, 0xba }; static const uint8_t nist_kas_ecc_cdh_testvector_9_private[] = { /* dIUT */ 0xf3, 0x55, 0x7c, 0x5d, 0x70, 0xb4, 0xc7, 0x95, 0x49, 0x60, 0xc3, 0x35, 0x68, 0x77, 0x6a, 0xdb, 0xe8, 0xe4, 0x36, 0x19, 0xab, 0xe2, 0x6b, 0x13 }; /* QIUTx = d70112c5f0f0844386494ac1ad99dce2214134176ebfb9af */ /* QIUTy = d3c187a038510ab31d459e2b7af1a380dd7576af06267548 */ static const uint8_t nist_kas_ecc_cdh_testvector_9_out[] = { /* ZIUT */ 0xcf, 0x99, 0xa2, 0x77, 0x0a, 0x38, 0x6c, 0xa0, 0x13, 0x7d, 0x1e, 0xca, 0x0a, 0x22, 0x6e, 0x48, 0x42, 0x97, 0xac, 0x3c, 0x51, 0x3f, 0x36, 0x31 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_10_public_x[] = { /* QCAVSx */ 0x26, 0xd0, 0x19, 0xdb, 0xe2, 0x79, 0xea, 0xd0, 0x1e, 0xed, 0x14, 0x3a, 0x91, 0x60, 0x1a, 0xda, 0x26, 0xe2, 0xf4, 0x22, 0x25, 0xb1, 0xc6, 0x2b }; static const uint8_t nist_kas_ecc_cdh_testvector_10_public_y[] = { /* QCAVSy */ 0x6c, 0xa6, 0x53, 0xf0, 0x82, 0x72, 0xe0, 0x38, 0x6f, 0xc9, 0x42, 0x1f, 0xbd, 0x58, 0x00, 0x93, 0xd7, 0xae, 0x63, 0x01, 0xbc, 0xa9, 0x44, 0x76 }; static const uint8_t nist_kas_ecc_cdh_testvector_10_private[] = { /* dIUT */ 0x58, 0x6c, 0xfb, 0xa1, 0xc6, 0xe8, 0x17, 0x66, 0xed, 0x52, 0x82, 0x8f, 0x17, 0x7b, 0x1b, 0xe1, 0x4e, 0xbb, 0xc5, 0xb8, 0x33, 0x48, 0xc3, 0x11 }; /* QIUTx = 58b3c63e56bec9d696bf9a88df2873738391f76368aa2b49 */ /* QIUTy = 5776773b261faf7ba2fdc4fe43b92c0b1c7a2fd054a43650 */ static const uint8_t nist_kas_ecc_cdh_testvector_10_out[] = { /* ZIUT */ 0x57, 0x63, 0x31, 0xe2, 0xb4, 0xfb, 0x38, 0xa1, 0x12, 0x81, 0x0e, 0x15, 0x29, 0x83, 0x4d, 0xe8, 0x30, 0x7f, 0xb0, 0xa0, 0xd2, 0x75, 0x68, 0x77 }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_11_public_x[] = { /* QCAVSx */ 0x53, 0x9b, 0xc4, 0x0f, 0xe2, 0x0a, 0x0f, 0xb2, 0x67, 0x88, 0x8b, 0x64, 0x7b, 0x03, 0xea, 0xaf, 0x6e, 0xc2, 0x0c, 0x02, 0xa1, 0xe1, 0xf8, 0xc8 }; static const uint8_t nist_kas_ecc_cdh_testvector_11_public_y[] = { /* QCAVSy */ 0x69, 0x09, 0x5e, 0x5b, 0xb7, 0xb4, 0xd4, 0x4c, 0x32, 0x78, 0xa7, 0xee, 0x6b, 0xec, 0xa3, 0x97, 0xc4, 0x52, 0x46, 0xda, 0x9a, 0x34, 0xc8, 0xbe }; static const uint8_t nist_kas_ecc_cdh_testvector_11_private[] = { /* dIUT */ 0xca, 0xd8, 0x10, 0x06, 0x03, 0xa4, 0xf6, 0x5b, 0xe0, 0x8d, 0x8f, 0xc8, 0xa1, 0xb7, 0xe8, 0x84, 0xc5, 0xff, 0x65, 0xde, 0xb3, 0xc9, 0x6d, 0x99 }; /* QIUTx = b7fcc0f52c7a411edbed39e10bf02b6ae0f26614c6b325a2 */ /* QIUTy = 47483b26eb67776de2b93ab7119d5447573739e3d55e72fb */ static const uint8_t nist_kas_ecc_cdh_testvector_11_out[] = { /* ZIUT */ 0x90, 0x2f, 0x45, 0x01, 0x91, 0x6a, 0x0d, 0xd9, 0x45, 0x55, 0x4c, 0x3a, 0x37, 0xb3, 0xd7, 0x80, 0xd3, 0x75, 0xa6, 0xda, 0x71, 0x31, 0x97, 0xc4 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_12_public_x[] = { /* QCAVSx */ 0x5d, 0x34, 0x3d, 0xdb, 0x96, 0x31, 0x8f, 0xb4, 0x79, 0x4d, 0x10, 0xf6, 0xc5, 0x73, 0xf9, 0x9f, 0xee, 0x5d, 0x0d, 0x57, 0xb9, 0x96, 0x25, 0x0f }; static const uint8_t nist_kas_ecc_cdh_testvector_12_public_y[] = { /* QCAVSy */ 0x99, 0xfb, 0xdf, 0x9d, 0x97, 0xdd, 0x88, 0xad, 0x41, 0x02, 0x35, 0xda, 0xc3, 0x6e, 0x5b, 0x92, 0xce, 0x28, 0x24, 0xb8, 0xe5, 0x87, 0xa8, 0x2c }; static const uint8_t nist_kas_ecc_cdh_testvector_12_private[] = { /* dIUT */ 0x1e, 0xdd, 0x87, 0x9c, 0xc5, 0xc7, 0x96, 0x19, 0xca, 0xe6, 0xc7, 0x3a, 0x69, 0x1b, 0xd5, 0xa0, 0x39, 0x5c, 0x0e, 0xf3, 0xb3, 0x56, 0xfc, 0xd2 }; /* QIUTx = 6ce6adb2c30808f590048c33dffad4524ebf7a5fd39b747b */ /* QIUTy = 4966bd2f3d00569b4d4c0409fbd7a2db752f6d09bca8c25f */ static const uint8_t nist_kas_ecc_cdh_testvector_12_out[] = { /* ZIUT */ 0x46, 0xe4, 0xde, 0x33, 0x50, 0x54, 0xd4, 0x29, 0x86, 0x32, 0x18, 0xae, 0x33, 0x63, 0x6f, 0xc9, 0xb8, 0x9c, 0x62, 0x8b, 0x64, 0xb5, 0x06, 0xc7 }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_13_public_x[] = { /* QCAVSx */ 0x8d, 0x3d, 0xb9, 0xbd, 0xce, 0x13, 0x7f, 0xfb, 0xfb, 0x89, 0x13, 0x88, 0xc3, 0x7d, 0xf6, 0xc0, 0xcb, 0xc9, 0x0a, 0xa5, 0xe5, 0x37, 0x62, 0x20 }; static const uint8_t nist_kas_ecc_cdh_testvector_13_public_y[] = { /* QCAVSy */ 0x13, 0x5d, 0x30, 0xb5, 0xcb, 0x66, 0x0e, 0xef, 0x87, 0x64, 0xff, 0xc7, 0x44, 0xf1, 0x5c, 0x1b, 0x5d, 0x6d, 0xc0, 0x6b, 0xa4, 0x41, 0x6d, 0x37 }; static const uint8_t nist_kas_ecc_cdh_testvector_13_private[] = { /* dIUT */ 0x46, 0x0e, 0x45, 0x22, 0x73, 0xfe, 0x18, 0x27, 0x60, 0x21, 0x87, 0xad, 0x3b, 0xeb, 0xee, 0x65, 0xcb, 0x84, 0x42, 0x3b, 0xb4, 0xf4, 0x75, 0x37 }; /* QIUTx = d1bd3a3efabf4767fe6380bdf0dbf49d52d4cf0cbb89404c */ /* QIUTy = c150c2b4c8b3aa35f765f847e4f7f8fd8704d241a181ee99 */ static const uint8_t nist_kas_ecc_cdh_testvector_13_out[] = { /* ZIUT */ 0x1b, 0xfe, 0x9e, 0x5a, 0x20, 0xac, 0x7a, 0x38, 0xd8, 0xf6, 0x05, 0xb4, 0x25, 0xbb, 0x90, 0x30, 0xbe, 0x31, 0xef, 0x97, 0xc1, 0x01, 0xc7, 0x6c }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_14_public_x[] = { /* QCAVSx */ 0x9e, 0x0a, 0x69, 0x49, 0x51, 0x9c, 0x7f, 0x5b, 0xe6, 0x8c, 0x04, 0x33, 0xc5, 0xfd, 0xf1, 0x30, 0x64, 0xaa, 0x13, 0xfb, 0x29, 0x48, 0x3d, 0xc3 }; static const uint8_t nist_kas_ecc_cdh_testvector_14_public_y[] = { /* QCAVSy */ 0xe1, 0xc8, 0xba, 0x63, 0xe1, 0xf4, 0x71, 0xdb, 0x23, 0x18, 0x5f, 0x50, 0xd9, 0xc8, 0x71, 0xed, 0xea, 0x21, 0x25, 0x5b, 0x3a, 0x63, 0xb4, 0xb7 }; static const uint8_t nist_kas_ecc_cdh_testvector_14_private[] = { /* dIUT */ 0xb9, 0x70, 0x36, 0x50, 0x08, 0x45, 0x6f, 0x87, 0x58, 0xec, 0xc5, 0xa3, 0xb3, 0x3c, 0xf3, 0xae, 0x6a, 0x8d, 0x56, 0x81, 0x07, 0xa5, 0x21, 0x67 }; /* QIUTx = c1b8610c8c63f8d4abda093b9a11a566044bf65c6faa8999 */ /* QIUTy = a5bc4b3ca095382e9738aee95fe9479b17879b3ad5295559 */ static const uint8_t nist_kas_ecc_cdh_testvector_14_out[] = { /* ZIUT */ 0x0e, 0x8c, 0x49, 0x3a, 0x4a, 0xdc, 0x44, 0x5d, 0xc9, 0x28, 0x8a, 0x3b, 0x9b, 0x27, 0x25, 0x99, 0x22, 0x40, 0x54, 0x59, 0x2d, 0x72, 0x65, 0xb3 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_15_public_x[] = { /* QCAVSx */ 0xbe, 0x08, 0x82, 0x38, 0x90, 0x2e, 0x99, 0x39, 0xb3, 0xd0, 0x54, 0xee, 0xeb, 0x84, 0x92, 0xda, 0xf4, 0xbd, 0xcf, 0x09, 0xa2, 0xab, 0x77, 0xf1 }; static const uint8_t nist_kas_ecc_cdh_testvector_15_public_y[] = { /* QCAVSy */ 0x58, 0xd6, 0x74, 0x9a, 0x3a, 0x92, 0x3d, 0xc8, 0x04, 0x40, 0xf2, 0x66, 0x1f, 0xd3, 0x5b, 0x65, 0x16, 0x17, 0xe6, 0x52, 0x94, 0xb4, 0x63, 0x75 }; static const uint8_t nist_kas_ecc_cdh_testvector_15_private[] = { /* dIUT */ 0x59, 0xc1, 0x5b, 0x8a, 0x24, 0x64, 0xe4, 0x1d, 0xfe, 0x43, 0x71, 0xc7, 0xf7, 0xda, 0xdf, 0x47, 0x0a, 0xe4, 0x25, 0x54, 0x4f, 0x81, 0x13, 0xbd }; /* QIUTx = 1fe776f73567b6ac0b0d6764164de6c5be751ba8d1ff455e */ /* QIUTy = 4c160bf38afb2b71f684261664115ce874553e8b059432d2 */ static const uint8_t nist_kas_ecc_cdh_testvector_15_out[] = { /* ZIUT */ 0x0f, 0x19, 0x91, 0x08, 0x6b, 0x45, 0x5d, 0xed, 0x6a, 0x1c, 0x41, 0x46, 0xf7, 0xbf, 0x59, 0xfe, 0x9b, 0x49, 0x5d, 0xe5, 0x66, 0xeb, 0xc6, 0xbf }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_16_public_x[] = { /* QCAVSx */ 0xbf, 0x5a, 0xe0, 0x50, 0x25, 0xe1, 0xbe, 0x61, 0x7e, 0x66, 0x6d, 0x87, 0xa4, 0x16, 0x83, 0x63, 0x87, 0x3d, 0x57, 0x61, 0xb3, 0x76, 0xb5, 0x03 }; static const uint8_t nist_kas_ecc_cdh_testvector_16_public_y[] = { /* QCAVSy */ 0xe1, 0xe6, 0xe3, 0x8b, 0x37, 0x2b, 0x6b, 0xee, 0x0f, 0xf5, 0xb3, 0x50, 0x2d, 0x83, 0x73, 0x5e, 0x3b, 0x2c, 0x26, 0x82, 0x5e, 0x4f, 0x0f, 0xcc }; static const uint8_t nist_kas_ecc_cdh_testvector_16_private[] = { /* dIUT */ 0xa6, 0xe9, 0xb8, 0x85, 0xc6, 0x6b, 0x95, 0x9d, 0x1f, 0xc2, 0x70, 0x8d, 0x59, 0x1b, 0x6d, 0x32, 0x28, 0xe4, 0x9e, 0xb9, 0x8f, 0x72, 0x6d, 0x61 }; /* QIUTx = 632bb7651dbf49dde9dd125d13fb234e06617723beed3d1b */ /* QIUTy = f4ad5209638488397c5f44f994dd7479807e79f4887d2e71 */ static const uint8_t nist_kas_ecc_cdh_testvector_16_out[] = { /* ZIUT */ 0xb3, 0x0f, 0x21, 0x27, 0xc3, 0x4d, 0xf3, 0x5a, 0xaa, 0x91, 0xdb, 0xf0, 0xbb, 0xe1, 0x57, 0x98, 0xe7, 0x99, 0xa0, 0x3e, 0xd1, 0x16, 0x98, 0xc1 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_17_public_x[] = { /* QCAVSx */ 0x6c, 0xc4, 0xfe, 0xed, 0x84, 0xc7, 0xab, 0x0d, 0x09, 0x00, 0x5d, 0x66, 0x0e, 0xd3, 0x4d, 0xe6, 0x95, 0x5a, 0x94, 0x61, 0xc4, 0x13, 0x8d, 0x11 }; static const uint8_t nist_kas_ecc_cdh_testvector_17_public_y[] = { /* QCAVSy */ 0x31, 0x22, 0x5f, 0x33, 0x86, 0x4e, 0xd4, 0x8d, 0xa0, 0x6f, 0xa4, 0x5a, 0x91, 0x3b, 0x46, 0xcf, 0x42, 0x55, 0x77, 0x42, 0xe3, 0x50, 0x85, 0xe6 }; static const uint8_t nist_kas_ecc_cdh_testvector_17_private[] = { /* dIUT */ 0xbd, 0xb7, 0x54, 0x09, 0x6f, 0xfb, 0xfb, 0xd8, 0xb0, 0xf3, 0xcb, 0x04, 0x6c, 0xcb, 0x7c, 0xa1, 0x49, 0xc4, 0xe7, 0x19, 0x20, 0x67, 0xa3, 0xee }; /* QIUTx = d9c098d421d741f6faab116f3e4731d28c5558e19fe112a1 */ /* QIUTy = 38d4dc48ccdb1d3ed8d31fd06784a4f87a68aec1cbd5b08f */ static const uint8_t nist_kas_ecc_cdh_testvector_17_out[] = { /* ZIUT */ 0x64, 0xa5, 0xc2, 0x46, 0x59, 0x9d, 0x3e, 0x81, 0x77, 0xa2, 0x40, 0x2a, 0x11, 0x10, 0xeb, 0x81, 0xe6, 0xc4, 0x56, 0xab, 0x4e, 0xdb, 0x51, 0x27 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_18_public_x[] = { /* QCAVSx */ 0x36, 0x15, 0x73, 0x15, 0xbe, 0xe7, 0xaf, 0xed, 0xde, 0xd5, 0x8c, 0x4e, 0x8b, 0xa1, 0x4d, 0x34, 0x21, 0xc4, 0x01, 0xe5, 0x11, 0x35, 0xbc, 0xc9 }; static const uint8_t nist_kas_ecc_cdh_testvector_18_public_y[] = { /* QCAVSy */ 0x37, 0xc2, 0x97, 0xca, 0x70, 0x3f, 0x77, 0xc5, 0x2b, 0xb0, 0x62, 0xd8, 0xce, 0x97, 0x1d, 0xb8, 0x40, 0x97, 0xba, 0x0c, 0x75, 0x3a, 0x41, 0x8f }; static const uint8_t nist_kas_ecc_cdh_testvector_18_private[] = { /* dIUT */ 0xd5, 0xbc, 0xf2, 0x53, 0x4d, 0xaf, 0xc3, 0xd9, 0x99, 0x64, 0xc7, 0xbd, 0x63, 0xab, 0x7b, 0xd1, 0x59, 0x99, 0xfe, 0x56, 0xdd, 0x96, 0x9c, 0x42 }; /* QIUTx = fda1d5d28d6fe0e7909d6a8bafa7824db5572ab92ffe7de6 */ /* QIUTy = 134a297c1d9c8bbab249abacd951ed11e5a99f92e7991572 */ static const uint8_t nist_kas_ecc_cdh_testvector_18_out[] = { /* ZIUT */ 0x01, 0x7b, 0x8c, 0xa5, 0x3c, 0x82, 0xfa, 0xb1, 0x63, 0xda, 0x2a, 0xb7, 0x83, 0x96, 0x6a, 0x39, 0xe0, 0x61, 0xb3, 0x2c, 0x8c, 0xfa, 0x33, 0x4d }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_19_public_x[] = { /* QCAVSx */ 0x98, 0x46, 0x4d, 0x47, 0xf0, 0x25, 0x6f, 0x82, 0x92, 0xe0, 0x27, 0xe8, 0xc9, 0x25, 0x82, 0xea, 0x77, 0xcf, 0x90, 0x51, 0xf5, 0xce, 0x8e, 0x5d }; static const uint8_t nist_kas_ecc_cdh_testvector_19_public_y[] = { /* QCAVSy */ 0x44, 0x95, 0x52, 0xef, 0x75, 0x78, 0xbe, 0x96, 0x23, 0x6f, 0xe5, 0xed, 0x9d, 0x06, 0x43, 0xc0, 0xbb, 0x6c, 0x5a, 0x91, 0x34, 0xb0, 0x10, 0x8d }; static const uint8_t nist_kas_ecc_cdh_testvector_19_private[] = { /* dIUT */ 0x43, 0xd4, 0xb9, 0xdf, 0x10, 0x53, 0xbe, 0x5b, 0x42, 0x68, 0x10, 0x4c, 0x02, 0x24, 0x4d, 0x3b, 0xf9, 0x59, 0x4b, 0x01, 0x0b, 0x46, 0xa8, 0xb2 }; /* QIUTx = c3020b7091463d788f1f1d76f7cfeec82ecdb3b7d99c345c */ /* QIUTy = 9a7710d5179591d8f3df0aa122301768ae7db7eee2d7f583 */ static const uint8_t nist_kas_ecc_cdh_testvector_19_out[] = { /* ZIUT */ 0x34, 0x0e, 0xf3, 0xdb, 0x3d, 0xbe, 0xbd, 0xd9, 0x1c, 0x62, 0xc3, 0xd4, 0xe1, 0xa3, 0xda, 0x2c, 0x7c, 0x52, 0xa3, 0x33, 0x8b, 0x86, 0x52, 0x59 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_20_public_x[] = { /* QCAVSx */ 0x56, 0x3e, 0xb6, 0x6c, 0x33, 0x4c, 0xf6, 0xf1, 0x23, 0xbf, 0x04, 0xc7, 0x80, 0x3b, 0x48, 0xa3, 0x11, 0x02, 0x14, 0x23, 0x7e, 0x98, 0x3b, 0xf5 }; static const uint8_t nist_kas_ecc_cdh_testvector_20_public_y[] = { /* QCAVSy */ 0x0f, 0x35, 0x11, 0x04, 0x81, 0x91, 0x99, 0xef, 0x07, 0xc9, 0xa6, 0x05, 0x1d, 0x20, 0x75, 0x8f, 0x3a, 0xf7, 0x90, 0x27, 0xea, 0x66, 0xa5, 0x3f }; static const uint8_t nist_kas_ecc_cdh_testvector_20_private[] = { /* dIUT */ 0x94, 0xca, 0xc2, 0xc2, 0xca, 0x71, 0x47, 0x46, 0x40, 0x16, 0x70, 0xd9, 0x4e, 0xdb, 0xf3, 0xf6, 0x77, 0x86, 0x7b, 0x5a, 0x03, 0xbe, 0xe7, 0xad }; /* QIUTx = b18554a2e743ef0aa2f040987c4c451004e096df3d80ddae */ /* QIUTy = 6e3e2c618f896e36ba620077684b70a05ffb79bf5e6c7640 */ static const uint8_t nist_kas_ecc_cdh_testvector_20_out[] = { /* ZIUT */ 0x21, 0x62, 0x14, 0x49, 0x21, 0xdf, 0x51, 0x03, 0xd0, 0xe6, 0xa6, 0x50, 0xfb, 0x13, 0xfd, 0x24, 0x6f, 0x47, 0x38, 0xd0, 0x89, 0x6c, 0xe9, 0x2f }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_21_public_x[] = { /* QCAVSx */ 0x86, 0x82, 0x8c, 0x4a, 0xc9, 0x2b, 0x55, 0x07, 0x61, 0x8a, 0xec, 0x78, 0x73, 0xa1, 0xd4, 0xfc, 0x65, 0x43, 0xc5, 0xbe, 0x33, 0xcf, 0x30, 0x78 }; static const uint8_t nist_kas_ecc_cdh_testvector_21_public_y[] = { /* QCAVSy */ 0xb2, 0x2c, 0xa7, 0x24, 0x37, 0x54, 0x5e, 0x10, 0xd6, 0xd4, 0xf0, 0x52, 0x42, 0x2e, 0xb8, 0x98, 0xb7, 0x37, 0xa4, 0xb8, 0x54, 0x3e, 0xe5, 0x50 }; static const uint8_t nist_kas_ecc_cdh_testvector_21_private[] = { /* dIUT */ 0x2a, 0x3a, 0x9e, 0x33, 0xc8, 0xcc, 0x31, 0x07, 0xa9, 0xf9, 0x26, 0x5c, 0x3b, 0xde, 0xa1, 0x20, 0x65, 0x70, 0xe8, 0x6f, 0x92, 0xac, 0x70, 0x14 }; /* QIUTx = a7ba38be1bc669dd23ccfcee0645b1f0db8cf942deafaeb6 */ /* QIUTy = b82db79d80cd0e37f28d4163adc389dee8fc7797b5c9831b */ static const uint8_t nist_kas_ecc_cdh_testvector_21_out[] = { /* ZIUT */ 0x4c, 0x69, 0xe7, 0xfe, 0xed, 0x4b, 0x11, 0x15, 0x9a, 0xdf, 0xc1, 0x6a, 0x60, 0x47, 0xa9, 0x25, 0x72, 0xea, 0x44, 0xe0, 0x74, 0x0b, 0x23, 0xaf }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_22_public_x[] = { /* QCAVSx */ 0x67, 0x00, 0xa1, 0x02, 0x43, 0x77, 0x81, 0xa9, 0x58, 0x1d, 0xa2, 0xbc, 0x25, 0xce, 0xd5, 0xab, 0xf4, 0x19, 0xda, 0x91, 0xd3, 0xc8, 0x03, 0xdf }; static const uint8_t nist_kas_ecc_cdh_testvector_22_public_y[] = { /* QCAVSy */ 0x71, 0x39, 0x6c, 0x9c, 0xf0, 0x8b, 0xcd, 0x91, 0x85, 0x4e, 0x3e, 0x6e, 0x42, 0xd8, 0xc6, 0x57, 0xce, 0x0f, 0x27, 0xab, 0x77, 0xa9, 0xdc, 0x4b }; static const uint8_t nist_kas_ecc_cdh_testvector_22_private[] = { /* dIUT */ 0x4a, 0x6b, 0x78, 0xa9, 0x8a, 0xc9, 0x8f, 0xa8, 0xe9, 0x9a, 0x8e, 0xce, 0x08, 0xec, 0x02, 0x51, 0x12, 0x5f, 0x85, 0xc6, 0xfd, 0x0e, 0x28, 0x9b }; /* QIUTx = e769dbbcd5ce2d83514b768d3d2d5aa0bcd8f66af15f5500 */ /* QIUTy = 2fc6d0b039e0f28f74fbeffe9e883d4dd72296e4e95cae71 */ static const uint8_t nist_kas_ecc_cdh_testvector_22_out[] = { /* ZIUT */ 0x46, 0x07, 0x2a, 0xce, 0xfd, 0x67, 0xbf, 0xf5, 0x0d, 0xe3, 0x55, 0xca, 0x7a, 0x31, 0xfa, 0x6b, 0xe5, 0x9f, 0x26, 0xe4, 0x67, 0x58, 0x72, 0x59 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_23_public_x[] = { /* QCAVSx */ 0xa8, 0x2f, 0x35, 0x4c, 0xf9, 0x7b, 0xee, 0x5d, 0x22, 0xdc, 0x6c, 0x07, 0x9f, 0x29, 0x02, 0xea, 0xd4, 0x4d, 0x96, 0xa8, 0xf6, 0x14, 0xf1, 0x78 }; static const uint8_t nist_kas_ecc_cdh_testvector_23_public_y[] = { /* QCAVSy */ 0xa6, 0x54, 0xa9, 0xaa, 0x8a, 0x1a, 0x08, 0x02, 0xf2, 0xce, 0x0e, 0xe8, 0xa0, 0xf4, 0xeb, 0xe9, 0x6d, 0xee, 0x1b, 0x37, 0x46, 0x4b, 0x1f, 0xf2 }; static const uint8_t nist_kas_ecc_cdh_testvector_23_private[] = { /* dIUT */ 0xc5, 0xa6, 0x49, 0x1d, 0x78, 0x84, 0x4d, 0x66, 0x17, 0xef, 0x33, 0xbe, 0x6b, 0x8b, 0xd5, 0x4d, 0xa2, 0x21, 0x45, 0x08, 0x85, 0xd5, 0x95, 0x0f }; /* QIUTx = db1b24f7466bc154e9d7d2c3ca52dcfe0bfc9563c5fdb6f3 */ /* QIUTy = 1c74fbbf5bd99921f1a9a744f8e1cf770bd6a76a772b3003 */ static const uint8_t nist_kas_ecc_cdh_testvector_23_out[] = { /* ZIUT */ 0xec, 0x55, 0x80, 0xea, 0xbc, 0xa9, 0xf3, 0x38, 0x9d, 0x2b, 0x42, 0x7d, 0xdf, 0x6e, 0x49, 0xe2, 0x6d, 0x62, 0x9a, 0xfd, 0x03, 0xfa, 0x76, 0x6e }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_24_public_x[] = { /* QCAVSx */ 0x3c, 0xec, 0x21, 0xb2, 0x86, 0x68, 0xa1, 0x2a, 0x2c, 0xf7, 0x8e, 0x1a, 0x8e, 0x55, 0xd0, 0xef, 0xe0, 0x65, 0x15, 0x2f, 0xff, 0xc3, 0x47, 0x18 }; static const uint8_t nist_kas_ecc_cdh_testvector_24_public_y[] = { /* QCAVSy */ 0x10, 0x29, 0x55, 0x7b, 0xeb, 0xa4, 0xff, 0x19, 0x92, 0xbd, 0x21, 0xc2, 0x3c, 0xb4, 0x82, 0x5f, 0x6d, 0xae, 0x70, 0xe3, 0x31, 0x8f, 0xd1, 0xca }; static const uint8_t nist_kas_ecc_cdh_testvector_24_private[] = { /* dIUT */ 0x2b, 0xa2, 0x70, 0x3c, 0x5e, 0x23, 0xf6, 0x46, 0x3c, 0x5b, 0x88, 0xdc, 0x37, 0x29, 0x2f, 0xab, 0xd3, 0x39, 0x9b, 0x5e, 0x1f, 0xb6, 0x7c, 0x05 }; /* QIUTx = 7543148906cef9b37a71a7c08363cdd3bba50142d65241aa */ /* QIUTy = 8b3a6973de8dc271e27c1ead1e962fdaae3710c724daac38 */ static const uint8_t nist_kas_ecc_cdh_testvector_24_out[] = { /* ZIUT */ 0x7f, 0x39, 0x29, 0xdd, 0x3c, 0xbf, 0x76, 0x73, 0xbc, 0x30, 0xd8, 0x59, 0xd9, 0x0b, 0x88, 0x03, 0x07, 0x47, 0x5f, 0x80, 0x06, 0x60, 0xea, 0x32 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_25_public_x[] = { /* QCAVSx */ 0x70, 0x82, 0x64, 0x47, 0x15, 0xb8, 0xb7, 0x31, 0xf8, 0x22, 0x8b, 0x51, 0x18, 0xe7, 0x27, 0x0d, 0x34, 0xd1, 0x81, 0xf3, 0x61, 0xa2, 0x21, 0xfc }; static const uint8_t nist_kas_ecc_cdh_testvector_25_public_y[] = { /* QCAVSy */ 0x46, 0x46, 0x49, 0xd6, 0xc8, 0x8c, 0xa8, 0x96, 0x14, 0x48, 0x8a, 0x1c, 0xc7, 0xb8, 0x44, 0x2b, 0xb4, 0x2f, 0x9f, 0xb3, 0x02, 0x0a, 0x3d, 0x76 }; static const uint8_t nist_kas_ecc_cdh_testvector_25_private[] = { /* dIUT */ 0x83, 0x61, 0x18, 0xc6, 0x24, 0x8f, 0x88, 0x2e, 0x91, 0x47, 0x97, 0x6f, 0x76, 0x48, 0x26, 0xc1, 0xa2, 0x87, 0x55, 0xa6, 0x10, 0x29, 0x77, 0xd5 }; /* QIUTx = fcd345a976c720caaa97de6697226825615e1287a9eff67e */ /* QIUTy = 58ea42edbeeafca9ff44cfd7f29abd2cbde7626d79e422c9 */ static const uint8_t nist_kas_ecc_cdh_testvector_25_out[] = { /* ZIUT */ 0x72, 0xe8, 0x8f, 0x3e, 0xa6, 0x7d, 0x46, 0xd4, 0x6d, 0xbf, 0x83, 0x92, 0x6e, 0x7e, 0x2a, 0x6b, 0x85, 0xb5, 0x45, 0x36, 0x74, 0x1e, 0x6d, 0x2c }; /* [P-224] */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_26_public_x[] = { /* QCAVSx */ 0xaf, 0x33, 0xcd, 0x06, 0x29, 0xbc, 0x7e, 0x99, 0x63, 0x20, 0xa3, 0xf4, 0x03, 0x68, 0xf7, 0x4d, 0xe8, 0x70, 0x4f, 0xa3, 0x7b, 0x8f, 0xab, 0x69, 0xab, 0xaa, 0xe2, 0x80 }; static const uint8_t nist_kas_ecc_cdh_testvector_26_public_y[] = { /* QCAVSy */ 0x88, 0x20, 0x92, 0xcc, 0xbb, 0xa7, 0x93, 0x0f, 0x41, 0x9a, 0x8a, 0x4f, 0x9b, 0xb1, 0x69, 0x78, 0xbb, 0xc3, 0x83, 0x87, 0x29, 0x99, 0x25, 0x59, 0xa6, 0xf2, 0xe2, 0xd7 }; static const uint8_t nist_kas_ecc_cdh_testvector_26_private[] = { /* dIUT */ 0x83, 0x46, 0xa6, 0x0f, 0xc6, 0xf2, 0x93, 0xca, 0x5a, 0x0d, 0x2a, 0xf6, 0x8b, 0xa7, 0x1d, 0x1d, 0xd3, 0x89, 0xe5, 0xe4, 0x08, 0x37, 0x94, 0x2d, 0xf3, 0xe4, 0x3c, 0xbd }; /* QIUTx = 8de2e26adf72c582d6568ef638c4fd59b18da171bdf501f1d929e048 */ /* QIUTy = 4a68a1c2b0fb22930d120555c1ece50ea98dea8407f71be36efac0de */ static const uint8_t nist_kas_ecc_cdh_testvector_26_out[] = { /* ZIUT */ 0x7d, 0x96, 0xf9, 0xa3, 0xbd, 0x3c, 0x05, 0xcf, 0x5c, 0xc3, 0x7f, 0xeb, 0x8b, 0x9d, 0x52, 0x09, 0xd5, 0xc2, 0x59, 0x74, 0x64, 0xde, 0xc3, 0xe9, 0x98, 0x37, 0x43, 0xe8 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_27_public_x[] = { /* QCAVSx */ 0x13, 0xbf, 0xcd, 0x4f, 0x8e, 0x94, 0x42, 0x39, 0x3c, 0xab, 0x8f, 0xb4, 0x6b, 0x9f, 0x05, 0x66, 0xc2, 0x26, 0xb2, 0x2b, 0x37, 0x07, 0x69, 0x76, 0xf0, 0x61, 0x7a, 0x46 }; static const uint8_t nist_kas_ecc_cdh_testvector_27_public_y[] = { /* QCAVSy */ 0xee, 0xb2, 0x42, 0x75, 0x29, 0xb2, 0x88, 0xc6, 0x3c, 0x2f, 0x89, 0x63, 0xc1, 0xe4, 0x73, 0xdf, 0x2f, 0xca, 0x6c, 0xaa, 0x90, 0xd5, 0x2e, 0x2f, 0x8d, 0xb5, 0x6d, 0xd4 }; static const uint8_t nist_kas_ecc_cdh_testvector_27_private[] = { /* dIUT */ 0x04, 0x3c, 0xb2, 0x16, 0xf4, 0xb7, 0x2c, 0xdf, 0x76, 0x29, 0xd6, 0x37, 0x20, 0xa5, 0x4a, 0xee, 0x0c, 0x99, 0xeb, 0x32, 0xd7, 0x44, 0x77, 0xda, 0xc0, 0xc2, 0xf7, 0x3d }; /* QIUTx = 2f90f5c8eac9c7decdbb97b6c2f715ab725e4fe40fe6d746efbf4e1b */ /* QIUTy = 66897351454f927a309b269c5a6d31338be4c19a5acfc32cf656f45c */ static const uint8_t nist_kas_ecc_cdh_testvector_27_out[] = { /* ZIUT */ 0xee, 0x93, 0xce, 0x06, 0xb8, 0x9f, 0xf7, 0x20, 0x09, 0xe8, 0x58, 0xc6, 0x8e, 0xb7, 0x08, 0xe7, 0xbc, 0x79, 0xee, 0x03, 0x00, 0xf7, 0x3b, 0xed, 0x69, 0xbb, 0xca, 0x09 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_28_public_x[] = { /* QCAVSx */ 0x75, 0x6d, 0xd8, 0x06, 0xb9, 0xd9, 0xc3, 0x4d, 0x89, 0x96, 0x91, 0xec, 0xb4, 0x5b, 0x77, 0x1a, 0xf4, 0x68, 0xec, 0x00, 0x44, 0x86, 0xa0, 0xfd, 0xd2, 0x83, 0x41, 0x1e }; static const uint8_t nist_kas_ecc_cdh_testvector_28_public_y[] = { /* QCAVSy */ 0x4d, 0x02, 0xc2, 0xca, 0x61, 0x7b, 0xb2, 0xc5, 0xd9, 0x61, 0x3f, 0x25, 0xdd, 0x72, 0x41, 0x3d, 0x22, 0x9f, 0xd2, 0x90, 0x15, 0x13, 0xaa, 0x29, 0x50, 0x4e, 0xee, 0xfb }; static const uint8_t nist_kas_ecc_cdh_testvector_28_private[] = { /* dIUT */ 0x5a, 0xd0, 0xdd, 0x6d, 0xba, 0xbb, 0x4f, 0x3c, 0x2e, 0xa5, 0xfe, 0x32, 0xe5, 0x61, 0xb2, 0xca, 0x55, 0x08, 0x14, 0x86, 0xdf, 0x2c, 0x7c, 0x15, 0xc9, 0x62, 0x2b, 0x08 }; /* QIUTx = 005bca45d793e7fe99a843704ed838315ab14a5f6277507e9bc37531 */ /* QIUTy = 43e9d421e1486ae5893bfd23c210e5c140d7c6b1ada59d842c9a98de */ static const uint8_t nist_kas_ecc_cdh_testvector_28_out[] = { /* ZIUT */ 0x3f, 0xcc, 0x01, 0xe3, 0x4d, 0x44, 0x49, 0xda, 0x2a, 0x97, 0x4b, 0x23, 0xfc, 0x36, 0xf9, 0x56, 0x67, 0x54, 0x25, 0x9d, 0x39, 0x14, 0x97, 0x90, 0xcf, 0xa1, 0xeb, 0xd3 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_29_public_x[] = { /* QCAVSx */ 0x0f, 0x53, 0x7b, 0xf1, 0xc1, 0x12, 0x2c, 0x55, 0x65, 0x6d, 0x25, 0xe8, 0xaa, 0x84, 0x17, 0xe0, 0xb4, 0x4b, 0x15, 0x26, 0xae, 0x05, 0x23, 0x14, 0x4f, 0x99, 0x21, 0xc4 }; static const uint8_t nist_kas_ecc_cdh_testvector_29_public_y[] = { /* QCAVSy */ 0xf7, 0x9b, 0x26, 0xd3, 0x0e, 0x49, 0x1a, 0x77, 0x36, 0x96, 0xcc, 0x2c, 0x79, 0xb4, 0xf0, 0x59, 0x6b, 0xc5, 0xb9, 0xee, 0xba, 0xf3, 0x94, 0xd1, 0x62, 0xfb, 0x86, 0x84 }; static const uint8_t nist_kas_ecc_cdh_testvector_29_private[] = { /* dIUT */ 0x0a, 0xa6, 0xff, 0x55, 0xa5, 0xd8, 0x20, 0xef, 0xcb, 0x4e, 0x7d, 0x10, 0xb8, 0x45, 0xea, 0x3c, 0x9f, 0x9b, 0xc5, 0xdf, 0xf8, 0x61, 0x06, 0xdb, 0x85, 0x31, 0x8e, 0x22 }; /* QIUTx = 2f96754131e0968198aa78fbe8c201dc5f3581c792de487340d32448 */ /* QIUTy = 61e8a5cd79615203b6d89e9496f9e236fe3b6be8731e743d615519c6 */ static const uint8_t nist_kas_ecc_cdh_testvector_29_out[] = { /* ZIUT */ 0x49, 0x12, 0x96, 0x28, 0xb2, 0x3a, 0xfc, 0xef, 0x48, 0x13, 0x9a, 0x3f, 0x6f, 0x59, 0xff, 0x5e, 0x98, 0x11, 0xaa, 0x74, 0x6a, 0xa4, 0xff, 0x33, 0xc2, 0x4b, 0xb9, 0x40 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_30_public_x[] = { /* QCAVSx */ 0x2b, 0x36, 0x31, 0xd2, 0xb0, 0x61, 0x79, 0xb3, 0x17, 0x4a, 0x10, 0x0f, 0x7f, 0x57, 0x13, 0x1e, 0xee, 0xa8, 0x94, 0x7b, 0xe0, 0x78, 0x6c, 0x3d, 0xc6, 0x4b, 0x22, 0x39 }; static const uint8_t nist_kas_ecc_cdh_testvector_30_public_y[] = { /* QCAVSy */ 0x83, 0xde, 0x29, 0xae, 0x3d, 0xad, 0x31, 0xad, 0xc0, 0x23, 0x6c, 0x6d, 0xe7, 0xf1, 0x45, 0x61, 0xca, 0x2e, 0xa0, 0x83, 0xc5, 0x27, 0x0c, 0x78, 0xa2, 0xe6, 0xcb, 0xc0 }; static const uint8_t nist_kas_ecc_cdh_testvector_30_private[] = { /* dIUT */ 0xef, 0xe6, 0xe6, 0xe2, 0x5a, 0xff, 0xaf, 0x54, 0xc9, 0x8d, 0x00, 0x2a, 0xbb, 0xc6, 0x32, 0x8d, 0xa1, 0x59, 0x40, 0x5a, 0x1b, 0x75, 0x2e, 0x32, 0xdc, 0x23, 0x95, 0x0a }; /* QIUTx = 355e962920bde043695f6bffb4b355c63da6f5de665ed46f2ec817e2 */ /* QIUTy = 748e095368f62e1d364edd461719793b404adbdaacbcadd88922ff37 */ static const uint8_t nist_kas_ecc_cdh_testvector_30_out[] = { /* ZIUT */ 0xfc, 0xdc, 0x69, 0xa4, 0x05, 0x01, 0xd3, 0x08, 0xa6, 0x83, 0x96, 0x53, 0xa8, 0xf0, 0x43, 0x09, 0xec, 0x00, 0x23, 0x39, 0x49, 0x52, 0x29, 0x02, 0xff, 0xa5, 0xea, 0xc6 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_31_public_x[] = { /* QCAVSx */ 0x45, 0x11, 0x40, 0x3d, 0xe2, 0x90, 0x59, 0xf6, 0x9a, 0x47, 0x5c, 0x5a, 0x6a, 0x5f, 0x6c, 0xab, 0xed, 0x5d, 0x9f, 0x01, 0x44, 0x36, 0xa8, 0xcb, 0x70, 0xa0, 0x23, 0x38 }; static const uint8_t nist_kas_ecc_cdh_testvector_31_public_y[] = { /* QCAVSy */ 0x7d, 0x2d, 0x1b, 0x62, 0xaa, 0x04, 0x6d, 0xf9, 0x34, 0x0f, 0x9c, 0x37, 0xa0, 0x87, 0xa0, 0x6b, 0x32, 0xcf, 0x7f, 0x08, 0xa2, 0x23, 0xf9, 0x92, 0x81, 0x2a, 0x82, 0x8b }; static const uint8_t nist_kas_ecc_cdh_testvector_31_private[] = { /* dIUT */ 0x61, 0xcb, 0x29, 0x32, 0x52, 0x40, 0x01, 0xe5, 0xe9, 0xee, 0xed, 0x6d, 0xf7, 0xd9, 0xc8, 0x93, 0x5e, 0xe3, 0x32, 0x20, 0x29, 0xed, 0xd7, 0xaa, 0x8a, 0xcb, 0xfd, 0x51 }; /* QIUTx = d50e4adabfd989d7dbc7cf4052546cc7c447a97630436997ad4b9536 */ /* QIUTy = 5bea503473c5eaef9552d42c40b1f2f7ca292733b255b9bbe1b12337 */ static const uint8_t nist_kas_ecc_cdh_testvector_31_out[] = { /* ZIUT */ 0x82, 0x7e, 0x90, 0x25, 0xcb, 0x62, 0xe0, 0xe8, 0x37, 0xc5, 0x96, 0x06, 0x3f, 0x3b, 0x9b, 0x5a, 0x0f, 0x7a, 0xfd, 0x8d, 0x87, 0x83, 0x20, 0x00, 0x86, 0xd6, 0x1e, 0xc1 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_32_public_x[] = { /* QCAVSx */ 0x31, 0x4a, 0x0b, 0x26, 0xdd, 0x31, 0xc2, 0x48, 0x84, 0x5d, 0x7c, 0xc1, 0x7b, 0x61, 0xca, 0xd4, 0x60, 0x82, 0x59, 0xbe, 0xd8, 0x5a, 0x58, 0xd1, 0xf1, 0xff, 0xd3, 0x78 }; static const uint8_t nist_kas_ecc_cdh_testvector_32_public_y[] = { /* QCAVSy */ 0x66, 0xe4, 0xb3, 0x50, 0x35, 0x2e, 0x11, 0x9e, 0xec, 0xad, 0xa3, 0x82, 0x90, 0x7f, 0x36, 0x19, 0xfd, 0x74, 0x8e, 0xa7, 0x3a, 0xe4, 0x89, 0x9d, 0xfd, 0x49, 0x63, 0x02 }; static const uint8_t nist_kas_ecc_cdh_testvector_32_private[] = { /* dIUT */ 0x8c, 0x7a, 0xce, 0x34, 0x71, 0x71, 0xf9, 0x2d, 0xef, 0x98, 0xd8, 0x45, 0x47, 0x5f, 0xc8, 0x2e, 0x1d, 0x14, 0x96, 0xda, 0x81, 0xee, 0x58, 0xf5, 0x05, 0xb9, 0x85, 0xfa }; /* QIUTx = b1a8dcac89aca2799320b451df1c7ff4d97567abb68141c0d95fc2aa */ /* QIUTy = 3524950902b1510bdc987d860afc27ad871ceaea66935abd3c0a99a8 */ static const uint8_t nist_kas_ecc_cdh_testvector_32_out[] = { /* ZIUT */ 0x33, 0x5b, 0xa5, 0x12, 0x28, 0xd9, 0x4a, 0xcb, 0xed, 0x85, 0x1c, 0xa7, 0x82, 0x1c, 0x80, 0x1d, 0x5c, 0xb1, 0xc7, 0x97, 0x5d, 0x7a, 0xa9, 0x0a, 0x71, 0x59, 0xf8, 0xfa }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_33_public_x[] = { /* QCAVSx */ 0xab, 0xe6, 0x84, 0x3b, 0xee, 0xc2, 0xfd, 0x9e, 0x5f, 0xb6, 0x47, 0x30, 0xd0, 0xbe, 0x4d, 0x16, 0x54, 0x38, 0xce, 0x92, 0x2e, 0xd7, 0x5d, 0xd8, 0x0b, 0x46, 0x03, 0xe5 }; static const uint8_t nist_kas_ecc_cdh_testvector_33_public_y[] = { /* QCAVSy */ 0x6a, 0xfe, 0x86, 0x73, 0xa9, 0x6c, 0x4b, 0xa9, 0x90, 0x0a, 0xd8, 0x59, 0x95, 0xe6, 0x31, 0xe4, 0x36, 0xc6, 0xcc, 0x88, 0xa2, 0xc2, 0xb4, 0x7b, 0x7c, 0x48, 0x86, 0xb8 }; static const uint8_t nist_kas_ecc_cdh_testvector_33_private[] = { /* dIUT */ 0x38, 0x2f, 0xeb, 0x9b, 0x9b, 0xa1, 0x0f, 0x18, 0x9d, 0x99, 0xe7, 0x1a, 0x89, 0xcd, 0xfe, 0x44, 0xcb, 0x55, 0x4c, 0xec, 0x13, 0xa2, 0x12, 0x84, 0x09, 0x77, 0xfb, 0x68 }; /* QIUTx = abb6f1e3773ff8fc73aea2a0b107809ce70adcefed6e41fc5cb43045 */ /* QIUTy = a963897ae906c10a055eeadb97ffdd6f748d3e5621e5fff304e48ba7 */ static const uint8_t nist_kas_ecc_cdh_testvector_33_out[] = { /* ZIUT */ 0x8c, 0x2e, 0x62, 0x75, 0x94, 0x20, 0x6b, 0x34, 0xf7, 0x35, 0x6d, 0x34, 0x26, 0xeb, 0x3d, 0x79, 0xf5, 0x18, 0xef, 0x84, 0x3f, 0xbe, 0x94, 0x01, 0x4c, 0xce, 0xac, 0xe3 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_34_public_x[] = { /* QCAVSx */ 0x13, 0xcf, 0x9d, 0x6d, 0x2c, 0x9a, 0xae, 0x82, 0x74, 0xc2, 0x7d, 0x44, 0x6a, 0xfd, 0x0c, 0x88, 0x8f, 0xfd, 0xd5, 0x2a, 0xe2, 0x99, 0xa3, 0x59, 0x84, 0xd4, 0xf5, 0x27 }; static const uint8_t nist_kas_ecc_cdh_testvector_34_public_y[] = { /* QCAVSy */ 0xdc, 0xbe, 0xe7, 0x5b, 0x51, 0x57, 0x51, 0xf8, 0xee, 0x2a, 0xe3, 0x55, 0xe8, 0xaf, 0xd5, 0xde, 0x21, 0xc6, 0x2a, 0x93, 0x9a, 0x65, 0x07, 0xb5, 0x38, 0xcb, 0xc4, 0xaf }; static const uint8_t nist_kas_ecc_cdh_testvector_34_private[] = { /* dIUT */ 0xe0, 0xd6, 0x20, 0x35, 0x10, 0x1e, 0xf4, 0x87, 0xc4, 0x85, 0xc6, 0x0f, 0xb4, 0x50, 0x0e, 0xeb, 0xe6, 0xa3, 0x2e, 0xc6, 0x4d, 0xbe, 0x97, 0xdb, 0xe0, 0x23, 0x2c, 0x46 }; /* QIUTx = 88537735e9b23e3e0e076f135a82d33f9bffb465f3abce8322a62a62 */ /* QIUTy = b4c8c123673197875c0bd14ed097606d330fba2b9200ef65a44764d3 */ static const uint8_t nist_kas_ecc_cdh_testvector_34_out[] = { /* ZIUT */ 0x63, 0x2a, 0xbb, 0x66, 0x27, 0x28, 0xdb, 0xc9, 0x94, 0x50, 0x88, 0x73, 0xd5, 0xc5, 0x27, 0xca, 0x5e, 0xf9, 0x23, 0xc0, 0xd3, 0x1f, 0xa6, 0xc4, 0x7e, 0xf4, 0xc8, 0x25 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_35_public_x[] = { /* QCAVSx */ 0x96, 0x5b, 0x63, 0x7c, 0x0d, 0xfb, 0xc0, 0xcf, 0x95, 0x40, 0x35, 0x68, 0x6d, 0x70, 0xf7, 0xec, 0x30, 0x92, 0x9e, 0x66, 0x4e, 0x52, 0x1d, 0xba, 0xa2, 0x28, 0x06, 0x59 }; static const uint8_t nist_kas_ecc_cdh_testvector_35_public_y[] = { /* QCAVSy */ 0x82, 0xa5, 0x8f, 0xf6, 0x1b, 0xc9, 0x00, 0x19, 0xbb, 0xcb, 0xb5, 0x87, 0x5d, 0x38, 0x63, 0xdb, 0x0b, 0xc2, 0xa1, 0xfa, 0x34, 0xb0, 0xad, 0x4d, 0xe1, 0xa8, 0x3f, 0x99 }; static const uint8_t nist_kas_ecc_cdh_testvector_35_private[] = { /* dIUT */ 0xb9, 0x6a, 0xde, 0x5b, 0x73, 0xba, 0x72, 0xaa, 0x8b, 0x6e, 0x4d, 0x74, 0xd7, 0xbf, 0x9c, 0x58, 0xe9, 0x62, 0xff, 0x78, 0xeb, 0x54, 0x22, 0x87, 0xc7, 0xb4, 0x4b, 0xa2 }; /* QIUTx = 37682926a54f70a4c1748f54d50d5b00138a055f924f2c65e5b0bbe4 */ /* QIUTy = 596afefcdd640d29635015b89bdddd1f8c2723686d332e7a06ca8799 */ static const uint8_t nist_kas_ecc_cdh_testvector_35_out[] = { /* ZIUT */ 0x34, 0x64, 0x11, 0x41, 0xaa, 0xb0, 0x5e, 0xf5, 0x8b, 0xd3, 0x76, 0xd6, 0x09, 0x34, 0x59, 0x01, 0xfb, 0x8f, 0x63, 0x47, 0x7c, 0x6b, 0xe9, 0x09, 0x7f, 0x03, 0x7f, 0x1f }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_36_public_x[] = { /* QCAVSx */ 0x73, 0xcc, 0x64, 0x53, 0x72, 0xca, 0x2e, 0x71, 0x63, 0x7c, 0xda, 0x94, 0x3d, 0x81, 0x48, 0xf3, 0x38, 0x2a, 0xb6, 0xdd, 0x0f, 0x2e, 0x1a, 0x49, 0xda, 0x94, 0xe1, 0x34 }; static const uint8_t nist_kas_ecc_cdh_testvector_36_public_y[] = { /* QCAVSy */ 0xdf, 0x5c, 0x35, 0x5c, 0x23, 0xe6, 0xe2, 0x32, 0xeb, 0xc3, 0xbe, 0xe2, 0xab, 0x18, 0x73, 0xee, 0x0d, 0x83, 0xe3, 0x38, 0x2f, 0x8e, 0x6f, 0xe6, 0x13, 0xf6, 0x34, 0x3c }; static const uint8_t nist_kas_ecc_cdh_testvector_36_private[] = { /* dIUT */ 0xa4, 0x0d, 0x7e, 0x12, 0x04, 0x9c, 0x71, 0xe6, 0x52, 0x2c, 0x7f, 0xf2, 0x38, 0x42, 0x24, 0x06, 0x1c, 0x3a, 0x45, 0x70, 0x58, 0xb3, 0x10, 0x55, 0x76, 0x55, 0xb8, 0x54 }; /* QIUTx = 399801243bfe0c2da9b0a53c8ca57f2eee87aaa94a8e4d5e029f42ca */ /* QIUTy = aa49e6d4b47cee7a5c4ab71d5a67da84e0b9b425ce3e70da68c889e7 */ static const uint8_t nist_kas_ecc_cdh_testvector_36_out[] = { /* ZIUT */ 0x4f, 0x74, 0xac, 0x85, 0x07, 0x50, 0x1a, 0x32, 0xbf, 0xc5, 0xa7, 0x8d, 0x82, 0x71, 0xc2, 0x00, 0xe8, 0x35, 0x96, 0x6e, 0x18, 0x7e, 0x8d, 0x00, 0x01, 0x1a, 0x8c, 0x75 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_37_public_x[] = { /* QCAVSx */ 0x54, 0x65, 0x78, 0x21, 0x62, 0x50, 0x35, 0x4e, 0x44, 0x9e, 0x21, 0x54, 0x6d, 0xd1, 0x1c, 0xd1, 0xc5, 0x17, 0x42, 0x36, 0x73, 0x9a, 0xca, 0xd9, 0xce, 0x0f, 0x45, 0x12 }; static const uint8_t nist_kas_ecc_cdh_testvector_37_public_y[] = { /* QCAVSy */ 0xd2, 0xa2, 0x2f, 0xcd, 0x66, 0xd1, 0xab, 0xed, 0xc7, 0x67, 0x66, 0x83, 0x27, 0xc5, 0xcb, 0x9c, 0x59, 0x90, 0x43, 0x27, 0x62, 0x39, 0xcf, 0x3c, 0x85, 0x16, 0xaf, 0x24 }; static const uint8_t nist_kas_ecc_cdh_testvector_37_private[] = { /* dIUT */ 0xad, 0x25, 0x19, 0xbc, 0x72, 0x4d, 0x48, 0x4e, 0x02, 0xa6, 0x9f, 0x05, 0x14, 0x9b, 0xb0, 0x47, 0x71, 0x4b, 0xf0, 0xf5, 0x98, 0x6f, 0xac, 0x2e, 0x22, 0x2c, 0xd9, 0x46 }; /* QIUTx = df9c1e0ef15e53b9f626e2be1cbe893639c06f3e0439ee95d7d4b1e3 */ /* QIUTy = 7a52a7386adda243efdf8941085c84e31239cab92b8017336748965e */ static const uint8_t nist_kas_ecc_cdh_testvector_37_out[] = { /* ZIUT */ 0xad, 0x09, 0xc9, 0xae, 0x4d, 0x23, 0x24, 0xea, 0x81, 0xbb, 0x55, 0x5b, 0x20, 0x0d, 0x3c, 0x00, 0x3e, 0x22, 0xa6, 0x87, 0x0e, 0xe0, 0x3b, 0x52, 0xdf, 0x49, 0xe4, 0xde }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_38_public_x[] = { /* QCAVSx */ 0x1d, 0x46, 0xb1, 0xdc, 0x3a, 0x28, 0x12, 0x3c, 0xb5, 0x13, 0x46, 0xe6, 0x7b, 0xae, 0xc5, 0x64, 0x04, 0x86, 0x86, 0x78, 0xfa, 0xf7, 0xd0, 0xe8, 0xb2, 0xaf, 0xa2, 0x2a }; static const uint8_t nist_kas_ecc_cdh_testvector_38_public_y[] = { /* QCAVSy */ 0x0e, 0xc9, 0xe6, 0x5e, 0xc9, 0x7e, 0x21, 0x83, 0x73, 0xe7, 0xfc, 0x11, 0x5c, 0x22, 0x74, 0xd5, 0xb8, 0x29, 0xa6, 0x0d, 0x93, 0xf7, 0x1e, 0x01, 0xd5, 0x81, 0x36, 0xc3 }; static const uint8_t nist_kas_ecc_cdh_testvector_38_private[] = { /* dIUT */ 0x3d, 0x31, 0x2a, 0x9b, 0x9d, 0x8e, 0xd0, 0x91, 0x40, 0x90, 0x0b, 0xba, 0xc1, 0xe0, 0x95, 0x52, 0x7e, 0xbc, 0x9e, 0x3c, 0x64, 0x93, 0xbc, 0xf3, 0x66, 0x6e, 0x3a, 0x29 }; /* QIUTx = b4a0198dc8810e884425b750928b0c960c31f7a99663400b01a179df */ /* QIUTy = 812b601bfc0738242c6f86f830f27acd632ca618a0b5280c9d5769f7 */ static const uint8_t nist_kas_ecc_cdh_testvector_38_out[] = { /* ZIUT */ 0xef, 0x02, 0x9c, 0x28, 0xc6, 0x80, 0x64, 0xb8, 0xab, 0xd2, 0x96, 0x5a, 0x38, 0xc4, 0x04, 0xfb, 0x5e, 0x94, 0x4a, 0xce, 0x57, 0xe8, 0x63, 0x8d, 0xab, 0xa9, 0xd3, 0xcd }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_39_public_x[] = { /* QCAVSx */ 0x26, 0x6d, 0x03, 0x8c, 0xc7, 0xa4, 0xfe, 0x21, 0xf6, 0xc9, 0x76, 0x31, 0x8e, 0x82, 0x7b, 0x82, 0xbb, 0x5b, 0x8f, 0x74, 0x43, 0xa5, 0x52, 0x98, 0x13, 0x65, 0x06, 0xe0 }; static const uint8_t nist_kas_ecc_cdh_testvector_39_public_y[] = { /* QCAVSy */ 0xdf, 0x12, 0x3d, 0x98, 0xa7, 0xa2, 0x0b, 0xbd, 0xf3, 0x94, 0x3d, 0xf2, 0xe3, 0x56, 0x34, 0x22, 0xf8, 0xc0, 0xcf, 0x74, 0xd5, 0x3a, 0xaa, 0xbd, 0xd7, 0xc9, 0x73, 0xba }; static const uint8_t nist_kas_ecc_cdh_testvector_39_private[] = { /* dIUT */ 0x8c, 0xe0, 0x82, 0x2d, 0xc2, 0x4c, 0x15, 0x39, 0x95, 0x75, 0x5a, 0xc3, 0x50, 0x73, 0x7e, 0xf5, 0x06, 0x64, 0x1c, 0x7d, 0x75, 0x2b, 0x4f, 0x93, 0x00, 0xc6, 0x12, 0xed }; /* QIUTx = 00dfc7ec137690cd6d12fdb2fd0b8c5314582108769c2b722ffb3958 */ /* QIUTy = 5eef3da4ba458127346bb64023868bddb7558a2ecfc813645f4ce9fe */ static const uint8_t nist_kas_ecc_cdh_testvector_39_out[] = { /* ZIUT */ 0xf8, 0x3c, 0x16, 0x66, 0x1d, 0xfc, 0xba, 0xd0, 0x21, 0xcc, 0x3b, 0x5a, 0x5a, 0xf5, 0x1d, 0x9a, 0x18, 0xdb, 0x46, 0x53, 0x86, 0x6b, 0x3f, 0xf9, 0x07, 0x87, 0xce, 0x3e }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_40_public_x[] = { /* QCAVSx */ 0xeb, 0x0a, 0x09, 0xf7, 0xa1, 0xc2, 0x36, 0xa6, 0x1f, 0x59, 0x58, 0x09, 0xec, 0x56, 0x70, 0xef, 0xd9, 0x2e, 0x45, 0x98, 0xd5, 0xe6, 0x13, 0xe0, 0x92, 0xcd, 0xfd, 0xca }; static const uint8_t nist_kas_ecc_cdh_testvector_40_public_y[] = { /* QCAVSy */ 0x50, 0x78, 0x7a, 0xe2, 0xf2, 0xf1, 0x5b, 0x88, 0xbc, 0x10, 0xf7, 0xb5, 0xf0, 0xae, 0xe1, 0x41, 0x83, 0x73, 0xf1, 0x61, 0x53, 0xae, 0xbd, 0x1f, 0xba, 0x54, 0x28, 0x8d }; static const uint8_t nist_kas_ecc_cdh_testvector_40_private[] = { /* dIUT */ 0x0f, 0xf9, 0xb4, 0x85, 0x32, 0x5a, 0xb7, 0x7f, 0x29, 0xe7, 0xbc, 0x37, 0x9f, 0xed, 0x74, 0xbf, 0xac, 0x85, 0x94, 0x82, 0xda, 0x0d, 0xee, 0x75, 0x28, 0xc1, 0x9d, 0xb2 }; /* QIUTx = 7e603e6976db83c36011508fa695d1b515249e2e54b48fcbcfb90247 */ /* QIUTy = 0179a600ce86adfca9b1b931fa5173d618da09e841803d19b0264286 */ static const uint8_t nist_kas_ecc_cdh_testvector_40_out[] = { /* ZIUT */ 0xf5, 0x12, 0x58, 0xc6, 0x3f, 0x23, 0x2e, 0x55, 0xa6, 0x6a, 0xa2, 0x5e, 0xbd, 0x59, 0x7b, 0x20, 0x18, 0xd1, 0x05, 0x2c, 0x02, 0xee, 0xb6, 0x38, 0x66, 0x75, 0x80, 0x05 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_41_public_x[] = { /* QCAVSx */ 0x6b, 0x2f, 0x6b, 0x18, 0xa5, 0x87, 0xf5, 0x62, 0xff, 0xc6, 0x1b, 0xd9, 0xb0, 0x04, 0x73, 0x22, 0x28, 0x69, 0x86, 0xa7, 0x8f, 0x1f, 0xd1, 0x39, 0xb8, 0x4f, 0x7c, 0x24 }; static const uint8_t nist_kas_ecc_cdh_testvector_41_public_y[] = { /* QCAVSy */ 0x70, 0x96, 0x90, 0x8e, 0x46, 0x15, 0x26, 0x6b, 0xe5, 0x9a, 0x53, 0xcd, 0x65, 0x55, 0x15, 0x05, 0x6f, 0xf9, 0x23, 0x70, 0xa6, 0x27, 0x1a, 0x5d, 0x38, 0x23, 0xd7, 0x04 }; static const uint8_t nist_kas_ecc_cdh_testvector_41_private[] = { /* dIUT */ 0x19, 0xcf, 0x5f, 0xf6, 0x30, 0x64, 0x67, 0xf2, 0x8b, 0x9f, 0xe0, 0x67, 0x5a, 0x43, 0xc0, 0x58, 0x25, 0x52, 0xc8, 0xc1, 0x2e, 0x59, 0xce, 0x7c, 0x38, 0xf2, 0x92, 0xb1 }; /* QIUTx = fc20e906e609c112cfc2e0fea6303882c5db94e87e022373ab2c082a */ /* QIUTy = aecdf1daa71782bc5a26bbbd8d7e8a76490e26abc17dffc774bd7341 */ static const uint8_t nist_kas_ecc_cdh_testvector_41_out[] = { /* ZIUT */ 0x7f, 0xdc, 0x96, 0x9a, 0x18, 0x6f, 0xf1, 0x84, 0x29, 0xf2, 0xa2, 0x76, 0xda, 0xc4, 0x3b, 0xee, 0xa2, 0x11, 0x82, 0xd8, 0x2c, 0xe2, 0xe5, 0xa0, 0x87, 0x65, 0x52, 0xb1 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_42_public_x[] = { /* QCAVSx */ 0x32, 0x81, 0x01, 0xba, 0x82, 0x6a, 0xcd, 0x75, 0xff, 0x9f, 0x34, 0xd5, 0x57, 0x4c, 0xe0, 0xdb, 0xc9, 0x2f, 0x70, 0x9b, 0xad, 0x8d, 0x7a, 0x33, 0xc4, 0x79, 0x40, 0xc1 }; static const uint8_t nist_kas_ecc_cdh_testvector_42_public_y[] = { /* QCAVSy */ 0xdf, 0x39, 0xf1, 0xea, 0x88, 0x48, 0x8c, 0x55, 0xd5, 0x53, 0x81, 0x60, 0x87, 0x8b, 0x9c, 0xed, 0x18, 0xa8, 0x87, 0xea, 0x26, 0x1d, 0xd7, 0x12, 0xd1, 0x40, 0x24, 0xff }; static const uint8_t nist_kas_ecc_cdh_testvector_42_private[] = { /* dIUT */ 0x90, 0xa1, 0x53, 0x68, 0xe3, 0x53, 0x2c, 0x0b, 0x1e, 0x51, 0xe5, 0x5d, 0x13, 0x94, 0x47, 0xc2, 0xc8, 0x9b, 0xc1, 0x60, 0x71, 0x9d, 0x69, 0x72, 0x91, 0xea, 0x7c, 0x14 }; /* QIUTx = c6837d506e976da7db3ad1267c359dff2ea6fb0b7f7f8e77024c59e9 */ /* QIUTy = 67eb491d2fc8a530c46525d2a8b2d7c1df5fba1ae740a4649c683ee6 */ static const uint8_t nist_kas_ecc_cdh_testvector_42_out[] = { /* ZIUT */ 0x3d, 0x60, 0xab, 0x6d, 0xb2, 0xb3, 0xff, 0xe2, 0xd2, 0x9c, 0xcf, 0xf4, 0x6d, 0x05, 0x6e, 0x54, 0x23, 0x0c, 0xf3, 0x49, 0x82, 0xe2, 0x41, 0x55, 0x6e, 0xd2, 0x92, 0x0c }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_43_public_x[] = { /* QCAVSx */ 0x00, 0x81, 0xe3, 0x42, 0x70, 0x87, 0x1e, 0x2e, 0xbb, 0xd9, 0x41, 0x83, 0xf6, 0x17, 0xb4, 0xae, 0x15, 0xf0, 0x41, 0x6d, 0xd6, 0x34, 0xfe, 0x6e, 0x93, 0x4c, 0xf3, 0xc0 }; static const uint8_t nist_kas_ecc_cdh_testvector_43_public_y[] = { /* QCAVSy */ 0x3a, 0x1e, 0x9f, 0x38, 0xa7, 0xb9, 0x0b, 0x73, 0x17, 0xd2, 0x6b, 0x9f, 0x63, 0x11, 0x06, 0x3a, 0xb5, 0x8b, 0x26, 0x8c, 0xf4, 0x89, 0xb2, 0xe5, 0x03, 0x86, 0xd5, 0xd6 }; static const uint8_t nist_kas_ecc_cdh_testvector_43_private[] = { /* dIUT */ 0x8e, 0x08, 0x38, 0xe0, 0x5e, 0x17, 0x21, 0x49, 0x10, 0x67, 0xe1, 0xca, 0xbc, 0x2e, 0x80, 0x51, 0xb2, 0x90, 0xe2, 0x61, 0x6e, 0xec, 0x42, 0x7b, 0x71, 0x21, 0x89, 0x7d }; /* QIUTx = e9150f770075626019e18f95473b71e6828041791d3f08d3faeeaa2b */ /* QIUTy = 475f70735eaae52308a3b763dc88efe18ab590ebafa035f6e08b001c */ static const uint8_t nist_kas_ecc_cdh_testvector_43_out[] = { /* ZIUT */ 0x91, 0x16, 0xd7, 0x27, 0x86, 0xf4, 0xdb, 0x5d, 0xf7, 0xa8, 0xb4, 0x30, 0x78, 0xc6, 0xab, 0x91, 0x60, 0xd4, 0x23, 0x51, 0x3d, 0x35, 0xea, 0x5e, 0x25, 0x59, 0x30, 0x6d }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_44_public_x[] = { /* QCAVSx */ 0x26, 0x23, 0x63, 0x2f, 0xdf, 0x0b, 0xd8, 0x56, 0x80, 0x5a, 0x69, 0xaa, 0x18, 0x6d, 0x41, 0x33, 0xef, 0x59, 0x04, 0xe1, 0xf6, 0x55, 0xa9, 0x72, 0xd6, 0x6c, 0xce, 0x07 }; static const uint8_t nist_kas_ecc_cdh_testvector_44_public_y[] = { /* QCAVSy */ 0x2c, 0xef, 0x97, 0x28, 0xdd, 0x06, 0xfb, 0x8b, 0x50, 0x15, 0x0f, 0x52, 0x9b, 0x69, 0x50, 0x76, 0xd4, 0x50, 0x79, 0x83, 0x91, 0x25, 0x85, 0xc8, 0x9b, 0xd0, 0x68, 0x2e }; static const uint8_t nist_kas_ecc_cdh_testvector_44_private[] = { /* dIUT */ 0x38, 0x10, 0x6e, 0x93, 0xf1, 0x6a, 0x38, 0x1a, 0xdb, 0x1d, 0x72, 0xce, 0xe3, 0xda, 0x66, 0xae, 0x46, 0x2a, 0xd4, 0xbb, 0xfe, 0xa9, 0xec, 0xdf, 0x35, 0xd0, 0x81, 0x4e }; /* QIUTx = 7be6c4c917829ab657dd79e8637d7aefd2f81f0de7654d957e97658d */ /* QIUTy = 430d22d9e8438310f61e0d43f25fa3e34585f432baad27db3021bf0d */ static const uint8_t nist_kas_ecc_cdh_testvector_44_out[] = { /* ZIUT */ 0x20, 0x7c, 0x53, 0xdc, 0xef, 0xac, 0x78, 0x9a, 0xaa, 0x02, 0x76, 0xd9, 0x20, 0x0b, 0x3a, 0x94, 0x0c, 0xe5, 0xf2, 0x29, 0x6f, 0x4c, 0xb2, 0xe8, 0x1a, 0x18, 0x5d, 0x3d }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_45_public_x[] = { /* QCAVSx */ 0x8e, 0xe4, 0xd1, 0xdc, 0xc3, 0x1d, 0xee, 0x4b, 0xf6, 0xfe, 0x21, 0xca, 0x8a, 0x58, 0x77, 0x21, 0xd9, 0x10, 0xac, 0xfb, 0x12, 0x2c, 0x16, 0xc2, 0xa7, 0x7a, 0x81, 0x52 }; static const uint8_t nist_kas_ecc_cdh_testvector_45_public_y[] = { /* QCAVSy */ 0x4e, 0xbf, 0x32, 0x3f, 0xff, 0x04, 0xeb, 0x47, 0x70, 0x69, 0xa0, 0xac, 0x68, 0xb3, 0x45, 0xf6, 0xb1, 0xae, 0x13, 0x4e, 0xfc, 0x31, 0x94, 0x0e, 0x51, 0x3c, 0xb9, 0x9f }; static const uint8_t nist_kas_ecc_cdh_testvector_45_private[] = { /* dIUT */ 0xe5, 0xd1, 0x71, 0x84, 0x31, 0xcf, 0x50, 0xf6, 0xcb, 0xd1, 0xbc, 0x80, 0x19, 0xfa, 0x16, 0x76, 0x2d, 0xfa, 0x12, 0xc9, 0x89, 0xe5, 0x99, 0x99, 0x77, 0xfb, 0x4e, 0xa2 }; /* QIUTx = 2ea4966e7f92ed7f5cc61fde792045f63b731d6e7d0de2577f2d8ece */ /* QIUTy = 1c4a7b1ede6f839162292df424be78e8176fb6f942a3c02391700f31 */ static const uint8_t nist_kas_ecc_cdh_testvector_45_out[] = { /* ZIUT */ 0x10, 0xe4, 0x67, 0xda, 0x34, 0xf4, 0x8a, 0xd7, 0x07, 0x20, 0x05, 0xbc, 0xcd, 0x6d, 0xa1, 0xb2, 0xba, 0x3f, 0x71, 0xea, 0xfa, 0x1c, 0x39, 0x38, 0x42, 0xf9, 0x1d, 0x74 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_46_public_x[] = { /* QCAVSx */ 0x97, 0xdc, 0xbe, 0x6d, 0x28, 0x33, 0x58, 0x82, 0xa6, 0xd1, 0x93, 0xcc, 0x54, 0xa1, 0x06, 0x3d, 0xd0, 0x77, 0x5d, 0xc3, 0x28, 0x56, 0x53, 0x00, 0xbb, 0x99, 0xe6, 0x91 }; static const uint8_t nist_kas_ecc_cdh_testvector_46_public_y[] = { /* QCAVSy */ 0xda, 0xd1, 0x1d, 0xd5, 0xec, 0xe8, 0xcf, 0xd9, 0xf9, 0x7c, 0x9a, 0x52, 0x6e, 0x4a, 0x15, 0x06, 0xe6, 0x35, 0x59, 0x69, 0xee, 0x87, 0x82, 0x6f, 0xc3, 0x8b, 0xcd, 0x24 }; static const uint8_t nist_kas_ecc_cdh_testvector_46_private[] = { /* dIUT */ 0x3d, 0x63, 0x56, 0x91, 0xb6, 0x2a, 0x9a, 0x92, 0x7c, 0x63, 0x39, 0x51, 0xc9, 0x36, 0x9c, 0x88, 0x62, 0xbd, 0x21, 0x19, 0xd3, 0x09, 0x70, 0xc2, 0x64, 0x47, 0x27, 0xd6 }; /* QIUTx = 438bbb980517afb20be1d674e3ac2b31cef07a9b23fb8f6e38e0d6c0 */ /* QIUTy = 0be5f1c47d58d21b6ed28423b32f5a94750da47edcef33ea79942afd */ static const uint8_t nist_kas_ecc_cdh_testvector_46_out[] = { /* ZIUT */ 0x82, 0xfd, 0x2f, 0x9c, 0x60, 0xc4, 0xf9, 0x99, 0xac, 0x00, 0xbb, 0xe6, 0x4b, 0xfc, 0x11, 0xda, 0x8f, 0xf8, 0xcd, 0xa2, 0xe4, 0x99, 0xfc, 0xed, 0x65, 0x23, 0x0b, 0xb1 }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_47_public_x[] = { /* QCAVSx */ 0xce, 0x91, 0x26, 0xdd, 0x53, 0x97, 0x2d, 0xea, 0x1d, 0xe1, 0xd1, 0x1e, 0xfe, 0xf9, 0x00, 0xde, 0x34, 0xb6, 0x61, 0x85, 0x9c, 0x46, 0x48, 0xc5, 0xc0, 0xe5, 0x34, 0xf7 }; static const uint8_t nist_kas_ecc_cdh_testvector_47_public_y[] = { /* QCAVSy */ 0xe1, 0x13, 0xb6, 0xf2, 0xc1, 0x65, 0x9d, 0x07, 0xf2, 0x71, 0x6e, 0x64, 0xa8, 0x3c, 0x18, 0xbb, 0xce, 0x34, 0x4d, 0xd2, 0x12, 0x1f, 0xe8, 0x51, 0x68, 0xea, 0xe0, 0x85 }; static const uint8_t nist_kas_ecc_cdh_testvector_47_private[] = { /* dIUT */ 0xac, 0xf3, 0xc8, 0x5b, 0xbd, 0xc3, 0x79, 0xf0, 0x2f, 0x5e, 0xa3, 0x6e, 0x7f, 0x0f, 0x53, 0x09, 0x5a, 0x9e, 0x70, 0x46, 0xa2, 0x86, 0x85, 0xa8, 0x65, 0x9b, 0xf7, 0x98 }; /* QIUTx = ff7511215c71d796bd646e8474be4416b91684ce0d269ef6f422013b */ /* QIUTy = b7bf5e79b5a9393bb9ea42c0bdb2d3c2dc806e1a7306aa58e4fdbea5 */ static const uint8_t nist_kas_ecc_cdh_testvector_47_out[] = { /* ZIUT */ 0x53, 0x0f, 0x7e, 0x7f, 0xc9, 0x32, 0x61, 0x3b, 0x29, 0xc9, 0x81, 0xf2, 0x61, 0xcb, 0x03, 0x6c, 0xba, 0x3f, 0x1d, 0xf3, 0x86, 0x4e, 0x0e, 0x1c, 0xba, 0x26, 0x85, 0xa2 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_48_public_x[] = { /* QCAVSx */ 0x84, 0x41, 0x99, 0x67, 0xd6, 0xcf, 0xad, 0x41, 0xe7, 0x5a, 0x02, 0xb6, 0xda, 0x60, 0x5a, 0x97, 0x94, 0x9a, 0x18, 0x3a, 0x97, 0xc3, 0x06, 0xc4, 0xb4, 0x6e, 0x66, 0xa5 }; static const uint8_t nist_kas_ecc_cdh_testvector_48_public_y[] = { /* QCAVSy */ 0x5c, 0xc9, 0xb2, 0x59, 0x71, 0x8b, 0x1b, 0xc8, 0xb1, 0x44, 0xfd, 0xe6, 0x33, 0xa8, 0x94, 0x61, 0x6f, 0xfd, 0x59, 0xa3, 0xa6, 0xd5, 0xd8, 0xe9, 0x42, 0xc7, 0xcb, 0xb7 }; static const uint8_t nist_kas_ecc_cdh_testvector_48_private[] = { /* dIUT */ 0xcf, 0xfd, 0x62, 0xcb, 0x00, 0xa0, 0xe3, 0x16, 0x3f, 0xbf, 0x2c, 0x39, 0x7f, 0xad, 0xc9, 0x61, 0x82, 0x10, 0xf8, 0x6b, 0x4f, 0x54, 0xa6, 0x75, 0x28, 0x73, 0x05, 0xf0 }; /* QIUTx = 04bf4d948f4430d18b4ed6c96dbaf981fa11a403ed16887f06754981 */ /* QIUTy = 7c1326a9cef51f79d4e78303d6064b459f612584ac2fdf593d7d5d84 */ static const uint8_t nist_kas_ecc_cdh_testvector_48_out[] = { /* ZIUT */ 0x49, 0xf6, 0xfd, 0x01, 0x39, 0x24, 0x8e, 0xf4, 0xdf, 0x2d, 0xb0, 0x5d, 0x13, 0x19, 0xbd, 0x5b, 0x14, 0x89, 0xe2, 0x49, 0x82, 0x7a, 0x45, 0xa8, 0xa5, 0xf1, 0x24, 0x27 }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_49_public_x[] = { /* QCAVSx */ 0x7c, 0x9c, 0xac, 0x35, 0x76, 0x80, 0x63, 0xc2, 0x82, 0x7f, 0x60, 0xa7, 0xf5, 0x13, 0x88, 0xf2, 0xa8, 0xf4, 0xb7, 0xf8, 0xcd, 0x73, 0x6b, 0xd6, 0xbc, 0x33, 0x74, 0x77 }; static const uint8_t nist_kas_ecc_cdh_testvector_49_public_y[] = { /* QCAVSy */ 0x29, 0xee, 0x6b, 0x84, 0x9c, 0x60, 0x25, 0xd5, 0x77, 0xdb, 0xcc, 0x55, 0xfb, 0xd1, 0x70, 0x18, 0xf4, 0xed, 0xbc, 0x2e, 0xf1, 0x05, 0xb0, 0x04, 0xd6, 0x25, 0x7b, 0xcd }; static const uint8_t nist_kas_ecc_cdh_testvector_49_private[] = { /* dIUT */ 0x85, 0xf9, 0x03, 0xe4, 0x39, 0x43, 0xd1, 0x3c, 0x68, 0x93, 0x2e, 0x71, 0x0e, 0x80, 0xde, 0x52, 0xcb, 0xc0, 0xb8, 0xf1, 0xa1, 0x41, 0x8e, 0xa4, 0xda, 0x07, 0x92, 0x99 }; /* QIUTx = 970a4a7e01d4188497ceb46955eb1b842d9085819a9b925c84529d3d */ /* QIUTy = dfa2526480f833ea0edbd204e4e365fef3472888fe7d9691c3ebc09f */ static const uint8_t nist_kas_ecc_cdh_testvector_49_out[] = { /* ZIUT */ 0x8f, 0x7e, 0x34, 0xe5, 0x97, 0xae, 0x80, 0x93, 0xb9, 0x82, 0x70, 0xa7, 0x4a, 0x8d, 0xfc, 0xdb, 0xed, 0x45, 0x7f, 0x42, 0xf4, 0x3d, 0xf4, 0x87, 0xc5, 0x48, 0x71, 0x61 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_50_public_x[] = { /* QCAVSx */ 0x08, 0x5a, 0x76, 0x42, 0xad, 0x8e, 0x59, 0xb1, 0xa3, 0xe8, 0x72, 0x6a, 0x75, 0x47, 0xaf, 0xbe, 0xcf, 0xfd, 0xac, 0x1d, 0xab, 0x7e, 0x57, 0x23, 0x0c, 0x6a, 0x9d, 0xf4 }; static const uint8_t nist_kas_ecc_cdh_testvector_50_public_y[] = { /* QCAVSy */ 0xf9, 0x1c, 0x36, 0xd8, 0x81, 0xfe, 0x9b, 0x80, 0x47, 0xa3, 0x53, 0x07, 0x13, 0x55, 0x4a, 0x1a, 0xf4, 0xc2, 0x5c, 0x5a, 0x8e, 0x65, 0x4d, 0xcd, 0xcf, 0x68, 0x9f, 0x2e }; static const uint8_t nist_kas_ecc_cdh_testvector_50_private[] = { /* dIUT */ 0xcc, 0xe6, 0x48, 0x91, 0xa3, 0xd0, 0x12, 0x9f, 0xee, 0x0d, 0x4a, 0x96, 0xcf, 0xbe, 0x7a, 0xc4, 0x70, 0xb8, 0x5e, 0x96, 0x75, 0x29, 0x05, 0x7c, 0xfa, 0x31, 0xa1, 0xd9 }; /* QIUTx = a6b29632db94da2125dc1cf80e03702687b2acc1122022fa2174765a */ /* QIUTy = 61723edd73e10daed73775278f1958ba56f1fc9d085ebc2b64c84fe5 */ static const uint8_t nist_kas_ecc_cdh_testvector_50_out[] = { /* ZIUT */ 0x71, 0x95, 0x4e, 0x22, 0x61, 0xe8, 0x51, 0x0b, 0xe1, 0xa0, 0x60, 0x73, 0x36, 0x71, 0xd2, 0xe9, 0xd0, 0xa2, 0xd0, 0x12, 0xeb, 0x4e, 0x09, 0x55, 0x6d, 0x69, 0x7d, 0x2a }; /* [P-256] */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_51_public_x[] = { /* QCAVSx */ 0x70, 0x0c, 0x48, 0xf7, 0x7f, 0x56, 0x58, 0x4c, 0x5c, 0xc6, 0x32, 0xca, 0x65, 0x64, 0x0d, 0xb9, 0x1b, 0x6b, 0xac, 0xce, 0x3a, 0x4d, 0xf6, 0xb4, 0x2c, 0xe7, 0xcc, 0x83, 0x88, 0x33, 0xd2, 0x87 }; static const uint8_t nist_kas_ecc_cdh_testvector_51_public_y[] = { /* QCAVSy */ 0xdb, 0x71, 0xe5, 0x09, 0xe3, 0xfd, 0x9b, 0x06, 0x0d, 0xdb, 0x20, 0xba, 0x5c, 0x51, 0xdc, 0xc5, 0x94, 0x8d, 0x46, 0xfb, 0xf6, 0x40, 0xdf, 0xe0, 0x44, 0x17, 0x82, 0xca, 0xb8, 0x5f, 0xa4, 0xac }; static const uint8_t nist_kas_ecc_cdh_testvector_51_private[] = { /* dIUT */ 0x7d, 0x7d, 0xc5, 0xf7, 0x1e, 0xb2, 0x9d, 0xda, 0xf8, 0x0d, 0x62, 0x14, 0x63, 0x2e, 0xea, 0xe0, 0x3d, 0x90, 0x58, 0xaf, 0x1f, 0xb6, 0xd2, 0x2e, 0xd8, 0x0b, 0xad, 0xb6, 0x2b, 0xc1, 0xa5, 0x34 }; /* QIUTx = ead218590119e8876b29146ff89ca61770c4edbbf97d38ce385ed281d8a6b230 */ /* QIUTy = 28af61281fd35e2fa7002523acc85a429cb06ee6648325389f59edfce1405141 */ static const uint8_t nist_kas_ecc_cdh_testvector_51_out[] = { /* ZIUT */ 0x46, 0xfc, 0x62, 0x10, 0x64, 0x20, 0xff, 0x01, 0x2e, 0x54, 0xa4, 0x34, 0xfb, 0xdd, 0x2d, 0x25, 0xcc, 0xc5, 0x85, 0x20, 0x60, 0x56, 0x1e, 0x68, 0x04, 0x0d, 0xd7, 0x77, 0x89, 0x97, 0xbd, 0x7b }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_52_public_x[] = { /* QCAVSx */ 0x80, 0x9f, 0x04, 0x28, 0x9c, 0x64, 0x34, 0x8c, 0x01, 0x51, 0x5e, 0xb0, 0x3d, 0x5c, 0xe7, 0xac, 0x1a, 0x8c, 0xb9, 0x49, 0x8f, 0x5c, 0xaa, 0x50, 0x19, 0x7e, 0x58, 0xd4, 0x3a, 0x86, 0xa7, 0xae }; static const uint8_t nist_kas_ecc_cdh_testvector_52_public_y[] = { /* QCAVSy */ 0xb2, 0x9d, 0x84, 0xe8, 0x11, 0x19, 0x7f, 0x25, 0xeb, 0xa8, 0xf5, 0x19, 0x40, 0x92, 0xcb, 0x6f, 0xf4, 0x40, 0xe2, 0x6d, 0x44, 0x21, 0x01, 0x13, 0x72, 0x46, 0x1f, 0x57, 0x92, 0x71, 0xcd, 0xa3 }; static const uint8_t nist_kas_ecc_cdh_testvector_52_private[] = { /* dIUT */ 0x38, 0xf6, 0x5d, 0x6d, 0xce, 0x47, 0x67, 0x60, 0x44, 0xd5, 0x8c, 0xe5, 0x13, 0x95, 0x82, 0xd5, 0x68, 0xf6, 0x4b, 0xb1, 0x60, 0x98, 0xd1, 0x79, 0xdb, 0xab, 0x07, 0x74, 0x1d, 0xd5, 0xca, 0xf5 }; /* QIUTx = 119f2f047902782ab0c9e27a54aff5eb9b964829ca99c06b02ddba95b0a3f6d0 */ /* QIUTy = 8f52b726664cac366fc98ac7a012b2682cbd962e5acb544671d41b9445704d1d */ static const uint8_t nist_kas_ecc_cdh_testvector_52_out[] = { /* ZIUT */ 0x05, 0x7d, 0x63, 0x60, 0x96, 0xcb, 0x80, 0xb6, 0x7a, 0x8c, 0x03, 0x8c, 0x89, 0x0e, 0x88, 0x7d, 0x1a, 0xdf, 0xa4, 0x19, 0x5e, 0x9b, 0x3c, 0xe2, 0x41, 0xc8, 0xa7, 0x78, 0xc5, 0x9c, 0xda, 0x67 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_53_public_x[] = { /* QCAVSx */ 0xa2, 0x33, 0x9c, 0x12, 0xd4, 0xa0, 0x3c, 0x33, 0x54, 0x6d, 0xe5, 0x33, 0x26, 0x8b, 0x4a, 0xd6, 0x67, 0xde, 0xbf, 0x45, 0x8b, 0x46, 0x4d, 0x77, 0x44, 0x36, 0x36, 0x44, 0x0e, 0xe7, 0xfe, 0xc3 }; static const uint8_t nist_kas_ecc_cdh_testvector_53_public_y[] = { /* QCAVSy */ 0xef, 0x48, 0xa3, 0xab, 0x26, 0xe2, 0x02, 0x20, 0xbc, 0xda, 0x2c, 0x18, 0x51, 0x07, 0x68, 0x39, 0xda, 0xe8, 0x8e, 0xae, 0x96, 0x28, 0x69, 0xa4, 0x97, 0xbf, 0x73, 0xcb, 0x66, 0xfa, 0xf5, 0x36 }; static const uint8_t nist_kas_ecc_cdh_testvector_53_private[] = { /* dIUT */ 0x1a, 0xcc, 0xfa, 0xf1, 0xb9, 0x77, 0x12, 0xb8, 0x5a, 0x6f, 0x54, 0xb1, 0x48, 0x98, 0x5a, 0x1b, 0xdc, 0x4c, 0x9b, 0xec, 0x0b, 0xd2, 0x58, 0xca, 0xd4, 0xb3, 0xd6, 0x03, 0xf4, 0x9f, 0x32, 0xc8 }; /* QIUTx = d9f2b79c172845bfdb560bbb01447ca5ecc0470a09513b6126902c6b4f8d1051 */ /* QIUTy = f815ef5ec32128d3487834764678702e64e164ff7315185e23aff5facd96d7bc */ static const uint8_t nist_kas_ecc_cdh_testvector_53_out[] = { /* ZIUT */ 0x2d, 0x45, 0x7b, 0x78, 0xb4, 0x61, 0x41, 0x32, 0x47, 0x76, 0x18, 0xa5, 0xb0, 0x77, 0x96, 0x5e, 0xc9, 0x07, 0x30, 0xa8, 0xc8, 0x1a, 0x1c, 0x75, 0xd6, 0xd4, 0xec, 0x68, 0x00, 0x5d, 0x67, 0xec }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_54_public_x[] = { /* QCAVSx */ 0xdf, 0x39, 0x89, 0xb9, 0xfa, 0x55, 0x49, 0x57, 0x19, 0xb3, 0xcf, 0x46, 0xdc, 0xcd, 0x28, 0xb5, 0x15, 0x3f, 0x78, 0x08, 0x19, 0x1d, 0xd5, 0x18, 0xef, 0xf0, 0xc3, 0xcf, 0xf2, 0xb7, 0x05, 0xed }; static const uint8_t nist_kas_ecc_cdh_testvector_54_public_y[] = { /* QCAVSy */ 0x42, 0x22, 0x94, 0xff, 0x46, 0x00, 0x34, 0x29, 0xd7, 0x39, 0xa3, 0x32, 0x06, 0xc8, 0x75, 0x25, 0x52, 0xc8, 0xba, 0x54, 0xa2, 0x70, 0xde, 0xfc, 0x06, 0xe2, 0x21, 0xe0, 0xfe, 0xaf, 0x6a, 0xc4 }; static const uint8_t nist_kas_ecc_cdh_testvector_54_private[] = { /* dIUT */ 0x20, 0x7c, 0x43, 0xa7, 0x9b, 0xfe, 0xe0, 0x3d, 0xb6, 0xf4, 0xb9, 0x44, 0xf5, 0x3d, 0x2f, 0xb7, 0x6c, 0xc4, 0x9e, 0xf1, 0xc9, 0xc4, 0xd3, 0x4d, 0x51, 0xb6, 0xc6, 0x5c, 0x4d, 0xb6, 0x93, 0x2d }; /* QIUTx = 24277c33f450462dcb3d4801d57b9ced05188f16c28eda873258048cd1607e0d */ /* QIUTy = c4789753e2b1f63b32ff014ec42cd6a69fac81dfe6d0d6fd4af372ae27c46f88 */ static const uint8_t nist_kas_ecc_cdh_testvector_54_out[] = { /* ZIUT */ 0x96, 0x44, 0x12, 0x59, 0x53, 0x4b, 0x80, 0xf6, 0xae, 0xe3, 0xd2, 0x87, 0xa6, 0xbb, 0x17, 0xb5, 0x09, 0x4d, 0xd4, 0x27, 0x7d, 0x9e, 0x29, 0x4f, 0x8f, 0xe7, 0x3e, 0x48, 0xbf, 0x2a, 0x00, 0x24 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_55_public_x[] = { /* QCAVSx */ 0x41, 0x19, 0x2d, 0x28, 0x13, 0xe7, 0x95, 0x61, 0xe6, 0xa1, 0xd6, 0xf5, 0x3c, 0x8b, 0xc1, 0xa4, 0x33, 0xa1, 0x99, 0xc8, 0x35, 0xe1, 0x41, 0xb0, 0x5a, 0x74, 0xa9, 0x7b, 0x0f, 0xae, 0xb9, 0x22 }; static const uint8_t nist_kas_ecc_cdh_testvector_55_public_y[] = { /* QCAVSy */ 0x1a, 0xf9, 0x8c, 0xc4, 0x5e, 0x98, 0xa7, 0xe0, 0x41, 0xb0, 0x1c, 0xf3, 0x5f, 0x46, 0x2b, 0x75, 0x62, 0x28, 0x13, 0x51, 0xc8, 0xeb, 0xf3, 0xff, 0xa0, 0x2e, 0x33, 0xa0, 0x72, 0x2a, 0x13, 0x28 }; static const uint8_t nist_kas_ecc_cdh_testvector_55_private[] = { /* dIUT */ 0x59, 0x13, 0x7e, 0x38, 0x15, 0x23, 0x50, 0xb1, 0x95, 0xc9, 0x71, 0x8d, 0x39, 0x67, 0x3d, 0x51, 0x98, 0x38, 0x05, 0x5a, 0xd9, 0x08, 0xdd, 0x47, 0x57, 0x15, 0x2f, 0xd8, 0x25, 0x5c, 0x09, 0xbf }; /* QIUTx = a8c5fdce8b62c5ada598f141adb3b26cf254c280b2857a63d2ad783a73115f6b */ /* QIUTy = 806e1aafec4af80a0d786b3de45375b517a7e5b51ffb2c356537c9e6ef227d4a */ static const uint8_t nist_kas_ecc_cdh_testvector_55_out[] = { /* ZIUT */ 0x19, 0xd4, 0x4c, 0x8d, 0x63, 0xe8, 0xe8, 0xdd, 0x12, 0xc2, 0x2a, 0x87, 0xb8, 0xcd, 0x4e, 0xce, 0x27, 0xac, 0xdd, 0xe0, 0x4d, 0xbf, 0x47, 0xf7, 0xf2, 0x75, 0x37, 0xa6, 0x99, 0x9a, 0x8e, 0x62 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_56_public_x[] = { /* QCAVSx */ 0x33, 0xe8, 0x20, 0x92, 0xa0, 0xf1, 0xfb, 0x38, 0xf5, 0x64, 0x9d, 0x58, 0x67, 0xfb, 0xa2, 0x8b, 0x50, 0x31, 0x72, 0xb7, 0x03, 0x55, 0x74, 0xbf, 0x8e, 0x5b, 0x71, 0x00, 0xa3, 0x05, 0x27, 0x92 }; static const uint8_t nist_kas_ecc_cdh_testvector_56_public_y[] = { /* QCAVSy */ 0xf2, 0xcf, 0x6b, 0x60, 0x1e, 0x0a, 0x05, 0x94, 0x5e, 0x33, 0x55, 0x50, 0xbf, 0x64, 0x8d, 0x78, 0x2f, 0x46, 0x18, 0x6c, 0x77, 0x2c, 0x0f, 0x20, 0xd3, 0xcd, 0x0d, 0x6b, 0x8c, 0xa1, 0x4b, 0x2f }; static const uint8_t nist_kas_ecc_cdh_testvector_56_private[] = { /* dIUT */ 0xf5, 0xf8, 0xe0, 0x17, 0x46, 0x10, 0xa6, 0x61, 0x27, 0x79, 0x79, 0xb5, 0x8c, 0xe5, 0xc9, 0x0f, 0xee, 0x6c, 0x9b, 0x3b, 0xb3, 0x46, 0xa9, 0x0a, 0x71, 0x96, 0x25, 0x5e, 0x40, 0xb1, 0x32, 0xef }; /* QIUTx = 7b861dcd2844a5a8363f6b8ef8d493640f55879217189d80326aad9480dfc149 */ /* QIUTy = c4675b45eeb306405f6c33c38bc69eb2bdec9b75ad5af4706aab84543b9cc63a */ static const uint8_t nist_kas_ecc_cdh_testvector_56_out[] = { /* ZIUT */ 0x66, 0x4e, 0x45, 0xd5, 0xbb, 0xa4, 0xac, 0x93, 0x1c, 0xd6, 0x5d, 0x52, 0x01, 0x7e, 0x4b, 0xe9, 0xb1, 0x9a, 0x51, 0x5f, 0x66, 0x9b, 0xea, 0x47, 0x03, 0x54, 0x2a, 0x2c, 0x52, 0x5c, 0xd3, 0xd3 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_57_public_x[] = { /* QCAVSx */ 0x6a, 0x9e, 0x0c, 0x3f, 0x91, 0x6e, 0x4e, 0x31, 0x5c, 0x91, 0x14, 0x7b, 0xe5, 0x71, 0x68, 0x6d, 0x90, 0x46, 0x4e, 0x8b, 0xf9, 0x81, 0xd3, 0x4a, 0x90, 0xb6, 0x35, 0x3b, 0xca, 0x6e, 0xeb, 0xa7 }; static const uint8_t nist_kas_ecc_cdh_testvector_57_public_y[] = { /* QCAVSy */ 0x40, 0xf9, 0xbe, 0xad, 0x39, 0xc2, 0xf2, 0xbc, 0xc2, 0x60, 0x2f, 0x75, 0xb8, 0xa7, 0x3e, 0xc7, 0xbd, 0xff, 0xcb, 0xce, 0xad, 0x15, 0x9d, 0x01, 0x74, 0xc6, 0xc4, 0xd3, 0xc5, 0x35, 0x7f, 0x05 }; static const uint8_t nist_kas_ecc_cdh_testvector_57_private[] = { /* dIUT */ 0x3b, 0x58, 0x9a, 0xf7, 0xdb, 0x03, 0x45, 0x9c, 0x23, 0x06, 0x8b, 0x64, 0xf6, 0x3f, 0x28, 0xd3, 0xc3, 0xc6, 0xbc, 0x25, 0xb5, 0xbf, 0x76, 0xac, 0x05, 0xf3, 0x54, 0x82, 0x88, 0x8b, 0x51, 0x90 }; /* QIUTx = 9fb38e2d58ea1baf7622e96720101cae3cde4ba6c1e9fa26d9b1de0899102863 */ /* QIUTy = d5561b900406edf50802dd7d73e89395f8aed72fba0e1d1b61fe1d22302260f0 */ static const uint8_t nist_kas_ecc_cdh_testvector_57_out[] = { /* ZIUT */ 0xca, 0x34, 0x2d, 0xaa, 0x50, 0xdc, 0x09, 0xd6, 0x1b, 0xe7, 0xc1, 0x96, 0xc8, 0x5e, 0x60, 0xa8, 0x0c, 0x5c, 0xb0, 0x49, 0x31, 0x74, 0x68, 0x20, 0xbe, 0x54, 0x8c, 0xdd, 0xe0, 0x55, 0x67, 0x9d }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_58_public_x[] = { /* QCAVSx */ 0xa9, 0xc0, 0xac, 0xad, 0xe5, 0x5c, 0x2a, 0x73, 0xea, 0xd1, 0xa8, 0x6f, 0xb0, 0xa9, 0x71, 0x32, 0x23, 0xc8, 0x24, 0x75, 0x79, 0x1c, 0xd0, 0xe2, 0x10, 0xb0, 0x46, 0x41, 0x2c, 0xe2, 0x24, 0xbb }; static const uint8_t nist_kas_ecc_cdh_testvector_58_public_y[] = { /* QCAVSy */ 0xf6, 0xde, 0x0a, 0xfa, 0x20, 0xe9, 0x3e, 0x07, 0x84, 0x67, 0xc0, 0x53, 0xd2, 0x41, 0x90, 0x3e, 0xda, 0xd7, 0x34, 0xc6, 0xb4, 0x03, 0xba, 0x75, 0x8c, 0x2b, 0x5f, 0xf0, 0x4c, 0x9d, 0x42, 0x29 }; static const uint8_t nist_kas_ecc_cdh_testvector_58_private[] = { /* dIUT */ 0xd8, 0xbf, 0x92, 0x9a, 0x20, 0xea, 0x74, 0x36, 0xb2, 0x46, 0x1b, 0x54, 0x1a, 0x11, 0xc8, 0x0e, 0x61, 0xd8, 0x26, 0xc0, 0xa4, 0xc9, 0xd3, 0x22, 0xb3, 0x1d, 0xd5, 0x4e, 0x7f, 0x58, 0xb9, 0xc8 }; /* QIUTx = 20f07631e4a6512a89ad487c4e9d63039e579cb0d7a556cb9e661cd59c1e7fa4 */ /* QIUTy = 6de91846b3eee8a5ec09c2ab1f41e21bd83620ccdd1bdce3ab7ea6e02dd274f5 */ static const uint8_t nist_kas_ecc_cdh_testvector_58_out[] = { /* ZIUT */ 0x35, 0xaa, 0x9b, 0x52, 0x53, 0x6a, 0x46, 0x1b, 0xfd, 0xe4, 0xe8, 0x5f, 0xc7, 0x56, 0xbe, 0x92, 0x8c, 0x7d, 0xe9, 0x79, 0x23, 0xf0, 0x41, 0x6c, 0x7a, 0x3a, 0xc8, 0xf8, 0x8b, 0x3d, 0x44, 0x89 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_59_public_x[] = { /* QCAVSx */ 0x94, 0xe9, 0x4f, 0x16, 0xa9, 0x82, 0x55, 0xff, 0xf2, 0xb9, 0xac, 0x0c, 0x95, 0x98, 0xaa, 0xc3, 0x54, 0x87, 0xb3, 0x23, 0x2d, 0x32, 0x31, 0xbd, 0x93, 0xb7, 0xdb, 0x7d, 0xf3, 0x6f, 0x9e, 0xb9 }; static const uint8_t nist_kas_ecc_cdh_testvector_59_public_y[] = { /* QCAVSy */ 0xd8, 0x04, 0x9a, 0x43, 0x57, 0x9c, 0xfa, 0x90, 0xb8, 0x09, 0x3a, 0x94, 0x41, 0x6c, 0xbe, 0xfb, 0xf9, 0x33, 0x86, 0xf1, 0x5b, 0x3f, 0x6e, 0x19, 0x0b, 0x6e, 0x34, 0x55, 0xfe, 0xdf, 0xe6, 0x9a }; static const uint8_t nist_kas_ecc_cdh_testvector_59_private[] = { /* dIUT */ 0x0f, 0x98, 0x83, 0xba, 0x0e, 0xf3, 0x2e, 0xe7, 0x5d, 0xed, 0x0d, 0x8b, 0xda, 0x39, 0xa5, 0x14, 0x6a, 0x29, 0xf1, 0xf2, 0x50, 0x7b, 0x3b, 0xd4, 0x58, 0xdb, 0xea, 0x0b, 0x2b, 0xb0, 0x5b, 0x4d }; /* QIUTx = abb61b423be5d6c26e21c605832c9142dc1dfe5a5fff28726737936e6fbf516d */ /* QIUTy = 733d2513ef58beab202090586fac91bf0fee31e80ab33473ab23a2d89e58fad6 */ static const uint8_t nist_kas_ecc_cdh_testvector_59_out[] = { /* ZIUT */ 0x60, 0x5c, 0x16, 0x17, 0x8a, 0x9b, 0xc8, 0x75, 0xdc, 0xbf, 0xf5, 0x4d, 0x63, 0xfe, 0x00, 0xdf, 0x69, 0x9c, 0x03, 0xe8, 0xa8, 0x88, 0xe9, 0xe9, 0x4d, 0xfb, 0xab, 0x90, 0xb2, 0x5f, 0x39, 0xb4 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_60_public_x[] = { /* QCAVSx */ 0xe0, 0x99, 0xbf, 0x2a, 0x4d, 0x55, 0x74, 0x60, 0xb5, 0x54, 0x44, 0x30, 0xbb, 0xf6, 0xda, 0x11, 0x00, 0x4d, 0x12, 0x7c, 0xb5, 0xd6, 0x7f, 0x64, 0xab, 0x07, 0xc9, 0x4f, 0xcd, 0xf5, 0x27, 0x4f }; static const uint8_t nist_kas_ecc_cdh_testvector_60_public_y[] = { /* QCAVSy */ 0xd9, 0xc5, 0x0d, 0xbe, 0x70, 0xd7, 0x14, 0xed, 0xb5, 0xe2, 0x21, 0xf4, 0xe0, 0x20, 0x61, 0x0e, 0xeb, 0x62, 0x70, 0x51, 0x7e, 0x68, 0x8c, 0xa6, 0x4f, 0xb0, 0xe9, 0x8c, 0x7e, 0xf8, 0xc1, 0xc5 }; static const uint8_t nist_kas_ecc_cdh_testvector_60_private[] = { /* dIUT */ 0x2b, 0xee, 0xdb, 0x04, 0xb0, 0x5c, 0x69, 0x88, 0xf6, 0xa6, 0x75, 0x00, 0xbb, 0x81, 0x3f, 0xaf, 0x2c, 0xae, 0x0d, 0x58, 0x0c, 0x92, 0x53, 0xb6, 0x33, 0x9e, 0x4a, 0x33, 0x37, 0xbb, 0x6c, 0x08 }; /* QIUTx = 3d63e429cb5fa895a9247129bf4e48e89f35d7b11de8158efeb3e106a2a87395 */ /* QIUTy = 0cae9e477ef41e7c8c1064379bb7b554ddcbcae79f9814281f1e50f0403c61f3 */ static const uint8_t nist_kas_ecc_cdh_testvector_60_out[] = { /* ZIUT */ 0xf9, 0x6e, 0x40, 0xa1, 0xb7, 0x28, 0x40, 0x85, 0x4b, 0xb6, 0x2b, 0xc1, 0x3c, 0x40, 0xcc, 0x27, 0x95, 0xe3, 0x73, 0xd4, 0xe7, 0x15, 0x98, 0x0b, 0x26, 0x14, 0x76, 0x83, 0x5a, 0x09, 0x2e, 0x0b }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_61_public_x[] = { /* QCAVSx */ 0xf7, 0x5a, 0x5f, 0xe5, 0x6b, 0xda, 0x34, 0xf3, 0xc1, 0x39, 0x62, 0x96, 0x62, 0x6e, 0xf0, 0x12, 0xdc, 0x07, 0xe4, 0x82, 0x58, 0x38, 0x77, 0x8a, 0x64, 0x5c, 0x82, 0x48, 0xcf, 0xf0, 0x16, 0x58 }; static const uint8_t nist_kas_ecc_cdh_testvector_61_public_y[] = { /* QCAVSy */ 0x33, 0xbb, 0xdf, 0x1b, 0x17, 0x72, 0xd8, 0x05, 0x9d, 0xf5, 0x68, 0xb0, 0x61, 0xf3, 0xf1, 0x12, 0x2f, 0x28, 0xa8, 0xd8, 0x19, 0x16, 0x7c, 0x97, 0xbe, 0x44, 0x8e, 0x3d, 0xc3, 0xfb, 0x0c, 0x3c }; static const uint8_t nist_kas_ecc_cdh_testvector_61_private[] = { /* dIUT */ 0x77, 0xc1, 0x5d, 0xcf, 0x44, 0x61, 0x0e, 0x41, 0x69, 0x6b, 0xab, 0x75, 0x89, 0x43, 0xef, 0xf1, 0x40, 0x93, 0x33, 0xe4, 0xd5, 0xa1, 0x1b, 0xbe, 0x72, 0xc8, 0xf6, 0xc3, 0x95, 0xe9, 0xf8, 0x48 }; /* QIUTx = ad5d13c3db508ddcd38457e5991434a251bed49cf5ddcb59cdee73865f138c9f */ /* QIUTy = 62cec1e70588aa4fdfc7b9a09daa678081c04e1208b9d662b8a2214bf8e81a21 */ static const uint8_t nist_kas_ecc_cdh_testvector_61_out[] = { /* ZIUT */ 0x83, 0x88, 0xfa, 0x79, 0xc4, 0xba, 0xbd, 0xca, 0x02, 0xa8, 0xe8, 0xa3, 0x4f, 0x9e, 0x43, 0x55, 0x49, 0x76, 0xe4, 0x20, 0xa4, 0xad, 0x27, 0x3c, 0x81, 0xb2, 0x6e, 0x42, 0x28, 0xe9, 0xd3, 0xa3 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_62_public_x[] = { /* QCAVSx */ 0x2d, 0xb4, 0x54, 0x0d, 0x50, 0x23, 0x07, 0x56, 0x15, 0x8a, 0xbf, 0x61, 0xd9, 0x83, 0x57, 0x12, 0xb6, 0x48, 0x6c, 0x74, 0x31, 0x21, 0x83, 0xcc, 0xef, 0xca, 0xef, 0x27, 0x97, 0xb7, 0x67, 0x4d }; static const uint8_t nist_kas_ecc_cdh_testvector_62_public_y[] = { /* QCAVSy */ 0x62, 0xf5, 0x7f, 0x31, 0x4e, 0x3f, 0x34, 0x95, 0xdc, 0x4e, 0x09, 0x90, 0x12, 0xf5, 0xe0, 0xba, 0x71, 0x77, 0x0f, 0x96, 0x60, 0xa1, 0xea, 0xda, 0x54, 0x10, 0x4c, 0xdf, 0xde, 0x77, 0x24, 0x3e }; static const uint8_t nist_kas_ecc_cdh_testvector_62_private[] = { /* dIUT */ 0x42, 0xa8, 0x3b, 0x98, 0x50, 0x11, 0xd1, 0x23, 0x03, 0xdb, 0x1a, 0x80, 0x0f, 0x26, 0x10, 0xf7, 0x4a, 0xa7, 0x1c, 0xdf, 0x19, 0xc6, 0x7d, 0x54, 0xce, 0x6c, 0x9e, 0xd9, 0x51, 0xe9, 0x09, 0x3e }; /* QIUTx = ab48caa61ea35f13f8ed07ffa6a13e8db224dfecfae1a7df8b1bb6ebaf0cb97d */ /* QIUTy = 1274530ca2c385a3218bddfbcbf0b4024c9badd5243bff834ebff24a8618dccb */ static const uint8_t nist_kas_ecc_cdh_testvector_62_out[] = { /* ZIUT */ 0x72, 0x87, 0x7c, 0xea, 0x33, 0xcc, 0xc4, 0x71, 0x50, 0x38, 0xd4, 0xbc, 0xbd, 0xfe, 0x0e, 0x43, 0xf4, 0x2a, 0x9e, 0x2c, 0x0c, 0x3b, 0x01, 0x7f, 0xc2, 0x37, 0x0f, 0x4b, 0x9a, 0xcb, 0xda, 0x4a }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_63_public_x[] = { /* QCAVSx */ 0xcd, 0x94, 0xfc, 0x94, 0x97, 0xe8, 0x99, 0x07, 0x50, 0x30, 0x9e, 0x9a, 0x85, 0x34, 0xfd, 0x11, 0x4b, 0x0a, 0x6e, 0x54, 0xda, 0x89, 0xc4, 0x79, 0x61, 0x01, 0x89, 0x70, 0x41, 0xd1, 0x4e, 0xcb }; static const uint8_t nist_kas_ecc_cdh_testvector_63_public_y[] = { /* QCAVSy */ 0xc3, 0xde, 0xf4, 0xb5, 0xfe, 0x04, 0xfa, 0xee, 0x0a, 0x11, 0x93, 0x22, 0x29, 0xff, 0xf5, 0x63, 0x63, 0x7b, 0xfd, 0xee, 0x0e, 0x79, 0xc6, 0xde, 0xea, 0xf4, 0x49, 0xf8, 0x54, 0x01, 0xc5, 0xc4 }; static const uint8_t nist_kas_ecc_cdh_testvector_63_private[] = { /* dIUT */ 0xce, 0xed, 0x35, 0x50, 0x7b, 0x5c, 0x93, 0xea, 0xd5, 0x98, 0x91, 0x19, 0xb9, 0xba, 0x34, 0x2c, 0xfe, 0x38, 0xe6, 0xe6, 0x38, 0xba, 0x6e, 0xea, 0x34, 0x3a, 0x55, 0x47, 0x5d, 0xe2, 0x80, 0x0b }; /* QIUTx = 9a8cd9bd72e71752df91440f77c547509a84df98114e7de4f26cdb39234a625d */ /* QIUTy = d07cfc84c8e144fab2839f5189bb1d7c88631d579bbc58012ed9a2327da52f62 */ static const uint8_t nist_kas_ecc_cdh_testvector_63_out[] = { /* ZIUT */ 0xe4, 0xe7, 0x40, 0x8d, 0x85, 0xff, 0x0e, 0x0e, 0x9c, 0x83, 0x80, 0x03, 0xf2, 0x8c, 0xdb, 0xd5, 0x24, 0x7c, 0xdc, 0xe3, 0x1f, 0x32, 0xf6, 0x24, 0x94, 0xb7, 0x0e, 0x5f, 0x1b, 0xc3, 0x63, 0x07 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_64_public_x[] = { /* QCAVSx */ 0x15, 0xb9, 0xe4, 0x67, 0xaf, 0x4d, 0x29, 0x0c, 0x41, 0x74, 0x02, 0xe0, 0x40, 0x42, 0x6f, 0xe4, 0xcf, 0x23, 0x6b, 0xae, 0x72, 0xba, 0xa3, 0x92, 0xed, 0x89, 0x78, 0x0d, 0xfc, 0xcd, 0xb4, 0x71 }; static const uint8_t nist_kas_ecc_cdh_testvector_64_public_y[] = { /* QCAVSy */ 0xcd, 0xf4, 0xe9, 0x17, 0x0f, 0xb9, 0x04, 0x30, 0x2b, 0x8f, 0xd9, 0x3a, 0x82, 0x0b, 0xa8, 0xcc, 0x7e, 0xd4, 0xef, 0xd3, 0xa6, 0xf2, 0xd6, 0xb0, 0x5b, 0x80, 0xb2, 0xff, 0x2a, 0xee, 0x4e, 0x77 }; static const uint8_t nist_kas_ecc_cdh_testvector_64_private[] = { /* dIUT */ 0x43, 0xe0, 0xe9, 0xd9, 0x5a, 0xf4, 0xdc, 0x36, 0x48, 0x3c, 0xdd, 0x19, 0x68, 0xd2, 0xb7, 0xee, 0xb8, 0x61, 0x1f, 0xcc, 0xe7, 0x7f, 0x3a, 0x4e, 0x7d, 0x05, 0x9a, 0xe4, 0x3e, 0x50, 0x96, 0x04 }; /* QIUTx = f989cf8ee956a82e7ebd9881cdbfb2fd946189b08db53559bc8cfdd48071eb14 */ /* QIUTy = 5eff28f1a18a616b04b7d337868679f6dd84f9a7b3d7b6f8af276c19611a541d */ static const uint8_t nist_kas_ecc_cdh_testvector_64_out[] = { /* ZIUT */ 0xed, 0x56, 0xbc, 0xf6, 0x95, 0xb7, 0x34, 0x14, 0x2c, 0x24, 0xec, 0xb1, 0xfc, 0x1b, 0xb6, 0x4d, 0x08, 0xf1, 0x75, 0xeb, 0x24, 0x3a, 0x31, 0xf3, 0x7b, 0x3d, 0x9b, 0xb4, 0x40, 0x7f, 0x3b, 0x96 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_65_public_x[] = { /* QCAVSx */ 0x49, 0xc5, 0x03, 0xba, 0x6c, 0x4f, 0xa6, 0x05, 0x18, 0x2e, 0x18, 0x6b, 0x5e, 0x81, 0x11, 0x3f, 0x07, 0x5b, 0xc1, 0x1d, 0xcf, 0xd5, 0x1c, 0x93, 0x2f, 0xb2, 0x1e, 0x95, 0x1e, 0xee, 0x2f, 0xa1 }; static const uint8_t nist_kas_ecc_cdh_testvector_65_public_y[] = { /* QCAVSy */ 0x8a, 0xf7, 0x06, 0xff, 0x09, 0x22, 0xd8, 0x7b, 0x3f, 0x0c, 0x5e, 0x4e, 0x31, 0xd8, 0xb2, 0x59, 0xae, 0xb2, 0x60, 0xa9, 0x26, 0x96, 0x43, 0xed, 0x52, 0x0a, 0x13, 0xbb, 0x25, 0xda, 0x59, 0x24 }; static const uint8_t nist_kas_ecc_cdh_testvector_65_private[] = { /* dIUT */ 0xb2, 0xf3, 0x60, 0x0d, 0xf3, 0x36, 0x8e, 0xf8, 0xa0, 0xbb, 0x85, 0xab, 0x22, 0xf4, 0x1f, 0xc0, 0xe5, 0xf4, 0xfd, 0xd5, 0x4b, 0xe8, 0x16, 0x7a, 0x5c, 0x3c, 0xd4, 0xb0, 0x8d, 0xb0, 0x49, 0x03 }; /* QIUTx = 69c627625b36a429c398b45c38677cb35d8beb1cf78a571e40e99fe4eac1cd4e */ /* QIUTy = 81690112b0a88f20f7136b28d7d47e5fbc2ada3c8edd87589bc19ec9590637bd */ static const uint8_t nist_kas_ecc_cdh_testvector_65_out[] = { /* ZIUT */ 0xbc, 0x5c, 0x70, 0x55, 0x08, 0x9f, 0xc9, 0xd6, 0xc8, 0x9f, 0x83, 0xc1, 0xea, 0x1a, 0xda, 0x87, 0x9d, 0x99, 0x34, 0xb2, 0xea, 0x28, 0xfc, 0xf4, 0xe4, 0xa7, 0xe9, 0x84, 0xb2, 0x8a, 0xd2, 0xcf }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_66_public_x[] = { /* QCAVSx */ 0x19, 0xb3, 0x8d, 0xe3, 0x9f, 0xdd, 0x2f, 0x70, 0xf7, 0x09, 0x16, 0x31, 0xa4, 0xf7, 0x5d, 0x19, 0x93, 0x74, 0x0b, 0xa9, 0x42, 0x91, 0x62, 0xc2, 0xa4, 0x53, 0x12, 0x40, 0x16, 0x36, 0xb2, 0x9c }; static const uint8_t nist_kas_ecc_cdh_testvector_66_public_y[] = { /* QCAVSy */ 0x09, 0xae, 0xd7, 0x23, 0x2b, 0x28, 0xe0, 0x60, 0x94, 0x17, 0x41, 0xb6, 0x82, 0x8b, 0xcd, 0xfa, 0x2b, 0xc4, 0x9c, 0xc8, 0x44, 0xf3, 0x77, 0x36, 0x11, 0x50, 0x4f, 0x82, 0xa3, 0x90, 0xa5, 0xae }; static const uint8_t nist_kas_ecc_cdh_testvector_66_private[] = { /* dIUT */ 0x40, 0x02, 0x53, 0x43, 0x07, 0xf8, 0xb6, 0x2a, 0x9b, 0xf6, 0x7f, 0xf6, 0x41, 0xdd, 0xc6, 0x0f, 0xef, 0x59, 0x3b, 0x17, 0xc3, 0x34, 0x12, 0x39, 0xe9, 0x5b, 0xdb, 0x3e, 0x57, 0x9b, 0xfd, 0xc8 }; /* QIUTx = 5fe964671315a18aa68a2a6e3dd1fde7e23b8ce7181471cfac43c99e1ae80262 */ /* QIUTy = d5827be282e62c84de531b963884ba832db5d6b2c3a256f0e604fe7e6b8a7f72 */ static const uint8_t nist_kas_ecc_cdh_testvector_66_out[] = { /* ZIUT */ 0x9a, 0x4e, 0x8e, 0x65, 0x7f, 0x6b, 0x0e, 0x09, 0x7f, 0x47, 0x95, 0x4a, 0x63, 0xc7, 0x5d, 0x74, 0xfc, 0xba, 0x71, 0xa3, 0x0d, 0x83, 0x65, 0x1e, 0x3e, 0x5a, 0x91, 0xaa, 0x7c, 0xcd, 0x83, 0x43 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_67_public_x[] = { /* QCAVSx */ 0x2c, 0x91, 0xc6, 0x1f, 0x33, 0xad, 0xfe, 0x93, 0x11, 0xc9, 0x42, 0xfd, 0xbf, 0xf6, 0xba, 0x47, 0x02, 0x0f, 0xef, 0xf4, 0x16, 0xb7, 0xbb, 0x63, 0xce, 0xc1, 0x3f, 0xaf, 0x9b, 0x09, 0x99, 0x54 }; static const uint8_t nist_kas_ecc_cdh_testvector_67_public_y[] = { /* QCAVSy */ 0x6c, 0xab, 0x31, 0xb0, 0x64, 0x19, 0xe5, 0x22, 0x1f, 0xca, 0x01, 0x4f, 0xb8, 0x4e, 0xc8, 0x70, 0x62, 0x2a, 0x1b, 0x12, 0xba, 0xb5, 0xae, 0x43, 0x68, 0x2a, 0xa7, 0xea, 0x73, 0xea, 0x08, 0xd0 }; static const uint8_t nist_kas_ecc_cdh_testvector_67_private[] = { /* dIUT */ 0x4d, 0xfa, 0x12, 0xde, 0xfc, 0x60, 0x31, 0x90, 0x21, 0xb6, 0x81, 0xb3, 0xff, 0x84, 0xa1, 0x0a, 0x51, 0x19, 0x58, 0xc8, 0x50, 0x93, 0x9e, 0xd4, 0x56, 0x35, 0x93, 0x4b, 0xa4, 0x97, 0x91, 0x47 }; /* QIUTx = c9b2b8496f1440bd4a2d1e52752fd372835b364885e154a7dac49295f281ec7c */ /* QIUTy = fbe6b926a8a4de26ccc83b802b1212400754be25d9f3eeaf008b09870ae76321 */ static const uint8_t nist_kas_ecc_cdh_testvector_67_out[] = { /* ZIUT */ 0x3c, 0xa1, 0xfc, 0x7a, 0xd8, 0x58, 0xfb, 0x1a, 0x6a, 0xba, 0x23, 0x25, 0x42, 0xf3, 0xe2, 0xa7, 0x49, 0xff, 0xc7, 0x20, 0x3a, 0x23, 0x74, 0xa3, 0xf3, 0xd3, 0x26, 0x7f, 0x1f, 0xc9, 0x7b, 0x78 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_68_public_x[] = { /* QCAVSx */ 0xa2, 0x8a, 0x2e, 0xdf, 0x58, 0x02, 0x56, 0x68, 0xf7, 0x24, 0xaa, 0xf8, 0x3a, 0x50, 0x95, 0x6b, 0x7a, 0xc1, 0xcf, 0xbb, 0xff, 0x79, 0xb0, 0x8c, 0x3b, 0xf8, 0x7d, 0xfd, 0x28, 0x28, 0xd7, 0x67 }; static const uint8_t nist_kas_ecc_cdh_testvector_68_public_y[] = { /* QCAVSy */ 0xdf, 0xa7, 0xbf, 0xff, 0xd4, 0xc7, 0x66, 0xb8, 0x6a, 0xbe, 0xaf, 0x5c, 0x99, 0xb6, 0xe5, 0x0c, 0xb9, 0xcc, 0xc9, 0xd9, 0xd0, 0x0b, 0x7f, 0xfc, 0x78, 0x04, 0xb0, 0x49, 0x1b, 0x67, 0xbc, 0x03 }; static const uint8_t nist_kas_ecc_cdh_testvector_68_private[] = { /* dIUT */ 0x13, 0x31, 0xf6, 0xd8, 0x74, 0xa4, 0xed, 0x3b, 0xc4, 0xa2, 0xc6, 0xe9, 0xc7, 0x43, 0x31, 0xd3, 0x03, 0x97, 0x96, 0x31, 0x4b, 0xee, 0xe3, 0xb7, 0x15, 0x2f, 0xcd, 0xba, 0x55, 0x56, 0x30, 0x4e }; /* QIUTx = 59e1e101521046ad9cf1d082e9d2ec7dd22530cce064991f1e55c5bcf5fcb591 */ /* QIUTy = 482f4f673176c8fdaa0bb6e59b15a3e47454e3a04297d3863c9338d98add1f37 */ static const uint8_t nist_kas_ecc_cdh_testvector_68_out[] = { /* ZIUT */ 0x1a, 0xaa, 0xbe, 0x7e, 0xe6, 0xe4, 0xa6, 0xfa, 0x73, 0x22, 0x91, 0x20, 0x24, 0x33, 0xa2, 0x37, 0xdf, 0x1b, 0x49, 0xbc, 0x53, 0x86, 0x6b, 0xfb, 0xe0, 0x0d, 0xb9, 0x6a, 0x0f, 0x58, 0x22, 0x4f }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_69_public_x[] = { /* QCAVSx */ 0xa2, 0xef, 0x85, 0x7a, 0x08, 0x1f, 0x9d, 0x6e, 0xb2, 0x06, 0xa8, 0x1c, 0x4c, 0xf7, 0x8a, 0x80, 0x2b, 0xdf, 0x59, 0x8a, 0xe3, 0x80, 0xc8, 0x88, 0x6e, 0xcd, 0x85, 0xfd, 0xc1, 0xed, 0x76, 0x44 }; static const uint8_t nist_kas_ecc_cdh_testvector_69_public_y[] = { /* QCAVSy */ 0x56, 0x3c, 0x4c, 0x20, 0x41, 0x9f, 0x07, 0xbc, 0x17, 0xd0, 0x53, 0x9f, 0xad, 0xe1, 0x85, 0x5e, 0x34, 0x83, 0x95, 0x15, 0xb8, 0x92, 0xc0, 0xf5, 0xd2, 0x65, 0x61, 0xf9, 0x7f, 0xa0, 0x4d, 0x1a }; static const uint8_t nist_kas_ecc_cdh_testvector_69_private[] = { /* dIUT */ 0xdd, 0x5e, 0x9f, 0x70, 0xae, 0x74, 0x00, 0x73, 0xca, 0x02, 0x04, 0xdf, 0x60, 0x76, 0x3f, 0xb6, 0x03, 0x6c, 0x45, 0x70, 0x9b, 0xf4, 0xa7, 0xbb, 0x4e, 0x67, 0x14, 0x12, 0xfa, 0xd6, 0x5d, 0xa3 }; /* QIUTx = 30b9db2e2e977bcdc98cb87dd736cbd8e78552121925cf16e1933657c2fb2314 */ /* QIUTy = 6a45028800b81291bce5c2e1fed7ded650620ebbe6050c6f3a7f0dfb4673ab5c */ static const uint8_t nist_kas_ecc_cdh_testvector_69_out[] = { /* ZIUT */ 0x43, 0x0e, 0x6a, 0x4f, 0xba, 0x44, 0x49, 0xd7, 0x00, 0xd2, 0x73, 0x3e, 0x55, 0x7f, 0x66, 0xa3, 0xbf, 0x3d, 0x50, 0x51, 0x7c, 0x12, 0x71, 0xb1, 0xdd, 0xae, 0x11, 0x61, 0xb7, 0xac, 0x79, 0x8c }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_70_public_x[] = { /* QCAVSx */ 0xcc, 0xd8, 0xa2, 0xd8, 0x6b, 0xc9, 0x2f, 0x2e, 0x01, 0xbc, 0xe4, 0xd6, 0x92, 0x2c, 0xf7, 0xfe, 0x16, 0x26, 0xae, 0xd0, 0x44, 0x68, 0x5e, 0x95, 0xe2, 0xee, 0xbd, 0x46, 0x45, 0x05, 0xf0, 0x1f }; static const uint8_t nist_kas_ecc_cdh_testvector_70_public_y[] = { /* QCAVSy */ 0xe9, 0xdd, 0xd5, 0x83, 0xa9, 0x63, 0x5a, 0x66, 0x77, 0x77, 0xd5, 0xb8, 0xa8, 0xf3, 0x1b, 0x0f, 0x79, 0xeb, 0xa1, 0x2c, 0x75, 0x02, 0x34, 0x10, 0xb5, 0x4b, 0x85, 0x67, 0xdd, 0xdc, 0x0f, 0x38 }; static const uint8_t nist_kas_ecc_cdh_testvector_70_private[] = { /* dIUT */ 0x5a, 0xe0, 0x26, 0xcf, 0xc0, 0x60, 0xd5, 0x56, 0x00, 0x71, 0x7e, 0x55, 0xb8, 0xa1, 0x2e, 0x11, 0x6d, 0x1d, 0x0d, 0xf3, 0x4a, 0xf8, 0x31, 0x97, 0x90, 0x57, 0x60, 0x7c, 0x2d, 0x9c, 0x2f, 0x76 }; /* QIUTx = 46c9ebd1a4a3c8c0b6d572b5dcfba12467603208a9cb5d2acfbb733c40cf6391 */ /* QIUTy = 46c913a27d044185d38b467ace011e04d4d9bbbb8cb9ae25fa92aaf15a595e86 */ static const uint8_t nist_kas_ecc_cdh_testvector_70_out[] = { /* ZIUT */ 0x1c, 0xe9, 0xe6, 0x74, 0x05, 0x29, 0x49, 0x9f, 0x98, 0xd1, 0xf1, 0xd7, 0x13, 0x29, 0x14, 0x7a, 0x33, 0xdf, 0x1d, 0x05, 0xe4, 0x76, 0x5b, 0x53, 0x9b, 0x11, 0xcf, 0x61, 0x5d, 0x69, 0x74, 0xd3 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_71_public_x[] = { /* QCAVSx */ 0xc1, 0x88, 0xff, 0xc8, 0x94, 0x7f, 0x73, 0x01, 0xfb, 0x7b, 0x53, 0xe3, 0x67, 0x46, 0x09, 0x7c, 0x21, 0x34, 0xbf, 0x9c, 0xc9, 0x81, 0xba, 0x74, 0xb4, 0xe9, 0xc4, 0x36, 0x1f, 0x59, 0x5e, 0x4e }; static const uint8_t nist_kas_ecc_cdh_testvector_71_public_y[] = { /* QCAVSy */ 0xbf, 0x7d, 0x2f, 0x20, 0x56, 0xe7, 0x24, 0x21, 0xef, 0x39, 0x3f, 0x0c, 0x0f, 0x2b, 0x0e, 0x00, 0x13, 0x0e, 0x3c, 0xac, 0x4a, 0xbb, 0xcc, 0x00, 0x28, 0x61, 0x68, 0xe8, 0x5e, 0xc5, 0x50, 0x51 }; static const uint8_t nist_kas_ecc_cdh_testvector_71_private[] = { /* dIUT */ 0xb6, 0x01, 0xac, 0x42, 0x5d, 0x5d, 0xbf, 0x9e, 0x17, 0x35, 0xc5, 0xe2, 0xd5, 0xbd, 0xb7, 0x9c, 0xa9, 0x8b, 0x3d, 0x5b, 0xe4, 0xa2, 0xcf, 0xd6, 0xf2, 0x27, 0x3f, 0x15, 0x0e, 0x06, 0x4d, 0x9d }; /* QIUTx = 7c9e950841d26c8dde8994398b8f5d475a022bc63de7773fcf8d552e01f1ba0a */ /* QIUTy = cc42b9885c9b3bee0f8d8c57d3a8f6355016c019c4062fa22cff2f209b5cc2e1 */ static const uint8_t nist_kas_ecc_cdh_testvector_71_out[] = { /* ZIUT */ 0x46, 0x90, 0xe3, 0x74, 0x3c, 0x07, 0xd6, 0x43, 0xf1, 0xbc, 0x18, 0x36, 0x36, 0xab, 0x2a, 0x9c, 0xb9, 0x36, 0xa6, 0x0a, 0x80, 0x21, 0x13, 0xc4, 0x9b, 0xb1, 0xb3, 0xf2, 0xd0, 0x66, 0x16, 0x60 }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_72_public_x[] = { /* QCAVSx */ 0x31, 0x7e, 0x10, 0x20, 0xff, 0x53, 0xfc, 0xce, 0xf1, 0x8b, 0xf4, 0x7b, 0xb7, 0xf2, 0xdd, 0x77, 0x07, 0xfb, 0x7b, 0x7a, 0x75, 0x78, 0xe0, 0x4f, 0x35, 0xb3, 0xbe, 0xed, 0x22, 0x2a, 0x0e, 0xb6 }; static const uint8_t nist_kas_ecc_cdh_testvector_72_public_y[] = { /* QCAVSy */ 0x09, 0x42, 0x0c, 0xe5, 0xa1, 0x9d, 0x77, 0xc6, 0xfe, 0x1e, 0xe5, 0x87, 0xe6, 0xa4, 0x9f, 0xba, 0xf8, 0xf2, 0x80, 0xe8, 0xdf, 0x03, 0x3d, 0x75, 0x40, 0x33, 0x02, 0xe5, 0xa2, 0x7d, 0xb2, 0xae }; static const uint8_t nist_kas_ecc_cdh_testvector_72_private[] = { /* dIUT */ 0xfe, 0xfb, 0x1d, 0xda, 0x18, 0x45, 0x31, 0x2b, 0x5f, 0xce, 0x6b, 0x81, 0xb2, 0xbe, 0x20, 0x5a, 0xf2, 0xf3, 0xa2, 0x74, 0xf5, 0xa2, 0x12, 0xf6, 0x6c, 0x0d, 0x9f, 0xc3, 0x3d, 0x7a, 0xe5, 0x35 }; /* QIUTx = 38b54db85500cb20c61056edd3d88b6a9dc26780a047f213a6e1b900f76596eb */ /* QIUTy = 6387e4e5781571e4eb8ae62991a33b5dc33301c5bc7e125d53794a39160d8fd0 */ static const uint8_t nist_kas_ecc_cdh_testvector_72_out[] = { /* ZIUT */ 0x30, 0xc2, 0x26, 0x1b, 0xd0, 0x00, 0x4e, 0x61, 0xfe, 0xda, 0x2c, 0x16, 0xaa, 0x5e, 0x21, 0xff, 0xa8, 0xd7, 0xe7, 0xf7, 0xdb, 0xf6, 0xec, 0x37, 0x9a, 0x43, 0xb4, 0x8e, 0x4b, 0x36, 0xae, 0xb0 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_73_public_x[] = { /* QCAVSx */ 0x45, 0xfb, 0x02, 0xb2, 0xce, 0xb9, 0xd7, 0xc7, 0x9d, 0x9c, 0x2f, 0xa9, 0x3e, 0x9c, 0x79, 0x67, 0xc2, 0xfa, 0x4d, 0xf5, 0x78, 0x9f, 0x96, 0x40, 0xb2, 0x42, 0x64, 0xb1, 0xe5, 0x24, 0xfc, 0xb1 }; static const uint8_t nist_kas_ecc_cdh_testvector_73_public_y[] = { /* QCAVSy */ 0x5c, 0x6e, 0x8e, 0xcf, 0x1f, 0x7d, 0x30, 0x23, 0x89, 0x3b, 0x7b, 0x1c, 0xa1, 0xe4, 0xd1, 0x78, 0x97, 0x2e, 0xe2, 0xa2, 0x30, 0x75, 0x7d, 0xdc, 0x56, 0x4f, 0xfe, 0x37, 0xf5, 0xc5, 0xa3, 0x21 }; static const uint8_t nist_kas_ecc_cdh_testvector_73_private[] = { /* dIUT */ 0x33, 0x4a, 0xe0, 0xc4, 0x69, 0x3d, 0x23, 0x93, 0x5a, 0x7e, 0x8e, 0x04, 0x3e, 0xbb, 0xde, 0x21, 0xe1, 0x68, 0xa7, 0xcb, 0xa3, 0xfa, 0x50, 0x7c, 0x9b, 0xe4, 0x1d, 0x76, 0x81, 0xe0, 0x49, 0xce }; /* QIUTx = 3f2bf1589abf3047bf3e54ac9a95379bff95f8f55405f64eca36a7eebe8ffca7 */ /* QIUTy = 5212a94e66c5ae9a8991872f66a72723d80ec5b2e925745c456f5371943b3a06 */ static const uint8_t nist_kas_ecc_cdh_testvector_73_out[] = { /* ZIUT */ 0x2a, 0xda, 0xe4, 0xa1, 0x38, 0xa2, 0x39, 0xdc, 0xd9, 0x3c, 0x24, 0x3a, 0x38, 0x03, 0xc3, 0xe4, 0xcf, 0x96, 0xe3, 0x7f, 0xe1, 0x4e, 0x6a, 0x9b, 0x71, 0x7b, 0xe9, 0x59, 0x99, 0x59, 0xb1, 0x1c }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_74_public_x[] = { /* QCAVSx */ 0xa1, 0x9e, 0xf7, 0xbf, 0xf9, 0x8a, 0xda, 0x78, 0x18, 0x42, 0xfb, 0xfc, 0x51, 0xa4, 0x7a, 0xff, 0x39, 0xb5, 0x93, 0x5a, 0x1c, 0x7d, 0x96, 0x25, 0xc8, 0xd3, 0x23, 0xd5, 0x11, 0xc9, 0x2d, 0xe6 }; static const uint8_t nist_kas_ecc_cdh_testvector_74_public_y[] = { /* QCAVSy */ 0xe9, 0xc1, 0x84, 0xdf, 0x75, 0xc9, 0x55, 0xe0, 0x2e, 0x02, 0xe4, 0x00, 0xff, 0xe4, 0x5f, 0x78, 0xf3, 0x39, 0xe1, 0xaf, 0xe6, 0xd0, 0x56, 0xfb, 0x32, 0x45, 0xf4, 0x70, 0x0c, 0xe6, 0x06, 0xef }; static const uint8_t nist_kas_ecc_cdh_testvector_74_private[] = { /* dIUT */ 0x2c, 0x4b, 0xde, 0x40, 0x21, 0x4f, 0xcc, 0x3b, 0xfc, 0x47, 0xd4, 0xcf, 0x43, 0x4b, 0x62, 0x9a, 0xcb, 0xe9, 0x15, 0x7f, 0x8f, 0xd0, 0x28, 0x25, 0x40, 0x33, 0x1d, 0xe7, 0x94, 0x2c, 0xf0, 0x9d }; /* QIUTx = 29c0807f10cbc42fb45c9989da50681eead716daa7b9e91fd32e062f5eb92ca0 */ /* QIUTy = ff1d6d1955d7376b2da24fe1163a271659136341bc2eb1195fc706dc62e7f34d */ static const uint8_t nist_kas_ecc_cdh_testvector_74_out[] = { /* ZIUT */ 0x2e, 0x27, 0x7e, 0xc3, 0x0f, 0x5e, 0xa0, 0x7d, 0x6c, 0xe5, 0x13, 0x14, 0x9b, 0x94, 0x79, 0xb9, 0x6e, 0x07, 0xf4, 0xb6, 0x91, 0x3b, 0x1b, 0x5c, 0x11, 0x30, 0x5c, 0x14, 0x44, 0xa1, 0xbc, 0x0b }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_75_public_x[] = { /* QCAVSx */ 0x35, 0x6c, 0x5a, 0x44, 0x4c, 0x04, 0x9a, 0x52, 0xfe, 0xe0, 0xad, 0xeb, 0x7e, 0x5d, 0x82, 0xae, 0x5a, 0xa8, 0x30, 0x30, 0xbf, 0xff, 0x31, 0xbb, 0xf8, 0xce, 0x20, 0x96, 0xcf, 0x16, 0x1c, 0x4b }; static const uint8_t nist_kas_ecc_cdh_testvector_75_public_y[] = { /* QCAVSy */ 0x57, 0xd1, 0x28, 0xde, 0x8b, 0x2a, 0x57, 0xa0, 0x94, 0xd1, 0xa0, 0x01, 0xe5, 0x72, 0x17, 0x3f, 0x96, 0xe8, 0x86, 0x6a, 0xe3, 0x52, 0xbf, 0x29, 0xcd, 0xda, 0xf9, 0x2f, 0xc8, 0x5b, 0x2f, 0x92 }; static const uint8_t nist_kas_ecc_cdh_testvector_75_private[] = { /* dIUT */ 0x85, 0xa2, 0x68, 0xf9, 0xd7, 0x77, 0x2f, 0x99, 0x0c, 0x36, 0xb4, 0x2b, 0x0a, 0x33, 0x1a, 0xdc, 0x92, 0xb5, 0x94, 0x1d, 0xe0, 0xb8, 0x62, 0xd5, 0xd8, 0x9a, 0x34, 0x7c, 0xbf, 0x8f, 0xaa, 0xb0 }; /* QIUTx = 9cf4b98581ca1779453cc816ff28b4100af56cf1bf2e5bc312d83b6b1b21d333 */ /* QIUTy = 7a5504fcac5231a0d12d658218284868229c844a04a3450d6c7381abe080bf3b */ static const uint8_t nist_kas_ecc_cdh_testvector_75_out[] = { /* ZIUT */ 0x1e, 0x51, 0x37, 0x3b, 0xd2, 0xc6, 0x04, 0x4c, 0x12, 0x9c, 0x43, 0x6e, 0x74, 0x2a, 0x55, 0xbe, 0x2a, 0x66, 0x8a, 0x85, 0xae, 0x08, 0x44, 0x1b, 0x67, 0x56, 0x44, 0x5d, 0xf5, 0x49, 0x38, 0x57 }; /* [P-384] */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_76_public_x[] = { /* QCAVSx */ 0xa7, 0xc7, 0x6b, 0x97, 0x0c, 0x3b, 0x5f, 0xe8, 0xb0, 0x5d, 0x28, 0x38, 0xae, 0x04, 0xab, 0x47, 0x69, 0x7b, 0x9e, 0xaf, 0x52, 0xe7, 0x64, 0x59, 0x2e, 0xfd, 0xa2, 0x7f, 0xe7, 0x51, 0x32, 0x72, 0x73, 0x44, 0x66, 0xb4, 0x00, 0x09, 0x1a, 0xdb, 0xf2, 0xd6, 0x8c, 0x58, 0xe0, 0xc5, 0x00, 0x66 }; static const uint8_t nist_kas_ecc_cdh_testvector_76_public_y[] = { /* QCAVSy */ 0xac, 0x68, 0xf1, 0x9f, 0x2e, 0x1c, 0xb8, 0x79, 0xae, 0xd4, 0x3a, 0x99, 0x69, 0xb9, 0x1a, 0x08, 0x39, 0xc4, 0xc3, 0x8a, 0x49, 0x74, 0x9b, 0x66, 0x1e, 0xfe, 0xdf, 0x24, 0x34, 0x51, 0x91, 0x5e, 0xd0, 0x90, 0x5a, 0x32, 0xb0, 0x60, 0x99, 0x2b, 0x46, 0x8c, 0x64, 0x76, 0x6f, 0xc8, 0x43, 0x7a }; static const uint8_t nist_kas_ecc_cdh_testvector_76_private[] = { /* dIUT */ 0x3c, 0xc3, 0x12, 0x2a, 0x68, 0xf0, 0xd9, 0x50, 0x27, 0xad, 0x38, 0xc0, 0x67, 0x91, 0x6b, 0xa0, 0xeb, 0x8c, 0x38, 0x89, 0x4d, 0x22, 0xe1, 0xb1, 0x56, 0x18, 0xb6, 0x81, 0x8a, 0x66, 0x17, 0x74, 0xad, 0x46, 0x3b, 0x20, 0x5d, 0xa8, 0x8c, 0xf6, 0x99, 0xab, 0x4d, 0x43, 0xc9, 0xcf, 0x98, 0xa1 }; /* QIUTx = 9803807f2f6d2fd966cdd0290bd410c0190352fbec7ff6247de1302df86f25d34fe4a97bef60cff548355c015dbb3e5f */ /* QIUTy = ba26ca69ec2f5b5d9dad20cc9da711383a9dbe34ea3fa5a2af75b46502629ad54dd8b7d73a8abb06a3a3be47d650cc99 */ static const uint8_t nist_kas_ecc_cdh_testvector_76_out[] = { /* ZIUT */ 0x5f, 0x9d, 0x29, 0xdc, 0x5e, 0x31, 0xa1, 0x63, 0x06, 0x03, 0x56, 0x21, 0x36, 0x69, 0xc8, 0xce, 0x13, 0x2e, 0x22, 0xf5, 0x7c, 0x9a, 0x04, 0xf4, 0x0b, 0xa7, 0xfc, 0xea, 0xd4, 0x93, 0xb4, 0x57, 0xe5, 0x62, 0x1e, 0x76, 0x6c, 0x40, 0xa2, 0xe3, 0xd4, 0xd6, 0xa0, 0x4b, 0x25, 0xe5, 0x33, 0xf1 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_77_public_x[] = { /* QCAVSx */ 0x30, 0xf4, 0x3f, 0xcf, 0x2b, 0x6b, 0x00, 0xde, 0x53, 0xf6, 0x24, 0xf1, 0x54, 0x30, 0x90, 0x68, 0x18, 0x39, 0x71, 0x7d, 0x53, 0xc7, 0xc9, 0x55, 0xd1, 0xd6, 0x9e, 0xfa, 0xf0, 0x34, 0x9b, 0x73, 0x63, 0xac, 0xb4, 0x47, 0x24, 0x01, 0x01, 0xcb, 0xb3, 0xaf, 0x66, 0x41, 0xce, 0x4b, 0x88, 0xe0 }; static const uint8_t nist_kas_ecc_cdh_testvector_77_public_y[] = { /* QCAVSy */ 0x25, 0xe4, 0x6c, 0x0c, 0x54, 0xf0, 0x16, 0x2a, 0x77, 0xef, 0xcc, 0x27, 0xb6, 0xea, 0x79, 0x20, 0x02, 0xae, 0x2b, 0xa8, 0x27, 0x14, 0x29, 0x9c, 0x86, 0x08, 0x57, 0xa6, 0x81, 0x53, 0xab, 0x62, 0xe5, 0x25, 0xec, 0x05, 0x30, 0xd8, 0x1b, 0x5a, 0xa1, 0x58, 0x97, 0x98, 0x1e, 0x85, 0x87, 0x57 }; static const uint8_t nist_kas_ecc_cdh_testvector_77_private[] = { /* dIUT */ 0x92, 0x86, 0x0c, 0x21, 0xbd, 0xe0, 0x61, 0x65, 0xf8, 0xe9, 0x00, 0xc6, 0x87, 0xf8, 0xef, 0x0a, 0x05, 0xd1, 0x4f, 0x29, 0x0b, 0x3f, 0x07, 0xd8, 0xb3, 0xa8, 0xcc, 0x64, 0x04, 0x36, 0x6e, 0x5d, 0x51, 0x19, 0xcd, 0x6d, 0x03, 0xfb, 0x12, 0xdc, 0x58, 0xe8, 0x9f, 0x13, 0xdf, 0x9c, 0xd7, 0x83 }; /* QIUTx = ea4018f5a307c379180bf6a62fd2ceceebeeb7d4df063a66fb838aa35243419791f7e2c9d4803c9319aa0eb03c416b66 */ /* QIUTy = 68835a91484f05ef028284df6436fb88ffebabcdd69ab0133e6735a1bcfb37203d10d340a8328a7b68770ca75878a1a6 */ static const uint8_t nist_kas_ecc_cdh_testvector_77_out[] = { /* ZIUT */ 0xa2, 0x37, 0x42, 0xa2, 0xc2, 0x67, 0xd7, 0x42, 0x5f, 0xda, 0x94, 0xb9, 0x3f, 0x93, 0xbb, 0xcc, 0x24, 0x79, 0x1a, 0xc5, 0x1c, 0xd8, 0xfd, 0x50, 0x1a, 0x23, 0x8d, 0x40, 0x81, 0x2f, 0x4c, 0xbf, 0xc5, 0x9a, 0xac, 0x95, 0x20, 0xd7, 0x58, 0xcf, 0x78, 0x9c, 0x76, 0x30, 0x0c, 0x69, 0xd2, 0xff }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_78_public_x[] = { /* QCAVSx */ 0x1a, 0xef, 0xbf, 0xa2, 0xc6, 0xc8, 0xc8, 0x55, 0xa1, 0xa2, 0x16, 0x77, 0x45, 0x50, 0xb7, 0x9a, 0x24, 0xcd, 0xa3, 0x76, 0x07, 0xbb, 0x1f, 0x7c, 0xc9, 0x06, 0x65, 0x0e, 0xe4, 0xb3, 0x81, 0x6d, 0x68, 0xf6, 0xa9, 0xc7, 0x5d, 0xa6, 0xe4, 0x24, 0x2c, 0xeb, 0xfb, 0x66, 0x52, 0xf6, 0x51, 0x80 }; static const uint8_t nist_kas_ecc_cdh_testvector_78_public_y[] = { /* QCAVSy */ 0x41, 0x9d, 0x28, 0xb7, 0x23, 0xeb, 0xad, 0xb7, 0x65, 0x8f, 0xce, 0xbb, 0x9a, 0xd9, 0xb7, 0xad, 0xea, 0x67, 0x4f, 0x1d, 0xa3, 0xdc, 0x6b, 0x63, 0x97, 0xb5, 0x5d, 0xa0, 0xf6, 0x1a, 0x3e, 0xdd, 0xac, 0xb4, 0xac, 0xdb, 0x14, 0x44, 0x1c, 0xb2, 0x14, 0xb0, 0x4a, 0x08, 0x44, 0xc0, 0x2f, 0xa3 }; static const uint8_t nist_kas_ecc_cdh_testvector_78_private[] = { /* dIUT */ 0x12, 0xcf, 0x6a, 0x22, 0x3a, 0x72, 0x35, 0x25, 0x43, 0x83, 0x0f, 0x3f, 0x18, 0x53, 0x0d, 0x5c, 0xb3, 0x7f, 0x26, 0x88, 0x0a, 0x0b, 0x29, 0x44, 0x82, 0xc8, 0xa8, 0xef, 0x8a, 0xfa, 0xd0, 0x9a, 0xa7, 0x8b, 0x7d, 0xc2, 0xf2, 0x78, 0x9a, 0x78, 0xc6, 0x6a, 0xf5, 0xd1, 0xcc, 0x55, 0x38, 0x53 }; /* QIUTx = fcfcea085e8cf74d0dced1620ba8423694f903a219bbf901b0b59d6ac81baad316a242ba32bde85cb248119b852fab66 */ /* QIUTy = 972e3c68c7ab402c5836f2a16ed451a33120a7750a6039f3ff15388ee622b7065f7122bf6d51aefbc29b37b03404581b */ static const uint8_t nist_kas_ecc_cdh_testvector_78_out[] = { /* ZIUT */ 0x3d, 0x2e, 0x64, 0x0f, 0x35, 0x08, 0x05, 0xee, 0xd1, 0xff, 0x43, 0xb4, 0x0a, 0x72, 0xb2, 0xab, 0xed, 0x0a, 0x51, 0x8b, 0xce, 0xbe, 0x8f, 0x2d, 0x15, 0xb1, 0x11, 0xb6, 0x77, 0x32, 0x23, 0xda, 0x3c, 0x34, 0x89, 0x12, 0x1d, 0xb1, 0x73, 0xd4, 0x14, 0xb5, 0xbd, 0x5a, 0xd7, 0x15, 0x34, 0x35 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_79_public_x[] = { /* QCAVSx */ 0x8b, 0xc0, 0x89, 0x32, 0x6e, 0xc5, 0x5b, 0x9c, 0xf5, 0x9b, 0x34, 0xf0, 0xeb, 0x75, 0x4d, 0x93, 0x59, 0x6c, 0xa2, 0x90, 0xfc, 0xb3, 0x44, 0x4c, 0x83, 0xd4, 0xde, 0x3a, 0x56, 0x07, 0x03, 0x7e, 0xc3, 0x97, 0x68, 0x3f, 0x8c, 0xef, 0x07, 0xea, 0xb2, 0xfe, 0x35, 0x7e, 0xae, 0x36, 0xc4, 0x49 }; static const uint8_t nist_kas_ecc_cdh_testvector_79_public_y[] = { /* QCAVSy */ 0xd9, 0xd1, 0x6c, 0xe8, 0xac, 0x85, 0xb3, 0xf1, 0xe9, 0x45, 0x68, 0x52, 0x1a, 0xae, 0x53, 0x4e, 0x67, 0x13, 0x9e, 0x31, 0x0e, 0xc7, 0x26, 0x93, 0x52, 0x6a, 0xa2, 0xe9, 0x27, 0xb5, 0xb3, 0x22, 0xc9, 0x5a, 0x1a, 0x03, 0x3c, 0x22, 0x9c, 0xb6, 0x77, 0x0c, 0x95, 0x7c, 0xd3, 0x14, 0x8d, 0xd7 }; static const uint8_t nist_kas_ecc_cdh_testvector_79_private[] = { /* dIUT */ 0x8d, 0xd4, 0x80, 0x63, 0xa3, 0xa0, 0x58, 0xc3, 0x34, 0xb5, 0xcc, 0x7a, 0x4c, 0xe0, 0x7d, 0x02, 0xe5, 0xee, 0x6d, 0x8f, 0x1f, 0x3c, 0x51, 0xa1, 0x60, 0x09, 0x62, 0xcb, 0xab, 0x46, 0x26, 0x90, 0xae, 0x3c, 0xd9, 0x74, 0xfb, 0x39, 0xe4, 0x0b, 0x0e, 0x84, 0x3d, 0xaa, 0x0f, 0xd3, 0x2d, 0xe1 }; /* QIUTx = e38c9846248123c3421861ea4d32669a7b5c3c08376ad28104399494c84ff5efa3894adb2c6cbe8c3c913ef2eec5bd3c */ /* QIUTy = 9fa84024a1028796df84021f7b6c9d02f0f4bd1a612a03cbf75a0beea43fef8ae84b48c60172aadf09c1ad016d0bf3ce */ static const uint8_t nist_kas_ecc_cdh_testvector_79_out[] = { /* ZIUT */ 0x6a, 0x42, 0xcf, 0xc3, 0x92, 0xab, 0xa0, 0xbf, 0xd3, 0xd1, 0x7b, 0x7c, 0xcf, 0x06, 0x2b, 0x91, 0xfc, 0x09, 0xbb, 0xf3, 0x41, 0x76, 0x12, 0xd0, 0x2a, 0x90, 0xbd, 0xde, 0x62, 0xae, 0x40, 0xc5, 0x4b, 0xb2, 0xe5, 0x6e, 0x16, 0x7d, 0x6b, 0x70, 0xdb, 0x67, 0x00, 0x97, 0xeb, 0x8d, 0xb8, 0x54 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_80_public_x[] = { /* QCAVSx */ 0xeb, 0x95, 0x2e, 0x2d, 0x9a, 0xc0, 0xc2, 0x0c, 0x6c, 0xc4, 0x8f, 0xb2, 0x25, 0xc2, 0xad, 0x15, 0x4f, 0x53, 0xc8, 0x75, 0x0b, 0x00, 0x3f, 0xd3, 0xb4, 0xed, 0x8e, 0xd1, 0xdc, 0x0d, 0xef, 0xac, 0x61, 0xbc, 0xdd, 0xe0, 0x2a, 0x2b, 0xcf, 0xee, 0x70, 0x67, 0xd7, 0x5d, 0x34, 0x2e, 0xd2, 0xb0 }; static const uint8_t nist_kas_ecc_cdh_testvector_80_public_y[] = { /* QCAVSy */ 0xf1, 0x82, 0x82, 0x05, 0xba, 0xec, 0xe8, 0x2d, 0x1b, 0x26, 0x7d, 0x0d, 0x7f, 0xf2, 0xf9, 0xc9, 0xe1, 0x5b, 0x69, 0xa7, 0x2d, 0xf4, 0x70, 0x58, 0xa9, 0x7f, 0x38, 0x91, 0x00, 0x5d, 0x1f, 0xb3, 0x88, 0x58, 0xf5, 0x60, 0x3d, 0xe8, 0x40, 0xe5, 0x91, 0xdf, 0xa4, 0xf6, 0xe7, 0xd4, 0x89, 0xe1 }; static const uint8_t nist_kas_ecc_cdh_testvector_80_private[] = { /* dIUT */ 0x84, 0xec, 0xe6, 0xcc, 0x34, 0x29, 0x30, 0x9b, 0xd5, 0xb2, 0x3e, 0x95, 0x97, 0x93, 0xed, 0x2b, 0x11, 0x1e, 0xc5, 0xcb, 0x43, 0xb6, 0xc1, 0x80, 0x85, 0xfc, 0xae, 0xa9, 0xef, 0xa0, 0x68, 0x5d, 0x98, 0xa6, 0x26, 0x2e, 0xe0, 0xd3, 0x30, 0xee, 0x25, 0x0b, 0xc8, 0xa6, 0x7d, 0x0e, 0x73, 0x3f }; /* QIUTx = 3222063a2997b302ee60ee1961108ff4c7acf1c0ef1d5fb0d164b84bce71c431705cb9aea9a45f5d73806655a058bee3 */ /* QIUTy = e61fa9e7fbe7cd43abf99596a3d3a039e99fa9dc93b0bdd9cad81966d17eeaf557068afa7c78466bb5b22032d1100fa6 */ static const uint8_t nist_kas_ecc_cdh_testvector_80_out[] = { /* ZIUT */ 0xce, 0x7b, 0xa4, 0x54, 0xd4, 0x41, 0x27, 0x29, 0xa3, 0x2b, 0xb8, 0x33, 0xa2, 0xd1, 0xfd, 0x2a, 0xe6, 0x12, 0xd4, 0x66, 0x7c, 0x3a, 0x90, 0x0e, 0x06, 0x92, 0x14, 0x81, 0x86, 0x13, 0x44, 0x7d, 0xf8, 0xc6, 0x11, 0xde, 0x66, 0xda, 0x20, 0x0d, 0xb7, 0xc3, 0x75, 0xcf, 0x91, 0x3e, 0x44, 0x05 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_81_public_x[] = { /* QCAVSx */ 0x44, 0x1d, 0x02, 0x9e, 0x24, 0x4e, 0xb7, 0x16, 0x8d, 0x64, 0x7d, 0x4d, 0xf5, 0x0d, 0xb5, 0xf4, 0xe4, 0x97, 0x4a, 0xb3, 0xfd, 0xaf, 0x02, 0x2a, 0xff, 0x05, 0x8b, 0x36, 0x95, 0xd0, 0xb8, 0xc8, 0x14, 0xcc, 0x88, 0xda, 0x62, 0x85, 0xdc, 0x6d, 0xf1, 0xac, 0x55, 0xc5, 0x53, 0x88, 0x50, 0x03 }; static const uint8_t nist_kas_ecc_cdh_testvector_81_public_y[] = { /* QCAVSy */ 0xe8, 0x02, 0x5a, 0xc2, 0x3a, 0x41, 0xd4, 0xb1, 0xea, 0x2a, 0xa4, 0x6c, 0x50, 0xc6, 0xe4, 0x79, 0x94, 0x6b, 0x59, 0xb6, 0xd7, 0x64, 0x97, 0xcd, 0x92, 0x49, 0x97, 0x7e, 0x0b, 0xfe, 0x4a, 0x62, 0x62, 0x62, 0x2f, 0x13, 0xd4, 0x2a, 0x3c, 0x43, 0xd6, 0x6b, 0xdb, 0xb3, 0x04, 0x03, 0xc3, 0x45 }; static const uint8_t nist_kas_ecc_cdh_testvector_81_private[] = { /* dIUT */ 0x68, 0xfc, 0xe2, 0x12, 0x1d, 0xc3, 0xa1, 0xe3, 0x7b, 0x10, 0xf1, 0xdd, 0xe3, 0x09, 0xf9, 0xe2, 0xe1, 0x8f, 0xac, 0x47, 0xcd, 0x17, 0x70, 0x95, 0x14, 0x51, 0xc3, 0x48, 0x4c, 0xdb, 0x77, 0xcb, 0x13, 0x6d, 0x00, 0xe7, 0x31, 0x26, 0x05, 0x97, 0xcc, 0x28, 0x59, 0x60, 0x1c, 0x01, 0xa2, 0x5b }; /* QIUTx = 868be0e694841830e424d913d8e7d86b84ee1021d82b0ecf523f09fe89a76c0c95c49f2dfbcf829c1e39709d55efbb3b */ /* QIUTy = 9195eb183675b40fd92f51f37713317e4a9b4f715c8ab22e0773b1bc71d3a219f05b8116074658ee86b52e36f3897116 */ static const uint8_t nist_kas_ecc_cdh_testvector_81_out[] = { /* ZIUT */ 0xba, 0x69, 0xf0, 0xac, 0xdf, 0x3e, 0x1c, 0xa9, 0x5c, 0xaa, 0xac, 0x4e, 0xca, 0xf4, 0x75, 0xbb, 0xe5, 0x1b, 0x54, 0x77, 0x7e, 0xfc, 0xe0, 0x1c, 0xa3, 0x81, 0xf4, 0x53, 0x70, 0xe4, 0x86, 0xfe, 0x87, 0xf9, 0xf4, 0x19, 0xb1, 0x50, 0xc6, 0x1e, 0x32, 0x9a, 0x28, 0x6d, 0x1a, 0xa2, 0x65, 0xec }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_82_public_x[] = { /* QCAVSx */ 0x3d, 0x4e, 0x6b, 0xf0, 0x8a, 0x73, 0x40, 0x4a, 0xcc, 0xc1, 0x62, 0x98, 0x73, 0x46, 0x8e, 0x42, 0x69, 0xe8, 0x2d, 0x90, 0xd8, 0x32, 0xe5, 0x8a, 0xd7, 0x21, 0x42, 0x63, 0x9b, 0x5a, 0x05, 0x6a, 0xd8, 0xd3, 0x5c, 0x66, 0xc6, 0x0e, 0x81, 0x49, 0xfa, 0xc0, 0xc7, 0x97, 0xbc, 0xeb, 0x7c, 0x2f }; static const uint8_t nist_kas_ecc_cdh_testvector_82_public_y[] = { /* QCAVSy */ 0x9b, 0x03, 0x08, 0xdc, 0x7f, 0x0e, 0x6d, 0x29, 0xf8, 0xc2, 0x77, 0xac, 0xbc, 0x65, 0xa2, 0x1e, 0x5a, 0xdb, 0x83, 0xd1, 0x1e, 0x68, 0x73, 0xbc, 0x0a, 0x07, 0xfd, 0xa0, 0x99, 0x7f, 0x48, 0x25, 0x04, 0x60, 0x2f, 0x59, 0xe1, 0x0b, 0xc5, 0xcb, 0x47, 0x6b, 0x83, 0xd0, 0xa4, 0xf7, 0x5e, 0x71 }; static const uint8_t nist_kas_ecc_cdh_testvector_82_private[] = { /* dIUT */ 0xb1, 0x76, 0x4c, 0x54, 0x89, 0x7e, 0x7a, 0xae, 0x6d, 0xe9, 0xe7, 0x75, 0x1f, 0x2f, 0x37, 0xde, 0x84, 0x92, 0x91, 0xf8, 0x8f, 0x0f, 0x91, 0x09, 0x31, 0x55, 0xb8, 0x58, 0xd1, 0xcc, 0x32, 0xa3, 0xa8, 0x79, 0x80, 0xf7, 0x06, 0xb8, 0x6c, 0xc8, 0x3f, 0x92, 0x7b, 0xdf, 0xdb, 0xea, 0xe0, 0xbd }; /* QIUTx = c371222feaa6770c6f3ea3e0dac9740def4fcf821378b7f91ff937c21e0470f70f3a31d5c6b2912195f10926942b48ae */ /* QIUTy = 047d6b4d765123563f81116bc665b7b8cc6207830d805fd84da7cb805a65baa7c12fd592d1b5b5e3e65d9672a9ef7662 */ static const uint8_t nist_kas_ecc_cdh_testvector_82_out[] = { /* ZIUT */ 0x1a, 0x66, 0x88, 0xee, 0x1d, 0x6e, 0x59, 0x86, 0x5d, 0x8e, 0x3a, 0xda, 0x37, 0x78, 0x1d, 0x36, 0xbb, 0x0c, 0x27, 0x17, 0xee, 0xf9, 0x2e, 0x61, 0x96, 0x4d, 0x39, 0x27, 0xcb, 0x76, 0x5c, 0x29, 0x65, 0xea, 0x80, 0xf7, 0xf6, 0x3e, 0x58, 0xc3, 0x22, 0xba, 0x03, 0x97, 0xfa, 0xea, 0xf6, 0x2b }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_83_public_x[] = { /* QCAVSx */ 0xf5, 0xf6, 0xbe, 0xf1, 0xd1, 0x10, 0xda, 0x03, 0xbe, 0x00, 0x17, 0xea, 0xc7, 0x60, 0xcc, 0x34, 0xb2, 0x4d, 0x09, 0x2f, 0x73, 0x6f, 0x23, 0x7b, 0xc7, 0x05, 0x4b, 0x38, 0x65, 0x31, 0x2a, 0x81, 0x3b, 0xcb, 0x62, 0xd2, 0x97, 0xfb, 0x10, 0xa4, 0xf7, 0xab, 0xf5, 0x47, 0x08, 0xfe, 0x2d, 0x3d }; static const uint8_t nist_kas_ecc_cdh_testvector_83_public_y[] = { /* QCAVSy */ 0x06, 0xfd, 0xf8, 0xd7, 0xdc, 0x03, 0x2f, 0x4e, 0x10, 0x01, 0x0b, 0xf1, 0x9c, 0xbf, 0x61, 0x59, 0x32, 0x12, 0x52, 0xff, 0x41, 0x5f, 0xb9, 0x19, 0x20, 0xd4, 0x38, 0xf2, 0x4e, 0x67, 0xe6, 0x0c, 0x2e, 0xb0, 0x46, 0x32, 0x04, 0x67, 0x9f, 0xa3, 0x56, 0xaf, 0x44, 0xce, 0xa9, 0xc9, 0xeb, 0xf5 }; static const uint8_t nist_kas_ecc_cdh_testvector_83_private[] = { /* dIUT */ 0xf0, 0xf7, 0xa9, 0x6e, 0x70, 0xd9, 0x8f, 0xd5, 0xa3, 0x0a, 0xd6, 0x40, 0x6c, 0xf5, 0x6e, 0xb5, 0xb7, 0x2a, 0x51, 0x0e, 0x9f, 0x19, 0x2f, 0x50, 0xe1, 0xf8, 0x45, 0x24, 0xdb, 0xf3, 0xd2, 0x43, 0x9f, 0x72, 0x87, 0xbb, 0x36, 0xf5, 0xaa, 0x91, 0x2a, 0x79, 0xde, 0xaa, 0xb4, 0xad, 0xea, 0x82 }; /* QIUTx = 99c8c41cb1ab5e0854a346e4b08a537c1706a61553387c8d94943ab15196d40dbaa55b8210a77a5d00915f2c4ea69eab */ /* QIUTy = 5531065bdcf17bfb3cb55a02e41a57c7f694c383ad289f900fbd656c2233a93c92e933e7a26f54cbb56f0ad875c51bb0 */ static const uint8_t nist_kas_ecc_cdh_testvector_83_out[] = { /* ZIUT */ 0xd0, 0x6a, 0x56, 0x8b, 0xf2, 0x33, 0x6b, 0x90, 0xcb, 0xac, 0x32, 0x51, 0x61, 0xbe, 0x76, 0x95, 0xea, 0xcb, 0x22, 0x95, 0xf5, 0x99, 0x50, 0x0d, 0x78, 0x7f, 0x07, 0x26, 0x12, 0xac, 0xa3, 0x13, 0xee, 0x5d, 0x87, 0x4f, 0x80, 0x7d, 0xde, 0xf6, 0xc1, 0xf0, 0x23, 0xfe, 0x2b, 0x6e, 0x7c, 0xd0 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_84_public_x[] = { /* QCAVSx */ 0x7c, 0xde, 0xc7, 0x7e, 0x07, 0x37, 0xea, 0x37, 0xc6, 0x7b, 0x89, 0xb7, 0x13, 0x7f, 0xe3, 0x88, 0x18, 0x01, 0x0f, 0x44, 0x64, 0x43, 0x8e, 0xe4, 0xd1, 0xd3, 0x5a, 0x0c, 0x48, 0x8c, 0xad, 0x3f, 0xde, 0x2f, 0x37, 0xd0, 0x08, 0x85, 0xd3, 0x6d, 0x3b, 0x79, 0x5b, 0x9f, 0x93, 0xd2, 0x3a, 0x67 }; static const uint8_t nist_kas_ecc_cdh_testvector_84_public_y[] = { /* QCAVSy */ 0x28, 0xc4, 0x2e, 0xe8, 0xd6, 0x02, 0x7c, 0x56, 0xcf, 0x97, 0x9b, 0xa4, 0xc2, 0x29, 0xfd, 0xb0, 0x1d, 0x23, 0x49, 0x44, 0xf8, 0xac, 0x43, 0x36, 0x50, 0x11, 0x2c, 0x3c, 0xf0, 0xf0, 0x28, 0x44, 0xe8, 0x88, 0xa3, 0x56, 0x9d, 0xfe, 0xf7, 0x82, 0x8a, 0x8a, 0x88, 0x45, 0x89, 0xaa, 0x05, 0x5e }; static const uint8_t nist_kas_ecc_cdh_testvector_84_private[] = { /* dIUT */ 0x9e, 0xfb, 0x87, 0xdd, 0xc6, 0x1d, 0x43, 0xc4, 0x82, 0xba, 0x66, 0xe1, 0xb1, 0x43, 0xae, 0xf6, 0x78, 0xfb, 0xd0, 0xd1, 0xbe, 0xbc, 0x20, 0x00, 0x94, 0x1f, 0xab, 0xe6, 0x77, 0xfe, 0x5b, 0x70, 0x6b, 0xf7, 0x8f, 0xce, 0x36, 0xd1, 0x00, 0xb1, 0x7c, 0xc7, 0x87, 0xea, 0xd7, 0x4b, 0xbc, 0xa2 }; /* QIUTx = 4c34efee8f0c95565d2065d1bbac2a2dd25ae964320eb6bccedc5f3a9b42a881a1afca1bb6b880584fa27b01c193cd92 */ /* QIUTy = d8fb01dbf7cd0a3868c26b951f393c3c56c2858cee901f7793ff5d271925d13a41f8e52409f4eba1990f33acb0bac669 */ static const uint8_t nist_kas_ecc_cdh_testvector_84_out[] = { /* ZIUT */ 0xbb, 0x3b, 0x1e, 0xda, 0x9c, 0x65, 0x60, 0xd8, 0x2f, 0xf5, 0xbe, 0xe4, 0x03, 0x33, 0x9f, 0x1e, 0x80, 0x34, 0x23, 0x38, 0xa9, 0x91, 0x34, 0x48, 0x53, 0xb5, 0x6b, 0x24, 0xf1, 0x09, 0xa4, 0xd9, 0x4b, 0x92, 0xf6, 0x54, 0xf0, 0x42, 0x5e, 0xdd, 0x4c, 0x20, 0x59, 0x03, 0xd7, 0x58, 0x61, 0x04 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_85_public_x[] = { /* QCAVSx */ 0x8e, 0xee, 0xa3, 0xa3, 0x19, 0xc8, 0xdf, 0x99, 0xfb, 0xc2, 0x9c, 0xb5, 0x5f, 0x24, 0x3a, 0x72, 0x0d, 0x95, 0x50, 0x95, 0x15, 0xee, 0x5c, 0xc5, 0x87, 0xa5, 0xc5, 0xae, 0x22, 0xfb, 0xbd, 0x00, 0x9e, 0x62, 0x6d, 0xb3, 0xe9, 0x11, 0xde, 0xf0, 0xb9, 0x9a, 0x4f, 0x7a, 0xe3, 0x04, 0xb1, 0xba }; static const uint8_t nist_kas_ecc_cdh_testvector_85_public_y[] = { /* QCAVSy */ 0x73, 0x87, 0x7d, 0xc9, 0x4d, 0xb9, 0xad, 0xdd, 0xc0, 0xd9, 0xa4, 0xb2, 0x4e, 0x89, 0x76, 0xc2, 0x2d, 0x73, 0xc8, 0x44, 0x37, 0x0e, 0x1e, 0xe8, 0x57, 0xf8, 0xd1, 0xb1, 0x29, 0xa3, 0xbd, 0x5f, 0x63, 0xf4, 0x0c, 0xaf, 0x3b, 0xd0, 0x53, 0x3e, 0x38, 0xa5, 0xf5, 0x77, 0x70, 0x74, 0xff, 0x9e }; static const uint8_t nist_kas_ecc_cdh_testvector_85_private[] = { /* dIUT */ 0xd7, 0x87, 0xa5, 0x7f, 0xde, 0x22, 0xec, 0x65, 0x6a, 0x0a, 0x52, 0x5c, 0xf3, 0xc7, 0x38, 0xb3, 0x0d, 0x73, 0xaf, 0x61, 0xe7, 0x43, 0xea, 0x90, 0x89, 0x3e, 0xcb, 0x2d, 0x7b, 0x62, 0x2a, 0xdd, 0x2f, 0x94, 0xee, 0x25, 0xc2, 0x17, 0x14, 0x67, 0xaf, 0xb0, 0x93, 0xf3, 0xf8, 0x4d, 0x00, 0x18 }; /* QIUTx = 171546923b87b2cbbad664f01ce932bf09d6a6118168678446bfa9f0938608cb4667a98f4ec8ac1462285c2508f74862 */ /* QIUTy = fa41cb4db68ae71f1f8a3e8939dc52c2dec61a83c983beb2a02baf29ec49278088882ed0cf56c74b5c173b552ccf63cf */ static const uint8_t nist_kas_ecc_cdh_testvector_85_out[] = { /* ZIUT */ 0x1e, 0x97, 0xb6, 0x0a, 0xdd, 0x7c, 0xb3, 0x5c, 0x74, 0x03, 0xdd, 0x88, 0x4c, 0x0a, 0x75, 0x79, 0x5b, 0x76, 0x83, 0xff, 0xf8, 0xb4, 0x9f, 0x9d, 0x86, 0x72, 0xa8, 0x20, 0x6b, 0xfd, 0xcf, 0x0a, 0x10, 0x6b, 0x87, 0x68, 0xf9, 0x83, 0x25, 0x8c, 0x74, 0x16, 0x74, 0x22, 0xe4, 0x4e, 0x4d, 0x14 }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_86_public_x[] = { /* QCAVSx */ 0xa7, 0x21, 0xf6, 0xa2, 0xd4, 0x52, 0x74, 0x11, 0x83, 0x4b, 0x13, 0xd4, 0xd3, 0xa3, 0x3c, 0x29, 0xbe, 0xb8, 0x3a, 0xb7, 0x68, 0x24, 0x65, 0xc6, 0xcb, 0xaf, 0x66, 0x24, 0xac, 0xa6, 0xea, 0x58, 0xc3, 0x0e, 0xb0, 0xf2, 0x9d, 0xd8, 0x42, 0x88, 0x66, 0x95, 0x40, 0x0d, 0x72, 0x54, 0xf2, 0x0f }; static const uint8_t nist_kas_ecc_cdh_testvector_86_public_y[] = { /* QCAVSy */ 0x14, 0xba, 0x6e, 0x26, 0x35, 0x51, 0x09, 0xad, 0x35, 0x12, 0x93, 0x66, 0xd5, 0xe3, 0xa6, 0x40, 0xae, 0x79, 0x85, 0x05, 0xa7, 0xfa, 0x55, 0xa9, 0x6a, 0x36, 0xb5, 0xda, 0xd3, 0x3d, 0xe0, 0x04, 0x74, 0xf6, 0x67, 0x0f, 0x52, 0x22, 0x14, 0xdd, 0x79, 0x52, 0x14, 0x0a, 0xb0, 0xa7, 0xeb, 0x68 }; static const uint8_t nist_kas_ecc_cdh_testvector_86_private[] = { /* dIUT */ 0x83, 0xd7, 0x0f, 0x7b, 0x16, 0x4d, 0x9f, 0x4c, 0x22, 0x7c, 0x76, 0x70, 0x46, 0xb2, 0x0e, 0xb3, 0x4d, 0xfc, 0x77, 0x8f, 0x53, 0x87, 0xe3, 0x2e, 0x83, 0x4b, 0x1e, 0x6d, 0xae, 0xc2, 0x0e, 0xdb, 0x8c, 0xa5, 0xbb, 0x41, 0x92, 0x09, 0x3f, 0x54, 0x3b, 0x68, 0xe6, 0xae, 0xb7, 0xce, 0x78, 0x8b }; /* QIUTx = 57cd770f3bbcbe0c78c770eab0b169bc45e139f86378ffae1c2b16966727c2f2eb724572b8f3eb228d130db4ff862c63 */ /* QIUTy = 7ec5c8813b685558d83e924f14bc719f6eb7ae0cbb2c474227c5bda88637a4f26c64817929af999592da6f787490332f */ static const uint8_t nist_kas_ecc_cdh_testvector_86_out[] = { /* ZIUT */ 0x10, 0x23, 0x47, 0x88, 0x40, 0xe5, 0x47, 0x75, 0xbf, 0xc6, 0x92, 0x93, 0xa3, 0xcf, 0x97, 0xf5, 0xbc, 0x91, 0x47, 0x26, 0x45, 0x5c, 0x66, 0x53, 0x8e, 0xb5, 0x62, 0x3e, 0x21, 0x8f, 0xee, 0xf7, 0xdf, 0x4b, 0xef, 0xa2, 0x3e, 0x09, 0xd7, 0x71, 0x45, 0xad, 0x57, 0x7d, 0xb3, 0x2b, 0x41, 0xf9 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_87_public_x[] = { /* QCAVSx */ 0xd8, 0x82, 0xa8, 0x50, 0x5c, 0x2d, 0x5c, 0xb9, 0xb8, 0x85, 0x1f, 0xc6, 0x76, 0x67, 0x7b, 0xb0, 0x08, 0x76, 0x81, 0xad, 0x53, 0xfa, 0xce, 0xba, 0x17, 0x38, 0x28, 0x6b, 0x45, 0x82, 0x75, 0x61, 0xe7, 0xda, 0x37, 0xb8, 0x80, 0x27, 0x6c, 0x65, 0x6c, 0xfc, 0x38, 0xb3, 0x2a, 0xde, 0x84, 0x7e }; static const uint8_t nist_kas_ecc_cdh_testvector_87_public_y[] = { /* QCAVSy */ 0x34, 0xb3, 0x14, 0xbd, 0xc1, 0x34, 0x57, 0x56, 0x54, 0x57, 0x3c, 0xff, 0xaf, 0x40, 0x44, 0x5d, 0xa2, 0xe6, 0xaa, 0xf9, 0x87, 0xf7, 0xe9, 0x13, 0xcd, 0x4c, 0x30, 0x91, 0x52, 0x30, 0x58, 0x98, 0x4a, 0x25, 0xd8, 0xf2, 0x1d, 0xa8, 0x32, 0x61, 0x92, 0x45, 0x6c, 0x6a, 0x0f, 0xa5, 0xf6, 0x0c }; static const uint8_t nist_kas_ecc_cdh_testvector_87_private[] = { /* dIUT */ 0x8f, 0x55, 0x8e, 0x05, 0x81, 0x8b, 0x88, 0xed, 0x38, 0x3d, 0x5f, 0xca, 0x96, 0x2e, 0x53, 0x41, 0x3d, 0xb1, 0xa0, 0xe4, 0x63, 0x7e, 0xda, 0x19, 0x4f, 0x76, 0x19, 0x44, 0xcb, 0xea, 0x11, 0x4a, 0xb9, 0xd5, 0xda, 0x17, 0x5a, 0x7d, 0x57, 0x88, 0x25, 0x50, 0xb0, 0xe4, 0x32, 0xf3, 0x95, 0xa9 }; /* QIUTx = 9a2f57f4867ce753d72b0d95195df6f96c1fae934f602efd7b6a54582f556cfa539d89005ca2edac08ad9b72dd1f60ba */ /* QIUTy = d9b94ee82da9cc601f346044998ba387aee56404dc6ecc8ab2b590443319d0b2b6176f9d0eac2d44678ed561607d09a9 */ static const uint8_t nist_kas_ecc_cdh_testvector_87_out[] = { /* ZIUT */ 0x6a, 0xd6, 0xb9, 0xdc, 0x8a, 0x6c, 0xf0, 0xd3, 0x69, 0x1c, 0x50, 0x1c, 0xbb, 0x96, 0x78, 0x67, 0xf6, 0xe4, 0xbb, 0xb7, 0x64, 0xb6, 0x0d, 0xbf, 0xf8, 0xfc, 0xff, 0x3e, 0xd4, 0x2d, 0xbb, 0xa3, 0x9d, 0x63, 0xcf, 0x32, 0x5b, 0x4b, 0x40, 0x78, 0x85, 0x84, 0x95, 0xdd, 0xee, 0x75, 0xf9, 0x54 }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_88_public_x[] = { /* QCAVSx */ 0x81, 0x5c, 0x9d, 0x77, 0x3d, 0xbf, 0x5f, 0xb6, 0xa1, 0xb8, 0x67, 0x99, 0x96, 0x62, 0x47, 0xf4, 0x00, 0x6a, 0x23, 0xc9, 0x2e, 0x68, 0xc5, 0x5e, 0x9e, 0xaa, 0x99, 0x8b, 0x17, 0xd8, 0x83, 0x2d, 0xd4, 0xd8, 0x4d, 0x92, 0x7d, 0x83, 0x1d, 0x4f, 0x68, 0xda, 0xc6, 0x7c, 0x64, 0x88, 0x21, 0x9f }; static const uint8_t nist_kas_ecc_cdh_testvector_88_public_y[] = { /* QCAVSy */ 0xe7, 0x92, 0x69, 0x94, 0x8b, 0x26, 0x11, 0x48, 0x45, 0x60, 0xfd, 0x49, 0x0f, 0xee, 0xc8, 0x87, 0xcb, 0x55, 0xef, 0x99, 0xa4, 0xb5, 0x24, 0x88, 0x0f, 0xa7, 0x49, 0x9d, 0x6a, 0x07, 0x28, 0x3a, 0xae, 0x2a, 0xfa, 0x33, 0xfe, 0xab, 0x97, 0xde, 0xca, 0x40, 0xbc, 0x60, 0x6c, 0x4d, 0x87, 0x64 }; static const uint8_t nist_kas_ecc_cdh_testvector_88_private[] = { /* dIUT */ 0x0f, 0x5d, 0xee, 0x0a, 0xff, 0xa7, 0xbb, 0xf2, 0x39, 0xd5, 0xdf, 0xf3, 0x29, 0x87, 0xeb, 0xb7, 0xcf, 0x84, 0xfc, 0xce, 0xed, 0x64, 0x3e, 0x1d, 0x3c, 0x62, 0xd0, 0xb3, 0x35, 0x2a, 0xec, 0x23, 0xb6, 0xe5, 0xac, 0x7f, 0xa4, 0x10, 0x5c, 0x8c, 0xb2, 0x61, 0x26, 0xad, 0x2d, 0x18, 0x92, 0xcb }; /* QIUTx = 23346bdfbc9d7c7c736e02bdf607671ff6082fdd27334a8bc75f3b23681ebe614d0597dd614fae58677c835a9f0b273b */ /* QIUTy = 82ba36290d2f94db41479eb45ab4eaf67928a2315138d59eecc9b5285dfddd6714f77557216ea44cc6fc119d8243efaf */ static const uint8_t nist_kas_ecc_cdh_testvector_88_out[] = { /* ZIUT */ 0xcc, 0x9e, 0x06, 0x35, 0x66, 0xd4, 0x6b, 0x35, 0x7b, 0x3f, 0xca, 0xe2, 0x18, 0x27, 0x37, 0x73, 0x31, 0xe5, 0xe2, 0x90, 0xa3, 0x6e, 0x60, 0xcd, 0x7c, 0x39, 0x10, 0x2b, 0x82, 0x8a, 0xe0, 0xb9, 0x18, 0xdc, 0x5a, 0x02, 0x21, 0x6b, 0x07, 0xfe, 0x6f, 0x19, 0x58, 0xd8, 0x34, 0xe4, 0x24, 0x37 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_89_public_x[] = { /* QCAVSx */ 0x1c, 0x0e, 0xed, 0xa7, 0xa2, 0xbe, 0x00, 0x0c, 0x5b, 0xdc, 0xda, 0x04, 0x78, 0xae, 0xd4, 0xdb, 0x73, 0x3d, 0x2a, 0x9e, 0x34, 0x12, 0x24, 0x37, 0x91, 0x23, 0xad, 0x84, 0x70, 0x30, 0xf2, 0x9e, 0x3b, 0x16, 0x8f, 0xa1, 0x8e, 0x89, 0xa3, 0xc0, 0xfb, 0xa2, 0xa6, 0xce, 0x1c, 0x28, 0xfc, 0x3b }; static const uint8_t nist_kas_ecc_cdh_testvector_89_public_y[] = { /* QCAVSy */ 0xec, 0x8c, 0x1c, 0x83, 0xc1, 0x18, 0xc4, 0xdb, 0xea, 0x94, 0x27, 0x18, 0x69, 0xf2, 0xd8, 0x68, 0xeb, 0x65, 0xe8, 0xb4, 0x4e, 0x21, 0xe6, 0xf1, 0x4b, 0x0f, 0x4d, 0x9b, 0x38, 0xc0, 0x68, 0xda, 0xef, 0xa2, 0x71, 0x14, 0x25, 0x5b, 0x9a, 0x41, 0xd0, 0x84, 0xcc, 0x4a, 0x1a, 0xd8, 0x54, 0x56 }; static const uint8_t nist_kas_ecc_cdh_testvector_89_private[] = { /* dIUT */ 0x03, 0x7b, 0x63, 0x3b, 0x5b, 0x8b, 0xa8, 0x57, 0xc0, 0xfc, 0x85, 0x65, 0x68, 0x68, 0x23, 0x2e, 0x2f, 0xeb, 0xf5, 0x95, 0x78, 0x71, 0x83, 0x91, 0xb8, 0x1d, 0xa8, 0x54, 0x1a, 0x00, 0xbf, 0xe5, 0x3c, 0x30, 0xae, 0x04, 0x15, 0x18, 0x47, 0xf2, 0x74, 0x99, 0xf8, 0xd7, 0xab, 0xad, 0x8c, 0xf4 }; /* QIUTx = 8878ac8a947f7d5cb2b47aad24fbb8210d86126585399a2871f84aa9c5fde3074ae540c6bf82275ca822d0feb862bc74 */ /* QIUTy = 632f5cd2f900c2711c32f8930728eb647d31edd8d650f9654e7d33e5ed1b475489d08daa30d8cbcba6bfc3b60d9b5a37 */ static const uint8_t nist_kas_ecc_cdh_testvector_89_out[] = { /* ZIUT */ 0xde, 0xff, 0x7f, 0x03, 0xbd, 0x09, 0x86, 0x5b, 0xaf, 0x94, 0x5e, 0x73, 0xed, 0xff, 0x6d, 0x51, 0x22, 0xc0, 0x3f, 0xb5, 0x61, 0xdb, 0x87, 0xde, 0xc8, 0x66, 0x2e, 0x09, 0xbe, 0xd4, 0x34, 0x0b, 0x28, 0xa9, 0xef, 0xe1, 0x18, 0x33, 0x7b, 0xb7, 0xd3, 0xd4, 0xf7, 0xf5, 0x68, 0x63, 0x5f, 0xf9 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_90_public_x[] = { /* QCAVSx */ 0xc9, 0x5c, 0x18, 0x5e, 0x25, 0x6b, 0xf9, 0x97, 0xf3, 0x0b, 0x31, 0x15, 0x48, 0xae, 0x7f, 0x76, 0x8a, 0x38, 0xde, 0xe4, 0x3e, 0xee, 0xef, 0x43, 0x08, 0x3f, 0x30, 0x77, 0xbe, 0x70, 0xe2, 0xbf, 0x39, 0xac, 0x1d, 0x4d, 0xaf, 0x36, 0x0c, 0x51, 0x4c, 0x8c, 0x6b, 0xe6, 0x23, 0x44, 0x3d, 0x1a }; static const uint8_t nist_kas_ecc_cdh_testvector_90_public_y[] = { /* QCAVSy */ 0x3e, 0x63, 0xa6, 0x63, 0xea, 0xf7, 0x5d, 0x8a, 0x76, 0x5a, 0xb2, 0xb9, 0xa3, 0x55, 0x13, 0xd7, 0x93, 0x3f, 0xa5, 0xe2, 0x64, 0x20, 0xa5, 0x24, 0x45, 0x50, 0xec, 0x6c, 0x3b, 0x6f, 0x03, 0x3b, 0x96, 0xdb, 0x2a, 0xca, 0x3d, 0x6a, 0xc6, 0xaa, 0xb0, 0x52, 0xce, 0x92, 0x95, 0x95, 0xae, 0xa5 }; static const uint8_t nist_kas_ecc_cdh_testvector_90_private[] = { /* dIUT */ 0xe3, 0xd0, 0x71, 0x06, 0xbe, 0xdc, 0xc0, 0x96, 0xe7, 0xd9, 0x16, 0x30, 0xff, 0xd3, 0x09, 0x4d, 0xf2, 0xc7, 0x85, 0x9d, 0xb8, 0xd7, 0xed, 0xbb, 0x2e, 0x37, 0xb4, 0xac, 0x47, 0xf4, 0x29, 0xa6, 0x37, 0xd0, 0x6a, 0x67, 0xd2, 0xfb, 0xa3, 0x38, 0x38, 0x76, 0x4e, 0xf2, 0x03, 0x46, 0x49, 0x91 }; /* QIUTx = e74a1a2b85f1cbf8dbbdf050cf1aff8acb02fda2fb6591f9d3cfe4e79d0ae938a9c1483e7b75f8db24505d65065cdb18 */ /* QIUTy = 1773ee591822f7abaa856a1a60bc0a5203548dbd1cb5025466eff8481bd07614eaa04a16c3db76905913e972a5b6b59d */ static const uint8_t nist_kas_ecc_cdh_testvector_90_out[] = { /* ZIUT */ 0xc8, 0xb1, 0x03, 0x8f, 0x73, 0x5a, 0xd3, 0xbb, 0x3e, 0x46, 0x37, 0xc3, 0xe4, 0x7e, 0xab, 0x48, 0x76, 0x37, 0x91, 0x1a, 0x6b, 0x79, 0x50, 0xa4, 0xe4, 0x61, 0x94, 0x83, 0x29, 0xd3, 0x92, 0x3b, 0x96, 0x9e, 0x5d, 0xb6, 0x63, 0x67, 0x56, 0x23, 0x61, 0x1a, 0x45, 0x7f, 0xcd, 0xa3, 0x5a, 0x71 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_91_public_x[] = { /* QCAVSx */ 0x34, 0x97, 0x23, 0x8a, 0x7e, 0x6a, 0xd1, 0x66, 0xdf, 0x2d, 0xac, 0x03, 0x9a, 0xa4, 0xda, 0xc8, 0xd1, 0x7a, 0xa9, 0x25, 0xe7, 0xc7, 0x63, 0x1e, 0xb3, 0xb5, 0x6e, 0x3a, 0xaa, 0x1c, 0x54, 0x5f, 0xcd, 0x54, 0xd2, 0xe5, 0x98, 0x58, 0x07, 0x91, 0x0f, 0xb2, 0x02, 0xb1, 0xfc, 0x19, 0x1d, 0x2a }; static const uint8_t nist_kas_ecc_cdh_testvector_91_public_y[] = { /* QCAVSy */ 0xa4, 0x9e, 0x5c, 0x48, 0x7d, 0xcc, 0x7a, 0xa4, 0x0a, 0x8f, 0x23, 0x4c, 0x97, 0x94, 0x46, 0x04, 0x0d, 0x91, 0x74, 0xe3, 0xad, 0x35, 0x7d, 0x40, 0x4d, 0x77, 0x65, 0x18, 0x31, 0x95, 0xae, 0xd3, 0xf9, 0x13, 0x64, 0x1b, 0x90, 0xc8, 0x1a, 0x30, 0x6e, 0xbf, 0x0d, 0x89, 0x13, 0x86, 0x13, 0x16 }; static const uint8_t nist_kas_ecc_cdh_testvector_91_private[] = { /* dIUT */ 0xf3, 0xf9, 0xb0, 0xc6, 0x5a, 0x49, 0xa5, 0x06, 0x63, 0x2c, 0x8a, 0x45, 0xb1, 0x0f, 0x66, 0xb5, 0x31, 0x6f, 0x9e, 0xeb, 0x06, 0xfa, 0xe2, 0x18, 0xf2, 0xda, 0x62, 0x33, 0x3f, 0x99, 0x90, 0x51, 0x17, 0xb1, 0x41, 0xc7, 0x60, 0xe8, 0x97, 0x4e, 0xfc, 0x4a, 0xf1, 0x05, 0x70, 0x63, 0x57, 0x91 }; /* QIUTx = a4ad77aa7d86e5361118a6b921710c820721210712f4c347985fdee58aa4effa1e28be80a17b120b139f96300f89b49b */ /* QIUTy = 1ddf22e07e03f1560d8f45a480094560dba9fae7f9531130c1b57ebb95982496524f31d3797793396fa823f22bdb4328 */ static const uint8_t nist_kas_ecc_cdh_testvector_91_out[] = { /* ZIUT */ 0xd3, 0x37, 0xea, 0xa3, 0x2b, 0x9f, 0x71, 0x6b, 0x87, 0x47, 0xb0, 0x05, 0xb9, 0x7a, 0x55, 0x3c, 0x59, 0xda, 0xb0, 0xc5, 0x1d, 0xf4, 0x1a, 0x2d, 0x49, 0x03, 0x9c, 0xda, 0xe7, 0x05, 0xaa, 0x75, 0xc7, 0xb9, 0xe7, 0xbc, 0x0b, 0x6a, 0x0e, 0x8c, 0x57, 0x8c, 0x90, 0x2b, 0xc4, 0xff, 0xf2, 0x3e }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_92_public_x[] = { /* QCAVSx */ 0x90, 0xa3, 0x47, 0x37, 0xd4, 0x5b, 0x1a, 0xa6, 0x5f, 0x74, 0xe0, 0xbd, 0x06, 0x59, 0xbc, 0x11, 0x8f, 0x8e, 0x4b, 0x77, 0x4b, 0x76, 0x19, 0x44, 0xff, 0xa6, 0x57, 0x3c, 0x6d, 0xf4, 0xf4, 0x1d, 0xec, 0x0d, 0x11, 0xb6, 0x97, 0xab, 0xd9, 0x34, 0xd3, 0x90, 0x87, 0x1d, 0x4b, 0x45, 0x32, 0x40 }; static const uint8_t nist_kas_ecc_cdh_testvector_92_public_y[] = { /* QCAVSy */ 0x9b, 0x59, 0x07, 0x19, 0xbb, 0x33, 0x07, 0xc1, 0x49, 0xa7, 0x81, 0x7b, 0xe3, 0x55, 0xd6, 0x84, 0x89, 0x3a, 0x30, 0x77, 0x64, 0xb5, 0x12, 0xee, 0xff, 0xe0, 0x7c, 0xb6, 0x99, 0xed, 0xb5, 0xa6, 0xff, 0xbf, 0x8d, 0x60, 0x32, 0xe6, 0xc7, 0x9d, 0x5e, 0x93, 0xe9, 0x42, 0x12, 0xc2, 0xaa, 0x4e }; static const uint8_t nist_kas_ecc_cdh_testvector_92_private[] = { /* dIUT */ 0x59, 0xfc, 0xe7, 0xfa, 0xd7, 0xde, 0x28, 0xba, 0xc0, 0x23, 0x06, 0x90, 0xc9, 0x57, 0x10, 0xc7, 0x20, 0xe5, 0x28, 0xf9, 0xa4, 0xe5, 0x4d, 0x3a, 0x6a, 0x8c, 0xd5, 0xfc, 0x5c, 0x5f, 0x21, 0x63, 0x70, 0x31, 0xce, 0x1c, 0x5b, 0x4e, 0x3d, 0x39, 0x64, 0x7d, 0x8d, 0xcb, 0x9b, 0x79, 0x46, 0x64 }; /* QIUTx = 9c43bf971edf09402876ee742095381f78b1bd3aa39b5132af75dbfe7e98bd78bde10fe2e903c2b6379e1deee175a1b0 */ /* QIUTy = a6c58ecea5a477bb01bd543b339f1cc49f1371a2cda4d46eb4e53e250597942351a99665a122ffea9bde0636c375daf2 */ static const uint8_t nist_kas_ecc_cdh_testvector_92_out[] = { /* ZIUT */ 0x32, 0xd2, 0x92, 0xb6, 0x95, 0xa4, 0x48, 0x8e, 0x42, 0xa7, 0xb7, 0x92, 0x2e, 0x1a, 0xe5, 0x37, 0xd7, 0x6a, 0x3d, 0x21, 0xa0, 0xb2, 0xe3, 0x68, 0x75, 0xf6, 0x0e, 0x9f, 0x6d, 0x3e, 0x87, 0x79, 0xc2, 0xaf, 0xb3, 0xa4, 0x13, 0xb9, 0xdd, 0x79, 0xae, 0x18, 0xe7, 0x0b, 0x47, 0xd3, 0x37, 0xc1 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_93_public_x[] = { /* QCAVSx */ 0xdd, 0xa5, 0x46, 0xac, 0xfc, 0x8f, 0x90, 0x3d, 0x11, 0xe2, 0xe3, 0x92, 0x06, 0x69, 0x63, 0x6d, 0x44, 0xb2, 0x06, 0x8a, 0xeb, 0x66, 0xff, 0x07, 0xaa, 0x26, 0x6f, 0x00, 0x30, 0xe1, 0x53, 0x5b, 0x0e, 0xd0, 0x20, 0x3c, 0xb8, 0xa4, 0x60, 0xac, 0x99, 0x0f, 0x13, 0x94, 0xfa, 0xf2, 0x2f, 0x1d }; static const uint8_t nist_kas_ecc_cdh_testvector_93_public_y[] = { /* QCAVSy */ 0x15, 0xbb, 0xb2, 0x59, 0x79, 0x13, 0x03, 0x5f, 0xaa, 0xdf, 0x41, 0x34, 0x76, 0xf4, 0xc7, 0x0f, 0x72, 0x79, 0x76, 0x9a, 0x40, 0xc9, 0x86, 0xf4, 0x70, 0xc4, 0x27, 0xb4, 0xee, 0x49, 0x62, 0xab, 0xdf, 0x81, 0x73, 0xbb, 0xad, 0x81, 0x87, 0x47, 0x72, 0x92, 0x5f, 0xd3, 0x2f, 0x0b, 0x15, 0x9f }; static const uint8_t nist_kas_ecc_cdh_testvector_93_private[] = { /* dIUT */ 0x3e, 0x49, 0xfb, 0xf9, 0x50, 0xa4, 0x24, 0xc5, 0xd8, 0x02, 0x28, 0xdc, 0x4b, 0xc3, 0x5e, 0x9f, 0x6c, 0x6c, 0x0c, 0x1d, 0x04, 0x44, 0x09, 0x98, 0xda, 0x0a, 0x60, 0x9a, 0x87, 0x75, 0x75, 0xdb, 0xe4, 0x37, 0xd6, 0xa5, 0xce, 0xda, 0xa2, 0xdd, 0xd2, 0xa1, 0xa1, 0x7f, 0xd1, 0x12, 0xad, 0xed }; /* QIUTx = 5a949594228b1a3d6f599eb3db0d06070fbc551c657b58234ba164ce3fe415fa5f3eb823c08dc29b8c341219c77b6b3d */ /* QIUTy = 2baad447c8c290cfed25edd9031c41d0b76921457327f42db31122b81f337bbf0b1039ec830ce9061a3761953c75e4a8 */ static const uint8_t nist_kas_ecc_cdh_testvector_93_out[] = { /* ZIUT */ 0x12, 0x20, 0xe7, 0xe6, 0xca, 0xd7, 0xb2, 0x5d, 0xf9, 0x8e, 0x5b, 0xbd, 0xcc, 0x6c, 0x0b, 0x65, 0xca, 0x6c, 0x2a, 0x50, 0xc5, 0xff, 0x6c, 0x41, 0xdc, 0xa7, 0x1e, 0x47, 0x56, 0x46, 0xfd, 0x48, 0x96, 0x15, 0x97, 0x9c, 0xa9, 0x2f, 0xb4, 0x38, 0x9a, 0xea, 0xde, 0xfd, 0xe7, 0x9a, 0x24, 0xf1 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_94_public_x[] = { /* QCAVSx */ 0x78, 0x8b, 0xe2, 0x33, 0x6c, 0x52, 0xf4, 0x45, 0x4d, 0x63, 0xee, 0x94, 0x4b, 0x1e, 0x49, 0xbf, 0xb6, 0x19, 0xa0, 0x83, 0x71, 0x04, 0x8e, 0x6d, 0xa9, 0x2e, 0x58, 0x4e, 0xae, 0x70, 0xbd, 0xe1, 0xf1, 0x71, 0xc4, 0xdf, 0x37, 0x8b, 0xd1, 0xf3, 0xc0, 0xab, 0x03, 0x04, 0x8a, 0x23, 0x78, 0x02 }; static const uint8_t nist_kas_ecc_cdh_testvector_94_public_y[] = { /* QCAVSy */ 0x46, 0x73, 0xeb, 0xd8, 0xdb, 0x60, 0x4e, 0xaf, 0x41, 0x71, 0x17, 0x48, 0xba, 0xb2, 0x96, 0x8a, 0x23, 0xca, 0x44, 0x76, 0xce, 0x14, 0x4e, 0x72, 0x82, 0x47, 0xf0, 0x8a, 0xf7, 0x52, 0x92, 0x91, 0x57, 0xb5, 0x83, 0x0f, 0x1e, 0x26, 0x06, 0x74, 0x66, 0xbd, 0xfa, 0x8b, 0x65, 0x14, 0x5a, 0x33 }; static const uint8_t nist_kas_ecc_cdh_testvector_94_private[] = { /* dIUT */ 0x50, 0xcc, 0xc1, 0xf7, 0x07, 0x6e, 0x92, 0xf4, 0x63, 0x8e, 0x85, 0xf2, 0xdb, 0x98, 0xe0, 0xb4, 0x83, 0xe6, 0xe2, 0x20, 0x4c, 0x92, 0xbd, 0xd4, 0x40, 0xa6, 0xde, 0xea, 0x04, 0xe3, 0x7a, 0x07, 0xc6, 0xe7, 0x27, 0x91, 0xc1, 0x90, 0xad, 0x4e, 0x4e, 0x86, 0xe0, 0x1e, 0xfb, 0xa8, 0x42, 0x69 }; /* QIUTx = 756c07df0ce32c839dac9fb4733c9c28b70113a676a7057c38d223f22a3a9095a8d564653af528e04c7e1824be4a6512 */ /* QIUTy = 17c2ce6962cbd2a2e066297b39d57dd9bb4680f0191d390f70b4e461419b2972ce68ad46127fdda6c39195774ea86df3 */ static const uint8_t nist_kas_ecc_cdh_testvector_94_out[] = { /* ZIUT */ 0x79, 0x3b, 0xb9, 0xcd, 0x22, 0xa9, 0x3c, 0xf4, 0x68, 0xfa, 0xf8, 0x04, 0xa3, 0x8d, 0x12, 0xb7, 0x8c, 0xb1, 0x21, 0x89, 0xec, 0x67, 0x9d, 0xdd, 0x2e, 0x9a, 0xa2, 0x1f, 0xa9, 0xa5, 0xa0, 0xb0, 0x49, 0xab, 0x16, 0xa2, 0x35, 0x74, 0xfe, 0x04, 0xc1, 0xc3, 0xc0, 0x23, 0x43, 0xb9, 0x1b, 0xeb }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_95_public_x[] = { /* QCAVSx */ 0xd0, 0x9b, 0xb8, 0x22, 0xeb, 0x99, 0xe3, 0x80, 0x60, 0x95, 0x47, 0x47, 0xc8, 0x2b, 0xb3, 0x27, 0x8c, 0xf9, 0x6b, 0xbf, 0x36, 0xfe, 0xce, 0x34, 0x00, 0xf4, 0xc8, 0x73, 0x83, 0x8a, 0x40, 0xc1, 0x35, 0xeb, 0x3b, 0xab, 0xb9, 0x29, 0x3b, 0xd1, 0x00, 0x1b, 0xf3, 0xec, 0xde, 0xe7, 0xbf, 0x26 }; static const uint8_t nist_kas_ecc_cdh_testvector_95_public_y[] = { /* QCAVSy */ 0xd4, 0x16, 0xdb, 0x6e, 0x1b, 0x87, 0xbb, 0xb7, 0x42, 0x77, 0x88, 0xa3, 0xb6, 0xc7, 0xa7, 0xab, 0x2c, 0x16, 0x5b, 0x1e, 0x36, 0x6f, 0x96, 0x08, 0xdf, 0x51, 0x20, 0x37, 0x58, 0x4f, 0x21, 0x3a, 0x64, 0x8d, 0x47, 0xf1, 0x6a, 0xc3, 0x26, 0xe1, 0x9a, 0xae, 0x97, 0x2f, 0x63, 0xfd, 0x76, 0xc9 }; static const uint8_t nist_kas_ecc_cdh_testvector_95_private[] = { /* dIUT */ 0x06, 0xf1, 0x32, 0xb7, 0x1f, 0x74, 0xd8, 0x7b, 0xf9, 0x98, 0x57, 0xe1, 0xe4, 0x35, 0x0a, 0x59, 0x4e, 0x5f, 0xe3, 0x55, 0x33, 0xb8, 0x88, 0x55, 0x2c, 0xec, 0xcb, 0xc0, 0xd8, 0x92, 0x3c, 0x90, 0x2e, 0x36, 0x14, 0x1d, 0x76, 0x91, 0xe2, 0x86, 0x31, 0xb8, 0xbc, 0x9b, 0xaf, 0xe5, 0xe0, 0x64 }; /* QIUTx = 2a3cc6b8ff5cde926e7e3a189a1bd029c9b586351af8838f4f201cb8f4b70ef3b0da06d352c80fc26baf8f42b784459e */ /* QIUTy = bf9985960176da6d23c7452a2954ffcbbcb24249b43019a2a023e0b3dabd461f19ad3e775c364f3f11ad49f3099400d3 */ static const uint8_t nist_kas_ecc_cdh_testvector_95_out[] = { /* ZIUT */ 0x01, 0x2d, 0x19, 0x1c, 0xf7, 0x40, 0x4a, 0x52, 0x36, 0x78, 0xc6, 0xfc, 0x07, 0x5d, 0xe8, 0x28, 0x5b, 0x24, 0x37, 0x20, 0xa9, 0x03, 0x04, 0x77, 0x08, 0xbb, 0x33, 0xe5, 0x01, 0xe0, 0xdb, 0xee, 0x5b, 0xcc, 0x40, 0xd7, 0xc3, 0xef, 0x6c, 0x6d, 0xa3, 0x9e, 0xa2, 0x4d, 0x83, 0x0d, 0xa1, 0xe8 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_96_public_x[] = { /* QCAVSx */ 0x13, 0x74, 0x12, 0x62, 0xed, 0xe5, 0x86, 0x1d, 0xad, 0x71, 0x06, 0x3d, 0xfd, 0x20, 0x4b, 0x91, 0xea, 0x1d, 0x3b, 0x7c, 0x63, 0x1d, 0xf6, 0x8e, 0xb9, 0x49, 0x96, 0x95, 0x27, 0xd7, 0x9a, 0x1d, 0xc5, 0x92, 0x95, 0xef, 0x7d, 0x2b, 0xca, 0x67, 0x43, 0xe8, 0xcd, 0x77, 0xb0, 0x4d, 0x1b, 0x58 }; static const uint8_t nist_kas_ecc_cdh_testvector_96_public_y[] = { /* QCAVSy */ 0x0b, 0xaa, 0xea, 0xdc, 0x7e, 0x19, 0xd7, 0x4a, 0x8a, 0x04, 0x45, 0x1a, 0x13, 0x5f, 0x1b, 0xe1, 0xb0, 0x2f, 0xe2, 0x99, 0xf9, 0xdc, 0x00, 0xbf, 0xdf, 0x20, 0x1e, 0x83, 0xd9, 0x95, 0xc6, 0x95, 0x0b, 0xcc, 0x1c, 0xb8, 0x9d, 0x6f, 0x7b, 0x30, 0xbf, 0x54, 0x65, 0x6b, 0x9a, 0x4d, 0xa5, 0x86 }; static const uint8_t nist_kas_ecc_cdh_testvector_96_private[] = { /* dIUT */ 0x12, 0x04, 0x8e, 0xbb, 0x43, 0x31, 0xec, 0x19, 0xa1, 0xe2, 0x3f, 0x1a, 0x2c, 0x77, 0x3b, 0x66, 0x4c, 0xcf, 0xe9, 0x0a, 0x28, 0xbf, 0xb8, 0x46, 0xfc, 0x12, 0xf8, 0x1d, 0xff, 0x44, 0xb7, 0x44, 0x3c, 0x77, 0x64, 0x71, 0x64, 0xbf, 0x1e, 0x9e, 0x67, 0xfd, 0x2c, 0x07, 0xa6, 0x76, 0x62, 0x41 }; /* QIUTx = bc18836bc7a9fdf54b5352f37d7528ab8fa8ec544a8c6180511cbfdd49cce377c39e34c031b5240dc9980503ed2f262c */ /* QIUTy = 8086cbe338191080f0b7a16c7afc4c7b0326f9ac66f58552ef4bb9d24de3429ed5d3277ed58fcf48f2b5f61326bec6c6 */ static const uint8_t nist_kas_ecc_cdh_testvector_96_out[] = { /* ZIUT */ 0xad, 0x0f, 0xd3, 0xdd, 0xff, 0xe8, 0x88, 0x4b, 0x92, 0x63, 0xf3, 0xc1, 0x5f, 0xe1, 0xf0, 0x7f, 0x2a, 0x5a, 0x22, 0xff, 0xdc, 0x7e, 0x96, 0x70, 0x85, 0xee, 0xa4, 0x5f, 0x0c, 0xd9, 0x59, 0xf2, 0x0f, 0x18, 0xf5, 0x22, 0x76, 0x3e, 0x28, 0xbc, 0xc9, 0x25, 0xe4, 0x96, 0xa5, 0x2d, 0xda, 0x98 }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_97_public_x[] = { /* QCAVSx */ 0x9e, 0x22, 0xcb, 0xc1, 0x86, 0x57, 0xf5, 0x16, 0xa8, 0x64, 0xb3, 0x7b, 0x78, 0x33, 0x48, 0xb6, 0x6f, 0x1a, 0xa9, 0x62, 0x6c, 0xd6, 0x31, 0xf4, 0xfa, 0x1b, 0xd3, 0x2a, 0xd8, 0x8c, 0xf1, 0x1d, 0xb5, 0x20, 0x57, 0xc6, 0x60, 0x86, 0x0d, 0x39, 0xd1, 0x1f, 0xbf, 0x02, 0x4f, 0xab, 0xd4, 0x44 }; static const uint8_t nist_kas_ecc_cdh_testvector_97_public_y[] = { /* QCAVSy */ 0x6b, 0x0d, 0x53, 0xc7, 0x96, 0x81, 0xc2, 0x81, 0x16, 0xdf, 0x71, 0xe9, 0xce, 0xe7, 0x4f, 0xd5, 0x6c, 0x8b, 0x7f, 0x04, 0xb3, 0x9f, 0x11, 0x98, 0xcc, 0x72, 0x28, 0x4e, 0x98, 0xbe, 0x95, 0x62, 0xe3, 0x59, 0x26, 0xfb, 0x4f, 0x48, 0xa9, 0xfb, 0xec, 0xaf, 0xe7, 0x29, 0x30, 0x9e, 0x8b, 0x6f }; static const uint8_t nist_kas_ecc_cdh_testvector_97_private[] = { /* dIUT */ 0x34, 0xd6, 0x1a, 0x69, 0x9c, 0xa5, 0x76, 0x16, 0x9f, 0xcd, 0xc0, 0xcc, 0x7e, 0x44, 0xe4, 0xe1, 0x22, 0x1d, 0xb0, 0xfe, 0x63, 0xd1, 0x68, 0x50, 0xc8, 0x10, 0x40, 0x29, 0xf7, 0xd4, 0x84, 0x49, 0x71, 0x4b, 0x98, 0x84, 0x32, 0x8c, 0xae, 0x18, 0x99, 0x78, 0x75, 0x4a, 0xb4, 0x60, 0xb4, 0x86 }; /* QIUTx = 867f81104ccd6b163a7902b670ef406042cb0cce7dcdc63d1dfc91b2c40e3cdf7595834bf9eceb79849f1636fc8462fc */ /* QIUTy = 9d4bde8e875ec49697d258d1d59465f8431c6f5531e1c59e9f9ebe3cf164a8d9ce10a12f1979283a959bad244dd83863 */ static const uint8_t nist_kas_ecc_cdh_testvector_97_out[] = { /* ZIUT */ 0xdc, 0x4c, 0xa3, 0x92, 0xdc, 0x15, 0xe2, 0x01, 0x85, 0xf2, 0xc6, 0xa8, 0xea, 0x5e, 0xc3, 0x1d, 0xfc, 0x96, 0xf5, 0x61, 0x53, 0xa4, 0x73, 0x94, 0xb3, 0x07, 0x2b, 0x13, 0xd0, 0x01, 0x5f, 0x5d, 0x4a, 0xe1, 0x3b, 0xeb, 0x3b, 0xed, 0x54, 0xd6, 0x58, 0x48, 0xf9, 0xb8, 0x38, 0x3e, 0x6c, 0x95 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_98_public_x[] = { /* QCAVSx */ 0x2d, 0xb5, 0xda, 0x5f, 0x94, 0x0e, 0xaa, 0x88, 0x4f, 0x4d, 0xb5, 0xec, 0x21, 0x39, 0xb0, 0x46, 0x9f, 0x38, 0xe4, 0xe6, 0xfb, 0xbc, 0xc5, 0x2d, 0xf1, 0x5c, 0x0f, 0x7c, 0xf7, 0xfc, 0xb1, 0x80, 0x8c, 0x74, 0x97, 0x64, 0xb6, 0xbe, 0x85, 0xd2, 0xfd, 0xc5, 0xb1, 0x6f, 0x58, 0xad, 0x5d, 0xc0 }; static const uint8_t nist_kas_ecc_cdh_testvector_98_public_y[] = { /* QCAVSy */ 0x22, 0xe8, 0xb0, 0x2d, 0xcf, 0x33, 0xe1, 0xb5, 0xa0, 0x83, 0x84, 0x95, 0x45, 0xf8, 0x4a, 0xd5, 0xe4, 0x3f, 0x77, 0xcb, 0x71, 0x54, 0x6d, 0xbb, 0xac, 0x0d, 0x11, 0xbd, 0xb2, 0xee, 0x20, 0x2e, 0x9d, 0x38, 0x72, 0xe8, 0xd0, 0x28, 0xc0, 0x89, 0x90, 0x74, 0x6c, 0x5e, 0x1d, 0xde, 0x99, 0x89 }; static const uint8_t nist_kas_ecc_cdh_testvector_98_private[] = { /* dIUT */ 0xdc, 0x60, 0xfa, 0x87, 0x36, 0xd7, 0x02, 0x13, 0x5f, 0xf1, 0x6a, 0xab, 0x99, 0x2b, 0xb8, 0x8e, 0xac, 0x39, 0x7f, 0x59, 0x72, 0x45, 0x6c, 0x72, 0xec, 0x44, 0x73, 0x74, 0xd0, 0xd8, 0xce, 0x61, 0x15, 0x38, 0x31, 0xbf, 0xc8, 0x6a, 0xd5, 0xa6, 0xeb, 0x5b, 0x60, 0xbf, 0xb9, 0x6a, 0x86, 0x2c }; /* QIUTx = b69beede85d0f829fec1b893ccb9c3e052ff692e13b974537bc5b0f9feaf7b22e84f03231629b24866bdb4b8cf908914 */ /* QIUTy = 66f85e2bfcaba2843285b0e14ebc07ef7dafff8b424416fee647b59897b619f20eed95a632e6a4206bf7da429c04c560 */ static const uint8_t nist_kas_ecc_cdh_testvector_98_out[] = { /* ZIUT */ 0xd7, 0x65, 0xb2, 0x08, 0x11, 0x2d, 0x2b, 0x9e, 0xd5, 0xad, 0x10, 0xc4, 0x04, 0x6e, 0x2e, 0x3b, 0x0d, 0xbf, 0x57, 0xc4, 0x69, 0x32, 0x95, 0x19, 0xe2, 0x39, 0xac, 0x28, 0xb2, 0x5c, 0x7d, 0x85, 0x2b, 0xf7, 0x57, 0xd5, 0xde, 0x0e, 0xe2, 0x71, 0xca, 0xdd, 0x02, 0x1d, 0x86, 0xcf, 0xd3, 0x47 }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_99_public_x[] = { /* QCAVSx */ 0x32, 0x96, 0x47, 0xba, 0xa3, 0x54, 0x22, 0x4e, 0xb4, 0x41, 0x48, 0x29, 0xc5, 0x36, 0x8c, 0x82, 0xd7, 0x89, 0x3b, 0x39, 0x80, 0x4e, 0x08, 0xcb, 0xb2, 0x18, 0x0f, 0x45, 0x9b, 0xef, 0xc4, 0xb3, 0x47, 0xa3, 0x89, 0xa7, 0x0c, 0x91, 0xa2, 0x3b, 0xd9, 0xd3, 0x0c, 0x83, 0xbe, 0x52, 0x95, 0xd3 }; static const uint8_t nist_kas_ecc_cdh_testvector_99_public_y[] = { /* QCAVSy */ 0xcc, 0x8f, 0x61, 0x92, 0x3f, 0xad, 0x2a, 0xa8, 0xe5, 0x05, 0xd6, 0xcf, 0xa1, 0x26, 0xb9, 0xfa, 0xbd, 0x5a, 0xf9, 0xdc, 0xe2, 0x90, 0xb7, 0x56, 0x60, 0xef, 0x06, 0xd1, 0xca, 0xa7, 0x36, 0x81, 0xd0, 0x60, 0x89, 0xc3, 0x3b, 0xc4, 0x24, 0x6b, 0x3a, 0xa3, 0x0d, 0xbc, 0xd2, 0x43, 0x5b, 0x12 }; static const uint8_t nist_kas_ecc_cdh_testvector_99_private[] = { /* dIUT */ 0x6f, 0xa6, 0xa1, 0xc7, 0x04, 0x73, 0x09, 0x87, 0xaa, 0x63, 0x4b, 0x05, 0x16, 0xa8, 0x26, 0xab, 0xa8, 0xc6, 0xd6, 0x41, 0x1d, 0x3a, 0x4c, 0x89, 0x77, 0x2d, 0x7a, 0x62, 0x61, 0x02, 0x56, 0xa2, 0xe2, 0xf2, 0x89, 0xf5, 0xc3, 0x44, 0x0b, 0x0e, 0xc1, 0xe7, 0x0f, 0xa3, 0x39, 0xe2, 0x51, 0xce }; /* QIUTx = 53de1fc1328e8de14aecab29ad8a40d6b13768f86f7d298433d20fec791f86f8bc73f358098b256a298bb488de257bf4 */ /* QIUTy = ac28944fd27f17b82946c04c66c41f0053d3692f275da55cd8739a95bd8cd3af2f96e4de959ea8344d8945375905858b */ static const uint8_t nist_kas_ecc_cdh_testvector_99_out[] = { /* ZIUT */ 0xd3, 0x77, 0x88, 0x50, 0xae, 0xb5, 0x88, 0x04, 0xfb, 0xe9, 0xdf, 0xe6, 0xf3, 0x8b, 0x9f, 0xa8, 0xe2, 0x0c, 0x2c, 0xa4, 0xe0, 0xde, 0xc3, 0x35, 0xaa, 0xfc, 0xec, 0xa0, 0x33, 0x3e, 0x3f, 0x24, 0x90, 0xb5, 0x3c, 0x0c, 0x1a, 0x14, 0xa8, 0x31, 0xba, 0x37, 0xc4, 0xb9, 0xd7, 0x4b, 0xe0, 0xf2 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_100_public_x[] = { /* QCAVSx */ 0x29, 0xd8, 0xa3, 0x6d, 0x22, 0x20, 0x0a, 0x75, 0xb7, 0xae, 0xa1, 0xbb, 0x47, 0xcd, 0xfc, 0xb1, 0xb7, 0xfd, 0x66, 0xde, 0x96, 0x70, 0x41, 0x43, 0x47, 0x28, 0xab, 0x5d, 0x53, 0x3a, 0x06, 0x0d, 0xf7, 0x32, 0x13, 0x06, 0x00, 0xfe, 0x6f, 0x75, 0x85, 0x2a, 0x87, 0x1f, 0xb2, 0x93, 0x8e, 0x39 }; static const uint8_t nist_kas_ecc_cdh_testvector_100_public_y[] = { /* QCAVSy */ 0xe1, 0x9b, 0x53, 0xdb, 0x52, 0x83, 0x95, 0xde, 0x89, 0x7a, 0x45, 0x10, 0x89, 0x67, 0x71, 0x5e, 0xb8, 0xcb, 0x55, 0xc3, 0xfc, 0xbf, 0x23, 0x37, 0x93, 0x72, 0xc0, 0x87, 0x3a, 0x05, 0x8d, 0x57, 0x54, 0x4b, 0x10, 0x2e, 0xcc, 0xe7, 0x22, 0xb2, 0xcc, 0xab, 0xb1, 0xa6, 0x03, 0x77, 0x4f, 0xd5 }; static const uint8_t nist_kas_ecc_cdh_testvector_100_private[] = { /* dIUT */ 0x74, 0xad, 0x83, 0x86, 0xc1, 0xcb, 0x2c, 0xa0, 0xfc, 0xde, 0xb3, 0x1e, 0x08, 0x69, 0xbb, 0x3f, 0x48, 0xc0, 0x36, 0xaf, 0xe2, 0xef, 0x11, 0x0c, 0xa3, 0x02, 0xbc, 0x8b, 0x91, 0x0f, 0x62, 0x1c, 0x9f, 0xcc, 0x54, 0xce, 0xc3, 0x2b, 0xb8, 0x9e, 0xc7, 0xca, 0xa8, 0x4c, 0x7b, 0x8e, 0x54, 0xa8 }; /* QIUTx = 27a3e83cfb9d5122e73129d801615857da7cc089cccc9c54ab3032a19e0a0a9f677346e37f08a0b3ed8da6e5dd691063 */ /* QIUTy = 8d60e44aa5e0fd30c918456796af37f0e41957901645e5c596c6d989f5859b03a0bd7d1f4e77936fff3c74d204e5388e */ static const uint8_t nist_kas_ecc_cdh_testvector_100_out[] = { /* ZIUT */ 0x81, 0xe1, 0xe7, 0x15, 0x75, 0xbb, 0x45, 0x05, 0x49, 0x8d, 0xe0, 0x97, 0x35, 0x01, 0x86, 0x43, 0x0a, 0x62, 0x42, 0xfa, 0x6c, 0x57, 0xb8, 0x5a, 0x5f, 0x98, 0x4a, 0x23, 0x37, 0x11, 0x23, 0xd2, 0xd1, 0x42, 0x4e, 0xef, 0xbf, 0x80, 0x42, 0x58, 0x39, 0x2b, 0xc7, 0x23, 0xe4, 0xef, 0x1e, 0x35 }; /* [P-521] */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_101_public_x[] = { /* QCAVSx */ 0x00, 0x68, 0x5a, 0x48, 0xe8, 0x6c, 0x79, 0xf0, 0xf0, 0x87, 0x5f, 0x7b, 0xc1, 0x8d, 0x25, 0xeb, 0x5f, 0xc8, 0xc0, 0xb0, 0x7e, 0x5d, 0xa4, 0xf4, 0x37, 0x0f, 0x3a, 0x94, 0x90, 0x34, 0x08, 0x54, 0x33, 0x4b, 0x1e, 0x1b, 0x87, 0xfa, 0x39, 0x54, 0x64, 0xc6, 0x06, 0x26, 0x12, 0x4a, 0x4e, 0x70, 0xd0, 0xf7, 0x85, 0x60, 0x1d, 0x37, 0xc0, 0x98, 0x70, 0xeb, 0xf1, 0x76, 0x66, 0x68, 0x77, 0xa2, 0x04, 0x6d }; static const uint8_t nist_kas_ecc_cdh_testvector_101_public_y[] = { /* QCAVSy */ 0x01, 0xba, 0x52, 0xc5, 0x6f, 0xc8, 0x77, 0x6d, 0x9e, 0x8f, 0x5d, 0xb4, 0xf0, 0xcc, 0x27, 0x63, 0x6d, 0x0b, 0x74, 0x1b, 0xbe, 0x05, 0x40, 0x06, 0x97, 0x94, 0x2e, 0x80, 0xb7, 0x39, 0x88, 0x4a, 0x83, 0xbd, 0xe9, 0x9e, 0x0f, 0x67, 0x16, 0x93, 0x9e, 0x63, 0x2b, 0xc8, 0x98, 0x6f, 0xa1, 0x8d, 0xcc, 0xd4, 0x43, 0xa3, 0x48, 0xb6, 0xc3, 0xe5, 0x22, 0x49, 0x79, 0x55, 0xa4, 0xf3, 0xc3, 0x02, 0xf6, 0x76 }; static const uint8_t nist_kas_ecc_cdh_testvector_101_private[] = { /* dIUT */ 0x01, 0x7e, 0xec, 0xc0, 0x7a, 0xb4, 0xb3, 0x29, 0x06, 0x8f, 0xba, 0x65, 0xe5, 0x6a, 0x1f, 0x88, 0x90, 0xaa, 0x93, 0x5e, 0x57, 0x13, 0x4a, 0xe0, 0xff, 0xcc, 0xe8, 0x02, 0x73, 0x51, 0x51, 0xf4, 0xea, 0xc6, 0x56, 0x4f, 0x6e, 0xe9, 0x97, 0x4c, 0x5e, 0x68, 0x87, 0xa1, 0xfe, 0xfe, 0xe5, 0x74, 0x3a, 0xe2, 0x24, 0x1b, 0xfe, 0xb9, 0x5d, 0x5c, 0xe3, 0x1d, 0xdc, 0xb6, 0xf9, 0xed, 0xb4, 0xd6, 0xfc, 0x47 }; /* QIUTx = 000000602f9d0cf9e526b29e22381c203c48a886c2b0673033366314f1ffbcba240ba42f4ef38a76174635f91e6b4ed34275eb01c8467d05ca80315bf1a7bbd945f550a5 */ /* QIUTy = 000001b7c85f26f5d4b2d7355cf6b02117659943762b6d1db5ab4f1dbc44ce7b2946eb6c7de342962893fd387d1b73d7a8672d1f236961170b7eb3579953ee5cdc88cd2d */ static const uint8_t nist_kas_ecc_cdh_testvector_101_out[] = { /* ZIUT */ 0x00, 0x5f, 0xc7, 0x04, 0x77, 0xc3, 0xe6, 0x3b, 0xc3, 0x95, 0x4b, 0xd0, 0xdf, 0x3e, 0xa0, 0xd1, 0xf4, 0x1e, 0xe2, 0x17, 0x46, 0xed, 0x95, 0xfc, 0x5e, 0x1f, 0xdf, 0x90, 0x93, 0x0d, 0x5e, 0x13, 0x66, 0x72, 0xd7, 0x2c, 0xc7, 0x70, 0x74, 0x2d, 0x17, 0x11, 0xc3, 0xc3, 0xa4, 0xc3, 0x34, 0xa0, 0xad, 0x97, 0x59, 0x43, 0x6a, 0x4d, 0x3c, 0x5b, 0xf6, 0xe7, 0x4b, 0x95, 0x78, 0xfa, 0xc1, 0x48, 0xc8, 0x31 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_102_public_x[] = { /* QCAVSx */ 0x01, 0xdf, 0x27, 0x7c, 0x15, 0x21, 0x08, 0x34, 0x9b, 0xc3, 0x4d, 0x53, 0x9e, 0xe0, 0xcf, 0x06, 0xb2, 0x4f, 0x5d, 0x35, 0x00, 0x67, 0x7b, 0x44, 0x45, 0x45, 0x3c, 0xcc, 0x21, 0x40, 0x94, 0x53, 0xaa, 0xfb, 0x8a, 0x72, 0xa0, 0xbe, 0x9e, 0xbe, 0x54, 0xd1, 0x22, 0x70, 0xaa, 0x51, 0xb3, 0xab, 0x7f, 0x31, 0x6a, 0xa5, 0xe7, 0x4a, 0x95, 0x1c, 0x5e, 0x53, 0xf7, 0x4c, 0xd9, 0x5f, 0xc2, 0x9a, 0xee, 0x7a }; static const uint8_t nist_kas_ecc_cdh_testvector_102_public_y[] = { /* QCAVSy */ 0x01, 0x3d, 0x52, 0xf3, 0x3a, 0x9f, 0x3c, 0x14, 0x38, 0x4d, 0x15, 0x87, 0xfa, 0x8a, 0xbe, 0x7a, 0xed, 0x74, 0xbc, 0x33, 0x74, 0x9a, 0xd9, 0xc5, 0x70, 0xb4, 0x71, 0x77, 0x64, 0x22, 0xc7, 0xd4, 0x50, 0x5d, 0x9b, 0x0a, 0x96, 0xb3, 0xbf, 0xac, 0x04, 0x1e, 0x4c, 0x6a, 0x69, 0x90, 0xae, 0x7f, 0x70, 0x0e, 0x5b, 0x4a, 0x66, 0x40, 0x22, 0x91, 0x12, 0xde, 0xaf, 0xa0, 0xcd, 0x8b, 0xb0, 0xd0, 0x89, 0xb0 }; static const uint8_t nist_kas_ecc_cdh_testvector_102_private[] = { /* dIUT */ 0x00, 0x81, 0x6f, 0x19, 0xc1, 0xfb, 0x10, 0xef, 0x94, 0xd4, 0xa1, 0xd8, 0x1c, 0x15, 0x6e, 0xc3, 0xd1, 0xde, 0x08, 0xb6, 0x67, 0x61, 0xf0, 0x3f, 0x06, 0xee, 0x4b, 0xb9, 0xdc, 0xeb, 0xbb, 0xfe, 0x1e, 0xaa, 0x1e, 0xd4, 0x9a, 0x6a, 0x99, 0x08, 0x38, 0xd8, 0xed, 0x31, 0x8c, 0x14, 0xd7, 0x4c, 0xc8, 0x72, 0xf9, 0x5d, 0x05, 0xd0, 0x7a, 0xd5, 0x0f, 0x62, 0x1c, 0xeb, 0x62, 0x0c, 0xd9, 0x05, 0xcf, 0xb8 }; /* QIUTx = 000000d45615ed5d37fde699610a62cd43ba76bedd8f85ed31005fe00d6450fbbd101291abd96d4945a8b57bc73b3fe9f4671105309ec9b6879d0551d930dac8ba45d255 */ /* QIUTy = 000001425332844e592b440c0027972ad1526431c06732df19cd46a242172d4dd67c2c8c99dfc22e49949a56cf90c6473635ce82f25b33682fb19bc33bd910ed8ce3a7fa */ static const uint8_t nist_kas_ecc_cdh_testvector_102_out[] = { /* ZIUT */ 0x00, 0x0b, 0x39, 0x20, 0xac, 0x83, 0x0a, 0xde, 0x81, 0x2c, 0x8f, 0x96, 0x80, 0x5d, 0xa2, 0x23, 0x6e, 0x00, 0x2a, 0xcb, 0xbf, 0x13, 0x59, 0x6a, 0x9a, 0xb2, 0x54, 0xd4, 0x4d, 0x0e, 0x91, 0xb6, 0x25, 0x5e, 0xbf, 0x12, 0x29, 0xf3, 0x66, 0xfb, 0x5a, 0x05, 0xc5, 0x88, 0x4e, 0xf4, 0x60, 0x32, 0xc2, 0x6d, 0x42, 0x18, 0x92, 0x73, 0xca, 0x4e, 0xfa, 0x4c, 0x3d, 0xb6, 0xbd, 0x12, 0xa6, 0x85, 0x37, 0x59 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_103_public_x[] = { /* QCAVSx */ 0x00, 0x92, 0xdb, 0x31, 0x42, 0x56, 0x4d, 0x27, 0xa5, 0xf0, 0x00, 0x6f, 0x81, 0x99, 0x08, 0xfb, 0xa1, 0xb8, 0x50, 0x38, 0xa5, 0xbc, 0x25, 0x09, 0x90, 0x6a, 0x49, 0x7d, 0xaa, 0xc6, 0x7f, 0xd7, 0xae, 0xe0, 0xfc, 0x2d, 0xab, 0xa4, 0xe4, 0x33, 0x4e, 0xea, 0xef, 0x0e, 0x00, 0x19, 0x20, 0x4b, 0x47, 0x1c, 0xd8, 0x80, 0x24, 0xf8, 0x21, 0x15, 0xd8, 0x14, 0x9c, 0xc0, 0xcf, 0x4f, 0x7c, 0xe1, 0xa4, 0xd5 }; static const uint8_t nist_kas_ecc_cdh_testvector_103_public_y[] = { /* QCAVSy */ 0x01, 0x6b, 0xad, 0x06, 0x23, 0xf5, 0x17, 0xb1, 0x58, 0xd9, 0x88, 0x18, 0x41, 0xd2, 0x57, 0x1e, 0xfb, 0xad, 0x63, 0xf8, 0x5c, 0xbe, 0x2e, 0x58, 0x19, 0x60, 0xc5, 0xd6, 0x70, 0x60, 0x1a, 0x67, 0x60, 0x27, 0x26, 0x75, 0xa5, 0x48, 0x99, 0x62, 0x17, 0xe4, 0xab, 0x2b, 0x8e, 0xbc, 0xe3, 0x1d, 0x71, 0xfc, 0xa6, 0x3f, 0xcc, 0x3c, 0x08, 0xe9, 0x1c, 0x1d, 0x8e, 0xdd, 0x91, 0xcf, 0x6f, 0xe8, 0x45, 0xf8 }; static const uint8_t nist_kas_ecc_cdh_testvector_103_private[] = { /* dIUT */ 0x01, 0x2f, 0x2e, 0x0c, 0x6d, 0x9e, 0x9d, 0x11, 0x7c, 0xeb, 0x97, 0x23, 0xbc, 0xed, 0x02, 0xeb, 0x3d, 0x4e, 0xeb, 0xf5, 0xfe, 0xea, 0xf8, 0xee, 0x01, 0x13, 0xcc, 0xd8, 0x05, 0x7b, 0x13, 0xdd, 0xd4, 0x16, 0xe0, 0xb7, 0x42, 0x80, 0xc2, 0xd0, 0xba, 0x8e, 0xd2, 0x91, 0xc4, 0x43, 0xbc, 0x1b, 0x14, 0x1c, 0xaf, 0x8a, 0xfb, 0x3a, 0x71, 0xf9, 0x7f, 0x57, 0xc2, 0x25, 0xc0, 0x3e, 0x1e, 0x4d, 0x42, 0xb0 }; /* QIUTx = 000000717fcb3d4a40d103871ede044dc803db508aaa4ae74b70b9fb8d8dfd84bfecfad17871879698c292d2fd5e17b4f9343636c531a4fac68a35a93665546b9a878679 */ /* QIUTy = 000000f3d96a8637036993ab5d244500fff9d2772112826f6436603d3eb234a44d5c4e5c577234679c4f9df725ee5b9118f23d8a58d0cc01096daf70e8dfec0128bdc2e8 */ static const uint8_t nist_kas_ecc_cdh_testvector_103_out[] = { /* ZIUT */ 0x00, 0x6b, 0x38, 0x0a, 0x6e, 0x95, 0x67, 0x92, 0x77, 0xcf, 0xee, 0x4e, 0x83, 0x53, 0xbf, 0x96, 0xef, 0x2a, 0x1e, 0xbd, 0xd0, 0x60, 0x74, 0x9f, 0x2f, 0x04, 0x6f, 0xe5, 0x71, 0x05, 0x37, 0x40, 0xbb, 0xcc, 0x9a, 0x0b, 0x55, 0x79, 0x0b, 0xc9, 0xab, 0x56, 0xc3, 0x20, 0x8a, 0xa0, 0x5d, 0xdf, 0x74, 0x6a, 0x10, 0xa3, 0xad, 0x69, 0x4d, 0xaa, 0xe0, 0x0d, 0x98, 0x0d, 0x94, 0x4a, 0xab, 0xc6, 0xa0, 0x8f }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_104_public_x[] = { /* QCAVSx */ 0x00, 0xfd, 0xd4, 0x0d, 0x9e, 0x9d, 0x97, 0x40, 0x27, 0xcb, 0x3b, 0xae, 0x68, 0x21, 0x62, 0xea, 0xc1, 0x32, 0x8a, 0xd6, 0x1b, 0xc4, 0x35, 0x3c, 0x45, 0xbf, 0x5a, 0xfe, 0x76, 0xbf, 0x60, 0x7d, 0x28, 0x94, 0xc8, 0xcc, 0xe2, 0x36, 0x95, 0xd9, 0x20, 0xf2, 0x46, 0x4f, 0xda, 0x47, 0x73, 0xd4, 0x69, 0x3b, 0xe4, 0xb3, 0x77, 0x35, 0x84, 0x69, 0x1b, 0xdb, 0x03, 0x29, 0xb7, 0xf4, 0xc8, 0x6c, 0xc2, 0x99 }; static const uint8_t nist_kas_ecc_cdh_testvector_104_public_y[] = { /* QCAVSy */ 0x00, 0x34, 0xce, 0xac, 0x6a, 0x3f, 0xef, 0x1c, 0x3e, 0x1c, 0x49, 0x4b, 0xfe, 0x8d, 0x87, 0x2b, 0x18, 0x38, 0x32, 0x21, 0x9a, 0x7e, 0x14, 0xda, 0x41, 0x4d, 0x4e, 0x34, 0x74, 0x57, 0x36, 0x71, 0xec, 0x19, 0xb0, 0x33, 0xbe, 0x83, 0x1b, 0x91, 0x54, 0x35, 0x90, 0x59, 0x25, 0xb4, 0x49, 0x47, 0xc5, 0x92, 0x95, 0x99, 0x45, 0xb4, 0xeb, 0x7c, 0x95, 0x1c, 0x3b, 0x9c, 0x8c, 0xf5, 0x25, 0x30, 0xba, 0x23 }; static const uint8_t nist_kas_ecc_cdh_testvector_104_private[] = { /* dIUT */ 0x00, 0xe5, 0x48, 0xa7, 0x9d, 0x8b, 0x05, 0xf9, 0x23, 0xb9, 0x82, 0x5d, 0x11, 0xb6, 0x56, 0xf2, 0x22, 0xe8, 0xcb, 0x98, 0xb0, 0xf8, 0x9d, 0xe1, 0xd3, 0x17, 0x18, 0x4d, 0xc5, 0xa6, 0x98, 0xf7, 0xc7, 0x11, 0x61, 0xee, 0x7d, 0xc1, 0x1c, 0xd3, 0x1f, 0x4f, 0x4f, 0x8a, 0xe3, 0xa9, 0x81, 0xe1, 0xa3, 0xe7, 0x8b, 0xde, 0xbb, 0x97, 0xd7, 0xc2, 0x04, 0xb9, 0x26, 0x1b, 0x4e, 0xf9, 0x2e, 0x09, 0x18, 0xe0 }; /* QIUTx = 0000000ce800217ed243dd10a79ad73df578aa8a3f9194af528cd1094bbfee27a3b5481ad5862c8876c0c3f91294c0ab3aa806d9020cbaa2ed72b7fecdc5a09a6dad6f32 */ /* QIUTy = 000001543c9ab45b12469232918e21d5a351f9a4b9cbf9efb2afcc402fa9b31650bec2d641a05c440d35331c0893d11fb13151335988b303341301a73dc5f61d574e67d9 */ static const uint8_t nist_kas_ecc_cdh_testvector_104_out[] = { /* ZIUT */ 0x00, 0xfb, 0xbc, 0xd0, 0xb8, 0xd0, 0x53, 0x31, 0xfe, 0xf6, 0x08, 0x6f, 0x22, 0xa6, 0xcc, 0xe4, 0xd3, 0x57, 0x24, 0xab, 0x7a, 0x2f, 0x49, 0xdd, 0x84, 0x58, 0xd0, 0xbf, 0xd5, 0x7a, 0x0b, 0x8b, 0x70, 0xf2, 0x46, 0xc1, 0x7c, 0x44, 0x68, 0xc0, 0x76, 0x87, 0x4b, 0x0d, 0xff, 0x7a, 0x03, 0x36, 0x82, 0x3b, 0x19, 0xe9, 0x8b, 0xf1, 0xce, 0xc0, 0x5e, 0x4b, 0xef, 0xfb, 0x05, 0x91, 0xf9, 0x77, 0x13, 0xc6 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_105_public_x[] = { /* QCAVSx */ 0x00, 0x98, 0xd9, 0x9d, 0xee, 0x08, 0x16, 0x55, 0x0e, 0x84, 0xdb, 0xfc, 0xed, 0x7e, 0x88, 0x13, 0x7f, 0xdd, 0xcf, 0x58, 0x1a, 0x72, 0x5a, 0x45, 0x50, 0x21, 0x11, 0x5f, 0xe4, 0x9f, 0x8d, 0xc3, 0xcf, 0x23, 0x3c, 0xd9, 0xea, 0x0e, 0x6f, 0x03, 0x9d, 0xc7, 0x91, 0x9d, 0xa9, 0x73, 0xcd, 0xce, 0xac, 0xa2, 0x05, 0xda, 0x39, 0xe0, 0xbd, 0x98, 0xc8, 0x06, 0x25, 0x36, 0xc4, 0x7f, 0x25, 0x8f, 0x44, 0xb5 }; static const uint8_t nist_kas_ecc_cdh_testvector_105_public_y[] = { /* QCAVSy */ 0x00, 0xcd, 0x22, 0x5c, 0x87, 0x97, 0x37, 0x1b, 0xe0, 0xc4, 0x29, 0x7d, 0x2b, 0x45, 0x77, 0x40, 0x10, 0x0c, 0x77, 0x41, 0x41, 0xd8, 0xf2, 0x14, 0xc2, 0x3b, 0x61, 0xaa, 0x2b, 0x6c, 0xd4, 0x80, 0x6b, 0x9b, 0x70, 0x72, 0x2a, 0xa4, 0x96, 0x5f, 0xb6, 0x22, 0xf4, 0x2b, 0x73, 0x91, 0xe2, 0x7e, 0x5e, 0xc2, 0x1c, 0x56, 0x79, 0xc5, 0xb0, 0x6b, 0x59, 0x12, 0x73, 0x72, 0x99, 0x7d, 0x42, 0x1a, 0xdc, 0x1e }; static const uint8_t nist_kas_ecc_cdh_testvector_105_private[] = { /* dIUT */ 0x01, 0xc8, 0xaa, 0xe9, 0x4b, 0xb1, 0x0b, 0x8c, 0xa4, 0xf7, 0xbe, 0x57, 0x7b, 0x4f, 0xb3, 0x2b, 0xb2, 0x38, 0x10, 0x32, 0xc4, 0x94, 0x2c, 0x24, 0xfc, 0x2d, 0x75, 0x3e, 0x7c, 0xc5, 0xe4, 0x7b, 0x48, 0x33, 0x89, 0xd9, 0xf3, 0xb9, 0x56, 0xd2, 0x0e, 0xe9, 0x00, 0x1b, 0x1e, 0xef, 0x9f, 0x23, 0x54, 0x5f, 0x72, 0xc5, 0x60, 0x21, 0x40, 0x04, 0x68, 0x39, 0xe9, 0x63, 0x31, 0x3c, 0x3d, 0xec, 0xc8, 0x64 }; /* QIUTx = 00000106a14e2ee8ff970aa8ab0c79b97a33bba2958e070b75b94736b77bbe3f777324fa52872771aa88a63a9e8490c3378df4dc760cd14d62be700779dd1a4377943656 */ /* QIUTy = 0000002366ce3941e0b284b1aa81215d0d3b9778fce23c8cd1e4ed6fa0abf62156c91d4b3eb55999c3471bed275e9e60e5aa9d690d310bfb15c9c5bbd6f5e9eb39682b74 */ static const uint8_t nist_kas_ecc_cdh_testvector_105_out[] = { /* ZIUT */ 0x01, 0x45, 0xcf, 0xa3, 0x8f, 0x25, 0x94, 0x35, 0x16, 0xc9, 0x6a, 0x5f, 0xd4, 0xbf, 0xeb, 0xb2, 0xf6, 0x45, 0xd1, 0x05, 0x20, 0x11, 0x7a, 0xa5, 0x19, 0x71, 0xef, 0xf4, 0x42, 0x80, 0x8a, 0x23, 0xb4, 0xe2, 0x3c, 0x18, 0x7e, 0x63, 0x9f, 0xf9, 0x28, 0xc3, 0x72, 0x5f, 0xbd, 0x1c, 0x0c, 0x2a, 0xd0, 0xd4, 0xae, 0xb2, 0x07, 0xbc, 0x1a, 0x6f, 0xb6, 0xcb, 0x6d, 0x46, 0x78, 0x88, 0xdc, 0x04, 0x4b, 0x3c }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_106_public_x[] = { /* QCAVSx */ 0x00, 0x7a, 0xe1, 0x15, 0xad, 0xaa, 0xf0, 0x41, 0x69, 0x1a, 0xb6, 0xb7, 0xfb, 0x8c, 0x92, 0x1f, 0x99, 0xd8, 0xed, 0x32, 0xd2, 0x83, 0xd6, 0x70, 0x84, 0xe8, 0x0b, 0x9a, 0xd9, 0xc4, 0x0c, 0x56, 0xcd, 0x98, 0x38, 0x9f, 0xb0, 0xa8, 0x49, 0xd9, 0xec, 0xf7, 0x26, 0x8c, 0x29, 0x7b, 0x6f, 0x93, 0x40, 0x61, 0x19, 0xf4, 0x0e, 0x32, 0xb5, 0x77, 0x3e, 0xd2, 0x5a, 0x28, 0xa9, 0xa8, 0x5c, 0x4a, 0x75, 0x88 }; static const uint8_t nist_kas_ecc_cdh_testvector_106_public_y[] = { /* QCAVSy */ 0x01, 0xa2, 0x8e, 0x00, 0x4e, 0x37, 0xee, 0xae, 0xfe, 0x1f, 0x4d, 0xbb, 0x71, 0xf1, 0x87, 0x86, 0x96, 0x14, 0x1a, 0xf3, 0xa1, 0x0a, 0x96, 0x91, 0xc4, 0xed, 0x93, 0x48, 0x72, 0x14, 0x64, 0x3b, 0x76, 0x1f, 0xa4, 0xb0, 0xfb, 0xee, 0xb2, 0x47, 0xcf, 0x6d, 0x3f, 0xba, 0x7a, 0x60, 0x69, 0x75, 0x36, 0xad, 0x03, 0xf4, 0x9b, 0x80, 0xa9, 0xd1, 0xcb, 0x07, 0x96, 0x73, 0x65, 0x49, 0x77, 0xc5, 0xfa, 0x94 }; static const uint8_t nist_kas_ecc_cdh_testvector_106_private[] = { /* dIUT */ 0x00, 0x9b, 0x0a, 0xf1, 0x37, 0xc9, 0x69, 0x6c, 0x75, 0xb7, 0xe6, 0xdf, 0x7b, 0x73, 0x15, 0x6b, 0xb2, 0xd4, 0x5f, 0x48, 0x2e, 0x5a, 0x42, 0x17, 0x32, 0x4f, 0x47, 0x8b, 0x10, 0xce, 0xb7, 0x6a, 0xf0, 0x97, 0x24, 0xcf, 0x86, 0xaf, 0xa3, 0x16, 0xe7, 0xf8, 0x99, 0x18, 0xd3, 0x1d, 0x54, 0x82, 0x4a, 0x5c, 0x33, 0x10, 0x7a, 0x48, 0x3c, 0x15, 0xc1, 0x5b, 0x96, 0xed, 0xc6, 0x61, 0x34, 0x0b, 0x1c, 0x0e }; /* QIUTx = 000000748cdbb875d35f4bccb62abe20e82d32e4c14dc2feb5b87da2d0ccb11c9b6d4b7737b6c46f0dfb4d896e2db92fcf53cdbbae2a404c0babd564ad7adeac6273efa3 */ /* QIUTy = 000001984acab8d8f173323de0bb60274b228871609373bb22a17287e9dec7495873abc09a8915b54c8455c8e02f654f602e23a2bbd7a9ebb74f3009bd65ecc650814cc0 */ static const uint8_t nist_kas_ecc_cdh_testvector_106_out[] = { /* ZIUT */ 0x00, 0x5c, 0x57, 0x21, 0xe9, 0x6c, 0x27, 0x33, 0x19, 0xfd, 0x60, 0xec, 0xc4, 0x6b, 0x59, 0x62, 0xf6, 0x98, 0xe9, 0x74, 0xb4, 0x29, 0xf2, 0x8f, 0xe6, 0x96, 0x2f, 0x4a, 0xc6, 0x56, 0xbe, 0x2e, 0xb8, 0x67, 0x4c, 0x4a, 0xaf, 0xc0, 0x37, 0xea, 0xb4, 0x8e, 0xce, 0x61, 0x29, 0x53, 0xb1, 0xe8, 0xd8, 0x61, 0x01, 0x6b, 0x6a, 0xd0, 0xc7, 0x98, 0x05, 0x78, 0x4c, 0x67, 0xf7, 0x3a, 0xda, 0x96, 0xf3, 0x51 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_107_public_x[] = { /* QCAVSx */ 0x01, 0x25, 0x88, 0x11, 0x5e, 0x6f, 0x7f, 0x7b, 0xdc, 0xfd, 0xf5, 0x7f, 0x03, 0xb1, 0x69, 0xb4, 0x79, 0x75, 0x8b, 0xaa, 0xfd, 0xaf, 0x56, 0x9d, 0x04, 0x13, 0x59, 0x87, 0xb2, 0xce, 0x61, 0x64, 0xc0, 0x2a, 0x57, 0x68, 0x5e, 0xb5, 0x27, 0x6b, 0x5d, 0xae, 0x62, 0x95, 0xd3, 0xfe, 0x90, 0x62, 0x0f, 0x38, 0xb5, 0x53, 0x5c, 0x6d, 0x22, 0x60, 0xc1, 0x73, 0xe6, 0x1e, 0xb8, 0x88, 0xca, 0x92, 0x02, 0x03 }; static const uint8_t nist_kas_ecc_cdh_testvector_107_public_y[] = { /* QCAVSy */ 0x01, 0x54, 0x2c, 0x16, 0x9c, 0xf9, 0x7c, 0x25, 0x96, 0xfe, 0x2d, 0xdd, 0x84, 0x8a, 0x22, 0x2e, 0x36, 0x7c, 0x5f, 0x7e, 0x62, 0x67, 0xeb, 0xc1, 0xbc, 0xd9, 0xab, 0x5d, 0xcf, 0x49, 0x15, 0x8f, 0x1a, 0x48, 0xe4, 0xaf, 0x29, 0xa8, 0x97, 0xb7, 0xe6, 0xa8, 0x20, 0x91, 0xc2, 0xdb, 0x87, 0x4d, 0x8e, 0x7a, 0xbf, 0x0f, 0x58, 0x06, 0x46, 0x91, 0x34, 0x41, 0x54, 0xf3, 0x96, 0xdb, 0xae, 0xd1, 0x88, 0xb6 }; static const uint8_t nist_kas_ecc_cdh_testvector_107_private[] = { /* dIUT */ 0x01, 0xe4, 0x8f, 0xaa, 0xce, 0xe6, 0xde, 0xc8, 0x3f, 0xfc, 0xde, 0x94, 0x4c, 0xf6, 0xbd, 0xf4, 0xce, 0x4b, 0xae, 0x72, 0x74, 0x78, 0x88, 0xeb, 0xaf, 0xee, 0x45, 0x5b, 0x1e, 0x91, 0x58, 0x49, 0x71, 0xef, 0xb4, 0x91, 0x27, 0x97, 0x6a, 0x52, 0xf4, 0x14, 0x29, 0x52, 0xf7, 0xc2, 0x07, 0xec, 0x02, 0x65, 0xf2, 0xb7, 0x18, 0xcf, 0x3e, 0xad, 0x96, 0xea, 0x4f, 0x62, 0xc7, 0x52, 0xe4, 0xf7, 0xac, 0xd3 }; /* QIUTx = 0000010eb1b4d9172bcc23f4f20cc9560fc54928c3f34ea61c00391dc766c76ed9fa608449377d1e4fadd1236025417330b4b91086704ace3e4e6484c606e2a943478c86 */ /* QIUTy = 00000149413864069825ee1d0828da9f4a97713005e9bd1adbc3b38c5b946900721a960fe96ad2c1b3a44fe3de9156136d44cb17cbc2415729bb782e16bfe2deb3069e43 */ static const uint8_t nist_kas_ecc_cdh_testvector_107_out[] = { /* ZIUT */ 0x01, 0x73, 0x6d, 0x97, 0x17, 0x42, 0x9b, 0x4f, 0x41, 0x2e, 0x90, 0x3f, 0xeb, 0xe2, 0xf9, 0xe0, 0xff, 0xfd, 0x81, 0x35, 0x5d, 0x6c, 0xe2, 0xc0, 0x6f, 0xf3, 0xf6, 0x6a, 0x3b, 0xe1, 0x5c, 0xee, 0xc6, 0xe6, 0x5e, 0x30, 0x83, 0x47, 0x59, 0x3f, 0x00, 0xd7, 0xf3, 0x35, 0x91, 0xda, 0x40, 0x43, 0xc3, 0x07, 0x63, 0xd7, 0x27, 0x49, 0xf7, 0x2c, 0xdc, 0xee, 0xbe, 0x82, 0x5e, 0x4b, 0x34, 0xec, 0xd5, 0x70 }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_108_public_x[] = { /* QCAVSx */ 0x01, 0x69, 0x49, 0x1d, 0x55, 0xbd, 0x09, 0x04, 0x9f, 0xdf, 0x4c, 0x2a, 0x53, 0xa6, 0x60, 0x48, 0x0f, 0xee, 0x4c, 0x03, 0xa0, 0x53, 0x86, 0x75, 0xd1, 0xcd, 0x09, 0xb5, 0xbb, 0xa7, 0x8d, 0xac, 0x48, 0x54, 0x3e, 0xf1, 0x18, 0xa1, 0x17, 0x3b, 0x3f, 0xbf, 0x8b, 0x20, 0xe3, 0x9c, 0xe0, 0xe6, 0xb8, 0x90, 0xa1, 0x63, 0xc5, 0x0f, 0x96, 0x45, 0xb3, 0xd2, 0x1d, 0x1c, 0xbb, 0x3b, 0x60, 0xa6, 0xff, 0xf4 }; static const uint8_t nist_kas_ecc_cdh_testvector_108_public_y[] = { /* QCAVSy */ 0x00, 0x83, 0x49, 0x4b, 0x2e, 0xba, 0x76, 0x91, 0x0f, 0xed, 0x33, 0xc7, 0x61, 0x80, 0x45, 0x15, 0x01, 0x1f, 0xab, 0x50, 0xe3, 0xb3, 0x77, 0xab, 0xd8, 0xa8, 0xa0, 0x45, 0xd8, 0x86, 0xd2, 0x23, 0x8d, 0x2c, 0x26, 0x8a, 0xc1, 0xb6, 0xec, 0x88, 0xbd, 0x71, 0xb7, 0xba, 0x78, 0xe2, 0xc3, 0x3c, 0x15, 0x2e, 0x4b, 0xf7, 0xda, 0x5d, 0x56, 0x5e, 0x4a, 0xcb, 0xec, 0xf5, 0xe9, 0x2c, 0x7a, 0xd6, 0x62, 0xbb }; static const uint8_t nist_kas_ecc_cdh_testvector_108_private[] = { /* dIUT */ 0x00, 0xc2, 0x9a, 0xa2, 0x23, 0xea, 0x8d, 0x64, 0xb4, 0xa1, 0xed, 0xa2, 0x7f, 0x39, 0xd3, 0xbc, 0x98, 0xea, 0x01, 0x48, 0xdd, 0x98, 0xc1, 0xcb, 0xe5, 0x95, 0xf8, 0xfd, 0x2b, 0xfb, 0xde, 0x11, 0x9c, 0x9e, 0x01, 0x7a, 0x50, 0xf5, 0xd1, 0xfc, 0x12, 0x1c, 0x08, 0xc1, 0xce, 0xf3, 0x1b, 0x75, 0x88, 0x59, 0x55, 0x6e, 0xb3, 0xe0, 0xe0, 0x42, 0xd8, 0xdd, 0x6a, 0xaa, 0xc5, 0x7a, 0x05, 0xca, 0x61, 0xe3 }; /* QIUTx = 0000001511c848ef60d5419a98d10204db0fe58224124370061bcfa4e9249d50618c56bf3722471b259f38263bb7b280d23caf2a1ee8737f9371cdb2732cdc958369930c */ /* QIUTy = 000001d461681ae6d8c49b4c5f4d6016143fb1bd7491573e3ed0e6c48b82e821644f87f82f0e5f08fd16f1f98fa17586200ab02ed8c627b35c3f27617ec5fd92f456203f */ static const uint8_t nist_kas_ecc_cdh_testvector_108_out[] = { /* ZIUT */ 0x01, 0x8f, 0x2a, 0xe9, 0x47, 0x6c, 0x77, 0x17, 0x26, 0xa7, 0x77, 0x80, 0x20, 0x8d, 0xed, 0xfe, 0xfa, 0x20, 0x54, 0x88, 0x99, 0x6b, 0x18, 0xfe, 0xcc, 0x50, 0xbf, 0xd4, 0xc1, 0x32, 0x75, 0x3f, 0x57, 0x66, 0xb2, 0xcd, 0x74, 0x4a, 0xfa, 0x99, 0x18, 0x60, 0x6d, 0xe2, 0xe0, 0x16, 0xef, 0xfc, 0x63, 0x62, 0x2e, 0x90, 0x29, 0xe7, 0x6d, 0xc6, 0xe3, 0xf0, 0xc6, 0x9f, 0x7a, 0xec, 0xed, 0x56, 0x5c, 0x2c }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_109_public_x[] = { /* QCAVSx */ 0x00, 0x84, 0x15, 0xf5, 0xbb, 0xd0, 0xee, 0xe3, 0x87, 0xd6, 0xc0, 0x9d, 0x0e, 0xf8, 0xac, 0xaf, 0x29, 0xc6, 0x6d, 0xb4, 0x5d, 0x6b, 0xa1, 0x01, 0x86, 0x0a, 0xe4, 0x5d, 0x3c, 0x60, 0xe1, 0xe0, 0xe3, 0xf7, 0x24, 0x7a, 0x46, 0x26, 0xa6, 0x0f, 0xdd, 0x40, 0x49, 0x65, 0xc3, 0x56, 0x6c, 0x79, 0xf6, 0x44, 0x9e, 0x85, 0x6c, 0xe0, 0xbf, 0x94, 0x61, 0x9f, 0x97, 0xda, 0x8d, 0xa2, 0x4b, 0xd2, 0xcf, 0xb6 }; static const uint8_t nist_kas_ecc_cdh_testvector_109_public_y[] = { /* QCAVSy */ 0x00, 0xfd, 0xd7, 0xc5, 0x9c, 0x58, 0xc3, 0x61, 0xbc, 0x50, 0xa7, 0xa5, 0xd0, 0xd3, 0x6f, 0x72, 0x3b, 0x17, 0xc4, 0xf2, 0xad, 0x2b, 0x03, 0xc2, 0x4d, 0x42, 0xdc, 0x50, 0xf7, 0x4a, 0x8c, 0x46, 0x5a, 0x0a, 0xfc, 0x46, 0x83, 0xf1, 0x0f, 0xab, 0x84, 0x65, 0x2d, 0xfe, 0x9e, 0x92, 0x8c, 0x26, 0x26, 0xb5, 0x45, 0x64, 0x53, 0xe1, 0x57, 0x3f, 0xf6, 0x0b, 0xe1, 0x50, 0x74, 0x67, 0xd4, 0x31, 0xfb, 0xb2 }; static const uint8_t nist_kas_ecc_cdh_testvector_109_private[] = { /* dIUT */ 0x00, 0x28, 0x69, 0x2b, 0xe2, 0xbf, 0x5c, 0x4b, 0x48, 0x93, 0x98, 0x46, 0xfb, 0x3d, 0x5b, 0xce, 0x74, 0x65, 0x4b, 0xb2, 0x64, 0x6e, 0x15, 0xf8, 0x38, 0x9e, 0x23, 0x70, 0x8a, 0x1a, 0xfa, 0xdf, 0x56, 0x15, 0x11, 0xea, 0x0d, 0x99, 0x57, 0xd0, 0xb5, 0x34, 0x53, 0x81, 0x9d, 0x60, 0xfb, 0xa8, 0xf6, 0x5a, 0x18, 0xf7, 0xb2, 0x9d, 0xf0, 0x21, 0xb1, 0xbb, 0x01, 0xcd, 0x16, 0x32, 0x93, 0xac, 0xc3, 0xcc }; /* QIUTx = 000001cfdc10c799f5c79cb6930a65fba351748e07567993e5e410ef4cacc4cd8a25784991eb4674e41050f930c7190ac812b9245f48a7973b658daf408822fe5b85f668 */ /* QIUTy = 00000180d9ddfc9af77b9c4a6f02a834db15e535e0b3845b2cce30388301b51cecbe3276307ef439b5c9e6a72dc2d94d879bc395052dbb4a5787d06efb280210fb8be037 */ static const uint8_t nist_kas_ecc_cdh_testvector_109_out[] = { /* ZIUT */ 0x01, 0x05, 0xa3, 0x46, 0x98, 0x8b, 0x92, 0xed, 0x8c, 0x7a, 0x25, 0xce, 0x4d, 0x79, 0xd2, 0x1b, 0xc8, 0x6c, 0xfc, 0xc7, 0xf9, 0x9c, 0x6c, 0xd1, 0x9d, 0xbb, 0x4a, 0x39, 0xf4, 0x8a, 0xb9, 0x43, 0xb7, 0x9e, 0x4f, 0x06, 0x47, 0x34, 0x8d, 0xa0, 0xb8, 0x0b, 0xd8, 0x64, 0xb8, 0x5c, 0x6b, 0x8d, 0x92, 0x53, 0x6d, 0x6a, 0xa5, 0x44, 0xdc, 0x75, 0x37, 0xa0, 0x0c, 0x85, 0x8f, 0x8b, 0x66, 0x31, 0x9e, 0x25 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_110_public_x[] = { /* QCAVSx */ 0x01, 0xc7, 0x21, 0xee, 0xa8, 0x05, 0xa5, 0xcb, 0xa2, 0x9f, 0x34, 0xba, 0x57, 0x58, 0x77, 0x5b, 0xe0, 0xcf, 0x61, 0x60, 0xe6, 0xc0, 0x87, 0x23, 0xf5, 0xab, 0x17, 0xbf, 0x96, 0xa1, 0xff, 0x2b, 0xd9, 0x42, 0x79, 0x61, 0xa4, 0xf3, 0x4b, 0x07, 0xfc, 0x0b, 0x14, 0xca, 0x4b, 0x2b, 0xf6, 0x84, 0x5d, 0xeb, 0xd5, 0xa8, 0x69, 0xf1, 0x24, 0xeb, 0xfa, 0x7a, 0xa7, 0x2f, 0xe5, 0x65, 0x05, 0x0b, 0x7f, 0x18 }; static const uint8_t nist_kas_ecc_cdh_testvector_110_public_y[] = { /* QCAVSy */ 0x00, 0xb6, 0xe8, 0x9e, 0xb0, 0xe1, 0xdc, 0xf1, 0x81, 0x23, 0x6f, 0x7c, 0x54, 0x8f, 0xd1, 0xa8, 0xc1, 0x6b, 0x25, 0x8b, 0x52, 0xc1, 0xa9, 0xbf, 0xd3, 0xfe, 0x8f, 0x22, 0x84, 0x1b, 0x26, 0x76, 0x32, 0x65, 0xf0, 0x74, 0xc4, 0xcc, 0xf2, 0xd6, 0x34, 0xae, 0x97, 0xb7, 0x01, 0x95, 0x6f, 0x67, 0xa1, 0x10, 0x06, 0xc5, 0x2d, 0x97, 0x19, 0x7d, 0x92, 0xf5, 0x85, 0xf5, 0x74, 0x8b, 0xc2, 0x67, 0x2e, 0xeb }; static const uint8_t nist_kas_ecc_cdh_testvector_110_private[] = { /* dIUT */ 0x01, 0x19, 0x4d, 0x1e, 0xe6, 0x13, 0xf5, 0x36, 0x6c, 0xbc, 0x44, 0xb5, 0x04, 0xd2, 0x1a, 0x0c, 0xf6, 0x71, 0x5e, 0x20, 0x9c, 0xd3, 0x58, 0xf2, 0xdd, 0x5f, 0x3e, 0x71, 0xcc, 0x0d, 0x67, 0xd0, 0xe9, 0x64, 0x16, 0x8c, 0x42, 0xa0, 0x84, 0xeb, 0xda, 0x74, 0x6f, 0x98, 0x63, 0xa8, 0x6b, 0xac, 0xff, 0xc8, 0x19, 0xf1, 0xed, 0xf1, 0xb8, 0xc7, 0x27, 0xcc, 0xfb, 0x30, 0x47, 0x24, 0x0a, 0x57, 0xc4, 0x35 }; /* QIUTx = 0000016bd15c8a58d366f7f2b2f298cc87b7485e9ee70d11d12448b8377c0a82c7626f67aff7f97be7a3546bf417eeeddf75a93c130191c84108042ea2fca17fd3f80d14 */ /* QIUTy = 000001560502d04b74fce1743aab477a9d1eac93e5226981fdb97a7478ce4ce566ff7243931284fad850b0c2bcae0ddd2d97790160c1a2e77c3ed6c95ecc44b89e2637fc */ static const uint8_t nist_kas_ecc_cdh_testvector_110_out[] = { /* ZIUT */ 0x00, 0x45, 0x31, 0xb3, 0xd2, 0xc6, 0xcd, 0x12, 0xf2, 0x16, 0x04, 0xc8, 0x61, 0x0e, 0x67, 0x23, 0xdb, 0xf4, 0xda, 0xf8, 0x0b, 0x5a, 0x45, 0x9d, 0x6b, 0xa5, 0x81, 0x43, 0x97, 0xd1, 0xc1, 0xf7, 0xa2, 0x1d, 0x7c, 0x11, 0x4b, 0xe9, 0x64, 0xe2, 0x73, 0x76, 0xaa, 0xeb, 0xe3, 0xa7, 0xbc, 0x3d, 0x6a, 0xf7, 0xa7, 0xf8, 0xc7, 0xbe, 0xfb, 0x61, 0x1a, 0xfe, 0x48, 0x7f, 0xf0, 0x32, 0x92, 0x1f, 0x75, 0x0f }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_111_public_x[] = { /* QCAVSx */ 0x01, 0xc3, 0x58, 0x23, 0xe4, 0x40, 0xa9, 0x36, 0x3a, 0xb9, 0x8d, 0x9f, 0xc7, 0xa7, 0xbc, 0x0c, 0x05, 0x32, 0xdc, 0x79, 0x77, 0xa7, 0x91, 0x65, 0x59, 0x9b, 0xf1, 0xa9, 0xcc, 0x64, 0xc0, 0x0f, 0xb3, 0x87, 0xb4, 0x2c, 0xca, 0x36, 0x52, 0x86, 0xe8, 0x43, 0x03, 0x60, 0xbf, 0xad, 0x36, 0x43, 0xbc, 0x31, 0x35, 0x4e, 0xda, 0x50, 0xdc, 0x93, 0x6c, 0x32, 0x9e, 0xcd, 0xb6, 0x09, 0x05, 0xc4, 0x0f, 0xcb }; static const uint8_t nist_kas_ecc_cdh_testvector_111_public_y[] = { /* QCAVSy */ 0x00, 0xd9, 0xe7, 0xf4, 0x33, 0x53, 0x1e, 0x44, 0xdf, 0x4f, 0x6d, 0x51, 0x42, 0x01, 0xcb, 0xaa, 0xbb, 0x06, 0xba, 0xdd, 0x67, 0x83, 0xe0, 0x11, 0x11, 0x72, 0x6d, 0x81, 0x55, 0x31, 0xd2, 0x33, 0xc5, 0xcd, 0xb7, 0x22, 0x89, 0x3f, 0xfb, 0xb2, 0x02, 0x72, 0x59, 0xd5, 0x94, 0xde, 0x77, 0x43, 0x88, 0x09, 0x73, 0x81, 0x20, 0xc6, 0xf7, 0x83, 0x93, 0x4f, 0x92, 0x6c, 0x3f, 0xb6, 0x9b, 0x40, 0xc4, 0x09 }; static const uint8_t nist_kas_ecc_cdh_testvector_111_private[] = { /* dIUT */ 0x01, 0xfd, 0x90, 0xe3, 0xe4, 0x16, 0xe9, 0x8a, 0xa3, 0xf2, 0xb6, 0xaf, 0xa7, 0xf3, 0xbf, 0x36, 0x8e, 0x45, 0x1a, 0xd9, 0xca, 0x5b, 0xd5, 0x4b, 0x5b, 0x14, 0xae, 0xe2, 0xed, 0x67, 0x23, 0xdd, 0xe5, 0x18, 0x1f, 0x50, 0x85, 0xb6, 0x81, 0x69, 0xb0, 0x9f, 0xbe, 0xc7, 0x21, 0x37, 0x2c, 0xcf, 0x6b, 0x28, 0x47, 0x13, 0xf9, 0xa6, 0x35, 0x6b, 0x8d, 0x56, 0x0a, 0x8f, 0xf7, 0x8c, 0xa3, 0x73, 0x7c, 0x88 }; /* QIUTx = 000001ebea1b10d3e3b971b7efb69fc878de11c7f472e4e4d384c31b8d6288d8071517acade9b39796c7af5163bcf71aeda777533f382c6cf0a4d9bbb938c85f44b78037 */ /* QIUTy = 0000016b0e3e19c2996b2cbd1ff64730e7ca90edca1984f9b2951333535e5748baa34a99f61ff4d5f812079e0f01e87789f34efdad8098015ee74a4f846dd190d16dc6e1 */ static const uint8_t nist_kas_ecc_cdh_testvector_111_out[] = { /* ZIUT */ 0x01, 0x00, 0xc8, 0x93, 0x59, 0x69, 0x07, 0x7b, 0xae, 0x0b, 0xa8, 0x9e, 0xf0, 0xdf, 0x81, 0x61, 0xd9, 0x75, 0xec, 0x58, 0x70, 0xac, 0x81, 0x1a, 0xe7, 0xe6, 0x5c, 0xa5, 0x39, 0x4e, 0xfb, 0xa4, 0xf0, 0x63, 0x3d, 0x41, 0xbf, 0x79, 0xea, 0x5e, 0x5b, 0x94, 0x96, 0xbb, 0xd7, 0xaa, 0xe0, 0x00, 0xb0, 0x59, 0x4b, 0xaa, 0x82, 0xef, 0x8f, 0x24, 0x4e, 0x69, 0x84, 0xae, 0x87, 0xae, 0x1e, 0xd1, 0x24, 0xb7 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_112_public_x[] = { /* QCAVSx */ 0x00, 0x09, 0x30, 0x57, 0xfb, 0x86, 0x2f, 0x2a, 0xd2, 0xe8, 0x2e, 0x58, 0x1b, 0xae, 0xb3, 0x32, 0x4e, 0x7b, 0x32, 0x94, 0x6f, 0x2b, 0xa8, 0x45, 0xa9, 0xbe, 0xee, 0xd8, 0x7d, 0x69, 0x95, 0xf5, 0x49, 0x18, 0xec, 0x66, 0x19, 0xb9, 0x93, 0x19, 0x55, 0xd5, 0xa8, 0x9d, 0x4d, 0x74, 0xad, 0xf1, 0x04, 0x6b, 0xb3, 0x62, 0x19, 0x2f, 0x2e, 0xf6, 0xbd, 0x3e, 0x3d, 0x2d, 0x04, 0xdd, 0x1f, 0x87, 0x05, 0x4a }; static const uint8_t nist_kas_ecc_cdh_testvector_112_public_y[] = { /* QCAVSy */ 0x00, 0xaa, 0x3f, 0xb2, 0x44, 0x83, 0x35, 0xf6, 0x94, 0xe3, 0xcd, 0xa4, 0xae, 0x0c, 0xc7, 0x1b, 0x1b, 0x2f, 0x2a, 0x20, 0x6f, 0xa8, 0x02, 0xd7, 0x26, 0x2f, 0x19, 0x98, 0x3c, 0x44, 0x67, 0x4f, 0xe1, 0x53, 0x27, 0xac, 0xaa, 0xc1, 0xfa, 0x40, 0x42, 0x4c, 0x39, 0x5a, 0x65, 0x56, 0xcb, 0x81, 0x67, 0x31, 0x25, 0x27, 0xfa, 0xe5, 0x86, 0x5e, 0xcf, 0xfc, 0x14, 0xbb, 0xdc, 0x17, 0xda, 0x78, 0xcd, 0xcf }; static const uint8_t nist_kas_ecc_cdh_testvector_112_private[] = { /* dIUT */ 0x00, 0x90, 0x12, 0xec, 0xfd, 0xad, 0xc8, 0x5c, 0xed, 0x63, 0x0a, 0xfe, 0xa5, 0x34, 0xcd, 0xc8, 0xe9, 0xd1, 0xab, 0x8b, 0xe5, 0xf3, 0x75, 0x3d, 0xcf, 0x5f, 0x2b, 0x09, 0xb4, 0x0e, 0xda, 0x66, 0xfc, 0x68, 0x58, 0x54, 0x9b, 0xc3, 0x6e, 0x6f, 0x8d, 0xf5, 0x59, 0x98, 0xcf, 0xa9, 0xa0, 0x70, 0x3a, 0xec, 0xf6, 0xc4, 0x27, 0x99, 0xc2, 0x45, 0x01, 0x10, 0x64, 0xf5, 0x30, 0xc0, 0x9d, 0xb9, 0x83, 0x69 }; /* QIUTx = 000000234e32be0a907131d2d128a6477e0caceb86f02479745e0fe245cb332de631c078871160482eeef584e274df7fa412cea3e1e91f71ecba8781d9205d48386341ad */ /* QIUTy = 000001cf86455b09b1c005cffba8d76289a3759628c874beea462f51f30bd581e3803134307dedbb771b3334ee15be2e242cd79c3407d2f58935456c6941dd9b6d155a46 */ static const uint8_t nist_kas_ecc_cdh_testvector_112_out[] = { /* ZIUT */ 0x01, 0x7f, 0x36, 0xaf, 0x19, 0x30, 0x38, 0x41, 0xd1, 0x3a, 0x38, 0x9d, 0x95, 0xec, 0x0b, 0x80, 0x1c, 0x7f, 0x9a, 0x67, 0x9a, 0x82, 0x31, 0x46, 0xc7, 0x5c, 0x17, 0xbc, 0x44, 0x25, 0x6e, 0x9a, 0xd4, 0x22, 0xa4, 0xf8, 0xb3, 0x1f, 0x14, 0x64, 0x7b, 0x2c, 0x7d, 0x31, 0x7b, 0x93, 0x3f, 0x7c, 0x29, 0x46, 0xc4, 0xb8, 0xab, 0xd1, 0xd5, 0x6d, 0x62, 0x0f, 0xab, 0x1b, 0x5f, 0xf1, 0xa3, 0xad, 0xc7, 0x1f }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_113_public_x[] = { /* QCAVSx */ 0x00, 0x83, 0x19, 0x2e, 0xd0, 0xb1, 0xcb, 0x31, 0xf7, 0x58, 0x17, 0x79, 0x49, 0x37, 0xf6, 0x6a, 0xd9, 0x1c, 0xf7, 0x45, 0x52, 0xcd, 0x51, 0x0c, 0xed, 0xb9, 0xfd, 0x64, 0x13, 0x10, 0x42, 0x2a, 0xf5, 0xd0, 0x9f, 0x22, 0x1c, 0xad, 0x24, 0x9e, 0xe8, 0x14, 0xd1, 0x6d, 0xd7, 0xac, 0x84, 0xde, 0xd9, 0xea, 0xcd, 0xc2, 0x83, 0x40, 0xfc, 0xfc, 0x9c, 0x0c, 0x06, 0xab, 0xe3, 0x0a, 0x2f, 0xc2, 0x8c, 0xd8 }; static const uint8_t nist_kas_ecc_cdh_testvector_113_public_y[] = { /* QCAVSy */ 0x00, 0x22, 0x12, 0xed, 0x86, 0x8c, 0x9b, 0xa0, 0xfb, 0x2c, 0x91, 0xe2, 0xc3, 0x9b, 0xa9, 0x39, 0x96, 0xa3, 0xe4, 0xeb, 0xf4, 0x5f, 0x28, 0x52, 0xd0, 0x92, 0x8c, 0x48, 0x93, 0x0e, 0x87, 0x5c, 0xc7, 0xb4, 0x28, 0xd0, 0xe7, 0xf3, 0xf4, 0xd5, 0x03, 0xe5, 0xd6, 0x0c, 0x68, 0xcb, 0x49, 0xb1, 0x3c, 0x24, 0x80, 0xcd, 0x48, 0x6b, 0xed, 0x92, 0x00, 0xca, 0xdd, 0xad, 0xdf, 0xe4, 0xff, 0x8e, 0x35, 0x62 }; static const uint8_t nist_kas_ecc_cdh_testvector_113_private[] = { /* dIUT */ 0x01, 0xb5, 0xff, 0x84, 0x7f, 0x8e, 0xff, 0x20, 0xb8, 0x8c, 0xfa, 0xd4, 0x2c, 0x06, 0xe5, 0x8c, 0x37, 0x42, 0xf2, 0xf8, 0xf1, 0xfd, 0xfd, 0x64, 0xb5, 0x39, 0xba, 0x48, 0xc2, 0x59, 0x26, 0x92, 0x6b, 0xd5, 0xe3, 0x32, 0xb4, 0x56, 0x49, 0xc0, 0xb1, 0x84, 0xf7, 0x72, 0x55, 0xe9, 0xd5, 0x8f, 0xe8, 0xaf, 0xa1, 0xa6, 0xd9, 0x68, 0xe2, 0xcb, 0x1d, 0x46, 0x37, 0x77, 0x71, 0x20, 0xc7, 0x65, 0xc1, 0x28 }; /* QIUTx = 000001de3dc9263bc8c4969dc684be0eec54befd9a9f3dba194d8658a789341bf0d78d84da6735227cafaf09351951691197573c8c360a11e5285712b8bbdf5ac91b977c */ /* QIUTy = 000000812de58cd095ec2e5a9b247eb3ed41d8bef6aeace194a7a05b65aa5d289fbc9b1770ec84bb6be0c2c64cc37c1d54a7f5d71377a9adbe20f26f6f2b544a821ea831 */ static const uint8_t nist_kas_ecc_cdh_testvector_113_out[] = { /* ZIUT */ 0x00, 0x06, 0x2f, 0x9f, 0xc2, 0x9a, 0xe1, 0xa6, 0x8b, 0x2e, 0xe0, 0xdc, 0xf9, 0x56, 0xcb, 0xd3, 0x8c, 0x88, 0xae, 0x5f, 0x64, 0x5e, 0xaa, 0x54, 0x6b, 0x00, 0xeb, 0xe8, 0x7a, 0x72, 0x60, 0xbf, 0x72, 0x4b, 0xe2, 0x0d, 0x34, 0xb9, 0xd0, 0x20, 0x76, 0x65, 0x5c, 0x93, 0x3d, 0x05, 0x6b, 0x21, 0xe3, 0x04, 0xc2, 0x4d, 0xdb, 0x1d, 0xed, 0xf1, 0xdd, 0x76, 0xde, 0x61, 0x1f, 0xc4, 0xa2, 0x34, 0x03, 0x36 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_114_public_x[] = { /* QCAVSx */ 0x01, 0xa8, 0x9b, 0x63, 0x6a, 0x93, 0xe5, 0xd2, 0xba, 0x6c, 0x22, 0x92, 0xbf, 0x23, 0x03, 0x3a, 0x84, 0xf0, 0x6a, 0x3a, 0xc1, 0x22, 0x0e, 0xa7, 0x1e, 0x80, 0x6a, 0xfb, 0xe0, 0x97, 0xa8, 0x04, 0xcc, 0x67, 0xe9, 0xba, 0xa5, 0x14, 0xcf, 0xb6, 0xc1, 0x2c, 0x91, 0x94, 0xbe, 0x30, 0x21, 0x2b, 0xf7, 0xaa, 0xe7, 0xfd, 0xf6, 0xd3, 0x76, 0xc2, 0x12, 0xf0, 0x55, 0x4e, 0x65, 0x64, 0x63, 0xff, 0xab, 0x7e }; static const uint8_t nist_kas_ecc_cdh_testvector_114_public_y[] = { /* QCAVSy */ 0x01, 0x82, 0xef, 0xca, 0xf7, 0x0f, 0xc4, 0x12, 0xd3, 0x36, 0x60, 0x2e, 0x01, 0x4d, 0xa4, 0x72, 0x56, 0xa0, 0xb6, 0x06, 0xf2, 0xad, 0xdc, 0xce, 0x80, 0x53, 0xbf, 0x81, 0x7a, 0xc8, 0x65, 0x6b, 0xb4, 0xe4, 0x2f, 0x14, 0xc8, 0xcb, 0xf2, 0xa6, 0x8f, 0x48, 0x8a, 0xb3, 0x5d, 0xcd, 0xf6, 0x40, 0x56, 0x27, 0x1d, 0xee, 0x1f, 0x60, 0x6a, 0x44, 0x0b, 0xa4, 0xbd, 0x4e, 0x5a, 0x11, 0xb8, 0xb8, 0xe5, 0x4f }; static const uint8_t nist_kas_ecc_cdh_testvector_114_private[] = { /* dIUT */ 0x01, 0x1a, 0x63, 0x47, 0xd4, 0xe8, 0x01, 0xc9, 0x19, 0x23, 0x48, 0x83, 0x54, 0xcc, 0x53, 0x3e, 0x7e, 0x35, 0xfd, 0xdf, 0x81, 0xff, 0x0f, 0xb7, 0xf5, 0x6b, 0xb0, 0x72, 0x6e, 0x0c, 0x29, 0xee, 0x5d, 0xcd, 0xc5, 0xf3, 0x94, 0xba, 0x54, 0xcf, 0x57, 0x26, 0x90, 0x48, 0xaa, 0xb6, 0xe0, 0x55, 0x89, 0x5c, 0x8d, 0xa2, 0x4b, 0x8b, 0x06, 0x39, 0xa7, 0x42, 0x31, 0x43, 0x90, 0xcc, 0x04, 0x19, 0x0e, 0xd6 }; /* QIUTx = 000000fe30267f33ba5cdefc25cbb3c9320dad9ccb1d7d376644620ca4fadee5626a3cede25ad254624def727a7048f7145f76162aa98042f9b123b2076f8e8cf59b3fdf */ /* QIUTy = 0000001145dc6631953b6e2945e94301d6cbb098fe4b04f7ee9b09411df104dc82d7d79ec46a01ed0f2d3e7db6eb680694bdeb107c1078aec6cabd9ebee3d342fe7e54df */ static const uint8_t nist_kas_ecc_cdh_testvector_114_out[] = { /* ZIUT */ 0x01, 0x28, 0xab, 0x09, 0xbf, 0xec, 0x54, 0x06, 0x79, 0x9e, 0x61, 0x0f, 0x77, 0x2b, 0xa1, 0x7e, 0x89, 0x22, 0x49, 0xfa, 0x8e, 0x0e, 0x7b, 0x18, 0xa0, 0x4b, 0x91, 0x97, 0x03, 0x4b, 0x25, 0x0b, 0x48, 0x29, 0x4f, 0x18, 0x67, 0xfb, 0x96, 0x41, 0x51, 0x8f, 0x92, 0x76, 0x60, 0x66, 0xa0, 0x7a, 0x8b, 0x91, 0x7b, 0x0e, 0x76, 0x87, 0x9e, 0x10, 0x11, 0xe5, 0x1c, 0xcb, 0xd9, 0xf5, 0x40, 0xc5, 0x4d, 0x4f }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_115_public_x[] = { /* QCAVSx */ 0x01, 0x72, 0x00, 0xb3, 0xf1, 0x6a, 0x68, 0xcb, 0xae, 0xd2, 0xbf, 0x78, 0xba, 0x8c, 0xdd, 0xfb, 0x6c, 0xff, 0xac, 0x26, 0x2b, 0xba, 0x00, 0xfb, 0xc2, 0x5f, 0x9d, 0xc7, 0x2a, 0x07, 0xce, 0x59, 0x37, 0x29, 0x04, 0x89, 0x9f, 0x36, 0x4c, 0x44, 0xcb, 0x26, 0x4c, 0x09, 0x7b, 0x64, 0x7d, 0x44, 0x12, 0xbe, 0xe3, 0xe5, 0x19, 0x89, 0x2d, 0x53, 0x4d, 0x91, 0x29, 0xf8, 0xa2, 0x8f, 0x75, 0x00, 0xfe, 0xe7 }; static const uint8_t nist_kas_ecc_cdh_testvector_115_public_y[] = { /* QCAVSy */ 0x00, 0xba, 0xba, 0x8d, 0x67, 0x2a, 0x4f, 0x4a, 0x3b, 0x63, 0xde, 0x48, 0xb9, 0x6f, 0x56, 0xe1, 0x8d, 0xf5, 0xd6, 0x8f, 0x7d, 0x70, 0xd5, 0x10, 0x98, 0x33, 0xf4, 0x37, 0x70, 0xd6, 0x73, 0x2e, 0x06, 0xb3, 0x9a, 0xd6, 0x0d, 0x93, 0xe5, 0xb4, 0x3d, 0xb8, 0x78, 0x9f, 0x1e, 0xc0, 0xab, 0xa4, 0x72, 0x86, 0xa3, 0x9e, 0xa5, 0x84, 0x23, 0x5a, 0xce, 0xa7, 0x57, 0xdb, 0xf1, 0x3d, 0x53, 0xb5, 0x83, 0x64 }; static const uint8_t nist_kas_ecc_cdh_testvector_115_private[] = { /* dIUT */ 0x00, 0x22, 0xb6, 0xd2, 0xa2, 0x2d, 0x71, 0xdf, 0xaa, 0x81, 0x1d, 0x2d, 0x9f, 0x9f, 0x31, 0xfb, 0xed, 0x27, 0xf2, 0xe1, 0xf3, 0xd2, 0x39, 0x53, 0x8d, 0xdf, 0x3e, 0x4c, 0xc8, 0xc3, 0x9a, 0x33, 0x02, 0x66, 0xdb, 0x25, 0xb7, 0xbc, 0x0a, 0x97, 0x04, 0xf1, 0x7b, 0xde, 0x7f, 0x35, 0x92, 0xbf, 0x5f, 0x1f, 0x2d, 0x4b, 0x56, 0x01, 0x3a, 0xac, 0xc3, 0xd8, 0xd1, 0xbc, 0x02, 0xf0, 0x0d, 0x31, 0x46, 0xcc }; /* QIUTx = 000000ba38cfbf9fd2518a3f61d43549e7a6a6d28b2be57ffd3e0faceb636b34ed17e044a9f249dae8fc132e937e2d9349cd2ed77bb1049ceb692a2ec5b17ad61502a64c */ /* QIUTy = 0000001ec91d3058573fa6c0564a02a1a010160c313bc7c73510dc983e5461682b5be00dbce7e2c682ad73f29ca822cdc111f68fabe33a7b384a648342c3cdb9f050bcdb */ static const uint8_t nist_kas_ecc_cdh_testvector_115_out[] = { /* ZIUT */ 0x01, 0x01, 0xe4, 0x62, 0xe9, 0xd9, 0x15, 0x99, 0x68, 0xf6, 0x44, 0x0e, 0x95, 0x6f, 0x11, 0xdc, 0xf2, 0x22, 0x7a, 0xe4, 0xae, 0xa8, 0x16, 0x67, 0x12, 0x2b, 0x6a, 0xf9, 0x23, 0x9a, 0x29, 0x1e, 0xb5, 0xd6, 0xcf, 0x5a, 0x40, 0x87, 0xf3, 0x58, 0x52, 0x5f, 0xca, 0xcf, 0xa4, 0x6b, 0xb2, 0xdb, 0x01, 0xa7, 0x5a, 0xf1, 0xba, 0x51, 0x9b, 0x2d, 0x31, 0xda, 0x33, 0xed, 0xa8, 0x7a, 0x9d, 0x56, 0x57, 0x48 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_116_public_x[] = { /* QCAVSx */ 0x00, 0x4e, 0xfd, 0x5d, 0xbd, 0x2f, 0x97, 0x9e, 0x38, 0x31, 0xce, 0x98, 0xf8, 0x23, 0x55, 0xd6, 0xca, 0x14, 0xa5, 0x75, 0x78, 0x42, 0x87, 0x58, 0x82, 0x99, 0x0a, 0xb8, 0x5a, 0xb9, 0xb7, 0x35, 0x2d, 0xd6, 0xb9, 0xb2, 0xf4, 0xea, 0x9a, 0x1e, 0x95, 0xc3, 0x88, 0x0d, 0x65, 0xd1, 0xf3, 0x60, 0x2f, 0x9c, 0xa6, 0x53, 0xdc, 0x34, 0x6f, 0xac, 0x85, 0x86, 0x58, 0xd7, 0x56, 0x26, 0xf4, 0xd4, 0xfb, 0x08 }; static const uint8_t nist_kas_ecc_cdh_testvector_116_public_y[] = { /* QCAVSy */ 0x00, 0x61, 0xcf, 0x15, 0xdb, 0xda, 0xa7, 0xf3, 0x15, 0x89, 0xc9, 0x84, 0x00, 0x37, 0x3d, 0xa2, 0x84, 0x50, 0x6d, 0x70, 0xc8, 0x9f, 0x07, 0x4e, 0xd2, 0x62, 0xa9, 0xe2, 0x81, 0x40, 0x79, 0x6b, 0x72, 0x36, 0xc2, 0xee, 0xf9, 0x90, 0x16, 0x08, 0x5e, 0x71, 0x55, 0x2f, 0xf4, 0x88, 0xc7, 0x2b, 0x73, 0x39, 0xfe, 0xfb, 0x79, 0x15, 0xc3, 0x84, 0x59, 0xcb, 0x20, 0xab, 0x85, 0xae, 0xc4, 0xe4, 0x50, 0x52 }; static const uint8_t nist_kas_ecc_cdh_testvector_116_private[] = { /* dIUT */ 0x00, 0x5b, 0xac, 0xff, 0xf2, 0x68, 0xac, 0xf6, 0x55, 0x3c, 0x3c, 0x58, 0x3b, 0x46, 0x4e, 0xa3, 0x6a, 0x1d, 0x35, 0xe2, 0xb2, 0x57, 0xa5, 0xd4, 0x9e, 0xb3, 0x41, 0x9d, 0x5a, 0x09, 0x50, 0x87, 0xc2, 0xfb, 0x4d, 0x15, 0xcf, 0x5b, 0xf5, 0xaf, 0x81, 0x6d, 0x0f, 0x3f, 0xf7, 0x58, 0x64, 0x90, 0xcc, 0xd3, 0xdd, 0xc1, 0xa9, 0x8b, 0x39, 0xce, 0x63, 0x74, 0x9c, 0x62, 0x88, 0xce, 0x0d, 0xbd, 0xac, 0x7d }; /* QIUTx = 00000036e488da7581472a9d8e628c58d6ad727311b7e6a3f6ae33a8544f34b09280249020be7196916fafd90e2ec54b66b5468d2361b99b56fa00d7ac37abb8c6f16653 */ /* QIUTy = 0000011edb9fb8adb6a43f4f5f5fdc1421c9fe04fc8ba46c9b66334e3af927c8befb4307104f299acec4e30f812d9345c9720d19869dbfffd4ca3e7d2713eb5fc3f42615 */ static const uint8_t nist_kas_ecc_cdh_testvector_116_out[] = { /* ZIUT */ 0x01, 0x41, 0xd6, 0xa4, 0xb7, 0x19, 0xab, 0x67, 0xea, 0xf0, 0x4a, 0x92, 0xc0, 0xa4, 0x1e, 0x2d, 0xda, 0x78, 0xf4, 0x35, 0x4f, 0xb9, 0x0b, 0xdc, 0x35, 0x20, 0x2c, 0xc7, 0x69, 0x9b, 0x9b, 0x04, 0xd4, 0x96, 0x16, 0xf8, 0x22, 0x55, 0xde, 0xbf, 0x7b, 0xbe, 0xc0, 0x45, 0xae, 0x58, 0xf9, 0x82, 0xa6, 0x69, 0x05, 0xfc, 0xfa, 0xe6, 0x9d, 0x68, 0x97, 0x85, 0xe3, 0x8c, 0x86, 0x8e, 0xb4, 0xa2, 0x7e, 0x7b }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_117_public_x[] = { /* QCAVSx */ 0x01, 0x29, 0x89, 0x1d, 0xe0, 0xcf, 0x3c, 0xf8, 0x2e, 0x8c, 0x2c, 0xf1, 0xbf, 0x90, 0xbb, 0x29, 0x6f, 0xe0, 0x0a, 0xb0, 0x8c, 0xa4, 0x5b, 0xb7, 0x89, 0x2e, 0x0e, 0x22, 0x7a, 0x50, 0x4f, 0xdd, 0x05, 0xd2, 0x38, 0x1a, 0x44, 0x48, 0xb6, 0x8a, 0xdf, 0xf9, 0xc4, 0x15, 0x3c, 0x87, 0xea, 0xcb, 0x78, 0x33, 0x0d, 0x8b, 0xd5, 0x25, 0x15, 0xf9, 0xf9, 0xa0, 0xb5, 0x8e, 0x85, 0xf4, 0x46, 0xbb, 0x4e, 0x10 }; static const uint8_t nist_kas_ecc_cdh_testvector_117_public_y[] = { /* QCAVSy */ 0x00, 0x9e, 0xdd, 0x67, 0x96, 0x96, 0xd3, 0xd1, 0xd0, 0xef, 0x32, 0x7f, 0x20, 0x03, 0x83, 0x25, 0x3f, 0x64, 0x13, 0x68, 0x3d, 0x9e, 0x4f, 0xcc, 0x87, 0xbb, 0x35, 0xf1, 0x12, 0xc2, 0xf1, 0x10, 0x09, 0x8d, 0x15, 0xe5, 0x70, 0x1d, 0x7c, 0xee, 0xe4, 0x16, 0x29, 0x1f, 0xf5, 0xfe, 0xd8, 0x5e, 0x68, 0x7f, 0x72, 0x73, 0x88, 0xb9, 0xaf, 0xe2, 0x6a, 0x4f, 0x6f, 0xee, 0xd5, 0x60, 0xb2, 0x18, 0xe6, 0xbb }; static const uint8_t nist_kas_ecc_cdh_testvector_117_private[] = { /* dIUT */ 0x00, 0x8e, 0x2c, 0x93, 0xc5, 0x42, 0x38, 0x76, 0x22, 0x3a, 0x63, 0x7c, 0xad, 0x36, 0x7c, 0x85, 0x89, 0xda, 0x69, 0xa2, 0xd0, 0xfc, 0x68, 0x61, 0x2f, 0x31, 0x92, 0x3a, 0xe5, 0x02, 0x19, 0xdf, 0x24, 0x52, 0xe7, 0xcc, 0x92, 0x61, 0x5b, 0x67, 0xf1, 0x7b, 0x57, 0xff, 0xd2, 0xf5, 0x2b, 0x19, 0x15, 0x4b, 0xb4, 0x0d, 0x77, 0x15, 0x33, 0x64, 0x20, 0xfd, 0xe2, 0xe8, 0x9f, 0xee, 0x24, 0x4f, 0x59, 0xdc }; /* QIUTx = 000000fa3b35118d6c422570f724a26f90b2833b19239174cea081c53133f64db60d6940ea1261299c04c1f4587cdb0c4c39616479c1bb0c146799a118032dcf98f899c0 */ /* QIUTy = 00000069f040229006151fa32b51f679c8816f7c17506b403809dc77cd58a2aec430d94d13b6c916de99f355aa45fcfbc6853d686c71be496a067d24bfaea4818fc51f75 */ static const uint8_t nist_kas_ecc_cdh_testvector_117_out[] = { /* ZIUT */ 0x00, 0x34, 0x5e, 0x26, 0xe0, 0xab, 0xb1, 0xaa, 0xc1, 0x2b, 0x75, 0xf3, 0xa9, 0xcf, 0x41, 0xef, 0xe1, 0xc3, 0x36, 0x39, 0x6d, 0xff, 0xa4, 0xa0, 0x67, 0xa4, 0xc2, 0xcf, 0xeb, 0x87, 0x8c, 0x68, 0xb2, 0xb0, 0x45, 0xfa, 0xa4, 0xe5, 0xb4, 0xe6, 0xfa, 0x46, 0x78, 0xf5, 0xb6, 0x03, 0xc3, 0x51, 0x90, 0x3b, 0x14, 0xbf, 0x9a, 0x6a, 0x70, 0xc4, 0x39, 0x25, 0x71, 0x99, 0xa6, 0x40, 0x89, 0x0b, 0x61, 0xd1 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_118_public_x[] = { /* QCAVSx */ 0x01, 0xa3, 0xc2, 0x02, 0x40, 0xe5, 0x9f, 0x5b, 0x7a, 0x3e, 0x17, 0xc2, 0x75, 0xd2, 0x31, 0x4b, 0xa1, 0x74, 0x12, 0x10, 0xad, 0x58, 0xb7, 0x10, 0x36, 0xf8, 0xc8, 0x3c, 0xc1, 0xf6, 0xb0, 0xf4, 0x09, 0xdf, 0xdd, 0x91, 0x13, 0xe9, 0x4b, 0x67, 0xec, 0x39, 0xc3, 0x29, 0x14, 0x26, 0xc2, 0x3f, 0xfc, 0xc4, 0x47, 0x05, 0x46, 0x70, 0xd2, 0x90, 0x8f, 0xf8, 0xfe, 0x67, 0xdc, 0x23, 0x06, 0x03, 0x4c, 0x5c }; static const uint8_t nist_kas_ecc_cdh_testvector_118_public_y[] = { /* QCAVSy */ 0x01, 0xd2, 0x82, 0x5b, 0xfd, 0x3a, 0xf8, 0xb1, 0xe1, 0x32, 0x05, 0x78, 0x0c, 0x13, 0x7f, 0xe9, 0x38, 0xf8, 0x4f, 0xde, 0x40, 0x18, 0x8e, 0x61, 0xea, 0x02, 0xce, 0xad, 0x81, 0xba, 0xdf, 0xdb, 0x42, 0x5c, 0x29, 0xf7, 0xd7, 0xfb, 0x03, 0x24, 0xde, 0xba, 0xdc, 0x10, 0xbb, 0xb9, 0x3d, 0xe6, 0x8f, 0x62, 0xc3, 0x50, 0x69, 0x26, 0x82, 0x83, 0xf5, 0x26, 0x58, 0x65, 0xdb, 0x57, 0xa7, 0x9f, 0x7b, 0xf7 }; static const uint8_t nist_kas_ecc_cdh_testvector_118_private[] = { /* dIUT */ 0x00, 0x04, 0xd4, 0x9d, 0x39, 0xd4, 0x0d, 0x81, 0x11, 0xbf, 0x16, 0xd2, 0x8c, 0x59, 0x36, 0x55, 0x43, 0x26, 0xb1, 0x97, 0x35, 0x3e, 0xeb, 0xbc, 0xf4, 0x75, 0x45, 0x39, 0x3b, 0xc8, 0xd3, 0xaa, 0xf9, 0x8f, 0x14, 0xf5, 0xbe, 0x70, 0x74, 0xbf, 0xb3, 0x8e, 0x6c, 0xc9, 0x7b, 0x98, 0x97, 0x54, 0x07, 0x4d, 0xad, 0xdb, 0x30, 0x45, 0xf4, 0xe4, 0xce, 0x74, 0x56, 0x69, 0xfd, 0xb3, 0xec, 0x0d, 0x5f, 0xa8 }; /* QIUTx = 0000012ec226d050ce07c79b3df4d0f0891f9f7adf462e8c98dbc1a2a14f5e53a3f5ad894433587cc429a8be9ea1d84fa33b1803690dae04da7218d30026157fc995cf52 */ /* QIUTy = 0000004837dfbf3426f57b5c793269130abb9a38f618532211931154db4eeb9aede88e57290f842ea0f2ea9a5f74c6203a3920fe4e305f6118f676b154e1d75b9cb5eb88 */ static const uint8_t nist_kas_ecc_cdh_testvector_118_out[] = { /* ZIUT */ 0x00, 0x6f, 0xe9, 0xde, 0x6f, 0xb8, 0xe6, 0x72, 0xe7, 0xfd, 0x15, 0x0f, 0xdc, 0x5e, 0x61, 0x7f, 0xab, 0xb0, 0xd4, 0x39, 0x06, 0x35, 0x4c, 0xcf, 0xd2, 0x24, 0x75, 0x7c, 0x72, 0x76, 0xf7, 0xa1, 0x01, 0x00, 0x91, 0xb1, 0x7e, 0xd0, 0x72, 0x07, 0x4f, 0x8d, 0x10, 0xa5, 0xec, 0x97, 0x1e, 0xb3, 0x5a, 0x5c, 0xb7, 0x07, 0x66, 0x03, 0xb7, 0xbc, 0x38, 0xd4, 0x32, 0xcb, 0xc0, 0x59, 0xf8, 0x0f, 0x94, 0x88 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_119_public_x[] = { /* QCAVSx */ 0x00, 0x7e, 0x2d, 0x13, 0x8f, 0x28, 0x32, 0xe3, 0x45, 0xae, 0x8f, 0xf6, 0x59, 0x57, 0xe4, 0x0e, 0x5e, 0xc7, 0x16, 0x3f, 0x01, 0x6b, 0xdf, 0x6d, 0x24, 0xa2, 0x24, 0x3d, 0xaa, 0x63, 0x1d, 0x87, 0x8a, 0x4a, 0x16, 0x78, 0x39, 0x90, 0xc7, 0x22, 0x38, 0x21, 0x30, 0xf9, 0xe5, 0x1f, 0x0c, 0x1b, 0xd6, 0xff, 0x5a, 0xc9, 0x67, 0x80, 0xe4, 0x8b, 0x68, 0xf5, 0xde, 0xc9, 0x5f, 0x42, 0xe6, 0x14, 0x4b, 0xb5 }; static const uint8_t nist_kas_ecc_cdh_testvector_119_public_y[] = { /* QCAVSy */ 0x00, 0xb0, 0xde, 0x5c, 0x89, 0x67, 0x91, 0xf5, 0x28, 0x86, 0xb0, 0xf0, 0x99, 0x13, 0xe2, 0x6e, 0x78, 0xdd, 0x0b, 0x69, 0x79, 0x8f, 0xc4, 0xdf, 0x6d, 0x95, 0xe3, 0xca, 0x70, 0x8e, 0xcb, 0xcb, 0xcc, 0xe1, 0xc1, 0x89, 0x5f, 0x55, 0x61, 0xbb, 0xab, 0xaa, 0xe3, 0x72, 0xe9, 0xe6, 0x7e, 0x6e, 0x1a, 0x3b, 0xe6, 0x0e, 0x19, 0xb4, 0x70, 0xcd, 0xf6, 0x73, 0xec, 0x1f, 0xc3, 0x93, 0xd3, 0x42, 0x6e, 0x20 }; static const uint8_t nist_kas_ecc_cdh_testvector_119_private[] = { /* dIUT */ 0x01, 0x1a, 0x5d, 0x1c, 0xc7, 0x9c, 0xd2, 0xbf, 0x73, 0xea, 0x10, 0x6f, 0x0e, 0x60, 0xa5, 0xac, 0xe2, 0x20, 0x81, 0x3b, 0x53, 0xe2, 0x7b, 0x73, 0x98, 0x64, 0x33, 0x4a, 0x07, 0xc0, 0x33, 0x67, 0xef, 0xda, 0x7a, 0x46, 0x19, 0xfa, 0x6e, 0xef, 0x3a, 0x97, 0x46, 0x49, 0x22, 0x83, 0xb3, 0xc4, 0x45, 0x61, 0x0a, 0x02, 0x3a, 0x9c, 0xc4, 0x9b, 0xf4, 0x59, 0x11, 0x40, 0x38, 0x4f, 0xca, 0x5c, 0x8b, 0xb5 }; /* QIUTx = 000000eb07c7332eedb7d3036059d35f7d2288d4377d5f42337ad3964079fb120ccd4c8bd384b585621055217023acd9a94fcb3b965bfb394675e788ade41a1de73e620c */ /* QIUTy = 000000491a835de2e6e7deb7e090f4a11f2c460c0b1f3d5e94ee8d751014dc720784fd3b54500c86ebaef18429f09e8e876d5d1538968a030d7715dde99f0d8f06e29d59 */ static const uint8_t nist_kas_ecc_cdh_testvector_119_out[] = { /* ZIUT */ 0x01, 0xe4, 0xe7, 0x59, 0xec, 0xed, 0xce, 0x10, 0x13, 0xba, 0xf7, 0x3e, 0x6f, 0xcc, 0x0b, 0x92, 0x45, 0x1d, 0x03, 0xbd, 0xd5, 0x04, 0x89, 0xb7, 0x88, 0x71, 0xc3, 0x33, 0x11, 0x49, 0x90, 0xc9, 0xba, 0x6a, 0x9b, 0x2f, 0xc7, 0xb1, 0xa2, 0xd9, 0xa1, 0x79, 0x4c, 0x1b, 0x60, 0xd9, 0x27, 0x9a, 0xf6, 0xf1, 0x46, 0xf0, 0xbb, 0xfb, 0x06, 0x83, 0x14, 0x04, 0x03, 0xbf, 0xa4, 0xcc, 0xdb, 0x52, 0x4a, 0x29 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_120_public_x[] = { /* QCAVSx */ 0x00, 0x11, 0x8c, 0x36, 0x02, 0x22, 0x09, 0xb1, 0xaf, 0x8e, 0xba, 0xd1, 0xa1, 0x2b, 0x56, 0x6f, 0xc4, 0x87, 0x44, 0x57, 0x6e, 0x11, 0x99, 0xfe, 0x80, 0xde, 0x1c, 0xdf, 0x85, 0x1c, 0xdf, 0x03, 0xe5, 0xb9, 0x09, 0x1a, 0x8f, 0x7e, 0x07, 0x9e, 0x83, 0xb7, 0xf8, 0x27, 0x25, 0x9b, 0x69, 0x1d, 0x0c, 0x22, 0xee, 0x29, 0xd6, 0xbd, 0xf7, 0x3e, 0xc7, 0xbb, 0xfd, 0x74, 0x6f, 0x2c, 0xd9, 0x7a, 0x35, 0x7d }; static const uint8_t nist_kas_ecc_cdh_testvector_120_public_y[] = { /* QCAVSy */ 0x00, 0xda, 0x5f, 0xf4, 0x90, 0x45, 0x48, 0xa3, 0x42, 0xe2, 0xe7, 0xba, 0x6a, 0x1f, 0x4e, 0xe5, 0xf8, 0x40, 0x41, 0x1a, 0x96, 0xcf, 0x63, 0xe6, 0xfe, 0x62, 0x2f, 0x22, 0xc1, 0x3e, 0x61, 0x4e, 0x0a, 0x84, 0x7c, 0x11, 0xa1, 0xab, 0x3f, 0x1d, 0x12, 0xcc, 0x85, 0x0c, 0x32, 0xe0, 0x95, 0x61, 0x4c, 0xa8, 0xf7, 0xe2, 0x72, 0x14, 0x77, 0xb4, 0x86, 0xe9, 0xff, 0x40, 0x37, 0x29, 0x77, 0xc3, 0xf6, 0x5c }; static const uint8_t nist_kas_ecc_cdh_testvector_120_private[] = { /* dIUT */ 0x01, 0x0c, 0x90, 0x8c, 0xaf, 0x1b, 0xe7, 0x4c, 0x61, 0x6b, 0x62, 0x5f, 0xc8, 0xc1, 0xf5, 0x14, 0x44, 0x6a, 0x6a, 0xec, 0x83, 0xb5, 0x93, 0x71, 0x41, 0xd6, 0xaf, 0xbb, 0x0a, 0x8c, 0x76, 0x66, 0xa7, 0x74, 0x6f, 0xa1, 0xf7, 0xa6, 0x66, 0x4a, 0x21, 0x23, 0xe8, 0xcd, 0xf6, 0xcd, 0x8b, 0xf8, 0x36, 0xc5, 0x6d, 0x3c, 0x0e, 0xbd, 0xcc, 0x98, 0x0e, 0x43, 0xa1, 0x86, 0xf9, 0x38, 0xf3, 0xa7, 0x8a, 0xe7 }; /* QIUTx = 00000031890f4c7abec3f723362285d77d2636f876817db3bbc88b01e773597b969ff6f013ea470c854ab4a7739004eb8cbea69b82ddf36acadd406871798ecb2ac3aa7f */ /* QIUTy = 000000d8b429ae3250266b9643c0c765a60dc10155bc2531cf8627296f4978b6640a9e600e19d0037d58503fa80799546a814d7478a550aa90e5ebeb052527faaeae5d08 */ static const uint8_t nist_kas_ecc_cdh_testvector_120_out[] = { /* ZIUT */ 0x01, 0x63, 0xc9, 0x19, 0x1d, 0x65, 0x10, 0x39, 0xa5, 0xfe, 0x98, 0x5a, 0x0e, 0xea, 0x1e, 0xba, 0x01, 0x8a, 0x40, 0xab, 0x19, 0x37, 0xfc, 0xd2, 0xb6, 0x12, 0x20, 0x82, 0x0e, 0xe8, 0xf2, 0x30, 0x2e, 0x97, 0x99, 0xf6, 0xed, 0xfc, 0x3f, 0x51, 0x74, 0xf3, 0x69, 0xd6, 0x72, 0xd3, 0x77, 0xea, 0x89, 0x54, 0xa8, 0xd0, 0xc8, 0xb8, 0x51, 0xe8, 0x1a, 0x56, 0xfd, 0xa9, 0x52, 0x12, 0xa6, 0x57, 0x8f, 0x0e }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_121_public_x[] = { /* QCAVSx */ 0x01, 0x78, 0x0e, 0xdf, 0xf1, 0xca, 0x1c, 0x03, 0xcf, 0xbe, 0x59, 0x3e, 0xdc, 0x6c, 0x04, 0x9b, 0xcb, 0x28, 0x60, 0x29, 0x4a, 0x92, 0xc3, 0x55, 0x48, 0x9d, 0x9a, 0xfb, 0x2e, 0x70, 0x20, 0x75, 0xad, 0xe1, 0xc9, 0x53, 0x89, 0x5a, 0x45, 0x62, 0x30, 0xa0, 0xcd, 0xe9, 0x05, 0xde, 0x4a, 0x3f, 0x38, 0x57, 0x3d, 0xbf, 0xcc, 0xcd, 0x67, 0xad, 0x6e, 0x7e, 0x93, 0xf0, 0xb5, 0x58, 0x1e, 0x92, 0x6a, 0x5d }; static const uint8_t nist_kas_ecc_cdh_testvector_121_public_y[] = { /* QCAVSy */ 0x00, 0xa5, 0x48, 0x19, 0x62, 0xc9, 0x16, 0x29, 0x62, 0xe7, 0xf0, 0xeb, 0xde, 0xc9, 0x36, 0x93, 0x5d, 0x0e, 0xaa, 0x81, 0x3e, 0x82, 0x26, 0xd4, 0x0d, 0x7f, 0x61, 0x19, 0xbf, 0xd9, 0x40, 0x60, 0x23, 0x80, 0xc8, 0x67, 0x21, 0xe6, 0x1d, 0xb1, 0x83, 0x0f, 0x51, 0xe1, 0x39, 0xf2, 0x10, 0x00, 0x0b, 0xce, 0xc0, 0xd8, 0xed, 0xd3, 0x9e, 0x54, 0xd7, 0x3a, 0x9a, 0x12, 0x9f, 0x95, 0xcd, 0x5f, 0xa9, 0x79 }; static const uint8_t nist_kas_ecc_cdh_testvector_121_private[] = { /* dIUT */ 0x01, 0xb3, 0x7d, 0x6b, 0x72, 0x88, 0xde, 0x67, 0x13, 0x60, 0x42, 0x5d, 0x3e, 0x5a, 0xc1, 0xcc, 0xb2, 0x18, 0x15, 0x07, 0x9d, 0x8d, 0x73, 0x43, 0x1e, 0x9b, 0x74, 0xa6, 0xf0, 0xe7, 0xae, 0x00, 0x4a, 0x35, 0x75, 0x75, 0xb1, 0x1a, 0xd6, 0x66, 0x42, 0xce, 0x8b, 0x77, 0x55, 0x93, 0xeb, 0xa9, 0xd9, 0x8b, 0xf2, 0x5c, 0x75, 0xef, 0x0b, 0x4d, 0x3a, 0x20, 0x98, 0xbb, 0xc6, 0x41, 0xf5, 0x9a, 0x2b, 0x77 }; /* QIUTx = 000000189a5ee34de7e35aefeaeef9220c18071b4c29a4c3bd9d954458bd3e82a7a34da34cff5579b8101c065b1f2f527cf4581501e28ef5671873e65267733d003520af */ /* QIUTy = 000001eb4bc50a7b4d4599d7e3fa773ddb9eb252c9b3422872e544bdf75c7bf60f5166ddc11eb08fa7c30822dabaee373ab468eb2d922e484e2a527fff2ebb804b7d9a37 */ static const uint8_t nist_kas_ecc_cdh_testvector_121_out[] = { /* ZIUT */ 0x01, 0x5d, 0x61, 0x3e, 0x26, 0x7a, 0x36, 0x34, 0x2e, 0x0d, 0x12, 0x5c, 0xda, 0xd6, 0x43, 0xd8, 0x0d, 0x97, 0xed, 0x06, 0x00, 0xaf, 0xb9, 0xe6, 0xb9, 0x54, 0x5c, 0x9e, 0x64, 0xa9, 0x8c, 0xc6, 0xda, 0x7c, 0x5a, 0xaa, 0x3a, 0x8d, 0xa0, 0xbd, 0xd9, 0xdd, 0x3b, 0x97, 0xe9, 0x78, 0x82, 0x18, 0xa8, 0x0a, 0xba, 0xfc, 0x10, 0x6e, 0xf0, 0x65, 0xc8, 0xf1, 0xc4, 0xe1, 0x11, 0x9e, 0xf5, 0x8d, 0x29, 0x8b }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_122_public_x[] = { /* QCAVSx */ 0x01, 0x6d, 0xac, 0xff, 0xa1, 0x83, 0xe5, 0x30, 0x30, 0x83, 0xa3, 0x34, 0xf7, 0x65, 0xde, 0x72, 0x4e, 0xc5, 0xec, 0x94, 0x02, 0x02, 0x6d, 0x47, 0x97, 0x88, 0x4a, 0x98, 0x28, 0xa0, 0xd3, 0x21, 0xa8, 0xcf, 0xac, 0x74, 0xab, 0x73, 0x7f, 0xe2, 0x0a, 0x7d, 0x6b, 0xef, 0xcf, 0xc7, 0x3b, 0x6a, 0x35, 0xc1, 0xc7, 0xb0, 0x1d, 0x37, 0x3e, 0x31, 0xab, 0xc1, 0x92, 0xd4, 0x8a, 0x42, 0x41, 0xa3, 0x58, 0x03 }; static const uint8_t nist_kas_ecc_cdh_testvector_122_public_y[] = { /* QCAVSy */ 0x01, 0x1e, 0x53, 0x27, 0xca, 0xc2, 0x2d, 0x30, 0x5e, 0x71, 0x56, 0xe5, 0x59, 0x17, 0x6e, 0x19, 0xbe, 0xe7, 0xe4, 0xf2, 0xf5, 0x9e, 0x86, 0xf1, 0xa9, 0xd0, 0xb6, 0x60, 0x3b, 0x6a, 0x7d, 0xf1, 0x06, 0x9b, 0xde, 0x63, 0x87, 0xfe, 0xb7, 0x15, 0x87, 0xb8, 0xff, 0xce, 0x5b, 0x26, 0x6e, 0x1b, 0xae, 0x86, 0xde, 0x29, 0x37, 0x8a, 0x34, 0xe5, 0xc7, 0x4b, 0x67, 0x24, 0xc4, 0xd4, 0x0a, 0x71, 0x99, 0x23 }; static const uint8_t nist_kas_ecc_cdh_testvector_122_private[] = { /* dIUT */ 0x00, 0xf2, 0x66, 0x1a, 0xc7, 0x62, 0xf6, 0x0c, 0x5f, 0xff, 0x23, 0xbe, 0x5d, 0x96, 0x9c, 0xcd, 0x4e, 0xc6, 0xf9, 0x8e, 0x4e, 0x72, 0x61, 0x8d, 0x12, 0xbd, 0xcd, 0xb9, 0xb4, 0x10, 0x21, 0x62, 0x33, 0x37, 0x88, 0xc0, 0xba, 0xe5, 0x9f, 0x91, 0xcd, 0xfc, 0x17, 0x2c, 0x7a, 0x16, 0x81, 0xee, 0x44, 0xd9, 0x6a, 0xb2, 0x13, 0x5a, 0x6e, 0x5f, 0x34, 0x15, 0xeb, 0xbc, 0xd5, 0x51, 0x65, 0xb1, 0xaf, 0xb0 }; /* QIUTx = 000000a8e25a6902d687b4787cdc94c364ac7cecc5c495483ed363dc0aa95ee2bd739c4c4d46b17006c728b076350d7d7e54c6822f52f47162a25109aaaba690cab696ec */ /* QIUTy = 00000168d2f08fe19e4dc9ee7a195b03c9f7fe6676f9f520b6270557504e72ca4394a2c6918625e15ac0c51b8f95cd560123653fb8e8ee6db961e2c4c62cc54e92e2a2a9 */ static const uint8_t nist_kas_ecc_cdh_testvector_122_out[] = { /* ZIUT */ 0x01, 0x4d, 0x60, 0x82, 0xa3, 0xb5, 0xce, 0xd1, 0xab, 0x8c, 0xa2, 0x65, 0xa8, 0x10, 0x6f, 0x30, 0x21, 0x46, 0xc4, 0xac, 0xb8, 0xc3, 0x0b, 0xb1, 0x4a, 0x4c, 0x99, 0x1e, 0x3c, 0x82, 0xa9, 0x73, 0x12, 0x88, 0xbd, 0xb9, 0x1e, 0x0e, 0x85, 0xbd, 0xa3, 0x13, 0x91, 0x2d, 0x06, 0x38, 0x4f, 0xc4, 0x4f, 0x21, 0x53, 0xfb, 0x13, 0x50, 0x6f, 0xa9, 0xcf, 0x43, 0xc9, 0xaa, 0xb5, 0x75, 0x09, 0x88, 0xc9, 0x43 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_123_public_x[] = { /* QCAVSx */ 0x00, 0xa0, 0x91, 0x42, 0x1d, 0x37, 0x03, 0xe3, 0xb3, 0x41, 0xe9, 0xf1, 0xe7, 0xd5, 0x8f, 0x8c, 0xf7, 0xbd, 0xbd, 0x17, 0x98, 0xd0, 0x01, 0x96, 0x7b, 0x80, 0x1d, 0x1c, 0xec, 0x27, 0xe6, 0x05, 0xc5, 0x80, 0xb2, 0x38, 0x7c, 0x1c, 0xb4, 0x64, 0xf5, 0x5c, 0xe7, 0xac, 0x80, 0x33, 0x41, 0x02, 0xab, 0x03, 0xcf, 0xb8, 0x6d, 0x88, 0xaf, 0x76, 0xc9, 0xf4, 0x12, 0x9c, 0x01, 0xbe, 0xdd, 0x3b, 0xbf, 0xc4 }; static const uint8_t nist_kas_ecc_cdh_testvector_123_public_y[] = { /* QCAVSy */ 0x00, 0x8c, 0x9c, 0x57, 0x7a, 0x8e, 0x6f, 0xc4, 0x46, 0x81, 0x5e, 0x9d, 0x40, 0xba, 0xa6, 0x60, 0x25, 0xf1, 0x5d, 0xae, 0x28, 0x5f, 0x19, 0xeb, 0x66, 0x8e, 0xe6, 0x0a, 0xe9, 0xc9, 0x8e, 0x7e, 0xcd, 0xbf, 0x2b, 0x2a, 0x68, 0xe2, 0x29, 0x28, 0x05, 0x9f, 0x67, 0xdb, 0x18, 0x80, 0x07, 0x16, 0x1d, 0x3e, 0xcf, 0x39, 0x7e, 0x08, 0x83, 0xf0, 0xc4, 0xeb, 0x7e, 0xaf, 0x78, 0x27, 0xa6, 0x22, 0x05, 0xcc }; static const uint8_t nist_kas_ecc_cdh_testvector_123_private[] = { /* dIUT */ 0x00, 0xf4, 0x30, 0xca, 0x12, 0x61, 0xf0, 0x96, 0x81, 0xa9, 0x28, 0x2e, 0x9e, 0x97, 0x0a, 0x92, 0x34, 0x22, 0x7b, 0x1d, 0x5e, 0x58, 0xd5, 0x58, 0xc3, 0xcc, 0x6e, 0xff, 0x44, 0xd1, 0xbd, 0xf5, 0x3d, 0xe1, 0x6a, 0xd5, 0xee, 0x2b, 0x18, 0xb9, 0x2d, 0x62, 0xfc, 0x79, 0x58, 0x61, 0x16, 0xb0, 0xef, 0xc1, 0x5f, 0x79, 0x34, 0x0f, 0xb7, 0xea, 0xf5, 0xce, 0x6c, 0x44, 0x34, 0x1d, 0xcf, 0x8d, 0xde, 0x27 }; /* QIUTx = 0000006c1d9b5eca87de1fb871a0a32f807c725adccde9b3967453a71347d608f0c030cd09e338cdecbf4a02015bc8a6e8d3e2595fe773ffc2fc4e4a55d0b1a2cc00323b */ /* QIUTy = 000001141b2109e7f4981c952aa818a2b9f6f5c41feccdb7a7a45b9b4b672937771b008cae5f934dfe3fed10d383ab1f38769c92ce88d9be5414817ecb073a31ab368ccb */ static const uint8_t nist_kas_ecc_cdh_testvector_123_out[] = { /* ZIUT */ 0x00, 0x20, 0xc0, 0x07, 0x47, 0xcb, 0x8d, 0x49, 0x2f, 0xd4, 0x97, 0xe0, 0xfe, 0xc5, 0x46, 0x44, 0xbf, 0x02, 0x7d, 0x41, 0x8a, 0xb6, 0x86, 0x38, 0x1f, 0x10, 0x97, 0x12, 0xa9, 0x9c, 0xab, 0xe3, 0x28, 0xb9, 0x74, 0x3d, 0x22, 0x25, 0x83, 0x6f, 0x9a, 0xd6, 0x6e, 0x5d, 0x7f, 0xed, 0x1d, 0xe2, 0x47, 0xe0, 0xda, 0x92, 0xf6, 0x0d, 0x5b, 0x31, 0xf9, 0xe4, 0x76, 0x72, 0xe5, 0x7f, 0x71, 0x05, 0x98, 0xf4 }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_124_public_x[] = { /* QCAVSx */ 0x00, 0x4f, 0x38, 0x81, 0x66, 0x81, 0x77, 0x12, 0x89, 0xce, 0x0c, 0xb8, 0x3a, 0x5e, 0x29, 0xa1, 0xab, 0x06, 0xfc, 0x91, 0xf7, 0x86, 0x99, 0x4b, 0x23, 0x70, 0x8f, 0xf0, 0x8a, 0x08, 0xa0, 0xf6, 0x75, 0xb8, 0x09, 0xae, 0x99, 0xe9, 0xf9, 0x96, 0x7e, 0xb1, 0xa4, 0x9f, 0x19, 0x60, 0x57, 0xd6, 0x9e, 0x50, 0xd6, 0xde, 0xdb, 0x4d, 0xd2, 0xd9, 0xa8, 0x1c, 0x02, 0xbd, 0xcc, 0x8f, 0x7f, 0x51, 0x84, 0x60 }; static const uint8_t nist_kas_ecc_cdh_testvector_124_public_y[] = { /* QCAVSy */ 0x00, 0x9e, 0xfb, 0x24, 0x4c, 0x8b, 0x91, 0x08, 0x7d, 0xe1, 0xee, 0xd7, 0x66, 0x50, 0x0f, 0x0e, 0x81, 0x53, 0x07, 0x52, 0xd4, 0x69, 0x25, 0x6e, 0xf7, 0x9f, 0x6b, 0x96, 0x5d, 0x8a, 0x22, 0x32, 0xa0, 0xc2, 0xdb, 0xc4, 0xe8, 0xe1, 0xd0, 0x92, 0x14, 0xba, 0xb3, 0x84, 0x85, 0xbe, 0x6e, 0x35, 0x7c, 0x42, 0x00, 0xd0, 0x73, 0xb5, 0x2f, 0x04, 0xe4, 0xa1, 0x6f, 0xc6, 0xf5, 0x24, 0x71, 0x87, 0xae, 0xcb }; static const uint8_t nist_kas_ecc_cdh_testvector_124_private[] = { /* dIUT */ 0x00, 0x5d, 0xc3, 0x3a, 0xed, 0xa0, 0x3c, 0x2e, 0xb2, 0x33, 0x01, 0x4e, 0xe4, 0x68, 0xdf, 0xf7, 0x53, 0xb7, 0x2f, 0x73, 0xb0, 0x09, 0x91, 0x04, 0x3e, 0xa3, 0x53, 0x82, 0x8a, 0xe6, 0x9d, 0x4c, 0xd0, 0xfa, 0xde, 0xda, 0x7b, 0xb2, 0x78, 0xb5, 0x35, 0xd7, 0xc5, 0x74, 0x06, 0xff, 0x2e, 0x6e, 0x47, 0x3a, 0x5a, 0x4f, 0xf9, 0x8e, 0x90, 0xf9, 0x0d, 0x6d, 0xad, 0xd2, 0x51, 0x00, 0xe8, 0xd8, 0x56, 0x66 }; /* QIUTx = 000000c825ba307373cec8dd2498eef82e21fd9862168dbfeb83593980ca9f82875333899fe94f137daf1c4189eb502937c3a367ea7951ed8b0f3377fcdf2922021d46a5 */ /* QIUTy = 0000016b8a2540d5e65493888bc337249e67c0a68774f3e8d81e3b4574a0125165f0bd58b8af9de74b35832539f95c3cd9f1b759408560aa6851ae3ac7555347b0d3b13b */ static const uint8_t nist_kas_ecc_cdh_testvector_124_out[] = { /* ZIUT */ 0x00, 0xc2, 0xbf, 0xaf, 0xcd, 0x7f, 0xbd, 0x3e, 0x2f, 0xd1, 0xc7, 0x50, 0xfd, 0xea, 0x61, 0xe7, 0x0b, 0xd4, 0x78, 0x7a, 0x7e, 0x68, 0x46, 0x8c, 0x57, 0x4e, 0xe9, 0x9e, 0xbc, 0x47, 0xee, 0xde, 0xf0, 0x64, 0xe8, 0x94, 0x4a, 0x73, 0xbc, 0xb7, 0x91, 0x3d, 0xba, 0xb5, 0xd9, 0x3d, 0xca, 0x66, 0x0d, 0x21, 0x6c, 0x55, 0x36, 0x22, 0x36, 0x27, 0x94, 0xf7, 0xa2, 0xac, 0xc7, 0x10, 0x22, 0xbd, 0xb1, 0x6f }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_125_public_x[] = { /* QCAVSx */ 0x01, 0xa3, 0x20, 0x99, 0xb0, 0x2c, 0x0b, 0xd8, 0x53, 0x71, 0xf6, 0x0b, 0x0d, 0xd2, 0x08, 0x90, 0xe6, 0xc7, 0xaf, 0x04, 0x8c, 0x81, 0x79, 0x89, 0x0f, 0xda, 0x30, 0x8b, 0x35, 0x9d, 0xbb, 0xc2, 0xb7, 0xa8, 0x32, 0xbb, 0x8c, 0x65, 0x26, 0xc4, 0xaf, 0x99, 0xa7, 0xea, 0x3f, 0x0b, 0x3c, 0xb9, 0x6a, 0xe1, 0xeb, 0x76, 0x84, 0x13, 0x27, 0x95, 0xc4, 0x78, 0xad, 0x6f, 0x96, 0x2e, 0x4a, 0x6f, 0x44, 0x6d }; static const uint8_t nist_kas_ecc_cdh_testvector_125_public_y[] = { /* QCAVSy */ 0x01, 0x76, 0x27, 0x35, 0x7b, 0x39, 0xe9, 0xd7, 0x63, 0x2a, 0x13, 0x70, 0xb3, 0xe9, 0x3c, 0x1a, 0xfb, 0x5c, 0x85, 0x1b, 0x91, 0x0e, 0xb4, 0xea, 0xd0, 0xc9, 0xd3, 0x87, 0xdf, 0x67, 0xcd, 0xe8, 0x50, 0x03, 0xe0, 0xe4, 0x27, 0x55, 0x2f, 0x1c, 0xd0, 0x90, 0x59, 0xaa, 0xd0, 0x26, 0x2e, 0x23, 0x5c, 0xce, 0x5f, 0xba, 0x8c, 0xed, 0xc4, 0xfd, 0xc1, 0x46, 0x3d, 0xa7, 0x6d, 0xcd, 0x4b, 0x6d, 0x1a, 0x46 }; static const uint8_t nist_kas_ecc_cdh_testvector_125_private[] = { /* dIUT */ 0x00, 0xdf, 0x14, 0xb1, 0xf1, 0x43, 0x2a, 0x7b, 0x0f, 0xb0, 0x53, 0x96, 0x5f, 0xd8, 0x64, 0x3a, 0xfe, 0xe2, 0x6b, 0x24, 0x51, 0xec, 0xb6, 0xa8, 0xa5, 0x3a, 0x65, 0x5d, 0x5f, 0xbe, 0x16, 0xe4, 0xc6, 0x4c, 0xe8, 0x64, 0x72, 0x25, 0xeb, 0x11, 0xe7, 0xfd, 0xcb, 0x23, 0x62, 0x74, 0x71, 0xdf, 0xfc, 0x5c, 0x25, 0x23, 0xbd, 0x2a, 0xe8, 0x99, 0x57, 0xcb, 0xa3, 0xa5, 0x7a, 0x23, 0x93, 0x3e, 0x5a, 0x78 }; /* QIUTx = 0000004e8583bbbb2ecd93f0714c332dff5ab3bc6396e62f3c560229664329baa5138c3bb1c36428abd4e23d17fcb7a2cfcc224b2e734c8941f6f121722d7b6b94154576 */ /* QIUTy = 000001cf0874f204b0363f020864672fadbf87c8811eb147758b254b74b14fae742159f0f671a018212bbf25b8519e126d4cad778cfff50d288fd39ceb0cac635b175ec0 */ static const uint8_t nist_kas_ecc_cdh_testvector_125_out[] = { /* ZIUT */ 0x01, 0xaa, 0xf2, 0x4e, 0x5d, 0x47, 0xe4, 0x08, 0x0c, 0x18, 0xc5, 0x5e, 0xa3, 0x55, 0x81, 0xcd, 0x8d, 0xa3, 0x0f, 0x1a, 0x07, 0x95, 0x65, 0x04, 0x5d, 0x20, 0x08, 0xd5, 0x1b, 0x12, 0xd0, 0xab, 0xb4, 0x41, 0x1c, 0xda, 0x7a, 0x07, 0x85, 0xb1, 0x5d, 0x14, 0x9e, 0xd3, 0x01, 0xa3, 0x69, 0x70, 0x62, 0xf4, 0x2d, 0xa2, 0x37, 0xaa, 0x7f, 0x07, 0xe0, 0xaf, 0x3f, 0xd0, 0x0e, 0xb1, 0x80, 0x0d, 0x9c, 0x41 }; /* [K-163] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_126_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x05, 0x74, 0x23, 0x6f, 0x14, 0x28, 0xc4, 0x32, 0x13, 0x09, 0x46, 0x78, 0x3a, 0x5b, 0x3a, 0xab, 0xb6, 0xc2, 0x7e, 0xa5, 0xd6 }; static const uint8_t nist_kas_ecc_cdh_testvector_126_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x07, 0x90, 0x8c, 0x25, 0x1b, 0x8d, 0xa0, 0x21, 0xcb, 0xac, 0x28, 0x1f, 0x12, 0x3f, 0x7a, 0xf4, 0xfa, 0xc5, 0xb3, 0xdb, 0xb8 }; static const uint8_t nist_kas_ecc_cdh_testvector_126_private[] = { /* dIUT */ 0x66, 0x53, 0xb6, 0x07, 0x73, 0x98, 0xfa, 0xdc, 0x7b, 0xf5, 0xe6, 0x01, 0x58, 0x17, 0x01, 0x48, 0xc3, 0xdc, 0x45, 0x27 }; /* QIUTx = 000000071f8b2877d6027d9c1ade4244f2dea12692ef23d5 */ /* QIUTy = 00000005c15ee776221c72b84b347ce383f38067b89c3e9a */ static const uint8_t nist_kas_ecc_cdh_testvector_126_out[] = { /* ZIUT */ 0x04, 0x32, 0x5b, 0xff, 0x38, 0xf1, 0xb0, 0xc8, 0x3c, 0x27, 0xf5, 0x54, 0xa6, 0xc9, 0x72, 0xa8, 0x0f, 0x14, 0xbc, 0x23, 0xbc }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_127_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x01, 0x69, 0x97, 0x44, 0x09, 0x2f, 0xe2, 0xb5, 0xfe, 0x7e, 0xcb, 0xf6, 0x98, 0x7b, 0x7a, 0xea, 0x0a, 0x06, 0xfd, 0x2c, 0xb0 }; static const uint8_t nist_kas_ecc_cdh_testvector_127_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe4, 0x41, 0xdf, 0x94, 0x08, 0xd9, 0x1f, 0x0e, 0x02, 0x1d, 0xf8, 0xf0, 0x52, 0x6b, 0x80, 0x63, 0x03, 0x14, 0x95 }; static const uint8_t nist_kas_ecc_cdh_testvector_127_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0xae, 0xf4, 0x47, 0x54, 0xd0, 0xca, 0x97, 0xd4, 0x2b, 0x4e, 0x97, 0xaa, 0x92, 0x15, 0x62, 0x63, 0xc0, 0xe0, 0x78, 0xf6 }; /* QIUTx = 00000001b0108c786bf4d340f0505bdfc7d45b514611ad94 */ /* QIUTy = 000000022c9c39d5fb9456b8a2221cea4f058f6a8d2cd84a */ static const uint8_t nist_kas_ecc_cdh_testvector_127_out[] = { /* ZIUT */ 0x05, 0xf9, 0xac, 0x3a, 0x3d, 0xd8, 0x84, 0x29, 0x60, 0x09, 0x58, 0x38, 0x6c, 0x55, 0xbe, 0xf4, 0xb1, 0xaa, 0x5f, 0x0c, 0x24 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_128_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0x96, 0x5d, 0xb1, 0x59, 0x17, 0x1f, 0x5c, 0xb7, 0xe7, 0xa1, 0xbc, 0xc6, 0x16, 0x11, 0xae, 0xac, 0xa8, 0xc5, 0x2c, 0x9b }; static const uint8_t nist_kas_ecc_cdh_testvector_128_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x06, 0x87, 0x1d, 0x1e, 0x9c, 0x1f, 0xe8, 0x45, 0x26, 0x80, 0x76, 0xa9, 0x95, 0x80, 0x3a, 0x6d, 0x49, 0xcd, 0x07, 0x55, 0x54 }; static const uint8_t nist_kas_ecc_cdh_testvector_128_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x11, 0x72, 0x34, 0x2e, 0x6d, 0x37, 0xcc, 0x1e, 0x06, 0x2a, 0x44, 0x94, 0xc3, 0x9c, 0xba, 0x48, 0xf9, 0xad, 0x9a, 0x8c }; /* QIUTx = 00000003a27ecaec2b66feac2040f6890128bd0058d31924 */ /* QIUTy = 000000014007e3209b6d7127b0f393e5e58b1590b9f40be2 */ static const uint8_t nist_kas_ecc_cdh_testvector_128_out[] = { /* ZIUT */ 0x02, 0x2e, 0x02, 0x90, 0xed, 0xa5, 0xd3, 0x48, 0x89, 0x41, 0x29, 0xf7, 0x45, 0x5d, 0x1c, 0x76, 0x6d, 0x32, 0xd5, 0xc2, 0xc2 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_129_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x05, 0x5b, 0x68, 0xc0, 0xc2, 0xc2, 0x46, 0xfe, 0x0f, 0x2c, 0xd5, 0x48, 0x4b, 0x58, 0x81, 0x4c, 0x65, 0x21, 0x3e, 0xa5, 0x41 }; static const uint8_t nist_kas_ecc_cdh_testvector_129_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x05, 0x39, 0xc1, 0x1d, 0x25, 0x92, 0xa2, 0xf6, 0x39, 0x3b, 0x6e, 0x86, 0xc5, 0x4d, 0xf9, 0x09, 0xb9, 0x5f, 0xe0, 0xd5, 0xa8 }; static const uint8_t nist_kas_ecc_cdh_testvector_129_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x2a, 0x51, 0x1c, 0xdc, 0xd4, 0xbf, 0xc5, 0x67, 0xce, 0xac, 0x8c, 0x24, 0xed, 0x04, 0xe8, 0x89, 0x4d, 0xf7, 0x8d, 0xdf }; /* QIUTx = 00000006978dacaa47d8f3bc90b41ec7f4f8ac79a86ddd07 */ /* QIUTy = 00000007f8b0ef4270760376bc2d5faed83da7872631d09f */ static const uint8_t nist_kas_ecc_cdh_testvector_129_out[] = { /* ZIUT */ 0x03, 0x7f, 0x65, 0x9f, 0x43, 0x00, 0x09, 0xfc, 0xda, 0xe4, 0xe9, 0xf6, 0xe6, 0x31, 0x6b, 0x0f, 0x5d, 0xbb, 0x26, 0x82, 0x12 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_130_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x06, 0xb8, 0xef, 0x5a, 0x62, 0xd3, 0xb6, 0x36, 0xa5, 0xa7, 0x6b, 0xfe, 0xb1, 0xef, 0x8f, 0xf4, 0xd8, 0xb3, 0xd9, 0xe2, 0xfc }; static const uint8_t nist_kas_ecc_cdh_testvector_130_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x06, 0x75, 0xa7, 0x57, 0x26, 0x67, 0x18, 0x39, 0x8d, 0x8a, 0xf6, 0x6d, 0x29, 0x71, 0x79, 0x84, 0x78, 0xe2, 0xf3, 0x7d, 0x28 }; static const uint8_t nist_kas_ecc_cdh_testvector_130_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0xc6, 0xf6, 0x4f, 0xe6, 0x09, 0xeb, 0x8e, 0xeb, 0x5b, 0x53, 0xfa, 0xb6, 0x30, 0x88, 0x98, 0xe6, 0x3f, 0xf2, 0xe3, 0xf6 }; /* QIUTx = 0000000549e1a82ec284bf77d528627e52d832e236c92ad3 */ /* QIUTy = 000000019883aa9b458b35bd544d6882812150c1497d31d4 */ static const uint8_t nist_kas_ecc_cdh_testvector_130_out[] = { /* ZIUT */ 0x00, 0x50, 0x3b, 0xbb, 0x9b, 0x62, 0xf5, 0x0a, 0xe7, 0xa8, 0xdf, 0xd7, 0x4a, 0x17, 0x41, 0x82, 0x6f, 0x09, 0x29, 0x06, 0x51 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_131_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x05, 0x6c, 0x4a, 0x35, 0x86, 0xac, 0xb0, 0x30, 0x99, 0xd5, 0x2b, 0x2c, 0xd4, 0xac, 0x59, 0x26, 0x9c, 0xf5, 0x1b, 0x87, 0x30 }; static const uint8_t nist_kas_ecc_cdh_testvector_131_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x02, 0x42, 0x65, 0x61, 0xcb, 0xd9, 0xda, 0x1b, 0x23, 0xa6, 0x00, 0x3d, 0xe0, 0xe5, 0xf7, 0xc4, 0xa0, 0x65, 0xa5, 0xc2, 0xb8 }; static const uint8_t nist_kas_ecc_cdh_testvector_131_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0x6a, 0x56, 0x86, 0x75, 0x13, 0xdd, 0xd8, 0xca, 0x94, 0xd7, 0x92, 0x3b, 0xaa, 0x1f, 0x7f, 0xb0, 0x0d, 0xaa, 0x38, 0xfa }; /* QIUTx = 00000006c28a40dc4e5503d2c4b8ab0b6b7046e8e25ac09f */ /* QIUTy = 0000000121911654a5836005d8036d976585ff1d831e587b */ static const uint8_t nist_kas_ecc_cdh_testvector_131_out[] = { /* ZIUT */ 0x01, 0x2c, 0xf1, 0x77, 0x99, 0xfd, 0xef, 0xa2, 0x94, 0x0b, 0x18, 0xd5, 0x6e, 0x80, 0xd4, 0x44, 0x14, 0xc5, 0xb1, 0x38, 0x84 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_132_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x07, 0x41, 0xc6, 0x9a, 0x4e, 0xdb, 0x38, 0x6c, 0x94, 0xf8, 0x19, 0xd1, 0xb5, 0xdd, 0xd0, 0x28, 0x1e, 0x4f, 0xf2, 0x97, 0x65 }; static const uint8_t nist_kas_ecc_cdh_testvector_132_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2f, 0x97, 0x2a, 0xba, 0xc9, 0x1b, 0xe8, 0x5a, 0x70, 0x9e, 0xba, 0x07, 0xf5, 0xd1, 0x62, 0x15, 0xae, 0x60, 0x2d }; static const uint8_t nist_kas_ecc_cdh_testvector_132_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x86, 0x81, 0x10, 0x79, 0xc8, 0x02, 0x1c, 0x2d, 0x79, 0xf4, 0xde, 0x95, 0x2c, 0xb2, 0xe5, 0x99, 0xc4, 0x2e, 0x19, 0xed }; /* QIUTx = 000000060aa42a62e21eea37e362b4d3de837f0c49d3ac13 */ /* QIUTy = 000000069b20d6fd16d13b1883df05629ac7d1b82386b344 */ static const uint8_t nist_kas_ecc_cdh_testvector_132_out[] = { /* ZIUT */ 0x06, 0x2a, 0x2f, 0x92, 0x6a, 0xb4, 0x35, 0xac, 0x14, 0xe0, 0x5d, 0x44, 0xc2, 0x7b, 0x46, 0xb6, 0x82, 0x0b, 0x71, 0x3a, 0xee }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_133_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x01, 0xef, 0x47, 0x79, 0x5f, 0xb0, 0xe3, 0x80, 0x40, 0x5a, 0xb5, 0xe8, 0x8d, 0xef, 0xc3, 0xce, 0xd9, 0xa9, 0x25, 0x14, 0xa6 }; static const uint8_t nist_kas_ecc_cdh_testvector_133_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x00, 0xbe, 0x61, 0x81, 0xd7, 0xfc, 0x03, 0xca, 0x8b, 0xfd, 0xf1, 0x18, 0x69, 0xce, 0xa2, 0x8c, 0xfa, 0x0e, 0x5f, 0x5f, 0x64 }; static const uint8_t nist_kas_ecc_cdh_testvector_133_private[] = { /* dIUT */ 0xe4, 0x6e, 0x9c, 0x96, 0x52, 0x68, 0x64, 0x7f, 0x20, 0x48, 0x47, 0x4c, 0x7b, 0x1a, 0x54, 0xdf, 0xfe, 0x72, 0x8f, 0x1f }; /* QIUTx = 00000007a984ead440310cef2e1338972ff2dddb65cac3d2 */ /* QIUTy = 0000000333c1a93427fe6ac502760b7778898a8bb6a40ad9 */ static const uint8_t nist_kas_ecc_cdh_testvector_133_out[] = { /* ZIUT */ 0x03, 0x99, 0xb9, 0x29, 0x4e, 0x89, 0x54, 0x86, 0xbd, 0xef, 0xba, 0xad, 0x7a, 0x72, 0x93, 0x53, 0xce, 0x09, 0x58, 0x63, 0x57 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_134_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x03, 0x74, 0xd7, 0xf9, 0xba, 0x8c, 0xda, 0x8a, 0x68, 0xde, 0x72, 0x79, 0xd3, 0xff, 0x86, 0x74, 0x03, 0x2f, 0xd4, 0x7c, 0x02 }; static const uint8_t nist_kas_ecc_cdh_testvector_134_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x03, 0xed, 0xe9, 0x95, 0xc3, 0xa4, 0xe8, 0xa6, 0xfe, 0x21, 0xcd, 0x1e, 0x4c, 0xd4, 0xca, 0x38, 0x12, 0xc0, 0xd6, 0x92, 0xa5 }; static const uint8_t nist_kas_ecc_cdh_testvector_134_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0x73, 0x34, 0x97, 0x14, 0x05, 0xb0, 0x46, 0x1c, 0x3e, 0xde, 0x67, 0xf2, 0xba, 0x33, 0x67, 0x34, 0x45, 0x1a, 0x83, 0x78 }; /* QIUTx = 0000000767c31ee9303b1b2cd3059f81507ef304ebd3102c */ /* QIUTy = 0000000251e0d430dc3f63f3a37bab1e7a957652cf67e22c */ static const uint8_t nist_kas_ecc_cdh_testvector_134_out[] = { /* ZIUT */ 0x02, 0x23, 0x25, 0xa9, 0xa7, 0x69, 0xa9, 0x02, 0xc2, 0xe6, 0x4c, 0x80, 0xa1, 0xd3, 0x54, 0x29, 0xce, 0xd4, 0x2a, 0xe0, 0xa4 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_135_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x06, 0x57, 0x7d, 0xf5, 0x4e, 0x11, 0xc7, 0xe7, 0x62, 0x02, 0xf9, 0x4f, 0x56, 0x4e, 0x61, 0x37, 0xb2, 0x3c, 0xe6, 0xe4, 0x41 }; static const uint8_t nist_kas_ecc_cdh_testvector_135_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x06, 0x89, 0x36, 0x60, 0x0a, 0xad, 0xcb, 0x25, 0xfd, 0x40, 0x24, 0xed, 0x3e, 0x84, 0x5b, 0x2b, 0xbf, 0x80, 0x72, 0x80, 0xe6 }; static const uint8_t nist_kas_ecc_cdh_testvector_135_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0x9b, 0xb4, 0x80, 0x73, 0x90, 0x11, 0x23, 0x5c, 0x6d, 0x5c, 0x6e, 0x74, 0xd6, 0xa7, 0xbb, 0x4f, 0x20, 0xf6, 0x1b, 0x7a }; /* QIUTx = 0000000093549075704d79dae772317dd65244fa772569eb */ /* QIUTy = 00000002a8a2821dd39d7e7653ca71cfc1a9ed857801a39b */ static const uint8_t nist_kas_ecc_cdh_testvector_135_out[] = { /* ZIUT */ 0x05, 0x13, 0x92, 0xd5, 0x37, 0x70, 0x16, 0x35, 0x84, 0x05, 0x03, 0x0b, 0x48, 0x74, 0x40, 0x03, 0xdb, 0x66, 0x44, 0x0a, 0x2d }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_136_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0x61, 0xd1, 0x53, 0x45, 0xce, 0xb4, 0x92, 0x22, 0x9a, 0x8d, 0x74, 0x59, 0x7e, 0x7d, 0xfd, 0x19, 0xae, 0xb6, 0x84, 0x8a }; static const uint8_t nist_kas_ecc_cdh_testvector_136_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x01, 0x14, 0xa1, 0x22, 0xce, 0x28, 0xca, 0x15, 0x62, 0x0f, 0x7b, 0x40, 0xa1, 0xf2, 0x6b, 0x42, 0x34, 0xc9, 0x56, 0xbd, 0xc1 }; static const uint8_t nist_kas_ecc_cdh_testvector_136_private[] = { /* dIUT */ 0xf4, 0xed, 0xb5, 0x8b, 0xcc, 0x3d, 0x6e, 0x9d, 0x31, 0x72, 0x29, 0x42, 0x0a, 0x73, 0x32, 0x81, 0xec, 0xcf, 0xf1, 0xcf }; /* QIUTx = 000000027183609b7593b1845365c081d45ff66c9ab5e370 */ /* QIUTy = 000000069b981236fe930947b6b77f374282a18e4be993cb */ static const uint8_t nist_kas_ecc_cdh_testvector_136_out[] = { /* ZIUT */ 0x04, 0x5d, 0xac, 0x07, 0x6e, 0x79, 0xde, 0x2f, 0xc6, 0x31, 0x31, 0x54, 0x65, 0xd3, 0xef, 0x62, 0x45, 0xf2, 0x66, 0x47, 0xe5 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_137_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x07, 0x0e, 0x38, 0x0f, 0x49, 0x37, 0x0a, 0x00, 0x27, 0x95, 0x4a, 0x4e, 0xa8, 0x80, 0xbc, 0x19, 0x29, 0xb2, 0x8c, 0x53, 0x29 }; static const uint8_t nist_kas_ecc_cdh_testvector_137_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x04, 0x6f, 0xe3, 0xb4, 0x54, 0xaf, 0x94, 0x20, 0xa8, 0x11, 0xf1, 0xe1, 0x5f, 0x77, 0x4d, 0xa5, 0xae, 0x1a, 0x40, 0xb4, 0x59 }; static const uint8_t nist_kas_ecc_cdh_testvector_137_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0xb9, 0x90, 0x49, 0x1a, 0x12, 0xfd, 0xee, 0x23, 0x1a, 0xa2, 0xa1, 0x16, 0xe1, 0xe3, 0xc1, 0xc9, 0x1d, 0x0f, 0xd4, 0x78 }; /* QIUTx = 00000003da869d09c4e4545ac1689fc72316012632d0abd9 */ /* QIUTy = 00000002c820f40310e5ffd2f8bf439fba879bb2ef621b2a */ static const uint8_t nist_kas_ecc_cdh_testvector_137_out[] = { /* ZIUT */ 0x01, 0x4f, 0x7a, 0x46, 0x84, 0x7e, 0xd6, 0xa7, 0xff, 0x60, 0x5b, 0x0e, 0x52, 0xc6, 0x16, 0xe4, 0xad, 0x3f, 0x0d, 0x50, 0x29 }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_138_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x06, 0xe6, 0x0a, 0xf7, 0x74, 0x19, 0xb9, 0xfe, 0x0f, 0xc5, 0xc7, 0x9c, 0xa1, 0xa2, 0x2a, 0x10, 0x11, 0x40, 0x24, 0x05, 0xb6 }; static const uint8_t nist_kas_ecc_cdh_testvector_138_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x06, 0x9b, 0xca, 0x34, 0x00, 0x5b, 0x57, 0x8c, 0xd7, 0xa7, 0xa6, 0x92, 0x9b, 0xd3, 0xf6, 0xce, 0x29, 0x94, 0x3b, 0x5e, 0xd9 }; static const uint8_t nist_kas_ecc_cdh_testvector_138_private[] = { /* dIUT */ 0xe8, 0x29, 0xb9, 0x94, 0x2f, 0xd9, 0x64, 0x87, 0xf6, 0x01, 0x29, 0x08, 0xfe, 0x04, 0xf6, 0xd8, 0xea, 0xaf, 0x19, 0x66 }; /* QIUTx = 00000005ab2074c04df57160167735f7fc2d8f629d34ff18 */ /* QIUTy = 000000012e9da6d05bb3e2acbe5ba4afb4a0dd72db07d6ac */ static const uint8_t nist_kas_ecc_cdh_testvector_138_out[] = { /* ZIUT */ 0x00, 0xea, 0xca, 0xbc, 0x34, 0x55, 0x59, 0x56, 0x99, 0x56, 0x23, 0xe6, 0x04, 0x82, 0xe5, 0xc1, 0x18, 0xe3, 0x4e, 0x20, 0x94 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_139_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x04, 0xf7, 0x50, 0xe2, 0x75, 0x00, 0xe1, 0x0f, 0x0a, 0x17, 0x6b, 0x83, 0xf1, 0x4b, 0xc2, 0x6d, 0x6b, 0xd7, 0x1e, 0xbd, 0x74 }; static const uint8_t nist_kas_ecc_cdh_testvector_139_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x03, 0x9e, 0x50, 0x09, 0x06, 0x7c, 0x0e, 0xe2, 0xc8, 0xf5, 0x5b, 0x7e, 0x84, 0xda, 0x7a, 0x39, 0x1f, 0x08, 0xaf, 0x75, 0x04 }; static const uint8_t nist_kas_ecc_cdh_testvector_139_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0x57, 0xce, 0x8f, 0x0b, 0x6c, 0xe9, 0x2e, 0x42, 0x6e, 0xc9, 0x9f, 0x22, 0x3a, 0xd8, 0x27, 0x63, 0xe4, 0xbd, 0x3f, 0xf3 }; /* QIUTx = 00000005d3989cca4ae732de93672b25c9260861b4c0dce3 */ /* QIUTy = 0000000436a331ead24f2807b55260f9dc3de668cfbfebb7 */ static const uint8_t nist_kas_ecc_cdh_testvector_139_out[] = { /* ZIUT */ 0x04, 0x14, 0xa6, 0x22, 0x64, 0x51, 0x07, 0xf1, 0x15, 0x57, 0x6f, 0x51, 0xcd, 0xf3, 0x9d, 0x13, 0x93, 0xa2, 0xd7, 0x85, 0x1f }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_140_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0xab, 0x9f, 0x5b, 0xa9, 0x41, 0x02, 0xd2, 0x1a, 0x70, 0x67, 0x61, 0xea, 0xc0, 0x09, 0x21, 0x90, 0xf1, 0xcd, 0xad, 0x04 }; static const uint8_t nist_kas_ecc_cdh_testvector_140_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x04, 0xad, 0xdd, 0x77, 0xe1, 0x99, 0xc1, 0x32, 0xd1, 0x8a, 0xc5, 0x41, 0xb1, 0x17, 0x74, 0x8d, 0x23, 0x19, 0xdb, 0x7f, 0xe5 }; static const uint8_t nist_kas_ecc_cdh_testvector_140_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x79, 0x88, 0x5f, 0x45, 0xf2, 0xd7, 0x07, 0xbe, 0x1c, 0x11, 0xd8, 0x6c, 0x41, 0xba, 0xda, 0x49, 0x3b, 0x2a, 0x56, 0x03 }; /* QIUTx = 00000005ae31cb29b31d24f5f94c30e9c02f07f38bff0ac8 */ /* QIUTy = 00000004d8d8e39bf87f058543dc8990a91214da416cc558 */ static const uint8_t nist_kas_ecc_cdh_testvector_140_out[] = { /* ZIUT */ 0x05, 0x6b, 0xe0, 0x02, 0xda, 0xff, 0x11, 0xc4, 0x06, 0x6e, 0x10, 0xac, 0xd0, 0x46, 0xa8, 0x5e, 0x17, 0x0f, 0xa4, 0xc1, 0x22 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_141_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x04, 0x3d, 0x25, 0xd2, 0xde, 0x92, 0x93, 0xb8, 0x4d, 0x35, 0x1a, 0x33, 0xcb, 0x1a, 0x52, 0xf5, 0x93, 0x0a, 0x4c, 0x8b, 0x76 }; static const uint8_t nist_kas_ecc_cdh_testvector_141_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x03, 0xd2, 0x59, 0xd8, 0x23, 0x6e, 0x9c, 0x8d, 0x64, 0x37, 0xf4, 0x1e, 0x6d, 0x54, 0x61, 0x1c, 0x52, 0x23, 0x8f, 0xe2, 0xd5 }; static const uint8_t nist_kas_ecc_cdh_testvector_141_private[] = { /* dIUT */ 0xba, 0x8c, 0x58, 0x64, 0xdb, 0x3e, 0xfd, 0x76, 0x8b, 0x93, 0x76, 0xfc, 0x2b, 0x6c, 0x1f, 0x85, 0xf4, 0x6f, 0x6a, 0xf2 }; /* QIUTx = 000000062f622149823f255b4f86906666f3a3556af080ea */ /* QIUTy = 0000000274ca32c10f9add61a026d20ad3ad56b17fb06a46 */ static const uint8_t nist_kas_ecc_cdh_testvector_141_out[] = { /* ZIUT */ 0x02, 0x1f, 0xef, 0x8e, 0x47, 0x3d, 0xae, 0xda, 0x8e, 0xf6, 0xbf, 0x07, 0x81, 0x4d, 0x7b, 0x9b, 0x61, 0x3e, 0x30, 0x76, 0xa3 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_142_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x00, 0x56, 0x0e, 0x1a, 0x42, 0x18, 0x65, 0x11, 0x8b, 0xea, 0x16, 0xcd, 0xad, 0x6b, 0x67, 0xab, 0xa3, 0x84, 0xef, 0x38, 0x7b }; static const uint8_t nist_kas_ecc_cdh_testvector_142_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x05, 0x8b, 0x21, 0x3e, 0xc2, 0xab, 0x39, 0x42, 0xf8, 0xf6, 0xad, 0x60, 0xa9, 0x56, 0x95, 0x5b, 0x58, 0x90, 0x66, 0xb8, 0x56 }; static const uint8_t nist_kas_ecc_cdh_testvector_142_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0xe5, 0x08, 0x04, 0x84, 0xd3, 0x73, 0x0b, 0x22, 0x48, 0xcc, 0xc4, 0x82, 0x60, 0xd4, 0xbd, 0x18, 0x57, 0x60, 0x5a, 0xd1 }; /* QIUTx = 000000058aea6e40b8cb25e6622a7be4ff01b79c92de72a5 */ /* QIUTy = 000000043f6776b6deff3d29b4c703899d705c7fecf525c4 */ static const uint8_t nist_kas_ecc_cdh_testvector_142_out[] = { /* ZIUT */ 0x03, 0xa2, 0x87, 0xfd, 0x1c, 0xca, 0x68, 0xdb, 0x47, 0xa3, 0xc7, 0x4c, 0x12, 0x62, 0x7f, 0xc3, 0x72, 0x85, 0x68, 0xdd, 0x66 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_143_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x03, 0x8e, 0x48, 0x5d, 0xe9, 0x2e, 0x41, 0xf1, 0xca, 0xca, 0x6c, 0x0e, 0xb9, 0xd8, 0x11, 0xa5, 0xac, 0xa8, 0x9b, 0xf3, 0x45 }; static const uint8_t nist_kas_ecc_cdh_testvector_143_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x03, 0x31, 0xa1, 0x67, 0x7c, 0x46, 0xa6, 0x8e, 0x96, 0x48, 0x11, 0xa9, 0xcc, 0x5e, 0x4e, 0x53, 0xea, 0x71, 0xe2, 0x31, 0x29 }; static const uint8_t nist_kas_ecc_cdh_testvector_143_private[] = { /* dIUT */ 0x5d, 0x05, 0x2b, 0xa1, 0xab, 0xea, 0x72, 0x49, 0x78, 0xca, 0xef, 0x18, 0x79, 0x24, 0x56, 0x72, 0xd5, 0xae, 0xf8, 0x91 }; /* QIUTx = 000000036b84a77337a9de5c1dd7ae3c899381382f0fffa4 */ /* QIUTy = 000000056d4ac39fe881fdb8e60d4559658aaade45663ee5 */ static const uint8_t nist_kas_ecc_cdh_testvector_143_out[] = { /* ZIUT */ 0x02, 0x95, 0x58, 0xb4, 0x1b, 0x8b, 0x92, 0x38, 0x7b, 0xc2, 0x2c, 0x86, 0x8f, 0x51, 0xbb, 0x7a, 0xcb, 0x6e, 0x4e, 0xe2, 0xe3 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_144_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x06, 0x42, 0x59, 0xe5, 0x00, 0x47, 0x6d, 0xda, 0x3e, 0x97, 0xe2, 0x5e, 0x49, 0x1d, 0x46, 0x6c, 0x2b, 0x79, 0x58, 0xbd, 0x49 }; static const uint8_t nist_kas_ecc_cdh_testvector_144_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x03, 0xc2, 0xe5, 0x32, 0x81, 0x39, 0x36, 0x41, 0xa5, 0x18, 0xd1, 0xdc, 0xef, 0xfa, 0xbe, 0xe8, 0xb2, 0x9b, 0xde, 0x14, 0x02 }; static const uint8_t nist_kas_ecc_cdh_testvector_144_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x91, 0x80, 0x18, 0x7a, 0x9e, 0xdd, 0xcf, 0x38, 0xdc, 0x26, 0x4f, 0x05, 0x5b, 0x07, 0xd2, 0x0b, 0x9f, 0x9a, 0x8b, 0xc4 }; /* QIUTx = 00000004b292d1fa09dfc5e6a3ad99fd02feb74d480e34f2 */ /* QIUTy = 00000006e1888009a0a0491c0be6abfac943d377f0b4863b */ static const uint8_t nist_kas_ecc_cdh_testvector_144_out[] = { /* ZIUT */ 0x05, 0x30, 0x02, 0x0c, 0x8f, 0x63, 0x62, 0x31, 0x2b, 0xfb, 0xe5, 0xc1, 0xc6, 0x05, 0xb4, 0x0d, 0xc2, 0xe0, 0x32, 0xe8, 0x1c }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_145_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x03, 0x71, 0x42, 0x76, 0x99, 0x7b, 0x44, 0x78, 0xe2, 0xd8, 0xb5, 0x9a, 0xf5, 0xf2, 0xe6, 0x3e, 0x22, 0xbc, 0x4c, 0x31, 0xe4 }; static const uint8_t nist_kas_ecc_cdh_testvector_145_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x06, 0x73, 0xf2, 0x8d, 0x96, 0x2a, 0xbf, 0xed, 0xee, 0x62, 0xea, 0xb4, 0x7c, 0x3b, 0x45, 0x79, 0xa1, 0xe5, 0x16, 0x83, 0x36 }; static const uint8_t nist_kas_ecc_cdh_testvector_145_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0x6d, 0x37, 0x86, 0x2b, 0x19, 0x57, 0x63, 0xc6, 0xa0, 0x1d, 0x5e, 0x39, 0xb9, 0x45, 0x9a, 0x32, 0x50, 0x7c, 0x2b, 0x21 }; /* QIUTx = 000000033440e460c475f2058a767ec466ca18bce41f830e */ /* QIUTy = 0000000372aee323d063fa89acbffbf55024ae24e4929f19 */ static const uint8_t nist_kas_ecc_cdh_testvector_145_out[] = { /* ZIUT */ 0x05, 0x21, 0x67, 0x30, 0x06, 0xa1, 0xd9, 0x60, 0x89, 0x11, 0xd5, 0x45, 0x36, 0xe1, 0x22, 0xd8, 0x09, 0xe9, 0x19, 0xd8, 0x04 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_146_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0x75, 0xec, 0x15, 0xf2, 0x7d, 0xd2, 0xda, 0x6e, 0x44, 0xdf, 0xe6, 0x23, 0x54, 0x72, 0xd5, 0xbd, 0x3a, 0x25, 0x02, 0xf8 }; static const uint8_t nist_kas_ecc_cdh_testvector_146_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x05, 0x8f, 0xd0, 0x22, 0x62, 0xb2, 0x7c, 0x18, 0x5d, 0xde, 0x26, 0xb2, 0xc7, 0x7d, 0x5a, 0x4f, 0x4d, 0x50, 0xdc, 0x99, 0x28 }; static const uint8_t nist_kas_ecc_cdh_testvector_146_private[] = { /* dIUT */ 0x6c, 0x65, 0x87, 0x94, 0xb0, 0x39, 0xc8, 0x20, 0xa8, 0xb0, 0x33, 0x00, 0x8f, 0xa8, 0xac, 0x75, 0x56, 0xbc, 0xae, 0xc3 }; /* QIUTx = 00000004cbfb286691e415081a1785ec6b0aacdb1d231d1d */ /* QIUTy = 00000005dd6acfe91d68a8ec23686478c0ee8c89277aef14 */ static const uint8_t nist_kas_ecc_cdh_testvector_146_out[] = { /* ZIUT */ 0x04, 0x60, 0x57, 0x9b, 0xec, 0xa1, 0x6c, 0xcc, 0xce, 0x31, 0x4f, 0xf3, 0x04, 0x0d, 0xe4, 0x78, 0x53, 0x36, 0xfc, 0x35, 0x8c }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_147_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0x33, 0xaf, 0x36, 0x10, 0x30, 0x39, 0x22, 0x6f, 0x41, 0x6d, 0xd2, 0x2e, 0x1a, 0x26, 0xb7, 0x3f, 0x90, 0x93, 0xd3, 0x8a }; static const uint8_t nist_kas_ecc_cdh_testvector_147_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x07, 0x34, 0x25, 0x8a, 0x17, 0x5c, 0x97, 0x76, 0x8a, 0x9f, 0x72, 0xb8, 0x24, 0xb9, 0x9a, 0x91, 0xf5, 0xcf, 0x8e, 0x3d, 0x96 }; static const uint8_t nist_kas_ecc_cdh_testvector_147_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0x69, 0xc8, 0xda, 0x22, 0xc3, 0x5a, 0x85, 0x54, 0x95, 0x04, 0x7a, 0x10, 0x4b, 0xe0, 0x0b, 0x15, 0x75, 0xb6, 0x52, 0xab }; /* QIUTx = 000000045efed9c8bd2a4e429588f344f49d1e63e668bd01 */ /* QIUTy = 000000025d1af85ac21d59822d7df8f0e4bebadf3b5d4401 */ static const uint8_t nist_kas_ecc_cdh_testvector_147_out[] = { /* ZIUT */ 0x05, 0xba, 0x66, 0x96, 0x44, 0x83, 0xfe, 0x47, 0x3c, 0xcb, 0xd0, 0x0c, 0x37, 0xad, 0x3b, 0xa4, 0x0c, 0xc5, 0x96, 0x9f, 0x62 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_148_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x06, 0xd0, 0x32, 0x15, 0x22, 0x40, 0xf2, 0x8b, 0xe7, 0xf7, 0x4d, 0xf8, 0xf6, 0xd2, 0xa4, 0x50, 0xc1, 0x22, 0x9a, 0x5a, 0x95 }; static const uint8_t nist_kas_ecc_cdh_testvector_148_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x07, 0xaa, 0xda, 0xc7, 0x7c, 0xc4, 0x44, 0x89, 0x85, 0xd1, 0x79, 0x46, 0x36, 0xbc, 0x1d, 0x58, 0x2f, 0x3d, 0x10, 0x1a, 0x33 }; static const uint8_t nist_kas_ecc_cdh_testvector_148_private[] = { /* dIUT */ 0x03, 0x2f, 0xc7, 0x90, 0x86, 0x46, 0x32, 0x63, 0x0c, 0x49, 0xa2, 0x9e, 0x9a, 0xd0, 0xfb, 0x6d, 0x10, 0xf2, 0xb5, 0x8c }; /* QIUTx = 0000000779cfb3e17c902a2584ed3382a8bed8262db98424 */ /* QIUTy = 000000004af273875f8a2ab9a94ac0d1e4a23390b2bb505c */ static const uint8_t nist_kas_ecc_cdh_testvector_148_out[] = { /* ZIUT */ 0x02, 0x77, 0xc4, 0xa7, 0x6e, 0x16, 0x13, 0xb2, 0xed, 0xe6, 0x99, 0xa6, 0x75, 0xc1, 0x64, 0x5a, 0x78, 0x60, 0x75, 0x00, 0x9e }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_149_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x01, 0xf8, 0x58, 0x1e, 0xc6, 0x1d, 0xf1, 0x40, 0x92, 0x27, 0xaa, 0xb7, 0xa0, 0x15, 0xf2, 0xc7, 0x1d, 0x29, 0xe3, 0x71, 0x6c }; static const uint8_t nist_kas_ecc_cdh_testvector_149_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x01, 0xc1, 0xf5, 0x1c, 0xc4, 0x18, 0x5b, 0x68, 0xa2, 0x60, 0xe3, 0x1b, 0x4b, 0x00, 0xc0, 0x3a, 0x44, 0x03, 0xf6, 0x5c, 0x25 }; static const uint8_t nist_kas_ecc_cdh_testvector_149_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0xc1, 0xde, 0x5b, 0xb4, 0x0e, 0x70, 0x93, 0x3e, 0xd7, 0xdb, 0x84, 0xce, 0x2c, 0xb4, 0x68, 0xcb, 0xba, 0x29, 0x9b, 0x3a }; /* QIUTx = 00000005ffe0f16018bd4bdee5f73bfdad04d713f2216f50 */ /* QIUTy = 000000042361c881f0081cb0544efab0c3b34f59eaadeec4 */ static const uint8_t nist_kas_ecc_cdh_testvector_149_out[] = { /* ZIUT */ 0x03, 0xc6, 0x48, 0x1d, 0xac, 0x38, 0x7a, 0xf3, 0x9e, 0x8c, 0x09, 0xa5, 0x53, 0x06, 0x8a, 0xc4, 0x96, 0xee, 0xa0, 0x36, 0x91 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_150_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0xba, 0x22, 0xfb, 0xda, 0xaa, 0xa8, 0x06, 0xc8, 0x57, 0x0f, 0x14, 0xad, 0x4c, 0x88, 0x2a, 0x61, 0x0c, 0xcb, 0x8d, 0x84 }; static const uint8_t nist_kas_ecc_cdh_testvector_150_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x06, 0xd4, 0x43, 0x8e, 0x52, 0x8c, 0xa8, 0x87, 0xb0, 0x5b, 0xd2, 0x56, 0x4d, 0xf9, 0x3b, 0xef, 0x9b, 0xf6, 0x60, 0xda, 0x78 }; static const uint8_t nist_kas_ecc_cdh_testvector_150_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x88, 0x12, 0x75, 0xba, 0x48, 0xbe, 0xa0, 0xbe, 0xcc, 0x02, 0x11, 0x90, 0x34, 0x67, 0xf5, 0xd0, 0xaa, 0xe3, 0x21, 0xaa }; /* QIUTx = 0000000776e40fe7149985337ef1b6c9b830cb3608752aa6 */ /* QIUTy = 000000058e6ecbb27b0b2d3cd0e3a7ba538de3576fd5b9f6 */ static const uint8_t nist_kas_ecc_cdh_testvector_150_out[] = { /* ZIUT */ 0x07, 0xb5, 0xd0, 0x96, 0xd0, 0x6d, 0x41, 0xc3, 0xad, 0x64, 0x58, 0xcc, 0x93, 0x41, 0x7e, 0x6f, 0xac, 0xc9, 0x9b, 0xc7, 0xb8 }; /* [K-233] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_151_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0xf4, 0x0e, 0x34, 0xb3, 0xed, 0x4a, 0x1b, 0x2d, 0x40, 0xc0, 0x56, 0xfb, 0x75, 0xf2, 0xad, 0x54, 0x3c, 0x89, 0x7c, 0xfd, 0x82, 0xf5, 0x42, 0xcf, 0x74, 0x6a, 0x0f, 0x20, 0x2f }; static const uint8_t nist_kas_ecc_cdh_testvector_151_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xc1, 0x30, 0xa1, 0xab, 0xe9, 0x2b, 0xc4, 0xc9, 0x77, 0xc8, 0x00, 0x77, 0x79, 0x96, 0xcc, 0xc5, 0x0b, 0x90, 0xdf, 0x99, 0x1a, 0x2e, 0x81, 0xdd, 0x51, 0x5c, 0x18, 0x85, 0x99 }; static const uint8_t nist_kas_ecc_cdh_testvector_151_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x13, 0x5a, 0x5b, 0x8c, 0x3c, 0xe0, 0x47, 0xfb, 0xc5, 0xdf, 0x26, 0x27, 0x7d, 0x3b, 0xf8, 0x3a, 0xc3, 0x3d, 0xda, 0xdb, 0x5c, 0xf4, 0xa0, 0x50, 0xca, 0x82, 0xbe, 0x48, 0xf0 }; /* QIUTx = 000001a53e5c138b3d83905d563aa1db01274633c986b52f78225a92e33e7952 */ /* QIUTy = 000000ecabd3e2e26729a965604e560ed4498a22b31c39642e1cf99b1dde3ec7 */ static const uint8_t nist_kas_ecc_cdh_testvector_151_out[] = { /* ZIUT */ 0x00, 0xa8, 0x22, 0xb1, 0x41, 0xca, 0x1f, 0x5a, 0xd3, 0x28, 0x99, 0xe6, 0x8c, 0x54, 0xd1, 0xfe, 0xc3, 0xdf, 0x81, 0x00, 0xdf, 0x48, 0x5e, 0xbf, 0x1c, 0x58, 0x68, 0xa9, 0xac, 0x89 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_152_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xc8, 0x64, 0xc2, 0xa4, 0x62, 0xa9, 0x36, 0x3a, 0x4a, 0xc3, 0xd8, 0x18, 0x21, 0x1b, 0xca, 0x03, 0x69, 0x47, 0x2d, 0x18, 0x62, 0x88, 0xa2, 0x75, 0x67, 0x43, 0x3b, 0xda, 0x45 }; static const uint8_t nist_kas_ecc_cdh_testvector_152_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x68, 0x9d, 0x4d, 0x00, 0x06, 0xeb, 0xa0, 0x54, 0xdc, 0x69, 0xfc, 0xc0, 0x78, 0x67, 0x80, 0xfb, 0x5f, 0x74, 0xd3, 0x98, 0x92, 0x13, 0x50, 0x4e, 0x2f, 0x6e, 0x66, 0x69, 0x80 }; static const uint8_t nist_kas_ecc_cdh_testvector_152_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x51, 0xbe, 0x6f, 0xbc, 0xd4, 0x87, 0x8c, 0x55, 0x43, 0x9b, 0x0b, 0xcb, 0xbe, 0x5e, 0xa8, 0xe8, 0x4b, 0xc9, 0xdb, 0x89, 0xe7, 0x0a, 0x8e, 0x8e, 0xbf, 0x34, 0x78, 0x2d, 0xa8 }; /* QIUTx = 000001c5a1e5d3ee516e3ede723fa2d5cd3456b116326303c5ee49273a5604c4 */ /* QIUTy = 000000568d0fe7130295541bfa265074147546e9733736ba007559d716d8e094 */ static const uint8_t nist_kas_ecc_cdh_testvector_152_out[] = { /* ZIUT */ 0x01, 0x66, 0x26, 0x82, 0xbe, 0xc2, 0xdf, 0xae, 0x05, 0xe3, 0x85, 0x87, 0xc8, 0xe6, 0xa4, 0xd1, 0x8a, 0xef, 0x4c, 0xb3, 0x41, 0x69, 0x89, 0xc4, 0x7c, 0x11, 0xbb, 0xe2, 0x81, 0x0f }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_153_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x78, 0x2d, 0x82, 0xfc, 0xd2, 0x11, 0xc0, 0x24, 0x7c, 0x87, 0xe6, 0x57, 0xef, 0xcc, 0x5d, 0x2f, 0xf6, 0xb0, 0x5e, 0xb9, 0x35, 0x33, 0x0a, 0x53, 0x90, 0x3f, 0xb3, 0xbf, 0xa3 }; static const uint8_t nist_kas_ecc_cdh_testvector_153_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xcc, 0xe8, 0x30, 0xa5, 0x15, 0xd6, 0x90, 0xab, 0x98, 0x14, 0x95, 0x79, 0xad, 0x34, 0x81, 0x38, 0x48, 0x59, 0xe5, 0x65, 0xd0, 0x7f, 0xa6, 0x1f, 0x50, 0xeb, 0xd6, 0x69, 0xa2 }; static const uint8_t nist_kas_ecc_cdh_testvector_153_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x2e, 0xcc, 0xa5, 0x95, 0xe5, 0x5e, 0x6c, 0x85, 0xc5, 0xaf, 0x78, 0xc5, 0x95, 0x40, 0xfd, 0xb7, 0x49, 0x00, 0x3f, 0xf4, 0xec, 0x36, 0x1c, 0x38, 0xb4, 0x8e, 0x7d, 0xa6, 0xbc }; /* QIUTx = 0000005a48fac476c31cad0c68e64e65e687ae4418fb5d3b4bb2abb990dd0de4 */ /* QIUTy = 0000002d9add706626f2859ece110df2dde89faf3e8aac433e2595e23c274082 */ static const uint8_t nist_kas_ecc_cdh_testvector_153_out[] = { /* ZIUT */ 0x00, 0x21, 0x5d, 0x51, 0x1c, 0xb9, 0x5e, 0x0e, 0x07, 0x3e, 0xe9, 0x99, 0x90, 0x8a, 0x7a, 0x84, 0x4a, 0xfd, 0x75, 0xc9, 0xac, 0xb7, 0xa9, 0xd7, 0x24, 0xf7, 0xfd, 0x32, 0x2b, 0x01 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_154_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x8d, 0x80, 0x0d, 0x37, 0x67, 0xab, 0xf5, 0x73, 0x16, 0x95, 0x75, 0x4e, 0xe8, 0x82, 0x9b, 0x85, 0x8f, 0xf4, 0xeb, 0x60, 0x4a, 0x44, 0x8a, 0xd6, 0x64, 0x90, 0xb4, 0x9c, 0x19 }; static const uint8_t nist_kas_ecc_cdh_testvector_154_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0xbc, 0x0f, 0x03, 0x39, 0x64, 0x9a, 0xd4, 0xd7, 0xb7, 0xcf, 0xf3, 0xfc, 0xa9, 0xe9, 0x65, 0xa3, 0x86, 0x25, 0xe8, 0xf4, 0x5b, 0xc9, 0x60, 0x2a, 0x33, 0xc0, 0x79, 0x8a, 0x33 }; static const uint8_t nist_kas_ecc_cdh_testvector_154_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x6a, 0x7c, 0x03, 0x89, 0x2d, 0xf1, 0x84, 0xd5, 0x6c, 0xdc, 0xcb, 0x9d, 0x5e, 0x9a, 0x16, 0x48, 0x3a, 0x6c, 0x93, 0x88, 0xae, 0x21, 0x2a, 0xa9, 0x26, 0xc8, 0xfd, 0xfb, 0x5e }; /* QIUTx = 0000014aaf880e81db69aba2b403bbda7f361e3339b483ce2699f30bf5281ead */ /* QIUTy = 000001b71559bd7d9384e517b87f1138a696fbceb3510d8c41c2158d4aa3e5b2 */ static const uint8_t nist_kas_ecc_cdh_testvector_154_out[] = { /* ZIUT */ 0x01, 0x39, 0x4e, 0x02, 0xc7, 0x01, 0x04, 0xf2, 0xa5, 0x30, 0x8b, 0x2d, 0x10, 0x1b, 0x02, 0xc7, 0x0e, 0xf2, 0xd1, 0x35, 0x40, 0x60, 0x2b, 0x8e, 0x8f, 0x82, 0xdc, 0x6d, 0x56, 0x9f }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_155_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x4a, 0x3e, 0x12, 0x1a, 0xdd, 0x7a, 0x52, 0x67, 0xf5, 0xca, 0xd2, 0x04, 0xb3, 0xf4, 0x92, 0x15, 0x08, 0x47, 0x86, 0xb2, 0x3f, 0x8d, 0x94, 0xd9, 0xfd, 0xa0, 0x2e, 0x0f, 0x19 }; static const uint8_t nist_kas_ecc_cdh_testvector_155_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x39, 0x4f, 0xea, 0x17, 0x5d, 0xad, 0x9b, 0x34, 0xd5, 0x25, 0x43, 0x46, 0x54, 0xd0, 0xc8, 0x66, 0x37, 0x92, 0x6c, 0xac, 0x3a, 0x32, 0x92, 0xa2, 0xe4, 0xa5, 0x14, 0xb5, 0xf5 }; static const uint8_t nist_kas_ecc_cdh_testvector_155_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x2e, 0x2f, 0xf8, 0x79, 0x1b, 0xc6, 0x4c, 0x00, 0xf3, 0xb0, 0xf1, 0xd5, 0xd5, 0xcf, 0xb9, 0xdd, 0xb3, 0xb1, 0x93, 0x81, 0x45, 0x99, 0xf7, 0xdb, 0xdd, 0xed, 0xef, 0xcf, 0xa3 }; /* QIUTx = 0000018045cc9e65f6e275e322a62c18efe2d00cf93995feb53561273a3f1306 */ /* QIUTy = 00000164e0073c0d4b3e12e22f837bd3fec421e3bb09e0c0dd997422830f6403 */ static const uint8_t nist_kas_ecc_cdh_testvector_155_out[] = { /* ZIUT */ 0x00, 0x85, 0x56, 0xa4, 0xc3, 0xa8, 0x90, 0x6d, 0xdb, 0xcb, 0x94, 0x60, 0x99, 0xca, 0x5d, 0xbe, 0x7b, 0xdb, 0x6c, 0xd8, 0xf3, 0x7f, 0xbb, 0x50, 0xc9, 0x6f, 0xce, 0xfe, 0xd3, 0x2d }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_156_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x89, 0x66, 0x78, 0x88, 0xf8, 0x42, 0x5c, 0x5a, 0x62, 0x31, 0x34, 0x62, 0x2f, 0x1e, 0xa9, 0xd9, 0xaf, 0x36, 0xdf, 0x97, 0x72, 0xc4, 0x10, 0xd6, 0xe3, 0x1f, 0x2b, 0x4d, 0xb8 }; static const uint8_t nist_kas_ecc_cdh_testvector_156_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x84, 0x43, 0x0f, 0xa4, 0x71, 0x64, 0xd1, 0xc0, 0xeb, 0x97, 0x04, 0x2a, 0x44, 0xcb, 0xef, 0x40, 0x0b, 0xbb, 0x54, 0x5f, 0xae, 0xa4, 0xef, 0x49, 0xba, 0x5e, 0x3b, 0xef, 0x42 }; static const uint8_t nist_kas_ecc_cdh_testvector_156_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x66, 0x97, 0x2e, 0x71, 0x56, 0x67, 0x46, 0xf2, 0xf7, 0x6c, 0x87, 0x79, 0x37, 0x74, 0x05, 0x4e, 0xa2, 0x75, 0xe2, 0xa7, 0xe2, 0x7a, 0xb7, 0xc2, 0xd0, 0x5c, 0x5f, 0x24, 0x12 }; /* QIUTx = 00000020226dd73e318e4fc8d49dd43e59e260193d1bb248cbe4c06b4d6b8389 */ /* QIUTy = 000000ed12a4f389696ab31c93ea3ec4d8eaf18be097fc9152e2c42b73ff4528 */ static const uint8_t nist_kas_ecc_cdh_testvector_156_out[] = { /* ZIUT */ 0x00, 0x4e, 0xa6, 0xe0, 0xe3, 0x4e, 0xc7, 0xc9, 0xbb, 0xad, 0x47, 0xf0, 0xf6, 0xf8, 0xec, 0x06, 0x08, 0xe7, 0x36, 0xd9, 0x1e, 0x0e, 0x56, 0xcf, 0x3e, 0x5c, 0xff, 0xe8, 0xc3, 0x70 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_157_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x64, 0xda, 0x09, 0x92, 0x25, 0xeb, 0x3c, 0x64, 0x1f, 0xc8, 0x3c, 0x77, 0x20, 0x4a, 0x39, 0x6e, 0xab, 0x94, 0x95, 0xb1, 0x2a, 0x22, 0xf6, 0x8e, 0x7a, 0x4b, 0x83, 0x99, 0xd5 }; static const uint8_t nist_kas_ecc_cdh_testvector_157_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xcd, 0x98, 0xf2, 0x70, 0x4c, 0x74, 0x94, 0xe6, 0xd2, 0x03, 0x75, 0xe7, 0x45, 0x28, 0xc8, 0xf5, 0x6f, 0x86, 0x7e, 0x9d, 0xd7, 0x63, 0x29, 0x81, 0x42, 0xea, 0x01, 0x72, 0x4b }; static const uint8_t nist_kas_ecc_cdh_testvector_157_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x1e, 0x53, 0xba, 0xa1, 0x6b, 0xc0, 0x26, 0x2b, 0x53, 0x29, 0xa7, 0x11, 0xb0, 0xeb, 0x18, 0x8a, 0x1b, 0xca, 0x7e, 0xf4, 0xb5, 0xc8, 0x50, 0x61, 0x22, 0x5d, 0x41, 0xd4, 0xa9 }; /* QIUTx = 0000007d6d785fa323174eb9cde5b705428e4019244835bc94702f280c25ffe5 */ /* QIUTy = 0000019aa0ef433074c484d14e611372f03ef8912f1a8246ceb1e90c817db3db */ static const uint8_t nist_kas_ecc_cdh_testvector_157_out[] = { /* ZIUT */ 0x01, 0x60, 0xd0, 0xb9, 0xb9, 0x2a, 0x4a, 0xcd, 0x08, 0x97, 0x38, 0xfd, 0x48, 0x9a, 0xe3, 0x97, 0x34, 0x55, 0x1e, 0x88, 0x8f, 0xd0, 0x5a, 0x02, 0x0c, 0xe2, 0x64, 0x98, 0x27, 0x0a }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_158_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x33, 0xa8, 0xb0, 0x8a, 0x3c, 0x33, 0xc3, 0x43, 0x03, 0x2c, 0xed, 0x1c, 0x0f, 0x5e, 0x82, 0x6f, 0x93, 0x2d, 0xee, 0x87, 0x9e, 0xc1, 0x60, 0x7a, 0x2a, 0xf5, 0xd4, 0x62, 0x98 }; static const uint8_t nist_kas_ecc_cdh_testvector_158_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x6c, 0x4f, 0x27, 0xa4, 0x9b, 0x51, 0xa8, 0x9f, 0x6d, 0x09, 0x60, 0x16, 0x0b, 0xa5, 0xb8, 0xfe, 0xc0, 0x8d, 0xd2, 0xcd, 0x4b, 0xc9, 0x09, 0xa4, 0x90, 0xae, 0xbe, 0x4f, 0x7b }; static const uint8_t nist_kas_ecc_cdh_testvector_158_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x42, 0xa8, 0x03, 0x2a, 0x11, 0xd1, 0x65, 0x77, 0x55, 0xc4, 0x9e, 0x47, 0x70, 0x33, 0xb0, 0xd3, 0x41, 0xda, 0x2f, 0xe9, 0x93, 0xa4, 0x57, 0x7b, 0x41, 0xa4, 0x0c, 0xee, 0x1a }; /* QIUTx = 000001f6629697da620d597fc1f51c83374213f37e952fc117ee65a9e766aefb */ /* QIUTy = 0000002b36dedc787ac951d2879d72414da2e7575a6cd7c42e0fa20b32d461f7 */ static const uint8_t nist_kas_ecc_cdh_testvector_158_out[] = { /* ZIUT */ 0x00, 0x38, 0x38, 0x1b, 0x34, 0x2e, 0xfa, 0xa7, 0x0b, 0xb7, 0x9a, 0xdb, 0x76, 0xce, 0xb7, 0x75, 0xde, 0x5f, 0x45, 0xf8, 0x63, 0x55, 0x9e, 0xca, 0xee, 0x1d, 0xdb, 0xbd, 0x03, 0x13 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_159_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xcf, 0xe1, 0x5f, 0x86, 0x1a, 0xa0, 0x15, 0x34, 0x85, 0xf3, 0x8a, 0xc0, 0x33, 0xdf, 0x9c, 0x8d, 0x81, 0x2a, 0xfd, 0xe1, 0x67, 0xb8, 0x91, 0x8b, 0xb9, 0x4a, 0x08, 0xd9, 0x63 }; static const uint8_t nist_kas_ecc_cdh_testvector_159_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0xbe, 0xbf, 0x06, 0x7f, 0x85, 0x12, 0x6d, 0x11, 0x49, 0x32, 0x16, 0x21, 0x64, 0x20, 0x1b, 0x13, 0x74, 0xbf, 0x18, 0x40, 0xaa, 0x11, 0xd5, 0xe2, 0x50, 0x63, 0x9d, 0x06, 0x08 }; static const uint8_t nist_kas_ecc_cdh_testvector_159_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x43, 0xe5, 0x77, 0x09, 0x78, 0x19, 0x5f, 0x91, 0x71, 0x52, 0xf0, 0x57, 0xba, 0x1f, 0xb0, 0x15, 0x6d, 0x89, 0x4d, 0x32, 0xe8, 0xbb, 0x54, 0xc7, 0xf6, 0x2f, 0x73, 0x40, 0xa6 }; /* QIUTx = 000001487d1fdabccd7d89da25685b042980ab170aee3c11f31180e3b7c50a4a */ /* QIUTy = 0000017e383dd65a1ec8a409007f75035e5b161335d9c7756ed970490fbd171a */ static const uint8_t nist_kas_ecc_cdh_testvector_159_out[] = { /* ZIUT */ 0x01, 0x22, 0x16, 0x9f, 0x1d, 0xff, 0x44, 0x5e, 0xc6, 0x63, 0x27, 0x03, 0x75, 0xdf, 0xe9, 0x14, 0x01, 0x6c, 0x38, 0xce, 0x6c, 0x2d, 0x40, 0xd0, 0xb8, 0x09, 0x8a, 0xbc, 0x60, 0xac }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_160_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x76, 0x3e, 0x28, 0x6b, 0xe5, 0x07, 0x40, 0xb7, 0xf8, 0xbd, 0x78, 0xfa, 0x70, 0xbc, 0xac, 0x88, 0x0d, 0xf3, 0xd7, 0x37, 0x1e, 0xb3, 0x3f, 0xda, 0x24, 0x53, 0xb3, 0xed, 0x23 }; static const uint8_t nist_kas_ecc_cdh_testvector_160_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x57, 0xbe, 0x6c, 0x5f, 0x7d, 0x99, 0x0b, 0x75, 0x43, 0x98, 0x68, 0x33, 0x9a, 0xe3, 0x27, 0xaf, 0x04, 0xa0, 0x49, 0xb3, 0x8b, 0x92, 0x33, 0x2b, 0x9c, 0xb8, 0xcb, 0x27, 0xd9 }; static const uint8_t nist_kas_ecc_cdh_testvector_160_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x4c, 0x67, 0xc6, 0x10, 0x3e, 0x62, 0x12, 0x46, 0x00, 0xa0, 0xd9, 0xe9, 0x23, 0xdc, 0x21, 0x7a, 0x02, 0x2f, 0x57, 0xc6, 0xfe, 0xb2, 0x19, 0xc7, 0x03, 0x33, 0x4f, 0xf3, 0x39 }; /* QIUTx = 0000002352fe9341e62c609fc1538e0270405e7001d747b87500e644a112c5d9 */ /* QIUTy = 00000041f3b15b714a6f7ef647e23665ea530efcbe19b0740436cda812e83939 */ static const uint8_t nist_kas_ecc_cdh_testvector_160_out[] = { /* ZIUT */ 0x00, 0x54, 0xd4, 0x7c, 0x9d, 0x0a, 0x9f, 0xee, 0x25, 0x81, 0x22, 0x32, 0x6b, 0xe2, 0x5d, 0xaf, 0x35, 0xf0, 0xba, 0x0b, 0x84, 0x49, 0xe1, 0x6b, 0x46, 0x23, 0xa8, 0xc0, 0xfd, 0x7e }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_161_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xbc, 0x8a, 0x71, 0xad, 0x4c, 0x11, 0x34, 0xde, 0xf0, 0x26, 0xe4, 0x72, 0x3e, 0x31, 0x02, 0x23, 0xfb, 0x2c, 0x58, 0x59, 0xbc, 0x75, 0x94, 0x05, 0x4c, 0x89, 0x4d, 0xa5, 0x52 }; static const uint8_t nist_kas_ecc_cdh_testvector_161_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xc3, 0x65, 0x05, 0x63, 0x50, 0x55, 0x35, 0x03, 0x3c, 0x7a, 0x6c, 0x44, 0x8d, 0x73, 0xbf, 0xa0, 0x8f, 0xb8, 0x37, 0x02, 0x34, 0xc7, 0xfd, 0xba, 0xc1, 0xb3, 0x4d, 0xaa, 0x22 }; static const uint8_t nist_kas_ecc_cdh_testvector_161_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x19, 0xe5, 0x4d, 0xa8, 0x72, 0x99, 0x5e, 0xb3, 0xdc, 0xdc, 0xcc, 0x50, 0x41, 0x8e, 0xc3, 0x51, 0x40, 0x08, 0x89, 0xfa, 0xe7, 0x5a, 0x0b, 0xa4, 0xdc, 0xff, 0x25, 0xf1, 0xf9 }; /* QIUTx = 0000015e67eaebe52ba37f5b73a199d950812cec1012fd410581444bbf23e0c8 */ /* QIUTy = 00000022055ef821df33042fb8316ddad76485dbd2590e2f5498a914e4f0ad39 */ static const uint8_t nist_kas_ecc_cdh_testvector_161_out[] = { /* ZIUT */ 0x00, 0x71, 0xae, 0xd3, 0x9f, 0x5c, 0x44, 0xa7, 0xff, 0x72, 0xdb, 0x3e, 0x0f, 0x82, 0x84, 0xda, 0x39, 0xdf, 0xb2, 0xd8, 0x94, 0xf2, 0x78, 0xd2, 0x00, 0x6f, 0x9d, 0x26, 0x86, 0xe3 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_162_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x6c, 0xc1, 0xae, 0x13, 0xfb, 0x34, 0x82, 0x52, 0x49, 0x30, 0x21, 0xcd, 0x61, 0x46, 0xd5, 0x31, 0xf0, 0xb7, 0x22, 0x84, 0x2a, 0x44, 0xc7, 0x97, 0x96, 0x89, 0xf1, 0xff, 0x38 }; static const uint8_t nist_kas_ecc_cdh_testvector_162_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x8c, 0x09, 0x63, 0xff, 0x0e, 0xa3, 0x70, 0x48, 0xc9, 0xf6, 0xf4, 0x76, 0x44, 0xf2, 0xa7, 0xc8, 0xc5, 0x03, 0x86, 0x3c, 0x27, 0xcf, 0x21, 0xee, 0x6e, 0x0a, 0x32, 0x24, 0xea }; static const uint8_t nist_kas_ecc_cdh_testvector_162_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x13, 0xa5, 0xff, 0xc9, 0xa0, 0xf7, 0x06, 0x9c, 0x1c, 0x66, 0x14, 0x86, 0x99, 0x61, 0x2e, 0x5c, 0xfa, 0xb7, 0xe2, 0xbf, 0x7b, 0x32, 0x55, 0xf1, 0x81, 0xa0, 0x22, 0x71, 0x92 }; /* QIUTx = 0000018de4dc4f6a4de5c3638ebba24dc7064983b159f55b139c7680a1cb90d1 */ /* QIUTy = 00000135532d8148af3e227d4a8960e768c565f72c1ac0a1c9a7bd185cf994d0 */ static const uint8_t nist_kas_ecc_cdh_testvector_162_out[] = { /* ZIUT */ 0x01, 0xca, 0x68, 0xea, 0xd4, 0xed, 0xdc, 0x88, 0x47, 0xa3, 0xa6, 0x61, 0xcc, 0x66, 0x28, 0xe0, 0x76, 0xbd, 0xd4, 0xb4, 0x50, 0x47, 0xec, 0xe7, 0x22, 0x45, 0xd0, 0x94, 0xdd, 0x3b }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_163_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xe4, 0x9e, 0x18, 0x2a, 0xc5, 0xd9, 0x32, 0xbe, 0x8b, 0x05, 0xfe, 0x34, 0x0e, 0x8c, 0xb7, 0x2d, 0xf3, 0x56, 0x47, 0xde, 0xcd, 0x67, 0x9a, 0x8c, 0x59, 0xb5, 0xd8, 0xfb, 0xfa }; static const uint8_t nist_kas_ecc_cdh_testvector_163_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x81, 0xb9, 0x5a, 0x96, 0x5a, 0xbd, 0x16, 0xec, 0x24, 0x30, 0xc2, 0x6d, 0xd0, 0x71, 0x98, 0x4e, 0x85, 0x4a, 0x96, 0x7f, 0xf1, 0x14, 0xee, 0x78, 0x31, 0xbd, 0x31, 0x4b, 0x2a }; static const uint8_t nist_kas_ecc_cdh_testvector_163_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x2f, 0x5d, 0x2a, 0x7e, 0x08, 0x77, 0xa4, 0xc9, 0x90, 0x73, 0x73, 0x23, 0x86, 0xe8, 0xd5, 0x97, 0x34, 0xa2, 0x3d, 0xd7, 0xf0, 0xdf, 0x7f, 0xcd, 0x54, 0xd9, 0x41, 0xe7, 0x60 }; /* QIUTx = 0000014798094680cbd32fb1ee9dcaa6b8739a556305235933fb27157d319e57 */ /* QIUTy = 000001c855f0d453c1ffb5f668b32a8b3e309e0e8101bc39b6dbe7de214015e3 */ static const uint8_t nist_kas_ecc_cdh_testvector_163_out[] = { /* ZIUT */ 0x01, 0x7a, 0x89, 0x3b, 0x2e, 0x09, 0x07, 0x80, 0xff, 0x8d, 0xaa, 0xf3, 0x58, 0x8f, 0x9d, 0xfc, 0x0a, 0xc4, 0xdf, 0xe1, 0xf1, 0xe2, 0x63, 0x69, 0x7a, 0x9d, 0x1f, 0x39, 0x8a, 0xb3 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_164_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x59, 0x8b, 0x2f, 0xdb, 0x5b, 0xf1, 0xa3, 0x95, 0x1f, 0xb9, 0xec, 0x01, 0x6e, 0xcb, 0x4d, 0x28, 0xf6, 0x6c, 0x2e, 0x9d, 0x13, 0x59, 0x67, 0x86, 0x59, 0x35, 0x85, 0xd7, 0x19 }; static const uint8_t nist_kas_ecc_cdh_testvector_164_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0xef, 0x65, 0xca, 0xf1, 0x57, 0x95, 0xd1, 0x4a, 0x0b, 0xe8, 0x9c, 0xac, 0x7c, 0x68, 0x03, 0x23, 0xbc, 0x59, 0x80, 0x3b, 0xa8, 0x74, 0xcb, 0x29, 0x68, 0x67, 0x2c, 0xb8, 0xa9 }; static const uint8_t nist_kas_ecc_cdh_testvector_164_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x65, 0x2a, 0x11, 0xf6, 0xc3, 0x11, 0x7f, 0x13, 0x26, 0xfa, 0x68, 0x77, 0x40, 0x5c, 0xec, 0x73, 0x31, 0xc4, 0xf1, 0x46, 0xa9, 0x7f, 0x74, 0xab, 0x0c, 0x44, 0xde, 0x01, 0xb7 }; /* QIUTx = 0000002cd6d4c1d2cc5e34205eadb94f4cfd35bb569da722c4d9b19b8d5cc2de */ /* QIUTy = 000000ea3004e5b0930df7f8bda314c8bc1145463eb60022cd2dcf6c0c824e50 */ static const uint8_t nist_kas_ecc_cdh_testvector_164_out[] = { /* ZIUT */ 0x00, 0x41, 0xfa, 0x5f, 0xdf, 0x49, 0x5b, 0x88, 0x56, 0x99, 0x24, 0x9b, 0x77, 0x46, 0x33, 0x4b, 0x76, 0xc5, 0x9e, 0x1c, 0x91, 0x7b, 0xfc, 0x1a, 0xe3, 0x71, 0xb9, 0x69, 0x41, 0xf4 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_165_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0xb6, 0xcf, 0xf3, 0xb7, 0xfa, 0x21, 0x5e, 0x37, 0x86, 0x05, 0xc9, 0x3f, 0x86, 0xf5, 0xcd, 0x38, 0x45, 0xf4, 0x5f, 0xbd, 0xe8, 0xbe, 0x07, 0x9d, 0xec, 0x29, 0xbc, 0x88, 0x62 }; static const uint8_t nist_kas_ecc_cdh_testvector_165_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x66, 0x22, 0x2e, 0xfa, 0x5d, 0xba, 0x9e, 0x85, 0x8c, 0x24, 0x5d, 0xbb, 0x5d, 0xa6, 0x68, 0x23, 0x9a, 0xb5, 0xba, 0x72, 0x86, 0x18, 0xfb, 0x85, 0xa9, 0x0d, 0xdc, 0x76, 0x0a }; static const uint8_t nist_kas_ecc_cdh_testvector_165_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x2a, 0xd5, 0xf7, 0x1c, 0x63, 0x84, 0xaf, 0x62, 0x68, 0x9b, 0x35, 0xc2, 0x4c, 0x4d, 0xdf, 0xb3, 0x5a, 0xcf, 0x81, 0x06, 0xcb, 0x0c, 0x19, 0x50, 0x2c, 0x2c, 0xa1, 0x84, 0xaf }; /* QIUTx = 000000fe1b52408a712841bd62f0ee51307f26331d402bcc3a5ab0405d1c5e80 */ /* QIUTy = 0000010a731a7d6a6a4f5b40b2eaa810c1902db27b28d297bc05f3714cacafc0 */ static const uint8_t nist_kas_ecc_cdh_testvector_165_out[] = { /* ZIUT */ 0x01, 0x5f, 0x5a, 0xdb, 0xa5, 0x9d, 0x1e, 0xe0, 0x16, 0x96, 0xce, 0xcc, 0xe4, 0xb6, 0x3e, 0x78, 0xe6, 0x85, 0x08, 0x30, 0x3e, 0xe4, 0x96, 0xff, 0x5a, 0xbc, 0xea, 0x25, 0xad, 0x3b }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_166_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xcf, 0x40, 0x2a, 0xeb, 0xc3, 0xe4, 0x24, 0x7a, 0x9a, 0xb4, 0x3d, 0xa9, 0x75, 0x51, 0x76, 0xa8, 0x10, 0xe0, 0x11, 0xf9, 0xfd, 0x97, 0x7d, 0xe1, 0xbe, 0x2f, 0xd5, 0x34, 0xfb }; static const uint8_t nist_kas_ecc_cdh_testvector_166_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0xba, 0xc4, 0x5f, 0xa4, 0x2d, 0x60, 0x5a, 0xd3, 0x47, 0x9c, 0x7c, 0x43, 0xe7, 0x24, 0x91, 0x07, 0x16, 0x73, 0x79, 0x53, 0xcc, 0x85, 0x04, 0xaf, 0x14, 0xf3, 0x31, 0xd3, 0x4f }; static const uint8_t nist_kas_ecc_cdh_testvector_166_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x6f, 0x01, 0xcb, 0x54, 0x78, 0x1c, 0xbd, 0xa6, 0xd8, 0x8d, 0xeb, 0x59, 0x84, 0x3a, 0xe0, 0x83, 0x6b, 0x1a, 0xf6, 0x83, 0xef, 0xc7, 0x56, 0x50, 0xbe, 0x84, 0xf2, 0x08, 0xa7 }; /* QIUTx = 0000004d00a8f0820da9097fe50e8e7defdac29607dd4cb1dd881d4e61f1e78b */ /* QIUTy = 0000008a4a8e9c811b444367952752ab8c2a5198efb28fbedbf3fbd701a857a9 */ static const uint8_t nist_kas_ecc_cdh_testvector_166_out[] = { /* ZIUT */ 0x00, 0x3d, 0x5c, 0x29, 0xb3, 0x75, 0x3e, 0x89, 0xce, 0x50, 0x64, 0x57, 0x53, 0x93, 0x39, 0x2b, 0x37, 0x7c, 0xa6, 0x57, 0xa0, 0xb7, 0x38, 0x72, 0xc8, 0x21, 0x65, 0xfc, 0x43, 0xae }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_167_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xf3, 0x8c, 0xcc, 0xcf, 0x08, 0xe5, 0xbd, 0xff, 0x3b, 0xb3, 0x5f, 0x7e, 0x75, 0xbd, 0xce, 0xd6, 0x8d, 0x37, 0x91, 0xdc, 0xf7, 0x84, 0x3c, 0xa8, 0x8f, 0xf0, 0x92, 0x13, 0x6d }; static const uint8_t nist_kas_ecc_cdh_testvector_167_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x5e, 0xd7, 0x69, 0x7a, 0x4b, 0x8c, 0x99, 0xd0, 0x14, 0x78, 0x28, 0xf6, 0xc8, 0x61, 0xff, 0xc9, 0xcf, 0xb0, 0xf3, 0x3d, 0xce, 0x9d, 0x14, 0xb0, 0x73, 0x1e, 0x1d, 0xa2, 0x62 }; static const uint8_t nist_kas_ecc_cdh_testvector_167_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x5d, 0xc1, 0xba, 0x18, 0x39, 0xf5, 0xd1, 0xfe, 0xa8, 0x5a, 0xb3, 0x61, 0x4c, 0x55, 0xa9, 0xc5, 0xfe, 0x60, 0x08, 0x53, 0xc7, 0x1a, 0x61, 0x98, 0x3c, 0x7d, 0xc8, 0x2d, 0xe2 }; /* QIUTx = 000000b6cb6ffa4e2eabcf7b987ebb520165a8ec9a22a6f9ffb100f38172a0fb */ /* QIUTy = 000000d39814e1852476e56e89ce8cdd64372840c01570a86940ace24bb9cf6a */ static const uint8_t nist_kas_ecc_cdh_testvector_167_out[] = { /* ZIUT */ 0x00, 0x7c, 0x01, 0xf9, 0x06, 0xca, 0xa5, 0x90, 0x89, 0x8a, 0x09, 0xf4, 0x6b, 0x6f, 0x53, 0x83, 0x65, 0x8e, 0x7f, 0xee, 0x65, 0x6a, 0xca, 0x0f, 0x11, 0x1f, 0x22, 0x93, 0x99, 0x60 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_168_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0xe3, 0x28, 0x57, 0x1d, 0xf9, 0x33, 0xac, 0xfd, 0x4c, 0x96, 0xf3, 0xc4, 0xbd, 0xe7, 0x1e, 0x91, 0x75, 0xcb, 0xcd, 0x62, 0xae, 0xec, 0xd7, 0x63, 0x84, 0x74, 0x4a, 0x0f, 0x3f }; static const uint8_t nist_kas_ecc_cdh_testvector_168_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x9f, 0xf4, 0x8a, 0xae, 0x0c, 0x25, 0x2e, 0xda, 0x8d, 0x34, 0x0b, 0x25, 0xc4, 0xdd, 0xa0, 0x1a, 0x2f, 0x21, 0xaa, 0xa3, 0x5d, 0x39, 0xba, 0xf0, 0x36, 0x69, 0x6a, 0x11, 0x01 }; static const uint8_t nist_kas_ecc_cdh_testvector_168_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x24, 0x1e, 0x1d, 0xf5, 0x58, 0x70, 0x31, 0xdd, 0xda, 0xe1, 0x96, 0x89, 0x1c, 0x28, 0x82, 0x1c, 0xc7, 0x87, 0x9a, 0xd3, 0x58, 0x32, 0xae, 0x71, 0x8f, 0x6e, 0x79, 0x2e, 0x66 }; /* QIUTx = 000001c172cee2b76503eb4d90b39ddace825b23c32375cb68eaecd7348490a3 */ /* QIUTy = 000000c246ef9c6e2fadac77c73ee9dd5adee828b7918417395b5997be1a0278 */ static const uint8_t nist_kas_ecc_cdh_testvector_168_out[] = { /* ZIUT */ 0x01, 0x9e, 0xec, 0xe7, 0xd3, 0xfa, 0xfc, 0x92, 0x74, 0xd3, 0x61, 0xc6, 0xfa, 0xfd, 0x9e, 0xfd, 0x9e, 0xe4, 0x85, 0xcb, 0xac, 0xb3, 0xba, 0xaf, 0x68, 0x34, 0xfe, 0xb4, 0xdf, 0x6a }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_169_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xf4, 0xaa, 0x7f, 0x93, 0x40, 0xa9, 0xda, 0x46, 0xc4, 0xf0, 0x67, 0x28, 0x75, 0x3a, 0x4a, 0xdc, 0x5a, 0xf5, 0x3a, 0x4d, 0xcb, 0x46, 0x7f, 0x70, 0xb4, 0x87, 0x3d, 0xa7, 0x85 }; static const uint8_t nist_kas_ecc_cdh_testvector_169_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x7f, 0x32, 0x1e, 0x2b, 0xc4, 0xe2, 0x9a, 0x68, 0xac, 0x23, 0xc7, 0x7c, 0xed, 0xd3, 0xbb, 0xcd, 0xe0, 0xbf, 0x7b, 0x92, 0xa2, 0x7f, 0xfa, 0x76, 0x49, 0x69, 0x88, 0x98, 0x1d }; static const uint8_t nist_kas_ecc_cdh_testvector_169_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x04, 0x4a, 0xc5, 0x5a, 0x91, 0x3a, 0x8c, 0x7f, 0x7e, 0xd7, 0xfc, 0x56, 0x79, 0xf5, 0x2f, 0x47, 0xcb, 0xb9, 0x73, 0x03, 0x25, 0xbe, 0x21, 0xb7, 0x99, 0x37, 0x79, 0xd1, 0x87 }; /* QIUTx = 0000009794861017b3debeff302e425327fe269d78753b73bc1bfb3a77f716dc */ /* QIUTy = 00000002581a49c1269f5ec868dc6d7f5c2d8e749632d47ab6d9e68dbad985f0 */ static const uint8_t nist_kas_ecc_cdh_testvector_169_out[] = { /* ZIUT */ 0x01, 0xe4, 0xb7, 0xe8, 0x9f, 0xb1, 0xb5, 0x11, 0x79, 0xb8, 0x79, 0x2f, 0x5c, 0xd5, 0x81, 0xc3, 0x91, 0x7e, 0x11, 0x24, 0x6d, 0x38, 0x46, 0xf6, 0x34, 0x4e, 0xe8, 0x2e, 0xed, 0x66 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_170_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x68, 0xd9, 0xe5, 0x5e, 0x7a, 0x10, 0x5b, 0x7b, 0xb4, 0x4b, 0x21, 0xd6, 0x69, 0xbb, 0x0e, 0xf6, 0x57, 0xa9, 0x14, 0x37, 0xad, 0x84, 0xbf, 0x6d, 0x58, 0x53, 0x27, 0x0c, 0x98 }; static const uint8_t nist_kas_ecc_cdh_testvector_170_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x14, 0x3c, 0x8b, 0xed, 0xb5, 0x4d, 0xb0, 0x7d, 0xf8, 0xf6, 0x70, 0x83, 0xc5, 0x9a, 0x0a, 0xa7, 0xcd, 0x8a, 0x0e, 0xfa, 0x42, 0xf4, 0x2f, 0xd6, 0x2e, 0x44, 0x2e, 0x0b, 0x62 }; static const uint8_t nist_kas_ecc_cdh_testvector_170_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x2b, 0xc1, 0x36, 0x77, 0x85, 0x31, 0x08, 0x9d, 0xa5, 0xc2, 0xfa, 0xb3, 0xca, 0xee, 0xc2, 0x56, 0xc5, 0x4b, 0x0b, 0x35, 0xfc, 0x2c, 0x65, 0xf7, 0xb8, 0xee, 0x61, 0x61, 0xc3 }; /* QIUTx = 000001fb258a31d166bef9cd664cd7b66cd8c186e7025c77f0bae731587e9ef6 */ /* QIUTy = 00000060dfd4e475e92805d1935d0382dc1767067915cc00ed3b24f65382d21a */ static const uint8_t nist_kas_ecc_cdh_testvector_170_out[] = { /* ZIUT */ 0x01, 0x45, 0x71, 0x0c, 0x3a, 0xb0, 0x78, 0x0e, 0xc2, 0x33, 0x42, 0x4d, 0x4e, 0x28, 0xb3, 0x8d, 0x29, 0xf8, 0x86, 0x96, 0x5b, 0xbc, 0xac, 0x49, 0xfa, 0x30, 0x0e, 0x1e, 0xd8, 0x86 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_171_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x99, 0xeb, 0x91, 0xcd, 0xa9, 0x86, 0x20, 0x10, 0x3c, 0x32, 0x05, 0xd6, 0x48, 0x9e, 0x68, 0xad, 0x7e, 0x57, 0xd0, 0xa5, 0x1d, 0xc5, 0x02, 0xd6, 0xe3, 0x05, 0x88, 0xf4, 0x18 }; static const uint8_t nist_kas_ecc_cdh_testvector_171_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x3f, 0xbf, 0x82, 0x99, 0x29, 0xed, 0xd2, 0x8e, 0x90, 0x6f, 0x58, 0xf8, 0x7a, 0xbe, 0xd6, 0xd6, 0xd1, 0x77, 0xf4, 0x36, 0xf0, 0xdd, 0x94, 0x0d, 0xda, 0x25, 0xea, 0xf1, 0x88 }; static const uint8_t nist_kas_ecc_cdh_testvector_171_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x0d, 0x56, 0x59, 0x54, 0x71, 0x43, 0x5d, 0x95, 0xfe, 0xc3, 0x7d, 0xf6, 0x22, 0xf1, 0x8e, 0xe7, 0xda, 0xbb, 0x24, 0x37, 0x9c, 0x82, 0xbb, 0xf7, 0x14, 0xc5, 0xab, 0xc5, 0xe3 }; /* QIUTx = 000001a52940a452aaf420b37b5f32c2c337306894a882feea7addadc01927ee */ /* QIUTy = 000000771b9f62a2a6fa892503225275490388b8bfc2df77df3e806bedba7d88 */ static const uint8_t nist_kas_ecc_cdh_testvector_171_out[] = { /* ZIUT */ 0x00, 0x69, 0x41, 0xa2, 0xa5, 0x31, 0x08, 0x35, 0x63, 0xdd, 0x88, 0x6b, 0x06, 0xc0, 0x86, 0x07, 0x70, 0xa4, 0x72, 0x4b, 0xb0, 0x4a, 0x4e, 0xbb, 0x2a, 0xfb, 0x1b, 0xa2, 0x63, 0x6b }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_172_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xdc, 0xca, 0xa2, 0x2b, 0x43, 0x39, 0x1d, 0xc0, 0x52, 0x59, 0x7a, 0xe3, 0xbd, 0x07, 0xc6, 0xe5, 0xf0, 0x21, 0xf3, 0x9e, 0x98, 0x77, 0x56, 0xf6, 0x54, 0x81, 0x71, 0xee, 0x94 }; static const uint8_t nist_kas_ecc_cdh_testvector_172_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x28, 0xef, 0xd4, 0x9a, 0xf3, 0xa6, 0xb3, 0x2d, 0xc1, 0x67, 0x97, 0xa9, 0x78, 0xf0, 0xad, 0x4a, 0xb0, 0xdb, 0x66, 0xab, 0xab, 0xd6, 0xad, 0x56, 0x72, 0xf4, 0xf8, 0x12, 0xc9 }; static const uint8_t nist_kas_ecc_cdh_testvector_172_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x19, 0xc8, 0xab, 0x2b, 0x32, 0xf2, 0xee, 0x93, 0xbf, 0x2f, 0xf6, 0xbc, 0x44, 0x37, 0x8b, 0x60, 0x87, 0x2b, 0xda, 0xeb, 0x6b, 0xa5, 0x6b, 0x51, 0x4c, 0x8f, 0x38, 0x8b, 0xa7 }; /* QIUTx = 00000083530fa3df315a8740ac52f4d394b80c4a5f210baba0b6dc2205e12493 */ /* QIUTy = 00000037b9d02ed43e9d41d0dbb8403b9021b4d2c1bd360ee53c31c27b492005 */ static const uint8_t nist_kas_ecc_cdh_testvector_172_out[] = { /* ZIUT */ 0x00, 0x1d, 0x75, 0x4e, 0xe5, 0x35, 0x1d, 0x45, 0x82, 0x97, 0x47, 0x34, 0x07, 0x2a, 0xba, 0xc2, 0x33, 0x76, 0xe2, 0x43, 0x48, 0x37, 0x09, 0x34, 0xe7, 0xb8, 0x64, 0xdb, 0x0f, 0x52 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_173_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x70, 0x91, 0x7b, 0x33, 0xb3, 0x7b, 0x8e, 0xaf, 0xf2, 0x46, 0x1e, 0x5f, 0x9e, 0xb8, 0xf0, 0x79, 0x7b, 0x13, 0xaa, 0xbd, 0x91, 0x5a, 0x60, 0x70, 0x6c, 0xd4, 0xf3, 0x2c, 0xb6 }; static const uint8_t nist_kas_ecc_cdh_testvector_173_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x76, 0x51, 0xe0, 0x74, 0x2c, 0x0d, 0x83, 0xd4, 0xb6, 0x85, 0x52, 0xe9, 0xb7, 0xab, 0xec, 0x36, 0x44, 0xba, 0x97, 0x55, 0xcf, 0xfe, 0x6d, 0x4e, 0x56, 0x94, 0x3a, 0x6b, 0x9b }; static const uint8_t nist_kas_ecc_cdh_testvector_173_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x50, 0x31, 0x60, 0x10, 0x4d, 0x88, 0xa0, 0xc0, 0xf6, 0x39, 0x56, 0xe7, 0xc3, 0xbb, 0xa7, 0x02, 0x96, 0x3f, 0x9f, 0x1b, 0x53, 0xfc, 0x11, 0x9a, 0x59, 0x2e, 0xee, 0xa4, 0xf5 }; /* QIUTx = 000001463c78e498abf34033ec3e1d973dc12509e2d234fb91403715e42f61f7 */ /* QIUTy = 000000ade7abb98a0308886696353aad33c05bab5cf3c0d4e969cbf4c4ceec93 */ static const uint8_t nist_kas_ecc_cdh_testvector_173_out[] = { /* ZIUT */ 0x01, 0x13, 0x46, 0xb8, 0x37, 0x91, 0xe4, 0xbe, 0xa7, 0xf6, 0xba, 0x6b, 0x12, 0x65, 0xe5, 0x05, 0x08, 0x95, 0xd8, 0x40, 0x27, 0xc1, 0x06, 0xf7, 0x73, 0x53, 0x41, 0x8f, 0x75, 0xd7 }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_174_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xd8, 0xed, 0x31, 0x83, 0x82, 0xb8, 0x5c, 0x25, 0x25, 0xa0, 0x2c, 0x22, 0xc6, 0x7f, 0x5b, 0xf3, 0x66, 0x33, 0x5d, 0x94, 0x76, 0x7e, 0xb5, 0xcb, 0x45, 0x73, 0x96, 0x64, 0xc5 }; static const uint8_t nist_kas_ecc_cdh_testvector_174_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x7d, 0x8f, 0xde, 0x7b, 0xbc, 0x56, 0x8f, 0xdc, 0x80, 0x2a, 0x3e, 0x34, 0x55, 0xf3, 0xcf, 0x35, 0x60, 0x2d, 0xf7, 0x06, 0x84, 0xc8, 0xac, 0xdd, 0xa1, 0x65, 0xa0, 0x26, 0x56 }; static const uint8_t nist_kas_ecc_cdh_testvector_174_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x45, 0x47, 0xea, 0xf9, 0xbe, 0x1c, 0xe5, 0xaf, 0x13, 0x86, 0xe3, 0x11, 0x04, 0x6e, 0xc8, 0x32, 0x60, 0xb8, 0x4a, 0x2c, 0xa9, 0x10, 0x55, 0xf6, 0x06, 0x68, 0xb9, 0x46, 0xe0 }; /* QIUTx = 000001504938c167680afb8b6d5858cfaa191c40196fc4e500c662c5346ecc90 */ /* QIUTy = 00000137d1ba942228dae68c450b1a033a2c810a995971f01c24089e4a6fdcc5 */ static const uint8_t nist_kas_ecc_cdh_testvector_174_out[] = { /* ZIUT */ 0x00, 0xb4, 0x93, 0x8e, 0xd1, 0xed, 0x01, 0x2a, 0x9a, 0x53, 0x89, 0x2e, 0xd9, 0x94, 0x93, 0x97, 0xcd, 0xc4, 0xe4, 0xa6, 0x12, 0xd5, 0x4d, 0xcf, 0x80, 0xcd, 0xb0, 0x39, 0xf4, 0x7b }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_175_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x7f, 0x87, 0xf1, 0x3f, 0x6d, 0xfe, 0xe6, 0x08, 0x1b, 0xb5, 0xcc, 0xa5, 0x32, 0xfe, 0x26, 0x8c, 0x27, 0x1d, 0x27, 0x56, 0xb3, 0x1b, 0xdf, 0x64, 0x32, 0x97, 0xcf, 0x69, 0x5b }; static const uint8_t nist_kas_ecc_cdh_testvector_175_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xf3, 0xa7, 0x46, 0x95, 0x5e, 0x12, 0xdd, 0x0b, 0x71, 0x91, 0x9e, 0xdb, 0xf2, 0x3b, 0x23, 0x22, 0xca, 0xb3, 0x28, 0xdd, 0x09, 0xbd, 0xf8, 0x7b, 0xca, 0xfd, 0xcd, 0x28, 0x84 }; static const uint8_t nist_kas_ecc_cdh_testvector_175_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x42, 0xfb, 0xe5, 0x54, 0x86, 0x2f, 0x35, 0x95, 0x18, 0x4a, 0x45, 0x51, 0x0c, 0xa5, 0x3d, 0xf9, 0x7c, 0x45, 0x17, 0x55, 0x84, 0xb5, 0xd2, 0xde, 0x04, 0x27, 0x23, 0x35, 0x8e }; /* QIUTx = 00000131b8d61b9cfb0536c588214e45888ebe48391eeecb4d7fb5be8eff4acf */ /* QIUTy = 00000165da49557a0aa9d45dd378d5f899272cc697682276ae91d2c0b675c469 */ static const uint8_t nist_kas_ecc_cdh_testvector_175_out[] = { /* ZIUT */ 0x01, 0xb3, 0xd2, 0x57, 0x8b, 0xde, 0x30, 0x66, 0xa2, 0x53, 0xdb, 0x53, 0x22, 0xc8, 0x5c, 0xf9, 0x48, 0x7c, 0xe7, 0x7b, 0x67, 0xec, 0xe9, 0x55, 0xe2, 0x81, 0xb0, 0xd7, 0xd0, 0xe7 }; /* [K-283] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_176_public_x[] = { /* QCAVSx */ 0x03, 0xf0, 0x75, 0xc2, 0x4c, 0x35, 0xa9, 0xdc, 0x99, 0x52, 0xbe, 0x6f, 0xd3, 0x2b, 0x76, 0x1d, 0xce, 0x63, 0xf4, 0x72, 0x0a, 0x22, 0x40, 0x8e, 0x3a, 0x14, 0xbb, 0xd0, 0x97, 0xe0, 0x12, 0xb5, 0x69, 0x4c, 0x22, 0xa0 }; static const uint8_t nist_kas_ecc_cdh_testvector_176_public_y[] = { /* QCAVSy */ 0x06, 0x75, 0x82, 0x5b, 0x40, 0x20, 0x2e, 0x95, 0xbe, 0x7d, 0xab, 0x5a, 0x82, 0x61, 0x47, 0xe0, 0x4b, 0x8c, 0x51, 0xa0, 0x9b, 0x00, 0x34, 0x57, 0x7c, 0x1f, 0x31, 0xf8, 0xc1, 0x6a, 0x70, 0xc8, 0xe1, 0xc8, 0x5b, 0x89 }; static const uint8_t nist_kas_ecc_cdh_testvector_176_private[] = { /* dIUT */ 0x01, 0x5f, 0xde, 0x49, 0xb8, 0x02, 0x54, 0x2a, 0x52, 0xc7, 0x0b, 0x23, 0xa0, 0xb1, 0x78, 0x4e, 0x5f, 0x87, 0x80, 0xb5, 0x68, 0x53, 0xf9, 0xa5, 0xf8, 0xc3, 0xa5, 0x26, 0x6e, 0x87, 0x27, 0xdc, 0xe9, 0x7d, 0x4a, 0x17 }; /* QIUTx = 0611edc045dbe43ecc4ef6b324cd51f70fe3d7ddf877ec68b798909c3c4561756aa30e5f */ /* QIUTy = 00833b25511704af09b62d9f7cbac59814e75bbb9c735f55538491dbfa60c1e0115efe42 */ static const uint8_t nist_kas_ecc_cdh_testvector_176_out[] = { /* ZIUT */ 0x07, 0x45, 0x55, 0x28, 0x17, 0xb5, 0xd7, 0x29, 0x31, 0x0b, 0x7d, 0xbe, 0xba, 0xe6, 0x87, 0x64, 0x87, 0x14, 0xa9, 0xae, 0x69, 0x5d, 0xad, 0x20, 0xca, 0x1a, 0xb6, 0x11, 0x1c, 0x3d, 0x05, 0x46, 0x70, 0xf2, 0x11, 0x32 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_177_public_x[] = { /* QCAVSx */ 0x07, 0x99, 0xb4, 0x30, 0xe9, 0x23, 0x20, 0xff, 0xea, 0xbf, 0x2d, 0x6c, 0xc8, 0x73, 0x99, 0xe3, 0x0c, 0x0a, 0xa8, 0x44, 0x20, 0xff, 0x8e, 0xba, 0x23, 0x09, 0xb9, 0x94, 0x87, 0xb7, 0x42, 0xd7, 0x22, 0xe8, 0xb7, 0xa5 }; static const uint8_t nist_kas_ecc_cdh_testvector_177_public_y[] = { /* QCAVSy */ 0x02, 0x17, 0x36, 0x28, 0x01, 0xfd, 0x6d, 0x2d, 0x28, 0x6e, 0x5c, 0xdf, 0x37, 0x5c, 0xd0, 0xae, 0x56, 0x9b, 0x70, 0x00, 0x05, 0x31, 0x2e, 0x37, 0xe8, 0xe3, 0x5b, 0x15, 0x92, 0xef, 0xb9, 0xb5, 0xea, 0xf4, 0x7b, 0x3a }; static const uint8_t nist_kas_ecc_cdh_testvector_177_private[] = { /* dIUT */ 0x01, 0x3b, 0x91, 0x1f, 0x62, 0xf3, 0xaa, 0x88, 0x43, 0x54, 0x63, 0x45, 0x47, 0xee, 0x62, 0x28, 0x07, 0xd5, 0xd1, 0x06, 0x02, 0x03, 0x30, 0xae, 0x2b, 0x97, 0x98, 0xc0, 0xc4, 0xcd, 0x0e, 0xad, 0xb1, 0x0b, 0xa9, 0x48 }; /* QIUTx = 078d2ecd4d902332b6b3c7bd4ba7d200fc34c45eda30998b6025ed47b1f4f8e68f328624 */ /* QIUTy = 04d5e53647dddf2fccc8816dac8bc70c29807622cc95539a72aa3a9b230ca1d25ee7b516 */ static const uint8_t nist_kas_ecc_cdh_testvector_177_out[] = { /* ZIUT */ 0x02, 0xeb, 0x0c, 0x1c, 0xeb, 0x61, 0x79, 0x23, 0x2e, 0x91, 0xcf, 0xf9, 0x1f, 0xc8, 0xa3, 0x05, 0x53, 0xc6, 0xed, 0x7e, 0x0a, 0x71, 0xde, 0xb1, 0xbd, 0xa0, 0xa1, 0x07, 0x35, 0xa8, 0x45, 0x93, 0xdd, 0x90, 0x36, 0x36 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_178_public_x[] = { /* QCAVSx */ 0x00, 0xce, 0x47, 0xa7, 0x43, 0xd4, 0x8b, 0x86, 0xfe, 0xfd, 0x6b, 0x5c, 0x02, 0xf2, 0xa9, 0x7b, 0x27, 0x62, 0xa2, 0xfe, 0x57, 0xe0, 0xbd, 0xf8, 0x5c, 0x1d, 0x6a, 0x29, 0xde, 0x88, 0x62, 0xc4, 0xc9, 0x9e, 0xd5, 0x3a }; static const uint8_t nist_kas_ecc_cdh_testvector_178_public_y[] = { /* QCAVSy */ 0x03, 0x22, 0xe5, 0x96, 0x06, 0x9f, 0x91, 0x65, 0x68, 0xca, 0x24, 0x8c, 0xed, 0x57, 0xef, 0xe9, 0x05, 0x34, 0xaf, 0x4a, 0x9f, 0x90, 0xa4, 0xf4, 0x0f, 0x79, 0x7e, 0x45, 0x29, 0x67, 0x03, 0x17, 0x26, 0xbf, 0x41, 0xd7 }; static const uint8_t nist_kas_ecc_cdh_testvector_178_private[] = { /* dIUT */ 0x01, 0x77, 0x63, 0x2b, 0x69, 0xe7, 0xed, 0xda, 0x3c, 0xf0, 0x07, 0x30, 0x75, 0x04, 0x34, 0x3c, 0xc2, 0x16, 0x23, 0x26, 0xf6, 0x20, 0x17, 0xcb, 0xdd, 0xf3, 0x60, 0xa8, 0x76, 0xdc, 0x93, 0xb8, 0x1f, 0x04, 0xc5, 0x8e }; /* QIUTx = 03815ab6480e4ad24a6628275ef2ee0ce7d58699239dbce23338842bc58c42cca94d2412 */ /* QIUTy = 02de833cc664cac90d30fbeac603efbbce9276d4f16ab1c46e7e11c81a9aa9e25c82969a */ static const uint8_t nist_kas_ecc_cdh_testvector_178_out[] = { /* ZIUT */ 0x04, 0xa9, 0xdd, 0x2c, 0xf5, 0x07, 0x68, 0x14, 0xe5, 0x32, 0x9c, 0x51, 0x8c, 0x4f, 0x27, 0xb4, 0x29, 0xdb, 0xe0, 0x1d, 0x46, 0x68, 0x2d, 0x47, 0x6e, 0x7e, 0x78, 0x88, 0x0d, 0xe3, 0x68, 0xb0, 0x64, 0x23, 0x6b, 0xa9 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_179_public_x[] = { /* QCAVSx */ 0x07, 0x28, 0x97, 0x58, 0x39, 0xb4, 0x2c, 0x62, 0x03, 0x6a, 0x7a, 0xff, 0xfa, 0xdd, 0xef, 0xc3, 0x02, 0x4b, 0x72, 0x58, 0x40, 0x7b, 0xed, 0x56, 0x5c, 0xae, 0xa9, 0x39, 0xbe, 0x33, 0xd1, 0x6a, 0xc9, 0x44, 0x45, 0xc7 }; static const uint8_t nist_kas_ecc_cdh_testvector_179_public_y[] = { /* QCAVSy */ 0x07, 0x71, 0x26, 0x30, 0x79, 0x0b, 0x05, 0xae, 0x04, 0xd8, 0xd7, 0xd9, 0xf2, 0x36, 0x5d, 0xae, 0x9a, 0xd2, 0x4c, 0x4c, 0x61, 0xb3, 0xeb, 0x20, 0xc0, 0xa7, 0x98, 0x7e, 0x6a, 0x4c, 0x4b, 0x0f, 0x59, 0x8c, 0x37, 0x1f }; static const uint8_t nist_kas_ecc_cdh_testvector_179_private[] = { /* dIUT */ 0x00, 0x3b, 0xfe, 0x9a, 0x1c, 0x98, 0x53, 0x86, 0xe5, 0xba, 0x2b, 0x31, 0x55, 0x3a, 0x55, 0x15, 0x1e, 0x78, 0xdd, 0xc3, 0x8f, 0x07, 0x43, 0x2b, 0x5c, 0x42, 0xa1, 0xcd, 0x2d, 0xa2, 0x78, 0xfd, 0x0b, 0x68, 0xe0, 0x47 }; /* QIUTx = 01d9c3337da95ec6e5a4bff1cc92783989b66c9230107870d4a578699338e38eb2d92eff */ /* QIUTy = 00cdaad7d0eb0f445aa763a5dfb8f38f55355777ce24f753b5ad3d3cbab125f491698d56 */ static const uint8_t nist_kas_ecc_cdh_testvector_179_out[] = { /* ZIUT */ 0x04, 0x4e, 0x2c, 0xd2, 0xbc, 0x16, 0x4d, 0x21, 0xcf, 0x4b, 0x98, 0x33, 0xc0, 0xaa, 0x62, 0xed, 0x05, 0x92, 0x82, 0xe6, 0x2b, 0x82, 0xf4, 0x50, 0x0a, 0xeb, 0x42, 0x2d, 0x17, 0xe1, 0xf6, 0xe7, 0xe8, 0xbb, 0xd5, 0x00 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_180_public_x[] = { /* QCAVSx */ 0x05, 0x56, 0x72, 0xd7, 0x39, 0x98, 0x45, 0x10, 0x89, 0xe2, 0xb7, 0xc7, 0x10, 0x4b, 0x42, 0x24, 0x7d, 0xdd, 0xd1, 0x32, 0xd4, 0x0a, 0xd0, 0x87, 0xb5, 0x88, 0xd6, 0xa3, 0x85, 0xda, 0x64, 0xf5, 0xa2, 0xf4, 0x68, 0x38 }; static const uint8_t nist_kas_ecc_cdh_testvector_180_public_y[] = { /* QCAVSy */ 0x02, 0xb4, 0xcb, 0x15, 0x81, 0xf9, 0xe2, 0xb3, 0x78, 0xeb, 0x7a, 0x4f, 0x64, 0xf5, 0xa7, 0xd4, 0x32, 0x0b, 0x2c, 0xa3, 0xd3, 0x47, 0x47, 0x26, 0xf6, 0x70, 0xc3, 0x88, 0x3b, 0xb8, 0xda, 0x47, 0xf3, 0xd7, 0x45, 0xbe }; static const uint8_t nist_kas_ecc_cdh_testvector_180_private[] = { /* dIUT */ 0x00, 0xd9, 0x5a, 0xf5, 0x2a, 0x70, 0x8e, 0x69, 0x2d, 0x02, 0x67, 0x7b, 0x21, 0x03, 0x2f, 0x7a, 0xea, 0xd6, 0x00, 0x3f, 0x12, 0x4e, 0x72, 0x01, 0x3f, 0x37, 0xc0, 0x6e, 0x0b, 0xbc, 0x20, 0xe3, 0x53, 0x2b, 0x3c, 0xea }; /* QIUTx = 06e487f91e73bdd344fb8bc8f4c1f476e727fb2671e9d6c8fbd775f1aaa24caf2e9a36f5 */ /* QIUTy = 0663e1cff8099757bb9ff1b87890283aa49cff0f7b12fe184ed2a428375d2796cd81de91 */ static const uint8_t nist_kas_ecc_cdh_testvector_180_out[] = { /* ZIUT */ 0x04, 0xd4, 0xf0, 0x4d, 0x2f, 0xcf, 0x1b, 0xcd, 0x81, 0x50, 0xea, 0xde, 0xd9, 0x0e, 0x46, 0x7d, 0x3d, 0x38, 0xf7, 0x53, 0xb6, 0xfb, 0x54, 0xee, 0xd8, 0xf9, 0xd2, 0x9c, 0xd3, 0xdc, 0xc7, 0xbe, 0x2c, 0x83, 0xde, 0x11 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_181_public_x[] = { /* QCAVSx */ 0x02, 0xcc, 0x28, 0xa4, 0xcb, 0x76, 0xd1, 0x47, 0xd9, 0x8d, 0xfa, 0x67, 0x7d, 0xca, 0x14, 0xe1, 0x77, 0x13, 0x47, 0xb9, 0x68, 0x1c, 0x65, 0xcd, 0xb5, 0x40, 0xf2, 0x2c, 0x90, 0x76, 0x13, 0xfd, 0xcc, 0xb0, 0xc8, 0xda }; static const uint8_t nist_kas_ecc_cdh_testvector_181_public_y[] = { /* QCAVSy */ 0x07, 0xd4, 0x06, 0x5f, 0x99, 0x0c, 0x8f, 0xc3, 0x7d, 0x10, 0x0e, 0xce, 0x38, 0xfb, 0xf5, 0x74, 0xce, 0x44, 0x4d, 0xc3, 0x73, 0x55, 0xe0, 0x70, 0x2b, 0x80, 0xd1, 0xeb, 0x1b, 0xdd, 0x67, 0x09, 0x97, 0xe8, 0xf2, 0x71 }; static const uint8_t nist_kas_ecc_cdh_testvector_181_private[] = { /* dIUT */ 0x00, 0xc7, 0x33, 0xd9, 0x09, 0x40, 0x32, 0xcc, 0x7a, 0xed, 0x6c, 0x54, 0xa8, 0xce, 0xd7, 0x53, 0xea, 0xf2, 0xa4, 0x88, 0x82, 0x28, 0x5a, 0x3b, 0x4c, 0x7e, 0x60, 0x21, 0xf2, 0x6b, 0xec, 0xe0, 0x72, 0x28, 0x40, 0xad }; /* QIUTx = 026896b039d7068d98a326710ebb7a978bd47661154645ae30cd83d60535067e05151ccb */ /* QIUTy = 00d83a263bdbd8c8abf0310bfbfc83917a86b0d8c4be0b155ab7b9e2c705605628bbcdd9 */ static const uint8_t nist_kas_ecc_cdh_testvector_181_out[] = { /* ZIUT */ 0x01, 0xc3, 0x43, 0x54, 0x05, 0x41, 0x60, 0x4f, 0x68, 0xdd, 0xbd, 0x63, 0xc4, 0x83, 0x76, 0x0d, 0x82, 0x4d, 0xed, 0x5c, 0x18, 0xbe, 0x7e, 0x56, 0xe6, 0xd3, 0x6a, 0x9a, 0xc6, 0xd2, 0x57, 0x72, 0xaf, 0xb0, 0xa9, 0x0a }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_182_public_x[] = { /* QCAVSx */ 0x06, 0x38, 0x80, 0xeb, 0x53, 0x8c, 0x72, 0x75, 0xec, 0xba, 0x4d, 0xb5, 0x3d, 0x9b, 0x68, 0xc2, 0x87, 0xfb, 0x37, 0x78, 0xbe, 0xf5, 0x14, 0x97, 0x4d, 0x1e, 0x7e, 0x31, 0xa9, 0xae, 0x36, 0x5a, 0x21, 0x81, 0x41, 0x5f }; static const uint8_t nist_kas_ecc_cdh_testvector_182_public_y[] = { /* QCAVSy */ 0x04, 0xaf, 0x9f, 0x2c, 0xf9, 0x25, 0x42, 0xe1, 0xff, 0x8f, 0xf2, 0x8f, 0x8e, 0x7c, 0x8e, 0x80, 0x95, 0x84, 0xe2, 0x43, 0xa4, 0x90, 0x29, 0x49, 0xa7, 0x65, 0xa2, 0x84, 0x98, 0x6c, 0x75, 0x0b, 0x1b, 0x06, 0xc8, 0x9a }; static const uint8_t nist_kas_ecc_cdh_testvector_182_private[] = { /* dIUT */ 0x00, 0xdb, 0x39, 0xd7, 0x53, 0x60, 0x72, 0xdc, 0x34, 0x48, 0xcd, 0x7d, 0x21, 0x60, 0xe5, 0x0c, 0x81, 0x1f, 0x64, 0x83, 0x58, 0xeb, 0x0d, 0xb1, 0xd5, 0x42, 0x8e, 0x81, 0xaa, 0x7a, 0x68, 0x6b, 0x78, 0x65, 0xad, 0xfd }; /* QIUTx = 03a721906ad13dc15c311fd4e552f3bc87b7d92ceeedbb0c316a952785ba4689fc0ba270 */ /* QIUTy = 029514f3873bbc3b9e217061f7a6261fdc6268685f9656f1d5eea472cc2db5a8c162e6e9 */ static const uint8_t nist_kas_ecc_cdh_testvector_182_out[] = { /* ZIUT */ 0x05, 0xe3, 0x80, 0x79, 0x81, 0x54, 0x77, 0xb8, 0xa7, 0x90, 0x96, 0xce, 0x33, 0x9c, 0x4a, 0x25, 0x5f, 0x8b, 0x21, 0x3b, 0xe7, 0x47, 0x15, 0xea, 0x61, 0xef, 0x7d, 0xd0, 0xc0, 0xb5, 0xf1, 0x61, 0xd9, 0xde, 0x75, 0x21 }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_183_public_x[] = { /* QCAVSx */ 0x05, 0xbf, 0xd2, 0x89, 0x5a, 0x2e, 0x66, 0x36, 0x6d, 0xb7, 0xa8, 0x37, 0x88, 0xc7, 0x2b, 0xce, 0x48, 0xf7, 0x9b, 0x5c, 0x95, 0x24, 0xa0, 0x8a, 0xe2, 0x73, 0xc7, 0x8c, 0xeb, 0x39, 0xae, 0x97, 0x55, 0x9d, 0x5a, 0xc3 }; static const uint8_t nist_kas_ecc_cdh_testvector_183_public_y[] = { /* QCAVSy */ 0x04, 0xa2, 0xb0, 0xa5, 0x5f, 0x80, 0x15, 0x5a, 0x1a, 0x33, 0x0f, 0xde, 0x6c, 0xb6, 0xd9, 0x7e, 0xdd, 0xb0, 0xa9, 0xdc, 0xb6, 0x6c, 0x49, 0xb3, 0x92, 0x90, 0x4a, 0xbe, 0x8b, 0x38, 0x1f, 0x91, 0x09, 0x0d, 0xbb, 0x21 }; static const uint8_t nist_kas_ecc_cdh_testvector_183_private[] = { /* dIUT */ 0x00, 0x66, 0x49, 0xbf, 0xd6, 0x41, 0xda, 0xbf, 0x1b, 0x9d, 0x49, 0x9d, 0x4f, 0xb0, 0x4b, 0xeb, 0x09, 0x94, 0x75, 0xd0, 0xaa, 0x15, 0xd5, 0xef, 0x68, 0x48, 0xb7, 0x34, 0xd2, 0xd4, 0x13, 0x00, 0x8b, 0x60, 0x43, 0x08 }; /* QIUTx = 008f6576d62affc71836d19adbbc3d504210f12efb61c42057824515290c502f2e09b6d8 */ /* QIUTy = 0021643be87ae6e549b0d5fbb558c1303d14b1ccd77703ec74f9602f35ca8d7a5139bce7 */ static const uint8_t nist_kas_ecc_cdh_testvector_183_out[] = { /* ZIUT */ 0x05, 0x31, 0xcc, 0xf5, 0x1d, 0x10, 0x96, 0x98, 0x2f, 0x7c, 0x2e, 0xc5, 0x13, 0xa9, 0x2b, 0xf5, 0x1c, 0x7a, 0xc5, 0x06, 0x9c, 0xb1, 0x5c, 0x5e, 0x2a, 0x05, 0x3c, 0xea, 0xe7, 0xe5, 0x55, 0x09, 0x08, 0xa1, 0x91, 0x01 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_184_public_x[] = { /* QCAVSx */ 0x06, 0x35, 0x47, 0xf7, 0x57, 0x0b, 0xd6, 0x95, 0x97, 0x33, 0xc0, 0x3d, 0x2e, 0x6c, 0x4c, 0x88, 0x97, 0x1f, 0x31, 0x4a, 0xdc, 0xf2, 0x8b, 0xc8, 0x51, 0xdc, 0x52, 0xed, 0x4e, 0x8c, 0x1a, 0x4e, 0xa0, 0x6f, 0x87, 0x02 }; static const uint8_t nist_kas_ecc_cdh_testvector_184_public_y[] = { /* QCAVSy */ 0x01, 0x22, 0xd3, 0x77, 0x3b, 0x09, 0x34, 0xe9, 0x00, 0xfb, 0xa7, 0xeb, 0xfe, 0x1a, 0xd5, 0xed, 0x5b, 0xec, 0x0f, 0xb1, 0xa9, 0xdd, 0xcf, 0x4e, 0xeb, 0x61, 0xcb, 0xed, 0x04, 0x00, 0x74, 0x31, 0x3c, 0x0b, 0x31, 0x70 }; static const uint8_t nist_kas_ecc_cdh_testvector_184_private[] = { /* dIUT */ 0x00, 0x81, 0x86, 0x0a, 0x65, 0x3d, 0x6d, 0x94, 0x44, 0x6d, 0x77, 0x66, 0x16, 0x4f, 0xf9, 0x2c, 0x6c, 0x5c, 0x15, 0x45, 0xc7, 0x35, 0x30, 0x4b, 0x3a, 0xd4, 0xd5, 0x17, 0x8c, 0x8b, 0x14, 0xd0, 0x18, 0x1e, 0x94, 0x71 }; /* QIUTx = 06b68815bb83691d16749c4be16125e2a6d6dae94252739ba7bf0db0d50198ea2fe43ddf */ /* QIUTy = 039e0d93018a46125620f6ffaca5a0668343c57025a60c31a9d6e51191cab338993b46b5 */ static const uint8_t nist_kas_ecc_cdh_testvector_184_out[] = { /* ZIUT */ 0x06, 0xff, 0xe7, 0x9d, 0x2b, 0x76, 0x64, 0xee, 0x2d, 0x83, 0x03, 0xff, 0xe0, 0xce, 0xca, 0x8c, 0x49, 0xa5, 0x81, 0xfc, 0xdb, 0x49, 0xc4, 0xaf, 0x6a, 0x06, 0x0f, 0xf2, 0x04, 0xee, 0xa7, 0x4f, 0x4c, 0xf3, 0x9c, 0xef }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_185_public_x[] = { /* QCAVSx */ 0x00, 0x90, 0x47, 0xf7, 0xd7, 0x73, 0x97, 0xdb, 0x70, 0xe3, 0x9f, 0xe9, 0xe4, 0xba, 0x9d, 0x97, 0xa9, 0x95, 0xa7, 0xee, 0x06, 0x6e, 0xcf, 0x53, 0x81, 0x79, 0xe9, 0x37, 0xac, 0x86, 0xca, 0xcd, 0xac, 0x51, 0x09, 0x50 }; static const uint8_t nist_kas_ecc_cdh_testvector_185_public_y[] = { /* QCAVSy */ 0x00, 0x7c, 0xd8, 0x75, 0x16, 0x7f, 0x06, 0xa2, 0xfb, 0x9a, 0x81, 0x9e, 0x2c, 0xbd, 0xac, 0xef, 0xc1, 0x6c, 0xae, 0x0e, 0xef, 0x2c, 0xbb, 0x0b, 0x2d, 0x49, 0xbe, 0xae, 0x10, 0x9d, 0xb7, 0x53, 0xc9, 0x50, 0x61, 0x70 }; static const uint8_t nist_kas_ecc_cdh_testvector_185_private[] = { /* dIUT */ 0x00, 0x22, 0x43, 0xe8, 0x91, 0x9b, 0xd7, 0xa9, 0x7c, 0xef, 0x0e, 0x9c, 0xde, 0x63, 0xc7, 0x6d, 0x4e, 0x10, 0x71, 0x50, 0x29, 0x4f, 0xcf, 0x8d, 0xd7, 0x67, 0x64, 0x51, 0xca, 0x3b, 0xfa, 0x5c, 0x5e, 0xdb, 0x96, 0x4c }; /* QIUTx = 03e439e3ebdfa7a23a9deb09de141905c653c4f202edf2cf5f09faef88ba3113701e49f0 */ /* QIUTy = 071d071b86ed0f468fc6019de23fe4ba2cb3b50032be35e92d2e5af40de706ab524e82ab */ static const uint8_t nist_kas_ecc_cdh_testvector_185_out[] = { /* ZIUT */ 0x03, 0x11, 0xc4, 0x30, 0xdb, 0x78, 0xb6, 0x20, 0x3e, 0x27, 0xb5, 0x29, 0x88, 0xe1, 0xe9, 0xda, 0xe8, 0x90, 0xc6, 0x55, 0xda, 0xc4, 0xac, 0xef, 0xa7, 0xee, 0x96, 0x12, 0xbe, 0xc3, 0x2e, 0x3e, 0x5f, 0x52, 0xbe, 0x55 }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_186_public_x[] = { /* QCAVSx */ 0x04, 0xbd, 0xec, 0x19, 0x30, 0x0c, 0x8a, 0xfd, 0xee, 0xd8, 0x64, 0x99, 0xd2, 0x70, 0x39, 0x22, 0xdf, 0x57, 0xb2, 0xff, 0xec, 0x37, 0xe4, 0x5c, 0x03, 0xa5, 0xe2, 0x90, 0x9d, 0xe3, 0xc3, 0x33, 0xbd, 0x06, 0xa5, 0xe1 }; static const uint8_t nist_kas_ecc_cdh_testvector_186_public_y[] = { /* QCAVSy */ 0x01, 0xaa, 0x4f, 0x40, 0x84, 0x4f, 0x24, 0x13, 0xf1, 0xfc, 0xbd, 0xed, 0x00, 0x3b, 0x1d, 0x15, 0xc9, 0xf1, 0xdf, 0x75, 0x48, 0xde, 0x2a, 0x2b, 0xbf, 0x71, 0xb5, 0x16, 0x65, 0x7a, 0xd8, 0xd8, 0xc7, 0x7c, 0xf7, 0x2d }; static const uint8_t nist_kas_ecc_cdh_testvector_186_private[] = { /* dIUT */ 0x00, 0x51, 0x2a, 0x42, 0x84, 0x1e, 0x12, 0x27, 0xfc, 0x9f, 0xed, 0x51, 0xc2, 0x26, 0x87, 0x31, 0x68, 0x41, 0x36, 0xf2, 0x25, 0xcf, 0xbf, 0x45, 0x64, 0x89, 0x87, 0xe2, 0x45, 0x3a, 0x71, 0x86, 0xf6, 0xa7, 0xed, 0xef }; /* QIUTx = 022f76e5ab714fdf78571e84c2b6ea3a17f12999be483bc67e1b843d209bdfec0347a43e */ /* QIUTy = 02eec1fc0e85f330c53dad7bff4862d8afff8aa14f94756e95b8f01fd7eeb8fc54527787 */ static const uint8_t nist_kas_ecc_cdh_testvector_186_out[] = { /* ZIUT */ 0x07, 0x01, 0xd9, 0x2e, 0xd8, 0x68, 0x71, 0x38, 0x01, 0x4b, 0x43, 0x79, 0xf1, 0xc3, 0x46, 0x77, 0xe1, 0x74, 0x4f, 0x6a, 0xe8, 0xc8, 0x99, 0x58, 0xa5, 0x96, 0x2f, 0x14, 0x40, 0x8d, 0x58, 0x7b, 0x95, 0x47, 0x2d, 0xb3 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_187_public_x[] = { /* QCAVSx */ 0x06, 0x11, 0xf5, 0x3a, 0xf4, 0xb4, 0x88, 0x99, 0x0e, 0x7a, 0x52, 0xe5, 0xc7, 0x38, 0x56, 0xa1, 0xe7, 0x42, 0x79, 0xbb, 0x0f, 0x36, 0xd3, 0xab, 0x19, 0x89, 0xb2, 0xcc, 0xd9, 0x93, 0x91, 0xb6, 0xc6, 0xb3, 0xa1, 0x3d }; static const uint8_t nist_kas_ecc_cdh_testvector_187_public_y[] = { /* QCAVSy */ 0x05, 0x4e, 0xa9, 0x5a, 0x23, 0x4f, 0x65, 0x89, 0x71, 0x95, 0xbc, 0x97, 0xb0, 0x3f, 0xa6, 0xd2, 0x46, 0xea, 0x5a, 0xb5, 0xf4, 0x1d, 0xa2, 0x2c, 0x08, 0xed, 0x81, 0x7a, 0xa7, 0xc0, 0x4a, 0xdf, 0x37, 0x29, 0x82, 0xb3 }; static const uint8_t nist_kas_ecc_cdh_testvector_187_private[] = { /* dIUT */ 0x00, 0x2a, 0x8a, 0xf4, 0x97, 0xd1, 0xa3, 0xda, 0xc0, 0x73, 0x2a, 0x39, 0x3d, 0xed, 0xf7, 0x53, 0x94, 0xa3, 0xf5, 0x19, 0xce, 0x07, 0xfa, 0xed, 0x3f, 0x77, 0xdc, 0x0e, 0x66, 0x9f, 0x3a, 0x1b, 0x1c, 0x6d, 0xda, 0xdb }; /* QIUTx = 0571f0c87f88888ec0738961834021765cc4f5c8db2b1f9ea9b8fe9847f8964349fdc44f */ /* QIUTy = 04ef7c8044a609694746ccaafe87fc7f9f1a78d00f8354f5da7ee2f5da7235ac1ad4b57c */ static const uint8_t nist_kas_ecc_cdh_testvector_187_out[] = { /* ZIUT */ 0x04, 0xf2, 0x30, 0x1e, 0xd8, 0x5a, 0x5c, 0x91, 0xc3, 0x1a, 0x7f, 0xd1, 0x25, 0x85, 0x49, 0x04, 0x34, 0x0a, 0x55, 0xe3, 0x49, 0x76, 0xa2, 0x07, 0x43, 0xbd, 0x33, 0xd9, 0x5e, 0x47, 0x64, 0x50, 0xf3, 0x01, 0xee, 0x62 }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_188_public_x[] = { /* QCAVSx */ 0x01, 0x27, 0x06, 0xec, 0x0a, 0x0e, 0x76, 0x42, 0x5d, 0x8a, 0xb4, 0xe0, 0xd5, 0x59, 0x30, 0xa4, 0x41, 0x6e, 0x4d, 0xd0, 0xa1, 0xaf, 0x6d, 0x97, 0x98, 0x72, 0x52, 0x98, 0x8d, 0xa0, 0xac, 0x96, 0x27, 0x57, 0x7c, 0xbe }; static const uint8_t nist_kas_ecc_cdh_testvector_188_public_y[] = { /* QCAVSy */ 0x04, 0x21, 0x5e, 0x87, 0x15, 0x12, 0x9c, 0xc7, 0x63, 0x01, 0x79, 0x17, 0x01, 0xdc, 0x5f, 0xe1, 0xab, 0xcd, 0x67, 0x2b, 0x6a, 0xa1, 0x9b, 0xa4, 0xc7, 0xe5, 0x32, 0xee, 0x7a, 0x91, 0x3e, 0xea, 0x60, 0xdb, 0xc9, 0xd0 }; static const uint8_t nist_kas_ecc_cdh_testvector_188_private[] = { /* dIUT */ 0x01, 0xde, 0x9f, 0xba, 0x4a, 0xb2, 0x4d, 0x06, 0xe7, 0x4a, 0xe5, 0xad, 0x36, 0xae, 0x19, 0x5c, 0x23, 0x60, 0xc7, 0x28, 0xeb, 0x38, 0xc5, 0x0e, 0xf5, 0x33, 0x32, 0x9e, 0x70, 0xc5, 0xae, 0x19, 0xf4, 0x89, 0xb6, 0xd5 }; /* QIUTx = 048d61e0b9b8064bcca8ce40d4f9e68b23684137726a44ea75c8f2f8850f0333fbe985e6 */ /* QIUTy = 05fcaba38d51e2112b6b9f34e6779c10c0c559c3ecd156022966cf92a8c7f65020a79ebd */ static const uint8_t nist_kas_ecc_cdh_testvector_188_out[] = { /* ZIUT */ 0x06, 0x43, 0x90, 0x0f, 0x33, 0x7e, 0xd3, 0x62, 0x81, 0x5f, 0x18, 0x1e, 0x06, 0x28, 0xed, 0x51, 0x84, 0xda, 0xd3, 0xe6, 0x6a, 0x1f, 0x03, 0x0e, 0x94, 0x7f, 0x11, 0x66, 0x96, 0x31, 0x2d, 0x83, 0x5f, 0x7f, 0x6e, 0x7b }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_189_public_x[] = { /* QCAVSx */ 0x05, 0xbb, 0x20, 0xbe, 0xa4, 0xfd, 0x85, 0xd0, 0x16, 0x26, 0x89, 0xc5, 0x50, 0x05, 0x40, 0x01, 0x40, 0x9b, 0x6c, 0x71, 0x2d, 0x35, 0x6a, 0x52, 0xf7, 0x93, 0xd7, 0x8a, 0xa2, 0xd8, 0x26, 0x1a, 0x43, 0xc5, 0xb6, 0xde }; static const uint8_t nist_kas_ecc_cdh_testvector_189_public_y[] = { /* QCAVSy */ 0x03, 0x1b, 0xe5, 0xca, 0xfc, 0x8a, 0xae, 0xf1, 0x9b, 0x86, 0x15, 0x03, 0x41, 0x3a, 0x7b, 0x73, 0xb6, 0x0b, 0x37, 0xb0, 0x18, 0x04, 0x93, 0xd8, 0x2e, 0x94, 0x26, 0xf4, 0x7b, 0x65, 0x87, 0x39, 0x3d, 0x08, 0xde, 0x08 }; static const uint8_t nist_kas_ecc_cdh_testvector_189_private[] = { /* dIUT */ 0x01, 0x5d, 0x3a, 0x22, 0x2d, 0x57, 0x09, 0xcb, 0x33, 0x9d, 0x93, 0xcd, 0x29, 0x65, 0x06, 0x64, 0xf3, 0x9b, 0xf3, 0x20, 0x1c, 0x5d, 0x1e, 0x86, 0xd3, 0xae, 0xf8, 0xf7, 0x95, 0xb9, 0xfd, 0xdf, 0x47, 0xd8, 0xc4, 0xa8 }; /* QIUTx = 01e2b88de3772b09c63d036e0dbba435246987497b6283dab8ccf1002486de0730277b43 */ /* QIUTy = 03ce182b7f0cea21a06a1d4de8722cbfc59b9d9d79bc760b9d17d85671561aeaadd54941 */ static const uint8_t nist_kas_ecc_cdh_testvector_189_out[] = { /* ZIUT */ 0x06, 0x3b, 0x1a, 0x3d, 0xb3, 0x31, 0xf9, 0x1a, 0xbd, 0x0a, 0xf8, 0x37, 0xdb, 0x9d, 0x5f, 0x04, 0x06, 0x20, 0xd1, 0xdd, 0xd7, 0xfc, 0xcf, 0x8b, 0x58, 0xe0, 0xdf, 0x43, 0x69, 0x83, 0x51, 0xea, 0x19, 0x42, 0x54, 0x8e }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_190_public_x[] = { /* QCAVSx */ 0x01, 0x0a, 0x3c, 0xa2, 0x43, 0x5b, 0x13, 0x5f, 0xfe, 0xa0, 0x87, 0x92, 0xb7, 0xf1, 0x9b, 0x4e, 0xe1, 0x81, 0x20, 0x7c, 0x29, 0xbe, 0x1c, 0xe1, 0xfd, 0xea, 0xcd, 0xb6, 0x9a, 0x66, 0x9f, 0x9c, 0xdd, 0xe9, 0x18, 0x1a }; static const uint8_t nist_kas_ecc_cdh_testvector_190_public_y[] = { /* QCAVSy */ 0x02, 0x49, 0x08, 0x27, 0x4b, 0x1e, 0x98, 0xc6, 0xd1, 0x97, 0xed, 0x27, 0x83, 0xc3, 0xc9, 0x53, 0xc1, 0xb3, 0xb3, 0x4f, 0xa4, 0x3a, 0x8b, 0x2f, 0x57, 0x42, 0x58, 0x4e, 0x37, 0xfe, 0xa4, 0x07, 0x26, 0x9b, 0x43, 0xbf }; static const uint8_t nist_kas_ecc_cdh_testvector_190_private[] = { /* dIUT */ 0x00, 0x98, 0xc5, 0x70, 0x66, 0x67, 0x92, 0xef, 0xda, 0x65, 0xfc, 0x9e, 0x79, 0x09, 0x93, 0x11, 0x58, 0xdf, 0xd4, 0x47, 0x7b, 0xe9, 0x33, 0x32, 0xe4, 0x93, 0xd6, 0x98, 0x66, 0xb6, 0x60, 0x2c, 0x49, 0x51, 0xde, 0x6f }; /* QIUTx = 04dc6774fe46ab0ed2768d379e7564a37c6bb1dd1bfc555727ad94c20f4732cabf2a2c82 */ /* QIUTy = 06c6cf0f421f91fca22b4871216a9f1fe3878f07914e96ae94ac770b6762f9dce08ffa2d */ static const uint8_t nist_kas_ecc_cdh_testvector_190_out[] = { /* ZIUT */ 0x05, 0x16, 0xda, 0x1d, 0x64, 0xbc, 0x4b, 0x25, 0xce, 0x47, 0x63, 0xe6, 0x43, 0x82, 0x57, 0xd6, 0x2f, 0xb1, 0xff, 0xde, 0xae, 0x16, 0xd6, 0x87, 0x01, 0xd6, 0x3b, 0x60, 0x3a, 0xd5, 0x3e, 0x85, 0x87, 0x92, 0x76, 0x69 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_191_public_x[] = { /* QCAVSx */ 0x05, 0x3a, 0x0d, 0xd6, 0x13, 0x5e, 0x43, 0xa1, 0x14, 0xe5, 0x00, 0x0a, 0xec, 0x40, 0xba, 0x27, 0x09, 0xb3, 0xa6, 0x13, 0x73, 0x0f, 0x1c, 0xc2, 0x00, 0x6b, 0x44, 0x69, 0x35, 0xe2, 0x37, 0xbf, 0xcc, 0xc3, 0x94, 0xd8 }; static const uint8_t nist_kas_ecc_cdh_testvector_191_public_y[] = { /* QCAVSy */ 0x03, 0xb6, 0x6c, 0xe6, 0xcf, 0x01, 0x50, 0x7d, 0x46, 0x2e, 0xee, 0xff, 0xf6, 0x21, 0x1b, 0xd4, 0xc5, 0x60, 0x70, 0x11, 0x6c, 0x69, 0x07, 0x46, 0x8f, 0x7c, 0x76, 0xfe, 0x01, 0x14, 0x0b, 0xf0, 0xd5, 0xfb, 0x7b, 0x79 }; static const uint8_t nist_kas_ecc_cdh_testvector_191_private[] = { /* dIUT */ 0x00, 0xf4, 0xb6, 0xdb, 0x4a, 0x87, 0xcd, 0xd3, 0x00, 0x29, 0xcc, 0x3b, 0xe8, 0x9e, 0x40, 0xb9, 0xbc, 0xb0, 0x14, 0xd0, 0x10, 0xa9, 0x1a, 0x25, 0x2c, 0x56, 0xcb, 0x28, 0x67, 0x1f, 0x35, 0x4a, 0x80, 0x4c, 0xb4, 0xd8 }; /* QIUTx = 066ddf04831fd1c72bc48b709061c1aeaaad19c9da3d8c1506fa775d4f5a5412eee0286d */ /* QIUTy = 03aa1d13146ff192792b74a5c64ad3150fae344fa830e0f44733d867f4e0ae053526c62b */ static const uint8_t nist_kas_ecc_cdh_testvector_191_out[] = { /* ZIUT */ 0x04, 0x9c, 0x68, 0xc3, 0x33, 0xb9, 0x67, 0x05, 0xee, 0xe4, 0xa3, 0xde, 0xf0, 0xd5, 0x68, 0xb0, 0xd4, 0xfa, 0xf2, 0x4d, 0xf2, 0xfc, 0x2f, 0x1b, 0xf4, 0x0d, 0xa0, 0xaf, 0x09, 0x46, 0x24, 0x0c, 0x38, 0xe9, 0x7f, 0x74 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_192_public_x[] = { /* QCAVSx */ 0x06, 0xd4, 0xa6, 0xf3, 0xe8, 0x7b, 0x6d, 0x8c, 0x49, 0xcb, 0xe5, 0x17, 0xa9, 0x75, 0xd2, 0xab, 0x8c, 0x63, 0x39, 0x13, 0x55, 0x96, 0xd6, 0xb3, 0x0c, 0xc6, 0x5c, 0xc8, 0x0c, 0x12, 0x84, 0x50, 0x8f, 0x49, 0x78, 0x9b }; static const uint8_t nist_kas_ecc_cdh_testvector_192_public_y[] = { /* QCAVSy */ 0x02, 0x96, 0x3b, 0x35, 0x6f, 0x24, 0x34, 0xec, 0x24, 0x9b, 0xcb, 0x65, 0x89, 0xed, 0xe4, 0xde, 0x36, 0xce, 0xcd, 0x34, 0x50, 0xe6, 0xf5, 0xe4, 0x77, 0xbf, 0xcd, 0xc2, 0x9a, 0xda, 0x4a, 0xef, 0x0f, 0x45, 0xac, 0x53 }; static const uint8_t nist_kas_ecc_cdh_testvector_192_private[] = { /* dIUT */ 0x01, 0xab, 0x82, 0xc5, 0xa6, 0x2a, 0xe4, 0x7e, 0xcb, 0xcc, 0xf6, 0x66, 0xcc, 0x33, 0x23, 0xb3, 0x51, 0x28, 0xc5, 0x2d, 0x17, 0xbe, 0x11, 0xba, 0xf3, 0xbd, 0xb5, 0x60, 0x06, 0xe5, 0xd5, 0x68, 0xba, 0xad, 0x8b, 0xbc }; /* QIUTx = 00a04ad7a583666a40437f968b02cac7946745b4ca949021c5443deb70183f88e1778fe0 */ /* QIUTy = 02bb591c32f0db3430342f0e37c45449c293c54f6b7df6f797c0992c2829858b680f2bdc */ static const uint8_t nist_kas_ecc_cdh_testvector_192_out[] = { /* ZIUT */ 0x04, 0xdd, 0x44, 0xc1, 0xa3, 0x0e, 0xda, 0xc2, 0xe3, 0x9a, 0x5b, 0xc9, 0x90, 0x26, 0x25, 0x88, 0x0a, 0x18, 0x51, 0x63, 0x85, 0xc9, 0x0a, 0x9c, 0xc6, 0xb9, 0x4c, 0x4f, 0x11, 0x1e, 0x02, 0x60, 0x86, 0x3c, 0xca, 0xb2 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_193_public_x[] = { /* QCAVSx */ 0x07, 0x64, 0x52, 0xe1, 0x9d, 0x7a, 0x10, 0xb8, 0x85, 0x12, 0x3d, 0x50, 0x3f, 0x5d, 0x04, 0x33, 0xe1, 0x63, 0xdf, 0x13, 0x4f, 0xff, 0xb8, 0x55, 0x8f, 0x8a, 0xc2, 0x6c, 0xfb, 0x30, 0x62, 0x9f, 0x8c, 0xfb, 0x09, 0x3e }; static const uint8_t nist_kas_ecc_cdh_testvector_193_public_y[] = { /* QCAVSy */ 0x06, 0xb3, 0xa2, 0x4b, 0x2a, 0x4b, 0x07, 0x77, 0x70, 0xd3, 0x96, 0xbb, 0xf1, 0x54, 0xaf, 0x41, 0xee, 0xe3, 0x50, 0x35, 0x73, 0xa6, 0xde, 0x9a, 0xfe, 0x0f, 0x6d, 0x18, 0xb0, 0x2f, 0xc9, 0x76, 0x1c, 0xa1, 0x64, 0x3d }; static const uint8_t nist_kas_ecc_cdh_testvector_193_private[] = { /* dIUT */ 0x00, 0x12, 0x54, 0xaf, 0x17, 0x91, 0xcc, 0x75, 0x69, 0x4c, 0xe5, 0x90, 0xbb, 0x51, 0x8a, 0x77, 0x0a, 0x75, 0x04, 0x46, 0x17, 0x1a, 0x30, 0xed, 0xd6, 0xc0, 0x38, 0x2a, 0x17, 0xe6, 0x88, 0x0a, 0x1a, 0xea, 0x5b, 0x81 }; /* QIUTx = 02b766c993b398d2426a7a0a49e9d001079d0fc32197181c56eac1805e4f87c9df055dea */ /* QIUTy = 036e7bbd3be9139d4d43a8655ef7d51a062d9947d1a48010ef1ea10eedeb27f0d1ffe765 */ static const uint8_t nist_kas_ecc_cdh_testvector_193_out[] = { /* ZIUT */ 0x00, 0x49, 0xc1, 0x65, 0x33, 0x9e, 0x9a, 0xeb, 0x2b, 0x51, 0x66, 0x84, 0xb4, 0x42, 0x92, 0x1f, 0x1f, 0xef, 0x30, 0x91, 0xcf, 0x78, 0x1e, 0x03, 0xfb, 0x3f, 0x56, 0xe9, 0x3a, 0xf1, 0xf3, 0xd6, 0xe5, 0x00, 0xc8, 0x1f }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_194_public_x[] = { /* QCAVSx */ 0x01, 0x8e, 0x0b, 0xb7, 0x51, 0x6d, 0x2c, 0x42, 0xe9, 0xdd, 0x96, 0xca, 0xaf, 0xf5, 0xf2, 0x0b, 0xfd, 0xdf, 0x3e, 0x86, 0x23, 0xfc, 0x94, 0x7d, 0x4d, 0x70, 0x49, 0x15, 0x36, 0x79, 0x0b, 0x87, 0x41, 0xcd, 0xd3, 0x72 }; static const uint8_t nist_kas_ecc_cdh_testvector_194_public_y[] = { /* QCAVSy */ 0x03, 0x2c, 0x0f, 0xff, 0xbd, 0xa2, 0xfa, 0x86, 0x3c, 0xb9, 0xd1, 0x5c, 0x36, 0x54, 0x50, 0x20, 0xd5, 0xbb, 0x24, 0xd9, 0x30, 0xda, 0xf2, 0xfe, 0xa4, 0x55, 0x5f, 0x7c, 0x24, 0xd6, 0xae, 0xfb, 0xb2, 0xc0, 0x1d, 0x92 }; static const uint8_t nist_kas_ecc_cdh_testvector_194_private[] = { /* dIUT */ 0x01, 0x20, 0x17, 0xb9, 0xa0, 0x59, 0x9f, 0xbf, 0x13, 0xce, 0xe1, 0x08, 0x50, 0xa8, 0xf8, 0xbd, 0x06, 0xcc, 0xc0, 0x0b, 0xd2, 0x9a, 0xc6, 0x77, 0x9f, 0x1b, 0xd9, 0x33, 0x46, 0xb2, 0x2c, 0x98, 0x32, 0x7e, 0x0f, 0xa7 }; /* QIUTx = 0421c62dcab54ba800eafac232fc730ce70f6d5cc53ff53d371269cf046daeaf451b33e7 */ /* QIUTy = 03d635f55233da3c490a959c6e63a94fcdbe471fbfca19d2c5a3fd12b04db380c3c895cc */ static const uint8_t nist_kas_ecc_cdh_testvector_194_out[] = { /* ZIUT */ 0x06, 0x45, 0xd7, 0xf4, 0xc5, 0x47, 0x9b, 0xaf, 0xf5, 0xbc, 0x0c, 0xba, 0x65, 0x4a, 0x3d, 0xcf, 0xda, 0x56, 0xc0, 0xe9, 0xd1, 0x9f, 0x50, 0xf9, 0xd8, 0xd8, 0xc6, 0x35, 0x7c, 0x09, 0xa1, 0x40, 0xef, 0xfb, 0xf2, 0x23 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_195_public_x[] = { /* QCAVSx */ 0x02, 0x4a, 0xbb, 0x15, 0x5e, 0x49, 0x12, 0x42, 0x82, 0xea, 0x32, 0xe5, 0xb5, 0x44, 0x62, 0x1a, 0xe9, 0xb5, 0x13, 0xaa, 0x04, 0x76, 0xda, 0x3b, 0xdd, 0xb7, 0x52, 0x60, 0xd5, 0xf5, 0xfa, 0x2e, 0x7b, 0x89, 0x89, 0x87 }; static const uint8_t nist_kas_ecc_cdh_testvector_195_public_y[] = { /* QCAVSy */ 0x01, 0xbd, 0xfb, 0x0a, 0x07, 0x9a, 0x55, 0xbc, 0xfc, 0xe1, 0xca, 0x8b, 0xce, 0x30, 0x19, 0xcb, 0xca, 0xe6, 0x16, 0x40, 0x03, 0x38, 0x41, 0x66, 0xeb, 0xbb, 0x0b, 0xb7, 0x33, 0x53, 0x95, 0x65, 0xad, 0xc4, 0x46, 0xf3 }; static const uint8_t nist_kas_ecc_cdh_testvector_195_private[] = { /* dIUT */ 0x00, 0x4f, 0x19, 0x7c, 0x85, 0x43, 0x2c, 0xb4, 0x2a, 0x17, 0x77, 0x24, 0x9a, 0xe4, 0x11, 0xef, 0x4b, 0xb2, 0x65, 0x7b, 0xa4, 0xba, 0xd3, 0x5a, 0xe5, 0x38, 0x63, 0x5a, 0x15, 0x1c, 0x8d, 0x6a, 0x56, 0x4f, 0x9c, 0xca }; /* QIUTx = 040c88924d5a24a853fae408aea5b3bc827d7315fbb58e6ea1f6a65677dd4c4d304bd75f */ /* QIUTy = 054b82869ada4433f7208f8570f24f06cb64046e8ac086ac57d3707fc882c6352733dff6 */ static const uint8_t nist_kas_ecc_cdh_testvector_195_out[] = { /* ZIUT */ 0x02, 0x80, 0x17, 0xc2, 0xa0, 0x24, 0x0f, 0xd7, 0x46, 0xee, 0x72, 0xa0, 0xbc, 0xae, 0x1e, 0x53, 0xe0, 0x5b, 0x7a, 0xf2, 0x54, 0x29, 0x80, 0x94, 0xc3, 0x81, 0xe7, 0x35, 0x52, 0x38, 0x54, 0xea, 0x5f, 0xdd, 0x4f, 0x5c }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_196_public_x[] = { /* QCAVSx */ 0x07, 0x52, 0x75, 0x12, 0xbc, 0x93, 0x49, 0x38, 0xcc, 0x52, 0x40, 0xce, 0x70, 0xef, 0x65, 0x22, 0x2d, 0xb8, 0x5c, 0x13, 0xc9, 0x61, 0xc1, 0xf3, 0x1f, 0x91, 0x42, 0x05, 0x06, 0x7d, 0x64, 0xb1, 0xa4, 0xc8, 0x53, 0x14 }; static const uint8_t nist_kas_ecc_cdh_testvector_196_public_y[] = { /* QCAVSy */ 0x02, 0xaa, 0xbd, 0xb8, 0x1f, 0xfe, 0xd2, 0xc0, 0x01, 0xac, 0xbb, 0x4d, 0x0b, 0x7b, 0xe5, 0x39, 0x30, 0x4e, 0x32, 0xe4, 0x31, 0xe0, 0x2d, 0xf8, 0xb1, 0x92, 0xad, 0x74, 0xed, 0x1b, 0x4b, 0x06, 0x06, 0xbf, 0xc9, 0x0b }; static const uint8_t nist_kas_ecc_cdh_testvector_196_private[] = { /* dIUT */ 0x01, 0x4e, 0x89, 0x34, 0x83, 0xd1, 0xd8, 0xb7, 0x62, 0x1c, 0xf4, 0x8b, 0xd2, 0x4b, 0xc8, 0xa1, 0xb9, 0x5b, 0xb4, 0x0a, 0x08, 0xc1, 0x6c, 0x32, 0x87, 0x4a, 0x65, 0x2b, 0x59, 0xa2, 0x25, 0x21, 0x39, 0x42, 0x8d, 0xac }; /* QIUTx = 01574e17ce26311c40abf3243f4889a2eae74a8341aa7838551056f4395b8f02bdc327be */ /* QIUTy = 0086e59f985348f3f8d7953800b1d75e141521249c43fe0616913db5d1d4bd5400abce55 */ static const uint8_t nist_kas_ecc_cdh_testvector_196_out[] = { /* ZIUT */ 0x02, 0x60, 0x3c, 0x00, 0x99, 0x8d, 0xeb, 0xa5, 0x2d, 0xb1, 0x28, 0x14, 0xb1, 0xf7, 0x7b, 0x21, 0x20, 0xcb, 0xc1, 0xdc, 0xa5, 0x90, 0x09, 0xc0, 0xd6, 0xea, 0x40, 0xdc, 0xbc, 0xab, 0xca, 0x32, 0xc5, 0x03, 0x80, 0xd8 }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_197_public_x[] = { /* QCAVSx */ 0x07, 0xec, 0x29, 0xda, 0x2f, 0x30, 0x4c, 0xeb, 0xa8, 0xd5, 0xe2, 0x49, 0xeb, 0x60, 0x54, 0xa4, 0xe4, 0xf5, 0x95, 0x34, 0xee, 0x59, 0xd2, 0x5c, 0x1d, 0xc0, 0xe1, 0x2c, 0xc3, 0x8f, 0x76, 0x8b, 0x83, 0xda, 0xff, 0xee }; static const uint8_t nist_kas_ecc_cdh_testvector_197_public_y[] = { /* QCAVSy */ 0x01, 0x12, 0xc7, 0xd4, 0xa3, 0x7f, 0xec, 0x84, 0x22, 0x71, 0xa0, 0xa8, 0x22, 0xd3, 0x76, 0x37, 0xe6, 0xed, 0x55, 0x19, 0x07, 0x13, 0x00, 0x1a, 0xef, 0xe1, 0x1b, 0x06, 0xf7, 0xe1, 0xd3, 0x4e, 0x00, 0xfc, 0xde, 0xcb }; static const uint8_t nist_kas_ecc_cdh_testvector_197_private[] = { /* dIUT */ 0x01, 0xeb, 0x6f, 0x6c, 0x91, 0xa8, 0x80, 0xa5, 0x46, 0x21, 0x85, 0xc6, 0xa7, 0x00, 0xe8, 0x63, 0x7b, 0x8f, 0x44, 0x7d, 0x09, 0xd1, 0xb2, 0x51, 0x46, 0x0f, 0xe5, 0x7f, 0x1b, 0xf4, 0x62, 0xef, 0xdd, 0xdd, 0xae, 0xc0 }; /* QIUTx = 031b3026104388374cfb7c7b4ef64211a47e20b9561a3bbca53516040b7bda2837309454 */ /* QIUTy = 024f8aeb23a35e1c22225967c7911868c84efdd873dbbccbc763ead67e72a2324aa4c6f2 */ static const uint8_t nist_kas_ecc_cdh_testvector_197_out[] = { /* ZIUT */ 0x02, 0x6a, 0x71, 0x9b, 0xff, 0x31, 0xda, 0x4b, 0x4e, 0xba, 0xed, 0x7b, 0xd0, 0x43, 0x06, 0x4f, 0x9c, 0x39, 0x30, 0xb5, 0x77, 0x4c, 0x4a, 0x99, 0x80, 0x93, 0x32, 0xc8, 0x08, 0xaa, 0xcb, 0xa4, 0xb9, 0xe3, 0x73, 0x3a }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_198_public_x[] = { /* QCAVSx */ 0x06, 0x1e, 0xf5, 0x93, 0x89, 0xed, 0xf8, 0xf8, 0x27, 0x3a, 0x66, 0x2a, 0x41, 0x95, 0x41, 0x1e, 0x94, 0x48, 0xbb, 0x1b, 0x77, 0xfb, 0x08, 0x00, 0xbe, 0x52, 0x5e, 0xb5, 0xa6, 0xa0, 0x3b, 0x19, 0x66, 0x57, 0x19, 0xa9 }; static const uint8_t nist_kas_ecc_cdh_testvector_198_public_y[] = { /* QCAVSy */ 0x02, 0x96, 0x86, 0xf8, 0x47, 0x7f, 0xb5, 0xc7, 0x69, 0xef, 0xb0, 0x82, 0xcb, 0x3f, 0x1a, 0x0c, 0x79, 0xdb, 0x55, 0xcb, 0x26, 0x4e, 0x21, 0x12, 0xc0, 0xe7, 0x79, 0xe7, 0xb5, 0x58, 0xf7, 0x00, 0x45, 0x81, 0x6a, 0x10 }; static const uint8_t nist_kas_ecc_cdh_testvector_198_private[] = { /* dIUT */ 0x01, 0x47, 0xbe, 0x4e, 0x38, 0x66, 0x7e, 0x32, 0xa6, 0xa6, 0x1a, 0xb9, 0x80, 0xce, 0xd9, 0x2e, 0x42, 0x69, 0x59, 0x25, 0xb1, 0x13, 0xc6, 0x94, 0xa7, 0x96, 0x0a, 0xed, 0xea, 0x2e, 0x1d, 0x57, 0x1a, 0x42, 0xd3, 0xde }; /* QIUTx = 06f599f0c149457a32f1a2ffabd4dff916259382912b6402b50cdf5c235fdd1b790e5eaf */ /* QIUTy = 04ccf1d8a4bfeb77ff3290e65ac601ee5b97fc1b1869a2eb9f0b76277e8066c086776c40 */ static const uint8_t nist_kas_ecc_cdh_testvector_198_out[] = { /* ZIUT */ 0x04, 0x8c, 0x48, 0xc9, 0x93, 0x04, 0x06, 0x19, 0x53, 0x6f, 0x45, 0x48, 0x2c, 0x49, 0x4a, 0x39, 0xb3, 0x2e, 0x75, 0xfe, 0x69, 0xe4, 0x78, 0xba, 0x06, 0xe3, 0x76, 0x22, 0x8b, 0x79, 0xeb, 0x83, 0xd3, 0xff, 0x91, 0x68 }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_199_public_x[] = { /* QCAVSx */ 0x07, 0x9d, 0x57, 0x60, 0xee, 0x6e, 0xf9, 0x78, 0x51, 0x8b, 0xbc, 0xe5, 0x36, 0xb0, 0x31, 0xc6, 0x55, 0xa8, 0xac, 0xf5, 0x60, 0x44, 0x97, 0xba, 0x43, 0xde, 0x0b, 0xeb, 0x68, 0x77, 0xa5, 0x47, 0xc3, 0xed, 0xd4, 0x58 }; static const uint8_t nist_kas_ecc_cdh_testvector_199_public_y[] = { /* QCAVSy */ 0x04, 0x21, 0xb3, 0x05, 0x1d, 0xd3, 0x63, 0x96, 0xd2, 0x0f, 0xfc, 0xd7, 0xcf, 0x34, 0xfc, 0xa0, 0x22, 0x51, 0x6d, 0xd4, 0xbf, 0xfa, 0xc7, 0x3f, 0xc9, 0x95, 0xae, 0x9e, 0xa8, 0x14, 0xce, 0x0e, 0x40, 0x27, 0xf7, 0xc6 }; static const uint8_t nist_kas_ecc_cdh_testvector_199_private[] = { /* dIUT */ 0x01, 0xe1, 0x90, 0x0b, 0xe6, 0x1a, 0xdb, 0x7e, 0x55, 0x55, 0x9d, 0x99, 0xa0, 0xb7, 0xd9, 0x35, 0x44, 0x56, 0xf5, 0x15, 0x1e, 0x2f, 0xd7, 0xb8, 0x3c, 0x00, 0x5b, 0x10, 0xb1, 0x60, 0x04, 0xeb, 0xe8, 0x76, 0xc0, 0x68 }; /* QIUTx = 042ecc99ff48b53f6619b484af8fa59b234a981c9c3e9107bbd1cdaacce81885d06e02a9 */ /* QIUTy = 0183da0d7fee7f3e70e117f0e8a4a742cad10aefcdc4aab9bb31458237686afb4facf3a9 */ static const uint8_t nist_kas_ecc_cdh_testvector_199_out[] = { /* ZIUT */ 0x05, 0xd8, 0x5b, 0x16, 0xbb, 0x2a, 0x0d, 0x32, 0xc7, 0x3d, 0x14, 0x02, 0x83, 0x8b, 0xdf, 0xa5, 0x12, 0xd7, 0x44, 0xfa, 0x88, 0xc7, 0x4d, 0x3d, 0x90, 0xcf, 0x71, 0x4c, 0x24, 0x80, 0xe0, 0x33, 0x63, 0xd5, 0xc6, 0xec }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_200_public_x[] = { /* QCAVSx */ 0x02, 0x47, 0x84, 0xd3, 0xd3, 0xd5, 0xe8, 0x02, 0x1f, 0xfe, 0xd8, 0xa2, 0x70, 0x9a, 0x9f, 0x54, 0xd5, 0x39, 0x5d, 0x98, 0xfa, 0x44, 0x2a, 0x65, 0x5a, 0x05, 0xdd, 0x94, 0x26, 0x2b, 0x60, 0x35, 0x96, 0xf8, 0xbf, 0xf1 }; static const uint8_t nist_kas_ecc_cdh_testvector_200_public_y[] = { /* QCAVSy */ 0x03, 0xe8, 0xe3, 0x9e, 0x08, 0xcc, 0xe5, 0x5e, 0x1b, 0xed, 0x2d, 0xfe, 0x0d, 0x2f, 0x8c, 0x14, 0x1b, 0x06, 0x40, 0x1d, 0xba, 0x03, 0x7e, 0xcb, 0x38, 0x47, 0x44, 0x93, 0x0c, 0x81, 0x78, 0xd1, 0x46, 0x41, 0x63, 0x24 }; static const uint8_t nist_kas_ecc_cdh_testvector_200_private[] = { /* dIUT */ 0x00, 0x77, 0xe4, 0x1a, 0xb2, 0xd0, 0x9c, 0x34, 0xc5, 0x88, 0xab, 0xc7, 0x6d, 0x43, 0x12, 0x60, 0x2e, 0x71, 0xf6, 0x00, 0x19, 0x02, 0x7b, 0x98, 0x6e, 0x0d, 0xed, 0x37, 0x25, 0x35, 0xc2, 0xb6, 0xa9, 0x33, 0xa5, 0x33 }; /* QIUTx = 02923323f170074222d3a6a287adafd3d1fe12715d57b91b1ff476a2b4fcc385de261ecc */ /* QIUTy = 04cc498d67c6267cc7c4c2d40a56cdc2a6e715edd8b2a9614eeb33d0b6fd162cbb85a714 */ static const uint8_t nist_kas_ecc_cdh_testvector_200_out[] = { /* ZIUT */ 0x06, 0x6a, 0xbb, 0x83, 0x8b, 0x5f, 0x12, 0xb6, 0xfc, 0x15, 0xce, 0xb7, 0x45, 0x60, 0x06, 0x86, 0xbc, 0x2d, 0x57, 0x73, 0xe5, 0x34, 0x69, 0xc2, 0xee, 0x92, 0x0c, 0xfb, 0xa5, 0x45, 0x9a, 0x1c, 0xab, 0x20, 0xd1, 0x53 }; /* [K-409] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_201_public_x[] = { /* QCAVSx */ 0x01, 0x77, 0xf7, 0x36, 0xf6, 0x11, 0x63, 0x20, 0xca, 0xfb, 0xb5, 0xb4, 0xde, 0xc2, 0x02, 0xd4, 0x05, 0x08, 0x18, 0x2f, 0xe0, 0x11, 0x18, 0x9b, 0x81, 0xe1, 0xf3, 0x99, 0x8f, 0x54, 0x08, 0x60, 0x7a, 0x46, 0xbb, 0x15, 0x0a, 0xc4, 0x7b, 0xca, 0xaa, 0xfd, 0xe4, 0x7b, 0x8a, 0x7b, 0x72, 0xf4, 0x78, 0xbc, 0x22, 0xd2 }; static const uint8_t nist_kas_ecc_cdh_testvector_201_public_y[] = { /* QCAVSy */ 0x01, 0xdf, 0x4e, 0xf4, 0xb3, 0x7e, 0x01, 0x24, 0xe5, 0x5b, 0x67, 0xf3, 0x58, 0x6d, 0xe2, 0x4a, 0x88, 0xa6, 0xc5, 0xd9, 0x88, 0x54, 0x00, 0x7d, 0x4b, 0x0c, 0x4b, 0x4c, 0xcd, 0x68, 0xd5, 0x1f, 0xaf, 0xa7, 0x63, 0x8b, 0xbe, 0x55, 0x5d, 0x60, 0xb7, 0x4d, 0xef, 0x21, 0x7c, 0x6a, 0x63, 0xc5, 0xb4, 0x06, 0x8f, 0xb7 }; static const uint8_t nist_kas_ecc_cdh_testvector_201_private[] = { /* dIUT */ 0x00, 0x08, 0x4b, 0x71, 0x1e, 0x3c, 0x60, 0x82, 0x2e, 0x70, 0xfa, 0x68, 0x28, 0xb5, 0xab, 0xfb, 0x0e, 0x44, 0x88, 0x88, 0xb3, 0x5b, 0x0c, 0x8b, 0xb0, 0x9f, 0x80, 0x66, 0x16, 0xdc, 0x1e, 0xcf, 0x22, 0xdd, 0x86, 0x23, 0x7d, 0x93, 0x7c, 0x1b, 0xfd, 0xe6, 0x2b, 0x75, 0xae, 0x65, 0x59, 0x53, 0xfc, 0x6b, 0x2f, 0x7e }; /* QIUTx = 0068a3f8b12e02d10e2f52095526bc4048b8f6ac3a84531772870789938f1aeff813e05e509ea9587d2b7e4aa14344bac3ec46f0 */ /* QIUTy = 00d1ceb40c7d5f3297e2955f0f3eb1422b3e6bbbfbf7eb518b9c17ae8d40feb84aaf36f5e5bd96075b2b4dbe538ac011962ac705 */ static const uint8_t nist_kas_ecc_cdh_testvector_201_out[] = { /* ZIUT */ 0x01, 0x76, 0xbc, 0x5c, 0x40, 0x36, 0xce, 0x51, 0x25, 0x49, 0x3a, 0x58, 0xdd, 0x26, 0x5f, 0x04, 0xd1, 0x90, 0xf0, 0x28, 0x36, 0x6f, 0x77, 0x99, 0xf7, 0x0a, 0xed, 0xf2, 0x9a, 0xc6, 0x7b, 0x5b, 0x37, 0xc3, 0x72, 0x38, 0x59, 0x33, 0x77, 0xa4, 0x79, 0x44, 0xf5, 0xb6, 0x39, 0xf4, 0x38, 0x56, 0xdb, 0xd5, 0x60, 0xec }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_202_public_x[] = { /* QCAVSx */ 0x01, 0x0c, 0x4c, 0x68, 0xa9, 0xf1, 0xa6, 0x2a, 0x32, 0x65, 0x56, 0xb6, 0xd9, 0x77, 0xa7, 0x9c, 0xd9, 0xc4, 0x47, 0x6c, 0x05, 0xb1, 0xad, 0xd4, 0xa2, 0xcf, 0xd3, 0x06, 0x82, 0x49, 0xa3, 0xc3, 0x92, 0x38, 0x22, 0x42, 0x8d, 0x35, 0x2c, 0x5d, 0x74, 0xe5, 0xd6, 0x4a, 0xcc, 0xee, 0xdb, 0xda, 0xa6, 0xef, 0xbe, 0x4c }; static const uint8_t nist_kas_ecc_cdh_testvector_202_public_y[] = { /* QCAVSy */ 0x00, 0x86, 0x6a, 0xe9, 0x40, 0xdd, 0x31, 0xb5, 0xe6, 0xe3, 0xf2, 0x0b, 0x3b, 0x4d, 0x87, 0xa6, 0xa0, 0x2c, 0x78, 0x17, 0x3c, 0x80, 0xaa, 0x51, 0x0a, 0x6e, 0xdf, 0xf8, 0x52, 0xc6, 0x29, 0xe6, 0x06, 0x4d, 0xf5, 0xd7, 0xc6, 0x00, 0xfd, 0x98, 0xe5, 0x8e, 0x8e, 0x8c, 0x66, 0x2b, 0xb4, 0xb9, 0x6c, 0x8b, 0xa9, 0x05 }; static const uint8_t nist_kas_ecc_cdh_testvector_202_private[] = { /* dIUT */ 0x00, 0x65, 0x18, 0x8b, 0xb7, 0x79, 0x6e, 0x45, 0x1f, 0x44, 0x72, 0x7a, 0x1a, 0x06, 0x74, 0x44, 0x0d, 0xd3, 0x3d, 0x25, 0x8a, 0xd2, 0xfd, 0xc7, 0xb9, 0x8f, 0xaf, 0x64, 0xb1, 0x1e, 0x7e, 0x8c, 0xe5, 0xe8, 0xc2, 0x1e, 0x79, 0x9f, 0x1f, 0xf2, 0xfd, 0x29, 0xd4, 0xc9, 0x4a, 0xa1, 0x58, 0x96, 0x20, 0x68, 0xa5, 0x9f }; /* QIUTx = 0032c5768452f3c1f3bc54879379ad420891267742b37fb096ee7b8c21ceed0041e9470cec3bedcb799e90bdbb31192083ff0344 */ /* QIUTy = 00f9c6122927fb824246d1dc1ce0fde71a6849a82d41065da1d85256a9b1979bf7f286366fc8b324893ebe34e59c046007399414 */ static const uint8_t nist_kas_ecc_cdh_testvector_202_out[] = { /* ZIUT */ 0x00, 0x57, 0x5d, 0x9e, 0x7f, 0x70, 0xa4, 0xa1, 0xc5, 0xc8, 0x07, 0xb6, 0xb5, 0xd6, 0xb7, 0x33, 0x0b, 0xdd, 0x76, 0x4d, 0xb2, 0xaa, 0x60, 0xf3, 0xbf, 0xe4, 0x97, 0xe6, 0xbf, 0xe9, 0x0f, 0x03, 0x8f, 0xb4, 0xf6, 0xac, 0xf7, 0xac, 0x06, 0xef, 0xc3, 0xd1, 0x57, 0xc3, 0xdc, 0x90, 0x7b, 0x2a, 0xe0, 0x93, 0xc6, 0xa2 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_203_public_x[] = { /* QCAVSx */ 0x01, 0xe4, 0xd5, 0x80, 0xd5, 0xe9, 0xad, 0x81, 0x67, 0x1c, 0x6c, 0xd6, 0x62, 0xd5, 0x56, 0x9b, 0xaf, 0xe4, 0xd7, 0x5a, 0xa4, 0xf4, 0x49, 0xae, 0xd5, 0x6b, 0xd8, 0x00, 0x61, 0x95, 0x20, 0xc9, 0xf3, 0x2c, 0x4e, 0x23, 0x0c, 0x4d, 0x91, 0xb1, 0xc4, 0x11, 0xf9, 0x08, 0x6d, 0x52, 0x91, 0xba, 0x13, 0x70, 0x14, 0xa2 }; static const uint8_t nist_kas_ecc_cdh_testvector_203_public_y[] = { /* QCAVSy */ 0x00, 0x0c, 0x8f, 0xfb, 0x42, 0x39, 0x2f, 0xf3, 0x97, 0xbb, 0xd4, 0x67, 0x97, 0x2f, 0x3e, 0xd2, 0x51, 0xd5, 0xa0, 0x79, 0x96, 0x5d, 0xa0, 0xb1, 0xd2, 0xa3, 0xcc, 0x16, 0xc3, 0x1d, 0x25, 0x5d, 0xce, 0x98, 0x86, 0x93, 0x7b, 0x2d, 0xc9, 0x41, 0xea, 0xb0, 0xd8, 0xbe, 0x8b, 0xbc, 0xd1, 0x5a, 0xa6, 0xed, 0x96, 0xd6 }; static const uint8_t nist_kas_ecc_cdh_testvector_203_private[] = { /* dIUT */ 0x00, 0x6c, 0xb1, 0x7c, 0x3f, 0xc2, 0x1a, 0xb4, 0x8e, 0x5c, 0x37, 0x17, 0xc7, 0x91, 0x11, 0x8d, 0x47, 0x61, 0xe2, 0xc5, 0x19, 0x86, 0xbf, 0x14, 0x79, 0x42, 0x55, 0x4d, 0xc5, 0xa1, 0x8b, 0xf9, 0xbb, 0x6c, 0x67, 0xbd, 0xbb, 0xa9, 0x08, 0xa1, 0xe8, 0xba, 0x8e, 0x77, 0x90, 0xf5, 0x9a, 0x39, 0x71, 0x34, 0xf6, 0x83 }; /* QIUTx = 002b890418afc5797c9746a44ca059367ae0663bcf058156860c613ee05e11da3f2f799c70a68fe72fd5dac2469daa18107029de */ /* QIUTy = 01356904b197bf9e0657f4349d252bbb375c66206fc0d8312599bdbefee8608ec948dce486807baa535ed06adac9c797634711ab */ static const uint8_t nist_kas_ecc_cdh_testvector_203_out[] = { /* ZIUT */ 0x00, 0xce, 0x87, 0xaa, 0x5e, 0x77, 0x00, 0x38, 0x4d, 0xf5, 0x9d, 0x3f, 0x10, 0x75, 0xd2, 0x82, 0xc1, 0xaa, 0x51, 0x13, 0x91, 0xc4, 0x2e, 0xf6, 0x09, 0xb8, 0xde, 0x12, 0x64, 0xec, 0xa8, 0xf7, 0x73, 0x7d, 0xf9, 0x15, 0x65, 0xc7, 0x3e, 0xe8, 0x84, 0xea, 0x88, 0x2d, 0x47, 0xc5, 0x6d, 0x97, 0x91, 0x41, 0xf0, 0xf2 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_204_public_x[] = { /* QCAVSx */ 0x00, 0xb7, 0xd1, 0x93, 0x54, 0xca, 0xdc, 0xc9, 0x47, 0x08, 0x26, 0x7a, 0xed, 0x8b, 0x23, 0xe4, 0x84, 0xe3, 0x2a, 0x03, 0x81, 0x4b, 0x02, 0x6a, 0x80, 0x0f, 0x5b, 0xa0, 0x1e, 0x92, 0x04, 0xc4, 0x30, 0x52, 0xe4, 0xd4, 0x7c, 0x6f, 0xcd, 0x92, 0x32, 0x96, 0x54, 0xe0, 0xe9, 0x01, 0x5b, 0x01, 0x2f, 0x79, 0x34, 0x4a }; static const uint8_t nist_kas_ecc_cdh_testvector_204_public_y[] = { /* QCAVSy */ 0x01, 0x79, 0x95, 0xc1, 0x57, 0x96, 0xc5, 0xae, 0x93, 0xe0, 0xa2, 0x07, 0xa2, 0x70, 0x70, 0x04, 0xfb, 0xb1, 0xa4, 0x9a, 0x0d, 0x47, 0xfd, 0x40, 0x4f, 0x12, 0xd5, 0x78, 0x49, 0xd8, 0x39, 0x7c, 0xd4, 0xd2, 0xc6, 0xd2, 0xb4, 0xb9, 0x0f, 0x86, 0x44, 0x03, 0xd4, 0xac, 0xd1, 0x6a, 0x32, 0xb7, 0xff, 0x48, 0x77, 0xb4 }; static const uint8_t nist_kas_ecc_cdh_testvector_204_private[] = { /* dIUT */ 0x00, 0x11, 0xd4, 0x3b, 0xc0, 0x8d, 0xa9, 0xce, 0x5d, 0xef, 0xc9, 0x4b, 0x4e, 0xf9, 0x0d, 0x93, 0x24, 0xde, 0x08, 0x03, 0x47, 0xff, 0x4d, 0xf8, 0x66, 0x45, 0xd3, 0x25, 0x60, 0x3a, 0x2d, 0xff, 0xd2, 0x8e, 0xca, 0xf0, 0x77, 0x5e, 0xc5, 0x3c, 0xaf, 0x5a, 0x55, 0x4e, 0xaf, 0x8b, 0x68, 0x48, 0x7d, 0xf8, 0x86, 0x54 }; /* QIUTx = 01257b6abd470d294b59ddaedacd545dcf43808af890f576288803342fc61eb396f560af74342e10bb94d224c24d8e5900e5b972 */ /* QIUTy = 01dccad97ecef4387a1cf512b16dd5bc7ab615fbc5087ac19d5fc2762f615b4904ea39343bbb185db64a19f7f70ecf0d557b15e8 */ static const uint8_t nist_kas_ecc_cdh_testvector_204_out[] = { /* ZIUT */ 0x00, 0x69, 0x1d, 0xd6, 0xb5, 0x17, 0x77, 0x02, 0xd6, 0xa0, 0xb1, 0xf8, 0xb0, 0x7f, 0x3b, 0x01, 0x84, 0x78, 0x68, 0x0d, 0xe7, 0xee, 0x07, 0x92, 0x72, 0xff, 0x75, 0x65, 0x93, 0x35, 0xc9, 0x6a, 0xfc, 0xea, 0x76, 0x50, 0xca, 0xa0, 0x1f, 0x99, 0x6a, 0xa3, 0x79, 0x46, 0xb7, 0x8e, 0x14, 0xa8, 0x3e, 0x57, 0x9f, 0xb4 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_205_public_x[] = { /* QCAVSx */ 0x00, 0xf2, 0xa1, 0x1c, 0xcd, 0x3a, 0x53, 0xc9, 0x5e, 0xa9, 0x8f, 0x31, 0x44, 0xfb, 0x77, 0xd4, 0xa6, 0x84, 0xf9, 0xa1, 0xf4, 0x23, 0xeb, 0x81, 0xe3, 0xa8, 0xbf, 0xbe, 0x22, 0xb6, 0x80, 0xf2, 0x18, 0x70, 0xf5, 0x8c, 0xae, 0xb6, 0x94, 0x6c, 0x6b, 0x3b, 0x87, 0x36, 0x99, 0xcf, 0xfd, 0x31, 0x40, 0x63, 0xf4, 0x08 }; static const uint8_t nist_kas_ecc_cdh_testvector_205_public_y[] = { /* QCAVSy */ 0x00, 0xfd, 0xf2, 0x6e, 0xed, 0xe6, 0xcb, 0xa7, 0x24, 0x82, 0x40, 0x72, 0x09, 0x06, 0xce, 0x07, 0x6c, 0xc4, 0x32, 0x2d, 0x18, 0xbc, 0x76, 0x83, 0xd2, 0x24, 0x0b, 0xa6, 0x84, 0x76, 0xce, 0x79, 0x02, 0x27, 0x80, 0xb2, 0xfa, 0x54, 0xe0, 0xf7, 0xc7, 0x65, 0x28, 0xb7, 0x7f, 0xa6, 0x31, 0xfe, 0x5a, 0xbb, 0x5b, 0x95 }; static const uint8_t nist_kas_ecc_cdh_testvector_205_private[] = { /* dIUT */ 0x00, 0x0d, 0x6b, 0x25, 0x96, 0x56, 0xd5, 0x26, 0x77, 0x7d, 0xed, 0xb5, 0x24, 0x6a, 0x19, 0x2f, 0x0c, 0x05, 0xc7, 0x27, 0x0a, 0x3b, 0x4e, 0x64, 0xa9, 0xd6, 0xc8, 0x77, 0xcd, 0x06, 0xd2, 0x96, 0x2a, 0x1a, 0xc8, 0x4e, 0xc2, 0xd8, 0x97, 0x65, 0xf9, 0x67, 0xf6, 0x04, 0x4f, 0x2d, 0xfa, 0x56, 0x90, 0x31, 0x07, 0xf3 }; /* QIUTx = 0193afa13bd1e081cee5df1286fe44a293b7d1b10c290a5f2ae7be2d02736009a26d83aaaa9017a8c8bf60efa15fcead07767d48 */ /* QIUTy = 01d02fd66a7806c4c8445fa615254ff32bb9c1d85a3904f939c1061e250d3eb6413130a2a5570994795310e96dc3aff3b8218ad3 */ static const uint8_t nist_kas_ecc_cdh_testvector_205_out[] = { /* ZIUT */ 0x01, 0x36, 0xf5, 0xc0, 0x4c, 0xf9, 0xa5, 0x6d, 0xb2, 0x4a, 0xd9, 0x9b, 0xd2, 0x86, 0xfe, 0xb8, 0x00, 0xae, 0xa3, 0x8d, 0x44, 0xf8, 0x19, 0xbe, 0x1c, 0x2a, 0x9d, 0xba, 0x15, 0xc6, 0x35, 0xc4, 0xe1, 0x22, 0x89, 0x35, 0x70, 0x23, 0x3a, 0x4c, 0x57, 0x54, 0xa4, 0x14, 0x99, 0xea, 0xfa, 0x39, 0xa3, 0x5a, 0xa5, 0x7e }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_206_public_x[] = { /* QCAVSx */ 0x01, 0x17, 0x44, 0x9f, 0xbe, 0xa6, 0xb2, 0xd5, 0xf4, 0xe8, 0xe4, 0xd3, 0x9a, 0x72, 0x28, 0x42, 0x4c, 0xf0, 0x6f, 0x45, 0x6b, 0xf3, 0xae, 0x39, 0xbc, 0x1f, 0xb2, 0xa9, 0x9e, 0x41, 0x83, 0xb7, 0x16, 0xe1, 0x94, 0xfc, 0x50, 0x74, 0x65, 0x66, 0x4d, 0x00, 0x9d, 0x5b, 0xce, 0xe3, 0xa4, 0x26, 0xba, 0x93, 0x2c, 0x10 }; static const uint8_t nist_kas_ecc_cdh_testvector_206_public_y[] = { /* QCAVSy */ 0x01, 0x14, 0x6d, 0x32, 0xb7, 0x0f, 0x09, 0xe6, 0x5f, 0xcf, 0x69, 0xeb, 0x9a, 0xe6, 0x61, 0x62, 0xd1, 0x0b, 0xd0, 0x43, 0x69, 0xde, 0x8e, 0x81, 0x87, 0xfa, 0x9c, 0x3d, 0x1b, 0x5d, 0xda, 0x26, 0xf1, 0x0b, 0x46, 0x9c, 0xd4, 0x92, 0x5c, 0xa3, 0x7e, 0x09, 0x94, 0x41, 0x57, 0x57, 0xe6, 0x89, 0x5e, 0x58, 0x81, 0x45 }; static const uint8_t nist_kas_ecc_cdh_testvector_206_private[] = { /* dIUT */ 0x00, 0x4b, 0xf7, 0x35, 0x1b, 0x19, 0x58, 0x75, 0xd0, 0x1f, 0x63, 0x06, 0xca, 0x12, 0x7d, 0xb8, 0xa1, 0xa5, 0xf5, 0x97, 0x71, 0x9c, 0x0d, 0x10, 0xe1, 0xd6, 0x8f, 0x5d, 0x48, 0x55, 0xbf, 0x07, 0x60, 0x57, 0x90, 0x69, 0x1f, 0xcd, 0x0d, 0x8b, 0x5d, 0xb1, 0x37, 0xd3, 0xfc, 0x26, 0x79, 0xde, 0x75, 0xa0, 0x67, 0x81 }; /* QIUTx = 01d386645aaa48e2fd0950e6a9ace9dff62c8f5e94cdba45bd73c6be6bf7b763a2c9a807846312da3ab821c049ac0861f82337f0 */ /* QIUTy = 002a6436ef8a1261aecc38c821da774a391fdcc7750c9437d9dfe64c823350813999f0fd4f07f1d6d98074098612bc52044249d4 */ static const uint8_t nist_kas_ecc_cdh_testvector_206_out[] = { /* ZIUT */ 0x00, 0x4f, 0x68, 0x4f, 0x9d, 0x55, 0x9d, 0x16, 0x48, 0x5f, 0x00, 0x23, 0xbf, 0x01, 0x20, 0x06, 0x26, 0x5e, 0xd8, 0x1f, 0x06, 0xfb, 0xc1, 0x44, 0x13, 0x34, 0xa5, 0x59, 0xe5, 0x50, 0x0a, 0x3f, 0x77, 0x60, 0x35, 0x65, 0x01, 0x36, 0x94, 0x02, 0x3e, 0x0d, 0x8f, 0x44, 0xfd, 0x12, 0xdc, 0xf6, 0x9e, 0xb8, 0xd6, 0x54 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_207_public_x[] = { /* QCAVSx */ 0x01, 0x19, 0x98, 0x0f, 0x11, 0x14, 0x9d, 0xee, 0x5e, 0x2c, 0x2d, 0x00, 0x56, 0x1d, 0x3c, 0x26, 0xa4, 0x2a, 0x5a, 0x44, 0xe8, 0x74, 0x76, 0x5d, 0xdd, 0xa4, 0xd8, 0x18, 0xea, 0x70, 0x4e, 0xdb, 0xba, 0x23, 0xab, 0xed, 0x5e, 0x08, 0xbe, 0x92, 0xd6, 0x55, 0xd7, 0x9e, 0x55, 0xc5, 0xbc, 0x54, 0x78, 0x7b, 0x4d, 0xd4 }; static const uint8_t nist_kas_ecc_cdh_testvector_207_public_y[] = { /* QCAVSy */ 0x01, 0x36, 0x6b, 0x3d, 0xda, 0x3e, 0x98, 0x79, 0xc4, 0x48, 0x1d, 0xdc, 0x36, 0x7e, 0x51, 0xc1, 0xc0, 0x54, 0x19, 0x45, 0x96, 0x46, 0x36, 0xd5, 0x02, 0x16, 0x87, 0xc2, 0x85, 0xc4, 0x7d, 0x40, 0xe7, 0x9f, 0xf7, 0xf0, 0xbb, 0x56, 0xa9, 0x3a, 0xc5, 0x60, 0xbe, 0x8d, 0xcb, 0x97, 0x0f, 0x58, 0xb2, 0x3b, 0x10, 0xa7 }; static const uint8_t nist_kas_ecc_cdh_testvector_207_private[] = { /* dIUT */ 0x00, 0x69, 0xda, 0x65, 0x90, 0x10, 0x34, 0x5c, 0x69, 0x00, 0xfd, 0xec, 0xb3, 0x1d, 0xf9, 0xba, 0xbe, 0xdb, 0xe4, 0x25, 0x33, 0x98, 0x29, 0x0b, 0x34, 0x01, 0x2f, 0xb1, 0x34, 0xbc, 0x59, 0x14, 0x75, 0x72, 0xe6, 0x2a, 0x60, 0xf5, 0xca, 0xcc, 0xed, 0x87, 0xb0, 0xf8, 0xd1, 0xff, 0x7c, 0x04, 0x9d, 0xfe, 0x96, 0x92 }; /* QIUTx = 0038687019f7c219ddd9567b20f5ea1e8a50451dd40bf5b65f7b2e133de6f36e4a3f8fa2f977efe920f845d176c8a57023cc55c2 */ /* QIUTy = 0149397fbc42bacf85c59e04535df1d52715761eea997d4ff87204866cdc3d4a54c2425ad214a7a0dd592f4a991ab768c8f404be */ static const uint8_t nist_kas_ecc_cdh_testvector_207_out[] = { /* ZIUT */ 0x00, 0x13, 0x78, 0x94, 0xf6, 0x37, 0x46, 0x0a, 0x63, 0x57, 0x68, 0x24, 0x53, 0x69, 0x44, 0xcd, 0xdb, 0x42, 0xdf, 0xe6, 0x31, 0x69, 0xc8, 0x40, 0x40, 0xa0, 0x34, 0x5a, 0xd7, 0x51, 0x6e, 0xc4, 0xf1, 0xad, 0x00, 0xbb, 0x4d, 0xe2, 0x0e, 0xa6, 0xea, 0x43, 0x82, 0x4b, 0x9b, 0x0f, 0x74, 0xdf, 0xa6, 0x88, 0x1c, 0xfc }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_208_public_x[] = { /* QCAVSx */ 0x01, 0xfa, 0x39, 0xb5, 0xd3, 0x37, 0x5d, 0x43, 0x24, 0x7a, 0xc9, 0x50, 0x00, 0x61, 0xeb, 0xff, 0x7a, 0x0c, 0x15, 0xb8, 0xc5, 0xdf, 0xe9, 0xc7, 0x51, 0x78, 0x43, 0x86, 0xc9, 0x81, 0x86, 0x0d, 0xe6, 0xe1, 0xb9, 0x58, 0x4d, 0xa0, 0xf4, 0x21, 0x19, 0x41, 0x7f, 0x32, 0x33, 0x82, 0x90, 0x91, 0x0a, 0x9a, 0x25, 0x9e }; static const uint8_t nist_kas_ecc_cdh_testvector_208_public_y[] = { /* QCAVSy */ 0x00, 0x2b, 0xde, 0xcd, 0x50, 0x2b, 0xa6, 0x4a, 0x6f, 0x21, 0xd0, 0x8f, 0xa4, 0x25, 0x03, 0x89, 0xd4, 0x27, 0x03, 0x24, 0x45, 0x6e, 0x94, 0x41, 0x65, 0x74, 0x95, 0xc7, 0x2a, 0xd7, 0x60, 0xfb, 0x34, 0x83, 0x25, 0xf8, 0x9b, 0x7a, 0x54, 0x04, 0xa2, 0xc2, 0x1c, 0x2a, 0xa0, 0x77, 0x11, 0xbc, 0xf5, 0xf3, 0x04, 0x12 }; static const uint8_t nist_kas_ecc_cdh_testvector_208_private[] = { /* dIUT */ 0x00, 0x06, 0xdf, 0xda, 0xb3, 0xca, 0x1b, 0x2a, 0x28, 0x21, 0xce, 0xfd, 0xb5, 0x87, 0x2b, 0xb9, 0x5f, 0x02, 0x31, 0x61, 0xae, 0x4e, 0x2d, 0x54, 0x9d, 0x0f, 0xb1, 0xf3, 0x82, 0x56, 0x34, 0x13, 0x58, 0x44, 0x91, 0x65, 0x7d, 0xb1, 0x01, 0xc3, 0x23, 0x51, 0x48, 0x32, 0xc3, 0x63, 0xf6, 0x36, 0xa9, 0xe6, 0x9e, 0x83 }; /* QIUTx = 003e9a9b5f282066e233870dcb00c4aed2d73a331f79d49c8d5c2d93908b0ef5e72b748814d1b8840642d75b7a9a55301b1e7c82 */ /* QIUTy = 01085f57691e04afac6e884e2fdbd8df802f4d435bce611231ab3274761ead5e2e6a344a53f33c0fa156e3132062f72bcda3fc0c */ static const uint8_t nist_kas_ecc_cdh_testvector_208_out[] = { /* ZIUT */ 0x00, 0xf0, 0x3b, 0x0b, 0x43, 0xa3, 0x51, 0x31, 0x16, 0x89, 0xeb, 0x1d, 0x3f, 0xc4, 0x57, 0x01, 0x3f, 0x29, 0x4a, 0x7d, 0x02, 0xad, 0x85, 0x0c, 0x72, 0xe4, 0xff, 0x9b, 0x64, 0xce, 0x68, 0xa4, 0x7b, 0xeb, 0x49, 0xbc, 0x5b, 0xcb, 0xdc, 0x82, 0x85, 0x34, 0xf8, 0xc8, 0xa5, 0xe1, 0x3d, 0xe5, 0xfe, 0x52, 0x2e, 0xb0 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_209_public_x[] = { /* QCAVSx */ 0x01, 0xb2, 0x55, 0xd5, 0xbb, 0x75, 0xd2, 0x59, 0x70, 0x30, 0x1d, 0xe9, 0xe0, 0xe3, 0x95, 0x9a, 0x12, 0x20, 0x5d, 0x51, 0x1f, 0x8e, 0x64, 0xf0, 0x42, 0xa0, 0x1c, 0x95, 0x0d, 0xb4, 0x71, 0xb1, 0xd6, 0xd5, 0x84, 0x7f, 0x75, 0x66, 0x9e, 0xeb, 0x0b, 0xf1, 0x87, 0xf1, 0x55, 0x9d, 0xb3, 0xb2, 0x2a, 0xee, 0xc0, 0x96 }; static const uint8_t nist_kas_ecc_cdh_testvector_209_public_y[] = { /* QCAVSy */ 0x01, 0x7e, 0x59, 0x0c, 0xfa, 0x85, 0x53, 0x49, 0x13, 0x61, 0x98, 0xc2, 0xdd, 0xd8, 0xa5, 0x21, 0x08, 0x82, 0x47, 0x3c, 0x9d, 0xd5, 0x91, 0xc0, 0x2e, 0x20, 0x2c, 0xa0, 0x40, 0x4b, 0xbc, 0x9f, 0x63, 0x91, 0xd7, 0x3a, 0xe0, 0x11, 0xda, 0xc9, 0x96, 0x51, 0x55, 0xd2, 0x65, 0x01, 0x39, 0xfe, 0x2e, 0x54, 0xec, 0x67 }; static const uint8_t nist_kas_ecc_cdh_testvector_209_private[] = { /* dIUT */ 0x00, 0x29, 0xb2, 0xfc, 0xb3, 0x08, 0x59, 0x6a, 0x97, 0x5c, 0x5b, 0x4c, 0xd1, 0xe7, 0x52, 0x67, 0xc5, 0x42, 0x4e, 0x00, 0x77, 0x41, 0x14, 0xec, 0x20, 0x51, 0xa5, 0x71, 0xb2, 0x99, 0x76, 0x61, 0x89, 0xfa, 0xd2, 0x4e, 0x92, 0xf9, 0x6e, 0x3d, 0x52, 0x77, 0x36, 0xea, 0x48, 0x03, 0x67, 0xbd, 0xbd, 0xd0, 0x53, 0x0e }; /* QIUTx = 014c757399be201e08afd8b4a671e7d3b6d7f8844498ab592e1bf69315347ce82dbd785d45922660d4d0d27fa2b0ac62e707fcec */ /* QIUTy = 0098f0773d3efe9c290a992eca05875d3463f0736b2dfef4affd9ff00f96ade53399917dea074c798fc535738f0c5689a2447f86 */ static const uint8_t nist_kas_ecc_cdh_testvector_209_out[] = { /* ZIUT */ 0x01, 0x8f, 0x55, 0xb8, 0x1f, 0x15, 0xf8, 0x62, 0xae, 0xd0, 0x42, 0xf3, 0x74, 0x33, 0x05, 0x0a, 0xc6, 0x17, 0x18, 0xc9, 0x93, 0x9d, 0x43, 0x2b, 0x2a, 0x20, 0xe1, 0x2d, 0x64, 0x7f, 0x99, 0x75, 0x3b, 0x8d, 0xd5, 0x12, 0x7c, 0xf8, 0x96, 0x32, 0x47, 0xfe, 0x7e, 0x1d, 0x5a, 0xde, 0x14, 0x42, 0x22, 0x9b, 0xc6, 0x46 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_210_public_x[] = { /* QCAVSx */ 0x00, 0xec, 0xf7, 0x06, 0x4f, 0x52, 0x8f, 0xad, 0xae, 0x38, 0x0c, 0xb3, 0x82, 0x98, 0x48, 0x11, 0x04, 0x7a, 0x0d, 0x7d, 0xd9, 0xa8, 0xde, 0x8e, 0x76, 0xf8, 0x17, 0x8a, 0xa6, 0x00, 0x69, 0xe7, 0x7a, 0x94, 0x8a, 0xcf, 0xa7, 0x4d, 0x2c, 0x77, 0xa7, 0x68, 0x51, 0x65, 0x9a, 0x98, 0x19, 0x70, 0x54, 0xda, 0x8d, 0x44 }; static const uint8_t nist_kas_ecc_cdh_testvector_210_public_y[] = { /* QCAVSy */ 0x00, 0xb9, 0x8e, 0x13, 0x49, 0x7f, 0x77, 0x60, 0x72, 0x71, 0x1c, 0x42, 0xc1, 0x8d, 0xbf, 0xc8, 0xeb, 0x8c, 0x85, 0x23, 0xff, 0x63, 0x3a, 0xf9, 0x88, 0xa1, 0xf2, 0x42, 0xed, 0x3c, 0x3c, 0x56, 0x5d, 0x18, 0xcf, 0x22, 0x4f, 0x87, 0x51, 0xf2, 0x94, 0x2e, 0x36, 0x0b, 0xa1, 0x6e, 0x0f, 0x58, 0x30, 0x95, 0x29, 0x19 }; static const uint8_t nist_kas_ecc_cdh_testvector_210_private[] = { /* dIUT */ 0x00, 0x1b, 0x98, 0x01, 0x5c, 0x02, 0x02, 0xea, 0x16, 0x41, 0x79, 0x71, 0xa3, 0x73, 0x04, 0x25, 0x08, 0x39, 0xbd, 0x6a, 0x6e, 0x5d, 0x83, 0x49, 0x7f, 0x7f, 0x93, 0xf0, 0xf7, 0x47, 0x2a, 0x21, 0xfc, 0xe4, 0xbe, 0x5b, 0xe7, 0x76, 0xe9, 0x09, 0x59, 0xdb, 0xc4, 0x1a, 0x0e, 0x85, 0xed, 0x22, 0x58, 0x37, 0xe8, 0xd5 }; /* QIUTx = 01fec09f94571614e7cd8e958ebcd7a2fcd8c248d408cdba359630545c31383922774d3b24e20591d8b41e954e16654fe85cbaca */ /* QIUTy = 0031e0eb1dd1ce467a8b78d10d25b9de92cfdc2773831e6e28a152d02ae2a5a510994cc010462254441ea41121c0677fb4178bda */ static const uint8_t nist_kas_ecc_cdh_testvector_210_out[] = { /* ZIUT */ 0x00, 0x2b, 0x56, 0x0d, 0x19, 0x49, 0x29, 0x7d, 0xc7, 0xe1, 0xbb, 0xe8, 0xce, 0x49, 0xa5, 0x95, 0x76, 0x29, 0x24, 0xaf, 0xcf, 0x02, 0x71, 0xe9, 0xc4, 0x93, 0xc1, 0x8a, 0xd5, 0xcb, 0xfc, 0xea, 0x5f, 0x39, 0x00, 0xc7, 0xb7, 0x93, 0xae, 0x5d, 0xd4, 0x4f, 0x48, 0x88, 0x4b, 0x0b, 0xc3, 0xb5, 0x2c, 0x66, 0xe0, 0x5a }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_211_public_x[] = { /* QCAVSx */ 0x00, 0x4e, 0x05, 0xc3, 0x4d, 0xac, 0x44, 0xe6, 0xe1, 0xb0, 0x8c, 0xdf, 0xae, 0x63, 0x57, 0xc2, 0x0d, 0xb7, 0xa5, 0x44, 0xdc, 0x25, 0x3d, 0xff, 0x1c, 0x23, 0xd4, 0xdb, 0xa8, 0x71, 0xb9, 0x67, 0x81, 0xb6, 0xa6, 0x16, 0x38, 0xd7, 0x38, 0x65, 0xda, 0xfe, 0x0a, 0x94, 0x43, 0xc3, 0xec, 0x32, 0x88, 0x57, 0xd2, 0x3e }; static const uint8_t nist_kas_ecc_cdh_testvector_211_public_y[] = { /* QCAVSy */ 0x01, 0x22, 0x6c, 0x42, 0x77, 0x78, 0xbb, 0x22, 0x46, 0x24, 0xcd, 0x21, 0x54, 0x93, 0xd7, 0xa4, 0xf3, 0x2a, 0x4f, 0x14, 0x19, 0x79, 0x23, 0x64, 0x09, 0x50, 0x5d, 0x8c, 0xf5, 0x8d, 0x81, 0xdf, 0xd3, 0xc7, 0x93, 0xe5, 0x95, 0x43, 0xa7, 0x80, 0x31, 0x4f, 0x3c, 0xd8, 0xee, 0x17, 0x66, 0x4d, 0xc2, 0xe4, 0x63, 0x9e }; static const uint8_t nist_kas_ecc_cdh_testvector_211_private[] = { /* dIUT */ 0x00, 0x47, 0x3b, 0xce, 0xcb, 0x13, 0x77, 0x11, 0xe5, 0xe8, 0x97, 0x63, 0xa4, 0x0f, 0x77, 0xdb, 0xe2, 0xea, 0x8c, 0x25, 0x09, 0xd2, 0x09, 0x06, 0x4e, 0x39, 0xcf, 0x90, 0x5a, 0xfa, 0xa9, 0x01, 0x08, 0x5f, 0x8e, 0x79, 0x5c, 0x9b, 0x80, 0x17, 0xc9, 0xa5, 0xd0, 0xa1, 0xb9, 0x68, 0x12, 0xc1, 0x24, 0xa3, 0xff, 0xbf }; /* QIUTx = 01c8e9adc4816e6606ffff5e1a7d48a7854c35aaf055d31833f0cabde8bbc4d2458e3cd3c82a4af80745f595b3ba12f8b5c0ce90 */ /* QIUTy = 00fc43f193b5589aee62985735e3628374dd45a86a61baaf78c21fa6e787856ea6b8b88316540571825865ce6b8578add5faa69f */ static const uint8_t nist_kas_ecc_cdh_testvector_211_out[] = { /* ZIUT */ 0x00, 0x0b, 0x43, 0xcb, 0x53, 0x9b, 0xb4, 0xbb, 0x42, 0xf1, 0x95, 0xff, 0xdb, 0xcd, 0xeb, 0x48, 0x2b, 0x69, 0x30, 0x1c, 0x01, 0x55, 0xa8, 0x40, 0xcd, 0x38, 0x1f, 0x55, 0xc4, 0x65, 0xa8, 0xe5, 0x7e, 0xc5, 0x1d, 0x65, 0x55, 0x87, 0x15, 0x37, 0xb5, 0x6b, 0xf8, 0x4a, 0x15, 0x44, 0xca, 0xe2, 0xb2, 0xb8, 0xeb, 0x38 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_212_public_x[] = { /* QCAVSx */ 0x01, 0x6f, 0x69, 0x60, 0xfd, 0x23, 0x57, 0xd2, 0xf7, 0x0b, 0x5f, 0x77, 0x8b, 0xe5, 0xe0, 0xaa, 0x71, 0x55, 0x6b, 0x9d, 0x2f, 0x4c, 0xce, 0xb1, 0x4f, 0x78, 0x12, 0xda, 0x85, 0x8a, 0xb8, 0x72, 0x81, 0x8b, 0x46, 0x10, 0xd4, 0x1a, 0x8f, 0x66, 0x20, 0x0b, 0x43, 0x43, 0x42, 0x22, 0x27, 0xd9, 0xfd, 0xdf, 0x71, 0x2e }; static const uint8_t nist_kas_ecc_cdh_testvector_212_public_y[] = { /* QCAVSy */ 0x00, 0xaa, 0xf5, 0x92, 0xa7, 0x25, 0xe7, 0x73, 0x83, 0x88, 0x89, 0x6b, 0x9b, 0xe9, 0xf7, 0x8c, 0x1c, 0x3d, 0x69, 0x72, 0xb9, 0xf9, 0x90, 0x34, 0xd0, 0x2c, 0xc0, 0xf9, 0x77, 0x6a, 0x9f, 0x6c, 0x2f, 0x9b, 0x7d, 0x50, 0x1f, 0x75, 0xbe, 0x18, 0x59, 0x9b, 0x08, 0x8c, 0x4c, 0x58, 0x81, 0xc6, 0x61, 0x46, 0xe5, 0xb9 }; static const uint8_t nist_kas_ecc_cdh_testvector_212_private[] = { /* dIUT */ 0x00, 0x20, 0xdd, 0xdd, 0x67, 0x13, 0x4a, 0x41, 0x83, 0x78, 0xba, 0xa0, 0xdd, 0xfc, 0x91, 0x11, 0xc0, 0xa2, 0xed, 0x49, 0x2b, 0x28, 0x95, 0x69, 0xdd, 0x00, 0x61, 0xbf, 0x12, 0x26, 0xd2, 0x35, 0xbd, 0xaa, 0x52, 0x03, 0xd3, 0xef, 0xa2, 0xbd, 0x01, 0x41, 0xd2, 0xac, 0xe2, 0x7c, 0x3a, 0xe8, 0xe6, 0xda, 0xf1, 0x1f }; /* QIUTx = 0167d577b2a43cc1a7d88a6be883c28dbf48c3e1fbf21ad83e7a7e3d753fb0b6d3f80cd1376fd98be260f494757cdc063256d5b2 */ /* QIUTy = 015ed7003b7d2bd5e0359303660add090049039cf7df396989ea18c702f704c45cf6fde7ad072d31253d1d5295e9c5d1d5c62c3b */ static const uint8_t nist_kas_ecc_cdh_testvector_212_out[] = { /* ZIUT */ 0x01, 0x13, 0xdd, 0x2c, 0xf8, 0x73, 0x2c, 0xeb, 0x8a, 0x89, 0x3e, 0x14, 0x9f, 0x13, 0xd5, 0x20, 0x26, 0xe5, 0xd8, 0x29, 0x32, 0x2d, 0x0f, 0x12, 0x33, 0xa6, 0x24, 0xfd, 0x6b, 0x74, 0xd5, 0x6e, 0x7e, 0x63, 0x74, 0xd7, 0x09, 0x42, 0xa2, 0x51, 0x52, 0xce, 0x50, 0x73, 0x83, 0x16, 0x60, 0x33, 0x3f, 0xb3, 0xe0, 0x70 }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_213_public_x[] = { /* QCAVSx */ 0x00, 0xf5, 0x49, 0xc4, 0x7d, 0xc8, 0xe9, 0x2f, 0xec, 0xd3, 0x8b, 0x57, 0x50, 0x89, 0x58, 0x80, 0xe4, 0x49, 0xf1, 0xe3, 0x1a, 0xbe, 0x0b, 0xb1, 0xea, 0xcc, 0x84, 0x29, 0x8f, 0x83, 0x61, 0x08, 0xe5, 0xa3, 0x08, 0xcc, 0xb9, 0x57, 0x8d, 0xcb, 0xd4, 0xbe, 0x61, 0x77, 0x75, 0x2e, 0xb2, 0x31, 0xe7, 0x8f, 0x01, 0x1c }; static const uint8_t nist_kas_ecc_cdh_testvector_213_public_y[] = { /* QCAVSy */ 0x00, 0x93, 0x66, 0x3e, 0xc3, 0xfc, 0xb5, 0x4d, 0x67, 0x68, 0x97, 0xbf, 0xc9, 0x5d, 0xb5, 0xe5, 0x4a, 0xd6, 0xee, 0xa1, 0xec, 0x7b, 0x46, 0xca, 0x4b, 0xf3, 0xd2, 0x53, 0x58, 0x39, 0xf1, 0x01, 0xcb, 0x3e, 0x6d, 0x5f, 0x11, 0xb6, 0xa3, 0x6b, 0xf4, 0x03, 0x63, 0xc3, 0x1c, 0x9f, 0x88, 0x13, 0x78, 0x62, 0x67, 0x4f }; static const uint8_t nist_kas_ecc_cdh_testvector_213_private[] = { /* dIUT */ 0x00, 0x60, 0x7a, 0x5a, 0x65, 0x32, 0x17, 0x7b, 0x52, 0xf2, 0x34, 0x92, 0x71, 0x7d, 0xd0, 0xa7, 0xb2, 0xaf, 0x98, 0xe0, 0x48, 0x84, 0xf7, 0x70, 0x75, 0xe4, 0x60, 0x44, 0x10, 0xc5, 0x04, 0x4a, 0x08, 0x46, 0x1e, 0xcf, 0x37, 0xc4, 0xef, 0xa3, 0xed, 0xc2, 0xcb, 0x66, 0x7c, 0x84, 0xb8, 0x64, 0x15, 0x93, 0x6b, 0x70 }; /* QIUTx = 000a5677ac6c00d2646054dbebfc536db0a9b351a2408a73e083ad62d182fb87cb80322c539553ecdbc213ce84c66ddf8dc1d234 */ /* QIUTy = 01327a0a3769240fda45f94bb07361c74aa8c8d119414a7b5666e25a3ab6881975396325a77f541a1ba268012a82c5110d2a49e2 */ static const uint8_t nist_kas_ecc_cdh_testvector_213_out[] = { /* ZIUT */ 0x00, 0xc8, 0xe6, 0x2a, 0xc2, 0x5c, 0x11, 0xe8, 0x6b, 0x98, 0x64, 0x2e, 0x4e, 0xc7, 0xad, 0xde, 0x9d, 0x94, 0x36, 0xf9, 0x33, 0x73, 0x69, 0xfb, 0x06, 0x5a, 0xbc, 0x9e, 0xa7, 0x84, 0xf9, 0x0b, 0x8b, 0x8b, 0xeb, 0xae, 0x35, 0xda, 0x92, 0x18, 0x54, 0x86, 0x19, 0x1d, 0xd9, 0xf4, 0x93, 0x70, 0xb1, 0x14, 0x8c, 0xe6 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_214_public_x[] = { /* QCAVSx */ 0x00, 0x41, 0x1e, 0x5d, 0x4c, 0x96, 0xe3, 0x5d, 0xe9, 0xb5, 0x41, 0xda, 0x5f, 0xac, 0x69, 0x13, 0x36, 0x46, 0x2c, 0x88, 0x2d, 0x8e, 0x8c, 0xe4, 0xd6, 0xeb, 0x71, 0x21, 0x41, 0x7e, 0x70, 0x95, 0x0c, 0x4d, 0x95, 0x02, 0xf6, 0x45, 0x65, 0xd5, 0xa6, 0xcf, 0xa7, 0x35, 0xc9, 0x0e, 0xef, 0x83, 0xc7, 0xb8, 0x61, 0xe2 }; static const uint8_t nist_kas_ecc_cdh_testvector_214_public_y[] = { /* QCAVSy */ 0x00, 0x96, 0xb9, 0x04, 0xe3, 0x7c, 0xa1, 0xc2, 0xdb, 0x59, 0xa5, 0x46, 0x15, 0x62, 0x7e, 0x1c, 0x33, 0x56, 0x16, 0x0f, 0xe1, 0x75, 0x28, 0x4a, 0xad, 0xc3, 0xb2, 0xfa, 0x06, 0xba, 0x0b, 0x30, 0xaa, 0xa0, 0x7c, 0x84, 0xe6, 0x4e, 0x48, 0x65, 0x2e, 0x5f, 0xeb, 0x30, 0x35, 0x95, 0x06, 0x6e, 0x0f, 0x84, 0x68, 0xf7 }; static const uint8_t nist_kas_ecc_cdh_testvector_214_private[] = { /* dIUT */ 0x00, 0x34, 0xda, 0x9a, 0x45, 0x37, 0x11, 0xf0, 0x4a, 0x0b, 0x1e, 0xa1, 0xb9, 0xaf, 0x70, 0x1e, 0x0d, 0xc3, 0xa5, 0x5c, 0xdd, 0x58, 0x5e, 0x43, 0xe3, 0xec, 0xf4, 0x1e, 0x93, 0x4e, 0xca, 0xf8, 0x80, 0xff, 0x16, 0x14, 0xdc, 0xe5, 0xcc, 0x99, 0x2a, 0x69, 0xad, 0xdf, 0xc4, 0x08, 0xda, 0xe1, 0xb0, 0x9b, 0x8d, 0x05 }; /* QIUTx = 01f7bff435547a89516d017d1bdac4cda36041a0d3dfd03258562b2e28f40cd64f6ae2b70457773f9675cffc40c021e4702b08d6 */ /* QIUTy = 0013c59a72f0c83f5bb90a0bfee798952fb91ee329c98c4b5914f445ae7c8483767052b5f529974621545ddcd6377f5e387d573c */ static const uint8_t nist_kas_ecc_cdh_testvector_214_out[] = { /* ZIUT */ 0x01, 0x25, 0x05, 0x74, 0x6f, 0x1a, 0x40, 0xef, 0x75, 0xf9, 0x50, 0x59, 0x52, 0x11, 0xce, 0x04, 0xf8, 0x7f, 0x1d, 0xaf, 0xff, 0xfd, 0xf8, 0xc1, 0x26, 0x00, 0xa9, 0xe2, 0x99, 0x4c, 0x8c, 0x1d, 0x8b, 0x19, 0xc0, 0xe0, 0x55, 0x9a, 0xdf, 0x9a, 0x94, 0x76, 0x2c, 0xb9, 0x83, 0x56, 0x9d, 0xe6, 0xd0, 0xd8, 0xba, 0xca }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_215_public_x[] = { /* QCAVSx */ 0x00, 0x0f, 0xa8, 0x24, 0x3f, 0x00, 0x0a, 0x33, 0x98, 0x80, 0x8a, 0x1f, 0x88, 0xff, 0xc5, 0xa3, 0x42, 0x96, 0x8f, 0xee, 0x5c, 0x7b, 0x26, 0xa9, 0xe1, 0xff, 0xa2, 0x6e, 0xfa, 0x88, 0x5e, 0x74, 0xe1, 0xc5, 0x62, 0x02, 0x7d, 0x95, 0xdb, 0x08, 0xcc, 0x15, 0xbd, 0x25, 0xa3, 0xfc, 0x11, 0xab, 0x4d, 0xc1, 0x3c, 0xa2 }; static const uint8_t nist_kas_ecc_cdh_testvector_215_public_y[] = { /* QCAVSy */ 0x00, 0xfe, 0xd6, 0x87, 0xc7, 0x19, 0x7f, 0xf1, 0xae, 0xb9, 0x80, 0xe7, 0x2a, 0x3a, 0x7c, 0x31, 0x81, 0x42, 0x05, 0x2c, 0x23, 0x89, 0xb0, 0x86, 0x6d, 0xb3, 0xb8, 0x7e, 0x5c, 0x80, 0x25, 0xe7, 0x9b, 0xb4, 0xf4, 0xf9, 0x96, 0xfa, 0x63, 0x52, 0xab, 0x9c, 0xb2, 0x01, 0x72, 0xef, 0x78, 0xd6, 0xff, 0xca, 0x90, 0x6f }; static const uint8_t nist_kas_ecc_cdh_testvector_215_private[] = { /* dIUT */ 0x00, 0x31, 0x41, 0xaf, 0xbb, 0xa8, 0xb4, 0xd9, 0xf0, 0xcb, 0xe8, 0x29, 0x7f, 0x36, 0x58, 0x73, 0x19, 0x67, 0x39, 0x46, 0x5e, 0x3e, 0x20, 0xa8, 0x9a, 0xf9, 0xfd, 0xf8, 0xb0, 0x1d, 0x19, 0x5a, 0xa1, 0x05, 0x2e, 0x61, 0x76, 0xb5, 0xfa, 0xd8, 0x56, 0x13, 0x6b, 0x6b, 0x32, 0x0e, 0xeb, 0xfc, 0x08, 0xc1, 0xcd, 0x01 }; /* QIUTx = 01805ffc576e8a45f06297b2335d03abc8adfd15ad37e76d80d3b4180d5f72efc90f3f2b036acd817f40fd49064aa25ea383c82e */ /* QIUTy = 01f22da6b50ac5628943f05b141493cacc0f02bcdf3bffdb43582343b68615761a180bd7d1ab1ddc15f5374a8f665d13b4b91272 */ static const uint8_t nist_kas_ecc_cdh_testvector_215_out[] = { /* ZIUT */ 0x01, 0x9a, 0x71, 0xab, 0x57, 0x65, 0x46, 0xe2, 0x35, 0x1a, 0xa9, 0x2b, 0x60, 0x75, 0xe8, 0x22, 0x98, 0x13, 0xe6, 0xa2, 0xcb, 0x36, 0x47, 0x14, 0x7b, 0x19, 0x2b, 0x45, 0x97, 0xf1, 0x21, 0x72, 0x23, 0xe7, 0x19, 0x7d, 0x84, 0x6c, 0x0d, 0x65, 0xea, 0x0d, 0x4a, 0xa4, 0xc5, 0x03, 0xbd, 0x00, 0x0b, 0xa3, 0x12, 0xba }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_216_public_x[] = { /* QCAVSx */ 0x00, 0xbe, 0x7d, 0x58, 0x04, 0x32, 0x63, 0xab, 0x2f, 0x42, 0x25, 0x2d, 0x41, 0xb5, 0x82, 0xd8, 0x62, 0xc2, 0xb2, 0x43, 0xce, 0x18, 0x57, 0x60, 0x81, 0xbd, 0x6e, 0xdd, 0x2f, 0x63, 0xf0, 0x16, 0x4f, 0x36, 0x5c, 0xae, 0x67, 0x26, 0x8d, 0x22, 0x7f, 0x39, 0x44, 0x67, 0x7e, 0x1c, 0x14, 0x6a, 0xf8, 0x64, 0xb8, 0xae }; static const uint8_t nist_kas_ecc_cdh_testvector_216_public_y[] = { /* QCAVSy */ 0x01, 0xa4, 0xbc, 0xbc, 0x64, 0x16, 0xd8, 0x65, 0x97, 0xa1, 0x48, 0xca, 0x4d, 0x61, 0x0e, 0xe6, 0x56, 0xa0, 0x00, 0x26, 0xce, 0x60, 0x47, 0xbd, 0x9f, 0xbd, 0x40, 0xd8, 0x95, 0x30, 0x19, 0x6a, 0x46, 0x93, 0xae, 0x59, 0x5d, 0x69, 0x95, 0x65, 0x03, 0xb9, 0xd2, 0xab, 0x4a, 0xab, 0xe7, 0xc9, 0x58, 0xa1, 0x4c, 0x69 }; static const uint8_t nist_kas_ecc_cdh_testvector_216_private[] = { /* dIUT */ 0x00, 0x4e, 0x51, 0x77, 0x96, 0xca, 0xc9, 0xd7, 0xc7, 0x53, 0x16, 0xeb, 0x5e, 0x68, 0x96, 0x3f, 0xe6, 0x32, 0x47, 0x81, 0xfa, 0xb9, 0x86, 0xe9, 0x40, 0x20, 0x0e, 0x71, 0x1d, 0xdb, 0xf9, 0x88, 0x2d, 0x99, 0xa6, 0x20, 0xa9, 0x76, 0x35, 0x2e, 0x24, 0x96, 0x74, 0x8c, 0xfb, 0x61, 0xdc, 0xcb, 0xf6, 0xd6, 0x59, 0xcc }; /* QIUTx = 0056a452fb1d558079c3e91bf22f86884ca89788806fe7d6d6ca40b5485079d77dc43e466a71259792c65ff6ab7204066c0e67a8 */ /* QIUTy = 01f29b723d9f7d4de6ccc2f9708079c5d30ae5d960e62a7c4f6dc98bfc95b4f531f197c39486705432594203c25147156dfd5b5c */ static const uint8_t nist_kas_ecc_cdh_testvector_216_out[] = { /* ZIUT */ 0x01, 0x4f, 0x4b, 0x7e, 0xa9, 0x3c, 0x9d, 0xd8, 0x46, 0xd2, 0x22, 0x8c, 0x2b, 0x6a, 0x8d, 0xfe, 0x61, 0x60, 0x57, 0x23, 0x2b, 0x7a, 0xf8, 0x45, 0xa5, 0x70, 0xcb, 0x6c, 0xac, 0xf9, 0xfe, 0xef, 0x2d, 0x8e, 0xf4, 0xfa, 0xfb, 0x28, 0x5b, 0x38, 0xe6, 0x3c, 0xce, 0x0a, 0x09, 0xb4, 0xd8, 0x2d, 0xbe, 0x43, 0xa3, 0x90 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_217_public_x[] = { /* QCAVSx */ 0x01, 0x1f, 0xea, 0x58, 0xd9, 0xe3, 0x6c, 0xf8, 0xed, 0x4e, 0xf3, 0xb4, 0x2f, 0x77, 0xcc, 0xea, 0x93, 0xbf, 0x54, 0x2a, 0xc9, 0x21, 0x41, 0xdc, 0x2c, 0x09, 0x40, 0x61, 0x98, 0x5f, 0x3d, 0xf7, 0x86, 0xd1, 0x92, 0xa5, 0x7b, 0xee, 0x07, 0x25, 0x50, 0xb3, 0x02, 0x58, 0x3f, 0x0f, 0x94, 0x28, 0x30, 0x1b, 0x1b, 0x76 }; static const uint8_t nist_kas_ecc_cdh_testvector_217_public_y[] = { /* QCAVSy */ 0x01, 0xb3, 0xdc, 0xc1, 0xb8, 0xa3, 0x54, 0x52, 0x64, 0x42, 0x73, 0x86, 0x32, 0x9e, 0xb8, 0x1f, 0xe9, 0x92, 0x65, 0x40, 0x40, 0x69, 0x47, 0x81, 0xc0, 0xd8, 0xb2, 0x7c, 0x1e, 0x49, 0x44, 0x2b, 0x99, 0xba, 0xb9, 0x3e, 0xf9, 0x66, 0x6f, 0xea, 0x14, 0xd4, 0x84, 0x3e, 0xe4, 0xbc, 0x5b, 0x04, 0x5a, 0xc5, 0x0c, 0x11 }; static const uint8_t nist_kas_ecc_cdh_testvector_217_private[] = { /* dIUT */ 0x00, 0x1c, 0x80, 0xb6, 0x4d, 0x51, 0xe8, 0x02, 0x56, 0x99, 0xe7, 0xbe, 0x2c, 0x4b, 0x98, 0x3c, 0xfa, 0x4b, 0x7e, 0x91, 0xb1, 0x12, 0xe2, 0xec, 0xa5, 0xf9, 0xd0, 0xcb, 0x7e, 0x3d, 0x4f, 0x85, 0xaf, 0xf7, 0xb3, 0x3a, 0x92, 0x1e, 0xaa, 0x12, 0x4c, 0xb7, 0x00, 0x2e, 0xab, 0x62, 0x97, 0x3d, 0x65, 0xe1, 0x6b, 0xc9 }; /* QIUTx = 01fd0e4eafb26c08c9f8e747d4991f468c76b4864166e37642b583db285a4bc4c33979917d9129a91cb0a75c1aee7cd4fbab73ce */ /* QIUTy = 00468efabcf448fcce821f3de81e994d79a7d99ea989ac81fa135f7ac88b154c767909c681f7e48c00b2e66bbaeb8f8688f44672 */ static const uint8_t nist_kas_ecc_cdh_testvector_217_out[] = { /* ZIUT */ 0x00, 0x1f, 0xe2, 0xed, 0x30, 0xad, 0x41, 0x43, 0xc5, 0xee, 0xb0, 0xb7, 0x62, 0x2e, 0x6a, 0xa4, 0x9e, 0x4e, 0x4d, 0x51, 0xc1, 0xdd, 0xc4, 0x67, 0xb3, 0xfc, 0x54, 0x21, 0x5d, 0xae, 0x93, 0x1b, 0xe0, 0xb6, 0xb6, 0x44, 0x3e, 0x71, 0x68, 0x95, 0xac, 0xb6, 0x57, 0x0c, 0xdc, 0x21, 0xfc, 0xbd, 0xae, 0x46, 0xe5, 0xd6 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_218_public_x[] = { /* QCAVSx */ 0x00, 0xca, 0x80, 0x93, 0x40, 0xbd, 0x13, 0x35, 0x4b, 0x60, 0x71, 0xd0, 0x73, 0xe6, 0x5b, 0x9b, 0x0d, 0x2b, 0xac, 0x82, 0xe2, 0x2a, 0xbf, 0xca, 0xc7, 0xe7, 0x0a, 0xfd, 0x9d, 0x22, 0x48, 0x52, 0xf0, 0xe2, 0x12, 0x97, 0x6e, 0x5e, 0xc8, 0x23, 0xeb, 0x89, 0x50, 0xe0, 0x2b, 0xc7, 0x59, 0xec, 0xf5, 0x6f, 0x79, 0xa8 }; static const uint8_t nist_kas_ecc_cdh_testvector_218_public_y[] = { /* QCAVSy */ 0x00, 0x31, 0x28, 0x1e, 0x89, 0x76, 0x40, 0x1a, 0xab, 0x58, 0xfa, 0x8e, 0xaf, 0x86, 0x36, 0xfe, 0xb0, 0x13, 0x17, 0x0b, 0xca, 0xb5, 0x78, 0x1b, 0xe0, 0xa2, 0x8d, 0x27, 0x33, 0x9e, 0x94, 0x70, 0xe1, 0x66, 0xc7, 0xf6, 0x85, 0xf2, 0xea, 0x91, 0x43, 0x31, 0x0d, 0xca, 0x1b, 0x3a, 0xb8, 0xe1, 0xc8, 0xe6, 0x05, 0x92 }; static const uint8_t nist_kas_ecc_cdh_testvector_218_private[] = { /* dIUT */ 0x00, 0x43, 0xc9, 0x6c, 0x32, 0xcf, 0x64, 0x8b, 0x03, 0x61, 0x12, 0x42, 0x1a, 0xdb, 0xaa, 0x92, 0x5c, 0xd5, 0x41, 0x75, 0xab, 0xad, 0x39, 0xe5, 0x68, 0x1b, 0xfc, 0x9e, 0xb4, 0xb1, 0xb6, 0x49, 0xae, 0xc1, 0xc8, 0x76, 0xec, 0x1e, 0xc4, 0x61, 0x0f, 0x1b, 0x3b, 0x06, 0x51, 0x4a, 0x48, 0xe6, 0xea, 0x7a, 0x4a, 0x25 }; /* QIUTx = 00de181e81b9e7776d474694a2d124d0b876d9548f20ee3386304945d9131f90457d9b938df098b035bedaaf80ed6d979404fc70 */ /* QIUTy = 0181a3516dbea9da97d6ececdb10f96d54469d273ab366e89a40fdcedcf1bda837d5c14bd10c0b6a2a9c8a47810125c764dd35ef */ static const uint8_t nist_kas_ecc_cdh_testvector_218_out[] = { /* ZIUT */ 0x01, 0x61, 0x0e, 0xfb, 0x48, 0xfd, 0x22, 0x26, 0x19, 0x21, 0xf7, 0x48, 0x4e, 0xd6, 0x38, 0x2f, 0xce, 0xb6, 0xbd, 0xf2, 0x8f, 0x3b, 0xc2, 0x34, 0x0a, 0x17, 0x5b, 0x79, 0x71, 0xb9, 0x3e, 0xd5, 0xff, 0x35, 0x7e, 0xd5, 0x5e, 0x53, 0x07, 0xbb, 0xf4, 0x2e, 0x40, 0xa5, 0xb3, 0xfa, 0xbd, 0xae, 0xd0, 0xce, 0x19, 0xa2 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_219_public_x[] = { /* QCAVSx */ 0x00, 0x74, 0x79, 0x5b, 0x0a, 0x9c, 0xa0, 0x70, 0x49, 0x1f, 0xb5, 0x4a, 0x3b, 0xc2, 0x49, 0x98, 0x1d, 0xef, 0xbe, 0xc0, 0x37, 0xe4, 0x04, 0x0f, 0x76, 0x65, 0x64, 0x28, 0xb1, 0x53, 0x8b, 0x97, 0x85, 0x03, 0xf8, 0x1f, 0x80, 0xad, 0x9e, 0xf9, 0x7c, 0x5e, 0x12, 0x7b, 0xa5, 0x1e, 0xc0, 0x40, 0x58, 0x4b, 0x9a, 0x20 }; static const uint8_t nist_kas_ecc_cdh_testvector_219_public_y[] = { /* QCAVSy */ 0x00, 0x3e, 0xce, 0x27, 0xf3, 0xda, 0xef, 0xe7, 0xbd, 0xff, 0xdf, 0xa7, 0x27, 0xb2, 0xaf, 0x95, 0xaf, 0x85, 0x91, 0xaf, 0x94, 0x6c, 0xdd, 0xfe, 0x37, 0xe8, 0x56, 0x43, 0xb8, 0xd1, 0x79, 0xca, 0x8b, 0x95, 0x29, 0x10, 0x6f, 0x9c, 0x5f, 0x3a, 0x95, 0xa8, 0x81, 0x92, 0x25, 0xf9, 0xd7, 0xd4, 0xa7, 0x30, 0xfd, 0x22 }; static const uint8_t nist_kas_ecc_cdh_testvector_219_private[] = { /* dIUT */ 0x00, 0x36, 0x36, 0x85, 0x4b, 0x8e, 0xe0, 0x25, 0x4b, 0xb2, 0xd0, 0xeb, 0xed, 0xc7, 0x20, 0xb6, 0x6b, 0x20, 0x12, 0x9a, 0x21, 0xf1, 0xa4, 0xfe, 0x39, 0x11, 0x8c, 0xfd, 0xd4, 0xd1, 0x37, 0xdb, 0xe5, 0xe5, 0x70, 0xeb, 0xe2, 0xc4, 0x8a, 0x7f, 0x9a, 0xc2, 0x1c, 0xff, 0x3e, 0x5a, 0xdf, 0x47, 0x43, 0x46, 0x97, 0xdb }; /* QIUTx = 01efc0cd1a86ce7544f25f44e63a0913c11fd6b08bc09ad8cd82f3af7e32a7a7ecacd56e25526589313879d4a7fd4382d4114e4a */ /* QIUTy = 005a34ef7403599c2f83f3e83299524893f2418ff95d6c2fdc0a3db970e62fddcf4cda182aa78b54fd8c2e818fb1ee2dd2776763 */ static const uint8_t nist_kas_ecc_cdh_testvector_219_out[] = { /* ZIUT */ 0x00, 0x8d, 0x99, 0x09, 0x82, 0xaa, 0xc8, 0xd5, 0x37, 0x1b, 0x86, 0x7d, 0xe2, 0x1e, 0x09, 0x06, 0x4f, 0xef, 0x30, 0xe7, 0x33, 0x21, 0x33, 0x7d, 0xc2, 0x4f, 0x19, 0xad, 0x5d, 0xdb, 0x6c, 0x4a, 0xd2, 0x17, 0x13, 0x6b, 0x7c, 0x61, 0xe3, 0x60, 0xa7, 0x3f, 0xa7, 0x57, 0x1d, 0x52, 0x6c, 0x8f, 0x51, 0x4a, 0x06, 0xd4 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_220_public_x[] = { /* QCAVSx */ 0x01, 0x1e, 0xb6, 0x4e, 0xd4, 0x24, 0x9e, 0x11, 0x95, 0xb2, 0xd1, 0x30, 0x7a, 0x35, 0xa5, 0x14, 0xd6, 0x6d, 0x29, 0xba, 0x6f, 0x90, 0x44, 0xf9, 0xc0, 0x2b, 0x4b, 0x2d, 0x3c, 0xb3, 0xe3, 0xd4, 0xc0, 0xcd, 0xc5, 0x48, 0x9c, 0xdd, 0xfb, 0x96, 0x22, 0x6c, 0x9c, 0xe3, 0xe3, 0x6f, 0xb8, 0xff, 0x2e, 0xef, 0x20, 0x8c }; static const uint8_t nist_kas_ecc_cdh_testvector_220_public_y[] = { /* QCAVSy */ 0x00, 0x99, 0x88, 0x0b, 0x0d, 0x0d, 0x43, 0xc5, 0xc5, 0x79, 0xad, 0x77, 0xdd, 0xae, 0x68, 0xf2, 0xc9, 0x17, 0xf4, 0xb0, 0x62, 0xea, 0x8d, 0x77, 0x7b, 0x9c, 0xdf, 0x46, 0x5c, 0xbb, 0x59, 0x10, 0x7e, 0x70, 0x99, 0x27, 0x14, 0xe8, 0xcb, 0xfa, 0xc7, 0x62, 0x96, 0xd5, 0xed, 0xe9, 0x9c, 0x48, 0xd3, 0x8a, 0x89, 0x73 }; static const uint8_t nist_kas_ecc_cdh_testvector_220_private[] = { /* dIUT */ 0x00, 0x49, 0x98, 0xa0, 0x62, 0xa3, 0x21, 0x70, 0xbb, 0x35, 0x89, 0x54, 0xd2, 0xc2, 0x49, 0x6d, 0xa8, 0x86, 0x20, 0x08, 0x27, 0xfa, 0x13, 0x56, 0x68, 0x36, 0xae, 0x26, 0xe3, 0x8d, 0x51, 0x92, 0x6c, 0xa3, 0xd2, 0x02, 0x58, 0x9f, 0x7b, 0xfa, 0x27, 0xea, 0x22, 0xd3, 0x99, 0x97, 0x3d, 0xb6, 0xf9, 0xfd, 0xe9, 0xf4 }; /* QIUTx = 00f71590b04290b5f3cd9ba0e394a3be5a1514f45e53497f6cdedbf839728e0288135d769e4b28932c875823fe256e891997c476 */ /* QIUTy = 009d16ba726a5a9e09103bc94a09d8079ac8edf23410c8469f79f55f3355cfb3ad703624ec6d75eceae3881da20903c71de1f5ac */ static const uint8_t nist_kas_ecc_cdh_testvector_220_out[] = { /* ZIUT */ 0x01, 0x55, 0xdc, 0x98, 0x72, 0x9c, 0x8c, 0x1b, 0xc6, 0x5e, 0xb8, 0xa3, 0xec, 0x09, 0x13, 0x5f, 0x46, 0xbf, 0xa3, 0x13, 0xbf, 0x56, 0xaa, 0x31, 0x69, 0xe3, 0x12, 0xdb, 0x89, 0x91, 0xab, 0xda, 0x33, 0x8f, 0x8a, 0xc7, 0xa7, 0x5b, 0xce, 0x42, 0x88, 0x40, 0x68, 0xef, 0xb7, 0xe6, 0xe6, 0x25, 0x93, 0x9d, 0x2b, 0x88 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_221_public_x[] = { /* QCAVSx */ 0x00, 0xa1, 0x5e, 0x96, 0xa7, 0x76, 0xea, 0xdb, 0x8f, 0x8a, 0x0b, 0x61, 0x36, 0x03, 0x35, 0xcb, 0x50, 0x17, 0xd7, 0xd9, 0x71, 0x16, 0x48, 0x93, 0x41, 0xe9, 0x95, 0x15, 0x7f, 0x1a, 0xdf, 0x17, 0x8e, 0x56, 0x28, 0xba, 0xd3, 0xe8, 0x30, 0xbe, 0xe5, 0x44, 0x33, 0x11, 0x91, 0x64, 0x88, 0x6d, 0xb5, 0xc3, 0x46, 0x54 }; static const uint8_t nist_kas_ecc_cdh_testvector_221_public_y[] = { /* QCAVSy */ 0x00, 0x55, 0x1c, 0xa5, 0x60, 0x5e, 0x4a, 0xe0, 0x53, 0x45, 0x34, 0xa0, 0xab, 0x34, 0x3d, 0x03, 0x9a, 0x3b, 0xa7, 0xa1, 0xcc, 0xe8, 0x32, 0xc4, 0xd6, 0x5e, 0x26, 0xba, 0xe7, 0xab, 0x8e, 0x5f, 0x9c, 0x74, 0xb3, 0xd4, 0x21, 0xa5, 0x28, 0xe5, 0x59, 0x77, 0x8a, 0xb2, 0x7b, 0x59, 0xaa, 0xe1, 0xa9, 0x16, 0xd4, 0xeb }; static const uint8_t nist_kas_ecc_cdh_testvector_221_private[] = { /* dIUT */ 0x00, 0x5a, 0x3f, 0x80, 0x5f, 0xe3, 0xc3, 0x26, 0x6f, 0xeb, 0x3e, 0x0b, 0xb7, 0xda, 0x67, 0x61, 0xbb, 0x11, 0x76, 0x18, 0xbc, 0x57, 0xaf, 0x35, 0x7b, 0x53, 0xf1, 0x99, 0xe6, 0xe4, 0xcb, 0xc1, 0x28, 0x19, 0x75, 0x32, 0x14, 0x03, 0xea, 0x6d, 0xe6, 0x18, 0xec, 0x32, 0xe8, 0x6b, 0x8c, 0xa1, 0xe1, 0x0d, 0x7c, 0x43 }; /* QIUTx = 01ae460e1248504d33d67ed750f1d618e53728d55e390dfc18d94b56dbb3d3c0bdc96c92ca1eca9f44fb8a58cf36dcfcc0588cbe */ /* QIUTy = 00f7011fc321ef6258dcfc1fdc2c0a4e54c86ec939bc9ceca6c291750c1ff540b34a418793842a2c5cab6061dbbe9b5be3fa6115 */ static const uint8_t nist_kas_ecc_cdh_testvector_221_out[] = { /* ZIUT */ 0x01, 0x09, 0xe8, 0x5c, 0x68, 0x4d, 0x02, 0x7a, 0x62, 0x5e, 0xc5, 0xe6, 0xdf, 0x95, 0x2e, 0x2f, 0x20, 0xa1, 0x4e, 0xd5, 0xb0, 0x92, 0xd1, 0xb1, 0xb3, 0x84, 0x35, 0x25, 0x13, 0x03, 0x84, 0x4d, 0x23, 0x0f, 0xff, 0xc5, 0x3d, 0x84, 0xb9, 0x23, 0x55, 0x5e, 0x1e, 0x1c, 0xbe, 0xbe, 0x20, 0xb5, 0xd6, 0x8c, 0x3b, 0xc6 }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_222_public_x[] = { /* QCAVSx */ 0x01, 0x64, 0x27, 0xe7, 0x2b, 0xc5, 0x7d, 0x26, 0xa9, 0x10, 0xa6, 0x72, 0x2e, 0xac, 0x2c, 0x78, 0xfb, 0xa8, 0xab, 0xff, 0xcc, 0xbc, 0x11, 0xa9, 0xf8, 0x37, 0x7b, 0xfe, 0x21, 0x3e, 0xd9, 0xad, 0x64, 0xbd, 0xe2, 0xae, 0x86, 0x87, 0xf8, 0xff, 0x1d, 0xfd, 0xb2, 0x9b, 0x5d, 0xce, 0xcd, 0x02, 0x26, 0x98, 0x28, 0xc2 }; static const uint8_t nist_kas_ecc_cdh_testvector_222_public_y[] = { /* QCAVSy */ 0x00, 0xad, 0x4f, 0x9a, 0xbc, 0x21, 0xda, 0x0d, 0x31, 0xf1, 0x96, 0x59, 0xcd, 0x3b, 0x0c, 0x18, 0x55, 0x81, 0x43, 0x6a, 0xc0, 0x8b, 0x15, 0xc0, 0xb4, 0x8a, 0x7a, 0xc3, 0x9e, 0xed, 0x03, 0xe0, 0xee, 0x97, 0xe1, 0x64, 0xcf, 0xaa, 0x5a, 0xbc, 0x77, 0x44, 0x12, 0xcb, 0xff, 0xf9, 0x4a, 0x9e, 0xa2, 0xa9, 0x63, 0x6a }; static const uint8_t nist_kas_ecc_cdh_testvector_222_private[] = { /* dIUT */ 0x00, 0x55, 0x90, 0x1e, 0x9b, 0x65, 0x86, 0xb7, 0xf3, 0x37, 0x26, 0x60, 0xeb, 0xcf, 0xe9, 0x02, 0x49, 0x90, 0x0c, 0x90, 0x2d, 0x7c, 0x63, 0x2a, 0x8d, 0x17, 0xfa, 0xe2, 0x1d, 0x3f, 0xde, 0x30, 0x37, 0x32, 0x5b, 0x57, 0x75, 0xea, 0xc5, 0xa1, 0x74, 0xa1, 0xee, 0x2b, 0x3f, 0xf2, 0xbc, 0x5c, 0xe6, 0x9d, 0x8c, 0xc1 }; /* QIUTx = 00ba952233531b6a6c7ade6f338d24fc65777b5d305297e66d32cb1bc506c5bca2287d3acd33fe19653d6c88a06eca3712ce9caa */ /* QIUTy = 00716beb14f02233630f34603e309bf6e2572f0b791dfa4c582af6a37abcdd64e8d785a95ddff59bbc6fbe1b7fc735725efcf0ba */ static const uint8_t nist_kas_ecc_cdh_testvector_222_out[] = { /* ZIUT */ 0x01, 0xae, 0x81, 0x4e, 0x02, 0xc4, 0x68, 0x4c, 0x21, 0xdd, 0x7e, 0x58, 0xa6, 0x5e, 0xc5, 0x1e, 0xc6, 0x8c, 0x37, 0xe5, 0x9e, 0x29, 0x9c, 0xe6, 0x56, 0x08, 0x18, 0x6c, 0x0a, 0xcc, 0xe0, 0x8e, 0x41, 0xc8, 0x32, 0x0b, 0x19, 0x41, 0xa6, 0x11, 0xfe, 0x66, 0xb1, 0x92, 0x1b, 0x55, 0x8d, 0x7f, 0x40, 0x2d, 0x0e, 0xb0 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_223_public_x[] = { /* QCAVSx */ 0x01, 0x2e, 0x89, 0xdc, 0xcd, 0xf9, 0x75, 0x85, 0x1a, 0xcc, 0xf0, 0x29, 0x4c, 0xf4, 0xbd, 0xe1, 0x25, 0x9c, 0x90, 0x7a, 0x6d, 0x3a, 0xce, 0xf6, 0x9f, 0x19, 0x39, 0xb5, 0x58, 0xc4, 0xd2, 0x11, 0x52, 0x2e, 0x4e, 0xaa, 0xc6, 0x13, 0xe3, 0xac, 0x84, 0x91, 0xc9, 0x3d, 0xeb, 0x6d, 0x34, 0x4a, 0x9f, 0x87, 0xac, 0xbe }; static const uint8_t nist_kas_ecc_cdh_testvector_223_public_y[] = { /* QCAVSy */ 0x01, 0xa5, 0x26, 0x08, 0xea, 0xd0, 0x9d, 0x2d, 0xb1, 0x23, 0xa0, 0xdc, 0x78, 0x2a, 0xb2, 0x0d, 0xdb, 0x79, 0x3d, 0x5b, 0xb7, 0x0a, 0xc9, 0x5c, 0x58, 0xe6, 0x21, 0x46, 0xbe, 0xb6, 0x2b, 0xb6, 0x68, 0xfd, 0x57, 0xf9, 0x20, 0x38, 0xe4, 0x58, 0x5c, 0xde, 0x1f, 0x91, 0xee, 0x8c, 0x52, 0x52, 0x6a, 0xfe, 0xb1, 0xb5 }; static const uint8_t nist_kas_ecc_cdh_testvector_223_private[] = { /* dIUT */ 0x00, 0x04, 0x4a, 0xe4, 0x3b, 0xd2, 0x47, 0xe7, 0x5a, 0xfa, 0x7b, 0xd8, 0xdc, 0x28, 0xe7, 0x5b, 0xdb, 0x9d, 0xdd, 0x99, 0xdf, 0x56, 0x66, 0x8c, 0x83, 0x14, 0x54, 0xdc, 0x28, 0xf3, 0xe9, 0xa4, 0x4e, 0xcf, 0xd4, 0x7b, 0xa8, 0x42, 0x0a, 0x28, 0x6f, 0x1e, 0xf3, 0x72, 0xfd, 0x29, 0xb3, 0x65, 0xdf, 0x9b, 0x82, 0xf1 }; /* QIUTx = 00202694f378d70965d42828ad5f37137bf8b63cec2c0d158e5ba94cab1f8e61e5a300986ba349b3adf3efc05e65670af88cd3d6 */ /* QIUTy = 00baf0da4aedb972f88a215dfbff64e4290fadc25da3f0d83f35e65bc4177d3025d71d8eeb9c41470f3c719e00ef1fb7552e6a89 */ static const uint8_t nist_kas_ecc_cdh_testvector_223_out[] = { /* ZIUT */ 0x01, 0x40, 0xe7, 0xdb, 0x3f, 0x64, 0x15, 0xd8, 0x84, 0x82, 0x2c, 0xcc, 0x73, 0x16, 0xa3, 0x29, 0xdf, 0xed, 0x17, 0x7b, 0x76, 0xc0, 0x11, 0x7a, 0xbd, 0x72, 0x2f, 0xec, 0xa8, 0x89, 0xbe, 0xe4, 0xe1, 0x4e, 0x65, 0xd2, 0x6c, 0x6c, 0xc9, 0x35, 0xc0, 0xe9, 0x42, 0x05, 0xf0, 0x5f, 0xc1, 0xa7, 0xab, 0xfb, 0x03, 0x48 }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_224_public_x[] = { /* QCAVSx */ 0x00, 0xab, 0xa9, 0x3a, 0xe1, 0xd1, 0x55, 0x28, 0x80, 0xb3, 0x1f, 0x50, 0x3f, 0xc4, 0xbe, 0x9f, 0x91, 0xd1, 0x02, 0x47, 0xf1, 0x4c, 0x81, 0x60, 0x15, 0xff, 0xb2, 0xba, 0xd2, 0x9a, 0xb8, 0x18, 0x0e, 0x7b, 0x50, 0xa2, 0x71, 0x44, 0xe0, 0x1c, 0x21, 0xe6, 0x3c, 0x3d, 0xaf, 0xcd, 0x25, 0x13, 0x08, 0xba, 0xc7, 0x68 }; static const uint8_t nist_kas_ecc_cdh_testvector_224_public_y[] = { /* QCAVSy */ 0x00, 0xe4, 0xab, 0x66, 0xe5, 0x14, 0xbd, 0x02, 0xab, 0xea, 0xe1, 0xc7, 0x12, 0x37, 0x88, 0xa6, 0x92, 0x58, 0x4d, 0xdb, 0x4a, 0x90, 0x9a, 0x21, 0x7f, 0xb3, 0x5d, 0xe6, 0x65, 0x88, 0x23, 0x3d, 0xad, 0xef, 0x70, 0x36, 0xff, 0x9d, 0x9f, 0x24, 0xeb, 0xa3, 0x77, 0x2e, 0x2f, 0xa3, 0x03, 0x7b, 0xba, 0xe6, 0x3c, 0xfe }; static const uint8_t nist_kas_ecc_cdh_testvector_224_private[] = { /* dIUT */ 0x00, 0x56, 0xd7, 0x37, 0x30, 0x75, 0x3a, 0xda, 0x70, 0xfd, 0x80, 0x1c, 0x74, 0x9c, 0x2f, 0x1f, 0x1a, 0x61, 0xef, 0x5b, 0xd6, 0xec, 0xb7, 0x96, 0xa9, 0xe1, 0x5e, 0xfe, 0x9b, 0xbe, 0x61, 0x58, 0xf6, 0x69, 0x54, 0x27, 0x87, 0x35, 0x0f, 0x4d, 0x64, 0x3b, 0xda, 0x6f, 0x3e, 0x8c, 0x64, 0x23, 0xb8, 0x17, 0xb5, 0x30 }; /* QIUTx = 0025a06b71a0ae252f2f905221983ebfce21ad96121a5c0dcc5ef0d0fec301ec77ef4b915818fedcda7f3fd733c7f9e529079cb6 */ /* QIUTy = 00026890d5303b619c7f81f60fb82b26b0b98d8f24c45cab41a44eeb3a3a312944e889b4035e04360b305043e30d0cb9041a89de */ static const uint8_t nist_kas_ecc_cdh_testvector_224_out[] = { /* ZIUT */ 0x00, 0x2e, 0xc4, 0xde, 0xac, 0x3e, 0x83, 0xd6, 0x0a, 0xd3, 0x99, 0x69, 0xf2, 0xf9, 0x3b, 0x49, 0xf3, 0x18, 0x75, 0x83, 0x1e, 0xcd, 0x51, 0xea, 0x5c, 0x37, 0xca, 0x48, 0xde, 0x08, 0x1c, 0x0c, 0x8c, 0xc6, 0x60, 0xed, 0xc5, 0x3a, 0x22, 0x2f, 0x30, 0x43, 0x44, 0x7f, 0x9c, 0xb7, 0x52, 0x76, 0x3b, 0xe7, 0x49, 0x4a }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_225_public_x[] = { /* QCAVSx */ 0x00, 0xaa, 0x4e, 0xb8, 0x98, 0x44, 0x3c, 0xce, 0x3e, 0xd2, 0xc0, 0x72, 0xd8, 0x58, 0x77, 0x5a, 0xc2, 0x21, 0xc2, 0x4e, 0x33, 0xec, 0xa6, 0xf3, 0x15, 0x79, 0x66, 0x35, 0x44, 0xbb, 0x33, 0xa4, 0xa0, 0x68, 0xa8, 0x6d, 0x13, 0xf1, 0x67, 0xb6, 0x53, 0x04, 0xc5, 0xf7, 0xf2, 0x5f, 0x89, 0x5f, 0x65, 0xb2, 0xf4, 0x28 }; static const uint8_t nist_kas_ecc_cdh_testvector_225_public_y[] = { /* QCAVSy */ 0x00, 0x83, 0xcd, 0xed, 0x30, 0x21, 0x1b, 0x66, 0xf1, 0xad, 0xf1, 0x73, 0x18, 0xb6, 0xde, 0x50, 0xd7, 0x72, 0x4c, 0x05, 0x84, 0x99, 0x5e, 0x06, 0x8b, 0x72, 0x47, 0x03, 0xae, 0x08, 0xed, 0x71, 0xa3, 0x2b, 0x33, 0x49, 0x87, 0xa7, 0xb3, 0x1d, 0x6c, 0x26, 0x37, 0x15, 0x29, 0x17, 0x32, 0x7d, 0x37, 0xac, 0xcd, 0x33 }; static const uint8_t nist_kas_ecc_cdh_testvector_225_private[] = { /* dIUT */ 0x00, 0x62, 0xb0, 0x26, 0xd4, 0x97, 0x20, 0x66, 0x0c, 0xf6, 0xa4, 0xf5, 0x69, 0xbe, 0x98, 0xdf, 0xa1, 0x08, 0xc8, 0xeb, 0xa0, 0x82, 0x34, 0xae, 0x9a, 0x87, 0xf3, 0xc8, 0x8b, 0x6c, 0x65, 0x93, 0x4b, 0x99, 0x68, 0x15, 0x32, 0x2a, 0x16, 0xf9, 0xaa, 0xbe, 0xd1, 0x33, 0x17, 0xbf, 0x77, 0x25, 0xbe, 0xa5, 0x80, 0x8e }; /* QIUTx = 000f52925394cb52bc330e06390c0c0a2e10ed9797149fbcc88d80fbcaec173e24a05daef98401d5e47f3b765bedbb8246312856 */ /* QIUTy = 013d99c1710805d5fc7db7259ac9e134b411d00d73fb0762e3d211cdc56bf7f714512d04a630c8732551ee734287476cf511e836 */ static const uint8_t nist_kas_ecc_cdh_testvector_225_out[] = { /* ZIUT */ 0x01, 0xc9, 0xcc, 0x05, 0xd1, 0x9f, 0x96, 0xc4, 0xd2, 0x33, 0x03, 0x9c, 0xfb, 0xc4, 0x3a, 0xb6, 0x8d, 0x65, 0x7b, 0xb5, 0x07, 0xf4, 0x6a, 0x35, 0x30, 0x91, 0xfe, 0x98, 0xfc, 0x0f, 0x42, 0x2a, 0x8e, 0x75, 0x93, 0xc1, 0x95, 0xd3, 0x26, 0x97, 0x7a, 0x2b, 0xe6, 0xbb, 0xd2, 0xcb, 0x44, 0xeb, 0x1f, 0xe8, 0x16, 0x50 }; /* [K-571] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_226_public_x[] = { /* QCAVSx */ 0x03, 0x10, 0x6a, 0x5c, 0x1d, 0x92, 0x3a, 0x09, 0x90, 0xea, 0x8c, 0x60, 0x08, 0xc3, 0x6c, 0x36, 0x6b, 0x53, 0xe5, 0x62, 0x2b, 0x98, 0x46, 0x40, 0x44, 0x74, 0x1f, 0xbc, 0x78, 0x40, 0x28, 0x4d, 0xb8, 0xbb, 0xf6, 0x02, 0x86, 0x6c, 0x30, 0xcc, 0xbf, 0x5f, 0x9b, 0x7e, 0x59, 0xcc, 0x1d, 0x9b, 0xfc, 0xc5, 0xb9, 0x70, 0xfa, 0x62, 0x4d, 0xa9, 0xb1, 0x5f, 0x6c, 0xb3, 0x36, 0xf5, 0xdd, 0xa7, 0xe6, 0xb9, 0x92, 0x4d, 0x5d, 0xce, 0x45, 0x43 }; static const uint8_t nist_kas_ecc_cdh_testvector_226_public_y[] = { /* QCAVSy */ 0x00, 0x5c, 0x5c, 0x7b, 0xbd, 0x5a, 0x78, 0x9a, 0xc4, 0xc6, 0x28, 0x3d, 0xeb, 0x0d, 0x0d, 0x37, 0xc4, 0x85, 0x2b, 0xaa, 0x57, 0xd6, 0xbc, 0x2b, 0x0a, 0xc6, 0x33, 0x7f, 0xeb, 0x09, 0x70, 0x4c, 0x44, 0xd1, 0xb3, 0x85, 0xb7, 0x0c, 0xc3, 0x94, 0xfa, 0x23, 0x5d, 0x83, 0xe6, 0xe7, 0x11, 0x17, 0x87, 0xe5, 0x7d, 0x09, 0x02, 0xc0, 0xcb, 0x13, 0x2a, 0x19, 0x0a, 0x6e, 0x62, 0xf3, 0x98, 0x51, 0x1c, 0x0c, 0x2c, 0x4c, 0xd5, 0x0d, 0x45, 0x70 }; static const uint8_t nist_kas_ecc_cdh_testvector_226_private[] = { /* dIUT */ 0x01, 0x73, 0xcd, 0x16, 0x31, 0xe1, 0x8e, 0xce, 0x01, 0xb7, 0x3b, 0x35, 0x72, 0xff, 0xaa, 0x74, 0x95, 0xc4, 0xbc, 0x81, 0xf4, 0x07, 0x8a, 0xe5, 0x0d, 0x69, 0xcb, 0x1e, 0x33, 0x8a, 0xcf, 0x13, 0x46, 0x91, 0x17, 0x11, 0x29, 0x21, 0x16, 0x6d, 0xdf, 0x2d, 0x29, 0xf3, 0xa9, 0xf8, 0xe1, 0x0c, 0x67, 0xe8, 0x8c, 0x9a, 0x99, 0x20, 0x3a, 0x83, 0x45, 0x65, 0xbe, 0x76, 0xac, 0x59, 0x12, 0x64, 0x36, 0x73, 0x9a, 0x6a, 0xfa, 0x02, 0x9c, 0xc5 }; /* QIUTx = 03fbfbbcfba609157f68a23126d805f7c75efb19befb595e3a975e08ff46bd34c8b87b9645c0e86ea0ad915465d5c856c69bb9b722b0d17bf97ad95c4602dea17c6b512054cb22d8 */ /* QIUTy = 071c16df71e1b71b4bd3d9938827d3959093b9db1ff86bed73944a42dcb67cc33102e28c1d0e9804a6450656f4bf33ad72ecf7bb83bd282cde4bc15d4e48064aa8ad2f02979f5f3f */ static const uint8_t nist_kas_ecc_cdh_testvector_226_out[] = { /* ZIUT */ 0x00, 0x31, 0x98, 0xa6, 0xb5, 0xd6, 0xcc, 0xe8, 0x47, 0xe2, 0x43, 0x48, 0xa6, 0xa6, 0xce, 0xff, 0x7a, 0x89, 0xed, 0x37, 0x94, 0xd7, 0xac, 0xed, 0xc4, 0xe8, 0x58, 0xc8, 0x0a, 0xd0, 0x4a, 0x74, 0xdb, 0xc0, 0x2c, 0x70, 0x38, 0xe0, 0x5a, 0xb2, 0x6b, 0x2a, 0x29, 0x9e, 0xc9, 0x2e, 0xe0, 0xd2, 0xc7, 0xe6, 0x6a, 0x81, 0x87, 0x2a, 0x51, 0x57, 0xfb, 0xc5, 0xd4, 0xd3, 0x7a, 0xd5, 0x98, 0xd6, 0xdd, 0xee, 0x99, 0x5e, 0xd2, 0x8a, 0x2d, 0x74 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_227_public_x[] = { /* QCAVSx */ 0x02, 0x11, 0x22, 0x3c, 0x4b, 0x72, 0x9b, 0x20, 0x6b, 0xe0, 0x1f, 0x80, 0x85, 0xa9, 0x97, 0xe1, 0xdd, 0xe5, 0xcd, 0xb2, 0x7c, 0x04, 0x89, 0x25, 0xa2, 0x73, 0x69, 0xbc, 0xca, 0x6a, 0x3e, 0x2f, 0xbf, 0xc6, 0x56, 0x37, 0xf1, 0xec, 0xeb, 0x13, 0x3b, 0xe7, 0x49, 0x67, 0x9a, 0x17, 0xb1, 0xce, 0x58, 0x82, 0x1f, 0x46, 0xbd, 0x18, 0x44, 0xa8, 0x9c, 0xf0, 0x04, 0x2c, 0x80, 0x43, 0xcb, 0x10, 0x5e, 0x01, 0xa3, 0xfc, 0x94, 0x8d, 0x26, 0x63 }; static const uint8_t nist_kas_ecc_cdh_testvector_227_public_y[] = { /* QCAVSy */ 0x02, 0xb1, 0xec, 0x2e, 0x6e, 0x2c, 0x23, 0x75, 0xb4, 0x64, 0xb0, 0xa5, 0x02, 0xc5, 0x05, 0x3b, 0x5b, 0x34, 0x8b, 0xd0, 0x81, 0x78, 0xc7, 0x2c, 0x60, 0x31, 0x05, 0xd0, 0x46, 0x81, 0x96, 0xa4, 0x69, 0x5d, 0xc2, 0x67, 0xd6, 0xe1, 0x09, 0xf1, 0xb1, 0x27, 0x44, 0x53, 0xb6, 0xef, 0xf1, 0x4d, 0xdf, 0x37, 0x83, 0x96, 0x9e, 0x88, 0x25, 0x64, 0x8d, 0xeb, 0xc2, 0x16, 0xaf, 0xff, 0x92, 0x58, 0xf6, 0x44, 0xd7, 0x7e, 0xcd, 0x99, 0x11, 0xcf }; static const uint8_t nist_kas_ecc_cdh_testvector_227_private[] = { /* dIUT */ 0x00, 0x93, 0x7e, 0xdb, 0x3a, 0xa2, 0x95, 0x63, 0xd2, 0x24, 0x85, 0x91, 0xc9, 0xfb, 0x44, 0x89, 0x85, 0x09, 0x5f, 0x91, 0x3a, 0x74, 0x58, 0x31, 0x55, 0x93, 0xcf, 0xce, 0x87, 0xe6, 0x8f, 0xb0, 0xf1, 0xa5, 0x25, 0xb7, 0x31, 0x0a, 0x10, 0x11, 0x76, 0xe3, 0x4d, 0x45, 0xc1, 0x00, 0x45, 0x38, 0x95, 0x4e, 0x20, 0x44, 0x54, 0x38, 0x17, 0xca, 0xb0, 0xd5, 0x63, 0xdf, 0x6c, 0xb0, 0xd5, 0xe8, 0x61, 0x7b, 0xbb, 0xa1, 0x50, 0xe7, 0x55, 0xe1 }; /* QIUTx = 02363cc5624b06df1956befa597d4c757cc2b1001a3e1544d24408290f694877455ba92e56088462f0ffacbd393cf835b56b7046a15d4b724dc6c3573cb156c0df298aa8b1255cb8 */ /* QIUTy = 0409f773b98d5edc2734d835953281b82ac0e15d902d887a7c6ba75629a37671b101d18ddfdc4193d98b18551414c49173004530f7976d27c273a73ddbb898fcb5fade9c0bb7883f */ static const uint8_t nist_kas_ecc_cdh_testvector_227_out[] = { /* ZIUT */ 0x00, 0x57, 0x71, 0x47, 0x45, 0x92, 0x62, 0xe5, 0xad, 0x42, 0xf2, 0x22, 0x82, 0x7f, 0x20, 0xed, 0x57, 0x4b, 0x21, 0x18, 0x92, 0x42, 0x05, 0xbc, 0xdb, 0xd3, 0x39, 0xce, 0x20, 0xcf, 0xb0, 0x85, 0xd0, 0x72, 0xfd, 0x70, 0xf4, 0xca, 0x1f, 0x57, 0x68, 0xfa, 0xfa, 0xeb, 0x57, 0x10, 0xf7, 0xcc, 0xbe, 0xa4, 0xfc, 0x2a, 0xe5, 0x37, 0x7b, 0x0c, 0xff, 0x20, 0xa8, 0x89, 0xa2, 0x20, 0x17, 0x39, 0x13, 0x9b, 0xf7, 0x88, 0xa9, 0xbf, 0x2d, 0x7d }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_228_public_x[] = { /* QCAVSx */ 0x00, 0x4d, 0x48, 0xbe, 0x59, 0x9e, 0xbb, 0x1e, 0xd6, 0x02, 0x47, 0x2d, 0x7a, 0x87, 0xf4, 0xcd, 0x20, 0x80, 0xf4, 0x4e, 0xc2, 0x88, 0x55, 0xfe, 0xcc, 0x3a, 0x9c, 0xdd, 0xe2, 0x55, 0x51, 0x78, 0x7a, 0xbd, 0x27, 0xcc, 0x1d, 0xa7, 0xe7, 0x78, 0x17, 0xe9, 0x4c, 0x9c, 0x02, 0x89, 0xc0, 0x05, 0xa0, 0xe3, 0x6e, 0x3b, 0xcf, 0xb0, 0xd3, 0x81, 0xe8, 0xcc, 0x96, 0x84, 0xb6, 0xf7, 0xdd, 0x05, 0x17, 0x7f, 0x16, 0xf6, 0x3f, 0x87, 0x21, 0xca }; static const uint8_t nist_kas_ecc_cdh_testvector_228_public_y[] = { /* QCAVSy */ 0x06, 0x2c, 0xf7, 0x1a, 0xf0, 0xa2, 0xf8, 0xe3, 0x5c, 0x4d, 0x7f, 0x93, 0x12, 0xbd, 0x34, 0xa8, 0x46, 0xa3, 0x80, 0xf6, 0x3f, 0x0d, 0xc7, 0x29, 0x4c, 0x18, 0x87, 0x71, 0x03, 0x35, 0x7e, 0x20, 0xd1, 0xf0, 0xee, 0xff, 0x31, 0x2a, 0x99, 0x3d, 0xeb, 0x2a, 0x1e, 0xcf, 0xc8, 0x0a, 0xea, 0x06, 0xa5, 0xb7, 0x1e, 0x4f, 0x8b, 0x9c, 0xef, 0xae, 0xbc, 0xd3, 0x26, 0x26, 0x91, 0x90, 0x64, 0xf8, 0x8a, 0xf4, 0x16, 0xd8, 0x6e, 0x3e, 0x7a, 0xf3 }; static const uint8_t nist_kas_ecc_cdh_testvector_228_private[] = { /* dIUT */ 0x00, 0x34, 0x09, 0x9b, 0x07, 0x73, 0xf0, 0x21, 0xee, 0x0d, 0x3d, 0xd1, 0x85, 0xc7, 0x04, 0xb5, 0x15, 0x8a, 0x94, 0x32, 0x8d, 0xaa, 0x09, 0x76, 0x8f, 0xad, 0x58, 0x04, 0xdf, 0x1d, 0xa2, 0xfc, 0x06, 0x71, 0x90, 0xcf, 0x10, 0x28, 0xc3, 0x02, 0x37, 0xbf, 0x2a, 0x48, 0xda, 0x13, 0xab, 0xae, 0x35, 0xa2, 0x5c, 0x3e, 0x63, 0x87, 0xd3, 0x99, 0x3f, 0x9b, 0x56, 0x83, 0x05, 0xb8, 0xbf, 0x08, 0x18, 0xff, 0x52, 0x7d, 0xd8, 0x20, 0x5d, 0xf4 }; /* QIUTx = 0674dcc4f755c44fdabdc078488107bb64a460ba932c7e185484ccd27fa870031107e9955204b0630b9b4d3608d9aa931d7c766cc2e45878eb6d8cd96bdf711b2fe8b47b8d233ed5 */ /* QIUTy = 05d96be6b7e2ba74c8032af19ca2f2b39d2fd4e8c89b156b6b25c2ea4f71f74a02ca7da2a463acd7605d5350fd16a9c9052534e7e81d648e4060a2b01c459c260cb6567da1fc5314 */ static const uint8_t nist_kas_ecc_cdh_testvector_228_out[] = { /* ZIUT */ 0x01, 0x46, 0x62, 0xb2, 0x61, 0xd0, 0xbc, 0x21, 0x68, 0x64, 0x2b, 0xfa, 0x4f, 0x80, 0xc4, 0xb3, 0xfe, 0x81, 0x76, 0xf6, 0x04, 0xad, 0x37, 0x03, 0xf4, 0x43, 0xec, 0x7a, 0xaa, 0x3d, 0xcf, 0x3c, 0x54, 0x65, 0xb8, 0x69, 0xa8, 0xfc, 0xea, 0x60, 0xb8, 0xf5, 0x5c, 0xe7, 0x11, 0x88, 0x06, 0xc5, 0xd2, 0x8a, 0x04, 0x84, 0x8b, 0xd9, 0x61, 0xdb, 0x00, 0x61, 0x20, 0x9b, 0x59, 0xbc, 0x02, 0x97, 0x9a, 0xcc, 0xe9, 0x32, 0x4d, 0x7c, 0x0c, 0x31 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_229_public_x[] = { /* QCAVSx */ 0x06, 0xbf, 0x25, 0x2e, 0x62, 0xc9, 0x96, 0x91, 0x71, 0xa9, 0x71, 0x76, 0x71, 0xda, 0x0f, 0x70, 0x32, 0xe9, 0x52, 0x0a, 0x49, 0x7e, 0xc8, 0x31, 0xf4, 0xdc, 0x77, 0x6a, 0xc8, 0x7e, 0x01, 0x94, 0xaf, 0x99, 0x54, 0x6c, 0x41, 0xd0, 0x80, 0x48, 0xea, 0x06, 0xda, 0x92, 0x35, 0xcf, 0x13, 0x69, 0xc3, 0xea, 0x53, 0xe6, 0xb8, 0xcb, 0xb7, 0xa7, 0xfd, 0x42, 0x96, 0x35, 0x45, 0x48, 0xd4, 0x4e, 0xdf, 0x46, 0x3f, 0x77, 0xad, 0x34, 0x1b, 0x02 }; static const uint8_t nist_kas_ecc_cdh_testvector_229_public_y[] = { /* QCAVSy */ 0x02, 0x94, 0xd5, 0xf7, 0xe7, 0x36, 0xdc, 0xd8, 0x99, 0x01, 0x98, 0xe4, 0xe0, 0xf0, 0xb3, 0x98, 0xb8, 0xac, 0x6a, 0x87, 0x76, 0x4a, 0xf6, 0x01, 0x59, 0x62, 0x34, 0xa2, 0xe1, 0x62, 0xc9, 0xc6, 0x67, 0xe4, 0x7e, 0xb3, 0xd9, 0x87, 0xef, 0xba, 0xeb, 0x03, 0xb5, 0xe3, 0x69, 0x9a, 0x38, 0xef, 0x95, 0x3c, 0x74, 0xfb, 0x28, 0xfd, 0x7d, 0x8a, 0x4e, 0xc5, 0xa3, 0x63, 0x19, 0xcc, 0xc4, 0x4a, 0x19, 0xaa, 0x88, 0x20, 0x1d, 0xda, 0xcb, 0xf8 }; static const uint8_t nist_kas_ecc_cdh_testvector_229_private[] = { /* dIUT */ 0x00, 0x15, 0x47, 0x43, 0x8d, 0xf7, 0x6f, 0xcb, 0x5e, 0x2a, 0xe6, 0x92, 0x58, 0x45, 0xbb, 0xfb, 0x03, 0xb4, 0xfb, 0xe8, 0x25, 0x56, 0x16, 0xec, 0x7f, 0xbd, 0x97, 0xb4, 0x8f, 0x11, 0x26, 0x92, 0x21, 0x9f, 0x4f, 0x12, 0x75, 0xe6, 0xd2, 0x45, 0x3d, 0x5b, 0xcf, 0x3b, 0xac, 0x41, 0x06, 0xf0, 0x16, 0x1b, 0x81, 0x19, 0xf4, 0x87, 0xd8, 0x8b, 0x5f, 0x8c, 0x8e, 0x08, 0xb3, 0xaa, 0x17, 0xb8, 0x3f, 0xe0, 0x11, 0x02, 0xd7, 0x63, 0x92, 0xd3 }; /* QIUTx = 0427e2dc11ee5223bd9c3d9418c79114682f91dda06e7d88c339a7e56e0dfb636b6e63fde8a381146ecb705ca202d2b73df408451763c5166066a97ff4e4f32f0b4cc942344b0b2d */ /* QIUTy = 0760c8a388e2eea27ef6838c7d45052e38cbee2096cbe89f774774134076658df90c62c7dc0e3fde995d7a99090993009ab6c535677dbdb376f183eb5092d2cb6a8837b6bea35dcd */ static const uint8_t nist_kas_ecc_cdh_testvector_229_out[] = { /* ZIUT */ 0x05, 0x1e, 0xc4, 0xdb, 0x06, 0x22, 0xb7, 0xb1, 0xc7, 0x98, 0x36, 0x64, 0x53, 0xc7, 0x0f, 0x95, 0x93, 0x76, 0xea, 0x39, 0x42, 0xae, 0xd2, 0xe9, 0x31, 0xff, 0x62, 0xa4, 0x01, 0x9e, 0xb1, 0x2b, 0xa5, 0xff, 0x11, 0x92, 0x14, 0xc8, 0xbf, 0xd8, 0xbd, 0xb6, 0x6e, 0x62, 0xb5, 0x62, 0x40, 0x0f, 0x2d, 0x3d, 0x48, 0xa8, 0x4b, 0x1b, 0x3b, 0xaa, 0xd3, 0x66, 0x7f, 0x73, 0x5a, 0xd4, 0xd0, 0xf1, 0x83, 0xbd, 0xb9, 0x1a, 0xae, 0xdc, 0xf1, 0xf1 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_230_public_x[] = { /* QCAVSx */ 0x05, 0x70, 0x1e, 0x63, 0xb0, 0x1c, 0x16, 0xc4, 0xeb, 0x19, 0x93, 0x82, 0x65, 0xba, 0x13, 0x4c, 0xac, 0x73, 0x16, 0x27, 0x8e, 0x2f, 0x1e, 0xb4, 0x0a, 0x04, 0x77, 0x54, 0x48, 0xbd, 0xed, 0x97, 0xe7, 0xa3, 0x7d, 0x01, 0xfe, 0xd8, 0xa4, 0xe0, 0xb4, 0x3f, 0xf4, 0xdb, 0xa2, 0x1a, 0x47, 0x75, 0x9c, 0xcd, 0x45, 0xbf, 0x96, 0x71, 0xdd, 0x22, 0xee, 0xc6, 0x5b, 0x4a, 0xff, 0x8b, 0x8d, 0xb8, 0x9d, 0xfe, 0x3e, 0x49, 0x0c, 0x0a, 0xc9, 0xd6 }; static const uint8_t nist_kas_ecc_cdh_testvector_230_public_y[] = { /* QCAVSy */ 0x02, 0xdd, 0x97, 0xb6, 0x41, 0x5a, 0xee, 0x2b, 0x01, 0xcf, 0xeb, 0x3c, 0xd2, 0xa0, 0x35, 0x78, 0xab, 0xfe, 0xd9, 0xca, 0x87, 0xbe, 0x9a, 0x26, 0xd8, 0x99, 0x59, 0x5a, 0x87, 0xbc, 0xbd, 0x97, 0x27, 0x48, 0xfa, 0x6a, 0x0b, 0xe4, 0xeb, 0x55, 0x7e, 0x69, 0xc6, 0xd2, 0x8e, 0x2b, 0xba, 0x15, 0x80, 0xdc, 0x74, 0xe2, 0x75, 0x1d, 0x7c, 0xcd, 0x91, 0x8c, 0x46, 0xb4, 0xbe, 0x68, 0x75, 0xa4, 0xe4, 0xc2, 0x90, 0xd9, 0x59, 0xc2, 0x3c, 0x12 }; static const uint8_t nist_kas_ecc_cdh_testvector_230_private[] = { /* dIUT */ 0x00, 0xc7, 0xb4, 0x25, 0x2c, 0xa9, 0xb1, 0x92, 0xc5, 0xfe, 0xaa, 0x9a, 0x21, 0x0f, 0xd8, 0x4e, 0x2e, 0x48, 0x32, 0x02, 0x71, 0xf1, 0x0f, 0x67, 0xea, 0x9e, 0xb3, 0x0b, 0x0d, 0xe8, 0x08, 0x6d, 0x59, 0xda, 0xe0, 0x42, 0x59, 0xfd, 0x12, 0xb0, 0x86, 0xd8, 0x90, 0xe2, 0x2d, 0x45, 0xd2, 0x7d, 0x7c, 0x84, 0x55, 0xdc, 0xf7, 0xad, 0xa7, 0x96, 0xe3, 0x5e, 0x3a, 0x31, 0x38, 0x34, 0x2c, 0xc7, 0x36, 0xbc, 0x3e, 0xd3, 0x78, 0x1c, 0x41, 0x19 }; /* QIUTx = 0325623838e8b18d81b68060734254eb02b8ebb2264556fc9850c36d3035449aa764f351dbaf7bbca9b9adb11f27cc88a1ac6fb71aa10ef8d0d09392b0ca7eaa7a5cc14078cc18bb */ /* QIUTy = 0098fc7656d9de3a51923dba290ecbe413ef8d951f24e9248cb552309f97127fb9429ecf6dd07b6de894e16ab60e33b4ee73024ccbe866de5e17f1b478dc7727a1bb42371820b12d */ static const uint8_t nist_kas_ecc_cdh_testvector_230_out[] = { /* ZIUT */ 0x05, 0xb3, 0x55, 0xeb, 0x5c, 0x47, 0xd8, 0x02, 0x7b, 0x6c, 0x53, 0x01, 0xd2, 0x46, 0x3b, 0x99, 0xc6, 0x36, 0xdb, 0x20, 0x77, 0x92, 0xe2, 0x97, 0x5a, 0xb1, 0xa5, 0x3c, 0x1c, 0xbb, 0x13, 0x12, 0x80, 0x28, 0x84, 0x32, 0xa7, 0x9a, 0x3b, 0x47, 0x27, 0x1d, 0x6a, 0x2b, 0xd7, 0x77, 0x29, 0x8b, 0xaf, 0x8a, 0x67, 0x5f, 0x66, 0xbe, 0x9d, 0xc7, 0x2c, 0x35, 0x88, 0xd2, 0x99, 0xdf, 0x8b, 0x52, 0xe7, 0x84, 0x03, 0x22, 0xb4, 0x3c, 0x20, 0x71 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_231_public_x[] = { /* QCAVSx */ 0x03, 0x2f, 0xa1, 0x81, 0x6f, 0xd2, 0x31, 0x7c, 0x16, 0xb5, 0xb1, 0x9a, 0x25, 0xd4, 0x6f, 0xa5, 0xe4, 0x5a, 0xb1, 0x5e, 0xe9, 0xf2, 0xb1, 0xd1, 0x27, 0x4c, 0x2a, 0x06, 0x02, 0x39, 0x94, 0xdb, 0x30, 0x9f, 0xad, 0x56, 0xf6, 0x0b, 0x3c, 0xe5, 0x7f, 0x32, 0xdf, 0xc7, 0xd0, 0x45, 0xa8, 0x4b, 0x7d, 0x80, 0x52, 0x32, 0xbe, 0x34, 0xc7, 0xe7, 0x59, 0x51, 0x4c, 0x30, 0xa2, 0x52, 0x07, 0xba, 0x80, 0x02, 0x15, 0xb2, 0x06, 0x0f, 0x04, 0xc2 }; static const uint8_t nist_kas_ecc_cdh_testvector_231_public_y[] = { /* QCAVSy */ 0x04, 0x14, 0x69, 0x59, 0x3d, 0x57, 0x48, 0x07, 0x2b, 0x9a, 0xc8, 0xfd, 0xe0, 0x23, 0x09, 0x52, 0x89, 0xbc, 0xdf, 0x65, 0xab, 0x1b, 0xfc, 0x08, 0x56, 0xf8, 0x3e, 0x9a, 0xe0, 0x6c, 0x89, 0x73, 0x03, 0xbd, 0x16, 0xf5, 0xe4, 0x58, 0x23, 0xd6, 0x5f, 0xec, 0x83, 0x10, 0xfd, 0x43, 0x32, 0xb6, 0x5c, 0xff, 0x47, 0xa7, 0x99, 0xaf, 0x4f, 0x7c, 0x86, 0x38, 0xe2, 0xd7, 0xf8, 0x59, 0x48, 0xc4, 0x3f, 0x10, 0x53, 0x4c, 0x98, 0x0c, 0xcb, 0x62 }; static const uint8_t nist_kas_ecc_cdh_testvector_231_private[] = { /* dIUT */ 0x00, 0x66, 0xcc, 0x51, 0x98, 0x0d, 0x38, 0x51, 0xb4, 0x88, 0xc2, 0xc1, 0x81, 0x49, 0x6c, 0x83, 0x50, 0x5f, 0xb9, 0x57, 0xb1, 0xec, 0x4a, 0x84, 0xdf, 0x1e, 0x10, 0x5e, 0x30, 0xd0, 0x02, 0xbc, 0xb9, 0x78, 0xb6, 0xd0, 0xbd, 0xc3, 0xb7, 0x64, 0x4e, 0xd3, 0xdf, 0xbc, 0x33, 0xca, 0x6b, 0xfe, 0x43, 0x62, 0xcd, 0x8c, 0xc5, 0x41, 0x74, 0x0b, 0x0d, 0xe8, 0xcf, 0x2e, 0xdc, 0xce, 0x45, 0x92, 0xe3, 0x4f, 0xa1, 0x1a, 0xc2, 0x6e, 0xc9, 0x22 }; /* QIUTx = 0771fa29e5930d6dfd36d3a9e7159675fd23d0b5e1fd9ae6454aca9e8127f1e7e3f5322b5c16b095573b3266d08f0dc33043ffb3d7b08e4e052ed3f0349a329025ea6ff3e1668547 */ /* QIUTy = 022f994f9974692dbb6e58cc7ae5f90652ee231e0a3961569dc646d114522a3777410c1b352d668079f80010bb540e4c28408665810fe61fd60e70d30c688eab8fde04364dee5c9b */ static const uint8_t nist_kas_ecc_cdh_testvector_231_out[] = { /* ZIUT */ 0x05, 0x2b, 0xd7, 0x8b, 0xf1, 0x32, 0x6c, 0x6d, 0x91, 0x84, 0x0a, 0x35, 0x1d, 0x48, 0x74, 0xd3, 0x6b, 0x14, 0x71, 0x39, 0x88, 0x23, 0x56, 0xc5, 0x95, 0xb8, 0x60, 0x7f, 0x99, 0x98, 0x77, 0x30, 0x92, 0xa9, 0x9a, 0xdf, 0x70, 0xad, 0xee, 0xd1, 0x9e, 0x12, 0x2d, 0x4d, 0x2f, 0xec, 0x16, 0x28, 0x5f, 0x00, 0x01, 0x61, 0x14, 0x51, 0x35, 0xd9, 0x63, 0x55, 0xcb, 0xa0, 0x39, 0xa9, 0x63, 0x35, 0xe7, 0x71, 0x67, 0x24, 0xc2, 0x49, 0xf8, 0x8b }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_232_public_x[] = { /* QCAVSx */ 0x03, 0xe6, 0x3d, 0xd4, 0xc9, 0x8c, 0x15, 0x13, 0x61, 0xc9, 0x90, 0x2b, 0x76, 0x3a, 0xe3, 0x2f, 0x2d, 0x6d, 0xe7, 0x59, 0x53, 0xfa, 0x3d, 0x68, 0x38, 0xc1, 0xd6, 0x13, 0xd4, 0x48, 0xfc, 0xa7, 0x3b, 0xf3, 0x02, 0xd3, 0x02, 0x12, 0xa9, 0x6d, 0x32, 0xb9, 0x54, 0x9e, 0x17, 0xc5, 0xcf, 0x39, 0x5c, 0x56, 0x51, 0x91, 0xf6, 0xa2, 0x2d, 0xac, 0x4d, 0xa7, 0xc1, 0xe1, 0xa9, 0xd9, 0xba, 0xe8, 0x6e, 0xbf, 0xb7, 0x2c, 0x82, 0xea, 0x19, 0x9a }; static const uint8_t nist_kas_ecc_cdh_testvector_232_public_y[] = { /* QCAVSy */ 0x04, 0x16, 0x09, 0xab, 0x9c, 0x12, 0xc1, 0x5e, 0x51, 0x27, 0x00, 0x5e, 0xbe, 0xff, 0x6f, 0xd1, 0xf7, 0x3b, 0x69, 0x12, 0xed, 0x07, 0x0a, 0xf8, 0x7f, 0x5f, 0xfc, 0x21, 0xdf, 0x90, 0x3d, 0xde, 0x1d, 0x71, 0x55, 0x82, 0xdd, 0x2f, 0x69, 0x90, 0x40, 0x20, 0x00, 0x45, 0xcd, 0xba, 0x9e, 0xcd, 0x75, 0x8a, 0xc4, 0xd0, 0x84, 0xd4, 0xc8, 0xd7, 0x82, 0x19, 0xf6, 0xfa, 0xd9, 0x4d, 0x34, 0x1a, 0xd7, 0x7d, 0xac, 0xcd, 0xab, 0xb5, 0x4a, 0x2b }; static const uint8_t nist_kas_ecc_cdh_testvector_232_private[] = { /* dIUT */ 0x01, 0x99, 0x0d, 0x15, 0xfa, 0x2c, 0xc9, 0x0e, 0x78, 0x3d, 0x43, 0x22, 0x01, 0x78, 0x4b, 0xab, 0x56, 0xb6, 0xd2, 0x9d, 0x1f, 0x26, 0x65, 0xa7, 0x6c, 0xd0, 0x13, 0xeb, 0x96, 0xf6, 0x30, 0x0e, 0xd8, 0xf7, 0x62, 0xb7, 0x8a, 0x55, 0x96, 0xac, 0x7e, 0x8c, 0x1e, 0x76, 0x16, 0x7f, 0x10, 0x7c, 0x20, 0x44, 0x3b, 0x1a, 0xc7, 0x32, 0x10, 0x1e, 0x9f, 0x0a, 0xca, 0x12, 0x55, 0x1a, 0x53, 0x6d, 0x15, 0x2d, 0xf2, 0xb3, 0xdb, 0x0f, 0x20, 0xde }; /* QIUTx = 076c3d72f0e715f2491bc9d99278a8ef3c390b3a96e9997b37e5b7bd8a5f07af68f8e0ee3892b63ff112a73a849f0e84a782d4fb426eb5f2f15adacce9e5476a6daccf3a7fa9a291 */ /* QIUTy = 0540a763823599e0c86027bacc8cbb30e3a2467276fc4f7e5fd4ed385dfc6f883fed7bca69df21a0668b55ebd292da8fd6356a3ec5cd1c762c01473aa067004cacedad564fe06910 */ static const uint8_t nist_kas_ecc_cdh_testvector_232_out[] = { /* ZIUT */ 0x02, 0x26, 0xc2, 0x8e, 0x5a, 0x6b, 0xc7, 0x35, 0x93, 0x5f, 0x9d, 0xf2, 0xc1, 0xb0, 0x2d, 0x09, 0x6d, 0x4d, 0xee, 0x41, 0xff, 0xb9, 0x5a, 0x67, 0x90, 0x5a, 0xab, 0x8d, 0xe1, 0xb2, 0xd8, 0xc6, 0x6e, 0x2b, 0xb4, 0x71, 0x29, 0x30, 0x91, 0x43, 0x8d, 0x3f, 0x05, 0xdf, 0x7e, 0x48, 0x00, 0x3e, 0x58, 0xa9, 0x58, 0xb7, 0x2f, 0x83, 0x9f, 0x7f, 0x2e, 0x2c, 0x54, 0x28, 0x7f, 0xa3, 0xca, 0xdc, 0xd4, 0x1a, 0x25, 0x42, 0xae, 0x4e, 0xc0, 0x3a }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_233_public_x[] = { /* QCAVSx */ 0x06, 0xf9, 0x1a, 0x7c, 0xe1, 0x1b, 0xa9, 0xbf, 0x2d, 0xe1, 0xfe, 0x07, 0x0f, 0x9d, 0xc8, 0x43, 0xbb, 0x71, 0x7c, 0x30, 0x6d, 0x9c, 0x63, 0xb5, 0x07, 0x8d, 0x2a, 0x11, 0x32, 0x3f, 0x20, 0xc9, 0xc0, 0xd7, 0xb7, 0x74, 0x3d, 0x31, 0x1d, 0xda, 0xcd, 0xcf, 0x5d, 0xd0, 0x0f, 0x49, 0x8b, 0x19, 0x96, 0x72, 0xc7, 0x8a, 0xe2, 0x5e, 0x68, 0x64, 0xd6, 0x2b, 0xdc, 0x16, 0x93, 0x5d, 0x6f, 0xb8, 0xda, 0xd2, 0x08, 0x2d, 0x36, 0x76, 0xeb, 0xf3 }; static const uint8_t nist_kas_ecc_cdh_testvector_233_public_y[] = { /* QCAVSy */ 0x04, 0x59, 0x3c, 0x5b, 0xad, 0x12, 0xc3, 0xd6, 0x55, 0xc6, 0x61, 0x1c, 0x7c, 0xa9, 0x71, 0x1f, 0x9e, 0x32, 0xa2, 0x8f, 0xee, 0x54, 0xb3, 0xb8, 0x24, 0x39, 0x62, 0xa3, 0xc5, 0x5d, 0x41, 0xf2, 0xc1, 0x85, 0xe4, 0xc5, 0x8b, 0x7a, 0x29, 0x98, 0xe9, 0x78, 0x02, 0x1b, 0x95, 0xb7, 0x24, 0x63, 0x5d, 0xac, 0xcb, 0xd7, 0xfc, 0x30, 0xd2, 0x07, 0x20, 0x79, 0x7b, 0xc2, 0x91, 0x36, 0x2c, 0x55, 0xb0, 0x24, 0xac, 0xb2, 0xbd, 0xcf, 0x3d, 0x59 }; static const uint8_t nist_kas_ecc_cdh_testvector_233_private[] = { /* dIUT */ 0x00, 0x2b, 0x09, 0x37, 0xe7, 0x31, 0xf5, 0x9d, 0xdd, 0xdf, 0x0e, 0x94, 0xfb, 0xa9, 0x2b, 0xb1, 0xa6, 0xce, 0xb8, 0x19, 0xe7, 0x65, 0x9b, 0xcf, 0x6e, 0xdd, 0x4b, 0x4a, 0xf4, 0x9c, 0x2e, 0xf2, 0x5c, 0x5b, 0x60, 0x39, 0x25, 0x6f, 0x92, 0x83, 0x63, 0xe1, 0x84, 0x04, 0xb1, 0x65, 0x3d, 0x39, 0x98, 0x05, 0x4c, 0x2c, 0x25, 0xa3, 0xf8, 0x3a, 0x0c, 0x55, 0x48, 0xa1, 0x39, 0xe3, 0xe6, 0xa1, 0x80, 0x75, 0x67, 0x46, 0xcd, 0x34, 0xee, 0x29 }; /* QIUTx = 0270c4c00de2709010c7cf047a0ce69b87f41dca48d35b71fba4b258886d73ae42defb8653951c1bd3eb4ce0e6175a946c67afa67753475c51fd525b0fd9f5a26dafca319faa5e15 */ /* QIUTy = 06680bbdc281505f5d3fbe29744a999e07ff612576993f6f8be3113db1ee6cf23799867bbc80a140376a9b6327451f98bf8fd1db46f9d9cc05e88704d5712d4567e1df40d39e99ef */ static const uint8_t nist_kas_ecc_cdh_testvector_233_out[] = { /* ZIUT */ 0x05, 0x1a, 0x3d, 0xeb, 0x05, 0x2d, 0x3e, 0x99, 0xbb, 0x6a, 0xb6, 0xc6, 0xb2, 0x84, 0xdb, 0x2c, 0x99, 0x8e, 0x9b, 0xee, 0x54, 0x3e, 0x02, 0xe5, 0x7f, 0x1b, 0x13, 0xfe, 0x9f, 0xaf, 0xbf, 0xe5, 0x3a, 0x89, 0x65, 0x8c, 0x58, 0xeb, 0x94, 0x7d, 0xbd, 0x17, 0x8a, 0xea, 0x2f, 0x6c, 0xb2, 0x8e, 0x30, 0x5c, 0x98, 0x67, 0xbd, 0x65, 0xbb, 0x26, 0xf7, 0x17, 0x93, 0xf9, 0x0c, 0x98, 0x4c, 0xa1, 0x11, 0x13, 0xe1, 0xa8, 0xdb, 0xc8, 0xf7, 0xd1 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_234_public_x[] = { /* QCAVSx */ 0x05, 0xab, 0x2a, 0x7f, 0x10, 0xac, 0x89, 0xf9, 0x8c, 0x40, 0x95, 0x80, 0xab, 0xc1, 0x1a, 0xd9, 0x0c, 0x93, 0x36, 0x0e, 0x6a, 0xb2, 0x82, 0x92, 0x0b, 0x59, 0xd3, 0x16, 0xca, 0x9f, 0x2b, 0x23, 0xae, 0xb5, 0x08, 0x76, 0xcb, 0x1b, 0xcb, 0xe8, 0xee, 0x9a, 0xe6, 0xb5, 0x53, 0x3f, 0xdc, 0xd1, 0x1a, 0xd4, 0xf8, 0x6d, 0x89, 0x18, 0xd6, 0x63, 0x89, 0xda, 0x87, 0xc9, 0x8b, 0xf1, 0xd6, 0x32, 0x3b, 0xd0, 0x94, 0x7d, 0x80, 0x99, 0x08, 0x3b }; static const uint8_t nist_kas_ecc_cdh_testvector_234_public_y[] = { /* QCAVSy */ 0x06, 0x89, 0xe1, 0x94, 0x72, 0x76, 0x79, 0x1d, 0xcb, 0x95, 0x27, 0x18, 0x3e, 0x32, 0xa0, 0x80, 0x72, 0xb7, 0xe0, 0x3d, 0xca, 0xd1, 0x75, 0xfe, 0x3c, 0xfd, 0x7b, 0xee, 0xfc, 0x84, 0x8d, 0xce, 0xf4, 0x83, 0x38, 0x0c, 0x60, 0x05, 0x41, 0x13, 0x85, 0xc7, 0x02, 0x7c, 0x9a, 0x52, 0xb6, 0x0a, 0x6e, 0x53, 0x7a, 0x87, 0x53, 0x80, 0xd2, 0x5b, 0xc4, 0x7c, 0x7b, 0xf2, 0x36, 0x4d, 0xd6, 0x8a, 0x66, 0xf2, 0x1d, 0x0f, 0x57, 0x86, 0x6a, 0x42 }; static const uint8_t nist_kas_ecc_cdh_testvector_234_private[] = { /* dIUT */ 0x01, 0xcd, 0x41, 0xcf, 0xf7, 0x62, 0x40, 0x2a, 0x83, 0x4e, 0x7e, 0x0a, 0xb9, 0x08, 0xfc, 0x54, 0x94, 0x0f, 0x69, 0x7b, 0x50, 0x02, 0x2a, 0x4d, 0xfe, 0xd8, 0xcf, 0x0b, 0x13, 0xd7, 0xe0, 0xee, 0x52, 0x3f, 0xbf, 0x33, 0xee, 0x96, 0x93, 0x89, 0x5f, 0x91, 0x8d, 0x94, 0xe1, 0x5b, 0x08, 0x46, 0x55, 0xd6, 0x1b, 0x22, 0x94, 0xca, 0x51, 0xc4, 0x12, 0x3f, 0xe5, 0xe0, 0x86, 0x8e, 0x9d, 0x0d, 0x1c, 0xac, 0x21, 0x38, 0xf0, 0x57, 0x7a, 0x17 }; /* QIUTx = 0610797bbc6d9131180ae54ab66e6780849258369741470e076cf05e0785bb4e7900b908d38d8dab3b9427b952add20efb758cff80aeb641c4dde1eeda5509f386d5658559609cef */ /* QIUTy = 068d2515f425a0e3037547342f1b6ff931763f5052e536ea4f78377b5c941459c8c2201482afcf3cda7390e9e5d319451864ca03683541ab2cd77a9d88fd7a610ca845ee5cd3d498 */ static const uint8_t nist_kas_ecc_cdh_testvector_234_out[] = { /* ZIUT */ 0x00, 0x69, 0x7c, 0x75, 0x1d, 0xdb, 0xca, 0x70, 0x34, 0xfb, 0x4d, 0x3f, 0xc1, 0xb2, 0x61, 0x8d, 0xaf, 0x78, 0xcd, 0xae, 0x46, 0x4e, 0x83, 0x32, 0xd1, 0x21, 0x50, 0x20, 0xc8, 0xf8, 0x96, 0xf4, 0x86, 0x4c, 0x7a, 0x6f, 0x2c, 0x61, 0xa3, 0x63, 0xf7, 0x30, 0xf5, 0x8f, 0xd3, 0xbd, 0xb4, 0xf7, 0x8a, 0x90, 0xb4, 0x0a, 0xeb, 0x83, 0xb4, 0xfb, 0xc1, 0xd8, 0xd3, 0x7c, 0xf6, 0xa2, 0x7a, 0x6f, 0x72, 0x2c, 0x68, 0xa8, 0x29, 0x79, 0xfa, 0x16 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_235_public_x[] = { /* QCAVSx */ 0x00, 0x34, 0x09, 0x1c, 0x3a, 0xc6, 0xfc, 0x52, 0x99, 0xdf, 0x18, 0xf1, 0x62, 0xea, 0xf7, 0xa2, 0x07, 0xfc, 0x15, 0x43, 0xaa, 0x49, 0x8e, 0x72, 0x72, 0xe1, 0x5a, 0x92, 0x77, 0x2f, 0x57, 0x77, 0x22, 0x29, 0x06, 0x94, 0x56, 0xe2, 0x19, 0xc9, 0xc2, 0x87, 0x2b, 0xd5, 0x37, 0x83, 0xb0, 0xfb, 0x13, 0x45, 0xf5, 0xe8, 0x46, 0x74, 0xc4, 0x34, 0x41, 0x29, 0xa3, 0x14, 0x14, 0x6b, 0x70, 0x30, 0xfc, 0x75, 0x19, 0x7a, 0x20, 0xc5, 0x88, 0xaa }; static const uint8_t nist_kas_ecc_cdh_testvector_235_public_y[] = { /* QCAVSy */ 0x04, 0x9e, 0x3a, 0x3f, 0x5e, 0xe6, 0x58, 0x75, 0xe1, 0x40, 0x10, 0x89, 0x97, 0x06, 0x38, 0xb8, 0x07, 0xdf, 0x97, 0x56, 0x8a, 0x59, 0x95, 0xc8, 0xfe, 0x2f, 0x50, 0x24, 0x73, 0xb8, 0x3f, 0x58, 0xc5, 0x56, 0xc5, 0xf2, 0x14, 0xed, 0x6f, 0x03, 0xef, 0x8e, 0xce, 0x01, 0x40, 0x1a, 0x21, 0x34, 0xbc, 0x04, 0x1f, 0x66, 0x92, 0x2f, 0xcc, 0x4e, 0x39, 0x38, 0xe0, 0xc6, 0xd3, 0x02, 0xeb, 0x42, 0x20, 0x06, 0x78, 0xa9, 0x71, 0x39, 0xf2, 0x91 }; static const uint8_t nist_kas_ecc_cdh_testvector_235_private[] = { /* dIUT */ 0x01, 0x9d, 0xff, 0x0d, 0x72, 0xa8, 0xb0, 0x42, 0xc4, 0xe9, 0x2f, 0x1d, 0xae, 0x74, 0x07, 0xbf, 0x4a, 0x10, 0x6c, 0xda, 0x56, 0x4d, 0xb7, 0x50, 0x8e, 0x5a, 0x76, 0xb0, 0x31, 0x30, 0xc9, 0x1d, 0x5e, 0x5c, 0xbc, 0xf2, 0xf5, 0x78, 0xc2, 0xe9, 0xde, 0xe4, 0x38, 0x49, 0xf9, 0x11, 0xd7, 0x77, 0x3d, 0x4c, 0x26, 0x7e, 0x28, 0x2c, 0x27, 0x7b, 0x73, 0x1f, 0x88, 0xa6, 0xef, 0x0e, 0xed, 0xdd, 0x52, 0x0f, 0x57, 0xe7, 0x43, 0xeb, 0xf9, 0x65 }; /* QIUTx = 05bb60a5fe8e3b173cf8413eaf413a3286a5a7aa378f21446c61057696012746d02d10a831f785c9c96561ffc6ad4f9ecdf4937fffd8e698408e660fe896f7ed44af6b3b42ea849f */ /* QIUTy = 037e3a35e48aa66bd851c59f851d4a1ff334e0e589dac30986acd06d6eb8ce236f2a9688f278a14dcfe0660b5fa0e97ecfcebbf5b40d3d3f5150a5545acba6239c00419ac72dc2cc */ static const uint8_t nist_kas_ecc_cdh_testvector_235_out[] = { /* ZIUT */ 0x03, 0x22, 0x51, 0x7d, 0xa3, 0x0e, 0x01, 0x0a, 0xea, 0xa2, 0xec, 0x9b, 0xad, 0x27, 0x45, 0xd8, 0xe6, 0x7f, 0x90, 0x62, 0x94, 0xec, 0xd6, 0xb1, 0xd1, 0x68, 0x08, 0xbe, 0x38, 0x37, 0xf7, 0x90, 0x70, 0xd0, 0xe1, 0xbb, 0xbd, 0x61, 0x7f, 0x4b, 0x8b, 0x03, 0x1d, 0x3b, 0x51, 0xea, 0x2a, 0xcc, 0x59, 0xde, 0x40, 0x8a, 0x13, 0x01, 0x38, 0xc7, 0x85, 0x71, 0xf8, 0x80, 0x0f, 0xa9, 0x07, 0xca, 0xf5, 0x50, 0xd2, 0x33, 0x23, 0xd1, 0xc8, 0x18 }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_236_public_x[] = { /* QCAVSx */ 0x05, 0x7b, 0x7c, 0x65, 0xbc, 0x51, 0xe8, 0x7b, 0xda, 0xd3, 0x7c, 0x2b, 0x4d, 0xae, 0x67, 0xfb, 0x00, 0x8c, 0xe7, 0x1f, 0xd3, 0x07, 0x2e, 0x41, 0xb7, 0x7c, 0x56, 0x2d, 0x7c, 0x41, 0x74, 0x88, 0x72, 0xa2, 0x0b, 0xef, 0x85, 0x17, 0xba, 0x4b, 0xe8, 0x96, 0x37, 0xdd, 0xe9, 0x8e, 0x2b, 0xa1, 0xb3, 0xb0, 0x1f, 0x63, 0x94, 0x07, 0x13, 0xe2, 0x82, 0x3d, 0x8d, 0xab, 0x68, 0xa5, 0xcc, 0x78, 0x56, 0x1d, 0xe1, 0x40, 0x85, 0xe4, 0xcf, 0x87 }; static const uint8_t nist_kas_ecc_cdh_testvector_236_public_y[] = { /* QCAVSy */ 0x00, 0xba, 0x77, 0x43, 0x0a, 0x55, 0x60, 0x08, 0x9d, 0xfa, 0xc4, 0xf6, 0x8b, 0x4f, 0x34, 0x93, 0x7a, 0x38, 0x4d, 0xd6, 0x07, 0xbc, 0xbb, 0x5f, 0xab, 0x56, 0x77, 0xa7, 0xfa, 0xe0, 0x9e, 0xd0, 0x7c, 0xfa, 0xde, 0x39, 0x9e, 0x87, 0xce, 0x9f, 0xdd, 0x93, 0x97, 0xc6, 0x81, 0xaa, 0x33, 0x78, 0xce, 0x3b, 0xc8, 0x2b, 0x00, 0x7f, 0x6d, 0xe4, 0xf7, 0xcb, 0x96, 0xda, 0xdf, 0x55, 0xa4, 0xc8, 0x73, 0x4a, 0x37, 0xf3, 0x9a, 0x5c, 0x2f, 0x25 }; static const uint8_t nist_kas_ecc_cdh_testvector_236_private[] = { /* dIUT */ 0x01, 0xe1, 0x41, 0x6d, 0x42, 0x99, 0x26, 0xca, 0xbe, 0xa5, 0x47, 0xbb, 0x27, 0x76, 0x71, 0x0a, 0x52, 0xf7, 0x13, 0x03, 0x93, 0x08, 0x10, 0x20, 0x31, 0x2b, 0x39, 0x62, 0x19, 0x5e, 0xb6, 0xed, 0x17, 0xc6, 0xd4, 0x36, 0xbc, 0x46, 0xa5, 0xb4, 0x7a, 0x7a, 0xaa, 0xcf, 0x8f, 0x81, 0x17, 0xfe, 0xa3, 0xca, 0xfa, 0x16, 0x66, 0x5c, 0xc1, 0x84, 0x5b, 0x0e, 0xc9, 0x4f, 0xaf, 0x68, 0x75, 0x79, 0xb1, 0xc1, 0x16, 0xba, 0x18, 0x3e, 0x82, 0x5f }; /* QIUTx = 065660a58688a16588a9c16b8272040a30afe3150630676023fe165686dfbda64fc85995ddc18c9c5b029bffbd4dffa8f62989c639a68623eca78009cb088ee1cb42c4855b79d302 */ /* QIUTy = 0492c3867f137bf2787a7ab0568d3079b8d9a1e0b0ba5d29d0c7ba616d0bb27725da2ca6bc67bf084fab52599ed42b0ef48743423cbc6f4135692c309ae2630cc4a5390be93f274b */ static const uint8_t nist_kas_ecc_cdh_testvector_236_out[] = { /* ZIUT */ 0x00, 0x09, 0x11, 0xec, 0x1c, 0xf8, 0x2a, 0x22, 0xc8, 0x49, 0xb4, 0x01, 0xdf, 0xe5, 0x64, 0x53, 0xa0, 0x6f, 0x4a, 0xf3, 0x26, 0x44, 0xea, 0x8b, 0x63, 0x13, 0x5b, 0x68, 0xa9, 0x79, 0x23, 0x6d, 0x05, 0x96, 0x8e, 0xea, 0xdc, 0xa7, 0xf0, 0xcd, 0x33, 0x9d, 0x29, 0x5c, 0xc5, 0x89, 0x67, 0xa7, 0xf3, 0x8c, 0xfa, 0xd6, 0xe9, 0x47, 0xa7, 0x12, 0x95, 0x73, 0x3e, 0x42, 0xca, 0x3c, 0x1b, 0xa9, 0xb4, 0xff, 0x61, 0x95, 0x60, 0x7b, 0xb5, 0x30 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_237_public_x[] = { /* QCAVSx */ 0x06, 0xfa, 0x74, 0x77, 0xed, 0xec, 0x5f, 0x1e, 0x74, 0x28, 0x81, 0xf8, 0xd7, 0xb2, 0xaf, 0x56, 0x37, 0x51, 0x13, 0xe9, 0x92, 0xb7, 0x97, 0xfd, 0x38, 0x7e, 0xb5, 0xb5, 0x3c, 0x33, 0xc6, 0xba, 0x72, 0x36, 0x41, 0x7b, 0x2c, 0x7e, 0x6e, 0x34, 0x62, 0x67, 0xf1, 0xb8, 0xc6, 0xd7, 0x85, 0x7d, 0x6e, 0x08, 0xf9, 0xa6, 0x0e, 0x86, 0xde, 0x23, 0xda, 0x4b, 0x36, 0x84, 0x24, 0xfb, 0x00, 0x3f, 0x96, 0xb4, 0xc8, 0x9f, 0x5d, 0x24, 0x4a, 0x74 }; static const uint8_t nist_kas_ecc_cdh_testvector_237_public_y[] = { /* QCAVSy */ 0x07, 0x3e, 0x1f, 0xed, 0xf6, 0x2e, 0x8c, 0x81, 0x28, 0x36, 0x22, 0xb5, 0x3e, 0xb2, 0xcd, 0xb2, 0x7b, 0x64, 0xc3, 0xc1, 0xdd, 0x78, 0xda, 0x0c, 0x90, 0xdd, 0x6c, 0x3c, 0x77, 0x6a, 0xd1, 0x46, 0x30, 0x2e, 0x43, 0xab, 0xa5, 0x41, 0x37, 0x9b, 0xc8, 0xf3, 0xbd, 0xdc, 0x2e, 0x19, 0xff, 0x15, 0xd9, 0x66, 0x64, 0xce, 0x2d, 0x09, 0xeb, 0x6f, 0xb5, 0xb1, 0x38, 0x48, 0xa8, 0x2b, 0x31, 0xb4, 0x52, 0xd8, 0xe8, 0x4d, 0xa3, 0xb8, 0x53, 0x18 }; static const uint8_t nist_kas_ecc_cdh_testvector_237_private[] = { /* dIUT */ 0x01, 0x96, 0x36, 0x3e, 0xef, 0x1a, 0x0e, 0x5b, 0xe9, 0x7d, 0x8f, 0x76, 0x01, 0xfe, 0x40, 0xff, 0x40, 0x10, 0xf4, 0x94, 0x9f, 0x01, 0x69, 0x08, 0xa9, 0x06, 0xed, 0x5c, 0xda, 0xf1, 0x22, 0x1d, 0x3a, 0x59, 0x3b, 0x3a, 0x46, 0x76, 0xbe, 0xaf, 0xd1, 0xfa, 0x14, 0xbc, 0x0f, 0x7c, 0x53, 0x3b, 0x17, 0x08, 0x6f, 0x20, 0x7f, 0x9c, 0x48, 0x4c, 0xfc, 0x2f, 0xbc, 0x3d, 0xb2, 0xbe, 0x41, 0x23, 0xa8, 0xe8, 0x6f, 0x3b, 0x49, 0x11, 0xcc, 0xe3 }; /* QIUTx = 01b12e38914ee0075a888d6d61cdc7570c511d90a9e3a0e2738c3a9981ab9aba9a6c61460bad079a28429a5207d2c801af2fdceda366440a11686765e9ba77f7a6bc55012d4c9510 */ /* QIUTy = 070ede5877665fd636adcfd07220d745ed7ac0a9b0202159f450c9f6c1b837192a69ee6ad955327eb9cd326a0588b59723db4e8fd258b11db888a53eb14f2be08512688329059892 */ static const uint8_t nist_kas_ecc_cdh_testvector_237_out[] = { /* ZIUT */ 0x07, 0x24, 0xc9, 0x79, 0xaf, 0xfb, 0x3a, 0xb8, 0xd3, 0x07, 0x52, 0x97, 0x59, 0xba, 0xe5, 0xfa, 0x67, 0x31, 0x9d, 0x44, 0x18, 0x51, 0xe5, 0x81, 0x7f, 0xef, 0x01, 0x43, 0x50, 0xe3, 0x01, 0x4e, 0x06, 0x84, 0x28, 0xc9, 0xda, 0xc3, 0x95, 0xc5, 0xe7, 0xb9, 0xe5, 0xb8, 0x87, 0x74, 0x57, 0xb3, 0xe4, 0x62, 0x5e, 0xf4, 0x9e, 0xde, 0x4a, 0xe3, 0x62, 0x67, 0x55, 0xee, 0xfc, 0x3f, 0xb3, 0xcf, 0x09, 0xc2, 0x3e, 0x8a, 0x5a, 0x9f, 0x8c, 0x25 }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_238_public_x[] = { /* QCAVSx */ 0x01, 0x8b, 0xb6, 0xcb, 0xfc, 0xbf, 0xba, 0xed, 0x46, 0x85, 0x64, 0xb3, 0x68, 0xf0, 0xb0, 0xab, 0xc3, 0xfb, 0xca, 0x47, 0xdc, 0xc1, 0x9f, 0x2c, 0x84, 0x6b, 0xfa, 0x28, 0x73, 0x70, 0xe1, 0xb9, 0x12, 0xf6, 0xb7, 0x0e, 0x08, 0x51, 0x9f, 0x57, 0x7f, 0x0c, 0xac, 0x32, 0x5b, 0x79, 0xfd, 0x66, 0xb6, 0xb2, 0x3a, 0xa1, 0xe2, 0xae, 0x26, 0x2b, 0xcd, 0x2e, 0x7a, 0x8b, 0x2c, 0x2d, 0x98, 0xd9, 0xed, 0x77, 0xa5, 0x4c, 0x72, 0x95, 0xf9, 0x8d }; static const uint8_t nist_kas_ecc_cdh_testvector_238_public_y[] = { /* QCAVSy */ 0x05, 0xbe, 0x9b, 0xbd, 0x91, 0x77, 0x2b, 0xb4, 0x22, 0x66, 0xab, 0xa9, 0xc8, 0x93, 0xe5, 0x66, 0x70, 0xcf, 0xb6, 0x6c, 0xaf, 0xbe, 0x44, 0x01, 0xca, 0x2c, 0xb5, 0x76, 0x5b, 0x46, 0x95, 0x04, 0x84, 0x85, 0x97, 0xc7, 0xf4, 0x46, 0xe9, 0x98, 0x14, 0x74, 0x67, 0x87, 0x15, 0x8a, 0x83, 0xeb, 0xf8, 0xe3, 0x79, 0x68, 0x57, 0x36, 0x3a, 0x8e, 0x04, 0xf8, 0x74, 0x2a, 0x09, 0xd7, 0xec, 0xa1, 0x63, 0x86, 0xd6, 0x0f, 0xd7, 0xc8, 0x58, 0xdf }; static const uint8_t nist_kas_ecc_cdh_testvector_238_private[] = { /* dIUT */ 0x00, 0xa1, 0x9a, 0x0e, 0xdf, 0x50, 0x83, 0x47, 0xf4, 0x40, 0x2c, 0xec, 0xbc, 0xe1, 0x27, 0xdc, 0x64, 0x10, 0xb1, 0x96, 0x7d, 0x3f, 0x89, 0xe6, 0xb3, 0xba, 0x08, 0xb4, 0x8a, 0xad, 0x08, 0xcd, 0x6c, 0xa5, 0xe5, 0xd1, 0x22, 0x8c, 0xdc, 0xc4, 0x1a, 0x1c, 0x38, 0x0f, 0x2a, 0xe9, 0x05, 0x2d, 0x73, 0xdb, 0x75, 0x50, 0xe7, 0xa3, 0xc1, 0xd8, 0x57, 0x05, 0x6c, 0x98, 0x94, 0x7f, 0x5b, 0x2c, 0x71, 0xc3, 0x3c, 0x4e, 0xeb, 0xc1, 0x21, 0x0c }; /* QIUTx = 0629f70558308708e6929b1ad0fe3128a8af7f96591b47cb8ea2c3454120a6d393ed989d13231c661966a378b967efa64d3c0938e9c0b8b16c99d7349bdd59e2d44804f8fee1fb47 */ /* QIUTy = 06a5e50fd5024d8953e32242823250e998ca602b52599405129735a874e833b3bd73d7a9dc53adea092ba8d24207f5ea5657a29919b88a6d63fd0a943b56dde4c8478481b57723e4 */ static const uint8_t nist_kas_ecc_cdh_testvector_238_out[] = { /* ZIUT */ 0x00, 0x5a, 0x52, 0x65, 0x88, 0xa3, 0xa2, 0xce, 0x08, 0xb2, 0x09, 0x25, 0xe8, 0x39, 0x87, 0xeb, 0x0a, 0x1e, 0x68, 0xf9, 0x97, 0x10, 0x2d, 0xf7, 0xf9, 0xaf, 0x83, 0x82, 0x3a, 0xc8, 0xe0, 0x6a, 0xbb, 0xd2, 0x9c, 0x04, 0xcb, 0x1f, 0x97, 0x4b, 0xa9, 0xc9, 0xac, 0x49, 0xb4, 0x8b, 0x5a, 0xf3, 0x76, 0x79, 0xa3, 0x9b, 0x53, 0x2d, 0x35, 0x9c, 0xde, 0xc3, 0xd4, 0x1b, 0x3f, 0x80, 0xa1, 0xee, 0x12, 0xc8, 0x02, 0x76, 0x25, 0x6b, 0x73, 0x8d }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_239_public_x[] = { /* QCAVSx */ 0x03, 0x21, 0x84, 0xb6, 0x86, 0x3e, 0x2c, 0xb5, 0xbc, 0x71, 0xba, 0xff, 0x5b, 0x6b, 0x57, 0xa1, 0x05, 0x94, 0x83, 0x1c, 0xc1, 0x1a, 0x9e, 0x5e, 0xed, 0xec, 0x48, 0x04, 0xe2, 0x01, 0x6e, 0x3d, 0xd0, 0x64, 0xcf, 0xfd, 0x12, 0xa1, 0xee, 0xa0, 0xf6, 0x93, 0x29, 0x11, 0xde, 0xd3, 0x45, 0xac, 0xe5, 0xc1, 0xff, 0x25, 0x0b, 0x96, 0x48, 0xd9, 0x3b, 0x95, 0x33, 0x86, 0xda, 0xe9, 0xb5, 0x62, 0x8c, 0x3c, 0x62, 0x52, 0x7b, 0x89, 0x05, 0x19 }; static const uint8_t nist_kas_ecc_cdh_testvector_239_public_y[] = { /* QCAVSy */ 0x07, 0xf7, 0x83, 0xe0, 0x34, 0x1a, 0x87, 0x1e, 0x62, 0x56, 0xda, 0x34, 0x9e, 0xbb, 0x53, 0x9f, 0x88, 0x76, 0x7d, 0x7d, 0xac, 0x15, 0x11, 0xe3, 0xc3, 0xe4, 0xd4, 0x3b, 0x0f, 0xd3, 0x1d, 0x5d, 0xd2, 0xc2, 0xf0, 0xf1, 0x76, 0xea, 0xc5, 0x44, 0xa8, 0x71, 0xf4, 0x2b, 0x98, 0x3f, 0x8f, 0xba, 0x4d, 0xf6, 0x7a, 0xb6, 0xa2, 0x39, 0xb7, 0xdf, 0x99, 0x72, 0x26, 0x30, 0x4b, 0x73, 0x16, 0x5d, 0x96, 0x2f, 0x4e, 0x1d, 0x2d, 0x18, 0xde, 0x9f }; static const uint8_t nist_kas_ecc_cdh_testvector_239_private[] = { /* dIUT */ 0x00, 0x4c, 0xac, 0x3f, 0xcc, 0x00, 0x73, 0x44, 0x42, 0xcd, 0xd8, 0x0e, 0xaf, 0x82, 0x44, 0x12, 0xc2, 0x0e, 0xa9, 0xee, 0xb0, 0x3d, 0x43, 0xb9, 0x99, 0xd4, 0x9d, 0xe6, 0x18, 0x73, 0x60, 0x20, 0x20, 0xa2, 0xb3, 0xc4, 0x79, 0x65, 0xf6, 0xf4, 0x53, 0xb9, 0x1b, 0x7a, 0x2c, 0x1d, 0x93, 0xe1, 0x3a, 0x89, 0x54, 0x45, 0x33, 0xe3, 0x5a, 0x12, 0x2c, 0xfc, 0x86, 0x12, 0xc8, 0x69, 0x0b, 0x69, 0xbb, 0x7a, 0x55, 0x78, 0x75, 0xf9, 0x60, 0xb2 }; /* QIUTx = 03e211c3b4986927c4388d1680cb4770dee6c78266724582c66ccc50c6cb28239474d521facc7206af6bb29cced733edbbc0d20b9264ce63d9437188e3d31c0e0bc3e9f9d88429e4 */ /* QIUTy = 037a7c59012a82d59cc1e2f0fd4fd751e5737acb77f2a0799e0af38996ab5e11090a6396cc480e6f2aabd8fad44611691e5822115fd49d2a000c9b49d1f4964e24d43fbb81fa879f */ static const uint8_t nist_kas_ecc_cdh_testvector_239_out[] = { /* ZIUT */ 0x04, 0x9d, 0xb6, 0x8d, 0xc9, 0xfb, 0x4c, 0xfb, 0xad, 0x82, 0x47, 0xca, 0x4f, 0xe7, 0xc5, 0x73, 0xc0, 0x64, 0x0a, 0xbe, 0xad, 0x8f, 0x31, 0x91, 0x94, 0xd6, 0x65, 0xec, 0xaf, 0x4f, 0x04, 0xb6, 0x1f, 0x84, 0xf5, 0xdf, 0x0d, 0x8a, 0x63, 0x86, 0xf6, 0xdf, 0x04, 0xca, 0x1a, 0x68, 0x5a, 0x73, 0x94, 0x56, 0x7e, 0xba, 0x5d, 0xeb, 0x9f, 0x73, 0x9b, 0x1e, 0x62, 0x3e, 0xd6, 0x50, 0x70, 0x21, 0x59, 0x3f, 0x0e, 0x22, 0xe2, 0xdf, 0xc3, 0xf6 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_240_public_x[] = { /* QCAVSx */ 0x07, 0x1e, 0x16, 0x7e, 0x59, 0xe2, 0xa7, 0x09, 0xeb, 0xf4, 0xbe, 0x3d, 0x83, 0xfb, 0x9d, 0xc6, 0x9e, 0xd7, 0x49, 0xe3, 0xab, 0x8a, 0x54, 0xe2, 0x02, 0xc3, 0x5f, 0x8d, 0x45, 0xde, 0xaa, 0x2b, 0xda, 0x86, 0xc2, 0xaf, 0xa1, 0xb0, 0xa0, 0x47, 0x54, 0xd1, 0x88, 0x98, 0xfc, 0xdd, 0x9b, 0x18, 0x5f, 0x1d, 0x8b, 0xa2, 0xe1, 0x80, 0xa4, 0x7a, 0xc2, 0x91, 0xbb, 0x4a, 0xad, 0x8f, 0x99, 0x7f, 0x73, 0xb1, 0x42, 0x3b, 0xcd, 0x7e, 0x9b, 0x92 }; static const uint8_t nist_kas_ecc_cdh_testvector_240_public_y[] = { /* QCAVSy */ 0x05, 0x71, 0x19, 0x08, 0x5b, 0xc7, 0xcb, 0x20, 0x23, 0xd2, 0x3f, 0x88, 0x10, 0x14, 0x20, 0xf9, 0xf5, 0x08, 0xf0, 0xdb, 0x94, 0xf8, 0xdf, 0xbe, 0xdd, 0x5c, 0xbe, 0x88, 0xce, 0xc8, 0x0a, 0x9d, 0xc7, 0x08, 0xdf, 0x6c, 0xcc, 0xdf, 0x81, 0x5d, 0x75, 0xb1, 0x46, 0x28, 0x0d, 0x7c, 0xd2, 0xeb, 0x97, 0xcf, 0x1a, 0x7d, 0xd5, 0x50, 0xbe, 0x52, 0x38, 0x24, 0xf9, 0x32, 0xa7, 0x77, 0x67, 0x9f, 0x2e, 0xe9, 0xf6, 0x6d, 0x42, 0x58, 0xdd, 0xa6 }; static const uint8_t nist_kas_ecc_cdh_testvector_240_private[] = { /* dIUT */ 0x00, 0xd5, 0x14, 0x14, 0x4d, 0x45, 0x48, 0xbc, 0xfc, 0xbc, 0xf5, 0x70, 0x09, 0xf7, 0xe8, 0xee, 0x10, 0x4b, 0x15, 0x45, 0x6f, 0x49, 0x18, 0x26, 0xbd, 0xfd, 0x9b, 0xa6, 0x7e, 0x87, 0x1f, 0xdb, 0xd8, 0xfc, 0x84, 0x90, 0xec, 0xbc, 0xb2, 0x69, 0x09, 0x1f, 0xc7, 0x52, 0x9e, 0x5e, 0x55, 0x71, 0x3a, 0x81, 0xde, 0x20, 0xc0, 0xed, 0x01, 0xec, 0xb3, 0x15, 0x9a, 0xe6, 0x14, 0x24, 0xbd, 0xbc, 0x56, 0x53, 0x73, 0x25, 0x87, 0xd1, 0xe9, 0x4f }; /* QIUTx = 03ee5f877b737dae40baf91e0cc581dfe8d291f8c451d5bfc0b690df7025875d9569d52021b3b6890e01a2ba95899e2928a902cd5dc8143c07ea26749a9c94068b5c34c596b0943e */ /* QIUTy = 058e1ba516a818cae9b37086287e088083e2b421fef0b59ba816ab031375d09d7af7d57866744687be3bb41ce2276d3a38f97bbb9fb59f24a92f0085b04ee5ed1ac0efa671394f73 */ static const uint8_t nist_kas_ecc_cdh_testvector_240_out[] = { /* ZIUT */ 0x03, 0x43, 0xc4, 0x5d, 0xaa, 0xb4, 0xf9, 0x1e, 0x02, 0xef, 0x9b, 0xd6, 0xe1, 0xcd, 0x15, 0x7b, 0x00, 0xab, 0x0a, 0xb0, 0xa3, 0xe0, 0xd9, 0x73, 0x49, 0x18, 0xa1, 0xd8, 0x96, 0xcd, 0xf7, 0xcc, 0x12, 0x12, 0xbf, 0x74, 0xd7, 0xbb, 0x9b, 0xf9, 0x6b, 0xd4, 0xab, 0xf4, 0x2d, 0xf3, 0x25, 0x75, 0x6c, 0x40, 0x72, 0x17, 0xf4, 0x4a, 0x59, 0x50, 0xc2, 0xb6, 0x6a, 0xf8, 0x20, 0x69, 0x27, 0x42, 0xed, 0x7e, 0xbe, 0x14, 0xe4, 0x8d, 0x2d, 0x88 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_241_public_x[] = { /* QCAVSx */ 0x07, 0x4f, 0x1a, 0x7b, 0x5c, 0xfb, 0x0e, 0xee, 0xf1, 0xe1, 0x5e, 0x63, 0x51, 0x2c, 0x73, 0x18, 0x8d, 0xaf, 0xbe, 0x88, 0xe8, 0xe9, 0xc4, 0x20, 0x73, 0xb2, 0xb6, 0x52, 0xb9, 0xf0, 0x28, 0x21, 0x4f, 0x0b, 0xec, 0x79, 0x14, 0x2d, 0x88, 0x89, 0x41, 0x6a, 0xbf, 0x7a, 0x83, 0xe2, 0x9f, 0x47, 0x9e, 0x7b, 0xc3, 0xca, 0x65, 0x7e, 0xf0, 0xa1, 0x0c, 0x2e, 0xa3, 0xad, 0xe3, 0x11, 0x7c, 0x0d, 0x36, 0x9d, 0xac, 0xc2, 0x33, 0x9d, 0x1c, 0x12 }; static const uint8_t nist_kas_ecc_cdh_testvector_241_public_y[] = { /* QCAVSy */ 0x00, 0xe8, 0x99, 0x2a, 0x54, 0x07, 0x67, 0x53, 0x02, 0x9f, 0x2c, 0x0e, 0x9d, 0x8c, 0x16, 0x6e, 0x6b, 0xa8, 0x48, 0x96, 0xa4, 0x78, 0x5f, 0xff, 0xf5, 0x98, 0xc4, 0x82, 0x3e, 0x54, 0x61, 0xff, 0x00, 0x54, 0x90, 0xbb, 0x7f, 0xb6, 0xd8, 0x78, 0xac, 0x34, 0xf4, 0x27, 0xfd, 0x9d, 0xb4, 0x8c, 0xbd, 0xf1, 0x2e, 0xb9, 0x82, 0x6d, 0x68, 0xfd, 0x2c, 0xf1, 0x71, 0xd4, 0xd6, 0x1c, 0x3f, 0x27, 0x5d, 0x44, 0x94, 0x7d, 0x4d, 0xf4, 0xc7, 0x52 }; static const uint8_t nist_kas_ecc_cdh_testvector_241_private[] = { /* dIUT */ 0x00, 0xcc, 0xc6, 0xdc, 0xa5, 0xa9, 0x85, 0x58, 0x3c, 0xe0, 0x08, 0x12, 0xc3, 0xd0, 0x78, 0x22, 0xf6, 0x34, 0x1c, 0x79, 0xd7, 0x8c, 0x16, 0xb2, 0xe7, 0xae, 0x4b, 0xbf, 0x5b, 0xff, 0xac, 0x1a, 0xcd, 0x9d, 0xea, 0xb6, 0x78, 0x19, 0x3f, 0x8f, 0x89, 0xb0, 0xe2, 0xaa, 0xe5, 0x2e, 0x30, 0x31, 0x14, 0x44, 0xdd, 0x11, 0x25, 0x3f, 0x96, 0xd6, 0x2d, 0xb3, 0xab, 0xfb, 0x17, 0xe4, 0x23, 0xf0, 0xdd, 0xf0, 0xe9, 0x91, 0x08, 0x11, 0x54, 0xc3 }; /* QIUTx = 03826215343cfd4ad968d572bab2dee2279f9e8effa0ff80b0df5dd2ea822b502274e507c87d2429dd8bbdba6eb8ab433b1ee1cad3a97c7d244194fd9a43f3e1ff33144e2db80864 */ /* QIUTy = 070f4508ae391ce24154b38873af0082d95895ac92fd1aa321ba93beef404a63f7b1afa1feec997885523a6688ada94dd45eb32ca7f1bb87e63c4de97493196c3b53cf83d218dc37 */ static const uint8_t nist_kas_ecc_cdh_testvector_241_out[] = { /* ZIUT */ 0x04, 0xa5, 0x65, 0xcb, 0x3e, 0x15, 0x23, 0x6a, 0x7f, 0x6c, 0x41, 0x3a, 0xfe, 0xb4, 0x19, 0xc0, 0x82, 0x42, 0x7b, 0x10, 0xa6, 0xd0, 0x7f, 0xf8, 0x7e, 0x81, 0x74, 0x07, 0x16, 0x43, 0x3c, 0x06, 0xb3, 0x25, 0x44, 0x14, 0x38, 0x1e, 0x4f, 0xf9, 0x86, 0x03, 0x40, 0xdd, 0x62, 0x01, 0xab, 0x66, 0x21, 0xd1, 0x62, 0xcd, 0x12, 0x04, 0x7a, 0x55, 0x15, 0xab, 0x1d, 0x65, 0xf2, 0x0c, 0x97, 0xeb, 0x3d, 0x71, 0x32, 0x64, 0x2f, 0x8a, 0xd5, 0x8a }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_242_public_x[] = { /* QCAVSx */ 0x00, 0x4b, 0x54, 0xb3, 0xce, 0xfd, 0x41, 0x5f, 0x5e, 0xaa, 0xca, 0x4a, 0xe4, 0xe5, 0xda, 0xcf, 0xbc, 0xe2, 0x0c, 0xba, 0x19, 0x32, 0xa2, 0xf5, 0x05, 0x49, 0xbc, 0xd3, 0x16, 0x30, 0x01, 0x7a, 0xd2, 0x14, 0x75, 0xdf, 0x15, 0x4f, 0xf3, 0x7b, 0xe1, 0x3c, 0xa6, 0x1a, 0x4c, 0x60, 0x33, 0x6b, 0x33, 0xd0, 0xff, 0xc7, 0x62, 0xaa, 0x9e, 0x9e, 0x9f, 0xc6, 0xe6, 0xfd, 0x17, 0x25, 0x0b, 0x5e, 0x40, 0x22, 0xb5, 0x51, 0x41, 0xd2, 0x3f, 0xbf }; static const uint8_t nist_kas_ecc_cdh_testvector_242_public_y[] = { /* QCAVSy */ 0x05, 0x6f, 0x7c, 0x8d, 0x65, 0xc5, 0x68, 0xde, 0x95, 0xbd, 0x16, 0x64, 0xff, 0xf7, 0x14, 0x29, 0xec, 0x73, 0x89, 0x87, 0x69, 0x7f, 0x21, 0x7d, 0xe5, 0xad, 0xf3, 0x6d, 0x14, 0xa8, 0x0b, 0x6f, 0xe5, 0x85, 0xe4, 0x68, 0x5e, 0x03, 0xc8, 0x18, 0x38, 0xab, 0xed, 0xfd, 0xc0, 0x5a, 0x1e, 0x01, 0x40, 0x7a, 0xf4, 0xab, 0x98, 0x9f, 0xc1, 0xd1, 0x27, 0x3b, 0xa8, 0xa1, 0x82, 0xc4, 0x61, 0x85, 0x6d, 0x5e, 0xff, 0xe7, 0x05, 0xd7, 0xdf, 0xe5 }; static const uint8_t nist_kas_ecc_cdh_testvector_242_private[] = { /* dIUT */ 0x01, 0x88, 0x62, 0x13, 0x65, 0x8b, 0xd1, 0x7e, 0x7d, 0xc3, 0x34, 0xdd, 0x80, 0x03, 0x92, 0x6a, 0x44, 0x7c, 0x34, 0xa1, 0x97, 0xee, 0x5d, 0x6d, 0x0b, 0xbc, 0x46, 0xe8, 0x5e, 0xc1, 0xcf, 0xa6, 0x80, 0x28, 0x58, 0xd1, 0xc3, 0x67, 0x27, 0x6c, 0xa5, 0x72, 0xba, 0x27, 0xaa, 0x7a, 0x5d, 0x1e, 0x21, 0x69, 0x02, 0x41, 0x6b, 0x48, 0xaf, 0x6e, 0x42, 0x77, 0x94, 0x5e, 0x46, 0x5d, 0x7d, 0x84, 0x0d, 0xff, 0x14, 0x38, 0x54, 0x3c, 0xaa, 0x46 }; /* QIUTx = 047f6cc42107c40c168dc679a864f969b53f756257113b7502796efa54cdcce704b9344ee4bf964752d68910262bd26ab6b347084404b28306ca3425f29894ce6fd4293c5973522f */ /* QIUTy = 060cfdb5467675a789923be973c6645dbe26d00a39d4e81255217291a3882cfa8f91f4aa8214d3524c95ef6a24e47b3b9d0ef55f670756ae4a4d9c65f075f4170b2d18aafbca0265 */ static const uint8_t nist_kas_ecc_cdh_testvector_242_out[] = { /* ZIUT */ 0x04, 0x72, 0x65, 0x83, 0x1f, 0x1f, 0x58, 0x9b, 0x5f, 0x30, 0x80, 0x6e, 0x2f, 0xb8, 0x0a, 0xa7, 0x84, 0x4c, 0xbf, 0x32, 0xb6, 0x99, 0x33, 0x84, 0xbe, 0xaa, 0xc7, 0xd9, 0x92, 0xb3, 0x27, 0xb9, 0x7d, 0xfd, 0x0b, 0xb8, 0x9c, 0xa0, 0x9e, 0x71, 0x15, 0x07, 0xe8, 0x46, 0xed, 0x4a, 0xd0, 0x03, 0xe7, 0x11, 0x5f, 0xa8, 0x84, 0x3b, 0x23, 0xd3, 0x8f, 0x32, 0x0e, 0x43, 0xb5, 0xeb, 0x50, 0x6b, 0xde, 0x48, 0xfb, 0xd7, 0xaf, 0x49, 0x83, 0xb9 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_243_public_x[] = { /* QCAVSx */ 0x07, 0xec, 0x71, 0xbe, 0xa0, 0x81, 0x19, 0x0a, 0x9c, 0x4c, 0xdf, 0xf8, 0x09, 0xed, 0x2b, 0x65, 0xa7, 0x78, 0x00, 0xcd, 0x1b, 0x3b, 0xef, 0xfd, 0x1e, 0x40, 0x04, 0xd1, 0x26, 0xac, 0x35, 0x2d, 0x24, 0x23, 0x5c, 0x79, 0x7a, 0x5a, 0x56, 0x7d, 0xae, 0xf7, 0x39, 0x3d, 0x27, 0x66, 0x38, 0x13, 0x2e, 0xa7, 0xf0, 0xf6, 0x1e, 0x55, 0x0d, 0xc2, 0x51, 0xd3, 0x41, 0xf6, 0x61, 0x02, 0xf9, 0x6c, 0x2a, 0xbf, 0x7e, 0xe3, 0x7c, 0x0f, 0xc9, 0xed }; static const uint8_t nist_kas_ecc_cdh_testvector_243_public_y[] = { /* QCAVSy */ 0x00, 0xef, 0xc2, 0xac, 0x87, 0x05, 0xb2, 0xf9, 0xc9, 0xc0, 0x6a, 0x91, 0x0a, 0x30, 0x4c, 0x42, 0xb1, 0xad, 0x53, 0x10, 0x1a, 0xeb, 0x0d, 0x14, 0x63, 0x19, 0xdc, 0x24, 0x81, 0x5c, 0x7c, 0xc1, 0x98, 0x3b, 0x1c, 0xad, 0x91, 0xd5, 0xf9, 0xc6, 0xd5, 0xee, 0xf1, 0x67, 0x7a, 0x1f, 0x2d, 0x2b, 0xdd, 0x75, 0xa1, 0xfb, 0x4c, 0x57, 0x96, 0xa4, 0xc5, 0x69, 0x64, 0xaa, 0x3e, 0x43, 0xf3, 0xda, 0x26, 0xc7, 0x37, 0xed, 0xd9, 0xcb, 0x09, 0x10 }; static const uint8_t nist_kas_ecc_cdh_testvector_243_private[] = { /* dIUT */ 0x00, 0x4c, 0x0d, 0xd3, 0x71, 0x5e, 0x88, 0x88, 0xdc, 0x22, 0x22, 0x06, 0x9e, 0x7f, 0x61, 0x18, 0x01, 0x68, 0x51, 0x40, 0x30, 0x3e, 0x16, 0xb8, 0xb4, 0x43, 0x43, 0x3d, 0x5e, 0x18, 0xa4, 0xb1, 0x80, 0x3d, 0x56, 0x80, 0x41, 0x6a, 0xeb, 0xda, 0x7a, 0xe7, 0xe9, 0x44, 0x91, 0x54, 0xbe, 0x34, 0x6a, 0x7d, 0xcb, 0x36, 0xc1, 0xdb, 0x22, 0x74, 0x46, 0x73, 0xfb, 0x3b, 0x24, 0x5e, 0x58, 0x44, 0x07, 0x87, 0xed, 0x3d, 0xec, 0x6d, 0x3d, 0xb5 }; /* QIUTx = 02fb241eb2c28a1b0675b5760fe5663efa603eb0590842f455973f0573e148a47e63f97e8df9a570b0655d5afc42019fe95fe44fdb02a68271d82df580010f91dff0cb3d9bda8992 */ /* QIUTy = 033f93a9dc39d87403b6a94dc0632dec6757842d0aaf8ad8c41ebb637058bfc11c19a3a9abddf204201ef4f96fe9629233a5070a08794d14470091e30cdd876aaf65407627233234 */ static const uint8_t nist_kas_ecc_cdh_testvector_243_out[] = { /* ZIUT */ 0x05, 0x9b, 0x62, 0xc2, 0x5c, 0x96, 0x95, 0x5b, 0x8f, 0xb4, 0xde, 0xdd, 0xcf, 0x90, 0xeb, 0xe6, 0x84, 0x5e, 0xe7, 0x1e, 0xa3, 0x57, 0x73, 0x92, 0x73, 0xd6, 0xd6, 0x7f, 0x21, 0xa0, 0xc4, 0x7d, 0x15, 0x4a, 0xdd, 0x9d, 0x5d, 0x4d, 0x2b, 0x65, 0x7f, 0xe1, 0x98, 0x8a, 0xd6, 0x14, 0xb0, 0xb4, 0x90, 0x2f, 0xaa, 0x92, 0xfe, 0x99, 0x9a, 0xbd, 0x75, 0x4a, 0xd3, 0x3c, 0xd6, 0xb9, 0x2f, 0xe2, 0xf6, 0xa6, 0x8a, 0x6f, 0x2c, 0x1e, 0xeb, 0x27 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_244_public_x[] = { /* QCAVSx */ 0x06, 0x70, 0x86, 0x86, 0xb4, 0xf5, 0xad, 0x2f, 0xec, 0x45, 0x7a, 0xad, 0x5a, 0xc4, 0xa3, 0xdc, 0x48, 0x67, 0xa4, 0x77, 0xeb, 0x54, 0xfc, 0x0d, 0x49, 0x35, 0x11, 0xb5, 0x56, 0x1e, 0xa1, 0x51, 0xdd, 0x4c, 0xaf, 0x5d, 0x43, 0x11, 0x98, 0x35, 0x00, 0xb4, 0x8c, 0x80, 0x43, 0xaf, 0x09, 0xe3, 0xf4, 0x04, 0x2d, 0x5a, 0x07, 0xeb, 0xf0, 0x50, 0xa4, 0xe8, 0x01, 0xda, 0xee, 0xf3, 0x31, 0x7b, 0xe0, 0x93, 0x95, 0x50, 0x20, 0x45, 0x2b, 0x29 }; static const uint8_t nist_kas_ecc_cdh_testvector_244_public_y[] = { /* QCAVSy */ 0x05, 0x25, 0xc8, 0x68, 0x25, 0x83, 0xb5, 0x5f, 0x7e, 0xce, 0xc5, 0x9b, 0x92, 0x08, 0x46, 0xf7, 0x5d, 0x11, 0xd0, 0x21, 0xe9, 0xff, 0xb2, 0x00, 0x18, 0x63, 0x9f, 0x6a, 0xb9, 0x30, 0x22, 0x47, 0x2c, 0x19, 0x2d, 0x39, 0x8e, 0x15, 0x0c, 0xdc, 0x63, 0x0a, 0x11, 0xfc, 0xf9, 0x42, 0xe5, 0xd2, 0x38, 0xcd, 0x6c, 0x14, 0xb3, 0x0f, 0x44, 0xa2, 0x4d, 0x2f, 0x84, 0x3e, 0xc5, 0xd1, 0x35, 0xdd, 0xc7, 0xab, 0xda, 0x56, 0x04, 0x7a, 0xbc, 0x21 }; static const uint8_t nist_kas_ecc_cdh_testvector_244_private[] = { /* dIUT */ 0x00, 0x7d, 0x54, 0x19, 0x4f, 0xc2, 0x26, 0xcc, 0x39, 0xf6, 0x40, 0xd3, 0xd1, 0x7b, 0x9b, 0x95, 0xb7, 0x0b, 0x51, 0xf9, 0x8a, 0xd5, 0xca, 0x19, 0x91, 0x56, 0x61, 0x08, 0xd8, 0x39, 0xe3, 0x77, 0xe2, 0x1b, 0xa4, 0x8c, 0xbf, 0x44, 0x15, 0x30, 0xb3, 0x34, 0x1d, 0xdc, 0x61, 0xb0, 0xa5, 0x81, 0x41, 0xaa, 0xa6, 0x65, 0x30, 0x24, 0x1f, 0xa5, 0x29, 0x50, 0x5d, 0x70, 0x80, 0x4b, 0x25, 0x60, 0xc5, 0xbe, 0x48, 0x13, 0x10, 0xb9, 0x96, 0x2d }; /* QIUTx = 02ed5f3a2efa4ab0f9db5fced7b1300de4d457a9ad0827457e5e1c4bc15ebd183775de4b73c1f820dd4033366100e48b4164d04e9fb6cf1a4bdb55122a86005fbd0bd2cddbc95fa7 */ /* QIUTy = 0327fe654ef68563cc8888acca85163c2b154fb70b0f4a2b58c36388a0c25f80a4c887977d46000dc4d86e95cfd8f9065c00eb28653c8fb477bbb5c63dd47b83ca5e0f871e9eed3d */ static const uint8_t nist_kas_ecc_cdh_testvector_244_out[] = { /* ZIUT */ 0x02, 0x77, 0x7c, 0x72, 0x85, 0x3b, 0x76, 0xb2, 0x9f, 0x69, 0xd3, 0xaa, 0x27, 0xa1, 0x65, 0x97, 0x89, 0xa0, 0x25, 0xaf, 0x06, 0x33, 0xd8, 0x33, 0xb2, 0x2b, 0x57, 0xbf, 0x32, 0x8d, 0x23, 0x1e, 0xbd, 0x12, 0x8b, 0xf9, 0x6a, 0x4c, 0x8a, 0x7f, 0xfd, 0x2e, 0xe7, 0xa5, 0x1e, 0x5e, 0xbb, 0x7a, 0x8e, 0x5b, 0xca, 0x20, 0xe4, 0xad, 0x49, 0x67, 0x1a, 0x21, 0x23, 0xdf, 0xbc, 0x0d, 0x6c, 0x40, 0x59, 0x4e, 0x04, 0x76, 0x51, 0x86, 0xde, 0x06 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_245_public_x[] = { /* QCAVSx */ 0x07, 0xce, 0x76, 0x74, 0x40, 0x3d, 0xfc, 0x62, 0x89, 0x5d, 0x71, 0xe2, 0xab, 0x58, 0x7c, 0xe7, 0x35, 0xf2, 0x79, 0xf1, 0x2f, 0x7d, 0xf3, 0x16, 0x13, 0x35, 0xbe, 0x43, 0xfc, 0x29, 0x08, 0xea, 0x73, 0x6f, 0x6f, 0x58, 0xb9, 0x32, 0xd7, 0x93, 0xaf, 0xf6, 0x6f, 0x33, 0x27, 0x35, 0xd4, 0xd3, 0x8f, 0x05, 0xcb, 0x03, 0xcf, 0x27, 0x5c, 0xa0, 0xe0, 0x0d, 0xa1, 0xf5, 0x73, 0x81, 0xe0, 0x8b, 0xfe, 0xb5, 0x01, 0x78, 0x77, 0x34, 0x22, 0x72 }; static const uint8_t nist_kas_ecc_cdh_testvector_245_public_y[] = { /* QCAVSy */ 0x07, 0xd6, 0x64, 0x9f, 0x3d, 0x91, 0xe7, 0xbf, 0x5f, 0x8d, 0xe6, 0x11, 0xbd, 0x97, 0x18, 0x18, 0x10, 0x6d, 0xf2, 0xe3, 0x79, 0x35, 0xbb, 0x46, 0x4c, 0xd9, 0xe7, 0x46, 0x96, 0x29, 0xc6, 0xae, 0x7e, 0x7f, 0x2b, 0x22, 0x40, 0x27, 0x6c, 0xb0, 0xee, 0xdb, 0x7a, 0x26, 0xd0, 0xc7, 0xd3, 0x77, 0xf4, 0x00, 0x9a, 0x1d, 0xd4, 0x8a, 0x79, 0x3c, 0xc9, 0x93, 0xfb, 0x0d, 0x4a, 0x04, 0xdb, 0x1d, 0xba, 0xd4, 0x49, 0x33, 0x04, 0xbc, 0x5c, 0x0e }; static const uint8_t nist_kas_ecc_cdh_testvector_245_private[] = { /* dIUT */ 0x01, 0x07, 0x40, 0xb9, 0x58, 0x28, 0x52, 0x42, 0x04, 0x5c, 0xd5, 0x35, 0x8d, 0x7f, 0xf9, 0x23, 0x2b, 0x7d, 0x7d, 0x41, 0x3a, 0xf7, 0xe2, 0x05, 0xc2, 0x85, 0xf8, 0x84, 0x92, 0xef, 0x27, 0xa2, 0xfb, 0x85, 0x0e, 0x05, 0x67, 0xec, 0x24, 0xc4, 0x80, 0xc7, 0x5a, 0xd3, 0x2f, 0x70, 0x34, 0x20, 0x25, 0xc8, 0x62, 0x67, 0xdb, 0xe4, 0xff, 0x80, 0xa2, 0xc5, 0x09, 0xe5, 0xb9, 0xa4, 0x51, 0x30, 0xe9, 0x9e, 0x7c, 0x7c, 0xc8, 0xcc, 0x6e, 0xce }; /* QIUTx = 03f3f585cafd46a663b6cf8b8323ef9159d5195d3118f3edf38732ca0ff73b2d065d9e69ae1e3978b2ce6dc61500f7b8bbf6f6a70b47bb64cc4fd195bba6ac932b70beafe174148a */ /* QIUTy = 00b1566fe619f2cc00aba05e24a6cccbc91338b2eef553da0d477d6c8c0ac4c656e134dbcf31ffb15c67d589bd2918f1174909e5428c71c90e38c4e11b56236abfa1de6a8579eb4d */ static const uint8_t nist_kas_ecc_cdh_testvector_245_out[] = { /* ZIUT */ 0x02, 0xc2, 0xec, 0x16, 0x32, 0xe8, 0x34, 0x16, 0x18, 0x2a, 0x9a, 0x43, 0x8f, 0x73, 0x60, 0xb8, 0x80, 0x61, 0xba, 0xb8, 0x4f, 0x5b, 0xde, 0xd3, 0xdd, 0x8a, 0x0c, 0x87, 0xba, 0xf4, 0x45, 0x07, 0xdf, 0x94, 0xfd, 0xcf, 0x99, 0x35, 0x3b, 0x10, 0x7e, 0x61, 0xcf, 0xcf, 0xc8, 0xaf, 0x07, 0x1b, 0x3a, 0xa8, 0xce, 0xc7, 0xb3, 0x4a, 0x54, 0x2b, 0xf2, 0xab, 0x8e, 0xa0, 0xbd, 0x9d, 0xb6, 0x7d, 0x66, 0xb4, 0x28, 0xc9, 0xa6, 0xc1, 0x44, 0x58 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_246_public_x[] = { /* QCAVSx */ 0x04, 0x83, 0xad, 0x73, 0x82, 0xe3, 0x48, 0xaf, 0xc7, 0xf2, 0x71, 0xd5, 0x0d, 0x8d, 0x39, 0xb8, 0x14, 0xb7, 0xd6, 0xdc, 0x0c, 0x56, 0x2a, 0x6b, 0xa5, 0x56, 0x56, 0x80, 0x45, 0xbd, 0x2d, 0x62, 0x09, 0x06, 0xab, 0x11, 0x06, 0xf9, 0x13, 0x7f, 0xf7, 0x25, 0x89, 0x2e, 0x84, 0x36, 0xa8, 0xcd, 0x7b, 0x88, 0x89, 0x2a, 0x32, 0xf1, 0x9a, 0xb2, 0x69, 0xe2, 0xad, 0x30, 0xd7, 0xf0, 0xec, 0x00, 0xe3, 0xa0, 0x52, 0xfb, 0xbc, 0x46, 0x63, 0x07 }; static const uint8_t nist_kas_ecc_cdh_testvector_246_public_y[] = { /* QCAVSy */ 0x04, 0x1c, 0xc4, 0xb0, 0xf1, 0x95, 0xdc, 0x73, 0xc4, 0xa8, 0xe1, 0x06, 0x05, 0xf2, 0xa3, 0x82, 0x92, 0x3a, 0xbd, 0x23, 0x81, 0xf2, 0x4e, 0x4a, 0xbb, 0xd4, 0x01, 0xe0, 0x87, 0xc5, 0x0d, 0x18, 0xf6, 0xda, 0xb0, 0x1a, 0x25, 0xdb, 0x7e, 0x89, 0xdf, 0xff, 0x68, 0xc6, 0x63, 0x49, 0x4f, 0xb4, 0xd0, 0x87, 0xa8, 0x16, 0xb8, 0x54, 0x44, 0xd8, 0x82, 0xbe, 0xc2, 0xac, 0x25, 0xe4, 0x2f, 0xde, 0x78, 0xeb, 0xcc, 0xa7, 0x9a, 0x6f, 0xdd, 0xf0 }; static const uint8_t nist_kas_ecc_cdh_testvector_246_private[] = { /* dIUT */ 0x00, 0xc8, 0x5e, 0x5d, 0x2d, 0xed, 0x5b, 0xc3, 0xb6, 0xb5, 0x53, 0xfe, 0x0a, 0x02, 0x31, 0x1b, 0x72, 0xbc, 0x5c, 0xdc, 0x8e, 0x96, 0xdf, 0x17, 0x9c, 0xe5, 0x75, 0x11, 0xc2, 0x6a, 0xc9, 0xe8, 0x73, 0xfc, 0x1f, 0x76, 0xcd, 0xde, 0x9a, 0x7d, 0x8e, 0x52, 0xa7, 0xe9, 0xbe, 0x5c, 0x77, 0x53, 0x62, 0x03, 0x31, 0xe8, 0x97, 0x7a, 0x98, 0x90, 0x2b, 0x48, 0xae, 0x98, 0x99, 0xce, 0x8a, 0x6a, 0x66, 0x36, 0x61, 0x12, 0x76, 0xae, 0x23, 0x83 }; /* QIUTx = 0289aa5209fe7b1ad7b9c5e0e630ba5e02929ea1b1f114d30a0648012bf029e066453f2d28e1d503665dd0833f0ba37e4583b434dd9956100a1ae6e54f96d9347d806741d3a76e31 */ /* QIUTy = 033afe87b29edef447ff5a02e63f64905b5f53ac856cfd7755ad542812ecdd568e8ae1f9d32fea0f02018dcfd0e16d6a6a2797b7e3dc855bfdb6b0d0b2525e143678d539bf8c0672 */ static const uint8_t nist_kas_ecc_cdh_testvector_246_out[] = { /* ZIUT */ 0x07, 0xe1, 0xd2, 0x02, 0xa5, 0x4d, 0x34, 0x02, 0x09, 0x39, 0xf7, 0xae, 0xd5, 0x69, 0x31, 0xf2, 0x1b, 0x20, 0x67, 0x61, 0xe4, 0xfc, 0x79, 0xb9, 0xa7, 0xb3, 0x20, 0xf8, 0x10, 0x77, 0xbe, 0x32, 0x2a, 0xe7, 0x80, 0x94, 0x46, 0xb5, 0xb3, 0xea, 0x70, 0x16, 0x18, 0xec, 0xdb, 0x0a, 0x17, 0x96, 0xab, 0x80, 0x40, 0x7a, 0x28, 0x1b, 0xdb, 0xcb, 0x4d, 0x58, 0x01, 0x31, 0xb6, 0x1f, 0x87, 0x43, 0xbf, 0xef, 0x7a, 0x4d, 0x9c, 0x59, 0x41, 0xf1 }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_247_public_x[] = { /* QCAVSx */ 0x07, 0xa5, 0xe8, 0xeb, 0x49, 0x68, 0x49, 0x7a, 0x11, 0xb9, 0x0c, 0x60, 0xe1, 0x3d, 0x5f, 0x3c, 0x61, 0xc6, 0x86, 0x85, 0x73, 0xa6, 0xb6, 0xdb, 0x7c, 0x20, 0x8a, 0x85, 0x6d, 0x54, 0xe7, 0x4f, 0x43, 0x68, 0xe2, 0x81, 0x00, 0xb9, 0xe0, 0xbf, 0x49, 0xfc, 0x31, 0x04, 0xe1, 0x46, 0xfb, 0xda, 0x78, 0x46, 0x23, 0xa3, 0x6d, 0x9f, 0x01, 0xf2, 0x3e, 0xba, 0xdf, 0xab, 0x04, 0xd7, 0xf4, 0x8f, 0xf6, 0x65, 0x06, 0xc6, 0x98, 0xbe, 0xdd, 0x11 }; static const uint8_t nist_kas_ecc_cdh_testvector_247_public_y[] = { /* QCAVSy */ 0x01, 0x3d, 0xb9, 0x68, 0xfc, 0x7c, 0xd3, 0x38, 0xcb, 0x8e, 0x30, 0x42, 0xa1, 0x71, 0xfa, 0x30, 0x6f, 0x9a, 0xb6, 0xf6, 0xc8, 0x65, 0xdd, 0xc5, 0xba, 0x5f, 0xe9, 0x94, 0xa3, 0x0d, 0x8f, 0xc1, 0xfa, 0x12, 0x71, 0x91, 0xf0, 0x8e, 0x4e, 0x14, 0xb9, 0xaa, 0x08, 0x6a, 0x52, 0xfb, 0xca, 0xa4, 0x6d, 0x22, 0x10, 0x7f, 0xd6, 0xdf, 0x53, 0x10, 0x8b, 0x53, 0xfe, 0x0b, 0xb9, 0x6b, 0xc9, 0x74, 0xc0, 0x3a, 0x8c, 0x65, 0x28, 0xf9, 0x79, 0x2d }; static const uint8_t nist_kas_ecc_cdh_testvector_247_private[] = { /* dIUT */ 0x00, 0x53, 0xa4, 0x8c, 0xfd, 0xa8, 0xee, 0x23, 0x2c, 0xea, 0x35, 0x49, 0x92, 0x7b, 0x22, 0xf3, 0x75, 0xd6, 0x09, 0x65, 0x60, 0x02, 0x5e, 0x21, 0x31, 0x61, 0xd4, 0x3e, 0xed, 0x02, 0xd0, 0x73, 0x65, 0xd9, 0xed, 0xe7, 0xc9, 0x3d, 0x45, 0x7e, 0xa5, 0x1e, 0xa2, 0x36, 0x9e, 0x87, 0x46, 0x3e, 0xdd, 0xbf, 0x25, 0xa0, 0x6b, 0xb1, 0xf0, 0x80, 0xfb, 0x47, 0x63, 0x07, 0x4a, 0x82, 0x83, 0xdd, 0x3d, 0x69, 0xf1, 0xde, 0x86, 0x52, 0x95, 0xe3 }; /* QIUTx = 04790f9db600b9a0a57e03d274a3d23a55aa0d86b2d6fa07fafe3c9d4c3393771dde89c70a6470a31bad105c21d4844cd7bfc3b59738f9d6c528c414d524f88e0c862e4e17aff454 */ /* QIUTy = 05dc12db04e2489db8a46cdeff9f8d9d2e00d024f656c781eb4d2db167624b3a70addaaa158ca00601d4cad065917bebe766912faba9987fcc5fc8a78dd21643aa650e6a4a7e2061 */ static const uint8_t nist_kas_ecc_cdh_testvector_247_out[] = { /* ZIUT */ 0x07, 0xf4, 0x9e, 0xe5, 0xd8, 0x22, 0xb1, 0x7e, 0x3f, 0x1e, 0xc9, 0x94, 0x6f, 0xad, 0x8d, 0x0a, 0x0a, 0x6b, 0x32, 0x72, 0x42, 0xaf, 0xe6, 0x75, 0x80, 0x6b, 0x3e, 0x6b, 0x75, 0x41, 0x74, 0x5e, 0x21, 0xcd, 0x1b, 0x70, 0xdf, 0x92, 0x6a, 0xf0, 0x57, 0xa9, 0xf8, 0xde, 0xae, 0x4c, 0xb9, 0xa1, 0xed, 0xc7, 0x82, 0x01, 0x44, 0x26, 0x15, 0x2e, 0x8a, 0xa4, 0xcf, 0x6a, 0x40, 0x80, 0xda, 0xd4, 0x67, 0x8d, 0xc8, 0xff, 0x0d, 0x9e, 0x1a, 0xf9 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_248_public_x[] = { /* QCAVSx */ 0x01, 0x3c, 0xaa, 0xf8, 0xce, 0x2e, 0x23, 0x21, 0xcf, 0x25, 0x6f, 0x2b, 0x64, 0xaa, 0x89, 0xad, 0xd6, 0x96, 0x8c, 0x29, 0x86, 0x24, 0xa2, 0x2b, 0xd3, 0x8e, 0xf9, 0x4d, 0xeb, 0x3a, 0x70, 0xea, 0x44, 0xce, 0x87, 0xa9, 0x48, 0xea, 0x56, 0xbf, 0x0e, 0xe9, 0x40, 0x71, 0x34, 0xf8, 0xc9, 0x7b, 0x17, 0xb1, 0xf5, 0x45, 0x61, 0xff, 0x77, 0x47, 0xe3, 0xf6, 0xb6, 0x56, 0xf8, 0x0d, 0x60, 0x77, 0x8d, 0x05, 0xb8, 0xc4, 0xcb, 0xbb, 0xcf, 0x3c }; static const uint8_t nist_kas_ecc_cdh_testvector_248_public_y[] = { /* QCAVSy */ 0x00, 0x47, 0xa2, 0xdc, 0xa3, 0xeb, 0x67, 0x54, 0xb0, 0xa9, 0xfd, 0x16, 0xb0, 0x81, 0xfc, 0xa4, 0x97, 0xb2, 0x9d, 0xd2, 0xec, 0x9e, 0x6a, 0x75, 0x96, 0xd0, 0x6b, 0x05, 0x9c, 0x2a, 0xb1, 0x89, 0x00, 0xfc, 0xc5, 0x87, 0x15, 0x24, 0x72, 0x76, 0xe3, 0x90, 0xdf, 0x1d, 0xba, 0xb2, 0x6b, 0xa8, 0x12, 0x35, 0xa4, 0xdc, 0x67, 0x38, 0x23, 0x7f, 0xce, 0xfd, 0x38, 0x12, 0xb7, 0xab, 0x43, 0x6c, 0x92, 0x6c, 0x50, 0xc6, 0x00, 0xe6, 0xe9, 0x07 }; static const uint8_t nist_kas_ecc_cdh_testvector_248_private[] = { /* dIUT */ 0x01, 0x5a, 0x5e, 0x59, 0x46, 0xfe, 0x2c, 0x9c, 0xae, 0x6d, 0x41, 0x2c, 0x61, 0x8c, 0x1b, 0xd0, 0x77, 0x24, 0x43, 0x2b, 0x2f, 0x1d, 0xed, 0xb1, 0x32, 0x7d, 0x8a, 0x99, 0xce, 0x83, 0x0e, 0x6b, 0x03, 0x0f, 0x40, 0x25, 0xc1, 0x4b, 0x4e, 0x3d, 0x19, 0x12, 0xea, 0x9a, 0x78, 0x29, 0x0a, 0x1c, 0xfc, 0x7d, 0x01, 0x89, 0xa3, 0x0c, 0x61, 0x40, 0x10, 0xc8, 0x73, 0x14, 0x6a, 0x18, 0x2f, 0x63, 0x91, 0x93, 0xa2, 0x91, 0x2e, 0xdc, 0xd0, 0x4a }; /* QIUTx = 03140887e87039797869f5d9db50d91ba69d0bfdc5a677c700610562f680d951a5e0517cb2f966367d48e423b046db4e68bc1c4b3183dc80bee126e89014994cdf83c4312a3e5ea7 */ /* QIUTy = 07b8d706962cb192f0ed14c4da710d1b1b073fd8ca497a94379a7454c9c3d4ce6e5fd2e6386852a77c5435abb23536dcc83986cedd4512752f295ca500f055f462763c29fb678caa */ static const uint8_t nist_kas_ecc_cdh_testvector_248_out[] = { /* ZIUT */ 0x05, 0x8c, 0xd5, 0x60, 0x8d, 0xd9, 0xd6, 0x4d, 0x4d, 0x82, 0x2b, 0xae, 0xca, 0x12, 0x33, 0x58, 0xa4, 0xd7, 0xe5, 0x6d, 0x37, 0x77, 0xec, 0xdf, 0x56, 0x9a, 0x14, 0x9c, 0x2f, 0x85, 0xed, 0x35, 0x47, 0x9e, 0xae, 0xaa, 0xba, 0xbd, 0x0b, 0x02, 0x6d, 0xc3, 0xb5, 0x6a, 0xed, 0xaf, 0xed, 0xfc, 0x84, 0x91, 0x04, 0x04, 0x13, 0xf8, 0x5b, 0x66, 0x9d, 0x85, 0x12, 0xa3, 0xef, 0x7b, 0xc8, 0xfe, 0x87, 0x06, 0xb5, 0xc7, 0x58, 0x53, 0x70, 0xaa }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_249_public_x[] = { /* QCAVSx */ 0x07, 0x43, 0xb3, 0xc9, 0x65, 0xa8, 0x3e, 0xe9, 0xf6, 0xbd, 0xb9, 0x90, 0x1a, 0x1d, 0xcc, 0x1f, 0x78, 0x19, 0x65, 0x44, 0xa8, 0x8b, 0x9c, 0xf8, 0x11, 0x7f, 0x89, 0xed, 0x15, 0x74, 0xe5, 0xc5, 0xd8, 0x04, 0xfc, 0x45, 0x11, 0x12, 0xc2, 0x57, 0x87, 0x7e, 0x12, 0xb0, 0xa6, 0x6c, 0x69, 0x3c, 0x66, 0x55, 0xc1, 0x2b, 0xba, 0x45, 0x35, 0xd9, 0x9d, 0x62, 0x40, 0x5f, 0x4a, 0x9d, 0xce, 0xbc, 0x05, 0x6d, 0x8b, 0x7c, 0xbb, 0xad, 0xa1, 0x20 }; static const uint8_t nist_kas_ecc_cdh_testvector_249_public_y[] = { /* QCAVSy */ 0x03, 0xef, 0xa5, 0x8a, 0xa3, 0xa8, 0xc6, 0xa2, 0x4f, 0x43, 0xc5, 0x58, 0x1f, 0xec, 0x04, 0x14, 0x42, 0xae, 0x95, 0x52, 0x75, 0xdb, 0xc1, 0xd4, 0x6d, 0x10, 0x15, 0x60, 0x59, 0xd2, 0x63, 0x7b, 0x9a, 0x82, 0x99, 0x4b, 0x02, 0x4a, 0x24, 0x7d, 0x2a, 0x66, 0x72, 0x4b, 0xa9, 0x0d, 0x02, 0x78, 0x7b, 0x16, 0x8b, 0x1f, 0xa1, 0xf4, 0xb6, 0x74, 0x96, 0x45, 0x40, 0x6c, 0x43, 0x8f, 0x8d, 0x31, 0x6d, 0x67, 0x0f, 0x1e, 0x0d, 0x8b, 0x03, 0x01 }; static const uint8_t nist_kas_ecc_cdh_testvector_249_private[] = { /* dIUT */ 0x00, 0xbd, 0x58, 0xe1, 0x9c, 0x05, 0xdf, 0x7e, 0x99, 0xbd, 0x96, 0x20, 0x70, 0xe0, 0xb4, 0xc7, 0x57, 0x60, 0x42, 0x85, 0x84, 0x47, 0xe0, 0x23, 0xb4, 0x1b, 0xb2, 0x97, 0x45, 0xa8, 0x9a, 0x48, 0x74, 0xdf, 0xe3, 0x25, 0xa1, 0x5d, 0x38, 0xd2, 0xfb, 0x9e, 0x87, 0x0f, 0x41, 0x9d, 0xd1, 0x5f, 0x4a, 0xaa, 0xc6, 0x5d, 0xbb, 0xc5, 0xac, 0x2c, 0x54, 0x0f, 0x57, 0xcd, 0xb0, 0xe4, 0x5b, 0xc8, 0x66, 0x21, 0x72, 0x6d, 0x92, 0x2d, 0x14, 0xaa }; /* QIUTx = 01e4b2a277ddd78f2f119c05b6ae1ea7a2a744961e08940f6569ee8808c53bc7a12138064ed5c8c222eef2774e70c28bce3a6c05f3a654e121006ab62bc94381d01ca0d1b08234d6 */ /* QIUTy = 07eed8cd7a8a3549b0d9ef8786879efdc9c0f4ce90b3991a33cbbb1d3704db93513138b19a50ecac880e578de21046f03a200048180884bc42cf9aafe58cc1eaf536d6d25f1541d8 */ static const uint8_t nist_kas_ecc_cdh_testvector_249_out[] = { /* ZIUT */ 0x03, 0xbf, 0x7a, 0x59, 0xbb, 0xdd, 0x68, 0x86, 0x82, 0xc4, 0x56, 0x64, 0xd2, 0x0c, 0x19, 0xcb, 0x2d, 0x24, 0xfc, 0xca, 0x67, 0x72, 0x12, 0x0c, 0xbe, 0xed, 0x1c, 0xde, 0x76, 0x2d, 0x44, 0x9e, 0xbf, 0x22, 0x85, 0x56, 0x27, 0xeb, 0x6b, 0x2b, 0xe6, 0xe7, 0xf7, 0xc0, 0xf0, 0x03, 0x4d, 0x02, 0x68, 0x6f, 0x2a, 0x44, 0x88, 0x54, 0x9f, 0x8c, 0xb1, 0x98, 0xe0, 0x2b, 0x46, 0x97, 0x2b, 0xcb, 0x88, 0x91, 0x4b, 0xea, 0x66, 0xdd, 0x64, 0x00 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_250_public_x[] = { /* QCAVSx */ 0x07, 0x22, 0xf1, 0xe7, 0xa0, 0x60, 0x77, 0x50, 0xda, 0xe2, 0xd6, 0x2c, 0x5d, 0x3d, 0x47, 0x0f, 0x00, 0x6c, 0x32, 0x54, 0x55, 0x8e, 0xaa, 0xa2, 0x94, 0xee, 0xed, 0xbc, 0xa8, 0xd3, 0x0b, 0xf4, 0xab, 0xb9, 0x55, 0xde, 0xb6, 0x2e, 0x41, 0x79, 0x92, 0x5f, 0x6c, 0xba, 0xdf, 0x3b, 0xf8, 0x77, 0x6f, 0x15, 0xdc, 0xae, 0x35, 0x56, 0xad, 0xdf, 0x79, 0x71, 0x05, 0xa7, 0x7b, 0x7f, 0x6f, 0x71, 0x20, 0x6c, 0xa0, 0xe6, 0xea, 0x91, 0xe1, 0x88 }; static const uint8_t nist_kas_ecc_cdh_testvector_250_public_y[] = { /* QCAVSy */ 0x03, 0x5d, 0x10, 0x8c, 0xa0, 0xd6, 0x20, 0xca, 0xb9, 0x6b, 0x7c, 0xbf, 0x61, 0x7d, 0x1b, 0x5a, 0xc0, 0x6e, 0x37, 0x79, 0x26, 0x29, 0x88, 0x65, 0x64, 0xfd, 0x14, 0x7c, 0x58, 0xe5, 0x5e, 0x42, 0x33, 0x44, 0xff, 0x4f, 0x1f, 0xba, 0x4a, 0xf0, 0xfe, 0x34, 0x15, 0x2b, 0x38, 0x4b, 0x76, 0x85, 0xca, 0xad, 0x15, 0xd3, 0xbc, 0x27, 0x0e, 0x43, 0x42, 0x2a, 0xd8, 0x74, 0xe7, 0x1e, 0x40, 0x8a, 0x71, 0xa6, 0xc8, 0xa9, 0x0d, 0x2a, 0xd9, 0x78 }; static const uint8_t nist_kas_ecc_cdh_testvector_250_private[] = { /* dIUT */ 0x01, 0x14, 0x63, 0x07, 0x0f, 0xcb, 0x4a, 0x28, 0xbe, 0x4e, 0x2a, 0x67, 0xc2, 0x9c, 0x7f, 0xa4, 0x8a, 0x4c, 0x58, 0x5a, 0x30, 0x74, 0x05, 0xd0, 0x6a, 0x1a, 0x06, 0x78, 0xe9, 0x09, 0xdd, 0x6e, 0xaf, 0xb8, 0x98, 0x66, 0x2c, 0xdd, 0x8b, 0xcc, 0x01, 0x9d, 0xeb, 0x14, 0xe5, 0xd9, 0x2d, 0x17, 0x2b, 0xa1, 0xc4, 0x38, 0xef, 0x0f, 0x64, 0xd8, 0x01, 0x07, 0xc7, 0xe8, 0xe6, 0x80, 0x29, 0xf4, 0xe0, 0xaa, 0x81, 0x4a, 0x10, 0x99, 0xca, 0x38 }; /* QIUTx = 00939398e463886f0dbb48a74f573a1215000668e10b57989dc300b2f9a8c08cd43d6cbb7f46ec77c1c294b23f86299027d2b93fd6eb18210a8230bf46e3921f182c9260c30847ab */ /* QIUTy = 03d48ec633b9da1650ea762656b3e31f26aec07e7ca6aafc1ed7cb466eaaf3993e0467048c967bb1e9b4ae073a230c1e2f74e2e618666cf56a06f2b65ec3955b6ffbb06a908cf616 */ static const uint8_t nist_kas_ecc_cdh_testvector_250_out[] = { /* ZIUT */ 0x06, 0xd4, 0x10, 0xe9, 0xba, 0x6b, 0x8b, 0x87, 0xb0, 0x0d, 0x0f, 0x67, 0x6d, 0xe8, 0xba, 0x27, 0xf6, 0xaf, 0xe7, 0xe3, 0x08, 0xc2, 0xe9, 0x92, 0xf3, 0x18, 0xfc, 0x14, 0xcb, 0xa0, 0xa4, 0x47, 0x31, 0x6a, 0xd8, 0x6e, 0x8e, 0x6c, 0x1d, 0x33, 0x45, 0xd8, 0xe4, 0x03, 0x57, 0x35, 0x23, 0x2c, 0x2c, 0x59, 0x7e, 0x76, 0x0b, 0x88, 0x00, 0xa8, 0x9a, 0x52, 0x15, 0x67, 0xb0, 0x94, 0x08, 0xf9, 0xc7, 0xbe, 0x27, 0x9c, 0x13, 0x7c, 0x96, 0x3f }; /* [B-163] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_251_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x03, 0xa6, 0x47, 0xba, 0x32, 0xda, 0xc7, 0x1e, 0xc6, 0x78, 0x0b, 0x06, 0x38, 0xa7, 0x0c, 0xd2, 0x4f, 0xc3, 0xbd, 0x4c, 0x8e }; static const uint8_t nist_kas_ecc_cdh_testvector_251_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x02, 0xe6, 0x9e, 0x96, 0x15, 0x41, 0x84, 0x4a, 0x4a, 0xa3, 0x37, 0x69, 0xa7, 0xbc, 0xe7, 0x10, 0xf6, 0x64, 0x0a, 0x56, 0x0c }; static const uint8_t nist_kas_ecc_cdh_testvector_251_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0xed, 0xae, 0x17, 0x3d, 0xe8, 0xfa, 0x0c, 0xf0, 0x41, 0x2d, 0x6a, 0x7b, 0xdc, 0x81, 0xfd, 0xbd, 0x06, 0x17, 0xad, 0xf8 }; /* QIUTx = 000000035466701d0b0030d098b6ed2343d355c24c907271 */ /* QIUTy = 00000000d8bc02f341d261860dfb65f0cb7f0b488d8296cc */ static const uint8_t nist_kas_ecc_cdh_testvector_251_out[] = { /* ZIUT */ 0x01, 0x00, 0xfb, 0x42, 0xd1, 0x77, 0xff, 0xe6, 0xc3, 0x13, 0x78, 0xe2, 0xe0, 0x4e, 0x0d, 0xa7, 0x37, 0x6f, 0xfe, 0x87, 0x65 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_252_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x01, 0x28, 0x28, 0x98, 0x93, 0x64, 0x86, 0xdc, 0x2e, 0x3c, 0xd1, 0x58, 0x5f, 0x32, 0xd5, 0x54, 0x42, 0x64, 0xe1, 0x91, 0xe4 }; static const uint8_t nist_kas_ecc_cdh_testvector_252_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x05, 0xe9, 0xe9, 0x8b, 0xb7, 0x49, 0x9b, 0xf8, 0x95, 0xf7, 0x7f, 0x8f, 0xc8, 0x30, 0x1d, 0x6e, 0x1c, 0x7a, 0x9f, 0x61, 0x91 }; static const uint8_t nist_kas_ecc_cdh_testvector_252_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0x78, 0xdc, 0xc8, 0x21, 0x64, 0x25, 0xd4, 0xbf, 0x71, 0xc8, 0xf2, 0x92, 0x5d, 0xd1, 0xaf, 0x86, 0xdc, 0x04, 0xa2, 0x68 }; /* QIUTx = 000000011e49430cdd06f2e765b8f2cc067cd424e2e75485 */ /* QIUTy = 0000000083af15b22cd7dfd1dff7396bf3f3038f50524991 */ static const uint8_t nist_kas_ecc_cdh_testvector_252_out[] = { /* ZIUT */ 0x06, 0x81, 0xc9, 0xe5, 0x9e, 0xb7, 0xeb, 0xa7, 0x69, 0xf5, 0xb6, 0xf2, 0xb0, 0x6d, 0xdf, 0x1e, 0xfd, 0x12, 0x99, 0x79, 0x95 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_253_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x05, 0x87, 0x4f, 0xcc, 0x8c, 0x48, 0x4c, 0x01, 0x41, 0x73, 0x10, 0x2d, 0xcb, 0x70, 0xc6, 0x24, 0xee, 0x61, 0x08, 0xd3, 0x1d }; static const uint8_t nist_kas_ecc_cdh_testvector_253_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x00, 0x49, 0x69, 0x3f, 0x4e, 0xdc, 0x71, 0x4b, 0x0d, 0x0b, 0xaa, 0x5b, 0xfc, 0x5d, 0x8b, 0xc6, 0xac, 0x04, 0x08, 0x9d, 0xe4 }; static const uint8_t nist_kas_ecc_cdh_testvector_253_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0xea, 0x1e, 0x79, 0xe5, 0x2a, 0x07, 0x08, 0x98, 0xd6, 0xa3, 0xc4, 0xe7, 0x48, 0xe9, 0x5a, 0xc8, 0x71, 0x0d, 0x77, 0xf6 }; /* QIUTx = 0000000137860ba3458af13c22af8225f561e01331cd87a8 */ /* QIUTy = 00000007720356e15dc73f9fee7a1c021feca97cd41204e3 */ static const uint8_t nist_kas_ecc_cdh_testvector_253_out[] = { /* ZIUT */ 0x01, 0xe0, 0x74, 0x9a, 0x21, 0xfc, 0x50, 0x8f, 0x76, 0xda, 0xde, 0x85, 0x43, 0x5b, 0xbb, 0xe1, 0x2c, 0x44, 0x8b, 0xd8, 0xc4 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_254_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x00, 0x37, 0x48, 0xd7, 0x98, 0xf1, 0x40, 0x26, 0x8f, 0x1e, 0x71, 0x8b, 0x3b, 0x23, 0xaa, 0x2a, 0xcc, 0x03, 0x33, 0xc0, 0x74 }; static const uint8_t nist_kas_ecc_cdh_testvector_254_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x00, 0xc4, 0x2a, 0x92, 0x7a, 0xb5, 0x79, 0x69, 0x61, 0x23, 0x09, 0x55, 0x75, 0xac, 0x94, 0x9b, 0x07, 0xa7, 0xd1, 0xd4, 0xbc }; static const uint8_t nist_kas_ecc_cdh_testvector_254_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0xad, 0x5c, 0xa9, 0xab, 0xc8, 0xbc, 0xdc, 0xc4, 0x82, 0x99, 0x5a, 0xd1, 0xa9, 0x77, 0xe4, 0x72, 0x71, 0x50, 0xbb, 0x36 }; /* QIUTx = 000000025ae78311b0fcf369566a319f89849546aeaec305 */ /* QIUTy = 0000000640eb0fdf520480afbeb9f2674feb1d6df482d7f5 */ static const uint8_t nist_kas_ecc_cdh_testvector_254_out[] = { /* ZIUT */ 0x03, 0x20, 0x39, 0x8f, 0x7a, 0xcf, 0x79, 0x1e, 0x0d, 0x60, 0x2d, 0x7b, 0x94, 0x74, 0x2c, 0xce, 0x58, 0xe9, 0xfd, 0xdb, 0xac }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_255_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x03, 0x80, 0xdb, 0x3d, 0xf2, 0xb1, 0xc0, 0x15, 0x4a, 0x8e, 0x8c, 0xb3, 0x04, 0xae, 0xcd, 0x58, 0x1d, 0x35, 0xf3, 0x15, 0xcd }; static const uint8_t nist_kas_ecc_cdh_testvector_255_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x07, 0x15, 0x34, 0xec, 0x2e, 0x8b, 0x35, 0x7d, 0x9e, 0x06, 0x9d, 0x7f, 0x1f, 0xa9, 0x8b, 0xd4, 0x4e, 0xd8, 0xb0, 0x68, 0x26 }; static const uint8_t nist_kas_ecc_cdh_testvector_255_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0xd2, 0x8a, 0x8a, 0xa1, 0xd8, 0x9f, 0xa3, 0xe5, 0xe5, 0x96, 0xff, 0xd1, 0x80, 0x82, 0x54, 0xee, 0x17, 0xa0, 0xd0, 0xfa }; /* QIUTx = 00000006e6c52494ab63c89c9788556f716677f3b48042a0 */ /* QIUTy = 00000004e98258b9c56f02d3edb4ca5b0aeeaa9daaa6fe0f */ static const uint8_t nist_kas_ecc_cdh_testvector_255_out[] = { /* ZIUT */ 0x03, 0xe4, 0xde, 0x43, 0xde, 0x85, 0x22, 0x3d, 0x81, 0x8e, 0x5b, 0xe6, 0x54, 0x9c, 0x29, 0xcd, 0xfa, 0x1a, 0xfe, 0x17, 0x82 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_256_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x01, 0x36, 0xe0, 0xd0, 0x5b, 0x4f, 0x39, 0x8b, 0x82, 0x7e, 0x19, 0x80, 0x46, 0x14, 0x8b, 0x2f, 0x41, 0x57, 0x3f, 0xc0, 0x7c }; static const uint8_t nist_kas_ecc_cdh_testvector_256_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x07, 0x39, 0x93, 0x4c, 0xec, 0x10, 0x57, 0x28, 0x52, 0xe1, 0xf6, 0x19, 0x22, 0x2e, 0x2f, 0x5e, 0xc4, 0xe0, 0xfa, 0x5a, 0xa6 }; static const uint8_t nist_kas_ecc_cdh_testvector_256_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0xe1, 0x70, 0xf7, 0xf4, 0xdc, 0x15, 0x2f, 0xe4, 0x70, 0x6f, 0x99, 0xd9, 0xbe, 0x22, 0x9e, 0x13, 0x17, 0xd8, 0x2b, 0xbd }; /* QIUTx = 00000007900dac251de8a944cf0a1bf2eb2efeee14676e9b */ /* QIUTy = 0000000091e7df67f77622729d59b7e34b947127e7fa2e5d */ static const uint8_t nist_kas_ecc_cdh_testvector_256_out[] = { /* ZIUT */ 0x03, 0x7b, 0x17, 0x8a, 0xab, 0x01, 0x4d, 0x5a, 0xba, 0xb3, 0x05, 0xe3, 0x7d, 0xee, 0xd7, 0xf4, 0x79, 0x8c, 0xdb, 0x86, 0x2c }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_257_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x07, 0x6c, 0x3a, 0xe4, 0xa7, 0x81, 0x67, 0x36, 0x27, 0xd0, 0xe9, 0xbc, 0xb6, 0x15, 0xf6, 0x26, 0xa1, 0x60, 0xa5, 0x5d, 0xda }; static const uint8_t nist_kas_ecc_cdh_testvector_257_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x05, 0x8c, 0x0e, 0xc8, 0xf2, 0x64, 0x9c, 0x2d, 0xdc, 0xd9, 0xc2, 0x4b, 0x64, 0x34, 0x33, 0xb1, 0x4d, 0x90, 0x7c, 0x59, 0x03 }; static const uint8_t nist_kas_ecc_cdh_testvector_257_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0x92, 0x3d, 0x2c, 0x80, 0x2c, 0xec, 0x42, 0xde, 0xf2, 0x63, 0x3d, 0xeb, 0xdc, 0xa7, 0x59, 0xd5, 0x97, 0x44, 0xd3, 0xe8 }; /* QIUTx = 00000002cdcb4f91ed7d17768db80be2b3ac9e0956b1d971 */ /* QIUTy = 000000032433f455a6cd253e91582d2f6f5a712655da1d69 */ static const uint8_t nist_kas_ecc_cdh_testvector_257_out[] = { /* ZIUT */ 0x00, 0x95, 0x8b, 0x2a, 0xaa, 0x60, 0x61, 0x22, 0x2d, 0xd2, 0x48, 0xa6, 0xb9, 0x70, 0x0f, 0xb6, 0x83, 0x9d, 0xac, 0xdc, 0x99 }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_258_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x00, 0xd6, 0x5f, 0x05, 0x16, 0xc1, 0xb3, 0xee, 0xd9, 0x22, 0x0e, 0x59, 0xb3, 0xd0, 0x49, 0xdd, 0x11, 0x53, 0x17, 0x9a, 0xc5 }; static const uint8_t nist_kas_ecc_cdh_testvector_258_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x02, 0x0b, 0xfe, 0x10, 0x7a, 0x89, 0xa7, 0x36, 0x0c, 0xd2, 0xe2, 0x17, 0x53, 0x4d, 0x6d, 0xf2, 0x98, 0xcc, 0x4b, 0xc4, 0x58 }; static const uint8_t nist_kas_ecc_cdh_testvector_258_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0x5b, 0x17, 0xbd, 0x6e, 0x42, 0x07, 0xd9, 0xfb, 0x1a, 0x3a, 0xf0, 0x2f, 0xd5, 0xdb, 0x26, 0xaf, 0x83, 0x48, 0xae, 0xb0 }; /* QIUTx = 00000006f6f5b1f3b18f45db4fb3777e6840fb5a5b61a914 */ /* QIUTy = 0000000737ce14aeb24e0591585a7417b89256749f461de6 */ static const uint8_t nist_kas_ecc_cdh_testvector_258_out[] = { /* ZIUT */ 0x03, 0x93, 0x38, 0x7e, 0x1d, 0xab, 0x35, 0x74, 0x8f, 0x20, 0xd5, 0x06, 0xa0, 0xe2, 0xb4, 0xdc, 0x0e, 0xe6, 0xc3, 0xff, 0x39 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_259_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x04, 0x0d, 0x90, 0x3c, 0xe2, 0xb3, 0x0f, 0x70, 0xa6, 0xa0, 0x38, 0x49, 0xb0, 0xe1, 0x75, 0x8f, 0xef, 0x88, 0x87, 0xbd, 0x31 }; static const uint8_t nist_kas_ecc_cdh_testvector_259_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x04, 0xab, 0xd8, 0xbd, 0xb7, 0xc1, 0x32, 0x7c, 0x99, 0xb3, 0x38, 0x20, 0xdb, 0xe1, 0x8a, 0xe1, 0x14, 0xfb, 0x43, 0x59, 0x49 }; static const uint8_t nist_kas_ecc_cdh_testvector_259_private[] = { /* dIUT */ 0x13, 0x7e, 0x81, 0x32, 0xad, 0x28, 0x89, 0x23, 0xe6, 0x48, 0x11, 0xe9, 0x22, 0x98, 0xf5, 0xc0, 0xdc, 0xc9, 0x57, 0x05 }; /* QIUTx = 00000006f2cdd1d630dd731ed77f901c7b0e735515e26d4e */ /* QIUTy = 00000001062f2f715c4d2af97bb1be8b6cfa2e3ee314253e */ static const uint8_t nist_kas_ecc_cdh_testvector_259_out[] = { /* ZIUT */ 0x02, 0x12, 0x35, 0x8d, 0x3f, 0x8b, 0xce, 0x69, 0xb6, 0x62, 0x44, 0x73, 0x33, 0xb3, 0xed, 0xbb, 0xc9, 0xb2, 0xf7, 0xe8, 0x05 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_260_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0x2e, 0xd2, 0x46, 0x43, 0xf0, 0xce, 0xc6, 0x8c, 0x8e, 0x4a, 0xd1, 0xaa, 0x2c, 0x43, 0x69, 0xd8, 0xaa, 0x03, 0xf5, 0x94 }; static const uint8_t nist_kas_ecc_cdh_testvector_260_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x05, 0xcc, 0xca, 0x62, 0xb6, 0xdd, 0x1d, 0x31, 0x6d, 0xed, 0xbd, 0x0f, 0x1d, 0x53, 0x0b, 0xed, 0x6e, 0x55, 0x6b, 0x3a, 0xd8 }; static const uint8_t nist_kas_ecc_cdh_testvector_260_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0xc4, 0x8c, 0x50, 0xb7, 0xd3, 0xec, 0xdf, 0x3b, 0x90, 0x1b, 0xad, 0x0e, 0xef, 0xc3, 0xe3, 0x82, 0x6e, 0x3c, 0xea, 0x9f }; /* QIUTx = 000000019175573117dd851e6eebfd9fb1e5a884ebfefee5 */ /* QIUTy = 00000003adf37e4ded52573fa57c8cb2bfca6c65c3674462 */ static const uint8_t nist_kas_ecc_cdh_testvector_260_out[] = { /* ZIUT */ 0x02, 0x34, 0x72, 0xfa, 0x59, 0x84, 0x6f, 0x7b, 0xe0, 0x7c, 0xf0, 0x60, 0xcd, 0xd6, 0x9a, 0x9f, 0xbb, 0x27, 0xd4, 0xfe, 0x44 }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_261_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x07, 0x93, 0xf4, 0xb3, 0x11, 0x72, 0xee, 0xe6, 0x6f, 0x27, 0x69, 0xeb, 0x30, 0x5d, 0x03, 0xb5, 0xc3, 0xf7, 0xcf, 0xff, 0x8b }; static const uint8_t nist_kas_ecc_cdh_testvector_261_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x01, 0xf3, 0xec, 0xec, 0x6b, 0xbd, 0xa9, 0xbd, 0xe8, 0xa4, 0xda, 0x14, 0xdb, 0x3e, 0x5f, 0xf9, 0x34, 0xb9, 0x83, 0x5b, 0x17 }; static const uint8_t nist_kas_ecc_cdh_testvector_261_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0x16, 0x2d, 0x9e, 0xd3, 0xa6, 0x60, 0x45, 0x5e, 0x8c, 0x01, 0x5d, 0x1e, 0x45, 0xd1, 0x51, 0x57, 0x49, 0xa3, 0xdc, 0xd2 }; /* QIUTx = 00000004283eb0e5085d198b378fc95f6fb4c3198b4d3c78 */ /* QIUTy = 0000000107a1168f2f47b963e4b3a9024e0c357a5ebdf92c */ static const uint8_t nist_kas_ecc_cdh_testvector_261_out[] = { /* ZIUT */ 0x01, 0x73, 0xa0, 0x56, 0xc4, 0xc9, 0xef, 0x67, 0x07, 0xcd, 0x23, 0x92, 0x89, 0x99, 0xc4, 0x68, 0x0f, 0x42, 0xb7, 0x1f, 0x7c }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_262_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0xea, 0x7a, 0x50, 0x83, 0x46, 0x02, 0xf1, 0x12, 0xf6, 0xdd, 0x0e, 0x6d, 0x25, 0xf0, 0x64, 0xf9, 0xd0, 0x5e, 0xff, 0x26 }; static const uint8_t nist_kas_ecc_cdh_testvector_262_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x01, 0xbf, 0x3f, 0x69, 0xd1, 0x4a, 0xcc, 0x83, 0x33, 0x53, 0x3a, 0x88, 0xc2, 0xe8, 0x82, 0x48, 0x63, 0xa4, 0x7a, 0xe0, 0x27 }; static const uint8_t nist_kas_ecc_cdh_testvector_262_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0x9a, 0x1d, 0x16, 0xf4, 0xa5, 0x72, 0xf3, 0xc1, 0xb5, 0x1e, 0xa2, 0xac, 0xe6, 0x92, 0x80, 0xe7, 0x13, 0x7b, 0x8f, 0x8c }; /* QIUTx = 00000005cede96a70f714cd68963f2d6ca236269a938f311 */ /* QIUTy = 00000006cdadd54b6f733c80934787e28c2ccf58b1227bc0 */ static const uint8_t nist_kas_ecc_cdh_testvector_262_out[] = { /* ZIUT */ 0x03, 0xd3, 0x4f, 0x41, 0x1a, 0x29, 0x7d, 0x7c, 0x99, 0x0f, 0xa4, 0xa8, 0x3b, 0x5f, 0x54, 0x75, 0x96, 0x07, 0xf9, 0xd3, 0x3f }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_263_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x06, 0xdd, 0x13, 0x05, 0x34, 0x9e, 0x8a, 0xa0, 0x80, 0x20, 0x07, 0x3a, 0x0d, 0xe5, 0xaf, 0xc5, 0xdc, 0x1b, 0x6a, 0x62, 0xd3 }; static const uint8_t nist_kas_ecc_cdh_testvector_263_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x03, 0x49, 0x7e, 0xb7, 0xbf, 0x40, 0x89, 0xef, 0x02, 0xcd, 0x0a, 0x5d, 0xd0, 0xf8, 0x6b, 0xd8, 0x79, 0x8a, 0x44, 0xc5, 0x6c }; static const uint8_t nist_kas_ecc_cdh_testvector_263_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0xef, 0xd4, 0x40, 0x0d, 0xad, 0x3c, 0xfa, 0xd8, 0xd1, 0x63, 0x7f, 0xa9, 0x29, 0x0c, 0x4b, 0x75, 0x8a, 0x30, 0x15, 0xb6 }; /* QIUTx = 0000000513131b4bcb72ef68ab043ee84fc8cb03b6d8f187 */ /* QIUTy = 0000000120b7d5772bbb17ecb1c9e80c36f808fd54a93aae */ static const uint8_t nist_kas_ecc_cdh_testvector_263_out[] = { /* ZIUT */ 0x06, 0x12, 0x0a, 0xed, 0x8d, 0x4c, 0x1e, 0x50, 0x67, 0x10, 0xe2, 0xcf, 0xb9, 0x8c, 0xa2, 0x02, 0x2e, 0x64, 0x2c, 0xa8, 0x9f }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_264_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x05, 0xa0, 0xe3, 0x41, 0x11, 0x8e, 0x69, 0x82, 0x7d, 0x6a, 0x7f, 0x82, 0x82, 0xfb, 0xf0, 0xb9, 0x44, 0x00, 0xf0, 0x82, 0x40 }; static const uint8_t nist_kas_ecc_cdh_testvector_264_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x04, 0x23, 0xb9, 0x93, 0xd4, 0x36, 0x7f, 0xbf, 0x4f, 0x65, 0x04, 0xd9, 0xe0, 0x9a, 0x64, 0x12, 0x3a, 0x3b, 0x53, 0xd1, 0x28 }; static const uint8_t nist_kas_ecc_cdh_testvector_264_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0x2b, 0x0d, 0x64, 0x97, 0x7c, 0xfc, 0x13, 0xb4, 0x83, 0x45, 0xef, 0x70, 0x72, 0xd1, 0xa3, 0x89, 0x0e, 0xaf, 0xb9, 0x5b }; /* QIUTx = 00000001b9363cf48735676878d80ce1481b8588683f7444 */ /* QIUTy = 0000000768fa7327cd7252c8f696ed4947868915ada1fb5d */ static const uint8_t nist_kas_ecc_cdh_testvector_264_out[] = { /* ZIUT */ 0x02, 0x1a, 0x58, 0x08, 0x79, 0x68, 0xc5, 0xdf, 0x57, 0xaf, 0xd7, 0xc3, 0x43, 0xa4, 0xcf, 0xa2, 0xee, 0x8e, 0x70, 0x73, 0xf1 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_265_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x00, 0x1a, 0x92, 0x3d, 0x61, 0x91, 0x63, 0x43, 0x06, 0x12, 0x4c, 0x1e, 0x26, 0x73, 0x09, 0xb0, 0x7d, 0xba, 0x32, 0xde, 0xcb }; static const uint8_t nist_kas_ecc_cdh_testvector_265_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x05, 0xa3, 0x51, 0x7f, 0x54, 0x26, 0xa3, 0x41, 0x1a, 0x72, 0x7e, 0xdd, 0xc2, 0x9a, 0x3e, 0xc2, 0x29, 0x55, 0x83, 0x68, 0xd1 }; static const uint8_t nist_kas_ecc_cdh_testvector_265_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x3a, 0xc9, 0x53, 0x80, 0x3d, 0x04, 0x46, 0xb3, 0xcd, 0xa4, 0xeb, 0xd0, 0x71, 0xb4, 0xeb, 0x02, 0x7c, 0x11, 0xbf, 0xd8 }; /* QIUTx = 00000005c446e9896ca44cca733e9f4e5b64afddc0537211 */ /* QIUTy = 00000006bad1b2522692f970b38be6935dc7d1c09dcd206f */ static const uint8_t nist_kas_ecc_cdh_testvector_265_out[] = { /* ZIUT */ 0x03, 0xda, 0x9c, 0x08, 0x79, 0x21, 0x9e, 0x48, 0xc3, 0xdf, 0x56, 0x17, 0x48, 0x98, 0xfa, 0xb9, 0xee, 0x5b, 0x0a, 0x6b, 0xcd }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_266_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x02, 0xfa, 0x8b, 0xaf, 0x0d, 0x61, 0x28, 0xad, 0xd9, 0xb9, 0x02, 0xaa, 0x18, 0x1c, 0x81, 0xe2, 0x42, 0x98, 0x45, 0x1e, 0x2e }; static const uint8_t nist_kas_ecc_cdh_testvector_266_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x02, 0xb9, 0x3d, 0x1f, 0x69, 0x13, 0x91, 0x4f, 0xfe, 0x15, 0x59, 0xc7, 0xc1, 0x14, 0xc6, 0x31, 0xbb, 0x6b, 0x29, 0x61, 0x7e }; static const uint8_t nist_kas_ecc_cdh_testvector_266_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x01, 0xbd, 0x79, 0x14, 0x5a, 0xe7, 0xf4, 0x2c, 0x6b, 0x25, 0xd1, 0xc3, 0x89, 0x65, 0xec, 0x08, 0xfd, 0x27, 0x53, 0x3a, 0x7a }; /* QIUTx = 00000000e9d8fc3a026925c8add508f920fa2e5ff5282688 */ /* QIUTy = 00000005b7bf631259ac7d36936c130ff206d820b13bde81 */ static const uint8_t nist_kas_ecc_cdh_testvector_266_out[] = { /* ZIUT */ 0x05, 0xb3, 0x3f, 0xe3, 0x87, 0x4d, 0x32, 0xae, 0xd9, 0x99, 0x19, 0x26, 0x5c, 0xc0, 0x07, 0x49, 0x02, 0xe5, 0x38, 0xfe, 0x54 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_267_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x03, 0x53, 0xe2, 0xda, 0x45, 0xab, 0x7c, 0x49, 0x30, 0x28, 0x0c, 0x3e, 0xdb, 0x4b, 0xa9, 0x00, 0x12, 0xd5, 0x6d, 0xf6, 0x2f }; static const uint8_t nist_kas_ecc_cdh_testvector_267_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x02, 0x69, 0x31, 0xe3, 0x0b, 0x97, 0xff, 0x5e, 0xf7, 0xba, 0xcc, 0x0d, 0xe4, 0xd9, 0x49, 0x07, 0x08, 0x52, 0x2e, 0x3b, 0x2b }; static const uint8_t nist_kas_ecc_cdh_testvector_267_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x30, 0xca, 0x1f, 0x5a, 0xd7, 0x7d, 0x7a, 0x66, 0xd8, 0x74, 0x23, 0x32, 0x80, 0x20, 0xc9, 0x1e, 0xc7, 0x9f, 0x37, 0x64 }; /* QIUTx = 00000005ba37d36997c4f2abe603dfe042232738e82b0b3a */ /* QIUTy = 000000073c8cd950044972a005c6f1af8e4306e0ccefb946 */ static const uint8_t nist_kas_ecc_cdh_testvector_267_out[] = { /* ZIUT */ 0x05, 0x3d, 0xbc, 0xe9, 0x82, 0x6a, 0xf4, 0xd2, 0x90, 0x03, 0x6f, 0xeb, 0x46, 0x87, 0x5e, 0x97, 0x5b, 0x78, 0x48, 0xa9, 0xc4 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_268_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x07, 0x21, 0x67, 0x08, 0x84, 0xda, 0xa8, 0xcd, 0x62, 0x76, 0x38, 0xec, 0x90, 0xf3, 0x44, 0x8e, 0xfb, 0x0f, 0x24, 0x89, 0xba }; static const uint8_t nist_kas_ecc_cdh_testvector_268_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x04, 0xf8, 0x4a, 0x98, 0x3b, 0xec, 0x6b, 0x28, 0x89, 0xc8, 0x21, 0x1b, 0xf2, 0x31, 0x14, 0x9b, 0x5b, 0xeb, 0xcc, 0x75, 0xe0 }; static const uint8_t nist_kas_ecc_cdh_testvector_268_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0xd2, 0x31, 0x40, 0x07, 0x4d, 0x6e, 0xdd, 0xd5, 0xbc, 0x09, 0x9b, 0x17, 0xde, 0x12, 0xaf, 0xb9, 0xdd, 0xf2, 0xec, 0xbe }; /* QIUTx = 00000006e06cc7c30f5ed7e686c3a75a1d44257770601cb2 */ /* QIUTy = 000000030dc414c4afb390ed467af471aa9bd2b75f32dfd8 */ static const uint8_t nist_kas_ecc_cdh_testvector_268_out[] = { /* ZIUT */ 0x00, 0xd4, 0x9b, 0x97, 0x1c, 0xab, 0x93, 0x7f, 0x40, 0x90, 0x89, 0x13, 0xfe, 0x25, 0x98, 0x49, 0x67, 0x9c, 0xa0, 0x76, 0xd9 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_269_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x01, 0xd6, 0x31, 0x9e, 0xc2, 0xdc, 0x5c, 0x08, 0xf0, 0x26, 0x1a, 0xed, 0x02, 0x31, 0x41, 0x8d, 0x6d, 0xc3, 0xd0, 0xcd, 0xa7 }; static const uint8_t nist_kas_ecc_cdh_testvector_269_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x03, 0x8e, 0x64, 0x95, 0x3f, 0x7c, 0xda, 0xc7, 0x1d, 0x05, 0x2e, 0x55, 0x85, 0x57, 0x46, 0xb4, 0x3d, 0x44, 0x18, 0x1b, 0x91 }; static const uint8_t nist_kas_ecc_cdh_testvector_269_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0x44, 0x9c, 0x1b, 0x9f, 0xf0, 0x9e, 0x7a, 0x9a, 0x03, 0xb1, 0x7f, 0x5f, 0xf4, 0x61, 0x11, 0x5f, 0x5f, 0x3f, 0x1a, 0x7f }; /* QIUTx = 000000073f9ddddc4650933deccc9546d392a35dbbc66a76 */ /* QIUTy = 00000004de7558dde649f72322b39e31c8e29ce6f599485e */ static const uint8_t nist_kas_ecc_cdh_testvector_269_out[] = { /* ZIUT */ 0x04, 0x83, 0xad, 0x0b, 0x7f, 0x8a, 0x71, 0x62, 0x73, 0xf6, 0x24, 0xb8, 0x97, 0x9c, 0x19, 0x12, 0x67, 0x05, 0x26, 0x6e, 0x4b }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_270_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x04, 0xf1, 0x67, 0x90, 0x7b, 0xf4, 0xb9, 0x8e, 0x86, 0x96, 0xd8, 0x1d, 0xa7, 0xd2, 0xc1, 0x05, 0x6e, 0xfa, 0x0d, 0xc1, 0x4c }; static const uint8_t nist_kas_ecc_cdh_testvector_270_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x06, 0xcb, 0x9a, 0xb6, 0x51, 0x43, 0x83, 0x2b, 0x9c, 0xef, 0xd5, 0xd9, 0xce, 0x69, 0xec, 0x4d, 0xb2, 0xed, 0xd0, 0x67, 0xaa }; static const uint8_t nist_kas_ecc_cdh_testvector_270_private[] = { /* dIUT */ 0xd0, 0x8b, 0x95, 0xd9, 0xa4, 0xce, 0x72, 0x4e, 0xc4, 0x62, 0xcc, 0xe1, 0x27, 0x01, 0xfd, 0x8c, 0x3d, 0x53, 0xfd, 0xcd }; /* QIUTx = 0000000026a770d86e1c89ba7a86aef649ba7ea86fc7d5b2 */ /* QIUTy = 00000001db1020e0f764df54a53c23c938cec98d9a77ad1d */ static const uint8_t nist_kas_ecc_cdh_testvector_270_out[] = { /* ZIUT */ 0x00, 0xf6, 0x9d, 0xcb, 0x54, 0x71, 0x19, 0xfc, 0x9b, 0x8c, 0x45, 0x43, 0x35, 0xaa, 0xb1, 0x84, 0xc3, 0xad, 0xa5, 0xf1, 0xc6 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_271_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x07, 0x9b, 0x6d, 0x14, 0xc7, 0x43, 0x27, 0x14, 0x02, 0xd1, 0x32, 0x36, 0x03, 0x21, 0x5f, 0xeb, 0x3c, 0x68, 0xb1, 0x44, 0x55 }; static const uint8_t nist_kas_ecc_cdh_testvector_271_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x04, 0xe3, 0x90, 0x56, 0x86, 0xa5, 0x38, 0xc2, 0x5a, 0x02, 0xbe, 0xa9, 0x2f, 0x42, 0x18, 0x40, 0x21, 0xb5, 0xea, 0x25, 0x93 }; static const uint8_t nist_kas_ecc_cdh_testvector_271_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x80, 0x8e, 0xfe, 0x6a, 0xd5, 0x0d, 0x25, 0x0d, 0x87, 0x19, 0x2e, 0x16, 0x49, 0x9c, 0xe3, 0x25, 0x94, 0x28, 0xf3, 0xb8 }; /* QIUTx = 0000000013a02e25fc927875afa557bd673f65870459e671 */ /* QIUTy = 00000004038dbae5c5e54084708a24bc3fd072e769c12377 */ static const uint8_t nist_kas_ecc_cdh_testvector_271_out[] = { /* ZIUT */ 0x01, 0xbc, 0x5e, 0xe5, 0x26, 0x1b, 0x2b, 0xba, 0x55, 0xb1, 0x0c, 0xba, 0xa6, 0xcc, 0x3c, 0x97, 0xb9, 0x8d, 0x00, 0xff, 0xea }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_272_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x07, 0x72, 0xf4, 0x2d, 0x27, 0x2a, 0x05, 0x7d, 0xe0, 0xff, 0x92, 0x6c, 0x9f, 0x94, 0x60, 0x5c, 0x66, 0x75, 0xd2, 0x15, 0x26 }; static const uint8_t nist_kas_ecc_cdh_testvector_272_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x06, 0x02, 0xe7, 0xe5, 0x32, 0x55, 0xde, 0x9b, 0xf5, 0x8c, 0x05, 0x7e, 0xef, 0xb7, 0x9b, 0xce, 0x43, 0x1b, 0x5c, 0x38, 0x08 }; static const uint8_t nist_kas_ecc_cdh_testvector_272_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x02, 0xad, 0x23, 0x2a, 0x7a, 0x41, 0xe6, 0xcc, 0x24, 0x95, 0x53, 0x8d, 0x87, 0xb0, 0x23, 0xcd, 0xec, 0x7b, 0x6e, 0x1f, 0x23 }; /* QIUTx = 0000000549e30780d93f796fdcf691905575d85c66453bdb */ /* QIUTy = 00000002162a885bea31344543f5d06191369dec6e70e967 */ static const uint8_t nist_kas_ecc_cdh_testvector_272_out[] = { /* ZIUT */ 0x00, 0x85, 0x74, 0xd8, 0x38, 0xd3, 0xde, 0x87, 0x96, 0x5f, 0xc1, 0xb4, 0x34, 0x3f, 0xe4, 0xf0, 0x78, 0x58, 0x8c, 0x4e, 0xa1 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_273_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x05, 0x0b, 0x24, 0x29, 0x46, 0x09, 0x71, 0x73, 0x9a, 0x9d, 0x6d, 0x56, 0x70, 0xbc, 0x6d, 0x75, 0x9e, 0x56, 0x56, 0x76, 0x8b }; static const uint8_t nist_kas_ecc_cdh_testvector_273_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x04, 0x92, 0xbc, 0x2d, 0x3f, 0x63, 0x8d, 0x49, 0x78, 0xe4, 0xca, 0x58, 0xca, 0x5a, 0x4e, 0xf1, 0x9c, 0x5e, 0xcc, 0xea, 0x8d }; static const uint8_t nist_kas_ecc_cdh_testvector_273_private[] = { /* dIUT */ 0xdc, 0x99, 0xb1, 0x9f, 0x3d, 0x88, 0x47, 0x87, 0x51, 0x90, 0xe9, 0x58, 0x8b, 0x2b, 0xbd, 0x83, 0x0d, 0xbd, 0x3a, 0x95 }; /* QIUTx = 00000000f65d984d71dcc18bf172abe4d3993ce0f7cf324c */ /* QIUTy = 000000001b49e6a2cf1173aadac3af6c09e966f31141abd9 */ static const uint8_t nist_kas_ecc_cdh_testvector_273_out[] = { /* ZIUT */ 0x04, 0x57, 0x9b, 0x47, 0x7a, 0x92, 0xed, 0x96, 0x1c, 0xfd, 0xb2, 0x01, 0x44, 0x07, 0xe8, 0x8e, 0x77, 0x16, 0x45, 0x2a, 0x4b }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_274_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x01, 0x7d, 0x52, 0x11, 0x6f, 0x0c, 0x95, 0x58, 0x7f, 0x1b, 0x7b, 0x06, 0xc7, 0x6e, 0x98, 0xd9, 0x9c, 0x82, 0xdc, 0xf2, 0x0c }; static const uint8_t nist_kas_ecc_cdh_testvector_274_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x02, 0x4e, 0xa2, 0x2b, 0xdd, 0x99, 0x0b, 0xd7, 0x9e, 0x63, 0xe7, 0x35, 0xb2, 0x12, 0x82, 0xae, 0x1b, 0x5e, 0xa6, 0x66, 0x48 }; static const uint8_t nist_kas_ecc_cdh_testvector_274_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x03, 0x56, 0xab, 0x85, 0xb0, 0x4d, 0x08, 0x51, 0xb8, 0xf6, 0x6b, 0x4a, 0x79, 0x65, 0x26, 0xd3, 0xf3, 0xe3, 0x88, 0x28, 0x44 }; /* QIUTx = 0000000776a2e1af932d74519070bfa941eaa93e9ff5e97a */ /* QIUTy = 00000005abe9ed46245fd0146250d2a563c46ebf7acd2342 */ static const uint8_t nist_kas_ecc_cdh_testvector_274_out[] = { /* ZIUT */ 0x03, 0x5a, 0x8c, 0x10, 0xe6, 0x44, 0x03, 0xc5, 0x2e, 0xf8, 0xd1, 0x7c, 0x5f, 0x4d, 0xea, 0xd0, 0xdf, 0x81, 0xfb, 0x1f, 0x21 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_275_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x03, 0xa7, 0xea, 0x10, 0xba, 0x1d, 0x6a, 0xa5, 0x45, 0x70, 0x0b, 0x40, 0xb7, 0x37, 0x95, 0x1a, 0x9e, 0x73, 0x6d, 0xfa, 0x0c }; static const uint8_t nist_kas_ecc_cdh_testvector_275_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x04, 0xf9, 0x35, 0x2f, 0xb2, 0xac, 0x24, 0x44, 0xe9, 0x28, 0x75, 0x4e, 0x36, 0x55, 0xfd, 0x62, 0xe3, 0xa4, 0x25, 0x64, 0xe8 }; static const uint8_t nist_kas_ecc_cdh_testvector_275_private[] = { /* dIUT */ 0x7a, 0x7b, 0x54, 0x75, 0x50, 0xc7, 0x58, 0xa9, 0xde, 0x7f, 0x06, 0xe2, 0xf3, 0x8e, 0x55, 0xf5, 0xe9, 0xe4, 0x4c, 0xe6 }; /* QIUTx = 000000045952c0b517e685cab09470327f9d4b212751b049 */ /* QIUTy = 000000044a429a6efb04bcea0240ab5805de740aa61f994e */ static const uint8_t nist_kas_ecc_cdh_testvector_275_out[] = { /* ZIUT */ 0x00, 0x01, 0x42, 0x61, 0x5e, 0x36, 0x07, 0xac, 0x14, 0x8c, 0x4d, 0xe8, 0xf3, 0x34, 0xbe, 0x84, 0x92, 0x35, 0xd0, 0x1c, 0xdb }; /* [B-233] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_276_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x47, 0x56, 0xba, 0xdd, 0xef, 0xc3, 0xdc, 0x33, 0x7a, 0xb2, 0x7b, 0x54, 0x52, 0xeb, 0x10, 0xaf, 0xfd, 0x9e, 0x31, 0xf5, 0xb5, 0x5c, 0x33, 0x0e, 0x90, 0xf0, 0xf6, 0x86, 0xa2 }; static const uint8_t nist_kas_ecc_cdh_testvector_276_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x2a, 0x79, 0xf6, 0x52, 0x32, 0x30, 0x8a, 0x21, 0xc9, 0x8c, 0x01, 0x55, 0x5c, 0xca, 0xfc, 0x7d, 0xce, 0x15, 0xc8, 0xfe, 0xd3, 0x02, 0x5a, 0x76, 0x0c, 0xbd, 0x6c, 0x23, 0x27 }; static const uint8_t nist_kas_ecc_cdh_testvector_276_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x3c, 0x3e, 0xe4, 0x74, 0xac, 0x0d, 0x0b, 0xc1, 0xdf, 0x56, 0x7e, 0x3c, 0x35, 0xf5, 0xf7, 0x66, 0xc5, 0x33, 0x2b, 0x2d, 0x67, 0x30, 0xff, 0x0e, 0x4d, 0x8e, 0x75, 0xae, 0xdb }; /* QIUTx = 00000061e8a9b517fd05a026ec376616229fd8639a1fa76defe5398022f9d9c8 */ /* QIUTy = 000000706b5cb08738a94552fee584b1372fead4af79040909fcf6f50084bbfa */ static const uint8_t nist_kas_ecc_cdh_testvector_276_out[] = { /* ZIUT */ 0x00, 0xe9, 0xf3, 0xd8, 0xc4, 0xf1, 0xbe, 0xc0, 0xf9, 0x20, 0xe7, 0x63, 0xea, 0x1b, 0xb7, 0x41, 0x58, 0x99, 0xf0, 0x17, 0x34, 0x60, 0x9e, 0x75, 0x47, 0xdc, 0x42, 0x5e, 0xc9, 0x46 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_277_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x18, 0x6a, 0x02, 0x8f, 0x9a, 0x18, 0xdb, 0x92, 0x7f, 0x63, 0x25, 0x3c, 0x20, 0x3e, 0xb2, 0x6a, 0xa3, 0xab, 0xa0, 0xd4, 0x0b, 0x1a, 0x3a, 0xbc, 0x64, 0xe4, 0x7a, 0x22, 0xad }; static const uint8_t nist_kas_ecc_cdh_testvector_277_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xcb, 0xd8, 0xb9, 0x5f, 0x89, 0xe4, 0x21, 0x12, 0x8b, 0xc7, 0x3a, 0x43, 0xc5, 0xcc, 0x25, 0x4e, 0x38, 0x67, 0x09, 0x6a, 0xb8, 0x9d, 0x78, 0x8b, 0x2e, 0xd3, 0xb9, 0x0a, 0x96 }; static const uint8_t nist_kas_ecc_cdh_testvector_277_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xaa, 0x41, 0xa5, 0xa0, 0x1a, 0x4e, 0x66, 0xa6, 0x79, 0x97, 0xb0, 0xbe, 0x16, 0xf5, 0x6b, 0x16, 0x0b, 0x05, 0x61, 0xad, 0x07, 0xf3, 0xaf, 0x29, 0x64, 0x38, 0x64, 0x61, 0xd0 }; /* QIUTx = 0000002d91402446557068c40fc075dee93916b0f1a9392e47e56b747125ae1f */ /* QIUTy = 0000013ab0915e4acf779516826fa1dc1885a06abc5d0809c92240ccf9c3d8a4 */ static const uint8_t nist_kas_ecc_cdh_testvector_277_out[] = { /* ZIUT */ 0x00, 0xf1, 0xfb, 0xec, 0xfa, 0xdb, 0x15, 0x8d, 0x62, 0xeb, 0x11, 0x09, 0xc0, 0x85, 0x12, 0x4f, 0xad, 0x67, 0xa8, 0x79, 0x5b, 0x58, 0x81, 0x5e, 0xb3, 0x96, 0xc9, 0x5d, 0xb4, 0xb9 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_278_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x93, 0xbf, 0x85, 0x62, 0x16, 0x02, 0x23, 0x8e, 0x98, 0xd0, 0x9c, 0x98, 0x82, 0x8d, 0x51, 0xa4, 0x94, 0x60, 0x36, 0x2c, 0x23, 0xc5, 0x14, 0x1d, 0x3d, 0x1b, 0x23, 0x52, 0x96 }; static const uint8_t nist_kas_ecc_cdh_testvector_278_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x84, 0x97, 0x15, 0x21, 0x87, 0xa8, 0xb3, 0xb2, 0x95, 0x8a, 0x1d, 0x0a, 0x2e, 0xec, 0xff, 0x44, 0x92, 0x25, 0x18, 0x07, 0xcb, 0xfd, 0x03, 0xd5, 0xf2, 0x68, 0x5b, 0xca, 0x37 }; static const uint8_t nist_kas_ecc_cdh_testvector_278_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xc6, 0x67, 0x7c, 0x28, 0x06, 0x8b, 0x46, 0x2e, 0x34, 0x86, 0x2c, 0xe6, 0xc9, 0xd8, 0xad, 0x8c, 0x1b, 0x3c, 0x7e, 0xfe, 0x80, 0xcb, 0xab, 0x41, 0xda, 0x41, 0x92, 0x78, 0xe4 }; /* QIUTx = 00000042cb311dcff2482a2cece696c1eb64c69ac2aa599209a5c18763a3150a */ /* QIUTy = 000001b0329f36c135d002f08be3e3ffa9da18c5d6a70c360f4f871f12bf3f95 */ static const uint8_t nist_kas_ecc_cdh_testvector_278_out[] = { /* ZIUT */ 0x01, 0x9e, 0xa8, 0x31, 0xc5, 0x1d, 0x88, 0xa7, 0xcf, 0x75, 0x44, 0x95, 0xa1, 0xc4, 0x74, 0x08, 0x2e, 0xd4, 0x81, 0xc8, 0xeb, 0x83, 0x19, 0x0a, 0x77, 0xde, 0xfb, 0x09, 0xd4, 0x79 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_279_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x45, 0x49, 0x64, 0x86, 0x92, 0xaf, 0x95, 0xd8, 0x8e, 0x4e, 0x1d, 0x49, 0x14, 0xd8, 0xc9, 0x76, 0x9a, 0xad, 0xac, 0x5a, 0x0f, 0x75, 0x78, 0x32, 0x65, 0xf3, 0xeb, 0x96, 0x57 }; static const uint8_t nist_kas_ecc_cdh_testvector_279_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0xb0, 0x94, 0xb4, 0x80, 0x2f, 0x39, 0x76, 0x63, 0xd0, 0xe6, 0x82, 0xfa, 0xbf, 0x1c, 0x94, 0xc4, 0xe2, 0x14, 0xe4, 0x83, 0x27, 0xb9, 0x5e, 0xef, 0xcb, 0x92, 0xb7, 0x71, 0xfd }; static const uint8_t nist_kas_ecc_cdh_testvector_279_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x9c, 0x61, 0x02, 0x4b, 0x3d, 0xff, 0x21, 0x9b, 0x37, 0xf1, 0xbe, 0x67, 0x01, 0x80, 0x4a, 0xdf, 0x24, 0x74, 0x14, 0x44, 0x8d, 0xd0, 0xf0, 0xdc, 0x51, 0x29, 0x3a, 0xc9, 0x13 }; /* QIUTx = 000000124120d8409850e71e33c9e2d9c40ea32bed11d77804786e9b076892ab */ /* QIUTy = 0000006dae1ba4817296ff63073bac9ce065d4331ba1a5c899cc1c07405dae3e */ static const uint8_t nist_kas_ecc_cdh_testvector_279_out[] = { /* ZIUT */ 0x00, 0x08, 0x84, 0x25, 0xfb, 0x04, 0xc2, 0xce, 0x40, 0x8f, 0x08, 0xd8, 0x13, 0x85, 0xa3, 0x22, 0x70, 0x3a, 0x07, 0x7b, 0xf0, 0x0b, 0xa0, 0x79, 0x1e, 0x4e, 0x79, 0xb8, 0x04, 0x19 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_280_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x73, 0xc5, 0xcf, 0x4a, 0x01, 0xd0, 0x9e, 0x3b, 0x41, 0xb5, 0xe7, 0x77, 0x8c, 0x6b, 0x9b, 0xa5, 0x2d, 0xaf, 0x88, 0xfc, 0x40, 0x4f, 0x8e, 0x2f, 0xd0, 0x9d, 0xb4, 0x02, 0x7e }; static const uint8_t nist_kas_ecc_cdh_testvector_280_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x70, 0x39, 0x1e, 0xda, 0xa7, 0x6f, 0x0e, 0x39, 0x70, 0x39, 0x4c, 0xac, 0x03, 0x38, 0x06, 0x10, 0x58, 0x85, 0x8c, 0x3c, 0x73, 0xd5, 0xcb, 0x51, 0x2e, 0x53, 0x26, 0x30, 0x4f }; static const uint8_t nist_kas_ecc_cdh_testvector_280_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x6e, 0x69, 0xd0, 0x64, 0xdb, 0xd9, 0xa7, 0x94, 0xf6, 0x8e, 0x69, 0x9a, 0x0e, 0x94, 0x1b, 0xdd, 0xa6, 0xa5, 0x3a, 0x1c, 0xec, 0xa3, 0xb3, 0xdb, 0x82, 0x92, 0x5b, 0x6f, 0x8b }; /* QIUTx = 000000c57d61fcb1fee90d5d8c97cbf188c8ef8259b0ae2587ecf1ff8cd2e2fa */ /* QIUTy = 000000b8ad86c6805a4ab44513dbba2f5098b9e9c1e05b679f52937aece2b182 */ static const uint8_t nist_kas_ecc_cdh_testvector_280_out[] = { /* ZIUT */ 0x01, 0x9b, 0x5e, 0xfb, 0x23, 0xbc, 0x18, 0xa4, 0xf1, 0x8c, 0x22, 0xfe, 0x2f, 0xd5, 0xcd, 0xbd, 0x02, 0x37, 0x2c, 0xab, 0xde, 0x5e, 0x5c, 0x9f, 0x4b, 0x4f, 0x9a, 0x49, 0x43, 0x8f }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_281_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x23, 0xa6, 0xb0, 0x81, 0xa7, 0x61, 0xe8, 0x6c, 0x04, 0x2e, 0x19, 0x14, 0xaf, 0x47, 0xf0, 0x93, 0xb2, 0x65, 0x55, 0x43, 0xe5, 0x64, 0x58, 0x4b, 0x60, 0x64, 0x25, 0x39, 0xa9 }; static const uint8_t nist_kas_ecc_cdh_testvector_281_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x51, 0x8e, 0xe3, 0xc1, 0xae, 0x54, 0x64, 0x04, 0xdf, 0x1e, 0xcc, 0xd6, 0x9a, 0xa6, 0x85, 0x64, 0x31, 0xd1, 0xc8, 0x88, 0x1c, 0xf0, 0x57, 0x8c, 0xff, 0x4e, 0xb8, 0xc1, 0x1b }; static const uint8_t nist_kas_ecc_cdh_testvector_281_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x5a, 0xe5, 0xde, 0x30, 0xc7, 0xc3, 0x17, 0x18, 0x13, 0xa2, 0xdd, 0x3e, 0x3e, 0xa2, 0xc5, 0xce, 0xaa, 0x04, 0x73, 0xc3, 0x94, 0x57, 0xe9, 0x92, 0x90, 0x71, 0xe1, 0xa4, 0x20 }; /* QIUTx = 0000017cf9fca05d4a55e4b68fee7a3bd43f047303f2a266d81bb5e1ec7e2558 */ /* QIUTy = 0000003b0af43de05003397de1d4b27827ad2fcd675cbf61a445a1ec40a569b6 */ static const uint8_t nist_kas_ecc_cdh_testvector_281_out[] = { /* ZIUT */ 0x01, 0xf3, 0x6d, 0x95, 0x19, 0xc3, 0xd4, 0x7f, 0x03, 0x0e, 0xea, 0xc3, 0x33, 0x8d, 0xb5, 0x83, 0xb9, 0x6f, 0xef, 0xa5, 0x51, 0xa4, 0xb5, 0x6c, 0xc5, 0x56, 0x7f, 0x2d, 0x9d, 0x7a }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_282_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x41, 0xfb, 0xbf, 0x2b, 0x36, 0x1c, 0x2c, 0x8c, 0xe5, 0xed, 0xab, 0xfa, 0x22, 0xaa, 0x47, 0x55, 0x58, 0x1e, 0x5b, 0x1a, 0x66, 0x60, 0x03, 0x62, 0xa0, 0xee, 0x7b, 0xc5, 0x74 }; static const uint8_t nist_kas_ecc_cdh_testvector_282_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0xae, 0xa3, 0xca, 0xc2, 0x03, 0xf8, 0xc7, 0x80, 0x47, 0x5a, 0x26, 0x09, 0xb2, 0x97, 0x0c, 0xc8, 0x6f, 0x96, 0xea, 0x40, 0x11, 0xc3, 0x48, 0xda, 0x82, 0x62, 0xb3, 0x34, 0xaa }; static const uint8_t nist_kas_ecc_cdh_testvector_282_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xc6, 0x87, 0x96, 0x95, 0x5b, 0x68, 0xb5, 0xf8, 0x82, 0x7e, 0x38, 0xac, 0x07, 0x82, 0xb1, 0xac, 0x2c, 0x45, 0x52, 0xca, 0xef, 0x0c, 0x60, 0x95, 0x84, 0x67, 0xcd, 0x85, 0xc1 }; /* QIUTx = 00000034789fbc60f1086034c8f2ce86fd4aa335194c9146890357dc475699e4 */ /* QIUTy = 000001d37f796327f71ec31510468463d0b2905488a4a60267870dfee567c250 */ static const uint8_t nist_kas_ecc_cdh_testvector_282_out[] = { /* ZIUT */ 0x00, 0xe5, 0x4b, 0x1c, 0x91, 0x6f, 0xf3, 0xba, 0x1a, 0xa0, 0xb2, 0xb9, 0x9f, 0x0e, 0xbd, 0xe4, 0xf1, 0xa4, 0xcc, 0x6a, 0x10, 0xd9, 0x59, 0xbb, 0x2f, 0x7f, 0x4c, 0x77, 0x7b, 0x84 }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_283_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x96, 0xa0, 0xd3, 0xf3, 0x6e, 0x8f, 0x75, 0x37, 0x91, 0x07, 0x4c, 0xea, 0x69, 0x7b, 0x24, 0x71, 0x62, 0x7e, 0x0c, 0x9e, 0x7a, 0x29, 0x4a, 0x02, 0x9a, 0x9d, 0x3b, 0x94, 0x29 }; static const uint8_t nist_kas_ecc_cdh_testvector_283_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xb7, 0x67, 0x17, 0x4a, 0x29, 0x20, 0xb6, 0x2f, 0x1f, 0x02, 0xfa, 0x79, 0x09, 0x78, 0x45, 0xd5, 0x1d, 0x93, 0xe0, 0xc8, 0x10, 0x44, 0x10, 0x83, 0x1a, 0x2d, 0xd5, 0x5c, 0x3c }; static const uint8_t nist_kas_ecc_cdh_testvector_283_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x74, 0x24, 0x5c, 0xc9, 0x7d, 0xd4, 0x50, 0x93, 0x56, 0x89, 0xea, 0x3f, 0xca, 0x7b, 0x0b, 0x30, 0xc1, 0xd6, 0x7c, 0xe6, 0xe8, 0xbe, 0x17, 0xcb, 0x11, 0x92, 0x57, 0x5c, 0xaf }; /* QIUTx = 000001e1c570acc653c706fd7740194a554de7f3799a12b820d6a941197f761d */ /* QIUTy = 000001e2225e8d0d41c808f6ead7af320fb25fed29a99098a0f0e11cd869e53c */ static const uint8_t nist_kas_ecc_cdh_testvector_283_out[] = { /* ZIUT */ 0x00, 0xbc, 0x0d, 0xcf, 0x75, 0x85, 0x75, 0x3c, 0xc7, 0x9a, 0xa4, 0x12, 0xd2, 0x74, 0x0b, 0x4b, 0x2d, 0x1c, 0x64, 0x4f, 0xc9, 0x75, 0x5c, 0xb0, 0x55, 0x02, 0x86, 0xbc, 0xf6, 0x8e }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_284_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x66, 0xbe, 0x24, 0x26, 0xb3, 0xbf, 0x8e, 0x6d, 0x05, 0xa2, 0x4d, 0x7d, 0x1f, 0x2c, 0x0e, 0x32, 0x9e, 0x41, 0x20, 0xcf, 0xc8, 0xe6, 0xff, 0x52, 0x48, 0x6f, 0x09, 0x55, 0x86 }; static const uint8_t nist_kas_ecc_cdh_testvector_284_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x73, 0x71, 0xe2, 0x88, 0x14, 0x5f, 0xc2, 0x5a, 0x5a, 0x9c, 0xb5, 0xf2, 0xa3, 0x86, 0x03, 0x4f, 0x2f, 0x32, 0x8c, 0x6e, 0xaa, 0x24, 0xc8, 0xb0, 0x96, 0xe8, 0xab, 0x1f, 0x0c }; static const uint8_t nist_kas_ecc_cdh_testvector_284_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x97, 0xbe, 0xed, 0x4b, 0x73, 0x8a, 0x62, 0x05, 0xcc, 0x9e, 0xa0, 0x46, 0xb4, 0x48, 0xb5, 0x23, 0x12, 0x8b, 0x93, 0x10, 0x1a, 0x02, 0xd9, 0x64, 0x43, 0x5e, 0xb1, 0x78, 0x06 }; /* QIUTx = 0000018358da94079a700a10b20a2325d33d80e95eb4fc4a98101c312635939c */ /* QIUTy = 0000000c4f442d0071c7bd1d217cf235fd031dec309e85ea2014e68b50fc2ba0 */ static const uint8_t nist_kas_ecc_cdh_testvector_284_out[] = { /* ZIUT */ 0x01, 0xb7, 0xef, 0x31, 0x48, 0xbe, 0x33, 0x11, 0x15, 0x32, 0x1b, 0x1c, 0x2a, 0x68, 0x83, 0x2f, 0xdf, 0xb9, 0x91, 0xb2, 0x62, 0x24, 0xa6, 0x0d, 0xdd, 0xce, 0x3e, 0x06, 0x0d, 0x27 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_285_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x81, 0xf3, 0xbb, 0x0b, 0x09, 0x77, 0x13, 0x27, 0x7c, 0x5f, 0x3b, 0x46, 0xce, 0xf0, 0x2a, 0xa9, 0xcb, 0xe2, 0x9a, 0xb9, 0x5c, 0x76, 0xe9, 0xb6, 0x0a, 0x1f, 0x7a, 0x51, 0xe5 }; static const uint8_t nist_kas_ecc_cdh_testvector_285_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0x2e, 0x2f, 0xb6, 0x72, 0xd7, 0x2b, 0xf7, 0x8f, 0x7c, 0xfe, 0xdc, 0x40, 0xd3, 0x72, 0x6c, 0x6b, 0x4f, 0xb5, 0x85, 0x41, 0x7c, 0x74, 0x76, 0xb6, 0x55, 0xe3, 0x2b, 0xbd, 0x3b }; static const uint8_t nist_kas_ecc_cdh_testvector_285_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x75, 0x9c, 0x55, 0xda, 0x55, 0xe1, 0xfd, 0xb5, 0xba, 0x7f, 0x8b, 0x89, 0x3a, 0xba, 0xae, 0x59, 0x25, 0xb9, 0xb0, 0x81, 0x84, 0xa3, 0xd5, 0x54, 0x95, 0x7a, 0xcf, 0x3e, 0xc0 }; /* QIUTx = 0000002af25f810e18a81b69da254a65b8a6c7ab80ddc27c85622e2348add132 */ /* QIUTy = 00000128b753e4b21a8c3acf85aab92a9aa6a7b33f2cb69d7024baf8e8b07142 */ static const uint8_t nist_kas_ecc_cdh_testvector_285_out[] = { /* ZIUT */ 0x00, 0x41, 0x24, 0x98, 0x65, 0xc9, 0x13, 0xb2, 0x87, 0xa2, 0x53, 0x15, 0x0b, 0x20, 0x7e, 0x26, 0x82, 0xef, 0xd9, 0x60, 0x57, 0xcb, 0x07, 0x09, 0xe9, 0xbb, 0xb4, 0x8c, 0x0f, 0xc9 }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_286_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x65, 0xaa, 0x41, 0x15, 0xe5, 0x9e, 0x60, 0x45, 0xaa, 0xf9, 0x9e, 0xe1, 0xbe, 0xca, 0x1f, 0xab, 0x92, 0x3b, 0xbd, 0xc9, 0x19, 0x20, 0x6e, 0x09, 0x31, 0x62, 0x0b, 0xa9, 0x96 }; static const uint8_t nist_kas_ecc_cdh_testvector_286_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x28, 0xd0, 0x0b, 0x77, 0x58, 0x99, 0xa5, 0x8a, 0x59, 0xbc, 0xb2, 0xab, 0x79, 0xd6, 0x09, 0xe2, 0xdc, 0xda, 0x98, 0xe6, 0x52, 0x3b, 0xb6, 0x71, 0x68, 0x55, 0x4f, 0x84, 0xe6 }; static const uint8_t nist_kas_ecc_cdh_testvector_286_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xee, 0x63, 0x9d, 0x89, 0xf0, 0xe4, 0x33, 0xc0, 0x75, 0xe2, 0xef, 0x57, 0xcc, 0x24, 0x35, 0x81, 0xe9, 0x5b, 0x26, 0x1f, 0x8a, 0x93, 0xb8, 0xef, 0x6f, 0x5e, 0xbf, 0x80, 0x15 }; /* QIUTx = 00000006638f6bcd85043395d01d767ff77e9d677f37ef400f2e16fee86dbaf2 */ /* QIUTy = 0000006c12496266debb1d8343b9684e27c5f7129c17024a8e6704672a5f3d63 */ static const uint8_t nist_kas_ecc_cdh_testvector_286_out[] = { /* ZIUT */ 0x01, 0xcf, 0x48, 0x0f, 0xbc, 0x2b, 0xe2, 0xc2, 0xc4, 0x44, 0x8c, 0x88, 0x89, 0x09, 0x72, 0xc7, 0xff, 0x9c, 0xbe, 0x08, 0xa7, 0x5e, 0x26, 0xc3, 0x80, 0x95, 0x96, 0xb8, 0xb5, 0xc0 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_287_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x35, 0x76, 0xe7, 0x00, 0xf3, 0x63, 0x67, 0xfb, 0x74, 0x18, 0x42, 0xf2, 0x31, 0x88, 0x9f, 0x36, 0x82, 0x2a, 0xab, 0x29, 0x33, 0xc2, 0x45, 0xee, 0xd5, 0x7b, 0x9d, 0xac, 0xad }; static const uint8_t nist_kas_ecc_cdh_testvector_287_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x79, 0x10, 0xe9, 0x07, 0x1a, 0x3e, 0x42, 0xe7, 0xf2, 0x1b, 0x36, 0x3f, 0x0e, 0x68, 0x7d, 0x28, 0x98, 0x10, 0xa4, 0xec, 0x29, 0xc3, 0x6e, 0xce, 0x14, 0x85, 0x4e, 0x1d, 0xd1 }; static const uint8_t nist_kas_ecc_cdh_testvector_287_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x92, 0x9b, 0x09, 0xb6, 0x7b, 0x29, 0xaa, 0x4f, 0xf1, 0x5d, 0x67, 0x79, 0xa1, 0x73, 0x30, 0x65, 0x04, 0x9f, 0xae, 0xb2, 0xc2, 0x27, 0x01, 0x2c, 0x49, 0xf2, 0x77, 0xed, 0x51 }; /* QIUTx = 000000ca0403d95d85f0cb0ae4d2aeae18e187b79c201ed68c14ad24ed003922 */ /* QIUTy = 000000cf6b0a502b290d0aeee820661accf6ea597687c45c7f93a773d25f62a6 */ static const uint8_t nist_kas_ecc_cdh_testvector_287_out[] = { /* ZIUT */ 0x01, 0xce, 0x8a, 0xbf, 0x3c, 0x8c, 0xcf, 0xa3, 0x0e, 0x5f, 0x35, 0xdd, 0xb7, 0x5f, 0x5e, 0x10, 0x6a, 0xab, 0x1e, 0x67, 0x08, 0x61, 0x56, 0xa1, 0xed, 0xed, 0xa1, 0x71, 0x7b, 0x77 }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_288_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xe9, 0xfb, 0xa7, 0x1a, 0x64, 0xab, 0xb1, 0x77, 0xfa, 0x43, 0x6c, 0xb9, 0x73, 0x9c, 0x9f, 0x68, 0xc0, 0x15, 0x5a, 0xdc, 0x89, 0x71, 0x39, 0xc1, 0xbf, 0x3d, 0xf9, 0x9a, 0x53 }; static const uint8_t nist_kas_ecc_cdh_testvector_288_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x9a, 0xf1, 0x13, 0x1b, 0xe4, 0x7d, 0xe0, 0x88, 0x70, 0x83, 0x5d, 0xa1, 0x49, 0x46, 0xfe, 0xd7, 0x30, 0x34, 0x17, 0x9f, 0x80, 0x92, 0x98, 0xd0, 0x14, 0x9b, 0x16, 0xdd, 0x36 }; static const uint8_t nist_kas_ecc_cdh_testvector_288_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xe2, 0x7a, 0xf0, 0x4e, 0xfe, 0x2d, 0x86, 0xff, 0xed, 0x6e, 0xcd, 0xf7, 0x18, 0xfc, 0x0b, 0x8e, 0x04, 0x9e, 0xd2, 0x22, 0xe7, 0x60, 0x0c, 0x3c, 0xe3, 0x1c, 0xe4, 0xe9, 0x7a }; /* QIUTx = 00000145ec0db5fe62b92547792012268af21ba928a8fd98d0a1dee3d8fb2559 */ /* QIUTy = 0000010a031cea56b183e93093008ab705cc9099e5b65c5cb4407324b96fee90 */ static const uint8_t nist_kas_ecc_cdh_testvector_288_out[] = { /* ZIUT */ 0x00, 0x25, 0xdf, 0x75, 0x9a, 0x20, 0x31, 0x23, 0x61, 0xb9, 0xf6, 0x76, 0x7e, 0xfe, 0x8e, 0x8d, 0x69, 0x97, 0x9e, 0x34, 0x63, 0x94, 0x69, 0xa9, 0x1f, 0xed, 0x9f, 0xce, 0x04, 0xf8 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_289_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x1f, 0x99, 0x4a, 0x41, 0x6c, 0xc1, 0x99, 0x0b, 0x8c, 0x61, 0x76, 0x7a, 0x3d, 0x68, 0xfb, 0xea, 0x73, 0xaf, 0x7b, 0x48, 0xb6, 0x55, 0xe4, 0x74, 0x70, 0xfc, 0xcc, 0x79, 0x1f }; static const uint8_t nist_kas_ecc_cdh_testvector_289_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x5d, 0xe9, 0x88, 0x83, 0x5d, 0x68, 0x12, 0xf0, 0xbd, 0xd7, 0x00, 0x7a, 0x89, 0x59, 0x71, 0xe1, 0xa0, 0x6f, 0x4d, 0x22, 0xce, 0x13, 0x03, 0xc9, 0xf5, 0x5e, 0xfe, 0x64, 0x7c }; static const uint8_t nist_kas_ecc_cdh_testvector_289_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x1a, 0x72, 0x6d, 0x7b, 0x99, 0x28, 0x69, 0x1e, 0xb0, 0x14, 0x9c, 0xa8, 0xf0, 0xed, 0xee, 0x47, 0xbd, 0x0c, 0x73, 0x41, 0x13, 0xab, 0x60, 0x03, 0x24, 0x1e, 0xe1, 0x93, 0xde }; /* QIUTx = 0000007426bfa8878fe59b16a9b8c63910a1e2fbc6b07ba995ba04c31402112e */ /* QIUTy = 000000944e9616676cb2fc7fa0f9e1b87a358748243e80fb62264284645a6a4d */ static const uint8_t nist_kas_ecc_cdh_testvector_289_out[] = { /* ZIUT */ 0x00, 0x43, 0x7a, 0xb4, 0xa5, 0x37, 0x56, 0xff, 0x67, 0x8a, 0x1f, 0x58, 0x0c, 0x0f, 0xd1, 0xf3, 0x3b, 0x23, 0x02, 0x1d, 0x62, 0x06, 0x08, 0x08, 0x45, 0x3b, 0x4a, 0xab, 0xe6, 0x27 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_290_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x05, 0x13, 0x62, 0x0a, 0xee, 0x0d, 0x04, 0x78, 0x87, 0x24, 0x38, 0xe9, 0x9b, 0x23, 0xea, 0x49, 0x00, 0x15, 0x3f, 0x93, 0x66, 0xeb, 0x17, 0xd6, 0x1b, 0xdf, 0x35, 0xaa, 0x19 }; static const uint8_t nist_kas_ecc_cdh_testvector_290_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x13, 0x6d, 0xfb, 0xc8, 0x40, 0x1b, 0xbd, 0xa0, 0xd6, 0x75, 0xca, 0x06, 0xa0, 0xcf, 0xf6, 0xbd, 0xd4, 0x67, 0xc0, 0xac, 0x9a, 0x97, 0x82, 0x93, 0x30, 0x07, 0x28, 0xe7, 0xdc }; static const uint8_t nist_kas_ecc_cdh_testvector_290_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xf4, 0x59, 0xc7, 0x67, 0x21, 0x69, 0xc1, 0x25, 0x9e, 0x4e, 0x19, 0x93, 0x33, 0x96, 0x4c, 0x1f, 0xff, 0xbc, 0xe7, 0x5a, 0xd3, 0x0d, 0xde, 0x12, 0x64, 0xf5, 0xcb, 0x86, 0xd1 }; /* QIUTx = 000001b44a81895d2105fa16a6e09526c09ae7f6cbdbce210870f4e33db8b6f4 */ /* QIUTy = 000000b1e072c62a2642975f06c687c6467da295ef93f04d1c5494a624683c80 */ static const uint8_t nist_kas_ecc_cdh_testvector_290_out[] = { /* ZIUT */ 0x01, 0xeb, 0xd5, 0x58, 0x23, 0xc5, 0x7d, 0x1f, 0xc7, 0xb3, 0x6c, 0xf1, 0xed, 0x20, 0x51, 0xea, 0xd6, 0x4d, 0xb6, 0xd1, 0x14, 0x01, 0x4d, 0x34, 0x07, 0x18, 0x6f, 0x50, 0xd9, 0x57 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_291_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x35, 0xdf, 0xfe, 0xc9, 0x11, 0x7e, 0xd7, 0x16, 0x76, 0x27, 0xa2, 0x4a, 0x3e, 0xbd, 0xdd, 0x49, 0xa3, 0xf4, 0x5d, 0x91, 0xad, 0x18, 0x40, 0x1d, 0x3d, 0x44, 0x9b, 0x2f, 0xef }; static const uint8_t nist_kas_ecc_cdh_testvector_291_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x93, 0x17, 0x54, 0xce, 0x5c, 0xf5, 0x57, 0xa1, 0xc1, 0xac, 0xed, 0xfe, 0x5e, 0x9a, 0x7b, 0x0b, 0x91, 0xf8, 0x16, 0x43, 0xda, 0x85, 0x86, 0xa6, 0x86, 0x58, 0x85, 0xf0, 0x42 }; static const uint8_t nist_kas_ecc_cdh_testvector_291_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x65, 0x6a, 0x47, 0xb8, 0x77, 0x2b, 0x08, 0xb1, 0xd9, 0x07, 0xc8, 0x23, 0xfb, 0x6c, 0x45, 0xc6, 0x5f, 0x9f, 0x18, 0xf8, 0xb4, 0x3f, 0x3a, 0x61, 0xe6, 0xc7, 0x46, 0x11, 0xe1 }; /* QIUTx = 00000153cdbad92eb8d20da0c1c7aad46d08336cbc976e8d6f83947e4f4d6616 */ /* QIUTy = 000001c977b97a5e1205ca66545df3a526b6e325e087c0e070839fe7ec1ee788 */ static const uint8_t nist_kas_ecc_cdh_testvector_291_out[] = { /* ZIUT */ 0x00, 0x6d, 0x07, 0xf6, 0xe0, 0x8b, 0x11, 0xa0, 0x60, 0xcc, 0xec, 0x43, 0xb0, 0x7c, 0xa7, 0xd9, 0xea, 0xf6, 0xc3, 0xec, 0xe0, 0x6f, 0x47, 0x85, 0x51, 0x92, 0x84, 0xbf, 0x6f, 0x0a }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_292_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x48, 0x45, 0xce, 0x66, 0x1b, 0x1e, 0xae, 0x34, 0xc1, 0x69, 0x9f, 0x1b, 0xfe, 0x38, 0xdc, 0x87, 0xef, 0x28, 0xb8, 0xb0, 0xa7, 0x77, 0x1f, 0xf3, 0x66, 0xdc, 0x21, 0xd8, 0x63 }; static const uint8_t nist_kas_ecc_cdh_testvector_292_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x09, 0x6b, 0x19, 0x54, 0xb0, 0x6e, 0xaa, 0x70, 0x73, 0xed, 0x93, 0x98, 0x01, 0xaa, 0x29, 0x74, 0xda, 0x1d, 0x60, 0xd6, 0x6e, 0x97, 0xc3, 0x1d, 0xf0, 0xf6, 0x87, 0x6f, 0xaf }; static const uint8_t nist_kas_ecc_cdh_testvector_292_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xf1, 0x4f, 0x5e, 0xc4, 0xef, 0xaf, 0x86, 0xe4, 0x3f, 0xec, 0xe6, 0x5f, 0x17, 0xff, 0x91, 0xb1, 0xa8, 0xd6, 0x1b, 0xe3, 0x41, 0x6e, 0xee, 0xb8, 0x84, 0xf4, 0xe2, 0xd1, 0x4e }; /* QIUTx = 000001d9f8c01e9c20f6150ec7620a75e39e96f9247bece137b0365bec54254c */ /* QIUTy = 0000006008373b9e087805294dadae00894667fdb9f6b8a4d16295e5b9d21a6d */ static const uint8_t nist_kas_ecc_cdh_testvector_292_out[] = { /* ZIUT */ 0x00, 0xae, 0xa5, 0x94, 0xf0, 0x92, 0xb4, 0x05, 0x2f, 0x75, 0x64, 0xb2, 0xe5, 0x65, 0x1b, 0xcf, 0x43, 0xef, 0x7e, 0x33, 0x6a, 0x06, 0x4d, 0x6b, 0xfb, 0x1a, 0x89, 0xcf, 0x5e, 0x51 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_293_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x47, 0x34, 0x19, 0x21, 0x65, 0xc9, 0x6f, 0xbd, 0xb7, 0x94, 0xca, 0xb1, 0xe2, 0xd1, 0xef, 0x11, 0x1e, 0x1a, 0x20, 0xa7, 0x20, 0x5d, 0xb0, 0x1a, 0xa8, 0x03, 0xa0, 0x32, 0xa2 }; static const uint8_t nist_kas_ecc_cdh_testvector_293_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0xec, 0xdf, 0xc3, 0x94, 0x0b, 0x7d, 0x06, 0x18, 0xcd, 0x63, 0x15, 0x44, 0x17, 0x51, 0xf6, 0x63, 0xdf, 0x74, 0xd3, 0x56, 0x49, 0x2e, 0xf9, 0x34, 0xb4, 0xba, 0x2b, 0x2a, 0xd1 }; static const uint8_t nist_kas_ecc_cdh_testvector_293_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x1f, 0xa5, 0xcb, 0xd8, 0x8a, 0x14, 0x6f, 0x6c, 0xcf, 0x5f, 0x79, 0xdf, 0xbc, 0x70, 0x86, 0x8f, 0xd9, 0xbb, 0x4c, 0x81, 0x15, 0x97, 0x6c, 0x96, 0x27, 0x0f, 0xf7, 0xbc, 0x5e }; /* QIUTx = 0000014d276f4281cb50a26b29ec81fced96d0e909994b2285433855256d58db */ /* QIUTy = 000000ac4792af62a0dc4fd4eec384fbf3fbb82c8347486bc1eb1338bc7f3ab0 */ static const uint8_t nist_kas_ecc_cdh_testvector_293_out[] = { /* ZIUT */ 0x00, 0x99, 0xd6, 0xd0, 0x76, 0xe1, 0x4c, 0xcf, 0xee, 0x15, 0xed, 0x7e, 0x7e, 0xf3, 0x84, 0xbf, 0xee, 0x12, 0xde, 0xba, 0x8c, 0x9a, 0xe8, 0xf6, 0xcc, 0xa3, 0x48, 0x6a, 0x14, 0x94 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_294_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x7e, 0x1f, 0x32, 0x51, 0xe2, 0xa0, 0xaa, 0x6d, 0xe1, 0xf8, 0xdf, 0x86, 0xb8, 0x5e, 0xd9, 0xd1, 0x1d, 0xa5, 0xeb, 0x71, 0x36, 0xad, 0xd4, 0x5e, 0xa7, 0xd2, 0x5c, 0x86, 0x7c }; static const uint8_t nist_kas_ecc_cdh_testvector_294_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xd9, 0x62, 0x81, 0xe0, 0x75, 0x6d, 0xe9, 0xda, 0xa5, 0x5d, 0x2e, 0xf6, 0x57, 0x3b, 0xb2, 0xfe, 0x2d, 0xd0, 0x9b, 0x71, 0xd9, 0x11, 0x91, 0xa5, 0xa0, 0x43, 0xba, 0xe0, 0xf3 }; static const uint8_t nist_kas_ecc_cdh_testvector_294_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xf5, 0x86, 0x84, 0xea, 0x14, 0xa6, 0x8f, 0xef, 0xb8, 0xcc, 0x26, 0xb2, 0x67, 0xa1, 0x34, 0x19, 0xc6, 0x2d, 0x72, 0x61, 0xba, 0xd1, 0x4e, 0x53, 0x68, 0xa9, 0x81, 0x9a, 0x18 }; /* QIUTx = 0000009a65a85394070fe0e5a108164eb289cc3d77ed0848fd57f384e62caa20 */ /* QIUTy = 000000e7f56f2c27be4faeb20e274c2604c6dc2d88597030ad2164fad03cb904 */ static const uint8_t nist_kas_ecc_cdh_testvector_294_out[] = { /* ZIUT */ 0x01, 0xb1, 0xe9, 0x77, 0xc4, 0x3a, 0xfd, 0x20, 0x31, 0x32, 0xc0, 0x85, 0xb9, 0x5d, 0xb0, 0xe2, 0x04, 0x6a, 0x4b, 0x6a, 0xc2, 0xc0, 0x46, 0xee, 0x9a, 0xd6, 0x65, 0x05, 0x05, 0x78 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_295_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xbe, 0x1e, 0xe7, 0x50, 0xf2, 0x71, 0x2b, 0x2a, 0xcb, 0x20, 0xc4, 0x5e, 0x97, 0x35, 0x7c, 0x50, 0xdb, 0x3b, 0xe8, 0x95, 0xb3, 0x3f, 0x83, 0x0c, 0x71, 0xbc, 0x9f, 0x4f, 0x3d }; static const uint8_t nist_kas_ecc_cdh_testvector_295_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x5f, 0xec, 0x81, 0x0c, 0xdb, 0x17, 0x9f, 0xcd, 0x1c, 0xe8, 0xe4, 0xdc, 0x1a, 0x24, 0x99, 0xe4, 0x0d, 0xe8, 0xa4, 0xa4, 0x9a, 0x94, 0x20, 0xf0, 0x0e, 0x56, 0x11, 0x0c, 0xf4 }; static const uint8_t nist_kas_ecc_cdh_testvector_295_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xee, 0xfb, 0x24, 0x78, 0x9b, 0x32, 0xb4, 0x36, 0xce, 0x39, 0x62, 0x2c, 0x11, 0x4c, 0x39, 0xa6, 0xcd, 0x1e, 0x58, 0xec, 0x94, 0x43, 0xc8, 0x87, 0x0e, 0x5e, 0xe2, 0xf8, 0x01 }; /* QIUTx = 0000013fb1ca9ed709bb386fba02cc7862fd6c64e1087be5f61ea733946c1634 */ /* QIUTy = 000001cb4097e44a730700debfe8143fbf9bca3a3d6c46985a27cd5043b2ca5a */ static const uint8_t nist_kas_ecc_cdh_testvector_295_out[] = { /* ZIUT */ 0x00, 0x0e, 0x4c, 0xb7, 0x04, 0x35, 0x5c, 0xba, 0x1b, 0x40, 0xce, 0xe3, 0xda, 0x10, 0x2c, 0xb0, 0x48, 0x51, 0x9a, 0x91, 0xb4, 0xc7, 0x89, 0xb3, 0x75, 0x7c, 0xfd, 0xd9, 0x33, 0xaa }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_296_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x5c, 0x2e, 0x2c, 0xe0, 0xbc, 0x72, 0x2c, 0xea, 0x4c, 0xbc, 0x7c, 0x33, 0x52, 0xcb, 0xe0, 0xd2, 0x8b, 0x5b, 0x00, 0x2e, 0x44, 0xd9, 0x37, 0x05, 0x89, 0x5d, 0x79, 0x1a, 0xfc }; static const uint8_t nist_kas_ecc_cdh_testvector_296_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x4f, 0x61, 0x69, 0x83, 0xad, 0x08, 0xe7, 0x45, 0x31, 0x5c, 0x47, 0x67, 0xb0, 0xae, 0x21, 0xa6, 0xfd, 0x8a, 0x62, 0x9c, 0x25, 0x8c, 0xe7, 0xae, 0xfa, 0x4c, 0x17, 0xa8, 0xe0 }; static const uint8_t nist_kas_ecc_cdh_testvector_296_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x17, 0x52, 0x4d, 0x50, 0x66, 0x16, 0xbd, 0x20, 0x5c, 0xb3, 0x97, 0x8b, 0xc7, 0x5e, 0x3a, 0x34, 0x76, 0x23, 0x3e, 0x49, 0xb6, 0xdc, 0x20, 0x6f, 0x97, 0x11, 0x69, 0x75, 0x57 }; /* QIUTx = 00000150a17327845e7bc79d8ece12930dc2b77654caa1082b57b0cf8e05b1ac */ /* QIUTy = 000000151c76822d8df5effd8c6943395b6a8d538431d42e846e9ff8de7eaee6 */ static const uint8_t nist_kas_ecc_cdh_testvector_296_out[] = { /* ZIUT */ 0x00, 0xd8, 0xc1, 0x3b, 0xc5, 0xe8, 0x19, 0xc6, 0x10, 0x1d, 0xae, 0xf3, 0xf6, 0xfb, 0x5b, 0xe6, 0xbc, 0xce, 0xcf, 0x23, 0x3c, 0x4b, 0x7f, 0xc6, 0x50, 0x54, 0xe8, 0xe8, 0xd3, 0xbc }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_297_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0xba, 0xfa, 0x9b, 0xba, 0x92, 0x72, 0x5e, 0xef, 0x0c, 0x4a, 0x0a, 0xfc, 0xbd, 0x42, 0x63, 0xe5, 0x5f, 0x51, 0x55, 0x64, 0x5b, 0x5c, 0x58, 0xa9, 0x6b, 0xc3, 0xe9, 0xe9, 0x65 }; static const uint8_t nist_kas_ecc_cdh_testvector_297_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xd1, 0xb3, 0xd0, 0xe3, 0x5d, 0x61, 0x7e, 0x09, 0xe0, 0x78, 0xc5, 0x71, 0xa5, 0xf4, 0x1e, 0xa2, 0x2d, 0xfd, 0x11, 0x2d, 0x67, 0xa9, 0x4d, 0x8d, 0xfb, 0xba, 0x66, 0xe9, 0xa9 }; static const uint8_t nist_kas_ecc_cdh_testvector_297_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0xa6, 0xb0, 0x5d, 0x30, 0xa7, 0x03, 0xf1, 0x17, 0x9a, 0x80, 0xf8, 0xa8, 0x64, 0xb3, 0x4c, 0xa1, 0x5c, 0x45, 0x3e, 0x82, 0x80, 0x8a, 0x10, 0x95, 0xe4, 0x35, 0xe9, 0xba, 0xcb }; /* QIUTx = 00000093b3252251fd9d6d9c81d78cf1f134cdd554d63c2a1e2f1afa14e2d4e4 */ /* QIUTy = 0000008aeb0a8ab3ff5e4fb023f7e1917f0108890af11abca7da027fadacc3b4 */ static const uint8_t nist_kas_ecc_cdh_testvector_297_out[] = { /* ZIUT */ 0x01, 0x29, 0xaf, 0x50, 0xfa, 0x08, 0x51, 0x33, 0x77, 0x17, 0x53, 0xf2, 0x97, 0xa3, 0x13, 0xbb, 0xa0, 0xd2, 0xf5, 0x88, 0x2e, 0x76, 0x34, 0xb7, 0xef, 0x5a, 0xdc, 0xe7, 0x60, 0xff }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_298_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x79, 0x8b, 0xf5, 0xab, 0x76, 0x1b, 0xb6, 0xac, 0xfe, 0xd0, 0xce, 0xf1, 0xcd, 0x71, 0xb3, 0xef, 0x46, 0xf2, 0x50, 0x43, 0x23, 0xca, 0xfc, 0x40, 0x81, 0x59, 0x2d, 0xd6, 0xf6 }; static const uint8_t nist_kas_ecc_cdh_testvector_298_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x62, 0x77, 0xae, 0xb3, 0xe1, 0xca, 0xc0, 0x12, 0x1b, 0x07, 0xd9, 0x37, 0x8a, 0x3a, 0x0c, 0xbc, 0x65, 0x67, 0xb4, 0x84, 0x23, 0x92, 0x9e, 0x36, 0xdc, 0x85, 0x5e, 0x9d, 0x1a }; static const uint8_t nist_kas_ecc_cdh_testvector_298_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x16, 0x8d, 0x09, 0x80, 0x9e, 0xb9, 0xf6, 0xac, 0xf3, 0x11, 0x34, 0xeb, 0x5e, 0xb1, 0xaf, 0x96, 0x6e, 0x21, 0x2b, 0x9b, 0x6b, 0xe6, 0x8c, 0xfd, 0x22, 0x40, 0x14, 0x25, 0xe9 }; /* QIUTx = 000001710a05f02b5505729516b1ac73d45f3cf08f1c5134d2f73d12570243c9 */ /* QIUTy = 0000018611b10dab507583f2be10fd4296f537d4af09576f96979f1eadfe291c */ static const uint8_t nist_kas_ecc_cdh_testvector_298_out[] = { /* ZIUT */ 0x00, 0x77, 0xc4, 0xea, 0x10, 0x95, 0xfa, 0xdc, 0x4c, 0xb4, 0x19, 0x0a, 0x3f, 0xd5, 0x30, 0xc7, 0xd1, 0x53, 0x25, 0xe5, 0xd7, 0x9b, 0x8e, 0x8a, 0x2b, 0x70, 0x8e, 0x23, 0x44, 0xcf }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_299_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x01, 0x5f, 0x72, 0x3d, 0xa9, 0xa3, 0x8c, 0x2d, 0xa5, 0x06, 0x2c, 0x17, 0xd0, 0xb8, 0x37, 0x52, 0x2f, 0x7c, 0x69, 0xc7, 0x93, 0xf7, 0x9c, 0x17, 0xfb, 0x69, 0x65, 0xd4, 0x4a, 0x03 }; static const uint8_t nist_kas_ecc_cdh_testvector_299_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x01, 0x32, 0xb1, 0x77, 0x60, 0xac, 0x2e, 0x2b, 0xb9, 0xf8, 0x13, 0xed, 0x77, 0x90, 0xc5, 0xcd, 0x3a, 0xa0, 0xd3, 0x8a, 0xb6, 0x4e, 0x2e, 0x27, 0x2d, 0xdf, 0x4a, 0x4c, 0x2c, 0x1a }; static const uint8_t nist_kas_ecc_cdh_testvector_299_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x38, 0x24, 0xf7, 0x1e, 0xc3, 0x25, 0x5b, 0xbd, 0x03, 0x64, 0x2d, 0x78, 0x2c, 0xc6, 0x79, 0x4e, 0x1e, 0x54, 0xaa, 0x8f, 0xa5, 0xf2, 0xa3, 0x31, 0xee, 0x13, 0xf7, 0x84, 0x50 }; /* QIUTx = 000001a4e35a8c32717f2aaa3eeef177848e580e0fed6c8096868f6acc4e1c09 */ /* QIUTy = 0000013727604e81d3a9d93d243fe79e2db8a442334a8ea1852b9f83cae1bc3e */ static const uint8_t nist_kas_ecc_cdh_testvector_299_out[] = { /* ZIUT */ 0x00, 0xd9, 0xeb, 0x3c, 0x79, 0xcf, 0x44, 0x25, 0x95, 0xda, 0xd0, 0x3e, 0xd4, 0xa3, 0x8d, 0xaf, 0x35, 0x8b, 0x97, 0xd5, 0xdf, 0xc0, 0x1c, 0xb6, 0x1f, 0xf2, 0x00, 0xa4, 0x79, 0x58 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_300_public_x[] = { /* QCAVSx */ 0x00, 0x00, 0x00, 0x51, 0xb7, 0x0b, 0xb8, 0xb8, 0xe2, 0x34, 0x1b, 0x86, 0x82, 0x1d, 0x54, 0xb9, 0x74, 0xb6, 0x96, 0xbd, 0xa4, 0x43, 0xac, 0xb7, 0xea, 0x65, 0x96, 0x5d, 0x27, 0xd2, 0xac, 0x70 }; static const uint8_t nist_kas_ecc_cdh_testvector_300_public_y[] = { /* QCAVSy */ 0x00, 0x00, 0x00, 0xc7, 0x78, 0x4e, 0xef, 0x88, 0x9c, 0x47, 0x1c, 0x9d, 0x26, 0xb3, 0xe0, 0xde, 0x24, 0xad, 0x2b, 0x4b, 0xf8, 0xbb, 0xba, 0x6f, 0xe1, 0x8f, 0x51, 0xa4, 0x12, 0x18, 0x80, 0x58 }; static const uint8_t nist_kas_ecc_cdh_testvector_300_private[] = { /* dIUT */ 0x00, 0x00, 0x00, 0x90, 0xad, 0xc0, 0xb2, 0x07, 0xda, 0xe3, 0x81, 0x62, 0x2c, 0xf9, 0x2e, 0x04, 0xbc, 0xe7, 0x47, 0x91, 0x80, 0xec, 0x6e, 0x17, 0x71, 0x66, 0x2f, 0x5c, 0x31, 0x79, 0xbd, 0x99 }; /* QIUTx = 00000106adbf9bbfdb3083598a7f6db2e91d2e7c174f705fc216631b7d05edf2 */ /* QIUTy = 00000190d84ca6f4695fdbca40d26a74998a05c3d761dbf08981b645c0ea239e */ static const uint8_t nist_kas_ecc_cdh_testvector_300_out[] = { /* ZIUT */ 0x01, 0x24, 0xc1, 0x9c, 0xff, 0xc0, 0xb9, 0x54, 0x9b, 0xfa, 0x37, 0x8a, 0x54, 0x8e, 0x8c, 0xe1, 0x1e, 0xe7, 0xfc, 0xa2, 0x8d, 0x2d, 0x89, 0x8d, 0xe4, 0x9a, 0xe1, 0xf2, 0xff, 0x61 }; /* [B-283] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_301_public_x[] = { /* QCAVSx */ 0x02, 0x50, 0x4e, 0x1a, 0x17, 0x81, 0x9d, 0x39, 0xf0, 0x10, 0xa4, 0xa6, 0x9a, 0x05, 0x68, 0x29, 0x94, 0x02, 0xb5, 0x8f, 0x94, 0x4a, 0x38, 0x4c, 0x7d, 0x1a, 0x62, 0xc9, 0xc9, 0x3e, 0xa4, 0xd1, 0xff, 0x30, 0x0e, 0x13 }; static const uint8_t nist_kas_ecc_cdh_testvector_301_public_y[] = { /* QCAVSy */ 0x02, 0x65, 0x13, 0x2f, 0x7b, 0x4c, 0x64, 0xb7, 0x4b, 0x91, 0x79, 0xed, 0x0f, 0x2e, 0x21, 0x1f, 0x43, 0x28, 0xd6, 0x25, 0x40, 0x50, 0x22, 0xf5, 0x54, 0x17, 0x0d, 0xa9, 0x32, 0xb8, 0x0f, 0xdf, 0x7c, 0x1a, 0xab, 0x12 }; static const uint8_t nist_kas_ecc_cdh_testvector_301_private[] = { /* dIUT */ 0x02, 0xf4, 0x34, 0x55, 0x84, 0x22, 0x46, 0xa2, 0xcc, 0x8e, 0xc0, 0x68, 0xe9, 0xd6, 0xc6, 0xe4, 0x16, 0x0f, 0x6b, 0xa4, 0xe3, 0xb5, 0xd8, 0x31, 0xd9, 0x3c, 0x1d, 0xaa, 0x8f, 0xd3, 0xd5, 0xa9, 0x66, 0x0c, 0x7b, 0xb1 }; /* QIUTx = 0561e495563018169804d4c8e2435b4afd85da376d914b69d39246f8e06113aa32e642d2 */ /* QIUTy = 0781a7f59de7f42f5f9d6c3481f33fc5deb357c6ecf4c758e370d2435de3d8ee737703f4 */ static const uint8_t nist_kas_ecc_cdh_testvector_301_out[] = { /* ZIUT */ 0x06, 0x51, 0x94, 0xe2, 0x60, 0x90, 0xe7, 0x40, 0x47, 0xee, 0x75, 0xf1, 0x3f, 0x97, 0x69, 0xd2, 0x0e, 0x1b, 0x52, 0x18, 0x96, 0x50, 0x01, 0x1e, 0x28, 0x3d, 0xaa, 0x09, 0x07, 0x32, 0xcc, 0x53, 0x75, 0x5d, 0xc3, 0x66 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_302_public_x[] = { /* QCAVSx */ 0x01, 0x62, 0x3a, 0x96, 0x75, 0xe8, 0xc4, 0x03, 0x66, 0xe2, 0x61, 0x31, 0xe4, 0x7b, 0x1a, 0xf0, 0x6c, 0x8b, 0x33, 0xac, 0xf5, 0xe9, 0x2f, 0x54, 0x64, 0x48, 0x16, 0xdc, 0xb8, 0x44, 0x38, 0x2c, 0x94, 0x4c, 0xc2, 0x1f }; static const uint8_t nist_kas_ecc_cdh_testvector_302_public_y[] = { /* QCAVSy */ 0x02, 0x9d, 0x28, 0x0f, 0x4d, 0x4c, 0x0c, 0x5f, 0xd7, 0x0f, 0x7e, 0x24, 0x09, 0x59, 0x50, 0x12, 0x8b, 0xea, 0x3c, 0xae, 0x3c, 0xa4, 0x6f, 0x6a, 0x5f, 0x70, 0xb7, 0x39, 0xfe, 0x1a, 0x99, 0x02, 0x68, 0x80, 0x4e, 0x38 }; static const uint8_t nist_kas_ecc_cdh_testvector_302_private[] = { /* dIUT */ 0x02, 0xb9, 0x41, 0xe6, 0x92, 0xe0, 0xa9, 0x84, 0xc5, 0xff, 0xa8, 0x83, 0xc9, 0xf9, 0xf8, 0x25, 0x6a, 0x43, 0xab, 0x1f, 0xd1, 0xad, 0x97, 0x82, 0xa4, 0x2e, 0x42, 0x9a, 0x94, 0xe9, 0x10, 0xe4, 0x82, 0xb9, 0x1c, 0x23 }; /* QIUTx = 07b90af116b737d9008e4c18f6ad539d29ee1790008a1daf2e856fa672eca4aafc96ca63 */ /* QIUTy = 06aaf78d0f20657b77b97cca30eab79b679a3aaa90b10907f979cde988ce718491010c2a */ static const uint8_t nist_kas_ecc_cdh_testvector_302_out[] = { /* ZIUT */ 0x07, 0x5c, 0x53, 0x5c, 0xc7, 0x0d, 0xe1, 0x9c, 0x92, 0xd7, 0x31, 0x4a, 0xfa, 0x2f, 0x33, 0x20, 0x09, 0x03, 0x43, 0x1f, 0x69, 0x90, 0xad, 0x40, 0xac, 0x31, 0xda, 0xda, 0xf4, 0xe4, 0x92, 0xa7, 0x99, 0xb7, 0x5b, 0x05 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_303_public_x[] = { /* QCAVSx */ 0x07, 0xb8, 0x36, 0x97, 0x28, 0x43, 0x2f, 0x75, 0x28, 0xd3, 0xee, 0xc8, 0xa6, 0x78, 0x8e, 0x69, 0xcd, 0x2e, 0xb8, 0x81, 0x62, 0xc4, 0x75, 0x12, 0x74, 0x2e, 0xe0, 0xf0, 0x27, 0xcc, 0xb4, 0x15, 0x7a, 0x28, 0xa2, 0x23 }; static const uint8_t nist_kas_ecc_cdh_testvector_303_public_y[] = { /* QCAVSy */ 0x05, 0x98, 0x6e, 0xb7, 0xf1, 0x09, 0xaa, 0x1f, 0x85, 0x56, 0xeb, 0xa2, 0xbd, 0xc8, 0x8e, 0x49, 0x13, 0xb6, 0x5e, 0xff, 0xb9, 0x44, 0xea, 0xe6, 0x39, 0x63, 0x6c, 0xba, 0x7e, 0x01, 0xdc, 0x37, 0x18, 0xbc, 0xb3, 0x61 }; static const uint8_t nist_kas_ecc_cdh_testvector_303_private[] = { /* dIUT */ 0x02, 0x87, 0xde, 0x17, 0x2b, 0xa5, 0x0f, 0x32, 0x7b, 0xfc, 0x7d, 0x5a, 0x8c, 0x01, 0x56, 0xd2, 0x5a, 0x1f, 0x0b, 0x9f, 0x71, 0xd3, 0x89, 0x85, 0x2f, 0x2e, 0x3b, 0x58, 0x74, 0x06, 0xcb, 0x74, 0xef, 0x3b, 0xd0, 0x41 }; /* QIUTx = 00a03490765fc90c23553c0e2b79dfa232b51a73f21554e5eb18da4c994d925f8ed2bbef */ /* QIUTy = 0304ffd41c5b0ab2a70b82188e8f1578d6ab7d3ce3ce34fa45dcc32207f163e91c5d6814 */ static const uint8_t nist_kas_ecc_cdh_testvector_303_out[] = { /* ZIUT */ 0x02, 0x95, 0x6f, 0x63, 0xd4, 0x8a, 0x49, 0xa3, 0x30, 0xe2, 0x06, 0x89, 0x55, 0xcc, 0x28, 0x86, 0xdb, 0xfd, 0x5b, 0xf7, 0x2a, 0x81, 0xb1, 0x0e, 0xd8, 0x3f, 0x2d, 0x75, 0x8d, 0xd3, 0x15, 0xec, 0xa1, 0x72, 0x92, 0x7d }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_304_public_x[] = { /* QCAVSx */ 0x07, 0x3b, 0x09, 0x2a, 0x2a, 0x4d, 0x7c, 0x9a, 0x17, 0xbb, 0x88, 0xe7, 0x5b, 0x40, 0xa9, 0xe4, 0xe4, 0x3b, 0x99, 0x81, 0x3c, 0xf6, 0x16, 0x82, 0xd4, 0x9b, 0x92, 0x90, 0x5c, 0x2d, 0xd6, 0x06, 0x79, 0x0a, 0xed, 0x39 }; static const uint8_t nist_kas_ecc_cdh_testvector_304_public_y[] = { /* QCAVSy */ 0x05, 0x66, 0xad, 0x45, 0x2a, 0x2d, 0x8e, 0xf0, 0xa3, 0x27, 0xce, 0x8e, 0x28, 0x56, 0x14, 0x6f, 0xec, 0xaf, 0x09, 0xe4, 0x43, 0x1c, 0xcc, 0x04, 0x25, 0x6a, 0x07, 0x7f, 0x60, 0x70, 0x1c, 0xe4, 0x47, 0x6b, 0x6d, 0xac }; static const uint8_t nist_kas_ecc_cdh_testvector_304_private[] = { /* dIUT */ 0x01, 0x53, 0xbb, 0xb8, 0xa3, 0xce, 0x4a, 0x1b, 0x99, 0x96, 0x0f, 0x56, 0x18, 0x6a, 0xb5, 0x02, 0x07, 0xf5, 0x88, 0xf3, 0x0c, 0x94, 0xbe, 0xef, 0x28, 0x40, 0x84, 0x23, 0xba, 0x44, 0xfc, 0x87, 0x5f, 0xaf, 0x38, 0xd8 }; /* QIUTx = 04f2c2454899623af13b65820aba145738407f77186abafa52d24b35bfdf5808ffeae076 */ /* QIUTy = 0111f448460ad2430aaec788de291548475a1e5836dac520d8e493c9f601275e70ea29d2 */ static const uint8_t nist_kas_ecc_cdh_testvector_304_out[] = { /* ZIUT */ 0x06, 0x8a, 0x3f, 0x69, 0x38, 0xc4, 0x4b, 0x79, 0x75, 0x24, 0x37, 0x75, 0x08, 0x58, 0x58, 0x42, 0xc6, 0xa7, 0xf1, 0xaf, 0x5f, 0xfe, 0x91, 0x31, 0xdd, 0x3f, 0xf7, 0x86, 0xae, 0x56, 0xe1, 0x73, 0x93, 0x45, 0xd3, 0xd7 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_305_public_x[] = { /* QCAVSx */ 0x04, 0x55, 0xe8, 0x7b, 0xc2, 0x30, 0xce, 0x7f, 0xc5, 0x86, 0x31, 0x2d, 0xd2, 0x07, 0xc5, 0x29, 0xe4, 0x7e, 0x3c, 0x74, 0xcc, 0x0c, 0xe5, 0xd0, 0x73, 0xfb, 0xf4, 0xb1, 0xc9, 0x57, 0xf8, 0xcb, 0xbd, 0x91, 0x13, 0xbc }; static const uint8_t nist_kas_ecc_cdh_testvector_305_public_y[] = { /* QCAVSy */ 0x02, 0x1f, 0xfb, 0xf6, 0x2f, 0xb2, 0x53, 0x1d, 0xb3, 0x9e, 0xf2, 0xd0, 0xbd, 0xce, 0x0d, 0x9c, 0x14, 0x1c, 0x92, 0xe9, 0xcd, 0xca, 0x62, 0x7c, 0xaa, 0x39, 0xb5, 0x93, 0xfc, 0x4a, 0x02, 0x10, 0xe8, 0xee, 0x48, 0x1f }; static const uint8_t nist_kas_ecc_cdh_testvector_305_private[] = { /* dIUT */ 0x03, 0x2a, 0xc0, 0xdc, 0xb9, 0xaa, 0x39, 0x72, 0x40, 0x1f, 0x9f, 0x58, 0x84, 0x5e, 0xd7, 0x65, 0xda, 0x36, 0xb7, 0xd6, 0xf7, 0x73, 0x55, 0x77, 0x9b, 0xfb, 0x24, 0x39, 0x82, 0x7f, 0xf3, 0x55, 0x6a, 0x75, 0x78, 0x1c }; /* QIUTx = 07159c86b9c6adb2160c28d86118f84564a90c149ede28329463677a4c87729f897c2f98 */ /* QIUTy = 008a78167e1690625992b0efc2e0ef6f6d61e81837c8ecdfdab51d15340e37e7d8d05120 */ static const uint8_t nist_kas_ecc_cdh_testvector_305_out[] = { /* ZIUT */ 0x01, 0x9b, 0x48, 0xd5, 0xee, 0xae, 0xb0, 0x5b, 0x58, 0x80, 0x1a, 0xe8, 0xf3, 0x45, 0xad, 0x9b, 0xac, 0xb9, 0x1d, 0xaa, 0xc8, 0x85, 0xe5, 0x06, 0x94, 0x9b, 0x84, 0x9e, 0xbc, 0x67, 0xbc, 0xbf, 0xa3, 0x08, 0xaa, 0xb7 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_306_public_x[] = { /* QCAVSx */ 0x06, 0x52, 0xcc, 0xc8, 0x92, 0x1f, 0x43, 0x9a, 0xf4, 0x2a, 0x23, 0x01, 0x23, 0x6b, 0x58, 0x43, 0xa4, 0x2f, 0x1f, 0xd9, 0x9e, 0xcf, 0xe1, 0xb4, 0x13, 0x4c, 0x3d, 0xe0, 0x14, 0xcd, 0xc7, 0x60, 0x35, 0x34, 0x7c, 0xc0 }; static const uint8_t nist_kas_ecc_cdh_testvector_306_public_y[] = { /* QCAVSy */ 0x03, 0x34, 0x1d, 0x80, 0x74, 0x9f, 0x1a, 0x5e, 0xc9, 0xf7, 0xac, 0x62, 0x52, 0x38, 0x4f, 0xef, 0xd3, 0x8b, 0x6f, 0x2b, 0xbc, 0xdc, 0x18, 0xfe, 0xbe, 0x86, 0xc1, 0x60, 0xf5, 0xe7, 0x8c, 0x00, 0x3f, 0x06, 0x6e, 0x06 }; static const uint8_t nist_kas_ecc_cdh_testvector_306_private[] = { /* dIUT */ 0x02, 0x68, 0x9b, 0xf2, 0x14, 0x75, 0xd3, 0x2f, 0xe7, 0x1a, 0x73, 0x55, 0xef, 0xd9, 0xa7, 0x78, 0x7c, 0xaa, 0x95, 0x45, 0xeb, 0xeb, 0x85, 0x3e, 0x51, 0x84, 0xce, 0x42, 0x15, 0x24, 0x29, 0x05, 0x1f, 0x40, 0xcb, 0xc4 }; /* QIUTx = 00d7e5bcfac578fcd728180645176d7e088b68d330a209f18b968662fed16342b3921a20 */ /* QIUTy = 06f750b3b5e98e0099b695965aa1d16475d1074f9231127ed703e2696d4b56afdebbceaa */ static const uint8_t nist_kas_ecc_cdh_testvector_306_out[] = { /* ZIUT */ 0x06, 0x1b, 0x3b, 0xef, 0x17, 0x66, 0x46, 0x0f, 0x62, 0x96, 0xed, 0x47, 0xd3, 0x9e, 0xbf, 0x5a, 0x71, 0x0d, 0x20, 0x2d, 0x2b, 0x7e, 0x7c, 0xac, 0x0f, 0x0d, 0x3b, 0x23, 0x54, 0x05, 0xee, 0xce, 0x99, 0xaa, 0x30, 0xd7 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_307_public_x[] = { /* QCAVSx */ 0x06, 0x23, 0x31, 0xb9, 0x33, 0xaf, 0xb4, 0x38, 0x4f, 0xa3, 0xa4, 0xd2, 0x24, 0x55, 0x1a, 0xe8, 0x12, 0x0b, 0xc5, 0x5f, 0xc7, 0xea, 0x73, 0xf2, 0xbe, 0x74, 0x9e, 0x21, 0x7a, 0xfc, 0x4e, 0x1b, 0xa7, 0x9e, 0x76, 0x0f }; static const uint8_t nist_kas_ecc_cdh_testvector_307_public_y[] = { /* QCAVSy */ 0x02, 0xbf, 0x51, 0xc4, 0x4f, 0x83, 0x61, 0xc3, 0x05, 0x4c, 0xad, 0x64, 0x0f, 0x92, 0x44, 0x6f, 0xe3, 0x82, 0x0b, 0x06, 0x3c, 0xf4, 0xbb, 0x22, 0xca, 0x17, 0xc0, 0xa2, 0x74, 0xfd, 0x46, 0xf5, 0x05, 0x04, 0xfb, 0xec }; static const uint8_t nist_kas_ecc_cdh_testvector_307_private[] = { /* dIUT */ 0x01, 0x05, 0x20, 0x42, 0x98, 0x8d, 0xdd, 0xf4, 0x70, 0xd0, 0xa2, 0xe3, 0x6f, 0xff, 0x5b, 0x93, 0xec, 0x69, 0xf4, 0xd2, 0x40, 0xa8, 0xe3, 0x7c, 0x06, 0x4c, 0xc4, 0xd5, 0x99, 0x46, 0x7b, 0xa2, 0x7a, 0xf3, 0xc9, 0xf1 }; /* QIUTx = 00c7c9ff77e018b8801bddf886702556b126a6d9a1831a1f60f35872e524c134d553e4a4 */ /* QIUTy = 0035d767b58b499d9fb54562c3830411af59e7088a4a3333d5dc7fe5b0f7f1e1c5e3ac2b */ static const uint8_t nist_kas_ecc_cdh_testvector_307_out[] = { /* ZIUT */ 0x05, 0x5d, 0x57, 0x94, 0x58, 0x86, 0x0a, 0x3d, 0xd9, 0x2a, 0xc6, 0x57, 0x08, 0x47, 0x63, 0x2f, 0x04, 0x46, 0x07, 0x55, 0xc2, 0x2a, 0x4c, 0x43, 0x2c, 0xf4, 0xdd, 0xe9, 0x61, 0x1d, 0x2c, 0xe1, 0x60, 0x8c, 0xa1, 0x85 }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_308_public_x[] = { /* QCAVSx */ 0x02, 0x1e, 0x82, 0xd6, 0xaf, 0x6d, 0x32, 0x11, 0x98, 0x17, 0x6f, 0xf8, 0x98, 0x6c, 0x2b, 0xc7, 0x86, 0xa0, 0x08, 0x13, 0x26, 0xcc, 0x85, 0xf0, 0x26, 0xb7, 0x1b, 0x32, 0xac, 0x06, 0xc0, 0xba, 0xe6, 0xb4, 0xcb, 0xa2 }; static const uint8_t nist_kas_ecc_cdh_testvector_308_public_y[] = { /* QCAVSy */ 0x01, 0xe9, 0x73, 0x3f, 0xa9, 0xd2, 0x99, 0x61, 0x26, 0x94, 0x20, 0xdb, 0x24, 0xed, 0xc0, 0xd5, 0xae, 0x28, 0x5d, 0x78, 0xc9, 0xae, 0x14, 0xb3, 0x8b, 0x10, 0x19, 0xf1, 0x36, 0x52, 0xf1, 0x90, 0x27, 0x7d, 0xc4, 0x7f }; static const uint8_t nist_kas_ecc_cdh_testvector_308_private[] = { /* dIUT */ 0x03, 0xbb, 0x9a, 0xd5, 0xfa, 0x55, 0x2d, 0x38, 0xd1, 0xa7, 0x7c, 0xb5, 0x53, 0xc6, 0x31, 0xe2, 0xd0, 0x94, 0x0d, 0xb6, 0xb0, 0x4f, 0x0b, 0xd7, 0x01, 0x1e, 0xa7, 0x35, 0xbe, 0x50, 0xd0, 0x45, 0xda, 0x9a, 0x9c, 0x1d }; /* QIUTx = 0687071805c25a7d0b1739f7cf681b2f295c4f9d8937351d21d1d43f634e9a57105bf127 */ /* QIUTy = 0633ba21872e379c50e448372b1c0e65e85d07edd712d7dc06fa69a299f6037dece660dc */ static const uint8_t nist_kas_ecc_cdh_testvector_308_out[] = { /* ZIUT */ 0x05, 0x4f, 0xa7, 0xc6, 0xc8, 0x4f, 0xb8, 0x9e, 0x58, 0x92, 0xd9, 0x19, 0x45, 0x40, 0x86, 0x0e, 0xa3, 0x1a, 0xe2, 0xb6, 0xe3, 0x7a, 0x86, 0x97, 0x13, 0x44, 0x23, 0x0e, 0xa5, 0x12, 0xa3, 0xf6, 0xc0, 0x56, 0x92, 0x16 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_309_public_x[] = { /* QCAVSx */ 0x04, 0x5d, 0x62, 0xd0, 0x1d, 0xb5, 0xef, 0x17, 0x3d, 0x0c, 0xff, 0x31, 0x5a, 0x92, 0xa9, 0xa1, 0x05, 0xd1, 0xad, 0x78, 0x4f, 0xf9, 0xb0, 0x8e, 0x72, 0x1f, 0x35, 0x80, 0xe0, 0x62, 0x65, 0xff, 0x53, 0x8a, 0x19, 0x4b }; static const uint8_t nist_kas_ecc_cdh_testvector_309_public_y[] = { /* QCAVSy */ 0x06, 0xb7, 0x64, 0xc1, 0xff, 0x76, 0x98, 0x54, 0x96, 0xb9, 0x44, 0x51, 0xb7, 0x56, 0xc4, 0xf3, 0x0f, 0xdf, 0xc6, 0x38, 0xd8, 0x99, 0x03, 0x12, 0xbb, 0xec, 0xcb, 0xfb, 0xd7, 0x3e, 0x8c, 0x5a, 0x85, 0x5a, 0xdb, 0x75 }; static const uint8_t nist_kas_ecc_cdh_testvector_309_private[] = { /* dIUT */ 0x01, 0x33, 0xaa, 0x44, 0x5d, 0xc8, 0x0d, 0x7d, 0x5a, 0x09, 0x7d, 0x1d, 0xa1, 0x1d, 0x51, 0x0e, 0x65, 0x71, 0xa7, 0x83, 0xb4, 0xfb, 0x23, 0x54, 0x02, 0x71, 0x7d, 0x68, 0xba, 0x8f, 0xd1, 0x45, 0x4e, 0x6b, 0x31, 0x9f }; /* QIUTx = 02d26e46a6ed9fcf1d2f89c63d80e0172dedb4f5aeddff092836aac8599094885557ead9 */ /* QIUTy = 07d6713974701c160aedec8f94e6446bf7d3c790cbff8702cc7840a7818e5b626271f723 */ static const uint8_t nist_kas_ecc_cdh_testvector_309_out[] = { /* ZIUT */ 0x03, 0x53, 0xff, 0x03, 0xaf, 0xda, 0x37, 0x72, 0x98, 0x4a, 0xad, 0xc4, 0x00, 0x0e, 0x12, 0x75, 0x65, 0x66, 0x07, 0x15, 0x4b, 0x06, 0xc3, 0xa5, 0x9c, 0x66, 0x49, 0x45, 0xfa, 0x6f, 0xde, 0x1c, 0x25, 0x5f, 0xfa, 0x86 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_310_public_x[] = { /* QCAVSx */ 0x04, 0xa5, 0x61, 0xb5, 0x18, 0x4a, 0xde, 0xd9, 0xc7, 0xbd, 0x98, 0x68, 0xf3, 0x04, 0x3b, 0x5e, 0x2d, 0xe5, 0x19, 0x08, 0xf9, 0xc0, 0x3d, 0x5e, 0x6b, 0x08, 0xa3, 0x08, 0x8b, 0xcc, 0x50, 0xee, 0x32, 0x03, 0xe2, 0x63 }; static const uint8_t nist_kas_ecc_cdh_testvector_310_public_y[] = { /* QCAVSy */ 0x05, 0x81, 0x5b, 0x57, 0x9f, 0xf5, 0xde, 0xc6, 0xfa, 0xc9, 0x77, 0xba, 0x70, 0x88, 0xb3, 0x33, 0xbf, 0x4c, 0x02, 0x31, 0xda, 0x02, 0x18, 0x74, 0xee, 0x00, 0xd7, 0x1f, 0xe2, 0x5d, 0x3f, 0x4d, 0x50, 0xa5, 0x7a, 0xc3 }; static const uint8_t nist_kas_ecc_cdh_testvector_310_private[] = { /* dIUT */ 0x00, 0x46, 0x61, 0xf1, 0x07, 0xa9, 0xb5, 0x70, 0x04, 0x5d, 0xdb, 0xb0, 0x73, 0x8a, 0xb6, 0x9b, 0x1c, 0x17, 0xa9, 0xac, 0xc1, 0x1d, 0xa5, 0xda, 0xc7, 0xfd, 0x86, 0x4b, 0x3d, 0xfc, 0x36, 0xa2, 0x52, 0x82, 0xd6, 0xaa }; /* QIUTx = 061babbefee5211c4917506ce5f9f9e3d1e52b2506f38ca096e1b653ca9fb69f46105702 */ /* QIUTy = 0014bfd2ef228b5a03e26230c1e897ad081a704013cee55166ca46de395fc52f5d21203a */ static const uint8_t nist_kas_ecc_cdh_testvector_310_out[] = { /* ZIUT */ 0x05, 0x07, 0x95, 0xba, 0x09, 0x3d, 0x2e, 0x02, 0x39, 0x8c, 0x35, 0x89, 0x51, 0xf2, 0x0c, 0x9e, 0x3b, 0x4f, 0x60, 0x62, 0x8a, 0x96, 0xa4, 0xd0, 0xc4, 0x6c, 0xb8, 0xfc, 0x00, 0x05, 0xe5, 0x33, 0x1b, 0x38, 0xa0, 0x9a }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_311_public_x[] = { /* QCAVSx */ 0x01, 0xd7, 0xd7, 0x53, 0x6c, 0xd8, 0x38, 0x3e, 0x1c, 0x0b, 0x1b, 0x8a, 0xae, 0x02, 0xba, 0xa9, 0xfd, 0x2c, 0x4e, 0x68, 0xb2, 0x18, 0x08, 0xc1, 0x75, 0x4d, 0x0b, 0x15, 0x13, 0x61, 0x15, 0x7f, 0x81, 0x24, 0x59, 0x30 }; static const uint8_t nist_kas_ecc_cdh_testvector_311_public_y[] = { /* QCAVSy */ 0x07, 0x30, 0x34, 0xda, 0x41, 0x67, 0x97, 0xda, 0x95, 0xa3, 0x83, 0x6e, 0xef, 0x27, 0xb1, 0xfa, 0x27, 0x1f, 0x59, 0xa4, 0x34, 0x84, 0x8e, 0x98, 0x0b, 0xad, 0x2f, 0xdd, 0x53, 0xff, 0xd1, 0xe3, 0x66, 0xff, 0x69, 0x17 }; static const uint8_t nist_kas_ecc_cdh_testvector_311_private[] = { /* dIUT */ 0x00, 0x36, 0xbd, 0x21, 0xf8, 0x4a, 0xb9, 0xdb, 0x6f, 0x4b, 0xdd, 0xc9, 0x46, 0x35, 0xf1, 0x9f, 0x80, 0xac, 0xb2, 0x81, 0x3d, 0xa5, 0x39, 0x9e, 0x07, 0x77, 0x83, 0x2c, 0x2f, 0xeb, 0xdc, 0x71, 0x86, 0x2a, 0xbe, 0x33 }; /* QIUTx = 068ee3245754d51df7780046af39acb407c4998c620bff94fb374faf4b498006eea0cf88 */ /* QIUTy = 0366a449f09ecfbaecc49d880307f57246c11c5bea00af42718677a8def15e5926da1822 */ static const uint8_t nist_kas_ecc_cdh_testvector_311_out[] = { /* ZIUT */ 0x02, 0xab, 0x08, 0xd6, 0x3c, 0xdb, 0x4b, 0xe2, 0x50, 0x25, 0x58, 0xe6, 0x7e, 0xab, 0x27, 0x57, 0x0f, 0x2d, 0x02, 0x9e, 0x7f, 0x98, 0x1d, 0x15, 0x3b, 0x97, 0x30, 0x80, 0x58, 0x5d, 0x01, 0xe4, 0x2f, 0x71, 0x87, 0xd9 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_312_public_x[] = { /* QCAVSx */ 0x02, 0x04, 0x2f, 0x5a, 0x3f, 0xe5, 0xe3, 0xd3, 0x33, 0x5b, 0xb7, 0xbc, 0xdb, 0x9d, 0xcb, 0xd8, 0x71, 0x6e, 0xd1, 0x8d, 0x7f, 0xc2, 0xff, 0x42, 0x97, 0xbc, 0x1f, 0xeb, 0x7c, 0xca, 0x31, 0x00, 0x22, 0xe2, 0x21, 0x3d }; static const uint8_t nist_kas_ecc_cdh_testvector_312_public_y[] = { /* QCAVSy */ 0x07, 0xbe, 0xbb, 0x6c, 0x0e, 0x04, 0x6d, 0x5a, 0xfd, 0xbf, 0xa8, 0x7e, 0xa9, 0x8c, 0xa7, 0xf5, 0x5e, 0x9c, 0xdb, 0xb0, 0x55, 0xd0, 0xcc, 0x54, 0x9b, 0x44, 0x58, 0xd6, 0x99, 0x8b, 0xdb, 0xb3, 0x45, 0x17, 0x73, 0x88 }; static const uint8_t nist_kas_ecc_cdh_testvector_312_private[] = { /* dIUT */ 0x01, 0x65, 0x97, 0xae, 0x6e, 0x49, 0xe7, 0x9d, 0x06, 0x90, 0x34, 0x97, 0x2a, 0x63, 0x52, 0x5a, 0x3c, 0x3e, 0x2d, 0x2c, 0x25, 0x3b, 0x9e, 0x1d, 0xd3, 0xf3, 0x78, 0x16, 0x81, 0x2c, 0xf5, 0x4a, 0xd6, 0x5c, 0x54, 0x6a }; /* QIUTx = 050ea073522dbe51408f85f0a6086bd4c8efe572f80aadadd7e70ebb4b728bfdbfd4f1bc */ /* QIUTy = 07da520017c7ad2916a2719b8558958f77c712d352cff9c0ad99fbc98a0e065eb7ac7feb */ static const uint8_t nist_kas_ecc_cdh_testvector_312_out[] = { /* ZIUT */ 0x05, 0x99, 0x75, 0x7e, 0x3f, 0xfe, 0xb4, 0x84, 0xb3, 0x2d, 0x3b, 0x47, 0x82, 0x8b, 0x68, 0x23, 0xd4, 0x67, 0x86, 0xd3, 0x54, 0x77, 0x08, 0x2c, 0xea, 0xcf, 0x3a, 0x5a, 0x11, 0x55, 0x23, 0x94, 0xfe, 0x58, 0xf5, 0x3b }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_313_public_x[] = { /* QCAVSx */ 0x06, 0x7a, 0xfd, 0xf7, 0x88, 0xf8, 0xf4, 0x83, 0x1c, 0x3c, 0x7d, 0x76, 0x04, 0xd0, 0x7a, 0x5b, 0xdc, 0x59, 0xda, 0x42, 0xd9, 0x32, 0x73, 0x1f, 0xaf, 0x5e, 0xaf, 0x07, 0x53, 0x28, 0x09, 0x66, 0xab, 0x69, 0x37, 0x90 }; static const uint8_t nist_kas_ecc_cdh_testvector_313_public_y[] = { /* QCAVSy */ 0x00, 0x1b, 0x39, 0xd1, 0xd8, 0x72, 0xb6, 0x5e, 0x31, 0x25, 0x1c, 0x1f, 0x58, 0x4e, 0x4f, 0xe3, 0xed, 0x75, 0xd5, 0x3a, 0xd9, 0x0e, 0x83, 0x6f, 0xe9, 0x0c, 0x8d, 0xb9, 0x4f, 0xe7, 0x7c, 0xef, 0x0b, 0xca, 0x72, 0x04 }; static const uint8_t nist_kas_ecc_cdh_testvector_313_private[] = { /* dIUT */ 0x01, 0x5e, 0xa8, 0x56, 0x7c, 0x7b, 0x82, 0xb4, 0x83, 0xfa, 0x36, 0x5e, 0x8e, 0x68, 0x1c, 0x0a, 0x63, 0x5f, 0x56, 0x3a, 0x1c, 0x81, 0x47, 0x0b, 0x4d, 0xfe, 0x44, 0xf1, 0x94, 0xfa, 0x91, 0xeb, 0x78, 0x42, 0x18, 0x1e }; /* QIUTx = 07afe2b22b54fe895c242c20c054989fa804e591970dda8a7ce109d6bd31b6daa8f2fc74 */ /* QIUTy = 060733bd5a4ea9b5ea7090acfee918106b7f25272f3f7cb36eda38bacd21375610cde928 */ static const uint8_t nist_kas_ecc_cdh_testvector_313_out[] = { /* ZIUT */ 0x00, 0x5e, 0x33, 0x1a, 0xf5, 0x5e, 0x96, 0x15, 0x3d, 0x8a, 0x7b, 0x90, 0x6a, 0x4a, 0x19, 0x01, 0x6a, 0x26, 0x38, 0x19, 0x77, 0xb4, 0x9f, 0x80, 0xb9, 0xd7, 0x0d, 0xb0, 0x99, 0x05, 0x3c, 0x6a, 0x3b, 0x8e, 0x80, 0xd5 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_314_public_x[] = { /* QCAVSx */ 0x01, 0x88, 0x66, 0xa4, 0xfa, 0x2f, 0x7c, 0x25, 0x34, 0xe5, 0x63, 0xa2, 0x91, 0xde, 0x87, 0x1a, 0x8b, 0x30, 0x52, 0xa6, 0x74, 0xf5, 0xdb, 0xc2, 0x3b, 0x9d, 0xea, 0x0e, 0x8c, 0xef, 0xda, 0x06, 0xab, 0xc3, 0x2c, 0x8f }; static const uint8_t nist_kas_ecc_cdh_testvector_314_public_y[] = { /* QCAVSy */ 0x05, 0x8d, 0xc4, 0xcf, 0x1b, 0xf9, 0x85, 0xd1, 0xb5, 0x66, 0x97, 0x08, 0x47, 0xcb, 0xa6, 0xb8, 0xa4, 0xf4, 0x0c, 0x7e, 0x62, 0xa5, 0x80, 0x8b, 0x07, 0x20, 0xbb, 0xb8, 0xcd, 0xf3, 0xb4, 0x53, 0x1e, 0x38, 0x0b, 0xe7 }; static const uint8_t nist_kas_ecc_cdh_testvector_314_private[] = { /* dIUT */ 0x00, 0x29, 0x11, 0xd9, 0x38, 0xd9, 0x50, 0x8a, 0xec, 0xcb, 0x98, 0x77, 0xe1, 0x27, 0xd1, 0xb1, 0x46, 0x1a, 0xcd, 0xae, 0xd0, 0x35, 0xf2, 0x0e, 0x0f, 0x74, 0x4c, 0x77, 0x4f, 0x1c, 0x72, 0x70, 0x3b, 0x5c, 0x4b, 0x49 }; /* QIUTx = 0386bfdfe60373be114b417c4dceb443223fde67c0fef29ed0f867b5a15f5ea0ccb4dcca */ /* QIUTy = 02fac38ec8494cf7576233ec8282de384b67f0ca8048084201039d194c8bda4f6e0aff3e */ static const uint8_t nist_kas_ecc_cdh_testvector_314_out[] = { /* ZIUT */ 0x07, 0xe1, 0x32, 0xea, 0x71, 0xa1, 0x6c, 0x7c, 0xc2, 0x61, 0xb9, 0xd6, 0xff, 0x6f, 0xc5, 0x2c, 0xc4, 0x90, 0xda, 0x61, 0x6b, 0x07, 0xd9, 0x2f, 0x9e, 0x59, 0x1f, 0xc1, 0xe6, 0x30, 0xd3, 0x44, 0x25, 0x72, 0x33, 0x8f }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_315_public_x[] = { /* QCAVSx */ 0x00, 0x05, 0x71, 0xd7, 0xbe, 0xf0, 0x56, 0x08, 0x91, 0x72, 0xf1, 0x34, 0x23, 0xa5, 0x85, 0xab, 0x97, 0x9f, 0x4b, 0x8f, 0x77, 0xe7, 0x52, 0xc0, 0x42, 0xc0, 0xc6, 0x52, 0x63, 0xb4, 0x76, 0x98, 0x1e, 0x5f, 0x31, 0x57 }; static const uint8_t nist_kas_ecc_cdh_testvector_315_public_y[] = { /* QCAVSy */ 0x04, 0x4b, 0xca, 0x69, 0x3e, 0x9d, 0x3b, 0x1a, 0x7f, 0xa6, 0xad, 0x42, 0xdb, 0x7f, 0x36, 0xb1, 0xa6, 0x57, 0x12, 0xd0, 0x9e, 0xf3, 0xbb, 0x71, 0x5e, 0x26, 0x40, 0xa1, 0x82, 0xf4, 0x36, 0x62, 0x06, 0x86, 0xc0, 0xa4 }; static const uint8_t nist_kas_ecc_cdh_testvector_315_private[] = { /* dIUT */ 0x01, 0x66, 0x2f, 0x55, 0x48, 0x56, 0xc0, 0x20, 0x8a, 0x31, 0xb1, 0x95, 0x14, 0x8f, 0x82, 0x8e, 0x0b, 0x5c, 0x92, 0xa4, 0xea, 0x4c, 0x03, 0x32, 0x48, 0xbe, 0xbf, 0x95, 0x7b, 0x58, 0x6b, 0x40, 0x9e, 0xd5, 0x98, 0x50 }; /* QIUTx = 07055264c3de3a622d26fe7ad700bdea045d4b3ce718f4e6ae44cf376c3a96a2650b3221 */ /* QIUTy = 00f45cc1138668adc8150d37c072bb4245660c18785683c7b17aa1fb8591ba6cda23657a */ static const uint8_t nist_kas_ecc_cdh_testvector_315_out[] = { /* ZIUT */ 0x01, 0x0f, 0x26, 0x81, 0x70, 0x98, 0xce, 0x1b, 0xbd, 0x67, 0x43, 0x78, 0x4d, 0x6f, 0xb6, 0x5e, 0x60, 0x69, 0x9c, 0x14, 0x93, 0x3a, 0x2c, 0x8d, 0x85, 0x40, 0x27, 0xaa, 0x58, 0xb5, 0x8d, 0xb9, 0xe6, 0x6a, 0x53, 0xa7 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_316_public_x[] = { /* QCAVSx */ 0x01, 0x6e, 0xb4, 0xbb, 0xb3, 0xc3, 0x86, 0xe0, 0xf4, 0x2f, 0xb0, 0x37, 0xbe, 0xe4, 0x78, 0xc4, 0xc0, 0xdb, 0xfb, 0xe5, 0x5c, 0xc6, 0x8e, 0x33, 0xfd, 0xb0, 0x29, 0xb9, 0xe5, 0xe7, 0x24, 0xaf, 0xf4, 0xfd, 0x8b, 0xf6 }; static const uint8_t nist_kas_ecc_cdh_testvector_316_public_y[] = { /* QCAVSy */ 0x02, 0x51, 0x43, 0x2f, 0x84, 0x56, 0x8a, 0x44, 0x97, 0x1e, 0x86, 0xab, 0x71, 0x5d, 0x38, 0x79, 0xe6, 0x14, 0xe1, 0x07, 0x25, 0x73, 0x5e, 0xf8, 0xfb, 0x66, 0x52, 0xd0, 0x79, 0xc7, 0x90, 0x8f, 0x11, 0xbd, 0x1f, 0x01 }; static const uint8_t nist_kas_ecc_cdh_testvector_316_private[] = { /* dIUT */ 0x01, 0x2c, 0x01, 0x00, 0xa9, 0x96, 0x3e, 0xe1, 0x7d, 0x7a, 0xcf, 0x4d, 0xdf, 0x8e, 0x02, 0xd8, 0xae, 0x75, 0xf3, 0xb9, 0x91, 0x14, 0xf5, 0x36, 0x6a, 0xfb, 0x4a, 0x00, 0xad, 0xe9, 0xa3, 0xc0, 0xee, 0x39, 0xa8, 0x87 }; /* QIUTx = 07794fa19c6b10d399e0f52d36f483c7851848e62bacf95b5af51eca09ad445ee19ef34d */ /* QIUTy = 06140d2ee16cd0a6cb1960509a7ccc664be97644a95ae16f4a173d9a867015f0837f0560 */ static const uint8_t nist_kas_ecc_cdh_testvector_316_out[] = { /* ZIUT */ 0x00, 0xbd, 0xd8, 0xcc, 0xd1, 0xb4, 0x0c, 0x5b, 0xc2, 0xef, 0xc1, 0xc1, 0x05, 0x99, 0x93, 0x50, 0xfe, 0xfa, 0xf7, 0x84, 0x71, 0x09, 0x14, 0xff, 0x63, 0x95, 0x82, 0xf1, 0x27, 0x76, 0x78, 0x69, 0x94, 0x91, 0x14, 0x0c }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_317_public_x[] = { /* QCAVSx */ 0x02, 0x41, 0x7c, 0x65, 0x69, 0x4d, 0x85, 0x0c, 0x7c, 0x86, 0x6f, 0x7e, 0x11, 0x63, 0x9a, 0x5f, 0x87, 0x18, 0xca, 0x9a, 0xab, 0xb3, 0x92, 0xfa, 0x86, 0x10, 0xe2, 0xd5, 0xd7, 0xdd, 0xa3, 0x37, 0x5a, 0x60, 0x7f, 0x9b }; static const uint8_t nist_kas_ecc_cdh_testvector_317_public_y[] = { /* QCAVSy */ 0x05, 0x13, 0x39, 0x38, 0xdc, 0x99, 0x14, 0x4d, 0x16, 0xea, 0x75, 0x25, 0xc3, 0xfe, 0x4e, 0x32, 0xe3, 0x20, 0xed, 0x07, 0x5b, 0x96, 0x52, 0x7e, 0x13, 0xb2, 0xa9, 0x9c, 0x9f, 0x27, 0xad, 0xe9, 0xef, 0x9e, 0xdc, 0xb6 }; static const uint8_t nist_kas_ecc_cdh_testvector_317_private[] = { /* dIUT */ 0x03, 0x45, 0xc2, 0x76, 0xb0, 0x5e, 0xce, 0x9e, 0x7c, 0x86, 0x81, 0x1f, 0x8c, 0x8a, 0xf4, 0x8b, 0x22, 0xdb, 0x41, 0xd4, 0x06, 0x62, 0x75, 0x00, 0x96, 0x11, 0xb8, 0x80, 0xd7, 0xd2, 0xce, 0xf3, 0x29, 0xc5, 0x0e, 0x82 }; /* QIUTx = 007afffcfa31c110aab3bb394530a41c416af566bfba8f159f984437e799dddaaf8cdfd2 */ /* QIUTy = 065fb3c68446a74068bab7e36ab80e984707e39a4a143f5a46d646342f9f12f26a32291b */ static const uint8_t nist_kas_ecc_cdh_testvector_317_out[] = { /* ZIUT */ 0x01, 0x4a, 0x83, 0xe7, 0x47, 0xc9, 0x0a, 0xec, 0x61, 0x01, 0xc0, 0xa7, 0x52, 0xd9, 0x2e, 0xef, 0x74, 0x75, 0xb0, 0x00, 0x51, 0xec, 0xad, 0x3d, 0x7c, 0x2e, 0x50, 0xcf, 0x4e, 0xba, 0x1e, 0xf3, 0xc8, 0x0b, 0x8c, 0x94 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_318_public_x[] = { /* QCAVSx */ 0x00, 0xc5, 0xd6, 0x14, 0x9f, 0x87, 0x17, 0x4b, 0xa3, 0x7f, 0x4c, 0x1c, 0x6f, 0x67, 0xf6, 0x90, 0x5a, 0xbb, 0x31, 0x9f, 0x52, 0x6b, 0x7a, 0xa1, 0xbe, 0x1d, 0xd2, 0x05, 0xdf, 0x93, 0x0a, 0xb1, 0xc9, 0x1b, 0xb1, 0xf8 }; static const uint8_t nist_kas_ecc_cdh_testvector_318_public_y[] = { /* QCAVSy */ 0x00, 0xc2, 0xe2, 0x1e, 0x12, 0x06, 0xcd, 0x4b, 0xb5, 0xb6, 0x22, 0xab, 0xe9, 0x7c, 0xa3, 0xf2, 0x52, 0xcb, 0xc6, 0x8d, 0x05, 0x4a, 0x77, 0xf8, 0xeb, 0xab, 0xad, 0x59, 0x3f, 0xb1, 0x86, 0x33, 0x06, 0x92, 0x8b, 0xf7 }; static const uint8_t nist_kas_ecc_cdh_testvector_318_private[] = { /* dIUT */ 0x03, 0xaf, 0xd5, 0xaf, 0xfa, 0x34, 0x6b, 0x52, 0x59, 0x69, 0x7d, 0x92, 0x17, 0x95, 0x2a, 0xfc, 0xd0, 0x3d, 0xdf, 0xec, 0x04, 0x63, 0x1b, 0xd9, 0x95, 0xc1, 0x0a, 0xc2, 0x58, 0x3b, 0x0c, 0xa8, 0xd2, 0x46, 0x1f, 0x5d }; /* QIUTx = 06b4c2c3615b266543de189c896cff77b5557c782c215961ac7324185fc9a81098f2ebea */ /* QIUTy = 047fef1960739ae0aee39a3ffdb82e890d4236fc22dad395d490bc3a5eea58e8cd03edbb */ static const uint8_t nist_kas_ecc_cdh_testvector_318_out[] = { /* ZIUT */ 0x00, 0xaf, 0xd2, 0x9e, 0x35, 0x27, 0x79, 0xa3, 0x90, 0x21, 0x53, 0x6e, 0xa5, 0x0c, 0x24, 0xfa, 0x26, 0x4c, 0x59, 0x9f, 0x8f, 0x8f, 0xe8, 0xf2, 0xcc, 0xf0, 0x61, 0x5a, 0x65, 0x47, 0xa0, 0x64, 0xd7, 0xc1, 0xa1, 0x50 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_319_public_x[] = { /* QCAVSx */ 0x01, 0x73, 0x04, 0x4e, 0x5b, 0xe6, 0x39, 0x97, 0xd7, 0x92, 0x5e, 0x43, 0x1b, 0xbf, 0x00, 0x4c, 0xf0, 0xf0, 0xba, 0x85, 0xaa, 0x29, 0x5a, 0x34, 0x1e, 0x8f, 0x58, 0x57, 0xa1, 0x20, 0xbe, 0x89, 0xd7, 0x76, 0x53, 0xe9 }; static const uint8_t nist_kas_ecc_cdh_testvector_319_public_y[] = { /* QCAVSy */ 0x07, 0x37, 0xcc, 0x04, 0x96, 0x90, 0xf9, 0x70, 0x82, 0x4a, 0x7b, 0x0c, 0x20, 0x22, 0x43, 0x96, 0x82, 0xc9, 0xd8, 0x2f, 0x4f, 0x23, 0xe4, 0x8e, 0x5f, 0x07, 0xfe, 0xa9, 0x62, 0x67, 0xca, 0x3b, 0xd4, 0xd7, 0x30, 0xa5 }; static const uint8_t nist_kas_ecc_cdh_testvector_319_private[] = { /* dIUT */ 0x03, 0xd5, 0x77, 0x1f, 0x84, 0x85, 0xc3, 0xb8, 0xbe, 0x62, 0xa5, 0x6f, 0x39, 0x36, 0x51, 0x3e, 0x3b, 0x63, 0x1a, 0x56, 0x1a, 0x94, 0x26, 0x13, 0xdf, 0x95, 0x14, 0x0f, 0x47, 0x32, 0x14, 0xdf, 0x61, 0x7c, 0x4c, 0x4e }; /* QIUTx = 05906cc4529b220228efbb0545bf55ec03c86f87e2f4e3a3cbf404e07b73a5b1a5f528cd */ /* QIUTy = 016588e480c4856cd2ee9aaf1e302812fbc0b33f527c29b77ce0f4878ea089d025a440c0 */ static const uint8_t nist_kas_ecc_cdh_testvector_319_out[] = { /* ZIUT */ 0x04, 0x77, 0x99, 0x0f, 0x17, 0xd6, 0x55, 0x89, 0x28, 0x9c, 0x28, 0xe5, 0x4a, 0x56, 0xa8, 0x3b, 0xc0, 0x5e, 0xf4, 0xea, 0x68, 0x63, 0xc5, 0xeb, 0xe8, 0x40, 0x92, 0x5c, 0x9f, 0xbe, 0xf6, 0x4c, 0xcd, 0x6e, 0x69, 0xa4 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_320_public_x[] = { /* QCAVSx */ 0x06, 0x85, 0x87, 0xe6, 0x9d, 0xed, 0xdf, 0x4b, 0x55, 0xac, 0x51, 0xf2, 0xa1, 0x7d, 0xd8, 0xbf, 0xd6, 0xf9, 0x4e, 0x72, 0x10, 0x03, 0x21, 0x42, 0x15, 0xbf, 0xb2, 0x4b, 0x24, 0x82, 0x81, 0xe7, 0x5a, 0x3c, 0x65, 0x94 }; static const uint8_t nist_kas_ecc_cdh_testvector_320_public_y[] = { /* QCAVSy */ 0x04, 0x4e, 0xee, 0x9c, 0x70, 0x2b, 0xc4, 0xc1, 0xe2, 0x10, 0xc7, 0xcc, 0x21, 0x45, 0x24, 0x59, 0x25, 0x68, 0xac, 0x0f, 0x9f, 0xd6, 0x7d, 0x6e, 0xa0, 0x2b, 0x4d, 0xc3, 0xef, 0xb4, 0x2c, 0xfb, 0xb2, 0x26, 0x3d, 0xac }; static const uint8_t nist_kas_ecc_cdh_testvector_320_private[] = { /* dIUT */ 0x00, 0xe2, 0xc0, 0xc6, 0x02, 0xfb, 0x13, 0x23, 0x99, 0xee, 0x9f, 0x31, 0x00, 0x83, 0x65, 0xea, 0x22, 0xcc, 0x12, 0x60, 0xf7, 0x9f, 0xe3, 0xae, 0x61, 0x08, 0x9b, 0x8a, 0x6f, 0xa4, 0x55, 0x9c, 0xac, 0x91, 0xae, 0xc8 }; /* QIUTx = 06e6e318c0c4c0b661dfd3e722090ecd32fdc9ca3d168d9c7174c1d40adbb2ce672d9252 */ /* QIUTy = 040bdc1dbc7b163f7c9551f47daa8294ac2dc4fe0d472c4e2f2cfefc95d523ff59e0e880 */ static const uint8_t nist_kas_ecc_cdh_testvector_320_out[] = { /* ZIUT */ 0x06, 0x7a, 0x66, 0x13, 0x46, 0xfe, 0x05, 0x2c, 0xa2, 0x7f, 0x3f, 0x03, 0xe7, 0x5b, 0xbd, 0xfc, 0x8f, 0xe6, 0xd0, 0xd8, 0x5c, 0x62, 0xc8, 0xf7, 0x95, 0x25, 0x25, 0x2a, 0xa2, 0x41, 0xae, 0x9d, 0xe9, 0x7d, 0x56, 0xc3 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_321_public_x[] = { /* QCAVSx */ 0x03, 0xf1, 0x22, 0x6d, 0x80, 0x2c, 0x57, 0x5f, 0x87, 0x1a, 0x21, 0x3b, 0x81, 0x50, 0xf7, 0x81, 0x8b, 0xbd, 0x62, 0x56, 0x63, 0xb7, 0x3e, 0x72, 0x0a, 0x73, 0x7f, 0x07, 0x18, 0x96, 0x08, 0x6d, 0xa0, 0xb1, 0x4c, 0xd9 }; static const uint8_t nist_kas_ecc_cdh_testvector_321_public_y[] = { /* QCAVSy */ 0x07, 0xd1, 0xcb, 0x0c, 0xe1, 0x9c, 0x98, 0xa6, 0x3a, 0xaf, 0x7b, 0x31, 0x4f, 0x1f, 0x57, 0x20, 0xe3, 0x28, 0x87, 0x05, 0x33, 0x84, 0xac, 0x0f, 0x5e, 0xb6, 0x9b, 0x6c, 0x47, 0x1a, 0x8e, 0x3d, 0x3d, 0x16, 0xe7, 0x6f }; static const uint8_t nist_kas_ecc_cdh_testvector_321_private[] = { /* dIUT */ 0x03, 0x2d, 0x57, 0x3f, 0xde, 0xb8, 0x5a, 0x4d, 0xa2, 0x29, 0x78, 0x96, 0x63, 0x14, 0x14, 0x51, 0x8d, 0x4b, 0xa0, 0x7d, 0xc4, 0xdd, 0x72, 0xf7, 0x31, 0x72, 0x88, 0x90, 0xd0, 0xb4, 0x4d, 0x36, 0xf2, 0x30, 0x9c, 0x0e }; /* QIUTx = 06f6ffea0a87bd9eeb539c48a3fcbf388159862259c7f7840e64809fbedb01a83812c0c6 */ /* QIUTy = 07c795b8f2847fc39fa56c2de1e6cbbf4945087cb2e3b919dc776b4cc1c83e4b1c79b8ba */ static const uint8_t nist_kas_ecc_cdh_testvector_321_out[] = { /* ZIUT */ 0x06, 0x47, 0x6b, 0x06, 0x20, 0xee, 0xf1, 0x65, 0x94, 0x1a, 0x45, 0x07, 0xe6, 0xd7, 0x98, 0xd6, 0xf1, 0x50, 0xab, 0x29, 0x33, 0x3c, 0x05, 0x52, 0x28, 0x1b, 0x62, 0x91, 0x70, 0xd3, 0x29, 0x1b, 0x2f, 0x9b, 0x3f, 0x41 }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_322_public_x[] = { /* QCAVSx */ 0x02, 0xa9, 0x11, 0xe7, 0xe6, 0xd2, 0xfc, 0x77, 0x0d, 0x1e, 0xab, 0xc7, 0xdf, 0x70, 0x1b, 0xb1, 0x19, 0x08, 0x4a, 0x68, 0x59, 0x00, 0xd2, 0x2d, 0x52, 0xd5, 0x98, 0xfe, 0x1d, 0x28, 0xfc, 0x89, 0x1b, 0x31, 0xb4, 0x87 }; static const uint8_t nist_kas_ecc_cdh_testvector_322_public_y[] = { /* QCAVSy */ 0x01, 0xb8, 0xdc, 0x67, 0x13, 0xca, 0x45, 0x3e, 0x91, 0xb2, 0xec, 0x4e, 0x4d, 0x1f, 0x83, 0x4b, 0x08, 0xee, 0xbc, 0x7e, 0x88, 0x86, 0xc3, 0xa4, 0x58, 0xe7, 0x09, 0x25, 0x24, 0x2c, 0x4b, 0x22, 0xbf, 0x0b, 0x20, 0x53 }; static const uint8_t nist_kas_ecc_cdh_testvector_322_private[] = { /* dIUT */ 0x00, 0xa6, 0xaa, 0xcb, 0x5d, 0xd3, 0xe8, 0x35, 0x81, 0x4f, 0x45, 0x2d, 0x82, 0x07, 0xd1, 0x5a, 0x53, 0x36, 0x38, 0xf7, 0x0e, 0x94, 0xf8, 0x7c, 0x06, 0x19, 0x6e, 0xff, 0x88, 0x38, 0xd4, 0x8e, 0xed, 0x2e, 0x26, 0x74 }; /* QIUTx = 02dd0093a8d419831f34bac6c60a570c51d08e699b181c964b667d0d17ed72a49119acd9 */ /* QIUTy = 01a91976be5d5e037f22350d67ab7bfab51bbc4fa6026d347d28fb4407bccc40dd10a00e */ static const uint8_t nist_kas_ecc_cdh_testvector_322_out[] = { /* ZIUT */ 0x07, 0x46, 0x71, 0x9f, 0x2a, 0xd0, 0x8f, 0x8a, 0x8d, 0x6d, 0x6f, 0xbf, 0x15, 0x72, 0x3f, 0x33, 0x62, 0x85, 0xce, 0x75, 0xd3, 0xa2, 0xfc, 0xbd, 0x5a, 0x0c, 0x54, 0xc5, 0x77, 0x51, 0x7a, 0x22, 0xbc, 0x26, 0x41, 0x61 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_323_public_x[] = { /* QCAVSx */ 0x07, 0x54, 0x1a, 0xa5, 0x1d, 0x73, 0x02, 0xe2, 0xbb, 0x55, 0x7c, 0x27, 0xec, 0x15, 0xd7, 0xf9, 0xc3, 0xae, 0x3b, 0x76, 0xec, 0x2f, 0x86, 0xcb, 0x95, 0xe8, 0xde, 0xad, 0x7f, 0xa0, 0x6b, 0x57, 0x83, 0x97, 0xf1, 0xf1 }; static const uint8_t nist_kas_ecc_cdh_testvector_323_public_y[] = { /* QCAVSy */ 0x01, 0x7e, 0xa2, 0x2f, 0x6b, 0x54, 0x74, 0xf0, 0xf5, 0xf0, 0xf4, 0xea, 0xd5, 0x41, 0x72, 0x06, 0x40, 0x51, 0x53, 0x8d, 0x3e, 0x23, 0x2a, 0x53, 0x0d, 0xfc, 0xa5, 0xf2, 0xa0, 0xdc, 0x67, 0x74, 0x6c, 0x8b, 0xb1, 0xda }; static const uint8_t nist_kas_ecc_cdh_testvector_323_private[] = { /* dIUT */ 0x00, 0x11, 0x2f, 0xb2, 0xab, 0x56, 0x44, 0x37, 0x65, 0x67, 0x6a, 0x1e, 0x41, 0xb3, 0xcb, 0x91, 0xeb, 0x1a, 0x67, 0x90, 0xe9, 0x64, 0xee, 0x90, 0x0c, 0xfc, 0x92, 0x95, 0x63, 0x6b, 0xa4, 0xc6, 0xfa, 0x87, 0xaa, 0xd2 }; /* QIUTx = 03f507d99cc2498e2c7f54fb3c9c032f382548e2e3168fa140125a526048568f3bb3e5a1 */ /* QIUTy = 05270df77efc7d6c55f9259bc82273c9b6bdf3676e13c3601b1b3022b962de1129cb3b14 */ static const uint8_t nist_kas_ecc_cdh_testvector_323_out[] = { /* ZIUT */ 0x03, 0xcd, 0xa4, 0xb5, 0xf4, 0x4b, 0x5d, 0x3d, 0xc2, 0x48, 0x31, 0x0f, 0x99, 0x44, 0x19, 0xfb, 0xcb, 0xd6, 0x65, 0x11, 0x5d, 0x18, 0x76, 0x04, 0x66, 0x52, 0x25, 0x1a, 0xd4, 0xae, 0xeb, 0x1d, 0xcf, 0x18, 0x42, 0x88 }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_324_public_x[] = { /* QCAVSx */ 0x02, 0x1f, 0xb1, 0x4e, 0x52, 0xcd, 0x42, 0x43, 0xa5, 0x20, 0xf6, 0x30, 0x22, 0x9b, 0x1d, 0xd6, 0x96, 0x1c, 0x49, 0xbd, 0x96, 0xf4, 0x3f, 0xa9, 0xca, 0xe3, 0x7a, 0xdd, 0x84, 0xda, 0x7a, 0xe7, 0x2d, 0xc3, 0x07, 0x8e }; static const uint8_t nist_kas_ecc_cdh_testvector_324_public_y[] = { /* QCAVSy */ 0x00, 0xdd, 0x63, 0x8b, 0xf9, 0x05, 0x3f, 0xad, 0x6a, 0xa4, 0xff, 0x2d, 0x33, 0x0b, 0x8a, 0x4a, 0x20, 0xbf, 0xe3, 0x02, 0x0f, 0x40, 0xb9, 0x69, 0x23, 0x02, 0xd0, 0xb0, 0xa3, 0xc2, 0xd8, 0x77, 0x85, 0x6e, 0xc4, 0x6a }; static const uint8_t nist_kas_ecc_cdh_testvector_324_private[] = { /* dIUT */ 0x03, 0xe4, 0xf1, 0xc4, 0xf3, 0x0e, 0x2a, 0x8d, 0x6f, 0xd5, 0x59, 0xf7, 0xfe, 0x88, 0x20, 0xe8, 0x86, 0x94, 0x9d, 0xe8, 0x7c, 0x01, 0xd8, 0xeb, 0x64, 0xc7, 0xb4, 0x0f, 0x15, 0x48, 0xcb, 0x61, 0x7a, 0x92, 0x60, 0x33 }; /* QIUTx = 05e3fc56ec162885c1291e4ae9c19c8eb2bb559eb7ecd5817549b5a2ea3a66d951880aa6 */ /* QIUTy = 04c004f2ae4db4f748b437bc115e06ea2017a87798298dd6004616fcffdcc7ec2dfd6db9 */ static const uint8_t nist_kas_ecc_cdh_testvector_324_out[] = { /* ZIUT */ 0x01, 0x5c, 0x89, 0x2f, 0x95, 0x76, 0x8a, 0x96, 0xab, 0x5a, 0x4f, 0x95, 0x23, 0xb7, 0xfd, 0x46, 0x6e, 0x10, 0x1f, 0x63, 0xb8, 0x8a, 0xd8, 0xf1, 0xfe, 0xcb, 0x30, 0x27, 0xcd, 0x70, 0xaa, 0x00, 0x73, 0x5d, 0xcc, 0x90 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_325_public_x[] = { /* QCAVSx */ 0x00, 0xd0, 0x8e, 0xd3, 0x85, 0x6a, 0xbe, 0xf7, 0xd4, 0xa6, 0x22, 0x43, 0xc9, 0x2d, 0x6e, 0x67, 0x0c, 0xeb, 0x3a, 0xf3, 0x23, 0x57, 0xfd, 0xb9, 0xd3, 0x9c, 0x19, 0x17, 0x5a, 0x10, 0xd1, 0xcb, 0xab, 0x36, 0xce, 0x78 }; static const uint8_t nist_kas_ecc_cdh_testvector_325_public_y[] = { /* QCAVSy */ 0x05, 0xdb, 0x9f, 0xad, 0x7f, 0xc8, 0xaf, 0xe7, 0x9c, 0x8b, 0x9c, 0xe4, 0x8e, 0x62, 0xff, 0xa0, 0xd4, 0x6b, 0x80, 0x5a, 0x9e, 0x58, 0x21, 0xe2, 0x76, 0x1c, 0x25, 0xc0, 0xed, 0xba, 0x92, 0xb1, 0x20, 0xb0, 0x63, 0xf2 }; static const uint8_t nist_kas_ecc_cdh_testvector_325_private[] = { /* dIUT */ 0x00, 0xae, 0x7e, 0xb3, 0xd4, 0x03, 0x54, 0xf9, 0xf8, 0xfe, 0xd1, 0x8f, 0x21, 0x62, 0xde, 0xe3, 0x81, 0x56, 0xca, 0xe0, 0x53, 0x5b, 0x55, 0x37, 0x0d, 0xa3, 0x63, 0x8f, 0x01, 0x66, 0x8a, 0xec, 0xf9, 0x70, 0x8b, 0xe6 }; /* QIUTx = 061e8858e368d9c917f129d932ddc4cca521ff419f1d74230e8aa5b1b3e9ce67f41c4b4c */ /* QIUTy = 02b0d7fbdc636a3bc34bbdd2a89291b567b0fb2af32383868bd40d4ba4cac9880c2540b8 */ static const uint8_t nist_kas_ecc_cdh_testvector_325_out[] = { /* ZIUT */ 0x01, 0xad, 0xf5, 0xa9, 0x63, 0x58, 0xe1, 0x8d, 0x69, 0xfd, 0x38, 0x3b, 0x4d, 0xc7, 0xb2, 0x0d, 0xd6, 0x46, 0xb6, 0x8a, 0x5c, 0x9f, 0x14, 0x17, 0xbc, 0xf4, 0x26, 0x24, 0x0c, 0xa2, 0x2b, 0x8f, 0x32, 0xbd, 0xf1, 0xa4 }; /* [B-409] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_326_public_x[] = { /* QCAVSx */ 0x01, 0x46, 0x98, 0x9a, 0x50, 0x29, 0x7b, 0xe3, 0x73, 0xdd, 0x66, 0x5c, 0x45, 0x45, 0x5a, 0x2a, 0xe4, 0xc2, 0x21, 0xda, 0x5c, 0xd4, 0x24, 0x00, 0x7b, 0xd9, 0x7f, 0x9e, 0x8e, 0x84, 0x6f, 0x96, 0x74, 0x0f, 0x3f, 0xa5, 0x8c, 0x3c, 0x94, 0x12, 0x96, 0x71, 0xcd, 0xd4, 0xd7, 0xea, 0x65, 0x0a, 0x2a, 0xad, 0xe9, 0xd7 }; static const uint8_t nist_kas_ecc_cdh_testvector_326_public_y[] = { /* QCAVSy */ 0x01, 0xb4, 0x2b, 0xff, 0xda, 0x84, 0x39, 0x46, 0xa1, 0x4a, 0xd6, 0x08, 0x0f, 0x95, 0xb8, 0xfc, 0x6b, 0x7e, 0x17, 0x35, 0x28, 0xd0, 0x8e, 0xd3, 0x6f, 0xe6, 0x40, 0xaa, 0xf8, 0x5a, 0xa0, 0x0f, 0xb5, 0xed, 0xd5, 0x90, 0x5a, 0x38, 0xb3, 0xc7, 0x96, 0x1b, 0x77, 0x22, 0xb7, 0x7b, 0x8d, 0xcb, 0x44, 0xbb, 0x25, 0xf5 }; static const uint8_t nist_kas_ecc_cdh_testvector_326_private[] = { /* dIUT */ 0x00, 0xac, 0xe9, 0x21, 0x03, 0xff, 0xe2, 0x62, 0xac, 0x17, 0xad, 0x42, 0xa4, 0x6d, 0x43, 0x66, 0xf4, 0xcb, 0x4c, 0x58, 0x0e, 0xff, 0x3a, 0xb1, 0xdd, 0xe6, 0xbd, 0xdf, 0xdb, 0xb7, 0x37, 0x48, 0x11, 0xd5, 0x2b, 0x1f, 0xa9, 0x93, 0x20, 0xb4, 0xaf, 0x5d, 0x4e, 0x92, 0x08, 0xc1, 0x4e, 0xb8, 0xef, 0xa8, 0x91, 0x6c }; /* QIUTx = 004ebc4d4acf9b404dabc3af3e8cbea8b88b32999d3ecb7f367b12eb3a6280b840038e22681637a7d16436e014f69616abf72e45 */ /* QIUTy = 009e24109541c8024217e9ab2c963fa9e373640095a6c25a26eefac58e4342c0c85448b2709592a12402fe2b68a793c558ce8cd6 */ static const uint8_t nist_kas_ecc_cdh_testvector_326_out[] = { /* ZIUT */ 0x01, 0xd4, 0x8a, 0x58, 0x6b, 0xe9, 0x28, 0x5f, 0xa3, 0x8d, 0xd3, 0xe7, 0x0b, 0x03, 0x30, 0xb0, 0xff, 0xeb, 0xd3, 0x27, 0xce, 0xef, 0xef, 0x88, 0xfd, 0xc1, 0x52, 0x1e, 0xf2, 0xfd, 0x61, 0xcb, 0xc9, 0x12, 0x4e, 0x03, 0xb0, 0xc9, 0x26, 0xe7, 0x0f, 0xa5, 0x6a, 0xcb, 0x3e, 0xdb, 0x54, 0xc3, 0xc4, 0x8f, 0xab, 0x2b }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_327_public_x[] = { /* QCAVSx */ 0x01, 0x7e, 0x9f, 0x01, 0xb1, 0xd6, 0xe5, 0x70, 0x23, 0x28, 0x33, 0x0d, 0x23, 0x2a, 0x1d, 0xd3, 0xf2, 0xc5, 0x92, 0xcc, 0x40, 0x9f, 0x6c, 0xae, 0xf0, 0x70, 0x84, 0x40, 0x83, 0x7f, 0x35, 0x97, 0x51, 0x0f, 0x11, 0x19, 0x54, 0xaa, 0x51, 0xe5, 0x64, 0x6c, 0xcf, 0x47, 0xef, 0xf1, 0xf0, 0x7a, 0x4f, 0x8a, 0xe1, 0xcb }; static const uint8_t nist_kas_ecc_cdh_testvector_327_public_y[] = { /* QCAVSy */ 0x00, 0x37, 0x14, 0xf6, 0xea, 0x1f, 0xd1, 0x43, 0xce, 0x75, 0x1e, 0x2d, 0x85, 0xba, 0xf5, 0x4c, 0x55, 0x23, 0x97, 0x61, 0x08, 0xed, 0x48, 0x2f, 0xd6, 0xae, 0x10, 0x37, 0x43, 0x13, 0x1c, 0xa7, 0x16, 0x02, 0x6b, 0x16, 0xa1, 0xe4, 0x96, 0x23, 0x1f, 0x99, 0x1c, 0xdc, 0x8f, 0x6d, 0xb4, 0x47, 0xf5, 0xf9, 0x5f, 0x8e }; static const uint8_t nist_kas_ecc_cdh_testvector_327_private[] = { /* dIUT */ 0x00, 0x3f, 0xf2, 0x2f, 0x7d, 0x7c, 0x04, 0x99, 0x89, 0xa4, 0x3e, 0x0e, 0xa3, 0xf5, 0xd6, 0x17, 0x98, 0x15, 0x9c, 0x17, 0x8a, 0xa7, 0x92, 0xd7, 0x9d, 0x1f, 0xfe, 0xbf, 0xf8, 0xdb, 0x70, 0xee, 0x1f, 0xde, 0x04, 0x0a, 0x4b, 0x5f, 0x1e, 0xd3, 0x3f, 0xb3, 0xff, 0x23, 0xc4, 0x4e, 0x7c, 0x6b, 0x21, 0xb0, 0x62, 0x3b }; /* QIUTx = 01d5c9260e73ea36e4deaaa4b8f4541f678066b690771a86f0dadc580fdb895981e6dd02dd264ed9f9c1763bd54a6052a2d3dba7 */ /* QIUTy = 011a706826365ece28e38b33620bca016d2d9338518dfd6868370476dacb41e3b947465769ebe81b620731673576f77451d0fe14 */ static const uint8_t nist_kas_ecc_cdh_testvector_327_out[] = { /* ZIUT */ 0x01, 0x85, 0x6c, 0x92, 0xb4, 0x6d, 0x67, 0x1d, 0x8a, 0x7f, 0x6c, 0xc4, 0x68, 0xef, 0xb6, 0x0a, 0x61, 0x09, 0x3d, 0x00, 0x6c, 0x95, 0xbb, 0x93, 0x1c, 0x1f, 0xcc, 0xc3, 0x36, 0xd4, 0xa8, 0x49, 0x0f, 0xe1, 0x7f, 0xe1, 0x63, 0xc9, 0x72, 0xba, 0xc3, 0x9f, 0xe7, 0x28, 0xf2, 0x45, 0x34, 0xa0, 0xc3, 0x4d, 0x2d, 0x21 }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_328_public_x[] = { /* QCAVSx */ 0x01, 0x83, 0xee, 0x35, 0x5a, 0x93, 0xcd, 0x13, 0xaf, 0xf1, 0x75, 0x6a, 0x08, 0xe5, 0x8e, 0x21, 0x95, 0xa8, 0x26, 0x29, 0x8d, 0x43, 0xf6, 0xd0, 0x7b, 0xb1, 0xc3, 0x82, 0xb4, 0xe5, 0x68, 0xd0, 0x08, 0x09, 0x39, 0x26, 0x00, 0x09, 0xc6, 0xaf, 0xcb, 0xed, 0x0f, 0x23, 0x25, 0x2e, 0x01, 0xd6, 0xd1, 0x4c, 0x6d, 0x8f }; static const uint8_t nist_kas_ecc_cdh_testvector_328_public_y[] = { /* QCAVSy */ 0x01, 0xb2, 0x30, 0x9b, 0x38, 0x19, 0xc2, 0x45, 0x4a, 0x48, 0xad, 0x25, 0x3a, 0xc9, 0x7b, 0xce, 0x3c, 0x79, 0xb5, 0x1f, 0x50, 0xed, 0x68, 0x03, 0xcf, 0x05, 0x46, 0x4b, 0x74, 0xa5, 0xa1, 0xde, 0x22, 0x11, 0x3e, 0x23, 0xc0, 0x18, 0xc5, 0xce, 0xd9, 0x18, 0x6d, 0xdb, 0x98, 0x1c, 0x62, 0x9e, 0x2e, 0x9d, 0xb3, 0xee }; static const uint8_t nist_kas_ecc_cdh_testvector_328_private[] = { /* dIUT */ 0x00, 0x96, 0xde, 0x2c, 0x39, 0x29, 0xc4, 0x08, 0x5f, 0x9c, 0xc1, 0xd3, 0x77, 0x8c, 0x2d, 0xbf, 0x3d, 0xb7, 0xf0, 0xf7, 0x7e, 0x7b, 0xa7, 0xbb, 0xc4, 0xe4, 0x08, 0xc7, 0xd6, 0x5e, 0x2c, 0x8b, 0x88, 0xb0, 0x75, 0x5f, 0x16, 0x0b, 0xad, 0xb5, 0x24, 0xe7, 0x69, 0x7c, 0x50, 0xe6, 0x0c, 0x8d, 0x99, 0xe5, 0x6d, 0xa4 }; /* QIUTx = 019c47d79914c8bdae754ec5ec1e81c8ff329a938e6971eee3c945c4ebf489e14b15e6135616c898c80b7b06b8af67061c769ab5 */ /* QIUTy = 000088022b4fb0e754ec4fab8cf4fc636255426755fa99b56805c15eac04325155dccbfa4145e161c40f189bdbaa3dd3e0c3d6c9 */ static const uint8_t nist_kas_ecc_cdh_testvector_328_out[] = { /* ZIUT */ 0x01, 0x97, 0x2e, 0x22, 0x5e, 0x08, 0xb4, 0x75, 0x12, 0xe9, 0x2c, 0x0d, 0xa9, 0xa1, 0xbd, 0xdd, 0xb1, 0x80, 0x2b, 0xe4, 0x02, 0x22, 0x2c, 0xac, 0x57, 0x88, 0xb3, 0x22, 0xe1, 0x01, 0xfe, 0xeb, 0x06, 0xb6, 0x6b, 0x2f, 0xe7, 0x26, 0xc1, 0xcd, 0x8a, 0xec, 0x92, 0xe0, 0x2f, 0x37, 0xd1, 0x5f, 0x4c, 0x97, 0xe6, 0x4d }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_329_public_x[] = { /* QCAVSx */ 0x00, 0xe8, 0x5d, 0xe9, 0xd6, 0x3e, 0x34, 0xe5, 0xc7, 0xbb, 0xa6, 0xff, 0x9b, 0x16, 0xf4, 0xc8, 0x4d, 0x95, 0xf1, 0x1d, 0xfe, 0x92, 0x10, 0x7b, 0x1f, 0xbe, 0xca, 0xe9, 0x8c, 0xe6, 0xef, 0xf3, 0xdb, 0x96, 0xd8, 0x69, 0x00, 0xbf, 0xd2, 0x2c, 0xd4, 0x23, 0xdb, 0xce, 0x1e, 0x57, 0x26, 0xbe, 0x8e, 0x59, 0x79, 0x33 }; static const uint8_t nist_kas_ecc_cdh_testvector_329_public_y[] = { /* QCAVSy */ 0x00, 0xb7, 0x14, 0x17, 0x71, 0xf7, 0xc8, 0x16, 0xd5, 0x5e, 0xc8, 0xc5, 0x38, 0x22, 0xd2, 0xe7, 0xa1, 0x92, 0xfa, 0x54, 0xa1, 0x7e, 0x5b, 0x99, 0xb2, 0xd9, 0x09, 0x61, 0xb5, 0x4a, 0x99, 0xfe, 0xd5, 0x3a, 0xba, 0x4b, 0xda, 0x1a, 0x40, 0x74, 0xad, 0x3d, 0x23, 0xf9, 0xc9, 0x11, 0x20, 0x57, 0x95, 0xb5, 0x45, 0x0b }; static const uint8_t nist_kas_ecc_cdh_testvector_329_private[] = { /* dIUT */ 0x00, 0xab, 0xd5, 0xd6, 0x1c, 0xde, 0x31, 0x18, 0x03, 0x01, 0xc2, 0x69, 0xd5, 0x2a, 0xf8, 0x56, 0xba, 0xa3, 0x9b, 0x89, 0xf5, 0xef, 0x45, 0x36, 0x7f, 0x55, 0x19, 0x21, 0x0c, 0x71, 0xd7, 0x7b, 0x31, 0x8d, 0x05, 0x3e, 0xc0, 0xc2, 0xf4, 0x9b, 0xf4, 0x6d, 0xe0, 0x5c, 0xab, 0xf2, 0x3c, 0x7d, 0x2b, 0xd7, 0xd2, 0x3f }; /* QIUTx = 01a7ef3d17c301e8661ba66c1cdee82a9b44d716909e3663b423dc06ef6be4f616cd179321ce7a572da4bca2e89b768edc8459b3 */ /* QIUTy = 00df743849a20bc3026062b420d3942f18e2d6c5307e6e1955e33b09d5951dc59b31a2b1d58c233e2c896e2d9ccaa8eeb8e8f113 */ static const uint8_t nist_kas_ecc_cdh_testvector_329_out[] = { /* ZIUT */ 0x00, 0xb6, 0x66, 0x1a, 0x86, 0x6a, 0xbb, 0xf1, 0x84, 0x3d, 0xea, 0x8f, 0x22, 0x0e, 0x36, 0x0f, 0xe7, 0xcd, 0x7d, 0x9e, 0x85, 0xc3, 0x16, 0x13, 0x8f, 0xd2, 0x53, 0x2a, 0x57, 0xd7, 0xd2, 0xa6, 0xbf, 0xe6, 0xe5, 0x51, 0x80, 0x19, 0xc6, 0x03, 0xa2, 0xd0, 0xe3, 0x38, 0xac, 0x6a, 0x86, 0x90, 0x09, 0x3c, 0x28, 0x83 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_330_public_x[] = { /* QCAVSx */ 0x00, 0xca, 0x87, 0x0a, 0xcb, 0xe4, 0xeb, 0x3a, 0xe6, 0x5e, 0xdd, 0x95, 0xd6, 0x94, 0x4e, 0xb0, 0x90, 0xe0, 0xe5, 0x50, 0x71, 0x2b, 0xe3, 0xb1, 0x36, 0x9e, 0x47, 0x32, 0x03, 0xf5, 0x2b, 0x18, 0x38, 0x65, 0x4f, 0x7a, 0x43, 0x42, 0xbd, 0x83, 0x09, 0x70, 0x4f, 0xed, 0x69, 0x33, 0xae, 0x9d, 0x16, 0x2c, 0xcd, 0x7d }; static const uint8_t nist_kas_ecc_cdh_testvector_330_public_y[] = { /* QCAVSy */ 0x01, 0x79, 0x6c, 0xc2, 0x86, 0xbf, 0x3d, 0x53, 0xad, 0x63, 0x69, 0x77, 0x37, 0x4f, 0x83, 0x56, 0xe4, 0x57, 0x30, 0xb7, 0xaa, 0x43, 0x80, 0x5f, 0xb5, 0x28, 0x01, 0xf7, 0x3b, 0xe3, 0xe9, 0xb3, 0x28, 0x08, 0x98, 0x4a, 0xae, 0xbb, 0xed, 0x7b, 0xe5, 0xe3, 0x9e, 0x51, 0x33, 0x5b, 0x0d, 0xff, 0x34, 0x78, 0x29, 0x48 }; static const uint8_t nist_kas_ecc_cdh_testvector_330_private[] = { /* dIUT */ 0x00, 0xf3, 0x23, 0xc8, 0xee, 0x43, 0x3c, 0x9b, 0xa1, 0x5d, 0x37, 0x08, 0x06, 0x98, 0x34, 0xac, 0xc4, 0xd9, 0x37, 0xbe, 0x50, 0x17, 0xe1, 0xd1, 0x82, 0xec, 0x76, 0x46, 0x6a, 0xba, 0x28, 0x2c, 0x73, 0xb5, 0xe3, 0xe9, 0x6f, 0xe1, 0x06, 0x14, 0x36, 0x41, 0x40, 0x2c, 0x72, 0xc6, 0x24, 0x84, 0xba, 0x1f, 0x12, 0xf2 }; /* QIUTx = 00b74f52520119fc08536cea584220de9b062401e64ff6359305c2e6b0c04a95f77baf53e23c326aee76211495c30b2c150b9275 */ /* QIUTy = 01540588e2fd5688d1b35763908c1f823eeeca8942f6216ce04cef66ed6991df6a22fb74411b13d06513a65b64e62815ee020697 */ static const uint8_t nist_kas_ecc_cdh_testvector_330_out[] = { /* ZIUT */ 0x01, 0x08, 0x89, 0x03, 0x7c, 0x70, 0x7d, 0x90, 0xb8, 0x33, 0xd0, 0x32, 0x56, 0xff, 0x2e, 0x8a, 0x5f, 0xfc, 0xe1, 0x6f, 0xb3, 0x61, 0x34, 0x86, 0x22, 0x14, 0x94, 0xa4, 0xfe, 0xe8, 0x2e, 0x74, 0x62, 0x5a, 0x93, 0xd9, 0x66, 0xc2, 0x02, 0x8d, 0x09, 0x30, 0x11, 0x54, 0x94, 0xf9, 0x45, 0x6c, 0xec, 0x4d, 0x2b, 0x6d }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_331_public_x[] = { /* QCAVSx */ 0x00, 0x7e, 0xb6, 0x1d, 0xfd, 0xdf, 0xc3, 0xc0, 0xd0, 0x83, 0xfe, 0x22, 0x13, 0x96, 0x79, 0x86, 0x38, 0x1d, 0x9e, 0x30, 0xe6, 0x84, 0xaf, 0xdf, 0x2b, 0xac, 0x8f, 0x1a, 0x36, 0x2e, 0x8c, 0x6d, 0x63, 0x58, 0xdf, 0x95, 0x93, 0x06, 0x00, 0x42, 0x7d, 0xfc, 0x1e, 0xb1, 0x41, 0x18, 0xfd, 0x12, 0x39, 0xb6, 0x7b, 0x69 }; static const uint8_t nist_kas_ecc_cdh_testvector_331_public_y[] = { /* QCAVSy */ 0x01, 0x5b, 0xa8, 0x7f, 0x98, 0x11, 0x4c, 0xec, 0x8b, 0x2c, 0xb4, 0x5b, 0xba, 0x3d, 0xcf, 0x00, 0x6b, 0x28, 0x7e, 0x07, 0xe3, 0xbe, 0xf1, 0xda, 0x27, 0xce, 0x08, 0xda, 0x9e, 0x4f, 0x48, 0xbd, 0x24, 0x1f, 0x59, 0xa1, 0xf9, 0xc9, 0x3c, 0x83, 0x78, 0x84, 0x71, 0x57, 0x50, 0xf4, 0x08, 0x5f, 0x91, 0x3f, 0x4f, 0x7a }; static const uint8_t nist_kas_ecc_cdh_testvector_331_private[] = { /* dIUT */ 0x00, 0x13, 0x3d, 0xa2, 0xba, 0x54, 0xb3, 0x62, 0x44, 0xc8, 0x04, 0x2f, 0x0e, 0x2d, 0xa3, 0x71, 0x8e, 0x56, 0xdb, 0xd2, 0x84, 0x8e, 0xf4, 0x27, 0xbd, 0xdb, 0x24, 0x17, 0x7f, 0x62, 0x44, 0x75, 0xb5, 0x34, 0x00, 0xaf, 0xdc, 0xb1, 0x88, 0x79, 0xe8, 0xfe, 0x6b, 0x46, 0x09, 0xa4, 0xf7, 0xbb, 0xc2, 0x15, 0x2b, 0x13 }; /* QIUTx = 00e3a2f4e63cfbc1ee844745ab3e1e5be573204609aece5e28b8fb8ab8ae06898467a95a7b59c0898a414abff2703ccbcdc09209 */ /* QIUTy = 010d73c43b630170395104acad6c1a563d3296632332a1481ddc2c31836bd1a3ee1a7364d7f5b8295db95a3745b4bbbeb8095bc2 */ static const uint8_t nist_kas_ecc_cdh_testvector_331_out[] = { /* ZIUT */ 0x01, 0x0a, 0x8a, 0xaf, 0xbb, 0x24, 0x3f, 0xc9, 0x46, 0x6b, 0xf3, 0x81, 0xea, 0xe1, 0x73, 0xc0, 0x1b, 0xe9, 0x5d, 0x88, 0xa9, 0xc1, 0x31, 0xb0, 0x7e, 0xd5, 0x4d, 0x2f, 0x11, 0x7c, 0xd3, 0xaf, 0x40, 0x19, 0xff, 0xb1, 0x96, 0xeb, 0xe8, 0x29, 0x0b, 0x12, 0x69, 0x62, 0x2f, 0x9d, 0xf2, 0x67, 0x63, 0xff, 0xa2, 0x11 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_332_public_x[] = { /* QCAVSx */ 0x00, 0x82, 0xf1, 0x48, 0xec, 0x34, 0xd1, 0xd0, 0x8b, 0x26, 0xe7, 0x9e, 0x37, 0x72, 0xe1, 0x2d, 0x65, 0x95, 0x98, 0xb7, 0x3b, 0x6f, 0xff, 0x0b, 0xab, 0x18, 0x45, 0xe9, 0xa5, 0xb5, 0x07, 0x14, 0x49, 0xef, 0x27, 0x59, 0xfe, 0xd6, 0x3a, 0xa8, 0x06, 0x24, 0xb8, 0x3a, 0x6b, 0x2e, 0x9d, 0x73, 0x9b, 0x83, 0xf6, 0xdb }; static const uint8_t nist_kas_ecc_cdh_testvector_332_public_y[] = { /* QCAVSy */ 0x01, 0x09, 0xce, 0xa0, 0x48, 0xa7, 0x20, 0xba, 0x74, 0x9f, 0xc5, 0x22, 0xc8, 0x5a, 0xf5, 0xfe, 0x78, 0x37, 0x51, 0xc3, 0x9f, 0xe8, 0xd0, 0x51, 0x5b, 0xa0, 0xf0, 0xd3, 0xdc, 0xd1, 0x9f, 0x18, 0xc2, 0x2d, 0xa3, 0x90, 0x9f, 0x02, 0xd7, 0x87, 0x35, 0xaa, 0x11, 0xb2, 0xfe, 0xba, 0x0f, 0x8d, 0x33, 0x0c, 0x57, 0x03 }; static const uint8_t nist_kas_ecc_cdh_testvector_332_private[] = { /* dIUT */ 0x00, 0xdf, 0x75, 0x54, 0xc0, 0x13, 0x2f, 0xd4, 0xe4, 0xa2, 0xb9, 0x21, 0x78, 0x75, 0xf9, 0x92, 0x4a, 0x55, 0xca, 0xb3, 0x19, 0xb7, 0x6a, 0x7c, 0x17, 0x9c, 0xf0, 0x22, 0x29, 0x37, 0x57, 0x99, 0x96, 0xcf, 0x94, 0x92, 0x0b, 0xaf, 0xd4, 0x53, 0xe5, 0x2f, 0x5d, 0x2f, 0xc4, 0x80, 0x01, 0x32, 0x9f, 0xbd, 0x78, 0xc4 }; /* QIUTx = 0160851cff947ce72a118aab4dad4ce2c3ce9bc330ce1d06efad7f630e45bbcf37097d94051d9d310abffa8d96ed22a847cbe693 */ /* QIUTy = 0079a3ddde636bc62af41e6ec0e073fe6462e38ad4b9e3a36ecc8113a2c6394ced21abdc8ec5969e58e009ea13dbe929a96709ca */ static const uint8_t nist_kas_ecc_cdh_testvector_332_out[] = { /* ZIUT */ 0x01, 0xe1, 0x7b, 0x88, 0x44, 0xc4, 0xc7, 0x57, 0x55, 0x3a, 0x62, 0x8d, 0x6f, 0x4c, 0x48, 0xf3, 0xa3, 0x37, 0xed, 0x2b, 0xbb, 0x6e, 0x40, 0x47, 0xdb, 0xfc, 0xfb, 0xfd, 0x02, 0xbb, 0x81, 0xc6, 0xe0, 0x96, 0xf8, 0xcc, 0xbb, 0x7f, 0x2e, 0x5d, 0x10, 0xee, 0x9c, 0xbc, 0xc9, 0x60, 0xe3, 0xa9, 0x9e, 0x79, 0xbd, 0x09 }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_333_public_x[] = { /* QCAVSx */ 0x00, 0x83, 0xca, 0x04, 0xdf, 0x84, 0x58, 0xe5, 0xe6, 0xce, 0x6e, 0x13, 0xb9, 0x37, 0xda, 0xb4, 0x98, 0x52, 0x1d, 0x82, 0x6f, 0xb9, 0x54, 0x12, 0x34, 0x56, 0x7e, 0x99, 0x5f, 0x06, 0x83, 0xc8, 0x0f, 0x43, 0x85, 0x16, 0xee, 0xff, 0x0c, 0xf8, 0x91, 0x8a, 0x5f, 0x8b, 0x52, 0x62, 0xcc, 0xdc, 0xa3, 0x99, 0x74, 0x17 }; static const uint8_t nist_kas_ecc_cdh_testvector_333_public_y[] = { /* QCAVSy */ 0x00, 0x5f, 0x8b, 0x3c, 0x20, 0xe3, 0xfe, 0x25, 0x59, 0xef, 0xe0, 0xe8, 0x5a, 0x12, 0x27, 0x6d, 0xf9, 0x22, 0xef, 0x0f, 0x42, 0x57, 0xfe, 0x70, 0x3b, 0xe2, 0x52, 0x9f, 0x6e, 0xff, 0xb6, 0xf2, 0x99, 0xa1, 0xa2, 0x51, 0xc0, 0x1e, 0x38, 0xd4, 0x3c, 0xa6, 0xca, 0x57, 0x6e, 0xf1, 0xe0, 0xbe, 0xb6, 0xc9, 0x12, 0x1e }; static const uint8_t nist_kas_ecc_cdh_testvector_333_private[] = { /* dIUT */ 0x00, 0x32, 0x73, 0x5d, 0xd7, 0xf1, 0x18, 0xd2, 0x9f, 0x9f, 0x3c, 0xab, 0x3a, 0x07, 0x2d, 0xb8, 0xc8, 0x86, 0xd4, 0x2f, 0xa5, 0xde, 0x7b, 0xea, 0x65, 0x03, 0x6e, 0xd3, 0xc8, 0xd4, 0x4a, 0x11, 0xe8, 0xf9, 0x6f, 0x4e, 0x1a, 0x6f, 0x25, 0x48, 0x88, 0xca, 0xb2, 0x14, 0x30, 0x51, 0x91, 0xa2, 0x6d, 0xd1, 0xda, 0xd1 }; /* QIUTx = 002d39e0f89fb875151ee3b354f8ea159e7fba6f23f8a764d49e07ef43f18d3cf86e1baaae0ad79d4000709a50252f1ce3603135 */ /* QIUTy = 00ce44a9b775b03cf42b310249660794c25e0422b03ad9babaa23610613251fe0e54046e04f9210436dd376003d18f98dfdae189 */ static const uint8_t nist_kas_ecc_cdh_testvector_333_out[] = { /* ZIUT */ 0x01, 0x16, 0x7e, 0xdf, 0x7a, 0x3c, 0x50, 0xe1, 0x3b, 0xe1, 0x26, 0xeb, 0x2c, 0xaf, 0x6b, 0x5f, 0x8f, 0x76, 0x1c, 0xc8, 0xdb, 0xa4, 0x13, 0x24, 0x64, 0x23, 0xb8, 0x77, 0xdf, 0x74, 0xa3, 0xaa, 0x3f, 0x48, 0x14, 0x4b, 0x44, 0xcd, 0x13, 0x3a, 0xd9, 0xf2, 0xd0, 0x5e, 0xf9, 0x7a, 0x08, 0xf7, 0xca, 0x51, 0x1d, 0x7f }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_334_public_x[] = { /* QCAVSx */ 0x01, 0x31, 0x15, 0x36, 0xa9, 0x74, 0x5b, 0x74, 0x75, 0xe6, 0xc2, 0xfd, 0x72, 0x4c, 0x23, 0xd9, 0xea, 0x66, 0x80, 0x3a, 0x13, 0x9b, 0x47, 0xe3, 0xae, 0x26, 0x3b, 0x0f, 0xb7, 0xe4, 0x2e, 0x33, 0x16, 0x27, 0x9b, 0xbf, 0x62, 0x2a, 0xe2, 0x62, 0x53, 0x1b, 0x2e, 0x22, 0x83, 0xec, 0xc1, 0xa6, 0x12, 0x7c, 0x9b, 0x09 }; static const uint8_t nist_kas_ecc_cdh_testvector_334_public_y[] = { /* QCAVSy */ 0x01, 0xd4, 0x8c, 0xcc, 0x78, 0x1f, 0x0b, 0xde, 0xc3, 0x13, 0x09, 0x10, 0x04, 0x4b, 0x76, 0x90, 0x9a, 0x9a, 0xbd, 0x7f, 0xcb, 0x18, 0x40, 0x7d, 0xc4, 0x2f, 0x63, 0x91, 0x2f, 0xa2, 0x66, 0x72, 0x08, 0x00, 0x3a, 0xb2, 0xd2, 0x81, 0x02, 0xad, 0xcf, 0xb9, 0x3d, 0xdc, 0x05, 0x37, 0x60, 0xe5, 0x3c, 0x2d, 0xaa, 0x78 }; static const uint8_t nist_kas_ecc_cdh_testvector_334_private[] = { /* dIUT */ 0x00, 0xb0, 0x4f, 0x33, 0xb6, 0x87, 0x99, 0x63, 0x0d, 0x62, 0xf4, 0x43, 0x37, 0xc7, 0x7c, 0x5a, 0x6b, 0x6e, 0x0f, 0x76, 0x06, 0xb5, 0xc8, 0x72, 0x44, 0xaa, 0x4e, 0x7d, 0xa6, 0x98, 0xcc, 0x8f, 0xf1, 0xd3, 0x31, 0x1b, 0x48, 0xee, 0x7c, 0x9a, 0x68, 0x12, 0xba, 0xf9, 0x05, 0x43, 0x79, 0xae, 0xb6, 0x1c, 0x0c, 0x13 }; /* QIUTx = 01c5940c2de2b3735824ae2994c15086fa958750e4d83123af047e9b3c264746c9b5d919da215355d8c28b2808a37d0cc5f2f6a1 */ /* QIUTy = 000abfe6f1510a182eff78dd802e9ba21e668aea5732c732ddfc5df9301f5899f02bae80f8282601ef3eefe414ef2c726fe00258 */ static const uint8_t nist_kas_ecc_cdh_testvector_334_out[] = { /* ZIUT */ 0x01, 0x5c, 0x0d, 0x20, 0x2b, 0xfd, 0xee, 0x2d, 0xfb, 0xd4, 0xbe, 0x91, 0x62, 0x51, 0x71, 0x99, 0x2e, 0x6c, 0x6b, 0x1a, 0x1d, 0x06, 0xcc, 0x1b, 0x2b, 0x66, 0xed, 0x64, 0xc9, 0xd9, 0x28, 0xbd, 0x4f, 0x06, 0x29, 0x12, 0x90, 0x0d, 0x3f, 0x89, 0x04, 0x5c, 0x71, 0x90, 0xf5, 0x13, 0xd3, 0xb0, 0x19, 0xa6, 0x34, 0xf5 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_335_public_x[] = { /* QCAVSx */ 0x01, 0x0c, 0x27, 0x35, 0x30, 0xf5, 0x4f, 0xe1, 0x74, 0xbb, 0xbd, 0x5c, 0x27, 0x71, 0xa5, 0x5a, 0x42, 0xe6, 0x40, 0x50, 0xc3, 0xbf, 0x25, 0x23, 0xe6, 0x08, 0x2a, 0xf4, 0x76, 0xeb, 0x02, 0x57, 0x87, 0x69, 0x6e, 0xdf, 0x6e, 0x43, 0x8d, 0xd0, 0x56, 0xb5, 0x98, 0xf5, 0x00, 0x06, 0x33, 0xc2, 0x64, 0xfd, 0x7b, 0xa5 }; static const uint8_t nist_kas_ecc_cdh_testvector_335_public_y[] = { /* QCAVSy */ 0x00, 0x44, 0x3e, 0x72, 0xda, 0x93, 0xb0, 0xc7, 0x82, 0x5f, 0x42, 0x23, 0xc7, 0x96, 0x82, 0x6f, 0xd1, 0x32, 0x23, 0x45, 0xea, 0x25, 0xad, 0xf3, 0xdf, 0x1a, 0x2c, 0x69, 0x58, 0x90, 0x8c, 0x0f, 0xd9, 0xb1, 0x3e, 0x93, 0xcc, 0x00, 0x5f, 0x4e, 0xcb, 0x15, 0x5a, 0x2f, 0xff, 0x7a, 0xc5, 0x4f, 0xa8, 0x18, 0x07, 0x85 }; static const uint8_t nist_kas_ecc_cdh_testvector_335_private[] = { /* dIUT */ 0x00, 0xd4, 0xeb, 0xc3, 0x1c, 0x9a, 0x65, 0xee, 0x3b, 0x1a, 0xbd, 0x9d, 0x6e, 0x64, 0x95, 0x78, 0x0c, 0x54, 0xe6, 0x33, 0xf5, 0xa2, 0xa9, 0xf6, 0x1c, 0x84, 0x08, 0xd7, 0x67, 0xd0, 0x91, 0x6d, 0x91, 0xcb, 0x54, 0xcf, 0xcd, 0x93, 0x75, 0x38, 0xdf, 0x92, 0xcf, 0xc4, 0x59, 0x38, 0xe3, 0x3b, 0x77, 0xd7, 0x24, 0xf2 }; /* QIUTx = 014dfaaa70518f367cdfca89795a0db374bb7b407a58caac24ba46824dce78501067d7e0467d30b9e1fdbb0a7eace15fb0c208cf */ /* QIUTy = 019d62be2b12a17a78f6c9f7e703669765f763c6235fe7af78f25044e99c4b1b90653640b3f0ae481a55d47d1eb17b86c5bada1b */ static const uint8_t nist_kas_ecc_cdh_testvector_335_out[] = { /* ZIUT */ 0x00, 0x7c, 0x32, 0x38, 0x3a, 0xae, 0x80, 0xe1, 0x11, 0x12, 0x07, 0x89, 0x4c, 0x8c, 0xc5, 0xbe, 0x66, 0xfe, 0x53, 0x8a, 0xf4, 0xa1, 0x91, 0x95, 0x74, 0x2a, 0x94, 0xa4, 0xc3, 0xf5, 0xc7, 0x65, 0xd9, 0x77, 0x6a, 0x56, 0x17, 0x7c, 0x48, 0x5d, 0xdb, 0x53, 0xc0, 0x38, 0xb7, 0x04, 0x78, 0x95, 0x9d, 0x37, 0x46, 0x27 }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_336_public_x[] = { /* QCAVSx */ 0x01, 0x3b, 0xeb, 0x8d, 0x36, 0xd1, 0xe7, 0xf5, 0x3d, 0x80, 0xbe, 0xea, 0x33, 0xef, 0xc3, 0xe0, 0x09, 0x8d, 0xea, 0xea, 0xa1, 0x79, 0x77, 0xda, 0x8f, 0x9a, 0xae, 0x9c, 0x57, 0x6e, 0x79, 0x20, 0xe8, 0xf6, 0xda, 0x55, 0xa2, 0x09, 0x30, 0xce, 0x60, 0xfd, 0x49, 0x0b, 0x4f, 0xb0, 0x15, 0x4d, 0x49, 0x27, 0x7d, 0x99 }; static const uint8_t nist_kas_ecc_cdh_testvector_336_public_y[] = { /* QCAVSy */ 0x01, 0x1d, 0xc1, 0xd8, 0x7f, 0x35, 0x2e, 0x12, 0xbd, 0xb4, 0x1a, 0x1b, 0x7a, 0x1f, 0x1e, 0x51, 0x66, 0x29, 0xed, 0x32, 0x3c, 0x5d, 0x5b, 0x26, 0x3f, 0xf0, 0x36, 0xf0, 0x23, 0xf0, 0xff, 0x5f, 0x72, 0x2d, 0x05, 0x6c, 0x24, 0xa4, 0x11, 0xf5, 0x3b, 0x34, 0x7d, 0x07, 0x86, 0xd8, 0x4f, 0x7b, 0xe8, 0x79, 0x10, 0x5a }; static const uint8_t nist_kas_ecc_cdh_testvector_336_private[] = { /* dIUT */ 0x00, 0x26, 0x17, 0x6a, 0xaf, 0x98, 0xa6, 0x43, 0x35, 0x66, 0xf1, 0xdc, 0xc1, 0x91, 0x9e, 0x94, 0x45, 0x3e, 0x9c, 0xbf, 0x3c, 0x97, 0xe0, 0x69, 0xb4, 0xa1, 0x74, 0x26, 0x44, 0x91, 0x67, 0xf6, 0xa1, 0x08, 0x9a, 0xc1, 0x6a, 0x10, 0x2a, 0x4b, 0x3e, 0x43, 0x2a, 0x97, 0x8b, 0xfb, 0x46, 0x25, 0x5d, 0xc4, 0x3d, 0x1a }; /* QIUTx = 01535fc949b49030308bc0da9793d57088766ac8cf22e8d6c276d8f3f7650f30135e1f6c00300c1344e2f0306ea0e270b09a80af */ /* QIUTy = 00b8fc3fa61dc22c55501f2a6b2944946d99f7bbfefbec7acf4fb200c1002e322c39172ec0a2b6ce0807f1e3ebb1ea3400353143 */ static const uint8_t nist_kas_ecc_cdh_testvector_336_out[] = { /* ZIUT */ 0x01, 0x16, 0x61, 0x07, 0xab, 0x98, 0xdb, 0x1d, 0xbe, 0x22, 0xc5, 0x88, 0x8a, 0x70, 0xc9, 0x92, 0xaf, 0x4f, 0xaf, 0x46, 0x23, 0xef, 0x59, 0x38, 0x02, 0xae, 0xdf, 0xe4, 0x33, 0x80, 0x9c, 0x53, 0xef, 0x4a, 0xb0, 0xb2, 0xdc, 0x4d, 0xc2, 0x54, 0x64, 0x88, 0xb3, 0x56, 0xef, 0x32, 0x65, 0x35, 0x60, 0x55, 0xd8, 0xf5 }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_337_public_x[] = { /* QCAVSx */ 0x01, 0x69, 0x0c, 0x74, 0x64, 0x9e, 0x92, 0xe1, 0xc1, 0x00, 0x4f, 0x43, 0xfd, 0x6e, 0x46, 0x90, 0xbe, 0x59, 0x59, 0x04, 0xc5, 0x6d, 0x2a, 0xcd, 0x85, 0xa4, 0x9a, 0xf0, 0xa1, 0x7d, 0x34, 0x36, 0x8c, 0x87, 0x68, 0xd0, 0x39, 0xed, 0xe9, 0xc9, 0x2a, 0xd2, 0x6b, 0x26, 0x30, 0x6b, 0x5f, 0xfd, 0xef, 0x7b, 0xfd, 0x19 }; static const uint8_t nist_kas_ecc_cdh_testvector_337_public_y[] = { /* QCAVSy */ 0x00, 0x81, 0x27, 0x5f, 0x7e, 0x2f, 0xf0, 0x68, 0xa6, 0xc1, 0xb9, 0x2d, 0xd3, 0x8c, 0x03, 0x42, 0x56, 0xed, 0x73, 0x22, 0xb0, 0x27, 0x70, 0x29, 0x94, 0xc7, 0x4f, 0x5b, 0x81, 0x81, 0x24, 0xd3, 0x4a, 0x19, 0x09, 0x87, 0xfd, 0x65, 0x88, 0x92, 0xfc, 0x99, 0xe7, 0xac, 0xb9, 0x87, 0x7b, 0xd6, 0xfe, 0x94, 0x69, 0x19 }; static const uint8_t nist_kas_ecc_cdh_testvector_337_private[] = { /* dIUT */ 0x00, 0xbf, 0x3e, 0x73, 0x95, 0xc7, 0x2a, 0xa8, 0x4c, 0x09, 0x60, 0xe5, 0xc6, 0x90, 0x22, 0xce, 0x39, 0x06, 0x74, 0x04, 0x53, 0x44, 0x73, 0xc4, 0xc7, 0x82, 0x94, 0x24, 0xf8, 0x1f, 0x1d, 0x44, 0xb3, 0x1f, 0x20, 0xe2, 0xb9, 0x82, 0xe2, 0x51, 0xcf, 0x9f, 0xfb, 0x32, 0x7a, 0x7d, 0x83, 0x4f, 0x59, 0xd1, 0x94, 0x8a }; /* QIUTx = 011cbc4ed9036a27effc89ffd55fa1e3ead0fb93bacfa0a78bcafe3914ab1a97860fec1334caaba07243591603e67791aea4bcb7 */ /* QIUTy = 0101074c444627630ad0a5258e24438d71f26ab94d05bb47d1ab97858c4b92c6ff1cb9be66b984fe8e16e44f393e63f9d64281c8 */ static const uint8_t nist_kas_ecc_cdh_testvector_337_out[] = { /* ZIUT */ 0x00, 0x7e, 0x7a, 0x24, 0x90, 0x94, 0xeb, 0x52, 0xbe, 0xe0, 0x11, 0x5b, 0x8b, 0xd5, 0x54, 0x5f, 0x81, 0xbf, 0x0b, 0x7d, 0x66, 0x99, 0x8f, 0xe1, 0x24, 0xc9, 0xa3, 0xdd, 0x3c, 0x57, 0x15, 0xd0, 0x3b, 0x2f, 0x97, 0x3d, 0x47, 0xc1, 0x9a, 0xf5, 0x10, 0x8a, 0x2a, 0xe0, 0x05, 0xfc, 0xca, 0x65, 0xe6, 0x1f, 0x33, 0x7d }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_338_public_x[] = { /* QCAVSx */ 0x00, 0x5c, 0x24, 0xf4, 0xad, 0x9b, 0xdc, 0xb1, 0x46, 0x06, 0x85, 0xa2, 0x2d, 0xa5, 0x4d, 0xbd, 0xdd, 0x15, 0x07, 0xef, 0x6d, 0xe4, 0x69, 0xda, 0x41, 0x70, 0xce, 0x30, 0x14, 0x75, 0x79, 0xa5, 0x49, 0x45, 0xdb, 0xb1, 0xbc, 0xe9, 0xf0, 0x2e, 0x47, 0x00, 0x33, 0xbb, 0x15, 0xfc, 0x1a, 0x70, 0xf8, 0x31, 0xe7, 0x9b }; static const uint8_t nist_kas_ecc_cdh_testvector_338_public_y[] = { /* QCAVSy */ 0x01, 0x7c, 0xa9, 0x32, 0xb9, 0x0a, 0x08, 0xca, 0x2e, 0x3f, 0x55, 0xc5, 0x0c, 0xc0, 0xe1, 0x3d, 0x27, 0x9d, 0x7b, 0xc9, 0x11, 0x9c, 0x57, 0x3c, 0x3f, 0x74, 0x14, 0x10, 0xbb, 0x7c, 0x1c, 0xad, 0x10, 0x76, 0xc3, 0xba, 0x42, 0xae, 0xd1, 0xce, 0x69, 0xd5, 0x62, 0x28, 0xb0, 0x82, 0xfb, 0x6d, 0xe0, 0xee, 0xfb, 0x68 }; static const uint8_t nist_kas_ecc_cdh_testvector_338_private[] = { /* dIUT */ 0x00, 0x96, 0xd4, 0x03, 0xb0, 0xfa, 0x60, 0x1c, 0x9a, 0x75, 0xaa, 0x7d, 0xe9, 0xfe, 0x9e, 0x11, 0xd4, 0x2e, 0xfa, 0x93, 0xd9, 0x6d, 0xd3, 0x51, 0x02, 0xda, 0x05, 0xd3, 0xac, 0x80, 0x7e, 0x44, 0x19, 0x4e, 0x18, 0xe7, 0x9c, 0x8b, 0x5b, 0xe1, 0x1c, 0x5f, 0xb3, 0x9c, 0x8b, 0xd4, 0xe3, 0x12, 0x32, 0x5a, 0xfa, 0xf2 }; /* QIUTx = 0009833946294d4aeecdb6f7254ca489c0ff13af2dc6e2ca5626835d5dd22241440c37a63690cd11867581ff61b7252d07afb8ff */ /* QIUTy = 006183fee6f4d6ef5b723c53c96c5c1ecdd84652e379c937878d766f83370500412359c22d4778bdf807b3c84e5b83350910a1a9 */ static const uint8_t nist_kas_ecc_cdh_testvector_338_out[] = { /* ZIUT */ 0x00, 0xb9, 0xd8, 0xb6, 0x86, 0x42, 0xb2, 0x72, 0x93, 0x40, 0xd8, 0xb7, 0xc5, 0xed, 0x3b, 0x3a, 0x89, 0x13, 0xc4, 0xa3, 0xf6, 0xb9, 0x47, 0x47, 0x30, 0x17, 0xc0, 0xe1, 0x05, 0xbc, 0x7e, 0xdc, 0x60, 0xda, 0xa9, 0xb0, 0x73, 0x27, 0x72, 0x22, 0x0f, 0x93, 0xec, 0xa4, 0x87, 0x80, 0x85, 0xf7, 0x56, 0xe3, 0xad, 0xad }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_339_public_x[] = { /* QCAVSx */ 0x00, 0xaa, 0xbf, 0x6a, 0xab, 0xb3, 0xe9, 0x0f, 0x95, 0x6d, 0x70, 0x04, 0xff, 0xc8, 0x93, 0xc7, 0x0f, 0x8e, 0x90, 0xcd, 0xc3, 0x1f, 0xc0, 0xc7, 0xa8, 0x8f, 0x16, 0x32, 0x05, 0x41, 0xd5, 0x84, 0x43, 0xaf, 0x39, 0x40, 0x5d, 0x88, 0x8d, 0x96, 0x76, 0x55, 0x7c, 0xdd, 0x39, 0x4b, 0x27, 0xdc, 0x54, 0x49, 0xf9, 0x45 }; static const uint8_t nist_kas_ecc_cdh_testvector_339_public_y[] = { /* QCAVSy */ 0x01, 0x27, 0xf2, 0x6d, 0xba, 0x06, 0xc3, 0x3f, 0x8f, 0xb4, 0x5d, 0x95, 0x5c, 0xfd, 0xb5, 0xce, 0xdd, 0xa9, 0x3d, 0xd8, 0xa4, 0x5d, 0xb4, 0x2e, 0xe0, 0xb9, 0x26, 0x4a, 0x05, 0x4c, 0x16, 0xa8, 0x7b, 0xed, 0xad, 0x45, 0xc0, 0xd9, 0xa0, 0xf3, 0x5b, 0xbc, 0x6a, 0xa7, 0xa1, 0x29, 0x56, 0x22, 0xe8, 0x3e, 0xbe, 0x8b }; static const uint8_t nist_kas_ecc_cdh_testvector_339_private[] = { /* dIUT */ 0x00, 0x67, 0x12, 0x5e, 0xc3, 0x09, 0xab, 0x5d, 0xc7, 0xea, 0x56, 0x8f, 0x88, 0x15, 0xa2, 0xb3, 0x0c, 0xfa, 0xc3, 0x36, 0x6b, 0xb4, 0xf0, 0x16, 0x0d, 0x53, 0x73, 0x8a, 0xb9, 0x95, 0xce, 0x75, 0x68, 0x1f, 0xcd, 0x5e, 0x49, 0x2f, 0x3a, 0x97, 0x25, 0xb4, 0xcf, 0x75, 0xba, 0x43, 0x01, 0xa7, 0x86, 0x04, 0x93, 0x42 }; /* QIUTx = 01f1d1aee5fc594ca4a22b81bad707d821bef3253966f5d77956157483961696f4c60476a42b452b89c1ecb3615475ec9c96dc87 */ /* QIUTy = 00755c5ef55889b415cefa0e881a3efc9be86f36c67615423b452eab4cd5611aef4198ddb31aecb434eeeec12edd05913af19fc4 */ static const uint8_t nist_kas_ecc_cdh_testvector_339_out[] = { /* ZIUT */ 0x01, 0x7d, 0x60, 0x39, 0x4c, 0x7e, 0xe6, 0x4b, 0xa7, 0x3d, 0xb9, 0x14, 0x84, 0x71, 0x33, 0x70, 0xda, 0xa8, 0x21, 0x25, 0x58, 0x07, 0x34, 0x9c, 0x23, 0x7e, 0x58, 0x49, 0x41, 0x1b, 0xf0, 0xba, 0xb3, 0xa1, 0xb3, 0x53, 0xbe, 0x3c, 0xd0, 0x7e, 0xed, 0xdc, 0x5c, 0x2f, 0xfc, 0x74, 0x33, 0x62, 0x25, 0xda, 0xe6, 0xf7 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_340_public_x[] = { /* QCAVSx */ 0x00, 0x1f, 0x4f, 0xfb, 0xf2, 0x2f, 0x67, 0xc1, 0x59, 0x1b, 0x0a, 0x77, 0x0e, 0x56, 0x3c, 0x0a, 0xba, 0x66, 0xfe, 0x01, 0x56, 0x1c, 0x5e, 0x22, 0x7e, 0x52, 0x2b, 0x5d, 0xde, 0x23, 0xc7, 0x48, 0xca, 0xcf, 0x8f, 0x4a, 0x02, 0x29, 0x0d, 0xe2, 0x6b, 0x47, 0x76, 0x7d, 0x38, 0x8a, 0x5c, 0x83, 0x6d, 0x3e, 0xff, 0x4b }; static const uint8_t nist_kas_ecc_cdh_testvector_340_public_y[] = { /* QCAVSy */ 0x00, 0x2d, 0x27, 0x3f, 0x2e, 0x85, 0x16, 0xe5, 0x08, 0x38, 0x8f, 0x8e, 0xd2, 0x01, 0x5e, 0xc9, 0xfe, 0x67, 0xc6, 0x6f, 0x83, 0x2c, 0xf2, 0xb2, 0x61, 0xdf, 0xad, 0x58, 0x56, 0x12, 0x80, 0x42, 0xfb, 0x4a, 0x61, 0xa9, 0x1a, 0x37, 0xb3, 0x41, 0xde, 0x42, 0x96, 0xd4, 0xbf, 0x63, 0xbf, 0x67, 0xa3, 0x45, 0x8a, 0x74 }; static const uint8_t nist_kas_ecc_cdh_testvector_340_private[] = { /* dIUT */ 0x00, 0x6b, 0x2c, 0xc2, 0x38, 0x7f, 0x69, 0xaf, 0xd4, 0x39, 0x78, 0xb7, 0xf6, 0x6b, 0xd1, 0x76, 0x66, 0x25, 0x70, 0x81, 0xba, 0x4d, 0x66, 0xee, 0x6a, 0x9a, 0x82, 0xb7, 0xc8, 0x7c, 0x4a, 0xc5, 0xf0, 0xeb, 0xa6, 0xbc, 0x2d, 0x98, 0x1c, 0xa1, 0xda, 0x9f, 0xf2, 0x02, 0xba, 0x72, 0xcb, 0x7f, 0xe9, 0xc0, 0x6c, 0xf0 }; /* QIUTx = 0086a44d6ee4e8c50d1e10d7d1d113a9610750210679e0e4cab8c62267842938ad5d933c980eef9d4644791bbfd35bbac649d213 */ /* QIUTy = 011da63212631605fea0e93f5826b1929b2bd1db950615fcb05eb47bd9cb69eae03b1c33d7a9e47b335a40498238fedb8999b04d */ static const uint8_t nist_kas_ecc_cdh_testvector_340_out[] = { /* ZIUT */ 0x00, 0xb1, 0x9e, 0x05, 0x2e, 0xdd, 0x44, 0x42, 0x1e, 0xe2, 0xf5, 0xba, 0x84, 0x59, 0x11, 0xfe, 0xd9, 0x18, 0x3d, 0x88, 0x5d, 0xa8, 0x5d, 0x51, 0xdc, 0x81, 0x9c, 0xa5, 0x65, 0xce, 0x57, 0x4f, 0x7d, 0xb2, 0x57, 0x50, 0x98, 0x76, 0x37, 0x7b, 0x40, 0xc5, 0xa0, 0x83, 0x49, 0x01, 0x95, 0x63, 0xb6, 0x0e, 0x13, 0xe9 }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_341_public_x[] = { /* QCAVSx */ 0x01, 0xb0, 0x83, 0x3e, 0xb3, 0x44, 0x04, 0x50, 0xe3, 0xfa, 0x51, 0x48, 0xc2, 0x5c, 0x2d, 0xf2, 0xe0, 0x02, 0x06, 0x26, 0xf2, 0x40, 0x74, 0x22, 0x21, 0x7e, 0x4e, 0xcb, 0x8b, 0xd8, 0xa7, 0x51, 0xa7, 0x2b, 0xab, 0x2e, 0xc5, 0x64, 0x2a, 0xe9, 0x0f, 0xd2, 0x9d, 0x8c, 0x4d, 0x79, 0xe9, 0xcc, 0x19, 0x1b, 0x5b, 0xa5 }; static const uint8_t nist_kas_ecc_cdh_testvector_341_public_y[] = { /* QCAVSy */ 0x00, 0x23, 0x07, 0x89, 0x05, 0xb6, 0xa3, 0x30, 0x09, 0xff, 0xea, 0x1a, 0x19, 0x77, 0xdb, 0x94, 0x35, 0x79, 0xaf, 0xbe, 0xb8, 0x71, 0x97, 0x00, 0x59, 0x69, 0x6b, 0x29, 0xef, 0x90, 0xdd, 0x84, 0x61, 0x77, 0x6b, 0x34, 0x3a, 0x09, 0xc8, 0x53, 0xa5, 0x38, 0xe4, 0xf2, 0x2f, 0xdf, 0x85, 0x4f, 0xcb, 0xf3, 0xb7, 0x34 }; static const uint8_t nist_kas_ecc_cdh_testvector_341_private[] = { /* dIUT */ 0x00, 0x3e, 0x09, 0x8f, 0x3f, 0x19, 0x5e, 0x89, 0xda, 0x71, 0xd6, 0x36, 0x70, 0x00, 0xf8, 0x04, 0x07, 0x9a, 0xdc, 0xa3, 0x27, 0x5b, 0x2e, 0x79, 0x3e, 0x8d, 0x31, 0x2c, 0x8e, 0x40, 0x2c, 0xf0, 0xd0, 0xce, 0x53, 0x31, 0x74, 0x2f, 0x87, 0x51, 0x5f, 0x4d, 0xd9, 0xcc, 0x66, 0x82, 0x46, 0x19, 0x4b, 0x95, 0x72, 0xb6 }; /* QIUTx = 010af4ae334ba40bd6538e0f095aa56f61a2bd2b5f38e954b7617d92ba10603cdcca836554d0242ddb37d5e1576b0be69f0eece7 */ /* QIUTy = 01b335521aec305f314d7f23ed28cc0c4d23f33a6785fc6c6de93e5fabce271302f9557f6d2ae77c52720eda5a2e15436443dfd2 */ static const uint8_t nist_kas_ecc_cdh_testvector_341_out[] = { /* ZIUT */ 0x01, 0x69, 0x75, 0x12, 0x67, 0x6a, 0xe5, 0x6f, 0xf5, 0xab, 0x77, 0x8c, 0x41, 0x10, 0x42, 0xd2, 0x17, 0xad, 0x24, 0xa2, 0x4e, 0xa0, 0x5b, 0xbc, 0x25, 0x3e, 0x43, 0x95, 0xfe, 0xcc, 0x8a, 0x07, 0xfe, 0x77, 0xae, 0x0c, 0xa4, 0xed, 0x97, 0x74, 0x59, 0xf1, 0xa1, 0x4d, 0x9b, 0x83, 0x93, 0x1b, 0xcc, 0xf4, 0x61, 0x07 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_342_public_x[] = { /* QCAVSx */ 0x01, 0x74, 0xbd, 0x23, 0x3f, 0x86, 0x1c, 0x7b, 0x85, 0x3c, 0xca, 0x8f, 0x5a, 0x38, 0x35, 0x74, 0x84, 0x9e, 0xf2, 0xcd, 0x76, 0xef, 0x22, 0xbc, 0x0e, 0x15, 0x9f, 0x71, 0x3a, 0x1d, 0x07, 0x38, 0x7c, 0x42, 0x03, 0xb1, 0x1f, 0x4c, 0x33, 0x9b, 0x66, 0x96, 0x74, 0xfc, 0xf1, 0xda, 0xc1, 0x99, 0x70, 0x3b, 0xeb, 0x07 }; static const uint8_t nist_kas_ecc_cdh_testvector_342_public_y[] = { /* QCAVSy */ 0x01, 0xe2, 0xc7, 0x78, 0xcc, 0xa6, 0x49, 0x63, 0xd8, 0x73, 0x29, 0xe5, 0x7c, 0x8b, 0xc9, 0x6d, 0x0f, 0x67, 0x37, 0x04, 0x1f, 0xd0, 0x87, 0xda, 0xfc, 0x07, 0xdd, 0x67, 0x0e, 0x2c, 0xe7, 0x25, 0x54, 0x7e, 0x1a, 0x26, 0x1c, 0x43, 0xfb, 0xc5, 0x4e, 0x14, 0xc3, 0x47, 0x3e, 0xbd, 0xbb, 0x31, 0xfd, 0xa8, 0x47, 0x3a }; static const uint8_t nist_kas_ecc_cdh_testvector_342_private[] = { /* dIUT */ 0x00, 0x7d, 0x84, 0x93, 0x13, 0xc6, 0x49, 0x9d, 0xae, 0x47, 0x2b, 0x0b, 0xdd, 0xb7, 0x6d, 0xec, 0x45, 0x80, 0x6f, 0x82, 0xe0, 0x98, 0x72, 0x33, 0x01, 0xdf, 0x33, 0xb6, 0xbb, 0xb9, 0x7f, 0x79, 0x4b, 0xf2, 0x68, 0x79, 0xfc, 0x33, 0xc2, 0x97, 0x3f, 0x86, 0xc1, 0x55, 0x15, 0x49, 0x64, 0x1a, 0x81, 0x9b, 0x57, 0x11 }; /* QIUTx = 004812af1937630b8ea7d0ff723cbb05b7a2740fc4c9be792db204f929674c32e47d85e4770b903d3290a6d62c274cb257b76837 */ /* QIUTy = 008c6f61711786bf5c54eb0c1b3126d641b24a6662b67b257302a9a61aa8cd503846bcbb1b14fa5c97454368b6c27dd2de2ae80b */ static const uint8_t nist_kas_ecc_cdh_testvector_342_out[] = { /* ZIUT */ 0x01, 0x59, 0x60, 0xea, 0x8b, 0x92, 0xbd, 0x77, 0xd5, 0x28, 0x74, 0xe3, 0xea, 0x82, 0xed, 0x17, 0x63, 0x44, 0x01, 0x89, 0xd6, 0x87, 0x28, 0xd3, 0x97, 0x4d, 0x4c, 0x01, 0xd6, 0xaa, 0xfd, 0xbb, 0x52, 0x74, 0x64, 0x8f, 0x6f, 0x3e, 0xaa, 0x4f, 0xaf, 0x3f, 0xc7, 0x2d, 0x09, 0x89, 0x2a, 0xb0, 0x38, 0xcb, 0x2f, 0xb7 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_343_public_x[] = { /* QCAVSx */ 0x00, 0xc1, 0xdc, 0xb7, 0x37, 0xd2, 0x53, 0x03, 0x5b, 0xb9, 0x1d, 0x2a, 0x4a, 0x85, 0xf3, 0x7d, 0x00, 0x14, 0x2b, 0xe8, 0x1f, 0xc9, 0x27, 0x8c, 0xb2, 0x3a, 0x4d, 0x1d, 0x79, 0xd2, 0x7c, 0x8d, 0x3c, 0x44, 0x40, 0xb2, 0xc8, 0x42, 0xbc, 0x1e, 0x21, 0xf6, 0x92, 0x4e, 0x14, 0xdc, 0x83, 0x1b, 0x0a, 0xbf, 0xb8, 0x45 }; static const uint8_t nist_kas_ecc_cdh_testvector_343_public_y[] = { /* QCAVSy */ 0x00, 0x0c, 0x73, 0xd5, 0x68, 0x7b, 0x04, 0x90, 0xcc, 0xc0, 0x7f, 0x65, 0x41, 0x01, 0xac, 0xdd, 0xb3, 0x6c, 0xd0, 0xc2, 0xee, 0xcc, 0xe1, 0x65, 0xdf, 0x27, 0x6f, 0x83, 0xbe, 0x21, 0x1d, 0x01, 0xd3, 0x0f, 0xf5, 0xc2, 0x43, 0xf0, 0x90, 0x05, 0x72, 0xee, 0x6d, 0xf0, 0x7f, 0x53, 0x9d, 0xf6, 0xa4, 0x68, 0x9b, 0x0b }; static const uint8_t nist_kas_ecc_cdh_testvector_343_private[] = { /* dIUT */ 0x00, 0xbf, 0xa5, 0x94, 0x85, 0x6c, 0x67, 0xc2, 0x83, 0x6b, 0x7f, 0xb1, 0x71, 0xb6, 0x7c, 0x7a, 0x41, 0xae, 0x43, 0xef, 0x34, 0x50, 0x89, 0x80, 0x24, 0xa9, 0x31, 0x36, 0x54, 0xfc, 0xf3, 0x1e, 0x1e, 0x1f, 0xba, 0xc7, 0xad, 0x52, 0xb2, 0xbc, 0x43, 0x58, 0x97, 0x5a, 0x5c, 0x61, 0xab, 0x9f, 0x4e, 0x3e, 0x4e, 0x9e }; /* QIUTx = 00e1b5309a44800a916ad8a4d19b82a58b00ee048248050a6ed6c33ce1bc9701547e93d7c9042f8490654b73a2cd7d73f733c0bf */ /* QIUTy = 0180b20338746351faccfb9a3711a4e138457550bbf58316034c6f216a53749263dffe2359bddcdc89ec6446a9a4a9f4ef90c86d */ static const uint8_t nist_kas_ecc_cdh_testvector_343_out[] = { /* ZIUT */ 0x01, 0x12, 0x74, 0x91, 0xff, 0x33, 0xa6, 0x7f, 0xfc, 0x47, 0x57, 0x41, 0x6c, 0xd0, 0x2a, 0x08, 0x1c, 0xaf, 0xb7, 0x23, 0xaf, 0xf5, 0x2a, 0xf3, 0x5b, 0x06, 0x9b, 0x89, 0x96, 0x3e, 0x8e, 0x3e, 0xf5, 0xbc, 0x19, 0xc5, 0xa0, 0x93, 0xcc, 0xf5, 0x11, 0xe3, 0xc3, 0xc1, 0x9b, 0xe7, 0x89, 0x28, 0x0e, 0x98, 0x68, 0x09 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_344_public_x[] = { /* QCAVSx */ 0x01, 0x3d, 0x96, 0xa2, 0x67, 0xd1, 0xa2, 0xa9, 0xea, 0x83, 0xae, 0xb1, 0xb0, 0x1d, 0x8a, 0xce, 0x22, 0xe2, 0x51, 0xc8, 0x2f, 0x5f, 0x5f, 0xc3, 0xef, 0x59, 0x97, 0xa3, 0x01, 0x1a, 0x74, 0xa1, 0x01, 0x15, 0xdf, 0x60, 0xe9, 0x8d, 0x13, 0x9c, 0xdd, 0x36, 0x0e, 0x74, 0xd7, 0x6f, 0xa5, 0x22, 0xee, 0xb5, 0x6f, 0x4b }; static const uint8_t nist_kas_ecc_cdh_testvector_344_public_y[] = { /* QCAVSy */ 0x01, 0x6b, 0x65, 0x5a, 0xb7, 0xcd, 0x0d, 0x39, 0xf5, 0x88, 0xfb, 0xef, 0xec, 0x54, 0xe4, 0xf4, 0x50, 0x47, 0x66, 0x4c, 0x8b, 0x3b, 0xe8, 0xe5, 0x7a, 0xb1, 0x13, 0x77, 0x0f, 0x5f, 0xe0, 0xc6, 0x23, 0x00, 0xf4, 0xa0, 0x9f, 0xa2, 0x89, 0x9e, 0x73, 0xbb, 0xc9, 0x82, 0x32, 0x65, 0xf5, 0x5d, 0x5c, 0xf4, 0xae, 0x18 }; static const uint8_t nist_kas_ecc_cdh_testvector_344_private[] = { /* dIUT */ 0x00, 0x4a, 0x02, 0x0e, 0x06, 0xc4, 0x00, 0xef, 0x24, 0x98, 0xc1, 0x11, 0xcd, 0xe1, 0x50, 0x87, 0xcd, 0xa4, 0x8a, 0x6f, 0xb2, 0xec, 0xc0, 0x1d, 0x98, 0x5b, 0x57, 0xf0, 0xd3, 0x92, 0x19, 0x20, 0xe9, 0x2c, 0x43, 0xf3, 0xab, 0x68, 0x81, 0x29, 0xdc, 0x01, 0xad, 0x29, 0xfc, 0x31, 0xd6, 0x8e, 0x96, 0x22, 0x31, 0x9b }; /* QIUTx = 0167227f62849594ed63f247f780b2d11dd9a2c2c71bd6b71294cf8b59ce690bfe00da9bc1db8d1daac9bff8c00e7bdf071fe0d3 */ /* QIUTy = 0136c3ea77d093d9739fbe6891318b14959778599bd1e7d5a97bfc82ffe85fd5a9a01b82f72e11fad96d2f5cb5798f59efea15ed */ static const uint8_t nist_kas_ecc_cdh_testvector_344_out[] = { /* ZIUT */ 0x01, 0x25, 0x45, 0x08, 0x55, 0x3e, 0xab, 0x09, 0xfb, 0xc2, 0xfa, 0xfe, 0x13, 0xfa, 0x9b, 0x32, 0x4d, 0x92, 0x17, 0xd7, 0xd0, 0xba, 0x4c, 0xed, 0xbe, 0x5d, 0xc8, 0x69, 0xad, 0x68, 0xde, 0x4f, 0x87, 0x77, 0x4d, 0xd1, 0x7d, 0x64, 0x28, 0xed, 0x24, 0x2c, 0x71, 0x95, 0x6f, 0x25, 0x29, 0x69, 0xe6, 0xbd, 0x58, 0x37 }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_345_public_x[] = { /* QCAVSx */ 0x01, 0x78, 0x7b, 0x30, 0xb3, 0xb2, 0x04, 0xe2, 0x98, 0x69, 0x0b, 0x9d, 0x71, 0x1f, 0xfe, 0xef, 0x16, 0x7a, 0xdc, 0x57, 0x92, 0x06, 0x8b, 0x5c, 0x8d, 0x42, 0x2e, 0xc9, 0x0f, 0x94, 0xc2, 0xbd, 0xd2, 0x84, 0xcd, 0xbf, 0x8b, 0xee, 0x64, 0x2f, 0x70, 0xbd, 0x7b, 0xe2, 0xda, 0x90, 0x6b, 0x9e, 0xdb, 0xbc, 0x2c, 0xd1 }; static const uint8_t nist_kas_ecc_cdh_testvector_345_public_y[] = { /* QCAVSy */ 0x00, 0x43, 0x07, 0x8f, 0x91, 0x21, 0x10, 0x29, 0x0a, 0x13, 0xd9, 0x01, 0x60, 0xf0, 0xe7, 0x15, 0x82, 0xfa, 0x39, 0xc0, 0xe7, 0x5d, 0x81, 0x90, 0xeb, 0x81, 0x1d, 0x45, 0x02, 0x20, 0x04, 0x4c, 0xc6, 0xd6, 0x80, 0xd9, 0x56, 0xa9, 0x88, 0x60, 0xe6, 0xfc, 0x85, 0xbb, 0x86, 0xd6, 0x59, 0x90, 0xa1, 0x60, 0xc5, 0xb8 }; static const uint8_t nist_kas_ecc_cdh_testvector_345_private[] = { /* dIUT */ 0x00, 0xc1, 0x9b, 0x39, 0x16, 0x65, 0xf5, 0x03, 0x53, 0x54, 0x7f, 0xc7, 0x2c, 0x9e, 0xd0, 0x19, 0xf5, 0x31, 0x16, 0x90, 0xee, 0x41, 0xe7, 0xc8, 0x95, 0xaa, 0x7e, 0xf9, 0x2c, 0x60, 0xfb, 0x9f, 0x34, 0x54, 0xdf, 0xac, 0x57, 0x52, 0x45, 0xa6, 0x86, 0x9f, 0x1f, 0xde, 0xc7, 0x45, 0xd6, 0x3e, 0xa5, 0x6c, 0x89, 0x22 }; /* QIUTx = 0053a7a62a8b4044b60af76efa5b44429bf65f65987d6a062163dd55f08dc9a91b8bb9b6270f8a026123f99eb9372ccbdd27ca3b */ /* QIUTy = 00add46f7ea7092f48ddaa2feb96cb24bf92d2628fb6e4f7cddf523e5f84011cf8aababd6009a13f29a63b6b7ee664c66f3829f3 */ static const uint8_t nist_kas_ecc_cdh_testvector_345_out[] = { /* ZIUT */ 0x00, 0x4b, 0x9a, 0xcc, 0xc2, 0x1d, 0x71, 0x22, 0x83, 0x5f, 0xc2, 0x14, 0x10, 0xed, 0x1d, 0x83, 0x76, 0x7c, 0x47, 0xa5, 0x4f, 0xfe, 0xe5, 0xf0, 0xc1, 0x80, 0xfc, 0x55, 0xf3, 0xd0, 0xe8, 0x48, 0x4a, 0xf3, 0xad, 0x38, 0x02, 0x02, 0x94, 0xbe, 0x92, 0xf0, 0x2f, 0x0b, 0xa7, 0xe2, 0xb4, 0xf4, 0xeb, 0x1d, 0xb0, 0x7f }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_346_public_x[] = { /* QCAVSx */ 0x01, 0xe9, 0xda, 0x0a, 0xd1, 0xa1, 0x5a, 0xc3, 0xc4, 0x31, 0xf2, 0x20, 0x95, 0x4e, 0xd2, 0xe5, 0x02, 0xaf, 0x7b, 0x74, 0x6c, 0x3f, 0xd5, 0x7b, 0x2e, 0xce, 0xb7, 0x74, 0x86, 0x58, 0x02, 0x0a, 0x09, 0x56, 0x64, 0x87, 0x83, 0x54, 0xdf, 0x0a, 0xa1, 0x81, 0xe5, 0x7e, 0x5e, 0xad, 0x2c, 0x98, 0x5a, 0xd3, 0x02, 0x3d }; static const uint8_t nist_kas_ecc_cdh_testvector_346_public_y[] = { /* QCAVSy */ 0x00, 0x9c, 0xce, 0x73, 0xa5, 0x47, 0x08, 0x34, 0x8b, 0x48, 0xf8, 0xf3, 0xf6, 0x74, 0xbb, 0x76, 0x54, 0xf4, 0x41, 0xf2, 0x83, 0xd4, 0xe8, 0xa4, 0xec, 0x8f, 0x85, 0x92, 0xef, 0x52, 0x39, 0x5f, 0x24, 0xc1, 0x12, 0xd5, 0x94, 0x2d, 0x3a, 0xe0, 0x8f, 0xfe, 0x8d, 0x99, 0x9e, 0xfd, 0xe3, 0x99, 0x88, 0x8a, 0x7c, 0xf3 }; static const uint8_t nist_kas_ecc_cdh_testvector_346_private[] = { /* dIUT */ 0x00, 0x6c, 0x90, 0x98, 0xb5, 0x3d, 0x10, 0xf2, 0xac, 0x02, 0x84, 0xa9, 0x99, 0x02, 0x65, 0x8f, 0x66, 0x7e, 0xa4, 0xca, 0xb2, 0x86, 0x98, 0xaf, 0x3f, 0xa0, 0x70, 0x06, 0xa1, 0xbb, 0x46, 0x36, 0x3b, 0x10, 0x3c, 0x4a, 0xa4, 0xc9, 0x2c, 0x1c, 0x3f, 0xe7, 0x53, 0x90, 0x97, 0xfa, 0x70, 0xb8, 0xa4, 0xfa, 0x46, 0xc5 }; /* QIUTx = 00d3edf652f43f9c9a92a2e4d34ba83f5d7e950c28346a2a6851bf75547050140a4e9c1c1b500e1d2ad364c306b9a44af503a621 */ /* QIUTy = 0099b26c64367f1903da95df51562d25042c01a1adda75bba58bdb0d8aab350b52ecfbe98488c2619de01cd70f5e008953bca547 */ static const uint8_t nist_kas_ecc_cdh_testvector_346_out[] = { /* ZIUT */ 0x00, 0x93, 0xe2, 0x58, 0x1c, 0x15, 0x9d, 0x74, 0xd1, 0x1f, 0x86, 0x67, 0xee, 0x03, 0x39, 0x92, 0x08, 0xb5, 0xc1, 0xa4, 0xee, 0x5b, 0x20, 0x07, 0x0c, 0xe8, 0xd9, 0x7d, 0x25, 0x1e, 0xf1, 0x23, 0x6d, 0xc8, 0x1d, 0xd6, 0x88, 0xb2, 0xf0, 0x7a, 0x73, 0x0e, 0x6b, 0x8a, 0xec, 0xa0, 0xc1, 0x93, 0xa2, 0x8b, 0x17, 0x8f }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_347_public_x[] = { /* QCAVSx */ 0x00, 0xc4, 0x92, 0x94, 0xfb, 0x71, 0x29, 0x42, 0x22, 0x1a, 0x25, 0x00, 0x32, 0x4a, 0xf7, 0xbd, 0x8c, 0x7e, 0xc1, 0xcd, 0x1b, 0x80, 0x94, 0xde, 0xd1, 0xba, 0xc0, 0x01, 0x0a, 0x86, 0x96, 0x08, 0x3f, 0x7e, 0xfa, 0xec, 0xaa, 0x51, 0x03, 0xd6, 0x76, 0x24, 0x99, 0xe1, 0xbe, 0x48, 0x57, 0xd3, 0x20, 0x03, 0x02, 0x81 }; static const uint8_t nist_kas_ecc_cdh_testvector_347_public_y[] = { /* QCAVSy */ 0x00, 0x56, 0x4f, 0xa1, 0x11, 0x0b, 0x39, 0x39, 0x25, 0xdf, 0xbb, 0x24, 0xba, 0x9a, 0x6b, 0x33, 0x73, 0xf4, 0x62, 0x4e, 0xcb, 0xc3, 0xe1, 0x2f, 0x97, 0x06, 0xf3, 0xab, 0x05, 0x42, 0x99, 0x2d, 0x8d, 0xb6, 0xc8, 0xd8, 0xbb, 0x25, 0xfa, 0x06, 0x14, 0xd4, 0x86, 0xf6, 0xd1, 0xac, 0x9f, 0x3d, 0x98, 0xb9, 0xed, 0xfe }; static const uint8_t nist_kas_ecc_cdh_testvector_347_private[] = { /* dIUT */ 0x00, 0xa7, 0xfa, 0x38, 0xa8, 0xab, 0x80, 0x30, 0xd6, 0xb4, 0x97, 0xa2, 0x3b, 0xde, 0x5e, 0x50, 0x07, 0xe3, 0x9d, 0x14, 0xda, 0x9f, 0x82, 0xdc, 0x56, 0x4a, 0xe3, 0xcd, 0xb4, 0xaf, 0x5f, 0xcf, 0x41, 0xbc, 0xfe, 0xf7, 0xad, 0xad, 0xb5, 0x91, 0x71, 0xe6, 0xd7, 0xd3, 0xd3, 0xc3, 0xac, 0x67, 0xf7, 0xbe, 0x70, 0x73 }; /* QIUTx = 0013bb3ba91d5d2488af572d995cef8fffb1fd85d113421e8d2c0c3aa97cdb8a933fc0d3f05f4646ce841ebdcf1a98604bffa3df */ /* QIUTy = 01f2e04ea16a012d4864cf2ca7564846de73a33f24578dc4d221359c4f2f86ca823cb0596bfe4760e9eadcb4ad508ab1a171ecbd */ static const uint8_t nist_kas_ecc_cdh_testvector_347_out[] = { /* ZIUT */ 0x00, 0x8e, 0x2f, 0x1c, 0x4b, 0xad, 0x19, 0xc4, 0x6a, 0x51, 0x34, 0xaf, 0xcc, 0xf7, 0xf4, 0xec, 0x14, 0xab, 0x59, 0x1c, 0x8b, 0x8e, 0xa4, 0x8d, 0x9c, 0x3d, 0x1e, 0x73, 0x54, 0xab, 0x43, 0xba, 0x20, 0xaa, 0x39, 0xa6, 0x5f, 0xd9, 0x2c, 0xdc, 0x17, 0x6c, 0xf3, 0xde, 0xde, 0xcb, 0xf9, 0xda, 0x49, 0xa8, 0xd8, 0x55 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_348_public_x[] = { /* QCAVSx */ 0x01, 0x34, 0xad, 0xd2, 0xc4, 0x99, 0x17, 0x2d, 0xf7, 0x92, 0xd9, 0x4a, 0x9b, 0x38, 0x95, 0xe2, 0x45, 0xb8, 0x40, 0x73, 0xc3, 0x25, 0x26, 0x3a, 0x85, 0x8c, 0x1e, 0x9f, 0x7c, 0xf3, 0x0a, 0x44, 0xf2, 0x68, 0xd3, 0xf8, 0x35, 0x84, 0x11, 0xdc, 0x0a, 0x9c, 0xaa, 0xb5, 0x05, 0xc0, 0xab, 0xc0, 0x16, 0x13, 0x0b, 0xf5 }; static const uint8_t nist_kas_ecc_cdh_testvector_348_public_y[] = { /* QCAVSy */ 0x00, 0x31, 0xc2, 0x36, 0xb1, 0x43, 0xca, 0x03, 0x6c, 0x88, 0x36, 0x41, 0xf7, 0xf9, 0xb9, 0x57, 0xf4, 0xf7, 0x98, 0xa3, 0x16, 0x67, 0xc4, 0x15, 0x60, 0x34, 0x02, 0x79, 0xfc, 0xe0, 0x96, 0x2a, 0x21, 0xbd, 0x8b, 0xb5, 0x2f, 0xa2, 0x3d, 0xb7, 0x1a, 0x84, 0xf3, 0x5a, 0x57, 0x94, 0xef, 0x5e, 0x07, 0x59, 0x72, 0xdd }; static const uint8_t nist_kas_ecc_cdh_testvector_348_private[] = { /* dIUT */ 0x00, 0xce, 0x9f, 0x82, 0x7b, 0xd2, 0x4c, 0x01, 0x4c, 0x3e, 0xe5, 0x9e, 0xde, 0xf7, 0x47, 0x17, 0x8d, 0x6c, 0x03, 0x0c, 0x19, 0x66, 0x9a, 0xd8, 0xe7, 0x18, 0xba, 0x13, 0x02, 0xbe, 0xf4, 0xb5, 0xad, 0x2c, 0x12, 0x33, 0x44, 0x8f, 0x52, 0x75, 0xb2, 0x9a, 0x89, 0x6c, 0x0b, 0x2e, 0x7b, 0x0d, 0xa9, 0x20, 0x68, 0xbe }; /* QIUTx = 0176e31012d9c604b2d1a1922a28d8a574f060cc36388b2816d2f8117da20c0699ab0a08f76fbaa476f0a9c424bf4c952b4754fd */ /* QIUTy = 011fedc3e8f8e828e0ffbf02fd85d29c0201fd0f53bf2614c10ae51ccb58cbc4900c38cc4c9a52d86d89f9b8c2de4e227f4e228e */ static const uint8_t nist_kas_ecc_cdh_testvector_348_out[] = { /* ZIUT */ 0x01, 0x90, 0xa1, 0x69, 0x3e, 0xeb, 0xe2, 0x87, 0xec, 0x98, 0x02, 0x36, 0xd8, 0x76, 0x28, 0x04, 0xd2, 0x3f, 0xdb, 0x6f, 0x22, 0x27, 0x63, 0xa0, 0xef, 0xc3, 0x64, 0xf9, 0x28, 0x0f, 0xdd, 0x53, 0x39, 0x4c, 0x2b, 0xad, 0xcc, 0x51, 0xff, 0x09, 0x55, 0x7f, 0x3b, 0x97, 0xca, 0xe7, 0xf7, 0x0d, 0x79, 0x0b, 0xf9, 0xdf }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_349_public_x[] = { /* QCAVSx */ 0x00, 0xf0, 0xec, 0x97, 0x2d, 0xc9, 0xfd, 0xfd, 0x08, 0xcd, 0x8d, 0xfc, 0xba, 0x72, 0x98, 0xb4, 0xdf, 0x2d, 0xbd, 0x80, 0xc2, 0x0b, 0x28, 0x89, 0xe6, 0x63, 0xac, 0x58, 0xcc, 0x34, 0x8c, 0xbf, 0x8f, 0x9f, 0xfd, 0x31, 0xff, 0xb5, 0x06, 0x18, 0xd6, 0xc3, 0x8d, 0x72, 0xa9, 0x9d, 0x5c, 0x5d, 0x2e, 0xac, 0xc0, 0x01 }; static const uint8_t nist_kas_ecc_cdh_testvector_349_public_y[] = { /* QCAVSy */ 0x00, 0xbb, 0x0b, 0x48, 0x89, 0x3c, 0xdb, 0x91, 0x5e, 0x65, 0xcd, 0x5d, 0x79, 0x78, 0x04, 0x80, 0x20, 0x17, 0xa2, 0x95, 0x34, 0x36, 0x54, 0x24, 0x6a, 0x37, 0xfe, 0x3a, 0x60, 0xd7, 0xde, 0x98, 0x7e, 0x6a, 0x9a, 0x10, 0xaa, 0xf0, 0x63, 0xd9, 0x6b, 0x10, 0x18, 0x46, 0x12, 0xcc, 0xd2, 0x64, 0x07, 0xd7, 0xe0, 0x3e }; static const uint8_t nist_kas_ecc_cdh_testvector_349_private[] = { /* dIUT */ 0x00, 0xe3, 0x6f, 0x3b, 0x9a, 0x13, 0x41, 0x99, 0x5b, 0x13, 0xfe, 0x70, 0xbc, 0x54, 0x5d, 0x27, 0x9e, 0x6d, 0xb1, 0x48, 0x2c, 0x92, 0xb1, 0x3c, 0xe8, 0xcc, 0x0d, 0xa1, 0xc1, 0x00, 0xea, 0x2f, 0xaa, 0x80, 0x3a, 0x64, 0xa5, 0x8c, 0xc7, 0xeb, 0x1c, 0xfd, 0x16, 0x75, 0x70, 0x83, 0x5c, 0x52, 0x2f, 0x65, 0x93, 0x47 }; /* QIUTx = 00d1ca82393b8d50bd1898a909bf39333eca3bde98b0b0dced66f828630e69e6eb128b7cec23f07260047073260a765331dd6f57 */ /* QIUTy = 006c535ff943a0fe750fc6c39904a6912ba1ebc0f46c1b0823e4013c77475ea29b3f32481966f1b165bedba6c17a1494fb6d4f3d */ static const uint8_t nist_kas_ecc_cdh_testvector_349_out[] = { /* ZIUT */ 0x00, 0x14, 0x69, 0xda, 0xbc, 0xf2, 0x21, 0x0a, 0xa7, 0xde, 0x00, 0x40, 0xb2, 0x01, 0x22, 0x1e, 0xb4, 0xd1, 0xa4, 0x72, 0x54, 0x31, 0xfb, 0x5a, 0x93, 0x21, 0x2a, 0x66, 0xdd, 0xea, 0x41, 0x87, 0xe0, 0x78, 0xf5, 0xe3, 0xd8, 0x26, 0x06, 0xf6, 0xcd, 0xfc, 0x0f, 0xfe, 0x6b, 0x69, 0x57, 0x4d, 0x1d, 0x0b, 0xa6, 0x43 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_350_public_x[] = { /* QCAVSx */ 0x01, 0x37, 0x84, 0x44, 0xe0, 0xde, 0xec, 0xff, 0x3a, 0xec, 0x5a, 0xb6, 0xe7, 0x4e, 0x81, 0x23, 0xba, 0x98, 0xd8, 0xb9, 0x1a, 0x50, 0x7c, 0xfc, 0xa0, 0xd8, 0x50, 0x97, 0xaa, 0xd9, 0x44, 0xc1, 0x5b, 0x4f, 0xd8, 0x9c, 0x8c, 0xbe, 0x2c, 0x74, 0x51, 0xd8, 0xec, 0x64, 0x10, 0x45, 0x42, 0x1b, 0x4b, 0xf6, 0x97, 0x8b }; static const uint8_t nist_kas_ecc_cdh_testvector_350_public_y[] = { /* QCAVSy */ 0x01, 0x64, 0x47, 0xc2, 0x13, 0xc9, 0x03, 0x5d, 0xe7, 0xbc, 0xc2, 0x9b, 0xdd, 0x61, 0xd6, 0xee, 0x6e, 0xd5, 0x57, 0x9c, 0x36, 0xbe, 0xc5, 0x6b, 0xc6, 0xb4, 0x4f, 0x92, 0x86, 0xbf, 0x9e, 0x99, 0xfa, 0xc9, 0x7f, 0x35, 0x67, 0x08, 0xcd, 0x03, 0x10, 0xdb, 0xf6, 0x33, 0x8f, 0x9a, 0xf8, 0xd7, 0xb1, 0x35, 0x91, 0x02 }; static const uint8_t nist_kas_ecc_cdh_testvector_350_private[] = { /* dIUT */ 0x00, 0x08, 0xa0, 0x67, 0x16, 0xed, 0x6f, 0x4c, 0xf7, 0x28, 0xf9, 0x01, 0x99, 0x28, 0xf3, 0x67, 0xc7, 0x7a, 0x90, 0x52, 0x49, 0x0b, 0x9a, 0x8b, 0xa8, 0x7a, 0x59, 0xcd, 0xca, 0x84, 0xe7, 0x7c, 0x6a, 0x29, 0x98, 0x53, 0xf5, 0x49, 0x6f, 0xeb, 0xe6, 0x52, 0xf4, 0xba, 0x33, 0x35, 0x01, 0xc4, 0xfc, 0xf2, 0xba, 0x2f }; /* QIUTx = 00a045b5e6bbb7950495f6d5d645a2b7d72006725d0223c7ff75534022c9260ab0d2d8d333789a3dccfc3a89502ca500bd0c1f61 */ /* QIUTy = 01ec556e1b1621ec1893654e198d5923e311478a8bd2ffff280c9092ffc0737289a997492b6e9ebf931947634ef7f43b429cf36a */ static const uint8_t nist_kas_ecc_cdh_testvector_350_out[] = { /* ZIUT */ 0x00, 0x5c, 0x70, 0x1a, 0x93, 0xd7, 0x79, 0x03, 0x22, 0xaa, 0x7c, 0x67, 0x44, 0x0f, 0xdd, 0x9e, 0xe8, 0x05, 0x7a, 0x0d, 0xae, 0x86, 0xd1, 0xe8, 0x56, 0xae, 0x89, 0xe7, 0x89, 0x3d, 0xa1, 0x78, 0xbd, 0x67, 0x77, 0x7f, 0x86, 0xdb, 0x2b, 0xe5, 0xc8, 0xe3, 0x1d, 0xc5, 0x0e, 0xd8, 0xa4, 0x40, 0xaa, 0xbc, 0x34, 0x2d }; /* [B-571] - GP NOT SUPPORTED */ /* COUNT = 0 */ static const uint8_t nist_kas_ecc_cdh_testvector_351_public_x[] = { /* QCAVSx */ 0x03, 0xb6, 0x3f, 0x5f, 0xa1, 0x12, 0xae, 0x6b, 0x5f, 0x11, 0x3c, 0x76, 0x51, 0x44, 0xfe, 0x4c, 0xbd, 0x60, 0x20, 0xe2, 0x6d, 0x40, 0x0c, 0x11, 0x60, 0x9a, 0x3a, 0x63, 0x4b, 0x9a, 0x32, 0x5f, 0x41, 0x6b, 0x0e, 0x3d, 0x32, 0x15, 0x73, 0x4c, 0x68, 0xa1, 0xc2, 0xc8, 0xfa, 0xd1, 0xd0, 0xbb, 0x9e, 0xb3, 0x93, 0x9a, 0x41, 0xaf, 0x22, 0x42, 0x1f, 0x68, 0x78, 0x1e, 0x7e, 0xb0, 0x66, 0x4b, 0x9d, 0xf5, 0xce, 0xa4, 0x48, 0xde, 0xaa, 0x3b }; static const uint8_t nist_kas_ecc_cdh_testvector_351_public_y[] = { /* QCAVSy */ 0x00, 0x8e, 0x6c, 0xc7, 0x7b, 0xcd, 0xdc, 0x81, 0x6e, 0x84, 0xcf, 0xc1, 0xf6, 0x26, 0x82, 0x4f, 0xa2, 0x4d, 0x3d, 0x5f, 0xd3, 0x3d, 0x80, 0x93, 0xcb, 0xfe, 0x1f, 0xc4, 0xd8, 0x81, 0xb6, 0x3b, 0x49, 0x41, 0x23, 0xbc, 0x75, 0x96, 0x70, 0xed, 0xcb, 0x18, 0x87, 0xbb, 0x3b, 0x9d, 0x5a, 0x8b, 0x51, 0x6b, 0xc5, 0x03, 0x82, 0x81, 0x63, 0x70, 0x9d, 0x4d, 0xac, 0xb5, 0x94, 0xd2, 0x77, 0xa1, 0x5a, 0x92, 0xc0, 0x64, 0xe5, 0x77, 0x0d, 0x1b }; static const uint8_t nist_kas_ecc_cdh_testvector_351_private[] = { /* dIUT */ 0x03, 0x44, 0xf2, 0x2b, 0xe8, 0x79, 0x99, 0xb9, 0x5b, 0x22, 0x87, 0xf6, 0x74, 0x30, 0xea, 0x8f, 0xe6, 0x46, 0xc6, 0x2f, 0xe3, 0x8b, 0x7c, 0xe6, 0x1f, 0x1f, 0x95, 0x65, 0x97, 0xc2, 0x7b, 0xdd, 0xd9, 0x90, 0x2e, 0x20, 0xd4, 0x43, 0x6a, 0xbf, 0x3b, 0xeb, 0xd8, 0x24, 0x3e, 0xc2, 0x9a, 0x00, 0x48, 0x1a, 0x8a, 0x2c, 0x19, 0xf5, 0x50, 0xe9, 0x96, 0x41, 0xb5, 0xf1, 0x4a, 0xaf, 0xbb, 0x5b, 0xda, 0x95, 0x3a, 0x75, 0x59, 0xf8, 0x65, 0x3a }; /* QIUTx = 06af71fcec1a2904116fe14878663764c1ec74870e5d2d53919f0b635912db80dd5460d9e699458ff8494c5bfc74fba8d3b12f65f015e8def10de33f1800191f4cb502d21938b951 */ /* QIUTy = 019584177b189c6641ffb678b6d7833d8d4bb25dee5018dda4e4c0d219048c01cd0da9eaffe346d53cf1a07b33b3dbdd4bc3acabe4832f9981eff2660991aac852147985eea3a51e */ static const uint8_t nist_kas_ecc_cdh_testvector_351_out[] = { /* ZIUT */ 0x06, 0x77, 0x5e, 0x1b, 0x99, 0xa2, 0x36, 0xe0, 0x2b, 0x02, 0x0b, 0xc7, 0x36, 0x66, 0xe5, 0x75, 0x1c, 0x12, 0x10, 0xdc, 0xb6, 0xe9, 0xb0, 0x2a, 0x69, 0xf4, 0x07, 0x53, 0x76, 0xe4, 0x9f, 0x7a, 0x14, 0x76, 0xd2, 0x20, 0x9e, 0x86, 0x1a, 0xbb, 0x73, 0xf5, 0xe3, 0xad, 0x18, 0x9d, 0x26, 0x8e, 0x03, 0x5b, 0x1d, 0xe9, 0x3d, 0x47, 0xb3, 0xa6, 0x4d, 0xe5, 0x78, 0x3c, 0x9a, 0x09, 0xbc, 0x22, 0x3e, 0x1c, 0xc6, 0x12, 0xf2, 0x6d, 0xcd, 0xf1 }; /* COUNT = 1 */ static const uint8_t nist_kas_ecc_cdh_testvector_352_public_x[] = { /* QCAVSx */ 0x05, 0x75, 0xcb, 0xb0, 0x59, 0xf4, 0x23, 0x30, 0x9f, 0x99, 0x3b, 0x6c, 0x06, 0xac, 0x71, 0xd7, 0xbc, 0xc5, 0xd1, 0xe6, 0xa1, 0x9a, 0xfe, 0x72, 0x81, 0x1c, 0xb6, 0x12, 0xa6, 0x23, 0x8c, 0x9c, 0xcc, 0x33, 0x1e, 0x67, 0xda, 0x0c, 0x10, 0xb8, 0x8c, 0xc2, 0xa5, 0xf1, 0xef, 0x2f, 0xf6, 0xd6, 0xb7, 0x44, 0x06, 0x5d, 0x24, 0x2f, 0x59, 0x8d, 0xa2, 0xd6, 0x33, 0x5d, 0x4c, 0x3b, 0xec, 0xf5, 0xc3, 0x95, 0x39, 0x40, 0xc6, 0x0e, 0xfc, 0xc7 }; static const uint8_t nist_kas_ecc_cdh_testvector_352_public_y[] = { /* QCAVSy */ 0x06, 0xb4, 0x33, 0x65, 0x2e, 0x3a, 0x36, 0xa0, 0x70, 0x18, 0xaa, 0x8a, 0xd3, 0xd2, 0xff, 0x31, 0xed, 0x78, 0x5c, 0xe5, 0x60, 0x17, 0x16, 0xef, 0xf7, 0x71, 0x0f, 0xc1, 0x3c, 0x6f, 0xf9, 0xff, 0x75, 0xc7, 0xf3, 0x70, 0x1d, 0x45, 0x9f, 0xd8, 0xfe, 0x70, 0xc0, 0xb4, 0xaf, 0xce, 0xda, 0x08, 0x68, 0x17, 0x17, 0xdb, 0x98, 0x21, 0xd8, 0xc8, 0x58, 0xfd, 0x39, 0xe2, 0x74, 0xff, 0x37, 0x77, 0x2f, 0x8e, 0x84, 0x85, 0x6e, 0x70, 0x67, 0x45 }; static const uint8_t nist_kas_ecc_cdh_testvector_352_private[] = { /* dIUT */ 0x02, 0xf4, 0xd2, 0xb7, 0xe6, 0x36, 0x60, 0xe6, 0xc2, 0x09, 0x49, 0xe0, 0x6d, 0xc6, 0x70, 0xbe, 0x8a, 0xaf, 0x82, 0x53, 0x0e, 0x0b, 0x6e, 0xaf, 0xe2, 0x10, 0x11, 0xfe, 0x9d, 0x0f, 0x44, 0x07, 0xc8, 0x54, 0x95, 0x15, 0x73, 0x45, 0x28, 0xcd, 0xa2, 0x99, 0xe9, 0xfc, 0xf7, 0x38, 0xa9, 0x7f, 0xbf, 0x43, 0xc4, 0xbb, 0xa2, 0x67, 0x44, 0xb3, 0x27, 0x53, 0x1b, 0x40, 0x14, 0x3e, 0x15, 0x8b, 0xc8, 0x64, 0x59, 0x09, 0xea, 0x88, 0x84, 0x56 }; /* QIUTx = 06ea711827ad8ed589b709ef35f6a9cd4625798bd887e5fe59c51f0f41c328b7ecdf84736c43fb70e3986ee5e5f986e009f641158a75cce6b39f53a8bf0682830194e4007148deef */ /* QIUTy = 04c6b9f2a6099fc0367fa9609394c3221ad8c6fb111d2bdc4305053804788d32eaf76431406e768a448cb5c8e34c81225eec9015abbd92725c002712ed3192d807b36afea853f722 */ static const uint8_t nist_kas_ecc_cdh_testvector_352_out[] = { /* ZIUT */ 0x03, 0xa8, 0x0e, 0xa8, 0xcf, 0xec, 0xb8, 0x58, 0xf9, 0xb7, 0x7b, 0xdb, 0x46, 0xb6, 0xcd, 0xa2, 0x63, 0x20, 0xee, 0x8c, 0x56, 0x1a, 0x2f, 0xd6, 0xb7, 0xe0, 0xa2, 0xb6, 0x22, 0x01, 0xfb, 0xfe, 0x60, 0xf5, 0x77, 0x78, 0x0c, 0x75, 0xa9, 0x8a, 0x11, 0xa6, 0x9d, 0xe4, 0xc4, 0xee, 0x91, 0x19, 0x30, 0xd2, 0x20, 0x0b, 0x69, 0x72, 0xbc, 0x31, 0x23, 0xd7, 0xf2, 0x78, 0x61, 0x5e, 0xcc, 0x65, 0x98, 0x4a, 0x59, 0xfe, 0x35, 0x2a, 0x1c, 0xec }; /* COUNT = 2 */ static const uint8_t nist_kas_ecc_cdh_testvector_353_public_x[] = { /* QCAVSx */ 0x06, 0x4a, 0xa6, 0x68, 0x30, 0xff, 0x44, 0x32, 0x4a, 0x67, 0xae, 0x8a, 0x90, 0x78, 0x96, 0x89, 0x7b, 0x50, 0x75, 0x66, 0xcf, 0x52, 0xdf, 0xe1, 0x3e, 0x3a, 0xdb, 0xb1, 0xe7, 0x93, 0x66, 0x5d, 0x2b, 0x71, 0x83, 0x58, 0x75, 0x4e, 0xfe, 0x80, 0x9e, 0x44, 0x96, 0x21, 0x85, 0x02, 0xfe, 0xb5, 0x60, 0x4d, 0xbf, 0xbc, 0x04, 0xa1, 0x10, 0x7c, 0xa9, 0xec, 0x4e, 0xad, 0xc7, 0xd1, 0x0a, 0x9d, 0x6d, 0x14, 0x74, 0xce, 0xdf, 0x57, 0x81, 0x45 }; static const uint8_t nist_kas_ecc_cdh_testvector_353_public_y[] = { /* QCAVSy */ 0x06, 0xf6, 0x3f, 0x69, 0xf8, 0xc1, 0x8b, 0x67, 0xf1, 0x10, 0x51, 0xb3, 0xd3, 0x02, 0x36, 0xa1, 0xa2, 0x49, 0x08, 0x8b, 0x2b, 0xca, 0xb5, 0xcf, 0xf8, 0x30, 0xcd, 0xb9, 0xeb, 0x3e, 0x75, 0xc1, 0xe8, 0x72, 0x52, 0xe5, 0xd8, 0xe6, 0x1b, 0xb1, 0xa6, 0x63, 0x48, 0xfb, 0x68, 0x1e, 0x96, 0x2d, 0x65, 0xab, 0xc5, 0x4d, 0x5d, 0xea, 0x2d, 0xd7, 0x2c, 0x55, 0x45, 0x90, 0x74, 0x00, 0x74, 0xf7, 0xc6, 0x6c, 0x4b, 0x8d, 0xfd, 0x30, 0x75, 0x61 }; static const uint8_t nist_kas_ecc_cdh_testvector_353_private[] = { /* dIUT */ 0x01, 0x2b, 0x63, 0x13, 0xb5, 0x68, 0x53, 0xcf, 0x8d, 0x02, 0x73, 0x04, 0x9c, 0xf7, 0xed, 0x2a, 0xb8, 0xe6, 0x32, 0xe5, 0x92, 0x56, 0xed, 0x04, 0x33, 0x66, 0x85, 0x76, 0x48, 0xf3, 0xf2, 0xa9, 0x67, 0x4c, 0xae, 0xb6, 0xfb, 0x0f, 0xcd, 0x5f, 0xba, 0xb0, 0xbb, 0xab, 0xbc, 0xe1, 0x7a, 0x0f, 0xc4, 0xa7, 0x81, 0x48, 0x49, 0x9c, 0x38, 0x9a, 0xf5, 0x74, 0x86, 0x37, 0x46, 0x41, 0x69, 0x5b, 0x0e, 0x85, 0x2f, 0x31, 0x52, 0xee, 0xc7, 0x24 }; /* QIUTx = 040a78763d170459dd34b5c04ec782e698cbe903a5a348551c5248d9dacf19bcb9a498ea05e80e2d6cc1f3ea5ba3a43855b801c8c0356fe3e29ee224bb91f4ed0c85678379b72542 */ /* QIUTy = 01ff49ce0a62e9edae6aa63a9848e44f185412d0feb46b87f91424bdaffed5168321ed76f235f75d33667f6d7d6a9c857bb4f85442fc40f9a20c04ae06362a46eceea15c45d69beb */ static const uint8_t nist_kas_ecc_cdh_testvector_353_out[] = { /* ZIUT */ 0x03, 0xed, 0xea, 0x7e, 0x47, 0xde, 0xd7, 0xc2, 0xab, 0x11, 0x15, 0xf4, 0xeb, 0xcb, 0xb4, 0x26, 0x77, 0xc7, 0xfb, 0xa6, 0xe0, 0xcf, 0xd8, 0x11, 0x60, 0x28, 0x96, 0x25, 0x1a, 0xda, 0x1d, 0x5a, 0x0b, 0x46, 0x1a, 0xaf, 0x4e, 0x00, 0x0f, 0x4d, 0x42, 0x31, 0xb9, 0x6d, 0x8d, 0xee, 0x76, 0x30, 0xd9, 0xf1, 0xb7, 0x86, 0x0e, 0x64, 0x18, 0xda, 0xc8, 0xc3, 0xb0, 0x7b, 0x66, 0xaf, 0x6f, 0xd1, 0xac, 0xdb, 0x44, 0xb2, 0x68, 0x3b, 0x29, 0xb4 }; /* COUNT = 3 */ static const uint8_t nist_kas_ecc_cdh_testvector_354_public_x[] = { /* QCAVSx */ 0x05, 0x06, 0x71, 0xaf, 0x65, 0xcb, 0xef, 0x92, 0xf3, 0x05, 0xe5, 0xfa, 0xcb, 0x42, 0x88, 0xcc, 0x04, 0xa4, 0xc6, 0x97, 0x8a, 0x3b, 0x78, 0xaf, 0xe4, 0x04, 0x9c, 0x6a, 0x99, 0x5f, 0xe8, 0xc3, 0xc0, 0xbb, 0x60, 0x9a, 0xbe, 0x49, 0xd1, 0x52, 0xb1, 0xee, 0xd6, 0xc7, 0x14, 0xd2, 0x54, 0xfe, 0x6e, 0xff, 0x15, 0x9a, 0x9e, 0xbd, 0x24, 0xad, 0x16, 0x91, 0x9e, 0xf7, 0x6f, 0x44, 0x70, 0x05, 0x7e, 0xb7, 0xc2, 0x65, 0xa4, 0xbd, 0x96, 0xe8 }; static const uint8_t nist_kas_ecc_cdh_testvector_354_public_y[] = { /* QCAVSy */ 0x05, 0x1d, 0x08, 0xe2, 0x1d, 0x26, 0x4d, 0x8e, 0x4d, 0xbc, 0x73, 0x40, 0x88, 0x42, 0xab, 0x57, 0xcd, 0x78, 0xd3, 0x23, 0xe7, 0xde, 0xb6, 0x25, 0xb3, 0x74, 0x19, 0x94, 0xb8, 0xaf, 0xfe, 0x01, 0xaf, 0x44, 0x61, 0x62, 0x2d, 0xb4, 0x19, 0xaf, 0xee, 0xad, 0x04, 0x58, 0x45, 0xf6, 0xc3, 0xdb, 0x6d, 0x98, 0x2f, 0x45, 0xb6, 0x92, 0xbe, 0xa1, 0x1c, 0xf2, 0x5d, 0x18, 0xac, 0xa3, 0xc8, 0x3b, 0xec, 0x84, 0x0c, 0x75, 0x82, 0xa7, 0x06, 0x2d }; static const uint8_t nist_kas_ecc_cdh_testvector_354_private[] = { /* dIUT */ 0x02, 0x19, 0x97, 0xb5, 0x48, 0x1c, 0x0c, 0xf6, 0xcf, 0x43, 0x6b, 0xfe, 0x36, 0x0c, 0x3b, 0x11, 0x9b, 0x9e, 0x4d, 0xd5, 0x6f, 0x3c, 0x28, 0x47, 0xaf, 0xfb, 0x20, 0x21, 0xcb, 0xac, 0x4b, 0x57, 0xdc, 0x18, 0xf5, 0x07, 0x5d, 0x67, 0x8a, 0xf2, 0xba, 0x6e, 0x9e, 0xef, 0xbc, 0x41, 0x38, 0xd8, 0x18, 0x05, 0x3f, 0x2d, 0xf3, 0x2a, 0x10, 0xe8, 0xae, 0x5d, 0x64, 0x09, 0xf5, 0xb2, 0xf1, 0xf3, 0xca, 0xbf, 0x36, 0xf8, 0x08, 0xfd, 0xc0, 0x7c }; /* QIUTx = 0560cf91328c26bba13f71c9b5dddd05c185969d88bd0e9d34a3607a923b23a5b675452167003ae2f0add5141ea4be41ebae91d3a6aa15c393dbf585ad6c9214b269e86b4f054bf5 */ /* QIUTy = 02e32ec240418a9a4f9017e632f8a77897a2233d6f1f45b8f7aa818f847ddb3ceab5a5a12c754fce8d57b0320a076b53441dcf9f65ef3204e089191ef156ff762294897a72fca932 */ static const uint8_t nist_kas_ecc_cdh_testvector_354_out[] = { /* ZIUT */ 0x00, 0x5b, 0x64, 0x00, 0x15, 0x33, 0x0f, 0x84, 0x16, 0xf2, 0xbb, 0xbf, 0x8b, 0x56, 0x60, 0xe0, 0x1a, 0x7a, 0xbb, 0xa8, 0xb0, 0x19, 0x7a, 0x29, 0xe5, 0x2b, 0xb5, 0x35, 0xd6, 0x2f, 0x89, 0xad, 0x04, 0x43, 0xe0, 0x8b, 0x6e, 0x0d, 0x1d, 0x15, 0xf4, 0xeb, 0x03, 0xc0, 0xfe, 0x35, 0xe3, 0xe4, 0x3b, 0xd7, 0x73, 0x9c, 0xb6, 0x92, 0x09, 0x26, 0x98, 0xa2, 0xcd, 0x13, 0x12, 0x6c, 0xee, 0x44, 0x32, 0x83, 0x1e, 0xc7, 0x42, 0x3b, 0x34, 0x34 }; /* COUNT = 4 */ static const uint8_t nist_kas_ecc_cdh_testvector_355_public_x[] = { /* QCAVSx */ 0x03, 0x9a, 0xc9, 0xe9, 0x1a, 0xf5, 0x94, 0x07, 0x4d, 0xcd, 0x33, 0x8d, 0xa4, 0xf5, 0x24, 0x05, 0x74, 0xf0, 0x1e, 0x41, 0x3a, 0x49, 0xb9, 0x22, 0x46, 0xba, 0x3d, 0x6d, 0xe8, 0x55, 0xe3, 0xde, 0xdf, 0x6e, 0x7f, 0xde, 0xda, 0x9a, 0xb7, 0xf7, 0xf8, 0x47, 0x6e, 0x77, 0x0c, 0xe9, 0xbb, 0xc3, 0xa9, 0xa5, 0xeb, 0x98, 0x45, 0x43, 0xdc, 0xc3, 0x7f, 0x5f, 0x11, 0xbe, 0x6e, 0x28, 0xa1, 0xd1, 0x09, 0x09, 0x31, 0xf5, 0xc5, 0xb5, 0xa3, 0x51 }; static const uint8_t nist_kas_ecc_cdh_testvector_355_public_y[] = { /* QCAVSy */ 0x07, 0x80, 0xd3, 0x2d, 0xbb, 0x13, 0x48, 0x99, 0xbd, 0xa2, 0xe9, 0x88, 0x48, 0x94, 0x18, 0x78, 0x38, 0x7a, 0xba, 0x66, 0x65, 0xfd, 0x24, 0x25, 0x21, 0x60, 0xce, 0x31, 0x23, 0xf6, 0x8f, 0x9b, 0x5b, 0xd8, 0xf2, 0x54, 0xa3, 0x8b, 0x84, 0xec, 0x53, 0x65, 0x25, 0xfe, 0x00, 0x7a, 0x86, 0x3b, 0x6f, 0xcc, 0x48, 0x9f, 0x93, 0x7a, 0x05, 0xa5, 0xfd, 0x94, 0x6d, 0x62, 0x82, 0x53, 0x28, 0xa0, 0x9f, 0x83, 0xa7, 0xcb, 0xa2, 0x7f, 0xea, 0x5e }; static const uint8_t nist_kas_ecc_cdh_testvector_355_private[] = { /* dIUT */ 0x02, 0xb5, 0x39, 0xac, 0xc7, 0x70, 0x75, 0x87, 0x99, 0xf4, 0x39, 0x67, 0x0e, 0xae, 0x85, 0xb9, 0xba, 0x34, 0xa8, 0xb4, 0xf3, 0x71, 0xcc, 0x93, 0x5a, 0x20, 0xce, 0x8c, 0x56, 0x65, 0x21, 0xee, 0xcd, 0x8c, 0x4f, 0x5a, 0xff, 0x11, 0x6a, 0xe0, 0xdb, 0x2a, 0xd6, 0xea, 0xe1, 0xa3, 0x38, 0x44, 0x34, 0xc5, 0x99, 0x37, 0x98, 0x21, 0xad, 0x05, 0xd8, 0x1a, 0xda, 0x05, 0x48, 0x29, 0x9d, 0xfd, 0x98, 0xcf, 0xd6, 0xd3, 0xf1, 0x57, 0x35, 0x24 }; /* QIUTx = 06dae538c820443977415cef4e79974ba762b69b434810200cc6fff326a2344cd21be19c153642df82a3e57a5531a8bf19767e1995d2728fcb661d58ec561ef23a34d8607971490d */ /* QIUTy = 0504243c792b903184ea725a947ca89218ca9c8fa1e09a7dd68de88eae90f9bd2a8df414dd69a8b2b1a2ded2c6d7f514c8907997624eb0bc9ea933a2d474ef8f83baea3243834de2 */ static const uint8_t nist_kas_ecc_cdh_testvector_355_out[] = { /* ZIUT */ 0x02, 0x7a, 0xf0, 0x5e, 0xcd, 0x03, 0x32, 0x78, 0x4d, 0x64, 0xb0, 0xb1, 0xbd, 0xb4, 0x5c, 0x31, 0x0f, 0xd4, 0x45, 0xc5, 0xa6, 0xd6, 0xb3, 0x4f, 0x35, 0xf4, 0xea, 0xa3, 0xfa, 0x3e, 0x17, 0x1a, 0xb9, 0x87, 0x63, 0xd2, 0x43, 0xa1, 0xde, 0xdf, 0x46, 0xaa, 0x29, 0x86, 0x46, 0x20, 0xa4, 0x7d, 0x05, 0xee, 0xae, 0xfd, 0x74, 0x81, 0x86, 0xbc, 0xbc, 0xf1, 0x87, 0xc0, 0x1e, 0x7c, 0xe3, 0x6e, 0x2a, 0x53, 0xde, 0xd0, 0x71, 0x03, 0x6b, 0x59 }; /* COUNT = 5 */ static const uint8_t nist_kas_ecc_cdh_testvector_356_public_x[] = { /* QCAVSx */ 0x06, 0xf6, 0x58, 0x84, 0x91, 0x06, 0x0a, 0x1e, 0x88, 0x14, 0x8e, 0x4b, 0xde, 0xe3, 0x8b, 0xc6, 0x74, 0x71, 0x3f, 0xe3, 0x84, 0xd7, 0xcf, 0xdb, 0xf5, 0xbd, 0x90, 0xc9, 0xdb, 0xb6, 0xe1, 0x58, 0x7e, 0x45, 0x9d, 0xce, 0x6e, 0x0d, 0x69, 0xb8, 0xb2, 0xcf, 0xeb, 0x50, 0x55, 0xbe, 0xe5, 0x6a, 0x73, 0xc1, 0x34, 0x36, 0x06, 0x01, 0x98, 0xad, 0x47, 0x50, 0xda, 0xe8, 0x25, 0x3e, 0xa8, 0x39, 0xa2, 0xe2, 0x46, 0xd5, 0x41, 0x45, 0x97, 0x75 }; static const uint8_t nist_kas_ecc_cdh_testvector_356_public_y[] = { /* QCAVSy */ 0x05, 0xb6, 0x1b, 0x8f, 0x7d, 0x8d, 0x6c, 0x81, 0x62, 0xa2, 0x26, 0x9e, 0x72, 0x87, 0xd4, 0x59, 0x03, 0x4b, 0x8f, 0xaa, 0xc0, 0x36, 0x0f, 0xcf, 0x99, 0xfb, 0x21, 0xda, 0x34, 0xa3, 0x14, 0xe6, 0x73, 0x53, 0x19, 0xb9, 0xd0, 0x36, 0x26, 0xb9, 0x26, 0x83, 0x69, 0x34, 0x5f, 0x3a, 0x62, 0x4a, 0xca, 0xdb, 0x21, 0x9b, 0x20, 0x71, 0x88, 0xd0, 0xe9, 0x45, 0xcb, 0xc6, 0x7c, 0x98, 0x20, 0x68, 0xd3, 0x26, 0x13, 0xfc, 0x21, 0xf8, 0xb0, 0xf4 }; static const uint8_t nist_kas_ecc_cdh_testvector_356_private[] = { /* dIUT */ 0x03, 0x18, 0xa9, 0x6e, 0x38, 0x27, 0x82, 0xd4, 0x47, 0x6f, 0x1b, 0xeb, 0xf6, 0x97, 0xa1, 0x07, 0x6f, 0x22, 0xe1, 0xd2, 0xec, 0x84, 0x74, 0x7f, 0x9f, 0xc4, 0x25, 0x05, 0xd5, 0x54, 0x7d, 0xaa, 0xa0, 0x8d, 0x81, 0x47, 0x21, 0x75, 0x96, 0x59, 0x95, 0x86, 0x85, 0xcf, 0x4e, 0xa4, 0xbb, 0xa1, 0x2f, 0xff, 0xb6, 0x6a, 0xf0, 0x9f, 0x66, 0x94, 0x52, 0x1f, 0x11, 0xc0, 0x9b, 0x66, 0x26, 0xc8, 0xae, 0x52, 0xfb, 0xfb, 0x33, 0x6a, 0x52, 0xa1 }; /* QIUTx = 06770f2fcd2e9b7f8bc5c292d283abad85155071fe37ef7ce84f34c7616da3dbe1bdce9ab04cea7bc4bc258c5d2ab77239d3d084568b2dff779988288d9fc6bb364f519d0e855ad3 */ /* QIUTy = 04f6a1f4e5fe00fe9a25d8459b88803988ef2bf2fef5a23f13e7a7e7f3459abfc3d5c00303abcc5080fab81b09d5be0320ef990519a06af13c29562ee955715a82cc0daef2c5e0eb */ static const uint8_t nist_kas_ecc_cdh_testvector_356_out[] = { /* ZIUT */ 0x07, 0x63, 0xc0, 0xd6, 0x59, 0xa7, 0xc0, 0x80, 0x91, 0x20, 0x05, 0xa2, 0xaf, 0xd6, 0x0c, 0xe5, 0x7e, 0x61, 0x06, 0x19, 0xb3, 0x88, 0xef, 0x3d, 0x5d, 0xd3, 0xc9, 0x38, 0x6a, 0xb1, 0x20, 0x69, 0xc6, 0xef, 0x3a, 0x8e, 0x72, 0xeb, 0x74, 0x1c, 0xba, 0x2d, 0xa5, 0xc6, 0xf9, 0x26, 0x7f, 0x6c, 0x09, 0xfa, 0xda, 0x64, 0x59, 0x69, 0x0e, 0xd4, 0xe4, 0x32, 0x44, 0x5d, 0x6f, 0x0f, 0x72, 0xdb, 0xcb, 0x05, 0x9c, 0x87, 0xdf, 0x36, 0xf6, 0x65 }; /* COUNT = 6 */ static const uint8_t nist_kas_ecc_cdh_testvector_357_public_x[] = { /* QCAVSx */ 0x05, 0xa5, 0x2c, 0xeb, 0xf6, 0x81, 0x03, 0xca, 0xb0, 0x26, 0x6c, 0xf2, 0xc6, 0x89, 0xc4, 0x8f, 0x08, 0x05, 0x49, 0xff, 0xfc, 0x70, 0xdb, 0x98, 0x09, 0xc2, 0xa4, 0x6f, 0x90, 0x8b, 0x72, 0x89, 0xbe, 0x59, 0x73, 0x29, 0xf3, 0x9e, 0xe1, 0xe4, 0xcc, 0xa3, 0x98, 0x66, 0x4f, 0xfa, 0x9b, 0xdc, 0xf0, 0x12, 0x93, 0xf4, 0x35, 0x93, 0xd1, 0x88, 0xe1, 0x24, 0x11, 0xd5, 0x7e, 0x55, 0x9b, 0x3f, 0x6a, 0x30, 0xe9, 0x55, 0x48, 0x69, 0xf0, 0x49 }; static const uint8_t nist_kas_ecc_cdh_testvector_357_public_y[] = { /* QCAVSy */ 0x01, 0x4e, 0x13, 0x71, 0x65, 0xfb, 0x0d, 0x53, 0x0e, 0x86, 0x53, 0xd7, 0xcb, 0x2a, 0x84, 0x61, 0x8d, 0xd3, 0xaf, 0xcf, 0xa3, 0xf0, 0x85, 0x60, 0x17, 0x91, 0x42, 0xaa, 0xe9, 0x72, 0x79, 0x0c, 0xe7, 0x46, 0xa2, 0xfd, 0x44, 0x69, 0xd4, 0x15, 0x58, 0x74, 0x43, 0x78, 0xc6, 0x40, 0xae, 0x73, 0xa4, 0x89, 0xbb, 0x7f, 0x81, 0xcd, 0xca, 0x6b, 0x1b, 0xb1, 0x67, 0xc7, 0x94, 0xc2, 0x6d, 0x62, 0x38, 0xa0, 0xd2, 0x56, 0xaf, 0xc3, 0xba, 0x21 }; static const uint8_t nist_kas_ecc_cdh_testvector_357_private[] = { /* dIUT */ 0x02, 0x8b, 0x43, 0x19, 0xeb, 0x70, 0x54, 0xcf, 0xf6, 0x38, 0x28, 0x20, 0xc5, 0x2f, 0x9c, 0x33, 0x2e, 0xae, 0x67, 0x0d, 0x1f, 0x07, 0xcf, 0xc8, 0xf1, 0x47, 0x2e, 0x92, 0x60, 0xf5, 0xe4, 0x7a, 0x38, 0x57, 0x68, 0x01, 0x6c, 0xd2, 0x00, 0x67, 0x00, 0xca, 0x7b, 0xdc, 0x5d, 0x1d, 0x56, 0x7d, 0x92, 0x46, 0x0a, 0xf7, 0xc2, 0xa4, 0x25, 0xdd, 0x0d, 0x78, 0xae, 0xee, 0x3d, 0x15, 0xfb, 0x28, 0xd7, 0x11, 0x67, 0xe6, 0x48, 0x6b, 0x81, 0xc4 }; /* QIUTx = 05b1b114cef13aa5df306ce74197d680f9b8c9d8f6753a09db88466a6bb04eaf1eb873836022d7504f45fae85a8e4a5417edd7ce3a0e5eb9e79264884ed783577b3fc52d825f0b57 */ /* QIUTy = 018e3226e36b4b336799c4684bba505e984dc8819166f17ceb840e36125b283a8c8635ddf7e770406d9856d82b37cff1fbcc5d3f5cf4b55eca41ee131f21ea7bcb19ce05f6564245 */ static const uint8_t nist_kas_ecc_cdh_testvector_357_out[] = { /* ZIUT */ 0x04, 0x28, 0x41, 0x3f, 0x2d, 0x2a, 0xad, 0x4d, 0x52, 0x88, 0x88, 0x5c, 0x2e, 0xdc, 0x8b, 0x97, 0x63, 0x21, 0xae, 0x1d, 0xd4, 0xfc, 0x6b, 0x41, 0x27, 0x5f, 0xb8, 0x8b, 0x8c, 0x5e, 0x77, 0x76, 0x16, 0x5e, 0xff, 0xce, 0x79, 0x02, 0x51, 0x63, 0x53, 0x8a, 0x0e, 0x83, 0xc9, 0x19, 0x22, 0x0a, 0x40, 0x7e, 0xad, 0x6c, 0xef, 0xd6, 0x16, 0xb4, 0xb0, 0x52, 0x94, 0x48, 0x8c, 0x2e, 0xf5, 0xd3, 0x0a, 0xb8, 0xca, 0xa5, 0x5c, 0xcb, 0xd1, 0xb1 }; /* COUNT = 7 */ static const uint8_t nist_kas_ecc_cdh_testvector_358_public_x[] = { /* QCAVSx */ 0x02, 0x6e, 0x2f, 0x1e, 0xe6, 0x4e, 0x79, 0x58, 0xe9, 0x02, 0x54, 0x7a, 0x7d, 0xb0, 0xa1, 0xe1, 0x48, 0x66, 0xf3, 0xd2, 0xc0, 0x12, 0x7c, 0x2b, 0xb9, 0xb0, 0x9e, 0xe2, 0x32, 0xd3, 0xd9, 0x51, 0x8e, 0xe4, 0x4a, 0xe8, 0xf5, 0xbb, 0x43, 0x3a, 0x08, 0x80, 0x69, 0xfa, 0x38, 0x6c, 0xd5, 0xc8, 0x90, 0x27, 0x11, 0xb7, 0x62, 0xac, 0x0d, 0xa3, 0xa7, 0xa3, 0x42, 0x04, 0x72, 0xc4, 0x7e, 0x85, 0x0f, 0x98, 0x8d, 0xd6, 0x0a, 0x63, 0x6d, 0x7d }; static const uint8_t nist_kas_ecc_cdh_testvector_358_public_y[] = { /* QCAVSy */ 0x06, 0x77, 0xff, 0x51, 0x00, 0x52, 0xd4, 0xf4, 0x60, 0x84, 0x9f, 0xb8, 0xef, 0x0d, 0x4f, 0x35, 0x19, 0xcd, 0x23, 0x8e, 0x4e, 0x1c, 0x68, 0x8b, 0x73, 0x6c, 0xf6, 0xe3, 0x75, 0x95, 0x50, 0xd1, 0x34, 0xa1, 0xe6, 0xca, 0x3c, 0xb4, 0x79, 0xd6, 0x8b, 0x4d, 0xc5, 0xd0, 0xbb, 0xa1, 0xae, 0xe1, 0x78, 0xbd, 0x6f, 0xe1, 0x5e, 0xc1, 0x96, 0xfb, 0x1f, 0x62, 0x7d, 0x87, 0x07, 0x93, 0x94, 0xf6, 0xf7, 0x85, 0x4e, 0x05, 0x32, 0x28, 0xde, 0xe5 }; static const uint8_t nist_kas_ecc_cdh_testvector_358_private[] = { /* dIUT */ 0x02, 0x01, 0x15, 0xd1, 0x7e, 0x41, 0xe1, 0x31, 0x78, 0xb4, 0x2a, 0x00, 0x4c, 0x01, 0xd5, 0xe4, 0xef, 0x1c, 0x76, 0x24, 0x10, 0x49, 0xc7, 0xd3, 0x1b, 0xf0, 0xea, 0x85, 0xd6, 0xe0, 0x70, 0xa2, 0xe2, 0xb9, 0x20, 0x80, 0xe6, 0x1d, 0xe5, 0x46, 0xfc, 0xcb, 0xd4, 0xd9, 0x91, 0x23, 0x6b, 0xb3, 0x60, 0xef, 0x3f, 0x20, 0x6e, 0xe1, 0x6d, 0x88, 0x43, 0xa0, 0xdd, 0xc8, 0x03, 0x46, 0x36, 0x64, 0xa8, 0xcc, 0xdc, 0x2d, 0x87, 0xa1, 0x02, 0x77 }; /* QIUTx = 06c8ac34364acae35e3c417160333e48641868fcca04c0d577be06f58ab0a55fd7db779fe737779da33d009f57b5bad49702eacf575acbaf27df833070cd893a7924770c92eff3a0 */ /* QIUTy = 061b82e545d41c62fef068b34cdbf01396115d2a1417f9719483d26986b6d52f8f6de06837795f6d9dd7cd095741114318c6e8a6206b3deeef014f0e44b0dc6684e100e4ac361650 */ static const uint8_t nist_kas_ecc_cdh_testvector_358_out[] = { /* ZIUT */ 0x03, 0x1b, 0xd2, 0xa8, 0x43, 0x69, 0xe9, 0x3d, 0xfa, 0x00, 0x58, 0x14, 0x46, 0xd5, 0x27, 0x62, 0x10, 0x0d, 0x98, 0x5c, 0xc7, 0xbb, 0x91, 0xc4, 0xfa, 0x8b, 0xe7, 0x47, 0x2e, 0x2e, 0x8e, 0x97, 0x81, 0xc5, 0x2b, 0x19, 0xa5, 0x43, 0x30, 0x44, 0x24, 0x41, 0xba, 0xca, 0xe2, 0x3f, 0x4b, 0xdc, 0x76, 0x48, 0x6e, 0xb4, 0x75, 0xd5, 0x1f, 0x26, 0xaa, 0xfb, 0xfb, 0x27, 0x2a, 0x5a, 0xb5, 0xdb, 0x18, 0x4a, 0x4d, 0x3c, 0x30, 0x06, 0xe5, 0xd1 }; /* COUNT = 8 */ static const uint8_t nist_kas_ecc_cdh_testvector_359_public_x[] = { /* QCAVSx */ 0x02, 0x3e, 0xe4, 0xf9, 0xec, 0x24, 0xde, 0xe2, 0x03, 0xac, 0xfb, 0x65, 0x86, 0x31, 0x31, 0x3c, 0x7a, 0xd4, 0x39, 0x4c, 0x47, 0xf1, 0x79, 0x4d, 0x08, 0xb5, 0x99, 0xff, 0xc1, 0x5f, 0x0e, 0x5d, 0xab, 0x29, 0x11, 0xd9, 0x7e, 0x03, 0x0d, 0xdf, 0x7c, 0xb4, 0xbb, 0xad, 0xf8, 0xa5, 0xbc, 0xe0, 0x5c, 0x35, 0x35, 0x8f, 0xbd, 0x0c, 0xf9, 0x5d, 0x3d, 0x5c, 0x7f, 0xf3, 0xcd, 0x8e, 0xe6, 0xb5, 0x4e, 0x37, 0x9d, 0x8d, 0x01, 0x23, 0x93, 0x9b }; static const uint8_t nist_kas_ecc_cdh_testvector_359_public_y[] = { /* QCAVSy */ 0x06, 0x06, 0xbe, 0x23, 0xe7, 0xc5, 0x74, 0x6d, 0xbd, 0x38, 0x40, 0x4f, 0xd6, 0x07, 0xfb, 0x7f, 0x27, 0x8e, 0xe2, 0x49, 0xdc, 0x8e, 0x27, 0x40, 0xcf, 0x1b, 0xb9, 0xb1, 0xc0, 0x7b, 0x1c, 0xf7, 0xe0, 0xa5, 0x0a, 0x43, 0x25, 0x67, 0xd1, 0x86, 0x97, 0x99, 0xa8, 0x03, 0x12, 0x25, 0x10, 0xdb, 0x43, 0x79, 0x81, 0xa2, 0xaa, 0x12, 0x6e, 0xb9, 0xaa, 0xf3, 0xc7, 0xbe, 0x05, 0xa8, 0x0f, 0xac, 0x14, 0x95, 0xe1, 0xc4, 0x0c, 0xa1, 0xc1, 0x06 }; static const uint8_t nist_kas_ecc_cdh_testvector_359_private[] = { /* dIUT */ 0x00, 0x84, 0x7b, 0x54, 0x5e, 0xf4, 0x96, 0x15, 0x67, 0x1f, 0x08, 0xbe, 0x73, 0xa4, 0x91, 0x47, 0x06, 0x31, 0x84, 0x49, 0x33, 0x40, 0x11, 0x1e, 0xa4, 0xdc, 0xe1, 0x3c, 0x2f, 0x92, 0x1f, 0x07, 0xbf, 0xac, 0xff, 0xc8, 0x44, 0x1f, 0x4c, 0x7c, 0x9d, 0x04, 0x79, 0xf5, 0x7f, 0x3a, 0x13, 0xf4, 0xc3, 0x3c, 0x63, 0xed, 0x47, 0xc3, 0xa4, 0x3f, 0xb2, 0xf0, 0x6d, 0x06, 0xa9, 0x78, 0x0e, 0x5c, 0x0b, 0x3a, 0xc3, 0x04, 0x10, 0xad, 0xc4, 0x91 }; /* QIUTx = 06994ddc5ae2c5b6f45dc32b710f1a49391a47f3a0f8c2d7846552fe487ef01cca0431155bb54533b067a29e8367373af95d6a7f0bf98d869b708f48f95f1b88a1530fe22547e97e */ /* QIUTy = 04f6288d4d704f33a898031e7d0046fbf1e34a72c8af190f4d33163343c897ba0c0d8af8a86236a1c3b655b979dc4522d33d66a665b3b6501570f076322af0ad2bbaaa04ea2e995d */ static const uint8_t nist_kas_ecc_cdh_testvector_359_out[] = { /* ZIUT */ 0x04, 0xdf, 0x20, 0x15, 0x4f, 0xa4, 0x9a, 0x1d, 0x6e, 0x04, 0xdc, 0x2b, 0xa6, 0xe5, 0x5a, 0x7f, 0x2a, 0xe5, 0x75, 0xde, 0x5e, 0x2c, 0x6e, 0x40, 0x91, 0xa4, 0xd2, 0xc3, 0x6a, 0xa9, 0x3c, 0xa9, 0x69, 0x9b, 0x89, 0x0f, 0x0e, 0xe4, 0xdf, 0x53, 0xaa, 0x75, 0xd0, 0xd9, 0xba, 0xba, 0xd6, 0x86, 0x05, 0xbc, 0x02, 0x7e, 0xc6, 0x7c, 0x18, 0x7a, 0x68, 0x26, 0xaa, 0xc0, 0xf4, 0xbc, 0x59, 0x6b, 0xaa, 0xe7, 0x88, 0xb3, 0x76, 0x11, 0x02, 0x16 }; /* COUNT = 9 */ static const uint8_t nist_kas_ecc_cdh_testvector_360_public_x[] = { /* QCAVSx */ 0x00, 0xd4, 0xa0, 0xb1, 0x1c, 0x17, 0x39, 0xbe, 0xd0, 0x94, 0xe7, 0x2d, 0x7a, 0x69, 0x23, 0x83, 0x68, 0x36, 0xd9, 0x21, 0x57, 0x46, 0xc7, 0x2c, 0xc6, 0x80, 0x04, 0x5a, 0x36, 0xd8, 0x1a, 0xdf, 0x5e, 0x25, 0x39, 0x4f, 0x26, 0x9a, 0x2a, 0xda, 0x1d, 0x94, 0x39, 0xeb, 0xc3, 0x3b, 0xb9, 0x31, 0xd6, 0xfa, 0x59, 0x5a, 0x25, 0x26, 0x1c, 0x24, 0x4a, 0x1e, 0x17, 0xb0, 0x46, 0xfb, 0x10, 0xfb, 0x54, 0xbb, 0x31, 0x22, 0x88, 0xcf, 0x2e, 0x8d }; static const uint8_t nist_kas_ecc_cdh_testvector_360_public_y[] = { /* QCAVSy */ 0x07, 0x52, 0x04, 0xf5, 0x0d, 0x32, 0xab, 0x8a, 0x6a, 0xbb, 0xff, 0x98, 0x2d, 0x1f, 0xe3, 0x72, 0xb8, 0xc5, 0x41, 0x5b, 0xb5, 0xb7, 0x26, 0xb3, 0x46, 0xaa, 0x4f, 0x08, 0xbe, 0x32, 0xf8, 0xca, 0x28, 0x2c, 0x1e, 0xf6, 0xe1, 0x52, 0x42, 0x33, 0x60, 0xd9, 0x7b, 0x72, 0x8a, 0x07, 0x4e, 0x6b, 0x3c, 0xf3, 0xb9, 0x12, 0x71, 0x8b, 0x16, 0x92, 0xcd, 0x98, 0x30, 0x19, 0x74, 0x1a, 0x25, 0x41, 0x82, 0x42, 0x34, 0xbd, 0xc8, 0xc3, 0x23, 0xf9 }; static const uint8_t nist_kas_ecc_cdh_testvector_360_private[] = { /* dIUT */ 0x03, 0x4c, 0x24, 0x58, 0x30, 0x2b, 0x43, 0x85, 0x7f, 0x12, 0xad, 0x8b, 0xd9, 0xa8, 0x75, 0x23, 0x76, 0x41, 0xa2, 0x1e, 0x21, 0xca, 0x3c, 0xf9, 0xa0, 0x95, 0x6d, 0x3c, 0xfe, 0xde, 0xd9, 0x6a, 0x5e, 0x1f, 0x53, 0x3d, 0x82, 0x7b, 0x52, 0x8f, 0xbb, 0x58, 0x6d, 0xa9, 0x3e, 0xef, 0xbb, 0x66, 0xd0, 0x77, 0x8b, 0x19, 0xb1, 0xa7, 0xfb, 0x6f, 0x17, 0xbb, 0xf9, 0xe7, 0x9b, 0x9a, 0xce, 0xfc, 0xdd, 0x7b, 0x96, 0x05, 0xe7, 0x89, 0x8f, 0x26 }; /* QIUTx = 032d3a7a4099f089fea9189211f7366f2edc4abfb316c5c05948d8de57fca023bfb6a11b102ea4120ba62192c0df610bd8d2f63fc57727f4a6b640abf8d299fac56c4c7af88349ea */ /* QIUTy = 04e6399f1ced2669d3a5506d35ea2bebfccf0cec84bc97383aadc3b48347f629626e6096f890435e5933675048fdcefcdede3ed616e6560d42e9e17c5492e30bc2de4689c0592ecb */ static const uint8_t nist_kas_ecc_cdh_testvector_360_out[] = { /* ZIUT */ 0x03, 0x7a, 0x38, 0x0f, 0x52, 0x55, 0x90, 0x58, 0x26, 0x58, 0xe2, 0xdd, 0x27, 0x2a, 0x32, 0xde, 0x67, 0xfc, 0x0c, 0xf5, 0x39, 0x0b, 0x37, 0xf4, 0xd3, 0x3c, 0x13, 0x59, 0xf0, 0x75, 0xd4, 0x46, 0x1e, 0xa3, 0x8a, 0x55, 0x02, 0x73, 0x17, 0x89, 0x2a, 0x3d, 0x1d, 0x22, 0xf5, 0xea, 0x33, 0x3a, 0xd4, 0x37, 0x66, 0x7d, 0x2f, 0x3e, 0xb8, 0x78, 0x1c, 0x39, 0x50, 0x40, 0x36, 0xae, 0x33, 0xe4, 0xb0, 0xa2, 0x6b, 0x68, 0x94, 0x72, 0x2f, 0x0b }; /* COUNT = 10 */ static const uint8_t nist_kas_ecc_cdh_testvector_361_public_x[] = { /* QCAVSx */ 0x03, 0xbb, 0x84, 0x03, 0x2b, 0x7f, 0xff, 0xce, 0x27, 0xac, 0xcf, 0x35, 0x4b, 0x89, 0xdd, 0xdf, 0x64, 0x6c, 0xdc, 0xb5, 0x66, 0x34, 0xdf, 0x0f, 0x85, 0x20, 0xa7, 0x73, 0x0f, 0x8a, 0xbe, 0xb0, 0x5f, 0x99, 0x33, 0xd8, 0xa4, 0x35, 0x2d, 0x1c, 0x77, 0x67, 0xcc, 0x3f, 0x9b, 0x80, 0xce, 0xff, 0xcd, 0xd0, 0xcb, 0x3a, 0x97, 0xb5, 0x92, 0x83, 0xfd, 0x0a, 0x67, 0x4d, 0xc4, 0xfd, 0x24, 0x03, 0x33, 0xf0, 0x20, 0xc8, 0x2b, 0x48, 0x04, 0xc5 }; static const uint8_t nist_kas_ecc_cdh_testvector_361_public_y[] = { /* QCAVSy */ 0x07, 0x44, 0x99, 0x33, 0x6a, 0xc3, 0xa8, 0x05, 0x43, 0x07, 0x89, 0x90, 0x27, 0x68, 0x25, 0x20, 0x26, 0xb5, 0x26, 0xec, 0xe5, 0x4a, 0xc2, 0x8e, 0x8c, 0xc8, 0x78, 0xf1, 0x8b, 0xaf, 0x9f, 0xab, 0x42, 0xba, 0x4c, 0xe3, 0x4e, 0x49, 0x68, 0xaa, 0xc1, 0xee, 0x6a, 0x0b, 0xb1, 0x5c, 0x9a, 0x70, 0x98, 0x82, 0xa5, 0x37, 0x2a, 0xf5, 0x6e, 0xa0, 0xb3, 0x68, 0x17, 0x38, 0x5f, 0xbb, 0xfe, 0xac, 0x4b, 0x90, 0x60, 0x69, 0xe5, 0x3f, 0xbf, 0xba }; static const uint8_t nist_kas_ecc_cdh_testvector_361_private[] = { /* dIUT */ 0x01, 0x2d, 0xb7, 0x85, 0xa0, 0x3c, 0x26, 0xbe, 0x3a, 0x6e, 0x9a, 0x58, 0x2e, 0x5c, 0x32, 0xa8, 0x95, 0x70, 0xad, 0x43, 0x08, 0xb7, 0x13, 0xce, 0x54, 0x71, 0xea, 0x19, 0x3d, 0xec, 0x1f, 0x32, 0xd6, 0x8b, 0x4f, 0xcd, 0xfb, 0x16, 0x00, 0xfd, 0xb1, 0xec, 0xb6, 0x76, 0x9e, 0x26, 0xa0, 0xe0, 0x57, 0x81, 0x2d, 0xbb, 0xf0, 0xed, 0x49, 0x55, 0x92, 0x66, 0x5e, 0x6b, 0x8e, 0x9a, 0x97, 0x37, 0x8a, 0x30, 0xb5, 0xc6, 0x60, 0xfb, 0xad, 0xc1 }; /* QIUTx = 07edf7ee0ec77f5a6c3c9ec4ed8fd3cb814a342e9cc6470b54781ed6c141e2115c86dbd7ba27993eb7ebed7a38be488f96fddfa982f3691aa1c2a697f7706bff3d1add7396066194 */ /* QIUTy = 07b3824b7f7b266fa42fe536adc2ac79b9d1e5b408e7217b3a99ddeb992f3123ff2d168774d300a818a32692e265afc6f6f578d9bd3121132b5979841f7a2d060e8948901d657c1c */ static const uint8_t nist_kas_ecc_cdh_testvector_361_out[] = { /* ZIUT */ 0x04, 0x20, 0xde, 0x31, 0x3b, 0xdd, 0xce, 0x87, 0xd0, 0x73, 0x21, 0xe3, 0xf0, 0xaf, 0x40, 0x4d, 0x9d, 0x13, 0xe5, 0x36, 0x9b, 0x79, 0x50, 0x6e, 0x80, 0x71, 0x78, 0x71, 0x11, 0x53, 0xc9, 0xb1, 0x83, 0x7c, 0xd0, 0x55, 0x56, 0x2e, 0xff, 0x3a, 0xad, 0xfc, 0x59, 0x54, 0xa2, 0x21, 0xee, 0xeb, 0xb1, 0xbe, 0xc1, 0x69, 0x6d, 0x3d, 0xf1, 0xcc, 0xcf, 0xb8, 0xb6, 0x11, 0x72, 0xa5, 0x0d, 0x83, 0xce, 0xe9, 0x5f, 0x41, 0x40, 0xba, 0x07, 0x0b }; /* COUNT = 11 */ static const uint8_t nist_kas_ecc_cdh_testvector_362_public_x[] = { /* QCAVSx */ 0x06, 0x55, 0x6a, 0x4c, 0xc9, 0x84, 0x66, 0x79, 0x4a, 0x93, 0xd0, 0x33, 0x88, 0x53, 0x67, 0x76, 0xf7, 0xa4, 0xb3, 0x34, 0x4c, 0x3d, 0xc4, 0xeb, 0x96, 0x0a, 0x4a, 0x64, 0x58, 0xfc, 0x78, 0x69, 0xcd, 0x4e, 0x45, 0xb2, 0xf1, 0x40, 0xc4, 0x68, 0xa7, 0xd4, 0xeb, 0xba, 0x84, 0xc9, 0x48, 0x23, 0x37, 0xa2, 0xa8, 0xad, 0xaa, 0xc8, 0x8a, 0x9a, 0x62, 0x9d, 0xa0, 0x3d, 0xd2, 0x47, 0x52, 0x66, 0x42, 0xb0, 0xab, 0x71, 0xfb, 0x7a, 0x8c, 0x70 }; static const uint8_t nist_kas_ecc_cdh_testvector_362_public_y[] = { /* QCAVSy */ 0x05, 0x4b, 0x97, 0xd9, 0x52, 0xb1, 0x9f, 0x74, 0x28, 0x56, 0xda, 0xcf, 0x4e, 0x50, 0xdf, 0x0c, 0x31, 0x03, 0xba, 0xf2, 0x53, 0xf4, 0xde, 0x65, 0xa3, 0xd9, 0xca, 0xce, 0x63, 0xfe, 0x82, 0x90, 0x6d, 0x2c, 0x8e, 0x8a, 0x33, 0x12, 0xfb, 0x53, 0x5e, 0x00, 0xf9, 0xb5, 0xca, 0x69, 0xf8, 0x7d, 0xbc, 0x7f, 0xa3, 0xf7, 0xd8, 0x7f, 0xe0, 0x24, 0x53, 0x66, 0x04, 0xaa, 0xfe, 0x46, 0x40, 0x59, 0x3c, 0xcc, 0xfe, 0xf6, 0xfa, 0xc0, 0x28, 0xa6 }; static const uint8_t nist_kas_ecc_cdh_testvector_362_private[] = { /* dIUT */ 0x02, 0x02, 0x60, 0x6a, 0x76, 0xb6, 0xa1, 0x3d, 0x6e, 0x29, 0x28, 0x0b, 0xc1, 0x61, 0x3e, 0x11, 0x50, 0x25, 0x77, 0x0b, 0x24, 0x5f, 0x55, 0x61, 0xd5, 0x88, 0x3e, 0x13, 0x5e, 0x15, 0x9c, 0xc4, 0x37, 0xb1, 0xc9, 0x35, 0x5b, 0x2e, 0xee, 0x2b, 0x3b, 0xab, 0xef, 0x22, 0x9f, 0xe5, 0x45, 0xaa, 0xb2, 0xbc, 0xca, 0x15, 0x5e, 0x89, 0x72, 0x49, 0x5f, 0x19, 0x74, 0xbd, 0xb1, 0xec, 0x0e, 0x60, 0xc4, 0xe6, 0xc7, 0x9c, 0x48, 0xf2, 0x6a, 0x46 }; /* QIUTx = 06e74dba4e0702f186d334d3c49e2578e1edfac564645dda8c4a588158f8d7a3ef63243653c0d507427734fb4cc87adf4a36bd5abca1f920b9bd6e3bfa51c916d5710884594e9485 */ /* QIUTy = 05b92147a2db48a3830ccfa28951a2b7e8eb84313b99b0a99031c7834c633f865a2f9844952528ae5dee02428a824cdfb7e20928ffc53420df38ead0b4240d0659d5adb1ff2e2dcb */ static const uint8_t nist_kas_ecc_cdh_testvector_362_out[] = { /* ZIUT */ 0x06, 0x06, 0x22, 0x8f, 0x5a, 0x05, 0x07, 0x7a, 0xee, 0xfb, 0xef, 0xac, 0x23, 0xc0, 0xd5, 0xba, 0xc7, 0xa6, 0x06, 0x2b, 0xfc, 0x2b, 0x02, 0xce, 0x8b, 0xba, 0x66, 0x98, 0xea, 0x96, 0xb4, 0x56, 0xb1, 0xf0, 0xd3, 0x2c, 0x6e, 0x05, 0xdb, 0xb9, 0xbe, 0x61, 0xa8, 0x30, 0x90, 0x42, 0x8e, 0xed, 0xea, 0x18, 0xc7, 0x4f, 0x41, 0x23, 0x8e, 0xde, 0xde, 0x9e, 0x3a, 0x12, 0xe2, 0x87, 0x22, 0xd2, 0xf3, 0x14, 0x61, 0x3c, 0x2e, 0x84, 0xd6, 0xdb }; /* COUNT = 12 */ static const uint8_t nist_kas_ecc_cdh_testvector_363_public_x[] = { /* QCAVSx */ 0x01, 0x00, 0x51, 0x82, 0xb0, 0x29, 0xa4, 0x85, 0x28, 0xee, 0xf5, 0xff, 0xd0, 0x22, 0x1a, 0xd8, 0x70, 0x85, 0xab, 0xac, 0x6a, 0x72, 0x70, 0x52, 0x03, 0xa3, 0xc1, 0x68, 0x9a, 0xbb, 0xbc, 0x0e, 0x12, 0x92, 0x7a, 0x5e, 0x83, 0xb3, 0x52, 0xa1, 0xba, 0xd9, 0x77, 0x06, 0x10, 0x1f, 0x44, 0xa1, 0x02, 0x2c, 0xcc, 0x0d, 0x55, 0x22, 0xdc, 0x5d, 0x1c, 0xa1, 0x43, 0x3d, 0xe0, 0x3a, 0x2b, 0xa1, 0xdf, 0x86, 0x48, 0x75, 0xf5, 0x22, 0xbe, 0x61 }; static const uint8_t nist_kas_ecc_cdh_testvector_363_public_y[] = { /* QCAVSy */ 0x01, 0x8b, 0x02, 0xa9, 0x8f, 0x0b, 0x3e, 0x4c, 0xcf, 0x44, 0xa9, 0x69, 0x39, 0xa2, 0x08, 0x3a, 0xb1, 0xf2, 0xa0, 0x4d, 0xaf, 0xd5, 0xbd, 0xce, 0xe3, 0xcf, 0xf4, 0x38, 0xbb, 0x08, 0xbf, 0xf1, 0x20, 0x43, 0xaa, 0x19, 0x2c, 0x5f, 0xcf, 0x34, 0xe1, 0x3b, 0x5c, 0x29, 0x74, 0x2c, 0x5d, 0x86, 0x4b, 0x9c, 0xac, 0x46, 0xbe, 0xa6, 0xe9, 0x6d, 0xf2, 0xb1, 0xbe, 0x44, 0x93, 0xac, 0xf9, 0x50, 0x22, 0x4d, 0x71, 0x73, 0x7f, 0x99, 0x06, 0x58 }; static const uint8_t nist_kas_ecc_cdh_testvector_363_private[] = { /* dIUT */ 0x00, 0x48, 0x67, 0x83, 0x48, 0xac, 0x33, 0xb9, 0x2f, 0x2c, 0x59, 0x67, 0x71, 0x03, 0xea, 0x40, 0x99, 0x46, 0xb5, 0x59, 0x3d, 0x10, 0x5f, 0xc4, 0x98, 0x33, 0x51, 0xc4, 0xed, 0xe9, 0x29, 0xc4, 0xb9, 0x3b, 0xfc, 0x69, 0x58, 0x76, 0x55, 0x5e, 0x3a, 0xce, 0x41, 0x7b, 0x82, 0xac, 0x05, 0xb8, 0x32, 0x67, 0x6a, 0xc2, 0x3e, 0x29, 0x55, 0xa0, 0x9e, 0xe6, 0x4a, 0x20, 0xa5, 0xf9, 0x8e, 0x62, 0x49, 0x9f, 0x43, 0xba, 0x7f, 0x7f, 0xc8, 0xe1 }; /* QIUTx = 031dd4808d2b341b8881f5e50a2dcce38df839009f92185978dfd9a60cdaee005cdba82655647736d407afb90c67cddb13ba2b01618f45e8a274317e02f770f80ef87bbbc1b11056 */ /* QIUTy = 050a0671c9c0ce57a494e6911f1376cf1fc3393885ba8c26f6ddcbb5361876860a35afc1f4560f2970c30db3f1c817dbc8af2b025daed3a9da12d2fae9d714cead80445e6a0a0813 */ static const uint8_t nist_kas_ecc_cdh_testvector_363_out[] = { /* ZIUT */ 0x05, 0x26, 0x69, 0x33, 0x60, 0x19, 0xdb, 0x5e, 0xdd, 0xef, 0x5e, 0xab, 0x23, 0x36, 0xab, 0xeb, 0x60, 0xbb, 0xc7, 0x29, 0x5e, 0x4b, 0xb6, 0x63, 0xab, 0x43, 0xe3, 0x73, 0xfb, 0x6d, 0x88, 0x8d, 0x74, 0x33, 0xec, 0x89, 0xa4, 0x87, 0xa9, 0x1d, 0x4a, 0x59, 0xc2, 0x89, 0xa9, 0x50, 0x9d, 0xdd, 0x1b, 0xab, 0x33, 0xcd, 0x02, 0xa7, 0xbf, 0x37, 0xaa, 0xad, 0x78, 0xdb, 0xed, 0xf0, 0xb4, 0xae, 0x5f, 0x2f, 0x35, 0xd1, 0x5c, 0xb4, 0xe6, 0x28 }; /* COUNT = 13 */ static const uint8_t nist_kas_ecc_cdh_testvector_364_public_x[] = { /* QCAVSx */ 0x07, 0xfa, 0xb4, 0xe5, 0x93, 0x28, 0xc7, 0x00, 0xf7, 0x46, 0x49, 0xbd, 0x90, 0xa7, 0xd5, 0x1f, 0xf2, 0x89, 0x58, 0xfe, 0x72, 0x0d, 0xaa, 0xab, 0x32, 0x8c, 0xfc, 0x9b, 0x00, 0x2a, 0xa7, 0x06, 0xce, 0xb3, 0x99, 0x34, 0xdb, 0x9c, 0xcf, 0x81, 0xde, 0xec, 0x95, 0x68, 0x9c, 0xe8, 0xc7, 0x76, 0xb4, 0xfc, 0x65, 0x42, 0xa8, 0x23, 0x58, 0xcc, 0x51, 0xeb, 0xbc, 0x6d, 0x8e, 0x53, 0x22, 0xcb, 0x3f, 0xa6, 0xe4, 0x69, 0x5e, 0x17, 0x0f, 0xc1 }; static const uint8_t nist_kas_ecc_cdh_testvector_364_public_y[] = { /* QCAVSy */ 0x05, 0xac, 0xd4, 0x5c, 0xff, 0xa2, 0x9d, 0xdb, 0x34, 0xee, 0x42, 0xe7, 0x41, 0x00, 0x26, 0x79, 0x8e, 0x37, 0xa8, 0xd1, 0xa9, 0xce, 0x9f, 0x92, 0x94, 0xda, 0x51, 0x98, 0x16, 0x4b, 0x69, 0x01, 0x0c, 0x68, 0xc5, 0x32, 0x81, 0xcc, 0xbf, 0xc4, 0x07, 0xd1, 0x41, 0x09, 0x7d, 0xa1, 0x37, 0xe7, 0x84, 0x9f, 0x22, 0x8f, 0xdc, 0x1a, 0x07, 0xaa, 0x29, 0x8b, 0xe2, 0x6c, 0xa7, 0x71, 0xf4, 0x7a, 0xc4, 0xfe, 0xb2, 0x72, 0x3d, 0x5a, 0x66, 0x66 }; static const uint8_t nist_kas_ecc_cdh_testvector_364_private[] = { /* dIUT */ 0x00, 0x17, 0xba, 0xb7, 0x2d, 0x78, 0x8f, 0x8b, 0x78, 0xb9, 0xbf, 0xc4, 0x91, 0x28, 0x63, 0xc5, 0xa4, 0x89, 0x22, 0xfe, 0x69, 0xe8, 0xa4, 0xcf, 0x5e, 0x6e, 0x91, 0x76, 0x3e, 0xfd, 0x54, 0x77, 0xa1, 0xcd, 0x43, 0x9d, 0xed, 0xd0, 0xaf, 0xea, 0x50, 0x4e, 0x3b, 0x3a, 0xf6, 0x82, 0x3e, 0xa3, 0x08, 0x9c, 0x03, 0x74, 0xed, 0x9a, 0xee, 0x24, 0xa8, 0x85, 0x16, 0xc8, 0xcf, 0x3a, 0xfa, 0xbe, 0x99, 0x5b, 0x9b, 0x96, 0x75, 0xf3, 0xb5, 0xab }; /* QIUTx = 0161c14bbc84e42ec7677a8c3770065ecd1f0f44eac8242a715a61971e7e4ffff78ff57a1bf1b95cbfc2ed957d1195f9ea50809715c2439c7543e573520135426d47535b8bfc8533 */ /* QIUTy = 01253633d02251464edcc53ed9e8a9ed9329320ef5eeaf35d64c59b9735c96e07f1a62ec17bcee4f04cd9a85a3eb504aaf37bb388c6c7d08d90aa0b68556b5c068ecbf0a5984460d */ static const uint8_t nist_kas_ecc_cdh_testvector_364_out[] = { /* ZIUT */ 0x06, 0x2d, 0xe5, 0xaa, 0x98, 0xb4, 0x40, 0xc6, 0xcb, 0x7a, 0x14, 0x28, 0xf6, 0xb5, 0xe4, 0x74, 0x52, 0xb3, 0x04, 0x54, 0xee, 0xc4, 0xd6, 0x51, 0x98, 0x2b, 0x53, 0x11, 0x21, 0xfe, 0xbb, 0xd5, 0xa3, 0x83, 0x3b, 0x18, 0x00, 0x17, 0xf7, 0xdd, 0xb5, 0xce, 0x38, 0xd7, 0xbb, 0x1c, 0x84, 0x2d, 0xe1, 0xa8, 0xa8, 0xfc, 0x7f, 0xc9, 0x81, 0xe2, 0x47, 0x33, 0xb7, 0x66, 0x28, 0x13, 0xfd, 0x01, 0x0a, 0x4e, 0x75, 0x7c, 0xa4, 0xea, 0x5c, 0x28 }; /* COUNT = 14 */ static const uint8_t nist_kas_ecc_cdh_testvector_365_public_x[] = { /* QCAVSx */ 0x07, 0x26, 0x76, 0x30, 0x2a, 0xd1, 0x87, 0x31, 0xb7, 0x62, 0x02, 0xbc, 0x51, 0x42, 0x9e, 0xbf, 0x7e, 0xcc, 0xf6, 0x32, 0x5f, 0x4e, 0x08, 0x4c, 0x2f, 0x92, 0xe3, 0x28, 0x8e, 0xd2, 0x90, 0x48, 0x8b, 0x9e, 0x36, 0x72, 0x0e, 0x29, 0xda, 0xa2, 0xdb, 0x19, 0x93, 0xa7, 0xd1, 0x7c, 0xe8, 0xef, 0x9d, 0x8c, 0xce, 0xc6, 0x1d, 0xe8, 0xa4, 0x07, 0x17, 0x6e, 0x26, 0x74, 0xc2, 0x5d, 0x57, 0xbf, 0xf2, 0xc4, 0x65, 0x96, 0x35, 0x8b, 0x36, 0x05 }; static const uint8_t nist_kas_ecc_cdh_testvector_365_public_y[] = { /* QCAVSy */ 0x03, 0xc0, 0x02, 0x2d, 0x53, 0x22, 0x90, 0x91, 0xe1, 0x4a, 0xf0, 0xf7, 0x45, 0x0d, 0xec, 0xa1, 0xcb, 0x5d, 0xb8, 0x21, 0xe7, 0x15, 0x90, 0x60, 0x8f, 0xe0, 0x98, 0x6d, 0x73, 0xe8, 0x8c, 0x91, 0x5e, 0x5e, 0xe8, 0xdf, 0xeb, 0xc8, 0x95, 0x59, 0x13, 0xd9, 0x16, 0x4f, 0x99, 0x2f, 0x56, 0x39, 0x4a, 0x66, 0x2e, 0xf1, 0x1c, 0x82, 0x14, 0xe8, 0xad, 0xa8, 0x5d, 0xf1, 0xb1, 0x7b, 0x0b, 0x97, 0x41, 0x4c, 0xdd, 0x66, 0x2d, 0x18, 0x8b, 0x5d }; static const uint8_t nist_kas_ecc_cdh_testvector_365_private[] = { /* dIUT */ 0x02, 0xab, 0x2d, 0x43, 0x02, 0x7b, 0x08, 0xf8, 0xab, 0xfa, 0x35, 0x98, 0xef, 0x01, 0x44, 0x39, 0x9a, 0x60, 0xb6, 0x03, 0x7b, 0x17, 0xa3, 0xae, 0x41, 0x3d, 0x42, 0x2e, 0xfa, 0x21, 0x67, 0xe9, 0xea, 0x4f, 0x19, 0xd7, 0xec, 0xa9, 0x8d, 0x85, 0xc6, 0x7c, 0x1f, 0xe8, 0x5f, 0xbc, 0xbc, 0x1f, 0x12, 0xba, 0xfa, 0x30, 0xa8, 0x5d, 0xbd, 0xf5, 0x42, 0x46, 0x68, 0x89, 0x31, 0x5f, 0x15, 0x32, 0xde, 0xfc, 0x5d, 0x18, 0x15, 0x09, 0xf0, 0x08 }; /* QIUTx = 0328c0d67fd552ea10e5bdf7b87d50bf4dcba34dca569aeb869c5c7dc7d832ce30feed32e25a723793f97c557e2f978c5e1349e69b73ef9916001ffb0d6cdb2c6343e34538386e6e */ /* QIUTy = 01d151b46ed004263cd9a5c0d46a840d03222631f92ff9280e95a35746cdbcafd9fed6811c7614b9d50aa2828dc7a275b39d3d418a349dd1e2b73211f4de9a34b42fca11b9760eca */ static const uint8_t nist_kas_ecc_cdh_testvector_365_out[] = { /* ZIUT */ 0x07, 0xc7, 0xeb, 0x48, 0x92, 0x81, 0x6c, 0xc3, 0x38, 0x8e, 0xbc, 0xdf, 0xb4, 0x12, 0x98, 0x4e, 0x05, 0x91, 0x0c, 0x11, 0x2d, 0xd1, 0x5b, 0x8e, 0x54, 0x81, 0x71, 0x94, 0x01, 0x70, 0x1a, 0xce, 0xba, 0x22, 0xfc, 0xf3, 0x5a, 0xab, 0x0c, 0x3b, 0x04, 0x00, 0x96, 0x16, 0x10, 0x11, 0xf6, 0x17, 0x70, 0x97, 0xc5, 0x05, 0x39, 0x5d, 0x9d, 0x6d, 0x8a, 0x71, 0x3f, 0x6a, 0x51, 0x00, 0xfb, 0x47, 0x6a, 0xdb, 0xe7, 0xb9, 0xcd, 0xf4, 0xb6, 0x8b }; /* COUNT = 15 */ static const uint8_t nist_kas_ecc_cdh_testvector_366_public_x[] = { /* QCAVSx */ 0x06, 0xcd, 0x79, 0x31, 0xfc, 0xf1, 0x93, 0x5f, 0x81, 0xf3, 0x01, 0x47, 0x9e, 0xd9, 0xad, 0x0c, 0x6f, 0x9a, 0x05, 0xbe, 0xcf, 0x4e, 0x57, 0x3a, 0x2f, 0xf4, 0x09, 0xba, 0xfc, 0x44, 0x2e, 0xc1, 0x95, 0xf7, 0xe3, 0xfd, 0xfd, 0x08, 0xe5, 0x81, 0x61, 0xd4, 0xe0, 0xfd, 0x37, 0xf6, 0x2a, 0x96, 0x94, 0x21, 0xb1, 0x9c, 0xd4, 0x8f, 0xe8, 0x48, 0xa5, 0xd7, 0xf7, 0x4b, 0x81, 0x37, 0xa7, 0xc7, 0x26, 0xa9, 0xcb, 0xd3, 0x7a, 0x2c, 0xf3, 0xb4 }; static const uint8_t nist_kas_ecc_cdh_testvector_366_public_y[] = { /* QCAVSy */ 0x04, 0xb5, 0xb2, 0xcd, 0x83, 0xb2, 0x78, 0x95, 0x75, 0x1c, 0x34, 0xd3, 0xac, 0x5b, 0x96, 0x0a, 0x13, 0x3e, 0xc1, 0x8b, 0x03, 0x9c, 0x2e, 0x12, 0x8d, 0x34, 0x41, 0xdb, 0x4f, 0x76, 0xe8, 0xb7, 0x50, 0x64, 0x09, 0x46, 0x19, 0xb1, 0x22, 0xe5, 0xfb, 0x2f, 0x1c, 0x27, 0x96, 0x55, 0x9a, 0xd9, 0x53, 0xc7, 0x11, 0xe3, 0x30, 0xdc, 0x7b, 0xf5, 0x5e, 0xdf, 0x29, 0xf0, 0x95, 0xca, 0xe4, 0x55, 0x57, 0xb7, 0xc8, 0xd5, 0x84, 0x3d, 0x89, 0xbd }; static const uint8_t nist_kas_ecc_cdh_testvector_366_private[] = { /* dIUT */ 0x00, 0x49, 0xc6, 0xe4, 0xc0, 0x5a, 0x19, 0x7b, 0x24, 0xaf, 0xd2, 0x70, 0x72, 0x43, 0xff, 0xbf, 0xd5, 0x5b, 0x00, 0x88, 0xfd, 0x33, 0xd8, 0x7d, 0xae, 0x4d, 0x21, 0x04, 0x8f, 0x75, 0xf2, 0xb8, 0x62, 0x56, 0x30, 0x75, 0x24, 0x1d, 0x2f, 0x36, 0xfd, 0xd0, 0xe9, 0x40, 0x5a, 0xb4, 0x2a, 0xa5, 0x5c, 0xbf, 0x20, 0x95, 0xda, 0xbc, 0x3d, 0xae, 0xdf, 0xae, 0x9d, 0xeb, 0x92, 0x22, 0x20, 0x78, 0x3e, 0x85, 0x91, 0xcf, 0xd6, 0x76, 0x00, 0xb1 }; /* QIUTx = 001fe29a4c2dd000bbed129121b88edbb5c39b34003f170ac19fa9a85c5fe587aab821361f4963440f25acb49758810552f06b719a9eb43b720e9b7ad6ef9d41248d5f335f99515a */ /* QIUTy = 01499db95808c719d24eb05c633db8b05cf969ca0bf656435b1fdf1b0928290f6a6bf880adb9fd53c86ec76e0f62ce89cbeb4c266f64a876d778231a0030c38aa00d66c6bd680785 */ static const uint8_t nist_kas_ecc_cdh_testvector_366_out[] = { /* ZIUT */ 0x05, 0xc6, 0x38, 0x34, 0x90, 0x00, 0xec, 0x30, 0x88, 0x1c, 0xd1, 0x90, 0xc0, 0x67, 0xe7, 0xf1, 0x2b, 0x6b, 0x42, 0xd5, 0x84, 0x2a, 0x82, 0x85, 0xa8, 0xff, 0x0d, 0xc7, 0xe9, 0xc9, 0xea, 0xf4, 0x83, 0x30, 0x9e, 0x48, 0x31, 0x4f, 0xdc, 0x2c, 0xe7, 0xf9, 0xda, 0x6a, 0x46, 0x8e, 0x54, 0x9c, 0x8e, 0x70, 0xa5, 0x0b, 0x68, 0xd0, 0x7a, 0xee, 0x29, 0x70, 0x8a, 0x98, 0x17, 0x22, 0x09, 0xe5, 0xcd, 0x2e, 0x8c, 0x09, 0xcb, 0x66, 0xd9, 0x82 }; /* COUNT = 16 */ static const uint8_t nist_kas_ecc_cdh_testvector_367_public_x[] = { /* QCAVSx */ 0x02, 0x98, 0x4b, 0x65, 0x30, 0x74, 0xc3, 0x6a, 0x25, 0x9a, 0xd9, 0x56, 0xd5, 0x55, 0x65, 0x12, 0xc2, 0xc7, 0x31, 0xfa, 0x50, 0xf2, 0x00, 0x5d, 0x00, 0x49, 0xa9, 0xd9, 0x77, 0xde, 0x5c, 0x00, 0xb7, 0xa0, 0x54, 0xc9, 0x60, 0xcd, 0xd7, 0x07, 0x89, 0x63, 0x21, 0x49, 0x0b, 0xe4, 0x33, 0xbd, 0x5e, 0xff, 0xd4, 0x4c, 0x56, 0x4e, 0xaa, 0x2d, 0x50, 0x21, 0x17, 0x50, 0x50, 0xc5, 0xbf, 0xc1, 0x63, 0xcd, 0xb1, 0xe8, 0x1d, 0xf1, 0x33, 0x5a }; static const uint8_t nist_kas_ecc_cdh_testvector_367_public_y[] = { /* QCAVSy */ 0x01, 0xa7, 0x86, 0xd2, 0x90, 0x98, 0xb3, 0x34, 0xf5, 0xc1, 0xc4, 0xae, 0x86, 0xa4, 0x1b, 0xf2, 0x75, 0xcc, 0x67, 0x87, 0xda, 0x72, 0x06, 0x91, 0x65, 0x57, 0xa4, 0xf4, 0x33, 0x19, 0x21, 0x41, 0x03, 0x45, 0x67, 0xe0, 0x41, 0xd5, 0x5d, 0x79, 0x4a, 0x77, 0x07, 0xc7, 0xaa, 0xf2, 0x88, 0x42, 0xd5, 0xc8, 0xf5, 0x90, 0x37, 0x5a, 0x43, 0x65, 0x69, 0x18, 0xaa, 0x80, 0xe5, 0x5b, 0x02, 0x85, 0x34, 0x7c, 0xce, 0x8f, 0xfe, 0x1f, 0x15, 0xe8 }; static const uint8_t nist_kas_ecc_cdh_testvector_367_private[] = { /* dIUT */ 0x01, 0x86, 0xb3, 0x1c, 0xe4, 0x90, 0xc7, 0xf2, 0x8f, 0x27, 0x93, 0x07, 0x5a, 0x4a, 0xe6, 0x45, 0xac, 0xb3, 0x9e, 0x71, 0xff, 0xe9, 0x44, 0xee, 0x62, 0xbf, 0x82, 0x58, 0x7f, 0x1c, 0x3c, 0xbe, 0x28, 0x8c, 0xe6, 0x02, 0x4d, 0x8d, 0x03, 0x5f, 0x10, 0x7d, 0x9a, 0x4f, 0xae, 0xd5, 0x7a, 0x7b, 0x21, 0xee, 0x1d, 0x6e, 0x71, 0x29, 0xa0, 0x98, 0x00, 0x4f, 0x22, 0xcc, 0xd5, 0x27, 0x40, 0xc0, 0x34, 0xa6, 0xdf, 0x37, 0xb5, 0x3d, 0x07, 0x32 }; /* QIUTx = 06b15f1a859e3d80924611b20c1b94dff6bd0574fef81937f1e54d148d2d31f8c21b0ea9ce031c9455706f085a69fd492418558c7de9aadc2c9a996e7ed1feda329c7d7609bb6b22 */ /* QIUTy = 032910544cb136e2c29aa33572aa6c3471a52ebca6b228bee749fa9ffe29296a4a5b6aa0c6dc9f095216e7b1513d81cba00794a3f558f74a1b541c73b2308f4f8e74028b5c2bcdf3 */ static const uint8_t nist_kas_ecc_cdh_testvector_367_out[] = { /* ZIUT */ 0x00, 0x7a, 0x40, 0xa5, 0x9b, 0x66, 0x32, 0x15, 0x6a, 0x43, 0x15, 0x85, 0x65, 0xa4, 0xee, 0xaf, 0x80, 0x61, 0x8e, 0x50, 0x1c, 0x5a, 0xc5, 0xaf, 0xda, 0xb4, 0xce, 0x3c, 0xb7, 0x6a, 0xc9, 0x9a, 0x0b, 0xcd, 0x17, 0xe9, 0xee, 0xc5, 0x49, 0x37, 0x3a, 0xce, 0x8c, 0x96, 0xaa, 0xc7, 0x8e, 0x2a, 0xf6, 0x60, 0x04, 0x83, 0xa2, 0xc4, 0x9e, 0xc8, 0x12, 0x98, 0xa0, 0x83, 0xd5, 0x23, 0x71, 0x18, 0xde, 0x96, 0xa9, 0x53, 0x99, 0x9b, 0xeb, 0x26 }; /* COUNT = 17 */ static const uint8_t nist_kas_ecc_cdh_testvector_368_public_x[] = { /* QCAVSx */ 0x01, 0xa8, 0x68, 0x2e, 0x09, 0xec, 0xcd, 0x18, 0x68, 0xda, 0x20, 0x29, 0x16, 0xa5, 0x61, 0xee, 0x85, 0x13, 0xc0, 0xd7, 0x34, 0x70, 0xcd, 0x34, 0x1a, 0xee, 0x79, 0xed, 0x93, 0x55, 0x6a, 0x3a, 0x6e, 0x7c, 0x7b, 0x20, 0x30, 0x2e, 0xc7, 0x4a, 0x0c, 0x51, 0x70, 0xa8, 0xe3, 0x7d, 0x78, 0xa9, 0xb5, 0xd0, 0xde, 0x39, 0x00, 0xeb, 0x2a, 0x66, 0x3a, 0x72, 0x47, 0xcf, 0x79, 0x43, 0xfd, 0x38, 0x1d, 0x95, 0xb3, 0xaa, 0xfd, 0x15, 0x61, 0x67 }; static const uint8_t nist_kas_ecc_cdh_testvector_368_public_y[] = { /* QCAVSy */ 0x05, 0x2f, 0xec, 0xc6, 0x8f, 0x76, 0x95, 0xd4, 0xe4, 0x1a, 0x08, 0x0c, 0x47, 0x65, 0x0d, 0x20, 0x28, 0x74, 0xda, 0x16, 0x3a, 0x17, 0x48, 0xe5, 0x50, 0x37, 0x39, 0x58, 0xe3, 0x1b, 0xd0, 0xaa, 0xe5, 0x20, 0x99, 0x6d, 0x30, 0xf3, 0x84, 0x73, 0x0f, 0x48, 0x54, 0xf5, 0xe5, 0x4e, 0x68, 0xcc, 0x24, 0x95, 0x8a, 0xdc, 0x52, 0xe2, 0xa4, 0xc4, 0x07, 0x35, 0x65, 0x14, 0xf3, 0xea, 0x71, 0x66, 0x05, 0x6d, 0xc6, 0x7e, 0x4d, 0x11, 0x8f, 0xa8 }; static const uint8_t nist_kas_ecc_cdh_testvector_368_private[] = { /* dIUT */ 0x03, 0x41, 0xf8, 0xe8, 0x61, 0x82, 0xde, 0x4f, 0xc3, 0xf4, 0x38, 0x57, 0x25, 0x0a, 0x92, 0x9a, 0x41, 0x99, 0x4d, 0x33, 0x1d, 0xa1, 0x54, 0xc0, 0x24, 0x9f, 0xa0, 0xd1, 0xc2, 0x6a, 0x6d, 0xe0, 0xe8, 0x35, 0xfa, 0x08, 0xa8, 0xcc, 0x52, 0x4e, 0x3d, 0xac, 0x28, 0x63, 0x83, 0xf9, 0x0b, 0xd2, 0xf4, 0xd2, 0xc7, 0x51, 0x42, 0xf1, 0xd3, 0x81, 0x08, 0xd9, 0xc0, 0x62, 0x14, 0x3c, 0x8e, 0x6e, 0xdb, 0xbd, 0xa0, 0xaf, 0x87, 0xa7, 0x6a, 0xd5 }; /* QIUTx = 02c5c5eb7327402672573c37b492890343ab422b51bc65b600766ec1d07908ff03bcfde7694d832bcde52946339df0aab4074ae07a89f821f5a1130d2b73db0c423ae7a023ae2c18 */ /* QIUTy = 0476ed3dbd936d1c36987a43512c8f0562e316122d05a7edd4e4248984c11f6eb85215d5aaa0262a95f20666c9dbf45248ae177d2dfffa3a6a950533298b5c3f4a1b62da1eafcd51 */ static const uint8_t nist_kas_ecc_cdh_testvector_368_out[] = { /* ZIUT */ 0x02, 0x1f, 0xd2, 0x72, 0x69, 0x73, 0x40, 0x5f, 0xc3, 0x0d, 0x2a, 0x1f, 0x21, 0x15, 0x90, 0x7c, 0xbd, 0x0d, 0xe9, 0x0b, 0xb6, 0xbc, 0xb0, 0x49, 0x64, 0x52, 0xe3, 0x89, 0xb1, 0xb1, 0x0c, 0xcf, 0x38, 0xe2, 0x40, 0x06, 0x17, 0x04, 0x0c, 0xf0, 0xdb, 0xb1, 0x88, 0xf3, 0x45, 0x33, 0x76, 0x78, 0xb0, 0xad, 0x86, 0x03, 0xdc, 0xfe, 0x92, 0x65, 0x82, 0xd4, 0x32, 0x1f, 0x38, 0x4d, 0xae, 0xc0, 0x94, 0x3e, 0x2c, 0xd2, 0x67, 0xf4, 0x83, 0x43 }; /* COUNT = 18 */ static const uint8_t nist_kas_ecc_cdh_testvector_369_public_x[] = { /* QCAVSx */ 0x02, 0xcd, 0xaf, 0x13, 0x9a, 0x0c, 0xda, 0x28, 0x00, 0xd6, 0x11, 0x28, 0xff, 0xe4, 0xd7, 0x32, 0x3b, 0x34, 0xa0, 0xfc, 0xf4, 0x8c, 0x94, 0x00, 0x47, 0x9f, 0xf4, 0xc8, 0x29, 0x1c, 0xbf, 0x46, 0xf1, 0x6c, 0x41, 0xe4, 0x40, 0x9a, 0xae, 0xdf, 0x14, 0xbc, 0x60, 0xa6, 0x42, 0xb2, 0xd7, 0xba, 0xac, 0xde, 0x8e, 0x00, 0x51, 0xdd, 0x8a, 0xe0, 0x1b, 0xf5, 0xad, 0x2e, 0x6e, 0x64, 0x90, 0xc7, 0x7c, 0xd4, 0x06, 0xa9, 0x99, 0xc5, 0x65, 0xe6 }; static const uint8_t nist_kas_ecc_cdh_testvector_369_public_y[] = { /* QCAVSy */ 0x07, 0x8e, 0xdd, 0x29, 0xdb, 0x6a, 0x3b, 0x87, 0xa1, 0x15, 0x05, 0xb5, 0x7c, 0x54, 0x3f, 0xfb, 0x74, 0x6a, 0x5b, 0x40, 0xfb, 0x83, 0xd7, 0x20, 0x61, 0x80, 0xf3, 0xae, 0x9f, 0xcb, 0x22, 0x2c, 0x54, 0x11, 0xa7, 0x74, 0x76, 0x66, 0x0c, 0x7b, 0x31, 0x1b, 0x64, 0x63, 0x10, 0x90, 0x58, 0x89, 0xa9, 0x5a, 0x0f, 0x2f, 0xdc, 0x35, 0xd3, 0x0f, 0xc6, 0x1c, 0xc5, 0x56, 0x0a, 0x29, 0x14, 0x23, 0x2d, 0x62, 0xad, 0x36, 0x38, 0x6b, 0x91, 0x79 }; static const uint8_t nist_kas_ecc_cdh_testvector_369_private[] = { /* dIUT */ 0x02, 0x07, 0xa7, 0x38, 0x2d, 0x8a, 0x22, 0x57, 0x12, 0x26, 0xe0, 0xc0, 0x6c, 0x26, 0x81, 0xd0, 0x9b, 0xca, 0x19, 0xb5, 0xdb, 0x7e, 0x7b, 0xbf, 0xc1, 0x3a, 0xc2, 0x08, 0x38, 0x9d, 0xf8, 0x16, 0x8d, 0x77, 0x61, 0x5e, 0x30, 0xca, 0x86, 0x10, 0x39, 0x36, 0xe5, 0x3d, 0xd9, 0xaf, 0x01, 0xcd, 0xfe, 0x24, 0xf5, 0x08, 0xec, 0x60, 0x93, 0x99, 0x77, 0x5c, 0xe8, 0x4c, 0x86, 0x89, 0xf8, 0xd5, 0xf9, 0x6f, 0x65, 0x2e, 0x01, 0x4e, 0x0d, 0xe8 }; /* QIUTx = 04608dc0512bc55c734cd562ac5825f7ca38b793f8ece9b981cc1c4032ddd8039164d0c646b42b2fd453b5a1d3a74ae23c32c7d584007de3cd34e33121b90fab3ada6621b3ac9785 */ /* QIUTy = 06aa9ffbfd65c509370846707674ac723dac24a6f33a1e0bbcdf8b24ba32cf7bdec8fdc9233b757bc073d64dedf484c6fa01ef28e874fb0d34f58b0e32b18645c30bdcb516ee3841 */ static const uint8_t nist_kas_ecc_cdh_testvector_369_out[] = { /* ZIUT */ 0x07, 0xa4, 0x7b, 0xdc, 0x7d, 0x54, 0xec, 0xd3, 0x91, 0x67, 0x2f, 0x13, 0x1b, 0x32, 0x14, 0xd0, 0xef, 0xc4, 0xd4, 0x01, 0x95, 0xdb, 0x1e, 0xc9, 0x93, 0xa6, 0x2f, 0xe9, 0xda, 0x87, 0x5e, 0xff, 0xf5, 0x40, 0x3b, 0xd7, 0x08, 0xfa, 0x49, 0x1a, 0x01, 0xa9, 0x4f, 0x4b, 0xdd, 0xc7, 0xd5, 0x16, 0xba, 0xff, 0xff, 0x9f, 0xbd, 0xd2, 0x13, 0xca, 0x1a, 0x49, 0x05, 0xf9, 0xaa, 0x67, 0x9d, 0x65, 0xda, 0x25, 0xc0, 0xf1, 0xfd, 0x2a, 0xfb, 0x0a }; /* COUNT = 19 */ static const uint8_t nist_kas_ecc_cdh_testvector_370_public_x[] = { /* QCAVSx */ 0x00, 0x05, 0x15, 0x12, 0xe4, 0xa0, 0xdb, 0xc5, 0x35, 0xc9, 0x7b, 0xe1, 0x0f, 0xfa, 0x74, 0x25, 0x75, 0x83, 0x82, 0x88, 0x30, 0x40, 0x46, 0x66, 0x01, 0xd5, 0x39, 0x1b, 0xcb, 0x35, 0x82, 0xc1, 0x15, 0x25, 0x29, 0x32, 0x49, 0xf2, 0x44, 0x97, 0xcc, 0x80, 0x72, 0x16, 0xb3, 0x4c, 0x92, 0xc1, 0xe0, 0x75, 0x78, 0x1c, 0x83, 0x91, 0xc3, 0xf6, 0xd3, 0xd1, 0x4f, 0x88, 0xa1, 0xd5, 0x0e, 0xa9, 0xfc, 0x75, 0xff, 0x8d, 0x51, 0xcc, 0xf9, 0x33 }; static const uint8_t nist_kas_ecc_cdh_testvector_370_public_y[] = { /* QCAVSy */ 0x03, 0x9d, 0xa4, 0x6c, 0xac, 0x86, 0x6a, 0xb3, 0x47, 0x61, 0x7a, 0xc5, 0xa8, 0xb4, 0xf1, 0x65, 0x70, 0x34, 0xe3, 0xb8, 0xdd, 0xb6, 0x6b, 0xc4, 0x27, 0x3e, 0x2e, 0x1c, 0xe0, 0x16, 0x41, 0xec, 0xe6, 0x36, 0x97, 0x9d, 0xe8, 0xb2, 0x49, 0x2d, 0xc6, 0x9e, 0x88, 0x53, 0x7c, 0x36, 0xb1, 0xc3, 0xad, 0x0d, 0x35, 0x22, 0x7f, 0x86, 0x7e, 0x43, 0xdf, 0x9c, 0x89, 0x17, 0xdc, 0xe9, 0xf8, 0xc1, 0xef, 0x3b, 0xa3, 0xcb, 0x5c, 0xa8, 0xba, 0x52 }; static const uint8_t nist_kas_ecc_cdh_testvector_370_private[] = { /* dIUT */ 0x00, 0x6b, 0xa8, 0xf1, 0x2c, 0xc6, 0xe0, 0xe7, 0x8d, 0xf8, 0xcc, 0x62, 0x98, 0x84, 0x8a, 0x74, 0x00, 0x25, 0xe7, 0x2c, 0x62, 0xd0, 0x99, 0xe9, 0x25, 0x84, 0xac, 0x76, 0xf5, 0x95, 0xac, 0x1f, 0xc7, 0x24, 0xcb, 0x06, 0xa8, 0x5a, 0x07, 0xf0, 0xd4, 0x44, 0x0f, 0xaf, 0x3d, 0xde, 0xa2, 0xf2, 0x65, 0xf2, 0x01, 0x5d, 0xd0, 0x59, 0xa1, 0x6a, 0x03, 0xa2, 0x99, 0x15, 0xb8, 0x73, 0x1d, 0x60, 0x45, 0x12, 0xce, 0xef, 0x22, 0xb8, 0x41, 0xf3 }; /* QIUTx = 0636f435e80600666108737300773a8ed6ffa8ebf8307c81ff5f44353e91bad086331b8feff3f1cdb86e061bde5f71c5fb938f117e2226a97d2b66b098e9ff525182c816e702c6a9 */ /* QIUTy = 01c1bd8afae6a94108fc2c755d5de3fa2a4b3471fc2a5cdf4adda68529bf180ff28db154ab4311247b392e93a335bbe8796608bbd6013f43cdcc846ec22267423c3cfda2ce8a3d96 */ static const uint8_t nist_kas_ecc_cdh_testvector_370_out[] = { /* ZIUT */ 0x07, 0x32, 0x61, 0x96, 0xa7, 0xde, 0xcc, 0x92, 0xc8, 0x1a, 0xe5, 0xa0, 0x77, 0x9c, 0x9a, 0x42, 0xf5, 0x3d, 0x94, 0xcf, 0xa4, 0xc3, 0xa1, 0x3f, 0x19, 0xdb, 0xb5, 0x54, 0x13, 0x8e, 0x0e, 0x86, 0x4e, 0xee, 0x6b, 0xc9, 0x3e, 0x39, 0x21, 0x4e, 0x2f, 0x74, 0x70, 0x5a, 0x4b, 0x17, 0x2a, 0xab, 0x51, 0x04, 0x44, 0xc9, 0x3b, 0x5b, 0x3e, 0x62, 0x51, 0x7b, 0xbb, 0x72, 0x79, 0x33, 0x71, 0x02, 0xdb, 0x1c, 0x61, 0xde, 0x34, 0x9d, 0x97, 0x47 }; /* COUNT = 20 */ static const uint8_t nist_kas_ecc_cdh_testvector_371_public_x[] = { /* QCAVSx */ 0x00, 0x4c, 0x2d, 0xe5, 0x64, 0x24, 0x31, 0xbc, 0xc6, 0xeb, 0x82, 0xef, 0xd4, 0x35, 0x55, 0x40, 0xa8, 0xb5, 0xd2, 0x3b, 0x12, 0xb0, 0xdf, 0x7d, 0x31, 0xad, 0x69, 0x42, 0x5b, 0x94, 0x54, 0x98, 0x77, 0x44, 0x3e, 0xe8, 0xdd, 0x7c, 0x09, 0xcf, 0xbb, 0xed, 0x86, 0xf1, 0x36, 0x65, 0x93, 0x1d, 0x4b, 0x2a, 0x21, 0x75, 0x9c, 0x33, 0xe1, 0x0b, 0x4a, 0xcf, 0xc6, 0x3b, 0xa1, 0xef, 0x61, 0xac, 0xaa, 0xa1, 0x8c, 0x94, 0xe3, 0xcf, 0xc9, 0x33 }; static const uint8_t nist_kas_ecc_cdh_testvector_371_public_y[] = { /* QCAVSy */ 0x01, 0x76, 0x5b, 0x7a, 0x37, 0xeb, 0x80, 0x6d, 0x43, 0x19, 0x6d, 0x29, 0x31, 0xda, 0x1a, 0x19, 0x53, 0x74, 0x2d, 0x3e, 0x0d, 0xa7, 0xcc, 0xb6, 0x7e, 0x0d, 0xfd, 0xba, 0x5e, 0x03, 0x49, 0x14, 0xcc, 0xe3, 0xee, 0x63, 0x93, 0xbf, 0xde, 0x40, 0x67, 0x0f, 0x40, 0x61, 0x96, 0x06, 0x7d, 0xa8, 0xb2, 0x93, 0xc6, 0x84, 0x35, 0x93, 0xdd, 0x22, 0x1c, 0x89, 0xbf, 0x97, 0x96, 0x36, 0x76, 0xbd, 0x04, 0x4e, 0x8c, 0x8a, 0xb8, 0xe7, 0x17, 0xad }; static const uint8_t nist_kas_ecc_cdh_testvector_371_private[] = { /* dIUT */ 0x01, 0x07, 0x16, 0xf2, 0xe7, 0x74, 0xf2, 0x7f, 0x42, 0xde, 0x3f, 0x6c, 0x96, 0x94, 0xd8, 0xec, 0xa2, 0x17, 0x98, 0x23, 0x09, 0x1d, 0x20, 0x2f, 0x2b, 0xa1, 0x62, 0x91, 0x93, 0xa1, 0xc9, 0x87, 0x00, 0x69, 0x33, 0x98, 0xff, 0xc8, 0x31, 0x57, 0xf7, 0xce, 0x48, 0x58, 0xe7, 0x53, 0x5e, 0x39, 0x90, 0xd2, 0x19, 0xbc, 0x24, 0x9d, 0xe1, 0x64, 0x55, 0x8c, 0xac, 0x80, 0x7e, 0xe1, 0x59, 0x77, 0x8a, 0x01, 0x2d, 0xa1, 0x9e, 0x50, 0x12, 0xbf }; /* QIUTx = 0150b3adde162a7f09350dacf460419fe86b99dcd94f44283fba3e43d281b93bb54282812ce52265a94838968d67a9d6ecdc1b6cb64cf1594521c4749ea43d8e4ec045e645ff238b */ /* QIUTy = 07b43321b6118b87c46c7b52288df5dd1cf7da6183ece5633b4c17cae362d821191f7d57923928339aadf7d85f7f19de9486709e4d2ddef42c55bb4d76a3cb50cad2a098ead5952a */ static const uint8_t nist_kas_ecc_cdh_testvector_371_out[] = { /* ZIUT */ 0x05, 0x90, 0x52, 0xd3, 0xe1, 0xc6, 0x6e, 0xfa, 0x4b, 0x7d, 0xd3, 0x9e, 0x74, 0x29, 0x9e, 0x88, 0x63, 0x67, 0xd8, 0xfe, 0x49, 0xd7, 0xca, 0xb9, 0x0e, 0x4f, 0x05, 0x1b, 0xec, 0x10, 0x31, 0x64, 0x38, 0xfb, 0x29, 0xb1, 0x29, 0x0d, 0xfd, 0xae, 0xc1, 0x69, 0xde, 0xcd, 0x62, 0x2a, 0x10, 0x10, 0xcf, 0x0a, 0x02, 0x75, 0x00, 0x88, 0x14, 0xf4, 0x86, 0x1b, 0x4d, 0x83, 0xba, 0x78, 0x51, 0x5a, 0x87, 0x68, 0xd9, 0x78, 0xbe, 0x43, 0x00, 0x11 }; /* COUNT = 21 */ static const uint8_t nist_kas_ecc_cdh_testvector_372_public_x[] = { /* QCAVSx */ 0x02, 0x50, 0x38, 0xa0, 0xe7, 0x2a, 0xe8, 0xc1, 0x6e, 0x36, 0xe3, 0xe3, 0xb5, 0x04, 0xed, 0x73, 0x41, 0xef, 0x70, 0x9b, 0x9f, 0xec, 0x8b, 0xe9, 0x01, 0x77, 0x34, 0x6d, 0x76, 0xca, 0x7b, 0xc7, 0x13, 0x3d, 0x0e, 0xc2, 0x80, 0xac, 0xf0, 0x66, 0x00, 0x5c, 0x5c, 0xc1, 0x0b, 0x52, 0xaa, 0x65, 0x43, 0x35, 0xfe, 0x82, 0x0a, 0x66, 0x17, 0xe5, 0x60, 0xe2, 0x70, 0x90, 0x3f, 0xf1, 0xc2, 0xcc, 0x8a, 0xf1, 0x39, 0x8f, 0x24, 0xdf, 0xe2, 0xb0 }; static const uint8_t nist_kas_ecc_cdh_testvector_372_public_y[] = { /* QCAVSy */ 0x03, 0x10, 0x74, 0xca, 0x39, 0x31, 0x80, 0x1a, 0x6a, 0xcb, 0x76, 0x5b, 0x6e, 0x91, 0x44, 0x17, 0x2e, 0xd8, 0x1d, 0x99, 0x9e, 0xd9, 0xe8, 0x35, 0xbd, 0x35, 0x52, 0x6b, 0x03, 0xef, 0x2a, 0x13, 0xf7, 0x83, 0x76, 0x03, 0x2b, 0x0e, 0xb8, 0x14, 0x6c, 0x23, 0x13, 0x23, 0x65, 0xfc, 0xe1, 0x76, 0xa7, 0xcb, 0xdc, 0xa4, 0x4b, 0x35, 0xaa, 0x37, 0x98, 0x59, 0xf6, 0x88, 0xac, 0x26, 0xdc, 0x64, 0xc8, 0x14, 0x9a, 0x43, 0x22, 0xd0, 0x83, 0xd1 }; static const uint8_t nist_kas_ecc_cdh_testvector_372_private[] = { /* dIUT */ 0x01, 0xd0, 0x10, 0x3f, 0xc7, 0x94, 0x8a, 0xf1, 0x07, 0xe5, 0x1f, 0x4d, 0x2c, 0xc0, 0x39, 0x2b, 0x66, 0x80, 0x80, 0x59, 0xd1, 0xf2, 0x6c, 0xba, 0x05, 0xbe, 0x6a, 0x38, 0x1f, 0x52, 0x2d, 0x4c, 0xb8, 0x54, 0x13, 0x79, 0x34, 0xac, 0xcd, 0x1c, 0xea, 0x33, 0x60, 0x94, 0x8e, 0x40, 0x6d, 0x31, 0x08, 0xc9, 0x43, 0x76, 0x9d, 0xc7, 0x00, 0xb4, 0xc9, 0xcc, 0x0c, 0xc1, 0xd8, 0x4b, 0xab, 0x58, 0xa3, 0x5e, 0x27, 0xeb, 0x24, 0x04, 0x75, 0xf0 }; /* QIUTx = 012bda8ded3ed7e8b6d39b5855a58d725b65e3857c2a674996eb393a3e3f91595bbfa87253a56ebac2b10ed406af9dbff53b22265fbeb5a769cace2b60b45dbf97ceed2b0a04db50 */ /* QIUTy = 026454827efe29b324ae3f2d4c0dca3a3a95491511c531645acf545b45ef6ac4a50c09d3d21f213ca76b96fb18242ecbe08af68755de4e1077173475826eaabed26a75c369cd7b0f */ static const uint8_t nist_kas_ecc_cdh_testvector_372_out[] = { /* ZIUT */ 0x03, 0xac, 0xfa, 0x4b, 0x3d, 0x1c, 0x2a, 0x6b, 0x62, 0xaf, 0x23, 0xbd, 0xff, 0x6a, 0x21, 0x5a, 0x41, 0x6d, 0x44, 0x37, 0xce, 0x6c, 0xc1, 0x14, 0xd1, 0x7d, 0xc4, 0x20, 0x11, 0x95, 0x98, 0x7a, 0x5d, 0x73, 0x01, 0xda, 0x11, 0xb9, 0x13, 0x25, 0x47, 0x02, 0xd7, 0x17, 0x2e, 0x31, 0xd6, 0x4e, 0x59, 0xb2, 0x4d, 0xea, 0xa3, 0x27, 0x0f, 0x20, 0x44, 0x5e, 0x51, 0xdc, 0x48, 0x4f, 0x7a, 0x2b, 0x8c, 0x3c, 0xbe, 0xb0, 0xbb, 0x9e, 0xfb, 0x28 }; /* COUNT = 22 */ static const uint8_t nist_kas_ecc_cdh_testvector_373_public_x[] = { /* QCAVSx */ 0x01, 0xbd, 0xff, 0xfd, 0x69, 0xc2, 0xe0, 0x8f, 0xb0, 0x3c, 0x85, 0x3e, 0xf2, 0xeb, 0xd0, 0x88, 0xe6, 0x8d, 0x23, 0x3f, 0xdb, 0x95, 0xf0, 0xb2, 0x46, 0xde, 0x79, 0x55, 0xd6, 0x15, 0x07, 0x7d, 0xfd, 0x0b, 0x0f, 0xf0, 0x2c, 0x64, 0xd0, 0x1d, 0xe7, 0x93, 0x35, 0x90, 0x96, 0xb8, 0x5e, 0x05, 0x7b, 0x1b, 0x7f, 0x9f, 0x59, 0x26, 0x2d, 0xc2, 0x75, 0x7f, 0x18, 0x24, 0x3e, 0x18, 0x2e, 0x1a, 0x0b, 0xfe, 0x9d, 0xcb, 0xb0, 0x27, 0xd6, 0x8b }; static const uint8_t nist_kas_ecc_cdh_testvector_373_public_y[] = { /* QCAVSy */ 0x02, 0x18, 0xbe, 0x7d, 0x95, 0x60, 0x29, 0xf1, 0x39, 0xc1, 0x9d, 0x2d, 0xa3, 0x46, 0x77, 0x3b, 0x16, 0xd7, 0xaf, 0xc8, 0x58, 0xab, 0x8d, 0xcb, 0x60, 0xd7, 0xe4, 0x84, 0xae, 0xce, 0xc3, 0x09, 0xcb, 0x3f, 0xea, 0x96, 0xaf, 0x39, 0x03, 0x63, 0x7e, 0x5d, 0xb4, 0xdb, 0x67, 0x8b, 0xb5, 0xdb, 0x9b, 0x0b, 0x18, 0xd8, 0x3c, 0xf9, 0xeb, 0xc1, 0xb1, 0xaa, 0xf2, 0x4f, 0x43, 0x67, 0xec, 0x53, 0x36, 0x84, 0xce, 0x9d, 0x56, 0x58, 0x2d, 0x43 }; static const uint8_t nist_kas_ecc_cdh_testvector_373_private[] = { /* dIUT */ 0x03, 0x2d, 0x2f, 0x55, 0x7f, 0xe4, 0x7b, 0x8d, 0x28, 0x0f, 0x68, 0x2e, 0x24, 0xfd, 0xa6, 0x27, 0xdd, 0x7a, 0x58, 0xe9, 0xb0, 0x08, 0x22, 0xa3, 0xaa, 0xf6, 0xeb, 0x7a, 0x01, 0x4f, 0x47, 0x6c, 0x17, 0x94, 0x1a, 0xdc, 0x5e, 0x22, 0x38, 0xa3, 0x08, 0x0d, 0x70, 0x6f, 0x1e, 0x16, 0xa4, 0x51, 0xb7, 0xe9, 0x29, 0x42, 0x77, 0x99, 0x30, 0xc5, 0x67, 0x0a, 0x47, 0x32, 0x81, 0xca, 0xc7, 0x8b, 0x85, 0x8d, 0x1f, 0x1c, 0xc9, 0x9b, 0x0a, 0xff }; /* QIUTx = 040f3130e74b1c8eb265e7c4e6921411eb971418267e8dea879c2e8b563864f23a61b23422c9a06fa178a8a155e3e78457597587f3e35b79f19d0c2e185aef46db95819cbe127b10 */ /* QIUTy = 01c91d27c2ae7113eb03be98e94d3ad6dec791fac2fe0d2c8c98b71371b058a649fa9c3fa3ccdbba932395c27affa20d95ac041bc9978e3f530829a2c64c89b1bcceac06854fb903 */ static const uint8_t nist_kas_ecc_cdh_testvector_373_out[] = { /* ZIUT */ 0x06, 0x7a, 0x58, 0xe5, 0xb3, 0x28, 0x7b, 0xb9, 0xaa, 0x83, 0xed, 0x9c, 0xa2, 0xd7, 0x18, 0xcf, 0x71, 0x65, 0xfb, 0x57, 0x4b, 0x6a, 0x44, 0x6c, 0x30, 0x19, 0x84, 0x9c, 0xd1, 0x58, 0x46, 0x73, 0xd5, 0x61, 0xb5, 0x74, 0xbc, 0x8f, 0x68, 0x41, 0x94, 0x37, 0xc5, 0xe8, 0x11, 0x3e, 0x06, 0x08, 0x47, 0xca, 0xd3, 0xb5, 0xdd, 0xc2, 0xf6, 0x7a, 0xd7, 0x5b, 0xc1, 0xe3, 0xf0, 0x45, 0x54, 0xe6, 0x3a, 0x5e, 0x49, 0x45, 0xcf, 0xcb, 0x65, 0xf5 }; /* COUNT = 23 */ static const uint8_t nist_kas_ecc_cdh_testvector_374_public_x[] = { /* QCAVSx */ 0x00, 0x8f, 0xc3, 0xb4, 0x14, 0xf3, 0x41, 0x2b, 0x40, 0x3f, 0x01, 0xc2, 0x53, 0xbd, 0x22, 0x26, 0x15, 0x02, 0x25, 0xdd, 0xaa, 0xb3, 0x4d, 0x20, 0x10, 0x89, 0xf4, 0x9d, 0x79, 0xe5, 0xdc, 0xc2, 0xe3, 0xb6, 0x82, 0x16, 0xfa, 0xa6, 0x6d, 0xac, 0x44, 0x52, 0x9c, 0x7f, 0xe3, 0xba, 0x4d, 0x28, 0xd8, 0x15, 0xb0, 0x88, 0x23, 0x59, 0x55, 0x71, 0x3b, 0xb7, 0x72, 0x13, 0x83, 0x53, 0x3b, 0x5d, 0x94, 0x22, 0x1b, 0x4e, 0xd1, 0xe1, 0x62, 0xb8 }; static const uint8_t nist_kas_ecc_cdh_testvector_374_public_y[] = { /* QCAVSy */ 0x02, 0xb3, 0x22, 0x01, 0xde, 0x27, 0x2b, 0x1b, 0x32, 0xb6, 0xa6, 0xa5, 0x8e, 0xa2, 0x24, 0x11, 0xc4, 0x8f, 0x5d, 0xc5, 0xcf, 0x0f, 0x95, 0x87, 0x2e, 0x67, 0x51, 0xed, 0x62, 0x2c, 0xee, 0xce, 0xa2, 0x2a, 0x55, 0x69, 0x75, 0xde, 0x60, 0x03, 0x86, 0x9a, 0xe2, 0x0a, 0xf3, 0x9b, 0x42, 0xba, 0x88, 0x71, 0x78, 0x9c, 0x82, 0xe8, 0xf3, 0xad, 0x3c, 0xf6, 0x00, 0x6f, 0x43, 0xbc, 0x4c, 0x7d, 0x41, 0x02, 0x03, 0x2c, 0x43, 0xf8, 0xf7, 0x97 }; static const uint8_t nist_kas_ecc_cdh_testvector_374_private[] = { /* dIUT */ 0x03, 0xee, 0xe2, 0x91, 0x96, 0xa8, 0xbe, 0x70, 0xeb, 0x3a, 0x31, 0x04, 0x64, 0x05, 0x9c, 0xc0, 0xc4, 0xc4, 0x2f, 0x13, 0x48, 0x7a, 0xb1, 0xa0, 0x76, 0x2c, 0x2c, 0xbe, 0x30, 0x4e, 0xbe, 0x63, 0x50, 0x3e, 0x6c, 0x70, 0x68, 0xa7, 0xf4, 0xbc, 0x19, 0x7f, 0x81, 0xf6, 0x5b, 0x42, 0x95, 0xc1, 0x4b, 0x21, 0x0f, 0x3c, 0xb2, 0x37, 0x8b, 0x67, 0x40, 0x1f, 0xcf, 0x52, 0xbe, 0xc0, 0x2c, 0x13, 0xb6, 0x1b, 0x6d, 0xe1, 0x4e, 0x1b, 0x7e, 0x5b }; /* QIUTx = 0177acc5fe9f42f4de2d27ab9bf6f7e0eace303c266ff8b3469082aba9367e66440bd6b1bd8b6e1aec92b65e35aea8f007f09d4cd67eea5d6000736cabbb9dccc943ebb5656a0586 */ /* QIUTy = 0716f1898e2a8c27319de7a2698f21d5de58a4b8b8dd02b5e433110d3977fee8ec5c089d170af02a4ad3c1fab44b0d1e2a3beba9e0719cd8bf8364478d686c4e35f7457d24d021d6 */ static const uint8_t nist_kas_ecc_cdh_testvector_374_out[] = { /* ZIUT */ 0x06, 0xb2, 0x72, 0xca, 0x33, 0x30, 0xc0, 0xcd, 0xfb, 0xe6, 0x0a, 0x17, 0x46, 0xbc, 0x0d, 0xde, 0xa6, 0x25, 0x75, 0x36, 0xcd, 0xd8, 0xe9, 0x76, 0xf2, 0x51, 0x7e, 0xb5, 0x41, 0x46, 0x0a, 0x3f, 0x0e, 0x6e, 0xa7, 0xfe, 0xc2, 0xb4, 0x95, 0xe0, 0xf5, 0x77, 0x12, 0xc8, 0xca, 0xc3, 0x5e, 0x8a, 0x7d, 0x64, 0xd8, 0x76, 0xc2, 0x98, 0x51, 0xbb, 0xfe, 0xb6, 0xfe, 0x72, 0x6d, 0x57, 0xe0, 0xbe, 0x43, 0xdc, 0x76, 0xa5, 0x84, 0xef, 0x9c, 0x93 }; /* COUNT = 24 */ static const uint8_t nist_kas_ecc_cdh_testvector_375_public_x[] = { /* QCAVSx */ 0x05, 0x65, 0xa8, 0x29, 0x94, 0xd7, 0xe6, 0xf5, 0x3e, 0xeb, 0x6b, 0xf6, 0x75, 0x23, 0xee, 0x68, 0x0f, 0xfb, 0x77, 0x01, 0x18, 0x67, 0x3c, 0x3e, 0x15, 0xc3, 0x20, 0x0e, 0x6c, 0x8d, 0x1f, 0x26, 0xca, 0xba, 0xf0, 0x0c, 0x1d, 0xa4, 0x8e, 0x63, 0x74, 0x31, 0x64, 0x97, 0xcb, 0xa5, 0xf1, 0x9f, 0x17, 0x42, 0x0f, 0x26, 0x76, 0x33, 0xf4, 0x0e, 0x5b, 0x06, 0x36, 0x27, 0x89, 0xbf, 0xf1, 0x1a, 0xdf, 0x59, 0x6d, 0x5b, 0x1c, 0xf7, 0x68, 0xef }; static const uint8_t nist_kas_ecc_cdh_testvector_375_public_y[] = { /* QCAVSy */ 0x01, 0x6b, 0x2d, 0x4d, 0xaa, 0xca, 0x9c, 0x6b, 0xed, 0x97, 0x6b, 0x20, 0x64, 0xef, 0x54, 0x35, 0x2a, 0x58, 0xae, 0x34, 0x36, 0x78, 0x35, 0xa6, 0x21, 0x0e, 0x15, 0x78, 0x29, 0x1c, 0x1d, 0xe8, 0xd6, 0x7c, 0x20, 0xbc, 0x3d, 0x6f, 0xfa, 0x62, 0x0c, 0x87, 0xb3, 0x09, 0x8a, 0x2b, 0x9f, 0x3a, 0xbb, 0x8d, 0x2c, 0xac, 0xd5, 0xb2, 0xee, 0x2b, 0x68, 0x39, 0x9e, 0xac, 0x4e, 0x8f, 0x65, 0xce, 0xbd, 0xd6, 0x63, 0x00, 0xfd, 0x04, 0x9b, 0x5b }; static const uint8_t nist_kas_ecc_cdh_testvector_375_private[] = { /* dIUT */ 0x01, 0x69, 0xa2, 0xd8, 0x75, 0x86, 0x94, 0x4c, 0x31, 0x73, 0xbf, 0x9a, 0x22, 0x75, 0xe3, 0x08, 0x00, 0x03, 0xdb, 0x64, 0x8c, 0x2d, 0x1e, 0x1c, 0x56, 0xe2, 0xc3, 0x7c, 0xe0, 0xd7, 0xcd, 0x9f, 0x81, 0x8e, 0xa6, 0xb7, 0xbb, 0xa3, 0x43, 0xf7, 0x74, 0xef, 0x0f, 0x33, 0x4e, 0xa5, 0xc1, 0x2e, 0xf0, 0xbe, 0x75, 0x93, 0xd0, 0x4e, 0xd9, 0x45, 0x45, 0x8d, 0x71, 0xe1, 0x71, 0x12, 0xeb, 0x01, 0xd9, 0x04, 0x1d, 0x21, 0x33, 0xb1, 0x34, 0x73 }; /* QIUTx = 051e521764265af7f01bcd9c3fd022dfdb2d4a2c58b3b23d2e550302c42aadd57d1df6fc18e465bd98442495eed22f3fd6700284c9fa7833b5165149b8e1a91e0e099a0a5732d5c2 */ /* QIUTy = 0198e7e7d094e207528c583865d262a918fc2a39261e95c07dcbd044efd3981899078af3eb97398201a4650f0dccbf19f922c8dbc3839bf6be0053f84531c71843a9e6a102ab58d6 */ static const uint8_t nist_kas_ecc_cdh_testvector_375_out[] = { /* ZIUT */ 0x02, 0xda, 0x26, 0x6a, 0x26, 0x9b, 0xdc, 0x8d, 0x8b, 0x2a, 0x0c, 0x6b, 0xb5, 0x76, 0x2f, 0x10, 0x2f, 0xc8, 0x01, 0xc8, 0xd5, 0x39, 0x4a, 0x92, 0x71, 0x53, 0x91, 0x36, 0xbd, 0x81, 0xd4, 0xb6, 0x9c, 0xfb, 0xb7, 0x52, 0x5c, 0xd0, 0xa9, 0x83, 0xfb, 0x7f, 0x7e, 0x9d, 0xee, 0xc5, 0x83, 0xb8, 0xf8, 0xe5, 0x74, 0xc6, 0x18, 0x4b, 0x2d, 0x79, 0x83, 0x1e, 0xc7, 0x70, 0x64, 0x9e, 0x48, 0x4d, 0xc0, 0x06, 0xfa, 0x35, 0xb0, 0xbf, 0xfd, 0x0b }; optee_test-4.3.0/host/xtest/pkcs11_1000.c000066400000000000000000011616401464074351400177440ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2018, Linaro Limited */ #include #include #include #ifdef OPENSSL_FOUND #include #include #include #include #include #endif #include #include #include #include #include #include #include "pkcs11_1000.h" #include "xtest_test.h" #include "xtest_helpers.h" #include "xtest_uuid_helpers.h" #include /* AES GCM tag size in bytes */ #define AES_GCM_TAG_SIZE 16 /* * auth_type enumerates the types of user authentication * * PIN_AUTH Pin authentication. * ACL_AUTH ACL authentication. */ enum auth_type { PIN_AUTH, ACL_AUTH }; /* * Some PKCS#11 object resources used in the tests */ static const CK_BYTE cktest_aes128_key[16]; static const CK_BYTE cktest_aes128_iv[16]; static const CK_AES_CTR_PARAMS cktest_aes_ctr_params = { .ulCounterBits = 1, }; static const CK_GCM_PARAMS cktest_aes_gcm_params = { .pIv = (CK_BYTE_PTR)cktest_aes128_iv, .ulIvLen = sizeof(cktest_aes128_iv), .ulTagBits = AES_GCM_TAG_SIZE * 8, }; static CK_MECHANISM cktest_aes_ecb_mechanism = { CKM_AES_ECB, NULL, 0, }; static CK_MECHANISM cktest_aes_cbc_mechanism = { CKM_AES_CBC, (CK_BYTE_PTR)cktest_aes128_iv, sizeof(cktest_aes128_iv), }; static CK_MECHANISM cktest_aes_ctr_mechanism = { CKM_AES_CTR, (CK_BYTE_PTR)&cktest_aes_ctr_params, sizeof(cktest_aes_ctr_params), }; static CK_MECHANISM cktest_aes_cts_mechanism = { CKM_AES_CTS, (CK_BYTE_PTR)cktest_aes128_iv, sizeof(cktest_aes128_iv), }; static CK_MECHANISM cktest_aes_gcm_mechanism = { CKM_AES_GCM, (CK_BYTE_PTR)&cktest_aes_gcm_params, sizeof(cktest_aes_gcm_params), }; static CK_MECHANISM cktest_aes_cmac_mechanism = { CKM_AES_CMAC, NULL, 0, }; static CK_MECHANISM cktest_hmac_md5_mechanism = { CKM_MD5_HMAC, NULL, 0, }; static CK_MECHANISM cktest_hmac_sha1_mechanism = { CKM_SHA_1_HMAC, NULL, 0, }; static CK_MECHANISM cktest_hmac_sha224_mechanism = { CKM_SHA224_HMAC, NULL, 0, }; static CK_MECHANISM cktest_hmac_sha256_mechanism = { CKM_SHA256_HMAC, NULL, 0, }; static CK_MECHANISM cktest_hmac_sha384_mechanism = { CKM_SHA384_HMAC, NULL, 0, }; static CK_MECHANISM cktest_hmac_sha512_mechanism = { CKM_SHA512_HMAC, NULL, 0, }; static const CK_ULONG cktest_general_mechanism_hmac_len = 8; static CK_MECHANISM cktest_aes_cmac_general_mechanism = { CKM_AES_CMAC_GENERAL, (CK_VOID_PTR)&cktest_general_mechanism_hmac_len, sizeof(CK_ULONG), }; static CK_MECHANISM cktest_hmac_general_md5_mechanism = { CKM_MD5_HMAC_GENERAL, (CK_VOID_PTR)&cktest_general_mechanism_hmac_len, sizeof(CK_ULONG), }; static CK_MECHANISM cktest_hmac_general_sha1_mechanism = { CKM_SHA_1_HMAC_GENERAL, (CK_VOID_PTR)&cktest_general_mechanism_hmac_len, sizeof(CK_ULONG), }; static CK_MECHANISM cktest_hmac_general_sha224_mechanism = { CKM_SHA224_HMAC_GENERAL, (CK_VOID_PTR)&cktest_general_mechanism_hmac_len, sizeof(CK_ULONG), }; static CK_MECHANISM cktest_hmac_general_sha256_mechanism = { CKM_SHA256_HMAC_GENERAL, (CK_VOID_PTR)&cktest_general_mechanism_hmac_len, sizeof(CK_ULONG), }; static CK_MECHANISM cktest_hmac_general_sha384_mechanism = { CKM_SHA384_HMAC_GENERAL, (CK_VOID_PTR)&cktest_general_mechanism_hmac_len, sizeof(CK_ULONG), }; static CK_MECHANISM cktest_hmac_general_sha512_mechanism = { CKM_SHA512_HMAC_GENERAL, (CK_VOID_PTR)&cktest_general_mechanism_hmac_len, sizeof(CK_ULONG), }; static CK_MECHANISM cktest_gensecret_keygen_mechanism = { CKM_GENERIC_SECRET_KEY_GEN, NULL, 0, }; static CK_MECHANISM cktest_aes_keygen_mechanism = { CKM_AES_KEY_GEN, NULL, 0, }; /* * Util to find a slot on which to open a session */ static CK_RV close_lib(void) { return C_Finalize(0); } static CK_RV init_lib_and_find_token_slot(CK_SLOT_ID *slot, enum auth_type at) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID_PTR slots = NULL; CK_ULONG count = 0; rv = C_Initialize(0); if (rv) return rv; rv = C_GetSlotList(CK_TRUE, NULL, &count); if (rv != CKR_OK) goto bail; if (count < 1) { rv = CKR_GENERAL_ERROR; goto bail; } slots = malloc(count * sizeof(CK_SLOT_ID)); if (!slots) { rv = CKR_HOST_MEMORY; goto bail; } rv = C_GetSlotList(CK_TRUE, slots, &count); if (rv) goto bail; if (at == PIN_AUTH) { /* Use the last slot */ *slot = slots[count - 1]; } else { /* ACL_AUTH */ /* Use the second to last slot */ if (count >= 2) *slot = slots[count - 2]; else rv = CKR_GENERAL_ERROR; } bail: free(slots); if (rv) close_lib(); return rv; } static void xtest_pkcs11_test_1000(ADBG_Case_t *c) { CK_RV rv; rv = C_Initialize(NULL); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_Finalize(NULL); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_Initialize(NULL); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_Initialize(NULL); ADBG_EXPECT_CK_RESULT(c, CKR_CRYPTOKI_ALREADY_INITIALIZED, rv); rv = C_Finalize(NULL); ADBG_EXPECT_CK_OK(c, rv); rv = C_Finalize(NULL); ADBG_EXPECT_CK_RESULT(c, CKR_CRYPTOKI_NOT_INITIALIZED, rv); } ADBG_CASE_DEFINE(pkcs11, 1000, xtest_pkcs11_test_1000, "Initialize and close Cryptoki library"); static void xtest_pkcs11_test_1001(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID_PTR slot_ids = NULL; CK_ULONG slot_count = 0; CK_ULONG present_slot_count = 0; CK_INFO lib_info = { }; CK_SLOT_INFO slot_info = { }; CK_TOKEN_INFO token_info = { }; CK_FUNCTION_LIST_PTR ckfunc_list = NULL; size_t i = 0; CK_SLOT_ID max_slot_id = 0; CK_MECHANISM_TYPE_PTR mecha_types = NULL; CK_ULONG mecha_count = 0; CK_MECHANISM_INFO mecha_info = { }; rv = C_Initialize(NULL); if (!ADBG_EXPECT_CK_OK(c, rv)) return; Do_ADBG_BeginSubCase(c, "Test C_GetFunctionList()"); rv = C_GetFunctionList(&ckfunc_list); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetInfo) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetSlotList) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetSlotInfo) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetTokenInfo) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetMechanismList) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetMechanismInfo)) goto out; Do_ADBG_EndSubCase(c, "Test C_GetFunctionList()"); Do_ADBG_BeginSubCase(c, "Test C_GetInfo()"); rv = C_GetInfo(&lib_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, "Test C_GetInfo()"); Do_ADBG_BeginSubCase(c, "Test C_GetSlotList()"); rv = C_GetSlotList(0, NULL, &slot_count); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, slot_count, !=, 0)) goto out; if (slot_count > 1) { /* Ensure case non-NULL-buffer and zero-count is tested */ CK_SLOT_ID id = 0; slot_count = 0; rv = C_GetSlotList(0, &id, &slot_count); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto out; } rv = C_GetSlotList(1, NULL, &present_slot_count); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, slot_count, ==, present_slot_count)) goto out; slot_ids = calloc(slot_count, sizeof(*slot_ids)); if (!ADBG_EXPECT_NOT_NULL(c, slot_ids)) goto out; slot_count--; rv = C_GetSlotList(1, slot_ids, &slot_count); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto out; rv = C_GetSlotList(1, slot_ids, &slot_count); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, "Test C_GetSlotList()"); Do_ADBG_BeginSubCase(c, "Test C_Get{Slot|Token}Info()"); for (i = 0; i < slot_count; i++) { CK_SLOT_ID slot = slot_ids[i]; rv = C_GetSlotInfo(slot, &slot_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /** * OP-TEE's PKCS#11 implementaion always responds with * CK_UNAVAILABLE_INFORMATION for fields: * * - ulMaxSessionCount * - ulMaxRwSessionCount * - ulTotalPublicMemory * - ulFreePublicMemory * * Verify that CK_UNAVAILABLE_INFORMATION is correctly * translated (32 bit vs 64 bit difference). */ if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, token_info.ulMaxSessionCount, ==, CK_UNAVAILABLE_INFORMATION)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, token_info.ulMaxRwSessionCount, ==, CK_UNAVAILABLE_INFORMATION)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, token_info.ulTotalPublicMemory, ==, CK_UNAVAILABLE_INFORMATION)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, token_info.ulFreePublicMemory, ==, CK_UNAVAILABLE_INFORMATION)) goto out; if (max_slot_id < slot) max_slot_id = slot; } Do_ADBG_EndSubCase(c, "Test C_Get{Slot|Token}Info()"); Do_ADBG_BeginSubCase(c, "Test C_GetMechanism{List|Info}()"); for (i = 0; i < slot_count; i++) { CK_SLOT_ID slot = slot_ids[i]; size_t j = 0; mecha_count = 0; rv = C_GetMechanismList(slot, NULL, &mecha_count); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (mecha_count == 0) continue; free(mecha_types); mecha_types = calloc(mecha_count, sizeof(*mecha_types)); if (!ADBG_EXPECT_NOT_NULL(c, mecha_types)) goto out; /* Test specific case: valid buffer reference with 0 count */ mecha_count = 0; rv = C_GetMechanismList(slot, mecha_types, &mecha_count); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto out; rv = C_GetMechanismList(slot, mecha_types, &mecha_count); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; for (j = 0; j < mecha_count; j++) { rv = C_GetMechanismInfo(slot, mecha_types[j], &mecha_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; } } Do_ADBG_EndSubCase(c, "Test C_GetMechanism{List|Info}()"); Do_ADBG_BeginSubCase(c, "Test C_GetMechanismList() with larger result buffer"); for (i = 0; i < slot_count; i++) { CK_SLOT_ID slot = slot_ids[i]; CK_ULONG real_mecha_count = 0; CK_ULONG alloc_mecha_count = 0; uint8_t *data_ptr = NULL; size_t j = 0; rv = C_GetMechanismList(slot, NULL, &real_mecha_count); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (real_mecha_count == 0) continue; /* Allocate more memory for mechanisms than required */ alloc_mecha_count = real_mecha_count + 16; mecha_count = alloc_mecha_count; free(mecha_types); mecha_types = calloc(mecha_count, sizeof(*mecha_types)); if (!ADBG_EXPECT_NOT_NULL(c, mecha_types)) goto out; memset(mecha_types, 0xCC, alloc_mecha_count * sizeof(*mecha_types)); rv = C_GetMechanismList(slot, mecha_types, &mecha_count); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, mecha_count, ==, real_mecha_count)) goto out; data_ptr = (uint8_t *)mecha_types; for (j = real_mecha_count * sizeof(*mecha_types); j < alloc_mecha_count * sizeof(*mecha_types); j++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, data_ptr[j], ==, 0xCC)) break; } Do_ADBG_EndSubCase(c, "Test C_GetMechanismList() with larger result buffer"); Do_ADBG_BeginSubCase(c, "Test C_Get*Info() with invalid reference"); rv = C_GetSlotInfo(max_slot_id + 1, &slot_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv)) goto out; rv = C_GetTokenInfo(max_slot_id + 1, &token_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv)) goto out; mecha_count = 1; if (!mecha_types) mecha_types = malloc(sizeof(*mecha_types)); if (!ADBG_EXPECT_NOT_NULL(c, mecha_types)) goto out; rv = C_GetMechanismList(max_slot_id + 1, mecha_types, &mecha_count); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv)) goto out; rv = C_GetMechanismInfo(max_slot_id + 1, CKM_AES_KEY_GEN, &mecha_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv)) goto out; rv = C_GetSlotInfo(ULONG_MAX, &slot_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv)) goto out; rv = C_GetTokenInfo(ULONG_MAX, &token_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv)) goto out; mecha_count = 1; rv = C_GetMechanismList(ULONG_MAX, mecha_types, &mecha_count); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv)) goto out; rv = C_GetMechanismInfo(ULONG_MAX, CKM_AES_KEY_GEN, &mecha_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv)) goto out; out: Do_ADBG_EndSubCase(c, NULL); free(slot_ids); free(mecha_types); rv = C_Finalize(NULL); ADBG_EXPECT_CK_OK(c, rv); } ADBG_CASE_DEFINE(pkcs11, 1001, xtest_pkcs11_test_1001, "PKCS11: List PKCS#11 slots and get information from"); static void xtest_pkcs11_test_1002(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session[3] = { 0 }; CK_FLAGS session_flags = 0; CK_SESSION_INFO session_info = { }; CK_FUNCTION_LIST_PTR ckfunc_list = NULL; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_GetFunctionList(&ckfunc_list); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_OpenSession) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_CloseSession) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_CloseAllSessions) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetSessionInfo)) goto bail; Do_ADBG_BeginSubCase(c, "Test C_OpenSession()/C_GetSessionInfo()"); session_flags = CKF_RW_SESSION; rv = C_OpenSession(slot, session_flags, NULL, 0, &session[0]); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_PARALLEL_NOT_SUPPORTED, rv)) goto bail; session_flags = CKF_SERIAL_SESSION; rv = C_OpenSession(slot, session_flags, NULL, 0, &session[0]); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; rv = C_GetSessionInfo(session[0], &session_info); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.slotID, ==, slot) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.flags, ==, session_flags) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.state, ==, CKS_RO_PUBLIC_SESSION) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.ulDeviceError, ==, 0)) goto bail; session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; rv = C_OpenSession(slot, session_flags, NULL, 0, &session[1]); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; rv = C_GetSessionInfo(session[1], &session_info); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.slotID, ==, slot) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.flags, ==, session_flags) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.state, ==, CKS_RW_PUBLIC_SESSION) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.ulDeviceError, ==, 0)) goto bail; rv = C_OpenSession(slot, session_flags, NULL, 0, &session[2]); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; rv = C_GetSessionInfo(session[2], &session_info); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.slotID, ==, slot) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.flags, ==, session_flags) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.state, ==, CKS_RW_PUBLIC_SESSION) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, session_info.ulDeviceError, ==, 0)) goto bail; Do_ADBG_EndSubCase(c, "Test C_OpenSession()/C_GetSessionInfo()"); Do_ADBG_BeginSubCase(c, "Test C_CloseSession()"); /* Close 2 of them */ rv = C_CloseSession(session[0]); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; rv = C_GetSessionInfo(session[0], &session_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_HANDLE_INVALID, rv)) goto bail; rv = C_GetSessionInfo(session[1], &session_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; rv = C_GetSessionInfo(session[2], &session_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; /* Close all remaining sessions, later calls should failed on session */ rv = C_CloseAllSessions(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; rv = C_CloseSession(session[1]); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_HANDLE_INVALID, rv)) goto bail; rv = C_CloseSession(session[2]); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_HANDLE_INVALID, rv)) goto bail; rv = C_GetSessionInfo(session[1], &session_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_HANDLE_INVALID, rv)) goto bail; rv = C_GetSessionInfo(session[2], &session_info); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_HANDLE_INVALID, rv)) goto bail; /* Open a session, should be closed from library closure */ rv = C_OpenSession(slot, session_flags, NULL, 0, &session[0]); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; bail: Do_ADBG_EndSubCase(c, NULL); rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); } ADBG_CASE_DEFINE(pkcs11, 1002, xtest_pkcs11_test_1002, "PKCS11: Open and close PKCS#11 sessions"); /* * Helpers for tests where we must log into the token. * These define the genuine PINs and label to be used with the test token. */ static CK_UTF8CHAR test_token_so_pin[] = { '1', '2', '3', '4', '5', '6', '7', '8' }; static CK_UTF8CHAR deprecated_so_pin[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; static CK_UTF8CHAR test_token_user_pin[] = { '1', '2', '3', '4', '5' }; static CK_UTF8CHAR test_token_label[] = "PKCS11 TA test token"; /* * Compatibility function for systems that would have run the PKCS#11 tests * with the deprecated SO PIN (the one that was modified in commit "pkcs11: * remove NULbyte from SO PIN and use ASCII characters"). * The goal is to transparently upgrade the SO PIN to the new one if possible * and avoid failing any tests. */ static CK_RV change_deprecated_so_pin(CK_SLOT_ID slot) { CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_RV rv = CKR_GENERAL_ERROR; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (rv != CKR_OK) return rv; rv = C_Login(session, CKU_SO, deprecated_so_pin, sizeof(deprecated_so_pin)); if (rv != CKR_OK) goto out; rv = C_SetPIN(session, deprecated_so_pin, sizeof(deprecated_so_pin), test_token_so_pin, sizeof(test_token_so_pin)); Do_ADBG_Log("Note: SO PIN for slot %lu updated successfully", slot); C_Logout(session); out: C_CloseSession(session); return rv; } static CK_RV init_test_token_pin_auth(CK_SLOT_ID slot) { CK_RV rv = CKR_GENERAL_ERROR; rv = C_InitToken(slot, test_token_so_pin, sizeof(test_token_so_pin), test_token_label); if (rv == CKR_PIN_INCORRECT) { rv = change_deprecated_so_pin(slot); if (rv != CKR_OK) return rv; rv = C_InitToken(slot, test_token_so_pin, sizeof(test_token_so_pin), test_token_label); } return rv; } /* Login as user, eventually reset user PIN if needed */ static CK_RV init_user_test_token_pin_auth(CK_SLOT_ID slot) { CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_RV rv = CKR_GENERAL_ERROR; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (rv) return rv; rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (rv == CKR_OK) { C_Logout(session); C_CloseSession(session); return rv; } rv = C_Login(session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); if (rv) { C_CloseSession(session); rv = init_test_token_pin_auth(slot); if (rv) return rv; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (rv) return rv; rv = C_Login(session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); if (rv) { C_CloseSession(session); return rv; } } rv = C_InitPIN(session, test_token_user_pin, sizeof(test_token_user_pin)); C_Logout(session); C_CloseSession(session); return rv; } #ifdef OPENSSL_FOUND static CK_RV test_already_initialized_token(ADBG_Case_t *c, CK_SLOT_ID slot) { CK_RV rv = CKR_GENERAL_ERROR; CK_TOKEN_INFO token_info = { }; /* Same content as test_token_so_pin[] but 1 more byte */ CK_UTF8CHAR pin1[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; /* Same content as test_token_so_pin[] but 1 different byte */ CK_UTF8CHAR pin2[] = { '1', '2', '3', '4', '5', '5', '7', '8' }; CK_FLAGS flags = 0; Do_ADBG_BeginSubCase(c, "C_InitToken() on initialized token"); rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_InitToken(slot, test_token_so_pin, sizeof(test_token_so_pin) - 1, test_token_label); if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, rv, !=, CKR_OK)) goto out; rv = C_InitToken(slot, pin1, sizeof(pin1), test_token_label); if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, rv, !=, CKR_OK)) goto out; rv = C_InitToken(slot, pin2, sizeof(pin2), test_token_label); if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, rv, !=, CKR_OK)) goto out; rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; flags = token_info.flags; /* Token should have set CKF_SO_PIN_COUNT_LOW to 1 */ if (!ADBG_EXPECT_TRUE(c, !!(flags & CKF_SO_PIN_COUNT_LOW))) { rv = CKR_GENERAL_ERROR; goto out; } rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; flags = token_info.flags; /* * Token should have reset CKF_SO_PIN_COUNT_LOW to 0. * Other flags should show a sane initialized state. */ if (!ADBG_EXPECT_TRUE(c, !(flags & CKF_SO_PIN_COUNT_LOW)) || !ADBG_EXPECT_TRUE(c, !!(flags & CKF_TOKEN_INITIALIZED)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_ERROR_STATE)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_INITIALIZED))) { rv = CKR_GENERAL_ERROR; goto out; } rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; flags = token_info.flags; if (!ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_COUNT_LOW)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_FINAL_TRY)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_LOCKED)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_TO_BE_CHANGED)) || !ADBG_EXPECT_TRUE(c, !!(flags & CKF_USER_PIN_INITIALIZED)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_ERROR_STATE))) { rv = CKR_GENERAL_ERROR; goto out; } out: Do_ADBG_EndSubCase(c, "C_InitToken() on initialized token"); return rv; } static CK_UTF8CHAR test_acl_auth_token_label[] = "PKCS11 TA test token for ACL based authentication"; static CK_RV init_test_token_acl_auth(CK_SLOT_ID slot) { return C_InitToken(slot, NULL, 0, test_acl_auth_token_label); } #define TEE_UUID_NS_NAME_SIZE 128 #define ACL_PIN_LEN 43 /* * TEE client UUID name space identifier * Client UUIDs are derived from this UUID (which is defined in the Linux * kernel) using the UUIDv5 scheme. */ static const char *client_uuid_linux_ns = "58ac9ca0-2086-4683-a1b8-ec4bc08e01b6"; static CK_RV init_user_test_token_acl_auth(ADBG_Case_t *c, CK_SLOT_ID slot) { CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_RV rv = CKR_GENERAL_ERROR; TEEC_Result result = TEEC_ERROR_GENERIC; TEEC_UUID expected_client_uuid = { 0 }; TEEC_UUID uuid_ns = { 0 }; char uuid_name[TEE_UUID_NS_NAME_SIZE] = { 0 }; char test_token_acl_auth_pin[ACL_PIN_LEN] = { 0 }; char *client_id_s = NULL; int str_len = 0; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (rv) return rv; rv = C_Login(session, CKU_USER, NULL, 0); if (rv == CKR_OK) { C_Logout(session); C_CloseSession(session); return CKR_OK; } rv = C_Login(session, CKU_SO, NULL, 0); if (rv) { C_CloseSession(session); rv = init_test_token_acl_auth(slot); if (rv) return rv; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (rv) return rv; rv = C_Login(session, CKU_SO, NULL, 0); if (rv) { C_CloseSession(session); return rv; } } rv = CKR_GENERAL_ERROR; result = xtest_uuid_from_str(&uuid_ns, client_uuid_linux_ns); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) goto out; str_len = snprintf(uuid_name, sizeof(uuid_name), "gid=%x", getegid()); if (!ADBG_EXPECT_COMPARE_SIGNED(c, str_len, >=, 0)) goto out; if (!ADBG_EXPECT_COMPARE_SIGNED(c, str_len, <, (int)sizeof(uuid_name))) goto out; result = xtest_uuid_v5(&expected_client_uuid, &uuid_ns, uuid_name, strlen(uuid_name)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) goto out; client_id_s = xtest_uuid_to_allocated_str(&expected_client_uuid); if (!ADBG_EXPECT_NOT_NULL(c, client_id_s)) { rv = CKR_HOST_MEMORY; goto out; } str_len = snprintf(test_token_acl_auth_pin, sizeof(test_token_acl_auth_pin), "group:%s", client_id_s); free(client_id_s); if (!ADBG_EXPECT_COMPARE_SIGNED(c, str_len, >=, 0)) goto out; if (!ADBG_EXPECT_COMPARE_SIGNED(c, str_len, <, (int)sizeof(test_token_acl_auth_pin))) goto out; rv = C_InitPIN(session, (CK_UTF8CHAR_PTR)test_token_acl_auth_pin, (CK_ULONG)strlen(test_token_acl_auth_pin)); ADBG_EXPECT_CK_OK(c, rv); out: C_Logout(session); C_CloseSession(session); return rv; } static CK_RV test_uninitialized_token(ADBG_Case_t *c, CK_SLOT_ID slot, enum auth_type at) { CK_RV rv = CKR_GENERAL_ERROR; CK_TOKEN_INFO token_info = { }; CK_FLAGS flags = 0; Do_ADBG_BeginSubCase(c, "C_InitToken() on uninitialized token"); if (at == PIN_AUTH) rv = init_test_token_pin_auth(slot); else /* ACL_AUTH */ rv = init_test_token_acl_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; flags = token_info.flags; if (!ADBG_EXPECT_TRUE(c, !!(flags & CKF_TOKEN_INITIALIZED)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_ERROR_STATE)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_INITIALIZED))) { rv = CKR_GENERAL_ERROR; goto out; } if (at == PIN_AUTH) rv = init_user_test_token_pin_auth(slot); else /* ACL_AUTH */ rv = init_user_test_token_acl_auth(c, slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; flags = token_info.flags; if (!ADBG_EXPECT_TRUE(c, !!(flags & CKF_TOKEN_INITIALIZED)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_COUNT_LOW)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_FINAL_TRY)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_LOCKED)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_USER_PIN_TO_BE_CHANGED)) || !ADBG_EXPECT_TRUE(c, !!(flags & CKF_USER_PIN_INITIALIZED)) || !ADBG_EXPECT_TRUE(c, !(flags & CKF_ERROR_STATE))) rv = CKR_GENERAL_ERROR; out: Do_ADBG_EndSubCase(c, "C_InitToken() on uninitialized token"); return rv; } static CK_RV test_login_logout_pin_auth(ADBG_Case_t *c, CK_SLOT_ID slot) { CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_RV rv = CKR_GENERAL_ERROR; Do_ADBG_BeginSubCase(c, "Test C_Login()/C_Logout() with PIN based authentication"); rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Logout: should fail as we did not log in yet */ rv = C_Logout(session); ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv); /* Login/re-log/logout user */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); ADBG_EXPECT_CK_RESULT(c, CKR_USER_ALREADY_LOGGED_IN, rv); rv = C_Logout(session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Login/re-log/logout security officer */ rv = C_Login(session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Login(session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); ADBG_EXPECT_CK_RESULT(c, CKR_USER_ALREADY_LOGGED_IN, rv); rv = C_Logout(session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Login user then SO and reverse */ rv = C_Login(session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); ADBG_EXPECT_CK_OK(c, rv); rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); ADBG_EXPECT_CK_RESULT(c, CKR_USER_ANOTHER_ALREADY_LOGGED_IN, rv); rv = C_Logout(session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); ADBG_EXPECT_CK_OK(c, rv); rv = C_Login(session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); ADBG_EXPECT_CK_RESULT(c, CKR_USER_ANOTHER_ALREADY_LOGGED_IN, rv); rv = C_Logout(session); ADBG_EXPECT_CK_OK(c, rv); /* Login context specifc, in an invalid case (need an operation) */ rv = C_Login(session, CKU_CONTEXT_SPECIFIC, test_token_user_pin, sizeof(test_token_user_pin)); ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv); rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); out: Do_ADBG_EndSubCase(c, "Test C_Login()/C_Logout() with PIN based authentication"); return rv; } static CK_RV test_set_pin(ADBG_Case_t *c, CK_SLOT_ID slot, CK_USER_TYPE user_type) { CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_UTF8CHAR some_pin[] = { '1', '2', '3', '3', '2', '1' }; CK_UTF8CHAR_PTR old_pin = NULL; CK_USER_TYPE ut = user_type; size_t old_pin_sz = 0; CK_RV rv2 = CKR_OK; CK_RV rv = CKR_OK; Do_ADBG_BeginSubCase(c, "Test C_SetPIN() user_type %lu", user_type); rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (user_type == CKU_SO) { old_pin = (CK_UTF8CHAR_PTR)test_token_so_pin; old_pin_sz = sizeof(test_token_so_pin); } else { old_pin = (CK_UTF8CHAR_PTR)test_token_user_pin; old_pin_sz = sizeof(test_token_user_pin); ut = CKU_USER; } if (ut == user_type) { rv = C_Login(session, ut, old_pin, old_pin_sz); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_session; } rv = C_SetPIN(session, old_pin, old_pin_sz, some_pin, sizeof(some_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) { if (ut == user_type) goto out_logout; else goto out_session; } if (ut == user_type) { rv = C_Logout(session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_session; } rv = C_Login(session, ut, some_pin, sizeof(some_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_session; rv = C_SetPIN(session, some_pin, sizeof(some_pin), old_pin, old_pin_sz); ADBG_EXPECT_CK_OK(c, rv); out_logout: rv2 = C_Logout(session); if (!ADBG_EXPECT_CK_OK(c, rv2) && !rv) rv = rv2; out_session: rv2 = C_CloseSession(session); if (!ADBG_EXPECT_CK_OK(c, rv2) && !rv) rv = rv2; out: Do_ADBG_EndSubCase(c, "Test C_SetPIN() user_type %lu", user_type); return rv; } #endif /*OPENSSL_FOUND*/ static void xtest_pkcs11_test_1003(ADBG_Case_t *c) { #ifdef OPENSSL_FOUND CK_RV rv = CKR_GENERAL_ERROR; CK_FUNCTION_LIST_PTR ckfunc_list = NULL; CK_SLOT_ID slot = 0; CK_TOKEN_INFO token_info = { }; rv = C_GetFunctionList(&ckfunc_list); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_InitToken) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_InitPIN) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_SetPIN) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_Login) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_Logout)) return; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Abort test if token is about to lock */ if (!ADBG_EXPECT_TRUE(c, !(token_info.flags & CKF_SO_PIN_FINAL_TRY))) goto out; if (!(token_info.flags & CKF_TOKEN_INITIALIZED)) { rv = test_uninitialized_token(c, slot, PIN_AUTH); if (rv != CKR_OK) goto out; } rv = test_already_initialized_token(c, slot); if (rv != CKR_OK) goto out; rv = test_login_logout_pin_auth(c, slot); if (rv != CKR_OK) goto out; rv = test_set_pin(c, slot, CKU_USER); if (rv != CKR_OK) goto out; rv = test_set_pin(c, slot, CKU_SO); if (rv != CKR_OK) goto out; /* * CKU_CONTEXT_SPECIFIC is anything not CKU_USER or CKU_SO in order * to skip the initial login. */ test_set_pin(c, slot, CKU_CONTEXT_SPECIFIC); out: rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); #else /*!OPENSSL_FOUND*/ UNUSED(c); /* xtest_uuid_v5() depends on OpenSSL */ Do_ADBG_Log("OpenSSL not available, skipping test 1003"); #endif /*OPENSSL_FOUND*/ } ADBG_CASE_DEFINE(pkcs11, 1003, xtest_pkcs11_test_1003, "PKCS11: Login to PKCS#11 token with PIN based authentication"); static CK_ATTRIBUTE cktest_token_object[] = { { CKA_DECRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_TOKEN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_MODIFIABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_VALUE, (void *)cktest_aes128_key, sizeof(cktest_aes128_key) }, }; static CK_ATTRIBUTE cktest_session_object[] = { { CKA_DECRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_TOKEN, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_MODIFIABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_VALUE, (void *)cktest_aes128_key, sizeof(cktest_aes128_key) }, }; /* Create session object and token object from a session */ static void test_create_destroy_single_object(ADBG_Case_t *c, bool persistent) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_OBJECT_HANDLE obj_hdl = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (persistent) { rv = C_CreateObject(session, cktest_token_object, ARRAY_SIZE(cktest_token_object), &obj_hdl); } else { rv = C_CreateObject(session, cktest_session_object, ARRAY_SIZE(cktest_session_object), &obj_hdl); } if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DestroyObject(session, obj_hdl); ADBG_EXPECT_CK_OK(c, rv); out: rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); } static void test_create_destroy_session_objects(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_OBJECT_HANDLE obj_hdl[512] = { 0 }; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; size_t n = 0; for (n = 0; n < ARRAY_SIZE(obj_hdl); n++) obj_hdl[n] = CK_INVALID_HANDLE; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; for (n = 0; n < ARRAY_SIZE(obj_hdl); n++) { rv = C_CreateObject(session, cktest_session_object, ARRAY_SIZE(cktest_session_object), obj_hdl + n); if (rv == CKR_DEVICE_MEMORY || rv == CKR_HOST_MEMORY || !ADBG_EXPECT_CK_OK(c, rv)) break; } Do_ADBG_Log(" created object count: %zu", n); rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_CreateObject(session, cktest_session_object, ARRAY_SIZE(cktest_session_object), obj_hdl); ADBG_EXPECT_CK_OK(c, rv); out: rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); } /* Create session object and token object from a session */ static void test_create_objects_in_session(ADBG_Case_t *c, bool readwrite) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_OBJECT_HANDLE token_obj_hld = CK_INVALID_HANDLE; CK_OBJECT_HANDLE session_obj_hld = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; if (readwrite) session_flags |= CKF_RW_SESSION; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_CreateObject(session, cktest_token_object, ARRAY_SIZE(cktest_token_object), &token_obj_hld); if (readwrite) { if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; } else { if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_READ_ONLY, rv)) goto out; } rv = C_CreateObject(session, cktest_session_object, ARRAY_SIZE(cktest_session_object), &session_obj_hld); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_tobj; rv = C_DestroyObject(session, session_obj_hld); ADBG_EXPECT_CK_OK(c, rv); out_tobj: if (readwrite) { rv = C_DestroyObject(session, token_obj_hld); ADBG_EXPECT_CK_OK(c, rv); } out: rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); } static void xtest_pkcs11_test_1004(ADBG_Case_t *c) { Do_ADBG_BeginSubCase(c, "Create and destroy a volatile object"); test_create_destroy_single_object(c, false /*!persistent*/); Do_ADBG_EndSubCase(c, "Create and destroy a volatile object"); Do_ADBG_BeginSubCase(c, "Create and destroy a persistent object"); test_create_destroy_single_object(c, true /*persistent*/); Do_ADBG_EndSubCase(c, "Create and destroy a persistent object"); Do_ADBG_BeginSubCase(c, "Create and destroy many session objects"); test_create_destroy_session_objects(c); Do_ADBG_EndSubCase(c, "Create and destroy many session objects"); Do_ADBG_BeginSubCase(c, "Create objects in a read-only session"); test_create_objects_in_session(c, false /*!readwrite*/); Do_ADBG_EndSubCase(c, "Create objects in a read-only session"); Do_ADBG_BeginSubCase(c, "Create objects in a read/write session"); test_create_objects_in_session(c, true /*readwrite*/); Do_ADBG_EndSubCase(c, "Create objects in a read/write session"); } ADBG_CASE_DEFINE(pkcs11, 1004, xtest_pkcs11_test_1004, "PKCS11: create/destroy PKCS#11 simple objects"); static const CK_MECHANISM_TYPE allowed_only_aes_ecb[] = { CKM_AES_ECB, }; static const CK_MECHANISM_TYPE allowed_not_aes_ecb[] = { CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_AES_CTR, CKM_AES_CTS, CKM_AES_GCM, CKM_AES_CCM, }; static const CK_MECHANISM_TYPE allowed_only_aes_cbcnopad[] = { CKM_AES_CBC, }; static const CK_MECHANISM_TYPE allowed_not_aes_cbcnopad[] = { CKM_AES_ECB, CKM_AES_CBC_PAD, CKM_AES_CTR, CKM_AES_CTS, CKM_AES_GCM, CKM_AES_CCM, }; static const CK_MECHANISM_TYPE allowed_only_aes_ctr[] = { CKM_AES_CTR, }; static const CK_MECHANISM_TYPE allowed_not_aes_ctr[] = { CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_AES_CTS, CKM_AES_GCM, CKM_AES_CCM, }; static const CK_MECHANISM_TYPE allowed_only_aes_cts[] = { CKM_AES_CTS, }; static const CK_MECHANISM_TYPE allowed_not_aes_cts[] = { CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_AES_CTR, CKM_AES_GCM, CKM_AES_CCM, }; static const CK_MECHANISM_TYPE allowed_only_aes_gcm[] = { CKM_AES_GCM, }; static const CK_MECHANISM_TYPE allowed_not_aes_gcm[] = { CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_AES_CTS, CKM_AES_CTR, CKM_AES_CCM, }; #define CKTEST_AES_KEY \ { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, \ sizeof(CK_OBJECT_CLASS) }, \ { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, \ sizeof(CK_KEY_TYPE) }, \ { CKA_VALUE, (void *)cktest_aes128_key, \ sizeof(cktest_aes128_key) } #define CKTEST_AES_ALLOWED_KEY(_allowed) \ { CKA_ALLOWED_MECHANISMS, (void *)_allowed, sizeof(_allowed), } #define CK_KEY_ALLOWED_AES_TEST(_label, _allowed) \ static CK_ATTRIBUTE _label[] = { \ CKTEST_AES_KEY, \ { CKA_ENCRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, \ { CKA_DECRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, \ CKTEST_AES_ALLOWED_KEY(_allowed), \ } #define CK_KEY_ALLOWED_AES_ENC_TEST(_label, _allowed) \ static CK_ATTRIBUTE _label[] = { \ CKTEST_AES_KEY, \ { CKA_ENCRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, \ CKTEST_AES_ALLOWED_KEY(_allowed), \ } #define CK_KEY_ALLOWED_AES_DEC_TEST(_label, _allowed) \ static CK_ATTRIBUTE _label[] = { \ CKTEST_AES_KEY, \ { CKA_DECRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, \ CKTEST_AES_ALLOWED_KEY(_allowed), \ } CK_KEY_ALLOWED_AES_TEST(cktest_aes_only_ecb, allowed_only_aes_ecb); CK_KEY_ALLOWED_AES_TEST(cktest_aes_not_ecb, allowed_not_aes_ecb); CK_KEY_ALLOWED_AES_TEST(cktest_aes_only_cbcnopad, allowed_only_aes_cbcnopad); CK_KEY_ALLOWED_AES_TEST(cktest_aes_not_cbcnopad, allowed_not_aes_cbcnopad); CK_KEY_ALLOWED_AES_TEST(cktest_aes_only_cts, allowed_only_aes_cts); CK_KEY_ALLOWED_AES_TEST(cktest_aes_not_cts, allowed_not_aes_cts); CK_KEY_ALLOWED_AES_TEST(cktest_aes_only_ctr, allowed_only_aes_ctr); CK_KEY_ALLOWED_AES_TEST(cktest_aes_not_ctr, allowed_not_aes_ctr); CK_KEY_ALLOWED_AES_TEST(cktest_aes_only_gcm, allowed_only_aes_gcm); CK_KEY_ALLOWED_AES_TEST(cktest_aes_not_gcm, allowed_not_aes_gcm); struct cktest_allowed_test { CK_ATTRIBUTE_PTR attr_key; CK_ULONG attr_count; CK_MECHANISM_PTR mechanism; }; #define CKTEST_KEY_MECHA(key, mecha) { \ .attr_key = key, \ .attr_count = ARRAY_SIZE(key), \ .mechanism = mecha, \ } static const struct cktest_allowed_test cktest_allowed_valid[] = { CKTEST_KEY_MECHA(cktest_aes_only_ecb, &cktest_aes_ecb_mechanism), CKTEST_KEY_MECHA(cktest_aes_only_cbcnopad, &cktest_aes_cbc_mechanism), CKTEST_KEY_MECHA(cktest_aes_only_cts, &cktest_aes_cts_mechanism), CKTEST_KEY_MECHA(cktest_aes_only_ctr, &cktest_aes_ctr_mechanism), CKTEST_KEY_MECHA(cktest_aes_only_gcm, &cktest_aes_gcm_mechanism), }; static const struct cktest_allowed_test cktest_allowed_invalid[] = { CKTEST_KEY_MECHA(cktest_aes_not_ecb, &cktest_aes_ecb_mechanism), CKTEST_KEY_MECHA(cktest_aes_not_cbcnopad, &cktest_aes_cbc_mechanism), CKTEST_KEY_MECHA(cktest_aes_not_cts, &cktest_aes_cts_mechanism), CKTEST_KEY_MECHA(cktest_aes_not_ctr, &cktest_aes_ctr_mechanism), CKTEST_KEY_MECHA(cktest_aes_not_gcm, &cktest_aes_gcm_mechanism), }; /* Create session object and token object from a session */ static CK_RV cipher_init_final(ADBG_Case_t *c, CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR attr_key, CK_ULONG attr_count, CK_MECHANISM_PTR mechanism, uint32_t mode, CK_RV expected_rc) { CK_RV rv2 = CKR_GENERAL_ERROR; CK_RV rv = CKR_GENERAL_ERROR; CK_OBJECT_HANDLE object = CK_INVALID_HANDLE; switch (mode) { case TEE_MODE_ENCRYPT: case TEE_MODE_DECRYPT: break; default: ADBG_EXPECT_TRUE(c, false); } rv = C_CreateObject(session, attr_key, attr_count, &object); if (!ADBG_EXPECT_CK_OK(c, rv)) return rv; if (mode == TEE_MODE_ENCRYPT) rv = C_EncryptInit(session, mechanism, object); if (mode == TEE_MODE_DECRYPT) rv = C_DecryptInit(session, mechanism, object); if (!ADBG_EXPECT_CK_RESULT(c, expected_rc, rv)) { rv = CKR_GENERAL_ERROR; goto out; } if (rv) { /* * If we're here it was the expected error code above and * we're supposed to return OK below. */ rv = CKR_OK; } else { if (mode == TEE_MODE_ENCRYPT) rv = C_EncryptFinal(session, NULL, NULL); if (mode == TEE_MODE_DECRYPT) rv = C_DecryptFinal(session, NULL, NULL); /* * Check that return value is expected so that operation is * released */ if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) { rv = CKR_GENERAL_ERROR; goto out; } rv = CKR_OK; } out: rv2 = C_DestroyObject(session, object); ADBG_EXPECT_CK_OK(c, rv2); if (rv) return rv; else return rv2; } CK_KEY_ALLOWED_AES_ENC_TEST(cktest_aes_enc_only_cts, allowed_only_aes_cts); CK_KEY_ALLOWED_AES_DEC_TEST(cktest_aes_dec_only_ctr, allowed_only_aes_ctr); CK_KEY_ALLOWED_AES_ENC_TEST(cktest_aes_enc_only_gcm, allowed_only_aes_gcm); static void xtest_pkcs11_test_1005(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION; size_t n = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; for (n = 0; n < ARRAY_SIZE(cktest_allowed_valid); n++) { Do_ADBG_BeginSubCase(c, "valid usage #%zu", n); rv = cipher_init_final(c, session, cktest_allowed_valid[n].attr_key, cktest_allowed_valid[n].attr_count, cktest_allowed_valid[n].mechanism, TEE_MODE_ENCRYPT, CKR_OK); ADBG_EXPECT_CK_OK(c, rv); Do_ADBG_EndSubCase(c, NULL); if (rv) goto out; } for (n = 0; n < ARRAY_SIZE(cktest_allowed_invalid); n++) { Do_ADBG_BeginSubCase(c, "invalid usage #%zu", n); rv = cipher_init_final(c, session, cktest_allowed_invalid[n].attr_key, cktest_allowed_invalid[n].attr_count, cktest_allowed_invalid[n].mechanism, TEE_MODE_ENCRYPT, CKR_KEY_FUNCTION_NOT_PERMITTED); ADBG_EXPECT_CK_OK(c, rv); Do_ADBG_EndSubCase(c, NULL); if (rv) goto out; } out: rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); } ADBG_CASE_DEFINE(pkcs11, 1005, xtest_pkcs11_test_1005, "PKCS11: Check ciphering with valid and invalid keys #1"); static void xtest_pkcs11_test_1006(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Encrypt only AES CTS key */ rv = cipher_init_final(c, session, cktest_aes_enc_only_cts, ARRAY_SIZE(cktest_aes_enc_only_cts), &cktest_aes_cts_mechanism, TEE_MODE_ENCRYPT, CKR_OK); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = cipher_init_final(c, session, cktest_aes_enc_only_cts, ARRAY_SIZE(cktest_aes_enc_only_cts), &cktest_aes_cts_mechanism, TEE_MODE_DECRYPT, CKR_KEY_FUNCTION_NOT_PERMITTED); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Decrypt only AES CTR key */ rv = cipher_init_final(c, session, cktest_aes_dec_only_ctr, ARRAY_SIZE(cktest_aes_dec_only_ctr), &cktest_aes_ctr_mechanism, TEE_MODE_ENCRYPT, CKR_KEY_FUNCTION_NOT_PERMITTED); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = cipher_init_final(c, session, cktest_aes_dec_only_ctr, ARRAY_SIZE(cktest_aes_dec_only_ctr), &cktest_aes_ctr_mechanism, TEE_MODE_ENCRYPT, CKR_KEY_FUNCTION_NOT_PERMITTED); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Encrypt only AES GCM key */ rv = cipher_init_final(c, session, cktest_aes_enc_only_gcm, ARRAY_SIZE(cktest_aes_enc_only_gcm), &cktest_aes_gcm_mechanism, TEE_MODE_ENCRYPT, CKR_OK); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = cipher_init_final(c, session, cktest_aes_enc_only_gcm, ARRAY_SIZE(cktest_aes_enc_only_gcm), &cktest_aes_gcm_mechanism, TEE_MODE_DECRYPT, CKR_KEY_FUNCTION_NOT_PERMITTED); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; out: rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); } ADBG_CASE_DEFINE(pkcs11, 1006, xtest_pkcs11_test_1006, "PKCS11: Check ciphering with valid and invalid keys #2"); static CK_RV open_cipher_session(ADBG_Case_t *c, CK_SLOT_ID slot, CK_SESSION_HANDLE_PTR session, CK_ATTRIBUTE_PTR attr_key, CK_ULONG attr_count, CK_MECHANISM_PTR mechanism, uint32_t mode) { CK_RV rv = CKR_GENERAL_ERROR; CK_OBJECT_HANDLE object = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION; switch (mode) { case TEE_MODE_ENCRYPT: case TEE_MODE_DECRYPT: break; default: ADBG_EXPECT_TRUE(c, false); return CKR_GENERAL_ERROR; } rv = C_OpenSession(slot, session_flags, NULL, 0, session); if (rv == CKR_DEVICE_MEMORY || rv == CKR_HOST_MEMORY) return rv; if (!ADBG_EXPECT_CK_OK(c, rv)) return rv; rv = C_CreateObject(*session, attr_key, attr_count, &object); if (rv == CKR_DEVICE_MEMORY || rv == CKR_HOST_MEMORY) return rv; if (!ADBG_EXPECT_CK_OK(c, rv)) return rv; if (mode == TEE_MODE_ENCRYPT) rv = C_EncryptInit(*session, mechanism, object); if (mode == TEE_MODE_DECRYPT) rv = C_DecryptInit(*session, mechanism, object); if (rv == CKR_DEVICE_MEMORY || rv == CKR_HOST_MEMORY) return rv; if (!ADBG_EXPECT_CK_OK(c, rv)) return CKR_GENERAL_ERROR; return rv; } static void xtest_pkcs11_test_1007(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE sessions[128]; size_t n = 0; for (n = 0; n < ARRAY_SIZE(sessions); n++) sessions[n] = CK_INVALID_HANDLE; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; for (n = 0; n < ARRAY_SIZE(sessions); n++) { rv = open_cipher_session(c, slot, &sessions[n], cktest_allowed_valid[0].attr_key, cktest_allowed_valid[0].attr_count, cktest_allowed_valid[0].mechanism, TEE_MODE_ENCRYPT); /* Failure due to memory allocation is not a error case */ if (rv == CKR_DEVICE_MEMORY || rv == CKR_HOST_MEMORY) break; if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; } if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, >, 0)) goto out; Do_ADBG_Log(" created sessions count: %zu", n); /* Closing session with out bound and invalid IDs (or negative ID) */ rv = C_CloseSession(sessions[n - 1] + 1024); ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_HANDLE_INVALID, rv); rv = C_CloseSession(CK_INVALID_HANDLE); ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_HANDLE_INVALID, rv); rv = C_CloseSession(~0); ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_HANDLE_INVALID, rv); /* Closing each session: all related resources shall be free */ for (n = 0; n < ARRAY_SIZE(sessions); n++) { if (sessions[n] == CK_INVALID_HANDLE) continue; rv = C_CloseSession(sessions[n]); ADBG_EXPECT_CK_OK(c, rv); sessions[n] = CK_INVALID_HANDLE; } /* Open and close another session */ rv = open_cipher_session(c, slot, &sessions[0], cktest_allowed_valid[0].attr_key, cktest_allowed_valid[0].attr_count, cktest_allowed_valid[0].mechanism, TEE_MODE_ENCRYPT); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_CloseSession(sessions[0]); ADBG_EXPECT_CK_OK(c, rv); sessions[0] = CK_INVALID_HANDLE; out: for (n = 0; n < ARRAY_SIZE(sessions); n++) { if (sessions[n] == CK_INVALID_HANDLE) continue; rv = C_CloseSession(sessions[n]); ADBG_EXPECT_CK_OK(c, rv); } rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); } ADBG_CASE_DEFINE(pkcs11, 1007, xtest_pkcs11_test_1007, "PKCS11: Check operations release at session closure"); #define CK_MAC_KEY_AES(_key_array) \ { \ { CKA_SIGN, &(CK_BBOOL){CK_TRUE}, \ sizeof(CK_BBOOL) }, \ { CKA_VERIFY, &(CK_BBOOL){CK_TRUE}, \ sizeof(CK_BBOOL) }, \ { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, \ sizeof(CK_OBJECT_CLASS) }, \ { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, \ sizeof(CK_KEY_TYPE) }, \ { CKA_VALUE, (void *)(_key_array), \ sizeof(_key_array) }, \ } static CK_ATTRIBUTE cktest_aes_cmac_key1[] = CK_MAC_KEY_AES(mac_cmac_vect1_key); static CK_ATTRIBUTE cktest_aes_cmac_key2[] = CK_MAC_KEY_AES(mac_cmac_vect5_key); static CK_ATTRIBUTE cktest_aes_cmac_key3[] = CK_MAC_KEY_AES(mac_cmac_vect9_key); #define CK_MAC_KEY_HMAC(_type, _key_array) \ { \ { CKA_SIGN, &(CK_BBOOL){CK_TRUE}, \ sizeof(CK_BBOOL) }, \ { CKA_VERIFY, &(CK_BBOOL){CK_TRUE}, \ sizeof(CK_BBOOL) }, \ { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, \ sizeof(CK_OBJECT_CLASS) }, \ { CKA_KEY_TYPE, &(CK_KEY_TYPE){_type}, \ sizeof(CK_KEY_TYPE) }, \ { CKA_VALUE, (void *)(_key_array), \ sizeof(_key_array) }, \ } static CK_ATTRIBUTE cktest_hmac_md5_key[] = CK_MAC_KEY_HMAC(CKK_MD5_HMAC, mac_data_md5_key1); static CK_ATTRIBUTE cktest_hmac_sha1_key[] = CK_MAC_KEY_HMAC(CKK_SHA_1_HMAC, mac_data_sha1_key1); static CK_ATTRIBUTE cktest_hmac_sha224_key[] = CK_MAC_KEY_HMAC(CKK_SHA224_HMAC, mac_data_sha224_key1); static CK_ATTRIBUTE cktest_hmac_sha256_key1[] = CK_MAC_KEY_HMAC(CKK_SHA256_HMAC, mac_data_sha256_key1); static CK_ATTRIBUTE cktest_hmac_sha256_key2[] = CK_MAC_KEY_HMAC(CKK_SHA256_HMAC, mac_data_sha256_key2); static CK_ATTRIBUTE cktest_hmac_sha384_key[] = CK_MAC_KEY_HMAC(CKK_SHA384_HMAC, mac_data_sha384_key1); static CK_ATTRIBUTE cktest_hmac_sha512_key[] = CK_MAC_KEY_HMAC(CKK_SHA512_HMAC, mac_data_sha512_key1); struct mac_test { CK_ATTRIBUTE_PTR attr_key; CK_ULONG attr_count; CK_MECHANISM_PTR mechanism; size_t in_incr; const uint8_t *in; size_t in_len; const uint8_t *out; size_t out_len; bool multiple_incr; }; #define CKTEST_MAC_TEST(key, mecha, input_incr, input, output, incr) { \ .attr_key = key, \ .attr_count = ARRAY_SIZE(key), \ .mechanism = mecha, \ .in_incr = input_incr, \ .in = input, \ .in_len = ARRAY_SIZE(input), \ .out = output, \ .out_len = ARRAY_SIZE(output), \ .multiple_incr = incr, \ } #define CKTEST_CMAC_TEST(key, mecha, input_incr, input, output, incr) { \ .attr_key = key, \ .attr_count = ARRAY_SIZE(key), \ .mechanism = mecha, \ .in_incr = input_incr, \ .in = input, \ .in_len = 0, \ .out = output, \ .out_len = ARRAY_SIZE(output), \ .multiple_incr = incr, \ } static const struct mac_test cktest_mac_cases[] = { CKTEST_CMAC_TEST(cktest_aes_cmac_key1, &cktest_aes_cmac_mechanism, 0, NULL, mac_cmac_vect1_out, false), CKTEST_CMAC_TEST(cktest_aes_cmac_key2, &cktest_aes_cmac_mechanism, 0, NULL, mac_cmac_vect5_out, false), CKTEST_CMAC_TEST(cktest_aes_cmac_key3, &cktest_aes_cmac_mechanism, 0, NULL, mac_cmac_vect9_out, false), CKTEST_MAC_TEST(cktest_hmac_md5_key, &cktest_hmac_md5_mechanism, 4, mac_data_md5_in1, mac_data_md5_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha1_key, &cktest_hmac_sha1_mechanism, 5, mac_data_sha1_in1, mac_data_sha1_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha224_key, &cktest_hmac_sha224_mechanism, 8, mac_data_sha224_in1, mac_data_sha224_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha256_key1, &cktest_hmac_sha256_mechanism, 1, mac_data_sha256_in1, mac_data_sha256_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha256_key2, &cktest_hmac_sha256_mechanism, 7, mac_data_sha256_in2, mac_data_sha256_out2, false), CKTEST_MAC_TEST(cktest_hmac_sha384_key, &cktest_hmac_sha384_mechanism, 11, mac_data_sha384_in1, mac_data_sha384_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha512_key, &cktest_hmac_sha512_mechanism, 13, mac_data_sha512_in1, mac_data_sha512_out1, false), CKTEST_CMAC_TEST(cktest_aes_cmac_key1, &cktest_aes_cmac_general_mechanism, 0, NULL, mac_cmac_vect1_out, false), CKTEST_CMAC_TEST(cktest_aes_cmac_key2, &cktest_aes_cmac_general_mechanism, 0, NULL, mac_cmac_vect5_out, false), CKTEST_CMAC_TEST(cktest_aes_cmac_key3, &cktest_aes_cmac_general_mechanism, 0, NULL, mac_cmac_vect9_out, false), CKTEST_MAC_TEST(cktest_hmac_md5_key, &cktest_hmac_general_md5_mechanism, 4, mac_data_md5_in1, mac_data_md5_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha1_key, &cktest_hmac_general_sha1_mechanism, 5, mac_data_sha1_in1, mac_data_sha1_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha224_key, &cktest_hmac_general_sha224_mechanism, 8, mac_data_sha224_in1, mac_data_sha224_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha256_key1, &cktest_hmac_general_sha256_mechanism, 1, mac_data_sha256_in1, mac_data_sha256_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha256_key2, &cktest_hmac_general_sha256_mechanism, 7, mac_data_sha256_in2, mac_data_sha256_out2, false), CKTEST_MAC_TEST(cktest_hmac_sha384_key, &cktest_hmac_general_sha384_mechanism, 11, mac_data_sha384_in1, mac_data_sha384_out1, false), CKTEST_MAC_TEST(cktest_hmac_sha512_key, &cktest_hmac_general_sha512_mechanism, 13, mac_data_sha512_in1, mac_data_sha512_out1, false), }; static bool ckm_is_hmac_general(struct mac_test const *test) { switch (test->mechanism->mechanism) { case CKM_AES_CMAC_GENERAL: case CKM_MD5_HMAC_GENERAL: case CKM_SHA_1_HMAC_GENERAL: case CKM_SHA224_HMAC_GENERAL: case CKM_SHA256_HMAC_GENERAL: case CKM_SHA384_HMAC_GENERAL: case CKM_SHA512_HMAC_GENERAL: return true; default: return false; } } static size_t get_mac_test_len(struct mac_test const *test) { if (ckm_is_hmac_general(test)) return (size_t)cktest_general_mechanism_hmac_len; return test->out_len; } static void xtest_pkcs11_test_1008(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION; CK_OBJECT_HANDLE key_handle = CK_INVALID_HANDLE; uint8_t out[512] = { 0 }; CK_ULONG out_size = 0; struct mac_test const *test = NULL; size_t n = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_close_lib; for (n = 0; n < ARRAY_SIZE(cktest_mac_cases); n++) { test = &cktest_mac_cases[n]; Do_ADBG_BeginSubCase(c, "Sign case %zu algo (%s)", n, ckm2str(test->mechanism->mechanism)); rv = C_CreateObject(session, test->attr_key, test->attr_count, &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; /* Test signature in 1 step */ if (test->in != NULL) { rv = C_SignInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Pass input buffer of size 0 */ rv = C_SignUpdate(session, (void *)test->in, 0); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_SignUpdate(session, (void *)test->in, test->in_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Test too short buffer case */ out_size = 1; rv = C_SignFinal(session, out, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto err_destr_obj; /* * Test NULL buffer case with size as 0 * to get the out_size */ out_size = 0; rv = C_SignFinal(session, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* * Test NULL buffer case with size as non-zero * to get the out_size */ out_size = 42; rv = C_SignFinal(session, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Get to full output */ memset(out, 0, out_size); rv = C_SignFinal(session, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; (void)ADBG_EXPECT_BUFFER(c, test->out, get_mac_test_len(test), out, out_size); } /* Test 2 step update signature */ rv = C_SignInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (test->in != NULL) { rv = C_SignUpdate(session, (void *)test->in, test->in_incr); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_SignUpdate(session, (void *)(test->in + test->in_incr), test->in_len - test->in_incr); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; } out_size = sizeof(out); memset(out, 0, sizeof(out)); rv = C_SignFinal(session, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; (void)ADBG_EXPECT_BUFFER(c, test->out, get_mac_test_len(test), out, out_size); /* Test 3 signature in one shot */ if (test->in != NULL) { rv = C_SignInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Test too short buffer case */ out_size = 1; rv = C_Sign(session,(void *)test->in, test->in_len, out, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto err_destr_obj; /* * Test NULL buffer case with size as 0 * to get the out_size */ out_size = 0; rv = C_Sign(session, (void *)test->in, test->in_len, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* * Test NULL buffer case with size as non-zero * to get the out_size */ out_size = 42; rv = C_Sign(session, (void *)test->in, test->in_len, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Get to full output */ memset(out, 0, out_size); rv = C_Sign(session,(void *)test->in, test->in_len, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; (void)ADBG_EXPECT_BUFFER(c, test->out, get_mac_test_len(test), out, out_size); } rv = C_DestroyObject(session, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); } goto out; err_destr_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); err: Do_ADBG_EndSubCase(c, NULL); out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); err_close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1008, xtest_pkcs11_test_1008, "PKCS11: Check Compliance of C_Sign - HMAC algorithms"); static void xtest_pkcs11_test_1009(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION; CK_OBJECT_HANDLE key_handle = CK_INVALID_HANDLE; struct mac_test const *test = NULL; size_t n = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_close_lib; for (n = 0; n < ARRAY_SIZE(cktest_mac_cases); n++) { test = &cktest_mac_cases[n]; Do_ADBG_BeginSubCase(c, "Verify case %zu algo (%s)", n, ckm2str(test->mechanism->mechanism)); rv = C_CreateObject(session, test->attr_key, test->attr_count, &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; /* Test Verification in 1 step */ if (test->in != NULL) { rv = C_VerifyInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Pass input buffer with size 0 - No affect */ rv = C_VerifyUpdate(session, (void *)test->in, 0); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyUpdate(session, (void *)test->in, test->in_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyFinal(session, (void *)test->out, get_mac_test_len(test)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; } /* Test 2 step update verification*/ rv = C_VerifyInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (test->in != NULL) { rv = C_VerifyUpdate(session, (void *)test->in, test->in_incr); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyUpdate(session, (void *)(test->in + test->in_incr), test->in_len - test->in_incr); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; } rv = C_VerifyFinal(session, (void *)test->out, get_mac_test_len(test)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Error as Operation has already completed */ rv = C_Verify(session, (void *)test->in, test->in_len, (void *)test->out, get_mac_test_len(test)); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto err_destr_obj; /* Test 3 verification in one shot */ if (test->in != NULL) { rv = C_VerifyInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)test->in, test->in_len, (void *)test->out, get_mac_test_len(test)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Try calling Verify again */ rv = C_Verify(session, (void *)test->in, test->in_len, (void *)test->out, get_mac_test_len(test)); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto err_destr_obj; } /* * Test 4 verification * Error - Signature Length Range with C_VerifyFinal */ if (test->in != NULL) { rv = C_VerifyInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyUpdate(session, (void *)test->in, test->in_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyFinal(session, (void *)test->out, 3); if (!ADBG_EXPECT_CK_RESULT(c, ckm_is_hmac_general(test) ? CKR_OK : CKR_SIGNATURE_LEN_RANGE, rv)) goto err_destr_obj; } /* * Test 5 verification * Error - Signature Length Range with C_Verify */ if (test->in != NULL) { rv = C_VerifyInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)test->in, test->in_len, (void *)test->out, 0); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SIGNATURE_LEN_RANGE, rv)) goto err_destr_obj; rv = C_VerifyInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)test->in, test->in_len, (void *)test->out, TEE_MAX_HASH_SIZE + 1); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SIGNATURE_LEN_RANGE, rv)) goto err_destr_obj; } /* Test 6 verification - Invalid Operation sequence */ if (test->in != NULL) { rv = C_VerifyInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)test->in, test->in_len, (void *)test->out, get_mac_test_len(test)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Init session has already terminated with C_Verify */ rv = C_VerifyUpdate(session, (void *)test->in, test->in_len); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto err_destr_obj; } rv = C_DestroyObject(session, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); } goto out; err_destr_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); err: Do_ADBG_EndSubCase(c, NULL); out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); err_close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1009, xtest_pkcs11_test_1009, "PKCS11: Check Compliance of C_Verify - HMAC Algorithms"); /* Bad key type */ static CK_ATTRIBUTE cktest_generate_gensecret_object_error1[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, }; /* Missing VALUE_LEN */ static CK_ATTRIBUTE cktest_generate_gensecret_object_error2[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_GENERIC_SECRET}, sizeof(CK_KEY_TYPE) }, }; /* Bad object class */ static CK_ATTRIBUTE cktest_generate_gensecret_object_error3[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_DATA}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_GENERIC_SECRET}, sizeof(CK_KEY_TYPE) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, }; /* Invalid template with CKA_LOCAL */ static CK_ATTRIBUTE cktest_generate_gensecret_object_error4[] = { { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, { CKA_LOCAL, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; /* Valid template to generate a generic secret */ static CK_ATTRIBUTE cktest_generate_gensecret_object_valid1[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_GENERIC_SECRET}, sizeof(CK_KEY_TYPE) }, { CKA_SIGN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, }; /* Valid template to generate a generic secret with only VALUE_LEN */ static CK_ATTRIBUTE cktest_generate_gensecret_object_valid2[] = { { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, { CKA_SIGN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; /* Valid template to generate an all AES purpose key */ static CK_ATTRIBUTE cktest_generate_aes_object[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, }; static void xtest_pkcs11_test_1010(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE key_handle = CK_INVALID_HANDLE; struct mac_test test_sign = CKTEST_MAC_TEST(cktest_hmac_md5_key, &cktest_hmac_md5_mechanism, 4, mac_data_md5_in1, mac_data_md5_out1, false); uint8_t out[512] = { 0 }; CK_ULONG out_len = 512; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* * Generate Generic Secret key using invalid templates */ Do_ADBG_BeginSubCase(c, "Generate Secret Key with Invalid Templates"); /* NULL Template with !null template length */ rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, NULL, 3, &key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) goto err; rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, cktest_generate_gensecret_object_error1, ARRAY_SIZE(cktest_generate_gensecret_object_error1), &key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_TEMPLATE_INCONSISTENT, rv)) goto err; rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, cktest_generate_gensecret_object_error2, ARRAY_SIZE(cktest_generate_gensecret_object_error2), &key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_TEMPLATE_INCOMPLETE, rv)) goto err; rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, cktest_generate_gensecret_object_error3, ARRAY_SIZE(cktest_generate_gensecret_object_error3), &key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_TEMPLATE_INCONSISTENT, rv)) goto err; rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, cktest_generate_gensecret_object_error4, ARRAY_SIZE(cktest_generate_gensecret_object_error4), &key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_TEMPLATE_INCONSISTENT, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); /* * Generate a Generic Secret object. * Try to encrypt with, it should fail... */ Do_ADBG_BeginSubCase(c, "Generate Generic Secret Key - Try Encrypting"); rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, cktest_generate_gensecret_object_valid1, ARRAY_SIZE(cktest_generate_gensecret_object_valid1), &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; rv = C_EncryptInit(session, &cktest_aes_cbc_mechanism, key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_FUNCTION_NOT_PERMITTED, rv)) goto err_destr_obj; rv = C_DestroyObject(session, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); /* * Generate a Generic Secret object. * Try to sign with it, it should pass... */ Do_ADBG_BeginSubCase(c, "Generate Generic Secret Key - Try Signing"); rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, cktest_generate_gensecret_object_valid2, ARRAY_SIZE(cktest_generate_gensecret_object_valid2), &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; rv = C_SignInit(session, test_sign.mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Sign(session, (void *)test_sign.in, test_sign.in_len, (void *)out, &out_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_DestroyObject(session, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); /* * Generate a 128 bit AES Secret Key. * Try to encrypt with, it should pass... */ Do_ADBG_BeginSubCase(c, "Generate AES Key - Try Encrypting"); rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, cktest_generate_aes_object, ARRAY_SIZE(cktest_generate_aes_object), &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; rv = C_EncryptInit(session, &cktest_aes_cbc_mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_EncryptFinal(session, NULL, NULL); /* Only check that the operation is no more active */ if (!ADBG_EXPECT_TRUE(c, rv != CKR_BUFFER_TOO_SMALL)) goto err; rv = C_DestroyObject(session, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); goto out; err_destr_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); err: Do_ADBG_EndSubCase(c, NULL); out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1010, xtest_pkcs11_test_1010, "PKCS11: Key Generation"); static CK_RV create_data_object(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE *obj_handle, CK_BBOOL token, CK_BBOOL private, const char *label) { CK_OBJECT_CLASS class = CKO_DATA; CK_ATTRIBUTE object_template[] = { { CKA_CLASS, &class, sizeof(class) }, { CKA_TOKEN, &token, sizeof(token) }, { CKA_PRIVATE, &private, sizeof(private) }, { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, }; return C_CreateObject(session, object_template, ARRAY_SIZE(object_template), obj_handle); } static CK_RV test_find_objects(ADBG_Case_t *c, CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR find_template, CK_ULONG attr_count, CK_OBJECT_HANDLE_PTR obj_found, CK_ULONG obj_count, CK_ULONG expected_cnt) { CK_RV rv = CKR_GENERAL_ERROR; CK_ULONG hdl_count = 0; rv = C_FindObjectsInit(session, find_template, attr_count); if (!ADBG_EXPECT_CK_OK(c, rv)) return rv; rv = C_FindObjects(session, obj_found, obj_count, &hdl_count); if (!ADBG_EXPECT_CK_OK(c, rv)) return rv; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, hdl_count, ==, expected_cnt)) return CKR_GENERAL_ERROR; rv = C_FindObjectsFinal(session); if (!ADBG_EXPECT_CK_OK(c, rv)) return rv; return rv; } static void destroy_persistent_objects(ADBG_Case_t *c, CK_SLOT_ID slot) { uint32_t rv = CKR_GENERAL_ERROR; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE obj_hdl = CK_INVALID_HANDLE; CK_ULONG count = 1; CK_ATTRIBUTE cktest_find_all_token_objs[] = { { CKA_TOKEN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) return; /* Login to destroy private objects */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; rv = C_FindObjectsInit(session, cktest_find_all_token_objs, ARRAY_SIZE(cktest_find_all_token_objs)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; while (1) { rv = C_FindObjects(session, &obj_hdl, 1, &count); if (!ADBG_EXPECT_CK_OK(c, rv)) goto bail; if (!count) break; rv = C_DestroyObject(session, obj_hdl); ADBG_EXPECT_CK_OK(c, rv); } rv = C_FindObjectsFinal(session); ADBG_EXPECT_CK_OK(c, rv); rv = C_Logout(session); ADBG_EXPECT_CK_OK(c, rv); bail: rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); } static void xtest_pkcs11_test_1011(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE obj_hdl[10] = { }; CK_OBJECT_HANDLE obj_found[10] = { }; const char *label = "Common Label"; CK_ULONG hdl_count = 0; size_t n = 0; uint32_t i = 0; uint32_t object_id = 0; bool logged_in = false; CK_ATTRIBUTE find_template[] = { { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, }; CK_ATTRIBUTE find_token_template[] = { { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, { CKA_TOKEN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE find_session_template[] = { { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, { CKA_TOKEN, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, }; CK_BBOOL bToken = CK_FALSE; CK_ATTRIBUTE get_attr_template[] = { { CKA_TOKEN, &bToken, sizeof(bToken) }, }; for (n = 0; n < ARRAY_SIZE(obj_hdl); n++) obj_hdl[n] = CK_INVALID_HANDLE; for (n = 0; n < ARRAY_SIZE(obj_found); n++) obj_found[n] = CK_INVALID_HANDLE; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* * Sub test: Create Session Public/Private, * Token Public/Private objects and find them */ Do_ADBG_BeginSubCase(c, "Find created Data objects when logged in"); /* Session Public Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(session, &obj_hdl[object_id++], CK_FALSE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Token Public Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(session, &obj_hdl[object_id++], CK_TRUE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Token Private Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_TRUE * Expected error as User not logged in */ rv = create_data_object(session, &obj_hdl[object_id], CK_TRUE, CK_TRUE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto out; /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; logged_in = true; /* Token Private Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(session, &obj_hdl[object_id++], CK_TRUE, CK_TRUE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Session Private Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(session, &obj_hdl[object_id++], CK_FALSE, CK_TRUE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = test_find_objects(c, session, find_template, ARRAY_SIZE(find_template), obj_found, ARRAY_SIZE(obj_found), 4); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Check if object handles returned when creating objects with this * session are still valid */ for (i = 0; i < object_id; i++) { rv = C_GetAttributeValue(session, obj_hdl[i], get_attr_template, ARRAY_SIZE(get_attr_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; } Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Pass NULL template with count as 0. All objects should * get returned */ Do_ADBG_BeginSubCase(c, "Find all objects by passing NULL template"); rv = test_find_objects(c, session, NULL, 0, obj_found, ARRAY_SIZE(obj_found), 4); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: finalize search without getting the handles found */ Do_ADBG_BeginSubCase(c, "Initiate and finalize straight a search"); rv = C_FindObjectsInit(session, find_template, ARRAY_SIZE(find_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_FindObjectsFinal(session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Check if object handles returned when creating objects with this * session are still valid */ for (i = 0; i < object_id; i++) { rv = C_GetAttributeValue(session, obj_hdl[i], get_attr_template, ARRAY_SIZE(get_attr_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; } Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Logout and find objects. We will find only public * objects (2) */ Do_ADBG_BeginSubCase(c, "Find created Data objects when logged out"); rv = C_Logout(session); ADBG_EXPECT_CK_OK(c, rv); logged_in = false; rv = test_find_objects(c, session, find_template, ARRAY_SIZE(find_template), obj_found, ARRAY_SIZE(obj_found), 2); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* * Sub test */ Do_ADBG_BeginSubCase(c, "Find objects 1 by 1 and match handles"); for (n = 0; n < ARRAY_SIZE(obj_found); n++) obj_found[n] = CK_INVALID_HANDLE; rv = C_FindObjectsInit(session, find_template, ARRAY_SIZE(find_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_FindObjects(session, obj_found, 1, &hdl_count); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, hdl_count, ==, 1) || !ADBG_EXPECT_TRUE(c, (obj_found[0] == obj_hdl[0]) || (obj_found[0] == obj_hdl[1]))) goto out; rv = C_FindObjects(session, &obj_found[1], 1, &hdl_count); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, hdl_count, ==, 1) || !ADBG_EXPECT_TRUE(c, (obj_found[1] == obj_hdl[0]) || (obj_found[1] == obj_hdl[1])) || !ADBG_EXPECT_TRUE(c, (obj_found[1] != obj_found[0]))) goto out; rv = C_FindObjects(session, obj_found, 1, &hdl_count); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, hdl_count, ==, 0)) goto out; rv = C_FindObjectsFinal(session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Find objects with CKA_TOKEN=TRUE */ Do_ADBG_BeginSubCase(c, "Find persistent objects"); rv = test_find_objects(c, session, find_token_template, ARRAY_SIZE(find_token_template), obj_found, ARRAY_SIZE(obj_found), 1); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Find only session objects */ Do_ADBG_BeginSubCase(c, "Find session objects"); rv = test_find_objects(c, session, find_session_template, ARRAY_SIZE(find_session_template), obj_found, ARRAY_SIZE(obj_found), 1); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: */ Do_ADBG_BeginSubCase(c, "Login again and find Data objects"); /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; logged_in = true; rv = test_find_objects(c, session, find_template, ARRAY_SIZE(find_template), obj_found, ARRAY_SIZE(obj_found), 3); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Logout(session); ADBG_EXPECT_CK_OK(c, rv); logged_in = false; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Close session and open new session, find objects * without logging and after logging */ Do_ADBG_BeginSubCase(c, "Find objects from brand new session"); rv = C_CloseSession(session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto destr_obj; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto destr_obj; rv = test_find_objects(c, session, find_template, ARRAY_SIZE(find_template), obj_found, ARRAY_SIZE(obj_found), 1); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; logged_in = true; rv = test_find_objects(c, session, find_template, ARRAY_SIZE(find_template), obj_found, ARRAY_SIZE(obj_found), 2); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Logout(session); ADBG_EXPECT_CK_OK(c, rv); logged_in = false; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: invalid call cases */ Do_ADBG_BeginSubCase(c, "Invalid cases"); rv = C_FindObjectsFinal(session); ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv); rv = C_FindObjects(session, obj_found, ARRAY_SIZE(obj_found), &hdl_count); ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv); rv = C_FindObjectsInit(session, find_template, ARRAY_SIZE(find_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_FindObjectsInit(session, find_template, ARRAY_SIZE(find_template)); ADBG_EXPECT_COMPARE_UNSIGNED(c, rv, !=, CKR_OK); rv = C_FindObjectsFinal(session); ADBG_EXPECT_CK_OK(c, rv); rv = C_FindObjectsInit(session, find_template, ARRAY_SIZE(find_template)); ADBG_EXPECT_CK_OK(c, rv); /* * Intentionally do not finalize the active object search. It should be * released together with the session closure. */ Do_ADBG_EndSubCase(c, NULL); out: if (logged_in) ADBG_EXPECT_CK_OK(c, C_Logout(session)); ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); destr_obj: destroy_persistent_objects(c, slot); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1011, xtest_pkcs11_test_1011, "PKCS11: Test Find Objects"); static void xtest_pkcs11_test_1012(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE obj_hdl = CK_INVALID_HANDLE; CK_OBJECT_HANDLE key_hdl = CK_INVALID_HANDLE; size_t i = 0; CK_OBJECT_CLASS obj_class = CKO_DATA; CK_BBOOL obj_token = CK_FALSE; CK_BBOOL obj_private = CK_FALSE; uint8_t obj_value[5] = { 1, 2, 3, 4, 5 }; const char *obj_label = "Label"; CK_ATTRIBUTE object_template[] = { { CKA_CLASS, &obj_class, sizeof(obj_class) }, { CKA_TOKEN, &obj_token, sizeof(obj_token) }, { CKA_PRIVATE, &obj_private, sizeof(obj_private) }, { CKA_VALUE, obj_value, sizeof(obj_value) }, { CKA_LABEL, (CK_UTF8CHAR_PTR)obj_label, strlen(obj_label) }, }; CK_OBJECT_CLASS secret_class = CKO_SECRET_KEY; CK_BBOOL secret_token = CK_FALSE; CK_BBOOL secret_private = CK_FALSE; CK_KEY_TYPE secret_key_type = CKK_GENERIC_SECRET; CK_ULONG secret_len = 32; CK_MECHANISM_TYPE secret_allowed_mecha[] = { CKM_SHA_1_HMAC, CKM_SHA224_HMAC, CKM_SHA256_HMAC }; CK_ATTRIBUTE secret_template[] = { { CKA_CLASS, &secret_class, sizeof(secret_class) }, { CKA_TOKEN, &secret_token, sizeof(secret_token) }, { CKA_PRIVATE, &secret_private, sizeof(secret_private) }, { CKA_KEY_TYPE, &secret_key_type, sizeof(secret_key_type) }, { CKA_VALUE_LEN, &secret_len, sizeof(secret_len) }, { CKA_ALLOWED_MECHANISMS, secret_allowed_mecha, sizeof(secret_allowed_mecha) } }; CK_BBOOL g_token = CK_TRUE; CK_BBOOL g_private = CK_TRUE; CK_OBJECT_CLASS g_class = ~0; uint8_t g_value[128] = { 0 }; CK_MECHANISM_TYPE g_mecha_list[10] = { 0 }; uint8_t *data_ptr = NULL; CK_ATTRIBUTE get_attr_template_bc[] = { { CKA_TOKEN, &g_token, sizeof(g_token) }, { CKA_CLASS, &g_class, sizeof(g_class) }, }; CK_ATTRIBUTE get_attr_template_cb[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_TOKEN, &g_token, sizeof(g_token) }, }; CK_ATTRIBUTE get_attr_template_query_bc[] = { { CKA_TOKEN, NULL, 0 }, { CKA_CLASS, NULL, 0 }, }; CK_ATTRIBUTE get_attr_template_query_cb[] = { { CKA_CLASS, NULL, 0 }, { CKA_TOKEN, NULL, 0 }, }; CK_ATTRIBUTE get_attr_template_ve[] = { { CKA_VALUE, &g_value, sizeof(obj_value) }, }; CK_ATTRIBUTE get_attr_template_vl[] = { { CKA_VALUE, &g_value, sizeof(g_value) }, }; CK_ATTRIBUTE get_attr_template_bvecb[] = { { CKA_TOKEN, &g_token, sizeof(g_token) }, { CKA_VALUE, &g_value, sizeof(obj_value) }, { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_TOKEN, &g_private, sizeof(g_private) }, }; CK_ATTRIBUTE get_attr_template_bvlcb[] = { { CKA_TOKEN, &g_token, sizeof(g_token) }, { CKA_VALUE, &g_value, sizeof(g_value) }, { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_TOKEN, &g_private, sizeof(g_private) }, }; CK_ATTRIBUTE get_attr_template_am[] = { { CKA_ALLOWED_MECHANISMS, &g_mecha_list, sizeof(g_mecha_list) }, }; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Session Public Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_FALSE */ rv = C_CreateObject(session, object_template, ARRAY_SIZE(object_template), &obj_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Sub test: Test Boolean (1 byte) + object class (CK_ULONG) */ Do_ADBG_BeginSubCase(c, "Get Attribute - boolean + class"); g_token = CK_TRUE; g_class = ~0; rv = C_GetAttributeValue(session, obj_hdl, get_attr_template_bc, ARRAY_SIZE(get_attr_template_bc)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_DATA); ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_FALSE); Do_ADBG_EndSubCase(c, NULL); /* * Sub test: object class (CK_ULONG) + Test Boolean (1 byte) */ Do_ADBG_BeginSubCase(c, "Get Attribute - class + boolean"); g_token = CK_TRUE; g_class = ~0; rv = C_GetAttributeValue(session, obj_hdl, get_attr_template_cb, ARRAY_SIZE(get_attr_template_cb)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_DATA); ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_FALSE); Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Query size boolean (1 byte) + object class (CK_ULONG) */ Do_ADBG_BeginSubCase(c, "Get Attribute - query size boolean + class"); g_token = CK_TRUE; g_class = ~0; rv = C_GetAttributeValue(session, obj_hdl, get_attr_template_query_bc, ARRAY_SIZE(get_attr_template_query_bc)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_query_bc[0].ulValueLen, ==, 1); ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_query_bc[1].ulValueLen, ==, sizeof(CK_ULONG)); Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Query size object class (CK_ULONG) + boolean (1 byte) */ Do_ADBG_BeginSubCase(c, "Get Attribute - query size class + boolean"); g_token = CK_TRUE; g_class = ~0; rv = C_GetAttributeValue(session, obj_hdl, get_attr_template_query_cb, ARRAY_SIZE(get_attr_template_query_cb)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_query_cb[0].ulValueLen, ==, sizeof(CK_ULONG)); ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_query_cb[1].ulValueLen, ==, 1); Do_ADBG_EndSubCase(c, NULL); /* * Sub test: value with exact size */ Do_ADBG_BeginSubCase(c, "Get Attribute - value with exact size buffer"); memset(g_value, 0xCC, sizeof(g_value)); rv = C_GetAttributeValue(session, obj_hdl, get_attr_template_ve, ARRAY_SIZE(get_attr_template_ve)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_ve[0].ulValueLen, ==, sizeof(obj_value)); ADBG_EXPECT_EQUAL(c, g_value, obj_value, sizeof(obj_value)); for (i = sizeof(obj_value); i < sizeof(g_value); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, g_value[i], ==, 0xCC)) break; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: value with larger buffer */ Do_ADBG_BeginSubCase(c, "Get Attribute - value with larger buffer"); memset(g_value, 0xCC, sizeof(g_value)); rv = C_GetAttributeValue(session, obj_hdl, get_attr_template_vl, ARRAY_SIZE(get_attr_template_vl)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_vl[0].ulValueLen, ==, sizeof(obj_value)); ADBG_EXPECT_EQUAL(c, g_value, obj_value, sizeof(obj_value)); for (i = sizeof(obj_value); i < sizeof(g_value); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, g_value[i], ==, 0xCC)) break; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: bool + value with exact size + class + bool */ Do_ADBG_BeginSubCase(c, "Get Attribute - bool + value with exact size + class + bool"); memset(g_value, 0xCC, sizeof(g_value)); g_token = CK_TRUE; g_private = CK_TRUE; g_class = ~0; rv = C_GetAttributeValue(session, obj_hdl, get_attr_template_bvecb, ARRAY_SIZE(get_attr_template_bvecb)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_bvecb[1].ulValueLen, ==, sizeof(obj_value)); ADBG_EXPECT_EQUAL(c, g_value, obj_value, sizeof(obj_value)); for (i = sizeof(obj_value); i < sizeof(g_value); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, g_value[i], ==, 0xCC)) break; ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_DATA); ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_FALSE); ADBG_EXPECT_COMPARE_UNSIGNED(c, g_private, ==, CK_FALSE); Do_ADBG_EndSubCase(c, NULL); /* * Sub test: bool + value with larger buffer + class + bool */ Do_ADBG_BeginSubCase(c, "Get Attribute - bool + value with larger buffer + class + bool"); memset(g_value, 0xCC, sizeof(g_value)); g_token = CK_TRUE; g_private = CK_TRUE; g_class = ~0; rv = C_GetAttributeValue(session, obj_hdl, get_attr_template_bvlcb, ARRAY_SIZE(get_attr_template_bvlcb)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_bvlcb[1].ulValueLen, ==, sizeof(obj_value)); ADBG_EXPECT_EQUAL(c, g_value, obj_value, sizeof(obj_value)); for (i = sizeof(obj_value); i < sizeof(g_value); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, g_value[i], ==, 0xCC)) break; ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_DATA); ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_FALSE); ADBG_EXPECT_COMPARE_UNSIGNED(c, g_private, ==, CK_FALSE); Do_ADBG_EndSubCase(c, NULL); /* * Sub test: allowed mechanism list */ Do_ADBG_BeginSubCase(c, "Get Attribute - allowed mechanism list"); memset(g_mecha_list, 0xCC, sizeof(g_mecha_list)); rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, secret_template, ARRAY_SIZE(secret_template), &key_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetAttributeValue(session, key_hdl, get_attr_template_am, ARRAY_SIZE(get_attr_template_am)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, get_attr_template_am[0].ulValueLen, ==, sizeof(secret_allowed_mecha)); for (i = 0; i < sizeof(secret_allowed_mecha) / sizeof(*secret_allowed_mecha); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, g_mecha_list[i], ==, secret_allowed_mecha[i])) break; data_ptr = (uint8_t *)g_mecha_list; for (i = sizeof(secret_allowed_mecha); i < sizeof(g_mecha_list); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, data_ptr[i], ==, 0xCC)) break; Do_ADBG_EndSubCase(c, NULL); out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1012, xtest_pkcs11_test_1012, "PKCS11: Serializer tests"); static void xtest_pkcs11_test_1013(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE rw_session = CK_INVALID_HANDLE; CK_SESSION_HANDLE ro_session = CK_INVALID_HANDLE; CK_FLAGS rw_session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_FLAGS ro_session_flags = CKF_SERIAL_SESSION; CK_OBJECT_HANDLE obj_hdl = CK_INVALID_HANDLE; const char *label = "Dummy Objects"; bool ro_logged_in = false; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Open a RW session */ rv = C_OpenSession(slot, rw_session_flags, NULL, 0, &rw_session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Open a RO session */ rv = C_OpenSession(slot, ro_session_flags, NULL, 0, &ro_session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* * Sub test: Check object creation from a R/O Public session */ Do_ADBG_BeginSubCase(c, "Create objects in R/O Public Session"); /* Session Public Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(ro_session, &obj_hdl, CK_FALSE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Session Private Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(ro_session, &obj_hdl, CK_FALSE, CK_TRUE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto out; /* Token Public Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(ro_session, &obj_hdl, CK_TRUE, CK_FALSE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_READ_ONLY, rv)) goto out; /* Token Private Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(ro_session, &obj_hdl, CK_TRUE, CK_TRUE, label); /* For Token object creation, SESSION_READ_ONLY will take priority */ if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_READ_ONLY, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Check access for a R/W Public session */ Do_ADBG_BeginSubCase(c, "Create objects in R/O Public Session"); /* Session Public Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(rw_session, &obj_hdl, CK_FALSE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Session Private Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(rw_session, &obj_hdl, CK_FALSE, CK_TRUE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto out; /* Token Public Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(rw_session, &obj_hdl, CK_TRUE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Token Private Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(rw_session, &obj_hdl, CK_TRUE, CK_TRUE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Check access for a R/O User session */ Do_ADBG_BeginSubCase(c, "Create objects in R/O User Session"); /* Login to Test Token */ rv = C_Login(ro_session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ro_logged_in = true; /* Session Public Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(ro_session, &obj_hdl, CK_FALSE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Session Private Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(ro_session, &obj_hdl, CK_FALSE, CK_TRUE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Token Public Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(ro_session, &obj_hdl, CK_TRUE, CK_FALSE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_READ_ONLY, rv)) goto out; /* Token Private Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(ro_session, &obj_hdl, CK_TRUE, CK_TRUE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_READ_ONLY, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Check access for a R/W User session */ Do_ADBG_BeginSubCase(c, "Create objects in R/W User Session"); /* Session Public Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(rw_session, &obj_hdl, CK_FALSE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Session Private Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(rw_session, &obj_hdl, CK_FALSE, CK_TRUE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Token Public Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(rw_session, &obj_hdl, CK_TRUE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Token Private Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(rw_session, &obj_hdl, CK_TRUE, CK_TRUE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Log out */ ADBG_EXPECT_CK_OK(c, C_Logout(ro_session)); ro_logged_in = false; /* Close RO session */ ADBG_EXPECT_CK_OK(c, C_CloseSession(ro_session)); ro_session = CK_INVALID_HANDLE; Do_ADBG_EndSubCase(c, NULL); /* * Sub test: Check access for a R/W SO session */ Do_ADBG_BeginSubCase(c, "Create objects in R/W SO Session"); /* Login as security officer in RW session */ rv = C_Login(rw_session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Session Public Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(rw_session, &obj_hdl, CK_FALSE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto logout; /* Session Private Obj CKA_TOKEN = CK_FALSE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(rw_session, &obj_hdl, CK_FALSE, CK_TRUE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto logout; /* Token Public Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_FALSE */ rv = create_data_object(rw_session, &obj_hdl, CK_TRUE, CK_FALSE, label); if (!ADBG_EXPECT_CK_OK(c, rv)) goto logout; /* Token Private Obj CKA_TOKEN = CK_TRUE, CKA_PRIVATE = CK_TRUE */ rv = create_data_object(rw_session, &obj_hdl, CK_TRUE, CK_TRUE, label); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto logout; logout: ADBG_EXPECT_CK_OK(c, C_Logout(rw_session)); out: if (ro_logged_in) ADBG_EXPECT_CK_OK(c, C_Logout(ro_session)); if (ro_session != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_CloseSession(ro_session)); ADBG_EXPECT_CK_OK(c, C_CloseSession(rw_session)); Do_ADBG_EndSubCase(c, NULL); destroy_persistent_objects(c, slot); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1013, xtest_pkcs11_test_1013, "PKCS11: Object creation upon session type"); static void xtest_pkcs11_test_1014(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE obj_hdl = CK_INVALID_HANDLE; const char *id = "1"; const char *label = "Dummy Objects"; const char *new_label = "New Object lable"; size_t n = 0; char *g_label[100] = { }; char *g_id[100] = { }; CK_MECHANISM_TYPE secret_allowed_mecha[] = { CKM_SHA_1_HMAC, CKM_SHA224_HMAC, CKM_SHA256_HMAC }; CK_ATTRIBUTE secret_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_TOKEN, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_MODIFIABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_COPYABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_DESTROYABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_GENERIC_SECRET}, sizeof(CK_KEY_TYPE) }, { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, { CKA_VALUE, (void *)cktest_aes128_key, sizeof(cktest_aes128_key) }, { CKA_SIGN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_ALLOWED_MECHANISMS, secret_allowed_mecha, sizeof(secret_allowed_mecha) }, }; CK_BBOOL g_derive = CK_FALSE; CK_BBOOL g_sign = CK_FALSE; CK_BBOOL g_verify = CK_FALSE; CK_BBOOL g_encrypt = CK_FALSE; CK_BBOOL g_decrypt = CK_FALSE; CK_BBOOL g_wrap = CK_FALSE; CK_BBOOL g_unwrap = CK_FALSE; CK_ULONG g_len = 0; CK_ATTRIBUTE get_template[] = { { CKA_LABEL, (CK_UTF8CHAR_PTR)g_label, sizeof(g_label) }, { CKA_ID, (CK_BYTE_PTR)g_id, sizeof(g_id) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_SIGN, &g_sign, sizeof(g_sign) }, { CKA_VERIFY, &g_verify, sizeof(g_verify) }, { CKA_ENCRYPT, &g_encrypt, sizeof(g_encrypt) }, { CKA_DECRYPT, &g_decrypt, sizeof(g_decrypt) }, { CKA_WRAP, &g_wrap, sizeof(g_wrap) }, { CKA_UNWRAP, &g_unwrap, sizeof(g_unwrap) }, { CKA_VALUE_LEN, &g_len, sizeof(g_len) }, }; CK_ATTRIBUTE set_template[] = { { CKA_LABEL, (CK_UTF8CHAR_PTR)new_label, strlen(new_label) }, { CKA_ID, (CK_BYTE_PTR)id, strlen(id) }, { CKA_DERIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, /* CKA_SENSITIVE -> CK_FALSE to CK_TRUE is allowed */ { CKA_SENSITIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, /* CKA_EXTRACTABLE -> CK_TRUE to CK_FALSE is allowed */ { CKA_EXTRACTABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, /* CKA_COPYABLE -> CK_TRUE to CK_FALSE is allowed */ { CKA_COPYABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE set_inv_template1[] = { /* Attributes Not Modifiable */ { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_DATA}, sizeof(CK_OBJECT_CLASS) }, { CKA_LOCAL, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_ALWAYS_SENSITIVE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_NEVER_EXTRACTABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_TOKEN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_MODIFIABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DESTROYABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, /* Change not allowed from CK_TRUE -> CK_FALSE */ { CKA_SENSITIVE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, /* Change not allowed from CK_FALSE -> CK_TRUE */ { CKA_EXTRACTABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_COPYABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE set_inv_template2[] = { { CKA_APPLICATION, (CK_UTF8CHAR_PTR)label, sizeof(label) }, }; CK_ATTRIBUTE set_trusted_template[] = { { CKA_TRUSTED, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Open a RW session */ rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Create a secret key object */ rv = C_CreateObject(session, secret_key_template, ARRAY_SIZE(secret_key_template), &obj_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; Do_ADBG_BeginSubCase(c, "Set attributes on secret key object"); rv = C_GetAttributeValue(session, obj_hdl, get_template, ARRAY_SIZE(get_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_BUFFER(c, label, strlen(label), g_label, get_template[0].ulValueLen) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_unwrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_encrypt, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_decrypt, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_len, ==, 16) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, get_template[1].ulValueLen, ==, 0)) goto out; rv = C_SetAttributeValue(session, obj_hdl, set_template, ARRAY_SIZE(set_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; get_template[0].ulValueLen = sizeof(g_label); get_template[1].ulValueLen = sizeof(g_id); rv = C_GetAttributeValue(session, obj_hdl, get_template, ARRAY_SIZE(get_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_BUFFER(c, new_label, strlen(new_label), g_label, get_template[0].ulValueLen) || !ADBG_EXPECT_BUFFER(c, id, strlen(id), g_id, get_template[1].ulValueLen) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_unwrap, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_encrypt, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_decrypt, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify, ==, CK_FALSE)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test Invalid template with R/O Attributes"); for (n = 0; n < ARRAY_SIZE(set_inv_template1); n++) { rv = C_SetAttributeValue(session, obj_hdl, &set_inv_template1[n], 1); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_READ_ONLY, rv)) goto out; } Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test Invalid template with Invalid Attribute"); rv = C_SetAttributeValue(session, obj_hdl, set_inv_template2, ARRAY_SIZE(set_inv_template2)); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_TYPE_INVALID, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Set CKA_TRUSTED with and w/o SO Login"); rv = C_SetAttributeValue(session, obj_hdl, set_trusted_template, ARRAY_SIZE(set_trusted_template)); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_READ_ONLY, rv)) goto out; /* Login as SO in RW session */ rv = C_Login(session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_SetAttributeValue(session, obj_hdl, set_trusted_template, ARRAY_SIZE(set_trusted_template)); ADBG_EXPECT_CK_OK(c, rv); ADBG_EXPECT_CK_OK(c, C_Logout(session)); out: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, obj_hdl)); Do_ADBG_EndSubCase(c, NULL); close_session: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1014, xtest_pkcs11_test_1014, "PKCS11: Test C_SetAttributeValue()"); static void xtest_pkcs11_test_1015(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE rw_session = CK_INVALID_HANDLE; CK_SESSION_HANDLE ro_session = CK_INVALID_HANDLE; CK_FLAGS rw_session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_FLAGS ro_session_flags = CKF_SERIAL_SESSION; CK_OBJECT_HANDLE obj_hdl = CK_INVALID_HANDLE; CK_OBJECT_HANDLE obj_hdl_ro = CK_INVALID_HANDLE; CK_OBJECT_HANDLE obj_hdl_cp = CK_INVALID_HANDLE; const char *label = "Dummy Objects"; CK_ATTRIBUTE secret_key_create_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_MODIFIABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_COPYABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_DESTROYABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VALUE, (void *)cktest_aes128_key, sizeof(cktest_aes128_key) }, }; CK_ATTRIBUTE secret_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_MODIFIABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_COPYABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_DESTROYABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, }; CK_BBOOL g_token = CK_FALSE; CK_BBOOL g_private = CK_FALSE; CK_BBOOL g_modify = CK_FALSE; CK_BBOOL g_copy = CK_FALSE; CK_BBOOL g_destroy = CK_FALSE; CK_BBOOL g_extract = CK_FALSE; CK_BBOOL g_sensitive = CK_FALSE; CK_BBOOL g_nextract = CK_FALSE; CK_BBOOL g_asensitive = CK_FALSE; CK_BBOOL g_local = CK_FALSE; CK_BYTE g_value[16] = { }; CK_ATTRIBUTE get_template[] = { { CKA_TOKEN, &g_token, sizeof(g_token) }, { CKA_PRIVATE, &g_private, sizeof(g_private) }, { CKA_MODIFIABLE, &g_modify, sizeof(g_modify) }, { CKA_COPYABLE, &g_copy, sizeof(g_copy) }, { CKA_DESTROYABLE, &g_destroy, sizeof(g_destroy) }, { CKA_EXTRACTABLE, &g_extract, sizeof(g_extract) }, { CKA_SENSITIVE, &g_sensitive, sizeof(g_sensitive) }, { CKA_NEVER_EXTRACTABLE, &g_nextract, sizeof(g_nextract) }, { CKA_ALWAYS_SENSITIVE, &g_asensitive, sizeof(g_asensitive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, }; CK_ATTRIBUTE get_value_template[] = { { CKA_VALUE, &g_value, sizeof(g_value) } }; CK_ATTRIBUTE copy_template[] = { { CKA_TOKEN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_MODIFIABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE copy_template_inv[] = { { CKA_APPLICATION, (CK_UTF8CHAR_PTR)label, sizeof(label) }, }; CK_ATTRIBUTE copy_template_priv[] = { { CKA_PRIVATE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE set_template[] = { { CKA_COPYABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, }; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Open a RW session */ rv = C_OpenSession(slot, rw_session_flags, NULL, 0, &rw_session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Open a RO session */ rv = C_OpenSession(slot, ro_session_flags, NULL, 0, &ro_session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; /* * All objects in this test are session objects hence released at * session closure on test completion. */ /* Generate a secret key object in rw session */ rv = C_GenerateKey(rw_session, &cktest_aes_keygen_mechanism, secret_key_template, ARRAY_SIZE(secret_key_template), &obj_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; /* Check its attribute values */ rv = C_GetAttributeValue(rw_session, obj_hdl, get_template, ARRAY_SIZE(get_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_private, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_modify, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_copy, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_destroy, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE)) goto close_session; /* Check that we can get (secret) CKA_VALUE */ get_value_template[0].ulValueLen = sizeof(g_value); rv = C_GetAttributeValue(rw_session, obj_hdl, get_value_template, ARRAY_SIZE(get_value_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, get_value_template[0].ulValueLen, ==, sizeof(g_value))) goto close_session; /* Create a secret key object in ro session*/ rv = C_CreateObject(ro_session, secret_key_create_template, ARRAY_SIZE(secret_key_create_template), &obj_hdl_ro); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; /* * Duplicate the object generated in RW session using C_GenerateKey() to * another object. Pass Template as NULL and test the attributes of * new created object. */ Do_ADBG_BeginSubCase(c, "Copy Local Obj with NULL Template"); rv = C_CopyObject(rw_session, obj_hdl, NULL, 0, &obj_hdl_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Check its attribute values, should match the original object. * CKA_LOCAL shall be TRUE even in copied object as original object * was generated using C_GenerateKey() */ rv = C_GetAttributeValue(rw_session, obj_hdl_cp, get_template, ARRAY_SIZE(get_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_private, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_modify, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_copy, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_destroy, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE)) goto out; rv = C_DestroyObject(rw_session, obj_hdl_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; obj_hdl_cp = CK_INVALID_HANDLE; Do_ADBG_EndSubCase(c, NULL); /* * Duplicate the object generated in RO session using C_CreateObject() * to another object. Pass Template as NULL and test the attributes of * new created object. */ Do_ADBG_BeginSubCase(c, "Copy a non-local object with NULL Template"); /* Copy ro session object */ rv = C_CopyObject(ro_session, obj_hdl_ro, NULL, 0, &obj_hdl_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Check its attribute values, should match the original object. * CKA_LOCAL shall be FALSE even in copied object as original object * was generated using C_CreateObject() */ rv = C_GetAttributeValue(ro_session, obj_hdl_cp, get_template, ARRAY_SIZE(get_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_private, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_modify, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_copy, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_destroy, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE)) goto out; rv = C_DestroyObject(ro_session, obj_hdl_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; obj_hdl_cp = CK_INVALID_HANDLE; Do_ADBG_EndSubCase(c, NULL); /* * Test copying object with a valid template and check if attributes * get modified as indicated in the template. Checks modification of * attributes like CKA_TOKEN, CKA_MODIFIABLE which were not modifiable * via C_SetAttributeValue(). Also modifies the CKA_SENSITIVE, * CKA_EXTRACTABLE and checks corresponding values of RO attributes * CKA_ALWAYS_SENSITIVE and CKA_NEVER_EXTRACTABLE. */ Do_ADBG_BeginSubCase(c, "Copy Object with Valid Template"); /* * Copy Session Object as a Token object * Properties CKA_MODIFIABLE turned to FALSE * CKA_EXTRACTABLE changed from TRUE to FALSE * CKA_NEVER_EXTRACTABLE should be FALSE. * CKA_SENSITIVE set to TRUE * However CKA_ALWAYS_SENSITIVE should be FALSE */ rv = C_CopyObject(rw_session, obj_hdl, copy_template, ARRAY_SIZE(copy_template), &obj_hdl_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Check the changed attribute values */ rv = C_GetAttributeValue(rw_session, obj_hdl_cp, get_template, ARRAY_SIZE(get_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_modify, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE)) goto out; /* Check that we cannot anymore get (secret) CKA_VALUE */ get_value_template[0].ulValueLen = sizeof(g_value); rv = C_GetAttributeValue(rw_session, obj_hdl_cp, get_value_template, ARRAY_SIZE(get_value_template)); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_SENSITIVE, rv) || !(get_value_template[0].ulValueLen == CK_UNAVAILABLE_INFORMATION)) goto close_session; /* * The copied object has CKA_MODIFIABLE set to FALSE. Check if * call to C_SetAttributeValue() returns CKR_ACTION_PROHIBITED */ rv = C_SetAttributeValue(rw_session, obj_hdl_cp, set_template, ARRAY_SIZE(set_template)); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ACTION_PROHIBITED, rv)) goto out; rv = C_DestroyObject(rw_session, obj_hdl_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; obj_hdl_cp = CK_INVALID_HANDLE; Do_ADBG_EndSubCase(c, NULL); /* * Test changing the CKA_PRIVATE to TRUE when copying object. * Fails when user is not logged in. Passes after user logs in */ Do_ADBG_BeginSubCase(c, "Copy Object as a Private Object"); /* The first attempt will fail as user is not logged in */ rv = C_CopyObject(rw_session, obj_hdl, copy_template_priv, ARRAY_SIZE(copy_template_priv), &obj_hdl_cp); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto out; /* Login to Test Token and repeat*/ rv = C_Login(rw_session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Try copying a public object to a private object - should pass */ rv = C_CopyObject(rw_session, obj_hdl, copy_template_priv, ARRAY_SIZE(copy_template_priv), &obj_hdl_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) { ADBG_EXPECT_CK_OK(c, C_Logout(rw_session)); goto out; } if (!ADBG_EXPECT_CK_OK(c, C_Logout(rw_session))) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Copy Object with Invalid Template"); rv = C_CopyObject(rw_session, obj_hdl, copy_template_inv, ARRAY_SIZE(copy_template_inv), &obj_hdl_cp); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_TYPE_INVALID, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Copy Object with COPYABLE false"); rv = C_SetAttributeValue(rw_session, obj_hdl, set_template, ARRAY_SIZE(set_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_CopyObject(rw_session, obj_hdl, copy_template, ARRAY_SIZE(copy_template), &obj_hdl_cp); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ACTION_PROHIBITED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Copy session object to token in RO session"); rv = C_CopyObject(ro_session, obj_hdl_ro, copy_template, ARRAY_SIZE(copy_template), &obj_hdl_cp); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SESSION_READ_ONLY, rv)) goto out; out: Do_ADBG_EndSubCase(c, NULL); /* Destroy any token objects which may have been created */ destroy_persistent_objects(c, slot); close_session: /* Closing session will also destroy all session objects */ if (ro_session != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_CloseSession(ro_session)); ADBG_EXPECT_CK_OK(c, C_CloseSession(rw_session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1015, xtest_pkcs11_test_1015, "PKCS11: Test C_CopyObject()"); static void xtest_pkcs11_test_1016(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; uint8_t buffer[64] = { 0 }; size_t i = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; Do_ADBG_BeginSubCase(c, "Seed random bytes"); memset(buffer, 0xCC, sizeof(buffer)); rv = C_SeedRandom(session, buffer, sizeof(buffer)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Seed random bytes with zero length buffer"); rv = C_SeedRandom(session, buffer, 0); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_SeedRandom(session, NULL, 0); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Generate random bytes"); memset(buffer, 0xCC, sizeof(buffer)); rv = C_GenerateRandom(session, buffer, 61); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Verify that end of buffer is still 0xCC */ for (i = 61; i < sizeof(buffer); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, buffer[i], ==, 0xCC)) break; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Generate random bytes with zero length buffer"); memset(buffer, 0xCC, sizeof(buffer)); rv = C_GenerateRandom(session, buffer, 0); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Verify that whole buffer is still 0xCC */ for (i = 0; i < sizeof(buffer); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, buffer[i], ==, 0xCC)) break; rv = C_GenerateRandom(session, NULL, 0); ADBG_EXPECT_CK_OK(c, rv); out: Do_ADBG_EndSubCase(c, NULL); ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1016, xtest_pkcs11_test_1016, "PKCS11: Random number generator tests"); static CK_RV derive_sym_key(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE parent_key, CK_MECHANISM_TYPE mechanism, size_t data_len, CK_OBJECT_HANDLE_PTR derv_key_hdl, size_t key_len, CK_OBJECT_CLASS key_class, CK_KEY_TYPE key_type, CK_BBOOL sensitive, CK_BBOOL extble) { CK_RV rv = CKR_GENERAL_ERROR; uint8_t buffer[512] = { 0 }; uint8_t iv[16] = { 0 }; CK_MECHANISM mech_derive = { 0 }; CK_KEY_DERIVATION_STRING_DATA key_derv_param = { 0 }; CK_AES_CBC_ENCRYPT_DATA_PARAMS aes_cbc_param = { }; CK_ATTRIBUTE derived_key_template[] = { { CKA_CLASS, &key_class, sizeof(key_class) }, { CKA_KEY_TYPE, &key_type, sizeof(key_type) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &sensitive, sizeof(sensitive) }, { CKA_EXTRACTABLE, &extble, sizeof(extble) }, { CKA_VALUE_LEN, &key_len, sizeof(key_len) } }; if (data_len > sizeof(buffer)) return rv; switch (mechanism) { case CKM_AES_ECB_ENCRYPT_DATA: key_derv_param.pData = buffer; key_derv_param.ulLen = data_len; mech_derive.mechanism = mechanism; mech_derive.pParameter = &key_derv_param; mech_derive.ulParameterLen = sizeof(key_derv_param); break; case CKM_AES_CBC_ENCRYPT_DATA: memcpy(aes_cbc_param.iv, iv, 16); aes_cbc_param.pData = buffer; aes_cbc_param.length = data_len; mech_derive.mechanism = mechanism; mech_derive.pParameter = &aes_cbc_param; mech_derive.ulParameterLen = sizeof(aes_cbc_param); break; case CKM_AES_ECB: /* Not a derivation algorithm */ mech_derive.mechanism = mechanism; mech_derive.pParameter = NULL; mech_derive.ulParameterLen = 0; break; default: return rv; } /* Don't use VALUE_LEN parameter if key_len passed is 0 */ if (key_len) rv = C_DeriveKey(session, &mech_derive, parent_key, derived_key_template, ARRAY_SIZE(derived_key_template), derv_key_hdl); else /* last attribute in template is the derived key size */ rv = C_DeriveKey(session, &mech_derive, parent_key, derived_key_template, ARRAY_SIZE(derived_key_template) - 1, derv_key_hdl); return rv; } static void xtest_pkcs11_test_1017(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE derv_key_hdl = CK_INVALID_HANDLE; CK_OBJECT_HANDLE aes_key1 = CK_INVALID_HANDLE; CK_OBJECT_HANDLE aes_key2 = CK_INVALID_HANDLE; CK_OBJECT_HANDLE aes_key_enc = CK_INVALID_HANDLE; size_t data_len = 0; size_t key_len = 0; CK_BBOOL g_extract = CK_FALSE; CK_BBOOL g_sensitive = CK_FALSE; CK_BBOOL g_nextract = CK_FALSE; CK_BBOOL g_asensitive = CK_FALSE; CK_BBOOL g_local = CK_FALSE; CK_OBJECT_CLASS g_class = CKO_VENDOR_DEFINED; CK_KEY_TYPE g_key_type = CKK_VENDOR_DEFINED; uint8_t g_val[516] = { 0 }; CK_ULONG secret_len = 0; CK_ATTRIBUTE get_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_EXTRACTABLE, &g_extract, sizeof(g_extract) }, { CKA_SENSITIVE, &g_sensitive, sizeof(g_sensitive) }, { CKA_NEVER_EXTRACTABLE, &g_nextract, sizeof(g_nextract) }, { CKA_ALWAYS_SENSITIVE, &g_asensitive, sizeof(g_asensitive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_VALUE_LEN, &secret_len, sizeof(secret_len) }, /* * CKA_VALUE should remain last attribute in template, * in this test case as we check the length returned * from last index of the get_template in this test. */ { CKA_VALUE, g_val, sizeof(g_val) }, }; uint32_t idx = ARRAY_SIZE(get_template) - 1; CK_ATTRIBUTE parent_template1[] = { { CKA_SENSITIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, { CKA_DERIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE parent_template2[] = { { CKA_SENSITIVE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DERIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE parent_template_wo_derive[] = { { CKA_SENSITIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, }; CK_ATTRIBUTE parent_template_w_enc_der[] = { { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_DERIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, }; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* * Parent AES Key 1 * SENSITIVE = TRUE, EXTRACTABLE = FALSE * ALWAYS_SENSITIVE = TRUE, NEVER_EXTRACTABLE = TRUE */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, parent_template1, ARRAY_SIZE(parent_template1), &aes_key1); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; /* * Parent AES Key 2 * SENSITIVE = FALSE, EXTRACTABLE = TRUE * ALWAYS_SENSITIVE = FALSE, NEVER_EXTRACTABLE = FALSE */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, parent_template2, ARRAY_SIZE(parent_template2), &aes_key2); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; Do_ADBG_BeginSubCase(c, "Derive Generic secret - AES-ECB Mechanism"); /* * Use AES key 1 as Parent key * 1. VALUE_LEN attribute not given in derivation template. Length * of key should be same as that of data length. * 2. Derivation template has SENSITIVE = TRUE, EXTRACTABLE = FALSE * Parent key has ALWAYS_SENSITIVE = TRUE, NEVER_EXTRACTABLE = TRUE * So derived key, ALWAYS_SENSITIVE will be same as SENSITIVE and * NEVER_EXTRACTABLE will be opposite of EXTRACTABLE * 3. LOCAL should be false */ data_len = 512; key_len = 0; rv = derive_sym_key(session, aes_key1, CKM_AES_ECB_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_GENERIC_SECRET, CK_TRUE, CK_FALSE); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetAttributeValue(session, derv_key_hdl, get_template, ARRAY_SIZE(get_template) - 1); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, secret_len, ==, data_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_SECRET_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_GENERIC_SECRET) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_TRUE)) goto out; rv = C_DestroyObject(session, derv_key_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Derive AES key using AES-EBC"); /* * Use AES key 2 as Parent key * 1. VALUE_LEN < DATA_LEN, Derived key should have VALUE_LEN key size * 2. Derivation template has SENSITIVE = TRUE, EXTRACTABLE = FALSE * Parent key has ALWAYS_SENSITIVE = FALSE, NEVER_EXTRACTABLE = FALSE * So derived key, ALWAYS_SENSITIVE will be FALSE and * NEVER_EXTRACTABLE will be FALSE * 3. LOCAL should be false */ data_len = 32; key_len = 16; rv = derive_sym_key(session, aes_key2, CKM_AES_ECB_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_AES, CK_TRUE, CK_FALSE); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* This being a SENSITIVE object, we can't get the VALUE */ rv = C_GetAttributeValue(session, derv_key_hdl, get_template, ARRAY_SIZE(get_template) - 1); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, secret_len, ==, key_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_SECRET_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_AES) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE)) goto out; rv = C_DestroyObject(session, derv_key_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Derive AES key using AES-CBC"); /* * Use AES key 1 as Parent key * 1. VALUE_LEN = DATA_LEN, Derived key should have VALUE_LEN key size * 2. Derivation template has SENSITIVE = FALSE, EXTRACTABLE = FALSE * Parent key has ALWAYS_SENSITIVE = TRUE, NEVER_EXTRACTABLE = TRUE * So derived key, ALWAYS_SENSITIVE will be same as SENSITIVE and * NEVER_EXTRACTABLE will be opposite of EXTRACTABLE * 3. LOCAL should be false */ data_len = 32; key_len = 32; rv = derive_sym_key(session, aes_key1, CKM_AES_CBC_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_AES, CK_FALSE, CK_FALSE); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetAttributeValue(session, derv_key_hdl, get_template, ARRAY_SIZE(get_template) - 1); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, secret_len, ==, key_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_SECRET_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_AES) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_TRUE)) goto out; rv = C_DestroyObject(session, derv_key_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Derive Generic secret key using AES-CBC"); /* * Use AES key 2 as Parent key * 1. VALUE_LEN < DATA_LEN, Derived key should have VALUE_LEN key size * 2. Derivation template has SENSITIVE = FALSE, EXTRACTABLE = TRUE * Parent key has ALWAYS_SENSITIVE = TRUE, NEVER_EXTRACTABLE = TRUE * So derived key, ALWAYS_SENSITIVE will be same as SENSITIVE and * NEVER_EXTRACTABLE will be opposite of EXTRACTABLE * 3. LOCAL should be false */ data_len = 512; key_len = 256; rv = derive_sym_key(session, aes_key2, CKM_AES_CBC_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_GENERIC_SECRET, CK_FALSE, CK_TRUE); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetAttributeValue(session, derv_key_hdl, get_template, ARRAY_SIZE(get_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, get_template[idx].ulValueLen, ==, key_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, secret_len, ==, key_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_SECRET_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_GENERIC_SECRET) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE)) goto out; rv = C_DestroyObject(session, derv_key_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Invalid parameters during derivation"); /* Length of data used for derivation < key length */ data_len = 16; key_len = 32; rv = derive_sym_key(session, aes_key1, CKM_AES_ECB_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_AES, CK_FALSE, CK_TRUE); if (!ADBG_EXPECT_CK_RESULT(c, CKR_DATA_LEN_RANGE, rv)) goto out; /* Data is not multiple of 16 */ data_len = 18; key_len = 32; rv = derive_sym_key(session, aes_key1, CKM_AES_ECB_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_AES, CK_FALSE, CK_TRUE); if (!ADBG_EXPECT_CK_RESULT(c, CKR_DATA_LEN_RANGE, rv)) goto out; /* Wrong Mechanism */ rv = derive_sym_key(session, aes_key1, CKM_AES_ECB, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_AES, CK_FALSE, CK_TRUE); if (!ADBG_EXPECT_CK_RESULT(c, CKR_MECHANISM_INVALID, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Failure if operation already active"); /* Generate an AES key which can perform Encryption */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, parent_template_w_enc_der, ARRAY_SIZE(parent_template_w_enc_der), &aes_key_enc); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_EncryptInit(session, &cktest_aes_cbc_mechanism, aes_key_enc); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Initializing the encryption operation again should not alter or * terminate already started operation. */ rv = C_EncryptInit(session, &cktest_aes_cbc_mechanism, aes_key_enc); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_ACTIVE, rv)) goto out; data_len = 32; key_len = 32; rv = derive_sym_key(session, aes_key2, CKM_AES_ECB_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_AES, CK_FALSE, CK_TRUE); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_ACTIVE, rv)) goto out; rv = C_EncryptFinal(session, NULL, NULL); /* Only check that the operation is no more active */ if (!ADBG_EXPECT_TRUE(c, rv != CKR_BUFFER_TOO_SMALL)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Failure if parent key CKA_ENCRYPT is TRUE"); data_len = 32; key_len = 32; rv = derive_sym_key(session, aes_key_enc, CKM_AES_ECB_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_AES, CK_FALSE, CK_TRUE); /* * Not strictly expecting FUNCTION_FAILED but expecting a failure * as we have added a restriction that keys with attribute CKA_ENCRYPT * set can't be used for derivation. */ if (!ADBG_EXPECT_CK_RESULT(c, CKR_FUNCTION_FAILED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Failure if parent key CKA_DERIVE is FALSE"); rv = C_DestroyObject(session, aes_key1); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, parent_template_wo_derive, ARRAY_SIZE(parent_template_wo_derive), &aes_key1); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; data_len = 32; key_len = 32; rv = derive_sym_key(session, aes_key1, CKM_AES_ECB_ENCRYPT_DATA, data_len, &derv_key_hdl, key_len, CKO_SECRET_KEY, CKK_AES, CK_FALSE, CK_TRUE); if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_TYPE_INCONSISTENT, rv)) goto out; out: Do_ADBG_EndSubCase(c, NULL); close_session: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1017, xtest_pkcs11_test_1017, "PKCS11: AES Key Derivation tests"); /* Digest test patterns */ static const char digest_test_pattern[] = "The quick brown fox jumps over the lazy dog"; static const char digest_test_pattern_empty[] = ""; /* MD5 checksums for digest test patterns */ static const uint8_t digest_test_pattern_md5[] = { 0x9e, 0x10, 0x7d, 0x9d, 0x37, 0x2b, 0xb6, 0x82, 0x6b, 0xd8, 0x1d, 0x35, 0x42, 0xa4, 0x19, 0xd6 }; static const uint8_t digest_test_pattern_empty_md5[] = { 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e }; /* SHA-1 checksums for digest test patterns */ static const uint8_t digest_test_pattern_sha1[] = { 0x2f, 0xd4, 0xe1, 0xc6, 0x7a, 0x2d, 0x28, 0xfc, 0xed, 0x84, 0x9e, 0xe1, 0xbb, 0x76, 0xe7, 0x39, 0x1b, 0x93, 0xeb, 0x12 }; static const uint8_t digest_test_pattern_empty_sha1[] = { 0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d, 0x32, 0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90, 0xaf, 0xd8, 0x07, 0x09 }; /* SHA-224 checksums for digest test patterns */ static const uint8_t digest_test_pattern_sha224[] = { 0x73, 0x0e, 0x10, 0x9b, 0xd7, 0xa8, 0xa3, 0x2b, 0x1c, 0xb9, 0xd9, 0xa0, 0x9a, 0xa2, 0x32, 0x5d, 0x24, 0x30, 0x58, 0x7d, 0xdb, 0xc0, 0xc3, 0x8b, 0xad, 0x91, 0x15, 0x25 }; static const uint8_t digest_test_pattern_empty_sha224[] = { 0xd1, 0x4a, 0x02, 0x8c, 0x2a, 0x3a, 0x2b, 0xc9, 0x47, 0x61, 0x02, 0xbb, 0x28, 0x82, 0x34, 0xc4, 0x15, 0xa2, 0xb0, 0x1f, 0x82, 0x8e, 0xa6, 0x2a, 0xc5, 0xb3, 0xe4, 0x2f }; /* SHA-256 checksums for digest test patterns */ static const uint8_t digest_test_pattern_sha256[] = { 0xd7, 0xa8, 0xfb, 0xb3, 0x07, 0xd7, 0x80, 0x94, 0x69, 0xca, 0x9a, 0xbc, 0xb0, 0x08, 0x2e, 0x4f, 0x8d, 0x56, 0x51, 0xe4, 0x6d, 0x3c, 0xdb, 0x76, 0x2d, 0x02, 0xd0, 0xbf, 0x37, 0xc9, 0xe5, 0x92 }; static const uint8_t digest_test_pattern_empty_sha256[] = { 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55 }; /* SHA-384 checksums for digest test patterns */ static const uint8_t digest_test_pattern_sha384[] = { 0xca, 0x73, 0x7f, 0x10, 0x14, 0xa4, 0x8f, 0x4c, 0x0b, 0x6d, 0xd4, 0x3c, 0xb1, 0x77, 0xb0, 0xaf, 0xd9, 0xe5, 0x16, 0x93, 0x67, 0x54, 0x4c, 0x49, 0x40, 0x11, 0xe3, 0x31, 0x7d, 0xbf, 0x9a, 0x50, 0x9c, 0xb1, 0xe5, 0xdc, 0x1e, 0x85, 0xa9, 0x41, 0xbb, 0xee, 0x3d, 0x7f, 0x2a, 0xfb, 0xc9, 0xb1 }; static const uint8_t digest_test_pattern_empty_sha384[] = { 0x38, 0xb0, 0x60, 0xa7, 0x51, 0xac, 0x96, 0x38, 0x4c, 0xd9, 0x32, 0x7e, 0xb1, 0xb1, 0xe3, 0x6a, 0x21, 0xfd, 0xb7, 0x11, 0x14, 0xbe, 0x07, 0x43, 0x4c, 0x0c, 0xc7, 0xbf, 0x63, 0xf6, 0xe1, 0xda, 0x27, 0x4e, 0xde, 0xbf, 0xe7, 0x6f, 0x65, 0xfb, 0xd5, 0x1a, 0xd2, 0xf1, 0x48, 0x98, 0xb9, 0x5b }; /* SHA-512 checksums for digest test patterns */ static const uint8_t digest_test_pattern_sha512[] = { 0x07, 0xe5, 0x47, 0xd9, 0x58, 0x6f, 0x6a, 0x73, 0xf7, 0x3f, 0xba, 0xc0, 0x43, 0x5e, 0xd7, 0x69, 0x51, 0x21, 0x8f, 0xb7, 0xd0, 0xc8, 0xd7, 0x88, 0xa3, 0x09, 0xd7, 0x85, 0x43, 0x6b, 0xbb, 0x64, 0x2e, 0x93, 0xa2, 0x52, 0xa9, 0x54, 0xf2, 0x39, 0x12, 0x54, 0x7d, 0x1e, 0x8a, 0x3b, 0x5e, 0xd6, 0xe1, 0xbf, 0xd7, 0x09, 0x78, 0x21, 0x23, 0x3f, 0xa0, 0x53, 0x8f, 0x3d, 0xb8, 0x54, 0xfe, 0xe6 }; static const uint8_t digest_test_pattern_empty_sha512[] = { 0xcf, 0x83, 0xe1, 0x35, 0x7e, 0xef, 0xb8, 0xbd, 0xf1, 0x54, 0x28, 0x50, 0xd6, 0x6d, 0x80, 0x07, 0xd6, 0x20, 0xe4, 0x05, 0x0b, 0x57, 0x15, 0xdc, 0x83, 0xf4, 0xa9, 0x21, 0xd3, 0x6c, 0xe9, 0xce, 0x47, 0xd0, 0xd1, 0x3c, 0x5d, 0x85, 0xf2, 0xb0, 0xff, 0x83, 0x18, 0xd2, 0x87, 0x7e, 0xec, 0x2f, 0x63, 0xb9, 0x31, 0xbd, 0x47, 0x41, 0x7a, 0x81, 0xa5, 0x38, 0x32, 0x7a, 0xf9, 0x27, 0xda, 0x3e }; #define DIGEST_TEST(_test_name, _mecha, _data, _digest) \ { \ .test_name = _test_name, \ .mecha = _mecha, \ .data = _data, \ .data_size = sizeof(_data) - 1, \ .digest = _digest, \ .digest_size = sizeof(_digest) \ } /* Digest simple test suite */ static struct { const char *test_name; CK_MECHANISM_TYPE mecha; const void *data; CK_ULONG data_size; const uint8_t *digest; CK_ULONG digest_size; } digest_test_patterns[] = { DIGEST_TEST("CKM_MD5/empty", CKM_MD5, digest_test_pattern_empty, digest_test_pattern_empty_md5), DIGEST_TEST("CKM_MD5/test pattern", CKM_MD5, digest_test_pattern, digest_test_pattern_md5), DIGEST_TEST("CKM_SHA_1/empty", CKM_SHA_1, digest_test_pattern_empty, digest_test_pattern_empty_sha1), DIGEST_TEST("CKM_SHA_1/test pattern", CKM_SHA_1, digest_test_pattern, digest_test_pattern_sha1), DIGEST_TEST("CKM_SHA224/empty", CKM_SHA224, digest_test_pattern_empty, digest_test_pattern_empty_sha224), DIGEST_TEST("CKM_SHA224/test pattern", CKM_SHA224, digest_test_pattern, digest_test_pattern_sha224), DIGEST_TEST("CKM_SHA256/empty", CKM_SHA256, digest_test_pattern_empty, digest_test_pattern_empty_sha256), DIGEST_TEST("CKM_SHA256/test pattern", CKM_SHA256, digest_test_pattern, digest_test_pattern_sha256), DIGEST_TEST("CKM_SHA384/empty", CKM_SHA384, digest_test_pattern_empty, digest_test_pattern_empty_sha384), DIGEST_TEST("CKM_SHA384/test pattern", CKM_SHA384, digest_test_pattern, digest_test_pattern_sha384), DIGEST_TEST("CKM_SHA512/empty", CKM_SHA512, digest_test_pattern_empty, digest_test_pattern_empty_sha512), DIGEST_TEST("CKM_SHA512/test pattern", CKM_SHA512, digest_test_pattern, digest_test_pattern_sha512), }; static CK_ATTRIBUTE digest_generate_aes_object[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_AES }, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, }; static CK_ATTRIBUTE digest_generate_gensecret_object[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_GENERIC_SECRET }, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){ 32 }, sizeof(CK_ULONG) }, }; static CK_ATTRIBUTE digest_data_object[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_DATA }, sizeof(CK_OBJECT_CLASS) }, { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, }; static void xtest_pkcs11_test_1018(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; bool logged_in = false; uint8_t data[128] = { 0 }; CK_ULONG data_size = 0; uint8_t digest[64] = { 0 }; CK_ULONG digest_size = 0; const uint8_t *expect_digest = NULL; CK_ULONG expect_digest_size = 0; CK_MECHANISM mechanism = { CKM_MD5, NULL, 0 }; uint8_t secret_data[128] = { 0 }; CK_ULONG secret_data_size __maybe_unused = 0; CK_ATTRIBUTE digest_get_secret_value[] = { { CKA_VALUE, &secret_data, sizeof(secret_data) }, }; CK_OBJECT_HANDLE key_handle = CK_INVALID_HANDLE; #ifdef OPENSSL_FOUND EVP_MD_CTX *mdctx = NULL; unsigned char hash[EVP_MAX_MD_SIZE] = { 0 }; unsigned int md_len = 0; int ret = 0; #endif size_t i = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Test out simple successful cases with init+update+final*/ for (i = 0; i < ARRAY_SIZE(digest_test_patterns); i++) { Do_ADBG_BeginSubCase(c, "Simple digest tests - update - %s", digest_test_patterns[i].test_name); mechanism.mechanism = digest_test_patterns[i].mecha; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[i].data, digest_test_patterns[i].data_size); data_size = digest_test_patterns[i].data_size; expect_digest = digest_test_patterns[i].digest; expect_digest_size = digest_test_patterns[i].digest_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestUpdate(session, data, data_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestFinal(session, digest, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_BUFFER(c, expect_digest, expect_digest_size, digest, digest_size)) goto out; /* Verify that end of buffer is still 0xCC */ for (i = expect_digest_size; i < sizeof(digest); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, digest[i], ==, 0xCC)) goto out; Do_ADBG_EndSubCase(c, NULL); } /* Test out simple successful cases */ for (i = 0; i < ARRAY_SIZE(digest_test_patterns); i++) { Do_ADBG_BeginSubCase(c, "Simple digest tests - oneshot - %s", digest_test_patterns[i].test_name); mechanism.mechanism = digest_test_patterns[i].mecha; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[i].data, digest_test_patterns[i].data_size); data_size = digest_test_patterns[i].data_size; expect_digest = digest_test_patterns[i].digest; expect_digest_size = digest_test_patterns[i].digest_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Digest(session, data, data_size, digest, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_BUFFER(c, expect_digest, expect_digest_size, digest, digest_size)) goto out; /* Verify that end of buffer is still 0xCC */ for (i = expect_digest_size; i < sizeof(digest); i++) if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, digest[i], ==, 0xCC)) goto out; Do_ADBG_EndSubCase(c, NULL); } /* Test out key updates */ Do_ADBG_BeginSubCase(c, "Simple digest tests - AES key update - SHA-256"); /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; logged_in = true; /* Generate AES key */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, digest_generate_aes_object, ARRAY_SIZE(digest_generate_aes_object), &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; memset(secret_data, 0xCC, sizeof(data)); digest_get_secret_value[0].ulValueLen = sizeof(secret_data); /* Get value of generated secret for verification purposes */ rv = C_GetAttributeValue(session, key_handle, digest_get_secret_value, ARRAY_SIZE(digest_get_secret_value)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; secret_data_size = digest_get_secret_value[0].ulValueLen; /* Calculate digest with PKCS11 */ mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestUpdate(session, data, data_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestKey(session, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestFinal(session, digest, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Verify digest with openssl */ #ifdef OPENSSL_FOUND mdctx = EVP_MD_CTX_create(); if (!ADBG_EXPECT_NOT_NULL(c, mdctx)) goto out; ret = EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL); if (!ADBG_EXPECT_COMPARE_SIGNED(c, ret, ==, 1)) goto out; ret = EVP_DigestUpdate(mdctx, data, data_size); if (!ADBG_EXPECT_COMPARE_SIGNED(c, ret, ==, 1)) goto out; ret = EVP_DigestUpdate(mdctx, secret_data, secret_data_size); if (!ADBG_EXPECT_COMPARE_SIGNED(c, ret, ==, 1)) goto out; ret = EVP_DigestFinal_ex(mdctx, hash, &md_len); if (!ADBG_EXPECT_COMPARE_SIGNED(c, ret, ==, 1)) goto out; EVP_MD_CTX_destroy(mdctx); mdctx = NULL; if (!ADBG_EXPECT_BUFFER(c, hash, md_len, digest, digest_size)) goto out; #else Do_ADBG_Log("OpenSSL not available, skipping C_DigestKey verification"); #endif ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); key_handle = CK_INVALID_HANDLE; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Simple digest tests - generic secret key update - SHA-256"); /* Generate generic secret key */ rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, digest_generate_gensecret_object, ARRAY_SIZE(digest_generate_gensecret_object), &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; memset(secret_data, 0xCC, sizeof(data)); digest_get_secret_value[0].ulValueLen = sizeof(secret_data); /* Get value of generated secret for verification purposes */ rv = C_GetAttributeValue(session, key_handle, digest_get_secret_value, ARRAY_SIZE(digest_get_secret_value)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; secret_data_size = digest_get_secret_value[0].ulValueLen; /* Calculate digest with PKCS11 */ mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestUpdate(session, data, data_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestKey(session, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestFinal(session, digest, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Verify digest with openssl */ #ifdef OPENSSL_FOUND mdctx = EVP_MD_CTX_create(); if (!ADBG_EXPECT_NOT_NULL(c, mdctx)) goto out; ret = EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL); if (!ADBG_EXPECT_COMPARE_SIGNED(c, ret, ==, 1)) goto out; ret = EVP_DigestUpdate(mdctx, data, data_size); if (!ADBG_EXPECT_COMPARE_SIGNED(c, ret, ==, 1)) goto out; ret = EVP_DigestUpdate(mdctx, secret_data, secret_data_size); if (!ADBG_EXPECT_COMPARE_SIGNED(c, ret, ==, 1)) goto out; ret = EVP_DigestFinal_ex(mdctx, hash, &md_len); if (!ADBG_EXPECT_COMPARE_SIGNED(c, ret, ==, 1)) goto out; EVP_MD_CTX_destroy(mdctx); mdctx = NULL; if (!ADBG_EXPECT_BUFFER(c, hash, md_len, digest, digest_size)) goto out; #else Do_ADBG_Log("OpenSSL not available, skipping C_DigestKey verification"); #endif ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); key_handle = CK_INVALID_HANDLE; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Query digest size - C_DigestFinal"); mechanism.mechanism = digest_test_patterns[0].mecha; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = 0; memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; expect_digest = digest_test_patterns[0].digest; expect_digest_size = digest_test_patterns[0].digest_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestUpdate(session, data, data_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestFinal(session, NULL, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, digest_size, ==, expect_digest_size)) goto out; rv = C_DigestFinal(session, digest, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_BUFFER(c, expect_digest, expect_digest_size, digest, digest_size)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Query digest size - C_Digest"); mechanism.mechanism = digest_test_patterns[0].mecha; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = 0; memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; expect_digest = digest_test_patterns[0].digest; expect_digest_size = digest_test_patterns[0].digest_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Digest(session, data, data_size, NULL, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, digest_size, ==, expect_digest_size)) goto out; rv = C_Digest(session, data, data_size, digest, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_BUFFER(c, expect_digest, expect_digest_size, digest, digest_size)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Query digest size - buffer too small"); mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = 0; memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestUpdate(session, data, data_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestFinal(session, digest, &digest_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, digest_size, ==, 32)) goto out; rv = C_DigestFinal(session, digest, &digest_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); /* Test bad arguments & operation terminations */ Do_ADBG_BeginSubCase(c, "Test bad arguments - C_DigestUpdate"); mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestUpdate(session, NULL, 10); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) goto out; rv = C_DigestUpdate(session, data, data_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test bad arguments - C_DigestFinal with NULL digest"); mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestUpdate(session, data, data_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestFinal(session, NULL, NULL); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) goto out; rv = C_DigestFinal(session, digest, &digest_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test bad arguments - C_DigestFinal with digest but NULL size"); mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestUpdate(session, data, data_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestFinal(session, digest, NULL); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) goto out; rv = C_DigestFinal(session, digest, &digest_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test bad arguments - C_Digest with NULL data but non-zero size"); mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Digest(session, NULL, 10, digest, &digest_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) goto out; rv = C_Digest(session, data, data_size, digest, &digest_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test bad arguments - C_Digest with NULL digest"); mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Digest(session, data, data_size, NULL, NULL); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) goto out; rv = C_Digest(session, data, data_size, digest, &digest_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test bad arguments - C_DigestFinal with digest but NULL size"); mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_Digest(session, data, data_size, digest, NULL); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) goto out; rv = C_Digest(session, data, data_size, digest, &digest_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test bad arguments - C_DigestKey with invalid key handle"); rv = C_CreateObject(session, digest_data_object, ARRAY_SIZE(digest_data_object), &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestKey(session, 9999); if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_HANDLE_INVALID, rv)) goto out; rv = C_DigestKey(session, key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test bad arguments - C_DigestKey with non-secret key type"); mechanism.mechanism = CKM_SHA256; memset(data, 0xCC, sizeof(data)); memset(digest, 0xCC, sizeof(digest)); digest_size = sizeof(digest); memcpy(data, digest_test_patterns[0].data, digest_test_patterns[0].data_size); data_size = digest_test_patterns[0].data_size; rv = C_DigestInit(session, &mechanism); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DigestKey(session, key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_INDIGESTIBLE, rv)) goto out; rv = C_DigestKey(session, key_handle); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_NOT_INITIALIZED, rv)) goto out; ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); key_handle = CK_INVALID_HANDLE; out: #ifdef OPENSSL_FOUND if (!ADBG_EXPECT_POINTER(c, NULL, mdctx)) { Do_ADBG_Log("Unexpected failure in openssl functions: %d", ret); EVP_MD_CTX_destroy(mdctx); } #endif Do_ADBG_EndSubCase(c, NULL); if (logged_in) ADBG_EXPECT_CK_OK(c, C_Logout(session)); if (key_handle != CK_INVALID_HANDLE) { ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); key_handle = CK_INVALID_HANDLE; } ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1018, xtest_pkcs11_test_1018, "PKCS11: Digest tests"); /** * 0:d=0 hl=2 l= 22 cons: SEQUENCE * 2:d=1 hl=2 l= 20 cons: SET * 4:d=2 hl=2 l= 18 cons: SEQUENCE * 6:d=3 hl=2 l= 3 prim: OBJECT :commonName * 11:d=3 hl=2 l= 11 prim: UTF8STRING :common name */ static uint8_t subject_common_name[] = { 0x30, 0x16, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65 }; /** * 0:d=0 hl=2 l= 8 prim: OBJECT :prime256v1 */ static uint8_t ecdsa_nist_p256[] = { 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07 }; /** * 0:d=0 hl=2 l= 5 prim: OBJECT :secp384r1 */ static uint8_t ecdsa_nist_p384[] = { 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22 }; /** * 0:d=0 hl=2 l= 5 prim: OBJECT :secp521r1 */ static uint8_t ecdsa_nist_p521[] = { 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x23 }; #define EC_SIGN_TEST(_test_name, _mecha, _data) \ { \ .test_name = _test_name, \ .mecha = _mecha, \ .data = _data, \ .data_size = sizeof(_data) - 1, \ } /* List of elliptic curve signing multi stage digest mechas */ static struct { const char *test_name; CK_MECHANISM_TYPE mecha; const void *data; CK_ULONG data_size; } ec_sign_tests[] = { EC_SIGN_TEST("CKM_ECDSA_SHA1", CKM_ECDSA_SHA1, digest_test_pattern), EC_SIGN_TEST("CKM_ECDSA_SHA224", CKM_ECDSA_SHA224, digest_test_pattern), EC_SIGN_TEST("CKM_ECDSA_SHA256", CKM_ECDSA_SHA256, digest_test_pattern), EC_SIGN_TEST("CKM_ECDSA_SHA384", CKM_ECDSA_SHA384, digest_test_pattern), EC_SIGN_TEST("CKM_ECDSA_SHA512", CKM_ECDSA_SHA512, digest_test_pattern), }; static int test_ec_operations(ADBG_Case_t *c, CK_SESSION_HANDLE session, const char *curve_name, uint8_t *curve, size_t curve_size) { CK_RV rv = CKR_GENERAL_ERROR; CK_OBJECT_HANDLE public_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE private_key = CK_INVALID_HANDLE; CK_MECHANISM mechanism = { CKM_EC_KEY_PAIR_GEN, NULL, 0 }; CK_MECHANISM sign_mechanism = { CKM_ECDSA, NULL, 0 }; CK_BYTE id[] = { 123 }; CK_ATTRIBUTE public_key_template[] = { { CKA_ENCRYPT, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_EC_PARAMS, ecdsa_nist_p256, sizeof(ecdsa_nist_p256) } }; CK_ATTRIBUTE private_key_template[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SUBJECT, subject_common_name, sizeof(subject_common_name) }, { CKA_ID, id, sizeof(id) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) } }; CK_OBJECT_CLASS g_class = 0; CK_KEY_TYPE g_key_type = 0; CK_BYTE g_id[32] = { 0 }; CK_DATE g_start_date = { 0 }; CK_DATE g_end_date = { 0 }; CK_BBOOL g_derive = CK_FALSE; CK_BBOOL g_local = CK_FALSE; CK_MECHANISM_TYPE g_keygen_mecha = 0; CK_BYTE g_subject[64] = { 0 }; CK_BBOOL g_encrypt = CK_FALSE; CK_BBOOL g_verify = CK_FALSE; CK_BBOOL g_verify_recover = CK_FALSE; CK_BBOOL g_wrap = CK_FALSE; CK_BBOOL g_trusted = CK_FALSE; CK_BYTE g_public_key_info[1024] = { 0 }; CK_BBOOL g_sensitive = CK_FALSE; CK_BBOOL g_decrypt = CK_FALSE; CK_BBOOL g_sign = CK_FALSE; CK_BBOOL g_sign_recover = CK_FALSE; CK_BBOOL g_unwrap = CK_FALSE; CK_BBOOL g_extract = CK_FALSE; CK_BBOOL g_asensitive = CK_FALSE; CK_BBOOL g_nextract = CK_FALSE; CK_BBOOL g_wrap_with_trusted = CK_FALSE; CK_BBOOL g_always_authenticate = CK_FALSE; CK_ATTRIBUTE get_public_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_ID, g_id, sizeof(g_id) }, { CKA_START_DATE, &g_start_date, sizeof(g_start_date) }, { CKA_END_DATE, &g_end_date, sizeof(g_end_date) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_KEY_GEN_MECHANISM, &g_keygen_mecha, sizeof(g_keygen_mecha) }, { CKA_SUBJECT, g_subject, sizeof(g_subject) }, { CKA_ENCRYPT, &g_encrypt, sizeof(g_encrypt) }, { CKA_VERIFY, &g_verify, sizeof(g_verify) }, { CKA_VERIFY_RECOVER, &g_verify_recover, sizeof(g_verify_recover) }, { CKA_WRAP, &g_wrap, sizeof(g_wrap) }, { CKA_TRUSTED, &g_trusted, sizeof(g_trusted) }, { CKA_PUBLIC_KEY_INFO, g_public_key_info, sizeof(g_public_key_info) }, }; CK_ATTRIBUTE get_private_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_ID, g_id, sizeof(g_id) }, { CKA_START_DATE, &g_start_date, sizeof(g_start_date) }, { CKA_END_DATE, &g_end_date, sizeof(g_end_date) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_KEY_GEN_MECHANISM, &g_keygen_mecha, sizeof(g_keygen_mecha) }, { CKA_SUBJECT, g_subject, sizeof(g_subject) }, { CKA_SENSITIVE, &g_sensitive, sizeof(g_sensitive) }, { CKA_DECRYPT, &g_decrypt, sizeof(g_decrypt) }, { CKA_SIGN, &g_sign, sizeof(g_sign) }, { CKA_SIGN_RECOVER, &g_sign_recover, sizeof(g_sign_recover) }, { CKA_UNWRAP, &g_unwrap, sizeof(g_unwrap) }, { CKA_EXTRACTABLE, &g_extract, sizeof(g_extract) }, { CKA_ALWAYS_SENSITIVE, &g_asensitive, sizeof(g_asensitive) }, { CKA_NEVER_EXTRACTABLE, &g_nextract, sizeof(g_nextract) }, { CKA_WRAP_WITH_TRUSTED, &g_wrap_with_trusted, sizeof(g_wrap_with_trusted) }, { CKA_ALWAYS_AUTHENTICATE, &g_always_authenticate, sizeof(g_always_authenticate) }, { CKA_PUBLIC_KEY_INFO, g_public_key_info, sizeof(g_public_key_info) }, }; uint8_t signature[512] = { 0 }; CK_ULONG signature_len = 0; size_t i = 0; Do_ADBG_BeginSubCase(c, "%s: Generate key pair", curve_name); public_key_template[3].pValue = curve; public_key_template[3].ulValueLen = curve_size; rv = C_GenerateKeyPair(session, &mechanism, public_key_template, ARRAY_SIZE(public_key_template), private_key_template, ARRAY_SIZE(private_key_template), &public_key, &private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; /* reset get public key template */ memset(g_id, 0, sizeof(g_id)); memset(g_subject, 0, sizeof(g_subject)); memset(g_public_key_info, 0, sizeof(g_public_key_info)); get_public_template[2].ulValueLen = sizeof(g_id); get_public_template[8].ulValueLen = sizeof(g_subject); get_public_template[14].ulValueLen = sizeof(g_public_key_info); rv = C_GetAttributeValue(session, public_key, get_public_template, ARRAY_SIZE(get_public_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_PUBLIC_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_EC) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_keygen_mecha, ==, CKM_EC_KEY_PAIR_GEN) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_encrypt, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify_recover, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_trusted, ==, CK_FALSE)) goto err_destr_obj; /* reset get private key template */ memset(g_id, 0, sizeof(g_id)); memset(g_subject, 0, sizeof(g_subject)); memset(g_public_key_info, 0, sizeof(g_public_key_info)); get_private_template[2].ulValueLen = sizeof(g_id); get_private_template[8].ulValueLen = sizeof(g_subject); get_private_template[19].ulValueLen = sizeof(g_public_key_info); rv = C_GetAttributeValue(session, private_key, get_private_template, ARRAY_SIZE(get_private_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_PRIVATE_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_EC) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_keygen_mecha, ==, CKM_EC_KEY_PAIR_GEN) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_decrypt, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign_recover, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_unwrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap_with_trusted, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_always_authenticate, ==, CK_FALSE)) goto err_destr_obj; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "%s: Sign & verify tests - oneshot - CKM_ECDSA", curve_name); sign_mechanism.mechanism = CKM_ECDSA; memset(signature, 0, sizeof(signature)); signature_len = sizeof(signature); rv = C_SignInit(session, &sign_mechanism, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Sign(session, (void *)digest_test_pattern_sha256, sizeof(digest_test_pattern_sha256), (void *)signature, &signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyInit(session, &sign_mechanism, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)digest_test_pattern_sha256, sizeof(digest_test_pattern_sha256), (void *)signature, signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; Do_ADBG_EndSubCase(c, NULL); for (i = 0; i < ARRAY_SIZE(ec_sign_tests); i++) { Do_ADBG_BeginSubCase(c, "%s: Sign & verify - oneshot - %s", curve_name, ec_sign_tests[i].test_name); sign_mechanism.mechanism = ec_sign_tests[i].mecha; memset(signature, 0, sizeof(signature)); signature_len = sizeof(signature); rv = C_SignInit(session, &sign_mechanism, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Sign(session, (void *)ec_sign_tests[i].data, ec_sign_tests[i].data_size, (void *)signature, &signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyInit(session, &sign_mechanism, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)ec_sign_tests[i].data, ec_sign_tests[i].data_size, (void *)signature, signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; Do_ADBG_EndSubCase(c, NULL); } Do_ADBG_BeginSubCase(c, "%s: Destroy keys", curve_name); rv = C_DestroyObject(session, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_DestroyObject(session, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); return 1; err_destr_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, private_key)); ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, public_key)); err: Do_ADBG_EndSubCase(c, NULL); return 0; } static void xtest_pkcs11_test_1019(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; int ret = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ret = test_ec_operations(c, session, "P-256", ecdsa_nist_p256, sizeof(ecdsa_nist_p256)); if (!ret) goto out; ret = test_ec_operations(c, session, "P-384", ecdsa_nist_p384, sizeof(ecdsa_nist_p384)); if (!ret) goto out; if (level > 0) { ret = test_ec_operations(c, session, "P-521", ecdsa_nist_p521, sizeof(ecdsa_nist_p521)); if (!ret) goto out; } out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1019, xtest_pkcs11_test_1019, "PKCS11: Elliptic Curve key generation and signing"); #define WRAPPED_TEST_KEY_SIZE 48 static void xtest_pkcs11_test_1020(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE wrapping_key1 = CK_INVALID_HANDLE; CK_OBJECT_HANDLE wrapping_key2 = CK_INVALID_HANDLE; CK_OBJECT_HANDLE wrapping_key_inv = CK_INVALID_HANDLE; CK_OBJECT_HANDLE key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE key_sz24 = CK_INVALID_HANDLE; CK_OBJECT_HANDLE key_sens = CK_INVALID_HANDLE; CK_OBJECT_HANDLE key_inv = CK_INVALID_HANDLE; CK_OBJECT_HANDLE unwrapped_key = CK_INVALID_HANDLE; CK_ATTRIBUTE set_w_unw_template[] = { { CKA_WRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE set_wwt_template[] = { { CKA_WRAP_WITH_TRUSTED, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE set_trusted_template[] = { { CKA_TRUSTED, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE wrap_template[] = { { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE unwrap_template[] = { { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE wrapping_key_template[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, { CKA_WRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE wrapping_key_temp_w_indirect[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, { CKA_WRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_WRAP_TEMPLATE, &wrap_template, sizeof(wrap_template) }, { CKA_UNWRAP_TEMPLATE, &unwrap_template, sizeof(unwrap_template) }, }; CK_ATTRIBUTE unwrap_template2[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_AES }, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, }; CK_ATTRIBUTE wrapping_key_temp_w_indirect2[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, { CKA_WRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP_TEMPLATE, &unwrap_template2, sizeof(unwrap_template2) }, }; CK_ATTRIBUTE wrapping_key_template_inv1[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, { CKA_WRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE key_template[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, { CKA_ENCRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE key_template_sens[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE key_template_inv1[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE key_sz24_template[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 24 }, sizeof(CK_ULONG) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE new_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_GENERIC_SECRET }, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE new_key_template_sens[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_AES }, sizeof(CK_KEY_TYPE) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE new_key_template2[] = { { CKA_DERIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE new_key_template3[] = { { CKA_VALUE_LEN, &(CK_ULONG){ 16 }, sizeof(CK_ULONG) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE new_key_template4[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_GENERIC_SECRET }, sizeof(CK_KEY_TYPE) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_BBOOL g_extract = CK_FALSE; CK_BBOOL g_sensitive = CK_TRUE; CK_BBOOL g_nextract = CK_TRUE; CK_BBOOL g_asensitive = CK_TRUE; CK_BBOOL g_local = CK_TRUE; CK_BBOOL g_token = CK_FALSE; CK_BBOOL g_derive = CK_FALSE; CK_OBJECT_CLASS g_class = CKO_VENDOR_DEFINED; CK_KEY_TYPE g_key_type = CKK_VENDOR_DEFINED; uint8_t g_val[WRAPPED_TEST_KEY_SIZE] = { 0 }; CK_ULONG key_len = 0; uint8_t g_unwrapped_val[WRAPPED_TEST_KEY_SIZE] = { 0 }; CK_ULONG unwrapped_key_len = 0; /* Keep last attribute as CKA_VALUE */ CK_ATTRIBUTE get_template_unwrapped[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_EXTRACTABLE, &g_extract, sizeof(g_extract) }, { CKA_SENSITIVE, &g_sensitive, sizeof(g_sensitive) }, { CKA_NEVER_EXTRACTABLE, &g_nextract, sizeof(g_nextract) }, { CKA_ALWAYS_SENSITIVE, &g_asensitive, sizeof(g_asensitive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_TOKEN, &g_token, sizeof(g_token) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_VALUE_LEN, &unwrapped_key_len, sizeof(unwrapped_key_len) }, { CKA_VALUE, g_unwrapped_val, sizeof(g_unwrapped_val) }, }; CK_ATTRIBUTE get_template[] = { { CKA_VALUE_LEN, &key_len, sizeof(key_len) }, { CKA_VALUE, g_val, sizeof(g_val) }, }; uint8_t buf[WRAPPED_TEST_KEY_SIZE] = { 0 }; CK_ULONG size = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Wrapping Key - AES Key */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, wrapping_key_template, ARRAY_SIZE(wrapping_key_template), &wrapping_key1); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; /* Key to be wrapped - AES key */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, key_template, ARRAY_SIZE(key_template), &key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; Do_ADBG_BeginSubCase(c, "Test key wrap with AES ECB"); /* * Test NULL buffer and NULL out_size to verify bad argument processing */ rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key, NULL, NULL); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ARGUMENTS_BAD, rv)) goto out; /* * Test NULL buffer case with size as 0 to get the out_size */ rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key, NULL, &size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, size, <=, sizeof(buf))) goto out; /* * Test NULL buffer case with size non zero size to get the out_size */ size = 1; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key, NULL, &size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, size, <=, sizeof(buf))) goto out; /* Test short buffer */ size = 12; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, size, <=, sizeof(buf))) goto out; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key, buf, &size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Get the size of the original key which was wrapped in key_len. * This will be compared to the length of the key after unwrapping. */ rv = C_GetAttributeValue(session, key, get_template, ARRAY_SIZE(get_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test key unwrap with AES ECB"); rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, buf, size, new_key_template, ARRAY_SIZE(new_key_template), &unwrapped_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * The key created after unwrapping should have CKA_LOCAL = FALSE, * CKA_ALWAYS_SENSITIVE and CKA_NEVER_EXTRACTABLE as FALSE. * Default value of CKA_EXTRACTABLE if not specified in the template * is TRUE. We have deliberately set CKA_SENSITIVE to false for * both original key and unwrapped_key. This is done to be able to * extract the value of keys and compare them. This is done mainly * for testing. In actual examples, we expect CKA_SENSITIVE of keys * to be wrapped to be TRUE. */ rv = C_GetAttributeValue(session, unwrapped_key, get_template_unwrapped, ARRAY_SIZE(get_template_unwrapped)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_BUFFER(c, g_unwrapped_val, unwrapped_key_len, g_val, key_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_SECRET_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_GENERIC_SECRET) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE)) goto out; rv = C_DestroyObject(session, unwrapped_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Invalid UnWrap cases"); /* Failure when unwrapping as a private session key */ rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, buf, size, new_key_template4, ARRAY_SIZE(new_key_template4), &unwrapped_key); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto out; /* Provide incomplete template */ rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, buf, size, new_key_template2, ARRAY_SIZE(new_key_template2), &unwrapped_key); /* * The error code can also be CKR_TEMPLATE_INCOMPLETE. The * current implementation returns CKR_TEMPLATE_INCONSISTENT */ if (!ADBG_EXPECT_TRUE(c, rv == CKR_TEMPLATE_INCOMPLETE || rv == CKR_TEMPLATE_INCONSISTENT)) goto out; /* Try unwrapping with a key without CKA_UNWRAP */ rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, key, buf, size, new_key_template, ARRAY_SIZE(new_key_template), &unwrapped_key); if (!ADBG_EXPECT_CK_RESULT(c, CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Invalid Wrap cases"); rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, wrapping_key_template_inv1, ARRAY_SIZE(wrapping_key_template_inv1), &wrapping_key_inv); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Wrapping key used without CKA_WRAP set */ rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key_inv, key, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_WRAPPING_KEY_TYPE_INCONSISTENT, rv)) goto out; rv = C_DestroyObject(session, wrapping_key_inv); ADBG_EXPECT_CK_OK(c, rv); /* Use invalid wrapping key handle */ rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key_inv, key, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_WRAPPING_KEY_HANDLE_INVALID, rv)) goto out; /* CKA_EXTRACTABLE attribute of the key to be wrapped is CKA_FALSE */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, key_template_inv1, ARRAY_SIZE(key_template_inv1), &key_inv); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key_inv, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_UNEXTRACTABLE, rv)) goto out; rv = C_DestroyObject(session, key_inv); ADBG_EXPECT_CK_OK(c, rv); /* Use invalid key handle */ rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key_inv, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_HANDLE_INVALID, rv)) goto out; /* Try wrapping the wrapping key */ rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, wrapping_key1, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_WRAPPING_KEY_HANDLE_INVALID, rv)) goto out; /* Use invalid mechanism */ rv = C_WrapKey(session, &cktest_hmac_md5_mechanism, wrapping_key1, key, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_MECHANISM_INVALID, rv)) goto out; /* Try wrapping when an operation is already active */ rv = C_EncryptInit(session, &cktest_aes_cbc_mechanism, key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OPERATION_ACTIVE, rv)) goto out; rv = C_EncryptFinal(session, NULL, NULL); /* Only check that the operation is no more active */ if (!ADBG_EXPECT_TRUE(c, rv != CKR_BUFFER_TOO_SMALL)) goto out; /* * Try wrapping using CKK_GENERIC_SECRET when mechanism used is * AES_ECB. Generate a secret key object in rw session. */ rv = C_GenerateKey(session, &cktest_gensecret_keygen_mechanism, cktest_generate_gensecret_object_valid1, ARRAY_SIZE(cktest_generate_gensecret_object_valid1), &key_inv); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Make the Generic secret key wrapping/unwrapping key */ rv = C_SetAttributeValue(session, key_inv, set_w_unw_template, ARRAY_SIZE(set_w_unw_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, key_inv, key, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_WRAPPING_KEY_TYPE_INCONSISTENT, rv)) goto out; rv = C_DestroyObject(session, key_inv); ADBG_EXPECT_CK_OK(c, rv); Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Wrap with different length key"); /* Generate Key of size 192 bits */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, key_sz24_template, ARRAY_SIZE(key_sz24_template), &key_sz24); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; size = 0; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key_sz24, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, size, ==, 32)) goto out; size = 24; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key_sz24, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, size, ==, 32)) goto out; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key_sz24, buf, &size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, size, ==, 32)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test Wrap/Unwrap with indirect template"); /* Wrapping Key with indirect templates - AES Key */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, wrapping_key_temp_w_indirect, ARRAY_SIZE(wrapping_key_temp_w_indirect), &wrapping_key2); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Attribute mismatch with CKA_WRAP_TEMPLATE. * Error expected when wrapping a key whose template doesn't match with * the CKA_WRAP_TEMPLATE in the wrapping_key. In this example, the * CKA_WRAP_TEMPLATE expects CKA_SENSITIVE of the key to be wrapped to * be TRUE which is not the case here. */ size = sizeof(buf); rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key2, key, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_HANDLE_INVALID, rv)) goto out; /* Generate SENSITIVE Key */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, key_template_sens, ARRAY_SIZE(key_template_sens), &key_sens); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key2, key_sens, buf, &size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Unwrap to create key with SENSITIVE set as FALSE. * This should fail as indirect attribute CKA_UNWRAP_TEMPLATE restricts * creation of key with CKA_SENSITIVE as FALSE. */ rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key2, buf, size, new_key_template, ARRAY_SIZE(new_key_template), &unwrapped_key); if (!ADBG_EXPECT_CK_RESULT(c, CKR_TEMPLATE_INCONSISTENT, rv)) goto out; /* Unwrap a wrapped sensitive key to create a SENSITIVE key */ rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key2, buf, size, new_key_template_sens, ARRAY_SIZE(new_key_template_sens), &unwrapped_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Get the attributes of created. Skip last attribute in * get_template_wrapped as that is CKA_VALUE which would give an * error for a sensitive key */ rv = C_GetAttributeValue(session, unwrapped_key, get_template_unwrapped, ARRAY_SIZE(get_template_unwrapped) - 1); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, unwrapped_key_len, ==, key_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_SECRET_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_AES) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE)) goto out; if (!ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, unwrapped_key)) || !ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, wrapping_key2)) || !ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_sens))) goto out; /* Create wrapping key with indirect template specifying class & key */ rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, wrapping_key_temp_w_indirect2, ARRAY_SIZE(wrapping_key_temp_w_indirect2), &wrapping_key2); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; size = sizeof(buf); rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key2, key, buf, &size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Use minimal new key template just specifying attribute of key */ rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key2, buf, size, new_key_template2, ARRAY_SIZE(new_key_template2), &unwrapped_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetAttributeValue(session, unwrapped_key, get_template_unwrapped, ARRAY_SIZE(get_template_unwrapped) - 1); /* Destroy created token object */ if (!ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, unwrapped_key))) goto out; if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, unwrapped_key_len, ==, key_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_SECRET_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_AES) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE)) goto out; /* * Unwrap with NULL template when CKA_UNWRAP_TEMPLATE has all * attributes to generate a key */ rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key2, buf, size, NULL, 0, &unwrapped_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetAttributeValue(session, unwrapped_key, get_template_unwrapped, ARRAY_SIZE(get_template_unwrapped) - 1); /* Destroy created token object */ if (!ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, unwrapped_key))) goto out; if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, unwrapped_key_len, ==, key_len) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_SECRET_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_AES) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_token, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_FALSE)) { goto out; } /* Unwrap and try create a Private token object */ rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key2, buf, size, new_key_template3, ARRAY_SIZE(new_key_template3), &unwrapped_key); if (!ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Test usage of CKA_WRAP_WITH_TRUSTED"); /* Set Attribute WRAP_WITH_TRUSTED on the key */ rv = C_SetAttributeValue(session, key, set_wwt_template, ARRAY_SIZE(set_wwt_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* * Try wrapping the key with attribute CKA_WRAP_WITH_TRUSTED with * normal wrapping key */ rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key, buf, &size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_NOT_WRAPPABLE, rv)) goto out; /* Login as SO in RW session */ rv = C_Login(session, CKU_SO, test_token_so_pin, sizeof(test_token_so_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_SetAttributeValue(session, wrapping_key1, set_trusted_template, ARRAY_SIZE(set_trusted_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_CK_OK(c, C_Logout(session))) goto out; rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, wrapping_key1, key, buf, &size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; out: Do_ADBG_EndSubCase(c, NULL); close_session: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1020, xtest_pkcs11_test_1020, "PKCS11: AES Key Wrap/UnWrap tests"); #define RSA_SIGN_TEST(_test_name, _mecha, _data) \ { \ .test_name = _test_name, \ .mecha = _mecha, \ .data = _data, \ .data_size = sizeof(_data) - 1, \ } /* List of RSA PKCS signing multi stage digest mechanisms */ static struct { const char *test_name; CK_MECHANISM_TYPE mecha; const void *data; CK_ULONG data_size; } rsa_pkcs_sign_tests[] = { #ifndef CFG_CRYPTO_SE05X RSA_SIGN_TEST("CKM_MD5_RSA_PKCS", CKM_MD5_RSA_PKCS, digest_test_pattern), #endif RSA_SIGN_TEST("CKM_SHA1_RSA_PKCS", CKM_SHA1_RSA_PKCS, digest_test_pattern), RSA_SIGN_TEST("CKM_SHA224_RSA_PKCS", CKM_SHA224_RSA_PKCS, digest_test_pattern), RSA_SIGN_TEST("CKM_SHA256_RSA_PKCS", CKM_SHA256_RSA_PKCS, digest_test_pattern), RSA_SIGN_TEST("CKM_SHA384_RSA_PKCS", CKM_SHA384_RSA_PKCS, digest_test_pattern), RSA_SIGN_TEST("CKM_SHA512_RSA_PKCS", CKM_SHA512_RSA_PKCS, digest_test_pattern), }; static int test_rsa_pkcs_operations(ADBG_Case_t *c, CK_SESSION_HANDLE session, const char *rsa_name, uint32_t rsa_bits) { CK_RV rv = CKR_GENERAL_ERROR; CK_OBJECT_HANDLE public_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE private_key = CK_INVALID_HANDLE; CK_MECHANISM mechanism = { CKM_RSA_PKCS_KEY_PAIR_GEN, NULL, 0 }; CK_MECHANISM sign_mechanism = { CKM_RSA_PKCS, NULL, 0 }; CK_ULONG modulus_bits = 0; CK_BYTE public_exponent[] = { 1, 0, 1 }; CK_BYTE id[] = { 123 }; CK_ATTRIBUTE public_key_template[] = { { CKA_ENCRYPT, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_MODULUS_BITS, &modulus_bits, sizeof(CK_ULONG) }, { CKA_PUBLIC_EXPONENT, public_exponent, sizeof(public_exponent) } }; CK_ATTRIBUTE private_key_template[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SUBJECT, subject_common_name, sizeof(subject_common_name) }, { CKA_ID, id, sizeof(id) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) } }; CK_OBJECT_CLASS g_class = 0; CK_KEY_TYPE g_key_type = 0; CK_BYTE g_id[32] = { 0 }; CK_DATE g_start_date = { 0 }; CK_DATE g_end_date = { 0 }; CK_BBOOL g_derive = CK_FALSE; CK_BBOOL g_local = CK_FALSE; CK_MECHANISM_TYPE g_keygen_mecha = 0; CK_BYTE g_subject[64] = { 0 }; CK_BBOOL g_encrypt = CK_FALSE; CK_BBOOL g_verify = CK_FALSE; CK_BBOOL g_verify_recover = CK_FALSE; CK_BBOOL g_wrap = CK_FALSE; CK_BBOOL g_trusted = CK_FALSE; CK_BYTE g_public_key_info[1024] = { 0 }; CK_BBOOL g_sensitive = CK_FALSE; CK_BBOOL g_decrypt = CK_FALSE; CK_BBOOL g_sign = CK_FALSE; CK_BBOOL g_sign_recover = CK_FALSE; CK_BBOOL g_unwrap = CK_FALSE; CK_BBOOL g_extract = CK_FALSE; CK_BBOOL g_asensitive = CK_FALSE; CK_BBOOL g_nextract = CK_FALSE; CK_BBOOL g_wrap_with_trusted = CK_FALSE; CK_BBOOL g_always_authenticate = CK_FALSE; /* Note: Tests below expects specific order of elements */ CK_ATTRIBUTE get_public_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_ID, g_id, sizeof(g_id) }, { CKA_START_DATE, &g_start_date, sizeof(g_start_date) }, { CKA_END_DATE, &g_end_date, sizeof(g_end_date) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_KEY_GEN_MECHANISM, &g_keygen_mecha, sizeof(g_keygen_mecha) }, { CKA_SUBJECT, g_subject, sizeof(g_subject) }, { CKA_ENCRYPT, &g_encrypt, sizeof(g_encrypt) }, { CKA_VERIFY, &g_verify, sizeof(g_verify) }, { CKA_VERIFY_RECOVER, &g_verify_recover, sizeof(g_verify_recover) }, { CKA_WRAP, &g_wrap, sizeof(g_wrap) }, { CKA_TRUSTED, &g_trusted, sizeof(g_trusted) }, { CKA_PUBLIC_KEY_INFO, g_public_key_info, sizeof(g_public_key_info) }, }; /* Note: Tests below expects specific order of elements */ CK_ATTRIBUTE get_private_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_ID, g_id, sizeof(g_id) }, { CKA_START_DATE, &g_start_date, sizeof(g_start_date) }, { CKA_END_DATE, &g_end_date, sizeof(g_end_date) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_KEY_GEN_MECHANISM, &g_keygen_mecha, sizeof(g_keygen_mecha) }, { CKA_SUBJECT, g_subject, sizeof(g_subject) }, { CKA_SENSITIVE, &g_sensitive, sizeof(g_sensitive) }, { CKA_DECRYPT, &g_decrypt, sizeof(g_decrypt) }, { CKA_SIGN, &g_sign, sizeof(g_sign) }, { CKA_SIGN_RECOVER, &g_sign_recover, sizeof(g_sign_recover) }, { CKA_UNWRAP, &g_unwrap, sizeof(g_unwrap) }, { CKA_EXTRACTABLE, &g_extract, sizeof(g_extract) }, { CKA_ALWAYS_SENSITIVE, &g_asensitive, sizeof(g_asensitive) }, { CKA_NEVER_EXTRACTABLE, &g_nextract, sizeof(g_nextract) }, { CKA_WRAP_WITH_TRUSTED, &g_wrap_with_trusted, sizeof(g_wrap_with_trusted) }, { CKA_ALWAYS_AUTHENTICATE, &g_always_authenticate, sizeof(g_always_authenticate) }, { CKA_PUBLIC_KEY_INFO, g_public_key_info, sizeof(g_public_key_info) }, }; uint8_t signature[512] = { 0 }; CK_ULONG signature_len = 0; size_t i = 0; Do_ADBG_BeginSubCase(c, "%s: Generate key pair", rsa_name); modulus_bits = rsa_bits; rv = C_GenerateKeyPair(session, &mechanism, public_key_template, ARRAY_SIZE(public_key_template), private_key_template, ARRAY_SIZE(private_key_template), &public_key, &private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; /* reset get public key template */ memset(g_id, 0, sizeof(g_id)); assert(get_public_template[2].type == CKA_ID); get_public_template[2].ulValueLen = sizeof(g_id); memset(g_subject, 0, sizeof(g_subject)); assert(get_public_template[8].type == CKA_SUBJECT); get_public_template[8].ulValueLen = sizeof(g_subject); memset(g_public_key_info, 0, sizeof(g_public_key_info)); assert(get_public_template[14].type == CKA_PUBLIC_KEY_INFO); get_public_template[14].ulValueLen = sizeof(g_public_key_info); rv = C_GetAttributeValue(session, public_key, get_public_template, ARRAY_SIZE(get_public_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_PUBLIC_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_RSA) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_keygen_mecha, ==, CKM_RSA_PKCS_KEY_PAIR_GEN) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_encrypt, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify_recover, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_trusted, ==, CK_FALSE)) goto err_destr_obj; /* reset get private key template */ memset(g_id, 0, sizeof(g_id)); assert(get_private_template[2].type == CKA_ID); get_private_template[2].ulValueLen = sizeof(g_id); memset(g_subject, 0, sizeof(g_subject)); assert(get_private_template[8].type == CKA_SUBJECT); get_private_template[8].ulValueLen = sizeof(g_subject); memset(g_public_key_info, 0, sizeof(g_public_key_info)); assert(get_private_template[19].type == CKA_PUBLIC_KEY_INFO); get_private_template[19].ulValueLen = sizeof(g_public_key_info); rv = C_GetAttributeValue(session, private_key, get_private_template, ARRAY_SIZE(get_private_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_PRIVATE_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_RSA) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_keygen_mecha, ==, CKM_RSA_PKCS_KEY_PAIR_GEN) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_decrypt, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign_recover, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_unwrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap_with_trusted, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_always_authenticate, ==, CK_FALSE)) goto err_destr_obj; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "%s: Sign & verify tests - oneshot - CKM_RSA_PKCS", rsa_name); sign_mechanism.mechanism = CKM_RSA_PKCS; memset(signature, 0, sizeof(signature)); signature_len = sizeof(signature); rv = C_SignInit(session, &sign_mechanism, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Sign(session, (void *)digest_test_pattern_sha256, sizeof(digest_test_pattern_sha256), (void *)signature, &signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyInit(session, &sign_mechanism, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)digest_test_pattern_sha256, sizeof(digest_test_pattern_sha256), (void *)signature, signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; for (i = 0; i < ARRAY_SIZE(rsa_pkcs_sign_tests); i++) { /* * Note: this order of end/begin here is just to get ADBG * SubCases in sync with error handling. */ Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "%s: Sign & verify - oneshot - %s", rsa_name, rsa_pkcs_sign_tests[i].test_name); sign_mechanism.mechanism = rsa_pkcs_sign_tests[i].mecha; memset(signature, 0, sizeof(signature)); signature_len = sizeof(signature); rv = C_SignInit(session, &sign_mechanism, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Sign(session, (void *)rsa_pkcs_sign_tests[i].data, rsa_pkcs_sign_tests[i].data_size, (void *)signature, &signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyInit(session, &sign_mechanism, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)rsa_pkcs_sign_tests[i].data, rsa_pkcs_sign_tests[i].data_size, (void *)signature, signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; } rv = C_DestroyObject(session, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_pub_obj; rv = C_DestroyObject(session, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); return 1; err_destr_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, private_key)); err_destr_pub_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, public_key)); err: Do_ADBG_EndSubCase(c, NULL); return 0; } static void xtest_pkcs11_test_1021(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; int ret = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ret = test_rsa_pkcs_operations(c, session, "RSA-1024", 1024); if (!ret) goto out; ret = test_rsa_pkcs_operations(c, session, "RSA-2048", 2048); if (!ret) goto out; if (level > 0) { ret = test_rsa_pkcs_operations(c, session, "RSA-3072", 3072); if (!ret) goto out; ret = test_rsa_pkcs_operations(c, session, "RSA-4096", 4096); if (!ret) goto out; } out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1021, xtest_pkcs11_test_1021, "PKCS11: RSA PKCS key generation and signing"); #define RSA_PSS_HASH_SIGN_TEST(_test_name, _min_rsa_bits, _mecha, _hash_algo, _mgf_algo, \ _salt_len, _data) \ { \ .test_name = _test_name, \ .min_rsa_bits = _min_rsa_bits, \ .mecha = _mecha, \ .hash_algo = _hash_algo, \ .mgf_algo = _mgf_algo, \ .salt_len = _salt_len, \ .data = _data, \ .data_size = sizeof(_data), \ } #define RSA_PSS_CSTR_SIGN_TEST(_test_name, _min_rsa_bits, _mecha, _hash_algo, \ _mgf_algo, _salt_len, _data) \ { \ .test_name = _test_name, \ .min_rsa_bits = _min_rsa_bits, \ .mecha = _mecha, \ .hash_algo = _hash_algo, \ .mgf_algo = _mgf_algo, \ .salt_len = _salt_len, \ .data = _data, \ .data_size = sizeof(_data) - 1, \ } /* List of RSA PSS signing multi stage digest mechanisms */ static struct { const char *test_name; uint32_t min_rsa_bits; CK_MECHANISM_TYPE mecha; CK_MECHANISM_TYPE hash_algo; CK_RSA_PKCS_MGF_TYPE mgf_algo; CK_ULONG salt_len; const void *data; CK_ULONG data_size; } rsa_pss_sign_tests[] = { RSA_PSS_HASH_SIGN_TEST("RSA-PSS/SHA1", 1024, CKM_RSA_PKCS_PSS, CKM_SHA_1, CKG_MGF1_SHA1, 20, digest_test_pattern_sha1), RSA_PSS_CSTR_SIGN_TEST("RSA-PSS/SHA1/mech", 1024, CKM_SHA1_RSA_PKCS_PSS, CKM_SHA_1, CKG_MGF1_SHA1, 20, digest_test_pattern), RSA_PSS_HASH_SIGN_TEST("RSA-PSS/SHA224", 1024, CKM_RSA_PKCS_PSS, CKM_SHA224, CKG_MGF1_SHA224, 28, digest_test_pattern_sha224), RSA_PSS_CSTR_SIGN_TEST("RSA-PSS/SHA224/mech", 1024, CKM_SHA224_RSA_PKCS_PSS, CKM_SHA224, CKG_MGF1_SHA224, 28, digest_test_pattern), RSA_PSS_HASH_SIGN_TEST("RSA-PSS/SHA256", 1024, CKM_RSA_PKCS_PSS, CKM_SHA256, CKG_MGF1_SHA256, 32, digest_test_pattern_sha256), RSA_PSS_CSTR_SIGN_TEST("RSA-PSS/SHA256/mech", 1024, CKM_SHA256_RSA_PKCS_PSS, CKM_SHA256, CKG_MGF1_SHA256, 32, digest_test_pattern), RSA_PSS_HASH_SIGN_TEST("RSA-PSS/SHA384", 1024, CKM_RSA_PKCS_PSS, CKM_SHA384, CKG_MGF1_SHA384, 48, digest_test_pattern_sha384), RSA_PSS_CSTR_SIGN_TEST("RSA-PSS/SHA384/mech", 1024, CKM_SHA384_RSA_PKCS_PSS, CKM_SHA384, CKG_MGF1_SHA384, 48, digest_test_pattern), RSA_PSS_HASH_SIGN_TEST("RSA-PSS/SHA512", 2048, CKM_RSA_PKCS_PSS, CKM_SHA512, CKG_MGF1_SHA512, 64, digest_test_pattern_sha512), RSA_PSS_CSTR_SIGN_TEST("RSA-PSS/SHA512/mech", 2048, CKM_SHA512_RSA_PKCS_PSS, CKM_SHA512, CKG_MGF1_SHA512, 64, digest_test_pattern), }; static int test_rsa_pss_operations(ADBG_Case_t *c, CK_SESSION_HANDLE session, const char *rsa_name, uint32_t rsa_bits) { CK_RV rv = CKR_GENERAL_ERROR; CK_OBJECT_HANDLE public_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE private_key = CK_INVALID_HANDLE; CK_MECHANISM mechanism = { CKM_RSA_PKCS_KEY_PAIR_GEN, NULL, 0 }; CK_MECHANISM sign_mechanism = { CKM_RSA_PKCS_PSS, NULL, 0 }; CK_RSA_PKCS_PSS_PARAMS pss_params = { CKM_SHA256, CKG_MGF1_SHA256, 32, }; CK_ULONG modulus_bits = 0; CK_BYTE public_exponent[] = { 1, 0, 1 }; CK_BYTE id[] = { 123 }; CK_ATTRIBUTE public_key_template[] = { { CKA_ENCRYPT, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_MODULUS_BITS, &modulus_bits, sizeof(modulus_bits) }, { CKA_PUBLIC_EXPONENT, public_exponent, sizeof(public_exponent) } }; CK_ATTRIBUTE private_key_template[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SUBJECT, subject_common_name, sizeof(subject_common_name) }, { CKA_ID, id, sizeof(id) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) } }; CK_OBJECT_CLASS g_class = 0; CK_KEY_TYPE g_key_type = 0; CK_BYTE g_id[32] = { 0 }; CK_DATE g_start_date = { 0 }; CK_DATE g_end_date = { 0 }; CK_BBOOL g_derive = CK_FALSE; CK_BBOOL g_local = CK_FALSE; CK_MECHANISM_TYPE g_keygen_mecha = 0; CK_BYTE g_subject[64] = { 0 }; CK_BBOOL g_encrypt = CK_FALSE; CK_BBOOL g_verify = CK_FALSE; CK_BBOOL g_verify_recover = CK_FALSE; CK_BBOOL g_wrap = CK_FALSE; CK_BBOOL g_trusted = CK_FALSE; CK_BYTE g_public_key_info[1024] = { 0 }; CK_BBOOL g_sensitive = CK_FALSE; CK_BBOOL g_decrypt = CK_FALSE; CK_BBOOL g_sign = CK_FALSE; CK_BBOOL g_sign_recover = CK_FALSE; CK_BBOOL g_unwrap = CK_FALSE; CK_BBOOL g_extract = CK_FALSE; CK_BBOOL g_asensitive = CK_FALSE; CK_BBOOL g_nextract = CK_FALSE; CK_BBOOL g_wrap_with_trusted = CK_FALSE; CK_BBOOL g_always_authenticate = CK_FALSE; /* Note: Tests below expects specific order of elements */ CK_ATTRIBUTE get_public_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_ID, g_id, sizeof(g_id) }, { CKA_START_DATE, &g_start_date, sizeof(g_start_date) }, { CKA_END_DATE, &g_end_date, sizeof(g_end_date) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_KEY_GEN_MECHANISM, &g_keygen_mecha, sizeof(g_keygen_mecha) }, { CKA_SUBJECT, g_subject, sizeof(g_subject) }, { CKA_ENCRYPT, &g_encrypt, sizeof(g_encrypt) }, { CKA_VERIFY, &g_verify, sizeof(g_verify) }, { CKA_VERIFY_RECOVER, &g_verify_recover, sizeof(g_verify_recover) }, { CKA_WRAP, &g_wrap, sizeof(g_wrap) }, { CKA_TRUSTED, &g_trusted, sizeof(g_trusted) }, { CKA_PUBLIC_KEY_INFO, g_public_key_info, sizeof(g_public_key_info) }, }; /* Note: Tests below expects specific order of elements */ CK_ATTRIBUTE get_private_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_ID, g_id, sizeof(g_id) }, { CKA_START_DATE, &g_start_date, sizeof(g_start_date) }, { CKA_END_DATE, &g_end_date, sizeof(g_end_date) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_KEY_GEN_MECHANISM, &g_keygen_mecha, sizeof(g_keygen_mecha) }, { CKA_SUBJECT, g_subject, sizeof(g_subject) }, { CKA_SENSITIVE, &g_sensitive, sizeof(g_sensitive) }, { CKA_DECRYPT, &g_decrypt, sizeof(g_decrypt) }, { CKA_SIGN, &g_sign, sizeof(g_sign) }, { CKA_SIGN_RECOVER, &g_sign_recover, sizeof(g_sign_recover) }, { CKA_UNWRAP, &g_unwrap, sizeof(g_unwrap) }, { CKA_EXTRACTABLE, &g_extract, sizeof(g_extract) }, { CKA_ALWAYS_SENSITIVE, &g_asensitive, sizeof(g_asensitive) }, { CKA_NEVER_EXTRACTABLE, &g_nextract, sizeof(g_nextract) }, { CKA_WRAP_WITH_TRUSTED, &g_wrap_with_trusted, sizeof(g_wrap_with_trusted) }, { CKA_ALWAYS_AUTHENTICATE, &g_always_authenticate, sizeof(g_always_authenticate) }, { CKA_PUBLIC_KEY_INFO, g_public_key_info, sizeof(g_public_key_info) }, }; uint8_t signature[512] = { 0 }; CK_ULONG signature_len = 0; size_t i = 0; Do_ADBG_BeginSubCase(c, "%s: Generate key pair", rsa_name); modulus_bits = rsa_bits; rv = C_GenerateKeyPair(session, &mechanism, public_key_template, ARRAY_SIZE(public_key_template), private_key_template, ARRAY_SIZE(private_key_template), &public_key, &private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; /* reset get public key template */ memset(g_id, 0, sizeof(g_id)); assert(get_public_template[2].type == CKA_ID); get_public_template[2].ulValueLen = sizeof(g_id); memset(g_subject, 0, sizeof(g_subject)); assert(get_public_template[8].type == CKA_SUBJECT); get_public_template[8].ulValueLen = sizeof(g_subject); memset(g_public_key_info, 0, sizeof(g_public_key_info)); assert(get_public_template[14].type == CKA_PUBLIC_KEY_INFO); get_public_template[14].ulValueLen = sizeof(g_public_key_info); rv = C_GetAttributeValue(session, public_key, get_public_template, ARRAY_SIZE(get_public_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_PUBLIC_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_RSA) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_keygen_mecha, ==, CKM_RSA_PKCS_KEY_PAIR_GEN) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_encrypt, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify_recover, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_trusted, ==, CK_FALSE)) goto err_destr_obj; /* reset get private key template */ memset(g_id, 0, sizeof(g_id)); assert(get_private_template[2].type == CKA_ID); get_private_template[2].ulValueLen = sizeof(g_id); memset(g_subject, 0, sizeof(g_subject)); assert(get_private_template[8].type == CKA_SUBJECT); get_private_template[8].ulValueLen = sizeof(g_subject); memset(g_public_key_info, 0, sizeof(g_public_key_info)); assert(get_private_template[19].type == CKA_PUBLIC_KEY_INFO); get_private_template[19].ulValueLen = sizeof(g_public_key_info); rv = C_GetAttributeValue(session, private_key, get_private_template, ARRAY_SIZE(get_private_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_PRIVATE_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_RSA) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_keygen_mecha, ==, CKM_RSA_PKCS_KEY_PAIR_GEN) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_decrypt, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign_recover, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_unwrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap_with_trusted, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_always_authenticate, ==, CK_FALSE)) goto err_destr_obj; for (i = 0; i < ARRAY_SIZE(rsa_pss_sign_tests); i++) { /* * Note: this order of end/begin here is just to get ADBG * SubCases in sync with error handling. */ Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "%s: Sign & verify - oneshot - %s", rsa_name, rsa_pss_sign_tests[i].test_name); sign_mechanism.mechanism = rsa_pss_sign_tests[i].mecha; sign_mechanism.pParameter = &pss_params; sign_mechanism.ulParameterLen = sizeof(pss_params); pss_params.hashAlg = rsa_pss_sign_tests[i].hash_algo; pss_params.mgf = rsa_pss_sign_tests[i].mgf_algo; pss_params.sLen = rsa_pss_sign_tests[i].salt_len; memset(signature, 0, sizeof(signature)); signature_len = sizeof(signature); rv = C_SignInit(session, &sign_mechanism, private_key); if (rsa_bits >= rsa_pss_sign_tests[i].min_rsa_bits) { if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; } else { if (!ADBG_EXPECT_CK_RESULT(c, CKR_KEY_SIZE_RANGE, rv)) goto err_destr_obj; continue; } rv = C_Sign(session, (void *)rsa_pss_sign_tests[i].data, rsa_pss_sign_tests[i].data_size, (void *)signature, &signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_VerifyInit(session, &sign_mechanism, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Verify(session, (void *)rsa_pss_sign_tests[i].data, rsa_pss_sign_tests[i].data_size, (void *)signature, signature_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; } rv = C_DestroyObject(session, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_pub_obj; rv = C_DestroyObject(session, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); return 1; err_destr_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, private_key)); err_destr_pub_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, public_key)); err: Do_ADBG_EndSubCase(c, NULL); return 0; } static void xtest_pkcs11_test_1022(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; int ret = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ret = test_rsa_pss_operations(c, session, "RSA-1024", 1024); if (!ret) goto out; ret = test_rsa_pss_operations(c, session, "RSA-2048", 2048); if (!ret) goto out; if (level > 0) { ret = test_rsa_pss_operations(c, session, "RSA-3072", 3072); if (!ret) goto out; ret = test_rsa_pss_operations(c, session, "RSA-4096", 4096); if (!ret) goto out; } out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1022, xtest_pkcs11_test_1022, "PKCS11: RSA PSS key generation and signing"); static const char rsa_oaep_message[] = "Hello World"; static char rsa_oaep_label[] = "TestLabel"; #define RSA_OAEP_CRYPT_TEST(_test_name, _min_rsa_bits, _hash_algo, _mgf_algo, \ _source_data, _source_data_len) \ { \ .test_name = _test_name, \ .min_rsa_bits = _min_rsa_bits, \ .hash_algo = _hash_algo, \ .mgf_algo = _mgf_algo, \ .source_data = _source_data, \ .source_data_len = _source_data_len, \ } /* List of RSA OAEP crypto params to test out */ static struct { const char *test_name; uint32_t min_rsa_bits; CK_MECHANISM_TYPE hash_algo; CK_RSA_PKCS_MGF_TYPE mgf_algo; void *source_data; size_t source_data_len; } rsa_oaep_crypt_tests[] = { RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA1", 1024, CKM_SHA_1, CKG_MGF1_SHA1, NULL, 0), RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA1/label", 1024, CKM_SHA_1, CKG_MGF1_SHA1, rsa_oaep_label, sizeof(rsa_oaep_label)), #ifndef CFG_CRYPTO_SE05X RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA224", 1024, CKM_SHA224, CKG_MGF1_SHA224, NULL, 0), RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA224/label", 1024, CKM_SHA224, CKG_MGF1_SHA224, rsa_oaep_label, sizeof(rsa_oaep_label)), RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA256", 1024, CKM_SHA256, CKG_MGF1_SHA256, NULL, 0), RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA256/label", 1024, CKM_SHA256, CKG_MGF1_SHA256, rsa_oaep_label, sizeof(rsa_oaep_label)), RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA384", 1024, CKM_SHA384, CKG_MGF1_SHA384, NULL, 0), RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA384/label", 1024, CKM_SHA384, CKG_MGF1_SHA384, rsa_oaep_label, sizeof(rsa_oaep_label)), RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA512", 2048, CKM_SHA512, CKG_MGF1_SHA512, NULL, 0), RSA_OAEP_CRYPT_TEST("RSA-OAEP/SHA512/label", 2048, CKM_SHA512, CKG_MGF1_SHA512, rsa_oaep_label, sizeof(rsa_oaep_label)), #endif }; static int test_rsa_oaep_operations(ADBG_Case_t *c, CK_SESSION_HANDLE session, const char *rsa_name, uint32_t rsa_bits) { CK_RV rv = CKR_GENERAL_ERROR; CK_OBJECT_HANDLE public_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE private_key = CK_INVALID_HANDLE; CK_MECHANISM mechanism = { CKM_RSA_PKCS_KEY_PAIR_GEN, NULL, 0 }; CK_MECHANISM crypt_mechanism = { CKM_RSA_PKCS_OAEP, NULL, 0 }; CK_RSA_PKCS_OAEP_PARAMS oaep_params = { CKM_SHA256, CKG_MGF1_SHA256, CKZ_DATA_SPECIFIED, NULL, 0 }; CK_BYTE public_exponent[] = { 1, 0, 1 }; CK_BYTE id[] = { 123 }; CK_ULONG modulus_bits = 0; CK_ATTRIBUTE public_key_template[] = { { CKA_ENCRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_MODULUS_BITS, &modulus_bits, sizeof(modulus_bits) }, { CKA_PUBLIC_EXPONENT, public_exponent, sizeof(public_exponent) } }; CK_ATTRIBUTE private_key_template[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SUBJECT, subject_common_name, sizeof(subject_common_name) }, { CKA_ID, id, sizeof(id) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) } }; CK_OBJECT_CLASS g_class = 0; CK_KEY_TYPE g_key_type = 0; CK_BYTE g_id[32] = { 0 }; CK_DATE g_start_date = { 0 }; CK_DATE g_end_date = { 0 }; CK_BBOOL g_derive = CK_FALSE; CK_BBOOL g_local = CK_FALSE; CK_MECHANISM_TYPE g_keygen_mecha = 0; CK_BYTE g_subject[64] = { 0 }; CK_BBOOL g_encrypt = CK_FALSE; CK_BBOOL g_verify = CK_FALSE; CK_BBOOL g_verify_recover = CK_FALSE; CK_BBOOL g_wrap = CK_FALSE; CK_BBOOL g_trusted = CK_FALSE; CK_BYTE g_public_key_info[1024] = { 0 }; CK_BBOOL g_sensitive = CK_FALSE; CK_BBOOL g_decrypt = CK_FALSE; CK_BBOOL g_sign = CK_FALSE; CK_BBOOL g_sign_recover = CK_FALSE; CK_BBOOL g_unwrap = CK_FALSE; CK_BBOOL g_extract = CK_FALSE; CK_BBOOL g_asensitive = CK_FALSE; CK_BBOOL g_nextract = CK_FALSE; CK_BBOOL g_wrap_with_trusted = CK_FALSE; CK_BBOOL g_always_authenticate = CK_FALSE; /* Note: Tests below expects specific order of elements */ CK_ATTRIBUTE get_public_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_ID, g_id, sizeof(g_id) }, { CKA_START_DATE, &g_start_date, sizeof(g_start_date) }, { CKA_END_DATE, &g_end_date, sizeof(g_end_date) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_KEY_GEN_MECHANISM, &g_keygen_mecha, sizeof(g_keygen_mecha) }, { CKA_SUBJECT, g_subject, sizeof(g_subject) }, { CKA_ENCRYPT, &g_encrypt, sizeof(g_encrypt) }, { CKA_VERIFY, &g_verify, sizeof(g_verify) }, { CKA_VERIFY_RECOVER, &g_verify_recover, sizeof(g_verify_recover) }, { CKA_WRAP, &g_wrap, sizeof(g_wrap) }, { CKA_TRUSTED, &g_trusted, sizeof(g_trusted) }, { CKA_PUBLIC_KEY_INFO, g_public_key_info, sizeof(g_public_key_info) }, }; /* Note: Tests below expects specific order of elements */ CK_ATTRIBUTE get_private_template[] = { { CKA_CLASS, &g_class, sizeof(g_class) }, { CKA_KEY_TYPE, &g_key_type, sizeof(g_key_type) }, { CKA_ID, g_id, sizeof(g_id) }, { CKA_START_DATE, &g_start_date, sizeof(g_start_date) }, { CKA_END_DATE, &g_end_date, sizeof(g_end_date) }, { CKA_DERIVE, &g_derive, sizeof(g_derive) }, { CKA_LOCAL, &g_local, sizeof(g_local) }, { CKA_KEY_GEN_MECHANISM, &g_keygen_mecha, sizeof(g_keygen_mecha) }, { CKA_SUBJECT, g_subject, sizeof(g_subject) }, { CKA_SENSITIVE, &g_sensitive, sizeof(g_sensitive) }, { CKA_DECRYPT, &g_decrypt, sizeof(g_decrypt) }, { CKA_SIGN, &g_sign, sizeof(g_sign) }, { CKA_SIGN_RECOVER, &g_sign_recover, sizeof(g_sign_recover) }, { CKA_UNWRAP, &g_unwrap, sizeof(g_unwrap) }, { CKA_EXTRACTABLE, &g_extract, sizeof(g_extract) }, { CKA_ALWAYS_SENSITIVE, &g_asensitive, sizeof(g_asensitive) }, { CKA_NEVER_EXTRACTABLE, &g_nextract, sizeof(g_nextract) }, { CKA_WRAP_WITH_TRUSTED, &g_wrap_with_trusted, sizeof(g_wrap_with_trusted) }, { CKA_ALWAYS_AUTHENTICATE, &g_always_authenticate, sizeof(g_always_authenticate) }, { CKA_PUBLIC_KEY_INFO, g_public_key_info, sizeof(g_public_key_info) }, }; uint8_t ciphertext[512] = { 0 }; CK_ULONG ciphertext_len = 0; uint8_t plaintext[512] = { 0 }; CK_ULONG plaintext_len = 0; size_t i = 0; Do_ADBG_BeginSubCase(c, "%s: Generate key pair", rsa_name); modulus_bits = rsa_bits; rv = C_GenerateKeyPair(session, &mechanism, public_key_template, ARRAY_SIZE(public_key_template), private_key_template, ARRAY_SIZE(private_key_template), &public_key, &private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; /* reset get public key template */ memset(g_id, 0, sizeof(g_id)); assert(get_public_template[2].type == CKA_ID); get_public_template[2].ulValueLen = sizeof(g_id); memset(g_subject, 0, sizeof(g_subject)); assert(get_public_template[8].type == CKA_SUBJECT); get_public_template[8].ulValueLen = sizeof(g_subject); memset(g_public_key_info, 0, sizeof(g_public_key_info)); assert(get_public_template[14].type == CKA_PUBLIC_KEY_INFO); get_public_template[14].ulValueLen = sizeof(g_public_key_info); rv = C_GetAttributeValue(session, public_key, get_public_template, ARRAY_SIZE(get_public_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_PUBLIC_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_RSA) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_keygen_mecha, ==, CKM_RSA_PKCS_KEY_PAIR_GEN) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_encrypt, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_verify_recover, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_trusted, ==, CK_FALSE)) goto err_destr_obj; /* reset get private key template */ memset(g_id, 0, sizeof(g_id)); assert(get_private_template[2].type == CKA_ID); get_private_template[2].ulValueLen = sizeof(g_id); memset(g_subject, 0, sizeof(g_subject)); assert(get_private_template[8].type == CKA_SUBJECT); get_private_template[8].ulValueLen = sizeof(g_subject); memset(g_public_key_info, 0, sizeof(g_public_key_info)); assert(get_private_template[19].type == CKA_PUBLIC_KEY_INFO); get_private_template[19].ulValueLen = sizeof(g_public_key_info); rv = C_GetAttributeValue(session, private_key, get_private_template, ARRAY_SIZE(get_private_template)); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_class, ==, CKO_PRIVATE_KEY) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_key_type, ==, CKK_RSA) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_derive, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_local, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_keygen_mecha, ==, CKM_RSA_PKCS_KEY_PAIR_GEN) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_decrypt, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_sign_recover, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_unwrap, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_extract, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_asensitive, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_nextract, ==, CK_TRUE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_wrap_with_trusted, ==, CK_FALSE) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, g_always_authenticate, ==, CK_FALSE)) goto err_destr_obj; for (i = 0; i < ARRAY_SIZE(rsa_oaep_crypt_tests); i++) { /* * Note: this order of end/begin here is just to get ADBG * SubCases in sync with error handling. */ Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "%s: Encrypt & decrypt - oneshot - %s", rsa_name, rsa_oaep_crypt_tests[i].test_name); crypt_mechanism.mechanism = CKM_RSA_PKCS_OAEP; crypt_mechanism.pParameter = &oaep_params; crypt_mechanism.ulParameterLen = sizeof(oaep_params); oaep_params.hashAlg = rsa_oaep_crypt_tests[i].hash_algo; oaep_params.mgf = rsa_oaep_crypt_tests[i].mgf_algo; oaep_params.pSourceData = rsa_oaep_crypt_tests[i].source_data; oaep_params.ulSourceDataLen = rsa_oaep_crypt_tests[i].source_data_len; memset(ciphertext, 0, sizeof(ciphertext)); memset(plaintext, 0, sizeof(plaintext)); ciphertext_len = 0; memcpy(plaintext, rsa_oaep_message, sizeof(rsa_oaep_message)); plaintext_len = sizeof(rsa_oaep_message); rv = C_EncryptInit(session, &crypt_mechanism, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Encrypt(session, plaintext, plaintext_len, NULL, &ciphertext_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Encrypt(session, plaintext, plaintext_len, ciphertext, &ciphertext_len); if (rsa_bits >= rsa_oaep_crypt_tests[i].min_rsa_bits) { if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; } else { if (!ADBG_EXPECT_CK_RESULT(c, CKR_DATA_LEN_RANGE, rv)) goto err_destr_obj; continue; } memset(plaintext, 0, sizeof(plaintext)); plaintext_len = 0; rv = C_DecryptInit(session, &crypt_mechanism, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Decrypt(session, ciphertext, ciphertext_len, NULL, &plaintext_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; rv = C_Decrypt(session, ciphertext, ciphertext_len, plaintext, &plaintext_len); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_BUFFER(c, rsa_oaep_message, sizeof(rsa_oaep_message), plaintext, plaintext_len)) goto err_destr_obj; } rv = C_DestroyObject(session, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_pub_obj; rv = C_DestroyObject(session, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err; Do_ADBG_EndSubCase(c, NULL); return 1; err_destr_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, private_key)); err_destr_pub_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, public_key)); err: Do_ADBG_EndSubCase(c, NULL); return 0; } static void xtest_pkcs11_test_1023(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; int ret = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; ret = test_rsa_oaep_operations(c, session, "RSA-1024", 1024); if (!ret) goto out; ret = test_rsa_oaep_operations(c, session, "RSA-2048", 2048); if (!ret) goto out; if (level > 0) { ret = test_rsa_oaep_operations(c, session, "RSA-3072", 3072); if (!ret) goto out; ret = test_rsa_oaep_operations(c, session, "RSA-4096", 4096); if (!ret) goto out; } out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1023, xtest_pkcs11_test_1023, "PKCS11: RSA OAEP key generation and crypto operations"); #ifdef OPENSSL_FOUND static const char x509_example_root_ca[] = "-----BEGIN CERTIFICATE-----\n" "MIICDTCCAZOgAwIBAgIBATAKBggqhkjOPQQDAzA+MQswCQYDVQQGEwJGSTEVMBMG\n" "A1UECgwMTWFudWZhY3R1cmVyMRgwFgYDVQQDDA9FeGFtcGxlIFJvb3QgQ0EwIBcN\n" "MjEwODE0MDc1NTU1WhgPOTk5OTEyMzEyMzU5NTlaMD4xCzAJBgNVBAYTAkZJMRUw\n" "EwYDVQQKDAxNYW51ZmFjdHVyZXIxGDAWBgNVBAMMD0V4YW1wbGUgUm9vdCBDQTB2\n" "MBAGByqGSM49AgEGBSuBBAAiA2IABP6jFf4PuIo0t78AeONf2ENbip4GdG9rfstp\n" "bWMvH/0BIn2ioMbapYSK1WcVlOKUaZRrbRzoYWD7ZpwSYFwtd1XmMQkLJ1baIdrt\n" "jibL9yBCYRJJLsmTHn5UiLCoA2EiFaNjMGEwHQYDVR0OBBYEFApC6125F2th+ujZ\n" "PVxTtsI8llA1MB8GA1UdIwQYMBaAFApC6125F2th+ujZPVxTtsI8llA1MA8GA1Ud\n" "EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMACW\n" "r0/EpTD1uJ9JLsyC8aGP2rSr44J50K6fT0h3LZWMhL5fGkkNTCdmuWbWZznTswIx\n" "APjyNm4f///vWUN3XFd+BRhS2YHR43c0K4oNVyLqigoMoSqu0zXt9Xm+Lsu5iqgJ\n" "NQ==\n" "-----END CERTIFICATE-----\n"; #endif static void xtest_pkcs11_test_1024(ADBG_Case_t *c) { #ifndef OPENSSL_FOUND (void)c; Do_ADBG_Log("OpenSSL not available, skipping X.509 Certificate tests"); #else CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; BIO *x509_bio = NULL; X509 *x509_cert = NULL; uint8_t *x509_cert_der = NULL; int x509_cert_der_size = 0; X509_NAME *x509_subject_name = NULL; uint8_t *x509_subject_name_der = NULL; int x509_subject_name_der_size = 0; X509_NAME *x509_issuer_name = NULL; uint8_t *x509_issuer_name_der = NULL; int x509_issuer_name_der_size = 0; ASN1_INTEGER *x509_serial_number = NULL; uint8_t *x509_serial_number_der = NULL; int x509_serial_number_der_size = 0; uint8_t *p = NULL; CK_BYTE id[] = { 123 }; const char *label = "example-root-ca"; /* Note: Tests below expects specific order of elements */ CK_ATTRIBUTE certificate_object[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_CERTIFICATE }, sizeof(CK_OBJECT_CLASS) }, { CKA_CERTIFICATE_TYPE, &(CK_CERTIFICATE_TYPE){ CKC_X_509 }, sizeof(CK_CERTIFICATE_TYPE) }, { CKA_CERTIFICATE_CATEGORY, &(CK_ULONG){ CK_CERTIFICATE_CATEGORY_UNSPECIFIED }, sizeof(CK_ULONG) }, { CKA_NAME_HASH_ALGORITHM, &(CK_MECHANISM_TYPE){ CKM_SHA_1 }, sizeof(CK_MECHANISM_TYPE) }, { CKA_ID, id, sizeof(id) }, { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, { CKA_VALUE, NULL, 0 }, { CKA_ISSUER, NULL, 0 }, { CKA_SUBJECT, NULL, 0 }, { CKA_SERIAL_NUMBER, NULL, 0 }, }; /* Note: Tests below expects specific order of elements */ CK_ATTRIBUTE certificate_object2[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_CERTIFICATE }, sizeof(CK_OBJECT_CLASS) }, { CKA_CERTIFICATE_TYPE, &(CK_CERTIFICATE_TYPE){ CKC_X_509 }, sizeof(CK_CERTIFICATE_TYPE) }, { CKA_ID, id, sizeof(id) }, { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, { CKA_VALUE, NULL, 0 }, { CKA_ISSUER, NULL, 0 }, { CKA_SUBJECT, NULL, 0 }, { CKA_SERIAL_NUMBER, NULL, 0 }, }; /* Note: Tests below expects specific order of elements */ /* CKA_CERTIFICATE_CATEGORY is specified below with invalid ID */ CK_ATTRIBUTE invalid_category_object[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_CERTIFICATE }, sizeof(CK_OBJECT_CLASS) }, { CKA_CERTIFICATE_TYPE, &(CK_CERTIFICATE_TYPE){ CKC_X_509 }, sizeof(CK_CERTIFICATE_TYPE) }, { CKA_CERTIFICATE_CATEGORY, &(CK_ULONG){ -1 }, sizeof(CK_ULONG) }, { CKA_ID, id, sizeof(id) }, { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, { CKA_VALUE, NULL, 0 }, { CKA_ISSUER, NULL, 0 }, { CKA_SUBJECT, NULL, 0 }, { CKA_SERIAL_NUMBER, NULL, 0 }, }; /* Note: Tests below expects specific order of elements */ /* CKA_CERTIFICATE_CATEGORY is specified below with invalid size */ CK_ATTRIBUTE invalid_category_object2[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_CERTIFICATE }, sizeof(CK_OBJECT_CLASS) }, { CKA_CERTIFICATE_TYPE, &(CK_CERTIFICATE_TYPE){ CKC_X_509 }, sizeof(CK_CERTIFICATE_TYPE) }, { CKA_CERTIFICATE_CATEGORY, &(CK_ULONG){ CK_CERTIFICATE_CATEGORY_UNSPECIFIED }, 0 }, { CKA_ID, id, sizeof(id) }, { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, { CKA_VALUE, NULL, 0 }, { CKA_ISSUER, NULL, 0 }, { CKA_SUBJECT, NULL, 0 }, { CKA_SERIAL_NUMBER, NULL, 0 }, }; /* Note: Tests below expects specific order of elements */ /* CKA_NAME_HASH_ALGORITHM is specified below with invalid size */ CK_ATTRIBUTE invalid_name_hash_alg_size[] = { { CKA_TOKEN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_CERTIFICATE }, sizeof(CK_OBJECT_CLASS) }, { CKA_CERTIFICATE_TYPE, &(CK_CERTIFICATE_TYPE){ CKC_X_509 }, sizeof(CK_CERTIFICATE_TYPE) }, { CKA_NAME_HASH_ALGORITHM, &(CK_MECHANISM_TYPE){ CKM_SHA_1 }, sizeof(CK_MECHANISM_TYPE) - 1 }, { CKA_ID, id, sizeof(id) }, { CKA_LABEL, (CK_UTF8CHAR_PTR)label, strlen(label) }, { CKA_VALUE, NULL, 0 }, { CKA_ISSUER, NULL, 0 }, { CKA_SUBJECT, NULL, 0 }, { CKA_SERIAL_NUMBER, NULL, 0 }, }; CK_OBJECT_HANDLE obj_hdl = CK_INVALID_HANDLE; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; /* Login to Test Token */ rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; Do_ADBG_BeginSubCase(c, "Import X.509 Certificate"); /* Parse PEM to OpenSSL's internal X509 format */ x509_bio = BIO_new_mem_buf(x509_example_root_ca, -1); if (!ADBG_EXPECT_NOT_NULL(c, x509_bio)) goto out; x509_cert = PEM_read_bio_X509(x509_bio, NULL, 0, NULL); if (!ADBG_EXPECT_NOT_NULL(c, x509_cert)) goto out; BIO_free(x509_bio); x509_bio = NULL; /* Make DER version for storing it in token */ x509_cert_der_size = i2d_X509(x509_cert, NULL); if (!ADBG_EXPECT_COMPARE_SIGNED(c, x509_cert_der_size, >, 0)) goto out; x509_cert_der = OPENSSL_malloc(x509_cert_der_size); if (!ADBG_EXPECT_NOT_NULL(c, x509_cert_der)) goto out; p = x509_cert_der; x509_cert_der_size = i2d_X509(x509_cert, &p); if (!ADBG_EXPECT_COMPARE_SIGNED(c, x509_cert_der_size, >, 0)) goto out; /* Extract needed details from certificate */ /* Extract subject name */ x509_subject_name = X509_get_subject_name(x509_cert); if (!ADBG_EXPECT_NOT_NULL(c, x509_subject_name)) goto out; x509_subject_name_der_size = i2d_X509_NAME(x509_subject_name, NULL); if (!ADBG_EXPECT_COMPARE_SIGNED(c, x509_subject_name_der_size, >, 0)) goto out; x509_subject_name_der = OPENSSL_malloc(x509_subject_name_der_size); if (!ADBG_EXPECT_NOT_NULL(c, x509_subject_name_der)) goto out; p = x509_subject_name_der; x509_subject_name_der_size = i2d_X509_NAME(x509_subject_name, &p); if (!ADBG_EXPECT_COMPARE_SIGNED(c, x509_subject_name_der_size, >, 0)) goto out; /* Extract issuer's name */ x509_issuer_name = X509_get_issuer_name(x509_cert); if (!ADBG_EXPECT_NOT_NULL(c, x509_issuer_name)) goto out; x509_issuer_name_der_size = i2d_X509_NAME(x509_issuer_name, NULL); if (!ADBG_EXPECT_COMPARE_SIGNED(c, x509_issuer_name_der_size, >, 0)) goto out; x509_issuer_name_der = OPENSSL_malloc(x509_issuer_name_der_size); if (!ADBG_EXPECT_NOT_NULL(c, x509_issuer_name_der)) goto out; p = x509_issuer_name_der; x509_issuer_name_der_size = i2d_X509_NAME(x509_issuer_name, &p); if (!ADBG_EXPECT_COMPARE_SIGNED(c, x509_issuer_name_der_size, >, 0)) goto out; /* Extract certificate's serial number */ x509_serial_number = X509_get_serialNumber(x509_cert); if (!ADBG_EXPECT_NOT_NULL(c, x509_serial_number)) goto out; x509_serial_number_der_size = i2d_ASN1_INTEGER(x509_serial_number, NULL); if (!ADBG_EXPECT_COMPARE_SIGNED(c, x509_serial_number_der_size, >, 0)) goto out; x509_serial_number_der = OPENSSL_malloc(x509_serial_number_der_size); if (!ADBG_EXPECT_NOT_NULL(c, x509_serial_number_der)) goto out; p = x509_serial_number_der; x509_serial_number_der_size = i2d_ASN1_INTEGER(x509_serial_number, &p); if (!ADBG_EXPECT_COMPARE_SIGNED(c, x509_serial_number_der_size, >, 0)) goto out; /* Create the actual object in session */ assert(certificate_object[7].type == CKA_VALUE); certificate_object[7].pValue = x509_cert_der; certificate_object[7].ulValueLen = x509_cert_der_size; assert(certificate_object[8].type == CKA_ISSUER); certificate_object[8].pValue = x509_issuer_name_der; certificate_object[8].ulValueLen = x509_issuer_name_der_size; assert(certificate_object[9].type == CKA_SUBJECT); certificate_object[9].pValue = x509_subject_name_der; certificate_object[9].ulValueLen = x509_subject_name_der_size; assert(certificate_object[10].type == CKA_SERIAL_NUMBER); certificate_object[10].pValue = x509_serial_number_der; certificate_object[10].ulValueLen = x509_serial_number_der_size; rv = C_CreateObject(session, certificate_object, ARRAY_SIZE(certificate_object), &obj_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DestroyObject(session, obj_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Import X.509 Certificate with default values"); /* Create the actual object in session */ assert(certificate_object2[5].type == CKA_VALUE); certificate_object2[5].pValue = x509_cert_der; certificate_object2[5].ulValueLen = x509_cert_der_size; assert(certificate_object2[6].type == CKA_ISSUER); certificate_object2[6].pValue = x509_issuer_name_der; certificate_object2[6].ulValueLen = x509_issuer_name_der_size; assert(certificate_object2[7].type == CKA_SUBJECT); certificate_object2[7].pValue = x509_subject_name_der; certificate_object2[7].ulValueLen = x509_subject_name_der_size; assert(certificate_object2[8].type == CKA_SERIAL_NUMBER); certificate_object2[8].pValue = x509_serial_number_der; certificate_object2[8].ulValueLen = x509_serial_number_der_size; rv = C_CreateObject(session, certificate_object2, ARRAY_SIZE(certificate_object2), &obj_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_DestroyObject(session, obj_hdl); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Try import with invalid category"); /* Create the actual object in session */ assert(invalid_category_object[6].type == CKA_VALUE); invalid_category_object[6].pValue = x509_cert_der; invalid_category_object[6].ulValueLen = x509_cert_der_size; assert(invalid_category_object[7].type == CKA_ISSUER); invalid_category_object[7].pValue = x509_issuer_name_der; invalid_category_object[7].ulValueLen = x509_issuer_name_der_size; assert(invalid_category_object[8].type == CKA_SUBJECT); invalid_category_object[8].pValue = x509_subject_name_der; invalid_category_object[8].ulValueLen = x509_subject_name_der_size; assert(invalid_category_object[9].type == CKA_SERIAL_NUMBER); invalid_category_object[9].pValue = x509_serial_number_der; invalid_category_object[9].ulValueLen = x509_serial_number_der_size; rv = C_CreateObject(session, invalid_category_object, ARRAY_SIZE(invalid_category_object), &obj_hdl); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_VALUE_INVALID, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Try import with invalid category size"); /* Create the actual object in session */ assert(invalid_category_object2[6].type == CKA_VALUE); invalid_category_object2[6].pValue = x509_cert_der; invalid_category_object2[6].ulValueLen = x509_cert_der_size; assert(invalid_category_object2[7].type == CKA_ISSUER); invalid_category_object2[7].pValue = x509_issuer_name_der; invalid_category_object2[7].ulValueLen = x509_issuer_name_der_size; assert(invalid_category_object2[8].type == CKA_SUBJECT); invalid_category_object2[8].pValue = x509_subject_name_der; invalid_category_object2[8].ulValueLen = x509_subject_name_der_size; assert(invalid_category_object2[9].type == CKA_SERIAL_NUMBER); invalid_category_object2[9].pValue = x509_serial_number_der; invalid_category_object2[9].ulValueLen = x509_serial_number_der_size; rv = C_CreateObject(session, invalid_category_object2, ARRAY_SIZE(invalid_category_object2), &obj_hdl); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_VALUE_INVALID, rv)) goto out; Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Try import with invalid name hash alg size"); /* Create the actual object in session */ assert(invalid_name_hash_alg_size[6].type == CKA_VALUE); invalid_name_hash_alg_size[6].pValue = x509_cert_der; invalid_name_hash_alg_size[6].ulValueLen = x509_cert_der_size; assert(invalid_name_hash_alg_size[7].type == CKA_ISSUER); invalid_name_hash_alg_size[7].pValue = x509_issuer_name_der; invalid_name_hash_alg_size[7].ulValueLen = x509_issuer_name_der_size; assert(invalid_name_hash_alg_size[8].type == CKA_SUBJECT); invalid_name_hash_alg_size[8].pValue = x509_subject_name_der; invalid_name_hash_alg_size[8].ulValueLen = x509_subject_name_der_size; assert(invalid_name_hash_alg_size[9].type == CKA_SERIAL_NUMBER); invalid_name_hash_alg_size[9].pValue = x509_serial_number_der; invalid_name_hash_alg_size[9].ulValueLen = x509_serial_number_der_size; rv = C_CreateObject(session, invalid_name_hash_alg_size, ARRAY_SIZE(invalid_name_hash_alg_size), &obj_hdl); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_VALUE_INVALID, rv)) goto out; out: OPENSSL_free(x509_serial_number_der); OPENSSL_free(x509_issuer_name_der); OPENSSL_free(x509_subject_name_der); OPENSSL_free(x509_cert_der); X509_free(x509_cert); BIO_free(x509_bio); Do_ADBG_EndSubCase(c, NULL); close_session: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); #endif } ADBG_CASE_DEFINE(pkcs11, 1024, xtest_pkcs11_test_1024, "PKCS11: X509 Certificate operations"); #define CKTEST_EDDSA_CTX_TEST(_ec_params, _vect, _flag) { \ .ec_params = _ec_params, \ .ec_params_len = ARRAY_SIZE(_ec_params), \ .message = _vect ##_ptx, \ .message_len = ARRAY_SIZE(_vect ##_ptx), \ .private = _vect ##_private, \ .private_len = ARRAY_SIZE(_vect ##_private), \ .public = _vect ##_public, \ .public_len = ARRAY_SIZE(_vect ##_public), \ .ph_flag = _flag, \ .context = _vect ## _context, \ .context_len = ARRAY_SIZE(_vect ##_context), \ } #define CKTEST_EDDSA_TEST(_ec_params, _vect, _flag) { \ .ec_params = _ec_params, \ .ec_params_len = ARRAY_SIZE(_ec_params), \ .message = _vect ##_ptx, \ .message_len = ARRAY_SIZE(_vect ##_ptx), \ .private = _vect ##_private, \ .private_len = ARRAY_SIZE(_vect ##_private), \ .public = _vect ##_public, \ .public_len = ARRAY_SIZE(_vect ##_public), \ .ph_flag = _flag, \ } #define CKTEST_EDDSA_KEY_GEN_TEST(_ec_params, _msg, _context, _flag) { \ .ec_params = _ec_params, \ .ec_params_len = ARRAY_SIZE(_ec_params), \ .message = (const uint8_t *)_msg, \ .message_len = strlen(_msg), \ .context = (const uint8_t *)_context, \ .context_len = strlen(_context), \ } \ struct eddsa_test { CK_BYTE *ec_params; size_t ec_params_len; const uint8_t *message; size_t message_len; const uint8_t *private; size_t private_len; const uint8_t *public; size_t public_len; const bool ph_flag; const uint8_t *context; size_t context_len; }; static CK_BYTE ed25519_params[] = { 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xda, 0x47, 0x0f, 0x01, }; static struct eddsa_test eddsa_sign_tests[] = { CKTEST_EDDSA_KEY_GEN_TEST(ed25519_params, "Ed25519 test message", "", 0), CKTEST_EDDSA_KEY_GEN_TEST(ed25519_params, "Ed25519ctx test message", "Ed25519 context", 0), CKTEST_EDDSA_KEY_GEN_TEST(ed25519_params, "Ed25519ph test message", "", 1), CKTEST_EDDSA_TEST(ed25519_params, ed25519_rfc_8032_7_1, 0), CKTEST_EDDSA_CTX_TEST(ed25519_params, ed25519ctx_rfc_8032_7_2, 0), CKTEST_EDDSA_TEST(ed25519_params, ed25519ph_rfc_8032_7_3, 1), }; static void xtest_pkcs11_test_1025(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_OBJECT_HANDLE public_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE private_key = CK_INVALID_HANDLE; size_t i = 0; struct eddsa_test *test = NULL; char sign[64] = { }; CK_EDDSA_PARAMS eddsa_params = { }; CK_ULONG sign_len = ARRAY_SIZE(sign); CK_MECHANISM gen_mechanism = { .mechanism = CKM_EC_EDWARDS_KEY_PAIR_GEN, .pParameter = NULL, .ulParameterLen = 0, }; CK_MECHANISM sign_mechanism = { CKM_EDDSA, &eddsa_params, sizeof(eddsa_params), }; CK_ATTRIBUTE public_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_PUBLIC_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_EC_EDWARDS }, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EC_PARAMS, NULL, 0 }, { CKA_EC_POINT, NULL, 0 }, }; CK_ATTRIBUTE private_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_PRIVATE_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_EC_EDWARDS }, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DERIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_VALUE, NULL, 0 }, { CKA_EC_POINT, NULL, 0 }, }; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_close_lib; for (i = 0; i < ARRAY_SIZE(eddsa_sign_tests); i++) { test = &eddsa_sign_tests[i]; eddsa_params.phFlag = test->ph_flag; eddsa_params.pContextData = (uint8_t *)test->context; eddsa_params.ulContextDataLen = test->context_len; assert(public_key_template[4].type == CKA_EC_PARAMS); public_key_template[4].pValue = test->ec_params; public_key_template[4].ulValueLen = test->ec_params_len; if (test->private) { assert(public_key_template[5].type == CKA_EC_POINT); public_key_template[5].pValue = (CK_VOID_PTR)test->public; public_key_template[5].ulValueLen = test->public_len; assert(private_key_template[6].type == CKA_VALUE); private_key_template[6].pValue = (CK_VOID_PTR)test->private; private_key_template[6].ulValueLen = test->private_len; assert(private_key_template[7].type == CKA_EC_POINT); private_key_template[7].pValue = (CK_VOID_PTR)test->public; private_key_template[7].ulValueLen = test->public_len; rv = C_CreateObject(session, public_key_template, ARRAY_SIZE(public_key_template), &public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_close_sess; rv = C_CreateObject(session, private_key_template, ARRAY_SIZE(private_key_template), &private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) { C_DestroyObject(session, public_key); goto err_close_sess; } } else { rv = C_GenerateKeyPair(session, &gen_mechanism, public_key_template, ARRAY_SIZE(public_key_template), private_key_template, ARRAY_SIZE(private_key_template), &public_key, &private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_close_sess; } rv = C_SignInit(session, &sign_mechanism, private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destroy_keys; rv = C_Sign(session, (CK_BYTE_PTR)test->message, test->message_len, (CK_BYTE_PTR)sign, &sign_len); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destroy_keys; rv = C_VerifyInit(session, &sign_mechanism, public_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destroy_keys; rv = C_Verify(session, (CK_BYTE_PTR)test->message, test->message_len, (CK_BYTE_PTR)sign, sign_len); ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, private_key)); ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, public_key)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_close_sess; } ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); ADBG_EXPECT_CK_OK(c, close_lib()); return; err_destroy_keys: C_DestroyObject(session, private_key); C_DestroyObject(session, public_key); err_close_sess: C_CloseSession(session); err_close_lib: close_lib(); } ADBG_CASE_DEFINE(pkcs11, 1025, xtest_pkcs11_test_1025, "PKCS11: EDDSA key generation and signing"); #define RSA_AES_MAX_KEY_SIZE 32 #define RSA_AES_WRAP_KEY(vect) \ { \ .modulus = vect ## _modulus, \ .modulus_len = ARRAY_SIZE(vect ## _modulus), \ .pub_exp = vect ## _pub_exp, \ .pub_exp_len = ARRAY_SIZE(vect ## _pub_exp), \ .priv_exp = vect ## _priv_exp, \ .priv_exp_len = ARRAY_SIZE(vect ## _priv_exp), \ .prime1 = vect ## _prime1, \ .prime1_len = ARRAY_SIZE(vect ## _prime1), \ .prime2 = vect ## _prime2, \ .prime2_len = ARRAY_SIZE(vect ## _prime2), \ } #define RSA_AES_WRAP_RSA(vect) \ { .rsa = RSA_AES_WRAP_KEY(vect) } #define RSA_AES_WRAP_AES(_size) { .aes = { .size = (_size) } } static struct rsa_aes_wrap_test { CK_KEY_TYPE target_type; union { struct { const uint8_t *modulus; size_t modulus_len; const uint8_t *pub_exp; size_t pub_exp_len; const uint8_t *priv_exp; size_t priv_exp_len; const uint8_t *prime1; size_t prime1_len; const uint8_t *prime2; size_t prime2_len; } rsa; struct { CK_ULONG size; } aes; } target; struct { const uint8_t *modulus; size_t modulus_len; const uint8_t *pub_exp; size_t pub_exp_len; const uint8_t *priv_exp; size_t priv_exp_len; const uint8_t *prime1; size_t prime1_len; const uint8_t *prime2; size_t prime2_len; } key; } rsa_aes_wrap_tests[] = { { CKK_AES, RSA_AES_WRAP_AES(128), RSA_AES_WRAP_KEY(ac_rsassa_vect2) }, { CKK_AES, RSA_AES_WRAP_AES(256), RSA_AES_WRAP_KEY(ac_rsassa_vect18) }, { CKK_AES, RSA_AES_WRAP_AES(192), RSA_AES_WRAP_KEY(ac_rsassa_vect19) }, { CKK_RSA, RSA_AES_WRAP_RSA(ac_rsassa_vect1), RSA_AES_WRAP_KEY(ac_rsassa_vect2) }, { CKK_RSA, RSA_AES_WRAP_RSA(ac_rsassa_vect1), RSA_AES_WRAP_KEY(ac_rsassa_vect19) }, { CKK_RSA, RSA_AES_WRAP_RSA(ac_rsassa_vect2), RSA_AES_WRAP_KEY(ac_rsassa_vect18) }, { CKK_RSA, RSA_AES_WRAP_RSA(ac_rsassa_vect18), RSA_AES_WRAP_KEY(ac_rsassa_vect2) }, { CKK_RSA, RSA_AES_WRAP_RSA(ac_rsassa_vect19), RSA_AES_WRAP_KEY(ac_rsassa_vect2) }, { CKK_RSA, RSA_AES_WRAP_RSA(ac_rsassa_vect19), RSA_AES_WRAP_KEY(ac_rsassa_vect18) }, { CKK_RSA, RSA_AES_WRAP_RSA(ac_rsassa_vect18), RSA_AES_WRAP_KEY(ac_rsassa_vect19) }, }; static CK_RV test_rsa_aes_wrap(ADBG_Case_t *c, CK_SESSION_HANDLE session, struct rsa_aes_wrap_test *t) { CK_RV rv = CKR_GENERAL_ERROR; CK_OBJECT_HANDLE wrapping_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE unwrapping_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE target_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE unwrapped_key = CK_INVALID_HANDLE; CK_ULONG target_size = t->target_type == CKK_AES ? t->target.aes.size / 8 : t->target.rsa.modulus_len; CK_ULONG target_bits = target_size * 8; CK_ATTRIBUTE wrapping_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_PUBLIC_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_RSA }, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_VERIFY, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_MODULUS, (CK_VOID_PTR)t->key.modulus, t->key.modulus_len }, { CKA_PUBLIC_EXPONENT, (CK_VOID_PTR)t->key.pub_exp, t->key.pub_exp_len }, }; CK_ATTRIBUTE unwrapping_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_PRIVATE_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_RSA }, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_MODULUS, (CK_VOID_PTR)t->key.modulus, t->key.modulus_len }, { CKA_PRIVATE_EXPONENT, (CK_VOID_PTR)t->key.priv_exp, t->key.priv_exp_len }, { CKA_PUBLIC_EXPONENT, (CK_VOID_PTR)t->key.pub_exp, t->key.pub_exp_len }, { CKA_PRIME_1, (CK_VOID_PTR)t->key.prime1, t->key.prime1_len }, { CKA_PRIME_2, (CK_VOID_PTR)t->key.prime2, t->key.prime2_len }, }; CK_ATTRIBUTE aes_key_template[] = { { CKA_VALUE_LEN, &target_size, sizeof(CK_ULONG) }, { CKA_ENCRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE target_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_PRIVATE_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_RSA }, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_MODULUS, (CK_VOID_PTR)t->target.rsa.modulus, t->target.rsa.modulus_len }, { CKA_PRIVATE_EXPONENT, (CK_VOID_PTR)t->target.rsa.priv_exp, t->target.rsa.priv_exp_len }, { CKA_PUBLIC_EXPONENT, (CK_VOID_PTR)t->target.rsa.pub_exp, t->target.rsa.pub_exp_len }, { CKA_PRIME_1, (CK_VOID_PTR)t->target.rsa.prime1, t->target.rsa.prime1_len }, { CKA_PRIME_2, (CK_VOID_PTR)t->target.rsa.prime2, t->target.rsa.prime2_len }, }; CK_ATTRIBUTE unwrapped_aes_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_GENERIC_SECRET }, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE unwrapped_rsa_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_PRIVATE_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_RSA }, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE}, sizeof(CK_BBOOL) }, }; CK_ATTRIBUTE *unwrapped_key_template = (t->target_type == CKK_AES) ? unwrapped_aes_key_template : unwrapped_rsa_key_template; CK_ULONG unwrapped_key_template_size = t->target_type == CKK_AES ? ARRAY_SIZE(unwrapped_aes_key_template) : ARRAY_SIZE(unwrapped_rsa_key_template); CK_RSA_PKCS_OAEP_PARAMS oaep_params = { CKM_SHA256, CKG_MGF1_SHA256, CKZ_DATA_SPECIFIED, NULL, 0, }; CK_RSA_AES_KEY_WRAP_PARAMS rsa_aes_params = { 256, &oaep_params, }; CK_MECHANISM rsa_aes_key_wrap_mechanism = { CKM_RSA_AES_KEY_WRAP, &rsa_aes_params, sizeof(rsa_aes_params), }; CK_BYTE aes_val[RSA_AES_MAX_KEY_SIZE] = { 0 }; CK_ULONG key_len = 0; CK_ATTRIBUTE aes_get_template[] = { { CKA_VALUE_LEN, &key_len, sizeof(key_len) }, { CKA_VALUE, aes_val, sizeof(aes_val) }, }; CK_BYTE unwrapped_val[RSA_AES_MAX_KEY_SIZE] = { 0 }; CK_ULONG unwrapped_key_len = 0; CK_ATTRIBUTE aes_get_template_unwrapped[] = { { CKA_VALUE_LEN, &unwrapped_key_len, sizeof(unwrapped_key_len) }, { CKA_VALUE, unwrapped_val, sizeof(unwrapped_val) }, }; CK_BYTE unwrapped_rsa_modulus[512] = { 0 }; CK_BYTE unwrapped_rsa_private_exponent[512] = { 0 }; CK_ATTRIBUTE rsa_template_unwrapped[] = { { CKA_MODULUS, NULL, 0 }, { CKA_MODULUS, unwrapped_rsa_modulus, sizeof(unwrapped_rsa_modulus) }, { CKA_PRIVATE_EXPONENT, NULL, 0 }, { CKA_PRIVATE_EXPONENT, unwrapped_rsa_private_exponent, sizeof(unwrapped_rsa_private_exponent) }, }; CK_BYTE buf[5120] = { 0 }; CK_ULONG size = 0; assert(t != NULL); assert(t->target_type == CKK_RSA || t->target_type == CKK_AES); Do_ADBG_BeginSubCase(c, "Test RSA AES wrap/unwrap of %lu %s key with %zu RSA", target_bits, (t->target_type == CKK_AES) ? "AES" : "RSA", t->key.modulus_len * 8); rv = C_CreateObject(session, wrapping_key_template, ARRAY_SIZE(wrapping_key_template), &wrapping_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_CreateObject(session, unwrapping_key_template, ARRAY_SIZE(unwrapping_key_template), &unwrapping_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (t->target_type == CKK_AES) { rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, aes_key_template, ARRAY_SIZE(aes_key_template), &target_key); } else { rv = C_CreateObject(session, target_key_template, ARRAY_SIZE(target_key_template), &target_key); } if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; size = sizeof(buf); rv = C_WrapKey(session, &rsa_aes_key_wrap_mechanism, wrapping_key, target_key, buf, &size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, size, <=, sizeof(buf))) { rv = CKR_ENCRYPTED_DATA_INVALID; goto out; } if (t->target_type == CKK_AES) { rv = C_GetAttributeValue(session, target_key, aes_get_template, ARRAY_SIZE(aes_get_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; } rv = C_UnwrapKey(session, &rsa_aes_key_wrap_mechanism, unwrapping_key, buf, size, unwrapped_key_template, unwrapped_key_template_size, &unwrapped_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (t->target_type == CKK_AES) { rv = C_GetAttributeValue(session, unwrapped_key, aes_get_template_unwrapped, ARRAY_SIZE(aes_get_template_unwrapped)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_BUFFER(c, unwrapped_val, unwrapped_key_len, aes_val, key_len)) { rv = CKR_DATA_INVALID; goto out; } } else { rv = C_GetAttributeValue(session, unwrapped_key, rsa_template_unwrapped, ARRAY_SIZE(rsa_template_unwrapped)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; if (!ADBG_EXPECT_BUFFER(c, t->target.rsa.modulus, t->target.rsa.modulus_len, unwrapped_rsa_modulus, rsa_template_unwrapped[0].ulValueLen) || !ADBG_EXPECT_BUFFER(c, t->target.rsa.priv_exp, t->target.rsa.priv_exp_len, unwrapped_rsa_private_exponent, rsa_template_unwrapped[2].ulValueLen)) { rv = CKR_DATA_INVALID; goto out; } } out: if (unwrapped_key != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, unwrapped_key)); if (target_key != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, target_key)); if (unwrapping_key != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, unwrapping_key)); if (wrapping_key != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, wrapping_key)); Do_ADBG_EndSubCase(c, NULL); return rv; } static void xtest_pkcs11_test_1026(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE private_key = CK_INVALID_HANDLE; CK_OBJECT_HANDLE unwrapped_key = CK_INVALID_HANDLE; CK_ATTRIBUTE key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_GENERIC_SECRET }, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE}, sizeof(CK_BBOOL) }, }; CK_RSA_PKCS_OAEP_PARAMS oaep_params = { CKM_SHA256, CKG_MGF1_SHA256, CKZ_DATA_SPECIFIED, NULL, 0, }; CK_RSA_AES_KEY_WRAP_PARAMS rsa_aes_params = { 256, &oaep_params, }; CK_MECHANISM rsa_aes_key_wrap_mechanism = { CKM_RSA_AES_KEY_WRAP, &rsa_aes_params, sizeof(rsa_aes_params), }; uint8_t unwrapped_val[RSA_AES_MAX_KEY_SIZE] = { 0 }; CK_ULONG unwrapped_key_len = 0; CK_ATTRIBUTE get_template_unwrapped[] = { { CKA_VALUE_LEN, &unwrapped_key_len, sizeof(unwrapped_key_len) }, { CKA_VALUE, unwrapped_val, sizeof(unwrapped_val) }, }; CK_ULONG i = 0; CK_ATTRIBUTE private_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_PRIVATE_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_RSA }, sizeof(CK_KEY_TYPE) }, { CKA_TOKEN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SIGN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_MODULUS, (CK_VOID_PTR)ac_rsassa_vect2_modulus, sizeof(ac_rsassa_vect2_modulus) }, { CKA_PRIVATE_EXPONENT, (CK_VOID_PTR)ac_rsassa_vect2_priv_exp, sizeof(ac_rsassa_vect2_priv_exp) }, { CKA_PUBLIC_EXPONENT, (CK_VOID_PTR)ac_rsassa_vect2_pub_exp, sizeof(ac_rsassa_vect2_pub_exp) }, { CKA_PRIME_1, (CK_VOID_PTR)ac_rsassa_vect2_prime1, sizeof(ac_rsassa_vect2_prime1) }, { CKA_PRIME_2, (CK_VOID_PTR)ac_rsassa_vect2_prime2, sizeof(ac_rsassa_vect2_prime2) }, }; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = init_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = init_user_test_token_pin_auth(slot); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_lib; rv = C_Login(session, CKU_USER, test_token_user_pin, sizeof(test_token_user_pin)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto close_session; for (i = 0; i < ARRAY_SIZE(rsa_aes_wrap_tests); i++) { rv = test_rsa_aes_wrap(c, session, &rsa_aes_wrap_tests[i]); if (rv != CKR_OK) goto logout; } Do_ADBG_BeginSubCase(c, "Test external key unwrap with RSA AES"); rv = C_CreateObject(session, private_key_template, ARRAY_SIZE(private_key_template), &private_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_UnwrapKey(session, &rsa_aes_key_wrap_mechanism, private_key, (CK_VOID_PTR)pkcs11_rsa_aes_wrapped_key, ARRAY_SIZE(pkcs11_rsa_aes_wrapped_key), key_template, ARRAY_SIZE(key_template), &unwrapped_key); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; rv = C_GetAttributeValue(session, unwrapped_key, get_template_unwrapped, ARRAY_SIZE(get_template_unwrapped)); ADBG_EXPECT_CK_OK(c, rv); ADBG_EXPECT_BUFFER(c, unwrapped_val, unwrapped_key_len, pkcs11_rsa_aes_tagret_key, ARRAY_SIZE(pkcs11_rsa_aes_tagret_key)); out: if (unwrapped_key != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, unwrapped_key)); if (private_key != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, private_key)); Do_ADBG_EndSubCase(c, NULL); logout: ADBG_EXPECT_CK_OK(c, C_Logout(session)); close_session: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1026, xtest_pkcs11_test_1026, "PKCS11: RSA AES Key Wrap/Unwrap tests"); #ifdef OPENSSL_FOUND static CK_RV test_login_logout_acl_auth(ADBG_Case_t *c, CK_SLOT_ID slot) { CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_RV rv = CKR_GENERAL_ERROR; Do_ADBG_BeginSubCase(c, "Test C_Login()/C_Logout() with ACL based authentication"); rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Logout: should fail as we did not log in yet */ rv = C_Logout(session); ADBG_EXPECT_CK_RESULT(c, CKR_USER_NOT_LOGGED_IN, rv); /* Login/re-log/logout user */ rv = C_Login(session, CKU_USER, NULL, 0); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_close; rv = C_Login(session, CKU_USER, NULL, 0); ADBG_EXPECT_CK_RESULT(c, CKR_USER_ALREADY_LOGGED_IN, rv); rv = C_Logout(session); ADBG_EXPECT_CK_OK(c, rv); out_close: C_CloseSession(session); out: Do_ADBG_EndSubCase(c, "Test C_Login()/C_Logout() with ACL based authentication"); return rv; } #endif /*OPENSSL_FOUND*/ #define GID_STR_LEN 13 static void xtest_pkcs11_test_1027(ADBG_Case_t *c) { #ifdef OPENSSL_FOUND CK_RV rv = CKR_GENERAL_ERROR; CK_FUNCTION_LIST_PTR ckfunc_list = NULL; CK_SLOT_ID slot = 0; CK_TOKEN_INFO token_info = { 0 }; char gid_str[GID_STR_LEN] = { 0 }; int str_len = 0; rv = C_GetFunctionList(&ckfunc_list); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_InitToken) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_InitPIN) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_Login) || !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_Logout)) { Do_ADBG_Log(" - 1027 - skip test, ckfunc_list not found"); return; } if (!ADBG_EXPECT_TRUE(c, !setenv("CKTEEC_LOGIN_TYPE", "user", 1))) return; rv = init_lib_and_find_token_slot(&slot, ACL_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_GetTokenInfo(slot, &token_info); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; /* Abort test if token is about to lock */ if (!ADBG_EXPECT_TRUE(c, !(token_info.flags & CKF_SO_PIN_FINAL_TRY))) goto out; if (!(token_info.flags & CKF_TOKEN_INITIALIZED)) { rv = test_uninitialized_token(c, slot, ACL_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out; } /* * The current connection is closed and a new CKU_USER connection will be opened. */ rv = close_lib(); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_unsetenv; if (!ADBG_EXPECT_TRUE(c, !setenv("CKTEEC_LOGIN_TYPE", "group", 1))) goto out_unsetenv; str_len = snprintf(gid_str, sizeof(gid_str), "%d", getegid()); if (!ADBG_EXPECT_COMPARE_SIGNED(c, str_len, >=, 0)) goto out_unsetenv; if (!ADBG_EXPECT_COMPARE_SIGNED(c, str_len, <, (int)sizeof(gid_str))) goto out_unsetenv; if (!ADBG_EXPECT_TRUE(c, !setenv("CKTEEC_LOGIN_GID", gid_str, 1))) goto out_unsetenv; rv = init_lib_and_find_token_slot(&slot, ACL_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_unsetenv; rv = test_login_logout_acl_auth(c, slot); ADBG_EXPECT_CK_OK(c, rv); out: rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); out_unsetenv: ADBG_EXPECT_TRUE(c, !unsetenv("CKTEEC_LOGIN_TYPE")); ADBG_EXPECT_TRUE(c, !unsetenv("CKTEEC_LOGIN_GID")); #else /*!OPENSSL_FOUND*/ UNUSED(c); /* xtest_uuid_v5() depends on OpenSSL */ Do_ADBG_Log("OpenSSL not available, skipping test 1027"); #endif /*OPENSSL_FOUND*/ } ADBG_CASE_DEFINE(pkcs11, 1027, xtest_pkcs11_test_1027, "PKCS11: Login to PKCS#11 token with ACL based authentication"); int xtest_pkcs11_1028_destroy_token_object(void) { /* These attributes match cktest_token_object which is to find */ CK_ATTRIBUTE find_token_template[] = { { CKA_DECRYPT, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_TOKEN, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_MODIFIABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_AES }, sizeof(CK_KEY_TYPE) }, }; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_OBJECT_HANDLE obj_handle[2] = { }; CK_RV rv = CKR_GENERAL_ERROR; CK_ULONG hdl_count = 0; CK_ULONG obj_size = 0; CK_SLOT_ID slot = 0; int ret = 1; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (rv != CKR_OK) return 1; rv = C_OpenSession(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, 0, &session); if (rv != CKR_OK) goto out_lib; /* * We expect to find a single matching object so that it is * the very one we're about to destroy. */ rv = C_FindObjectsInit(session, find_token_template, ARRAY_SIZE(find_token_template)); if (rv != CKR_OK) goto out_session; rv = C_FindObjects(session, obj_handle, ARRAY_SIZE(obj_handle), &hdl_count); if (rv != CKR_OK || hdl_count != 1) goto out_session; rv = C_FindObjectsFinal(session); if (rv != CKR_OK) goto out_session; /* Session B destroys the token object, session A shall not reach it */ rv = C_DestroyObject(session, obj_handle[0]); if (rv != CKR_OK) goto out_session; rv = C_GetObjectSize(session, obj_handle[0], &obj_size); if (rv == CKR_OBJECT_HANDLE_INVALID) ret = 0; out_session: C_CloseSession(session); out_lib: close_lib(); return ret; } /* * This test involves 2 client sessions towards the PKCS11 token. * * Session A (implementation below) creates a token object then executes an * application that opens session B to destroy the object after what session A * gets a invalid object handle result when reusing its object handle. * * Session B sequence is implemented by function * xtest_pkcs11_1028_destroy_token_object() that must be called from another * process so that cryptoki library sees it as a different client and * generates another handle for the same object. */ static void xtest_pkcs11_test_1028(ADBG_Case_t *c) { CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_OBJECT_HANDLE obj_handle = CK_INVALID_HANDLE; CK_RV rv = CKR_GENERAL_ERROR; CK_ULONG obj_size = 0; CK_SLOT_ID slot = 0; char cmd_opt[] = "--pkcs11-1028-destroy-token-object"; char *cmdline = NULL; int cmdline_size = 0; int ret = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; cmdline_size = snprintf(NULL, 0, "%s %s", xtest_progname, cmd_opt) + 1; if (!ADBG_EXPECT_COMPARE_SIGNED(c, cmdline_size, >, 0)) goto out_lib; cmdline = malloc(cmdline_size); if (!ADBG_EXPECT_NOT_NULL(c, cmdline)) goto out_lib; snprintf(cmdline, cmdline_size, "%s %s", xtest_progname, cmd_opt); /* Session A creates a token object */ rv = C_OpenSession(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_lib; rv = C_CreateObject(session, cktest_token_object, ARRAY_SIZE(cktest_token_object), &obj_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_session; rv = C_GetObjectSize(session, obj_handle, &obj_size); if (!ADBG_EXPECT_CK_OK(c, rv)) { rv = C_DestroyObject(session, obj_handle); ADBG_EXPECT_CK_OK(c, rv); goto out_session; } ret = system(cmdline); ADBG_EXPECT(c, ret, 0); /* Session B has deleted the object: session A handle shall no more be valid */ rv = C_GetObjectSize(session, obj_handle, &obj_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OBJECT_HANDLE_INVALID, rv)) { rv = C_DestroyObject(session, obj_handle); ADBG_EXPECT_CK_OK(c, rv); } out_session: rv = C_CloseSession(session); ADBG_EXPECT_CK_OK(c, rv); out_lib: rv = close_lib(); ADBG_EXPECT_CK_OK(c, rv); free(cmdline); } ADBG_CASE_DEFINE(pkcs11, 1028, xtest_pkcs11_test_1028, "PKCS11: destroy PKCS#11 objects handled by another session"); /* * This test involves PKCS11_CKA_CHECK_VALUE when enabled, as per the spec, * the attribute can be either the legitimate value recomputed by the PKCS#11 * token or a zero-sized value called a no-value for when client does not want * the attribute to set in an object. This test invokes Cryptoki API functions * C_GenerateKey(), C_CreateObject(), C_CopyObject(), C_SetAttributeValue(), * C_UnwrapKey() and C_DeriveKey() to perform check value computation and * This test query the value using C_GetAttributeValue(). */ static void xtest_pkcs11_test_1029(ADBG_Case_t *c) { CK_RV rv = CKR_GENERAL_ERROR; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION; CK_OBJECT_HANDLE key_handle = CK_INVALID_HANDLE; CK_OBJECT_HANDLE key_handle_cp = CK_INVALID_HANDLE; CK_OBJECT_HANDLE unwrapped_key_handle = CK_INVALID_HANDLE; CK_OBJECT_HANDLE derived_key_handle = CK_INVALID_HANDLE; uint8_t ciphertext[16] = { 0 }; CK_ULONG ciphertext_len = 0; uint8_t plaintext[16] = { 0 }; CK_BYTE kcv[3] = { 0 }; CK_BYTE import_aes128_key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; CK_BYTE import_aes128_kcv_valid[] = { 0x08, 0xbd, 0x28 }; CK_BYTE import_aes128_kcv_invalid[] = { 0xba, 0xaa, 0xad }; CK_BYTE unwrapped_key_kcv_valid[] = { 0xa2, 0x25, 0x17 }; CK_ATTRIBUTE import_aes_key_template[] = { { CKA_TOKEN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DERIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VALUE, &import_aes128_key, sizeof(import_aes128_key) }, { CKA_CHECK_VALUE, &import_aes128_kcv_valid, sizeof(import_aes128_kcv_valid) }, }; CK_ATTRIBUTE import_aes_key_template_novalue[] = { { CKA_TOKEN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DERIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VALUE, &import_aes128_key, sizeof(import_aes128_key) }, { CKA_CHECK_VALUE, NULL, 0 }, }; CK_ATTRIBUTE import_aes_key_template_invalid[] = { { CKA_TOKEN, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) }, { CKA_ENCRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DECRYPT, &(CK_BBOOL){CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_DERIVE, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_WRAP, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_UNWRAP, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) }, { CKA_VALUE, &import_aes128_key, sizeof(import_aes128_key) }, { CKA_CHECK_VALUE, &import_aes128_kcv_invalid, sizeof(import_aes128_kcv_invalid) }, }; CK_ATTRIBUTE kcv_attr_template[] = { { CKA_CHECK_VALUE, &kcv, sizeof(kcv) }, }; CK_ATTRIBUTE template_kcv_no_value[] = { { CKA_CHECK_VALUE, &kcv, 0 }, }; CK_ATTRIBUTE template_kcv_invalid[] = { { CKA_CHECK_VALUE, &import_aes128_kcv_invalid, sizeof(import_aes128_kcv_invalid) }, }; CK_KEY_DERIVATION_STRING_DATA key_derv_param = { 0 }; uint8_t derive_buf[16] = { 0 }; size_t derive_buf_size = sizeof(derive_buf); CK_MECHANISM mech_derive = { 0 }; CK_ATTRIBUTE derived_key_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_GENERIC_SECRET }, sizeof(CK_KEY_TYPE) }, { CKA_PRIVATE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE }, sizeof(CK_BBOOL) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_VALUE_LEN, &(CK_ULONG){16}, sizeof(CK_ULONG) }, { CKA_CHECK_VALUE, NULL, 0 }, }; CK_ATTRIBUTE unwrap_template[] = { { CKA_CLASS, &(CK_OBJECT_CLASS){ CKO_SECRET_KEY }, sizeof(CK_OBJECT_CLASS) }, { CKA_KEY_TYPE, &(CK_KEY_TYPE){ CKK_GENERIC_SECRET }, sizeof(CK_KEY_TYPE) }, { CKA_EXTRACTABLE, &(CK_BBOOL){ CK_TRUE }, sizeof(CK_BBOOL) }, { CKA_SENSITIVE, &(CK_BBOOL){ CK_FALSE}, sizeof(CK_BBOOL) }, { CKA_CHECK_VALUE, &unwrapped_key_kcv_valid, sizeof(unwrapped_key_kcv_valid)}, }; uint8_t buf[WRAPPED_TEST_KEY_SIZE] = { 0 }; CK_ULONG size = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_lib; /* * Generate a key and get key check value attribute. * If none is found, the feature is not supported: skip tests. * If found, check it matches the expected value, computed from * secrete key value. */ Do_ADBG_BeginSubCase(c, "Compute KCV on C_GenerateKey()"); rv = C_GenerateKey(session, &cktest_aes_keygen_mechanism, cktest_generate_aes_object, ARRAY_SIZE(cktest_generate_aes_object), &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_subcase; memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (rv == CKR_ATTRIBUTE_TYPE_INVALID) { Do_ADBG_Log("Skip check value attribute tests: not supported"); goto out_destr_obj; } if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; /* Generate the 3 bytes KCV using key value */ rv = C_EncryptInit(session, &cktest_aes_ecb_mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; memset(ciphertext, 0, sizeof(ciphertext)); memset(plaintext, 0, sizeof(plaintext)); ciphertext_len = sizeof(ciphertext); rv = C_Encrypt(session, plaintext, sizeof(plaintext), ciphertext, &ciphertext_len); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_BUFFER(c, ciphertext, sizeof(kcv), kcv, sizeof(kcv))) goto out_destr_obj; rv = C_DestroyObject(session, key_handle); key_handle = CK_INVALID_HANDLE; if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; Do_ADBG_EndSubCase(c, NULL); /* * Import an object with a non-value KCV */ Do_ADBG_BeginSubCase(c, "Set no-value KCV on C_CreateObject()"); rv = C_CreateObject(session, import_aes_key_template_novalue, ARRAY_SIZE(import_aes_key_template_novalue), &key_handle); if (ADBG_EXPECT_CK_OK(c, rv)) { kcv_attr_template[0].pValue = kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (ADBG_EXPECT_CK_OK(c, rv)) ADBG_EXPECT_COMPARE_UNSIGNED(c, kcv_attr_template[0].ulValueLen, ==, 0); rv = C_DestroyObject(session, key_handle); ADBG_EXPECT_CK_OK(c, rv); key_handle = CK_INVALID_HANDLE; } Do_ADBG_EndSubCase(c, NULL); /* * Import an object with an invalid KCV */ Do_ADBG_BeginSubCase(c, "Set invalid KCV on C_CreateObject()"); rv = C_CreateObject(session, import_aes_key_template_invalid, ARRAY_SIZE(import_aes_key_template_invalid), &key_handle); if (!ADBG_EXPECT_NOT(c, CKR_OK, rv)) { /* Unlikely the object withas created */ rv = C_DestroyObject(session, key_handle); ADBG_EXPECT_CK_OK(c, rv); key_handle = CK_INVALID_HANDLE; } Do_ADBG_EndSubCase(c, NULL); /* * Import an object with a wellformed precomputed KCV value * The object will be reused. */ Do_ADBG_BeginSubCase(c, "Set KCV on C_CreateObject()"); rv = C_CreateObject(session, import_aes_key_template, ARRAY_SIZE(import_aes_key_template), &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (ADBG_EXPECT_CK_OK(c, rv)) ADBG_EXPECT_BUFFER(c, import_aes128_kcv_valid, sizeof(import_aes128_kcv_valid), kcv, sizeof(kcv)); Do_ADBG_EndSubCase(c, NULL); /* * Copy wellformed AES key object with its KCV value which * should still match. */ Do_ADBG_BeginSubCase(c, "Copy and recompute KCV on C_CopyObject()"); rv = C_CopyObject(session, key_handle, NULL, 0, &key_handle_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (ADBG_EXPECT_CK_OK(c, rv)) ADBG_EXPECT_BUFFER(c, import_aes128_kcv_valid, sizeof(import_aes128_kcv_valid), kcv, sizeof(kcv)); ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle_cp)); key_handle_cp = CK_INVALID_HANDLE; Do_ADBG_EndSubCase(c, NULL); /* * Copy wellformed AES key object replacing its KCV value with * a no-value value. */ Do_ADBG_BeginSubCase(c, "Set no-value KCV on C_CopyObject()"); rv = C_CopyObject(session, key_handle, template_kcv_no_value, ARRAY_SIZE(template_kcv_no_value), &key_handle_cp); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, key_handle_cp, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (ADBG_EXPECT_CK_OK(c, rv)) ADBG_EXPECT_COMPARE_UNSIGNED(c, kcv_attr_template[0].ulValueLen, ==, 0); ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle_cp)); key_handle_cp = CK_INVALID_HANDLE; Do_ADBG_EndSubCase(c, NULL); /* * Copy wellformed AES key object replacing its KCV value with * an invalid value. */ Do_ADBG_BeginSubCase(c, "Set invalid KCV on C_CopyObject()"); rv = C_CopyObject(session, key_handle, template_kcv_invalid, ARRAY_SIZE(template_kcv_invalid), &key_handle_cp); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_VALUE_INVALID, rv)) goto out_destr_obj; Do_ADBG_EndSubCase(c, NULL); /* * Derive the key and check its KCV is degerated */ Do_ADBG_BeginSubCase(c, "Compute KCV on C_DeriveKey()"); key_derv_param.pData = derive_buf; key_derv_param.ulLen = derive_buf_size; mech_derive.mechanism = CKM_AES_ECB_ENCRYPT_DATA; mech_derive.pParameter = &key_derv_param; mech_derive.ulParameterLen = sizeof(key_derv_param); rv = C_DeriveKey(session, &mech_derive, key_handle, derived_key_template, ARRAY_SIZE(derived_key_template), &derived_key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, derived_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, kcv_attr_template[0].ulValueLen, ==, 0)) goto out_destr_obj; Do_ADBG_EndSubCase(c, NULL); /* * Warp and unwrap and AES key, check its KCV value is generated. */ Do_ADBG_BeginSubCase(c, "Compute KCV on C_UnwrapKey()"); size = sizeof(buf); rv = C_WrapKey(session, &cktest_aes_ecb_mechanism, key_handle, derived_key_handle, buf, &size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, size, <=, sizeof(buf))) goto out_destr_obj; rv = C_UnwrapKey(session, &cktest_aes_ecb_mechanism, key_handle, buf, size, unwrap_template, ARRAY_SIZE(unwrap_template), &unwrapped_key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; /* Save KCV for later use */ kcv_attr_template[0].pValue = &ciphertext; kcv_attr_template[0].ulValueLen = sizeof(ciphertext); rv = C_GetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; Do_ADBG_EndSubCase(c, NULL); /* * Replace KCV value with no-value: should succeed */ Do_ADBG_BeginSubCase(c, "Destroy KCV using C_SetAttributeValue()"); rv = C_SetAttributeValue(session, unwrapped_key_handle, template_kcv_no_value, ARRAY_SIZE(template_kcv_no_value)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = &kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; ADBG_EXPECT_COMPARE_UNSIGNED(c, kcv_attr_template[0].ulValueLen, ==, 0); Do_ADBG_EndSubCase(c, NULL); /* * Replace KCV value with an invalid value: should fail */ Do_ADBG_BeginSubCase(c, "Create an invalid KCV using C_SetAttributeValue()"); memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = &kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); rv = C_SetAttributeValue(session, unwrapped_key_handle, template_kcv_invalid, ARRAY_SIZE(template_kcv_invalid)); if (!ADBG_EXPECT_CK_RESULT(c, CKR_ATTRIBUTE_VALUE_INVALID, rv)) goto out_destr_obj; /* Check object's KCV is still no-value */ memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = &kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; ADBG_EXPECT_COMPARE_UNSIGNED(c, kcv_attr_template[0].ulValueLen, ==, 0); Do_ADBG_EndSubCase(c, NULL); /* * Replace KCV value no-value with valid value but wrong size: should * fail */ Do_ADBG_BeginSubCase(c, "Set KCV of invalid size using C_SetAttributeValue()"); /* Valid value but bigger value size */ kcv_attr_template[0].pValue = &ciphertext; kcv_attr_template[0].ulValueLen = sizeof(kcv) + 1; rv = C_SetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (!ADBG_EXPECT_NOT(c, CKR_OK, rv)) goto out_destr_obj; /* Valid value but lower value size */ kcv_attr_template[0].pValue = &ciphertext; kcv_attr_template[0].ulValueLen = sizeof(kcv) - 1; rv = C_SetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (!ADBG_EXPECT_NOT(c, CKR_OK, rv)) goto out_destr_obj; /* Check object's KCV is still no-value */ memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = &kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; ADBG_EXPECT_COMPARE_UNSIGNED(c, kcv_attr_template[0].ulValueLen, ==, 0); Do_ADBG_EndSubCase(c, NULL); /* * Replace KCV value no-value with valid value: should succeed */ Do_ADBG_BeginSubCase(c, "Set valid KCV using C_SetAttributeValue()"); kcv_attr_template[0].pValue = &ciphertext; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_SetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_destr_obj; /* Check KCV is the expected one */ memset(&kcv, 0, sizeof(kcv)); kcv_attr_template[0].pValue = &kcv; kcv_attr_template[0].ulValueLen = sizeof(kcv); rv = C_GetAttributeValue(session, unwrapped_key_handle, kcv_attr_template, ARRAY_SIZE(kcv_attr_template)); if (ADBG_EXPECT_CK_OK(c, rv)) ADBG_EXPECT_BUFFER(c, ciphertext, sizeof(kcv), kcv, sizeof(kcv)); out_destr_obj: if (key_handle != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); if (key_handle_cp != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle_cp)); if (unwrapped_key_handle != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, unwrapped_key_handle)); if (derived_key_handle != CK_INVALID_HANDLE) ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, derived_key_handle)); out_subcase: Do_ADBG_EndSubCase(c, NULL); ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); out_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1029, xtest_pkcs11_test_1029, "PKCS11: Test support for object checksum value computation"); struct aes_gcm_test { int line_id; CK_ATTRIBUTE_PTR attr_key; CK_ULONG attr_count; CK_MECHANISM_PTR mechanism; const uint8_t *ctx; size_t ctx_len; const uint8_t *ptx; size_t ptx_len; const uint8_t *tag; size_t tag_len; }; #define MAKE_AES_GCM_TEST_CASE(_vect_) \ static CK_GCM_PARAMS cktest_aes_gcm_params##_vect_ = { \ .pIv = (CK_BYTE_PTR)ae_data_aes_gcm_vect##_vect_##_nonce,\ .ulIvLen = sizeof(ae_data_aes_gcm_vect##_vect_##_nonce),\ .ulIvBits = 0, \ .pAAD = (CK_BYTE_PTR)ae_data_aes_gcm_vect##_vect_##_aad,\ .ulAADLen = (ae_data_aes_gcm_vect##_vect_##_aad == NULL) ? 0 : \ sizeof(ae_data_aes_gcm_vect##_vect_##_aad), \ .ulTagBits = AES_GCM_TAG_SIZE * 8, \ }; \ \ static CK_MECHANISM cktest_aes_gcm_mechanism##_vect_ = { \ .mechanism = CKM_AES_GCM, \ .pParameter = (CK_BYTE_PTR)&cktest_aes_gcm_params##_vect_,\ .ulParameterLen = sizeof(cktest_aes_gcm_params##_vect_),\ }; \ \ static CK_ATTRIBUTE cktest_aes_gcm_key##_vect_[] = { \ { CKA_ENCRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) },\ { CKA_DECRYPT, &(CK_BBOOL){CK_TRUE}, sizeof(CK_BBOOL) },\ { CKA_CLASS, &(CK_OBJECT_CLASS){CKO_SECRET_KEY}, \ sizeof(CK_OBJECT_CLASS) }, \ { CKA_KEY_TYPE, &(CK_KEY_TYPE){CKK_AES}, sizeof(CK_KEY_TYPE) },\ { CKA_VALUE, (void *)(ae_data_aes_gcm_vect##_vect_##_key),\ sizeof(ae_data_aes_gcm_vect##_vect_##_key) }, \ }; \ \ static const struct aes_gcm_test aes_gcm_test_case_##_vect_ = { \ .line_id = __LINE__, \ .attr_key = cktest_aes_gcm_key##_vect_, \ .attr_count = ARRAY_SIZE(cktest_aes_gcm_key##_vect_), \ .mechanism = &cktest_aes_gcm_mechanism##_vect_, \ .ctx = ae_data_aes_gcm_vect##_vect_##_ctx, \ .ctx_len = (ae_data_aes_gcm_vect##_vect_##_ctx == NULL) ? 0 : \ sizeof(ae_data_aes_gcm_vect##_vect_##_ctx), \ .ptx = ae_data_aes_gcm_vect##_vect_##_ptx, \ .ptx_len = (ae_data_aes_gcm_vect##_vect_##_ptx == NULL) ? 0 : \ sizeof(ae_data_aes_gcm_vect##_vect_##_ptx), \ .tag = ae_data_aes_gcm_vect##_vect_##_tag, \ .tag_len = sizeof(ae_data_aes_gcm_vect##_vect_##_tag) \ } MAKE_AES_GCM_TEST_CASE(1); MAKE_AES_GCM_TEST_CASE(2); MAKE_AES_GCM_TEST_CASE(3); MAKE_AES_GCM_TEST_CASE(4); MAKE_AES_GCM_TEST_CASE(5); MAKE_AES_GCM_TEST_CASE(6); MAKE_AES_GCM_TEST_CASE(7); MAKE_AES_GCM_TEST_CASE(8); MAKE_AES_GCM_TEST_CASE(9); MAKE_AES_GCM_TEST_CASE(10); MAKE_AES_GCM_TEST_CASE(11); MAKE_AES_GCM_TEST_CASE(12); MAKE_AES_GCM_TEST_CASE(13); MAKE_AES_GCM_TEST_CASE(14); MAKE_AES_GCM_TEST_CASE(15); MAKE_AES_GCM_TEST_CASE(16); MAKE_AES_GCM_TEST_CASE(17); MAKE_AES_GCM_TEST_CASE(18); static const struct aes_gcm_test cktest_aes_gcm_cases[] = { aes_gcm_test_case_1, aes_gcm_test_case_2, aes_gcm_test_case_3, aes_gcm_test_case_4, aes_gcm_test_case_5, aes_gcm_test_case_6, aes_gcm_test_case_7, aes_gcm_test_case_8, aes_gcm_test_case_9, aes_gcm_test_case_10, aes_gcm_test_case_11, aes_gcm_test_case_12, aes_gcm_test_case_13, aes_gcm_test_case_14, aes_gcm_test_case_15, aes_gcm_test_case_16, aes_gcm_test_case_17, aes_gcm_test_case_18, }; #define CHUNK_SIZE 6 static void xtest_pkcs11_test_1030(ADBG_Case_t *c) { CK_RV rv = CKR_OK; CK_SLOT_ID slot = 0; CK_SESSION_HANDLE session = CK_INVALID_HANDLE; CK_FLAGS session_flags = CKF_SERIAL_SESSION; CK_OBJECT_HANDLE key_handle = CK_INVALID_HANDLE; const struct aes_gcm_test *test = NULL; size_t n = 0; size_t proc_len = 0; size_t total_len = 0; size_t saved_size = 0; uint8_t chunk[CHUNK_SIZE] = { 0 }; uint8_t out[512] = { 0 }; uint8_t in[512] = { 0 }; CK_ULONG chunk_len = 0; CK_ULONG out_size = 0; CK_ULONG in_size = 0; rv = init_lib_and_find_token_slot(&slot, PIN_AUTH); if (!ADBG_EXPECT_CK_OK(c, rv)) return; rv = C_OpenSession(slot, session_flags, NULL, 0, &session); if (!ADBG_EXPECT_CK_OK(c, rv)) goto out_close_lib; for (n = 0; n < ARRAY_SIZE(cktest_aes_gcm_cases); n++) { test = cktest_aes_gcm_cases + n; Do_ADBG_BeginSubCase(c, "AES-GCM case %zu (line ID %d)", n, test->line_id); rv = C_CreateObject(session, test->attr_key, test->attr_count, &key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_subcase; /* * Test 1: encrypt with multi stage operation C_EncryptUpdate() */ total_len = 0; memset(out, 0, sizeof(out)); rv = C_EncryptInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Encrypt plain text data, if any */ if (test->ptx) { /* Get output buffer size for plaintext encryption */ out_size = 0; rv = C_EncryptUpdate(session, (void *)test->ptx, test->ptx_len, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, <=, sizeof(out))) goto err_destr_obj; /* Encrypt plain text */ rv = C_EncryptUpdate(session, (void *)test->ptx, test->ptx_len, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; total_len += out_size; } /* Finalize to get the tag: 1st get tag size then get tag data */ out_size = 0; rv = C_EncryptFinal(session, NULL, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OK, rv)) goto err_destr_obj; saved_size = out_size; out_size = 0; rv = C_EncryptFinal(session, out + total_len, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; rv = C_EncryptFinal(session, out + total_len, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; total_len += out_size; /* Check ciphertext and tag */ if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, test->ctx_len + test->tag_len, ==, total_len)) goto err_destr_obj; if (!ADBG_EXPECT_BUFFER(c, test->tag, test->tag_len, out + test->ctx_len, test->tag_len)) goto err_destr_obj; if (!ADBG_EXPECT_BUFFER(c, test->ctx, test->ctx_len, out, test->ctx_len)) goto err_destr_obj; /* * Test 2: decrypt with multi stage operation C_DecryptUpdate() */ rv = C_DecryptInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Concat ciphertext and tag */ memcpy(in, test->ctx, test->ctx_len); memcpy(in + test->ctx_len, test->tag, test->tag_len); in_size = test->ctx_len + test->tag_len; /* Process decryption, when don't expect output data */ out_size = sizeof(out); rv = C_DecryptUpdate(session, (void *)in, in_size, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, 0)) goto err_destr_obj; /* Finalize and check MAC (get size then get data) */ out_size = 0; rv = C_DecryptFinal(session, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, test->ptx_len)) goto err_destr_obj; /* Get data only if there are plaintext data */ if (out_size) { rv = C_DecryptFinal(session, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (!ADBG_EXPECT_BUFFER(c, test->ptx, test->ptx_len, out, out_size)) goto err_destr_obj; } /* * Test 3: encrypt with mult-stage opetation C_EncryptUpdate() * by 6 bytes chunks of plain text. */ rv = C_EncryptInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; proc_len = 0; total_len = 0; chunk_len = 0; memset(chunk, 0, CHUNK_SIZE); while (proc_len < test->ptx_len) { if (test->ptx_len - proc_len > CHUNK_SIZE) chunk_len = CHUNK_SIZE; else chunk_len = test->ptx_len - proc_len; memcpy(chunk, test->ptx + proc_len, chunk_len); out_size = sizeof(out) - total_len; rv = C_EncryptUpdate(session, chunk, chunk_len, out + total_len, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; proc_len += chunk_len; total_len += out_size; } /* Finalize tag computing, but get output size first */ out_size = 0; rv = C_EncryptFinal(session, out + total_len, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto err_destr_obj; saved_size = out_size; /* Test another way to get remaining data */ out_size = 1; rv = C_EncryptFinal(session, NULL, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OK, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; /* Now really finalize and get remaining data and tag */ rv = C_EncryptFinal(session, out + total_len, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; total_len += out_size; /* Check ciphertext and tag */ if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, test->ctx_len + test->tag_len, ==, total_len)) goto err_destr_obj; if (!ADBG_EXPECT_BUFFER(c, test->tag, test->tag_len, out + test->ctx_len, test->tag_len)) goto err_destr_obj; if (test->ctx && !ADBG_EXPECT_BUFFER(c, test->ctx, test->ctx_len, out, test->ctx_len)) goto err_destr_obj; /* * Test 4: decrypt with multi-stage operation C_DecryptUpdate() * by 6 bytes chunks of plain text. */ rv = C_DecryptInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Process ptx in 8-byte chunks */ proc_len = 0; total_len = 0; chunk_len = 0; while (proc_len < test->ctx_len) { if (test->ctx_len - proc_len > CHUNK_SIZE) chunk_len = CHUNK_SIZE; else chunk_len = test->ctx_len - proc_len; memcpy(chunk, test->ctx + proc_len, chunk_len); /* Decrypt the chunk, no output data expected */ out_size = 1; rv = C_DecryptUpdate(session, chunk, chunk_len, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, 0)) goto err_destr_obj; proc_len += chunk_len; } /* Decrypt the tag */ out_size = sizeof(out); in_size = test->tag_len; rv = C_DecryptUpdate(session, (void *)test->tag, in_size, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, 0)) goto err_destr_obj; /* Check Plaintext (get output size then the data, if any) */ out_size = 0; rv = C_DecryptFinal(session, NULL, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_OK, rv)) goto err_destr_obj; if (out_size) { saved_size = out_size; out_size = 0; rv = C_DecryptFinal(session, out, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; rv = C_DecryptFinal(session, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; } /* Check output is expected plaintext */ if (!ADBG_EXPECT_BUFFER(c, test->ptx, test->ptx_len, out, out_size)) goto err_destr_obj; /* * Test 5: encrypt with one-shot operation C_Encrypt() */ rv = C_EncryptInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Get output buffer size */ out_size = 0; rv = C_Encrypt(session, (void *)test->ptx, test->ptx_len, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (out_size) { saved_size = out_size; /* Test too short buffer case to get output data size */ out_size = 1; rv = C_Encrypt(session, (void *)test->ptx, test->ptx_len, out, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; /* Test NULL ref with non-zero size to get output data size */ out_size = sizeof(out); rv = C_Encrypt(session, (void *)test->ptx, test->ptx_len, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; /* Encrypt the whole plain text in one shot */ memset(out, 0, out_size); rv = C_Encrypt(session, (void *)test->ptx, test->ptx_len, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; } /* Check Ciphertext + tag */ if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, test->ctx_len + test->tag_len, ==, out_size)) goto err_destr_obj; if (!ADBG_EXPECT_BUFFER(c, test->ctx, test->ctx_len, out, test->ctx_len)) goto err_destr_obj; if (!ADBG_EXPECT_BUFFER(c, test->tag, test->tag_len, out + test->ctx_len, test->tag_len)) goto err_destr_obj; /* * Test 6 decrypt with one shot operation C_Decrypt() */ rv = C_DecryptInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Concat ciphertext and tag */ memcpy(in, test->ctx, test->ctx_len); memcpy(in + test->ctx_len, test->tag, test->tag_len); in_size = test->ctx_len + test->tag_len; /* Test NULL output buffer ref to get output data size */ out_size = 0; rv = C_Decrypt(session, (void *)in, in_size, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (out_size) { saved_size = out_size; /* Test too short buffer case to get output data size */ out_size = 0; rv = C_Decrypt(session, (void *)in, in_size, out, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; /* Test NULL ref with non-zero size to get output data size */ out_size = 42; rv = C_Decrypt(session, (void *)in, in_size, NULL, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; /* Decrypt the whole cipher text and tag in one shot */ memset(out, 0, out_size); rv = C_Decrypt(session, (void *)in, in_size, out, &out_size); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, saved_size)) goto err_destr_obj; } /* Check Plaintext */ if (!ADBG_EXPECT_BUFFER(c, test->ptx, test->ptx_len, out, out_size)) goto err_destr_obj; /* * Test 7 decrypt altered data */ if (test->ptx && test->ctx) { rv = C_DecryptInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; /* Concat ciphertext and tag */ memcpy(in, test->ctx, test->ctx_len); memcpy(in + test->ctx_len, test->tag, test->tag_len); in_size = test->ctx_len + test->tag_len; /* Alter ciphertext and try to decrypt */ in[0] ^= 1; out_size = sizeof(out); rv = C_Decrypt(session, (void *)in, in_size, out, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SIGNATURE_INVALID, rv)) goto err_destr_obj; /* Restore ciphertext, alter tag and try to decrypt */ rv = C_DecryptInit(session, test->mechanism, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_destr_obj; in[0] ^= 1; in[test->ctx_len] ^= 1; out_size = sizeof(out); rv = C_Decrypt(session, (void *)in, in_size, out, &out_size); if (!ADBG_EXPECT_CK_RESULT(c, CKR_SIGNATURE_INVALID, rv)) goto err_destr_obj; } /* * We're done, release resources use by the subcase test */ rv = C_DestroyObject(session, key_handle); if (!ADBG_EXPECT_CK_OK(c, rv)) goto err_subcase; Do_ADBG_EndSubCase(c, NULL); } goto out; err_destr_obj: ADBG_EXPECT_CK_OK(c, C_DestroyObject(session, key_handle)); err_subcase: Do_ADBG_EndSubCase(c, NULL); out: ADBG_EXPECT_CK_OK(c, C_CloseSession(session)); out_close_lib: ADBG_EXPECT_CK_OK(c, close_lib()); } ADBG_CASE_DEFINE(pkcs11, 1030, xtest_pkcs11_test_1030, "PKCS11: Test AES-GCM Encryption/Decryption"); optee_test-4.3.0/host/xtest/pkcs11_1000.h000066400000000000000000000004371464074351400177440ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2023, Linaro Limited */ #ifndef XTEST_PKCS11_1000_H #define XTEST_PKCS11_1000_H /* Helper function for finding and detroying a token object */ int xtest_pkcs11_1028_destroy_token_object(void); #endif /*XTEST_PKCS11_1000_H*/ optee_test-4.3.0/host/xtest/rand_stream.c000066400000000000000000000045341464074351400204760ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2016, Linaro Limited */ #include #include #include #include #include #include "rand_stream.h" #define STREAM_BUF_MIN_SIZE 4 struct rand_stream { int32_t seed; uint8_t word_buf[4]; size_t w_offs; size_t sb_size; size_t sb_offs; uint8_t stream_buf[]; }; struct rand_stream *rand_stream_alloc(int seed, size_t stream_buffer_size) { size_t sb_size = MAX(stream_buffer_size, STREAM_BUF_MIN_SIZE); struct rand_stream *rs = calloc(1, sizeof(*rs) + sb_size); if (!rs) return NULL; rs->sb_size = sb_size;; rs->sb_offs = rs->sb_size; rs->w_offs = sizeof(rs->word_buf); rs->seed = seed; return rs; } void rand_stream_free(struct rand_stream *rs) { free(rs); } static void get_random(struct rand_stream *rs, uint8_t *buf, size_t blen) { uint8_t *b = buf; size_t l = blen; /* * This function uses an LCG, * https://en.wikipedia.org/wiki/Linear_congruential_generator * to generate the byte stream. */ while (l) { size_t t = MIN(sizeof(rs->word_buf) - rs->w_offs, l); memcpy(b, rs->word_buf + rs->w_offs, t); rs->w_offs += t; l -= t; b += t; if (rs->w_offs == sizeof(rs->word_buf)) { rs->seed = rs->seed * 1103515245 + 12345; memcpy(rs->word_buf, &rs->seed, sizeof(rs->seed)); rs->w_offs = 0; } } } const void *rand_stream_peek(struct rand_stream *rs, size_t *num_bytes) { if (rs->sb_offs == rs->sb_size) { rs->sb_offs = 0; get_random(rs, rs->stream_buf, rs->sb_size); } *num_bytes = MIN(*num_bytes, rs->sb_size - rs->sb_offs); return rs->stream_buf + rs->sb_offs; } void rand_stream_read(struct rand_stream *rs, void *buf, size_t num_bytes) { size_t peek_bytes = num_bytes; const void *peek = rand_stream_peek(rs, &peek_bytes); memcpy(buf, peek, peek_bytes); rand_stream_advance(rs, peek_bytes); if (num_bytes - peek_bytes) get_random(rs, (uint8_t *)buf + peek_bytes, num_bytes - peek_bytes); } void rand_stream_advance(struct rand_stream *rs, size_t num_bytes) { size_t nb = num_bytes; if (nb <= (rs->sb_size - rs->sb_offs)) { rs->sb_offs += nb; return; } nb -= rs->sb_size - rs->sb_offs; rs->sb_offs = rs->sb_size; while (nb > rs->sb_size) { get_random(rs, rs->stream_buf, rs->sb_size); nb -= rs->sb_size; } get_random(rs, rs->stream_buf, rs->sb_size); rs->sb_offs = nb; } optee_test-4.3.0/host/xtest/rand_stream.h000066400000000000000000000010441464074351400204740ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016, Linaro Limited */ #ifndef __RAND_STREAM_H #define __RAND_STREAM_H #include struct rand_stream; struct rand_stream *rand_stream_alloc(int seed, size_t stream_buffer_size); void rand_stream_free(struct rand_stream *rs); const void *rand_stream_peek(struct rand_stream *rs, size_t *num_bytes); void rand_stream_advance(struct rand_stream *rs, size_t num_bytes); void rand_stream_read(struct rand_stream *rs, void *buf, size_t num_bytes); #endif /*__RAND_STREAM_H*/ optee_test-4.3.0/host/xtest/regression_1000.c000066400000000000000000002734431464074351400210260ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2020, ARM Limited. All rights reserved. * Copyright (c) 2014, STMicroelectronics International N.V. */ #include #include #ifdef OPENSSL_FOUND #include #include #include #include #include #endif #include #include #include #include #ifdef CFG_SECURE_DATA_PATH #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "xtest_helpers.h" #include "xtest_test.h" #include "xtest_uuid_helpers.h" #ifndef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif #define STATS_UUID \ { 0xd96a5b40, 0xe2c7, 0xb1af, \ { 0x87, 0x94, 0x10, 0x02, 0xa5, 0xd5, 0xc6, 0x1b } } #define STATS_CMD_PAGER_STATS 0 #define PAGER_PAGE_COUNT_THRESHOLD ((128 * 1024) / 4096) struct xtest_crypto_session { ADBG_Case_t *c; TEEC_Session *session; uint32_t cmd_id_sha256; uint32_t cmd_id_aes256ecb_encrypt; uint32_t cmd_id_aes256ecb_decrypt; }; static bool optee_pager_with_small_pool(void) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_UUID uuid = STATS_UUID; TEEC_Context ctx = { }; TEEC_Session sess = { }; TEEC_Operation op = { }; uint32_t eo = 0; bool rc = false; res = TEEC_InitializeContext(NULL, &ctx); if (res) return false; res = TEEC_OpenSession(&ctx, &sess, &uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &eo); if (res) goto out_ctx; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(&sess, STATS_CMD_PAGER_STATS, &op, &eo); if (res) goto out_sess; if (op.params[0].value.b && op.params[0].value.b <= PAGER_PAGE_COUNT_THRESHOLD) rc = true; out_sess: TEEC_CloseSession(&sess); out_ctx: TEEC_FinalizeContext(&ctx); return rc; } static void xtest_crypto_test(struct xtest_crypto_session *cs) { uint32_t ret_orig = 0; uint8_t crypt_out[16] = { }; uint8_t crypt_in[16] = { 22, 17 }; crypt_in[15] = 60; Do_ADBG_BeginSubCase(cs->c, "AES encrypt"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].tmpref.buffer = crypt_in; op.params[0].tmpref.size = sizeof(crypt_in); op.params[1].tmpref.buffer = crypt_out; op.params[1].tmpref.size = sizeof(crypt_out); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(cs->c, TEEC_InvokeCommand(cs->session, cs-> cmd_id_aes256ecb_encrypt, &op, &ret_orig)); } Do_ADBG_EndSubCase(cs->c, "AES encrypt"); Do_ADBG_BeginSubCase(cs->c, "AES decrypt"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint8_t out[16] = { }; op.params[0].tmpref.buffer = crypt_out; op.params[0].tmpref.size = sizeof(crypt_out); op.params[1].tmpref.buffer = out; op.params[1].tmpref.size = sizeof(out); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(cs->c, TEEC_InvokeCommand(cs->session, cs-> cmd_id_aes256ecb_decrypt, &op, &ret_orig)); if (!ADBG_EXPECT(cs->c, 0, memcmp(crypt_in, out, sizeof(crypt_in)))) { Do_ADBG_Log("crypt_in:"); Do_ADBG_HexLog(crypt_in, sizeof(crypt_in), 16); Do_ADBG_Log("out:"); Do_ADBG_HexLog(out, sizeof(out), 16); } } Do_ADBG_EndSubCase(cs->c, "AES decrypt"); Do_ADBG_BeginSubCase(cs->c, "SHA-256 test, 3 bytes input"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; static const uint8_t sha256_in[] = { 'a', 'b', 'c' }; static const uint8_t sha256_out[] = { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad }; uint8_t out[32] = { }; op.params[0].tmpref.buffer = (void *)sha256_in; op.params[0].tmpref.size = sizeof(sha256_in); op.params[1].tmpref.buffer = out; op.params[1].tmpref.size = sizeof(out); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(cs->c, TEEC_InvokeCommand(cs->session, cs-> cmd_id_sha256, &op, &ret_orig)); if (!ADBG_EXPECT(cs->c, 0, memcmp(sha256_out, out, sizeof(sha256_out)))) { Do_ADBG_Log("sha256_out:"); Do_ADBG_HexLog(sha256_out, sizeof(sha256_out), 16); Do_ADBG_Log("out:"); Do_ADBG_HexLog(out, sizeof(out), 16); } } Do_ADBG_EndSubCase(cs->c, "SHA-256 test, 3 bytes input"); Do_ADBG_BeginSubCase(cs->c, "AES-256 ECB encrypt (32B, fixed key)"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; static const uint8_t in[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; static const uint8_t exp_out[] = { 0x5A, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96, 0xF0, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92, 0xE9, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6, 0xF0, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x8E }; uint8_t out[sizeof(exp_out)] = { }; op.params[0].tmpref.buffer = (void *)in; op.params[0].tmpref.size = sizeof(in); op.params[1].tmpref.buffer = out; op.params[1].tmpref.size = sizeof(out); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(cs->c, TEEC_InvokeCommand(cs->session, cs-> cmd_id_aes256ecb_encrypt, &op, &ret_orig)); if (!ADBG_EXPECT(cs->c, 0, memcmp(exp_out, out, sizeof(exp_out)))) { Do_ADBG_Log("exp_out:"); Do_ADBG_HexLog(exp_out, sizeof(exp_out), 16); Do_ADBG_Log("out:"); Do_ADBG_HexLog(out, sizeof(out), 16); } } Do_ADBG_EndSubCase(cs->c, "AES-256 ECB encrypt (32B, fixed key)"); Do_ADBG_BeginSubCase(cs->c, "AES-256 ECB decrypt (32B, fixed key)"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; static const uint8_t in[] = { 0x5A, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96, 0xF0, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92, 0xE9, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6, 0xF0, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x8E }; static const uint8_t exp_out[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; uint8_t out[sizeof(exp_out)] = { }; op.params[0].tmpref.buffer = (void *)in; op.params[0].tmpref.size = sizeof(in); op.params[1].tmpref.buffer = out; op.params[1].tmpref.size = sizeof(out); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(cs->c, TEEC_InvokeCommand(cs->session, cs-> cmd_id_aes256ecb_decrypt, &op, &ret_orig)); if (!ADBG_EXPECT(cs->c, 0, memcmp(exp_out, out, sizeof(exp_out)))) { Do_ADBG_Log("exp_out:"); Do_ADBG_HexLog(exp_out, sizeof(exp_out), 16); Do_ADBG_Log("out:"); Do_ADBG_HexLog(out, sizeof(out), 16); } } Do_ADBG_EndSubCase(cs->c, "AES-256 ECB decrypt (32B, fixed key)"); } static void xtest_tee_test_1001(ADBG_Case_t *c) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; /* Pseudo TA is optional: warn and nicely exit if not found */ res = xtest_teec_open_session(&session, &pta_invoke_tests_ta_uuid, NULL, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND) { Do_ADBG_Log(" - 1001 - skip test, pseudo TA not found"); return; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; Do_ADBG_BeginSubCase(c, "Core self tests"); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand( &session, PTA_INVOKE_TESTS_CMD_SELF_TESTS, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "Core self tests"); Do_ADBG_BeginSubCase(c, "Core dt_driver self tests"); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand( &session, PTA_INVOKE_TESTS_CMD_DT_DRIVER_TESTS, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "Core dt_driver self tests"); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1001, xtest_tee_test_1001, "Core self tests"); static void xtest_tee_test_1002(ADBG_Case_t *c) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; uint8_t buf[16 * 1024] = { }; uint8_t exp_sum = 0; size_t n = 0; /* Pseudo TA is optional: warn and nicely exit if not found */ res = xtest_teec_open_session(&session, &pta_invoke_tests_ta_uuid, NULL, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND) { Do_ADBG_Log(" - 1002 - skip test, pseudo TA not found"); return; } ADBG_EXPECT_TEEC_SUCCESS(c, res); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.size = sizeof(buf); op.params[0].tmpref.buffer = buf; for (n = 0; n < sizeof(buf); n++) buf[n] = n + 1; for (n = 0; n < sizeof(buf); n++) exp_sum += buf[n]; if (!ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand( &session, PTA_INVOKE_TESTS_CMD_PARAMS, &op, &ret_orig))) goto out; ADBG_EXPECT_COMPARE_SIGNED(c, exp_sum, ==, buf[0]); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1002, xtest_tee_test_1002, "PTA parameters"); struct test_1003_arg { uint32_t test_type; size_t repeat; size_t max_before_lockers; size_t max_during_lockers; size_t before_lockers; size_t during_lockers; TEEC_Result res; uint32_t error_orig; }; static void *test_1003_thread(void *arg) { struct test_1003_arg *a = arg; TEEC_Session session = { }; size_t rounds = 64 * 1024; size_t n = 0; a->res = xtest_teec_open_session(&session, &pta_invoke_tests_ta_uuid, NULL, &a->error_orig); if (a->res != TEEC_SUCCESS) return NULL; for (n = 0; n < a->repeat; n++) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].value.a = a->test_type; op.params[0].value.b = rounds; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); a->res = TEEC_InvokeCommand(&session, PTA_INVOKE_TESTS_CMD_MUTEX, &op, &a->error_orig); if (a->test_type == PTA_MUTEX_TEST_WRITER && op.params[1].value.b != 1) { Do_ADBG_Log("n %zu %" PRIu32, n, op.params[1].value.b); a->res = TEEC_ERROR_BAD_STATE; a->error_orig = 42; break; } if (a->test_type == PTA_MUTEX_TEST_READER) { if (op.params[1].value.a > a->max_before_lockers) a->max_before_lockers = op.params[1].value.a; if (op.params[1].value.b > a->max_during_lockers) a->max_during_lockers = op.params[1].value.b; a->before_lockers += op.params[1].value.a; a->during_lockers += op.params[1].value.b; } } TEEC_CloseSession(&session); return NULL; } #define TEST_1003_THREAD_COUNT (3 * 2) static void xtest_tee_test_1003(ADBG_Case_t *c) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; size_t repeat = 20; struct test_1003_arg arg[TEST_1003_THREAD_COUNT] = { }; size_t max_read_concurrency = 0; size_t max_read_waiters = 0; size_t num_concurrent_read_lockers = 0; size_t num_concurrent_read_waiters = 0; size_t n = 0; size_t nt = TEST_1003_THREAD_COUNT; double mean_read_concurrency = 0; double mean_read_waiters = 0; size_t num_writers = 0; size_t num_readers = 0; pthread_t thr[TEST_1003_THREAD_COUNT] = { }; /* Pseudo TA is optional: warn and nicely exit if not found */ res = xtest_teec_open_session(&session, &pta_invoke_tests_ta_uuid, NULL, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND) { Do_ADBG_Log(" - 1003 - skip test, pseudo TA not found"); return; } ADBG_EXPECT_TEEC_SUCCESS(c, res); TEEC_CloseSession(&session); for (n = 0; n < nt; n++) { if (n % 3) { arg[n].test_type = PTA_MUTEX_TEST_READER; num_readers++; } else { arg[n].test_type = PTA_MUTEX_TEST_WRITER; num_writers++; } arg[n].repeat = repeat; if (!ADBG_EXPECT(c, 0, pthread_create(thr + n, NULL, test_1003_thread, arg + n))) nt = n; /* break loop and start cleanup */ } for (n = 0; n < nt; n++) { ADBG_EXPECT(c, 0, pthread_join(thr[n], NULL)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, arg[n].res)) Do_ADBG_Log("error origin %" PRIu32, arg[n].error_orig); if (arg[n].test_type == PTA_MUTEX_TEST_READER) { if (arg[n].max_during_lockers > max_read_concurrency) max_read_concurrency = arg[n].max_during_lockers; if (arg[n].max_before_lockers > max_read_waiters) max_read_waiters = arg[n].max_before_lockers; num_concurrent_read_lockers += arg[n].during_lockers; num_concurrent_read_waiters += arg[n].before_lockers; } } mean_read_concurrency = (double)num_concurrent_read_lockers / (double)(repeat * num_readers); mean_read_waiters = (double)num_concurrent_read_waiters / (double)(repeat * num_readers); Do_ADBG_Log(" Number of parallel threads: %d (%zu writers and %zu readers)", TEST_1003_THREAD_COUNT, num_writers, num_readers); Do_ADBG_Log(" Max read concurrency: %zu", max_read_concurrency); Do_ADBG_Log(" Max read waiters: %zu", max_read_waiters); Do_ADBG_Log(" Mean read concurrency: %g", mean_read_concurrency); Do_ADBG_Log(" Mean read waiting: %g", mean_read_waiters); } ADBG_CASE_DEFINE(regression, 1003, xtest_tee_test_1003, "Core internal read/write mutex"); static void xtest_tee_test_1004(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; struct xtest_crypto_session cs = { c, &session, TA_CRYPT_CMD_SHA256, TA_CRYPT_CMD_AES256ECB_ENC, TA_CRYPT_CMD_AES256ECB_DEC }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; /* Run the "complete crypto test suite" */ xtest_crypto_test(&cs); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1004, xtest_tee_test_1004, "Test User Crypt TA"); static void xtest_tee_test_invalid_mem_access(ADBG_Case_t *c, unsigned int n) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; op.params[0].value.a = n; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_BAD_MEM_ACCESS, &op, &ret_orig)); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_BAD_MEM_ACCESS, &op, &ret_orig)); (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); TEEC_CloseSession(&session); } static void xtest_tee_test_invalid_mem_access2(ADBG_Case_t *c, unsigned int n, size_t size) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; TEEC_SharedMemory shm = { }; shm.size = size; shm.flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT; if (!ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_AllocateSharedMemory(&xtest_teec_ctx, &shm))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) goto rel_shm; op.params[0].value.a = (uint32_t)n; op.params[1].memref.parent = &shm; op.params[1].memref.size = size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_WHOLE, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_BAD_MEM_ACCESS, &op, &ret_orig)); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_BAD_MEM_ACCESS, &op, &ret_orig)); (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); TEEC_CloseSession(&session); rel_shm: TEEC_ReleaseSharedMemory(&shm); } static void xtest_tee_test_1005(ADBG_Case_t *c) { uint32_t ret_orig = 0; #define MAX_SESSIONS 3 TEEC_Session sessions[MAX_SESSIONS]; int i = 0; for (i = 0; i < MAX_SESSIONS; i++) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sessions[i], &concurrent_ta_uuid, NULL, &ret_orig))) break; } for (; --i >= 0; ) TEEC_CloseSession(&sessions[i]); } ADBG_CASE_DEFINE(regression, 1005, xtest_tee_test_1005, "Many sessions"); static void xtest_tee_test_1006(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint8_t buf[32] = { }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; op.params[0].tmpref.buffer = buf; op.params[0].tmpref.size = sizeof(buf); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_BASIC, &op, &ret_orig)); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1006, xtest_tee_test_1006, "Test Basic OS features"); static void xtest_tee_test_1007(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_PANIC, NULL, &ret_orig)); (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_INIT, NULL, &ret_orig)); (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1007, xtest_tee_test_1007, "Test Panic"); #ifndef TA_DIR # ifdef __ANDROID__ #define TA_DIR "/vendor/lib/optee_armtz" # else #define TA_DIR "/lib/optee_armtz" # endif #endif static FILE *open_ta_file(const TEEC_UUID *uuid, const char *mode) { char buf[PATH_MAX] = { }; snprintf(buf, sizeof(buf), "%s/%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x.ta", TA_DIR, uuid->timeLow, uuid->timeMid, uuid->timeHiAndVersion, uuid->clockSeqAndNode[0], uuid->clockSeqAndNode[1], uuid->clockSeqAndNode[2], uuid->clockSeqAndNode[3], uuid->clockSeqAndNode[4], uuid->clockSeqAndNode[5], uuid->clockSeqAndNode[6], uuid->clockSeqAndNode[7]); return fopen(buf, mode); } static bool load_corrupt_ta(ADBG_Case_t *c, size_t offs, uint8_t mask) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_UUID uuid = PTA_SECSTOR_TA_MGMT_UUID; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_orig = 0; FILE *f = NULL; bool r = false; uint8_t *buf = NULL; size_t sz = 0; size_t fread_res = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &uuid, NULL, &ret_orig))) goto out; f = open_ta_file(&create_fail_test_ta_uuid, "rb"); if (!ADBG_EXPECT_NOT_NULL(c, f)) goto out; if (!ADBG_EXPECT_TRUE(c, !fseek(f, 0, SEEK_END))) goto out; sz = ftell(f); rewind(f); buf = malloc(sz); if (!ADBG_EXPECT_NOT_NULL(c, buf)) goto out; fread_res = fread(buf, 1, sz, f); if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, fread_res, ==, sz)) goto out; fclose(f); f = NULL; buf[MIN(offs, sz)] ^= mask; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.buffer = buf; op.params[0].tmpref.size = sz; res = TEEC_InvokeCommand(&session, PTA_SECSTOR_TA_MGMT_BOOTSTRAP, &op, &ret_orig); r = ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SECURITY, res); out: free(buf); if (f) fclose(f); TEEC_CloseSession(&session); return r; } static void test_1008_corrupt_ta(ADBG_Case_t *c) { TEEC_UUID uuid = PTA_SECSTOR_TA_MGMT_UUID; TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; res = xtest_teec_open_session(&session, &uuid, NULL, &ret_orig); if (res) { if (ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND, res)) Do_ADBG_Log("PTA Secure Storage TA Management not found: skip test"); return; } TEEC_CloseSession(&session); ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, offsetof(struct shdr, magic), 1)); ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, offsetof(struct shdr, img_type), 1)); ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, offsetof(struct shdr, img_size), 1)); ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, offsetof(struct shdr, algo), 1)); ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, offsetof(struct shdr, hash_size), 1)); ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, offsetof(struct shdr, sig_size), 1)); ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, sizeof(struct shdr), 1)); /* hash */ ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, sizeof(struct shdr) + 32, 1)); /* sig */ ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, 3000, 1)); /* payload */ ADBG_EXPECT_TRUE(c, load_corrupt_ta(c, 8000, 1)); /* payload */ } static void xtest_tee_test_1008(ADBG_Case_t *c) { TEEC_Session session = { }; TEEC_Session session_crypt = { }; uint32_t ret_orig = 0; Do_ADBG_BeginSubCase(c, "Invoke command"); { if (ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) { (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CLIENT, NULL, &ret_orig)); TEEC_CloseSession(&session); } } Do_ADBG_EndSubCase(c, "Invoke command"); Do_ADBG_BeginSubCase(c, "Invoke command with timeout"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].value.a = 2000; op.paramTypes = TEEC_PARAM_TYPES( TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) { (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CLIENT_WITH_TIMEOUT, &op, &ret_orig)); TEEC_CloseSession(&session); } } Do_ADBG_EndSubCase(c, "Invoke command with timeout"); Do_ADBG_BeginSubCase(c, "Create session fail"); { size_t n = 0; for (n = 0; n < 100; n++) { Do_ADBG_Log("n = %zu", n); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_GENERIC, xtest_teec_open_session(&session_crypt, &create_fail_test_ta_uuid, NULL, &ret_orig)); /* level > 0 may be used to detect/debug memory leaks */ if (!level) break; } } Do_ADBG_EndSubCase(c, "Create session fail"); Do_ADBG_BeginSubCase(c, "Load corrupt TA"); test_1008_corrupt_ta(c); Do_ADBG_EndSubCase(c, "Load corrupt TA"); } ADBG_CASE_DEFINE(regression, 1008, xtest_tee_test_1008, "TEE internal client API"); static void *cancellation_thread(void *arg) { /* * Sleep 0.5 seconds before cancellation to make sure that the other * thread is in RPC_WAIT. */ (void)usleep(500000); TEEC_RequestCancellation(arg); return NULL; } static void xtest_tee_test_1009_subcase(ADBG_Case_t *c, const char *subcase, uint32_t timeout, bool cancel) { TEEC_Session session = { }; uint32_t ret_orig = 0; pthread_t thr; memset(&thr, 0, sizeof(thr)); Do_ADBG_BeginSubCase(c, "%s", subcase); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; if (ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); op.params[0].value.a = timeout; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (cancel) { (void)ADBG_EXPECT(c, 0, pthread_create(&thr, NULL, cancellation_thread, &op)); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_CANCEL, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_WAIT, &op, &ret_orig)); } else (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_WAIT, &op, &ret_orig)); if (cancel) (void)ADBG_EXPECT(c, 0, pthread_join(thr, NULL)); TEEC_CloseSession(&session); } } Do_ADBG_EndSubCase(c, "%s", subcase); } static void xtest_tee_test_1009(ADBG_Case_t *c) { xtest_tee_test_1009_subcase(c, "TEE Wait 0.1s", 100, false); xtest_tee_test_1009_subcase(c, "TEE Wait 0.5s", 500, false); xtest_tee_test_1009_subcase(c, "TEE Wait 2s cancel", 2000, true); xtest_tee_test_1009_subcase(c, "TEE Wait 2s", 2000, false); } ADBG_CASE_DEFINE(regression, 1009, xtest_tee_test_1009, "TEE Wait"); static void xtest_tee_test_1010(ADBG_Case_t *c) { unsigned int n = 0; unsigned int idx = 0; size_t memref_sz[] = { 1024, 65536 }; for (n = 1; n <= 7; n++) { Do_ADBG_BeginSubCase(c, "Invalid memory access %u", n); xtest_tee_test_invalid_mem_access(c, n); Do_ADBG_EndSubCase(c, "Invalid memory access %u", n); } for (idx = 0; idx < ARRAY_SIZE(memref_sz); idx++) { for (n = 1; n <= 5; n++) { Do_ADBG_BeginSubCase(c, "Invalid memory access %u with %zu bytes memref", n, memref_sz[idx]); xtest_tee_test_invalid_mem_access2(c, n, memref_sz[idx]); Do_ADBG_EndSubCase(c, "Invalid memory access %u with %zu bytes memref", n, memref_sz[idx]); } } } ADBG_CASE_DEFINE(regression, 1010, xtest_tee_test_1010, "Invalid memory access"); static void xtest_tee_test_1011(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; struct xtest_crypto_session cs = { c, &session, TA_RPC_CMD_CRYPT_SHA256, TA_RPC_CMD_CRYPT_AES256ECB_ENC, TA_RPC_CMD_CRYPT_AES256ECB_DEC }; struct xtest_crypto_session cs_privmem = { c, &session, TA_RPC_CMD_CRYPT_PRIVMEM_SHA256, TA_RPC_CMD_CRYPT_PRIVMEM_AES256ECB_ENC, TA_RPC_CMD_CRYPT_PRIVMEM_AES256ECB_DEC }; TEEC_UUID uuid = rpc_test_ta_uuid; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "TA-to-TA via non-secure shared memory"); /* * Run the "complete crypto test suite" using TA-to-TA * communication */ xtest_crypto_test(&cs); Do_ADBG_EndSubCase(c, "TA-to-TA via non-secure shared memory"); Do_ADBG_BeginSubCase(c, "TA-to-TA via TA private memory"); /* * Run the "complete crypto test suite" using TA-to-TA * communication via TA private memory. */ xtest_crypto_test(&cs_privmem); Do_ADBG_EndSubCase(c, "TA-to-TA via TA private memory"); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1011, xtest_tee_test_1011, "Test TA-to-TA features with User Crypt TA"); /* * Note that this test is failing when * - running twice in a raw * - and the user TA is statically linked * This is because the counter is not reseted when opening the first session * in case the TA is statically linked */ static void xtest_tee_test_1012(ADBG_Case_t *c) { TEEC_Session session1 = { }; TEEC_Session session2 = { }; uint32_t ret_orig = 0; TEEC_UUID uuid = sims_test_ta_uuid; Do_ADBG_BeginSubCase(c, "Single Instance Multi Session"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; static const uint8_t in[] = { 0x5A, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96, 0xF0, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92, 0xE9, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6, 0xF0, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x8E }; uint8_t out[32] = { }; int i = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session1, &uuid, NULL, &ret_orig))) return; op.params[0].value.a = 0; op.params[1].tmpref.buffer = (void *)in; op.params[1].tmpref.size = sizeof(in); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session1, TA_SIMS_CMD_WRITE, &op, &ret_orig)); for (i = 1; i < 3; i++) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session2, &uuid, NULL, &ret_orig))) continue; op.params[0].value.a = 0; op.params[1].tmpref.buffer = out; op.params[1].tmpref.size = sizeof(out); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session2, TA_SIMS_CMD_READ, &op, &ret_orig)); if (!ADBG_EXPECT_BUFFER(c, in, sizeof(in), out, sizeof(out))) { Do_ADBG_Log("in:"); Do_ADBG_HexLog(in, sizeof(in), 16); Do_ADBG_Log("out:"); Do_ADBG_HexLog(out, sizeof(out), 16); } op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session1, TA_SIMS_CMD_GET_COUNTER, &op, &ret_orig)); (void)ADBG_EXPECT(c, 0, op.params[0].value.a); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session2, TA_SIMS_CMD_GET_COUNTER, &op, &ret_orig)); (void)ADBG_EXPECT(c, i, op.params[0].value.a); TEEC_CloseSession(&session2); } memset(out, 0, sizeof(out)); op.params[0].value.a = 0; op.params[1].tmpref.buffer = out; op.params[1].tmpref.size = sizeof(out); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session1, TA_SIMS_CMD_READ, &op, &ret_orig)); if (!ADBG_EXPECT(c, 0, memcmp(in, out, sizeof(in)))) { Do_ADBG_Log("in:"); Do_ADBG_HexLog(in, sizeof(in), 16); Do_ADBG_Log("out:"); Do_ADBG_HexLog(out, sizeof(out), 16); } TEEC_CloseSession(&session1); } Do_ADBG_EndSubCase(c, "Single Instance Multi Session"); } ADBG_CASE_DEFINE(regression, 1012, xtest_tee_test_1012, "Test Single Instance Multi Session features with SIMS TA"); struct test_1013_thread_arg { const TEEC_UUID *uuid; uint32_t cmd; uint32_t repeat; TEEC_SharedMemory *shm; uint32_t error_orig; TEEC_Result res; uint32_t max_concurrency; const uint8_t *in; size_t in_len; uint8_t *out; size_t out_len; }; static void *test_1013_thread(void *arg) { struct test_1013_thread_arg *a = arg; TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint8_t p2 = TEEC_NONE; uint8_t p3 = TEEC_NONE; a->res = xtest_teec_open_session(&session, a->uuid, NULL, &a->error_orig); if (a->res != TEEC_SUCCESS) return NULL; op.params[0].memref.parent = a->shm; op.params[0].memref.size = a->shm->size; op.params[0].memref.offset = 0; op.params[1].value.a = a->repeat; op.params[1].value.b = 0; op.params[2].tmpref.buffer = (void *)a->in; op.params[2].tmpref.size = a->in_len; op.params[3].tmpref.buffer = a->out; op.params[3].tmpref.size = a->out_len; if (a->in_len) p2 = TEEC_MEMREF_TEMP_INPUT; if (a->out_len) p3 = TEEC_MEMREF_TEMP_OUTPUT; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_VALUE_INOUT, p2, p3); a->res = TEEC_InvokeCommand(&session, a->cmd, &op, &a->error_orig); a->max_concurrency = op.params[1].value.b; a->out_len = op.params[3].tmpref.size; TEEC_CloseSession(&session); return NULL; } #define NUM_THREADS 3 static void xtest_tee_test_1013_single(ADBG_Case_t *c, double *mean_concurrency, const TEEC_UUID *uuid) { size_t nt = 0; size_t n = 0; size_t repeat = 1000; TEEC_SharedMemory shm = { }; size_t max_concurrency = 0; struct test_1013_thread_arg arg[NUM_THREADS] = { }; static const uint8_t sha256_in[] = { 'a', 'b', 'c' }; static const uint8_t sha256_out[] = { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad }; uint8_t out[32] = { }; pthread_t thr[NUM_THREADS] = { }; bool skip = false; /* Decrease number of loops when pager has a small page pool */ if (level == 0 && optee_pager_with_small_pool()) repeat = 250; Do_ADBG_BeginSubCase(c, "Busy loop repeat %zu", repeat * 10); *mean_concurrency = 0; shm.size = sizeof(struct ta_concurrent_shm); shm.flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT; if (!ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_AllocateSharedMemory(&xtest_teec_ctx, &shm))) return; memset(shm.buffer, 0, shm.size); max_concurrency = 0; nt = NUM_THREADS; for (n = 0; n < nt; n++) { arg[n].uuid = uuid; arg[n].cmd = TA_CONCURRENT_CMD_BUSY_LOOP; arg[n].repeat = repeat * 10; arg[n].shm = &shm; if (!ADBG_EXPECT(c, 0, pthread_create(thr + n, NULL, test_1013_thread, arg + n))) nt = n; /* break loop and start cleanup */ } for (n = 0; n < nt; n++) { ADBG_EXPECT(c, 0, pthread_join(thr[n], NULL)); if (arg[n].res == TEEC_ERROR_OUT_OF_MEMORY && !memcmp(uuid, &concurrent_large_ta_uuid, sizeof(*uuid))) { Do_ADBG_Log("TEEC_ERROR_OUT_OF_MEMORY - ignored"); skip = true; continue; } ADBG_EXPECT_TEEC_SUCCESS(c, arg[n].res); if (arg[n].max_concurrency > max_concurrency) max_concurrency = arg[n].max_concurrency; } /* * Concurrency can be limited by several factors, for instance in a * single CPU system it's dependent on the Preemption Model used by * the kernel (Preemptible Kernel (Low-Latency Desktop) gives the * best result there). */ if (!skip) { (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, max_concurrency, >, 0); (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, max_concurrency, <=, NUM_THREADS); *mean_concurrency += max_concurrency; } Do_ADBG_EndSubCase(c, "Busy loop repeat %zu", repeat * 10); Do_ADBG_BeginSubCase(c, "SHA-256 loop repeat %zu", repeat); memset(shm.buffer, 0, shm.size); memset(arg, 0, sizeof(arg)); max_concurrency = 0; nt = NUM_THREADS; for (n = 0; n < nt; n++) { arg[n].uuid = uuid; arg[n].cmd = TA_CONCURRENT_CMD_SHA256; arg[n].repeat = repeat; arg[n].shm = &shm; arg[n].in = sha256_in; arg[n].in_len = sizeof(sha256_in); arg[n].out = out; arg[n].out_len = sizeof(out); if (!ADBG_EXPECT(c, 0, pthread_create(thr + n, NULL, test_1013_thread, arg + n))) nt = n; /* break loop and start cleanup */ } for (n = 0; n < nt; n++) { ADBG_EXPECT(c, 0, pthread_join(thr[n], NULL)); if (arg[n].res == TEEC_ERROR_OUT_OF_MEMORY && !memcmp(uuid, &concurrent_large_ta_uuid, sizeof(*uuid))) { Do_ADBG_Log("TEEC_ERROR_OUT_OF_MEMORY - ignored"); continue; } if (ADBG_EXPECT_TEEC_SUCCESS(c, arg[n].res)) ADBG_EXPECT_BUFFER(c, sha256_out, sizeof(sha256_out), arg[n].out, arg[n].out_len); if (arg[n].max_concurrency > max_concurrency) max_concurrency = arg[n].max_concurrency; } *mean_concurrency += max_concurrency; Do_ADBG_EndSubCase(c, "SHA-256 loop repeat %zu", repeat); *mean_concurrency /= 2.0; TEEC_ReleaseSharedMemory(&shm); } static void xtest_tee_test_1013(ADBG_Case_t *c) { int i = 0; double mean_concurrency = 0; double concurrency = 0; int nb_loops = 24; if (level == 0) nb_loops /= 2; Do_ADBG_BeginSubCase(c, "Using small concurrency TA"); mean_concurrency = 0; for (i = 0; i < nb_loops; i++) { xtest_tee_test_1013_single(c, &concurrency, &concurrent_ta_uuid); mean_concurrency += concurrency; } mean_concurrency /= nb_loops; Do_ADBG_Log(" Number of parallel threads: %d", NUM_THREADS); Do_ADBG_Log(" Mean concurrency: %g", mean_concurrency); Do_ADBG_EndSubCase(c, "Using small concurrency TA"); Do_ADBG_BeginSubCase(c, "Using large concurrency TA"); mean_concurrency = 0; for (i = 0; i < nb_loops; i++) { xtest_tee_test_1013_single(c, &concurrency, &concurrent_large_ta_uuid); mean_concurrency += concurrency; } mean_concurrency /= nb_loops; Do_ADBG_Log(" Number of parallel threads: %d", NUM_THREADS); Do_ADBG_Log(" Mean concurrency: %g", mean_concurrency); Do_ADBG_EndSubCase(c, "Using large concurrency TA"); } ADBG_CASE_DEFINE(regression, 1013, xtest_tee_test_1013, "Test concurrency with concurrent TA"); #ifdef CFG_SECURE_DATA_PATH static void xtest_tee_test_1014(ADBG_Case_t *c) { UNUSED(c); int size = 17000; int loop = 10; const char *heap_name = DEFAULT_HEAP_NAME; int rnd_offset = 1; int test = 0; int ret = 0; test = TEST_NS_TO_TA; Do_ADBG_BeginSubCase(c, "SDP: NonSecure client invokes a SDP TA"); ret = sdp_basic_test(test, size, loop, heap_name, rnd_offset, 0); ADBG_EXPECT(c, 0, ret); Do_ADBG_EndSubCase(c, "SDP: NonSecure client invokes a SDP TA"); test = TEST_TA_TO_TA; Do_ADBG_BeginSubCase(c, "SDP: SDP TA invokes a SDP TA"); ret = sdp_basic_test(test, size, loop, heap_name, rnd_offset, 0); ADBG_EXPECT(c, 0, ret); Do_ADBG_EndSubCase(c, "SDP: SDP TA invokes a SDP TA"); test = TEST_TA_TO_PTA; Do_ADBG_BeginSubCase(c, "SDP: SDP TA invokes a test pTA (invoke_tests.pta)"); ret = sdp_basic_test(test, size, loop, heap_name, rnd_offset, 0); ADBG_EXPECT(c, 0, ret); Do_ADBG_EndSubCase(c, "SDP: SDP TA invokes a test pTA (invoke_tests.pta)"); test = TEST_NS_TO_PTA; Do_ADBG_BeginSubCase(c, "SDP: NSec CA invokes a test pTA (invoke_tests.pta) (should fail)"); ret = sdp_basic_test(test, size, loop, heap_name, rnd_offset, 0); ADBG_EXPECT(c, 1, ret); Do_ADBG_EndSubCase(c, "SDP: NSec CA invokes a test pTA (invoke_tests.pta) (should fail)"); Do_ADBG_BeginSubCase(c, "SDP: Invoke TA with out of bounds SDP memref"); ret = sdp_out_of_bounds_memref_test(size, heap_name, 0); ADBG_EXPECT(c, 0, ret); Do_ADBG_EndSubCase(c, NULL); } ADBG_CASE_DEFINE(regression, 1014, xtest_tee_test_1014, "Test secure data path against SDP TAs and pTAs"); #endif /*CFG_SECURE_DATA_PATH*/ #ifdef CFG_REE_FS static void xtest_tee_test_1015(ADBG_Case_t *c) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; /* Pseudo TA is optional: warn and nicely exit if not found */ res = xtest_teec_open_session(&session, &pta_invoke_tests_ta_uuid, NULL, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND) { Do_ADBG_Log(" - 1015 - skip test, pseudo TA not found"); return; } ADBG_EXPECT_TEEC_SUCCESS(c, res); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, PTA_INVOKE_TESTS_CMD_FS_HTREE, NULL, &ret_orig)); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1015, xtest_tee_test_1015, "FS hash-tree corner cases"); #endif /*CFG_REE_FS*/ static void xtest_tee_test_1016(ADBG_Case_t *c) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; int dummy = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_TA2TA_MEMREF, &op, &ret_orig)); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INOUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); op.params[0].tmpref.buffer = &dummy; op.params[0].tmpref.size = 0; op.params[1].tmpref.buffer = &dummy; op.params[1].tmpref.size = 0; op.params[2].tmpref.buffer = &dummy; op.params[2].tmpref.size = 0; (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_TA2TA_MEMREF_SIZE0, &op, &ret_orig)); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1016, xtest_tee_test_1016, "Test TA to TA transfers (in/out/inout memrefs on the stack)"); static void xtest_tee_test_1017(ADBG_Case_t *c) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; TEEC_SharedMemory shm = { }; size_t page_size = 4096; shm.size = 8 * page_size; shm.flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT; if (!ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_AllocateSharedMemory(&xtest_teec_ctx, &shm))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) goto out; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_MEMREF_PARTIAL_OUTPUT); /* * The first two memrefs are supposed to be combined into in * region and the last two memrefs should have one region each * when the parameters are mapped for the TA. */ op.params[0].memref.parent = &shm; op.params[0].memref.size = page_size; op.params[0].memref.offset = 0; op.params[1].memref.parent = &shm; op.params[1].memref.size = page_size; op.params[1].memref.offset = page_size; op.params[2].memref.parent = &shm; op.params[2].memref.size = page_size; op.params[2].memref.offset = 4 * page_size; op.params[3].memref.parent = &shm; op.params[3].memref.size = 2 * page_size; op.params[3].memref.offset = 6 * page_size; (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_PARAMS, &op, &ret_orig)); TEEC_CloseSession(&session); out: TEEC_ReleaseSharedMemory(&shm); } ADBG_CASE_DEFINE(regression, 1017, xtest_tee_test_1017, "Test coalescing memrefs"); static void invoke_1byte_out_of_bounds(ADBG_Case_t *c, TEEC_Session *session, TEEC_SharedMemory *shm) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result ret = TEEC_ERROR_GENERIC; uint32_t ret_orig = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].memref.parent = shm; op.params[0].memref.size = shm->size / 2; op.params[0].memref.offset = shm->size - (shm->size / 2) + 1; ret = TEEC_InvokeCommand(session, TA_OS_TEST_CMD_PARAMS, &op, &ret_orig); ADBG_EXPECT_COMPARE_UNSIGNED(c, ret_orig, !=, TEEC_ORIGIN_TRUSTED_APP); if (ret != TEEC_ERROR_BAD_PARAMETERS && ret != TEEC_ERROR_GENERIC) { ADBG_EXPECT(c, TEEC_ERROR_BAD_PARAMETERS, ret); ADBG_EXPECT(c, TEEC_ERROR_GENERIC, ret); } } static void xtest_tee_test_1018(ADBG_Case_t *c) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; TEEC_SharedMemory shm = { }; TEEC_Result ret = TEEC_ERROR_GENERIC; size_t page_size = 4096; /* Intentionally not 4kB aligned and odd */ uint8_t buffer[6001] = { }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "Out of bounds > 4kB on allocated shm"); shm.size = 8 * page_size; shm.flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT; if (!ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_AllocateSharedMemory(&xtest_teec_ctx, &shm))) goto out; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_MEMREF_PARTIAL_OUTPUT); /* * The first two memrefs are supposed to be combined into in * region and the last two memrefs should have one region each * when the parameters are mapped for the TA. */ op.params[0].memref.parent = &shm; op.params[0].memref.size = page_size; op.params[0].memref.offset = 0; op.params[1].memref.parent = &shm; op.params[1].memref.size = page_size; op.params[1].memref.offset = page_size; op.params[2].memref.parent = &shm; op.params[2].memref.size = page_size; op.params[2].memref.offset = 4 * page_size; op.params[3].memref.parent = &shm; op.params[3].memref.size = 3 * page_size; op.params[3].memref.offset = 6 * page_size; ret = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_PARAMS, &op, &ret_orig); ADBG_EXPECT_COMPARE_UNSIGNED(c, ret_orig, !=, TEEC_ORIGIN_TRUSTED_APP); if (ret != TEEC_ERROR_BAD_PARAMETERS && ret != TEEC_ERROR_GENERIC) { ADBG_EXPECT(c, TEEC_ERROR_BAD_PARAMETERS, ret); ADBG_EXPECT(c, TEEC_ERROR_GENERIC, ret); } TEEC_ReleaseSharedMemory(&shm); Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Out of bounds by 1 byte on registered shm"); memset(&shm, 0, sizeof(shm)); shm.flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT; shm.buffer = buffer; shm.size = sizeof(buffer); if (!ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_RegisterSharedMemory(&xtest_teec_ctx, &shm))) goto out; invoke_1byte_out_of_bounds(c, &session, &shm); TEEC_ReleaseSharedMemory(&shm); Do_ADBG_EndSubCase(c, NULL); Do_ADBG_BeginSubCase(c, "Out of bounds by 1 byte ref on allocated shm"); memset(&shm, 0, sizeof(shm)); shm.size = sizeof(buffer); shm.flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT; if (!ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_AllocateSharedMemory(&xtest_teec_ctx, &shm))) goto out; invoke_1byte_out_of_bounds(c, &session, &shm); TEEC_ReleaseSharedMemory(&shm); Do_ADBG_EndSubCase(c, NULL); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1018, xtest_tee_test_1018, "Test memref out of bounds"); static void xtest_tee_test_1019(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CALL_LIB, NULL, &ret_orig)); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CALL_LIB_PANIC, NULL, &ret_orig)); (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1019, xtest_tee_test_1019, "Test dynamically linked TA"); static void xtest_tee_test_1020(ADBG_Case_t *c) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; /* Pseudo TA is optional: warn and nicely exit if not found */ res = xtest_teec_open_session(&session, &pta_invoke_tests_ta_uuid, NULL, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND) { Do_ADBG_Log(" - 1020 - skip test, pseudo TA not found"); return; } ADBG_EXPECT_TEEC_SUCCESS(c, res); res = TEEC_InvokeCommand(&session, PTA_INVOKE_TESTS_CMD_LOCKDEP, NULL, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (res == TEEC_ERROR_NOT_SUPPORTED) { Do_ADBG_Log(" - 1020 - skip test, feature not " "implemented"); goto out; } /* Error */ (void)ADBG_EXPECT_TEEC_SUCCESS(c, res); } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1020, xtest_tee_test_1020, "Test lockdep algorithm"); static TEEC_Result open_sec_session(TEEC_Session *session, const TEEC_UUID *uuid) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].tmpref.buffer = (void *)uuid; op.params[0].tmpref.size = sizeof(*uuid); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(session, TA_SIMS_OPEN_TA_SESSION, &op, &ret_orig); if (res != TEEC_SUCCESS) return TEEC_ERROR_GENERIC; return res; } static TEEC_Result sims_get_counter(TEEC_Session *session, uint32_t *counter) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(session, TA_SIMS_CMD_GET_COUNTER, &op, &ret_orig); if (res == TEEC_SUCCESS) *counter = op.params[0].value.a; return res; } static TEEC_Result trigger_panic(TEEC_Session *session, const TEEC_UUID *uuid) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; if (!uuid) { op.params[0].tmpref.buffer = NULL; op.params[0].tmpref.size = 0; } else { op.params[0].tmpref.buffer = (void *)uuid; op.params[0].tmpref.size = sizeof(*uuid); } op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(session, TA_SIMS_CMD_PANIC, &op, &ret_orig); } static void test_panic_ca_to_ta(ADBG_Case_t *c, const TEEC_UUID *uuid, bool multi_instance) { TEEC_Result exp_res = TEEC_ERROR_GENERIC; uint32_t counter = 0; uint32_t ret_orig = 0; uint32_t exp_counter = 0; TEEC_Session cs[3] = { }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&cs[0], uuid, NULL, &ret_orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&cs[1], uuid, NULL, &ret_orig))) goto bail0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, sims_get_counter(&cs[0], &counter))) goto bail1; if (!ADBG_EXPECT(c, 0, counter)) goto bail1; if (!ADBG_EXPECT_TEEC_SUCCESS(c, sims_get_counter(&cs[1], &counter))) goto bail1; exp_counter = multi_instance ? 0 : 1; if (!ADBG_EXPECT(c, exp_counter, counter)) goto bail1; if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, trigger_panic(&cs[1], NULL))) goto bail1; exp_res = multi_instance ? TEEC_SUCCESS : TEEC_ERROR_TARGET_DEAD; if (!ADBG_EXPECT_TEEC_RESULT(c, exp_res, sims_get_counter(&cs[0], &counter))) goto bail1; if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, sims_get_counter(&cs[1], &counter))) goto bail1; /* Attempt to open a session on panicked context */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&cs[1], uuid, NULL, &ret_orig))) goto bail1; /* Sanity check of still valid TA context */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&cs[2], uuid, NULL, &ret_orig))) goto bail1; /* Sanity check of still valid TA context */ if (multi_instance) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, sims_get_counter(&cs[0], &counter))) goto bail2; if (!ADBG_EXPECT(c, 0, counter)) goto bail2; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, sims_get_counter(&cs[2], &counter))) goto bail2; exp_counter = multi_instance ? 0 : 1; if (!ADBG_EXPECT(c, exp_counter, counter)) goto bail2; bail2: TEEC_CloseSession(&cs[2]); bail1: TEEC_CloseSession(&cs[1]); bail0: TEEC_CloseSession(&cs[0]); } static void test_panic_ta_to_ta(ADBG_Case_t *c, const TEEC_UUID *uuid1, const TEEC_UUID *uuid2) { uint32_t ret_orig = 0; uint32_t counter = 0; TEEC_Session cs[3] = { }; /* Test pre-conditions */ /* 2.1 - CA opens a session toward TA1 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&cs[0], uuid1, NULL, &ret_orig))) return; /* 2.2 - CA opens a session toward TA2 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&cs[1], uuid2, NULL, &ret_orig))) goto bail0; /* 2.3 - TA1 opens a session toward TA2 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, open_sec_session(&cs[0], uuid2))) goto bail1; /* 2.4 - CA invokes TA2 which panics */ if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, trigger_panic(&cs[1], NULL))) goto bail1; /* Expected results */ /* 2.5 - Expect CA->TA1 session is still alive */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, sims_get_counter(&cs[0], &counter))) goto bail1; /* 2.6 - Expect CA->TA2 session is properly released */ if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, sims_get_counter(&cs[1], &counter))) goto bail1; bail1: TEEC_CloseSession(&cs[1]); bail0: TEEC_CloseSession(&cs[0]); memset(cs, 0, sizeof(cs)); /* Test pre-conditions */ /* 2.1 - CA opens a session toward TA1 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&cs[0], uuid1, NULL, &ret_orig))) return; /* 2.2 - CA opens a session toward TA2 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&cs[1], uuid2, NULL, &ret_orig))) goto bail2; /* 2.3 - TA1 opens a session toward TA2 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, open_sec_session(&cs[0], uuid2))) goto bail3; /* 2.4 - CA invokes TA1 which invokes TA2 which panics */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, trigger_panic(&cs[0], uuid2))) goto bail3; /* Expected results */ /* 2.5 - Expect CA->TA1 session is still alive */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, sims_get_counter(&cs[0], &counter))) goto bail3; /* 2.6 - Expect CA->TA2 session is properly released */ if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, sims_get_counter(&cs[1], &counter))) goto bail3; bail3: TEEC_CloseSession(&cs[1]); bail2: TEEC_CloseSession(&cs[0]); } static void xtest_tee_test_1021(ADBG_Case_t *c) { Do_ADBG_BeginSubCase(c, "Multiple Instances Single Session"); test_panic_ca_to_ta(c, &miss_test_ta_uuid, true); Do_ADBG_EndSubCase(c, "Multiple Instances Single Session"); Do_ADBG_BeginSubCase(c, "Single Instance Multi Sessions"); test_panic_ca_to_ta(c, &sims_test_ta_uuid, false); Do_ADBG_EndSubCase(c, "Single Instance Multi Sessions"); Do_ADBG_BeginSubCase(c, "Single Instance Multi Sessions Keep Alive"); test_panic_ca_to_ta(c, &sims_keepalive_test_ta_uuid, false); Do_ADBG_EndSubCase(c, "Single Instance Multi Sessions Keep Alive"); Do_ADBG_BeginSubCase(c, "Multi Sessions TA to TA"); test_panic_ta_to_ta(c, &sims_test_ta_uuid, &sims_keepalive_test_ta_uuid); Do_ADBG_EndSubCase(c, "Multi Sessions TA to TA"); } ADBG_CASE_DEFINE(regression, 1021, xtest_tee_test_1021, "Test panic context release"); static void xtest_tee_test_1022(ADBG_Case_t *c) { TEEC_Session session = { 0 }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CALL_LIB_DL, NULL, &ret_orig)); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CALL_LIB_DL_PANIC, NULL, &ret_orig)); (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1022, xtest_tee_test_1022, "Test dlopen()/dlsym()/dlclose() API"); /* * Testing the ELF initialization (.init_array) * * - The TA has a global variable which can also be accessed by the two shared * libraries os_test_lib (linked with the TA) and os_test_lib_dl (loaded via * dlopen()) * - The TA and both libraries have initialization functions (declared with the * "constructor" attribute) which perform the following: * * The TA multiplies by 10 then adds 1 * * os_test_lib multiplies by 10 then adds 2 * * os_test_lib_dl multiplies by 10 then adds 3 * By testing the variable value we make sure the initializations occurred in * the correct order. */ static void xtest_tee_test_1023(ADBG_Case_t *c) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Session session = { 0 }; uint32_t ret_orig = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_GET_GLOBAL_VAR, &op, &ret_orig)); /* Expected: initialization of os_test_lib, then TA */ (void)ADBG_EXPECT_COMPARE_SIGNED(c, op.params[0].value.a, ==, 21); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CALL_LIB_DL, NULL, &ret_orig)); (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_GET_GLOBAL_VAR, &op, &ret_orig)); /* Expected: initialization of os_test_lib_dl */ (void)ADBG_EXPECT_COMPARE_SIGNED(c, op.params[0].value.a, ==, 213); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1023, xtest_tee_test_1023, "Test ELF initialization (.init_array)"); #ifdef CFG_CORE_TPM_EVENT_LOG static void xtest_tee_test_1024(ADBG_Case_t *c) { TEEC_Session session = {}; uint32_t ret_orig = 0; xtest_teec_open_session(&session, &tpm_log_test_ta_uuid, NULL, &ret_orig); Do_ADBG_BeginSubCase(c, "TPM test service invocation"); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_TPM_TEST_GET_LOG, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "TPM test service invocation"); Do_ADBG_BeginSubCase(c, "TPM test passing short buffer"); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_TPM_TEST_SHORT_BUF, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "TPM test passing short buffer"); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1024, xtest_tee_test_1024, "Test PTA_SYSTEM_GET_TPM_EVENT_LOG Service"); #endif /* CFG_CORE_TPM_EVENT_LOG */ static void xtest_tee_test_1025(ADBG_Case_t *c) { TEEC_Session session = {}; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; uint8_t *empty_buf = NULL; TEEC_SharedMemory shm = { }; TEEC_Result res = TEEC_ERROR_GENERIC; Do_ADBG_BeginSubCase(c, "Invalid NULL buffer memref registration"); memset(&shm, 0, sizeof(shm)); shm.flags = TEEC_MEM_INPUT; shm.buffer = NULL; shm.size = 0; ADBG_EXPECT(c, TEEC_ERROR_BAD_PARAMETERS, TEEC_RegisterSharedMemory(&xtest_teec_ctx, &shm)); memset(&shm, 0, sizeof(shm)); shm.flags = TEEC_MEM_OUTPUT; shm.buffer = NULL; shm.size = 0; ADBG_EXPECT(c, TEEC_ERROR_BAD_PARAMETERS, TEEC_RegisterSharedMemory(&xtest_teec_ctx, &shm)); Do_ADBG_EndSubCase(c, "Invalid NULL buffer memref registration"); if (!xtest_teec_ctx.imp.memref_null) { Do_ADBG_Log("Skip subcases: MEMREF_NULL capability not supported"); return; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; empty_buf = malloc(1); if (!empty_buf) { (void)ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_ERROR_OUT_OF_MEMORY); goto out_session; } op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_MEMREF_TEMP_OUTPUT); Do_ADBG_BeginSubCase(c, "Input/Output MEMREF Buffer NULL - Size 0 bytes"); op.params[0].tmpref.buffer = empty_buf; op.params[0].tmpref.size = 0; op.params[1].tmpref.buffer = NULL; op.params[1].tmpref.size = 0; op.params[2].tmpref.buffer = empty_buf; op.params[2].tmpref.size = 0; op.params[3].tmpref.buffer = NULL; op.params[3].tmpref.size = 0; ADBG_EXPECT(c, TEE_SUCCESS, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_NULL_MEMREF_PARAMS, &op, &ret_orig)); Do_ADBG_EndSubCase(c, "Input/Output MEMREF Buffer NULL - Size 0 bytes"); Do_ADBG_BeginSubCase(c, "Input MEMREF Buffer NULL - Size non 0 bytes"); op.params[0].tmpref.buffer = empty_buf; op.params[0].tmpref.size = 1; op.params[1].tmpref.buffer = NULL; op.params[1].tmpref.size = 0; op.params[2].tmpref.buffer = empty_buf; op.params[2].tmpref.size = 0; op.params[3].tmpref.buffer = NULL; op.params[3].tmpref.size = 0; ADBG_EXPECT(c, TEE_ERROR_BAD_PARAMETERS, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_NULL_MEMREF_PARAMS, &op, &ret_orig)); TEEC_CloseSession(&session); Do_ADBG_EndSubCase(c, "Input MEMREF Buffer NULL - Size non 0 bytes"); Do_ADBG_BeginSubCase(c, "Input MEMREF Buffer NULL over PTA invocation"); /* Pseudo TA is optional: warn and nicely exit if not found */ res = xtest_teec_open_session(&session, &pta_invoke_tests_ta_uuid, NULL, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND) { Do_ADBG_Log(" - 1025 - skip test, pseudo TA not found"); goto out; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.buffer = NULL; op.params[0].tmpref.size = 0; ADBG_EXPECT(c, TEE_SUCCESS, TEEC_InvokeCommand(&session, PTA_INVOKE_TESTS_CMD_MEMREF_NULL, &op, &ret_orig)); out_session: TEEC_CloseSession(&session); out: Do_ADBG_EndSubCase(c, NULL); free(empty_buf); } ADBG_CASE_DEFINE(regression, 1025, xtest_tee_test_1025, "Test memref NULL and/or 0 bytes size"); #define TEE_UUID_NS_NAME_SIZE 128 /* * TEE Client UUID name space identifier (UUIDv4) * * Value here is random UUID that is allocated as name space identifier for * forming Client UUID's for TEE environment using UUIDv5 scheme. */ static const char *client_uuid_linux_ns = "58ac9ca0-2086-4683-a1b8-ec4bc08e01b6"; /* TEEC_LOGIN_PUBLIC's Client UUID is NIL UUID */ static TEEC_UUID client_uuid_public = { }; static void xtest_tee_test_1026(ADBG_Case_t *c) { TEEC_Result result = TEEC_ERROR_GENERIC; uint32_t ret_orig = 0; TEEC_Session session = { }; uint32_t login = UINT32_MAX; TEEC_UUID client_uuid = { }; result = TEEC_OpenSession(&xtest_teec_ctx, &session, &os_test_ta_uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) return; result = ta_os_test_cmd_client_identity(&session, &login, &client_uuid); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, login, ==, TEEC_LOGIN_PUBLIC); ADBG_EXPECT_EQUAL(c, &client_uuid_public, &client_uuid, sizeof(TEEC_UUID)); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1026, xtest_tee_test_1026, "Session: public login"); /* * regression_1027 * Depends on OpenSSL * Depends on kernel commit c5b4312bea5d ("tee: optee: Add support for session * login client UUID generation") * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c5b4312bea5d * * xtest skips the test when not built with OpenSSL. */ static void xtest_tee_test_1027(ADBG_Case_t *c) { #ifdef OPENSSL_FOUND TEEC_Result result = TEEC_ERROR_GENERIC; uint32_t ret_orig = 0; TEEC_Session session = { }; uint32_t login = UINT32_MAX; TEEC_UUID client_uuid = { }; TEEC_UUID expected_client_uuid = { }; TEEC_UUID uuid_ns = { }; char uuid_name[TEE_UUID_NS_NAME_SIZE] = { }; result = xtest_uuid_from_str(&uuid_ns, client_uuid_linux_ns); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) return; sprintf(uuid_name, "uid=%x", geteuid()); result = xtest_uuid_v5(&expected_client_uuid, &uuid_ns, uuid_name, strlen(uuid_name)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) return; result = TEEC_OpenSession(&xtest_teec_ctx, &session, &os_test_ta_uuid, TEEC_LOGIN_USER, NULL, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) return; result = ta_os_test_cmd_client_identity(&session, &login, &client_uuid); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, login, ==, TEEC_LOGIN_USER); ADBG_EXPECT_EQUAL(c, &expected_client_uuid, &client_uuid, sizeof(TEEC_UUID)); out: TEEC_CloseSession(&session); #else /*!OPENSSL_FOUND*/ UNUSED(c); UNUSED(client_uuid_linux_ns); /* xtest_uuid_v5() depends on OpenSSL */ Do_ADBG_Log("OpenSSL not available, skipping test 1027"); #endif } ADBG_CASE_DEFINE(regression, 1027, xtest_tee_test_1027, "Session: user login for current user"); /* * regression_1028 * Depends on kernel commit c5b4312bea5d ("tee: optee: Add support for session * login client UUID generation") * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c5b4312bea5d * * xtest skips the test when not built with OpenSSL. */ static void xtest_tee_test_1028(ADBG_Case_t *c) { #ifdef OPENSSL_FOUND TEEC_Result result = TEEC_ERROR_GENERIC; uint32_t ret_orig = 0; TEEC_Session session = { }; uint32_t login = UINT32_MAX; TEEC_UUID client_uuid = { }; TEEC_UUID expected_client_uuid = { }; TEEC_UUID uuid_ns = { }; char uuid_name[TEE_UUID_NS_NAME_SIZE] = { }; uint32_t group = 0; group = getegid(); result = xtest_uuid_from_str(&uuid_ns, client_uuid_linux_ns); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) return; sprintf(uuid_name, "gid=%x", group); result = xtest_uuid_v5(&expected_client_uuid, &uuid_ns, uuid_name, strlen(uuid_name)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) return; result = TEEC_OpenSession(&xtest_teec_ctx, &session, &os_test_ta_uuid, TEEC_LOGIN_GROUP, &group, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) return; result = ta_os_test_cmd_client_identity(&session, &login, &client_uuid); if (!ADBG_EXPECT_TEEC_SUCCESS(c, result)) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(c, login, ==, TEEC_LOGIN_GROUP); ADBG_EXPECT_EQUAL(c, &expected_client_uuid, &client_uuid, sizeof(TEEC_UUID)); out: TEEC_CloseSession(&session); #else /*!OPENSSL_FOUND*/ UNUSED(c); /* xtest_uuid_v5() depends on OpenSSL */ Do_ADBG_Log("OpenSSL not available, skipping test 1028"); #endif } ADBG_CASE_DEFINE(regression, 1028, xtest_tee_test_1028, "Session: group login for current user's effective group"); static void xtest_tee_test_1029(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; TEEC_Session session = { 0 }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "TLS variables (main program)"); res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_TLS_TEST_MAIN, NULL, &ret_orig); if (res == TEEC_ERROR_NOT_SUPPORTED) Do_ADBG_Log(" - 1029 - skip test, " "TA returned TEEC_ERROR_NOT_SUPPORTED"); else ADBG_EXPECT_TEEC_SUCCESS(c, res); Do_ADBG_EndSubCase(c, "TLS variables (main program)"); Do_ADBG_BeginSubCase(c, "TLS variables (shared library)"); res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_TLS_TEST_SHLIB, NULL, &ret_orig); if (res == TEEC_ERROR_NOT_SUPPORTED) Do_ADBG_Log(" - 1029 - skip test, " "TA returned TEEC_ERROR_NOT_SUPPORTED"); else ADBG_EXPECT_TEEC_SUCCESS(c, res); Do_ADBG_EndSubCase(c, "TLS variables (shared library)"); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1029, xtest_tee_test_1029, "Test __thread attribute"); static void xtest_tee_test_1030(ADBG_Case_t *c) { TEEC_Session session = { 0 }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "Before dlopen()"); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_DL_PHDR, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "Before dlopen()"); Do_ADBG_BeginSubCase(c, "After dlopen()"); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_DL_PHDR_DL, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "After dlopen()"); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1030, xtest_tee_test_1030, "Test dl_iterate_phdr()"); #ifndef __clang__ static void xtest_tee_test_1031(ADBG_Case_t *c) { TEEC_Result ret = TEE_SUCCESS; TEEC_Session session = { 0 }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "Global object constructor (main program)"); ret = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CXX_CTOR_MAIN, NULL, &ret_orig); if (ret == TEEC_ERROR_NOT_SUPPORTED) { printf("TA not built with C++ support, skipping C++ tests\n"); Do_ADBG_EndSubCase(c, "Global object constructor (main program)"); goto out; } ADBG_EXPECT_TEEC_SUCCESS(c, ret); Do_ADBG_EndSubCase(c, "Global object constructor (main program)"); Do_ADBG_BeginSubCase(c, "Global object constructor (shared library)"); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CXX_CTOR_SHLIB, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "Global object constructor (shared library)"); Do_ADBG_BeginSubCase(c, "Global object constructor (dlopen()ed lib)"); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CXX_CTOR_SHLIB_DL, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "Global object constructor (dlopen()ed lib)"); Do_ADBG_BeginSubCase(c, "Exceptions (simple)"); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CXX_EXC_MAIN, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "Exceptions (simple)"); Do_ADBG_BeginSubCase(c, "Exceptions (mixed C/C++ frames)"); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CXX_EXC_MIXED, NULL, &ret_orig)); Do_ADBG_EndSubCase(c, "Exceptions (mixed C/C++ frames)"); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1031, xtest_tee_test_1031, "Test C++ features"); #endif static void xtest_tee_test_1032(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; TEEC_Context ctx = { }; TEEC_SharedMemory shm1 = { .buffer = xtest_tee_test_1032, .size = 32, .flags = TEEC_MEM_INPUT, }; static const uint8_t dummy_data[32] = { 1, 2, 3, 4, }; TEEC_SharedMemory shm2 = { .buffer = (void *)dummy_data, .size = sizeof(dummy_data), .flags = TEEC_MEM_INPUT, }; res = TEEC_InitializeContext(xtest_tee_name, &ctx); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; res = TEEC_RegisterSharedMemory(&ctx, &shm1); if (ADBG_EXPECT_TEEC_SUCCESS(c, res)) TEEC_ReleaseSharedMemory(&shm1); res = TEEC_RegisterSharedMemory(&ctx, &shm2); if (ADBG_EXPECT_TEEC_SUCCESS(c, res)) TEEC_ReleaseSharedMemory(&shm2); TEEC_FinalizeContext(&ctx); } ADBG_CASE_DEFINE(regression, 1032, xtest_tee_test_1032, "Register read-only shared memory"); static void xtest_tee_test_1033(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; /* TA will ping the test plugin during open session operation */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &supp_plugin_test_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "Pass values to/from a plugin"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].value.a = 20; op.params[0].value.b = 10; op.params[1].value.a = '+'; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INOUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_SUPP_PLUGIN_CMD_PASS_VALUES, &op, &ret_orig)); ADBG_EXPECT(c, 30, op.params[0].value.a); /* reassign, because the values was changed during previous op */ op.params[0].value.a = 20; op.params[0].value.b = 10; op.params[1].value.a = '-'; ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_SUPP_PLUGIN_CMD_PASS_VALUES, &op, &ret_orig)); ADBG_EXPECT(c, 10, op.params[0].value.a); } Do_ADBG_EndSubCase(c, "Pass values to/from a plugin"); Do_ADBG_BeginSubCase(c, "Pass array to a plugin"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint8_t to_plugin[] = { 0, 1, 2, 3, 4, 5 }; op.params[0].tmpref.buffer = to_plugin; op.params[0].tmpref.size = sizeof(to_plugin); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_SUPP_PLUGIN_CMD_WRITE_ARR, &op, &ret_orig)); /* * The test plugin must calculate a sum of the input elements * and store it to 'op.params[1].value.a' */ ADBG_EXPECT(c, 15, op.params[1].value.a); } Do_ADBG_EndSubCase(c, "Pass array to a plugin"); Do_ADBG_BeginSubCase(c, "Get array from a plugin"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; char from_plugin[64] = { }; char expected_arr[] = "Array from plugin"; size_t expectes_size = sizeof(expected_arr); op.params[0].tmpref.buffer = from_plugin; op.params[0].tmpref.size = sizeof(from_plugin); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_SUPP_PLUGIN_CMD_GET_ARR, &op, &ret_orig)); ADBG_EXPECT(c, expectes_size, op.params[1].value.a); ADBG_EXPECT_EQUAL(c, expected_arr, from_plugin, expectes_size); } Do_ADBG_EndSubCase(c, "Get array from a plugin"); Do_ADBG_BeginSubCase(c, "Not allow bad input to a plugin"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_BAD_PARAMETERS, TEEC_InvokeCommand(&session, TA_SUPP_PLUGIN_CMD_BAD_UUID, &op, &ret_orig)); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_BAD_PARAMETERS, TEEC_InvokeCommand(&session, TA_SUPP_PLUGIN_CMD_BAD_IN_DATA, &op, &ret_orig)); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_BAD_PARAMETERS, TEEC_InvokeCommand(&session, TA_SUPP_PLUGIN_CMD_BAD_IN_LEN, &op, &ret_orig)); } Do_ADBG_EndSubCase(c, "Not allow bad input to a plugin"); Do_ADBG_BeginSubCase(c, "Call an unknown plugin"); { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND, TEEC_InvokeCommand(&session, TA_SUPP_PLUGIN_CMD_UNKNOWN_UUID, &op, &ret_orig)); } Do_ADBG_EndSubCase(c, "Call an unknown plugin"); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1033, xtest_tee_test_1033, "Test the supplicant plugin framework"); static void xtest_tee_test_1034(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; TEEC_Session session = { }; uint32_t ret_orig = 0; res = xtest_teec_open_session(&session, &large_ta_uuid, NULL, &ret_orig); if (res == TEEC_ERROR_OUT_OF_MEMORY) { Do_ADBG_Log("TEEC_ERROR_OUT_OF_MEMORY - ignored"); return; } ADBG_EXPECT_TEEC_SUCCESS(c, res); if (!res) TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1034, xtest_tee_test_1034, "Test loading a large TA"); #if defined(CFG_TA_BTI) struct bti_test { uint32_t cmd; uint32_t func; }; #define BTI_TEST(caller_func, bti_func) { \ .cmd = caller_func, \ .func = bti_func, \ } static const struct bti_test bti_cases_success[] = { BTI_TEST(TA_TEST_USING_BLR, TA_FUNC_BTI_C), BTI_TEST(TA_TEST_USING_BLR, TA_FUNC_BTI_JC), BTI_TEST(TA_TEST_USING_BR, TA_FUNC_BTI_J), BTI_TEST(TA_TEST_USING_BR, TA_FUNC_BTI_JC), BTI_TEST(TA_TEST_USING_BR_X16, TA_FUNC_BTI_C), BTI_TEST(TA_TEST_USING_BR_X16, TA_FUNC_BTI_J), BTI_TEST(TA_TEST_USING_BR_X16, TA_FUNC_BTI_JC), }; static const struct bti_test bti_cases_panic[] = { BTI_TEST(TA_TEST_USING_BLR, TA_FUNC_BTI_J), BTI_TEST(TA_TEST_USING_BLR, TA_FUNC_BTI_NONE), BTI_TEST(TA_TEST_USING_BR, TA_FUNC_BTI_C), BTI_TEST(TA_TEST_USING_BR, TA_FUNC_BTI_NONE), BTI_TEST(TA_TEST_USING_BR_X16, TA_FUNC_BTI_NONE), }; static void get_cpu_feature(ADBG_Case_t *c, bool *bti) { TEEC_Session session = {}; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; TEEC_Result res; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &bti_test_ta_uuid, NULL, &ret_orig))) return; res = TEEC_InvokeCommand(&session, TA_FEAT_BTI_IMPLEMENTED, &op, &ret_orig); if (!res) { if(op.params[0].value.a) *bti = true; Do_ADBG_Log("FEAT_BTI is %simplemented", *bti ? "" : "NOT "); } TEEC_CloseSession(&session); } static void xtest_tee_test_1035(ADBG_Case_t *c) { TEEC_Session session = {}; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; struct bti_test const *test = NULL; uint32_t ret_orig = 0; TEEC_Result res; unsigned int n = 0; bool cpu_feature_bti = false; Do_ADBG_BeginSubCase(c, "BTI Implemented"); get_cpu_feature(c, &cpu_feature_bti); Do_ADBG_EndSubCase(c, "BTI Implemented"); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &bti_test_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "BTI Pass Cases"); for (n = 0; n < ARRAY_SIZE(bti_cases_success); n++) { test = &bti_cases_success[n]; op.params[0].value.a = test->func; res = TEEC_InvokeCommand(&session, test->cmd, &op, &ret_orig); if (res == TEEC_ERROR_NOT_IMPLEMENTED) { Do_ADBG_Log("Binary doesn't support BTI - skip tests"); Do_ADBG_EndSubCase(c, "BTI Pass Cases"); TEEC_CloseSession(&session); return; } Do_ADBG_BeginSubCase(c, "BTI Case %u", n); ADBG_EXPECT_TEEC_SUCCESS(c, res); Do_ADBG_EndSubCase(c, "BTI Case %u", n); } Do_ADBG_EndSubCase(c, "BTI Pass Cases"); TEEC_CloseSession(&session); Do_ADBG_BeginSubCase(c, "BTI Exception Generation"); for (n = 0; n < ARRAY_SIZE(bti_cases_panic); n++) { test = &bti_cases_panic[n]; res = TEEC_SUCCESS; if (cpu_feature_bti) res = TEEC_ERROR_TARGET_DEAD; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &bti_test_ta_uuid, NULL, &ret_orig))) goto out; Do_ADBG_BeginSubCase(c, "BTI Case %u", n); op.params[0].value.a = test->func; (void)ADBG_EXPECT_TEEC_RESULT(c, res, TEEC_InvokeCommand(&session, test->cmd, &op, &ret_orig)); if (cpu_feature_bti) (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); Do_ADBG_EndSubCase(c, "BTI Case %u", n); TEEC_CloseSession(&session); } out: Do_ADBG_EndSubCase(c, "BTI Exception Generation"); } ADBG_CASE_DEFINE(regression, 1035, xtest_tee_test_1035, "Test BTI"); #endif static void xtest_tee_test_1036(ADBG_Case_t *c) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; TEEC_Result res = TEEC_SUCCESS; op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "PAuth NOP test"); res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_PAUTH_NOP, &op, &ret_orig); if (res == TEEC_ERROR_NOT_SUPPORTED) { Do_ADBG_Log("Binary doesn't support PAuth - skip tests"); goto out; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; Do_ADBG_EndSubCase(c, "PAuth NOP test"); Do_ADBG_BeginSubCase(c, "PAuth PAC corruption"); ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_PAUTH_CORRUPT_PAC, &op, &ret_orig)); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); Do_ADBG_EndSubCase(c, "PAuth PAC corruption"); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1036, xtest_tee_test_1036, "Test PAuth (Pointer Authentication)"); #define ATT_MAX_KEYSZ 4096 #ifdef OPENSSL_FOUND static RSA *att_key; static size_t att_key_size; /* Actual key size (modulus size) in bytes */ /* * buf = [ TA hash (32 bytes SHA256) | Signature (att_key_size bytes) ] * Signature = RSA_SSA_PKCS1_PSS_MGF1(SHA256([nonce | TA hash]) */ static void check_signature(ADBG_Case_t *c, uint8_t *nonce, size_t nonce_size, uint8_t *buf) { unsigned char digest[SHA256_DIGEST_LENGTH] = { }; unsigned char *sig = buf + SHA256_DIGEST_LENGTH; unsigned char *ta_hash = buf; uint8_t decr[ATT_MAX_KEYSZ / 8] = { }; SHA256_CTX ctx = { }; int salt_len = 32; /* Hard-coded in the PTA */ int st = 0; if (!ADBG_EXPECT_NOT_NULL(c, att_key)) return; SHA256_Init(&ctx); SHA256_Update(&ctx, nonce, nonce_size); SHA256_Update(&ctx, ta_hash, SHA256_DIGEST_LENGTH); SHA256_Final(digest, &ctx); st = RSA_public_decrypt(att_key_size, sig, decr, att_key, RSA_NO_PADDING); ADBG_EXPECT_COMPARE_SIGNED(c, st, >, 0); st = RSA_verify_PKCS1_PSS_mgf1(att_key, digest, EVP_sha256(), EVP_sha256(), decr, salt_len); ADBG_EXPECT_COMPARE_SIGNED(c, st, >, 0); } static void free_att_key(void) { RSA_free(att_key); att_key = NULL; } #if OPENSSL_VERSION_NUMBER < 0x10100000L static int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) { if ((r->n == NULL && n == NULL) || (r->e == NULL && e == NULL)) return 0; if (n != NULL) { BN_free(r->n); r->n = n; } if (e != NULL) { BN_free(r->e); r->e = e; } if (d != NULL) { BN_free(r->d); r->d = d; } return 1; } #endif static void set_att_key(ADBG_Case_t *c, uint8_t *e, size_t e_sz, uint8_t *n, size_t n_sz) { BIGNUM *bn_e = NULL; BIGNUM *bn_n = NULL; int st = 0; att_key_size = n_sz; att_key = RSA_new(); if (!ADBG_EXPECT_NOT_NULL(c, att_key)) return; bn_e = BN_bin2bn(e, e_sz, NULL); if (!ADBG_EXPECT_NOT_NULL(c, bn_e)) goto err; bn_n = BN_bin2bn(n, n_sz, NULL); if (!ADBG_EXPECT_NOT_NULL(c, bn_n)) goto err; st = RSA_set0_key(att_key, bn_n, bn_e, BN_new()); if (!ADBG_EXPECT_COMPARE_SIGNED(c, st, !=, 0)) goto err; return; err: free_att_key(); } #else #define check_signature(...) #define set_att_key(...) #define free_att_key() #endif /* * Verification of the output of the attestation PTA * - (If hash != NULL) check buf contains the expected hash * - (If OpenSSL is available) Check that the signature is valid */ static void check_measurement(ADBG_Case_t *c, uint8_t *nonce, size_t nonce_size, uint8_t *hash, uint8_t *buf) { (void)nonce; (void)nonce_size; if (hash) ADBG_EXPECT_BUFFER(c, hash, 32, buf, 32); check_signature(c, nonce, nonce_size, buf); } /* Invoke attestation PTA to return the public key */ static void get_att_public_key(ADBG_Case_t *c) { uint8_t n[ATT_MAX_KEYSZ / 8] = { }; uint8_t e[3] = { }; /* We know e == 65537... */ size_t n_sz = sizeof(n); size_t e_sz = sizeof(e); TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_UUID att_uuid = PTA_ATTESTATION_UUID; TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_NONE); op.params[0].tmpref.buffer = e; op.params[0].tmpref.size = e_sz; op.params[1].tmpref.buffer = n; op.params[1].tmpref.size = n_sz; res = xtest_teec_open_session(&session, &att_uuid, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; res = TEEC_InvokeCommand(&session, PTA_ATTESTATION_GET_PUBKEY, &op, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, op.params[2].value.a, ==, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256)) goto out; e_sz = op.params[0].tmpref.size; n_sz = op.params[1].tmpref.size; set_att_key(c, e, e_sz, n, n_sz); out: TEEC_CloseSession(&session); } /* Invoke attestation PTA to hash the TEE binary */ static void attestation_tee(ADBG_Case_t *c) { uint8_t measurement[TEE_SHA256_HASH_SIZE + ATT_MAX_KEYSZ / 8] = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint8_t nonce[4] = { 0x12, 0x34, 0x56, 0x78 }; TEEC_UUID att_uuid = PTA_ATTESTATION_UUID; TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.buffer = nonce; op.params[0].tmpref.size = sizeof(nonce); op.params[1].tmpref.buffer = measurement; op.params[1].tmpref.size = sizeof(measurement); res = xtest_teec_open_session(&session, &att_uuid, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; /* Hash TEE and check signature */ res = TEEC_InvokeCommand(&session, PTA_ATTESTATION_HASH_TEE_MEMORY, &op, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); check_measurement(c, nonce, sizeof(nonce), NULL, measurement); TEEC_CloseSession(&session); } /* Invoke attestation PTA to obtain the digest contained in the some TA shdr */ static void attestation_ta_shdr(ADBG_Case_t *c) { uint8_t measurement[TEE_SHA256_HASH_SIZE + ATT_MAX_KEYSZ / 8] = { }; uint8_t nonce[6] = { 0xa0, 0x98, 0x76, 0x54, 0x32, 0x10 }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint8_t hash1[TEE_SHA256_HASH_SIZE] = { }; uint8_t hash2[TEE_SHA256_HASH_SIZE] = { }; TEEC_UUID att_uuid = PTA_ATTESTATION_UUID; TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; int cmp = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); op.params[0].tmpref.buffer = (void *)&os_test_ta_uuid; op.params[0].tmpref.size = sizeof(TEEC_UUID); op.params[1].tmpref.buffer = nonce; op.params[1].tmpref.size = sizeof(nonce); op.params[2].tmpref.buffer = measurement; op.params[2].tmpref.size = sizeof(measurement); res = xtest_teec_open_session(&session, &att_uuid, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; /* Hash TA and check signature */ res = TEEC_InvokeCommand(&session, PTA_ATTESTATION_GET_TA_SHDR_DIGEST, &op, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); check_measurement(c, nonce, sizeof(nonce), NULL, measurement); /* Save hash */ memcpy(hash1, measurement, 32); /* Hash TA again */ memset(measurement, 0, sizeof(measurement)); res = TEEC_InvokeCommand(&session, PTA_ATTESTATION_GET_TA_SHDR_DIGEST, &op, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); /* New hash should be identical */ check_measurement(c, nonce, sizeof(nonce), hash1, measurement); /* Hash another TA */ op.params[0].tmpref.buffer = (void *)&crypt_user_ta_uuid; memset(measurement, 0, sizeof(measurement)); res = TEEC_InvokeCommand(&session, PTA_ATTESTATION_GET_TA_SHDR_DIGEST, &op, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); check_measurement(c, nonce, sizeof(nonce), NULL, measurement); memcpy(hash2, measurement, 32); /* Different binaries should have different hashes */ cmp = memcmp(hash1, hash2, sizeof(hash1)); ADBG_EXPECT_COMPARE_SIGNED(c, cmp, !=, 0); TEEC_CloseSession(&session); } /* * Invoke os_test TA which will invoke attestation PTA to obtain a hash of * itself. */ static void attestation_ta_memory(ADBG_Case_t *c) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint8_t nonce[6] = { 0xa0, 0x98, 0x76, 0x54, 0x32, 0x10 }; uint8_t hash1[TEE_SHA256_HASH_SIZE] = { }; uint8_t hash2[TEE_SHA256_HASH_SIZE] = { }; uint8_t measurement[TEE_SHA256_HASH_SIZE + ATT_MAX_KEYSZ / 8] = { }; TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; int cmp = 0; Do_ADBG_BeginSubCase(c, "Consecutive calls"); /* Open session to os_test TA */ res = xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.buffer = nonce; op.params[0].tmpref.size = sizeof(nonce); op.params[1].tmpref.buffer = measurement; op.params[1].tmpref.size = sizeof(measurement); /* Hash TA */ res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_ATTESTATION, &op, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); check_measurement(c, nonce, sizeof(nonce), NULL, measurement); memcpy(hash1, measurement, 32); /* Hash TA again */ memset(measurement, 0, sizeof(measurement)); res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_ATTESTATION, &op, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); /* New hash should be identical to hash1 */ check_measurement(c, nonce, sizeof(nonce), hash1, measurement); Do_ADBG_EndSubCase(c, "Consecutive calls"); /* Close TA session, will cause unload of TA */ TEEC_CloseSession(&session); Do_ADBG_BeginSubCase(c, "TA reload"); /* Load TA again and open a new session */ res = xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); if (res) return; /* Hash TA one more time */ memset(measurement, 0, sizeof(measurement)); res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_ATTESTATION, &op, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); /* Hash after reload should still be the same */ check_measurement(c, nonce, sizeof(nonce), hash1, measurement); Do_ADBG_EndSubCase(c, "TA reload"); Do_ADBG_BeginSubCase(c, "Add shared library"); /* * Invoke a TA command that causes some additional code to be mapped * (shared library) */ res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_CALL_LIB_DL, NULL, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); /* Hash TA one last time */ memset(measurement, 0, sizeof(measurement)); res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_ATTESTATION, &op, &ret_orig); ADBG_EXPECT_TEEC_SUCCESS(c, res); check_measurement(c, nonce, sizeof(nonce), NULL, measurement); memcpy(hash2, measurement, 32); /* Different binaries mapped mean different hashes */ cmp = memcmp(hash1, hash2, sizeof(hash1)); ADBG_EXPECT_COMPARE_SIGNED(c, cmp, !=, 0); Do_ADBG_EndSubCase(c, "Add shared library"); TEEC_CloseSession(&session); } static void xtest_tee_test_1037(ADBG_Case_t *c) { TEEC_UUID att_uuid = PTA_ATTESTATION_UUID; TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; uint32_t ret_orig = 0; res = xtest_teec_open_session(&session, &att_uuid, NULL, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND) { Do_ADBG_Log(" skip test, pseudo TA not found"); return; } TEEC_CloseSession(&session); Do_ADBG_BeginSubCase(c, "Get public key"); get_att_public_key(c); Do_ADBG_EndSubCase(c, "Get public key"); Do_ADBG_BeginSubCase(c, "TEE attestation"); attestation_tee(c); Do_ADBG_EndSubCase(c, "TEE attestation"); Do_ADBG_BeginSubCase(c, "TA attestation (shdr)"); attestation_ta_shdr(c); Do_ADBG_EndSubCase(c, "TA attestation (shdr)"); Do_ADBG_BeginSubCase(c, "TA attestation (memory)"); attestation_ta_memory(c); Do_ADBG_EndSubCase(c, "TA attestation (memory)"); free_att_key(); } ADBG_CASE_DEFINE(regression, 1037, xtest_tee_test_1037, "Remote attestation"); static void xtest_tee_test_1038(ADBG_Case_t *c) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; TEEC_Result res = TEEC_SUCCESS; Do_ADBG_BeginSubCase(c, "MTE use after free"); op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_MEMTAG_USE_AFTER_FREE, &op, &ret_orig); if (res == TEEC_ERROR_NOT_SUPPORTED) { Do_ADBG_Log("Binary doesn't support MTE - skip tests"); goto out; } ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, res); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); TEEC_CloseSession(&session); Do_ADBG_EndSubCase(c, "MTE use after free"); Do_ADBG_BeginSubCase(c, "MTE invalid tag"); op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_MEMTAG_INVALID_TAG, &op, &ret_orig); if (res == TEEC_ERROR_NOT_SUPPORTED) { Do_ADBG_Log("Binary doesn't support MTE - skip tests"); goto out; } ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, res); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); Do_ADBG_EndSubCase(c, "MTE invalid tag"); Do_ADBG_BeginSubCase(c, "MTE double free"); op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_MEMTAG_DOUBLE_FREE, &op, &ret_orig); if (res == TEEC_ERROR_NOT_SUPPORTED) { Do_ADBG_Log("Binary doesn't support MTE - skip tests"); goto out; } ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, res); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); Do_ADBG_EndSubCase(c, "MTE double free"); Do_ADBG_BeginSubCase(c, "MTE buffer overrun"); op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &os_test_ta_uuid, NULL, &ret_orig))) return; res = TEEC_InvokeCommand(&session, TA_OS_TEST_CMD_MEMTAG_BUFFER_OVERRUN, &op, &ret_orig); if (res == TEEC_ERROR_NOT_SUPPORTED) { Do_ADBG_Log("Binary doesn't support MTE - skip tests"); goto out; } ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, res); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TEE, ret_orig); Do_ADBG_EndSubCase(c, "MTE buffer overrun"); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 1038, xtest_tee_test_1038, "Test MTE (Memory Tag Extension)"); static void xtest_tee_test_1039(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; Do_ADBG_BeginSubCase(c, "Load TA with two levels of subkeys"); if (ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &subkey1_ta_uuid, NULL, &ret_orig))) TEEC_CloseSession(&session); Do_ADBG_EndSubCase(c, "Load TA with two levels of subkeys"); Do_ADBG_BeginSubCase(c, "Load TA with identity subkey"); if (ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &subkey2_ta_uuid, NULL, &ret_orig))) TEEC_CloseSession(&session); Do_ADBG_EndSubCase(c, "Load TA with identity subkey"); } ADBG_CASE_DEFINE(regression, 1039, xtest_tee_test_1039, "Test subkey verification"); struct test_1040_thread_arg { TEEC_Result res; pthread_t thr; }; static void *test_1040_thread(void *arg) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; struct test_1040_thread_arg *a = arg; TEEC_Result res = TEEC_SUCCESS; uint32_t err_orig = 0; TEEC_Session session = { }; size_t loop_count = 100; size_t n = 0; if (level == 0) loop_count /= 2; while (n < loop_count) { res = xtest_teec_open_session(&session, &sims_test_ta_uuid, NULL, &err_orig); if (res) { if (res == TEEC_ERROR_TARGET_DEAD) continue; a->res = res; return NULL; } memset(&op, 0, sizeof(op)); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(&session, TA_SIMS_CMD_PANIC, &op, &err_orig); TEEC_CloseSession(&session); if (res != TEEC_ERROR_TARGET_DEAD) { if (res) a->res = res; else a->res = TEEC_ERROR_GENERIC; return NULL; } n++; } a->res = TEEC_SUCCESS; return NULL; } static void xtest_tee_test_1040(ADBG_Case_t *c) { struct test_1040_thread_arg arg[NUM_THREADS] = { }; size_t nt = NUM_THREADS; size_t n = 0; Do_ADBG_BeginSubCase(c, "Concurent invoke with panic in TA"); for (n = 0; n < nt; n++) { if (!ADBG_EXPECT(c, 0, pthread_create(&arg[n].thr, NULL, test_1040_thread, arg + n))) nt = n; /* break loop and start cleanup */ } for (n = 0; n < nt; n++) { ADBG_EXPECT(c, 0, pthread_join(arg[n].thr, NULL)); ADBG_EXPECT_TEEC_SUCCESS(c, arg[n].res); } Do_ADBG_EndSubCase(c, "Concurent invoke with panic in TA"); } ADBG_CASE_DEFINE(regression, 1040, xtest_tee_test_1040, "Test panic in concurrent open/invoke/close session"); optee_test-4.3.0/host/xtest/regression_2000.c000066400000000000000000000627441464074351400210270ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2016, Linaro Limited */ #include #include #include #include #include #include #include #include #include #include #include #include #include <__tee_tcpsocket_defines_extensions.h> #include #include #include "xtest_test.h" #include "xtest_helpers.h" #include "sock_server.h" #include "rand_stream.h" struct socket_handle { uint64_t buf[2]; size_t blen; }; static TEE_Result socket_tcp_open(TEEC_Session *session, uint32_t ip_vers, const char *addr, uint16_t port, struct socket_handle *handle, uint32_t *error, uint32_t *ret_orig) { TEE_Result res = TEE_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; memset(handle, 0, sizeof(*handle)); op.params[0].value.a = ip_vers; op.params[0].value.b = port; op.params[1].tmpref.buffer = (void *)addr; op.params[1].tmpref.size = strlen(addr) + 1; op.params[2].tmpref.buffer = handle->buf; op.params[2].tmpref.size = sizeof(handle->buf); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_VALUE_OUTPUT); res = TEEC_InvokeCommand(session, TA_SOCKET_CMD_TCP_OPEN, &op, ret_orig); handle->blen = op.params[2].tmpref.size; *error = op.params[3].value.a; return res; } static TEE_Result socket_udp_open(TEEC_Session *session, uint32_t ip_vers, const char *addr, uint16_t port, struct socket_handle *handle, uint32_t *error, uint32_t *ret_orig) { TEE_Result res = TEE_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; memset(handle, 0, sizeof(*handle)); op.params[0].value.a = ip_vers; op.params[0].value.b = port; op.params[1].tmpref.buffer = (void *)addr; op.params[1].tmpref.size = strlen(addr) + 1; op.params[2].tmpref.buffer = handle->buf; op.params[2].tmpref.size = sizeof(handle->buf); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_VALUE_OUTPUT); res = TEEC_InvokeCommand(session, TA_SOCKET_CMD_UDP_OPEN, &op, ret_orig); handle->blen = op.params[2].tmpref.size; *error = op.params[3].value.a; return res; } static TEE_Result socket_send(TEEC_Session *session, struct socket_handle *handle, const void *data, size_t *dlen, uint32_t timeout, uint32_t *ret_orig) { TEE_Result res = TEE_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].tmpref.buffer = handle->buf; op.params[0].tmpref.size = handle->blen; op.params[1].tmpref.buffer = (void *)data; op.params[1].tmpref.size = *dlen; op.params[2].value.a = timeout; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INOUT, TEEC_NONE); res = TEEC_InvokeCommand(session, TA_SOCKET_CMD_SEND, &op, ret_orig); *dlen = op.params[2].value.b; return res; } static TEE_Result socket_recv(TEEC_Session *session, struct socket_handle *handle, void *data, size_t *dlen, uint32_t timeout, uint32_t *ret_orig) { TEE_Result res = TEE_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].tmpref.buffer = handle->buf; op.params[0].tmpref.size = handle->blen; op.params[1].tmpref.buffer = (void *)data; op.params[1].tmpref.size = *dlen; op.params[2].value.a = timeout; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_VALUE_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(session, TA_SOCKET_CMD_RECV, &op, ret_orig); *dlen = op.params[1].tmpref.size; return res; } static TEE_Result socket_get_error(TEEC_Session *session, struct socket_handle *handle, uint32_t *proto_error, uint32_t *ret_orig) { TEE_Result res = TEE_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].tmpref.buffer = handle->buf; op.params[0].tmpref.size = handle->blen; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(session, TA_SOCKET_CMD_ERROR, &op, ret_orig); *proto_error = op.params[1].value.a; return res; } static TEE_Result socket_close(TEEC_Session *session, struct socket_handle *handle, uint32_t *ret_orig) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].tmpref.buffer = handle->buf; op.params[0].tmpref.size = handle->blen; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(session, TA_SOCKET_CMD_CLOSE, &op, ret_orig); } static TEE_Result socket_ioctl(TEEC_Session *session, struct socket_handle *handle, uint32_t ioctl_cmd, void *data, size_t *dlen, uint32_t *ret_orig) { TEE_Result res = TEE_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; op.params[0].tmpref.buffer = handle->buf; op.params[0].tmpref.size = handle->blen; op.params[1].tmpref.buffer = data; op.params[1].tmpref.size = *dlen; op.params[2].value.a = ioctl_cmd; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INOUT, TEEC_VALUE_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(session, TA_SOCKET_CMD_IOCTL, &op, ret_orig); *dlen = op.params[1].tmpref.size; return res; } struct test_200x_io_state { struct rand_stream *read_rs; struct rand_stream *write_rs; bool rfail; }; static void test_200x_init_io_state(struct test_200x_io_state *s, int read_seed, int write_seed) { memset(s, 0, sizeof(*s)); s->read_rs = rand_stream_alloc(read_seed, 100); s->write_rs = rand_stream_alloc(write_seed, 100); assert(s->read_rs && s->write_rs); } static bool test_200x_tcp_accept_cb(void *ptr, int fd, short *events) { (void)ptr; (void)fd; (void)events; return true; } static bool test_200x_tcp_read_cb(void *ptr, int fd, short *events) { struct test_200x_io_state *iostate = ptr; ssize_t r = 0; uint8_t buf[100] = { }; uint8_t buf2[100] = { }; (void)events; r = read(fd, buf, sizeof(buf)); if (r <= 0) return false; rand_stream_read(iostate->read_rs, buf2, r); if (memcmp(buf, buf2, r)) { iostate->rfail = true; return false; } return true; } static bool test_200x_tcp_write_cb(void *ptr, int fd, short *events) { struct test_200x_io_state *iostate = ptr; size_t num_bytes = 100; const void *bytes = NULL; ssize_t r = 0; (void)events; bytes = rand_stream_peek(iostate->write_rs, &num_bytes); r = write(fd, bytes, num_bytes); if (r < 0) return false; rand_stream_advance(iostate->write_rs, num_bytes); return true; } static void xtest_tee_test_2001(ADBG_Case_t *c) { struct sock_server ts = { }; TEEC_Session session = { }; uint32_t ret_orig = 0; uint32_t proto_error = 9; struct socket_handle sh = { }; uint8_t buf[64] = { }; uint8_t buf2[64] = { }; size_t blen = 0; struct test_200x_io_state server_iostate = { }; struct test_200x_io_state local_iostate = { }; struct sock_io_cb cb = { .accept = test_200x_tcp_accept_cb, .read = test_200x_tcp_read_cb, .write = test_200x_tcp_write_cb, .ptr = &server_iostate, }; test_200x_init_io_state(&server_iostate, 1, 2); test_200x_init_io_state(&local_iostate, 2, 1); Do_ADBG_BeginSubCase(c, "Start server"); if (!ADBG_EXPECT_TRUE(c, sock_server_init_tcp(&ts, &cb))) return; Do_ADBG_EndSubCase(c, "Start server"); Do_ADBG_BeginSubCase(c, "TCP Socket open"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &socket_ta_uuid, NULL, &ret_orig))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_tcp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; Do_ADBG_EndSubCase(c, "TCP Socket open"); Do_ADBG_BeginSubCase(c, "TCP Socket send"); blen = sizeof(buf); rand_stream_read(local_iostate.write_rs, buf, blen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_send(&session, &sh, buf, &blen, TEE_TIMEOUT_INFINITE, &ret_orig))) goto out_close_session; ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==, sizeof(buf)); Do_ADBG_EndSubCase(c, "TCP Socket send"); Do_ADBG_BeginSubCase(c, "TCP Socket recv"); blen = sizeof(buf); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_recv(&session, &sh, buf, &blen, TEE_TIMEOUT_INFINITE, &ret_orig))) goto out_close_session; ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==, sizeof(buf)); rand_stream_read(local_iostate.read_rs, buf2, blen); ADBG_EXPECT_BUFFER(c, buf2, blen, buf, blen); Do_ADBG_EndSubCase(c, "TCP Socket recv"); /* * All written bytes above (with the TA) is quite likely to have * hit the tcp server by now. */ ADBG_EXPECT_TRUE(c, !server_iostate.rfail); Do_ADBG_BeginSubCase(c, "TCP Socket get error"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_get_error(&session, &sh, &proto_error, &ret_orig))) goto out_close_session; if (!ADBG_EXPECT_TEEC_SUCCESS(c, proto_error)) goto out_close_session; Do_ADBG_EndSubCase(c, "TCP Socket get error"); Do_ADBG_BeginSubCase(c, "TCP Socket close"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_close(&session, &sh, &ret_orig))) goto out_close_session; Do_ADBG_EndSubCase(c, "TCP Socket close"); Do_ADBG_BeginSubCase(c, "TCP Socket ioctl"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_tcp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; blen = sizeof(buf); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_ioctl(&session, &sh, 0x00F00000, buf, &blen, &ret_orig))) goto out_close_session; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_close(&session, &sh, &ret_orig))) goto out_close_session; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_tcp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; blen = sizeof(buf); ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, socket_ioctl(&session, &sh, TEE_ISOCKET_PROTOCOLID_TCP << 24, buf, &blen, &ret_orig)); TEEC_CloseSession(&session); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &socket_ta_uuid, NULL, &ret_orig))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_tcp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; blen = sizeof(buf); ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, socket_ioctl(&session, &sh, 0x32 << 24, buf, &blen, &ret_orig)); Do_ADBG_EndSubCase(c, "TCP Socket ioctl"); out_close_session: TEEC_CloseSession(&session); out: sock_server_uninit(&ts); } ADBG_CASE_DEFINE(regression, 2001, xtest_tee_test_2001, "Trivial TCP iSocket API tests"); struct test_2002_barrier { pthread_mutex_t mu; pthread_barrier_t bar; }; struct test_2002_arg { bool success; size_t tnum; struct test_2002_barrier *bar; }; static void xtest_2002_wait_barrier(struct test_2002_barrier *bar) { /* * Once the mutex is taken the barrier is initialized so the mutex * can be released immediately. */ xtest_mutex_lock(&bar->mu); xtest_mutex_unlock(&bar->mu); xtest_barrier_wait(&bar->bar); } static void *xtest_tee_test_2002_thread(void *arg) { struct test_2002_arg *a = arg; TEE_Result res = TEE_ERROR_GENERIC; struct sock_server ts = { }; TEEC_Session session = { }; uint32_t ret_orig = 0; uint32_t proto_error = 0; struct socket_handle sh = { }; struct test_200x_io_state server_iostate = { }; struct test_200x_io_state local_iostate = { }; struct sock_io_cb cb = { .accept = test_200x_tcp_accept_cb, .read = test_200x_tcp_read_cb, .write = test_200x_tcp_write_cb, .ptr = &server_iostate, }; int seed[2] = { 1 + a->tnum * 2, 2 + a->tnum * 2 }; size_t send_limit = 10000; size_t recv_limit = 10000; size_t sent_bytes = 0; size_t recvd_bytes = 0; test_200x_init_io_state(&server_iostate, seed[0], seed[1]); test_200x_init_io_state(&local_iostate, seed[1], seed[0]); if (!sock_server_init_tcp(&ts, &cb)) { xtest_2002_wait_barrier(a->bar); return NULL; } res = xtest_teec_open_session(&session, &socket_ta_uuid, NULL, &ret_orig); xtest_2002_wait_barrier(a->bar); if (res != TEE_SUCCESS) goto out; res = socket_tcp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig); if (res != TEE_SUCCESS) goto out_close_session; while (sent_bytes < send_limit && recvd_bytes < recv_limit) { const void *peek = NULL; uint8_t buf[64] = { }; uint8_t buf2[64] = { }; size_t blen = 0; blen = sizeof(buf); peek = rand_stream_peek(local_iostate.write_rs, &blen); res = socket_send(&session, &sh, peek, &blen, TEE_TIMEOUT_INFINITE, &ret_orig); if (res != TEE_SUCCESS) goto out_close_session; rand_stream_advance(local_iostate.write_rs, blen); sent_bytes += blen; blen = sizeof(buf); res = socket_recv(&session, &sh, buf, &blen, TEE_TIMEOUT_INFINITE, &ret_orig); if (res != TEE_SUCCESS) goto out_close_session; rand_stream_read(local_iostate.read_rs, buf2, blen); if (memcmp(buf2, buf, blen)) goto out_close_session; recvd_bytes += blen; } res = socket_close(&session, &sh, &ret_orig); if (res != TEE_SUCCESS) goto out_close_session; /* * All written bytes above (with the TA) is quite likely to have * hit the tcp server by now. */ a->success = !server_iostate.rfail; out_close_session: TEEC_CloseSession(&session); out: sock_server_uninit(&ts); return NULL; } #define NUM_THREADS 3 static void xtest_tee_test_2002(ADBG_Case_t *c) { struct test_2002_barrier bar = { .mu = PTHREAD_MUTEX_INITIALIZER }; struct test_2002_arg arg[NUM_THREADS] = { }; size_t n = 0; size_t nt = 0; pthread_t thr[NUM_THREADS] = { }; Do_ADBG_BeginSubCase(c, "Stressing with %d threads", NUM_THREADS); xtest_mutex_lock(&bar.mu); nt = NUM_THREADS; for (n = 0; n < nt; n++) { arg[n].success = false; arg[n].tnum = n; arg[n].bar = &bar; if (!ADBG_EXPECT(c, 0, pthread_create(thr + n, NULL, xtest_tee_test_2002_thread, arg + n))) nt = n; /* break loop and start cleanup */ } xtest_barrier_init(&bar.bar, nt + 1); xtest_mutex_unlock(&bar.mu); xtest_barrier_wait(&bar.bar); for (n = 0; n < nt; n++) { ADBG_EXPECT(c, 0, pthread_join(thr[n], NULL)); ADBG_EXPECT_TRUE(c, arg[n].success); } xtest_mutex_destroy(&bar.mu); xtest_barrier_destroy(&bar.bar); Do_ADBG_EndSubCase(c, "Stressing with %d threads", NUM_THREADS); } ADBG_CASE_DEFINE(regression, 2002, xtest_tee_test_2002, "Concurrent stressing TCP iSocket API tests"); static bool test_2003_accept_cb(void *ptr, int fd, short *events) { int val = 0; (void)ptr; (void)events; val = 4 * 1024; if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &val, sizeof(val))) warn("test_2003_accept_cb: setsockopt"); return true; } static void xtest_tee_test_2003(ADBG_Case_t *c) { struct sock_server ts = { }; TEEC_Session session = { }; uint32_t ret_orig = 0; uint32_t proto_error = 0; struct socket_handle sh = { }; void *buf = NULL; const size_t blen0 = 16 * 1024; size_t blen = 0; uint32_t val = 0; struct sock_io_cb cb = { .accept = test_2003_accept_cb }; Do_ADBG_BeginSubCase(c, "Start server"); if (!ADBG_EXPECT_TRUE(c, sock_server_init_tcp(&ts, &cb))) return; buf = calloc(1, blen0); if (!ADBG_EXPECT_NOT_NULL(c, buf)) goto out; Do_ADBG_EndSubCase(c, "Start server"); Do_ADBG_BeginSubCase(c, "TCP Socket open"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &socket_ta_uuid, NULL, &ret_orig))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_tcp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; blen = sizeof(val); val = 4 * 1024; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_ioctl(&session, &sh, TEE_TCP_SET_RECVBUF, &val, &blen, &ret_orig))) goto out_close_session; blen = sizeof(val); val = 4 * 1024; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_ioctl(&session, &sh, TEE_TCP_SET_SENDBUF, &val, &blen, &ret_orig))) goto out_close_session; Do_ADBG_EndSubCase(c, "TCP Socket open"); Do_ADBG_BeginSubCase(c, "TCP Socket send (10 ms timeout)"); while (true) { TEE_Result res = TEE_ERROR_GENERIC; blen = blen0; memset(buf, 0, blen0); res = socket_send(&session, &sh, buf, &blen, 10, &ret_orig); if (res == TEE_ISOCKET_ERROR_TIMEOUT) break; if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out_close_session; ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==, blen0); } Do_ADBG_EndSubCase(c, "TCP Socket send (10 ms timeout)"); Do_ADBG_BeginSubCase(c, "TCP Socket recv (10 ms timeout)"); blen = blen0; ADBG_EXPECT_TEEC_RESULT(c, TEE_ISOCKET_ERROR_TIMEOUT, socket_recv(&session, &sh, buf, &blen, 10, &ret_orig)); ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==, blen0); Do_ADBG_EndSubCase(c, "TCP Socket recv (10 ms timeout)"); Do_ADBG_BeginSubCase(c, "TCP Socket get error"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_get_error(&session, &sh, &proto_error, &ret_orig))) goto out_close_session; ADBG_EXPECT_TEEC_RESULT(c, TEE_ISOCKET_ERROR_TIMEOUT, proto_error); Do_ADBG_EndSubCase(c, "TCP Socket get error"); out_close_session: TEEC_CloseSession(&session); out: free(buf); sock_server_uninit(&ts); } ADBG_CASE_DEFINE(regression, 2003, xtest_tee_test_2003, "Timeout TCP iSocket API tests"); static bool test_200x_udp_accept_cb(void *ptr, int fd, short *events) { struct test_200x_io_state *iostate = ptr; struct sockaddr_storage sass = { }; struct sockaddr *sa = (struct sockaddr *)&sass; socklen_t slen = sizeof(sass); uint8_t buf[100] = { }; uint8_t buf2[100] = { }; ssize_t r = 0; size_t l = 0; (void)events; r = recvfrom(fd, buf, sizeof(buf), 0, sa, &slen); if (r == -1) return false; l = r; rand_stream_read(iostate->read_rs, buf2, l); if (memcmp(buf, buf2, l)) iostate->rfail = true; rand_stream_read(iostate->write_rs, buf, l); return sendto(fd, buf, l, 0, sa, slen) != -1; } static bool test_2004_send_recv(ADBG_Case_t *c, struct test_200x_io_state *srv_ios, struct test_200x_io_state *local_ios, TEEC_Session *session, struct socket_handle *sh, size_t send_sz, size_t recv_sz) { bool ret = false; uint32_t ret_orig = 0; uint8_t *buf = calloc(1, send_sz); uint8_t *buf2 = calloc(1, send_sz); size_t blen = 0; /* If recv_sz < send_sz we're receiving a truncated datagram */ if (!ADBG_EXPECT_NOT_NULL(c, buf) || !ADBG_EXPECT_NOT_NULL(c, buf2) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, send_sz, >=, recv_sz)) goto out; /* First we're sending the packet to the echo server */ Do_ADBG_BeginSubCase(c, "UDP Socket send"); blen = send_sz; rand_stream_read(local_ios->write_rs, buf, blen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_send(session, sh, buf, &blen, TEE_TIMEOUT_INFINITE, &ret_orig))) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==, send_sz)) goto out; Do_ADBG_EndSubCase(c, "UDP Socket send"); /* Then we're receiving the packet from the echo server */ Do_ADBG_BeginSubCase(c, "UDP Socket recv"); blen = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_recv(session, sh, buf, &blen, TEE_TIMEOUT_INFINITE, &ret_orig))) goto out; /* * blen was set to 0 so socket_recv() cannot block, this means the * we have no guarantee that the sent UDP packet has reached its * destination yet. If it has it must match the send size, else it * must be 0. */ if (blen && !ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==, send_sz)) goto out; blen = recv_sz; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_recv(session, sh, buf, &blen, TEE_TIMEOUT_INFINITE, &ret_orig))) goto out; if (recv_sz < send_sz) { if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, >=, recv_sz)) goto out; } else { if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==, send_sz)) goto out; } rand_stream_read(local_ios->read_rs, buf2, send_sz); if (!ADBG_EXPECT_BUFFER(c, buf2, recv_sz, buf, recv_sz)) goto out; if (!ADBG_EXPECT_TRUE(c, !srv_ios->rfail)) goto out; Do_ADBG_EndSubCase(c, "UDP Socket recv"); ret = true; out: free(buf); free(buf2); return ret; } static void xtest_tee_test_2004(ADBG_Case_t *c) { struct sock_server ts = { }; struct sock_server ts2 = { }; struct sock_server ts3 = { }; bool ts_inited = false; bool ts2_inited = false; bool ts3_inited = false; TEEC_Session session = { }; uint32_t ret_orig = 0; uint32_t proto_error = 0; struct socket_handle sh = { }; uint8_t buf[64] = { }; size_t blen = 0; uint16_t port = 0; struct test_200x_io_state server_iostate = { }; struct test_200x_io_state local_iostate = { }; struct sock_io_cb cb = { .accept = test_200x_udp_accept_cb, .ptr = &server_iostate, }; test_200x_init_io_state(&server_iostate, 1, 2); test_200x_init_io_state(&local_iostate, 2, 1); Do_ADBG_BeginSubCase(c, "Start server"); if (!ADBG_EXPECT_TRUE(c, sock_server_init_udp(&ts, &cb))) return; ts_inited = true; if (!ADBG_EXPECT_TRUE(c, sock_server_init_udp(&ts2, &cb))) goto out; ts2_inited = true; if (!ADBG_EXPECT_TRUE(c, sock_server_init_udp(&ts3, &cb))) goto out; ts3_inited = true; Do_ADBG_EndSubCase(c, "Start server"); Do_ADBG_BeginSubCase(c, "UDP Socket open"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &socket_ta_uuid, NULL, &ret_orig))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_udp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; Do_ADBG_EndSubCase(c, "UDP Socket open"); Do_ADBG_BeginSubCase(c, "Normal send and receive"); if (!ADBG_EXPECT_TRUE(c, test_2004_send_recv(c, &server_iostate, &local_iostate, &session, &sh, 64, 64))) goto out_close_session; Do_ADBG_EndSubCase(c, "Normal send and receive"); Do_ADBG_BeginSubCase(c, "UDP Socket truncated recv"); if (!ADBG_EXPECT_TRUE(c, test_2004_send_recv(c, &server_iostate, &local_iostate, &session, &sh, 64, 32))) goto out_close_session; Do_ADBG_EndSubCase(c, "UDP Socket truncated recv"); Do_ADBG_BeginSubCase(c, "UDP Socket get error"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_get_error(&session, &sh, &proto_error, &ret_orig))) goto out_close_session; if (!ADBG_EXPECT_TEEC_SUCCESS(c, proto_error)) goto out_close_session; Do_ADBG_EndSubCase(c, "UDP Socket get error"); Do_ADBG_BeginSubCase(c, "UDP Socket close"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_close(&session, &sh, &ret_orig))) goto out_close_session; Do_ADBG_EndSubCase(c, "UDP Socket close"); Do_ADBG_BeginSubCase(c, "UDP Socket ioctl"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_udp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; blen = sizeof(buf); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_ioctl(&session, &sh, 0x00F00000, buf, &blen, &ret_orig))) goto out_close_session; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_close(&session, &sh, &ret_orig))) goto out_close_session; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_udp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; blen = sizeof(buf); ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, socket_ioctl(&session, &sh, TEE_ISOCKET_PROTOCOLID_UDP << 24, buf, &blen, &ret_orig)); TEEC_CloseSession(&session); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &socket_ta_uuid, NULL, &ret_orig))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_udp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; blen = sizeof(buf); ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, socket_ioctl(&session, &sh, 0x32 << 24, buf, &blen, &ret_orig)); TEEC_CloseSession(&session); Do_ADBG_EndSubCase(c, "UDP Socket ioctl"); Do_ADBG_BeginSubCase(c, "UDP Socket change port"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &socket_ta_uuid, NULL, &ret_orig))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_udp_open(&session, TEE_IP_VERSION_DC, ts.bind->host, ts.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; sock_server_uninit(&ts); ts_inited = false; port = ts2.bind->port; blen = sizeof(port); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_ioctl(&session, &sh, TEE_UDP_CHANGEPORT, &port, &blen, &ret_orig))) goto out_close_session; if (!ADBG_EXPECT_TRUE(c, test_2004_send_recv(c, &server_iostate, &local_iostate, &session, &sh, 64, 64))) goto out_close_session; TEEC_CloseSession(&session); Do_ADBG_EndSubCase(c, "UDP Socket change port"); Do_ADBG_BeginSubCase(c, "UDP Socket change addr"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &socket_ta_uuid, NULL, &ret_orig))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_udp_open(&session, TEE_IP_VERSION_DC, ts2.bind->host, ts2.bind->port, &sh, &proto_error, &ret_orig))) goto out_close_session; sock_server_uninit(&ts2); ts2_inited = false; port = ts3.bind->port; blen = sizeof(port); if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_ioctl(&session, &sh, TEE_UDP_CHANGEPORT, &port, &blen, &ret_orig))) goto out_close_session; blen = strlen(ts3.bind->host) + 1; if (!ADBG_EXPECT_TEEC_SUCCESS(c, socket_ioctl(&session, &sh, TEE_UDP_CHANGEADDR, ts3.bind->host, &blen, &ret_orig))) goto out_close_session; if (!ADBG_EXPECT_TRUE(c, test_2004_send_recv(c, &server_iostate, &local_iostate, &session, &sh, 64, 64))) goto out_close_session; Do_ADBG_EndSubCase(c, "UDP Socket change addr"); out_close_session: TEEC_CloseSession(&session); out: if (ts_inited) sock_server_uninit(&ts); if (ts2_inited) sock_server_uninit(&ts2); if (ts3_inited) sock_server_uninit(&ts3); } ADBG_CASE_DEFINE(regression, 2004, xtest_tee_test_2004, "UDP iSocket API tests"); optee_test-4.3.0/host/xtest/regression_4000.c000066400000000000000000007102701464074351400210230ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2021, SumUp Services GmbH * Copyright 2023 NXP */ #include #include #include #include #include #include "xtest_test.h" #include "xtest_helpers.h" #include #include #include #include #include #include #include #include #include static TEEC_Result ta_crypt_cmd_reset_operation(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RESET_OPERATION, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_copy_operation(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle dst_oph, TEE_OperationHandle src_oph) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)dst_oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)dst_oph; assert((uintptr_t)src_oph <= UINT32_MAX); op.params[0].value.b = (uint32_t)(uintptr_t)src_oph; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_COPY_OPERATION, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_digest_update(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *chunk, size_t chunk_size) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)chunk; op.params[1].tmpref.size = chunk_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_UPDATE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_digest_do_final(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *chunk, size_t chunk_len, void *hash, size_t *hash_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)chunk; op.params[1].tmpref.size = chunk_len; op.params[2].tmpref.buffer = (void *)hash; op.params[2].tmpref.size = *hash_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_DO_FINAL, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } if (res == TEEC_SUCCESS) *hash_len = op.params[2].tmpref.size; return res; } static TEEC_Result ta_crypt_cmd_digest_extract(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, void *hash, size_t *hash_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)hash; op.params[1].tmpref.size = *hash_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_EXTRACT, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } if (res == TEEC_SUCCESS) *hash_len = op.params[1].tmpref.size; return res; } static TEE_Result ta_crypt_cmd_set_operation_key2(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, TEE_ObjectHandle key1, TEE_ObjectHandle key2) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; assert((uintptr_t)key1 <= UINT32_MAX); op.params[0].value.b = (uint32_t)(uintptr_t)key1; assert((uintptr_t)key2 <= UINT32_MAX); op.params[1].value.a = (uint32_t)(uintptr_t)key2; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_SET_OPERATION_KEY2, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_mac_init(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *iv, size_t iv_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; if (iv != NULL) { op.params[1].tmpref.buffer = (void *)iv; op.params[1].tmpref.size = iv_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); } else { op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); } res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_INIT, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_mac_update(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *chunk, size_t chunk_size) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)chunk; op.params[1].tmpref.size = chunk_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_UPDATE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_mac_final_compute(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *chunk, size_t chunk_len, void *hash, size_t *hash_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)chunk; op.params[1].tmpref.size = chunk_len; op.params[2].tmpref.buffer = (void *)hash; op.params[2].tmpref.size = *hash_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_FINAL_COMPUTE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } if (res == TEEC_SUCCESS) *hash_len = op.params[2].tmpref.size; return res; } static TEEC_Result ta_crypt_cmd_mac_final_compare(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *chunk, size_t chunk_len, const uint8_t *hash, size_t hash_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)chunk; op.params[1].tmpref.size = chunk_len; op.params[2].tmpref.buffer = (void *)hash; op.params[2].tmpref.size = hash_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_FINAL_COMPARE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_cipher_init(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *iv, size_t iv_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; if (iv != NULL) { op.params[1].tmpref.buffer = (void *)iv; op.params[1].tmpref.size = iv_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); } else { op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); } res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_INIT, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_cipher_update(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *src, size_t src_len, void *dst, size_t *dst_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)src; op.params[1].tmpref.size = src_len; op.params[2].tmpref.buffer = dst; op.params[2].tmpref.size = *dst_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_UPDATE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } *dst_len = op.params[2].tmpref.size; return res; } static TEEC_Result ta_crypt_cmd_cipher_do_final(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *src, size_t src_len, void *dst, size_t *dst_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)src; op.params[1].tmpref.size = src_len; op.params[2].tmpref.buffer = (void *)dst; op.params[2].tmpref.size = *dst_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_DO_FINAL, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } *dst_len = op.params[2].tmpref.size; return res; } static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c, TEEC_Session *s, void *buf, size_t blen) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].tmpref.buffer = buf; op.params[0].tmpref.size = blen; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RANDOM_NUMBER_GENERATE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==, op.params[0].tmpref.size); return res; } static TEEC_Result ta_crypt_cmd_ae_init(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *nonce, size_t nonce_len, size_t tag_len, size_t aad_len, size_t payload_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[0].value.b = tag_len; op.params[1].tmpref.buffer = (void *)nonce; op.params[1].tmpref.size = nonce_len; op.params[2].value.a = aad_len; op.params[2].value.b = payload_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_INIT, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_ae_update_aad(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *aad, size_t aad_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)aad; op.params[1].tmpref.size = aad_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE_AAD, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } static TEEC_Result ta_crypt_cmd_ae_update(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *src, size_t src_len, void *dst, size_t *dst_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)src; op.params[1].tmpref.size = src_len; op.params[2].tmpref.buffer = (void *)dst; op.params[2].tmpref.size = *dst_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } *dst_len = op.params[2].tmpref.size; return res; } static TEEC_Result ta_crypt_cmd_ae_encrypt_final(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *src, size_t src_len, void *dst, size_t *dst_len, void *tag, size_t *tag_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)src; op.params[1].tmpref.size = src_len; op.params[2].tmpref.buffer = (void *)dst; op.params[2].tmpref.size = *dst_len; op.params[3].tmpref.buffer = (void *)tag; op.params[3].tmpref.size = *tag_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_MEMREF_TEMP_OUTPUT); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_ENCRYPT_FINAL, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } *dst_len = op.params[2].tmpref.size; *tag_len = op.params[3].tmpref.size; return res; } static TEEC_Result ta_crypt_cmd_ae_decrypt_final(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const void *src, size_t src_len, void *dst, size_t *dst_len, const void *tag, size_t tag_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = (void *)src; op.params[1].tmpref.size = src_len; op.params[2].tmpref.buffer = dst; op.params[2].tmpref.size = *dst_len; op.params[3].tmpref.buffer = (void *)tag; op.params[3].tmpref.size = tag_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_MEMREF_TEMP_INPUT); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_DECRYPT_FINAL, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } *dst_len = op.params[2].tmpref.size; return res; } static TEEC_Result ta_crypt_cmd_asymmetric_operate(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, uint32_t cmd, const TEE_Attribute *params, uint32_t paramCount, const void *src, size_t src_len, void *dst, size_t *dst_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; uint8_t *buf = NULL; size_t blen = 0; res = pack_attrs(params, paramCount, &buf, &blen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = buf; op.params[1].tmpref.size = blen; op.params[2].tmpref.buffer = (void *)src; op.params[2].tmpref.size = src_len; op.params[3].tmpref.buffer = dst; op.params[3].tmpref.size = *dst_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } if (res == TEEC_SUCCESS) *dst_len = op.params[3].tmpref.size; free(buf); return res; } static TEEC_Result ta_crypt_cmd_asymmetric_encrypt(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const TEE_Attribute *params, uint32_t paramCount, const void *src, size_t src_len, void *dst, size_t *dst_len) { return ta_crypt_cmd_asymmetric_operate(c, s, oph, TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT, params, paramCount, src, src_len, dst, dst_len); } static TEEC_Result ta_crypt_cmd_asymmetric_decrypt(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const TEE_Attribute *params, uint32_t paramCount, const void *src, size_t src_len, void *dst, size_t *dst_len) { return ta_crypt_cmd_asymmetric_operate(c, s, oph, TA_CRYPT_CMD_ASYMMETRIC_DECRYPT, params, paramCount, src, src_len, dst, dst_len); } static TEEC_Result ta_crypt_cmd_asymmetric_sign(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const TEE_Attribute *params, uint32_t paramCount, const void *digest, size_t digest_len, void *signature, size_t *signature_len) { return ta_crypt_cmd_asymmetric_operate(c, s, oph, TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST, params, paramCount, digest, digest_len, signature, signature_len); } static TEEC_Result ta_crypt_cmd_asymmetric_verify(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, const TEE_Attribute *params, uint32_t paramCount, const void *digest, size_t digest_len, const void *signature, size_t signature_len) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; uint8_t *buf = NULL; size_t blen = 0; res = pack_attrs(params, paramCount, &buf, &blen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.params[1].tmpref.buffer = buf; op.params[1].tmpref.size = blen; op.params[2].tmpref.buffer = (void *)digest; op.params[2].tmpref.size = digest_len; op.params[3].tmpref.buffer = (void *)signature; op.params[3].tmpref.size = signature_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } free(buf); return res; } static TEEC_Result ta_crypt_cmd_get_object_value_attribute(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle o, uint32_t attr_id, uint32_t *valuea, uint32_t *valueb) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)o <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)o; op.params[0].value.b = attr_id; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } if (res == TEEC_SUCCESS) { *valuea = op.params[1].value.a; *valueb = op.params[1].value.b; } return res; } static TEEC_Result ta_crypt_cmd_generate_key(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle o, uint32_t key_size, const TEE_Attribute *params, uint32_t paramCount) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; uint8_t *buf = NULL; size_t blen = 0; res = pack_attrs(params, paramCount, &buf, &blen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; assert((uintptr_t)o <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)o; op.params[0].value.b = key_size; op.params[1].tmpref.buffer = buf; op.params[1].tmpref.size = blen; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GENERATE_KEY, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } free(buf); return res; } static const uint8_t hash_data_md5_in1[] = { 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' }; static const uint8_t hash_data_md5_out1[] = { 0x61, 0x12, 0x71, 0x83, 0x70, 0x8d, 0x3a, 0xc7, 0xf1, 0x9b, 0x66, 0x06, 0xfc, 0xae, 0x7d, 0xf6 }; static const uint8_t hash_data_sha1_in1[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' }; static const uint8_t hash_data_sha1_out1[] = { 0x4b, 0x98, 0x92, 0xb6, 0x52, 0x72, 0x14, 0xaf, 0xc6, 0x55, 0xb8, 0xaa, 0x52, 0xf4, 0xd2, 0x03, 0xc1, 0x5e, 0x7c, 0x9c }; static const uint8_t hash_data_sha224_in1[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' }; static const uint8_t hash_data_sha224_out1[] = { 0x08, 0x21, 0x69, 0xf9, 0x77, 0x1b, 0x80, 0x15, 0xf3, 0x97, 0xae, 0xde, 0x5b, 0xba, 0xa2, 0x72, 0x2d, 0x8f, 0x5c, 0x19, 0xfe, 0xd2, 0xe2, 0x68, 0x92, 0x49, 0xd8, 0x44 }; static const uint8_t hash_data_sha256_in1[] = { 'a', 'b', 'c' }; static const uint8_t hash_data_sha256_out1[] = { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad }; static const uint8_t hash_data_sha256_in2[] = { 'e', 'f', 'g' }; static const uint8_t hash_data_sha256_out2[] = { 0xd4, 0xff, 0xe8, 0xe9, 0xee, 0x0b, 0x48, 0xeb, 0xa7, 0x16, 0x70, 0x61, 0x23, 0xa7, 0x18, 0x7f, 0x32, 0xea, 0xe3, 0xbd, 0xcb, 0x0e, 0x77, 0x63, 0xe4, 0x1e, 0x53, 0x32, 0x67, 0xbd, 0x8a, 0x53 }; static const uint8_t hash_data_sha384_in1[] = { 'a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' }; static const uint8_t hash_data_sha384_out1[] = { 0x4c, 0xab, 0x80, 0x9d, 0x96, 0x84, 0x01, 0x47, 0x67, 0x0a, 0xc1, 0x7a, 0xb6, 0xb9, 0xf7, 0x6e, 0x35, 0xa6, 0xb0, 0x8c, 0xf5, 0x2a, 0x3d, 0x64, 0x9a, 0x8c, 0x7e, 0x0c, 0x55, 0x45, 0xd3, 0x7d, 0x1f, 0x7f, 0x28, 0x34, 0x96, 0x14, 0x44, 0x2a, 0xf5, 0x98, 0xa2, 0x95, 0x24, 0x76, 0x53, 0x97 }; static const uint8_t hash_data_sha512_in1[] = { 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' }; static const uint8_t hash_data_sha512_out1[] = { 0x20, 0xd8, 0x64, 0x4f, 0x54, 0xa2, 0x5f, 0x6f, 0x0a, 0xf9, 0xd5, 0x27, 0x7d, 0x17, 0xa8, 0x99, 0x4c, 0x64, 0x3f, 0xd0, 0xf3, 0x83, 0x36, 0xee, 0x93, 0x12, 0x55, 0xcd, 0x2e, 0x12, 0x34, 0xa0, 0xc2, 0xaa, 0xf9, 0xbb, 0x15, 0xc5, 0xe9, 0xfa, 0xf7, 0xa7, 0xda, 0xb8, 0x2f, 0x72, 0xa0, 0x47, 0xe3, 0x02, 0x04, 0xe8, 0xa0, 0x35, 0x0c, 0x96, 0x26, 0xd1, 0xcb, 0x8b, 0x47, 0x45, 0x25, 0xd0 }; /* SHA-3 vectors from https://www.di-mgt.com.au/sha_testvectors.html */ #define hash_data_sha3_in1 hash_data_sha256_in1 static const uint8_t hash_data_sha3_224_out1[] = { 0xe6, 0x42, 0x82, 0x4c, 0x3f, 0x8c, 0xf2, 0x4a, 0xd0, 0x92, 0x34, 0xee, 0x7d, 0x3c, 0x76, 0x6f, 0xc9, 0xa3, 0xa5, 0x16, 0x8d, 0x0c, 0x94, 0xad, 0x73, 0xb4, 0x6f, 0xdf }; static const uint8_t hash_data_sha3_256_out1[] = { 0x3a, 0x98, 0x5d, 0xa7, 0x4f, 0xe2, 0x25, 0xb2, 0x04, 0x5c, 0x17, 0x2d, 0x6b, 0xd3, 0x90, 0xbd, 0x85, 0x5f, 0x08, 0x6e, 0x3e, 0x9d, 0x52, 0x5b, 0x46, 0xbf, 0xe2, 0x45, 0x11, 0x43, 0x15, 0x32 }; static const uint8_t hash_data_sha3_384_out1[] = { 0xec, 0x01, 0x49, 0x82, 0x88, 0x51, 0x6f, 0xc9, 0x26, 0x45, 0x9f, 0x58, 0xe2, 0xc6, 0xad, 0x8d, 0xf9, 0xb4, 0x73, 0xcb, 0x0f, 0xc0, 0x8c, 0x25, 0x96, 0xda, 0x7c, 0xf0, 0xe4, 0x9b, 0xe4, 0xb2, 0x98, 0xd8, 0x8c, 0xea, 0x92, 0x7a, 0xc7, 0xf5, 0x39, 0xf1, 0xed, 0xf2, 0x28, 0x37, 0x6d, 0x25 }; static const uint8_t hash_data_sha3_512_out1[] = { 0xb7, 0x51, 0x85, 0x0b, 0x1a, 0x57, 0x16, 0x8a, 0x56, 0x93, 0xcd, 0x92, 0x4b, 0x6b, 0x09, 0x6e, 0x08, 0xf6, 0x21, 0x82, 0x74, 0x44, 0xf7, 0x0d, 0x88, 0x4f, 0x5d, 0x02, 0x40, 0xd2, 0x71, 0x2e, 0x10, 0xe1, 0x16, 0xe9, 0x19, 0x2a, 0xf3, 0xc9, 0x1a, 0x7e, 0xc5, 0x76, 0x47, 0xe3, 0x93, 0x40, 0x57, 0x34, 0x0b, 0x4c, 0xf4, 0x08, 0xd5, 0xa5, 0x65, 0x92, 0xf8, 0x27, 0x4e, 0xec, 0x53, 0xf0 }; /* * SHAKE output generated with: * https://asecuritysite.com/hash/shake?m=abc&l=54 */ static const uint8_t hash_data_shake128_out1[] = { 0x58, 0x81, 0x09, 0x2d, 0xd8, 0x18, 0xbf, 0x5c, 0xf8, 0xa3, 0xdd, 0xb7, 0x93, 0xfb, 0xcb, 0xa7, 0x40, 0x97, 0xd5, 0xc5, 0x26, 0xa6, 0xd3, 0x5f, 0x97, 0xb8, 0x33, 0x51, 0x94, 0x0f, 0x2c, 0xc8, 0x44, 0xc5, 0x0a, 0xf3, 0x2a, 0xcd, 0x3f, 0x2c, 0xdd, 0x06, 0x65, 0x68, 0x70, 0x6f, 0x50, 0x9b, 0xc1, 0xbd, 0xde, 0x58, 0x29, 0x5d }; static const uint8_t hash_data_shake256_out1[] = { 0x48, 0x33, 0x66, 0x60, 0x13, 0x60, 0xa8, 0x77, 0x1c, 0x68, 0x63, 0x08, 0x0c, 0xc4, 0x11, 0x4d, 0x8d, 0xb4, 0x45, 0x30, 0xf8, 0xf1, 0xe1, 0xee, 0x4f, 0x94, 0xea, 0x37, 0xe7, 0x8b, 0x57, 0x39, 0xd5, 0xa1, 0x5b, 0xef, 0x18, 0x6a, 0x53, 0x86, 0xc7, 0x57, 0x44, 0xc0, 0x52, 0x7e, 0x1f, 0xaa, 0x9f, 0x87, 0x26, 0xe4, 0x62, 0xa1 }; /* * More SHA-3 test cases from * https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/secure-hashing * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha-3bytetestvectors.zip */ /* Excerpt from SHA3_224LongMsg.rsp */ static const uint8_t hash_data_sha3_224_in2[] = { 0x31, 0xc8, 0x2d, 0x71, 0x78, 0x5b, 0x7c, 0xa6, 0xb6, 0x51, 0xcb, 0x6c, 0x8c, 0x9a, 0xd5, 0xe2, 0xac, 0xeb, 0x0b, 0x06, 0x33, 0xc0, 0x88, 0xd3, 0x3a, 0xa2, 0x47, 0xad, 0xa7, 0xa5, 0x94, 0xff, 0x49, 0x36, 0xc0, 0x23, 0x25, 0x13, 0x19, 0x82, 0x0a, 0x9b, 0x19, 0xfc, 0x6c, 0x48, 0xde, 0x8a, 0x6f, 0x7a, 0xda, 0x21, 0x41, 0x76, 0xcc, 0xda, 0xad, 0xae, 0xef, 0x51, 0xed, 0x43, 0x71, 0x4a, 0xc0, 0xc8, 0x26, 0x9b, 0xbd, 0x49, 0x7e, 0x46, 0xe7, 0x8b, 0xb5, 0xe5, 0x81, 0x96, 0x49, 0x4b, 0x24, 0x71, 0xb1, 0x68, 0x0e, 0x2d, 0x4c, 0x6d, 0xbd, 0x24, 0x98, 0x31, 0xbd, 0x83, 0xa4, 0xd3, 0xbe, 0x06, 0xc8, 0xa2, 0xe9, 0x03, 0x93, 0x39, 0x74, 0xaa, 0x05, 0xee, 0x74, 0x8b, 0xfe, 0x6e, 0xf3, 0x59, 0xf7, 0xa1, 0x43, 0xed, 0xf0, 0xd4, 0x91, 0x8d, 0xa9, 0x16, 0xbd, 0x6f, 0x15, 0xe2, 0x6a, 0x79, 0x0c, 0xff, 0x51, 0x4b, 0x40, 0xa5, 0xda, 0x7f, 0x72, 0xe1, 0xed, 0x2f, 0xe6, 0x3a, 0x05, 0xb8, 0x14, 0x95, 0x87, 0xbe, 0xa0, 0x56, 0x53, 0x71, 0x8c, 0xc8, 0x98, 0x0e, 0xad, 0xbf, 0xec, 0xa8, 0x5b, 0x7c, 0x9c, 0x28, 0x6d, 0xd0, 0x40, 0x93, 0x65, 0x85, 0x93, 0x8b, 0xe7, 0xf9, 0x82, 0x19, 0x70, 0x0c, 0x83, 0xa9, 0x44, 0x3c, 0x28, 0x56, 0xa8, 0x0f, 0xf4, 0x68, 0x52, 0xb2, 0x6d, 0x1b, 0x1e, 0xdf, 0x72, 0xa3, 0x02, 0x03, 0xcf, 0x6c, 0x44, 0xa1, 0x0f, 0xa6, 0xea, 0xf1, 0x92, 0x01, 0x73, 0xce, 0xdf, 0xb5, 0xc4, 0xcf, 0x3a, 0xc6, 0x65, 0xb3, 0x7a, 0x86, 0xed, 0x02, 0x15, 0x5b, 0xbb, 0xf1, 0x7d, 0xc2, 0xe7, 0x86, 0xaf, 0x94, 0x78, 0xfe, 0x08, 0x89, 0xd8, 0x6c, 0x5b, 0xfa, 0x85, 0xa2, 0x42, 0xeb, 0x08, 0x54, 0xb1, 0x48, 0x2b, 0x7b, 0xd1, 0x6f, 0x67, 0xf8, 0x0b, 0xef, 0x9c, 0x7a, 0x62, 0x8f, 0x05, 0xa1, 0x07, 0x93, 0x6a, 0x64, 0x27, 0x3a, 0x97, 0xb0, 0x08, 0x8b, 0x0e, 0x51, 0x54, 0x51, 0xf9, 0x16, 0xb5, 0x65, 0x62, 0x30, 0xa1, 0x2b, 0xa6, 0xdc, 0x78 }; static const uint8_t hash_data_sha3_224_out2[] = { 0xaa, 0xb2, 0x3c, 0x9e, 0x7f, 0xb9, 0xd7, 0xda, 0xce, 0xfd, 0xfd, 0x0b, 0x1a, 0xe8, 0x5a, 0xb1, 0x37, 0x4a, 0xbf, 0xf7, 0xc4, 0xe3, 0xf7, 0x55, 0x6e, 0xca, 0xe4, 0x12 }; /* Excerpt from SHA3_256LongMsg.rsp */ static const uint8_t hash_data_sha3_256_in2[] = { 0xb1, 0xca, 0xa3, 0x96, 0x77, 0x1a, 0x09, 0xa1, 0xdb, 0x9b, 0xc2, 0x05, 0x43, 0xe9, 0x88, 0xe3, 0x59, 0xd4, 0x7c, 0x2a, 0x61, 0x64, 0x17, 0xbb, 0xca, 0x1b, 0x62, 0xcb, 0x02, 0x79, 0x6a, 0x88, 0x8f, 0xc6, 0xee, 0xff, 0x5c, 0x0b, 0x5c, 0x3d, 0x50, 0x62, 0xfc, 0xb4, 0x25, 0x6f, 0x6a, 0xe1, 0x78, 0x2f, 0x49, 0x2c, 0x1c, 0xf0, 0x36, 0x10, 0xb4, 0xa1, 0xfb, 0x7b, 0x81, 0x4c, 0x05, 0x78, 0x78, 0xe1, 0x19, 0x0b, 0x98, 0x35, 0x42, 0x5c, 0x7a, 0x4a, 0x0e, 0x18, 0x2a, 0xd1, 0xf9, 0x15, 0x35, 0xed, 0x2a, 0x35, 0x03, 0x3a, 0x5d, 0x8c, 0x67, 0x0e, 0x21, 0xc5, 0x75, 0xff, 0x43, 0xc1, 0x94, 0xa5, 0x8a, 0x82, 0xd4, 0xa1, 0xa4, 0x48, 0x81, 0xdd, 0x61, 0xf9, 0xf8, 0x16, 0x1f, 0xc6, 0xb9, 0x98, 0x86, 0x0c, 0xbe, 0x49, 0x75, 0x78, 0x0b, 0xe9, 0x3b, 0x6f, 0x87, 0x98, 0x0b, 0xad, 0x0a, 0x99, 0xaa, 0x2c, 0xb7, 0x55, 0x6b, 0x47, 0x8c, 0xa3, 0x5d, 0x1f, 0x37, 0x46, 0xc3, 0x3e, 0x2b, 0xb7, 0xc4, 0x7a, 0xf4, 0x26, 0x64, 0x1c, 0xc7, 0xbb, 0xb3, 0x42, 0x5e, 0x21, 0x44, 0x82, 0x03, 0x45, 0xe1, 0xd0, 0xea, 0x5b, 0x7d, 0xa2, 0xc3, 0x23, 0x6a, 0x52, 0x90, 0x6a, 0xcd, 0xc3, 0xb4, 0xd3, 0x4e, 0x47, 0x4d, 0xd7, 0x14, 0xc0, 0xc4, 0x0b, 0xf0, 0x06, 0xa3, 0xa1, 0xd8, 0x89, 0xa6, 0x32, 0x98, 0x38, 0x14, 0xbb, 0xc4, 0xa1, 0x4f, 0xe5, 0xf1, 0x59, 0xaa, 0x89, 0x24, 0x9e, 0x7c, 0x73, 0x8b, 0x3b, 0x73, 0x66, 0x6b, 0xac, 0x2a, 0x61, 0x5a, 0x83, 0xfd, 0x21, 0xae, 0x0a, 0x1c, 0xe7, 0x35, 0x2a, 0xde, 0x7b, 0x27, 0x8b, 0x58, 0x71, 0x58, 0xfd, 0x2f, 0xab, 0xb2, 0x17, 0xaa, 0x1f, 0xe3, 0x1d, 0x0b, 0xda, 0x53, 0x27, 0x20, 0x45, 0x59, 0x80, 0x15, 0xa8, 0xae, 0x4d, 0x8c, 0xec, 0x22, 0x6f, 0xef, 0xa5, 0x8d, 0xaa, 0x05, 0x50, 0x09, 0x06, 0xc4, 0xd8, 0x5e, 0x75, 0x67 }; static const uint8_t hash_data_sha3_256_out2[] = { 0xcb, 0x56, 0x48, 0xa1, 0xd6, 0x1c, 0x6c, 0x5b, 0xda, 0xcd, 0x96, 0xf8, 0x1c, 0x95, 0x91, 0xde, 0xbc, 0x39, 0x50, 0xdc, 0xf6, 0x58, 0x14, 0x5b, 0x8d, 0x99, 0x65, 0x70, 0xba, 0x88, 0x1a, 0x05 }; /* Excerpt from SHA3_384LongMsg.rsp */ static const uint8_t hash_data_sha3_384_in2[] = { 0x5f, 0xe3, 0x59, 0x23, 0xb4, 0xe0, 0xaf, 0x7d, 0xd2, 0x49, 0x71, 0x81, 0x2a, 0x58, 0x42, 0x55, 0x19, 0x85, 0x0a, 0x50, 0x6d, 0xfa, 0x9b, 0x0d, 0x25, 0x47, 0x95, 0xbe, 0x78, 0x57, 0x86, 0xc3, 0x19, 0xa2, 0x56, 0x7c, 0xba, 0xa5, 0xe3, 0x5b, 0xcf, 0x8f, 0xe8, 0x3d, 0x94, 0x3e, 0x23, 0xfa, 0x51, 0x69, 0xb7, 0x3a, 0xdc, 0x1f, 0xcf, 0x8b, 0x60, 0x70, 0x84, 0xb1, 0x5e, 0x6a, 0x01, 0x3d, 0xf1, 0x47, 0xe4, 0x62, 0x56, 0xe4, 0xe8, 0x03, 0xab, 0x75, 0xc1, 0x10, 0xf7, 0x78, 0x48, 0x13, 0x6b, 0xe7, 0xd8, 0x06, 0xe8, 0xb2, 0xf8, 0x68, 0xc1, 0x6c, 0x3a, 0x90, 0xc1, 0x44, 0x63, 0x40, 0x70, 0x38, 0xcb, 0x7d, 0x92, 0x85, 0x07, 0x9e, 0xf1, 0x62, 0xc6, 0xa4, 0x5c, 0xed, 0xf9, 0xc9, 0xf0, 0x66, 0x37, 0x5c, 0x96, 0x9b, 0x5f, 0xcb, 0xcd, 0xa3, 0x7f, 0x02, 0xaa, 0xcf, 0xf4, 0xf3, 0x1c, 0xde, 0xd3, 0x76, 0x75, 0x70, 0x88, 0x54, 0x26, 0xbe, 0xbd, 0x9e, 0xca, 0x87, 0x7e, 0x44, 0x67, 0x4e, 0x9a, 0xe2, 0xf0, 0xc2, 0x4c, 0xdd, 0x0e, 0x7e, 0x1a, 0xaf, 0x1f, 0xf2, 0xfe, 0x7f, 0x80, 0xa1, 0xc4, 0xf5, 0x07, 0x8e, 0xb3, 0x4c, 0xd4, 0xf0, 0x6f, 0xa9, 0x4a, 0x2d, 0x1e, 0xab, 0x58, 0x06, 0xca, 0x43, 0xfd, 0x0f, 0x06, 0xc6, 0x0b, 0x63, 0xd5, 0x40, 0x2b, 0x95, 0xc7, 0x0c, 0x21, 0xea, 0x65, 0xa1, 0x51, 0xc5, 0xcf, 0xaf, 0x82, 0x62, 0xa4, 0x6b, 0xe3, 0xc7, 0x22, 0x26, 0x4b }; static const uint8_t hash_data_sha3_384_out2[] = { 0x30, 0x54, 0xd2, 0x49, 0xf9, 0x16, 0xa6, 0x03, 0x9b, 0x2a, 0x9c, 0x3e, 0xbe, 0xc1, 0x41, 0x87, 0x91, 0xa0, 0x60, 0x8a, 0x17, 0x0e, 0x6d, 0x36, 0x48, 0x60, 0x35, 0xe5, 0xf9, 0x26, 0x35, 0xea, 0xba, 0x98, 0x07, 0x2a, 0x85, 0x37, 0x3c, 0xb5, 0x4e, 0x2a, 0xe3, 0xf9, 0x82, 0xce, 0x13, 0x2b }; /* Excerpt from SHA3_512LongMsg.rsp */ static const uint8_t hash_data_sha3_512_in2[] = { 0x66, 0x4e, 0xf2, 0xe3, 0xa7, 0x05, 0x9d, 0xaf, 0x1c, 0x58, 0xca, 0xf5, 0x20, 0x08, 0xc5, 0x22, 0x7e, 0x85, 0xcd, 0xcb, 0x83, 0xb4, 0xc5, 0x94, 0x57, 0xf0, 0x2c, 0x50, 0x8d, 0x4f, 0x4f, 0x69, 0xf8, 0x26, 0xbd, 0x82, 0xc0, 0xcf, 0xfc, 0x5c, 0xb6, 0xa9, 0x7a, 0xf6, 0xe5, 0x61, 0xc6, 0xf9, 0x69, 0x70, 0x00, 0x52, 0x85, 0xe5, 0x8f, 0x21, 0xef, 0x65, 0x11, 0xd2, 0x6e, 0x70, 0x98, 0x89, 0xa7, 0xe5, 0x13, 0xc4, 0x34, 0xc9, 0x0a, 0x3c, 0xf7, 0x44, 0x8f, 0x0c, 0xae, 0xec, 0x71, 0x14, 0xc7, 0x47, 0xb2, 0xa0, 0x75, 0x8a, 0x3b, 0x45, 0x03, 0xa7, 0xcf, 0x0c, 0x69, 0x87, 0x3e, 0xd3, 0x1d, 0x94, 0xdb, 0xef, 0x2b, 0x7b, 0x2f, 0x16, 0x88, 0x30, 0xef, 0x7d, 0xa3, 0x32, 0x2c, 0x3d, 0x3e, 0x10, 0xca, 0xfb, 0x7c, 0x2c, 0x33, 0xc8, 0x3b, 0xbf, 0x4c, 0x46, 0xa3, 0x1d, 0xa9, 0x0c, 0xff, 0x3b, 0xfd, 0x4c, 0xcc, 0x6e, 0xd4, 0xb3, 0x10, 0x75, 0x84, 0x91, 0xee, 0xba, 0x60, 0x3a, 0x76 }; static const uint8_t hash_data_sha3_512_out2[] = { 0xe5, 0x82, 0x5f, 0xf1, 0xa3, 0xc0, 0x70, 0xd5, 0xa5, 0x2f, 0xbb, 0xe7, 0x11, 0x85, 0x4a, 0x44, 0x05, 0x54, 0x29, 0x5f, 0xfb, 0x7a, 0x79, 0x69, 0xa1, 0x79, 0x08, 0xd1, 0x01, 0x63, 0xbf, 0xbe, 0x8f, 0x1d, 0x52, 0xa6, 0x76, 0xe8, 0xa0, 0x13, 0x7b, 0x56, 0xa1, 0x1c, 0xdf, 0x0f, 0xfb, 0xb4, 0x56, 0xbc, 0x89, 0x9f, 0xc7, 0x27, 0xd1, 0x4b, 0xd8, 0x88, 0x22, 0x32, 0x54, 0x9d, 0x91, 0x4e, }; /* * More SHAKE test cases from * https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/secure-hashing * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/shakebytetestvectors.zip */ /* Excerpt from SHAKE128LongMsg.rsp */ static const uint8_t hash_data_shake128_in2[] = { 0xa6, 0xfe, 0x00, 0x06, 0x42, 0x57, 0xaa, 0x31, 0x8b, 0x62, 0x1c, 0x5e, 0xb3, 0x11, 0xd3, 0x2b, 0xb8, 0x00, 0x4c, 0x2f, 0xa1, 0xa9, 0x69, 0xd2, 0x05, 0xd7, 0x17, 0x62, 0xcc, 0x5d, 0x2e, 0x63, 0x39, 0x07, 0x99, 0x26, 0x29, 0xd1, 0xb6, 0x9d, 0x95, 0x57, 0xff, 0x6d, 0x5e, 0x8d, 0xeb, 0x45, 0x4a, 0xb0, 0x0f, 0x6e, 0x49, 0x7c, 0x89, 0xa4, 0xfe, 0xa0, 0x9e, 0x25, 0x7a, 0x6f, 0xa2, 0x07, 0x4b, 0xd8, 0x18, 0xce, 0xb5, 0x98, 0x1b, 0x3e, 0x3f, 0xae, 0xfd, 0x6e, 0x72, 0x0f, 0x2d, 0x1e, 0xdd, 0x9c, 0x5e, 0x4a, 0x5c, 0x51, 0xe5, 0x00, 0x9a, 0xbf, 0x63, 0x6e, 0xd5, 0xbc, 0xa5, 0x3f, 0xe1, 0x59, 0xc8, 0x28, 0x70, 0x14, 0xa1, 0xbd, 0x90, 0x4f, 0x5c, 0x8a, 0x75, 0x01, 0x62, 0x5f, 0x79, 0xac, 0x81, 0xeb, 0x61, 0x8f, 0x47, 0x8c, 0xe2, 0x1c, 0xae, 0x66, 0x64, 0xac, 0xff, 0xb3, 0x05, 0x72, 0xf0, 0x59, 0xe1, 0xad, 0x0f, 0xc2, 0x91, 0x22, 0x64, 0xe8, 0xf1, 0xca, 0x52, 0xaf, 0x26, 0xc8, 0xbf, 0x78, 0xe0, 0x9d, 0x75, 0xf3, 0xdd, 0x9f, 0xc7, 0x34, 0xaf, 0xa8, 0x77, 0x0a, 0xbe, 0x0b, 0xd7, 0x8c, 0x90, 0xcc, 0x2f, 0xf4, 0x48, 0x10, 0x5f, 0xb1, 0x6d, 0xd2, 0xc5, 0xb7, 0xed, 0xd8, 0x61, 0x1a, 0x62, 0xe5, 0x37, 0xdb, 0x93, 0x31, 0xf5, 0x02, 0x3e, 0x16, 0xd6, 0xec, 0x15, 0x0c, 0xc6, 0xe7, 0x06, 0xd7, 0xc7, 0xfc, 0xbf, 0xff, 0x93, 0x0c, 0x72, 0x81, 0x83, 0x1f, 0xd5, 0xc4, 0xaf, 0xf8, 0x6e, 0xce, 0x57, 0xed, 0x0d, 0xb8, 0x82, 0xf5, 0x9a, 0x5f, 0xe4, 0x03, 0x10, 0x5d, 0x05, 0x92, 0xca, 0x38, 0xa0, 0x81, 0xfe, 0xd8, 0x49, 0x22, 0x87, 0x3f, 0x53, 0x8e, 0xe7, 0x74, 0xf1, 0x3b, 0x8c, 0xc0, 0x9b, 0xd0, 0x52, 0x1d, 0xb4, 0x37, 0x4a, 0xec, 0x69, 0xf4, 0xba, 0xe6, 0xdc, 0xb6, 0x64, 0x55, 0x82, 0x2c, 0x0b, 0x84, 0xc9, 0x1a, 0x34, 0x74, 0xff, 0xac, 0x2a, 0xd0, 0x6f, 0x0a, 0x44, 0x23, 0xcd, 0x2c, 0x6a, 0x49, 0xd4, 0xf0, 0xd6, 0x24, 0x2d, 0x6a, 0x18, 0x90, 0x93, 0x7b, 0x5d, 0x98, 0x35, 0xa5, 0xf0, 0xea, 0x5b, 0x1d, 0x01, 0x88, 0x4d, 0x22, 0xa6, 0xc1, 0x71, 0x8e, 0x1f, 0x60, 0xb3, 0xab, 0x5e, 0x23, 0x29, 0x47, 0xc7, 0x6e, 0xf7, 0x0b, 0x34, 0x41, 0x71, 0x08, 0x3c, 0x68, 0x80, 0x93, 0xb5, 0xf1, 0x47, 0x53, 0x77, 0xe3, 0x06, 0x98, 0x63 }; static const uint8_t hash_data_shake128_out2[] = { 0x31, 0x09, 0xd9, 0x47, 0x2c, 0xa4, 0x36, 0xe8, 0x05, 0xc6, 0xb3, 0xdb, 0x22, 0x51, 0xa9, 0xbc }; /* Excerpt from SHAKE256LongMsg.rsp */ static const uint8_t hash_data_shake256_in2[] = { 0xdc, 0x5a, 0x10, 0x0f, 0xa1, 0x6d, 0xf1, 0x58, 0x3c, 0x79, 0x72, 0x2a, 0x0d, 0x72, 0x83, 0x3d, 0x3b, 0xf2, 0x2c, 0x10, 0x9b, 0x88, 0x89, 0xdb, 0xd3, 0x52, 0x13, 0xc6, 0xbf, 0xce, 0x20, 0x58, 0x13, 0xed, 0xae, 0x32, 0x42, 0x69, 0x5c, 0xfd, 0x9f, 0x59, 0xb9, 0xa1, 0xc2, 0x03, 0xc1, 0xb7, 0x2e, 0xf1, 0xa5, 0x42, 0x31, 0x47, 0xcb, 0x99, 0x0b, 0x53, 0x16, 0xa8, 0x52, 0x66, 0x67, 0x58, 0x94, 0xe2, 0x64, 0x4c, 0x3f, 0x95, 0x78, 0xce, 0xbe, 0x45, 0x1a, 0x09, 0xe5, 0x8c, 0x53, 0x78, 0x8f, 0xe7, 0x7a, 0x9e, 0x85, 0x09, 0x43, 0xf8, 0xa2, 0x75, 0xf8, 0x30, 0x35, 0x4b, 0x05, 0x93, 0xa7, 0x62, 0xba, 0xc5, 0x5e, 0x98, 0x4d, 0xb3, 0xe0, 0x66, 0x1e, 0xca, 0x3c, 0xb8, 0x3f, 0x67, 0xa6, 0xfb, 0x34, 0x8e, 0x61, 0x77, 0xf7, 0xde, 0xe2, 0xdf, 0x40, 0xc4, 0x32, 0x26, 0x02, 0xf0, 0x94, 0x95, 0x39, 0x05, 0x68, 0x1b, 0xe3, 0x95, 0x4f, 0xe4, 0x4c, 0x4c, 0x90, 0x2c, 0x8f, 0x6b, 0xba, 0x56, 0x5a, 0x78, 0x8b, 0x38, 0xf1, 0x34, 0x11, 0xba, 0x76, 0xce, 0x0f, 0x9f, 0x67, 0x56, 0xa2, 0xa2, 0x68, 0x74, 0x24, 0xc5, 0x43, 0x5a, 0x51, 0xe6, 0x2d, 0xf7, 0xa8, 0x93, 0x4b, 0x6e, 0x14, 0x1f, 0x74, 0xc6, 0xcc, 0xf5, 0x39, 0xe3, 0x78, 0x2d, 0x22, 0xb5, 0x95, 0x5d, 0x3b, 0xaf, 0x1a, 0xb2, 0xcf, 0x7b, 0x5c, 0x3f, 0x74, 0xec, 0x2f, 0x94, 0x47, 0x34, 0x4e, 0x93, 0x79, 0x57, 0xfd, 0x7f, 0x0b, 0xdf, 0xec, 0x56, 0xd5, 0xd2, 0x5f, 0x61, 0xcd, 0xe1, 0x8c, 0x09, 0x86, 0xe2, 0x44, 0xec, 0xf7, 0x80, 0xd6, 0x30, 0x7e, 0x31, 0x31, 0x17, 0x25, 0x69, 0x48, 0xd4, 0x23, 0x0e, 0xbb, 0x9e, 0xa6, 0x2b, 0xb3, 0x02, 0xcf, 0xe8, 0x0d, 0x7d, 0xfe, 0xba, 0xbc, 0x4a, 0x51, 0xd7, 0x68, 0x79, 0x67, 0xed, 0x5b, 0x41, 0x6a, 0x13, 0x9e, 0x97, 0x4c, 0x00, 0x5f, 0xff, 0x50, 0x7a, 0x96 }; static const uint8_t hash_data_shake256_out2[] = { 0x2b, 0xac, 0x57, 0x16, 0x80, 0x3a, 0x9c, 0xda, 0x8f, 0x9e, 0x84, 0x36, 0x5a, 0xb0, 0xa6, 0x81, 0x32, 0x7b, 0x5b, 0xa3, 0x4f, 0xde, 0xdf, 0xb1, 0xc1, 0x2e, 0x6e, 0x80, 0x7f, 0x45, 0x28, 0x4b, }; /* * SM3 * https://tools.ietf.org/html/draft-sca-cfrg-sm3-02 * Appendix A.1 */ static const uint8_t hash_data_sm3_a1_in[3] = "abc"; static const uint8_t hash_data_sm3_a1_out[] = { 0x66, 0xc7, 0xf0, 0xf4, 0x62, 0xee, 0xed, 0xd9, 0xd1, 0xf2, 0xd4, 0x6b, 0xdc, 0x10, 0xe4, 0xe2, 0x41, 0x67, 0xc4, 0x87, 0x5c, 0xf2, 0xf7, 0xa2, 0x29, 0x7d, 0xa0, 0x2b, 0x8f, 0x4b, 0xa8, 0xe0 }; /* * SM3 * https://tools.ietf.org/html/draft-sca-cfrg-sm3-02 * Appendix A.2 */ static const uint8_t hash_data_sm3_a2_in[] = { 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64 }; static const uint8_t hash_data_sm3_a2_out[] = { 0xde, 0xbe, 0x9f, 0xf9, 0x22, 0x75, 0xb8, 0xa1, 0x38, 0x60, 0x48, 0x89, 0xc1, 0x8e, 0x5a, 0x4d, 0x6f, 0xdb, 0x70, 0xe5, 0x38, 0x7e, 0x57, 0x65, 0x29, 0x3d, 0xcb, 0xa3, 0x9c, 0x0c, 0x57, 0x32 }; struct xtest_hash_case { uint32_t algo; size_t in_incr; const uint8_t *in; size_t in_len; const uint8_t *out; size_t out_len; }; #define XTEST_HASH_CASE(algo, in_incr, in, out) \ { (algo), (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) } static const struct xtest_hash_case hash_cases[] = { XTEST_HASH_CASE(TEE_ALG_MD5, 6, hash_data_md5_in1, hash_data_md5_out1), XTEST_HASH_CASE(TEE_ALG_SHA1, 3, hash_data_sha1_in1, hash_data_sha1_out1), XTEST_HASH_CASE(TEE_ALG_SHA224, 7, hash_data_sha224_in1, hash_data_sha224_out1), XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in1, hash_data_sha256_out1), XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in2, hash_data_sha256_out2), XTEST_HASH_CASE(TEE_ALG_SHA384, 1, hash_data_sha384_in1, hash_data_sha384_out1), XTEST_HASH_CASE(TEE_ALG_SHA512, 1, hash_data_sha512_in1, hash_data_sha512_out1), XTEST_HASH_CASE(TEE_ALG_SHA3_224, 1, hash_data_sha3_in1, hash_data_sha3_224_out1), XTEST_HASH_CASE(TEE_ALG_SHA3_224, 4, hash_data_sha3_224_in2, hash_data_sha3_224_out2), XTEST_HASH_CASE(TEE_ALG_SHA3_256, 1, hash_data_sha3_in1, hash_data_sha3_256_out1), XTEST_HASH_CASE(TEE_ALG_SHA3_256, 4, hash_data_sha3_256_in2, hash_data_sha3_256_out2), XTEST_HASH_CASE(TEE_ALG_SHA3_384, 1, hash_data_sha3_in1, hash_data_sha3_384_out1), XTEST_HASH_CASE(TEE_ALG_SHA3_384, 4, hash_data_sha3_384_in2, hash_data_sha3_384_out2), XTEST_HASH_CASE(TEE_ALG_SHA3_512, 1, hash_data_sha3_in1, hash_data_sha3_512_out1), XTEST_HASH_CASE(TEE_ALG_SHA3_512, 4, hash_data_sha3_512_in2, hash_data_sha3_512_out2), XTEST_HASH_CASE(TEE_ALG_SHAKE128, 1, hash_data_sha3_in1, hash_data_shake128_out1), XTEST_HASH_CASE(TEE_ALG_SHAKE128, 4, hash_data_shake128_in2, hash_data_shake128_out2), XTEST_HASH_CASE(TEE_ALG_SHAKE256, 1, hash_data_sha3_in1, hash_data_shake256_out1), XTEST_HASH_CASE(TEE_ALG_SHAKE256, 4, hash_data_shake256_in2, hash_data_shake256_out2), XTEST_HASH_CASE(TEE_ALG_SM3, 2, hash_data_sm3_a1_in, hash_data_sm3_a1_out), XTEST_HASH_CASE(TEE_ALG_SM3, 19, hash_data_sm3_a2_in, hash_data_sm3_a2_out), }; static void xtest_tee_test_4001(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(hash_cases); n++) { TEE_OperationHandle op1 = TEE_HANDLE_NULL; TEE_OperationHandle op2 = TEE_HANDLE_NULL; uint8_t out[64] = { }; size_t out_size = 0; if (hash_cases[n].algo == TEE_ALG_SM3 && !ta_crypt_cmd_is_algo_supported(c, &session, TEE_ALG_SM3, TEE_CRYPTO_ELEMENT_NONE)) { Do_ADBG_Log("SM3 not supported: skip subcase"); continue; } Do_ADBG_BeginSubCase(c, "Hash case %d algo 0x%x", (int)n, (unsigned int)hash_cases[n].algo); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op1, hash_cases[n].algo, TEE_MODE_DIGEST, 0))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op2, hash_cases[n].algo, TEE_MODE_DIGEST, 0))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_update(c, &session, op1, hash_cases[n].in, hash_cases[n].in_incr))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_copy_operation(c, &session, op2, op1))) goto out; out_size = hash_cases[n].out_len; memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_do_final(c, &session, op2, hash_cases[n].in + hash_cases[n].in_incr, hash_cases[n].in_len - hash_cases[n].in_incr, out, &out_size))) goto out; (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out, hash_cases[n].out_len, out, out_size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_reset_operation(c, &session, op1))) goto out; out_size = hash_cases[n].out_len; memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_do_final(c, &session, op1, hash_cases[n].in, hash_cases[n].in_len, out, &out_size))) goto out; (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out, hash_cases[n].out_len, out, out_size); /* * Invoke TEE_DigestDoFinal() a second time to check that state * was properly reset */ out_size = hash_cases[n].out_len; memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_do_final(c, &session, op1, hash_cases[n].in, hash_cases[n].in_len, out, &out_size))) goto out; (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out, hash_cases[n].out_len, out, out_size); /* * Test that TEE_DigestExtract() and TEE_DigestDoFinal() * work together. */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_update(c, &session, op1, hash_cases[n].in, hash_cases[n].in_len))) goto out; out_size = hash_cases[n].in_incr; memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_extract(c, &session, op1, out, &out_size))) goto out; ADBG_EXPECT_BUFFER(c, hash_cases[n].out, hash_cases[n].in_incr, out, out_size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_copy_operation(c, &session, op2, op1))) goto out; out_size = hash_cases[n].out_len - hash_cases[n].in_incr; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_do_final(c, &session, op1, NULL, 0, out, &out_size))) goto out; ADBG_EXPECT_BUFFER(c, hash_cases[n].out + hash_cases[n].in_incr, hash_cases[n].out_len - hash_cases[n].in_incr, out, out_size); out_size = hash_cases[n].out_len - hash_cases[n].in_incr; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_extract(c, &session, op2, out, &out_size))) goto out; ADBG_EXPECT_BUFFER(c, hash_cases[n].out + hash_cases[n].in_incr, hash_cases[n].out_len - hash_cases[n].in_incr, out, out_size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op2))) goto out; Do_ADBG_EndSubCase(c, NULL); } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4001, xtest_tee_test_4001, "Test TEE Internal API hash operations"); struct xtest_mac_case { uint32_t algo; uint32_t key_type; const uint8_t *key; size_t key_len; size_t in_incr; const uint8_t *in; size_t in_len; const uint8_t *out; size_t out_len; bool multiple_incr; }; #define XTEST_MAC_CASE_1(algo, key_type, key, in_incr, in, out) \ { (algo), (key_type), (key), ARRAY_SIZE(key), \ (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out), false } #define XTEST_MAC_CASE_MULT(algo, key_type, key, in_incr, in, out) \ { (algo), (key_type), (key), ARRAY_SIZE(key), \ (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out), true } #define XTEST_MAC_CASE(algo, key_type, key, in_incr, in, out) \ XTEST_MAC_CASE_1((algo), (key_type), (key), (in_incr), (in), (out)), \ XTEST_MAC_CASE_MULT((algo), (key_type), (key), (in_incr), (in), (out)) #define XTEST_MAC_CBC_CASE(algo, key_type, vect, in_incr) \ XTEST_MAC_CASE((algo), (key_type), \ mac_cbc_ ## vect ## _key, (in_incr), \ mac_cbc_ ## vect ## _data, mac_cbc_ ## vect ## _out) #define XTEST_MAC_CMAC_CASE(vect, in_incr) \ XTEST_MAC_CASE(TEE_ALG_AES_CMAC, TEE_TYPE_AES, \ mac_cmac_ ## vect ## _key, (in_incr), \ mac_cmac_ ## vect ## _data, mac_cmac_ ## vect ## _out) #define XTEST_MAC_DES3_CMAC_CASE(vect, in_incr) \ XTEST_MAC_CASE(TEE_ALG_DES3_CMAC, TEE_TYPE_DES3, \ mac_des3_cmac_ ## vect ## _key, (in_incr), \ mac_des3_cmac_ ## vect ## _data, mac_des3_cmac_ ## vect ## _out) static const struct xtest_mac_case mac_cases[] = { XTEST_MAC_CASE(TEE_ALG_HMAC_MD5, TEE_TYPE_HMAC_MD5, mac_data_md5_key1, 4, mac_data_md5_in1, mac_data_md5_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA1, TEE_TYPE_HMAC_SHA1, mac_data_sha1_key1, 5, mac_data_sha1_in1, mac_data_sha1_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA224, TEE_TYPE_HMAC_SHA224, mac_data_sha224_key1, 8, mac_data_sha224_in1, mac_data_sha224_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256, mac_data_sha256_key1, 1, mac_data_sha256_in1, mac_data_sha256_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256, mac_data_sha256_key2, 7, mac_data_sha256_in2, mac_data_sha256_out2), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA384, TEE_TYPE_HMAC_SHA384, mac_data_sha384_key1, 11, mac_data_sha384_in1, mac_data_sha384_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA512, TEE_TYPE_HMAC_SHA512, mac_data_sha512_key1, 13, mac_data_sha512_in1, mac_data_sha512_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA3_224, TEE_TYPE_HMAC_SHA3_224, mac_data_sha3_224_key1, 13, mac_data_sha3_224_in1, mac_data_sha3_224_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA3_256, TEE_TYPE_HMAC_SHA3_256, mac_data_sha3_256_key1, 13, mac_data_sha3_256_in1, mac_data_sha3_256_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA3_384, TEE_TYPE_HMAC_SHA3_384, mac_data_sha3_384_key1, 13, mac_data_sha3_384_in1, mac_data_sha3_384_out1), XTEST_MAC_CASE(TEE_ALG_HMAC_SHA3_512, TEE_TYPE_HMAC_SHA3_512, mac_data_sha3_512_key1, 13, mac_data_sha3_512_in1, mac_data_sha3_512_out1), XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_NOPAD, TEE_TYPE_AES, vect1, 14), XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_NOPAD, TEE_TYPE_DES, vect2, 16), XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_NOPAD, TEE_TYPE_DES3, vect3, 17), XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect4, 11), XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect5, 9), XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect6, 4), XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect7, 3), XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect8, 23), XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect9, 34), XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect10, 4), { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect1_key, ARRAY_SIZE(mac_cmac_vect1_key), 0, NULL, 0, mac_cmac_vect1_out, ARRAY_SIZE(mac_cmac_vect1_out) }, XTEST_MAC_CMAC_CASE(vect2, 9), XTEST_MAC_CMAC_CASE(vect3, 9), XTEST_MAC_CMAC_CASE(vect4, 9), { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect5_key, ARRAY_SIZE(mac_cmac_vect5_key), 0, NULL, 0, mac_cmac_vect5_out, ARRAY_SIZE(mac_cmac_vect5_out) }, XTEST_MAC_CMAC_CASE(vect6, 9), XTEST_MAC_CMAC_CASE(vect7, 9), XTEST_MAC_CMAC_CASE(vect8, 9), { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect9_key, ARRAY_SIZE(mac_cmac_vect9_key), 0, NULL, 0, mac_cmac_vect9_out, ARRAY_SIZE(mac_cmac_vect9_out) }, XTEST_MAC_CMAC_CASE(vect10, 9), XTEST_MAC_CMAC_CASE(vect11, 9), XTEST_MAC_CMAC_CASE(vect12, 9), XTEST_MAC_CMAC_CASE(vect12, 16), XTEST_MAC_CMAC_CASE(vect13, 1), { TEE_ALG_DES3_CMAC, TEE_TYPE_DES3, mac_des3_cmac_vect1_key, ARRAY_SIZE(mac_des3_cmac_vect1_key), 0, NULL, 0, mac_des3_cmac_vect1_out, ARRAY_SIZE(mac_des3_cmac_vect1_out) }, XTEST_MAC_DES3_CMAC_CASE(vect2, 3), XTEST_MAC_DES3_CMAC_CASE(vect3, 9), XTEST_MAC_DES3_CMAC_CASE(vect4, 9), { TEE_ALG_DES3_CMAC, TEE_TYPE_DES3, mac_des3_cmac_vect5_key, ARRAY_SIZE(mac_des3_cmac_vect5_key), 0, NULL, 0, mac_des3_cmac_vect5_out, ARRAY_SIZE(mac_des3_cmac_vect5_out) }, XTEST_MAC_DES3_CMAC_CASE(vect6, 3), XTEST_MAC_DES3_CMAC_CASE(vect7, 5), XTEST_MAC_DES3_CMAC_CASE(vect8, 9), XTEST_MAC_CASE(TEE_ALG_HMAC_SM3, TEE_TYPE_HMAC_SM3, mac_data_sm3_d31_key, 13, mac_data_sm3_d31_in, mac_data_sm3_d31_out), XTEST_MAC_CASE(TEE_ALG_HMAC_SM3, TEE_TYPE_HMAC_SM3, mac_data_sm3_d32_key, 13, mac_data_sm3_d32_in, mac_data_sm3_d32_out), }; static void xtest_tee_test_4002(ADBG_Case_t *c) { TEEC_Session session = { }; TEE_OperationHandle op1 = TEE_HANDLE_NULL; TEE_OperationHandle op2 = TEE_HANDLE_NULL; TEE_OperationHandle op3 = TEE_HANDLE_NULL; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; uint8_t out[64] = { }; size_t out_size = 0; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(mac_cases); n++) { TEE_Attribute key_attr = { }; size_t key_size = 0; size_t offs = 0; Do_ADBG_BeginSubCase(c, "MAC case %d algo 0x%x", (int)n, (unsigned int)mac_cases[n].algo); key_attr.attributeID = TEE_ATTR_SECRET_VALUE; key_attr.content.ref.buffer = (void *)mac_cases[n].key; key_attr.content.ref.length = mac_cases[n].key_len; key_size = key_attr.content.ref.length * 8; if (mac_cases[n].key_type == TEE_TYPE_DES || mac_cases[n].key_type == TEE_TYPE_DES3) /* Exclude parity in bit size of key */ key_size -= key_size / 8; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op1, mac_cases[n].algo, TEE_MODE_MAC, key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op2, mac_cases[n].algo, TEE_MODE_MAC, key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op3, mac_cases[n].algo, TEE_MODE_MAC, key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, mac_cases[n].key_type, key_size, &key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, key_handle, &key_attr, 1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op1, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_copy_operation(c, &session, op3, op1))) goto out; offs = 0; if (mac_cases[n].in != NULL) { while (offs + mac_cases[n].in_incr < mac_cases[n].in_len) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_mac_update(c, &session, op1, mac_cases[n].in + offs, mac_cases[n].in_incr))) goto out; offs += mac_cases[n].in_incr; if (!mac_cases[n].multiple_incr) break; } } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_copy_operation(c, &session, op2, op1))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_mac_final_compute(c, &session, op2, mac_cases[n].in + offs, mac_cases [n].in_len - offs, out, &out_size))) goto out; (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out, mac_cases[n].out_len, out, out_size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_mac_final_compute(c, &session, op1, mac_cases[n].in, mac_cases[n].in_len, out, &out_size))) goto out; (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out, mac_cases[n].out_len, out, out_size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_mac_final_compare(c, &session, op3, mac_cases[n].in, mac_cases[n].in_len, mac_cases[n].out, mac_cases[n].out_len))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op2))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op3))) goto out; Do_ADBG_EndSubCase(c, NULL); } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4002, xtest_tee_test_4002, "Test TEE Internal API MAC operations"); static const uint8_t ciph_data_aes_key1[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ }; static const uint8_t ciph_data_aes_key2[] = { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, }; static const uint8_t ciph_data_des_key1[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 /* 01234567 */ }; static const uint8_t ciph_data_des_key2[] = { 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1 }; static const uint8_t ciph_data_des3_key1[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */ }; static const uint8_t ciph_data_des3_key2[] = { 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1, 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1, 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1 }; static const uint8_t ciph_data_des2_key1[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ }; static const uint8_t ciph_data_in1[] = { 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */ 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */ 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */ 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */ 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */ }; static const uint8_t ciph_data_in3[] = { 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */ 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */ 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */ 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */ 0x43, 0x44, 0x45, 0x46, 0x30, /* CDEF0 */ }; static const uint8_t ciph_data_in4[] = { 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */ 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */ 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */ 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */ 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ }; static const uint8_t ciph_data_in5[] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }; static const uint8_t ciph_data_128_iv1[] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */ 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */ }; static const uint8_t ciph_data_128_iv2[] = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, }; static const uint8_t ciph_data_64_iv1[] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */ }; static const uint8_t ciph_data_in2[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; static const uint8_t ciph_data_aes_ecb_nopad_out1[] = { 0xA5, 0xBE, 0x14, 0xD5, 0x01, 0x05, 0x24, 0x48, /* ......$H */ 0x58, 0x1A, 0x6B, 0x82, 0xD4, 0x41, 0xD2, 0xB3, /* X.k..A.. */ 0xBB, 0xF9, 0xAE, 0x37, 0x94, 0xAC, 0x18, 0x50, /* ...7...P */ 0x87, 0x09, 0xCC, 0x3F, 0x43, 0xD2, 0xC2, 0xB7, /* ...?C... */ 0xD7, 0x6F, 0x84, 0x07, 0xB4, 0x78, 0xCE, 0x34, /* .o...x.4 */ 0x48, 0xC9, 0x16, 0x86, 0x42, 0xB8, 0xFF, 0xCF, /* H...B... */ }; static const uint8_t ciph_data_aes_cbc_nopad_out1[] = { 0x8D, 0x9F, 0x88, 0xD8, 0xAF, 0x9F, 0xC1, 0x3B, /* .......; */ 0x02, 0x15, 0x43, 0x6A, 0x8C, 0x1E, 0x34, 0x5C, /* ..Cj..4\ */ 0x83, 0xF4, 0x85, 0x3E, 0x43, 0x0F, 0xE5, 0x5F, /* ...>C.._ */ 0x81, 0x4C, 0xC0, 0x28, 0x3F, 0xD9, 0x98, 0x53, /* .L.(?..S */ 0xB1, 0x44, 0x51, 0x38, 0x21, 0xAB, 0x10, 0xCE, /* .DQ8!... */ 0xC2, 0xEC, 0x65, 0x54, 0xDD, 0x5C, 0xEA, 0xDC, /* ..eT.\.. */ }; static const uint8_t ciph_data_aes_ctr_out1[] = { 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */ 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */ 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */ 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */ 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */ 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */ }; static const uint8_t ciph_data_aes_ctr_out2[] = { 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */ 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */ 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */ 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */ 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */ 0x72, 0x0E, 0x3C, 0xD1, 0xA1, /* r.<.. */ }; static const uint8_t ciph_data_aes_ctr_out4[] = { 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */ 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */ 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */ 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */ 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */ 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */ 0x9F, 0xD7, 0x0C, 0x92, 0xD4, 0xA5, 0x9D, 0x06, /* ........ */ 0x01, 0x80, 0x38, 0xCD, 0xC2, 0x71, 0x5D, 0x4A, /* ..8..q]J */ }; static const uint8_t ciph_data_aes_ctr_out5[] = { 0xbb, 0xfe, 0x07, 0x04, 0x1c, 0x8e, 0x09, 0x61, 0xfb, 0xb1, 0x7c, 0xa5, 0x4d, 0x2b, 0x30, 0xf6, 0x26, 0x9e, 0xff, 0x61, 0x18, 0x47, 0xc6, 0x06, 0x81, 0x02, 0x84, 0xcd, 0x9c, 0x4b, 0x6d, 0x21, 0xe2, 0x64, 0xa6, 0x50, 0x7f, 0x28, 0x81, 0x6f, 0x29, 0xda, 0xd5, 0x56, 0x3f, 0x46, 0xac, 0xca, 0x37, 0xe7, 0x77, 0x36, 0xbc, 0x76, 0x39, 0x57, 0xaa, 0x67, 0x1b, 0x2a, 0xe6, 0x36, 0x57, 0x6d, 0x2a, 0xb8, 0x77, 0x41, 0xc2, 0x4e, 0x4f, 0x27, 0x4c, 0x34, 0x7a, 0x01, 0x6a, 0xda, 0x75, 0x75, 0x3e, 0x68, 0xb2 }; static const uint8_t ciph_data_aes_cbc_vect1_key[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ }; static const uint8_t ciph_data_aes_cbc_vect1_iv[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */ }; static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = { 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */ 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */ 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */ 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */ 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */ 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */ 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */ 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */ 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */ 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */ 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */ 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */ 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */ 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */ 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */ 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */ 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */ 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */ 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */ }; static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = { 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */ 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */ 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */ 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */ 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */ 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */ 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */ 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */ 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */ 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */ 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */ 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */ 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */ 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */ 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */ 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */ 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */ 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */ 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */ 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */ }; /* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */ static const uint8_t ciph_data_aes_cts_vect1_key[] = { 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69 }; static const uint8_t ciph_data_aes_cts_vect1_iv[16] = { 0x00 }; static const uint8_t ciph_data_aes_cts_vect1_ptx[] = { 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20 }; static const uint8_t ciph_data_aes_cts_vect1_ctx[] = { 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4, 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f, 0x97 }; #define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key #define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv static const uint8_t ciph_data_aes_cts_vect2_ptx[] = { 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20 }; static const uint8_t ciph_data_aes_cts_vect2_ctx[] = { 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1, 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22, 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5 }; #define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key #define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv static const uint8_t ciph_data_aes_cts_vect3_ptx[] = { 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43, }; static const uint8_t ciph_data_aes_cts_vect3_ctx[] = { 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5, 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8, 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84, }; #define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key #define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv static const uint8_t ciph_data_aes_cts_vect4_ptx[] = { 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, }; static const uint8_t ciph_data_aes_cts_vect4_ctx[] = { 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84, 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c, 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e, 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5, 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, }; #define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key #define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv static const uint8_t ciph_data_aes_cts_vect5_ptx[] = { 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20, }; static const uint8_t ciph_data_aes_cts_vect5_ctx[] = { 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84, 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0, 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8, 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5, 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8, }; #define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key #define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv static const uint8_t ciph_data_aes_cts_vect6_ptx[] = { 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e, }; static const uint8_t ciph_data_aes_cts_vect6_ctx[] = { 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84, 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5, 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8, 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5, 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40, 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0, 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8, }; /* * Test case for https://github.com/OP-TEE/optee_os/issues/1203 * 80 bytes of data, processed in two steps (32 + 48). */ #define ciph_data_aes_cts_issue1203_key ciph_data_aes_cts_vect1_key static const uint8_t ciph_data_aes_cts_issue1203_iv[] = { 0x5b, 0x11, 0x7b, 0xf9, 0x83, 0x6a, 0x01, 0x27, 0x1d, 0x2a, 0xae, 0x0a, 0xd3, 0x27, 0x35, 0x81, }; static const uint8_t ciph_data_aes_cts_issue1203_ptx[] = { 0x33, 0x2a, 0xf4, 0x8c, 0x18, 0xa1, 0x30, 0x7c, 0xa7, 0x52, 0x76, 0xca, 0xa6, 0x68, 0xad, 0xf6, 0x1e, 0xba, 0xc9, 0x66, 0x66, 0x52, 0x1a, 0xe7, 0x3e, 0xbc, 0xba, 0x60, 0x95, 0x71, 0x04, 0x5e, 0xb4, 0xb7, 0x10, 0xd7, 0x93, 0x6d, 0x5f, 0x9a, 0xb8, 0xbb, 0x6b, 0xb0, 0x6d, 0x47, 0x93, 0x41, 0x29, 0x21, 0xf2, 0x84, 0xf5, 0xb2, 0xf2, 0x6d, 0xbe, 0xe5, 0x8a, 0x2b, 0x58, 0x8d, 0x1b, 0x5e, 0x41, 0x04, 0xba, 0x9e, 0x92, 0xe9, 0x52, 0xb6, 0x8b, 0x1e, 0x36, 0x72, 0x91, 0xe4, 0x56, 0x66, }; /* * Ciphertext was generated by an online tool for AES CBC. * Since the input size is a multiple of the block size, and the ciphertext * format is CS3, the output is the same as plain AES CBC with the last * two blocks swapped. */ static const uint8_t ciph_data_aes_cts_issue1203_ctx[] = { 0x6c, 0xfe, 0xef, 0x6a, 0x1c, 0x8f, 0xd3, 0xc3, 0x66, 0xc4, 0xd9, 0x0e, 0xbe, 0x24, 0x17, 0x3f, 0xcd, 0x19, 0xc9, 0xd2, 0x10, 0x3f, 0xcf, 0xdc, 0xe9, 0x05, 0xab, 0xd5, 0x1a, 0x31, 0x41, 0x77, 0x3b, 0xd7, 0x6a, 0x26, 0xae, 0x0d, 0xc9, 0x47, 0x77, 0xd4, 0xa7, 0xd5, 0x73, 0x88, 0x9e, 0xde, 0x72, 0x66, 0xe0, 0xe2, 0x3d, 0x62, 0x91, 0x22, 0xae, 0x11, 0x01, 0x97, 0x22, 0x6a, 0x45, 0xa9, 0xba, 0x56, 0xd2, 0xbc, 0x55, 0x2d, 0x99, 0x4d, 0x3d, 0x22, 0x27, 0x9a, 0xac, 0x66, 0x2f, 0xf5, }; static const uint8_t ciph_data_des_ecb_nopad_out1[] = { 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */ 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */ 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */ 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */ 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */ 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */ }; static const uint8_t ciph_data_des_ecb_nopad_out2[] = { 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05 }; static const uint8_t ciph_data_des_cbc_nopad_out1[] = { 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */ 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */ 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */ 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */ 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */ 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */ }; static const uint8_t ciph_data_des3_ecb_nopad_out1[] = { 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */ 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */ 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */ 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */ 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */ 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */ }; static const uint8_t ciph_data_des3_cbc_nopad_out1[] = { 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */ 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */ 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */ 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */ 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */ 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */ }; static const uint8_t ciph_data_des2_ecb_nopad_out1[] = { 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */ 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */ 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */ 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */ 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */ 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */ }; static const uint8_t ciph_data_des2_cbc_nopad_out1[] = { 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */ 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */ 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */ 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */ 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */ 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */ }; /* SM4 ECB */ static const uint8_t ciph_data_sm4_key1[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static const uint8_t ciph_data_sm4_in1[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static const uint8_t ciph_data_sm4_ecb_nopad_out1[] = { 0x68, 0x1e, 0xdf, 0x34, 0xd2, 0x06, 0x96, 0x5e, 0x86, 0xb3, 0xe9, 0x4f, 0x53, 0x6e, 0x42, 0x46, }; /* * SM4 CBC * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.2.1 */ static const uint8_t ciph_data_sm4_cbc_a221_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static const uint8_t ciph_data_sm4_cbc_a221_iv[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, }; static const uint8_t ciph_data_sm4_cbc_a221_in[] = { 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, }; static const uint8_t ciph_data_sm4_cbc_a221_out[] = { 0x78, 0xeb, 0xb1, 0x1c, 0xc4, 0x0b, 0x0a, 0x48, 0x31, 0x2a, 0xae, 0xb2, 0x04, 0x02, 0x44, 0xcb, 0x4c, 0xb7, 0x01, 0x69, 0x51, 0x90, 0x92, 0x26, 0x97, 0x9b, 0x0d, 0x15, 0xdc, 0x6a, 0x8f, 0x6d, }; /* * SM4 CBC * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.2.2 */ static const uint8_t ciph_data_sm4_cbc_a222_key[] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, }; static const uint8_t ciph_data_sm4_cbc_a222_iv[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, }; static const uint8_t ciph_data_sm4_cbc_a222_in[] = { 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, }; static const uint8_t ciph_data_sm4_cbc_a222_out[] = { 0x0d, 0x3a, 0x6d, 0xdc, 0x2d, 0x21, 0xc6, 0x98, 0x85, 0x72, 0x15, 0x58, 0x7b, 0x7b, 0xb5, 0x9a, 0x91, 0xf2, 0xc1, 0x47, 0x91, 0x1a, 0x41, 0x44, 0x66, 0x5e, 0x1f, 0xa1, 0xd4, 0x0b, 0xae, 0x38, }; /* * SM4 CTR * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.5.1 */ static const uint8_t ciph_data_sm4_ctr_a251_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static const uint8_t ciph_data_sm4_ctr_a251_iv[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, }; static const uint8_t ciph_data_sm4_ctr_a251_in[] = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, }; static const uint8_t ciph_data_sm4_ctr_a251_out[] = { 0xac, 0x32, 0x36, 0xcb, 0x97, 0x0c, 0xc2, 0x07, 0x91, 0x36, 0x4c, 0x39, 0x5a, 0x13, 0x42, 0xd1, 0xa3, 0xcb, 0xc1, 0x87, 0x8c, 0x6f, 0x30, 0xcd, 0x07, 0x4c, 0xce, 0x38, 0x5c, 0xdd, 0x70, 0xc7, 0xf2, 0x34, 0xbc, 0x0e, 0x24, 0xc1, 0x19, 0x80, 0xfd, 0x12, 0x86, 0x31, 0x0c, 0xe3, 0x7b, 0x92, 0x6e, 0x02, 0xfc, 0xd0, 0xfa, 0xa0, 0xba, 0xf3, 0x8b, 0x29, 0x33, 0x85, 0x1d, 0x82, 0x45, 0x14, }; /* * SM4 CTR * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.5.2 */ static const uint8_t ciph_data_sm4_ctr_a252_key[] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, }; static const uint8_t ciph_data_sm4_ctr_a252_iv[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, }; static const uint8_t ciph_data_sm4_ctr_a252_in[] = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, }; static const uint8_t ciph_data_sm4_ctr_a252_out[] = { 0x5d, 0xcc, 0xcd, 0x25, 0xb9, 0x5a, 0xb0, 0x74, 0x17, 0xa0, 0x85, 0x12, 0xee, 0x16, 0x0e, 0x2f, 0x8f, 0x66, 0x15, 0x21, 0xcb, 0xba, 0xb4, 0x4c, 0xc8, 0x71, 0x38, 0x44, 0x5b, 0xc2, 0x9e, 0x5c, 0x0a, 0xe0, 0x29, 0x72, 0x05, 0xd6, 0x27, 0x04, 0x17, 0x3b, 0x21, 0x23, 0x9b, 0x88, 0x7f, 0x6c, 0x8c, 0xb5, 0xb8, 0x00, 0x91, 0x7a, 0x24, 0x88, 0x28, 0x4b, 0xde, 0x9e, 0x16, 0xea, 0x29, 0x06, }; struct xtest_ciph_case { uint32_t algo; uint32_t mode; uint32_t key_type; const uint8_t *key1; size_t key1_len; const uint8_t *key2; size_t key2_len; const uint8_t *iv; size_t iv_len; size_t in_incr; const uint8_t *in; size_t in_len; const uint8_t *out; size_t out_len; size_t line; }; #define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \ { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \ NULL, 0, NULL, 0, \ (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \ __LINE__ }, \ { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \ NULL, 0, NULL, 0, \ (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ } #define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \ { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \ NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \ (ctx), ARRAY_SIZE(ctx), __LINE__ }, \ { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \ NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \ (ptx), ARRAY_SIZE(ptx), __LINE__ } #define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \ { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \ ciph_data_aes_xts_ ## vect ## _key1, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \ ciph_data_aes_xts_ ## vect ## _key2, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \ ciph_data_aes_xts_ ## vect ## _iv, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \ (in_incr), \ ciph_data_aes_xts_ ## vect ## _ptx, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \ ciph_data_aes_xts_ ## vect ## _ctx, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \ { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \ ciph_data_aes_xts_ ## vect ## _key1, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \ ciph_data_aes_xts_ ## vect ## _key2, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \ ciph_data_aes_xts_ ## vect ## _iv, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \ (in_incr), \ ciph_data_aes_xts_ ## vect ## _ctx, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \ ciph_data_aes_xts_ ## vect ## _ptx, \ ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ } #define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \ XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \ ciph_data_aes_cbc_ ## vect ## _key, \ ciph_data_aes_cbc_ ## vect ## _iv, \ (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \ ciph_data_aes_cbc_ ## vect ## _ctx) #define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \ XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \ ciph_data_aes_cts_ ## vect ## _key, \ ciph_data_aes_cts_ ## vect ## _iv, \ (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \ ciph_data_aes_cts_ ## vect ## _ctx) static const struct xtest_ciph_case ciph_cases[] = { /* AES */ XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES, ciph_data_aes_key1, 11, ciph_data_in1, ciph_data_aes_ecb_nopad_out1), XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, ciph_data_aes_key1, ciph_data_128_iv1, 11, ciph_data_in1, ciph_data_aes_cbc_nopad_out1), XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES, ciph_data_aes_key1, ciph_data_128_iv1, 13, ciph_data_in1, ciph_data_aes_ctr_out1), XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES, ciph_data_aes_key1, ciph_data_128_iv1, 13, ciph_data_in3, ciph_data_aes_ctr_out2), XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES, ciph_data_aes_key1, ciph_data_128_iv1, 16, ciph_data_in3, ciph_data_aes_ctr_out2), XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES, ciph_data_aes_key1, ciph_data_128_iv1, 16, ciph_data_in4, ciph_data_aes_ctr_out4), XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES, ciph_data_aes_key2, ciph_data_128_iv2, 11, ciph_data_in5, ciph_data_aes_ctr_out5), XTEST_CIPH_CASE_AES_CBC(vect1, 11), XTEST_CIPH_CASE_AES_CBC(vect1, 64), /* AES-CTS */ XTEST_CIPH_CASE_AES_CTS(vect1, 13), XTEST_CIPH_CASE_AES_CTS(vect2, 14), XTEST_CIPH_CASE_AES_CTS(vect3, 11), XTEST_CIPH_CASE_AES_CTS(vect4, 9), XTEST_CIPH_CASE_AES_CTS(vect5, 7), XTEST_CIPH_CASE_AES_CTS(vect6, 17), XTEST_CIPH_CASE_AES_CTS(vect6, 0x20), XTEST_CIPH_CASE_AES_CTS(issue1203, 32), /* DES */ XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES, ciph_data_des_key1, 14, ciph_data_in1, ciph_data_des_ecb_nopad_out1), XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES, ciph_data_des_key2, 3, ciph_data_in2, ciph_data_des_ecb_nopad_out2), XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES, ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1, ciph_data_des_cbc_nopad_out1), /* DES3 */ XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3, ciph_data_des3_key1, 11, ciph_data_in1, ciph_data_des3_ecb_nopad_out1), XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3, ciph_data_des3_key2, 3, ciph_data_in2, ciph_data_des_ecb_nopad_out2), XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3, ciph_data_des3_key1, ciph_data_64_iv1, 11, ciph_data_in1, ciph_data_des3_cbc_nopad_out1), /* DES2 */ XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3, ciph_data_des2_key1, 11, ciph_data_in1, ciph_data_des2_ecb_nopad_out1), XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3, ciph_data_des2_key1, ciph_data_64_iv1, 11, ciph_data_in1, ciph_data_des2_cbc_nopad_out1), /* AES-XTS */ XTEST_CIPH_CASE_AES_XTS(vect1, 3), XTEST_CIPH_CASE_AES_XTS(vect2, 6), XTEST_CIPH_CASE_AES_XTS(vect3, 7), XTEST_CIPH_CASE_AES_XTS(vect4, 8), XTEST_CIPH_CASE_AES_XTS(vect5, 9), XTEST_CIPH_CASE_AES_XTS(vect6, 13), XTEST_CIPH_CASE_AES_XTS(vect7, 1), XTEST_CIPH_CASE_AES_XTS(vect8, 3), XTEST_CIPH_CASE_AES_XTS(vect9, 2), XTEST_CIPH_CASE_AES_XTS(vect10, 5), XTEST_CIPH_CASE_AES_XTS(vect11, 6), XTEST_CIPH_CASE_AES_XTS(vect12, 7), XTEST_CIPH_CASE_AES_XTS(vect13, 3), XTEST_CIPH_CASE_AES_XTS(vect14, 2), XTEST_CIPH_CASE_AES_XTS(vect15, 0), XTEST_CIPH_CASE_AES_XTS(vect16, 9), XTEST_CIPH_CASE_AES_XTS(vect17, 6), XTEST_CIPH_CASE_AES_XTS(vect18, 8), XTEST_CIPH_CASE_AES_XTS(vect19, 23), /* SM4 */ XTEST_CIPH_CASE_NO_IV(TEE_ALG_SM4_ECB_NOPAD, TEE_TYPE_SM4, ciph_data_sm4_key1, 11, ciph_data_sm4_in1, ciph_data_sm4_ecb_nopad_out1), XTEST_CIPH_CASE(TEE_ALG_SM4_CBC_NOPAD, TEE_TYPE_SM4, ciph_data_sm4_cbc_a221_key, ciph_data_sm4_cbc_a221_iv, 11, ciph_data_sm4_cbc_a221_in, ciph_data_sm4_cbc_a221_out), XTEST_CIPH_CASE(TEE_ALG_SM4_CBC_NOPAD, TEE_TYPE_SM4, ciph_data_sm4_cbc_a222_key, ciph_data_sm4_cbc_a222_iv, 11, ciph_data_sm4_cbc_a222_in, ciph_data_sm4_cbc_a222_out), XTEST_CIPH_CASE(TEE_ALG_SM4_CTR, TEE_TYPE_SM4, ciph_data_sm4_ctr_a251_key, ciph_data_sm4_ctr_a251_iv, 11, ciph_data_sm4_ctr_a251_in, ciph_data_sm4_ctr_a251_out), XTEST_CIPH_CASE(TEE_ALG_SM4_CTR, TEE_TYPE_SM4, ciph_data_sm4_ctr_a252_key, ciph_data_sm4_ctr_a252_iv, 11, ciph_data_sm4_ctr_a252_in, ciph_data_sm4_ctr_a252_out), }; static void xtest_tee_test_4003(ADBG_Case_t *c) { TEEC_Session session = { }; TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_OperationHandle op2 = TEE_HANDLE_NULL; TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL; TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL; uint8_t out[2048] = { }; size_t out_size = 0; size_t out_offs = 0; size_t out_offs2 = 0; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) { TEE_Attribute key_attr = { }; size_t key_size = 0; size_t op_key_size = 0; switch (ciph_cases[n].algo) { case TEE_ALG_SM4_CTR: case TEE_ALG_SM4_CBC_NOPAD: case TEE_ALG_SM4_ECB_NOPAD: if (!ta_crypt_cmd_is_algo_supported(c, &session, ciph_cases[n].algo, TEE_CRYPTO_ELEMENT_NONE)) { Do_ADBG_Log("SM4 not supported: skip subcase"); continue; } break; default: break; } Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d", (int)n, (unsigned int)ciph_cases[n].algo, (int)ciph_cases[n].line); key_attr.attributeID = TEE_ATTR_SECRET_VALUE; key_attr.content.ref.buffer = (void *)ciph_cases[n].key1; key_attr.content.ref.length = ciph_cases[n].key1_len; key_size = key_attr.content.ref.length * 8; if (ciph_cases[n].key_type == TEE_TYPE_DES || ciph_cases[n].key_type == TEE_TYPE_DES3) /* Exclude parity in bit size of key */ key_size -= key_size / 8; op_key_size = key_size; if (ciph_cases[n].key2 != NULL) op_key_size *= 2; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, ciph_cases[n].algo, ciph_cases[n].mode, op_key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op2, ciph_cases[n].algo, ciph_cases[n].mode, op_key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, ciph_cases[n].key_type, key_size, &key1_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, key1_handle, &key_attr, 1))) goto out; if (ciph_cases[n].key2 != NULL) { key_attr.content.ref.buffer = (void *)ciph_cases[n].key2; key_attr.content.ref.length = ciph_cases[n].key2_len; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, ciph_cases[n].key_type, key_attr.content.ref.length * 8, &key2_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, key2_handle, &key_attr, 1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key2(c, &session, op, key1_handle, key2_handle))) goto out; } else { if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, key1_handle))) goto out; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, key1_handle))) goto out; key1_handle = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, key2_handle))) goto out; key2_handle = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_cipher_init(c, &session, op, ciph_cases[n].iv, ciph_cases[n].iv_len))) goto out; out_offs = 0; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_cipher_update(c, &session, op, ciph_cases[n].in, ciph_cases[n].in_incr, out, &out_size))) goto out; if (ciph_cases[n].algo == TEE_ALG_AES_CTR) ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, ciph_cases[n].in_incr); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_copy_operation(c, &session, op2, op))) goto out; out_offs += out_size; out_size = sizeof(out) - out_offs; out_offs2 = out_offs; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_cipher_do_final(c, &session, op, ciph_cases[n].in + ciph_cases[n].in_incr, ciph_cases[n].in_len - ciph_cases[n].in_incr, out + out_offs, &out_size))) goto out; out_offs += out_size; (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out, ciph_cases[n].out_len, out, out_offs); /* test on the copied op2 */ out_size = sizeof(out) - out_offs2; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_cipher_do_final(c, &session, op2, ciph_cases[n].in + ciph_cases[n].in_incr, ciph_cases[n].in_len - ciph_cases[n].in_incr, out + out_offs2, &out_size))) goto out; out_offs2 += out_size; ADBG_EXPECT_BUFFER(c, ciph_cases[n].out, ciph_cases[n].out_len, out, out_offs2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op2))) goto out; Do_ADBG_EndSubCase(c, NULL); } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4003, xtest_tee_test_4003, "Test TEE Internal API cipher operations"); static void xtest_tee_test_4004(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; uint8_t buf1[45] = { }; uint8_t buf2[45] = { }; static const uint8_t zeros[45]; Do_ADBG_BeginSubCase(c, "TEE get random"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c, &session, buf1, sizeof(buf1)))) goto out; (void)ADBG_EXPECT_COMPARE_SIGNED(c, 0, !=, memcmp(buf1, zeros, sizeof(buf1))); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c, &session, buf2, sizeof(buf2)))) goto out; (void)ADBG_EXPECT_COMPARE_SIGNED(c, 0, !=, memcmp(buf2, zeros, sizeof(buf2))); (void)ADBG_EXPECT_COMPARE_SIGNED(c, 0, !=, memcmp(buf2, buf1, sizeof(buf1))); out: TEEC_CloseSession(&session); Do_ADBG_EndSubCase(c, "TEE get random"); } ADBG_CASE_DEFINE(regression, 4004, xtest_tee_test_4004, "Test TEE Internal API get random"); struct xtest_ae_case { uint32_t algo; uint32_t mode; uint32_t key_type; const uint8_t *key; size_t key_len; const uint8_t *nonce; size_t nonce_len; size_t aad_incr; const uint8_t *aad; size_t aad_len; size_t in_incr; const uint8_t *ptx; size_t ptx_len; const uint8_t *ctx; size_t ctx_len; const uint8_t *tag; size_t tag_len; size_t line; uint32_t id; }; #define ARRAY(a) a, ARRAY_SIZE(a) #define NULL_ARRAY(a) NULL, 0 #define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \ aad_array, ptx_array, ctx_array) \ { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \ ARRAY(vect ## _nonce), (aad_incr), \ aad_array(vect ## _aad), (in_incr), \ ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \ ARRAY(vect ## _tag), \ __LINE__, 0 }, \ { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \ ARRAY(vect ## _nonce), (aad_incr), \ aad_array(vect ## _aad), (in_incr), \ ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \ ARRAY(vect ## _tag), \ __LINE__, 0 } #define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \ XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \ in_incr, ARRAY, ARRAY, ARRAY) #define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \ aad_array, ptx_array, ctx_array) \ XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \ in_incr, aad_array, ptx_array, ctx_array) static const struct xtest_ae_case ae_cases[] = { XTEST_AE_CASE_AES_CCM(vect1, 3, 2), XTEST_AE_CASE_AES_CCM(vect2, 7, 13), XTEST_AE_CASE_AES_CCM(vect3, 5, 21), XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY), XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY), XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY), XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY), XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY), #ifdef CFG_GCM_NIST_VECTORS #include "gcmDecrypt128.h" #include "gcmDecrypt192.h" #include "gcmDecrypt256.h" #include "gcmEncryptExtIV128.h" #include "gcmEncryptExtIV192.h" #include "gcmEncryptExtIV256.h" #endif #include "aes_gcm_counter_overflow_test_encrypt.h" #include "aes_gcm_counter_overflow_test_decrypt.h" }; static void xtest_tee_test_4005(ADBG_Case_t *c) { TEEC_Session session = { }; TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_OperationHandle op2 = TEE_HANDLE_NULL; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; TEE_Attribute key_attr = { }; uint8_t out[512] = { }; size_t out_size = 0; size_t out_offs = 0; size_t out_offs2 = 0; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(ae_cases); n++) { if (ae_cases[n].id) Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d id %d", (int)n, (unsigned int)ae_cases[n].algo, (int)ae_cases[n].line, (unsigned int)ae_cases[n].id); else Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d", (int)n, (unsigned int)ae_cases[n].algo, (int)ae_cases[n].line); key_attr.attributeID = TEE_ATTR_SECRET_VALUE; key_attr.content.ref.buffer = (void *)ae_cases[n].key; key_attr.content.ref.length = ae_cases[n].key_len; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, ae_cases[n].algo, ae_cases[n].mode, key_attr.content.ref.length * 8))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op2, ae_cases[n].algo, ae_cases[n].mode, key_attr.content.ref.length * 8))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, ae_cases[n].key_type, key_attr.content.ref.length * 8, &key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, key_handle, &key_attr, 1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, key_handle))) goto out; key_handle = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce, ae_cases[n].nonce_len, ae_cases[n].tag_len, ae_cases[n].aad_len, ae_cases[n].ptx_len))) goto out; if (ae_cases[n].aad != NULL) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_update_aad(c, &session, op, ae_cases[n].aad, ae_cases[n].aad_incr))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_update_aad(c, &session, op, ae_cases[n].aad + ae_cases[n].aad_incr, ae_cases [n].aad_len - ae_cases[n].aad_incr))) goto out; } out_offs = 0; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (ae_cases[n].mode == TEE_MODE_ENCRYPT) { if (ae_cases[n].ptx != NULL) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_update(c, &session, op, ae_cases[n].ptx, ae_cases[n].in_incr, out, &out_size))) goto out; out_offs += out_size; if (ae_cases[n].algo == TEE_ALG_AES_GCM) ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, ae_cases[n].in_incr); } } else { if (ae_cases[n].ctx != NULL) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_update(c, &session, op, ae_cases[n].ctx, ae_cases[n].in_incr, out, &out_size))) goto out; out_offs += out_size; if (ae_cases[n].algo == TEE_ALG_AES_GCM) ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==, ae_cases[n].in_incr); } } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_copy_operation(c, &session, op2, op))) goto out; out_size = sizeof(out) - out_offs; out_offs2 = out_offs; if (ae_cases[n].mode == TEE_MODE_ENCRYPT) { uint8_t out_tag[64]; size_t out_tag_len = MIN(sizeof(out_tag), ae_cases[n].tag_len); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_encrypt_final(c, &session, op, ae_cases[n].ptx + ae_cases[n].in_incr, ae_cases[n].ptx_len - ae_cases[n].in_incr, out + out_offs, &out_size, out_tag, &out_tag_len))) goto out; (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].tag, ae_cases[n].tag_len, out_tag, out_tag_len); out_offs += out_size; (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx, ae_cases[n].ctx_len, out, out_offs); } else { if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_decrypt_final(c, &session, op, ae_cases[n].ctx + ae_cases[n].in_incr, ae_cases[n].ctx_len - ae_cases[n].in_incr, out + out_offs, &out_size, ae_cases[n].tag, ae_cases[n].tag_len))) goto out; out_offs += out_size; (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx, ae_cases[n].ptx_len, out, out_offs); } /* test on the copied op2 */ out_size = sizeof(out) - out_offs2; memset(out + out_offs2, 0, out_size); if (ae_cases[n].mode == TEE_MODE_ENCRYPT) { uint8_t out_tag[64] = { 0 }; size_t out_tag_len = MIN(sizeof(out_tag), ae_cases[n].tag_len); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_encrypt_final(c, &session, op2, ae_cases[n].ptx + ae_cases[n].in_incr, ae_cases[n].ptx_len - ae_cases[n].in_incr, out + out_offs2, &out_size, out_tag, &out_tag_len))) goto out; ADBG_EXPECT_BUFFER(c, ae_cases[n].tag, ae_cases[n].tag_len, out_tag, out_tag_len); out_offs2 += out_size; (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx, ae_cases[n].ctx_len, out, out_offs2); } else { if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_ae_decrypt_final(c, &session, op2, ae_cases[n].ctx + ae_cases[n].in_incr, ae_cases[n].ctx_len - ae_cases[n].in_incr, out + out_offs2, &out_size, ae_cases[n].tag, ae_cases[n].tag_len))) goto out; out_offs2 += out_size; (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx, ae_cases[n].ptx_len, out, out_offs2); } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op2))) goto out; Do_ADBG_EndSubCase(c, NULL); } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4005, xtest_tee_test_4005, "Test TEE Internal API Authenticated Encryption operations"); struct xtest_ac_case { unsigned int level; uint32_t algo; TEE_OperationMode mode; union { struct { const uint8_t *modulus; size_t modulus_len; const uint8_t *pub_exp; size_t pub_exp_len; const uint8_t *priv_exp; size_t priv_exp_len; const uint8_t *prime1; /* q */ size_t prime1_len; const uint8_t *prime2; /* p */ size_t prime2_len; const uint8_t *exp1; /* dp */ size_t exp1_len; const uint8_t *exp2; /* dq */ size_t exp2_len; const uint8_t *coeff; /* iq */ size_t coeff_len; int salt_len; } rsa; struct { const uint8_t *prime; size_t prime_len; const uint8_t *sub_prime; size_t sub_prime_len; const uint8_t *base; size_t base_len; const uint8_t *pub_val; size_t pub_val_len; const uint8_t *priv_val; size_t priv_val_len; } dsa; struct { const uint8_t *private; size_t private_len; const uint8_t *public_x; size_t public_x_len; const uint8_t *public_y; size_t public_y_len; } ecc; struct { const uint8_t *private; size_t private_len; const uint8_t *public; size_t public_len; const uint8_t flag; const uint8_t *context; size_t context_len; } eddsa; } params; const uint8_t *ptx; size_t ptx_len; const uint8_t *ctx; size_t ctx_len; size_t line; }; #define WITHOUT_SALT(x) -1 #define WITH_SALT(x) x #define XTEST_AC_CASE(level, algo, mode, vect, union_params) \ { level, (algo), (mode), .params = union_params, \ ARRAY(vect ## _ptx), \ ARRAY(vect ## _out), \ __LINE__ } #define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \ { .rsa = { \ ARRAY(vect ## _modulus), \ ARRAY(vect ## _pub_exp), \ ARRAY(vect ## _priv_exp), \ opt_crt_array(vect ## _prime1), \ opt_crt_array(vect ## _prime2), \ opt_crt_array(vect ## _exp1), \ opt_crt_array(vect ## _exp2), \ opt_crt_array(vect ## _coeff), \ opt_salt(vect ## _salt_len) \ } } #define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \ XTEST_AC_CASE(level, algo, mode, vect, \ XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt)) #define XTEST_AC_DSA_UNION(vect) \ { .dsa = { \ ARRAY(vect ## _prime), \ ARRAY(vect ## _sub_prime), \ ARRAY(vect ## _base), \ ARRAY(vect ## _pub_val), \ ARRAY(vect ## _priv_val), \ } } #define XTEST_AC_DSA_CASE(level, algo, mode, vect) \ XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect)) #define XTEST_AC_ECDSA_UNION(vect) \ { .ecc = { \ ARRAY(vect ## _private), \ ARRAY(vect ## _public_x), \ ARRAY(vect ## _public_y), \ } } #define XTEST_AC_ECC_CASE(level, algo, mode, vect) \ XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect)) #define XTEST_AC_EDDSA_UNION(vect, flag) \ { .eddsa = { \ ARRAY(vect ## _private), \ ARRAY(vect ## _public), \ flag, \ } } #define XTEST_AC_EDDSA_CTX_UNION(vect, flag) \ { .eddsa = { \ ARRAY(vect ## _private), \ ARRAY(vect ## _public), \ flag, \ ARRAY(vect ## _context), \ } } #define XTEST_AC_EDDSA_CASE(level, algo, mode, vect, flag) \ XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_EDDSA_UNION(vect, flag)) #define XTEST_AC_EDDSA_CTX_CASE(level, algo, mode, vect, flag) \ XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_EDDSA_CTX_UNION(vect, flag)) static const struct xtest_ac_case xtest_ac_cases[] = { /* RSA test without crt parameters */ XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN, ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY, ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT), #ifdef CFG_CRYPTO_RSASSA_NA1 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5, TEE_MODE_SIGN, ac_rsassa_vect20, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5, TEE_MODE_VERIFY, ac_rsassa_vect20, NULL_ARRAY, WITHOUT_SALT), #endif XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN, ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY, ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN, ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY, ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN, ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY, ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect12, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN, ac_rsassa_vect12, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224, TEE_MODE_VERIFY, ac_rsassa_vect17, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224, TEE_MODE_SIGN, ac_rsassa_vect17, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256, TEE_MODE_VERIFY, ac_rsassa_vect13, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256, TEE_MODE_SIGN, ac_rsassa_vect13, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384, TEE_MODE_VERIFY, ac_rsassa_vect14, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384, TEE_MODE_SIGN, ac_rsassa_vect14, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512, TEE_MODE_VERIFY, ac_rsassa_vect15, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512, TEE_MODE_SIGN, ac_rsassa_vect15, NULL_ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT, ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT, ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT, ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT, ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT, ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT, ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_DECRYPT, ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_ENCRYPT, ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_DECRYPT, ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_ENCRYPT, ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_DECRYPT, ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_ENCRYPT, ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256, TEE_MODE_DECRYPT, ac_rsaes_oaep_vect3, NULL_ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256, TEE_MODE_ENCRYPT, ac_rsaes_oaep_vect3, NULL_ARRAY, WITHOUT_SALT), /* RSA test with crt parameters */ XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, ac_rsassa_vect1, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, ac_rsassa_vect1, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, ac_rsassa_vect2, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, ac_rsassa_vect2, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect3, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect3, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect4, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect4, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect5, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect5, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect6, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect6, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect7, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect7, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, ac_rsassa_vect8, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect8, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN, ac_rsassa_vect9, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY, ac_rsassa_vect9, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN, ac_rsassa_vect10, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY, ac_rsassa_vect10, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN, ac_rsassa_vect11, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY, ac_rsassa_vect11, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_VERIFY, ac_rsassa_vect12, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN, ac_rsassa_vect12, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224, TEE_MODE_VERIFY, ac_rsassa_vect17, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224, TEE_MODE_SIGN, ac_rsassa_vect17, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256, TEE_MODE_VERIFY, ac_rsassa_vect13, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256, TEE_MODE_SIGN, ac_rsassa_vect13, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384, TEE_MODE_VERIFY, ac_rsassa_vect14, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384, TEE_MODE_SIGN, ac_rsassa_vect14, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512, TEE_MODE_VERIFY, ac_rsassa_vect15, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512, TEE_MODE_SIGN, ac_rsassa_vect15, ARRAY, WITH_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT, ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT, ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT, ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT, ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT, ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT, ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_DECRYPT, ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_ENCRYPT, ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_DECRYPT, ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_ENCRYPT, ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_DECRYPT, ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1, TEE_MODE_ENCRYPT, ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256, TEE_MODE_DECRYPT, ac_rsaes_oaep_vect3, ARRAY, WITHOUT_SALT), XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256, TEE_MODE_ENCRYPT, ac_rsaes_oaep_vect3, ARRAY, WITHOUT_SALT), /* DSA tests */ /* [mod = L=1024, N=160, SHA-1] */ XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1), XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15), /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */ /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */ /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */ /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */ /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */ /* [mod = L=2048, N=224, SHA-224] */ XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91), XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105), /* [mod = L=2048, N=224, SHA-256] */ XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106), XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120), /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */ /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */ /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */ /* [mod = L=2048, N=256, SHA-224] */ XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166), XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180), /* [mod = L=2048, N=256, SHA-256] */ XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181), XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195), /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */ /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */ /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */ /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */ /* [mod = L=3072, N=256, SHA-256] */ XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256), XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270), XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270), /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */ /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */ /* ECDSA tests */ /* [P-192] */ XTEST_AC_ECC_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_1), XTEST_AC_ECC_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_1), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_2), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_2), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_3), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_3), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_4), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_4), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_5), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_5), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_6), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_6), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_7), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_7), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_8), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_8), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_9), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_9), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_10), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_10), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_11), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_11), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_12), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_12), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_13), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_13), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_14), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_14), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_15), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_15), /* [P-224] */ XTEST_AC_ECC_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_16), XTEST_AC_ECC_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_16), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_17), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_17), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_18), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_18), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_19), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_19), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_20), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_20), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_21), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_21), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_22), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_22), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_23), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_23), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_24), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_24), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_25), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_25), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_26), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_26), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_27), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_27), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_28), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_28), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_29), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_29), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_30), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_30), /* [P-256] */ XTEST_AC_ECC_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_31), XTEST_AC_ECC_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_31), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_32), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_32), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_33), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_33), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_34), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_34), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_35), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_35), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_36), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_36), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_37), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_37), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_38), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_38), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_39), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_39), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_40), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_40), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_41), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_41), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_42), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_42), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_43), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_43), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_44), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_44), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_45), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_45), /* [P-384] */ XTEST_AC_ECC_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_46), XTEST_AC_ECC_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_46), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_47), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_47), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_48), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_48), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_49), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_49), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_50), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_50), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_51), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_51), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_52), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_52), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_53), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_53), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_54), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_54), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_55), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_55), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_56), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_56), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_57), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_57), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_58), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_58), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_59), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_59), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_60), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_60), /* [P-521] */ XTEST_AC_ECC_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_61), XTEST_AC_ECC_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_61), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_62), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_62), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_63), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_63), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_64), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_64), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_65), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_65), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_66), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_66), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_67), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_67), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_68), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_68), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_69), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_69), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_70), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_70), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_71), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_71), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_72), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_72), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_73), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_73), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_74), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_74), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY, nist_186_2_ecdsa_testvector_75), XTEST_AC_ECC_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN, nist_186_2_ecdsa_testvector_75), /* [K-163] - GP NOT SUPPORTED */ /* [K-233] - GP NOT SUPPORTED */ /* [K-283] - GP NOT SUPPORTED */ /* [K-409] - GP NOT SUPPORTED */ /* [K-571] - GP NOT SUPPORTED */ /* [B-163] - GP NOT SUPPORTED */ /* [B-233] - GP NOT SUPPORTED */ /* [B-283] - GP NOT SUPPORTED */ /* [B-409] - GP NOT SUPPORTED */ /* [B-571] - GP NOT SUPPORTED */ XTEST_AC_ECC_CASE(0, TEE_ALG_SM2_PKE, TEE_MODE_ENCRYPT, gmt_0003_part5_c2_sm2_testvector), XTEST_AC_ECC_CASE(0, TEE_ALG_SM2_PKE, TEE_MODE_DECRYPT, gmt_0003_part5_c2_sm2_testvector), XTEST_AC_ECC_CASE(0, TEE_ALG_SM2_PKE, TEE_MODE_ENCRYPT, sm2_testvector2), XTEST_AC_ECC_CASE(0, TEE_ALG_SM2_DSA_SM3, TEE_MODE_VERIFY, gmt_003_part5_a2), XTEST_AC_ECC_CASE(0, TEE_ALG_SM2_DSA_SM3, TEE_MODE_SIGN, gmt_003_part5_a2), }; static const struct xtest_ac_case xtest_ac_eddsa_cases[] = { XTEST_AC_EDDSA_CASE(0, TEE_ALG_ED25519, TEE_MODE_SIGN, ed25519_rfc_8032_7_1, 0), XTEST_AC_EDDSA_CASE(0, TEE_ALG_ED25519, TEE_MODE_VERIFY, ed25519_rfc_8032_7_1, 0), XTEST_AC_EDDSA_CTX_CASE(0, TEE_ALG_ED25519, TEE_MODE_SIGN, ed25519ctx_rfc_8032_7_2, 0), XTEST_AC_EDDSA_CTX_CASE(0, TEE_ALG_ED25519, TEE_MODE_VERIFY, ed25519ctx_rfc_8032_7_2, 0), XTEST_AC_EDDSA_CASE(0, TEE_ALG_ED25519, TEE_MODE_SIGN, ed25519ph_rfc_8032_7_3, 1), XTEST_AC_EDDSA_CASE(0, TEE_ALG_ED25519, TEE_MODE_VERIFY, ed25519ph_rfc_8032_7_3, 1), }; static bool create_key(ADBG_Case_t *c, TEEC_Session *s, uint32_t max_key_size, uint32_t key_type, TEE_Attribute *attrs, size_t num_attrs, TEE_ObjectHandle *handle) { size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, s, key_type, max_key_size, handle))) return false; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs, num_attrs))) return false; for (n = 0; n < num_attrs; n++) { uint8_t out[512] = { }; size_t out_size = sizeof(out); if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE) continue; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle, attrs[n].attributeID, out, &out_size))) return false; if (out_size < attrs[n].content.ref.length) { memmove(out + (attrs[n].content.ref.length - out_size), out, attrs[n].content.ref.length); memset(out, 0, attrs[n].content.ref.length - out_size); out_size = attrs[n].content.ref.length; } if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer, attrs[n].content.ref.length, out, out_size)) return false; } return true; } #define XTEST_NO_CURVE 0xFFFFFFFF /* implementation-defined as per GP spec */ static void xtest_tee_test_4006(ADBG_Case_t *c) { TEEC_Session session = { }; TEEC_Result res = TEEC_ERROR_NOT_SUPPORTED; TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL; TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL; TEE_Attribute key_attrs[8] = { }; TEE_Attribute algo_params[2] = { }; size_t num_algo_params = 0; uint8_t out[512] = { }; size_t out_size = 0; uint8_t out_enc[512] = { }; size_t out_enc_size = 0; uint8_t ptx_hash[TEE_MAX_HASH_SIZE] = { }; size_t ptx_hash_size = 0; size_t max_key_size = 0; size_t num_key_attrs = 0; uint32_t ret_orig = 0; size_t n = 0; uint32_t curve = 0; uint32_t pub_key_type = 0; uint32_t priv_key_type = 0; uint32_t hash_algo = 0; uint32_t sha1_algo_id = TEE_ALG_SHA1; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) { const struct xtest_ac_case *tv = xtest_ac_cases + n; if (tv->level > level) continue; if ((tv->algo == TEE_ALG_SM2_PKE || tv->algo == TEE_ALG_SM2_DSA_SM3) && !ta_crypt_cmd_is_algo_supported(c, &session, tv->algo, TEE_ECC_CURVE_SM2)) { Do_ADBG_Log("SM2 not supported: skip subcase"); continue; } Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d", (int)n, (unsigned int)tv->algo, (int)tv->line); /* * When signing or verifying we're working with the hash of * the payload. */ if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) { if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA) hash_algo = TEE_ALG_SHA1; #if defined(CFG_CRYPTO_RSASSA_NA1) else if (tv->algo == TEE_ALG_RSASSA_PKCS1_V1_5) hash_algo = TEE_ALG_SHA256; #endif else hash_algo = TEE_ALG_HASH_ALGO( TEE_ALG_GET_DIGEST_HASH(tv->algo)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, hash_algo, TEE_MODE_DIGEST, 0))) goto out; ptx_hash_size = sizeof(ptx_hash); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_digest_do_final(c, & session, op, tv->ptx, tv->ptx_len, ptx_hash, &ptx_hash_size))) goto out; /* * When we use DSA algorithms, the size of the hash we * consider equals the min between the size of the * "subprime" in the key and the size of the hash */ if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_DSA) { if (tv->params.dsa.sub_prime_len <= ptx_hash_size) ptx_hash_size = tv->params.dsa.sub_prime_len; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; } num_algo_params = 0; num_key_attrs = 0; switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) { case TEE_MAIN_ALGO_RSA: if (tv->params.rsa.salt_len > 0) { algo_params[0].attributeID = TEE_ATTR_RSA_PSS_SALT_LENGTH; algo_params[0].content.value.a = tv->params.rsa.salt_len; algo_params[0].content.value.b = 0; num_algo_params = 1; } max_key_size = tv->params.rsa.modulus_len * 8; xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_RSA_MODULUS, tv->params.rsa.modulus, tv->params.rsa.modulus_len); xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_RSA_PUBLIC_EXPONENT, tv->params.rsa.pub_exp, tv->params.rsa.pub_exp_len); if (!ADBG_EXPECT_TRUE(c, create_key(c, &session, max_key_size, TEE_TYPE_RSA_PUBLIC_KEY, key_attrs, num_key_attrs, &pub_key_handle))) goto out; xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_RSA_PRIVATE_EXPONENT, tv->params.rsa.priv_exp, tv->params.rsa.priv_exp_len); if (tv->params.rsa.prime1_len != 0) { xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_RSA_PRIME1, tv->params.rsa.prime1, tv->params.rsa.prime1_len); } if (tv->params.rsa.prime2_len != 0) { xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_RSA_PRIME2, tv->params.rsa.prime2, tv->params.rsa.prime2_len); } if (tv->params.rsa.exp1_len != 0) { xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_RSA_EXPONENT1, tv->params.rsa.exp1, tv->params.rsa.exp1_len); } if (tv->params.rsa.exp2_len != 0) { xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_RSA_EXPONENT2, tv->params.rsa.exp2, tv->params.rsa.exp2_len); } if (tv->params.rsa.coeff_len != 0) { xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_RSA_COEFFICIENT, tv->params.rsa.coeff, tv->params.rsa.coeff_len); } if (!ADBG_EXPECT_TRUE(c, create_key(c, &session, max_key_size, TEE_TYPE_RSA_KEYPAIR, key_attrs, num_key_attrs, &priv_key_handle))) goto out; break; case TEE_MAIN_ALGO_DSA: max_key_size = tv->params.dsa.prime_len * 8; xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_DSA_PRIME, tv->params.dsa.prime, tv->params.dsa.prime_len); xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_DSA_SUBPRIME, tv->params.dsa.sub_prime, tv->params.dsa.sub_prime_len); xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_DSA_BASE, tv->params.dsa.base, tv->params.dsa.base_len); xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_DSA_PUBLIC_VALUE, tv->params.dsa.pub_val, tv->params.dsa.pub_val_len); if (!ADBG_EXPECT_TRUE(c, create_key(c, &session, max_key_size, TEE_TYPE_DSA_PUBLIC_KEY, key_attrs, num_key_attrs, &pub_key_handle))) goto out; xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_DSA_PRIVATE_VALUE, tv->params.dsa.priv_val, tv->params.dsa.priv_val_len); if (!ADBG_EXPECT_TRUE(c, create_key(c, &session, max_key_size, TEE_TYPE_DSA_KEYPAIR, key_attrs, num_key_attrs, &priv_key_handle))) goto out; break; case TEE_MAIN_ALGO_ECDSA: case TEE_MAIN_ALGO_SM2_PKE: case TEE_MAIN_ALGO_SM2_DSA_SM3: switch (tv->algo) { case TEE_ALG_ECDSA_P192: curve = TEE_ECC_CURVE_NIST_P192; pub_key_type = TEE_TYPE_ECDSA_PUBLIC_KEY; priv_key_type = TEE_TYPE_ECDSA_KEYPAIR; break; case TEE_ALG_ECDSA_P224: curve = TEE_ECC_CURVE_NIST_P224; pub_key_type = TEE_TYPE_ECDSA_PUBLIC_KEY; priv_key_type = TEE_TYPE_ECDSA_KEYPAIR; break; case TEE_ALG_ECDSA_P256: curve = TEE_ECC_CURVE_NIST_P256; pub_key_type = TEE_TYPE_ECDSA_PUBLIC_KEY; priv_key_type = TEE_TYPE_ECDSA_KEYPAIR; break; case TEE_ALG_ECDSA_P384: curve = TEE_ECC_CURVE_NIST_P384; pub_key_type = TEE_TYPE_ECDSA_PUBLIC_KEY; priv_key_type = TEE_TYPE_ECDSA_KEYPAIR; break; case TEE_ALG_ECDSA_P521: curve = TEE_ECC_CURVE_NIST_P521; pub_key_type = TEE_TYPE_ECDSA_PUBLIC_KEY; priv_key_type = TEE_TYPE_ECDSA_KEYPAIR; break; case TEE_ALG_SM2_PKE: curve = XTEST_NO_CURVE; pub_key_type = TEE_TYPE_SM2_PKE_PUBLIC_KEY; priv_key_type = TEE_TYPE_SM2_PKE_KEYPAIR; break; case TEE_ALG_SM2_DSA_SM3: curve = XTEST_NO_CURVE; pub_key_type = TEE_TYPE_SM2_DSA_PUBLIC_KEY; priv_key_type = TEE_TYPE_SM2_DSA_KEYPAIR; break; default: curve = 0xFF; break; } if (tv->algo == TEE_ALG_ECDSA_P521) max_key_size = 521; else max_key_size = tv->params.ecc.private_len * 8; if (curve != XTEST_NO_CURVE) xtest_add_attr_value(&num_key_attrs, key_attrs, TEE_ATTR_ECC_CURVE, curve, 0); xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_ECC_PUBLIC_VALUE_X, tv->params.ecc.public_x, tv->params.ecc.public_x_len); xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_ECC_PUBLIC_VALUE_Y, tv->params.ecc.public_y, tv->params.ecc.public_y_len); if (!ADBG_EXPECT_TRUE(c, create_key(c, &session, max_key_size, pub_key_type, key_attrs, num_key_attrs, &pub_key_handle))) goto out; xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_ECC_PRIVATE_VALUE, tv->params.ecc.private, tv->params.ecc.private_len); if (!ADBG_EXPECT_TRUE(c, create_key(c, &session, max_key_size, priv_key_type, key_attrs, num_key_attrs, &priv_key_handle))) goto out; break; default: ADBG_EXPECT_TRUE(c, false); goto out; } out_size = sizeof(out); memset(out, 0, sizeof(out)); switch (tv->mode) { case TEE_MODE_ENCRYPT: if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, tv->algo, TEE_MODE_ENCRYPT, max_key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, pub_key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, pub_key_handle))) goto out; pub_key_handle = TEE_HANDLE_NULL; num_algo_params = 0; if (tv->algo == TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1 || tv->algo == TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256) { algo_params[0].attributeID = TEE_ATTR_RSA_OAEP_MGF_HASH; algo_params[0].content.ref.length = sizeof(sha1_algo_id); algo_params[0].content.ref.buffer = &sha1_algo_id; num_algo_params = 1; } out_enc_size = sizeof(out_enc); res = ta_crypt_cmd_asymmetric_encrypt(c, &session, op, algo_params, num_algo_params, tv->ptx, tv->ptx_len, out_enc, &out_enc_size); if (tv->algo == TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256 && res == TEEC_ERROR_NOT_SUPPORTED) { Do_ADBG_Log("RSA-OAEP with a different MGF1 hash not supported: skip subcase"); break; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; /* * A PS which is random is added when formatting the * message internally of the algorithm so we can't * verify against precomputed values, instead we use the * decrypt operation to see that output is correct. */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, tv->algo, TEE_MODE_DECRYPT, max_key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, priv_key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, priv_key_handle))) goto out; priv_key_handle = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_decrypt(c, &session, op, algo_params, num_algo_params, out_enc, out_enc_size, out, &out_size))) goto out; (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out, out_size); break; case TEE_MODE_DECRYPT: if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, tv->algo, TEE_MODE_DECRYPT, max_key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, priv_key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, priv_key_handle))) goto out; num_algo_params = 0; if (tv->algo == TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1 || tv->algo == TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256) { algo_params[0].attributeID = TEE_ATTR_RSA_OAEP_MGF_HASH; algo_params[0].content.ref.length = sizeof(sha1_algo_id); algo_params[0].content.ref.buffer = &sha1_algo_id; num_algo_params = 1; } priv_key_handle = TEE_HANDLE_NULL; res = ta_crypt_cmd_asymmetric_decrypt(c, &session, op, algo_params, num_algo_params, tv->ctx, tv->ctx_len, out, &out_size); if (tv->algo == TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256 && res == TEEC_ERROR_NOT_SUPPORTED) { Do_ADBG_Log("RSA-OAEP with a different MGF1 hash not supported: skip subcase"); break; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out, out_size); break; case TEE_MODE_VERIFY: if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, tv->algo, TEE_MODE_VERIFY, max_key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, pub_key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, pub_key_handle))) goto out; pub_key_handle = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_verify(c, &session, op, algo_params, num_algo_params, ptx_hash, ptx_hash_size, tv->ctx, tv->ctx_len))) goto out; break; case TEE_MODE_SIGN: if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, tv->algo, TEE_MODE_SIGN, max_key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, priv_key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, priv_key_handle))) goto out; priv_key_handle = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_sign(c, &session, op, algo_params, num_algo_params, ptx_hash, ptx_hash_size, out, &out_size))) goto out; if (TEE_ALG_GET_CHAIN_MODE(tv->algo) == TEE_CHAIN_MODE_PKCS1_PSS_MGF1 || tv->algo == TEE_ALG_DSA_SHA1 || tv->algo == TEE_ALG_DSA_SHA224 || tv->algo == TEE_ALG_DSA_SHA256 || TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA || tv->algo == TEE_ALG_SM2_DSA_SM3) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; /* * The salt or K is random so we can't verify * signing against precomputed values, instead * we use the verify operation to see that * output is correct. */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, tv->algo, TEE_MODE_VERIFY, max_key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, pub_key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, pub_key_handle))) goto out; pub_key_handle = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_verify(c, &session, op, algo_params, num_algo_params, ptx_hash, ptx_hash_size, out, out_size))) goto out; } else { (void)ADBG_EXPECT_BUFFER(c, tv->ctx, tv->ctx_len, out, out_size); } break; default: break; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, pub_key_handle))) goto out; pub_key_handle = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, priv_key_handle))) goto out; priv_key_handle = TEE_HANDLE_NULL; Do_ADBG_EndSubCase(c, NULL); } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4006, xtest_tee_test_4006, "Test TEE Internal API Asymmetric Cipher operations"); #define KEY_ATTR(x, y) { #x, (x), y } struct key_attrs { const char *name; uint32_t attr; /* * When keysize_check != 0: size of attribute is checked * Expected value is key_size bits except for DH in which case it is * the value of keysize_check. */ uint32_t keysize_check; }; static bool is_caam_black_key(uint8_t *buf, size_t size) { /* * This value is a magic number for the a CAAM Black key. This value * must match the value defined in optee-os * core/drivers/crypto/caam/caam_key.c */ const uint8_t magic_number[4] = {0xFB, 0xBF, 0xAF, 0xCA}; if (size < sizeof(magic_number)) return false; return !memcmp(buf, magic_number, sizeof(magic_number)); } static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle key, uint32_t key_size, struct key_attrs *attrs, size_t num_attrs) { uint8_t out[2048] = { }; size_t out_size = 0; size_t n = 0; size_t m = 0; for (m = 0; m < num_attrs; m++) { if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) { out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, s, key, attrs[m].attr, out, &out_size))) return false; /* * Check for CAAM black key header. If the buffer holds * a CAAM black key, do not check the key size as the * buffer size and the key size do not match. */ if (attrs[m].keysize_check && !is_caam_black_key(out, out_size)) ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, <=, key_size / 8); if (out_size > 0) { /* Check that buffer isn't all zeroes */ for (n = 0; n < out_size; n++) if (out[n] != 0) break; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <, out_size)) return false; } } else { uint32_t a = 0; uint32_t b = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_value_attribute(c, s, key, attrs[m].attr, &a, &b))) return false; } } return true; } static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle key, uint32_t key_size) { const struct key_attrs attrs[] = { KEY_ATTR(TEE_ATTR_SECRET_VALUE, true), }; return test_keygen_attributes(c, s, key, key_size, (struct key_attrs *)&attrs, ARRAY_SIZE(attrs)); } static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle key, uint32_t key_size) { const struct key_attrs attrs[] = { KEY_ATTR(TEE_ATTR_RSA_MODULUS, true), KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false), KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false), KEY_ATTR(TEE_ATTR_RSA_PRIME1, false), KEY_ATTR(TEE_ATTR_RSA_PRIME2, false), KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false), KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false), KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false), }; return test_keygen_attributes(c, s, key, key_size, (struct key_attrs *)&attrs, ARRAY_SIZE(attrs)); } static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle key, uint32_t key_size) { const struct key_attrs attrs[] = { KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false), KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false), KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false), /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */ }; return test_keygen_attributes(c, s, key, key_size, (struct key_attrs *)&attrs, ARRAY_SIZE(attrs)); } static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle key, uint32_t check_keysize) { const struct key_attrs attrs[] = { KEY_ATTR(TEE_ATTR_DH_PRIME, false), KEY_ATTR(TEE_ATTR_DH_BASE, false), KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false), KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize), KEY_ATTR(TEE_ATTR_DH_X_BITS, false), }; return test_keygen_attributes(c, s, key, check_keysize, (struct key_attrs *)&attrs, ARRAY_SIZE(attrs)); } static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle key, uint32_t key_size) { const struct key_attrs attrs[] = { KEY_ATTR(TEE_ATTR_DSA_PRIME, true), KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false), KEY_ATTR(TEE_ATTR_DSA_BASE, false), KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false), KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false), }; return test_keygen_attributes(c, s, key, key_size, (struct key_attrs *)&attrs, ARRAY_SIZE(attrs)); } static bool test_x25519_key_pair(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle key, uint32_t key_size) { const struct key_attrs attrs[] = { KEY_ATTR(TEE_ATTR_X25519_PRIVATE_VALUE, false), KEY_ATTR(TEE_ATTR_X25519_PUBLIC_VALUE, false), }; return test_keygen_attributes(c, s, key, key_size, (struct key_attrs *)&attrs, ARRAY_SIZE(attrs)); } static bool test_ed25519_key_pair(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle key, uint32_t key_size) { const struct key_attrs attrs[] = { KEY_ATTR(TEE_ATTR_ED25519_PRIVATE_VALUE, false), KEY_ATTR(TEE_ATTR_ED25519_PUBLIC_VALUE, false), }; return test_keygen_attributes(c, s, key, key_size, (struct key_attrs *)&attrs, ARRAY_SIZE(attrs)); } static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s, uint32_t key_type, uint32_t check_keysize, uint32_t key_size, TEE_Attribute *params, size_t param_count) { TEE_ObjectHandle key = TEE_HANDLE_NULL; bool ret_val = true; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size, &key))) return false; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, s, key, key_size, params, param_count))) return false; switch (key_type) { case TEE_TYPE_DES: case TEE_TYPE_DES3: ret_val = ADBG_EXPECT_TRUE(c, test_secret_value(c, s, key, key_size + key_size / 7)); break; case TEE_TYPE_AES: case TEE_TYPE_HMAC_MD5: case TEE_TYPE_HMAC_SHA1: case TEE_TYPE_HMAC_SHA224: case TEE_TYPE_HMAC_SHA256: case TEE_TYPE_HMAC_SHA384: case TEE_TYPE_HMAC_SHA512: case TEE_TYPE_GENERIC_SECRET: ret_val = ADBG_EXPECT_TRUE(c, test_secret_value(c, s, key, key_size)); break; case TEE_TYPE_RSA_KEYPAIR: ret_val = ADBG_EXPECT_TRUE(c, test_rsa_key_pair(c, s, key, key_size)); break; case TEE_TYPE_ECDSA_KEYPAIR: case TEE_TYPE_ECDH_KEYPAIR: ret_val = ADBG_EXPECT_TRUE(c, test_ecc_key_pair(c, s, key, key_size)); break; case TEE_TYPE_DH_KEYPAIR: ret_val = ADBG_EXPECT_TRUE(c, test_dh_key_pair(c, s, key, check_keysize)); break; case TEE_TYPE_DSA_KEYPAIR: ret_val = ADBG_EXPECT_TRUE(c, test_dsa_key_pair(c, s, key, key_size)); break; case TEE_TYPE_X25519_KEYPAIR: ret_val = ADBG_EXPECT_TRUE(c, test_x25519_key_pair(c, s, key, key_size)); break; case TEE_TYPE_ED25519_KEYPAIR: ret_val = ADBG_EXPECT_TRUE(c, test_ed25519_key_pair(c, s, key, key_size)); break; default: ret_val = false; break; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, s, key))) return false; return ret_val; } struct key_types_noparam { unsigned level; const char *name; uint32_t key_type; uint32_t quanta; uint32_t min_size; uint32_t max_size; }; static void keygen_noparams(ADBG_Case_t *c, TEEC_Session *session, const struct key_types_noparam *key_types, size_t num_key_types) { size_t n = 0; uint32_t key_size = 0; for (n = 0; n < num_key_types; n++) { uint32_t min_size = key_types[n].min_size; uint32_t max_size = key_types[n].max_size; uint32_t quanta = key_types[n].quanta; if (key_types[n].level > level) continue; Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name); for (key_size = min_size; key_size <= max_size; key_size += quanta) { if (!ADBG_EXPECT_TRUE(c, generate_and_test_key(c, session, key_types [n].key_type, 1, key_size, NULL, 0))) break; } Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name); } } static void xtest_tee_test_4007_symmetric(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; static const struct key_types_noparam key_types[] = { { 0, "AES", TEE_TYPE_AES, 64, 128, 256 /* valid sizes 128, 192, 256 */ }, { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ }, { 0, "DES3", TEE_TYPE_DES3, 56, 112, 168 /* valid sizes 112, 168 */ }, { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 }, { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 }, { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 }, { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 }, { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 }, { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 }, { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; keygen_noparams(c, &session, key_types, ARRAY_SIZE(key_types)); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4007_symmetric, xtest_tee_test_4007_symmetric, "Test TEE Internal API Generate Symmetric key"); static void xtest_tee_test_4007_rsa(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; static const struct key_types_noparam key_types[] = { #ifndef CFG_CRYPTO_SE05X { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 }, { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 }, #endif { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 }, #ifndef CFG_CRYPTO_SE05X { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 }, { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 }, { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 }, #endif { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 }, { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 }, { 1, "RSA-3072", TEE_TYPE_RSA_KEYPAIR, 1, 3072, 3072 }, { 1, "RSA-4096", TEE_TYPE_RSA_KEYPAIR, 1, 4096, 4096 }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; keygen_noparams(c, &session, key_types, ARRAY_SIZE(key_types)); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4007_rsa, xtest_tee_test_4007_rsa, "Test TEE Internal API Generate RSA key"); static void xtest_tee_test_4007_dh(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; size_t param_count = 0; /* * Note that the key size parameter is not used when creating the keys * but specifying these sizes make it possible to test the expected size * of the private value. This also means that the keysize must match the * size of p or what is specified in private_bits or the equvivalent * size of the subprime parameter. */ TEE_Attribute params[4] = { }; #define XTEST_DH_GK_DATA(vect) \ ARRAY(vect ## _p), \ ARRAY(vect ## _g), \ &vect ## _private_bits, \ 0, 0 #define XTEST_DH_GK_DATA_SUBPRIME(vect) \ ARRAY(vect ## _p), \ ARRAY(vect ## _g), \ &vect ## _private_bits, \ ARRAY(vect ## _subprime) static const struct { unsigned level; uint32_t key_size; const uint8_t *p; size_t p_len; const uint8_t *g; size_t g_len; const uint32_t *private_bits; const uint8_t *subprime; size_t subprime_len; } key_types[] = { { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) }, { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) }, { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) }, { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) }, { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) }, { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) }, { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) }, { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) }, { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) }, { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) }, { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) }, { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) }, { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) }, { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) }, { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) }, { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) }, { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) }, { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) }, { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) }, { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) }, { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) }, { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) }, { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) }, { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) }, { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) }, { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) }, { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) }, { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) }, { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) }, { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) } }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(key_types); n++) { if (key_types[n].level > level) continue; Do_ADBG_BeginSubCase(c, "Generate DH key %d bits - Private bits = %d", key_types[n].key_size, *key_types[n].private_bits); param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_DH_PRIME, key_types[n].p, key_types[n].p_len); xtest_add_attr(¶m_count, params, TEE_ATTR_DH_BASE, key_types[n].g, key_types[n].g_len); if (key_types[n].private_bits != 0) { params[param_count].attributeID = TEE_ATTR_DH_X_BITS; params[param_count].content.value.a = *key_types[n].private_bits; params[param_count].content.value.b = 0; param_count++; } if (key_types[n].subprime != 0) { xtest_add_attr(¶m_count, params, TEE_ATTR_DH_SUBPRIME, key_types[n].subprime, key_types[n].subprime_len); } if (!ADBG_EXPECT_TRUE(c, generate_and_test_key(c, &session, TEE_TYPE_DH_KEYPAIR, *key_types[n].private_bits, key_types[n]. key_size, params, param_count))) break; Do_ADBG_EndSubCase(c, "Generate DH key %d bits - Private bits = %d", key_types[n].key_size, *key_types[n].private_bits); } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4007_dh, xtest_tee_test_4007_dh, "Test TEE Internal API Generate DH key"); static void xtest_tee_test_4007_dsa(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; size_t param_count = 0; TEE_Attribute params[4] = { }; #define XTEST_DSA_GK_DATA(vect) \ ARRAY(vect ## _p), \ ARRAY(vect ## _g), \ ARRAY(vect ## _q) static const struct { unsigned level; uint32_t key_size; const uint8_t *prime; size_t prime_len; const uint8_t *base; size_t base_len; const uint8_t *sub_prime; size_t sub_prime_len; } key_types[] = { { 0, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) }, { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) }, { 0, 576, XTEST_DSA_GK_DATA(keygen_dsa576) }, { 0, 640, XTEST_DSA_GK_DATA(keygen_dsa640) }, { 0, 704, XTEST_DSA_GK_DATA(keygen_dsa704) }, { 0, 768, XTEST_DSA_GK_DATA(keygen_dsa768) }, { 0, 832, XTEST_DSA_GK_DATA(keygen_dsa832) }, { 0, 896, XTEST_DSA_GK_DATA(keygen_dsa896) }, { 0, 960, XTEST_DSA_GK_DATA(keygen_dsa960) }, { 0, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(key_types); n++) { if (key_types[n].level > level) continue; Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits", key_types[n].key_size); param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_DSA_PRIME, key_types[n].prime, key_types[n].prime_len); xtest_add_attr(¶m_count, params, TEE_ATTR_DSA_SUBPRIME, key_types[n].sub_prime, key_types[n].sub_prime_len); xtest_add_attr(¶m_count, params, TEE_ATTR_DSA_BASE, key_types[n].base, key_types[n].base_len); if (!ADBG_EXPECT_TRUE(c, generate_and_test_key(c, &session, TEE_TYPE_DSA_KEYPAIR, 1, key_types[n]. key_size, params, param_count))) break; Do_ADBG_EndSubCase(c, "Generate DSA key %d bits", key_types[n].key_size); } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4007_dsa, xtest_tee_test_4007_dsa, "Test TEE Internal API Generate DSA key"); static void xtest_tee_test_4007_ecc(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; size_t param_count = 0; TEE_Attribute params[4] = { }; static const struct { unsigned level; const char *name; uint32_t algo; uint32_t curve; uint32_t key_size; } key_types[] = { /* ECDSA */ { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192, 192 }, { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224, 224 }, { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256, 256 }, { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384, 384 }, { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521, 521 }, /* ECDH */ { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192, 192 }, { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224, 224 }, { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256, 256 }, { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384, 384 }, { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521, 521 }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(key_types); n++) { if (key_types[n].level > level) continue; Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name); param_count = 0; xtest_add_attr_value(¶m_count, params, TEE_ATTR_ECC_CURVE, key_types[n].curve, 0); if (!ADBG_EXPECT_TRUE(c, generate_and_test_key(c, &session, key_types[n].algo, 0, key_types[n].key_size, params, param_count))) break; Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name); } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4007_ecc, xtest_tee_test_4007_ecc, "Test TEE Internal API Generate ECC key"); static void xtest_tee_test_4007_x25519(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ta_crypt_cmd_is_algo_supported(c, &session, TEE_ALG_X25519, TEE_ECC_CURVE_25519)) { Do_ADBG_Log("X25519 not supported: skip subcase"); goto out; } Do_ADBG_BeginSubCase(c, "Generate X25519 key"); if (!ADBG_EXPECT_TRUE(c, generate_and_test_key(c, &session, TEE_TYPE_X25519_KEYPAIR, 0, 256, NULL, 0))) return; Do_ADBG_EndSubCase(c, "Generate X25519 key"); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4007_x25519, xtest_tee_test_4007_x25519, "Test TEE Internal API Generate X25519 key"); static void xtest_tee_test_4007_ed25519(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ta_crypt_cmd_is_algo_supported(c, &session, TEE_ALG_ED25519, TEE_ECC_CURVE_25519)) { Do_ADBG_Log("ED25519 not supported: skip subcase"); goto out; } Do_ADBG_BeginSubCase(c, "Generate Ed25519 key"); ADBG_EXPECT_TRUE(c, generate_and_test_key(c, &session, TEE_TYPE_ED25519_KEYPAIR, 0, 256, NULL, 0)); Do_ADBG_EndSubCase(c, "Generate Ed25519 key"); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4007_ed25519, xtest_tee_test_4007_ed25519, "Test TEE Internal API Generate ed25519 key"); static void xtest_tee_test_4008(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL; TEE_Attribute params[4] = { }; size_t param_count = 0; uint8_t out[2048] = { }; size_t out_size = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "Derive DH key success"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE, derive_key_max_keysize))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, & session, TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize, &key_handle))) goto out; xtest_add_attr(¶m_count, params, TEE_ATTR_DH_PRIME, ARRAY(derive_key_dh_prime)); xtest_add_attr(¶m_count, params, TEE_ATTR_DH_BASE, ARRAY(derive_key_dh_base)); xtest_add_attr(¶m_count, params, TEE_ATTR_DH_PUBLIC_VALUE, ARRAY(derive_key_dh_public_value)); xtest_add_attr(¶m_count, params, TEE_ATTR_DH_PRIVATE_VALUE, ARRAY(derive_key_dh_private_value)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, key_handle, params, param_count))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, & session, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize, &sv_handle))) goto out; /* reuse but reset params and param-count */ param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_DH_PUBLIC_VALUE, ARRAY(derive_key_dh_public_value_2)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret, sizeof(derive_key_dh_shared_secret), out, out_size)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, sv_handle))) goto out; out: Do_ADBG_EndSubCase(c, "Derive DH key success"); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4008, xtest_tee_test_4008, "Test TEE Internal API Derive key"); static void xtest_tee_test_4009(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL; TEE_Attribute params[4] = { }; size_t param_count = 0; uint8_t out[2048] = { }; size_t out_size = 0; uint32_t size_bytes = 0; uint32_t i = 0; struct derive_key_ecdh_t const *pt = NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) { pt = &derive_key_ecdh[i]; if (pt->level > level) continue; Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo); size_bytes = (pt->keysize + 7) / 8; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, pt->algo, TEE_MODE_DERIVE, pt->keysize))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, & session, TEE_TYPE_ECDH_KEYPAIR, pt->keysize, &key_handle))) goto out; param_count = 0; xtest_add_attr_value(¶m_count, params, TEE_ATTR_ECC_CURVE, pt->curve, 0); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PRIVATE_VALUE, pt->private, size_bytes); /* * The public value is not used, but we should provide a valid * one to avoid rejection in case TEE_PopulateTransientObject() * checks for key validity. */ xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_X, pt->public_x, size_bytes); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_Y, pt->public_y, size_bytes); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, key_handle, params, param_count))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, & session, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_GENERIC_SECRET, size_bytes * 8, &sv_handle))) goto out; /* reuse but reset params and param-count */ param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_X, pt->public_x, size_bytes); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_Y, pt->public_y, size_bytes); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes, out, out_size)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, sv_handle))) goto out; Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo); } goto noerror; out: Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo); noerror: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4009, xtest_tee_test_4009, "Test TEE Internal API Derive key ECDH"); static void xtest_tee_test_4010(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; TEE_ObjectHandle o = TEE_HANDLE_NULL; static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 }; static const TEE_Attribute attr = { .attributeID = TEE_ATTR_SECRET_VALUE, .content.ref.buffer = (void *)large_key, .content.ref.length = sizeof(large_key), }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_HMAC_SHA256, 1024, &o))) goto out; ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD, ta_crypt_cmd_populate_transient_object(c, &session, o, &attr, 1)); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4010, xtest_tee_test_4010, "Test TEE Internal API create transient object (negative)"); static void xtest_tee_test_4011(ADBG_Case_t *c) { TEEC_Session s = { }; size_t key_size = 512; TEE_ObjectHandle key = TEE_HANDLE_NULL; TEE_OperationHandle ops = TEE_HANDLE_NULL; TEE_OperationHandle opv = TEE_HANDLE_NULL; TEE_OperationHandle ope = TEE_HANDLE_NULL; TEE_OperationHandle opd = TEE_HANDLE_NULL; uint32_t ret_orig = 0; uint8_t in[TEE_SHA1_HASH_SIZE] = { }; uint8_t out[1024] = { }; uint8_t tmp[1024] = { }; size_t out_size = 0; size_t tmp_size = 0; size_t n = 0; size_t m = 0; size_t i = 0; /* Setup session, initialize message to sign, create a keypair */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c, &s, in, sizeof(in)))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object( c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s, key, key_size, NULL, 0))) goto out; /* Allocate operations for sign, verify, encrypt and decrypt */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s, &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN, key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s, &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY, key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s, &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s, &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size))) goto out; /* Assign the keypair to all operations */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &s, ops, key))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &s, opv, key))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &s, ope, key))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &s, opd, key))) goto out; /* * The core of the test case is inspired by the one in libtomcrypt: * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398 * * Testcase for Bleichenbacher attack * * (1) Create a valid signature * (2) Check that it can be verified * (3) Transform the package to fetch plain text (using the encrypt * operation in GP TEE Internal API) * (4) Forge the structure of PKCS#1-EMSA encoded data * (4.1) Search for start and end of the padding string * (4.2) Move the signature to the front of the padding string * (4.3) Zero the message until the end * (5) Transform the package back (using the decrypt operation in * GP TEE Internal API) * (6) The result should not be valid if the implementation is robust. */ for (i = 0; i < 9; i++) { Do_ADBG_Log("Iteration %zu", i); /* 1 */ out_size = sizeof(out); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0, in, sizeof(in), out, &out_size))) goto out; /* 2 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0, in, sizeof(in), out, out_size))) goto out; /* 3 */ tmp_size = sizeof(tmp); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0, out, out_size, tmp, &tmp_size))) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, tmp_size, <=, sizeof(tmp))) goto out; /* 4.1 */ for (n = 0; n < tmp_size - i; n++) if (tmp[n] == 0xff) break; /* Shall find at least a padding start before buffer end */ if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <, tmp_size - i - 1)) goto out; for (m = n + 1; m < tmp_size; m++) if (tmp[m] != 0xff) break; /* 4.2 */ memmove(tmp + n + i, tmp + m, tmp_size - m); /* 4.3 */ n = n + i + tmp_size - m; /* Prevent overrun when zeroing buffer end */ if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <=, tmp_size)) goto out; memset(tmp + n, 0, tmp_size - n); /* 5 */ out_size = sizeof(out); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0, tmp, tmp_size, out, &out_size))) goto out; /* 6 */ if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID, ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0, in, sizeof(in), out, out_size))) goto out; } out: TEEC_CloseSession(&s); } ADBG_CASE_DEFINE(regression, 4011, xtest_tee_test_4011, "Test TEE Internal API Bleichenbacher attack (negative)"); static void xtest_tee_test_4012(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; TEEC_Session session = { }; uint32_t ret_orig = 0; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; /* Fortuna PRNG requires seed <= 32 bytes */ uint8_t pool_input[32] = { }; time_t t = 0; struct tm tm_local = { }; t = time(NULL); tm_local = *localtime(&t); memcpy((void *)pool_input, (void *)&tm_local, sizeof(pool_input) < sizeof(tm_local) ? sizeof(pool_input) : sizeof(tm_local)); op.params[0].tmpref.buffer = pool_input; op.params[0].tmpref.size = sizeof(pool_input); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; res = TEEC_InvokeCommand(&session, TA_CRYPT_CMD_SEED_RNG_POOL, &op, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND && ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, ret_orig, TEEC_ORIGIN_TRUSTED_APP)) Do_ADBG_Log("System PTA not available, skipping test 4012"); else ADBG_EXPECT_TEEC_SUCCESS(c, res); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4012, xtest_tee_test_4012, "Test seeding RNG entropy"); static void xtest_tee_test_4013(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; TEEC_Session session = { }; uint32_t ret_orig = 0; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint8_t key[32] = { }; uint8_t extra_data[32] = { }; op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; res = TEEC_InvokeCommand(&session, TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY, &op, &ret_orig); if (res == TEEC_ERROR_ITEM_NOT_FOUND && ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, ret_orig, TEEC_ORIGIN_TRUSTED_APP)) { Do_ADBG_Log("System PTA not available, skipping test 4013"); goto out; } ADBG_EXPECT_TEEC_SUCCESS(c, res); /* Negative test using non-secure memory */ memset(&op, 0, sizeof(op)); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.buffer = extra_data; op.params[0].tmpref.size = sizeof(extra_data); op.params[1].tmpref.buffer = key; op.params[1].tmpref.size = sizeof(key); (void)ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SECURITY, TEEC_InvokeCommand(&session, TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY_SHM, &op, &ret_orig)); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4013, xtest_tee_test_4013, "Test generation of device unique TA keys"); static void xtest_tee_test_4014(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle keyA = TEE_HANDLE_NULL; TEE_ObjectHandle eph_keyA = TEE_HANDLE_NULL; TEE_ObjectHandle keyB = TEE_HANDLE_NULL; TEE_ObjectHandle eph_keyB = TEE_HANDLE_NULL; TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL; TEE_Attribute params[9] = { }; size_t param_count = 0; uint8_t out[128] = { }; size_t out_size = 0; uint8_t conf_A[32] = { }; uint8_t conf_B[32] = { }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ta_crypt_cmd_is_algo_supported(c, &session, TEE_ALG_SM2_KEP, TEE_ECC_CURVE_SM2)) { Do_ADBG_Log("SM2 KEP not supported: skip subcase"); goto out; } Do_ADBG_BeginSubCase(c, "Initiator side"); /* * Key exchange protocol running on user A's side. A is initiator. */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, TEE_ALG_SM2_KEP, TEE_MODE_DERIVE, 512))) goto out; /* Allocate and initialize keypair of user A */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_SM2_KEP_KEYPAIR, 256, &keyA))) goto out; param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_X, ARRAY(gmt_003_part5_b2_public_xA)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_Y, ARRAY(gmt_003_part5_b2_public_yA)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PRIVATE_VALUE, ARRAY(gmt_003_part5_b2_private_A)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, keyA, params, param_count))) goto out; /* * Allocate and set ephemeral key of user A. Note: it is a regular ECC * key -- we don't use the *_EPHEMERAL_* attributes flags which are * reserved for use in TEE_DeriveKey() to pass the ephermeral key of * user B. */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_SM2_KEP_KEYPAIR, 256, &eph_keyA))) goto out; param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_X, ARRAY(gmt_003_part5_b2_eph_public_xA)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_Y, ARRAY(gmt_003_part5_b2_eph_public_yA)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PRIVATE_VALUE, ARRAY(gmt_003_part5_b2_eph_private_A)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, eph_keyA, params, param_count))) goto out; /* Associate user A keys with operation */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key2(c, &session, op, keyA, eph_keyA))) goto out; /* Keys have been set, free key objects */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, keyA))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, eph_keyA))) goto out; /* Allocate output object */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_GENERIC_SECRET, sizeof(gmt_003_part5_b2_shared_secret), &sv_handle))) goto out; /* Set key derivation parameters: user A role, user B information */ params[0].attributeID = TEE_ATTR_SM2_KEP_USER; params[0].content.value.a = 0; /* Initiator role */ params[0].content.value.b = 0; /* Not used */ param_count = 1; xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_X, ARRAY(gmt_003_part5_b2_public_xB)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_Y, ARRAY(gmt_003_part5_b2_public_yB)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_EPHEMERAL_PUBLIC_VALUE_X, ARRAY(gmt_003_part5_b2_eph_public_xB)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_EPHEMERAL_PUBLIC_VALUE_Y, ARRAY(gmt_003_part5_b2_eph_public_yB)); xtest_add_attr(¶m_count, params, TEE_ATTR_SM2_ID_INITIATOR, ARRAY(gmt_003_part5_b2_id_A)); xtest_add_attr(¶m_count, params, TEE_ATTR_SM2_ID_RESPONDER, ARRAY(gmt_003_part5_b2_id_B)); xtest_add_attr(¶m_count, params, TEE_ATTR_SM2_KEP_CONFIRMATION_IN, ARRAY(gmt_003_part5_b2_conf_B)); xtest_add_attr(¶m_count, params, TEE_ATTR_SM2_KEP_CONFIRMATION_OUT, ARRAY(conf_A)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; /* Check derived key */ if (!ADBG_EXPECT_BUFFER(c, gmt_003_part5_b2_shared_secret, sizeof(gmt_003_part5_b2_shared_secret), out, out_size)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, sv_handle))) goto out; Do_ADBG_EndSubCase(c, "Initiator side"); Do_ADBG_BeginSubCase(c, "Responder side"); /* * Key derivation on user B's side */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, TEE_ALG_SM2_KEP, TEE_MODE_DERIVE, 512))) goto out; /* Allocate and initialize keypair of user B */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_SM2_KEP_KEYPAIR, 256, &keyB))) goto out; param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_X, ARRAY(gmt_003_part5_b2_public_xB)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_Y, ARRAY(gmt_003_part5_b2_public_yB)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PRIVATE_VALUE, ARRAY(gmt_003_part5_b2_private_B)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, keyB, params, param_count))) goto out; /* Allocate and set ephemeral key of user B */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_SM2_KEP_KEYPAIR, 256, &eph_keyB))) goto out; param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_X, ARRAY(gmt_003_part5_b2_eph_public_xB)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_Y, ARRAY(gmt_003_part5_b2_eph_public_yB)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PRIVATE_VALUE, ARRAY(gmt_003_part5_b2_eph_private_B)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, eph_keyB, params, param_count))) goto out; /* Associate user B keys with operation */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key2(c, &session, op, keyB, eph_keyB))) goto out; /* Keys have been set, free key objects */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, keyB))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, eph_keyB))) goto out; /* Allocate output object */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_GENERIC_SECRET, sizeof(gmt_003_part5_b2_shared_secret), &sv_handle))) goto out; /* Set key derivation parameters: user B role, user A information */ params[0].attributeID = TEE_ATTR_SM2_KEP_USER; params[0].content.value.a = 1; /* Responder role */ params[0].content.value.b = 0; /* Not used */ param_count = 1; xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_X, ARRAY(gmt_003_part5_b2_public_xA)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_PUBLIC_VALUE_Y, ARRAY(gmt_003_part5_b2_public_yA)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_EPHEMERAL_PUBLIC_VALUE_X, ARRAY(gmt_003_part5_b2_eph_public_xA)); xtest_add_attr(¶m_count, params, TEE_ATTR_ECC_EPHEMERAL_PUBLIC_VALUE_Y, ARRAY(gmt_003_part5_b2_eph_public_yA)); xtest_add_attr(¶m_count, params, TEE_ATTR_SM2_ID_INITIATOR, ARRAY(gmt_003_part5_b2_id_A)); xtest_add_attr(¶m_count, params, TEE_ATTR_SM2_ID_RESPONDER, ARRAY(gmt_003_part5_b2_id_B)); xtest_add_attr(¶m_count, params, TEE_ATTR_SM2_KEP_CONFIRMATION_IN, ARRAY(gmt_003_part5_b2_conf_A)); xtest_add_attr(¶m_count, params, TEE_ATTR_SM2_KEP_CONFIRMATION_OUT, ARRAY(conf_B)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; /* Check derived key */ if (!ADBG_EXPECT_BUFFER(c, gmt_003_part5_b2_shared_secret, sizeof(gmt_003_part5_b2_shared_secret), out, out_size)) goto out; Do_ADBG_EndSubCase(c, "Responder side"); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4014, xtest_tee_test_4014, "Test SM2 KEP (key derivation)"); static void xtest_tee_test_4015(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle key_alice = TEE_HANDLE_NULL; TEE_ObjectHandle key_bob = TEE_HANDLE_NULL; TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL; TEE_Attribute params[2] = { }; size_t param_count = 0; uint8_t out[32] = { }; size_t out_size = 0; char case_str[40] = "Alice side computes shared secret"; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "%s", case_str); if (!ta_crypt_cmd_is_algo_supported(c, &session, TEE_ALG_X25519, TEE_ECC_CURVE_25519)) { Do_ADBG_Log("X25519 not supported: skip subcase"); goto out; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, TEE_ALG_X25519, TEE_MODE_DERIVE, 256))) goto out; /* Allocate and initialize keypair of Alice */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_X25519_KEYPAIR, 256, &key_alice))) goto out; param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_X25519_PUBLIC_VALUE, ARRAY(x25519_alice_public)); xtest_add_attr(¶m_count, params, TEE_ATTR_X25519_PRIVATE_VALUE, ARRAY(x25519_alice_private)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, key_alice, params, param_count))) goto out; /* Associate Alices's keys with operation */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, key_alice))) goto out; /* Keys have been set, free key objects */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, key_alice))) goto out; /* Allocate shared secret output object */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_GENERIC_SECRET, sizeof(x25519_shared_secret), &sv_handle))) goto out; /* Reset params */ param_count = 0; /* Set Bob's public key for Alice side */ xtest_add_attr(¶m_count, params, TEE_ATTR_X25519_PUBLIC_VALUE, ARRAY(x25519_bob_public)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; /* Check derived key */ if (!ADBG_EXPECT_BUFFER(c, x25519_shared_secret, sizeof(x25519_shared_secret), out, out_size)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, sv_handle))) goto out; Do_ADBG_EndSubCase(c, "%s", case_str); strncpy(case_str, "Bob side computes shared secret", sizeof(case_str) - 1); Do_ADBG_BeginSubCase(c, "%s", case_str); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, TEE_ALG_X25519, TEE_MODE_DERIVE, 256))) goto out; /* Allocate and initialize keypair of Bob */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_X25519_KEYPAIR, 256, &key_bob))) goto out; /* Reset params */ param_count = 0; xtest_add_attr(¶m_count, params, TEE_ATTR_X25519_PUBLIC_VALUE, ARRAY(x25519_bob_public)); xtest_add_attr(¶m_count, params, TEE_ATTR_X25519_PRIVATE_VALUE, ARRAY(x25519_bob_private)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, &session, key_bob, params, param_count))) goto out; /* Associate Bob's keys with operation */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, key_bob))) goto out; /* Keys have been set, free key objects */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, key_bob))) goto out; /* Allocate shared secret output object */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, &session, TEE_TYPE_GENERIC_SECRET, sizeof(x25519_shared_secret), &sv_handle))) goto out; /* Reset params */ param_count = 0; /* Set Alice's public key for Bob side */ xtest_add_attr(¶m_count, params, TEE_ATTR_X25519_PUBLIC_VALUE, ARRAY(x25519_alice_public)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; /* Check derived key */ if (!ADBG_EXPECT_BUFFER(c, x25519_shared_secret, sizeof(x25519_shared_secret), out, out_size)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, &session, sv_handle))) goto out; out: Do_ADBG_EndSubCase(c, "%s", case_str); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4015, xtest_tee_test_4015, "Test TEE Internal API Derive key X25519"); static void xtest_tee_test_4016_ed25519(ADBG_Case_t *c) { TEEC_Session session = { }; TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; TEE_Attribute key_attrs[2] = { }; size_t num_key_attrs = 0; TEE_Attribute attrs[2] = { }; size_t num_attrs = 0; uint8_t out[64] = { }; size_t out_size = sizeof(out); size_t n = 0; uint32_t ret_orig = 0; size_t max_key_size = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ta_crypt_cmd_is_algo_supported(c, &session, TEE_ALG_ED25519, TEE_ECC_CURVE_25519)) { Do_ADBG_Log("ED25519 not supported: skip subcase"); goto out; } for (n = 0; n < ARRAY_SIZE(xtest_ac_eddsa_cases); n++) { const struct xtest_ac_case *tv = xtest_ac_eddsa_cases + n; if (tv->algo != TEE_ALG_ED25519) continue; num_attrs = 0; num_key_attrs = 0; max_key_size = tv->params.eddsa.private_len * 8; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &session, &op, TEE_ALG_ED25519, tv->mode, max_key_size))) goto out; xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_ED25519_PUBLIC_VALUE, tv->params.eddsa.public, tv->params.eddsa.public_len); if (tv->params.eddsa.flag == 1) xtest_add_attr_value(&num_attrs, attrs, TEE_ATTR_EDDSA_PREHASH, 1, 0); if (tv->params.eddsa.context_len > 0) xtest_add_attr(&num_attrs, attrs, TEE_ATTR_EDDSA_CTX, tv->params.eddsa.context, tv->params.eddsa.context_len); switch (tv->mode) { case TEE_MODE_SIGN: xtest_add_attr(&num_key_attrs, key_attrs, TEE_ATTR_ED25519_PRIVATE_VALUE, tv->params.eddsa.private, tv->params.eddsa.private_len); if (!ADBG_EXPECT_TRUE(c, create_key(c, &session, max_key_size, TEE_TYPE_ED25519_KEYPAIR, key_attrs, num_key_attrs, &key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_sign(c, &session, op, attrs, num_attrs, tv->ptx, tv->ptx_len, out, &out_size))) goto out; ADBG_EXPECT_BUFFER(c, tv->ctx, tv->ctx_len, out, out_size); break; case TEE_MODE_VERIFY: if (!ADBG_EXPECT_TRUE(c, create_key(c, &session, max_key_size, TEE_TYPE_ED25519_PUBLIC_KEY, key_attrs, num_key_attrs, &key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, &session, op, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_asymmetric_verify(c, &session, op, attrs, num_attrs, tv->ptx, tv->ptx_len, tv->ctx, tv->ctx_len))) goto out; break; default: break; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, &session, op))) goto out; } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4016, xtest_tee_test_4016_ed25519, "Test TEE Internal API ED25519 sign/verify"); struct buf_state { bool buffer_two_blocks; bool auth_enc; bool decrypt; uint8_t *plain_text; uint8_t *ciph_text; uint8_t *tmp_text; size_t text_size; size_t block_size; uint8_t *iv; size_t iv_len; uint8_t tag[96 / 8]; uint8_t tmp_tag[96 / 8]; TEE_OperationHandle oph; TEEC_Session *s; size_t in_count; size_t out_count; size_t buf_count; }; static bool process_bytes_4017(ADBG_Case_t *c, struct buf_state *bs, size_t count) { TEE_Result res = TEEC_SUCCESS; size_t new_buf_count = 0; void *reference = NULL; void *src = NULL; size_t out = 0; size_t dlen = 0; if (bs->decrypt) { src = bs->ciph_text + bs->in_count; reference = bs->plain_text + bs->out_count; } else { src = bs->plain_text + bs->in_count; reference = bs->ciph_text + bs->out_count; } bs->in_count += count; if (bs->buffer_two_blocks) { if (bs->in_count > bs->block_size) new_buf_count = ((bs->in_count - 1) % bs->block_size) + bs->block_size + 1; else new_buf_count = bs->in_count; } else { new_buf_count = bs->in_count % bs->block_size; } out = bs->buf_count + count - new_buf_count; bs->out_count += out; bs->buf_count = new_buf_count; if (bs->auth_enc) { res = ta_crypt_cmd_ae_update(c, bs->s, bs->oph, src, count, NULL, &dlen); if (!res) return ADBG_EXPECT_COMPARE_UNSIGNED(c, dlen, ==, 0) && ADBG_EXPECT_COMPARE_UNSIGNED(c, dlen, ==, out); if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SHORT_BUFFER, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, dlen, ==, out)) return false; res = ta_crypt_cmd_ae_update(c, bs->s, bs->oph, src, count, bs->tmp_text, &dlen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_BUFFER(c, reference, out, bs->tmp_text, dlen)) return false; } else { res = ta_crypt_cmd_cipher_update(c, bs->s, bs->oph, src, count, NULL, &dlen); if (!res) return ADBG_EXPECT_COMPARE_UNSIGNED(c, dlen, ==, out); if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SHORT_BUFFER, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, dlen, ==, out)) return false; res = ta_crypt_cmd_cipher_update(c, bs->s, bs->oph, src, count, bs->tmp_text, &dlen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_BUFFER(c, reference, out, bs->tmp_text, dlen)) return false; } return true; } static bool process_bytes_final_4017(ADBG_Case_t *c, struct buf_state *bs) { TEEC_Result res = TEEC_SUCCESS; void *reference = NULL; size_t src_len = 0; void *src = NULL; size_t dlen = 0; size_t tlen = 0; if (bs->decrypt) { src = bs->ciph_text + bs->in_count; reference = bs->plain_text + bs->out_count; } else { src = bs->plain_text + bs->in_count; reference = bs->ciph_text + bs->out_count; } src_len = bs->text_size - bs->in_count; if (bs->auth_enc) { if (bs->decrypt) res = ta_crypt_cmd_ae_decrypt_final(c, bs->s, bs->oph, src, src_len, NULL, &dlen, bs->tag, sizeof(bs->tag)); else res = ta_crypt_cmd_ae_encrypt_final(c, bs->s, bs->oph, src, src_len, NULL, &dlen, NULL, &tlen); if (!res && bs->decrypt) return ADBG_EXPECT_COMPARE_UNSIGNED(c, dlen, ==, src_len); if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SHORT_BUFFER, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, bs->text_size - bs->out_count, ==, dlen)) return false; if (!bs->decrypt && !ADBG_EXPECT_COMPARE_UNSIGNED(c, sizeof(bs->tag), ==, tlen)) return false; if (bs->decrypt) res = ta_crypt_cmd_ae_decrypt_final(c, bs->s, bs->oph, src, src_len, bs->tmp_text, &dlen, bs->tag, sizeof(bs->tag)); else res = ta_crypt_cmd_ae_encrypt_final(c, bs->s, bs->oph, src, src_len, bs->tmp_text, &dlen, bs->tmp_tag, &tlen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_BUFFER(c, reference, bs->text_size - bs->out_count, bs->tmp_text, dlen)) return false; if (!bs->decrypt && !ADBG_EXPECT_BUFFER(c, bs->tag, sizeof(bs->tag), bs->tmp_tag, tlen)) return false; } else { res = ta_crypt_cmd_cipher_do_final(c, bs->s, bs->oph, src, src_len, NULL, &dlen); if (!res) return ADBG_EXPECT_COMPARE_UNSIGNED(c, dlen, ==, src_len); if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SHORT_BUFFER, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, bs->text_size - bs->out_count, ==, dlen)) return false; res = ta_crypt_cmd_cipher_do_final(c, bs->s, bs->oph, src, src_len, bs->tmp_text, &dlen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_BUFFER(c, reference, bs->text_size - bs->out_count, bs->tmp_text, dlen)) return false; } return true; } static bool process_text_4017(ADBG_Case_t *c, struct buf_state *bs, size_t initial_count, size_t middle_count) { TEEC_Result res = TEEC_SUCCESS; size_t n = 0; bs->in_count = 0; bs->out_count = 0; bs->buf_count = 0; if (bs->auth_enc) res = ta_crypt_cmd_ae_init(c, bs->s, bs->oph, bs->iv, bs->iv_len, sizeof(bs->tag), 0, bs->text_size); else res = ta_crypt_cmd_cipher_init(c, bs->s, bs->oph, bs->iv, bs->iv_len); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return false; if (initial_count && !ADBG_EXPECT_TRUE(c, process_bytes_4017(c, bs, initial_count))) return false; for (n = 0; n < middle_count && n + initial_count < bs->text_size; n++) if (!ADBG_EXPECT_TRUE(c, process_bytes_4017(c, bs, 1))) return false; return process_bytes_final_4017(c, bs); } static bool alloc_oph_4017(ADBG_Case_t *c, TEEC_Session *s, uint32_t algo, uint32_t mode, void *key, size_t key_size, TEE_OperationHandle *oph) { TEEC_Result res = TEEC_SUCCESS; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL; TEE_Attribute key_attr = { .attributeID = TEE_ATTR_SECRET_VALUE, .content.ref.buffer = key, .content.ref.length = key_size, }; bool ret = false; res = ta_crypt_cmd_allocate_transient_object(c, s, TEE_TYPE_AES, key_size * 8, &key_handle); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = ta_crypt_cmd_populate_transient_object(c, s, key_handle, &key_attr, 1); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; if (algo == TEE_ALG_AES_XTS) { res = ta_crypt_cmd_allocate_transient_object(c, s, TEE_TYPE_AES, key_size * 8, &key2_handle); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = ta_crypt_cmd_populate_transient_object(c, s, key2_handle, &key_attr, 1); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = ta_crypt_cmd_allocate_operation(c, s, oph, algo, mode, key_size * 8 * 2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = ta_crypt_cmd_set_operation_key2(c, s, *oph, key_handle, key2_handle); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; } else { res = ta_crypt_cmd_allocate_operation(c, s, oph, algo, mode, key_size * 8); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = ta_crypt_cmd_set_operation_key(c, s, *oph, key_handle); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; } ret = true; out: if (key2_handle) ta_crypt_cmd_free_transient_object(c, s, key2_handle); if (key_handle) ta_crypt_cmd_free_transient_object(c, s, key_handle); return ret; } static bool do_algo_4017(ADBG_Case_t *c, TEEC_Session *s, uint32_t algo, size_t extra_size) { TEEC_Result res = TEEC_SUCCESS; struct buf_state bs = { .s = s, }; size_t middle_count = 0; uint8_t iv[16] = { }; uint8_t key[16] = { }; size_t prev_n = 0; bool ret = false; size_t dlen = 0; size_t tlen = 0; size_t n = 0; if (level >= 12) middle_count = 2 * TEE_AES_BLOCK_SIZE; bs.block_size = 16; bs.text_size = bs.block_size * 6 + extra_size; bs.plain_text = calloc(3, bs.text_size); if (!ADBG_EXPECT_NOT_NULL(c, bs.plain_text)) return false; bs.ciph_text = bs.plain_text + bs.text_size; bs.tmp_text = bs.ciph_text + bs.text_size; for (n = 0; n < bs.text_size; n++) bs.plain_text[n] = n + 1; for (n = 0; n < ARRAY_SIZE(iv); n++) iv[n] = n + 1; for (n = 0; n < ARRAY_SIZE(key); n++) key[n] = n + 1; if (!ADBG_EXPECT_TRUE(c, alloc_oph_4017(c, s, algo, TEE_MODE_ENCRYPT, key, sizeof(key), &bs.oph))) return false; if (algo != TEE_ALG_AES_ECB_NOPAD) { bs.iv = iv; bs.iv_len = sizeof(iv); } if (algo == TEE_ALG_AES_CCM) bs.iv_len = 13; if (algo == TEE_ALG_AES_CTR || algo == TEE_ALG_AES_GCM) bs.block_size = 1; else bs.block_size = TEE_AES_BLOCK_SIZE; if (algo == TEE_ALG_AES_CTS || algo == TEE_ALG_AES_XTS) bs.buffer_two_blocks = true; if (algo == TEE_ALG_AES_CCM || algo == TEE_ALG_AES_GCM) bs.auth_enc = true; if (bs.auth_enc) { res = ta_crypt_cmd_ae_init(c, bs.s, bs.oph, bs.iv, bs.iv_len, sizeof(bs.tag), 0, bs.text_size); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = ta_crypt_cmd_ae_encrypt_final(c, bs.s, bs.oph, bs.plain_text, bs.text_size, NULL, &dlen, NULL, &tlen); if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SHORT_BUFFER, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, bs.text_size, ==, dlen)) goto out; res = ta_crypt_cmd_ae_encrypt_final(c, bs.s, bs.oph, bs.plain_text, bs.text_size, bs.ciph_text, &dlen, bs.tag, &tlen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, bs.text_size, ==, dlen)) goto out; } else { res = ta_crypt_cmd_cipher_init(c, bs.s, bs.oph, bs.iv, bs.iv_len); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = ta_crypt_cmd_cipher_do_final(c, bs.s, bs.oph, bs.plain_text, bs.text_size, NULL, &dlen); if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SHORT_BUFFER, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, bs.text_size, ==, dlen)) goto out; res = ta_crypt_cmd_cipher_do_final(c, bs.s, bs.oph, bs.plain_text, bs.text_size, bs.ciph_text, &dlen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_COMPARE_UNSIGNED(c, bs.text_size, ==, dlen)) goto out; } for (n = 0; n < bs.text_size; n++) { /* * If level < 12 test with initial count of: * 0, 1, 15 for each AES block, that is, * 0, 1, 15, 16, 17, 31, 32, 33, 47, 48, 49, 63, 64, 65, * 79, 80, 81, and 95 * If level >= 12 test with initial count of each n, an * exhaustive of every possible initial count. * * If level < 12 test with middle_count of 32 else 0. * (middle_count - n) bytes are processed one by one. * * The idea is to try to match all corner cases when * buffering AES blocks. With special focus on what happens * when a complete block has been buffered. */ if (level < 12 && (n % TEE_AES_BLOCK_SIZE) > 1 && (n % TEE_AES_BLOCK_SIZE) < (TEE_AES_BLOCK_SIZE - 1)) continue; ret = process_text_4017(c, &bs, n, middle_count); if (!ADBG_EXPECT_TRUE(c, ret)) { Do_ADBG_Log("Failed processing with initial_count %zu (previous %zu)", n, prev_n); goto out; } prev_n = n; } ta_crypt_cmd_free_operation(c, s, bs.oph); bs.oph = TEE_HANDLE_NULL; if (!ADBG_EXPECT_TRUE(c, alloc_oph_4017(c, s, algo, TEE_MODE_DECRYPT, key, sizeof(key), &bs.oph))) goto out; bs.decrypt = true; /* Only test matching decryption for levels above 13 */ for (n = 0; level > 13 && n < bs.text_size; n++) { if (level < 12 && (n % TEE_AES_BLOCK_SIZE) > 1 && (n % TEE_AES_BLOCK_SIZE) < (TEE_AES_BLOCK_SIZE - 1)) continue; ret = process_text_4017(c, &bs, n, middle_count); if (!ADBG_EXPECT_TRUE(c, ret)) { Do_ADBG_Log("Failed processing with initial_count %zu (previous %zu)", n, prev_n); goto out; } prev_n = n; } ret = true; out: if (bs.oph) ta_crypt_cmd_free_operation(c, s, bs.oph); free(bs.plain_text); return ret; } static void xtest_tee_test_4017(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; uint32_t ret_orig = 0; TEEC_Session sess = { }; res = xtest_teec_open_session(&sess, &crypt_user_ta_uuid, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_ECB_NOPAD"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_ECB_NOPAD, 0)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_ECB_NOPAD"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_CBC_NOPAD"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_CBC_NOPAD, 0)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_CBC_NOPAD"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_CTR"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_CTR, 0)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_CTR"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_CTR 1 extra byte"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_CTR, 1)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_CTR 1 extra byte"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_CTS"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_CTS, 0)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_CTS"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_CTS 1 extra byte"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_CTS, 1)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_CTS 1 extra byte"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_XTS"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_XTS, 0)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_XTS"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_XTS 1 extra byte"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_XTS, 1)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_XTS 1 extra byte"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_GCM"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_GCM, 0)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_GCM"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_GCM 1 extra byte"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_GCM, 1)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_GCM 1 extra byte"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_CCM"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_CCM, 0)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_CCM"); Do_ADBG_BeginSubCase(c, "TEE_ALG_AES_CCM 1 extra byte"); ADBG_EXPECT_TRUE(c, do_algo_4017(c, &sess, TEE_ALG_AES_CCM, 1)); Do_ADBG_EndSubCase(c, "TEE_ALG_AES_CCM 1 extra byte"); TEEC_CloseSession(&sess); } ADBG_CASE_DEFINE(regression, 4017, xtest_tee_test_4017, "Test TEE Internal API Cipher block buffering"); optee_test-4.3.0/host/xtest/regression_4000_data.h000066400000000000000000014412151464074351400220220ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2021, SumUp Services GmbH * Copyright 2023 NXP */ #ifndef XTEST_4000_DATA_H #define XTEST_4000_DATA_H #include #include #include /* * XTS-AES Test data from: * http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */ /* * XTS-AES applied for a data unit of 32 bytes, 32 bytes key material. */ /* Vector 1 */ static const uint8_t ciph_data_aes_xts_vect1_key1[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const uint8_t ciph_data_aes_xts_vect1_key2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const uint8_t ciph_data_aes_xts_vect1_iv[16] = { 0x0 }; static const uint8_t ciph_data_aes_xts_vect1_ptx[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; /* TWK 66e94bd4ef8a2c3b884cfa59ca342b2eccd297a8df1559761099f4b39469565c */ static const uint8_t ciph_data_aes_xts_vect1_ctx[] = { 0x91, 0x7c, 0xf6, 0x9e, 0xbd, 0x68, 0xb2, 0xec, 0x9b, 0x9f, 0xe9, 0xa3, 0xea, 0xdd, 0xa6, 0x92, 0xcd, 0x43, 0xd2, 0xf5, 0x95, 0x98, 0xed, 0x85, 0x8c, 0x02, 0xc2, 0x65, 0x2f, 0xbf, 0x92, 0x2e, }; /* Vector 2 */ static const uint8_t ciph_data_aes_xts_vect2_key1[] = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, }; static const uint8_t ciph_data_aes_xts_vect2_key2[] = { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, }; static const uint8_t ciph_data_aes_xts_vect2_iv[16] = { 0x33, 0x33, 0x33, 0x33, 0x33 }; static const uint8_t ciph_data_aes_xts_vect2_ptx[] = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, }; /* TWK 3f803bcd0d7fd2b37558419f59d5cda6f900779a1bfea467ebb0823eb3aa9b4d */ static const uint8_t ciph_data_aes_xts_vect2_ctx[] = { 0xc4, 0x54, 0x18, 0x5e, 0x6a, 0x16, 0x93, 0x6e, 0x39, 0x33, 0x40, 0x38, 0xac, 0xef, 0x83, 0x8b, 0xfb, 0x18, 0x6f, 0xff, 0x74, 0x80, 0xad, 0xc4, 0x28, 0x93, 0x82, 0xec, 0xd6, 0xd3, 0x94, 0xf0, }; /* Vector 3 */ static const uint8_t ciph_data_aes_xts_vect3_key1[] = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, }; static const uint8_t ciph_data_aes_xts_vect3_key2[] = { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, }; static const uint8_t ciph_data_aes_xts_vect3_iv[16] = { 0x33, 0x33, 0x33, 0x33, 0x33 }; static const uint8_t ciph_data_aes_xts_vect3_ptx[] = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, }; /* TWK 3f803bcd0d7fd2b37558419f59d5cda6f900779a1bfea467ebb0823eb3aa9b4d */ static const uint8_t ciph_data_aes_xts_vect3_ctx[] = { 0xaf, 0x85, 0x33, 0x6b, 0x59, 0x7a, 0xfc, 0x1a, 0x90, 0x0b, 0x2e, 0xb2, 0x1e, 0xc9, 0x49, 0xd2, 0x92, 0xdf, 0x4c, 0x04, 0x7e, 0x0b, 0x21, 0x53, 0x21, 0x86, 0xa5, 0x97, 0x1a, 0x22, 0x7a, 0x89, }; /* * XTS-AES-128 applied for a data unit of 512 bytes */ /* Vector 4 */ static const uint8_t ciph_data_aes_xts_vect4_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, }; static const uint8_t ciph_data_aes_xts_vect4_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, }; static const uint8_t ciph_data_aes_xts_vect4_iv[16] = { 0x00 }; static const uint8_t ciph_data_aes_xts_vect4_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t ciph_data_aes_xts_vect4_ctx[] = { 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76, 0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2, 0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25, 0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c, 0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f, 0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00, 0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad, 0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12, 0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5, 0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5, 0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc, 0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce, 0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4, 0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84, 0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a, 0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65, 0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89, 0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51, 0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15, 0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8, 0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed, 0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91, 0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e, 0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34, 0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b, 0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5, 0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4, 0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c, 0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd, 0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3, 0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f, 0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e, 0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91, 0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19, 0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1, 0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc, 0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed, 0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde, 0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98, 0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3, 0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca, 0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6, 0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc, 0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44, 0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0, 0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95, 0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4, 0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd, 0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13, 0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7, 0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a, 0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52, 0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a, 0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38, 0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e, 0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e, 0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad, 0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8, 0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c, 0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d, 0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f, 0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2, 0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea, 0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68, }; /* Vector 5 */ static const uint8_t ciph_data_aes_xts_vect5_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, }; static const uint8_t ciph_data_aes_xts_vect5_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, }; static const uint8_t ciph_data_aes_xts_vect5_iv[16] = { 0x01 }; static const uint8_t ciph_data_aes_xts_vect5_ptx[] = { 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76, 0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2, 0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25, 0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c, 0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f, 0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00, 0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad, 0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12, 0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5, 0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5, 0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc, 0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce, 0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4, 0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84, 0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a, 0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65, 0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89, 0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51, 0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15, 0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8, 0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed, 0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91, 0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e, 0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34, 0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b, 0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5, 0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4, 0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c, 0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd, 0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3, 0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f, 0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e, 0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91, 0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19, 0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1, 0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc, 0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed, 0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde, 0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98, 0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3, 0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca, 0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6, 0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc, 0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44, 0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0, 0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95, 0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4, 0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd, 0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13, 0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7, 0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a, 0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52, 0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a, 0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38, 0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e, 0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e, 0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad, 0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8, 0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c, 0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d, 0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f, 0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2, 0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea, 0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68, }; static const uint8_t ciph_data_aes_xts_vect5_ctx[] = { 0x26, 0x4d, 0x3c, 0xa8, 0x51, 0x21, 0x94, 0xfe, 0xc3, 0x12, 0xc8, 0xc9, 0x89, 0x1f, 0x27, 0x9f, 0xef, 0xdd, 0x60, 0x8d, 0x0c, 0x02, 0x7b, 0x60, 0x48, 0x3a, 0x3f, 0xa8, 0x11, 0xd6, 0x5e, 0xe5, 0x9d, 0x52, 0xd9, 0xe4, 0x0e, 0xc5, 0x67, 0x2d, 0x81, 0x53, 0x2b, 0x38, 0xb6, 0xb0, 0x89, 0xce, 0x95, 0x1f, 0x0f, 0x9c, 0x35, 0x59, 0x0b, 0x8b, 0x97, 0x8d, 0x17, 0x52, 0x13, 0xf3, 0x29, 0xbb, 0x1c, 0x2f, 0xd3, 0x0f, 0x2f, 0x7f, 0x30, 0x49, 0x2a, 0x61, 0xa5, 0x32, 0xa7, 0x9f, 0x51, 0xd3, 0x6f, 0x5e, 0x31, 0xa7, 0xc9, 0xa1, 0x2c, 0x28, 0x60, 0x82, 0xff, 0x7d, 0x23, 0x94, 0xd1, 0x8f, 0x78, 0x3e, 0x1a, 0x8e, 0x72, 0xc7, 0x22, 0xca, 0xaa, 0xa5, 0x2d, 0x8f, 0x06, 0x56, 0x57, 0xd2, 0x63, 0x1f, 0xd2, 0x5b, 0xfd, 0x8e, 0x5b, 0xaa, 0xd6, 0xe5, 0x27, 0xd7, 0x63, 0x51, 0x75, 0x01, 0xc6, 0x8c, 0x5e, 0xdc, 0x3c, 0xdd, 0x55, 0x43, 0x5c, 0x53, 0x2d, 0x71, 0x25, 0xc8, 0x61, 0x4d, 0xee, 0xd9, 0xad, 0xaa, 0x3a, 0xca, 0xde, 0x58, 0x88, 0xb8, 0x7b, 0xef, 0x64, 0x1c, 0x4c, 0x99, 0x4c, 0x80, 0x91, 0xb5, 0xbc, 0xd3, 0x87, 0xf3, 0x96, 0x3f, 0xb5, 0xbc, 0x37, 0xaa, 0x92, 0x2f, 0xbf, 0xe3, 0xdf, 0x4e, 0x5b, 0x91, 0x5e, 0x6e, 0xb5, 0x14, 0x71, 0x7b, 0xdd, 0x2a, 0x74, 0x07, 0x9a, 0x50, 0x73, 0xf5, 0xc4, 0xbf, 0xd4, 0x6a, 0xdf, 0x7d, 0x28, 0x2e, 0x7a, 0x39, 0x3a, 0x52, 0x57, 0x9d, 0x11, 0xa0, 0x28, 0xda, 0x4d, 0x9c, 0xd9, 0xc7, 0x71, 0x24, 0xf9, 0x64, 0x8e, 0xe3, 0x83, 0xb1, 0xac, 0x76, 0x39, 0x30, 0xe7, 0x16, 0x2a, 0x8d, 0x37, 0xf3, 0x50, 0xb2, 0xf7, 0x4b, 0x84, 0x72, 0xcf, 0x09, 0x90, 0x20, 0x63, 0xc6, 0xb3, 0x2e, 0x8c, 0x2d, 0x92, 0x90, 0xce, 0xfb, 0xd7, 0x34, 0x6d, 0x1c, 0x77, 0x9a, 0x0d, 0xf5, 0x0e, 0xdc, 0xde, 0x45, 0x31, 0xda, 0x07, 0xb0, 0x99, 0xc6, 0x38, 0xe8, 0x3a, 0x75, 0x59, 0x44, 0xdf, 0x2a, 0xef, 0x1a, 0xa3, 0x17, 0x52, 0xfd, 0x32, 0x3d, 0xcb, 0x71, 0x0f, 0xb4, 0xbf, 0xbb, 0x9d, 0x22, 0xb9, 0x25, 0xbc, 0x35, 0x77, 0xe1, 0xb8, 0x94, 0x9e, 0x72, 0x9a, 0x90, 0xbb, 0xaf, 0xea, 0xcf, 0x7f, 0x78, 0x79, 0xe7, 0xb1, 0x14, 0x7e, 0x28, 0xba, 0x0b, 0xae, 0x94, 0x0d, 0xb7, 0x95, 0xa6, 0x1b, 0x15, 0xec, 0xf4, 0xdf, 0x8d, 0xb0, 0x7b, 0x82, 0x4b, 0xb0, 0x62, 0x80, 0x2c, 0xc9, 0x8a, 0x95, 0x45, 0xbb, 0x2a, 0xae, 0xed, 0x77, 0xcb, 0x3f, 0xc6, 0xdb, 0x15, 0xdc, 0xd7, 0xd8, 0x0d, 0x7d, 0x5b, 0xc4, 0x06, 0xc4, 0x97, 0x0a, 0x34, 0x78, 0xad, 0xa8, 0x89, 0x9b, 0x32, 0x91, 0x98, 0xeb, 0x61, 0xc1, 0x93, 0xfb, 0x62, 0x75, 0xaa, 0x8c, 0xa3, 0x40, 0x34, 0x4a, 0x75, 0xa8, 0x62, 0xae, 0xbe, 0x92, 0xee, 0xe1, 0xce, 0x03, 0x2f, 0xd9, 0x50, 0xb4, 0x7d, 0x77, 0x04, 0xa3, 0x87, 0x69, 0x23, 0xb4, 0xad, 0x62, 0x84, 0x4b, 0xf4, 0xa0, 0x9c, 0x4d, 0xbe, 0x8b, 0x43, 0x97, 0x18, 0x4b, 0x74, 0x71, 0x36, 0x0c, 0x95, 0x64, 0x88, 0x0a, 0xed, 0xdd, 0xb9, 0xba, 0xa4, 0xaf, 0x2e, 0x75, 0x39, 0x4b, 0x08, 0xcd, 0x32, 0xff, 0x47, 0x9c, 0x57, 0xa0, 0x7d, 0x3e, 0xab, 0x5d, 0x54, 0xde, 0x5f, 0x97, 0x38, 0xb8, 0xd2, 0x7f, 0x27, 0xa9, 0xf0, 0xab, 0x11, 0x79, 0x9d, 0x7b, 0x7f, 0xfe, 0xfb, 0x27, 0x04, 0xc9, 0x5c, 0x6a, 0xd1, 0x2c, 0x39, 0xf1, 0xe8, 0x67, 0xa4, 0xb7, 0xb1, 0xd7, 0x81, 0x8a, 0x4b, 0x75, 0x3d, 0xfd, 0x2a, 0x89, 0xcc, 0xb4, 0x5e, 0x00, 0x1a, 0x03, 0xa8, 0x67, 0xb1, 0x87, 0xf2, 0x25, 0xdd, }; /* Vector 6 */ static const uint8_t ciph_data_aes_xts_vect6_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, }; static const uint8_t ciph_data_aes_xts_vect6_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, }; static const uint8_t ciph_data_aes_xts_vect6_iv[16] = { 0x02 }; static const uint8_t ciph_data_aes_xts_vect6_ptx[] = { 0x26, 0x4d, 0x3c, 0xa8, 0x51, 0x21, 0x94, 0xfe, 0xc3, 0x12, 0xc8, 0xc9, 0x89, 0x1f, 0x27, 0x9f, 0xef, 0xdd, 0x60, 0x8d, 0x0c, 0x02, 0x7b, 0x60, 0x48, 0x3a, 0x3f, 0xa8, 0x11, 0xd6, 0x5e, 0xe5, 0x9d, 0x52, 0xd9, 0xe4, 0x0e, 0xc5, 0x67, 0x2d, 0x81, 0x53, 0x2b, 0x38, 0xb6, 0xb0, 0x89, 0xce, 0x95, 0x1f, 0x0f, 0x9c, 0x35, 0x59, 0x0b, 0x8b, 0x97, 0x8d, 0x17, 0x52, 0x13, 0xf3, 0x29, 0xbb, 0x1c, 0x2f, 0xd3, 0x0f, 0x2f, 0x7f, 0x30, 0x49, 0x2a, 0x61, 0xa5, 0x32, 0xa7, 0x9f, 0x51, 0xd3, 0x6f, 0x5e, 0x31, 0xa7, 0xc9, 0xa1, 0x2c, 0x28, 0x60, 0x82, 0xff, 0x7d, 0x23, 0x94, 0xd1, 0x8f, 0x78, 0x3e, 0x1a, 0x8e, 0x72, 0xc7, 0x22, 0xca, 0xaa, 0xa5, 0x2d, 0x8f, 0x06, 0x56, 0x57, 0xd2, 0x63, 0x1f, 0xd2, 0x5b, 0xfd, 0x8e, 0x5b, 0xaa, 0xd6, 0xe5, 0x27, 0xd7, 0x63, 0x51, 0x75, 0x01, 0xc6, 0x8c, 0x5e, 0xdc, 0x3c, 0xdd, 0x55, 0x43, 0x5c, 0x53, 0x2d, 0x71, 0x25, 0xc8, 0x61, 0x4d, 0xee, 0xd9, 0xad, 0xaa, 0x3a, 0xca, 0xde, 0x58, 0x88, 0xb8, 0x7b, 0xef, 0x64, 0x1c, 0x4c, 0x99, 0x4c, 0x80, 0x91, 0xb5, 0xbc, 0xd3, 0x87, 0xf3, 0x96, 0x3f, 0xb5, 0xbc, 0x37, 0xaa, 0x92, 0x2f, 0xbf, 0xe3, 0xdf, 0x4e, 0x5b, 0x91, 0x5e, 0x6e, 0xb5, 0x14, 0x71, 0x7b, 0xdd, 0x2a, 0x74, 0x07, 0x9a, 0x50, 0x73, 0xf5, 0xc4, 0xbf, 0xd4, 0x6a, 0xdf, 0x7d, 0x28, 0x2e, 0x7a, 0x39, 0x3a, 0x52, 0x57, 0x9d, 0x11, 0xa0, 0x28, 0xda, 0x4d, 0x9c, 0xd9, 0xc7, 0x71, 0x24, 0xf9, 0x64, 0x8e, 0xe3, 0x83, 0xb1, 0xac, 0x76, 0x39, 0x30, 0xe7, 0x16, 0x2a, 0x8d, 0x37, 0xf3, 0x50, 0xb2, 0xf7, 0x4b, 0x84, 0x72, 0xcf, 0x09, 0x90, 0x20, 0x63, 0xc6, 0xb3, 0x2e, 0x8c, 0x2d, 0x92, 0x90, 0xce, 0xfb, 0xd7, 0x34, 0x6d, 0x1c, 0x77, 0x9a, 0x0d, 0xf5, 0x0e, 0xdc, 0xde, 0x45, 0x31, 0xda, 0x07, 0xb0, 0x99, 0xc6, 0x38, 0xe8, 0x3a, 0x75, 0x59, 0x44, 0xdf, 0x2a, 0xef, 0x1a, 0xa3, 0x17, 0x52, 0xfd, 0x32, 0x3d, 0xcb, 0x71, 0x0f, 0xb4, 0xbf, 0xbb, 0x9d, 0x22, 0xb9, 0x25, 0xbc, 0x35, 0x77, 0xe1, 0xb8, 0x94, 0x9e, 0x72, 0x9a, 0x90, 0xbb, 0xaf, 0xea, 0xcf, 0x7f, 0x78, 0x79, 0xe7, 0xb1, 0x14, 0x7e, 0x28, 0xba, 0x0b, 0xae, 0x94, 0x0d, 0xb7, 0x95, 0xa6, 0x1b, 0x15, 0xec, 0xf4, 0xdf, 0x8d, 0xb0, 0x7b, 0x82, 0x4b, 0xb0, 0x62, 0x80, 0x2c, 0xc9, 0x8a, 0x95, 0x45, 0xbb, 0x2a, 0xae, 0xed, 0x77, 0xcb, 0x3f, 0xc6, 0xdb, 0x15, 0xdc, 0xd7, 0xd8, 0x0d, 0x7d, 0x5b, 0xc4, 0x06, 0xc4, 0x97, 0x0a, 0x34, 0x78, 0xad, 0xa8, 0x89, 0x9b, 0x32, 0x91, 0x98, 0xeb, 0x61, 0xc1, 0x93, 0xfb, 0x62, 0x75, 0xaa, 0x8c, 0xa3, 0x40, 0x34, 0x4a, 0x75, 0xa8, 0x62, 0xae, 0xbe, 0x92, 0xee, 0xe1, 0xce, 0x03, 0x2f, 0xd9, 0x50, 0xb4, 0x7d, 0x77, 0x04, 0xa3, 0x87, 0x69, 0x23, 0xb4, 0xad, 0x62, 0x84, 0x4b, 0xf4, 0xa0, 0x9c, 0x4d, 0xbe, 0x8b, 0x43, 0x97, 0x18, 0x4b, 0x74, 0x71, 0x36, 0x0c, 0x95, 0x64, 0x88, 0x0a, 0xed, 0xdd, 0xb9, 0xba, 0xa4, 0xaf, 0x2e, 0x75, 0x39, 0x4b, 0x08, 0xcd, 0x32, 0xff, 0x47, 0x9c, 0x57, 0xa0, 0x7d, 0x3e, 0xab, 0x5d, 0x54, 0xde, 0x5f, 0x97, 0x38, 0xb8, 0xd2, 0x7f, 0x27, 0xa9, 0xf0, 0xab, 0x11, 0x79, 0x9d, 0x7b, 0x7f, 0xfe, 0xfb, 0x27, 0x04, 0xc9, 0x5c, 0x6a, 0xd1, 0x2c, 0x39, 0xf1, 0xe8, 0x67, 0xa4, 0xb7, 0xb1, 0xd7, 0x81, 0x8a, 0x4b, 0x75, 0x3d, 0xfd, 0x2a, 0x89, 0xcc, 0xb4, 0x5e, 0x00, 0x1a, 0x03, 0xa8, 0x67, 0xb1, 0x87, 0xf2, 0x25, 0xdd, }; static const uint8_t ciph_data_aes_xts_vect6_ctx[] = { 0xfa, 0x76, 0x2a, 0x36, 0x80, 0xb7, 0x60, 0x07, 0x92, 0x8e, 0xd4, 0xa4, 0xf4, 0x9a, 0x94, 0x56, 0x03, 0x1b, 0x70, 0x47, 0x82, 0xe6, 0x5e, 0x16, 0xce, 0xcb, 0x54, 0xed, 0x7d, 0x01, 0x7b, 0x5e, 0x18, 0xab, 0xd6, 0x7b, 0x33, 0x8e, 0x81, 0x07, 0x8f, 0x21, 0xed, 0xb7, 0x86, 0x8d, 0x90, 0x1e, 0xbe, 0x9c, 0x73, 0x1a, 0x7c, 0x18, 0xb5, 0xe6, 0xde, 0xc1, 0xd6, 0xa7, 0x2e, 0x07, 0x8a, 0xc9, 0xa4, 0x26, 0x2f, 0x86, 0x0b, 0xee, 0xfa, 0x14, 0xf4, 0xe8, 0x21, 0x01, 0x82, 0x72, 0xe4, 0x11, 0xa9, 0x51, 0x50, 0x2b, 0x6e, 0x79, 0x06, 0x6e, 0x84, 0x25, 0x2c, 0x33, 0x46, 0xf3, 0xaa, 0x62, 0x34, 0x43, 0x51, 0xa2, 0x91, 0xd4, 0xbe, 0xdc, 0x7a, 0x07, 0x61, 0x8b, 0xde, 0xa2, 0xaf, 0x63, 0x14, 0x5c, 0xc7, 0xa4, 0xb8, 0xd4, 0x07, 0x06, 0x91, 0xae, 0x89, 0x0c, 0xd6, 0x57, 0x33, 0xe7, 0x94, 0x6e, 0x90, 0x21, 0xa1, 0xdf, 0xfc, 0x4c, 0x59, 0xf1, 0x59, 0x42, 0x5e, 0xe6, 0xd5, 0x0c, 0xa9, 0xb1, 0x35, 0xfa, 0x61, 0x62, 0xce, 0xa1, 0x8a, 0x93, 0x98, 0x38, 0xdc, 0x00, 0x0f, 0xb3, 0x86, 0xfa, 0xd0, 0x86, 0xac, 0xce, 0x5a, 0xc0, 0x7c, 0xb2, 0xec, 0xe7, 0xfd, 0x58, 0x0b, 0x00, 0xcf, 0xa5, 0xe9, 0x85, 0x89, 0x63, 0x1d, 0xc2, 0x5e, 0x8e, 0x2a, 0x3d, 0xaf, 0x2f, 0xfd, 0xec, 0x26, 0x53, 0x16, 0x59, 0x91, 0x2c, 0x9d, 0x8f, 0x7a, 0x15, 0xe5, 0x86, 0x5e, 0xa8, 0xfb, 0x58, 0x16, 0xd6, 0x20, 0x70, 0x52, 0xbd, 0x71, 0x28, 0xcd, 0x74, 0x3c, 0x12, 0xc8, 0x11, 0x87, 0x91, 0xa4, 0x73, 0x68, 0x11, 0x93, 0x5e, 0xb9, 0x82, 0xa5, 0x32, 0x34, 0x9e, 0x31, 0xdd, 0x40, 0x1e, 0x0b, 0x66, 0x0a, 0x56, 0x8c, 0xb1, 0xa4, 0x71, 0x1f, 0x55, 0x2f, 0x55, 0xde, 0xd5, 0x9f, 0x1f, 0x15, 0xbf, 0x71, 0x96, 0xb3, 0xca, 0x12, 0xa9, 0x1e, 0x48, 0x8e, 0xf5, 0x9d, 0x64, 0xf3, 0xa0, 0x2b, 0xf4, 0x52, 0x39, 0x49, 0x9a, 0xc6, 0x17, 0x6a, 0xe3, 0x21, 0xc4, 0xa2, 0x11, 0xec, 0x54, 0x53, 0x65, 0x97, 0x1c, 0x5d, 0x3f, 0x4f, 0x09, 0xd4, 0xeb, 0x13, 0x9b, 0xfd, 0xf2, 0x07, 0x3d, 0x33, 0x18, 0x0b, 0x21, 0x00, 0x2b, 0x65, 0xcc, 0x98, 0x65, 0xe7, 0x6c, 0xb2, 0x4c, 0xd9, 0x2c, 0x87, 0x4c, 0x24, 0xc1, 0x83, 0x50, 0x39, 0x9a, 0x93, 0x6a, 0xb3, 0x63, 0x70, 0x79, 0x29, 0x5d, 0x76, 0xc4, 0x17, 0x77, 0x6b, 0x94, 0xef, 0xce, 0x3a, 0x0e, 0xf7, 0x20, 0x6b, 0x15, 0x11, 0x05, 0x19, 0x65, 0x5c, 0x95, 0x6c, 0xbd, 0x8b, 0x24, 0x89, 0x40, 0x5e, 0xe2, 0xb0, 0x9a, 0x6b, 0x6e, 0xeb, 0xe0, 0xc5, 0x37, 0x90, 0xa1, 0x2a, 0x89, 0x98, 0x37, 0x8b, 0x33, 0xa5, 0xb7, 0x11, 0x59, 0x62, 0x5f, 0x4b, 0xa4, 0x9d, 0x2a, 0x2f, 0xdb, 0xa5, 0x9f, 0xbf, 0x08, 0x97, 0xbc, 0x7a, 0xab, 0xd8, 0xd7, 0x07, 0xdc, 0x14, 0x0a, 0x80, 0xf0, 0xf3, 0x09, 0xf8, 0x35, 0xd3, 0xda, 0x54, 0xab, 0x58, 0x4e, 0x50, 0x1d, 0xfa, 0x0e, 0xe9, 0x77, 0xfe, 0xc5, 0x43, 0xf7, 0x41, 0x86, 0xa8, 0x02, 0xb9, 0xa3, 0x7a, 0xdb, 0x3e, 0x82, 0x91, 0xec, 0xa0, 0x4d, 0x66, 0x52, 0x0d, 0x22, 0x9e, 0x60, 0x40, 0x1e, 0x72, 0x82, 0xbe, 0xf4, 0x86, 0xae, 0x05, 0x9a, 0xa7, 0x06, 0x96, 0xe0, 0xe3, 0x05, 0xd7, 0x77, 0x14, 0x0a, 0x7a, 0x88, 0x3e, 0xcd, 0xcb, 0x69, 0xb9, 0xff, 0x93, 0x8e, 0x8a, 0x42, 0x31, 0x86, 0x4c, 0x69, 0xca, 0x2c, 0x20, 0x43, 0xbe, 0xd0, 0x07, 0xff, 0x3e, 0x60, 0x5e, 0x01, 0x4b, 0xcf, 0x51, 0x81, 0x38, 0xdc, 0x3a, 0x25, 0xc5, 0xe2, 0x36, 0x17, 0x1a, 0x2d, 0x01, 0xd6, }; /* Vector 7 */ static const uint8_t ciph_data_aes_xts_vect7_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, }; static const uint8_t ciph_data_aes_xts_vect7_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, }; static const uint8_t ciph_data_aes_xts_vect7_iv[16] = { 0xfd }; static const uint8_t ciph_data_aes_xts_vect7_ptx[] = { 0x8e, 0x41, 0xb7, 0x8c, 0x39, 0x0b, 0x5a, 0xf9, 0xd7, 0x58, 0xbb, 0x21, 0x4a, 0x67, 0xe9, 0xf6, 0xbf, 0x77, 0x27, 0xb0, 0x9a, 0xc6, 0x12, 0x40, 0x84, 0xc3, 0x76, 0x11, 0x39, 0x8f, 0xa4, 0x5d, 0xaa, 0xd9, 0x48, 0x68, 0x60, 0x0e, 0xd3, 0x91, 0xfb, 0x1a, 0xcd, 0x48, 0x57, 0xa9, 0x5b, 0x46, 0x6e, 0x62, 0xef, 0x9f, 0x4b, 0x37, 0x72, 0x44, 0xd1, 0xc1, 0x52, 0xe7, 0xb3, 0x0d, 0x73, 0x1a, 0xad, 0x30, 0xc7, 0x16, 0xd2, 0x14, 0xb7, 0x07, 0xae, 0xd9, 0x9e, 0xb5, 0xb5, 0xe5, 0x80, 0xb3, 0xe8, 0x87, 0xcf, 0x74, 0x97, 0x46, 0x56, 0x51, 0xd4, 0xb6, 0x0e, 0x60, 0x42, 0x05, 0x1d, 0xa3, 0x69, 0x3c, 0x3b, 0x78, 0xc1, 0x44, 0x89, 0x54, 0x3b, 0xe8, 0xb6, 0xad, 0x0b, 0xa6, 0x29, 0x56, 0x5b, 0xba, 0x20, 0x23, 0x13, 0xba, 0x7b, 0x0d, 0x0c, 0x94, 0xa3, 0x25, 0x2b, 0x67, 0x6f, 0x46, 0xcc, 0x02, 0xce, 0x0f, 0x8a, 0x7d, 0x34, 0xc0, 0xed, 0x22, 0x91, 0x29, 0x67, 0x3c, 0x1f, 0x61, 0xae, 0xd5, 0x79, 0xd0, 0x8a, 0x92, 0x03, 0xa2, 0x5a, 0xac, 0x3a, 0x77, 0xe9, 0xdb, 0x60, 0x26, 0x79, 0x96, 0xdb, 0x38, 0xdf, 0x63, 0x73, 0x56, 0xd9, 0xdc, 0xd1, 0x63, 0x2e, 0x36, 0x99, 0x39, 0xf2, 0xa2, 0x9d, 0x89, 0x34, 0x5c, 0x66, 0xe0, 0x50, 0x66, 0xf1, 0xa3, 0x67, 0x7a, 0xef, 0x18, 0xde, 0xa4, 0x11, 0x3f, 0xae, 0xb6, 0x29, 0xe4, 0x67, 0x21, 0xa6, 0x6d, 0x0a, 0x7e, 0x78, 0x5d, 0x3e, 0x29, 0xaf, 0x25, 0x94, 0xeb, 0x67, 0xdf, 0xa9, 0x82, 0xaf, 0xfe, 0x0a, 0xac, 0x05, 0x8f, 0x6e, 0x15, 0x86, 0x42, 0x69, 0xb1, 0x35, 0x41, 0x82, 0x61, 0xfc, 0x3a, 0xfb, 0x08, 0x94, 0x72, 0xcf, 0x68, 0xc4, 0x5d, 0xd7, 0xf2, 0x31, 0xc6, 0x24, 0x9b, 0xa0, 0x25, 0x5e, 0x1e, 0x03, 0x38, 0x33, 0xfc, 0x4d, 0x00, 0xa3, 0xfe, 0x02, 0x13, 0x2d, 0x7b, 0xc3, 0x87, 0x36, 0x14, 0xb8, 0xae, 0xe3, 0x42, 0x73, 0x58, 0x1e, 0xa0, 0x32, 0x5c, 0x81, 0xf0, 0x27, 0x0a, 0xff, 0xa1, 0x36, 0x41, 0xd0, 0x52, 0xd3, 0x6f, 0x07, 0x57, 0xd4, 0x84, 0x01, 0x43, 0x54, 0xd0, 0x2d, 0x68, 0x83, 0xca, 0x15, 0xc2, 0x4d, 0x8c, 0x39, 0x56, 0xb1, 0xbd, 0x02, 0x7b, 0xcf, 0x41, 0xf1, 0x51, 0xfd, 0x80, 0x23, 0xc5, 0x34, 0x0e, 0x56, 0x06, 0xf3, 0x7e, 0x90, 0xfd, 0xb8, 0x7c, 0x86, 0xfb, 0x4f, 0xa6, 0x34, 0xb3, 0x71, 0x8a, 0x30, 0xba, 0xce, 0x06, 0xa6, 0x6e, 0xaf, 0x8f, 0x63, 0xc4, 0xaa, 0x3b, 0x63, 0x78, 0x26, 0xa8, 0x7f, 0xe8, 0xcf, 0xa4, 0x42, 0x82, 0xe9, 0x2c, 0xb1, 0x61, 0x5a, 0xf3, 0xa2, 0x8e, 0x53, 0xbc, 0x74, 0xc7, 0xcb, 0xa1, 0xa0, 0x97, 0x7b, 0xe9, 0x06, 0x5d, 0x0c, 0x1a, 0x5d, 0xec, 0x6c, 0x54, 0xae, 0x38, 0xd3, 0x7f, 0x37, 0xaa, 0x35, 0x28, 0x3e, 0x04, 0x8e, 0x55, 0x30, 0xa8, 0x5c, 0x4e, 0x7a, 0x29, 0xd7, 0xb9, 0x2e, 0xc0, 0xc3, 0x16, 0x9c, 0xdf, 0x2a, 0x80, 0x5c, 0x76, 0x04, 0xbc, 0xe6, 0x00, 0x49, 0xb9, 0xfb, 0x7b, 0x8e, 0xaa, 0xc1, 0x0f, 0x51, 0xae, 0x23, 0x79, 0x4c, 0xeb, 0xa6, 0x8b, 0xb5, 0x81, 0x12, 0xe2, 0x93, 0xb9, 0xb6, 0x92, 0xca, 0x72, 0x1b, 0x37, 0xc6, 0x62, 0xf8, 0x57, 0x4e, 0xd4, 0xdb, 0xa6, 0xf8, 0x8e, 0x17, 0x08, 0x81, 0xc8, 0x2c, 0xdd, 0xc1, 0x03, 0x4a, 0x0c, 0xa7, 0xe2, 0x84, 0xbf, 0x09, 0x62, 0xb6, 0xb2, 0x62, 0x92, 0xd8, 0x36, 0xfa, 0x9f, 0x73, 0xc1, 0xac, 0x77, 0x0e, 0xef, 0x0f, 0x2d, 0x3a, 0x1e, 0xaf, 0x61, 0xd3, 0xe0, 0x35, 0x55, 0xfd, 0x42, 0x4e, 0xed, 0xd6, 0x7e, 0x18, 0xa1, 0x80, 0x94, 0xf8, 0x88, }; static const uint8_t ciph_data_aes_xts_vect7_ctx[] = { 0xd5, 0x5f, 0x68, 0x4f, 0x81, 0xf4, 0x42, 0x6e, 0x9f, 0xde, 0x92, 0xa5, 0xff, 0x02, 0xdf, 0x2a, 0xc8, 0x96, 0xaf, 0x63, 0x96, 0x28, 0x88, 0xa9, 0x79, 0x10, 0xc1, 0x37, 0x9e, 0x20, 0xb0, 0xa3, 0xb1, 0xdb, 0x61, 0x3f, 0xb7, 0xfe, 0x2e, 0x07, 0x00, 0x43, 0x29, 0xea, 0x5c, 0x22, 0xbf, 0xd3, 0x3e, 0x3d, 0xbe, 0x4c, 0xf5, 0x8c, 0xc6, 0x08, 0xc2, 0xc2, 0x6c, 0x19, 0xa2, 0xe2, 0xfe, 0x22, 0xf9, 0x87, 0x32, 0xc2, 0xb5, 0xcb, 0x84, 0x4c, 0xc6, 0xc0, 0x70, 0x2d, 0x91, 0xe1, 0xd5, 0x0f, 0xc4, 0x38, 0x2a, 0x7e, 0xba, 0x56, 0x35, 0xcd, 0x60, 0x24, 0x32, 0xa2, 0x30, 0x6a, 0xc4, 0xce, 0x82, 0xf8, 0xd7, 0x0c, 0x8d, 0x9b, 0xc1, 0x5f, 0x91, 0x8f, 0xe7, 0x1e, 0x74, 0xc6, 0x22, 0xd5, 0xcf, 0x71, 0x17, 0x8b, 0xf6, 0xe0, 0xb9, 0xcc, 0x9f, 0x2b, 0x41, 0xdd, 0x8d, 0xbe, 0x44, 0x1c, 0x41, 0xcd, 0x0c, 0x73, 0xa6, 0xdc, 0x47, 0xa3, 0x48, 0xf6, 0x70, 0x2f, 0x9d, 0x0e, 0x9b, 0x1b, 0x14, 0x31, 0xe9, 0x48, 0xe2, 0x99, 0xb9, 0xec, 0x22, 0x72, 0xab, 0x2c, 0x5f, 0x0c, 0x7b, 0xe8, 0x6a, 0xff, 0xa5, 0xde, 0xc8, 0x7a, 0x0b, 0xee, 0x81, 0xd3, 0xd5, 0x00, 0x07, 0xed, 0xaa, 0x2b, 0xcf, 0xcc, 0xb3, 0x56, 0x05, 0x15, 0x5f, 0xf3, 0x6e, 0xd8, 0xed, 0xd4, 0xa4, 0x0d, 0xcd, 0x4b, 0x24, 0x3a, 0xcd, 0x11, 0xb2, 0xb9, 0x87, 0xbd, 0xbf, 0xaf, 0x91, 0xa7, 0xca, 0xc2, 0x7e, 0x9c, 0x5a, 0xea, 0x52, 0x5e, 0xe5, 0x3d, 0xe7, 0xb2, 0xd3, 0x33, 0x2c, 0x86, 0x44, 0x40, 0x2b, 0x82, 0x3e, 0x94, 0xa7, 0xdb, 0x26, 0x27, 0x6d, 0x2d, 0x23, 0xaa, 0x07, 0x18, 0x0f, 0x76, 0xb4, 0xfd, 0x29, 0xb9, 0xc0, 0x82, 0x30, 0x99, 0xc9, 0xd6, 0x2c, 0x51, 0x98, 0x80, 0xae, 0xe7, 0xe9, 0x69, 0x76, 0x17, 0xc1, 0x49, 0x7d, 0x47, 0xbf, 0x3e, 0x57, 0x19, 0x50, 0x31, 0x14, 0x21, 0xb6, 0xb7, 0x34, 0xd3, 0x8b, 0x0d, 0xb9, 0x1e, 0xb8, 0x53, 0x31, 0xb9, 0x1e, 0xa9, 0xf6, 0x15, 0x30, 0xf5, 0x45, 0x12, 0xa5, 0xa5, 0x2a, 0x4b, 0xad, 0x58, 0x9e, 0xb6, 0x97, 0x81, 0xd5, 0x37, 0xf2, 0x32, 0x97, 0xbb, 0x45, 0x9b, 0xda, 0xd2, 0x94, 0x8a, 0x29, 0xe1, 0x55, 0x0b, 0xf4, 0x78, 0x7e, 0x0b, 0xe9, 0x5b, 0xb1, 0x73, 0xcf, 0x5f, 0xab, 0x17, 0xda, 0xb7, 0xa1, 0x3a, 0x05, 0x2a, 0x63, 0x45, 0x3d, 0x97, 0xcc, 0xec, 0x1a, 0x32, 0x19, 0x54, 0x88, 0x6b, 0x7a, 0x12, 0x99, 0xfa, 0xae, 0xec, 0xae, 0x35, 0xc6, 0xea, 0xac, 0xa7, 0x53, 0xb0, 0x41, 0xb5, 0xe5, 0xf0, 0x93, 0xbf, 0x83, 0x39, 0x7f, 0xd2, 0x1d, 0xd6, 0xb3, 0x01, 0x20, 0x66, 0xfc, 0xc0, 0x58, 0xcc, 0x32, 0xc3, 0xb0, 0x9d, 0x75, 0x62, 0xde, 0xe2, 0x95, 0x09, 0xb5, 0x83, 0x93, 0x92, 0xc9, 0xff, 0x05, 0xf5, 0x1f, 0x31, 0x66, 0xaa, 0xac, 0x4a, 0xc5, 0xf2, 0x38, 0x03, 0x8a, 0x30, 0x45, 0xe6, 0xf7, 0x2e, 0x48, 0xef, 0x0f, 0xe8, 0xbc, 0x67, 0x5e, 0x82, 0xc3, 0x18, 0xa2, 0x68, 0xe4, 0x39, 0x70, 0x27, 0x1b, 0xf1, 0x19, 0xb8, 0x1b, 0xf6, 0xa9, 0x82, 0x74, 0x65, 0x54, 0xf8, 0x4e, 0x72, 0xb9, 0xf0, 0x02, 0x80, 0xa3, 0x20, 0xa0, 0x81, 0x42, 0x92, 0x3c, 0x23, 0xc8, 0x83, 0x42, 0x3f, 0xf9, 0x49, 0x82, 0x7f, 0x29, 0xbb, 0xac, 0xdc, 0x1c, 0xcd, 0xb0, 0x49, 0x38, 0xce, 0x60, 0x98, 0xc9, 0x5b, 0xa6, 0xb3, 0x25, 0x28, 0xf4, 0xef, 0x78, 0xee, 0xd7, 0x78, 0xb2, 0xe1, 0x22, 0xdd, 0xfd, 0x1c, 0xbd, 0xd1, 0x1d, 0x1c, 0x0a, 0x67, 0x83, 0xe0, 0x11, 0xfc, 0x53, 0x6d, 0x63, 0xd0, 0x53, 0x26, 0x06, 0x37, }; /* Vector 8 */ static const uint8_t ciph_data_aes_xts_vect8_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, }; static const uint8_t ciph_data_aes_xts_vect8_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, }; static const uint8_t ciph_data_aes_xts_vect8_iv[16] = { 0xfe }; static const uint8_t ciph_data_aes_xts_vect8_ptx[] = { 0xd5, 0x5f, 0x68, 0x4f, 0x81, 0xf4, 0x42, 0x6e, 0x9f, 0xde, 0x92, 0xa5, 0xff, 0x02, 0xdf, 0x2a, 0xc8, 0x96, 0xaf, 0x63, 0x96, 0x28, 0x88, 0xa9, 0x79, 0x10, 0xc1, 0x37, 0x9e, 0x20, 0xb0, 0xa3, 0xb1, 0xdb, 0x61, 0x3f, 0xb7, 0xfe, 0x2e, 0x07, 0x00, 0x43, 0x29, 0xea, 0x5c, 0x22, 0xbf, 0xd3, 0x3e, 0x3d, 0xbe, 0x4c, 0xf5, 0x8c, 0xc6, 0x08, 0xc2, 0xc2, 0x6c, 0x19, 0xa2, 0xe2, 0xfe, 0x22, 0xf9, 0x87, 0x32, 0xc2, 0xb5, 0xcb, 0x84, 0x4c, 0xc6, 0xc0, 0x70, 0x2d, 0x91, 0xe1, 0xd5, 0x0f, 0xc4, 0x38, 0x2a, 0x7e, 0xba, 0x56, 0x35, 0xcd, 0x60, 0x24, 0x32, 0xa2, 0x30, 0x6a, 0xc4, 0xce, 0x82, 0xf8, 0xd7, 0x0c, 0x8d, 0x9b, 0xc1, 0x5f, 0x91, 0x8f, 0xe7, 0x1e, 0x74, 0xc6, 0x22, 0xd5, 0xcf, 0x71, 0x17, 0x8b, 0xf6, 0xe0, 0xb9, 0xcc, 0x9f, 0x2b, 0x41, 0xdd, 0x8d, 0xbe, 0x44, 0x1c, 0x41, 0xcd, 0x0c, 0x73, 0xa6, 0xdc, 0x47, 0xa3, 0x48, 0xf6, 0x70, 0x2f, 0x9d, 0x0e, 0x9b, 0x1b, 0x14, 0x31, 0xe9, 0x48, 0xe2, 0x99, 0xb9, 0xec, 0x22, 0x72, 0xab, 0x2c, 0x5f, 0x0c, 0x7b, 0xe8, 0x6a, 0xff, 0xa5, 0xde, 0xc8, 0x7a, 0x0b, 0xee, 0x81, 0xd3, 0xd5, 0x00, 0x07, 0xed, 0xaa, 0x2b, 0xcf, 0xcc, 0xb3, 0x56, 0x05, 0x15, 0x5f, 0xf3, 0x6e, 0xd8, 0xed, 0xd4, 0xa4, 0x0d, 0xcd, 0x4b, 0x24, 0x3a, 0xcd, 0x11, 0xb2, 0xb9, 0x87, 0xbd, 0xbf, 0xaf, 0x91, 0xa7, 0xca, 0xc2, 0x7e, 0x9c, 0x5a, 0xea, 0x52, 0x5e, 0xe5, 0x3d, 0xe7, 0xb2, 0xd3, 0x33, 0x2c, 0x86, 0x44, 0x40, 0x2b, 0x82, 0x3e, 0x94, 0xa7, 0xdb, 0x26, 0x27, 0x6d, 0x2d, 0x23, 0xaa, 0x07, 0x18, 0x0f, 0x76, 0xb4, 0xfd, 0x29, 0xb9, 0xc0, 0x82, 0x30, 0x99, 0xc9, 0xd6, 0x2c, 0x51, 0x98, 0x80, 0xae, 0xe7, 0xe9, 0x69, 0x76, 0x17, 0xc1, 0x49, 0x7d, 0x47, 0xbf, 0x3e, 0x57, 0x19, 0x50, 0x31, 0x14, 0x21, 0xb6, 0xb7, 0x34, 0xd3, 0x8b, 0x0d, 0xb9, 0x1e, 0xb8, 0x53, 0x31, 0xb9, 0x1e, 0xa9, 0xf6, 0x15, 0x30, 0xf5, 0x45, 0x12, 0xa5, 0xa5, 0x2a, 0x4b, 0xad, 0x58, 0x9e, 0xb6, 0x97, 0x81, 0xd5, 0x37, 0xf2, 0x32, 0x97, 0xbb, 0x45, 0x9b, 0xda, 0xd2, 0x94, 0x8a, 0x29, 0xe1, 0x55, 0x0b, 0xf4, 0x78, 0x7e, 0x0b, 0xe9, 0x5b, 0xb1, 0x73, 0xcf, 0x5f, 0xab, 0x17, 0xda, 0xb7, 0xa1, 0x3a, 0x05, 0x2a, 0x63, 0x45, 0x3d, 0x97, 0xcc, 0xec, 0x1a, 0x32, 0x19, 0x54, 0x88, 0x6b, 0x7a, 0x12, 0x99, 0xfa, 0xae, 0xec, 0xae, 0x35, 0xc6, 0xea, 0xac, 0xa7, 0x53, 0xb0, 0x41, 0xb5, 0xe5, 0xf0, 0x93, 0xbf, 0x83, 0x39, 0x7f, 0xd2, 0x1d, 0xd6, 0xb3, 0x01, 0x20, 0x66, 0xfc, 0xc0, 0x58, 0xcc, 0x32, 0xc3, 0xb0, 0x9d, 0x75, 0x62, 0xde, 0xe2, 0x95, 0x09, 0xb5, 0x83, 0x93, 0x92, 0xc9, 0xff, 0x05, 0xf5, 0x1f, 0x31, 0x66, 0xaa, 0xac, 0x4a, 0xc5, 0xf2, 0x38, 0x03, 0x8a, 0x30, 0x45, 0xe6, 0xf7, 0x2e, 0x48, 0xef, 0x0f, 0xe8, 0xbc, 0x67, 0x5e, 0x82, 0xc3, 0x18, 0xa2, 0x68, 0xe4, 0x39, 0x70, 0x27, 0x1b, 0xf1, 0x19, 0xb8, 0x1b, 0xf6, 0xa9, 0x82, 0x74, 0x65, 0x54, 0xf8, 0x4e, 0x72, 0xb9, 0xf0, 0x02, 0x80, 0xa3, 0x20, 0xa0, 0x81, 0x42, 0x92, 0x3c, 0x23, 0xc8, 0x83, 0x42, 0x3f, 0xf9, 0x49, 0x82, 0x7f, 0x29, 0xbb, 0xac, 0xdc, 0x1c, 0xcd, 0xb0, 0x49, 0x38, 0xce, 0x60, 0x98, 0xc9, 0x5b, 0xa6, 0xb3, 0x25, 0x28, 0xf4, 0xef, 0x78, 0xee, 0xd7, 0x78, 0xb2, 0xe1, 0x22, 0xdd, 0xfd, 0x1c, 0xbd, 0xd1, 0x1d, 0x1c, 0x0a, 0x67, 0x83, 0xe0, 0x11, 0xfc, 0x53, 0x6d, 0x63, 0xd0, 0x53, 0x26, 0x06, 0x37, }; static const uint8_t ciph_data_aes_xts_vect8_ctx[] = { 0x72, 0xef, 0xc1, 0xeb, 0xfe, 0x1e, 0xe2, 0x59, 0x75, 0xa6, 0xeb, 0x3a, 0xa8, 0x58, 0x9d, 0xda, 0x2b, 0x26, 0x1f, 0x1c, 0x85, 0xbd, 0xab, 0x44, 0x2a, 0x9e, 0x5b, 0x2d, 0xd1, 0xd7, 0xc3, 0x95, 0x7a, 0x16, 0xfc, 0x08, 0xe5, 0x26, 0xd4, 0xb1, 0x22, 0x3f, 0x1b, 0x12, 0x32, 0xa1, 0x1a, 0xf2, 0x74, 0xc3, 0xd7, 0x0d, 0xac, 0x57, 0xf8, 0x3e, 0x09, 0x83, 0xc4, 0x98, 0xf1, 0xa6, 0xf1, 0xae, 0xcb, 0x02, 0x1c, 0x3e, 0x70, 0x08, 0x5a, 0x1e, 0x52, 0x7f, 0x1c, 0xe4, 0x1e, 0xe5, 0x91, 0x1a, 0x82, 0x02, 0x01, 0x61, 0x52, 0x9c, 0xd8, 0x27, 0x73, 0x76, 0x2d, 0xaf, 0x54, 0x59, 0xde, 0x94, 0xa0, 0xa8, 0x2a, 0xda, 0xe7, 0xe1, 0x70, 0x3c, 0x80, 0x85, 0x43, 0xc2, 0x9e, 0xd6, 0xfb, 0x32, 0xd9, 0xe0, 0x04, 0x32, 0x7c, 0x13, 0x55, 0x18, 0x0c, 0x99, 0x5a, 0x07, 0x74, 0x14, 0x93, 0xa0, 0x9c, 0x21, 0xba, 0x01, 0xa3, 0x87, 0x88, 0x2d, 0xa4, 0xf6, 0x25, 0x34, 0xb8, 0x7b, 0xb1, 0x5d, 0x60, 0xd1, 0x97, 0x20, 0x1c, 0x0f, 0xd3, 0xbf, 0x30, 0xc1, 0x50, 0x0a, 0x3e, 0xcf, 0xec, 0xdd, 0x66, 0xd8, 0x72, 0x1f, 0x90, 0xbc, 0xc4, 0xc1, 0x7e, 0xe9, 0x25, 0xc6, 0x1b, 0x0a, 0x03, 0x72, 0x7a, 0x9c, 0x0d, 0x5f, 0x5c, 0xa4, 0x62, 0xfb, 0xfa, 0x0a, 0xf1, 0xc2, 0x51, 0x3a, 0x9d, 0x9d, 0x4b, 0x53, 0x45, 0xbd, 0x27, 0xa5, 0xf6, 0xe6, 0x53, 0xf7, 0x51, 0x69, 0x3e, 0x6b, 0x6a, 0x2b, 0x8e, 0xad, 0x57, 0xd5, 0x11, 0xe0, 0x0e, 0x58, 0xc4, 0x5b, 0x7b, 0x8d, 0x00, 0x5a, 0xf7, 0x92, 0x88, 0xf5, 0xc7, 0xc2, 0x2f, 0xd4, 0xf1, 0xbf, 0x7a, 0x89, 0x8b, 0x03, 0xa5, 0x63, 0x4c, 0x6a, 0x1a, 0xe3, 0xf9, 0xfa, 0xe5, 0xde, 0x4f, 0x29, 0x6a, 0x28, 0x96, 0xb2, 0x3e, 0x7e, 0xd4, 0x3e, 0xd1, 0x4f, 0xa5, 0xa2, 0x80, 0x3f, 0x4d, 0x28, 0xf0, 0xd3, 0xff, 0xcf, 0x24, 0x75, 0x76, 0x77, 0xae, 0xbd, 0xb4, 0x7b, 0xb3, 0x88, 0x37, 0x87, 0x08, 0x94, 0x8a, 0x8d, 0x41, 0x26, 0xed, 0x18, 0x39, 0xe0, 0xda, 0x29, 0xa5, 0x37, 0xa8, 0xc1, 0x98, 0xb3, 0xc6, 0x6a, 0xb0, 0x07, 0x12, 0xdd, 0x26, 0x16, 0x74, 0xbf, 0x45, 0xa7, 0x3d, 0x67, 0xf7, 0x69, 0x14, 0xf8, 0x30, 0xca, 0x01, 0x4b, 0x65, 0x59, 0x6f, 0x27, 0xe4, 0xcf, 0x62, 0xde, 0x66, 0x12, 0x5a, 0x55, 0x66, 0xdf, 0x99, 0x75, 0x15, 0x56, 0x28, 0xb4, 0x00, 0xfb, 0xfb, 0x3a, 0x29, 0x04, 0x0e, 0xd5, 0x0f, 0xaf, 0xfd, 0xbb, 0x18, 0xae, 0xce, 0x7c, 0x5c, 0x44, 0x69, 0x32, 0x60, 0xaa, 0xb3, 0x86, 0xc0, 0xa3, 0x7b, 0x11, 0xb1, 0x14, 0xf1, 0xc4, 0x15, 0xae, 0xbb, 0x65, 0x3b, 0xe4, 0x68, 0x17, 0x94, 0x28, 0xd4, 0x3a, 0x4d, 0x8b, 0xc3, 0xec, 0x38, 0x81, 0x3e, 0xca, 0x30, 0xa1, 0x3c, 0xf1, 0xbb, 0x18, 0xd5, 0x24, 0xf1, 0x99, 0x2d, 0x44, 0xd8, 0xb1, 0xa4, 0x2e, 0xa3, 0x0b, 0x22, 0xe6, 0xc9, 0x5b, 0x19, 0x9d, 0x8d, 0x18, 0x2f, 0x88, 0x40, 0xb0, 0x9d, 0x05, 0x95, 0x85, 0xc3, 0x1a, 0xd6, 0x91, 0xfa, 0x06, 0x19, 0xff, 0x03, 0x8a, 0xca, 0x2c, 0x39, 0xa9, 0x43, 0x42, 0x11, 0x57, 0x36, 0x17, 0x17, 0xc4, 0x9d, 0x32, 0x20, 0x28, 0xa7, 0x46, 0x48, 0x11, 0x3b, 0xd8, 0xc9, 0xd7, 0xec, 0x77, 0xcf, 0x3c, 0x89, 0xc1, 0xec, 0x87, 0x18, 0xce, 0xff, 0x85, 0x16, 0xd9, 0x6b, 0x34, 0xc3, 0xc6, 0x14, 0xf1, 0x06, 0x99, 0xc9, 0xab, 0xc4, 0xed, 0x04, 0x11, 0x50, 0x62, 0x23, 0xbe, 0xa1, 0x6a, 0xf3, 0x5c, 0x88, 0x3a, 0xcc, 0xdb, 0xe1, 0x10, 0x4e, 0xef, 0x0c, 0xfd, 0xb5, 0x4e, 0x12, 0xfb, 0x23, 0x0a, }; /* Vector 9 */ static const uint8_t ciph_data_aes_xts_vect9_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, }; static const uint8_t ciph_data_aes_xts_vect9_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, }; static const uint8_t ciph_data_aes_xts_vect9_iv[16] = { 0xff }; static const uint8_t ciph_data_aes_xts_vect9_ptx[] = { 0x72, 0xef, 0xc1, 0xeb, 0xfe, 0x1e, 0xe2, 0x59, 0x75, 0xa6, 0xeb, 0x3a, 0xa8, 0x58, 0x9d, 0xda, 0x2b, 0x26, 0x1f, 0x1c, 0x85, 0xbd, 0xab, 0x44, 0x2a, 0x9e, 0x5b, 0x2d, 0xd1, 0xd7, 0xc3, 0x95, 0x7a, 0x16, 0xfc, 0x08, 0xe5, 0x26, 0xd4, 0xb1, 0x22, 0x3f, 0x1b, 0x12, 0x32, 0xa1, 0x1a, 0xf2, 0x74, 0xc3, 0xd7, 0x0d, 0xac, 0x57, 0xf8, 0x3e, 0x09, 0x83, 0xc4, 0x98, 0xf1, 0xa6, 0xf1, 0xae, 0xcb, 0x02, 0x1c, 0x3e, 0x70, 0x08, 0x5a, 0x1e, 0x52, 0x7f, 0x1c, 0xe4, 0x1e, 0xe5, 0x91, 0x1a, 0x82, 0x02, 0x01, 0x61, 0x52, 0x9c, 0xd8, 0x27, 0x73, 0x76, 0x2d, 0xaf, 0x54, 0x59, 0xde, 0x94, 0xa0, 0xa8, 0x2a, 0xda, 0xe7, 0xe1, 0x70, 0x3c, 0x80, 0x85, 0x43, 0xc2, 0x9e, 0xd6, 0xfb, 0x32, 0xd9, 0xe0, 0x04, 0x32, 0x7c, 0x13, 0x55, 0x18, 0x0c, 0x99, 0x5a, 0x07, 0x74, 0x14, 0x93, 0xa0, 0x9c, 0x21, 0xba, 0x01, 0xa3, 0x87, 0x88, 0x2d, 0xa4, 0xf6, 0x25, 0x34, 0xb8, 0x7b, 0xb1, 0x5d, 0x60, 0xd1, 0x97, 0x20, 0x1c, 0x0f, 0xd3, 0xbf, 0x30, 0xc1, 0x50, 0x0a, 0x3e, 0xcf, 0xec, 0xdd, 0x66, 0xd8, 0x72, 0x1f, 0x90, 0xbc, 0xc4, 0xc1, 0x7e, 0xe9, 0x25, 0xc6, 0x1b, 0x0a, 0x03, 0x72, 0x7a, 0x9c, 0x0d, 0x5f, 0x5c, 0xa4, 0x62, 0xfb, 0xfa, 0x0a, 0xf1, 0xc2, 0x51, 0x3a, 0x9d, 0x9d, 0x4b, 0x53, 0x45, 0xbd, 0x27, 0xa5, 0xf6, 0xe6, 0x53, 0xf7, 0x51, 0x69, 0x3e, 0x6b, 0x6a, 0x2b, 0x8e, 0xad, 0x57, 0xd5, 0x11, 0xe0, 0x0e, 0x58, 0xc4, 0x5b, 0x7b, 0x8d, 0x00, 0x5a, 0xf7, 0x92, 0x88, 0xf5, 0xc7, 0xc2, 0x2f, 0xd4, 0xf1, 0xbf, 0x7a, 0x89, 0x8b, 0x03, 0xa5, 0x63, 0x4c, 0x6a, 0x1a, 0xe3, 0xf9, 0xfa, 0xe5, 0xde, 0x4f, 0x29, 0x6a, 0x28, 0x96, 0xb2, 0x3e, 0x7e, 0xd4, 0x3e, 0xd1, 0x4f, 0xa5, 0xa2, 0x80, 0x3f, 0x4d, 0x28, 0xf0, 0xd3, 0xff, 0xcf, 0x24, 0x75, 0x76, 0x77, 0xae, 0xbd, 0xb4, 0x7b, 0xb3, 0x88, 0x37, 0x87, 0x08, 0x94, 0x8a, 0x8d, 0x41, 0x26, 0xed, 0x18, 0x39, 0xe0, 0xda, 0x29, 0xa5, 0x37, 0xa8, 0xc1, 0x98, 0xb3, 0xc6, 0x6a, 0xb0, 0x07, 0x12, 0xdd, 0x26, 0x16, 0x74, 0xbf, 0x45, 0xa7, 0x3d, 0x67, 0xf7, 0x69, 0x14, 0xf8, 0x30, 0xca, 0x01, 0x4b, 0x65, 0x59, 0x6f, 0x27, 0xe4, 0xcf, 0x62, 0xde, 0x66, 0x12, 0x5a, 0x55, 0x66, 0xdf, 0x99, 0x75, 0x15, 0x56, 0x28, 0xb4, 0x00, 0xfb, 0xfb, 0x3a, 0x29, 0x04, 0x0e, 0xd5, 0x0f, 0xaf, 0xfd, 0xbb, 0x18, 0xae, 0xce, 0x7c, 0x5c, 0x44, 0x69, 0x32, 0x60, 0xaa, 0xb3, 0x86, 0xc0, 0xa3, 0x7b, 0x11, 0xb1, 0x14, 0xf1, 0xc4, 0x15, 0xae, 0xbb, 0x65, 0x3b, 0xe4, 0x68, 0x17, 0x94, 0x28, 0xd4, 0x3a, 0x4d, 0x8b, 0xc3, 0xec, 0x38, 0x81, 0x3e, 0xca, 0x30, 0xa1, 0x3c, 0xf1, 0xbb, 0x18, 0xd5, 0x24, 0xf1, 0x99, 0x2d, 0x44, 0xd8, 0xb1, 0xa4, 0x2e, 0xa3, 0x0b, 0x22, 0xe6, 0xc9, 0x5b, 0x19, 0x9d, 0x8d, 0x18, 0x2f, 0x88, 0x40, 0xb0, 0x9d, 0x05, 0x95, 0x85, 0xc3, 0x1a, 0xd6, 0x91, 0xfa, 0x06, 0x19, 0xff, 0x03, 0x8a, 0xca, 0x2c, 0x39, 0xa9, 0x43, 0x42, 0x11, 0x57, 0x36, 0x17, 0x17, 0xc4, 0x9d, 0x32, 0x20, 0x28, 0xa7, 0x46, 0x48, 0x11, 0x3b, 0xd8, 0xc9, 0xd7, 0xec, 0x77, 0xcf, 0x3c, 0x89, 0xc1, 0xec, 0x87, 0x18, 0xce, 0xff, 0x85, 0x16, 0xd9, 0x6b, 0x34, 0xc3, 0xc6, 0x14, 0xf1, 0x06, 0x99, 0xc9, 0xab, 0xc4, 0xed, 0x04, 0x11, 0x50, 0x62, 0x23, 0xbe, 0xa1, 0x6a, 0xf3, 0x5c, 0x88, 0x3a, 0xcc, 0xdb, 0xe1, 0x10, 0x4e, 0xef, 0x0c, 0xfd, 0xb5, 0x4e, 0x12, 0xfb, 0x23, 0x0a, }; static const uint8_t ciph_data_aes_xts_vect9_ctx[] = { 0x32, 0x60, 0xae, 0x8d, 0xad, 0x1f, 0x4a, 0x32, 0xc5, 0xca, 0xfe, 0x3a, 0xb0, 0xeb, 0x95, 0x54, 0x9d, 0x46, 0x1a, 0x67, 0xce, 0xb9, 0xe5, 0xaa, 0x2d, 0x3a, 0xfb, 0x62, 0xde, 0xce, 0x05, 0x53, 0x19, 0x3b, 0xa5, 0x0c, 0x75, 0xbe, 0x25, 0x1e, 0x08, 0xd1, 0xd0, 0x8f, 0x10, 0x88, 0x57, 0x6c, 0x7e, 0xfd, 0xfa, 0xaf, 0x3f, 0x45, 0x95, 0x59, 0x57, 0x1e, 0x12, 0x51, 0x17, 0x53, 0xb0, 0x7a, 0xf0, 0x73, 0xf3, 0x5d, 0xa0, 0x6a, 0xf0, 0xce, 0x0b, 0xbf, 0x6b, 0x8f, 0x5c, 0xcc, 0x5c, 0xea, 0x50, 0x0e, 0xc1, 0xb2, 0x11, 0xbd, 0x51, 0xf6, 0x3b, 0x60, 0x6b, 0xf6, 0x52, 0x87, 0x96, 0xca, 0x12, 0x17, 0x3b, 0xa3, 0x9b, 0x89, 0x35, 0xee, 0x44, 0xcc, 0xce, 0x64, 0x6f, 0x90, 0xa4, 0x5b, 0xf9, 0xcc, 0xc5, 0x67, 0xf0, 0xac, 0xe1, 0x3d, 0xc2, 0xd5, 0x3e, 0xbe, 0xed, 0xc8, 0x1f, 0x58, 0xb2, 0xe4, 0x11, 0x79, 0xdd, 0xdf, 0x0d, 0x5a, 0x5c, 0x42, 0xf5, 0xd8, 0x50, 0x6c, 0x1a, 0x5d, 0x2f, 0x8f, 0x59, 0xf3, 0xea, 0x87, 0x3c, 0xbc, 0xd0, 0xee, 0xc1, 0x9a, 0xcb, 0xf3, 0x25, 0x42, 0x3b, 0xd3, 0xdc, 0xb8, 0xc2, 0xb1, 0xbf, 0x1d, 0x1e, 0xae, 0xd0, 0xeb, 0xa7, 0xf0, 0x69, 0x8e, 0x43, 0x14, 0xfb, 0xeb, 0x2f, 0x15, 0x66, 0xd1, 0xb9, 0x25, 0x30, 0x08, 0xcb, 0xcc, 0xf4, 0x5a, 0x2b, 0x0d, 0x9c, 0x5c, 0x9c, 0x21, 0x47, 0x4f, 0x40, 0x76, 0xe0, 0x2b, 0xe2, 0x60, 0x50, 0xb9, 0x9d, 0xee, 0x4f, 0xd6, 0x8a, 0x4c, 0xf8, 0x90, 0xe4, 0x96, 0xe4, 0xfc, 0xae, 0x7b, 0x70, 0xf9, 0x4e, 0xa5, 0xa9, 0x06, 0x2d, 0xa0, 0xda, 0xeb, 0xa1, 0x99, 0x3d, 0x2c, 0xcd, 0x1d, 0xd3, 0xc2, 0x44, 0xb8, 0x42, 0x88, 0x01, 0x49, 0x5a, 0x58, 0xb2, 0x16, 0x54, 0x7e, 0x7e, 0x84, 0x7c, 0x46, 0xd1, 0xd7, 0x56, 0x37, 0x7b, 0x62, 0x42, 0xd2, 0xe5, 0xfb, 0x83, 0xbf, 0x75, 0x2b, 0x54, 0xe0, 0xdf, 0x71, 0xe8, 0x89, 0xf3, 0xa2, 0xbb, 0x0f, 0x4c, 0x10, 0x80, 0x5b, 0xf3, 0xc5, 0x90, 0x37, 0x6e, 0x3c, 0x24, 0xe2, 0x2f, 0xf5, 0x7f, 0x7f, 0xa9, 0x65, 0x57, 0x73, 0x75, 0x32, 0x5c, 0xea, 0x5d, 0x92, 0x0d, 0xb9, 0x4b, 0x9c, 0x33, 0x6b, 0x45, 0x5f, 0x6e, 0x89, 0x4c, 0x01, 0x86, 0x6f, 0xe9, 0xfb, 0xb8, 0xc8, 0xd3, 0xf7, 0x0a, 0x29, 0x57, 0x28, 0x5f, 0x6d, 0xfb, 0x5d, 0xcd, 0x8c, 0xbf, 0x54, 0x78, 0x2f, 0x8f, 0xe7, 0x76, 0x6d, 0x47, 0x23, 0x81, 0x99, 0x13, 0xac, 0x77, 0x34, 0x21, 0xe3, 0xa3, 0x10, 0x95, 0x86, 0x6b, 0xad, 0x22, 0xc8, 0x6a, 0x60, 0x36, 0xb2, 0x51, 0x8b, 0x20, 0x59, 0xb4, 0x22, 0x9d, 0x18, 0xc8, 0xc2, 0xcc, 0xbd, 0xf9, 0x06, 0xc6, 0xcc, 0x6e, 0x82, 0x46, 0x4e, 0xe5, 0x7b, 0xdd, 0xb0, 0xbe, 0xbc, 0xb1, 0xdc, 0x64, 0x53, 0x25, 0xbf, 0xb3, 0xe6, 0x65, 0xef, 0x72, 0x51, 0x08, 0x2c, 0x88, 0xeb, 0xb1, 0xcf, 0x20, 0x3b, 0xd7, 0x79, 0xfd, 0xd3, 0x86, 0x75, 0x71, 0x3c, 0x8d, 0xaa, 0xdd, 0x17, 0xe1, 0xca, 0xbe, 0xe4, 0x32, 0xb0, 0x97, 0x87, 0xb6, 0xdd, 0xf3, 0x30, 0x4e, 0x38, 0xb7, 0x31, 0xb4, 0x5d, 0xf5, 0xdf, 0x51, 0xb7, 0x8f, 0xcf, 0xb3, 0xd3, 0x24, 0x66, 0x02, 0x8d, 0x0b, 0xa3, 0x65, 0x55, 0xe7, 0xe1, 0x1a, 0xb0, 0xee, 0x06, 0x66, 0x06, 0x1d, 0x16, 0x45, 0xd9, 0x62, 0x44, 0x4b, 0xc4, 0x7a, 0x38, 0x18, 0x89, 0x30, 0xa8, 0x4b, 0x4d, 0x56, 0x13, 0x95, 0xc7, 0x3c, 0x08, 0x70, 0x21, 0x92, 0x7c, 0xa6, 0x38, 0xb7, 0xaf, 0xc8, 0xa8, 0x67, 0x9c, 0xcb, 0x84, 0xc2, 0x65, 0x55, 0x44, 0x0e, 0xc7, 0xf1, 0x04, 0x45, 0xcd, }; /* * XTS-AES-256 applied for a data unit of 512 bytes */ /* Vector 10 */ static const uint8_t ciph_data_aes_xts_vect10_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27, }; static const uint8_t ciph_data_aes_xts_vect10_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92, }; static const uint8_t ciph_data_aes_xts_vect10_iv[16] = { 0xff }; static const uint8_t ciph_data_aes_xts_vect10_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t ciph_data_aes_xts_vect10_ctx[] = { 0x1c, 0x3b, 0x3a, 0x10, 0x2f, 0x77, 0x03, 0x86, 0xe4, 0x83, 0x6c, 0x99, 0xe3, 0x70, 0xcf, 0x9b, 0xea, 0x00, 0x80, 0x3f, 0x5e, 0x48, 0x23, 0x57, 0xa4, 0xae, 0x12, 0xd4, 0x14, 0xa3, 0xe6, 0x3b, 0x5d, 0x31, 0xe2, 0x76, 0xf8, 0xfe, 0x4a, 0x8d, 0x66, 0xb3, 0x17, 0xf9, 0xac, 0x68, 0x3f, 0x44, 0x68, 0x0a, 0x86, 0xac, 0x35, 0xad, 0xfc, 0x33, 0x45, 0xbe, 0xfe, 0xcb, 0x4b, 0xb1, 0x88, 0xfd, 0x57, 0x76, 0x92, 0x6c, 0x49, 0xa3, 0x09, 0x5e, 0xb1, 0x08, 0xfd, 0x10, 0x98, 0xba, 0xec, 0x70, 0xaa, 0xa6, 0x69, 0x99, 0xa7, 0x2a, 0x82, 0xf2, 0x7d, 0x84, 0x8b, 0x21, 0xd4, 0xa7, 0x41, 0xb0, 0xc5, 0xcd, 0x4d, 0x5f, 0xff, 0x9d, 0xac, 0x89, 0xae, 0xba, 0x12, 0x29, 0x61, 0xd0, 0x3a, 0x75, 0x71, 0x23, 0xe9, 0x87, 0x0f, 0x8a, 0xcf, 0x10, 0x00, 0x02, 0x08, 0x87, 0x89, 0x14, 0x29, 0xca, 0x2a, 0x3e, 0x7a, 0x7d, 0x7d, 0xf7, 0xb1, 0x03, 0x55, 0x16, 0x5c, 0x8b, 0x9a, 0x6d, 0x0a, 0x7d, 0xe8, 0xb0, 0x62, 0xc4, 0x50, 0x0d, 0xc4, 0xcd, 0x12, 0x0c, 0x0f, 0x74, 0x18, 0xda, 0xe3, 0xd0, 0xb5, 0x78, 0x1c, 0x34, 0x80, 0x3f, 0xa7, 0x54, 0x21, 0xc7, 0x90, 0xdf, 0xe1, 0xde, 0x18, 0x34, 0xf2, 0x80, 0xd7, 0x66, 0x7b, 0x32, 0x7f, 0x6c, 0x8c, 0xd7, 0x55, 0x7e, 0x12, 0xac, 0x3a, 0x0f, 0x93, 0xec, 0x05, 0xc5, 0x2e, 0x04, 0x93, 0xef, 0x31, 0xa1, 0x2d, 0x3d, 0x92, 0x60, 0xf7, 0x9a, 0x28, 0x9d, 0x6a, 0x37, 0x9b, 0xc7, 0x0c, 0x50, 0x84, 0x14, 0x73, 0xd1, 0xa8, 0xcc, 0x81, 0xec, 0x58, 0x3e, 0x96, 0x45, 0xe0, 0x7b, 0x8d, 0x96, 0x70, 0x65, 0x5b, 0xa5, 0xbb, 0xcf, 0xec, 0xc6, 0xdc, 0x39, 0x66, 0x38, 0x0a, 0xd8, 0xfe, 0xcb, 0x17, 0xb6, 0xba, 0x02, 0x46, 0x9a, 0x02, 0x0a, 0x84, 0xe1, 0x8e, 0x8f, 0x84, 0x25, 0x20, 0x70, 0xc1, 0x3e, 0x9f, 0x1f, 0x28, 0x9b, 0xe5, 0x4f, 0xbc, 0x48, 0x14, 0x57, 0x77, 0x8f, 0x61, 0x60, 0x15, 0xe1, 0x32, 0x7a, 0x02, 0xb1, 0x40, 0xf1, 0x50, 0x5e, 0xb3, 0x09, 0x32, 0x6d, 0x68, 0x37, 0x8f, 0x83, 0x74, 0x59, 0x5c, 0x84, 0x9d, 0x84, 0xf4, 0xc3, 0x33, 0xec, 0x44, 0x23, 0x88, 0x51, 0x43, 0xcb, 0x47, 0xbd, 0x71, 0xc5, 0xed, 0xae, 0x9b, 0xe6, 0x9a, 0x2f, 0xfe, 0xce, 0xb1, 0xbe, 0xc9, 0xde, 0x24, 0x4f, 0xbe, 0x15, 0x99, 0x2b, 0x11, 0xb7, 0x7c, 0x04, 0x0f, 0x12, 0xbd, 0x8f, 0x6a, 0x97, 0x5a, 0x44, 0xa0, 0xf9, 0x0c, 0x29, 0xa9, 0xab, 0xc3, 0xd4, 0xd8, 0x93, 0x92, 0x72, 0x84, 0xc5, 0x87, 0x54, 0xcc, 0xe2, 0x94, 0x52, 0x9f, 0x86, 0x14, 0xdc, 0xd2, 0xab, 0xa9, 0x91, 0x92, 0x5f, 0xed, 0xc4, 0xae, 0x74, 0xff, 0xac, 0x6e, 0x33, 0x3b, 0x93, 0xeb, 0x4a, 0xff, 0x04, 0x79, 0xda, 0x9a, 0x41, 0x0e, 0x44, 0x50, 0xe0, 0xdd, 0x7a, 0xe4, 0xc6, 0xe2, 0x91, 0x09, 0x00, 0x57, 0x5d, 0xa4, 0x01, 0xfc, 0x07, 0x05, 0x9f, 0x64, 0x5e, 0x8b, 0x7e, 0x9b, 0xfd, 0xef, 0x33, 0x94, 0x30, 0x54, 0xff, 0x84, 0x01, 0x14, 0x93, 0xc2, 0x7b, 0x34, 0x29, 0xea, 0xed, 0xb4, 0xed, 0x53, 0x76, 0x44, 0x1a, 0x77, 0xed, 0x43, 0x85, 0x1a, 0xd7, 0x7f, 0x16, 0xf5, 0x41, 0xdf, 0xd2, 0x69, 0xd5, 0x0d, 0x6a, 0x5f, 0x14, 0xfb, 0x0a, 0xab, 0x1c, 0xbb, 0x4c, 0x15, 0x50, 0xbe, 0x97, 0xf7, 0xab, 0x40, 0x66, 0x19, 0x3c, 0x4c, 0xaa, 0x77, 0x3d, 0xad, 0x38, 0x01, 0x4b, 0xd2, 0x09, 0x2f, 0xa7, 0x55, 0xc8, 0x24, 0xbb, 0x5e, 0x54, 0xc4, 0xf3, 0x6f, 0xfd, 0xa9, 0xfc, 0xea, 0x70, 0xb9, 0xc6, 0xe6, 0x93, 0xe1, 0x48, 0xc1, 0x51, }; /* Vector 11 */ static const uint8_t ciph_data_aes_xts_vect11_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27, }; static const uint8_t ciph_data_aes_xts_vect11_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92, }; static const uint8_t ciph_data_aes_xts_vect11_iv[16] = { 0xff, 0xff }; static const uint8_t ciph_data_aes_xts_vect11_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t ciph_data_aes_xts_vect11_ctx[] = { 0x77, 0xa3, 0x12, 0x51, 0x61, 0x8a, 0x15, 0xe6, 0xb9, 0x2d, 0x1d, 0x66, 0xdf, 0xfe, 0x7b, 0x50, 0xb5, 0x0b, 0xad, 0x55, 0x23, 0x05, 0xba, 0x02, 0x17, 0xa6, 0x10, 0x68, 0x8e, 0xff, 0x7e, 0x11, 0xe1, 0xd0, 0x22, 0x54, 0x38, 0xe0, 0x93, 0x24, 0x2d, 0x6d, 0xb2, 0x74, 0xfd, 0xe8, 0x01, 0xd4, 0xca, 0xe0, 0x6f, 0x20, 0x92, 0xc7, 0x28, 0xb2, 0x47, 0x85, 0x59, 0xdf, 0x58, 0xe8, 0x37, 0xc2, 0x46, 0x9e, 0xe4, 0xa4, 0xfa, 0x79, 0x4e, 0x4b, 0xbc, 0x7f, 0x39, 0xbc, 0x02, 0x6e, 0x3c, 0xb7, 0x2c, 0x33, 0xb0, 0x88, 0x8f, 0x25, 0xb4, 0xac, 0xf5, 0x6a, 0x2a, 0x98, 0x04, 0xf1, 0xce, 0x6d, 0x3d, 0x6e, 0x1d, 0xc6, 0xca, 0x18, 0x1d, 0x4b, 0x54, 0x61, 0x79, 0xd5, 0x55, 0x44, 0xaa, 0x77, 0x60, 0xc4, 0x0d, 0x06, 0x74, 0x15, 0x39, 0xc7, 0xe3, 0xcd, 0x9d, 0x2f, 0x66, 0x50, 0xb2, 0x01, 0x3f, 0xd0, 0xee, 0xb8, 0xc2, 0xb8, 0xe3, 0xd8, 0xd2, 0x40, 0xcc, 0xae, 0x2d, 0x4c, 0x98, 0x32, 0x0a, 0x74, 0x42, 0xe1, 0xc8, 0xd7, 0x5a, 0x42, 0xd6, 0xe6, 0xcf, 0xa4, 0xc2, 0xec, 0xa1, 0x79, 0x8d, 0x15, 0x8c, 0x7a, 0xec, 0xdf, 0x82, 0x49, 0x0f, 0x24, 0xbb, 0x9b, 0x38, 0xe1, 0x08, 0xbc, 0xda, 0x12, 0xc3, 0xfa, 0xf9, 0xa2, 0x11, 0x41, 0xc3, 0x61, 0x3b, 0x58, 0x36, 0x7f, 0x92, 0x2a, 0xaa, 0x26, 0xcd, 0x22, 0xf2, 0x3d, 0x70, 0x8d, 0xae, 0x69, 0x9a, 0xd7, 0xcb, 0x40, 0xa8, 0xad, 0x0b, 0x6e, 0x27, 0x84, 0x97, 0x3d, 0xcb, 0x60, 0x56, 0x84, 0xc0, 0x8b, 0x8d, 0x69, 0x98, 0xc6, 0x9a, 0xac, 0x04, 0x99, 0x21, 0x87, 0x1e, 0xbb, 0x65, 0x30, 0x1a, 0x46, 0x19, 0xca, 0x80, 0xec, 0xb4, 0x85, 0xa3, 0x1d, 0x74, 0x42, 0x23, 0xce, 0x8d, 0xdc, 0x23, 0x94, 0x82, 0x8d, 0x6a, 0x80, 0x47, 0x0c, 0x09, 0x2f, 0x5b, 0xa4, 0x13, 0xc3, 0x37, 0x8f, 0xa6, 0x05, 0x42, 0x55, 0xc6, 0xf9, 0xdf, 0x44, 0x95, 0x86, 0x2b, 0xbb, 0x32, 0x87, 0x68, 0x1f, 0x93, 0x1b, 0x68, 0x7c, 0x88, 0x8a, 0xbf, 0x84, 0x4d, 0xfc, 0x8f, 0xc2, 0x83, 0x31, 0xe5, 0x79, 0x92, 0x8c, 0xd1, 0x2b, 0xd2, 0x39, 0x0a, 0xe1, 0x23, 0xcf, 0x03, 0x81, 0x8d, 0x14, 0xde, 0xdd, 0xe5, 0xc0, 0xc2, 0x4c, 0x8a, 0xb0, 0x18, 0xbf, 0xca, 0x75, 0xca, 0x09, 0x6f, 0x2d, 0x53, 0x1f, 0x3d, 0x16, 0x19, 0xe7, 0x85, 0xf1, 0xad, 0xa4, 0x37, 0xca, 0xb9, 0x2e, 0x98, 0x05, 0x58, 0xb3, 0xdc, 0xe1, 0x47, 0x4a, 0xfb, 0x75, 0xbf, 0xed, 0xbf, 0x8f, 0xf5, 0x4c, 0xb2, 0x61, 0x8e, 0x02, 0x44, 0xc9, 0xac, 0x0d, 0x3c, 0x66, 0xfb, 0x51, 0x59, 0x8c, 0xd2, 0xdb, 0x11, 0xf9, 0xbe, 0x39, 0x79, 0x1a, 0xbe, 0x44, 0x7c, 0x63, 0x09, 0x4f, 0x7c, 0x45, 0x3b, 0x7f, 0xf8, 0x7c, 0xb5, 0xbb, 0x36, 0xb7, 0xc7, 0x9e, 0xfb, 0x08, 0x72, 0xd1, 0x70, 0x58, 0xb8, 0x3b, 0x15, 0xab, 0x08, 0x66, 0xad, 0x8a, 0x58, 0x65, 0x6c, 0x5a, 0x7e, 0x20, 0xdb, 0xdf, 0x30, 0x8b, 0x24, 0x61, 0xd9, 0x7c, 0x0e, 0xc0, 0x02, 0x4a, 0x27, 0x15, 0x05, 0x52, 0x49, 0xcf, 0x3b, 0x47, 0x8d, 0xdd, 0x47, 0x40, 0xde, 0x65, 0x4f, 0x75, 0xca, 0x68, 0x6e, 0x0d, 0x73, 0x45, 0xc6, 0x9e, 0xd5, 0x0c, 0xdc, 0x2a, 0x8b, 0x33, 0x2b, 0x1f, 0x88, 0x24, 0x10, 0x8a, 0xc9, 0x37, 0xeb, 0x05, 0x05, 0x85, 0x60, 0x8e, 0xe7, 0x34, 0x09, 0x7f, 0xc0, 0x90, 0x54, 0xfb, 0xff, 0x89, 0xee, 0xae, 0xea, 0x79, 0x1f, 0x4a, 0x7a, 0xb1, 0xf9, 0x86, 0x82, 0x94, 0xa4, 0xf9, 0xe2, 0x7b, 0x42, 0xaf, 0x81, 0x00, 0xcb, 0x9d, 0x59, 0xce, 0xf9, 0x64, 0x58, 0x03, }; /* Vector 12 */ static const uint8_t ciph_data_aes_xts_vect12_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27, }; static const uint8_t ciph_data_aes_xts_vect12_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92, }; static const uint8_t ciph_data_aes_xts_vect12_iv[16] = { 0xff, 0xff, 0xff }; static const uint8_t ciph_data_aes_xts_vect12_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t ciph_data_aes_xts_vect12_ctx[] = { 0xe3, 0x87, 0xaa, 0xa5, 0x8b, 0xa4, 0x83, 0xaf, 0xa7, 0xe8, 0xeb, 0x46, 0x97, 0x78, 0x31, 0x7e, 0xcf, 0x4c, 0xf5, 0x73, 0xaa, 0x9d, 0x4e, 0xac, 0x23, 0xf2, 0xcd, 0xf9, 0x14, 0xe4, 0xe2, 0x00, 0xa8, 0xb4, 0x90, 0xe4, 0x2e, 0xe6, 0x46, 0x80, 0x2d, 0xc6, 0xee, 0x2b, 0x47, 0x1b, 0x27, 0x81, 0x95, 0xd6, 0x09, 0x18, 0xec, 0xec, 0xb4, 0x4b, 0xf7, 0x99, 0x66, 0xf8, 0x3f, 0xab, 0xa0, 0x49, 0x92, 0x98, 0xeb, 0xc6, 0x99, 0xc0, 0xc8, 0x63, 0x47, 0x15, 0xa3, 0x20, 0xbb, 0x4f, 0x07, 0x5d, 0x62, 0x2e, 0x74, 0xc8, 0xc9, 0x32, 0x00, 0x4f, 0x25, 0xb4, 0x1e, 0x36, 0x10, 0x25, 0xb5, 0xa8, 0x78, 0x15, 0x39, 0x1f, 0x61, 0x08, 0xfc, 0x4a, 0xfa, 0x6a, 0x05, 0xd9, 0x30, 0x3c, 0x6b, 0xa6, 0x8a, 0x12, 0x8a, 0x55, 0x70, 0x5d, 0x41, 0x59, 0x85, 0x83, 0x2f, 0xde, 0xaa, 0xe6, 0xc8, 0xe1, 0x91, 0x10, 0xe8, 0x4d, 0x1b, 0x1f, 0x19, 0x9a, 0x26, 0x92, 0x11, 0x9e, 0xdc, 0x96, 0x13, 0x26, 0x58, 0xf0, 0x9d, 0xa7, 0xc6, 0x23, 0xef, 0xce, 0xc7, 0x12, 0x53, 0x7a, 0x3d, 0x94, 0xc0, 0xbf, 0x5d, 0x7e, 0x35, 0x2e, 0xc9, 0x4a, 0xe5, 0x79, 0x7f, 0xdb, 0x37, 0x7d, 0xc1, 0x55, 0x11, 0x50, 0x72, 0x1a, 0xdf, 0x15, 0xbd, 0x26, 0xa8, 0xef, 0xc2, 0xfc, 0xaa, 0xd5, 0x68, 0x81, 0xfa, 0x9e, 0x62, 0x46, 0x2c, 0x28, 0xf3, 0x0a, 0xe1, 0xce, 0xac, 0xa9, 0x3c, 0x34, 0x5c, 0xf2, 0x43, 0xb7, 0x3f, 0x54, 0x2e, 0x20, 0x74, 0xa7, 0x05, 0xbd, 0x26, 0x43, 0xbb, 0x9f, 0x7c, 0xc7, 0x9b, 0xb6, 0xe7, 0x09, 0x1e, 0xa6, 0xe2, 0x32, 0xdf, 0x0f, 0x9a, 0xd0, 0xd6, 0xcf, 0x50, 0x23, 0x27, 0x87, 0x6d, 0x82, 0x20, 0x7a, 0xbf, 0x21, 0x15, 0xcd, 0xac, 0xf6, 0xd5, 0xa4, 0x8f, 0x6c, 0x18, 0x79, 0xa6, 0x5b, 0x11, 0x5f, 0x0f, 0x8b, 0x3c, 0xb3, 0xc5, 0x9d, 0x15, 0xdd, 0x8c, 0x76, 0x9b, 0xc0, 0x14, 0x79, 0x5a, 0x18, 0x37, 0xf3, 0x90, 0x1b, 0x58, 0x45, 0xeb, 0x49, 0x1a, 0xdf, 0xef, 0xe0, 0x97, 0xb1, 0xfa, 0x30, 0xa1, 0x2f, 0xc1, 0xf6, 0x5b, 0xa2, 0x29, 0x05, 0x03, 0x15, 0x39, 0x97, 0x1a, 0x10, 0xf2, 0xf3, 0x6c, 0x32, 0x1b, 0xb5, 0x13, 0x31, 0xcd, 0xef, 0xb3, 0x9e, 0x39, 0x64, 0xc7, 0xef, 0x07, 0x99, 0x94, 0xf5, 0xb6, 0x9b, 0x2e, 0xdd, 0x83, 0xa7, 0x1e, 0xf5, 0x49, 0x97, 0x1e, 0xe9, 0x3f, 0x44, 0xea, 0xc3, 0x93, 0x8f, 0xcd, 0xd6, 0x1d, 0x01, 0xfa, 0x71, 0x79, 0x9d, 0xa3, 0xa8, 0x09, 0x1c, 0x4c, 0x48, 0xaa, 0x9e, 0xd2, 0x63, 0xff, 0x07, 0x49, 0xdf, 0x95, 0xd4, 0x4f, 0xef, 0x6a, 0x0b, 0xb5, 0x78, 0xec, 0x69, 0x45, 0x6a, 0xa5, 0x40, 0x8a, 0xe3, 0x2c, 0x7a, 0xf0, 0x8a, 0xd7, 0xba, 0x89, 0x21, 0x28, 0x7e, 0x3b, 0xbe, 0xe3, 0x1b, 0x76, 0x7b, 0xe0, 0x6a, 0x0e, 0x70, 0x5c, 0x86, 0x4a, 0x76, 0x91, 0x37, 0xdf, 0x28, 0x29, 0x22, 0x83, 0xea, 0x81, 0xa2, 0x48, 0x02, 0x41, 0xb4, 0x4d, 0x99, 0x21, 0xcd, 0xbe, 0xc1, 0xbc, 0x28, 0xdc, 0x1f, 0xda, 0x11, 0x4b, 0xd8, 0xe5, 0x21, 0x7a, 0xc9, 0xd8, 0xeb, 0xaf, 0xa7, 0x20, 0xe9, 0xda, 0x4f, 0x9a, 0xce, 0x23, 0x1c, 0xc9, 0x49, 0xe5, 0xb9, 0x6f, 0xe7, 0x6f, 0xfc, 0x21, 0x06, 0x3f, 0xdd, 0xc8, 0x3a, 0x6b, 0x86, 0x79, 0xc0, 0x0d, 0x35, 0xe0, 0x95, 0x76, 0xa8, 0x75, 0x30, 0x5b, 0xed, 0x5f, 0x36, 0xed, 0x24, 0x2c, 0x89, 0x00, 0xdd, 0x1f, 0xa9, 0x65, 0xbc, 0x95, 0x0d, 0xfc, 0xe0, 0x9b, 0x13, 0x22, 0x63, 0xa1, 0xee, 0xf5, 0x2d, 0xd6, 0x88, 0x8c, 0x30, 0x9f, 0x5a, 0x7d, 0x71, 0x28, 0x26, }; /* Vector 13 */ static const uint8_t ciph_data_aes_xts_vect13_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27, }; static const uint8_t ciph_data_aes_xts_vect13_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92, }; static const uint8_t ciph_data_aes_xts_vect13_iv[16] = { 0xff, 0xff, 0xff, 0xff }; static const uint8_t ciph_data_aes_xts_vect13_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t ciph_data_aes_xts_vect13_ctx[] = { 0xbf, 0x53, 0xd2, 0xda, 0xde, 0x78, 0xe8, 0x22, 0xa4, 0xd9, 0x49, 0xa9, 0xbc, 0x67, 0x66, 0xb0, 0x1b, 0x06, 0xa8, 0xef, 0x70, 0xd2, 0x67, 0x48, 0xc6, 0xa7, 0xfc, 0x36, 0xd8, 0x0a, 0xe4, 0xc5, 0x52, 0x0f, 0x7c, 0x4a, 0xb0, 0xac, 0x85, 0x44, 0x42, 0x4f, 0xa4, 0x05, 0x16, 0x2f, 0xef, 0x5a, 0x6b, 0x7f, 0x22, 0x94, 0x98, 0x06, 0x36, 0x18, 0xd3, 0x9f, 0x00, 0x03, 0xcb, 0x5f, 0xb8, 0xd1, 0xc8, 0x6b, 0x64, 0x34, 0x97, 0xda, 0x1f, 0xf9, 0x45, 0xc8, 0xd3, 0xbe, 0xde, 0xca, 0x4f, 0x47, 0x97, 0x02, 0xa7, 0xa7, 0x35, 0xf0, 0x43, 0xdd, 0xb1, 0xd6, 0xaa, 0xad, 0xe3, 0xc4, 0xa0, 0xac, 0x7c, 0xa7, 0xf3, 0xfa, 0x52, 0x79, 0xbe, 0xf5, 0x6f, 0x82, 0xcd, 0x7a, 0x2f, 0x38, 0x67, 0x2e, 0x82, 0x48, 0x14, 0xe1, 0x07, 0x00, 0x30, 0x0a, 0x05, 0x5e, 0x16, 0x30, 0xb8, 0xf1, 0xcb, 0x0e, 0x91, 0x9f, 0x5e, 0x94, 0x20, 0x10, 0xa4, 0x16, 0xe2, 0xbf, 0x48, 0xcb, 0x46, 0x99, 0x3d, 0x3c, 0xb6, 0xa5, 0x1c, 0x19, 0xba, 0xcf, 0x86, 0x47, 0x85, 0xa0, 0x0b, 0xc2, 0xec, 0xff, 0x15, 0xd3, 0x50, 0x87, 0x5b, 0x24, 0x6e, 0xd5, 0x3e, 0x68, 0xbe, 0x6f, 0x55, 0xbd, 0x7e, 0x05, 0xcf, 0xc2, 0xb2, 0xed, 0x64, 0x32, 0x19, 0x8a, 0x64, 0x44, 0xb6, 0xd8, 0xc2, 0x47, 0xfa, 0xb9, 0x41, 0xf5, 0x69, 0x76, 0x8b, 0x5c, 0x42, 0x93, 0x66, 0xf1, 0xd3, 0xf0, 0x0f, 0x03, 0x45, 0xb9, 0x61, 0x23, 0xd5, 0x62, 0x04, 0xc0, 0x1c, 0x63, 0xb2, 0x2c, 0xe7, 0x8b, 0xaf, 0x11, 0x6e, 0x52, 0x5e, 0xd9, 0x0f, 0xde, 0xa3, 0x9f, 0xa4, 0x69, 0x49, 0x4d, 0x38, 0x66, 0xc3, 0x1e, 0x05, 0xf2, 0x95, 0xff, 0x21, 0xfe, 0xa8, 0xd4, 0xe6, 0xe1, 0x3d, 0x67, 0xe4, 0x7c, 0xe7, 0x22, 0xe9, 0x69, 0x8a, 0x1c, 0x10, 0x48, 0xd6, 0x8e, 0xbc, 0xde, 0x76, 0xb8, 0x6f, 0xcf, 0x97, 0x6e, 0xab, 0x8a, 0xa9, 0x79, 0x02, 0x68, 0xb7, 0x06, 0x8e, 0x01, 0x7a, 0x8b, 0x9b, 0x74, 0x94, 0x09, 0x51, 0x4f, 0x10, 0x53, 0x02, 0x7f, 0xd1, 0x6c, 0x37, 0x86, 0xea, 0x1b, 0xac, 0x5f, 0x15, 0xcb, 0x79, 0x71, 0x1e, 0xe2, 0xab, 0xe8, 0x2f, 0x5c, 0xf8, 0xb1, 0x3a, 0xe7, 0x30, 0x30, 0xef, 0x5b, 0x9e, 0x44, 0x57, 0xe7, 0x5d, 0x13, 0x04, 0xf9, 0x88, 0xd6, 0x2d, 0xd6, 0xfc, 0x4b, 0x94, 0xed, 0x38, 0xba, 0x83, 0x1d, 0xa4, 0xb7, 0x63, 0x49, 0x71, 0xb6, 0xcd, 0x8e, 0xc3, 0x25, 0xd9, 0xc6, 0x1c, 0x00, 0xf1, 0xdf, 0x73, 0x62, 0x7e, 0xd3, 0x74, 0x5a, 0x5e, 0x84, 0x89, 0xf3, 0xa9, 0x5c, 0x69, 0x63, 0x9c, 0x32, 0xcd, 0x6e, 0x1d, 0x53, 0x7a, 0x85, 0xf7, 0x5c, 0xc8, 0x44, 0x72, 0x6e, 0x8a, 0x72, 0xfc, 0x00, 0x77, 0xad, 0x22, 0x00, 0x0f, 0x1d, 0x50, 0x78, 0xf6, 0xb8, 0x66, 0x31, 0x8c, 0x66, 0x8f, 0x1a, 0xd0, 0x3d, 0x5a, 0x5f, 0xce, 0xd5, 0x21, 0x9f, 0x2e, 0xab, 0xbd, 0x0a, 0xa5, 0xc0, 0xf4, 0x60, 0xd1, 0x83, 0xf0, 0x44, 0x04, 0xa0, 0xd6, 0xf4, 0x69, 0x55, 0x8e, 0x81, 0xfa, 0xb2, 0x4a, 0x16, 0x79, 0x05, 0xab, 0x4c, 0x78, 0x78, 0x50, 0x2a, 0xd3, 0xe3, 0x8f, 0xdb, 0xe6, 0x2a, 0x41, 0x55, 0x6c, 0xec, 0x37, 0x32, 0x57, 0x59, 0x53, 0x3c, 0xe8, 0xf2, 0x5f, 0x36, 0x7c, 0x87, 0xbb, 0x55, 0x78, 0xd6, 0x67, 0xae, 0x93, 0xf9, 0xe2, 0xfd, 0x99, 0xbc, 0xbc, 0x5f, 0x2f, 0xbb, 0xa8, 0x8c, 0xf6, 0x51, 0x61, 0x39, 0x42, 0x0f, 0xcf, 0xf3, 0xb7, 0x36, 0x1d, 0x86, 0x32, 0x2c, 0x4b, 0xd8, 0x4c, 0x82, 0xf3, 0x35, 0xab, 0xb1, 0x52, 0xc4, 0xa9, 0x34, 0x11, 0x37, 0x3a, 0xaa, 0x82, 0x20, }; /* Vector 14 */ static const uint8_t ciph_data_aes_xts_vect14_key1[] = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45, 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26, 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69, 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27, }; static const uint8_t ciph_data_aes_xts_vect14_key2[] = { 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92, }; static const uint8_t ciph_data_aes_xts_vect14_iv[16] = { 0xff, 0xff, 0xff, 0xff, 0xff }; static const uint8_t ciph_data_aes_xts_vect14_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t ciph_data_aes_xts_vect14_ctx[] = { 0x64, 0x49, 0x7e, 0x5a, 0x83, 0x1e, 0x4a, 0x93, 0x2c, 0x09, 0xbe, 0x3e, 0x53, 0x93, 0x37, 0x6d, 0xaa, 0x59, 0x95, 0x48, 0xb8, 0x16, 0x03, 0x1d, 0x22, 0x4b, 0xbf, 0x50, 0xa8, 0x18, 0xed, 0x23, 0x50, 0xea, 0xe7, 0xe9, 0x60, 0x87, 0xc8, 0xa0, 0xdb, 0x51, 0xad, 0x29, 0x0b, 0xd0, 0x0c, 0x1a, 0xc1, 0x62, 0x08, 0x57, 0x63, 0x5b, 0xf2, 0x46, 0xc1, 0x76, 0xab, 0x46, 0x3b, 0xe3, 0x0b, 0x80, 0x8d, 0xa5, 0x48, 0x08, 0x1a, 0xc8, 0x47, 0xb1, 0x58, 0xe1, 0x26, 0x4b, 0xe2, 0x5b, 0xb0, 0x91, 0x0b, 0xbc, 0x92, 0x64, 0x71, 0x08, 0x08, 0x94, 0x15, 0xd4, 0x5f, 0xab, 0x1b, 0x3d, 0x26, 0x04, 0xe8, 0xa8, 0xef, 0xf1, 0xae, 0x40, 0x20, 0xcf, 0xa3, 0x99, 0x36, 0xb6, 0x68, 0x27, 0xb2, 0x3f, 0x37, 0x1b, 0x92, 0x20, 0x0b, 0xe9, 0x02, 0x51, 0xe6, 0xd7, 0x3c, 0x5f, 0x86, 0xde, 0x5f, 0xd4, 0xa9, 0x50, 0x78, 0x19, 0x33, 0xd7, 0x9a, 0x28, 0x27, 0x2b, 0x78, 0x2a, 0x2e, 0xc3, 0x13, 0xef, 0xdf, 0xcc, 0x06, 0x28, 0xf4, 0x3d, 0x74, 0x4c, 0x2d, 0xc2, 0xff, 0x3d, 0xcb, 0x66, 0x99, 0x9b, 0x50, 0xc7, 0xca, 0x89, 0x5b, 0x0c, 0x64, 0x79, 0x1e, 0xea, 0xa5, 0xf2, 0x94, 0x99, 0xfb, 0x1c, 0x02, 0x6f, 0x84, 0xce, 0x5b, 0x5c, 0x72, 0xba, 0x10, 0x83, 0xcd, 0xdb, 0x5c, 0xe4, 0x54, 0x34, 0x63, 0x16, 0x65, 0xc3, 0x33, 0xb6, 0x0b, 0x11, 0x59, 0x3f, 0xb2, 0x53, 0xc5, 0x17, 0x9a, 0x2c, 0x8d, 0xb8, 0x13, 0x78, 0x2a, 0x00, 0x48, 0x56, 0xa1, 0x65, 0x30, 0x11, 0xe9, 0x3f, 0xb6, 0xd8, 0x76, 0xc1, 0x83, 0x66, 0xdd, 0x86, 0x83, 0xf5, 0x34, 0x12, 0xc0, 0xc1, 0x80, 0xf9, 0xc8, 0x48, 0x59, 0x2d, 0x59, 0x3f, 0x86, 0x09, 0xca, 0x73, 0x63, 0x17, 0xd3, 0x56, 0xe1, 0x3e, 0x2b, 0xff, 0x3a, 0x9f, 0x59, 0xcd, 0x9a, 0xeb, 0x19, 0xcd, 0x48, 0x25, 0x93, 0xd8, 0xc4, 0x61, 0x28, 0xbb, 0x32, 0x42, 0x3b, 0x37, 0xa9, 0xad, 0xfb, 0x48, 0x2b, 0x99, 0x45, 0x3f, 0xbe, 0x25, 0xa4, 0x1b, 0xf6, 0xfe, 0xb4, 0xaa, 0x0b, 0xef, 0x5e, 0xd2, 0x4b, 0xf7, 0x3c, 0x76, 0x29, 0x78, 0x02, 0x54, 0x82, 0xc1, 0x31, 0x15, 0xe4, 0x01, 0x5a, 0xac, 0x99, 0x2e, 0x56, 0x13, 0xa3, 0xb5, 0xc2, 0xf6, 0x85, 0xb8, 0x47, 0x95, 0xcb, 0x6e, 0x9b, 0x26, 0x56, 0xd8, 0xc8, 0x81, 0x57, 0xe5, 0x2c, 0x42, 0xf9, 0x78, 0xd8, 0x63, 0x4c, 0x43, 0xd0, 0x6f, 0xea, 0x92, 0x8f, 0x28, 0x22, 0xe4, 0x65, 0xaa, 0x65, 0x76, 0xe9, 0xbf, 0x41, 0x93, 0x84, 0x50, 0x6c, 0xc3, 0xce, 0x3c, 0x54, 0xac, 0x1a, 0x6f, 0x67, 0xdc, 0x66, 0xf3, 0xb3, 0x01, 0x91, 0xe6, 0x98, 0x38, 0x0b, 0xc9, 0x99, 0xb0, 0x5a, 0xbc, 0xe1, 0x9d, 0xc0, 0xc6, 0xdc, 0xc2, 0xdd, 0x00, 0x1e, 0xc5, 0x35, 0xba, 0x18, 0xde, 0xb2, 0xdf, 0x1a, 0x10, 0x10, 0x23, 0x10, 0x83, 0x18, 0xc7, 0x5d, 0xc9, 0x86, 0x11, 0xa0, 0x9d, 0xc4, 0x8a, 0x0a, 0xcd, 0xec, 0x67, 0x6f, 0xab, 0xdf, 0x22, 0x2f, 0x07, 0xe0, 0x26, 0xf0, 0x59, 0xb6, 0x72, 0xb5, 0x6e, 0x5c, 0xbc, 0x8e, 0x1d, 0x21, 0xbb, 0xd8, 0x67, 0xdd, 0x92, 0x72, 0x12, 0x05, 0x46, 0x81, 0xd7, 0x0e, 0xa7, 0x37, 0x13, 0x4c, 0xdf, 0xce, 0x93, 0xb6, 0xf8, 0x2a, 0xe2, 0x24, 0x23, 0x27, 0x4e, 0x58, 0xa0, 0x82, 0x1c, 0xc5, 0x50, 0x2e, 0x2d, 0x0a, 0xb4, 0x58, 0x5e, 0x94, 0xde, 0x69, 0x75, 0xbe, 0x5e, 0x0b, 0x4e, 0xfc, 0xe5, 0x1c, 0xd3, 0xe7, 0x0c, 0x25, 0xa1, 0xfb, 0xbb, 0xd6, 0x09, 0xd2, 0x73, 0xad, 0x5b, 0x0d, 0x59, 0x63, 0x1c, 0x53, 0x1f, 0x6a, 0x0a, 0x57, 0xb9, }; /* * XTS-AES-128 applied for a data unit that is not a multiple of 16 bytes */ /* Vector 15 */ static const uint8_t ciph_data_aes_xts_vect15_key1[] = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, }; static const uint8_t ciph_data_aes_xts_vect15_key2[] = { 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, }; static const uint8_t ciph_data_aes_xts_vect15_iv[16] = { 0x9a, 0x78, 0x56, 0x34, 0x12 }; static const uint8_t ciph_data_aes_xts_vect15_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; static const uint8_t ciph_data_aes_xts_vect15_ctx[] = { 0x6c, 0x16, 0x25, 0xdb, 0x46, 0x71, 0x52, 0x2d, 0x3d, 0x75, 0x99, 0x60, 0x1d, 0xe7, 0xca, 0x09, 0xed }; /* Vector 16 */ static const uint8_t ciph_data_aes_xts_vect16_key1[] = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, }; static const uint8_t ciph_data_aes_xts_vect16_key2[] = { 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, }; static const uint8_t ciph_data_aes_xts_vect16_iv[16] = { 0x9a, 0x78, 0x56, 0x34, 0x12 }; static const uint8_t ciph_data_aes_xts_vect16_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11 }; static const uint8_t ciph_data_aes_xts_vect16_ctx[] = { 0xd0, 0x69, 0x44, 0x4b, 0x7a, 0x7e, 0x0c, 0xab, 0x09, 0xe2, 0x44, 0x47, 0xd2, 0x4d, 0xeb, 0x1f, 0xed, 0xbf }; /* Vector 17 */ static const uint8_t ciph_data_aes_xts_vect17_key1[] = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, }; static const uint8_t ciph_data_aes_xts_vect17_key2[] = { 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, }; static const uint8_t ciph_data_aes_xts_vect17_iv[16] = { 0x9a, 0x78, 0x56, 0x34, 0x12 }; static const uint8_t ciph_data_aes_xts_vect17_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12 }; static const uint8_t ciph_data_aes_xts_vect17_ctx[] = { 0xe5, 0xdf, 0x13, 0x51, 0xc0, 0x54, 0x4b, 0xa1, 0x35, 0x0b, 0x33, 0x63, 0xcd, 0x8e, 0xf4, 0xbe, 0xed, 0xbf, 0x9d }; /* Vector 18 */ static const uint8_t ciph_data_aes_xts_vect18_key1[] = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, }; static const uint8_t ciph_data_aes_xts_vect18_key2[] = { 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, }; static const uint8_t ciph_data_aes_xts_vect18_iv[16] = { 0x9a, 0x78, 0x56, 0x34, 0x12 }; static const uint8_t ciph_data_aes_xts_vect18_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13 }; static const uint8_t ciph_data_aes_xts_vect18_ctx[] = { 0x9d, 0x84, 0xc8, 0x13, 0xf7, 0x19, 0xaa, 0x2c, 0x7b, 0xe3, 0xf6, 0x61, 0x71, 0xc7, 0xc5, 0xc2, 0xed, 0xbf, 0x9d, 0xac }; /* Vector 19 */ static const uint8_t ciph_data_aes_xts_vect19_key1[] = { 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, }; static const uint8_t ciph_data_aes_xts_vect19_key2[] = { 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, }; static const uint8_t ciph_data_aes_xts_vect19_iv[16] = { 0x21, 0x43, 0x65, 0x87, 0xa9 }; static const uint8_t ciph_data_aes_xts_vect19_ptx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t ciph_data_aes_xts_vect19_ctx[] = { 0x38, 0xb4, 0x58, 0x12, 0xef, 0x43, 0xa0, 0x5b, 0xd9, 0x57, 0xe5, 0x45, 0x90, 0x7e, 0x22, 0x3b, 0x95, 0x4a, 0xb4, 0xaa, 0xf0, 0x88, 0x30, 0x3a, 0xd9, 0x10, 0xea, 0xdf, 0x14, 0xb4, 0x2b, 0xe6, 0x8b, 0x24, 0x61, 0x14, 0x9d, 0x8c, 0x8b, 0xa8, 0x5f, 0x99, 0x2b, 0xe9, 0x70, 0xbc, 0x62, 0x1f, 0x1b, 0x06, 0x57, 0x3f, 0x63, 0xe8, 0x67, 0xbf, 0x58, 0x75, 0xac, 0xaf, 0xa0, 0x4e, 0x42, 0xcc, 0xbd, 0x7b, 0xd3, 0xc2, 0xa0, 0xfb, 0x1f, 0xff, 0x79, 0x1e, 0xc5, 0xec, 0x36, 0xc6, 0x6a, 0xe4, 0xac, 0x1e, 0x80, 0x6d, 0x81, 0xfb, 0xf7, 0x09, 0xdb, 0xe2, 0x9e, 0x47, 0x1f, 0xad, 0x38, 0x54, 0x9c, 0x8e, 0x66, 0xf5, 0x34, 0x5d, 0x7c, 0x1e, 0xb9, 0x4f, 0x40, 0x5d, 0x1e, 0xc7, 0x85, 0xcc, 0x6f, 0x6a, 0x68, 0xf6, 0x25, 0x4d, 0xd8, 0x33, 0x9f, 0x9d, 0x84, 0x05, 0x7e, 0x01, 0xa1, 0x77, 0x41, 0x99, 0x04, 0x82, 0x99, 0x95, 0x16, 0xb5, 0x61, 0x1a, 0x38, 0xf4, 0x1b, 0xb6, 0x47, 0x8e, 0x6f, 0x17, 0x3f, 0x32, 0x08, 0x05, 0xdd, 0x71, 0xb1, 0x93, 0x2f, 0xc3, 0x33, 0xcb, 0x9e, 0xe3, 0x99, 0x36, 0xbe, 0xea, 0x9a, 0xd9, 0x6f, 0xa1, 0x0f, 0xb4, 0x11, 0x2b, 0x90, 0x17, 0x34, 0xdd, 0xad, 0x40, 0xbc, 0x18, 0x78, 0x99, 0x5f, 0x8e, 0x11, 0xae, 0xe7, 0xd1, 0x41, 0xa2, 0xf5, 0xd4, 0x8b, 0x7a, 0x4e, 0x1e, 0x7f, 0x0b, 0x2c, 0x04, 0x83, 0x0e, 0x69, 0xa4, 0xfd, 0x13, 0x78, 0x41, 0x1c, 0x2f, 0x28, 0x7e, 0xdf, 0x48, 0xc6, 0xc4, 0xe5, 0xc2, 0x47, 0xa1, 0x96, 0x80, 0xf7, 0xfe, 0x41, 0xce, 0xfb, 0xd4, 0x9b, 0x58, 0x21, 0x06, 0xe3, 0x61, 0x6c, 0xbb, 0xe4, 0xdf, 0xb2, 0x34, 0x4b, 0x2a, 0xe9, 0x51, 0x93, 0x91, 0xf3, 0xe0, 0xfb, 0x49, 0x22, 0x25, 0x4b, 0x1d, 0x6d, 0x2d, 0x19, 0xc6, 0xd4, 0xd5, 0x37, 0xb3, 0xa2, 0x6f, 0x3b, 0xcc, 0x51, 0x58, 0x8b, 0x32, 0xf3, 0xec, 0xa0, 0x82, 0x9b, 0x6a, 0x5a, 0xc7, 0x25, 0x78, 0xfb, 0x81, 0x4f, 0xb4, 0x3c, 0xf8, 0x0d, 0x64, 0xa2, 0x33, 0xe3, 0xf9, 0x97, 0xa3, 0xf0, 0x26, 0x83, 0x34, 0x2f, 0x2b, 0x33, 0xd2, 0x5b, 0x49, 0x25, 0x36, 0xb9, 0x3b, 0xec, 0xb2, 0xf5, 0xe1, 0xa8, 0xb8, 0x2f, 0x5b, 0x88, 0x33, 0x42, 0x72, 0x9e, 0x8a, 0xe0, 0x9d, 0x16, 0x93, 0x88, 0x41, 0xa2, 0x1a, 0x97, 0xfb, 0x54, 0x3e, 0xea, 0x3b, 0xbf, 0xf5, 0x9f, 0x13, 0xc1, 0xa1, 0x84, 0x49, 0xe3, 0x98, 0x70, 0x1c, 0x1a, 0xd5, 0x16, 0x48, 0x34, 0x6c, 0xbc, 0x04, 0xc2, 0x7b, 0xb2, 0xda, 0x3b, 0x93, 0xa1, 0x37, 0x2c, 0xca, 0xe5, 0x48, 0xfb, 0x53, 0xbe, 0xe4, 0x76, 0xf9, 0xe9, 0xc9, 0x17, 0x73, 0xb1, 0xbb, 0x19, 0x82, 0x83, 0x94, 0xd5, 0x5d, 0x3e, 0x1a, 0x20, 0xed, 0x69, 0x11, 0x3a, 0x86, 0x0b, 0x68, 0x29, 0xff, 0xa8, 0x47, 0x22, 0x46, 0x04, 0x43, 0x50, 0x70, 0x22, 0x1b, 0x25, 0x7e, 0x8d, 0xff, 0x78, 0x36, 0x15, 0xd2, 0xca, 0xe4, 0x80, 0x3a, 0x93, 0xaa, 0x43, 0x34, 0xab, 0x48, 0x2a, 0x0a, 0xfa, 0xc9, 0xc0, 0xae, 0xda, 0x70, 0xb4, 0x5a, 0x48, 0x1d, 0xf5, 0xde, 0xc5, 0xdf, 0x8c, 0xc0, 0xf4, 0x23, 0xc7, 0x7a, 0x5f, 0xd4, 0x6c, 0xd3, 0x12, 0x02, 0x1d, 0x4b, 0x43, 0x88, 0x62, 0x41, 0x9a, 0x79, 0x1b, 0xe0, 0x3b, 0xb4, 0xd9, 0x7c, 0x0e, 0x59, 0x57, 0x85, 0x42, 0x53, 0x1b, 0xa4, 0x66, 0xa8, 0x3b, 0xaf, 0x92, 0xce, 0xfc, 0x15, 0x1b, 0x5c, 0xc1, 0x61, 0x1a, 0x16, 0x78, 0x93, 0x81, 0x9b, 0x63, 0xfb, 0x8a, 0x6b, 0x18, 0xe8, 0x6d, 0xe6, 0x02, 0x90, 0xfa, 0x72, 0xb7, 0x97, 0xb0, 0xce, 0x59, 0xf3, }; /* AES-CCM test data from NIST Special Publication 800-38C */ /* * Example1: * K: 40414243 44454647 48494a4b 4c4d4e4f * N: 10111213 141516 * A: 00010203 04050607 * P: 20212223 * B: 4f101112 13141516 00000000 00000004 * 00080001 02030405 06070000 00000000 * 20212223 00000000 00000000 00000000 * T: 6084341b * Ctr0: 07101112 13141516 00000000 00000000 * S0: 2d281146 10676c26 32bad748 559a679a * Ctr1: 07101112 13141516 00000000 00000001 * S1: 51432378 e474b339 71318484 103cddfb * C: 7162015b 4dac255d */ static const uint8_t ae_data_aes_ccm_vect1_key[] = { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f }; static const uint8_t ae_data_aes_ccm_vect1_nonce[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 }; static const uint8_t ae_data_aes_ccm_vect1_aad[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; static const uint8_t ae_data_aes_ccm_vect1_ptx[] = { 0x20, 0x21, 0x22, 0x23 }; static const uint8_t ae_data_aes_ccm_vect1_ctx[] = { 0x71, 0x62, 0x01, 0x5b, }; static const uint8_t ae_data_aes_ccm_vect1_tag[] = { 0x4d, 0xac, 0x25, 0x5d }; /* * Example 2: * K: 40414243 44454647 48494a4b 4c4d4e4f * N: 10111213 14151617 * A: 00010203 04050607 08090a0b 0c0d0e0f * P: 20212223 24252627 28292a2b 2c2d2e2f * B: 56101112 13141516 17000000 00000010 * 00100001 02030405 06070809 0a0b0c0d * 0e0f0000 00000000 00000000 00000000 * 20212223 24252627 28292a2b 2c2d2e2f * T: 7f479ffc a464 * Ctr0: 06101112 13141516 17000000 00000000 * S0: 6081d043 08a97dcc 20cdcc60 bf947b78 * Ctr1: 06101112 13141516 17000000 00000001 * S1: f280d2c3 75cf7945 20335db9 2b107712 * C: d2a1f0e0 51ea5f62 081a7792 073d593d * 1fc64fbf accd */ static const uint8_t ae_data_aes_ccm_vect2_key[] = { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f }; static const uint8_t ae_data_aes_ccm_vect2_nonce[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }; static const uint8_t ae_data_aes_ccm_vect2_aad[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; static const uint8_t ae_data_aes_ccm_vect2_ptx[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f }; static const uint8_t ae_data_aes_ccm_vect2_ctx[] = { 0xd2, 0xa1, 0xf0, 0xe0, 0x51, 0xea, 0x5f, 0x62, 0x08, 0x1a, 0x77, 0x92, 0x07, 0x3d, 0x59, 0x3d, }; static const uint8_t ae_data_aes_ccm_vect2_tag[] = { 0x1f, 0xc6, 0x4f, 0xbf, 0xac, 0xcd }; /* * Example 3 * K: 40414243 44454647 48494a4b 4c4d4e4f * N: 10111213 14151617 18191a1b * A: 00010203 04050607 08090a0b 0c0d0e0f * 10111213 * P: 20212223 24252627 28292a2b 2c2d2e2f * 30313233 34353637 * B: 5a101112 13141516 1718191a 1b000018 * 00140001 02030405 06070809 0a0b0c0d * 0e0f1011 12130000 00000000 00000000 * 20212223 24252627 28292a2b 2c2d2e2f * 30313233 34353637 00000000 00000000 * T: 67c99240 c7d51048 * Ctr0: 02101112 13141516 1718191a 1b000000 * S0: 2f8a00bb 06658919 c3a040a6 eaed1a7f * Ctr1: 02101112 13141516 1718191a 1b000001 * S1: c393238a d1923c5d b335c0c7 e1bac924 * Ctr2: 02101112 13141516 1718191a 1b000002 * S2: 514798ea 9077bc92 6c22ebef 2ac732dc * C: e3b201a9 f5b71a7a 9b1ceaec cd97e70b * 6176aad9 a4428aa5 484392fb c1b09951 */ static const uint8_t ae_data_aes_ccm_vect3_key[] = { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f }; static const uint8_t ae_data_aes_ccm_vect3_nonce[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b }; static const uint8_t ae_data_aes_ccm_vect3_aad[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13 }; static const uint8_t ae_data_aes_ccm_vect3_ptx[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 }; static const uint8_t ae_data_aes_ccm_vect3_ctx[] = { 0xe3, 0xb2, 0x01, 0xa9, 0xf5, 0xb7, 0x1a, 0x7a, 0x9b, 0x1c, 0xea, 0xec, 0xcd, 0x97, 0xe7, 0x0b, 0x61, 0x76, 0xaa, 0xd9, 0xa4, 0x42, 0x8a, 0xa5, }; static const uint8_t ae_data_aes_ccm_vect3_tag[] = { 0x48, 0x43, 0x92, 0xfb, 0xc1, 0xb0, 0x99, 0x51 }; /* * AES-GCM vectors from the reviced "The Galois/Counter Mode of Operation * (GCM)" 2005-05-31 spec */ /* * Test case 1 * K 00000000000000000000000000000000 * P * IV 000000000000000000000000 * H 66e94bd4ef8a2c3b884cfa59ca342b2e * Y0 00000000000000000000000000000001 * E(K, Y0) 58e2fccefa7e3061367f1d57a4e7455a * len(A)||len(C) 00000000000000000000000000000000 * GHASH(H, A, C) 00000000000000000000000000000000 * C * T 58e2fccefa7e3061367f1d57a4e7455a */ static const uint8_t ae_data_aes_gcm_vect1_key[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const uint8_t ae_data_aes_gcm_vect1_nonce[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define ae_data_aes_gcm_vect1_aad NULL #define ae_data_aes_gcm_vect1_ptx NULL #define ae_data_aes_gcm_vect1_ctx NULL static const uint8_t ae_data_aes_gcm_vect1_tag[] = { 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61, 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a }; /* * Test case 2 * K 00000000000000000000000000000000 * P 00000000000000000000000000000000 * IV 000000000000000000000000 * H 66e94bd4ef8a2c3b884cfa59ca342b2e * Y0 00000000000000000000000000000001 * E(K, Y0) 58e2fccefa7e3061367f1d57a4e7455a * Y1 00000000000000000000000000000002 * E(K, Y1) 0388dace60b6a392f328c2b971b2fe78 * X1 5e2ec746917062882c85b0685353deb7 * len(A)||len(C) 00000000000000000000000000000080 * GHASH(H, A, C) f38cbb1ad69223dcc3457ae5b6b0f885 * C 0388dace60b6a392f328c2b971b2fe78 * T ab6e47d42cec13bdf53a67b21257bddf */ static const uint8_t ae_data_aes_gcm_vect2_key[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const uint8_t ae_data_aes_gcm_vect2_nonce[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define ae_data_aes_gcm_vect2_aad NULL static const uint8_t ae_data_aes_gcm_vect2_ptx[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const uint8_t ae_data_aes_gcm_vect2_ctx[] = { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 }; static const uint8_t ae_data_aes_gcm_vect2_tag[] = { 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd, 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf }; /* * Test case 3 * K feffe9928665731c6d6a8f9467308308 * P d9313225f88406e5a55909c5aff5269a * 86a7a9531534f7da2e4c303d8a318a72 * 1c3c0c95956809532fcf0e2449a6b525 * b16aedf5aa0de657ba637b391aafd255 * IV cafebabefacedbaddecaf888 * H b83b533708bf535d0aa6e52980d53b78 * Y0 cafebabefacedbaddecaf88800000001 * E(K, Y0) 3247184b3c4f69a44dbcd22887bbb418 * Y1 cafebabefacedbaddecaf88800000002 * E(K, Y1) 9bb22ce7d9f372c1ee2b28722b25f206 * Y2 cafebabefacedbaddecaf88800000003 * E(K, Y2) 650d887c3936533a1b8d4e1ea39d2b5c * Y3 cafebabefacedbaddecaf88800000004 * E(K, Y3) 3de91827c10e9a4f5240647ee5221f20 * Y4 cafebabefacedbaddecaf88800000005 * E(K, Y4) aac9e6ccc0074ac0873b9ba85d908bd0 * X1 59ed3f2bb1a0aaa07c9f56c6a504647b * X2 b714c9048389afd9f9bc5c1d4378e052 * X3 47400c6577b1ee8d8f40b2721e86ff10 * X4 4796cf49464704b5dd91f159bb1b7f95 * len(A)||len(C) 00000000000000000000000000000200 * GHASH(H, A, C) 7f1b32b81b820d02614f8895ac1d4eac * C 42831ec2217774244b7221b784d0d49c * e3aa212f2c02a4e035c17e2329aca12e * 21d514b25466931c7d8f6a5aac84aa05 * 1ba30b396a0aac973d58e091473f5985 * T 4d5c2af327cd64a62cf35abd2ba6fab4 */ static const uint8_t ae_data_aes_gcm_vect3_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 }; static const uint8_t ae_data_aes_gcm_vect3_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88 }; #define ae_data_aes_gcm_vect3_aad NULL static const uint8_t ae_data_aes_gcm_vect3_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 }; static const uint8_t ae_data_aes_gcm_vect3_ctx[] = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 }; static const uint8_t ae_data_aes_gcm_vect3_tag[] = { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 }; /* * Test case 4 * K feffe9928665731c6d6a8f9467308308 * P d9313225f88406e5a55909c5aff5269a * 86a7a9531534f7da2e4c303d8a318a72 * 1c3c0c95956809532fcf0e2449a6b525 * b16aedf5aa0de657ba637b39 * A feedfacedeadbeeffeedfacedeadbeef * abaddad2 * IV cafebabefacedbaddecaf888 * H b83b533708bf535d0aa6e52980d53b78 * Y0 cafebabefacedbaddecaf88800000001 * E(K, Y0) 3247184b3c4f69a44dbcd22887bbb418 * X1 ed56aaf8a72d67049fdb9228edba1322 * X2 cd47221ccef0554ee4bb044c88150352 * Y1 cafebabefacedbaddecaf88800000002 * E(K, Y1) 9bb22ce7d9f372c1ee2b28722b25f206 * Y2 cafebabefacedbaddecaf88800000003 * E(K, Y2) 650d887c3936533a1b8d4e1ea39d2b5c * Y3 cafebabefacedbaddecaf88800000004 * E(K, Y3) 3de91827c10e9a4f5240647ee5221f20 * Y4 cafebabefacedbaddecaf88800000005 * E(K, Y4) aac9e6ccc0074ac0873b9ba85d908bd0 * X3 54f5e1b2b5a8f9525c23924751a3ca51 * X4 324f585c6ffc1359ab371565d6c45f93 * X5 ca7dd446af4aa70cc3c0cd5abba6aa1c * X6 1590df9b2eb6768289e57d56274c8570 * len(A)||len(C) 00000000000000a000000000000001e0 * GHASH(H, A, C) 698e57f70e6ecc7fd9463b7260a9ae5f * C 42831ec2217774244b7221b784d0d49c * e3aa212f2c02a4e035c17e2329aca12e * 21d514b25466931c7d8f6a5aac84aa05 * 1ba30b396a0aac973d58e091 * T 5bc94fbc3221a5db94fae95ae7121a47 */ static const uint8_t ae_data_aes_gcm_vect4_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 }; static const uint8_t ae_data_aes_gcm_vect4_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88 }; static const uint8_t ae_data_aes_gcm_vect4_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2 }; static const uint8_t ae_data_aes_gcm_vect4_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39 }; static const uint8_t ae_data_aes_gcm_vect4_ctx[] = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, 0x3d, 0x58, 0xe0, 0x91 }; static const uint8_t ae_data_aes_gcm_vect4_tag[] = { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 }; /* * Test case 5 * K feffe9928665731c6d6a8f9467308308 * P d9313225f88406e5a55909c5aff5269a * 86a7a9531534f7da2e4c303d8a318a72 * 1c3c0c95956809532fcf0e2449a6b525 * b16aedf5aa0de657ba637b39 * A feedfacedeadbeeffeedfacedeadbeef * abaddad2 * IV cafebabefacedbad * H b83b533708bf535d0aa6e52980d53b78 * N1 6f288b846e5fed9a18376829c86a6a16 * len({})||len(IV ) 00000000000000000000000000000040 * Y0 c43a83c4c4badec4354ca984db252f7d * E(K, Y0) e94ab9535c72bea9e089c93d48e62fb0 * X1 ed56aaf8a72d67049fdb9228edba1322 * X2 cd47221ccef0554ee4bb044c88150352 * Y1 c43a83c4c4badec4354ca984db252f7e * E(K, Y1) b8040969d08295afd226fcda0ddf61cf * Y2 c43a83c4c4badec4354ca984db252f7f * E(K, Y2) ef3c83225af93122192ad5c4f15dfe51 * Y3 c43a83c4c4badec4354ca984db252f80 * E(K, Y3) 6fbc659571f72de104c67b609d2fde67 * Y4 c43a83c4c4badec4354ca984db252f81 * E(K, Y4) f8e3581441a1e950785c3ea1430c6fa6 * X3 9379e2feae14649c86cf2250e3a81916 * X4 65dde904c92a6b3db877c4817b50a5f4 * X5 48c53cf863b49a1b0bbfc48c3baaa89d * X6 08c873f1c8cec3effc209a07468caab1 * len(A)||len(C) 00000000000000a000000000000001e0 * GHASH(H, A, C) df586bb4c249b92cb6922877e444d37b * C 61353b4c2806934a777ff51fa22a4755 * 699b2a714fcdc6f83766e5f97b6c7423 * 73806900e49f24b22b097544d4896b42 * 4989b5e1ebac0f07c23f4598 * T 3612d2e79e3b0785561be14aaca2fccb */ static const uint8_t ae_data_aes_gcm_vect5_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 }; static const uint8_t ae_data_aes_gcm_vect5_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad }; static const uint8_t ae_data_aes_gcm_vect5_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2 }; static const uint8_t ae_data_aes_gcm_vect5_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39 }; static const uint8_t ae_data_aes_gcm_vect5_ctx[] = { 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a, 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55, 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8, 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23, 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2, 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42, 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07, 0xc2, 0x3f, 0x45, 0x98 }; static const uint8_t ae_data_aes_gcm_vect5_tag[] = { 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85, 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb }; /* * Test case 6 * K feffe9928665731c6d6a8f9467308308 * P d9313225f88406e5a55909c5aff5269a * 86a7a9531534f7da2e4c303d8a318a72 * 1c3c0c95956809532fcf0e2449a6b525 * b16aedf5aa0de657ba637b39 * A feedfacedeadbeeffeedfacedeadbeef * abaddad2 * IV 9313225df88406e555909c5aff5269aa * 6a7a9538534f7da1e4c303d2a318a728 * c3c0c95156809539fcf0e2429a6b5254 * 16aedbf5a0de6a57a637b39b * H b83b533708bf535d0aa6e52980d53b78 * N1 004d6599d7fb1634756e1e299d81630f * N2 88ffe8a3c8033df4b54d732f7f88408e * N3 24e694cfab657beabba8055aad495e23 * N4 d8349a5eda24943c8fbb2ef5168b20cb * len({})||len(IV ) 000000000000000000000000000001e0 * Y0 3bab75780a31c059f83d2a44752f9864 * E(K, Y0) 7dc63b399f2d98d57ab073b6baa4138e * X1 ed56aaf8a72d67049fdb9228edba1322 * X2 cd47221ccef0554ee4bb044c88150352 * Y1 3bab75780a31c059f83d2a44752f9865 * E(K, Y1) 55d37bbd9ad21353a6f93a690eca9e0e * Y2 3bab75780a31c059f83d2a44752f9866 * E(K, Y2) 3836bbf6d696e672946a1a01404fa6d5 * Y3 3bab75780a31c059f83d2a44752f9867 * E(K, Y3) 1dd8a5316ecc35c3e313bca59d2ac94a * Y4 3bab75780a31c059f83d2a44752f9868 * E(K, Y4) 6742982706a9f154f657d5dc94b746db * X3 31727669c63c6f078b5d22adbbbca384 * X4 480c00db2679065a7ed2f771a53acacd * X5 1c1ae3c355e2214466a9923d2ba6ab35 * X6 0694c6f16bb0275a48891d06590344b0 * len(A)||len(C) 00000000000000a000000000000001e0 * GHASH(H, A, C) 1c5afe9760d3932f3c9a878aac3dc3de * C 8ce24998625615b603a033aca13fb894 * be9112a5c3a211a8ba262a3cca7e2ca7 * 01e4a9a4fba43c90ccdcb281d48c7c6f * d62875d2aca417034c34aee5 * T 619cc5aefffe0bfa462af43c1699d050 */ static const uint8_t ae_data_aes_gcm_vect6_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }; static const uint8_t ae_data_aes_gcm_vect6_nonce[] = { 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, 0xa6, 0x37, 0xb3, 0x9b, }; static const uint8_t ae_data_aes_gcm_vect6_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2, }; static const uint8_t ae_data_aes_gcm_vect6_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, }; static const uint8_t ae_data_aes_gcm_vect6_ctx[] = { 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6, 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94, 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8, 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7, 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90, 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f, 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03, 0x4c, 0x34, 0xae, 0xe5, }; static const uint8_t ae_data_aes_gcm_vect6_tag[] = { 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50, }; /* * Test case 7 * K 00000000000000000000000000000000 * 0000000000000000 * P * IV 000000000000000000000000 * H aae06992acbf52a3e8f4a96ec9300bd7 * Y0 00000000000000000000000000000001 * E(K, Y0) cd33b28ac773f74ba00ed1f312572435 * len(A)||len(C) 00000000000000000000000000000000 * GHASH(H, A, C) 00000000000000000000000000000000 * C * T cd33b28ac773f74ba00ed1f312572435 */ static const uint8_t ae_data_aes_gcm_vect7_key[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t ae_data_aes_gcm_vect7_nonce[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #define ae_data_aes_gcm_vect7_aad NULL #define ae_data_aes_gcm_vect7_ptx NULL #define ae_data_aes_gcm_vect7_ctx NULL static const uint8_t ae_data_aes_gcm_vect7_tag[] = { 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b, 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35, }; /* * Test case 8 * K 00000000000000000000000000000000 * 0000000000000000 * P 00000000000000000000000000000000 * IV 000000000000000000000000 * H aae06992acbf52a3e8f4a96ec9300bd7 * Y0 00000000000000000000000000000001 * E(K, Y0) cd33b28ac773f74ba00ed1f312572435 * Y1 00000000000000000000000000000002 * E(K, Y1) 98e7247c07f0fe411c267e4384b0f600 * X1 90e87315fb7d4e1b4092ec0cbfda5d7d * len(A)||len(C) 00000000000000000000000000000080 * GHASH(H, A, C) e2c63f0ac44ad0e02efa05ab6743d4ce * C 98e7247c07f0fe411c267e4384b0f600 * T 2ff58d80033927ab8ef4d4587514f0fb */ static const uint8_t ae_data_aes_gcm_vect8_key[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t ae_data_aes_gcm_vect8_nonce[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #define ae_data_aes_gcm_vect8_aad NULL static const uint8_t ae_data_aes_gcm_vect8_ptx[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t ae_data_aes_gcm_vect8_ctx[] = { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41, 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00, }; static const uint8_t ae_data_aes_gcm_vect8_tag[] = { 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab, 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb, }; /* Test case 9 */ static const uint8_t ae_data_aes_gcm_vect9_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, }; static const uint8_t ae_data_aes_gcm_vect9_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88, }; #define ae_data_aes_gcm_vect9_aad NULL static const uint8_t ae_data_aes_gcm_vect9_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55, }; static const uint8_t ae_data_aes_gcm_vect9_ctx[] = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56, }; static const uint8_t ae_data_aes_gcm_vect9_tag[] = { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf, 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14, }; /* Test case 10 */ static const uint8_t ae_data_aes_gcm_vect10_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, }; static const uint8_t ae_data_aes_gcm_vect10_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88, }; static const uint8_t ae_data_aes_gcm_vect10_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2, }; static const uint8_t ae_data_aes_gcm_vect10_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, }; static const uint8_t ae_data_aes_gcm_vect10_ctx[] = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, 0xcc, 0xda, 0x27, 0x10, }; static const uint8_t ae_data_aes_gcm_vect10_tag[] = { 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f, 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c, }; /* Test case 11 */ static const uint8_t ae_data_aes_gcm_vect11_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, }; static const uint8_t ae_data_aes_gcm_vect11_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, }; static const uint8_t ae_data_aes_gcm_vect11_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2, }; static const uint8_t ae_data_aes_gcm_vect11_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, }; static const uint8_t ae_data_aes_gcm_vect11_ctx[] = { 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54, 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8, 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f, 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57, 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75, 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9, 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f, 0xa0, 0xf0, 0x62, 0xf7, }; static const uint8_t ae_data_aes_gcm_vect11_tag[] = { 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24, 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8, }; /* Test case 12 */ static const uint8_t ae_data_aes_gcm_vect12_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, }; static const uint8_t ae_data_aes_gcm_vect12_nonce[] = { 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, 0xa6, 0x37, 0xb3, 0x9b, }; static const uint8_t ae_data_aes_gcm_vect12_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2, }; static const uint8_t ae_data_aes_gcm_vect12_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, }; static const uint8_t ae_data_aes_gcm_vect12_ctx[] = { 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c, 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff, 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef, 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45, 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9, 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3, 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7, 0xe9, 0xb7, 0x37, 0x3b, }; static const uint8_t ae_data_aes_gcm_vect12_tag[] = { 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb, 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9, }; /* Test case 13 */ static const uint8_t ae_data_aes_gcm_vect13_key[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t ae_data_aes_gcm_vect13_nonce[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #define ae_data_aes_gcm_vect13_aad NULL #define ae_data_aes_gcm_vect13_ptx NULL #define ae_data_aes_gcm_vect13_ctx NULL static const uint8_t ae_data_aes_gcm_vect13_tag[] = { 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9, 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b, }; /* Test case 14 */ static const uint8_t ae_data_aes_gcm_vect14_key[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t ae_data_aes_gcm_vect14_nonce[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #define ae_data_aes_gcm_vect14_aad NULL static const uint8_t ae_data_aes_gcm_vect14_ptx[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t ae_data_aes_gcm_vect14_ctx[] = { 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18, }; static const uint8_t ae_data_aes_gcm_vect14_tag[] = { 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0, 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19, }; /* Test case 15 */ static const uint8_t ae_data_aes_gcm_vect15_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }; static const uint8_t ae_data_aes_gcm_vect15_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88, }; #define ae_data_aes_gcm_vect15_aad NULL static const uint8_t ae_data_aes_gcm_vect15_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55, }; static const uint8_t ae_data_aes_gcm_vect15_ctx[] = { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad, }; static const uint8_t ae_data_aes_gcm_vect15_tag[] = { 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd, 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c, }; /* Test case 16 */ static const uint8_t ae_data_aes_gcm_vect16_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }; static const uint8_t ae_data_aes_gcm_vect16_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88, }; static const uint8_t ae_data_aes_gcm_vect16_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2, }; static const uint8_t ae_data_aes_gcm_vect16_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, }; static const uint8_t ae_data_aes_gcm_vect16_ctx[] = { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, 0xbc, 0xc9, 0xf6, 0x62, }; static const uint8_t ae_data_aes_gcm_vect16_tag[] = { 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68, 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b, }; /* Test case 17 */ static const uint8_t ae_data_aes_gcm_vect17_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }; static const uint8_t ae_data_aes_gcm_vect17_nonce[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, }; static const uint8_t ae_data_aes_gcm_vect17_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2, }; static const uint8_t ae_data_aes_gcm_vect17_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, }; static const uint8_t ae_data_aes_gcm_vect17_ctx[] = { 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32, 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb, 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa, 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0, 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0, 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78, 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99, 0xf4, 0x7c, 0x9b, 0x1f, }; static const uint8_t ae_data_aes_gcm_vect17_tag[] = { 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4, 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2, }; /* Test case 18 */ static const uint8_t ae_data_aes_gcm_vect18_key[] = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }; static const uint8_t ae_data_aes_gcm_vect18_nonce[] = { 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, 0xa6, 0x37, 0xb3, 0x9b, }; static const uint8_t ae_data_aes_gcm_vect18_aad[] = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2, }; static const uint8_t ae_data_aes_gcm_vect18_ptx[] = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, }; static const uint8_t ae_data_aes_gcm_vect18_ctx[] = { 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1, 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20, 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19, 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4, 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45, 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde, 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e, 0x44, 0xae, 0x7e, 0x3f, }; static const uint8_t ae_data_aes_gcm_vect18_tag[] = { 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0, 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a, }; /* * Test data generated with * http://www.mobilefish.com/services/rsa_key_generation/rsa_key_generation.php * selecting 1024 bit key */ static const uint8_t ac_rsassa_vect1_modulus[] = { 0xab, 0x42, 0x30, 0x54, 0x02, 0x15, 0x19, 0x4f, 0x03, 0x15, 0x73, 0xdf, 0x96, 0x4c, 0x23, 0xeb, 0xd3, 0xd5, 0xf2, 0xff, 0x17, 0xf4, 0x1f, 0x5c, 0x41, 0x26, 0x3e, 0x20, 0x15, 0x6d, 0x0a, 0x70, 0x8d, 0x9e, 0x9e, 0x67, 0x47, 0x87, 0x6a, 0x15, 0xb5, 0x40, 0x38, 0x99, 0x64, 0x90, 0xc1, 0x32, 0x32, 0x95, 0xc7, 0x63, 0x0a, 0xac, 0x5b, 0xcc, 0x21, 0x6b, 0x51, 0x7b, 0xa5, 0xef, 0x7b, 0x62, 0x12, 0x34, 0x2d, 0x8d, 0xb6, 0x0d, 0x24, 0x92, 0xa4, 0x83, 0xd4, 0x3b, 0xa5, 0x29, 0xe2, 0x94, 0xfc, 0xcd, 0x5e, 0xcb, 0xc6, 0x52, 0x7b, 0xf7, 0x65, 0x80, 0x1f, 0x63, 0xcb, 0x4f, 0x40, 0x27, 0x5b, 0x2d, 0x2a, 0x9f, 0xce, 0x9b, 0x33, 0x97, 0xeb, 0xbe, 0xcb, 0x34, 0x22, 0xff, 0x5f, 0x21, 0x21, 0xba, 0x75, 0xb3, 0xba, 0x8f, 0x00, 0x9e, 0x08, 0x66, 0x86, 0x4a, 0x8e, 0x40, 0xb2, 0x5f }; static const uint8_t ac_rsassa_vect1_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_rsassa_vect1_priv_exp[] = { 0x91, 0xaa, 0x4f, 0xae, 0xf4, 0xc2, 0x7b, 0x6f, 0x60, 0x21, 0x1c, 0x18, 0xde, 0x1e, 0xcf, 0x22, 0xe4, 0x60, 0x83, 0x3a, 0x04, 0x66, 0xc9, 0x51, 0xcf, 0xbc, 0x36, 0x75, 0x55, 0xa4, 0x14, 0x90, 0x1d, 0x75, 0x00, 0x28, 0xba, 0x87, 0x6c, 0x6d, 0x20, 0x68, 0x8a, 0x7b, 0xb6, 0x35, 0x05, 0x8e, 0xab, 0xc6, 0x07, 0xfc, 0xae, 0xf4, 0x61, 0x74, 0x24, 0x2c, 0xc2, 0xf6, 0xd7, 0xf1, 0xf5, 0x4f, 0xd3, 0x68, 0x86, 0x9b, 0x40, 0x47, 0x74, 0x51, 0x2a, 0xe3, 0x87, 0xe3, 0x6f, 0x8c, 0x2e, 0x71, 0xb9, 0xe1, 0x49, 0x62, 0x8b, 0x1f, 0x00, 0x92, 0x51, 0x82, 0x5b, 0x56, 0xeb, 0x55, 0x4e, 0x17, 0x67, 0x91, 0x74, 0xc3, 0x01, 0xdc, 0x34, 0xda, 0x56, 0x03, 0x3c, 0x5d, 0x50, 0xb5, 0xa5, 0xf5, 0xd0, 0xe1, 0x84, 0x7f, 0x2c, 0x16, 0x86, 0x34, 0x1d, 0xb1, 0x8f, 0xd9, 0xb4, 0x0b, 0x35, 0x79 }; static const uint8_t ac_rsassa_vect1_prime1[] = { 0xec, 0xbb, 0x19, 0x15, 0xc6, 0x52, 0xee, 0xf2, 0x75, 0x0b, 0x2f, 0x4f, 0x1b, 0x2e, 0xd5, 0x14, 0x13, 0x26, 0xb4, 0xb4, 0x8d, 0x1d, 0xbd, 0x27, 0xbb, 0x38, 0xba, 0x2f, 0xa7, 0xc7, 0xb6, 0x76, 0x88, 0xad, 0x73, 0x24, 0x56, 0xe4, 0xd6, 0x9e, 0xe1, 0x20, 0x50, 0x4e, 0x90, 0x09, 0xb1, 0xf7, 0x58, 0x1f, 0x47, 0x82, 0x88, 0xe7, 0xd8, 0xab, 0x3c, 0x1c, 0x9d, 0xc1, 0xa7, 0x79, 0x5c, 0x65 }; static const uint8_t ac_rsassa_vect1_prime2[] = { 0xb9, 0x32, 0xce, 0x2d, 0x38, 0xb4, 0x21, 0x7f, 0x9e, 0x79, 0x36, 0xf8, 0x6a, 0xf4, 0x99, 0xae, 0x57, 0x1b, 0xd6, 0x1c, 0x53, 0xf7, 0xf9, 0x61, 0xed, 0x47, 0xca, 0x7d, 0x76, 0xd7, 0x4e, 0xc6, 0x59, 0x51, 0x2d, 0xea, 0x91, 0x0f, 0xdf, 0x56, 0x77, 0xa9, 0x2e, 0xf7, 0x63, 0x57, 0x14, 0x93, 0x3b, 0x6f, 0x39, 0x4d, 0x88, 0x18, 0x2f, 0x78, 0xfc, 0xa3, 0xdb, 0xf6, 0xc0, 0x05, 0xdd, 0x73 }; static const uint8_t ac_rsassa_vect1_exp1[] = { 0xaa, 0xa7, 0x45, 0xb2, 0x18, 0xc1, 0xf8, 0x56, 0xf8, 0x61, 0x13, 0xbd, 0xa7, 0x0e, 0xdf, 0xb4, 0x15, 0x0a, 0x36, 0x02, 0x62, 0x28, 0x2a, 0x0f, 0xd6, 0x3b, 0x52, 0x9c, 0xc0, 0x0a, 0x8c, 0x52, 0x6e, 0xbc, 0xfa, 0xe0, 0x1b, 0x73, 0xe3, 0xf3, 0xac, 0xbe, 0xaa, 0xa5, 0xb7, 0xd8, 0x05, 0x5f, 0x15, 0x3b, 0x97, 0x45, 0x56, 0x84, 0x2c, 0x01, 0x64, 0xd8, 0x0c, 0x31, 0x6a, 0x15, 0x66, 0xb1 }; static const uint8_t ac_rsassa_vect1_exp2[] = { 0x82, 0xec, 0x11, 0xa9, 0x12, 0x5e, 0xf5, 0x17, 0x7c, 0xf6, 0x80, 0x0f, 0xd9, 0xbc, 0x95, 0x30, 0x14, 0x50, 0x8f, 0x6a, 0x73, 0x49, 0xe8, 0x38, 0x7c, 0x3f, 0xb6, 0x3c, 0x3f, 0xd9, 0x31, 0xcd, 0x32, 0xb3, 0x1a, 0xdc, 0xaa, 0x34, 0x28, 0x54, 0xbe, 0x3f, 0x11, 0xfe, 0xbd, 0x71, 0x80, 0x10, 0x1d, 0x82, 0x21, 0x66, 0x58, 0x01, 0x90, 0xfd, 0xdc, 0xcc, 0x11, 0xe2, 0x3c, 0x19, 0x69, 0x55 }; static const uint8_t ac_rsassa_vect1_coeff[] = { 0x2b, 0x9b, 0x48, 0xc0, 0xe1, 0xcb, 0x28, 0x9c, 0x03, 0xb2, 0xcf, 0xc6, 0xf6, 0xbb, 0xbe, 0x1b, 0xad, 0xe6, 0x3b, 0xd3, 0x65, 0xbb, 0xca, 0xb7, 0x43, 0x17, 0x8e, 0x3d, 0xb1, 0x6d, 0xc3, 0x06, 0xad, 0x7d, 0xe8, 0x81, 0xb9, 0x5a, 0x13, 0xad, 0x18, 0x46, 0xcd, 0x93, 0xb6, 0x44, 0x1f, 0xd0, 0x4d, 0x73, 0xb1, 0x00, 0x4d, 0x46, 0xc8, 0x22, 0x4a, 0x7e, 0xb8, 0xe6, 0xdd, 0xae, 0x5f, 0x40 }; static const uint8_t ac_rsassa_vect1_ptx[] = { 0x91, 0x07, 0xf4, 0x49, 0x0a, 0xf9, 0x99, 0x12, 0xaa, 0x95, 0x02, 0x76, 0x95, 0x1b, 0xfa, 0x94, 0x32, 0xbf }; static const uint8_t ac_rsassa_vect1_out[] = { 0x5f, 0xf8, 0xc0, 0x00, 0x4b, 0xd6, 0x5a, 0x3b, 0xf9, 0x34, 0xad, 0xca, 0x24, 0x8f, 0x8f, 0x99, 0xba, 0x24, 0xb3, 0x84, 0x1b, 0x82, 0xff, 0xdb, 0x35, 0x00, 0xa0, 0x66, 0x62, 0xc3, 0x85, 0x4d, 0xfc, 0x4b, 0x42, 0xce, 0xd1, 0x29, 0x39, 0x04, 0x16, 0xcb, 0xa2, 0x53, 0x12, 0x5d, 0x71, 0x5c, 0xcd, 0x37, 0xcb, 0x0a, 0x5d, 0x07, 0xdd, 0xb2, 0x18, 0x94, 0x47, 0x2a, 0x82, 0x64, 0x7a, 0xd3, 0xbb, 0x83, 0xc5, 0x9c, 0x50, 0x85, 0x65, 0x94, 0x0f, 0x01, 0xfe, 0x20, 0xa0, 0x83, 0x4f, 0x3b, 0x78, 0x99, 0x48, 0x94, 0x36, 0xaf, 0x4a, 0xac, 0x89, 0xfa, 0xf6, 0xf8, 0x42, 0x86, 0xa5, 0xbe, 0x0d, 0xb3, 0x39, 0x42, 0xa0, 0x70, 0x56, 0x5f, 0xea, 0xc6, 0x8f, 0x31, 0xfe, 0x56, 0x56, 0xac, 0xf7, 0x4c, 0x9b, 0x8a, 0x06, 0x5a, 0xbd, 0x61, 0x92, 0xfc, 0xef, 0x4b, 0x26, 0x36, 0x6d, 0x91 }; /* * Test data generated with * http://www.mobilefish.com/services/rsa_key_generation/rsa_key_generation.php * selecting 2048 bit key */ static const uint8_t ac_rsassa_vect2_modulus[] = { 0x9a, 0x83, 0xda, 0x0e, 0xfb, 0xa1, 0x77, 0xc5, 0x34, 0x88, 0xac, 0x3d, 0xd1, 0x3e, 0x89, 0x3e, 0xca, 0xad, 0x40, 0x47, 0xdc, 0xff, 0xc6, 0x18, 0xc3, 0x1a, 0x95, 0xd3, 0x82, 0xb9, 0x98, 0xa8, 0xec, 0x90, 0xbe, 0xab, 0xef, 0x74, 0xb7, 0x58, 0xa0, 0x0d, 0x0f, 0xb5, 0x13, 0xb8, 0x7e, 0xf7, 0xdb, 0x19, 0x77, 0x55, 0xc5, 0xed, 0xa6, 0x60, 0xa7, 0xaf, 0xea, 0x83, 0x69, 0xcf, 0xcf, 0x50, 0x51, 0x94, 0xa7, 0xc0, 0x96, 0x68, 0xe6, 0x63, 0xef, 0xdf, 0xa8, 0x28, 0x4a, 0x50, 0xbf, 0xd7, 0x44, 0xbf, 0x0b, 0x0a, 0x41, 0xd6, 0x02, 0xfc, 0x3f, 0x06, 0x51, 0x82, 0xe4, 0x56, 0x3f, 0xe9, 0x37, 0x40, 0xe0, 0xaa, 0x18, 0x56, 0xcb, 0x2e, 0xd4, 0x02, 0x66, 0xcc, 0xfb, 0xbd, 0x6b, 0x34, 0xfd, 0x3d, 0x2c, 0xad, 0xeb, 0x8c, 0x7c, 0x85, 0x09, 0xd1, 0x00, 0x4f, 0xaf, 0xc7, 0x9d, 0x25, 0x19, 0x45, 0x3a, 0x54, 0x9d, 0xda, 0x4b, 0x3b, 0x11, 0x6b, 0xbc, 0x66, 0xb7, 0xb1, 0xa2, 0x79, 0x1c, 0xd5, 0x38, 0x7a, 0x7b, 0x62, 0xae, 0x8a, 0x35, 0xc7, 0x4b, 0xdd, 0x0e, 0x23, 0x78, 0xa3, 0xec, 0xcf, 0xe9, 0xa4, 0x26, 0x33, 0xca, 0x48, 0x08, 0xc1, 0x3c, 0xb0, 0xe8, 0xfa, 0x2f, 0xbb, 0x75, 0x8a, 0x3d, 0x45, 0xf4, 0xe5, 0x7a, 0x2f, 0x4d, 0xd8, 0x6f, 0x05, 0x14, 0x21, 0xb1, 0xfd, 0xd1, 0xbb, 0x3c, 0xa7, 0x1d, 0x2f, 0xe7, 0x79, 0xc2, 0x99, 0x49, 0x25, 0xef, 0x73, 0xd4, 0xe9, 0xbb, 0xf9, 0x1b, 0xeb, 0x0e, 0xb7, 0xdf, 0x53, 0xc1, 0xdc, 0x41, 0xf9, 0x92, 0x01, 0x68, 0x63, 0x84, 0x52, 0x78, 0xfc, 0xf8, 0x7f, 0x84, 0xa1, 0x47, 0xe3, 0x7c, 0x5b, 0x53, 0x82, 0x1b, 0x3a, 0x78, 0x7a, 0xae, 0x8d, 0x6a, 0xef, 0x87, 0x38, 0x28, 0x14, 0x4c, 0xf5, 0xd7, 0xb9, 0xd0, 0xad }; static const uint8_t ac_rsassa_vect2_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_rsassa_vect2_priv_exp[] = { 0x73, 0xdd, 0x01, 0x0b, 0x91, 0x26, 0xb0, 0x00, 0x01, 0x77, 0xa6, 0xe8, 0xa7, 0xd9, 0xe3, 0xe2, 0x60, 0xea, 0x6f, 0x34, 0x34, 0x04, 0xdb, 0x8f, 0xbf, 0xe5, 0x54, 0x8a, 0x09, 0x11, 0x90, 0xe6, 0xc2, 0x95, 0x7b, 0x54, 0xc4, 0x37, 0x5a, 0x30, 0xab, 0xbb, 0x7f, 0x96, 0xc1, 0xd5, 0xeb, 0xe7, 0x81, 0xb4, 0xe3, 0xe6, 0x3e, 0x88, 0x08, 0xe5, 0x9b, 0x78, 0x6f, 0x3a, 0xe1, 0x82, 0x41, 0xab, 0xb1, 0xb0, 0xed, 0xe5, 0x9d, 0x23, 0xc5, 0xf7, 0x14, 0x6d, 0x3a, 0xd4, 0x13, 0x7d, 0xdf, 0x8c, 0xd5, 0x71, 0x08, 0x1f, 0x45, 0xe4, 0xeb, 0xd2, 0x28, 0x94, 0x5d, 0x54, 0xf0, 0x51, 0xb8, 0x94, 0xf1, 0xa8, 0xc5, 0x8e, 0xe6, 0xb7, 0x56, 0x9e, 0xa3, 0xbd, 0xb5, 0x46, 0x6a, 0x52, 0xcc, 0x6c, 0x2c, 0xa4, 0xcd, 0xb7, 0x10, 0xd5, 0x04, 0x9e, 0x62, 0x11, 0x05, 0xd1, 0xbb, 0x36, 0xcc, 0x9f, 0x55, 0x91, 0x21, 0x2e, 0xe7, 0x10, 0x4a, 0xe9, 0xb1, 0xd2, 0xc7, 0x16, 0x45, 0x46, 0xd8, 0x9e, 0xd4, 0xe6, 0x7e, 0x90, 0xc9, 0x33, 0xf0, 0x4e, 0x9d, 0x1f, 0x46, 0x79, 0xcf, 0xcd, 0xf6, 0x77, 0x6a, 0x6c, 0x97, 0x77, 0x00, 0x3a, 0x78, 0x24, 0x81, 0xec, 0x2a, 0xae, 0x51, 0x77, 0xa0, 0xb2, 0xc9, 0xb8, 0x4a, 0xca, 0xab, 0x7a, 0x28, 0x3f, 0x99, 0x53, 0xa3, 0xab, 0xe8, 0x60, 0x7a, 0x6d, 0x2e, 0xda, 0xa6, 0x90, 0x24, 0xf6, 0x34, 0x51, 0x22, 0x7d, 0x32, 0x81, 0x0c, 0x50, 0xa5, 0x14, 0x69, 0x8b, 0xbc, 0x4e, 0x06, 0xcc, 0xc3, 0xe1, 0x69, 0x5f, 0xaa, 0xc3, 0x99, 0x46, 0x2f, 0xb7, 0x86, 0xc9, 0x39, 0xba, 0x58, 0x97, 0x4e, 0x40, 0xc1, 0x29, 0xe6, 0x0e, 0xa4, 0x7d, 0x4a, 0xdf, 0x87, 0x8c, 0x93, 0x7c, 0x22, 0x67, 0xae, 0xbb, 0x0e, 0xfc, 0x05, 0x67, 0x5f, 0xde, 0xe2, 0x21 }; static const uint8_t ac_rsassa_vect2_prime1[] = { 0xcd, 0xff, 0x70, 0x4b, 0x87, 0xc8, 0xd3, 0xad, 0x23, 0xb4, 0xe9, 0x63, 0x91, 0x50, 0xbd, 0x78, 0x28, 0x4f, 0x23, 0x5a, 0xd5, 0x32, 0x53, 0xae, 0x04, 0xe5, 0x87, 0x9c, 0xb4, 0x18, 0x07, 0x90, 0x6e, 0xaa, 0x8a, 0xfe, 0x1c, 0xfe, 0x60, 0x77, 0x85, 0x27, 0x87, 0x4b, 0x91, 0x72, 0x43, 0x9d, 0xe1, 0x71, 0x39, 0xe4, 0x0e, 0x7d, 0x03, 0xa9, 0x5d, 0xbc, 0xc2, 0x02, 0x87, 0xd9, 0x39, 0x98, 0xf0, 0x51, 0xac, 0x6a, 0x96, 0x7c, 0x00, 0xf9, 0xe4, 0x95, 0x02, 0xb8, 0xbd, 0xf1, 0xae, 0x2c, 0x15, 0x5a, 0x12, 0x30, 0x6e, 0x1d, 0xe4, 0x1e, 0x65, 0x65, 0xde, 0x2e, 0xdc, 0x93, 0x02, 0xc2, 0xbb, 0x9f, 0x7e, 0xec, 0xa3, 0xc4, 0x8f, 0x05, 0x07, 0xce, 0xbb, 0x9a, 0x53, 0x1c, 0x57, 0x77, 0x89, 0xff, 0x6c, 0xcb, 0xf8, 0xa1, 0xde, 0xbe, 0x14, 0x4b, 0xee, 0xd6, 0xad, 0x27, 0x04, 0x99 }; static const uint8_t ac_rsassa_vect2_prime2[] = { 0xc0, 0x05, 0x4f, 0x58, 0xa0, 0x22, 0x58, 0x60, 0x7b, 0xef, 0x87, 0x1f, 0x87, 0x39, 0x47, 0x48, 0xa8, 0x86, 0x15, 0xd5, 0xf9, 0xb5, 0xf8, 0x71, 0x81, 0xf9, 0xb7, 0x3e, 0x4a, 0xe8, 0x5d, 0xbc, 0xbf, 0x8f, 0x17, 0xc0, 0x96, 0xdc, 0xc2, 0x7f, 0x5e, 0x60, 0x65, 0xe7, 0xa2, 0xc6, 0x30, 0x25, 0x8b, 0xe9, 0xdb, 0x28, 0x10, 0xac, 0x02, 0x0e, 0x23, 0x0f, 0x14, 0x6b, 0xff, 0xd4, 0x09, 0xdd, 0x7c, 0x06, 0x5d, 0xb2, 0x6e, 0x32, 0x49, 0x62, 0xb7, 0x93, 0x5d, 0x24, 0x99, 0x03, 0x69, 0x9b, 0x60, 0x2e, 0x34, 0xa3, 0x9f, 0x62, 0x33, 0xaf, 0xc5, 0xdc, 0x8f, 0x10, 0x61, 0xfa, 0xc5, 0x8d, 0xa9, 0xcc, 0x86, 0x93, 0x7d, 0x1e, 0xa6, 0x7d, 0xcb, 0x6e, 0x69, 0xfe, 0xe1, 0x3c, 0x64, 0x01, 0x58, 0xd8, 0x1a, 0x0f, 0xf8, 0xcc, 0x34, 0xe5, 0x01, 0x2c, 0xb8, 0xf9, 0x90, 0x71, 0xe5, 0x35 }; static const uint8_t ac_rsassa_vect2_exp1[] = { 0x8b, 0x46, 0xc7, 0x8f, 0xe9, 0xb0, 0x78, 0x9d, 0xb9, 0x64, 0x99, 0xdf, 0xbd, 0xe2, 0x4f, 0x18, 0x2c, 0x78, 0xc5, 0x38, 0xa6, 0xa8, 0xae, 0x37, 0x1c, 0x0c, 0x6c, 0x52, 0x20, 0xd9, 0x96, 0x53, 0xaa, 0xdf, 0x17, 0xb6, 0x93, 0xb7, 0xd1, 0x55, 0x3d, 0xeb, 0xe9, 0xe7, 0xc7, 0xe0, 0xef, 0xa2, 0x91, 0x48, 0x52, 0x91, 0xc4, 0xd1, 0xf5, 0x65, 0xcf, 0x80, 0xcd, 0xd3, 0x94, 0x31, 0xe4, 0x65, 0x69, 0x26, 0x6f, 0x62, 0x69, 0x78, 0x51, 0xd8, 0xa3, 0x19, 0xb4, 0x8b, 0x5f, 0xb1, 0x45, 0xc7, 0x7c, 0x70, 0x37, 0x98, 0x12, 0xfb, 0x96, 0xbe, 0x8e, 0x63, 0xff, 0x82, 0xc3, 0x93, 0x89, 0xec, 0x4b, 0x9a, 0x9c, 0xe0, 0x36, 0x21, 0xb1, 0x68, 0xff, 0x4c, 0x61, 0x3f, 0x08, 0x2e, 0x43, 0x5d, 0x09, 0x2a, 0x6f, 0x4e, 0xc1, 0x3e, 0x00, 0x31, 0x97, 0xdb, 0x77, 0x12, 0x22, 0x64, 0x1d, 0x11 }; static const uint8_t ac_rsassa_vect2_exp2[] = { 0x88, 0x05, 0xfa, 0xec, 0x44, 0x1b, 0xb0, 0x51, 0x40, 0xda, 0x2f, 0xf5, 0x14, 0x9c, 0x6d, 0xb3, 0xb9, 0xb5, 0xaa, 0x58, 0x36, 0x99, 0x42, 0x52, 0x5e, 0x09, 0x60, 0x56, 0x5f, 0x47, 0xf5, 0xc7, 0x14, 0x47, 0xb0, 0x42, 0xbc, 0x5b, 0xcb, 0xe7, 0xe0, 0x1a, 0x17, 0x76, 0x1c, 0x27, 0x9a, 0xc9, 0xae, 0x30, 0x4e, 0x10, 0x36, 0xa7, 0x32, 0x99, 0x83, 0x1a, 0x56, 0x94, 0x1e, 0xd8, 0xbc, 0xd8, 0x49, 0xd8, 0x54, 0x9d, 0x66, 0x54, 0x77, 0x09, 0xd8, 0x13, 0x2b, 0x03, 0x16, 0xe5, 0x84, 0xf5, 0x0d, 0x10, 0x0e, 0x37, 0xee, 0x5a, 0xe9, 0x54, 0x55, 0xac, 0x65, 0x27, 0xec, 0xd0, 0x71, 0x0b, 0x66, 0x42, 0x3c, 0xfe, 0xd3, 0xbe, 0x57, 0xa0, 0x7a, 0xf0, 0x4f, 0x63, 0xbf, 0x78, 0x41, 0x3b, 0x77, 0x0d, 0x36, 0x81, 0x23, 0xf4, 0xbc, 0x6f, 0x91, 0x02, 0x76, 0x52, 0x4b, 0x91, 0x73, 0x15 }; static const uint8_t ac_rsassa_vect2_coeff[] = { 0xb1, 0x70, 0x9b, 0x0c, 0xec, 0xc7, 0x8b, 0xc3, 0x50, 0xe4, 0x3a, 0x85, 0xda, 0x6c, 0xf6, 0x36, 0x30, 0x27, 0xe5, 0xf5, 0xa2, 0x96, 0x1d, 0x78, 0xa2, 0xd5, 0x89, 0xce, 0xef, 0xba, 0xd9, 0xfc, 0x3e, 0x91, 0x0e, 0x63, 0x42, 0x31, 0x2d, 0x99, 0xd7, 0x47, 0x1d, 0xb2, 0x42, 0x56, 0xd3, 0x07, 0x76, 0x31, 0x35, 0x92, 0x23, 0xcd, 0x81, 0x7d, 0xc2, 0x14, 0xfd, 0x90, 0x71, 0xbb, 0x43, 0x5e, 0x8b, 0xec, 0x1f, 0x8a, 0xf5, 0xe6, 0x08, 0xee, 0x26, 0x79, 0xa1, 0xb4, 0xee, 0x58, 0x99, 0x4c, 0xad, 0x91, 0x6a, 0xaa, 0x5c, 0x4b, 0xbc, 0xbc, 0xad, 0xf7, 0xe1, 0xdd, 0x48, 0xfd, 0x98, 0x82, 0x06, 0x11, 0xac, 0xc5, 0x74, 0xb5, 0xa9, 0x16, 0x4a, 0x6c, 0xc1, 0xae, 0x25, 0x70, 0xde, 0x96, 0xcf, 0xad, 0x2a, 0x8b, 0x89, 0x39, 0x77, 0x94, 0xae, 0x4b, 0x84, 0x02, 0x92, 0x0c, 0x05, 0x42 }; static const uint8_t ac_rsassa_vect2_ptx[] = { 0x91, 0x07, 0xf4, 0x49, 0x0a, 0xf9, 0x99, 0x12, 0xaa, 0x95, 0x02, 0x76, 0x95, 0x1b, 0xfa, 0x94, 0x32, 0xbf }; static const uint8_t ac_rsassa_vect2_out[] = { 0x47, 0x16, 0xe1, 0xee, 0x54, 0xb7, 0xe0, 0x8a, 0xcc, 0x5d, 0x1b, 0xae, 0xde, 0xc1, 0x43, 0x09, 0xd8, 0x4d, 0xe3, 0xcd, 0x5f, 0xd5, 0x48, 0x51, 0xd3, 0x1c, 0x62, 0x5d, 0x1c, 0x13, 0x0b, 0x05, 0x89, 0x77, 0xd6, 0x95, 0x4e, 0x8f, 0x4a, 0x0a, 0x51, 0xc2, 0x0c, 0xcf, 0xfe, 0x4c, 0x24, 0x6d, 0x0c, 0x73, 0x33, 0x46, 0xd9, 0xdf, 0xfe, 0x6e, 0x06, 0xcb, 0x8c, 0x79, 0x32, 0x3f, 0xbd, 0x1d, 0x10, 0x3a, 0x60, 0x3c, 0xe8, 0x1c, 0xbe, 0xd9, 0xa8, 0x00, 0x76, 0x5b, 0x6d, 0x7a, 0x62, 0xdd, 0x3c, 0x21, 0x53, 0x16, 0xab, 0x0b, 0x6c, 0x8d, 0x43, 0xfd, 0xba, 0x9a, 0xd9, 0x9a, 0xc1, 0x21, 0x0c, 0x79, 0x78, 0x93, 0x86, 0xbd, 0xdf, 0x63, 0xca, 0xc8, 0xd6, 0xc6, 0x20, 0xc9, 0x08, 0xf6, 0xc8, 0xfe, 0x22, 0xa4, 0xc6, 0xe3, 0x49, 0xe4, 0x63, 0x01, 0x03, 0x5b, 0x78, 0x63, 0x3a, 0x02, 0x9c, 0xa1, 0xed, 0x20, 0x01, 0x10, 0x79, 0x2e, 0x8d, 0xe5, 0x70, 0xae, 0x1a, 0x5f, 0x72, 0x9e, 0x31, 0xab, 0x21, 0xd3, 0xd7, 0x59, 0x5f, 0x26, 0xbf, 0x45, 0x31, 0x6d, 0xc3, 0xa6, 0x45, 0x7b, 0x6d, 0x8e, 0x3c, 0xb0, 0x42, 0xb4, 0xeb, 0x09, 0xcf, 0x54, 0x0a, 0x72, 0x38, 0xf8, 0x67, 0x83, 0xa7, 0x7b, 0xce, 0x52, 0x74, 0x0f, 0x03, 0x9d, 0x09, 0x1f, 0xe7, 0xf0, 0x85, 0x27, 0x3e, 0x1d, 0x2f, 0xea, 0x2d, 0xa8, 0xdc, 0x58, 0x00, 0x9b, 0xdc, 0x10, 0x95, 0xe4, 0x5f, 0x69, 0x20, 0x11, 0x1c, 0x3c, 0x58, 0x27, 0xcd, 0x1f, 0x23, 0xc9, 0x28, 0xfa, 0x98, 0x53, 0xce, 0xa6, 0xe6, 0x64, 0x20, 0x2e, 0xe1, 0x2b, 0x35, 0x30, 0x4e, 0xb2, 0x14, 0xaa, 0x7f, 0x89, 0x6f, 0xa8, 0xb1, 0xd6, 0x30, 0x2c, 0x7c, 0xe5, 0x26, 0xe4, 0xce, 0x61, 0x6c, 0xc6, 0x06, 0xbc, 0xea, 0x26, 0x6f, 0xe4 }; /* * 3072-bit RSA * Test data generated with: * openssl genrsa -out 3072.pem 3072 * openssl rsa -in 3072.pem -text -noout * (dd if=/dev/zero bs=1 count=368; \ * printf '\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10';) | \ * openssl rsautl -encrypt -raw -inkey 3072.pem | od -t x1 */ static const uint8_t ac_rsassa_vect18_modulus[] = { 0xca, 0x72, 0xcc, 0xef, 0xad, 0x0a, 0xbe, 0xd6, 0x35, 0x16, 0x23, 0x93, 0x16, 0x8f, 0xee, 0x31, 0x4c, 0xc2, 0x6f, 0x20, 0x99, 0x38, 0x69, 0xc1, 0xcb, 0x57, 0x5f, 0x7e, 0x35, 0xba, 0x85, 0xa7, 0xe9, 0xe1, 0xe6, 0x1d, 0x39, 0xc2, 0x41, 0x7d, 0xc3, 0xa3, 0xea, 0x6a, 0xdb, 0x5a, 0x07, 0x4a, 0x4a, 0x3a, 0xcb, 0xce, 0xf2, 0xa0, 0xdd, 0xcd, 0x4b, 0x99, 0x67, 0x0d, 0x38, 0xf1, 0x40, 0x41, 0xed, 0x5b, 0xb8, 0xf8, 0xea, 0xc7, 0xd9, 0x91, 0x30, 0x42, 0x8d, 0xee, 0x48, 0xc4, 0x7c, 0x7f, 0x0d, 0x33, 0x7b, 0x8f, 0x38, 0x18, 0xed, 0x7f, 0x02, 0x8c, 0x44, 0x52, 0x6a, 0x93, 0x37, 0xfd, 0x6a, 0x27, 0x3e, 0xbf, 0x03, 0x78, 0xe3, 0xfc, 0x29, 0x83, 0x20, 0x65, 0xe3, 0xfa, 0x2c, 0x93, 0xcb, 0x83, 0x90, 0x61, 0xd3, 0x1a, 0x9a, 0x65, 0x53, 0xf0, 0xea, 0x2c, 0xf8, 0x61, 0x8d, 0x9f, 0x54, 0x22, 0x7e, 0x2e, 0x1e, 0x36, 0x62, 0xd9, 0x9f, 0x7d, 0x56, 0xf4, 0xad, 0x61, 0xb6, 0x1a, 0x7b, 0x40, 0x59, 0x10, 0x04, 0xff, 0xea, 0x16, 0x98, 0x36, 0x61, 0x9d, 0x5c, 0x62, 0xcb, 0xf6, 0xc2, 0x95, 0x3b, 0x91, 0xc9, 0xff, 0xf0, 0x65, 0x7e, 0x0e, 0xa2, 0x43, 0x89, 0x24, 0xaa, 0xdd, 0x0e, 0xed, 0xb0, 0x8c, 0xb0, 0xb2, 0x4d, 0x80, 0x2a, 0x11, 0xcf, 0x35, 0xe9, 0x82, 0xc6, 0x67, 0x37, 0x3b, 0xc9, 0xd5, 0xa1, 0xd8, 0x8e, 0x07, 0x93, 0xfd, 0xe7, 0x5a, 0x54, 0xc6, 0xf0, 0xae, 0x82, 0x43, 0x86, 0x62, 0x70, 0x44, 0x09, 0xb7, 0x62, 0x58, 0xb2, 0x17, 0x9f, 0x3c, 0xa5, 0x10, 0x60, 0xc6, 0x61, 0x47, 0x83, 0x1f, 0x3e, 0xa7, 0xf2, 0x26, 0x5b, 0x70, 0xd5, 0x81, 0x47, 0x6a, 0x78, 0xe0, 0x85, 0x16, 0x36, 0xc0, 0x2e, 0xbb, 0x01, 0x6c, 0x99, 0x19, 0xeb, 0x22, 0xf5, 0x13, 0xe3, 0x38, 0x67, 0x9f, 0x85, 0xed, 0x0f, 0x05, 0x22, 0x29, 0x34, 0xda, 0x4b, 0x8f, 0x44, 0xfa, 0x30, 0xf8, 0xe6, 0xc1, 0xf6, 0x9d, 0x9b, 0xd6, 0x56, 0x81, 0x2c, 0x58, 0x4d, 0xf8, 0x90, 0xef, 0xf9, 0xea, 0x31, 0x6f, 0x04, 0xd2, 0x8d, 0xc1, 0xc9, 0x6e, 0x90, 0xd1, 0xff, 0xce, 0xab, 0x58, 0x9f, 0x98, 0x57, 0x7c, 0x7a, 0x79, 0x8a, 0xb2, 0x3d, 0x32, 0x0d, 0x0c, 0x3b, 0x6a, 0xd4, 0x33, 0x49, 0x50, 0xe1, 0x41, 0x3d, 0x07, 0x32, 0xfc, 0x6d, 0x9f, 0xfc, 0x8c, 0xad, 0x05, 0x74, 0xa9, 0x37, 0x5e, 0x70, 0x0b, 0xe9, 0xdf, 0xc1, 0x96, 0xca, 0x7c, 0xca, 0xbd, 0xab, 0x8e, 0x68, 0xd0, 0xf9, 0x3f, 0x5f, 0x90, 0xb4, 0x30, 0x17, 0x4d, 0x3a, 0xf9, 0xa1, 0xf0, 0xcb, 0xc7, 0x54, 0xb3, 0xa6, 0x0f, 0xd7, 0xe7, 0x68, 0x43, 0x5f, 0x39, 0xa6, 0x05, 0x83, 0x74, 0xf9, 0xd9, 0x94, 0xab }; static const uint8_t ac_rsassa_vect18_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_rsassa_vect18_priv_exp[] = { 0xaf, 0xb1, 0xa9, 0xc1, 0x67, 0x7f, 0xa7, 0xd6, 0xe7, 0x03, 0x6b, 0xa4, 0x3f, 0x34, 0x72, 0x17, 0x3e, 0xf2, 0x8e, 0xd6, 0xcf, 0xa2, 0x71, 0xc5, 0xc9, 0xde, 0xed, 0xf4, 0xee, 0x54, 0x0d, 0xa2, 0x88, 0x0b, 0x90, 0x55, 0x54, 0xc7, 0x0d, 0x67, 0x43, 0xde, 0x81, 0x96, 0x72, 0xff, 0x52, 0xcc, 0x5a, 0x57, 0x64, 0x81, 0x19, 0x78, 0x1a, 0x86, 0x0c, 0x51, 0xf9, 0x69, 0x34, 0x3d, 0xca, 0xf2, 0x6c, 0x37, 0xe9, 0xf3, 0xbc, 0x6d, 0xec, 0x97, 0x60, 0x36, 0xa2, 0x4e, 0x65, 0xc0, 0x7f, 0xfb, 0x13, 0x4d, 0xd6, 0xb1, 0x98, 0x91, 0xa9, 0xab, 0x4c, 0x5e, 0xc6, 0xfc, 0x6f, 0x99, 0x8c, 0x41, 0xd5, 0x5a, 0x71, 0xcd, 0xfc, 0x09, 0x72, 0x72, 0x68, 0xe4, 0x6f, 0xbd, 0x7d, 0x78, 0xa4, 0x2f, 0x2f, 0xb3, 0xe2, 0x1d, 0xc3, 0xc3, 0x96, 0xb2, 0xd1, 0x82, 0x86, 0xf8, 0xb8, 0x26, 0x91, 0x6d, 0xf0, 0xea, 0x6e, 0x6f, 0x3f, 0xb1, 0x1b, 0x60, 0x9a, 0x55, 0x80, 0x9d, 0x9f, 0xca, 0xe8, 0xeb, 0x5a, 0x83, 0xa1, 0xc7, 0x91, 0x4f, 0x37, 0xac, 0x9c, 0x34, 0xb5, 0xca, 0x87, 0x5f, 0x06, 0x7c, 0x04, 0xaa, 0xd6, 0xa3, 0xd3, 0x96, 0xd6, 0xde, 0x7d, 0xe3, 0xdd, 0x56, 0x97, 0x32, 0xc7, 0x46, 0x49, 0xaa, 0x66, 0x49, 0xf3, 0x1f, 0x0a, 0xbb, 0x6b, 0xc7, 0x40, 0xf9, 0x1c, 0xca, 0x6d, 0xbb, 0xa2, 0x9a, 0xf4, 0xae, 0x38, 0xf6, 0x53, 0x12, 0xb9, 0xea, 0xef, 0x97, 0xbd, 0xfa, 0x1d, 0xb3, 0x85, 0x25, 0x0e, 0x24, 0x8c, 0xd2, 0x2d, 0x6e, 0x2d, 0xeb, 0xd0, 0x4c, 0x1f, 0x82, 0x99, 0x96, 0x7f, 0x7f, 0x55, 0x13, 0x20, 0x24, 0xd0, 0xa3, 0x62, 0x47, 0x84, 0x24, 0x3e, 0x61, 0xc1, 0x97, 0xa8, 0x56, 0x1a, 0x60, 0x88, 0x13, 0x36, 0x82, 0xc8, 0xfe, 0x8e, 0x96, 0x83, 0x47, 0x40, 0xc4, 0x89, 0x5d, 0x8d, 0xb4, 0xa8, 0x4e, 0x44, 0x7e, 0xc1, 0x72, 0x79, 0xd5, 0xc8, 0x10, 0x72, 0x76, 0x38, 0x84, 0x43, 0x92, 0x17, 0x6b, 0x9e, 0xbd, 0xa8, 0x35, 0xbf, 0xe8, 0xb3, 0xd5, 0x97, 0xbf, 0xb7, 0x6a, 0x3c, 0xca, 0xb9, 0x9c, 0x3f, 0x92, 0x94, 0xb3, 0x5d, 0x82, 0xca, 0xa7, 0x19, 0xa4, 0x96, 0xa7, 0xbe, 0xfa, 0xc5, 0xd0, 0xb0, 0xf3, 0x93, 0x8d, 0x2f, 0x39, 0x4a, 0x08, 0x5d, 0xfc, 0x5d, 0xfe, 0x99, 0x2a, 0x4e, 0x3a, 0x90, 0x10, 0xc6, 0xf8, 0x4c, 0xe3, 0xae, 0xcb, 0xd5, 0x7f, 0x18, 0xab, 0xe6, 0x3b, 0x48, 0xf5, 0xdf, 0x25, 0x51, 0xe4, 0xad, 0x3e, 0x77, 0x60, 0x5d, 0x68, 0xa5, 0x91, 0xcb, 0x09, 0x6b, 0x2d, 0x98, 0x51, 0x73, 0x6b, 0x5b, 0xa9, 0x45, 0xfa, 0xf5, 0xa1, 0xdc, 0x3b, 0x12, 0x05, 0x70, 0x1d, 0x73, 0x63, 0x2d, 0xa3, 0x28, 0xac, 0x51, 0xe6, 0x0d, 0x61 }; static const uint8_t ac_rsassa_vect18_prime1[] = { 0xea, 0x1e, 0xe9, 0x51, 0xc9, 0x72, 0xdf, 0x9e, 0x72, 0x8e, 0xea, 0xe8, 0x09, 0x78, 0x52, 0x2e, 0xfe, 0x7f, 0x87, 0x6e, 0xc5, 0x04, 0x88, 0x6b, 0x67, 0xf6, 0x2b, 0x0d, 0xd2, 0x0b, 0xfb, 0x4f, 0xa2, 0x1c, 0x8c, 0xf6, 0x8a, 0xbe, 0x8b, 0x1b, 0x1c, 0xec, 0x7e, 0x75, 0xf8, 0xd9, 0xed, 0x55, 0x04, 0x08, 0xcc, 0x2c, 0x8b, 0x67, 0xa8, 0xc2, 0xfb, 0x2e, 0x0d, 0xd9, 0x14, 0x70, 0x13, 0xf7, 0x94, 0x15, 0x74, 0xdd, 0x23, 0x66, 0x45, 0x43, 0x41, 0x30, 0xc8, 0xec, 0x06, 0x23, 0xfc, 0xd6, 0xaa, 0x9d, 0x95, 0xa6, 0x2b, 0xee, 0x53, 0xf5, 0xd5, 0x6c, 0x01, 0x23, 0x42, 0xa9, 0x36, 0x93, 0xe1, 0x03, 0x96, 0x01, 0xce, 0x55, 0x14, 0xc0, 0xc0, 0x46, 0x9b, 0x93, 0xca, 0x8d, 0x45, 0xf7, 0x6a, 0x2c, 0x4e, 0x5b, 0x25, 0x63, 0x7b, 0xef, 0xdd, 0x38, 0x75, 0x51, 0xc6, 0x12, 0x5a, 0xbd, 0x4a, 0x4a, 0xee, 0xbf, 0x0d, 0xc4, 0x42, 0x45, 0xcc, 0xf0, 0xb6, 0x05, 0x59, 0x21, 0x84, 0xb1, 0x1f, 0x2a, 0x5c, 0x25, 0x22, 0xb8, 0xea, 0xc5, 0x60, 0x23, 0x68, 0x0d, 0xa3, 0xf2, 0xe8, 0x1c, 0xfe, 0x6f, 0xfd, 0x95, 0x8a, 0x33, 0xef, 0x4f, 0x2e, 0x24, 0x90, 0xa7, 0x60, 0xd6, 0x5c, 0x72, 0x5a, 0xc5, 0xd7, 0x5b, 0xcf, 0x50, 0x76, 0x32, 0xe5, 0xc3, 0x3d, 0xa7, 0xda, 0x65, 0x86, 0x97 }; static const uint8_t ac_rsassa_vect18_prime2[] = { 0xdd, 0x5e, 0x29, 0xbb, 0x78, 0x73, 0x74, 0x49, 0xec, 0xd1, 0x71, 0x91, 0xa6, 0x74, 0x11, 0xae, 0x4b, 0x64, 0x6a, 0x5b, 0x60, 0x89, 0x70, 0x0c, 0x1a, 0x3e, 0x3d, 0x42, 0x02, 0xd9, 0x16, 0x18, 0xb5, 0x33, 0xf8, 0xda, 0x7f, 0x76, 0x6d, 0xc3, 0xf2, 0xc1, 0xf6, 0x90, 0x97, 0x2a, 0xbe, 0xeb, 0x15, 0x8a, 0x05, 0xc2, 0xa4, 0xb8, 0xb0, 0x80, 0xe4, 0xc4, 0xc8, 0xc4, 0xb5, 0xcc, 0x1e, 0xf0, 0x02, 0x6e, 0x02, 0xef, 0x5e, 0x35, 0xdb, 0x2e, 0x41, 0x2d, 0xbc, 0x23, 0x44, 0x41, 0xbc, 0x29, 0xbd, 0xa7, 0x70, 0x0c, 0x06, 0x53, 0x12, 0x78, 0x9b, 0x7f, 0x51, 0xfe, 0xb5, 0x82, 0x9c, 0xc9, 0xf6, 0x40, 0x8d, 0xf9, 0x25, 0xd2, 0xae, 0x3f, 0x54, 0x22, 0x62, 0x80, 0x03, 0x1f, 0xa3, 0x14, 0xc3, 0x13, 0x9c, 0x3a, 0xee, 0x3b, 0x34, 0xa3, 0x7e, 0xe2, 0x71, 0xe8, 0x9d, 0x7c, 0xbc, 0x0e, 0x01, 0x34, 0xd5, 0x6d, 0x89, 0x62, 0xd0, 0xaf, 0xe6, 0x03, 0x76, 0x94, 0xe2, 0xdc, 0xea, 0x1a, 0xc7, 0x55, 0x68, 0x81, 0x9d, 0xdc, 0xf7, 0xc9, 0x81, 0xc8, 0x0f, 0x7a, 0x03, 0xc2, 0x83, 0x98, 0xde, 0xc4, 0x4a, 0x1c, 0x7a, 0xc6, 0x13, 0x01, 0x01, 0x04, 0x9a, 0x39, 0x14, 0xa5, 0x8d, 0x6a, 0x47, 0xef, 0xa5, 0xc4, 0x35, 0xee, 0x72, 0x8e, 0x83, 0xe1, 0x74, 0x4e, 0xe2, 0x7b, 0x19, 0x0d }; static const uint8_t ac_rsassa_vect18_exp1[] = { 0x9d, 0xde, 0x7a, 0x36, 0x4c, 0x40, 0xc9, 0xc9, 0x6e, 0x36, 0x30, 0xf0, 0x86, 0x72, 0x3b, 0xf8, 0xb4, 0x64, 0x0a, 0x4f, 0x07, 0x4b, 0x27, 0x32, 0x45, 0xc8, 0x19, 0x00, 0x18, 0xc3, 0x3b, 0x93, 0x57, 0x1d, 0x29, 0x70, 0x95, 0xde, 0x26, 0xaf, 0x01, 0xb1, 0xf7, 0x14, 0x55, 0xd9, 0x9d, 0xcf, 0xd6, 0x08, 0x98, 0xa4, 0xf0, 0xdb, 0xd5, 0x50, 0xa5, 0x4f, 0x48, 0xc7, 0x38, 0xa0, 0xda, 0xd5, 0xf7, 0x65, 0x00, 0x88, 0x9d, 0x76, 0x38, 0xfe, 0x40, 0xd7, 0x44, 0xa4, 0xe2, 0xff, 0x21, 0x5f, 0x1f, 0x6d, 0x63, 0x9b, 0xc9, 0xc3, 0xcb, 0x99, 0xd9, 0x70, 0x1a, 0xd4, 0x4b, 0xff, 0x0e, 0x6e, 0x69, 0x2c, 0xa1, 0xda, 0x55, 0xe7, 0xc9, 0x36, 0xb0, 0x70, 0xec, 0x37, 0x9c, 0x3d, 0xe7, 0x10, 0x0e, 0xe8, 0x11, 0x6e, 0x24, 0xa8, 0x10, 0xca, 0x8d, 0xc1, 0xa4, 0x5a, 0x9f, 0xd5, 0x80, 0x9a, 0x63, 0x9e, 0x63, 0x9f, 0x31, 0x09, 0x46, 0x27, 0x0b, 0x2a, 0xc5, 0x92, 0x95, 0xa7, 0xa4, 0x72, 0x4b, 0x31, 0xa5, 0x30, 0xe5, 0x59, 0x0b, 0xf6, 0x4b, 0xfd, 0x94, 0x0c, 0x9e, 0xa1, 0x0d, 0x23, 0x7f, 0xee, 0xc4, 0x70, 0x31, 0xe1, 0x13, 0x5d, 0xb1, 0x1f, 0xb6, 0xeb, 0x26, 0xc1, 0x65, 0x55, 0x37, 0x20, 0x71, 0x37, 0xd7, 0x73, 0xca, 0x40, 0x47, 0xee, 0x7f, 0x84, 0xd0, 0x1f, 0xe5, 0xc1 }; static const uint8_t ac_rsassa_vect18_exp2[] = { 0x6d, 0xdb, 0xa9, 0x42, 0x4c, 0x48, 0x9f, 0xd1, 0x80, 0x21, 0x81, 0x07, 0x13, 0x60, 0x4e, 0xd5, 0xfc, 0xbc, 0x5c, 0xbb, 0xf4, 0x70, 0xc0, 0x96, 0x80, 0xff, 0x9a, 0x4f, 0x04, 0x32, 0xcf, 0xf0, 0x7b, 0x1c, 0xcb, 0xc7, 0x43, 0xb2, 0x76, 0x4e, 0xe4, 0x4e, 0xb6, 0x1a, 0x93, 0xaa, 0xb7, 0x0c, 0xdb, 0xa7, 0x9f, 0xac, 0x35, 0x2b, 0x23, 0x0d, 0x14, 0x7b, 0x44, 0x57, 0xbb, 0x11, 0x0d, 0xd9, 0x76, 0x9b, 0x3a, 0x01, 0xa8, 0xf3, 0x79, 0x4e, 0xbf, 0x31, 0xff, 0x48, 0x51, 0x3b, 0x7e, 0x32, 0x08, 0xd8, 0xeb, 0x96, 0x4c, 0x1d, 0x35, 0xf1, 0x7c, 0xd9, 0xf6, 0xcb, 0x3d, 0x31, 0x10, 0xb6, 0x79, 0xeb, 0x17, 0x8a, 0x29, 0xe7, 0x20, 0x6a, 0x75, 0x4a, 0x8b, 0x2f, 0x94, 0x5d, 0x43, 0x05, 0xae, 0xba, 0x30, 0xb2, 0x5e, 0x40, 0x2b, 0xa3, 0x67, 0xf8, 0xe1, 0x26, 0xdb, 0xe1, 0x67, 0x42, 0x5b, 0xfe, 0xe8, 0x5c, 0x6f, 0xee, 0x06, 0x3b, 0x05, 0x1f, 0x7a, 0xdd, 0xf0, 0xa8, 0x49, 0xd5, 0xf8, 0x4e, 0xbe, 0x8a, 0x74, 0xd9, 0x90, 0x6f, 0x04, 0x65, 0x50, 0xa8, 0xf0, 0xec, 0xbb, 0x7a, 0x46, 0x33, 0x8b, 0xc4, 0x0e, 0x79, 0xf6, 0x3c, 0x6d, 0x50, 0xe7, 0x68, 0xa4, 0x82, 0x74, 0x67, 0xe6, 0x43, 0x5c, 0x34, 0xbf, 0xbf, 0x12, 0x42, 0xff, 0xd8, 0x07, 0x6c, 0x8e, 0xa1, 0x20, 0x91 }; static const uint8_t ac_rsassa_vect18_coeff[] = { 0x83, 0x1f, 0x72, 0x3b, 0x3f, 0x9e, 0x46, 0x88, 0x83, 0xb3, 0xa0, 0xe2, 0xa8, 0xf0, 0x56, 0x97, 0x3e, 0x4a, 0xed, 0x56, 0x46, 0xdf, 0xf8, 0x21, 0xf5, 0xb8, 0xf9, 0xd8, 0x43, 0x3c, 0xf4, 0x39, 0x51, 0xd2, 0xf3, 0xa0, 0x6f, 0x57, 0x18, 0xc0, 0xe1, 0x8a, 0x6a, 0xc0, 0x49, 0x34, 0xf6, 0x4d, 0x60, 0xf6, 0xd0, 0x0f, 0x64, 0x58, 0xed, 0x17, 0x7d, 0x68, 0x47, 0x05, 0x6f, 0x64, 0x2e, 0xa9, 0x53, 0xa8, 0x17, 0x65, 0x13, 0xdc, 0x27, 0x51, 0xe3, 0x35, 0x01, 0xb8, 0x0c, 0x68, 0xfd, 0xaf, 0xa3, 0xf7, 0xb1, 0x9a, 0xdc, 0x7b, 0x1b, 0xf7, 0xcc, 0x90, 0x8e, 0x93, 0xbc, 0x08, 0x15, 0xa7, 0xc0, 0x92, 0xa0, 0xa3, 0xc9, 0x17, 0x9d, 0x8d, 0x3d, 0x10, 0x4f, 0xe6, 0xa3, 0x4b, 0x91, 0x21, 0x42, 0x7c, 0xdf, 0x9c, 0x71, 0xed, 0xe1, 0x30, 0x76, 0xf5, 0x1c, 0x71, 0xa0, 0x47, 0xc8, 0xa6, 0x2a, 0x94, 0x01, 0x49, 0xae, 0x2e, 0x90, 0x47, 0x21, 0x17, 0xae, 0x10, 0x91, 0x53, 0x91, 0x88, 0x88, 0xb4, 0x12, 0x50, 0x47, 0x7d, 0xf6, 0xfb, 0xde, 0x12, 0x6b, 0xc2, 0x50, 0x4f, 0x59, 0x61, 0x81, 0x42, 0xe7, 0x19, 0x72, 0x73, 0xef, 0x9d, 0x7c, 0xa0, 0xf4, 0x30, 0x91, 0xa8, 0x6a, 0x46, 0x9c, 0x5c, 0x0f, 0x9a, 0xeb, 0x1f, 0x00, 0x1e, 0x0c, 0x49, 0x1f, 0xb8, 0x5f, 0x37, 0xd7, 0x4f }; static const uint8_t ac_rsassa_vect18_ptx[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; static const uint8_t ac_rsassa_vect18_out[] = { 0x06, 0xe3, 0x94, 0xdc, 0x4b, 0xbc, 0xa5, 0x80, 0x7e, 0x65, 0x65, 0xe2, 0x6c, 0x91, 0x8b, 0x57, 0x52, 0x29, 0xa0, 0x05, 0x20, 0xef, 0x49, 0xb1, 0xf9, 0xdb, 0x9e, 0xd8, 0x2e, 0x65, 0x9d, 0x61, 0xa8, 0xda, 0x9a, 0x95, 0xab, 0xa6, 0x8e, 0x7b, 0xfd, 0x89, 0x5f, 0x5b, 0xfc, 0x10, 0x12, 0x98, 0x4a, 0x2b, 0x48, 0x38, 0x2d, 0x66, 0x4c, 0x5b, 0x2c, 0xe2, 0x4d, 0xaa, 0xa3, 0x19, 0x64, 0xf1, 0xf1, 0x4b, 0xd5, 0x06, 0x14, 0x83, 0xf2, 0x71, 0x5a, 0xef, 0x81, 0xa2, 0xaa, 0x5a, 0xfa, 0x48, 0x38, 0x4a, 0x46, 0x52, 0xb2, 0xbd, 0x10, 0x1b, 0x11, 0xa1, 0x46, 0x2d, 0x51, 0x59, 0xc0, 0x49, 0x32, 0x43, 0x83, 0x28, 0xe0, 0x59, 0x0b, 0x6a, 0xef, 0x5d, 0xee, 0x37, 0xca, 0xd8, 0x8f, 0xd5, 0xcf, 0x57, 0x4b, 0xac, 0x80, 0x3d, 0x05, 0xa0, 0x15, 0x0c, 0x27, 0xee, 0xa2, 0x91, 0xfb, 0x1d, 0x4f, 0xbd, 0x45, 0x39, 0x34, 0x37, 0x05, 0x82, 0x8f, 0x19, 0x4e, 0x20, 0xb8, 0x3b, 0x7e, 0x60, 0x0a, 0x2f, 0x48, 0xaa, 0xf9, 0xa3, 0x5e, 0xd5, 0xd8, 0xdb, 0xc1, 0x61, 0xa3, 0x95, 0x72, 0x19, 0xba, 0x97, 0xd6, 0x5f, 0x5d, 0xb3, 0x50, 0x51, 0xb8, 0x5a, 0x1a, 0x8a, 0x0f, 0xd2, 0x25, 0xdc, 0x12, 0xd1, 0x96, 0xac, 0x8c, 0x70, 0x47, 0x46, 0x35, 0xdf, 0xb1, 0x15, 0xf6, 0x65, 0xc3, 0x6d, 0xd5, 0xd7, 0x4c, 0xb2, 0xa3, 0xc7, 0x03, 0xd6, 0xc1, 0x8d, 0x33, 0x56, 0x49, 0xf4, 0xf4, 0x4e, 0x44, 0x83, 0xee, 0x7a, 0xb9, 0xdc, 0x5f, 0x7c, 0x85, 0x10, 0x0e, 0x30, 0x46, 0x73, 0x7e, 0x44, 0x42, 0x17, 0x8f, 0x20, 0x12, 0x13, 0x39, 0x5d, 0x55, 0x6b, 0xb2, 0x3c, 0xde, 0xae, 0xb9, 0xa0, 0xb3, 0x0a, 0x81, 0x08, 0x72, 0xf8, 0xb3, 0xc4, 0xb9, 0x79, 0x09, 0x5d, 0x81, 0x56, 0x49, 0xab, 0x07, 0xbd, 0xce, 0xd7, 0x39, 0x94, 0xfb, 0xfc, 0x73, 0x2d, 0xd6, 0x9f, 0x7f, 0x26, 0x39, 0x05, 0xe5, 0xc9, 0x0b, 0x67, 0x71, 0x09, 0xac, 0xfd, 0x75, 0x26, 0x92, 0xd6, 0x02, 0xf1, 0xa8, 0x25, 0xee, 0x7c, 0xb6, 0x46, 0x28, 0xb6, 0x92, 0xf0, 0x99, 0xdc, 0x6e, 0xf1, 0xa4, 0x9d, 0xc1, 0x45, 0x9d, 0x19, 0xd5, 0x78, 0x93, 0xc0, 0x2c, 0x3c, 0x8b, 0x3c, 0x96, 0xf9, 0x84, 0x26, 0xc9, 0xf0, 0xe0, 0xde, 0xce, 0x23, 0x7e, 0xe4, 0x06, 0xef, 0x5a, 0xea, 0x24, 0x65, 0x97, 0x4c, 0xd8, 0x48, 0x44, 0xb1, 0x59, 0x8a, 0x15, 0x95, 0x62, 0xc9, 0xee, 0x86, 0x63, 0x32, 0xba, 0xe2, 0xfc, 0x05, 0x5e, 0x17, 0x5c, 0x69, 0x8f, 0x04, 0x02, 0x91, 0xec, 0x46, 0xf8, 0x0a, 0xd1, 0xb0, 0x95, 0x40, 0x3d, 0x92, 0x6e, 0xdf, 0xf6, 0xe7, 0x3e, 0xc6, 0x40, 0x05, 0xdf, 0x82, 0xe6, 0xe0, 0x9f, 0x1b }; /* * 4096-bit RSA * Test data generated with: * openssl genrsa -out 4096.pem 4096 * openssl rsa -in 4096.pem -text -noout * (dd if=/dev/zero bs=1 count=368; \ * printf '\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10';) | \ * openssl rsautl -encrypt -raw -inkey 4096.pem | od -t x1 */ static const uint8_t ac_rsassa_vect19_modulus[] = { 0xf6, 0x48, 0x38, 0x0c, 0x61, 0xc5, 0xf2, 0x8f, 0x1d, 0x36, 0x78, 0x3b, 0xfd, 0x03, 0x74, 0x2f, 0xe7, 0xb0, 0xab, 0xbd, 0x25, 0x88, 0x46, 0xd8, 0x4f, 0x6b, 0xc8, 0xcb, 0xb8, 0x5d, 0x88, 0x16, 0x8c, 0x68, 0xf2, 0xda, 0x34, 0x25, 0xc9, 0x8a, 0xcf, 0xf8, 0x34, 0xbd, 0xa3, 0xc9, 0x42, 0x9a, 0xb7, 0x4d, 0xab, 0xc3, 0x87, 0xad, 0xa6, 0xa7, 0x02, 0x69, 0xdf, 0x58, 0x84, 0xeb, 0x6e, 0xf7, 0x77, 0xd7, 0x4d, 0xf2, 0x01, 0x4e, 0x7b, 0x79, 0x72, 0xb0, 0x23, 0xb3, 0xb2, 0x22, 0x15, 0x14, 0x05, 0xce, 0xea, 0x98, 0x88, 0x9e, 0xe4, 0x03, 0x9d, 0x5b, 0x07, 0x56, 0xac, 0x77, 0x56, 0x3a, 0xd7, 0x0c, 0x7f, 0x74, 0x2d, 0xd1, 0x48, 0xdd, 0x1c, 0x99, 0xe3, 0x53, 0x3a, 0xa3, 0x9e, 0x4b, 0xb2, 0xd7, 0xe9, 0xfd, 0x04, 0x2c, 0xa2, 0x05, 0x60, 0xae, 0x2d, 0xd0, 0x59, 0x2a, 0x90, 0xf6, 0xe4, 0x99, 0x4d, 0x7a, 0xf8, 0xe5, 0x80, 0xeb, 0x77, 0xa5, 0xae, 0xe2, 0x40, 0xb7, 0x0e, 0x6c, 0x02, 0xbe, 0x33, 0x04, 0xb0, 0xab, 0x01, 0xfe, 0x0c, 0xc1, 0xd1, 0x86, 0x58, 0x6a, 0xc1, 0xb2, 0x3b, 0xfb, 0x03, 0x16, 0x72, 0xf3, 0xbb, 0xd6, 0x43, 0xd3, 0xbf, 0xf0, 0x5b, 0xce, 0xa8, 0x39, 0x53, 0xee, 0x49, 0xc9, 0x2c, 0x04, 0xb3, 0x4a, 0x4c, 0xd7, 0xd1, 0x9b, 0xf6, 0x51, 0x28, 0xd3, 0x24, 0x03, 0xff, 0xa1, 0xcb, 0xb7, 0x7a, 0x73, 0xee, 0xfa, 0x2c, 0x1e, 0x43, 0xc2, 0xb6, 0x3a, 0x4c, 0x68, 0x23, 0x1e, 0x88, 0x85, 0xf2, 0xcb, 0x1d, 0xc9, 0x79, 0x3b, 0x4a, 0x72, 0xe7, 0xdb, 0xfa, 0x62, 0x8d, 0xf5, 0x93, 0xfd, 0x32, 0x40, 0x09, 0x17, 0xa9, 0xda, 0x72, 0x02, 0xf4, 0xcb, 0x8e, 0xb1, 0xe8, 0x64, 0x57, 0xf1, 0x94, 0xba, 0xe6, 0x24, 0x84, 0xf0, 0xca, 0x0d, 0x6a, 0xeb, 0x1e, 0xde, 0x6e, 0xc6, 0x05, 0x55, 0x09, 0x99, 0x18, 0x41, 0xe2, 0x55, 0x1a, 0x1f, 0xcc, 0xee, 0xae, 0x5f, 0x49, 0xb9, 0x2b, 0x6a, 0xf8, 0xdd, 0x0e, 0x10, 0x9c, 0xef, 0x6e, 0xaa, 0xe9, 0x59, 0x81, 0x1b, 0x4e, 0x8a, 0xac, 0x48, 0x6f, 0x7b, 0xc4, 0x62, 0x5f, 0x8c, 0x59, 0x83, 0x96, 0xdb, 0x62, 0x88, 0x8f, 0x22, 0x57, 0x91, 0x0b, 0x9f, 0xcd, 0xca, 0x6a, 0x3c, 0x71, 0x0b, 0x36, 0x8d, 0xf9, 0xbf, 0x3b, 0x37, 0x05, 0xeb, 0xc3, 0x45, 0xc5, 0xeb, 0xe0, 0xdb, 0x12, 0x24, 0xe8, 0xad, 0x83, 0xe8, 0x18, 0xd7, 0x67, 0x47, 0x0e, 0x53, 0x37, 0xf4, 0x16, 0xc5, 0x5e, 0x82, 0x68, 0xfa, 0x8b, 0xe0, 0xde, 0xd1, 0x93, 0xea, 0x94, 0x70, 0x4e, 0xfd, 0x5c, 0xd6, 0x4d, 0x99, 0x7b, 0xfc, 0x99, 0x2c, 0x65, 0x2b, 0xe2, 0x29, 0xf1, 0x8f, 0x5c, 0x77, 0x30, 0x46, 0x11, 0x3f, 0x33, 0x2b, 0xb1, 0x00, 0x50, 0x14, 0x97, 0x26, 0x39, 0xfd, 0xd5, 0xc2, 0x83, 0x0a, 0x07, 0xe3, 0x4e, 0xa7, 0x82, 0x21, 0x4e, 0xb3, 0xef, 0xae, 0x0d, 0x7b, 0xee, 0xe8, 0x1d, 0xf7, 0x31, 0xcb, 0x1e, 0x05, 0x4f, 0x8e, 0xf0, 0x67, 0x36, 0x71, 0x23, 0x72, 0x11, 0x37, 0x0f, 0x4f, 0xf8, 0xc2, 0x04, 0xff, 0x76, 0xb2, 0x77, 0xa2, 0xee, 0x79, 0xf1, 0x5f, 0x34, 0x6f, 0xf8, 0xda, 0x93, 0xeb, 0x6f, 0x38, 0x7e, 0x14, 0xf0, 0xca, 0x14, 0x40, 0x5e, 0xb8, 0x56, 0x7e, 0x61, 0x3e, 0xc0, 0x20, 0x3f, 0x2a, 0xac, 0x43, 0x69, 0xf2, 0x10, 0xce, 0x33, 0x22, 0xe4, 0xdc, 0x9a, 0xac, 0x53, 0x95, 0x38, 0x16, 0x81, 0xbc, 0xf0, 0x45, 0x64, 0x52, 0xbb, 0x20, 0x77, 0x3b, 0xa0, 0x92, 0x40, 0xfd, 0x4b, 0x46, 0xe0, 0x5c, 0xaf, 0x3d, 0x87, 0xad, 0xf8, 0x90, 0x2f, 0xdc, 0x27, 0x4f, 0x2d, 0xe6, 0xcd, 0x25 }; static const uint8_t ac_rsassa_vect19_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_rsassa_vect19_priv_exp[] = { 0xae, 0x48, 0xc9, 0x31, 0x29, 0xf7, 0xd5, 0x01, 0x26, 0x21, 0x27, 0xd0, 0xfb, 0xe9, 0xf7, 0xcc, 0xf6, 0xde, 0xf5, 0x89, 0xf3, 0x07, 0x8f, 0x6b, 0x00, 0x39, 0x3c, 0x6d, 0xbe, 0x58, 0xa2, 0x37, 0xa2, 0xc1, 0x9a, 0x2a, 0x84, 0x80, 0xc1, 0x31, 0x74, 0x9f, 0x27, 0x63, 0x94, 0x86, 0x96, 0x95, 0xba, 0x66, 0x42, 0xc9, 0x2a, 0x38, 0xdf, 0x18, 0x8d, 0x02, 0xb3, 0x45, 0x87, 0x3a, 0xbc, 0xda, 0x6f, 0x7a, 0x73, 0xf4, 0x70, 0xac, 0x43, 0x80, 0xdc, 0x82, 0x7d, 0xa1, 0x6a, 0xcb, 0xe7, 0xb2, 0xb5, 0xb1, 0x8a, 0x1e, 0xcb, 0x7f, 0xf5, 0xc8, 0x01, 0x11, 0x2c, 0x0e, 0x50, 0x1a, 0x5b, 0x71, 0x64, 0x41, 0xb9, 0xe8, 0x53, 0x8c, 0x29, 0x4e, 0x20, 0x31, 0x5e, 0xc7, 0xc5, 0x55, 0x88, 0x6d, 0xf5, 0x70, 0x0a, 0x6c, 0x3d, 0x0a, 0x00, 0xd6, 0x61, 0x66, 0xa1, 0x91, 0x31, 0xa8, 0x87, 0xd1, 0xd0, 0x50, 0x14, 0x9e, 0x93, 0x88, 0x86, 0x45, 0x1b, 0xf4, 0xa9, 0xdf, 0xff, 0x00, 0x0c, 0x3a, 0xaf, 0x6e, 0x3d, 0xd8, 0x71, 0xd5, 0x72, 0xa1, 0x80, 0x11, 0xa0, 0xde, 0xbb, 0xaf, 0x40, 0xc7, 0x8a, 0xde, 0xc5, 0x7e, 0x9b, 0x76, 0x94, 0x54, 0xba, 0xc7, 0x1c, 0xab, 0x51, 0xac, 0xdb, 0x2b, 0x46, 0x93, 0xf8, 0xaf, 0x5e, 0x71, 0x2d, 0x17, 0xc5, 0x6d, 0x6d, 0x2e, 0x3b, 0x8f, 0x8f, 0x9e, 0x6b, 0x7c, 0x50, 0xe9, 0x04, 0xab, 0x21, 0x02, 0xed, 0xf9, 0x28, 0x43, 0x7a, 0x9c, 0x4e, 0x2c, 0xcf, 0x69, 0x5a, 0x80, 0xff, 0x08, 0x1b, 0x9b, 0x55, 0xc6, 0xff, 0xfd, 0xcf, 0x5f, 0xa5, 0x68, 0xec, 0xb5, 0xd5, 0xd4, 0x16, 0x18, 0x35, 0xf9, 0x4e, 0xf5, 0xea, 0x03, 0x66, 0x6f, 0x65, 0x20, 0xb0, 0x28, 0x82, 0x56, 0x90, 0x4d, 0xab, 0x7c, 0xdf, 0xe4, 0xb4, 0x17, 0x5a, 0x45, 0x48, 0x85, 0x1b, 0x7e, 0x08, 0x71, 0xef, 0x4c, 0xd0, 0xdd, 0x2a, 0x19, 0x3a, 0xed, 0x1f, 0x96, 0xa1, 0xf9, 0xca, 0xe0, 0x52, 0x27, 0xd8, 0xf7, 0x9b, 0x0d, 0x4c, 0x82, 0x08, 0x46, 0xb6, 0xef, 0x53, 0x1b, 0x72, 0x63, 0xb6, 0xe7, 0x3f, 0xa4, 0x5b, 0xed, 0x89, 0xeb, 0xc8, 0x10, 0x78, 0x61, 0x68, 0x98, 0x8f, 0x87, 0x2f, 0xb9, 0x41, 0x31, 0x47, 0x20, 0xf2, 0xde, 0x52, 0x2a, 0x17, 0x3f, 0x84, 0xad, 0x39, 0xec, 0x42, 0x1c, 0x37, 0xbc, 0xb2, 0x7c, 0x43, 0xdb, 0x2e, 0x65, 0x43, 0x17, 0x9e, 0x8f, 0xa0, 0x5b, 0x96, 0xc3, 0xd4, 0x2d, 0xc0, 0x52, 0x3b, 0xe4, 0x0b, 0xe5, 0xaa, 0xcc, 0x1f, 0x57, 0xf0, 0xd6, 0xdd, 0x9a, 0xd1, 0x77, 0xea, 0x0c, 0x7a, 0x8b, 0x69, 0xdb, 0xe9, 0x36, 0x63, 0x1d, 0x46, 0x23, 0x51, 0x9f, 0x45, 0xce, 0xa4, 0x68, 0xb4, 0x6e, 0x65, 0x32, 0xef, 0xdf, 0xe8, 0xce, 0xb6, 0x91, 0x91, 0xbc, 0x3a, 0xc0, 0xd3, 0xb2, 0x7f, 0xf4, 0x14, 0xbf, 0xb8, 0xc9, 0x3d, 0x60, 0x99, 0x5f, 0x14, 0x45, 0x22, 0x07, 0x77, 0x08, 0x32, 0xdd, 0xc8, 0x46, 0x3a, 0x3d, 0x2d, 0xa1, 0x4d, 0xc2, 0xa0, 0x3f, 0xa1, 0xe8, 0x9d, 0x28, 0x57, 0x4c, 0x65, 0x03, 0x54, 0x6f, 0xbb, 0x1c, 0x86, 0x47, 0x29, 0x44, 0x5c, 0xd4, 0x17, 0xed, 0x84, 0x60, 0xbf, 0xb6, 0xb6, 0x0d, 0x0e, 0x47, 0xe2, 0x73, 0x95, 0xf4, 0x4d, 0x6a, 0x6a, 0x04, 0x1b, 0xd4, 0x98, 0xb4, 0xcf, 0x8f, 0xe4, 0x0d, 0x14, 0x66, 0xa0, 0xf5, 0x8d, 0x65, 0xdc, 0xb9, 0xdd, 0x1a, 0x2c, 0x9e, 0x71, 0x78, 0x5a, 0x98, 0x13, 0x0d, 0x91, 0x40, 0xd1, 0x6f, 0x1c, 0x7a, 0x06, 0xab, 0x0b, 0xc1, 0xd1, 0x19, 0x00, 0xca, 0x7a, 0xde, 0x45, 0x5c, 0x50, 0x53, 0x83, 0x71, 0x45, 0x0a, 0x4b, 0x0f, 0x2f, 0x67, 0x3b, 0x39 }; static const uint8_t ac_rsassa_vect19_prime1[] = { 0xfc, 0x1e, 0xca, 0x69, 0x92, 0x80, 0xf8, 0x54, 0x87, 0x29, 0xd4, 0x68, 0xcb, 0xd6, 0xba, 0x1d, 0x4a, 0x29, 0x4c, 0xa1, 0x49, 0xd7, 0x42, 0x68, 0x09, 0xb0, 0x66, 0xa1, 0x1e, 0xf8, 0x8a, 0xf2, 0x8b, 0xdc, 0x57, 0x70, 0xa2, 0x29, 0x7f, 0x18, 0xce, 0x18, 0x88, 0x8a, 0x02, 0x60, 0xcf, 0x05, 0x15, 0xa0, 0x98, 0x23, 0x77, 0xf4, 0x1a, 0xba, 0xc5, 0x9e, 0x61, 0xea, 0x42, 0xfd, 0x86, 0x88, 0xca, 0x93, 0xa1, 0xf3, 0xf4, 0x0c, 0x38, 0x62, 0x3a, 0x6e, 0x30, 0x0d, 0x52, 0xce, 0xc8, 0xdd, 0xf2, 0xc4, 0x75, 0x8b, 0x44, 0xf9, 0x14, 0xcd, 0x09, 0xd9, 0x37, 0x0d, 0x09, 0x75, 0x82, 0xd6, 0x1d, 0x86, 0x23, 0x29, 0xc7, 0x6f, 0xea, 0x88, 0x5a, 0x88, 0xc5, 0x69, 0x4e, 0x67, 0x8b, 0x90, 0xd5, 0xc6, 0xe8, 0xd8, 0xd6, 0x05, 0xc9, 0xfe, 0x2c, 0x56, 0x8f, 0xcb, 0xb7, 0x7e, 0x59, 0xfa, 0x16, 0x60, 0x8a, 0xf6, 0xdc, 0x63, 0xe5, 0xfc, 0x24, 0x87, 0xc6, 0x2d, 0x94, 0x3d, 0x29, 0x0d, 0xe8, 0xc7, 0x75, 0xe6, 0x32, 0xa3, 0x74, 0x50, 0xae, 0xdd, 0x03, 0x14, 0x70, 0xbc, 0x61, 0x04, 0x07, 0xf4, 0x62, 0xa8, 0x79, 0x2b, 0xf8, 0xc4, 0x69, 0xdb, 0x9a, 0x78, 0x97, 0xa7, 0x71, 0x4c, 0xde, 0x78, 0x5b, 0xab, 0x08, 0x85, 0x0e, 0x34, 0xad, 0x64, 0x24, 0x41, 0x75, 0x24, 0xe0, 0x9b, 0xa8, 0x98, 0x14, 0xe6, 0xe3, 0xf9, 0x59, 0xcc, 0x06, 0x67, 0xf0, 0x5e, 0x3c, 0x75, 0x03, 0xb3, 0xcf, 0x35, 0x57, 0x28, 0x02, 0x6b, 0x42, 0x0f, 0x9b, 0x3d, 0x7d, 0xa0, 0x26, 0xc6, 0xe0, 0x06, 0x3b, 0x97, 0x07, 0x0d, 0x9b, 0xa4, 0xc5, 0x16, 0x91, 0x9d, 0xa3, 0xec, 0x8b, 0x49, 0x47, 0x44, 0xd2, 0xdd, 0xd4, 0xd3, 0xc9, 0x88, 0xe3, 0x88, 0x57, 0xce, 0x3f, 0xc2, 0x08, 0x77, 0x8f, 0x13 }; static const uint8_t ac_rsassa_vect19_prime2[] = { 0xfa, 0x12, 0x6d, 0xe1, 0x5b, 0x6b, 0x88, 0x0e, 0x28, 0x61, 0x4c, 0x18, 0xc8, 0x2f, 0xf5, 0xe7, 0x0e, 0xc6, 0x1e, 0x14, 0x3b, 0x5a, 0xe1, 0x51, 0xbf, 0x64, 0x6f, 0x9e, 0xb7, 0xca, 0x3f, 0x57, 0xdb, 0xc2, 0x87, 0x8a, 0x41, 0x57, 0xfb, 0xcd, 0x5d, 0x1a, 0xe6, 0x2a, 0x50, 0x0f, 0x60, 0xe1, 0x81, 0x4a, 0x7c, 0xc5, 0xbf, 0xba, 0x37, 0x6f, 0xec, 0x30, 0xba, 0xcf, 0x13, 0x51, 0x43, 0x19, 0x29, 0xaf, 0xb8, 0xc9, 0xee, 0x8d, 0x56, 0xee, 0x3d, 0x90, 0x8e, 0x5e, 0x4d, 0xe6, 0x01, 0xbe, 0x26, 0xf9, 0x7e, 0x3a, 0xaf, 0xa0, 0x56, 0xda, 0x9f, 0x29, 0x42, 0x84, 0x1c, 0x4b, 0xde, 0x67, 0x32, 0xc1, 0xf0, 0xde, 0x5f, 0x89, 0x01, 0xc7, 0xb1, 0x8e, 0x2b, 0x15, 0xf1, 0x59, 0x80, 0xf1, 0x9a, 0x15, 0x20, 0xfd, 0x53, 0xc1, 0x9f, 0xb7, 0x4a, 0xde, 0xe0, 0x58, 0xac, 0x6c, 0xd2, 0x44, 0xb7, 0x9a, 0x0f, 0x8e, 0xdc, 0xa2, 0x57, 0xf6, 0x69, 0x61, 0x37, 0xe3, 0x8a, 0xb4, 0xa6, 0xf4, 0x08, 0x41, 0xfb, 0x22, 0xd1, 0xe4, 0x62, 0x4d, 0xac, 0x2d, 0x71, 0x7b, 0x32, 0xe1, 0x5d, 0xa4, 0x29, 0xbd, 0xde, 0xa4, 0x87, 0xb9, 0xe7, 0xe4, 0xd1, 0x12, 0x81, 0x15, 0xfd, 0x13, 0xff, 0xf0, 0xce, 0x8b, 0x4c, 0x3f, 0x66, 0xe8, 0xb4, 0xd5, 0xa7, 0x09, 0xb0, 0x31, 0x2e, 0xbd, 0x86, 0x56, 0xb4, 0xa2, 0xee, 0xc4, 0x17, 0xda, 0x86, 0x26, 0xb1, 0x14, 0x27, 0x1a, 0x12, 0xed, 0x6a, 0xe2, 0xb5, 0x3f, 0x53, 0x3a, 0x23, 0xf6, 0x19, 0xb6, 0xcc, 0x3b, 0x72, 0xcc, 0xf8, 0xde, 0xec, 0xe0, 0x68, 0x62, 0x5c, 0xe0, 0xff, 0x34, 0x80, 0xab, 0x4d, 0x65, 0x46, 0x06, 0x06, 0xce, 0xb5, 0xd6, 0xb0, 0xca, 0x76, 0x82, 0xed, 0x13, 0x5d, 0x5b, 0xc9, 0x8c, 0xf0, 0x1e, 0xfd, 0x47, 0xe1, 0xe7 }; static const uint8_t ac_rsassa_vect19_exp1[] = { 0xa2, 0x90, 0xf0, 0x0f, 0x56, 0xca, 0x16, 0x55, 0xda, 0xb9, 0x9c, 0x1e, 0xde, 0xa0, 0xdc, 0x6d, 0x1a, 0x6e, 0xba, 0xdc, 0x9d, 0x12, 0x51, 0xdd, 0x67, 0xb1, 0xf8, 0xdb, 0x17, 0x6f, 0x47, 0x98, 0xd1, 0x9a, 0x08, 0x3f, 0xb6, 0x30, 0x6f, 0xa5, 0x7c, 0xee, 0xd0, 0xcb, 0xbc, 0x70, 0xd3, 0xcc, 0x01, 0x80, 0x05, 0xd9, 0x88, 0xf5, 0x3b, 0x6f, 0x07, 0x11, 0xf3, 0x2c, 0xec, 0x79, 0x31, 0x10, 0x6f, 0x1e, 0xf6, 0xa4, 0xa8, 0xce, 0x60, 0x64, 0xe6, 0x2c, 0x3a, 0x8b, 0xbc, 0xc3, 0x5d, 0x3d, 0xcf, 0xd5, 0xe1, 0xbd, 0x25, 0x82, 0x3e, 0x69, 0x5f, 0x5a, 0x52, 0x66, 0xf3, 0x9c, 0x73, 0xfa, 0xc0, 0x1a, 0xc7, 0xfd, 0x9e, 0x7d, 0x89, 0x8a, 0xd6, 0x65, 0xae, 0x75, 0x12, 0x7b, 0x2d, 0xc0, 0xfc, 0x37, 0x3f, 0xd8, 0xe1, 0x57, 0xe6, 0x41, 0x20, 0x31, 0xc8, 0x92, 0xa1, 0x04, 0xb5, 0xdb, 0xce, 0x25, 0xfe, 0x34, 0xe3, 0x32, 0xff, 0x0e, 0xb0, 0x37, 0x64, 0x0f, 0xeb, 0xaf, 0xec, 0x12, 0xed, 0xef, 0xff, 0x13, 0xa9, 0xbf, 0x3f, 0xb6, 0xee, 0xa9, 0xcf, 0xdc, 0x94, 0x3c, 0xc3, 0x89, 0xa7, 0xdf, 0x6a, 0xe6, 0x1b, 0x0b, 0xc1, 0x62, 0x54, 0xa7, 0xa7, 0x58, 0xee, 0xe0, 0xa6, 0xeb, 0xdb, 0xdf, 0x5b, 0xac, 0x52, 0xd8, 0x08, 0xaa, 0xea, 0xca, 0xd1, 0x9d, 0xeb, 0x7d, 0x15, 0xdf, 0x08, 0xbc, 0xd7, 0x6d, 0x71, 0xbe, 0x4c, 0xaa, 0x83, 0xce, 0xed, 0x6c, 0xb6, 0x2a, 0xf5, 0x72, 0x31, 0xbf, 0xc1, 0x2d, 0x29, 0x32, 0x23, 0xec, 0x90, 0x3a, 0xfc, 0x10, 0x12, 0x30, 0xd6, 0x2e, 0xee, 0xa9, 0x99, 0x80, 0xaa, 0xc5, 0x79, 0xd7, 0xed, 0x98, 0xea, 0x24, 0x12, 0x43, 0xf3, 0xd2, 0x6a, 0xed, 0x62, 0xd8, 0x14, 0xf1, 0x51, 0x55, 0x8e, 0xd8, 0x8c, 0xbf, 0xfe, 0x59, 0xa9, 0x45 }; static const uint8_t ac_rsassa_vect19_exp2[] = { 0xd8, 0x59, 0x37, 0x5d, 0x1f, 0xd5, 0xa1, 0x48, 0xf6, 0x60, 0x6f, 0x10, 0x85, 0xa9, 0x10, 0xaa, 0x8d, 0x1a, 0x94, 0x0d, 0x56, 0xe8, 0xa2, 0x45, 0x32, 0x3b, 0x77, 0x62, 0x2e, 0x89, 0xb8, 0x51, 0x8f, 0x9b, 0xf5, 0xdd, 0x83, 0xf8, 0xd5, 0xad, 0x6f, 0x5e, 0x85, 0x40, 0x98, 0x31, 0x25, 0xd5, 0x13, 0x21, 0x59, 0x5f, 0x50, 0x27, 0x90, 0x2c, 0xb1, 0x7f, 0xdb, 0x2e, 0xa9, 0xfc, 0xc4, 0xfb, 0x31, 0x18, 0x88, 0xdb, 0x93, 0x1a, 0x0e, 0xda, 0x60, 0xc2, 0xfe, 0x98, 0xd1, 0xf6, 0x2b, 0x0d, 0xd2, 0xf4, 0x48, 0xe4, 0x06, 0xeb, 0xc6, 0x18, 0xb0, 0x58, 0x66, 0xe6, 0x9b, 0x00, 0x7c, 0x72, 0x75, 0xf4, 0x5a, 0x2a, 0x59, 0x26, 0xd4, 0x36, 0x6b, 0x03, 0x9f, 0x7d, 0x05, 0x68, 0x34, 0xe9, 0x51, 0x2f, 0xf4, 0x71, 0x96, 0x93, 0xce, 0x55, 0x2a, 0x5e, 0x36, 0x64, 0x21, 0x10, 0xa8, 0xbd, 0xb0, 0xc6, 0x85, 0xad, 0x48, 0x6e, 0xdf, 0x81, 0x1c, 0xdc, 0x72, 0x18, 0xd6, 0xf8, 0xc1, 0xf4, 0x20, 0x6c, 0xcd, 0x13, 0xeb, 0xd9, 0x15, 0xbf, 0x33, 0x35, 0xc1, 0x97, 0x1f, 0x86, 0xe0, 0x97, 0xd5, 0x51, 0x22, 0x1c, 0xe0, 0x1b, 0xd3, 0x67, 0x20, 0x06, 0x4d, 0x4d, 0xb3, 0xbd, 0x28, 0xd1, 0xb2, 0x2f, 0xcb, 0x90, 0x92, 0xbc, 0xc3, 0x2e, 0x90, 0xac, 0x0e, 0x16, 0x0e, 0xe5, 0x03, 0x23, 0x62, 0x76, 0x0f, 0xf1, 0xf0, 0xdd, 0x2a, 0xf0, 0xb0, 0x84, 0xc9, 0xeb, 0x81, 0xf2, 0x8b, 0x65, 0x85, 0xff, 0x3a, 0x46, 0xf3, 0xb3, 0xc7, 0xbd, 0x61, 0x66, 0x11, 0x45, 0x0a, 0x0e, 0xfb, 0x8a, 0x8e, 0x64, 0x83, 0x0c, 0x59, 0x5e, 0x97, 0xef, 0x1c, 0x2f, 0x80, 0xec, 0x57, 0xd9, 0x60, 0x72, 0x54, 0x53, 0x65, 0x42, 0x92, 0x4f, 0x0d, 0x97, 0x0a, 0x81, 0x77, 0x80, 0xa8, 0x0a, 0x17, 0x83 }; static const uint8_t ac_rsassa_vect19_coeff[] = { 0x47, 0xcc, 0x01, 0x3c, 0xe5, 0xd4, 0x0f, 0xce, 0xd4, 0x07, 0x20, 0x80, 0x3b, 0xb3, 0xfc, 0x46, 0x34, 0x46, 0x8f, 0xe7, 0xf4, 0x31, 0xf4, 0x13, 0x7b, 0x13, 0x3c, 0xb4, 0x55, 0x3d, 0x77, 0xcb, 0x38, 0xb4, 0xe1, 0x56, 0x27, 0x96, 0xcd, 0x55, 0x4b, 0x73, 0x2e, 0xf6, 0x13, 0x3b, 0x9d, 0x23, 0x01, 0x4d, 0x05, 0xce, 0x44, 0x46, 0xc4, 0xa3, 0xc6, 0x1d, 0x86, 0x16, 0xcc, 0xf0, 0xe5, 0x66, 0xcf, 0xc0, 0xed, 0x35, 0x44, 0xe9, 0x58, 0x42, 0x32, 0x9a, 0x5b, 0x6d, 0x47, 0xcc, 0x11, 0x7a, 0x79, 0x47, 0x46, 0x82, 0xda, 0x57, 0x80, 0x8f, 0xe2, 0xf6, 0xd5, 0xc4, 0x71, 0x57, 0x1e, 0x1a, 0xe5, 0x04, 0x06, 0x3e, 0x9e, 0xec, 0xcd, 0x16, 0x17, 0xaf, 0x25, 0x85, 0xcd, 0xdb, 0x55, 0xce, 0x9b, 0xab, 0xbc, 0x57, 0x36, 0x66, 0x48, 0xdb, 0x6c, 0x3a, 0x96, 0x71, 0x83, 0x90, 0x7a, 0xa4, 0x87, 0xb5, 0xcd, 0x6a, 0x8a, 0x27, 0x21, 0x2c, 0xa5, 0xba, 0x62, 0x07, 0x28, 0xe3, 0x77, 0xca, 0x19, 0xed, 0x7a, 0x55, 0xb8, 0x0c, 0x1c, 0x17, 0x08, 0xa6, 0xf6, 0xd3, 0xda, 0x2c, 0x20, 0x25, 0xb9, 0xb7, 0x3e, 0x2e, 0xe6, 0x25, 0x32, 0xb2, 0xc3, 0x06, 0x63, 0xfb, 0xfb, 0x16, 0x3f, 0x66, 0x18, 0x82, 0x0d, 0x15, 0x37, 0x35, 0x97, 0x17, 0x79, 0xad, 0xd8, 0x96, 0xa1, 0x20, 0x51, 0xd5, 0xb8, 0xb9, 0x53, 0x85, 0x20, 0xbe, 0x71, 0xac, 0xa3, 0xe6, 0x8d, 0xeb, 0xef, 0x1b, 0x8e, 0x42, 0x89, 0xf4, 0x5c, 0x10, 0x80, 0x8a, 0xac, 0xe4, 0xbf, 0xd1, 0xbd, 0x40, 0x47, 0x62, 0x95, 0xfb, 0xab, 0xd1, 0xac, 0x28, 0x6c, 0xa4, 0xfc, 0xbb, 0x77, 0x1f, 0xdb, 0x91, 0xa7, 0xff, 0x90, 0x49, 0x74, 0xee, 0x32, 0x28, 0xbc, 0x15, 0x44, 0x17, 0xdf, 0x30, 0x5a, 0xb6, 0x91, 0xe2, 0x87, 0x02 }; static const uint8_t ac_rsassa_vect19_ptx[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; static const uint8_t ac_rsassa_vect19_out[] = { 0x5c, 0x9c, 0x79, 0x1b, 0xd1, 0x64, 0x6a, 0xb5, 0xc7, 0xd9, 0xb1, 0x7c, 0xd0, 0x3b, 0x05, 0xae, 0x9f, 0x93, 0x36, 0xcd, 0xa3, 0x38, 0x1b, 0xc6, 0x23, 0x81, 0x72, 0xd7, 0x57, 0xa4, 0x16, 0x07, 0x2c, 0xc0, 0x63, 0x38, 0x01, 0x51, 0x58, 0x6d, 0x24, 0xcd, 0x7b, 0x24, 0x86, 0xd4, 0x5a, 0xb5, 0x44, 0x47, 0x13, 0xc4, 0xaf, 0xce, 0x1d, 0x1e, 0x5d, 0x23, 0xb2, 0xe8, 0xae, 0x14, 0x2f, 0x61, 0xf5, 0xf4, 0x7f, 0x37, 0x83, 0x1c, 0x55, 0xdb, 0xb8, 0xd9, 0x27, 0xf4, 0xa7, 0x39, 0x77, 0x3b, 0x73, 0xdb, 0x1a, 0x1d, 0xf7, 0x21, 0x82, 0xb7, 0xda, 0xce, 0x76, 0x90, 0xf2, 0xda, 0x18, 0x0b, 0xf9, 0x11, 0x4f, 0x64, 0xc4, 0x1d, 0xe2, 0xd4, 0xd0, 0x6a, 0xfb, 0x6f, 0x1b, 0x32, 0x2f, 0x4a, 0xcc, 0x6f, 0x5b, 0x28, 0x7f, 0x26, 0xe8, 0x4b, 0x6e, 0x0a, 0x4b, 0x62, 0xef, 0xd9, 0x88, 0x23, 0x1c, 0xea, 0x4f, 0x1a, 0x0a, 0x3a, 0xbd, 0xf6, 0x7d, 0xdc, 0xca, 0x57, 0xc8, 0x68, 0xa6, 0xb3, 0x16, 0xa2, 0xe9, 0x6e, 0x56, 0x69, 0xc9, 0x62, 0xf4, 0x12, 0xf5, 0x48, 0xcf, 0x34, 0x2a, 0x5b, 0x4f, 0xf1, 0x0c, 0xb6, 0x24, 0x04, 0x9d, 0x4f, 0xb0, 0xd3, 0x11, 0x43, 0x29, 0x89, 0x99, 0x9b, 0xb1, 0xe3, 0x8c, 0x00, 0x83, 0xe3, 0xbe, 0x94, 0xbf, 0x1f, 0xf1, 0x5c, 0x83, 0xe9, 0x01, 0xb9, 0xec, 0x41, 0x73, 0x23, 0x98, 0x5e, 0x20, 0x91, 0xca, 0x56, 0x3f, 0x6f, 0x6b, 0x50, 0x6d, 0x94, 0x3e, 0x2e, 0x1b, 0xb3, 0xc5, 0x74, 0x8f, 0x3a, 0xaf, 0x21, 0x49, 0x7e, 0x9a, 0xe8, 0x85, 0x95, 0xd5, 0x87, 0xb1, 0xd7, 0x0a, 0xf2, 0x35, 0x59, 0x1d, 0xe5, 0x8e, 0x9e, 0xc8, 0xa0, 0x84, 0xd1, 0xdf, 0xea, 0x20, 0x16, 0x16, 0x1c, 0x35, 0x69, 0x37, 0x3d, 0x38, 0x3a, 0x53, 0x97, 0x1f, 0xa8, 0x3a, 0xa6, 0x41, 0xc6, 0xd4, 0x7e, 0xac, 0xd3, 0x9e, 0x24, 0x22, 0x9b, 0xb9, 0x6e, 0xfb, 0xd9, 0x23, 0x65, 0xd5, 0xda, 0x28, 0xb3, 0x0c, 0x74, 0x8b, 0xb6, 0xfa, 0x5b, 0xd4, 0x1e, 0x95, 0x1c, 0x08, 0xd0, 0x38, 0x7c, 0xef, 0x6e, 0xb3, 0xee, 0x5b, 0x3b, 0x66, 0xa9, 0x5f, 0x74, 0xab, 0x29, 0x3c, 0x6d, 0x58, 0x51, 0x95, 0x5f, 0xb0, 0x68, 0x5d, 0xc5, 0x78, 0xe4, 0x7a, 0x1c, 0x1d, 0x37, 0xde, 0xdf, 0xd9, 0xae, 0xa0, 0x9b, 0xcd, 0x42, 0x60, 0x74, 0x07, 0x6d, 0xbc, 0x37, 0x80, 0x49, 0x8f, 0xdf, 0x7e, 0x6e, 0x7d, 0x54, 0xde, 0x7f, 0x0c, 0x06, 0xb9, 0xe8, 0xc2, 0x5b, 0xed, 0xaa, 0xe5, 0x87, 0xc7, 0xed, 0xe5, 0x90, 0x98, 0xbb, 0xf4, 0xf3, 0x76, 0x96, 0x7f, 0xc1, 0xe8, 0x49, 0xbc, 0x78, 0x56, 0xf1, 0x5e, 0x87, 0xbd, 0xca, 0xd9, 0xdb, 0xf7, 0xa4, 0x13, 0xc5, 0x32, 0x51, 0x27, 0xa4, 0xeb, 0xd8, 0x1b, 0xf5, 0x37, 0xcd, 0x1c, 0xba, 0x7b, 0xb5, 0x0c, 0xce, 0x71, 0xcb, 0x18, 0xfb, 0x61, 0x60, 0xe7, 0xc0, 0x06, 0xd0, 0x09, 0xc7, 0xbf, 0x3f, 0x7b, 0x55, 0x52, 0x88, 0xa8, 0x7a, 0x94, 0xcf, 0x15, 0x5d, 0x97, 0xba, 0x9a, 0xa8, 0xe2, 0x37, 0xe6, 0xe7, 0xf3, 0x2b, 0xc2, 0xec, 0x33, 0x0b, 0xe7, 0x60, 0xa2, 0xc3, 0x63, 0x89, 0xc6, 0xf1, 0xe5, 0xda, 0x13, 0xd5, 0xcc, 0x27, 0x35, 0xf8, 0x9f, 0xa8, 0x21, 0x49, 0x09, 0x5b, 0x6b, 0xaf, 0x65, 0xbf, 0xb8, 0x6e, 0x5b, 0xf1, 0x61, 0xf4, 0xd3, 0xe9, 0xb5, 0x20, 0x01, 0x40, 0xd6, 0x81, 0x1e, 0x4f, 0xcd, 0x77, 0x51, 0x80, 0x6d, 0x69, 0xc7, 0xba, 0xf8, 0x2b, 0x38, 0x02, 0xa1, 0x9b, 0x36, 0x8d, 0x56, 0xcf, 0x88, 0xb8, 0x71, 0x29, 0x08, 0x69, 0xbe, 0x68, 0x98, 0x84, 0xbb, 0x38, 0xe7, 0xc0, 0x0f, 0x05 }; /* * Test data from ftp://ftp.rsa.com/pub/rsalabs/tmp/pkcs1v15sign-vectors.txt * * As specified in PKCS#1, the block type for this operation * is 1. The digest algorithm is SHA-1; i.e. the given message * must be hashed and the SHA-1 hash must be encapsulated in a * DigestInfo structure as specified in PKCS#1 v1.5. */ /* PKCS#1 v1.5 Signature Example 1 1024-bit RSA key pair */ static const uint8_t ac_rsassa_example1_modulus[] = { 0xa5, 0x6e, 0x4a, 0x0e, 0x70, 0x10, 0x17, 0x58, 0x9a, 0x51, 0x87, 0xdc, 0x7e, 0xa8, 0x41, 0xd1, 0x56, 0xf2, 0xec, 0x0e, 0x36, 0xad, 0x52, 0xa4, 0x4d, 0xfe, 0xb1, 0xe6, 0x1f, 0x7a, 0xd9, 0x91, 0xd8, 0xc5, 0x10, 0x56, 0xff, 0xed, 0xb1, 0x62, 0xb4, 0xc0, 0xf2, 0x83, 0xa1, 0x2a, 0x88, 0xa3, 0x94, 0xdf, 0xf5, 0x26, 0xab, 0x72, 0x91, 0xcb, 0xb3, 0x07, 0xce, 0xab, 0xfc, 0xe0, 0xb1, 0xdf, 0xd5, 0xcd, 0x95, 0x08, 0x09, 0x6d, 0x5b, 0x2b, 0x8b, 0x6d, 0xf5, 0xd6, 0x71, 0xef, 0x63, 0x77, 0xc0, 0x92, 0x1c, 0xb2, 0x3c, 0x27, 0x0a, 0x70, 0xe2, 0x59, 0x8e, 0x6f, 0xf8, 0x9d, 0x19, 0xf1, 0x05, 0xac, 0xc2, 0xd3, 0xf0, 0xcb, 0x35, 0xf2, 0x92, 0x80, 0xe1, 0x38, 0x6b, 0x6f, 0x64, 0xc4, 0xef, 0x22, 0xe1, 0xe1, 0xf2, 0x0d, 0x0c, 0xe8, 0xcf, 0xfb, 0x22, 0x49, 0xbd, 0x9a, 0x21, 0x37, }; static const uint8_t ac_rsassa_example1_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_rsassa_example1_priv_exp[] = { 0x33, 0xa5, 0x04, 0x2a, 0x90, 0xb2, 0x7d, 0x4f, 0x54, 0x51, 0xca, 0x9b, 0xbb, 0xd0, 0xb4, 0x47, 0x71, 0xa1, 0x01, 0xaf, 0x88, 0x43, 0x40, 0xae, 0xf9, 0x88, 0x5f, 0x2a, 0x4b, 0xbe, 0x92, 0xe8, 0x94, 0xa7, 0x24, 0xac, 0x3c, 0x56, 0x8c, 0x8f, 0x97, 0x85, 0x3a, 0xd0, 0x7c, 0x02, 0x66, 0xc8, 0xc6, 0xa3, 0xca, 0x09, 0x29, 0xf1, 0xe8, 0xf1, 0x12, 0x31, 0x88, 0x44, 0x29, 0xfc, 0x4d, 0x9a, 0xe5, 0x5f, 0xee, 0x89, 0x6a, 0x10, 0xce, 0x70, 0x7c, 0x3e, 0xd7, 0xe7, 0x34, 0xe4, 0x47, 0x27, 0xa3, 0x95, 0x74, 0x50, 0x1a, 0x53, 0x26, 0x83, 0x10, 0x9c, 0x2a, 0xba, 0xca, 0xba, 0x28, 0x3c, 0x31, 0xb4, 0xbd, 0x2f, 0x53, 0xc3, 0xee, 0x37, 0xe3, 0x52, 0xce, 0xe3, 0x4f, 0x9e, 0x50, 0x3b, 0xd8, 0x0c, 0x06, 0x22, 0xad, 0x79, 0xc6, 0xdc, 0xee, 0x88, 0x35, 0x47, 0xc6, 0xa3, 0xb3, 0x25, }; static const uint8_t ac_rsassa_example1_prime1[] = { 0xe7, 0xe8, 0x94, 0x27, 0x20, 0xa8, 0x77, 0x51, 0x72, 0x73, 0xa3, 0x56, 0x05, 0x3e, 0xa2, 0xa1, 0xbc, 0x0c, 0x94, 0xaa, 0x72, 0xd5, 0x5c, 0x6e, 0x86, 0x29, 0x6b, 0x2d, 0xfc, 0x96, 0x79, 0x48, 0xc0, 0xa7, 0x2c, 0xbc, 0xcc, 0xa7, 0xea, 0xcb, 0x35, 0x70, 0x6e, 0x09, 0xa1, 0xdf, 0x55, 0xa1, 0x53, 0x5b, 0xd9, 0xb3, 0xcc, 0x34, 0x16, 0x0b, 0x3b, 0x6d, 0xcd, 0x3e, 0xda, 0x8e, 0x64, 0x43, }; static const uint8_t ac_rsassa_example1_prime2[] = { 0xb6, 0x9d, 0xca, 0x1c, 0xf7, 0xd4, 0xd7, 0xec, 0x81, 0xe7, 0x5b, 0x90, 0xfc, 0xca, 0x87, 0x4a, 0xbc, 0xde, 0x12, 0x3f, 0xd2, 0x70, 0x01, 0x80, 0xaa, 0x90, 0x47, 0x9b, 0x6e, 0x48, 0xde, 0x8d, 0x67, 0xed, 0x24, 0xf9, 0xf1, 0x9d, 0x85, 0xba, 0x27, 0x58, 0x74, 0xf5, 0x42, 0xcd, 0x20, 0xdc, 0x72, 0x3e, 0x69, 0x63, 0x36, 0x4a, 0x1f, 0x94, 0x25, 0x45, 0x2b, 0x26, 0x9a, 0x67, 0x99, 0xfd, }; static const uint8_t ac_rsassa_example1_exp1[] = { 0x28, 0xfa, 0x13, 0x93, 0x86, 0x55, 0xbe, 0x1f, 0x8a, 0x15, 0x9c, 0xba, 0xca, 0x5a, 0x72, 0xea, 0x19, 0x0c, 0x30, 0x08, 0x9e, 0x19, 0xcd, 0x27, 0x4a, 0x55, 0x6f, 0x36, 0xc4, 0xf6, 0xe1, 0x9f, 0x55, 0x4b, 0x34, 0xc0, 0x77, 0x79, 0x04, 0x27, 0xbb, 0xdd, 0x8d, 0xd3, 0xed, 0xe2, 0x44, 0x83, 0x28, 0xf3, 0x85, 0xd8, 0x1b, 0x30, 0xe8, 0xe4, 0x3b, 0x2f, 0xff, 0xa0, 0x27, 0x86, 0x19, 0x79, }; static const uint8_t ac_rsassa_example1_exp2[] = { 0x1a, 0x8b, 0x38, 0xf3, 0x98, 0xfa, 0x71, 0x20, 0x49, 0x89, 0x8d, 0x7f, 0xb7, 0x9e, 0xe0, 0xa7, 0x76, 0x68, 0x79, 0x12, 0x99, 0xcd, 0xfa, 0x09, 0xef, 0xc0, 0xe5, 0x07, 0xac, 0xb2, 0x1e, 0xd7, 0x43, 0x01, 0xef, 0x5b, 0xfd, 0x48, 0xbe, 0x45, 0x5e, 0xae, 0xb6, 0xe1, 0x67, 0x82, 0x55, 0x82, 0x75, 0x80, 0xa8, 0xe4, 0xe8, 0xe1, 0x41, 0x51, 0xd1, 0x51, 0x0a, 0x82, 0xa3, 0xf2, 0xe7, 0x29, }; static const uint8_t ac_rsassa_example1_coeff[] = { 0x27, 0x15, 0x6a, 0xba, 0x41, 0x26, 0xd2, 0x4a, 0x81, 0xf3, 0xa5, 0x28, 0xcb, 0xfb, 0x27, 0xf5, 0x68, 0x86, 0xf8, 0x40, 0xa9, 0xf6, 0xe8, 0x6e, 0x17, 0xa4, 0x4b, 0x94, 0xfe, 0x93, 0x19, 0x58, 0x4b, 0x8e, 0x22, 0xfd, 0xde, 0x1e, 0x5a, 0x2e, 0x3b, 0xd8, 0xaa, 0x5b, 0xa8, 0xd8, 0x58, 0x41, 0x94, 0xeb, 0x21, 0x90, 0xac, 0xf8, 0x32, 0xb8, 0x47, 0xf1, 0x3a, 0x3d, 0x24, 0xa7, 0x9f, 0x4d, }; /* PKCS#1 v1.5 Signature Example 1.1 */ #define ac_rsassa_vect3_modulus ac_rsassa_example1_modulus #define ac_rsassa_vect3_pub_exp ac_rsassa_example1_pub_exp #define ac_rsassa_vect3_priv_exp ac_rsassa_example1_priv_exp #define ac_rsassa_vect3_prime1 ac_rsassa_example1_prime1 #define ac_rsassa_vect3_prime2 ac_rsassa_example1_prime2 #define ac_rsassa_vect3_exp1 ac_rsassa_example1_exp1 #define ac_rsassa_vect3_exp2 ac_rsassa_example1_exp2 #define ac_rsassa_vect3_coeff ac_rsassa_example1_coeff static const uint8_t ac_rsassa_vect3_ptx[] = { 0xcd, 0xc8, 0x7d, 0xa2, 0x23, 0xd7, 0x86, 0xdf, 0x3b, 0x45, 0xe0, 0xbb, 0xbc, 0x72, 0x13, 0x26, 0xd1, 0xee, 0x2a, 0xf8, 0x06, 0xcc, 0x31, 0x54, 0x75, 0xcc, 0x6f, 0x0d, 0x9c, 0x66, 0xe1, 0xb6, 0x23, 0x71, 0xd4, 0x5c, 0xe2, 0x39, 0x2e, 0x1a, 0xc9, 0x28, 0x44, 0xc3, 0x10, 0x10, 0x2f, 0x15, 0x6a, 0x0d, 0x8d, 0x52, 0xc1, 0xf4, 0xc4, 0x0b, 0xa3, 0xaa, 0x65, 0x09, 0x57, 0x86, 0xcb, 0x76, 0x97, 0x57, 0xa6, 0x56, 0x3b, 0xa9, 0x58, 0xfe, 0xd0, 0xbc, 0xc9, 0x84, 0xe8, 0xb5, 0x17, 0xa3, 0xd5, 0xf5, 0x15, 0xb2, 0x3b, 0x8a, 0x41, 0xe7, 0x4a, 0xa8, 0x67, 0x69, 0x3f, 0x90, 0xdf, 0xb0, 0x61, 0xa6, 0xe8, 0x6d, 0xfa, 0xae, 0xe6, 0x44, 0x72, 0xc0, 0x0e, 0x5f, 0x20, 0x94, 0x57, 0x29, 0xcb, 0xeb, 0xe7, 0x7f, 0x06, 0xce, 0x78, 0xe0, 0x8f, 0x40, 0x98, 0xfb, 0xa4, 0x1f, 0x9d, 0x61, 0x93, 0xc0, 0x31, 0x7e, 0x8b, 0x60, 0xd4, 0xb6, 0x08, 0x4a, 0xcb, 0x42, 0xd2, 0x9e, 0x38, 0x08, 0xa3, 0xbc, 0x37, 0x2d, 0x85, 0xe3, 0x31, 0x17, 0x0f, 0xcb, 0xf7, 0xcc, 0x72, 0xd0, 0xb7, 0x1c, 0x29, 0x66, 0x48, 0xb3, 0xa4, 0xd1, 0x0f, 0x41, 0x62, 0x95, 0xd0, 0x80, 0x7a, 0xa6, 0x25, 0xca, 0xb2, 0x74, 0x4f, 0xd9, 0xea, 0x8f, 0xd2, 0x23, 0xc4, 0x25, 0x37, 0x02, 0x98, 0x28, 0xbd, 0x16, 0xbe, 0x02, 0x54, 0x6f, 0x13, 0x0f, 0xd2, 0xe3, 0x3b, 0x93, 0x6d, 0x26, 0x76, 0xe0, 0x8a, 0xed, 0x1b, 0x73, 0x31, 0x8b, 0x75, 0x0a, 0x01, 0x67, 0xd0, }; static const uint8_t ac_rsassa_vect3_out[] = { 0x6b, 0xc3, 0xa0, 0x66, 0x56, 0x84, 0x29, 0x30, 0xa2, 0x47, 0xe3, 0x0d, 0x58, 0x64, 0xb4, 0xd8, 0x19, 0x23, 0x6b, 0xa7, 0xc6, 0x89, 0x65, 0x86, 0x2a, 0xd7, 0xdb, 0xc4, 0xe2, 0x4a, 0xf2, 0x8e, 0x86, 0xbb, 0x53, 0x1f, 0x03, 0x35, 0x8b, 0xe5, 0xfb, 0x74, 0x77, 0x7c, 0x60, 0x86, 0xf8, 0x50, 0xca, 0xef, 0x89, 0x3f, 0x0d, 0x6f, 0xcc, 0x2d, 0x0c, 0x91, 0xec, 0x01, 0x36, 0x93, 0xb4, 0xea, 0x00, 0xb8, 0x0c, 0xd4, 0x9a, 0xac, 0x4e, 0xcb, 0x5f, 0x89, 0x11, 0xaf, 0xe5, 0x39, 0xad, 0xa4, 0xa8, 0xf3, 0x82, 0x3d, 0x1d, 0x13, 0xe4, 0x72, 0xd1, 0x49, 0x05, 0x47, 0xc6, 0x59, 0xc7, 0x61, 0x7f, 0x3d, 0x24, 0x08, 0x7d, 0xdb, 0x6f, 0x2b, 0x72, 0x09, 0x61, 0x67, 0xfc, 0x09, 0x7c, 0xab, 0x18, 0xe9, 0xa4, 0x58, 0xfc, 0xb6, 0x34, 0xcd, 0xce, 0x8e, 0xe3, 0x58, 0x94, 0xc4, 0x84, 0xd7, }; /* PKCS#1 v1.5 Signature Example 1.2 */ #define ac_rsassa_vect4_modulus ac_rsassa_example1_modulus #define ac_rsassa_vect4_pub_exp ac_rsassa_example1_pub_exp #define ac_rsassa_vect4_priv_exp ac_rsassa_example1_priv_exp #define ac_rsassa_vect4_prime1 ac_rsassa_example1_prime1 #define ac_rsassa_vect4_prime2 ac_rsassa_example1_prime2 #define ac_rsassa_vect4_exp1 ac_rsassa_example1_exp1 #define ac_rsassa_vect4_exp2 ac_rsassa_example1_exp2 #define ac_rsassa_vect4_coeff ac_rsassa_example1_coeff static const uint8_t ac_rsassa_vect4_ptx[] = { 0x85, 0x13, 0x84, 0xcd, 0xfe, 0x81, 0x9c, 0x22, 0xed, 0x6c, 0x4c, 0xcb, 0x30, 0xda, 0xeb, 0x5c, 0xf0, 0x59, 0xbc, 0x8e, 0x11, 0x66, 0xb7, 0xe3, 0x53, 0x0c, 0x4c, 0x23, 0x3e, 0x2b, 0x5f, 0x8f, 0x71, 0xa1, 0xcc, 0xa5, 0x82, 0xd4, 0x3e, 0xcc, 0x72, 0xb1, 0xbc, 0xa1, 0x6d, 0xfc, 0x70, 0x13, 0x22, 0x6b, 0x9e, }; static const uint8_t ac_rsassa_vect4_out[] = { 0x84, 0xfd, 0x2c, 0xe7, 0x34, 0xec, 0x1d, 0xa8, 0x28, 0xd0, 0xf1, 0x5b, 0xf4, 0x9a, 0x87, 0x07, 0xc1, 0x5d, 0x05, 0x94, 0x81, 0x36, 0xde, 0x53, 0x7a, 0x3d, 0xb4, 0x21, 0x38, 0x41, 0x67, 0xc8, 0x6f, 0xae, 0x02, 0x25, 0x87, 0xee, 0x9e, 0x13, 0x7d, 0xae, 0xe7, 0x54, 0x73, 0x82, 0x62, 0x93, 0x2d, 0x27, 0x1c, 0x74, 0x4c, 0x6d, 0x3a, 0x18, 0x9a, 0xd4, 0x31, 0x1b, 0xdb, 0x02, 0x04, 0x92, 0xe3, 0x22, 0xfb, 0xdd, 0xc4, 0x04, 0x06, 0xea, 0x86, 0x0d, 0x4e, 0x8e, 0xa2, 0xa4, 0x08, 0x4a, 0xa9, 0x8b, 0x96, 0x22, 0xa4, 0x46, 0x75, 0x6f, 0xdb, 0x74, 0x0d, 0xdb, 0x3d, 0x91, 0xdb, 0x76, 0x70, 0xe2, 0x11, 0x66, 0x1b, 0xbf, 0x87, 0x09, 0xb1, 0x1c, 0x08, 0xa7, 0x07, 0x71, 0x42, 0x2d, 0x1a, 0x12, 0xde, 0xf2, 0x9f, 0x06, 0x88, 0xa1, 0x92, 0xae, 0xbd, 0x89, 0xe0, 0xf8, 0x96, 0xf8, }; /* PKCS#1 v1.5 Signature Example 1.3 */ #define ac_rsassa_vect5_modulus ac_rsassa_example1_modulus #define ac_rsassa_vect5_pub_exp ac_rsassa_example1_pub_exp #define ac_rsassa_vect5_priv_exp ac_rsassa_example1_priv_exp #define ac_rsassa_vect5_prime1 ac_rsassa_example1_prime1 #define ac_rsassa_vect5_prime2 ac_rsassa_example1_prime2 #define ac_rsassa_vect5_exp1 ac_rsassa_example1_exp1 #define ac_rsassa_vect5_exp2 ac_rsassa_example1_exp2 #define ac_rsassa_vect5_coeff ac_rsassa_example1_coeff static const uint8_t ac_rsassa_vect5_ptx[] = { 0xa4, 0xb1, 0x59, 0x94, 0x17, 0x61, 0xc4, 0x0c, 0x6a, 0x82, 0xf2, 0xb8, 0x0d, 0x1b, 0x94, 0xf5, 0xaa, 0x26, 0x54, 0xfd, 0x17, 0xe1, 0x2d, 0x58, 0x88, 0x64, 0x67, 0x9b, 0x54, 0xcd, 0x04, 0xef, 0x8b, 0xd0, 0x30, 0x12, 0xbe, 0x8d, 0xc3, 0x7f, 0x4b, 0x83, 0xaf, 0x79, 0x63, 0xfa, 0xff, 0x0d, 0xfa, 0x22, 0x54, 0x77, 0x43, 0x7c, 0x48, 0x01, 0x7f, 0xf2, 0xbe, 0x81, 0x91, 0xcf, 0x39, 0x55, 0xfc, 0x07, 0x35, 0x6e, 0xab, 0x3f, 0x32, 0x2f, 0x7f, 0x62, 0x0e, 0x21, 0xd2, 0x54, 0xe5, 0xdb, 0x43, 0x24, 0x27, 0x9f, 0xe0, 0x67, 0xe0, 0x91, 0x0e, 0x2e, 0x81, 0xca, 0x2c, 0xab, 0x31, 0xc7, 0x45, 0xe6, 0x7a, 0x54, 0x05, 0x8e, 0xb5, 0x0d, 0x99, 0x3c, 0xdb, 0x9e, 0xd0, 0xb4, 0xd0, 0x29, 0xc0, 0x6d, 0x21, 0xa9, 0x4c, 0xa6, 0x61, 0xc3, 0xce, 0x27, 0xfa, 0xe1, 0xd6, 0xcb, 0x20, 0xf4, 0x56, 0x4d, 0x66, 0xce, 0x47, 0x67, 0x58, 0x3d, 0x0e, 0x5f, 0x06, 0x02, 0x15, 0xb5, 0x90, 0x17, 0xbe, 0x85, 0xea, 0x84, 0x89, 0x39, 0x12, 0x7b, 0xd8, 0xc9, 0xc4, 0xd4, 0x7b, 0x51, 0x05, 0x6c, 0x03, 0x1c, 0xf3, 0x36, 0xf1, 0x7c, 0x99, 0x80, 0xf3, 0xb8, 0xf5, 0xb9, 0xb6, 0x87, 0x8e, 0x8b, 0x79, 0x7a, 0xa4, 0x3b, 0x88, 0x26, 0x84, 0x33, 0x3e, 0x17, 0x89, 0x3f, 0xe9, 0xca, 0xa6, 0xaa, 0x29, 0x9f, 0x7e, 0xd1, 0xa1, 0x8e, 0xe2, 0xc5, 0x48, 0x64, 0xb7, 0xb2, 0xb9, 0x9b, 0x72, 0x61, 0x8f, 0xb0, 0x25, 0x74, 0xd1, 0x39, 0xef, 0x50, 0xf0, 0x19, 0xc9, 0xee, 0xf4, 0x16, 0x97, 0x13, 0x38, 0xe7, 0xd4, 0x70 }; static const uint8_t ac_rsassa_vect5_out[] = { 0x0b, 0x1f, 0x2e, 0x51, 0x80, 0xe5, 0xc7, 0xb4, 0xb5, 0xe6, 0x72, 0x92, 0x9f, 0x66, 0x4c, 0x48, 0x96, 0xe5, 0x0c, 0x35, 0x13, 0x4b, 0x6d, 0xe4, 0xd5, 0xa9, 0x34, 0x25, 0x2a, 0x3a, 0x24, 0x5f, 0xf4, 0x83, 0x40, 0x92, 0x0e, 0x10, 0x34, 0xb7, 0xd5, 0xa5, 0xb5, 0x24, 0xeb, 0x0e, 0x1c, 0xf1, 0x2b, 0xef, 0xef, 0x49, 0xb2, 0x7b, 0x73, 0x2d, 0x2c, 0x19, 0xe1, 0xc4, 0x32, 0x17, 0xd6, 0xe1, 0x41, 0x73, 0x81, 0x11, 0x1a, 0x1d, 0x36, 0xde, 0x63, 0x75, 0xcf, 0x45, 0x5b, 0x3c, 0x98, 0x12, 0x63, 0x9d, 0xbc, 0x27, 0x60, 0x0c, 0x75, 0x19, 0x94, 0xfb, 0x61, 0x79, 0x9e, 0xcf, 0x7d, 0xa6, 0xbc, 0xf5, 0x15, 0x40, 0xaf, 0xd0, 0x17, 0x4d, 0xb4, 0x03, 0x31, 0x88, 0x55, 0x66, 0x75, 0xb1, 0xd7, 0x63, 0x36, 0x0a, 0xf4, 0x6f, 0xee, 0xca, 0x5b, 0x60, 0xf8, 0x82, 0x82, 0x9e, 0xe7, 0xb2, }; /* PKCS#1 v1.5 Signature Example 1.4 */ #define ac_rsassa_vect6_modulus ac_rsassa_example1_modulus #define ac_rsassa_vect6_pub_exp ac_rsassa_example1_pub_exp #define ac_rsassa_vect6_priv_exp ac_rsassa_example1_priv_exp #define ac_rsassa_vect6_prime1 ac_rsassa_example1_prime1 #define ac_rsassa_vect6_prime2 ac_rsassa_example1_prime2 #define ac_rsassa_vect6_exp1 ac_rsassa_example1_exp1 #define ac_rsassa_vect6_exp2 ac_rsassa_example1_exp2 #define ac_rsassa_vect6_coeff ac_rsassa_example1_coeff static const uint8_t ac_rsassa_vect6_ptx[] = { 0xbc, 0x65, 0x67, 0x47, 0xfa, 0x9e, 0xaf, 0xb3, 0xf0 }; static const uint8_t ac_rsassa_vect6_out[] = { 0x45, 0x60, 0x7a, 0xd6, 0x11, 0xcf, 0x57, 0x47, 0xa4, 0x1a, 0xc9, 0x4d, 0x0f, 0xfe, 0xc8, 0x78, 0xbd, 0xaf, 0x63, 0xf6, 0xb5, 0x7a, 0x4b, 0x08, 0x8b, 0xf3, 0x6e, 0x34, 0xe1, 0x09, 0xf8, 0x40, 0xf2, 0x4b, 0x74, 0x2a, 0xda, 0x16, 0x10, 0x2d, 0xab, 0xf9, 0x51, 0xcb, 0xc4, 0x4f, 0x89, 0x82, 0xe9, 0x4e, 0xd4, 0xcd, 0x09, 0x44, 0x8d, 0x20, 0xec, 0x0e, 0xfa, 0x73, 0x54, 0x5f, 0x80, 0xb6, 0x54, 0x06, 0xbe, 0xd6, 0x19, 0x4a, 0x61, 0xc3, 0x40, 0xb4, 0xad, 0x15, 0x68, 0xcb, 0xb7, 0x58, 0x51, 0x04, 0x9f, 0x11, 0xaf, 0x17, 0x34, 0x96, 0x40, 0x76, 0xe0, 0x20, 0x29, 0xae, 0xe2, 0x00, 0xe4, 0x0e, 0x80, 0xbe, 0x0f, 0x43, 0x61, 0xf6, 0x98, 0x41, 0xc4, 0xf9, 0x2a, 0x44, 0x50, 0xa2, 0x28, 0x6d, 0x43, 0x28, 0x9b, 0x40, 0x55, 0x54, 0xc5, 0x4d, 0x25, 0xc6, 0xec, 0xb5, 0x84, 0xf4, }; /* PKCS#1 v1.5 Signature Example 7 1025-bit RSA key pair */ static const uint8_t ac_rsassa_example2_modulus[] = { 0x01, 0x69, 0x34, 0xcd, 0xff, 0x48, 0x50, 0xb6, 0x00, 0x2c, 0xc0, 0xf0, 0xf4, 0x01, 0x0a, 0x32, 0xc6, 0x55, 0xe5, 0xcf, 0x6e, 0x7c, 0x89, 0x93, 0x7f, 0xd7, 0x55, 0xef, 0x6a, 0xbe, 0x37, 0x9d, 0xad, 0xde, 0x70, 0xcc, 0x21, 0x77, 0x51, 0xf1, 0x4c, 0xba, 0x6d, 0x90, 0xfe, 0x52, 0xdc, 0x0a, 0xf5, 0x8b, 0x25, 0x2f, 0x26, 0xbf, 0x72, 0xda, 0x57, 0x9f, 0xda, 0xf5, 0x7d, 0xdd, 0x6c, 0xd6, 0x02, 0x18, 0x79, 0x94, 0x9a, 0x02, 0x76, 0xb4, 0x43, 0x3f, 0xf0, 0x1e, 0xfc, 0xcc, 0xf3, 0x5a, 0x11, 0xe7, 0xc7, 0x7b, 0x38, 0xc1, 0x8c, 0xca, 0x94, 0xae, 0x01, 0x2d, 0x0f, 0x37, 0x04, 0x21, 0x49, 0x1c, 0x52, 0xad, 0x15, 0xac, 0x76, 0xb1, 0x2e, 0xcd, 0x21, 0x8f, 0x52, 0xe7, 0x57, 0x86, 0x6e, 0x08, 0x9d, 0xd8, 0xad, 0xbb, 0x48, 0xe9, 0xba, 0x89, 0x43, 0x36, 0xc5, 0x75, 0xc4, 0x06, 0x55 }; static const uint8_t ac_rsassa_example2_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_rsassa_example2_priv_exp[] = { 0x0d, 0x17, 0x19, 0xe5, 0xbd, 0x47, 0x6d, 0x87, 0xc7, 0xec, 0xc3, 0x1e, 0xb8, 0xab, 0x42, 0x5d, 0x4f, 0xe4, 0xc8, 0xf5, 0xc7, 0xae, 0x23, 0x0a, 0x10, 0x47, 0x55, 0x3f, 0xfb, 0x53, 0x9f, 0xd3, 0x85, 0x5a, 0xf5, 0xa4, 0x3b, 0x2d, 0xdd, 0x4e, 0x95, 0xa2, 0xb3, 0x0d, 0x40, 0x7a, 0xa8, 0x81, 0x59, 0xbb, 0xad, 0x2a, 0x87, 0x3d, 0x80, 0x93, 0xb4, 0x8a, 0x4b, 0xce, 0x20, 0xad, 0x99, 0x26, 0x25, 0x3e, 0xd3, 0x39, 0xac, 0x3b, 0x54, 0x3f, 0xc7, 0x42, 0x96, 0x95, 0x33, 0x8d, 0xb0, 0xbc, 0x1d, 0xc3, 0x68, 0x6c, 0xfd, 0x13, 0x9b, 0xb5, 0xb2, 0x87, 0x36, 0xbc, 0x16, 0x60, 0xa9, 0x53, 0x48, 0xfc, 0x91, 0xc3, 0x25, 0xd0, 0x3a, 0x7f, 0xb2, 0x16, 0xd2, 0xd9, 0xcd, 0x93, 0x64, 0xde, 0x4e, 0xe7, 0xd2, 0x11, 0x9c, 0x3b, 0x0f, 0xbb, 0xa8, 0xa7, 0x1f, 0x0d, 0x3f, 0x5a, 0xb9, 0xb9, }; static const uint8_t ac_rsassa_example2_prime1[] = { 0x01, 0x58, 0xc0, 0x24, 0x6c, 0xd1, 0x69, 0xfc, 0x59, 0x3b, 0x25, 0x8b, 0xbf, 0x45, 0x23, 0xab, 0x2b, 0x55, 0xc4, 0x60, 0x73, 0x3a, 0x7f, 0xb4, 0x69, 0x10, 0x90, 0x77, 0xb3, 0x0e, 0x4d, 0x35, 0xf2, 0x1a, 0x35, 0xb1, 0xf4, 0x1e, 0x42, 0x04, 0xe8, 0x1d, 0x2e, 0x4c, 0x46, 0x3c, 0x24, 0x11, 0x39, 0x34, 0x09, 0x8b, 0x45, 0x2d, 0xab, 0x4b, 0xe1, 0x59, 0x97, 0x20, 0xef, 0x68, 0x72, 0x83, 0x3d }; static const uint8_t ac_rsassa_example2_prime2[] = { 0x01, 0x0c, 0x38, 0x2d, 0xea, 0x5e, 0x7d, 0x79, 0x29, 0x8c, 0x64, 0x1f, 0xb2, 0xe4, 0xfa, 0x09, 0xf2, 0x4f, 0x6a, 0x7a, 0x45, 0x9a, 0x88, 0x2c, 0x87, 0xa8, 0x03, 0x49, 0x5f, 0x05, 0x6e, 0xcc, 0x3b, 0x43, 0xc5, 0x37, 0x73, 0x1f, 0x85, 0xef, 0xc8, 0xfb, 0x53, 0x87, 0xad, 0x67, 0x31, 0xa6, 0x43, 0x53, 0x32, 0x15, 0xde, 0xcc, 0x38, 0x7d, 0x96, 0x76, 0x12, 0x2c, 0x17, 0x0e, 0x91, 0xe0, 0xf9 }; static const uint8_t ac_rsassa_example2_exp1[] = { 0xd5, 0x78, 0xdc, 0xd5, 0x38, 0xf2, 0xfc, 0xdc, 0x30, 0x00, 0xb6, 0xc0, 0xf0, 0x49, 0xfe, 0xe2, 0xad, 0x90, 0x14, 0xfd, 0x24, 0xfb, 0x10, 0xb6, 0x82, 0x18, 0x42, 0xd6, 0x70, 0x03, 0xa5, 0x64, 0xcd, 0x8f, 0xf4, 0x2a, 0x2a, 0x56, 0x4c, 0xfd, 0x81, 0x9c, 0x3a, 0x84, 0xbf, 0x16, 0xc2, 0x47, 0x7e, 0x8e, 0x6e, 0x5b, 0x9e, 0xc4, 0xd4, 0x0e, 0xad, 0x50, 0x24, 0x87, 0xba, 0x50, 0x36, 0x2d, }; static const uint8_t ac_rsassa_example2_exp2[] = { 0x88, 0x88, 0xdc, 0x8e, 0xae, 0x94, 0xee, 0xa5, 0x80, 0xca, 0xc2, 0xfc, 0x1c, 0xe5, 0x4f, 0x44, 0xe2, 0xba, 0x50, 0x0d, 0xb8, 0x71, 0x53, 0x41, 0xa6, 0xfc, 0x2d, 0x50, 0x4a, 0x82, 0xb1, 0x42, 0x05, 0xe8, 0x91, 0xa6, 0x6f, 0xc8, 0x8d, 0x5c, 0x60, 0xdb, 0x8f, 0x78, 0x6c, 0xcc, 0x70, 0x57, 0x5b, 0x35, 0x66, 0xbe, 0xa8, 0x74, 0xa5, 0x31, 0x7f, 0x5f, 0x16, 0xc4, 0x91, 0xed, 0x1e, 0x79, }; static const uint8_t ac_rsassa_example2_coeff[] = { 0x17, 0xb0, 0xd6, 0x23, 0x36, 0x19, 0x1e, 0x63, 0xbc, 0xa1, 0x59, 0x93, 0x4d, 0x06, 0x16, 0xcb, 0x89, 0x97, 0x40, 0x9c, 0xbf, 0xca, 0x37, 0x05, 0x69, 0x5b, 0x14, 0xfb, 0x64, 0xa0, 0x81, 0xc1, 0xc9, 0xf5, 0x86, 0x19, 0x3e, 0x52, 0x3a, 0xbd, 0x0b, 0xeb, 0x8d, 0x72, 0x0c, 0xfe, 0x53, 0x7d, 0xfa, 0x1e, 0xde, 0xc4, 0xa6, 0x64, 0x37, 0xd2, 0x41, 0x19, 0x6b, 0x7a, 0x2c, 0xe5, 0x56, 0xc4, }; /* PKCS#1 v1.5 Signature Example 7.1 */ #define ac_rsassa_vect7_modulus ac_rsassa_example2_modulus #define ac_rsassa_vect7_pub_exp ac_rsassa_example2_pub_exp #define ac_rsassa_vect7_priv_exp ac_rsassa_example2_priv_exp #define ac_rsassa_vect7_prime1 ac_rsassa_example2_prime1 #define ac_rsassa_vect7_prime2 ac_rsassa_example2_prime2 #define ac_rsassa_vect7_exp1 ac_rsassa_example2_exp1 #define ac_rsassa_vect7_exp2 ac_rsassa_example2_exp2 #define ac_rsassa_vect7_coeff ac_rsassa_example2_coeff static const uint8_t ac_rsassa_vect7_ptx[] = { 0x35, 0x39, 0x99, 0x7a, 0xe7, 0x09, 0xfe, 0x32, 0xc1, 0x03, 0x6a, 0x13, 0x27, 0x57, 0xf2, 0xa1, 0x66, 0x7a, 0x91, 0xcc, 0x83, 0xbe, 0x73, 0x3a, 0xad, 0xa1, 0xbd, 0xd2, 0x17, 0x92, 0x4c, 0x9a, 0x2c, 0x9f, 0xed, 0x1f, 0xec, 0xf6, 0x1d, 0x1c, 0xf7, 0x9d, 0xae, 0x9a, 0x83, 0xf8, 0xae, 0x3f, 0x4d, 0x05, 0x1b, 0x34, 0xfb, 0xb5, 0x59, 0xcb, 0xfd, 0xa4, 0x92, 0xf1, 0xd8, 0x3b, 0x8b, 0xeb, 0xa0, 0x45, 0xd4, 0xae, 0x1c, 0x8f, 0xea, 0x15, 0xb7, 0x57, 0x7a, 0x1b, 0x8a, 0x3f, 0x55, 0xba, 0xc1, 0x72, 0x7e, 0xdc, 0xa7, 0xf8, 0xf5, 0x2c, 0xb4, 0xba, 0x61, 0xca, 0xf1, 0xfa, 0x8f, 0x8f, 0xd9, 0xaa, 0xc7, 0x79, 0x09, 0x5c, 0xa8, 0x4c, 0x79, 0x91, 0x52, 0x9f, 0xb8, 0x06, 0x99, 0xd0, 0xd4, 0x68, 0x8d, 0xfd, 0xb1, 0x42, 0xed, 0x61, 0xa9, 0x5b, 0x89, 0xce, 0x33, 0x06, 0xbf, 0x97, 0x80, 0xe1, 0xb9, 0x1b, 0x84, 0x8c, 0x8d, 0x20, 0x03, 0x97, 0x0e, 0x52, 0x70, 0x2a, 0x1f, 0x61, 0x2e, 0x2f, 0x40, 0x17, 0xcf, 0xe0, 0xa9, 0x1d, 0xb9, 0xe4, 0x6d, 0xb9, 0xdc }; static const uint8_t ac_rsassa_vect7_out[] = { 0x00, 0x08, 0x0f, 0x77, 0x0a, 0x2d, 0x1f, 0x6a, 0xbf, 0x5f, 0x22, 0x1f, 0x62, 0xe1, 0x66, 0xab, 0xd7, 0x9d, 0x06, 0xc7, 0xb9, 0xa8, 0x78, 0xd6, 0x1b, 0x80, 0xfc, 0x4d, 0x5b, 0xa2, 0x90, 0xb2, 0x3a, 0xba, 0xab, 0x51, 0x8f, 0x09, 0x44, 0x7e, 0x45, 0xae, 0xe6, 0xf3, 0xbd, 0x06, 0x10, 0x24, 0x44, 0x36, 0xa4, 0x73, 0x01, 0x60, 0xe6, 0xa6, 0x72, 0x11, 0x0c, 0x01, 0xae, 0xb5, 0x62, 0x4b, 0x71, 0x8d, 0xc7, 0xc0, 0x86, 0x1e, 0x58, 0x6b, 0xa8, 0xb6, 0x0a, 0x29, 0xd6, 0xa5, 0x75, 0x5c, 0xd2, 0xcc, 0x50, 0x85, 0x99, 0xc6, 0xe2, 0x8d, 0x73, 0x55, 0xb2, 0x7e, 0x40, 0xb7, 0x40, 0xc6, 0xfb, 0xbb, 0xb1, 0xa9, 0x18, 0x23, 0xb1, 0xc1, 0x24, 0x2b, 0xa6, 0x93, 0xd4, 0x52, 0x69, 0x51, 0x47, 0xdb, 0xb2, 0x3e, 0xa8, 0x9c, 0xbf, 0x11, 0xeb, 0x8b, 0x07, 0xec, 0x3a, 0x02, 0x7b, 0x0f, 0x17 }; /* * Test data from 186-2rsatestvectors.zip SigVet15_186-3.rsp with CRT * parameters created with: * http://sourceforge.net/projects/rsaconverter/ */ /* SigGen15_186-2.txt line 9 mod 1024 */ static const uint8_t ac_siggen15_186_2_modulus[] = { 0xc8, 0xa2, 0x06, 0x91, 0x82, 0x39, 0x4a, 0x2a, 0xb7, 0xc3, 0xf4, 0x19, 0x0c, 0x15, 0x58, 0x9c, 0x56, 0xa2, 0xd4, 0xbc, 0x42, 0xdc, 0xa6, 0x75, 0xb3, 0x4c, 0xc9, 0x50, 0xe2, 0x46, 0x63, 0x04, 0x84, 0x41, 0xe8, 0xaa, 0x59, 0x3b, 0x2b, 0xc5, 0x9e, 0x19, 0x8b, 0x8c, 0x25, 0x7e, 0x88, 0x21, 0x20, 0xc6, 0x23, 0x36, 0xe5, 0xcc, 0x74, 0x50, 0x12, 0xc7, 0xff, 0xb0, 0x63, 0xee, 0xbe, 0x53, 0xf3, 0xc6, 0x50, 0x4c, 0xba, 0x6c, 0xfe, 0x51, 0xba, 0xa3, 0xb6, 0xd1, 0x07, 0x4b, 0x2f, 0x39, 0x81, 0x71, 0xf4, 0xb1, 0x98, 0x2f, 0x4d, 0x65, 0xca, 0xf8, 0x82, 0xea, 0x4d, 0x56, 0xf3, 0x2a, 0xb5, 0x7d, 0x0c, 0x44, 0xe6, 0xad, 0x4e, 0x9c, 0xf5, 0x7a, 0x43, 0x39, 0xeb, 0x69, 0x62, 0x40, 0x6e, 0x35, 0x0c, 0x1b, 0x15, 0x39, 0x71, 0x83, 0xfb, 0xf1, 0xf0, 0x35, 0x3c, 0x9f, 0xc9, 0x91 }; static const uint8_t ac_siggen15_186_2_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_siggen15_186_2_priv_exp[] = { 0x5d, 0xfc, 0xb1, 0x11, 0x07, 0x2d, 0x29, 0x56, 0x5b, 0xa1, 0xdb, 0x3e, 0xc4, 0x8f, 0x57, 0x64, 0x5d, 0x9d, 0x88, 0x04, 0xed, 0x59, 0x8a, 0x4d, 0x47, 0x02, 0x68, 0xa8, 0x90, 0x67, 0xa2, 0xc9, 0x21, 0xdf, 0xf2, 0x4b, 0xa2, 0xe3, 0x7a, 0x3c, 0xe8, 0x34, 0x55, 0x50, 0x00, 0xdc, 0x86, 0x8e, 0xe6, 0x58, 0x8b, 0x74, 0x93, 0x30, 0x35, 0x28, 0xb1, 0xb3, 0xa9, 0x4f, 0x0b, 0x71, 0x73, 0x0c, 0xf1, 0xe8, 0x6f, 0xca, 0x5a, 0xee, 0xdc, 0x3a, 0xfa, 0x16, 0xf6, 0x5c, 0x01, 0x89, 0xd8, 0x10, 0xdd, 0xcd, 0x81, 0x04, 0x9e, 0xbb, 0xd0, 0x39, 0x18, 0x68, 0xc5, 0x0e, 0xde, 0xc9, 0x58, 0xb3, 0xa2, 0xaa, 0xef, 0xf6, 0xa5, 0x75, 0x89, 0x7e, 0x2f, 0x20, 0xa3, 0xab, 0x54, 0x55, 0xc1, 0xbf, 0xa5, 0x50, 0x10, 0xac, 0x51, 0xa7, 0x79, 0x9b, 0x1f, 0xf8, 0x48, 0x36, 0x44, 0xa3, 0xd4, 0x25 }; static const uint8_t ac_siggen15_186_2_prime1[] = { 0xF6, 0x6A, 0x24, 0x68, 0xB1, 0x48, 0x1A, 0x0D, 0x6B, 0x60, 0x49, 0x67, 0xF0, 0x58, 0x03, 0x89, 0xD6, 0x06, 0x1F, 0x03, 0x3A, 0x9B, 0x57, 0xB7, 0x4D, 0x1B, 0xEF, 0xE8, 0x10, 0x11, 0x98, 0x94, 0x5B, 0x80, 0x93, 0x04, 0x24, 0x1D, 0x02, 0xFD, 0x5F, 0x92, 0x1F, 0xE9, 0x59, 0xFB, 0xEC, 0xDB, 0x18, 0x00, 0x54, 0x86, 0x9A, 0xDB, 0x17, 0xD3, 0x21, 0xF9, 0xD5, 0xD5, 0x98, 0x12, 0x3E, 0x73 }; static const uint8_t ac_siggen15_186_2_prime2[] = { 0xD0, 0x6F, 0xFA, 0x56, 0x3B, 0xD0, 0xB8, 0xB9, 0x7F, 0x00, 0x72, 0xEA, 0x07, 0x51, 0x03, 0xEC, 0x1F, 0xF0, 0xB1, 0x7F, 0xD6, 0xBD, 0xAF, 0x94, 0xA7, 0x5A, 0xE6, 0x03, 0x59, 0x82, 0xF6, 0x80, 0x24, 0x9D, 0x77, 0xCC, 0x15, 0x96, 0xA6, 0x54, 0xF1, 0x4C, 0x51, 0x7A, 0x13, 0xB9, 0x5F, 0x1A, 0x8C, 0x5D, 0xE8, 0xCC, 0x84, 0xAD, 0x38, 0xD2, 0xE6, 0xAA, 0x4F, 0xCD, 0x54, 0x1A, 0x32, 0xEB }; static const uint8_t ac_siggen15_186_2_exp1[] = { 0xD4, 0xD4, 0xB6, 0x9F, 0xCA, 0x47, 0x89, 0x60, 0xFF, 0xD6, 0x49, 0x70, 0xC1, 0xD1, 0x73, 0x34, 0xF1, 0x2B, 0x96, 0x4B, 0xB6, 0xAA, 0x07, 0xA8, 0x25, 0xAC, 0xB4, 0x98, 0xCE, 0x90, 0x34, 0x26, 0x27, 0xA6, 0x34, 0xD5, 0x05, 0xD0, 0x1D, 0x0D, 0xF5, 0x27, 0x03, 0xF3, 0x0C, 0x2A, 0xA0, 0xD8, 0x57, 0xB1, 0xA9, 0x50, 0x1D, 0x9E, 0x90, 0xC4, 0x66, 0x7B, 0x20, 0x6B, 0x7D, 0x0E, 0x7C, 0xEB }; static const uint8_t ac_siggen15_186_2_exp2[] = { 0x28, 0x4F, 0xEF, 0xE7, 0xAB, 0xAB, 0xE3, 0x7E, 0x24, 0xBC, 0xEE, 0x7C, 0xAA, 0xAB, 0x95, 0x89, 0x9E, 0x67, 0xCB, 0xBC, 0x80, 0xC8, 0xB0, 0xE3, 0x9C, 0x36, 0x6D, 0x53, 0xEA, 0x84, 0xF4, 0xAD, 0xB5, 0xE7, 0x2A, 0x9B, 0x32, 0xF5, 0xAE, 0xF7, 0xB0, 0xAF, 0x64, 0xF6, 0xAA, 0x47, 0xE8, 0xC7, 0xD6, 0xAB, 0xF6, 0xF1, 0x4F, 0x1B, 0xBD, 0x68, 0xB4, 0xA9, 0xED, 0xC3, 0x35, 0x67, 0xD7, 0xBF }; static const uint8_t ac_siggen15_186_2_coeff[] = { 0xE3, 0xBD, 0x88, 0x1C, 0x5A, 0x8F, 0x4A, 0xFC, 0xA0, 0x8C, 0xBC, 0x04, 0x7C, 0xF0, 0xE3, 0x89, 0x7C, 0x85, 0x18, 0x9A, 0xF4, 0xF9, 0xA7, 0x00, 0x93, 0x2C, 0xF4, 0x9E, 0x72, 0xF6, 0x44, 0x04, 0x39, 0x0D, 0xA5, 0x04, 0x82, 0x79, 0xCE, 0x47, 0xF5, 0xAF, 0x58, 0x9B, 0x1B, 0xE9, 0xE4, 0x61, 0xBB, 0xD8, 0xCC, 0x07, 0xAB, 0x8B, 0xC6, 0x8B, 0xAF, 0x6C, 0xC9, 0x13, 0xB2, 0xE6, 0x26, 0x72 }; /* SigGen15_186-2.txt line 13 SHA-1*/ #define ac_rsassa_vect8_modulus ac_siggen15_186_2_modulus #define ac_rsassa_vect8_pub_exp ac_siggen15_186_2_pub_exp #define ac_rsassa_vect8_priv_exp ac_siggen15_186_2_priv_exp #define ac_rsassa_vect8_prime1 ac_siggen15_186_2_prime1 #define ac_rsassa_vect8_prime2 ac_siggen15_186_2_prime2 #define ac_rsassa_vect8_exp1 ac_siggen15_186_2_exp1 #define ac_rsassa_vect8_exp2 ac_siggen15_186_2_exp2 #define ac_rsassa_vect8_coeff ac_siggen15_186_2_coeff static const uint8_t ac_rsassa_vect8_ptx[] = { 0xe8, 0x31, 0x27, 0x42, 0xae, 0x23, 0xc4, 0x56, 0xef, 0x28, 0xa2, 0x31, 0x42, 0xc4, 0x49, 0x08, 0x95, 0x83, 0x27, 0x65, 0xda, 0xdc, 0xe0, 0x2a, 0xfe, 0x5b, 0xe5, 0xd3, 0x1b, 0x00, 0x48, 0xfb, 0xee, 0xe2, 0xcf, 0x21, 0x8b, 0x17, 0x47, 0xad, 0x4f, 0xd8, 0x1a, 0x2e, 0x17, 0xe1, 0x24, 0xe6, 0xaf, 0x17, 0xc3, 0x88, 0x8e, 0x6d, 0x2d, 0x40, 0xc0, 0x08, 0x07, 0xf4, 0x23, 0xa2, 0x33, 0xca, 0xd6, 0x2c, 0xe9, 0xea, 0xef, 0xb7, 0x09, 0x85, 0x6c, 0x94, 0xaf, 0x16, 0x6d, 0xba, 0x08, 0xe7, 0xa0, 0x69, 0x65, 0xd7, 0xfc, 0x0d, 0x8e, 0x5c, 0xb2, 0x65, 0x59, 0xc4, 0x60, 0xe4, 0x7b, 0xc0, 0x88, 0x58, 0x9d, 0x22, 0x42, 0xc9, 0xb3, 0xe6, 0x2d, 0xa4, 0x89, 0x6f, 0xab, 0x19, 0x9e, 0x14, 0x4e, 0xc1, 0x36, 0xdb, 0x8d, 0x84, 0xab, 0x84, 0xbc, 0xba, 0x04, 0xca, 0x3b, 0x90, 0xc8, 0xe5 }; static const uint8_t ac_rsassa_vect8_out[] = { 0x28, 0x92, 0x8e, 0x19, 0xeb, 0x86, 0xf9, 0xc0, 0x00, 0x70, 0xa5, 0x9e, 0xdf, 0x6b, 0xf8, 0x43, 0x3a, 0x45, 0xdf, 0x49, 0x5c, 0xd1, 0xc7, 0x36, 0x13, 0xc2, 0x12, 0x98, 0x40, 0xf4, 0x8c, 0x4a, 0x2c, 0x24, 0xf1, 0x1d, 0xf7, 0x9b, 0xc5, 0xc0, 0x78, 0x2b, 0xce, 0xdd, 0xe9, 0x7d, 0xbb, 0xb2, 0xac, 0xc6, 0xe5, 0x12, 0xd1, 0x9f, 0x08, 0x50, 0x27, 0xcd, 0x57, 0x50, 0x38, 0x45, 0x3d, 0x04, 0x90, 0x54, 0x13, 0xe9, 0x47, 0xe6, 0xe1, 0xdd, 0xdb, 0xeb, 0x35, 0x35, 0xcd, 0xb3, 0xd8, 0x97, 0x1f, 0xe0, 0x20, 0x05, 0x06, 0x94, 0x10, 0x56, 0xf2, 0x12, 0x43, 0x50, 0x3c, 0x83, 0xea, 0xdd, 0xe0, 0x53, 0xed, 0x86, 0x6c, 0x0e, 0x02, 0x50, 0xbe, 0xdd, 0xd9, 0x27, 0xa0, 0x82, 0x12, 0xaa, 0x8a, 0xc0, 0xef, 0xd6, 0x16, 0x31, 0xef, 0x89, 0xd8, 0xd0, 0x49, 0xef, 0xb3, 0x6b, 0xb3, 0x5f }; /* SigGen15_186-2.txt line 54 SHA-224*/ #define ac_rsassa_vect16_modulus ac_siggen15_186_2_modulus #define ac_rsassa_vect16_pub_exp ac_siggen15_186_2_pub_exp #define ac_rsassa_vect16_priv_exp ac_siggen15_186_2_priv_exp #define ac_rsassa_vect16_prime1 ac_siggen15_186_2_prime1 #define ac_rsassa_vect16_prime2 ac_siggen15_186_2_prime2 #define ac_rsassa_vect16_exp1 ac_siggen15_186_2_exp1 #define ac_rsassa_vect16_exp2 ac_siggen15_186_2_exp2 #define ac_rsassa_vect16_coeff ac_siggen15_186_2_coeff static const uint8_t ac_rsassa_vect16_ptx[] = { 0xe5, 0x67, 0xa3, 0x9a, 0xe4, 0xe5, 0xef, 0x9b, 0x68, 0x01, 0xea, 0x05, 0x61, 0xb7, 0x2a, 0x5d, 0x4b, 0x5f, 0x38, 0x5f, 0x05, 0x32, 0xfc, 0x9f, 0xe1, 0x0a, 0x75, 0x70, 0xf8, 0x69, 0xae, 0x05, 0xc0, 0xbd, 0xed, 0xd6, 0xe0, 0xe2, 0x2d, 0x45, 0x42, 0xe9, 0xce, 0x82, 0x6a, 0x18, 0x8c, 0xac, 0x07, 0x31, 0xae, 0x39, 0xc8, 0xf8, 0x7f, 0x97, 0x71, 0xef, 0x02, 0x13, 0x2e, 0x64, 0xe2, 0xfb, 0x27, 0xad, 0xa8, 0xff, 0x54, 0xb3, 0x30, 0xdd, 0x93, 0xad, 0x5e, 0x3e, 0xf8, 0x2e, 0x0d, 0xda, 0x64, 0x62, 0x48, 0xe3, 0x59, 0x94, 0xbd, 0xa1, 0x0c, 0xf4, 0x6e, 0x5a, 0xbc, 0x98, 0xaa, 0x74, 0x43, 0xc0, 0x3c, 0xdd, 0xeb, 0x5e, 0xe2, 0xab, 0x82, 0xd6, 0x01, 0x00, 0xb1, 0x02, 0x96, 0x31, 0x89, 0x79, 0x70, 0x27, 0x5f, 0x11, 0x9d, 0x05, 0xda, 0xa2, 0x22, 0x0a, 0x4a, 0x0d, 0xef, 0xba }; static const uint8_t ac_rsassa_vect16_out[] = { 0x5a, 0xa5, 0x03, 0x33, 0x81, 0xbd, 0xd0, 0xac, 0xce, 0x33, 0x2d, 0xd3, 0x14, 0xda, 0xf0, 0x08, 0xac, 0xaa, 0x9e, 0x83, 0x5f, 0x83, 0x29, 0x79, 0x89, 0x1d, 0x1b, 0xda, 0x2b, 0x55, 0xd5, 0xea, 0xe3, 0x5c, 0x47, 0x9c, 0x06, 0xca, 0xc5, 0xbf, 0x33, 0xf4, 0x32, 0xc8, 0xc0, 0xa5, 0x54, 0x9d, 0x1d, 0x1b, 0x29, 0xc5, 0xe2, 0x58, 0x90, 0x24, 0xd2, 0x78, 0x00, 0xa0, 0xc2, 0x35, 0xa6, 0x15, 0x32, 0xc2, 0x03, 0xcb, 0xc4, 0x06, 0xac, 0x6e, 0xcf, 0x63, 0xf5, 0x2a, 0xe7, 0x71, 0xb9, 0x7c, 0x08, 0xe4, 0xb1, 0x08, 0xec, 0x91, 0x69, 0x00, 0xe5, 0xa1, 0x1b, 0x1d, 0x48, 0xcc, 0xa8, 0x6c, 0xa5, 0xa5, 0xa7, 0x99, 0xed, 0x32, 0xe9, 0x9c, 0x81, 0x5c, 0xef, 0x04, 0xcf, 0x8e, 0xb5, 0x52, 0x23, 0xbf, 0xd4, 0xd9, 0xc3, 0x44, 0x92, 0x64, 0xb6, 0x00, 0x61, 0xbc, 0x36, 0x84, 0xbc, 0x82 }; /* SigGen15_186-2.txt line 93 SHA-256 */ #define ac_rsassa_vect9_modulus ac_siggen15_186_2_modulus #define ac_rsassa_vect9_pub_exp ac_siggen15_186_2_pub_exp #define ac_rsassa_vect9_priv_exp ac_siggen15_186_2_priv_exp #define ac_rsassa_vect9_prime1 ac_siggen15_186_2_prime1 #define ac_rsassa_vect9_prime2 ac_siggen15_186_2_prime2 #define ac_rsassa_vect9_exp1 ac_siggen15_186_2_exp1 #define ac_rsassa_vect9_exp2 ac_siggen15_186_2_exp2 #define ac_rsassa_vect9_coeff ac_siggen15_186_2_coeff static const uint8_t ac_rsassa_vect9_ptx[] = { 0xe5, 0x67, 0xa3, 0x9a, 0xe4, 0xe5, 0xef, 0x9b, 0x68, 0x01, 0xea, 0x05, 0x61, 0xb7, 0x2a, 0x5d, 0x4b, 0x5f, 0x38, 0x5f, 0x05, 0x32, 0xfc, 0x9f, 0xe1, 0x0a, 0x75, 0x70, 0xf8, 0x69, 0xae, 0x05, 0xc0, 0xbd, 0xed, 0xd6, 0xe0, 0xe2, 0x2d, 0x45, 0x42, 0xe9, 0xce, 0x82, 0x6a, 0x18, 0x8c, 0xac, 0x07, 0x31, 0xae, 0x39, 0xc8, 0xf8, 0x7f, 0x97, 0x71, 0xef, 0x02, 0x13, 0x2e, 0x64, 0xe2, 0xfb, 0x27, 0xad, 0xa8, 0xff, 0x54, 0xb3, 0x30, 0xdd, 0x93, 0xad, 0x5e, 0x3e, 0xf8, 0x2e, 0x0d, 0xda, 0x64, 0x62, 0x48, 0xe3, 0x59, 0x94, 0xbd, 0xa1, 0x0c, 0xf4, 0x6e, 0x5a, 0xbc, 0x98, 0xaa, 0x74, 0x43, 0xc0, 0x3c, 0xdd, 0xeb, 0x5e, 0xe2, 0xab, 0x82, 0xd6, 0x01, 0x00, 0xb1, 0x02, 0x96, 0x31, 0x89, 0x79, 0x70, 0x27, 0x5f, 0x11, 0x9d, 0x05, 0xda, 0xa2, 0x22, 0x0a, 0x4a, 0x0d, 0xef, 0xba }; static const uint8_t ac_rsassa_vect9_out[] = { 0x0e, 0x7c, 0xdd, 0x12, 0x1e, 0x40, 0x32, 0x3c, 0xa6, 0x11, 0x5d, 0x1e, 0xc6, 0xd1, 0xf9, 0x56, 0x17, 0x38, 0x45, 0x5f, 0x0e, 0x9e, 0x1c, 0xd8, 0x58, 0xe8, 0xb5, 0x66, 0xae, 0x2d, 0xa5, 0xe8, 0xee, 0x63, 0xd8, 0xf1, 0x5c, 0x3c, 0xdd, 0x88, 0x02, 0x7e, 0x13, 0x40, 0x6d, 0xb6, 0x09, 0x36, 0x9c, 0x88, 0xca, 0x99, 0xb3, 0x4f, 0xa1, 0x56, 0xc7, 0xee, 0x62, 0xbc, 0x5a, 0x39, 0x23, 0xbb, 0x5a, 0x1e, 0xda, 0xbd, 0x45, 0xc1, 0xa4, 0x22, 0xaa, 0xfc, 0xbb, 0x47, 0xe0, 0x94, 0x7f, 0x35, 0xcf, 0xef, 0x87, 0x97, 0x0b, 0x4b, 0x71, 0x31, 0x62, 0xb2, 0x19, 0x16, 0xca, 0xfb, 0x8c, 0x86, 0x4a, 0x3e, 0x5b, 0x9f, 0xfc, 0x98, 0x94, 0x01, 0xd4, 0xea, 0xe9, 0x92, 0x31, 0x2a, 0x32, 0xc5, 0xbc, 0x88, 0xab, 0xbb, 0x45, 0xf9, 0x9a, 0xc8, 0x85, 0xb5, 0x4d, 0x6b, 0x8e, 0x61, 0xb6, 0xec }; /* SigGen15_186-2.txt line 93 SHA-256 without ASN.1 */ #define ac_rsassa_vect20_modulus ac_siggen15_186_2_modulus #define ac_rsassa_vect20_pub_exp ac_siggen15_186_2_pub_exp #define ac_rsassa_vect20_priv_exp ac_siggen15_186_2_priv_exp #define ac_rsassa_vect20_prime1 ac_siggen15_186_2_prime1 #define ac_rsassa_vect20_prime2 ac_siggen15_186_2_prime2 #define ac_rsassa_vect20_exp1 ac_siggen15_186_2_exp1 #define ac_rsassa_vect20_exp2 ac_siggen15_186_2_exp2 #define ac_rsassa_vect20_coeff ac_siggen15_186_2_coeff static const uint8_t ac_rsassa_vect20_ptx[] = { 0xe5, 0x67, 0xa3, 0x9a, 0xe4, 0xe5, 0xef, 0x9b, 0x68, 0x01, 0xea, 0x05, 0x61, 0xb7, 0x2a, 0x5d, 0x4b, 0x5f, 0x38, 0x5f, 0x05, 0x32, 0xfc, 0x9f, 0xe1, 0x0a, 0x75, 0x70, 0xf8, 0x69, 0xae, 0x05, 0xc0, 0xbd, 0xed, 0xd6, 0xe0, 0xe2, 0x2d, 0x45, 0x42, 0xe9, 0xce, 0x82, 0x6a, 0x18, 0x8c, 0xac, 0x07, 0x31, 0xae, 0x39, 0xc8, 0xf8, 0x7f, 0x97, 0x71, 0xef, 0x02, 0x13, 0x2e, 0x64, 0xe2, 0xfb, 0x27, 0xad, 0xa8, 0xff, 0x54, 0xb3, 0x30, 0xdd, 0x93, 0xad, 0x5e, 0x3e, 0xf8, 0x2e, 0x0d, 0xda, 0x64, 0x62, 0x48, 0xe3, 0x59, 0x94, 0xbd, 0xa1, 0x0c, 0xf4, 0x6e, 0x5a, 0xbc, 0x98, 0xaa, 0x74, 0x43, 0xc0, 0x3c, 0xdd, 0xeb, 0x5e, 0xe2, 0xab, 0x82, 0xd6, 0x01, 0x00, 0xb1, 0x02, 0x96, 0x31, 0x89, 0x79, 0x70, 0x27, 0x5f, 0x11, 0x9d, 0x05, 0xda, 0xa2, 0x22, 0x0a, 0x4a, 0x0d, 0xef, 0xba }; static const uint8_t ac_rsassa_vect20_out[] = { 0xbe, 0x03, 0x14, 0xbb, 0x4e, 0x73, 0xae, 0xa0, 0x8c, 0x3b, 0xd3, 0x47, 0xc5, 0x71, 0x81, 0x6a, 0xb6, 0x0d, 0xc8, 0xd4, 0xbd, 0x6d, 0x8e, 0x5c, 0xa3, 0x59, 0xd7, 0x31, 0xb3, 0x44, 0xa8, 0x17, 0x09, 0xc5, 0x00, 0x96, 0x1a, 0xaa, 0x8b, 0xb2, 0xb4, 0xdc, 0x63, 0xda, 0xa2, 0x66, 0xe1, 0xf6, 0xbb, 0x73, 0xb3, 0x03, 0x6d, 0x9a, 0x2d, 0x65, 0x9e, 0x10, 0x9c, 0x0c, 0x46, 0xa3, 0xf4, 0xd3, 0x91, 0x23, 0x6d, 0x40, 0xb5, 0x0d, 0xd3, 0x31, 0xea, 0xd3, 0x0d, 0x22, 0xf5, 0xfc, 0xfa, 0x8d, 0x67, 0x08, 0x65, 0x76, 0xd4, 0x41, 0x24, 0xd6, 0x74, 0x2b, 0xfe, 0x44, 0xe5, 0x88, 0xde, 0x28, 0xca, 0x2f, 0xb8, 0xd1, 0xc8, 0xb4, 0x65, 0xb3, 0x8a, 0x4e, 0x1d, 0xdd, 0x43, 0x80, 0x68, 0x72, 0xf7, 0x52, 0x46, 0x56, 0xa0, 0x9e, 0x1d, 0x76, 0x89, 0xee, 0x20, 0x71, 0x66, 0xd1, 0x19, 0xb7 }; /* SigGen15_186-2.txt line 133 SHA-384*/ #define ac_rsassa_vect10_modulus ac_siggen15_186_2_modulus #define ac_rsassa_vect10_pub_exp ac_siggen15_186_2_pub_exp #define ac_rsassa_vect10_priv_exp ac_siggen15_186_2_priv_exp #define ac_rsassa_vect10_prime1 ac_siggen15_186_2_prime1 #define ac_rsassa_vect10_prime2 ac_siggen15_186_2_prime2 #define ac_rsassa_vect10_exp1 ac_siggen15_186_2_exp1 #define ac_rsassa_vect10_exp2 ac_siggen15_186_2_exp2 #define ac_rsassa_vect10_coeff ac_siggen15_186_2_coeff static const uint8_t ac_rsassa_vect10_ptx[] = { 0xe5, 0x67, 0xa3, 0x9a, 0xe4, 0xe5, 0xef, 0x9b, 0x68, 0x01, 0xea, 0x05, 0x61, 0xb7, 0x2a, 0x5d, 0x4b, 0x5f, 0x38, 0x5f, 0x05, 0x32, 0xfc, 0x9f, 0xe1, 0x0a, 0x75, 0x70, 0xf8, 0x69, 0xae, 0x05, 0xc0, 0xbd, 0xed, 0xd6, 0xe0, 0xe2, 0x2d, 0x45, 0x42, 0xe9, 0xce, 0x82, 0x6a, 0x18, 0x8c, 0xac, 0x07, 0x31, 0xae, 0x39, 0xc8, 0xf8, 0x7f, 0x97, 0x71, 0xef, 0x02, 0x13, 0x2e, 0x64, 0xe2, 0xfb, 0x27, 0xad, 0xa8, 0xff, 0x54, 0xb3, 0x30, 0xdd, 0x93, 0xad, 0x5e, 0x3e, 0xf8, 0x2e, 0x0d, 0xda, 0x64, 0x62, 0x48, 0xe3, 0x59, 0x94, 0xbd, 0xa1, 0x0c, 0xf4, 0x6e, 0x5a, 0xbc, 0x98, 0xaa, 0x74, 0x43, 0xc0, 0x3c, 0xdd, 0xeb, 0x5e, 0xe2, 0xab, 0x82, 0xd6, 0x01, 0x00, 0xb1, 0x02, 0x96, 0x31, 0x89, 0x79, 0x70, 0x27, 0x5f, 0x11, 0x9d, 0x05, 0xda, 0xa2, 0x22, 0x0a, 0x4a, 0x0d, 0xef, 0xba }; static const uint8_t ac_rsassa_vect10_out[] = { 0x16, 0x89, 0xa8, 0x52, 0x39, 0x19, 0xac, 0x77, 0xcc, 0x99, 0x7e, 0xbc, 0x59, 0xcb, 0x90, 0x88, 0x72, 0xd8, 0x8b, 0x28, 0x55, 0xa3, 0x09, 0xea, 0xd2, 0x77, 0x9b, 0x88, 0x8b, 0x22, 0xb4, 0x23, 0x2d, 0xa9, 0xb9, 0x3b, 0xb1, 0x9b, 0x32, 0xc1, 0xdb, 0x77, 0xad, 0x73, 0x8c, 0x6e, 0x43, 0x36, 0x1e, 0x9e, 0xb6, 0xb1, 0xa3, 0x7c, 0x49, 0xa8, 0xf3, 0xc7, 0xc7, 0xae, 0x7e, 0x78, 0x4d, 0x19, 0xa6, 0x21, 0x38, 0x74, 0x12, 0x93, 0xe4, 0x9b, 0x18, 0x31, 0xc0, 0xc3, 0x61, 0x7e, 0xb4, 0x3c, 0x56, 0x70, 0x6d, 0x83, 0x31, 0x49, 0x53, 0x47, 0x06, 0x36, 0x44, 0x10, 0x86, 0x41, 0x9a, 0xb9, 0xe6, 0xfd, 0x1e, 0xc4, 0xf9, 0xd5, 0xcc, 0x65, 0x44, 0x81, 0x5d, 0x1e, 0x02, 0xed, 0x96, 0xa3, 0xae, 0x64, 0xc6, 0x99, 0x8b, 0x2c, 0xf2, 0x38, 0xe7, 0x9a, 0x12, 0x16, 0x43, 0x52, 0xd1, 0x2a }; /* SigGen15_186-2.txt line 173 SHA-512*/ #define ac_rsassa_vect11_modulus ac_siggen15_186_2_modulus #define ac_rsassa_vect11_pub_exp ac_siggen15_186_2_pub_exp #define ac_rsassa_vect11_priv_exp ac_siggen15_186_2_priv_exp #define ac_rsassa_vect11_prime1 ac_siggen15_186_2_prime1 #define ac_rsassa_vect11_prime2 ac_siggen15_186_2_prime2 #define ac_rsassa_vect11_exp1 ac_siggen15_186_2_exp1 #define ac_rsassa_vect11_exp2 ac_siggen15_186_2_exp2 #define ac_rsassa_vect11_coeff ac_siggen15_186_2_coeff static const uint8_t ac_rsassa_vect11_ptx[] = { 0xe5, 0x67, 0xa3, 0x9a, 0xe4, 0xe5, 0xef, 0x9b, 0x68, 0x01, 0xea, 0x05, 0x61, 0xb7, 0x2a, 0x5d, 0x4b, 0x5f, 0x38, 0x5f, 0x05, 0x32, 0xfc, 0x9f, 0xe1, 0x0a, 0x75, 0x70, 0xf8, 0x69, 0xae, 0x05, 0xc0, 0xbd, 0xed, 0xd6, 0xe0, 0xe2, 0x2d, 0x45, 0x42, 0xe9, 0xce, 0x82, 0x6a, 0x18, 0x8c, 0xac, 0x07, 0x31, 0xae, 0x39, 0xc8, 0xf8, 0x7f, 0x97, 0x71, 0xef, 0x02, 0x13, 0x2e, 0x64, 0xe2, 0xfb, 0x27, 0xad, 0xa8, 0xff, 0x54, 0xb3, 0x30, 0xdd, 0x93, 0xad, 0x5e, 0x3e, 0xf8, 0x2e, 0x0d, 0xda, 0x64, 0x62, 0x48, 0xe3, 0x59, 0x94, 0xbd, 0xa1, 0x0c, 0xf4, 0x6e, 0x5a, 0xbc, 0x98, 0xaa, 0x74, 0x43, 0xc0, 0x3c, 0xdd, 0xeb, 0x5e, 0xe2, 0xab, 0x82, 0xd6, 0x01, 0x00, 0xb1, 0x02, 0x96, 0x31, 0x89, 0x79, 0x70, 0x27, 0x5f, 0x11, 0x9d, 0x05, 0xda, 0xa2, 0x22, 0x0a, 0x4a, 0x0d, 0xef, 0xba }; static const uint8_t ac_rsassa_vect11_out[] = { 0xbf, 0x3f, 0xf2, 0xc6, 0x96, 0x75, 0xf1, 0xb8, 0xed, 0x42, 0x10, 0x21, 0x80, 0x1f, 0xb4, 0xce, 0x29, 0xa7, 0x57, 0xf7, 0xf8, 0x86, 0x9c, 0xe4, 0x36, 0xd0, 0xd7, 0x5a, 0xb7, 0x49, 0xef, 0xc8, 0xb9, 0x03, 0xd9, 0xf9, 0xcb, 0x21, 0x46, 0x86, 0x14, 0x7f, 0x12, 0xf3, 0x33, 0x5f, 0xa9, 0x36, 0x68, 0x9c, 0x19, 0x2f, 0x31, 0x0a, 0xe3, 0xc5, 0xd7, 0x54, 0x93, 0xf4, 0x4b, 0x24, 0xbc, 0x1c, 0xd3, 0x50, 0x15, 0x84, 0xaa, 0xa5, 0x00, 0x4b, 0x65, 0xa8, 0x71, 0x6d, 0x1e, 0xda, 0x72, 0x40, 0xad, 0x8a, 0x52, 0x9d, 0x5a, 0x0c, 0xf1, 0x69, 0xf4, 0x05, 0x4b, 0x45, 0x0e, 0x07, 0x6e, 0xe0, 0xd4, 0x1a, 0x00, 0x11, 0xc5, 0x57, 0xaa, 0x69, 0xa8, 0x4a, 0x81, 0x04, 0xc9, 0x09, 0x20, 0x1d, 0x60, 0xfe, 0x39, 0xc7, 0x9e, 0x68, 0x43, 0x47, 0xef, 0x4d, 0x14, 0x4e, 0xa1, 0x8f, 0x7a, 0x4e }; /* SigGenPSS_186-2.txt line 9 mod 1024 */ static const uint8_t ac_siggenpss_186_2_modulus[] = { 0xbc, 0xb4, 0x7b, 0x2e, 0x0d, 0xaf, 0xcb, 0xa8, 0x1f, 0xf2, 0xa2, 0xb5, 0xcb, 0x11, 0x5c, 0xa7, 0xe7, 0x57, 0x18, 0x4c, 0x9d, 0x72, 0xbc, 0xdc, 0xda, 0x70, 0x7a, 0x14, 0x6b, 0x3b, 0x4e, 0x29, 0x98, 0x9d, 0xdc, 0x66, 0x0b, 0xd6, 0x94, 0x86, 0x5b, 0x93, 0x2b, 0x71, 0xca, 0x24, 0xa3, 0x35, 0xcf, 0x4d, 0x33, 0x9c, 0x71, 0x91, 0x83, 0xe6, 0x22, 0x2e, 0x4c, 0x9e, 0xa6, 0x87, 0x5a, 0xcd, 0x52, 0x8a, 0x49, 0xba, 0x21, 0x86, 0x3f, 0xe0, 0x81, 0x47, 0xc3, 0xa4, 0x7e, 0x41, 0x99, 0x0b, 0x51, 0xa0, 0x3f, 0x77, 0xd2, 0x21, 0x37, 0xf8, 0xd7, 0x4c, 0x43, 0xa5, 0xa4, 0x5f, 0x4e, 0x9e, 0x18, 0xa2, 0xd1, 0x5d, 0xb0, 0x51, 0xdc, 0x89, 0x38, 0x5d, 0xb9, 0xcf, 0x83, 0x74, 0xb6, 0x3a, 0x8c, 0xc8, 0x81, 0x13, 0x71, 0x0e, 0x6d, 0x81, 0x79, 0x07, 0x5b, 0x7d, 0xc7, 0x9e, 0xe7, 0x6b }; static const uint8_t ac_siggenpss_186_2_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_siggenpss_186_2_priv_exp[] = { 0x38, 0x3a, 0x6f, 0x19, 0xe1, 0xea, 0x27, 0xfd, 0x08, 0xc7, 0xfb, 0xc3, 0xbf, 0xa6, 0x84, 0xbd, 0x63, 0x29, 0x88, 0x8c, 0x0b, 0xbe, 0x4c, 0x98, 0x62, 0x5e, 0x71, 0x81, 0xf4, 0x11, 0xcf, 0xd0, 0x85, 0x31, 0x44, 0xa3, 0x03, 0x94, 0x04, 0xdd, 0xa4, 0x1b, 0xce, 0x2e, 0x31, 0xd5, 0x88, 0xec, 0x57, 0xc0, 0xe1, 0x48, 0x14, 0x6f, 0x0f, 0xa6, 0x5b, 0x39, 0x00, 0x8b, 0xa5, 0x83, 0x5f, 0x82, 0x9b, 0xa3, 0x5a, 0xe2, 0xf1, 0x55, 0xd6, 0x1b, 0x8a, 0x12, 0x58, 0x1b, 0x99, 0xc9, 0x27, 0xfd, 0x2f, 0x22, 0x25, 0x2c, 0x5e, 0x73, 0xcb, 0xa4, 0xa6, 0x10, 0xdb, 0x39, 0x73, 0xe0, 0x19, 0xee, 0x0f, 0x95, 0x13, 0x0d, 0x43, 0x19, 0xed, 0x41, 0x34, 0x32, 0xf2, 0xe5, 0xe2, 0x0d, 0x52, 0x15, 0xcd, 0xd2, 0x7c, 0x21, 0x64, 0x20, 0x6b, 0x3f, 0x80, 0xed, 0xee, 0x51, 0x93, 0x8a, 0x25, 0xc1 }; static const uint8_t ac_siggenpss_186_2_prime1[] = { 0xE5, 0x56, 0x3B, 0x14, 0x5D, 0xB6, 0xFF, 0x5A, 0x16, 0x28, 0x0D, 0x3E, 0x80, 0xEF, 0xF0, 0x2F, 0x18, 0x1D, 0xBD, 0x03, 0x32, 0x4E, 0xF2, 0x47, 0xF5, 0x96, 0xA4, 0xD4, 0xA7, 0xB8, 0xDA, 0xA3, 0x2B, 0x99, 0x34, 0xE3, 0xC7, 0xF4, 0xDC, 0xF6, 0xA3, 0x10, 0x54, 0x62, 0xDE, 0xC6, 0x38, 0x39, 0x63, 0x86, 0x18, 0x41, 0x8B, 0x51, 0xDB, 0x02, 0x69, 0x3F, 0xAB, 0xB4, 0xE6, 0x83, 0x87, 0x25 }; static const uint8_t ac_siggenpss_186_2_prime2[] = { 0xD2, 0xA4, 0xEC, 0x0F, 0xA2, 0x22, 0x6C, 0xDE, 0x82, 0xDA, 0x77, 0x65, 0x3B, 0x07, 0x2C, 0xD0, 0x98, 0x53, 0x5D, 0x3E, 0x90, 0xED, 0x4D, 0x72, 0x24, 0xDC, 0xB8, 0xCB, 0x8B, 0x93, 0x14, 0x76, 0x8D, 0xC5, 0x17, 0xE2, 0x2D, 0x7C, 0x8F, 0xA1, 0x3F, 0x25, 0x3D, 0xAA, 0x74, 0x65, 0xA7, 0x99, 0x56, 0x09, 0x8A, 0xA4, 0xCC, 0x3A, 0x6E, 0x35, 0xE8, 0xB1, 0xFC, 0xC4, 0xF9, 0x7E, 0x77, 0x4F }; static const uint8_t ac_siggenpss_186_2_exp1[] = { 0x1F, 0x6A, 0xCA, 0xB9, 0x25, 0x85, 0x76, 0x41, 0xCF, 0x1B, 0x39, 0x85, 0x40, 0x80, 0x9E, 0x34, 0xB5, 0x67, 0x0D, 0x87, 0xAC, 0x92, 0xA8, 0x1A, 0x37, 0x88, 0xA5, 0x98, 0x04, 0x4A, 0x0C, 0x99, 0xA1, 0xD5, 0x61, 0x2B, 0x7B, 0x2F, 0x0E, 0x3E, 0x33, 0x64, 0x7F, 0x4A, 0xF4, 0x1D, 0xCF, 0x81, 0xFD, 0x22, 0x57, 0x9C, 0x53, 0x0B, 0xA9, 0xA7, 0x10, 0xE8, 0x0A, 0x0B, 0xC4, 0x30, 0x6C, 0x89 }; static const uint8_t ac_siggenpss_186_2_exp2[] = { 0x59, 0xF2, 0x84, 0xBE, 0xD4, 0x3C, 0x21, 0x03, 0x0F, 0x1B, 0x5C, 0xDA, 0x84, 0x4F, 0x37, 0x0A, 0xC7, 0xD0, 0xE9, 0x43, 0x3B, 0x3D, 0xA9, 0xD1, 0x70, 0xFE, 0x33, 0x86, 0xEF, 0x4D, 0xD9, 0xF2, 0x19, 0xED, 0xAC, 0x9A, 0x2F, 0x54, 0x3E, 0x3C, 0xDB, 0xAA, 0xFA, 0x5F, 0x1C, 0x1F, 0x00, 0x67, 0x50, 0xBE, 0xF8, 0x4E, 0x10, 0xCB, 0x6E, 0x9E, 0x64, 0x84, 0x04, 0x6C, 0xD4, 0x20, 0xF5, 0xAF }; static const uint8_t ac_siggenpss_186_2_coeff[] = { 0x83, 0x5F, 0xC1, 0xB6, 0x52, 0x1C, 0x83, 0xE7, 0x6F, 0x80, 0x64, 0xFF, 0xF8, 0x38, 0x80, 0xE1, 0xC9, 0x8F, 0x81, 0x13, 0x1E, 0xE8, 0x6E, 0x5D, 0xF8, 0x57, 0x6A, 0xDA, 0x7D, 0x75, 0xC2, 0x6F, 0x8D, 0xB8, 0xBA, 0x8B, 0x46, 0xF4, 0x6C, 0x69, 0xA5, 0x9D, 0xC5, 0xF2, 0x11, 0x8A, 0x9A, 0x90, 0x8E, 0xC0, 0x8F, 0x45, 0xB0, 0x50, 0x4D, 0x2A, 0x42, 0x86, 0x49, 0x5E, 0x2A, 0x1B, 0x78, 0x2E }; /* Salt: 6f2841166a64471d4f0b8ed0dbb7db32161da13b */ #define ac_siggenpss_186_2_salt_len 20 /* SigGen15_186-2.txt line 173 SHA-1 */ #define ac_rsassa_vect12_modulus ac_siggenpss_186_2_modulus #define ac_rsassa_vect12_pub_exp ac_siggenpss_186_2_pub_exp #define ac_rsassa_vect12_priv_exp ac_siggenpss_186_2_priv_exp #define ac_rsassa_vect12_prime1 ac_siggenpss_186_2_prime1 #define ac_rsassa_vect12_prime2 ac_siggenpss_186_2_prime2 #define ac_rsassa_vect12_exp1 ac_siggenpss_186_2_exp1 #define ac_rsassa_vect12_exp2 ac_siggenpss_186_2_exp2 #define ac_rsassa_vect12_coeff ac_siggenpss_186_2_coeff #define ac_rsassa_vect12_salt_len ac_siggenpss_186_2_salt_len static const uint8_t ac_rsassa_vect12_ptx[] = { 0x12, 0x48, 0xf6, 0x2a, 0x43, 0x89, 0xf4, 0x2f, 0x7b, 0x4b, 0xb1, 0x31, 0x05, 0x3d, 0x6c, 0x88, 0xa9, 0x94, 0xdb, 0x20, 0x75, 0xb9, 0x12, 0xcc, 0xbe, 0x3e, 0xa7, 0xdc, 0x61, 0x17, 0x14, 0xf1, 0x4e, 0x07, 0x5c, 0x10, 0x48, 0x58, 0xf2, 0xf6, 0xe6, 0xcf, 0xd6, 0xab, 0xde, 0xdf, 0x01, 0x5a, 0x82, 0x1d, 0x03, 0x60, 0x8b, 0xf4, 0xeb, 0xa3, 0x16, 0x9a, 0x67, 0x25, 0xec, 0x42, 0x2c, 0xd9, 0x06, 0x94, 0x98, 0xb5, 0x51, 0x5a, 0x96, 0x08, 0xae, 0x7c, 0xc3, 0x0e, 0x3d, 0x2e, 0xcf, 0xc1, 0xdb, 0x68, 0x25, 0xf3, 0xe9, 0x96, 0xce, 0x9a, 0x50, 0x92, 0x92, 0x6b, 0xc1, 0xcf, 0x61, 0xaa, 0x42, 0xd7, 0xf2, 0x40, 0xe6, 0xf7, 0xaa, 0x0e, 0xdb, 0x38, 0xbf, 0x81, 0xaa, 0x92, 0x9d, 0x66, 0xbb, 0x5d, 0x89, 0x00, 0x18, 0x08, 0x84, 0x58, 0x72, 0x0d, 0x72, 0xd5, 0x69, 0x24, 0x7b, 0x0c }; static const uint8_t ac_rsassa_vect12_out[] = { 0x68, 0x2c, 0xf5, 0x3c, 0x11, 0x45, 0xd2, 0x2a, 0x50, 0xca, 0xa9, 0xeb, 0x1a, 0x9b, 0xa7, 0x06, 0x70, 0xc5, 0x91, 0x5e, 0x0f, 0xdf, 0xde, 0x64, 0x57, 0xa7, 0x65, 0xde, 0x2a, 0x8f, 0xe1, 0x2d, 0xe9, 0x79, 0x41, 0x72, 0xa7, 0x8d, 0x14, 0xe6, 0x68, 0xd4, 0x98, 0xac, 0xed, 0xad, 0x61, 0x65, 0x04, 0xbb, 0x17, 0x64, 0xd0, 0x94, 0x60, 0x70, 0x70, 0x08, 0x05, 0x92, 0xc3, 0xa6, 0x9c, 0x34, 0x3d, 0x98, 0x2b, 0xd7, 0x78, 0x65, 0x87, 0x3d, 0x35, 0xe2, 0x48, 0x22, 0xca, 0xf4, 0x34, 0x43, 0xcc, 0x10, 0x24, 0x9a, 0xf6, 0xa1, 0xe2, 0x6e, 0xf3, 0x44, 0xf2, 0x8b, 0x9e, 0xf6, 0xf1, 0x4e, 0x09, 0xad, 0x83, 0x97, 0x48, 0xe5, 0x14, 0x8b, 0xcc, 0xeb, 0x0f, 0xd2, 0xaa, 0x63, 0x70, 0x9c, 0xb4, 0x89, 0x75, 0xcb, 0xf9, 0xc7, 0xb4, 0x9a, 0xbc, 0x66, 0xa1, 0xdc, 0x6c, 0xb5, 0xb3, 0x1a }; /* SigGenPSS_186-2.txt line 66 SHA-224 */ #define ac_rsassa_vect17_modulus ac_siggenpss_186_2_modulus #define ac_rsassa_vect17_pub_exp ac_siggenpss_186_2_pub_exp #define ac_rsassa_vect17_priv_exp ac_siggenpss_186_2_priv_exp #define ac_rsassa_vect17_prime1 ac_siggenpss_186_2_prime1 #define ac_rsassa_vect17_prime2 ac_siggenpss_186_2_prime2 #define ac_rsassa_vect17_exp1 ac_siggenpss_186_2_exp1 #define ac_rsassa_vect17_exp2 ac_siggenpss_186_2_exp2 #define ac_rsassa_vect17_coeff ac_siggenpss_186_2_coeff #define ac_rsassa_vect17_salt_len ac_siggenpss_186_2_salt_len static const uint8_t ac_rsassa_vect17_ptx[] = { 0x12, 0x48, 0xf6, 0x2a, 0x43, 0x89, 0xf4, 0x2f, 0x7b, 0x4b, 0xb1, 0x31, 0x05, 0x3d, 0x6c, 0x88, 0xa9, 0x94, 0xdb, 0x20, 0x75, 0xb9, 0x12, 0xcc, 0xbe, 0x3e, 0xa7, 0xdc, 0x61, 0x17, 0x14, 0xf1, 0x4e, 0x07, 0x5c, 0x10, 0x48, 0x58, 0xf2, 0xf6, 0xe6, 0xcf, 0xd6, 0xab, 0xde, 0xdf, 0x01, 0x5a, 0x82, 0x1d, 0x03, 0x60, 0x8b, 0xf4, 0xeb, 0xa3, 0x16, 0x9a, 0x67, 0x25, 0xec, 0x42, 0x2c, 0xd9, 0x06, 0x94, 0x98, 0xb5, 0x51, 0x5a, 0x96, 0x08, 0xae, 0x7c, 0xc3, 0x0e, 0x3d, 0x2e, 0xcf, 0xc1, 0xdb, 0x68, 0x25, 0xf3, 0xe9, 0x96, 0xce, 0x9a, 0x50, 0x92, 0x92, 0x6b, 0xc1, 0xcf, 0x61, 0xaa, 0x42, 0xd7, 0xf2, 0x40, 0xe6, 0xf7, 0xaa, 0x0e, 0xdb, 0x38, 0xbf, 0x81, 0xaa, 0x92, 0x9d, 0x66, 0xbb, 0x5d, 0x89, 0x00, 0x18, 0x08, 0x84, 0x58, 0x72, 0x0d, 0x72, 0xd5, 0x69, 0x24, 0x7b, 0x0c, }; static const uint8_t ac_rsassa_vect17_out[] = { 0x53, 0xd8, 0x59, 0xc9, 0xf1, 0x0a, 0xbf, 0x1c, 0x00, 0x28, 0x4a, 0x4b, 0x55, 0xbf, 0x2b, 0xd8, 0x4d, 0x8e, 0x31, 0x3b, 0x4f, 0x3c, 0x35, 0xb8, 0xde, 0xc7, 0xbc, 0x3a, 0xfe, 0x39, 0xb9, 0xb8, 0xa1, 0x55, 0x41, 0x8e, 0xad, 0x19, 0x31, 0x89, 0x57, 0x69, 0xce, 0x23, 0x40, 0xbe, 0x20, 0x91, 0xf2, 0x38, 0x5b, 0xbc, 0xf1, 0x0d, 0x9e, 0x92, 0xbc, 0xf5, 0xd0, 0xe2, 0x96, 0x0d, 0x10, 0xe7, 0x92, 0xe7, 0xd8, 0x65, 0xc6, 0x4e, 0x50, 0xd1, 0x9f, 0xfa, 0x13, 0xe5, 0x28, 0x17, 0xd7, 0xd8, 0xd8, 0xdb, 0x34, 0x39, 0x2c, 0x23, 0x74, 0xa2, 0xe9, 0xb6, 0x91, 0x84, 0xf9, 0x2a, 0x4a, 0xd9, 0xb1, 0xb8, 0xba, 0xe9, 0x9c, 0xa6, 0x14, 0xd2, 0x04, 0xb6, 0x5a, 0x43, 0x8e, 0x38, 0xdb, 0xbf, 0xc8, 0xc7, 0xcc, 0x44, 0xed, 0x56, 0x77, 0xaf, 0x70, 0xce, 0x6c, 0x4f, 0x95, 0x1f, 0x02, 0x44, }; /* SigGen15_186-2.txt line 114 SHA-256 */ #define ac_rsassa_vect13_modulus ac_siggenpss_186_2_modulus #define ac_rsassa_vect13_pub_exp ac_siggenpss_186_2_pub_exp #define ac_rsassa_vect13_priv_exp ac_siggenpss_186_2_priv_exp #define ac_rsassa_vect13_prime1 ac_siggenpss_186_2_prime1 #define ac_rsassa_vect13_prime2 ac_siggenpss_186_2_prime2 #define ac_rsassa_vect13_exp1 ac_siggenpss_186_2_exp1 #define ac_rsassa_vect13_exp2 ac_siggenpss_186_2_exp2 #define ac_rsassa_vect13_coeff ac_siggenpss_186_2_coeff #define ac_rsassa_vect13_salt_len ac_siggenpss_186_2_salt_len static const uint8_t ac_rsassa_vect13_ptx[] = { 0x12, 0x48, 0xf6, 0x2a, 0x43, 0x89, 0xf4, 0x2f, 0x7b, 0x4b, 0xb1, 0x31, 0x05, 0x3d, 0x6c, 0x88, 0xa9, 0x94, 0xdb, 0x20, 0x75, 0xb9, 0x12, 0xcc, 0xbe, 0x3e, 0xa7, 0xdc, 0x61, 0x17, 0x14, 0xf1, 0x4e, 0x07, 0x5c, 0x10, 0x48, 0x58, 0xf2, 0xf6, 0xe6, 0xcf, 0xd6, 0xab, 0xde, 0xdf, 0x01, 0x5a, 0x82, 0x1d, 0x03, 0x60, 0x8b, 0xf4, 0xeb, 0xa3, 0x16, 0x9a, 0x67, 0x25, 0xec, 0x42, 0x2c, 0xd9, 0x06, 0x94, 0x98, 0xb5, 0x51, 0x5a, 0x96, 0x08, 0xae, 0x7c, 0xc3, 0x0e, 0x3d, 0x2e, 0xcf, 0xc1, 0xdb, 0x68, 0x25, 0xf3, 0xe9, 0x96, 0xce, 0x9a, 0x50, 0x92, 0x92, 0x6b, 0xc1, 0xcf, 0x61, 0xaa, 0x42, 0xd7, 0xf2, 0x40, 0xe6, 0xf7, 0xaa, 0x0e, 0xdb, 0x38, 0xbf, 0x81, 0xaa, 0x92, 0x9d, 0x66, 0xbb, 0x5d, 0x89, 0x00, 0x18, 0x08, 0x84, 0x58, 0x72, 0x0d, 0x72, 0xd5, 0x69, 0x24, 0x7b, 0x0c }; static const uint8_t ac_rsassa_vect13_out[] = { 0x7b, 0x1d, 0x37, 0x27, 0x8e, 0x54, 0x98, 0x98, 0xd4, 0x08, 0x4e, 0x22, 0x10, 0xc4, 0xa9, 0x96, 0x1e, 0xdf, 0xe7, 0xb5, 0x96, 0x35, 0x50, 0xcc, 0xa1, 0x90, 0x42, 0x48, 0xc8, 0x68, 0x15, 0x13, 0x53, 0x90, 0x17, 0x82, 0x0f, 0x0e, 0x9b, 0xd0, 0x74, 0xb9, 0xf8, 0xa0, 0x67, 0xb9, 0xfe, 0xff, 0xf7, 0xf1, 0xfa, 0x20, 0xbf, 0x2d, 0x0c, 0x75, 0x01, 0x5f, 0xf0, 0x20, 0xb2, 0x21, 0x0c, 0xc7, 0xf7, 0x90, 0x34, 0xfe, 0xdf, 0x68, 0xe8, 0xd4, 0x4a, 0x00, 0x7a, 0xbf, 0x4d, 0xd8, 0x2c, 0x26, 0xe8, 0xb0, 0x03, 0x93, 0x72, 0x3a, 0xea, 0x15, 0xab, 0xfb, 0xc2, 0x29, 0x41, 0xc8, 0xcf, 0x79, 0x48, 0x17, 0x18, 0xc0, 0x08, 0xda, 0x71, 0x3f, 0xb8, 0xf5, 0x4c, 0xb3, 0xfc, 0xa8, 0x90, 0xbd, 0xe1, 0x13, 0x73, 0x14, 0x33, 0x4b, 0x9b, 0x0a, 0x18, 0x51, 0x5b, 0xfa, 0x48, 0xe5, 0xcc, 0xd0 }; /* SigGen15_186-2.txt line 164 SHA-384 */ #define ac_rsassa_vect14_modulus ac_siggenpss_186_2_modulus #define ac_rsassa_vect14_pub_exp ac_siggenpss_186_2_pub_exp #define ac_rsassa_vect14_priv_exp ac_siggenpss_186_2_priv_exp #define ac_rsassa_vect14_prime1 ac_siggenpss_186_2_prime1 #define ac_rsassa_vect14_prime2 ac_siggenpss_186_2_prime2 #define ac_rsassa_vect14_exp1 ac_siggenpss_186_2_exp1 #define ac_rsassa_vect14_exp2 ac_siggenpss_186_2_exp2 #define ac_rsassa_vect14_coeff ac_siggenpss_186_2_coeff #define ac_rsassa_vect14_salt_len ac_siggenpss_186_2_salt_len static const uint8_t ac_rsassa_vect14_ptx[] = { 0x12, 0x48, 0xf6, 0x2a, 0x43, 0x89, 0xf4, 0x2f, 0x7b, 0x4b, 0xb1, 0x31, 0x05, 0x3d, 0x6c, 0x88, 0xa9, 0x94, 0xdb, 0x20, 0x75, 0xb9, 0x12, 0xcc, 0xbe, 0x3e, 0xa7, 0xdc, 0x61, 0x17, 0x14, 0xf1, 0x4e, 0x07, 0x5c, 0x10, 0x48, 0x58, 0xf2, 0xf6, 0xe6, 0xcf, 0xd6, 0xab, 0xde, 0xdf, 0x01, 0x5a, 0x82, 0x1d, 0x03, 0x60, 0x8b, 0xf4, 0xeb, 0xa3, 0x16, 0x9a, 0x67, 0x25, 0xec, 0x42, 0x2c, 0xd9, 0x06, 0x94, 0x98, 0xb5, 0x51, 0x5a, 0x96, 0x08, 0xae, 0x7c, 0xc3, 0x0e, 0x3d, 0x2e, 0xcf, 0xc1, 0xdb, 0x68, 0x25, 0xf3, 0xe9, 0x96, 0xce, 0x9a, 0x50, 0x92, 0x92, 0x6b, 0xc1, 0xcf, 0x61, 0xaa, 0x42, 0xd7, 0xf2, 0x40, 0xe6, 0xf7, 0xaa, 0x0e, 0xdb, 0x38, 0xbf, 0x81, 0xaa, 0x92, 0x9d, 0x66, 0xbb, 0x5d, 0x89, 0x00, 0x18, 0x08, 0x84, 0x58, 0x72, 0x0d, 0x72, 0xd5, 0x69, 0x24, 0x7b, 0x0c }; static const uint8_t ac_rsassa_vect14_out[] = { 0x8f, 0x16, 0xc8, 0x07, 0xbe, 0xf3, 0xed, 0x6f, 0x74, 0xee, 0x7f, 0xf5, 0xc3, 0x60, 0xa5, 0x42, 0x8c, 0x6c, 0x2f, 0x10, 0x51, 0x78, 0xb5, 0x8f, 0xf7, 0xd0, 0x73, 0xe5, 0x66, 0xda, 0xd6, 0xe7, 0x71, 0x8d, 0x31, 0x29, 0xc7, 0x68, 0xcd, 0x5a, 0x96, 0x66, 0xde, 0x2b, 0x6c, 0x94, 0x71, 0x77, 0xb4, 0x57, 0x09, 0xdc, 0x7c, 0xd0, 0xf4, 0x3b, 0x0b, 0xa6, 0xfc, 0x75, 0x57, 0x8e, 0x11, 0x96, 0xac, 0xc1, 0x5c, 0xa3, 0xaf, 0xe4, 0xa7, 0x8c, 0x14, 0x4c, 0xb6, 0x88, 0x5c, 0x1c, 0xc8, 0x15, 0xf7, 0xf9, 0x89, 0x25, 0xbc, 0x04, 0xad, 0x2f, 0xf2, 0x0f, 0xc1, 0x06, 0x8b, 0x04, 0x5d, 0x94, 0x50, 0xe2, 0xa1, 0xdc, 0xf5, 0xa1, 0x61, 0xce, 0xab, 0xba, 0x2b, 0x0b, 0x66, 0xc7, 0x35, 0x4f, 0xdb, 0x80, 0xfa, 0x1d, 0x72, 0x9e, 0x5f, 0x97, 0x63, 0x87, 0xf2, 0x4a, 0x69, 0x7a, 0x7e, 0x56 }; /* SigGen15_186-2.txt line 214 SHA-512 */ #define ac_rsassa_vect15_modulus ac_siggenpss_186_2_modulus #define ac_rsassa_vect15_pub_exp ac_siggenpss_186_2_pub_exp #define ac_rsassa_vect15_priv_exp ac_siggenpss_186_2_priv_exp #define ac_rsassa_vect15_prime1 ac_siggenpss_186_2_prime1 #define ac_rsassa_vect15_prime2 ac_siggenpss_186_2_prime2 #define ac_rsassa_vect15_exp1 ac_siggenpss_186_2_exp1 #define ac_rsassa_vect15_exp2 ac_siggenpss_186_2_exp2 #define ac_rsassa_vect15_coeff ac_siggenpss_186_2_coeff #define ac_rsassa_vect15_salt_len ac_siggenpss_186_2_salt_len static const uint8_t ac_rsassa_vect15_ptx[] = { 0x12, 0x48, 0xf6, 0x2a, 0x43, 0x89, 0xf4, 0x2f, 0x7b, 0x4b, 0xb1, 0x31, 0x05, 0x3d, 0x6c, 0x88, 0xa9, 0x94, 0xdb, 0x20, 0x75, 0xb9, 0x12, 0xcc, 0xbe, 0x3e, 0xa7, 0xdc, 0x61, 0x17, 0x14, 0xf1, 0x4e, 0x07, 0x5c, 0x10, 0x48, 0x58, 0xf2, 0xf6, 0xe6, 0xcf, 0xd6, 0xab, 0xde, 0xdf, 0x01, 0x5a, 0x82, 0x1d, 0x03, 0x60, 0x8b, 0xf4, 0xeb, 0xa3, 0x16, 0x9a, 0x67, 0x25, 0xec, 0x42, 0x2c, 0xd9, 0x06, 0x94, 0x98, 0xb5, 0x51, 0x5a, 0x96, 0x08, 0xae, 0x7c, 0xc3, 0x0e, 0x3d, 0x2e, 0xcf, 0xc1, 0xdb, 0x68, 0x25, 0xf3, 0xe9, 0x96, 0xce, 0x9a, 0x50, 0x92, 0x92, 0x6b, 0xc1, 0xcf, 0x61, 0xaa, 0x42, 0xd7, 0xf2, 0x40, 0xe6, 0xf7, 0xaa, 0x0e, 0xdb, 0x38, 0xbf, 0x81, 0xaa, 0x92, 0x9d, 0x66, 0xbb, 0x5d, 0x89, 0x00, 0x18, 0x08, 0x84, 0x58, 0x72, 0x0d, 0x72, 0xd5, 0x69, 0x24, 0x7b, 0x0c }; static const uint8_t ac_rsassa_vect15_out[] = { 0xa8, 0x33, 0xba, 0x31, 0x63, 0x4f, 0x87, 0x73, 0xe4, 0xfe, 0x6e, 0xa0, 0xc6, 0x9e, 0x1a, 0x23, 0x76, 0x6a, 0x93, 0x9d, 0x34, 0xb3, 0x2f, 0xc7, 0x8b, 0x77, 0x4b, 0x22, 0xe4, 0x6a, 0x64, 0x6c, 0x25, 0xe6, 0xe1, 0x06, 0x2d, 0x23, 0x4e, 0xd4, 0x8b, 0x1a, 0xba, 0x0f, 0x83, 0x05, 0x29, 0xff, 0x6a, 0xfc, 0x29, 0x6c, 0xc8, 0xdc, 0x20, 0x7b, 0xbc, 0x15, 0x39, 0x16, 0x23, 0xbe, 0xac, 0x5f, 0x6c, 0x3d, 0xb5, 0x57, 0xca, 0x49, 0xd0, 0xe4, 0x2c, 0x96, 0x2d, 0xe9, 0x5b, 0x5f, 0xf5, 0x48, 0xcf, 0xf9, 0x70, 0xf5, 0xc7, 0x3f, 0x43, 0x9c, 0xfe, 0x82, 0xd3, 0x90, 0x7b, 0xe6, 0x02, 0x40, 0xf5, 0x6b, 0x6a, 0x42, 0x59, 0xcc, 0x96, 0xdf, 0xd8, 0xfe, 0x02, 0xa0, 0xbf, 0xa2, 0x6e, 0x02, 0x23, 0xf6, 0x82, 0x14, 0x42, 0x8f, 0xff, 0x0a, 0xe4, 0x01, 0x62, 0x19, 0x8c, 0xc5, 0xcb, 0xd1 }; /* * Test data from ftp://ftp.rsa.com/pub/rsalabs/tmp/pkcs1v15crypt-vectors.txt * * As specified in PKCS#1, the block type for this operation is 2. * The seed value of each example provides the pseudo random bytes * to be used for padding. This makes the result predictable. */ /* PKCS#1 v1.5 Signature Example 1 1024-bit RSA key pair */ static const uint8_t ac_rsaes_pkcs1_v1_5_example1_modulus[] = { 0xa8, 0xb3, 0xb2, 0x84, 0xaf, 0x8e, 0xb5, 0x0b, 0x38, 0x70, 0x34, 0xa8, 0x60, 0xf1, 0x46, 0xc4, 0x91, 0x9f, 0x31, 0x87, 0x63, 0xcd, 0x6c, 0x55, 0x98, 0xc8, 0xae, 0x48, 0x11, 0xa1, 0xe0, 0xab, 0xc4, 0xc7, 0xe0, 0xb0, 0x82, 0xd6, 0x93, 0xa5, 0xe7, 0xfc, 0xed, 0x67, 0x5c, 0xf4, 0x66, 0x85, 0x12, 0x77, 0x2c, 0x0c, 0xbc, 0x64, 0xa7, 0x42, 0xc6, 0xc6, 0x30, 0xf5, 0x33, 0xc8, 0xcc, 0x72, 0xf6, 0x2a, 0xe8, 0x33, 0xc4, 0x0b, 0xf2, 0x58, 0x42, 0xe9, 0x84, 0xbb, 0x78, 0xbd, 0xbf, 0x97, 0xc0, 0x10, 0x7d, 0x55, 0xbd, 0xb6, 0x62, 0xf5, 0xc4, 0xe0, 0xfa, 0xb9, 0x84, 0x5c, 0xb5, 0x14, 0x8e, 0xf7, 0x39, 0x2d, 0xd3, 0xaa, 0xff, 0x93, 0xae, 0x1e, 0x6b, 0x66, 0x7b, 0xb3, 0xd4, 0x24, 0x76, 0x16, 0xd4, 0xf5, 0xba, 0x10, 0xd4, 0xcf, 0xd2, 0x26, 0xde, 0x88, 0xd3, 0x9f, 0x16, 0xfb }; static const uint8_t ac_rsaes_pkcs1_v1_5_example1_pub_exp[] = { 0x01, 0x00, 0x01 }; static const uint8_t ac_rsaes_pkcs1_v1_5_example1_priv_exp[] = { 0x53, 0x33, 0x9c, 0xfd, 0xb7, 0x9f, 0xc8, 0x46, 0x6a, 0x65, 0x5c, 0x73, 0x16, 0xac, 0xa8, 0x5c, 0x55, 0xfd, 0x8f, 0x6d, 0xd8, 0x98, 0xfd, 0xaf, 0x11, 0x95, 0x17, 0xef, 0x4f, 0x52, 0xe8, 0xfd, 0x8e, 0x25, 0x8d, 0xf9, 0x3f, 0xee, 0x18, 0x0f, 0xa0, 0xe4, 0xab, 0x29, 0x69, 0x3c, 0xd8, 0x3b, 0x15, 0x2a, 0x55, 0x3d, 0x4a, 0xc4, 0xd1, 0x81, 0x2b, 0x8b, 0x9f, 0xa5, 0xaf, 0x0e, 0x7f, 0x55, 0xfe, 0x73, 0x04, 0xdf, 0x41, 0x57, 0x09, 0x26, 0xf3, 0x31, 0x1f, 0x15, 0xc4, 0xd6, 0x5a, 0x73, 0x2c, 0x48, 0x31, 0x16, 0xee, 0x3d, 0x3d, 0x2d, 0x0a, 0xf3, 0x54, 0x9a, 0xd9, 0xbf, 0x7c, 0xbf, 0xb7, 0x8a, 0xd8, 0x84, 0xf8, 0x4d, 0x5b, 0xeb, 0x04, 0x72, 0x4d, 0xc7, 0x36, 0x9b, 0x31, 0xde, 0xf3, 0x7d, 0x0c, 0xf5, 0x39, 0xe9, 0xcf, 0xcd, 0xd3, 0xde, 0x65, 0x37, 0x29, 0xea, 0xd5, 0xd1 }; static const uint8_t ac_rsaes_pkcs1_v1_5_example1_prime1[] = { 0xd3, 0x27, 0x37, 0xe7, 0x26, 0x7f, 0xfe, 0x13, 0x41, 0xb2, 0xd5, 0xc0, 0xd1, 0x50, 0xa8, 0x1b, 0x58, 0x6f, 0xb3, 0x13, 0x2b, 0xed, 0x2f, 0x8d, 0x52, 0x62, 0x86, 0x4a, 0x9c, 0xb9, 0xf3, 0x0a, 0xf3, 0x8b, 0xe4, 0x48, 0x59, 0x8d, 0x41, 0x3a, 0x17, 0x2e, 0xfb, 0x80, 0x2c, 0x21, 0xac, 0xf1, 0xc1, 0x1c, 0x52, 0x0c, 0x2f, 0x26, 0xa4, 0x71, 0xdc, 0xad, 0x21, 0x2e, 0xac, 0x7c, 0xa3, 0x9d }; static const uint8_t ac_rsaes_pkcs1_v1_5_example1_prime2[] = { 0xcc, 0x88, 0x53, 0xd1, 0xd5, 0x4d, 0xa6, 0x30, 0xfa, 0xc0, 0x04, 0xf4, 0x71, 0xf2, 0x81, 0xc7, 0xb8, 0x98, 0x2d, 0x82, 0x24, 0xa4, 0x90, 0xed, 0xbe, 0xb3, 0x3d, 0x3e, 0x3d, 0x5c, 0xc9, 0x3c, 0x47, 0x65, 0x70, 0x3d, 0x1d, 0xd7, 0x91, 0x64, 0x2f, 0x1f, 0x11, 0x6a, 0x0d, 0xd8, 0x52, 0xbe, 0x24, 0x19, 0xb2, 0xaf, 0x72, 0xbf, 0xe9, 0xa0, 0x30, 0xe8, 0x60, 0xb0, 0x28, 0x8b, 0x5d, 0x77 }; static const uint8_t ac_rsaes_pkcs1_v1_5_example1_exp1[] = { 0x0e, 0x12, 0xbf, 0x17, 0x18, 0xe9, 0xce, 0xf5, 0x59, 0x9b, 0xa1, 0xc3, 0x88, 0x2f, 0xe8, 0x04, 0x6a, 0x90, 0x87, 0x4e, 0xef, 0xce, 0x8f, 0x2c, 0xcc, 0x20, 0xe4, 0xf2, 0x74, 0x1f, 0xb0, 0xa3, 0x3a, 0x38, 0x48, 0xae, 0xc9, 0xc9, 0x30, 0x5f, 0xbe, 0xcb, 0xd2, 0xd7, 0x68, 0x19, 0x96, 0x7d, 0x46, 0x71, 0xac, 0xc6, 0x43, 0x1e, 0x40, 0x37, 0x96, 0x8d, 0xb3, 0x78, 0x78, 0xe6, 0x95, 0xc1 }; static const uint8_t ac_rsaes_pkcs1_v1_5_example1_exp2[] = { 0x95, 0x29, 0x7b, 0x0f, 0x95, 0xa2, 0xfa, 0x67, 0xd0, 0x07, 0x07, 0xd6, 0x09, 0xdf, 0xd4, 0xfc, 0x05, 0xc8, 0x9d, 0xaf, 0xc2, 0xef, 0x6d, 0x6e, 0xa5, 0x5b, 0xec, 0x77, 0x1e, 0xa3, 0x33, 0x73, 0x4d, 0x92, 0x51, 0xe7, 0x90, 0x82, 0xec, 0xda, 0x86, 0x6e, 0xfe, 0xf1, 0x3c, 0x45, 0x9e, 0x1a, 0x63, 0x13, 0x86, 0xb7, 0xe3, 0x54, 0xc8, 0x99, 0xf5, 0xf1, 0x12, 0xca, 0x85, 0xd7, 0x15, 0x83 }; static const uint8_t ac_rsaes_pkcs1_v1_5_example1_coeff[] = { 0x4f, 0x45, 0x6c, 0x50, 0x24, 0x93, 0xbd, 0xc0, 0xed, 0x2a, 0xb7, 0x56, 0xa3, 0xa6, 0xed, 0x4d, 0x67, 0x35, 0x2a, 0x69, 0x7d, 0x42, 0x16, 0xe9, 0x32, 0x12, 0xb1, 0x27, 0xa6, 0x3d, 0x54, 0x11, 0xce, 0x6f, 0xa9, 0x8d, 0x5d, 0xbe, 0xfd, 0x73, 0x26, 0x3e, 0x37, 0x28, 0x14, 0x27, 0x43, 0x81, 0x81, 0x66, 0xed, 0x7d, 0xd6, 0x36, 0x87, 0xdd, 0x2a, 0x8c, 0xa1, 0xd2, 0xf4, 0xfb, 0xd8, 0xe1 }; /* PKCS#1 v1.5 Encrypt Example 1.1 */ #define ac_rsaes_pkcs1_v1_5_vect1_modulus ac_rsaes_pkcs1_v1_5_example1_modulus #define ac_rsaes_pkcs1_v1_5_vect1_pub_exp ac_rsaes_pkcs1_v1_5_example1_pub_exp #define ac_rsaes_pkcs1_v1_5_vect1_priv_exp ac_rsaes_pkcs1_v1_5_example1_priv_exp #define ac_rsaes_pkcs1_v1_5_vect1_prime1 ac_rsaes_pkcs1_v1_5_example1_prime1 #define ac_rsaes_pkcs1_v1_5_vect1_prime2 ac_rsaes_pkcs1_v1_5_example1_prime2 #define ac_rsaes_pkcs1_v1_5_vect1_exp1 ac_rsaes_pkcs1_v1_5_example1_exp1 #define ac_rsaes_pkcs1_v1_5_vect1_exp2 ac_rsaes_pkcs1_v1_5_example1_exp2 #define ac_rsaes_pkcs1_v1_5_vect1_coeff ac_rsaes_pkcs1_v1_5_example1_coeff static const uint8_t ac_rsaes_pkcs1_v1_5_vect1_ptx[] = { 0x66, 0x28, 0x19, 0x4e, 0x12, 0x07, 0x3d, 0xb0, 0x3b, 0xa9, 0x4c, 0xda, 0x9e, 0xf9, 0x53, 0x23, 0x97, 0xd5, 0x0d, 0xba, 0x79, 0xb9, 0x87, 0x00, 0x4a, 0xfe, 0xfe, 0x34, }; static const uint8_t ac_rsaes_pkcs1_v1_5_vect1_out[] = { 0x50, 0xb4, 0xc1, 0x41, 0x36, 0xbd, 0x19, 0x8c, 0x2f, 0x3c, 0x3e, 0xd2, 0x43, 0xfc, 0xe0, 0x36, 0xe1, 0x68, 0xd5, 0x65, 0x17, 0x98, 0x4a, 0x26, 0x3c, 0xd6, 0x64, 0x92, 0xb8, 0x08, 0x04, 0xf1, 0x69, 0xd2, 0x10, 0xf2, 0xb9, 0xbd, 0xfb, 0x48, 0xb1, 0x2f, 0x9e, 0xa0, 0x50, 0x09, 0xc7, 0x7d, 0xa2, 0x57, 0xcc, 0x60, 0x0c, 0xce, 0xfe, 0x3a, 0x62, 0x83, 0x78, 0x9d, 0x8e, 0xa0, 0xe6, 0x07, 0xac, 0x58, 0xe2, 0x69, 0x0e, 0xc4, 0xeb, 0xc1, 0x01, 0x46, 0xe8, 0xcb, 0xaa, 0x5e, 0xd4, 0xd5, 0xcc, 0xe6, 0xfe, 0x7b, 0x0f, 0xf9, 0xef, 0xc1, 0xea, 0xbb, 0x56, 0x4d, 0xbf, 0x49, 0x82, 0x85, 0xf4, 0x49, 0xee, 0x61, 0xdd, 0x7b, 0x42, 0xee, 0x5b, 0x58, 0x92, 0xcb, 0x90, 0x60, 0x1f, 0x30, 0xcd, 0xa0, 0x7b, 0xf2, 0x64, 0x89, 0x31, 0x0b, 0xcd, 0x23, 0xb5, 0x28, 0xce, 0xab, 0x3c, 0x31, }; /* PKCS#1 v1.5 Encrypt Example 1.2 */ #define ac_rsaes_pkcs1_v1_5_vect2_modulus ac_rsaes_pkcs1_v1_5_example1_modulus #define ac_rsaes_pkcs1_v1_5_vect2_pub_exp ac_rsaes_pkcs1_v1_5_example1_pub_exp #define ac_rsaes_pkcs1_v1_5_vect2_priv_exp ac_rsaes_pkcs1_v1_5_example1_priv_exp #define ac_rsaes_pkcs1_v1_5_vect2_prime1 ac_rsaes_pkcs1_v1_5_example1_prime1 #define ac_rsaes_pkcs1_v1_5_vect2_prime2 ac_rsaes_pkcs1_v1_5_example1_prime2 #define ac_rsaes_pkcs1_v1_5_vect2_exp1 ac_rsaes_pkcs1_v1_5_example1_exp1 #define ac_rsaes_pkcs1_v1_5_vect2_exp2 ac_rsaes_pkcs1_v1_5_example1_exp2 #define ac_rsaes_pkcs1_v1_5_vect2_coeff ac_rsaes_pkcs1_v1_5_example1_coeff static const uint8_t ac_rsaes_pkcs1_v1_5_vect2_ptx[] = { 0x75, 0x0c, 0x40, 0x47, 0xf5, 0x47, 0xe8, 0xe4, 0x14, 0x11, 0x85, 0x65, 0x23, 0x29, 0x8a, 0xc9, 0xba, 0xe2, 0x45, 0xef, 0xaf, 0x13, 0x97, 0xfb, 0xe5, 0x6f, 0x9d, 0xd5 }; static const uint8_t ac_rsaes_pkcs1_v1_5_vect2_out[] = { 0x68, 0x42, 0xe5, 0xe2, 0xcc, 0x00, 0x41, 0xd6, 0xb0, 0xc8, 0x1a, 0x56, 0x2c, 0x39, 0xa6, 0x17, 0x37, 0x9a, 0x51, 0x5c, 0xab, 0x74, 0xab, 0xcb, 0x26, 0x19, 0xc7, 0x74, 0x0a, 0x54, 0x1d, 0x95, 0x55, 0xdd, 0x91, 0x65, 0x97, 0x5b, 0xf8, 0xa3, 0xeb, 0xd0, 0xd0, 0x45, 0x66, 0x61, 0xdf, 0xb1, 0xa6, 0x86, 0x1b, 0xa2, 0x33, 0x22, 0x69, 0x93, 0x0e, 0x0d, 0xb5, 0x14, 0xfc, 0xa0, 0x73, 0x3e, 0xeb, 0x9c, 0x40, 0x57, 0x13, 0xeb, 0x1f, 0x9d, 0x76, 0x80, 0x33, 0xed, 0x29, 0x3e, 0x1e, 0x08, 0x1a, 0x12, 0x5f, 0x32, 0xdd, 0xb9, 0xea, 0x52, 0xed, 0xbe, 0x27, 0x5c, 0x4a, 0xf6, 0x0f, 0x8a, 0x7b, 0xf8, 0x32, 0xbd, 0x22, 0x75, 0x61, 0xc2, 0x08, 0xdc, 0x00, 0x31, 0xa8, 0x4b, 0x50, 0x12, 0xc9, 0xdd, 0x9f, 0x74, 0x45, 0x9d, 0xcb, 0x07, 0x0b, 0xdb, 0xe1, 0x3c, 0xfa, 0x8c, 0x2d, 0x50 }; /* * Test data from ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip * * The underlying hash function is SHA-1; the mask generation function is * MGF1 with SHA-1 as specified in PKCS #1 v2.1. */ /* Example 1: A 1024-bit RSA Key Pair */ #define ac_rsaes_oaep_example1_modulus ac_rsaes_pkcs1_v1_5_example1_modulus #define ac_rsaes_oaep_example1_pub_exp ac_rsaes_pkcs1_v1_5_example1_pub_exp #define ac_rsaes_oaep_example1_priv_exp ac_rsaes_pkcs1_v1_5_example1_priv_exp #define ac_rsaes_oaep_example1_prime1 ac_rsaes_pkcs1_v1_5_example1_prime1 #define ac_rsaes_oaep_example1_prime2 ac_rsaes_pkcs1_v1_5_example1_prime2 #define ac_rsaes_oaep_example1_exp1 ac_rsaes_pkcs1_v1_5_example1_exp1 #define ac_rsaes_oaep_example1_exp2 ac_rsaes_pkcs1_v1_5_example1_exp2 #define ac_rsaes_oaep_example1_coeff ac_rsaes_pkcs1_v1_5_example1_coeff /* RSAES-OAEP Encryption Example 1.1 */ #define ac_rsaes_oaep_vect1_modulus ac_rsaes_oaep_example1_modulus #define ac_rsaes_oaep_vect1_pub_exp ac_rsaes_oaep_example1_pub_exp #define ac_rsaes_oaep_vect1_priv_exp ac_rsaes_oaep_example1_priv_exp #define ac_rsaes_oaep_vect1_prime1 ac_rsaes_oaep_example1_prime1 #define ac_rsaes_oaep_vect1_prime2 ac_rsaes_oaep_example1_prime2 #define ac_rsaes_oaep_vect1_exp1 ac_rsaes_oaep_example1_exp1 #define ac_rsaes_oaep_vect1_exp2 ac_rsaes_oaep_example1_exp2 #define ac_rsaes_oaep_vect1_coeff ac_rsaes_oaep_example1_coeff static const uint8_t ac_rsaes_oaep_vect1_ptx[] = { 0x66, 0x28, 0x19, 0x4e, 0x12, 0x07, 0x3d, 0xb0, 0x3b, 0xa9, 0x4c, 0xda, 0x9e, 0xf9, 0x53, 0x23, 0x97, 0xd5, 0x0d, 0xba, 0x79, 0xb9, 0x87, 0x00, 0x4a, 0xfe, 0xfe, 0x34, }; static const uint8_t ac_rsaes_oaep_vect1_out[] = { 0x35, 0x4f, 0xe6, 0x7b, 0x4a, 0x12, 0x6d, 0x5d, 0x35, 0xfe, 0x36, 0xc7, 0x77, 0x79, 0x1a, 0x3f, 0x7b, 0xa1, 0x3d, 0xef, 0x48, 0x4e, 0x2d, 0x39, 0x08, 0xaf, 0xf7, 0x22, 0xfa, 0xd4, 0x68, 0xfb, 0x21, 0x69, 0x6d, 0xe9, 0x5d, 0x0b, 0xe9, 0x11, 0xc2, 0xd3, 0x17, 0x4f, 0x8a, 0xfc, 0xc2, 0x01, 0x03, 0x5f, 0x7b, 0x6d, 0x8e, 0x69, 0x40, 0x2d, 0xe5, 0x45, 0x16, 0x18, 0xc2, 0x1a, 0x53, 0x5f, 0xa9, 0xd7, 0xbf, 0xc5, 0xb8, 0xdd, 0x9f, 0xc2, 0x43, 0xf8, 0xcf, 0x92, 0x7d, 0xb3, 0x13, 0x22, 0xd6, 0xe8, 0x81, 0xea, 0xa9, 0x1a, 0x99, 0x61, 0x70, 0xe6, 0x57, 0xa0, 0x5a, 0x26, 0x64, 0x26, 0xd9, 0x8c, 0x88, 0x00, 0x3f, 0x84, 0x77, 0xc1, 0x22, 0x70, 0x94, 0xa0, 0xd9, 0xfa, 0x1e, 0x8c, 0x40, 0x24, 0x30, 0x9c, 0xe1, 0xec, 0xcc, 0xb5, 0x21, 0x00, 0x35, 0xd4, 0x7a, 0xc7, 0x2e, 0x8a }; /* RSAES-OAEP Encryption Example 1.2 */ #define ac_rsaes_oaep_vect2_modulus ac_rsaes_oaep_example1_modulus #define ac_rsaes_oaep_vect2_pub_exp ac_rsaes_oaep_example1_pub_exp #define ac_rsaes_oaep_vect2_priv_exp ac_rsaes_oaep_example1_priv_exp #define ac_rsaes_oaep_vect2_prime1 ac_rsaes_oaep_example1_prime1 #define ac_rsaes_oaep_vect2_prime2 ac_rsaes_oaep_example1_prime2 #define ac_rsaes_oaep_vect2_exp1 ac_rsaes_oaep_example1_exp1 #define ac_rsaes_oaep_vect2_exp2 ac_rsaes_oaep_example1_exp2 #define ac_rsaes_oaep_vect2_coeff ac_rsaes_oaep_example1_coeff static const uint8_t ac_rsaes_oaep_vect2_ptx[] = { 0x75, 0x0c, 0x40, 0x47, 0xf5, 0x47, 0xe8, 0xe4, 0x14, 0x11, 0x85, 0x65, 0x23, 0x29, 0x8a, 0xc9, 0xba, 0xe2, 0x45, 0xef, 0xaf, 0x13, 0x97, 0xfb, 0xe5, 0x6f, 0x9d, 0xd5 }; static const uint8_t ac_rsaes_oaep_vect2_out[] = { 0x64, 0x0d, 0xb1, 0xac, 0xc5, 0x8e, 0x05, 0x68, 0xfe, 0x54, 0x07, 0xe5, 0xf9, 0xb7, 0x01, 0xdf, 0xf8, 0xc3, 0xc9, 0x1e, 0x71, 0x6c, 0x53, 0x6f, 0xc7, 0xfc, 0xec, 0x6c, 0xb5, 0xb7, 0x1c, 0x11, 0x65, 0x98, 0x8d, 0x4a, 0x27, 0x9e, 0x15, 0x77, 0xd7, 0x30, 0xfc, 0x7a, 0x29, 0x93, 0x2e, 0x3f, 0x00, 0xc8, 0x15, 0x15, 0x23, 0x6d, 0x8d, 0x8e, 0x31, 0x01, 0x7a, 0x7a, 0x09, 0xdf, 0x43, 0x52, 0xd9, 0x04, 0xcd, 0xeb, 0x79, 0xaa, 0x58, 0x3a, 0xdc, 0xc3, 0x1e, 0xa6, 0x98, 0xa4, 0xc0, 0x52, 0x83, 0xda, 0xba, 0x90, 0x89, 0xbe, 0x54, 0x91, 0xf6, 0x7c, 0x1a, 0x4e, 0xe4, 0x8d, 0xc7, 0x4b, 0xbb, 0xe6, 0x64, 0x3a, 0xef, 0x84, 0x66, 0x79, 0xb4, 0xcb, 0x39, 0x5a, 0x35, 0x2d, 0x5e, 0xd1, 0x15, 0x91, 0x2d, 0xf6, 0x96, 0xff, 0xe0, 0x70, 0x29, 0x32, 0x94, 0x6d, 0x71, 0x49, 0x2b, 0x44 }; /* * RSA-OAEP decryption (SHA-256 + MGF1 SHA-1) test vectors from * https://github.com/C2SP/wycheproof/blob/master/testvectors/rsa_oaep_2048_sha256_mgf1sha1_test.json */ static const uint8_t ac_rsaes_oaep_vect3_modulus[] = { 0xa2, 0xb4, 0x51, 0xa0, 0x7d, 0x0a, 0xa5, 0xf9, 0x6e, 0x45, 0x56, 0x71, 0x51, 0x35, 0x50, 0x51, 0x4a, 0x8a, 0x5b, 0x46, 0x2e, 0xbe, 0xf7, 0x17, 0x09, 0x4f, 0xa1, 0xfe, 0xe8, 0x22, 0x24, 0xe6, 0x37, 0xf9, 0x74, 0x6d, 0x3f, 0x7c, 0xaf, 0xd3, 0x18, 0x78, 0xd8, 0x03, 0x25, 0xb6, 0xef, 0x5a, 0x17, 0x00, 0xf6, 0x59, 0x03, 0xb4, 0x69, 0x42, 0x9e, 0x89, 0xd6, 0xea, 0xc8, 0x84, 0x50, 0x97, 0xb5, 0xab, 0x39, 0x31, 0x89, 0xdb, 0x92, 0x51, 0x2e, 0xd8, 0xa7, 0x71, 0x1a, 0x12, 0x53, 0xfa, 0xcd, 0x20, 0xf7, 0x9c, 0x15, 0xe8, 0x24, 0x7f, 0x3d, 0x3e, 0x42, 0xe4, 0x6e, 0x48, 0xc9, 0x8e, 0x25, 0x4a, 0x2f, 0xe9, 0x76, 0x53, 0x13, 0xa0, 0x3e, 0xff, 0x8f, 0x17, 0xe1, 0xa0, 0x29, 0x39, 0x7a, 0x1f, 0xa2, 0x6a, 0x8d, 0xce, 0x26, 0xf4, 0x90, 0xed, 0x81, 0x29, 0x96, 0x15, 0xd9, 0x81, 0x4c, 0x22, 0xda, 0x61, 0x04, 0x28, 0xe0, 0x9c, 0x7d, 0x96, 0x58, 0x59, 0x42, 0x66, 0xf5, 0xc0, 0x21, 0xd0, 0xfc, 0xec, 0xa0, 0x8d, 0x94, 0x5a, 0x12, 0xbe, 0x82, 0xde, 0x4d, 0x1e, 0xce, 0x6b, 0x4c, 0x03, 0x14, 0x5b, 0x5d, 0x34, 0x95, 0xd4, 0xed, 0x54, 0x11, 0xeb, 0x87, 0x8d, 0xaf, 0x05, 0xfd, 0x7a, 0xfc, 0x3e, 0x09, 0xad, 0xa0, 0xf1, 0x12, 0x64, 0x22, 0xf5, 0x90, 0x97, 0x5a, 0x19, 0x69, 0x81, 0x6f, 0x48, 0x69, 0x8b, 0xcb, 0xba, 0x1b, 0x4d, 0x9c, 0xae, 0x79, 0xd4, 0x60, 0xd8, 0xf9, 0xf8, 0x5e, 0x79, 0x75, 0x00, 0x5d, 0x9b, 0xc2, 0x2c, 0x4e, 0x5a, 0xc0, 0xf7, 0xc1, 0xa4, 0x5d, 0x12, 0x56, 0x9a, 0x62, 0x80, 0x7d, 0x3b, 0x9a, 0x02, 0xe5, 0xa5, 0x30, 0xe7, 0x73, 0x06, 0x6f, 0x45, 0x3d, 0x1f, 0x5b, 0x4c, 0x2e, 0x9c, 0xf7, 0x82, 0x02, 0x83, 0xf7, 0x42, 0xb9, 0xd5 }; #define ac_rsaes_oaep_vect3_pub_exp ac_rsaes_oaep_example1_pub_exp static const uint8_t ac_rsaes_oaep_vect3_priv_exp[] = { 0x76, 0x27, 0xee, 0xf3, 0x56, 0x7b, 0x2a, 0x27, 0x26, 0x8e, 0x52, 0x05, 0x3e, 0xcd, 0x31, 0xc3, 0xa7, 0x17, 0x2c, 0xcb, 0x9d, 0xdc, 0xee, 0x81, 0x9b, 0x30, 0x6a, 0x5b, 0x3c, 0x66, 0xb7, 0x57, 0x3c, 0xa4, 0xfa, 0x88, 0xef, 0xc6, 0xf3, 0xc4, 0xa0, 0x0b, 0xfa, 0x0a, 0xe7, 0x13, 0x9f, 0x64, 0x54, 0x3a, 0x4d, 0xac, 0x3d, 0x05, 0x82, 0x3f, 0x6f, 0xf4, 0x77, 0xcf, 0xce, 0xc8, 0x4f, 0xe2, 0xac, 0x7a, 0x68, 0xb1, 0x72, 0x04, 0xb3, 0x90, 0x23, 0x2e, 0x11, 0x03, 0x10, 0xc4, 0xe8, 0x99, 0xc4, 0xe7, 0xc1, 0x09, 0x67, 0xdb, 0x4a, 0xcd, 0xe0, 0x42, 0xdb, 0xbf, 0x19, 0xdb, 0xe0, 0x0b, 0x4b, 0x47, 0x41, 0xde, 0x10, 0x20, 0xaa, 0xaa, 0xff, 0xb5, 0x05, 0x4c, 0x79, 0x7c, 0x9f, 0x13, 0x6f, 0x7d, 0x93, 0xac, 0x3f, 0xc8, 0xca, 0xff, 0x66, 0x54, 0x24, 0x2d, 0x78, 0x21, 0xeb, 0xee, 0x51, 0x7b, 0xf5, 0x37, 0xf4, 0x43, 0x66, 0xa0, 0xfd, 0xd4, 0x5a, 0xe0, 0x5b, 0x99, 0x09, 0xc2, 0xe6, 0xcc, 0x1e, 0xd9, 0x28, 0x1e, 0xff, 0x43, 0x99, 0xf7, 0x6c, 0x96, 0xb9, 0x62, 0x33, 0xec, 0x29, 0xae, 0x0b, 0xbf, 0x0d, 0x75, 0x2b, 0x23, 0x4f, 0xc1, 0x97, 0x38, 0x9f, 0x51, 0x05, 0x0a, 0xa1, 0xac, 0xd0, 0x1c, 0x07, 0x4c, 0x3a, 0xc8, 0xfb, 0xdb, 0x9e, 0xa8, 0xb6, 0x51, 0xa9, 0x59, 0x95, 0xe8, 0xdb, 0x4a, 0xd5, 0xc4, 0x3b, 0x6c, 0x86, 0x73, 0xe5, 0xa1, 0x26, 0xe7, 0xee, 0x94, 0xb8, 0xdf, 0xf4, 0xc5, 0xaf, 0xc0, 0x12, 0x59, 0xbc, 0x8d, 0xa7, 0x69, 0x50, 0xba, 0xe6, 0xf8, 0xba, 0xe7, 0x15, 0xf5, 0x09, 0x85, 0xb0, 0xd6, 0xf6, 0x6d, 0x04, 0xc6, 0xfe, 0xf3, 0xb7, 0x00, 0x72, 0x0e, 0xec, 0xdc, 0xdf, 0x17, 0x1b, 0xb7, 0xb1, 0xec, 0xbe, 0x72, 0x89, 0xc4, 0x67, 0xc1 }; static const uint8_t ac_rsaes_oaep_vect3_prime1[] = { 0xdc, 0x43, 0x10, 0x50, 0xf7, 0x82, 0xe8, 0x94, 0xfb, 0x52, 0x48, 0x24, 0x7d, 0x98, 0xcb, 0x7d, 0x58, 0xb8, 0xd1, 0xe2, 0x4f, 0x3b, 0x55, 0xd0, 0x41, 0xc5, 0x6e, 0x4d, 0xe0, 0x86, 0xb0, 0xd5, 0xbb, 0x02, 0x8b, 0xda, 0x42, 0xee, 0xb5, 0xd2, 0x34, 0xd5, 0x68, 0x1e, 0x58, 0x09, 0xd4, 0x15, 0xe6, 0xa2, 0x89, 0xad, 0x4c, 0xfb, 0xf7, 0x8f, 0x97, 0x8f, 0x6c, 0x35, 0x81, 0x4f, 0x50, 0xee, 0xbf, 0xf1, 0xc5, 0xb8, 0x0a, 0x69, 0xf7, 0x88, 0xe8, 0x1e, 0x6b, 0xab, 0x5d, 0xda, 0xa7, 0x83, 0x69, 0xd6, 0x59, 0xd1, 0x43, 0xec, 0x6f, 0x17, 0xe7, 0x98, 0x13, 0xa5, 0x75, 0xcf, 0xad, 0x9c, 0x56, 0x91, 0x56, 0xb9, 0x01, 0x13, 0xe2, 0xe9, 0x11, 0x0a, 0xd9, 0xe7, 0xb4, 0x8a, 0x1c, 0x93, 0x48, 0xa6, 0xe6, 0x53, 0x32, 0x11, 0x91, 0x29, 0x0e, 0xa3, 0x6c, 0xfb, 0x3a, 0x5b, 0x18, 0xf1 }; static const uint8_t ac_rsaes_oaep_vect3_prime2[] = { 0xbd, 0x1a, 0x81, 0xe7, 0x97, 0x7f, 0x98, 0x98, 0x12, 0x22, 0x73, 0xae, 0x32, 0x22, 0xb5, 0x98, 0xea, 0x5f, 0xb1, 0x9e, 0xb4, 0xea, 0xbc, 0x38, 0x30, 0x8a, 0x5e, 0x32, 0x19, 0x66, 0x03, 0xb2, 0xe5, 0x00, 0xff, 0xb7, 0x9f, 0x5b, 0x88, 0x68, 0x16, 0x61, 0x1d, 0xeb, 0xc4, 0x72, 0xfa, 0xc4, 0x55, 0x44, 0x07, 0x0b, 0xeb, 0x05, 0x7c, 0x94, 0x13, 0x78, 0xa6, 0x86, 0x8a, 0xf3, 0xb7, 0xa0, 0x3d, 0x3f, 0x98, 0x80, 0xec, 0x47, 0xd5, 0xe0, 0x89, 0xb9, 0x4f, 0xbd, 0xe5, 0x42, 0xab, 0xa9, 0xae, 0x8d, 0x72, 0xc5, 0x70, 0x88, 0xd7, 0xab, 0xf5, 0xb1, 0x31, 0xf3, 0x90, 0x98, 0xf7, 0xbc, 0x16, 0x0f, 0x90, 0x53, 0x6a, 0xbc, 0x94, 0x92, 0xfd, 0x4e, 0x06, 0xf3, 0xed, 0x72, 0x99, 0xd4, 0xb9, 0x7b, 0xb0, 0x36, 0x77, 0x20, 0x7d, 0x95, 0x66, 0x9f, 0x14, 0x0c, 0xfb, 0xc2, 0x0f, 0x25 }; static const uint8_t ac_rsaes_oaep_vect3_exp1[] = { 0xa9, 0x4b, 0x52, 0x8b, 0x28, 0xf2, 0x91, 0x59, 0x91, 0x21, 0xd9, 0x19, 0x52, 0xff, 0xd1, 0xc7, 0xf2, 0x1d, 0x7c, 0x14, 0x79, 0xd9, 0x9d, 0x47, 0x88, 0x85, 0xfb, 0x16, 0x18, 0x70, 0xee, 0x12, 0x18, 0xbf, 0x08, 0x47, 0x26, 0x12, 0xdb, 0xe5, 0x49, 0x7e, 0x8d, 0x9c, 0x65, 0x06, 0x88, 0xe0, 0x9c, 0x78, 0x69, 0x61, 0xae, 0x3e, 0x2c, 0x35, 0x4d, 0xc4, 0x8a, 0xe3, 0x45, 0x14, 0x75, 0x9c, 0x4c, 0x23, 0xc4, 0x58, 0x84, 0x88, 0x96, 0x1d, 0xc0, 0x6b, 0x41, 0x4e, 0x61, 0xc0, 0xe1, 0xe7, 0xfb, 0xbd, 0x29, 0x23, 0xd3, 0x15, 0x32, 0xfe, 0x28, 0x9f, 0x96, 0xda, 0x22, 0x07, 0x11, 0xe5, 0x8c, 0x14, 0x01, 0x98, 0x08, 0xe0, 0x04, 0x14, 0x27, 0x69, 0x33, 0xbb, 0x07, 0xe4, 0xef, 0xb9, 0xb4, 0xa9, 0xb3, 0x76, 0x56, 0x91, 0x72, 0x05, 0x20, 0x9f, 0x33, 0xf0, 0x95, 0x15, 0xd7, 0xc1 }; static const uint8_t ac_rsaes_oaep_vect3_exp2[] = { 0x3a, 0xf0, 0xe7, 0x2a, 0x93, 0x3a, 0xef, 0x09, 0xff, 0x25, 0x03, 0xdf, 0x78, 0xba, 0xfe, 0xd5, 0x31, 0xc0, 0x2f, 0xf1, 0xa2, 0xbc, 0x43, 0x7c, 0x54, 0x0c, 0xdc, 0xbd, 0x4a, 0xd3, 0x54, 0x35, 0xcf, 0x51, 0x17, 0x63, 0x59, 0x65, 0x43, 0x48, 0x06, 0x29, 0xb1, 0x14, 0xca, 0x7f, 0x78, 0x0f, 0xf7, 0xef, 0xa3, 0x2e, 0xa0, 0xcb, 0x6e, 0x00, 0x0d, 0x6d, 0x9e, 0xa1, 0xf2, 0xef, 0x71, 0xfd, 0x9c, 0xf9, 0x94, 0x84, 0x22, 0xa1, 0x65, 0x55, 0x7e, 0x37, 0xe7, 0x55, 0xed, 0xfe, 0x70, 0xd9, 0x0b, 0x92, 0x05, 0x02, 0xeb, 0x47, 0x8b, 0xc9, 0x8a, 0x63, 0xf7, 0x88, 0xce, 0x3a, 0x0f, 0x85, 0x6d, 0x6e, 0xde, 0x72, 0x51, 0xa3, 0x83, 0xbf, 0xa8, 0xfa, 0x48, 0x0a, 0x81, 0xa9, 0x25, 0xaf, 0x7b, 0x3c, 0xc5, 0x38, 0xc4, 0xba, 0xb8, 0xc9, 0xf7, 0x59, 0x7f, 0xfb, 0x68, 0x01, 0x1d, 0x8d }; static const uint8_t ac_rsaes_oaep_vect3_coeff[] = { 0x26, 0x40, 0xfb, 0xfb, 0xcf, 0xef, 0xb1, 0x63, 0xee, 0x7a, 0x87, 0xb6, 0x48, 0x3a, 0x66, 0xee, 0x41, 0xf9, 0x56, 0xd9, 0x0f, 0xa8, 0xa7, 0x93, 0x9b, 0xfc, 0x04, 0x2e, 0xe0, 0x92, 0x4b, 0x1b, 0x79, 0x93, 0xd0, 0x44, 0x5f, 0x75, 0x8d, 0x51, 0x93, 0x3e, 0x85, 0x17, 0x9c, 0x03, 0x20, 0xb0, 0xc9, 0x68, 0xb4, 0x8a, 0x91, 0xc3, 0x8b, 0x5b, 0xe9, 0x23, 0xe1, 0x09, 0x7c, 0x0c, 0x56, 0x2f, 0x88, 0xd4, 0x22, 0x94, 0xb6, 0xa2, 0x75, 0x9b, 0xaf, 0xa5, 0x42, 0x8a, 0x74, 0xf1, 0x27, 0x08, 0x74, 0xe4, 0x5f, 0x6f, 0xcc, 0x60, 0xf2, 0x16, 0x02, 0xde, 0x5e, 0xcc, 0xd1, 0x43, 0xcf, 0x31, 0x24, 0x1f, 0x59, 0x21, 0xb5, 0xad, 0x39, 0x83, 0xfb, 0x54, 0xef, 0x17, 0xbe, 0x3b, 0x28, 0x53, 0x67, 0xe5, 0x0c, 0x99, 0x9c, 0x67, 0x24, 0x7b, 0x55, 0x2f, 0xe4, 0xbf, 0xce, 0x94, 0x5f, 0x7b }; /* "tcId" : 7 */ static const uint8_t ac_rsaes_oaep_vect3_ptx[] = { 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; static const uint8_t ac_rsaes_oaep_vect3_out[] = { 0x76, 0xf7, 0xb6, 0xe1, 0xcf, 0x45, 0xb0, 0x05, 0xad, 0x58, 0xb5, 0x35, 0x4c, 0xfc, 0x57, 0x99, 0xf7, 0x4e, 0xdf, 0xb2, 0x7f, 0x27, 0xb4, 0x14, 0xb4, 0xd2, 0x55, 0x00, 0xa1, 0xec, 0x4b, 0xcd, 0x46, 0xc6, 0xb6, 0x56, 0x03, 0xb2, 0x04, 0xf6, 0x9a, 0x2a, 0x71, 0xb8, 0xd1, 0x09, 0x9c, 0xe9, 0x6c, 0x8e, 0xe5, 0x2e, 0x11, 0x9e, 0xd9, 0xb0, 0x80, 0xd8, 0x6d, 0x82, 0x78, 0x9e, 0x3e, 0x57, 0x77, 0xcc, 0x5f, 0x92, 0x0b, 0x14, 0x71, 0x26, 0xec, 0x86, 0x12, 0xb2, 0x06, 0xbc, 0x57, 0x34, 0xe8, 0x28, 0xac, 0x81, 0x9f, 0x90, 0xea, 0x71, 0x91, 0x83, 0x2d, 0x57, 0x0d, 0x37, 0x6d, 0xf2, 0xc4, 0xe3, 0xeb, 0x50, 0x70, 0xfd, 0x83, 0x82, 0xf8, 0xc0, 0xa9, 0xb8, 0x9d, 0xa9, 0x28, 0xbf, 0xbd, 0xd2, 0x4b, 0xf1, 0xd1, 0x7e, 0xbc, 0x83, 0xf9, 0x23, 0x7a, 0x51, 0x35, 0x2f, 0xf0, 0x4b, 0x6b, 0xb3, 0x84, 0x8c, 0xb6, 0xa9, 0xc1, 0x95, 0xe5, 0x36, 0x9f, 0x4b, 0x6e, 0xd9, 0xb4, 0xcc, 0x16, 0x63, 0x77, 0xf8, 0x8c, 0x7e, 0x6d, 0xb6, 0xef, 0x78, 0xc0, 0xe1, 0xbf, 0xba, 0xc5, 0xa3, 0x82, 0x58, 0x67, 0xaf, 0x9b, 0x22, 0x68, 0x9b, 0x62, 0x7d, 0xcd, 0x8d, 0x14, 0x41, 0xb5, 0x15, 0xb1, 0x5b, 0x78, 0x68, 0x8b, 0x52, 0xb0, 0x4d, 0xf4, 0x15, 0x7a, 0x88, 0x8a, 0xab, 0xdb, 0x9e, 0x79, 0x2c, 0x65, 0xfc, 0xbd, 0xcd, 0x03, 0x74, 0x3f, 0xe4, 0x5e, 0x63, 0x7a, 0xfa, 0x7e, 0x42, 0x27, 0x82, 0xe6, 0xda, 0x58, 0xb9, 0x51, 0x63, 0xac, 0xd5, 0x93, 0x53, 0xe6, 0x34, 0x33, 0x7a, 0xbb, 0x1c, 0x15, 0xb8, 0x31, 0xa9, 0xde, 0xc7, 0x9c, 0x51, 0x7a, 0x5b, 0xe0, 0xb4, 0xee, 0x43, 0xf7, 0x54, 0x4a, 0x2e, 0x9b, 0xf6, 0xaf, 0x2b, 0xc5, 0x3b, 0x08, 0x0c, 0x60, 0xdc, 0x2b, 0xc6 }; /* * PKCS#1 v1.5 Signature Example 15 2048-bit RSA key pair * from http://armcryptolib.das-labor.org/trac/browser/testvectors/rsa-pkcs-1v2-1-vec/oaep-vect.txt */ static const uint8_t ac_rsaes_pkcs1_v1_5_example15_modulus[] = { 0xdc, 0xfa, 0x10, 0xff, 0xa7, 0x46, 0x65, 0xae, 0xef, 0x87, 0x09, 0x74, 0xea, 0x99, 0xb2, 0xce, 0x54, 0x54, 0x7c, 0x67, 0xf4, 0x2a, 0xaa, 0x6d, 0xd0, 0x1a, 0x2e, 0xd3, 0x1f, 0xd2, 0xc2, 0x42, 0xaf, 0x5d, 0x96, 0x0b, 0x1f, 0x89, 0x6e, 0xfb, 0xa3, 0x54, 0x3d, 0x65, 0x54, 0xb7, 0xb1, 0x26, 0x87, 0xa5, 0xc6, 0x88, 0x56, 0x8f, 0x32, 0xe0, 0x26, 0xc5, 0x32, 0xd2, 0x59, 0x93, 0xb9, 0x7a, 0x7c, 0x28, 0x42, 0xec, 0x2b, 0x8e, 0x12, 0x35, 0xee, 0xe2, 0x41, 0x4d, 0x25, 0x80, 0x6c, 0x6f, 0xba, 0xe4, 0x38, 0x95, 0x4e, 0xba, 0x9d, 0x27, 0x55, 0xdf, 0xfe, 0xeb, 0x1b, 0x47, 0x70, 0x09, 0x57, 0x81, 0x5a, 0x8a, 0x23, 0x3f, 0x97, 0xb1, 0xa2, 0xc7, 0x14, 0xb3, 0xe2, 0xbe, 0x2e, 0x42, 0xd8, 0xbe, 0x30, 0xb1, 0x96, 0x15, 0x82, 0xea, 0x99, 0x48, 0x91, 0x0e, 0x0c, 0x79, 0x7c, 0x50, 0xfc, 0x4b, 0xb4, 0x55, 0xf0, 0xfc, 0x45, 0xe5, 0xe3, 0x4e, 0x63, 0x96, 0xac, 0x5b, 0x2d, 0x46, 0x23, 0x93, 0x65, 0xc7, 0xf3, 0xda, 0xaf, 0x09, 0x09, 0x40, 0x0d, 0x61, 0xcf, 0x9e, 0x0c, 0xa8, 0x08, 0x3e, 0xaf, 0x33, 0x5a, 0x6f, 0xce, 0xb6, 0x86, 0x3c, 0x1c, 0xc0, 0xcf, 0x5a, 0x17, 0x1a, 0xff, 0x35, 0xd9, 0x7e, 0xcb, 0x60, 0xef, 0x25, 0x1c, 0x7e, 0xc2, 0xc8, 0xa5, 0x88, 0x36, 0x1d, 0xc4, 0x12, 0x66, 0xa4, 0xb7, 0xed, 0x38, 0xb0, 0x26, 0xce, 0x0d, 0x53, 0x78, 0x64, 0x49, 0xdb, 0xb1, 0x1a, 0x06, 0xea, 0x33, 0xcc, 0xf1, 0xec, 0xa5, 0x75, 0x20, 0x1e, 0xd1, 0xaa, 0x47, 0x3e, 0xd1, 0x18, 0x7e, 0xc1, 0xd8, 0xa7, 0x44, 0xea, 0x34, 0x5b, 0xed, 0x7e, 0xa0, 0x0e, 0xe4, 0xe8, 0x1b, 0xba, 0x46, 0x48, 0x60, 0x1d, 0xd5, 0x37, 0xdc, 0x91, 0x01, 0x5d, 0x31, 0xf0, 0xc2, 0xc1, }; static const uint8_t ac_rsaes_pkcs1_v1_5_example15_pub_exp[] = { 0x01, 0x00, 0x01, }; static const uint8_t ac_rsaes_pkcs1_v1_5_example15_priv_exp[] = { 0x21, 0x95, 0x08, 0x51, 0xcd, 0xf2, 0x53, 0x20, 0x31, 0x8b, 0x30, 0x5a, 0xfa, 0x0f, 0x37, 0x1f, 0x07, 0xae, 0x5a, 0x44, 0xb3, 0x14, 0xeb, 0xd7, 0x29, 0xf5, 0xdc, 0xb1, 0x5d, 0xa7, 0xfa, 0x39, 0x47, 0xac, 0xdd, 0x91, 0x5d, 0xae, 0xd5, 0x74, 0xbd, 0x16, 0xdf, 0x88, 0xbf, 0x85, 0xf6, 0x10, 0x60, 0xb3, 0x87, 0x17, 0x2f, 0xae, 0x6e, 0x01, 0x26, 0x2b, 0x38, 0x64, 0xc2, 0xd3, 0xc2, 0x2f, 0x94, 0xe0, 0x4a, 0x81, 0x59, 0x42, 0x2b, 0x4e, 0xd2, 0x79, 0xc4, 0x8a, 0x4c, 0x9d, 0x76, 0x7d, 0x49, 0x66, 0x07, 0x1a, 0x5b, 0xbf, 0x5d, 0x04, 0x3e, 0x16, 0xff, 0x46, 0xec, 0x1b, 0xa0, 0x71, 0x6f, 0x00, 0xbb, 0xc9, 0x7b, 0xff, 0x5d, 0x56, 0x93, 0xe2, 0x14, 0xe9, 0x9c, 0x97, 0x21, 0xf1, 0x2b, 0x3e, 0xc6, 0x28, 0x2a, 0xe2, 0xa4, 0x85, 0x72, 0x1b, 0x96, 0xdd, 0xcf, 0x74, 0x03, 0xfa, 0x03, 0x7d, 0x0c, 0x57, 0xab, 0x46, 0x3c, 0x44, 0x8d, 0xe5, 0xcc, 0x12, 0x26, 0x5a, 0xdd, 0x88, 0x6d, 0x31, 0x1e, 0xa8, 0xd8, 0xa5, 0x90, 0x3f, 0xa5, 0x6c, 0x5f, 0x1c, 0x9c, 0xf2, 0xeb, 0x11, 0xcb, 0x65, 0x7a, 0x1a, 0x7d, 0x3e, 0x41, 0x35, 0x2d, 0xc3, 0xe6, 0x86, 0x89, 0x8c, 0x4c, 0xe4, 0x30, 0x5e, 0x8b, 0x63, 0x8e, 0x1b, 0x08, 0xa2, 0xa8, 0x6c, 0xc9, 0xeb, 0x98, 0x66, 0xf3, 0x49, 0x9a, 0xc7, 0x7b, 0x61, 0x36, 0xb8, 0x1c, 0xb2, 0x76, 0xd6, 0x14, 0xcf, 0xeb, 0x7b, 0x6e, 0xd3, 0xf3, 0xbc, 0x77, 0x5e, 0x46, 0xc0, 0x00, 0x66, 0xeb, 0xee, 0xe2, 0xcf, 0xf7, 0x16, 0x6b, 0x57, 0x52, 0x05, 0x98, 0x94, 0x7f, 0xf6, 0x21, 0x03, 0x20, 0xb2, 0x88, 0xfb, 0x4f, 0x2c, 0x3f, 0x8f, 0xe9, 0x7b, 0x27, 0x94, 0x14, 0xeb, 0xf7, 0x20, 0x30, 0x00, 0xa1, 0x9f, 0xc0, 0x42, 0x48, 0x75, }; static const uint8_t ac_rsaes_pkcs1_v1_5_example15_prime1[] = { 0xf1, 0x23, 0xbf, 0xe5, 0x3d, 0xe9, 0x7a, 0x56, 0x9d, 0x91, 0xad, 0xcf, 0x55, 0x6f, 0xa6, 0x25, 0xad, 0x30, 0xf3, 0xfd, 0x3d, 0x81, 0x1f, 0x9e, 0x91, 0xe6, 0xaf, 0x44, 0xb6, 0xe7, 0x80, 0xcb, 0x0f, 0x32, 0x78, 0x29, 0xfb, 0x21, 0x19, 0x0a, 0xe2, 0x80, 0x66, 0x46, 0xd7, 0x28, 0xcd, 0x9b, 0x65, 0x31, 0x13, 0x2b, 0x1e, 0xbf, 0xef, 0x12, 0x72, 0x99, 0x30, 0x60, 0xf1, 0xce, 0x70, 0xb1, 0x24, 0x39, 0x30, 0x91, 0xee, 0x85, 0x93, 0xb7, 0x27, 0x36, 0x7e, 0xdb, 0xba, 0x00, 0x9e, 0xc5, 0xbe, 0x17, 0xc4, 0xac, 0xee, 0x12, 0x0c, 0x84, 0x12, 0x67, 0xd4, 0x76, 0x31, 0xa1, 0x6c, 0x36, 0xa6, 0xd1, 0xc9, 0x99, 0x73, 0xc1, 0xb0, 0xb5, 0xa8, 0x35, 0xbf, 0x39, 0xfe, 0xaf, 0xe8, 0xf6, 0x42, 0x1f, 0xd9, 0xc2, 0xa9, 0x0b, 0xc2, 0x79, 0x76, 0x65, 0x9e, 0x67, 0xbc, 0x83, 0x12, 0x4d, }; static const uint8_t ac_rsaes_pkcs1_v1_5_example15_prime2[] = { 0xea, 0x98, 0x39, 0xb7, 0xe3, 0x7e, 0xa8, 0x9b, 0xbd, 0xa2, 0x7e, 0x4c, 0x93, 0x47, 0x1c, 0xb4, 0xfd, 0x92, 0x18, 0x9a, 0x0a, 0x96, 0xbc, 0xb4, 0xd7, 0x56, 0x93, 0xf1, 0x8a, 0x5c, 0x2f, 0x74, 0x2a, 0xf9, 0xe3, 0x6f, 0xde, 0x67, 0x9f, 0xbd, 0x9e, 0xae, 0x34, 0x5f, 0xa2, 0x69, 0x52, 0x7b, 0x69, 0x65, 0x02, 0x1c, 0x4b, 0xdf, 0x54, 0xd6, 0x85, 0xbf, 0x08, 0x96, 0x0c, 0xc9, 0x76, 0xf6, 0x8d, 0xca, 0x21, 0xce, 0xbf, 0x44, 0xf2, 0x68, 0xa5, 0x9d, 0xab, 0x8d, 0x1a, 0x25, 0xe5, 0x19, 0xf5, 0x14, 0x7e, 0x1f, 0x45, 0xfe, 0x28, 0x7d, 0x74, 0xcf, 0x72, 0x5b, 0xec, 0x13, 0x26, 0xd3, 0x42, 0x12, 0xc5, 0x6c, 0xf4, 0xff, 0xfa, 0x20, 0x2f, 0x57, 0xb6, 0x8e, 0xe8, 0xcc, 0xa9, 0x43, 0xf3, 0xc1, 0x38, 0xc4, 0xcd, 0xe3, 0x3b, 0xdf, 0x2c, 0x94, 0x40, 0xdf, 0x65, 0x32, 0x24, 0x45, }; static const uint8_t ac_rsaes_pkcs1_v1_5_example15_exp1[] = { 0xca, 0x0c, 0x9b, 0x60, 0xb8, 0xe4, 0xa6, 0x06, 0x67, 0x56, 0xc6, 0x5d, 0x20, 0x88, 0x41, 0x9d, 0xf6, 0x25, 0x3b, 0x7b, 0x68, 0x8a, 0x85, 0xf4, 0xf6, 0xe9, 0x64, 0xd8, 0x5d, 0xad, 0x52, 0xa4, 0x52, 0x62, 0x86, 0x7f, 0x1e, 0x96, 0x18, 0x06, 0x9f, 0xcc, 0xd8, 0x65, 0xe9, 0x28, 0x9e, 0x46, 0xe3, 0x9e, 0x20, 0x22, 0x94, 0x4c, 0x5c, 0x44, 0x87, 0xd3, 0x45, 0xcf, 0x25, 0x2d, 0x46, 0x0d, 0x97, 0x7d, 0x77, 0xed, 0xfe, 0xfe, 0xdb, 0xcb, 0xae, 0x46, 0xa2, 0x3a, 0xf7, 0xfa, 0x47, 0x0f, 0x07, 0x7d, 0xa0, 0xe5, 0x09, 0x42, 0x04, 0x4c, 0xb1, 0xa3, 0x60, 0x49, 0x7c, 0xc2, 0x76, 0x0a, 0xc0, 0xf2, 0xad, 0x4a, 0x2f, 0xcd, 0x0e, 0x84, 0xd7, 0xa1, 0xd9, 0x4d, 0xfd, 0xd2, 0x65, 0x8f, 0xd9, 0xce, 0x18, 0x47, 0x5c, 0x1f, 0xa7, 0x5e, 0xe0, 0xce, 0xba, 0xd0, 0xcf, 0x0a, 0xc0, 0x4d, }; static const uint8_t ac_rsaes_pkcs1_v1_5_example15_exp2[] = { 0x52, 0x81, 0x71, 0x23, 0x3c, 0x4e, 0x4a, 0x6c, 0x63, 0xb8, 0x67, 0x64, 0xf5, 0x13, 0x38, 0x84, 0x6a, 0xfd, 0xdb, 0xcb, 0x29, 0x58, 0x34, 0x4c, 0x01, 0xc4, 0x00, 0x4a, 0x1d, 0xd8, 0x28, 0x14, 0x5a, 0x1d, 0x02, 0xa1, 0x50, 0x7d, 0xef, 0x4f, 0x58, 0x24, 0x7a, 0x64, 0xfc, 0x10, 0xc0, 0xa2, 0x88, 0xc1, 0xae, 0x89, 0x57, 0x21, 0xd7, 0x8b, 0x8f, 0x04, 0x4d, 0xb7, 0xc0, 0x0d, 0x86, 0xda, 0x55, 0xa9, 0xb6, 0x54, 0x29, 0x2e, 0xcd, 0x76, 0x82, 0x70, 0xbe, 0x69, 0xe4, 0xbd, 0x59, 0x22, 0xd4, 0xef, 0xfd, 0x1f, 0x70, 0x95, 0x5f, 0x96, 0x27, 0xe3, 0xe1, 0x9b, 0x74, 0x9e, 0x93, 0xb4, 0x0e, 0xf3, 0xdd, 0x1d, 0x61, 0xd9, 0x39, 0x15, 0xe2, 0xb0, 0x9d, 0x93, 0x0b, 0x4b, 0x17, 0x68, 0xbf, 0xac, 0xc0, 0x13, 0x6f, 0x39, 0xb0, 0xcf, 0xdf, 0xb4, 0xd0, 0x50, 0x01, 0x1e, 0x2e, 0x65, }; static const uint8_t ac_rsaes_pkcs1_v1_5_example15_coeff[] = { 0xdf, 0x2e, 0xb2, 0x32, 0x2c, 0xc2, 0xda, 0xab, 0xf4, 0xd1, 0x46, 0x55, 0x08, 0xf4, 0x15, 0x21, 0xcd, 0xa7, 0xce, 0xff, 0x23, 0xeb, 0xe6, 0x1d, 0x00, 0xd4, 0x41, 0xee, 0x72, 0x8d, 0xda, 0x5d, 0x16, 0xc7, 0xbf, 0x92, 0x0c, 0xd9, 0x5f, 0x34, 0xbe, 0xb4, 0xfe, 0x32, 0xee, 0x81, 0x7e, 0xf3, 0x36, 0x2e, 0x0b, 0xcd, 0x1d, 0x12, 0x45, 0xf7, 0xb0, 0x77, 0x93, 0xea, 0xa1, 0x90, 0xdc, 0x5a, 0x37, 0xfd, 0xaf, 0x4c, 0x68, 0xe2, 0xca, 0x13, 0x97, 0x2d, 0x7f, 0x51, 0x48, 0xb7, 0x96, 0xb6, 0xfb, 0x6d, 0x7a, 0xdd, 0xa0, 0x7b, 0xd2, 0xcd, 0x13, 0xbe, 0x98, 0xce, 0xbe, 0xd1, 0xed, 0xc6, 0xca, 0x41, 0x2e, 0x39, 0x53, 0x50, 0xc5, 0x9a, 0x1d, 0x84, 0x2b, 0xc4, 0xaa, 0x2f, 0x3c, 0x0b, 0x24, 0x3f, 0xde, 0x7d, 0xfd, 0x95, 0x35, 0x6f, 0x24, 0x39, 0x25, 0x1a, 0x11, 0x72, 0xc4, 0x5e, }; /* PKCS#1 v1.5 Encrypt Example 15.9 */ #define ac_rsaes_pkcs1_v1_5_vect15_modulus ac_rsaes_pkcs1_v1_5_example15_modulus #define ac_rsaes_pkcs1_v1_5_vect15_pub_exp ac_rsaes_pkcs1_v1_5_example15_pub_exp #define ac_rsaes_pkcs1_v1_5_vect15_priv_exp ac_rsaes_pkcs1_v1_5_example15_priv_exp #define ac_rsaes_pkcs1_v1_5_vect15_prime1 ac_rsaes_pkcs1_v1_5_example15_prime1 #define ac_rsaes_pkcs1_v1_5_vect15_prime2 ac_rsaes_pkcs1_v1_5_example15_prime2 #define ac_rsaes_pkcs1_v1_5_vect15_exp1 ac_rsaes_pkcs1_v1_5_example15_exp1 #define ac_rsaes_pkcs1_v1_5_vect15_exp2 ac_rsaes_pkcs1_v1_5_example15_exp2 #define ac_rsaes_pkcs1_v1_5_vect15_coeff ac_rsaes_pkcs1_v1_5_example15_coeff /* * PKCS#1 v1.5 Encryption Example 15.9 * from ftp://ftp.rsa.com/pub/rsalabs/tmp/pkcs1v15crypt-vectors.txt */ static const uint8_t ac_rsaes_pkcs1_v1_5_vect15_ptx[] = { 0x9a, 0x13, 0x96, 0x62, 0x2d, 0x06, 0x6c, 0x10, 0x56, 0x08, 0x58, 0xc2, 0xc4, 0xcd, 0x5c, 0x04, 0x44, 0x9e, 0x2b, 0x95, 0x50, 0xc5, 0xbc, 0x92, 0x93, 0x76, 0x1a, 0x91, 0x04, 0x41, 0x1d, 0xa1, 0x8a, 0x57, 0xd9, 0xb6, 0xa9, 0x97, 0x33, 0x3c, 0xdb, 0xce, 0x77, 0xe9, 0xfd, 0xbe, 0x6b, 0xb8, 0x31, }; static const uint8_t ac_rsaes_pkcs1_v1_5_vect15_out[] = { 0x10, 0x0e, 0xce, 0x63, 0x45, 0x25, 0xd4, 0x67, 0xf6, 0xd4, 0xa6, 0xb6, 0x6e, 0xde, 0x1c, 0xc2, 0x37, 0xf6, 0x1f, 0xb2, 0xb6, 0x70, 0x23, 0xa8, 0x3d, 0xc4, 0x56, 0xb9, 0x2c, 0xda, 0x18, 0x3e, 0xd6, 0x62, 0x0f, 0xe5, 0x7d, 0x5a, 0x67, 0x33, 0x2c, 0x77, 0x23, 0x3a, 0xc1, 0xe8, 0x72, 0x5b, 0x36, 0xf8, 0xe1, 0xb1, 0x08, 0x41, 0x2c, 0xa6, 0xfb, 0x35, 0xdc, 0xd4, 0xd8, 0x16, 0x77, 0xa2, 0xb3, 0x0d, 0x5e, 0xaf, 0x25, 0xe0, 0xb9, 0x19, 0x1b, 0x38, 0xf7, 0xee, 0xf8, 0x3f, 0x91, 0x21, 0xa8, 0x08, 0x43, 0x8c, 0x92, 0xab, 0x03, 0xf5, 0x20, 0x80, 0x7b, 0xc9, 0xa8, 0x94, 0x70, 0x5e, 0xaf, 0x4e, 0xed, 0x06, 0x68, 0x23, 0xa6, 0x7a, 0xa2, 0xa5, 0x59, 0x9c, 0xd9, 0x5e, 0x58, 0xda, 0x7c, 0x09, 0x48, 0x36, 0xd2, 0xaf, 0xeb, 0xa3, 0x9d, 0xd0, 0x09, 0xa6, 0x4a, 0xde, 0x03, 0x05, 0x33, 0x76, 0xf0, 0x29, 0x36, 0xcf, 0x3f, 0x56, 0xbf, 0x64, 0xc1, 0xf3, 0xbd, 0xc0, 0x7c, 0x45, 0xa9, 0x5b, 0x9f, 0xcd, 0x93, 0x96, 0xcd, 0x9a, 0x8d, 0x41, 0xbc, 0xc5, 0x64, 0x24, 0x93, 0x7a, 0x13, 0x71, 0xb3, 0x84, 0x7c, 0x90, 0x5b, 0x9a, 0xb5, 0x84, 0x02, 0x39, 0x3d, 0x40, 0x46, 0xe4, 0xa0, 0x15, 0xc1, 0x47, 0x08, 0xf7, 0x4c, 0xe7, 0x79, 0x0e, 0xba, 0x8a, 0xf7, 0x92, 0x07, 0x24, 0x40, 0xbc, 0xaf, 0xb1, 0x4c, 0x0f, 0x81, 0x08, 0x97, 0x11, 0x87, 0xc8, 0x0f, 0x46, 0x3a, 0x1f, 0xff, 0x25, 0x86, 0x46, 0xea, 0x16, 0xe5, 0x1c, 0x6e, 0xe3, 0x61, 0xb6, 0x61, 0xa1, 0x4f, 0x07, 0xcd, 0x4f, 0x5a, 0x82, 0xc7, 0x09, 0xf4, 0x94, 0xf1, 0xdf, 0x0f, 0x80, 0x3b, 0x6f, 0x64, 0xa7, 0x2f, 0xb9, 0xc4, 0x50, 0xff, 0xe2, 0x68, 0xfc, 0xab, 0x48, 0x7d, 0x4d, 0x63, 0x01, 0x3e, 0x41, }; /* * PKCS#1 v1.5 Encryption Example 10.1 * from http://armcryptolib.das-labor.org/trac/browser/testvectors/rsa-pkcs-1v2-1-vec/oaep-vect.txt */ static const uint8_t ac_rsaes_oaep_vect10_modulus[] = { 0xae, 0x45, 0xed, 0x56, 0x01, 0xce, 0xc6, 0xb8, 0xcc, 0x05, 0xf8, 0x03, 0x93, 0x5c, 0x67, 0x4d, 0xdb, 0xe0, 0xd7, 0x5c, 0x4c, 0x09, 0xfd, 0x79, 0x51, 0xfc, 0x6b, 0x0c, 0xae, 0xc3, 0x13, 0xa8, 0xdf, 0x39, 0x97, 0x0c, 0x51, 0x8b, 0xff, 0xba, 0x5e, 0xd6, 0x8f, 0x3f, 0x0d, 0x7f, 0x22, 0xa4, 0x02, 0x9d, 0x41, 0x3f, 0x1a, 0xe0, 0x7e, 0x4e, 0xbe, 0x9e, 0x41, 0x77, 0xce, 0x23, 0xe7, 0xf5, 0x40, 0x4b, 0x56, 0x9e, 0x4e, 0xe1, 0xbd, 0xcf, 0x3c, 0x1f, 0xb0, 0x3e, 0xf1, 0x13, 0x80, 0x2d, 0x4f, 0x85, 0x5e, 0xb9, 0xb5, 0x13, 0x4b, 0x5a, 0x7c, 0x80, 0x85, 0xad, 0xca, 0xe6, 0xfa, 0x2f, 0xa1, 0x41, 0x7e, 0xc3, 0x76, 0x3b, 0xe1, 0x71, 0xb0, 0xc6, 0x2b, 0x76, 0x0e, 0xde, 0x23, 0xc1, 0x2a, 0xd9, 0x2b, 0x98, 0x08, 0x84, 0xc6, 0x41, 0xf5, 0xa8, 0xfa, 0xc2, 0x6b, 0xda, 0xd4, 0xa0, 0x33, 0x81, 0xa2, 0x2f, 0xe1, 0xb7, 0x54, 0x88, 0x50, 0x94, 0xc8, 0x25, 0x06, 0xd4, 0x01, 0x9a, 0x53, 0x5a, 0x28, 0x6a, 0xfe, 0xb2, 0x71, 0xbb, 0x9b, 0xa5, 0x92, 0xde, 0x18, 0xdc, 0xf6, 0x00, 0xc2, 0xae, 0xea, 0xe5, 0x6e, 0x02, 0xf7, 0xcf, 0x79, 0xfc, 0x14, 0xcf, 0x3b, 0xdc, 0x7c, 0xd8, 0x4f, 0xeb, 0xbb, 0xf9, 0x50, 0xca, 0x90, 0x30, 0x4b, 0x22, 0x19, 0xa7, 0xaa, 0x06, 0x3a, 0xef, 0xa2, 0xc3, 0xc1, 0x98, 0x0e, 0x56, 0x0c, 0xd6, 0x4a, 0xfe, 0x77, 0x95, 0x85, 0xb6, 0x10, 0x76, 0x57, 0xb9, 0x57, 0x85, 0x7e, 0xfd, 0xe6, 0x01, 0x09, 0x88, 0xab, 0x7d, 0xe4, 0x17, 0xfc, 0x88, 0xd8, 0xf3, 0x84, 0xc4, 0xe6, 0xe7, 0x2c, 0x3f, 0x94, 0x3e, 0x0c, 0x31, 0xc0, 0xc4, 0xa5, 0xcc, 0x36, 0xf8, 0x79, 0xd8, 0xa3, 0xac, 0x9d, 0x7d, 0x59, 0x86, 0x0e, 0xaa, 0xda, 0x6b, 0x83, 0xbb, }; static const uint8_t ac_rsaes_oaep_vect10_pub_exp[] = { 0x01, 0x00, 0x01, }; static const uint8_t ac_rsaes_oaep_vect10_priv_exp[] = { 0x05, 0x6b, 0x04, 0x21, 0x6f, 0xe5, 0xf3, 0x54, 0xac, 0x77, 0x25, 0x0a, 0x4b, 0x6b, 0x0c, 0x85, 0x25, 0xa8, 0x5c, 0x59, 0xb0, 0xbd, 0x80, 0xc5, 0x64, 0x50, 0xa2, 0x2d, 0x5f, 0x43, 0x8e, 0x59, 0x6a, 0x33, 0x3a, 0xa8, 0x75, 0xe2, 0x91, 0xdd, 0x43, 0xf4, 0x8c, 0xb8, 0x8b, 0x9d, 0x5f, 0xc0, 0xd4, 0x99, 0xf9, 0xfc, 0xd1, 0xc3, 0x97, 0xf9, 0xaf, 0xc0, 0x70, 0xcd, 0x9e, 0x39, 0x8c, 0x8d, 0x19, 0xe6, 0x1d, 0xb7, 0xc7, 0x41, 0x0a, 0x6b, 0x26, 0x75, 0xdf, 0xbf, 0x5d, 0x34, 0x5b, 0x80, 0x4d, 0x20, 0x1a, 0xdd, 0x50, 0x2d, 0x5c, 0xe2, 0xdf, 0xcb, 0x09, 0x1c, 0xe9, 0x99, 0x7b, 0xbe, 0xbe, 0x57, 0x30, 0x6f, 0x38, 0x3e, 0x4d, 0x58, 0x81, 0x03, 0xf0, 0x36, 0xf7, 0xe8, 0x5d, 0x19, 0x34, 0xd1, 0x52, 0xa3, 0x23, 0xe4, 0xa8, 0xdb, 0x45, 0x1d, 0x6f, 0x4a, 0x5b, 0x1b, 0x0f, 0x10, 0x2c, 0xc1, 0x50, 0xe0, 0x2f, 0xee, 0xe2, 0xb8, 0x8d, 0xea, 0x4a, 0xd4, 0xc1, 0xba, 0xcc, 0xb2, 0x4d, 0x84, 0x07, 0x2d, 0x14, 0xe1, 0xd2, 0x4a, 0x67, 0x71, 0xf7, 0x40, 0x8e, 0xe3, 0x05, 0x64, 0xfb, 0x86, 0xd4, 0x39, 0x3a, 0x34, 0xbc, 0xf0, 0xb7, 0x88, 0x50, 0x1d, 0x19, 0x33, 0x03, 0xf1, 0x3a, 0x22, 0x84, 0xb0, 0x01, 0xf0, 0xf6, 0x49, 0xea, 0xf7, 0x93, 0x28, 0xd4, 0xac, 0x5c, 0x43, 0x0a, 0xb4, 0x41, 0x49, 0x20, 0xa9, 0x46, 0x0e, 0xd1, 0xb7, 0xbc, 0x40, 0xec, 0x65, 0x3e, 0x87, 0x6d, 0x09, 0xab, 0xc5, 0x09, 0xae, 0x45, 0xb5, 0x25, 0x19, 0x01, 0x16, 0xa0, 0xc2, 0x61, 0x01, 0x84, 0x82, 0x98, 0x50, 0x9c, 0x1c, 0x3b, 0xf3, 0xa4, 0x83, 0xe7, 0x27, 0x40, 0x54, 0xe1, 0x5e, 0x97, 0x07, 0x50, 0x36, 0xe9, 0x89, 0xf6, 0x09, 0x32, 0x80, 0x7b, 0x52, 0x57, 0x75, 0x1e, 0x79, }; static const uint8_t ac_rsaes_oaep_vect10_prime1[] = { 0xec, 0xf5, 0xae, 0xcd, 0x1e, 0x55, 0x15, 0xff, 0xfa, 0xcb, 0xd7, 0x5a, 0x28, 0x16, 0xc6, 0xeb, 0xf4, 0x90, 0x18, 0xcd, 0xfb, 0x46, 0x38, 0xe1, 0x85, 0xd6, 0x6a, 0x73, 0x96, 0xb6, 0xf8, 0x09, 0x0f, 0x80, 0x18, 0xc7, 0xfd, 0x95, 0xcc, 0x34, 0xb8, 0x57, 0xdc, 0x17, 0xf0, 0xcc, 0x65, 0x16, 0xbb, 0x13, 0x46, 0xab, 0x4d, 0x58, 0x2c, 0xad, 0xad, 0x7b, 0x41, 0x03, 0x35, 0x23, 0x87, 0xb7, 0x03, 0x38, 0xd0, 0x84, 0x04, 0x7c, 0x9d, 0x95, 0x39, 0xb6, 0x49, 0x62, 0x04, 0xb3, 0xdd, 0x6e, 0xa4, 0x42, 0x49, 0x92, 0x07, 0xbe, 0xc0, 0x1f, 0x96, 0x42, 0x87, 0xff, 0x63, 0x36, 0xc3, 0x98, 0x46, 0x58, 0x33, 0x68, 0x46, 0xf5, 0x6e, 0x46, 0x86, 0x18, 0x81, 0xc1, 0x02, 0x33, 0xd2, 0x17, 0x6b, 0xf1, 0x5a, 0x5e, 0x96, 0xdd, 0xc7, 0x80, 0xbc, 0x86, 0x8a, 0xa7, 0x7d, 0x3c, 0xe7, 0x69, }; static const uint8_t ac_rsaes_oaep_vect10_prime2[] = { 0xbc, 0x46, 0xc4, 0x64, 0xfc, 0x6a, 0xc4, 0xca, 0x78, 0x3b, 0x0e, 0xb0, 0x8a, 0x3c, 0x84, 0x1b, 0x77, 0x2f, 0x7e, 0x9b, 0x2f, 0x28, 0xba, 0xbd, 0x58, 0x8a, 0xe8, 0x85, 0xe1, 0xa0, 0xc6, 0x1e, 0x48, 0x58, 0xa0, 0xfb, 0x25, 0xac, 0x29, 0x99, 0x90, 0xf3, 0x5b, 0xe8, 0x51, 0x64, 0xc2, 0x59, 0xba, 0x11, 0x75, 0xcd, 0xd7, 0x19, 0x27, 0x07, 0x13, 0x51, 0x84, 0x99, 0x2b, 0x6c, 0x29, 0xb7, 0x46, 0xdd, 0x0d, 0x2c, 0xab, 0xe1, 0x42, 0x83, 0x5f, 0x7d, 0x14, 0x8c, 0xc1, 0x61, 0x52, 0x4b, 0x4a, 0x09, 0x94, 0x6d, 0x48, 0xb8, 0x28, 0x47, 0x3f, 0x1c, 0xe7, 0x6b, 0x6c, 0xb6, 0x88, 0x6c, 0x34, 0x5c, 0x03, 0xe0, 0x5f, 0x41, 0xd5, 0x1b, 0x5c, 0x3a, 0x90, 0xa3, 0xf2, 0x40, 0x73, 0xc7, 0xd7, 0x4a, 0x4f, 0xe2, 0x5d, 0x9c, 0xf2, 0x1c, 0x75, 0x96, 0x0f, 0x3f, 0xc3, 0x86, 0x31, 0x83, }; static const uint8_t ac_rsaes_oaep_vect10_exp1[] = { 0xc7, 0x35, 0x64, 0x57, 0x1d, 0x00, 0xfb, 0x15, 0xd0, 0x8a, 0x3d, 0xe9, 0x95, 0x7a, 0x50, 0x91, 0x5d, 0x71, 0x26, 0xe9, 0x44, 0x2d, 0xac, 0xf4, 0x2b, 0xc8, 0x2e, 0x86, 0x2e, 0x56, 0x73, 0xff, 0x6a, 0x00, 0x8e, 0xd4, 0xd2, 0xe3, 0x74, 0x61, 0x7d, 0xf8, 0x9f, 0x17, 0xa1, 0x60, 0xb4, 0x3b, 0x7f, 0xda, 0x9c, 0xb6, 0xb6, 0xb7, 0x42, 0x18, 0x60, 0x98, 0x15, 0xf7, 0xd4, 0x5c, 0xa2, 0x63, 0xc1, 0x59, 0xaa, 0x32, 0xd2, 0x72, 0xd1, 0x27, 0xfa, 0xf4, 0xbc, 0x8c, 0xa2, 0xd7, 0x73, 0x78, 0xe8, 0xae, 0xb1, 0x9b, 0x0a, 0xd7, 0xda, 0x3c, 0xb3, 0xde, 0x0a, 0xe7, 0x31, 0x49, 0x80, 0xf6, 0x2b, 0x6d, 0x4b, 0x0a, 0x87, 0x5d, 0x1d, 0xf0, 0x3c, 0x1b, 0xae, 0x39, 0xcc, 0xd8, 0x33, 0xef, 0x6c, 0xd7, 0xe2, 0xd9, 0x52, 0x8b, 0xf0, 0x84, 0xd1, 0xf9, 0x69, 0xe7, 0x94, 0xe9, 0xf6, 0xc1, }; static const uint8_t ac_rsaes_oaep_vect10_exp2[] = { 0x26, 0x58, 0xb3, 0x7f, 0x6d, 0xf9, 0xc1, 0x03, 0x0b, 0xe1, 0xdb, 0x68, 0x11, 0x7f, 0xa9, 0xd8, 0x7e, 0x39, 0xea, 0x2b, 0x69, 0x3b, 0x7e, 0x6d, 0x3a, 0x2f, 0x70, 0x94, 0x74, 0x13, 0xee, 0xc6, 0x14, 0x2e, 0x18, 0xfb, 0x8d, 0xfc, 0xb6, 0xac, 0x54, 0x5d, 0x7c, 0x86, 0xa0, 0xad, 0x48, 0xf8, 0x45, 0x71, 0x70, 0xf0, 0xef, 0xb2, 0x6b, 0xc4, 0x81, 0x26, 0xc5, 0x3e, 0xfd, 0x1d, 0x16, 0x92, 0x01, 0x98, 0xdc, 0x2a, 0x11, 0x07, 0xdc, 0x28, 0x2d, 0xb6, 0xa8, 0x0c, 0xd3, 0x06, 0x23, 0x60, 0xba, 0x3f, 0xa1, 0x3f, 0x70, 0xe4, 0x31, 0x2f, 0xf1, 0xa6, 0xcd, 0x6b, 0x8f, 0xc4, 0xcd, 0x9c, 0x5c, 0x3d, 0xb1, 0x7c, 0x6d, 0x6a, 0x57, 0x21, 0x2f, 0x73, 0xae, 0x29, 0xf6, 0x19, 0x32, 0x7b, 0xad, 0x59, 0xb1, 0x53, 0x85, 0x85, 0x85, 0xba, 0x4e, 0x28, 0xb6, 0x0a, 0x62, 0xa4, 0x5e, 0x49, }; static const uint8_t ac_rsaes_oaep_vect10_coeff[] = { 0x6f, 0x38, 0x52, 0x6b, 0x39, 0x25, 0x08, 0x55, 0x34, 0xef, 0x3e, 0x41, 0x5a, 0x83, 0x6e, 0xde, 0x8b, 0x86, 0x15, 0x8a, 0x2c, 0x7c, 0xbf, 0xec, 0xcb, 0x0b, 0xd8, 0x34, 0x30, 0x4f, 0xec, 0x68, 0x3b, 0xa8, 0xd4, 0xf4, 0x79, 0xc4, 0x33, 0xd4, 0x34, 0x16, 0xe6, 0x32, 0x69, 0x62, 0x3c, 0xea, 0x10, 0x07, 0x76, 0xd8, 0x5a, 0xff, 0x40, 0x1d, 0x3f, 0xff, 0x61, 0x0e, 0xe6, 0x54, 0x11, 0xce, 0x3b, 0x13, 0x63, 0xd6, 0x3a, 0x97, 0x09, 0xee, 0xde, 0x42, 0x64, 0x7c, 0xea, 0x56, 0x14, 0x93, 0xd5, 0x45, 0x70, 0xa8, 0x79, 0xc1, 0x86, 0x82, 0xcd, 0x97, 0x71, 0x0b, 0x96, 0x20, 0x5e, 0xc3, 0x11, 0x17, 0xd7, 0x3b, 0x5f, 0x36, 0x22, 0x3f, 0xad, 0xd6, 0xe8, 0xba, 0x90, 0xdd, 0x7c, 0x0e, 0xe6, 0x1d, 0x44, 0xe1, 0x63, 0x25, 0x1e, 0x20, 0xc7, 0xf6, 0x6e, 0xb3, 0x05, 0x11, 0x7c, 0xb8, }; static const uint8_t ac_rsaes_oaep_vect10_ptx[] = { 0x8b, 0xba, 0x6b, 0xf8, 0x2a, 0x6c, 0x0f, 0x86, 0xd5, 0xf1, 0x75, 0x6e, 0x97, 0x95, 0x68, 0x70, 0xb0, 0x89, 0x53, 0xb0, 0x6b, 0x4e, 0xb2, 0x05, 0xbc, 0x16, 0x94, 0xee, }; static const uint8_t ac_rsaes_oaep_vect10_out[] = { 0x53, 0xea, 0x5d, 0xc0, 0x8c, 0xd2, 0x60, 0xfb, 0x3b, 0x85, 0x85, 0x67, 0x28, 0x7f, 0xa9, 0x15, 0x52, 0xc3, 0x0b, 0x2f, 0xeb, 0xfb, 0xa2, 0x13, 0xf0, 0xae, 0x87, 0x70, 0x2d, 0x06, 0x8d, 0x19, 0xba, 0xb0, 0x7f, 0xe5, 0x74, 0x52, 0x3d, 0xfb, 0x42, 0x13, 0x9d, 0x68, 0xc3, 0xc5, 0xaf, 0xee, 0xe0, 0xbf, 0xe4, 0xcb, 0x79, 0x69, 0xcb, 0xf3, 0x82, 0xb8, 0x04, 0xd6, 0xe6, 0x13, 0x96, 0x14, 0x4e, 0x2d, 0x0e, 0x60, 0x74, 0x1f, 0x89, 0x93, 0xc3, 0x01, 0x4b, 0x58, 0xb9, 0xb1, 0x95, 0x7a, 0x8b, 0xab, 0xcd, 0x23, 0xaf, 0x85, 0x4f, 0x4c, 0x35, 0x6f, 0xb1, 0x66, 0x2a, 0xa7, 0x2b, 0xfc, 0xc7, 0xe5, 0x86, 0x55, 0x9d, 0xc4, 0x28, 0x0d, 0x16, 0x0c, 0x12, 0x67, 0x85, 0xa7, 0x23, 0xeb, 0xee, 0xbe, 0xff, 0x71, 0xf1, 0x15, 0x94, 0x44, 0x0a, 0xae, 0xf8, 0x7d, 0x10, 0x79, 0x3a, 0x87, 0x74, 0xa2, 0x39, 0xd4, 0xa0, 0x4c, 0x87, 0xfe, 0x14, 0x67, 0xb9, 0xda, 0xf8, 0x52, 0x08, 0xec, 0x6c, 0x72, 0x55, 0x79, 0x4a, 0x96, 0xcc, 0x29, 0x14, 0x2f, 0x9a, 0x8b, 0xd4, 0x18, 0xe3, 0xc1, 0xfd, 0x67, 0x34, 0x4b, 0x0c, 0xd0, 0x82, 0x9d, 0xf3, 0xb2, 0xbe, 0xc6, 0x02, 0x53, 0x19, 0x62, 0x93, 0xc6, 0xb3, 0x4d, 0x3f, 0x75, 0xd3, 0x2f, 0x21, 0x3d, 0xd4, 0x5c, 0x62, 0x73, 0xd5, 0x05, 0xad, 0xf4, 0xcc, 0xed, 0x10, 0x57, 0xcb, 0x75, 0x8f, 0xc2, 0x6a, 0xee, 0xfa, 0x44, 0x12, 0x55, 0xed, 0x4e, 0x64, 0xc1, 0x99, 0xee, 0x07, 0x5e, 0x7f, 0x16, 0x64, 0x61, 0x82, 0xfd, 0xb4, 0x64, 0x73, 0x9b, 0x68, 0xab, 0x5d, 0xaf, 0xf0, 0xe6, 0x3e, 0x95, 0x52, 0x01, 0x68, 0x24, 0xf0, 0x54, 0xbf, 0x4d, 0x3c, 0x8c, 0x90, 0xa9, 0x7b, 0xb6, 0xb6, 0x55, 0x32, 0x84, 0xeb, 0x42, 0x9f, 0xcc, }; /* diffie hellman test data */ /* p and g testdata generated using the following line: * for i in {256..2048..64}; do openssl dhparam -C -5 $i; done */ static const uint8_t keygen_dh256_p[] = { 0xB6, 0x73, 0x91, 0xB5, 0xD6, 0xBC, 0x95, 0x73, 0x0D, 0x53, 0x64, 0x13, 0xB0, 0x51, 0xC6, 0xB4, 0xEB, 0x9D, 0x74, 0x57, 0x8D, 0x65, 0x3A, 0x4B, 0x7A, 0xB2, 0x93, 0x27, 0xA6, 0xC1, 0xBC, 0xAB, }; static const uint8_t keygen_dh256_g[] = { 0x05, }; static const uint8_t keygen_dh320_p[] = { 0x80, 0x72, 0x50, 0x4F, 0x85, 0xD2, 0x32, 0x70, 0xA3, 0x11, 0xF4, 0x46, 0x01, 0x72, 0xD0, 0x72, 0x96, 0xA5, 0x1B, 0xFA, 0x8F, 0x35, 0x49, 0x75, 0x04, 0xA5, 0x5A, 0x62, 0xB6, 0x33, 0xD6, 0x3C, 0x46, 0xD1, 0xED, 0xD7, 0xB1, 0xD4, 0xBA, 0xF3, }; static const uint8_t keygen_dh320_g[] = { 0x05, }; static const uint8_t keygen_dh384_p[] = { 0xC2, 0x04, 0xC8, 0x0E, 0xE8, 0x3F, 0x02, 0x1F, 0xDE, 0x0C, 0xAA, 0x2E, 0x67, 0x13, 0xF4, 0x33, 0x67, 0x82, 0x59, 0xE7, 0x80, 0xE5, 0x42, 0xEA, 0x2F, 0xC4, 0x71, 0x93, 0xA7, 0x1C, 0x86, 0xEC, 0x8C, 0x39, 0xF8, 0xC7, 0xF1, 0xE3, 0xE0, 0xEE, 0xC4, 0x55, 0xF5, 0x4F, 0xE7, 0x98, 0xF0, 0x47, }; static const uint8_t keygen_dh384_g[] = { 0x05, }; static const uint8_t keygen_dh448_p[] = { 0x91, 0xB9, 0x28, 0x8F, 0x01, 0x62, 0xA1, 0x40, 0x4D, 0x53, 0xC7, 0xD5, 0xEE, 0x97, 0x40, 0x03, 0x39, 0x39, 0x41, 0x5F, 0x17, 0x0F, 0xA2, 0x78, 0xBF, 0x3D, 0x6B, 0x33, 0x33, 0x39, 0x3B, 0x57, 0x21, 0x5B, 0xF9, 0xB1, 0x6C, 0xE3, 0xB8, 0x19, 0xBE, 0x81, 0xBD, 0xC4, 0xFF, 0x4C, 0xFA, 0x48, 0x63, 0x24, 0x10, 0x33, 0xDE, 0x3A, 0xFD, 0x3B, }; static const uint8_t keygen_dh448_g[] = { 0x05, }; static const uint8_t keygen_dh512_p[] = { 0xCF, 0x09, 0xB8, 0xCD, 0x0B, 0xC5, 0x9D, 0xBD, 0x7A, 0x34, 0x50, 0x55, 0xEC, 0xD4, 0xED, 0x92, 0x9D, 0x63, 0x92, 0xF9, 0x1D, 0x42, 0xF3, 0x64, 0x04, 0x3D, 0xCC, 0xAA, 0x5F, 0xD1, 0xBB, 0xEA, 0x44, 0x12, 0xFC, 0xF0, 0xFB, 0xFF, 0x26, 0x57, 0xE3, 0x6E, 0xA8, 0x3F, 0x45, 0x43, 0x11, 0x81, 0xC6, 0x79, 0xF0, 0x0B, 0x11, 0x23, 0x1D, 0x7B, 0x1E, 0x59, 0xA8, 0xB8, 0x69, 0x44, 0xA7, 0xE3, }; static const uint8_t keygen_dh512_g[] = { 0x05, }; static const uint8_t keygen_dh576_p[] = { 0xEF, 0xA2, 0xD7, 0x81, 0x88, 0xAA, 0xBF, 0x70, 0x03, 0x70, 0xD4, 0x75, 0xA6, 0x3E, 0x5B, 0xCF, 0x73, 0xDE, 0x7D, 0x45, 0x67, 0x47, 0xB1, 0xCF, 0xA8, 0x62, 0xA9, 0x13, 0x9F, 0xC3, 0x9B, 0x96, 0xCE, 0xB9, 0x0C, 0x24, 0xAC, 0xCB, 0xB6, 0x40, 0x30, 0x25, 0x26, 0x4E, 0x9D, 0x50, 0xA7, 0x8F, 0x09, 0x1C, 0x9B, 0xDE, 0x77, 0x8A, 0xE8, 0xAA, 0xDA, 0xC2, 0x31, 0x08, 0x55, 0x2C, 0xC1, 0x13, 0x24, 0x6E, 0x5A, 0xE7, 0xA1, 0xBC, 0xE5, 0x5B, }; static const uint8_t keygen_dh576_g[] = { 0x05, }; static const uint8_t keygen_dh640_p[] = { 0xED, 0xB6, 0x90, 0x9C, 0x72, 0x5C, 0x63, 0x11, 0x17, 0xA9, 0xB6, 0x0E, 0x6C, 0x80, 0xA9, 0xF3, 0x15, 0x36, 0x9D, 0x49, 0x02, 0x2B, 0x4F, 0x12, 0x1A, 0xFD, 0x00, 0xC0, 0x9B, 0x12, 0x10, 0x96, 0x18, 0x55, 0x3F, 0x0C, 0x75, 0x46, 0x6E, 0xDF, 0x0A, 0x58, 0x8E, 0x1B, 0x4B, 0xFF, 0x24, 0x70, 0xFC, 0x29, 0xE8, 0x67, 0x8F, 0x0B, 0x72, 0x14, 0x80, 0x6F, 0xE9, 0xCD, 0x30, 0x3C, 0x16, 0xB9, 0xB0, 0x32, 0xBE, 0x6A, 0x1D, 0x06, 0xEE, 0x6D, 0x15, 0x44, 0x49, 0x55, 0xA8, 0x08, 0x2D, 0x0F, }; static const uint8_t keygen_dh640_g[] = { 0x05, }; static const uint8_t keygen_dh704_p[] = { 0xA6, 0xBF, 0xA1, 0x02, 0x02, 0xA7, 0x7A, 0x6E, 0xFC, 0x48, 0x55, 0x81, 0x23, 0x3F, 0x08, 0x8E, 0x83, 0xE9, 0x10, 0x92, 0x96, 0x82, 0x5F, 0xB8, 0x88, 0x28, 0x0C, 0x6A, 0x04, 0x41, 0xEF, 0x4C, 0xCC, 0x2F, 0x16, 0xCD, 0xA4, 0x2F, 0x24, 0x3B, 0xB6, 0x8A, 0x45, 0x76, 0xB3, 0xFA, 0x23, 0x83, 0x53, 0xB2, 0x8F, 0x0C, 0xAE, 0xF9, 0xE8, 0xDB, 0x46, 0x5B, 0xBF, 0x7E, 0xC3, 0x6F, 0x4F, 0xE6, 0xE7, 0x51, 0x75, 0x49, 0xB5, 0x4B, 0xBE, 0x48, 0x51, 0x64, 0x9F, 0x5D, 0x56, 0xC7, 0x28, 0x9C, 0xC5, 0xBD, 0x0C, 0xD2, 0x3A, 0x63, 0x49, 0x57, }; static const uint8_t keygen_dh704_g[] = { 0x05, }; static const uint8_t keygen_dh768_p[] = { 0xEA, 0x9B, 0x0E, 0xD5, 0xDF, 0xC6, 0x9C, 0x8A, 0x26, 0x29, 0xD4, 0x2A, 0x94, 0x4F, 0xD5, 0x3E, 0xEA, 0xEC, 0xCD, 0x89, 0xDA, 0x9C, 0x12, 0x52, 0x94, 0xA7, 0x1A, 0x7D, 0x14, 0x94, 0xB1, 0x89, 0x79, 0xF3, 0x4A, 0xC3, 0xD6, 0xF5, 0x52, 0xA6, 0x65, 0xC6, 0x0C, 0xD2, 0x2B, 0x16, 0xCB, 0x4F, 0x69, 0x4C, 0x41, 0x6C, 0xA6, 0xAF, 0xCE, 0xFD, 0x50, 0x0E, 0x8C, 0x9E, 0xA7, 0x19, 0x46, 0x6E, 0xC2, 0x27, 0xB9, 0xAF, 0x61, 0x4B, 0xDA, 0x3A, 0x60, 0xBA, 0x6D, 0xCE, 0xBA, 0x39, 0x1C, 0x02, 0xBF, 0x09, 0xF0, 0xF9, 0x87, 0xBE, 0xA1, 0xDE, 0x4E, 0x34, 0x7B, 0x28, 0x3A, 0xC2, 0x9E, 0x83, }; static const uint8_t keygen_dh768_g[] = { 0x05, }; static const uint8_t keygen_dh832_p[] = { 0xB9, 0x0C, 0x79, 0x82, 0x7B, 0x23, 0xB7, 0x2F, 0x5A, 0x7B, 0xB1, 0xB9, 0x63, 0x30, 0x7C, 0xD4, 0x0B, 0xEB, 0x7B, 0x8A, 0x67, 0x3E, 0x3B, 0x67, 0xF1, 0x72, 0x90, 0x0E, 0xBF, 0x67, 0xEF, 0xBB, 0x95, 0xC1, 0x47, 0xED, 0x89, 0x11, 0x79, 0x40, 0x63, 0x02, 0xF0, 0x41, 0x0C, 0xD1, 0x76, 0x15, 0xAA, 0x24, 0x6A, 0xAE, 0x98, 0xFB, 0x19, 0x1F, 0x43, 0xB9, 0x92, 0xC7, 0xB6, 0x33, 0xD8, 0x85, 0xBD, 0x06, 0x7D, 0x68, 0x32, 0xEE, 0xDB, 0x41, 0xEF, 0x7B, 0xBD, 0xB4, 0xFE, 0x53, 0x4F, 0x6C, 0xA8, 0x26, 0xE0, 0x62, 0x7D, 0x06, 0x06, 0xC5, 0xFB, 0x47, 0xD0, 0x3F, 0x4B, 0xC1, 0x7A, 0xC4, 0x2A, 0xF3, 0x69, 0xF2, 0xDE, 0x77, 0xCD, 0x03, }; static const uint8_t keygen_dh832_g[] = { 0x05, }; static const uint8_t keygen_dh896_p[] = { 0xA8, 0x1A, 0xFB, 0xF4, 0x12, 0xF8, 0x17, 0x16, 0x89, 0x20, 0xAE, 0x6F, 0x07, 0x55, 0x13, 0xCA, 0x99, 0x66, 0xA3, 0x1F, 0x07, 0xAC, 0x32, 0x5C, 0xF5, 0xF0, 0x39, 0xA3, 0xDA, 0xF5, 0x55, 0xF9, 0x3C, 0xF3, 0x15, 0xF8, 0x44, 0xC1, 0x10, 0x6A, 0x3D, 0x2F, 0x97, 0xFD, 0xAC, 0x74, 0x1E, 0xEE, 0xCF, 0xDD, 0xEE, 0x70, 0x57, 0xBA, 0x4B, 0x41, 0xD6, 0x3F, 0xDD, 0x01, 0xFB, 0x0C, 0x26, 0xA9, 0x06, 0xCD, 0x1B, 0xA2, 0xD3, 0x3E, 0xAD, 0x2D, 0x29, 0xFB, 0x79, 0xB8, 0x8E, 0x50, 0xCC, 0xA1, 0x85, 0x37, 0xFA, 0xF1, 0xBB, 0xB1, 0x5D, 0x3B, 0x51, 0x54, 0x16, 0x4C, 0x98, 0x2B, 0x26, 0xAD, 0x70, 0x0B, 0x01, 0x87, 0x5C, 0xF1, 0xE8, 0x02, 0xF3, 0x57, 0xA9, 0x40, 0x5C, 0xC5, 0xE0, 0xFF, }; static const uint8_t keygen_dh896_g[] = { 0x05, }; static const uint8_t keygen_dh960_p[] = { 0xD9, 0x31, 0xE0, 0xF3, 0x80, 0xED, 0xBD, 0xEC, 0x35, 0x99, 0xC9, 0x28, 0xA8, 0x88, 0x3C, 0x84, 0x41, 0x8A, 0x6C, 0xC7, 0x83, 0x09, 0xCE, 0x07, 0x51, 0x72, 0xBE, 0xE9, 0x21, 0x4F, 0xCB, 0x92, 0xAE, 0xA5, 0xF0, 0x9A, 0x40, 0x9B, 0x02, 0x1D, 0xA5, 0x5E, 0xAB, 0x17, 0x25, 0x5B, 0x70, 0x0F, 0xF9, 0x27, 0xEF, 0x49, 0xCD, 0x7F, 0x6E, 0x9A, 0x62, 0x51, 0xE6, 0xEA, 0x4B, 0x7E, 0xBE, 0xB3, 0x72, 0xFB, 0xAF, 0x98, 0xA1, 0x7D, 0x77, 0x7E, 0x53, 0xF9, 0xFC, 0x7A, 0xEB, 0xC7, 0xB0, 0x84, 0x2F, 0x70, 0xCC, 0xA2, 0x34, 0x52, 0x9F, 0xD3, 0x46, 0xE3, 0x32, 0x2F, 0xE0, 0x6F, 0x83, 0x3B, 0x8B, 0x17, 0x01, 0x0C, 0x1D, 0xEA, 0x04, 0x7D, 0xB1, 0xD4, 0xB2, 0x2D, 0xC7, 0xD3, 0x2D, 0xE0, 0x47, 0x00, 0x6D, 0xE8, 0x1F, 0xAA, 0x39, 0x67, }; static const uint8_t keygen_dh960_g[] = { 0x05, }; static const uint8_t keygen_dh1024_p[] = { 0xB9, 0xF5, 0xB6, 0xFF, 0x49, 0xA7, 0x31, 0x3C, 0xD3, 0xAA, 0x42, 0xAE, 0x3D, 0xA6, 0xD4, 0xC1, 0x92, 0xB0, 0x1C, 0xD5, 0x24, 0x9D, 0x67, 0x04, 0xFA, 0xED, 0x0B, 0x2D, 0x8B, 0xA1, 0xB8, 0x72, 0x43, 0x48, 0xC2, 0x75, 0x00, 0x9F, 0x43, 0xD7, 0xF0, 0x8F, 0xD8, 0xCD, 0x1C, 0x64, 0x48, 0x82, 0x63, 0x52, 0x89, 0x78, 0x43, 0xEF, 0x00, 0xF6, 0x62, 0x04, 0x26, 0xD5, 0x69, 0x2C, 0x2B, 0x9B, 0x53, 0x72, 0x57, 0xD5, 0x05, 0xA6, 0x53, 0x24, 0x43, 0x81, 0x49, 0xEC, 0xBB, 0x43, 0x58, 0x66, 0x6A, 0xBD, 0xAC, 0xBA, 0xD9, 0xC8, 0xC9, 0x95, 0x93, 0xCB, 0x79, 0x89, 0x86, 0x30, 0x0D, 0x45, 0x3F, 0x89, 0x04, 0xC4, 0xEC, 0x96, 0xBF, 0x4E, 0x8E, 0x88, 0x51, 0xED, 0xEF, 0x91, 0x8A, 0x03, 0xDC, 0x4E, 0x28, 0x69, 0x46, 0xDA, 0x1B, 0xD4, 0x7E, 0xC5, 0xEB, 0x95, 0xBC, 0x9D, 0x14, 0x77, }; static const uint8_t keygen_dh1024_g[] = { 0x05, }; static const uint8_t keygen_dh1088_p[] = { 0xE3, 0x67, 0x7B, 0x2C, 0x68, 0xE3, 0x7C, 0xDB, 0x30, 0x3A, 0xF3, 0x20, 0x33, 0x02, 0xB5, 0x08, 0x83, 0xC5, 0x8B, 0x07, 0xDD, 0x08, 0x92, 0x82, 0xD6, 0x2A, 0x2B, 0x7F, 0xC6, 0xF0, 0xBD, 0xB8, 0x01, 0xF8, 0xCF, 0x78, 0x4F, 0xFE, 0xE2, 0x9D, 0x2F, 0xF4, 0x2D, 0xC5, 0x48, 0xE0, 0xFD, 0x8A, 0xC2, 0xCF, 0x1B, 0xD9, 0xE1, 0x23, 0xC6, 0xDA, 0xFC, 0x1C, 0x9B, 0xA4, 0x70, 0x91, 0x1A, 0x6A, 0x35, 0x00, 0x5E, 0x63, 0x14, 0x04, 0xAB, 0x3B, 0x00, 0xEE, 0x44, 0xE6, 0xAE, 0x49, 0xDB, 0xB7, 0xEF, 0xE1, 0x6E, 0xF9, 0x88, 0xCC, 0xAB, 0x5E, 0x0A, 0x20, 0x84, 0x09, 0x03, 0xFA, 0xAA, 0x8C, 0xFE, 0xB8, 0xEA, 0x31, 0x78, 0xD2, 0x92, 0xF3, 0x77, 0xCF, 0xEC, 0xB9, 0xF8, 0x3C, 0x79, 0x4A, 0x9B, 0xB6, 0xCC, 0xC0, 0x5E, 0xAB, 0x92, 0xE6, 0x39, 0x74, 0x5E, 0x8D, 0x2B, 0x28, 0x3B, 0x4D, 0x26, 0x6B, 0x2F, 0xF6, 0xA8, 0xB1, 0x01, 0x53, }; static const uint8_t keygen_dh1088_g[] = { 0x05, }; static const uint8_t keygen_dh1152_p[] = { 0xCA, 0xD6, 0x34, 0x4F, 0xAE, 0x99, 0x47, 0x51, 0x14, 0x5D, 0xF4, 0xCA, 0x47, 0xE2, 0xE7, 0x62, 0x7D, 0xB9, 0xC9, 0xE7, 0xF7, 0xEE, 0xD4, 0xF0, 0x04, 0xC1, 0x93, 0x06, 0xC2, 0xC8, 0x5E, 0x9D, 0xD3, 0x9F, 0x4A, 0x87, 0xF2, 0x22, 0x5A, 0x72, 0x8D, 0xEB, 0x8B, 0x12, 0x26, 0x82, 0x3A, 0xA7, 0x6B, 0xE1, 0x55, 0xB0, 0x9F, 0x97, 0x4C, 0xC5, 0xEC, 0x5C, 0x1C, 0x23, 0xAB, 0x95, 0xDC, 0x17, 0xD5, 0x80, 0x0A, 0xE6, 0x53, 0x9E, 0xD8, 0xC6, 0xB9, 0x9E, 0xFA, 0x62, 0x60, 0x2A, 0x8D, 0xD5, 0x3D, 0x36, 0x5E, 0x4E, 0x42, 0x1F, 0xAF, 0x2B, 0x87, 0x0E, 0xC6, 0x44, 0xB7, 0x55, 0x1C, 0x81, 0x7E, 0x48, 0x96, 0x1B, 0xF9, 0x73, 0x1C, 0x3D, 0x80, 0xDF, 0x43, 0xDB, 0x93, 0xB6, 0x1E, 0xC1, 0x04, 0x12, 0x9E, 0x33, 0x21, 0xCE, 0xF7, 0x49, 0x41, 0x7E, 0x97, 0x31, 0xC3, 0x74, 0x1D, 0x95, 0x85, 0x6F, 0x3A, 0xA1, 0xCF, 0x61, 0xD9, 0xEB, 0x67, 0x67, 0xED, 0x91, 0xDF, 0x23, 0xCD, 0xC3, }; static const uint8_t keygen_dh1152_g[] = { 0x05, }; static const uint8_t keygen_dh1216_p[] = { 0xB1, 0xFC, 0x4E, 0xF5, 0xDE, 0xC5, 0xDD, 0x33, 0xDD, 0xB2, 0x2E, 0x44, 0x52, 0xDD, 0x74, 0x2F, 0x1F, 0x61, 0x20, 0x21, 0x72, 0x65, 0xC5, 0xEC, 0x5A, 0xAA, 0xF1, 0x24, 0xA1, 0xD0, 0xEB, 0x4B, 0x4C, 0x32, 0x8A, 0xDD, 0x4F, 0x9F, 0xEE, 0xFA, 0x5F, 0x81, 0xD4, 0x18, 0x3D, 0xCD, 0x39, 0x38, 0xDC, 0x3D, 0x2E, 0x37, 0xEB, 0xFE, 0x73, 0xEF, 0x99, 0x53, 0x54, 0xA6, 0xAB, 0x25, 0xFE, 0x9A, 0x10, 0xAE, 0x3E, 0xC9, 0x63, 0x45, 0x75, 0xAF, 0xCA, 0xD9, 0x57, 0xF7, 0x71, 0xE0, 0xBE, 0x0D, 0x90, 0xE9, 0xC5, 0x5A, 0xC6, 0x2E, 0x3D, 0xDE, 0xE4, 0x8B, 0x38, 0x8E, 0x83, 0x06, 0xA6, 0xE2, 0x38, 0xA6, 0x88, 0x81, 0xDE, 0x8E, 0xA6, 0x6A, 0xBF, 0xF4, 0x75, 0xFB, 0xAB, 0xAA, 0x02, 0xEA, 0x0E, 0xCF, 0xCA, 0xEA, 0x45, 0xFE, 0x1C, 0xC2, 0xF9, 0xBE, 0x26, 0x31, 0xA6, 0x8F, 0xFE, 0x07, 0x9E, 0x79, 0x47, 0x11, 0xA1, 0x25, 0xA4, 0xE5, 0xFB, 0xEA, 0xE7, 0xC1, 0xFF, 0x12, 0x12, 0x71, 0x5D, 0xC1, 0x99, 0x44, 0xD1, 0xCE, 0x82, 0xA7, }; static const uint8_t keygen_dh1216_g[] = { 0x05, }; static const uint8_t keygen_dh1280_p[] = { 0xF0, 0x10, 0x04, 0x04, 0x08, 0x13, 0x79, 0x15, 0x62, 0x5C, 0xFA, 0x2A, 0x6D, 0xFC, 0x3F, 0x23, 0x4C, 0x47, 0x83, 0x45, 0xE7, 0x6F, 0x64, 0x04, 0x1A, 0xFD, 0xBF, 0xD2, 0xB9, 0x0A, 0x98, 0x14, 0x16, 0xA4, 0xB5, 0x03, 0x13, 0xBB, 0xFB, 0x72, 0x1E, 0xF5, 0x23, 0x12, 0xB8, 0x74, 0x49, 0x3F, 0x84, 0xF3, 0x02, 0x3A, 0x50, 0x6F, 0xB7, 0xC7, 0x6F, 0x37, 0x8F, 0x61, 0x88, 0x60, 0x7C, 0xF1, 0xE7, 0x1E, 0xED, 0x55, 0xF1, 0xCD, 0x64, 0x93, 0xA7, 0x12, 0xB7, 0x74, 0x5F, 0x23, 0x20, 0xF7, 0x87, 0xC2, 0x83, 0x2A, 0x86, 0x0C, 0xF3, 0x4B, 0x88, 0x32, 0xF5, 0xB7, 0x86, 0x2F, 0xBF, 0xEE, 0xA1, 0x59, 0xC4, 0xDB, 0x0F, 0xEF, 0x06, 0xC8, 0xF2, 0xEE, 0x39, 0xB4, 0x19, 0x24, 0x8A, 0x2C, 0xE7, 0xF8, 0xA0, 0x34, 0x2A, 0x15, 0xA9, 0x54, 0x4D, 0x04, 0x1B, 0xC0, 0xC5, 0x15, 0xCF, 0x38, 0x96, 0x83, 0x3E, 0xEE, 0xD0, 0xFD, 0xBC, 0x62, 0xD9, 0x84, 0xA3, 0x02, 0x6D, 0x2A, 0x7B, 0x4B, 0x3E, 0xCC, 0xAD, 0xA1, 0xF0, 0xA0, 0x44, 0xDD, 0x7E, 0x4B, 0xBD, 0x75, 0xAD, 0x8F, 0xF1, 0x57, }; static const uint8_t keygen_dh1280_g[] = { 0x05, }; static const uint8_t keygen_dh1344_p[] = { 0x8E, 0x0F, 0xCC, 0x61, 0x96, 0xCA, 0xF2, 0x3A, 0x13, 0xD5, 0xF9, 0x2A, 0xD0, 0xF0, 0x5A, 0x4C, 0x1B, 0xC2, 0xD2, 0xDE, 0xD6, 0x54, 0x53, 0x83, 0x70, 0x1E, 0x0A, 0x17, 0x6D, 0x4C, 0xBA, 0xCD, 0xEE, 0x32, 0x08, 0x55, 0xD8, 0xD3, 0x80, 0x81, 0x07, 0x04, 0xF3, 0x19, 0xDD, 0x20, 0x30, 0x6A, 0x6C, 0x74, 0x25, 0x56, 0xEB, 0xA0, 0x9E, 0x0A, 0x08, 0x94, 0x88, 0xE8, 0xD2, 0xFD, 0xC3, 0x16, 0x27, 0x51, 0xE2, 0xF8, 0xAE, 0x8B, 0x2B, 0xFF, 0x2A, 0x75, 0xEC, 0x21, 0xEB, 0xA9, 0xE2, 0x24, 0x8A, 0xAE, 0xF9, 0x7D, 0x90, 0x8B, 0x31, 0x10, 0x6B, 0x14, 0x97, 0x2D, 0xB2, 0x93, 0x59, 0xFF, 0x4B, 0x9A, 0x0A, 0x90, 0xA8, 0x0E, 0xDE, 0x19, 0x2B, 0x74, 0xF2, 0xCC, 0x2D, 0x5B, 0x4F, 0x91, 0xBE, 0x43, 0x86, 0xA2, 0x91, 0xDD, 0x01, 0xDD, 0x24, 0x75, 0xD8, 0x9F, 0x85, 0x53, 0xC3, 0xDB, 0x08, 0x5F, 0x01, 0x24, 0xA7, 0x45, 0xAA, 0x6E, 0xB4, 0xFB, 0x05, 0x1C, 0x58, 0x51, 0x3D, 0xFD, 0x39, 0x57, 0xD4, 0xF9, 0x11, 0x81, 0x60, 0x48, 0xF1, 0xD7, 0x7C, 0xAE, 0xDE, 0x58, 0x6E, 0x6A, 0x02, 0xC5, 0x51, 0x69, 0x47, 0xF3, 0xAC, 0x47, }; static const uint8_t keygen_dh1344_g[] = { 0x05, }; static const uint8_t keygen_dh1408_p[] = { 0xE1, 0xE7, 0xA6, 0xF3, 0x5C, 0x06, 0x00, 0x8B, 0x4B, 0x3C, 0x7A, 0xF9, 0x4D, 0x30, 0x08, 0x73, 0x69, 0xCF, 0x79, 0x6F, 0xAB, 0x66, 0x47, 0x05, 0x65, 0xA8, 0x4A, 0x5C, 0xA6, 0x5E, 0x3D, 0x46, 0x10, 0x0A, 0x58, 0x3E, 0x7C, 0x3F, 0x0F, 0x3A, 0xE1, 0xFF, 0x2C, 0x7D, 0xE1, 0x40, 0x05, 0xED, 0xC3, 0x0B, 0x6C, 0x36, 0x90, 0xDC, 0x10, 0x94, 0x9B, 0xEB, 0xA9, 0x31, 0xD9, 0x1F, 0x46, 0xBF, 0xC0, 0xF4, 0x49, 0x44, 0x39, 0xF2, 0xE9, 0xB8, 0x86, 0x52, 0xCB, 0x60, 0xAC, 0xAF, 0x2C, 0x38, 0x9A, 0x63, 0xCE, 0xB7, 0x30, 0x17, 0x81, 0xA9, 0x1C, 0x3D, 0x73, 0x0D, 0x3F, 0xCE, 0xC8, 0xA6, 0x95, 0x65, 0x8F, 0x9F, 0x5C, 0xE8, 0xEB, 0x5C, 0x69, 0x59, 0x8B, 0xA5, 0x1D, 0x74, 0x23, 0x35, 0x3C, 0x35, 0x08, 0x50, 0x53, 0xE5, 0xDB, 0x93, 0x69, 0x8F, 0x17, 0xF7, 0xA0, 0xBA, 0xED, 0xD6, 0xE9, 0x7C, 0x4F, 0x97, 0xAB, 0x25, 0x26, 0x39, 0xF9, 0xF3, 0x12, 0x0A, 0xB1, 0xE0, 0x7C, 0xCD, 0x60, 0x5C, 0x46, 0x2E, 0x22, 0xAB, 0xEF, 0x8D, 0x09, 0xB8, 0x3D, 0xB1, 0xA6, 0xB0, 0x1C, 0x5D, 0x75, 0x66, 0x02, 0x0E, 0xFD, 0xB9, 0xD6, 0x47, 0x5F, 0x80, 0xF3, 0xAF, 0xB3, 0x39, 0x7B, 0xF7, }; static const uint8_t keygen_dh1408_g[] = { 0x05, }; static const uint8_t keygen_dh1472_p[] = { 0x9D, 0x8A, 0x3D, 0x5A, 0xC0, 0x90, 0x55, 0x02, 0x4E, 0x28, 0xB7, 0x8F, 0x33, 0x91, 0xDC, 0xEB, 0xD2, 0x81, 0x00, 0x16, 0x2D, 0x89, 0x9A, 0x3C, 0x83, 0xD5, 0xF3, 0x2A, 0x59, 0x5D, 0x63, 0x86, 0xFB, 0xEB, 0xA8, 0xFD, 0x27, 0x1E, 0x18, 0x9F, 0x3C, 0xF7, 0xEF, 0xAE, 0xDE, 0x6C, 0xA5, 0x30, 0x16, 0x93, 0xF0, 0x00, 0xB3, 0x36, 0xD2, 0xF6, 0x2C, 0x95, 0xF1, 0x31, 0x4A, 0x75, 0xA8, 0x4F, 0xF6, 0xA8, 0x0F, 0xE9, 0x0B, 0xB4, 0xAF, 0xEE, 0xFF, 0x50, 0x6D, 0xE8, 0xFC, 0x3A, 0xCC, 0x04, 0x71, 0x21, 0x74, 0x38, 0xEB, 0x7E, 0x66, 0x70, 0x85, 0xA7, 0x35, 0x50, 0x07, 0x21, 0x2D, 0x24, 0x45, 0xCC, 0x00, 0xB1, 0x7F, 0x7A, 0x73, 0x54, 0x9B, 0x96, 0x7B, 0x60, 0x46, 0xDE, 0x57, 0x4B, 0xE3, 0xF5, 0xEA, 0x0E, 0xFC, 0x7A, 0xC1, 0xFE, 0x8D, 0x13, 0xD8, 0x2D, 0xAB, 0xDD, 0xA6, 0x61, 0x5C, 0x95, 0xB4, 0x15, 0x6F, 0x2A, 0x40, 0x6C, 0xB3, 0xC6, 0xC2, 0x1C, 0xC6, 0x74, 0x6F, 0x31, 0x73, 0x47, 0x94, 0x95, 0x23, 0x8D, 0xCD, 0x4F, 0x4D, 0xA8, 0xF3, 0x67, 0x5D, 0xDE, 0x83, 0x49, 0x9C, 0xD3, 0xD9, 0xB5, 0x0D, 0xD4, 0x0E, 0xD1, 0x99, 0xB7, 0x53, 0x2E, 0xE5, 0xFD, 0xB5, 0x75, 0xFD, 0xE6, 0xD6, 0xC6, 0xA2, 0x43, 0x33, 0x83, }; static const uint8_t keygen_dh1472_g[] = { 0x05, }; static const uint8_t keygen_dh1536_p[] = { 0xE2, 0x5A, 0x3F, 0x8E, 0xE8, 0x72, 0x92, 0x84, 0x2F, 0xB2, 0xC0, 0x01, 0x1F, 0xE9, 0x42, 0x0A, 0x0B, 0x1A, 0x71, 0x27, 0x51, 0xD8, 0xB5, 0xD8, 0x31, 0x7B, 0xEE, 0xEE, 0xAA, 0xA5, 0x67, 0x67, 0x36, 0xAF, 0xAB, 0x55, 0xB9, 0x07, 0xA7, 0xF7, 0x55, 0xE3, 0x08, 0x52, 0x7C, 0x55, 0xF3, 0x28, 0x6F, 0x37, 0x84, 0xC7, 0x26, 0x66, 0x2F, 0x84, 0x8C, 0x09, 0xA5, 0x0C, 0x5A, 0x60, 0x45, 0x7A, 0xDC, 0x11, 0x11, 0xB6, 0xF8, 0x6B, 0x2A, 0x63, 0x6E, 0x86, 0x00, 0x65, 0x92, 0x8F, 0xE8, 0xB8, 0x4A, 0x2F, 0xDC, 0x62, 0xE0, 0x2C, 0x1F, 0x95, 0x8F, 0x16, 0x7D, 0xB9, 0xC2, 0xCE, 0x58, 0x9A, 0x12, 0x55, 0xC2, 0x01, 0xE2, 0xBE, 0xE5, 0xF0, 0x80, 0x04, 0xFD, 0xDD, 0x95, 0x04, 0x11, 0xCA, 0xE3, 0xAA, 0x9E, 0x3F, 0x4C, 0x9A, 0xE9, 0x8C, 0x11, 0xD9, 0x1C, 0x3A, 0x22, 0xEF, 0xEC, 0xB0, 0x9D, 0x73, 0x0C, 0xBB, 0x4E, 0x3F, 0xFC, 0xF4, 0xFF, 0x63, 0x85, 0x7C, 0xE6, 0x5C, 0x22, 0x60, 0x0A, 0x92, 0x32, 0xEC, 0x7C, 0x6B, 0x01, 0x72, 0x93, 0x42, 0x9D, 0x8D, 0xC5, 0x78, 0x88, 0x8F, 0xCB, 0xA8, 0x93, 0xD1, 0x8F, 0x67, 0x74, 0x7A, 0xA2, 0x93, 0x18, 0xDB, 0x84, 0xA5, 0xA6, 0xB9, 0x35, 0x0C, 0xCD, 0x8B, 0x85, 0x2F, 0xC0, 0xBA, 0x27, 0x3D, 0x9C, 0x55, 0xDA, 0xB8, 0x94, 0x1F, }; static const uint8_t keygen_dh1536_g[] = { 0x05, }; static const uint8_t keygen_dh1600_p[] = { 0xAC, 0xF5, 0x91, 0x7E, 0xA3, 0x07, 0xD1, 0x24, 0x69, 0x38, 0x4D, 0x1B, 0x1D, 0x60, 0x81, 0xF5, 0x22, 0x71, 0xE3, 0xEC, 0x17, 0x7B, 0x22, 0x81, 0x22, 0xC7, 0x55, 0xBC, 0x61, 0x41, 0x03, 0xA5, 0x9D, 0xDC, 0x58, 0x28, 0x6C, 0xE6, 0xF7, 0x9B, 0x0D, 0x2F, 0xD5, 0x4F, 0x3E, 0x4D, 0x6B, 0x26, 0x5B, 0x09, 0x09, 0x79, 0x58, 0xC4, 0x39, 0x33, 0x8C, 0x29, 0x9E, 0x9F, 0x5C, 0x76, 0xA5, 0xC8, 0x99, 0xF8, 0x69, 0xEE, 0x8F, 0xBA, 0x2C, 0xD4, 0x68, 0x4F, 0xB2, 0xDC, 0xE6, 0xD9, 0x20, 0xE8, 0x02, 0xF2, 0x43, 0x9C, 0xDD, 0x31, 0x79, 0xBD, 0x39, 0x78, 0x31, 0xC6, 0x03, 0x66, 0x69, 0x05, 0xD6, 0x1E, 0xFE, 0x11, 0x1D, 0x9E, 0x01, 0xB8, 0xCB, 0xE8, 0xC7, 0x51, 0xD9, 0xCD, 0x49, 0xEA, 0xD6, 0xC3, 0xC7, 0xF1, 0xC0, 0xA2, 0x6B, 0xD1, 0x52, 0xD3, 0x80, 0xFD, 0x52, 0x35, 0x5C, 0x3D, 0xD3, 0x97, 0x61, 0x58, 0x69, 0x1B, 0x4F, 0x9C, 0xF9, 0xC9, 0x34, 0xDA, 0x9B, 0x8B, 0x04, 0x18, 0x12, 0x2F, 0xF1, 0x22, 0x78, 0x0F, 0xD3, 0xAA, 0x85, 0x06, 0xA9, 0xCA, 0x9E, 0x80, 0x39, 0x25, 0x12, 0x41, 0xDD, 0x86, 0x58, 0x1F, 0x4D, 0x1F, 0x9B, 0xDB, 0x63, 0xD0, 0x80, 0x5E, 0x53, 0xAC, 0x86, 0x0C, 0x1E, 0x11, 0xB1, 0x0D, 0xB6, 0x1F, 0xFE, 0x7C, 0x23, 0x6A, 0x71, 0x47, 0xA5, 0xC2, 0x20, 0x23, 0x9F, 0x1D, 0xDF, 0xB9, 0x91, 0x4B, }; static const uint8_t keygen_dh1600_g[] = { 0x05, }; static const uint8_t keygen_dh1664_p[] = { 0xAB, 0xF8, 0x74, 0x92, 0xCE, 0x1A, 0x3F, 0x89, 0xE1, 0xB7, 0x75, 0x5E, 0x99, 0xBE, 0xFF, 0x73, 0x3E, 0x78, 0x86, 0xB0, 0x5E, 0x2F, 0x5C, 0xA4, 0xB2, 0xE4, 0x72, 0x2C, 0x59, 0xB6, 0x64, 0x6F, 0x63, 0x72, 0xE3, 0x82, 0xA4, 0xFB, 0x03, 0x57, 0x40, 0x6D, 0x6B, 0x1E, 0x2B, 0xB9, 0x8C, 0xB0, 0x19, 0xB0, 0xE8, 0xC3, 0x3D, 0xEC, 0xC2, 0xA0, 0x91, 0x15, 0x02, 0x79, 0x93, 0x31, 0xE4, 0x3A, 0x17, 0x9D, 0x9F, 0x68, 0xCD, 0x73, 0x28, 0x83, 0xC3, 0x07, 0x43, 0x15, 0x05, 0x50, 0x9F, 0x78, 0x91, 0x2A, 0x98, 0x35, 0xA3, 0xE4, 0x84, 0x84, 0x55, 0xDF, 0x32, 0x29, 0x27, 0x91, 0xC8, 0xFF, 0x8B, 0x7B, 0x4E, 0x1B, 0xA1, 0x02, 0xBA, 0x31, 0x33, 0x79, 0x2E, 0x73, 0x1D, 0x00, 0x30, 0xF2, 0x1E, 0x83, 0xB4, 0x7B, 0xD1, 0x76, 0xD4, 0x9E, 0x2E, 0x32, 0xB6, 0xA5, 0x69, 0xB2, 0x28, 0x8E, 0xC4, 0xE3, 0xB0, 0x33, 0x7E, 0x59, 0x90, 0x92, 0x40, 0x3F, 0x2C, 0x98, 0xC6, 0xEE, 0x26, 0xF1, 0xE0, 0xE2, 0xB0, 0xA6, 0x50, 0xB0, 0x2E, 0xF1, 0xE3, 0x2D, 0x4F, 0xB5, 0x58, 0xDA, 0x07, 0xBE, 0x9D, 0x20, 0x7C, 0x10, 0x23, 0x6D, 0x60, 0x96, 0x11, 0xC9, 0xB4, 0xD4, 0x9C, 0xF0, 0x01, 0x8F, 0x9B, 0xC4, 0x83, 0xC6, 0x47, 0x53, 0x74, 0xDD, 0x74, 0x01, 0x03, 0x9C, 0x99, 0xA0, 0x5E, 0xE2, 0xA0, 0x05, 0x6E, 0x66, 0xB0, 0x01, 0xDD, 0x44, 0xFF, 0xA6, 0x65, 0x96, 0x92, 0x2B, 0x89, 0x57, }; static const uint8_t keygen_dh1664_g[] = { 0x05, }; static const uint8_t keygen_dh1728_p[] = { 0xED, 0x9F, 0xF6, 0x0C, 0xD6, 0x18, 0x33, 0xE8, 0x26, 0x13, 0xF2, 0x56, 0xE7, 0x9D, 0x03, 0x45, 0x99, 0xA0, 0x12, 0xB1, 0xBC, 0x45, 0xAD, 0xA7, 0x14, 0xCC, 0x37, 0x97, 0x4D, 0x21, 0x6D, 0x52, 0x16, 0x6B, 0x20, 0x0B, 0x8D, 0xA6, 0x43, 0xDF, 0x6C, 0x5C, 0x5A, 0xF2, 0x24, 0xBF, 0x04, 0x03, 0x2E, 0xF6, 0xFE, 0x45, 0x30, 0x88, 0x2B, 0x07, 0x5C, 0xAA, 0xAE, 0x7E, 0x33, 0xEF, 0xE6, 0x92, 0xD6, 0xFD, 0x61, 0x5F, 0xEF, 0xAC, 0xFB, 0x64, 0x8D, 0x41, 0xE7, 0x52, 0xD2, 0x56, 0x74, 0x3A, 0xE5, 0x5E, 0x7E, 0x88, 0x8D, 0xCD, 0xEA, 0xA8, 0xEF, 0x09, 0x9E, 0xDC, 0xBB, 0xC2, 0x10, 0xA8, 0xE8, 0x7B, 0x24, 0x1B, 0x28, 0xA7, 0x1C, 0x0C, 0x53, 0xB8, 0xC2, 0xF3, 0x01, 0x32, 0xBA, 0xE5, 0x8B, 0x6F, 0x3B, 0xB9, 0x36, 0x44, 0x5B, 0x3A, 0x73, 0x44, 0x8F, 0xDE, 0x99, 0x69, 0x22, 0xE0, 0x2C, 0x45, 0x71, 0xA9, 0x52, 0x1C, 0xCD, 0x19, 0x02, 0xBD, 0x06, 0xD2, 0x57, 0x45, 0xE3, 0x6C, 0x96, 0x6D, 0x0B, 0x25, 0x56, 0x4C, 0x40, 0x2E, 0x7E, 0x83, 0xEE, 0xE1, 0xB2, 0x65, 0x51, 0x04, 0x8D, 0x6A, 0x08, 0x44, 0xF0, 0x80, 0xB1, 0xFE, 0x13, 0x15, 0x9B, 0x82, 0x65, 0xF0, 0x89, 0xBC, 0x7E, 0x63, 0xF6, 0x08, 0xD3, 0xBA, 0xA9, 0x66, 0x35, 0x5F, 0x0C, 0xF7, 0xE9, 0x52, 0xA3, 0x4D, 0x66, 0x01, 0xE7, 0x28, 0xF4, 0xDC, 0xF2, 0x46, 0xBB, 0x02, 0x95, 0x21, 0x6A, 0x8F, 0x97, 0xA7, 0x3F, 0x06, 0x2E, 0xB2, 0x97, 0xEC, 0x5A, 0xFB, }; static const uint8_t keygen_dh1728_g[] = { 0x05, }; static const uint8_t keygen_dh1792_p[] = { 0x9A, 0x87, 0x16, 0x1D, 0x23, 0x55, 0xC7, 0x06, 0x55, 0xD7, 0xB1, 0xB3, 0x71, 0x66, 0x9A, 0x16, 0x5A, 0xA6, 0x8F, 0x54, 0x50, 0x99, 0xBD, 0x90, 0x8C, 0x84, 0xB3, 0xBC, 0x02, 0xFE, 0xCB, 0x07, 0x3A, 0x7E, 0x97, 0x12, 0x32, 0xEC, 0xA0, 0x0B, 0xEA, 0x96, 0x51, 0xB4, 0x50, 0x4E, 0x3A, 0xCB, 0x27, 0xA9, 0x42, 0x51, 0x49, 0x35, 0x9F, 0x45, 0x6B, 0xDA, 0xE0, 0x6C, 0x10, 0x80, 0x00, 0x41, 0xC2, 0xFC, 0x91, 0xB6, 0x59, 0xCE, 0x76, 0x7F, 0x21, 0xC6, 0x10, 0x8A, 0x68, 0x68, 0x54, 0x76, 0xCE, 0x33, 0xA6, 0x37, 0xCF, 0x80, 0xDF, 0x37, 0x12, 0x77, 0xBA, 0xBF, 0x15, 0x10, 0x22, 0x4A, 0xA1, 0x9B, 0xA6, 0x6B, 0x8E, 0x14, 0x4F, 0x64, 0xF4, 0x87, 0x64, 0xAA, 0x6E, 0xBC, 0xB5, 0xB2, 0x96, 0x27, 0xD1, 0x1A, 0x6E, 0x6D, 0x4B, 0xC6, 0x43, 0x28, 0xE9, 0xFC, 0xA4, 0xCB, 0x61, 0x8F, 0xEA, 0xE8, 0x40, 0xF2, 0x0A, 0x19, 0xBA, 0x17, 0x49, 0x9A, 0x9F, 0xEF, 0x65, 0xBC, 0x70, 0x85, 0xDD, 0x98, 0xB9, 0x8B, 0x25, 0x2C, 0xE1, 0x89, 0xC4, 0x60, 0xA0, 0xA9, 0x7E, 0xFB, 0xEC, 0xBC, 0x4C, 0x1D, 0x25, 0x5D, 0x70, 0x2E, 0x73, 0x29, 0x22, 0xA7, 0x83, 0x11, 0xC0, 0x64, 0xA9, 0xB6, 0xFA, 0x11, 0xC8, 0xC4, 0x14, 0x30, 0x64, 0xE4, 0x76, 0xBE, 0x41, 0x62, 0xE6, 0x9F, 0xD6, 0x2A, 0xEC, 0x60, 0xCF, 0xBD, 0x25, 0x2E, 0x3C, 0x6C, 0x40, 0x16, 0x32, 0x5C, 0xB5, 0x3D, 0xFB, 0xD7, 0x3C, 0x59, 0x06, 0xBE, 0x37, 0x54, 0x40, 0x90, 0x3D, 0x51, 0x01, 0x9A, 0x1E, 0x87, 0x05, 0xE3, }; static const uint8_t keygen_dh1792_g[] = { 0x05, }; static const uint8_t keygen_dh1856_p[] = { 0xA8, 0xD1, 0xC4, 0xCA, 0x89, 0xB5, 0xB3, 0x17, 0xEB, 0x4D, 0xB1, 0x58, 0x73, 0x28, 0xDD, 0x7F, 0x67, 0x78, 0x13, 0x7D, 0x0D, 0x0E, 0x77, 0x43, 0xB8, 0xA5, 0xCD, 0x84, 0xD3, 0x29, 0x3F, 0x00, 0xD7, 0xB0, 0x66, 0x95, 0x52, 0x9D, 0x49, 0xAD, 0x9C, 0xCE, 0x83, 0xB1, 0xDB, 0x86, 0x90, 0x9A, 0x40, 0xAD, 0x0A, 0xB0, 0x3A, 0x93, 0x33, 0x07, 0xC8, 0x32, 0x4D, 0x75, 0x1E, 0x7B, 0xDC, 0xD3, 0x23, 0x5C, 0xCB, 0x83, 0x62, 0x79, 0x3A, 0x88, 0xE8, 0xD0, 0x9B, 0x75, 0x4D, 0xA0, 0x1F, 0x3E, 0x08, 0x61, 0x5D, 0xEF, 0x7C, 0xF0, 0x4D, 0xF8, 0xDD, 0x95, 0xEC, 0x31, 0xDD, 0x50, 0xA5, 0x4B, 0xAA, 0x8E, 0xED, 0x45, 0x34, 0xCB, 0x87, 0x09, 0x4F, 0x36, 0xF6, 0xF4, 0xF7, 0x08, 0x0D, 0xBA, 0xBC, 0x06, 0x22, 0x59, 0x83, 0x93, 0xF6, 0x4B, 0xBC, 0x35, 0xAD, 0x48, 0x82, 0x40, 0x55, 0x51, 0xBC, 0xF8, 0xE2, 0x9A, 0x11, 0xF2, 0x08, 0x1E, 0xCA, 0x55, 0x40, 0x36, 0x00, 0xBE, 0x1C, 0xC8, 0x94, 0x2E, 0x35, 0x7D, 0xB0, 0xA4, 0xCD, 0x1C, 0xC1, 0xFF, 0x58, 0xE1, 0xBB, 0x31, 0xE9, 0x13, 0x16, 0x7F, 0x43, 0x88, 0xB2, 0x43, 0x62, 0x2A, 0x79, 0xE3, 0x61, 0xDF, 0xF5, 0xC9, 0x9C, 0x33, 0xDD, 0x93, 0x58, 0xFC, 0x08, 0x51, 0xE8, 0xA8, 0x30, 0x61, 0x64, 0x83, 0xB3, 0x20, 0xC4, 0x53, 0x95, 0xD6, 0xB3, 0x74, 0xB5, 0xFA, 0xB1, 0x65, 0xD1, 0xF9, 0xED, 0xB1, 0x9B, 0x97, 0x86, 0xC6, 0xDE, 0x6E, 0x5F, 0xF4, 0x6A, 0x42, 0xFA, 0x1F, 0x6E, 0xEA, 0x5B, 0x43, 0x4C, 0xCC, 0x62, 0x76, 0xFE, 0x9B, 0xA0, 0xB9, 0x7C, 0x50, 0x5E, 0x8B, }; static const uint8_t keygen_dh1856_g[] = { 0x05, }; static const uint8_t keygen_dh1920_p[] = { 0xC2, 0x68, 0xB1, 0x2E, 0x41, 0xB7, 0xA3, 0xCC, 0xE8, 0x10, 0x48, 0xE8, 0x80, 0xA5, 0x56, 0x82, 0x3C, 0x05, 0xA3, 0xC4, 0x20, 0xD5, 0xD7, 0x19, 0x54, 0x60, 0xA4, 0x97, 0x95, 0x09, 0x3D, 0xDF, 0x10, 0xFF, 0x21, 0x0D, 0x68, 0x19, 0x15, 0x89, 0xD1, 0x44, 0x14, 0x1E, 0xF2, 0xD8, 0xFD, 0x9D, 0x35, 0x8C, 0xA6, 0x2B, 0x7D, 0x73, 0x9A, 0xEB, 0x86, 0x28, 0x4D, 0x3B, 0x22, 0xEF, 0x1A, 0x35, 0xB6, 0x95, 0xA2, 0xFF, 0x03, 0x40, 0x49, 0x60, 0x59, 0xD2, 0x2D, 0xAD, 0x00, 0xEF, 0x6A, 0x5B, 0xFB, 0xA6, 0x16, 0x01, 0x92, 0x5E, 0x7D, 0x95, 0x2E, 0x18, 0xD5, 0x23, 0x9E, 0x9E, 0x87, 0xF2, 0x2F, 0xFC, 0xE4, 0xF7, 0xC2, 0x28, 0x44, 0x97, 0xAB, 0xB5, 0xC1, 0xD3, 0x8A, 0x53, 0xD7, 0xE5, 0x04, 0x78, 0xF2, 0xD9, 0x21, 0xD5, 0x46, 0x17, 0x8A, 0xFC, 0xDB, 0x57, 0x29, 0xDD, 0x78, 0x5B, 0x05, 0xA9, 0xB0, 0x13, 0x45, 0x1C, 0x84, 0xEE, 0x46, 0x73, 0x1B, 0x8E, 0x80, 0x45, 0x73, 0x04, 0xF9, 0x23, 0x96, 0xBA, 0xBD, 0x51, 0x69, 0x81, 0xE4, 0xAE, 0x0D, 0x0A, 0xC4, 0x93, 0xD9, 0x67, 0x14, 0x92, 0x5A, 0x96, 0x86, 0x9F, 0xCD, 0x6E, 0x9A, 0x2A, 0x17, 0xA9, 0x1A, 0xDD, 0x00, 0x7C, 0x78, 0xD8, 0x06, 0xC5, 0xB4, 0xA4, 0xF6, 0xCF, 0x22, 0xCD, 0xCA, 0x0E, 0x27, 0x97, 0xDD, 0x22, 0x02, 0x31, 0x2B, 0x9C, 0xFF, 0x7E, 0x35, 0x3C, 0xDA, 0xAB, 0x51, 0x68, 0x5A, 0x81, 0xF3, 0xA5, 0xA9, 0x04, 0xDA, 0x45, 0x07, 0xC6, 0x4A, 0xEF, 0x5D, 0x0E, 0xC3, 0x41, 0xD6, 0xAC, 0xD0, 0x8D, 0x56, 0xAC, 0xB4, 0x89, 0x53, 0x41, 0x06, 0x99, 0x83, 0x04, 0xBE, 0x6D, 0x2B, 0x28, 0xEB, 0x47, }; static const uint8_t keygen_dh1920_g[] = { 0x05, }; static const uint8_t keygen_dh1984_p[] = { 0xD8, 0xF3, 0xDC, 0x89, 0xE0, 0x6E, 0xD4, 0x07, 0xC3, 0x95, 0xC0, 0x17, 0x39, 0xCE, 0xF6, 0xD0, 0x8A, 0xD7, 0x85, 0xD3, 0x83, 0x4D, 0xDC, 0x0B, 0x85, 0x3B, 0xB7, 0x47, 0xEA, 0xDF, 0xE3, 0x34, 0xCA, 0xA9, 0x60, 0x9A, 0x4F, 0x8E, 0x8B, 0xAE, 0x8A, 0xAF, 0xD3, 0x96, 0x56, 0xFC, 0x1D, 0x37, 0x9A, 0x96, 0x57, 0x21, 0x32, 0xF0, 0x22, 0xE8, 0x68, 0x8B, 0x73, 0xAE, 0x1B, 0xAB, 0xFB, 0x79, 0x1B, 0x7E, 0xDC, 0xAD, 0x9D, 0xA2, 0xF3, 0x5E, 0x11, 0x46, 0x54, 0x4E, 0x88, 0x92, 0x2B, 0x79, 0x3B, 0xBB, 0x14, 0xD8, 0x3B, 0x0B, 0xB0, 0x55, 0xE5, 0x9A, 0xA9, 0xA0, 0x94, 0x3C, 0x72, 0xE0, 0x47, 0x58, 0xA5, 0x85, 0xDC, 0x4A, 0x6D, 0x50, 0x98, 0x28, 0x9B, 0xA1, 0xB2, 0x95, 0xBB, 0x1A, 0x41, 0x05, 0xBC, 0x32, 0x02, 0x72, 0xBB, 0xF7, 0x1A, 0x48, 0xC3, 0xD9, 0x4F, 0xBD, 0x32, 0xC8, 0x82, 0xAB, 0xCE, 0xDE, 0x24, 0x6A, 0x0C, 0x92, 0xF8, 0xFB, 0xFF, 0x18, 0x33, 0x48, 0xAC, 0xD7, 0xA3, 0x12, 0x0D, 0x52, 0x15, 0x3A, 0xA4, 0x6D, 0x85, 0x0A, 0xBF, 0x19, 0x63, 0x82, 0x3E, 0xB9, 0x52, 0x98, 0xEA, 0xCC, 0x56, 0x66, 0x0F, 0x96, 0x90, 0x1D, 0x35, 0xD6, 0xE1, 0xF6, 0x2B, 0x5B, 0xF7, 0x75, 0x12, 0xE5, 0xD9, 0xED, 0x2E, 0x20, 0xA0, 0xF5, 0x68, 0xA8, 0xC9, 0x6E, 0x08, 0xD0, 0xD2, 0xE7, 0xB6, 0xCB, 0x51, 0xA2, 0x5A, 0x34, 0x0B, 0xF3, 0x13, 0xAF, 0x5A, 0x46, 0x8B, 0xCB, 0xC9, 0x46, 0x02, 0x15, 0xFE, 0x96, 0x45, 0x25, 0x7D, 0x76, 0x56, 0x16, 0x8C, 0x97, 0xF3, 0x74, 0xFC, 0x2F, 0x5D, 0xFA, 0xCD, 0x62, 0x23, 0x02, 0xF8, 0x19, 0x94, 0xEE, 0xE6, 0x18, 0x09, 0xDE, 0x64, 0xB4, 0x3A, 0xDC, 0x0A, 0x5E, 0x26, 0x83, }; static const uint8_t keygen_dh1984_g[] = { 0x05, }; static const uint8_t keygen_dh2048_p[] = { 0x8F, 0x3E, 0xC1, 0x36, 0xCA, 0x60, 0xCE, 0xD1, 0xC5, 0xFD, 0x22, 0x05, 0xD6, 0x94, 0x38, 0x20, 0x4F, 0xE1, 0xAF, 0xBC, 0xA6, 0x82, 0xBD, 0x71, 0xFD, 0xD6, 0xC2, 0x61, 0xE8, 0xC1, 0xBD, 0xA9, 0x5E, 0xFD, 0x02, 0x51, 0xB6, 0x1F, 0x38, 0x30, 0x44, 0x76, 0x94, 0xB3, 0x26, 0x79, 0x35, 0xC4, 0xDF, 0x51, 0x80, 0xAF, 0x0D, 0x81, 0xCC, 0xA2, 0x33, 0xD1, 0x1E, 0x77, 0xB8, 0x06, 0xD7, 0xE5, 0x83, 0x34, 0x04, 0xF2, 0x96, 0x24, 0x37, 0xFE, 0xBC, 0x20, 0x9C, 0x66, 0x4C, 0xEB, 0x4F, 0xFD, 0x1F, 0x99, 0x56, 0x40, 0xD9, 0xE8, 0x6B, 0x2A, 0x8D, 0x6B, 0x56, 0xB2, 0xB4, 0x6D, 0x83, 0x47, 0x4C, 0x18, 0x53, 0x8B, 0xB1, 0xA3, 0x51, 0xC2, 0x07, 0xA3, 0x36, 0x43, 0x4B, 0x94, 0x10, 0xFD, 0x24, 0xA3, 0x77, 0x74, 0x77, 0xFA, 0x98, 0x4B, 0x43, 0x0B, 0xB6, 0xEC, 0x7F, 0x5C, 0x7E, 0xBA, 0xB7, 0xC7, 0xAA, 0x72, 0x11, 0x9F, 0x73, 0x14, 0x45, 0x03, 0x7A, 0x4E, 0xE5, 0xE7, 0x5C, 0x64, 0xB8, 0x66, 0x66, 0xCE, 0xEE, 0xF8, 0xFF, 0x61, 0x0F, 0x5D, 0x4E, 0xF6, 0xED, 0xB1, 0xE5, 0x2F, 0x52, 0xAC, 0x2B, 0x8F, 0x34, 0x0D, 0x13, 0xF6, 0x4A, 0x3A, 0x6C, 0x56, 0xB3, 0x3C, 0x52, 0xA8, 0xB9, 0xBC, 0x27, 0xCA, 0x3B, 0xFB, 0x6E, 0xE7, 0x52, 0xFB, 0xB0, 0x2B, 0x4F, 0xC4, 0xBD, 0x24, 0x36, 0xE4, 0x71, 0x07, 0x74, 0x69, 0x5F, 0xE0, 0xB8, 0x59, 0x5F, 0x74, 0x2F, 0xCC, 0x03, 0xB0, 0x6D, 0x90, 0xD8, 0xD3, 0x7C, 0x5A, 0x31, 0x46, 0x5C, 0x7D, 0x1C, 0xC8, 0x0D, 0x18, 0x80, 0x8E, 0x5A, 0xA8, 0x5E, 0x4D, 0x11, 0x2B, 0x76, 0xAC, 0x1E, 0x00, 0x51, 0x80, 0xE3, 0xED, 0x7A, 0xC0, 0x4F, 0x80, 0xFA, 0x5F, 0xD5, 0xD7, 0x4F, 0xA7, 0x14, 0xE1, 0x60, 0x3C, 0x95, 0x77, 0xCA, 0x3B, }; static const uint8_t keygen_dh2048_g[] = { 0x05, }; static const uint8_t keygen_dh2048_subprime_p[] = { 0x8F, 0x3E, 0xC1, 0x36, 0xCA, 0x60, 0xCE, 0xD1, 0xC5, 0xFD, 0x22, 0x05, 0xD6, 0x94, 0x38, 0x20, 0x4F, 0xE1, 0xAF, 0xBC, 0xA6, 0x82, 0xBD, 0x71, 0xFD, 0xD6, 0xC2, 0x61, 0xE8, 0xC1, 0xBD, 0xA9, 0x5E, 0xFD, 0x02, 0x51, 0xB6, 0x1F, 0x38, 0x30, 0x44, 0x76, 0x94, 0xB3, 0x26, 0x79, 0x35, 0xC4, 0xDF, 0x51, 0x80, 0xAF, 0x0D, 0x81, 0xCC, 0xA2, 0x33, 0xD1, 0x1E, 0x77, 0xB8, 0x06, 0xD7, 0xE5, 0x83, 0x34, 0x04, 0xF2, 0x96, 0x24, 0x37, 0xFE, 0xBC, 0x20, 0x9C, 0x66, 0x4C, 0xEB, 0x4F, 0xFD, 0x1F, 0x99, 0x56, 0x40, 0xD9, 0xE8, 0x6B, 0x2A, 0x8D, 0x6B, 0x56, 0xB2, 0xB4, 0x6D, 0x83, 0x47, 0x4C, 0x18, 0x53, 0x8B, 0xB1, 0xA3, 0x51, 0xC2, 0x07, 0xA3, 0x36, 0x43, 0x4B, 0x94, 0x10, 0xFD, 0x24, 0xA3, 0x77, 0x74, 0x77, 0xFA, 0x98, 0x4B, 0x43, 0x0B, 0xB6, 0xEC, 0x7F, 0x5C, 0x7E, 0xBA, 0xB7, 0xC7, 0xAA, 0x72, 0x11, 0x9F, 0x73, 0x14, 0x45, 0x03, 0x7A, 0x4E, 0xE5, 0xE7, 0x5C, 0x64, 0xB8, 0x66, 0x66, 0xCE, 0xEE, 0xF8, 0xFF, 0x61, 0x0F, 0x5D, 0x4E, 0xF6, 0xED, 0xB1, 0xE5, 0x2F, 0x52, 0xAC, 0x2B, 0x8F, 0x34, 0x0D, 0x13, 0xF6, 0x4A, 0x3A, 0x6C, 0x56, 0xB3, 0x3C, 0x52, 0xA8, 0xB9, 0xBC, 0x27, 0xCA, 0x3B, 0xFB, 0x6E, 0xE7, 0x52, 0xFB, 0xB0, 0x2B, 0x4F, 0xC4, 0xBD, 0x24, 0x36, 0xE4, 0x71, 0x07, 0x74, 0x69, 0x5F, 0xE0, 0xB8, 0x59, 0x5F, 0x74, 0x2F, 0xCC, 0x03, 0xB0, 0x6D, 0x90, 0xD8, 0xD3, 0x7C, 0x5A, 0x31, 0x46, 0x5C, 0x7D, 0x1C, 0xC8, 0x0D, 0x18, 0x80, 0x8E, 0x5A, 0xA8, 0x5E, 0x4D, 0x11, 0x2B, 0x76, 0xAC, 0x1E, 0x00, 0x51, 0x80, 0xE3, 0xED, 0x7A, 0xC0, 0x4F, 0x80, 0xFA, 0x5F, 0xD5, 0xD7, 0x4F, 0xA7, 0x14, 0xE1, 0x60, 0x3C, 0x95, 0x77, 0xCA, 0x3B, }; static const uint8_t keygen_dh2048_subprime_g[] = { 0x05, }; static const uint32_t keygen_dh256_private_bits; static const uint32_t keygen_dh320_private_bits = 256; static const uint32_t keygen_dh384_private_bits; static const uint32_t keygen_dh448_private_bits = 256; static const uint32_t keygen_dh512_private_bits; static const uint32_t keygen_dh576_private_bits = 288; static const uint32_t keygen_dh640_private_bits; static const uint32_t keygen_dh704_private_bits = 352; static const uint32_t keygen_dh768_private_bits; static const uint32_t keygen_dh832_private_bits = 416; static const uint32_t keygen_dh896_private_bits; static const uint32_t keygen_dh960_private_bits = 480; static const uint32_t keygen_dh1024_private_bits; static const uint32_t keygen_dh1088_private_bits = 544; static const uint32_t keygen_dh1152_private_bits; static const uint32_t keygen_dh1216_private_bits = 608; static const uint32_t keygen_dh1280_private_bits; static const uint32_t keygen_dh1344_private_bits = 672; static const uint32_t keygen_dh1408_private_bits; static const uint32_t keygen_dh1472_private_bits = 736; static const uint32_t keygen_dh1536_private_bits; static const uint32_t keygen_dh1600_private_bits = 800; static const uint32_t keygen_dh1664_private_bits; static const uint32_t keygen_dh1728_private_bits = 864; static const uint32_t keygen_dh1792_private_bits; static const uint32_t keygen_dh1856_private_bits = 928; static const uint32_t keygen_dh1920_private_bits; static const uint32_t keygen_dh1984_private_bits = 992; static const uint32_t keygen_dh2048_private_bits; static const uint32_t keygen_dh2048_subprime_private_bits; static const uint8_t keygen_dh2048_subprime_subprime[] = { 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; /* * Test data from 186-3dsatestvectors.zip KeyPair.rsp * http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3dsatestvectors.zip */ /* [mod = L=1024, N=160] */ static const uint8_t keygen_dsa_test1_p[] = { 0xd3, 0x83, 0x11, 0xe2, 0xcd, 0x38, 0x8c, 0x3e, 0xd6, 0x98, 0xe8, 0x2f, 0xdf, 0x88, 0xeb, 0x92, 0xb5, 0xa9, 0xa4, 0x83, 0xdc, 0x88, 0x00, 0x5d, 0x4b, 0x72, 0x5e, 0xf3, 0x41, 0xea, 0xbb, 0x47, 0xcf, 0x8a, 0x7a, 0x8a, 0x41, 0xe7, 0x92, 0xa1, 0x56, 0xb7, 0xce, 0x97, 0x20, 0x6c, 0x4f, 0x9c, 0x5c, 0xe6, 0xfc, 0x5a, 0xe7, 0x91, 0x21, 0x02, 0xb6, 0xb5, 0x02, 0xe5, 0x90, 0x50, 0xb5, 0xb2, 0x1c, 0xe2, 0x63, 0xdd, 0xdb, 0x20, 0x44, 0xb6, 0x52, 0x23, 0x6f, 0x4d, 0x42, 0xab, 0x4b, 0x5d, 0x6a, 0xa7, 0x31, 0x89, 0xce, 0xf1, 0xac, 0xe7, 0x78, 0xd7, 0x84, 0x5a, 0x5c, 0x1c, 0x1c, 0x71, 0x47, 0x12, 0x31, 0x88, 0xf8, 0xdc, 0x55, 0x10, 0x54, 0xee, 0x16, 0x2b, 0x63, 0x4d, 0x60, 0xf0, 0x97, 0xf7, 0x19, 0x07, 0x66, 0x40, 0xe2, 0x09, 0x80, 0xa0, 0x09, 0x31, 0x13, 0xa8, 0xbd, 0x73 }; static const uint8_t keygen_dsa_test1_q[] = { 0x96, 0xc5, 0x39, 0x0a, 0x8b, 0x61, 0x2c, 0x0e, 0x42, 0x2b, 0xb2, 0xb0, 0xea, 0x19, 0x4a, 0x3e, 0xc9, 0x35, 0xa2, 0x81 }; static const uint8_t keygen_dsa_test1_g[] = { 0x06, 0xb7, 0x86, 0x1a, 0xbb, 0xd3, 0x5c, 0xc8, 0x9e, 0x79, 0xc5, 0x2f, 0x68, 0xd2, 0x08, 0x75, 0x38, 0x9b, 0x12, 0x73, 0x61, 0xca, 0x66, 0x82, 0x21, 0x38, 0xce, 0x49, 0x91, 0xd2, 0xb8, 0x62, 0x25, 0x9d, 0x6b, 0x45, 0x48, 0xa6, 0x49, 0x5b, 0x19, 0x5a, 0xa0, 0xe0, 0xb6, 0x13, 0x7c, 0xa3, 0x7e, 0xb2, 0x3b, 0x94, 0x07, 0x4d, 0x3c, 0x3d, 0x30, 0x00, 0x42, 0xbd, 0xf1, 0x57, 0x62, 0x81, 0x2b, 0x63, 0x33, 0xef, 0x7b, 0x07, 0xce, 0xba, 0x78, 0x60, 0x76, 0x10, 0xfc, 0xc9, 0xee, 0x68, 0x49, 0x1d, 0xbc, 0x1e, 0x34, 0xcd, 0x12, 0x61, 0x54, 0x74, 0xe5, 0x2b, 0x18, 0xbc, 0x93, 0x4f, 0xb0, 0x0c, 0x61, 0xd3, 0x9e, 0x7d, 0xa8, 0x90, 0x22, 0x91, 0xc4, 0x43, 0x4a, 0x4e, 0x22, 0x24, 0xc3, 0xf4, 0xfd, 0x9f, 0x93, 0xcd, 0x6f, 0x4f, 0x17, 0xfc, 0x07, 0x63, 0x41, 0xa7, 0xe7, 0xd9 }; /* for i in {512..1024..64}; do openssl dsaparam -C $i; done */ static const uint8_t keygen_dsa512_p[] = { 0xC8, 0x6B, 0xB7, 0x91, 0xD6, 0x63, 0xCE, 0xC0, 0xC6, 0xB8, 0xAC, 0x5B, 0xEB, 0xA7, 0xEF, 0x17, 0xBE, 0x1A, 0x1A, 0x36, 0x6B, 0x38, 0x40, 0x0E, 0x69, 0x13, 0x32, 0xD4, 0x4B, 0xBE, 0x00, 0xB5, 0x29, 0x7F, 0x6B, 0x87, 0xAA, 0x1D, 0x98, 0x37, 0xD2, 0xAC, 0x62, 0x26, 0xD7, 0xFD, 0xE1, 0xC9, 0x13, 0x4F, 0x2A, 0xF2, 0x82, 0xEC, 0xA8, 0x83, 0x6F, 0x29, 0xD3, 0xF5, 0x16, 0xB9, 0x13, 0xCD, }; static const uint8_t keygen_dsa512_q[] = { 0x8D, 0xF9, 0x8B, 0x8A, 0xDA, 0x3B, 0x0B, 0x1C, 0xFA, 0x1C, 0xA7, 0xE8, 0x9A, 0xA2, 0xD7, 0xC3, 0x2D, 0xD5, 0x9D, 0x1B, }; static const uint8_t keygen_dsa512_g[] = { 0xB3, 0xE2, 0xFD, 0x38, 0xE0, 0x9A, 0x21, 0x64, 0x8F, 0x6D, 0x7E, 0x4F, 0xC2, 0x24, 0x18, 0x88, 0xEC, 0xA4, 0xCB, 0xB0, 0x5F, 0x43, 0xD8, 0x2B, 0x5B, 0xDE, 0x01, 0xB4, 0xD2, 0x24, 0x1F, 0x80, 0xE7, 0xFC, 0xF3, 0x15, 0xFA, 0x0C, 0x5B, 0x6F, 0x81, 0x55, 0x8C, 0x80, 0x36, 0xFB, 0x4D, 0xB5, 0x8C, 0x5A, 0x26, 0xBE, 0xFB, 0x78, 0xEA, 0x62, 0x6A, 0x9D, 0x5E, 0xD0, 0x21, 0x0C, 0xD9, 0x4E, }; static const uint8_t keygen_dsa576_p[] = { 0xF7, 0x85, 0x23, 0x2C, 0x2C, 0x86, 0xD4, 0x2B, 0xE5, 0x09, 0xAB, 0x60, 0xD6, 0x79, 0x05, 0x13, 0x75, 0x78, 0x1E, 0xAE, 0xEB, 0x5F, 0xBA, 0xFA, 0x6E, 0x05, 0xE7, 0xB3, 0x8D, 0x33, 0x4B, 0xE5, 0xB5, 0xAA, 0xD4, 0xE6, 0xA3, 0x9B, 0xA2, 0xF5, 0x7B, 0xF6, 0x32, 0xE6, 0x31, 0x6F, 0x34, 0x46, 0x16, 0xEA, 0xD8, 0x94, 0x79, 0xD7, 0x69, 0x23, 0xA4, 0x04, 0xE2, 0x25, 0xBB, 0x6D, 0xCC, 0x6E, 0x99, 0xB7, 0x90, 0x90, 0x89, 0xB9, 0x88, 0x19, }; static const uint8_t keygen_dsa576_q[] = { 0xF0, 0xD8, 0x71, 0x31, 0xB5, 0x01, 0xC1, 0x6B, 0x09, 0xCE, 0x7D, 0x2F, 0x82, 0x48, 0xB0, 0x21, 0x9C, 0xD6, 0xB5, 0xB1, }; static const uint8_t keygen_dsa576_g[] = { 0x33, 0x45, 0xB8, 0x9A, 0x17, 0x4B, 0xBF, 0xD3, 0xB2, 0xBA, 0xD2, 0xE4, 0xAC, 0x54, 0xA0, 0x9B, 0x5F, 0x5D, 0x95, 0x88, 0x9C, 0x0C, 0x59, 0xCE, 0x40, 0x0C, 0x05, 0xFD, 0xC4, 0x9D, 0x22, 0x27, 0xDA, 0xA6, 0xD1, 0x10, 0x61, 0x46, 0x31, 0x5C, 0x7D, 0x4E, 0xF6, 0x01, 0x38, 0x9A, 0x7E, 0x72, 0x4E, 0x7A, 0x07, 0xFB, 0x6D, 0x20, 0x9D, 0x59, 0xC6, 0x33, 0x6A, 0x64, 0xBF, 0x14, 0x30, 0x4E, 0x0C, 0x64, 0x9D, 0x11, 0xCF, 0x64, 0xCE, 0x29, }; static const uint8_t keygen_dsa640_p[] = { 0x88, 0x8C, 0x58, 0x99, 0xF4, 0x78, 0xEA, 0x31, 0x56, 0xB7, 0x2C, 0x70, 0xDC, 0x09, 0x5D, 0xB9, 0x13, 0x16, 0xCE, 0xDF, 0xFD, 0x8C, 0x4E, 0xF8, 0x32, 0x59, 0x00, 0x58, 0xD6, 0x44, 0x4F, 0x95, 0xF7, 0x85, 0x14, 0xC3, 0x10, 0x5A, 0xA2, 0x44, 0x2F, 0xA2, 0xC9, 0xB4, 0x88, 0x89, 0xA1, 0xAE, 0x0E, 0x82, 0xE1, 0xC1, 0x45, 0x09, 0x98, 0xF7, 0xCB, 0xF2, 0xD8, 0xA0, 0x6E, 0x32, 0x02, 0xE4, 0x0E, 0x7A, 0x43, 0x3A, 0xE1, 0x04, 0x4C, 0xC5, 0x78, 0x0E, 0x02, 0x27, 0xC4, 0xD0, 0xCA, 0x29, }; static const uint8_t keygen_dsa640_q[] = { 0xD7, 0x63, 0x4F, 0x3E, 0x6D, 0x52, 0x93, 0x69, 0xFA, 0xFF, 0xDE, 0x0D, 0x57, 0x3F, 0x24, 0xBB, 0x01, 0xF8, 0x01, 0xAD, }; static const uint8_t keygen_dsa640_g[] = { 0x76, 0xCB, 0x07, 0xB9, 0xE9, 0x3F, 0x3C, 0xA5, 0x18, 0x43, 0x83, 0xE6, 0xBC, 0x42, 0x09, 0xD9, 0xC5, 0x1C, 0x56, 0x57, 0x0B, 0x5B, 0x46, 0x65, 0x00, 0x67, 0xCA, 0x33, 0xC0, 0xA6, 0x37, 0xEA, 0x89, 0xAE, 0xDF, 0x1D, 0x79, 0x96, 0xC7, 0x0C, 0xD2, 0xAC, 0xD3, 0x2C, 0x46, 0xC2, 0xA0, 0x9D, 0x4B, 0x06, 0xB5, 0xDF, 0xAE, 0x73, 0xEB, 0x9A, 0x6A, 0x54, 0x39, 0x2C, 0xB1, 0x98, 0xAD, 0x44, 0xF3, 0x29, 0xC9, 0xC5, 0x75, 0xF1, 0x3C, 0xD8, 0x3B, 0xA1, 0x85, 0x29, 0x38, 0xB9, 0x17, 0xA5, }; static const uint8_t keygen_dsa704_p[] = { 0xDA, 0xEA, 0x9B, 0x6B, 0x35, 0x06, 0x2E, 0x7E, 0x71, 0xB2, 0x11, 0xD0, 0x37, 0x84, 0x88, 0xC0, 0x50, 0x94, 0x73, 0x78, 0xA8, 0x9C, 0xBD, 0x8C, 0xB1, 0x0A, 0xD5, 0x89, 0x52, 0x39, 0xBF, 0x41, 0xDC, 0xB9, 0xE5, 0x16, 0x1A, 0x86, 0xD5, 0xCF, 0xD6, 0x26, 0x84, 0x95, 0xE9, 0x0D, 0xCD, 0x98, 0x21, 0x6B, 0x3C, 0xFE, 0x6D, 0x2D, 0x42, 0x1A, 0x3F, 0xE0, 0xFF, 0x07, 0x41, 0x82, 0x30, 0x15, 0x17, 0xF3, 0x0F, 0x7B, 0xA0, 0xD3, 0x46, 0xFA, 0x1F, 0x1E, 0xEC, 0xBD, 0x26, 0xCE, 0x4C, 0xE3, 0xBD, 0x73, 0xA3, 0xA6, 0xA0, 0x12, 0xE1, 0xFD, }; static const uint8_t keygen_dsa704_q[] = { 0xCE, 0xB3, 0x2E, 0x41, 0xEB, 0xFD, 0x22, 0x2A, 0xCE, 0x9A, 0xAF, 0x24, 0xE3, 0x02, 0x50, 0xDE, 0x47, 0xBC, 0x4C, 0x1F, }; static const uint8_t keygen_dsa704_g[] = { 0x08, 0x83, 0x72, 0x6D, 0x0A, 0x8F, 0x19, 0x61, 0xE4, 0x62, 0x40, 0x29, 0x66, 0x6B, 0xDE, 0xBD, 0xAB, 0xE3, 0x5B, 0x58, 0x3F, 0xF5, 0xEA, 0xDE, 0x8E, 0x7A, 0x34, 0xAF, 0x1C, 0x99, 0x03, 0x1A, 0x51, 0x17, 0xFC, 0xE0, 0xA3, 0x22, 0x43, 0x63, 0xB6, 0x7E, 0x29, 0x4B, 0x23, 0x6C, 0xD1, 0xDE, 0x59, 0xEC, 0x1D, 0x67, 0x94, 0xDD, 0x2E, 0x88, 0x86, 0xD3, 0xD6, 0x68, 0x58, 0x36, 0x48, 0xF8, 0xEF, 0x38, 0x3F, 0xF5, 0x87, 0x96, 0x38, 0xD3, 0x48, 0x50, 0x1F, 0xA3, 0x4A, 0xCA, 0xD7, 0x4D, 0xC3, 0x84, 0x83, 0xB1, 0x8A, 0x95, 0xE0, 0xB3, }; static const uint8_t keygen_dsa768_p[] = { 0xF0, 0xB1, 0x93, 0xFD, 0x53, 0x98, 0x23, 0x43, 0xFB, 0x04, 0xB1, 0x31, 0x80, 0x3D, 0xD3, 0x95, 0x56, 0x51, 0xCC, 0x32, 0xA4, 0x51, 0x00, 0x8A, 0x80, 0xB6, 0x87, 0x70, 0xD7, 0x77, 0x8D, 0xA6, 0xC2, 0xB5, 0x85, 0xE1, 0xE0, 0x9E, 0x11, 0x28, 0x72, 0xE9, 0x45, 0x5B, 0x4D, 0xC9, 0xDC, 0x46, 0x64, 0x2F, 0x44, 0xD8, 0x24, 0xE3, 0x9B, 0xCC, 0xF9, 0x66, 0x31, 0x9C, 0x40, 0x64, 0xED, 0xC5, 0x48, 0x30, 0x84, 0x0C, 0xF9, 0x1F, 0xBC, 0x75, 0xD8, 0x8C, 0x53, 0x30, 0x25, 0xB6, 0xBD, 0xDA, 0xBE, 0xBC, 0xBA, 0x86, 0xB3, 0x7D, 0x27, 0x74, 0x9D, 0x68, 0xEA, 0xB8, 0xE0, 0x09, 0x3A, 0x7F, }; static const uint8_t keygen_dsa768_q[] = { 0xC9, 0x8C, 0x79, 0x7B, 0x98, 0xB5, 0xFD, 0x80, 0x5D, 0x4B, 0x26, 0x30, 0x42, 0x63, 0xDE, 0x37, 0xAB, 0x4B, 0xB7, 0xAF, }; static const uint8_t keygen_dsa768_g[] = { 0xD4, 0xE8, 0xF1, 0xB9, 0x6D, 0x40, 0x26, 0x19, 0x72, 0x39, 0x5C, 0x6F, 0x68, 0x4C, 0x8C, 0x18, 0xD8, 0x49, 0x3C, 0xB6, 0x5D, 0x72, 0xE3, 0xF4, 0x89, 0x24, 0x69, 0xC8, 0x76, 0x83, 0x38, 0xA2, 0x23, 0xF5, 0xB3, 0xD5, 0xCB, 0x0F, 0xC4, 0xFE, 0x45, 0x65, 0x2F, 0x2C, 0x3D, 0x32, 0x02, 0x28, 0xE5, 0xCA, 0x34, 0xEC, 0x1A, 0xBB, 0x82, 0x93, 0x2A, 0xD9, 0x64, 0x1E, 0xC5, 0x91, 0x34, 0x60, 0xF2, 0xE2, 0x2D, 0x64, 0x4E, 0x46, 0xAA, 0x00, 0x6F, 0x26, 0xD8, 0x98, 0x97, 0xBF, 0xCC, 0xF1, 0x1B, 0x4A, 0x8A, 0x7D, 0x39, 0xA4, 0xA4, 0x23, 0x82, 0x64, 0x78, 0x40, 0xED, 0x4C, 0x96, 0xB9, }; static const uint8_t keygen_dsa832_p[] = { 0x93, 0x47, 0x85, 0x69, 0x79, 0xF2, 0xAA, 0xC2, 0x83, 0xA4, 0x08, 0x2F, 0x3C, 0xE5, 0x4D, 0x3B, 0xFF, 0x4D, 0xC5, 0xF4, 0x03, 0x20, 0xFA, 0x15, 0xA8, 0x27, 0x80, 0x55, 0x29, 0x57, 0x60, 0x0B, 0x75, 0x01, 0x7B, 0x65, 0xCE, 0x4D, 0x7C, 0xF6, 0x7C, 0x4F, 0x1D, 0xC3, 0x67, 0xF2, 0xC1, 0x64, 0x38, 0x49, 0x54, 0x60, 0x57, 0x05, 0xEB, 0x31, 0xFA, 0x7B, 0x50, 0xA1, 0x0F, 0xCB, 0xC4, 0x4E, 0xDF, 0x92, 0x5A, 0x8B, 0x11, 0xBA, 0x6B, 0x7E, 0x7A, 0xB4, 0x80, 0xD0, 0x9A, 0xE2, 0x88, 0x7D, 0x83, 0xA6, 0x81, 0x81, 0x71, 0xD0, 0x06, 0xDE, 0xCC, 0xA4, 0xB9, 0x0A, 0x6B, 0x81, 0x31, 0x28, 0x1D, 0xEF, 0x5F, 0x99, 0xDE, 0xEC, 0xDA, 0x4D, }; static const uint8_t keygen_dsa832_q[] = { 0xF8, 0xF5, 0xAF, 0x31, 0x0D, 0xBE, 0x6F, 0x4B, 0x79, 0x87, 0xA2, 0x98, 0xED, 0xF1, 0x2A, 0x93, 0x3D, 0x12, 0x5D, 0x25, }; static const uint8_t keygen_dsa832_g[] = { 0x11, 0x21, 0xBC, 0x83, 0x7A, 0xD9, 0x5F, 0x0E, 0xA2, 0xF7, 0x96, 0xB7, 0x6A, 0xDD, 0xAE, 0xBA, 0x11, 0x26, 0x58, 0xF6, 0xB1, 0xCF, 0x94, 0x35, 0x3B, 0xFB, 0x9C, 0x9B, 0x16, 0xB8, 0x58, 0xBA, 0x2F, 0x5C, 0xE5, 0x18, 0xE1, 0x29, 0xA6, 0xA3, 0x1C, 0x0C, 0xA5, 0xC7, 0xAE, 0xE8, 0x31, 0x26, 0x8C, 0xCD, 0xA5, 0x69, 0xB2, 0x74, 0x31, 0x15, 0xCE, 0x82, 0xCD, 0x32, 0xF7, 0xC8, 0x90, 0x60, 0x96, 0x61, 0x07, 0x60, 0x63, 0x6B, 0x48, 0x03, 0xCD, 0x1F, 0x58, 0x7D, 0x8E, 0xAF, 0x26, 0x16, 0x3B, 0xC6, 0xA6, 0x03, 0xB4, 0xE1, 0x3E, 0xBE, 0x5B, 0xC9, 0xD3, 0xBD, 0xB6, 0x31, 0xC9, 0x34, 0x2C, 0x2B, 0x08, 0x3C, 0xE0, 0x1C, 0x1E, 0x01, }; static const uint8_t keygen_dsa896_p[] = { 0xCA, 0x16, 0xD2, 0xB2, 0x7C, 0xC5, 0x25, 0x99, 0x3A, 0xCC, 0xCB, 0x3F, 0x72, 0xAE, 0xD4, 0xA0, 0x1E, 0xE0, 0x19, 0x6A, 0x8A, 0xC2, 0xFC, 0xD5, 0xB2, 0xCC, 0xD1, 0x6F, 0xA3, 0x95, 0x30, 0xEC, 0x2B, 0x4A, 0x46, 0x6C, 0x72, 0xC3, 0x31, 0xFD, 0x94, 0x00, 0x55, 0xE7, 0x03, 0xC3, 0xDE, 0xD7, 0xE3, 0xF8, 0xAF, 0x32, 0x0A, 0x29, 0x32, 0xC5, 0x97, 0x93, 0x2A, 0xE6, 0xC6, 0x82, 0x49, 0x5C, 0x76, 0xB3, 0xCB, 0x47, 0xD7, 0xFF, 0xEA, 0xE5, 0x47, 0x87, 0x08, 0x6C, 0xEA, 0x6D, 0x1A, 0xF6, 0x47, 0xBA, 0xE3, 0x94, 0xE9, 0xFE, 0xF6, 0x06, 0xA1, 0x99, 0xDC, 0xCB, 0x3D, 0x7A, 0x06, 0x31, 0xAC, 0x25, 0xD3, 0x3C, 0x35, 0xAD, 0x36, 0x8D, 0x25, 0x41, 0xE9, 0x21, 0xD1, 0xF9, 0xC3, 0xC9, }; static const uint8_t keygen_dsa896_q[] = { 0xAE, 0x42, 0x0A, 0x1D, 0x76, 0xA9, 0xFB, 0xF1, 0xCB, 0x2D, 0x73, 0x35, 0x3F, 0x98, 0x63, 0x34, 0xE1, 0xCD, 0x3C, 0xCF, }; static const uint8_t keygen_dsa896_g[] = { 0x12, 0xD0, 0x15, 0x32, 0x0B, 0x7D, 0xE3, 0xD0, 0x36, 0x51, 0x79, 0x3E, 0xB4, 0x4E, 0xE2, 0x1E, 0x5E, 0x3E, 0x43, 0x4C, 0x5D, 0x49, 0x9D, 0xD4, 0xA3, 0xE3, 0xC8, 0x1F, 0x46, 0xA2, 0xCE, 0x95, 0xF9, 0x8D, 0xFC, 0xFD, 0x50, 0x48, 0xBF, 0xB5, 0x25, 0xB6, 0xFD, 0xF9, 0xF1, 0x97, 0xD5, 0x82, 0xEE, 0xE7, 0xDF, 0xC6, 0xDD, 0x09, 0x96, 0x15, 0xC0, 0x95, 0x60, 0xF4, 0x53, 0xF6, 0x19, 0xA4, 0x84, 0x53, 0xE4, 0x87, 0xB6, 0x0C, 0x6C, 0x01, 0x31, 0x72, 0x56, 0xA4, 0x2E, 0x25, 0xFC, 0x46, 0xB0, 0x47, 0xF3, 0x5A, 0x90, 0x69, 0xAC, 0x64, 0x02, 0xCB, 0x1F, 0x5F, 0x10, 0x70, 0x2B, 0x71, 0xF7, 0x9B, 0x70, 0x22, 0x7F, 0x05, 0xEB, 0xCB, 0x6D, 0x66, 0xDE, 0xFC, 0xED, 0x51, 0xC2, 0x4D, }; static const uint8_t keygen_dsa960_p[] = { 0xCA, 0x86, 0x31, 0x0C, 0x62, 0xC7, 0x25, 0x2F, 0xAA, 0x8D, 0xA5, 0x51, 0x97, 0x81, 0xB8, 0xC5, 0xFD, 0xDB, 0x47, 0xC4, 0x8E, 0xDF, 0x06, 0xAA, 0x76, 0xAD, 0x47, 0xDD, 0x56, 0x6C, 0x97, 0xEB, 0x8C, 0xEC, 0x59, 0x79, 0x1B, 0xBF, 0x96, 0x80, 0x50, 0x72, 0x8E, 0x2F, 0x34, 0x71, 0x5B, 0x03, 0x2D, 0xB0, 0x31, 0x37, 0x8C, 0xC4, 0x62, 0x99, 0x9D, 0xC2, 0xDF, 0x68, 0x35, 0xD5, 0x3F, 0xC1, 0x4B, 0xC4, 0x2F, 0xFA, 0xBD, 0x7E, 0xA5, 0x20, 0x8F, 0xB9, 0x5F, 0x98, 0xA9, 0x1B, 0xAF, 0x8A, 0xF8, 0x29, 0xEB, 0x44, 0xB6, 0x50, 0x96, 0xE2, 0xB4, 0x3D, 0x3C, 0xE6, 0x8B, 0xD5, 0x15, 0x39, 0x4F, 0xF4, 0xC3, 0x32, 0xD3, 0xE6, 0x36, 0x0D, 0x23, 0xFF, 0x76, 0x15, 0x05, 0xC1, 0xDF, 0xC2, 0x82, 0xCE, 0xDD, 0x60, 0x05, 0x92, 0x56, 0xE5, }; static const uint8_t keygen_dsa960_q[] = { 0xCE, 0x0A, 0x68, 0xA4, 0xAC, 0x5E, 0x8E, 0x4C, 0xA6, 0x8A, 0xAB, 0xA9, 0x39, 0xC7, 0xB4, 0x10, 0xCC, 0xF6, 0x1E, 0x2F, }; static const uint8_t keygen_dsa960_g[] = { 0x8A, 0x50, 0x28, 0x45, 0x69, 0x0E, 0x55, 0xB8, 0x86, 0xB5, 0xCB, 0xBC, 0x49, 0x8D, 0x73, 0x79, 0xE3, 0x26, 0x4E, 0x90, 0x71, 0xF2, 0xBB, 0x50, 0x18, 0xF8, 0x6D, 0x14, 0x8F, 0xCA, 0x20, 0xF7, 0x02, 0x31, 0x71, 0x8A, 0x7E, 0xF0, 0xFE, 0x9C, 0xAD, 0x05, 0x5E, 0x11, 0xB3, 0x40, 0x66, 0xE1, 0x2B, 0x0D, 0x84, 0x15, 0x18, 0x65, 0x00, 0xFA, 0x0D, 0x8A, 0x87, 0xC9, 0xBF, 0x4A, 0x5C, 0x53, 0x29, 0xEB, 0x44, 0xCA, 0xAE, 0x86, 0x50, 0x3B, 0xBB, 0x73, 0x06, 0x83, 0x72, 0x77, 0x17, 0xDB, 0x6E, 0x14, 0xAD, 0xCE, 0xD2, 0x51, 0xE6, 0x1F, 0xA2, 0x64, 0xE4, 0x5F, 0x35, 0x7D, 0x7A, 0xBE, 0x55, 0x9B, 0xB6, 0x0F, 0x3C, 0xA1, 0xD2, 0x45, 0xDD, 0xF8, 0xC4, 0x03, 0x45, 0xAA, 0x12, 0xE4, 0x90, 0x8C, 0xAC, 0x04, 0x45, 0x74, 0x11, 0x28, }; static const uint8_t keygen_dsa1024_p[] = { 0xAF, 0xA6, 0x9C, 0x37, 0x47, 0xD4, 0x65, 0xA6, 0xB1, 0x8D, 0xAC, 0x2E, 0xAB, 0xD5, 0x36, 0xCC, 0x83, 0x47, 0xDD, 0xB6, 0x12, 0xCC, 0x93, 0xA5, 0xBF, 0x7B, 0x24, 0xE7, 0x4A, 0xED, 0xEC, 0x63, 0x9E, 0x0B, 0x2D, 0xF8, 0xB3, 0x6B, 0xBB, 0xF9, 0x40, 0x8D, 0x56, 0x26, 0x60, 0xD0, 0xDD, 0x03, 0xF8, 0xC3, 0x82, 0x00, 0x2C, 0x27, 0x82, 0x5E, 0x30, 0x8B, 0x9D, 0xF1, 0xF7, 0xB2, 0x61, 0x01, 0x31, 0x30, 0xF3, 0x05, 0x2F, 0xF4, 0xB7, 0x1C, 0x1C, 0x3C, 0xB0, 0x2D, 0x2F, 0x1F, 0xE6, 0x2E, 0x21, 0x81, 0x0D, 0xFD, 0x66, 0x36, 0x90, 0x39, 0x4D, 0xA0, 0xCF, 0xFA, 0xDD, 0xF7, 0xD5, 0xE4, 0x09, 0xAA, 0x45, 0xDB, 0xE1, 0x55, 0x39, 0xD9, 0xF7, 0xDF, 0x34, 0x67, 0xBF, 0x95, 0x9B, 0xF2, 0x4A, 0x15, 0x42, 0x6F, 0x32, 0x1F, 0xDE, 0xA6, 0xFE, 0x18, 0x46, 0x6B, 0x8C, 0x4E, 0x01, 0x7F, }; static const uint8_t keygen_dsa1024_q[] = { 0xCC, 0x18, 0x69, 0xCE, 0x9E, 0x92, 0xE7, 0xCD, 0xBF, 0x94, 0xB5, 0xAD, 0x83, 0x5A, 0x56, 0xD6, 0x4E, 0xC4, 0xF7, 0xED, }; static const uint8_t keygen_dsa1024_g[] = { 0x14, 0x1D, 0x91, 0xAB, 0x8F, 0xFF, 0xFB, 0x2D, 0xD3, 0x2A, 0x43, 0xB5, 0x01, 0x40, 0xA4, 0xC7, 0x48, 0x0E, 0xE0, 0x10, 0xA9, 0xF7, 0x8B, 0x7E, 0x45, 0x90, 0xE0, 0x17, 0xC1, 0xB4, 0xE9, 0xBA, 0xC0, 0x04, 0xEF, 0x0F, 0xD6, 0x07, 0x78, 0x05, 0x25, 0xCF, 0x9D, 0x39, 0x66, 0x59, 0x53, 0xF8, 0xCE, 0x1C, 0x61, 0x1B, 0x7F, 0x95, 0x9B, 0xD5, 0xB6, 0xF9, 0xC7, 0xE3, 0xB8, 0x00, 0x78, 0x50, 0xE3, 0x4C, 0x76, 0xF8, 0x0E, 0x96, 0x11, 0xDB, 0x28, 0x53, 0xA5, 0xBB, 0x22, 0xC5, 0x71, 0x97, 0x09, 0xBC, 0xEE, 0x55, 0x9B, 0x6B, 0x22, 0x64, 0xE4, 0x49, 0x2C, 0xCD, 0x9E, 0xA5, 0x86, 0xF0, 0x3F, 0x08, 0xCD, 0x88, 0x07, 0xF6, 0x6E, 0x3F, 0x8E, 0x99, 0x31, 0xBA, 0x1A, 0xB9, 0x8E, 0xEC, 0xA3, 0x13, 0xC2, 0x85, 0xA5, 0xDC, 0xA4, 0xF0, 0x1F, 0xB2, 0xC8, 0xD5, 0x19, 0x79, 0xCA, 0x6A, }; /* derive key test data, taken from GP test specifikation */ static const uint8_t derive_key_dh_prime[] = { 0xe0, 0x01, 0xe8, 0x96, 0x7d, 0xb4, 0x93, 0x53, 0xe1, 0x6f, 0x8e, 0x89, 0x22, 0x0c, 0xce, 0xfc, 0x5c, 0x5f, 0x12, 0xe3, 0xdf, 0xf8, 0xf1, 0xd1, 0x49, 0x90, 0x12, 0xe6, 0xef, 0x53, 0xe3, 0x1f, 0x02, 0xea, 0xcc, 0x5a, 0xdd, 0xf3, 0x37, 0x89, 0x35, 0xc9, 0x5b, 0x21, 0xea, 0x3d, 0x6f, 0x1c, 0xd7, 0xce, 0x63, 0x75, 0x52, 0xec, 0x38, 0x6c, 0x0e, 0x34, 0xf7, 0x36, 0xad, 0x95, 0x17, 0xef, 0xfe, 0x5e, 0x4d, 0xa7, 0xa8, 0x6a, 0xf9, 0x0e, 0x2c, 0x22, 0x8f, 0xe4, 0xb9, 0xe6, 0xd8, 0xf8, 0xf0, 0x2d, 0x20, 0xaf, 0x78, 0xab, 0xb6, 0x92, 0xac, 0xbc, 0x4b, 0x23, 0xfa, 0xf2, 0xc5, 0xcc, 0xd4, 0x9a, 0x0c, 0x9a, 0x8b, 0xcd, 0x91, 0xac, 0x0c, 0x55, 0x92, 0x01, 0xe6, 0xc2, 0xfd, 0x1f, 0x47, 0xc2, 0xcb, 0x2a, 0x88, 0xa8, 0x3c, 0x21, 0x0f, 0xc0, 0x54, 0xdb, 0x29, 0x2d, 0xbc, 0x45 }; static const uint8_t derive_key_dh_base[] = { 0x1c, 0xe0, 0xf6, 0x69, 0x26, 0x46, 0x11, 0x97, 0xef, 0x45, 0xc4, 0x65, 0x8b, 0x83, 0xb8, 0xab }; static const uint8_t derive_key_dh_public_value[] = { 0xbb, 0xe9, 0x18, 0xdd, 0x4b, 0x2b, 0x94, 0x1b, 0x10, 0x0e, 0x88, 0x35, 0x28, 0x68, 0xfc, 0x62, 0x04, 0x38, 0xa6, 0xdb, 0x32, 0xa6, 0x9e, 0xee, 0x6c, 0x6f, 0x45, 0x1c, 0xa3, 0xa6, 0xd5, 0x37, 0x77, 0x75, 0x5b, 0xc1, 0x37, 0x0a, 0xce, 0xfe, 0x2b, 0x8f, 0x13, 0xa9, 0x14, 0x2c, 0x5b, 0x44, 0x15, 0x78, 0x86, 0x30, 0xd6, 0x95, 0xb1, 0x92, 0x20, 0x63, 0xa3, 0xcf, 0x9d, 0xef, 0x65, 0x61, 0x27, 0x4d, 0x24, 0x01, 0xe7, 0xa1, 0x45, 0xf2, 0xd8, 0xb9, 0x3a, 0x45, 0x17, 0xf4, 0x19, 0xd0, 0x5e, 0xf8, 0xcb, 0x35, 0x59, 0x37, 0x9d, 0x04, 0x20, 0xa3, 0xbf, 0x02, 0xad, 0xfe, 0xa8, 0x60, 0xb2, 0xc3, 0xee, 0x85, 0x58, 0x90, 0xf3, 0xb5, 0x57, 0x2b, 0xb4, 0xef, 0xd7, 0x8f, 0x37, 0x68, 0x78, 0x7c, 0x71, 0x52, 0x9d, 0x5e, 0x0a, 0x61, 0x4f, 0x09, 0x89, 0x92, 0x39, 0xf7, 0x4b, 0x01 }; static const uint8_t derive_key_dh_private_value[] = { 0x53, 0x8d, 0x3d, 0x64, 0x27, 0x4a, 0x40, 0x05, 0x9b, 0x9c, 0x26, 0xe9, 0x13, 0xe6, 0x91, 0x53, 0x23, 0x7b, 0x55, 0x83 }; static const uint8_t derive_key_dh_public_value_2[] = { 0xa3, 0xf5, 0x7d, 0xbe, 0x9e, 0x2f, 0x0a, 0xda, 0xa9, 0x4e, 0x4e, 0x6a, 0xf0, 0xe0, 0x71, 0x47, 0x0e, 0x2e, 0x41, 0x2e, 0xde, 0x73, 0x2a, 0x62, 0x14, 0xc3, 0x7c, 0x26, 0xd4, 0xe9, 0x9a, 0x54, 0xba, 0x3d, 0xe7, 0x49, 0x85, 0x95, 0x0e, 0xe9, 0x14, 0xb2, 0x90, 0x22, 0x91, 0xdc, 0xff, 0x61, 0xb2, 0xfc, 0xd1, 0xd0, 0x1b, 0x11, 0x14, 0xb6, 0x02, 0x64, 0x2b, 0x26, 0x5d, 0x88, 0xea, 0x8d, 0xbb, 0xe2, 0x07, 0x0b, 0x48, 0xfb, 0x01, 0x53, 0x55, 0x1e, 0x59, 0x51, 0x36, 0xf2, 0xf9, 0xd1, 0x97, 0xfb, 0x66, 0x12, 0x84, 0x5d, 0xed, 0xb8, 0x9b, 0x2d, 0x3e, 0x2b, 0x8c, 0xeb, 0x2a, 0x72, 0x40, 0x9d, 0x55, 0x4c, 0xed, 0xeb, 0x55, 0x02, 0xff, 0x8c, 0xb0, 0x2e, 0x03, 0x65, 0x3f, 0x41, 0xb1, 0xac, 0xa3, 0x30, 0x6b, 0xff, 0x6d, 0xf4, 0x6d, 0xe6, 0xe1, 0x0f, 0x86, 0x7c, 0x43, 0x64 }; static const uint8_t derive_key_dh_shared_secret[] = { 0x4e, 0x6a, 0xcf, 0xfd, 0x7d, 0x14, 0x27, 0x65, 0xeb, 0xf4, 0xc7, 0x12, 0x41, 0x4f, 0xe4, 0xb6, 0xab, 0x95, 0x7f, 0x4c, 0xb4, 0x66, 0xb4, 0x66, 0x01, 0x28, 0x9b, 0xb8, 0x20, 0x60, 0x42, 0x82, 0x72, 0x84, 0x2e, 0xe2, 0x8f, 0x11, 0x3c, 0xd1, 0x1f, 0x39, 0x43, 0x1c, 0xbf, 0xfd, 0x82, 0x32, 0x54, 0xce, 0x47, 0x2e, 0x21, 0x05, 0xe4, 0x9b, 0x3d, 0x7f, 0x11, 0x3b, 0x82, 0x50, 0x76, 0xe6, 0x26, 0x45, 0x85, 0x80, 0x7b, 0xc4, 0x64, 0x54, 0x66, 0x5f, 0x27, 0xc5, 0xe4, 0xe1, 0xa4, 0xbd, 0x03, 0x47, 0x04, 0x86, 0x32, 0x29, 0x81, 0xfd, 0xc8, 0x94, 0xcc, 0xa1, 0xe2, 0x93, 0x09, 0x87, 0xc9, 0x2c, 0x15, 0xa3, 0x8b, 0xc4, 0x2e, 0xb3, 0x88, 0x10, 0xe8, 0x67, 0xc4, 0x43, 0x2f, 0x07, 0x25, 0x9e, 0xc0, 0x0c, 0xdb, 0xbb, 0x0f, 0xb9, 0x9e, 0x17, 0x27, 0xc7, 0x06, 0xda, 0x58, 0xdd }; static const uint32_t derive_key_max_keysize = 1024; static struct derive_key_ecdh_t { uint32_t level; /* test suite level */ uint32_t algo; /* TEE_ALG_ECDH_P192,... */ uint32_t curve; /* TEE_ECC_CURVE_NIST_P192,... */ uint32_t keysize; /* key size, in bits */ const uint8_t *public_x; /* public key - x == QCAVSx */ const uint8_t *public_y; /* public key - y == QCAVSy */ const uint8_t *private; /* private key == dIUT */ const uint8_t *out; /* expected result - ZIUT */ } const derive_key_ecdh[] = { /* [P-192] */ { .level = 0, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_1_public_x, .public_y = nist_kas_ecc_cdh_testvector_1_public_y, .private = nist_kas_ecc_cdh_testvector_1_private, .out = nist_kas_ecc_cdh_testvector_1_out, }, { .level = 1, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_2_public_x, .public_y = nist_kas_ecc_cdh_testvector_2_public_y, .private = nist_kas_ecc_cdh_testvector_2_private, .out = nist_kas_ecc_cdh_testvector_2_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_3_public_x, .public_y = nist_kas_ecc_cdh_testvector_3_public_y, .private = nist_kas_ecc_cdh_testvector_3_private, .out = nist_kas_ecc_cdh_testvector_3_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_4_public_x, .public_y = nist_kas_ecc_cdh_testvector_4_public_y, .private = nist_kas_ecc_cdh_testvector_4_private, .out = nist_kas_ecc_cdh_testvector_4_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_5_public_x, .public_y = nist_kas_ecc_cdh_testvector_5_public_y, .private = nist_kas_ecc_cdh_testvector_5_private, .out = nist_kas_ecc_cdh_testvector_5_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_6_public_x, .public_y = nist_kas_ecc_cdh_testvector_6_public_y, .private = nist_kas_ecc_cdh_testvector_6_private, .out = nist_kas_ecc_cdh_testvector_6_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_7_public_x, .public_y = nist_kas_ecc_cdh_testvector_7_public_y, .private = nist_kas_ecc_cdh_testvector_7_private, .out = nist_kas_ecc_cdh_testvector_7_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_8_public_x, .public_y = nist_kas_ecc_cdh_testvector_8_public_y, .private = nist_kas_ecc_cdh_testvector_8_private, .out = nist_kas_ecc_cdh_testvector_8_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_9_public_x, .public_y = nist_kas_ecc_cdh_testvector_9_public_y, .private = nist_kas_ecc_cdh_testvector_9_private, .out = nist_kas_ecc_cdh_testvector_9_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_10_public_x, .public_y = nist_kas_ecc_cdh_testvector_10_public_y, .private = nist_kas_ecc_cdh_testvector_10_private, .out = nist_kas_ecc_cdh_testvector_10_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_11_public_x, .public_y = nist_kas_ecc_cdh_testvector_11_public_y, .private = nist_kas_ecc_cdh_testvector_11_private, .out = nist_kas_ecc_cdh_testvector_11_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_12_public_x, .public_y = nist_kas_ecc_cdh_testvector_12_public_y, .private = nist_kas_ecc_cdh_testvector_12_private, .out = nist_kas_ecc_cdh_testvector_12_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_13_public_x, .public_y = nist_kas_ecc_cdh_testvector_13_public_y, .private = nist_kas_ecc_cdh_testvector_13_private, .out = nist_kas_ecc_cdh_testvector_13_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_14_public_x, .public_y = nist_kas_ecc_cdh_testvector_14_public_y, .private = nist_kas_ecc_cdh_testvector_14_private, .out = nist_kas_ecc_cdh_testvector_14_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_15_public_x, .public_y = nist_kas_ecc_cdh_testvector_15_public_y, .private = nist_kas_ecc_cdh_testvector_15_private, .out = nist_kas_ecc_cdh_testvector_15_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_16_public_x, .public_y = nist_kas_ecc_cdh_testvector_16_public_y, .private = nist_kas_ecc_cdh_testvector_16_private, .out = nist_kas_ecc_cdh_testvector_16_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_17_public_x, .public_y = nist_kas_ecc_cdh_testvector_17_public_y, .private = nist_kas_ecc_cdh_testvector_17_private, .out = nist_kas_ecc_cdh_testvector_17_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_18_public_x, .public_y = nist_kas_ecc_cdh_testvector_18_public_y, .private = nist_kas_ecc_cdh_testvector_18_private, .out = nist_kas_ecc_cdh_testvector_18_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_19_public_x, .public_y = nist_kas_ecc_cdh_testvector_19_public_y, .private = nist_kas_ecc_cdh_testvector_19_private, .out = nist_kas_ecc_cdh_testvector_19_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_20_public_x, .public_y = nist_kas_ecc_cdh_testvector_20_public_y, .private = nist_kas_ecc_cdh_testvector_20_private, .out = nist_kas_ecc_cdh_testvector_20_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_21_public_x, .public_y = nist_kas_ecc_cdh_testvector_21_public_y, .private = nist_kas_ecc_cdh_testvector_21_private, .out = nist_kas_ecc_cdh_testvector_21_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_22_public_x, .public_y = nist_kas_ecc_cdh_testvector_22_public_y, .private = nist_kas_ecc_cdh_testvector_22_private, .out = nist_kas_ecc_cdh_testvector_22_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_23_public_x, .public_y = nist_kas_ecc_cdh_testvector_23_public_y, .private = nist_kas_ecc_cdh_testvector_23_private, .out = nist_kas_ecc_cdh_testvector_23_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_24_public_x, .public_y = nist_kas_ecc_cdh_testvector_24_public_y, .private = nist_kas_ecc_cdh_testvector_24_private, .out = nist_kas_ecc_cdh_testvector_24_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P192, .curve = TEE_ECC_CURVE_NIST_P192, .keysize = 192, .public_x = nist_kas_ecc_cdh_testvector_25_public_x, .public_y = nist_kas_ecc_cdh_testvector_25_public_y, .private = nist_kas_ecc_cdh_testvector_25_private, .out = nist_kas_ecc_cdh_testvector_25_out, }, /* [P-224] */ { .level = 0, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_26_public_x, .public_y = nist_kas_ecc_cdh_testvector_26_public_y, .private = nist_kas_ecc_cdh_testvector_26_private, .out = nist_kas_ecc_cdh_testvector_26_out, }, { .level = 1, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_27_public_x, .public_y = nist_kas_ecc_cdh_testvector_27_public_y, .private = nist_kas_ecc_cdh_testvector_27_private, .out = nist_kas_ecc_cdh_testvector_27_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_28_public_x, .public_y = nist_kas_ecc_cdh_testvector_28_public_y, .private = nist_kas_ecc_cdh_testvector_28_private, .out = nist_kas_ecc_cdh_testvector_28_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_29_public_x, .public_y = nist_kas_ecc_cdh_testvector_29_public_y, .private = nist_kas_ecc_cdh_testvector_29_private, .out = nist_kas_ecc_cdh_testvector_29_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_30_public_x, .public_y = nist_kas_ecc_cdh_testvector_30_public_y, .private = nist_kas_ecc_cdh_testvector_30_private, .out = nist_kas_ecc_cdh_testvector_30_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_31_public_x, .public_y = nist_kas_ecc_cdh_testvector_31_public_y, .private = nist_kas_ecc_cdh_testvector_31_private, .out = nist_kas_ecc_cdh_testvector_31_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_32_public_x, .public_y = nist_kas_ecc_cdh_testvector_32_public_y, .private = nist_kas_ecc_cdh_testvector_32_private, .out = nist_kas_ecc_cdh_testvector_32_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_33_public_x, .public_y = nist_kas_ecc_cdh_testvector_33_public_y, .private = nist_kas_ecc_cdh_testvector_33_private, .out = nist_kas_ecc_cdh_testvector_33_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_34_public_x, .public_y = nist_kas_ecc_cdh_testvector_34_public_y, .private = nist_kas_ecc_cdh_testvector_34_private, .out = nist_kas_ecc_cdh_testvector_34_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_35_public_x, .public_y = nist_kas_ecc_cdh_testvector_35_public_y, .private = nist_kas_ecc_cdh_testvector_35_private, .out = nist_kas_ecc_cdh_testvector_35_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_36_public_x, .public_y = nist_kas_ecc_cdh_testvector_36_public_y, .private = nist_kas_ecc_cdh_testvector_36_private, .out = nist_kas_ecc_cdh_testvector_36_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_37_public_x, .public_y = nist_kas_ecc_cdh_testvector_37_public_y, .private = nist_kas_ecc_cdh_testvector_37_private, .out = nist_kas_ecc_cdh_testvector_37_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_38_public_x, .public_y = nist_kas_ecc_cdh_testvector_38_public_y, .private = nist_kas_ecc_cdh_testvector_38_private, .out = nist_kas_ecc_cdh_testvector_38_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_39_public_x, .public_y = nist_kas_ecc_cdh_testvector_39_public_y, .private = nist_kas_ecc_cdh_testvector_39_private, .out = nist_kas_ecc_cdh_testvector_39_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_40_public_x, .public_y = nist_kas_ecc_cdh_testvector_40_public_y, .private = nist_kas_ecc_cdh_testvector_40_private, .out = nist_kas_ecc_cdh_testvector_40_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_41_public_x, .public_y = nist_kas_ecc_cdh_testvector_41_public_y, .private = nist_kas_ecc_cdh_testvector_41_private, .out = nist_kas_ecc_cdh_testvector_41_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_42_public_x, .public_y = nist_kas_ecc_cdh_testvector_42_public_y, .private = nist_kas_ecc_cdh_testvector_42_private, .out = nist_kas_ecc_cdh_testvector_42_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_43_public_x, .public_y = nist_kas_ecc_cdh_testvector_43_public_y, .private = nist_kas_ecc_cdh_testvector_43_private, .out = nist_kas_ecc_cdh_testvector_43_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_44_public_x, .public_y = nist_kas_ecc_cdh_testvector_44_public_y, .private = nist_kas_ecc_cdh_testvector_44_private, .out = nist_kas_ecc_cdh_testvector_44_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_45_public_x, .public_y = nist_kas_ecc_cdh_testvector_45_public_y, .private = nist_kas_ecc_cdh_testvector_45_private, .out = nist_kas_ecc_cdh_testvector_45_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_46_public_x, .public_y = nist_kas_ecc_cdh_testvector_46_public_y, .private = nist_kas_ecc_cdh_testvector_46_private, .out = nist_kas_ecc_cdh_testvector_46_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_47_public_x, .public_y = nist_kas_ecc_cdh_testvector_47_public_y, .private = nist_kas_ecc_cdh_testvector_47_private, .out = nist_kas_ecc_cdh_testvector_47_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_48_public_x, .public_y = nist_kas_ecc_cdh_testvector_48_public_y, .private = nist_kas_ecc_cdh_testvector_48_private, .out = nist_kas_ecc_cdh_testvector_48_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_49_public_x, .public_y = nist_kas_ecc_cdh_testvector_49_public_y, .private = nist_kas_ecc_cdh_testvector_49_private, .out = nist_kas_ecc_cdh_testvector_49_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P224, .curve = TEE_ECC_CURVE_NIST_P224, .keysize = 224, .public_x = nist_kas_ecc_cdh_testvector_50_public_x, .public_y = nist_kas_ecc_cdh_testvector_50_public_y, .private = nist_kas_ecc_cdh_testvector_50_private, .out = nist_kas_ecc_cdh_testvector_50_out, }, /* [P-256] */ { .level = 0, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_51_public_x, .public_y = nist_kas_ecc_cdh_testvector_51_public_y, .private = nist_kas_ecc_cdh_testvector_51_private, .out = nist_kas_ecc_cdh_testvector_51_out, }, { .level = 1, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_52_public_x, .public_y = nist_kas_ecc_cdh_testvector_52_public_y, .private = nist_kas_ecc_cdh_testvector_52_private, .out = nist_kas_ecc_cdh_testvector_52_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_53_public_x, .public_y = nist_kas_ecc_cdh_testvector_53_public_y, .private = nist_kas_ecc_cdh_testvector_53_private, .out = nist_kas_ecc_cdh_testvector_53_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_54_public_x, .public_y = nist_kas_ecc_cdh_testvector_54_public_y, .private = nist_kas_ecc_cdh_testvector_54_private, .out = nist_kas_ecc_cdh_testvector_54_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_55_public_x, .public_y = nist_kas_ecc_cdh_testvector_55_public_y, .private = nist_kas_ecc_cdh_testvector_55_private, .out = nist_kas_ecc_cdh_testvector_55_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_56_public_x, .public_y = nist_kas_ecc_cdh_testvector_56_public_y, .private = nist_kas_ecc_cdh_testvector_56_private, .out = nist_kas_ecc_cdh_testvector_56_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_57_public_x, .public_y = nist_kas_ecc_cdh_testvector_57_public_y, .private = nist_kas_ecc_cdh_testvector_57_private, .out = nist_kas_ecc_cdh_testvector_57_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_58_public_x, .public_y = nist_kas_ecc_cdh_testvector_58_public_y, .private = nist_kas_ecc_cdh_testvector_58_private, .out = nist_kas_ecc_cdh_testvector_58_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_59_public_x, .public_y = nist_kas_ecc_cdh_testvector_59_public_y, .private = nist_kas_ecc_cdh_testvector_59_private, .out = nist_kas_ecc_cdh_testvector_59_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_60_public_x, .public_y = nist_kas_ecc_cdh_testvector_60_public_y, .private = nist_kas_ecc_cdh_testvector_60_private, .out = nist_kas_ecc_cdh_testvector_60_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_61_public_x, .public_y = nist_kas_ecc_cdh_testvector_61_public_y, .private = nist_kas_ecc_cdh_testvector_61_private, .out = nist_kas_ecc_cdh_testvector_61_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_62_public_x, .public_y = nist_kas_ecc_cdh_testvector_62_public_y, .private = nist_kas_ecc_cdh_testvector_62_private, .out = nist_kas_ecc_cdh_testvector_62_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_63_public_x, .public_y = nist_kas_ecc_cdh_testvector_63_public_y, .private = nist_kas_ecc_cdh_testvector_63_private, .out = nist_kas_ecc_cdh_testvector_63_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_64_public_x, .public_y = nist_kas_ecc_cdh_testvector_64_public_y, .private = nist_kas_ecc_cdh_testvector_64_private, .out = nist_kas_ecc_cdh_testvector_64_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_65_public_x, .public_y = nist_kas_ecc_cdh_testvector_65_public_y, .private = nist_kas_ecc_cdh_testvector_65_private, .out = nist_kas_ecc_cdh_testvector_65_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_66_public_x, .public_y = nist_kas_ecc_cdh_testvector_66_public_y, .private = nist_kas_ecc_cdh_testvector_66_private, .out = nist_kas_ecc_cdh_testvector_66_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_67_public_x, .public_y = nist_kas_ecc_cdh_testvector_67_public_y, .private = nist_kas_ecc_cdh_testvector_67_private, .out = nist_kas_ecc_cdh_testvector_67_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_68_public_x, .public_y = nist_kas_ecc_cdh_testvector_68_public_y, .private = nist_kas_ecc_cdh_testvector_68_private, .out = nist_kas_ecc_cdh_testvector_68_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_69_public_x, .public_y = nist_kas_ecc_cdh_testvector_69_public_y, .private = nist_kas_ecc_cdh_testvector_69_private, .out = nist_kas_ecc_cdh_testvector_69_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_70_public_x, .public_y = nist_kas_ecc_cdh_testvector_70_public_y, .private = nist_kas_ecc_cdh_testvector_70_private, .out = nist_kas_ecc_cdh_testvector_70_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_71_public_x, .public_y = nist_kas_ecc_cdh_testvector_71_public_y, .private = nist_kas_ecc_cdh_testvector_71_private, .out = nist_kas_ecc_cdh_testvector_71_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_72_public_x, .public_y = nist_kas_ecc_cdh_testvector_72_public_y, .private = nist_kas_ecc_cdh_testvector_72_private, .out = nist_kas_ecc_cdh_testvector_72_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_73_public_x, .public_y = nist_kas_ecc_cdh_testvector_73_public_y, .private = nist_kas_ecc_cdh_testvector_73_private, .out = nist_kas_ecc_cdh_testvector_73_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_74_public_x, .public_y = nist_kas_ecc_cdh_testvector_74_public_y, .private = nist_kas_ecc_cdh_testvector_74_private, .out = nist_kas_ecc_cdh_testvector_74_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P256, .curve = TEE_ECC_CURVE_NIST_P256, .keysize = 256, .public_x = nist_kas_ecc_cdh_testvector_75_public_x, .public_y = nist_kas_ecc_cdh_testvector_75_public_y, .private = nist_kas_ecc_cdh_testvector_75_private, .out = nist_kas_ecc_cdh_testvector_75_out, }, /* [P-384] */ { .level = 0, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_76_public_x, .public_y = nist_kas_ecc_cdh_testvector_76_public_y, .private = nist_kas_ecc_cdh_testvector_76_private, .out = nist_kas_ecc_cdh_testvector_76_out, }, { .level = 1, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_77_public_x, .public_y = nist_kas_ecc_cdh_testvector_77_public_y, .private = nist_kas_ecc_cdh_testvector_77_private, .out = nist_kas_ecc_cdh_testvector_77_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_78_public_x, .public_y = nist_kas_ecc_cdh_testvector_78_public_y, .private = nist_kas_ecc_cdh_testvector_78_private, .out = nist_kas_ecc_cdh_testvector_78_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_79_public_x, .public_y = nist_kas_ecc_cdh_testvector_79_public_y, .private = nist_kas_ecc_cdh_testvector_79_private, .out = nist_kas_ecc_cdh_testvector_79_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_80_public_x, .public_y = nist_kas_ecc_cdh_testvector_80_public_y, .private = nist_kas_ecc_cdh_testvector_80_private, .out = nist_kas_ecc_cdh_testvector_80_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_81_public_x, .public_y = nist_kas_ecc_cdh_testvector_81_public_y, .private = nist_kas_ecc_cdh_testvector_81_private, .out = nist_kas_ecc_cdh_testvector_81_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_82_public_x, .public_y = nist_kas_ecc_cdh_testvector_82_public_y, .private = nist_kas_ecc_cdh_testvector_82_private, .out = nist_kas_ecc_cdh_testvector_82_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_83_public_x, .public_y = nist_kas_ecc_cdh_testvector_83_public_y, .private = nist_kas_ecc_cdh_testvector_83_private, .out = nist_kas_ecc_cdh_testvector_83_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_84_public_x, .public_y = nist_kas_ecc_cdh_testvector_84_public_y, .private = nist_kas_ecc_cdh_testvector_84_private, .out = nist_kas_ecc_cdh_testvector_84_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_85_public_x, .public_y = nist_kas_ecc_cdh_testvector_85_public_y, .private = nist_kas_ecc_cdh_testvector_85_private, .out = nist_kas_ecc_cdh_testvector_85_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_86_public_x, .public_y = nist_kas_ecc_cdh_testvector_86_public_y, .private = nist_kas_ecc_cdh_testvector_86_private, .out = nist_kas_ecc_cdh_testvector_86_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_87_public_x, .public_y = nist_kas_ecc_cdh_testvector_87_public_y, .private = nist_kas_ecc_cdh_testvector_87_private, .out = nist_kas_ecc_cdh_testvector_87_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_88_public_x, .public_y = nist_kas_ecc_cdh_testvector_88_public_y, .private = nist_kas_ecc_cdh_testvector_88_private, .out = nist_kas_ecc_cdh_testvector_88_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_89_public_x, .public_y = nist_kas_ecc_cdh_testvector_89_public_y, .private = nist_kas_ecc_cdh_testvector_89_private, .out = nist_kas_ecc_cdh_testvector_89_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_90_public_x, .public_y = nist_kas_ecc_cdh_testvector_90_public_y, .private = nist_kas_ecc_cdh_testvector_90_private, .out = nist_kas_ecc_cdh_testvector_90_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_91_public_x, .public_y = nist_kas_ecc_cdh_testvector_91_public_y, .private = nist_kas_ecc_cdh_testvector_91_private, .out = nist_kas_ecc_cdh_testvector_91_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_92_public_x, .public_y = nist_kas_ecc_cdh_testvector_92_public_y, .private = nist_kas_ecc_cdh_testvector_92_private, .out = nist_kas_ecc_cdh_testvector_92_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_93_public_x, .public_y = nist_kas_ecc_cdh_testvector_93_public_y, .private = nist_kas_ecc_cdh_testvector_93_private, .out = nist_kas_ecc_cdh_testvector_93_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_94_public_x, .public_y = nist_kas_ecc_cdh_testvector_94_public_y, .private = nist_kas_ecc_cdh_testvector_94_private, .out = nist_kas_ecc_cdh_testvector_94_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_95_public_x, .public_y = nist_kas_ecc_cdh_testvector_95_public_y, .private = nist_kas_ecc_cdh_testvector_95_private, .out = nist_kas_ecc_cdh_testvector_95_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_96_public_x, .public_y = nist_kas_ecc_cdh_testvector_96_public_y, .private = nist_kas_ecc_cdh_testvector_96_private, .out = nist_kas_ecc_cdh_testvector_96_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_97_public_x, .public_y = nist_kas_ecc_cdh_testvector_97_public_y, .private = nist_kas_ecc_cdh_testvector_97_private, .out = nist_kas_ecc_cdh_testvector_97_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_98_public_x, .public_y = nist_kas_ecc_cdh_testvector_98_public_y, .private = nist_kas_ecc_cdh_testvector_98_private, .out = nist_kas_ecc_cdh_testvector_98_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_99_public_x, .public_y = nist_kas_ecc_cdh_testvector_99_public_y, .private = nist_kas_ecc_cdh_testvector_99_private, .out = nist_kas_ecc_cdh_testvector_99_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P384, .curve = TEE_ECC_CURVE_NIST_P384, .keysize = 384, .public_x = nist_kas_ecc_cdh_testvector_100_public_x, .public_y = nist_kas_ecc_cdh_testvector_100_public_y, .private = nist_kas_ecc_cdh_testvector_100_private, .out = nist_kas_ecc_cdh_testvector_100_out, }, /* [P-521] */ { .level = 0, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_101_public_x, .public_y = nist_kas_ecc_cdh_testvector_101_public_y, .private = nist_kas_ecc_cdh_testvector_101_private, .out = nist_kas_ecc_cdh_testvector_101_out, }, { .level = 1, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_102_public_x, .public_y = nist_kas_ecc_cdh_testvector_102_public_y, .private = nist_kas_ecc_cdh_testvector_102_private, .out = nist_kas_ecc_cdh_testvector_102_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_103_public_x, .public_y = nist_kas_ecc_cdh_testvector_103_public_y, .private = nist_kas_ecc_cdh_testvector_103_private, .out = nist_kas_ecc_cdh_testvector_103_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_104_public_x, .public_y = nist_kas_ecc_cdh_testvector_104_public_y, .private = nist_kas_ecc_cdh_testvector_104_private, .out = nist_kas_ecc_cdh_testvector_104_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_105_public_x, .public_y = nist_kas_ecc_cdh_testvector_105_public_y, .private = nist_kas_ecc_cdh_testvector_105_private, .out = nist_kas_ecc_cdh_testvector_105_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_106_public_x, .public_y = nist_kas_ecc_cdh_testvector_106_public_y, .private = nist_kas_ecc_cdh_testvector_106_private, .out = nist_kas_ecc_cdh_testvector_106_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_107_public_x, .public_y = nist_kas_ecc_cdh_testvector_107_public_y, .private = nist_kas_ecc_cdh_testvector_107_private, .out = nist_kas_ecc_cdh_testvector_107_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_108_public_x, .public_y = nist_kas_ecc_cdh_testvector_108_public_y, .private = nist_kas_ecc_cdh_testvector_108_private, .out = nist_kas_ecc_cdh_testvector_108_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_109_public_x, .public_y = nist_kas_ecc_cdh_testvector_109_public_y, .private = nist_kas_ecc_cdh_testvector_109_private, .out = nist_kas_ecc_cdh_testvector_109_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_110_public_x, .public_y = nist_kas_ecc_cdh_testvector_110_public_y, .private = nist_kas_ecc_cdh_testvector_110_private, .out = nist_kas_ecc_cdh_testvector_110_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_111_public_x, .public_y = nist_kas_ecc_cdh_testvector_111_public_y, .private = nist_kas_ecc_cdh_testvector_111_private, .out = nist_kas_ecc_cdh_testvector_111_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_112_public_x, .public_y = nist_kas_ecc_cdh_testvector_112_public_y, .private = nist_kas_ecc_cdh_testvector_112_private, .out = nist_kas_ecc_cdh_testvector_112_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_113_public_x, .public_y = nist_kas_ecc_cdh_testvector_113_public_y, .private = nist_kas_ecc_cdh_testvector_113_private, .out = nist_kas_ecc_cdh_testvector_113_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_114_public_x, .public_y = nist_kas_ecc_cdh_testvector_114_public_y, .private = nist_kas_ecc_cdh_testvector_114_private, .out = nist_kas_ecc_cdh_testvector_114_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_115_public_x, .public_y = nist_kas_ecc_cdh_testvector_115_public_y, .private = nist_kas_ecc_cdh_testvector_115_private, .out = nist_kas_ecc_cdh_testvector_115_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_116_public_x, .public_y = nist_kas_ecc_cdh_testvector_116_public_y, .private = nist_kas_ecc_cdh_testvector_116_private, .out = nist_kas_ecc_cdh_testvector_116_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_117_public_x, .public_y = nist_kas_ecc_cdh_testvector_117_public_y, .private = nist_kas_ecc_cdh_testvector_117_private, .out = nist_kas_ecc_cdh_testvector_117_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_118_public_x, .public_y = nist_kas_ecc_cdh_testvector_118_public_y, .private = nist_kas_ecc_cdh_testvector_118_private, .out = nist_kas_ecc_cdh_testvector_118_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_119_public_x, .public_y = nist_kas_ecc_cdh_testvector_119_public_y, .private = nist_kas_ecc_cdh_testvector_119_private, .out = nist_kas_ecc_cdh_testvector_119_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_120_public_x, .public_y = nist_kas_ecc_cdh_testvector_120_public_y, .private = nist_kas_ecc_cdh_testvector_120_private, .out = nist_kas_ecc_cdh_testvector_120_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_121_public_x, .public_y = nist_kas_ecc_cdh_testvector_121_public_y, .private = nist_kas_ecc_cdh_testvector_121_private, .out = nist_kas_ecc_cdh_testvector_121_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_122_public_x, .public_y = nist_kas_ecc_cdh_testvector_122_public_y, .private = nist_kas_ecc_cdh_testvector_122_private, .out = nist_kas_ecc_cdh_testvector_122_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_123_public_x, .public_y = nist_kas_ecc_cdh_testvector_123_public_y, .private = nist_kas_ecc_cdh_testvector_123_private, .out = nist_kas_ecc_cdh_testvector_123_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_124_public_x, .public_y = nist_kas_ecc_cdh_testvector_124_public_y, .private = nist_kas_ecc_cdh_testvector_124_private, .out = nist_kas_ecc_cdh_testvector_124_out, }, { .level = 15, .algo = TEE_ALG_ECDH_P521, .curve = TEE_ECC_CURVE_NIST_P521, .keysize = 521, .public_x = nist_kas_ecc_cdh_testvector_125_public_x, .public_y = nist_kas_ecc_cdh_testvector_125_public_y, .private = nist_kas_ecc_cdh_testvector_125_private, .out = nist_kas_ecc_cdh_testvector_125_out, }, /* [K-163] - GP NOT SUPPORTED */ /* [K-233] - GP NOT SUPPORTED */ /* [K-283] - GP NOT SUPPORTED */ /* [K-409] - GP NOT SUPPORTED */ /* [K-571] - GP NOT SUPPORTED */ /* [B-163] - GP NOT SUPPORTED */ /* [B-233] - GP NOT SUPPORTED */ /* [B-283] - GP NOT SUPPORTED */ /* [B-409] - GP NOT SUPPORTED */ /* [B-571] - GP NOT SUPPORTED */ }; /* G/MT 0003 (SM2) Part 5 Annex C.2 - encryption/decryption */ static const uint8_t gmt_0003_part5_c2_sm2_testvector_ptx[19] = /* M */ "encryption standard"; static const uint8_t gmt_0003_part5_c2_sm2_testvector_private[] = { /* dB */ 0x39, 0x45, 0x20, 0x8F, 0x7B, 0x21, 0x44, 0xB1, 0x3F, 0x36, 0xE3, 0x8A, 0xC6, 0xD3, 0x9F, 0x95, 0x88, 0x93, 0x93, 0x69, 0x28, 0x60, 0xB5, 0x1A, 0x42, 0xFB, 0x81, 0xEF, 0x4D, 0xF7, 0xC5, 0xB8 }; static const uint8_t gmt_0003_part5_c2_sm2_testvector_public_x[] = { /* xB */ 0x09, 0xF9, 0xDF, 0x31, 0x1E, 0x54, 0x21, 0xA1, 0x50, 0xDD, 0x7D, 0x16, 0x1E, 0x4B, 0xC5, 0xC6, 0x72, 0x17, 0x9F, 0xAD, 0x18, 0x33, 0xFC, 0x07, 0x6B, 0xB0, 0x8F, 0xF3, 0x56, 0xF3, 0x50, 0x20 }; static const uint8_t gmt_0003_part5_c2_sm2_testvector_public_y[] = { /* yB */ 0xCC, 0xEA, 0x49, 0x0C, 0xE2, 0x67, 0x75, 0xA5, 0x2D, 0xC6, 0xEA, 0x71, 0x8C, 0xC1, 0xAA, 0x60, 0x0A, 0xED, 0x05, 0xFB, 0xF3, 0x5E, 0x08, 0x4A, 0x66, 0x32, 0xF6, 0x07, 0x2D, 0xA9, 0xAD, 0x13 }; static const uint8_t gmt_0003_part5_c2_sm2_testvector_out[] = { /* C */ /* C1 */ 0x04, 0x04, 0xEB, 0xFC, 0x71, 0x8E, 0x8D, 0x17, 0x98, 0x62, 0x04, 0x32, 0x26, 0x8E, 0x77, 0xFE, 0xB6, 0x41, 0x5E, 0x2E, 0xDE, 0x0E, 0x07, 0x3C, 0x0F, 0x4F, 0x64, 0x0E, 0xCD, 0x2E, 0x14, 0x9A, 0x73, 0xE8, 0x58, 0xF9, 0xD8, 0x1E, 0x54, 0x30, 0xA5, 0x7B, 0x36, 0xDA, 0xAB, 0x8F, 0x95, 0x0A, 0x3C, 0x64, 0xE6, 0xEE, 0x6A, 0x63, 0x09, 0x4D, 0x99, 0x28, 0x3A, 0xFF, 0x76, 0x7E, 0x12, 0x4D, 0xF0, /* C2 */ 0x21, 0x88, 0x6C, 0xA9, 0x89, 0xCA, 0x9C, 0x7D, 0x58, 0x08, 0x73, 0x07, 0xCA, 0x93, 0x09, 0x2D, 0x65, 0x1E, 0xFA, /* C3 */ 0x59, 0x98, 0x3C, 0x18, 0xF8, 0x09, 0xE2, 0x62, 0x92, 0x3C, 0x53, 0xAE, 0xC2, 0x95, 0xD3, 0x03, 0x83, 0xB5, 0x4E, 0x39, 0xD6, 0x09, 0xD1, 0x60, 0xAF, 0xCB, 0x19, 0x08, 0xD0, 0xBD, 0x87, 0x66 }; /* SM2 encryption/decryption */ static const uint8_t sm2_testvector2_ptx[] = /* M */ "This test vector is used to test encryption then decryption. The " "plain text is longer than 64 characters, so it will exercise parts " "of the code that are not used for shorter messages."; static const uint8_t sm2_testvector2_private[] = { /* dB */ 0x39, 0x45, 0x20, 0x8F, 0x7B, 0x21, 0x44, 0xB1, 0x3F, 0x36, 0xE3, 0x8A, 0xC6, 0xD3, 0x9F, 0x95, 0x88, 0x93, 0x93, 0x69, 0x28, 0x60, 0xB5, 0x1A, 0x42, 0xFB, 0x81, 0xEF, 0x4D, 0xF7, 0xC5, 0xB8 }; static const uint8_t sm2_testvector2_public_x[] = { /* xB */ 0x09, 0xF9, 0xDF, 0x31, 0x1E, 0x54, 0x21, 0xA1, 0x50, 0xDD, 0x7D, 0x16, 0x1E, 0x4B, 0xC5, 0xC6, 0x72, 0x17, 0x9F, 0xAD, 0x18, 0x33, 0xFC, 0x07, 0x6B, 0xB0, 0x8F, 0xF3, 0x56, 0xF3, 0x50, 0x20 }; static const uint8_t sm2_testvector2_public_y[] = { /* yB */ 0xCC, 0xEA, 0x49, 0x0C, 0xE2, 0x67, 0x75, 0xA5, 0x2D, 0xC6, 0xEA, 0x71, 0x8C, 0xC1, 0xAA, 0x60, 0x0A, 0xED, 0x05, 0xFB, 0xF3, 0x5E, 0x08, 0x4A, 0x66, 0x32, 0xF6, 0x07, 0x2D, 0xA9, 0xAD, 0x13 }; static const uint8_t sm2_testvector2_out[] = { 0x00, /* Not used -- test runs in encrypt/decrypt mode */ }; /* * G/MT 0003 (SM2) Part 5 Annex A.2 - SM2 digital signature based on * elliptic curves */ static const uint8_t gmt_003_part5_a2_ptx[] = { /* ZA = SM3(ENTLA || IDA || a || b || xG || yG || xA || yA) */ 0xB2, 0xE1, 0x4C, 0x5C, 0x79, 0xC6, 0xDF, 0x5B, 0x85, 0xF4, 0xFE, 0x7E, 0xD8, 0xDB, 0x7A, 0x26, 0x2B, 0x9D, 0xA7, 0xE0, 0x7C, 0xCB, 0x0E, 0xA9, 0xF4, 0x74, 0x7B, 0x8C, 0xCD, 0xA8, 0xA4, 0xF3, /* M */ 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74 }; static const uint8_t gmt_003_part5_a2_private[] = { /* dA */ 0x39, 0x45, 0x20, 0x8F, 0x7B, 0x21, 0x44, 0xB1, 0x3F, 0x36, 0xE3, 0x8A, 0xC6, 0xD3, 0x9F, 0x95, 0x88, 0x93, 0x93, 0x69, 0x28, 0x60, 0xB5, 0x1A, 0x42, 0xFB, 0x81, 0xEF, 0x4D, 0xF7, 0xC5, 0xB8, }; static const uint8_t gmt_003_part5_a2_public_x[] = { /* xA */ 0x09, 0xF9, 0xDF, 0x31, 0x1E, 0x54, 0x21, 0xA1, 0x50, 0xDD, 0x7D, 0x16, 0x1E, 0x4B, 0xC5, 0xC6, 0x72, 0x17, 0x9F, 0xAD, 0x18, 0x33, 0xFC, 0x07, 0x6B, 0xB0, 0x8F, 0xF3, 0x56, 0xF3, 0x50, 0x20, }; static const uint8_t gmt_003_part5_a2_public_y[] = { /* yA */ 0xCC, 0xEA, 0x49, 0x0C, 0xE2, 0x67, 0x75, 0xA5, 0x2D, 0xC6, 0xEA, 0x71, 0x8C, 0xC1, 0xAA, 0x60, 0x0A, 0xED, 0x05, 0xFB, 0xF3, 0x5E, 0x08, 0x4A, 0x66, 0x32, 0xF6, 0x07, 0x2D, 0xA9, 0xAD, 0x13, }; static const uint8_t gmt_003_part5_a2_out[] = { /* r */ 0xF5, 0xA0, 0x3B, 0x06, 0x48, 0xD2, 0xC4, 0x63, 0x0E, 0xEA, 0xC5, 0x13, 0xE1, 0xBB, 0x81, 0xA1, 0x59, 0x44, 0xDA, 0x38, 0x27, 0xD5, 0xB7, 0x41, 0x43, 0xAC, 0x7E, 0xAC, 0xEE, 0xE7, 0x20, 0xB3, /* s */ 0xB1, 0xB6, 0xAA, 0x29, 0xDF, 0x21, 0x2F, 0xD8, 0x76, 0x31, 0x82, 0xBC, 0x0D, 0x42, 0x1C, 0xA1, 0xBB, 0x90, 0x38, 0xFD, 0x1F, 0x7F, 0x42, 0xD4, 0x84, 0x0B, 0x69, 0xC4, 0x85, 0xBB, 0xC1, 0xAA, }; /* * G/MT 0003 (SM2) Part 5 Annex B.2 - key exchange protocol based on elliptic * curves */ static const uint8_t gmt_003_part5_b2_private_A[] = { /* dA */ 0x81, 0xEB, 0x26, 0xE9, 0x41, 0xBB, 0x5A, 0xF1, 0x6D, 0xF1, 0x16, 0x49, 0x5F, 0x90, 0x69, 0x52, 0x72, 0xAE, 0x2C, 0xD6, 0x3D, 0x6C, 0x4A, 0xE1, 0x67, 0x84, 0x18, 0xBE, 0x48, 0x23, 0x00, 0x29, }; static const uint8_t gmt_003_part5_b2_public_xA[] = { /* xA */ 0x16, 0x0E, 0x12, 0x89, 0x7D, 0xF4, 0xED, 0xB6, 0x1D, 0xD8, 0x12, 0xFE, 0xB9, 0x67, 0x48, 0xFB, 0xD3, 0xCC, 0xF4, 0xFF, 0xE2, 0x6A, 0xA6, 0xF6, 0xDB, 0x95, 0x40, 0xAF, 0x49, 0xC9, 0x42, 0x32, }; static const uint8_t gmt_003_part5_b2_public_yA[] = { /* xA */ 0x4A, 0x7D, 0xAD, 0x08, 0xBB, 0x9A, 0x45, 0x95, 0x31, 0x69, 0x4B, 0xEB, 0x20, 0xAA, 0x48, 0x9D, 0x66, 0x49, 0x97, 0x5E, 0x1B, 0xFC, 0xF8, 0xC4, 0x74, 0x1B, 0x78, 0xB4, 0xB2, 0x23, 0x00, 0x7F, }; static const uint8_t gmt_003_part5_b2_eph_private_A[] = { /* rA */ 0xD4, 0xDE, 0x15, 0x47, 0x4D, 0xB7, 0x4D, 0x06, 0x49, 0x1C, 0x44, 0x0D, 0x30, 0x5E, 0x01, 0x24, 0x00, 0x99, 0x0F, 0x3E, 0x39, 0x0C, 0x7E, 0x87, 0x15, 0x3C, 0x12, 0xDB, 0x2E, 0xA6, 0x0B, 0xB3, }; static const uint8_t gmt_003_part5_b2_eph_public_xA[] = { /* x1 where (x1, y1) = [rA]G */ 0x64, 0xCE, 0xD1, 0xBD, 0xBC, 0x99, 0xD5, 0x90, 0x04, 0x9B, 0x43, 0x4D, 0x0F, 0xD7, 0x34, 0x28, 0xCF, 0x60, 0x8A, 0x5D, 0xB8, 0xFE, 0x5C, 0xE0, 0x7F, 0x15, 0x02, 0x69, 0x40, 0xBA, 0xE4, 0x0E, }; static const uint8_t gmt_003_part5_b2_eph_public_yA[] = { /* y1 where (x1, y1) = [rA]G */ 0x37, 0x66, 0x29, 0xC7, 0xAB, 0x21, 0xE7, 0xDB, 0x26, 0x09, 0x22, 0x49, 0x9D, 0xDB, 0x11, 0x8F, 0x07, 0xCE, 0x8E, 0xAA, 0xE3, 0xE7, 0x72, 0x0A, 0xFE, 0xF6, 0xA5, 0xCC, 0x06, 0x20, 0x70, 0xC0, }; static const uint8_t gmt_003_part5_b2_public_xB[] = { /* xB */ 0x6A, 0xE8, 0x48, 0xC5, 0x7C, 0x53, 0xC7, 0xB1, 0xB5, 0xFA, 0x99, 0xEB, 0x22, 0x86, 0xAF, 0x07, 0x8B, 0xA6, 0x4C, 0x64, 0x59, 0x1B, 0x8B, 0x56, 0x6F, 0x73, 0x57, 0xD5, 0x76, 0xF1, 0x6D, 0xFB, }; static const uint8_t gmt_003_part5_b2_private_B[] = { /* dB */ 0x78, 0x51, 0x29, 0x91, 0x7D, 0x45, 0xA9, 0xEA, 0x54, 0x37, 0xA5, 0x93, 0x56, 0xB8, 0x23, 0x38, 0xEA, 0xAD, 0xDA, 0x6C, 0xEB, 0x19, 0x90, 0x88, 0xF1, 0x4A, 0xE1, 0x0D, 0xEF, 0xA2, 0x29, 0xB5, }; static const uint8_t gmt_003_part5_b2_public_yB[] = { /* yB */ 0xEE, 0x48, 0x9D, 0x77, 0x16, 0x21, 0xA2, 0x7B, 0x36, 0xC5, 0xC7, 0x99, 0x20, 0x62, 0xE9, 0xCD, 0x09, 0xA9, 0x26, 0x43, 0x86, 0xF3, 0xFB, 0xEA, 0x54, 0xDF, 0xF6, 0x93, 0x05, 0x62, 0x1C, 0x4D, }; static const uint8_t gmt_003_part5_b2_eph_private_B[] = { /* rB */ 0x7E, 0x07, 0x12, 0x48, 0x14, 0xB3, 0x09, 0x48, 0x91, 0x25, 0xEA, 0xED, 0x10, 0x11, 0x13, 0x16, 0x4E, 0xBF, 0x0F, 0x34, 0x58, 0xC5, 0xBD, 0x88, 0x33, 0x5C, 0x1F, 0x9D, 0x59, 0x62, 0x43, 0xD6, }; static const uint8_t gmt_003_part5_b2_eph_public_xB[] = { /* x2 where (x2, y2) = [rB]G */ 0xAC, 0xC2, 0x76, 0x88, 0xA6, 0xF7, 0xB7, 0x06, 0x09, 0x8B, 0xC9, 0x1F, 0xF3, 0xAD, 0x1B, 0xFF, 0x7D, 0xC2, 0x80, 0x2C, 0xDB, 0x14, 0xCC, 0xCC, 0xDB, 0x0A, 0x90, 0x47, 0x1F, 0x9B, 0xD7, 0x07, }; static const uint8_t gmt_003_part5_b2_eph_public_yB[] = { /* y2 where (x2, y2) = [rB]G */ 0x2F, 0xED, 0xAC, 0x04, 0x94, 0xB2, 0xFF, 0xC4, 0xD6, 0x85, 0x38, 0x76, 0xC7, 0x9B, 0x8F, 0x30, 0x1C, 0x65, 0x73, 0xAD, 0x0A, 0xA5, 0x0F, 0x39, 0xFC, 0x87, 0x18, 0x1E, 0x1A, 0x1B, 0x46, 0xFE, }; static const uint8_t gmt_003_part5_b2_id_A[] = { /* IDA */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, }; static const uint8_t gmt_003_part5_b2_id_B[] = { /* IDB */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, }; static const uint8_t gmt_003_part5_b2_conf_A[] = { /* S2 = SA */ 0x18, 0xC7, 0x89, 0x4B, 0x38, 0x16, 0xDF, 0x16, 0xCF, 0x07, 0xB0, 0x5C, 0x5E, 0xC0, 0xBE, 0xF5, 0xD6, 0x55, 0xD5, 0x8F, 0x77, 0x9C, 0xC1, 0xB4, 0x00, 0xA4, 0xF3, 0x88, 0x46, 0x44, 0xDB, 0x88, }; static const uint8_t gmt_003_part5_b2_conf_B[] = { /* S1 = SB */ 0xD3, 0xA0, 0xFE, 0x15, 0xDE, 0xE1, 0x85, 0xCE, 0xAE, 0x90, 0x7A, 0x6B, 0x59, 0x5C, 0xC3, 0x2A, 0x26, 0x6E, 0xD7, 0xB3, 0x36, 0x7E, 0x99, 0x83, 0xA8, 0x96, 0xDC, 0x32, 0xFA, 0x20, 0xF8, 0xEB, }; static const uint8_t gmt_003_part5_b2_shared_secret[] = { /* KA = KB */ 0x6C, 0x89, 0x34, 0x73, 0x54, 0xDE, 0x24, 0x84, 0xC6, 0x0B, 0x4A, 0xB1, 0xFD, 0xE4, 0xC6, 0xE5, }; /* MAC Tests Data and Keys */ static const uint8_t mac_data_md5_key1[10] = { 0x6B, 0x65, 0x79, /* key */ }; static const uint8_t mac_data_md5_in1[] = { 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */ 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */ 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */ 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */ 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */ 0x64, 0x6F, 0x67, /* dog */ }; static const uint8_t mac_data_md5_out1[] = { 0x80, 0x07, 0x07, 0x13, 0x46, 0x3e, 0x77, 0x49, 0xb9, 0x0c, 0x2d, 0xc2, 0x49, 0x11, 0xe2, 0x75 }; /* generated with scripts/digest_hmac.pl */ static const uint8_t mac_data_sha1_key1[10] = { 0x6B, 0x65, 0x79, /* key */ }; static const uint8_t mac_data_sha1_in1[] = { 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */ 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */ 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */ 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */ 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */ 0x64, 0x6F, 0x67, /* dog */ }; static const uint8_t mac_data_sha1_out1[] = { 0xDE, 0x7C, 0x9B, 0x85, 0xB8, 0xB7, 0x8A, 0xA6, /* .|...... */ 0xBC, 0x8A, 0x7A, 0x36, 0xF7, 0x0A, 0x90, 0x70, /* ..z6...p */ 0x1C, 0x9D, 0xB4, 0xD9, /* .... */ }; static const uint8_t mac_data_sha224_key1[24] = { 0x6B, 0x65, 0x79, /* key */ }; static const uint8_t mac_data_sha224_in1[] = { 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */ 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */ 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */ 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */ 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */ 0x64, 0x6F, 0x67, /* dog */ }; static const uint8_t mac_data_sha224_out1[] = { 0x88, 0xFF, 0x8B, 0x54, 0x67, 0x5D, 0x39, 0xB8, /* ...Tg]9. */ 0xF7, 0x23, 0x22, 0xE6, 0x5F, 0xF9, 0x45, 0xC5, /* .#"._.E. */ 0x2D, 0x96, 0x37, 0x99, 0x88, 0xAD, 0xA2, 0x56, /* -.7....V */ 0x39, 0x74, 0x7E, 0x69, /* 9t~i */ }; static const uint8_t mac_data_sha256_key1[24] = { 'Q', 'W', 'E', 'R', 'T', 'Y' }; static const uint8_t mac_data_sha256_in1[] = { 'a', 'b', 'c' }; static const uint8_t mac_data_sha256_out1[] = { 0xee, 0x2e, 0x5d, 0x9b, 0x51, 0xe2, 0x9c, 0x1d, 0x49, 0xe9, 0xae, 0x6f, 0x0a, 0xcc, 0x15, 0x18, 0xde, 0x1e, 0xa3, 0x88, 0x8e, 0xee, 0x48, 0xbb, 0x82, 0x77, 0xe9, 0x09, 0x74, 0x4b, 0xa2, 0xf2 }; /* generated with scripts/digest_hmac.pl */ static const uint8_t mac_data_sha256_key2[24] = { 0x6B, 0x65, 0x79, /* key */ }; static const uint8_t mac_data_sha256_in2[] = { 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */ 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */ 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */ 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */ 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */ 0x64, 0x6F, 0x67, /* dog */ }; static const uint8_t mac_data_sha256_out2[] = { 0xF7, 0xBC, 0x83, 0xF4, 0x30, 0x53, 0x84, 0x24, /* ....0S.$ */ 0xB1, 0x32, 0x98, 0xE6, 0xAA, 0x6F, 0xB1, 0x43, /* .2...o.C */ 0xEF, 0x4D, 0x59, 0xA1, 0x49, 0x46, 0x17, 0x59, /* .MY.IF.Y */ 0x97, 0x47, 0x9D, 0xBC, 0x2D, 0x1A, 0x3C, 0xD8, /* .G..-.<. */ }; static const uint8_t mac_data_sha384_key1[32] = { 0x6B, 0x65, 0x79, /* key */ }; static const uint8_t mac_data_sha384_in1[] = { 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */ 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */ 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */ 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */ 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */ 0x64, 0x6F, 0x67, /* dog */ }; static const uint8_t mac_data_sha384_out1[] = { 0xD7, 0xF4, 0x72, 0x7E, 0x2C, 0x0B, 0x39, 0xAE, /* ..r~, .9. */ 0x0F, 0x1E, 0x40, 0xCC, 0x96, 0xF6, 0x02, 0x42, /* ..@....B */ 0xD5, 0xB7, 0x80, 0x18, 0x41, 0xCE, 0xA6, 0xFC, /* ....A... */ 0x59, 0x2C, 0x5D, 0x3E, 0x1A, 0xE5, 0x07, 0x00, /* Y, ]>.... */ 0x58, 0x2A, 0x96, 0xCF, 0x35, 0xE1, 0xE5, 0x54, /* X...5..T */ 0x99, 0x5F, 0xE4, 0xE0, 0x33, 0x81, 0xC2, 0x37, /* ._..3..7 */ }; static const uint8_t mac_data_sha512_key1[32] = { 0x6B, 0x65, 0x79, /* key */ }; static const uint8_t mac_data_sha512_in1[] = { 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */ 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */ 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */ 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */ 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */ 0x64, 0x6F, 0x67, /* dog */ }; static const uint8_t mac_data_sha512_out1[] = { 0xB4, 0x2A, 0xF0, 0x90, 0x57, 0xBA, 0xC1, 0xE2, /* ....W... */ 0xD4, 0x17, 0x08, 0xE4, 0x8A, 0x90, 0x2E, 0x09, /* ........ */ 0xB5, 0xFF, 0x7F, 0x12, 0xAB, 0x42, 0x8A, 0x4F, /* .....B.O */ 0xE8, 0x66, 0x53, 0xC7, 0x3D, 0xD2, 0x48, 0xFB, /* .fS.=.H. */ 0x82, 0xF9, 0x48, 0xA5, 0x49, 0xF7, 0xB7, 0x91, /* ..H.I... */ 0xA5, 0xB4, 0x19, 0x15, 0xEE, 0x4D, 0x1E, 0xC3, /* .....M.. */ 0x93, 0x53, 0x57, 0xE4, 0xE2, 0x31, 0x72, 0x50, /* .SW..1rP */ 0xD0, 0x37, 0x2A, 0xFA, 0x2E, 0xBE, 0xEB, 0x3A, /* .7.....: */ }; /* * First example from * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/HMAC_SHA3-224.pdf */ static const uint8_t mac_data_sha3_224_key1[28] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, }; static const uint8_t mac_data_sha3_224_in1[] = { 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x6c, 0x65, 0x6e, 0x3c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6c, 0x65, 0x6e, }; static const uint8_t mac_data_sha3_224_out1[] = { 0x33, 0x2c, 0xfd, 0x59, 0x34, 0x7f, 0xdb, 0x8e, 0x57, 0x6e, 0x77, 0x26, 0x0b, 0xe4, 0xab, 0xa2, 0xd6, 0xdc, 0x53, 0x11, 0x7b, 0x3b, 0xfb, 0x52, 0xc6, 0xd1, 0x8c, 0x04, }; /* * First example from * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/HMAC_SHA3-256.pdf */ static const uint8_t mac_data_sha3_256_key1[32] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, }; static const uint8_t mac_data_sha3_256_in1[] = { 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x6c, 0x65, 0x6e, 0x3c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6c, 0x65, 0x6e, }; static const uint8_t mac_data_sha3_256_out1[] = { 0x4f, 0xe8, 0xe2, 0x02, 0xc4, 0xf0, 0x58, 0xe8, 0xdd, 0xdc, 0x23, 0xd8, 0xc3, 0x4e, 0x46, 0x73, 0x43, 0xe2, 0x35, 0x55, 0xe2, 0x4f, 0xc2, 0xf0, 0x25, 0xd5, 0x98, 0xf5, 0x58, 0xf6, 0x72, 0x05, }; /* * First example from * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/HMAC_SHA3-384.pdf */ static const uint8_t mac_data_sha3_384_key1[48] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, }; static const uint8_t mac_data_sha3_384_in1[] = { 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x6c, 0x65, 0x6e, 0x3c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6c, 0x65, 0x6e, }; static const uint8_t mac_data_sha3_384_out1[] = { 0xd5, 0x88, 0xa3, 0xc5, 0x1f, 0x3f, 0x2d, 0x90, 0x6e, 0x82, 0x98, 0xc1, 0x19, 0x9a, 0xa8, 0xff, 0x62, 0x96, 0x21, 0x81, 0x27, 0xf6, 0xb3, 0x8a, 0x90, 0xb6, 0xaf, 0xe2, 0xc5, 0x61, 0x77, 0x25, 0xbc, 0x99, 0x98, 0x7f, 0x79, 0xb2, 0x2a, 0x55, 0x7b, 0x65, 0x20, 0xdb, 0x71, 0x0b, 0x7f, 0x42, }; /* * First example from * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/HMAC_SHA3-512.pdf */ static const uint8_t mac_data_sha3_512_key1[64] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, }; static const uint8_t mac_data_sha3_512_in1[] = { 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x6c, 0x65, 0x6e, 0x3c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6c, 0x65, 0x6e, }; static const uint8_t mac_data_sha3_512_out1[] = { 0x4e, 0xfd, 0x62, 0x9d, 0x6c, 0x71, 0xbf, 0x86, 0x16, 0x26, 0x58, 0xf2, 0x99, 0x43, 0xb1, 0xc3, 0x08, 0xce, 0x27, 0xcd, 0xfa, 0x6d, 0xb0, 0xd9, 0xc3, 0xce, 0x81, 0x76, 0x3f, 0x9c, 0xbc, 0xe5, 0xf7, 0xeb, 0xe9, 0x86, 0x80, 0x31, 0xdb, 0x1a, 0x8f, 0x8e, 0xb7, 0xb6, 0xb9, 0x5e, 0x5c, 0x5e, 0x3f, 0x65, 0x7a, 0x89, 0x96, 0xc8, 0x6a, 0x2f, 0x65, 0x27, 0xe3, 0x07, 0xf0, 0x21, 0x31, 0x96, }; /* * SM3 HMAC * GM/T 0042-2015 * Section D.3 Test vector 1 */ static const uint8_t mac_data_sm3_d31_in[112] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomn" "opnopqabcdbcdecdefdefgefghfghighijhijkijkljklmklmn" "lmnomnopnopq"; static const uint8_t mac_data_sm3_d31_key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, }; static const uint8_t mac_data_sm3_d31_out[] = { 0xca, 0x05, 0xe1, 0x44, 0xed, 0x05, 0xd1, 0x85, 0x78, 0x40, 0xd1, 0xf3, 0x18, 0xa4, 0xa8, 0x66, 0x9e, 0x55, 0x9f, 0xc8, 0x39, 0x1f, 0x41, 0x44, 0x85, 0xbf, 0xdf, 0x7b, 0xb4, 0x08, 0x96, 0x3a, }; /* * SM3 HMAC * GM/T 0042-2015 * Section D.3 Test vector 2 */ static const uint8_t mac_data_sm3_d32_in[] = { 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd }; static const uint8_t mac_data_sm3_d32_key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, }; static const uint8_t mac_data_sm3_d32_out[] = { 0x22, 0x0b, 0xf5, 0x79, 0xde, 0xd5, 0x55, 0x39, 0x3f, 0x01, 0x59, 0xf6, 0x6c, 0x99, 0x87, 0x78, 0x22, 0xa3, 0xec, 0xf6, 0x10, 0xd1, 0x55, 0x21, 0x54, 0xb4, 0x1d, 0x44, 0xb9, 0x4d, 0xb3, 0xae, }; /* AES-CBC-MAC */ static const uint8_t mac_cbc_vect1_key[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ }; static const uint8_t mac_cbc_vect1_data[] = { 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */ 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */ 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */ 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */ 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */ 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */ 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */ 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */ 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */ 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */ 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */ 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */ 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */ 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */ 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */ 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */ 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */ 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */ 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */ }; static const uint8_t mac_cbc_vect1_out[] = { 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */ 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */ }; /* DES-CBC-MAC */ static const uint8_t mac_cbc_vect2_key[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ }; #define mac_cbc_vect2_data mac_cbc_vect1_data static const uint8_t mac_cbc_vect2_out[] = { 0xE9, 0x41, 0x46, 0x30, 0x69, 0x32, 0xBD, 0xD6, /* .AF0i2.. */ }; /* DES3-CBC-MAC */ static const uint8_t mac_cbc_vect3_key[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */ }; #define mac_cbc_vect3_data mac_cbc_vect2_data static const uint8_t mac_cbc_vect3_out[] = { 0x1C, 0x17, 0xB7, 0xB5, 0x9F, 0x54, 0x9C, 0x63, /* .....T.c */ }; /* AES-CBC-MAC PKCS#5 pad*/ static const uint8_t mac_cbc_vect4_key[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ }; #define mac_cbc_vect4_data mac_cbc_vect1_data static const uint8_t mac_cbc_vect4_out[] = { 0x0B, 0x46, 0xC7, 0xA2, 0xE1, 0x5A, 0xE2, 0x23, /* .F...Z.# */ 0x83, 0x34, 0x1C, 0x86, 0x53, 0xF8, 0x51, 0x24, /* .4..S.Q$ */ }; /* DES-CBC-MAC PKCS#5 pad*/ static const uint8_t mac_cbc_vect5_key[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ }; #define mac_cbc_vect5_data mac_cbc_vect1_data static const uint8_t mac_cbc_vect5_out[] = { 0x30, 0x81, 0x4F, 0x42, 0x03, 0x7E, 0xD8, 0xA9, /* 0.OB.~.. */ }; /* DES3-CBC-MAC PKCS#5 pad*/ static const uint8_t mac_cbc_vect6_key[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */ }; #define mac_cbc_vect6_data mac_cbc_vect1_data static const uint8_t mac_cbc_vect6_out[] = { 0x6E, 0x37, 0x6E, 0x14, 0x5E, 0x21, 0xDD, 0xF8, /* n7n.^!.. */ }; /* AES-CBC-MAC PKCS#5 pad*/ #define mac_cbc_vect7_key mac_cbc_vect4_key static const uint8_t mac_cbc_vect7_data[] = { 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */ 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */ 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */ 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */ 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */ 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */ 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */ 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */ 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */ 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */ 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */ 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */ 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */ 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */ 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */ 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */ 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */ 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */ 0x74, 0x69, 0x6F, 0x6E, 0x2E, /* tion. */ }; static const uint8_t mac_cbc_vect7_out[] = { 0xFD, 0x89, 0x35, 0xB3, 0x93, 0x7F, 0xBB, 0xA2, /* ..5..... */ 0xFB, 0x65, 0x60, 0xC4, 0x0A, 0x62, 0xA0, 0xF9, /* .e`..b.. */ }; /* DES-CBC-MAC PKCS#5 pad*/ #define mac_cbc_vect8_key mac_cbc_vect5_key #define mac_cbc_vect8_data mac_cbc_vect7_data static const uint8_t mac_cbc_vect8_out[] = { 0x02, 0x2A, 0xA8, 0x2E, 0x47, 0xC6, 0xBB, 0x7C, /* ....G..| */ }; /* DES3-CBC-MAC PKCS#5 pad*/ #define mac_cbc_vect9_key mac_cbc_vect6_key #define mac_cbc_vect9_data mac_cbc_vect7_data static const uint8_t mac_cbc_vect9_out[] = { 0xD4, 0xF7, 0x3E, 0x27, 0x78, 0x0E, 0x1C, 0x79, /* ..>'x..y */ }; /* * DES3-CBC-MAC, with key size of 112bit * out obtained with: * echo -n "Cipher block chaining (CBC) is a common chaining mode in which the previous block's ciphertext is xored with the current block's plaintext before encryption...."|openssl enc -iv 0 -des3 -K 303132333435363738394142434445463031323334353637 |xxd */ /* DES3-CBC-MAC PKCS#5 pad*/ static const uint8_t mac_cbc_vect10_key[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */ }; #define mac_cbc_vect10_data mac_cbc_vect1_data static const uint8_t mac_cbc_vect10_out[] = { 0x30, 0x92, 0x60, 0x99, 0x66, 0xac, 0x8c, 0xa6, }; /* * AES-CMAC * Test vectors from * http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf */ /* AES-128 */ static const uint8_t mac_cmac_vect1_key[] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }; static const uint8_t mac_cmac_vect1_out[] = { 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28, 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46 }; #define mac_cmac_vect2_key mac_cmac_vect1_key static const uint8_t mac_cmac_vect2_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a }; static const uint8_t mac_cmac_vect2_out[] = { 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44, 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c }; #define mac_cmac_vect3_key mac_cmac_vect1_key static const uint8_t mac_cmac_vect3_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11 }; static const uint8_t mac_cmac_vect3_out[] = { 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30, 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27 }; #define mac_cmac_vect4_key mac_cmac_vect1_key static const uint8_t mac_cmac_vect4_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }; static const uint8_t mac_cmac_vect4_out[] = { 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92, 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe }; /* AES-192 */ static const uint8_t mac_cmac_vect5_key[] = { 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52, 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5, 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b }; static const uint8_t mac_cmac_vect5_out[] = { 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5, 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67 }; #define mac_cmac_vect6_key mac_cmac_vect5_key static const uint8_t mac_cmac_vect6_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a }; static const uint8_t mac_cmac_vect6_out[] = { 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90, 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84 }; #define mac_cmac_vect7_key mac_cmac_vect5_key static const uint8_t mac_cmac_vect7_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11 }; static const uint8_t mac_cmac_vect7_out[] = { 0x8a, 0x1d, 0xe5, 0xbe, 0x2e, 0xb3, 0x1a, 0xad, 0x08, 0x9a, 0x82, 0xe6, 0xee, 0x90, 0x8b, 0x0e }; #define mac_cmac_vect8_key mac_cmac_vect5_key static const uint8_t mac_cmac_vect8_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }; static const uint8_t mac_cmac_vect8_out[] = { 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79, 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11 }; /* AES-256 */ static const uint8_t mac_cmac_vect9_key[] = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81, 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 }; static const uint8_t mac_cmac_vect9_out[] = { 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e, 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83 }; #define mac_cmac_vect10_key mac_cmac_vect9_key static const uint8_t mac_cmac_vect10_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a }; static const uint8_t mac_cmac_vect10_out[] = { 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82, 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c }; #define mac_cmac_vect11_key mac_cmac_vect9_key static const uint8_t mac_cmac_vect11_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11 }; static const uint8_t mac_cmac_vect11_out[] = { 0xaa, 0xf3, 0xd8, 0xf1, 0xde, 0x56, 0x40, 0xc2, 0x32, 0xf5, 0xb1, 0x69, 0xb9, 0xc9, 0x11, 0xe6 }; #define mac_cmac_vect12_key mac_cmac_vect9_key static const uint8_t mac_cmac_vect12_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }; static const uint8_t mac_cmac_vect12_out[] = { 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5, 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10 }; #define mac_cmac_vect13_key mac_cmac_vect1_key static const uint8_t mac_cmac_vect13_data[] = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, }; static const uint8_t mac_cmac_vect13_out[] = { 0xF6, 0xDC, 0xBF, 0x9A, 0x5A, 0x3E, 0x1E, 0xF9, 0x7B, 0xE1, 0x02, 0x08, 0x5B, 0xF4, 0x19, 0x7F, }; /* * DES3-CMAC * Test vectors from * https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/cavp-testing-block-cipher-modes */ /* Three Key TDEA */ /* CMACGenTDES3.rsp Count = 8 */ static const uint8_t mac_des3_cmac_vect1_key[] = { 0xf8, 0x7c, 0x4c, 0x3d, 0xf7, 0x1f, 0xd9, 0x8c, 0xe5, 0x32, 0xf4, 0x1f, 0xfe, 0x31, 0x58, 0x20, 0x51, 0x4f, 0xad, 0x7c, 0x7a, 0xae, 0x2f, 0x46 }; static const uint8_t mac_des3_cmac_vect1_out[] = { 0x19, 0xfb, 0xd3, 0xdc, 0x15, 0x4b, 0xc1, 0x39 }; /* CMACVerTDES3.rsp Count = 25 */ static const uint8_t mac_des3_cmac_vect2_key[] = { 0xa2, 0x52, 0xda, 0xad, 0x73, 0x1c, 0x10, 0x97, 0x45, 0x46, 0x38, 0xab, 0xf1, 0xf8, 0x40, 0x6d, 0xd0, 0xae, 0xcb, 0xc7, 0x8c, 0x01, 0x8a, 0xa8 }; static const uint8_t mac_des3_cmac_vect2_data[] = { 0x1d, 0x99, 0x92, 0x0c, 0x59, 0x73, 0x99, 0x7c, 0xc0, 0x59, 0xd4, 0x42, 0x46, 0x7f, 0x76, 0x59 }; static const uint8_t mac_des3_cmac_vect2_out[] = { 0x7c, 0x14, 0x90, 0x12, 0xd6, 0x12, 0x0e, 0xc6 }; /* CMACVerTDES3.rsp Count = 40 */ static const uint8_t mac_des3_cmac_vect3_key[] = { 0xf2, 0x45, 0xf8, 0xd5, 0x85, 0x13, 0x3e, 0x31, 0x04, 0xd3, 0xfb, 0xc2, 0xd0, 0xec, 0x80, 0xf4, 0x3e, 0xce, 0x1f, 0xd9, 0xa2, 0x8f, 0x5e, 0xd5 }; static const uint8_t mac_des3_cmac_vect3_data[] = { 0x99, 0x3d, 0xac, 0xbc, 0x22, 0x1e, 0xd3, 0x2a, 0x6f, 0xb3, 0xd9, 0x05, 0x59, 0xc6, 0x74, 0xfb, 0x68, 0x08, 0x9e, 0xea, 0x8d, 0xf9, 0xea, 0xec, 0x14, 0x07, 0x19, 0x91, 0xd4, 0xfa, 0xe8, 0x6b }; static const uint8_t mac_des3_cmac_vect3_out[] = { 0x25, 0xfb, 0x96, 0x2e, 0xa9, 0x3b, 0x89, 0x7f }; /* CMACVerTDES3.rsp Count = 57 */ static const uint8_t mac_des3_cmac_vect4_key[] = { 0xc2, 0x9e, 0xc1, 0x2c, 0xa4, 0x83, 0xc2, 0x61, 0xc1, 0xfe, 0xa7, 0x34, 0xf4, 0xad, 0x08, 0x10, 0x8a, 0xc2, 0x75, 0x02, 0x68, 0x2c, 0x67, 0xdc }; static const uint8_t mac_des3_cmac_vect4_data[] = { 0x19, 0x5c, 0x0b, 0x84, 0xba, 0xac, 0xc8, 0x8a, 0x33 }; static const uint8_t mac_des3_cmac_vect4_out[] = { 0xe3, 0xeb, 0xff, 0x96, 0x12, 0x49, 0x42, 0x45 }; /* Two Key TDEA */ /* CMACVerTDES2.rsp Count = 55 */ static const uint8_t mac_des3_cmac_vect5_key[] = { 0xb6, 0xe0, 0xe5, 0x80, 0x20, 0x92, 0x34, 0x94, 0xdc, 0x76, 0x80, 0x08, 0xe9, 0x98, 0x8f, 0xc2, 0xb6, 0xe0, 0xe5, 0x80, 0x20, 0x92, 0x34, 0x94 }; static const uint8_t mac_des3_cmac_vect5_out[] = { 0x5c, 0x73, 0x43, 0xa4, 0x16, 0x8a, 0x37, 0x0f }; /* CMACVerTDES2.rsp Count = 101 */ static const uint8_t mac_des3_cmac_vect6_key[] = { 0x61, 0xc4, 0xec, 0x20, 0x70, 0xe9, 0xbf, 0x2a, 0xec, 0x02, 0xd0, 0xb0, 0xe9, 0x9e, 0x8f, 0x01, 0x61, 0xc4, 0xec, 0x20, 0x70, 0xe9, 0xbf, 0x2a }; static const uint8_t mac_des3_cmac_vect6_data[] = { 0xff, 0xbd, 0x75, 0x61, 0x93, 0x91, 0x88, 0xbc }; static const uint8_t mac_des3_cmac_vect6_out[] = { 0x55, 0xa0, 0x4c, 0x23, 0xd5, 0xb4, 0x3e, 0x49 }; /* CMACVerTDES2.rsp Count = 223 */ static const uint8_t mac_des3_cmac_vect7_key[] = { 0xb6, 0xc8, 0x9d, 0x79, 0x85, 0x70, 0xab, 0x6e, 0xcd, 0x54, 0x54, 0xc1, 0xa7, 0x29, 0xf2, 0xd9, 0xb6, 0xc8, 0x9d, 0x79, 0x85, 0x70, 0xab, 0x6e }; static const uint8_t mac_des3_cmac_vect7_data[] = { 0x83, 0xd2, 0xc3, 0x86, 0xe8, 0x73, 0xad, 0xa1, 0x49, 0x76, 0x71, 0x2b, 0x67, 0x27, 0x7c }; static const uint8_t mac_des3_cmac_vect7_out[] = { 0x03, 0xbf, 0x2c, 0x9f, 0x49, 0x6e, 0x4f, 0xa9 }; /* CMACVerTDES2.rsp Count = 358 */ static const uint8_t mac_des3_cmac_vect8_key[] = { 0xe0, 0x85, 0xab, 0xa8, 0x58, 0x83, 0xc7, 0x5d, 0x62, 0x76, 0x75, 0x7a, 0x54, 0x31, 0xc8, 0x37, 0xe0, 0x85, 0xab, 0xa8, 0x58, 0x83, 0xc7, 0x5d }; static const uint8_t mac_des3_cmac_vect8_data[] = { 0xb0, 0x53, 0x76, 0xdb, 0x71, 0xce, 0x06, 0x66, 0x63, 0x81, 0x95, 0x03, 0xeb, 0x0a, 0xd5, 0xef, 0x63, 0x2d, 0x0c, 0xa4, 0x6c, 0xd4, 0x0e, 0xfe, 0x86, 0x54, 0x69, 0x9d, 0xde, 0xf2, 0xdf, 0x8a, 0x66, 0xa6, 0x19, 0x1d, 0x2b, 0x1f, 0x99, 0x1e }; static const uint8_t mac_des3_cmac_vect8_out[] = { 0xd5, 0xe7, 0x9f, 0x0b, 0x3c, 0x67, 0xd7, 0xf3 }; /* X25519 test vectors (RFC 7748 - 6.1) */ static const uint8_t x25519_alice_private[] = { 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d, 0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45, 0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a, 0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a }; static const uint8_t x25519_alice_public[] = { 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54, 0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a, 0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4, 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a }; static const uint8_t x25519_bob_private[] = { 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b, 0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6, 0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd, 0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb }; static const uint8_t x25519_bob_public[] = { 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4, 0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37, 0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d, 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f }; static const uint8_t x25519_shared_secret[] = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1, 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25, 0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33, 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 }; /* Ed25519 test vectors (RFC 8032 - 7.1) */ static const uint8_t ed25519_rfc_8032_7_1_private[] = { 0x83, 0x3f, 0xe6, 0x24, 0x9, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58, 0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b, 0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42 }; static const uint8_t ed25519_rfc_8032_7_1_public[] = { 0xec, 0x17, 0x2b, 0x93, 0xad, 0x5e, 0x56, 0x3b, 0xf4, 0x93, 0x2c, 0x70, 0xe1, 0x24, 0x50, 0x34, 0xc3, 0x54, 0x67, 0xef, 0x2e, 0xfd, 0x4d, 0x64, 0xeb, 0xf8, 0x19, 0x68, 0x34, 0x67, 0xe2, 0xbf }; static const uint8_t ed25519_rfc_8032_7_1_ptx[] = { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0xe, 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f }; static const uint8_t ed25519_rfc_8032_7_1_out[] = { 0xdc, 0x2a, 0x44, 0x59, 0xe7, 0x36, 0x96, 0x33, 0xa5, 0x2b, 0x1b, 0xf2, 0x77, 0x83, 0x9a, 0x0, 0x20, 0x10, 0x09, 0xa3, 0xef, 0xbf, 0x3e, 0xcb, 0x69, 0xbe, 0xa2, 0x18, 0x6c, 0x26, 0xb5, 0x89, 0x09, 0x35, 0x1f, 0xc9, 0xac, 0x90, 0xb3, 0xec, 0xfd, 0xfb, 0xc7, 0xc6, 0x64, 0x31, 0xe0, 0x30, 0x3d, 0xca, 0x17, 0x9c, 0x13, 0x8a, 0xc1, 0x7a, 0xd9, 0xbe, 0xf1, 0x17, 0x73, 0x31, 0xa7, 0x4 }; /* Ed25519 test vectors (RFC 8032 - 7.2) */ static const uint8_t ed25519ctx_rfc_8032_7_2_private[] = { 0x03, 0x05, 0x33, 0x4e, 0x38, 0x1a, 0xf7, 0x8f, 0x14, 0x1c, 0xb6, 0x66, 0xf6, 0x19, 0x9f, 0x57, 0xbc, 0x34, 0x95, 0x33, 0x5a, 0x25, 0x6a, 0x95, 0xbd, 0x2a, 0x55, 0xbf, 0x54, 0x66, 0x63, 0xf6 }; static const uint8_t ed25519ctx_rfc_8032_7_2_public[] = { 0xdf, 0xc9, 0x42, 0x5e, 0x4f, 0x96, 0x8f, 0x7f, 0x0c, 0x29, 0xf0, 0x25, 0x9c, 0xf5, 0xf9, 0xae, 0xd6, 0x85, 0x1c, 0x2b, 0xb4, 0xad, 0x8b, 0xfb, 0x86, 0x0c, 0xfe, 0xe0, 0xab, 0x24, 0x82, 0x92 }; static const uint8_t ed25519ctx_rfc_8032_7_2_ptx[] = { 0xf7, 0x26, 0x93, 0x6d, 0x19, 0xc8, 0x00, 0x49, 0x4e, 0x3f, 0xda, 0xff, 0x20, 0xb2, 0x76, 0xa8 }; static const uint8_t ed25519ctx_rfc_8032_7_2_out[] = { 0x55, 0xa4, 0xcc, 0x2f, 0x70, 0xa5, 0x4e, 0x4, 0x28, 0x8c, 0x5f, 0x4c, 0xd1, 0xe4, 0x5a, 0x7b, 0xb5, 0x20, 0xb3, 0x62, 0x92, 0x91, 0x18, 0x76, 0xca, 0xda, 0x73, 0x23, 0x19, 0x8d, 0xd8, 0x7a, 0x8b, 0x36, 0x95, 0x0b, 0x95, 0x13, 0x00, 0x22, 0x90, 0x7a, 0x7f, 0xb7, 0xc4, 0xe9, 0xb2, 0xd5, 0xf6, 0xcc, 0xa6, 0x85, 0xa5, 0x87, 0xb4, 0xb2, 0x1f, 0x4b, 0x88, 0x8e, 0x4e, 0x7e, 0xdb, 0xd }; static const uint8_t ed25519ctx_rfc_8032_7_2_context[] = { 0x66, 0x6f, 0x6f }; /* Ed25519 test vectors (RFC 8032 - 7.3) */ static const uint8_t ed25519ph_rfc_8032_7_3_private[] = { 0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58, 0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b, 0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42 }; static const uint8_t ed25519ph_rfc_8032_7_3_public[] = { 0xec, 0x17, 0x2b, 0x93, 0xad, 0x5e, 0x56, 0x3b, 0xf4, 0x93, 0x2c, 0x70, 0xe1, 0x24, 0x50, 0x34, 0xc3, 0x54, 0x67, 0xef, 0x2e, 0xfd, 0x4d, 0x64, 0xeb, 0xf8, 0x19, 0x68, 0x34, 0x67, 0xe2, 0xbf }; static const uint8_t ed25519ph_rfc_8032_7_3_ptx[] = { 0x61, 0x62, 0x63 }; static const uint8_t ed25519ph_rfc_8032_7_3_out[] = { 0x98, 0xa7, 0x02, 0x22, 0xf0, 0xb8, 0x12, 0x1a, 0xa9, 0xd3, 0x0f, 0x81, 0x3d, 0x68, 0x3f, 0x80, 0x9e, 0x46, 0x2b, 0x46, 0x9c, 0x7f, 0xf8, 0x76, 0x39, 0x49, 0x9b, 0xb9, 0x4e, 0x6d, 0xae, 0x41, 0x31, 0xf8, 0x50, 0x42, 0x46, 0x3c, 0x2a, 0x35, 0x5a, 0x20, 0x03, 0xd0, 0x62, 0xad, 0xf5, 0xaa, 0xa1, 0x0b, 0x8c, 0x61, 0xe6, 0x36, 0x06, 0x2a, 0xaa, 0xd1, 0x1c, 0x2a, 0x26, 0x08, 0x34, 0x06 }; /* * RSA AES wrapped key * Test data generated as follows: * - generate target AES-256 key (target.aes) * - generate wrapping RSA keypair (we use ac_rsassa_vect2 in this case) * - generate intermediate AES-256 KEK * - wrap target key using KEK (RFC 5649): * openssl enc \ * -id-aes256-wrap-pad \ * -iv A65959A6 \ * -K $( hexdump -v -e '/1 "%02x"' < kek.aes ) \ * -in target.aes \ * -out target_wrapped.enc * - encrypt KEK using wrapping RSA public key: * openssl pkeyutl \ * -encrypt \ * -pubin \ * -inkey vect2_pub.key \ * -in kek.aes -out kek_wrapped.enc \ * -pkeyopt rsa_padding_mode:oaep \ * -pkeyopt rsa_oaep_md:sha256 \ * -pkeyopt rsa_mgf1_md:sha256 * * - concatenate both: * cat kek_wrapped.enc target_wrapped.enc > pkcs11_rsa_aes_wrapped_key */ static const uint8_t pkcs11_rsa_aes_wrapped_key[] = { 0x5c, 0x1f, 0x2d, 0x4f, 0xe9, 0x72, 0xf2, 0x67, 0xc7, 0x82, 0x78, 0x28, 0x15, 0xe0, 0x25, 0x75, 0xc5, 0xf0, 0x5c, 0x0b, 0x11, 0x78, 0xbc, 0x3e, 0xf7, 0x3d, 0x8e, 0x33, 0x44, 0x2a, 0xb5, 0x81, 0xc6, 0x4c, 0x06, 0xea, 0x8a, 0xfa, 0x34, 0x86, 0x17, 0x07, 0x87, 0x80, 0x0f, 0x8e, 0x47, 0xe6, 0xaf, 0x48, 0x6c, 0x8b, 0x29, 0x98, 0xb4, 0x69, 0xe2, 0x91, 0x03, 0x51, 0xea, 0x90, 0xa4, 0x66, 0x5c, 0x07, 0xa2, 0xa3, 0x4c, 0x02, 0x3b, 0x71, 0x0c, 0xf2, 0x57, 0x4a, 0x4f, 0x63, 0x14, 0xce, 0x63, 0x17, 0x15, 0xa4, 0x1d, 0x4e, 0x38, 0x53, 0x56, 0x11, 0x56, 0xcc, 0x2e, 0x80, 0xb3, 0xc1, 0xf2, 0x1a, 0x54, 0xd5, 0x5b, 0x80, 0xb5, 0xd8, 0xd7, 0x29, 0x37, 0x76, 0x79, 0xbd, 0xa9, 0xfa, 0x8f, 0x8c, 0x8d, 0x8d, 0xd8, 0xe2, 0x94, 0xe5, 0xf0, 0x62, 0x62, 0x0c, 0x8c, 0x28, 0x5e, 0x77, 0xb6, 0xf3, 0xa9, 0x64, 0x76, 0xe6, 0xd7, 0x9f, 0x0b, 0xe7, 0x17, 0xba, 0x23, 0xe5, 0x13, 0x6f, 0xf8, 0x0f, 0x51, 0xd6, 0x2a, 0x2c, 0x75, 0xb4, 0xd8, 0x1b, 0x13, 0xc8, 0xd4, 0x7f, 0x2a, 0x2c, 0x2c, 0x34, 0x58, 0x6e, 0x26, 0x7a, 0x6c, 0xa9, 0x77, 0x18, 0xb1, 0xbd, 0xb5, 0x0a, 0xdd, 0x46, 0xd6, 0x31, 0x80, 0x51, 0xc1, 0x7c, 0x6b, 0x74, 0x4d, 0x91, 0x9e, 0xbf, 0xce, 0x3a, 0x39, 0xbb, 0x79, 0xab, 0x5f, 0x9e, 0xb5, 0xab, 0x76, 0x37, 0xea, 0x11, 0xf6, 0xe1, 0x50, 0xcb, 0x74, 0xf9, 0x1c, 0x91, 0x5f, 0xf6, 0xc9, 0xd5, 0x9b, 0xc1, 0xfc, 0x76, 0x5a, 0x58, 0xfb, 0xaa, 0x88, 0xcc, 0xaa, 0x4e, 0x31, 0x8e, 0xe5, 0x3d, 0x22, 0xc3, 0xcb, 0x21, 0x3b, 0xd5, 0x95, 0x3a, 0x09, 0xd8, 0xce, 0x7f, 0x39, 0x9b, 0x38, 0x8c, 0x51, 0x61, 0x87, 0x18, 0x7e, 0xf5, 0x5a, 0x0b, 0x70, 0x2b, 0x35, 0xd3, 0x18, 0x0f, 0xc9, 0xe7, 0xc4, 0xf3, 0x9d, 0x14, 0x20, 0x85, 0x64, 0xb1, 0xfb, 0x3b, 0xc0, 0xc1, 0x21, 0x08, 0x8f, 0x2f, 0x3f, 0xb9, 0xde, 0xe9, 0x11, 0x57, 0xaf, 0x35, 0x65, 0xa0, 0x5b, 0x9c, 0x62, 0xfb, 0xc9, 0x80, 0x8b, 0xcc }; /* * Sample AES-256 key */ static const uint8_t pkcs11_rsa_aes_tagret_key[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x45, 0x53, 0x20, 0x32, 0x35, 0x36, 0x20, 0x6b, 0x65, 0x79, 0x0a }; #endif /*XTEST_4000_DATA_H*/ optee_test-4.3.0/host/xtest/regression_4100.c000066400000000000000000002406241464074351400210250ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* Copyright (c) 2018, Linaro Limited */ #include #include #include #include #include #include #include #include #include #include #include #include #include "xtest_test.h" #include "xtest_helpers.h" static TEEC_Result cmd_new_var(ADBG_Case_t *c, TEEC_Session *s, uint32_t num_bits, uint32_t *handle) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = num_bits; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_NEW_VAR, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *handle = op.params[1].value.a; return res; } static TEEC_Result cmd_new_fmm_var(ADBG_Case_t *c, TEEC_Session *s, uint32_t num_bits, uint32_t *handle) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = num_bits; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_NEW_FMM_VAR, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *handle = op.params[1].value.a; return res; } static TEEC_Result cmd_new_fmm_ctx(ADBG_Case_t *c, TEEC_Session *s, uint32_t num_bits, uint32_t hmodulus, uint32_t *handle) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = num_bits; op.params[0].value.b = hmodulus; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_NEW_FMM_CTX, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *handle = op.params[1].value.a; return res; } static TEEC_Result cmd_free_handle(ADBG_Case_t *c, TEEC_Session *s, uint32_t handle) { if (handle == TA_CRYPT_ARITH_INVALID_HANDLE) return TEEC_SUCCESS; TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = handle; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_FREE_HANDLE, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_from_octet_string(ADBG_Case_t *c, TEEC_Session *s, uint8_t *buf, uint32_t buf_len, int32_t sign, uint32_t h) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = h; op.params[0].value.b = sign; op.params[1].tmpref.buffer = buf; op.params[1].tmpref.size = buf_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_FROM_OCTET_STRING, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_from_s32(ADBG_Case_t *c, TEEC_Session *s, uint32_t handle, int32_t v) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = handle; op.params[0].value.b = v; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_FROM_S32, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_get_bit(ADBG_Case_t *c, TEEC_Session *s, uint32_t handle, uint32_t bit_num, uint32_t *v) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = handle; op.params[0].value.b = bit_num; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_GET_BIT, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *v = op.params[1].value.a; return res; } static TEEC_Result cmd_set_bit(ADBG_Case_t *c, TEEC_Session *s, uint32_t handle, uint32_t bit_num, uint32_t v) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = handle; op.params[0].value.b = bit_num; op.params[1].value.a = v; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_SET_BIT, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_get_bit_count(ADBG_Case_t *c, TEEC_Session *s, uint32_t handle, uint32_t *v) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = handle; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_GET_BIT_COUNT, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *v = op.params[1].value.a; return res; } static TEEC_Result cmd_binary_cmd(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t hop1, uint32_t hop2, uint32_t hres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop1; op.params[0].value.b = hop2; op.params[1].value.a = hres; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_unary_cmd(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t hop, uint32_t hres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop; op.params[0].value.b = hres; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_ternary_cmd(ADBG_Case_t *c, TEEC_Session *s, uint32_t cmd, uint32_t hop1, uint32_t hop2, uint32_t hn, uint32_t hres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop1; op.params[0].value.b = hop2; op.params[1].value.a = hn; op.params[1].value.b = hres; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_neg(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop, uint32_t hres) { return cmd_unary_cmd(c, s, TA_CRYPT_CMD_ARITH_NEG, hop, hres); } static TEEC_Result cmd_abs(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop, uint32_t hres) { return cmd_unary_cmd(c, s, TA_CRYPT_CMD_ARITH_ABS, hop, hres); } static TEEC_Result cmd_assign(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop, uint32_t hres) { return cmd_unary_cmd(c, s, TA_CRYPT_CMD_ARITH_ASSIGN, hop, hres); } static TEEC_Result cmd_add(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hres) { return cmd_binary_cmd(c, s, TA_CRYPT_CMD_ARITH_ADD, hop1, hop2, hres); } static TEEC_Result cmd_sub(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hres) { return cmd_binary_cmd(c, s, TA_CRYPT_CMD_ARITH_SUB, hop1, hop2, hres); } static TEEC_Result cmd_mul(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hres) { return cmd_binary_cmd(c, s, TA_CRYPT_CMD_ARITH_MUL, hop1, hop2, hres); } static TEEC_Result cmd_mod(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hres) { return cmd_binary_cmd(c, s, TA_CRYPT_CMD_ARITH_MOD, hop1, hop2, hres); } static TEEC_Result cmd_invmod(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hres) { return cmd_binary_cmd(c, s, TA_CRYPT_CMD_ARITH_INVMOD, hop1, hop2, hres); } static TEEC_Result cmd_addmod(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hn, uint32_t hres) { return cmd_ternary_cmd(c, s, TA_CRYPT_CMD_ARITH_ADDMOD, hop1, hop2, hn, hres); } static TEEC_Result cmd_submod(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hn, uint32_t hres) { return cmd_ternary_cmd(c, s, TA_CRYPT_CMD_ARITH_SUBMOD, hop1, hop2, hn, hres); } static TEEC_Result cmd_mulmod(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hn, uint32_t hres) { return cmd_ternary_cmd(c, s, TA_CRYPT_CMD_ARITH_MULMOD, hop1, hop2, hn, hres); } static TEEC_Result cmd_is_prime(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop, uint32_t conf_level, int32_t *pres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop; op.params[0].value.b = conf_level; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_IS_PRIME, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *pres = op.params[1].value.a; return res; } static TEEC_Result cmd_shift_right(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop, uint32_t bits, uint32_t hres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop; op.params[0].value.b = bits; op.params[1].value.a = hres; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_SHIFT_RIGHT, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_to_fmm(ADBG_Case_t *c, TEEC_Session *s, uint32_t hsrc, uint32_t hn, uint32_t hctx, uint32_t hres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hsrc; op.params[0].value.b = hn; op.params[1].value.a = hctx; op.params[1].value.b = hres; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_TO_FMM, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_from_fmm(ADBG_Case_t *c, TEEC_Session *s, uint32_t hsrc, uint32_t hn, uint32_t hctx, uint32_t hres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hsrc; op.params[0].value.b = hn; op.params[1].value.a = hctx; op.params[1].value.b = hres; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_FROM_FMM, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_compute_fmm(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hn, uint32_t hctx, uint32_t hres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop1; op.params[0].value.b = hop2; op.params[1].value.a = hn; op.params[1].value.b = hctx; op.params[2].value.a = hres; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_COMPUTE_FMM, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_compute_egcd(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hu, uint32_t hv, uint32_t hgcd) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop1; op.params[0].value.b = hop2; op.params[1].value.a = hu; op.params[1].value.b = hv; op.params[2].value.a = hgcd; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_COMPUTE_EGCD, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static TEEC_Result cmd_compute_gcd(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hgcd) { return cmd_compute_egcd(c, s, hop1, hop2, TA_CRYPT_ARITH_INVALID_HANDLE, TA_CRYPT_ARITH_INVALID_HANDLE, hgcd); } static TEEC_Result cmd_expmod(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hn, uint32_t hctx, uint32_t hres) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop1; op.params[0].value.b = hop2; op.params[1].value.a = hn; op.params[1].value.b = hctx; op.params[2].value.a = hres; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_EXPMOD, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static int digit_value(char ch) { if ((ch >= '0') && (ch <= '9')) return ch - '0'; if ((ch >= 'A') && (ch <= 'F')) return ch - 'A' + 10; if ((ch >= 'a') && (ch <= 'f')) return ch - 'a' + 10; return -1; } static TEEC_Result convert_from_string(ADBG_Case_t *c, TEEC_Session *s, const char *str, uint32_t h) { TEEC_Result res = TEEC_ERROR_BAD_FORMAT; size_t spos = strlen(str); int32_t sign = 1; size_t os_len = (spos + 1) / 2; uint8_t *os = calloc(1, os_len); int ospos = os_len - 1; int nibble = 0; if (!os) return TEEC_ERROR_OUT_OF_MEMORY; while (spos) { spos--; nibble = digit_value(str[spos]); if (nibble == -1) break; os[ospos] = nibble; if (!spos) break; spos--; nibble = digit_value(str[spos]); if (nibble == -1) break; os[ospos] |= nibble << 4; ospos--; } if (spos) goto out; if (str[spos] == '-') sign = -1; res = cmd_from_octet_string(c, s, os, os_len, sign, h); out: free(os); return res; } static TEEC_Result cmd_get_value(ADBG_Case_t *c, TEEC_Session *s, uint8_t *buf, uint32_t *buf_len, int32_t *sign, uint32_t h) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = h; op.params[2].tmpref.buffer = buf; op.params[2].tmpref.size = *buf_len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_GET_VALUE, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *sign = op.params[1].value.a; *buf_len = op.params[2].tmpref.size; return res; } static TEEC_Result __maybe_unused print_handle(ADBG_Case_t *c, TEEC_Session *s, const char *name, uint32_t h) { TEEC_Result res = TEEC_ERROR_GENERIC; uint8_t *os = NULL; uint32_t os_len = 0; int32_t sign = 0; res = cmd_get_value(c, s, os, &os_len, &sign, h); if (res) { if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_SHORT_BUFFER, res)) return res; os = malloc(os_len); if (!ADBG_EXPECT_NOT_NULL(c, os)) return TEEC_ERROR_OUT_OF_MEMORY; res = cmd_get_value(c, s, os, &os_len, &sign, h); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; } Do_ADBG_Log("%s sign %" PRId32 " (length %" PRIu32 ")", name, sign, os_len); Do_ADBG_HexLog(os, os_len, 16); out: free(os); return res; } static TEEC_Result cmd_get_value_s32(ADBG_Case_t *c, TEEC_Session *s, uint32_t h, int32_t *val) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = h; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_GET_VALUE_S32, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *val = op.params[1].value.a; return res; } static TEEC_Result cmd_cmp(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, int32_t *cmp_res) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop1; op.params[0].value.b = hop2; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_CMP, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *cmp_res = op.params[1].value.a; return res; } static TEEC_Result cmd_cmp_s32(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop, int32_t s32, int32_t *cmp_res) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop; op.params[0].value.b = s32; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_CMP_S32, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); if (!res) *cmp_res = op.params[1].value.a; return res; } static TEEC_Result cmd_div(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, uint32_t hq, uint32_t hr) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = hop1; op.params[0].value.b = hop2; op.params[1].value.a = hq; op.params[1].value.b = hr; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ARITH_DIV, &op, &ret_orig); ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } static void test_4101(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; uint32_t handle = TA_CRYPT_ARITH_INVALID_HANDLE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "Normal allocation and initialization"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 512, &handle))) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, handle, !=, TA_CRYPT_ARITH_INVALID_HANDLE)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, handle))) goto out; Do_ADBG_EndSubCase(c, "Normal allocation and initialization"); Do_ADBG_BeginSubCase(c, "Zero allocation"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 0, &handle))) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, handle, !=, TA_CRYPT_ARITH_INVALID_HANDLE)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, handle))) goto out; Do_ADBG_EndSubCase(c, "Zero allocation"); Do_ADBG_BeginSubCase(c, "Too large"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 4096, &handle))) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, handle, !=, TA_CRYPT_ARITH_INVALID_HANDLE)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, handle))) goto out; Do_ADBG_EndSubCase(c, "Too large"); Do_ADBG_BeginSubCase(c, "Boundaries"); if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 2048, &handle))) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, handle, !=, TA_CRYPT_ARITH_INVALID_HANDLE)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 2049, &handle))) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, handle, !=, TA_CRYPT_ARITH_INVALID_HANDLE)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, handle))) goto out; Do_ADBG_EndSubCase(c, "Boundaries"); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4101, test_4101, "Test TEE Internal API Arithmetical API - Bigint init"); static void test_4102(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; uint32_t ha = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hb = TA_CRYPT_ARITH_INVALID_HANDLE; size_t n = 0; const struct { const uint8_t *os; uint32_t os_len; const char *str; int32_t sign; } data[] = { { .os = (const uint8_t []){ 1, 2, 3, 4 }, .os_len = 4, .sign = 1, .str = "01020304", }, { .os = (const uint8_t []){ 1, 2, 3, 4, 5 }, .os_len = 5, .sign = 1, .str = "0102030405", }, { .os = (const uint8_t []){ 0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88 }, .os_len = 7, .sign = 1, .str = "11224455667788", }, { .os = (const uint8_t []){ 0, 1, 2, 3, 4 }, .os_len = 5, .sign = 1, .str = "01020304", }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 512, &ha))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 512, &hb))) goto out; for (n = 0; n < ARRAY_SIZE(data); n++) { int32_t sign = 0; int32_t cmp_res = 0; size_t len_diff = 0; uint8_t os_res[10]; uint32_t os_len; Do_ADBG_BeginSubCase(c, "\"%s\"", data[n].str); if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, &session, data[n].str, ha))) goto out; /* Check that it's read back correctly */ os_len = data[n].os_len; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_get_value(c, &session, os_res, &os_len, &sign, ha))) goto out; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, data[n].os_len, >=, os_len)) goto out; len_diff = data[n].os_len - os_len; if (!ADBG_EXPECT_BUFFER(c, data[n].os + len_diff, data[n].os_len - len_diff, os_res, os_len)) goto out; if (!ADBG_EXPECT_COMPARE_SIGNED(c, sign, ==, data[n].sign)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_from_octet_string(c, &session, os_res, os_len, sign, hb))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_cmp(c, &session, ha, hb, &cmp_res))) goto out; if (!ADBG_EXPECT_COMPARE_SIGNED(c, cmp_res, ==, 0)) goto out; Do_ADBG_EndSubCase(c, NULL); } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4102, test_4102, "Test TEE Internal API Arithmetical API - Octet string"); static void test_4103(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; uint32_t h = TA_CRYPT_ARITH_INVALID_HANDLE; int32_t v = 0; static const int32_t data[] = { 1, -1, 123, -123, 0x7FFFFFFF, (int32_t)0x80000000, (int32_t)0xFFFFFFFF, 0, }; static const char *data_str[] = { "1FFFFFFFFF", "-1FFFFFFFFF" }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 512, &h))) goto out; for (n = 0; n < ARRAY_SIZE(data); n++) { int32_t cmp_res = 0; Do_ADBG_BeginSubCase(c, "%" PRId32 " (0x%" PRIx32 ")", data[n], (uint32_t)data[n]); if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_from_s32(c, &session, h, data[n]))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_cmp_s32(c, &session, h, data[n], &cmp_res))) goto out; if (!ADBG_EXPECT_COMPARE_SIGNED(c, cmp_res, ==, 0)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_get_value_s32(c, &session, h, &v))) { Do_ADBG_Log("n %zu", n); goto out; } if (!ADBG_EXPECT_COMPARE_SIGNED(c, data[n], ==, v)) goto out; Do_ADBG_EndSubCase(c, NULL); } for (n = 0; n < ARRAY_SIZE(data_str); n++) { Do_ADBG_BeginSubCase(c, "\"%s\" (overflow)", data_str[n]); if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, &session, data_str[n], h))) goto out; if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_OVERFLOW, cmd_get_value_s32(c, &session, h, &v))) goto out; Do_ADBG_EndSubCase(c, NULL); } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4103, test_4103, "Test TEE Internal API Arithmetical API - S32"); static TEEC_Result compare_str(ADBG_Case_t *c, TEEC_Session *s, const char str1[], const char str2[], int32_t cmp_res) { TEEC_Result res = TEEC_ERROR_GENERIC; int32_t cres = 0; uint32_t h1 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t h2 = TA_CRYPT_ARITH_INVALID_HANDLE; res = cmd_new_var(c, s, 512, &h1); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_new_var(c, s, 512, &h2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = convert_from_string(c, s, str1, h1); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = convert_from_string(c, s, str2, h2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_cmp(c, s, h1, h2, &cres); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; ADBG_EXPECT_COMPARE_SIGNED(c, cres, ==, cmp_res); out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, h1)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, h2)); return res; } static TEEC_Result compare_s32(ADBG_Case_t *c, TEEC_Session *s, const char str[], int32_t val, int32_t cmp_res) { TEEC_Result res = TEEC_ERROR_GENERIC; int32_t cres = 0; uint32_t h = TA_CRYPT_ARITH_INVALID_HANDLE; res = cmd_new_var(c, s, 512, &h); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; res = convert_from_string(c, s, str, h); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_cmp_s32(c, s, h, val, &cres); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; ADBG_EXPECT_COMPARE_SIGNED(c, cres, ==, cmp_res); out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, h)); return res; } static void test_4104(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; const struct { const char *str1; const char *str2; int32_t cmp_res; } data[] = { { "0", "1", -1 }, { "1", "0", 1 }, { "1", "2", -1 }, { "2", "1", 1 }, { "-1", "FFFFFFFFFF", -1 }, { "FFFFFFFFFF", "-1", 1 }, { "1", "-FFFFFFFFFF", 1 }, { "-FFFFFFFFFF", "1", -1 }, { "1", "100000000", -1 }, { "0", "0", 0 }, { "1", "1", 0 }, { "-1", "-1", 0} }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; Do_ADBG_BeginSubCase(c, "Compare bigints"); for (n = 0; n < ARRAY_SIZE(data); n++) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_str(c, &session, data[n].str1, data[n].str2, data[n].cmp_res))) goto out; } Do_ADBG_EndSubCase(c, "Compare bigints"); const struct { const char *str; int32_t val; int32_t cmp_res; } data_s32[] = { {"0", 0, 0 }, {"0", 1, -1 }, {"1", 0, 1 }, {"0", -1, 1 }, {"-1", 0, -1 }, {"1", 1, 0 }, {"-1", -1, 0 }, {"-1", 1, -1 }, {"1", -1, 1 }, {"123", 0x123, 0 }, {"-123", -0x123, 0 }, /* corner case */ {"7FFFFFFF", INT32_MAX, 0 }, {"-7FFFFFFF", INT32_MIN, 1 }, {"7FFFFFFF", 0, 1 }, {"-7FFFFFFF", 0, -1 }, {"-80000000", INT32_MIN, 0 }, {"80000000", INT32_MAX, 1 }, {"-80000001", INT32_MIN, -1 }, {"-7FFFFFFF", INT32_MIN, 1 }, /* large BigInt */ {"1FFFFFFFF", 1, 1 }, {"-1FFFFFFFF", 1, -1 }, }; Do_ADBG_BeginSubCase(c, "Compare S32"); for (n = 0; n < ARRAY_SIZE(data_s32); n++) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_s32(c, &session, data_s32[n].str, data_s32[n].val, data_s32[n].cmp_res))) goto out; } Do_ADBG_EndSubCase(c, "Compare S32"); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4104, test_4104, "Test TEE Internal API Arithmetical API - Compare"); static TEEC_Result compare_handle(ADBG_Case_t *c, TEEC_Session *s, uint32_t hop1, uint32_t hop2, int32_t cmp_res) { int32_t cres = 0; TEEC_Result res = cmd_cmp(c, s, hop1, hop2, &cres); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; if (!ADBG_EXPECT_COMPARE_SIGNED(c, cres, ==, cmp_res)) return TEEC_ERROR_GENERIC; return TEEC_SUCCESS; } static bool do_addsub(ADBG_Case_t *c, TEEC_Session *s, const char *str_s, const char *str_t, const char *str_r) { bool res = false; uint32_t ha = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hb = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hc = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hr = TA_CRYPT_ARITH_INVALID_HANDLE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 1024, &ha))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 1024, &hb))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 1024, &hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 1024, &hr))) goto out; /* First do the ADD dominated phase */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_r, hr))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_s, ha))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_t, hb))) goto out; /* hc = ha + hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_add(c, s, ha, hb, hc))) goto out; /* check hc == hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hr, 0))) goto out; /* ha = ha + hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_add(c, s, ha, hb, ha))) goto out; /* check ha == hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, ha, hr, 0))) goto out; /* ha = ha - hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_sub(c, s, ha, hb, ha))) goto out; /* hb = ha + hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_add(c, s, ha, hb, hb))) goto out; /* check hb == hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hb, hr, 0))) goto out; /* Do the SUB dominated phase */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_s, hr))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_r, ha))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_t, hb))) goto out; /* hc = ha - hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_sub(c, s, ha, hb, hc))) goto out; /* check hc == hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hr, 0))) goto out; /* ha = ha - hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_sub(c, s, ha, hb, ha))) goto out; /* check ha == hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, ha, hr, 0))) goto out; /* ha = ha + hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_add(c, s, ha, hb, ha))) goto out; /* hb = ha - hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_sub(c, s, ha, hb, hb))) goto out; /* check hb == hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hb, hr, 0))) goto out; /* Test assignment, ha = hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_assign(c, s, hb, ha))) goto out; /* check ha == hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, ha, hb, 0))) goto out; res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, ha)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hb)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hc)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hr)); return res; } static void test_4105(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; static const struct { const char *s; const char *t; const char *r; } data[] = { { "1", "1", "2" }, { "-1", "1", "0" }, { "0", "0", "0" }, { "0", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, /* single word, no carry */ { "FF", "FF", "1FE" }, /* single word, with carry */ { "FFFFFFFF", "FFFFFFFF", "1FFFFFFFE" }, /* mult word with partial carry */ { "FFFFFFFF", "100000000FFFFFFFFFFFFFFFF", "10000000100000000FFFFFFFE" }, /* mult word with carry all the way */ { "FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF", "1FFFFFFFFFFFFFFFE" }, /* single word, no carry */ { "-FF", "-FF", "-1FE" }, /* single word, with carry */ { "-FFFFFFFF", "-FFFFFFFF", "-1FFFFFFFE" }, /* mult word with partial carry */ { "-FFFFFFFF", "-100000000FFFFFFFFFFFFFFFF", "-10000000100000000FFFFFFFE" }, /* mult word with carry */ { "-FFFFFFFFFFFFFFFF", "-FFFFFFFFFFFFFFFF", "-1FFFFFFFFFFFFFFFE" }, /* single word, no carry */ { "FFFF", "-FF", "FF00" }, /* single word, with carry */ { "F00000000", "-00000FFFF", "EFFFF0001" }, /* multi words with carry */ { "FFFFFFFF00000000", "-FFFFFFFF", "FFFFFFFE00000001" }, { "10000000FFFFFFFF00000000", "-FFFFFFFF", "10000000FFFFFFFE00000001" }, { "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE", "1" }, { "FF", "-FFFF", "-FF00" }, { "FFFFFFFF", "-1FFFFFFFF", "-100000000" }, /* single word, no carry */ { "-FFFF", "FF", "-FF00" }, /* single word, with carry */ { "-F00000000", "00000FFFF", "-EFFFF0001" }, /* multi words with carry */ { "-FFFFFFFF00000000", "FFFFFFFF", "-FFFFFFFE00000001" }, { "-10000000FFFFFFFF00000000", "FFFFFFFF", "-10000000FFFFFFFE00000001" }, { "-FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE", "-1" }, { "-FF", "FFFF", "FF00" }, { "-FFFFFFFF", "1FFFFFFFF", "100000000" }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(data); n++) { if (!ADBG_EXPECT_TRUE(c, do_addsub(c, &session, data[n].s, data[n].t, data[n].r))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4105, test_4105, "Test TEE Internal API Arithmetical API - Add, Sub"); static void test_4106(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; uint32_t h1 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t h2 = TA_CRYPT_ARITH_INVALID_HANDLE; static const struct { const char *val; const char *neg_val; } data[] = { { "0", "0" }, { "1", "-1" }, { "123", "-123" }, { "123456789123456789", "-123456789123456789" }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &h1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &h2))) goto out; for (n = 0; n < ARRAY_SIZE(data); n++) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, &session, data[n].val, h1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, &session, data[n].neg_val, h2))) goto out; if (n && !ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, &session, h1, h2, 1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_neg(c, &session, h1, h1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, &session, h1, h2, 0))) goto out; } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4106, test_4106, "Test TEE Internal API Arithmetical API - Neg"); static bool do_mul(ADBG_Case_t *c, TEEC_Session *s, const char *str_s, const char *str_t, const char *str_r) { bool res = false; uint32_t ha = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hb = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hc = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hr = TA_CRYPT_ARITH_INVALID_HANDLE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 1024, &ha))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 1024, &hb))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hr))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_r, hr))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_s, ha))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_t, hb))) goto out; /* hc = ha * hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_mul(c, s, ha, hb, hc))) goto out; /* check hc == hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hr, 0))) goto out; /* ha = ha * hb */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_mul(c, s, ha, hb, ha))) goto out; /* check ha == hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, ha, hr, 0))) goto out; res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, ha)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hb)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hc)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hr)); return res; } static void test_4107(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; static const struct { const char *s; const char *t; const char *r; } data[] = { { "0", "0", "0" }, { "0", "FFFFFFFF", "0" }, { "1", "1", "1" }, { "-1", "1", "-1" }, { "-1", "-1", "1" }, { "FF", "1", "FF" }, { "2", "2", "4" }, { "3", "3", "9" }, { "100", "100", "10000" }, { "FFFFFFFF", "FFFFFFFF", "FFFFFFFE00000001" }, { "4F239BBAE89A447149CDB0B50A103C69591DD9E0C91A57955A6C266" "C7ED42A5ED5F4", "44FF5A67036657E041D55AE42AE25517A1", "155465C8221717FFC135C87ABF6D34184DF5E6906D2EBA7C364879AA" "0BE840FD06F1E0A7036BC3B7B1844FF95F07A39CE17A74" }, { "4F239BBAE89A447149CDB0B50A103C69591DD9E0C91A57955A6C266C" "7ED42A5ED5F4", "-44FF5A67036657E041D55AE42AE25517A1", "-155465C8221717FFC135C87ABF6D34184DF5E6906D2EBA7C364879A" "A0BE840FD06F1E0A7036BC3B7B1844FF95F07A39CE17A74" }, { "-4F239BBAE89A447149CDB0B50A103C69591DD9E0C91A57955A6C266" "C7ED42A5ED5F4", "-44FF5A67036657E041D55AE42AE25517A1", "155465C8221717FFC135C87ABF6D34184DF5E6906D2EBA7C364879AA" "0BE840FD06F1E0A7036BC3B7B1844FF95F07A39CE17A74" }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(data); n++) { if (!ADBG_EXPECT_TRUE(c, do_mul(c, &session, data[n].s, data[n].t, data[n].r))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4107, test_4107, "Test TEE Internal API Arithmetical API - Mul"); static bool do_div(ADBG_Case_t *c, TEEC_Session *s, const char *str_s, const char *str_t, const char *str_out, int32_t qsign, int32_t rsign) { bool res = false; int32_t cres = 0; uint32_t hn = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hd = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hq = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hr = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hv = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hout = TA_CRYPT_ARITH_INVALID_HANDLE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hn))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hd))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hq))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hr))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hv))) goto out; if (str_out) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hout))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_out, hout))) goto out; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_s, hn))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_t, hd))) goto out; /* (hq, hr) = n / d */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_div(c, s, hn, hd, hq, hr))) goto out; if (str_out) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hq, hout, 0))) goto out; } /* hv = hq * hd */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_mul(c, s, hq, hd, hv))) goto out; /* hv = hv + hr */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_add(c, s, hv, hr, hv))) goto out; /* check hn == hv */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hn, hv, 0))) goto out; if (qsign) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_cmp_s32(c, s, hq, 0, &cres))) goto out; if (!ADBG_EXPECT_COMPARE_SIGNED(c, cres, ==, qsign)) goto out; } if (rsign) { if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_cmp_s32(c, s, hr, 0, &cres))) goto out; if (!ADBG_EXPECT_COMPARE_SIGNED(c, cres, ==, rsign)) goto out; } res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hn)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hd)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hq)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hr)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hv)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hout)); return res; } static void test_4108(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; static const struct { const char *s; const char *t; const char *out; int32_t qsign; int32_t rsign; } data[] = { { "811111100000000112345678", "8000000012345678" }, { "0", "1", "0" }, { "1", "1", "1" }, { "b7fb", "5", "24CB" }, { "124378912734891273894712890347102358129034789120374", "1984086C15FA011154C86FA68", "B73D14EC7205D3311F6E78411D" }, { "124378912734891273894712890347102358129034789120374", "1984086C15FA011154C86FA68" }, { "-124378912734891273894712890347102358129034789120374", "1984086C15FA011154C86FA68" }, { "124378912734891273894712890347102358129034789120374", "-1984086C15FA011154C86FA68" }, { "-124378912734891273894712890347102358129034789120374", "-1984086C15FA011154C86FA68" }, { "12345678", "10" }, { "-12345678", "10" }, { "12345678", "-10" }, { "-12345678", "-10" }, { "12345678901234567890123456789012345678901", "10" }, { "1234567890123456789012345678901234567890", "10" }, { "123456789012345678901234567890123456789", "10" }, { "53", "7", NULL, 1, 1 }, { "-53", "7", NULL, -1, -1 }, { "53", "-7", NULL, -1, 1 }, { "-53", "-7", NULL, 1, -1 }, { "123456789abcdef123456789abcdef", "fedcba98765432100", NULL, 1, 1 }, { "-123456789abcdef123456789abcdef", "fedcba98765432100", NULL, -1, -1 }, { "123456789abcdef123456789abcdef", "-fedcba98765432100", NULL, -1, 1 }, { "-123456789abcdef123456789abcdef", "-fedcba98765432100", NULL, 1, -1 }, }; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(data); n++) { if (!ADBG_EXPECT_TRUE(c, do_div(c, &session, data[n].s, data[n].t, data[n].out, data[n].qsign, data[n].rsign))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4108, test_4108, "Test TEE Internal API Arithmetical API - Div"); static const struct { const char *op; const char *n; const char *res; } test_4109_data[] = { { "10", "A", "6" }, { "10", "20", "10" }, { "-1", "123", "122" }, { "-122", "123", "1" }, { "-1", "100000000000000000000", "FFFFFFFFFFFFFFFFFFFF" }, { "42176E7CD0386C94194C3C3DACFA7237" "CCF4E0829E2EBEAB59DE12CAE3305C9E" "576F837A42D9C13BB1D83E4DFD330B65" "76FD516B2AE9FBDD152F0A820C5DD18E" "D048D476EC791DC989D6D8C30B2B30FF" "C2A4ABAC082C672B38E138610B74CE0C" "30D1B378BE6FE0C44E09EC11586245CD" "8F1216619392E6B2C857C71EA78DD4D8" "61A482D9D1251C341D1D6205AFB2BFB5" "3DD1F272B5624FA61B020936745387CD" "F1F3EBC4435CBE6C6B323497098FDE9D" "61AA0CC87416235E706A71F73EC3C291" "D9ACA2EECD712DA40966DD251310AE94" "9713F69B2A32E42732A7F6669547D88A" "415B25C582FDBBF06C5EC5F5750053D4" "9F7ED68DED168C92F9C531828A", "A9A9C49F0015DBEF9EB0D927F379821AE2C59", "3460EB99F07BC4617A7586E6522B98F66E5B2" }, { "42176E7CD0386C94194C3C3DACFA7237" "CCF4E0829E2EBEAB59DE12CAE3305C9E" "576F837A42D9C13BB1D83E4DFD330B65" "76FD516B2AE9FBDD152F0A820C5DD18E" "D048D476EC791DC989D6D8C30B2B30FF" "C2A4ABAC082C672B38E138610B74CE0C" "30D1B378BE6FE0C44E09EC11586245CD" "8F1216619392E6B2C857C71EA78DD4D8" "61A482D9D1251C341D1D6205AFB2BFB5" "3DD1F272B5624FA61B020936745387CD" "F1F3EBC4435CBE6C6B323497098FDE9D" "61AA0CC87416235E706A71F73EC3C291" "D9ACA2EECD712DA40966DD251310AE94" "9713F69B2A32E42732A7F6669547D88A" "415B25C582FDBBF06C5EC5F5750053D4" "9F7ED68DED168C92F9C531828A", "1234", "1082" }, { "FFFF6E7CD0386C94194C3C3DACFA7237" "CCF4E0829E2EBEAB59DE12CAE3305C9E" "576F837A42D9C13BB1D83E4DFD330B65" "76FD516B2AE9FBDD152F0A820C5DD18E" "D048D476EC791DC989D6D8C30B2B30FF" "C2A4ABAC082C672B38E138610B74CE0C" "30D1B378BE6FE0C44E09EC11586245CD" "8F1216619392E6B2C857C71EA78DD4D8" "61A482D9D1251C341D1D6205AFB2BFB5" "3DD1F272B5624FA61B020936745387CD" "F1F3EBC4435CBE6C6B323497098FDE9D" "61AA0CC87416235E706A71F73EC3C291" "D9ACA2EECD712DA40966DD251310AE94" "9713F69B2A32E42732A7F6669547D88A" "415B25C582FDBBF06C5EC5F5750053D4" "9F7ED68DED168C92F9C531828A", "2", "0" }, { "FFFF6E7CD0386C94194C3C3DACFA7237" "CCF4E0829E2EBEAB59DE12CAE3305C9E" "576F837A42D9C13BB1D83E4DFD330B65" "76FD516B2AE9FBDD152F0A820C5DD18E" "D048D476EC791DC989D6D8C30B2B30FF" "C2A4ABAC082C672B38E138610B74CE0C" "30D1B378BE6FE0C44E09EC11586245CD" "8F1216619392E6B2C857C71EA78DD4D8" "61A482D9D1251C341D1D6205AFB2BFB5" "3DD1F272B5624FA61B020936745387CD" "F1F3EBC4435CBE6C6B323497098FDE9D" "61AA0CC87416235E706A71F73EC3C291" "D9ACA2EECD712DA40966DD251310AE94" "9713F69B2A32E42732A7F6669547D88A" "415B25C582FDBBF06C5EC5F5750053D4" "9F7ED68DED168C92F9C531828A", "FFFF6E7CD0386C94194C3C3DACFA7237" "CCF4E0829E2EBEAB59DE12CAE3305C9E" "576F837A42D9C13BB1D83E4DFD330B65" "76FD516B2AE9FBDD152F0A820C5DD18E" "D048D476EC791DC989D6D8C30B2B30FF" "C2A4ABAC082C672B38E138610B74CE0C" "30D1B378BE6FE0C44E09EC11586245CD" "8F1216619392E6B2C857C71EA78DD4D8" "61A482D9D1251C341D1D6205AFB2BFB5" "3DD1F272B5624FA61B020936745387CD" "F1F3EBC4435CBE6C6B323497098FDE9D" "61AA0CC87416235E706A71F73EC3C291" "D9ACA2EECD712DA40966DD251310AE94" "9713F69B2A32E42732A7F6669547D88A" "415B25C582FDBBF06C5EC5F5750053D4" "9F7ED68DED168C92F9C531828A", "0" }, { "FFFF6E7CD0386C94194C3C3DACFA7237" "CCF4E0829E2EBEAB59DE12CAE3305C9E" "576F837A42D9C13BB1D83E4DFD330B65" "76FD516B2AE9FBDD152F0A820C5DD18E" "D048D476EC791DC989D6D8C30B2B30FF" "C2A4ABAC082C672B38E138610B74CE0C" "30D1B378BE6FE0C44E09EC11586245CD" "8F1216619392E6B2C857C71EA78DD4D8" "61A482D9D1251C341D1D6205AFB2BFB5" "3DD1F272B5624FA61B020936745387CD" "F1F3EBC4435CBE6C6B323497098FDE9D" "61AA0CC87416235E706A71F73EC3C291" "D9ACA2EECD712DA40966DD251310AE94" "9713F69B2A32E42732A7F6669547D88A" "415B25C582FDBBF06C5EC5F5750053D4" "9F7ED68DED168C92F9C531828A", "FFFF6E7CD0386C94194C3C3DACFA7237" "CCF4E0829E2EBEAB59DE12CAE3305C9E" "576F837A42D9C13BB1D83E4DFD330B65" "76FD516B2AE9FBDD152F0A820C5DD18E" "D048D476EC791DC989D6D8C30B2B30FF" "C2A4ABAC082C672B38E138610B74CE0C" "30D1B378BE6FE0C44E09EC11586245CD" "8F1216619392E6B2C857C71EA78DD4D8" "61A482D9D1251C341D1D6205AFB2BFB5" "3DD1F272B5624FA61B020936745387CD" "F1F3EBC4435CBE6C6B323497098FDE9D" "61AA0CC87416235E706A71F73EC3C291" "D9ACA2EECD712DA40966DD251310AE94" "9713F69B2A32E42732A7F6669547D88A" "415B25C582FDBBF06C5EC5F5750053D4" "9F7ED68DED168C92F9C531828B", "FFFF6E7CD0386C94194C3C3DACFA7237" "CCF4E0829E2EBEAB59DE12CAE3305C9E" "576F837A42D9C13BB1D83E4DFD330B65" "76FD516B2AE9FBDD152F0A820C5DD18E" "D048D476EC791DC989D6D8C30B2B30FF" "C2A4ABAC082C672B38E138610B74CE0C" "30D1B378BE6FE0C44E09EC11586245CD" "8F1216619392E6B2C857C71EA78DD4D8" "61A482D9D1251C341D1D6205AFB2BFB5" "3DD1F272B5624FA61B020936745387CD" "F1F3EBC4435CBE6C6B323497098FDE9D" "61AA0CC87416235E706A71F73EC3C291" "D9ACA2EECD712DA40966DD251310AE94" "9713F69B2A32E42732A7F6669547D88A" "415B25C582FDBBF06C5EC5F5750053D4" "9F7ED68DED168C92F9C531828A" }, }; static bool test_4109_mod(ADBG_Case_t *c, TEEC_Session *s, const char *str_op, const char *str_n, const char *str_res) { bool res = false; uint32_t hop = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hn = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hc = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hres = TA_CRYPT_ARITH_INVALID_HANDLE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hop))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hn))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_res, hres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_op, hop))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_n, hn))) goto out; /* hc = hop mod hn */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_mod(c, s, hop, hn, hc))) goto out; /* check hc == hres */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hres, 0))) goto out; res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hop)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hn)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hc)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hres)); return res; } static void test_4109(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(test_4109_data); n++) { if (!ADBG_EXPECT_TRUE(c, test_4109_mod(c, &session, test_4109_data[n].op, test_4109_data[n].n, test_4109_data[n].res))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4109, test_4109, "Test TEE Internal API Arithmetical API - Mod"); static const char n2048str[] = "F9000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "000000000000000000000000000005C5"; static const struct { const char *op1; const char *op2; const char *n; const char *addres; const char *mulres; } test_4110_data[] = { { "0", "0", "2", "0", "0" }, { "1", "1", "2", "0", "1" }, { "2", "2", "9", "4", "4" }, { "123", "123", "200", "46", "C9" }, { "0", "123", "200", "123", "0" }, { "123", "0", "200", "123", "0" }, /* Testing some 2048 bit numbers */ { "F9000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" , "F9000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000001", n2048str, "F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3C", "2143D4" }, { "F9000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000", "5C5", n2048str, "0", "F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFDEBC2C" }, }; static bool test_4110_mod(ADBG_Case_t *c, TEEC_Session *s, const char *str_op1, const char *str_op2, const char *str_n, const char *str_add_res, const char *str_mul_res) { bool res = false; uint32_t hop1 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hop2 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hn = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hc = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t haddres = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hmulres = TA_CRYPT_ARITH_INVALID_HANDLE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hop1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hop2))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hn))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &haddres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hmulres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_add_res, haddres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_mul_res, hmulres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_op1, hop1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_op2, hop2))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_n, hn))) goto out; /* hc = (hop1 + hop2) mod hn */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_addmod(c, s, hop1, hop2, hn, hc))) goto out; /* check hc == haddres */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, haddres, 0))) goto out; /* hc = (haddres - hop2) mod hn */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_submod(c, s, haddres, hop2, hn, hc))) goto out; /* check hc == hop1 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hop1, 0))) goto out; /* hc = (hop1 * hop2) mod hn */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_mulmod(c, s, hop1, hop2, hn, hc))) goto out; /* check hc == hmulres */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hmulres, 0))) goto out; res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hop1)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hop2)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hn)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hc)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, haddres)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hmulres)); return res; } static bool test_4110_fmm(ADBG_Case_t *c, TEEC_Session *s, const char *str_op1, const char *str_op2, const char *str_n, const char *str_res) { bool res = false; uint32_t hop1 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hop2 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hn = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hres = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hfmmres = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hc = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hctx = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t nbitsize = 0; uint32_t n_is_odd = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_fmm_var(c, s, 2048, &hop1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_fmm_var(c, s, 2048, &hop2))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hn))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_fmm_var(c, s, 2048, &hfmmres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_n, hn))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_res, hres))) goto out; /* Check if FMM is applicable on this modulus */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_get_bit(c, s, hn, 0, &n_is_odd))) goto out; if (!n_is_odd) { res = true; goto out; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_get_bit_count(c, s, hn, &nbitsize))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_fmm_ctx(c, s, nbitsize, hn, &hctx))) goto out; /* hop1 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_op1, hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_to_fmm(c, s, hc, hn, hctx, hop1))) goto out; /* hop2 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_op2, hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_to_fmm(c, s, hc, hn, hctx, hop2))) goto out; /* hfmmres = hop1 * hop2 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_compute_fmm(c, s, hop1, hop2, hn, hctx, hfmmres))) goto out; /* hc = hfmmres mod hn*/ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_from_fmm(c, s, hfmmres, hn, hctx, hc))) goto out; /* check hc == hres */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hres, 0))) goto out; res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hop1)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hop2)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hn)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hres)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hfmmres)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hc)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hctx)); return res; } static void test_4110(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(test_4110_data); n++) { if (!ADBG_EXPECT_TRUE(c, test_4110_mod(c, &session, test_4110_data[n].op1, test_4110_data[n].op2, test_4110_data[n].n, test_4110_data[n].addres, test_4110_data[n].mulres))) { Do_ADBG_Log("n %zu", n); break; } if (!ADBG_EXPECT_TRUE(c, test_4110_fmm(c, &session, test_4110_data[n].op1, test_4110_data[n].op2, test_4110_data[n].n, test_4110_data[n].mulres))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4110, test_4110, "Test TEE Internal API Arithmetical API - Mod arith"); static const struct { const char *op; const char *n; const char *res; } test_4111_data[] = { { "2", "3", "2" }, { "3", "7", "5" }, { "5", "7", "3" }, { "7B", "FA1", "8E5" }, { "462D578CF0F88", "AB54A98CEB1F0AD3", "5ABBF22B54DBD000" }, { "7", n2048str, "B1DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6" "DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB" "6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6D" "B6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6" "DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB" "6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6D" "B6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6" "DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB" "6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6D" "B6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6" "DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB" "6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6D" "B6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6" "DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB" "6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6D" "B6DB6DB6DB6DB6DB6DB6DB6DB6DB71D6" }, }; static bool test_4111_invmod(ADBG_Case_t *c, TEEC_Session *s, const char *str_op, const char *str_n, const char *str_res) { bool res = false; uint32_t hop = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hn = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hc = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hres = TA_CRYPT_ARITH_INVALID_HANDLE; int32_t cres = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hop))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hn))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_res, hres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_op, hop))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_n, hn))) goto out; /* hc = hop^-1 mod hn */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_invmod(c, s, hop, hn, hc))) goto out; /* check hc == hres */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hres, 0))) goto out; /* hc = (hres * hop) mod hn */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_mulmod(c, s, hres, hop, hn, hc))) goto out; /* check hc == 1 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_cmp_s32(c, s, hc, 1, &cres))) goto out; if (!ADBG_EXPECT_COMPARE_SIGNED(c, cres, ==, 0)) goto out; /* hc = hres^-1 mod hn */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_invmod(c, s, hres, hn, hc))) goto out; /* check hc == hop */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hop, 0))) goto out; res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hop)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hn)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hc)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hres)); return res; } static void test_4111(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(test_4111_data); n++) { if (!ADBG_EXPECT_TRUE(c, test_4111_invmod(c, &session, test_4111_data[n].op, test_4111_data[n].n, test_4111_data[n].res))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4111, test_4111, "Test TEE Internal API Arithmetical API - Invmod"); static const struct { uint32_t level; int32_t res1; int32_t res2; const char *op; } test_4112_data[] = { /* Simple cases */ { 80, 0, 0, "0" }, { 80, 0, 0, "1" }, { 80, 1, -1, "2" }, { 80, 1, -1, "3" }, { 80, 1, -1, "17" }, { 80, 1, -1, "FA1" }, { 80, 0, 0, "FA0" }, /* * Testing large composites and the only allowed classification is * "composite", aka "0". */ { 80, 0, 0, "136233FDE5569" }, { 80, 0, 0, "177B96388FD94D5D7EC9AE513" }, { 80, 0, 0, "22770A7DC599BC90B2FF981CCB5CF057" "03344C8F3504189ED" }, { 80, 0, 0, "0002ECD53B2150542D1494A424D50322" "EBABBBD5DB89392A368D7759" }, { 80, 0, 0, "00000004C8971C2B6F7A8503AB80749E" "2BBA5BB6B6031BD43564DCA8003F0E3E" "54E677A0A4B1B6153662B3130C11C273" "C0F9408445B2ABB47D64153BEB48C154" "659FDFDEDC496C8EA81AA7B7CE2B2CB1" "AA7C8B407DE8C86F122607B2A226385D" "9432F6CB30B5E4DE033E3363D48A1865" "D9BC95DC7883D9DC9331691A17964979" }, { 80, 0, 0, "00038AFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFEA5C6D11EDD2905192" "C5429E6A6D796E89250BF563DA53D393" "25129B70435894B56E337D5866F0BEF6" "63D6C26DA889B69D4B1508ED63A17AFD" "8BC0C5BE09AC18B64B2B7D87279D32EB" "4F3375C10D58DF1F7CA2147A61CFA557" "235244D4A4700AB5953C4C6ED428EB5F" "09F07DAED46A995B8FFE48EFB93390C9" "60685A31987879F818CCE9B9816E13DE" "E4BEA5CC38C56A5D1983425DDD909C88" "463B447F" }, /* Large primes */ { 80, 1, -1, "000136A352B2C7A5" }, { 80, 1, -1, "000000022770A7DC599BC90B2FF981CC" "B5CF05703344C8F350418AAD" }, { 80, 1, -1, "000067E04F440C5FECCA2694B1A4AB4F" "CEC2D2B2D286FC93DD259D2B36A3A00D" "F3726A4D4DFA99195998D92F43DD7370" "B8C079E23072036F0C13F3F6ABA1D6DF" }, { 80, 1, -1, "000BC9F7E42CE74132EC6933DE1B8357" "CD2AEB9E4B8A5F26BD233D1E6F295555" "4D2CFA9760F3F69CCC52E8E428F68C37" "AD5BC70CDB12F4DCEF23CB101C36A2A7" }, { 80, 1, -1, "00000005233FE157B5B44102598513AE" "BB8876B0D1791769C8A1B0F36875D06F" "E26951C7372192C7B21CAB67ADF0D6FE" "1A718FB3FC4A51454DE87CD3F852005B" "AAEC35D5" }, { 80, 1, -1, "0000001A655954FBC4408E09FE97EB82" "5E0F096426B42317A36E53FF9608DD3F" "A661040245906334496987EFB14BEA5F" "7C050444C9B22A09EC76AF4EBDC609D8" "A90C05E9E5AF06829C542DFCF7E6B9DC" "0B065659C1816309CD6012C37F8CE649" "8DECF850F33943F0F83081406846D306" "22E0BCE697E612FC1F7A5D902280D6E0" "3009E585" }, }; static bool test_4112_is_prime(ADBG_Case_t *c, TEEC_Session *s, uint32_t conf_level, int32_t res1, int32_t res2, const char *str_val) { bool res = false; uint32_t hop = TA_CRYPT_ARITH_INVALID_HANDLE; int32_t pres = 11; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hop))) return res; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_val, hop))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_is_prime(c, s, hop, conf_level, &pres))) goto out; if (!ADBG_EXPECT_TRUE(c, pres == res1 || pres == res2)) { Do_ADBG_Log("Unexpected prime clasification %" PRId32 ", expected %" PRId32 " or %" PRId32, pres, res1, res2); goto out; } res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hop)); return res; } static void test_4112(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(test_4112_data); n++) { if (!ADBG_EXPECT_TRUE(c, test_4112_is_prime(c, &session, test_4112_data[n].level, test_4112_data[n].res1, test_4112_data[n].res2, test_4112_data[n].op))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4112, test_4112, "Test TEE Internal API Arithmetical API - Is prime"); static const struct { const char *res; size_t bits; const char *op; } test_4113_data[] = { { "0", 31, "7FFFFFFF" }, { "0", 65, "7FFFFFFF" }, { "0", 1, "0" }, { "-1",1, "-2" }, { "1", 0, "1" }, { "1", 1, "2" }, { "1", 2, "4" }, { "1", 3, "8" }, { "1", 4, "10" }, { "1", 5, "20" }, { "1", 6, "40" }, { "1", 7, "80" }, { "1", 8, "100" }, { "1", 9, "200" }, { "1", 10, "400" }, { "1", 11, "800" }, { "1", 12, "1000" }, { "1", 13, "2000" }, { "1", 14, "4000" }, { "1", 15, "8000" }, { "1", 16, "10000" }, { "1", 17, "20000" }, { "1", 18, "40000" }, { "1", 19, "80000" }, { "1", 20, "100000" }, { "1", 21, "200000" }, { "1", 22, "400000" }, { "1", 23, "800000" }, { "1", 24, "1000000" }, { "1", 25, "2000000" }, { "1", 26, "4000000" }, { "1", 27, "8000000" }, { "1", 28, "10000000" }, { "1", 29, "20000000" }, { "1", 30, "40000000" }, { "1", 31, "80000000" }, { "1", 32, "100000000" }, { "1", 64, "10000000000000000" }, { "FFFFFFFF", 64, "FFFFFFFF0000000000000000" }, { "1111FFFF0000", 64," 1111FFFF00000000000000000000" }, { "1", 33, "200000000" }, { "1", 65, "20000000000000000" }, { "FFFFFFFF", 65, "1FFFFFFFE0000000000000000" }, { "24B0D975EC8FCC8E1D54CA4BF7ACFC4534F04", 81, "4961B2EBD91F991C3AA99497EF59F88A69E08AD5C340167793C3CC32F" }, }; static bool test_4113_shift_right(ADBG_Case_t *c, TEEC_Session *s, const char *str_op, size_t bits, const char *str_res) { bool res = false; uint32_t hop = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hc = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hres = TA_CRYPT_ARITH_INVALID_HANDLE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hop))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hc))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_res, hres))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, str_op, hop))) goto out; /* hc = hop shift_right bits */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_shift_right(c, s, hop, bits, hc))) goto out; /* check hc == hres */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hc, hres, 0))) goto out; res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hop)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hc)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hres)); return res; } static void test_4113(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(test_4113_data); n++) { if (!ADBG_EXPECT_TRUE(c, test_4113_shift_right(c, &session, test_4113_data[n].op, test_4113_data[n].bits, test_4113_data[n].res))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4113, test_4113, "Test TEE Internal API Arithmetical API - shift right"); static const struct { const char *strx; const char *stry; } test_4114_data[] = { { "0", "0" }, { "0", "123" }, { "1", "1" }, { "1", "-1" }, { "2", "2" }, { "-2", "2" }, { "2", "4" }, { "-2", "-4" }, { "400", "800" }, { "261", "2B5" }, { "F", "A" }, { "C", "13" }, { "165D662", "1664FEA" }, { "AB59CDFD83CE2B24", "4961BF04008953A7F9567AAFBA94D4AF55F473F14FD68AA022982F0FE" }, /* two large primes */ { "5D0A380DC40EDE5E036FA051FC6D7F93", "3277FD425328576569AFB2EAC6B1430578099CA8ADA4BC73" }, /* two large powers of 2 */ { "20000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "0", "40000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "000000000000000000000" }, }; static bool test_4114_gcd(ADBG_Case_t *c, TEEC_Session *s, const char *strx, const char *stry) { bool res = false; uint32_t hx = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hy = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t ha = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hb = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hgcd = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t ht1 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t ht2 = TA_CRYPT_ARITH_INVALID_HANDLE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hx))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hy))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &ha))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hb))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &hgcd))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &ht1))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, s, 2048, &ht2))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, strx, hx))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, convert_from_string(c, s, stry, hy))) goto out; /* (hgcd, a, b) = ExtendedGCD(x, y) */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_compute_egcd(c, s, hx, hy, ha, hb, hgcd))) goto out; /* ht1 = GCD(x, y) */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_compute_gcd(c, s, hx, hy, ht1))) goto out; /* check hgcd == ht1 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hgcd, ht1, 0))) goto out; /* ht1 = a * x */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_mul(c, s, ha, hx, ht1))) goto out; /* ht2 = b * y */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_mul(c, s, hb, hy, ht2))) goto out; /* ht1 = ht1 + ht2 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_add(c, s, ht1, ht2, ht1))) goto out; /* check hgcd == ht1 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, compare_handle(c, s, hgcd, ht1, 0))) goto out; res = true; out: ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hx)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hy)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, ha)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hb)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, hgcd)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, ht1)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, s, ht2)); return res; } static void test_4114(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; for (n = 0; n < ARRAY_SIZE(test_4114_data); n++) { if (!ADBG_EXPECT_TRUE(c, test_4114_gcd(c, &session, test_4114_data[n].strx, test_4114_data[n].stry))) { Do_ADBG_Log("n %zu", n); break; } } TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4114, test_4114, "Test TEE Internal API Arithmetical API - GCD"); static void test_4115(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; TEEC_Session session = { }; uint32_t ret_orig = 0; int32_t cres = 0; size_t n = 0; uint32_t h1 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t h2 = TA_CRYPT_ARITH_INVALID_HANDLE; static const char *data[] = { "1", "-1", "123", "-123", "123456789123456789", "-123456789123456789", }; res = xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &h1)) || !ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &h2))) goto out; for (n = 0; n < ARRAY_SIZE(data); n++) { const char *d = data[n]; res = convert_from_string(c, &session, d, h1); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; if (*d == '-') d++; res = convert_from_string(c, &session, d, h2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_cmp_s32(c, &session, h1, 0, &cres); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; if (n % 2) { if (!ADBG_EXPECT_COMPARE_SIGNED(c, cres, <, 0)) goto out; } else { if (!ADBG_EXPECT_COMPARE_SIGNED(c, cres, >, 0)) goto out; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_abs(c, &session, h1, h1))) goto out; res = cmd_cmp_s32(c, &session, h1, 0, &cres); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_COMPARE_SIGNED(c, cres, >, 0)) goto out; res = cmd_cmp(c, &session, h1, h2, &cres); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_COMPARE_SIGNED(c, cres, ==, 0)) goto out; } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4115, test_4115, "Test TEE Internal API Arithmetical API - Abs"); static void test_4116(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; TEEC_Session session = { }; uint32_t ret_orig = 0; uint32_t val = 0; size_t n = 0; uint32_t h = TA_CRYPT_ARITH_INVALID_HANDLE; static const uint32_t bit_idx[] = { 1, 4, 9, 113, 1013, 1023 }; res = xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &h))) goto out; for (n = 0; n < ARRAY_SIZE(bit_idx); n++) { res = cmd_get_bit(c, &session, h, bit_idx[n], &val); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_COMPARE_SIGNED(c, val, ==, 0)) goto out; res = cmd_set_bit(c, &session, h, bit_idx[n], 1); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_get_bit(c, &session, h, bit_idx[n], &val); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_COMPARE_SIGNED(c, val, ==, 1)) goto out; res = cmd_set_bit(c, &session, h, bit_idx[n], 0); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_get_bit(c, &session, h, bit_idx[n], &val); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res) || !ADBG_EXPECT_COMPARE_SIGNED(c, val, ==, 0)) goto out; } out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4116, test_4116, "Test TEE Internal API Arithmetical API - Get/Set Bit"); static void test_4117(ADBG_Case_t *c) { TEEC_Result res = TEEC_SUCCESS; TEEC_Session session = { }; uint32_t ret_orig = 0; size_t n = 0; uint32_t hb = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t he = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hm = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hr = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hr2 = TA_CRYPT_ARITH_INVALID_HANDLE; uint32_t hc = TA_CRYPT_ARITH_INVALID_HANDLE; static const struct { const char *base; const char *exp; const char *mod; const char *result; } data[] = { { .base = "4", .exp = "D" /* 13 */, .mod = "1F1" /* 497 */, .result = "1BD" /* 445 */ }, { .base = "109fe45714866e56fdd4ad9b6b686df27224afb7868cf4f0" "cbb794526932853cbf0beea61594166654d13cd9fe0d9da5" "94a97ee20230f12fb5434de73fb4f8102725a01622b31b1e" "a42e3a265019039ac1df31869bd97930d792fb72cdaa971d" "8a8015af", .exp = "33ae3764fd06a00cdc3cba5c45dc79a9edb4e67e4d057cc7" "4139d531c25190d111775fc4a0f4439b8b1930bbd766e7b4" "6f170601f316c8a18ff8d5cb5ca5581f168345d101edb462" "b7d93b7c520ccb8fb276b447a63d869203cc11f67a1122dc" "4da034218de85e39", .mod = "11a9351d2d32ccd568e75bf8b4ebbb2a36be691b55832eda" "c662ff79803df8af525fba453068be16ac3920bcc1b468f8" "f7fe786e0fa4ecbabcad31e5e3b05def802eb8600deaf11e" "f452487db878df20a80606e4bb6a163b83895d034cc8b53d" "bcd005be42ffdd2ce99bed06089a0b79d", .result = "37880b547b41bda303bddda307eefe24b4aedf076c9b814b" "903aaf328a10825c7e259a20afc6b70b487bb21a6d32d0ee" "98a0b9f42ff812c901e2f79237fe3e00856992dd69d93ebc" "0664c75863829621751b0ac35a8ae8a0965841607d3099b8" "e0ed24442749ba09acbcb165598dcd40" }, }; res = xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &hb)) || !ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &he)) || !ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &hm)) || !ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &hr)) || !ADBG_EXPECT_TEEC_SUCCESS(c, cmd_new_var(c, &session, 1024, &hr2))) goto out; for (n = 0; n < ARRAY_SIZE(data); n++) { res = convert_from_string(c, &session, data[n].base, hb); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = convert_from_string(c, &session, data[n].exp, he); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = convert_from_string(c, &session, data[n].mod, hm); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = convert_from_string(c, &session, data[n].result, hr2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_new_fmm_ctx(c, &session, 1024, hm, &hc); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_expmod(c, &session, hb, he, hm, hc, hr); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = compare_handle(c, &session, hr, hr2, 0); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; res = cmd_free_handle(c, &session, hc); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; } ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, hb)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, he)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, hm)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, hr)); ADBG_EXPECT_TEEC_SUCCESS(c, cmd_free_handle(c, &session, hr2)); out: TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 4117, test_4117, "Test TEE Internal API Arithmetical API - ExpMod"); optee_test-4.3.0/host/xtest/regression_5000.c000066400000000000000000000310531464074351400210170ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #include #include #include #include #include #include "xtest_test.h" #include "xtest_helpers.h" #include "tee_api_defines.h" #include "tee_client_api.h" #define OFFSET0 0 #define PARAM_0 0 #define PARAM_1 1 #define PARAM_2 2 #define PARAM_3 3 struct xtest_session { ADBG_Case_t *c; TEEC_Session session; TEEC_Context context; }; /* Compares two memories and checks if their length and content is the same */ #define EXPECT_SHARED_MEM_BUFFER(c, exp_buf, exp_blen, op, param_num, shrm) \ do { \ if ((exp_buf) == NULL) { \ ADBG_EXPECT((c), exp_blen, \ (op)->params[(param_num)].memref.size); \ } else { \ ADBG_EXPECT_COMPARE_POINTER((c), (shrm), ==, \ (op)->params[(param_num)].memref.parent); \ ADBG_EXPECT_BUFFER((c), (exp_buf), (exp_blen), \ (shrm)->buffer, \ (op)->params[(param_num)].memref.size); \ } \ } while (0) /* * Compares the content of the memory cells in OP with the expected value * contained. */ #define EXPECT_OP_TMP_MEM_BUFFER(c, exp_buf, exp_blen, op, param_num, buf) \ do { \ if ((exp_buf) == NULL) { \ ADBG_EXPECT((c), exp_blen, \ (op)->params[(param_num)].tmpref.size); \ } else { \ ADBG_EXPECT_COMPARE_POINTER((c), (buf), ==, \ (op)->params[(param_num)].tmpref.buffer); \ ADBG_EXPECT_BUFFER((c), (exp_buf), (exp_blen), \ (buf), \ (op)->params[(param_num)].memref.size); \ } \ } while (0) /* Registers the TEEC_SharedMemory to the TEE. */ static TEEC_Result RegisterSharedMemory(TEEC_Context *ctx, TEEC_SharedMemory *shm, size_t size, uint32_t flags) { shm->flags = flags; shm->size = size; return TEEC_RegisterSharedMemory(ctx, shm); } /* Allocates shared memory inside of the TEE. */ static TEEC_Result AllocateSharedMemory(TEEC_Context *ctx, TEEC_SharedMemory *shm, size_t size, uint32_t flags) { shm->flags = flags; shm->size = size; return TEEC_AllocateSharedMemory(ctx, shm); } static void CloseSession_null(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "CloseSession_null"); { /* In reality doesn't test anything. */ TEEC_CloseSession(NULL); } Do_ADBG_EndSubCase(cs->c, "CloseSession_null"); } static void Allocate_In(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Allocate_In"); { TEEC_SharedMemory shm = { }; size_t size = 1024; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, AllocateSharedMemory(&cs->context, &shm, size, TEEC_MEM_INPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Allocate_In"); } static void Allocate_out_of_memory(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Allocate_out_of_memory"); { TEEC_SharedMemory shm = { }; size_t SIZE_OVER_MEMORY_CAPACITY = SIZE_MAX; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; ADBG_EXPECT_TEEC_RESULT(cs->c, TEEC_ERROR_OUT_OF_MEMORY, AllocateSharedMemory(&cs->context, &shm, SIZE_OVER_MEMORY_CAPACITY, TEEC_MEM_INPUT)); TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Allocate_out_of_memory"); } static void OpenSession_error_notExistingTA(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "OpenSession_error_notExistingTA"); { TEEC_UUID NONEXISTING_TA_UUID = { 0x534D1192, 0x6143, 0x234C, { 0x47, 0x55, 0x53, 0x52, 0x54, 0x4F, 0x4F, 0x59 } }; uint32_t ret_orig = 0; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; ADBG_EXPECT_COMPARE_UNSIGNED(cs->c, TEEC_SUCCESS, !=, TEEC_OpenSession(&cs->context, &cs->session, &NONEXISTING_TA_UUID, TEEC_LOGIN_PUBLIC, NULL, NULL, &ret_orig)); ADBG_EXPECT_COMPARE_UNSIGNED(cs->c, TEEC_ORIGIN_TRUSTED_APP, !=, ret_orig); TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "OpenSession_error_notExistingTA"); } static void Allocate_InOut(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Allocate_InOut"); { TEEC_SharedMemory shm = { }; uint8_t val[] = { 54, 76, 98, 32 }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, AllocateSharedMemory(&cs->context, &shm, sizeof(val), TEEC_MEM_INPUT | TEEC_MEM_OUTPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Allocate_InOut"); } static void Register_In(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Register_In"); { TEEC_SharedMemory shm = { }; uint8_t val[] = { 32, 65, 43, 21, 98 }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; shm.buffer = val; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, RegisterSharedMemory(&cs->context, &shm, sizeof(val), TEEC_MEM_INPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Register_In"); } static void Register_notZeroLength_Out(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Register_notZeroLength_Out"); { TEEC_SharedMemory shm = { }; uint8_t val[] = { 56, 67, 78, 99 }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; shm.buffer = val; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, RegisterSharedMemory(&cs->context, &shm, sizeof(val), TEEC_MEM_OUTPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Register_notZeroLength_Out"); } static void Register_InOut(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Register_InOut"); { TEEC_SharedMemory shm = { }; uint8_t val[] = { 54, 76, 23, 98, 255, 23, 86 }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; shm.buffer = val; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, RegisterSharedMemory(&cs->context, &shm, sizeof(val), TEEC_MEM_INPUT | TEEC_MEM_OUTPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Register_InOut"); } static void Register_zeroLength_Out(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Register_zeroLength_Out"); { uint8_t val[] = { 65, 76, 98, 32 }; TEEC_SharedMemory shm = { }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; shm.buffer = val; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, RegisterSharedMemory(&cs->context, &shm, 0, TEEC_MEM_OUTPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Register_zeroLength_Out"); } static void Allocate_Out(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Allocate_Out"); { TEEC_SharedMemory shm = { }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, AllocateSharedMemory(&cs->context, &shm, 0, TEEC_MEM_OUTPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Allocate_Out"); } static void FinalizeContext_null(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "FinalizeContext_null"); { TEEC_FinalizeContext(NULL); } Do_ADBG_EndSubCase(cs->c, "FinalizeContext_null"); } static void InitializeContext_NotExistingTEE(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "InitializeContext_NotExistingTEE"); { if (!ADBG_EXPECT_COMPARE_UNSIGNED(cs->c, TEEC_SUCCESS, !=, TEEC_InitializeContext("Invalid TEE name", &cs->context))) TEEC_FinalizeContext(&cs->context); } Do_ADBG_EndSubCase(cs->c, "InitializeContext_NotExistingTEE"); } static void AllocateThenRegister_SameMemory(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "AllocateThenRegister_SameMemory"); { TEEC_SharedMemory shm = { }; size_t size_allocation = 32; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, AllocateSharedMemory(&cs->context, &shm, size_allocation, TEEC_MEM_INPUT))) goto out_final; ADBG_EXPECT_TEEC_SUCCESS(cs->c, RegisterSharedMemory(&cs->context, &shm, size_allocation, TEEC_MEM_INPUT)); TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "AllocateThenRegister_SameMemory"); } static void AllocateSameMemory_twice(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "AllocateSameMemory_twice"); { TEEC_SharedMemory shm = { }; size_t size_allocation = 32; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, AllocateSharedMemory(&cs->context, &shm, size_allocation, TEEC_MEM_INPUT))) goto out_final; ADBG_EXPECT_TEEC_SUCCESS(cs->c, AllocateSharedMemory(&cs->context, &shm, size_allocation, TEEC_MEM_INPUT)); TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "AllocateSameMemory_twice"); } static void RegisterSameMemory_twice(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "RegisterSameMemory_twice"); { uint8_t val[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; TEEC_SharedMemory shm = { }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; shm.buffer = val; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, RegisterSharedMemory(&cs->context, &shm, sizeof(val), TEEC_MEM_INPUT))) goto out_final; ADBG_EXPECT_TEEC_SUCCESS(cs->c, RegisterSharedMemory(&cs->context, &shm, sizeof(val), TEEC_MEM_INPUT)); TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "RegisterSameMemory_twice"); } #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif static void Allocate_sharedMemory_32k(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Allocate_sharedMemory_32k"); { size_t size = MIN(32 * 1024, TEEC_CONFIG_SHAREDMEM_MAX_SIZE); TEEC_SharedMemory shm = { }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, AllocateSharedMemory(&cs->context, &shm, size, TEEC_MEM_INPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Allocate_sharedMemory_32k"); } #define SHM_32K_SIZE MIN(32 * 1024, TEEC_CONFIG_SHAREDMEM_MAX_SIZE) static void Register_sharedMemory_32k(struct xtest_session *cs) { Do_ADBG_BeginSubCase(cs->c, "Register_sharedMemory_32k"); { uint8_t val[SHM_32K_SIZE] = { }; TEEC_SharedMemory shm = { }; if (!ADBG_EXPECT(cs->c, TEEC_SUCCESS, TEEC_InitializeContext(xtest_tee_name, &cs->context))) goto out; shm.buffer = val; if (!ADBG_EXPECT_TEEC_SUCCESS(cs->c, RegisterSharedMemory(&cs->context, &shm, SHM_32K_SIZE, TEEC_MEM_INPUT))) goto out_final; TEEC_ReleaseSharedMemory(&shm); out_final: TEEC_FinalizeContext(&cs->context); } out: Do_ADBG_EndSubCase(cs->c, "Register_sharedMemory_32k"); } static void xtest_teec_TEE(ADBG_Case_t *c) { struct xtest_session connection = { c }; CloseSession_null(&connection); Allocate_In(&connection); Allocate_out_of_memory(&connection); OpenSession_error_notExistingTA(&connection); Allocate_InOut(&connection); Register_In(&connection); Register_notZeroLength_Out(&connection); Register_InOut(&connection); Register_zeroLength_Out(&connection); Allocate_Out(&connection); FinalizeContext_null(&connection); InitializeContext_NotExistingTEE(&connection); AllocateThenRegister_SameMemory(&connection); AllocateSameMemory_twice(&connection); RegisterSameMemory_twice(&connection); Allocate_sharedMemory_32k(&connection); Register_sharedMemory_32k(&connection); } ADBG_CASE_DEFINE(regression, 5006, xtest_teec_TEE, "Tests for Global platform TEEC"); optee_test-4.3.0/host/xtest/regression_6000.c000066400000000000000000001720751464074351400210320ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #define DEFINE_TEST_MULTIPLE_STORAGE_IDS(test_name) \ static void test_name(ADBG_Case_t *c) \ { \ size_t i = 0; \ \ if (init_storage_info()) { \ Do_ADBG_Log("init_storage_info() failed"); \ return; \ } \ for (i = 0; i < ARRAY_SIZE(storage_info); i++) { \ uint32_t id = storage_info[i].id; \ \ if (!storage_info[i].available) \ continue; \ Do_ADBG_BeginSubCase(c, "Storage id: %08x", id); \ test_name##_single(c, id); \ Do_ADBG_EndSubCase(c, "Storage id: %08x", id); \ } \ } static uint8_t file_00[] = { 0x00, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96, 0xF0, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92, 0xE9, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6, 0xF0, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x8E }; static uint8_t file_01[] = { 0x01, 0x00 }; static uint8_t file_02[] = { 0x02, 0x11, 0x02 }; static uint8_t file_03[] = { 0x03, 0x13, 0x03 }; static uint8_t file_04[] = { 0x00, 0x01, 0x02 }; static uint8_t data_00[] = { 0x00, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96, 0x00, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92, 0x00, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6, 0x00, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x00 }; static uint8_t data_01[] = { 0x01, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96, 0x01, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92, 0x01, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6, 0x01, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x01 }; static TEEC_Result fs_open(TEEC_Session *sess, void *id, uint32_t id_size, uint32_t flags, uint32_t *obj, uint32_t storage_id) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t org = 0; op.params[0].tmpref.buffer = id; op.params[0].tmpref.size = id_size; op.params[1].value.a = flags; op.params[1].value.b = 0; op.params[2].value.a = storage_id; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INOUT, TEEC_VALUE_INPUT, TEEC_NONE); res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_OPEN, &op, &org); if (res == TEEC_SUCCESS) *obj = op.params[1].value.b; return res; } static TEEC_Result fs_create(TEEC_Session *sess, void *id, uint32_t id_size, uint32_t flags, uint32_t attr, void *data, uint32_t data_size, uint32_t *obj, uint32_t storage_id) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t org = 0; op.params[0].tmpref.buffer = id; op.params[0].tmpref.size = id_size; op.params[1].value.a = flags; op.params[1].value.b = 0; op.params[2].value.a = attr; op.params[2].value.b = storage_id; op.params[3].tmpref.buffer = data; op.params[3].tmpref.size = data_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INOUT, TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT); res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE, &op, &org); if (res == TEEC_SUCCESS) *obj = op.params[1].value.b; return res; } static TEEC_Result fs_create_overwrite(TEEC_Session *sess, void *id, uint32_t id_size, uint32_t storage_id) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t org = 0; op.params[0].tmpref.buffer = id; op.params[0].tmpref.size = id_size; op.params[1].value.a = storage_id; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE_OVERWRITE, &op, &org); return res; } static TEEC_Result fs_close(TEEC_Session *sess, uint32_t obj) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CLOSE, &op, &org); } static TEEC_Result fs_read(TEEC_Session *sess, uint32_t obj, void *data, uint32_t data_size, uint32_t *count) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].tmpref.buffer = data; op.params[0].tmpref.size = data_size; op.params[1].value.a = obj; op.params[1].value.b = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_VALUE_INOUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_READ, &op, &org); if (res == TEEC_SUCCESS) *count = op.params[1].value.b; return res; } static TEEC_Result fs_write(TEEC_Session *sess, uint32_t obj, void *data, uint32_t data_size) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].tmpref.buffer = data; op.params[0].tmpref.size = data_size; op.params[1].value.a = obj; op.params[1].value.b = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_WRITE, &op, &org); } static TEEC_Result fs_seek(TEEC_Session *sess, uint32_t obj, int32_t offset, int32_t whence) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj; op.params[0].value.b = *(uint32_t *)&offset; op.params[1].value.a = whence; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INOUT, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_SEEK, &op, &org); } static TEEC_Result fs_unlink(TEEC_Session *sess, uint32_t obj) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_UNLINK, &op, &org); } static TEEC_Result fs_trunc(TEEC_Session *sess, uint32_t obj, uint32_t len) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj; op.params[0].value.b = len; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_TRUNC, &op, &org); } static TEEC_Result fs_rename(TEEC_Session *sess, uint32_t obj, void *id, uint32_t id_size) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj; op.params[1].tmpref.buffer = id; op.params[1].tmpref.size = id_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RENAME, &op, &org); } static TEEC_Result fs_alloc_enum(TEEC_Session *sess, uint32_t *e) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_ALLOC_ENUM, &op, &org); if (res == TEEC_SUCCESS) *e = op.params[0].value.a; return res; } static TEEC_Result fs_reset_enum(TEEC_Session *sess, uint32_t e) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].value.a = e; res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RESET_ENUM, &op, &org); return res; } static TEEC_Result fs_free_enum(TEEC_Session *sess, uint32_t e) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].value.a = e; return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_FREE_ENUM, &op, &org); } static TEEC_Result fs_start_enum(TEEC_Session *sess, uint32_t e, uint32_t storage_id) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].value.a = e; op.params[0].value.b = storage_id; return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_START_ENUM, &op, &org); } static TEEC_Result fs_next_enum(TEEC_Session *sess, uint32_t e, void *obj_info, size_t info_size, void *id, uint32_t id_size) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); if (obj_info && info_size) op.paramTypes |= (TEEC_MEMREF_TEMP_OUTPUT << 4); op.params[0].value.a = e; op.params[1].tmpref.buffer = obj_info; op.params[1].tmpref.size = info_size; op.params[2].tmpref.buffer = id; op.params[2].tmpref.size = id_size; return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_NEXT_ENUM, &op, &org); } static TEEC_Result fs_restrict_usage(TEEC_Session *sess, uint32_t obj, uint32_t obj_usage) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj; op.params[0].value.b = obj_usage; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RESTRICT_USAGE, &op, &org); } static TEEC_Result fs_alloc_obj(TEEC_Session *sess, uint32_t obj_type, uint32_t max_key_size, uint32_t *obj) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj_type; op.params[0].value.b = max_key_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_ALLOC_OBJ, &op, &org); *obj = op.params[1].value.a; return res; } static TEEC_Result fs_free_obj(TEEC_Session *sess, uint32_t obj) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_FREE_OBJ, &op, &org); } static TEEC_Result fs_reset_obj(TEEC_Session *sess, uint32_t obj) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t org = 0; op.params[0].value.a = obj; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RESET_OBJ, &op, &org); } static TEEC_Result fs_get_obj_info(TEEC_Session *sess, uint32_t obj, TEE_ObjectInfo *obj_info) { TEEC_Result res = TEEC_SUCCESS; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; struct ta_storage_obj_info oi = { }; uint32_t org = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); op.params[0].value.a = obj; op.params[1].tmpref.buffer = &oi; op.params[1].tmpref.size = sizeof(oi); res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_GET_OBJ_INFO, &op, &org); if (!res) { obj_info->objectType = oi.object_type; obj_info->objectSize = oi.object_size; obj_info->maxObjectSize = oi.max_object_size; obj_info->objectUsage = oi.object_usage; obj_info->dataSize = oi.data_size; obj_info->dataPosition = oi.data_position; obj_info->handleFlags = oi.handle_flags; } return res; } /* Record availability of all secure storage types at runtime */ struct storage_info { uint32_t id; bool available; }; static struct storage_info storage_info[] = { { .id = TEE_STORAGE_PRIVATE }, { .id = TEE_STORAGE_PRIVATE_REE }, { .id = TEE_STORAGE_PRIVATE_RPMB }, }; static TEEC_Result check_storage_available(uint32_t id, bool *avail) { TEE_Result res = TEEC_SUCCESS; TEEC_Session sess = { }; uint32_t obj = 0; uint32_t orig = 0; char name[] = "xtest_storage_test"; res = xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig); if (res != TEEC_SUCCESS) return res; res = fs_create(&sess, name, sizeof(name), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, NULL, 0, &obj, id); switch (res) { case TEEC_SUCCESS: *avail = true; res = fs_unlink(&sess, obj); if (res != TEEC_SUCCESS) Do_ADBG_Log("fs_unlink() failed"); break; case TEE_ERROR_ITEM_NOT_FOUND: case TEE_ERROR_STORAGE_NOT_AVAILABLE: case TEE_ERROR_STORAGE_NOT_AVAILABLE_2: *avail = false; res = TEEC_SUCCESS; break; default: res = TEE_ERROR_GENERIC; break; } TEEC_CloseSession(&sess); return res; } static TEE_Result init_storage_info(void) { TEE_Result res = TEE_SUCCESS; static bool done = false; size_t i = 0; if (done) return TEE_SUCCESS; for (i = 0; i < ARRAY_SIZE(storage_info); i++) { res = check_storage_available(storage_info[i].id, &storage_info[i].available); if (res) return res; } done = true; return TEE_SUCCESS; } static bool is_storage_available(uint32_t id) { size_t i = 0; if (init_storage_info()) return false; for (i = 0; i < ARRAY_SIZE(storage_info); i++) { if (id == storage_info[i].id) return storage_info[i].available; } return false; } #ifndef TEE_STORAGE_ILLEGAL_VALUE /* GP TEE Internal Core API >= 1.2 table 5-2 */ #define TEE_STORAGE_ILLEGAL_VALUE 0x7FFFFFFF #endif static uint32_t fs_id_for_tee_storage_private(void) { /* * Assumes that REE FS is preferred over RPMB FS at compile time in * optee_os */ if (is_storage_available(TEE_STORAGE_PRIVATE_REE)) return TEE_STORAGE_PRIVATE_REE; if (is_storage_available(TEE_STORAGE_PRIVATE_RPMB)) return TEE_STORAGE_PRIVATE_RPMB; return TEE_STORAGE_ILLEGAL_VALUE; } static uint32_t real_id_for(uint32_t id) { if (id == TEE_STORAGE_PRIVATE) return fs_id_for_tee_storage_private(); return id; } static bool storage_is(uint32_t id1, uint32_t id2) { return (real_id_for(id1) == real_id_for(id2)); } /* trunc */ static void test_truncate_file_length(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint8_t out[10] = { }; uint32_t count = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; /* create */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; /* trunc */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_trunc(&sess, obj, 10))) goto exit; /* seek */ if (!ADBG_EXPECT_TEEC_SUCCESS( c, fs_seek(&sess, obj, 5, TEE_DATA_SEEK_SET))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; /* check buffer */ (void)ADBG_EXPECT_BUFFER(c, &data_00[5], 5, out, count); /* close */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; /* open */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; /* seek */ if (!ADBG_EXPECT_TEEC_SUCCESS( c, fs_seek(&sess, obj, 5, TEE_DATA_SEEK_SET))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; /* check buffer */ (void)ADBG_EXPECT_BUFFER(c, &data_00[5], 5, out, count); /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } /* extend */ static void test_extend_file_length(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint8_t out[10] = { }; uint8_t expect[10] = { }; uint32_t count = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; /* create */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; /* extend */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_trunc(&sess, obj, 40))) goto exit; /* seek */ if (!ADBG_EXPECT_TEEC_SUCCESS( c, fs_seek(&sess, obj, 30, TEE_DATA_SEEK_SET))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; /* check buffer */ expect[0] = data_00[30]; expect[1] = data_00[31]; (void)ADBG_EXPECT_BUFFER(c, &expect[0], 10, out, count); /* close */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; /* open */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; /* seek */ if (!ADBG_EXPECT_TEEC_SUCCESS( c, fs_seek(&sess, obj, 30, TEE_DATA_SEEK_SET))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; /* check buffer */ expect[0] = data_00[30]; expect[1] = data_00[31]; (void)ADBG_EXPECT_BUFFER(c, &expect[0], 10, out, count); /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } /* file hole */ static void test_file_hole(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint8_t out[10] = { }; uint8_t expect[10] = { }; uint32_t count = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; /* create */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; /* seek */ if (!ADBG_EXPECT_TEEC_SUCCESS( c, fs_seek(&sess, obj, 80, TEE_DATA_SEEK_SET))) goto exit; /* write */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_write(&sess, obj, data_00, sizeof(data_00)))) goto exit; /* seek */ if (!ADBG_EXPECT_TEEC_SUCCESS( c, fs_seek(&sess, obj, 74, TEE_DATA_SEEK_SET))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; /* check buffer */ expect[6] = data_00[0]; expect[7] = data_00[1]; expect[8] = data_00[2]; expect[9] = data_00[3]; (void)ADBG_EXPECT_BUFFER(c, &expect[0], 10, out, count); /* close */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; /* open */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; /* seek */ if (!ADBG_EXPECT_TEEC_SUCCESS( c, fs_seek(&sess, obj, 74, TEE_DATA_SEEK_SET))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; /* check buffer */ expect[6] = data_00[0]; expect[7] = data_00[1]; expect[8] = data_00[2]; expect[9] = data_00[3]; (void)ADBG_EXPECT_BUFFER(c, &expect[0], 10, out, count); /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } /* create */ static void xtest_tee_test_6001_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, sizeof(file_00), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, 0, TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, NULL, 0, TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6001) ADBG_CASE_DEFINE(regression, 6001, xtest_tee_test_6001, "Test TEE_CreatePersistentObject"); /* open */ static void xtest_tee_test_6002_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, 0, TEE_DATA_FLAG_ACCESS_WRITE, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, 0, TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, NULL, 0, TEE_DATA_FLAG_ACCESS_WRITE, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, NULL, 0, TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6002) ADBG_CASE_DEFINE(regression, 6002, xtest_tee_test_6002, "Test TEE_OpenPersistentObject"); /* read */ static void xtest_tee_test_6003_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint8_t out[10] = { }; uint32_t count = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01, sizeof(data_01), &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; (void)ADBG_EXPECT_BUFFER(c, data_01, 10, out, count); /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6003) ADBG_CASE_DEFINE(regression, 6003, xtest_tee_test_6003, "Test TEE_ReadObjectData"); /* write */ static void xtest_tee_test_6004_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint8_t out[10] = { }; uint32_t count = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; /* create */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01, sizeof(data_01), &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; /* write new data */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_WRITE, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_write(&sess, obj, data_00, sizeof(data_00)))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count); /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6004) ADBG_CASE_DEFINE(regression, 6004, xtest_tee_test_6004, "Test TEE_WriteObjectData"); /* seek */ static void xtest_tee_test_6005_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint8_t out[10] = { }; uint32_t count = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; /* create */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; /* seek */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_seek(&sess, obj, 10, TEE_DATA_SEEK_SET))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; (void)ADBG_EXPECT_BUFFER(c, &data_00[10], 10, out, count); /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6005) ADBG_CASE_DEFINE(regression, 6005, xtest_tee_test_6005, "Test TEE_SeekObjectData"); /* unlink */ static void xtest_tee_test_6006_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; /* create */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; /* del & close */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; /* check result */ if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_READ, &obj, storage_id))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6006) ADBG_CASE_DEFINE(regression, 6006, xtest_tee_test_6006, "Test TEE_CloseAndDeletePersistentObject"); static void xtest_tee_test_6007_single(ADBG_Case_t *c, uint32_t storage_id) { Do_ADBG_BeginSubCase(c, "Test truncate file length"); test_truncate_file_length(c, storage_id); Do_ADBG_EndSubCase(c, "Test truncate file length"); Do_ADBG_BeginSubCase(c, "Test extend file length"); test_extend_file_length(c, storage_id); Do_ADBG_EndSubCase(c, "Test extend file length"); Do_ADBG_BeginSubCase(c, "Test file hole"); test_file_hole(c, storage_id); Do_ADBG_EndSubCase(c, "Test file hole"); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6007) ADBG_CASE_DEFINE(regression, 6007, xtest_tee_test_6007, "Test TEE_TruncateObjectData"); static void xtest_tee_test_6008_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj = 0; uint8_t out[10] = { }; uint32_t count = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; /* create */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01, sizeof(data_01), &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; /* write new data */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_write(&sess, obj, data_00, sizeof(data_00)))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_rename(&sess, obj, file_03, sizeof(file_03)))) goto exit; /* close */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_03, sizeof(file_03), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; /* check buffer */ (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count); /* Object ID = (non-NULL, 0) */ memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_rename(&sess, obj, file_03, 0))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_03, 0, TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count); /* Object ID = (NULL, 0) */ memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_rename(&sess, obj, file_03, sizeof(file_03)))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_rename(&sess, obj, NULL, 0))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, NULL, 0, TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count); /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6008) ADBG_CASE_DEFINE(regression, 6008, xtest_tee_test_6008, "Test TEE_RenamePersistentObject"); static void xtest_tee_test_6009_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t obj0 = 0; uint32_t obj1 = 0; uint32_t obj2 = 0; uint32_t e = 0; uint8_t info[200] = { }; uint8_t id[200] = { }; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; /* create file 00 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, sizeof(file_00), TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01, sizeof(data_01), &obj0, storage_id))) goto exit; /* create file 01 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01, sizeof(data_01), &obj1, storage_id))) goto exit; /* create file 02 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01, sizeof(data_01), &obj2, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj0))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj1))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj2))) goto exit; /* iterate */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_start_enum(&sess, e, storage_id))) goto exit; /* get 00 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id)))) goto exit; /* get 01 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_next_enum(&sess, e, NULL, 0, id, sizeof(id)))) goto exit; /* get 02 */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id)))) goto exit; /* we should not have more files */ if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND, fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id)))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_enum(&sess, e))) goto exit; /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_00, sizeof(file_00), TEE_DATA_FLAG_ACCESS_WRITE_META, &obj0, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj0))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE_META, &obj1, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj1))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_02, sizeof(file_02), TEE_DATA_FLAG_ACCESS_WRITE_META, &obj2, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj2))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6009) ADBG_CASE_DEFINE(regression, 6009, xtest_tee_test_6009, "Test TEE Internal API Persistent Object Enumeration Functions"); static void xtest_tee_test_6010_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t orig = 0; uint32_t o1 = 0; uint32_t o2 = 0; uint32_t e = 0; uint32_t f = 0; uint8_t data[1024] = { }; uint8_t out[1024] = { }; uint32_t n = 0; for (n = 0; n < ARRAY_SIZE(data); n++) data[n] = n; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; Do_ADBG_BeginSubCase(c, "CreatePersistentObject AccessConflict"); o1 = TEE_HANDLE_NULL; o2 = TEE_HANDLE_NULL; f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ | TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE; ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, sizeof(file_00), f, 0, data, sizeof(data), &o1, storage_id)); f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE; ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ACCESS_CONFLICT, fs_create(&sess, file_00, sizeof(file_00), f, 0, data, sizeof(data), &o2, storage_id)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1)); if (o2) ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o2)); Do_ADBG_EndSubCase(c, "CreatePersistentObject AccessConflict"); Do_ADBG_BeginSubCase(c, "RestrictObjectUsage Panic"); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD, fs_restrict_usage(&sess, 0xffffbad0, 0xffffffff)); Do_ADBG_EndSubCase(c, "RestrictObjectUsage Panic"); TEEC_CloseSession(&sess); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; Do_ADBG_BeginSubCase(c, "SeekObjectData BadHandle"); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD, fs_seek(&sess, 0xffffbad0, 5, TEE_DATA_SEEK_SET)); Do_ADBG_EndSubCase(c, "SeekObjectData BadHandle"); TEEC_CloseSession(&sess); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; Do_ADBG_BeginSubCase(c, "SeekObjectData NotPersist"); o1 = 0; ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_obj(&sess, TEE_TYPE_AES, 256, &o1)); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD, fs_seek(&sess, o1, 5, TEE_DATA_SEEK_SET)); Do_ADBG_EndSubCase(c, "SeekObjectData NotPersist"); TEEC_CloseSession(&sess); if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; Do_ADBG_BeginSubCase(c, "SeekWriteRead"); o1 = 0; f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ | TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, sizeof(file_00), f, 0, data, sizeof(data), &o1, storage_id))) goto seek_write_read_out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_seek(&sess, o1, 2, TEE_DATA_SEEK_SET))) goto seek_write_read_out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_seek(&sess, o1, 0, TEE_DATA_SEEK_END))) goto seek_write_read_out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_write(&sess, o1, data, sizeof(data)))) goto seek_write_read_out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_seek(&sess, o1, sizeof(data), TEE_DATA_SEEK_SET))) goto seek_write_read_out; memset(out, 0xab, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, o1, out, sizeof(out), &n))) goto seek_write_read_out; ADBG_EXPECT_BUFFER(c, data, sizeof(data), out, n); if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_seek(&sess, o1, 10, TEE_DATA_SEEK_END))) goto seek_write_read_out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, o1, out, sizeof(out), &n))) goto seek_write_read_out; ADBG_EXPECT_COMPARE_UNSIGNED(c, n, ==, 0); if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_seek(&sess, o1, -(int32_t)sizeof(data) / 2, TEE_DATA_SEEK_END))) goto seek_write_read_out; memset(out, 0xab, sizeof(out) / 2); if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, o1, out, sizeof(out) / 2, &n))) goto seek_write_read_out; ADBG_EXPECT_BUFFER(c, data + sizeof(data) / 2, sizeof(data) / 2, out, n); seek_write_read_out: ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1)); Do_ADBG_EndSubCase(c, "SeekWriteRead"); Do_ADBG_BeginSubCase(c, "Rename Access Conflict"); o1 = TEE_HANDLE_NULL; o2 = TEE_HANDLE_NULL; f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ | TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE; ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, sizeof(file_00), f, 0, data, sizeof(data), &o1, storage_id)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), f, 0, data, sizeof(data) / 2, &o2, storage_id)); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ACCESS_CONFLICT, fs_rename(&sess, o2, file_00, sizeof(file_00))); ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o2)); Do_ADBG_EndSubCase(c, "Rename Access Conflict"); Do_ADBG_BeginSubCase(c, "Rename Access Conflict 2"); o1 = TEE_HANDLE_NULL; o2 = TEE_HANDLE_NULL; f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ | TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE; ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, sizeof(file_00), f, 0, data, sizeof(data), &o1, storage_id)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, o1)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), f, 0, data, sizeof(data) / 2, &o2, storage_id)); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ACCESS_CONFLICT, fs_rename(&sess, o2, file_00, sizeof(file_00))); ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, sizeof(file_00), f, 0, data, sizeof(data), &o1, storage_id)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o2)); Do_ADBG_EndSubCase(c, "Rename Access Conflict 2"); Do_ADBG_BeginSubCase(c, "AllocPersistentObjectEnumerator + " "ResetPersistentObjectEnumerator"); e = TEE_HANDLE_NULL; ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_reset_enum(&sess, e)); Do_ADBG_EndSubCase(c, "AllocPersistentObjectEnumerator + " "ResetPersistentObjectEnumerator"); Do_ADBG_BeginSubCase(c, "StartPersistentObjectEnumerator ItemNotFound"); e = TEE_HANDLE_NULL; ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e)); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ITEM_NOT_FOUND, fs_next_enum(&sess, e, NULL, 0, out, sizeof(out))); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ITEM_NOT_FOUND, fs_start_enum(&sess, e, storage_id)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_enum(&sess, e)); Do_ADBG_EndSubCase(c, "StartPersistentObjectEnumerator ItemNotFound"); Do_ADBG_BeginSubCase(c, "RenamePersistent ReadWrite"); o1 = TEE_HANDLE_NULL; f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ | TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE; ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_00, sizeof(file_00), f, 0, data, sizeof(data), &o1, storage_id)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_rename(&sess, o1, file_01, sizeof(file_01))); ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1)); Do_ADBG_EndSubCase(c, "RenamePersistent ReadWrite"); Do_ADBG_BeginSubCase(c, "Close Free Reset Null"); ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, TEE_HANDLE_NULL)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_obj(&sess, TEE_HANDLE_NULL)); ADBG_EXPECT_TEEC_SUCCESS(c, fs_reset_obj(&sess, TEE_HANDLE_NULL)); Do_ADBG_EndSubCase(c, "Close Free Reset Null"); TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6010) ADBG_CASE_DEFINE(regression, 6010, xtest_tee_test_6010, "Test Storage"); static void xtest_tee_test_6012_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t orig = 0; uint32_t obj = 0; /* * create the object a first time (forced through with overwrite attribute) */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create_overwrite(&sess, file_04, sizeof(file_04), storage_id))) goto bail1; TEEC_CloseSession(&sess); /* * re-create the object two times with overwrite attribute */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create_overwrite(&sess, file_04, sizeof(file_04), storage_id))) goto bail1; /* re-create it with an object */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_04, sizeof(file_04), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_OVERWRITE, 0, NULL, 0, &obj, storage_id))) goto bail2; TEEC_CloseSession(&sess); /* * re-create it again without overwrite flag: should fail and * existing object should not be altered. */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ACCESS_CONFLICT, fs_create(&sess, file_04, sizeof(file_04), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, NULL, 0, &obj, storage_id))) goto bail2; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_04, sizeof(file_04), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto bail1; bail2: /* remove the object so that xtest 600x can be replayed */ ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)); bail1: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6012) ADBG_CASE_DEFINE(regression, 6012, xtest_tee_test_6012, "Test TEE GP TTA DS init objects"); static void xtest_tee_test_6013_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t orig = 0; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; op.params[0].value.a = storage_id; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_KEY_IN_PERSISTENT, &op, &orig)); TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6013) ADBG_CASE_DEFINE(regression, 6013, xtest_tee_test_6013, "Key usage in Persistent objects"); static void xtest_tee_test_6014_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; uint32_t orig = 0; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; op.params[0].value.a = storage_id; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_LOOP, &op, &orig)); TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6014) ADBG_CASE_DEFINE(regression, 6014, xtest_tee_test_6014, "Loop on Persistent objects"); static void xtest_tee_test_6015_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; TEEC_Session sess2 = { }; uint32_t orig = 0; uint32_t obj = 0; uint32_t obj2 = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess2, &storage2_ta_uuid, NULL, &orig))) goto exit2; /* TA #1 creates a persistent object */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit; /* TA #2 tries to open the object created by TA #1 */ if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND, fs_open(&sess2, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_READ, &obj2, storage_id))) goto clean; clean: ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)); exit: TEEC_CloseSession(&sess2); exit2: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6015) ADBG_CASE_DEFINE(regression, 6015, xtest_tee_test_6015, "Storage isolation"); struct test_6016_thread_arg { ADBG_Case_t *case_t; uint32_t storage_id; char file_name[8]; TEEC_Session session; }; static void *test_6016_thread(void *arg) { struct test_6016_thread_arg *a = arg; TEEC_Session sess = a->session; uint32_t obj = 0; uint8_t out[10] = { }; uint32_t count = 0; /* create */ if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_create(&sess, a->file_name, sizeof(a->file_name), TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01, sizeof(data_01), &obj, a->storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_close(&sess, obj))) goto exit; /* write new data */ if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_open(&sess, a->file_name, sizeof(a->file_name), TEE_DATA_FLAG_ACCESS_WRITE, &obj, a->storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_write(&sess, obj, data_00, sizeof(data_00)))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_close(&sess, obj))) goto exit; /* verify */ if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_open(&sess, a->file_name, sizeof(a->file_name), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, a->storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_read(&sess, obj, out, 10, &count))) goto exit; (void)ADBG_EXPECT_BUFFER(a->case_t, data_00, 10, out, count); /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_unlink(&sess, obj))) goto exit; exit: return NULL; } #define NUM_THREADS 3 static void xtest_tee_test_6016_loop(ADBG_Case_t *c, uint32_t storage_id) { struct test_6016_thread_arg arg[NUM_THREADS] = { }; uint32_t orig = 0; size_t i = 0; size_t n = 0; size_t m = 0; pthread_t thr[NUM_THREADS] = { }; for (m = 0; m < NUM_THREADS; m++) if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&arg[m].session, &storage_ta_uuid, NULL, &orig))) goto out; for (n = 0; n < NUM_THREADS; n++) { arg[n].case_t = c; arg[n].storage_id = storage_id; snprintf(arg[n].file_name, sizeof(arg[n].file_name), "file_%zu", n); if (!ADBG_EXPECT(c, 0, pthread_create(thr + n, NULL, test_6016_thread, arg + n))) goto out; } out: for (i = 0; i < n; i++) ADBG_EXPECT(c, 0, pthread_join(thr[i], NULL)); for (i = 0; i < m; i++) TEEC_CloseSession(&arg[i].session); } /* concurency */ static void xtest_tee_test_6016_single(ADBG_Case_t *c, uint32_t storage_id) { int i = 0; int loops = 8; Do_ADBG_Log(" threads: %d, loops: %d", NUM_THREADS, loops); for (i = 0; i < loops; i++) xtest_tee_test_6016_loop(c, storage_id); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6016) ADBG_CASE_DEFINE(regression, 6016, xtest_tee_test_6016, "Storage concurency"); static void xtest_tee_test_6017_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; TEE_ObjectInfo obj_info1 = { }; TEE_ObjectInfo obj_info2 = { }; uint32_t obj = 0; uint32_t orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE, 0, NULL, 0, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_write(&sess, obj, data_00, sizeof(data_00)))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_get_obj_info(&sess, obj, &obj_info1))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_get_obj_info(&sess, obj, &obj_info2))) goto exit; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, obj_info1.dataSize, ==, obj_info2.dataSize)) goto exit; /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6017) ADBG_CASE_DEFINE(regression, 6017, xtest_tee_test_6017, "Test Persistent objects info"); static void xtest_tee_test_6018_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; TEE_ObjectInfo obj_info1 = { }; TEE_ObjectInfo obj_info2 = { }; uint32_t obj = 0; uint32_t orig = 0; uint8_t block[32 * 1024] = { }; size_t num_blocks = 0; size_t block_size = 0; size_t n = 0; if (storage_is(storage_id, TEE_STORAGE_PRIVATE_RPMB)) { /* RPMB FS is a bit resource constrained */ num_blocks = 10; block_size = 1024; } else { num_blocks = 20; block_size = sizeof(block); } if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE, 0, NULL, 0, &obj, storage_id))) goto exit; for (n = 0; n < num_blocks; n++) { memset(block, n, block_size); Do_ADBG_Log("writing %zu", n); if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_write(&sess, obj, block, block_size))) goto exit; } if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_get_obj_info(&sess, obj, &obj_info1))) goto exit; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, obj_info1.dataSize, ==, block_size * num_blocks)) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_get_obj_info(&sess, obj, &obj_info2))) goto exit; if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, obj_info1.dataSize, ==, obj_info2.dataSize)) goto exit; for (n = 0; n < num_blocks; n++) { uint8_t br[block_size]; uint32_t count = 0; memset(br, 0, sizeof(br)); memset(block, n, block_size); Do_ADBG_Log("reading %zu", n); if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, br, sizeof(br), &count))) goto exit; if (!ADBG_EXPECT_BUFFER(c, block, block_size, br, count)) goto exit; } /* clean */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj))) goto exit; exit: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6018) ADBG_CASE_DEFINE(regression, 6018, xtest_tee_test_6018, "Large object"); static void xtest_tee_test_6019_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Session sess = { }; TEEC_Session sess2 = { }; uint32_t orig = 0; uint32_t obj = 0; uint32_t obj2 = 0; uint8_t out[10] = { }; uint32_t count = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig))) return; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&sess2, &storage2_ta_uuid, NULL, &orig))) goto exit3; /* TA #1 creates a persistent object */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_OVERWRITE, 0, data_00, sizeof(data_00), &obj, storage_id))) goto exit2; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit1; /* TA #2 creates a persistent object */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_create(&sess2, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_OVERWRITE, 0, data_01, sizeof(data_01), &obj2, storage_id))) goto exit1; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess2, obj2))) goto exit; /* TA #1 open and read */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count))) goto exit; /* verify */ (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count); /* TA #2 open and read */ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_open(&sess2, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj2, storage_id))) goto exit; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess2, obj2, out, 10, &count))) goto exit; /* verify */ (void)ADBG_EXPECT_BUFFER(c, data_01, 10, out, count); exit: ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess2, obj2)); exit1: ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)); exit2: TEEC_CloseSession(&sess2); exit3: TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6019) ADBG_CASE_DEFINE(regression, 6019, xtest_tee_test_6019, "Storage independence"); /* * According to the GP spec V1.1, the object_id in create/open/rename * functions is not allowed to reside in the shared memory. * * The function below replicates fs_open/fs_create/fs_rename but using * specific commands to ask the TA to use the client object ID buffer * from the shared memory when accessing the object through target APIs. * The TA is not expected to use such references and gets killed by the TEE. */ static TEEC_Result fs_access_with_bad_object_id_ref(TEEC_Session *sess, uint32_t command, void *id, uint32_t id_size, uint32_t flags, uint32_t attr, void *data, uint32_t data_size, uint32_t *obj, uint32_t storage_id) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t org = 0; switch (command) { case TA_STORAGE_CMD_OPEN_ID_IN_SHM: op.params[0].tmpref.buffer = id; op.params[0].tmpref.size = id_size; op.params[1].value.a = flags; op.params[1].value.b = 0; op.params[2].value.a = storage_id; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INOUT, TEEC_VALUE_INPUT, TEEC_NONE); break; case TA_STORAGE_CMD_CREATE_ID_IN_SHM: op.params[0].tmpref.buffer = id; op.params[0].tmpref.size = id_size; op.params[1].value.a = flags; op.params[1].value.b = 0; op.params[2].value.a = attr; op.params[2].value.b = storage_id; op.params[3].tmpref.buffer = data; op.params[3].tmpref.size = data_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INOUT, TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT); break; case TA_STORAGE_CMD_CREATEOVER_ID_IN_SHM: op.params[0].tmpref.buffer = id; op.params[0].tmpref.size = id_size; op.params[1].value.a = storage_id; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); break; case TA_STORAGE_CMD_RENAME_ID_IN_SHM: op.params[0].value.a = *obj; op.params[1].tmpref.buffer = id; op.params[1].tmpref.size = id_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); break; default: return TEE_ERROR_GENERIC; } res = TEEC_InvokeCommand(sess, command, &op, &org); switch (command) { case TA_STORAGE_CMD_OPEN_ID_IN_SHM: case TA_STORAGE_CMD_CREATE_ID_IN_SHM: if (res == TEEC_SUCCESS) *obj = op.params[1].value.b; break; default: break; } return res; } static void xtest_tee_test_6020_single(ADBG_Case_t *c, uint32_t storage_id) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session sess = { }; uint32_t orig = 0; uint32_t obj = 0; /* * Invalid open request from the TA (object ID reference in SHM) */ res = xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; res = fs_create(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_OVERWRITE, 0, data_00, sizeof(data_00), &obj, storage_id); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit1; if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj))) goto exit1; res = fs_access_with_bad_object_id_ref(&sess, TA_STORAGE_CMD_OPEN_ID_IN_SHM, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, 0, NULL, 0, &obj, storage_id); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD, res); /* * Invalid create-overwrite request from the TA (object ID reference in SHM) */ TEEC_CloseSession(&sess); res = xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; res = fs_access_with_bad_object_id_ref(&sess, TA_STORAGE_CMD_CREATEOVER_ID_IN_SHM, file_01, sizeof(file_01), 0, 0, NULL, 0, NULL, storage_id); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD, res); /* * Invalid rename request from the TA (object ID reference in SHM) */ TEEC_CloseSession(&sess); res = xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; res = fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit1; res = fs_access_with_bad_object_id_ref(&sess, TA_STORAGE_CMD_RENAME_ID_IN_SHM, file_01, sizeof(file_01) - 1, 0, 0, NULL, 0, &obj, 0); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD, res); /* * Invalid creation request from the TA (object ID reference in SHM) */ TEEC_CloseSession(&sess); res = xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; res = fs_open(&sess, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit1; ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)); res = fs_access_with_bad_object_id_ref(&sess, TA_STORAGE_CMD_CREATE_ID_IN_SHM, file_01, sizeof(file_01), TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_OVERWRITE, 0, data_00, sizeof(data_00), &obj, storage_id); ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD, res); TEEC_CloseSession(&sess); return; exit1: ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)); TEEC_CloseSession(&sess); } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6020) ADBG_CASE_DEFINE(regression, 6020, xtest_tee_test_6020, "Object IDs in SHM (negative)"); static void xtest_tee_test_6021_single(ADBG_Case_t *c, uint32_t storage_id) { const uint32_t flags = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META; TEEC_Result res = TEEC_ERROR_GENERIC; TEE_ObjectInfo obj_info = { }; uint32_t ou = 0xffffffff; TEEC_Session sess = { }; uint32_t orig = 0; uint32_t obj = 0; res = xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; res = fs_create(&sess, file_01, sizeof(file_01), flags | TEE_DATA_FLAG_OVERWRITE, 0, data_00, sizeof(data_00), &obj, storage_id); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit; res = fs_get_obj_info(&sess, obj, &obj_info); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit; ADBG_EXPECT_COMPARE_UNSIGNED(c, obj_info.objectUsage, ==, ou); ou &= ~TEE_USAGE_EXTRACTABLE; res = fs_restrict_usage(&sess, obj, ou); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit; res = fs_get_obj_info(&sess, obj, &obj_info); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit; ADBG_EXPECT_COMPARE_UNSIGNED(c, obj_info.objectUsage, ==, ou); ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)); TEEC_CloseSession(&sess); res = xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return; res = fs_open(&sess, file_01, sizeof(file_01), flags, &obj, storage_id); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit; res = fs_get_obj_info(&sess, obj, &obj_info); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto exit; ADBG_EXPECT_COMPARE_UNSIGNED(c, obj_info.objectUsage, ==, ou); exit: ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)); TEEC_CloseSession(&sess); return; } DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6021) ADBG_CASE_DEFINE(regression, 6021, xtest_tee_test_6021, "Modify and check persistent object usage"); optee_test-4.3.0/host/xtest/regression_8000.c000066400000000000000000000530761464074351400210330ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, Linaro Limited */ #include "xtest_test.h" #include "xtest_helpers.h" #include #include #include #include #include #include #include #define WITH_HKDF 1 #define WITH_CONCAT_KDF 1 #define WITH_PBKDF2 1 /* * HKDF test data from RFC 5869 */ /* A.1 SHA-256 */ static const uint8_t hkdf_a1_ikm[] = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b }; static const uint8_t hkdf_a1_salt[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c }; static const uint8_t hkdf_a1_info[] = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9 }; static const uint8_t hkdf_a1_okm[] = { 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, 0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18, 0x58, 0x65 }; /* A.2 SHA-256 */ static const uint8_t hkdf_a2_ikm[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f }; static const uint8_t hkdf_a2_salt[] = { 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf }; static const uint8_t hkdf_a2_info[] = { 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; static const uint8_t hkdf_a2_okm[] = { 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, 0xc8, 0xe7, 0xf7, 0x8c, 0x59, 0x6a, 0x49, 0x34, 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8, 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, 0x59, 0x04, 0x5a, 0x99, 0xca, 0xc7, 0x82, 0x72, 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09, 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, 0x36, 0x77, 0x93, 0xa9, 0xac, 0xa3, 0xdb, 0x71, 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87, 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, 0x1d, 0x87 }; /* A.3 SHA-256 */ #define hkdf_a3_ikm hkdf_a1_ikm static const uint8_t hkdf_a3_salt[] = {}; static const uint8_t hkdf_a3_info[] = {}; static const uint8_t hkdf_a3_okm[] = { 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, 0x71, 0x5f, 0x80, 0x2a, 0x06, 0x3c, 0x5a, 0x31, 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e, 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, 0x9d, 0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a, 0x96, 0xc8 }; /* A.4 SHA-1 */ static const uint8_t hkdf_a4_ikm[] = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b }; static const uint8_t hkdf_a4_salt[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c }; static const uint8_t hkdf_a4_info[] = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9 }; static const uint8_t hkdf_a4_okm[] = { 0x08, 0x5a, 0x01, 0xea, 0x1b, 0x10, 0xf3, 0x69, 0x33, 0x06, 0x8b, 0x56, 0xef, 0xa5, 0xad, 0x81, 0xa4, 0xf1, 0x4b, 0x82, 0x2f, 0x5b, 0x09, 0x15, 0x68, 0xa9, 0xcd, 0xd4, 0xf1, 0x55, 0xfd, 0xa2, 0xc2, 0x2e, 0x42, 0x24, 0x78, 0xd3, 0x05, 0xf3, 0xf8, 0x96 }; /* A.5 SHA-1 */ #define hkdf_a5_ikm hkdf_a2_ikm #define hkdf_a5_salt hkdf_a2_salt #define hkdf_a5_info hkdf_a2_info static const uint8_t hkdf_a5_okm[] = { 0x0b, 0xd7, 0x70, 0xa7, 0x4d, 0x11, 0x60, 0xf7, 0xc9, 0xf1, 0x2c, 0xd5, 0x91, 0x2a, 0x06, 0xeb, 0xff, 0x6a, 0xdc, 0xae, 0x89, 0x9d, 0x92, 0x19, 0x1f, 0xe4, 0x30, 0x56, 0x73, 0xba, 0x2f, 0xfe, 0x8f, 0xa3, 0xf1, 0xa4, 0xe5, 0xad, 0x79, 0xf3, 0xf3, 0x34, 0xb3, 0xb2, 0x02, 0xb2, 0x17, 0x3c, 0x48, 0x6e, 0xa3, 0x7c, 0xe3, 0xd3, 0x97, 0xed, 0x03, 0x4c, 0x7f, 0x9d, 0xfe, 0xb1, 0x5c, 0x5e, 0x92, 0x73, 0x36, 0xd0, 0x44, 0x1f, 0x4c, 0x43, 0x00, 0xe2, 0xcf, 0xf0, 0xd0, 0x90, 0x0b, 0x52, 0xd3, 0xb4 }; /* A.6 SHA-1 */ #define hkdf_a6_ikm hkdf_a1_ikm static const uint8_t hkdf_a6_salt[] = {}; static const uint8_t hkdf_a6_info[] = {}; static const uint8_t hkdf_a6_okm[] = { 0x0a, 0xc1, 0xaf, 0x70, 0x02, 0xb3, 0xd7, 0x61, 0xd1, 0xe5, 0x52, 0x98, 0xda, 0x9d, 0x05, 0x06, 0xb9, 0xae, 0x52, 0x05, 0x72, 0x20, 0xa3, 0x06, 0xe0, 0x7b, 0x6b, 0x87, 0xe8, 0xdf, 0x21, 0xd0, 0xea, 0x00, 0x03, 0x3d, 0xe0, 0x39, 0x84, 0xd3, 0x49, 0x18 }; /* A.7 SHA-1 */ static const uint8_t hkdf_a7_ikm[] = { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c }; static const uint8_t hkdf_a7_salt[] = {}; static const uint8_t hkdf_a7_info[] = {}; static const uint8_t hkdf_a7_okm[] = { 0x2c, 0x91, 0x11, 0x72, 0x04, 0xd7, 0x45, 0xf3, 0x50, 0x0d, 0x63, 0x6a, 0x62, 0xf6, 0x4f, 0x0a, 0xb3, 0xba, 0xe5, 0x48, 0xaa, 0x53, 0xd4, 0x23, 0xb0, 0xd1, 0xf2, 0x7e, 0xbb, 0xa6, 0xf5, 0xe5, 0x67, 0x3a, 0x08, 0x1d, 0x70, 0xcc, 0xe7, 0xac, 0xfc, 0x48 }; /* * Concat KDF (NIST SP 800-56A R1) * * Test vector from: * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-37 * appendix C */ static const uint8_t concat_kdf_1_z[] = { 158, 86, 217, 29, 129, 113, 53, 211, 114, 131, 66, 131, 191, 132, 38, 156, 251, 49, 110, 163, 218, 128, 106, 72, 246, 218, 167, 121, 140, 254, 144, 196 }; static const uint8_t concat_kdf_1_other_info[] = { 0, 0, 0, 7, 65, 49, 50, 56, 71, 67, 77, 0, 0, 0, 5, 65, 108, 105, 99, 101, 0, 0, 0, 3, 66, 111, 98, 0, 0, 0, 128 }; static const uint8_t concat_kdf_1_derived_key[] = { 86, 170, 141, 234, 248, 35, 109, 32, 92, 34, 40, 205, 113, 167, 16, 26 }; /* * PKCS #5 2.0 / RFC 2898 Key Derivation Function 2 (PBKDF2) * Test vectors from RFC 6070 https://www.ietf.org/rfc/rfc6070.txt */ /* 1 */ static const uint8_t pbkdf2_1_password[] = { 'p', 'a', 's', 's', 'w', 'o', 'r', 'd' }; static const uint8_t pbkdf2_1_salt[] = { 's', 'a', 'l', 't' }; #define pbkdf2_1_iteration_count 1 static const uint8_t pbkdf2_1_dkm[] = { 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, 0x2f, 0xe0, 0x37, 0xa6 }; /* 2 */ #define pbkdf2_2_password pbkdf2_1_password #define pbkdf2_2_salt pbkdf2_1_salt #define pbkdf2_2_iteration_count 2 static const uint8_t pbkdf2_2_dkm[] = { 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, 0xd8, 0xde, 0x89, 0x57 }; /* 3 */ #define pbkdf2_3_password pbkdf2_1_password #define pbkdf2_3_salt pbkdf2_1_salt #define pbkdf2_3_iteration_count 4096 static const uint8_t pbkdf2_3_dkm[] = { 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, 0x65, 0xa4, 0x29, 0xc1 }; /* 4 */ #define pbkdf2_4_password pbkdf2_1_password #define pbkdf2_4_salt pbkdf2_1_salt #define pbkdf2_4_iteration_count 16777216 static const uint8_t pbkdf2_4_dkm[] = { 0xee, 0xfe, 0x3d, 0x61, 0xcd, 0x4d, 0xa4, 0xe4, 0xe9, 0x94, 0x5b, 0x3d, 0x6b, 0xa2, 0x15, 0x8c, 0x26, 0x34, 0xe9, 0x84 }; /* 5 */ static const uint8_t pbkdf2_5_password[] = { 'p', 'a', 's', 's', 'w', 'o', 'r', 'd', 'P', 'A', 'S', 'S', 'W', 'O', 'R', 'D', 'p', 'a', 's', 's', 'w', 'o', 'r', 'd' }; static const uint8_t pbkdf2_5_salt[] = { 's', 'a', 'l', 't', 'S', 'A', 'L', 'T', 's', 'a', 'l', 't', 'S', 'A', 'L', 'T', 's', 'a', 'l', 't', 'S', 'A', 'L', 'T', 's', 'a', 'l', 't', 'S', 'A', 'L', 'T', 's', 'a', 'l', 't' }; #define pbkdf2_5_iteration_count 4096 static const uint8_t pbkdf2_5_dkm[] = { 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, 0x38 }; /* 6 */ static const uint8_t pbkdf2_6_password[] = { 'p', 'a', 's', 's', '\0', 'w', 'o', 'r', 'd', }; static const uint8_t pbkdf2_6_salt[] = { 's', 'a', '\0', 'l', 't' }; #define pbkdf2_6_iteration_count 4096 static const uint8_t pbkdf2_6_dkm[] = { 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 }; #ifdef WITH_HKDF static void xtest_test_derivation_hkdf(ADBG_Case_t *c, TEEC_Session *session) { size_t n = 0; #define TEST_HKDF_DATA(section, algo, id, oeb /* omit empty bufs */) \ { \ section, algo, \ hkdf_##id##_ikm, sizeof(hkdf_##id##_ikm), \ (oeb && !sizeof(hkdf_##id##_salt)) ? NULL : hkdf_##id##_salt, sizeof(hkdf_##id##_salt), \ (oeb && !sizeof(hkdf_##id##_info)) ? NULL : hkdf_##id##_info, sizeof(hkdf_##id##_info), \ hkdf_##id##_okm, sizeof(hkdf_##id##_okm), \ } static struct hkdf_case { const char *subcase_name; uint32_t algo; const uint8_t *ikm; size_t ikm_len; const uint8_t *salt; size_t salt_len; const uint8_t *info; size_t info_len; const uint8_t *okm; size_t okm_len; } hkdf_cases[] = { TEST_HKDF_DATA("A.1 (SHA-256)", TEE_ALG_HKDF_SHA256_DERIVE_KEY, a1, false), TEST_HKDF_DATA("A.2 (SHA-256)", TEE_ALG_HKDF_SHA256_DERIVE_KEY, a2, false), TEST_HKDF_DATA("A.3 (SHA-256) [1]", TEE_ALG_HKDF_SHA256_DERIVE_KEY, a3, false), TEST_HKDF_DATA("A.3 (SHA-256) [2]", TEE_ALG_HKDF_SHA256_DERIVE_KEY, a3, true), TEST_HKDF_DATA("A.4 (SHA-1)", TEE_ALG_HKDF_SHA1_DERIVE_KEY, a4, false), TEST_HKDF_DATA("A.5 (SHA-1)", TEE_ALG_HKDF_SHA1_DERIVE_KEY, a5, false), TEST_HKDF_DATA("A.6 (SHA-1) [1]", TEE_ALG_HKDF_SHA1_DERIVE_KEY, a6, false), TEST_HKDF_DATA("A.6 (SHA-1) [2]", TEE_ALG_HKDF_SHA1_DERIVE_KEY, a6, true), TEST_HKDF_DATA("A.7 (SHA-1) [1]", TEE_ALG_HKDF_SHA1_DERIVE_KEY, a7, false), TEST_HKDF_DATA("A.7 (SHA-1) [2]", TEE_ALG_HKDF_SHA1_DERIVE_KEY, a7, true), }; size_t max_size = 2048; for (n = 0; n < sizeof(hkdf_cases) / sizeof(struct hkdf_case); n++) { TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL; TEE_Attribute params[4] = { }; size_t param_count = 0; uint8_t out[2048] = { }; size_t out_size = 0; const struct hkdf_case *hc = &hkdf_cases[n]; Do_ADBG_BeginSubCase(c, "HKDF RFC 5869 %s", hc->subcase_name); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, session, &op, hc->algo, TEE_MODE_DERIVE, max_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, session, TEE_TYPE_HKDF_IKM, max_size, &key_handle))) goto out; xtest_add_attr(¶m_count, params, TEE_ATTR_HKDF_IKM, hc->ikm, hc->ikm_len); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, session, key_handle, params, param_count))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, session, op, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, session, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, session, TEE_TYPE_GENERIC_SECRET, hc->okm_len * 8, &sv_handle))) goto out; param_count = 0; if (hc->salt) xtest_add_attr(¶m_count, params, TEE_ATTR_HKDF_SALT, hc->salt, hc->salt_len); if (hc->info) xtest_add_attr(¶m_count, params, TEE_ATTR_HKDF_INFO, hc->info, hc->info_len); params[param_count].attributeID = TEE_ATTR_HKDF_OKM_LENGTH; params[param_count].content.value.a = hc->okm_len; params[param_count].content.value.b = 0; param_count++; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; if (!ADBG_EXPECT_BUFFER(c, hc->okm, hc->okm_len, out, out_size)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, session, sv_handle))) goto out; out: Do_ADBG_EndSubCase(c, "HKDF RFC 5869 %s", hc->subcase_name); } } #endif /* WITH_HKDF */ #ifdef WITH_CONCAT_KDF static void xtest_test_derivation_concat_kdf(ADBG_Case_t *c, TEEC_Session *session) { size_t n = 0; #define TEST_CONCAT_KDF_DATA(name, algo, id, oeb /* omit empty bufs */) \ { \ name, algo, \ concat_kdf_##id##_z, sizeof(concat_kdf_##id##_z), \ (oeb && !sizeof(concat_kdf_##id##_other_info)) ? NULL \ : concat_kdf_##id##_other_info, \ sizeof(concat_kdf_##id##_other_info), \ concat_kdf_##id##_derived_key, sizeof(concat_kdf_##id##_derived_key), \ } static struct concat_kdf_case { const char *subcase_name; uint32_t algo; const uint8_t *shared_secret; size_t shared_secret_len; const uint8_t *other_info; size_t other_info_len; const uint8_t *derived_key; size_t derived_key_len; } concat_kdf_cases[] = { TEST_CONCAT_KDF_DATA("JWA-37 C (SHA-256)", TEE_ALG_CONCAT_KDF_SHA256_DERIVE_KEY, 1, false), }; size_t max_size = 2048; for (n = 0; n < sizeof(concat_kdf_cases) / sizeof(struct concat_kdf_case); n++) { TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL; TEE_Attribute params[4] = { }; size_t param_count = 0; uint8_t out[2048] = { }; size_t out_size = 0; const struct concat_kdf_case *cc = &concat_kdf_cases[n]; Do_ADBG_BeginSubCase(c, "Concat KDF %s", cc->subcase_name); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, session, &op, cc->algo, TEE_MODE_DERIVE, max_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, session, TEE_TYPE_CONCAT_KDF_Z, max_size, &key_handle))) goto out; xtest_add_attr(¶m_count, params, TEE_ATTR_CONCAT_KDF_Z, cc->shared_secret, cc->shared_secret_len); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, session, key_handle, params, param_count))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, session, op, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, session, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, session, TEE_TYPE_GENERIC_SECRET, cc->derived_key_len * 8, &sv_handle))) goto out; param_count = 0; if (cc->other_info) xtest_add_attr(¶m_count, params, TEE_ATTR_CONCAT_KDF_OTHER_INFO, cc->other_info, cc->other_info_len); params[param_count].attributeID = TEE_ATTR_CONCAT_KDF_DKM_LENGTH; params[param_count].content.value.a = cc->derived_key_len; params[param_count].content.value.b = 0; param_count++; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; if (!ADBG_EXPECT_BUFFER(c, cc->derived_key, cc->derived_key_len, out, out_size)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, session, sv_handle))) goto out; out: Do_ADBG_EndSubCase(c, "Concat KDF %s", cc->subcase_name); } } #endif /* WITH_CONCAT_KDF */ #ifdef WITH_PBKDF2 static void xtest_test_derivation_pbkdf2(ADBG_Case_t *c, TEEC_Session *session) { size_t n = 0; #define TEST_PBKDF2_DATA(level, section, algo, id, oeb /* omit empty bufs */) \ { \ level, section, algo, \ pbkdf2_##id##_password, sizeof(pbkdf2_##id##_password), \ (oeb && !sizeof(pbkdf2_##id##_salt)) ? NULL : pbkdf2_##id##_salt, sizeof(pbkdf2_##id##_salt), \ pbkdf2_##id##_iteration_count, \ pbkdf2_##id##_dkm, sizeof(pbkdf2_##id##_dkm), \ } #define _TO_STR(n) #n #define TO_STR(n) _TO_STR(n) #define RFC6070_TEST(l, n) \ TEST_PBKDF2_DATA(l, "RFC 6070 " TO_STR(n) " (HMAC-SHA1)", \ TEE_ALG_PBKDF2_HMAC_SHA1_DERIVE_KEY, n, false) static struct pbkdf2_case { unsigned int level; const char *subcase_name; uint32_t algo; const uint8_t *password; size_t password_len; const uint8_t *salt; size_t salt_len; uint32_t iteration_count; const uint8_t *dkm; size_t dkm_len; } pbkdf2_cases[] = { RFC6070_TEST(0, 1), RFC6070_TEST(0, 2), RFC6070_TEST(0, 3), RFC6070_TEST(15, 4), /* Lengthy! (2 min on HiKey @1.2GHz) */ RFC6070_TEST(0, 5), RFC6070_TEST(0, 6) }; size_t max_size = 2048; for (n = 0; n < sizeof(pbkdf2_cases) / sizeof(struct pbkdf2_case); n++) { TEE_OperationHandle op = TEE_HANDLE_NULL; TEE_ObjectHandle key_handle = TEE_HANDLE_NULL; TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL; TEE_Attribute params[4] = { }; size_t param_count = 0; uint8_t out[2048] = { }; size_t out_size = 0; const struct pbkdf2_case *pc = &pbkdf2_cases[n]; if (pc->level > level) continue; Do_ADBG_BeginSubCase(c, "PBKDF2 %s", pc->subcase_name); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, session, &op, pc->algo, TEE_MODE_DERIVE, max_size))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, session, TEE_TYPE_PBKDF2_PASSWORD, max_size, &key_handle))) goto out; xtest_add_attr(¶m_count, params, TEE_ATTR_PBKDF2_PASSWORD, pc->password, pc->password_len); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_populate_transient_object(c, session, key_handle, params, param_count))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_set_operation_key(c, session, op, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, session, key_handle))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(c, session, TEE_TYPE_GENERIC_SECRET, pc->dkm_len * 8, &sv_handle))) goto out; param_count = 0; if (pc->salt) xtest_add_attr(¶m_count, params, TEE_ATTR_PBKDF2_SALT, pc->salt, pc->salt_len); params[param_count].attributeID = TEE_ATTR_PBKDF2_DKM_LENGTH; params[param_count].content.value.a = pc->dkm_len; params[param_count].content.value.b = 0; param_count++; params[param_count].attributeID = TEE_ATTR_PBKDF2_ITERATION_COUNT; params[param_count].content.value.a = pc->iteration_count; params[param_count].content.value.b = 0; param_count++; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_derive_key(c, session, op, sv_handle, params, param_count))) goto out; out_size = sizeof(out); memset(out, 0, sizeof(out)); if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_get_object_buffer_attribute(c, session, sv_handle, TEE_ATTR_SECRET_VALUE, out, &out_size))) goto out; if (!ADBG_EXPECT_BUFFER(c, pc->dkm, pc->dkm_len, out, out_size)) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_operation(c, session, op))) goto out; if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_free_transient_object(c, session, sv_handle))) goto out; out: Do_ADBG_EndSubCase(c, "PBKDF2 %s", pc->subcase_name); } } #endif /* WITH_PBKDF2 */ static TEEC_Result enc_fs_km_self_test(TEEC_Session *sess) { TEEC_Operation op = TEEC_OPERATION_INITIALIZER; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t org = 0; res = TEEC_InvokeCommand(sess, CMD_SELF_TESTS, &op, &org); return res; } static void xtest_tee_test_8001(ADBG_Case_t *c) { TEEC_Session session = { }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; #ifdef WITH_HKDF xtest_test_derivation_hkdf(c, &session); #endif #ifdef WITH_CONCAT_KDF xtest_test_derivation_concat_kdf(c, &session); #endif #ifdef WITH_PBKDF2 xtest_test_derivation_pbkdf2(c, &session); #endif TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 8001, xtest_tee_test_8001, "Test TEE Internal API key derivation extensions"); /* secure storage key manager self test */ static void xtest_tee_test_8002(ADBG_Case_t *c) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session sess = { }; uint32_t orig = 0; res = xtest_teec_open_session(&sess, &enc_fs_key_manager_test_ta_uuid, NULL, &orig); if (res != TEEC_SUCCESS) { Do_ADBG_Log("Ignore test due to TA does not exist"); return; } if (!ADBG_EXPECT_TEEC_SUCCESS( c, enc_fs_km_self_test(&sess))) goto exit; exit: TEEC_CloseSession(&sess); } ADBG_CASE_DEFINE(regression, 8002, xtest_tee_test_8002, "Secure Storage Key Manager API Self Test"); optee_test-4.3.0/host/xtest/regression_8100.c000066400000000000000000000166671464074351400210410ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* Copyright (c) 2018, Linaro Limited */ #include "xtest_test.h" #include "xtest_helpers.h" #include #include #include #include #include #include #include #include #include #ifdef OPENSSL_FOUND #include #include #include #include #endif #include "regression_8100_ca_crt.h" #include "regression_8100_mid_crt.h" #include "regression_8100_my_crt.h" #include "regression_8100_my_csr.h" #ifdef CFG_TA_MBEDTLS static void test_8101(ADBG_Case_t *c __maybe_unused) { #ifdef CFG_TA_MBEDTLS_SELF_TEST TEEC_Session session = { }; uint32_t ret_orig = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_CRYPT_CMD_MBEDTLS_SELF_TESTS, NULL, &ret_orig)); TEEC_CloseSession(&session); #else Do_ADBG_Log("CFG_TA_MBEDTLS_SELF_TEST not set, test skipped"); #endif } ADBG_CASE_DEFINE(regression, 8101, test_8101, "TA mbedTLS self tests"); static int __printf(2, 3) myasprintf(char **strp, const char *fmt, ...) { char *str = NULL; int rc = 0; va_list ap; va_start(ap, fmt); rc = vsnprintf(str, rc, fmt, ap); va_end(ap); if (rc <= 0) goto out; str = malloc(rc); if (!str) { rc = -1; goto out; } va_start(ap, fmt); rc = vsnprintf(str, rc, fmt, ap); va_end(ap); if (rc <= 0) free(str); else *strp = str; out: return rc; } static void test_8102(ADBG_Case_t *c) { TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; char *chain = NULL; int clen = 0; char *trust = NULL; int tlen = 0; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; clen = myasprintf(&chain, "%*s\n%*s", (int)regression_8100_my_crt_size, regression_8100_my_crt, (int)regression_8100_mid_crt_size, regression_8100_mid_crt); if (!ADBG_EXPECT_COMPARE_SIGNED(c, clen, !=, -1)) goto out; tlen = myasprintf(&trust, "%*s", (int)regression_8100_ca_crt_size, regression_8100_ca_crt); if (!ADBG_EXPECT_COMPARE_SIGNED(c, tlen, !=, -1)) goto out; op.params[0].tmpref.buffer = chain; op.params[0].tmpref.size = clen; op.params[1].tmpref.buffer = trust; op.params[1].tmpref.size = tlen; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); ADBG_EXPECT_TEEC_SUCCESS(c, TEEC_InvokeCommand(&session, TA_CRYPT_CMD_MBEDTLS_CHECK_CERT, &op, &ret_orig)); out: free(chain); free(trust); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 8102, test_8102, "TA mbedTLS test cert chain"); #ifdef OPENSSL_FOUND static void osslerr(void) { while (true) { unsigned long e = 0; char b[256] = { }; const char *f = NULL; int l = 0; e = ERR_get_error_line(&f, &l); if (!e) return; ERR_error_string_n(e, b, sizeof(b)); Do_ADBG_Log("%s:%d \"%s\"", f, l, b); } } static bool get_cert(ADBG_Case_t *c, const char *crt_str, X509 **crt) { bool ret = false; size_t slen = strlen(crt_str) + 1; BIO *buf = BIO_new(BIO_s_mem()); size_t b = 0; if (!ADBG_EXPECT_NOT_NULL(c, buf)) goto out; b = BIO_write(buf, crt_str, slen); if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, b, ==, slen)) goto out; if (!PEM_read_bio_X509(buf, crt, 0, NULL)) goto out; ret = true; out: if (!ret) osslerr(); BIO_free(buf); return ret; } static bool push_cert(ADBG_Case_t *c, const char *crt_str, STACK_OF(X509) *cs) { X509 *crt = NULL; int rc = 0; if (!get_cert(c, crt_str, &crt)) return false; rc = sk_X509_push(cs, crt); if (!ADBG_EXPECT_COMPARE_SIGNED(c, rc, >, 0)) { osslerr(); X509_free(crt); return false; } return true; } static bool check(ADBG_Case_t *c, STACK_OF(X509) *trusted, STACK_OF(X509) *untrusted, X509 *crt) { bool ret = false; X509_STORE *store = NULL; X509_STORE_CTX *csc = NULL; X509_VERIFY_PARAM *pm = NULL; int i = 0; time_t vfy_time = 0; pm = X509_VERIFY_PARAM_new(); vfy_time = 1526898005; /* Mon, 21 May 2018 10:20:05 +0000 */ X509_VERIFY_PARAM_set_time(pm, vfy_time); store = X509_STORE_new(); if (!ADBG_EXPECT_NOT_NULL(c, store)) goto out; X509_STORE_set_flags(store, 0); if (!ADBG_EXPECT_TRUE(c, X509_STORE_set1_param(store, pm))) goto out; csc = X509_STORE_CTX_new(); if (!ADBG_EXPECT_NOT_NULL(c, csc)) goto out; if (!ADBG_EXPECT_TRUE(c, X509_STORE_CTX_init(csc, store, crt, untrusted))) goto out; X509_STORE_CTX_trusted_stack(csc, trusted); i = X509_verify_cert(csc); if (!ADBG_EXPECT_COMPARE_SIGNED(c, i, >, 0)) goto out; i = X509_STORE_CTX_get_error(csc); if (!ADBG_EXPECT_COMPARE_SIGNED(c, i, ==, X509_V_OK)) goto out; ret = true; out: if (!ret) osslerr(); X509_VERIFY_PARAM_free(pm); X509_STORE_free(store); X509_STORE_CTX_free(csc); return ret; } static bool verify_cert(ADBG_Case_t *c, const char *ca, const char *mid, const char *cert) { bool ret = false; STACK_OF(X509) *trusted = NULL; STACK_OF(X509) *untrusted = NULL; X509 *crt = NULL; trusted = sk_X509_new_null(); if (!ADBG_EXPECT_NOT_NULL(c, trusted)) goto out; untrusted = sk_X509_new_null(); if (!ADBG_EXPECT_NOT_NULL(c, untrusted)) goto out; if (!ADBG_EXPECT_TRUE(c, get_cert(c, cert, &crt))) goto out; if (!ADBG_EXPECT_TRUE(c, push_cert(c, mid, untrusted))) goto out; if (!ADBG_EXPECT_TRUE(c, push_cert(c, ca, trusted))) goto out; ret = ADBG_EXPECT_TRUE(c, check(c, trusted, untrusted, crt)); out: if (!ret) osslerr(); X509_free(crt); sk_X509_pop_free(untrusted, X509_free); sk_X509_pop_free(trusted, X509_free); return ret; } #else /*!OPENSSL_FOUND*/ static bool verify_cert(ADBG_Case_t *c, const char *ca, const char *mid, const char *cert) { UNUSED(c); UNUSED(ca); UNUSED(mid); UNUSED(cert); Do_ADBG_Log("OpenSSL not available, skipping certificate verification"); return true; } #endif static void test_8103(ADBG_Case_t *c) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Session session = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; char *csr = NULL; int clen = 0; char cert[2048]; char chain[4096]; char *ca = NULL; if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session( &session, &crypt_user_ta_uuid, NULL, &ret_orig))) return; clen = myasprintf(&csr, "%*s", (int)regression_8100_my_csr_size, regression_8100_my_csr); if (!ADBG_EXPECT_COMPARE_SIGNED(c, clen, >=, 0)) goto out; op.params[0].tmpref.buffer = csr; op.params[0].tmpref.size = clen; op.params[1].tmpref.buffer = cert; op.params[1].tmpref.size = sizeof(cert); op.params[2].tmpref.buffer = chain; op.params[2].tmpref.size = sizeof(chain); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(&session, TA_CRYPT_CMD_MBEDTLS_SIGN_CERT, &op, &ret_orig); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) goto out; myasprintf(&ca, "%*s", (int)regression_8100_ca_crt_size, regression_8100_ca_crt); if (!ADBG_EXPECT_NOT_NULL(c, ca)) goto out; verify_cert(c, ca, op.params[2].tmpref.buffer, op.params[1].tmpref.buffer); out: free(ca); free(csr); TEEC_CloseSession(&session); } ADBG_CASE_DEFINE(regression, 8103, test_8103, "TA mbedTLS process certificate request"); #endif /*CFG_TA_MBEDTLS*/ optee_test-4.3.0/host/xtest/sdp_basic.c000066400000000000000000000441341464074351400201260ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2016, Linaro Limited * All rights reserved. */ #include #include #include #include #include #include #include #include #include #include #include #include "crypto_common.h" #include "sdp_basic.h" #include "xtest_helpers.h" #include "xtest_test.h" /* * SDP basic test setup overview. * * - A dedicated trusted application (SDP basic TA) supports 3 commands: * - 'inject' data from a nonsecure buffer into a secure buffer * - 'transform' data inside a secure buffer (bitwise invert + unsigned incr) * - 'dump' data from a secure buffer into a nonsecure buffer * - This test client application (CA) invokes the TA for these 3 operations, * inject random value, trasforming them then dump them. * * To do so, CA allocates a 'SDP secure buffer' and invoke the TA for these 3 * operations (inject then transform then dump) over the allocate buffer. * * The secure buffer is currently allocation through ION support adn * registered to OP-TEE and as shared memory. * * To enhance test coverage against buffer alignement usecase, the CA invokes * the TA with a variable offset inside the buffer. As CA injects random data * into the buffer, the CA uses one of the random bytes to set the value of the * offset in the accessed secure buffer. * * For debugging support, the CA may map (in nonsecure world) the secure * buffer to read its content. As this is unsafe on a hardened platform, this * operation is default disable. When enable, error only print out a warning * trace but does not actually fail the test. This also give an easy way to * check that some HW complains on access violation when nonsecure accesses * secure data. */ struct tee_ctx { TEEC_Context ctx; TEEC_Session sess; }; int allocate_dma_buffer(size_t size, const char *heap_name, int verbosity) { const char *default_dev = DEFAULT_HEAP_NAME; char *mem_sec_dev = (char *)default_dev; struct dma_heap_allocation_data data = { 0 }; int fd_mem_sec; int fd = -1; if (heap_name != NULL) mem_sec_dev = (char *)heap_name; fd_mem_sec = open(mem_sec_dev, O_RDWR | O_SYNC); if (fd_mem_sec == -1) { fprintf(stderr, "Error: failed to open %s\n", mem_sec_dev); verbose("Seems no DMA buf heap is available.\n"); return -1; } data.len = size; data.fd_flags = O_RDWR | O_CLOEXEC; data.heap_flags = 0; if (ioctl(fd_mem_sec, DMA_HEAP_IOCTL_ALLOC, &data) == -1) { fprintf(stderr, "Error: DMA buf allocate API failed\n"); goto out; } fd = data.fd; out: close(fd_mem_sec); return fd; } static void finalize_tee_ctx(struct tee_ctx *ctx) { if (!ctx) return; TEEC_CloseSession(&ctx->sess); TEEC_FinalizeContext(&ctx->ctx); } static int create_tee_ctx(struct tee_ctx *ctx, enum test_target_ta target_ta) { TEEC_Result teerc = TEEC_ERROR_GENERIC; const TEEC_UUID *uuid = NULL; uint32_t err_origin = 0; switch (target_ta) { case TEST_NS_TO_TA: case TEST_TA_TO_TA: case TEST_TA_TO_PTA: uuid = &sdp_basic_ta_uuid; break; case TEST_NS_TO_PTA: uuid = &pta_invoke_tests_ta_uuid; break; default: return -1; } teerc = TEEC_InitializeContext(NULL, &ctx->ctx); if (teerc != TEEC_SUCCESS) return -1; teerc = TEEC_OpenSession(&ctx->ctx, &ctx->sess, uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &err_origin); if (teerc != TEEC_SUCCESS) { fprintf(stderr, "Error: open session to target test %s failed %x %d\n", (target_ta == TEST_NS_TO_PTA) ? "pTA" : "TA", teerc, err_origin); TEEC_FinalizeContext(&ctx->ctx); } return (teerc == TEEC_SUCCESS) ? 0 : -1; } static int tee_register_buffer(struct tee_ctx *ctx, void **shm_ref, int fd) { TEEC_Result teerc = TEEC_ERROR_GENERIC; TEEC_SharedMemory *shm = malloc(sizeof(*shm)); if (!shm) return 1; shm->flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT; teerc = TEEC_RegisterSharedMemoryFileDescriptor(&ctx->ctx, shm, fd); if (teerc != TEEC_SUCCESS) { fprintf(stderr, "Error: TEEC_RegisterMemoryFileDescriptor() failed %x\n", teerc); return 1; } *shm_ref = shm; return 0; } static void tee_deregister_buffer(struct tee_ctx *ctx, void *shm_ref) { (void)ctx; if (!shm_ref) return; TEEC_ReleaseSharedMemory((TEEC_SharedMemory *)shm_ref); free(shm_ref); } static int inject_sdp_data(struct tee_ctx *ctx, void *in, size_t offset, size_t len, void *shm_ref, int ind) { TEEC_SharedMemory *shm = (TEEC_SharedMemory *)shm_ref; TEEC_Result teerc = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t err_origin = 0; unsigned int cmd = 0; switch (ind) { case TEST_NS_TO_TA: cmd = TA_SDP_BASIC_CMD_INJECT; break; case TEST_TA_TO_TA: cmd = TA_SDP_BASIC_CMD_INVOKE_INJECT; break; case TEST_TA_TO_PTA: cmd = TA_SDP_BASIC_CMD_PTA_INJECT; break; case TEST_NS_TO_PTA: cmd = PTA_INVOKE_TESTS_CMD_COPY_NSEC_TO_SEC; break; default: return -1; } op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE, TEEC_NONE); op.params[0].tmpref.buffer = in; op.params[0].tmpref.size = len; op.params[1].memref.parent = shm; op.params[1].memref.size = len; op.params[1].memref.offset = offset; teerc = TEEC_InvokeCommand(&ctx->sess, cmd, &op, &err_origin); if (teerc != TEEC_SUCCESS) fprintf(stderr, "Error: invoke SDP test TA (inject) failed %x %d\n", teerc, err_origin); return (teerc == TEEC_SUCCESS) ? 0 : -1; } static int transform_sdp_data(struct tee_ctx *ctx, size_t offset, size_t len, void *shm_ref, int ind) { TEEC_SharedMemory *shm = (TEEC_SharedMemory *)shm_ref; TEEC_Result teerc = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t err_origin = 0; unsigned int cmd = 0; switch (ind) { case TEST_NS_TO_TA: cmd = TA_SDP_BASIC_CMD_TRANSFORM; break; case TEST_TA_TO_TA: cmd = TA_SDP_BASIC_CMD_INVOKE_TRANSFORM; break; case TEST_TA_TO_PTA: cmd = TA_SDP_BASIC_CMD_PTA_TRANSFORM; break; case TEST_NS_TO_PTA: cmd = PTA_INVOKE_TESTS_CMD_READ_MODIFY_SEC; break; default: return -1; } op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].memref.parent = shm; op.params[0].memref.size = len; op.params[0].memref.offset = offset; teerc = TEEC_InvokeCommand(&ctx->sess, cmd, &op, &err_origin); if (teerc != TEEC_SUCCESS) fprintf(stderr, "Error: invoke SDP test TA (transform) failed %x %d\n", teerc, err_origin); return (teerc == TEEC_SUCCESS) ? 0 : -1; } static int dump_sdp_data(struct tee_ctx *ctx, void *out, size_t offset, size_t len, void *shm_ref, int ind) { TEEC_SharedMemory *shm = (TEEC_SharedMemory *)shm_ref; TEEC_Result teerc = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t err_origin = 0; unsigned int cmd = 0; switch (ind) { case TEST_NS_TO_TA: cmd = TA_SDP_BASIC_CMD_DUMP; break; case TEST_TA_TO_TA: cmd = TA_SDP_BASIC_CMD_INVOKE_DUMP; break; case TEST_TA_TO_PTA: cmd = TA_SDP_BASIC_CMD_PTA_DUMP; break; case TEST_NS_TO_PTA: cmd = PTA_INVOKE_TESTS_CMD_COPY_SEC_TO_NSEC; break; default: return -1; } op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); op.params[0].memref.parent = shm; op.params[0].memref.size = len; op.params[0].memref.offset = offset; op.params[1].tmpref.buffer = out; op.params[1].tmpref.size = len; teerc = TEEC_InvokeCommand(&ctx->sess, cmd, &op, &err_origin); if (teerc != TEEC_SUCCESS) fprintf(stderr, "Error: invoke SDP test TA (dump) failed %x %d\n", teerc, err_origin); return (teerc == TEEC_SUCCESS) ? 0 : -1; } static int check_sdp_dumped(struct tee_ctx *ctx, void *ref, size_t len, void *out) { char *bref = (char *)ref; char *data = (char *)out; int err = 0; (void)ctx; while(len--) if (*data++ != (unsigned char)(~(*bref++) + 1)) err++; return err; } /* * Consider 32kByte + 1 of random data is sufficient for an accurate test * whatever the test buffer size is. Random buffer is read as a ring buffer. */ #define RANDOM_BUFFER_SIZE (32 * 1024 + 1) static int get_random_bytes(char *out, size_t len) { static char *rand_buf = NULL; static size_t rand_idx = 0; int rc = 0; if (!rand_buf) { const char rand_dev[] = "/dev/urandom"; int fd = 0; rand_buf = malloc(RANDOM_BUFFER_SIZE); if (!rand_buf) { fprintf(stderr, "failed to random buffer memory (%d bytes)\n", RANDOM_BUFFER_SIZE); return -1; } fd = open(rand_dev, O_RDONLY); if (fd < 0) { fprintf(stderr, "failed to open %s\n", rand_dev); return -1; } rc = read(fd, rand_buf, RANDOM_BUFFER_SIZE); if (rc != RANDOM_BUFFER_SIZE) { fprintf(stderr, "failed to read %d bytes from %s\n", RANDOM_BUFFER_SIZE, rand_dev); close(fd); return -1; } close(fd); } while (len) { size_t t_len = (RANDOM_BUFFER_SIZE < len) ? RANDOM_BUFFER_SIZE : len; if ((rand_idx + t_len) > RANDOM_BUFFER_SIZE) { int sz_end = RANDOM_BUFFER_SIZE - rand_idx; int sz_beg = t_len - sz_end; memcpy(out, rand_buf + rand_idx, sz_end); memcpy(out + sz_end, rand_buf , sz_beg); rand_idx = sz_beg; } else { memcpy(out, rand_buf + rand_idx, t_len); rand_idx += t_len; } len -= t_len; } return 0; } int sdp_basic_test(enum test_target_ta ta, size_t size, size_t loop, const char *heap_name, int rnd_offset, int verbosity) { struct tee_ctx *ctx = NULL; unsigned char *test_buf = NULL; unsigned char *ref_buf = NULL; void *shm_ref = NULL; unsigned int err = 1; int fd = -1; size_t sdp_size = size; size_t offset = 0; size_t loop_cnt = 0; if (!loop) { fprintf(stderr, "Error: null loop value\n"); return 1; } /* reduce size to enable offset tests (max offset is 255 bytes) */ if (rnd_offset) size -= 255; test_buf = malloc(size); ref_buf = malloc(size); if (!test_buf || !ref_buf) { verbose("failed to allocate memory\n"); goto bail1; } fd = allocate_buffer(sdp_size, heap_name, verbosity); if (fd < 0) { verbose("Failed to allocate SDP buffer (%zu bytes) in %s: %d\n", sdp_size, heap_name, fd); goto bail1; } /* register secure buffer to TEE */ ctx = malloc(sizeof(*ctx)); if (!ctx) goto bail1; if (create_tee_ctx(ctx, ta)) goto bail1; if (tee_register_buffer(ctx, &shm_ref, fd)) goto bail2; /* release registered fd: tee should still hold refcount on resource */ close(fd); fd = -1; /* invoke trusted application with secure buffer as memref parameter */ for (loop_cnt = loop; loop_cnt; loop_cnt--) { /* get an buffer of random-like values */ if (get_random_bytes((char *)ref_buf, size)) goto bail2; memcpy(test_buf, ref_buf, size); /* random offset [0 255] */ offset = (unsigned int)*ref_buf; /* TA writes into SDP buffer */ if (inject_sdp_data(ctx, test_buf, offset, size, shm_ref, ta)) goto bail2; /* TA reads/writes into SDP buffer */ if (transform_sdp_data(ctx, offset, size, shm_ref, ta)) goto bail2; /* TA reads into SDP buffer */ if (dump_sdp_data(ctx, test_buf, offset, size, shm_ref, ta)) goto bail2; /* check dumped data are the expected ones */ if (check_sdp_dumped(ctx, ref_buf, size, test_buf)) { fprintf(stderr, "check SDP data: %d errors\n", err); goto bail2; } } err = 0; bail2: if (fd >= 0) close(fd); if (shm_ref) tee_deregister_buffer(ctx, shm_ref); finalize_tee_ctx(ctx); bail1: free(ctx); free(ref_buf); free(test_buf); return err; } static int invoke_out_of_bounds(struct tee_ctx *ctx, TEEC_SharedMemory *in, TEEC_SharedMemory *out, size_t offset, size_t size, bool valid_ref, int verbosity) { TEEC_Result teerc = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t orig = 0; op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE, TEEC_NONE); op.params[0].memref.parent = in; op.params[0].memref.offset = 0; op.params[0].memref.size = size; op.params[1].memref.parent = out; op.params[1].memref.offset = offset; op.params[1].memref.size = size; teerc = TEEC_InvokeCommand(&ctx->sess, TA_SDP_BASIC_CMD_INJECT, &op, &orig); /* * Invocation with invalid references should be nicely rejected by * the TEE. * Invocation with valid references should reach the TA, whatever * result is. */ if ((valid_ref && orig != TEEC_ORIGIN_TRUSTED_APP) || (!valid_ref && ((orig == TEEC_ORIGIN_TRUSTED_APP) || (teerc != TEEC_ERROR_GENERIC && teerc != TEEC_ERROR_BAD_PARAMETERS)))) goto error; verbose("Out of bounds memref test successful:\n"); verbose("Shm size 0x%zx, offset 0x%zx/size 0x%zx: %s/0x%x from %s\n", out->size, offset, size, Do_ADBG_GetEnumName(teerc, ADBG_EnumTable_TEEC_Result), teerc, Do_ADBG_GetEnumName(orig, ADBG_EnumTable_TEEC_ErrorOrigin)); return 0; error: fprintf(stderr, "Out of bounds memref test FAILURE:\n"); fprintf(stderr, "Shm size 0x%zx, offset 0x%zx/size 0x%zx: %s/0x%x from %s\n", out->size, offset, size, Do_ADBG_GetEnumName(teerc, ADBG_EnumTable_TEEC_Result), teerc, Do_ADBG_GetEnumName(orig, ADBG_EnumTable_TEEC_ErrorOrigin)); return 1; } int sdp_out_of_bounds_memref_test(size_t size, const char *heap_name, int verbosity) { struct tee_ctx ctx = { }; int err = 0; int fd = -1; TEEC_Result teerc = TEEC_ERROR_GENERIC; TEEC_SharedMemory in = { }; TEEC_SharedMemory *out = NULL; if (create_tee_ctx(&ctx, TEST_NS_TO_TA)) return -1; fd = allocate_buffer(size, heap_name, verbosity); if (fd < 0) { verbose("SDP alloc failed (%zu bytes) in %s: %d\n", size, heap_name, fd); err = 1; goto bail; } if (tee_register_buffer(&ctx, (void **)&out, fd)) { err = 1; goto bail; } /* * The ION driver will decide how much SDP memory is being allocated. * Rely on this size to test out of bounds reference cases. */ size = out->size; in.size = size; in.flags = TEEC_MEM_INPUT; teerc = TEEC_AllocateSharedMemory(&ctx.ctx, &in); if (teerc) { verbose("failed to allocate memory\n"); goto bail; } if (verbosity) { /* Valid case: reference inside allocated buffer: last byte */ err += invoke_out_of_bounds(&ctx, &in, out, size - 1, 1, true, verbosity); } /* Reference overflows allocated buffer by 1 byte */ err += invoke_out_of_bounds(&ctx, &in, out, size - 1, 2, false, verbosity); /* Reference oveflows allocated buffer by more than 4kB byte */ err += invoke_out_of_bounds(&ctx, &in, out, size - 1, 5000, false, verbosity); /* Offset exceeds allocated buffer size value by 1 byte */ err += invoke_out_of_bounds(&ctx, &in, out, size, 1, false, verbosity); /* Offset exceeds allocated size value by 4kByte */ err += invoke_out_of_bounds(&ctx, &in, out, size, 4096, false, verbosity); /* Offset + size overflows offset value */ err += invoke_out_of_bounds(&ctx, &in, out, 2, ~0, false, verbosity); TEEC_ReleaseSharedMemory(&in); bail: tee_deregister_buffer(&ctx, out); if (fd >= 0) close(fd); finalize_tee_ctx(&ctx); return err; } #define _TO_STR(x) #x #define TO_STR(x) _TO_STR(x) static void usage(const char *applet_optname, size_t size, int loop, const char *heap_name) { fprintf(stderr, "Usage: %s %s [OPTION]\n", xtest_progname, applet_optname); fprintf(stderr, "Testing basic accesses to secure buffer (SDP) on OP-TEE.\n" "Allocates a secure buffer and invoke a TA to access it.\n" "TA is used to init/transform/dump the secure buffer.\n" "CA check dumped content.\n\n"); fprintf(stderr, "Options:\n"); fprintf(stderr, " -h|--help Print this help and exit\n"); fprintf(stderr, " -v Be verbose\n"); fprintf(stderr, " -s SIZE SDP buffer byte size [%zu]\n", size); fprintf(stderr, " -n LOOP Test loop iterations [%u]\n", loop); fprintf(stderr, " --heap-name NAME Target heap name [%s]\n", heap_name); fprintf(stderr, " --no-offset No random offset [0 255] in buffer\n"); } #define NEXT_ARG(i) \ do { \ if (++i == argc) { \ fprintf(stderr, "%s %s: %s: missing argument\n", \ xtest_progname, argv[0], argv[i-1]); \ return 1; \ } \ } while (0); #define CHECK_RESULT(_res, _exp, _action) \ if ((_res) == (_exp)) { \ verbose("Test passed\n"); \ } else { \ verbose("Test failed!\n"); \ _action; \ } int sdp_basic_runner_cmd_parser(int argc, char *argv[]) { size_t test_size = 5000; size_t test_loop = 1000; const char *heap_name = DEFAULT_HEAP_NAME; int rnd_offset = 1; int verbosity = 1; int err = 0; int i = 0; /* Parse command line */ for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { usage(argv[0], test_size, test_loop, heap_name); return 0; } } for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-v")) { verbosity++; } else if (!strcmp(argv[i], "-s")) { NEXT_ARG(i); test_size = atoi(argv[i]); } else if (!strcmp(argv[i], "-n")) { NEXT_ARG(i); test_loop = atoi(argv[i]); } else if (!strcmp(argv[i], "--heap-name")) { NEXT_ARG(i); heap_name = argv[i]; } else if (!strcmp(argv[i], "--no-offset")) { rnd_offset = 0; } else { fprintf(stderr, "%s %s: invalid argument: %s\n", xtest_progname, argv[0], argv[i]); usage(argv[0], test_size, test_loop, heap_name); return 1; } } verbose("\nSecure Data Path basic access: " "NS invokes SDP TA\n"); err = sdp_basic_test(TEST_NS_TO_TA, test_size, test_loop, heap_name, rnd_offset, verbosity); CHECK_RESULT(err, 0, return 1); verbose("\nSecure Data Path basic access: " "SDP TA invokes SDP TA\n"); err = sdp_basic_test(TEST_TA_TO_TA, test_size, test_loop, heap_name, rnd_offset, verbosity); CHECK_RESULT(err, 0, return 1); verbose("\nSecure Data Path basic access: " "SDP TA invokes SDP pTA\n"); err = sdp_basic_test(TEST_TA_TO_PTA, test_size, test_loop, heap_name, rnd_offset, verbosity); CHECK_RESULT(err, 0, return 1); verbose("\nSecure Data Path basic access: " "NS invokes SDP pTA (shall fail)\n"); err = sdp_basic_test(TEST_NS_TO_PTA, test_size, test_loop, heap_name, rnd_offset, verbosity); CHECK_RESULT(err, 1, return 1); verbose("\nSecure Data Path basic access: " "Invoke TA with out of bounds buffer references\n"); err = sdp_out_of_bounds_memref_test(test_size, heap_name, verbosity); CHECK_RESULT(err, 0, return 1); return 0; } optee_test-4.3.0/host/xtest/sdp_basic.h000066400000000000000000000016061464074351400201300ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2017, Linaro Limited * All rights reserved. */ #ifndef XTEST_SDP_BASIC_H #define XTEST_SDP_BASIC_H #include #include #include #define DEFAULT_HEAP_NAME "/dev/dma_heap/sdp" #include "ta_sdp_basic.h" enum test_target_ta { TEST_NS_TO_TA, TEST_NS_TO_PTA, TEST_TA_TO_TA, TEST_TA_TO_PTA, }; int allocate_dma_buffer(size_t size, const char *heap_name, int verbosity); static inline int allocate_buffer(size_t size, const char *heap_name, int verbosity) { return allocate_dma_buffer(size, heap_name, verbosity); } int sdp_basic_test(enum test_target_ta ta, size_t size, size_t loop, const char *heap_name, int rnd_offset, int verbosity); int sdp_out_of_bounds_memref_test(size_t size, const char *heap_name, int verbosity); #endif /* XTEST_SDP_BASIC_H */ optee_test-4.3.0/host/xtest/sock_server.c000066400000000000000000000207361464074351400205260ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2016, Linaro Limited */ #include #include #include #include #include #include #include #include #include #include #include #include #include "sock_server.h" struct server_state { struct sock_state *socks; struct pollfd *fds; nfds_t nfds; bool got_quit; struct sock_io_cb *cb; }; #define SOCK_BUF_SIZE 512 struct sock_state { bool (*cb)(struct server_state *srvst, size_t idx); struct sock_server_bind *serv; }; static bool server_io_cb(struct server_state *srvst, size_t idx) { short revents = srvst->fds[idx].revents; short *events = &srvst->fds[idx].events; struct sock_io_cb *cb = srvst->cb; int fd = 0; fd = srvst->fds[idx].fd; if (revents & POLLIN) { if (!cb->read) *events &= ~POLLIN; else if (!cb->read(cb->ptr, fd, events)) goto close; } if (revents & POLLOUT) { if (!cb->write) *events &= ~POLLOUT; else if (!cb->write(cb->ptr, fd, events)) goto close; } if (!(revents & ~(POLLIN | POLLOUT))) return true; close: if (close(fd)) { warn("server_io_cb: close(%d)", fd); return false; } srvst->fds[idx].fd = -1; return true; } static bool server_add_state(struct server_state *srvst, bool (*cb)(struct server_state *srvst, size_t idx), struct sock_server_bind *serv, int fd, short poll_events) { void *p = NULL; size_t n = 0; for (n = 0; n < srvst->nfds; n++) { if (srvst->fds[n].fd == -1) { srvst->socks[n].cb = cb; srvst->socks[n].serv = serv; srvst->fds[n].fd = fd; srvst->fds[n].events = poll_events; srvst->fds[n].revents = 0; return true; } } p = realloc(srvst->socks, sizeof(*srvst->socks) * (srvst->nfds + 1)); if (!p) return false; srvst->socks = p; srvst->socks[srvst->nfds].cb = cb; srvst->socks[srvst->nfds].serv = serv; p = realloc(srvst->fds, sizeof(*srvst->fds) * (srvst->nfds + 1)); if (!p) return false; srvst->fds = p; srvst->fds[srvst->nfds].fd = fd; srvst->fds[srvst->nfds].events = poll_events; srvst->fds[srvst->nfds].revents = 0; srvst->nfds++; return true; } static bool tcp_server_accept_cb(struct server_state *srvst, size_t idx) { short revents = srvst->fds[idx].revents; struct sockaddr_storage sass = { }; struct sockaddr *sa = (struct sockaddr *)&sass; socklen_t len = sizeof(sass); int fd = 0; short io_events = POLLIN | POLLOUT; if (!(revents & POLLIN)) return false; fd = accept(srvst->fds[idx].fd, sa, &len); if (fd == -1) { if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ECONNABORTED) return true; return false; } if (srvst->cb->accept && !srvst->cb->accept(srvst->cb->ptr, fd, &io_events)) { if (close(fd)) warn("server_accept_cb: close(%d)", fd); return true; } return server_add_state(srvst, server_io_cb, srvst->socks[idx].serv, fd, io_events); } static bool udp_server_cb(struct server_state *srvst, size_t idx) { short revents = srvst->fds[idx].revents; if (!(revents & POLLIN)) return false; return srvst->cb->accept(srvst->cb->ptr, srvst->fds[idx].fd, NULL); } static bool server_quit_cb(struct server_state *srvst, size_t idx) { (void)idx; srvst->got_quit = true; return true; } static void sock_server(struct sock_server *ts, bool (*cb)(struct server_state *srvst, size_t idx)) { struct server_state srvst = { .cb = ts->cb }; int pres = 0; size_t n = 0; char b = 0; sock_server_lock(ts); for (n = 0; n < ts->num_binds; n++) { if (!server_add_state(&srvst, cb, ts->bind + n, ts->bind[n].fd, POLLIN)) goto bad; } if (!server_add_state(&srvst, server_quit_cb, NULL, ts->quit_fd, POLLIN)) goto bad; while (true) { sock_server_unlock(ts); /* * First sleep 5 ms to make it easier to test send timeouts * due to this rate limit. */ poll(NULL, 0, 5); pres = poll(srvst.fds, srvst.nfds, -1); sock_server_lock(ts); if (pres < 0) goto bad; for (n = 0; pres && n < srvst.nfds; n++) { if (srvst.fds[n].revents) { pres--; if (!srvst.socks[n].cb(&srvst, n)) goto bad; } } if (srvst.got_quit) goto out; } bad: ts->error = true; out: for (n = 0; n < srvst.nfds; n++) { /* Don't close accept and quit fds */ if (srvst.fds[n].fd != -1 && srvst.socks[n].serv && srvst.fds[n].fd != srvst.socks[n].serv->fd) { if (close(srvst.fds[n].fd)) warn("sock_server: close(%d)", srvst.fds[n].fd); } } free(srvst.socks); free(srvst.fds); if (read(ts->quit_fd, &b, 1) != 1) ts->error = true; sock_server_unlock(ts); } static void *sock_server_stream(void *arg) { sock_server(arg, tcp_server_accept_cb); return NULL; } static void *sock_server_dgram(void *arg) { sock_server(arg, udp_server_cb); return NULL; } static void sock_server_add_fd(struct sock_server *ts, struct addrinfo *ai) { struct sock_server_bind serv = { }; struct sockaddr_storage sass = { }; struct sockaddr *sa = (struct sockaddr *)&sass; struct sockaddr_in *sain = (struct sockaddr_in *)&sass; struct sockaddr_in6 *sain6 = (struct sockaddr_in6 *)&sass; void *src = NULL; socklen_t len = sizeof(sass); struct sock_server_bind *p = NULL; serv.fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (serv.fd < 0) return; if (bind(serv.fd, ai->ai_addr, ai->ai_addrlen)) goto bad; if (ai->ai_socktype == SOCK_STREAM && listen(serv.fd, 5)) goto bad; if (getsockname(serv.fd, sa, &len)) goto bad; switch (sa->sa_family) { case AF_INET: src = &sain->sin_addr; serv.port = ntohs(sain->sin_port); break; case AF_INET6: src = &sain6->sin6_addr; serv.port = ntohs(sain6->sin6_port); default: goto bad; } if (!inet_ntop(sa->sa_family, src, serv.host, sizeof(serv.host))) goto bad; p = realloc(ts->bind, sizeof(*p) * (ts->num_binds + 1)); if (!p) goto bad; ts->bind = p; p[ts->num_binds] = serv; ts->num_binds++; return; bad: if (close(serv.fd)) warn("sock_server_add_fd: close(%d)", serv.fd); } void sock_server_uninit(struct sock_server *ts) { size_t n = 0; int e = 0; if (ts->stop_fd != -1) { if (close(ts->stop_fd)) warn("sock_server_uninit: close(%d)", ts->stop_fd); ts->stop_fd = -1; e = pthread_join(ts->thr, NULL); if (e) warnx("sock_server_uninit: pthread_join: %s", strerror(e)); } e = pthread_mutex_destroy(&ts->mu); if (e) warnx("sock_server_uninit: pthread_mutex_destroy: %s", strerror(e)); for (n = 0; n < ts->num_binds; n++) if (close(ts->bind[n].fd)) warn("sock_server_uninit: close(%d)", ts->bind[n].fd); free(ts->bind); if (ts->quit_fd != -1 && close(ts->quit_fd)) warn("sock_server_uninit: close(%d)", ts->quit_fd); memset(ts, 0, sizeof(*ts)); ts->quit_fd = -1; ts->stop_fd = -1; } static bool sock_server_init(struct sock_server *ts, struct sock_io_cb *cb, int socktype) { struct addrinfo hints = { }; struct addrinfo *ai = NULL; struct addrinfo *ai0 = NULL; int fd_pair[2] = { }; int e = 0; memset(ts, 0, sizeof(*ts)); ts->quit_fd = -1; ts->stop_fd = -1; ts->cb = cb; e = pthread_mutex_init(&ts->mu, NULL); if (e) { warnx("sock_server_init: pthread_mutex_init: %s", strerror(e)); return false; } hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; hints.ai_socktype = socktype; if (getaddrinfo(NULL, "0", &hints, &ai0)) return false; for (ai = ai0; ai; ai = ai->ai_next) sock_server_add_fd(ts, ai); freeaddrinfo(ai0); if (!ts->num_binds) return false; if (pipe(fd_pair)) { sock_server_uninit(ts); return false; } ts->quit_fd = fd_pair[0]; if (socktype == SOCK_STREAM) e = pthread_create(&ts->thr, NULL, sock_server_stream, ts); else e = pthread_create(&ts->thr, NULL, sock_server_dgram, ts); if (e) { warnx("sock_server_init: pthread_create: %s", strerror(e)); if (close(fd_pair[1])) warn("sock_server_init: close(%d)", fd_pair[1]); sock_server_uninit(ts); return false; } ts->stop_fd = fd_pair[1]; return true; } bool sock_server_init_tcp(struct sock_server *sock_serv, struct sock_io_cb *cb) { return sock_server_init(sock_serv, cb, SOCK_STREAM); } bool sock_server_init_udp(struct sock_server *sock_serv, struct sock_io_cb *cb) { return sock_server_init(sock_serv, cb, SOCK_DGRAM); } void sock_server_lock(struct sock_server *ts) { int e = pthread_mutex_lock(&ts->mu); if (e) errx(1, "sock_server_lock: pthread_mutex_lock: %s", strerror(e)); } void sock_server_unlock(struct sock_server *ts) { int e = pthread_mutex_unlock(&ts->mu); if (e) errx(1, "sock_server_unlock: pthread_mutex_unlock: %s", strerror(e)); } optee_test-4.3.0/host/xtest/sock_server.h000066400000000000000000000017471464074351400205340ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016, Linaro Limited */ #ifndef XTEST_SOCK_SERVER_H #define XTEST_SOCK_SERVER_H #include #include #include struct sock_server_bind { int fd; char host[255]; int port; }; struct sock_server { struct sock_server_bind *bind; size_t num_binds; int quit_fd; int stop_fd; pthread_t thr; pthread_mutex_t mu; bool error; struct sock_io_cb *cb; }; struct sock_io_cb { bool (*accept)(void *ptr, int fd, short *events); bool (*read)(void *ptr, int fd, short *events); bool (*write)(void *ptr, int fd, short *events); void *ptr; }; bool sock_server_init_tcp(struct sock_server *sock_serv, struct sock_io_cb *cb); bool sock_server_init_udp(struct sock_server *sock_serv, struct sock_io_cb *cb); void sock_server_uninit(struct sock_server *sock_serv); void sock_server_lock(struct sock_server *sock_serv); void sock_server_unlock(struct sock_server *sock_serv); #endif /*XTEST_SOCK_SERVER_H*/ optee_test-4.3.0/host/xtest/stats.c000066400000000000000000000247261464074351400173420ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2019, Linaro Limited */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "xtest_helpers.h" #include "xtest_test.h" #include "stats.h" static int usage(void) { fprintf(stderr, "Usage: %s --stats [OPTION]\n", xtest_progname); fprintf(stderr, "Displays statistics from OP-TEE\n"); fprintf(stderr, "Options:\n"); fprintf(stderr, " -h|--help Print this help and exit\n"); fprintf(stderr, " --pager Print pager statistics\n"); fprintf(stderr, " --alloc Print allocation statistics\n"); fprintf(stderr, " --memleak Dump memory leak data on secure console\n"); fprintf(stderr, " --ta Print loaded TAs context\n"); fprintf(stderr, " --time Print REE and TEE time\n"); fprintf(stderr, " --clocks Dump clock tree on secure console\n"); fprintf(stderr, " --regulators Dump regulator tree on secure console\n"); return EXIT_FAILURE; } static void open_sess(TEEC_Context *ctx, TEEC_Session *sess) { TEEC_UUID uuid = STATS_UUID; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t eo = 0; res = TEEC_InitializeContext(NULL, ctx); if (res) errx(EXIT_FAILURE, "TEEC_InitializeContext: %#"PRIx32, res); res = TEEC_OpenSession(ctx, sess, &uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &eo); if (res) errx(EXIT_FAILURE, "TEEC_OpenSession: res %#"PRIx32" err_orig %#"PRIx32, res, eo); } static int close_sess(TEEC_Context *ctx, TEEC_Session *sess) { TEEC_CloseSession(sess); TEEC_FinalizeContext(ctx); return EXIT_SUCCESS; } static int stat_pager(int argc, char *argv[]) { TEEC_Context ctx = { }; TEEC_Session sess = { }; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t eo = 0; TEEC_Operation op = { }; UNUSED(argv); if (argc != 1) return usage(); open_sess(&ctx, &sess); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_NONE); res = TEEC_InvokeCommand(&sess, STATS_CMD_PAGER_STATS, &op, &eo); if (res) errx(EXIT_FAILURE, "TEEC_InvokeCommand: res %#"PRIx32" err_orig %#"PRIx32, res, eo); printf("Pager statistics (Number of):\n"); printf("Unlocked pages: %"PRId32"\n", op.params[0].value.a); printf("Page pool size: %"PRId32"\n", op.params[0].value.b); printf("R/O faults: %"PRId32"\n", op.params[1].value.a); printf("R/W faults: %"PRId32"\n", op.params[1].value.b); printf("Hidden faults: %"PRId32"\n", op.params[2].value.a); printf("Zi pages released: %"PRId32"\n", op.params[2].value.b); return close_sess(&ctx, &sess); } static int stat_alloc(int argc, char *argv[]) { TEEC_Context ctx = { }; TEEC_Session sess = { }; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t eo = 0; TEEC_Operation op = { }; struct pta_stats_alloc *stats = NULL; size_t stats_size_bytes = 0; size_t n = 0; UNUSED(argv); if (argc != 1) return usage(); open_sess(&ctx, &sess); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(&sess, STATS_CMD_ALLOC_STATS, &op, &eo); if (res != TEEC_ERROR_SHORT_BUFFER) errx(EXIT_FAILURE, "TEEC_InvokeCommand: res %#"PRIx32" err_orig %#"PRIx32, res, eo); stats_size_bytes = op.params[1].tmpref.size; if (stats_size_bytes % sizeof(*stats)) errx(EXIT_FAILURE, "STATS_CMD_PAGER_STATS: %zu not a multiple of %zu", stats_size_bytes, sizeof(*stats)); stats = calloc(1, stats_size_bytes); if (!stats) err(EXIT_FAILURE, "calloc(1, %zu)", stats_size_bytes); op.params[1].tmpref.buffer = stats; op.params[1].tmpref.size = stats_size_bytes; res = TEEC_InvokeCommand(&sess, STATS_CMD_ALLOC_STATS, &op, &eo); if (res) errx(EXIT_FAILURE, "TEEC_InvokeCommand: res %#"PRIx32" err_orig %#"PRIx32, res, eo); if (op.params[1].tmpref.size != stats_size_bytes) errx(EXIT_FAILURE, "STATS_CMD_PAGER_STATS: expected size %zu, got %zu", stats_size_bytes, op.params[1].tmpref.size); for (n = 0; n < stats_size_bytes / sizeof(*stats); n++) { if (n) printf("\n"); printf("Pool: %*s\n", (int)strnlen(stats[n].desc, sizeof(stats[n].desc)), stats[n].desc); printf("Bytes allocated: %"PRId32"\n", stats[n].allocated); printf("Max bytes allocated: %"PRId32"\n", stats[n].max_allocated); printf("Size of pool: %"PRId32"\n", stats[n].size); printf("Number of failed allocations: %"PRId32"\n", stats[n].num_alloc_fail); printf("Size of larges allocation failure: %"PRId32"\n", stats[n].biggest_alloc_fail); printf("Total bytes allocated at that failure: %"PRId32"\n", stats[n].biggest_alloc_fail_used); } free(stats); return close_sess(&ctx, &sess); } static int stat_memleak(int argc, char *argv[]) { TEEC_Context ctx = { }; TEEC_Session sess = { }; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t eo = 0; UNUSED(argv); if (argc != 1) return usage(); open_sess(&ctx, &sess); res = TEEC_InvokeCommand(&sess, STATS_CMD_MEMLEAK_STATS, NULL, &eo); if (res) errx(EXIT_FAILURE, "TEEC_InvokeCommand: res %#"PRIx32" err_orig %#"PRIx32, res, eo); return close_sess(&ctx, &sess); } static int stat_loaded_ta(int argc, char *argv[]) { TEEC_Context ctx = { }; TEEC_Session sess = { }; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t eo = 0; TEEC_Operation op = { }; void *buff = NULL; struct pta_stats_ta *stats = NULL; size_t stats_size_bytes = 0; size_t n = 0; uint32_t retry_count = 10; UNUSED(argv); if (argc != 1) return usage(); open_sess(&ctx, &sess); retry: op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(&sess, STATS_CMD_TA_STATS, &op, &eo); if (res != TEEC_ERROR_SHORT_BUFFER) errx(EXIT_FAILURE, "TEEC_InvokeCommand: res %#"PRIx32" err_orig %#"PRIx32, res, eo); stats_size_bytes = op.params[0].tmpref.size; if (stats_size_bytes == 0) { printf("No loaded TA found"); goto out; } if (stats_size_bytes % sizeof(*stats)) errx(EXIT_FAILURE, "STATS_CMD_TA_STATS: %zu not a multiple of %zu", stats_size_bytes, sizeof(*stats)); /* Always allocate two more in case TA loaded after size querying */ stats_size_bytes += 2 * sizeof(*stats); stats = realloc(buff, stats_size_bytes); if (!stats) errx(EXIT_FAILURE, "realloc(%zu) failed", stats_size_bytes); buff = stats; op.params[0].tmpref.buffer = stats; op.params[0].tmpref.size = stats_size_bytes; res = TEEC_InvokeCommand(&sess, STATS_CMD_TA_STATS, &op, &eo); if (res == TEEC_ERROR_SHORT_BUFFER && retry_count > 0) { retry_count--; goto retry; } if (res) errx(EXIT_FAILURE, "TEEC_InvokeCommand: res %#"PRIx32" err_orig %#"PRIx32, res, eo); for (n = 0; n < op.params[0].tmpref.size / sizeof(*stats); n++) { if (n) printf("\n"); printf("ta(%08x-%04x-%04x-%02x%02x%02x%02x%02x%02x%02x%02x)\n", stats[n].uuid.timeLow, stats[n].uuid.timeMid, stats[n].uuid.timeHiAndVersion, stats[n].uuid.clockSeqAndNode[0], stats[n].uuid.clockSeqAndNode[1], stats[n].uuid.clockSeqAndNode[2], stats[n].uuid.clockSeqAndNode[3], stats[n].uuid.clockSeqAndNode[4], stats[n].uuid.clockSeqAndNode[5], stats[n].uuid.clockSeqAndNode[6], stats[n].uuid.clockSeqAndNode[7]); printf("\tpanicked(%"PRId32") -- True if TA has panicked\n", stats[n].panicked); printf("\tsession number(%"PRId32")\n", stats[n].sess_num); printf("\tHeap Status:\n"); printf("\t\tBytes allocated: %"PRId32"\n", stats[n].heap.allocated); printf("\t\tMax bytes allocated: %"PRId32"\n", stats[n].heap.max_allocated); printf("\t\tSize of pool: %"PRId32"\n", stats[n].heap.size); printf("\t\tNumber of failed allocations: %"PRId32"\n", stats[n].heap.num_alloc_fail); printf("\t\tSize of larges allocation failure: %"PRId32"\n", stats[n].heap.biggest_alloc_fail); printf("\t\tTotal bytes allocated at that failure: %"PRId32"\n", stats[n].heap.biggest_alloc_fail_used); } out: free(buff); return close_sess(&ctx, &sess); } static int stat_system_time(int argc, char *argv[]) { TEEC_Context ctx = { }; TEEC_Session sess = { }; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t eo = 0; TEEC_Operation op = { }; UNUSED(argv); if (argc != 1) return usage(); open_sess(&ctx, &sess); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(&sess, STATS_CMD_GET_TIME, &op, &eo); if (res != TEEC_SUCCESS) errx(EXIT_FAILURE, "TEEC_InvokeCommand: res %#"PRIx32" err_orig %#"PRIx32, res, eo); printf("REE time: %"PRId32" seconds, %"PRId32" milliseconds\n", op.params[0].value.a, op.params[0].value.b); printf("TEE time: %"PRId32" seconds, %"PRId32" milliseconds\n", op.params[1].value.a, op.params[1].value.b); return close_sess(&ctx, &sess); } static int stat_driver_info(int argc, int driver_type) { TEEC_Context ctx = { }; TEEC_Session sess = { }; TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t eo = 0; TEEC_Operation op = { }; if (argc != 1) return usage(); open_sess(&ctx, &sess); op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); op.params[0].value.a = driver_type; res = TEEC_InvokeCommand(&sess, STATS_CMD_PRINT_DRIVER_INFO, &op, &eo); if (res != TEEC_SUCCESS) errx(EXIT_FAILURE, "TEEC_InvokeCommand(): res %#"PRIx32" err_orig %#"PRIx32, res, eo); return close_sess(&ctx, &sess); } int stats_runner_cmd_parser(int argc, char *argv[]) { if (argc > 1) { if (!strcmp(argv[1], "--pager")) return stat_pager(argc - 1, argv + 1); if (!strcmp(argv[1], "--alloc")) return stat_alloc(argc - 1, argv + 1); if (!strcmp(argv[1], "--memleak")) return stat_memleak(argc - 1, argv + 1); if (!strcmp(argv[1], "--ta")) return stat_loaded_ta(argc - 1, argv + 1); if (!strcmp(argv[1], "--time")) return stat_system_time(argc - 1, argv + 1); if (!strcmp(argv[1], "--clocks")) return stat_driver_info(argc - 1, STATS_DRIVER_TYPE_CLOCK); if (!strcmp(argv[1], "--regulators")) return stat_driver_info(argc - 1, STATS_DRIVER_TYPE_REGULATOR); } return usage(); } optee_test-4.3.0/host/xtest/stats.h000066400000000000000000000003021464074351400173270ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2019, Linaro Limited * */ #ifndef STATS_H #define STATS_H int stats_runner_cmd_parser(int argc, char *argv[]); #endif /*STATS_H*/ optee_test-4.3.0/host/xtest/symm_cipher_perf.c000066400000000000000000000472421464074351400215350ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "crypto_common.h" #include "xtest_helpers.h" #include "xtest_test.h" #ifdef CFG_SECURE_DATA_PATH #include "sdp_basic.h" static int input_sdp_fd; static int output_sdp_fd; static const char *heap_name = DEFAULT_HEAP_NAME; #endif /* CFG_SECURE_DATA_PATH */ /* * Type of buffer used for the performance tests * * BUFFER_UNSPECIFIED test did not specify target buffer to use * BUFFER_SHM_ALLOCATED buffer allocated in TEE SHM. * BUFFER_SECURE_REGISTER secure buffer, registered to TEE at TA invoc. * BUFFER_SECURE_PREREGISTERED secure buffer, registered once to TEE. */ enum buffer_types { BUFFER_UNSPECIFIED = 0, BUFFER_SHM_ALLOCATED, BUFFER_SECURE_REGISTER, /* requires SDP */ BUFFER_SECURE_PREREGISTERED, /* requires SDP */ }; static enum buffer_types input_buffer = BUFFER_UNSPECIFIED; static enum buffer_types output_buffer = BUFFER_UNSPECIFIED; static const char *buf_type_str(int buf_type) { static const char sec_prereg[] = "Secure memory, registered once to TEE"; static const char sec_reg[] = "Secure memory, registered at each TEE invoke"; static const char ns_alloc[] = "Non secure memory"; static const char inval[] = "UNEXPECTED"; switch (buf_type) { case BUFFER_SECURE_PREREGISTERED: return sec_prereg; case BUFFER_SECURE_REGISTER: return sec_reg; case BUFFER_SHM_ALLOCATED: return ns_alloc; default: return inval; } } /* Are we running a SDP test: default to NO (is_sdp_test == 0) */ static int is_sdp_test; /* * TEE client stuff */ static TEEC_Context ctx; static TEEC_Session sess; /* * in_shm and out_shm are both IN/OUT to support dynamically choosing * in_place == 1 or in_place == 0. */ static TEEC_SharedMemory in_shm = { .flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT }; static TEEC_SharedMemory out_shm = { .flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT }; static void errx(const char *msg, TEEC_Result res, uint32_t *orig) { fprintf(stderr, "%s: 0x%08x", msg, res); if (orig) fprintf(stderr, " (orig=%d)", (int)*orig); fprintf(stderr, "\n"); exit (1); } static void check_res(TEEC_Result res, const char *errmsg, uint32_t *orig) { if (res != TEEC_SUCCESS) errx(errmsg, res, orig); } static void open_ta(void) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_UUID uuid = TA_CRYPTO_PERF_UUID; uint32_t err_origin = 0; res = TEEC_InitializeContext(NULL, &ctx); check_res(res, "TEEC_InitializeContext", NULL); res = TEEC_OpenSession(&ctx, &sess, &uuid, TEEC_LOGIN_PUBLIC, NULL, NULL, &err_origin); check_res(res, "TEEC_OpenSession", &err_origin); } /* * Statistics * * We want to compute min, max, mean and standard deviation of processing time */ struct statistics { int n; double m; double M2; double min; double max; int initialized; }; /* Take new sample into account (Knuth/Welford algorithm) */ static void update_stats(struct statistics *s, uint64_t t) { double x = (double)t; double delta = x - s->m; s->n++; s->m += delta/s->n; s->M2 += delta*(x - s->m); if (!s->initialized) { s->min = s->max = x; s->initialized = 1; } else { if (s->min > x) s->min = x; if (s->max < x) s->max = x; } } static double stddev(struct statistics *s) { if (s->n < 2) return NAN; return sqrt(s->M2/s->n); } static const char *cipher_str(uint32_t algo) { switch (algo) { case TA_AES_ECB: case TA_AES_CBC: case TA_AES_CTR: case TA_AES_XTS: case TA_AES_GCM: return "AES"; case TA_SM4_ECB: case TA_SM4_CBC: case TA_SM4_CTR: case TA_SM4_XTS: return "SM4"; default: return "???"; } } static const char *mode_str(uint32_t algo) { switch (algo) { case TA_AES_ECB: case TA_SM4_ECB: return "ECB"; case TA_AES_CBC: case TA_SM4_CBC: return "CBC"; case TA_AES_CTR: case TA_SM4_CTR: return "CTR"; case TA_AES_XTS: case TA_SM4_XTS: return "XTS"; case TA_AES_GCM: return "GCM"; default: return "???"; } } #define _TO_STR(x) #x #define TO_STR(x) _TO_STR(x) static void usage(const char *applet_optname, int keysize, int algo, size_t size, size_t unit, int warmup, unsigned int l, unsigned int n) { fprintf(stderr, "Usage: %s %s [-h]\n", xtest_progname, applet_optname); fprintf(stderr, "Usage: %s %s [-d] [-i] [-k SIZE]", xtest_progname, applet_optname); fprintf(stderr, " [-l LOOP] [-c CIPHER] [-m MODE] [-n LOOP] [-r|--no-inited] [-s SIZE]"); fprintf(stderr, " [-v [-v]] [-w SEC]"); #ifdef CFG_SECURE_DATA_PATH fprintf(stderr, " [--sdp [-Id|-Ir|-IR] [-Od|-Or|-OR]]"); #endif fprintf(stderr, "\n"); fprintf(stderr, "AES/SM4 performance testing tool for OP-TEE\n"); fprintf(stderr, "\n"); fprintf(stderr, "Options:\n"); fprintf(stderr, " -d Test AES decryption instead of encryption\n"); fprintf(stderr, " -h|--help Print this help and exit\n"); fprintf(stderr, " -i|--in-place Use same buffer for input and output (decrypt in place)\n"); fprintf(stderr, " -k SIZE Key size in bits: 128, 192 or 256 [%u]\n", keysize); fprintf(stderr, " -l LOOP Inner loop iterations [%u]\n", l); fprintf(stderr, " -c CIPHER cipher: AES, SM4 [%s]\n", cipher_str(algo)); fprintf(stderr, " -m MODE mode: ECB, CBC, CTR, XTS, GCM [%s]\n", mode_str(algo)); fprintf(stderr, " -n LOOP Outer test loop iterations [%u]\n", n); fprintf(stderr, " --not-inited Do not initialize input buffer content.\n"); fprintf(stderr, " -r|--random Get input data from /dev/urandom (default: all zeros)\n"); fprintf(stderr, " -s SIZE Test buffer size in bytes [%zu]\n", size); fprintf(stderr, " -u UNIT Divide buffer in UNIT-byte increments (+ remainder)\n"); fprintf(stderr, " (0 to ignore) [%zu]\n", unit); fprintf(stderr, " -v Be verbose (use twice for greater effect)\n"); fprintf(stderr, " -w|--warmup SEC Warm-up time in seconds: execute a busy loop before\n"); fprintf(stderr, " the test to mitigate the effects of cpufreq etc. [%u]\n", warmup); #ifdef CFG_SECURE_DATA_PATH fprintf(stderr, "Secure data path specific options:\n"); fprintf(stderr, " --sdp Run the AES test in the scope fo a Secure Data Path test TA\n"); fprintf(stderr, " --heap-name NAME Set heap name where to allocate secure buffers [%s]\n", heap_name); fprintf(stderr, " -I... AES input test buffer management:\n"); fprintf(stderr, " -Id allocate a non secure buffer (default)\n"); fprintf(stderr, " -Ir allocate a secure buffer, registered at each TA invocation\n"); fprintf(stderr, " -IR allocate a secure buffer, registered once in TEE\n"); fprintf(stderr, " -O... AES output test buffer management:\n"); fprintf(stderr, " -Od allocate a non secure buffer (default if \"--sdp\" is not set)\n"); fprintf(stderr, " -Or allocate a secure buffer, registered at each TA invocation\n"); fprintf(stderr, " -OR allocate a secure buffer, registered once in TEE (default if \"--sdp\")\n"); #endif } #ifdef CFG_SECURE_DATA_PATH static void register_shm(TEEC_SharedMemory *shm, int fd) { TEEC_Result res = TEEC_RegisterSharedMemoryFileDescriptor(&ctx, shm, fd); check_res(res, "TEEC_RegisterSharedMemoryFileDescriptor", NULL); } #endif static void allocate_shm(TEEC_SharedMemory *shm, size_t sz) { TEEC_Result res = TEEC_ERROR_GENERIC; shm->buffer = NULL; shm->size = sz; res = TEEC_AllocateSharedMemory(&ctx, shm); check_res(res, "TEEC_AllocateSharedMemory", NULL); } /* initial test buffer allocation (eventual registering to TEEC) */ static void alloc_buffers(size_t sz, int in_place, int verbosity) { (void)verbosity; if (input_buffer == BUFFER_SHM_ALLOCATED) allocate_shm(&in_shm, sz); #ifdef CFG_SECURE_DATA_PATH else { input_sdp_fd = allocate_buffer(sz, heap_name, verbosity); if (input_buffer == BUFFER_SECURE_PREREGISTERED) { register_shm(&in_shm, input_sdp_fd); close(input_sdp_fd); } } #endif if (in_place) return; if (output_buffer == BUFFER_SHM_ALLOCATED) allocate_shm(&out_shm, sz); #ifdef CFG_SECURE_DATA_PATH else { output_sdp_fd = allocate_buffer(sz, heap_name, verbosity); if (output_buffer == BUFFER_SECURE_PREREGISTERED) { register_shm(&out_shm, output_sdp_fd); close(output_sdp_fd); } } #endif } static void free_shm(int in_place) { (void)in_place; if (input_buffer == BUFFER_SHM_ALLOCATED && output_buffer == BUFFER_SHM_ALLOCATED) { TEEC_ReleaseSharedMemory(&in_shm); TEEC_ReleaseSharedMemory(&out_shm); return; } #ifdef CFG_SECURE_DATA_PATH if (input_buffer == BUFFER_SECURE_PREREGISTERED) close(input_sdp_fd); if (input_buffer != BUFFER_SECURE_REGISTER) TEEC_ReleaseSharedMemory(&in_shm); if (in_place) return; if (output_buffer == BUFFER_SECURE_PREREGISTERED) close(output_sdp_fd); if (output_buffer != BUFFER_SECURE_REGISTER) TEEC_ReleaseSharedMemory(&out_shm); #endif /* CFG_SECURE_DATA_PATH */ } static ssize_t read_random(void *in, size_t rsize) { static int rnd; ssize_t s = 0; if (!rnd) { rnd = open("/dev/urandom", O_RDONLY); if (rnd < 0) { perror("open"); return 1; } } s = read(rnd, in, rsize); if (s < 0) { perror("read"); return 1; } if ((size_t)s != rsize) { printf("read: requested %zu bytes, got %zd\n", rsize, s); } return 0; } static void get_current_time(struct timespec *ts) { if (clock_gettime(CLOCK_MONOTONIC, ts) < 0) { perror("clock_gettime"); exit(1); } } static uint64_t timespec_to_ns(struct timespec *ts) { return ((uint64_t)ts->tv_sec * 1000000000) + ts->tv_nsec; } static uint64_t timespec_diff_ns(struct timespec *start, struct timespec *end) { return timespec_to_ns(end) - timespec_to_ns(start); } static void prepare_key(int decrypt, int keysize, int algo) { TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t cmd = TA_CRYPTO_PERF_CMD_CIPHER_PREPARE_KEY; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); op.params[0].value.a = decrypt; op.params[0].value.b = keysize; op.params[1].value.a = algo; res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand", &ret_origin); } static void do_warmup(int warmup) { struct timespec t0 = { }; struct timespec t = { }; int i = 0; get_current_time(&t0); do { for (i = 0; i < 100000; i++) ; get_current_time(&t); } while (timespec_diff_ns(&t0, &t) < (uint64_t)warmup * 1000000000); } static const char *yesno(int v) { return (v ? "yes" : "no"); } static double mb_per_sec(size_t size, double usec) { return (1000000000/usec)*((double)size/(1024*1024)); } static void feed_input(void *in, size_t size, int random) { if (random) read_random(in, size); else memset(in, 0, size); } static void run_feed_input(void *in, size_t size, int random) { if (!is_sdp_test) { feed_input(in, size, random); return; } #ifdef CFG_SECURE_DATA_PATH if (input_buffer == BUFFER_SHM_ALLOCATED) { feed_input(in, size, random); } else { char *data = mmap(NULL, size, PROT_WRITE, MAP_SHARED, input_sdp_fd, 0); if (data == MAP_FAILED) { perror("failed to map input buffer"); exit(-1); } feed_input(data, size, random); munmap(data, size); } #endif } void aes_perf_run_test(int algo, int keysize, int decrypt, size_t size, size_t unit, unsigned int n, unsigned int l, int input_data_init, int in_place, int warmup, int verbosity) { struct statistics stats = { }; struct timespec ts = { }; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; int n0 = n; double sd = 0; uint32_t cmd = is_sdp_test ? TA_CRYPTO_PERF_CMD_CIPHER_PROCESS_SDP : TA_CRYPTO_PERF_CMD_CIPHER_PROCESS; if (input_buffer == BUFFER_UNSPECIFIED) input_buffer = BUFFER_SHM_ALLOCATED; if (output_buffer == BUFFER_UNSPECIFIED) { if (is_sdp_test) output_buffer = BUFFER_SECURE_PREREGISTERED; else output_buffer = BUFFER_SHM_ALLOCATED; } if (clock_getres(CLOCK_MONOTONIC, &ts) < 0) { perror("clock_getres"); return; } vverbose("Clock resolution is %jd ns\n", (intmax_t)ts.tv_sec * 1000000000 + ts.tv_nsec); vverbose("input test buffer: %s\n", buf_type_str(input_buffer)); vverbose("output test buffer: %s\n", buf_type_str(output_buffer)); open_ta(); prepare_key(decrypt, keysize, algo); alloc_buffers(size, in_place, verbosity); if (input_data_init == CRYPTO_USE_ZEROS) run_feed_input(in_shm.buffer, size, 0); /* Using INOUT to handle the case in_place == 1 */ op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_MEMREF_PARTIAL_INOUT, TEEC_VALUE_INPUT, TEEC_NONE); op.params[0].memref.parent = &in_shm; op.params[0].memref.size = size; op.params[1].memref.parent = in_place ? &in_shm : &out_shm; op.params[1].memref.size = size; op.params[2].value.a = l; op.params[2].value.b = unit; verbose("Starting test: %s, %scrypt, keysize=%u bits, size=%zu bytes, ", mode_str(algo), (decrypt ? "de" : "en"), keysize, size); verbose("random=%s, ", yesno(input_data_init == CRYPTO_USE_RANDOM)); verbose("in place=%s, ", yesno(in_place)); verbose("inner loops=%u, loops=%u, warm-up=%u s, ", l, n, warmup); verbose("unit=%zu\n", unit); if (warmup) do_warmup(warmup); while (n-- > 0) { TEEC_Result res = TEEC_ERROR_GENERIC; uint32_t ret_origin = 0; struct timespec t0 = { }; struct timespec t1 = { }; if (input_data_init == CRYPTO_USE_RANDOM) run_feed_input(in_shm.buffer, size, 1); get_current_time(&t0); #ifdef CFG_SECURE_DATA_PATH if (input_buffer == BUFFER_SECURE_REGISTER) register_shm(&in_shm, input_sdp_fd); if (output_buffer == BUFFER_SECURE_REGISTER) register_shm(&out_shm, output_sdp_fd); #endif res = TEEC_InvokeCommand(&sess, cmd, &op, &ret_origin); check_res(res, "TEEC_InvokeCommand", &ret_origin); #ifdef CFG_SECURE_DATA_PATH if (input_buffer == BUFFER_SECURE_REGISTER) TEEC_ReleaseSharedMemory(&in_shm); if (output_buffer == BUFFER_SECURE_REGISTER) TEEC_ReleaseSharedMemory(&out_shm); #endif get_current_time(&t1); update_stats(&stats, timespec_diff_ns(&t0, &t1)); if (n % (n0 / 10) == 0) vverbose("#"); } vverbose("\n"); sd = stddev(&stats); printf("min=%gus max=%gus mean=%gus stddev=%gus (cv %g%%) (%gMiB/s)\n", stats.min / 1000, stats.max / 1000, stats.m / 1000, sd / 1000, 100 * sd / stats.m, mb_per_sec(size, stats.m)); verbose("2-sigma interval: %g..%gus (%g..%gMiB/s)\n", (stats.m - 2 * sd) / 1000, (stats.m + 2 * sd) / 1000, mb_per_sec(size, stats.m + 2 * sd), mb_per_sec(size, stats.m - 2 * sd)); free_shm(in_place); } #define NEXT_ARG(i) \ do { \ if (++i == argc) { \ fprintf(stderr, "%s %s: %s: missing argument\n", \ xtest_progname, argv[0], argv[i - 1]); \ return 1; \ } \ } while (0); #define USAGE() usage(argv[0], keysize, algo, size, unit, warmup, l, n) static int get_symm_algo(int cipher, int mode) { if (cipher == AES) { switch (mode) { case ECB: return TA_AES_ECB; case CBC: return TA_AES_CBC; case CTR: return TA_AES_CTR; case XTS: return TA_AES_XTS; case GCM: return TA_AES_GCM; default: return -1; } } else if (cipher == SM4) { switch (mode) { case ECB: return TA_SM4_ECB; case CBC: return TA_SM4_CBC; case CTR: return TA_SM4_CTR; case XTS: return TA_SM4_XTS; default: return -1; } } else { return -1; } } int aes_perf_runner_cmd_parser(int argc, char *argv[]) { int i = 0; /* * Command line parameters */ size_t size = 1024; /* Buffer size (-s) */ size_t unit = CRYPTO_DEF_UNIT_SIZE; /* Divide buffer (-u) */ unsigned int n = CRYPTO_DEF_COUNT; /*Number of measurements (-n)*/ unsigned int l = CRYPTO_DEF_LOOPS; /* Inner loops (-l) */ int verbosity = CRYPTO_DEF_VERBOSITY; /* Verbosity (-v) */ int decrypt = 0; /* Encrypt by default, -d to decrypt */ int keysize = AES_128; /* AES key size (-k) */ int cipher = AES; int mode = ECB; int algo = -1; /* Get input data from /dev/urandom (-r) */ int input_data_init = CRYPTO_USE_ZEROS; /* Use same buffer for in and out (-i) */ int in_place = AES_PERF_INPLACE; int warmup = CRYPTO_DEF_WARMUP; /* Start with a 2-second busy loop (-w) */ /* Parse command line */ for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { USAGE(); return 0; } } for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-d")) { decrypt = 1; } else if (!strcmp(argv[i], "--in-place") || !strcmp(argv[i], "-i")) { in_place = 1; } else if (!strcmp(argv[i], "-k")) { NEXT_ARG(i); keysize = atoi(argv[i]); if (keysize != AES_128 && keysize != AES_192 && keysize != AES_256) { fprintf(stderr, "%s %s: invalid key size\n", xtest_progname, argv[0]); USAGE(); return 1; } } else if (!strcmp(argv[i], "-l")) { NEXT_ARG(i); l = atoi(argv[i]); } else if (!strcmp(argv[i], "-c")) { NEXT_ARG(i); if (!strcasecmp(argv[i], "SM4")) cipher = SM4; else if (!strcasecmp(argv[i], "AES")) cipher = AES; else { fprintf(stderr, "%s %s, invalid cipher\n", xtest_progname, argv[0]); USAGE(); return 1; } } else if (!strcmp(argv[i], "-m")) { NEXT_ARG(i); if (!strcasecmp(argv[i], "ECB")) mode = ECB; else if (!strcasecmp(argv[i], "CBC")) mode = CBC; else if (!strcasecmp(argv[i], "CTR")) mode = CTR; else if (!strcasecmp(argv[i], "XTS")) mode = XTS; else if (!strcasecmp(argv[i], "GCM")) mode = GCM; else { fprintf(stderr, "%s %s, invalid mode\n", xtest_progname, argv[0]); USAGE(); return 1; } } else if (!strcmp(argv[i], "-n")) { NEXT_ARG(i); n = atoi(argv[i]); } else if (!strcmp(argv[i], "--random") || !strcmp(argv[i], "-r")) { if (input_data_init == CRYPTO_NOT_INITED) { perror("--random is not compatible with --not-inited\n"); USAGE(); return 1; } input_data_init = CRYPTO_USE_RANDOM; } else if (!strcmp(argv[i], "--not-inited")) { if (input_data_init == CRYPTO_USE_RANDOM) { perror("--random is not compatible with --not-inited\n"); USAGE(); return 1; } input_data_init = CRYPTO_NOT_INITED; } else if (!strcmp(argv[i], "-s")) { NEXT_ARG(i); size = atoi(argv[i]); #ifdef CFG_SECURE_DATA_PATH } else if (!strcmp(argv[i], "--sdp")) { is_sdp_test = 1; } else if (!strcmp(argv[i], "-IR")) { input_buffer = BUFFER_SECURE_PREREGISTERED; } else if (!strcmp(argv[i], "-OR")) { output_buffer = BUFFER_SECURE_PREREGISTERED; } else if (!strcmp(argv[i], "-Ir")) { input_buffer = BUFFER_SECURE_REGISTER; } else if (!strcmp(argv[i], "-Or")) { output_buffer = BUFFER_SECURE_REGISTER; } else if (!strcmp(argv[i], "-Id")) { input_buffer = BUFFER_SHM_ALLOCATED; } else if (!strcmp(argv[i], "-Od")) { output_buffer = BUFFER_SHM_ALLOCATED; } else if (!strcmp(argv[i], "--heap-name")) { NEXT_ARG(i); heap_name = argv[i]; #endif // CFG_SECURE_DATA_PATH } else if (!strcmp(argv[i], "-u")) { NEXT_ARG(i); unit = atoi(argv[i]); } else if (!strcmp(argv[i], "-v")) { verbosity++; } else if (!strcmp(argv[i], "--warmup") || !strcmp(argv[i], "-w")) { NEXT_ARG(i); warmup = atoi(argv[i]); } else { fprintf(stderr, "%s %s: invalid argument: %s\n", xtest_progname, argv[0], argv[i]); USAGE(); return 1; } } algo = get_symm_algo(cipher, mode); assert(algo != -1); if (size & (16 - 1)) { fprintf(stderr, "invalid buffer size argument, must be a multiple of 16\n\n"); USAGE(); return 1; } aes_perf_run_test(algo, keysize, decrypt, size, unit, n, l, input_data_init, in_place, warmup, verbosity); return 0; } optee_test-4.3.0/host/xtest/xtest_helpers.c000066400000000000000000000276021464074351400210710ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #include #include #include #include #include #include #include #include #include #include "xtest_helpers.h" #include "xtest_test.h" /* Round up the even multiple of size, size has to be a multiple of 2 */ #define ROUNDUP(v, size) (((v) + (size - 1)) & ~(size - 1)) TEEC_Context xtest_teec_ctx; TEEC_Result xtest_teec_ctx_init(void) { return TEEC_InitializeContext(xtest_tee_name, &xtest_teec_ctx); } TEEC_Result xtest_teec_open_session(TEEC_Session *session, const TEEC_UUID *uuid, TEEC_Operation *op, uint32_t *ret_orig) { return TEEC_OpenSession(&xtest_teec_ctx, session, uuid, TEEC_LOGIN_PUBLIC, NULL, op, ret_orig); } void xtest_teec_ctx_deinit(void) { TEEC_FinalizeContext(&xtest_teec_ctx); } TEEC_Result ta_crypt_cmd_allocate_operation(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle *oph, uint32_t algo, uint32_t mode, uint32_t max_key_size) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = 0; op.params[0].value.b = algo; op.params[1].value.a = mode; op.params[1].value.b = max_key_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INOUT, TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ALLOCATE_OPERATION, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } if (res == TEEC_SUCCESS) *oph = (TEE_OperationHandle)(uintptr_t)op.params[0].value.a; return res; } TEEC_Result ta_crypt_cmd_allocate_transient_object(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectType obj_type, uint32_t max_obj_size, TEE_ObjectHandle *o) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = obj_type; op.params[0].value.b = max_obj_size; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ALLOCATE_TRANSIENT_OBJECT, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } if (res == TEEC_SUCCESS) *o = (TEE_ObjectHandle)(uintptr_t)op.params[1].value.a; return res; } void xtest_add_attr(size_t *attr_count, TEE_Attribute *attrs, uint32_t attr_id, const void *buf, size_t len) { attrs[*attr_count].attributeID = attr_id; attrs[*attr_count].content.ref.buffer = (void *)buf; attrs[*attr_count].content.ref.length = len; (*attr_count)++; } void xtest_add_attr_value(size_t *attr_count, TEE_Attribute *attrs, uint32_t attr_id, uint32_t value_a, uint32_t value_b) { attrs[*attr_count].attributeID = attr_id; attrs[*attr_count].content.value.a = value_a; attrs[*attr_count].content.value.b = value_b; (*attr_count)++; } struct tee_attr_packed { uint32_t attr_id; uint32_t a; uint32_t b; }; TEE_Result pack_attrs(const TEE_Attribute *attrs, uint32_t attr_count, uint8_t **buf, size_t *blen) { struct tee_attr_packed *a = NULL; uint8_t *b = NULL; size_t bl = 0; size_t n = 0; *buf = NULL; *blen = 0; if (attr_count == 0) return TEE_SUCCESS; bl = sizeof(uint32_t) + sizeof(struct tee_attr_packed) * attr_count; for (n = 0; n < attr_count; n++) { if ((attrs[n].attributeID & TEE_ATTR_BIT_VALUE) != 0) continue; /* Only memrefs need to be updated */ if (!attrs[n].content.ref.buffer) continue; /* Make room for padding */ bl += ROUNDUP(attrs[n].content.ref.length, 4); } b = calloc(1, bl); if (!b) return TEE_ERROR_OUT_OF_MEMORY; *buf = b; *blen = bl; *(uint32_t *)(void *)b = attr_count; b += sizeof(uint32_t); a = (struct tee_attr_packed *)(void *)b; b += sizeof(struct tee_attr_packed) * attr_count; for (n = 0; n < attr_count; n++) { a[n].attr_id = attrs[n].attributeID; if (attrs[n].attributeID & TEE_ATTR_BIT_VALUE) { a[n].a = attrs[n].content.value.a; a[n].b = attrs[n].content.value.b; continue; } a[n].b = attrs[n].content.ref.length; if (!attrs[n].content.ref.buffer) { a[n].a = 0; continue; } memcpy(b, attrs[n].content.ref.buffer, attrs[n].content.ref.length); /* Make buffer pointer relative to *buf */ a[n].a = (uint32_t)(uintptr_t)(b - *buf); /* Round up to good alignment */ b += ROUNDUP(attrs[n].content.ref.length, 4); } return TEE_SUCCESS; } TEEC_Result ta_crypt_cmd_populate_transient_object(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle o, const TEE_Attribute *attrs, uint32_t attr_count) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; uint8_t *buf = NULL; size_t blen = 0; res = pack_attrs(attrs, attr_count, &buf, &blen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; assert((uintptr_t)o <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)o; op.params[1].tmpref.buffer = buf; op.params[1].tmpref.size = blen; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_POPULATE_TRANSIENT_OBJECT, &op, &ret_orig); if (res != TEEC_SUCCESS && res != TEEC_ERROR_TARGET_DEAD) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } free(buf); return res; } TEE_Result ta_crypt_cmd_set_operation_key(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, TEE_ObjectHandle key) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; assert((uintptr_t)key <= UINT32_MAX); op.params[0].value.b = (uint32_t)(uintptr_t)key; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_SET_OPERATION_KEY, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } TEEC_Result ta_crypt_cmd_free_transient_object(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle o) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)o <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)o; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_FREE_TRANSIENT_OBJECT, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } TEEC_Result ta_crypt_cmd_derive_key(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, TEE_ObjectHandle o, const TEE_Attribute *params, uint32_t paramCount) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; uint8_t *buf = NULL; size_t blen = 0; res = pack_attrs(params, paramCount, &buf, &blen); if (!ADBG_EXPECT_TEEC_SUCCESS(c, res)) return res; assert((uintptr_t)oph <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)oph; assert((uintptr_t)o <= UINT32_MAX); op.params[0].value.b = (uint32_t)(uintptr_t)o; op.params[1].tmpref.buffer = buf; op.params[1].tmpref.size = blen; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DERIVE_KEY, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } free(buf); return res; } TEEC_Result ta_crypt_cmd_get_object_buffer_attribute(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle o, uint32_t attr_id, void *buf, size_t *blen) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; assert((uintptr_t)o <= UINT32_MAX); op.params[0].value.a = (uint32_t)(uintptr_t)o; op.params[0].value.b = attr_id; op.params[1].tmpref.buffer = buf; op.params[1].tmpref.size = *blen; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GET_OBJECT_BUFFER_ATTRIBUTE, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } if (res == TEEC_SUCCESS) *blen = op.params[1].tmpref.size; return res; } TEEC_Result ta_crypt_cmd_free_operation(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; op.params[0].value.a = (uint32_t)(uintptr_t)oph; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_FREE_OPERATION, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); } return res; } bool ta_crypt_cmd_is_algo_supported(ADBG_Case_t *c, TEEC_Session *s, uint32_t algo, uint32_t element) { TEEC_Result res = TEEC_ERROR_GENERIC; TEEC_Operation op = TEEC_OPERATION_INITIALIZER; uint32_t ret_orig = 0; TEEC_Result st = TEEC_ERROR_GENERIC; op.params[0].value.a = algo; op.params[0].value.b = element; op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE); res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_IS_ALGO_SUPPORTED, &op, &ret_orig); if (res != TEEC_SUCCESS) { (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP, ret_orig); return res; } st = op.params[1].value.a; ADBG_EXPECT_TRUE(c, st == TEEC_SUCCESS || st == TEEC_ERROR_NOT_SUPPORTED); if (st == TEE_SUCCESS) return true; return false; } TEEC_Result ta_os_test_cmd_client_identity(TEEC_Session *session, uint32_t *login, TEEC_UUID *client_uuid) { TEEC_Operation operation = { }; TEEC_Result result = TEEC_ERROR_GENERIC; operation.params[1].tmpref.buffer = client_uuid; operation.params[1].tmpref.size = sizeof(*client_uuid); operation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE, TEEC_NONE); result = TEEC_InvokeCommand(session, TA_OS_TEST_CMD_CLIENT_IDENTITY, &operation, NULL); if (result != TEEC_SUCCESS) return result; *login = operation.params[0].value.a; return TEEC_SUCCESS; } void xtest_mutex_init(pthread_mutex_t *mutex) { int e = pthread_mutex_init(mutex, NULL); if (e) errx(1, "pthread_mutex_init: %s", strerror(e)); } void xtest_mutex_destroy(pthread_mutex_t *mutex) { int e = pthread_mutex_destroy(mutex); if (e) errx(1, "pthread_mutex_destroy: %s", strerror(e)); } void xtest_mutex_lock(pthread_mutex_t *mutex) { int e = pthread_mutex_lock(mutex); if (e) errx(1, "pthread_mutex_lock: %s", strerror(e)); } void xtest_mutex_unlock(pthread_mutex_t *mutex) { int e = pthread_mutex_unlock(mutex); if (e) errx(1, "pthread_mutex_unlock: %s", strerror(e)); } void xtest_barrier_init(pthread_barrier_t *barrier, unsigned count) { int e = pthread_barrier_init(barrier, NULL, count); if (e) errx(1, "pthread_barrier_init: %s", strerror(e)); } void xtest_barrier_destroy(pthread_barrier_t *barrier) { int e = pthread_barrier_destroy(barrier); if (e) errx(1, "pthread_barrier_destroy: %s", strerror(e)); } int xtest_barrier_wait(pthread_barrier_t *barrier) { int e = pthread_barrier_wait(barrier); if (e && e != PTHREAD_BARRIER_SERIAL_THREAD) errx(1, "pthread _barrier_wait: %s", strerror(e)); return e; } optee_test-4.3.0/host/xtest/xtest_helpers.h000066400000000000000000000064631464074351400211000ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #ifndef XTEST_HELPERS_H #define XTEST_HELPERS_H #include #include #include #include #include #include extern unsigned int level; /* Global context to use if any context is needed as input to a function */ extern TEEC_Context xtest_teec_ctx; /* * Initializes the context above, should be called before the ADBG test * cases are run. */ TEEC_Result xtest_teec_ctx_init(void); void xtest_teec_ctx_deinit(void); /* Opens a session */ TEEC_Result xtest_teec_open_session(TEEC_Session *session, const TEEC_UUID *uuid, TEEC_Operation *op, uint32_t *ret_orig); TEEC_Result xtest_teec_open_static_session(TEEC_Session *session, TEEC_Operation *op, uint32_t *ret_orig); #define TEEC_OPERATION_INITIALIZER { } /* IO access macro */ #define IO(addr) (*((volatile unsigned long *)(addr))) #define UNUSED(x) (void)(x) /* * Helpers for commands towards the crypt TA */ TEEC_Result ta_crypt_cmd_allocate_operation(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle *oph, uint32_t algo, uint32_t mode, uint32_t max_key_size); TEEC_Result ta_crypt_cmd_allocate_transient_object(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectType obj_type, uint32_t max_obj_size, TEE_ObjectHandle *o); TEEC_Result ta_crypt_cmd_populate_transient_object(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle o, const TEE_Attribute *attrs, uint32_t attr_count); TEE_Result ta_crypt_cmd_set_operation_key(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, TEE_ObjectHandle key); TEEC_Result ta_crypt_cmd_free_transient_object(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle o); TEEC_Result ta_crypt_cmd_derive_key(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph, TEE_ObjectHandle o, const TEE_Attribute *params, uint32_t paramCount); TEEC_Result ta_crypt_cmd_get_object_buffer_attribute(ADBG_Case_t *c, TEEC_Session *s, TEE_ObjectHandle o, uint32_t attr_id, void *buf, size_t *blen); TEEC_Result ta_crypt_cmd_free_operation(ADBG_Case_t *c, TEEC_Session *s, TEE_OperationHandle oph); bool ta_crypt_cmd_is_algo_supported(ADBG_Case_t *c, TEEC_Session *s, uint32_t alg, uint32_t element); TEEC_Result ta_os_test_cmd_client_identity(TEEC_Session *session, uint32_t *login, TEEC_UUID *client_uuid); void xtest_add_attr(size_t *attr_count, TEE_Attribute *attrs, uint32_t attr_id, const void *buf, size_t len); void xtest_add_attr_value(size_t *attr_count, TEE_Attribute *attrs, uint32_t attr_id, uint32_t value_a, uint32_t value_b); TEE_Result pack_attrs(const TEE_Attribute *attrs, uint32_t attr_count, uint8_t **buf, size_t *blen); void xtest_mutex_init(pthread_mutex_t *mutex); void xtest_mutex_destroy(pthread_mutex_t *mutex); void xtest_mutex_lock(pthread_mutex_t *mutex); void xtest_mutex_unlock(pthread_mutex_t *mutex); void xtest_barrier_init(pthread_barrier_t *barrier, unsigned count); void xtest_barrier_destroy(pthread_barrier_t *barrier); int xtest_barrier_wait(pthread_barrier_t *barrier); #endif /*XTEST_HELPERS_H*/ optee_test-4.3.0/host/xtest/xtest_main.c000066400000000000000000000177021464074351400203530ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2016, Linaro Limited * Copyright (c) 2014, STMicroelectronics International N.V. * Copyright (c) 2022, Arm Limited and Contributors. All rights reserved. */ #include #include #include #include #include #include #include #ifdef OPENSSL_FOUND #include #include #include #endif #include #include "xtest_test.h" #include "xtest_helpers.h" /* include here shandalone tests */ #include "clear_storage.h" #include "crypto_common.h" #include "install_ta.h" #include "pkcs11_1000.h" #include "stats.h" ADBG_SUITE_DEFINE(benchmark); #ifdef WITH_GP_TESTS ADBG_SUITE_DEFINE(gp); #endif #ifdef CFG_PKCS11_TA ADBG_SUITE_DEFINE(pkcs11); #endif #ifdef CFG_SPMC_TESTS ADBG_SUITE_DEFINE(ffa_spmc); #endif ADBG_SUITE_DEFINE(regression); char *xtest_progname; char *xtest_tee_name = NULL; unsigned int level = 0; static const char glevel[] = "0"; #ifdef WITH_GP_TESTS #define GP_SUITE "+gp" #else #define GP_SUITE "" #endif #ifdef CFG_PKCS11_TA #define PKCS11_SUITE "+pkcs11" #else #define PKCS11_SUITE "" #endif #ifdef CFG_SPMC_TESTS #define FFA_SPMC_SUITE "+ffa_spmc" #else #define FFA_SPMC_SUITE "" #endif static char gsuitename[] = "regression" GP_SUITE PKCS11_SUITE FFA_SPMC_SUITE; void usage(char *program); void usage(char *program) { printf("Usage: %s [[-x] ]...]\n", program); printf("\n"); printf("options:\n"); printf("\t-d TEE identifier. Use default TEE if not set\n"); printf("\t-l Test level [0-15]. Values higher than 0 enable\n"); printf("\t optional tests. Default: 0. All tests: 15.\n"); printf("\t-t Available test suites: regression benchmark"); #ifdef WITH_GP_TESTS printf(" gp"); #endif #ifdef CFG_PKCS11_TA printf(" pkcs11"); #endif #ifdef CFG_SPMC_TESTS printf(" ffa_spmc"); #endif printf("\n"); printf("\t To run several suites, use multiple names\n"); printf("\t separated by a '+')\n"); printf("\t Default value: '%s'\n", gsuitename); printf("\t-h Show usage\n"); printf("\t Add to the list of tests to be run.\n"); printf("\t A substring match is performed. May be specified\n"); printf("\t several times. If no tests are given, all the\n"); printf("\t tests are added.\n"); printf("\t-x Exclude from the list of tests to be\n"); printf("\t run. A substring match is performed. May be\n"); printf("\t specified several times.\n"); printf("applets:\n"); printf("\t--sha-perf [opts] Deprecated, same as --hash-perf\n"); printf("\t--hash-perf [opts] Hash performance testing tool (-h for usage)\n"); printf("\t--aes-perf [opts] AES performance testing tool (-h for usage)\n"); printf("\t--asym-perf [opts] Asym performance testing tool (-h for usage)\n"); #ifdef CFG_SECSTOR_TA_MGMT_PTA printf("\t--install-ta [directory or list of TAs]\n"); printf("\t Install TAs\n"); #endif #ifdef CFG_SECURE_DATA_PATH printf("\t--sdp-basic [opts] Basic Secure Data Path test setup ('-h' for usage)\n"); #endif #ifdef CFG_PKCS11_TA printf("\t--pkcs11-1028-destroy-token-object Used internally by pkcs11_1028\n"); #endif printf("\t--stats [opts] Various statistics ('-h' for usage)\n"); printf("\t--clear-storage Delete any persistent objects that may have been\n"); printf("\t left over by a previous run of this application\n"); printf("\n"); printf("Examples:\n"); printf("\txtest -t regression 4001 4003\n"); printf("\t run regression tests 4001 and 4003\n"); printf("\txtest -t regression -x 1027 -x 1028\n"); printf("\t run all regression tests but 1027 and 1028\n"); printf("\n"); } static void init_ossl(void) { #ifdef OPENSSL_FOUND OPENSSL_init(); OpenSSL_add_all_algorithms(); ERR_load_crypto_strings(); #endif } int main(int argc, char *argv[]) { int opt = 0; int index = 0; TEEC_Result tee_res = TEEC_ERROR_GENERIC; int ret = 0; char *p = (char *)glevel; char *test_suite = (char *)gsuitename; char *token = NULL; ADBG_Suite_Definition_t all = { .SuiteID_p = NULL, .cases = TAILQ_HEAD_INITIALIZER(all.cases), }; bool exclusion = false; size_t last_gen_option = 1; opterr = 0; if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) warn("signal(SIGPIPE, SIG_IGN)"); if (signal(SIGHUP, SIG_IGN) == SIG_ERR) warn("signal(SIGPIPE, SIG_IGN)"); init_ossl(); /* Reference xtest command name for global use */ xtest_progname = argv[0]; if (argc > 1 && !strcmp(argv[1], "--sha-perf")) return hash_perf_runner_cmd_parser(argc-1, &argv[1]); else if (argc > 1 && !strcmp(argv[1], "--hash-perf")) return hash_perf_runner_cmd_parser(argc-1, &argv[1]); else if (argc > 1 && !strcmp(argv[1], "--aes-perf")) return aes_perf_runner_cmd_parser(argc-1, &argv[1]); else if (argc > 1 && !strcmp(argv[1], "--asym-perf")) return asym_perf_runner_cmd_parser(argc-1, &argv[1]); #ifdef CFG_SECSTOR_TA_MGMT_PTA else if (argc > 1 && !strcmp(argv[1], "--install-ta")) return install_ta_runner_cmd_parser(argc - 1, argv + 1); #endif #ifdef CFG_SECURE_DATA_PATH else if (argc > 1 && !strcmp(argv[1], "--sdp-basic")) return sdp_basic_runner_cmd_parser(argc-1, &argv[1]); #endif #ifdef CFG_PKCS11_TA else if (argc == 2 && !strcmp(argv[1], "--pkcs11-1028-destroy-token-object")) return xtest_pkcs11_1028_destroy_token_object(); #endif else if (argc > 1 && !strcmp(argv[1], "--stats")) return stats_runner_cmd_parser(argc - 1, &argv[1]); else if (argc == 2 && !strcmp(argv[1], "--clear-storage")) return clear_storage(); while ((opt = getopt(argc, argv, "d:l:t:h")) != -1) { switch (opt) { case 'd': xtest_tee_name = optarg; last_gen_option = optind; break; case 'l': p = optarg; last_gen_option = optind; break; case 't': test_suite = optarg; last_gen_option = optind; break; case 'h': usage(argv[0]); return 0; case '?': if (optopt == 'x') { /* * The -x option is not processed here, * it is part of the test IDs. */ goto next; } /* option not recognized */ usage(argv[0]); return -1; default: usage(argv[0]); return -1; } } next: for (index = last_gen_option; index < argc; index++) { if (!strcmp(argv[index], "-x")) { exclusion = true; continue; } printf("Test ID: %s%s\n", exclusion ? "-x " : "", argv[index]); exclusion = false; } if (p) level = atoi(p); else level = 0; printf("Run test suite with level=%d\n", level); printf("\nTEE test application started over %s TEE instance\n", xtest_tee_name ? xtest_tee_name : "default"); tee_res = xtest_teec_ctx_init(); if (tee_res != TEEC_SUCCESS) { fprintf(stderr, "Failed to open TEE context: 0x%" PRIx32 "\n", tee_res); return -1; } /* Concatenate all the selected suites into 'all' */ for (token = test_suite; ; token = NULL) { token = strtok(token, "+"); if (!token) break; if (!strcmp(token, "regression")) ret = Do_ADBG_AppendToSuite(&all, &ADBG_Suite_regression); else if (!strcmp(token, "benchmark")) ret = Do_ADBG_AppendToSuite(&all, &ADBG_Suite_benchmark); #ifdef WITH_GP_TESTS else if (!strcmp(token, "gp")) ret = Do_ADBG_AppendToSuite(&all, &ADBG_Suite_gp); #endif #ifdef CFG_PKCS11_TA else if (!strcmp(token, "pkcs11")) ret = Do_ADBG_AppendToSuite(&all, &ADBG_Suite_pkcs11); #endif #ifdef CFG_SPMC_TESTS else if (!strcmp(token, "ffa_spmc")) ret = Do_ADBG_AppendToSuite(&all, &ADBG_Suite_ffa_spmc); #endif else { fprintf(stderr, "Unkown test suite: %s\n", token); ret = -1; } if (ret < 0) goto err; } /* Run the tests */ ret = Do_ADBG_RunSuite(&all, argc - last_gen_option, argv + last_gen_option); err: free((void *)all.SuiteID_p); xtest_teec_ctx_deinit(); printf("TEE test application done!\n"); return ret; } optee_test-4.3.0/host/xtest/xtest_test.c000066400000000000000000000216631464074351400204070ustar00rootroot00000000000000// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #include "xtest_test.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include <__tee_isocket_defines.h> #include <__tee_tcpsocket_defines.h> #include <__tee_udpsocket_defines.h> ADBG_ENUM_TABLE_DEFINE_BEGIN(TEEC_Result) ADBG_ENUM_TABLE_ENTRY(TEEC_SUCCESS), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_CORRUPT_OBJECT), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_CORRUPT_OBJECT_2), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_STORAGE_NOT_AVAILABLE), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_STORAGE_NOT_AVAILABLE_2), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_GENERIC), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_ACCESS_DENIED), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_CANCEL), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_ACCESS_CONFLICT), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_EXCESS_DATA), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_BAD_FORMAT), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_BAD_PARAMETERS), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_BAD_STATE), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_ITEM_NOT_FOUND), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_NOT_IMPLEMENTED), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_NOT_SUPPORTED), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_NO_DATA), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_OUT_OF_MEMORY), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_BUSY), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_COMMUNICATION), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_SECURITY), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_SHORT_BUFFER), ADBG_ENUM_TABLE_ENTRY(TEEC_ERROR_EXTERNAL_CANCEL), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_OVERFLOW), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_TARGET_DEAD), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_STORAGE_NO_SPACE), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_MAC_INVALID), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_SIGNATURE_INVALID), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_TIME_NOT_SET), ADBG_ENUM_TABLE_ENTRY(TEE_ERROR_TIME_NEEDS_RESET), ADBG_ENUM_TABLE_ENTRY(TEE_ISOCKET_ERROR_PROTOCOL), ADBG_ENUM_TABLE_ENTRY(TEE_ISOCKET_ERROR_REMOTE_CLOSED), ADBG_ENUM_TABLE_ENTRY(TEE_ISOCKET_ERROR_TIMEOUT), ADBG_ENUM_TABLE_ENTRY(TEE_ISOCKET_ERROR_OUT_OF_RESOURCES), ADBG_ENUM_TABLE_ENTRY(TEE_ISOCKET_ERROR_LARGE_BUFFER), ADBG_ENUM_TABLE_ENTRY(TEE_ISOCKET_WARNING_PROTOCOL), ADBG_ENUM_TABLE_ENTRY(TEE_ISOCKET_ERROR_HOSTNAME), ADBG_ENUM_TABLE_ENTRY(TEE_ISOCKET_UDP_WARNING_UNKNOWN_OUT_OF_BAND) ADBG_ENUM_TABLE_DEFINE_END(TEEC_Result); ADBG_ENUM_TABLE_DEFINE_BEGIN(TEEC_ErrorOrigin) ADBG_ENUM_TABLE_ENTRY(TEEC_ORIGIN_API), ADBG_ENUM_TABLE_ENTRY(TEEC_ORIGIN_COMMS), ADBG_ENUM_TABLE_ENTRY(TEEC_ORIGIN_TEE), ADBG_ENUM_TABLE_ENTRY(TEEC_ORIGIN_TRUSTED_APP) ADBG_ENUM_TABLE_DEFINE_END(TEEC_ErrorOrigin); #ifdef CFG_PKCS11_TA ADBG_ENUM_TABLE_DEFINE_BEGIN(CK_RV) ADBG_ENUM_TABLE_ENTRY(CKR_OK), ADBG_ENUM_TABLE_ENTRY(CKR_CANCEL), ADBG_ENUM_TABLE_ENTRY(CKR_HOST_MEMORY), ADBG_ENUM_TABLE_ENTRY(CKR_SLOT_ID_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_GENERAL_ERROR), ADBG_ENUM_TABLE_ENTRY(CKR_FUNCTION_FAILED), ADBG_ENUM_TABLE_ENTRY(CKR_ARGUMENTS_BAD), ADBG_ENUM_TABLE_ENTRY(CKR_NO_EVENT), ADBG_ENUM_TABLE_ENTRY(CKR_NEED_TO_CREATE_THREADS), ADBG_ENUM_TABLE_ENTRY(CKR_CANT_LOCK), ADBG_ENUM_TABLE_ENTRY(CKR_ATTRIBUTE_READ_ONLY), ADBG_ENUM_TABLE_ENTRY(CKR_ATTRIBUTE_SENSITIVE), ADBG_ENUM_TABLE_ENTRY(CKR_ATTRIBUTE_TYPE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_ATTRIBUTE_VALUE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_ACTION_PROHIBITED), ADBG_ENUM_TABLE_ENTRY(CKR_DATA_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_DATA_LEN_RANGE), ADBG_ENUM_TABLE_ENTRY(CKR_DEVICE_ERROR), ADBG_ENUM_TABLE_ENTRY(CKR_DEVICE_MEMORY), ADBG_ENUM_TABLE_ENTRY(CKR_DEVICE_REMOVED), ADBG_ENUM_TABLE_ENTRY(CKR_ENCRYPTED_DATA_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_ENCRYPTED_DATA_LEN_RANGE), ADBG_ENUM_TABLE_ENTRY(CKR_FUNCTION_CANCELED), ADBG_ENUM_TABLE_ENTRY(CKR_FUNCTION_NOT_PARALLEL), ADBG_ENUM_TABLE_ENTRY(CKR_FUNCTION_NOT_SUPPORTED), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_HANDLE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_SIZE_RANGE), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_TYPE_INCONSISTENT), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_NOT_NEEDED), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_CHANGED), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_NEEDED), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_INDIGESTIBLE), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_FUNCTION_NOT_PERMITTED), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_NOT_WRAPPABLE), ADBG_ENUM_TABLE_ENTRY(CKR_KEY_UNEXTRACTABLE), ADBG_ENUM_TABLE_ENTRY(CKR_MECHANISM_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_MECHANISM_PARAM_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_OBJECT_HANDLE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_OPERATION_ACTIVE), ADBG_ENUM_TABLE_ENTRY(CKR_OPERATION_NOT_INITIALIZED), ADBG_ENUM_TABLE_ENTRY(CKR_PIN_INCORRECT), ADBG_ENUM_TABLE_ENTRY(CKR_PIN_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_PIN_LEN_RANGE), ADBG_ENUM_TABLE_ENTRY(CKR_PIN_EXPIRED), ADBG_ENUM_TABLE_ENTRY(CKR_PIN_LOCKED), ADBG_ENUM_TABLE_ENTRY(CKR_SESSION_CLOSED), ADBG_ENUM_TABLE_ENTRY(CKR_SESSION_COUNT), ADBG_ENUM_TABLE_ENTRY(CKR_SESSION_HANDLE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_SESSION_PARALLEL_NOT_SUPPORTED), ADBG_ENUM_TABLE_ENTRY(CKR_SESSION_READ_ONLY), ADBG_ENUM_TABLE_ENTRY(CKR_SESSION_EXISTS), ADBG_ENUM_TABLE_ENTRY(CKR_SESSION_READ_ONLY_EXISTS), ADBG_ENUM_TABLE_ENTRY(CKR_SESSION_READ_WRITE_SO_EXISTS), ADBG_ENUM_TABLE_ENTRY(CKR_SIGNATURE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_SIGNATURE_LEN_RANGE), ADBG_ENUM_TABLE_ENTRY(CKR_TEMPLATE_INCOMPLETE), ADBG_ENUM_TABLE_ENTRY(CKR_TEMPLATE_INCONSISTENT), ADBG_ENUM_TABLE_ENTRY(CKR_TOKEN_NOT_PRESENT), ADBG_ENUM_TABLE_ENTRY(CKR_TOKEN_NOT_RECOGNIZED), ADBG_ENUM_TABLE_ENTRY(CKR_TOKEN_WRITE_PROTECTED), ADBG_ENUM_TABLE_ENTRY(CKR_UNWRAPPING_KEY_HANDLE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_UNWRAPPING_KEY_SIZE_RANGE), ADBG_ENUM_TABLE_ENTRY(CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT), ADBG_ENUM_TABLE_ENTRY(CKR_USER_ALREADY_LOGGED_IN), ADBG_ENUM_TABLE_ENTRY(CKR_USER_NOT_LOGGED_IN), ADBG_ENUM_TABLE_ENTRY(CKR_USER_PIN_NOT_INITIALIZED), ADBG_ENUM_TABLE_ENTRY(CKR_USER_TYPE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_USER_ANOTHER_ALREADY_LOGGED_IN), ADBG_ENUM_TABLE_ENTRY(CKR_USER_TOO_MANY_TYPES), ADBG_ENUM_TABLE_ENTRY(CKR_WRAPPED_KEY_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_WRAPPED_KEY_LEN_RANGE), ADBG_ENUM_TABLE_ENTRY(CKR_WRAPPING_KEY_HANDLE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_WRAPPING_KEY_SIZE_RANGE), ADBG_ENUM_TABLE_ENTRY(CKR_WRAPPING_KEY_TYPE_INCONSISTENT), ADBG_ENUM_TABLE_ENTRY(CKR_RANDOM_SEED_NOT_SUPPORTED), ADBG_ENUM_TABLE_ENTRY(CKR_RANDOM_NO_RNG), ADBG_ENUM_TABLE_ENTRY(CKR_DOMAIN_PARAMS_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_CURVE_NOT_SUPPORTED), ADBG_ENUM_TABLE_ENTRY(CKR_BUFFER_TOO_SMALL), ADBG_ENUM_TABLE_ENTRY(CKR_SAVED_STATE_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_INFORMATION_SENSITIVE), ADBG_ENUM_TABLE_ENTRY(CKR_STATE_UNSAVEABLE), ADBG_ENUM_TABLE_ENTRY(CKR_CRYPTOKI_NOT_INITIALIZED), ADBG_ENUM_TABLE_ENTRY(CKR_CRYPTOKI_ALREADY_INITIALIZED), ADBG_ENUM_TABLE_ENTRY(CKR_MUTEX_BAD), ADBG_ENUM_TABLE_ENTRY(CKR_MUTEX_NOT_LOCKED), ADBG_ENUM_TABLE_ENTRY(CKR_NEW_PIN_MODE), ADBG_ENUM_TABLE_ENTRY(CKR_NEXT_OTP), ADBG_ENUM_TABLE_ENTRY(CKR_EXCEEDED_MAX_ITERATIONS), ADBG_ENUM_TABLE_ENTRY(CKR_FIPS_SELF_TEST_FAILED), ADBG_ENUM_TABLE_ENTRY(CKR_LIBRARY_LOAD_FAILED), ADBG_ENUM_TABLE_ENTRY(CKR_PIN_TOO_WEAK), ADBG_ENUM_TABLE_ENTRY(CKR_PUBLIC_KEY_INVALID), ADBG_ENUM_TABLE_ENTRY(CKR_FUNCTION_REJECTED), ADBG_ENUM_TABLE_ENTRY(CKR_VENDOR_DEFINED) ADBG_ENUM_TABLE_DEFINE_END(CK_RV); #endif /*CFG_PKCS11_TA*/ #define ECC_SELF_TEST_UUID \ { 0xf34f4f3c, 0xab30, 0x4573, \ { 0x91, 0xBF, 0x3C, 0x57, 0x02, 0x4D, 0x51, 0x99 } } const TEEC_UUID crypt_user_ta_uuid = TA_CRYPT_UUID; const TEEC_UUID os_test_ta_uuid = TA_OS_TEST_UUID; const TEEC_UUID create_fail_test_ta_uuid = TA_CREATE_FAIL_TEST_UUID; const TEEC_UUID ecc_test_ta_uuid = ECC_SELF_TEST_UUID; const TEEC_UUID pta_invoke_tests_ta_uuid = PTA_INVOKE_TESTS_UUID; const TEEC_UUID rpc_test_ta_uuid = TA_RPC_TEST_UUID; const TEEC_UUID sims_test_ta_uuid = TA_SIMS_TEST_UUID; const TEEC_UUID miss_test_ta_uuid = TA_MISS_TEST_UUID; const TEEC_UUID sims_keepalive_test_ta_uuid = TA_SIMS_KEEP_ALIVE_TEST_UUID; const TEEC_UUID storage_ta_uuid = TA_STORAGE_UUID; const TEEC_UUID storage2_ta_uuid = TA_STORAGE2_UUID; const TEEC_UUID enc_fs_key_manager_test_ta_uuid = ENC_FS_KEY_MANAGER_TEST_UUID; const TEEC_UUID concurrent_ta_uuid = TA_CONCURRENT_UUID; const TEEC_UUID concurrent_large_ta_uuid = TA_CONCURRENT_LARGE_UUID; const TEEC_UUID storage_benchmark_ta_uuid = TA_STORAGE_BENCHMARK_UUID; const TEEC_UUID socket_ta_uuid = TA_SOCKET_UUID; const TEEC_UUID sdp_basic_ta_uuid = TA_SDP_BASIC_UUID; const TEEC_UUID tpm_log_test_ta_uuid = TA_TPM_LOG_TEST_UUID; const TEEC_UUID supp_plugin_test_ta_uuid = TA_SUPP_PLUGIN_UUID; const TEEC_UUID large_ta_uuid = TA_LARGE_UUID; const TEEC_UUID bti_test_ta_uuid = TA_BTI_UUID; const TEEC_UUID subkey1_ta_uuid = TA_SUBKEY1_UUID; const TEEC_UUID subkey2_ta_uuid = TA_SUBKEY2_UUID; optee_test-4.3.0/host/xtest/xtest_test.h000066400000000000000000000111411464074351400204020ustar00rootroot00000000000000/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016, Linaro Limited * Copyright (c) 2014, STMicroelectronics International N.V. */ #ifndef XTEST_TEST_H #define XTEST_TEST_H #include #include #ifdef CFG_PKCS11_TA #include #endif ADBG_SUITE_DECLARE(benchmark); #ifdef WITH_GP_TESTS ADBG_SUITE_DECLARE(gp); #endif #ifdef CFG_PKCS11_TA ADBG_SUITE_DECLARE(pkcs11); #endif #ifdef CFG_SPMC_TESTS ADBG_SUITE_DECLARE(ffa_spmc); #endif ADBG_SUITE_DECLARE(regression); /* TEEC_Result */ ADBG_ENUM_TABLE_DECLARE(TEEC_Result); #define ADBG_EXPECT_TEEC_RESULT(c, exp, got) \ ADBG_EXPECT_ENUM(c, exp, got, ADBG_EnumTable_TEEC_Result) #define ADBG_EXPECT_TEEC_SUCCESS(c, got) \ ADBG_EXPECT_ENUM(c, TEEC_SUCCESS, got, ADBG_EnumTable_TEEC_Result) /* TEEC_ErrorOrigin */ ADBG_ENUM_TABLE_DECLARE(TEEC_ErrorOrigin); #define ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, exp, got) \ ADBG_EXPECT_ENUM(c, exp, got, ADBG_EnumTable_TEEC_ErrorOrigin) #ifdef CFG_PKCS11_TA /* CK_RV */ ADBG_ENUM_TABLE_DECLARE(CK_RV); #define ADBG_EXPECT_CK_RESULT(c, exp, got) \ ADBG_EXPECT_ENUM(c, exp, got, ADBG_EnumTable_CK_RV) #define ADBG_EXPECT_CK_OK(c, got) \ ADBG_EXPECT_ENUM(c, CKR_OK, got, ADBG_EnumTable_CK_RV) #endif extern const char crypt_user_ta[]; extern const unsigned int crypt_user_ta_size; extern const char os_test_ta[]; extern const unsigned int os_test_ta_size; extern const char create_fail_test_ta[]; extern const unsigned int create_fail_test_ta_size; extern const char rpc_test_ta[]; extern const unsigned int rpc_test_ta_size; extern const char sims_test_ta[]; extern const unsigned int sims_test_ta_size; extern const char gp_tta_testing_client_api_ta[]; extern const unsigned int gp_tta_testing_client_api_ta_size; extern const char gp_tta_answer_success_to_open_session_invoke_ta[]; extern const unsigned int gp_tta_answer_success_to_open_session_invoke_ta_size; extern const char gp_tta_answer_error_to_invoke_ta[]; extern const unsigned int gp_tta_answer_error_to_invoke_ta_size; extern const char gp_tta_answer_error_to_open_session_ta[]; extern const unsigned int gp_tta_answer_error_to_open_session_ta_size; extern const char gp_tta_check_open_session_with_4_parameters_ta[]; extern const unsigned int gp_tta_check_open_session_with_4_parameters_ta_size; extern const char gp_tta_ds_ta[]; extern const unsigned int gp_tta_ds_ta_size; extern const char storage_ta[]; extern const unsigned int storage_ta_size; extern const char gp_tta_time_ta[]; extern const unsigned int gp_tta_time_ta_size; extern const char gp_tta_tcf_ta[]; extern const unsigned int gp_tta_tcf_ta_size; extern const char gp_tta_crypto_ta[]; extern const unsigned int gp_tta_crypto_ta_size; extern const char gp_tta_arithm_ta[]; extern const unsigned int gp_tta_arithm_ta_size; extern const char gp_tta_ica_ta[]; extern const unsigned int gp_tta_ica_ta_size; extern const char gp_tta_ica2_ta[]; extern const unsigned int gp_tta_ica2_ta_size; extern const char gp_tta_tcf_singleinstance_ta[]; extern const unsigned int gp_tta_tcf_singleinstance_ta_size; extern const char gp_tta_tcf_multipleinstance_ta[]; extern const unsigned int gp_tta_tcf_multipleinstance_ta_size; extern const TEEC_UUID crypt_user_ta_uuid; extern const TEEC_UUID os_test_ta_uuid; extern const TEEC_UUID create_fail_test_ta_uuid; extern const TEEC_UUID rpc_test_ta_uuid; extern const TEEC_UUID sims_test_ta_uuid; extern const TEEC_UUID miss_test_ta_uuid; extern const TEEC_UUID sims_keepalive_test_ta_uuid; extern const TEEC_UUID gp_tta_testing_client_api_uuid; extern const TEEC_UUID gp_tta_answer_success_to_open_session_invoke_uuid; extern const TEEC_UUID gp_tta_answer_error_to_invoke_uuid; extern const TEEC_UUID gp_tta_answer_error_to_open_session_uuid; extern const TEEC_UUID gp_tta_check_OpenSession_with_4_parameters_uuid; extern const TEEC_UUID gp_tta_ds_uuid; extern const TEEC_UUID storage_ta_uuid; extern const TEEC_UUID storage2_ta_uuid; extern const TEEC_UUID enc_fs_key_manager_test_ta_uuid; extern const TEEC_UUID ecc_test_ta_uuid; extern const TEEC_UUID pta_invoke_tests_ta_uuid; extern const TEEC_UUID gp_tta_time_uuid; extern const TEEC_UUID concurrent_ta_uuid; extern const TEEC_UUID concurrent_large_ta_uuid; extern const TEEC_UUID storage_benchmark_ta_uuid; extern const TEEC_UUID socket_ta_uuid; extern const TEEC_UUID sdp_basic_ta_uuid; extern const TEEC_UUID tpm_log_test_ta_uuid; extern const TEEC_UUID supp_plugin_test_ta_uuid; extern const TEEC_UUID large_ta_uuid; extern const TEEC_UUID bti_test_ta_uuid; extern const TEEC_UUID subkey1_ta_uuid; extern const TEEC_UUID subkey2_ta_uuid; extern char *xtest_tee_name; extern char *xtest_progname; #endif /*XTEST_TEST_H*/ optee_test-4.3.0/host/xtest/xtest_uuid_helpers.c000066400000000000000000000073071464074351400221170ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2019, Linaro Limited */ #include #include #ifdef OPENSSL_FOUND #include #endif #include #include #include #include #include #include #include "xtest_uuid_helpers.h" static int hex(char c) { char lc = tolower(c); if (isdigit(lc)) return lc - '0'; if (isxdigit(lc)) return lc - 'a' + 10; return -1; } static uint32_t parse_hex(const char *s, size_t nchars, uint32_t *res) { uint32_t v = 0; size_t n = 0; int c = 0; for (n = 0; n < nchars; n++) { c = hex(s[n]); if (c == -1) { *res = TEE_ERROR_BAD_FORMAT; goto out; } v = (v << 4) + c; } *res = TEE_SUCCESS; out: return v; } TEEC_Result xtest_uuid_from_str(TEEC_UUID *uuid, const char *s) { TEEC_Result res = TEEC_SUCCESS; TEEC_UUID u = { }; const char *p = s; size_t i = 0; if (!p || strnlen(p, 37) != 36) return TEEC_ERROR_BAD_FORMAT; if (p[8] != '-' || p[13] != '-' || p[18] != '-' || p[23] != '-') return TEEC_ERROR_BAD_FORMAT; u.timeLow = parse_hex(p, 8, &res); if (res) goto out; p += 9; u.timeMid = parse_hex(p, 4, &res); if (res) goto out; p += 5; u.timeHiAndVersion = parse_hex(p, 4, &res); if (res) goto out; p += 5; for (i = 0; i < 8; i++) { u.clockSeqAndNode[i] = parse_hex(p, 2, &res); if (res) goto out; if (i == 1) p += 3; else p += 2; } *uuid = u; out: return res; } #define UUID_STR_LEN 37 char *xtest_uuid_to_allocated_str(const TEEC_UUID *uuid) { char *s = NULL; s = malloc(UUID_STR_LEN); if (!s) return NULL; sprintf(s, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", uuid->timeLow, uuid->timeMid, uuid->timeHiAndVersion, uuid->clockSeqAndNode[0], uuid->clockSeqAndNode[1], uuid->clockSeqAndNode[2], uuid->clockSeqAndNode[3], uuid->clockSeqAndNode[4], uuid->clockSeqAndNode[5], uuid->clockSeqAndNode[6], uuid->clockSeqAndNode[7]); return s; } #ifdef OPENSSL_FOUND TEEC_Result xtest_uuid_v5(TEEC_UUID *uuid, const TEEC_UUID *ns, const void *name, size_t size) { TEEC_Result res = TEEC_SUCCESS; EVP_MD_CTX *mdctx = NULL; const EVP_MD *md = NULL; unsigned char hash[EVP_MAX_MD_SIZE] = { }; unsigned int md_len = 0; unsigned char nsbe[16] = { }; uint32_t be32 = 0; uint16_t be16 = 0; int ret = 0; /* Convert from host to big endian */ be32 = htobe32(ns->timeLow); memcpy(&nsbe[0], &be32, sizeof(be32)); be16 = htobe16(ns->timeMid); memcpy(&nsbe[4], &be16, sizeof(be16)); be16 = htobe16(ns->timeHiAndVersion); memcpy(&nsbe[6], &be16, sizeof(be16)); memcpy(&nsbe[8], &ns->clockSeqAndNode, sizeof(ns->clockSeqAndNode)); mdctx = EVP_MD_CTX_create(); if (!mdctx) return TEEC_ERROR_OUT_OF_MEMORY; md = EVP_sha1(); if (!md) { res = TEEC_ERROR_NOT_SUPPORTED; goto out; } ret = EVP_DigestInit_ex(mdctx, md, NULL); if (!ret) { res = TEEC_ERROR_GENERIC; goto out; } ret = EVP_DigestUpdate(mdctx, nsbe, sizeof(nsbe)); if (!ret) { res = TEEC_ERROR_GENERIC; goto out; } ret = EVP_DigestUpdate(mdctx, name, size); if (!ret) { res = TEEC_ERROR_GENERIC; goto out; } ret = EVP_DigestFinal_ex(mdctx, hash, &md_len); if (!ret) { res = TEEC_ERROR_GENERIC; goto out; } /* Mark it as UUIDv5 */ hash[6] = (hash[6] & 0x0F) | 0x50; hash[8] = (hash[8] & 0x3F) | 0x80; /* Convert from big endian to host */ memcpy(&be32, &hash[0], sizeof(uint32_t)); uuid->timeLow = be32toh(be32); memcpy(&be16, &hash[4], sizeof(uint16_t)); uuid->timeMid = be16toh(be16); memcpy(&be16, &hash[6], sizeof(uint16_t)); uuid->timeHiAndVersion = be16toh(be16); memcpy(uuid->clockSeqAndNode, &hash[8], sizeof(uuid->clockSeqAndNode)); out: EVP_MD_CTX_destroy(mdctx); return res; } #endif /*OPENSSL_FOUND*/ optee_test-4.3.0/host/xtest/xtest_uuid_helpers.h000066400000000000000000000016731464074351400221240ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #ifndef XTEST_UUID_HELPERS_H #define XTEST_UUID_HELPERS_H #include #include #include /* * Convert a UUID string @s into a TEEC_UUID @uuid * Expected format for @s is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx * 'x' being any hexadecimal digit (0-9a-fA-F) */ TEEC_Result xtest_uuid_from_str(TEEC_UUID *uuid, const char *s); /* * Convert a TEEC_UUID @uuid into an allocated UUID string @return * Expected format for @return is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx * 'x' being any hexadecimal digit (0-9a-fA-F) */ char *xtest_uuid_to_allocated_str(const TEEC_UUID *uuid); #ifdef OPENSSL_FOUND /* * Form UUIDv5 from given name space and name. */ TEEC_Result xtest_uuid_v5(TEEC_UUID *uuid, const TEEC_UUID *ns, const void *name, size_t size); #endif /*OPENSSL_FOUND*/ #endif optee_test-4.3.0/scripts/000077500000000000000000000000001464074351400153705ustar00rootroot00000000000000optee_test-4.3.0/scripts/aes_gcm_test.py000066400000000000000000000046721464074351400204100ustar00rootroot00000000000000#!/usr/bin/env python3 # SPDX-License-Identifier: BSD-2-Clause # # Copyright 2024 NXP # import json modes = {'encrypt': 0, 'decrypt': 1} def to_compound_str(name, val): assert len(val) % 2 == 0, "Only even sized values supported" if len(val) > 0: import re a = re.findall('..', val) b = name + " = (const uint8_t []){ " for s in a: b += "0x" + s + ", " b += "},\n\t" + name + "_len = " + repr((int)(len(val) / 2)) + "," else: b = name + " = NULL,\n\t" + name + "_len = 0," return b def generate_case(outf, tv, mode): outf.write('{\n\t.algo = TEE_ALG_AES_GCM, .mode = ' + mode + ', .key_type = TEE_TYPE_AES,\n') outf.write('\t' + to_compound_str('.key', tv['key']) + '\n') outf.write('\t' + to_compound_str('.nonce', tv['iv']) + '\n') outf.write('\t.aad_incr = 0,\n') outf.write('\t' + to_compound_str('.aad', tv['aad']) + '\n') outf.write('\t.in_incr = 0,\n') outf.write('\t' + to_compound_str('.ptx', tv['msg']) + '\n') outf.write('\t' + to_compound_str('.ctx', tv['ct']) + '\n') outf.write('\t' + to_compound_str('.tag', tv['tag']) + '\n') outf.write('\t.line = __LINE__,\n') outf.write('\t.id = ' + repr(tv['tcId']) + '\n},\n') def get_args(): import argparse parser = argparse.ArgumentParser() parser.add_argument('--inf', required=True, type=argparse.FileType('r'), help='Name of input json file') parser.add_argument('--outf', required=True, type=argparse.FileType('w'), help='Name of output C file') parser.add_argument('--mode', required=True, choices=modes.keys(), help='mode: encrypt or decrypt') return parser.parse_args() # Convert google/wycheproof AES GCM test vectors to xtest AE test cases def main(): args = get_args() inf = args.inf outf = args.outf outf.write("/* SPDX-License-Identifier: Apache-2.0 */\n") outf.write("/*\n") outf.write(" * Copyright 2024 NXP\n") outf.write(" */\n\n") if args.mode == "encrypt": mode = "TEE_MODE_ENCRYPT" else: mode = "TEE_MODE_DECRYPT" data = json.load(inf) for tg in data['testGroups']: for tv in tg['tests']: if tv['result'] == 'valid' and 'CounterWrap' in tv['flags']: generate_case(outf, tv, mode) if __name__ == "__main__": main() optee_test-4.3.0/scripts/checkpatch.sh000077500000000000000000000002031464074351400200170ustar00rootroot00000000000000#!/bin/bash if [ -z "$OPTEE_OS_PATH" ]; then OPTEE_OS_PATH="../optee_os"; fi source $OPTEE_OS_PATH/scripts/checkpatch.sh "$@" optee_test-4.3.0/scripts/common.mk000066400000000000000000000007061464074351400172140ustar00rootroot00000000000000# Makefile script used in various OP-TEE test components # Since 'clean' make rules rely on 'rmdir', removed directories shall # not end with 'current directory' (./ or .) subpath information. # This macro remove trailing './' info from input path. define strip-trailing-slashes-and-dots $(eval _o := $(patsubst %/,%,$(patsubst %/.,%,$(1))))$(if \ $(filter-out $(1),$(_o)),$(call strip-trailing-slashes-and-dots,$(_o)),$(_o)) endef PYTHON3 ?= python3 optee_test-4.3.0/scripts/file_to_c.py000077500000000000000000000022241464074351400176700ustar00rootroot00000000000000#!/usr/bin/env python3 # SPDX-License-Identifier: BSD-2-Clause # # Copyright (c) 2018, Linaro Limited # def get_args(): import argparse parser = argparse.ArgumentParser() parser.add_argument('--name', required=True, help='Name of variable in C file') parser.add_argument('--out', required=True, help='Name of C file') parser.add_argument('--inf', required=True, help='Name of in file') return parser.parse_args() def main(): import array args = get_args() inf = open(args.inf, 'r') f = open(args.out, 'w') f.write("/* automatically generated */\n") f.write("#include \n") f.write("#include \n\n") f.write("const uint8_t " + args.name + "[] = {\n") i = 0 for x in array.array("B", map(ord, (inf.read()))): f.write("0x" + '{0:02x}'.format(x) + ",") i = i + 1 if i % 8 == 0: f.write("\n") else: f.write(" ") f.write("'\\0'};\n") f.write("const size_t " + args.name + "_size = sizeof(" + args.name + ") - 1;\n") f.close() inf.close() if __name__ == "__main__": main() optee_test-4.3.0/scripts/rsp_to_gcm_test.py000077500000000000000000000060241464074351400211420ustar00rootroot00000000000000#!/usr/bin/env python3 # SPDX-License-Identifier: BSD-2-Clause # # Copyright (c) 2017, Linaro Limited # modes = {'encrypt': 0, 'decrypt': 1} limited = False def to_compound_str(val): assert len(val) % 2 == 0, "Only even sized values supported" if len(val) > 0: import re a = re.findall('..', val) b = "(const uint8_t []){" for s in a: b += "0x" + s + ", " b += "}, " + repr(len(val) / 2) + "," else: b = "NULL, 0," return b def generate_case(outf, myvars, mode): if 'PT' not in myvars: myvars['PT'] = '' if 'FAIL' in myvars: return if limited and myvars['Count'] != '0': return # Skip cases not supported by GP if len(myvars['Tag']) / 2 < 96 / 8: return outf.write('{ TEE_ALG_AES_GCM, ' + mode + ', TEE_TYPE_AES,\n') outf.write('/* Key */ ' + to_compound_str(myvars['Key']) + '\n') outf.write('/* IV */ ' + to_compound_str(myvars['IV']) + '\n') outf.write('0,\n') outf.write('/* AAD */ ' + to_compound_str(myvars['AAD']) + '\n') outf.write('0,\n') outf.write('/* PT */ ' + to_compound_str(myvars['PT']) + '\n') outf.write('/* CT */ ' + to_compound_str(myvars['CT']) + '\n') outf.write('/* Tag */ ' + to_compound_str(myvars['Tag']) + '\n') outf.write(repr(myvars['Line']) + '},\n') def get_args(): import argparse parser = argparse.ArgumentParser() parser.add_argument('--inf', required=True, type=argparse.FileType('r'), help='Name of input RSP file') parser.add_argument('--outf', required=True, type=argparse.FileType('w'), help='Name of output C file') parser.add_argument('--mode', required=True, choices=modes.keys(), help='mode: encrypt or decrypt') parser.add_argument('--limited', action="store_true", help='Only run one test case from each group') return parser.parse_args() def main(): import re global limited args = get_args() inf = args.inf outf = args.outf myvars = {} line_num = 0 if args.mode == "encrypt": mode = "TEE_MODE_ENCRYPT" else: mode = "TEE_MODE_DECRYPT" limited = args.limited for line in inf: line_num += 1 myl = line.strip() if len(myl) == 0: continue if re.match('^#', myl): continue if re.match('^\[', myl): continue s = re.split('\W+', myl) if len(s) == 0: continue name = s[0] if name == 'Count': if len(myvars) > 1: generate_case(outf, myvars, mode) myvars = {} myvars['Line'] = line_num if len(s) < 2: myvars[s[0]] = '' else: myvars[s[0]] = s[1] if len(s) < 2: continue val = s[1] if len(myvars) > 1: generate_case(outf, myvars, mode) if __name__ == "__main__": main() optee_test-4.3.0/ta/000077500000000000000000000000001464074351400143055ustar00rootroot00000000000000optee_test-4.3.0/ta/Android.mk000066400000000000000000000001201464074351400162070ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) include $(call all-makefiles-under, $(LOCAL_PATH)) optee_test-4.3.0/ta/CMakeLists.txt000066400000000000000000000013151464074351400170450ustar00rootroot00000000000000project (xtest-ta-headers C) add_library(${PROJECT_NAME} INTERFACE) target_include_directories(${PROJECT_NAME} INTERFACE include INTERFACE concurrent/include INTERFACE concurrent_large/include INTERFACE create_fail_test/include INTERFACE crypt/include INTERFACE crypto_perf/include INTERFACE enc_fs/include INTERFACE os_test/include INTERFACE rpc_test/include INTERFACE sdp_basic/include INTERFACE sims/include INTERFACE miss/include INTERFACE sims_keepalive/include INTERFACE socket/include INTERFACE storage_benchmark/include INTERFACE tpm_log_test/include INTERFACE bti_test/include INTERFACE supp_plugin/include INTERFACE large/include INTERFACE subkey1/include INTERFACE subkey2/include ) optee_test-4.3.0/ta/Makefile000077700000000000000000000000001464074351400204632Makefile.gmakeustar00rootroot00000000000000optee_test-4.3.0/ta/Makefile.gmake000066400000000000000000000037551464074351400170420ustar00rootroot00000000000000# Normally this makefile shouldn't be called directly and we expect the output # path to be on a certain location to fit together with the other OP-TEE # gits and helper scripts. include ../scripts/common.mk out-dir := $(call strip-trailing-slashes-and-dots,$(O)) ifeq ($(out-dir),) $(error invalid output directory (O=$(O))) endif include $(TA_DEV_KIT_DIR)/mk/conf.mk # Prevent use of LDFLAGS from the environment. For example, yocto exports # LDFLAGS that are suitable for the client applications, not for TAs LDFLAGS= TA_DIRS := create_fail_test \ crypt \ os_test_lib \ os_test_lib_dl \ os_test \ rpc_test \ sims \ miss \ sims_keepalive \ storage \ storage2 \ concurrent \ concurrent_large \ storage_benchmark \ crypto_perf \ socket \ supp_plugin \ large \ subkey1 \ subkey2 ifeq ($(CFG_SECURE_DATA_PATH),y) TA_DIRS += sdp_basic endif ifeq ($(CFG_TA_BTI),y) TA_DIRS += bti_test endif .PHONY: all all: ta .PHONY: ta ta: define add-ta-target .PHONY: ta-$(1) ta-$(1): $(MAKE) -C $(1) O=$(out-dir)/ta/$(1) ta: ta-$(1) endef $(eval $(foreach dir,$(TA_DIRS),$(call add-ta-target,$(dir)))) ta-os_test: ta-os_test_lib ta-os_test_lib_dl ifneq (,$(GP_PACKAGE)) define add-gp-ta-target .PHONY: gp-ta-$(1) gp-ta-$(1): $(MAKE) -C $(1) ta: gp-ta-$(1) endef $(eval $(foreach f,$(dir $(wildcard ../host/xtest/gp-suite/TTAs_Internal_API_1_1_1/*/*/code_files/Makefile \ ../host/xtest/gp-suite/TTAs_Internal_API_1_1_1/*/*/*/code_files/Makefile)),$(call add-gp-ta-target,$(f)))) endif # remove build directories including ta// directories. # Note: $(out-dir) may be a relative path. RMDIR := rmdir --ignore-fail-on-non-empty define rm-build-subdir echo `[ -d $1 ] && { cd $1; $(RMDIR) $(out-dir)/ta $(out-dir) 2> /dev/null; true; }` > /dev/null endef .PHONY: clean clean: $(q)$(foreach dir,$(TA_DIRS), [ ! -d $(dir) ] || $(MAKE) -C $(dir) O=$(out-dir)/ta/$(dir) $@ &&) true $(q)$(foreach dir,$(TA_DIRS), $(call rm-build-subdir,$(dir));) optee_test-4.3.0/ta/bti_test/000077500000000000000000000000001464074351400161225ustar00rootroot00000000000000optee_test-4.3.0/ta/bti_test/Android.mk000066400000000000000000000001551464074351400200340ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 3616069b-504d-4044-9497-feb84a073a14 include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/bti_test/Makefile000066400000000000000000000001061464074351400175570ustar00rootroot00000000000000BINARY = 3616069b-504d-4044-9497-feb84a073a14 include ../ta_common.mk optee_test-4.3.0/ta/bti_test/bti_stubs_a64.S000066400000000000000000000013151464074351400207160ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited */ #include FUNC call_using_blr , : , , , no_bti bti c stp x29, x30, [sp, #-16]! blr x0 ldp x29, x30, [sp], #16 ret END_FUNC call_using_blr FUNC call_using_br , : , , , no_bti bti c br x0 END_FUNC call_using_br FUNC call_using_br_x16 , : , , , no_bti bti c mov x16, x0 br x16 END_FUNC call_using_br_x16 FUNC bti_j , : , , , no_bti bti j ret END_FUNC bti_j FUNC bti_c , : , , , no_bti bti c ret END_FUNC bti_c FUNC bti_jc , : , , , no_bti bti jc ret END_FUNC bti_jc FUNC bti_none , : , , , no_bti ret END_FUNC bti_none emit_aarch64_feature_1_and GNU_PROPERTY_AARCH64_FEATURE_1_BTI optee_test-4.3.0/ta/bti_test/include/000077500000000000000000000000001464074351400175455ustar00rootroot00000000000000optee_test-4.3.0/ta/bti_test/include/ta_arm_bti.h000066400000000000000000000011161464074351400220160ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited * All rights reserved. */ #ifndef TA_ARM_BTI_H #define TA_ARM_BTI_H #define TA_BTI_UUID { 0x3616069b, 0x504d, 0x4044, \ { 0x94, 0x97, 0xfe, 0xb8, 0x4a, 0x07, 0x3a, 0x14} } /* * Commands implemented by the TA */ #define TA_TEST_USING_BLR 0 #define TA_TEST_USING_BR 1 #define TA_TEST_USING_BR_X16 2 #define TA_FEAT_BTI_IMPLEMENTED 3 /* * Parameter values */ #define TA_FUNC_BTI_C 0 #define TA_FUNC_BTI_J 1 #define TA_FUNC_BTI_JC 2 #define TA_FUNC_BTI_NONE 3 #endif /* TA_ARM_BTI_H */ optee_test-4.3.0/ta/bti_test/include/ta_arm_bti_priv.h000066400000000000000000000005021464074351400230540ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited * All rights reserved. */ #ifndef TA_ARM_BTI_PRIVATE_H #define TA_ARM_BTI_PRIVATE_H #include TEE_Result test_bti(uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]); #endif /* TA_ARM_BTI_PRIVATE_H */ optee_test-4.3.0/ta/bti_test/include/user_ta_header_defines.h000066400000000000000000000005601464074351400243660ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include "ta_arm_bti.h" #define TA_UUID TA_BTI_UUID #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif optee_test-4.3.0/ta/bti_test/sub.mk000066400000000000000000000002271464074351400172450ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c ifeq ($(sm),ta_arm64) srcs-$(CFG_TA_BTI) += bti_stubs_a64.S srcs-$(CFG_TA_BTI) += ta_arm_bti.c endif optee_test-4.3.0/ta/bti_test/ta_arm_bti.c000066400000000000000000000022231464074351400203660ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited * All rights reserved. */ #include #include #include #include #include void call_using_blr(void (*)(void)); void call_using_br(void (*)(void)); void call_using_br_x16(void (*)(void)); void bti_j(void); void bti_c(void); void bti_jc(void); void bti_none(void); TEE_Result test_bti(uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { void (*func)(void) = NULL; if (nParamTypes != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, 0, 0, 0)) return TEE_ERROR_GENERIC; switch (pParams[0].value.a) { case TA_FUNC_BTI_C: func = bti_c; break; case TA_FUNC_BTI_J: func = bti_j; break; case TA_FUNC_BTI_JC: func = bti_jc; break; case TA_FUNC_BTI_NONE: func = bti_none; break; default: break; } switch (nCommandID) { case TA_TEST_USING_BLR : call_using_blr(func); break; case TA_TEST_USING_BR : call_using_br(func); break; case TA_TEST_USING_BR_X16 : call_using_br_x16(func); break; default: return TEE_ERROR_BAD_PARAMETERS; } return TEE_SUCCESS; } optee_test-4.3.0/ta/bti_test/ta_entry.c000066400000000000000000000042341464074351400201160ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited * All rights reserved. */ #include #include #include #include #include /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes __unused, TEE_Param pParams[4] __unused, void **ppSessionContext __unused) { return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext __unused) { } static TEE_Result check_bti_implemented(uint32_t param_types, TEE_Param params[4]) { bool implemented = false; TEE_Result res = TEE_ERROR_GENERIC; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { return TEE_ERROR_BAD_PARAMETERS; } res = TEE_GetPropertyAsBool( TEE_PROPSET_TEE_IMPLEMENTATION, "org.trustedfirmware.optee.cpu.feat_bti_implemented", &implemented); if (res == TEE_SUCCESS && implemented) params[0].value.a = 1; if (res == TEE_ERROR_ITEM_NOT_FOUND) { params[0].value.a = 0; res = TEE_SUCCESS; } return res; } __weak TEE_Result test_bti(uint32_t nCommandID __unused, uint32_t nParamTypes __unused, TEE_Param pParams[4] __unused) { return TEE_ERROR_NOT_IMPLEMENTED; } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext __unused, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4] ) { TEE_Result res = TEE_SUCCESS; switch (nCommandID) { case TA_TEST_USING_BLR : case TA_TEST_USING_BR : case TA_TEST_USING_BR_X16 : res = test_bti(nCommandID, nParamTypes, pParams); break; case TA_FEAT_BTI_IMPLEMENTED : res = check_bti_implemented(nParamTypes, pParams); break; default: return TEE_ERROR_BAD_PARAMETERS; } return res; } optee_test-4.3.0/ta/concurrent/000077500000000000000000000000001464074351400164675ustar00rootroot00000000000000optee_test-4.3.0/ta/concurrent/Android.mk000066400000000000000000000001611464074351400203760ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := e13010e0-2ae1-11e5-896a-0002a5d5c51b.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/concurrent/Makefile000066400000000000000000000001071464074351400201250ustar00rootroot00000000000000BINARY = e13010e0-2ae1-11e5-896a-0002a5d5c51b include ../ta_common.mk optee_test-4.3.0/ta/concurrent/include/000077500000000000000000000000001464074351400201125ustar00rootroot00000000000000optee_test-4.3.0/ta/concurrent/include/ta_concurrent.h000066400000000000000000000024771464074351400231430ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef TA_CONCURRENT_H #define TA_CONCURRENT_H /* This UUID is generated with the ITU-T UUID generator at http://www.itu.int/ITU-T/asn1/uuid.html */ #define TA_CONCURRENT_UUID { 0xe13010e0, 0x2ae1, 0x11e5, \ { 0x89, 0x6a, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } } struct ta_concurrent_shm { uint32_t active_count; }; /* * Busy loops and updates max concurrency. params[0].memref should contain * a struct ta_concurent_shm which can be used to tell how many instances * of this function is running in parallel. * * in/out params[0].memref * in/out params[1].value.a (input) number times to calcule the hash * in/out params[1].value.b (output) max concurency */ #define TA_CONCURRENT_CMD_BUSY_LOOP 0 /* * Calculates a sha-256 hash over param[2].memref and stores the result in * params[3].memref. params[0].memref should contain a struct * ta_concurent_shm which can be used to tell how many instances of this * function is running in parallel. * * in/out params[0].memref * in/out params[1].value.a (input) number times to calcule the hash * in/out params[1].value.b (output) max concurency * in params[2].memref * out params[3].memref */ #define TA_CONCURRENT_CMD_SHA256 1 #endif /*TA_OS_TEST_H */ optee_test-4.3.0/ta/concurrent/include/user_ta_header_defines.h000066400000000000000000000006651464074351400247410ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #include #define TA_UUID TA_CONCURRENT_UUID #define TA_FLAGS ( TA_FLAG_EXEC_DDR | TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /*USER_TA_HEADER_DEFINES_H*/ optee_test-4.3.0/ta/concurrent/sub.mk000066400000000000000000000000611464074351400176060ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c optee_test-4.3.0/ta/concurrent/ta_entry.c000066400000000000000000000066151464074351400204700ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #include #include #include #include #include #include TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } void TA_DestroyEntryPoint(void) { } TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types, TEE_Param params[4], void **session_ctx) { (void)param_types; (void)params; (void)session_ctx; return TEE_SUCCESS; } void TA_CloseSessionEntryPoint(void *session_ctx) { (void)session_ctx; } static uint32_t inc_active_count(struct ta_concurrent_shm *shm) { return atomic_inc32(&shm->active_count); } static uint32_t dec_active_count(struct ta_concurrent_shm *shm) { return atomic_dec32(&shm->active_count); } static TEE_Result ta_entry_busy_loop(uint32_t param_types, TEE_Param params[4]) { size_t num_rounds = 0; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size < sizeof(struct ta_concurrent_shm)) return TEE_ERROR_BAD_PARAMETERS; params[1].value.b = inc_active_count(params[0].memref.buffer); num_rounds = params[1].value.a; while (num_rounds) { volatile size_t n = 1000; while (n) n--; num_rounds--; } dec_active_count(params[0].memref.buffer); return TEE_SUCCESS; } static TEE_Result ta_entry_sha256(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_OperationHandle op = TEE_HANDLE_NULL; void *out = NULL; size_t out_len = 0; size_t num_rounds = 0; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size < sizeof(struct ta_concurrent_shm)) return TEE_ERROR_BAD_PARAMETERS; if (params[3].memref.size < TEE_SHA256_HASH_SIZE) return TEE_ERROR_BAD_PARAMETERS; params[1].value.b = inc_active_count(params[0].memref.buffer); out_len = params[3].memref.size; out = TEE_Malloc(out_len, 0); if (!out) { res = TEE_ERROR_OUT_OF_MEMORY; goto out; } res = TEE_AllocateOperation(&op, TEE_ALG_SHA256, TEE_MODE_DIGEST, 0); if (res != TEE_SUCCESS) goto out; num_rounds = params[1].value.a; while (num_rounds) { TEE_ResetOperation(op); res = TEE_DigestDoFinal(op, params[2].memref.buffer, params[2].memref.size, out, &out_len); num_rounds--; } TEE_MemMove(params[3].memref.buffer, out, out_len); params[3].memref.size = out_len; out: if (out) TEE_Free(out); if (op) TEE_FreeOperation(op); dec_active_count(params[0].memref.buffer); return res; } TEE_Result TA_InvokeCommandEntryPoint(void *session_ctx, uint32_t cmd_id, uint32_t param_types, TEE_Param params[4]) { (void)session_ctx; switch (cmd_id) { case TA_CONCURRENT_CMD_BUSY_LOOP: return ta_entry_busy_loop(param_types, params); case TA_CONCURRENT_CMD_SHA256: return ta_entry_sha256(param_types, params); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/concurrent_large/000077500000000000000000000000001464074351400176415ustar00rootroot00000000000000optee_test-4.3.0/ta/concurrent_large/Android.mk000066400000000000000000000001611464074351400215500ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 5ce0c432-0ab0-40e5-a056-782ca0e6aba2.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/concurrent_large/Makefile000066400000000000000000000001071464074351400212770ustar00rootroot00000000000000BINARY = 5ce0c432-0ab0-40e5-a056-782ca0e6aba2 include ../ta_common.mk optee_test-4.3.0/ta/concurrent_large/include/000077500000000000000000000000001464074351400212645ustar00rootroot00000000000000optee_test-4.3.0/ta/concurrent_large/include/ta_concurrent_large.h000066400000000000000000000006171464074351400254610ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef TA_CONCURRENT_LARGE_H #define TA_CONCURRENT_LARGE_H #include /* 5ce0c432-0ab0-40e5-a056-782ca0e6aba2 */ #define TA_CONCURRENT_LARGE_UUID { 0x5ce0c432, 0x0ab0, 0x40e5, \ { 0xa0,0x56, 0x78, 0x2c, 0xa0, 0xe6, 0xab, 0xa2 } } #endif /*TA_CONCURRENT_LARGE_H */ optee_test-4.3.0/ta/concurrent_large/include/user_ta_header_defines.h000066400000000000000000000007071464074351400261100ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #include #define TA_UUID TA_CONCURRENT_LARGE_UUID #define TA_FLAGS ( TA_FLAG_EXEC_DDR | TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (2 * 1024 * 1024) #endif /*USER_TA_HEADER_DEFINES_H*/ optee_test-4.3.0/ta/concurrent_large/sub.mk000066400000000000000000000001331464074351400207600ustar00rootroot00000000000000global-incdirs-y += include global-incdirs-y += ../concurrent/include srcs-y += ta_entry.c optee_test-4.3.0/ta/concurrent_large/ta_entry.c000066400000000000000000000066301464074351400216370ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015-2016, Linaro Limited * All rights reserved. */ #include #include #include #include #include #include TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } void TA_DestroyEntryPoint(void) { } TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types, TEE_Param params[4], void **session_ctx) { (void)param_types; (void)params; (void)session_ctx; return TEE_SUCCESS; } void TA_CloseSessionEntryPoint(void *session_ctx) { (void)session_ctx; } static uint32_t inc_active_count(struct ta_concurrent_shm *shm) { return atomic_inc32(&shm->active_count); } static uint32_t dec_active_count(struct ta_concurrent_shm *shm) { return atomic_dec32(&shm->active_count); } static TEE_Result ta_entry_busy_loop(uint32_t param_types, TEE_Param params[4]) { size_t num_rounds = 0; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size < sizeof(struct ta_concurrent_shm)) return TEE_ERROR_BAD_PARAMETERS; params[1].value.b = inc_active_count(params[0].memref.buffer); num_rounds = params[1].value.a; while (num_rounds) { volatile size_t n = 1000; while (n) n--; num_rounds--; } dec_active_count(params[0].memref.buffer); return TEE_SUCCESS; } static TEE_Result ta_entry_sha256(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_OperationHandle op = TEE_HANDLE_NULL; void *out = NULL; size_t out_len = 0; size_t num_rounds = 0; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size < sizeof(struct ta_concurrent_shm)) return TEE_ERROR_BAD_PARAMETERS; if (params[3].memref.size < TEE_SHA256_HASH_SIZE) return TEE_ERROR_BAD_PARAMETERS; params[1].value.b = inc_active_count(params[0].memref.buffer); out_len = params[3].memref.size; out = TEE_Malloc(out_len, 0); if (!out) { res = TEE_ERROR_OUT_OF_MEMORY; goto out; } res = TEE_AllocateOperation(&op, TEE_ALG_SHA256, TEE_MODE_DIGEST, 0); if (res != TEE_SUCCESS) goto out; num_rounds = params[1].value.a; while (num_rounds) { TEE_ResetOperation(op); res = TEE_DigestDoFinal(op, params[2].memref.buffer, params[2].memref.size, out, &out_len); num_rounds--; } TEE_MemMove(params[3].memref.buffer, out, out_len); params[3].memref.size = out_len; out: if (out) TEE_Free(out); if (op) TEE_FreeOperation(op); dec_active_count(params[0].memref.buffer); return res; } TEE_Result TA_InvokeCommandEntryPoint(void *session_ctx, uint32_t cmd_id, uint32_t param_types, TEE_Param params[4]) { (void)session_ctx; switch (cmd_id) { case TA_CONCURRENT_CMD_BUSY_LOOP: return ta_entry_busy_loop(param_types, params); case TA_CONCURRENT_CMD_SHA256: return ta_entry_sha256(param_types, params); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/create_fail_test/000077500000000000000000000000001464074351400176025ustar00rootroot00000000000000optee_test-4.3.0/ta/create_fail_test/Android.mk000066400000000000000000000001601464074351400215100ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := c3f6e2c0-3548-11e1-b86c-0800200c9a66.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/create_fail_test/Makefile000066400000000000000000000001061464074351400212370ustar00rootroot00000000000000BINARY = c3f6e2c0-3548-11e1-b86c-0800200c9a66 include ../ta_common.mk optee_test-4.3.0/ta/create_fail_test/include/000077500000000000000000000000001464074351400212255ustar00rootroot00000000000000optee_test-4.3.0/ta/create_fail_test/include/ta_create_fail_test.h000066400000000000000000000007111464074351400253560ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TA_CREATE_FAIL_TEST_H #define TA_CREATE_FAIL_TEST_H /* This UUID is generated with the ITU-T UUID generator at http://www.itu.int/ITU-T/asn1/uuid.html */ #define TA_CREATE_FAIL_TEST_UUID { 0xc3f6e2c0, 0x3548, 0x11e1, \ { 0xb8, 0x6c, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 } } #endif /*TA_CREATE_FAIL_TEST_H */ optee_test-4.3.0/ta/create_fail_test/include/user_ta_header_defines.h000066400000000000000000000007511464074351400260500ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #define TA_UUID TA_CREATE_FAIL_TEST_UUID #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR) #define TA_STACK_SIZE (1 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/create_fail_test/sub.mk000066400000000000000000000000611464074351400207210ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c optee_test-4.3.0/ta/create_fail_test/ta_entry.c000066400000000000000000000021521464074351400215730ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_ERROR_GENERIC; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[4], void **ppSessionContext) { (void)nParamTypes; (void)pParams; (void)ppSessionContext; return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext) { (void)pSessionContext; } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { (void)pSessionContext; (void)nCommandID; (void)nParamTypes; (void)pParams; return TEE_ERROR_NOT_SUPPORTED; } optee_test-4.3.0/ta/crypt/000077500000000000000000000000001464074351400154465ustar00rootroot00000000000000optee_test-4.3.0/ta/crypt/Android.mk000066400000000000000000000001601464074351400173540ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := cb3e5ba0-adf1-11e0-998b-0002a5d5c51b.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/crypt/Makefile000066400000000000000000000001071464074351400171040ustar00rootroot00000000000000BINARY = cb3e5ba0-adf1-11e0-998b-0002a5d5c51b include ../ta_common.mk optee_test-4.3.0/ta/crypt/aes_impl.c000066400000000000000000001525141464074351400174130ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ /* #define FULL_UNROLL */ #include "aes_impl.h" typedef unsigned long u32; typedef unsigned char u8; static const u32 Te0[256] = { 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU, 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U, 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU, 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU, 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U, 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU, 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU, 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU, 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU, 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU, 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U, 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU, 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU, 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U, 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU, 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU, 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU, 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU, 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU, 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U, 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU, 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU, 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU, 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU, 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U, 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U, 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U, 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U, 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU, 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U, 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U, 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU, 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU, 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U, 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U, 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U, 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU, 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U, 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU, 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U, 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU, 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U, 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U, 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU, 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U, 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U, 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U, 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U, 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U, 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U, 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U, 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U, 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU, 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U, 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U, 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U, 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U, 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U, 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U, 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU, 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U, 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U, 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U, 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU, }; static const u32 Te1[256] = { 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU, 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U, 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU, 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U, 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU, 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U, 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU, 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U, 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U, 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU, 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U, 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U, 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U, 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU, 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U, 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U, 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU, 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U, 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U, 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U, 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU, 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU, 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U, 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU, 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU, 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U, 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU, 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U, 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU, 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U, 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U, 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U, 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU, 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U, 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU, 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U, 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU, 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U, 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U, 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU, 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU, 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU, 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U, 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U, 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU, 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U, 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU, 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U, 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU, 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U, 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU, 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU, 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U, 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU, 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U, 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU, 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U, 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U, 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U, 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU, 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU, 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U, 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU, 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U, }; static const u32 Te2[256] = { 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU, 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U, 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU, 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U, 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU, 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U, 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU, 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U, 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U, 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU, 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U, 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U, 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U, 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU, 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U, 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U, 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU, 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U, 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U, 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U, 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU, 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU, 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U, 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU, 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU, 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U, 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU, 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U, 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU, 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U, 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U, 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U, 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU, 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U, 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU, 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U, 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU, 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U, 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U, 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU, 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU, 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU, 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U, 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U, 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU, 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U, 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU, 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U, 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU, 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U, 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU, 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU, 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U, 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU, 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U, 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU, 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U, 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U, 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U, 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU, 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU, 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U, 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU, 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U, }; static const u32 Te3[256] = { 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U, 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U, 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U, 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU, 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU, 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU, 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U, 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU, 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU, 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U, 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U, 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU, 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU, 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU, 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU, 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU, 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U, 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU, 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU, 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U, 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U, 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U, 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U, 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U, 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU, 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U, 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU, 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU, 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U, 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U, 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U, 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU, 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U, 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU, 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU, 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U, 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U, 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU, 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U, 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU, 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U, 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U, 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U, 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U, 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU, 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U, 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU, 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U, 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU, 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U, 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU, 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU, 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU, 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU, 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U, 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U, 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U, 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U, 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U, 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U, 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU, 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U, 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU, 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU, }; static const u32 Te4[256] = { 0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU, 0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U, 0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU, 0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U, 0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU, 0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U, 0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU, 0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U, 0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U, 0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU, 0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U, 0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U, 0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U, 0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU, 0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U, 0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U, 0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU, 0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U, 0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U, 0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U, 0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU, 0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU, 0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U, 0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU, 0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU, 0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U, 0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU, 0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U, 0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU, 0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U, 0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U, 0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U, 0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU, 0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U, 0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU, 0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U, 0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU, 0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U, 0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U, 0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU, 0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU, 0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU, 0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U, 0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U, 0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU, 0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U, 0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU, 0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U, 0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU, 0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U, 0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU, 0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU, 0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U, 0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU, 0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U, 0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU, 0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U, 0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U, 0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U, 0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU, 0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU, 0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U, 0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU, 0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U, }; static const u32 Td0[256] = { 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U, 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U, 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U, 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU, 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U, 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U, 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU, 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U, 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU, 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U, 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U, 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U, 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U, 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU, 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U, 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU, 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U, 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU, 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U, 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U, 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U, 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU, 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U, 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU, 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U, 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU, 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U, 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU, 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU, 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U, 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU, 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U, 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU, 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U, 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U, 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U, 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU, 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U, 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U, 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU, 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U, 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U, 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U, 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U, 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U, 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU, 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U, 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U, 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U, 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U, 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U, 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU, 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU, 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU, 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU, 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U, 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U, 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU, 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU, 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U, 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU, 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U, 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U, 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U, }; static const u32 Td1[256] = { 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU, 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U, 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU, 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U, 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U, 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U, 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U, 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U, 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U, 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU, 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU, 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU, 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U, 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU, 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U, 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U, 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U, 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU, 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU, 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U, 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU, 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U, 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU, 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU, 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U, 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U, 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U, 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU, 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U, 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU, 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U, 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U, 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U, 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU, 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U, 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U, 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U, 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U, 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U, 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U, 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU, 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU, 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U, 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU, 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U, 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU, 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU, 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U, 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU, 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U, 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U, 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U, 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U, 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U, 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U, 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U, 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU, 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U, 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U, 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU, 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U, 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U, 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U, 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U, }; static const u32 Td2[256] = { 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U, 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U, 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U, 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U, 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU, 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U, 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U, 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U, 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U, 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU, 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U, 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U, 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU, 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U, 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U, 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U, 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U, 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U, 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U, 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU, 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U, 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U, 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U, 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U, 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U, 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU, 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU, 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U, 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU, 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U, 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU, 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU, 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU, 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU, 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U, 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U, 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U, 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U, 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U, 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U, 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U, 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU, 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU, 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U, 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U, 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU, 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU, 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U, 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U, 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U, 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U, 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U, 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U, 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U, 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU, 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U, 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U, 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U, 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U, 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U, 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U, 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU, 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U, 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U, }; static const u32 Td3[256] = { 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU, 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU, 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U, 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U, 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU, 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU, 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U, 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU, 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U, 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU, 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U, 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U, 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U, 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U, 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U, 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU, 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU, 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U, 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U, 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU, 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU, 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U, 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U, 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U, 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U, 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU, 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U, 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U, 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU, 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU, 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U, 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U, 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U, 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU, 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U, 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U, 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U, 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U, 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U, 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U, 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U, 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU, 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U, 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U, 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU, 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU, 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U, 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU, 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U, 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U, 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U, 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U, 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U, 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U, 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU, 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU, 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU, 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU, 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U, 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U, 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U, 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU, 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U, 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U, }; static const u32 Td4[256] = { 0x52525252U, 0x09090909U, 0x6a6a6a6aU, 0xd5d5d5d5U, 0x30303030U, 0x36363636U, 0xa5a5a5a5U, 0x38383838U, 0xbfbfbfbfU, 0x40404040U, 0xa3a3a3a3U, 0x9e9e9e9eU, 0x81818181U, 0xf3f3f3f3U, 0xd7d7d7d7U, 0xfbfbfbfbU, 0x7c7c7c7cU, 0xe3e3e3e3U, 0x39393939U, 0x82828282U, 0x9b9b9b9bU, 0x2f2f2f2fU, 0xffffffffU, 0x87878787U, 0x34343434U, 0x8e8e8e8eU, 0x43434343U, 0x44444444U, 0xc4c4c4c4U, 0xdedededeU, 0xe9e9e9e9U, 0xcbcbcbcbU, 0x54545454U, 0x7b7b7b7bU, 0x94949494U, 0x32323232U, 0xa6a6a6a6U, 0xc2c2c2c2U, 0x23232323U, 0x3d3d3d3dU, 0xeeeeeeeeU, 0x4c4c4c4cU, 0x95959595U, 0x0b0b0b0bU, 0x42424242U, 0xfafafafaU, 0xc3c3c3c3U, 0x4e4e4e4eU, 0x08080808U, 0x2e2e2e2eU, 0xa1a1a1a1U, 0x66666666U, 0x28282828U, 0xd9d9d9d9U, 0x24242424U, 0xb2b2b2b2U, 0x76767676U, 0x5b5b5b5bU, 0xa2a2a2a2U, 0x49494949U, 0x6d6d6d6dU, 0x8b8b8b8bU, 0xd1d1d1d1U, 0x25252525U, 0x72727272U, 0xf8f8f8f8U, 0xf6f6f6f6U, 0x64646464U, 0x86868686U, 0x68686868U, 0x98989898U, 0x16161616U, 0xd4d4d4d4U, 0xa4a4a4a4U, 0x5c5c5c5cU, 0xccccccccU, 0x5d5d5d5dU, 0x65656565U, 0xb6b6b6b6U, 0x92929292U, 0x6c6c6c6cU, 0x70707070U, 0x48484848U, 0x50505050U, 0xfdfdfdfdU, 0xededededU, 0xb9b9b9b9U, 0xdadadadaU, 0x5e5e5e5eU, 0x15151515U, 0x46464646U, 0x57575757U, 0xa7a7a7a7U, 0x8d8d8d8dU, 0x9d9d9d9dU, 0x84848484U, 0x90909090U, 0xd8d8d8d8U, 0xababababU, 0x00000000U, 0x8c8c8c8cU, 0xbcbcbcbcU, 0xd3d3d3d3U, 0x0a0a0a0aU, 0xf7f7f7f7U, 0xe4e4e4e4U, 0x58585858U, 0x05050505U, 0xb8b8b8b8U, 0xb3b3b3b3U, 0x45454545U, 0x06060606U, 0xd0d0d0d0U, 0x2c2c2c2cU, 0x1e1e1e1eU, 0x8f8f8f8fU, 0xcacacacaU, 0x3f3f3f3fU, 0x0f0f0f0fU, 0x02020202U, 0xc1c1c1c1U, 0xafafafafU, 0xbdbdbdbdU, 0x03030303U, 0x01010101U, 0x13131313U, 0x8a8a8a8aU, 0x6b6b6b6bU, 0x3a3a3a3aU, 0x91919191U, 0x11111111U, 0x41414141U, 0x4f4f4f4fU, 0x67676767U, 0xdcdcdcdcU, 0xeaeaeaeaU, 0x97979797U, 0xf2f2f2f2U, 0xcfcfcfcfU, 0xcecececeU, 0xf0f0f0f0U, 0xb4b4b4b4U, 0xe6e6e6e6U, 0x73737373U, 0x96969696U, 0xacacacacU, 0x74747474U, 0x22222222U, 0xe7e7e7e7U, 0xadadadadU, 0x35353535U, 0x85858585U, 0xe2e2e2e2U, 0xf9f9f9f9U, 0x37373737U, 0xe8e8e8e8U, 0x1c1c1c1cU, 0x75757575U, 0xdfdfdfdfU, 0x6e6e6e6eU, 0x47474747U, 0xf1f1f1f1U, 0x1a1a1a1aU, 0x71717171U, 0x1d1d1d1dU, 0x29292929U, 0xc5c5c5c5U, 0x89898989U, 0x6f6f6f6fU, 0xb7b7b7b7U, 0x62626262U, 0x0e0e0e0eU, 0xaaaaaaaaU, 0x18181818U, 0xbebebebeU, 0x1b1b1b1bU, 0xfcfcfcfcU, 0x56565656U, 0x3e3e3e3eU, 0x4b4b4b4bU, 0xc6c6c6c6U, 0xd2d2d2d2U, 0x79797979U, 0x20202020U, 0x9a9a9a9aU, 0xdbdbdbdbU, 0xc0c0c0c0U, 0xfefefefeU, 0x78787878U, 0xcdcdcdcdU, 0x5a5a5a5aU, 0xf4f4f4f4U, 0x1f1f1f1fU, 0xddddddddU, 0xa8a8a8a8U, 0x33333333U, 0x88888888U, 0x07070707U, 0xc7c7c7c7U, 0x31313131U, 0xb1b1b1b1U, 0x12121212U, 0x10101010U, 0x59595959U, 0x27272727U, 0x80808080U, 0xececececU, 0x5f5f5f5fU, 0x60606060U, 0x51515151U, 0x7f7f7f7fU, 0xa9a9a9a9U, 0x19191919U, 0xb5b5b5b5U, 0x4a4a4a4aU, 0x0d0d0d0dU, 0x2d2d2d2dU, 0xe5e5e5e5U, 0x7a7a7a7aU, 0x9f9f9f9fU, 0x93939393U, 0xc9c9c9c9U, 0x9c9c9c9cU, 0xefefefefU, 0xa0a0a0a0U, 0xe0e0e0e0U, 0x3b3b3b3bU, 0x4d4d4d4dU, 0xaeaeaeaeU, 0x2a2a2a2aU, 0xf5f5f5f5U, 0xb0b0b0b0U, 0xc8c8c8c8U, 0xebebebebU, 0xbbbbbbbbU, 0x3c3c3c3cU, 0x83838383U, 0x53535353U, 0x99999999U, 0x61616161U, 0x17171717U, 0x2b2b2b2bU, 0x04040404U, 0x7e7e7e7eU, 0xbabababaU, 0x77777777U, 0xd6d6d6d6U, 0x26262626U, 0xe1e1e1e1U, 0x69696969U, 0x14141414U, 0x63636363U, 0x55555555U, 0x21212121U, 0x0c0c0c0cU, 0x7d7d7d7dU, }; static const u32 rcon[] = { 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ }; #define GETU32(plaintext) (((u32)(plaintext)[0] << 24) ^ \ ((u32)(plaintext)[1] << 16) ^ \ ((u32)(plaintext)[2] << 8) ^ \ ((u32)(plaintext)[3])) #define PUTU32(ciphertext, st) { (ciphertext)[0] = (u8)((st) >> 24); \ (ciphertext)[1] = (u8)((st) >> 16); \ (ciphertext)[2] = (u8)((st) >> 8); \ (ciphertext)[3] = (u8)(st); } /** * Expand the cipher key into the encryption key schedule. * * @return the number of rounds for the given cipher key size. */ int rijndaelSetupEncrypt(u32 *rk, const u8 *key, int keybits) { int i = 0; u32 temp = 0; rk[0] = GETU32(key); rk[1] = GETU32(key + 4); rk[2] = GETU32(key + 8); rk[3] = GETU32(key + 12); if (keybits == 128) { for (;;) { temp = rk[3]; rk[4] = rk[0] ^ (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ (Te4[(temp) & 0xff] & 0x0000ff00) ^ (Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i]; rk[5] = rk[1] ^ rk[4]; rk[6] = rk[2] ^ rk[5]; rk[7] = rk[3] ^ rk[6]; if (++i == 10) return 10; rk += 4; } } rk[4] = GETU32(key + 16); rk[5] = GETU32(key + 20); if (keybits == 192) { for (;;) { temp = rk[5]; rk[6] = rk[0] ^ (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ (Te4[(temp) & 0xff] & 0x0000ff00) ^ (Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i]; rk[7] = rk[1] ^ rk[6]; rk[8] = rk[2] ^ rk[7]; rk[9] = rk[3] ^ rk[8]; if (++i == 8) return 12; rk[10] = rk[4] ^ rk[9]; rk[11] = rk[5] ^ rk[10]; rk += 6; } } rk[6] = GETU32(key + 24); rk[7] = GETU32(key + 28); if (keybits == 256) { for (;;) { temp = rk[7]; rk[8] = rk[0] ^ (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ (Te4[(temp) & 0xff] & 0x0000ff00) ^ (Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i]; rk[9] = rk[1] ^ rk[8]; rk[10] = rk[2] ^ rk[9]; rk[11] = rk[3] ^ rk[10]; if (++i == 7) return 14; temp = rk[11]; rk[12] = rk[4] ^ (Te4[(temp >> 24)] & 0xff000000) ^ (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(temp) & 0xff] & 0x000000ff); rk[13] = rk[5] ^ rk[12]; rk[14] = rk[6] ^ rk[13]; rk[15] = rk[7] ^ rk[14]; rk += 8; } } return 0; } /** * Expand the cipher key into the decryption key schedule. * * @return the number of rounds for the given cipher key size. */ int rijndaelSetupDecrypt(u32 *rk, const u8 *key, int keybits) { int nrounds = 0; int i = 0; int j = 0; u32 temp = 0; /* expand the cipher key: */ nrounds = rijndaelSetupEncrypt(rk, key, keybits); /* invert the order of the round keys: */ for (i = 0, j = 4 * nrounds; i < j; i += 4, j -= 4) { temp = rk[i]; rk[i] = rk[j]; rk[j] = temp; temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp; temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp; temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp; } /* apply the inverse MixColumn transform to all round keys but the first and the last: */ for (i = 1; i < nrounds; i++) { rk += 4; rk[0] = Td0[Te4[(rk[0] >> 24)] & 0xff] ^ Td1[Te4[(rk[0] >> 16) & 0xff] & 0xff] ^ Td2[Te4[(rk[0] >> 8) & 0xff] & 0xff] ^ Td3[Te4[(rk[0]) & 0xff] & 0xff]; rk[1] = Td0[Te4[(rk[1] >> 24)] & 0xff] ^ Td1[Te4[(rk[1] >> 16) & 0xff] & 0xff] ^ Td2[Te4[(rk[1] >> 8) & 0xff] & 0xff] ^ Td3[Te4[(rk[1]) & 0xff] & 0xff]; rk[2] = Td0[Te4[(rk[2] >> 24)] & 0xff] ^ Td1[Te4[(rk[2] >> 16) & 0xff] & 0xff] ^ Td2[Te4[(rk[2] >> 8) & 0xff] & 0xff] ^ Td3[Te4[(rk[2]) & 0xff] & 0xff]; rk[3] = Td0[Te4[(rk[3] >> 24)] & 0xff] ^ Td1[Te4[(rk[3] >> 16) & 0xff] & 0xff] ^ Td2[Te4[(rk[3] >> 8) & 0xff] & 0xff] ^ Td3[Te4[(rk[3]) & 0xff] & 0xff]; } return nrounds; } void rijndaelEncrypt(const u32 *rk, int nrounds, const u8 plaintext[16], u8 ciphertext[16]) { u32 s0 = 0; u32 s1 = 0; u32 s2 = 0; u32 s3 = 0; u32 t0 = 0; u32 t1 = 0; u32 t2 = 0; u32 t3 = 0; #ifndef FULL_UNROLL int r = 0; #endif /* ?FULL_UNROLL */ /* * map byte array block to cipher state * and add initial round key: */ s0 = GETU32(plaintext) ^ rk[0]; s1 = GETU32(plaintext + 4) ^ rk[1]; s2 = GETU32(plaintext + 8) ^ rk[2]; s3 = GETU32(plaintext + 12) ^ rk[3]; #ifdef FULL_UNROLL /* round 1: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[4]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[5]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[6]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[7]; /* round 2: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[8]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[9]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11]; /* round 3: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15]; /* round 4: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19]; /* round 5: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23]; /* round 6: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27]; /* round 7: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31]; /* round 8: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35]; /* round 9: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39]; if (nrounds > 10) { /* round 10: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43]; /* round 11: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47]; if (nrounds > 12) { /* round 12: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51]; /* round 13: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55]; } } rk += nrounds << 2; #else /* !FULL_UNROLL */ /* * nrounds - 1 full rounds: */ r = nrounds >> 1; for (;;) { t0 = Te0[(s0 >> 24)] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[4]; t1 = Te0[(s1 >> 24)] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[5]; t2 = Te0[(s2 >> 24)] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[6]; t3 = Te0[(s3 >> 24)] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[7]; rk += 8; if (--r == 0) break; s0 = Te0[(t0 >> 24)] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[0]; s1 = Te0[(t1 >> 24)] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[1]; s2 = Te0[(t2 >> 24)] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[2]; s3 = Te0[(t3 >> 24)] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[3]; } #endif /* ?FULL_UNROLL */ /* * apply last round and * map cipher state to byte array block: */ s0 = (Te4[(t0 >> 24)] & 0xff000000) ^ (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[t3 & 0xff] & 0x000000ff) ^ rk[0]; PUTU32(ciphertext, s0); s1 = (Te4[(t1 >> 24)] & 0xff000000) ^ (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[t0 & 0xff] & 0x000000ff) ^ rk[1]; PUTU32(ciphertext + 4, s1); s2 = (Te4[(t2 >> 24)] & 0xff000000) ^ (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[t1 & 0xff] & 0x000000ff) ^ rk[2]; PUTU32(ciphertext + 8, s2); s3 = (Te4[(t3 >> 24)] & 0xff000000) ^ (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[t2 & 0xff] & 0x000000ff) ^ rk[3]; PUTU32(ciphertext + 12, s3); } void rijndaelDecrypt(const u32 *rk, int nrounds, const u8 ciphertext[16], u8 plaintext[16]) { u32 s0 = 0; u32 s1 = 0; u32 s2 = 0; u32 s3 = 0; u32 t0 = 0; u32 t1 = 0; u32 t2 = 0; u32 t3 = 0; #ifndef FULL_UNROLL int r = 0; #endif /* ?FULL_UNROLL */ /* * map byte array block to cipher state * and add initial round key: */ s0 = GETU32(ciphertext) ^ rk[0]; s1 = GETU32(ciphertext + 4) ^ rk[1]; s2 = GETU32(ciphertext + 8) ^ rk[2]; s3 = GETU32(ciphertext + 12) ^ rk[3]; #ifdef FULL_UNROLL /* round 1: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[4]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[5]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[6]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[7]; /* round 2: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[8]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[9]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11]; /* round 3: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15]; /* round 4: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19]; /* round 5: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23]; /* round 6: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27]; /* round 7: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31]; /* round 8: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35]; /* round 9: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39]; if (nrounds > 10) { /* round 10: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43]; /* round 11: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47]; if (nrounds > 12) { /* round 12: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51]; /* round 13: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55]; } } rk += nrounds << 2; #else /* !FULL_UNROLL */ /* * nrounds - 1 full rounds: */ r = nrounds >> 1; for (;;) { t0 = Td0[(s0 >> 24)] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[4]; t1 = Td0[(s1 >> 24)] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[5]; t2 = Td0[(s2 >> 24)] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[6]; t3 = Td0[(s3 >> 24)] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[7]; rk += 8; if (--r == 0) break; s0 = Td0[(t0 >> 24)] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[0]; s1 = Td0[(t1 >> 24)] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[1]; s2 = Td0[(t2 >> 24)] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[2]; s3 = Td0[(t3 >> 24)] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[3]; } #endif /* ?FULL_UNROLL */ /* * apply last round and * map cipher state to byte array block: */ s0 = (Td4[(t0 >> 24)] & 0xff000000) ^ (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t1) & 0xff] & 0x000000ff) ^ rk[0]; PUTU32(plaintext, s0); s1 = (Td4[(t1 >> 24)] & 0xff000000) ^ (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t2) & 0xff] & 0x000000ff) ^ rk[1]; PUTU32(plaintext + 4, s1); s2 = (Td4[(t2 >> 24)] & 0xff000000) ^ (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t3) & 0xff] & 0x000000ff) ^ rk[2]; PUTU32(plaintext + 8, s2); s3 = (Td4[(t3 >> 24)] & 0xff000000) ^ (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t0) & 0xff] & 0x000000ff) ^ rk[3]; PUTU32(plaintext + 12, s3); } optee_test-4.3.0/ta/crypt/aes_taf.c000066400000000000000000000055531464074351400172240ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include "aes_taf.h" #include "aes_impl.h" /* Encryption/decryption key */ const unsigned char key[KEYLENGTH(AES_256)] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; /* Encryption/decryption buffer */ unsigned long rk[RKLENGTH(AES_256)]; TEE_Result ta_entry_aes256ecb_encrypt(uint32_t param_types, TEE_Param params[4]) { size_t n_input_blocks = 0; size_t i = 0; /* * It is expected that memRef[0] is input buffer and memRef[1] is * output buffer. */ if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { return TEE_ERROR_BAD_PARAMETERS; } /* Check that input buffer is whole mult. of block size, in bits */ if ((params[0].memref.size << 8) % AES_BLOCK_SIZE != 0) return TEE_ERROR_BAD_PARAMETERS; /* Check that output buffer is whole mult. of block size, in bits */ if ((params[1].memref.size << 8) % AES_BLOCK_SIZE != 0) return TEE_ERROR_BAD_PARAMETERS; /* Set up for encryption */ (void)rijndaelSetupEncrypt(rk, key, AES_256); n_input_blocks = params[0].memref.size / (AES_BLOCK_SIZE / 8); for (i = 0; i < n_input_blocks; i++) { const unsigned char *ciphertext = params[0].memref.buffer; unsigned char *plaintext = params[1].memref.buffer; rijndaelEncrypt(rk, NROUNDS(AES_256), &ciphertext[i * (AES_BLOCK_SIZE / 8)], &plaintext[i * (AES_BLOCK_SIZE / 8)]); } return TEE_SUCCESS; } TEE_Result ta_entry_aes256ecb_decrypt(uint32_t param_types, TEE_Param params[4]) { size_t n_input_blocks = 0; size_t i = 0; /* * It is expected that memRef[0] is input buffer and memRef[1] is * output buffer. */ if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { return TEE_ERROR_BAD_PARAMETERS; } /* Check that input buffer is whole mult. of block size, in bits */ if ((params[0].memref.size << 8) % AES_BLOCK_SIZE != 0) return TEE_ERROR_BAD_PARAMETERS; /* Check that output buffer is whole mult. of block size, in bits */ if ((params[1].memref.size << 8) % AES_BLOCK_SIZE != 0) return TEE_ERROR_BAD_PARAMETERS; /* Set up for decryption */ (void)rijndaelSetupDecrypt(rk, key, AES_256); n_input_blocks = params[0].memref.size / (AES_BLOCK_SIZE / 8); for (i = 0; i < n_input_blocks; i++) { const unsigned char *ciphertext = params[0].memref.buffer; unsigned char *plaintext = params[1].memref.buffer; rijndaelDecrypt(rk, NROUNDS(AES_256), &ciphertext[i * (AES_BLOCK_SIZE / 8)], &plaintext[i * (AES_BLOCK_SIZE / 8)]); } return TEE_SUCCESS; } optee_test-4.3.0/ta/crypt/arith_taf.c000066400000000000000000000373531464074351400175660ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* Copyright (c) 2018, Linaro Limited */ #include #include #include #include #include #include "handle.h" #define HT_BIGINT BIT(31) #define HT_FMMCTX BIT(30) #define HT_FMMVAR BIT(29) #define HT_MASK (HT_BIGINT | HT_FMMCTX | HT_FMMVAR) #define CHECK_PT(t0, t1, t2, t3) do { \ const uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_##t0, \ TEE_PARAM_TYPE_##t1, \ TEE_PARAM_TYPE_##t2, \ TEE_PARAM_TYPE_##t3); \ \ if ((param_types) != exp_pt) { \ EMSG("Unpexteded param_types 0x%" PRIx32 ", exptected 0x%" PRIx32, (param_types), exp_pt); \ return TEE_ERROR_BAD_PARAMETERS; \ } \ } while (0) static struct handle_db hdb = HANDLE_DB_INITIALIZER; static void *lookup_handle(uint32_t type, uint32_t handle) { void *ptr = NULL; if ((handle & HT_MASK) == type) ptr = handle_lookup(&hdb, handle & ~HT_MASK); if (!ptr) EMSG("Invalid handle 0x%" PRIx32, handle); return ptr; } static bool get_handle(uint32_t type, void *ptr, uint32_t *handle) { switch (type) { case HT_BIGINT: case HT_FMMCTX: case HT_FMMVAR: break; default: EMSG("Invalid type 0x%" PRIx32, type); return false; } int h = handle_get(&hdb, ptr); if (h < 0) { EMSG("Failed to allocate handle"); return false; } *handle = (uint32_t)h | type; return true; } static void *put_handle(uint32_t handle) { void *ptr = handle_put(&hdb, handle & ~HT_MASK); if (!ptr) EMSG("Invalid handle 0x%" PRIx32, handle); return ptr; } TEE_Result ta_entry_arith_new_var(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); size_t len = TEE_BigIntSizeInU32(params[0].value.a); TEE_BigInt *big_int = TEE_Malloc(len * sizeof(TEE_BigInt), 0); if (!big_int) return TEE_ERROR_OUT_OF_MEMORY; if (!get_handle(HT_BIGINT, big_int, ¶ms[1].value.a)) { TEE_Free(big_int); return TEE_ERROR_OUT_OF_MEMORY; } TEE_BigIntInit(big_int, len); return TEE_SUCCESS; } TEE_Result ta_entry_arith_new_fmm_ctx(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_BigInt *modulus = NULL; uint32_t len = 0; TEE_BigIntFMMContext *ctx = NULL; CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); modulus = lookup_handle(HT_BIGINT, params[0].value.b); if (!modulus) return TEE_ERROR_BAD_PARAMETERS; len = TEE_BigIntFMMContextSizeInU32(params[0].value.a); ctx = TEE_Malloc(len * sizeof(*ctx), 0); if (!get_handle(HT_FMMCTX, ctx, ¶ms[1].value.a)) { TEE_Free(ctx); return TEE_ERROR_OUT_OF_MEMORY; } TEE_BigIntInitFMMContext(ctx, len, modulus); return TEE_SUCCESS; } TEE_Result ta_entry_arith_new_fmm_var(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); size_t len = TEE_BigIntFMMSizeInU32(params[0].value.a); TEE_BigIntFMM *fmm = TEE_Malloc(len * sizeof(*fmm), 0); if (!fmm) return TEE_ERROR_OUT_OF_MEMORY; if (!get_handle(HT_FMMVAR, fmm, ¶ms[1].value.a)) { TEE_Free(fmm); return TEE_ERROR_OUT_OF_MEMORY; } TEE_BigIntInitFMM(fmm, len); return TEE_SUCCESS; } TEE_Result ta_entry_arith_free_handle(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, NONE, NONE, NONE); void *ptr = put_handle(params[0].value.a & ~HT_MASK); if (!ptr) return TEE_ERROR_BAD_PARAMETERS; TEE_Free(ptr); return TEE_SUCCESS; } TEE_Result ta_entry_arith_from_octet_string(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, MEMREF_INPUT, NONE, NONE); TEE_BigInt *big_int = lookup_handle(HT_BIGINT, params[0].value.a); if (!big_int) return TEE_ERROR_BAD_PARAMETERS; return TEE_BigIntConvertFromOctetString(big_int, params[1].memref.buffer, params[1].memref.size, params[0].value.b); } TEE_Result ta_entry_arith_from_s32(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, NONE, NONE, NONE); TEE_BigInt *big_int = lookup_handle(HT_BIGINT, params[0].value.a); if (!big_int) return TEE_ERROR_BAD_PARAMETERS; TEE_BigIntConvertFromS32(big_int, params[0].value.b); return TEE_SUCCESS; } TEE_Result ta_entry_arith_get_value(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, MEMREF_OUTPUT, NONE); TEE_BigInt *big_int = lookup_handle(HT_BIGINT, params[0].value.a); if (!big_int) return TEE_ERROR_BAD_PARAMETERS; if (TEE_BigIntCmpS32(big_int, 0) < 0) params[1].value.a = -1; else params[1].value.a = 1; return TEE_BigIntConvertToOctetString(params[2].memref.buffer, ¶ms[2].memref.size, big_int); } TEE_Result ta_entry_arith_get_value_s32(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); TEE_BigInt *big_int = lookup_handle(HT_BIGINT, params[0].value.a); if (!big_int) return TEE_ERROR_BAD_PARAMETERS; int32_t v = 0; TEE_Result res = TEE_BigIntConvertToS32(&v, big_int); if (!res) params[1].value.a = v; return res; } TEE_Result ta_entry_arith_get_bit(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); TEE_BigInt *big_int = lookup_handle(HT_BIGINT, params[0].value.a); if (!big_int) return TEE_ERROR_BAD_PARAMETERS; params[1].value.a = TEE_BigIntGetBit(big_int, params[0].value.b); return TEE_SUCCESS; } TEE_Result ta_entry_arith_get_bit_count(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); TEE_BigInt *big_int = lookup_handle(HT_BIGINT, params[0].value.a); if (!big_int) return TEE_ERROR_BAD_PARAMETERS; params[1].value.a = TEE_BigIntGetBitCount(big_int); return TEE_SUCCESS; } TEE_Result ta_entry_arith_set_bit(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, NONE, NONE); TEE_BigInt *big_int = lookup_handle(HT_BIGINT, params[0].value.a); if (!big_int) return TEE_ERROR_BAD_PARAMETERS; return TEE_BigIntSetBit(big_int, params[0].value.b, params[1].value.a); } TEE_Result ta_entry_arith_shift_right(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, NONE, NONE); TEE_BigInt *op = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *dest = lookup_handle(HT_BIGINT, params[1].value.a); if (!op || !dest) return TEE_ERROR_BAD_PARAMETERS; TEE_BigIntShiftRight(dest, op, params[0].value.b); return TEE_SUCCESS; } TEE_Result ta_entry_arith_cmp(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); TEE_BigInt *op1 = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *op2 = lookup_handle(HT_BIGINT, params[0].value.b); if (!op1 || !op2) return TEE_ERROR_BAD_PARAMETERS; params[1].value.a = TEE_BigIntCmp(op1, op2); return TEE_SUCCESS; } TEE_Result ta_entry_arith_cmp_s32(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); TEE_BigInt *op = lookup_handle(HT_BIGINT, params[0].value.a); if (!op) return TEE_ERROR_BAD_PARAMETERS; params[1].value.a = TEE_BigIntCmpS32(op, params[0].value.b); return TEE_SUCCESS; } static TEE_Result ternary_func(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS], void (*func)(TEE_BigInt *dest, const TEE_BigInt *op1, const TEE_BigInt *op2, const TEE_BigInt *n)) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, NONE, NONE); TEE_BigInt *op1 = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *op2 = lookup_handle(HT_BIGINT, params[0].value.b); TEE_BigInt *n = lookup_handle(HT_BIGINT, params[1].value.a); TEE_BigInt *dest = lookup_handle(HT_BIGINT, params[1].value.b); if (!op1 || !op2 || !n || !dest) return TEE_ERROR_BAD_PARAMETERS; func(dest, op1, op2, n); return TEE_SUCCESS; } static TEE_Result binary_func(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS], void (*func)(TEE_BigInt *dest, const TEE_BigInt *op1, const TEE_BigInt *op2)) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, NONE, NONE); TEE_BigInt *op1 = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *op2 = lookup_handle(HT_BIGINT, params[0].value.b); TEE_BigInt *dest = lookup_handle(HT_BIGINT, params[1].value.a); if (!op1 || !op2 || !dest) return TEE_ERROR_BAD_PARAMETERS; func(dest, op1, op2); return TEE_SUCCESS; } static TEE_Result unary_func(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS], void (*func)(TEE_BigInt *dest, const TEE_BigInt *op)) { CHECK_PT(VALUE_INPUT, NONE, NONE, NONE); TEE_BigInt *op = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *dest = lookup_handle(HT_BIGINT, params[0].value.b); if (!op || !dest) return TEE_ERROR_BAD_PARAMETERS; func(dest, op); return TEE_SUCCESS; } static TEE_Result unary_func_res(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS], TEE_Result (*func)(TEE_BigInt *dest, const TEE_BigInt *op)) { CHECK_PT(VALUE_INPUT, NONE, NONE, NONE); TEE_BigInt *op = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *dest = lookup_handle(HT_BIGINT, params[0].value.b); if (!op || !dest) return TEE_ERROR_BAD_PARAMETERS; return func(dest, op); } TEE_Result ta_entry_arith_add(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return binary_func(param_types, params, TEE_BigIntAdd); } TEE_Result ta_entry_arith_sub(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return binary_func(param_types, params, TEE_BigIntSub); } TEE_Result ta_entry_arith_mul(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return binary_func(param_types, params, TEE_BigIntMul); } TEE_Result ta_entry_arith_neg(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return unary_func(param_types, params, TEE_BigIntNeg); } TEE_Result ta_entry_arith_assign(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return unary_func_res(param_types, params, TEE_BigIntAssign); } TEE_Result ta_entry_arith_abs(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return unary_func_res(param_types, params, TEE_BigIntAbs); } TEE_Result ta_entry_arith_sqr(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return unary_func(param_types, params, TEE_BigIntSquare); } TEE_Result ta_entry_arith_div(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, NONE, NONE); TEE_BigInt *op1 = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *op2 = lookup_handle(HT_BIGINT, params[0].value.b); TEE_BigInt *dest_q = lookup_handle(HT_BIGINT, params[1].value.a); TEE_BigInt *dest_r = lookup_handle(HT_BIGINT, params[1].value.b); if (!op1 || !op2 || !dest_q || !dest_r) return TEE_ERROR_BAD_PARAMETERS; TEE_BigIntDiv(dest_q, dest_r, op1, op2); return TEE_SUCCESS; } TEE_Result ta_entry_arith_mod(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return binary_func(param_types, params, TEE_BigIntMod); } TEE_Result ta_entry_arith_addmod(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return ternary_func(param_types, params, TEE_BigIntAddMod); } TEE_Result ta_entry_arith_submod(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return ternary_func(param_types, params, TEE_BigIntSubMod); } TEE_Result ta_entry_arith_mulmod(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return ternary_func(param_types, params, TEE_BigIntMulMod); } TEE_Result ta_entry_arith_sqrmod(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return binary_func(param_types, params, TEE_BigIntSquareMod); } TEE_Result ta_entry_arith_invmod(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { return binary_func(param_types, params, TEE_BigIntInvMod); } TEE_Result ta_entry_arith_expmod(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, VALUE_INPUT, NONE); TEE_BigInt *op1 = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *op2 = lookup_handle(HT_BIGINT, params[0].value.b); TEE_BigInt *n = lookup_handle(HT_BIGINT, params[1].value.a); TEE_BigIntFMMContext *ctx = lookup_handle(HT_FMMCTX, params[1].value.b); TEE_BigInt *dest = lookup_handle(HT_BIGINT, params[2].value.a); if (!op1 || !op2 || !n || !dest) return TEE_ERROR_BAD_PARAMETERS; return TEE_BigIntExpMod(dest, op1, op2, n, ctx); } TEE_Result ta_entry_arith_is_rel_prime(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); TEE_BigInt *op1 = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *op2 = lookup_handle(HT_BIGINT, params[0].value.b); if (!op1 || !op2) return TEE_ERROR_BAD_PARAMETERS; params[1].value.a = TEE_BigIntRelativePrime(op1, op2); return TEE_SUCCESS; } TEE_Result ta_entry_arith_compute_egcd(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, VALUE_INPUT, NONE); TEE_BigInt *op1 = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *op2 = lookup_handle(HT_BIGINT, params[0].value.b); TEE_BigInt *dest_gcd = lookup_handle(HT_BIGINT, params[2].value.a); TEE_BigInt *dest_u = NULL; TEE_BigInt *dest_v = NULL; if (!op1 || !op2 || !dest_gcd) return TEE_ERROR_BAD_PARAMETERS; if (params[1].value.a != TA_CRYPT_ARITH_INVALID_HANDLE) { dest_u = lookup_handle(HT_BIGINT, params[1].value.a); if (!dest_u) return TEE_ERROR_BAD_PARAMETERS; } if (params[1].value.b != TA_CRYPT_ARITH_INVALID_HANDLE) { dest_v = lookup_handle(HT_BIGINT, params[1].value.b); if (!dest_v) return TEE_ERROR_BAD_PARAMETERS; } TEE_BigIntComputeExtendedGcd(dest_gcd, dest_u, dest_v, op1, op2); return TEE_SUCCESS; } TEE_Result ta_entry_arith_is_prime(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_OUTPUT, NONE, NONE); TEE_BigInt *op = lookup_handle(HT_BIGINT, params[0].value.a); if (!op) return TEE_ERROR_BAD_PARAMETERS; params[1].value.a = TEE_BigIntIsProbablePrime(op, params[0].value.b); return TEE_SUCCESS; } TEE_Result ta_entry_arith_to_fmm(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, NONE, NONE); TEE_BigInt *src = lookup_handle(HT_BIGINT, params[0].value.a); TEE_BigInt *n = lookup_handle(HT_BIGINT, params[0].value.b); TEE_BigIntFMMContext *ctx = lookup_handle(HT_FMMCTX, params[1].value.a); TEE_BigIntFMM *dest = lookup_handle(HT_FMMVAR, params[1].value.b); if (!src || !n | !ctx || !dest) return TEE_ERROR_BAD_PARAMETERS; TEE_BigIntConvertToFMM(dest, src, n, ctx); return TEE_SUCCESS; } TEE_Result ta_entry_arith_from_fmm(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, NONE, NONE); TEE_BigIntFMM *src = lookup_handle(HT_FMMVAR, params[0].value.a); TEE_BigInt *n = lookup_handle(HT_BIGINT, params[0].value.b); TEE_BigIntFMMContext *ctx = lookup_handle(HT_FMMCTX, params[1].value.a); TEE_BigInt *dest = lookup_handle(HT_BIGINT, params[1].value.b); if (!src || !n | !ctx || !dest) return TEE_ERROR_BAD_PARAMETERS; TEE_BigIntConvertFromFMM(dest, src, n, ctx); return TEE_SUCCESS; } TEE_Result ta_entry_arith_compute_fmm(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { CHECK_PT(VALUE_INPUT, VALUE_INPUT, VALUE_INPUT, NONE); TEE_BigIntFMM *op1 = lookup_handle(HT_FMMVAR, params[0].value.a); TEE_BigIntFMM *op2 = lookup_handle(HT_FMMVAR, params[0].value.b); TEE_BigInt *n = lookup_handle(HT_BIGINT, params[1].value.a); TEE_BigIntFMMContext *ctx = lookup_handle(HT_FMMCTX, params[1].value.b); TEE_BigIntFMM *dest = lookup_handle(HT_FMMVAR, params[2].value.a); if (!op1 || !op2 || !n | !ctx || !dest) return TEE_ERROR_BAD_PARAMETERS; TEE_BigIntComputeFMM(dest, op1, op2, n, ctx); return TEE_SUCCESS; } optee_test-4.3.0/ta/crypt/cryp_taf.c000066400000000000000000000545751464074351400174410ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. * Copyright (c) 2022, Linaro Limited. */ #include #include #include #include #include #include #include "handle.h" #define ASSERT_PARAM_TYPE(pt) \ do { \ if ((pt) != param_type) \ return TEE_ERROR_BAD_PARAMETERS; \ } while (0) static struct handle_db op_db = HANDLE_DB_INITIALIZER; static struct handle_db obj_db = HANDLE_DB_INITIALIZER; static uint32_t op_handle_get(TEE_OperationHandle h) { int rc = handle_get(&op_db, h); if (rc < 0) { EMSG("Failed to allocate handle"); TEE_Panic(TEE_ERROR_OUT_OF_MEMORY); } /* +1 since 0 (TEE_HANDLE_NULL) is invalid */ return rc + 1; } static TEE_OperationHandle op_handle_put(uint32_t val) { void *h = NULL; if (val) { h = handle_put(&op_db, val - 1); if (!h) { EMSG("Invalid handle 0x%"PRIx32, val); TEE_Panic(TEE_ERROR_BAD_PARAMETERS); } } return h; } static TEE_OperationHandle op_handle_lookup(uint32_t val) { void *h = NULL; if (val) { h = handle_lookup(&op_db, val - 1); if (!h) { EMSG("Invalid handle 0x%"PRIx32, val); TEE_Panic(TEE_ERROR_BAD_PARAMETERS); } } return h; } static uint32_t obj_handle_get(TEE_ObjectHandle h) { int rc = handle_get(&obj_db, h); if (rc < 0) { EMSG("Failed to allocate handle"); TEE_Panic(TEE_ERROR_OUT_OF_MEMORY); } /* +1 since 0 (TEE_HANDLE_NULL) is invalid */ return rc + 1; } static TEE_ObjectHandle obj_handle_put(uint32_t val) { void *h = NULL; if (val) { h = handle_put(&obj_db, val - 1); if (!h) { EMSG("Invalid handle 0x%"PRIx32, val); TEE_Panic(TEE_ERROR_BAD_PARAMETERS); } } return h; } static TEE_ObjectHandle obj_handle_lookup(uint32_t val) { void *h = NULL; if (val) { h = handle_lookup(&obj_db, val - 1); if (!h) { EMSG("Invalid handle 0x%"PRIx32, val); TEE_Panic(TEE_ERROR_BAD_PARAMETERS); } } return h; } TEE_Result ta_entry_allocate_operation(uint32_t param_type, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_OperationHandle op = TEE_HANDLE_NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = TEE_AllocateOperation(&op, params[0].value.b, params[1].value.a, params[1].value.b); params[0].value.a = op_handle_get(op); return res; } TEE_Result ta_entry_free_operation(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_put(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_FreeOperation(op); return TEE_SUCCESS; } TEE_Result ta_entry_get_operation_info(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); if (params[1].memref.size < sizeof(TEE_OperationInfo)) return TEE_ERROR_SHORT_BUFFER; params[1].memref.size = sizeof(TEE_OperationInfo); TEE_GetOperationInfo(op, params[1].memref.buffer); return TEE_SUCCESS; } TEE_Result ta_entry_reset_operation(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_ResetOperation(op); return TEE_SUCCESS; } TEE_Result ta_entry_set_operation_key(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_ObjectHandle key = obj_handle_lookup(params[0].value.b); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_SetOperationKey(op, key); } TEE_Result ta_entry_set_operation_key2(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_ObjectHandle key1 = obj_handle_lookup(params[0].value.b); TEE_ObjectHandle key2 = obj_handle_lookup(params[1].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_SetOperationKey2(op, key1, key2); } TEE_Result ta_entry_copy_operation(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle dst = op_handle_lookup(params[0].value.a); TEE_OperationHandle src = op_handle_lookup(params[0].value.b); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_CopyOperation(dst, src); return TEE_SUCCESS; } TEE_Result ta_entry_digest_update(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_DigestUpdate(op, params[1].memref.buffer, params[1].memref.size); return TEE_SUCCESS; } TEE_Result ta_entry_digest_do_final(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); return TEE_DigestDoFinal(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); } TEE_Result ta_entry_digest_extract(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_DigestExtract(op, params[1].memref.buffer, ¶ms[1].memref.size); } TEE_Result ta_entry_cipher_init(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); void *buffer = NULL; size_t size = 0; if (param_type == TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { buffer = NULL; size = 0; } else if (param_type == TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { buffer = params[1].memref.buffer; size = params[1].memref.size; } else return TEE_ERROR_BAD_PARAMETERS; TEE_CipherInit(op, buffer, size); return TEE_SUCCESS; } TEE_Result ta_entry_cipher_update(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); return TEE_CipherUpdate(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); } TEE_Result ta_entry_cipher_do_final(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); return TEE_CipherDoFinal(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); } TEE_Result ta_entry_mac_init(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); void *buffer = NULL; size_t size = 0; if (param_type == TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { buffer = NULL; size = 0; } else if (param_type == TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { buffer = params[1].memref.buffer; size = params[1].memref.size; } else return TEE_ERROR_BAD_PARAMETERS; TEE_MACInit(op, buffer, size); return TEE_SUCCESS; } TEE_Result ta_entry_mac_update(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_MACUpdate(op, params[1].memref.buffer, params[1].memref.size); return TEE_SUCCESS; } TEE_Result ta_entry_mac_final_compute(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); return TEE_MACComputeFinal(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); } TEE_Result ta_entry_mac_final_compare(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE)); return TEE_MACCompareFinal(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, params[2].memref.size); } TEE_Result ta_entry_allocate_transient_object(uint32_t param_type, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_ObjectHandle o = TEE_HANDLE_NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = TEE_AllocateTransientObject(params[0].value.a, params[0].value.b, &o); if (res == TEE_SUCCESS) params[1].value.a = obj_handle_get(o); return res; } TEE_Result ta_entry_free_transient_object(uint32_t param_type, TEE_Param params[4]) { TEE_ObjectHandle o = obj_handle_put(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_FreeTransientObject(o); return TEE_SUCCESS; } TEE_Result ta_entry_reset_transient_object(uint32_t param_type, TEE_Param params[4]) { TEE_ObjectHandle o = obj_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_ResetTransientObject(o); return TEE_SUCCESS; } struct attr_packed { uint32_t id; uint32_t a; uint32_t b; }; static TEE_Result unpack_attrs(const uint8_t *buf, size_t blen, TEE_Attribute **attrs, uint32_t *attr_count) { TEE_Result res = TEE_SUCCESS; TEE_Attribute *a = NULL; const struct attr_packed *ap = NULL; size_t num_attrs = 0; const size_t num_attrs_size = sizeof(uint32_t); if (blen == 0) goto out; if (((uintptr_t)buf & 0x3) != 0 || blen < num_attrs_size) return TEE_ERROR_BAD_PARAMETERS; num_attrs = *(uint32_t *) (void *)buf; if ((blen - num_attrs_size) < (num_attrs * sizeof(*ap))) return TEE_ERROR_BAD_PARAMETERS; ap = (const struct attr_packed *)(const void *)(buf + num_attrs_size); if (num_attrs > 0) { size_t n; a = TEE_Malloc(num_attrs * sizeof(TEE_Attribute), 0); if (!a) return TEE_ERROR_OUT_OF_MEMORY; for (n = 0; n < num_attrs; n++) { uintptr_t p; a[n].attributeID = ap[n].id; if (ap[n].id & TEE_ATTR_FLAG_VALUE) { a[n].content.value.a = ap[n].a; a[n].content.value.b = ap[n].b; continue; } a[n].content.ref.length = ap[n].b; p = (uintptr_t)ap[n].a; if (p) { if ((p + a[n].content.ref.length) > blen) { res = TEE_ERROR_BAD_PARAMETERS; goto out; } p += (uintptr_t)buf; } a[n].content.ref.buffer = (void *)p; } } res = TEE_SUCCESS; out: if (res == TEE_SUCCESS) { *attrs = a; *attr_count = num_attrs; } else { TEE_Free(a); } return res; } TEE_Result ta_entry_populate_transient_object(uint32_t param_type, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; TEE_ObjectHandle o = obj_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_PopulateTransientObject(o, attrs, attr_count); TEE_Free(attrs); return res; } TEE_Result ta_entry_copy_object_attributes(uint32_t param_type, TEE_Param params[4]) { TEE_ObjectHandle dst = obj_handle_lookup(params[0].value.a); TEE_ObjectHandle src = obj_handle_lookup(params[0].value.b); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_CopyObjectAttributes1(dst, src); } TEE_Result ta_entry_generate_key(uint32_t param_type, TEE_Param params[4]) { TEE_ObjectHandle o = obj_handle_lookup(params[0].value.a); TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_GenerateKey(o, params[0].value.b, attrs, attr_count); TEE_Free(attrs); return res; } TEE_Result ta_entry_asymmetric_encrypt(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_AsymmetricEncrypt(op, attrs, attr_count, params[2].memref.buffer, params[2].memref.size, params[3].memref.buffer, ¶ms[3].memref.size); TEE_Free(attrs); return res; } TEE_Result ta_entry_asymmetric_decrypt(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_AsymmetricDecrypt(op, attrs, attr_count, params[2].memref.buffer, params[2].memref.size, params[3].memref.buffer, ¶ms[3].memref.size); TEE_Free(attrs); return res; } TEE_Result ta_entry_asymmetric_sign_digest(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_AsymmetricSignDigest(op, attrs, attr_count, params[2].memref.buffer, params[2].memref.size, params[3].memref.buffer, ¶ms[3].memref.size); TEE_Free(attrs); return res; } TEE_Result ta_entry_asymmetric_verify_digest(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_AsymmetricVerifyDigest(op, attrs, attr_count, params[2].memref.buffer, params[2].memref.size, params[3].memref.buffer, params[3].memref.size); TEE_Free(attrs); return res; } TEE_Result ta_entry_derive_key(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_ObjectHandle key = obj_handle_lookup(params[0].value.b); TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; TEE_DeriveKey(op, attrs, attr_count, key); TEE_Free(attrs); return TEE_SUCCESS; } TEE_Result ta_entry_random_number_generate(uint32_t param_type, TEE_Param params[4]) { void *buf = NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); buf = TEE_Malloc(params[0].memref.size, 0); if (!buf) return TEE_ERROR_OUT_OF_MEMORY; TEE_GenerateRandom(buf, params[0].memref.size); TEE_MemMove(params[0].memref.buffer, buf, params[0].memref.size); TEE_Free(buf); return TEE_SUCCESS; } TEE_Result ta_entry_ae_init(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE)); return TEE_AEInit(op, params[1].memref.buffer, params[1].memref.size, params[0].value.b * 8, /* tag_len in bits */ params[2].value.a, params[2].value.b); } TEE_Result ta_entry_ae_update_aad(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_AEUpdateAAD(op, params[1].memref.buffer, params[1].memref.size); return TEE_SUCCESS; } TEE_Result ta_entry_ae_update(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); return TEE_AEUpdate(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); } TEE_Result ta_entry_ae_encrypt_final(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_Result res = TEE_ERROR_OUT_OF_MEMORY; void *b2 = NULL; void *b3 = NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT)); if (params[2].memref.buffer && params[2].memref.size) { b2 = TEE_Malloc(params[2].memref.size, 0); if (!b2) goto out; } if (params[3].memref.buffer && params[3].memref.size) { b3 = TEE_Malloc(params[3].memref.size, 0); if (!b3) goto out; } res = TEE_AEEncryptFinal(op, params[1].memref.buffer, params[1].memref.size, b2, ¶ms[2].memref.size, b3, ¶ms[3].memref.size); if (!res) { if (b2) TEE_MemMove(params[2].memref.buffer, b2, params[2].memref.size); if (b3) TEE_MemMove(params[3].memref.buffer, b3, params[3].memref.size); } out: TEE_Free(b2); TEE_Free(b3); return res; } TEE_Result ta_entry_ae_decrypt_final(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = op_handle_lookup(params[0].value.a); TEE_Result res = TEE_ERROR_OUT_OF_MEMORY; void *b2 = NULL; void *b3 = NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_MEMREF_INPUT)); if (params[2].memref.buffer && params[2].memref.size) { b2 = TEE_Malloc(params[2].memref.size, 0); if (!b2) goto out; } if (params[3].memref.buffer && params[3].memref.size) { b3 = TEE_Malloc(params[3].memref.size, 0); if (!b3) goto out; TEE_MemMove(b3, params[3].memref.buffer, params[3].memref.size); } res = TEE_AEDecryptFinal(op, params[1].memref.buffer, params[1].memref.size, b2, ¶ms[2].memref.size, b3, params[3].memref.size); if (!res && b2) TEE_MemMove(params[2].memref.buffer, b2, params[2].memref.size); out: TEE_Free(b2); TEE_Free(b3); return res; } TEE_Result ta_entry_get_object_buffer_attribute(uint32_t param_type, TEE_Param params[4]) { TEE_ObjectHandle o = obj_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_GetObjectBufferAttribute(o, params[0].value.b, params[1].memref.buffer, ¶ms[1].memref.size); } TEE_Result ta_entry_get_object_value_attribute(uint32_t param_type, TEE_Param params[4]) { TEE_ObjectHandle o = obj_handle_lookup(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_GetObjectValueAttribute(o, params[0].value.b, ¶ms[1].value.a, ¶ms[1].value.b); } TEE_Result ta_entry_is_algo_supported(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); params[1].value.a = TEE_IsAlgorithmSupported(params[0].value.a, params[0].value.b); return TEE_SUCCESS; } optee_test-4.3.0/ta/crypt/derive_key_taf.c000066400000000000000000000135531464074351400206010ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2019, Linaro Limited */ #include #include #include #include "derive_key_taf.h" #define TA_DERIVED_KEY_MIN_SIZE 16 #define TA_DERIVED_KEY_MAX_SIZE 32 #define TA_DERIVED_EXTRA_DATA_MAX_SIZE 1024 static const TEE_UUID system_uuid = PTA_SYSTEM_UUID; /* * Helper function that just derives a key. */ static TEE_Result derive_unique_key(TEE_TASessionHandle session, uint8_t *key, uint16_t key_size, uint8_t *extra, uint16_t extra_size) { TEE_Param params[TEE_NUM_PARAMS] = { 0 }; TEE_Result res = TEE_ERROR_GENERIC; uint32_t ret_origin = 0; uint32_t param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (extra && extra_size > 0) { params[0].memref.buffer = extra; params[0].memref.size = extra_size; } params[1].memref.buffer = key; params[1].memref.size = key_size; res = TEE_InvokeTACommand(session, TEE_TIMEOUT_INFINITE, PTA_SYSTEM_DERIVE_TA_UNIQUE_KEY, param_types, params, &ret_origin); if (res != TEE_SUCCESS) EMSG("Failure when calling PTA_SYSTEM_DERIVE_TA_UNIQUE_KEY"); return res; } TEE_Result derive_ta_unique_key_test(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS] __unused) { size_t i = 0; TEE_Result res_final = TEE_SUCCESS; TEE_Result res = TEE_ERROR_GENERIC; TEE_TASessionHandle session = TEE_HANDLE_NULL; uint8_t big_key[64] = { }; uint8_t extra_key_data[] = { "My dummy data" }; uint8_t key1[32] = { }; uint8_t key2[32] = { }; uint32_t ret_origin = 0; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; res = TEE_OpenTASession(&system_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &session, &ret_origin); if (res != TEE_SUCCESS) return res; /* * Testing for successful calls to the PTA and that two calls with same * input data generates the same output data (keys). */ res = derive_unique_key(session, key1, sizeof(key1), NULL, 0); if (res != TEE_SUCCESS) res_final = TEE_ERROR_GENERIC; res = derive_unique_key(session, key2, sizeof(key2), NULL, 0); if (res != TEE_SUCCESS) res_final = TEE_ERROR_GENERIC; if (TEE_MemCompare(key1, key2, sizeof(key1)) != 0) res_final = TEE_ERROR_GENERIC; TEE_MemFill(key1, 0, sizeof(key1)); TEE_MemFill(key2, 0, sizeof(key2)); /* * Testing for successful calls to the PTA and that two calls with same * input data generates the same output data (keys). Here we are using * extra data also. */ res = derive_unique_key(session, key1, sizeof(key1), extra_key_data, sizeof(extra_key_data)); if (res != TEE_SUCCESS) res_final = TEE_ERROR_GENERIC; res = derive_unique_key(session, key2, sizeof(key2), extra_key_data, sizeof(extra_key_data)); if (res != TEE_SUCCESS) res_final = TEE_ERROR_GENERIC; if (TEE_MemCompare(key1, key2, sizeof(key1)) != 0) res_final = TEE_ERROR_GENERIC; TEE_MemFill(key1, 0, sizeof(key1)); TEE_MemFill(key2, 0, sizeof(key2)); /* * Testing for successful calls to the PTA and that two calls with * different input data do not generate the same output data (keys). We * do that by using one key with and one key without extra data. */ res = derive_unique_key(session, key1, sizeof(key1), extra_key_data, sizeof(extra_key_data)); if (res != TEE_SUCCESS) res_final = TEE_ERROR_GENERIC; res = derive_unique_key(session, key2, sizeof(key2), NULL, 0); if (res != TEE_SUCCESS) res_final = TEE_ERROR_GENERIC; /* They should not be equal */ if (TEE_MemCompare(key1, key2, sizeof(key1)) == 0) res_final = TEE_ERROR_GENERIC; TEE_MemFill(key1, 0, sizeof(key1)); TEE_MemFill(key2, 0, sizeof(key2)); /* * Testing limits for extra data size (if this would success, then we * would overwrite the buffer extra_key_data also). */ res = derive_unique_key(session, key1, sizeof(key1), extra_key_data, TA_DERIVED_EXTRA_DATA_MAX_SIZE + 1); /* This shall fail */ if (res == TEE_SUCCESS) res_final = TEE_ERROR_GENERIC; TEE_MemFill(key1, 0, sizeof(key1)); /* Testing limits. */ for (i = 0; i < sizeof(big_key); i++) { uint8_t *extra = NULL; uint8_t extra_size = 0; TEE_MemFill(big_key, 0, sizeof(big_key)); /* Alternate between using and not using extra data. */ if (i % 2) { extra = extra_key_data; extra_size = sizeof(extra_key_data); } res = derive_unique_key(session, big_key, i, extra, extra_size); if (i < TA_DERIVED_KEY_MIN_SIZE) { if (res != TEE_SUCCESS) continue; EMSG("Small key test iteration %zu failed", i); res_final = TEE_ERROR_GENERIC; break; } if (i > TA_DERIVED_KEY_MAX_SIZE) { if (res != TEE_SUCCESS) continue; EMSG("Big key test iteration %zu failed", i); res_final = TEE_ERROR_GENERIC; break; } if (res != TEE_SUCCESS) { res_final = TEE_ERROR_GENERIC; break; } } TEE_CloseTASession(session); return res_final; } TEE_Result derive_ta_unique_key_test_shm(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_TASessionHandle session = TEE_HANDLE_NULL; uint32_t ret_origin = 0; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; res = TEE_OpenTASession(&system_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &session, &ret_origin); if (res != TEE_SUCCESS) return res; /* * Testing for unsuccessful calls to the PTA. They should be * unsuccessful since we are using an out buffer coming from normal * world. */ res = TEE_InvokeTACommand(session, TEE_TIMEOUT_INFINITE, PTA_SYSTEM_DERIVE_TA_UNIQUE_KEY, param_types, params, &ret_origin); TEE_CloseTASession(session); return res; } optee_test-4.3.0/ta/crypt/handle.c000066400000000000000000000032421464074351400170460ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, Linaro Limited */ #include #include "handle.h" /* * Define the initial capacity of the database. It should be a low number * multiple of 2 since some databases a likely to only use a few handles. * Since the algorithm doubles up when growing it shouldn't cause a * noticeable overhead on large databases. */ #define HANDLE_DB_INITIAL_MAX_PTRS 4 void handle_db_destroy(struct handle_db *db) { if (db) { TEE_Free(db->ptrs); db->ptrs = NULL; db->max_ptrs = 0; } } int handle_get(struct handle_db *db, void *ptr) { size_t n = 0; void *p = NULL; size_t new_max_ptrs = 0; if (!db || !ptr) return -1; /* Try to find an empty location */ for (n = 0; n < db->max_ptrs; n++) { if (!db->ptrs[n]) { db->ptrs[n] = ptr; return n; } } /* No location available, grow the ptrs array */ if (db->max_ptrs) new_max_ptrs = db->max_ptrs * 2; else new_max_ptrs = HANDLE_DB_INITIAL_MAX_PTRS; p = TEE_Realloc(db->ptrs, new_max_ptrs * sizeof(void *)); if (!p) return -1; db->ptrs = p; TEE_MemFill(db->ptrs + db->max_ptrs, 0, (new_max_ptrs - db->max_ptrs) * sizeof(void *)); db->max_ptrs = new_max_ptrs; /* Since n stopped at db->max_ptrs there is an empty location there */ db->ptrs[n] = ptr; return n; } void *handle_put(struct handle_db *db, int handle) { void *p = NULL; if (!db || handle < 0 || (size_t)handle >= db->max_ptrs) return NULL; p = db->ptrs[handle]; db->ptrs[handle] = NULL; return p; } void *handle_lookup(struct handle_db *db, int handle) { if (!db || handle < 0 || (size_t)handle >= db->max_ptrs) return NULL; return db->ptrs[handle]; } optee_test-4.3.0/ta/crypt/handle.h000066400000000000000000000020671464074351400170570ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, Linaro Limited */ #ifndef __HANDLE_H #define __HANDLE_H #include struct handle_db { void **ptrs; size_t max_ptrs; }; #define HANDLE_DB_INITIALIZER { NULL, 0 } /* * Frees all internal data structures of the database, but does not free * the db pointer. The database is safe to reuse after it's destroyed, it * will just be empty again. */ void handle_db_destroy(struct handle_db *db); /* * Allocates a new handle and assigns the supplied pointer to it, * ptr must not be NULL. * The function returns * >= 0 on success and * -1 on failure */ int handle_get(struct handle_db *db, void *ptr); /* * Deallocates a handle. Returns the assiciated pointer of the handle * the the handle was valid or NULL if it's invalid. */ void *handle_put(struct handle_db *db, int handle); /* * Returns the assiciated pointer of the handle if the handle is a valid * handle. * Returns NULL on failure. */ void *handle_lookup(struct handle_db *db, int handle); #endif /*__HANDLE_H*/ optee_test-4.3.0/ta/crypt/include/000077500000000000000000000000001464074351400170715ustar00rootroot00000000000000optee_test-4.3.0/ta/crypt/include/aes_impl.h000066400000000000000000000015401464074351400210330ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef AES_IMPL_H #define AES_IMPL_H int rijndaelSetupEncrypt(unsigned long *rk, const unsigned char *key, int keybits); int rijndaelSetupDecrypt(unsigned long *rk, const unsigned char *key, int keybits); void rijndaelEncrypt(const unsigned long *rk, int nrounds, const unsigned char plaintext[16], unsigned char ciphertext[16]); void rijndaelDecrypt(const unsigned long *rk, int nrounds, const unsigned char ciphertext[16], unsigned char plaintext[16]); #define AES_BLOCK_SIZE 128 #define AES_128 128 #define AES_192 192 #define AES_256 256 #define KEYLENGTH(keybits) ((keybits)/8) #define RKLENGTH(keybits) ((keybits)/8+28) #define NROUNDS(keybits) ((keybits)/32+6) #endif optee_test-4.3.0/ta/crypt/include/aes_taf.h000066400000000000000000000010031464074351400206360ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef AES_TAF_H #define AES_TAF_H #include /* params[0] is input buffer and params[1] is output buffer */ TEE_Result ta_entry_aes256ecb_encrypt(uint32_t param_types, TEE_Param params[4]); /* params[0] is input buffer and params[1] is output buffer */ TEE_Result ta_entry_aes256ecb_decrypt(uint32_t param_types, TEE_Param params[4]); #endif optee_test-4.3.0/ta/crypt/include/arith_taf.h000066400000000000000000000070401464074351400212040ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* Copyright (c) 2018, Linaro Limited */ #ifndef __ARITH_TAF_H #define __ARITH_TAF_H #include TEE_Result ta_entry_arith_new_var(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_new_fmm_ctx(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_new_fmm_var(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_free_handle(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_from_octet_string(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_from_s32(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_get_value(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_get_value_s32(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_get_bit(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_get_bit_count(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_set_bit(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_assign(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_abs(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_shift_right(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_cmp(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_cmp_s32(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_add(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_sub(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_mul(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_neg(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_sqr(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_div(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_mod(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_addmod(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_submod(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_mulmod(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_sqrmod(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_invmod(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_expmod(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_is_rel_prime(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_compute_egcd(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_is_prime(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_to_fmm(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_from_fmm(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_arith_compute_fmm(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); #endif /*__ARITH_TAF_H*/ optee_test-4.3.0/ta/crypt/include/cryp_taf.h000066400000000000000000000064401464074351400210550ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef CRYP_TAF_H #define CRYP_TAF_H #include TEE_Result ta_entry_allocate_operation(uint32_t param_type, TEE_Param params[4] ); TEE_Result ta_entry_free_operation(uint32_t param_type, TEE_Param params[4] ); TEE_Result ta_entry_get_operation_info(uint32_t param_type, TEE_Param params[4] ); TEE_Result ta_entry_reset_operation(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_set_operation_key(uint32_t param_type, TEE_Param params[4] ); TEE_Result ta_entry_set_operation_key2(uint32_t param_type, TEE_Param params[4] ); TEE_Result ta_entry_copy_operation(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_digest_update(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_digest_do_final(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_digest_extract(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_cipher_init(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_cipher_update(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_cipher_do_final(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_mac_init(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_mac_update(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_mac_final_compute(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_mac_final_compare(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_allocate_transient_object(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_free_transient_object(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_reset_transient_object(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_populate_transient_object(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_copy_object_attributes(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_generate_key(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_asymmetric_encrypt(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_asymmetric_decrypt(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_asymmetric_sign_digest(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_asymmetric_verify_digest(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_derive_key(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_random_number_generate(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_ae_init(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_ae_update_aad(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_ae_update(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_ae_encrypt_final(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_ae_decrypt_final(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_get_object_buffer_attribute(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_get_object_value_attribute(uint32_t param_type, TEE_Param params[4]); TEE_Result ta_entry_is_algo_supported(uint32_t param_type, TEE_Param params[4]); #endif /*CRYP_TAF_H */ optee_test-4.3.0/ta/crypt/include/derive_key_taf.h000066400000000000000000000005501464074351400222220ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2019, Linaro Limited */ #ifndef DERIVE_KEY_TAF_H #define DERIVE_KEY_TAF_H #include TEE_Result derive_ta_unique_key_test(uint32_t param_types, TEE_Param params[4]); TEE_Result derive_ta_unique_key_test_shm(uint32_t param_types, TEE_Param params[4]); #endif optee_test-4.3.0/ta/crypt/include/mbedtls_taf.h000066400000000000000000000007761464074351400215400ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* Copyright (c) 2018, Linaro Limited */ #ifndef __MBEDTLS_TAF_H #define __MBEDTLS_TAF_H #include TEE_Result ta_entry_mbedtls_self_tests(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_mbedtls_check_cert(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); TEE_Result ta_entry_mbedtls_sign_cert(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]); #endif /*__MBEDTLS_TAF_H*/ optee_test-4.3.0/ta/crypt/include/seed_rng_taf.h000066400000000000000000000004041464074351400216600ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2018, Linaro Limited */ #ifndef SEED_RNG_TAF_H #define SEED_RNG_TAF_H #include TEE_Result seed_rng_pool(uint32_t param_types, TEE_Param params[4]); #endif /* SEED_RNG_TAF_H */ optee_test-4.3.0/ta/crypt/include/sha2_impl.h000066400000000000000000000057111464074351400211240ustar00rootroot00000000000000/* SPDX-License-Identifier: (BSD-2-Clause AND BSD-3-Clause) */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ /* * FIPS 180-2 SHA-224/256/384/512 implementation * Last update: 02/02/2007 * Issue date: 04/30/2005 * * Copyright (C) 2005, 2007 Olivier Gay * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "stdint.h" #ifndef SHA2_IMPL_H #define SHA2_IMPL_H #define SHA224_DIGEST_SIZE (224 / 8) #define SHA256_DIGEST_SIZE (256 / 8) #define SHA256_BLOCK_SIZE (512 / 8) #define SHA224_BLOCK_SIZE SHA256_BLOCK_SIZE struct sha224_ctx { unsigned int tot_len; unsigned int len; unsigned char block[2 * SHA224_BLOCK_SIZE]; uint32_t h[8]; }; struct sha256_ctx { unsigned int tot_len; unsigned int len; unsigned char block[2 * SHA256_BLOCK_SIZE]; uint32_t h[8]; }; void sha224_init(struct sha224_ctx *ctx); void sha224_update(struct sha224_ctx *ctx, const unsigned char *message, unsigned int len); void sha224_final(struct sha224_ctx *ctx, unsigned char *digest); void sha224(const unsigned char *message, unsigned int len, unsigned char *digest); void sha256_init(struct sha256_ctx *ctx); void sha256_update(struct sha256_ctx *ctx, const unsigned char *message, unsigned int len); void sha256_final(struct sha256_ctx *ctx, unsigned char *digest); void sha256(const unsigned char *message, unsigned int len, unsigned char *digest); void sha256_transf(struct sha256_ctx *ctx, const unsigned char *message, unsigned int block_nb); #endif optee_test-4.3.0/ta/crypt/include/sha2_taf.h000066400000000000000000000007331464074351400207340ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef SHA2_TAF_H #define SHA2_TAF_H #include /* params[0] is input buffer and params[1] is output buffer */ TEE_Result ta_entry_sha224(uint32_t param_types, TEE_Param params[4]); /* params[0] is input buffer and params[1] is output buffer */ TEE_Result ta_entry_sha256(uint32_t param_types, TEE_Param params[4]); #endif optee_test-4.3.0/ta/crypt/include/ta_crypt.h000066400000000000000000000453621464074351400211010ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TA_CRYPT_H #define TA_CRYPT_H /* This UUID is generated with the ITU-T UUID generator at http://www.itu.int/ITU-T/asn1/uuid.html */ #define TA_CRYPT_UUID { 0xcb3e5ba0, 0xadf1, 0x11e0, \ { 0x99, 0x8b, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } } #define TA_CRYPT_CMD_SHA224 1 #define TA_CRYPT_CMD_SHA256 2 #define TA_CRYPT_CMD_AES256ECB_ENC 3 #define TA_CRYPT_CMD_AES256ECB_DEC 4 /* * TEE_Result TEE_AllocateOperation(TEE_OperationHandle *operation, * uint32_t algorithm, uint32_t mode, uint32_t maxKeySize); * in/out params[0].value.a = operation * in/out params[0].value.b = algorithm * in params[1].value.a = mode * in params[2].value.b = maxKeySize */ #define TA_CRYPT_CMD_ALLOCATE_OPERATION 5 /* * void TEE_FreeOperation(TEE_OperationHandle operation); * in params[0].value.a = operation */ #define TA_CRYPT_CMD_FREE_OPERATION 6 /* * void TEE_GetOperationInfo(TEE_OperationHandle operation, * TEE_OperationInfo* operationInfo); * in params[0].value.a = operation * out params[1].memref = operationInfo */ #define TA_CRYPT_CMD_GET_OPERATION_INFO 7 /* * void TEE_ResetOperation(TEE_OperationHandle operation); * in params[0].value.a = operation */ #define TA_CRYPT_CMD_RESET_OPERATION 8 /* * TEE_Result TEE_SetOperationKey(TEE_OperationHandle operation, * TEE_ObjectHandle key); * in params[0].value.a = operation * in params[0].value.b = key */ #define TA_CRYPT_CMD_SET_OPERATION_KEY 9 /* * TEE_Result TEE_SetOperationKey2(TEE_OperationHandle operation, * TEE_ObjectHandle key1, TEE_ObjectHandle key2); * in params[0].value.a = operation * in params[0].value.b = key1 * in params[0].value.a = key2 */ #define TA_CRYPT_CMD_SET_OPERATION_KEY2 10 /* * void TEE_CopyOperation(TEE_OperationHandle dstOperation, * TEE_OperationHandle srcOperation); * in params[0].value.a = dstOperation * in params[0].value.b = srcOperation */ #define TA_CRYPT_CMD_COPY_OPERATION 11 /* * void TEE_DigestUpdate(TEE_OperationHandle operation, * void *chunk, size_t chunkSize); * in params[0].value.a = operation * in params[1].memref = chunk */ #define TA_CRYPT_CMD_DIGEST_UPDATE 12 /* * TEE_Result TEE_DigestDoFinal(TEE_OperationHandle operation, * const void *chunk, size_t chunkLen, * void *hash, size_t *hashLen); * in params[0].value.a = operation * in params[1].memref = chunk * out params[2].memref = hash */ #define TA_CRYPT_CMD_DIGEST_DO_FINAL 13 /* * void TEE_CipherInit(TEE_OperationHandle operation, const void *IV, * size_t IVLen); * in params[0].value.a = operation * in params[1].memref = IV */ #define TA_CRYPT_CMD_CIPHER_INIT 14 /* * TEE_Result TEE_CipherUpdate(TEE_OperationHandle operation, * const void *srcData, size_t srcLen, * void *destData, size_t *destLen); * in params[0].value.a = operation * in params[1].memref = srcData * out params[2].memref = dstData */ #define TA_CRYPT_CMD_CIPHER_UPDATE 15 /* * TEE_Result TEE_CipherDoFinal(TEE_OperationHandle operation, * const void *srcData, size_t srcLen, * void *destData, size_t *destLen); * in params[0].value.a = operation * in params[1].memref = srcData * out params[2].memref = destData */ #define TA_CRYPT_CMD_CIPHER_DO_FINAL 16 /* * void TEE_MACInit(TEE_OperationHandle operation, * const void *IV, size_t IVLen); * in params[0].value.a = operation * in params[1].memref = IV */ #define TA_CRYPT_CMD_MAC_INIT 17 /* * void TEE_MACUpdate(TEE_OperationHandle operation, * const void *chunk, size_t chunkSize); * in params[0].value.a = operation * in params[1].memref = chunk */ #define TA_CRYPT_CMD_MAC_UPDATE 18 /* * TEE_Result TEE_MACFinalCompute(TEE_OperationHandle operation, * const void *message, size_t messageLen, * void *mac, size_t *macLen); * in params[0].value.a = operation * in params[1].memref = message * out params[2].memref = mac */ #define TA_CRYPT_CMD_MAC_FINAL_COMPUTE 19 /* * TEE_Result TEE_MACFinalCompare(TEE_OperationHandle operation, * const void *message, size_t messageLen, * const void *mac, size_t *macLen); * in params[0].value.a = operation * in params[1].memref = message * in params[2].memref = mac */ #define TA_CRYPT_CMD_MAC_FINAL_COMPARE 20 /* * TEE_Result TEE_AllocateTransientObject(TEE_ObjectType objectType, * uint32_t maxObjectSize, TEE_ObjectHandle* object); * in params[0].value.a = objectType * in params[0].value.b = maxObjectSize * out params[1].value.a = object; */ #define TA_CRYPT_CMD_ALLOCATE_TRANSIENT_OBJECT 21 /* * void TEE_FreeTransientObject(TEE_ObjectHandle object); * in params[0].value.a = object */ #define TA_CRYPT_CMD_FREE_TRANSIENT_OBJECT 22 /* * void TEE_ResetTransientObject(TEE_ObjectHandle object); * in params[0].value.a = object */ #define TA_CRYPT_CMD_RESET_TRANSIENT_OBJECT 23 /* * TEE_Result TEE_PopulateTransientObject(TEE_ObjectHandle object, * TEE_Attribute *attrs, uint32_t attrCount); * in params[0].value.a = object * in params[1].memref = attrs */ #define TA_CRYPT_CMD_POPULATE_TRANSIENT_OBJECT 24 /* * void TEE_CopyObjectAttributes(TEE_ObjectHandle destObject, * TEE_ObjectHandle srcObject); * in params[0].value.a = destObject * in params[0].value.b = srcObject */ #define TA_CRYPT_CMD_COPY_OBJECT_ATTRIBUTES 25 /* * TEE_Result TEE_GenerateKey(TEE_ObjectHandle object, uint32_t keySize, * TEE_Attribute *params, uint32_t paramCount); * in params[0].value.a = object * in params[0].value.b = keySize * in params[1].memref = params */ #define TA_CRYPT_CMD_GENERATE_KEY 26 /* * TEE_Result TEE_AsymmetricEncrypt(TEE_OperationHandle operation, * const TEE_Attribute *params, uint32_t paramCount, * const void *srcData, size_t srcLen, void *destData, * size_t *destLen); * in params[0].value.a = operation * in params[1].memref = params * in params[2].memref = srcData * out params[3].memref = destData */ #define TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT 27 /* * TEE_Result TEE_AsymmetricDecrypt(TEE_OperationHandle operation, * const TEE_Attribute *params, uint32_t paramCount, * const void *srcData, size_t srcLen, void *destData, * size_t *destLen) * in params[0].value.a = operation * in params[1].memref = params * in params[2].memref = srcData * out params[3].memref = destData */ #define TA_CRYPT_CMD_ASYMMETRIC_DECRYPT 28 /* * TEE_Result TEE_AsymmetricSignDigest(TEE_OperationHandle operation, * const TEE_Attribute *params, uint32_t paramCount, * const void *digest, size_t digestLen, void *signature, * size_t *signatureLen) * in params[0].value.a = operation * in params[1].memref = params * in params[2].memref = digest * out params[3].memref = signature */ #define TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST 29 /* * TEE_Result TEE_AsymmetricVerifyDigest(TEE_OperationHandle operation, * const TEE_Attribute *params, uint32_t paramCount, * const void *digest, size_t digestLen, const void *signature, * size_t signatureLen) * in params[0].value.a = operation * in params[1].memref = params * in params[2].memref = digest * in params[3].memref = signature */ #define TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST 30 /* * void TEE_DeriveKey(TEE_OperationHandle operation, * const TEE_Attribute *params, uint32_t paramCount, * TEE_ObjectHandle derivedKey) * in params[0].value.a = operation * in params[1].memref = params * in params[0].value.b = derivedKey */ #define TA_CRYPT_CMD_DERIVE_KEY 31 /* * void TEE_RandomNumberGenerate(void *randomBuffer, size_t randomBufferLen); * out params[0].memref = randomBuffer */ #define TA_CRYPT_CMD_RANDOM_NUMBER_GENERATE 32 /* * TEE_Result TEE_AEInit(TEE_OperationHandle operation, * const void* nonce, size_t nonceLen, * uint32_t tagLen, uint32_t AADLen, uint32_t payloadLen); * in params[0].value.a = operation * in params[1].memref = nonce * in params[0].value.b = tagLen * in params[2].value.a = AADLen * in params[2].value.b = payloadLen */ #define TA_CRYPT_CMD_AE_INIT 33 /* * void TEE_AEUpdateAAD(TEE_OperationHandle operation, * void* AADdata, size_t AADdataLen); * in params[0].value.a = operation * in params[1].memref = AADdata */ #define TA_CRYPT_CMD_AE_UPDATE_AAD 34 /* * TEE_Result TEE_AEUpdate(TEE_OperationHandle operation, * const void* srcData, size_t srcLen, * void* destData, size_t *destLen); * in params[0].value.a = operation * in params[1].memref = srcData * out params[2].memref = destData */ #define TA_CRYPT_CMD_AE_UPDATE 35 /* * TEE_Result TEE_AEEncryptFinal(TEE_OperationHandle operation, * const void* srcData, size_t srcLen, * void* destData, size_t* destLen, * void* tag, size_t* tagLen); * in params[0].value[0].a = operation * in params[1].memref = srcData * out params[2].memref = destData * out params[3].memref = tag */ #define TA_CRYPT_CMD_AE_ENCRYPT_FINAL 36 /* * TEE_Result TEE_AEDecryptFinal(TEE_OperationHandle operation, * const void* srcData, size_t srcLen, * void* destData, size_t *destLen, * const void* tag, size_t tagLen); * in params[0].value.a = operation * in params[1].memref = srcData * out params[2].memref = destData * in params[3].memref = tag */ #define TA_CRYPT_CMD_AE_DECRYPT_FINAL 37 /* * TEE_Result TEE_GetObjectBufferAttribute(TEE_ObjectHandle object, * uint32_t attributeID, void* buffer, size_t* size); * in params[0].value.a = object * in params[0].value.b = attributeID * out params[1].memrefs = buffer */ #define TA_CRYPT_CMD_GET_OBJECT_BUFFER_ATTRIBUTE 38 /* * TEE_Result TEE_GetObjectValueAttribute(TEE_ObjectHandle object, * uint32_t attributeID, void* buffer, size_t* size); * in params[0].value.a = object * in params[0].value.b = attributeID * out params[1].value.a = value a * out params[1].value.b = value b */ #define TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE 39 /* To set or get a global value */ #define TA_CRYPT_CMD_SETGLOBAL 40 #define TA_CRYPT_CMD_GETGLOBAL 41 /* If mbedtls is compiled with MBEDTLS_SELF_TEST, run the self tests */ #define TA_CRYPT_CMD_MBEDTLS_SELF_TESTS 42 /* * in params[0].memref = cert-chain * in params[1].memref = trust-anchor-cert */ #define TA_CRYPT_CMD_MBEDTLS_CHECK_CERT 43 /* * in params[0].memref = Certificate request in PKCS#10 format * out params[1].memref = Signed certificate in X.509 format * out params[2].memref = Certificate chain */ #define TA_CRYPT_CMD_MBEDTLS_SIGN_CERT 44 /* * system pTA is used for adding entropy to RNG pool */ #define TA_CRYPT_CMD_SEED_RNG_POOL 45 /* * Testing arithmetical interface. * * Coding of signed 32-bit values: * a int32_t with its bit pattern stored in a 32-bit value */ #define TA_CRYPT_ARITH_INVALID_HANDLE 0xffffffff /* * in params[0].value.a: Number of bits * out params[1].value.b: Handle to bignum variable */ #define TA_CRYPT_CMD_ARITH_NEW_VAR 46 /* * in params[0].value.a: Number of bits * in params[0].value.b: Handle to bignum variable modulus * out params[1].value.a: Handle to FMM context */ #define TA_CRYPT_CMD_ARITH_NEW_FMM_CTX 47 /* * in params[0].value.a: Number of bits * out params[1].value.a: Handle to FMM variable */ #define TA_CRYPT_CMD_ARITH_NEW_FMM_VAR 48 /* * in params[0].value.a: Handle to bignum variable, FMM context, or * FMM variable */ #define TA_CRYPT_CMD_ARITH_FREE_HANDLE 49 /* * in params[0].value.a: Handle to bignum variable * in params[0].value.b: S32 representing the sign of the value * in params[1].memref: octet string representing the value */ #define TA_CRYPT_CMD_ARITH_FROM_OCTET_STRING 50 /* * in params[0].value.a: Handle to bignum variable * in params[0].value.b: S32 representing the value */ #define TA_CRYPT_CMD_ARITH_FROM_S32 51 /* * in params[0].value.a: Handle to bignum variable * out params[1].value.a: S32 representing the sign of the value * out params[2].memref: octet string representing the value */ #define TA_CRYPT_CMD_ARITH_GET_VALUE 52 /* * in params[0].value.a: Handle to bignum variable * out params[1].value.a: S32 the value */ #define TA_CRYPT_CMD_ARITH_GET_VALUE_S32 53 /* * in params[0].value.a: Handle to bignum variable * in params[0].value.b: Bit number * out params[1].value.a: Bit value */ #define TA_CRYPT_CMD_ARITH_GET_BIT 54 /* * in params[0].value.a: Handle to bignum variable * out params[1].value.a: Bit count */ #define TA_CRYPT_CMD_ARITH_GET_BIT_COUNT 55 /* * in params[0].value.a: handle op * in params[0].value.b: number of bits * in params[1].value.a: handle result */ #define TA_CRYPT_CMD_ARITH_SHIFT_RIGHT 56 /* * in params[0].value.a: handle op1 * in params[0].value.b: handle op2 * out params[1].value.a: result */ #define TA_CRYPT_CMD_ARITH_CMP 57 /* * in params[0].value.a: handle op * in params[0].value.b: S32 shortVal * out params[1].value.a: result */ #define TA_CRYPT_CMD_ARITH_CMP_S32 58 /* * in params[0].value.a: handle a * in params[0].value.b: handle b * in params[1].value.a: handle result */ #define TA_CRYPT_CMD_ARITH_ADD 59 /* * in params[0].value.a: handle a * in params[0].value.b: handle b * in params[1].value.a: handle result */ #define TA_CRYPT_CMD_ARITH_SUB 60 /* * in params[0].value.a: handle a * in params[0].value.b: handle b * in params[1].value.a: handle result */ #define TA_CRYPT_CMD_ARITH_MUL 61 /* * in params[0].value.a: handle a * in params[0].value.b: handle result */ #define TA_CRYPT_CMD_ARITH_NEG 62 /* * in params[0].value.a: handle a * in params[0].value.b: handle result */ #define TA_CRYPT_CMD_ARITH_SQR 63 /* * in params[0].value.a: handle op1 * in params[0].value.b: handle op2 * in params[1].value.a: handle result Q * in params[1].value.b: handle result R */ #define TA_CRYPT_CMD_ARITH_DIV 64 /* * in params[0].value.a: handle op * in params[0].value.b: handle n * in params[1].value.a: handle result */ #define TA_CRYPT_CMD_ARITH_MOD 65 /* * in params[0].value.a: handle op1 * in params[0].value.b: handle op2 * in params[1].value.a: handle n * in params[1].value.b: handle result */ #define TA_CRYPT_CMD_ARITH_ADDMOD 66 /* * in params[0].value.a: handle op1 * in params[0].value.b: handle op2 * in params[1].value.a: handle n * in params[1].value.b: handle result */ #define TA_CRYPT_CMD_ARITH_SUBMOD 67 /* * in params[0].value.a: handle op1 * in params[0].value.b: handle op2 * in params[1].value.a: handle n * in params[1].value.b: handle result */ #define TA_CRYPT_CMD_ARITH_MULMOD 68 /* * in params[0].value.a: handle op * in params[0].value.b: handle n * in params[1].value.a: handle result */ #define TA_CRYPT_CMD_ARITH_SQRMOD 69 /* * in params[0].value.a: handle op * in params[0].value.b: handle n * in params[1].value.a: handle result */ #define TA_CRYPT_CMD_ARITH_INVMOD 70 /* * in params[0].value.a: handle op * in params[0].value.b: handle n * in params[1].value.a: bool result */ #define TA_CRYPT_CMD_ARITH_IS_RELATIVE_PRIME 71 /* * in params[0].value.a: handle op1 * in params[0].value.b: handle op2 * in params[1].value.a: handle result u * in params[1].value.b: handle result v * in params[2].value.a: handle result gcd */ #define TA_CRYPT_CMD_ARITH_COMPUTE_EGCD 72 /* * in params[0].value.a: handle op * in params[0].value.b: confidence level * out params[1].value.a: S32 result */ #define TA_CRYPT_CMD_ARITH_IS_PRIME 73 /* * in params[0].value.a: handle src * in params[0].value.b: handle n * in params[1].value.a: handle FMM context * in params[1].value.b: handle result FMM variable */ #define TA_CRYPT_CMD_ARITH_TO_FMM 74 /* * in params[0].value.a: handle FMM src * in params[0].value.b: handle bigint n * in params[1].value.a: handle FMM context * in params[1].value.b: handle result bigint */ #define TA_CRYPT_CMD_ARITH_FROM_FMM 75 /* * in params[0].value.a: handle FMM op1 * in params[0].value.b: handle FMM op2 * in params[1].value.a: handle bigint n * in params[1].value.b: handle FMM context * in params[2].value.a: handle FMM result */ #define TA_CRYPT_CMD_ARITH_COMPUTE_FMM 76 /* * system PTA is used for deriving device and TA unique keys. This function in * the "crypt" TA is testing the key derivation. */ #define TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY 77 /* * system PTA is used for deriving device and TA unique keys. This function in * the "crypt" TA is testing the key derivation. This function tries to derive * keys by using shared memory buffers (something that shall fail). * * in params[0].memref.buffer Buffer for extra data * in params[0].memref.size Size of extra data * out params[1].memref.buffer Buffer for the derived key * out params[1].memref.size Size of the derived key */ #define TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY_SHM 78 /* * in params[0].value.a: algorithm * in params[0].value.b: element * out params[1].value.a: TEE_IsAlgorithmSupported() return status */ #define TA_CRYPT_CMD_IS_ALGO_SUPPORTED 79 /* * TEE_Result TEE_DigestExtract(TEE_OperationHandle operation, * void *hash, size_t *hashLen); * in params[0].value.a = operation * out params[1].memref = hash */ #define TA_CRYPT_CMD_DIGEST_EXTRACT 80 /* * in params[0].value.a: handle a * in params[0].value.b: handle result */ #define TA_CRYPT_CMD_ARITH_ABS 81 /* * in params[0].value.a: handle a * in params[0].value.b: handle result * in params[1].value.a: Bit value */ #define TA_CRYPT_CMD_ARITH_SET_BIT 82 /* * in params[0].value.a: handle a * in params[0].value.b: handle result */ #define TA_CRYPT_CMD_ARITH_ASSIGN 83 /* * in params[0].value.a: handle op1 * in params[0].value.b: handle op2 * in params[1].value.a: handle n * in params[1].value.b: handle FMM context * in params[2].value.a: handle result */ #define TA_CRYPT_CMD_ARITH_EXPMOD 84 #endif /*TA_CRYPT_H */ optee_test-4.3.0/ta/crypt/include/user_ta_header_defines.h000066400000000000000000000006471464074351400237200ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #define TA_UUID TA_CRYPT_UUID #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR) #define TA_STACK_SIZE (32 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/crypt/mbedtls_taf.c000066400000000000000000000206571464074351400201100ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* Copyright (c) 2018, Linaro Limited */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* From ca_crt.c */ extern const uint8_t ca_crt[]; extern const size_t ca_crt_size; /* From mid_crt.c */ extern const uint8_t mid_crt[]; extern const size_t mid_crt_size; /* From mid_key.c */ extern const uint8_t mid_key[]; extern const size_t mid_key_size; TEE_Result ta_entry_mbedtls_self_tests(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS] __unused) { const uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_type != exp_pt) return TEE_ERROR_BAD_PARAMETERS; #ifdef CFG_TA_MBEDTLS_SELF_TEST #define DO_MBEDTLS_SELF_TEST(x) do { \ if (mbedtls_##x##_self_test(1)) { \ EMSG("mbedtls_%s_self_test: failed", #x); \ return TEE_ERROR_GENERIC; \ } \ } while (0) DO_MBEDTLS_SELF_TEST(aes); DO_MBEDTLS_SELF_TEST(des); DO_MBEDTLS_SELF_TEST(md5); DO_MBEDTLS_SELF_TEST(sha1); DO_MBEDTLS_SELF_TEST(sha256); DO_MBEDTLS_SELF_TEST(base64); DO_MBEDTLS_SELF_TEST(mpi); DO_MBEDTLS_SELF_TEST(rsa); return TEE_SUCCESS; #else return TEE_ERROR_NOT_IMPLEMENTED; #endif } TEE_Result ta_entry_mbedtls_check_cert(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_SUCCESS; const uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); int ret = 0; uint32_t flags = 0; mbedtls_x509_crt crt = { }; mbedtls_x509_crt trust_crt = { }; if (param_type != exp_pt) return TEE_ERROR_BAD_PARAMETERS; mbedtls_x509_crt_init(&crt); mbedtls_x509_crt_init(&trust_crt); ret = mbedtls_x509_crt_parse(&crt, params[0].memref.buffer, params[0].memref.size); if (ret) { EMSG("mbedtls_x509_crt_parse: failed: %#x", ret); return TEE_ERROR_BAD_FORMAT; } ret = mbedtls_x509_crt_parse(&trust_crt, params[1].memref.buffer, params[1].memref.size); if (ret) { EMSG("mbedtls_x509_crt_parse: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } ret = mbedtls_x509_crt_verify(&crt, &trust_crt, NULL, NULL, &flags, NULL, NULL); if (ret) { EMSG("mbedtls_x509_crt_verify: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; } out: mbedtls_x509_crt_free(&trust_crt); mbedtls_x509_crt_free(&crt); return res; } static int f_rng(void *rng __unused, unsigned char *output, size_t output_len) { TEE_GenerateRandom(output, output_len); return 0; } static TEE_Result write_cert(mbedtls_x509write_cert *crt, void *buf, size_t *blen) { int ret = 0; void *b = NULL; size_t bl = 1024; ret = mbedtls_x509write_crt_pem(crt, buf, *blen, f_rng, NULL); if (!ret) return TEE_SUCCESS; if (ret != MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) { EMSG("mbedtls_x509write_crt_pem: failed: %#x", ret); return TEE_ERROR_GENERIC; } /* * We were called with a too small buffer, let's find out how * large it has to be. */ while (true) { b = TEE_Malloc(bl, TEE_MALLOC_FILL_ZERO); if (!b) return TEE_ERROR_OUT_OF_MEMORY; ret = mbedtls_x509write_crt_pem(crt, b, bl, f_rng, NULL); if (!ret) { *blen = strlen(b) + 1; TEE_Free(b); return TEE_ERROR_SHORT_BUFFER; } TEE_Free(b); if (ret != MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) { EMSG("mbedtls_x509write_crt_pem: failed: %#x", ret); return TEE_ERROR_GENERIC; } bl *= 2; } } static TEE_Result parse_issuer_cert(mbedtls_x509_crt *crt) { int ret = 0; unsigned char *buf = NULL; buf = TEE_Malloc(mid_crt_size + 1, TEE_MALLOC_FILL_ZERO); if (!buf) return TEE_ERROR_OUT_OF_MEMORY; memcpy(buf, mid_crt, mid_crt_size); ret = mbedtls_x509_crt_parse(crt, buf, mid_crt_size + 1); TEE_Free(buf); if (ret) { EMSG("mbedtls_x509_crt_parse: failed: %#x", ret); return TEE_ERROR_BAD_FORMAT; } return TEE_SUCCESS; } static TEE_Result parse_issuer_key(mbedtls_pk_context *pk) { int ret = 0; unsigned char *buf = NULL; buf = TEE_Malloc(mid_key_size + 1, TEE_MALLOC_FILL_ZERO); if (!buf) return TEE_ERROR_OUT_OF_MEMORY; memcpy(buf, mid_key, mid_key_size); ret = mbedtls_pk_parse_key(pk, buf, mid_key_size + 1, NULL, 0, NULL, NULL); TEE_Free(buf); if (ret) { EMSG("mbedtls_pk_parse_key: failed: %#x", ret); return TEE_ERROR_BAD_FORMAT; } return TEE_SUCCESS; } TEE_Result ta_entry_mbedtls_sign_cert(uint32_t param_type, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_SUCCESS; const uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE); char name[256] = { 0 }; mbedtls_mpi serial = { }; mbedtls_x509_crt issuer_crt = { }; mbedtls_pk_context issuer_key = { }; mbedtls_x509write_cert crt = { }; mbedtls_x509_csr csr = { }; int ret = 0; size_t sz = 0; if (param_type != exp_pt) return TEE_ERROR_BAD_PARAMETERS; mbedtls_mpi_init(&serial); mbedtls_x509_crt_init(&issuer_crt); mbedtls_pk_init(&issuer_key); mbedtls_x509write_crt_init(&crt); mbedtls_x509_csr_init(&csr); ret = parse_issuer_cert(&issuer_crt); if (ret) goto out; ret = parse_issuer_key(&issuer_key); if (ret) goto out; ret = mbedtls_mpi_lset(&serial, 1); if (ret) { EMSG("mbedtls_mpi_read_string: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } ret = mbedtls_x509_csr_parse(&csr, params[0].memref.buffer, params[0].memref.size); if (ret) { EMSG("mbedtls_x509_csr_parse: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } /* Extract and set subject name */ ret = mbedtls_x509_dn_gets(name, sizeof(name), &csr.subject); if (ret < 0) { EMSG("mbedtls_x509_dn_gets: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } ret = mbedtls_x509write_crt_set_subject_name(&crt, name); if (ret) { EMSG("mbedtls_x509write_crt_set_subject_name: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } /* Extract and set issuer name */ ret = mbedtls_x509_dn_gets(name, sizeof(name), &issuer_crt.subject); if (ret < 0) { EMSG("mbedtls_x509_dn_gets: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } ret = mbedtls_x509write_crt_set_issuer_name(&crt, name); if (ret) { EMSG("mbedtls_x509write_crt_set_issuer_name: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } mbedtls_x509write_crt_set_md_alg(&crt, csr.MBEDTLS_PRIVATE(sig_md)); mbedtls_x509write_crt_set_subject_key(&crt, &csr.pk); mbedtls_x509write_crt_set_issuer_key(&crt, &issuer_key); ret = mbedtls_x509write_crt_set_serial(&crt, &serial); if (ret) { EMSG("mbedtls_x509write_crt_set_serial: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } ret = mbedtls_x509write_crt_set_validity(&crt, "19700101000000", "20301231235959"); if (ret) { EMSG("mbedtls_x509write_crt_set_validity: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } ret = mbedtls_x509write_crt_set_basic_constraints(&crt, 0, 0); if (ret) { EMSG("mbedtls_x509write_crt_set_validity: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } ret = mbedtls_x509write_crt_set_subject_key_identifier(&crt); if (ret) { EMSG("mbedtls_x509write_crt_set_subject_key_identifier: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } ret = mbedtls_x509write_crt_set_authority_key_identifier(&crt); if (ret) { EMSG("mbedtls_x509write_crt_set_authority_key_identifier: failed: %#x", ret); res = TEE_ERROR_BAD_FORMAT; goto out; } sz = params[1].memref.size; res = write_cert(&crt, params[1].memref.buffer, &sz); if (res && res != TEE_ERROR_SHORT_BUFFER) goto out; params[1].memref.size = sz; ret = snprintf(params[2].memref.buffer, params[2].memref.size, "%*s\n%*s", (int)mid_crt_size, (char *)mid_crt, (int)ca_crt_size, (char *)ca_crt); if (ret < 0) { res = TEE_ERROR_BAD_FORMAT; goto out; } if ((size_t)ret >= params[2].memref.size) res = TEE_ERROR_SHORT_BUFFER; params[2].memref.size = ret + 1; out: mbedtls_mpi_free(&serial); mbedtls_x509_crt_free(&issuer_crt); mbedtls_pk_free(&issuer_key); mbedtls_x509write_crt_free(&crt); mbedtls_x509_csr_free(&csr); return res; } optee_test-4.3.0/ta/crypt/seed_rng_taf.c000066400000000000000000000021121464074351400202260ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2018, Linaro Limited */ #include #include "seed_rng_taf.h" TEE_Result seed_rng_pool(uint32_t param_types, TEE_Param params[4]) { static const TEE_UUID system_uuid = PTA_SYSTEM_UUID; TEE_TASessionHandle sess = TEE_HANDLE_NULL; TEE_Result res = TEE_ERROR_GENERIC; uint32_t ret_orig = 0; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { return TEE_ERROR_BAD_PARAMETERS; } if (!params[0].memref.size) return TEE_ERROR_BAD_PARAMETERS; res = TEE_OpenTASession(&system_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_OpenTASession failed"); goto cleanup_return; } res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, PTA_SYSTEM_ADD_RNG_ENTROPY, param_types, params, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_InvokeTACommand failed"); goto cleanup_return; } cleanup_return: TEE_CloseTASession(sess); return res; } optee_test-4.3.0/ta/crypt/sha2_impl.c000066400000000000000000000353011464074351400174720ustar00rootroot00000000000000// SPDX-License-Identifier: (BSD-2-Clause AND BSD-3-Clause) /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ /* * FIPS 180-2 SHA-224/256/384/512 implementation * Last update: 02/02/2007 * Issue date: 04/30/2005 * * Copyright (C) 2005, 2007 Olivier Gay * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include #include #include #include "sha2_impl.h" #define SHFR(x, n) (x >> n) #define ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n))) #define ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n))) #define CH(x, y, z) ((x & y) ^ (~x & z)) #define MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z)) #define SHA256_F1(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) #define SHA256_F2(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) #define SHA256_F3(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHFR(x, 3)) #define SHA256_F4(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHFR(x, 10)) #define UNPACK32(x, str) \ { \ *((str) + 3) = (uint8_t) ((x)); \ *((str) + 2) = (uint8_t) ((x) >> 8); \ *((str) + 1) = (uint8_t) ((x) >> 16); \ *((str) + 0) = (uint8_t) ((x) >> 24); \ } #define PACK32(str, x) \ { \ *(x) = ((uint32_t) *((str) + 3)) \ | ((uint32_t) *((str) + 2) << 8) \ | ((uint32_t) *((str) + 1) << 16) \ | ((uint32_t) *((str) + 0) << 24); \ } /* Macros used for loops unrolling */ #define SHA256_SCR(i) \ { \ w[i] = SHA256_F4(w[i - 2]) + w[i - 7] \ + SHA256_F3(w[i - 15]) + w[i - 16]; \ } #define SHA256_EXP(a, b, c, d, e, f, g, h, j) \ { \ t1 = wv[h] + SHA256_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \ + sha256_k[j] + w[j]; \ t2 = SHA256_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \ wv[d] += t1; \ wv[h] = t1 + t2; \ } uint32_t sha224_h0[8] = { 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 }; uint32_t sha256_h0[8] = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 }; uint32_t sha256_k[64] = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 }; /* SHA-256 functions */ void sha256_transf(struct sha256_ctx *ctx, const unsigned char *message, unsigned int block_nb) { uint32_t w[64] = { }; uint32_t wv[8] = { }; uint32_t t1 = 0; uint32_t t2 = 0; const unsigned char *sub_block = NULL; int i = 0; #ifndef UNROLL_LOOPS int j = 0; #endif for (i = 0; i < (int)block_nb; i++) { sub_block = message + (i << 6); #ifndef UNROLL_LOOPS for (j = 0; j < 16; j++) PACK32(&sub_block[j << 2], &w[j]); for (j = 16; j < 64; j++) SHA256_SCR(j); for (j = 0; j < 8; j++) wv[j] = ctx->h[j]; for (j = 0; j < 64; j++) { t1 = wv[7] + SHA256_F2(wv[4]) + CH(wv[4], wv[5], wv[6]) + sha256_k[j] + w[j]; t2 = SHA256_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]); wv[7] = wv[6]; wv[6] = wv[5]; wv[5] = wv[4]; wv[4] = wv[3] + t1; wv[3] = wv[2]; wv[2] = wv[1]; wv[1] = wv[0]; wv[0] = t1 + t2; } for (j = 0; j < 8; j++) ctx->h[j] += wv[j]; #else PACK32(&sub_block[0], &w[0]); PACK32(&sub_block[4], &w[1]); PACK32(&sub_block[8], &w[2]); PACK32(&sub_block[12], &w[3]); PACK32(&sub_block[16], &w[4]); PACK32(&sub_block[20], &w[5]); PACK32(&sub_block[24], &w[6]); PACK32(&sub_block[28], &w[7]); PACK32(&sub_block[32], &w[8]); PACK32(&sub_block[36], &w[9]); PACK32(&sub_block[40], &w[10]); PACK32(&sub_block[44], &w[11]); PACK32(&sub_block[48], &w[12]); PACK32(&sub_block[52], &w[13]); PACK32(&sub_block[56], &w[14]); PACK32(&sub_block[60], &w[15]); SHA256_SCR(16); SHA256_SCR(17); SHA256_SCR(18); SHA256_SCR(19); SHA256_SCR(20); SHA256_SCR(21); SHA256_SCR(22); SHA256_SCR(23); SHA256_SCR(24); SHA256_SCR(25); SHA256_SCR(26); SHA256_SCR(27); SHA256_SCR(28); SHA256_SCR(29); SHA256_SCR(30); SHA256_SCR(31); SHA256_SCR(32); SHA256_SCR(33); SHA256_SCR(34); SHA256_SCR(35); SHA256_SCR(36); SHA256_SCR(37); SHA256_SCR(38); SHA256_SCR(39); SHA256_SCR(40); SHA256_SCR(41); SHA256_SCR(42); SHA256_SCR(43); SHA256_SCR(44); SHA256_SCR(45); SHA256_SCR(46); SHA256_SCR(47); SHA256_SCR(48); SHA256_SCR(49); SHA256_SCR(50); SHA256_SCR(51); SHA256_SCR(52); SHA256_SCR(53); SHA256_SCR(54); SHA256_SCR(55); SHA256_SCR(56); SHA256_SCR(57); SHA256_SCR(58); SHA256_SCR(59); SHA256_SCR(60); SHA256_SCR(61); SHA256_SCR(62); SHA256_SCR(63); wv[0] = ctx->h[0]; wv[1] = ctx->h[1]; wv[2] = ctx->h[2]; wv[3] = ctx->h[3]; wv[4] = ctx->h[4]; wv[5] = ctx->h[5]; wv[6] = ctx->h[6]; wv[7] = ctx->h[7]; SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 0); SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 1); SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 2); SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 3); SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 4); SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 5); SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 6); SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 7); SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 8); SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 9); SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 10); SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 11); SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 12); SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 13); SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 14); SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 15); SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 16); SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 17); SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 18); SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 19); SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 20); SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 21); SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 22); SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 23); SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 24); SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 25); SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 26); SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 27); SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 28); SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 29); SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 30); SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 31); SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 32); SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 33); SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 34); SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 35); SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 36); SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 37); SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 38); SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 39); SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 40); SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 41); SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 42); SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 43); SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 44); SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 45); SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 46); SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 47); SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 48); SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 49); SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 50); SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 51); SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 52); SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 53); SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 54); SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 55); SHA256_EXP(0, 1, 2, 3, 4, 5, 6, 7, 56); SHA256_EXP(7, 0, 1, 2, 3, 4, 5, 6, 57); SHA256_EXP(6, 7, 0, 1, 2, 3, 4, 5, 58); SHA256_EXP(5, 6, 7, 0, 1, 2, 3, 4, 59); SHA256_EXP(4, 5, 6, 7, 0, 1, 2, 3, 60); SHA256_EXP(3, 4, 5, 6, 7, 0, 1, 2, 61); SHA256_EXP(2, 3, 4, 5, 6, 7, 0, 1, 62); SHA256_EXP(1, 2, 3, 4, 5, 6, 7, 0, 63); ctx->h[0] += wv[0]; ctx->h[1] += wv[1]; ctx->h[2] += wv[2]; ctx->h[3] += wv[3]; ctx->h[4] += wv[4]; ctx->h[5] += wv[5]; ctx->h[6] += wv[6]; ctx->h[7] += wv[7]; #endif } } void sha256(const unsigned char *message, unsigned int len, unsigned char *digest) { struct sha256_ctx ctx = { }; sha256_init(&ctx); sha256_update(&ctx, message, len); sha256_final(&ctx, digest); } void sha256_init(struct sha256_ctx *ctx) { #ifndef UNROLL_LOOPS int i = 0; for (i = 0; i < 8; i++) ctx->h[i] = sha256_h0[i]; #else ctx->h[0] = sha256_h0[0]; ctx->h[1] = sha256_h0[1]; ctx->h[2] = sha256_h0[2]; ctx->h[3] = sha256_h0[3]; ctx->h[4] = sha256_h0[4]; ctx->h[5] = sha256_h0[5]; ctx->h[6] = sha256_h0[6]; ctx->h[7] = sha256_h0[7]; #endif ctx->len = 0; ctx->tot_len = 0; } void sha256_update(struct sha256_ctx *ctx, const unsigned char *message, unsigned int len) { unsigned int block_nb = 0; unsigned int new_len = 0; unsigned int rem_len = 0; unsigned int tmp_len = 0; const unsigned char *shifted_message = NULL; unsigned long int i = 0; tmp_len = SHA256_BLOCK_SIZE - ctx->len; rem_len = len < tmp_len ? len : tmp_len; for (i = 0; i < rem_len; i++) ctx->block[ctx->len + i] = message[i]; if (ctx->len + len < SHA256_BLOCK_SIZE) { ctx->len += len; return; } new_len = len - rem_len; block_nb = new_len / SHA256_BLOCK_SIZE; shifted_message = message + rem_len; sha256_transf(ctx, ctx->block, 1); sha256_transf(ctx, shifted_message, block_nb); rem_len = new_len % SHA256_BLOCK_SIZE; for (i = 0; i < rem_len; i++) ctx->block[i] = shifted_message[(block_nb << 6) + i]; ctx->len = rem_len; ctx->tot_len += (block_nb + 1) << 6; } void sha256_final(struct sha256_ctx *ctx, unsigned char *digest) { unsigned int block_nb = 0; unsigned int pm_len = 0; unsigned int len_b = 0; unsigned long int i_m = 0; #ifndef UNROLL_LOOPS int i = 0; #endif block_nb = 1; if ((SHA256_BLOCK_SIZE - 9) < (ctx->len % SHA256_BLOCK_SIZE)) block_nb++; len_b = (ctx->tot_len + ctx->len) << 3; pm_len = block_nb << 6; for (i_m = 0; i_m < pm_len - ctx->len; i_m++) ctx->block[ctx->len + i_m] = 0; ctx->block[ctx->len] = 0x80; UNPACK32(len_b, ctx->block + pm_len - 4); sha256_transf(ctx, ctx->block, block_nb); #ifndef UNROLL_LOOPS for (i = 0; i < 8; i++) UNPACK32(ctx->h[i], &digest[i << 2]); #else UNPACK32(ctx->h[0], &digest[0]); UNPACK32(ctx->h[1], &digest[4]); UNPACK32(ctx->h[2], &digest[8]); UNPACK32(ctx->h[3], &digest[12]); UNPACK32(ctx->h[4], &digest[16]); UNPACK32(ctx->h[5], &digest[20]); UNPACK32(ctx->h[6], &digest[24]); UNPACK32(ctx->h[7], &digest[28]); #endif } /* SHA-224 functions */ void sha224(const unsigned char *message, unsigned int len, unsigned char *digest) { struct sha224_ctx ctx = { }; sha224_init(&ctx); sha224_update(&ctx, message, len); sha224_final(&ctx, digest); } void sha224_init(struct sha224_ctx *ctx) { #ifndef UNROLL_LOOPS int i = 0; for (i = 0; i < 8; i++) ctx->h[i] = sha224_h0[i]; #else ctx->h[0] = sha224_h0[0]; ctx->h[1] = sha224_h0[1]; ctx->h[2] = sha224_h0[2]; ctx->h[3] = sha224_h0[3]; ctx->h[4] = sha224_h0[4]; ctx->h[5] = sha224_h0[5]; ctx->h[6] = sha224_h0[6]; ctx->h[7] = sha224_h0[7]; #endif ctx->len = 0; ctx->tot_len = 0; } void sha224_update(struct sha224_ctx *ctx, const unsigned char *message, unsigned int len) { unsigned int block_nb = 0; unsigned int new_len = 0; unsigned int rem_len = 0; unsigned int tmp_len = 0; const unsigned char *shifted_message = NULL; unsigned long int i = 0; tmp_len = SHA224_BLOCK_SIZE - ctx->len; rem_len = len < tmp_len ? len : tmp_len; for (i = 0; i < rem_len; i++) ctx->block[ctx->len + i] = message[i]; if (ctx->len + len < SHA224_BLOCK_SIZE) { ctx->len += len; return; } new_len = len - rem_len; block_nb = new_len / SHA224_BLOCK_SIZE; shifted_message = message + rem_len; sha256_transf((struct sha256_ctx *)ctx, ctx->block, 1); sha256_transf((struct sha256_ctx *)ctx, shifted_message, block_nb); rem_len = new_len % SHA224_BLOCK_SIZE; for (i = 0; i < rem_len; i++) ctx->block[i] = shifted_message[(block_nb << 6) + i]; ctx->len = rem_len; ctx->tot_len += (block_nb + 1) << 6; } void sha224_final(struct sha224_ctx *ctx, unsigned char *digest) { unsigned int block_nb = 0; unsigned int pm_len = 0; unsigned int len_b = 0; unsigned long int i_m = 0; #ifndef UNROLL_LOOPS int i = 0; #endif block_nb = 1; if ((SHA224_BLOCK_SIZE - 9) < (ctx->len % SHA224_BLOCK_SIZE)) block_nb++; len_b = (ctx->tot_len + ctx->len) << 3; pm_len = block_nb << 6; for (i_m = 0; i_m < pm_len - ctx->len; i_m++) ctx->block[ctx->len + i_m] = 0; ctx->block[ctx->len] = 0x80; UNPACK32(len_b, ctx->block + pm_len - 4); sha256_transf((struct sha256_ctx *)ctx, ctx->block, block_nb); #ifndef UNROLL_LOOPS for (i = 0; i < 7; i++) UNPACK32(ctx->h[i], &digest[i << 2]); #else UNPACK32(ctx->h[0], &digest[0]); UNPACK32(ctx->h[1], &digest[4]); UNPACK32(ctx->h[2], &digest[8]); UNPACK32(ctx->h[3], &digest[12]); UNPACK32(ctx->h[4], &digest[16]); UNPACK32(ctx->h[5], &digest[20]); UNPACK32(ctx->h[6], &digest[24]); #endif } optee_test-4.3.0/ta/crypt/sha2_taf.c000066400000000000000000000026151464074351400173050ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include "sha2_taf.h" #include "sha2_impl.h" TEE_Result ta_entry_sha224(uint32_t param_types, TEE_Param params[4]) { /* * It is expected that memRef[0] is input buffer and memRef[1] is * output buffer. */ if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { return TEE_ERROR_BAD_PARAMETERS; } if (params[1].memref.size < SHA224_DIGEST_SIZE) return TEE_ERROR_BAD_PARAMETERS; sha224((unsigned char *)params[0].memref.buffer, (unsigned int)params[0].memref.size, (unsigned char *)params[1].memref.buffer); return TEE_SUCCESS; } TEE_Result ta_entry_sha256(uint32_t param_types, TEE_Param params[4]) { /* * It is expected that memRef[0] is input buffer and memRef[1] is * output buffer. */ if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { return TEE_ERROR_BAD_PARAMETERS; } if (params[1].memref.size < SHA256_DIGEST_SIZE) return TEE_ERROR_BAD_PARAMETERS; sha256((unsigned char *)params[0].memref.buffer, (unsigned int)params[0].memref.size, (unsigned char *)params[1].memref.buffer); return TEE_SUCCESS; } optee_test-4.3.0/ta/crypt/sub.mk000066400000000000000000000016501464074351400165720ustar00rootroot00000000000000global-incdirs-y += include srcs-y += aes_impl.c srcs-y += aes_taf.c srcs-y += cryp_taf.c srcs-y += derive_key_taf.c srcs-y += sha2_impl.c srcs-y += sha2_taf.c srcs-y += seed_rng_taf.c srcs-y += ta_entry.c srcs-$(CFG_TA_MBEDTLS) += mbedtls_taf.c srcs-y += arith_taf.c srcs-y += handle.c CRYPT_FILE_TO_C_SCRIPT = ../../scripts/file_to_c.py CRYPT_CA_CRT = ../../certs/ca.crt CRYPT_MID_CRT = ../../certs/mid.crt CRYPT_MID_KEY = ../../certs/mid.key define crypt_embed_file # 1 prefix/name # 2 infile gensrcs-y += embed-file-$(1) produce-embed-file-$(1) = $(1).c depends-embed-file-$(1) := $(FILE_TO_C_SCRIPT) $(2) recipe-embed-file-$(1) := $(CRYPT_FILE_TO_C_SCRIPT) --inf $(2) --out $(sub-dir-out)/$(1).c --name $(1) cleanfiles += $(sub-dir-out)/$(1).c endef $(eval $(call crypt_embed_file,ca_crt,../../cert/ca.crt)) $(eval $(call crypt_embed_file,mid_crt,../../cert/mid.crt)) $(eval $(call crypt_embed_file,mid_key,../../cert/mid.key)) optee_test-4.3.0/ta/crypt/ta_entry.c000066400000000000000000000251431464074351400174440ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include #include #include #include #include #include #include #include #include static TEE_Result set_global(uint32_t param_types, TEE_Param params[4]); static TEE_Result get_global(uint32_t param_types, TEE_Param params[4]); static int _globalvalue; /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[4], void **ppSessionContext) { (void)nParamTypes; (void)pParams; (void)ppSessionContext; return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext) { (void)pSessionContext; } /* * To provoke the linker to produce R_ARM_ABS32 relocations we need to * pre-initilize a pointer to the function and then also call the function * directly. */ static TEE_Result (*ta_cmd_entries[])(uint32_t, TEE_Param *) = { [TA_CRYPT_CMD_SHA224] = ta_entry_sha224, [TA_CRYPT_CMD_SHA256] = ta_entry_sha256, }; /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { static bool use_fptr = false; (void)pSessionContext; switch (nCommandID) { case TA_CRYPT_CMD_SHA224: use_fptr = !use_fptr; if (use_fptr) return ta_cmd_entries[nCommandID](nParamTypes, pParams); else return ta_entry_sha224(nParamTypes, pParams); case TA_CRYPT_CMD_SHA256: use_fptr = !use_fptr; if (use_fptr) return ta_cmd_entries[nCommandID](nParamTypes, pParams); else return ta_entry_sha256(nParamTypes, pParams); case TA_CRYPT_CMD_AES256ECB_ENC: return ta_entry_aes256ecb_encrypt(nParamTypes, pParams); case TA_CRYPT_CMD_AES256ECB_DEC: return ta_entry_aes256ecb_decrypt(nParamTypes, pParams); case TA_CRYPT_CMD_ALLOCATE_OPERATION: return ta_entry_allocate_operation(nParamTypes, pParams); case TA_CRYPT_CMD_FREE_OPERATION: return ta_entry_free_operation(nParamTypes, pParams); case TA_CRYPT_CMD_GET_OPERATION_INFO: return ta_entry_get_operation_info(nParamTypes, pParams); case TA_CRYPT_CMD_RESET_OPERATION: return ta_entry_reset_operation(nParamTypes, pParams); case TA_CRYPT_CMD_SET_OPERATION_KEY: return ta_entry_set_operation_key(nParamTypes, pParams); case TA_CRYPT_CMD_SET_OPERATION_KEY2: return ta_entry_set_operation_key2(nParamTypes, pParams); case TA_CRYPT_CMD_COPY_OPERATION: return ta_entry_copy_operation(nParamTypes, pParams); case TA_CRYPT_CMD_DIGEST_UPDATE: return ta_entry_digest_update(nParamTypes, pParams); case TA_CRYPT_CMD_DIGEST_DO_FINAL: return ta_entry_digest_do_final(nParamTypes, pParams); case TA_CRYPT_CMD_DIGEST_EXTRACT: return ta_entry_digest_extract(nParamTypes, pParams); case TA_CRYPT_CMD_CIPHER_INIT: return ta_entry_cipher_init(nParamTypes, pParams); case TA_CRYPT_CMD_CIPHER_UPDATE: return ta_entry_cipher_update(nParamTypes, pParams); case TA_CRYPT_CMD_CIPHER_DO_FINAL: return ta_entry_cipher_do_final(nParamTypes, pParams); case TA_CRYPT_CMD_MAC_INIT: return ta_entry_mac_init(nParamTypes, pParams); case TA_CRYPT_CMD_MAC_UPDATE: return ta_entry_mac_update(nParamTypes, pParams); case TA_CRYPT_CMD_MAC_FINAL_COMPUTE: return ta_entry_mac_final_compute(nParamTypes, pParams); case TA_CRYPT_CMD_MAC_FINAL_COMPARE: return ta_entry_mac_final_compare(nParamTypes, pParams); case TA_CRYPT_CMD_ALLOCATE_TRANSIENT_OBJECT: return ta_entry_allocate_transient_object(nParamTypes, pParams); case TA_CRYPT_CMD_FREE_TRANSIENT_OBJECT: return ta_entry_free_transient_object(nParamTypes, pParams); case TA_CRYPT_CMD_RESET_TRANSIENT_OBJECT: return ta_entry_reset_transient_object(nParamTypes, pParams); case TA_CRYPT_CMD_POPULATE_TRANSIENT_OBJECT: return ta_entry_populate_transient_object(nParamTypes, pParams); case TA_CRYPT_CMD_COPY_OBJECT_ATTRIBUTES: return ta_entry_copy_object_attributes(nParamTypes, pParams); case TA_CRYPT_CMD_GENERATE_KEY: return ta_entry_generate_key(nParamTypes, pParams); case TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT: return ta_entry_asymmetric_encrypt(nParamTypes, pParams); case TA_CRYPT_CMD_ASYMMETRIC_DECRYPT: return ta_entry_asymmetric_decrypt(nParamTypes, pParams); case TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST: return ta_entry_asymmetric_sign_digest(nParamTypes, pParams); case TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST: return ta_entry_asymmetric_verify_digest(nParamTypes, pParams); case TA_CRYPT_CMD_DERIVE_KEY: return ta_entry_derive_key(nParamTypes, pParams); case TA_CRYPT_CMD_RANDOM_NUMBER_GENERATE: return ta_entry_random_number_generate(nParamTypes, pParams); case TA_CRYPT_CMD_AE_INIT: return ta_entry_ae_init(nParamTypes, pParams); case TA_CRYPT_CMD_AE_UPDATE_AAD: return ta_entry_ae_update_aad(nParamTypes, pParams); case TA_CRYPT_CMD_AE_UPDATE: return ta_entry_ae_update(nParamTypes, pParams); case TA_CRYPT_CMD_AE_ENCRYPT_FINAL: return ta_entry_ae_encrypt_final(nParamTypes, pParams); case TA_CRYPT_CMD_AE_DECRYPT_FINAL: return ta_entry_ae_decrypt_final(nParamTypes, pParams); case TA_CRYPT_CMD_GET_OBJECT_BUFFER_ATTRIBUTE: return ta_entry_get_object_buffer_attribute(nParamTypes, pParams); case TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE: return ta_entry_get_object_value_attribute(nParamTypes, pParams); case TA_CRYPT_CMD_SETGLOBAL: return set_global(nParamTypes, pParams); case TA_CRYPT_CMD_GETGLOBAL: return get_global(nParamTypes, pParams); #ifdef CFG_TA_MBEDTLS case TA_CRYPT_CMD_MBEDTLS_SELF_TESTS: return ta_entry_mbedtls_self_tests(nParamTypes, pParams); case TA_CRYPT_CMD_MBEDTLS_CHECK_CERT: return ta_entry_mbedtls_check_cert(nParamTypes, pParams); case TA_CRYPT_CMD_MBEDTLS_SIGN_CERT: return ta_entry_mbedtls_sign_cert(nParamTypes, pParams); #endif case TA_CRYPT_CMD_SEED_RNG_POOL: return seed_rng_pool(nParamTypes, pParams); case TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY: return derive_ta_unique_key_test(nParamTypes, pParams); case TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY_SHM: return derive_ta_unique_key_test_shm(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_NEW_VAR: return ta_entry_arith_new_var(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_NEW_FMM_CTX: return ta_entry_arith_new_fmm_ctx(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_NEW_FMM_VAR: return ta_entry_arith_new_fmm_var(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_FREE_HANDLE: return ta_entry_arith_free_handle(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_FROM_OCTET_STRING: return ta_entry_arith_from_octet_string(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_FROM_S32: return ta_entry_arith_from_s32(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_GET_VALUE: return ta_entry_arith_get_value(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_GET_VALUE_S32: return ta_entry_arith_get_value_s32(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_GET_BIT: return ta_entry_arith_get_bit(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_SET_BIT: return ta_entry_arith_set_bit(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_GET_BIT_COUNT: return ta_entry_arith_get_bit_count(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_ABS: return ta_entry_arith_abs(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_ASSIGN: return ta_entry_arith_assign(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_SHIFT_RIGHT: return ta_entry_arith_shift_right(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_CMP: return ta_entry_arith_cmp(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_CMP_S32: return ta_entry_arith_cmp_s32(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_ADD: return ta_entry_arith_add(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_SUB: return ta_entry_arith_sub(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_MUL: return ta_entry_arith_mul(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_NEG: return ta_entry_arith_neg(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_SQR: return ta_entry_arith_sqr(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_DIV: return ta_entry_arith_div(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_MOD: return ta_entry_arith_mod(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_ADDMOD: return ta_entry_arith_addmod(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_SUBMOD: return ta_entry_arith_submod(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_MULMOD: return ta_entry_arith_mulmod(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_SQRMOD: return ta_entry_arith_sqrmod(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_INVMOD: return ta_entry_arith_invmod(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_EXPMOD: return ta_entry_arith_expmod(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_IS_RELATIVE_PRIME: return ta_entry_arith_is_rel_prime(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_COMPUTE_EGCD: return ta_entry_arith_compute_egcd(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_IS_PRIME: return ta_entry_arith_is_prime(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_TO_FMM: return ta_entry_arith_to_fmm(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_FROM_FMM: return ta_entry_arith_from_fmm(nParamTypes, pParams); case TA_CRYPT_CMD_ARITH_COMPUTE_FMM: return ta_entry_arith_compute_fmm(nParamTypes, pParams); case TA_CRYPT_CMD_IS_ALGO_SUPPORTED: return ta_entry_is_algo_supported(nParamTypes, pParams); default: return TEE_ERROR_BAD_PARAMETERS; } } static TEE_Result set_global(uint32_t param_types, TEE_Param params[4]) { int i = 0; /* Param 0 is a memref, input/output */ if (TEE_PARAM_TYPE_VALUE_INPUT != TEE_PARAM_TYPE_GET(param_types, 0)) return TEE_ERROR_BAD_PARAMETERS; /* Other parameters must be of type TEE_PARAM_TYPE_NONE */ for (i = 1; i < 4; i++) { if (TEE_PARAM_TYPE_NONE != TEE_PARAM_TYPE_GET(param_types, i)) return TEE_ERROR_BAD_PARAMETERS; } _globalvalue = params[0].value.a; return TEE_SUCCESS; } static TEE_Result get_global(uint32_t param_types, TEE_Param params[4]) { int i = 0; /* Param 0 is a memref, input/output */ if (TEE_PARAM_TYPE_VALUE_OUTPUT != TEE_PARAM_TYPE_GET(param_types, 0)) return TEE_ERROR_BAD_PARAMETERS; /* Other parameters must be of type TEE_PARAM_TYPE_NONE */ for (i = 1; i < 4; i++) { if (TEE_PARAM_TYPE_NONE != TEE_PARAM_TYPE_GET(param_types, i)) return TEE_ERROR_BAD_PARAMETERS; } params[0].value.a = _globalvalue; return TEE_SUCCESS; } optee_test-4.3.0/ta/crypto_perf/000077500000000000000000000000001464074351400166415ustar00rootroot00000000000000optee_test-4.3.0/ta/crypto_perf/Android.mk000066400000000000000000000001601464074351400205470ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 02a42f43-d8b7-4a57-aa4d-87bd9b5587cb.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/crypto_perf/Makefile000066400000000000000000000001101464074351400202710ustar00rootroot00000000000000BINARY = 02a42f43-d8b7-4a57-aa4d-87bd9b5587cb include ../ta_common.mk optee_test-4.3.0/ta/crypto_perf/include/000077500000000000000000000000001464074351400202645ustar00rootroot00000000000000optee_test-4.3.0/ta/crypto_perf/include/ta_crypto_perf.h000066400000000000000000000060531464074351400234610ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited */ #ifndef TA_CRYPTO_PERF_H #define TA_CRYPTO_PERF_H #define TA_CRYPTO_PERF_UUID { 0x02a42f43, 0xd8b7, 0x4a57, \ { 0xaa, 0x4d, 0x87, 0xbd, 0x9b, 0x55, 0x87, 0xcb } } /* * Commands implemented by the TA */ #define TA_CRYPTO_PERF_CMD_CIPHER_PREPARE_KEY 0 #define TA_CRYPTO_PERF_CMD_CIPHER_PROCESS 1 #define TA_CRYPTO_PERF_CMD_CIPHER_PROCESS_SDP 2 #define TA_CRYPTO_PERF_CMD_HASH_PREPARE_OP 3 #define TA_CRYPTO_PERF_CMD_HASH_PROCESS 4 #define TA_CRYPTO_PERF_CMD_ASYM_PREPARE_OBJ 5 #define TA_CRYPTO_PERF_CMD_ASYM_PREPARE_HASH 6 #define TA_CRYPTO_PERF_CMD_ASYM_PREPARE_KEYPAIR 7 #define TA_CRYPTO_PERF_CMD_ASYM_PREPARE_ENC_SIGN 8 #define TA_CRYPTO_PERF_CMD_ASYM_PREPARE_ATTRS 9 #define TA_CRYPTO_PERF_CMD_ASYM_PROCESS_GEN_KEYPAIR 10 #define TA_CRYPTO_PERF_CMD_ASYM_PROCESS 11 #define TA_CRYPTO_PERF_CMD_ASYM_FREE_ATTRS 12 /* * Supported AES modes of operation */ #define TA_AES_ECB 0 #define TA_AES_CBC 1 #define TA_AES_CTR 2 #define TA_AES_XTS 3 #define TA_AES_GCM 4 #define TA_SM4_ECB 5 #define TA_SM4_CBC 6 #define TA_SM4_CTR 7 #define TA_SM4_XTS 8 /* * AES key sizes */ #define AES_128 128 #define AES_192 192 #define AES_256 256 /* * Supported hash algorithms */ #define TA_SHA_SHA1 0 #define TA_SHA_SHA224 1 #define TA_SHA_SHA256 2 #define TA_SHA_SHA384 3 #define TA_SHA_SHA512 4 #define TA_SM3 5 #define TA_HMAC_SHA1 6 #define TA_HMAC_SHA224 7 #define TA_HMAC_SHA256 8 #define TA_HMAC_SHA384 9 #define TA_HMAC_SHA512 10 #define TA_HMAC_SM3 11 /* * Asymmetric cryptographic algorithms */ #define PKCS_V1_5_MIN 11 #define BITS_TO_BYTES(len) (((len) + 7) / 8) #define OAEP_HASH_LEN(hsz) ((hsz) * 2) #define OAEP_OTHER_LEN 2 #define PSS_OTHER_LEN 2 #define DERCODE_SHA1_LEN 15 #define DERCODE_SHA_LEN 19 #define SHA1_LEN 20 #define SHA224_LEN 28 #define SHA256_LEN 32 #define SHA384_LEN 48 #define SHA512_LEN 64 #define WIDTH_BITS_25519 256 #define ECC_CURVE_192 192 #define ECC_CURVE_224 224 #define ECC_CURVE_256 256 #define ECC_CURVE_384 384 #define ECC_CURVE_521 521 #define TEE_MAX_OUT_SIZE 4096 #define DH_MAX_SIZE 4096 #define DH_G_SIZE 1 enum symm_cipher { AES = 0, SM4 = 1, }; enum symm_mode { ECB = 0, CBC = 1, CTR = 2, XTS = 3, GCM = 4, }; enum asym_algorithm { ALGO_DH = 1, ALGO_RSA = 2, ALGO_ECDSA = 3, ALGO_ECDH = 4, ALGO_X25519 = 5, ALGO_SM2 = 6, }; enum asym_cipher_mode { MODE_ENCRYPT = 0, MODE_DECRYPT = 1, MODE_SIGN = 2, MODE_VERIFY = 3, MODE_GENKEYPAIR = 4, }; enum rsa_mode { RSA_NOPAD = 0, RSAES_PKCS1_V1_5 = 1, RSAES_PKCS1_OAEP_SHA1 = 2, RSAES_PKCS1_OAEP_SHA224 = 3, RSAES_PKCS1_OAEP_SHA256 = 4, RSAES_PKCS1_OAEP_SHA384 = 5, RSAES_PKCS1_OAEP_SHA512 = 6, RSASSA_PKCS1_V1_5_SHA1 = 7, RSASSA_PKCS1_V1_5_SHA224 = 8, RSASSA_PKCS1_V1_5_SHA256 = 9, RSASSA_PKCS1_V1_5_SHA384 = 10, RSASSA_PKCS1_V1_5_SHA512 = 11, RSASSA_PKCS1_PSS_MGF1_SHA1 = 12, RSASSA_PKCS1_PSS_MGF1_SHA224 = 13, RSASSA_PKCS1_PSS_MGF1_SHA256 = 14, RSASSA_PKCS1_PSS_MGF1_SHA384 = 15, RSASSA_PKCS1_PSS_MGF1_SHA512 = 16, }; #endif /* TA_CRYPTO_PERF_H */ optee_test-4.3.0/ta/crypto_perf/include/ta_crypto_perf_priv.h000066400000000000000000000022661464074351400245230ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited */ #ifndef TA_CRYPTO_PERF_PRIV_H #define TA_CRYPTO_PERF_PRIV_H #include TEE_Result cmd_cipher_prepare_key(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_cipher_process(uint32_t param_types, TEE_Param params[4], bool sdp); TEE_Result cmd_hash_prepare_op(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_hash_process(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_asym_process_keypair(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_asym_process_rsa_ecc(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_asym_prepare_obj(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_asym_prepare_keypair(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_asym_prepare_hash(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_asym_prepare_enc_sign(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_asym_prepare_attrs(uint32_t param_types, TEE_Param params[4]); TEE_Result cmd_asym_free_attrs(uint32_t param_types, TEE_Param params[4]); void cmd_clean_obj(void); void cmd_clean_res(void); #endif /* TA_CRYPTO_PERF_PRIV_H */ optee_test-4.3.0/ta/crypto_perf/include/user_ta_header_defines.h000066400000000000000000000005161464074351400251060ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include "ta_crypto_perf.h" #define TA_UUID TA_CRYPTO_PERF_UUID #define TA_FLAGS 0 #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif optee_test-4.3.0/ta/crypto_perf/sub.mk000066400000000000000000000001141464074351400177570ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c srcs-y += ta_crypto_perf.c optee_test-4.3.0/ta/crypto_perf/ta_crypto_perf.c000066400000000000000000000642501464074351400220340ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited */ #include #include #include #include #include #include #include #include "ta_crypto_perf.h" #include "ta_crypto_perf_priv.h" #define CHECK(res, name, action) do { \ if ((res) != TEE_SUCCESS) { \ DMSG(name ": 0x%08x", (res)); \ action \ } \ } while(0) #define TAG_LEN 128 static uint8_t iv[] = { 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF }; static int use_iv; static TEE_OperationHandle crypto_op; static uint32_t algo; static TEE_OperationHandle crypto_op_enc_sign = TEE_HANDLE_NULL; static TEE_ObjectHandle crypto_obj = TEE_HANDLE_NULL; static TEE_Attribute *asym_perf_attrs; static uint32_t asym_perf_attr_count; static uint8_t *crypto_buf; static bool is_inbuf_a_secure_memref(TEE_Param *param) { TEE_Result res = TEE_ERROR_GENERIC; /* * Check secure attribute for the referenced buffer * Trust core on validity of the memref size: test only 1st byte * instead of the overall buffer, and if it's not secure, assume * the buffer is nonsecure. */ res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_ANY_OWNER | TEE_MEMORY_ACCESS_READ | TEE_MEMORY_ACCESS_SECURE, param->memref.buffer, 1); return (res == TEE_SUCCESS); } static bool is_outbuf_a_secure_memref(TEE_Param *param) { TEE_Result res = TEE_ERROR_GENERIC; /* * Check secure attribute for the referenced buffer * Trust core on validity of the memref size: test only 1st byte * instead of the overall buffer, and if it's not secure, assume * the buffer is nonsecure. */ res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_ANY_OWNER | TEE_MEMORY_ACCESS_WRITE | TEE_MEMORY_ACCESS_SECURE, param->memref.buffer, 1); return (res == TEE_SUCCESS); } #if defined(CFG_CACHE_API) static TEE_Result flush_memref_buffer(TEE_Param *param) { TEE_Result res = TEE_ERROR_GENERIC; res = TEE_CacheFlush(param->memref.buffer, param->memref.size); CHECK(res, "TEE_CacheFlush(in)", return res;); return res; } #else static __maybe_unused TEE_Result flush_memref_buffer(TEE_Param *param __unused) { return TEE_SUCCESS; } #endif /* CFG_CACHE_API */ TEE_Result cmd_cipher_process(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS], bool use_sdp) { TEE_Result res = TEE_ERROR_GENERIC; int n = 0; int unit = 0; void *in = NULL; void *out = NULL; size_t insz = 0; size_t outsz = 0; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE); bool secure_in = false; bool secure_out = false; TEE_Result (*do_update)(TEE_OperationHandle, const void *, size_t, void *, size_t *) = NULL; if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; if (use_sdp) { /* * Whatever is expected as memory reference, it is mandatory * for SDP aware trusted applications of safely indentify all * memory reference parameters. Hence these tests must be part * of the performance test setup. */ secure_in = is_inbuf_a_secure_memref(¶ms[0]); secure_out = is_outbuf_a_secure_memref(¶ms[1]); /* * We could invalidate only the caches. We prefer to flush * them in case 2 sub-buffers are accessed by TAs from a single * allocated SDP memory buffer, and those are not cache-aligned. * Invalidating might cause data loss in cache lines. Hence * rather flush them all before accessing (in read or write). */ if (secure_in) { res = flush_memref_buffer(¶ms[0]); CHECK(res, "pre-flush in memref param", return res;); } if (secure_out) { res = flush_memref_buffer(¶ms[1]); CHECK(res, "pre-flush out memref param", return res;); } } in = params[0].memref.buffer; insz = params[0].memref.size; out = params[1].memref.buffer; outsz = params[1].memref.size; n = params[2].value.a; unit = params[2].value.b; if (!unit) unit = insz; if (algo == TEE_ALG_AES_GCM) do_update = TEE_AEUpdate; else do_update = TEE_CipherUpdate; while (n--) { uint32_t i = 0; for (i = 0; i < insz / unit; i++) { res = do_update(crypto_op, in, unit, out, &outsz); CHECK(res, "TEE_CipherUpdate/TEE_AEUpdate", return res;); in = (void *)((uintptr_t)in + unit); out = (void *)((uintptr_t)out + unit); } if (insz % unit) { res = do_update(crypto_op, in, insz % unit, out, &outsz); CHECK(res, "TEE_CipherUpdate/TEE_AEUpdate", return res;); } } if (secure_out) { /* intentionally flush output data from cache for SDP buffers */ res = flush_memref_buffer(¶ms[1]); CHECK(res, "post-flush out memref param", return res;); } return TEE_SUCCESS; } TEE_Result cmd_cipher_prepare_key(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_ObjectHandle hkey = TEE_HANDLE_NULL; TEE_ObjectHandle hkey2 = TEE_HANDLE_NULL; TEE_ObjectType objectType; TEE_Attribute attr = { }; uint32_t mode = 0; uint32_t op_keysize = 0; uint32_t keysize = 0; const uint8_t *ivp = NULL; size_t ivlen = 0; static uint8_t cipher_key[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }; static uint8_t cipher_key2[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F }; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; mode = params[0].value.a ? TEE_MODE_DECRYPT : TEE_MODE_ENCRYPT; keysize = params[0].value.b; op_keysize = keysize; switch (params[1].value.a) { case TA_AES_ECB: algo = TEE_ALG_AES_ECB_NOPAD; objectType = TEE_TYPE_AES; use_iv = 0; break; case TA_AES_CBC: algo = TEE_ALG_AES_CBC_NOPAD; objectType = TEE_TYPE_AES; use_iv = 1; break; case TA_AES_CTR: algo = TEE_ALG_AES_CTR; objectType = TEE_TYPE_AES; use_iv = 1; break; case TA_AES_XTS: algo = TEE_ALG_AES_XTS; objectType = TEE_TYPE_AES; use_iv = 1; op_keysize *= 2; break; case TA_AES_GCM: algo = TEE_ALG_AES_GCM; objectType = TEE_TYPE_AES; use_iv = 1; break; case TA_SM4_ECB: algo = TEE_ALG_SM4_ECB_NOPAD; objectType = TEE_TYPE_SM4; use_iv = 0; break; case TA_SM4_CBC: algo = TEE_ALG_SM4_CBC_NOPAD; objectType = TEE_TYPE_SM4; use_iv = 1; break; case TA_SM4_CTR: algo = TEE_ALG_SM4_CTR; objectType = TEE_TYPE_SM4; use_iv = 1; break; case TA_SM4_XTS: algo = TEE_ALG_SM4_XTS; objectType = TEE_TYPE_SM4; use_iv = 1; op_keysize *= 2; break; default: return TEE_ERROR_BAD_PARAMETERS; } cmd_clean_res(); res = TEE_AllocateOperation(&crypto_op, algo, mode, op_keysize); CHECK(res, "TEE_AllocateOperation", return res;); res = TEE_AllocateTransientObject(objectType, keysize, &hkey); CHECK(res, "TEE_AllocateTransientObject", return res;); attr.attributeID = TEE_ATTR_SECRET_VALUE; attr.content.ref.buffer = cipher_key; attr.content.ref.length = keysize / 8; res = TEE_PopulateTransientObject(hkey, &attr, 1); CHECK(res, "TEE_PopulateTransientObject", return res;); if (algo == TEE_ALG_AES_XTS || algo == TEE_ALG_SM4_XTS) { res = TEE_AllocateTransientObject(objectType, keysize, &hkey2); CHECK(res, "TEE_AllocateTransientObject", return res;); attr.content.ref.buffer = cipher_key2; res = TEE_PopulateTransientObject(hkey2, &attr, 1); CHECK(res, "TEE_PopulateTransientObject", return res;); res = TEE_SetOperationKey2(crypto_op, hkey, hkey2); CHECK(res, "TEE_SetOperationKey2", return res;); TEE_FreeTransientObject(hkey2); } else { res = TEE_SetOperationKey(crypto_op, hkey); CHECK(res, "TEE_SetOperationKey", return res;); } TEE_FreeTransientObject(hkey); if (use_iv) { ivp = iv; ivlen = sizeof(iv); } else { ivp = NULL; ivlen = 0; } if (algo == TEE_ALG_AES_GCM) { return TEE_AEInit(crypto_op, ivp, ivlen, TAG_LEN, 0, 0); } else { TEE_CipherInit(crypto_op, ivp, ivlen); return TEE_SUCCESS; } } static bool is_mac(uint32_t hash_algo) { switch (hash_algo) { case TEE_ALG_HMAC_SHA1: case TEE_ALG_HMAC_SHA224: case TEE_ALG_HMAC_SHA256: case TEE_ALG_HMAC_SHA384: case TEE_ALG_HMAC_SHA512: case TEE_ALG_HMAC_SM3: return true; default: return false; } } TEE_Result cmd_hash_process(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_OperationInfo info = { }; int n = 0; void *in = NULL; void *out = NULL; size_t insz = 0; size_t outsz = 0; uint32_t offset = 0; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; offset = params[2].value.b; in = (uint8_t *)params[0].memref.buffer + offset; insz = params[0].memref.size - offset; out = params[1].memref.buffer; outsz = params[1].memref.size; n = params[2].value.a; TEE_GetOperationInfo(crypto_op, &info); if (is_mac(info.algorithm)) { while (n--) { TEE_MACInit(crypto_op, NULL, 0); res = TEE_MACComputeFinal(crypto_op, in, insz, out, &outsz); CHECK(res, "TEE_MACComputeFinal", return res;); } } else { while (n--) { res = TEE_DigestDoFinal(crypto_op, in, insz, out, &outsz); CHECK(res, "TEE_DigestDoFinal", return res;); } } return TEE_SUCCESS; } TEE_Result cmd_hash_prepare_op(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle hkey = TEE_HANDLE_NULL; TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute attr = { }; uint32_t key_type = TEE_TYPE_HMAC_SHA1; uint32_t mac_key_size = 512; uint32_t max_key_size = 0; uint32_t hash_algo = 0; static uint8_t mac_key[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F }; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; switch (params[0].value.a) { case TA_SHA_SHA1: hash_algo = TEE_ALG_SHA1; break; case TA_SHA_SHA224: hash_algo = TEE_ALG_SHA224; break; case TA_SHA_SHA256: hash_algo = TEE_ALG_SHA256; break; case TA_SHA_SHA384: hash_algo = TEE_ALG_SHA384; break; case TA_SHA_SHA512: hash_algo = TEE_ALG_SHA512; break; case TA_SM3: hash_algo = TEE_ALG_SM3; break; case TA_HMAC_SHA1: key_type = TEE_TYPE_HMAC_SHA1; hash_algo = TEE_ALG_HMAC_SHA1; max_key_size = 512; break; case TA_HMAC_SHA224: key_type = TEE_TYPE_HMAC_SHA224; hash_algo = TEE_ALG_HMAC_SHA224; max_key_size = 512; break; case TA_HMAC_SHA256: key_type = TEE_TYPE_HMAC_SHA256; hash_algo = TEE_ALG_HMAC_SHA256; max_key_size = 512; break; case TA_HMAC_SHA384: key_type = TEE_TYPE_HMAC_SHA384; hash_algo = TEE_ALG_HMAC_SHA384; max_key_size = 1024; break; case TA_HMAC_SHA512: key_type = TEE_TYPE_HMAC_SHA512; hash_algo = TEE_ALG_HMAC_SHA512; max_key_size = 1024; break; case TA_HMAC_SM3: key_type = TEE_TYPE_HMAC_SM3; hash_algo = TEE_ALG_HMAC_SM3; max_key_size = 512; break; default: return TEE_ERROR_BAD_PARAMETERS; } if (crypto_op) TEE_FreeOperation(crypto_op); if (is_mac(hash_algo)) { res = TEE_AllocateOperation(&crypto_op, hash_algo, TEE_MODE_MAC, max_key_size); CHECK(res, "TEE_AllocateOperation", return res;); res = TEE_AllocateTransientObject(key_type, max_key_size, &hkey); CHECK(res, "TEE_AllocateTransientObject", return res;); attr.attributeID = TEE_ATTR_SECRET_VALUE; attr.content.ref.buffer = mac_key; attr.content.ref.length = mac_key_size / 8; res = TEE_PopulateTransientObject(hkey, &attr, 1); CHECK(res, "TEE_PopulateTransientObject", return res;); res = TEE_SetOperationKey(crypto_op, hkey); CHECK(res, "TEE_SetOperationKey", return res;); TEE_FreeTransientObject(hkey); } else { res = TEE_AllocateOperation(&crypto_op, hash_algo, TEE_MODE_DIGEST, 0); CHECK(res, "TEE_AllocateOperation", return res;); } return TEE_SUCCESS; } struct attr_packed { uint32_t id; uint32_t a; uint32_t b; }; static TEE_Result unpack_attrs(const uint8_t *buf, size_t blen, TEE_Attribute **attrs, uint32_t *attr_count) { TEE_Result res = TEE_SUCCESS; TEE_Attribute *a = NULL; const struct attr_packed *ap = NULL; size_t num_attrs = 0; const size_t num_attrs_size = sizeof(uint32_t); if (blen == 0) goto out; if (!IS_ALIGNED_WITH_TYPE(buf, uint32_t) || blen < num_attrs_size) return TEE_ERROR_BAD_PARAMETERS; num_attrs = *(uint32_t *)(void *)buf; if ((blen - num_attrs_size) < (num_attrs * sizeof(*ap))) return TEE_ERROR_BAD_PARAMETERS; ap = (const struct attr_packed *)(const void *)(buf + num_attrs_size); if (num_attrs > 0) { size_t n = 0; a = TEE_Malloc(num_attrs * sizeof(TEE_Attribute), 0); if (!a) return TEE_ERROR_OUT_OF_MEMORY; for (n = 0; n < num_attrs; n++) { uintptr_t p = 0; a[n].attributeID = ap[n].id; if (ap[n].id & TEE_ATTR_FLAG_VALUE) { a[n].content.value.a = ap[n].a; a[n].content.value.b = ap[n].b; continue; } a[n].content.ref.length = ap[n].b; p = (uintptr_t)ap[n].a; if (p) { if ((p + a[n].content.ref.length) > blen) { res = TEE_ERROR_BAD_PARAMETERS; goto out; } p += (uintptr_t)buf; } a[n].content.ref.buffer = (void *)p; } } out: if (res == TEE_SUCCESS) { *attrs = a; *attr_count = num_attrs; } else { TEE_Free(a); } return res; } static TEE_Result get_rsa_cipher_algo(uint32_t algo_type) { switch (algo_type) { case RSA_NOPAD: algo = TEE_ALG_RSA_NOPAD; break; case RSAES_PKCS1_V1_5: algo = TEE_ALG_RSAES_PKCS1_V1_5; break; case RSAES_PKCS1_OAEP_SHA1: algo = TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1; break; case RSAES_PKCS1_OAEP_SHA224: algo = TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA224; break; case RSAES_PKCS1_OAEP_SHA256: algo = TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256; break; case RSAES_PKCS1_OAEP_SHA384: algo = TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA384; break; case RSAES_PKCS1_OAEP_SHA512: algo = TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA512; break; default: EMSG("RSA enc or dec error algo_type"); return TEE_ERROR_BAD_PARAMETERS; } return TEE_SUCCESS; } static TEE_Result get_rsa_hash_algo(uint32_t algo_type) { switch (algo_type) { case RSASSA_PKCS1_V1_5_SHA1: algo = TEE_ALG_RSASSA_PKCS1_V1_5_SHA1; break; case RSASSA_PKCS1_V1_5_SHA224: algo = TEE_ALG_RSASSA_PKCS1_V1_5_SHA224; break; case RSASSA_PKCS1_V1_5_SHA256: algo = TEE_ALG_RSASSA_PKCS1_V1_5_SHA256; break; case RSASSA_PKCS1_V1_5_SHA384: algo = TEE_ALG_RSASSA_PKCS1_V1_5_SHA384; break; case RSASSA_PKCS1_V1_5_SHA512: algo = TEE_ALG_RSASSA_PKCS1_V1_5_SHA512; break; case RSASSA_PKCS1_PSS_MGF1_SHA1: algo = TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1; break; case RSASSA_PKCS1_PSS_MGF1_SHA224: algo = TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224; break; case RSASSA_PKCS1_PSS_MGF1_SHA256: algo = TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256; break; case RSASSA_PKCS1_PSS_MGF1_SHA384: algo = TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384; break; case RSASSA_PKCS1_PSS_MGF1_SHA512: algo = TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512; break; default: EMSG("RSA sign or verify error algo_type"); return TEE_ERROR_BAD_PARAMETERS; } return TEE_SUCCESS; } static TEE_Result get_ecdsa_hash_algo(uint32_t width_bits) { switch (width_bits) { case ECC_CURVE_192: algo = __OPTEE_ALG_ECDSA_P192; break; case ECC_CURVE_224: algo = __OPTEE_ALG_ECDSA_P224; break; case ECC_CURVE_256: algo = __OPTEE_ALG_ECDSA_P256; break; case ECC_CURVE_384: algo = __OPTEE_ALG_ECDSA_P384; break; case ECC_CURVE_521: algo = __OPTEE_ALG_ECDSA_P521; break; default: EMSG("ECDSA sign or verify error width_bits"); return TEE_ERROR_BAD_PARAMETERS; } return TEE_SUCCESS; } static TEE_Result get_algo(uint32_t tee_type, uint32_t mode, uint32_t width_bits, uint32_t algo_type) { TEE_Result res = TEE_SUCCESS; if (tee_type == ALGO_RSA) { if (mode == MODE_ENCRYPT || mode == MODE_DECRYPT) { res = get_rsa_cipher_algo(algo_type); } else if (mode == MODE_SIGN || mode == MODE_VERIFY) { res = get_rsa_hash_algo(algo_type); } else { EMSG("RSA error mode"); res = TEE_ERROR_BAD_PARAMETERS; } } else if (tee_type == ALGO_ECDSA) { if (mode == MODE_SIGN || mode == MODE_VERIFY) { res = get_ecdsa_hash_algo(width_bits); } else { EMSG("ECDSA error mode"); res = TEE_ERROR_BAD_PARAMETERS; } } else if (tee_type == ALGO_SM2) { if (mode == MODE_ENCRYPT || mode == MODE_DECRYPT) { algo = TEE_ALG_SM2_PKE; } else if (mode == MODE_SIGN || mode == MODE_VERIFY) { algo = TEE_ALG_SM2_DSA_SM3; } else { EMSG("SM2 error mode"); res = TEE_ERROR_BAD_PARAMETERS; } } else { res = TEE_ERROR_BAD_PARAMETERS; } return res; } static uint32_t get_keypair_type(uint32_t value, uint32_t mode) { switch (value) { case ALGO_DH: return TEE_TYPE_DH_KEYPAIR; case ALGO_RSA: return TEE_TYPE_RSA_KEYPAIR; case ALGO_ECDSA: return TEE_TYPE_ECDSA_KEYPAIR; case ALGO_ECDH: return TEE_TYPE_ECDH_KEYPAIR; case ALGO_X25519: return TEE_TYPE_X25519_KEYPAIR; case ALGO_SM2: if (mode == MODE_ENCRYPT || mode == MODE_DECRYPT) { return TEE_TYPE_SM2_PKE_KEYPAIR; } else if (mode == MODE_SIGN || mode == MODE_VERIFY) { return TEE_TYPE_SM2_DSA_KEYPAIR; } else { EMSG("The mode[%"PRIu32"] is not valid", mode); return TEE_TYPE_ILLEGAL_VALUE; } default: EMSG("The algo[%"PRIu32"] is not valid", value); return TEE_TYPE_ILLEGAL_VALUE; } } TEE_Result cmd_asym_prepare_attrs(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; crypto_buf = TEE_Malloc(params[0].memref.size, 0); if (!crypto_buf) return TEE_ERROR_OUT_OF_MEMORY; memcpy(crypto_buf, params[0].memref.buffer, params[0].memref.size); return unpack_attrs(crypto_buf, params[0].memref.size, &asym_perf_attrs, &asym_perf_attr_count); } TEE_Result cmd_asym_free_attrs(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS] __unused) { uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; TEE_Free(asym_perf_attrs); asym_perf_attrs = NULL; TEE_Free(crypto_buf); crypto_buf = NULL; return TEE_SUCCESS; } TEE_Result cmd_asym_process_keypair(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_ERROR_GENERIC; int width_bits = 0; int n = 0; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; width_bits = params[0].value.a; n = params[0].value.b; while (n--) { res = TEE_GenerateKey(crypto_obj, width_bits, asym_perf_attrs, asym_perf_attr_count); CHECK(res, "TEE_GenerateKey()", break;); TEE_ResetTransientObject(crypto_obj); } return res; } TEE_Result cmd_asym_process_rsa_ecc(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_ERROR_GENERIC; int n = 0; uint32_t mode = 0; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE); size_t dummy_size = params[2].memref.size; TEE_Result (*do_asym)(TEE_OperationHandle, const TEE_Attribute *, uint32_t, const void *, size_t, void *, size_t *) = NULL; if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; n = params[0].value.a; mode = params[0].value.b; if (mode == MODE_VERIFY) { while (n--) { res = TEE_AsymmetricVerifyDigest(crypto_op, asym_perf_attrs, asym_perf_attr_count, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, dummy_size); CHECK(res, "TEE processing failed", break;); } } else { if (mode == MODE_ENCRYPT) do_asym = TEE_AsymmetricEncrypt; else if (mode == MODE_DECRYPT) do_asym = TEE_AsymmetricDecrypt; else if (mode == MODE_SIGN) do_asym = TEE_AsymmetricSignDigest; else return TEE_ERROR_BAD_PARAMETERS; while (n--) { res = do_asym(crypto_op, asym_perf_attrs, asym_perf_attr_count, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, &dummy_size); CHECK(res, "TEE processing failed", break;); } } return res; } TEE_Result cmd_asym_prepare_obj(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_ERROR_GENERIC; uint32_t tee_type = TEE_TYPE_ILLEGAL_VALUE; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; tee_type = get_keypair_type(params[0].value.a, params[1].value.a); if (tee_type == TEE_TYPE_ILLEGAL_VALUE) return TEE_ERROR_BAD_PARAMETERS; cmd_clean_obj(); res = TEE_AllocateTransientObject(tee_type, params[0].value.b, &crypto_obj); CHECK(res, "TEE_AllocateTransientObject()", return res;); return TEE_SUCCESS; } TEE_Result cmd_asym_prepare_keypair(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; uint32_t width_bits = 0; uint32_t algo_type = 0; uint32_t tee_type = 0; uint32_t mode = 0; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; mode = params[0].value.b; width_bits = params[0].value.a; tee_type = params[1].value.a; algo_type = params[1].value.b; if (get_algo(tee_type, mode, width_bits, algo_type)) return TEE_ERROR_BAD_PARAMETERS; res = unpack_attrs(params[2].memref.buffer, params[2].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_GenerateKey(crypto_obj, width_bits, attrs, attr_count); CHECK(res, "TEE_GenerateKey()", goto out;); cmd_clean_res(); res = TEE_AllocateOperation(&crypto_op, algo, mode, width_bits); CHECK(res, "TEE_AllocateOperation()", goto out;); res = TEE_SetOperationKey(crypto_op, crypto_obj); CHECK(res, "TEE_SetOperationKey()", goto out;); if (mode == MODE_DECRYPT) { res = TEE_AllocateOperation(&crypto_op_enc_sign, algo, MODE_ENCRYPT, width_bits); CHECK(res, "TEE_AllocateOperation()", goto out;); res = TEE_SetOperationKey(crypto_op_enc_sign, crypto_obj); CHECK(res, "TEE_SetOperationKey()", goto out;); } else if (mode == MODE_VERIFY) { res = TEE_AllocateOperation(&crypto_op_enc_sign, algo, MODE_SIGN, width_bits); CHECK(res, "TEE_AllocateOperation()", goto out;); res = TEE_SetOperationKey(crypto_op_enc_sign, crypto_obj); CHECK(res, "TEE_SetOperationKey()", goto out;); } out: TEE_Free(attrs); return res; } TEE_Result cmd_asym_prepare_hash(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_OperationHandle hash_op = NULL; uint32_t hash_algo = 0; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; if (params[0].value.a == ALGO_ECDSA) hash_algo = TEE_ALG_SHA1; else hash_algo = TEE_ALG_HASH_ALGO(TEE_ALG_GET_DIGEST_HASH(algo)); res = TEE_AllocateOperation(&hash_op, hash_algo, TEE_MODE_DIGEST, 0); CHECK(res, "TEE_AllocateOperation()", return res;); res = TEE_DigestDoFinal(hash_op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); TEE_FreeOperation(hash_op); CHECK(res, "TEE_DigestDoFinal()", return res;); return TEE_SUCCESS; } TEE_Result cmd_asym_prepare_enc_sign(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_Attribute *attrs = NULL; uint32_t attr_count = 0; uint32_t mode = 0; uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT); if (param_types != exp_param_types) return TEE_ERROR_BAD_PARAMETERS; mode = params[2].value.a; res = unpack_attrs(params[3].memref.buffer, params[3].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; if (mode == MODE_DECRYPT) res = TEE_AsymmetricEncrypt(crypto_op_enc_sign, NULL, 0, params[0].memref.buffer, params[0].memref.size, params[1].memref.buffer, ¶ms[1].memref.size); else res = TEE_AsymmetricSignDigest(crypto_op_enc_sign, attrs, attr_count, params[0].memref.buffer, params[0].memref.size, params[1].memref.buffer, ¶ms[1].memref.size); TEE_Free(attrs); if (mode == MODE_DECRYPT) CHECK(res, "TEE_AsymmetricEncrypt", return res;); else CHECK(res, "TEE_AsymmetricSignDigest", return res;); return TEE_SUCCESS; } void cmd_clean_obj(void) { if (crypto_obj) TEE_FreeTransientObject(crypto_obj); crypto_obj = TEE_HANDLE_NULL; } void cmd_clean_res(void) { if (crypto_op) TEE_FreeOperation(crypto_op); if (crypto_op_enc_sign) { TEE_FreeOperation(crypto_op_enc_sign); crypto_op_enc_sign = NULL; } } optee_test-4.3.0/ta/crypto_perf/ta_entry.c000066400000000000000000000050021464074351400206270ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited */ #include #include #include "ta_crypto_perf.h" #include "ta_crypto_perf_priv.h" /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[4], void **ppSessionContext) { (void)nParamTypes; (void)pParams; (void)ppSessionContext; return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext) { (void)pSessionContext; cmd_clean_res(); cmd_clean_obj(); } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { (void)pSessionContext; switch (nCommandID) { case TA_CRYPTO_PERF_CMD_CIPHER_PREPARE_KEY: return cmd_cipher_prepare_key(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_CIPHER_PROCESS: return cmd_cipher_process(nParamTypes, pParams, false); case TA_CRYPTO_PERF_CMD_CIPHER_PROCESS_SDP: #ifdef CFG_SECURE_DATA_PATH return cmd_cipher_process(nParamTypes, pParams, true); #else EMSG("Invalid SDP commands: TA was built without SDP support"); return TEE_ERROR_NOT_SUPPORTED; #endif case TA_CRYPTO_PERF_CMD_HASH_PREPARE_OP: return cmd_hash_prepare_op(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_HASH_PROCESS: return cmd_hash_process(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_ASYM_PROCESS_GEN_KEYPAIR: return cmd_asym_process_keypair(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_ASYM_PREPARE_ATTRS: return cmd_asym_prepare_attrs(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_ASYM_PROCESS: return cmd_asym_process_rsa_ecc(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_ASYM_PREPARE_KEYPAIR: return cmd_asym_prepare_keypair(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_ASYM_PREPARE_HASH: return cmd_asym_prepare_hash(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_ASYM_PREPARE_OBJ: return cmd_asym_prepare_obj(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_ASYM_PREPARE_ENC_SIGN: return cmd_asym_prepare_enc_sign(nParamTypes, pParams); case TA_CRYPTO_PERF_CMD_ASYM_FREE_ATTRS: return cmd_asym_free_attrs(nParamTypes, pParams); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/enc_fs/000077500000000000000000000000001464074351400155425ustar00rootroot00000000000000optee_test-4.3.0/ta/enc_fs/include/000077500000000000000000000000001464074351400171655ustar00rootroot00000000000000optee_test-4.3.0/ta/enc_fs/include/enc_fs_key_manager_test.h000066400000000000000000000010211464074351400241660ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, Linaro Limited * All rights reserved. */ #ifndef ENC_FS_KEY_MANAGER_TEST_H #define ENC_FS_KEY_MANAGER_TEST_H /* This UUID is generated with uuidgen the ITU-T UUID generator at http://www.itu.int/ITU-T/asn1/uuid.html */ #define ENC_FS_KEY_MANAGER_TEST_UUID \ { 0x17E5E280, 0xD12E, 0x11E4, \ { 0xA4, 0x1A, 0x00, 0x02, 0xA5, 0xD5, 0xC5, 0x1B } } /* The TAFs ID implemented in this TA */ #define CMD_SELF_TESTS 0 #endif /*ENC_FS_KEY_MANAGER_TEST_H*/ optee_test-4.3.0/ta/identity_subkey2.bin000066400000000000000000000011641464074351400202760ustar00rootroot00000000000000HSTO@0IAp '"nJ? jݲsK3QXG\ED_svc[EM5\o-m;[q9w}{ʿDg45Ij N:q'za DboٸAF cVlx4CD/>}F?k`iJ'вi4H8`8)D 519Zt 'e!vBJE󌣧 ̻QA}.D]GJz0IAp0<0=rr$ 9p8;K5_3CgE޲ (Įx JݳiX/+dDb[Yi#wr k D%FX: ZƃyɈQl}'mfaj9OeFJc؏v邒.ާP=:9ƲVkGŤ91G^! ,%DoO]KI mXB<4Ġښ̥D^ն}0f{qū.Z optee_test-4.3.0/ta/identity_subkey2.pem000066400000000000000000000032501464074351400203050ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC763IBu3IGr6Ik EQ05B3A48R2WO9RLNV8TM6hDgGdF9h4CBN6yDbYoxK54hqz1vKKIiAuWxsdKEt2z ac3kWC/91fH7pSsTZERiW8NZHGm0I3fecp8N+85rlQUKBa1Ejbaa3yWm3UZYOg2r jFrGg3nJiFEI2ORsfYongfvAbWZh22rjD9fSOaBPZQTXRpNKt+qbYxXYj/l26YKS yi7lgd6nGqqQklDXPToFOZqXxrKGVmtH7YPFpOs5MbVHxV7nESELLAMlRG/w00+l ytj9l11LSYQM5W1Y7xxCPKc0jZ7oEMSg2dqazKXQRLmnXqYFzxzVtn0wsmb6e3HF qy5ak6QNAgMBAAECggEARD5k0Kw55KOzxlVK8AL7hjJKBF0F46omNNr1qE3hM08F 5sXN+etw061ZjvuZpEQ04lBFpSPbC9N+H8G0u9Aq3YvsrO52jjxDeVTJxHrFCF45 EdeeW32uoPMlOVaGbfbo8aVIDykcer3aaQo3jRACEmYmx4e8rImKun5B5sfT/oUI 6Jp8i5zRF2M+yqczmqRbonqoRVa9WWyGT8pxfm5uaYg7/BFE9p6XfwTE8Y1qYyxI r19uGIqnS5mR3E2qPyizs4DkabMWmKNflOr0Y28h7TgEqwTcJaSM7wDrSlQnCNF4 FGdKOY/omRHtxx2z9bd9XQ0fjZmloxIBLO3fX4pUIQKBgQDnq7x87j/aFk8HlAi6 KzmtxPTu/bwxiLvcNDtDz6l7K1+icl1kuQ6zQP827u7IS/l2MRbkred70Dt5OGOs XWysCQZM9kl8Cq7uXJ7vnu9xT+2R5v7sqaqgVAY8hxW4zFtGrrfT8sZgRWTXILBR UlsWfy2EwqAwNA7FB0AdJMVWdwKBgQDPp3+zoQOIkM+ImdR0gp+kzI2H1WqvO25y 3WNy8xTqfy/qNlST6tuCDzfZ6S8KqaP+V+QomgMjRjAsggGCNiRMFtYHpTgLm9wC XnwYtv3qIMUqTmnpH3hCPQ7PEEKedfht9p1D1DtBZsrQncqFtoORFqisawvlwDuU kzstSlqGmwKBgExhQ5CQ4D5f0oh2FvaCH88Zu4M75psSMJWmJs/xnDf+kdY2DHKT zLPuvvX2ioVA/ysnfhvA9ivM+H67x6jhWF3Tz9756DpcL1Zo9QGdjeX26yWKWgve 2GFpsnCsPM4jmghQvEzFov/EgT2oClmVZHCjV3eIz1V1JFVzUYEKSYF7AoGAXR9S h223tfCrASlrO2ywxyjsd3PfygGvAFgEFzKnuJmdFT2UJFl4YxUMCO8np3J4FsG3 kfWvXoxFYlBS+N/q2yyKgxc20Q3uVimlITg/GlXj1Zsgp+jy91GGaJl0Jrfk1vt3 f0mX4TaF0ZRRlDFLQy+UKO5AgaH5liGIskDb4+0CgYBQJgTr44ymDm7bBvtOtNhn DLUPV1DtllwlCE8SJDuK26xyru63+/jzHTR0ofRod4uzHVhLNkVnYvtB1qxqXuLw 9eNkxZoIFmTrtaE8YSCqloGPMCPzKtsj1XwwzxJL09bnP7/2hhI+B21Z1bx38ChE WDZvUMeBvqiaIph64XI8yQ== -----END PRIVATE KEY----- optee_test-4.3.0/ta/include/000077500000000000000000000000001464074351400157305ustar00rootroot00000000000000optee_test-4.3.0/ta/include/ta_storage.h000066400000000000000000000032061464074351400202320ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #ifndef __TA_STORAGE_H #define __TA_STORAGE_H #define TA_STORAGE_UUID { 0xb689f2a7, 0x8adf, 0x477a, \ { 0x9f, 0x99, 0x32, 0xe9, 0x0c, 0x0a, 0xd0, 0xa2 } } #define TA_STORAGE2_UUID { 0x731e279e, 0xaafb, 0x4575, \ { 0xa7, 0x71, 0x38, 0xca, 0xa6, 0xf0, 0xcc, 0xa6 } } struct ta_storage_obj_info { uint32_t object_type; uint32_t object_size; uint32_t max_object_size; uint32_t object_usage; uint32_t data_size; uint32_t data_position; uint32_t handle_flags; }; #define TA_STORAGE_CMD_OPEN 0 #define TA_STORAGE_CMD_CLOSE 1 #define TA_STORAGE_CMD_READ 2 #define TA_STORAGE_CMD_WRITE 3 #define TA_STORAGE_CMD_CREATE 4 #define TA_STORAGE_CMD_SEEK 5 #define TA_STORAGE_CMD_UNLINK 6 #define TA_STORAGE_CMD_RENAME 7 #define TA_STORAGE_CMD_TRUNC 8 #define TA_STORAGE_CMD_ALLOC_ENUM 9 #define TA_STORAGE_CMD_FREE_ENUM 10 #define TA_STORAGE_CMD_RESET_ENUM 11 #define TA_STORAGE_CMD_START_ENUM 12 #define TA_STORAGE_CMD_NEXT_ENUM 13 #define TA_STORAGE_CMD_CREATE_OVERWRITE 14 #define TA_STORAGE_CMD_KEY_IN_PERSISTENT 15 #define TA_STORAGE_CMD_LOOP 16 #define TA_STORAGE_CMD_RESTRICT_USAGE 17 #define TA_STORAGE_CMD_ALLOC_OBJ 18 #define TA_STORAGE_CMD_FREE_OBJ 19 #define TA_STORAGE_CMD_RESET_OBJ 20 #define TA_STORAGE_CMD_GET_OBJ_INFO 21 #define TA_STORAGE_CMD_OPEN_ID_IN_SHM 22 #define TA_STORAGE_CMD_CREATE_ID_IN_SHM 23 #define TA_STORAGE_CMD_CREATEOVER_ID_IN_SHM 24 #define TA_STORAGE_CMD_RENAME_ID_IN_SHM 25 #define TA_STORAGE_CMD_CLEAR_STORAGE 26 #endif /*__TA_STORAGE_H*/ optee_test-4.3.0/ta/large/000077500000000000000000000000001464074351400153775ustar00rootroot00000000000000optee_test-4.3.0/ta/large/Android.mk000066400000000000000000000001611464074351400173060ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 25497083-a58a-4fc5-8a72-1ad7b69b8562.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/large/Makefile000066400000000000000000000001071464074351400170350ustar00rootroot00000000000000BINARY = 25497083-a58a-4fc5-8a72-1ad7b69b8562 include ../ta_common.mk optee_test-4.3.0/ta/large/include/000077500000000000000000000000001464074351400170225ustar00rootroot00000000000000optee_test-4.3.0/ta/large/include/ta_large.h000066400000000000000000000004051464074351400207500ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited */ #ifndef TA_LARGE_H #define TA_LARGE_H #define TA_LARGE_UUID { 0x25497083, 0xa58a, 0x4fc5, \ { 0x8a, 0x72, 0x1a, 0xd7, 0xb6, 0x9b, 0x85, 0x62 } } #endif /*TA_LARGE_H */ optee_test-4.3.0/ta/large/include/user_ta_header_defines.h000066400000000000000000000005761464074351400236520ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #include #define TA_UUID TA_LARGE_UUID #define TA_FLAGS (TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (2 * 1024) #endif /*USER_TA_HEADER_DEFINES_H*/ optee_test-4.3.0/ta/large/sub.mk000066400000000000000000000000611464074351400165160ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c optee_test-4.3.0/ta/large/ta_entry.c000066400000000000000000000026341464074351400173750ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2021, Linaro Limited */ #include #include /* * Declare a large buffer likely to span mutiple translation tables. * * Ideally we'd like to have one that is slightly larger than 2MiB since * that would guarantee this. But that would consume yet another static * translation table (MAX_XLAT_TABLES) which would typically only be needed * when loading this TA but would cause a permanent increase in the OP-TEE * memory footprint. * * So we settle with this size, it should quite often be enough if * configured with CFG_TA_ASLR=y. It will be 100% effective with * CFG_WITH_LPAE=n. */ static const uint8_t large_buffer[1024 * 1024 ] = { 1 }; TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } void TA_DestroyEntryPoint(void) { } TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types, TEE_Param params[4], void **session_ctx) { (void)param_types; (void)params; /* Don't let the linker garbage collect this symbol. */ *session_ctx = (void *)large_buffer; return TEE_SUCCESS; } void TA_CloseSessionEntryPoint(void *session_ctx) { (void)session_ctx; } TEE_Result TA_InvokeCommandEntryPoint(void *session_ctx, uint32_t cmd_id, uint32_t param_types, TEE_Param params[4]) { (void)session_ctx; (void)cmd_id; (void)param_types; (void)params; return TEE_ERROR_GENERIC; } optee_test-4.3.0/ta/mid_level_subkey.bin000066400000000000000000000024501464074351400203220ustar00rootroot00000000000000HSTO@0IAp s)whlGN[^ކ6jMe7{QAe&alZ>Y9&4Vr_&,όqgA~x6F)0g= P3^+&QN`.ۙ{oh))2y_ؙ<SHj9gчERLts5Ē; Rj |dǟ&L7x[5">N;j9+gR/p,Tz= :akdjm?=U=o#qOE<7Ϻ @0IAp0<0=_ eQwbK9*l6_>Œ-xvvug#i嘎s=%e}>t.q/[T8+jbr'ƈ|5T Wϴ`À#upXN3d[9\lp8v1s rX(. (5\SKF9G7 N,80ju3V,J5D=q@_ҴO1 ETx rb3"B GZKw>7mid_level_subkeyHSTO@0IAp #:m,P A)}ol.7׽MMC~wY@7|kb ܇olENsUo|TOfI%B:Ly^?RS &o0wAX?~Vz?~**SsuG@ߵv5]~tliT:L'%>":,֛nTV$:5#ɶXYHQoj{@0IAp0<0=3ҙZ!6V!'L*H "Dh'-STt(\+D)_U' I5[`ncһ- bNz0G/yU/iyUTvErT-syhZ !\a6{>b~\yj*2 ]Hf5Ğܷߠ)G:6'V`L1CO[9h optee_test-4.3.0/ta/mid_level_subkey.pem000066400000000000000000000032501464074351400203320ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCl1sCRM+jO0pnx 71oh6TZWIc0B3tHd0Sf3ncAGTPe7nuTzkCoGSKAL2O0i3URoJy1TkJFUAnTt5Shc K0SrKQekEK20619VJyD/STVbYJlu9K1j0hOf0rsthAlig/eYBk6Der0wyRqoR/Mv eVUv6B+hs+rHy9RpeZmNuf2GVVTcdkWw/hJyw1Tt7u+f7uYG2x2wEp7AmaHaLXN5 aFogoCEa6lwSYa42e4DpCB0+Yn6Rl6HY5tB//4TgXLUOeY8cGmoAF6QqEfuSFDLs C/NdzAdIZqWzmDXEnt/ct9+g1PspuMgdgYztvIXQR7eHOjYnVoNgqkwH4zGZ8UPd T1s5aAnFAgMBAAECgf9hi4gWkz8d1dKizxRjvWWoTC03aFy37Z3n7ZK+QoNs0khf K/kqiEQtr7otnQDKUsL2+HmPI1ijykkp9bcO3cQk2yiOcOfZFABCaY5IIwm7WGTV UA8y1GWBq2dPmU/uzJopCSNXcEgG6HPnVieiuvSCqJhBxEtrji0nYrrbVzE/2Eo3 vVesMCiCNRCOKk48nL/mvg0I2cCC64HgEmPEPrtSw5onW9qffr0U3T9v+YIh03cU XZX50zb7WahO8zc8dElG7pYPBBLkNj+OJaf+uY8CLZtCXvZeMR0PStcclRY4jSNM gTdthynRwaUv8YvP/AvmO7di364Q5210IvJMhYECgYEAwDclFy+8lWoF5cvfW353 okUItN24kiiFFUYcPL59Cn47gYj2OpHfDHgAhIOwrQRUewTRe7FnHv3ZspbIA3Wo 3thcl/ktzjV5qJ+OGfx3oLhhKT3QE4yM8kAf0qsn+FgonTmzhmk7A4/moZeAVJKc K08ZO/NdhEseIPfM2LAktkECgYEA3N7mPLCCZqCODYml4raXv+XuiW1cpBSGPVsn 08Vq9EO0awJ2iw6ZCJWYizIiDMr2oVQmArdWMDANerrFzDUOrw7GktolyJ6fzssH td5F+uJX9h+nneuSvEyiJr7ujysfkRwxGrkaicUp9cVNT+UpHgtX1PCxodVartfy 0Z6i2oUCgYBjmW9/tz2p0nlh3KVNPJfzHoBnb+he294x6tVg6HfUgxqEgZrNOJ7y UBA8mhxnWrIH2LRPutorZfBzKMxVdpddeZFpMjX4/x6eMKcqcfbu8ftuqlfyeUbj lDSpLgUVG2FYLvkGceqhauRf4SgfKqT/kAoMVYukrGPdQ2oC8irjwQKBgQClsASR ZGv+JtVJbIfnocgGqaseps6HO+pT3qzq3T7VjHCskcVxnXrJiMdNLEeEx0DqVyDI itX6AiIqfi/hd6/TPMdT5JfRfsUtMPtQwDRI90C7HpX0DoMeBHLjk/mLpvLgPYDM pi01SpWmi+LqW2NT6XhzAjiOyWlknhTGkTVjrQKBgQCJVvrVYee7hlpBakLXxD2b IxKqN10sFvyYqRIzFpPN7gfYbAdMR+XXqeZNrELuUfu7tc+/owxEsD4/acU11Iw2 +20qRTXPXQPDpojBBZO6wjF2gDac1orASVLgs5ty5wq1GUdNJ08X5hdHEJBhjLFq c/T1OLxYSMmMqDQ1pqYsYA== -----END PRIVATE KEY----- optee_test-4.3.0/ta/miss/000077500000000000000000000000001464074351400152605ustar00rootroot00000000000000optee_test-4.3.0/ta/miss/Android.mk000066400000000000000000000001601464074351400171660ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 528938ce-fc59-11e8-8eb2-f2801f1b9fd1.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/miss/Makefile000066400000000000000000000001061464074351400167150ustar00rootroot00000000000000BINARY = 528938ce-fc59-11e8-8eb2-f2801f1b9fd1 include ../ta_common.mk optee_test-4.3.0/ta/miss/include/000077500000000000000000000000001464074351400167035ustar00rootroot00000000000000optee_test-4.3.0/ta/miss/include/ta_miss_test.h000066400000000000000000000005151464074351400215530ustar00rootroot00000000000000/* * Copyright (c) 2019, Mentor Graphics Corporation * * SPDX-License-Identifier: BSD-2-Clause */ #ifndef TA_MISS_TEST_H #define TA_MISS_TEST_H /* This UUID is generated with uuidgen */ #define TA_MISS_TEST_UUID { 0x528938ce, 0xfc59, 0x11e8, \ { 0x8e, 0xb2, 0xf2, 0x80, 0x1f, 0x1b, 0x9f, 0xd1 } } #endif /* TA_MISS_TEST_H */ optee_test-4.3.0/ta/miss/include/user_ta_header_defines.h000066400000000000000000000006051464074351400235240ustar00rootroot00000000000000/* * Copyright (c) 2019, Mentor Graphics Corporation * * SPDX-License-Identifier: BSD-2-Clause */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #define TA_NAME "MISS" #define TA_UUID TA_MISS_TEST_UUID #define TA_FLAGS (0UL) #define TA_STACK_SIZE (32 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/miss/sub.mk000066400000000000000000000002301464074351400163750ustar00rootroot00000000000000global-incdirs-y += include global-incdirs-y += ../sims/include global-incdirs-y += ../sims_keepalive/include srcs-y += ta_entry.c srcs-y += ta_miss.c optee_test-4.3.0/ta/miss/ta_entry.c000066400000000000000000000000361464074351400172500ustar00rootroot00000000000000#include "../sims/ta_entry.c" optee_test-4.3.0/ta/miss/ta_miss.c000066400000000000000000000000351464074351400170610ustar00rootroot00000000000000#include "../sims/ta_sims.c" optee_test-4.3.0/ta/os_test/000077500000000000000000000000001464074351400157655ustar00rootroot00000000000000optee_test-4.3.0/ta/os_test/Android.mk000066400000000000000000000002551464074351400177000ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 5b9e0e40-2636-11e1-ad9e-0002a5d5c51b.ta local_module_deps := ffd2bded-ab7d-4988-95ee-e4962fff7154.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/os_test/Makefile000066400000000000000000000006771464074351400174370ustar00rootroot00000000000000include $(TA_DEV_KIT_DIR)/mk/conf.mk BINARY = 5b9e0e40-2636-11e1-ad9e-0002a5d5c51b # Hack: to locate the os_test library, we assume that its output path # follows the same scheme as the output path of the os_test application. # Therefore, simply replacing os_test by os_test_lib in the absolute path # should get us a valid path LDADD = -L$(subst os_test,os_test_lib,$(abspath $(link-out-dir))) -los_test LDADD += -ldl include ../ta_common.mk optee_test-4.3.0/ta/os_test/attestation.c000066400000000000000000000013241464074351400204700ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2021, Huawei Technologies Co., Ltd */ #include #include #include #include "os_test.h" TEE_Result ta_entry_attestation(uint32_t param_types, TEE_Param params[4]) { TEE_TASessionHandle sess = TEE_HANDLE_NULL; TEE_UUID att_uuid = PTA_ATTESTATION_UUID; TEE_Result res = TEE_ERROR_GENERIC; uint32_t ret_orig = 0; res = TEE_OpenTASession(&att_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res) goto out; res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, PTA_ATTESTATION_HASH_TA_MEMORY, param_types, params, &ret_orig); out: TEE_CloseTASession(sess); return res; } optee_test-4.3.0/ta/os_test/cxx_tests.cpp000066400000000000000000000031441464074351400205170ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2020 Huawei Technologies Co., Ltd */ extern "C" { #include #include #include #include #include "cxx_tests.h" #include "os_test.h" }; class CtorTest { public: CtorTest() : val(1) {} int val; }; static CtorTest ctor_test; TEE_Result ta_entry_cxx_ctor_main(void) { if (ctor_test.val != 1) return TEE_ERROR_GENERIC; return TEE_SUCCESS; } TEE_Result ta_entry_cxx_ctor_shlib(void) { return os_test_shlib_cxx_ctor(); } TEE_Result ta_entry_cxx_ctor_shlib_dl(void) { TEE_Result res = TEE_ERROR_GENERIC; TEE_Result (*ctor_test_fn)(void); void *handle = NULL; handle = dlopen("b3091a65-9751-4784-abf7-0298a7cc35ba", RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE); if (!handle) return TEE_ERROR_GENERIC; ctor_test_fn = (TEE_Result (*)(void))dlsym(handle, "os_test_shlib_dl_cxx_ctor"); if (ctor_test_fn) res = ctor_test_fn(); dlclose(handle); return res; } class MyException { }; TEE_Result ta_entry_cxx_exc_main(void) { try { throw MyException(); } catch (MyException &e) { return TEE_SUCCESS; } return TEE_ERROR_GENERIC; } class MixedFrameException { }; void throw_mfe(void) { throw MixedFrameException(); } class MixedFrameExceptionTest { public: MixedFrameExceptionTest() {} bool test(); }; bool MixedFrameExceptionTest::test() { try { throwing_c_func(); } catch (MixedFrameException e) { return true; } return false; } TEE_Result ta_entry_cxx_exc_mixed(void) { MixedFrameExceptionTest test; if (test.test()) return TEE_SUCCESS; return TEE_ERROR_GENERIC; } optee_test-4.3.0/ta/os_test/cxx_tests.h000066400000000000000000000003341464074351400201620ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2020 Huawei Technologies Co., Ltd */ #ifndef CXX_TESTS_H #define CXX_TESTS_H void throw_mfe(void); void throwing_c_func(void); #endif /* CXX_TESTS_H */ optee_test-4.3.0/ta/os_test/cxx_tests_c.c000066400000000000000000000002511464074351400204550ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2020 Huawei Technologies Co., Ltd */ #include "cxx_tests.h" void throwing_c_func(void) { throw_mfe(); } optee_test-4.3.0/ta/os_test/include/000077500000000000000000000000001464074351400174105ustar00rootroot00000000000000optee_test-4.3.0/ta/os_test/include/init.h000066400000000000000000000004131464074351400205220ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef INIT_H #define INIT_H #include TEE_Result ta_entry_init(uint32_t param_types, TEE_Param params[4]); #endif optee_test-4.3.0/ta/os_test/include/os_test.h000066400000000000000000000044471464074351400212520ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef OS_TEST_H #define OS_TEST_H #include TEE_Result ta_entry_basic(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_client_with_timeout(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_panic(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_client(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_params_access_rights(uint32_t p_types, TEE_Param params[4]); TEE_Result ta_entry_wait(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_bad_mem_access(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_ta2ta_memref(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_ta2ta_memref_mix(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_ta2ta_memref_size0(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_params(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_null_memref(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_call_lib(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_call_lib_panic(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_call_lib_dl(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_call_lib_dl_panic(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_get_global_var(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_client_identity(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_tls_test_main(void); TEE_Result ta_entry_tls_test_shlib(void); TEE_Result ta_entry_dl_phdr(void); TEE_Result ta_entry_dl_phdr_dl(void); TEE_Result ta_entry_cxx_ctor_main(void); TEE_Result ta_entry_cxx_ctor_shlib(void); TEE_Result ta_entry_cxx_ctor_shlib_dl(void); TEE_Result ta_entry_cxx_exc_main(void); TEE_Result ta_entry_cxx_exc_mixed(void); TEE_Result ta_entry_pauth_test_nop(void); TEE_Result ta_entry_pauth_corrupt_pac(void); TEE_Result ta_entry_attestation(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_entry_memtag_use_after_free(void); TEE_Result ta_entry_memtag_invalid_tag(void); TEE_Result ta_entry_memtag_double_free(void); TEE_Result ta_entry_memtag_buffer_overrun(void); #endif /*OS_TEST_H */ optee_test-4.3.0/ta/os_test/include/ta_os_test.h000066400000000000000000000040161464074351400217260ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TA_OS_TEST_H #define TA_OS_TEST_H /* This UUID is generated with the ITU-T UUID generator at http://www.itu.int/ITU-T/asn1/uuid.html */ #define TA_OS_TEST_UUID { 0x5b9e0e40, 0x2636, 0x11e1, \ { 0xad, 0x9e, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } } #define TA_OS_TEST_CMD_INIT 0 #define TA_OS_TEST_CMD_CLIENT_WITH_TIMEOUT 1 #define TA_OS_TEST_CMD_BASIC 5 #define TA_OS_TEST_CMD_PANIC 6 #define TA_OS_TEST_CMD_CLIENT 7 #define TA_OS_TEST_CMD_PARAMS_ACCESS 8 #define TA_OS_TEST_CMD_WAIT 9 #define TA_OS_TEST_CMD_BAD_MEM_ACCESS 10 #define TA_OS_TEST_CMD_TA2TA_MEMREF 11 #define TA_OS_TEST_CMD_TA2TA_MEMREF_MIX 12 #define TA_OS_TEST_CMD_PARAMS 13 #define TA_OS_TEST_CMD_CALL_LIB 14 #define TA_OS_TEST_CMD_CALL_LIB_PANIC 15 #define TA_OS_TEST_CMD_CALL_LIB_DL 16 #define TA_OS_TEST_CMD_CALL_LIB_DL_PANIC 17 #define TA_OS_TEST_CMD_GET_GLOBAL_VAR 18 #define TA_OS_TEST_CMD_NULL_MEMREF_PARAMS 19 #define TA_OS_TEST_CMD_CLIENT_IDENTITY 20 #define TA_OS_TEST_CMD_TLS_TEST_MAIN 21 #define TA_OS_TEST_CMD_TLS_TEST_SHLIB 22 #define TA_OS_TEST_CMD_DL_PHDR 23 #define TA_OS_TEST_CMD_DL_PHDR_DL 24 #define TA_OS_TEST_CMD_CXX_CTOR_MAIN 25 #define TA_OS_TEST_CMD_CXX_CTOR_SHLIB 26 #define TA_OS_TEST_CMD_CXX_CTOR_SHLIB_DL 27 #define TA_OS_TEST_CMD_CXX_EXC_MAIN 28 #define TA_OS_TEST_CMD_CXX_EXC_MIXED 29 #define TA_OS_TEST_CMD_PAUTH_NOP 30 #define TA_OS_TEST_CMD_PAUTH_CORRUPT_PAC 31 #define TA_OS_TEST_CMD_ATTESTATION 32 #define TA_OS_TEST_CMD_MEMTAG_USE_AFTER_FREE 33 #define TA_OS_TEST_CMD_MEMTAG_INVALID_TAG 34 #define TA_OS_TEST_CMD_MEMTAG_DOUBLE_FREE 35 #define TA_OS_TEST_CMD_MEMTAG_BUFFER_OVERRUN 36 #define TA_OS_TEST_CMD_TA2TA_MEMREF_SIZE0 37 #endif /*TA_OS_TEST_H */ optee_test-4.3.0/ta/os_test/include/tb_asserts.h000066400000000000000000000143121464074351400217330ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TB_ASSERTS_H #define TB_ASSERTS_H #include #include "tb_macros.h" /* * TB_ASSERT_MSG general assert function with a message. */ #define TB_ASSERT_MSG(cond, str) \ do { \ if (!(cond)) { \ EMSG("Assertion failed at line %d in file:\n%s", \ __LINE__, __FILE__); \ EMSG("Message: %s", str); \ HALT; \ }; \ } while (0) /* * TB_ASSERT general assert function. */ #define TB_ASSERT(cond) \ do { \ if (!(cond)) { \ EMSG("Assertion failed at line %d in file:\n%s", \ __LINE__, __FILE__); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_EQ_SHORT checks that src equals the short value. */ #define TB_ASSERT_EQ_SHORT(src, short) \ do { \ if (((short) == 0) && (__mpanum_size((mpanum)src) != 0)) { \ EMSG("Assertion failed at line %d in file:\n%s", \ __LINE__, __FILE__); \ EMSG("short == 0, but size != 0"); \ HALT; \ } else if (__mpanum_size((mpanum)src) > 1) { \ EMSG("Assertion failed at line %d in file:\n%s", \ __LINE__, __FILE__); \ EMSG("size > 1, cannot be equal to a short."); \ HALT; \ } else if ( \ (int)(__mpanum_lsw((mpanum)src)*__mpanum_sign((mpanum)src)) != \ (int)(short)) { \ EMSG("Assertion failed at line %d in file:\n%s", \ __LINE__, __FILE__); \ EMSG("short == %d, but src == %d", (short), \ (int)(__mpanum_lsw((mpanum)src) \ *__mpanum_sign((mpanum)src))); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_STR_EQ checks that the two strings a and b are equal. */ #define TB_ASSERT_STR_EQ(a, b) \ do { \ if (my_strcmp((a), (b)) != 0) { \ EMSG("Assertion failed %s != %s", (a), (b)); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_POINTER_NULL(p) checks that p is null */ #define TB_ASSERT_POINTER_NULL(p) \ do { \ if ((p) != 0) { \ EMSG("Assertion failed, pointer was not null."); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_POINTERS_EQ checks that p, q are pointing to the same element */ #define TB_ASSERT_POINTERS_EQ(p, q) \ do { \ if ((p) != (q)) { \ EMSG("Assertion failed, pointers are not equal."); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_POINTERS_NEQ checks that p, q are not pointing to the same element */ #define TB_ASSERT_POINTERS_NEQ(p, q) \ do { \ if ((p) == (q)) { \ EMSG("Assertion failed, pointers are equal."); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_BIGINT_EQ Checks that a and b are equal */ #define TB_ASSERT_BIGINT_EQ(a, b) \ do { \ if (TEE_BigIntCmp((a), (b)) != 0) { \ EMSG("Assertion failed, numbers are not equal."); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_BIGINT_NEQ Checks that a and b are different */ #define TB_ASSERT_BIGINT_NEQ(a, b) \ do { \ if (TEE_BigIntCmp((a), (b)) == 0) { \ EMSG("Assertion failed, numbers are equal."); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_BIGINT_LESS Checks that a < b */ #define TB_ASSERT_BIGINT_LESS(a, b) \ do { \ if (TEE_BigIntCmp((a), (b)) >= 0) { \ EMSG("Assertion failed, first is not less than second."); \ HALT; \ }; \ } while (0) /* * TB_ASSERT_INT_EQ Checks that a and be are equal */ #define TB_ASSERT_INT_EQ(a, b) \ do { \ if ((a) != (b)) { \ EMSG("Assertion failed, numbers are not equal."); \ HALT; \ }; \ } while (0) #endif optee_test-4.3.0/ta/os_test/include/tb_macros.h000066400000000000000000000036611464074351400215400ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TB_MACROS_H #define TB_MACROS_H #include #define TB_HEADER(str) \ MSG("\n*********** TESTBENCH ***********" \ "\n*** RUNNING: <<< %s >>>" \ "\n*********************************", str) #define TB_FOOTER(str) \ MSG("\n*********** TESTBENCH ***********" \ "\n*** PASSED: <<< %s >>>" \ "\n*********************************", str) #define TB_INFO(str) MSG("*** INFO : %s \n", (str)) #define HALT \ { \ EMSG("\n*** FAILED ***" \ "\nTestbench halted at line %d in function %s"; \ MSG("\nWaiting for keypress to enable debugging."); \ TEE_Panic(0); \ } #define STARTING \ MSG("\n*********** TESTBENCH ***********" \ "\n*** For the GlobalPlatform Math API" \ "\n*********************************") #define ALL_PASSED \ MSG("\n*********** TESTBENCH ***********" \ "\n*** ALL TESTS PASSED ***" \ "\n*********************************") /* * DEF_BIGINT defines and initialize a BigInt with name and size. */ #define DEF_BIGINT(name, size) \ TEE_BigInt *name; \ size_t name##_size; \ \ name##_size = TEE_BigIntSizeInU32(size); \ name = (TEE_BigInt *)TEE_Malloc(name##_size * sizeof(TEE_BigInt), 0); \ TEE_BigIntInit(name, name##_size) /* * DEL_BIGINT frees the BigInt. */ #define DEL_BIGINT(name) TEE_Free(name) #endif optee_test-4.3.0/ta/os_test/include/testframework.h000066400000000000000000000022301464074351400224530ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef GUARD_testframework_H #define GUARD_testframework_H #include "tee_internal_api.h" #include "tee_arith_internal.h" #include "tb_macros.h" #include "tb_asserts.h" /* define the max size of generated numbers */ /* this is number of hex chars in the number */ #define MAX_RAND_DIGITS 256 #define MAX_RAND_STRING_SIZE (MAX_RAND_DIGITS + 2) size_t my_strlen(const char *string); int my_strcmp(const char *s1, const char *s2); size_t my_strlcpy(char *dst, const char *src, size_t siz); void tb_set_random_value(TEE_BigInt *a, char *str, int allow_neg); void tb_get_random_str(char *str, int allow_neg); void tb_main(void); void tb_var(void); void tb_conv(void); void tb_cmp(void); void tb_addsub(void); void tb_mul(void); void tb_shift(void); void tb_div(void); void tb_gcd(void); void tb_modulus(void); void tb_fmm(void); void tb_prime(void); int TEE_BigIntConvertFromString(TEE_BigInt *dest, const char *src); char *TEE_BigIntConvertToString(char *dest, int mode, const TEE_BigInt *src); #endif /* include guard */ optee_test-4.3.0/ta/os_test/include/user_ta_header_defines.h000066400000000000000000000032651464074351400242360ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #include #include #define TA_UUID TA_OS_TEST_UUID #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR | \ TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (8 * 1024) #define TA_DATA_SIZE (900 * 1024) #define TA_CURRENT_TA_EXT_PROPERTIES \ { "myprop.true", USER_TA_PROP_TYPE_BOOL, &(const bool){ true } }, \ { "myprop.42", USER_TA_PROP_TYPE_U32, &(const uint32_t){ 42 } }, \ { "myprop.123", USER_TA_PROP_TYPE_UUID, \ &(const TEE_UUID) {1, 2, 3 } }, \ { "myprop.1234", USER_TA_PROP_TYPE_IDENTITY, \ &(const TEE_Identity) { 1, { 2, 3, 4 } } }, \ { "myprop.hello", USER_TA_PROP_TYPE_STRING, \ "hello property, larger than 80 characters, so that it checks that it is not truncated by anything in the source code which may be wrong" }, \ { "myprop.binaryblock", USER_TA_PROP_TYPE_BINARY_BLOCK, \ "SGVsbG8gd29ybGQh" }, \ { "myprop.binaryblock.1byte-ones", USER_TA_PROP_TYPE_BINARY_BLOCK, \ "/w==" }, \ { "myprop.binaryblock.2byte-ones", USER_TA_PROP_TYPE_BINARY_BLOCK, \ "//8=" }, \ { "myprop.binaryblock.3byte-ones", USER_TA_PROP_TYPE_BINARY_BLOCK, \ "////" }, \ { "myprop.binaryblock.4byte-ones", USER_TA_PROP_TYPE_BINARY_BLOCK, \ "/////w==" }, \ { "myprop.binaryblock.empty1", USER_TA_PROP_TYPE_BINARY_BLOCK, \ "" }, \ { "myprop.binaryblock.empty2", USER_TA_PROP_TYPE_BINARY_BLOCK, \ "====" }, \ { "myprop.binaryblock.empty3", USER_TA_PROP_TYPE_BINARY_BLOCK, \ "-%@&" /* Only invalid code */}, #endif optee_test-4.3.0/ta/os_test/init.c000066400000000000000000000005451464074351400171000ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include #include TEE_Result ta_entry_init(uint32_t param_types, TEE_Param params[4]) { TEE_Time date; (void)param_types; (void)params; return TEE_GetTAPersistentTime(&date); } optee_test-4.3.0/ta/os_test/os_test.c000066400000000000000000001213531464074351400176160ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. * Copyright (c) 2022, Linaro Limited. */ #include #include #include #include #include #include #include #include #include #include #include "os_test.h" #include "test_float_subj.h" #include "os_test_lib.h" #define STATS_UUID \ { 0xd96a5b40, 0xe2c7, 0xb1af, \ { 0x87, 0x94, 0x10, 0x02, 0xa5, 0xd5, 0xc6, 0x1b } } #define STATS_CMD_PAGER_STATS 0 #define PAGER_PAGE_COUNT_THRESHOLD ((128 * 1024) / 4096) enum p_type { P_TYPE_BOOL, P_TYPE_INT, P_TYPE_UUID, P_TYPE_IDENTITY, P_TYPE_STRING, P_TYPE_BINARY_BLOCK, }; struct p_attr { const char *str; enum p_type type; bool retrieved; }; static TEE_Result check_returned_prop( int line __maybe_unused, char *prop_name __maybe_unused, TEE_Result return_res, TEE_Result expected_res, uint32_t return_len, uint32_t expected_len) { if (return_res != expected_res) { EMSG("From line %d (property name=%s): return_res=0x%x vs expected_res=0x%x", line, (prop_name ? prop_name : "unknown"), (unsigned int)return_res, (unsigned int)expected_res); return TEE_ERROR_GENERIC; } if (return_len != expected_len) { EMSG("From line %d (property name=%s): return_len=%u vs expected_res=%u", line, (prop_name ? prop_name : "unknown"), return_len, expected_len); return TEE_ERROR_GENERIC; } return TEE_SUCCESS; } static TEE_Result check_binprop_ones(size_t size, char *bbuf, size_t bblen) { char ones[4] = { 0xff, 0xff, 0xff, 0xff }; if (size > 4 || bblen != size) { EMSG("Size error (size=%zu, bblen=%zu)", size, bblen); return TEE_ERROR_GENERIC; } if (strncmp(bbuf, ones, bblen)) { EMSG("Unexpected content"); DHEXDUMP(bbuf, bblen); return TEE_ERROR_GENERIC; } return TEE_SUCCESS; } static TEE_Result get_binblock_property(TEE_PropSetHandle h, char *nbuf __unused, char **bbuf, size_t *bblen) { TEE_Result res = TEE_ERROR_GENERIC; size_t block_len = 0; *bbuf = NULL; *bblen = 0; res = TEE_GetPropertyAsBinaryBlock(h, NULL, *bbuf, &block_len); if (res == TEE_SUCCESS && !block_len) return TEE_SUCCESS; if (res != TEE_ERROR_SHORT_BUFFER) { EMSG("TEE_GetPropertyAsBinaryBlock() size query returned 0x%x", (unsigned int)res); return res ? res : TEE_ERROR_GENERIC; } *bbuf = TEE_Malloc(block_len, TEE_MALLOC_FILL_ZERO); if (!bbuf) return TEE_ERROR_OUT_OF_MEMORY; res = TEE_GetPropertyAsBinaryBlock(h, NULL, *bbuf, &block_len); if (res != TEE_SUCCESS) EMSG("TEE_GetPropertyAsBinaryBlock(\"%s\") returned 0x%x", nbuf, (unsigned int)res); else *bblen = block_len; return res; } static TEE_Result print_properties(TEE_PropSetHandle h, TEE_PropSetHandle prop_set, struct p_attr *p_attrs, size_t num_p_attrs) { TEE_Result res = TEE_ERROR_GENERIC; size_t n = 0; TEE_StartPropertyEnumerator(h, prop_set); while (true) { char nbuf[256] = { }; char nbuf_small[256] = { }; char vbuf[256] = { }; char vbuf2[256] = { }; size_t nblen = sizeof(nbuf); size_t nblen_small = 0; size_t vblen = sizeof(vbuf); size_t vblen2 = sizeof(vbuf2); char *bbuf = NULL; size_t bblen = 0; res = TEE_GetPropertyName(h, nbuf, &nblen); if (res != TEE_SUCCESS) { EMSG("TEE_GetPropertyName() returned %#"PRIx32, res); return res; } if (nblen != strlen(nbuf) + 1) { EMSG("Name has wrong size: %zu vs %zu", nblen, strlen(nbuf) + 1); return TEE_ERROR_GENERIC; } /* Get the property name with a very small buffer */ nblen_small = 2; res = TEE_GetPropertyName(h, nbuf_small, &nblen_small); res = check_returned_prop(__LINE__, nbuf, res, TEE_ERROR_SHORT_BUFFER, nblen_small, nblen); if (res != TEE_SUCCESS) return res; /* Get the property name with almost the correct buffer */ nblen_small = nblen - 1; res = TEE_GetPropertyName(h, nbuf_small, &nblen_small); res = check_returned_prop(__LINE__, nbuf, res, TEE_ERROR_SHORT_BUFFER, nblen_small, nblen); if (res != TEE_SUCCESS) return res; /* Get the property name with the exact buffer length */ nblen_small = nblen; res = TEE_GetPropertyName(h, nbuf_small, &nblen_small); res = check_returned_prop(__LINE__, nbuf, res, TEE_SUCCESS, nblen_small, nblen); if (res != TEE_SUCCESS) return res; /* Get the property value */ res = TEE_GetPropertyAsString(h, NULL, vbuf, &vblen); res = check_returned_prop(__LINE__, nbuf, res, TEE_SUCCESS, vblen, strlen(vbuf) + 1); if (res != TEE_SUCCESS) return res; res = TEE_GetPropertyAsString(prop_set, nbuf, vbuf2, &vblen2); res = check_returned_prop(__LINE__, nbuf, res, TEE_SUCCESS, vblen2, strlen(vbuf2) + 1); if (res != TEE_SUCCESS) return res; if (strcmp(vbuf, vbuf2) != 0) { EMSG("String of \"%s\" differs", nbuf); return TEE_ERROR_GENERIC; } /* Get the property with a very small buffer */ if (vblen > 1) { vblen2 = 1; res = TEE_GetPropertyAsString(prop_set, nbuf, vbuf2, &vblen2); res = check_returned_prop(__LINE__, nbuf, res, TEE_ERROR_SHORT_BUFFER, vblen2, vblen); if (res != TEE_SUCCESS) return res; } /* Get the property with almost the correct buffer */ vblen2 = vblen - 1; res = TEE_GetPropertyAsString(prop_set, nbuf, vbuf2, &vblen2); res = check_returned_prop(__LINE__, nbuf, res, TEE_ERROR_SHORT_BUFFER, vblen2, vblen); if (res != TEE_SUCCESS) return res; /* Get the property name with the exact buffer length */ vblen2 = vblen; res = TEE_GetPropertyAsString(prop_set, nbuf, vbuf2, &vblen2); res = check_returned_prop(__LINE__, nbuf, res, TEE_SUCCESS, vblen2, vblen); if (res != TEE_SUCCESS) return res; /* check specific myprop.hello property, which is larger than 80 */ if (!strcmp("myprop.hello", nbuf) && vblen2 != 1 + strlen("hello property, larger than 80 characters, so that it checks that it is not truncated by anything in the source code which may be wrong")) { EMSG("TEE_GetPropertyAsString(\"%s\") is truncated - returned \"%s\"", nbuf, vbuf); return TEE_ERROR_GENERIC; } DMSG("Found \"%s\" value \"%s\"", nbuf, vbuf); for (n = 0; n < num_p_attrs; n++) { if (strcmp(nbuf, p_attrs[n].str) != 0) continue; if (p_attrs[n].retrieved) { EMSG("Value \"%s\" already retrieved", p_attrs[n].str); return TEE_ERROR_GENERIC; } p_attrs[n].retrieved = true; switch (p_attrs[n].type) { case P_TYPE_BOOL: { bool v = false; res = TEE_GetPropertyAsBool(h, NULL, &v); if (res != TEE_SUCCESS) { EMSG("TEE_GetPropertyAsBool(\"%s\") returned %#"PRIx32, nbuf, res); return res; } } break; case P_TYPE_INT: { uint32_t v = 0; res = TEE_GetPropertyAsU32(h, NULL, &v); if (res != TEE_SUCCESS) { EMSG("TEE_GetPropertyAsU32(\"%s\") returned %#"PRIx32, nbuf, res); return res; } } break; case P_TYPE_UUID: { TEE_UUID v = { }; res = TEE_GetPropertyAsUUID(h, NULL, &v); if (res != TEE_SUCCESS) { EMSG("TEE_GetPropertyAsUUID(\"%s\") returned %#"PRIx32, nbuf, res); return res; } } break; case P_TYPE_IDENTITY: { TEE_Identity v = { }; res = TEE_GetPropertyAsIdentity(h, NULL, &v); if (res != TEE_SUCCESS) { EMSG("TEE_GetPropertyAsIdentity(\"%s\") returned %#"PRIx32, nbuf, res); return res; } } break; case P_TYPE_STRING: /* Already read as string */ break; case P_TYPE_BINARY_BLOCK: res = get_binblock_property(h, nbuf, &bbuf, &bblen); if (res) return res; if (!strcmp("myprop.binaryblock", nbuf)) { const char exp_bin_value[] = "Hello world!"; if (bblen != strlen(exp_bin_value) || TEE_MemCompare(exp_bin_value, bbuf, bblen)) { EMSG("Binary buffer of \"%s\" differs from \"%s\"", nbuf, exp_bin_value); EMSG("Got \"%s\"", bbuf); return TEE_ERROR_GENERIC; } } else if (!strcmp("myprop.binaryblock.1byte-ones", nbuf)) { res = check_binprop_ones(1, bbuf, bblen); if (res) return res; } else if (!strcmp("myprop.binaryblock.2byte-ones", nbuf)) { res = check_binprop_ones(2, bbuf, bblen); if (res) return res; } else if (!strcmp("myprop.binaryblock.3byte-ones", nbuf)) { res = check_binprop_ones(3, bbuf, bblen); if (res) return res; } else if (!strcmp("myprop.binaryblock.4byte-ones", nbuf)) { res = check_binprop_ones(4, bbuf, bblen); if (res) return res; } else if (!strcmp("myprop.binaryblock.empty1", nbuf) || !strcmp("myprop.binaryblock.empty2", nbuf) || !strcmp("myprop.binaryblock.empty3", nbuf)) { if (bblen) { EMSG("Property \"%s\": %zu byte(s)", nbuf, bblen); return TEE_ERROR_GENERIC; } } else { EMSG("Unexpected property \"%s\"", nbuf); TEE_Panic(0); } TEE_Free(bbuf); break; default: EMSG("Unknown type (%d) for \"%s\"", p_attrs[n].type, p_attrs[n].str); return TEE_ERROR_GENERIC; } } res = TEE_GetNextProperty(h); if (res != TEE_SUCCESS) { if (res == TEE_ERROR_ITEM_NOT_FOUND) return TEE_SUCCESS; return res; } } } static TEE_Result test_malloc(void) { void *p = TEE_Malloc(4, 0); if (p == NULL) { EMSG("TEE_Malloc() failed"); return TEE_ERROR_OUT_OF_MEMORY; } TEE_Free(p); TEE_Free(NULL); return TEE_SUCCESS; } static TEE_Result test_properties(void) { TEE_Result res = TEE_ERROR_GENERIC; TEE_PropSetHandle h = TEE_HANDLE_NULL; struct p_attr p_attrs[] = { {"gpd.ta.appID", P_TYPE_UUID}, {"gpd.ta.singleInstance", P_TYPE_BOOL}, {"gpd.ta.multiSession", P_TYPE_BOOL}, {"gpd.ta.instanceKeepAlive", P_TYPE_BOOL}, {"gpd.ta.dataSize", P_TYPE_INT}, {"gpd.ta.stackSize", P_TYPE_INT}, {"gpd.ta.version", P_TYPE_STRING}, {"gpd.ta.description", P_TYPE_STRING}, {"gpd.client.identity", P_TYPE_IDENTITY}, {"gpd.tee.apiversion", P_TYPE_STRING}, {"gpd.tee.description", P_TYPE_STRING}, {"gpd.tee.deviceID", P_TYPE_UUID}, {"gpd.tee.systemTime.protectionLevel", P_TYPE_INT}, {"gpd.tee.TAPersistentTime.protectionLevel", P_TYPE_INT}, {"gpd.tee.arith.maxBigIntSize", P_TYPE_INT}, {"gpd.tee.cryptography.ecc", P_TYPE_BOOL}, {"gpd.tee.trustedStorage.antiRollback.protectionLevel", P_TYPE_INT}, {"gpd.tee.trustedos.implementation.version", P_TYPE_STRING}, {"gpd.tee.trustedos.implementation.binaryversion", P_TYPE_INT}, {"gpd.tee.trustedos.manufacturer", P_TYPE_STRING}, {"gpd.tee.firmware.implementation.version", P_TYPE_STRING}, {"gpd.tee.firmware.implementation.binaryversion", P_TYPE_INT}, {"gpd.tee.firmware.manufacturer", P_TYPE_STRING}, {"myprop.true", P_TYPE_BOOL}, {"myprop.42", P_TYPE_INT}, {"myprop.123", P_TYPE_UUID}, {"myprop.1234", P_TYPE_IDENTITY}, {"myprop.hello", P_TYPE_STRING}, {"myprop.binaryblock", P_TYPE_BINARY_BLOCK}, {"myprop.binaryblock.1byte-ones", P_TYPE_BINARY_BLOCK}, {"myprop.binaryblock.2byte-ones", P_TYPE_BINARY_BLOCK}, {"myprop.binaryblock.3byte-ones", P_TYPE_BINARY_BLOCK}, {"myprop.binaryblock.4byte-ones", P_TYPE_BINARY_BLOCK}, {"myprop.binaryblock.empty1", P_TYPE_BINARY_BLOCK}, {"myprop.binaryblock.empty2", P_TYPE_BINARY_BLOCK}, {"myprop.binaryblock.empty3", P_TYPE_BINARY_BLOCK}, }; const size_t num_p_attrs = sizeof(p_attrs) / sizeof(p_attrs[0]); size_t n = 0; res = TEE_AllocatePropertyEnumerator(&h); if (res != TEE_SUCCESS) { EMSG("TEE_AllocatePropertyEnumerator: returned %#"PRIx32, res); return TEE_ERROR_GENERIC; } MSG("Getting properties for current TA"); res = print_properties(h, TEE_PROPSET_CURRENT_TA, p_attrs, num_p_attrs); if (res != TEE_SUCCESS) goto cleanup_return; MSG("Getting properties for current client"); res = print_properties(h, TEE_PROPSET_CURRENT_CLIENT, p_attrs, num_p_attrs); if (res != TEE_SUCCESS) goto cleanup_return; MSG("Getting properties for implementation"); res = print_properties(h, TEE_PROPSET_TEE_IMPLEMENTATION, p_attrs, num_p_attrs); if (res != TEE_SUCCESS) goto cleanup_return; for (n = 0; n < num_p_attrs; n++) { if (!p_attrs[n].retrieved) { EMSG("\"%s\" not retrieved", p_attrs[n].str); res = TEE_ERROR_GENERIC; goto cleanup_return; } } cleanup_return: TEE_FreePropertyEnumerator(h); return res; } static TEE_Result test_mem_access_right(uint32_t param_types, TEE_Param params[4]) { static const TEE_UUID test_uuid = TA_OS_TEST_UUID; TEE_Result res = TEE_ERROR_GENERIC; uint32_t ret_orig = 0; uint32_t l_pts = 0; TEE_Param l_params[4] = { }; uint8_t buf[32] = { }; TEE_TASessionHandle sess = TEE_HANDLE_NULL; TEE_UUID *uuid = NULL; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, 0, 0, 0)) return TEE_ERROR_BAD_PARAMETERS; /* test access rights on memref parameter */ res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ | TEE_MEMORY_ACCESS_ANY_OWNER, params[0].memref.buffer, params[0].memref.size); if (res != TEE_SUCCESS) return res; res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ, params[0].memref.buffer, params[0].memref.size); if (res != TEE_ERROR_ACCESS_DENIED) return TEE_ERROR_GENERIC; /* test access rights on private read-only and read-write memory */ res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ, (void *)&test_uuid, sizeof(test_uuid)); if (res != TEE_SUCCESS) return res; res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_WRITE, (void *)&test_uuid, sizeof(test_uuid)); if (res == TEE_SUCCESS) return TEE_ERROR_GENERIC; res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ | TEE_MEMORY_ACCESS_WRITE, &ret_orig, sizeof(ret_orig)); if (res != TEE_SUCCESS) return res; uuid = TEE_Malloc(sizeof(*uuid), 0); if (!uuid) return TEE_ERROR_OUT_OF_MEMORY; res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ | TEE_MEMORY_ACCESS_WRITE, uuid, sizeof(*uuid)); TEE_Free(uuid); if (res != TEE_SUCCESS) return res; /* test access rights on invalid memory (at least lower 256kB) */ res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ, NULL, 1); if (res == TEE_SUCCESS) return TEE_ERROR_GENERIC; res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ, (void*)(256 * 1024), 1); if (res == TEE_SUCCESS) return TEE_ERROR_GENERIC; res = TEE_OpenTASession(&test_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_OpenTASession() failed: %#"PRIx32, res); return res; } l_pts = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, 0, 0); l_params[0].memref.buffer = buf; l_params[0].memref.size = sizeof(buf); l_params[1].memref.buffer = NULL; l_params[1].memref.size = 0; res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, TA_OS_TEST_CMD_PARAMS_ACCESS, l_pts, l_params, &ret_orig); if (res != TEE_SUCCESS) EMSG("TEE_InvokeTACommand() failed: %#"PRIx32, res); TEE_CloseTASession(sess); return res; } static TEE_Result test_time(void) { TEE_Result res = TEE_ERROR_GENERIC; TEE_Time t = { }; TEE_Time sys_t = { }; static const TEE_Time null_time = { 0, 0 }; static const TEE_Time wrap_time = { UINT32_MAX, 999 }; TEE_GetSystemTime(&sys_t); MSG("system time %"PRIu32".%03"PRIx32, sys_t.seconds, sys_t.millis); TEE_GetREETime(&t); MSG("REE time %"PRIu32".%03"PRIu32, t.seconds, t.millis); res = TEE_GetTAPersistentTime(&t); switch (res) { case TEE_SUCCESS: MSG("Stored TA time %"PRIu32".%03"PRIu32, t.seconds, t.millis); break; case TEE_ERROR_OVERFLOW: EMSG("Stored TA time overflowed %"PRIu32".%03"PRIu32, t.seconds, t.millis); break; case TEE_ERROR_TIME_NOT_SET: EMSG("TA time not stored"); break; case TEE_ERROR_TIME_NEEDS_RESET: EMSG("TA time needs reset"); break; default: return res; } res = TEE_SetTAPersistentTime(&null_time); if (res != TEE_SUCCESS) { EMSG("TEE_SetTAPersistentTime() failed%#"PRIx32, res); return res; } res = TEE_GetTAPersistentTime(&t); if (res != TEE_SUCCESS) { EMSG("TEE_GetTAPersistentTime() for null time: failed %#"PRIx32, res); return res; } MSG("TA time %"PRIu32".%03"PRIu32, t.seconds, t.millis); /* * The time between TEE_SetTAPersistentTime() and * TEE_GetTAPersistentTime() should be much less than 1 second, in fact * it's not even a millisecond. */ if (t.seconds > 1 || t.millis >= 1000) { EMSG("Unexpected stored TA time %"PRIu32".%03"PRIu32, t.seconds, t.millis); return TEE_ERROR_BAD_STATE; } res = TEE_SetTAPersistentTime(&wrap_time); if (res != TEE_SUCCESS) { EMSG("TEE_SetTAPersistentTime() wrap: failed %#"PRIx32, res); return res; } res = TEE_Wait(1000); if (res != TEE_SUCCESS) EMSG("TEE_Wait() wrap: failed %#"PRIx32, res); res = TEE_GetTAPersistentTime(&t); if (res != TEE_ERROR_OVERFLOW) { EMSG("TEE_GetTAPersistentTime(): failed %#"PRIx32, res); return TEE_ERROR_BAD_STATE; } MSG("TA time %"PRIu32".%03"PRIu32, t.seconds, t.millis); if (t.seconds > 1) { EMSG("Unexpected wrapped time %"PRIu32".%03"PRIu32, t.seconds, t.millis); return TEE_ERROR_BAD_STATE; } return TEE_SUCCESS; } #ifdef CFG_TA_FLOAT_SUPPORT static bool my_dcmpeq(double v1, double v2, double prec) { return v1 > (v2 - prec) && v1 < (v2 + prec); } static bool my_fcmpeq(float v1, float v2, float prec) { return v1 > (v2 - prec) && v1 < (v2 + prec); } static TEE_Result test_float(void) { #define VAL1 2.6 #define VAL1_INT 2 #define VAL2 5.3 #define DPREC 0.000000000000001 #define FPREC 0.000001 #define EXPECT(expr) do { \ if (!(expr)) { \ EMSG("Expression %s failed", #expr); \ return TEE_ERROR_GENERIC; \ } \ } while (0) IMSG("Testing floating point operations"); EXPECT(my_dcmpeq(test_float_dadd(VAL1, VAL2), VAL1 + VAL2, DPREC)); EXPECT(my_dcmpeq(test_float_ddiv(VAL1, VAL2), VAL1 / VAL2, DPREC)); EXPECT(my_dcmpeq(test_float_dmul(VAL1, VAL2), VAL1 * VAL2, DPREC)); EXPECT(my_dcmpeq(test_float_drsub(VAL1, VAL2), VAL2 - VAL1, DPREC)); EXPECT(my_dcmpeq(test_float_dsub(VAL1, VAL2), VAL1 - VAL2, DPREC)); EXPECT(test_float_dcmpeq(VAL1, VAL1) == 1); EXPECT(test_float_dcmplt(VAL1, VAL2) == 1); EXPECT(test_float_dcmple(VAL1, VAL1) == 1); EXPECT(test_float_dcmpge(VAL1, VAL1) == 1); EXPECT(test_float_dcmpgt(VAL2, VAL1) == 1); EXPECT(my_fcmpeq(test_float_fadd(VAL1, VAL2), VAL1 + VAL2, FPREC)); EXPECT(my_fcmpeq(test_float_fdiv(VAL1, VAL2), VAL1 / VAL2, FPREC)); EXPECT(my_fcmpeq(test_float_fmul(VAL1, VAL2), VAL1 * VAL2, FPREC)); EXPECT(my_fcmpeq(test_float_frsub(VAL1, VAL2), VAL2 - VAL1, FPREC)); EXPECT(my_fcmpeq(test_float_fsub(VAL1, VAL2), VAL1 - VAL2, FPREC)); EXPECT(test_float_fcmpeq(VAL1, VAL1) == 1); EXPECT(test_float_fcmplt(VAL1, VAL2) == 1); EXPECT(test_float_fcmple(VAL1, VAL1) == 1); EXPECT(test_float_fcmpge(VAL1, VAL1) == 1); EXPECT(test_float_fcmpgt(VAL2, VAL1) == 1); EXPECT(test_float_d2iz(VAL1) == VAL1_INT); EXPECT(test_float_d2uiz(VAL1) == VAL1_INT); EXPECT(test_float_d2lz(VAL1) == VAL1_INT); EXPECT(test_float_d2ulz(VAL1) == VAL1_INT); EXPECT(test_float_f2iz(VAL1) == VAL1_INT); EXPECT(test_float_f2uiz(VAL1) == VAL1_INT); EXPECT(test_float_f2lz(VAL1) == VAL1_INT); EXPECT(test_float_f2ulz(VAL1) == VAL1_INT); EXPECT(my_fcmpeq(test_float_d2f(VAL1), VAL1, FPREC)); EXPECT(my_dcmpeq(test_float_f2d(VAL1), VAL1, FPREC)); EXPECT(my_dcmpeq(test_float_i2d(VAL1_INT), VAL1_INT, DPREC)); EXPECT(my_dcmpeq(test_float_ui2d(VAL1_INT), VAL1_INT, DPREC)); EXPECT(my_dcmpeq(test_float_l2d(VAL1_INT), VAL1_INT, DPREC)); EXPECT(my_dcmpeq(test_float_ul2d(VAL1_INT), VAL1_INT, DPREC)); EXPECT(my_fcmpeq(test_float_i2f(VAL1_INT), VAL1_INT, FPREC)); EXPECT(my_fcmpeq(test_float_ui2f(VAL1_INT), VAL1_INT, FPREC)); EXPECT(my_fcmpeq(test_float_l2f(VAL1_INT), VAL1_INT, FPREC)); EXPECT(my_fcmpeq(test_float_ul2f(VAL1_INT), VAL1_INT, FPREC)); return TEE_SUCCESS; } #else /*CFG_TA_FLOAT_SUPPORT*/ static TEE_Result test_float(void) { IMSG("Floating point disabled"); return TEE_SUCCESS; } #endif /*CFG_TA_FLOAT_SUPPORT*/ #if defined(CFG_TA_BGET_TEST) /* From libutils */ int bget_main_test(void *(*malloc_func)(size_t), void (*free_func)(void *)); static void *malloc_wrapper(size_t size) { return tee_map_zi(size, 0); } static void free_wrapper(void *ptr __unused) { } static bool optee_pager_with_small_pool(void) { uint32_t ptypes = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE); static const TEE_UUID uuid = STATS_UUID; TEE_TASessionHandle sess = TEE_HANDLE_NULL; TEE_Result res = TEE_ERROR_GENERIC; TEE_Param params[4] = { }; uint32_t eo = 0; bool rc = false; res = TEE_OpenTASession(&uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &eo); if (res) return false; res = TEE_InvokeTACommand(sess, 0, STATS_CMD_PAGER_STATS, ptypes, params, &eo); if (res == TEE_SUCCESS && params[0].value.b && params[0].value.b <= PAGER_PAGE_COUNT_THRESHOLD) rc = true; TEE_CloseTASession(sess); return rc; } static TEE_Result test_bget(void) { if (optee_pager_with_small_pool()) { IMSG("Skip testing bget due to pager pool constraints"); return TEE_SUCCESS; } DMSG("Testing bget"); if (bget_main_test(malloc_wrapper, free_wrapper)) { EMSG("bget_main_test failed"); return TEE_ERROR_GENERIC; } DMSG("Bget OK"); return TEE_SUCCESS; } #else static TEE_Result test_bget(void) { IMSG("Bget test disabled"); return TEE_SUCCESS; } #endif static __noinline __noreturn void call_longjmp(jmp_buf env) { DMSG("Calling longjmp"); longjmp(env, 1); EMSG("error: longjmp returned to calling function"); } static TEE_Result test_setjmp(void) { jmp_buf env = { }; if (setjmp(env)) { IMSG("Returned via longjmp"); return TEE_SUCCESS; } else { call_longjmp(env); return TEE_ERROR_GENERIC; } } TEE_Result ta_entry_basic(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; MSG("enter"); res = test_malloc(); if (res != TEE_SUCCESS) return res; res = test_properties(); if (res != TEE_SUCCESS) return res; res = test_mem_access_right(param_types, params); if (res != TEE_SUCCESS) return res; res = test_time(); if (res != TEE_SUCCESS) return res; res = test_float(); if (res != TEE_SUCCESS) return res; res = test_setjmp(); if (res != TEE_SUCCESS) return res; res = test_bget(); if (res != TEE_SUCCESS) return res; return TEE_SUCCESS; } TEE_Result ta_entry_panic(uint32_t param_types, TEE_Param params[4]) { volatile bool mytrue = true; (void)param_types; (void)params; MSG("enter"); /* * Somewhat clumsy way of avoiding compile errors if TEE_Panic() has * the __noreturn attribute. */ if (mytrue) TEE_Panic(0xbeef); /* * Should not be reached, but if it is the testsuite can detect that * TEE_Panic() returned instead of panicking the TA. */ return TEE_SUCCESS; } TEE_Result ta_entry_client_with_timeout(uint32_t param_types, TEE_Param params[4]) { static const TEE_UUID os_test_uuid = TA_OS_TEST_UUID; TEE_Result res = TEE_ERROR_GENERIC; TEE_TASessionHandle sess = TEE_HANDLE_NULL; uint32_t ret_orig = 0; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { EMSG("bad parameters"); return TEE_ERROR_BAD_PARAMETERS; } res = TEE_OpenTASession(&os_test_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_OpenTASession() failed %#"PRIx32, res); return res; } res = TEE_InvokeTACommand(sess, params[0].value.a / 2, TA_OS_TEST_CMD_WAIT, param_types, params, &ret_orig); if (ret_orig != TEE_ORIGIN_TRUSTED_APP || res != TEE_ERROR_CANCEL) { EMSG("TEE_InvokeTACommand(): res %#"PRIx32" ret_orig %#"PRIx32, res, ret_orig); res = TEE_ERROR_GENERIC; } else res = TEE_SUCCESS; TEE_CloseTASession(sess); return res; } TEE_Result ta_entry_client(uint32_t param_types, TEE_Param params[4]) { static const TEE_UUID crypt_uuid = TA_CRYPT_UUID; TEE_Result res = TEE_ERROR_GENERIC; uint32_t l_pts = 0; TEE_Param l_params[4] = { }; TEE_TASessionHandle sess = TEE_HANDLE_NULL; uint32_t ret_orig = 0; static const uint8_t sha256_in[] = { 'a', 'b', 'c' }; static const uint8_t sha256_out[] = { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad }; uint8_t out[32] = { 0 }; void *in = NULL; (void)param_types; (void)params; DMSG("ta_entry_client: enter"); in = TEE_Malloc(sizeof(sha256_in), 0); if (in == NULL) return TEE_ERROR_OUT_OF_MEMORY; TEE_MemMove(in, sha256_in, sizeof(sha256_in)); res = TEE_OpenTASession(&crypt_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_OpenTASession() failed %#"PRIx32, res); goto cleanup_free; } l_pts = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, 0, 0); l_params[0].memref.buffer = in; l_params[0].memref.size = sizeof(sha256_in); l_params[1].memref.buffer = out; l_params[1].memref.size = sizeof(out); res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, TA_CRYPT_CMD_SHA256, l_pts, l_params, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_InvokeTACommand() failed %#"PRIx32, res); goto cleanup_close_session; } if (TEE_MemCompare(sha256_out, out, sizeof(sha256_out)) != 0) { EMSG("out parameter failed"); res = TEE_ERROR_GENERIC; goto cleanup_close_session; } cleanup_close_session: TEE_CloseTASession(sess); cleanup_free: TEE_Free(in); return res; } TEE_Result ta_entry_params_access_rights(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, 0, 0)) return TEE_ERROR_BAD_PARAMETERS; res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ | TEE_MEMORY_ACCESS_ANY_OWNER, params[0].memref.buffer, params[0].memref.size); if (res != TEE_SUCCESS) return res; res = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_READ, params[0].memref.buffer, params[0].memref.size); if (res != TEE_ERROR_ACCESS_DENIED) return TEE_ERROR_GENERIC; if (params[1].memref.buffer || params[1].memref.size) return TEE_ERROR_BAD_PARAMETERS; return TEE_SUCCESS; } TEE_Result ta_entry_wait(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_SUCCESS; (void)param_types; MSG("waiting %"PRId32, params[0].value.a); /* Wait */ res = TEE_Wait(params[0].value.a); return res; } static void undef_instr(void) { #if defined(ARM64) __asm__(".word 0x0"); #elif defined(ARM32) __asm__(".word 0xe7ffffff"); #elif defined(RV64) || defined(RV32) __asm__(".word 0x0"); #else #error "Unsupported architecture" #endif } TEE_Result ta_entry_bad_mem_access(uint32_t param_types, TEE_Param params[4]) { long int stack = 0; long int stack_addr = (long int)&stack; void (*volatile null_fn_ptr)(void) = NULL; char *zero_size_malloc = NULL; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, 0, 0, 0) && param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INOUT, 0, 0)) return TEE_ERROR_BAD_PARAMETERS; switch (params[0].value.a) { case 1: *((volatile uint32_t *)0) = 0; break; case 2: *((uint32_t *)(stack_addr + 0x40000000)) = 0; break; case 3: null_fn_ptr(); break; case 4: ((void (*)(void))(stack_addr + 0x40000000)) (); break; case 5: undef_instr(); break; case 6: zero_size_malloc = TEE_Malloc(0, 0); if (!zero_size_malloc) return TEE_ERROR_GENERIC; if (*zero_size_malloc) return TEE_ERROR_GENERIC; break; case 7: zero_size_malloc = TEE_Malloc(0, 0); if (!zero_size_malloc) return TEE_ERROR_GENERIC; *zero_size_malloc = 0; break; default: break; } return TEE_SUCCESS; } static void incr_values(size_t bufsize, uint8_t *a, uint8_t *b, uint8_t *c) { size_t i = 0; for (i = 0; i < bufsize; i++) { a[i]++; b[i]++; c[i]++; } } #define TA2TA_BUF_SIZE (2 * 1024) TEE_Result ta_entry_ta2ta_memref(uint32_t param_types, TEE_Param params[4]) { static const TEE_UUID test_uuid = TA_OS_TEST_UUID; TEE_TASessionHandle sess = TEE_HANDLE_NULL; TEE_Param l_params[4] = { }; uint8_t in[TA2TA_BUF_SIZE] = { }; uint8_t inout[TA2TA_BUF_SIZE] = { }; uint8_t out[TA2TA_BUF_SIZE] = { }; TEE_Result res = TEE_ERROR_GENERIC; uint32_t ret_orig = 0; uint32_t l_pts = 0; size_t i = 0; (void)params; if (param_types != TEE_PARAM_TYPES(0, 0, 0, 0)) return TEE_ERROR_BAD_PARAMETERS; res = TEE_OpenTASession(&test_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_OpenTASession failed"); return res; } l_pts = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, 0); l_params[0].memref.buffer = in; l_params[0].memref.size = TA2TA_BUF_SIZE; l_params[1].memref.buffer = inout; l_params[1].memref.size = TA2TA_BUF_SIZE; l_params[2].memref.buffer = out; l_params[2].memref.size = TA2TA_BUF_SIZE; /* Initialize buffers */ for (i = 0; i < TA2TA_BUF_SIZE; i++) { in[i] = 5; inout[i] = 10; out[i] = 0; } /* * TA will compute: out = ++inout + in * Expected values after this step: in: 5, inout: 11, out: 16 */ res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, TA_OS_TEST_CMD_TA2TA_MEMREF_MIX, l_pts, l_params, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_InvokeTACommand failed"); goto cleanup_return; } /* * Increment all values by one. * Expected values after this step: in: 6, inout: 12, out: 17 */ incr_values(TA2TA_BUF_SIZE, in, inout, out); /* * TA will compute: out = ++inout + in * Expected values after this step: in: 6, inout: 13, out: 19 */ res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, TA_OS_TEST_CMD_TA2TA_MEMREF_MIX, l_pts, l_params, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_InvokeTACommand failed"); goto cleanup_return; } /* Check the actual values */ for (i = 0; i < TA2TA_BUF_SIZE; i++) { if (in[i] != 6 || inout[i] != 13 || out[i] != 19) { EMSG("Unexpected value in buffer(s)"); DHEXDUMP(in, TA2TA_BUF_SIZE); DHEXDUMP(inout, TA2TA_BUF_SIZE); DHEXDUMP(out, TA2TA_BUF_SIZE); return TEE_ERROR_GENERIC; } } cleanup_return: TEE_CloseTASession(sess); return res; } #undef TA2TA_BUF_SIZE TEE_Result ta_entry_ta2ta_memref_size0(uint32_t param_types, TEE_Param params[4]) { static const TEE_UUID test_uuid = TA_OS_TEST_UUID; TEE_TASessionHandle sess = TEE_HANDLE_NULL; uint32_t ret_orig = 0; TEE_Result res = TEE_ERROR_GENERIC; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; /* * This test expects all memory references to be non-NULL but * all sizes to be zero. */ if (!params[0].memref.buffer || params[0].memref.size || !params[1].memref.buffer || params[1].memref.size || !params[2].memref.buffer || params[2].memref.size) return TEE_ERROR_BAD_PARAMETERS; res = TEE_OpenTASession(&test_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res != TEE_SUCCESS) { EMSG("TEE_OpenTASession failed"); return res; } /* * TA basically does nothing. The actual test just consists * into validating that passing non-NULL memref of size zero * does not panic. */ res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, TA_OS_TEST_CMD_TA2TA_MEMREF_MIX, param_types, params, &ret_orig); TEE_CloseTASession(sess); return res; } TEE_Result ta_entry_ta2ta_memref_mix(uint32_t param_types, TEE_Param params[4]) { uint8_t *in = NULL; uint8_t *inout = NULL; uint8_t *out = NULL; size_t bufsize = 0; size_t i = 0; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, 0)) return TEE_ERROR_BAD_PARAMETERS; bufsize = params[0].memref.size; if (params[1].memref.size != bufsize || params[2].memref.size != bufsize) return TEE_ERROR_BAD_PARAMETERS; in = params[0].memref.buffer; inout = params[1].memref.buffer; out = params[2].memref.buffer; for (i = 0; i < bufsize; i++) out[i] = ++inout[i] + in[i]; return TEE_SUCCESS; } TEE_Result ta_entry_params(uint32_t param_types, TEE_Param params[4]) { size_t n = 0; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT)) return TEE_ERROR_BAD_PARAMETERS; for (n = 0; n < TEE_NUM_PARAMS; n++) if (!params[n].memref.buffer || !params[n].memref.size) return TEE_ERROR_BAD_PARAMETERS; return TEE_SUCCESS; } TEE_Result ta_entry_null_memref(uint32_t param_types, TEE_Param params[4]) { if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT)) return TEE_ERROR_BAD_PARAMETERS; /* * Tests how client can provide null or non-null memref parameters * param[0] expected as a 0 byte input mapped memeref. * param[1] expected as a 0 byte input not-mapped memeref. * param[2] expected as a 0 byte output mapped memeref. * param[3] expected as a 0 byte output not-mapped memeref. */ if (!params[0].memref.buffer || params[0].memref.size || params[1].memref.buffer || params[1].memref.size || !params[2].memref.buffer || params[2].memref.size || params[3].memref.buffer || params[3].memref.size) return TEE_ERROR_BAD_PARAMETERS; return TEE_SUCCESS; } TEE_Result ta_entry_call_lib(uint32_t param_types, TEE_Param params[4] __unused) { if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; if (os_test_shlib_add(1, 2) != 3) return TEE_ERROR_GENERIC; return TEE_SUCCESS; } TEE_Result ta_entry_call_lib_panic(uint32_t param_types, TEE_Param params[4] __unused) { if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; os_test_shlib_panic(); return TEE_ERROR_GENERIC; } TEE_Result ta_entry_call_lib_dl(uint32_t param_types __maybe_unused, TEE_Param params[4] __unused) { int (*add_func)(int a, int b) = NULL; TEE_Result res = TEE_ERROR_GENERIC; void *handle = NULL; void *hnull = NULL; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; handle = dlopen("b3091a65-9751-4784-abf7-0298a7cc35ba", RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE); if (!handle) return TEE_ERROR_GENERIC; add_func = dlsym(handle, "os_test_shlib_dl_add"); if (!add_func) goto err; if (add_func(3, 4) != 7) goto err; hnull = dlopen(NULL, RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE); if (!hnull) goto err; add_func = dlsym(hnull, "os_test_shlib_dl_add"); if (!add_func) goto err; if (add_func(5, 6) != 11) goto err; res = TEE_SUCCESS; dlclose(hnull); err: dlclose(handle); return res; } TEE_Result ta_entry_call_lib_dl_panic(uint32_t param_types __maybe_unused, TEE_Param params[4] __unused) { int (*panic_func)(void) = NULL; void *handle = NULL; TEE_Result res = TEE_ERROR_GENERIC; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; handle = dlopen("b3091a65-9751-4784-abf7-0298a7cc35ba", RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE); if (!handle) return res; panic_func = dlsym(handle, "os_test_shlib_dl_panic"); if (!panic_func) goto err; panic_func(); return TEE_ERROR_GENERIC; err: dlclose(handle); return res; } /* ELF initialization/finalization test */ volatile int os_test_global; static void __attribute__((constructor)) os_test_init(void) { os_test_global *= 10; os_test_global += 1; DMSG("os_test_global=%d", os_test_global); } TEE_Result ta_entry_get_global_var(uint32_t param_types, TEE_Param params[4]) { if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; params[0].value.a = os_test_global; return TEE_SUCCESS; } TEE_Result ta_entry_client_identity(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_Identity identity = { }; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; if (params[1].memref.size < sizeof(TEE_UUID)) { params[1].memref.size = sizeof(TEE_UUID); return TEE_ERROR_SHORT_BUFFER; } res = TEE_GetPropertyAsIdentity(TEE_PROPSET_CURRENT_CLIENT, "gpd.client.identity", &identity); if (res != TEE_SUCCESS) { EMSG("TEE_GetPropertyAsIdentity: returned %#"PRIx32, res); return res; } params[0].value.a = identity.login; memcpy(params[1].memref.buffer, &identity.uuid, sizeof(TEE_UUID)); params[1].memref.size = sizeof(TEE_UUID); return res; } #if defined(WITH_TLS_TESTS) __thread int os_test_tls_a; __thread int os_test_tls_b = 42; TEE_Result ta_entry_tls_test_main(void) { if (os_test_tls_a != 0) { EMSG("os_test_tls_a=%d, expected 0", os_test_tls_a); return TEE_ERROR_GENERIC; } if (os_test_tls_b != 42) { EMSG("os_test_tls_b=%d, expected 42", os_test_tls_b); return TEE_ERROR_GENERIC; } return TEE_SUCCESS; } TEE_Result ta_entry_tls_test_shlib(void) { if (os_test_shlib_tls_a != 0) { EMSG("os_test_shlib_tls_a=%d, expected 0", os_test_shlib_tls_a); return TEE_ERROR_GENERIC; } if (os_test_shlib_tls_b != 123) { EMSG("os_test_shlib_tls_b=%d, expected 123", os_test_shlib_tls_b); return TEE_ERROR_GENERIC; } return TEE_SUCCESS; } #else TEE_Result ta_entry_tls_test_main(void) { return TEE_ERROR_NOT_SUPPORTED; } TEE_Result ta_entry_tls_test_shlib(void) { return TEE_ERROR_NOT_SUPPORTED; } #endif static int iterate_hdr_cb(struct dl_phdr_info *info __maybe_unused, size_t size __unused, void *data) { int *count = data; (*count)++; IMSG("ELF module index: %d", *count); IMSG(" dlpi_addr=%p", (void *)info->dlpi_addr); IMSG(" dlpi_name='%s'", info->dlpi_name); IMSG(" dlpi_phdr=%p", (void *)info->dlpi_phdr); IMSG(" dlpi_phnum=%hu", info->dlpi_phnum); IMSG(" dlpi_adds=%llu", info->dlpi_adds); IMSG(" dlpi_subs=%llu", info->dlpi_subs); IMSG(" dlpi_tls_modid=%zu", info->dlpi_tls_modid); IMSG(" dlpi_tls_data=%p", info->dlpi_tls_data); return 123; } static TEE_Result expect_dl_count_ge(size_t exp_count) { int st = 0; size_t count = 0; st = dl_iterate_phdr(iterate_hdr_cb, (void *)&count); if (st != 123) { /* * dl_iterate_phdr() should return the last value returned by * the callback */ EMSG("Expected return value 123, got %d", st); return TEE_ERROR_GENERIC; } if (count < exp_count) { /* * Expect >= and not == since there could be more shared * libraries (for instance, CFG_ULIBS_SHARED=y) */ EMSG("Expected count > %zu, got: %zu", exp_count, count); return TEE_ERROR_GENERIC; } return TEE_SUCCESS; } TEE_Result ta_entry_dl_phdr(void) { return expect_dl_count_ge(2); } TEE_Result ta_entry_dl_phdr_dl(void) { TEE_Result res = TEE_ERROR_GENERIC; void *handle = NULL; handle = dlopen("b3091a65-9751-4784-abf7-0298a7cc35ba", RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE); if (!handle) return TEE_ERROR_GENERIC; res = expect_dl_count_ge(3); dlclose(handle); return res; } TEE_Result ta_entry_memtag_use_after_free(void) { uint32_t *p = NULL; if (!memtag_is_enabled()) return TEE_ERROR_NOT_SUPPORTED; p = TEE_Malloc(sizeof(*p), TEE_MALLOC_FILL_ZERO); *p = 43; TEE_Free(p); (*p) += 2; return TEE_ERROR_GENERIC; } TEE_Result ta_entry_memtag_invalid_tag(void) { uint32_t *p = NULL; uint32_t *p2 = NULL; if (!memtag_is_enabled()) return TEE_ERROR_NOT_SUPPORTED; p = TEE_Malloc(sizeof(*p), TEE_MALLOC_FILL_ZERO); if (!memtag_get_tag(p)) { EMSG("missing tag in %p", (void *)p); goto err; } *p = 32; p2 = memtag_insert_tag(p, (memtag_get_tag(p) + 1) & 0xf); *p2 = 42; EMSG("Expected to crash when writing to %p which was allocated as %p", (void *)p2, (void *)p); err: TEE_Free(p); return TEE_ERROR_GENERIC; } TEE_Result ta_entry_memtag_double_free(void) { uint32_t *p = NULL; if (!memtag_is_enabled()) return TEE_ERROR_NOT_SUPPORTED; p = TEE_Malloc(sizeof(*p), TEE_MALLOC_FILL_ZERO); *p = 43; TEE_Free(p); TEE_Free(p); return TEE_ERROR_GENERIC; } TEE_Result ta_entry_memtag_buffer_overrun(void) { uint64_t *p = NULL; if (!memtag_is_enabled()) return TEE_ERROR_NOT_SUPPORTED; p = TEE_Malloc(sizeof(*p) * 2, TEE_MALLOC_FILL_ZERO); p[2] += 44; TEE_Free(p); return TEE_ERROR_GENERIC; } optee_test-4.3.0/ta/os_test/pauth_a64.S000066400000000000000000000010601464074351400177010ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2022, Linaro Limited */ #include /* * void corrupt_pac(void) * * The function corrupts a single bit of the PAC to ensure that the * authentication will fail. paciasp calculates and adds the PAC to the * link register and autiasp is used to authenticate the PAC. */ FUNC corrupt_pac , : paciasp /* Flip a random bit in PAC field of the return address */ eor lr, lr , 1 << 58 autiasp ret END_FUNC corrupt_pac emit_aarch64_feature_1_and GNU_PROPERTY_AARCH64_FEATURE_1_BTI optee_test-4.3.0/ta/os_test/sub.mk000066400000000000000000000021321464074351400171050ustar00rootroot00000000000000cppflags-$(CFG_TA_FLOAT_SUPPORT) += -DCFG_TA_FLOAT_SUPPORT=1 cppflags-$(WITH_TLS_TESTS) += -DWITH_TLS_TESTS=1 cppflags-$(WITH_CXX_TESTS) += -DWITH_CXX_TESTS=1 global-incdirs-y += include global-incdirs-y += ../crypt/include global-incdirs-y += ../os_test_lib/include cflags-y += -Wno-float-equal srcs-y += init.c srcs-y += os_test.c srcs-y += ta_entry.c srcs-$(CFG_TA_FLOAT_SUPPORT) += test_float_subj.c ifeq ($(WITH_CXX_TESTS),y) # Profiling (-pg) is disabled for C++ tests because in case it is used for # function tracing (CFG_FTRACE_SUPPORT=y) then the exception handling code in # the C++ runtime won't be able to unwind the (modified) stack. # https://github.com/OP-TEE/optee_os/issues/4022 srcs-y += cxx_tests.cpp cxxflags-remove-cxx_tests.cpp-y += -pg srcs-y += cxx_tests_c.c cflags-remove-cxx_tests_c.c-y += -pg endif ifeq ($(sm),ta_arm64) srcs-$(CFG_TA_PAUTH) += pauth_a64.S srcs-$(CFG_TA_PAUTH) += ta_arm_pauth.c # -march=armv8.3-a enables the non-nops instructions for PAC. We are using one # such instruction in the PAC test. cflags-$(CFG_TA_PAUTH) += -march=armv8.3-a endif srcs-y += attestation.c optee_test-4.3.0/ta/os_test/ta_arm_pauth.c000066400000000000000000000021101464074351400205670ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2022, Linaro Limited */ #include #include #include #include #include void corrupt_pac(void); /* Assuming VA_MASK considering maximum 48 bit of VA */ #define VA_MASK 0xfffff0000000000 static uint64_t sign_using_keyia(uint64_t ptr) { asm volatile("paciza %0 " : "+r" (ptr)); return ptr; } TEE_Result ta_entry_pauth_test_nop(void) { uint64_t pac = 0; bool implemented = false; TEE_Result res = TEE_ERROR_GENERIC; res = TEE_GetPropertyAsBool( TEE_PROPSET_TEE_IMPLEMENTATION, "org.trustedfirmware.optee.cpu.feat_pauth_implemented", &implemented); if (res != TEE_SUCCESS) return res; if (!implemented) return TEE_ERROR_NOT_SUPPORTED; /* Check if PAC instruction generates the authentication code */ for (int i = 0; i < 10; i++) pac |= sign_using_keyia(i) & VA_MASK; if (implemented && pac) return TEE_SUCCESS; return TEE_ERROR_GENERIC; } TEE_Result ta_entry_pauth_corrupt_pac(void) { corrupt_pac(); return TEE_SUCCESS; } optee_test-4.3.0/ta/os_test/ta_entry.c000066400000000000000000000113341464074351400177600ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include #include #include #include #include /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { DMSG("TA_CreateEntryPoint"); return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { DMSG("TA_DestroyEntryPoint"); } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[4], void **ppSessionContext) { (void)nParamTypes; (void)pParams; (void)ppSessionContext; DMSG("TA_OpenSessionEntryPoint"); return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext) { (void)pSessionContext; DMSG("TA_CloseSessionEntryPoint"); } __weak TEE_Result ta_entry_pauth_test_nop(void) { return TEE_ERROR_NOT_SUPPORTED; } __weak TEE_Result ta_entry_pauth_corrupt_pac(void) { return TEE_ERROR_NOT_SUPPORTED; } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { (void)pSessionContext; TEE_UnmaskCancellation(); switch (nCommandID) { case TA_OS_TEST_CMD_INIT: return ta_entry_init(nParamTypes, pParams); case TA_OS_TEST_CMD_CLIENT_WITH_TIMEOUT: return ta_entry_client_with_timeout(nParamTypes, pParams); case TA_OS_TEST_CMD_BASIC: return ta_entry_basic(nParamTypes, pParams); case TA_OS_TEST_CMD_PANIC: return ta_entry_panic(nParamTypes, pParams); case TA_OS_TEST_CMD_CLIENT: return ta_entry_client(nParamTypes, pParams); case TA_OS_TEST_CMD_PARAMS_ACCESS: return ta_entry_params_access_rights(nParamTypes, pParams); case TA_OS_TEST_CMD_WAIT: return ta_entry_wait(nParamTypes, pParams); case TA_OS_TEST_CMD_BAD_MEM_ACCESS: return ta_entry_bad_mem_access(nParamTypes, pParams); case TA_OS_TEST_CMD_TA2TA_MEMREF: return ta_entry_ta2ta_memref(nParamTypes, pParams); case TA_OS_TEST_CMD_TA2TA_MEMREF_SIZE0: return ta_entry_ta2ta_memref_size0(nParamTypes, pParams); case TA_OS_TEST_CMD_TA2TA_MEMREF_MIX: return ta_entry_ta2ta_memref_mix(nParamTypes, pParams); case TA_OS_TEST_CMD_PARAMS: return ta_entry_params(nParamTypes, pParams); case TA_OS_TEST_CMD_NULL_MEMREF_PARAMS: return ta_entry_null_memref(nParamTypes, pParams); case TA_OS_TEST_CMD_CALL_LIB: return ta_entry_call_lib(nParamTypes, pParams); case TA_OS_TEST_CMD_CALL_LIB_PANIC: return ta_entry_call_lib_panic(nParamTypes, pParams); case TA_OS_TEST_CMD_CALL_LIB_DL: return ta_entry_call_lib_dl(nParamTypes, pParams); case TA_OS_TEST_CMD_CALL_LIB_DL_PANIC: return ta_entry_call_lib_dl_panic(nParamTypes, pParams); case TA_OS_TEST_CMD_GET_GLOBAL_VAR: return ta_entry_get_global_var(nParamTypes, pParams); case TA_OS_TEST_CMD_CLIENT_IDENTITY: return ta_entry_client_identity(nParamTypes, pParams); case TA_OS_TEST_CMD_TLS_TEST_MAIN: return ta_entry_tls_test_main(); case TA_OS_TEST_CMD_TLS_TEST_SHLIB: return ta_entry_tls_test_shlib(); case TA_OS_TEST_CMD_DL_PHDR: return ta_entry_dl_phdr(); case TA_OS_TEST_CMD_DL_PHDR_DL: return ta_entry_dl_phdr_dl(); #if defined(WITH_CXX_TESTS) case TA_OS_TEST_CMD_CXX_CTOR_MAIN: return ta_entry_cxx_ctor_main(); case TA_OS_TEST_CMD_CXX_CTOR_SHLIB: return ta_entry_cxx_ctor_shlib(); case TA_OS_TEST_CMD_CXX_CTOR_SHLIB_DL: return ta_entry_cxx_ctor_shlib_dl(); case TA_OS_TEST_CMD_CXX_EXC_MAIN: return ta_entry_cxx_exc_main(); case TA_OS_TEST_CMD_CXX_EXC_MIXED: return ta_entry_cxx_exc_mixed(); #else case TA_OS_TEST_CMD_CXX_CTOR_MAIN: case TA_OS_TEST_CMD_CXX_CTOR_SHLIB: case TA_OS_TEST_CMD_CXX_CTOR_SHLIB_DL: case TA_OS_TEST_CMD_CXX_EXC_MAIN: case TA_OS_TEST_CMD_CXX_EXC_MIXED: return TEE_ERROR_NOT_SUPPORTED; #endif #if defined(CFG_TA_PAUTH) case TA_OS_TEST_CMD_PAUTH_NOP: return ta_entry_pauth_test_nop(); case TA_OS_TEST_CMD_PAUTH_CORRUPT_PAC: return ta_entry_pauth_corrupt_pac(); #else case TA_OS_TEST_CMD_PAUTH_NOP: case TA_OS_TEST_CMD_PAUTH_CORRUPT_PAC: return TEE_ERROR_NOT_SUPPORTED; #endif case TA_OS_TEST_CMD_MEMTAG_USE_AFTER_FREE: return ta_entry_memtag_use_after_free(); case TA_OS_TEST_CMD_MEMTAG_INVALID_TAG: return ta_entry_memtag_invalid_tag(); case TA_OS_TEST_CMD_MEMTAG_DOUBLE_FREE: return ta_entry_memtag_double_free(); case TA_OS_TEST_CMD_MEMTAG_BUFFER_OVERRUN: return ta_entry_memtag_buffer_overrun(); case TA_OS_TEST_CMD_ATTESTATION: return ta_entry_attestation(nParamTypes, pParams); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/os_test/test_float_subj.c000066400000000000000000000043731464074351400213270ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #include "test_float_subj.h" double test_float_dadd(double a, double b) { return a + b; } double test_float_ddiv(double n, double d) { return n / d; } double test_float_dmul(double a, double b) { return a * b; } double test_float_drsub(double a, double b) { return b - a; } double test_float_dsub(double a, double b) { return a - b; } int test_float_dcmpeq(double a, double b) { return a == b; } int test_float_dcmplt(double a, double b) { return a < b; } int test_float_dcmple(double a, double b) { return a <= b; } int test_float_dcmpge(double a, double b) { return a >= b; } int test_float_dcmpgt(double a, double b) { return a > b; } float test_float_fadd(float a, float b) { return a + b; } float test_float_fdiv(float n, float d) { return n / d; } float test_float_fmul(float a, float b) { return a * b; } float test_float_frsub(float a, float b) { return b - a; } float test_float_fsub(float a, float b) { return a - b; } int test_float_fcmpeq(float a, float b) { return a == b; } int test_float_fcmplt(float a, float b) { return a < b; } int test_float_fcmple(float a, float b) { return a <= b; } int test_float_fcmpge(float a, float b) { return a >= b; } int test_float_fcmpgt(float a, float b) { return a > b; } int test_float_d2iz(double a) { return a; } unsigned test_float_d2uiz(double a) { return a; } long long test_float_d2lz(double a) { return a; } unsigned long long test_float_d2ulz(double a) { return a; } int test_float_f2iz(float a) { return a; } unsigned test_float_f2uiz(float a) { return a; } long long test_float_f2lz(float a) { return a; } unsigned long long test_float_f2ulz(float a) { return a; } float test_float_d2f(double a) { return a; } double test_float_f2d(float a) { return a; } double test_float_i2d(int a) { return a; } double test_float_ui2d(unsigned a) { return a; } double test_float_l2d(long long a) { return a; } double test_float_ul2d(unsigned long long a) { return a; } float test_float_i2f(int a) { return a; } float test_float_ui2f(unsigned a) { return a; } float test_float_l2f(long long a) { return a; } float test_float_ul2f(unsigned long long a) { return a; } optee_test-4.3.0/ta/os_test/test_float_subj.h000066400000000000000000000032441464074351400213300ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef TEST_FLOAT_SUBJ_H #define TEST_FLOAT_SUBJ_H double test_float_dadd(double a, double b); double test_float_ddiv(double a, double b); double test_float_dmul(double a, double b); double test_float_drsub(double a, double b); double test_float_dsub(double a, double b); int test_float_dcmpeq(double a, double b); int test_float_dcmplt(double a, double b); int test_float_dcmple(double a, double b); int test_float_dcmpge(double a, double b); int test_float_dcmpgt(double a, double b); float test_float_fadd(float a, float b); float test_float_fdiv(float a, float b); float test_float_fmul(float a, float b); float test_float_frsub(float a, float b); float test_float_fsub(float a, float b); int test_float_fcmpeq(float a, float b); int test_float_fcmplt(float a, float b); int test_float_fcmple(float a, float b); int test_float_fcmpge(float a, float b); int test_float_fcmpgt(float a, float b); int test_float_d2iz(double a); unsigned test_float_d2uiz(double a); long long test_float_d2lz(double a); unsigned long long test_float_d2ulz(double a); int test_float_f2iz(float a); unsigned test_float_f2uiz(float a); long long test_float_f2lz(float a); unsigned long long test_float_f2ulz(float a); float test_float_d2f(double a); double test_float_f2d(float a); double test_float_i2d(int a); double test_float_ui2d(unsigned a); double test_float_l2d(long long a); double test_float_ul2d(unsigned long long a); float test_float_i2f(int a); float test_float_ui2f(unsigned a); float test_float_l2f(long long a); float test_float_ul2f(unsigned long long a); #endif /*TEST_FLOAT_SUBJ_H*/ optee_test-4.3.0/ta/os_test_lib/000077500000000000000000000000001464074351400166135ustar00rootroot00000000000000optee_test-4.3.0/ta/os_test_lib/Android.mk000066400000000000000000000001601464074351400205210ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := ffd2bded-ab7d-4988-95ee-e4962fff7154.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/os_test_lib/Makefile000066400000000000000000000002061464074351400202510ustar00rootroot00000000000000include $(TA_DEV_KIT_DIR)/mk/conf.mk SHLIBNAME = libos_test SHLIBUUID = ffd2bded-ab7d-4988-95ee-e4962fff7154 include ../ta_common.mk optee_test-4.3.0/ta/os_test_lib/include/000077500000000000000000000000001464074351400202365ustar00rootroot00000000000000optee_test-4.3.0/ta/os_test_lib/include/os_test_lib.h000066400000000000000000000006521464074351400227200ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2018, Linaro Limited */ #ifndef _OS_TEST_LIB_H_ #define _OS_TEST_LIB_H_ #include int os_test_shlib_add(int a, int b); void os_test_shlib_panic(void); #if defined(WITH_TLS_TESTS) extern __thread int os_test_shlib_tls_a; extern __thread int os_test_shlib_tls_b; #endif TEE_Result os_test_shlib_cxx_ctor(void); #endif /* _OS_TEST_LIB_H_ */ optee_test-4.3.0/ta/os_test_lib/os_test_lib.c000066400000000000000000000010661464074351400212700ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2018, Linaro Limited */ #include "os_test_lib.h" #include #include extern int os_test_global; static void __attribute__((constructor)) os_test_shlib_init(void) { os_test_global *= 10; os_test_global += 2; DMSG("os_test_global=%d", os_test_global); } #if defined(WITH_TLS_TESTS) __thread int os_test_shlib_tls_a; __thread int os_test_shlib_tls_b = 123; #endif int os_test_shlib_add(int a, int b) { return a + b; } void os_test_shlib_panic(void) { TEE_Panic(0); } optee_test-4.3.0/ta/os_test_lib/os_test_lib_cxx.cpp000066400000000000000000000006561464074351400225160ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2020 Huawei Technologies Co., Ltd */ extern "C" { #include "os_test_lib.h" #include } class OsTestLibCtorTest { public: OsTestLibCtorTest() : val(2) {} int val; }; static OsTestLibCtorTest os_test_lib_ctor_test; TEE_Result os_test_shlib_cxx_ctor(void) { if (os_test_lib_ctor_test.val != 2) return TEE_ERROR_GENERIC; return TEE_SUCCESS; } optee_test-4.3.0/ta/os_test_lib/sub.mk000066400000000000000000000003041464074351400177320ustar00rootroot00000000000000cppflags-$(WITH_TLS_TESTS) += -DWITH_TLS_TESTS=1 global-incdirs-y += include srcs-y += os_test_lib.c ifeq ($(WITH_CXX_TESTS),y) ifneq ($(COMPILER),clang) srcs-y += os_test_lib_cxx.cpp endif endif optee_test-4.3.0/ta/os_test_lib_dl/000077500000000000000000000000001464074351400172725ustar00rootroot00000000000000optee_test-4.3.0/ta/os_test_lib_dl/Android.mk000066400000000000000000000001601464074351400212000ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := b3091a65-9751-4784-abf7-0298a7cc35ba.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/os_test_lib_dl/Makefile000066400000000000000000000002111464074351400207240ustar00rootroot00000000000000include $(TA_DEV_KIT_DIR)/mk/conf.mk SHLIBNAME = libos_test_dl SHLIBUUID = b3091a65-9751-4784-abf7-0298a7cc35ba include ../ta_common.mk optee_test-4.3.0/ta/os_test_lib_dl/include/000077500000000000000000000000001464074351400207155ustar00rootroot00000000000000optee_test-4.3.0/ta/os_test_lib_dl/include/os_test_lib_dl.h000066400000000000000000000005051464074351400240530ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2019, Linaro Limited */ #ifndef _OS_TEST_LIB_DL_H_ #define _OS_TEST_LIB_DL_H_ #include int os_test_shlib_dl_add(int a, int b); void os_test_shlib_dl_panic(void); TEE_Result os_test_shlib_dl_cxx_ctor(void); #endif /* _OS_TEST_LIB_DL_H_ */ optee_test-4.3.0/ta/os_test_lib_dl/os_test_lib_dl.c000066400000000000000000000007311464074351400224240ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2018-2019, Linaro Limited */ #include #include #include extern int os_test_global; static void __attribute__((constructor)) os_test_shlib_dl_init(void) { os_test_global *= 10; os_test_global += 3; DMSG("os_test_global=%d", os_test_global); } int os_test_shlib_dl_add(int a, int b) { return a + b; } void os_test_shlib_dl_panic(void) { TEE_Panic(0); } optee_test-4.3.0/ta/os_test_lib_dl/os_test_lib_dl_cxx.cpp000066400000000000000000000006631464074351400236520ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2018, Linaro Limited */ extern "C" { #include "os_test_lib_dl.h" #include } class OsTestLibDlCtorTest { public: OsTestLibDlCtorTest() : val(2) {} int val; }; static OsTestLibDlCtorTest os_test_lib_dl_ctor_test; TEE_Result os_test_shlib_dl_cxx_ctor(void) { if (os_test_lib_dl_ctor_test.val != 2) return TEE_ERROR_GENERIC; return TEE_SUCCESS; } optee_test-4.3.0/ta/os_test_lib_dl/sub.mk000066400000000000000000000002311464074351400204100ustar00rootroot00000000000000global-incdirs-y += include srcs-y += os_test_lib_dl.c ifeq ($(WITH_CXX_TESTS),y) ifneq ($(COMPILER),clang) srcs-y += os_test_lib_dl_cxx.cpp endif endif optee_test-4.3.0/ta/rpc_test/000077500000000000000000000000001464074351400161305ustar00rootroot00000000000000optee_test-4.3.0/ta/rpc_test/Android.mk000066400000000000000000000001611464074351400200370ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := d17f73a0-36ef-11e1-984a-0002a5d5c51b.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/rpc_test/Makefile000066400000000000000000000001061464074351400175650ustar00rootroot00000000000000BINARY = d17f73a0-36ef-11e1-984a-0002a5d5c51b include ../ta_common.mk optee_test-4.3.0/ta/rpc_test/include/000077500000000000000000000000001464074351400175535ustar00rootroot00000000000000optee_test-4.3.0/ta/rpc_test/include/ta_rpc.h000066400000000000000000000012441464074351400211750ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TA_RPC_H #define TA_RPC_H #include #include TEE_Result rpc_sha224(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4]); TEE_Result rpc_sha256(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4]); TEE_Result rpc_aes256ecb_encrypt(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4]); TEE_Result rpc_aes256ecb_decrypt(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4]); TEE_Result rpc_open(void *session_context, uint32_t param_types, TEE_Param params[4]); #endif optee_test-4.3.0/ta/rpc_test/include/ta_rpc_test.h000066400000000000000000000014211464074351400222310ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TA_RPC_TEST_H #define TA_RPC_TEST_H /* This UUID is generated with the ITU-T UUID generator at http://www.itu.int/ITU-T/asn1/uuid.html */ #define TA_RPC_TEST_UUID { 0xd17f73a0, 0x36ef, 0x11e1, \ { 0x98, 0x4a, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } } #define TA_RPC_CMD_CRYPT_SHA224 1 #define TA_RPC_CMD_CRYPT_SHA256 2 #define TA_RPC_CMD_CRYPT_AES256ECB_ENC 3 #define TA_RPC_CMD_CRYPT_AES256ECB_DEC 4 #define TA_RPC_CMD_OPEN 5 #define TA_RPC_CMD_CRYPT_PRIVMEM_SHA224 6 #define TA_RPC_CMD_CRYPT_PRIVMEM_SHA256 7 #define TA_RPC_CMD_CRYPT_PRIVMEM_AES256ECB_ENC 8 #define TA_RPC_CMD_CRYPT_PRIVMEM_AES256ECB_DEC 9 #endif optee_test-4.3.0/ta/rpc_test/include/user_ta_header_defines.h000066400000000000000000000006471464074351400244020ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #define TA_UUID TA_RPC_TEST_UUID #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR) #define TA_STACK_SIZE (4 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/rpc_test/sub.mk000066400000000000000000000002151464074351400172500ustar00rootroot00000000000000global-incdirs-y += include global-incdirs-y += ../crypt/include global-incdirs-y += ../sims/include srcs-y += ta_entry.c srcs-y += ta_rpc.c optee_test-4.3.0/ta/rpc_test/ta_entry.c000066400000000000000000000036341464074351400201270ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include #include /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[4], void **ppSessionContext) { (void)nParamTypes; (void)pParams; (void)ppSessionContext; return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext) { (void)pSessionContext; } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { (void)pSessionContext; switch (nCommandID) { case TA_RPC_CMD_CRYPT_SHA224: return rpc_sha224(false, nParamTypes, pParams); case TA_RPC_CMD_CRYPT_SHA256: return rpc_sha256(false, nParamTypes, pParams); case TA_RPC_CMD_CRYPT_AES256ECB_ENC: return rpc_aes256ecb_encrypt(false, nParamTypes, pParams); case TA_RPC_CMD_CRYPT_AES256ECB_DEC: return rpc_aes256ecb_decrypt(false, nParamTypes, pParams); case TA_RPC_CMD_OPEN: return rpc_open(pSessionContext, nParamTypes, pParams); case TA_RPC_CMD_CRYPT_PRIVMEM_SHA224: return rpc_sha224(true, nParamTypes, pParams); case TA_RPC_CMD_CRYPT_PRIVMEM_SHA256: return rpc_sha256(true, nParamTypes, pParams); case TA_RPC_CMD_CRYPT_PRIVMEM_AES256ECB_ENC: return rpc_aes256ecb_encrypt(true, nParamTypes, pParams); case TA_RPC_CMD_CRYPT_PRIVMEM_AES256ECB_DEC: return rpc_aes256ecb_decrypt(true, nParamTypes, pParams); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/rpc_test/ta_rpc.c000066400000000000000000000101461464074351400175460ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include #include #include #include #include static TEE_UUID cryp_uuid = TA_CRYPT_UUID; static TEE_Result rpc_call_cryp(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4], uint32_t cmd) { TEE_TASessionHandle cryp_session = TEE_HANDLE_NULL; TEE_Result res = TEE_ERROR_GENERIC; uint32_t origin = 0; TEE_Param params[4] = { }; size_t n = 0; uint32_t types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); res = TEE_OpenTASession(&cryp_uuid, TEE_TIMEOUT_INFINITE, types, params, &cryp_session, &origin); if (res != TEE_SUCCESS) { EMSG("TEE_OpenTASession() returned %#"PRIx32, res); return res; } types = nParamTypes; if (sec_mem) { TEE_MemFill(params, 0, sizeof(params)); for (n = 0; n < 4; n++) { switch (TEE_PARAM_TYPE_GET(types, n)) { case TEE_PARAM_TYPE_VALUE_INPUT: case TEE_PARAM_TYPE_VALUE_INOUT: params[n].value = pParams[n].value; break; case TEE_PARAM_TYPE_MEMREF_INPUT: case TEE_PARAM_TYPE_MEMREF_OUTPUT: case TEE_PARAM_TYPE_MEMREF_INOUT: params[n].memref.buffer = TEE_Malloc(pParams[n].memref.size, 0); if (!params[n].memref.buffer) TEE_Panic(0); params[n].memref.size = pParams[n].memref.size; if (TEE_PARAM_TYPE_GET(types, n) != TEE_PARAM_TYPE_MEMREF_OUTPUT) TEE_MemMove(params[n].memref.buffer, pParams[n].memref.buffer, pParams[n].memref.size); break; default: break; } } } else { TEE_MemMove(params, pParams, sizeof(params)); } res = TEE_InvokeTACommand(cryp_session, TEE_TIMEOUT_INFINITE, cmd, types, params, &origin); if (res != TEE_SUCCESS) { EMSG("TEE_InvokeTACommand() returned %#"PRIx32, res); } TEE_CloseTASession(cryp_session); if (sec_mem) { for (n = 0; n < 4; n++) { switch (TEE_PARAM_TYPE_GET(types, n)) { case TEE_PARAM_TYPE_VALUE_INOUT: case TEE_PARAM_TYPE_VALUE_OUTPUT: pParams[n].value = params[n].value; break; case TEE_PARAM_TYPE_MEMREF_INPUT: case TEE_PARAM_TYPE_MEMREF_OUTPUT: case TEE_PARAM_TYPE_MEMREF_INOUT: if (TEE_PARAM_TYPE_GET(types, n) != TEE_PARAM_TYPE_MEMREF_INPUT) TEE_MemMove(pParams[n].memref.buffer, params[n].memref.buffer, params[n].memref.size); pParams[n].memref.size = params[n].memref.size; TEE_Free(params[n].memref.buffer); break; default: break; } } } return res; } TEE_Result rpc_sha224(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4]) { return rpc_call_cryp(sec_mem, nParamTypes, pParams, TA_CRYPT_CMD_SHA224); } TEE_Result rpc_sha256(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4]) { return rpc_call_cryp(sec_mem, nParamTypes, pParams, TA_CRYPT_CMD_SHA256); } TEE_Result rpc_aes256ecb_encrypt(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4]) { return rpc_call_cryp(sec_mem, nParamTypes, pParams, TA_CRYPT_CMD_AES256ECB_ENC); } TEE_Result rpc_aes256ecb_decrypt(bool sec_mem, uint32_t nParamTypes, TEE_Param pParams[4]) { return rpc_call_cryp(sec_mem, nParamTypes, pParams, TA_CRYPT_CMD_AES256ECB_DEC); } TEE_Result rpc_open(void *session_context, uint32_t param_types, TEE_Param params[4]) { TEE_TASessionHandle session = TEE_HANDLE_NULL; uint32_t orig = 0; TEE_Result res = TEE_ERROR_GENERIC; TEE_UUID uuid = TA_SIMS_TEST_UUID; uint32_t types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); TEE_Param par[4] = { }; (void)session_context; (void)param_types; res = TEE_OpenTASession(&uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &session, &orig); if (res != TEE_SUCCESS) return res; TEE_MemFill(params, 0, sizeof(TEE_Param) * 4); res = TEE_InvokeTACommand(session, TEE_TIMEOUT_INFINITE, TA_SIMS_CMD_GET_COUNTER, types, par, &orig); if (res != TEE_SUCCESS) goto exit; exit: TEE_CloseTASession(session); return res; } optee_test-4.3.0/ta/sdp_basic/000077500000000000000000000000001464074351400162345ustar00rootroot00000000000000optee_test-4.3.0/ta/sdp_basic/Android.mk000066400000000000000000000001601464074351400201420ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 12345678-5b69-11e4-9dbb-101f74f00099.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/sdp_basic/Makefile000066400000000000000000000001101464074351400176640ustar00rootroot00000000000000BINARY = 12345678-5b69-11e4-9dbb-101f74f00099 include ../ta_common.mk optee_test-4.3.0/ta/sdp_basic/include/000077500000000000000000000000001464074351400176575ustar00rootroot00000000000000optee_test-4.3.0/ta/sdp_basic/include/ta_sdp_basic.h000066400000000000000000000012211464074351400224370ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2016, Linaro Limited * All rights reserved. */ #ifndef TA_SDP_BASIC_H #define TA_SDP_BASIC_H #define TA_SDP_BASIC_UUID { 0x12345678, 0x5b69, 0x11e4, \ { 0x9d, 0xbb, 0x10, 0x1f, 0x74, 0xf0, 0x00, 0x99 } } #define TA_SDP_BASIC_CMD_INJECT 0 #define TA_SDP_BASIC_CMD_TRANSFORM 1 #define TA_SDP_BASIC_CMD_DUMP 2 #define TA_SDP_BASIC_CMD_INVOKE_INJECT 3 #define TA_SDP_BASIC_CMD_INVOKE_TRANSFORM 4 #define TA_SDP_BASIC_CMD_INVOKE_DUMP 5 #define TA_SDP_BASIC_CMD_PTA_INJECT 6 #define TA_SDP_BASIC_CMD_PTA_TRANSFORM 7 #define TA_SDP_BASIC_CMD_PTA_DUMP 8 #endif /* TA_SDP_BASIC_H */ optee_test-4.3.0/ta/sdp_basic/include/user_ta_header_defines.h000066400000000000000000000007531464074351400245040ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2016, Linaro Limited * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include "ta_sdp_basic.h" #define TA_UUID TA_SDP_BASIC_UUID #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR | \ TA_FLAG_SECURE_DATA_PATH | \ TA_FLAG_CACHE_MAINTENANCE) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/sdp_basic/sub.mk000066400000000000000000000000651464074351400173570ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_sdp_basic.c optee_test-4.3.0/ta/sdp_basic/ta_sdp_basic.c000066400000000000000000000253431464074351400210220ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2016, Linaro Limited * All rights reserved. */ #include #include #include #include #include #include #include #include /* * Basic Secure Data Path access test commands: * - command INJECT: copy from non secure input into secure output. * - command TRANSFROM: read, transform and write from/to secure in/out. * - command DUMP: copy from secure input into non secure output. */ static TEE_Result cmd_inject(uint32_t types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result rc = TEE_ERROR_GENERIC; const int sec_idx = 1; /* highlight secure buffer index */ const int ns_idx = 0; /* highlight nonsecure buffer index */ if (types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { EMSG("bad parameters %#"PRIx32, types); return TEE_ERROR_BAD_PARAMETERS; } if (params[sec_idx].memref.size < params[ns_idx].memref.size) return TEE_ERROR_SHORT_BUFFER; /* * We could rely on the TEE to provide consistent buffer/size values * to reference a buffer with a unique and consistent secure attribute * value. Hence it is safe enough (and more optimal) to test only the * secure attribute of a single byte of it. Yet, since the current * test does not deal with performance, let check the secure attribute * of each byte of the buffer. */ rc = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_ANY_OWNER | TEE_MEMORY_ACCESS_READ | TEE_MEMORY_ACCESS_NONSECURE, params[ns_idx].memref.buffer, params[ns_idx].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CheckMemoryAccessRights(nsec) failed %#"PRIx32, rc); return rc; } rc = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_ANY_OWNER | TEE_MEMORY_ACCESS_WRITE | TEE_MEMORY_ACCESS_SECURE, params[sec_idx].memref.buffer, params[sec_idx].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CheckMemoryAccessRights(secure) failed %#"PRIx32, rc); return rc; } #ifdef CFG_CACHE_API /* * we should invalidate cache (here we assume buffer were not * filled through cpu core caches. We flush buffers so that * cache is not corrupted in cache target buffer not aligned * on cache line size. */ rc = TEE_CacheFlush(params[sec_idx].memref.buffer, params[sec_idx].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CacheFlush(%p, %zu) failed: %#"PRIx32, params[sec_idx].memref.buffer, params[sec_idx].memref.size, rc); return rc; } #endif /* CFG_CACHE_API */ /* inject data */ TEE_MemMove(params[sec_idx].memref.buffer, params[ns_idx].memref.buffer, params[sec_idx].memref.size); #ifdef CFG_CACHE_API rc = TEE_CacheFlush(params[sec_idx].memref.buffer, params[sec_idx].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CacheFlush(%p, %zu) failed: %#"PRIx32, params[sec_idx].memref.buffer, params[sec_idx].memref.size, rc); return rc; } #endif /* CFG_CACHE_API */ return rc; } static TEE_Result cmd_transform(uint32_t types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result rc = TEE_ERROR_GENERIC; unsigned char *p = NULL; size_t sz = 0; if (types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; /* * We could rely on the TEE to provide consistent buffer/size values * to reference a buffer with a unique and consistent secure attribute * value. Hence it is safe enough (and more optimal) to test only the * secure attribute of a single byte of it. Yet, since the current * test does not deal with performance, let check the secure attribute * of each byte of the buffer. */ rc = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_ANY_OWNER | TEE_MEMORY_ACCESS_READ | TEE_MEMORY_ACCESS_WRITE | TEE_MEMORY_ACCESS_SECURE, params[0].memref.buffer, params[0].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CheckMemoryAccessRights(secure) failed %#"PRIx32, rc); return rc; } #ifdef CFG_CACHE_API /* * we should invalidate cache (here we assume buffer were not * filled through cpu core caches. We flush buffers so that * cache is not corrupted in cache target buffer not aligned * on cache line size. */ rc = TEE_CacheFlush(params[0].memref.buffer, params[0].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CacheFlush(%p, %zu) failed: %#"PRIx32, params[0].memref.buffer, params[0].memref.size, rc); return rc; } #endif /* CFG_CACHE_API */ /* transform the data */ p = (unsigned char *)params[0].memref.buffer; sz = params[0].memref.size; for (; sz; sz--, p++) *p = ~(*p) + 1; #ifdef CFG_CACHE_API rc = TEE_CacheFlush(params[0].memref.buffer, params[0].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CacheFlush(%p, %zu) failed: %#"PRIx32, params[0].memref.buffer, params[0].memref.size, rc); return rc; } #endif /* CFG_CACHE_API */ return rc; } static TEE_Result cmd_dump(uint32_t types, TEE_Param params[TEE_NUM_PARAMS]) { TEE_Result rc = TEE_ERROR_GENERIC; const int sec_idx = 0; /* highlight secure buffer index */ const int ns_idx = 1; /* highlight nonsecure buffer index */ if (types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; if (params[ns_idx].memref.size < params[sec_idx].memref.size) return TEE_ERROR_SHORT_BUFFER; /* * We could rely on the TEE to provide consistent buffer/size values * to reference a buffer with a unique and consistent secure attribute * value. Hence it is safe enough (and more optimal) to test only the * secure attribute of a single byte of it. Yet, since the current * test does not deal with performance, let check the secure attribute * of each byte of the buffer. */ rc = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_ANY_OWNER | TEE_MEMORY_ACCESS_WRITE | TEE_MEMORY_ACCESS_NONSECURE, params[ns_idx].memref.buffer, params[ns_idx].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CheckMemoryAccessRights(nsec) failed %#"PRIx32, rc); return rc; } rc = TEE_CheckMemoryAccessRights(TEE_MEMORY_ACCESS_ANY_OWNER | TEE_MEMORY_ACCESS_READ | TEE_MEMORY_ACCESS_SECURE, params[sec_idx].memref.buffer, params[sec_idx].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CheckMemoryAccessRights(secure) failed %#"PRIx32, rc); return rc; } #ifdef CFG_CACHE_API /* * we should invalidate cache (here we assume buffer were not * filled through cpu core caches. We flush buffers so that * cache is not corrupted in cache target buffer not aligned * on cache line size. */ rc = TEE_CacheFlush(params[sec_idx].memref.buffer, params[sec_idx].memref.size); if (rc != TEE_SUCCESS) { EMSG("TEE_CacheFlush(%p, %zu) failed: %#"PRIx32, params[sec_idx].memref.buffer, params[sec_idx].memref.size, rc); return rc; } #endif /* CFG_CACHE_API */ /* dump the data */ TEE_MemMove(params[ns_idx].memref.buffer, params[sec_idx].memref.buffer, params[sec_idx].memref.size); return rc; } static TEE_Result cmd_invoke(uint32_t nParamTypes, TEE_Param pParams[TEE_NUM_PARAMS], uint32_t nCommandID) { const TEE_UUID uuid = TA_SDP_BASIC_UUID; static TEE_TASessionHandle sess = TEE_HANDLE_NULL; uint32_t ret_orig = 0; TEE_Result res = TEE_ERROR_GENERIC; if (sess == TEE_HANDLE_NULL) { res = TEE_OpenTASession(&uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res != TEE_SUCCESS) { EMSG("SDP basic test TA: TEE_OpenTASession() FAILED"); goto cleanup_return; } } res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, nCommandID, nParamTypes, pParams, &ret_orig); if (res != TEE_SUCCESS) { EMSG("SDP basic test TA: TEE_OpenTASession() FAILED %#"PRIx32"/%"PRIu32, res, ret_orig); } cleanup_return: if (res != TEE_SUCCESS) { TEE_CloseTASession(sess); sess = TEE_HANDLE_NULL; } return res; } static TEE_Result cmd_invoke_pta(uint32_t nParamTypes, TEE_Param pParams[TEE_NUM_PARAMS], uint32_t nCommandID) { const TEE_UUID uuid = PTA_INVOKE_TESTS_UUID; static TEE_TASessionHandle sess = TEE_HANDLE_NULL; uint32_t ret_orig = 0; TEE_Result res = TEE_ERROR_GENERIC; if (sess == TEE_HANDLE_NULL) { res = TEE_OpenTASession(&uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); if (res != TEE_SUCCESS) { EMSG("SDP basic test TA: TEE_OpenTASession() FAILED"); goto cleanup_return; } } res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE, nCommandID, nParamTypes, pParams, &ret_orig); if (res != TEE_SUCCESS) { EMSG("SDP basic test TA: TEE_OpenTASession() FAILED %#"PRIx32"/%"PRIu32, res, ret_orig); } cleanup_return: if (res != TEE_SUCCESS) { TEE_CloseTASession(sess); sess = TEE_HANDLE_NULL; } return res; } TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } void TA_DestroyEntryPoint(void) { } TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[TEE_NUM_PARAMS], void **ppSessionContext) { (void)nParamTypes; (void)pParams; (void)ppSessionContext; return TEE_SUCCESS; } void TA_CloseSessionEntryPoint(void *pSessionContext) { (void)pSessionContext; } TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[TEE_NUM_PARAMS]) { (void)pSessionContext; switch (nCommandID) { case TA_SDP_BASIC_CMD_INJECT: return cmd_inject(nParamTypes, pParams); case TA_SDP_BASIC_CMD_TRANSFORM: return cmd_transform(nParamTypes, pParams); case TA_SDP_BASIC_CMD_DUMP: return cmd_dump(nParamTypes, pParams); case TA_SDP_BASIC_CMD_INVOKE_INJECT: return cmd_invoke(nParamTypes, pParams, TA_SDP_BASIC_CMD_INJECT); case TA_SDP_BASIC_CMD_INVOKE_TRANSFORM: return cmd_invoke(nParamTypes, pParams, TA_SDP_BASIC_CMD_TRANSFORM); case TA_SDP_BASIC_CMD_INVOKE_DUMP: return cmd_invoke(nParamTypes, pParams, TA_SDP_BASIC_CMD_DUMP); case TA_SDP_BASIC_CMD_PTA_INJECT: return cmd_invoke_pta(nParamTypes, pParams, PTA_INVOKE_TESTS_CMD_COPY_NSEC_TO_SEC); case TA_SDP_BASIC_CMD_PTA_TRANSFORM: return cmd_invoke_pta(nParamTypes, pParams, PTA_INVOKE_TESTS_CMD_READ_MODIFY_SEC); case TA_SDP_BASIC_CMD_PTA_DUMP: return cmd_invoke_pta(nParamTypes, pParams, PTA_INVOKE_TESTS_CMD_COPY_SEC_TO_NSEC); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/sims/000077500000000000000000000000001464074351400152605ustar00rootroot00000000000000optee_test-4.3.0/ta/sims/Android.mk000066400000000000000000000001601464074351400171660ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := e6a33ed4-562b-463a-bb7e-ff5e15a493c8.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/sims/Makefile000066400000000000000000000001061464074351400167150ustar00rootroot00000000000000BINARY = e6a33ed4-562b-463a-bb7e-ff5e15a493c8 include ../ta_common.mk optee_test-4.3.0/ta/sims/include/000077500000000000000000000000001464074351400167035ustar00rootroot00000000000000optee_test-4.3.0/ta/sims/include/ta_sims.h000066400000000000000000000013421464074351400205130ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TA_SIMS_H #define TA_SIMS_H #include #include TEE_Result sims_open_session(void **ctx); TEE_Result sims_open_ta_session(void *ctx, uint32_t nParamTypes, TEE_Param pParams[4]); void sims_close_session(void *ctx); TEE_Result sims_read(uint32_t nParamTypes, TEE_Param pParams[4]); TEE_Result sims_write(uint32_t nParamTypes, TEE_Param pParams[4]); TEE_Result sims_get_counter(void *session_context, uint32_t param_types, TEE_Param params[4]); TEE_Result sims_entry_panic(void *session_context, uint32_t nParamTypes, TEE_Param pParams[4]); #endif optee_test-4.3.0/ta/sims/include/ta_sims_test.h000066400000000000000000000010621464074351400215510ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef TA_SIMS_TEST_H #define TA_SIMS_TEST_H /* This UUID is generated with uuidgen */ #define TA_SIMS_TEST_UUID { 0xe6a33ed4, 0x562b, 0x463a, \ { 0xbb, 0x7e, 0xff, 0x5e, 0x15, 0xa4, 0x93, 0xc8 } } #define TA_SIMS_CMD_READ 1 #define TA_SIMS_CMD_WRITE 2 #define TA_SIMS_CMD_GET_COUNTER 3 #define TA_SIMS_CMD_PANIC 4 #define TA_SIMS_OPEN_TA_SESSION 5 #endif optee_test-4.3.0/ta/sims/include/user_ta_header_defines.h000066400000000000000000000007471464074351400235330ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #define TA_UUID TA_SIMS_TEST_UUID #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR | \ TA_FLAG_SINGLE_INSTANCE | \ TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (4 * 1024) #define TA_DATA_SIZE (64 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/sims/sub.mk000066400000000000000000000001631464074351400164020ustar00rootroot00000000000000global-incdirs-y += include global-incdirs-y += ../sims_keepalive/include srcs-y += ta_entry.c srcs-y += ta_sims.c optee_test-4.3.0/ta/sims/ta_entry.c000066400000000000000000000030001464074351400172420ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include #include /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[4], void **ppSessionContext) { (void)nParamTypes; (void)pParams; return sims_open_session(ppSessionContext); } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext) { sims_close_session(pSessionContext); } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { switch (nCommandID) { case TA_SIMS_OPEN_TA_SESSION: return sims_open_ta_session(pSessionContext, nParamTypes, pParams); case TA_SIMS_CMD_READ: return sims_read(nParamTypes, pParams); case TA_SIMS_CMD_WRITE: return sims_write(nParamTypes, pParams); case TA_SIMS_CMD_GET_COUNTER: return sims_get_counter(pSessionContext, nParamTypes, pParams); case TA_SIMS_CMD_PANIC: return sims_entry_panic(pSessionContext, nParamTypes, pParams); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/sims/ta_sims.c000066400000000000000000000106521464074351400170670ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include #define TA_SIMS_MAX_STORAGE 4 struct sims_bucket { uint32_t size; void *data; }; struct sims_session { TEE_TASessionHandle sess; uint32_t counter; uint32_t array[2048]; }; static struct sims_bucket storage[TA_SIMS_MAX_STORAGE] = { {0} }; static uint32_t counter; TEE_Result sims_open_ta_session(void *session_context, uint32_t param_types, TEE_Param params[4]) { TEE_UUID *uuid = NULL; TEE_Result res = TEE_SUCCESS; TEE_TASessionHandle sess = TEE_HANDLE_NULL; uint32_t ret_orig = 0; struct sims_session *ctx = (struct sims_session *)session_context; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; if (params[0].memref.size != sizeof(*uuid)) return TEE_ERROR_BAD_PARAMETERS; uuid = TEE_Malloc(sizeof(*uuid), TEE_MALLOC_FILL_ZERO); if (!uuid) return TEE_ERROR_OUT_OF_MEMORY; TEE_MemMove(uuid, params[0].memref.buffer, params[0].memref.size); res = TEE_OpenTASession(uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &sess, &ret_orig); TEE_Free(uuid); if (res != TEE_SUCCESS) return res; ctx->sess = sess; ctx->counter++; return TEE_SUCCESS; } TEE_Result sims_open_session(void **ctx) { struct sims_session *context = TEE_Malloc(sizeof(struct sims_session), TEE_MALLOC_FILL_ZERO); if (context == NULL) return TEE_ERROR_OUT_OF_MEMORY; context->sess = TEE_HANDLE_NULL; context->counter = counter; *ctx = context; counter++; return TEE_SUCCESS; } void sims_close_session(void *ctx) { TEE_TASessionHandle sess = ((struct sims_session *)ctx)->sess; if (sess != TEE_HANDLE_NULL) TEE_CloseTASession(sess); TEE_Free(ctx); } TEE_Result sims_read(uint32_t param_types, TEE_Param params[4]) { uint32_t index = 0; void *p = NULL; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, 0, 0)) return TEE_ERROR_BAD_PARAMETERS; index = params[0].value.a; if (index >= TA_SIMS_MAX_STORAGE) return TEE_ERROR_BAD_PARAMETERS; if (storage[index].size > params[1].memref.size) return TEE_ERROR_OVERFLOW; p = TEE_Malloc(16000, 0); if (p == NULL) return TEE_ERROR_OUT_OF_MEMORY; TEE_MemMove(params[1].memref.buffer, storage[index].data, params[1].memref.size); TEE_Free(p); return TEE_SUCCESS; } TEE_Result sims_write(uint32_t param_types, TEE_Param params[4]) { uint32_t index = 0; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, 0, 0)) return TEE_ERROR_BAD_PARAMETERS; index = params[0].value.a; if (index >= TA_SIMS_MAX_STORAGE) return TEE_ERROR_BAD_PARAMETERS; if (storage[index].data != NULL) TEE_Free(storage[index].data); storage[index].data = TEE_Malloc(params[1].memref.size, 0); if (storage[index].data == NULL) { storage[index].size = 0; return TEE_ERROR_OUT_OF_MEMORY; } storage[index].size = params[1].memref.size; TEE_MemMove(storage[index].data, params[1].memref.buffer, params[1].memref.size); return TEE_SUCCESS; } TEE_Result sims_get_counter(void *session_context, uint32_t param_types, TEE_Param params[4]) { struct sims_session *ctx = (struct sims_session *)session_context; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_OUTPUT, 0, 0, 0)) return TEE_ERROR_BAD_PARAMETERS; params[0].value.a = ctx->counter; return TEE_SUCCESS; } TEE_Result sims_entry_panic(void *session_context, uint32_t param_types, TEE_Param params[4]) { uint32_t ret_orig = 0; TEE_Result res = TEE_SUCCESS; struct sims_session *ctx = (struct sims_session *)session_context; if (param_types != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) return TEE_ERROR_BAD_PARAMETERS; if (params[0].memref.buffer && params[0].memref.size) { res = sims_open_ta_session(session_context, param_types, params); if (res != TEE_SUCCESS) return res; params[0].memref.buffer = NULL; params[0].memref.size = 0; /* Trigger panic to remote TA */ (void)TEE_InvokeTACommand(ctx->sess, TEE_TIMEOUT_INFINITE, TA_SIMS_CMD_PANIC, param_types, params, &ret_orig); } else { TEE_Panic(0xbeef); /* Trigger panic to current TA */ } return TEE_SUCCESS; } optee_test-4.3.0/ta/sims_keepalive/000077500000000000000000000000001464074351400173055ustar00rootroot00000000000000optee_test-4.3.0/ta/sims_keepalive/Android.mk000066400000000000000000000001601464074351400212130ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := a4c04d50-f180-11e8-8eb2-f2801f1b9fd1.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/sims_keepalive/Makefile000066400000000000000000000001061464074351400207420ustar00rootroot00000000000000BINARY = a4c04d50-f180-11e8-8eb2-f2801f1b9fd1 include ../ta_common.mk optee_test-4.3.0/ta/sims_keepalive/include/000077500000000000000000000000001464074351400207305ustar00rootroot00000000000000optee_test-4.3.0/ta/sims_keepalive/include/ta_sims_keepalive_test.h000066400000000000000000000005711464074351400256270ustar00rootroot00000000000000/* * Copyright (c) 2019, Mentor Graphics Corporation * * SPDX-License-Identifier: BSD-2-Clause */ #ifndef TA_SIMS_KEEP_ALIVE_TEST_H #define TA_SIMS_KEEP_ALIVE_TEST_H /* This UUID is generated with uuidgen */ #define TA_SIMS_KEEP_ALIVE_TEST_UUID { 0xa4c04d50, 0xf180, 0x11e8, \ { 0x8e, 0xb2, 0xf2, 0x80, 0x1f, 0x1b, 0x9f, 0xd1 } } #endif /* TA_SIMS_KEEP_ALIVE_TEST_H */ optee_test-4.3.0/ta/sims_keepalive/include/user_ta_header_defines.h000066400000000000000000000007711464074351400255550ustar00rootroot00000000000000/* * Copyright (c) 2019, Mentor Graphics Corporation * * SPDX-License-Identifier: BSD-2-Clause */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #define TA_NAME "SIMS_KEEPALIVE" #define TA_UUID TA_SIMS_KEEP_ALIVE_TEST_UUID #define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE | \ TA_FLAG_MULTI_SESSION | \ TA_FLAG_INSTANCE_KEEP_ALIVE) #define TA_STACK_SIZE (4 * 1024) #define TA_DATA_SIZE (64 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/sims_keepalive/sub.mk000066400000000000000000000002421464074351400204250ustar00rootroot00000000000000global-incdirs-y += include global-incdirs-y += ../sims/include global-incdirs-y += ../sims_keepalive/include srcs-y += ta_entry.c srcs-y += ta_sims_keepalive.c optee_test-4.3.0/ta/sims_keepalive/ta_entry.c000066400000000000000000000000361464074351400212750ustar00rootroot00000000000000#include "../sims/ta_entry.c" optee_test-4.3.0/ta/sims_keepalive/ta_sims_keepalive.c000066400000000000000000000000351464074351400231330ustar00rootroot00000000000000#include "../sims/ta_sims.c" optee_test-4.3.0/ta/socket/000077500000000000000000000000001464074351400155755ustar00rootroot00000000000000optee_test-4.3.0/ta/socket/Android.mk000066400000000000000000000001611464074351400175040ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 873bcd08-c2c3-11e6-a937-d0bf9c45c61c.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/socket/Makefile000066400000000000000000000001071464074351400172330ustar00rootroot00000000000000BINARY = 873bcd08-c2c3-11e6-a937-d0bf9c45c61c include ../ta_common.mk optee_test-4.3.0/ta/socket/include/000077500000000000000000000000001464074351400172205ustar00rootroot00000000000000optee_test-4.3.0/ta/socket/include/ta_socket.h000066400000000000000000000032611464074351400213470ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2016, Linaro Limited * All rights reserved. */ #ifndef __TA_SOCKET_H #define __TA_SOCKET_H #define TA_SOCKET_UUID { 0x873bcd08, 0xc2c3, 0x11e6, { \ 0xa9, 0x37, 0xd0, 0xbf, 0x9c, 0x45, 0xc6, 0x1c } } /* * Opens a TCP socket and returns an opaque handle * * [in] params[0].value.a ipVersion * [in] params[0].value.b server port * [in] params[1].memref server address * [out] params[2].memref handle * [out] params[3].value.a protocol error */ #define TA_SOCKET_CMD_TCP_OPEN 0 /* * Opens a UDP socket and returns an opaque handle * * [in] params[0].value.a ipVersion * [in] params[0].value.b server port * [in] params[1].memref server address * [out] params[2].memref handle * [out] params[3].value.a protocol error */ #define TA_SOCKET_CMD_UDP_OPEN 1 /* * Closes a socket * * [in] params[0].memref handle */ #define TA_SOCKET_CMD_CLOSE 2 /* * Send data on socket * * [in] params[0].memref handle * [in] params[1].memref data * [in] params[2].value.a timeout * [out] params[2].value.b sent bytes */ #define TA_SOCKET_CMD_SEND 3 /* * Receive data on socket * * [in] params[0].memref handle * [out] params[1].memref data * [in] params[2].value.a timeout */ #define TA_SOCKET_CMD_RECV 4 /* * Retrieve protocol error from socket * * [in] params[0].memref handle * [out] params[1].value.a error code */ #define TA_SOCKET_CMD_ERROR 5 /* * Ioctl on socket * * [in] params[0].memref handle * [in/out] params[1].memref data * [in] params[2].value.a command code */ #define TA_SOCKET_CMD_IOCTL 6 #endif /*__TA_SOCKET_H*/ optee_test-4.3.0/ta/socket/include/user_ta_header_defines.h000066400000000000000000000006551464074351400240460ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2016, Linaro Limited * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #include #define TA_UUID TA_SOCKET_UUID #define TA_FLAGS ( TA_FLAG_EXEC_DDR | TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /*USER_TA_HEADER_DEFINES_H*/ optee_test-4.3.0/ta/socket/sub.mk000066400000000000000000000000611464074351400167140ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c optee_test-4.3.0/ta/socket/ta_entry.c000066400000000000000000000160401464074351400175670ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2016, Linaro Limited * All rights reserved. */ #include #include #include #include #include #include #include #include TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } void TA_DestroyEntryPoint(void) { } TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types, TEE_Param params[4], void **session_ctx) { (void)param_types; (void)params; (void)session_ctx; return TEE_SUCCESS; } void TA_CloseSessionEntryPoint(void *session_ctx) { (void)session_ctx; } struct sock_handle { TEE_iSocketHandle ctx; TEE_iSocket *socket; }; static TEE_Result ta_entry_tcp_open(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; struct sock_handle h = { }; TEE_tcpSocket_Setup setup = { }; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_VALUE_OUTPUT); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[2].memref.size < sizeof(struct sock_handle)) { params[2].memref.size = sizeof(struct sock_handle); return TEE_ERROR_SHORT_BUFFER; } setup.ipVersion = params[0].value.a; setup.server_port = params[0].value.b; setup.server_addr = strndup(params[1].memref.buffer, params[1].memref.size); if (!setup.server_addr) return TEE_ERROR_OUT_OF_MEMORY; h.socket = TEE_tcpSocket; res = h.socket->open(&h.ctx, &setup, ¶ms[3].value.a); free(setup.server_addr); if (res == TEE_SUCCESS) { memcpy(params[2].memref.buffer, &h, sizeof(h)); params[2].memref.size = sizeof(h); } return res; } static TEE_Result ta_entry_udp_open(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; struct sock_handle h = { }; TEE_udpSocket_Setup setup = { }; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_VALUE_OUTPUT); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[2].memref.size < sizeof(struct sock_handle)) { params[2].memref.size = sizeof(struct sock_handle); return TEE_ERROR_SHORT_BUFFER; } setup.ipVersion = params[0].value.a; setup.server_port = params[0].value.b; setup.server_addr = strndup(params[1].memref.buffer, params[1].memref.size); if (!setup.server_addr) return TEE_ERROR_OUT_OF_MEMORY; h.socket = TEE_udpSocket; res = h.socket->open(&h.ctx, &setup, ¶ms[3].value.a); free(setup.server_addr); if (res == TEE_SUCCESS) { memcpy(params[2].memref.buffer, &h, sizeof(h)); params[2].memref.size = sizeof(h); } return res; } static TEE_Result ta_entry_close(uint32_t param_types, TEE_Param params[4]) { struct sock_handle *h = NULL; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size != sizeof(struct sock_handle)) return TEE_ERROR_BAD_PARAMETERS; h = params[0].memref.buffer; return h->socket->close(h->ctx); } static TEE_Result ta_entry_send(uint32_t param_types, TEE_Param params[4]) { struct sock_handle *h = NULL; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size != sizeof(*h)) return TEE_ERROR_BAD_PARAMETERS; h = params[0].memref.buffer; params[2].value.b = params[1].memref.size; return h->socket->send(h->ctx, params[1].memref.buffer, ¶ms[2].value.b, params[2].value.a); } static TEE_Result ta_entry_recv(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_SUCCESS; struct sock_handle *h = NULL; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE); uint32_t sz = 0; if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size != sizeof(struct sock_handle)) return TEE_ERROR_BAD_PARAMETERS; h = params[0].memref.buffer; sz = params[1].memref.size; res = h->socket->recv(h->ctx, params[1].memref.buffer, &sz, params[2].value.a); params[1].memref.size = sz; return res; } static TEE_Result ta_entry_error(uint32_t param_types, TEE_Param params[4]) { struct sock_handle *h = NULL; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size != sizeof(struct sock_handle)) return TEE_ERROR_BAD_PARAMETERS; h = params[0].memref.buffer; params[1].value.a = h->socket->error(h->ctx); return TEE_SUCCESS; } static TEE_Result ta_entry_ioctl(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_SUCCESS; struct sock_handle *h = NULL; uint32_t req_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE); uint32_t sz = 0; if (param_types != req_param_types) { EMSG("got param_types 0x%x, expected 0x%x", param_types, req_param_types); return TEE_ERROR_BAD_PARAMETERS; } if (params[0].memref.size != sizeof(struct sock_handle)) return TEE_ERROR_BAD_PARAMETERS; h = params[0].memref.buffer; sz = params[1].memref.size; res = h->socket->ioctl(h->ctx, params[2].value.a, params[1].memref.buffer, &sz); params[1].memref.size = sz; return res; } TEE_Result TA_InvokeCommandEntryPoint(void *session_ctx, uint32_t cmd_id, uint32_t param_types, TEE_Param params[4]) { (void)session_ctx; switch (cmd_id) { case TA_SOCKET_CMD_TCP_OPEN: return ta_entry_tcp_open(param_types, params); case TA_SOCKET_CMD_UDP_OPEN: return ta_entry_udp_open(param_types, params); case TA_SOCKET_CMD_CLOSE: return ta_entry_close(param_types, params); case TA_SOCKET_CMD_SEND: return ta_entry_send(param_types, params); case TA_SOCKET_CMD_RECV: return ta_entry_recv(param_types, params); case TA_SOCKET_CMD_ERROR: return ta_entry_error(param_types, params); case TA_SOCKET_CMD_IOCTL: return ta_entry_ioctl(param_types, params); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/storage/000077500000000000000000000000001464074351400157515ustar00rootroot00000000000000optee_test-4.3.0/ta/storage/Android.mk000066400000000000000000000001601464074351400176570ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := b689f2a7-8adf-477a-9f99-32e90c0ad0a2.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/storage/Makefile000066400000000000000000000001061464074351400174060ustar00rootroot00000000000000BINARY = b689f2a7-8adf-477a-9f99-32e90c0ad0a2 include ../ta_common.mk optee_test-4.3.0/ta/storage/include/000077500000000000000000000000001464074351400173745ustar00rootroot00000000000000optee_test-4.3.0/ta/storage/include/storage.h000066400000000000000000000042151464074351400212130ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef STORAGE_H #define STORAGE_H #include TEE_Result ta_storage_cmd_open(uint32_t command, uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_create(uint32_t command, uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_create_overwrite(uint32_t command, uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_close(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_read(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_write(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_seek(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_unlink(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_rename(uint32_t command, uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_trunc(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_alloc_enum(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_free_enum(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_reset_enum(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_start_enum(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_next_enum(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_key_in_persistent(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_loop(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_restrict_usage(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_alloc_obj(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_free_obj(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_reset_obj(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_get_obj_info(uint32_t param_types, TEE_Param params[4]); TEE_Result ta_storage_cmd_clear_storage(uint32_t param_types, TEE_Param params[4]); #endif /*STORAGE_H */ optee_test-4.3.0/ta/storage/include/user_ta_header_defines.h000066400000000000000000000010351464074351400242130ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #define TA_UUID TA_STORAGE_UUID /* * This is important to have TA_FLAG_SINGLE_INSTANCE && !TA_FLAG_MULTI_SESSION * as it is used by the ytest */ #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR | \ TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (64 * 1024) #endif optee_test-4.3.0/ta/storage/storage.c000066400000000000000000000460651464074351400175740ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include "storage.h" #include "ta_storage.h" #include #include #include #include #define ASSERT_PARAM_TYPE(pt) \ do { \ if ((pt) != param_types) \ return TEE_ERROR_BAD_PARAMETERS; \ } while (0) #define VAL2HANDLE(v) (void *)(uintptr_t)(v) TEE_Result ta_storage_cmd_open(uint32_t command, uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_ObjectHandle o = TEE_HANDLE_NULL; void *object_id = NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE)); switch (command) { case TA_STORAGE_CMD_OPEN: if (params[0].memref.buffer) { object_id = TEE_Malloc(params[0].memref.size, 0); if (!object_id) return TEE_ERROR_OUT_OF_MEMORY; TEE_MemMove(object_id, params[0].memref.buffer, params[0].memref.size); } break; case TA_STORAGE_CMD_OPEN_ID_IN_SHM: object_id = params[0].memref.buffer; break; default: return TEE_ERROR_NOT_SUPPORTED; } res = TEE_OpenPersistentObject(params[2].value.a, object_id, params[0].memref.size, params[1].value.a, &o); params[1].value.b = (uintptr_t)o; if (command == TA_STORAGE_CMD_OPEN) TEE_Free(object_id); return res; } TEE_Result ta_storage_cmd_create(uint32_t command, uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_ObjectHandle o = TEE_HANDLE_NULL; void *object_id = NULL; TEE_ObjectHandle ref_handle = TEE_HANDLE_NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT)); switch (command) { case TA_STORAGE_CMD_CREATE: if (params[0].memref.buffer) { object_id = TEE_Malloc(params[0].memref.size, 0); if (!object_id) return TEE_ERROR_OUT_OF_MEMORY; TEE_MemMove(object_id, params[0].memref.buffer, params[0].memref.size); } break; case TA_STORAGE_CMD_CREATE_ID_IN_SHM: object_id = params[0].memref.buffer; break; default: return TEE_ERROR_NOT_SUPPORTED; } ref_handle = (TEE_ObjectHandle)(uintptr_t)params[2].value.a; res = TEE_CreatePersistentObject(params[2].value.b, object_id, params[0].memref.size, params[1].value.a, ref_handle, params[3].memref.buffer, params[3].memref.size, &o); if (command == TA_STORAGE_CMD_CREATE) TEE_Free(object_id); params[1].value.b = (uintptr_t)o; return res; } TEE_Result ta_storage_cmd_create_overwrite(uint32_t command, uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_ObjectHandle o = TEE_HANDLE_NULL; void *object_id = NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); switch (command) { case TA_STORAGE_CMD_CREATE_OVERWRITE: object_id = TEE_Malloc(params[0].memref.size, 0); if (!object_id) return TEE_ERROR_OUT_OF_MEMORY; TEE_MemMove(object_id, params[0].memref.buffer, params[0].memref.size); break; case TA_STORAGE_CMD_CREATEOVER_ID_IN_SHM: object_id = params[0].memref.buffer; break; default: return TEE_ERROR_NOT_SUPPORTED; } res = TEE_CreatePersistentObject(params[1].value.a, object_id, params[0].memref.size, TEE_DATA_FLAG_OVERWRITE, NULL, NULL, 0, &o); TEE_CloseObject(o); if (command == TA_STORAGE_CMD_CREATE_OVERWRITE) TEE_Free(object_id); return res; } TEE_Result ta_storage_cmd_close(uint32_t param_types, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_CloseObject((TEE_ObjectHandle)(uintptr_t)params[0].value.a); return TEE_SUCCESS; } TEE_Result ta_storage_cmd_read(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[1].value.a); TEE_Result res = TEE_SUCCESS; size_t sz = 0; void *b0 = NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); b0 = TEE_Malloc(params[0].memref.size, 0); if (!b0) return TEE_ERROR_OUT_OF_MEMORY; sz = params[1].value.b; res = TEE_ReadObjectData(o, b0, params[0].memref.size, &sz); params[1].value.b = sz; if (!res) TEE_MemMove(params[0].memref.buffer, b0, params[0].memref.size); TEE_Free(b0); return res; } TEE_Result ta_storage_cmd_write(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[1].value.a); TEE_Result res = TEE_SUCCESS; void *b0 = NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); b0 = TEE_Malloc(params[0].memref.size, 0); if (!b0) return TEE_ERROR_OUT_OF_MEMORY; TEE_MemMove(b0, params[0].memref.buffer, params[0].memref.size); res = TEE_WriteObjectData(o, b0, params[0].memref.size); TEE_Free(b0); return res; } TEE_Result ta_storage_cmd_seek(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_ObjectInfo info; TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); int32_t offs = 0; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); offs = *(int32_t *)¶ms[0].value.b; res = TEE_SeekObjectData(o, offs, params[1].value.a); if (res != TEE_SUCCESS) return res; res = TEE_GetObjectInfo1(o, &info); params[1].value.b = info.dataPosition; return res; } TEE_Result ta_storage_cmd_unlink(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_CloseAndDeletePersistentObject1(o); } TEE_Result ta_storage_cmd_rename(uint32_t command, uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); void *object_id = NULL; TEE_Result res = TEE_ERROR_GENERIC; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); switch (command) { case TA_STORAGE_CMD_RENAME: if (params[0].memref.buffer) { object_id = TEE_Malloc(params[1].memref.size, 0); if (!object_id) return TEE_ERROR_OUT_OF_MEMORY; TEE_MemMove(object_id, params[1].memref.buffer, params[1].memref.size); } break; case TA_STORAGE_CMD_RENAME_ID_IN_SHM: object_id = params[1].memref.buffer; break; default: return TEE_ERROR_NOT_SUPPORTED; } res = TEE_RenamePersistentObject(o, object_id, params[1].memref.size); if (command == TA_STORAGE_CMD_RENAME) TEE_Free(object_id); return res; } TEE_Result ta_storage_cmd_trunc(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_TruncateObjectData(o, params[0].value.b); } TEE_Result ta_storage_cmd_alloc_enum(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_ObjectEnumHandle oe = TEE_HANDLE_NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = TEE_AllocatePersistentObjectEnumerator(&oe); params[0].value.a = (uintptr_t)oe; return res; } TEE_Result ta_storage_cmd_free_enum(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_FreePersistentObjectEnumerator(oe); return TEE_SUCCESS; } TEE_Result ta_storage_cmd_reset_enum(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_ResetPersistentObjectEnumerator(oe); return TEE_SUCCESS; } TEE_Result ta_storage_cmd_start_enum(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_StartPersistentObjectEnumerator(oe, params[0].value.b); } TEE_Result ta_storage_cmd_next_enum(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a); TEE_Result res = TEE_SUCCESS; TEE_ObjectInfo *obj = NULL; void *b2 = NULL; if (TEE_PARAM_TYPE_GET(param_types, 0) != TEE_PARAM_TYPE_VALUE_INPUT) return TEE_ERROR_BAD_PARAMETERS; if (TEE_PARAM_TYPE_GET(param_types, 2) != TEE_PARAM_TYPE_MEMREF_OUTPUT) return TEE_ERROR_BAD_PARAMETERS; if (TEE_PARAM_TYPE_GET(param_types, 3) != TEE_PARAM_TYPE_NONE) return TEE_ERROR_BAD_PARAMETERS; if (params[2].memref.size < TEE_OBJECT_ID_MAX_LEN) return TEE_ERROR_SHORT_BUFFER; if (TEE_PARAM_TYPE_GET(param_types, 1) == TEE_PARAM_TYPE_NONE) obj = NULL; else if (TEE_PARAM_TYPE_GET(param_types, 1) == TEE_PARAM_TYPE_MEMREF_OUTPUT) { if (params[1].memref.size < sizeof(TEE_ObjectInfo)) { params[1].memref.size = sizeof(TEE_ObjectInfo); return TEE_ERROR_SHORT_BUFFER; } params[1].memref.size = sizeof(TEE_ObjectInfo); obj = TEE_Malloc(sizeof(TEE_ObjectInfo), 0); if (!obj) return TEE_ERROR_OUT_OF_MEMORY; } else return TEE_ERROR_BAD_PARAMETERS; b2 = TEE_Malloc(params[2].memref.size, 0); if (!b2) { res = TEE_ERROR_OUT_OF_MEMORY; goto out; } res = TEE_GetNextPersistentObject(oe, obj, b2, ¶ms[2].memref.size); if (res) goto out; TEE_MemMove(params[2].memref.buffer, b2, params[2].memref.size); if (obj) TEE_MemMove(params[1].memref.buffer, obj, sizeof(*obj)); out: TEE_Free(b2); TEE_Free(obj); return res; } static TEE_Result check_obj(TEE_ObjectInfo *o1, TEE_ObjectInfo *o2) { if ((o1->objectType != o2->objectType) || (o1->objectSize != o2->objectSize) || (o1->maxObjectSize != o2->maxObjectSize) || (o1->objectUsage != o2->objectUsage)) return TEE_ERROR_GENERIC; return TEE_SUCCESS; } TEE_Result ta_storage_cmd_key_in_persistent(uint32_t param_types, TEE_Param params[4]) { TEE_Result result = TEE_SUCCESS; TEE_ObjectHandle transient_key = TEE_HANDLE_NULL; TEE_ObjectHandle persistent_key = TEE_HANDLE_NULL; TEE_ObjectHandle key = TEE_HANDLE_NULL; TEE_OperationHandle encrypt_op = TEE_HANDLE_NULL; TEE_ObjectInfo keyInfo; TEE_ObjectInfo keyInfo2; TEE_ObjectInfo keyInfo3; uint32_t alg = TEE_ALG_AES_CBC_NOPAD; void *IV = NULL; size_t IVlen = 16; size_t key_size = 256; uint32_t objectID = 1; uint32_t flags = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ | TEE_DATA_FLAG_SHARE_WRITE; TEE_MemFill(&keyInfo, 0, sizeof(keyInfo)); TEE_MemFill(&keyInfo2, 0, sizeof(keyInfo2)); TEE_MemFill(&keyInfo3, 0, sizeof(keyInfo3)); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); result = TEE_AllocateTransientObject(TEE_TYPE_AES, key_size, &transient_key); if (result != TEE_SUCCESS) { EMSG("Failed to Allocate transient object handle : 0x%x", result); goto cleanup1; } result = TEE_GenerateKey(transient_key, key_size, NULL, 0); if (result != TEE_SUCCESS) { EMSG("Failed to generate a transient key: 0x%x", result); goto cleanup2; } TEE_GetObjectInfo1(transient_key, &keyInfo); result = TEE_CreatePersistentObject(params[0].value.a, &objectID, sizeof(objectID), flags, transient_key, NULL, 0, &persistent_key); if (result != TEE_SUCCESS) { EMSG("Failed to create a persistent key: 0x%x", result); goto cleanup2; } TEE_GetObjectInfo1(persistent_key, &keyInfo2); result = check_obj(&keyInfo, &keyInfo2); if (result != TEE_SUCCESS) { EMSG("keyInfo and keyInfo2 are different"); goto cleanup2; } TEE_CloseAndDeletePersistentObject1(persistent_key); /* Transform the transient object into a persistent object */ result = TEE_CreatePersistentObject(params[0].value.a, &objectID, sizeof(objectID), flags, transient_key, NULL, 0, NULL); if (result != TEE_SUCCESS) { EMSG("Failed to create a persistent key: 0x%x", result); goto cleanup2; } persistent_key = transient_key; transient_key = TEE_HANDLE_NULL; TEE_GetObjectInfo1(persistent_key, &keyInfo2); result = check_obj(&keyInfo, &keyInfo2); if (result != TEE_SUCCESS) { EMSG("keyInfo and keyInfo2 are different"); goto cleanup3; } TEE_CloseObject(persistent_key); result = TEE_OpenPersistentObject(params[0].value.a, &objectID, sizeof(objectID), flags, &key); if (result != TEE_SUCCESS) { EMSG("Failed to open persistent key: 0x%x", result); goto cleanup2; } TEE_GetObjectInfo(key, &keyInfo3); result = check_obj(&keyInfo3, &keyInfo2); if (result != TEE_SUCCESS) { EMSG("keyInfo2 and keyInfo3 are different"); goto cleanup3; } result = TEE_AllocateOperation(&encrypt_op, alg, TEE_MODE_ENCRYPT, keyInfo3.maxObjectSize); if (result != TEE_SUCCESS) { EMSG("Failed to allocate an operation: 0x%x", result); goto cleanup3; } result = TEE_SetOperationKey(encrypt_op, key); if (result != TEE_SUCCESS) { EMSG("Failed to set operation key: 0x%x", result); goto cleanup4; } IV = TEE_Malloc(IVlen, 0); if (!IV) { EMSG("Out of memory for IV."); result = TEE_ERROR_OUT_OF_MEMORY; goto cleanup4; } TEE_CipherInit(encrypt_op, IV, IVlen); TEE_Free(IV); cleanup4: TEE_FreeOperation(encrypt_op); cleanup3: TEE_CloseAndDeletePersistentObject1(key); cleanup2: TEE_FreeTransientObject(transient_key); cleanup1: return result; } TEE_Result ta_storage_cmd_loop(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle object = TEE_HANDLE_NULL; TEE_Result res = TEE_ERROR_GENERIC; int object_id = 0; uint32_t flags = TEE_DATA_FLAG_OVERWRITE | TEE_DATA_FLAG_ACCESS_WRITE_META; int i = 0; (void)params; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); for (i = 0; i < 20; i++) { DMSG("\n\nLOOP : %d", i); object = TEE_HANDLE_NULL; object_id = i; res = TEE_CreatePersistentObject(params[0].value.a, &object_id, sizeof(int), flags, TEE_HANDLE_NULL, NULL, 0, &object); if (res != TEE_SUCCESS) { EMSG("FAIL"); return res; } res = TEE_CloseAndDeletePersistentObject1(object); if (res != TEE_SUCCESS) { EMSG("FAIL"); return res; } } return TEE_SUCCESS; } TEE_Result ta_storage_cmd_restrict_usage(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = TEE_HANDLE_NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); o = (TEE_ObjectHandle)(uintptr_t)params[0].value.a; TEE_RestrictObjectUsage1(o, params[0].value.b); return TEE_SUCCESS; } TEE_Result ta_storage_cmd_alloc_obj(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; TEE_ObjectHandle o = TEE_HANDLE_NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = TEE_AllocateTransientObject(params[0].value.a, params[0].value.b, &o); params[1].value.a = (uint32_t)(uintptr_t)o; return res; } TEE_Result ta_storage_cmd_free_obj(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = TEE_HANDLE_NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); o = (TEE_ObjectHandle)(uintptr_t)params[0].value.a; TEE_FreeTransientObject(o); return TEE_SUCCESS; } TEE_Result ta_storage_cmd_reset_obj(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = TEE_HANDLE_NULL; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); o = (TEE_ObjectHandle)(uintptr_t)params[0].value.a; TEE_ResetTransientObject(o); return TEE_SUCCESS; } TEE_Result ta_storage_cmd_get_obj_info(uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; struct ta_storage_obj_info oi = { }; TEE_ObjectInfo info = { }; TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); if (params[1].memref.size < sizeof(oi)) return TEE_ERROR_SHORT_BUFFER; res = TEE_GetObjectInfo1(o, &info); if (!res) { params[1].memref.size = sizeof(oi); oi.object_type = info.objectType; oi.object_size = info.objectSize; oi.max_object_size = info.maxObjectSize; oi.object_usage = info.objectUsage; oi.data_size = info.dataSize; oi.data_position = info.dataPosition; oi.handle_flags = info.handleFlags; TEE_MemMove(params[1].memref.buffer, &oi, sizeof(oi)); } return res; } static TEE_Result clear_storage(uint32_t storage_id) { TEE_ObjectEnumHandle oe = TEE_HANDLE_NULL; TEE_Result enum_res = TEE_ERROR_GENERIC; TEE_ObjectHandle o = TEE_HANDLE_NULL; TEE_Result res = TEE_ERROR_GENERIC; TEE_UUID __maybe_unused uuid = TA_UUID; TEE_ObjectInfo oi = { }; size_t obj_id_sz = 0; void *obj_id = NULL; size_t i = 0; IMSG("Clearing TA storage (UUID: %pUl, storage ID: 0x%x)", (void *)&uuid, storage_id); res = TEE_AllocatePersistentObjectEnumerator(&oe); if (res) return res; res = TEE_StartPersistentObjectEnumerator(oe, storage_id); if (res == TEE_ERROR_ITEM_NOT_FOUND) { IMSG("No object found"); res = TEE_SUCCESS; goto out; } if (res) goto out; obj_id = TEE_Malloc(TEE_OBJECT_ID_MAX_LEN, 0); if (!obj_id) { res = TEE_ERROR_OUT_OF_MEMORY; goto out; } while (true) { enum_res = TEE_GetNextPersistentObject(oe, &oi, obj_id, &obj_id_sz); if (enum_res == TEE_ERROR_ITEM_NOT_FOUND) break; if (enum_res) { res = enum_res; break; } IMSG("Deleting persistent object #%zu", i); res = TEE_OpenPersistentObject(storage_id, obj_id, obj_id_sz, TEE_DATA_FLAG_ACCESS_WRITE_META, &o); if (res) break; TEE_CloseAndDeletePersistentObject1(o); i++; } out: TEE_FreePersistentObjectEnumerator(oe); TEE_Free(obj_id); return res; } TEE_Result ta_storage_cmd_clear_storage(uint32_t param_types, TEE_Param params[4]) { uint32_t id[] = { TEE_STORAGE_PRIVATE_REE, TEE_STORAGE_PRIVATE_RPMB }; TEE_Result res = TEE_ERROR_GENERIC; size_t i = 0; (void)param_types; (void)params; for (i = 0; i < sizeof(id) / sizeof(id[0]); i++) { res = clear_storage(id[i]); if (res) break; } return res; } optee_test-4.3.0/ta/storage/sub.mk000066400000000000000000000001441464074351400170720ustar00rootroot00000000000000global-incdirs-y += include global-incdirs-y += ../include srcs-y += storage.c srcs-y += ta_entry.c optee_test-4.3.0/ta/storage/ta_entry.c000066400000000000000000000064401464074351400177460ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2014, STMicroelectronics International N.V. * All rights reserved. */ #include #include #include "storage.h" /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[4], void **ppSessionContext) { (void)nParamTypes; (void)pParams; (void)ppSessionContext; return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext) { (void)pSessionContext; } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { (void)pSessionContext; switch (nCommandID) { case TA_STORAGE_CMD_OPEN: case TA_STORAGE_CMD_OPEN_ID_IN_SHM: return ta_storage_cmd_open(nCommandID, nParamTypes, pParams); case TA_STORAGE_CMD_CLOSE: return ta_storage_cmd_close(nParamTypes, pParams); case TA_STORAGE_CMD_READ: return ta_storage_cmd_read(nParamTypes, pParams); case TA_STORAGE_CMD_WRITE: return ta_storage_cmd_write(nParamTypes, pParams); case TA_STORAGE_CMD_CREATE: case TA_STORAGE_CMD_CREATE_ID_IN_SHM: return ta_storage_cmd_create(nCommandID, nParamTypes, pParams); case TA_STORAGE_CMD_CREATE_OVERWRITE: case TA_STORAGE_CMD_CREATEOVER_ID_IN_SHM: return ta_storage_cmd_create_overwrite(nCommandID, nParamTypes, pParams); case TA_STORAGE_CMD_SEEK: return ta_storage_cmd_seek(nParamTypes, pParams); case TA_STORAGE_CMD_UNLINK: return ta_storage_cmd_unlink(nParamTypes, pParams); case TA_STORAGE_CMD_RENAME: case TA_STORAGE_CMD_RENAME_ID_IN_SHM: return ta_storage_cmd_rename(nCommandID, nParamTypes, pParams); case TA_STORAGE_CMD_TRUNC: return ta_storage_cmd_trunc(nParamTypes, pParams); case TA_STORAGE_CMD_ALLOC_ENUM: return ta_storage_cmd_alloc_enum(nParamTypes, pParams); case TA_STORAGE_CMD_FREE_ENUM: return ta_storage_cmd_free_enum(nParamTypes, pParams); case TA_STORAGE_CMD_RESET_ENUM: return ta_storage_cmd_reset_enum(nParamTypes, pParams); case TA_STORAGE_CMD_START_ENUM: return ta_storage_cmd_start_enum(nParamTypes, pParams); case TA_STORAGE_CMD_NEXT_ENUM: return ta_storage_cmd_next_enum(nParamTypes, pParams); case TA_STORAGE_CMD_KEY_IN_PERSISTENT: return ta_storage_cmd_key_in_persistent(nParamTypes, pParams); case TA_STORAGE_CMD_LOOP: return ta_storage_cmd_loop(nParamTypes, pParams); case TA_STORAGE_CMD_RESTRICT_USAGE: return ta_storage_cmd_restrict_usage(nParamTypes, pParams); case TA_STORAGE_CMD_ALLOC_OBJ: return ta_storage_cmd_alloc_obj(nParamTypes, pParams); case TA_STORAGE_CMD_FREE_OBJ: return ta_storage_cmd_free_obj(nParamTypes, pParams); case TA_STORAGE_CMD_RESET_OBJ: return ta_storage_cmd_reset_obj(nParamTypes, pParams); case TA_STORAGE_CMD_GET_OBJ_INFO: return ta_storage_cmd_get_obj_info(nParamTypes, pParams); case TA_STORAGE_CMD_CLEAR_STORAGE: return ta_storage_cmd_clear_storage(nParamTypes, pParams); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/ta/storage2/000077500000000000000000000000001464074351400160335ustar00rootroot00000000000000optee_test-4.3.0/ta/storage2/Android.mk000066400000000000000000000001601464074351400177410ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 731e279e-aafb-4575-a771-38caa6f0cca6.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/storage2/Makefile000066400000000000000000000001061464074351400174700ustar00rootroot00000000000000BINARY = 731e279e-aafb-4575-a771-38caa6f0cca6 include ../ta_common.mk optee_test-4.3.0/ta/storage2/include/000077500000000000000000000000001464074351400174565ustar00rootroot00000000000000optee_test-4.3.0/ta/storage2/include/storage.h000066400000000000000000000000501464074351400212660ustar00rootroot00000000000000#include "../storage/include/storage.h" optee_test-4.3.0/ta/storage2/include/user_ta_header_defines.h000066400000000000000000000007601464074351400243010ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2016, Linaro Limited */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include "ta_storage.h" #define TA_UUID TA_STORAGE2_UUID /* * This is important to have TA_FLAG_SINGLE_INSTANCE && !TA_FLAG_MULTI_SESSION * as it is used by the ytest */ #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR | \ TA_FLAG_SINGLE_INSTANCE) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif optee_test-4.3.0/ta/storage2/storage.c000066400000000000000000000000401464074351400176350ustar00rootroot00000000000000#include "../storage/storage.c" optee_test-4.3.0/ta/storage2/sub.mk000066400000000000000000000001441464074351400171540ustar00rootroot00000000000000global-incdirs-y += include global-incdirs-y += ../include srcs-y += storage.c srcs-y += ta_entry.c optee_test-4.3.0/ta/storage2/ta_entry.c000066400000000000000000000000411464074351400200170ustar00rootroot00000000000000#include "../storage/ta_entry.c" optee_test-4.3.0/ta/storage_benchmark/000077500000000000000000000000001464074351400177635ustar00rootroot00000000000000optee_test-4.3.0/ta/storage_benchmark/Android.mk000066400000000000000000000001601464074351400216710ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := f157cda0-550c-11e5-a6fa-0002a5d5c51b.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/storage_benchmark/Makefile000066400000000000000000000001061464074351400214200ustar00rootroot00000000000000BINARY = f157cda0-550c-11e5-a6fa-0002a5d5c51b include ../ta_common.mk optee_test-4.3.0/ta/storage_benchmark/benchmark.c000066400000000000000000000226041464074351400220650ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #include #include #include #include #define DEFAULT_CHUNK_SIZE (1 << 10) #define DEFAULT_DATA_SIZE (1024) #define SCRAMBLE(x) ((x & 0xff) ^ 0xaa) #define ASSERT_PARAM_TYPE(pt_in, pt_expect) \ do { \ if ((pt_in) != (pt_expect)) \ return TEE_ERROR_BAD_PARAMETERS; \ } while (0) static uint8_t filename[] = "BenchmarkTestFile"; static void fill_buffer(uint8_t *buf, size_t size) { size_t i = 0; if (!buf) return; for (i = 0; i < size; i++) buf[i] = SCRAMBLE(i); } static TEE_Result verify_buffer(uint8_t *buf, size_t size) { size_t i = 0; if (!buf) return TEE_ERROR_BAD_PARAMETERS; for (i = 0; i < size; i++) { uint8_t expect_data = SCRAMBLE(i); if (expect_data != buf[i]) { return TEE_ERROR_CORRUPT_OBJECT; } } return TEE_SUCCESS; } static inline uint32_t tee_time_to_ms(TEE_Time t) { return t.seconds * 1000 + t.millis; } static inline uint32_t get_delta_time_in_ms(TEE_Time start, TEE_Time stop) { return tee_time_to_ms(stop) - tee_time_to_ms(start); } static TEE_Result prepare_test_file(size_t data_size, uint8_t *chunk_buf, size_t chunk_size) { size_t remain_bytes = data_size; TEE_Result res = TEE_SUCCESS; TEE_ObjectHandle object = TEE_HANDLE_NULL; res = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE, filename, sizeof(filename), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_OVERWRITE, NULL, NULL, 0, &object); if (res != TEE_SUCCESS) { EMSG("Failed to create persistent object, res=%#"PRIx32, res); goto exit; } while (remain_bytes) { size_t write_size = 0; if (remain_bytes < chunk_size) write_size = remain_bytes; else write_size = chunk_size; res = TEE_WriteObjectData(object, chunk_buf, write_size); if (res != TEE_SUCCESS) { EMSG("Failed to write data, res=%#"PRIx32, res); goto exit_close_object; } remain_bytes -= write_size; } exit_close_object: TEE_CloseObject(object); exit: return res; } static TEE_Result test_write(TEE_ObjectHandle object, size_t data_size, uint8_t *chunk_buf, size_t chunk_size, uint32_t *spent_time_in_ms) { TEE_Time start_time = { }; TEE_Time stop_time = { }; size_t remain_bytes = data_size; TEE_Result res = TEE_SUCCESS; TEE_GetSystemTime(&start_time); while (remain_bytes) { size_t write_size = 0; DMSG("Write data, remain bytes: %zu", remain_bytes); if (chunk_size > remain_bytes) write_size = remain_bytes; else write_size = chunk_size; res = TEE_WriteObjectData(object, chunk_buf, write_size); if (res != TEE_SUCCESS) { EMSG("Failed to write data, res=%#"PRIx32, res); goto exit; } remain_bytes -= write_size; } TEE_GetSystemTime(&stop_time); *spent_time_in_ms = get_delta_time_in_ms(start_time, stop_time); IMSG("start: %"PRIu32".%"PRIu32"(s), stop: %"PRIu32".%"PRIu32"(s), delta: %"PRIu32"(ms)", start_time.seconds, start_time.millis, stop_time.seconds, stop_time.millis, *spent_time_in_ms); exit: return res; } static TEE_Result test_read(TEE_ObjectHandle object, size_t data_size, uint8_t *chunk_buf, size_t chunk_size, uint32_t *spent_time_in_ms) { TEE_Time start_time = { }; TEE_Time stop_time = { }; size_t remain_bytes = data_size; TEE_Result res = TEE_SUCCESS; size_t read_bytes = 0; TEE_GetSystemTime(&start_time); while (remain_bytes) { size_t read_size = 0; DMSG("Read data, remain bytes: %zu", remain_bytes); if (remain_bytes < chunk_size) read_size = remain_bytes; else read_size = chunk_size; res = TEE_ReadObjectData(object, chunk_buf, read_size, &read_bytes); if (res != TEE_SUCCESS) { EMSG("Failed to read data, res=%#"PRIx32, res); goto exit; } remain_bytes -= read_size; } TEE_GetSystemTime(&stop_time); *spent_time_in_ms = get_delta_time_in_ms(start_time, stop_time); IMSG("start: %"PRIu32".%"PRIu32"(s), stop: %"PRIu32".%"PRIu32"(s), delta: %"PRIu32"(ms)", start_time.seconds, start_time.millis, stop_time.seconds, stop_time.millis, *spent_time_in_ms); exit: return res; } static TEE_Result test_rewrite(TEE_ObjectHandle object, size_t data_size, uint8_t *chunk_buf, size_t chunk_size, uint32_t *spent_time_in_ms) { TEE_Time start_time = { }; TEE_Time stop_time = { }; size_t remain_bytes = data_size; TEE_Result res = TEE_SUCCESS; size_t read_bytes = 0; TEE_GetSystemTime(&start_time); while (remain_bytes) { size_t write_size = 0; int32_t negative_chunk_size = 0; if (remain_bytes < chunk_size) write_size = remain_bytes; else write_size = chunk_size; negative_chunk_size = -(int32_t)write_size; /* Read a chunk */ res = TEE_ReadObjectData(object, chunk_buf, write_size, &read_bytes); if (res != TEE_SUCCESS) { EMSG("Failed to read data, res=%#"PRIx32, res); goto exit; } if (read_bytes != write_size) { EMSG("Partial data read, bytes=%zu", read_bytes); res = TEE_ERROR_CORRUPT_OBJECT; goto exit; } /* Seek to the position before read */ res = TEE_SeekObjectData(object, negative_chunk_size, TEE_DATA_SEEK_CUR); if (res != TEE_SUCCESS) { EMSG("Failed to seek to previous offset"); goto exit; } /* Write a chunk*/ res = TEE_WriteObjectData(object, chunk_buf, write_size); if (res != TEE_SUCCESS) { EMSG("Failed to write data, res=%#"PRIx32, res); goto exit; } remain_bytes -= write_size; } TEE_GetSystemTime(&stop_time); *spent_time_in_ms = get_delta_time_in_ms(start_time, stop_time); IMSG("start: %"PRIu32".%"PRIu32"(s), stop: %"PRIu32".%"PRIu32"(s), delta: %"PRIu32"(ms)", start_time.seconds, start_time.millis, stop_time.seconds, stop_time.millis, *spent_time_in_ms); exit: return res; } static TEE_Result verify_file_data(TEE_ObjectHandle object, size_t data_size, uint8_t *chunk_buf, size_t chunk_size) { TEE_Result res = TEE_ERROR_GENERIC; size_t tmp_data_size = data_size; res = TEE_SeekObjectData(object, 0, TEE_DATA_SEEK_SET); if (res != TEE_SUCCESS) { EMSG("Failed to seek to offset 0"); goto exit; } TEE_MemFill(chunk_buf, 0, chunk_size); tmp_data_size = data_size; while (tmp_data_size > 0) { size_t read_bytes = 0; res = TEE_ReadObjectData(object, chunk_buf, chunk_size, &read_bytes); if (res != TEE_SUCCESS) { EMSG("Failed to read data, res=%#"PRIx32, res); goto exit; } if (read_bytes != chunk_size) { EMSG("Data size not match"); res = TEE_ERROR_CORRUPT_OBJECT; goto exit; } res = verify_buffer(chunk_buf, chunk_size); if (res != TEE_SUCCESS) { EMSG("Verify data failed, res=%#"PRIx32, res); goto exit; } tmp_data_size -= chunk_size; } exit: return res; } static TEE_Result ta_stroage_benchmark_chunk_access_test(uint32_t nCommandID, uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; size_t data_size = 0; size_t chunk_size = 0; TEE_ObjectHandle object = TEE_HANDLE_NULL; uint8_t *chunk_buf = NULL; uint32_t *spent_time_in_ms = ¶ms[2].value.a; bool do_verify = false; ASSERT_PARAM_TYPE(param_types, TEE_PARAM_TYPES( TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE)); data_size = params[0].value.a; chunk_size = params[0].value.b; do_verify = params[1].value.a; if (data_size == 0) data_size = DEFAULT_DATA_SIZE; if (chunk_size == 0) chunk_size = DEFAULT_CHUNK_SIZE; IMSG("command id: %u, test data size: %zd, chunk size: %zd", nCommandID, data_size, chunk_size); chunk_buf = TEE_Malloc(chunk_size, TEE_MALLOC_FILL_ZERO); if (!chunk_buf) { EMSG("Failed to allocate memory"); res = TEE_ERROR_OUT_OF_MEMORY; goto exit; } fill_buffer(chunk_buf, chunk_size); res = prepare_test_file(data_size, chunk_buf, chunk_size); if (res != TEE_SUCCESS) { EMSG("Failed to create test file, res=%#"PRIx32, res); goto exit_free_chunk_buf; } res = TEE_OpenPersistentObject(TEE_STORAGE_PRIVATE, filename, sizeof(filename), TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_WRITE_META, &object); if (res != TEE_SUCCESS) { EMSG("Failed to open persistent object, res=%#"PRIx32, res); goto exit_remove_object; } switch (nCommandID) { case TA_STORAGE_BENCHMARK_CMD_TEST_READ: res = test_read(object, data_size, chunk_buf, chunk_size, spent_time_in_ms); break; case TA_STORAGE_BENCHMARK_CMD_TEST_WRITE: res = test_write(object, data_size, chunk_buf, chunk_size, spent_time_in_ms); break; case TA_STORAGE_BENCHMARK_CMD_TEST_REWRITE: res = test_rewrite(object, data_size, chunk_buf, chunk_size, spent_time_in_ms); break; default: res = TEE_ERROR_BAD_PARAMETERS; } if (res != TEE_SUCCESS) goto exit_remove_object; if (do_verify) res = verify_file_data(object, data_size, chunk_buf, chunk_size); exit_remove_object: TEE_CloseAndDeletePersistentObject1(object); exit_free_chunk_buf: TEE_Free(chunk_buf); exit: return res; } TEE_Result ta_storage_benchmark_cmd_handler(uint32_t nCommandID, uint32_t param_types, TEE_Param params[4]) { TEE_Result res = TEE_ERROR_GENERIC; switch (nCommandID) { case TA_STORAGE_BENCHMARK_CMD_TEST_READ: case TA_STORAGE_BENCHMARK_CMD_TEST_WRITE: case TA_STORAGE_BENCHMARK_CMD_TEST_REWRITE: res = ta_stroage_benchmark_chunk_access_test(nCommandID, param_types, params); break; default: res = TEE_ERROR_BAD_PARAMETERS; } return res; } optee_test-4.3.0/ta/storage_benchmark/include/000077500000000000000000000000001464074351400214065ustar00rootroot00000000000000optee_test-4.3.0/ta/storage_benchmark/include/storage_benchmark.h000066400000000000000000000005211464074351400252330ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef STORAGE_BENCHMARK_H #define STORAGE_BENCHMARK_H #include TEE_Result ta_storage_benchmark_cmd_handler(uint32_t nCommandID, uint32_t param_types, TEE_Param params[4]); #endif /*STORAGE_BENCHMARK_H */ optee_test-4.3.0/ta/storage_benchmark/include/ta_storage_benchmark.h000066400000000000000000000007411464074351400257230ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef TA_STORAGE_BENCHMARK_H #define TA_STORAGE_BENCHMARK_H #define TA_STORAGE_BENCHMARK_UUID { 0xf157cda0, 0x550c, 0x11e5,\ { 0xa6, 0xfa, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } } enum storage_benchmark_cmd { TA_STORAGE_BENCHMARK_CMD_TEST_READ, TA_STORAGE_BENCHMARK_CMD_TEST_WRITE, TA_STORAGE_BENCHMARK_CMD_TEST_REWRITE, }; #endif /* TA_STORAGE_BENCHMARK_H */ optee_test-4.3.0/ta/storage_benchmark/include/user_ta_header_defines.h000066400000000000000000000006101464074351400262230ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include "ta_storage_benchmark.h" #define TA_UUID TA_STORAGE_BENCHMARK_UUID #define TA_FLAGS (TA_FLAG_USER_MODE | TA_FLAG_EXEC_DDR) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif optee_test-4.3.0/ta/storage_benchmark/sub.mk000066400000000000000000000001071464074351400211030ustar00rootroot00000000000000global-incdirs-y += include srcs-y += benchmark.c srcs-y += ta_entry.c optee_test-4.3.0/ta/storage_benchmark/ta_entry.c000066400000000000000000000021261464074351400217550ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2015, Linaro Limited * All rights reserved. */ #include #include #include /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes, TEE_Param pParams[4], void **ppSessionContext) { (void)nParamTypes; (void)pParams; (void)ppSessionContext; return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext) { (void)pSessionContext; } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { (void)pSessionContext; return ta_storage_benchmark_cmd_handler(nCommandID, nParamTypes, pParams); } optee_test-4.3.0/ta/subkey1/000077500000000000000000000000001464074351400156705ustar00rootroot00000000000000optee_test-4.3.0/ta/subkey1/Makefile000066400000000000000000000003661464074351400173350ustar00rootroot00000000000000BINARY = 5c206987-16a3-59cc-ab0f-64b9cfc9e758 TA_SIGN_KEY = ../mid_level_subkey.pem TA_SUBKEY_BIN = ../mid_level_subkey.bin TA_SUBKEY_ARGS = --subkey $(TA_SUBKEY_BIN) --name subkey1_ta TA_SUBKEY_DEPS = $(TA_SUBKEY_BIN) include ../ta_common.mk optee_test-4.3.0/ta/subkey1/include/000077500000000000000000000000001464074351400173135ustar00rootroot00000000000000optee_test-4.3.0/ta/subkey1/include/ta_subkey1.h000066400000000000000000000004151464074351400215330ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2022, Linaro Limited */ #ifndef TA_SUBKEY1_H #define TA_SUBKEY1_H #define TA_SUBKEY1_UUID { 0x5c206987, 0x16a3, 0x59cc, \ { 0xab, 0x0f, 0x64, 0xb9, 0xcf, 0xc9, 0xe7, 0x58 } } #endif /*TA_SUBKEY1_H */ optee_test-4.3.0/ta/subkey1/include/user_ta_header_defines.h000066400000000000000000000006021464074351400241310ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2022, Linaro Limited */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #include #define TA_UUID TA_SUBKEY1_UUID #define TA_FLAGS (TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (2 * 1024) #endif /*USER_TA_HEADER_DEFINES_H*/ optee_test-4.3.0/ta/subkey1/sub.mk000066400000000000000000000000611464074351400170070ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c optee_test-4.3.0/ta/subkey1/ta_entry.c000066400000000000000000000012521464074351400176610ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2022, Linaro Limited */ #include #include TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } void TA_DestroyEntryPoint(void) { } TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types __unused, TEE_Param params[4] __unused, void **session_ctx __unused) { return TEE_SUCCESS; } void TA_CloseSessionEntryPoint(void *session_ctx __unused) { } TEE_Result TA_InvokeCommandEntryPoint(void *session_ctx __unused, uint32_t cmd_id __unused, uint32_t param_types __unused, TEE_Param params[4] __unused) { return TEE_SUCCESS; } optee_test-4.3.0/ta/subkey2/000077500000000000000000000000001464074351400156715ustar00rootroot00000000000000optee_test-4.3.0/ta/subkey2/Makefile000066400000000000000000000003441464074351400173320ustar00rootroot00000000000000BINARY = a720ccbb-51da-417d-b82e-e5445d474a7a TA_SIGN_KEY = ../identity_subkey2.pem TA_SUBKEY_BIN = ../identity_subkey2.bin TA_SUBKEY_ARGS = --subkey $(TA_SUBKEY_BIN) TA_SUBKEY_DEPS = $(TA_SUBKEY_BIN) include ../ta_common.mk optee_test-4.3.0/ta/subkey2/include/000077500000000000000000000000001464074351400173145ustar00rootroot00000000000000optee_test-4.3.0/ta/subkey2/include/ta_subkey2.h000066400000000000000000000004151464074351400215350ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021, Linaro Limited */ #ifndef TA_SUBKEY2_H #define TA_SUBKEY2_H #define TA_SUBKEY2_UUID { 0xa720ccbb, 0x51da, 0x417d, \ { 0xb8, 0x2e, 0xe5, 0x44, 0x5d, 0x47, 0x4a, 0x7a } } #endif /*TA_SUBKEY2_H */ optee_test-4.3.0/ta/subkey2/include/user_ta_header_defines.h000066400000000000000000000006021464074351400241320ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2022, Linaro Limited */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #include #define TA_UUID TA_SUBKEY2_UUID #define TA_FLAGS (TA_FLAG_MULTI_SESSION) #define TA_STACK_SIZE (2 * 1024) #define TA_DATA_SIZE (2 * 1024) #endif /*USER_TA_HEADER_DEFINES_H*/ optee_test-4.3.0/ta/subkey2/sub.mk000066400000000000000000000000611464074351400170100ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c optee_test-4.3.0/ta/subkey2/ta_entry.c000066400000000000000000000012521464074351400176620ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2022, Linaro Limited */ #include #include TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } void TA_DestroyEntryPoint(void) { } TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types __unused, TEE_Param params[4] __unused, void **session_ctx __unused) { return TEE_SUCCESS; } void TA_CloseSessionEntryPoint(void *session_ctx __unused) { } TEE_Result TA_InvokeCommandEntryPoint(void *session_ctx __unused, uint32_t cmd_id __unused, uint32_t param_types __unused, TEE_Param params[4] __unused) { return TEE_SUCCESS; } optee_test-4.3.0/ta/subkey_notes.txt000066400000000000000000000050721464074351400175640ustar00rootroot00000000000000Subkey ====== A TA or a subkey can be signed with a subkey instead of the root key. Here we're trying to describe the relationship between the different subkeys and keys used for the subkey test TAs. We start with a two level subkey hierachy to be able to test more when the subkey chain consist of more than a single subkey signed with the root key. The relationship of the different subkeys and TAs are as follows: root_key |-- identity_subkey2 | `-- subkey2_ta `-- top_level_subkey `-- mid_level_subkey `-- subkey1_ta The keys themselves where generated using: openssl genrsa -out top_level_subkey.pem openssl genrsa -out mid_level_subkey.pem openssl genrsa -out identity_subkey2.pem The top level subkey is signed with the root key using (where the UUID is generated): ../../optee_os/scripts/sign_encrypt.py sign-subkey \ --uuid f04fa996-148a-453c-b037-1dcfbad120a6 \ --key ../../optee_os/keys/default_ta.pem --in top_level_subkey.pem \ --out top_level_subkey.bin --max-depth 4 --name-size 64 \ --subkey-version 1 The mid level subkey has to have a UUID in the namespace of the top level level subkey. The UUID is determined as UUIDv5_SHA512(f04fa996-148a-453c-b037-1dcfbad120a6, "mid_level_subkey") = 1a5948c5-1aa0-518c-86f4-be6f6a057b16 where UUIDv5_SHA512() denotes the UUIDv5 scheme with SHA512 used instead of SHA1 and truncated to 20 bytes The sign script can do this with: ../../optee_os/scripts/sign_encrypt.py subkey-uuid --in top_level_subkey.bin \ --name mid_level_subkey Subkey UUID: f04fa996-148a-453c-b037-1dcfbad120a6 Next subkey UUID: 1a5948c5-1aa0-518c-86f4-be6f6a057b16 The mid level subkey is signed using: ../../optee_os/scripts/sign_encrypt.py sign-subkey \ --uuid 1a5948c5-1aa0-518c-86f4-be6f6a057b16 \ --key top_level_subkey.pem --subkey top_level_subkey.bin \ --name-size 64 --subkey-version 1 \ --name mid_level_subkey \ --in mid_level_subkey.pem --out mid_level_subkey.bin The UUID of subkey1 TA is calculated using: ../../optee_os/scripts/sign_encrypt.py subkey-uuid --in mid_level_subkey.bin \ --name subkey1_ta Subkey UUID: f04fa996-148a-453c-b037-1dcfbad120a6 Subkey UUID: 1a5948c5-1aa0-518c-86f4-be6f6a057b16 Next subkey UUID: 5c206987-16a3-59cc-ab0f-64b9cfc9e758 Subkey1 TA is signed as part of the build process. The identity_subkey2 subkey is signed using (where the UUID is generated): ../../optee_os/scripts/sign_encrypt.py sign-subkey \ --uuid a720ccbb-51da-417d-b82e-e5445d474a7a \ --key ../../optee_os/keys/default_ta.pem --in identity_subkey2.pem \ --out identity_subkey2.bin --max-depth 0 --name-size 0 \ --subkey-version 1 optee_test-4.3.0/ta/supp_plugin/000077500000000000000000000000001464074351400166525ustar00rootroot00000000000000optee_test-4.3.0/ta/supp_plugin/Android.mk000066400000000000000000000001601464074351400205600ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := 380231ac-fb99-47ad-a689-9e017eb6e78a.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/supp_plugin/Makefile000066400000000000000000000001061464074351400203070ustar00rootroot00000000000000BINARY = 380231ac-fb99-47ad-a689-9e017eb6e78a include ../ta_common.mk optee_test-4.3.0/ta/supp_plugin/include/000077500000000000000000000000001464074351400202755ustar00rootroot00000000000000optee_test-4.3.0/ta/supp_plugin/include/ta_supp_plugin.h000066400000000000000000000010761464074351400235030ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021 Open Mobile Platform LLC */ #ifndef TA_SUPP_PLUGIN_H #define TA_SUPP_PLUGIN_H #define TA_SUPP_PLUGIN_UUID { 0x380231ac, 0xfb99, 0x47ad, \ { 0xa6, 0x89, 0x9e, 0x01, 0x7e, 0xb6, 0xe7, 0x8a } } #define TA_SUPP_PLUGIN_CMD_PASS_VALUES 0 #define TA_SUPP_PLUGIN_CMD_WRITE_ARR 1 #define TA_SUPP_PLUGIN_CMD_GET_ARR 2 #define TA_SUPP_PLUGIN_CMD_BAD_UUID 3 #define TA_SUPP_PLUGIN_CMD_BAD_IN_DATA 4 #define TA_SUPP_PLUGIN_CMD_BAD_IN_LEN 5 #define TA_SUPP_PLUGIN_CMD_UNKNOWN_UUID 6 #endif /* TA_SUPP_PLUGIN_H */ optee_test-4.3.0/ta/supp_plugin/include/user_ta_header_defines.h000066400000000000000000000006001464074351400251110ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2021 Open Mobile Platform LLC */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #include #define TA_UUID TA_SUPP_PLUGIN_UUID #define TA_FLAGS 0 #define TA_STACK_SIZE (8 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/supp_plugin/sub.mk000066400000000000000000000001441464074351400177730ustar00rootroot00000000000000global-incdirs-y += include global-incdirs-y += ../../host/supp_plugin/include srcs-y += ta_entry.c optee_test-4.3.0/ta/supp_plugin/ta_entry.c000066400000000000000000000105121464074351400206420ustar00rootroot00000000000000//SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2021 Open Mobile Platform LLC */ #include #include #include #include #include #include #include #include #include static const TEE_UUID uuid = TEST_PLUGIN_UUID; TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } void TA_DestroyEntryPoint(void) { } TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes __unused, TEE_Param pParams[4] __unused, void **ppSessionContext __unused) { /* check the plugin was loaded */ return tee_invoke_supp_plugin(&uuid, TEST_PLUGIN_CMD_PING, 0, NULL, 0, NULL); } void TA_CloseSessionEntryPoint(void *pSessionContext __unused) { } static TEE_Result pass_values(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); TEE_Result res = TEE_ERROR_GENERIC; size_t outlen = 0; struct add_op { uint32_t a; uint32_t b; } values = { 0 }; if (exp_pt != param_types) return TEE_ERROR_BAD_PARAMETERS; values.a = params[0].value.a; values.b = params[0].value.b; res = tee_invoke_supp_plugin(&uuid, TEST_PLUGIN_CMD_PASS_VALUES, params[1].value.a, (void *)&values, sizeof(struct add_op), &outlen); params[0].value.a = values.a; return res; } static TEE_Result write_array(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); TEE_Result res = TEE_ERROR_GENERIC; size_t outlen = 0; uint8_t *d = params[0].memref.buffer; if (exp_pt != param_types) return TEE_ERROR_BAD_PARAMETERS; res = tee_invoke_supp_plugin(&uuid, TEST_PLUGIN_CMD_WRITE_ARR, 0, params[0].memref.buffer, params[0].memref.size, &outlen); params[1].value.a = d[0]; return res; } static TEE_Result get_array(uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); TEE_Result res = TEE_ERROR_GENERIC; size_t outlen = 0; if (exp_pt != param_types) return TEE_ERROR_BAD_PARAMETERS; res = tee_invoke_supp_plugin(&uuid, TEST_PLUGIN_CMD_GET_ARR, 0, params[0].memref.buffer, params[0].memref.size, &outlen); params[1].value.a = (uint32_t)outlen; return res; } static TEE_Result bad_input_uuid(uint32_t param_types __unused, TEE_Param params[TEE_NUM_PARAMS] __unused) { char data[32] = { }; size_t inlen = sizeof(data); return tee_invoke_supp_plugin(NULL, 0, 0, data, inlen, NULL); } static TEE_Result bad_input_data(uint32_t param_types __unused, TEE_Param params[TEE_NUM_PARAMS] __unused) { return tee_invoke_supp_plugin(&uuid, 0, 0, NULL, 10, NULL); } static TEE_Result bad_input_inlen(uint32_t param_types __unused, TEE_Param params[TEE_NUM_PARAMS] __unused) { char data[32] = { }; return tee_invoke_supp_plugin(&uuid, 0, 0, data, 0, NULL); } static TEE_Result call_unknown_plugin(uint32_t param_types __unused, TEE_Param params[TEE_NUM_PARAMS] __unused) { const TEE_UUID nulluuid = { }; char data[32] = { }; size_t inlen = sizeof(data); return tee_invoke_supp_plugin(&nulluuid, 0, 0, data, inlen, NULL); } TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext __unused, uint32_t nCommandID, uint32_t nParamTypes, TEE_Param pParams[4]) { switch (nCommandID) { case TA_SUPP_PLUGIN_CMD_PASS_VALUES: return pass_values(nParamTypes, pParams); case TA_SUPP_PLUGIN_CMD_WRITE_ARR: return write_array(nParamTypes, pParams); case TA_SUPP_PLUGIN_CMD_GET_ARR: return get_array(nParamTypes, pParams); case TA_SUPP_PLUGIN_CMD_BAD_UUID: return bad_input_uuid(nParamTypes, pParams); case TA_SUPP_PLUGIN_CMD_BAD_IN_DATA: return bad_input_data(nParamTypes, pParams); case TA_SUPP_PLUGIN_CMD_BAD_IN_LEN: return bad_input_inlen(nParamTypes, pParams); case TA_SUPP_PLUGIN_CMD_UNKNOWN_UUID: return call_unknown_plugin(nParamTypes, pParams); default: return TEE_ERROR_NOT_SUPPORTED; } } optee_test-4.3.0/ta/ta_common.mk000066400000000000000000000003041464074351400166070ustar00rootroot00000000000000# Note that it is important that that $(BINARY) is set before we include # ta_dev_kit.mk. In the optee_test this is done in the individual TA Makefiles. include $(TA_DEV_KIT_DIR)/mk/ta_dev_kit.mk optee_test-4.3.0/ta/top_level_subkey.bin000066400000000000000000000011641464074351400203540ustar00rootroot00000000000000HSTO@0IAp s)whlGN[^ކ6jMe7{QAe&alZ>Y9&4Vr_&,όqgA~x6F)0g= P3^+&QN`.ۙ{oh))2y_ؙ<SHj9gчERLts5Ē; Rj |dǟ&L7x[5">N;j9+gR/p,Tz= :akdjm?=U=o#qOE<7Ϻ @0IAp0<0=_ eQwbK9*l6_>Œ-xvvug#i嘎s=%e}>t.q/[T8+jbr'ƈ|5T Wϴ`À#upXN3d[9\lp8v1s rX(. (5\SKF9G7 N,80ju3V,J5D=q@_ҴO1 ETx rb3"B GZKw>7optee_test-4.3.0/ta/top_level_subkey.pem000066400000000000000000000032501464074351400203630ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDrXwzAyWVRd2IV F42Ku+/GS/c5vipsNl8Ylqk+xZIXBi24pHh2nXaAdWfpI2n4H+WYjgZzPZsl8PZl 4d597vc+HvS+oXT5Lpq6cS/q1AcPW7VUqdw4pCtqYvXycicV98aIfBM1VAnTV9oU 0s+0YMOAnPcjdeXacFhOuLCC5BAzZLZb8YEO0sg5wFz0ltpscNHN/jh2MXMN0wJy WNAoLrenCpwoNVxTkkvkRjlH7TcJTiyBODCIanWoov64MwV/rAVWwyzaxf2HF0q5 wzW5lblEgj2TcRTP9EASX9K0TzEMDdLbRfpUeA27crm8//liM6uxIkIKRxwFWkvo d/8+f9g3AgMBAAECggEAR1Wu4U0Ikoi6psbVJJtx/6jtXEhIxjQyXRroX3h0ntrG B6R9SAHQNP2gSRXtG4DbToGY7dtZhsXBf75VdthygZbTOWVotM7NoT0Ft0ecfiie y/KRJm+HIv6sKNc1BmDqgFoOXkbClZWWKGJ+Bd6f0f6AnnQwfiQ3d2BdSsZBLLm/ /VpGJ+/z85+9ZRGgkgi73omMtMC7NJqgkCzQXo2rnnpczH5zr7CqWPN7YQsgD/Gg uOHMc+9Y3HOpn4CtxludDnG+DPfGzWZtjmQL/sGDb2GC1qJ6qwRjTCPAYWGfhkim wJSZRnWSeTKuOcNF9cqVawEfpgd3mn29Arfb67jlPQKBgQDvKTGBZlXeY/EbH3dl e1CDfPKv6y9cdvQ4MofmYwgkifpQ5vgzSiD0S8iRlclpRCdy1bQv87RhctyGQgIx vYx6vpElxH1EZur2AT3wAcsJqS0+iKyBgZb2qeAtuVdyHFUbvzkWPuOjiku296SB EgzNn8UG7WRhi0oGYpNS+bBOTQKBgQD78YywYlCDerQ5GlqP6mnro00bg6zjfPW6 x3AjcsdxDbASC02ke253r9JIqvX6GyXnmtgND32ffk/jUARo0i8RGxGmzMuivglM 3hVHOntszM4+NrUeOd1F5Uxi3dOZ2B0hRSJ82IWc9O2p+BmKt5oH6n9/76A1Zwd0 q4yLlrNqkwKBgDHHiDdf3pWohcHYfdiQn0SPGFCHilcbp1+fHOxWRpacZY67VIQQ dOWEdJ3g6IhRmEhttNCaUDxMVRxY1u4Vfwz5Z2rOCCjZpyRHQ+YV6XX8UZ+HgSh/ mbWDzFaYElx9CzX4SmCX/HfIzFOsHgCDikiubaswdEldXa4QjIujzw+tAoGARon5 twS/wCAhx38ebf7Wyxe8pgB27nZ1ImdmeTZQqtGHQ3YQtgWtByud96SOHAlv0mmj Jfz5Uid+XIlxwptefC6VAZuDRDxqxC/Fy1yPZAXvlLGigiT3U/OAMIolDYTZmxAN OOEyf6B/zj/dft4q7R51ti80Lt960eqZ/hcigqsCgYAIPhl6ctItLaDJFgmYvBUf 25woVlzIMgQlLo+YNhX/Kn+BFjOeKP2AlEa+4VJBoHLoBGeIjL1pWOGFYQf3hDWW BOnaeaVqmLGdvjWgWHMRiPL/HxWH1wVH/1SUfrzxwoYJMU6WUaeRH4qQR0vCqvTA vOIVA8zQNiPC6XXxTeICPw== -----END PRIVATE KEY----- optee_test-4.3.0/ta/tpm_log_test/000077500000000000000000000000001464074351400170055ustar00rootroot00000000000000optee_test-4.3.0/ta/tpm_log_test/Android.mk000066400000000000000000000001611464074351400207140ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) local_module := ee90d523-90ad-46a0-859d-8eea0b150086.ta include $(BUILD_OPTEE_MK) optee_test-4.3.0/ta/tpm_log_test/Makefile000066400000000000000000000001061464074351400204420ustar00rootroot00000000000000BINARY = ee90d523-90ad-46a0-859d-8eea0b150086 include ../ta_common.mk optee_test-4.3.0/ta/tpm_log_test/include/000077500000000000000000000000001464074351400204305ustar00rootroot00000000000000optee_test-4.3.0/ta/tpm_log_test/include/ta_tpm_log.h000066400000000000000000000003451464074351400227300ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-3-Clause */ /* * Copyright (c) 2020, ARM Limited. All rights reserved. */ #ifndef TA_TPM_LOG_H #define TA_TPM_LOG_H #include #include #endif /* TA_TPM_LOG_H */ optee_test-4.3.0/ta/tpm_log_test/include/ta_tpm_log_test.h000066400000000000000000000007271464074351400237730ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-3-Clause */ /* * Copyright (c) 2020, ARM Limited. All rights reserved. */ #ifndef TA_TPM_LOG_TEST_H #define TA_TPM_LOG_TEST_H /* * This UUID is generated with the ITU-T UUID generator at * http://www.uuidgenerator.net */ #define TA_TPM_LOG_TEST_UUID { 0xee90d523, 0x90ad, 0x46a0, \ { 0x85, 0x9d, 0x8e, 0xea, 0x0b, 0x15, 0x00, 0x86 } } #define TA_TPM_TEST_GET_LOG 1 #define TA_TPM_TEST_SHORT_BUF 2 #endif /* TA_TPM_LOG_TEST_H */ optee_test-4.3.0/ta/tpm_log_test/include/user_ta_header_defines.h000066400000000000000000000005541464074351400252540ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-3-Clause */ /* * Copyright (c) 2020, ARM Limited. All rights reserved. */ #ifndef USER_TA_HEADER_DEFINES_H #define USER_TA_HEADER_DEFINES_H #include #define TA_UUID TA_TPM_LOG_TEST_UUID #define TA_FLAGS 0 #define TA_STACK_SIZE (4 * 1024) #define TA_DATA_SIZE (32 * 1024) #endif /* USER_TA_HEADER_DEFINES_H */ optee_test-4.3.0/ta/tpm_log_test/sub.mk000066400000000000000000000000611464074351400201240ustar00rootroot00000000000000global-incdirs-y += include srcs-y += ta_entry.c optee_test-4.3.0/ta/tpm_log_test/ta_entry.c000066400000000000000000000104541464074351400210020ustar00rootroot00000000000000// SPDX-License-Identifier: BSD-3-Clause /* * Copyright (c) 2020, ARM Limited. All rights reserved. */ #include #include #include #include #include #define LOG_SIZE 1024 static TEE_Result invoke_system_pta(uint32_t cmd_id, uint32_t param_types, TEE_Param params[TEE_NUM_PARAMS]) { const TEE_UUID system_uuid = PTA_SYSTEM_UUID; TEE_TASessionHandle session = TEE_HANDLE_NULL; TEE_Result res = TEE_ERROR_GENERIC; uint32_t ret_origin = 0; res = TEE_OpenTASession(&system_uuid, TEE_TIMEOUT_INFINITE, 0, NULL, &session, &ret_origin); if (res != TEE_SUCCESS) return res; res = TEE_InvokeTACommand(session, TEE_TIMEOUT_INFINITE, cmd_id, param_types, params, &ret_origin); TEE_CloseTASession(session); return res; } /* * Test case for the use of right parameters. */ static TEE_Result test_with_right_parameters(void) { unsigned char buf[LOG_SIZE] = { 0 }; const uint32_t param_types = TEE_PARAM_TYPES( TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); TEE_Param params[TEE_NUM_PARAMS] = { 0 }; uint32_t field = 0; unsigned char *digestptr = NULL; unsigned int i = 0; params[0].memref.buffer = (void *)buf; params[0].memref.size = LOG_SIZE; if (invoke_system_pta(PTA_SYSTEM_GET_TPM_EVENT_LOG, param_types, params) == TEE_SUCCESS) { DMSG("Received %i bytes of event log", params[0].memref.size); DMSG("Parsing the event log header:"); memcpy(&field, &buf[0], sizeof(uint32_t)); DMSG("\tPCRIndex = 0x%" PRIx32, field); /* * PCR Index must be 0 on the header. * Ref. Section 5.3 of TCG EFI Protocol Specification. * Family 2.0 Level 00 Revision 00.13. March 30, 2016 */ if (field != 0) { EMSG("PCRIndex must be 0"); return TEE_ERROR_GENERIC; } memcpy(&field, &buf[4], sizeof(uint32_t)); DMSG("\tEventType = 0x%" PRIx32, field); /* * Event type must be EV_NO_ACTION on the header. * Ref. Section 5.3 of TCG EFI Protocol Specification. * Family 2.0 Level 00 Revision 00.13. March 30, 2016 */ if (field != 3) { EMSG("EventType must be 3 (EV_NO_ACTION)"); return TEE_ERROR_GENERIC; } /* * Header digest must be formed of 20 bytes set to 0. * Ref. Section 5.3 of TCG EFI Protocol Specification. * Family 2.0 Level 00 Revision 00.12. March 30, 2016 */ digestptr = &buf[8]; for (i = 0; i < 20; i++) { if (*(digestptr + i) != 0) { EMSG("Digest byte %i must be 0", i); return TEE_ERROR_GENERIC; } } DMSG("--> Digest value passed"); return TEE_SUCCESS; } return TEE_ERROR_ACCESS_DENIED; } /* * Test case for short buffer. */ static TEE_Result test_short_buffer(void) { unsigned char buf[LOG_SIZE] = { 0 }; const uint32_t param_types = TEE_PARAM_TYPES( TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE); TEE_Param params[TEE_NUM_PARAMS] = { 0 }; unsigned int i = 0; params[0].memref.buffer = (void *)buf; params[0].memref.size = 1; if (invoke_system_pta(PTA_SYSTEM_GET_TPM_EVENT_LOG, param_types, params) != TEE_ERROR_SHORT_BUFFER) { return TEE_ERROR_GENERIC; } for (i = 0; i < LOG_SIZE; i++) { if (buf[i] != 0) { EMSG("Buf is expected to be all zeroed"); return TEE_ERROR_GENERIC; } } return TEE_SUCCESS; } /* * Trusted Application Entry Points */ /* Called each time a new instance is created */ TEE_Result TA_CreateEntryPoint(void) { return TEE_SUCCESS; } /* Called each time an instance is destroyed */ void TA_DestroyEntryPoint(void) { } /* Called each time a session is opened */ TEE_Result TA_OpenSessionEntryPoint(uint32_t nParamTypes __unused, TEE_Param pParams[4] __unused, void **ppSessionContext __unused) { return TEE_SUCCESS; } /* Called each time a session is closed */ void TA_CloseSessionEntryPoint(void *pSessionContext __unused) { } /* Called when a command is invoked */ TEE_Result TA_InvokeCommandEntryPoint(void *pSessionContext __unused, uint32_t nCommandID, uint32_t nParamTypes __unused, TEE_Param pParams[4] __unused) { switch (nCommandID) { case TA_TPM_TEST_GET_LOG: return test_with_right_parameters(); case TA_TPM_TEST_SHORT_BUF: return test_short_buffer(); default: return TEE_ERROR_BAD_PARAMETERS; } } optee_test-4.3.0/typedefs.checkpatch000066400000000000000000000000241464074351400175370ustar00rootroot00000000000000TEE_Result TEE_UUID