itrustee_sdk/0005-support-remote-attestation.patch
2023-04-27 21:17:21 +08:00

19053 lines
720 KiB
Diff
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From f2cc71ac472a5131fc146939418d5d3842c23141 Mon Sep 17 00:00:00 2001
From: houmingyong <houmingyong@huawei.com>
Date: Wed, 26 Apr 2023 11:19:11 +0800
Subject: [PATCH] support remote attestation
---
CHANGELOG | 12 +-
README | 20 +
build/cmake/aarch64_toolchain.cmake | 14 +
build/cmake/common.cmake | 54 +
build/mk/common.mk | 39 +
build/pack-Config/Config_pre.py | 284 +++
build/pack-Config/ReadMe.txt | 18 +
build/pack-Config/config_cert/ReadMe.txt | 2 +
build/pack-Config/config_v2.py | 122 ++
build/pack-Config/input/configs.xml | 15 +
build/pack-Config/local_sign.sh | 61 +
build/pack-Config/output/ReadMe.txt | 1 +
build/pack-Config/ta_cert/ReadMe.txt | 1 +
build/pack-TA/Readme.txt | 12 +
build/pack-TA/build_ta.sh | 22 +
build/pack-TA/input/Readme.txt | 4 +
build/pack-TA/output/Readme.txt | 1 +
build/signtools/auth_conf_parser.py | 260 +++
build/signtools/config_cloud.ini | 60 +
build/signtools/config_tee_private_sample.ini | 35 +
build/signtools/dyn_conf_checker.py | 512 ++++++
build/signtools/dyn_conf_parser.py | 315 ++++
build/signtools/generate_hash.py | 51 +
build/signtools/generate_signature.py | 69 +-
build/signtools/get_ta_elf_hash.py | 246 +++
build/signtools/manifest.py | 273 ++-
build/signtools/manifest_tag_parse_dict.csv | 24 +
build/signtools/rsa_public_key_cloud.pem | 11 +
build/signtools/signtool_v3.py | 763 ++++++---
build/signtools/tag_parse_dict.csv | 120 ++
build/signtools/xml_trans_manifest.py | 109 ++
build/tools/srv_entry_check.sh | 13 +
build/tools/ta_entry_check.sh | 52 +
build/tools/ta_link_64.gcc_xom.ld | 226 +++
build/tools/ta_link_64.ld | 20 +-
build/tools/ta_link_64.smee.ld | 262 +++
include/CA/tee_client_api.h | 21 +-
include/CA/tee_client_constants.h | 68 +-
include/CA/tee_client_list.h | 39 +-
include/CA/tee_client_log.h | 9 +-
include/CA/tee_client_type.h | 56 +-
include/TA/huawei_ext/crypto_cert_wrapper.h | 87 +
.../TA/huawei_ext/crypto_device_key_wrapper.h | 31 +
include/TA/huawei_ext/crypto_ec_wrapper.h | 149 ++
.../TA/huawei_ext/crypto_ec_x509_wrapper.h | 53 +
include/TA/huawei_ext/crypto_inner_wrapper.h | 71 +
include/TA/huawei_ext/crypto_rsa_wrapper.h | 154 ++
include/TA/huawei_ext/crypto_wrapper.h | 583 +------
include/TA/huawei_ext/crypto_x509_wrapper.h | 169 ++
include/TA/huawei_ext/permsrv_api_cert.h | 22 +
include/TA/huawei_ext/permsrv_api_legacy.h | 21 +
include/TA/huawei_ext/qsi_data_structure.h | 27 +
include/TA/huawei_ext/tee_crypto_err.h | 42 +
include/TA/huawei_ext/tee_crypto_hal.h | 14 +-
include/TA/huawei_ext/tee_err.h | 31 +
include/TA/huawei_ext/tee_ext_api.h | 67 +-
include/TA/huawei_ext/tee_hw_ext_api_legacy.h | 293 ++++
include/TA/huawei_ext/tee_log.h | 218 ++-
include/TA/huawei_ext/tee_log_legacy.h | 18 +
include/TA/huawei_ext/tee_openssl_err.h | 500 ++++++
include/TA/huawei_ext/tee_ra_api.h | 23 +
include/TA/pthread_attr.h | 22 +
include/TA/tee_arith_api.h | 27 +-
include/TA/tee_core_api.h | 8 +-
include/TA/tee_crypto_api.h | 168 +-
include/TA/tee_defines.h | 284 +--
include/TA/tee_mem_mgmt_api.h | 5 +-
include/TA/tee_object_api.h | 5 +-
include/TA/tee_property_api.h | 7 +-
include/TA/tee_time_api.h | 81 +-
include/TA/tee_trusted_storage_api.h | 309 ++++
include/TA/tee_uuid.h | 27 +
src/CA/libteec_adaptor.c | 269 +++
test/CA/cert_manager/Makefile | 27 +
test/CA/cert_manager/cert_common.h | 21 +
test/CA/cert_manager/cert_file.c | 100 ++
test/CA/cert_manager/cert_file.h | 25 +
test/CA/cert_manager/cert_manager.c | 368 ++++
test/CA/helloworld/Makefile | 24 +
test/CA/helloworld/ca_demo.c | 17 +-
test/CA/libqca/Makefile | 42 +
test/CA/libqca/include/ra_client_api.h | 22 +
test/CA/libqca/src/ra_log.h | 27 +
test/CA/libqca/src/ra_operate_api.c | 147 ++
test/CA/libqca/src/ra_operate_api.h | 24 +
test/TA/cert_manager/CMakeLists.txt | 38 +
test/TA/cert_manager/Makefile | 34 +
test/TA/cert_manager/config.cmake | 11 +
test/TA/cert_manager/config.mk | 12 +
test/TA/cert_manager/config.sh | 34 +
test/TA/cert_manager/include/cert_config.h | 63 +
test/TA/cert_manager/manifest.txt | 7 +
test/TA/cert_manager/src/cert_logger.c | 165 ++
test/TA/cert_manager/src/cert_logger.h | 31 +
test/TA/cert_manager/src/cert_manager.c | 301 ++++
test/TA/helloworld/CMakeLists.txt | 30 +
test/TA/helloworld/Makefile | 28 +
test/TA/helloworld/ReadMe.txt | 7 +-
test/TA/helloworld/auth_config.xml | 7 +
test/TA/helloworld/config.cmake | 23 +
test/TA/helloworld/config.mk | 19 +-
test/TA/helloworld/config.sh | 34 +
test/TA/helloworld/ta_demo.c | 15 +-
test/TA/qta/CMakeLists.txt | 67 +
test/TA/qta/Makefile | 41 +
test/TA/qta/ReadMe.txt | 12 +
test/TA/qta/config.cmake | 23 +
test/TA/qta/config.mk | 23 +
test/TA/qta/config.sh | 34 +
test/TA/qta/manifest.txt | 7 +
test/TA/qta/src/daa/daa_structure.c | 185 ++
test/TA/qta/src/daa/daa_structure.h | 64 +
test/TA/qta/src/daa/validate_akcert.c | 191 +++
test/TA/qta/src/daa/validate_akcert.h | 20 +
test/TA/qta/src/tee_qta.c | 279 +++
test/TA/qta/src/tee_qta.h | 29 +
.../musl/libc/arch/aarch64/bits/alltypes.h | 251 ++-
.../musl/libc/arch/aarch64/bits/hwcap.h | 12 +
.../musl/libc/arch/aarch64/bits/mman.h | 2 +
.../musl/libc/arch/aarch64/bits/signal.h | 4 +-
.../musl/libc/arch/aarch64/bits/syscall.h | 1144 +++++++------
.../musl/libc/arch/aarch64/bits/syscall.h.in | 10 +
.../musl/libc/arch/aarch64/bits/user.h | 2 +-
.../musl/libc/arch/aarch64/pthread_arch.h | 9 +-
.../musl/libc/arch/arm/bits/alltypes.h | 252 ++-
.../musl/libc/arch/arm/bits/syscall.h | 1521 +++++++++--------
.../open_source/musl/libc/arch/arm/crt_arch.h | 27 +
.../musl/libc/arch/generic/bits/fcntl.h | 6 +
.../musl/libc/arch/generic/bits/shm.h | 2 +-
thirdparty/open_source/musl/libc/arpa/inet.h | 5 -
thirdparty/open_source/musl/libc/ctype.h | 7 +
thirdparty/open_source/musl/libc/elf.h | 4 +
thirdparty/open_source/musl/libc/float.h | 52 +
thirdparty/open_source/musl/libc/limits.h | 2 +
thirdparty/open_source/musl/libc/locale.h | 4 +-
thirdparty/open_source/musl/libc/netinet/in.h | 8 +-
.../open_source/musl/libc/netinet/tcp.h | 29 +-
thirdparty/open_source/musl/libc/nl_types.h | 22 +
thirdparty/open_source/musl/libc/pthread.h | 22 +
thirdparty/open_source/musl/libc/sched.h | 1 +
thirdparty/open_source/musl/libc/setjmp.h | 14 +-
thirdparty/open_source/musl/libc/signal.h | 24 +-
thirdparty/open_source/musl/libc/stddef.h | 6 +-
thirdparty/open_source/musl/libc/stdio.h | 4 +-
thirdparty/open_source/musl/libc/stdlib.h | 7 +-
thirdparty/open_source/musl/libc/string.h | 4 +-
thirdparty/open_source/musl/libc/sys/fcntl.h | 2 +
thirdparty/open_source/musl/libc/sys/ioctl.h | 9 +-
thirdparty/open_source/musl/libc/sys/mman.h | 5 +-
thirdparty/open_source/musl/libc/sys/socket.h | 2 +
thirdparty/open_source/musl/libc/time.h | 6 +-
thirdparty/open_source/musl/libc/unistd.h | 8 +-
thirdparty/open_source/musl/libc/wchar.h | 4 +-
.../open_source}/openssl/crypto/asn1.h | 3 -
.../open_source}/openssl/crypto/bn.h | 0
.../open_source}/openssl/crypto/ec.h | 6 -
.../open_source}/openssl/crypto/err.h | 0
.../open_source}/openssl/internal/bio.h | 6 -
.../open_source}/openssl/openssl/asn1.h | 7 +-
.../open_source}/openssl/openssl/asn1err.h | 0
.../open_source}/openssl/openssl/asn1t.h | 17 -
.../open_source}/openssl/openssl/bio.h | 14 +-
.../open_source}/openssl/openssl/bioerr.h | 0
.../open_source}/openssl/openssl/bn.h | 127 +-
.../open_source}/openssl/openssl/bnerr.h | 0
.../open_source}/openssl/openssl/buffer.h | 2 +
.../open_source}/openssl/openssl/buffererr.h | 0
.../open_source}/openssl/openssl/cmac.h | 0
.../open_source}/openssl/openssl/crypto.h | 60 +-
.../open_source}/openssl/openssl/cryptoerr.h | 0
.../open_source}/openssl/openssl/dh.h | 8 +-
.../open_source}/openssl/openssl/dsa.h | 6 +-
.../open_source}/openssl/openssl/e_os2.h | 14 +-
.../open_source}/openssl/openssl/ec.h | 3 +-
.../open_source}/openssl/openssl/ecdsa.h | 9 -
.../open_source}/openssl/openssl/ecerr.h | 6 -
.../open_source}/openssl/openssl/err.h | 12 -
.../open_source}/openssl/openssl/evp.h | 19 +-
.../open_source}/openssl/openssl/evperr.h | 2 -
.../open_source}/openssl/openssl/hmac.h | 0
.../open_source}/openssl/openssl/kdf.h | 1 +
.../open_source}/openssl/openssl/kdferr.h | 0
.../open_source}/openssl/openssl/lhash.h | 1 +
.../open_source}/openssl/openssl/obj_mac.h | 105 --
.../open_source}/openssl/openssl/objects.h | 2 +
.../open_source}/openssl/openssl/objectserr.h | 0
.../openssl/openssl/opensslconf.h | 0
.../open_source}/openssl/openssl/opensslv.h | 1 +
.../open_source}/openssl/openssl/ossl_typ.h | 3 -
.../open_source}/openssl/openssl/pem.h | 11 -
.../open_source}/openssl/openssl/pemerr.h | 0
.../open_source}/openssl/openssl/pkcs7.h | 138 --
.../open_source}/openssl/openssl/pkcs7err.h | 15 -
.../open_source}/openssl/openssl/rand.h | 10 -
.../open_source}/openssl/openssl/randerr.h | 0
.../open_source}/openssl/openssl/rsa.h | 7 +-
.../open_source}/openssl/openssl/rsaerr.h | 7 -
.../open_source}/openssl/openssl/safestack.h | 0
.../open_source}/openssl/openssl/sha.h | 3 +
.../open_source}/openssl/openssl/stack.h | 0
.../open_source}/openssl/openssl/symhacks.h | 0
.../open_source}/openssl/openssl/x509.h | 19 +-
.../open_source}/openssl/openssl/x509_vfy.h | 5 +-
.../open_source}/openssl/openssl/x509err.h | 5 -
204 files changed, 11281 insertions(+), 3625 deletions(-)
create mode 100644 README
create mode 100644 build/cmake/aarch64_toolchain.cmake
create mode 100644 build/cmake/common.cmake
create mode 100644 build/mk/common.mk
create mode 100644 build/pack-Config/Config_pre.py
create mode 100644 build/pack-Config/ReadMe.txt
create mode 100644 build/pack-Config/config_cert/ReadMe.txt
create mode 100644 build/pack-Config/config_v2.py
create mode 100644 build/pack-Config/input/configs.xml
create mode 100644 build/pack-Config/local_sign.sh
create mode 100644 build/pack-Config/output/ReadMe.txt
create mode 100644 build/pack-Config/ta_cert/ReadMe.txt
create mode 100644 build/pack-TA/Readme.txt
create mode 100644 build/pack-TA/build_ta.sh
create mode 100644 build/pack-TA/input/Readme.txt
create mode 100644 build/pack-TA/output/Readme.txt
create mode 100644 build/signtools/auth_conf_parser.py
create mode 100644 build/signtools/config_cloud.ini
create mode 100644 build/signtools/config_tee_private_sample.ini
create mode 100644 build/signtools/dyn_conf_checker.py
create mode 100644 build/signtools/dyn_conf_parser.py
create mode 100644 build/signtools/generate_hash.py
create mode 100644 build/signtools/get_ta_elf_hash.py
create mode 100644 build/signtools/manifest_tag_parse_dict.csv
create mode 100644 build/signtools/rsa_public_key_cloud.pem
create mode 100644 build/signtools/tag_parse_dict.csv
create mode 100644 build/signtools/xml_trans_manifest.py
create mode 100644 build/tools/srv_entry_check.sh
create mode 100644 build/tools/ta_entry_check.sh
create mode 100644 build/tools/ta_link_64.gcc_xom.ld
create mode 100644 build/tools/ta_link_64.smee.ld
create mode 100644 include/TA/huawei_ext/crypto_cert_wrapper.h
create mode 100644 include/TA/huawei_ext/crypto_device_key_wrapper.h
create mode 100644 include/TA/huawei_ext/crypto_ec_wrapper.h
create mode 100644 include/TA/huawei_ext/crypto_ec_x509_wrapper.h
create mode 100644 include/TA/huawei_ext/crypto_inner_wrapper.h
create mode 100644 include/TA/huawei_ext/crypto_rsa_wrapper.h
create mode 100644 include/TA/huawei_ext/crypto_x509_wrapper.h
create mode 100644 include/TA/huawei_ext/permsrv_api_cert.h
create mode 100644 include/TA/huawei_ext/permsrv_api_legacy.h
create mode 100644 include/TA/huawei_ext/qsi_data_structure.h
create mode 100644 include/TA/huawei_ext/tee_crypto_err.h
create mode 100644 include/TA/huawei_ext/tee_err.h
create mode 100644 include/TA/huawei_ext/tee_hw_ext_api_legacy.h
create mode 100644 include/TA/huawei_ext/tee_log_legacy.h
create mode 100644 include/TA/huawei_ext/tee_openssl_err.h
create mode 100644 include/TA/huawei_ext/tee_ra_api.h
create mode 100644 include/TA/pthread_attr.h
create mode 100644 include/TA/tee_trusted_storage_api.h
create mode 100644 include/TA/tee_uuid.h
create mode 100644 src/CA/libteec_adaptor.c
create mode 100644 test/CA/cert_manager/Makefile
create mode 100644 test/CA/cert_manager/cert_common.h
create mode 100644 test/CA/cert_manager/cert_file.c
create mode 100644 test/CA/cert_manager/cert_file.h
create mode 100644 test/CA/cert_manager/cert_manager.c
create mode 100644 test/CA/helloworld/Makefile
create mode 100644 test/CA/libqca/Makefile
create mode 100644 test/CA/libqca/include/ra_client_api.h
create mode 100644 test/CA/libqca/src/ra_log.h
create mode 100644 test/CA/libqca/src/ra_operate_api.c
create mode 100644 test/CA/libqca/src/ra_operate_api.h
create mode 100644 test/TA/cert_manager/CMakeLists.txt
create mode 100644 test/TA/cert_manager/Makefile
create mode 100644 test/TA/cert_manager/config.cmake
create mode 100644 test/TA/cert_manager/config.mk
create mode 100644 test/TA/cert_manager/config.sh
create mode 100644 test/TA/cert_manager/include/cert_config.h
create mode 100644 test/TA/cert_manager/manifest.txt
create mode 100644 test/TA/cert_manager/src/cert_logger.c
create mode 100644 test/TA/cert_manager/src/cert_logger.h
create mode 100644 test/TA/cert_manager/src/cert_manager.c
create mode 100644 test/TA/helloworld/CMakeLists.txt
create mode 100644 test/TA/helloworld/Makefile
create mode 100644 test/TA/helloworld/auth_config.xml
create mode 100644 test/TA/helloworld/config.cmake
create mode 100644 test/TA/helloworld/config.sh
create mode 100644 test/TA/qta/CMakeLists.txt
create mode 100644 test/TA/qta/Makefile
create mode 100644 test/TA/qta/ReadMe.txt
create mode 100644 test/TA/qta/config.cmake
create mode 100644 test/TA/qta/config.mk
create mode 100644 test/TA/qta/config.sh
create mode 100644 test/TA/qta/manifest.txt
create mode 100644 test/TA/qta/src/daa/daa_structure.c
create mode 100644 test/TA/qta/src/daa/daa_structure.h
create mode 100644 test/TA/qta/src/daa/validate_akcert.c
create mode 100644 test/TA/qta/src/daa/validate_akcert.h
create mode 100644 test/TA/qta/src/tee_qta.c
create mode 100644 test/TA/qta/src/tee_qta.h
create mode 100644 thirdparty/open_source/musl/libc/arch/aarch64/bits/mman.h
create mode 100644 thirdparty/open_source/musl/libc/arch/arm/crt_arch.h
create mode 100644 thirdparty/open_source/musl/libc/float.h
create mode 100644 thirdparty/open_source/musl/libc/nl_types.h
create mode 100644 thirdparty/open_source/musl/libc/sys/fcntl.h
rename {include/TA => thirdparty/open_source}/openssl/crypto/asn1.h (97%)
rename {include/TA => thirdparty/open_source}/openssl/crypto/bn.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/crypto/ec.h (91%)
rename {include/TA => thirdparty/open_source}/openssl/crypto/err.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/internal/bio.h (82%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/asn1.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/asn1err.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/asn1t.h (98%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/bio.h (98%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/bioerr.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/bn.h (83%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/bnerr.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/buffer.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/buffererr.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/cmac.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/crypto.h (90%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/cryptoerr.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/dh.h (98%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/dsa.h (98%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/e_os2.h (95%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/ec.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/ecdsa.h (68%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/ecerr.h (98%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/err.h (94%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/evp.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/evperr.h (98%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/hmac.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/kdf.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/kdferr.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/lhash.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/obj_mac.h (97%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/objects.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/objectserr.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/opensslconf.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/opensslv.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/ossl_typ.h (98%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/pem.h (97%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/pemerr.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/pkcs7.h (64%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/pkcs7err.h (84%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/rand.h (85%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/randerr.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/rsa.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/rsaerr.h (97%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/safestack.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/sha.h (97%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/stack.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/symhacks.h (100%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/x509.h (98%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/x509_vfy.h (99%)
rename {include/TA => thirdparty/open_source}/openssl/openssl/x509err.h (95%)
diff --git a/CHANGELOG b/CHANGELOG
index 7e22858..e90d34c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,14 @@
-v0.1.0 (Apr 2, 2020)
+v5.1.2 (Jun 21, 2021)
+======
+Features:
+---------
+* add support for cmake
+v5.1.1 (May 21, 2021)
+======
+Fixes:
+------
+* The problem of storing the aeskey file is rectified, and the dependency on the pycryptodomex-3.10.1 plug-in package is introduced.
+v5.1.0 (Apr 2, 2020)
======
Features:
---------
diff --git a/README b/README
new file mode 100644
index 0000000..6811e56
--- /dev/null
+++ b/README
@@ -0,0 +1,20 @@
+iTrustee SDK
+============
+
+Getting Started
+---------------
+Before setup your own project, please download libboundscheck software for secure function library.
+Decompress the openeuler-libboundscheck-master.zip package, then put this software to thirdparty/open_source path.
+Ensure that the header file path is thirdparty/open_source/libboundscheck/include.
+This software download address is https://gitee.com/openeuler/libboundscheck.
+
+build demo project:
+$ cd test/CA/helloworld
+$ make
+$ cd test/TA/helloworld
+$ make
+copy build result CA executable file and TA binary(xxx.sec) to /vendor/bin/
+#the path "/vendor/bin/" may be changed as your opinion, make sure it consistent with the path defined in your TA's source code
+$ /vendor/bin/demo_hello
+
+for more details please refor "iTrustee SDK<44><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>.chm"
diff --git a/build/cmake/aarch64_toolchain.cmake b/build/cmake/aarch64_toolchain.cmake
new file mode 100644
index 0000000..97dc45d
--- /dev/null
+++ b/build/cmake/aarch64_toolchain.cmake
@@ -0,0 +1,14 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
+# toolchain.cmake
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+
+#set(CMAKE_FIND_ROOT_PATH $ENV{TOOLCHAINS_ROOT})
+
+set(CMAKE_C_COMPILER cc CACHE PATH "GCC 64 compiler")
+set(CMAKE_LINKER ld CACHE PATH "GCC C64 LD")
+set(CMAKE_OBJCOPY objcopy CACHE PATH "GCC 64 objcopy")
+
+set(CMAKE_SKIP_BUILD_RPATH TRUE CACHE BOOL "" FORCE)
+set(CMAKE_C_CREATE_SHARED_LIBRARY "<CMAKE_LINKER> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+
diff --git a/build/cmake/common.cmake b/build/cmake/common.cmake
new file mode 100644
index 0000000..f18d3f4
--- /dev/null
+++ b/build/cmake/common.cmake
@@ -0,0 +1,54 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
+# compile flags
+set(ITRUSTEE_BUILD_PATH $ENV{ITRUSTEE_BUILD_PATH})
+set(LIBC ${ITRUSTEE_BUILD_PATH}/thirdparty/open_source/musl)
+set(LIBSECURE ${ITRUSTEE_BUILD_PATH}/thirdparty/open_source/libboundscheck)
+
+set(COMMON_INCLUDES
+ ${COMMON_INCLUDES}
+ ${LIBC}/libc
+ ${LIBC}/libc/arch/aarch64
+ ${LIBC}/libc/arch/aarch64/bits
+ ${LIBC}/libc/arch/generic
+ ${LIBSECURE}/include
+ ${ITRUSTEE_BUILD_PATH}/include/TA
+ ${ITRUSTEE_BUILD_PATH}/include/TA/huawei_ext
+)
+
+set(COMMON_CFLAGS
+ ${COMMON_CFLAGS}
+ -W
+ -Wall
+ -Werror
+ -fno-short-enums
+ -fno-omit-frame-pointer
+ -fstack-protector-strong
+ -Wextra
+ -nostdinc
+ -march=armv8-a -Os
+ -fPIC
+ -fno-common
+ -fsigned-char
+)
+
+set(COMMON_LDFLAGS
+ ${COMMON_LDFLAGS}
+ "-s"
+ "SHELL:-z text"
+ "SHELL:-z now"
+ "SHELL:-z relro"
+ "SHELL:-z noexecstack"
+ "SHELL:-z max-page-size=0x1000"
+ "SHELL:-z common-page-size=0x1000"
+ "-shared"
+)
+
+if ("${USE_SMEE}" STREQUAL "y")
+ list(APPEND COMMON_LDFLAGS
+ "-T${ITRUSTEE_BUILD_PATH}/build/tools/ta_link_64.smee.ld"
+ )
+else()
+ List(APPEND COMMON_LDFLAGS
+ "-T${ITRUSTEE_BUILD_PATH}/build/tools/ta_link_64.ld"
+ )
+endif()
diff --git a/build/mk/common.mk b/build/mk/common.mk
new file mode 100644
index 0000000..758e92d
--- /dev/null
+++ b/build/mk/common.mk
@@ -0,0 +1,39 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2018-2021. All rights reserved.
+CUR_DIR=$(shell pwd)
+ifeq ($(ITRUSTEE_BUILD_PATH), )
+ ITRUSTEE_BUILD_PATH=${CUR_DIR}/../../..
+endif
+SIGNTOOL_DIR=${ITRUSTEE_BUILD_PATH}/build/signtools
+
+LIBC=$(ITRUSTEE_BUILD_PATH)/thirdparty/open_source/musl
+LIBSECURE=$(ITRUSTEE_BUILD_PATH)/thirdparty/open_source/libboundscheck
+
+# set compile parameters
+CFLAGS += -W -Wall
+CFLAGS += -Werror
+CFLAGS += -fno-short-enums
+CFLAGS += -fno-omit-frame-pointer
+CFLAGS += -fstack-protector-strong
+CFLAGS += -Wextra -nostdinc
+CFLAGS += -march=armv8-a -Os -fPIC
+CFLAGS += -fno-common -fsigned-char
+
+# set header directory
+INCLUDEDIR += -I$(LIBC)/libc \
+ -I$(LIBC)/libc/arch/aarch64 \
+ -I$(LIBC)/libc/arch/aarch64/bits \
+ -I$(LIBC)/libc/arch/generic
+
+INCLUDEDIR += -I$(LIBSECURE)/include
+
+INCLUDEDIR += -I$(ITRUSTEE_BUILD_PATH)/include/TA/ \
+ -I$(ITRUSTEE_BUILD_PATH)/include/TA/huawei_ext/ \
+
+# set LD flags
+LDFLAGS += -s -z text -z now -z relro -z noexecstack -z max-page-size=0x1000 -z common-page-size=0x1000 -shared
+
+ifeq ($(USE_SMEE),y)
+ LDFLAGS += -T$(ITRUSTEE_BUILD_PATH)/build/tools/ta_link_64.smee.ld
+else
+ LDFLAGS += -T$(ITRUSTEE_BUILD_PATH)/build/tools/ta_link_64.ld
+endif
diff --git a/build/pack-Config/Config_pre.py b/build/pack-Config/Config_pre.py
new file mode 100644
index 0000000..39f3309
--- /dev/null
+++ b/build/pack-Config/Config_pre.py
@@ -0,0 +1,284 @@
+#!/usr/bin/env python
+# coding=utf-8
+#----------------------------------------------------------------------------
+# Copyright @ Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+# tools for generating data for signing
+#----------------------------------------------------------------------------
+
+import struct
+import os
+import stat
+import sys
+import hashlib
+import subprocess
+import re
+import logging
+import shutil
+import xml.etree.ElementTree as ET
+sys.path.append('../signtools')
+from dyn_conf_parser import parser_config_xml
+from dyn_conf_parser import parser_dyn_conf
+
+CONFIG_VERSION = 2
+BASE_POLICY_VERSION_TEE = 0b001
+
+XML2TLV_PARSE_TOOL_INDEX = 1
+XML2TLV_PY_VALUE = 1 << XML2TLV_PARSE_TOOL_INDEX
+
+
+def get_policy_version():
+ ''' get policy type '''
+ policy_ver = BASE_POLICY_VERSION_TEE | XML2TLV_PY_VALUE
+ return policy_ver
+
+
+def run_cmd(command):
+ ret = subprocess.run(command, shell=False, check=True)
+ if ret.returncode != 0:
+ logging.error("run command failed.")
+ sys.exit(1)
+
+
+def whitelist_check(intput_str):
+ if not re.match(r"^[A-Za-z0-9\/\-_.]+$", intput_str):
+ return 1
+ return 0
+
+
+class load_config_header:
+ str = struct.Struct('IHHIIIIIIIII')
+
+ def __init__(self, data):
+ unpacked_data = (load_config_header.str).unpack(data.encode())
+ self.unpacked_data = unpacked_data
+ self.magic_num = unpacked_data[0]
+ self.version = unpacked_data[1]
+ self.policy_versio = unpacked_data[2]
+ self.context_len = unpacked_data[3]
+ self.ta_cert_len = unpacked_data[4]
+ self.config_len = unpacked_data[5]
+ self.sign_verify_len = unpacked_data[6]
+ self.reserved1 = unpacked_data[7]
+ self.reserved2 = unpacked_data[8]
+ self.reserved3 = unpacked_data[9]
+ self.reserved4 = unpacked_data[10]
+ self.reserved5 = unpacked_data[11]
+
+ def get_packed_data(self):
+ values = [self.magic_num,
+ self.version,
+ self.policy_version,
+ self.context_len,
+ self.ta_cert_len,
+ self.config_len,
+ self.sign_verify_len,
+ self.reserved1,
+ self.reserved2,
+ self.reserved3,
+ self.reserved4,
+ self.reserved5,
+ ]
+ return (load_config_header.str).pack(*values)
+
+
+def pkg_config_header(hdr_len, magic_num, version, policy_version, \
+ context_len, ta_cert_len, config_len, sign_verify_len):
+ config_hd_len = hdr_len
+ config_hd = load_config_header('\0' * config_hd_len)
+ config_hd.magic_num = magic_num
+ config_hd.version = version
+ config_hd.policy_version = policy_version
+ config_hd.context_len = context_len
+ config_hd.ta_cert_len = ta_cert_len
+ config_hd.config_len = config_len
+ config_hd.sign_verify_len = sign_verify_len
+ return config_hd
+
+
+#----------------------------------------------------------------------------
+# generate hash use SHA256
+#----------------------------------------------------------------------------
+def generate_sha256_hash(in_buf):
+ # Initialize a SHA256 object from the Python hash library
+ obj = hashlib.sha256()
+ # Set the input buffer and return the output digest
+ obj.update(in_buf)
+ return obj.digest()
+
+
+def check_dyn_perm(xml_config_file, input_path):
+ ''' check_dyn_perm '''
+ xml_tree = ET.parse(xml_config_file)
+ xml_root = xml_tree.getroot()
+ drv_perm = None
+ for child in xml_root.findall('drv_perm'):
+ if child != '':
+ drv_perm = child
+ if os.path.exists(os.path.join(input_path, 'temp')):
+ out_save_file = os.path.join(input_path, \
+ 'temp/configs_bak.xml')
+ xml_tree.write(out_save_file, encoding="utf-8")
+ xml_root.remove(child)
+ if drv_perm is not None:
+ newtree = ET.ElementTree(drv_perm)
+ if os.path.exists(os.path.join(input_path, 'temp')):
+ out_file = os.path.join(input_path, 'temp/dyn_perm.xml')
+ newtree.write(out_file, encoding="utf-8")
+ xml_tree.write(xml_config_file)
+ return 1
+ return 0
+
+
+def creat_temp_folder(input_path_creat):
+ ''' creat temp '''
+ creat_temp = os.path.join(input_path_creat, 'temp')
+ if os.path.exists(creat_temp):
+ shutil.rmtree(creat_temp)
+ temp_path = os.path.join(input_path_creat, 'temp')
+ cmd = ["mkdir", temp_path]
+ run_cmd(cmd)
+
+
+def delete_temp_folder(input_path_delete):
+ ''' delete temp '''
+ delete_temp = os.path.join(input_path_delete, 'temp')
+ delete_config_tlv = os.path.join(input_path_delete, 'config_tlv')
+ if os.path.exists(delete_temp):
+ shutil.rmtree(delete_temp)
+ if os.path.exists(delete_config_tlv):
+ os.remove(delete_config_tlv)
+
+
+def convert_xml2tlv(xml_file, tlv_file, input_path):
+ ''' configs.xml exchange to tlv '''
+ if (get_policy_version() & (1 << XML2TLV_PARSE_TOOL_INDEX)) == XML2TLV_PY_VALUE:
+ csv_dir = os.path.realpath(os.path.join(os.getcwd(), 'xml2tlv_tools/csv'))
+ tag_parse_dict_file_path = \
+ os.path.join(csv_dir, 'tag_parse_dict.csv')
+ parser_config_xml(xml_file, tag_parse_dict_file_path, \
+ tlv_file, input_path)
+ if os.path.isfile(tlv_file):
+ logging.critical("convert xml to tlv success")
+ else:
+ logging.error("convert xml to tlv failed")
+ raise RuntimeError
+ else:
+ logging.error("invlid policy version")
+ raise RuntimeError
+
+
+def get_target_type_in_config(config_path, in_path):
+ ''' get target type '''
+ tree = ET.parse(config_path)
+ flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
+ modes = stat.S_IRUSR | stat.S_IWUSR
+ drv_target_type = tree.find('./TA_Manifest_Info/target_type')
+ if drv_target_type is not None:
+ if drv_target_type.text == "1":
+ ans = "gpd.ta.dynConf:00000\n"
+ out_tlv = os.path.join(in_path, 'config_tlv')
+ with os.fdopen(os.open(out_tlv, flags, modes), 'w+') as conf:
+ conf.write(ans)
+
+
+def gen_data_for_sign(input_path, ta_cert_path, config_cert_path):
+ ''' convert xml to tlv '''
+ logging.critical(os.getcwd())
+ creat_temp_folder(input_path)
+ tlv_dynconf_data = os.path.join(input_path, "config_tlv")
+ xml_config_file = os.path.join(input_path, "configs.xml")
+ tlv_config_file = os.path.join(input_path, "temp/configs_tlv")
+ if check_dyn_perm(xml_config_file, input_path) != 0:
+ sys.path.append('../signtools')
+ dyn_conf_xml_file_path = os.path.join(input_path, 'temp/dyn_perm.xml')
+ # may be use abspath
+ csv_dir = os.path.realpath(os.path.join(os.getcwd(), 'xml2tlv_tools/csv'))
+ tag_parse_dict_file_path = \
+ os.path.join(csv_dir, 'tag_parse_dict.csv')
+ parser_dyn_conf(dyn_conf_xml_file_path, "", tag_parse_dict_file_path, input_path)
+ convert_xml2tlv(xml_config_file, tlv_config_file, input_path)
+ src_file_path = os.path.join(input_path, 'temp/configs_bak.xml')
+ cmd = ["mv", src_file_path, xml_config_file]
+ run_cmd(cmd)
+ else:
+ convert_xml2tlv(xml_config_file, tlv_config_file, input_path)
+ get_target_type_in_config(xml_config_file, input_path)
+ config_cert_size = 0
+ if os.path.exists(config_cert_path):
+ config_cert_size = os.path.getsize(config_cert_path)
+
+ if os.path.exists(tlv_dynconf_data):
+ with open(tlv_config_file, 'rb') as tlv_config_fp:
+ tlv_config_buf = \
+ tlv_config_fp.read(os.path.getsize(tlv_config_file))
+ with open(tlv_dynconf_data, 'rb') as tlv_dynconf_fp:
+ tlv_config_buf = tlv_config_buf + \
+ tlv_dynconf_fp.read(os.path.getsize(tlv_dynconf_data)) + b"\n"
+ tlv_data_size = len(tlv_config_buf)
+ else:
+ tlv_data_size = os.path.getsize(tlv_config_file)
+ with open(tlv_config_file, 'rb') as tlv_config_fp:
+ tlv_config_buf = tlv_config_fp.read(tlv_data_size)
+
+ ta_cert_size = 4 + os.path.getsize(ta_cert_path)
+ with open(ta_cert_path, 'rb') as ta_cert_fp:
+ ta_cert_buf = struct.pack('I', 1) + ta_cert_fp.read(ta_cert_size)
+
+ sign_data_size = 4 + 4 + 4 + config_cert_size + 512
+
+ config_hd_len = 44
+ context_size = ta_cert_size + tlv_data_size + sign_data_size
+ config_header = pkg_config_header(config_hd_len, 0xABCDABCD, \
+ CONFIG_VERSION, get_policy_version(), \
+ context_size, ta_cert_size, tlv_data_size, sign_data_size)
+
+ logging.critical(os.getcwd())
+ data_for_sign = os.path.join(input_path, "data_for_sign")
+ fd_sign = os.open(data_for_sign, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ data_for_sign_fp = os.fdopen(fd_sign, "wb")
+ data_for_sign_fp.write(config_header.get_packed_data())
+ data_for_sign_fp.write(ta_cert_buf)
+ data_for_sign_fp.write(tlv_config_buf)
+ data_for_sign_fp.close()
+ delete_temp_folder(input_path)
+
+
+def main():
+ argvs = sys.argv
+ ta_input_path = argvs[1]
+ ta_cert_path = argvs[2]
+ config_cert_path = argvs[3]
+ if not os.path.exists(ta_input_path):
+ logging.error("ta_input_path does not exist.")
+ sys.exit(1)
+ if not os.path.exists(ta_cert_path):
+ logging.error("ta_cert_path does not exist.")
+ sys.exit(1)
+ if not os.path.exists(config_cert_path):
+ # cloud Product Signing Config May Not Have Certificates
+ logging.error("config_cert_path does not exist.")
+
+ if whitelist_check(ta_input_path):
+ logging.error("ta_input_path is incorrect.")
+ sys.exit(1)
+ if whitelist_check(ta_cert_path):
+ logging.error("ta_cert_path is incorrect.")
+ sys.exit(1)
+ if whitelist_check(config_cert_path):
+ logging.error("config_cert_path is incorrect.")
+ sys.exit(1)
+ gen_data_for_sign(ta_input_path, ta_cert_path, config_cert_path)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/build/pack-Config/ReadMe.txt b/build/pack-Config/ReadMe.txt
new file mode 100644
index 0000000..4eae5ad
--- /dev/null
+++ b/build/pack-Config/ReadMe.txt
@@ -0,0 +1,18 @@
+使用说明
+1.taconfig.der证书和config_cert_private.key私钥放入config_cert文件夹下
+ =>放置taconfig.der证书和config_cert_private.key私钥至换当前目录config_cert文件夹下注意保持文件名一致
+ =>taconfig.der证书为config证书该证书应由导入证书CA签发三方TA证书内保存的公钥对应私钥为taconfig_key.pem
+ =>config_cert_private.key为taconfig.der证书公钥对应私钥用来对signature段签名
+2.TA开发者的证书ta_cert.der放至在ta_cert目录
+ =>ta_cert.der证书应至在ta_cert目录该证书应由导入证书CA签发三方TA证书内保存的公钥用来验签TA
+3.configs.xml文件放至在input目录
+ =>configs.xml保存TA基础信息
+4.生成config二进制
+ =>所需文件input/configs.xml、config_cert/taconfig.der、config_cert/config_cert_private.key、ta_cert/ta_cert.der
+ =>生成待签名文件data_for_sign python3 Config_pre.py input/ ${ta_cert_dir}/ta_cert.der ${config_cert_dir}/taconfig.der
+ =>生成签名文件data_for_sign.rsa(仅举例) openssl dgst -sign ${config_cert_dir}/config_cert_private.key -sha256 -out data_for_sign.rsa data_for_sign
+ =>生成config使用公钥python3 config_v2.py input/ output/ TYPE_PUBKEY
+ =>生成config使用证书cp ${config_cert_dir}/taconfig.der input/ ; python3 config_v2.py input/ output/ TYPE_CERT
+5.config二进制生成在output目录
+ =>参考local_sign.sh包含步骤5中流程
+
diff --git a/build/pack-Config/config_cert/ReadMe.txt b/build/pack-Config/config_cert/ReadMe.txt
new file mode 100644
index 0000000..40fde8a
--- /dev/null
+++ b/build/pack-Config/config_cert/ReadMe.txt
@@ -0,0 +1,2 @@
+1.config cert signed by CA
+2.private key of config cert used for signing TA/DRV configuration
diff --git a/build/pack-Config/config_v2.py b/build/pack-Config/config_v2.py
new file mode 100644
index 0000000..7c801b4
--- /dev/null
+++ b/build/pack-Config/config_v2.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+# coding=utf-8
+#----------------------------------------------------------------------------
+# Copyright @ Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+# tools for generating a signed config
+#----------------------------------------------------------------------------
+
+import struct
+import os
+import stat
+import sys
+import re
+import configparser
+import logging
+
+CONFIG_VERSION = 2
+
+
+class Configuration:
+ ''' Configuration '''
+ sign_alg = "RSA_PKCS1"
+
+ def __init__(self, file_name):
+ parser = configparser.ConfigParser()
+ parser.read(file_name)
+ self.sign_alg = parser.get("signConfigPrivateCfg", "configSignAlg")
+ if whitelist_check(self.sign_alg):
+ logging.error("configSignAlg is invalid.")
+ sys.exit(1)
+
+
+def whitelist_check(intput_str):
+ if not re.match(r"^[A-Za-z0-9\/\-_.]+$", intput_str):
+ return 1
+ return 0
+
+
+def gen_config_section(input_path, output_path, verify_type):
+ ''' generate config file section '''
+ data_for_sign = os.path.join(input_path, "data_for_sign")
+ signature = os.path.join(input_path, "data_for_sign.rsa")
+ signed_config = os.path.join(output_path, "config")
+ config_certpath = os.path.join(input_path, "taconfig.der")
+
+ config_path = input_path + '/../../signtools'
+ config_file = os.path.join(config_path, "config_tee_private_sample.ini")
+ if not os.path.exists(config_file):
+ logging.critical("config_tee_private_sample.ini is not exist.")
+ sign_conf_alg = 1
+ else:
+ cfg = Configuration(config_file)
+ if cfg.sign_alg == "RSA_PKCS1":
+ sign_conf_alg = 1
+ elif cfg.sign_alg == "RSA_PSS":
+ sign_conf_alg = 3
+ elif cfg.sign_alg == "ECDSA":
+ sign_conf_alg = 2
+
+ data_for_sign_size = os.path.getsize(data_for_sign)
+ with open(data_for_sign, 'rb') as data_for_sign_fp:
+ data_for_sign_buf = data_for_sign_fp.read(data_for_sign_size)
+
+ signature_size = os.path.getsize(signature)
+ with open(signature, 'rb') as signature_fp:
+ signature_buf = signature_fp.read(signature_size)
+
+ if(verify_type == "TYPE_PUBKEY"):
+ sign_verify_buf = struct.pack('III', 0, sign_conf_alg, 0) + signature_buf
+ elif(verify_type == "TYPE_CERT"):
+ config_cert_size = os.path.getsize(config_certpath)
+ with open(config_certpath, 'rb') as config_cert_fp:
+ config_cert_buf = config_cert_fp.read(config_cert_size)
+ sign_verify_buf = struct.pack('III', 1, sign_conf_alg, config_cert_size) + \
+ config_cert_buf + signature_buf
+
+ fd_sign = os.open(signed_config, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ signed_config_fp = os.fdopen(fd_sign, "wb")
+ # write data (header + ta cert + tlv config)
+ signed_config_fp.write(data_for_sign_buf)
+ # write config cert
+ signed_config_fp.write(sign_verify_buf)
+ signed_config_fp.close()
+
+
+def main():
+ argvs = sys.argv
+ input_file = argvs[1]
+ output_file = argvs[2]
+ verify_type = argvs[3]
+ if not os.path.exists(input_file):
+ logging.error("input does not exist.")
+ exit()
+ if not os.path.exists(output_file):
+ logging.error("ta_cert_path does not exist.")
+ exit()
+
+ if whitelist_check(input_file):
+ logging.error("input is incorrect.")
+ exit()
+ if whitelist_check(output_file):
+ logging.error("output is incorrect.")
+ exit()
+ if whitelist_check(verify_type):
+ logging.error("output is incorrect.")
+ exit()
+
+ gen_config_section(input_file, output_file, verify_type)
+
+
+if __name__ == '__main__':
+ main()
+
diff --git a/build/pack-Config/input/configs.xml b/build/pack-Config/input/configs.xml
new file mode 100644
index 0000000..631a708
--- /dev/null
+++ b/build/pack-Config/input/configs.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ConfigInfo>
+ <TA_Basic_Info>
+ <service_name>demo</service_name>
+ <uuid>00000000-0000-0000-0000-000000000000</uuid>
+ </TA_Basic_Info>
+ <TA_Manifest_Info>
+ <instance_keep_alive>false</instance_keep_alive>
+ <stack_size>2048</stack_size>
+ <heap_size>20480</heap_size>
+ <multi_command>false</multi_command>
+ <multi_session>true</multi_session>
+ <single_instance>true</single_instance>
+ </TA_Manifest_Info>
+</ConfigInfo>
diff --git a/build/pack-Config/local_sign.sh b/build/pack-Config/local_sign.sh
new file mode 100644
index 0000000..a3657e0
--- /dev/null
+++ b/build/pack-Config/local_sign.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+# make config binary
+# Copyright @ Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+
+set -e
+# generate and sign the config binary with local private key.
+
+work_dir=$(pwd)
+input_dir=${work_dir}/"input"
+config_cert_dir=${work_dir}/"config_cert"
+ta_cert_dir=${work_dir}/"ta_cert"
+
+# prepare data for been signed.
+python3 Config_pre.py input/ ${ta_cert_dir}/ta_cert.der ${config_cert_dir}/taconfig.der
+
+# begin sign.
+cd ${input_dir}
+if [ ! -f "data_for_sign" ]; then
+ echo "can't find data for sign"
+ echo "sign fail!"
+ exit -1
+fi
+
+# config_cert_private.key is the private key of the config certificate.
+openssl dgst -sign ${config_cert_dir}/config_cert_private.key -sha256 -sigopt rsa_padding_mode:pss \
+ -sigopt rsa_pss_saltlen:-1 -out data_for_sign.rsa data_for_sign
+
+# generate config binary
+cd ${work_dir}
+
+if [ -f "${config_cert_dir}/taconfig.der" ]; then
+ echo "make config with config cert"
+ cp ${config_cert_dir}/taconfig.der ${input_dir}/
+ python3 config_v2.py input/ output/ TYPE_CERT
+else
+ python3 config_v2.py input/ output/ TYPE_PUBKEY
+fi
+
+# clean
+cd $input_dir
+[ -f "$input_dir"/data_for_sign ] && rm data_for_sign
+[ -f "$input_dir"/data_for_sign.rsa ] && rm data_for_sign.rsa
+[ -f "$input_dir"/configs_tlv ] && rm configs_tlv
+[ -f "$input_dir"/*.der ] && rm *.der
+
+if [ "$?" == 0 ]; then
+ echo "generate config binary success"
+ exit 0
+else
+ echo "generate config binary failed"
+ exit 1
+fi
diff --git a/build/pack-Config/output/ReadMe.txt b/build/pack-Config/output/ReadMe.txt
new file mode 100644
index 0000000..cbf7ad2
--- /dev/null
+++ b/build/pack-Config/output/ReadMe.txt
@@ -0,0 +1 @@
+output the signed perm_config
diff --git a/build/pack-Config/ta_cert/ReadMe.txt b/build/pack-Config/ta_cert/ReadMe.txt
new file mode 100644
index 0000000..cabddd4
--- /dev/null
+++ b/build/pack-Config/ta_cert/ReadMe.txt
@@ -0,0 +1 @@
+TA cert signed by CA to verify the identify of TA
diff --git a/build/pack-TA/Readme.txt b/build/pack-TA/Readme.txt
new file mode 100644
index 0000000..05a2a56
--- /dev/null
+++ b/build/pack-TA/Readme.txt
@@ -0,0 +1,12 @@
+1.TA Signature Packing Preparation Materials, and put these files to build/pack-TA/input folder:
+1).libcombine.so TA compilation product
+2).manifest.txt Basic TA configuration information
+3).config.mk file
+
+2.Generate rsa key pair by cmd:openssl genrsa -out private_key.pem 4096,
+then put this file to build/signtools/TA_cert/, file name must be private_key.pem.
+
+3.Apply for the TA config certificate from the Huawei contact person, then put this file to
+build/signtools/signed_config/, file name must be config.
+
+4.Run build_TA_Linux_release.sh script. Obtain the signed TA product sec file from build/pack-TA/output folder.
\ No newline at end of file
diff --git a/build/pack-TA/build_ta.sh b/build/pack-TA/build_ta.sh
new file mode 100644
index 0000000..97a6e0a
--- /dev/null
+++ b/build/pack-TA/build_ta.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+# Description: preare toolchains and env for build ta.
+# Copyright @ Huawei Technologies Co., Ltd. 2021-2022. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+set -e
+
+LOCAL_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+ITRUSTEE_SDK_PATH=$LOCAL_PATH/../signtools/
+
+INPUT_PATH=$LOCAL_PATH/input
+OUTPUT_PATH=$LOCAL_PATH/output
+
+python3 -B ${ITRUSTEE_SDK_PATH}/signtool_v3.py ${INPUT_PATH} ${OUTPUT_PATH} --privateCfg ${ITRUSTEE_SDK_PATH}/config_cloud.ini
diff --git a/build/pack-TA/input/Readme.txt b/build/pack-TA/input/Readme.txt
new file mode 100644
index 0000000..28ae7f5
--- /dev/null
+++ b/build/pack-TA/input/Readme.txt
@@ -0,0 +1,4 @@
+TA Signature Packing Preparation Materials, and put these files in this folder:
+1).libcombine.so TA compilation product
+2).manifest.txt Basic TA configuration information
+3).config.mk file
\ No newline at end of file
diff --git a/build/pack-TA/output/Readme.txt b/build/pack-TA/output/Readme.txt
new file mode 100644
index 0000000..da8f565
--- /dev/null
+++ b/build/pack-TA/output/Readme.txt
@@ -0,0 +1 @@
+The final TA sec file is generated in this path.
\ No newline at end of file
diff --git a/build/signtools/auth_conf_parser.py b/build/signtools/auth_conf_parser.py
new file mode 100644
index 0000000..cf525b1
--- /dev/null
+++ b/build/signtools/auth_conf_parser.py
@@ -0,0 +1,260 @@
+#!/usr/bin/env python3
+# coding=utf-8
+#----------------------------------------------------------------------------
+# Copyright @ Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+# tools for parsering the dynamic ca caller infomation
+#----------------------------------------------------------------------------
+from __future__ import absolute_import
+import os
+import stat
+import logging
+import hashlib
+import struct
+from ctypes import create_string_buffer
+from ctypes import c_uint32
+from ctypes import sizeof
+from ctypes import memmove
+from ctypes import byref
+from defusedxml import ElementTree as ET
+
+logging.basicConfig(level=logging.INFO,
+ format='%(asctime)s line:%(lineno)d %(levelname)s:%(name)s:%(message)s',
+ datefmt='%H:%M:%S'
+ )
+
+
+# caller base config
+MAX_CALLER_NUM = 16
+MAX_CMDLINE_LEN = 256
+MAX_USERNAME_LEN = 256
+AUTH_CONFIG_KEY = "gpd.ta.auth:"
+DEFAULT_AUTH_TYPE_UID = True
+
+
+# init caller info
+g_caller_num = 0
+g_caller_enable = 1
+g_hash_byte_list = bytes("", 'utf-8')
+g_auth_type = True # default auth type: cmdline + uid
+g_big_endian = False
+
+
+def print_hash(byte_buf):
+ """ print caller hash """
+ buf = [hex(int(i)) for i in byte_buf]
+ logging.info(" ".join(buf))
+
+
+def calc_sha256(buf):
+ """ calcuate sha256 """
+ md = hashlib.sha256()
+ md.update(buf)
+ return md.digest()
+
+
+def calc_cmdline_uid_hash(cmdline, uid):
+ """ calcuate cmdline||uid hash """
+ c_uid = c_uint32(uid)
+ c_str = create_string_buffer(cmdline.encode('utf-8'), len(cmdline) + sizeof(c_uid))
+ memmove(byref(c_str, len(c_str.value)), byref(c_uid), sizeof(c_uid))
+ return calc_sha256(c_str)
+
+
+def calc_cmdline_username_hash(cmdline, username):
+ """ calcuate cmdline||username hash """
+ c_str = create_string_buffer((cmdline + username).encode('utf-8'), len(cmdline) + MAX_USERNAME_LEN)
+ return calc_sha256(c_str)
+
+
+def check_auth_enable_type(value):
+ """ check auth_enable type """
+ if len(value) == 0:
+ raise RuntimeError("auth_enable value must be configured")
+ if value != "true" and value != 'false':
+ raise RuntimeError("auth_enable value must be true or false", value)
+
+
+def get_auth_enable_value(value):
+ """ check auth_enable value """
+ global g_caller_enable
+ if value == "false":
+ g_caller_enable = 0
+ else:
+ g_caller_enable = 1
+
+
+def check_auth_type(value):
+ """ check auth type """
+ if len(value) == 0:
+ raise RuntimeError("auth_uid_type value must be configured")
+ if value != "true" and value != 'false':
+ raise RuntimeError("auth_uid_type value must be true or false", value)
+
+
+def get_auth_type_value(value):
+ """ check auth type value """
+ global g_auth_type
+ if value == "false":
+ g_auth_type = False
+ else:
+ g_auth_type = True
+
+
+def check_item_type(item):
+ """ check item value """
+ if item.tag != "item" or len(item.attrib) != 2:
+ raise RuntimeError("invaild item attrib", item.tag, item.attrib, len(item.attrib))
+
+
+def check_cmdline_type(value):
+ """ check cmdline type """
+ if len(value) == 0 or len(value) > MAX_CMDLINE_LEN:
+ raise RuntimeError("invaild cmdline, the cmdline length must be in range (0, {}]".format(MAX_CMDLINE_LEN), \
+ value, len(value))
+
+
+def check_uid_type(value):
+ """ check uid type """
+ if int(value, 10) > 0xffffffff or int(value, 10) < 0:
+ raise RuntimeError("invaild uid, the uid value must be in [0, 0xffffffff]", value)
+
+
+def check_username_type(value):
+ """ check username type """
+ if len(value) == 0 or len(value) > MAX_USERNAME_LEN:
+ raise RuntimeError("invaild username, the username length must be in range (0, {}]".format(MAX_USERNAME_LEN), \
+ value, len(value))
+
+
+def get_item_value(item, auth_type):
+ """ get item value """
+ cmdline = ""
+ uid = 0
+ username = ""
+ caller_hash = ""
+ global g_caller_num
+ global g_hash_byte_list
+
+ if auth_type == DEFAULT_AUTH_TYPE_UID:
+ attr_key = "uid"
+ else:
+ attr_key = "username"
+
+ for attr in item.attrib:
+ value = item.attrib[attr]
+ if attr == "cmdline":
+ check_cmdline_type(value)
+ cmdline = value
+ elif attr == attr_key:
+ if auth_type == DEFAULT_AUTH_TYPE_UID:
+ check_uid_type(value)
+ uid = int(value, 10)
+ else:
+ check_username_type(value)
+ username = value
+ else:
+ raise RuntimeError("invaild item attr", attr)
+
+ if auth_type == DEFAULT_AUTH_TYPE_UID:
+ caller_hash = calc_cmdline_uid_hash(cmdline, uid)
+ logging.info("cmdline %s, uid %s", cmdline, uid)
+ else:
+ caller_hash = calc_cmdline_username_hash(cmdline, username)
+ logging.info("cmdline %s, username %s", cmdline, username)
+ print_hash(caller_hash)
+ if g_big_endian is True:
+ pack_format = ">32s"
+ else:
+ pack_format = "32s"
+ g_hash_byte_list = g_hash_byte_list + struct.pack(pack_format, caller_hash)
+ g_caller_num = g_caller_num + 1
+ if g_caller_num > MAX_CALLER_NUM:
+ raise RuntimeError("Exceed max caller num", MAX_CALLER_NUM)
+
+
+def handle_auth_base_info(child):
+ """ handle auth_base_info """
+ for attr in child.attrib:
+ if attr == "auth_enable":
+ check_auth_enable_type(child.attrib.get(attr))
+ get_auth_enable_value(child.attrib.get(attr))
+ elif attr == "auth_type_uid":
+ check_auth_type(child.attrib.get(attr))
+ get_auth_type_value(child.attrib.get(attr))
+ else:
+ raise RuntimeError("invaild auth_base_info attrib", attr)
+
+
+def handle_auth_item(child, auth_type):
+ """ handle auth item """
+ for item in child:
+ check_item_type(item)
+ get_item_value(item, auth_type)
+
+
+def do_parser_auth_conf(root):
+ """ do parser auth config """
+ auth_tag = "auth_cmdline_uid"
+ xml_line_num = 0
+ for child in root:
+ if child.tag == "auth_base_info":
+ if xml_line_num != 0:
+ raise RuntimeError("the auth_base_info must be configured first")
+ handle_auth_base_info(child)
+ if g_auth_type != DEFAULT_AUTH_TYPE_UID:
+ auth_tag = "auth_cmdline_username"
+ elif child.tag == auth_tag:
+ handle_auth_item(child, g_auth_type)
+ else:
+ raise RuntimeError("not support xml tag", child.tag)
+ xml_line_num = xml_line_num + 1
+
+
+def parser_auth_xml(auth_xml_file_path, manifest_ext_path, big_endian=False):
+ """ parser auth xml """
+ global g_caller_num
+ global g_hash_byte_list
+ global g_big_endian
+
+ g_big_endian = big_endian
+
+ if not os.path.exists(auth_xml_file_path):
+ raise RuntimeError("auth_config.xml file doesn't exist")
+
+ tree = ET.parse(auth_xml_file_path)
+ root = tree.getroot()
+
+ # parser auth config
+ do_parser_auth_conf(root)
+
+ # gen auth header
+ if g_caller_enable == 0:
+ g_caller_num = 0
+ g_hash_byte_list = bytes("", 'utf-8')
+
+ if g_big_endian is True:
+ pack_format = ">II"
+ else:
+ pack_format = "II"
+ auth_header = struct.pack(pack_format, g_caller_enable, g_caller_num)
+
+ #write auth to mani_ext
+ if not os.path.exists(manifest_ext_path):
+ fd_ext = os.open(manifest_ext_path, os.O_WRONLY | os.O_CREAT, stat.S_IWUSR | stat.S_IRUSR)
+ else:
+ fd_ext = os.open(manifest_ext_path, os.O_RDWR, 0o600)
+ with os.fdopen(fd_ext, 'ba+') as fp_mani_ext:
+ fp_mani_ext.write(bytes(AUTH_CONFIG_KEY, "utf-8"))
+ fp_mani_ext.write(auth_header)
+ fp_mani_ext.write(g_hash_byte_list)
+ fp_mani_ext.write(bytes("\n", "utf-8"))
+ fp_mani_ext.close()
diff --git a/build/signtools/config_cloud.ini b/build/signtools/config_cloud.ini
new file mode 100644
index 0000000..b366ad8
--- /dev/null
+++ b/build/signtools/config_cloud.ini
@@ -0,0 +1,60 @@
+[signSecPrivateCfg]
+;;;
+;private key length for signing TA:
+;[fixed value]
+;256 ECDSA Alg
+;2048/4096 RSA Alg
+secSignKeyLen = 4096
+;;;
+;[fixed value]
+;0 means SHA256 hash type
+;1 means SHA512 hash type
+secHashType = 0
+;;;
+; [fixed value]
+;0 means padding type is pkcs1v15
+;1 means padding type is PSS
+;[fixed value]
+secPaddingType = 1
+;;;
+;[fixed value]
+;RSA alg
+;ECDSA alg
+;SM2 alg
+secSignAlg = RSA
+;;;
+;public key for encrypt TA
+secEncryptKey = rsa_public_key_cloud.pem
+;;;
+;public key length
+secEncryptKeyLen = 3072
+
+[signSecPublicCfg]
+;;;
+;[fixed value]
+; sec sign key type
+;0 means debug
+;1 means release
+secReleaseType = 1
+;;;
+;0 means TA not installed by OTRP
+;1 means TA installed by OTRP
+secOtrpFlag = 0
+;;;
+;0 means not sign
+;1 means signed by local private
+;2 means signed using native sign tool;
+;3 means signed by CI
+;[fixed value]
+secSignType = 1
+;;;
+;server address for signing TA
+secSignServerIp =
+;;;
+;private key for signing TA
+;[private key owned by yourself]
+secSignKey = TA_cert/private_key.pem
+;;;
+;config file
+;[signed config file by Huawei]
+configPath = signed_config/config
diff --git a/build/signtools/config_tee_private_sample.ini b/build/signtools/config_tee_private_sample.ini
new file mode 100644
index 0000000..5b2bb9c
--- /dev/null
+++ b/build/signtools/config_tee_private_sample.ini
@@ -0,0 +1,35 @@
+[signSecPrivateCfg]
+;;;
+;private key length for signing TA
+secSignKeyLen = 4096
+;;;
+;0 means SHA256 hash type
+;1 means SHA512 hash type
+secHashType = 0
+;;;
+; Fixed value
+;1 means padding type is PSS
+secPaddingType = 1
+;;;
+;RSA alg
+;ECDSA alg
+secSignAlg = RSA
+[signConfigPrivateCfg]
+;;;
+; Fixed value
+;0 config证书
+configVersion = 0
+;;;
+; Fixed value 1
+configPolicy = 1
+;;;
+;RSA_PKCS1 alg
+;RSA_PSS alg
+;ECDSA alg
+configSignAlg = RSA_PSS
+;;;
+;1 means signed by local private
+configSignType = 1
+;;;
+;private key for signing TA
+configSignKey = taconfig_key.pem
diff --git a/build/signtools/dyn_conf_checker.py b/build/signtools/dyn_conf_checker.py
new file mode 100644
index 0000000..64eeaf2
--- /dev/null
+++ b/build/signtools/dyn_conf_checker.py
@@ -0,0 +1,512 @@
+#!/usr/bin/env python3
+# coding=utf-8
+#----------------------------------------------------------------------------
+# Copyright @ Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+# tools for generating a trusted application dyn perm checker
+#----------------------------------------------------------------------------
+
+
+import re
+import uuid
+
+uuid_split_sym_list = ['-']
+spilt_sym_list = [';', '|', ',']
+unused_sym_list = ['_']
+unique_list = []
+permission_unique_dict = {}
+cmd_unique_dict = {}
+
+
+def check_csv_sym(value):
+
+ for sym in value:
+ if sym in unused_sym_list:
+ continue
+ elif sym >= 'A' and sym <= 'Z':
+ continue
+ elif sym >= 'a' and sym <= 'z':
+ continue
+ elif sym >= '0' and sym <= '9':
+ continue
+ else:
+ raise RuntimeError("has invalid sym in csv", value)
+
+
+def classify_uuid_list(value):
+
+ ans = ""
+ uuid_list = value.split(',')
+ for uuid_item in uuid_list:
+ ans = "%s%s," % (ans, str(uuid.UUID(uuid_item)))
+
+ return ans[:len(ans) - 1].strip()
+
+
+def check_context_sym(old_item, attr, value):
+
+ if len(value) == 0:
+ return -1
+
+ for sym in value:
+ if sym in uuid_split_sym_list:
+ continue
+ elif sym in spilt_sym_list:
+ continue
+ elif sym in unused_sym_list:
+ continue
+ elif sym >= 'A' and sym <= 'Z':
+ continue
+ elif sym >= 'a' and sym <= 'z':
+ continue
+ elif sym >= '0' and sym <= '9':
+ continue
+ else:
+ raise RuntimeError("has invalid sym in xml", \
+ old_item + attr, value)
+ return 0
+
+
+def do_split_and_classify(old_item, attr, split_sym_index, value):
+
+ ans = ""
+ value_list = value.split(spilt_sym_list[split_sym_index])
+ for val in value_list:
+ val = val.strip()
+ if len(val) == 0:
+ raise RuntimeError("cannot split empty region", value)
+ if split_sym_index == len(spilt_sym_list) - 1:
+ if check_context_sym(old_item, attr, val) != 0:
+ raise RuntimeError("xml attrib cannot be NULL", \
+ old_item + attr, value)
+ ans += val + spilt_sym_list[split_sym_index]
+ else:
+ ans += do_split_and_classify(old_item, attr, split_sym_index + 1,\
+ val) + spilt_sym_list[split_sym_index]
+
+ return ans[: len(ans) - 1]
+
+
+def check_and_classify_attr(old_item, attr, value):
+
+ if len(value) == 0:
+ raise RuntimeError("tag %s%s is NULL in xml" % (old_item, attr))
+
+ value = do_split_and_classify(old_item, attr, 0, value)
+
+ if attr == "uuid":
+ value = classify_uuid_list(value)
+
+ return value
+
+
+def check_iomap_range(iomap_range):
+
+ if len(iomap_range) == 0:
+ raise RuntimeError("you must define iomap_range")
+
+ iomap_range.replace(" ", "")
+ iomap_ranges = iomap_range.split(";")
+ for iomap in iomap_ranges:
+ addrs = iomap.split(",")
+ # check if range is start,end format
+ if len(addrs) == 0:
+ continue
+
+ if len(addrs) != 2:
+ raise RuntimeError("iomap must be start1,end1;\
+start2,end2....", addrs)
+
+ if '0x' not in addrs[0] or '0x' not in addrs[1]:
+ raise RuntimeError("addr must be hex like \
+0xF8555000", addrs[0], addrs[1])
+
+ # check if addr is 4K aligned
+ start = int(addrs[0], 16)
+ end = int(addrs[1], 16)
+ if start > 0xffffffffffffffff or end > 0xffffffffffffffff:
+ raise RuntimeError("addr is so large", addrs[0], addrs[1])
+ if start % 0x1000 != 0 or end % 0x1000 != 0:
+ raise RuntimeError("addr must be 4K aligned", addrs[0], addrs[1])
+ if end <= start:
+ raise RuntimeError("iomap range start must \
+smaller than end ", addrs[0], addrs[1])
+
+ return 0
+
+
+def check_thread_limit(value):
+
+ if len(value) > 0:
+ thread_limit = int(value)
+ if thread_limit > 0xffffffff or thread_limit <= 0:
+ raise RuntimeError("thread_limit is invalid", thread_limit)
+
+
+def check_upgrade(value):
+
+ if len(value) > 0:
+ if value.lower() != 'true' and value.lower() != 'false':
+ raise RuntimeError("upgrade must be true or false", value)
+
+
+def check_virt2phys(value):
+
+ if len(value) > 0:
+ if value.lower() != 'true' and value.lower() != 'false':
+ raise RuntimeError("virt2phys must be true or false", value)
+
+
+def check_exception_mode(value):
+
+ if value != "restart" and value != "syscrash" and value != "ddos":
+ raise RuntimeError("unknown exception mode", value)
+
+
+def check_chip_type(attrib, value):
+
+ if len(value) == 0:
+ raise RuntimeError("chip_type cannot be NULL")
+
+ if not re.match(r"[A-Za-z0-9_,]*$", value):
+ raise RuntimeError("there has invalid sym in chip type", value)
+
+ chips = value.split(",")
+ for chip in chips:
+ chip_item = chip.lower().strip()
+ if len(chip_item) > 31:
+ raise RuntimeError("{} length is larger than 31".format(chip_item), chip_item)
+
+ flag = 0
+ for attr in attrib:
+ if attr != "chip_type":
+ flag = 1
+ break
+ if flag == 0:
+ raise RuntimeError("you cannot only set chip_type in item")
+
+
+def check_drv_name(value):
+
+ if len(value) > 31 or len(value) == 0:
+ raise RuntimeError("drv name should not be NULL or \
+length larger than 31", value)
+
+
+def check_irq(value):
+
+ if len(value) == 0:
+ raise RuntimeError("irq cannot be NULL")
+
+ if ';' in value or '|' in value:
+ raise RuntimeError("irq can only split by ,", value)
+
+ irq_list = value.split(',')
+ for irq in irq_list:
+ num = int(irq, 10)
+ if num < 32:
+ raise RuntimeError("irq shoule not smaller than 32", value)
+
+
+def check_map_secure_uuid(attrib, value):
+
+ if len(value) != 36:
+ raise RuntimeError("uuid len is invalid", value)
+
+ flag = 0
+ for attr in attrib:
+ if attr == "region":
+ flag = 1
+
+ if flag == 0:
+ raise RuntimeError("please set region in map secure item", attrib)
+
+
+def check_map_secure_region(attrib, value):
+
+ if len(value) == 0:
+ raise RuntimeError("region cannot be NULL")
+
+ flag = 0
+ for attr in attrib:
+ if attr == "uuid":
+ flag = 1
+
+ if flag == 0:
+ raise RuntimeError("please set uuid in map secure item", attrib)
+
+ check_iomap_range(value)
+
+
+def check_drv_cmd_perm_info_item_permission(attrs, perm):
+
+ if len(perm) == 0:
+ raise RuntimeError("permssion len should not be NULL")
+
+ if not re.match(r"^[0-9]*$", perm):
+ raise RuntimeError("there has invalid sym in perm", perm)
+
+ if int(perm, 10) > 64 or int(perm, 10) < 1:
+ raise RuntimeError("perm can only in range 1-64", perm)
+
+ flag = 0
+
+ for attr in attrs:
+ if attr == "cmd" and len(attrs[attr]) != 0:
+ flag = 1
+ break
+
+ if flag == 0:
+ raise RuntimeError("you should set cmd while you set cmd permission")
+
+
+def check_drv_cmd_perm_info_item_cmd(attrs, dyn_key):
+
+ if len(dyn_key) == 0:
+ raise RuntimeError("dyn_key len should not be 0")
+
+ flag = 0
+
+ cmd = ""
+ for attr in attrs:
+ if attr == "permission" and len(attrs[attr]) != 0:
+ flag = 1
+ if attr == "cmd" and len(attrs[attr]) != 0:
+ cmd = attrs[attr]
+ if (dyn_key, attrs[attr]) in unique_list:
+ raise RuntimeError("one cmd can only set \
+permission once", attrs[attr])
+
+ unique_list.append((dyn_key, cmd))
+
+ if flag == 0:
+ raise RuntimeError("you should set permission while \
+you set cmd permission")
+
+
+def check_mac_info_item_permission(attrs, perm):
+
+ if len(perm) == 0:
+ raise RuntimeError("permssion len should not be 0")
+
+ if ',' in perm or ';' in perm:
+ raise RuntimeError("multi permssion can only split by | ", perm)
+
+ flag = 0
+
+ for attr in attrs:
+ if attr == "uuid" and len(attrs[attr]) != 0:
+ flag = 1
+ break
+
+ if flag == 0:
+ raise RuntimeError("you should set uuid while \
+you set drvcall's permission")
+
+ for perm_num in perm.split("|"):
+ if int(perm_num, 10) > 64 or int(perm_num, 10) < 1:
+ raise RuntimeError("perm can only in range 1-64", perm)
+
+
+def check_mac_info_item_uuid(attrs, dyn_key):
+
+ if len(dyn_key) == 0:
+ raise RuntimeError("dyn_key len should not be 0")
+
+ uuid_str = ""
+ for attr in attrs:
+ if attr == "uuid" and len(attrs[attr]) != 0:
+ uuid_str = attrs[attr]
+ if ',' in uuid_str:
+ raise RuntimeError("uuid in mac can only set one", uuid_str)
+ if (dyn_key, uuid_str) in unique_list:
+ raise RuntimeError("uuid can only set once in mac", uuid_str)
+
+ unique_list.append((dyn_key, uuid_str))
+
+
+def check_permssion_unique(value, origin_value):
+
+ value_list = value.split("|")
+ origin_value_list = origin_value.split("|")
+ if len(value) == 0 or len(value_list) != len(origin_value_list):
+ RuntimeError("permssion trans by csv failed", value, origin_value)
+
+ for (i, _) in enumerate(value_list):
+ if value_list[i] in permission_unique_dict.keys() and \
+ permission_unique_dict.get(value_list[i]) != origin_value_list[i]:
+ raise RuntimeError("different permission set same num in csv",\
+ value, origin_value)
+ permission_unique_dict[value_list[i]] = origin_value_list[i]
+
+
+def check_cmd_unique(value, origin_value):
+
+ value_list = value.split("|")
+ origin_value_list = origin_value.split("|")
+ if len(value) == 0 or len(value_list) != len(origin_value_list):
+ RuntimeError("cmd trans by csv failed", value, origin_value)
+
+ for (i, _) in enumerate(value_list):
+ if value_list[i] in cmd_unique_dict.keys() and \
+ cmd_unique_dict.get(value_list[i]) != origin_value_list[i]:
+ raise RuntimeError("different cmd set same num in csv", \
+ value, origin_value)
+ cmd_unique_dict[value_list[i]] = origin_value_list[i]
+
+
+def check_perm_apply_item(attrs, perm):
+
+ if len(perm) == 0:
+ raise RuntimeError("permssion len should not be 0")
+
+ flag = 0
+
+ for attr in attrs:
+ if attr == "name" and len(attrs[attr]) != 0:
+ flag = 1
+ break
+
+ if flag == 0:
+ raise RuntimeError("you should set drv's name while \
+you set drv's permission")
+
+
+def check_ta_config_service_name(service_name):
+
+ if len(service_name) == 0 or len(service_name) >= 40:
+ raise Exception("service name is invalid", service_name)
+
+
+def check_ta_config_stack_size(stack_size):
+
+ if int(stack_size, 10) > 0xffffffff or int(stack_size, 10) <= 0:
+ raise Exception("stack size is invalid", stack_size)
+
+
+def check_ta_config_heap_size(heap_size):
+
+ if int(heap_size, 10) > 0xffffffff or int(heap_size, 10) <= 0:
+ raise Exception("heap size is invalid", heap_size)
+
+
+def check_ta_config_rpmb_size(rpmb_size):
+
+ if int(rpmb_size, 10) > 0xffffffff or int(rpmb_size, 10) <= 0:
+ raise Exception("rpmb size is invalid", rpmb_size)
+
+
+def check_ta_config_device_id(device_id):
+
+ if len(device_id) != 64:
+ raise Exception("device_id len is invalid", device_id)
+
+ for sym in device_id:
+ if sym >= 'A' and sym <= 'Z':
+ continue
+ elif sym >= '0' and sym <= '9':
+ continue
+ else:
+ raise RuntimeError("has invalid sym in device_id", sym, device_id)
+
+
+def dyn_perm_check(dyn_key, attrib, value, origin_value):
+
+ if dyn_key == 'drv_perm/drv_basic_info/thread_limit':
+ check_thread_limit(value)
+ elif dyn_key == 'drv_perm/drv_basic_info/upgrade':
+ check_upgrade(value)
+ elif dyn_key == 'drv_perm/drv_basic_info/virt2phys':
+ check_virt2phys(value)
+ elif dyn_key == 'drv_perm/drv_basic_info/exception_mode':
+ check_exception_mode(value)
+ elif dyn_key == 'drv_perm/drv_io_map/item/chip_type':
+ check_chip_type(attrib, value)
+ elif dyn_key == 'drv_perm/drv_io_map/item/iomap':
+ check_iomap_range(value)
+ elif dyn_key == 'drv_perm/irq/item/irq':
+ check_irq(value)
+ elif dyn_key == 'drv_perm/map_secure/item/chip_type':
+ check_chip_type(attrib, value)
+ elif dyn_key == 'drv_perm/map_secure/item/uuid':
+ check_map_secure_uuid(attrib, value)
+ return
+ elif dyn_key == 'drv_perm/map_secure/item/region':
+ check_map_secure_region(attrib, value)
+ elif dyn_key == 'drv_perm/map_nosecure/item/chip_type':
+ check_chip_type(attrib, value)
+ elif dyn_key == 'drv_perm/map_nosecure/item/uuid':
+ # uuid has been checked in classify_uuid()
+ return
+ elif dyn_key == 'drv_perm/drv_cmd_perm_info/item/cmd':
+ # cmd has been trans by csv, so it must be valied
+ check_drv_cmd_perm_info_item_cmd(attrib, dyn_key)
+ check_cmd_unique(value, origin_value)
+ return
+ elif dyn_key == 'drv_perm/drv_cmd_perm_info/item/permission':
+ check_drv_cmd_perm_info_item_permission(attrib, value)
+ check_permssion_unique(value, origin_value)
+ elif dyn_key == 'drv_perm/drv_mac_info/item/uuid':
+ # uuid has been checked in classify_uuid()
+ check_mac_info_item_uuid(attrib, dyn_key)
+ return
+ elif dyn_key == 'drv_perm/drv_mac_info/item/permission':
+ check_mac_info_item_permission(attrib, value)
+ check_permssion_unique(value, origin_value)
+ elif dyn_key == 'drvcall_conf/drvcall_perm_apply/item/permission':
+ check_perm_apply_item(attrib, value)
+ check_permssion_unique(value, origin_value)
+ elif dyn_key == 'ConfigInfo/TA_Basic_Info/service_name/service_name':
+ check_ta_config_service_name(value)
+ elif dyn_key == 'ConfigInfo/TA_Basic_Info/uuid/uuid':
+ classify_uuid_list(value)
+ elif dyn_key == 'ConfigInfo/TA_Manifest_Info/stack_size/stack_size':
+ check_ta_config_stack_size(value)
+ elif dyn_key == 'ConfigInfo/TA_Manifest_Info/heap_size/heap_size':
+ check_ta_config_heap_size(value)
+ elif dyn_key == 'ConfigInfo/TA_Control_Info/RPMB_Info/RPMB_size/RPMB_size':
+ check_ta_config_rpmb_size(value)
+ elif dyn_key == \
+ 'ConfigInfo/TA_Control_Info/DEBUG_Info/DEBUG_device_id/DEBUG_device_id':
+ check_ta_config_device_id(value)
+ else:
+ return
+
+
+def check_text_ava(old_item, text):
+
+ if text is None or len(text.strip()) == 0:
+ raise Exception("text is invalied", old_item)
+
+
+ta_config_item_list = [
+ 'ConfigInfo/TA_Basic_Info/service_name/',
+ 'ConfigInfo/TA_Basic_Info/uuid/',
+ 'ConfigInfo/TA_Manifest_Info/instance_keep_alive/',
+ 'ConfigInfo/TA_Manifest_Info/stack_size/',
+ 'ConfigInfo/TA_Manifest_Info/heap_size/',
+ 'ConfigInfo/TA_Manifest_Info/multi_command/',
+ 'ConfigInfo/TA_Manifest_Info/multi_session/',
+ 'ConfigInfo/TA_Manifest_Info/single_instance/',
+ 'ConfigInfo/TA_Control_Info/RPMB_Info/RPMB_size/',
+ 'ConfigInfo/TA_Control_Info/RPMB_Info/RPMB_Permission/RPMB_general/',
+ 'ConfigInfo/TA_Control_Info/SE_Info/SE_open_session/',
+ 'ConfigInfo/TA_Control_Info/TUI_Info/TUI_general/',
+ 'ConfigInfo/TA_Control_Info/DEBUG_Info/debug_status/',
+ 'ConfigInfo/TA_Control_Info/DEBUG_Info/DEBUG_device_id/']
+
+
+def check_ta_config(old_item, text):
+
+ if old_item in ta_config_item_list:
+ check_text_ava(old_item, text)
+
+ return True
diff --git a/build/signtools/dyn_conf_parser.py b/build/signtools/dyn_conf_parser.py
new file mode 100644
index 0000000..7ecb7f6
--- /dev/null
+++ b/build/signtools/dyn_conf_parser.py
@@ -0,0 +1,315 @@
+#!/usr/bin/env python3
+# coding=utf-8
+#----------------------------------------------------------------------------
+# Copyright @ Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+# tools for generating a trusted application dyn perm parser
+#----------------------------------------------------------------------------
+
+import string
+import os
+import stat
+import logging
+from defusedxml import ElementTree as ET
+from dyn_conf_checker import dyn_perm_check
+from dyn_conf_checker import check_and_classify_attr
+from dyn_conf_checker import check_csv_sym
+from dyn_conf_checker import check_ta_config
+
+
+type_trans = {"TYPE_NONE": "-1",
+ "TYPE_CLASS": "0",
+ "TYPE_BOOL": "1",
+ "TYPE_INT": "2",
+ "TYPE_CHAR": "3"}
+
+# the length len in tlv
+DYN_CONF_LEN_LEN = 4
+
+tag_dict = {}
+type_dict = {}
+trans_dict = {}
+
+
+def get_csv_size(path):
+
+ with open(path, "r", encoding="utf-8") as csvfile:
+ lines = csvfile.readlines()
+ return len(lines)
+ return 0
+
+
+def get_csv_data(path, lnum, rnum):
+
+ with open(path, "r", encoding="utf-8") as csvfile:
+ count = 0
+ lines = csvfile.readlines()
+ for line in lines:
+ if count == lnum:
+ return str(line.split(",")[rnum]).strip()
+ count = count + 1
+ return ""
+
+
+def classify_tag(tag):
+
+ while len(tag) < 3:
+ tag = "0%s" % (tag)
+
+ return tag
+
+
+# save tag type and trans dict
+def handle_tag_dict(path):
+
+ for i in range(0, get_csv_size(path)):
+ dyn_sym = get_csv_data(path, i, 0)
+ tag_dict[dyn_sym] = classify_tag(get_csv_data(path, i, 1))
+ type_dict[dyn_sym] = type_trans.get(get_csv_data(path, i, 2))
+ trans_dict[dyn_sym] = get_csv_data(path, i, 3)
+
+
+def check_target_data_been_found(sym, find_out, path):
+
+ if find_out == 1:
+ raise RuntimeError(sym + " can only set one time in " + path)
+
+
+# trans value sym by trans dict
+def handle_trans(value, path):
+
+ datas = value.split("|")
+
+ for i, data in enumerate(datas):
+ find_out = 0
+ target_data = data
+ for j in range(0, get_csv_size(path)):
+ sym = get_csv_data(path, j, 0)
+ tag = get_csv_data(path, j, 1)
+ check_csv_sym(sym)
+ check_csv_sym(tag)
+ if sym == target_data:
+ # if one sym has been set more than one time in csv
+ check_target_data_been_found(sym, find_out, path)
+ datas[i] = tag
+ find_out = 1 # means we find sym in dict
+
+ if find_out == 0:
+ raise RuntimeError("cannot find {} in {}".format(datas[i], path))
+
+ ans = datas[0]
+ for i in range(1, len(datas)):
+ ans = "%s|%s" % (ans, datas[i])
+
+ return ans
+
+
+def get_value_by_name_in_config(config_name, in_path):
+
+ config_file = os.path.join(in_path, config_name)
+ if not os.path.exists(config_file):
+ logging.error("configs.xml file doesn't exist")
+ return ""
+ xml_tree = ET.parse(config_file)
+ drv_perm = xml_tree.find('./TA_Basic_Info/service_name')
+ return drv_perm.text
+
+
+def get_value_by_name_in_manifest(manifest_name, in_path):
+
+ manifest = os.path.join(in_path, "manifest.txt")
+ if not os.path.exists(manifest):
+ name = get_value_by_name_in_config("configs.xml", in_path)
+ if name != "":
+ return name
+ else:
+ with open(manifest, 'r') as mani_fp:
+ for each_line in mani_fp:
+ if each_line.startswith("#") or not each_line.strip():
+ continue
+ name = each_line.split(":")[0].strip()
+ if "{" + name + "}" == manifest_name:
+ return str(each_line.split(":")[1].strip())
+
+ raise RuntimeError("{" + manifest_name + "}" + \
+ "cannot find in " + manifest)
+
+
+def get_value_trans(old_item, value, attrib, key, in_path):
+
+ # if name contains '.csv' means
+ # we can transform value by {manifest_name}.csv
+ # manifest_name must in manifest.txt
+ if ".csv" in trans_dict.get(key):
+ manifest_name = trans_dict.get(key).split(".csv")[0]
+ manifest_value = get_value_by_name_in_manifest(manifest_name, in_path)
+ trans_file_path = os.path.join(in_path, "{}.csv".format(manifest_value))
+ return handle_trans(value, trans_file_path)
+ # if name not contains '.csv' means
+ # we can transform value by {attrib[attri]}.csv
+ # attrib[attri] must in xml file
+ for attri in attrib:
+ if old_item + attri == trans_dict.get(key):
+ if len(attrib[attri]) == 0:
+ raise RuntimeError("you should set drv name while \
+ you set drv permission")
+ trans_file_path = os.path.join(in_path, "{}.csv".format(attrib[attri]))
+ return handle_trans(value, trans_file_path)
+
+ raise RuntimeError("cannot find second trans file",\
+ key, trans_dict.get(key))
+
+
+def item_zip(old_item, attr, value, attrib, in_path):
+
+ dyn_key = old_item + attr
+ dyn_type = type_dict.get(dyn_key)
+ origin_value = value
+
+ if len(trans_dict.get(dyn_key)) > 0:
+ value = get_value_trans(old_item, value, attrib, dyn_key, in_path)
+
+ # check the xml is invalid for dyn perm
+ dyn_perm_check(dyn_key, attrib, value, origin_value)
+
+ if dyn_type == type_trans.get("TYPE_BOOL"):
+ if value.lower() == "true":
+ return "1"
+ elif value.lower() == "false":
+ return "0"
+ else:
+ raise Exception("bool can only be true or false")
+ elif dyn_type == type_trans.get("TYPE_INT"):
+ if '0x' in value:
+ return str(int(value, base=16))
+ elif '0b' in value:
+ return str(int(value, base=2))
+ else:
+ return str(int(value, base=10))
+ elif dyn_type == type_trans.get("TYPE_CHAR"):
+ return value
+ else:
+ raise RuntimeError("unknown type")
+
+
+def get_length(value):
+
+ length = len(value)
+ off = int((DYN_CONF_LEN_LEN / 2 - 1) * 8)
+ ans = ""
+
+ for _ in range(int(DYN_CONF_LEN_LEN / 2)):
+ tmp = ""
+ dyn_len = (length >> off) & 0xFF;
+ if dyn_len >= 0 and dyn_len <= 0xF:
+ tmp = "0"
+ tmp += str(hex(dyn_len)).split("x")[1]
+ ans += tmp
+ off -= 8
+
+ return ans
+
+
+def do_parser_dyn_conf(old_item, ele, in_path):
+
+ attrs = ""
+ if len(ele.attrib) > 0:
+ for attr in ele.attrib:
+ ele.attrib[attr] = check_and_classify_attr(old_item,\
+ attr, ele.attrib.get(attr))
+ tag = tag_dict.get(old_item + attr)
+ dyn_type = type_dict.get(old_item + attr)
+ if dyn_type == type_trans.get("TYPE_NONE"):
+ continue
+
+ value = item_zip(old_item, attr, ele.attrib[attr],
+ ele.attrib, in_path)
+ length = get_length(value)
+ attrs = attrs + tag + dyn_type + length + value
+ else:
+ for child in ele:
+ tmp_attrs = do_parser_dyn_conf(old_item + child.tag + "/",
+ child, in_path)
+ if tmp_attrs == "":
+ continue
+ attrs = attrs + tmp_attrs
+
+ # handle inner context
+ if check_ta_config(old_item, ele.text) is True and \
+ ele.text is not None and len(ele.text.strip()) > 0:
+ inner_text = item_zip(old_item + ele.tag, "", ele.text, {}, in_path)
+ attrs = attrs + tag_dict.get(old_item + ele.tag) + \
+ type_dict.get(old_item + ele.tag) + \
+ get_length(inner_text) + inner_text
+
+ if len(tag_dict.get(old_item)) == 0 or attrs == "":
+ return ""
+
+ return tag_dict.get(old_item) + type_dict.get(old_item) + \
+ get_length(attrs) + attrs
+
+
+def parser_dyn_conf(dyn_conf_xml_file_path, manifest_ext_path,
+ tag_parse_dict_path, in_path):
+
+ if not os.path.exists(dyn_conf_xml_file_path):
+ logging.error("dyn perm xml file doesn't exist")
+ return
+
+ if not os.path.exists(tag_parse_dict_path):
+ logging.error("tag_parse_dict.csv file doesn't exist")
+ return
+
+ handle_tag_dict(tag_parse_dict_path)
+ tree = ET.parse(dyn_conf_xml_file_path)
+ root = tree.getroot()
+
+ ans = do_parser_dyn_conf(root.tag + "/", root, in_path)
+ if ans == "":
+ ans = "00000"
+
+ ans = "gpd.ta.dynConf:" + ans + "\n"
+
+ if not os.path.exists(manifest_ext_path):
+ out_tlv = os.path.join(in_path, "config_tlv")
+ with os.fdopen(os.open(out_tlv, \
+ os.O_RDWR | os.O_TRUNC | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR), 'w+') as conf:
+ conf.write(ans)
+ else:
+ #write items to mani_ext
+ manifest_ext_path_fd = os.open(manifest_ext_path, os.O_RDWR, 0o600)
+ with os.fdopen(manifest_ext_path_fd, 'a+') as mani_ext_fp:
+ mani_ext_fp.write(ans)
+
+
+def parser_config_xml(config_xml_file_path, tag_parse_dict_path, \
+ out_path, in_path):
+
+ if not os.path.exists(config_xml_file_path):
+ logging.error("config xml file doesn't exist")
+ return
+ if not os.path.exists(tag_parse_dict_path):
+ logging.error("tag_parse_dict.csv file doesn't exist")
+ return
+
+ handle_tag_dict(tag_parse_dict_path)
+ tree = ET.parse(config_xml_file_path)
+ root = tree.getroot()
+
+ ans = do_parser_dyn_conf(root.tag + "/", root, in_path)
+ if ans == "":
+ ans = "00000"
+
+ # write items to mani_ext
+ config_path_fd = os.open(out_path, os.O_CREAT | os.O_RDWR, 0o600)
+ with os.fdopen(config_path_fd, 'a+') as config_fp:
+ config_fp.write(ans)
diff --git a/build/signtools/generate_hash.py b/build/signtools/generate_hash.py
new file mode 100644
index 0000000..fd90a01
--- /dev/null
+++ b/build/signtools/generate_hash.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+# coding=utf-8
+#----------------------------------------------------------------------------
+# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+# Description: cal hash for generating a trusted application load image
+#----------------------------------------------------------------------------
+
+import struct
+import os
+import hashlib
+import stat
+
+HASH256 = 0
+HASH512 = 1
+
+
+def gen_hash(hash_type, in_data, out_file_path):
+ # Initialize a SHA256 object from the Python hash library
+ if int(hash_type) == HASH256:
+ hash_op = hashlib.sha256()
+ elif int(hash_type) == HASH512:
+ hash_op = hashlib.sha512()
+ hash_op.update(in_data)
+
+ #-----hash file used for ras sign---
+ fd_hash = os.open(out_file_path, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ hash_fp = os.fdopen(fd_hash, "wb")
+ # fixed hash prefix value
+ if int(hash_type) == HASH256:
+ hash_fp.write(struct.pack('B' * 19, 0x30, 0x31, 0x30, 0x0d, 0x06, \
+ 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, \
+ 0x05, 0x00, 0x04, 0x20))
+ elif int(hash_type) == HASH512:
+ hash_fp.write(struct.pack('B' * 19, 0x30, 0x51, 0x30, 0x0d, 0x06, \
+ 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, \
+ 0x05, 0x00, 0x04, 0x40))
+ hash_fp.write(hash_op.digest())
+ hash_fp.close()
+ return
+
+
diff --git a/build/signtools/generate_signature.py b/build/signtools/generate_signature.py
index 382aa91..95657e8 100644
--- a/build/signtools/generate_signature.py
+++ b/build/signtools/generate_signature.py
@@ -1,8 +1,8 @@
#!/usr/bin/env python
-# coding:utf-8
+# coding=utf-8
#----------------------------------------------------------------------------
# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
-# iTrustee licensed under the Mulan PSL v2.
+# Licensed under the Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan
# PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
@@ -11,44 +11,47 @@
# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
+# Description: tools for generating a trusted application load image
#----------------------------------------------------------------------------
-import struct
import os
-import hashlib
+import stat
import subprocess
+import logging
-HASH256 = 0
-HASH512 = 1
+from generate_hash import gen_hash
-def gen_hash(hash_type, in_file_path, out_file_path):
- in_file_size = os.path.getsize(in_file_path)
- # Initialize a SHA256 object from the Python hash library
- if int(hash_type) == HASH256:
- hash_op = hashlib.sha256()
- elif int(hash_type) == HASH512:
- hash_op = hashlib.sha512()
- # Set the input buffer and return the output digest
- with open(in_file_path, 'rb') as in_file:
- hash_op.update(in_file.read(in_file_size))
- #-----hash file used for ras sign---
- with open(out_file_path, 'wb') as hash_fp:
- # fixed hash prefix value
- hash_fp.write(struct.pack('B'*19, 0x30, 0x31, 0x30, 0x0d, 0x06, \
- 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, \
- 0x05, 0x00, 0x04, 0x20))
- hash_fp.write(hash_op.digest())
- return
+def gen_ta_signature(cfg, uuid_str, raw_data, raw_data_path, hash_file_path, \
+ out_file_path, out_path, key_info_data, is_big_ending):
+ msg_file = os.path.join(out_path, "temp", "config_msg")
+ fd_msg = os.open(msg_file, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ msg_file_fp = os.fdopen(fd_msg, "wb")
+ msg_file_fp.write(raw_data)
+ msg_file_fp.close()
+ if cfg.sign_type == '1': # signed with local key
+ if cfg.padding_type == '0':
+ gen_hash(cfg.hash_type, raw_data, hash_file_path)
+ cmd = "openssl pkeyutl -sign -inkey {} -in {} -out {}".\
+ format(cfg.sign_key, hash_file_path, out_file_path)
+ elif cfg.padding_type == '1':
+ if cfg.hash_type == '0':
+ cmd = "openssl dgst -sign {} -sha256 -sigopt \
+ rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 \
+ -out {} {}".format(cfg.sign_key, out_file_path, msg_file)
+ else:
+ cmd = "openssl dgst -sign {} -sha512 -sigopt \
+ rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 \
+ -out {} {}".format(cfg.sign_key, out_file_path, msg_file)
+ try:
+ subprocess.check_output(cmd.split(), shell=False)
+ except Exception:
+ logging.error("sign operation failed")
+ raise RuntimeError
+ else:
+ logging.error("unhandled signtype %s", cfg.sign_type)
-def gen_ta_signature(cfg, uuid_str, raw_data_path, hash_file_path, out_file_path):
- gen_hash(cfg.hash_type, raw_data_path, hash_file_path)
- cmd = "openssl rsautl -sign -inkey {} -in {} -out {}".\
- format(cfg.sign_key, hash_file_path, out_file_path)
- try:
- subprocess.check_output(cmd.split(), shell=False)
- except Exception:
- print("sign operation failed")
- raise RuntimeError
return
+
diff --git a/build/signtools/get_ta_elf_hash.py b/build/signtools/get_ta_elf_hash.py
new file mode 100644
index 0000000..89443e0
--- /dev/null
+++ b/build/signtools/get_ta_elf_hash.py
@@ -0,0 +1,246 @@
+#!/usr/bin/env python3
+# coding=utf-8
+#----------------------------------------------------------------------------
+# Copyright @ Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+# Calculate the elfhash values of TAs by segment and combine the values.
+#----------------------------------------------------------------------------
+
+"""
+calculate the elfhash values of TA
+"""
+
+from __future__ import print_function
+import os
+import sys
+import hashlib
+import struct
+import logging
+
+
+def elf_header_verify_check(elf_header):
+ """ check is elf file """
+ elfinfo_mag0_index = 0
+ elfinfo_mag1_index = 1
+ elfinfo_mag2_index = 2
+ elfinfo_mag3_index = 3
+ elfinfo_mag0 = '\x7f'
+ elfinfo_mag1 = 'E'
+ elfinfo_mag2 = 'L'
+ elfinfo_mag3 = 'F'
+
+ if (elf_header.e_ident[elfinfo_mag0_index] != ord(elfinfo_mag0)) or \
+ (elf_header.e_ident[elfinfo_mag1_index] != ord(elfinfo_mag1)) or \
+ (elf_header.e_ident[elfinfo_mag2_index] != ord(elfinfo_mag2)) or \
+ (elf_header.e_ident[elfinfo_mag3_index] != ord(elfinfo_mag3)):
+ return False
+ return True
+
+
+class ElfIdent:
+ """ define elf ident """
+ s = struct.Struct('4sBBB9s')
+
+ def __init__(self, data):
+ unpacked_data = (ElfIdent.s).unpack(data)
+ self.unpacked_data = unpacked_data
+ self.ei_magic = unpacked_data[0]
+ self.ei_class = unpacked_data[1]
+ self.ei_data = unpacked_data[2]
+ self.ei_ver = unpacked_data[3]
+ self.ei_pad = unpacked_data[4]
+
+
+#----------------------------------------------------------------------------
+# ELF Header Class
+#----------------------------------------------------------------------------
+class Elf32Ehdr:
+ """ 32bit elf file header """
+ s = struct.Struct('16sHHIIIIIHHHHHH')
+
+ def __init__(self, data):
+ unpacked_data = (Elf32Ehdr.s).unpack(data)
+ self.unpacked_data = unpacked_data
+ self.e_ident = unpacked_data[0]
+ self.e_type = unpacked_data[1]
+ self.e_machine = unpacked_data[2]
+ self.e_version = unpacked_data[3]
+ self.e_entry = unpacked_data[4]
+ self.e_phoff = unpacked_data[5]
+ self.e_shoff = unpacked_data[6]
+ self.e_flags = unpacked_data[7]
+ self.e_ehsize = unpacked_data[8]
+ self.e_phentsize = unpacked_data[9]
+ self.e_phnum = unpacked_data[10]
+ self.e_shentsize = unpacked_data[11]
+ self.e_shnum = unpacked_data[12]
+ self.e_shstrndx = unpacked_data[13]
+
+
+class Elf64Ehdr:
+ """ 64bit elf file header """
+ s = struct.Struct('16sHHIQQQIHHHHHH')
+
+ def __init__(self, data):
+ unpacked_data = (Elf64Ehdr.s).unpack(data)
+ self.unpacked_data = unpacked_data
+ self.e_ident = unpacked_data[0]
+ self.e_type = unpacked_data[1]
+ self.e_machine = unpacked_data[2]
+ self.e_version = unpacked_data[3]
+ self.e_entry = unpacked_data[4]
+ self.e_phoff = unpacked_data[5]
+ self.e_shoff = unpacked_data[6]
+ self.e_flags = unpacked_data[7]
+ self.e_ehsize = unpacked_data[8]
+ self.e_phentsize = unpacked_data[9]
+ self.e_phnum = unpacked_data[10]
+ self.e_shentsize = unpacked_data[11]
+ self.e_shnum = unpacked_data[12]
+ self.e_shstrndx = unpacked_data[13]
+
+
+#----------------------------------------------------------------------------
+# ELF Header Class
+#----------------------------------------------------------------------------
+class Elf32Phdr:
+ """ 32bit elf file Phdr """
+ s = struct.Struct('IIIIIIII')
+
+ def __init__(self, data):
+ unpacked_data = (Elf32Phdr.s).unpack(data)
+ self.unpacked_data = unpacked_data
+ self.p_type = unpacked_data[0]
+ self.p_offset = unpacked_data[1]
+ self.p_vaddr = unpacked_data[2]
+ self.p_paddr = unpacked_data[3]
+ self.p_filesz = unpacked_data[4]
+ self.p_memsz = unpacked_data[5]
+ self.p_flags = unpacked_data[6]
+ self.p_align = unpacked_data[7]
+
+
+class Elf64Phdr:
+ """ 64bit elf file Phdr """
+ s = struct.Struct('IIQQQQQQ')
+
+ def __init__(self, data):
+ unpacked_data = (Elf64Phdr.s).unpack(data)
+ self.unpacked_data = unpacked_data
+ self.p_type = unpacked_data[0]
+ self.p_flags = unpacked_data[1]
+ self.p_offset = unpacked_data[2]
+ self.p_vaddr = unpacked_data[3]
+ self.p_paddr = unpacked_data[4]
+ self.p_filesz = unpacked_data[5]
+ self.p_memsz = unpacked_data[6]
+ self.p_align = unpacked_data[7]
+
+
+#----------------------------------------------------------------------------
+# generate hash use SHA256
+#----------------------------------------------------------------------------
+def generate_sha256_hash_hex(in_buf):
+ """ initialize a SHA256 object from the Python hash library """
+ m = hashlib.sha256()
+ # Set the input buffer and return the output digest
+ m.update(in_buf)
+ return m.hexdigest()
+
+
+def get_elf_file_hash(file_name):
+ """ get elf file hash """
+ with open(file_name, 'rb') as elf_file_fp:
+ elf_buf = elf_file_fp.read()
+ return generate_sha256_hash_hex(elf_buf)
+
+
+class ElfInfo:
+ """ elf info message """
+
+ def __init__(self):
+ self.elf32_phdr_size = 32
+ self.elf64_phdr_size = 56
+ self.elf_ident_size = 16
+ self.elf64_hdr_size = 64
+ self.elf32_hdr_size = 52
+ self.elfinfo_class_32 = 1
+ self.elfinfo_class_64 = 2
+ self.load_type = 0x1
+ self.write_flag = 0x2
+ self.exec_flag = 0x1
+
+
+def get_code_segment_from_elf(elf_file_name, out_hash_file_name, sign_data):
+ """ verify ELF header information """
+ hash_value_summary = ""
+ elf_info = ElfInfo()
+
+ with open(elf_file_name, 'rb') as elf_fp:
+ elf_ident_buf = elf_fp.read(elf_info.elf_ident_size)
+ elf_ident = ElfIdent(elf_ident_buf)
+ elf_fp.seek(0)
+ if elf_ident.ei_class == elf_info.elfinfo_class_64:
+ elf_hd_buf = elf_fp.read(elf_info.elf64_hdr_size)
+ elf_header = Elf64Ehdr(elf_hd_buf)
+ elif elf_ident.ei_class == elf_info.elfinfo_class_32:
+ elf_hd_buf = elf_fp.read(elf_info.elf32_hdr_size)
+ elf_header = Elf32Ehdr(elf_hd_buf)
+ else:
+ logging.error("No Support ELFINFO_CLASS")
+
+ if elf_header_verify_check(elf_header) is False:
+ logging.error("ELF file failed verification: %s", elf_file_name)
+
+ for i_phd in range(0, elf_header.e_phnum):
+ if elf_ident.ei_class == elf_info.elfinfo_class_64:
+ elf_phd_header = Elf64Phdr(elf_fp.read(elf_info.elf64_phdr_size))
+ elif elf_ident.ei_class == elf_info.elfinfo_class_32:
+ elf_phd_header = Elf32Phdr(elf_fp.read(elf_info.elf32_phdr_size))
+ else:
+ logging.error("No Support ELFINFO_CLASS")
+
+ if (elf_phd_header.p_type != elf_info.load_type) or \
+ (elf_phd_header.p_flags & elf_info.exec_flag != elf_info.exec_flag) or \
+ (elf_phd_header.p_flags & elf_info.write_flag == elf_info.write_flag):
+ continue
+
+ # get segment buf form elf file
+ elf_fp.seek(elf_phd_header.p_offset)
+ elf_segment_buf = elf_fp.read(elf_phd_header.p_memsz)
+
+ # buf 4k alignment
+ if len(elf_segment_buf) % 4096 != 0:
+ alignment_len = (len(elf_segment_buf) // 4096 + 1) * 4096
+ elf_segment_buf = elf_segment_buf.ljust(alignment_len, b'\0')
+ # get hash from segment buf
+ hash_value_summary = hash_value_summary + generate_sha256_hash_hex(elf_segment_buf)
+
+ # move the read pointer of the file to the original position.
+ if elf_ident.ei_class == elf_info.elfinfo_class_64:
+ elf_fp.seek((i_phd + 1) * elf_info.elf64_phdr_size + elf_info.elf64_hdr_size)
+ elif elf_ident.ei_class == elf_info.elfinfo_class_32:
+ elf_fp.seek((i_phd + 1) * elf_info.elf32_phdr_size + elf_info.elf32_hdr_size)
+
+ elf_fp.seek(0)
+ with os.fdopen(os.open('hash_{}.txt'.format(out_hash_file_name), os.O_RDWR | os.O_CREAT, 0o755), \
+ "w+", 0o755) as file_ob:
+ file_ob.write("mem_hash : {}\n".format(generate_sha256_hash_hex(bytes.fromhex(hash_value_summary))))
+ file_ob.write("img_hash : {}".format(generate_sha256_hash_hex(sign_data)))
+
+
+def main():
+ """ main function """
+ get_code_segment_from_elf(sys.argv[1], "test", sys.argv[3])
+
+
+if __name__ == '__main__':
+ main()
diff --git a/build/signtools/manifest.py b/build/signtools/manifest.py
index 6468190..bd6bf90 100755
--- a/build/signtools/manifest.py
+++ b/build/signtools/manifest.py
@@ -1,8 +1,8 @@
#!/usr/bin/env python
-# coding:utf-8
+# coding=utf-8
#----------------------------------------------------------------------------
# Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
-# iTrustee licensed under the Mulan PSL v2.
+# Licensed under the Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan
# PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
@@ -11,33 +11,42 @@
# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
+# Description: tools for generating a trusted application load image
#----------------------------------------------------------------------------
import string
import struct
import uuid
import os
+import re
+import stat
+import logging
-PRODUCT_TA_IMAGE = 1
-PRODUCT_DYN_LIB = 2
-PRODUCT_SERVICE_IMAGE = 3
+
+PRODUCT_TA_IMAGE = 1
+PRODUCT_DYN_LIB = 2
+PRODUCT_SERVICE_IMAGE = 3
+PRODUCT_CLIENT_IMAGE = 4
+PRODUCT_DRIVER_IMAGE = 5
class PackUuid:
# Structure object to align and package the TEE_UUID
data = struct.Struct('IHH8b')
- def __init__(self, data):
- unpacked_data = (PackUuid.data).unpack(str.encode(data))
- self.unpacked_data = unpacked_data
- self.time_low = unpacked_data[0]
- self.time_mid = unpacked_data[1]
+ def __init__(self, data, big_endian=False):
+ unpacked_data = (PackUuid.data).unpack(str.encode(data))
+ self.unpacked_data = unpacked_data
+ self.time_low = unpacked_data[0]
+ self.time_mid = unpacked_data[1]
self.time_hi_version = unpacked_data[2]
- self.clock_seq_node = unpacked_data[3]
+ self.clock_seq_node = unpacked_data[3]
+ if big_endian:
+ PackUuid.data = struct.Struct('>IHH8b')
def print_values(self):
- print("ATTRIBUTE / VALUE")
+ logging.critical("ATTRIBUTE / VALUE")
for attr, value in self.__dict__.items():
- print(attr, value)
+ logging.critical(attr, value)
def get_pack_data(self):
values = [self.time_low,
@@ -57,20 +66,22 @@ class Manifest:
# Structure object to align and package the Manifest
data = struct.Struct('I' * 6)
- def __init__(self, data):
- unpacked_data = (Manifest.data).unpack(str.encode(data))
- self.unpacked_data = unpacked_data
+ def __init__(self, data, big_endian=False):
+ unpacked_data = (Manifest.data).unpack(str.encode(data))
+ self.unpacked_data = unpacked_data
self.single_instance = unpacked_data[0]
- self.multi_session = unpacked_data[1]
- self.multi_command = unpacked_data[2]
- self.heap_size = unpacked_data[3]
- self.stack_size = unpacked_data[4]
+ self.multi_session = unpacked_data[1]
+ self.multi_command = unpacked_data[2]
+ self.heap_size = unpacked_data[3]
+ self.stack_size = unpacked_data[4]
self.instancekeepalive = unpacked_data[5]
+ if big_endian:
+ Manifest.data = struct.Struct('>' + 'I' * 6)
def print_values(self):
- print("ATTRIBUTE / VALUE")
+ logging.critical("ATTRIBUTE / VALUE")
for attr, value in self.__dict__.items():
- print(attr, value)
+ logging.critical(attr, value)
def get_pack_data(self):
values = [self.single_instance,
@@ -88,20 +99,20 @@ class Manifest:
# verify property name in manifest file
#----------------------------------------------------------------------------
def verify_property_name(str_line):
- print('verify property name')
+ logging.critical("verify property name")
alphas = string.ascii_letters + string.digits
cont = "".join([alphas, '-', '_', '.'])
if len(str_line) > 1:
if str_line[0] not in alphas:
- print('invalid first letter in property name')
+ logging.error("invalid first letter in property name")
return False
else:
for otherchar in str_line[1:]:
if otherchar not in cont:
- print('invalid char in property name')
+ logging.error("invalid char in property name")
return False
else:
- print('invalid property name')
+ logging.error("invalid property name")
return False
return True
@@ -111,11 +122,11 @@ def verify_property_name(str_line):
# verify property value in manifest file
#----------------------------------------------------------------------------
def verify_property_value(str_line):
- print('verify property value')
+ logging.critical("verify property value")
filt_letter = chr(0) + chr(10) + chr(13)
for thechar in str_line:
if thechar in filt_letter:
- print('invalid letter in prop value')
+ logging.error("invalid letter in prop value")
return False
return True
@@ -124,12 +135,11 @@ def verify_property_value(str_line):
# remove tabs and space in property value
#----------------------------------------------------------------------------
def trailing_space_tabs(str_line):
- print('trailing space tabs in value head and trail')
+ logging.critical("trailing space tabs in value head and trail")
space_tabs = chr(9) + chr(32) + chr(160)
space_tabs_newlines = space_tabs + chr(10) + chr(13)
- print('tab: {}'.format(space_tabs))
- print('str in: {}'.format(str_line))
+ logging.critical("str in: %s", str_line)
index = 0
for thechar in str_line:
if thechar in space_tabs:
@@ -148,8 +158,8 @@ def trailing_space_tabs(str_line):
else:
break
- str_ret = headvalue[0:strlen+1] + chr(10)
- print('str ret: {}'.format(str_ret))
+ str_ret = headvalue[0:strlen + 1] + chr(10)
+ logging.critical("str ret: %s", str_ret)
return str_ret
@@ -157,14 +167,14 @@ def trailing_space_tabs(str_line):
#----------------------------------------------------------------------------
# verify manifest file, parse manifest file, generate a new manfiest file
#----------------------------------------------------------------------------
-def parser_manifest(manifest, manifest_data_path, mani_ext):
- print('verify manifest')
+def parser_manifest(manifest, manifest_data_path, mani_ext, big_endian=False):
+ logging.critical("verify manifest")
target_type = PRODUCT_TA_IMAGE
- uuid_val = PackUuid('\0' * 16)
+ uuid_val = PackUuid('\0' * 16, big_endian)
#manifest default
- manifest_val = Manifest('\0'*24)
+ manifest_val = Manifest('\0' * 24, big_endian)
manifest_val.single_instance = 1
manifest_val.multi_session = 0
@@ -174,40 +184,46 @@ def parser_manifest(manifest, manifest_data_path, mani_ext):
manifest_val.stack_size = 2048
service_name = 'external_service'
+ dyn_conf_target_type = 0
- with open(manifest, 'r') as mani_fp, open(mani_ext, 'wb') as mani_ext_fp:
+ with open(manifest, 'r') as mani_fp:
+ fd_ext = os.open(mani_ext, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ mani_ext_fp = os.fdopen(fd_ext, "wb")
for each_line in mani_fp:
- print(each_line)
- if each_line.startswith("#") or not len(each_line.strip()):
+ logging.critical(each_line)
+ if each_line.startswith("#") or not each_line.strip():
continue
index = each_line.find(':', 1, len(each_line))
prop_name = each_line[0:index]
- prop_name_t = each_line[0:index+1]
- prop_value_t = each_line[index+1:]
- print('name is: {}; value is: {}'.format(prop_name, prop_value_t))
+ prop_name_t = each_line[0:index + 1]
+ prop_value_t = each_line[index + 1:]
+ logging.critical("name is: %s; value is: %s", prop_name, prop_value_t)
prop_value = trailing_space_tabs(prop_value_t)
prop_len = len(prop_value)
- prop_value_v = prop_value[0:prop_len-1]
- print('prop value_v: {}'.format(prop_value_v))
+ prop_value_v = prop_value[0:prop_len - 1]
+ logging.critical("prop value_v: %s", prop_value_v)
if verify_property_name(prop_name) is False:
- print('manifest format invalid, please check it')
- return (False, 0)
+ logging.error("manifest format invalid, please check it")
+ mani_ext_fp.close()
+ return (False, 0, 0)
if verify_property_value(prop_value_v) is False:
- print('manifest format invalid, please check it')
- return (False, 0)
+ logging.error("manifest format invalid, please check it")
+ mani_ext_fp.close()
+ return (False, 0, 0)
# name:value to lowcase, and parse manifest
prop_name_low = prop_name.lower()
- print("name lower: {}".format(prop_name_low))
+ logging.critical("name lower: %s", prop_name_low)
if 'gpd.ta.appid' == prop_name_low:
- print("compare name is srv id")
+ logging.critical("compare name is srv id")
uuid_val = uuid.UUID(prop_value_v)
- print('uuid str {}'.format(uuid_val))
- print('val fields {}'.format(uuid_val.fields))
+ logging.critical("uuid str %s", uuid_val)
+ logging.critical("val fields %s", uuid_val.fields)
elif 'gpd.ta.singleinstance' == prop_name_low:
prop_value_low = prop_value_v.lower()
@@ -216,7 +232,7 @@ def parser_manifest(manifest, manifest_data_path, mani_ext):
elif 'false' == prop_value_low:
manifest_val.single_instance = 0
else:
- print('single_instance value error!')
+ logging.error("single_instance value error!")
elif 'gpd.ta.multisession' == prop_name_low:
prop_value_low = prop_value_v.lower()
@@ -225,7 +241,7 @@ def parser_manifest(manifest, manifest_data_path, mani_ext):
elif 'false' == prop_value_low:
manifest_val.multi_session = 0
else:
- print('multi_session value error!')
+ logging.error("multi_session value error!")
elif 'gpd.ta.multicommand' == prop_name_low:
prop_value_low = prop_value_v.lower()
@@ -234,7 +250,7 @@ def parser_manifest(manifest, manifest_data_path, mani_ext):
elif 'false' == prop_value_low:
manifest_val.multi_command = 0
else:
- print('multi_command value error!')
+ logging.error("multi_command value error!")
elif 'gpd.ta.instancekeepalive' == prop_name_low:
prop_value_low = prop_value_v.lower()
@@ -243,77 +259,152 @@ def parser_manifest(manifest, manifest_data_path, mani_ext):
elif 'false' == prop_value_low:
manifest_val.instancekeepalive = 0
else:
- print('instancekeepalive value error!')
+ logging.error("instancekeepalive value error!")
elif 'gpd.ta.datasize' == prop_name_low:
manifest_val.heap_size = int(prop_value_v)
- print('b')
+ logging.critical('b')
elif 'gpd.ta.stacksize' == prop_name_low:
manifest_val.stack_size = int(prop_value_v)
- print('b')
+ logging.critical('b')
elif 'gpd.ta.service_name' == prop_name_low:
service_name = prop_value_v
- print('b')
+ logging.critical('b')
+
+ elif 'gpd.ta.dynconf' == prop_name_low:
+ mani_ext_fp.close()
+ logging.error("gpd.ta.dynConf is reserved, cannot set")
+ return (False, 0, 0)
else:
- print('b')
+ logging.critical('b')
#write have not paresed manifest into sample.manifest file
mani_ext_fp.write(str.encode(prop_name_t))
mani_ext_fp.write(str.encode(prop_value))
- if 'gpd.ta.is_tee_service' == prop_name_low:
- prop_value_low = prop_value_v.lower()
- if 'true' == prop_value_low:
- target_type = PRODUCT_SERVICE_IMAGE
- elif 'gpd.ta.is_lib' == prop_name_low:
+ if 'gpd.ta.is_lib' == prop_name_low:
prop_value_low = prop_value_v.lower()
if 'true' == prop_value_low:
target_type = PRODUCT_DYN_LIB
-
+ elif 'gpd.ta.target_type' == prop_name_low:
+ dyn_conf_target_type = int(prop_value_v)
+ if dyn_conf_target_type > 0xFFFF or \
+ dyn_conf_target_type < 0:
+ mani_ext_fp.close()
+ logging.error("gpd.ta.target_type must \
+ in range [0, 0xFFFF]")
+ return (False, 0, 0)
+
+ mani_ext_fp.close()
#write the whole parsed manifest into sample.manifest file
service_name_len = len(service_name)
- print('service name: {}'.format(service_name))
- print('service name len: {}'.format(service_name_len))
- if service_name_len > 64:
- print("service name len exceed MAX value 27")
- raise RuntimeError
+ logging.critical("service name: %s", service_name)
+ logging.critical("service name len: %s", service_name_len)
+
+ max_service_len = 64
+
+ # dyn_conf_target_type is 1 means that is drv
+ if dyn_conf_target_type == 1:
+ max_service_len = 32
+ target_type = PRODUCT_DRIVER_IMAGE
+ if not re.match(r"^[A-Za-z0-9_]*$", service_name):
+ logging.error("drv's name only can use [A-Z] [a-z] [0-9] and '_'")
+ return (False, 0, 0)
+
+ if dyn_conf_target_type == 3:
+ max_service_len = 32
+ target_type = PRODUCT_SERVICE_IMAGE
+ if not re.match(r"^[A-Za-z0-9_]*$", service_name):
+ logging.error("drv's name only can use \
+ [A-Z] [a-z] [0-9] and '_'")
+ return (False, 0, 0)
+ if dyn_conf_target_type == 4:
+ max_service_len = 32
+ target_type = PRODUCT_CLIENT_IMAGE
+ if not re.match(r"^[A-Za-z0-9_]*$", service_name):
+ logging.error("drv's name only can use \
+ [A-Z] [a-z] [0-9] and '_'")
+ return (False, 0, 0)
+
+ if service_name_len > max_service_len:
+ logging.error("service name len cannot larger than %s", str(max_service_len))
+ return (False, 0, 0)
# get manifest string file len
manifest_str_size = os.path.getsize(mani_ext)
- print('manifest str size {}'.format(manifest_str_size))
-
+ logging.critical('manifest str size %s', manifest_str_size)
# 2> manifest + service_name
- print("bytes len {}".format(len(uuid_val.bytes_le)))
- print("bytes len {}".format(len(manifest_val.get_pack_data())))
- print("bytes len {}".format(len(service_name)))
+ if big_endian:
+ logging.critical("bytes len %s", len(uuid_val.bytes))
+ else:
+ logging.critical("bytes len %s", len(uuid_val.bytes_le))
+ logging.critical("bytes len %s", len(manifest_val.get_pack_data()))
+ logging.critical("bytes len %s", len(service_name))
# 3> unparsed manifest, string manifest
with open(mani_ext, 'rb') as string_mani_fp:
- print("read manifest string size {}".format(manifest_str_size))
+ logging.critical("read manifest string size %s", manifest_str_size)
manifest_string_buf = string_mani_fp.read(manifest_str_size)
- print("manifest strint: {}".format(manifest_string_buf))
+ logging.critical("manifest strint: %s", manifest_string_buf)
#---- write manifest parse context to manifest file
- with open(manifest_data_path, 'wb') as out_manifest_fp:
+ fd_out = os.open(manifest_data_path, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ out_manifest_fp = os.fdopen(fd_out, "wb")
+ if big_endian:
+ out_manifest_fp.write(uuid_val.bytes)
+ else:
out_manifest_fp.write(uuid_val.bytes_le)
- out_manifest_fp.write(str.encode(service_name))
- out_manifest_fp.write(manifest_val.get_pack_data())
+ out_manifest_fp.write(str.encode(service_name))
+ out_manifest_fp.write(manifest_val.get_pack_data())
+ out_manifest_fp.close()
+ uuid_str = str(uuid_val)
product_name = str(uuid_val)
if target_type == PRODUCT_TA_IMAGE:
- print("product type is ta image")
- product_name = "".join([product_name, ".sec"])
+ logging.critical("product type is ta image")
+ product_name = "".join([uuid_str, ".sec"])
+ elif target_type == PRODUCT_DRIVER_IMAGE:
+ logging.critical("product type is driver")
+ product_name = "".join([service_name, ".sec"])
elif target_type == PRODUCT_SERVICE_IMAGE:
- print("product type is service")
- product_name = "".join([product_name, service_name, "_svr.sec"])
+ logging.critical("product type is service")
+ product_name = "".join([service_name, ".sec"])
+ elif target_type == PRODUCT_CLIENT_IMAGE:
+ logging.critical("product type is client")
+ product_name = "".join([service_name, ".so.sec"])
elif target_type == PRODUCT_DYN_LIB:
- print("product type is dyn lib")
- product_name = "".join([product_name, service_name, ".so.sec"])
+ logging.critical("product type is dyn lib")
+ product_name = "".join([uuid_str, service_name, ".so.sec"])
else:
- print("invalid product type!")
- raise RuntimeError
+ logging.error("invalid product type!")
+ return (False, 0, 0)
+
+ return (True, product_name, uuid_str)
+
+
+class ManifestInfo:
+ ''' get manifest info '''
+ def __init__(self, ret, product_name, uuid_str, manifest_txt_exist):
+ self.ret = ret
+ self.product_name = product_name
+ self.uuid_str = uuid_str
+ self.manifest_txt_exist = manifest_txt_exist
+
+
+def process_manifest_file(xml_config_path, manifest_path, \
+ manifest_data_path, mani_ext, big_endian=False):
- return (True, product_name)
+ manifest_txt_exist = True
+ if not os.path.exists(manifest_path):
+ logging.critical("xml trans manifest cfg")
+ manifest_txt_exist = False
+ from xml_trans_manifest import trans_xml_to_manifest
+ trans_xml_to_manifest(xml_config_path, manifest_path)
+ ret, product_name, uuid_str = parser_manifest(manifest_path, \
+ manifest_data_path, mani_ext, big_endian)
+ manifest_info = ManifestInfo(ret, product_name, uuid_str, manifest_txt_exist)
+ return manifest_info
diff --git a/build/signtools/manifest_tag_parse_dict.csv b/build/signtools/manifest_tag_parse_dict.csv
new file mode 100644
index 0000000..e56a82d
--- /dev/null
+++ b/build/signtools/manifest_tag_parse_dict.csv
@@ -0,0 +1,24 @@
+ConfigInfo/,0,TYPE_CLASS,
+ConfigInfo/TA_Basic_Info/,1,TYPE_CLASS,
+ConfigInfo/TA_Basic_Info/service_name,2,TYPE_CHAR,gpd.ta.service_name
+ConfigInfo/TA_Basic_Info/uuid,4,TYPE_CHAR,gpd.ta.appID
+ConfigInfo/TA_Manifest_Info/,6,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/instance_keep_alive,7,TYPE_CHAR,gpd.ta.instanceKeepAlive
+ConfigInfo/TA_Manifest_Info/stack_size,9,TYPE_CHAR,gpd.ta.stackSize
+ConfigInfo/TA_Manifest_Info/heap_size,11,TYPE_CHAR,gpd.ta.dataSize
+ConfigInfo/TA_Manifest_Info/target_type,13,TYPE_CHAR,gpd.ta.target_type
+ConfigInfo/TA_Manifest_Info/multi_command,15,TYPE_CHAR,gpd.ta.multicommand
+ConfigInfo/TA_Manifest_Info/multi_session,17,TYPE_CHAR,gpd.ta.multiSession
+ConfigInfo/TA_Manifest_Info/single_instance,19,TYPE_CHAR,gpd.ta.singleInstance
+ConfigInfo/TA_Manifest_Info/sdk_version,21,TYPE_CHAR,gpd.sdk.version
+ConfigInfo/TA_Manifest_Info/is_tee_service,23,TYPE_CHAR,gpd.ta.is_tee_service
+ConfigInfo/TA_Manifest_Info/is_lib,25,TYPE_CHAR,gpd.ta.is_lib
+ConfigInfo/TA_Manifest_Info/objectEnumEnable,27,TYPE_CHAR,gpd.ta.objectEnumEnable
+ConfigInfo/TA_Manifest_Info/distribution,29,TYPE_CHAR,gpd.ta.distribution
+ConfigInfo/TA_Manifest_Info/target_version,31,TYPE_CHAR,gpd.elf.target_version
+ConfigInfo/TA_Manifest_Info/mem_page_align,33,TYPE_CHAR,gpd.ta.mem_page_align
+ConfigInfo/TA_Manifest_Info/hardWareType,35,TYPE_CHAR,gpd.ta.hardWareType
+ConfigInfo/TA_Manifest_Info/is_need_release_ta_res,37,TYPE_CHAR,gpd.srv.is_need_release_ta_res
+ConfigInfo/TA_Manifest_Info/srv_crash_callback,39,TYPE_CHAR,gpd.srv.crash_callback
+ConfigInfo/TA_Manifest_Info/srv_is_need_create_msg,41,TYPE_CHAR,gpd.srv.is_need_create_msg
+ConfigInfo/TA_Manifest_Info/srv_is_need_release_msg,43,TYPE_CHAR,gpd.srv.is_need_release_msg
diff --git a/build/signtools/rsa_public_key_cloud.pem b/build/signtools/rsa_public_key_cloud.pem
new file mode 100644
index 0000000..a321f63
--- /dev/null
+++ b/build/signtools/rsa_public_key_cloud.pem
@@ -0,0 +1,11 @@
+-----BEGIN PUBLIC KEY-----
+MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAzAPwbnbgBg7JgXERA9Bx
+p7GLI1S3e1zL83RMd2+GXb6kO4yMKUL3NUCE2HhA2BtQYmLyGovx59UUcKnU58is
+Xux++kH+A2shmOPjYvEFuX0Kt8tc19b8M9b/iHsY8ZmKykqia2a5U+IrECRFJo5p
+DWUnl7jrHVtq78BSR1c7iXG1frrEC0AYCuqKJo/fxfmOKL0Y9mENCB3nAwjn9unD
+BsO/OhkqvvB3nkeuMfNKPh4wCqtQPve13eTojbuxjX/3ePijplTI5X2Gr+n6Ximn
+fYRlytQmMgMl/db0ARSKNApq9bmwzVNrnGWWZWJksdRvf6iL7t17Gs4L9AApOuC9
+WkzxPvwp5ZUqjsGd4oJGWeC6ZE6BTw2vxE+xMFI9uAKHxq9pBKkcGMa0g4fANNNV
++W+8JZGanxEXKB3y/M7BCyQAPCWOHC/RNjmRA1gczLYCPzC4pWu935UZdF1RR6zY
+CD3t+FoOGGET/g4CwWgyhb5qkp65Hs6ayYt/DUAqo+yBAgMBAAE=
+-----END PUBLIC KEY-----
diff --git a/build/signtools/signtool_v3.py b/build/signtools/signtool_v3.py
index 39a719d..b588707 100755
--- a/build/signtools/signtool_v3.py
+++ b/build/signtools/signtool_v3.py
@@ -1,8 +1,8 @@
#!/usr/bin/env python
-# coding:utf-8
+# coding=utf-8
#----------------------------------------------------------------------------
# Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
-# iTrustee licensed under the Mulan PSL v2.
+# Licensed under the Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan
# PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
@@ -11,31 +11,32 @@
# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
+# Description: tools for generating a trusted application load image
#----------------------------------------------------------------------------
import struct
import os
import stat
-import hashlib
import binascii
-import subprocess
import shutil
-import getpass
import argparse
+import configparser
+import re
+import logging
-try:
- from configparser import SafeConfigParser
-except ImportError:
- from ConfigParser import SafeConfigParser
-from manifest import parser_manifest
+from manifest import process_manifest_file
from generate_signature import gen_ta_signature
+from Crypto.Hash import SHA256
+from Crypto.Cipher import PKCS1_OAEP
+from Crypto.PublicKey import RSA
+from Crypto.Cipher import AES
+from Crypto.Random import get_random_bytes
-# fixed value, {1, 2} version are abandoned.
-VERSION = 3
-TA_VERSION = 3
-MAX_EXT_PROP_LEN = 152
+TYPE_PUBKEY = 0
+TYPE_CERT = 1
+TYPE_CERT_CHAIN = 2
MAGIC1 = 0xA5A55A5A
MAGIC2 = 0x55AA
@@ -63,6 +64,21 @@ ELF_INFO_VERSION_INDEX = 6
ELF_INFO_VERSION_CURRENT = 1
ELF_BLOCK_ALIGN = 0x1000
+SEC_HEADER_BYTES = 16
+SING_BIG_ENDIAN = False
+
+
+def whitelist_check(intput_str):
+ if not re.match(r"^[A-Za-z0-9\/\-_.]+$", intput_str):
+ return 1
+ return 0
+
+
+def integer_check(intput_str):
+ if not str(intput_str).isdigit():
+ return 1
+ return 0
+
#----------------------------------------------------------------------------
# Verify ELF header contents from an input ELF file
@@ -70,7 +86,7 @@ ELF_BLOCK_ALIGN = 0x1000
def verify_elf_header(elf_path):
elf_type = 0
with open(elf_path, 'rb') as elf:
- elf_data = struct.unpack('B'*16, elf.read(16))
+ elf_data = struct.unpack('B' * 16, elf.read(16))
elf_type = elf_data[4]
if ((elf_data[ELF_INFO_MAGIC0_INDEX] != ELF_INFO_MAGIC0) or \
(elf_data[ELF_INFO_MAGIC1_INDEX] != ELF_INFO_MAGIC1) or \
@@ -78,7 +94,7 @@ def verify_elf_header(elf_path):
(elf_data[ELF_INFO_MAGIC3_INDEX] != ELF_INFO_MAGIC3) or \
(elf_data[ELF_INFO_VERSION_INDEX] != \
ELF_INFO_VERSION_CURRENT)):
- print("invalid elf header info")
+ logging.error("invalid elf header info")
raise RuntimeError
if ((elf_type == 1 and elf_data[ELF_INFO_CLASS_INDEX] != \
@@ -86,229 +102,410 @@ def verify_elf_header(elf_path):
(elf_type == 2 and elf_data[ELF_INFO_CLASS_INDEX] != \
ELF_INFO_CLASS_64) or \
(elf_type != 1 and elf_type != 2)):
- print("invliad elf format")
+ logging.error("invliad elf format")
raise RuntimeError
return
-class Configuration:
- release_type = 0
- otrp_flag = 0
- sign_type = 0
+class AllCfg:
+ release_type = "1"
+ otrp_flag = "0"
+ sign_type = "0"
public_key = ""
- pub_key_len = 0
+ pub_key_len = ""
+ re_sign_flag = "0"
server_ip = ""
config_path = ""
sign_key = ""
- sign_key_len = 2048
- hash_type = 0
- padding_type = 0
+ sign_key_type = "0"
+ sign_alg = "RSA"
+ ta_cert_chain = ""
+ ta_version = 3
+
- def __init__(self, file_name):
- parser = SafeConfigParser()
+class PublicCfg:
+ def __init__(self, file_name, all_cfg):
+ cfg_section = "signSecPublicCfg"
+ parser = configparser.ConfigParser()
parser.read(file_name)
- self.release_type = parser.get("config", "releaseType")
- self.otrp_flag = parser.get("config", "otrpFlag")
- self.sign_type = parser.get("config", "signType")
- self.public_key = parser.get("config", "encryptKey")
- self.pub_key_len = parser.get("config", "encryptKeyLen")
- self.server_ip = parser.get("config", "serverIp")
- self.config_path = parser.get("config", "configPath")
- self.sign_key = parser.get("config", "signKey")
- self.sign_key_len = parser.get("config", "signKeyLen")
- self.hash_type = parser.get("config", "hashType")
- self.padding_type = parser.get("config", "paddingType")
-
-
-def gen_header(content_len, key_version):
- return struct.pack('IHHII', MAGIC1, MAGIC2, VERSION, content_len, \
- key_version)
-
-
-def gen_aes_key_info(cfg, iv_file_path, key_file_path, out_file_path):
- rand_iv_cmd = "openssl rand -out {} 16".format(iv_file_path)
- rand_key_cmd = "openssl rand -out {} 32".format(key_file_path)
- try:
- subprocess.check_output(rand_iv_cmd.split(), shell=False)
- subprocess.check_output(rand_key_cmd.split(), shell=False)
- except Exception:
- print("rand operation failed")
- raise RuntimeError
- os.chmod(iv_file_path, stat.S_IWUSR | stat.S_IRUSR)
- os.chmod(key_file_path, stat.S_IWUSR | stat.S_IRUSR)
+ if parser.has_option(cfg_section, "secReleaseType"):
+ all_cfg.release_type = parser.get(cfg_section, "secReleaseType")
+ if parser.has_option(cfg_section, "secOtrpFlag"):
+ all_cfg.otrp_flag = parser.get(cfg_section, "secOtrpFlag")
+
+ all_cfg.sign_type = parser.get(cfg_section, "secSignType")
+ if parser.has_option(cfg_section, "secSignServerIp"):
+ all_cfg.server_ip = parser.get(cfg_section, "secSignServerIp")
+
+ all_cfg.config_path = parser.get(cfg_section, "configPath")
+ all_cfg.sign_key = parser.get(cfg_section, "secSignKey")
+ if parser.has_option(cfg_section, "secTaVersion"):
+ all_cfg.ta_version = int(parser.get(cfg_section, "secTaVersion"))
+ else:
+ all_cfg.ta_version = 3
+ if parser.has_option(cfg_section, "secSignKeyType"):
+ all_cfg.sign_key_type = parser.get(cfg_section, "secSignKeyType")
+ if parser.has_option(cfg_section, "secTaCertChain"):
+ all_cfg.ta_cert_chain = parser.get(cfg_section, "secTaCertChain")
+
+
+class PrivateCfg:
+ def __init__(self, file_name, all_cfg):
+ cfg_section = 'signSecPrivateCfg'
+ parser = configparser.ConfigParser()
+ parser.read(file_name)
+ if parser.has_option(cfg_section, "secEncryptKey"):
+ all_cfg.public_key = parser.get(cfg_section, "secEncryptKey")
+
+ if parser.has_option(cfg_section, "secEncryptKeyLen"):
+ all_cfg.pub_key_len = parser.get(cfg_section, "secEncryptKeyLen")
+
+ if parser.has_option(cfg_section, "secReSignFlag"):
+ all_cfg.re_sign_flag = parser.get(cfg_section, "secReSignFlag")
+
+ all_cfg.hash_type = parser.get(cfg_section, "secHashType")
+ all_cfg.sign_key_len = parser.get(cfg_section, "secSignKeyLen")
+ all_cfg.padding_type = parser.get(cfg_section, "secPaddingType")
+
+ if parser.has_option(cfg_section, "secSignAlg"):
+ all_cfg.sign_alg = parser.get(cfg_section, "secSignAlg")
+
+
+def check_cfg(cfg):
+ ret = 0
+ if cfg.release_type != "":
+ if integer_check(cfg.release_type):
+ logging.error("secReleaseType is invalid.")
+ ret = 1
+ if cfg.otrp_flag != "":
+ if integer_check(cfg.otrp_flag):
+ logging.error("secOtrpFlag is invalid.")
+ ret = 1
+ if cfg.sign_type != "":
+ if integer_check(cfg.sign_type):
+ logging.error("secSignType is invalid.")
+ ret = 1
+ if cfg.server_ip != "":
+ if whitelist_check(cfg.server_ip):
+ logging.error("secSignServerIp is invalid.")
+ ret = 1
+ if cfg.config_path != "":
+ if whitelist_check(cfg.config_path):
+ logging.error("configPath is invalid.")
+ ret = 1
+ if cfg.sign_key != "":
+ if whitelist_check(cfg.sign_key):
+ logging.error("secSignKey is invalid.")
+ ret = 1
+ if cfg.public_key != "":
+ if whitelist_check(cfg.public_key):
+ logging.error("secEncryptKey is invalid.")
+ ret = 1
+ if cfg.pub_key_len != "":
+ if integer_check(cfg.pub_key_len):
+ logging.error("secEncryptKeyLen is invalid.")
+ ret = 1
+ if cfg.re_sign_flag != "":
+ if integer_check(cfg.re_sign_flag):
+ logging.error("secReSignFlag is invalid.")
+ ret = 1
+ if cfg.hash_type != "":
+ if integer_check(cfg.hash_type):
+ logging.error("secHashType is invalid.")
+ ret = 1
+ if cfg.sign_key_len != "":
+ if integer_check(cfg.sign_key_len):
+ logging.error("secSignKeyLen is invalid.")
+ ret = 1
+ if cfg.padding_type != "":
+ if integer_check(cfg.padding_type):
+ logging.error("secPaddingType is invalid.")
+ ret = 1
+ if cfg.sign_alg != "":
+ if whitelist_check(cfg.sign_alg):
+ logging.error("secSignAlg is invalid.")
+ ret = 1
+ return ret
+
+
+def gen_header(content_len, key_version, cfg):
+ ''' gen header by endian '''
+ if SING_BIG_ENDIAN:
+ head_tag = '>IHHII'
+ else:
+ head_tag = 'IHHII'
+ return struct.pack(head_tag, MAGIC1, MAGIC2, cfg.ta_version, content_len, key_version)
+
+
+def get_sign_alg(cfg):
sign_alg = 0
sign_alg = sign_alg | (int(cfg.release_type) << 28)
sign_alg = sign_alg | (int(cfg.padding_type) << 27)
sign_alg = sign_alg | (int(cfg.hash_type) << 26)
- if cfg.sign_key_len == "2048":
- sign_alg = sign_alg | 0x00002048
- elif cfg.sign_key_len == "4096":
- sign_alg = sign_alg | 0x00004096
+ if cfg.sign_alg == "RSA":
+ sign_alg = sign_alg | (2 << 20)
+ elif cfg.sign_alg == "ECDSA":
+ sign_alg = sign_alg | (1 << 20)
+ if cfg.sign_type == '4' or cfg.sign_type == '5' or cfg.sign_type == '6' :
+ sign_alg = sign_alg | 0x0000C000
+ else:
+ if cfg.sign_key_len == "2048":
+ sign_alg = sign_alg | 0x00002048
+ elif cfg.sign_key_len == "4096":
+ sign_alg = sign_alg | 0x00004096
+ elif cfg.sign_key_len == "256":
+ sign_alg = sign_alg | 0x00000256
+ return sign_alg
+
+
+def gen_aes_key_info(cfg):
+ iv_data = get_random_bytes(16)
+ key_data = get_random_bytes(32)
+ if SING_BIG_ENDIAN:
+ aes_tag = '>3I'
+ else:
+ aes_tag = '<3I'
+ sign_alg = get_sign_alg(cfg)
+ key_info = struct.pack(aes_tag, 32, 16, sign_alg)
+ key_info += key_data
+ key_info += iv_data
+ return key_data, iv_data, key_info
+
+
+def gen_sign_alg_info(cfg, out_file_path):
+ sign_alg = get_sign_alg(cfg)
+ logging.critical("sign_alg value is 0x%x", sign_alg)
+ if SING_BIG_ENDIAN:
+ info_tag = '>I'
+ else:
+ info_tag = 'I'
+ fd_out = os.open(out_file_path, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ out_file = os.fdopen(fd_out, "wb")
+ out_file.write(struct.pack(info_tag, 0))
+ out_file.write(struct.pack(info_tag, 0))
+ out_file.write(struct.pack(info_tag, sign_alg))
+ out_file.close()
- print("sign_alg value is 0x%x" % sign_alg)
- with open(out_file_path, 'wb') as out_file:
- out_file.write(struct.pack('I', 32))
- out_file.write(struct.pack('I', 16))
- out_file.write(struct.pack('I', sign_alg))
+ return
- with open(key_file_path, 'rb') as key_file:
- out_file.write(key_file.read(32))
- with open(iv_file_path, 'rb') as iv_file:
- out_file.write(iv_file.read(16))
+def encrypt_aes_key(pubkey_path, in_data, out_path):
+ with open(pubkey_path, 'rb') as pubkey_file_fd:
+ pubkey_file = pubkey_file_fd.read(os.path.getsize(pubkey_path))
+ pubkey = RSA.importKey(pubkey_file)
+ cipher = PKCS1_OAEP.new(pubkey)
+ ciphertext = cipher.encrypt(in_data)
- os.chmod(out_file_path, stat.S_IWUSR | stat.S_IRUSR)
+ fd_out = os.open(out_path, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ out_file = os.fdopen(fd_out, "wb")
+ out_file.write(ciphertext)
+ out_file.close()
return
-def encrypt_aes_key(pubkey_path, in_path, out_path):
- cmd = "openssl rsautl -encrypt -pubin -oaep -inkey {} -in {} -out {}". \
- format(pubkey_path, in_path, out_path)
- try:
- subprocess.check_output(cmd.split(), shell=False)
- except Exception:
- print("RSA encrypt operation failed")
- raise RuntimeError
- os.chmod(out_path, stat.S_IWUSR | stat.S_IRUSR)
- return
-
-def gen_signature(cfg, uuid_str, raw_data_path, hash_file_path, out_file_path):
- gen_ta_signature(cfg, uuid_str, raw_data_path, hash_file_path, out_file_path)
+def gen_signature(cfg, uuid_str, raw_data, raw_data_path, hash_file_path, \
+ out_file_path, out_path, key_info_data):
+ gen_ta_signature(cfg, uuid_str, raw_data, raw_data_path, \
+ hash_file_path, out_file_path, out_path, key_info_data, SING_BIG_ENDIAN)
os.chmod(out_file_path, stat.S_IWUSR | stat.S_IRUSR)
return
+
def gen_raw_data(manifest_data_path, manifest_ext_path, elf_file_path, \
- config_path, raw_file_path):
+ config_path, raw_file_path, ta_version):
manifest_size = os.path.getsize(manifest_data_path)
manifest_ext_size = os.path.getsize(manifest_ext_path)
elf_size = os.path.getsize(elf_file_path)
config_size = 0
- if manifest_ext_size > MAX_EXT_PROP_LEN:
- print("too much data in \"manifest.txt\" to be handled. \
- extra string len %d" \
- % manifest_ext_size)
- raise RuntimeError
-
verify_elf_header(elf_file_path)
- with open(raw_file_path, 'wb') as file_op:
- header = ""
- if os.path.isfile(config_path):
- config_size = os.path.getsize(config_path)
- header = struct.pack('IIIII', TA_VERSION, manifest_size, \
- manifest_ext_size, \
- elf_size, config_size)
- file_op.write(header)
-
- with open(manifest_data_path, 'rb') as manifest_data:
- file_op.write(manifest_data.read(manifest_size))
-
- with open(manifest_ext_path, 'rb') as manifest_ext:
- file_op.write(manifest_ext.read(manifest_ext_size))
-
- with open(elf_file_path, 'rb') as elf:
- file_op.write(elf.read(elf_size))
- if config_size != 0:
- with open(config_path, 'rb') as config:
- file_op.write(config.read(config_size))
+ fd_op = os.open(raw_file_path, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ file_op = os.fdopen(fd_op, "wb")
+ header = ""
+ if os.path.isfile(config_path):
+ config_size = os.path.getsize(config_path)
+ if SING_BIG_ENDIAN:
+ raw_tag = '>IIIII'
+ else:
+ raw_tag = 'IIIII'
+ header = struct.pack(raw_tag, ta_version, manifest_size, \
+ manifest_ext_size, \
+ elf_size, config_size)
+ file_op.write(header)
+
+ with open(manifest_data_path, 'rb') as manifest_data:
+ file_op.write(manifest_data.read(manifest_size))
+
+ with open(manifest_ext_path, 'rb') as manifest_ext:
+ file_op.write(manifest_ext.read(manifest_ext_size))
+
+ with open(elf_file_path, 'rb') as elf:
+ file_op.write(elf.read(elf_size))
+ if config_size != 0:
+ with open(config_path, 'rb') as config:
+ file_op.write(config.read(config_size))
+ file_op.close()
return
-def aes_encrypt(key_path, iv_path, in_file_path, out_file_path):
- key_size = os.path.getsize(key_path)
- with open(key_path, 'rb') as key_file:
- key_data = key_file.read(key_size)
- hex_key_str = binascii.b2a_hex(key_data)
-
- iv_size = os.path.getsize(iv_path)
- with open(iv_path, 'rb') as iv_file:
- iv_data = iv_file.read(iv_size)
- hex_iv_str = binascii.b2a_hex(iv_data)
-
- cmd = "openssl enc -aes-256-cbc -in {} -out {} -K {} -iv {}".\
- format(in_file_path, out_file_path, \
- bytes.decode(hex_key_str), bytes.decode(hex_iv_str))
- try:
- subprocess.check_output(cmd.split(), shell=False)
- except Exception:
- print("AES encrypt operation failed")
- raise RuntimeError
+def aes_encrypt(key_data, iv_data, in_file_path, out_file_path):
+ in_size = os.path.getsize(in_file_path)
+ with open(in_file_path, 'rb') as in_file:
+ in_data = in_file.read(in_size)
+ padding = 16 - in_size % 16
+ in_data += bytes([padding]) * padding
+
+ cipher = AES.new(key_data, AES.MODE_CBC, iv_data)
+ ciphertext = cipher.encrypt(in_data)
+
+ fd_out = os.open(out_file_path, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ out_file = os.fdopen(fd_out, "wb")
+ out_file.write(ciphertext)
+ out_file.close()
- os.chmod(out_file_path, stat.S_IWUSR | stat.S_IRUSR)
return
-def parser_api_level(compile_config):
+def parser_api_level(mk_compile_cfg, cmake_compile_cfg):
default_api_level = 1
- if not os.path.exists(compile_config):
- print("TA Make Config doesn't exist, ignore it")
+ compile_cfg_file = ''
+
+ # The config.mk file is first searched.
+ # The config.cmake file is searched only when the config.mk file does
+ # not exist. If the API_LEVEL macro is not defined in either of the
+ # two files, the default value LEVEL 1 is used.
+ if os.path.exists(mk_compile_cfg):
+ compile_cfg_file = mk_compile_cfg
+ elif os.path.exists(cmake_compile_cfg):
+ compile_cfg_file = cmake_compile_cfg
+ else:
+ logging.error("Build config file doesn't exist, ignore it")
return default_api_level
- with open(compile_config) as file_op:
+
+ with open(compile_cfg_file) as file_op:
for line in file_op:
- if line.startswith("#") or not "-DAPI_LEVEL" in line:
+ if line.startswith("#") or "-DAPI_LEVEL" not in line:
continue
key, value = line.strip().split("-DAPI_LEVEL=")
- print("key info {}".format(key))
- print(("ta_api_level = {}".format(value)))
- return value
+ logging.critical("key info %s", key)
+ logging.critical("ta_api_level = %s", value[0])
+ return value[0]
+
+ logging.error("Build Config file doesn't define API_LEVEL")
return default_api_level
-def update_api_level(compile_config, manifest):
+def update_api_level(mk_compile_cfg, cmake_compile_cfg, manifest):
data = ''
with open(manifest, 'r') as file_op:
for line in file_op:
- if line.startswith("#") or not "gpd.ta.api_level" in line:
+ if line.startswith("#") or "gpd.ta.api_level" not in line:
data += line
- line = "\ngpd.ta.api_level:{}\n".format(parser_api_level(compile_config))
+
+ api_level = parser_api_level(mk_compile_cfg, cmake_compile_cfg)
+ line = "\ngpd.ta.api_level:{}\n".format(api_level)
data += line
- with open(manifest, "w") as file_op:
- file_op.writelines(data)
+ fd_op = os.open(manifest, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ file_op = os.fdopen(fd_op, "w")
+ file_op.writelines(data)
+ file_op.close()
def update_otrp_flag(manifest):
data = ''
with open(manifest, 'r') as file_op:
for line in file_op:
- if line.startswith("#") or not "gpd.ta.otrp_flag" in line:
+ if line.startswith("#") or "gpd.ta.otrp_flag" not in line:
data += line
line = "\ngpd.ta.otrp_flag:{}\n".format('true')
data += line
- with open(manifest, "w") as file_op:
- file_op.writelines(data)
+ fd_op = os.open(manifest, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ file_op = os.fdopen(fd_op, "w")
+ file_op.writelines(data)
+ file_op.close()
-def gen_data_for_sign(header, key_info, raw_file, data_sign):
- key_info_len = os.path.getsize(key_info)
+def gen_data_for_sign(header, key_data, raw_file):
raw_file_len = os.path.getsize(raw_file)
+ with open(raw_file, 'rb') as raw_fp:
+ raw_data = raw_fp.read(raw_file_len)
- with open(data_sign, 'wb') as data_fp, \
- open(key_info, 'rb') as key_fp, open(raw_file, 'rb') as raw_fp:
- data_fp.write(header)
- data_fp.write(key_fp.read(key_info_len))
- data_fp.write(raw_fp.read(raw_file_len))
+ data_sign = header
+ data_sign += key_data
+ data_sign += raw_data
+ return data_sign
def gen_key_version(cfg):
- if cfg.pub_key_len == '3072':
+ if cfg.pub_key_len == '4096':
+ return int(0x0302)
+ elif cfg.pub_key_len == '3072':
return int(0x0202)
- if cfg.pub_key_len == '2048':
+ elif cfg.pub_key_len == '2048':
return int(0x0002)
- print("unhandled pulic key len %s" % cfg.pub_key_len)
+ elif cfg.pub_key_len == '':
+ return int(0x0000)
+
+ logging.error("unhandled pulic key len %s", cfg.pub_key_len)
raise RuntimeError
+def pack_signature(signature_path, signature_size):
+ add_size = 72 - signature_size
+ with open(signature_path, 'rb+') as signature_file:
+ signature_buf = signature_file.read(signature_size)
+ signature_file.seek(0)
+ for _ in range(0, add_size):
+ signature_file.write(b'\x00')
+ signature_file.write(signature_buf)
+
+
+def check_if_is_drv(manifest_path):
+ with open(manifest_path, 'r') as mani_fp:
+ for each_line in mani_fp:
+ if each_line.startswith("#") or not each_line.strip():
+ continue
+ name = each_line.split(":")[0].strip()
+ if name == "gpd.ta.target_type" and \
+ str(each_line.split(":")[1].strip()) == "1":
+ return 1
+ return 0
+
+
+def get_sign_cert_block_buffer(cfg, signature_path, signature_size):
+ ''' get sign and cert buffer '''
+ with open(signature_path, 'rb') as signature_file:
+ signature_buf = signature_file.read(signature_size)
+ ta_cert_len = 0
+ if cfg.sign_key_type == TYPE_PUBKEY:
+ sign_verify_buf = struct.pack('II', TYPE_PUBKEY, 0) + signature_buf
+ else:
+ ta_cert_path = cfg.ta_cert_chain
+ ta_cert_len = os.path.getsize(ta_cert_path)
+ with open(ta_cert_path, 'rb') as ta_cert_file:
+ ta_cert_buf = ta_cert_file.read(ta_cert_len)
+ if cfg.sign_key_type == TYPE_CERT:
+ sign_verify_buf = struct.pack('II', TYPE_CERT, ta_cert_len) + ta_cert_buf + signature_buf
+ else:
+ sign_verify_buf = struct.pack('II', TYPE_CERT_CHAIN, ta_cert_len) + ta_cert_buf + signature_buf
+ return sign_verify_buf
+
+
def gen_sec_image(in_path, out_path, cfg):
# temporary files
- temp_path = os.path.join(in_path, "temp")
+ temp_path = os.path.join(out_path, "temp")
shutil.rmtree(temp_path, ignore_errors=True)
os.mkdir(temp_path)
os.chmod(temp_path, stat.S_IRWXU)
- iv_file_path = os.path.join(temp_path, "iv.bin")
- key_file_path = os.path.join(temp_path, "aeskey.bin")
key_info_path = os.path.join(temp_path, "KeyInfo")
enc_key_path = os.path.join(temp_path, "KeyInfo.enc")
raw_file_path = os.path.join(temp_path, "rawData")
@@ -322,63 +519,185 @@ def gen_sec_image(in_path, out_path, cfg):
# mandentory input files
manifest_path = os.path.join(in_path, "manifest.txt")
elf_file_path = os.path.join(in_path, "libcombine.so")
- compile_config_path = os.path.join(in_path, "config.mk")
-
- ret, product_name = parser_manifest(manifest_path, \
- manifest_data_path, manifest_ext_path)
- if ret is False:
+ mk_cfg_path = os.path.join(in_path, "config.mk")
+ cmake_cfg_path = os.path.join(in_path, "config.cmake")
+ dyn_conf_xml_file_path = os.path.join(in_path, "dyn_perm.xml")
+ tag_parse_dict_file_path = os.path.join(os.getcwd(), "tag_parse_dict.csv")
+ xml_config_path = os.path.join(in_path, "configs.xml")
+ auth_xml_file_path = os.path.join(in_path, "auth_config.xml")
+
+ ta_cert_path = cfg.ta_cert_chain
+ if cfg.ta_version == 5:
+ if cfg.sign_key_type == TYPE_PUBKEY:
+ ta_cert_len = 0
+ else:
+ ta_cert_len = os.path.getsize(ta_cert_path)
+
+ is_encrypt_sec = True
+ if cfg.public_key == "" or cfg.pub_key_len == "":
+ is_encrypt_sec = False
+
+ # 1. parser_manifest
+ manifest_info = process_manifest_file(xml_config_path, \
+ manifest_path, manifest_data_path, manifest_ext_path, SING_BIG_ENDIAN)
+ uuid_str = manifest_info.uuid_str
+ if manifest_info.ret is False:
raise RuntimeError
- update_api_level(compile_config_path, manifest_ext_path)
+ # 2. update_api_level
+ update_api_level(mk_cfg_path, cmake_cfg_path, manifest_ext_path)
- if cfg.otrp_flag == 1:
- print("package otrp sec file\n")
+ # 3. update_otrp_flag
+ if cfg.otrp_flag == "1":
+ logging.critical("package otrp sec file\n")
update_otrp_flag(manifest_ext_path)
+ # 4. parser_dyn_conf
+ if os.path.exists(dyn_conf_xml_file_path):
+ # V3.1 ta/drv do not need manifest_ext
+ if not os.path.exists(cfg.config_path):
+ from dyn_conf_parser import parser_dyn_conf
+ parser_dyn_conf(dyn_conf_xml_file_path, manifest_ext_path, \
+ tag_parse_dict_file_path, in_path)
+ else:
+ if check_if_is_drv(manifest_path) == 1:
+ if not os.path.exists(cfg.config_path):
+ ans = "gpd.ta.dynConf:00000\n"
+ manifest_ext_path_fd = os.open(manifest_ext_path, \
+ os.O_RDWR, 0o600)
+ with os.fdopen(manifest_ext_path_fd, 'a+') as mani_ext_fp:
+ mani_ext_fp.write(ans)
+
+ # parser auth config xml: the auth info must be packed in the end of manifest_ext.
+ if os.path.exists(auth_xml_file_path):
+ from auth_conf_parser import parser_auth_xml
+ parser_auth_xml(auth_xml_file_path, manifest_ext_path, SING_BIG_ENDIAN)
+
+ # 5. gen_raw_data
gen_raw_data(manifest_data_path, manifest_ext_path, elf_file_path, \
- cfg.config_path, raw_file_path)
-
- # generate AES key info to encrypt raw data
- gen_aes_key_info(cfg, iv_file_path, key_file_path, key_info_path)
- encrypt_aes_key(cfg.public_key, key_info_path, enc_key_path)
-
- aes_encrypt(key_file_path, iv_file_path, raw_file_path, enc_raw_path)
+ cfg.config_path, raw_file_path, cfg.ta_version)
+
+ if cfg.sign_type == '4':
+ sign_len = 9219
+ elif cfg.sign_type == '5':
+ sign_len = 0
+ elif cfg.sign_type == '6':
+ sign_len = 9227
+ else:
+ if int(cfg.sign_key_len) == 256:
+ sign_len = 72
+ else:
+ sign_len = int(cfg.sign_key_len) / 8
+
+ # 6. gen aes key, and encrypt aes key with RSA key,
+ # and encrypt raw data with aes key
+ if is_encrypt_sec is True:
+ # generate AES key info to encrypt raw data
+ key_data, iv_data, key_info_data = gen_aes_key_info(cfg)
+ encrypt_aes_key(cfg.public_key, key_info_data, enc_key_path)
+ aes_encrypt(key_data, iv_data, raw_file_path, enc_raw_path)
+
+ # generate Main Header
+ if cfg.ta_version == 5:
+ content_len = os.path.getsize(enc_key_path) \
+ + 4 + 4 + ta_cert_len + sign_len \
+ + os.path.getsize(enc_raw_path)
+ else:
+ content_len = os.path.getsize(enc_key_path) \
+ + sign_len \
+ + os.path.getsize(enc_raw_path)
+ else:
+ gen_sign_alg_info(cfg, key_info_path)
+ # generate Main Header
+ if cfg.ta_version == 5:
+ content_len = os.path.getsize(key_info_path) \
+ + 4 + 4 + ta_cert_len + sign_len \
+ + os.path.getsize(raw_file_path)
+ else:
+ content_len = os.path.getsize(key_info_path) \
+ + sign_len \
+ + os.path.getsize(raw_file_path)
+ with open(key_info_path, 'rb') as key_info_fp:
+ key_info_data = key_info_fp.read(os.path.getsize(key_info_path))
- # generate Main Header
- content_len = os.path.getsize(enc_key_path) + \
- (int(cfg.sign_key_len) / 8) + \
- os.path.getsize(enc_raw_path)
key_version = gen_key_version(cfg)
- header = gen_header(int(content_len), key_version)
-
- gen_data_for_sign(header, key_info_path, raw_file_path, data_for_sign_path)
-
- uuid_str = product_name[0:36]
- print('uuid str {}'.format(uuid_str))
-
- gen_signature(cfg, uuid_str, data_for_sign_path, hash_path, signature_path)
-
- sec_img_path = os.path.join(out_path, product_name)
- with open(sec_img_path, 'wb') as sec_image:
- # write to sec file [1.header info]
- sec_image.write(header)
+ header = gen_header(int(content_len), key_version, cfg)
+ data_for_sign = gen_data_for_sign(header, key_info_data, raw_file_path)
+
+ uuid_str = uuid_str[0:36]
+ logging.critical("uuid str %s", uuid_str)
+
+ # 7. gen signature
+ gen_signature(cfg, uuid_str, data_for_sign, data_for_sign_path, \
+ hash_path, signature_path, out_path, key_info_data)
+
+ if os.path.exists("get_ta_elf_hash.py"):
+ if os.path.exists(elf_file_path):
+ from get_ta_elf_hash import get_code_segment_from_elf
+ get_code_segment_from_elf(elf_file_path, uuid_str, data_for_sign)
+
+ # 8. pack sec img: header || key || signature || raw_data
+ signature_size = os.path.getsize(signature_path)
+ if sign_len == 72:
+ if signature_size != 72:
+ pack_signature(signature_path, signature_size)
+ elif sign_len == 0:
+ sign_len = signature_size
+ # generate Main Header
+ if is_encrypt_sec is True:
+ key_data_path = enc_key_path
+ raw_data_path = enc_raw_path
+ else:
+ key_data_path = key_info_path
+ raw_data_path = raw_file_path
+ content_len = os.path.getsize(key_data_path) \
+ + sign_len \
+ + os.path.getsize(raw_data_path)
+ header = gen_header(int(content_len), key_version, cfg)
+
+ sec_img_path = os.path.join(out_path, manifest_info.product_name)
+ fd_image = os.open(sec_img_path, os.O_WRONLY | os.O_CREAT, \
+ stat.S_IWUSR | stat.S_IRUSR)
+ sec_image = os.fdopen(fd_image, "wb")
+ # write to sec file [1.header info]
+ sec_image.write(header)
+ if is_encrypt_sec is True:
# write to sec file [2.AES key info]
enc_key_size = os.path.getsize(enc_key_path)
with open(enc_key_path, 'rb') as enc_key_info:
sec_image.write(enc_key_info.read(enc_key_size))
- # write to sec file [3.signature]
+ else:
+ key_info_size = os.path.getsize(key_info_path)
+ with open(key_info_path, 'rb') as key_info_fp:
+ sec_image.write(key_info_fp.read(key_info_size))
+ # write to sec file [3.signature]
+ if cfg.ta_version == 5:
+ signature_size = os.path.getsize(signature_path)
+ sign_cert_buf = get_sign_cert_block_buffer(cfg, signature_path, signature_size)
+ sec_image.write(sign_cert_buf)
+ else:
signature_size = os.path.getsize(signature_path)
with open(signature_path, 'rb') as signature_file:
sec_image.write(signature_file.read(signature_size))
+ if is_encrypt_sec is True:
# write to sec file [4.encrypted raw data]
enc_raw_size = os.path.getsize(enc_raw_path)
with open(enc_raw_path, 'rb') as enc_raw_data:
sec_image.write(enc_raw_data.read(enc_raw_size))
+ else:
+ raw_file_size = os.path.getsize(raw_file_path)
+ with open(raw_file_path, 'rb') as raw_file_data:
+ sec_image.write(raw_file_data.read(raw_file_size))
+ sec_image.truncate(int(SEC_HEADER_BYTES) + int(content_len))
+ sec_image.close()
- print("=========================SUCCESS============================")
- print("generate TA(V3 format) load image success: ")
- print(sec_img_path)
- print("============================================================")
+ logging.critical("=========================SUCCESS============================")
+ logging.critical("generate sec(common format) load image success: ")
+ logging.critical(sec_img_path)
+ logging.critical("============================================================")
+
+ if manifest_info.manifest_txt_exist is False and os.path.exists(manifest_path):
+ os.remove(manifest_path)
#remove temp files
shutil.rmtree(temp_path)
@@ -386,23 +705,59 @@ def gen_sec_image(in_path, out_path, cfg):
def main():
- sign_tool_dir = os.path.dirname(os.path.abspath(__file__))
+ global SING_BIG_ENDIAN
+ sign_tool_dir = os.path.dirname(os.path.realpath(__file__))
parser = argparse.ArgumentParser()
parser.add_argument("in_path", help="input path of data to be signed. \
(libcombine.so; manifest.txt; ...", type=str)
parser.add_argument("out_path", help="input path of signed file. \
(xxx.sec)", type=str)
- parser.add_argument("--config", help="sign configuation file", type=str)
+ parser.add_argument("--publicCfg", \
+ help="sign cfg for ta developer", type=str)
+ parser.add_argument("--privateCfg", \
+ help="sign cfg for product developer", type=str)
+ parser.add_argument("--sign_endian", \
+ help="sign endian (little/big default little)", type=str)
args = parser.parse_args()
- if args.config:
- cfg = Configuration(args.config)
+ cfg = AllCfg()
+ if args.privateCfg:
+ PrivateCfg(args.privateCfg, cfg)
else:
- cfg = Configuration(os.path.join(sign_tool_dir, "config.ini"))
+ logging.error("please config private cfg file")
+ raise RuntimeError
- in_path = os.path.abspath(args.in_path)
- out_path = os.path.abspath(args.out_path)
+ if args.publicCfg:
+ PublicCfg(args.publicCfg, cfg)
+ else:
+ PublicCfg(args.privateCfg, cfg)
+
+ if args.sign_endian and args.sign_endian == "big":
+ SING_BIG_ENDIAN = True
+
+ if check_cfg(cfg):
+ logging.error("the configuration file field is incorrect.")
+ exit()
+ in_path = os.path.realpath(args.in_path)
+ out_path = os.path.realpath(args.out_path)
+ if not os.path.exists(in_path):
+ logging.error("input_path does not exist.")
+ exit()
+ if not os.path.exists(out_path):
+ logging.error("out_path does not exist.")
+ exit()
+ if whitelist_check(in_path):
+ logging.error("input_path is incorrect.")
+ exit()
+ if whitelist_check(out_path):
+ logging.error("out_path is incorrect.")
+ exit()
os.chdir(sign_tool_dir)
- gen_sec_image(in_path, out_path, cfg)
+
+ if cfg.re_sign_flag == "1":
+ from re_generate_signature import re_sign_sec_img
+ re_sign_sec_img(in_path, out_path, cfg)
+ else:
+ gen_sec_image(in_path, out_path, cfg)
if __name__ == '__main__':
diff --git a/build/signtools/tag_parse_dict.csv b/build/signtools/tag_parse_dict.csv
new file mode 100644
index 0000000..22040ea
--- /dev/null
+++ b/build/signtools/tag_parse_dict.csv
@@ -0,0 +1,120 @@
+drv_perm/,0,TYPE_CLASS,
+drv_perm/drvcall_perm_apply/,1,TYPE_CLASS,
+drv_perm/drvcall_perm_apply/item/,2,TYPE_CLASS,
+drv_perm/drvcall_perm_apply/item/name,3,TYPE_CHAR,
+drv_perm/drvcall_perm_apply/item/permission,4,TYPE_CHAR,drv_perm/drvcall_perm_apply/item/name
+drv_perm/drv_basic_info/,5,TYPE_CLASS,
+drv_perm/drv_basic_info/thread_limit,6,TYPE_INT,
+drv_perm/drv_basic_info/upgrade,7,TYPE_BOOL,
+drv_perm/drv_basic_info/virt2phys,8,TYPE_BOOL,
+drv_perm/drv_basic_info/exception_mode,9,TYPE_CHAR,
+drv_perm/drv_io_map/,10,TYPE_CLASS,
+drv_perm/drv_io_map/item/,11,TYPE_CLASS,
+drv_perm/drv_io_map/item/chip_type,12,TYPE_CHAR,
+drv_perm/drv_io_map/item/iomap,13,TYPE_CHAR,
+drv_perm/irq/,14,TYPE_CLASS,
+drv_perm/irq/item/,15,TYPE_CLASS,
+drv_perm/irq/item/chip_type,16,TYPE_CHAR,
+drv_perm/irq/item/irq,17,TYPE_CHAR,
+drv_perm/map_secure/,18,TYPE_CLASS,
+drv_perm/map_secure/item/,19,TYPE_CLASS,
+drv_perm/map_secure/item/chip_type,20,TYPE_CHAR,
+drv_perm/map_secure/item/uuid,21,TYPE_CHAR,
+drv_perm/map_secure/item/region,22,TYPE_CHAR,
+drv_perm/map_nosecure/,23,TYPE_CLASS,
+drv_perm/map_nosecure/item/,24,TYPE_CLASS,
+drv_perm/map_nosecure/item/chip_type,25,TYPE_CHAR,
+drv_perm/map_nosecure/item/uuid,26,TYPE_CHAR,
+drv_perm/drv_cmd_perm_info/,27,TYPE_CLASS,
+drv_perm/drv_cmd_perm_info/item/,28,TYPE_CLASS,
+drv_perm/drv_cmd_perm_info/item/cmd,29,TYPE_CHAR,{gpd.ta.service_name}.csv
+drv_perm/drv_cmd_perm_info/item/permission,30,TYPE_CHAR,{gpd.ta.service_name}.csv
+drv_perm/drv_mac_info/,31,TYPE_CLASS,
+drv_perm/drv_mac_info/item/,32,TYPE_CLASS,
+drv_perm/drv_mac_info/item/uuid,33,TYPE_CHAR,
+drv_perm/drv_mac_info/item/permission,34,TYPE_CHAR,{gpd.ta.service_name}.csv
+ConfigInfo/drv_perm/,0,TYPE_CLASS,
+ConfigInfo/drv_perm/drvcall_perm_apply/,1,TYPE_CLASS,
+ConfigInfo/drv_perm/drvcall_perm_apply/item/,2,TYPE_CLASS,
+ConfigInfo/drv_perm/drvcall_perm_apply/item/name,3,TYPE_CHAR,
+ConfigInfo/drv_perm/drvcall_perm_apply/item/permission,4,TYPE_CHAR,ConfigInfo/drv_perm/drvcall_perm_apply/item/name
+ConfigInfo/drv_perm/drv_basic_info/,5,TYPE_CLASS,
+ConfigInfo/drv_perm/drv_basic_info/thread_limit,6,TYPE_INT,
+ConfigInfo/drv_perm/drv_basic_info/upgrade,7,TYPE_BOOL,
+ConfigInfo/drv_perm/drv_basic_info/virt2phys,8,TYPE_BOOL,
+ConfigInfo/drv_perm/drv_basic_info/exception_mode,9,TYPE_CHAR,
+ConfigInfo/drv_perm/drv_io_map/,10,TYPE_CLASS,
+ConfigInfo/drv_perm/drv_io_map/item/,11,TYPE_CLASS,
+ConfigInfo/drv_perm/drv_io_map/item/chip_type,12,TYPE_CHAR,
+ConfigInfo/drv_perm/drv_io_map/item/iomap,13,TYPE_CHAR,
+ConfigInfo/drv_perm/irq/,14,TYPE_CLASS,
+ConfigInfo/drv_perm/irq/item/,15,TYPE_CLASS,
+ConfigInfo/drv_perm/irq/item/chip_type,16,TYPE_CHAR,
+ConfigInfo/drv_perm/irq/item/irq,17,TYPE_CHAR,
+ConfigInfo/drv_perm/map_secure/,18,TYPE_CLASS,
+ConfigInfo/drv_perm/map_secure/item/,19,TYPE_CLASS,
+ConfigInfo/drv_perm/map_secure/item/chip_type,20,TYPE_CHAR,
+ConfigInfo/drv_perm/map_secure/item/uuid,21,TYPE_CHAR,
+ConfigInfo/drv_perm/map_secure/item/region,22,TYPE_CHAR,
+ConfigInfo/drv_perm/map_nosecure/,23,TYPE_CLASS,
+ConfigInfo/drv_perm/map_nosecure/item/,24,TYPE_CLASS,
+ConfigInfo/drv_perm/map_nosecure/item/chip_type,25,TYPE_CHAR,
+ConfigInfo/drv_perm/map_nosecure/item/uuid,26,TYPE_CHAR,
+ConfigInfo/drv_perm/drv_cmd_perm_info/,27,TYPE_CLASS,
+ConfigInfo/drv_perm/drv_cmd_perm_info/item/,28,TYPE_CLASS,
+ConfigInfo/drv_perm/drv_cmd_perm_info/item/cmd,29,TYPE_CHAR,{gpd.ta.service_name}.csv
+ConfigInfo/drv_perm/drv_cmd_perm_info/item/permission,30,TYPE_CHAR,{gpd.ta.service_name}.csv
+ConfigInfo/drv_perm/drv_mac_info/,31,TYPE_CLASS,
+ConfigInfo/drv_perm/drv_mac_info/item/,32,TYPE_CLASS,
+ConfigInfo/drv_perm/drv_mac_info/item/uuid,33,TYPE_CHAR,
+ConfigInfo/drv_perm/drv_mac_info/item/permission,34,TYPE_CHAR,{gpd.ta.service_name}.csv
+ConfigInfo/,0,TYPE_CLASS,
+ConfigInfo/TA_Basic_Info/,1,TYPE_CLASS,
+ConfigInfo/TA_Basic_Info/service_name/,2,TYPE_CLASS,
+ConfigInfo/TA_Basic_Info/service_name/service_name,3,TYPE_CHAR,
+ConfigInfo/TA_Basic_Info/uuid/,4,TYPE_CLASS,
+ConfigInfo/TA_Basic_Info/uuid/uuid,5,TYPE_CHAR,
+ConfigInfo/TA_Manifest_Info/,6,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/instance_keep_alive/,7,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/instance_keep_alive/instance_keep_alive,8,TYPE_BOOL,
+ConfigInfo/TA_Manifest_Info/stack_size/,9,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/stack_size/stack_size,10,TYPE_INT,
+ConfigInfo/TA_Manifest_Info/heap_size/,11,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/heap_size/heap_size,12,TYPE_INT,
+ConfigInfo/TA_Manifest_Info/target_type/,13,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/target_type/target_type,14,TYPE_INT,
+ConfigInfo/TA_Manifest_Info/multi_command/,15,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/multi_command/multi_command,16,TYPE_BOOL,
+ConfigInfo/TA_Manifest_Info/multi_session/,17,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/multi_session/multi_session,18,TYPE_BOOL,
+ConfigInfo/TA_Manifest_Info/single_instance/,19,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/single_instance/single_instance,20,TYPE_BOOL,
+ConfigInfo/TA_Control_Info/,21,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/RPMB_Info/,22,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/RPMB_Info/RPMB_size/,23,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/RPMB_Info/RPMB_size/RPMB_size,24,TYPE_INT,
+ConfigInfo/TA_Control_Info/RPMB_Info/RPMB_Permission/,25,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/RPMB_Info/RPMB_Permission/RPMB_general/,26,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/RPMB_Info/RPMB_Permission/RPMB_general/RPMB_general,27,TYPE_BOOL,
+ConfigInfo/TA_Control_Info/SE_Info/,28,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/SE_Info/SE_open_session/,29,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/SE_Info/SE_open_session/SE_open_session,30,TYPE_BOOL,
+ConfigInfo/TA_Control_Info/TUI_Info/,31,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/TUI_Info/TUI_general/,32,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/TUI_Info/TUI_general/TUI_general,33,TYPE_BOOL,
+ConfigInfo/TA_Control_Info/DEBUG_Info/,34,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/DEBUG_Info/debug_status/,35,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/DEBUG_Info/debug_status/debug_status,36,TYPE_BOOL,
+ConfigInfo/TA_Control_Info/DEBUG_Info/DEBUG_status/,35,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/DEBUG_Info/DEBUG_status/DEBUG_status,36,TYPE_BOOL,
+ConfigInfo/TA_Control_Info/DEBUG_Info/DEBUG_device_id/,37,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/DEBUG_Info/DEBUG_device_id/DEBUG_device_id,38,TYPE_CHAR,
+ConfigInfo/TA_Manifest_Info/mem_page_align/,39,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/mem_page_align/mem_page_align,40,TYPE_BOOL,
+ConfigInfo/TA_Manifest_Info/sys_verify_ta/,41,TYPE_CLASS,
+ConfigInfo/TA_Manifest_Info/sys_verify_ta/sys_verify_ta,42,TYPE_BOOL,
+ConfigInfo/TA_Control_Info/TA_Manager/,43,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/TA_Manager/TA_Manager,44,TYPE_CHAR,
+ConfigInfo/TA_Control_Info/CERT_Info/,45,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/CERT_Info/CERT_Permission/,46,TYPE_CLASS,
+ConfigInfo/TA_Control_Info/CERT_Info/CERT_Permission/CERT_Permission,47,TYPE_BOOL,
diff --git a/build/signtools/xml_trans_manifest.py b/build/signtools/xml_trans_manifest.py
new file mode 100644
index 0000000..f9eb36a
--- /dev/null
+++ b/build/signtools/xml_trans_manifest.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+# coding=utf-8
+#----------------------------------------------------------------------------
+# Copyright (c) Huawei Technologies Co., Ltd. 2020-2023. All rights reserved.
+# Licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+# Description: tools for xml trans
+#----------------------------------------------------------------------------
+
+import os
+import logging
+from defusedxml import ElementTree as ET
+
+
+type_trans = {"TYPE_NONE": "-1",
+ "TYPE_CLASS": "0",
+ "TYPE_BOOL": "1",
+ "TYPE_INT": "2",
+ "TYPE_CHAR": "3"}
+
+type_dict = {}
+manifest_dict = {}
+
+
+def get_csv_size(path):
+
+ with open(path, "r", encoding="utf-8") as csvfile:
+ lines = csvfile.readlines()
+ return len(lines)
+ return 0
+
+
+def get_csv_data(path, lnum, rnum):
+ with open(path, "r", encoding="utf-8") as csvfile:
+ count = 0
+ lines = csvfile.readlines()
+ for line in lines:
+ if count == lnum:
+ return str(line.split(",")[rnum]).strip()
+ count = count + 1
+ return ""
+
+
+def classify_tag(tag):
+
+ while len(tag) < 3:
+ tag = "0%s" % (tag)
+
+ return tag
+
+
+# save tag type and manifest item dict
+def handle_manifest_tag_dict(path):
+ for index in range(0, get_csv_size(path)):
+ dyn_sym = get_csv_data(path, index, 0)
+ type_dict[dyn_sym] = type_trans.get(get_csv_data(path, index, 2))
+ manifest_dict[dyn_sym] = get_csv_data(path, index, 3)
+
+
+def process_xml_to_manifest(config_xml_file_path, manifest_path):
+ tree = ET.parse(config_xml_file_path)
+ root = tree.getroot()
+ #Layer 1 node name
+ old_item = root.tag
+ attrs = ""
+ write_data = False
+
+ #write items to manifest.txt
+ manifest_fd = os.open(manifest_path, os.O_CREAT | os.O_RDWR, 0o600)
+ manifest_fp = os.fdopen(manifest_fd, "wb")
+
+ #Traversing the second layer of the xml file
+ for child in root:
+ child_item = "{}/{}".format(old_item, child.tag)
+ #Traversing the third layer of the xml file
+ for children in child:
+ children_item = "{}/{}".format(child_item, children.tag)
+ dyn_type = type_dict.get(children_item + attrs)
+ manifest_item_name = manifest_dict.get(children_item + attrs)
+ if dyn_type == type_trans.get("TYPE_CHAR"):
+ value = "{}: {}\n".format(manifest_item_name, children.text)
+ manifest_fp.write(value.encode())
+ write_data = True
+
+ #close manifest.txt file
+ manifest_fp.close()
+ if write_data is False:
+ os.remove(manifest_path)
+
+
+def trans_xml_to_manifest(config_xml_file_path, manifest_path):
+ if not os.path.exists(config_xml_file_path):
+ logging.error("config xml file doesn't exist")
+ return
+ if not os.path.exists("./manifest_tag_parse_dict.csv"):
+ logging.error("config manifest_tag_parse_dict.csv file doesn't exist")
+ return
+ if os.path.exists(manifest_path):
+ return
+
+ handle_manifest_tag_dict("./manifest_tag_parse_dict.csv")
+ process_xml_to_manifest(config_xml_file_path, manifest_path)
diff --git a/build/tools/srv_entry_check.sh b/build/tools/srv_entry_check.sh
new file mode 100644
index 0000000..870076c
--- /dev/null
+++ b/build/tools/srv_entry_check.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+# Copyright Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+set -e
+
+echo "------------- check SRV tee_task_entry begin --------------"
+task_entry=$($1 -s $2 | grep -w tee_task_entry) || true
+if [[ "$task_entry" != "" ]]; then
+ exit 0
+else
+ echo "----- SRV should define tee_task_entry symbol ---"
+ exit 1
+fi
+echo "------------- check SRV tee_task_entry succ --------------"
diff --git a/build/tools/ta_entry_check.sh b/build/tools/ta_entry_check.sh
new file mode 100644
index 0000000..eab72a3
--- /dev/null
+++ b/build/tools/ta_entry_check.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+# Copyright Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+# iTrustee licensed under the Mulan PSL v2.
+# You can use this software according to the terms and conditions of the Mulan
+# PSL v2.
+# You may obtain a copy of Mulan PSL v2 at:
+# http://license.coscl.org.cn/MulanPSL2
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
+# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+# See the Mulan PSL v2 for more details.
+set -e
+
+#params: $1-readelf cmd; $2-libcombine.so; $3-USE_ENTRY_BINARY; $4-DYN_LINK; $5-TARGET_IS_ARM64
+
+# if USE_ENTRY_BINARY is y, means link elf_main_entry.o
+# no need to check
+if [ "$3" == "y" ]; then
+ echo "------ no need to check task_entry ----"
+ exit 0
+fi
+
+# for ta not link elf_main_entry.o
+# should not define tee_task_entry symbol
+echo "------------- check TA tee_task_entry begin --------------"
+task_entry=$($1 -s $2 | grep -w tee_task_entry) || true
+if [[ "$task_entry" != "" ]]; then
+ echo "----- ERROR TA should not define tee_task_entry symbol ---"
+ echo " $task_entry"
+ exit 1
+fi
+echo "------------- check TA tee_task_entry succ --------------"
+
+# if TARGET_IS_ARM64 is y, means is aarch64 TA
+# for aarch64 ta no need to compile ta_magic.c
+if [ "$5" == "y" ]; then
+ echo "------- aarch64 TA no need check magic ----"
+ exit 0
+fi
+
+# if DYN_LINK is y, means is DYN TA
+# for 32bit dyn ta should compile ta_magic.c
+# since it not link elf_main_entry.o
+task_magic=$($1 -S $2 | grep -w ".magic") || true
+if [ "$4" == "y" ]; then
+ echo "------- check TA magic begin ------"
+ if [[ "$task_magic" == "" ]]; then
+ echo "------ ERROR DYN TA should compile ta_magic.c -----"
+ exit 1
+ fi;
+ echo "------- check TA magic succ ------"
+fi
diff --git a/build/tools/ta_link_64.gcc_xom.ld b/build/tools/ta_link_64.gcc_xom.ld
new file mode 100644
index 0000000..3023ed9
--- /dev/null
+++ b/build/tools/ta_link_64.gcc_xom.ld
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Define the link rule of dyn service 64 bits for xom
+ */
+
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+ "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+PHDRS
+{
+ phdr PT_PHDR PHDRS FLAGS (4);
+ rodata PT_LOAD FILEHDR PHDRS FLAGS (4);
+ xtext PT_LOAD FLAGS (1);
+ data PT_LOAD FLAGS (6);
+ dynamic PT_DYNAMIC FLAGS (6);
+ stack PT_GNU_STACK FLAGS (6);
+ relro 0x6474e552 FLAGS (4);
+}
+SEARCH_DIR("=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+ /* This should be the first section after program headers */
+ .magic : { *(.magic) } : rodata
+ .note.gnu.build-id : { *(.note.gnu.build-id) }
+ .hash : { *(.hash) }
+ .gnu.hash : { *(.gnu.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rela.dyn :
+ {
+ *(.rela.init)
+ *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+ *(.rela.fini)
+ *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+ *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+ *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+ *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+ *(.rela.ctors)
+ *(.rela.dtors)
+ *(.rela.got)
+ *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+ *(.rela.ifunc)
+ }
+ .rela.plt :
+ {
+ *(.rela.plt)
+ *(.rela.iplt)
+ }
+ .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+ .rodata1 : { *(.rodata1) }
+ .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+ .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+ .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table
+ .gcc_except_table.*) }
+ .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) }
+ /* These sections are generated by the Sun/Oracle C++ compiler. */
+ .exception_ranges : ONLY_IF_RO { *(.exception_ranges
+ .exception_ranges*) }
+ /* Make sure the address of text segment is aligned in 4k for xom */
+ .init :
+ {
+ KEEP (*(SORT_NONE(.init)))
+ }:text
+ .fini :
+ {
+ KEEP (*(SORT_NONE(.fini)))
+ }
+ . = ALIGN(0x1000);
+ .plt : { *(.plt) } :xtext
+ .iplt : { *(.iplt) }
+ .xtext :
+ {
+ *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+ *(.text.exit .text.exit.*)
+ *(.text.startup .text.startup.*)
+ *(.text.hot .text.hot.*)
+ *(.text .stub .text.* .gnu.linkonce.t.*)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ }:xtext
+ PROVIDE (__etext = .);
+ PROVIDE (_etext = .);
+ PROVIDE (etext = .);
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
+ /* Exception handling */
+ /* Thread Local Storage sections */
+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }:data
+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ .preinit_array :
+ {
+ KEEP (*(.preinit_array))
+ }
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+ KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ }
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+ KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ }
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .jcr : { KEEP (*(.jcr)) }
+ .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } : data : relro
+ .dynamic : { *(.dynamic) } : data : dynamic : relro
+ .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } : data : relro
+ . = DATA_SEGMENT_RELRO_END (0, .);
+ .data :
+ {
+ PROVIDE (__data_start = .);
+ *(.data .data.* .gnu.linkonce.d.*)
+ SORT(CONSTRUCTORS)
+ }:data
+ .data1 : { *(.data1) }
+ _edata = .; PROVIDE (edata = .);
+ . = .;
+ __bss_start = .;
+ __bss_start__ = .;
+ TA_BSS_START = .;
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss .bss.* .gnu.linkonce.b.*)
+ *(COMMON)
+ . = ALIGN(. != 0 ? 64 / 8 : 1);
+ }
+ TA_BSS_END = .;
+ _bss_end__ = . ; __bss_end__ = . ;
+ . = ALIGN(64 / 8);
+ . = SEGMENT_START("ldata-segment", .);
+ . = ALIGN(64 / 8);
+ __end__ = . ;
+ _end = .; PROVIDE (end = .);
+ . = DATA_SEGMENT_END (.);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ /* DWARF 3 */
+ .debug_pubtypes 0 : { *(.debug_pubtypes) }
+ .debug_ranges 0 : { *(.debug_ranges) }
+ /* DWARF Extension. */
+ .debug_macro 0 : { *(.debug_macro) }
+ .debug_addr 0 : { *(.debug_addr) }
+ .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+ .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+ /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/build/tools/ta_link_64.ld b/build/tools/ta_link_64.ld
index 61388e0..a3eb30a 100644
--- a/build/tools/ta_link_64.ld
+++ b/build/tools/ta_link_64.ld
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: Describe the link file for 64bits TA
*/
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
@@ -19,6 +20,7 @@ SECTIONS
{
/* Read-only sections, merged into text segment: */
. = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+ _start = .;
/* This should be the first section after program headers */
.magic : { *(.magic) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
@@ -49,7 +51,14 @@ SECTIONS
*(.rela.plt)
*(.rela.iplt)
}
- .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+ .rodata :
+ {
+ *(.rodata .rodata.* .gnu.linkonce.r.*)
+ . = ALIGN(16);
+ PROVIDE (__start___llvm_prf_names = .);
+ *(__llvm_prf_names)
+ PROVIDE (__stop___llvm_prf_names = .);
+ }
.rodata1 : { *(.rodata1) }
.eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
@@ -150,6 +159,15 @@ SECTIONS
{
PROVIDE (__data_start = .);
*(.data .data.* .gnu.linkonce.d.*)
+ PROVIDE (__start___llvm_prf_cnts = .);
+ *(__llvm_prf_cnts)
+ PROVIDE (__stop___llvm_prf_cnts = .);
+ PROVIDE (__start___llvm_prf_data = .);
+ *(__llvm_prf_data)
+ PROVIDE (__stop___llvm_prf_data = .);
+ PROVIDE (__start___llvm_prf_vnds = .);
+ *(__llvm_prf_vnds);
+ PROVIDE (__stop___llvm_prf_vnds = .);
SORT(CONSTRUCTORS)
}
.data1 : { *(.data1) }
diff --git a/build/tools/ta_link_64.smee.ld b/build/tools/ta_link_64.smee.ld
new file mode 100644
index 0000000..db72a53
--- /dev/null
+++ b/build/tools/ta_link_64.smee.ld
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
+ * iTrustee licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Describe the link file for 64bits TA
+ */
+
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+ "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+
+PHDRS
+{
+ phdr PT_PHDR PHDRS FLAGS (4);
+ text PT_LOAD FILEHDR PHDRS FLAGS (5);
+ xtext PT_LOAD FLAGS (1);
+ smee 0x65656d73 AT(smee_start) FLAGS (6);
+ data PT_LOAD FLAGS (6);
+ dynamic PT_DYNAMIC FLAGS (6);
+ relro 0x6474e552 FLAGS (4);
+ stack PT_GNU_STACK FLAGS (6);
+}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+ _start = .;
+ /* This should be the first section after program headers */
+ .magic : { *(.magic) } : text
+ .note.gnu.build-id : { *(.note.gnu.build-id) }
+ .hash : { *(.hash) }
+ .gnu.hash : { *(.gnu.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rela.dyn :
+ {
+ *(.rela.init)
+ *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+ *(.rela.fini)
+ *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+ *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+ *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+ *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+ *(.rela.ctors)
+ *(.rela.dtors)
+ *(.rela.got)
+ *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+ *(.rela.ifunc)
+ }
+ .rela.plt :
+ {
+ *(.rela.plt)
+ *(.rela.iplt)
+ }
+ .rodata :
+ {
+ *(.rodata .rodata.* .gnu.linkonce.r.*)
+ . = ALIGN(16);
+ PROVIDE (__start___llvm_prf_names = .);
+ *(__llvm_prf_names)
+ PROVIDE (__stop___llvm_prf_names = .);
+ }
+ .rodata1 : { *(.rodata1) }
+ .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+ .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+ .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table
+ .gcc_except_table.*) }
+ .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) }
+ /* These sections are generated by the Sun/Oracle C++ compiler. */
+ .exception_ranges : ONLY_IF_RO { *(.exception_ranges
+ .exception_ranges*) }
+ /* Make sure the address of text segment is aligned in 4k for xom */
+ . = ALIGN(0x1000);
+ .init :
+ {
+ KEEP (*(SORT_NONE(.init)))
+ } : xtext =0
+ .plt : ALIGN(16) { *(.plt) *(.iplt) }
+ .text :
+ {
+ *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+ *(.text.exit .text.exit.*)
+ *(.text.startup .text.startup.*)
+ *(.text.hot .text.hot.*)
+ *(.text .stub .text.* .gnu.linkonce.t.*)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ } =0
+ .fini :
+ {
+ KEEP (*(SORT_NONE(.fini)))
+ } =0
+ PROVIDE (__etext = .);
+ PROVIDE (_etext = .);
+ PROVIDE (etext = .);
+
+ . = ALIGN(0x1000);
+ PROVIDE_HIDDEN (smee_start = .);
+ .smee : ALIGN(0x1000)
+ {
+ *(sram_protection_section)
+ *(smee* .smee* .*smee)
+ } : smee
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
+ /* Exception handling */
+ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+ .gnu_extab : ONLY_IF_RW { *(.gnu_extab) }
+ .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+ .exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
+ /* Thread Local Storage sections */
+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ .preinit_array :
+ {
+ KEEP (*(.preinit_array))
+ }
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+ KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ }
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+ KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ }
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .jcr : { KEEP (*(.jcr)) }
+ .data.rel.ro :
+ {
+ *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*)
+ *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*)
+ } : data : relro
+ .dynamic : { *(.dynamic) } : data : dynamic : relro
+ .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } : data : relro
+ . = DATA_SEGMENT_RELRO_END (0, .);
+ .data :
+ {
+ PROVIDE (__data_start = .);
+ *(.data .data.* .gnu.linkonce.d.*)
+ PROVIDE (__start___llvm_prf_cnts = .);
+ *(__llvm_prf_cnts)
+ PROVIDE (__stop___llvm_prf_cnts = .);
+ PROVIDE (__start___llvm_prf_data = .);
+ *(__llvm_prf_data)
+ PROVIDE (__stop___llvm_prf_data = .);
+ PROVIDE (__start___llvm_prf_vnds = .);
+ *(__llvm_prf_vnds);
+ PROVIDE (__stop___llvm_prf_vnds = .);
+ SORT(CONSTRUCTORS)
+ } : data
+ .data1 : { *(.data1) }
+ _edata = .; PROVIDE (edata = .);
+ . = .;
+ __bss_start = .;
+ __bss_start__ = .;
+ TA_BSS_START = .;
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss .bss.* .gnu.linkonce.b.*)
+ *(COMMON)
+ . = ALIGN(. != 0 ? 64 / 8 : 1);
+ } : data
+ TA_BSS_END = .;
+ _bss_end__ = . ; __bss_end__ = . ;
+ . = ALIGN(64 / 8);
+ . = SEGMENT_START("ldata-segment", .);
+ . = ALIGN(64 / 8);
+ __end__ = . ;
+ _end = .; PROVIDE (end = .);
+ . = DATA_SEGMENT_END (.);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ /* DWARF 3 */
+ .debug_pubtypes 0 : { *(.debug_pubtypes) }
+ .debug_ranges 0 : { *(.debug_ranges) }
+ /* DWARF Extension. */
+ .debug_macro 0 : { *(.debug_macro) }
+ .debug_addr 0 : { *(.debug_addr) }
+ .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+ .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+ /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/include/CA/tee_client_api.h b/include/CA/tee_client_api.h
index c139d4d..f9ce68e 100644
--- a/include/CA/tee_client_api.h
+++ b/include/CA/tee_client_api.h
@@ -1,6 +1,6 @@
/*
- * Copyright (c) Huawei Technologies Co., Ltd. 2013-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Copyright (c) Huawei Technologies Co., Ltd. 2013-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: TEE client API definitions
*/
#ifndef _TEE_CLIENT_API_H_
@@ -24,7 +25,7 @@
#include <string.h>
#include "tee_client_type.h"
-#include <tee_client_log.h>
+#include "tee_client_log.h"
#ifdef __cplusplus
extern "C" {
@@ -44,7 +45,7 @@ extern "C" {
* initializes a new TEE Context, forming a connection between this Client Application and the TEE
*
* @param name [IN] TEE name (unused)
- * @param context [IN/OUT] pointer to TEEC_Context to be initialized
+ * @param context [OUT] pointer to TEEC_Context to be initialized
*
* @return TEEC_SUCCESS operation success
* @return TEEC_ERROR_BAD_PARAMETERS invalid parameter
@@ -74,11 +75,11 @@ void TEEC_FinalizeContext(
* @param connectionData [IN] any necessary data required to support the connection method
* @param operation [IN/OUT] a pointer to an Operation containing a set of Parameters to exchange with the
* Trusted Application
- * @param returnOrigin [IN/OUT] a pointer to a variable which will contain the return origin, This field may be NULL
+ * @param returnOrigin [OUT] a pointer to a variable which will contain the return origin, This field may be NULL
* if the return origin is not needed
*
* @return TEEC_SUCCESS operation success
- * @return TEEC_ERROR_BAD_PARAMETERS invalid parameter<65><72>context or session or destination is NULL
+ * @return TEEC_ERROR_BAD_PARAMETERS invalid parameter, context or session or destination is NULL
* @return TEEC_ERROR_ACCESS_DENIED client Application's connection request is denied
* @return TEEC_ERROR_OUT_OF_MEMORY system resource is out of use
* @return TEEC_ERROR_TRUSTED_APP_LOAD_ERROR load Trusted Application failed
@@ -109,10 +110,10 @@ void TEEC_CloseSession(
* @param session [IN/OUT] the open Session in which the command will be invoked
* @param commandID [IN] the identifier of the Command within the Trusted Application to invoke
* @param operation [IN/OUT] a pointer to a Client Application initialized TEEC_Operation structure
- * @param returnOrigin [IN/OUT] a pointer to a variable which will contain the return origin
+ * @param returnOrigin [OUT] a pointer to a variable which will contain the return origin
*
* @return TEEC_SUCCESS operation success
- * @return TEEC_ERROR_BAD_PARAMETERS invalid parameter<65><72>session is NULL or operation data invalid
+ * @return TEEC_ERROR_BAD_PARAMETERS invalid parameter, session is NULL or operation data invalid
* @return TEEC_ERROR_ACCESS_DENIED invoke command operation is denied
* @return TEEC_ERROR_OUT_OF_MEMORY system resource is out of use
* @return others refer TEEC_ReturnCode
@@ -155,8 +156,8 @@ TEEC_Result TEEC_AllocateSharedMemory(
/*
* deregisters or deallocates a previously initialized block of Shared Memory
- * if memory is allocated by <20><>TEEC_AllocateSharedMemory, system will free this memory
- * if memory is registered by <20><>TEEC_RegisterSharedMemory, system will not free this memory
+ * if memory is allocated by TEEC_AllocateSharedMemory, system will free this memory
+ * if memory is registered by TEEC_RegisterSharedMemory, system will not free this memory
*
* @param sharedMem [IN/OUT] a pointer to a valid Shared Memory structure
*
diff --git a/include/CA/tee_client_constants.h b/include/CA/tee_client_constants.h
index 3b86dcb..896222d 100644
--- a/include/CA/tee_client_constants.h
+++ b/include/CA/tee_client_constants.h
@@ -1,6 +1,6 @@
/*
- * Copyright (c) Huawei Technologies Co., Ltd. 2013-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Copyright (c) Huawei Technologies Co., Ltd. 2013-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,38 +8,39 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: static definitions of client API
*/
#ifndef _TEE_CLIENT_CONSTANTS_H_
#define _TEE_CLIENT_CONSTANTS_H_
enum TEEC_ReturnCode {
- TEEC_SUCCESS = 0x0, /* success */
- TEEC_ERROR_INVALID_CMD, /* invalid command */
- TEEC_ERROR_SERVICE_NOT_EXIST, /* target service is not exist */
- TEEC_ERROR_SESSION_NOT_EXIST, /* session between client and service is not exist */
- TEEC_ERROR_SESSION_MAXIMUM, /* exceed max num of sessions */
- TEEC_ERROR_REGISTER_EXIST_SERVICE, /* cannot register the service which already exist */
- TEEC_ERROR_TAGET_DEAD_FATAL, /* system error occurs in TEE */
- TEEC_ERROR_READ_DATA, /* failed to read data in file */
- TEEC_ERROR_WRITE_DATA, /* failed to write data to file */
- TEEC_ERROR_TRUNCATE_OBJECT, /* data is truncated */
- TEEC_ERROR_SEEK_DATA, /* failed to seek data in file */
- TEEC_ERROR_FSYNC_DATA, /* failed to sync data in file */
- TEEC_ERROR_RENAME_OBJECT, /* failed to rename file */
- TEEC_ERROR_TRUSTED_APP_LOAD_ERROR, /* failed to load Trusted Application */
- TEEC_ERROR_GENERIC = 0xFFFF0000, /* generic error occurs */
- TEEC_ERROR_ACCESS_DENIED = 0xFFFF0001, /* permission check failed, in initilize context or
- open session or invoke commnad */
- TEEC_ERROR_CANCEL = 0xFFFF0002, /* operation is already canceled */
+ TEEC_SUCCESS = 0x0, /* success */
+ TEEC_ERROR_INVALID_CMD, /* invalid command */
+ TEEC_ERROR_SERVICE_NOT_EXIST, /* target service is not exist */
+ TEEC_ERROR_SESSION_NOT_EXIST, /* session between client and service is not exist */
+ TEEC_ERROR_SESSION_MAXIMUM, /* exceed max num of sessions */
+ TEEC_ERROR_REGISTER_EXIST_SERVICE, /* cannot register the service which already exist */
+ TEEC_ERROR_TAGET_DEAD_FATAL, /* system error occurs in TEE */
+ TEEC_ERROR_READ_DATA, /* failed to read data in file */
+ TEEC_ERROR_WRITE_DATA, /* failed to write data to file */
+ TEEC_ERROR_TRUNCATE_OBJECT, /* data is truncated */
+ TEEC_ERROR_SEEK_DATA, /* failed to seek data in file */
+ TEEC_ERROR_FSYNC_DATA, /* failed to sync data in file */
+ TEEC_ERROR_RENAME_OBJECT, /* failed to rename file */
+ TEEC_ERROR_TRUSTED_APP_LOAD_ERROR, /* failed to load Trusted Application */
+ TEEC_ERROR_GENERIC = 0xFFFF0000, /* generic error occurs */
+ TEEC_ERROR_ACCESS_DENIED = 0xFFFF0001, /* permission check failed, in initilize context or
+ open session or invoke commnad */
+ TEEC_ERROR_CANCEL = 0xFFFF0002, /* operation is already canceled */
TEEC_ERROR_ACCESS_CONFLICT = 0xFFFF0003, /* confilct occurs in concurrent access to data,
error occurs in file operaions generally */
- TEEC_ERROR_EXCESS_DATA = 0xFFFF0004, /* exceed max data to be handled by system */
- TEEC_ERROR_BAD_FORMAT = 0xFFFF0005, /* data format is invalid, Trusted Application cannot
- handle it */
- TEEC_ERROR_BAD_PARAMETERS = 0xFFFF0006, /* invalid parameters */
- TEEC_ERROR_BAD_STATE = 0xFFFF0007, /* operation failed in current state, when try to access
- storage without initilize storage service */
+ TEEC_ERROR_EXCESS_DATA = 0xFFFF0004, /* exceed max data to be handled by system */
+ TEEC_ERROR_BAD_FORMAT = 0xFFFF0005, /* data format is invalid, Trusted Application cannot
+ handle it */
+ TEEC_ERROR_BAD_PARAMETERS = 0xFFFF0006, /* invalid parameters */
+ TEEC_ERROR_BAD_STATE = 0xFFFF0007, /* operation failed in current state, when try to access
+ storage without initilize storage service */
TEEC_ERROR_ITEM_NOT_FOUND = 0xFFFF0008, /* cannot find target item */
TEEC_ERROR_NOT_IMPLEMENTED = 0xFFFF0009, /* request operation is not implemented */
TEEC_ERROR_NOT_SUPPORTED = 0xFFFF000A, /* request operation is not supported */
@@ -52,7 +53,14 @@ enum TEEC_ReturnCode {
TEEC_ERROR_SHORT_BUFFER = 0xFFFF0010, /* out buffer is not enough for current request */
TEEC_ERROR_MAC_INVALID = 0xFFFF3071, /* MAC value check failed */
TEEC_ERROR_TARGET_DEAD = 0xFFFF3024, /* Trusted Application is crashed */
- TEEC_FAIL = 0xFFFF5002 /* reserved error code */
+ TEEC_FAIL = 0xFFFF5002, /* common error */
+ TEEC_ERROR_EXTERNAL_CANCEL = 0xFFFF0011, /* used by adapt only, event caused User Interface operation aborted */
+ TEEC_ERROR_OVERFLOW = 0xFFFF300F, /* used by adapt only */
+ TEEC_ERROR_STORAGE_NO_SPACE = 0xFFFF3041, /* used by adapt only */
+ TEEC_ERROR_SIGNATURE_INVALID = 0xFFFF3072, /* used by adapt only */
+ TEEC_ERROR_TIME_NOT_SET = 0xFFFF5000, /* used by adapt only */
+ TEEC_ERROR_TIME_NEEDS_RESET = 0xFFFF5001, /* used by adapt only */
+ TEEC_ERROR_IPC_OVERFLOW = 0xFFFF9114 /* ipc overflow */
};
enum TEEC_ReturnCodeOrigin {
@@ -66,7 +74,7 @@ enum TEEC_SharedMemCtl {
TEEC_MEM_INPUT = 0x1, /* input type of memroy */
TEEC_MEM_OUTPUT = 0x2, /* output type of memory */
TEEC_MEM_INOUT = 0x3, /* memory is used as both input and output */
- TEEC_MEM_SHARED_INOUT = 0x4, /* no copy shared memory */
+ TEEC_MEM_SHARED_INOUT = 0x4, /* no copy shared memory */
};
enum TEEC_ParamType {
@@ -80,7 +88,7 @@ enum TEEC_ParamType {
refer TEEC_TempMemoryReference */
TEEC_ION_INPUT = 0x08, /* input type of icon memory reference, refer TEEC_IonReference */
TEEC_ION_SGLIST_INPUT = 0x09, /* input type of ion memory block reference, refer TEEC_IonSglistReference */
- TEEC_MEMREF_SHARED_INOUT = 0xa, /* no copy mem */
+ TEEC_MEMREF_SHARED_INOUT = 0x0a, /* no copy mem */
TEEC_MEMREF_WHOLE = 0xc, /* use whole memory block, refer TEEC_RegisteredMemoryReference */
TEEC_MEMREF_PARTIAL_INPUT = 0xd, /* input type of memory reference, refer TEEC_RegisteredMemoryReference */
TEEC_MEMREF_PARTIAL_OUTPUT = 0xe, /* output type of memory reference, refer TEEC_RegisteredMemoryReference */
@@ -105,7 +113,7 @@ enum TEEC_LoginMethod {
TEEC_LOGIN_GROUP_APPLICATION = 0x6, /* Login data about the group running
the Client Application and about the
Client Application itself is provided */
- TEEC_LOGIN_IDENTIFY = 0x7, /* iTrustee defined login type, Login data is provided by REE system */
+ TEEC_LOGIN_IDENTIFY = 0x7, /* Login data is provided by REE system */
};
enum TST_CMD_ID {
TST_CMD_ID_01 = 1,
diff --git a/include/CA/tee_client_list.h b/include/CA/tee_client_list.h
index 4aa6a53..9f3bb1e 100644
--- a/include/CA/tee_client_list.h
+++ b/include/CA/tee_client_list.h
@@ -1,6 +1,6 @@
/*
- * Copyright (c) Huawei Technologies Co., Ltd. 2013-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Copyright (c) Huawei Technologies Co., Ltd. 2013-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: linked list data types and basic operations
*/
#ifndef TEE_CLIENT_LIST_H
@@ -19,12 +20,12 @@ struct ListNode {
};
#define OFFSET_OF(type, member) (unsigned long)(&(((type *)0)->member))
-#define CONTAINER_OF(pos, type, member) (type *)(((char *)(pos)) - OFFSET_OF(type, member))
+#define CONTAINER_OF(pos, type, member) (type *)(uintptr_t)(((char *)(pos)) - OFFSET_OF(type, member))
#define LIST_DECLARE(name) \
struct ListNode name = { \
- .next = &name, \
- .prev = &name, \
+ .next = &(name), \
+ .prev = &(name), \
}
static inline void ListInit(struct ListNode *list)
@@ -80,25 +81,21 @@ static inline struct ListNode *ListRemoveTail(struct ListNode *list)
}
#define LIST_ENTRY(ptr, type, member) \
- ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
+ ((type *)(((char *)(ptr)) - (unsigned long)(&(((type *)0)->member))))
#define LIST_FOR_EACH(pos, list) \
- for (pos = (list)->next; pos != (list); pos = pos->next)
+ for ((pos) = (list)->next; (pos) != (list); (pos) = (pos)->next)
#define LIST_FOR_EACH_SAFE(pos, n, list) \
- for ((pos) = (list)->next, (n) = (pos)->next; \
- (pos) != (list); \
- (pos) = (n), (n) = (pos)->next)
-
-#define LIST_FOR_EACH_ENTRY(pos, list, member) \
- for (pos = LIST_ENTRY((list)->next, typeof(*pos), member); \
- &pos->member != (list); \
- pos = LIST_ENTRY(pos->member.next, typeof(*pos), member))
-
-#define LIST_FOR_EACH_ENTRY_SAFE(pos, n, list, member) \
- for (pos = LIST_ENTRY((list)->next, typeof(*pos), member), \
- n = LIST_ENTRY(pos->member.next, typeof(*pos), member); \
- &pos->member != (list); \
- pos = n, n = LIST_ENTRY(n->member.next, typeof(*n), member))
+ for ((pos) = (list)->next, (n) = (pos)->next; (pos) != (list); (pos) = (n), (n) = (pos)->next)
+
+#define LIST_FOR_EACH_ENTRY(pos, list, member) \
+ for ((pos) = LIST_ENTRY((list)->next, typeof(*(pos)), member); &(pos)->member != (list); \
+ (pos) = LIST_ENTRY((pos)->member.next, typeof(*(pos)), member))
+
+#define LIST_FOR_EACH_ENTRY_SAFE(pos, n, list, member) \
+ for ((pos) = LIST_ENTRY((list)->next, typeof(*(pos)), member), \
+ (n) = LIST_ENTRY((pos)->member.next, typeof(*(pos)), member); \
+ &(pos)->member != (list); (pos) = (n), (n) = LIST_ENTRY((n)->member.next, typeof(*(n)), member))
#endif
diff --git a/include/CA/tee_client_log.h b/include/CA/tee_client_log.h
index e3b7fae..1024015 100644
--- a/include/CA/tee_client_log.h
+++ b/include/CA/tee_client_log.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,19 +8,20 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: TEE client log api
*/
#ifndef TEE_CLIENT_LOG_H
#define TEE_CLIENT_LOG_H
-#include <syslog.h>
+#include <stdio.h>
#ifdef TEEC_DEBUG
-#define TEEC_Debug(...) syslog(LOG_USER | LOG_INFO, __VA_ARGS__);
+#define TEEC_Debug(fmt, args...) printf("%s: " fmt, __func__, ## args)
#else
#define TEEC_Debug(...)
#endif
-#define TEEC_Error(...) syslog(LOG_USER | LOG_INFO, __VA_ARGS__);
+#define TEEC_Error(fmt, args...) printf("%s: " fmt, __func__, ## args)
#endif
diff --git a/include/CA/tee_client_type.h b/include/CA/tee_client_type.h
index c5b97e3..ed70482 100644
--- a/include/CA/tee_client_type.h
+++ b/include/CA/tee_client_type.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2013-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,47 +8,20 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: data type and structure definition according to GP
*/
#ifndef _TEE_CLIENT_TYPE_H_
#define _TEE_CLIENT_TYPE_H_
+#include <stdbool.h>
+#include <stdint.h>
#include <stdio.h>
#include <stddef.h>
#include <semaphore.h>
#include "tee_client_list.h"
#include "tee_client_constants.h"
-typedef unsigned int uint32_t;
-
-typedef signed int int32_t;
-
-typedef unsigned short uint16_t;
-
-typedef signed short int16_t;
-
-typedef unsigned char uint8_t;
-
-typedef signed char int8_t;
-
-#ifndef __cplusplus
-#ifndef bool
-#define bool uint8_t
-#endif
-#endif
-
-#ifndef true
-#define true 1
-#endif
-
-#ifndef false
-#define false 0
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
typedef enum TEEC_ReturnCode TEEC_Result;
typedef struct {
@@ -63,17 +36,23 @@ typedef struct {
uint8_t *ta_path;
struct ListNode session_list;
struct ListNode shrd_mem_list;
- struct {
- void *buffer;
- sem_t buffer_barrier;
- } share_buffer;
+ union {
+ struct {
+ void *buffer;
+ sem_t buffer_barrier;
+ } share_buffer;
+ uint64_t imp; /* for adapt */
+ };
} TEEC_Context;
typedef struct {
uint32_t session_id;
TEEC_UUID service_id;
uint32_t ops_cnt;
- struct ListNode head;
+ union {
+ struct ListNode head;
+ uint64_t imp; /* for adapt */
+ };
TEEC_Context *context;
} TEEC_Session;
@@ -83,7 +62,10 @@ typedef struct {
uint32_t flags; /* reference to TEEC_SharedMemCtl */
uint32_t ops_cnt;
bool is_allocated; /* identify whether the memory is registered or allocated */
- struct ListNode head;
+ union {
+ struct ListNode head;
+ void* imp; /* for adapt, imp is not used by system CA, only for vendor CA */
+ };
TEEC_Context *context;
} TEEC_SharedMemory;
diff --git a/include/TA/huawei_ext/crypto_cert_wrapper.h b/include/TA/huawei_ext/crypto_cert_wrapper.h
new file mode 100644
index 0000000..85e5a15
--- /dev/null
+++ b/include/TA/huawei_ext/crypto_cert_wrapper.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: soft aes engine
+ */
+#ifndef __CRYPTO_CERT_WRAPPER_H__
+#define __CRYPTO_CERT_WRAPPER_H__
+
+#include <stdint.h>
+#include <tee_defines.h>
+#include "crypto_x509_wrapper.h"
+
+/*
+ * Create attestation certificate with input params.
+ *
+ * @param cert [OUT] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ * @param valid [IN] The valid date buffer
+ * @param issuer_tlv [IN] The issuer buffer
+ * @param issuer_tlv_len [IN] The length of issuer buffer
+ * @param subject_public_key [IN] The subject public key buffer
+ * @param subject_public_key_len [IN] The length of subject public key buffer
+ * @param attestation_ext [IN] The attestation extrol info buffer
+ * @param attestation_ext_len [IN] The length of attestation extrol info buffer
+ * @param priv_sign [IN] The private key buffer
+ * @param key_usage_sign_bit [IN] The usage sign flag
+ * @param key_usage_encrypt_bit [IN] The usage encrypt flag
+ * @param keytype [IN] The keytype of private key
+ * @param hash [IN] The hash func of digest
+ *
+ * @return -1: Create attestation certificate failed
+ * @return others: The real size of certificate
+ */
+int32_t create_attestation_cert(uint8_t *cert, uint32_t cert_len, const validity_period_t *valid,
+ const uint8_t *issuer_tlv, uint32_t issuer_tlv_len,
+ const uint8_t *subject_public_key, uint32_t subject_public_key_len,
+ const uint8_t *attestation_ext, uint32_t attestation_ext_len, void *priv_sign,
+ uint32_t key_usage_sign_bit, uint32_t key_usage_encrypt_bit, uint32_t key_type,
+ uint32_t hash);
+
+/*
+ * Get element number from certificate.
+ *
+ * @param elem [OUT] The element with elem_id
+ * @param elem_id [IN] The index of element
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get element failed
+ * @return others: The length of element
+ */
+int32_t get_tbs_element(uint8_t **elem, uint32_t elem_id, const uint8_t *cert, uint32_t cert_len);
+
+/*
+ * verify Cert in tee
+ *
+ * @param cert [IN] data for salt
+ * @param cert_len [IN] salt length
+ * @param parent_key [IN] size of generated key, fix-size 32 bytes
+ * @param parent_key_len [IN] pointer where key is saved
+ *
+ * @return TEE_SUCCESS OK
+ * @return TEE_ERROR_BAD_PARAMETERS illegal parameters
+ * @return TEE_ERROR_GENERIC internal error
+ */
+TEE_Result tee_verify_dev_cert(uint8_t *cert, uint32_t cert_len, uint8_t *parent_key, uint32_t parent_key_len);
+
+/*
+ * create cert request in TEE
+ *
+ * @param buf [OUT] cert request output buffer
+ * @param len [OUT] output buffer size
+ * @param key_type [IN] key_type RSA 0; ECC 1
+ * @param file_name [IN] pointer where key is saved
+ *
+ * @return TEE_SUCCESS operation success
+ * @return TEE_ERROR_BAD_PARAMETERS illegal parameters
+ */
+TEE_Result tee_create_cert_req(uint8_t *buf, size_t len, uint32_t key_type, uint8_t *file_name);
+#endif
diff --git a/include/TA/huawei_ext/crypto_device_key_wrapper.h b/include/TA/huawei_ext/crypto_device_key_wrapper.h
new file mode 100644
index 0000000..2c8ba9e
--- /dev/null
+++ b/include/TA/huawei_ext/crypto_device_key_wrapper.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: soft device key engine
+ */
+#ifndef __CRYPTO_DEVICE_KEY_WRAPPER_H__
+#define __CRYPTO_DEVICE_KEY_WRAPPER_H__
+
+#include <stdint.h>
+#include <tee_defines.h>
+
+/*
+ * Get oem huk.
+ *
+ * @param huk [OUT] The oem huk buffer
+ * @param key [IN] The hmac key buffer
+ * @param key_size [IN] The length of hmac key buffer
+ *
+ * @return 0: Get oem huk success
+ * @return -1: Get oem huk failed
+ */
+int32_t get_class_oem_huk(uint8_t *huk, const uint8_t *key, uint32_t key_size);
+
+#endif
diff --git a/include/TA/huawei_ext/crypto_ec_wrapper.h b/include/TA/huawei_ext/crypto_ec_wrapper.h
new file mode 100644
index 0000000..934fc40
--- /dev/null
+++ b/include/TA/huawei_ext/crypto_ec_wrapper.h
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: soft ec engine
+ */
+#ifndef __CRYPTO_EC_WRAPPER_H__
+#define __CRYPTO_EC_WRAPPER_H__
+
+#include <stdint.h>
+#include <tee_defines.h>
+
+#define ECC_PRIV_LEN 66
+#define ECC_PUB_LEN 66
+
+struct ec_pub_info {
+ uint8_t *x;
+ uint32_t x_len;
+ uint8_t *y;
+ uint32_t y_len;
+};
+
+struct ec_priv_info {
+ uint32_t nid;
+ uint8_t *r;
+ uint32_t r_len;
+};
+
+typedef struct {
+ uint32_t domain;
+ uint8_t x[ECC_PUB_LEN];
+ uint32_t x_len;
+ uint8_t y[ECC_PUB_LEN];
+ uint32_t y_len;
+} ecc_pub_key_t;
+
+typedef struct {
+ uint32_t domain;
+ uint8_t r[ECC_PRIV_LEN];
+ uint32_t r_len;
+} ecc_priv_key_t;
+
+/*
+ * Derive ecc public key from private key.
+ *
+ * @param priv_info [IN] The ecc_priv_key_t structure
+ * @param pub_info [OUT] The ecc_pub_key_t structure
+ *
+ * @return 0: Derive ecc public key success
+ * @return -1: Derive ecc public key failed
+ */
+int32_t ecc_derive_public_key(ecc_priv_key_t *priv_info, ecc_pub_key_t *pub_info);
+
+/*
+ * Derive ecc private key from huk.
+ *
+ * @param priv [OUT] The ecc_priv_key_t structure
+ * @param secret [IN] The huk buffer
+ * @param sec_len [IN] The length of huk buffer
+ *
+ * @return 0: Derive ecc private key success
+ * @return -1: Derive ecc private key failed
+ */
+int32_t derive_ecc_private_key_from_huk(ecc_priv_key_t *priv, const uint8_t *secret, uint32_t sec_len);
+
+/*
+ * Convert the ecc_pub_key_t structure passed in by the user into ecc public key buffer.
+ *
+ * @param out [OUT] The ecc public key buffer
+ * @param outlen [IN/OUT] The length of ecc public key buffer
+ * @param pub [IN] The ecc public key structure
+ *
+ * @return -1: Export ecc public key failed
+ * @return others: The real size of out buffer
+ */
+int32_t ecc_export_pub(uint8_t *out, uint32_t out_size, ecc_pub_key_t *pub);
+
+/*
+ * Convert the ecc public key passed in by the user into the ecc_pub_key_t structure.
+ *
+ * @param pub [OUT] The ecc public key structure
+ * @param in [IN] The ecc public key buffer
+ * @param inlen [IN] The length of ecc public key buffer
+ *
+ * @return 1: Import ecc public key success
+ * @return -1: Import ecc public key failed
+ */
+int32_t ecc_import_pub(ecc_pub_key_t *pub, const uint8_t *in, uint32_t inlen);
+
+/*
+ * Convert the ecc private key passed in by the user into the ecc_priv_key_t structure.
+ *
+ * @param priv [OUT] The ecc private key structure
+ * @param in [IN] The ecc private key buffer
+ * @param inlen [IN] The length of ecc private key buffer
+ *
+ * @return -1: Import ecc private key failed
+ * @return others: The width of ecc private key
+ */
+int32_t ecc_import_priv(ecc_priv_key_t *priv, const uint8_t *in, uint32_t inlen);
+
+/*
+ * Read next TLV (Type-Length-Value) from ASN1 buffer.
+ *
+ * @param type [OUT] Type of TLV
+ * @param header_len [OUT] Length of TLV
+ * @param buf [IN] Input TLV
+ * @param buf_len [IN] Length of buf in bytes
+ *
+ * @return -1: Get next TLV failed
+ * @return others: Length of next TLV
+ */
+int32_t get_next_tlv(uint32_t *type, uint32_t *header_len, const uint8_t *buf, uint32_t buf_len);
+
+/*
+ * Use ECC algorithm to sign user data.
+ *
+ * @param signature [OUT] The signature of input data
+ * @param sig_siz [IN/OUT] The length of signature
+ * @param in [IN] The data to be sign
+ * @param in_len [IN] The length of input data
+ * @param priv [IN] The ecc private key structure
+ *
+ * @return -1: Sign input buffer use ecc failed
+ * @return others: The length of signature
+ */
+int32_t ecc_sign_digest(uint8_t *signature, uint32_t sig_size, uint8_t *in, uint32_t in_len, ecc_priv_key_t *priv);
+
+/*
+ * Verify the data with ECC algorithm.
+ *
+ * @param signature [IN] The signature of input data
+ * @param sig_len [IN] The length of signature
+ * @param in [IN] The input data
+ * @param in_len [IN] The length of input data
+ * @param pub [IN] The ecc public key structure
+ *
+ * @return 1: Verify digest success
+ * @return -1: Verify digest failed
+ */
+int32_t ecc_verify_digest(const uint8_t *signature, uint32_t sig_len, uint8_t *in, uint32_t in_len, ecc_pub_key_t *pub);
+
+#endif
diff --git a/include/TA/huawei_ext/crypto_ec_x509_wrapper.h b/include/TA/huawei_ext/crypto_ec_x509_wrapper.h
new file mode 100644
index 0000000..73e2832
--- /dev/null
+++ b/include/TA/huawei_ext/crypto_ec_x509_wrapper.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: soft ec x509 engine
+ */
+#ifndef __CRYPTO_EC_X509_WRAPPER_H__
+#define __CRYPTO_EC_X509_WRAPPER_H__
+
+#include <stdint.h>
+#include <tee_defines.h>
+#include "crypto_x509_wrapper.h"
+
+/*
+ * Recover the root certificate.
+ *
+ * @param cert [OUT] The certificate buffer
+ * @param cert_len [IN/OUT] The length of certificate buffer
+ * @param priv [IN] The private key structure
+ * @param keytype [IN] The keytype of private key
+ *
+ * @return -1: Recover root certificate failed
+ * @return others: Recover root certificate success
+ */
+int32_t recover_root_cert(uint8_t *cert, uint32_t cert_len, const void *priv, uint32_t keytype);
+
+/*
+ * Sign the pkcs10 certificate.
+ *
+ * @param cert [OUT] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ * @param csr [IN] The certificate signing request buffer
+ * @param csr_len [IN] The length of certificate signing request buffer
+ * @param valid [IN] The valid date buffer
+ * @param serial_number [IN] The serial number buffer
+ * @param serial_length [IN] The length of serial number buffer
+ * @param priv [IN] The private key structure
+ * @param keytype [IN] The keytype of private key
+ *
+ * @return -1: Sign the pkcs10 certificate failed
+ * @return others: The real size of certificate
+ */
+int32_t sign_pkcs10(uint8_t *cert, uint32_t cert_len,
+ const uint8_t *csr, uint32_t csr_len, const validity_period_t *valid,
+ const uint8_t *serial_number, uint32_t serial_length, const void *priv, uint32_t keytype);
+
+#endif
diff --git a/include/TA/huawei_ext/crypto_inner_wrapper.h b/include/TA/huawei_ext/crypto_inner_wrapper.h
new file mode 100644
index 0000000..01a171f
--- /dev/null
+++ b/include/TA/huawei_ext/crypto_inner_wrapper.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: soft inner engine
+ */
+#ifndef __CRYPTO_INNER_WRAPPER_H__
+#define __CRYPTO_INNER_WRAPPER_H__
+
+#include <stdint.h>
+#include <tee_defines.h>
+
+/*
+ * Get common name from certificate.
+ *
+ * @param name [OUT] The common name buffer
+ * @param name_size [IN/OUT] The length of common name buffer
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get common name failed
+ * @return others: Get common name success
+ */
+int32_t get_subject_CN(uint8_t *name, uint32_t name_size, const uint8_t *cert, uint32_t cert_len);
+
+/*
+ * Get organization name from certificate.
+ *
+ * @param name [OUT] The organization name buffer
+ * @param name_size [IN/OUT] The length of organization name buffer
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get organization name failed
+ * @return others: Get organization name success
+ */
+int32_t get_subject_OU(uint8_t *name, uint32_t name_size, const uint8_t *cert, uint32_t cert_len);
+
+/*
+ * verify Cert in tee
+ *
+ * @param cert [IN] data for salt
+ * @param cert_len [IN] salt length
+ * @param parent_key [IN] size of generated key, fix-size 32 bytes
+ * @param parent_key_len [IN] pointer where key is saved
+ *
+ * @return TEE_SUCCESS OK
+ * @return TEE_ERROR_BAD_PARAMETERS illegal parameters
+ * @return TEE_ERROR_GENERIC internal error
+ */
+TEE_Result TEE_EXT_verify_dev_cert(uint8_t *cert, uint32_t cert_len, uint8_t *parent_key, uint32_t parent_key_len);
+
+/*
+ * create cert request in TEE
+ *
+ * @param buf [OUT] cert request output buffer
+ * @param len [OUT] output buffer size
+ * @param key_type [IN] key_type RSA 0; ECC 1
+ * @param file_name [IN] pointer where key is saved
+ *
+ * @return TEE_SUCCESS operation success
+ * @return TEE_ERROR_BAD_PARAMETERS illegal parameters
+ */
+TEE_Result TEE_EXT_create_cert_req(uint8_t *buf, size_t len, uint32_t key_type, uint8_t *file_name);
+#endif
diff --git a/include/TA/huawei_ext/crypto_rsa_wrapper.h b/include/TA/huawei_ext/crypto_rsa_wrapper.h
new file mode 100644
index 0000000..abae90c
--- /dev/null
+++ b/include/TA/huawei_ext/crypto_rsa_wrapper.h
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: soft rsa engine
+ */
+#ifndef __CRYPTO_RSA_WRAPPER_H__
+#define __CRYPTO_RSA_WRAPPER_H__
+
+#include <stdint.h>
+#include <tee_defines.h>
+
+#define RSA_PUB_LEN 1024
+#define RSA_PRIV_LEN 512
+
+typedef struct {
+ uint8_t e[RSA_PUB_LEN];
+ uint32_t e_len;
+ uint8_t n[RSA_PUB_LEN];
+ uint32_t n_len;
+} rsa_pub_key_t;
+
+typedef struct {
+ uint8_t e[RSA_PUB_LEN];
+ uint32_t e_len;
+ uint8_t n[RSA_PUB_LEN];
+ uint32_t n_len;
+ uint8_t d[RSA_PUB_LEN];
+ uint32_t d_len;
+ uint8_t p[RSA_PRIV_LEN];
+ uint32_t p_len;
+ uint8_t q[RSA_PRIV_LEN];
+ uint32_t q_len;
+ uint8_t dp[RSA_PRIV_LEN];
+ uint32_t dp_len;
+ uint8_t dq[RSA_PRIV_LEN];
+ uint32_t dq_len;
+ uint8_t qinv[RSA_PRIV_LEN];
+ uint32_t qinv_len;
+} rsa_priv_key_t;
+
+/*
+ * Generate rsa key pair.
+ * @param priv [OUT] The rsa private key structure
+ * @param pub [OUT] The rsa public key structure
+ * @param e [IN] The exponent of rsa key
+ * @param key_size [IN] The size of rsa key
+ *
+ * @return 0: Generate rsa keypair success
+ * @return -1: Generate rsa keypair failed
+ */
+int32_t rsa_generate_keypair(rsa_priv_key_t *priv, rsa_pub_key_t *pub, uint32_t e, uint32_t key_size);
+
+/*
+ * Do rsa encryption.
+ *
+ * @param dest_data [OUT] The dest data buffer
+ * @param dest_len [IN/OUT] The length of dest data
+ * @param src_data [IN] The src data buffer
+ * @param src_len [IN] The length of src data
+ * @param pub [IN] The rsa public key structure
+ * @param padding [IN] The padding type of encryption
+ * @param hash_nid [IN] The hash_nid of encryption
+ *
+ * @return 0: Do rsa encryption success
+ * @return -1: Do rsa encryption failed
+ */
+int32_t rsa_encrypt(uint8_t *dest_data, uint32_t *dest_len, uint8_t *src_data, uint32_t src_len, rsa_pub_key_t *pub,
+ int32_t padding, int32_t hash_nid);
+
+/*
+ * Do rsa decryption.
+ *
+ * @param dest_data [OUT] The dest data buffer
+ * @param dest_len [IN/OUT] The length of dest data
+ * @param src_data [IN] The src data buffer
+ * @param src_len [IN] The length of src data
+ * @param priv [IN] THE rsa private key structure
+ * @param padding [IN] The padding type of encryption
+ * @param hash_nid [IN] The hash_nid of encryption
+ *
+ * @return 0: Do rsa decryption success
+ * @return -1: Do rsa decryption failed
+ */
+int32_t rsa_decrypt(uint8_t *dest_data, uint32_t *dest_len, uint8_t *src_data, uint32_t src_len, rsa_priv_key_t *priv,
+ uint32_t padding, int32_t hash_nid);
+
+/*
+ * Do rsa Sign digest.
+ *
+ * @param signature [OUT] The signature of input data
+ * @param sig_size [IN/OUT] The length of signature
+ * @param in [IN] The input data
+ * @param in_len [IN] The length of input data
+ * @param priv [IN] The rsa private key structure
+ * @param salt_len [IN] The length of salt
+ * @param hash_nid [IN] The hash_nid of encryption
+ * @param padding [IN] The padding type of encryption
+ *
+ * @return 0: Do rsa sign digest success
+ * @return -1: Do rsa Sign digest failed
+ */
+int32_t rsa_sign_digest(uint8_t *signature, uint32_t *sig_size, uint8_t *in, uint32_t in_len, rsa_priv_key_t *priv,
+ uint32_t salt_len, int32_t hash_nid, int32_t padding);
+
+/*
+ * Do rsa Verify digest.
+ *
+ * @param signature [IN] The signature of input data
+ * @param sig_size [IN] The length of signature
+ * @param in [IN] The input data
+ * @param in_len [IN] The length of input data
+ * @param pub [IN] The rsa public key structure
+ * @param salt_len [IN] The length of salt
+ * @param hash_nid [IN] The hash_nid of encryption
+ * @param padding [IN] The padding type of encryption
+ *
+ * @return 0: Do rsa verify success
+ * @return -1: Do rsa verify failed
+ */
+int32_t rsa_verify_digest(uint8_t *signature, uint32_t sig_size, uint8_t *in, uint32_t in_len, const rsa_pub_key_t *pub,
+ uint32_t salt_len, int32_t hash_nid, int32_t padding);
+
+/*
+ * Convert the rsa private key passed in by the user into the rsa_priv_key_t structure.
+ *
+ * @param priv [OUT] The rsa private key structure
+ * @param in [IN] The rsa private key buffer
+ * @param inlen [IN] The length of rsa private key buffer
+ *
+ * @return -1: Import rsa private key failed
+ * @return 0: Import rsa private key success
+ */
+int32_t rsa_import_priv(rsa_priv_key_t *priv, const uint8_t *in, uint32_t in_len);
+
+/*
+ * Convert the rsa_pub_key_t structure passed in by the user into rsa public key buffer.
+ *
+ * @param out [OUT] The rsa public key buffer
+ * @param outlen [IN] The length of rsa public key buffer
+ * @param pub [IN] The rsa public key structure
+ *
+ * @return -1: Export rsa public key failed
+ * @return others: The real size of out buffer
+ */
+int32_t rsa_export_pub_sp(uint8_t *out, uint32_t out_size, rsa_pub_key_t *pub);
+
+#endif
diff --git a/include/TA/huawei_ext/crypto_wrapper.h b/include/TA/huawei_ext/crypto_wrapper.h
index e05e90b..aba36c2 100755
--- a/include/TA/huawei_ext/crypto_wrapper.h
+++ b/include/TA/huawei_ext/crypto_wrapper.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,63 +8,65 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: soft engine in boringssl
*/
#ifndef __CRYPTO_WRAPPER_H__
#define __CRYPTO_WRAPPER_H__
-#include <type.h>
+#include <stdint.h>
#include <tee_defines.h>
-#include <sre_chinadrm.h>
-
-#define SHA256_LEN 32
-#define OEM_KEY_LEN 16
-
+#include "crypto_cert_wrapper.h"
+#include "crypto_device_key_wrapper.h"
+#include "crypto_ec_wrapper.h"
+#include "crypto_ec_x509_wrapper.h"
+#include "crypto_rsa_wrapper.h"
+#include "crypto_x509_wrapper.h"
+#include "crypto_inner_wrapper.h"
+
+#define SHA256_LEN 32
+#define OEM_KEY_LEN 16
#define ECC_P256_PRIV_LEN 64
#define ECC_P256_PUB_LEN 32
-#define RSA_PUB_LEN 1024
-#define RSA_PRIV_LEN 512
#define ATTEST_TBS_MAXSIZE 512
#define ATTESTATION_KEY_USAGE_OFFSET 16
#define EC_FIX_BUFFER_LEN 66
#define SHA256_HASH_LEN 32
-#define ECC_PRIV_LEN 66
-#define ECC_PUB_LEN 66
/* macro in tomcrypto start */
/* ECC domain id */
-#define NIST_P192 0
-#define NIST_P224 1
-#define NIST_P256 2
-#define NIST_P384 3
-#define NIST_P521 4
-
-#define SHA1_HASH 1
-#define SHA224_HASH 2
-#define SHA256_HASH 3
-#define SHA384_HASH 4
-#define SHA512_HASH 5
+#define NIST_P192 0
+#define NIST_P224 1
+#define NIST_P256 2
+#define NIST_P384 3
+#define NIST_P521 4
+
+#define SHA1_HASH 1
+#define SHA224_HASH 2
+#define SHA256_HASH 3
+#define SHA384_HASH 4
+#define SHA512_HASH 5
/* Algorithm id */
-#define RSA_ALG 0
-#define ECC_ALG 1
+#define RSA_ALG 0
+#define ECC_ALG 1
/* macro in tomcrypto end */
-#define DIR_ENC 0
-#define DIR_DEC 1
-
-#define CRYPTO_NUMBER_TWO 2
-#define CRYPTO_NUMBER_THREE 3
-#define CRYPTO_NUMBER_FOUR 4
-#define CRYPTO_NUMBER_FIVE 5
-#define CRYPTO_NUMBER_SIX 6
-#define CRYPTO_NUMBER_SEVEN 7
-#define CRYPTO_NUMBER_EIGHT 8
-#define VALIDITY_TIME_SIZE 13
-#define SECRET_KEY_MAX_LEN 64
-#define CER_PUBLIC_KEY_MAX_LEN 300
-#define VALIDITY_FIX_LEN 32
-#define KEY_USAGE_FIX_LEN 41
-#define ITEM_THREE_ADD_LEN 12
-#define ITEM_THREE_MOVE_LEN 27
-#define ITEM_TWO_ADD_LEN 23
+#define DIR_ENC 0
+#define DIR_DEC 1
+
+#define CRYPTO_NUMBER_TWO 2
+#define CRYPTO_NUMBER_THREE 3
+#define CRYPTO_NUMBER_FOUR 4
+#define CRYPTO_NUMBER_FIVE 5
+#define CRYPTO_NUMBER_SIX 6
+#define CRYPTO_NUMBER_SEVEN 7
+#define CRYPTO_NUMBER_EIGHT 8
+#define VALIDITY_TIME_SIZE 13
+#define SECRET_KEY_MAX_LEN 64
+#define CER_PUBLIC_KEY_MAX_LEN 300
+#define VALIDITY_FIX_LEN 32
+#define KEY_USAGE_FIX_LEN 41
+#define ITEM_THREE_ADD_LEN 12
+#define ITEM_THREE_MOVE_LEN 27
+#define ITEM_TWO_ADD_LEN 23
/* table struct for match convert */
typedef struct {
@@ -72,52 +74,6 @@ typedef struct {
uint32_t dest;
} crypto_u2u;
-#define VALIDITY_TIME_SIZE 13
-typedef struct {
- uint8_t start[VALIDITY_TIME_SIZE];
- uint8_t end[VALIDITY_TIME_SIZE];
-} validity_period_t;
-
-typedef struct {
- uint32_t domain;
- uint8_t x[ECC_PUB_LEN];
- uint32_t x_len;
- uint8_t y[ECC_PUB_LEN];
- uint32_t y_len;
-} ecc_pub_key_t;
-
-typedef struct {
- uint32_t domain;
- uint8_t r[ECC_PRIV_LEN];
- uint32_t r_len;
-} ecc_priv_key_t;
-
-typedef struct {
- uint8_t e[RSA_PUB_LEN];
- uint32_t e_len;
- uint8_t n[RSA_PUB_LEN];
- uint32_t n_len;
-} rsa_pub_key_t;
-
-typedef struct {
- uint8_t e[RSA_PUB_LEN];
- uint32_t e_len;
- uint8_t n[RSA_PUB_LEN];
- uint32_t n_len;
- uint8_t d[RSA_PUB_LEN];
- uint32_t d_len;
- uint8_t p[RSA_PRIV_LEN];
- uint32_t p_len;
- uint8_t q[RSA_PRIV_LEN];
- uint32_t q_len;
- uint8_t dp[RSA_PRIV_LEN];
- uint32_t dp_len;
- uint8_t dq[RSA_PRIV_LEN];
- uint32_t dq_len;
- uint8_t qinv[RSA_PRIV_LEN];
- uint32_t qinv_len;
-} rsa_priv_key_t;
-
typedef struct {
unsigned char *ou;
unsigned char *o;
@@ -125,455 +81,4 @@ typedef struct {
unsigned char *cn;
} dn_name_t;
-struct ec_pub_info {
- uint8_t *x;
- uint32_t x_len;
- uint8_t *y;
- uint32_t y_len;
-};
-
-struct ec_priv_info {
- uint32_t nid;
- uint8_t *r;
- uint32_t r_len;
-};
-
-/*
- * Convert the ecc public key passed in by the user into the ecc_pub_key_t structure.
- *
- * @param pub [OUT] The ecc public key structure
- * @param in [IN] The ecc public key buffer
- * @param inlen [IN] The length of ecc public key buffer
- *
- * @return 1: Import ecc public key success
- * @return -1: Import ecc public key failed
- */
-int32_t ecc_import_pub(ecc_pub_key_t *pub, const uint8_t *in, uint32_t inlen);
-
-/*
- * Convert the ecc_pub_key_t structure passed in by the user into ecc public key buffer.
- *
- * @param out [OUT] The ecc public key buffer
- * @param outlen [IN/OUT] The length of ecc public key buffer
- * @param pub [IN] The ecc public key structure
- *
- * @return -1: Export ecc public key failed
- * @return others: The real size of out buffer
- */
-int32_t ecc_export_pub(uint8_t *out, uint32_t out_size, ecc_pub_key_t *pub);
-
-/*
- * Read next TLV (Type-Length-Value) from ASN1 buffer.
- *
- * @param type [OUT] Type of TLV
- * @param header_len [OUT] Length of TLV
- * @param buf [IN] Input TLV
- * @param buf_len [IN] Length of buf in bytes
- *
- * @return -1: Get next TLV failed
- * @return others: Length of next TLV
- */
-int32_t get_next_tlv(uint32_t *type, uint32_t *header_len, const uint8_t *buf, uint32_t buf_len);
-
-/*
- * Convert the ecc private key passed in by the user into the ecc_priv_key_t structure.
- *
- * @param priv [OUT] The ecc private key structure
- * @param in [IN] The ecc private key buffer
- * @param inlen [IN] The length of ecc private key buffer
- *
- * @return -1: Import ecc private key failed
- * @return others: The width of ecc private key
- */
-int32_t ecc_import_priv(ecc_priv_key_t *priv, const uint8_t *in, uint32_t inlen);
-
-/*
- * Use ECC algorithm to sign user data.
- *
- * @param signature [OUT] The signature of input data
- * @param sig_siz [IN/OUT] The length of signature
- * @param in [IN] The data to be sign
- * @param in_len [IN] The length of input data
- * @param priv [IN] The ecc private key structure
- *
- * @return -1: Sign input buffer use ecc failed
- * @return others: The length of signature
- */
-int32_t ecc_sign_digest(uint8_t *signature, uint32_t sig_size, uint8_t *in, uint32_t in_len, ecc_priv_key_t *priv);
-
-/*
- * Verify the data with ECC algorithm.
- *
- * @param signature [IN] The signature of input data
- * @param sig_len [IN] The length of signature
- * @param in [IN] The input data
- * @param in_len [IN] The length of input data
- * @param pub [IN] The ecc public key structure
- *
- * @return 1: Verify digest success
- * @return -1: Verify digest failed
- */
-int32_t ecc_verify_digest(const uint8_t *signature, uint32_t sig_len, uint8_t *in, uint32_t in_len, ecc_pub_key_t *pub);
-
-/*
- * Generate rsa key pair.
- * @param priv [OUT] The rsa private key structure
- * @param pub [OUT] The rsa public key structure
- * @param e [IN] The exponent of rsa key
- * @param key_size [IN] The size of rsa key
- *
- * @return 0: Generate rsa keypair success
- * @return -1: Generate rsa keypair failed
- */
-int32_t rsa_generate_keypair(rsa_priv_key_t *priv, rsa_pub_key_t *pub, uint32_t e, uint32_t key_size);
-
-/*
- * Do rsa encryption.
- *
- * @param dest_data [OUT] The dest data buffer
- * @param dest_len [IN/OUT] The length of dest data
- * @param src_data [IN] The src data buffer
- * @param src_len [IN] The length of src data
- * @param pub [IN] The rsa public key structure
- * @param padding [IN] The padding type of encryption
- * @param hash_nid [IN] The hash_nid of encryption
- *
- * @return 0: Do rsa encryption success
- * @return -1: Do rsa encryption failed
- */
-int32_t rsa_encrypt(uint8_t *dest_data, uint32_t *dest_len, uint8_t *src_data, uint32_t src_len, rsa_pub_key_t *pub,
- int32_t padding, int32_t hash_nid);
-
-/*
- * Do rsa decryption.
- *
- * @param dest_data [OUT] The dest data buffer
- * @param dest_len [IN/OUT] The length of dest data
- * @param src_data [IN] The src data buffer
- * @param src_len [IN] The length of src data
- * @param priv [IN] THE rsa private key structure
- * @param padding [IN] The padding type of encryption
- * @param hash_nid [IN] The hash_nid of encryption
- *
- * @return 0: Do rsa decryption success
- * @return -1: Do rsa decryption failed
- */
-int32_t rsa_decrypt(uint8_t *dest_data, uint32_t *dest_len, uint8_t *src_data, uint32_t src_len, rsa_priv_key_t *priv,
- uint32_t padding, int32_t hash_nid);
-
-/*
- * Do rsa Sign digest.
- *
- * @param signature [OUT] The signature of input data
- * @param sig_size [IN/OUT] The length of signature
- * @param in [IN] The input data
- * @param in_len [IN] The length of input data
- * @param priv [IN] The rsa private key structure
- * @param salt_len [IN] The length of salt
- * @param hash_nid [IN] The hash_nid of encryption
- * @param padding [IN] The padding type of encryption
- *
- * @return 0: Do rsa sign digest success
- * @return -1: Do rsa Sign digest failed
- */
-int32_t rsa_sign_digest(uint8_t *signature, uint32_t *sig_size, uint8_t *in, uint32_t in_len, rsa_priv_key_t *priv,
- uint32_t salt_len, int32_t hash_nid, int32_t padding);
-
-/*
- * Do rsa Verify digest.
- *
- * @param signature [IN] The signature of input data
- * @param sig_size [IN] The length of signature
- * @param in [IN] The input data
- * @param in_len [IN] The length of input data
- * @param pub [IN] The rsa public key structure
- * @param salt_len [IN] The length of salt
- * @param hash_nid [IN] The hash_nid of encryption
- * @param padding [IN] The padding type of encryption
- *
- * @return 0: Do rsa verify success
- * @return -1: Do rsa verify failed
- */
-int32_t rsa_verify_digest(uint8_t *signature, uint32_t sig_size, uint8_t *in, uint32_t in_len, const rsa_pub_key_t *pub,
- uint32_t salt_len, int32_t hash_nid, int32_t padding);
-
-/*
- * Convert the rsa private key passed in by the user into the rsa_priv_key_t structure.
- *
- * @param priv [OUT] The rsa private key structure
- * @param in [IN] The rsa private key buffer
- * @param inlen [IN] The length of rsa private key buffer
- *
- * @return -1: Import rsa private key failed
- * @return 0: Import rsa private key success
- */
-int rsa_import_priv(rsa_priv_key_t *priv, const uint8_t *in, uint32_t in_len);
-
-/*
- * Check the certificate revocation list.
- *
- * @param cert [IN] The crl buffer
- * @param cert_len [IN] The length of crl buffer
- * @param parent_key [IN] The public key to verify the crl
- * @param parent_key_len [IN] The length of public key
- *
- * @return 1: Check the crl success
- * @return others: Check the crl failed
- */
-int x509_crl_validate(uint8_t *cert, uint32_t cert_len, uint8_t *parent_key, uint32_t parent_key_len);
-
-/*
- * Check the x509 certificate.
- *
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- * @param parent_key [IN] The public key to verify the crl
- * @param parent_key_len [IN] The length of public key
- *
- * @return 1: Check the cert success
- * @return others: Check the cert failed
- */
-int x509_cert_validate(uint8_t *cert, uint32_t cert_len, uint8_t *parent_key, uint32_t parent_key_len);
-
-/*
- * Get public key from certificate.
- *
- * @param pub [OUT] The public key struct
- * @param in [IN] The certificate buffer
- * @param inlen [IN] The length of certificate buffer
- *
- * @return 0: Get public key success
- * @return -1: Get public key failed
- */
-int import_pub_from_sp(void *pub, const uint8_t *in, uint32_t inlen);
-
-/*
- * Get public key from certificate.
- *
- * @param pub [OUT] The public key buffer
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- *
- * @return -1: Get public key failed
- * @return others: The length of public key buffer
- */
-int get_subject_public_key(uint8_t *pub, const uint8_t *cert, uint32_t cert_len);
-
-/*
- * Get public key from certificate.
- *
- * @param pub [OUT] The public key buffer
- * @param pub_size [IN/OUT] The length of public key buffer
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- *
- * @return -1: Get public key failed
- * @return others: The length of public key buffer
- */
-int get_subject_public_key_new(uint8_t *pub, uint32_t pub_size, const uint8_t *cert, uint32_t cert_len);
-
-/*
- * Get valid date from certificate.
- *
- * @param vd [OUT] The valid data structure
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- *
- * @return 0: Get valid date success
- * @return -1: Get valid data failed
- */
-int get_validity_from_cert(validity_period_t *vd, uint8_t *cert, uint32_t cert_len);
-
-/*
- * Get common name from certificate.
- *
- * @param name [OUT] The common name buffer
- * @param name_size [IN/OUT] The length of common name buffer
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- *
- * @return -1: Get common name failed
- * @return others: Get common name success
- */
-int get_subject_CN(uint8_t *name, uint32_t name_size, const uint8_t *cert, uint32_t cert_len);
-
-/*
- * Get organization name from certificate.
- *
- * @param name [OUT] The organization name buffer
- * @param name_size [IN/OUT] The length of organization name buffer
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- *
- * @return -1: Get organization name failed
- * @return others: Get organization name success
- */
-int get_subject_OU(uint8_t *name, uint32_t name_size, const uint8_t *cert, uint32_t cert_len);
-
-/*
- * Get serial number from certificate.
- *
- * @param serial_number [OUT] The serial number buffer
- * @param serial_number_size [IN/OUT] The length of serial number buffer
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- *
- * @return -1: Get serial number failed
- * @return others: Get serial number success
- */
-int get_serial_number_from_cert(uint8_t *serial_number, uint32_t serial_number_size, uint8_t *cert, uint32_t cert_len);
-
-/*
- * Get issuer from certificate.
- *
- * @param issuer [OUT] The issuer buffer
- * @param issuer_size [IN/OUT] The length of issuer buffer
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- *
- * @return -1: Get serial number failed
- * @return others: Get serial number success
- */
-int get_issuer_from_cert(uint8_t *issuer, uint32_t issuer_size, uint8_t *crl, uint32_t crl_len);
-
-/*
- * Get element number from certificate.
- *
- * @param elem [OUT] The element with elem_id
- * @param elem_id [IN] The index of element
- * @param cert [IN] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- *
- * @return -1: Get element failed
- * @return others: The length of element
- */
-int32_t get_tbs_element(uint8_t **elem, uint32_t elem_id, const uint8_t *cert, uint32_t cert_len);
-
-/*
- * Recover the root certificate.
- *
- * @param cert [OUT] The certificate buffer
- * @param cert_len [IN/OUT] The length of certificate buffer
- * @param priv [IN] The private key structure
- * @param keytype [IN] The keytype of private key
- *
- * @return -1: Recover root certificate failed
- * @return others: Recover root certificate success
- */
-int32_t recover_root_cert(uint8_t *cert, uint32_t cert_len, const void *priv, uint32_t keytype);
-
-/*
- * Convert the rsa_pub_key_t structure passed in by the user into rsa public key buffer.
- *
- * @param out [OUT] The rsa public key buffer
- * @param outlen [IN] The length of rsa public key buffer
- * @param pub [IN] The rsa public key structure
- *
- * @return -1: Export rsa public key failed
- * @return others: The real size of out buffer
- */
-int32_t rsa_export_pub_sp(uint8_t *out, uint32_t out_size, rsa_pub_key_t *pub);
-
-/*
- * Sign the pkcs10 certificate.
- *
- * @param cert [OUT] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- * @param csr [IN] The certificate signing request buffer
- * @param csr_len [IN] The length of certificate signing request buffer
- * @param valid [IN] The valid date buffer
- * @param serial_number [IN] The serial number buffer
- * @param serial_length [IN] The length of serial number buffer
- * @param priv [IN] The private key structure
- * @param keytype [IN] The keytype of private key
- *
- * @return -1: Sign the pkcs10 certificate failed
- * @return others: The real size of certificate
- */
-int32_t sign_pkcs10(uint8_t *cert, uint32_t cert_len,
- const uint8_t *csr, uint32_t csr_len, const validity_period_t *valid,
- const uint8_t *serial_number, uint32_t serial_length, const void *priv, uint32_t keytype);
-
-/*
- * Create attestation certificate with input params.
- *
- * @param cert [OUT] The certificate buffer
- * @param cert_len [IN] The length of certificate buffer
- * @param valid [IN] The valid date buffer
- * @param issuer_tlv [IN] The issuer buffer
- * @param issuer_tlv_len [IN] The length of issuer buffer
- * @param subject_public_key [IN] The subject public key buffer
- * @param subject_public_key_len [IN] The length of subject public key buffer
- * @param attestation_ext [IN] The attestation extrol infor buffer
- * @param attestation_ext_len [IN] The length of attestation extrol infor buffer
- * @param priv_sign [IN] The private key buffer
- * @param key_usage_sign_bit [IN] The usage sign falg
- * @param key_usage_encrypt_bit [IN] The usage encrypt flag
- * @param keytype [IN] The keytype of private key
- * @param hash [IN] The hash func of digest
- *
- * @return -1: Create attestation certificate failed
- * @return others: The real size of certificate
- */
-int32_t create_attestation_cert(uint8_t *cert, uint32_t cert_len, const validity_period_t *valid,
- const uint8_t *issuer_tlv, uint32_t issuer_tlv_len,
- const uint8_t *subject_public_key, uint32_t subject_public_key_len,
- const uint8_t *attestation_ext, uint32_t attestation_ext_len, void *priv_sign,
- uint32_t key_usage_sign_bit, uint32_t key_usage_encrypt_bit, uint32_t key_type,
- uint32_t hash);
-
-/*
- * Get oem huk.
- *
- * @param huk [OUT] The oem huk buffer
- * @param key [IN] The hmac key buffer
- * @param key_size [IN] The length of hmac key buffer
- *
- * @return 0: Get oem huk success
- * @return -1: Get oem huk failed
- */
-int get_class_oem_huk(uint8_t *huk, const uint8_t *key, uint32_t key_size);
-
-/*
- * Derive ecc public key from private key.
- *
- * @param priv_info [IN] The ecc_priv_key_t structure
- * @param pub_info [OUT] The ecc_pub_key_t structure
- *
- * @return 0: Derive ecc public key success
- * @return -1: Derive ecc public key failed
- */
-int ecc_derive_public_key(ecc_priv_key_t *priv_info, ecc_pub_key_t *pub_info);
-
-/*
- * Derive ecc private key from huk.
- *
- * @param priv [OUT] The ecc_priv_key_t structure
- * @param secret [IN] The huk buffer
- * @param sec_len [IN] The length of huk buffer
- *
- * @return 0: Derive ecc private key success
- * @return -1: Derive ecc private key failed
- */
-int derive_ecc_private_key_from_huk(ecc_priv_key_t *priv, const uint8_t *secret, uint32_t sec_len);
-
-/*
- * Do aes key wrap operation.
- * @param params [IN/OUT] The cdrm_params structure contains key/iv/input/output info
- *
- * @return TEE_SUCCESS: Do aes key wrap operation success
- * @return others: Do aes key wrap operation failed
- */
-TEE_Result aes_key_wrap(struct cdrm_params *params);
-
-/*
- * Do aes key unwrap operation.
- *
- * @param params [IN/OUT] The cdrm_params structure contains key/iv/input/output info
- *
- * @return TEE_SUCCESS: Do aes key unwrap operation success
- * @return others: Do aes key unwrap operation failed
- */
-TEE_Result aes_key_unwrap(struct cdrm_params *params);
-
#endif
diff --git a/include/TA/huawei_ext/crypto_x509_wrapper.h b/include/TA/huawei_ext/crypto_x509_wrapper.h
new file mode 100644
index 0000000..830e7dc
--- /dev/null
+++ b/include/TA/huawei_ext/crypto_x509_wrapper.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: soft ec x509 engine
+ */
+#ifndef __CRYPTO_X509_WRAPPER_H__
+#define __CRYPTO_X509_WRAPPER_H__
+
+#include <stdint.h>
+#include <tee_defines.h>
+
+#define VALIDITY_TIME_SIZE 13
+typedef struct {
+ uint8_t start[VALIDITY_TIME_SIZE];
+ uint8_t end[VALIDITY_TIME_SIZE];
+} validity_period_t;
+
+/*
+ * Check the certificate revocation list.
+ *
+ * @param cert [IN] The crl buffer
+ * @param cert_len [IN] The length of crl buffer
+ * @param parent_key [IN] The public key to verify the crl
+ * @param parent_key_len [IN] The length of public key
+ *
+ * @return 1: Check the crl success
+ * @return others: Check the crl failed
+ */
+int32_t x509_crl_validate(uint8_t *cert, uint32_t cert_len, uint8_t *parent_key, uint32_t parent_key_len);
+
+/*
+ * Check the x509 certificate.
+ *
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ * @param parent_key [IN] The public key to verify the crl
+ * @param parent_key_len [IN] The length of public key
+ *
+ * @return 1: Check the cert success
+ * @return others: Check the cert failed
+ */
+int32_t x509_cert_validate(uint8_t *cert, uint32_t cert_len, uint8_t *parent_key, uint32_t parent_key_len);
+
+/*
+ * Get public key from certificate.
+ *
+ * @param pub [OUT] The public key struct
+ * @param in [IN] The certificate buffer
+ * @param inlen [IN] The length of certificate buffer
+ *
+ * @return 0: Get public key success
+ * @return -1: Get public key failed
+ */
+int32_t import_pub_from_sp(void *pub, const uint8_t *in, uint32_t inlen);
+
+/*
+ * Get public key from certificate.
+ *
+ * @param pub [OUT] The public key buffer
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get public key failed
+ * @return others: The length of public key buffer
+ */
+int32_t get_subject_public_key(uint8_t *pub, const uint8_t *cert, uint32_t cert_len);
+
+/*
+ * Get public key from certificate.
+ *
+ * @param pub [OUT] The public key buffer
+ * @param pub_size [IN/OUT] The length of public key buffer
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get public key failed
+ * @return others: The length of public key buffer
+ */
+int32_t get_subject_public_key_new(uint8_t *pub, uint32_t pub_size, const uint8_t *cert, uint32_t cert_len);
+
+/*
+ * Get valid date from certificate.
+ *
+ * @param vd [OUT] The valid date structure
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return 0: Get valid date success
+ * @return -1: Get valid date failed
+ */
+int32_t get_validity_from_cert(validity_period_t *vd, uint8_t *cert, uint32_t cert_len);
+
+/*
+ * Get common name from certificate.
+ *
+ * @param name [OUT] The common name buffer
+ * @param name_size [IN/OUT] The length of common name buffer
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get common name failed
+ * @return others: Get common name success
+ */
+int32_t get_subject_x509_cn(uint8_t *name, uint32_t name_size, const uint8_t *cert, uint32_t cert_len);
+
+/*
+ * Get organization name from certificate.
+ *
+ * @param name [OUT] The organization name buffer
+ * @param name_size [IN/OUT] The length of organization name buffer
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get organization name failed
+ * @return others: Get organization name success
+ */
+int32_t get_subject_x509_ou(uint8_t *name, uint32_t name_size, const uint8_t *cert, uint32_t cert_len);
+
+/*
+ * Get serial number from certificate.
+ *
+ * @param serial_number [OUT] The serial number buffer
+ * @param serial_number_size [IN/OUT] The length of serial number buffer
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get serial number failed
+ * @return others: Get serial number success
+ */
+int32_t get_serial_number_from_cert(uint8_t *serial_number, uint32_t serial_number_size,
+ uint8_t *cert, uint32_t cert_len);
+
+/*
+ * Get issuer from certificate.
+ *
+ * @param issuer [OUT] The issuer buffer
+ * @param issuer_size [IN/OUT] The length of issuer buffer
+ * @param cert [IN] The certificate buffer
+ * @param cert_len [IN] The length of certificate buffer
+ *
+ * @return -1: Get serial number failed
+ * @return others: Get serial number success
+ */
+int32_t get_issuer_from_cert(uint8_t *issuer, uint32_t issuer_size, uint8_t *crl, uint32_t crl_len);
+
+/*
+ * Check cert chain valid.
+ *
+ * @param root_cert [IN] root ca cert presave
+ * @param root_cert_len [IN] The length of root ca cert
+ * @param second_cert [IN] secondary ca cert buffer
+ * @param second_cert_len [IN] The length of secondary ca cert
+ * @param leaf_cert [IN] leaf ca cert
+ * @param leaf_cert_len [IN] The length of leaf ca cert
+ *
+ * @return -1: failed
+ * @return >0: check success
+ */
+int x509_cert_chain_validate(uint8_t *root_cert, uint32_t root_cert_len,
+ uint8_t *second_cert, uint32_t second_cert_len,
+ uint8_t *leaf_cert, uint32_t leaf_cert_len);
+#endif
diff --git a/include/TA/huawei_ext/permsrv_api_cert.h b/include/TA/huawei_ext/permsrv_api_cert.h
new file mode 100644
index 0000000..8be86b1
--- /dev/null
+++ b/include/TA/huawei_ext/permsrv_api_cert.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: permsrv cert api interface head file
+ */
+
+#ifndef PEMRSRV_API_CERT_H
+#define PEMRSRV_API_CERT_H
+
+#include "tee_defines.h"
+
+TEE_Result ta_signing_cert_import(const char *cert_buf, uint32_t cert_size, const char *pub_key_buf, uint32_t pub_size);
+TEE_Result ta_signing_cert_export(uint8_t *dst, uint32_t *len, uint32_t limit);
+TEE_Result ta_signing_cert_destroy(void);
+#endif
diff --git a/include/TA/huawei_ext/permsrv_api_legacy.h b/include/TA/huawei_ext/permsrv_api_legacy.h
new file mode 100644
index 0000000..e76f5b5
--- /dev/null
+++ b/include/TA/huawei_ext/permsrv_api_legacy.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Functions in this header file are deprecated. Do not use
+ */
+
+#ifndef PERMSRV_API_LEGACY_H
+#define PERMSRV_API_LEGACY_H
+
+#include "tee_defines.h"
+
+TEE_Result TEE_EXT_crl_cert_process(const char *crl_cert, uint32_t crl_cert_size);
+TEE_Result TEE_EXT_ta_ctrl_list_process(const char *ctrl_list, uint32_t ctrl_list_size);
+#endif
diff --git a/include/TA/huawei_ext/qsi_data_structure.h b/include/TA/huawei_ext/qsi_data_structure.h
new file mode 100644
index 0000000..2ffedf2
--- /dev/null
+++ b/include/TA/huawei_ext/qsi_data_structure.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Data Structure Definations of QSI.
+ */
+#ifndef QSI_DATA_STRUCTURE_H
+#define QSI_DATA_STRUCTURE_H
+#include <tee_defines.h>
+
+enum seal_operation {
+ SEAL,
+ UNSEAL
+};
+
+struct ra_buffer_data {
+ uint32_t length;
+ uint8_t *buffer;
+};
+
+#endif
diff --git a/include/TA/huawei_ext/tee_crypto_err.h b/include/TA/huawei_ext/tee_crypto_err.h
new file mode 100644
index 0000000..6d019b7
--- /dev/null
+++ b/include/TA/huawei_ext/tee_crypto_err.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: tee crypto err definitions
+ */
+
+#ifndef TEE_CRYPTO_ERR_H
+#define TEE_CRYPTO_ERR_H
+
+#include <tee_openssl_err.h>
+
+#define MAX_COMMON_CRYPTO_ENGINE_ERR 99
+/*
+ * notes: all extension tee error rule is TEE_EXT_ERROR_BASE | CRYPTO_MODULE_ERR_ID | ALG_ERR_ID | base_error_value,
+ * For example, the crypto module extension error codes are prefixed with 0x8002,
+ * and base_error_value is opensoure lib err.
+ */
+enum soft_algthorm_err_id {
+ SM2_LIB_ERR_ID = 0x0000, /* GMSSL common err and ec err */
+ SM4_LIB_ERR_ID = 0x1000, /* GMSSL evp err */
+ /* as below: for openssl opensource lib */
+ COMM_LIB_ERR_ID = 0x2000,
+ BN_LIB_ERR_ID = 0x3000,
+ RSA_LIB_ERR_ID = 0x4000,
+ EVP_LIB_ERR_ID = 0x5000,
+ PEM_LIB_ERR_ID = 0x6000,
+ X509_LIB_ERR_ID = 0x7000,
+ ASN1_LIB_ERR_ID = 0x8000,
+ CRYPTO_LIB_ERR_ID = 0x9000,
+ EC_LIB_ERR_ID = 0xa000,
+ PKCS7_LIB_ERR_ID = 0xb000,
+ OTHER_LIB_ERR_ID = 0xc000,
+};
+
+#endif
diff --git a/include/TA/huawei_ext/tee_crypto_hal.h b/include/TA/huawei_ext/tee_crypto_hal.h
index 7444618..bfc0be5 100755
--- a/include/TA/huawei_ext/tee_crypto_hal.h
+++ b/include/TA/huawei_ext/tee_crypto_hal.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,17 +8,18 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: crypto hal info function
*/
#ifndef TEE_CRYPTO_HAL_H
#define TEE_CRYPTO_HAL_H
#include "tee_crypto_api.h"
enum CRYPTO_ENGINE {
- DX_CRYPTO,
- EPS_CRYPTO,
- SOFT_CRYPTO,
- SEC_CRYPTO,
- CRYPTO_ENGINE_MAX,
+ DX_CRYPTO = 0,
+ EPS_CRYPTO = 1,
+ SOFT_CRYPTO = 2,
+ SEC_CRYPTO = 3,
+ CRYPTO_ENGINE_MAX = 1024,
};
/*
@@ -42,4 +43,5 @@ TEE_Result TEE_SetCryptoFlag(TEE_OperationHandle operation, uint32_t crypto);
* @retval TEE_ERROR_BAD_PARAMETERS: Operation is NULLi or crypto is invalid
*/
TEE_Result TEE_SetObjectFlag(TEE_ObjectHandle object, uint32_t crypto);
+
#endif
diff --git a/include/TA/huawei_ext/tee_err.h b/include/TA/huawei_ext/tee_err.h
new file mode 100644
index 0000000..4b2b17c
--- /dev/null
+++ b/include/TA/huawei_ext/tee_err.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Reference of TEE error definitions
+ */
+
+#ifndef TEE_ERROR_H
+#define TEE_ERROR_H
+
+#include <tee_crypto_err.h>
+
+/*
+ * notes: all extension tee error rule is TEE_EXT_ERROR_BASE | xx_MODULE_ERR_ID | base_error_value,
+ * For example, the crypto module extension error codes are prefixed with 0x8002.
+ */
+#define TEE_EXT_ERROR_BASE 0x80000000
+
+enum ext_error_module {
+ OTRP_MODULE_ERR_ID = 0x000000,
+ SSA_MODULE_ERR_ID = 0x010000,
+ CRYPTO_MODULE_ERR_ID = 0x020000,
+};
+
+#endif
diff --git a/include/TA/huawei_ext/tee_ext_api.h b/include/TA/huawei_ext/tee_ext_api.h
index d74c749..309abe3 100644
--- a/include/TA/huawei_ext/tee_ext_api.h
+++ b/include/TA/huawei_ext/tee_ext_api.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2019. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,13 +8,14 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: Tee ext api header file
*/
#ifndef TEE_EXT_API_H
#define TEE_EXT_API_H
#include "tee_defines.h"
-#include "tee_core_api.h"
+#include "tee_hw_ext_api_legacy.h"
#ifdef __cplusplus
#if __cplusplus
@@ -35,14 +36,18 @@ extern "C" {
#define TEE_GET_REEINFO_SUCCESS 0
#define TEE_GET_REEINFO_FAILED 1
+#define TEE_SMC_FROM_USR 0
+#define TEE_SMC_FROM_KERNEL 1
+
#define RESERVED_BUF_SIZE 32
-typedef struct __caller_info {
+typedef struct ta_caller_info {
uint32_t session_type;
union {
TEE_UUID caller_uuid;
uint8_t ca_info[RESERVED_BUF_SIZE];
} caller_identity;
- uint8_t reserved[RESERVED_BUF_SIZE];
+ uint8_t smc_from_kernel_mode;
+ uint8_t reserved[RESERVED_BUF_SIZE - 1];
} caller_info;
/*
@@ -54,7 +59,7 @@ typedef struct __caller_info {
* return TEE_SUCCESS operation success
* return others failed to get caller info
*/
-TEE_Result TEE_EXT_GetCallerInfo(caller_info *caller_info_data, uint32_t length);
+TEE_Result tee_ext_get_caller_info(caller_info *caller_info_data, uint32_t length);
/*
* verify TA's caller's identify
@@ -70,6 +75,32 @@ TEE_Result TEE_EXT_GetCallerInfo(caller_info *caller_info_data, uint32_t length)
*/
TEE_Result addcaller_ca_exec(const char *ca_name, const char *user_name);
+/*
+ * verify TA's caller's identify
+ * TA can call this API to add caller's info,
+ * which is allowed to call this TA.
+ * this API is for CA in form of JAR or binary-excuteble file.
+ *
+ * @param ca_name [IN] CA caller's process name
+ * @param user_name [IN] CA caller's username
+ *
+ * return TEE_SUCCESS operation
+ * return others failed to add caller info for target CA
+ */
+
+TEE_Result AddCaller_CA_user(const char *ca_name, const char *user_name);
+
+/*
+ * TA can call this API to add caller's info,
+ * which is allowed to call this CA.
+ * this API is for CA in form of native ca and APK.
+ *
+ * @param cainfo_hash [IN] CA callerinfo's sha256 value
+ *
+ * return TEE_SUCCESS operation
+ */
+TEE_Result AddCaller_CA(const uint8_t *cainfo_hash, uint32_t length);
+
/*
* TA call this API allow others TA open session with itself
*
@@ -86,8 +117,32 @@ TEE_Result AddCaller_TA_all(void);
*
* @return session type of current session
*/
-uint32_t TEE_GetSessionType(void);
+uint32_t tee_get_session_type(void);
+/*
+ * Check CA params during CA Authentication
+ *
+ * @param param_types [IN] CA caller's param types
+ * @param params[TEE_PARAMS_NUM] [IN] CA caller's params
+ *
+ * return TEE_SUCCESS
+ */
+TEE_Result TEE_EXT_CheckClientPerm(uint32_t param_types, const TEE_Param params[TEE_PARAMS_NUM]);
+
+/*
+ * derive key from platform key
+ *
+ * @param object [IN/OUT] input data in ObjectInfo->keytype, output keys in Attributes.
+ * @param keySize [IN] key size in bits, it desides the ecc curve type too.
+ * @param params [IN] unused
+ * @param paramCount [IN] unused
+ * @param exinfo [IN] user info as derive slat.
+ * @param exinfo_size [IN] size of user info, Max is 64bytes, must bigger than 0.
+ *
+ * @return TEE_SUCCESS means success, others means failed.
+ */
+TEE_Result tee_ext_derive_ta_platfrom_keys(TEE_ObjectHandle object, uint32_t key_size, const TEE_Attribute *params,
+ uint32_t param_count, const uint8_t *exinfo, uint32_t exinfo_size);
#ifdef __cplusplus
#if __cplusplus
}
diff --git a/include/TA/huawei_ext/tee_hw_ext_api_legacy.h b/include/TA/huawei_ext/tee_hw_ext_api_legacy.h
new file mode 100644
index 0000000..34e480a
--- /dev/null
+++ b/include/TA/huawei_ext/tee_hw_ext_api_legacy.h
@@ -0,0 +1,293 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Functions in this header file are deprecated. Do not use
+ */
+
+#ifndef __TEE_HW_EXT_API_LEGACY_H__
+#define __TEE_HW_EXT_API_LEGACY_H__
+
+#include "tee_defines.h"
+#include "tee_crypto_api.h"
+
+/*
+ * ta version anti rollback api
+ *
+ * @param ta_version [IN] version to be checked
+ *
+ * @return TEE_SUCCESS check result is OK
+ * @return others check ta version failed
+ */
+TEE_Result TEE_EXT_TA_version_check(uint32_t ta_version);
+
+/*
+ * check wheather target TA(uuid) has permission to invoke target command
+ * this feature is only supported by TA with certificate
+ *
+ * @param [IN] uuid of caller TA
+ * @param [IN] cmd id of request
+ *
+ * @return TEE_SUCCESS target TA has the permission to invoke target command
+ * @return TEE_ERROR_ACCESS_DENIED target TA don't has permission to invoke target command
+ */
+TEE_Result TEE_EXT_CheckInvokePermission(const TEE_UUID *uuid, uint32_t cmd);
+
+/*
+ * get sharemem of verify boot information
+ *
+ * @param buffer [OUT] the address to save verify boot info
+ * @param size [IN] length of buffer
+ *
+ * @return 0 means success, others means failed
+ */
+TEE_Result TEE_EXT_GetVerifyBootInfo(char *buffer, uint32_t size);
+
+/*
+ * derive key from device rootkey and UUID of the current task
+ *
+ * @param salt [IN] data for salt
+ * @param size [IN] salt length
+ * @param key [OUT] pointer where key is saved
+ * @param key_size [IN] key_size must be integer times of 16
+ *
+ * @return TEE_SUCCESS OK
+ * @return TEE_ERROR_BAD_PARAMETERS illegal parameters
+ * @return TEE_ERROR_GENERIC internal error
+ */
+TEE_Result TEE_EXT_DeriveTARootKey(const uint8_t *salt, uint32_t size, uint8_t *key, uint32_t key_size);
+
+/*
+ * get rot key for multiple platforms
+ *
+ * @param enc_key [IN] encrypted rot key or NULL
+ * @param en_key_size [IN] encrypted rot key buff len or zero
+ * @param key [OUT]rot key buff pointer
+ * @param key_size [IN/OUT] rot key buffer length
+ *
+ * @return 0 get rot key success
+ * @return -1 get rot key failed
+ */
+int32_t TEE_EXT_GetRoT(const uint8_t *enc_key, uint32_t en_key_size, uint8_t *key, uint32_t *key_size);
+
+/*
+ * get device unique id in TEE
+ *
+ * @param device_unique_id [OUT] buffer to store the result
+ * @param length [IN/OUT] buffer length of device ID
+ *
+ * return TEE_SUCCESS operation success
+ * return others operation failed
+ */
+TEE_Result TEE_EXT_GetDeviceUniqueId(uint8_t *device_unique_id, uint32_t *length);
+
+TEE_Result TEE_EXT_GetSeCapability(const TEE_UUID *uuid, uint64_t *result);
+
+/*
+ * @ingroup TEE_EXT_API
+ * @brief get shared memory infomation of SecFlash
+ *
+ * @param buffer [OUT] the address to save SecFlash shared memory info
+ * @param length [IN] length of buffer
+ *
+ * @retval NA
+ */
+TEE_Result TEE_EXT_GetSecFlashShareMem(char *buffer, uint32_t size);
+
+/*
+ * @ingroup share memory
+ * @brief get sharemem of verify boot information
+ *
+ * @par
+ * @param buffer [OUT] the address to save verify boot info
+ * @param size [IN] length of buffer
+ *
+ * @retval NA
+ *
+ * @par dependence:
+ * @li tee_ext_api.h
+ * @see
+ * @since V100R008C00
+ */
+TEE_Result TEE_EXT_GetTrustBootImgInfo(char *buffer, uint32_t size);
+
+/*
+ * @ingroup derive key for keymaster
+ * @brief using root key to derive key for keymaster
+ *
+ * @par
+ * @param buffer [IN] input secret
+ * @param size [IN] input secret size
+ * @param buffer [OUT] derived key
+ * @param size [OUT] derived key size
+ *
+ * @retval NA
+ *
+ * @par dependence:
+ * @li tee_ext_api.h
+ * @see
+ * @since V100R007C00
+ */
+TEE_Result TEE_EXT_ROOT_DeriveKey2(const uint8_t *secret, uint32_t secret_len, uint8_t *key, uint32_t key_len);
+
+/*
+ * @ingroup ROOT_UuidDeriveKey
+ * @brief derive key from device rootkey and UUID of the current task
+ *
+ * @attention
+ * @param salt [IN] data for salt
+ * @param size [IN] salt length
+ * @param key_size [OUT] size of generated key, fix-size 32 bytes
+ * @param key [OUT] pointer where key is saved
+ *
+ * @retval #TEE_SUCCESS OK
+ * @retval #TEE_ERROR_BAD_PARAMETERS illegal parameters
+ * @retval #TEE_ERROR_GENERIC internal error
+ *
+ * @par dependence:
+ * @li tee_ext_api.h
+ * @see
+ * @since V100R007C00
+ */
+TEE_Result TEE_EXT_ROOT_UuidDeriveKey(const uint8_t *salt, uint32_t size, uint8_t *key, uint32_t *key_size);
+
+/*
+ * @ingroup crypto
+ * @brief AES encryption and decryption integration mode.
+ *
+ * @attention: Now this api only support algorithm: AES_CBC_NOPAD/ AES_ECB_PKCS5,
+ * and input key can derive by root key.
+ * @param db [IN] Whether to derive the key with the input key and root key.
+ * @param iv [IN] input iv
+ * @param mode [IN] 0:encrypt; 1:decrypt
+ * @param alg [IN] AES algorithm: TEE_CRYPTO_ALGORITHM_ID
+ * @param key [IN] input key
+ * @param key_len [IN] input key len
+ * @param cyp_src [IN] input data
+ * @param dst [OUT] ouput data
+ * @param src_len [IN] input data len
+ * @param dst_len [OUT] ouput data len
+ *
+ * @retval #TEE_SUCCESS success
+ * @retval #TEE_ERROR_BAD_PARAMETERS illegal parameters
+ * @retval #TEE_ERROR_OUT_OF_MEMORY alloc memory fail
+ *
+ * @par dependence:
+ * @li crypto
+ * @li tee_ext_api.h
+ * @see TEE_CipherInit | TEE_CipherUpdate | TEE_CipherDoFinal
+ * @since V100R005C00
+ */
+TEE_Result TEE_EXT_AES_CRYPTO(bool db, const uint8_t *iv, bool mode, uint32_t alg, const uint8_t *key, uint32_t key_len,
+ const uint8_t *cyp_src, uint8_t *dst, uint32_t src_len, uint32_t *dst_len);
+
+/*
+ * @ingroup crypto
+ * @brief calculate hash.
+ *
+ * @attention
+ * @param algorithm [IN] hash algorithm: like SHA1, SHA256
+ * @param ptr [IN] input data
+ * @param size [IN] input data length
+ * @param hash_result [OUT] hash result: SHA1 20bytes; SHA256 32bytes
+ *
+ * @retval #TEE_SUCCESS success
+ * @retval #TEE_ERROR_BAD_PARAMETERS illegal parameters
+ * @retval #TEE_ERROR_GENERIC error
+ *
+ * @par dependence:
+ * @li crypto
+ * @li tee_ext_api.h
+ * @since V100R005C00
+ */
+TEE_Result TEE_EXT_HASH(tee_crypto_algorithm_id algorithm, const uint8_t *ptr, uint32_t size, uint8_t *hash_result);
+
+/*
+ * @ingroup TEE_HWI_IPC_MESSAGE
+ * @brief Wait for registered messages from IRQs
+ *
+ * @param hwi [IN] IRQ number to register
+ */
+TEE_Result TEE_EXT_HwiMsgRegister(uint32_t hwi);
+
+/*
+ * @ingroup TEE_HWI_IPC_MESSAGE
+ * @brief Unregister to receive message for HWI number
+ *
+ * @param hwi [IN] IRQ number to unregister for
+ */
+TEE_Result TEE_EXT_HwiMsgDeregister(uint32_t hwi);
+
+/*
+ * @ingroup TEE_HWI_IPC_MESSAGE
+ * @brief Wait for registered messages from IRQs
+ *
+ * @param NULL
+ *
+ * @retval received message id
+ */
+uint32_t TEE_EXT_HwiMsgWait(void);
+
+/*
+ * @ingroup TEE_HW_EXT_API
+ * @brief check wheather device rooted 1:rooted, 0:unrooted
+ *
+ * @param NULL
+ *
+ * @retval true means device is rooted
+ */
+bool TEE_EXT_IsDeviceRooted(void);
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C" {
+#endif /* __cpluscplus */
+#endif /* __cpluscplus */
+
+struct ta_caller_info;
+
+/*
+ * Get caller info of current session, refer caller_info struct for more details
+ *
+ * @param caller_info_data [OUT] caller info to be returned
+ * @param length [IN] sizeof struct caller_info
+ *
+ * return TEE_SUCCESS operation success
+ * return others failed to get caller info
+ */
+TEE_Result TEE_EXT_GetCallerInfo(struct ta_caller_info *caller_info_data, uint32_t length);
+
+/*
+ * get cruurent session type
+ *
+ * @return session type of current session
+ */
+uint32_t TEE_GetSessionType(void);
+
+/*
+ * derive key from platform key
+ *
+ * @param object [IN/OUT] input data in ObjectInfo->keytype, output keys in Attributes.
+ * @param keySize [IN] key size in bits, it desides the ecc curve type too.
+ * @param params [IN] unused
+ * @param paramCount [IN] unused
+ * @param exinfo [IN] user info as derive slat.
+ * @param exinfo_size [IN] size of user info, Max is 64bytes, must bigger than 0.
+ *
+ * @return TEE_SUCCESS means success, others means failed.
+ */
+TEE_Result TEE_EXT_DeriveTAPlatfromKeys(TEE_ObjectHandle object, uint32_t key_size, const TEE_Attribute *params,
+ uint32_t param_count, const uint8_t *exinfo, uint32_t exinfo_size);
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif /* __cpluscplus */
+#endif /* __cpluscplus */
+
+#endif
diff --git a/include/TA/huawei_ext/tee_log.h b/include/TA/huawei_ext/tee_log.h
index dc213da..37317ca 100644
--- a/include/TA/huawei_ext/tee_log.h
+++ b/include/TA/huawei_ext/tee_log.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,21 +8,26 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: Reference of TEE log api and internal definitions
*/
#ifndef __TEE_LOG_H
#define __TEE_LOG_H
#include "tee_defines.h"
+#include "tee_log_legacy.h"
-#define DEBUG_TAG "[debug]"
-#define INFO_TAG "[info]"
-#define WARNING_TAG "[warning]"
-#define ERROR_TAG "[error]"
+#define TA_LOG_LEVEL_ERROR 0
+#define TA_LOG_LEVEL_WARNING 1
+#define TA_LOG_LEVEL_INFO 2
+#define TA_LOG_LEVEL_DEBUG 3
+#define TA_LOG_LEVEL_VERBO 4
-#define LEVEL_DEBUG 2
-#define LEVEL_WARNING 1
-#define LEVEL_ERROR 0
+#define TA_LOG_LEVEL_DEFAULT TA_LOG_LEVEL_INFO
+// TA_LOG_LEVEL can be redefined by TA developers
+#ifndef TA_LOG_LEVEL
+#define TA_LOG_LEVEL TA_LOG_LEVEL_DEFAULT
+#endif
#define TAG_VERB "[verb]"
#define TAG_DEBUG "[debug]"
@@ -30,6 +35,10 @@
#define TAG_WARN "[warn]"
#define TAG_ERROR "[error]"
+#define DEBUG_TAG "[debug]"
+#define INFO_TAG "[info]"
+#define WARNING_TAG "[warning]"
+#define ERROR_TAG "[error]"
typedef enum {
LOG_LEVEL_ERROR = 0,
LOG_LEVEL_WARN = 1,
@@ -46,84 +55,138 @@ void tee_print(LOG_LEVEL log_level, const char *fmt, ...);
void tee_print_driver(LOG_LEVEL log_level, const char *log_tag, const char *fmt, ...);
extern const char *g_debug_prefix;
-#define TEE_LogPrintf(fmt, args...) SLog(fmt, ##args)
-#ifdef LOG_ON
+/* tlogv */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_VERBO)
#ifdef DRIVER_LOG_TAG
#define tlogv(fmt, args...) \
tee_print_driver(LOG_LEVEL_VERBO, DRIVER_LOG_TAG, "%s %d:" fmt "", TAG_VERB, __LINE__, ##args)
-#define tlogd(fmt, args...) \
- tee_print_driver(LOG_LEVEL_DEBUG, DRIVER_LOG_TAG, "%s %d:" fmt "", TAG_DEBUG, __LINE__, ##args)
-#define tlogi(fmt, args...) \
- tee_print_driver(LOG_LEVEL_INFO, DRIVER_LOG_TAG, "%s %d:" fmt "", TAG_INFO, __LINE__, ##args)
-#define tlogw(fmt, args...) \
- tee_print_driver(LOG_LEVEL_WARN, DRIVER_LOG_TAG, "%s %d:" fmt "", TAG_WARN, __LINE__, ##args)
#else
#define tlogv(fmt, args...) tee_print(LOG_LEVEL_VERBO, "%s %d:" fmt "", TAG_VERB, __LINE__, ##args)
-#define tlogd(fmt, args...) tee_print(LOG_LEVEL_DEBUG, "%s %d:" fmt "", TAG_DEBUG, __LINE__, ##args)
-#define tlogi(fmt, args...) tee_print(LOG_LEVEL_INFO, "%s %d:" fmt "", TAG_INFO, __LINE__, ##args)
-#define tlogw(fmt, args...) tee_print(LOG_LEVEL_WARN, "%s %d:" fmt "", TAG_WARN, __LINE__, ##args)
-#endif
+#endif /* DRIVER_LOG_TAG */
#else
#define tlogv(fmt, args...) \
do { \
} while (0)
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_VERBO */
+
+/* tlogd */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_DEBUG)
+#ifdef DRIVER_LOG_TAG
+#define tlogd(fmt, args...) \
+ tee_print_driver(LOG_LEVEL_DEBUG, DRIVER_LOG_TAG, "%s %d:" fmt "", TAG_DEBUG, __LINE__, ##args)
+#else
+#define tlogd(fmt, args...) tee_print(LOG_LEVEL_DEBUG, "%s %d:" fmt "", TAG_DEBUG, __LINE__, ##args)
+#endif /* DRIVER_LOG_TAG */
+#else
#define tlogd(fmt, args...) \
do { \
} while (0)
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_DEBUG */
+
+/* tlogi */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_INFO)
+#ifdef DRIVER_LOG_TAG
+#define tlogi(fmt, args...) \
+ tee_print_driver(LOG_LEVEL_INFO, DRIVER_LOG_TAG, "%s %d:" fmt "", TAG_INFO, __LINE__, ##args)
+#else
+#define tlogi(fmt, args...) tee_print(LOG_LEVEL_INFO, "%s %d:" fmt "", TAG_INFO, __LINE__, ##args)
+#endif /* DRIVER_LOG_TAG */
+#else
#define tlogi(fmt, args...) \
do { \
} while (0)
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_INFO */
+
+/* tlogw */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_WARNING)
+#ifdef DRIVER_LOG_TAG
+#define tlogw(fmt, args...) \
+ tee_print_driver(LOG_LEVEL_WARN, DRIVER_LOG_TAG, "%s %d:" fmt "", TAG_WARN, __LINE__, ##args)
+#else
+#define tlogw(fmt, args...) tee_print(LOG_LEVEL_WARN, "%s %d:" fmt "", TAG_WARN, __LINE__, ##args)
+#endif /* DRIVER_LOG_TAG */
+#else
#define tlogw(fmt, args...) \
do { \
} while (0)
-#endif /* ENG_VERSION */
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_WARNING */
+/* tloge */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_ERROR) // Always meet this condition
#ifndef TLOGE_NO_TIMESTAMP
#ifdef DRIVER_LOG_TAG
#define tloge(fmt, args...) \
tee_print_driver(LOG_LEVEL_ERROR, DRIVER_LOG_TAG, "%s %d:" fmt " ", TAG_ERROR, __LINE__, ##args)
#else
#define tloge(fmt, args...) tee_print(LOG_LEVEL_ERROR, "%s %d:" fmt " ", TAG_ERROR, __LINE__, ##args)
-#endif
+#endif /* DRIVER_LOG_TAG */
#else
#define tloge(fmt, args...) printf("[%s] %s %d:" fmt " ", g_debug_prefix, TAG_ERROR, __LINE__, ##args)
-#endif
+#endif /* TLOGE_NO_TIMESTAMP */
+#else
+#define tloge(fmt, args...) \
+ do { \
+ } while (0)
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_ERROR */
void ta_print(LOG_LEVEL log_level, const char *fmt, ...);
-#ifdef LOG_ON
+/* ta_logv */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_VERBO)
#define ta_logv(fmt, args...) ta_print(LOG_LEVEL_VERBO, "%s %d: " fmt "\n", TAG_VERB, __LINE__, ##args)
-#define ta_logd(fmt, args...) ta_print(LOG_LEVEL_DEBUG, "%s %d: " fmt "\n", TAG_DEBUG, __LINE__, ##args)
-#define ta_logi(fmt, args...) ta_print(LOG_LEVEL_INFO, "%s %d: " fmt "\n", TAG_INFO, __LINE__, ##args)
-#define ta_logw(fmt, args...) ta_print(LOG_LEVEL_WARN, "%s %d: " fmt "\n", TAG_WARN, __LINE__, ##args)
#else
#define ta_logv(fmt, args...) \
do { \
} while (0)
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_VERBO */
+
+/* ta_logd */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_DEBUG)
+#define ta_logd(fmt, args...) ta_print(LOG_LEVEL_DEBUG, "%s %d: " fmt "\n", TAG_DEBUG, __LINE__, ##args)
+#else
#define ta_logd(fmt, args...) \
do { \
} while (0)
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_DEBUG */
+
+/* ta_logi */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_INFO)
+#define ta_logi(fmt, args...) ta_print(LOG_LEVEL_INFO, "%s %d: " fmt "\n", TAG_INFO, __LINE__, ##args)
+#else
#define ta_logi(fmt, args...) \
do { \
} while (0)
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_INFO */
+
+/* ta_logw */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_WARNING)
+#define ta_logw(fmt, args...) ta_print(LOG_LEVEL_WARN, "%s %d: " fmt "\n", TAG_WARN, __LINE__, ##args)
+#else
#define ta_logw(fmt, args...) \
do { \
} while (0)
-#endif
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_WARNING */
+
+/* ta_loge */
+#if (TA_LOG_LEVEL >= TA_LOG_LEVEL_ERROR) // Always meet this condition
#define ta_loge(fmt, args...) ta_print(LOG_LEVEL_ERROR, "%s %d: " fmt "\n", TAG_ERROR, __LINE__, ##args)
+#else
+#define ta_loge(fmt, args...) \
+ do { \
+ } while (0)
+#endif /* TA_LOG_LEVEL >= TA_LOG_LEVEL_ERROR */
-/* in debug version users can dynamically modify the loglevel ,in release version, users have to modify the level by
- * compile */
+/*
+in debug version, users can dynamically modify the loglevel,
+in release version, users have to modify the level by compile
+*/
#ifndef DEBUG_VERSION
-
#ifdef TA_DEBUG
#define ta_debug(fmt, args...) uart_printf_func("%s %s: " fmt "", DEBUG_TAG, __FUNCTION__, ##args)
#else
#define ta_debug(fmt, args...)
-#endif
-
+#endif /* TA_DEBUG */
#else
-
#define ta_debug(fmt, args...) \
do { \
uint32_t level; \
@@ -142,67 +205,61 @@ void ta_print(LOG_LEVEL log_level, const char *fmt, ...);
} \
} while (0)
-#endif
+#endif /* DEBUG_VERSION */
#define ta_info(fmt, args...) uart_printf_func("%s: " fmt "", INFO_TAG, ##args)
#define ta_error(fmt, args...) uart_printf_func("%s: " fmt " ", ERROR_TAG, ##args)
-#define TA_LOG
-#ifdef TA_LOG
+/* Log level for SLogx */
#define TRACE_S "[Trace]"
#define WARNING_S "[Warning]"
#define ERROR_S "[Error]"
-/*
- * Print trace level's log.
- *
- * @param fmt [IN] assert condition.
- * @param args [IN] params for format config.
- *
- * @return void
- */
-#define SLogTrace(fmt, args...) SLog("%s: " fmt "\n", TRACE_S, ##args)
+#define TA_SLOG_LEVEL_ERROR 0
+#define TA_SLOG_LEVEL_WARNING 1
+#define TA_SLOG_LEVEL_TRACE 2
-/*
- * Print warning level's log.
- *
- * @param fmt [IN] assert condition.
- * @param args [IN] params for format config.
- *
- * @return void
- */
-#define SLogWarning(fmt, args...) SLog("%s: " fmt "\n", WARNING_S, ##args)
+#define TA_SLOG_LEVEL_DEFAULT TA_SLOG_LEVEL_WARNING
+// TA_SLOG_LEVEL can be redefined by TA developers
+#ifndef TA_SLOG_LEVEL
+#define TA_SLOG_LEVEL TA_SLOG_LEVEL_DEFAULT
+#endif
-/*
- * Print error level's log.
- *
- * @param fmt [IN] assert condition.
- * @param args [IN] params for format config.
- *
- * @return void
- */
-#define SLogError(fmt, args...) SLog("%s: " fmt "\n", ERROR_S, ##args)
+/* SLogTrace */
+#if (TA_SLOG_LEVEL >= TA_SLOG_LEVEL_TRACE)
+#define SLogTrace(fmt, args...) tee_print(LOG_LEVEL_DEBUG, "%s: " fmt "\n", TRACE_S, ##args)
+#else
+#define SLogTrace(fmt, args...) \
+ do { \
+ } while (0)
+#endif
-/*
- * Assert api for tee log, note: should call Panic to deal, here just return
- *
- * @param exp [IN] Printf log's format config style.
- *
- * @return void
- */
+/* SLogWarning */
+#if (TA_SLOG_LEVEL >= TA_SLOG_LEVEL_WARNING)
+#define SLogWarning(fmt, args...) tee_print(LOG_LEVEL_WARN, "%s: " fmt "\n", WARNING_S, ##args)
+#else
+#define SLogWarning(fmt, args...) \
+ do { \
+ } while (0)
+#endif
+
+/* SLogError */
+#if (TA_SLOG_LEVEL >= TA_SLOG_LEVEL_ERROR)
+#define SLogError(fmt, args...) tee_print(LOG_LEVEL_ERROR, "%s: " fmt "\n", ERROR_S, ##args)
+#else
+#define SLogError(fmt, args...) \
+ do { \
+ } while (0)
+#endif
+
+/* SAssert, Assert api for tee log, note: should call Panic to deal, here just return */
#define SAssert(exp) \
do { \
if (!(exp)) { \
- SLog("Assertion [ %s ] Failed: File %s, Line %d\n", #exp, "__FILE__", __LINE__); \
+ tee_print(LOG_LEVEL_ERROR, "Assertion [%s] Failed: File %s, Line %d\n", #exp, __FILE__, __LINE__); \
return 0xFFFF0001; \
} \
} while (0);
-#else
-#define SLogTrace(fmt, args...) ((void)0)
-#define SLogWarning(fmt, args...) ((void)0)
-#define SLogError(fmt, args...) ((void)0)
-#define SAssert(exp) ((void)0)
-#endif
/*
* Output log to tee log file.
@@ -211,6 +268,7 @@ void ta_print(LOG_LEVEL log_level, const char *fmt, ...);
*
* @return void
*/
-void SLog(const char *fmt, ...);
+void slog(const char *fmt, ...);
uint32_t get_value(void);
-#endif
+#define TEE_LogPrintf(fmt, args...) slog(fmt, ##args)
+#endif /* __TEE_LOG_H */
diff --git a/include/TA/huawei_ext/tee_log_legacy.h b/include/TA/huawei_ext/tee_log_legacy.h
new file mode 100644
index 0000000..ffedcdc
--- /dev/null
+++ b/include/TA/huawei_ext/tee_log_legacy.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Reference of TEE log api and internal definitions
+ */
+
+#ifndef __TEE_LOG_LEGACY_H__
+#define __TEE_LOG_LEGACY_H__
+
+void SLog(const char *fmt, ...);
+#endif /* __TEE_LOG_LEGACY_H__ */
diff --git a/include/TA/huawei_ext/tee_openssl_err.h b/include/TA/huawei_ext/tee_openssl_err.h
new file mode 100644
index 0000000..a9245a3
--- /dev/null
+++ b/include/TA/huawei_ext/tee_openssl_err.h
@@ -0,0 +1,500 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: tee crypto err definitions
+ */
+
+#ifndef TEE_OPENSSL_ERR_H
+#define TEE_OPENSSL_ERR_H
+
+/*
+ * define openssl lib reasons err code:
+ * Delete the prefix TEE_ERR_, which is the error code name in the open-source library.
+ */
+/* for common lib err */
+#define TEE_ERR_R_MALLOC_FAILURE 0x80022041
+#define TEE_ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED 0x80022042
+#define TEE_ERR_R_PASSED_NULL_PARAMETER 0x80022043
+#define TEE_ERR_R_INTERNAL_ERROR 0x80022044
+#define TEE_ERR_R_DISABLED 0x80022045
+#define TEE_ERR_R_INIT_FAIL 0x80022046
+#define TEE_ERR_R_PASSED_INVALID_ARGUMENT 0x80022007
+#define TEE_ERR_R_OPERATION_FAIL 0x80022048
+
+/* for bn lib err */
+#define TEE_ERR_BN_R_ARG2_LT_ARG3 0x80023064
+#define TEE_ERR_BN_R_BAD_RECIPROCAL 0x80023065
+#define TEE_ERR_BN_R_BIGNUM_TOO_LONG 0x80023072
+#define TEE_ERR_BN_R_BITS_TOO_SMALL 0x80023076
+#define TEE_ERR_BN_R_CALLED_WITH_EVEN_MODULUS 0x80023066
+#define TEE_ERR_BN_R_DIV_BY_ZERO 0x80023067
+#define TEE_ERR_BN_R_ENCODING_ERROR 0x80023068
+#define TEE_ERR_BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 0x80023069
+#define TEE_ERR_BN_R_INPUT_NOT_REDUCED 0x8002306e
+#define TEE_ERR_BN_R_INVALID_LENGTH 0x8002306a
+#define TEE_ERR_BN_R_INVALID_RANGE 0x80023073
+#define TEE_ERR_BN_R_INVALID_SHIFT 0x80023077
+#define TEE_ERR_BN_R_NOT_A_SQUARE 0x8002306f
+#define TEE_ERR_BN_R_NOT_INITIALIZED 0x8002306b
+#define TEE_ERR_BN_R_NO_INVERSE 0x8002306c
+#define TEE_ERR_BN_R_NO_SOLUTION 0x80023074
+#define TEE_ERR_BN_R_PRIVATE_KEY_TOO_LARGE 0x80023075
+#define TEE_ERR_BN_R_P_IS_NOT_PRIME 0x80023070
+#define TEE_ERR_BN_R_TOO_MANY_ITERATIONS 0x80023071
+#define TEE_ERR_BN_R_TOO_MANY_TEMPORARY_VARIABLES 0x8002306d
+
+/* for rsa lib err */
+#define TEE_ERR_RSA_R_ALGORITHM_MISMATCH 0x80024064
+#define TEE_ERR_RSA_R_BAD_E_VALUE 0x80024065
+#define TEE_ERR_RSA_R_BAD_FIXED_HEADER_DECRYPT 0x80024066
+#define TEE_ERR_RSA_R_BAD_PAD_BYTE_COUNT 0x80024067
+#define TEE_ERR_RSA_R_BAD_SIGNATURE 0x80024068
+#define TEE_ERR_RSA_R_BLOCK_TYPE_IS_NOT_01 0x8002406a
+#define TEE_ERR_RSA_R_BLOCK_TYPE_IS_NOT_02 0x8002406b
+#define TEE_ERR_RSA_R_DATA_GREATER_THAN_MOD_LEN 0x8002406c
+#define TEE_ERR_RSA_R_DATA_TOO_LARGE 0x8002406d
+#define TEE_ERR_RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 0x8002406e
+#define TEE_ERR_RSA_R_DATA_TOO_LARGE_FOR_MODULUS 0x80024084
+#define TEE_ERR_RSA_R_DATA_TOO_SMALL 0x8002406f
+#define TEE_ERR_RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 0x8002407a
+#define TEE_ERR_RSA_R_DIGEST_DOES_NOT_MATCH 0x8002409e
+#define TEE_ERR_RSA_R_DIGEST_NOT_ALLOWED 0x80024091
+#define TEE_ERR_RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 0x80024070
+#define TEE_ERR_RSA_R_DMP1_NOT_CONGRUENT_TO_D 0x8002407c
+#define TEE_ERR_RSA_R_DMQ1_NOT_CONGRUENT_TO_D 0x8002407d
+#define TEE_ERR_RSA_R_D_E_NOT_CONGRUENT_TO_1 0x8002407b
+#define TEE_ERR_RSA_R_FIRST_OCTET_INVALID 0x80024085
+#define TEE_ERR_RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 0x80024090
+#define TEE_ERR_RSA_R_INVALID_DIGEST 0x8002409d
+#define TEE_ERR_RSA_R_INVALID_DIGEST_LENGTH 0x8002408f
+#define TEE_ERR_RSA_R_INVALID_HEADER 0x80024089
+#define TEE_ERR_RSA_R_INVALID_LABEL 0x800240a0
+#define TEE_ERR_RSA_R_INVALID_MESSAGE_LENGTH 0x80024083
+#define TEE_ERR_RSA_R_INVALID_MGF1_MD 0x8002409c
+#define TEE_ERR_RSA_R_INVALID_MULTI_PRIME_KEY 0x800240a7
+#define TEE_ERR_RSA_R_INVALID_OAEP_PARAMETERS 0x800240a1
+#define TEE_ERR_RSA_R_INVALID_PADDING 0x8002408a
+#define TEE_ERR_RSA_R_INVALID_PADDING_MODE 0x8002408d
+#define TEE_ERR_RSA_R_INVALID_PSS_PARAMETERS 0x80024095
+#define TEE_ERR_RSA_R_INVALID_PSS_SALTLEN 0x80024092
+#define TEE_ERR_RSA_R_INVALID_SALT_LENGTH 0x80024096
+#define TEE_ERR_RSA_R_INVALID_TRAILER 0x8002408b
+#define TEE_ERR_RSA_R_INVALID_X931_DIGEST 0x8002408e
+#define TEE_ERR_RSA_R_IQMP_NOT_INVERSE_OF_Q 0x8002407e
+#define TEE_ERR_RSA_R_KEY_PRIME_NUM_INVALID 0x800240a5
+#define TEE_ERR_RSA_R_KEY_SIZE_TOO_SMALL 0x80024078
+#define TEE_ERR_RSA_R_LAST_OCTET_INVALID 0x80024086
+#define TEE_ERR_RSA_R_MISSING_PRIVATE_KEY 0x800240b3
+#define TEE_ERR_RSA_R_MGF1_DIGEST_NOT_ALLOWED 0x80024098
+#define TEE_ERR_RSA_R_MODULUS_TOO_LARGE 0x80024069
+#define TEE_ERR_RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 0x800240a8
+#define TEE_ERR_RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 0x800240a9
+#define TEE_ERR_RSA_R_MP_R_NOT_PRIME 0x800240aa
+#define TEE_ERR_RSA_R_NO_PUBLIC_EXPONENT 0x8002408c
+#define TEE_ERR_RSA_R_NULL_BEFORE_BLOCK_MISSING 0x80024071
+#define TEE_ERR_RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES 0x800240ac
+#define TEE_ERR_RSA_R_N_DOES_NOT_EQUAL_P_Q 0x8002407f
+#define TEE_ERR_RSA_R_OAEP_DECODING_ERROR 0x80024079
+#define TEE_ERR_RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 0x80024094
+#define TEE_ERR_RSA_R_PADDING_CHECK_FAILED 0x80024072
+#define TEE_ERR_RSA_R_PKCS_DECODING_ERROR 0x8002409f
+#define TEE_ERR_RSA_R_PSS_SALTLEN_TOO_SMALL 0x800240a4
+#define TEE_ERR_RSA_R_P_NOT_PRIME 0x80024080
+#define TEE_ERR_RSA_R_Q_NOT_PRIME 0x80024081
+#define TEE_ERR_RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 0x80024082
+#define TEE_ERR_RSA_R_SLEN_CHECK_FAILED 0x80024088
+#define TEE_ERR_RSA_R_SLEN_RECOVERY_FAILED 0x80024087
+#define TEE_ERR_RSA_R_SSLV3_ROLLBACK_ATTACK 0x80024073
+#define TEE_ERR_RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 0x80024074
+#define TEE_ERR_RSA_R_UNKNOWN_ALGORITHM_TYPE 0x80024075
+#define TEE_ERR_RSA_R_UNKNOWN_DIGEST 0x800240a6
+#define TEE_ERR_RSA_R_UNKNOWN_MASK_DIGEST 0x80024097
+#define TEE_ERR_RSA_R_UNKNOWN_PADDING_TYPE 0x80024076
+#define TEE_ERR_RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 0x800240a2
+#define TEE_ERR_RSA_R_UNSUPPORTED_LABEL_SOURCE 0x800240a3
+#define TEE_ERR_RSA_R_UNSUPPORTED_MASK_ALGORITHM 0x80024099
+#define TEE_ERR_RSA_R_UNSUPPORTED_MASK_PARAMETER 0x8002409a
+#define TEE_ERR_RSA_R_UNSUPPORTED_SIGNATURE_TYPE 0x8002409b
+#define TEE_ERR_RSA_R_VALUE_MISSING 0x80024093
+#define TEE_ERR_RSA_R_WRONG_SIGNATURE_LENGTH 0x80024077
+
+/* for evp lib err */
+#define TEE_ERR_EVP_R_AES_KEY_SETUP_FAILED 0x8002508f
+#define TEE_ERR_EVP_R_ARIA_KEY_SETUP_FAILED 0x800250b0
+#define TEE_ERR_EVP_R_BAD_DECRYPT 0x80025064
+#define TEE_ERR_EVP_R_BAD_KEY_LENGTH 0x800250c3
+#define TEE_ERR_EVP_R_BUFFER_TOO_SMALL 0x8002509b
+#define TEE_ERR_EVP_R_CAMELLIA_KEY_SETUP_FAILED 0x8002509d
+#define TEE_ERR_EVP_R_CIPHER_PARAMETER_ERROR 0x8002507a
+#define TEE_ERR_EVP_R_COMMAND_NOT_SUPPORTED 0x80025093
+#define TEE_ERR_EVP_R_COPY_ERROR 0x800250ad
+#define TEE_ERR_EVP_R_CTRL_NOT_IMPLEMENTED 0x80025084
+#define TEE_ERR_EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 0x80025085
+#define TEE_ERR_EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 0x8002508a
+#define TEE_ERR_EVP_R_DECODE_ERROR 0x80025072
+#define TEE_ERR_EVP_R_DIFFERENT_KEY_TYPES 0x80025065
+#define TEE_ERR_EVP_R_DIFFERENT_PARAMETERS 0x80025099
+#define TEE_ERR_EVP_R_ERROR_LOADING_SECTION 0x800250a5
+#define TEE_ERR_EVP_R_ERROR_SETTING_FIPS_MODE 0x800250a6
+#define TEE_ERR_EVP_R_EXPECTING_AN_HMAC_KEY 0x800250ae
+#define TEE_ERR_EVP_R_EXPECTING_AN_RSA_KEY 0x8002507f
+#define TEE_ERR_EVP_R_EXPECTING_A_DH_KEY 0x80025080
+#define TEE_ERR_EVP_R_EXPECTING_A_DSA_KEY 0x80025081
+#define TEE_ERR_EVP_R_EXPECTING_A_EC_KEY 0x8002508e
+#define TEE_ERR_EVP_R_EXPECTING_A_POLY1305_KEY 0x800250a4
+#define TEE_ERR_EVP_R_EXPECTING_A_SIPHASH_KEY 0x800250af
+#define TEE_ERR_EVP_R_FIPS_MODE_NOT_SUPPORTED 0x800250a7
+#define TEE_ERR_EVP_R_GET_RAW_KEY_FAILED 0x800250b6
+#define TEE_ERR_EVP_R_ILLEGAL_SCRYPT_PARAMETERS 0x800250ab
+#define TEE_ERR_EVP_R_INITIALIZATION_ERROR 0x80025086
+#define TEE_ERR_EVP_R_INPUT_NOT_INITIALIZED 0x8002506f
+#define TEE_ERR_EVP_R_INVALID_DIGEST 0x80025098
+#define TEE_ERR_EVP_R_INVALID_FIPS_MODE 0x800250a8
+#define TEE_ERR_EVP_R_INVALID_IV_LENGTH 0x800250c2
+#define TEE_ERR_EVP_R_INVALID_KEY 0x800250a3
+#define TEE_ERR_EVP_R_INVALID_KEY_LENGTH 0x80025082
+#define TEE_ERR_EVP_R_INVALID_OPERATION 0x80025094
+#define TEE_ERR_EVP_R_KEYGEN_FAILURE 0x80025078
+#define TEE_ERR_EVP_R_KEY_SETUP_FAILED 0x800250b4
+#define TEE_ERR_EVP_R_MEMORY_LIMIT_EXCEEDED 0x800250ac
+#define TEE_ERR_EVP_R_MESSAGE_DIGEST_IS_NULL 0x8002509f
+#define TEE_ERR_EVP_R_METHOD_NOT_SUPPORTED 0x80025090
+#define TEE_ERR_EVP_R_MISSING_PARAMETERS 0x80025067
+#define TEE_ERR_EVP_R_NOT_XOF_OR_INVALID_LENGTH 0x800250b2
+#define TEE_ERR_EVP_R_NO_CIPHER_SET 0x80025083
+#define TEE_ERR_EVP_R_NO_DEFAULT_DIGEST 0x8002509e
+#define TEE_ERR_EVP_R_NO_DIGEST_SET 0x8002508b
+#define TEE_ERR_EVP_R_NO_KEY_SET 0x8002509a
+#define TEE_ERR_EVP_R_NO_OPERATION_SET 0x80025095
+#define TEE_ERR_EVP_R_ONLY_ONESHOT_SUPPORTED 0x800250b1
+#define TEE_ERR_EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 0x80025096
+#define TEE_ERR_EVP_R_OPERATON_NOT_INITIALIZED 0x80025097
+#define TEE_ERR_EVP_R_PARTIALLY_OVERLAPPING 0x800250a2
+#define TEE_ERR_EVP_R_PBKDF2_ERROR 0x800250b5
+#define TEE_ERR_EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 0x800250b3
+#define TEE_ERR_EVP_R_PRIVATE_KEY_DECODE_ERROR 0x80025091
+#define TEE_ERR_EVP_R_PRIVATE_KEY_ENCODE_ERROR 0x80025092
+#define TEE_ERR_EVP_R_PUBLIC_KEY_NOT_RSA 0x8002506a
+#define TEE_ERR_EVP_R_UNKNOWN_CIPHER 0x800250a0
+#define TEE_ERR_EVP_R_UNKNOWN_DIGEST 0x800250a1
+#define TEE_ERR_EVP_R_UNKNOWN_OPTION 0x800250a9
+#define TEE_ERR_EVP_R_UNKNOWN_PBE_ALGORITHM 0x80025079
+#define TEE_ERR_EVP_R_UNSUPPORTED_ALGORITHM 0x8002509c
+#define TEE_ERR_EVP_R_UNSUPPORTED_CIPHER 0x8002506b
+#define TEE_ERR_EVP_R_UNSUPPORTED_KEYLENGTH 0x8002507b
+#define TEE_ERR_EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 0x8002507c
+#define TEE_ERR_EVP_R_UNSUPPORTED_KEY_SIZE 0x8002506c
+#define TEE_ERR_EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 0x80025087
+#define TEE_ERR_EVP_R_UNSUPPORTED_PRF 0x8002507d
+#define TEE_ERR_EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 0x80025076
+#define TEE_ERR_EVP_R_UNSUPPORTED_SALT_TYPE 0x8002507e
+#define TEE_ERR_EVP_R_WRAP_MODE_NOT_ALLOWED 0x800250aa
+#define TEE_ERR_EVP_R_WRONG_FINAL_BLOCK_LENGTH 0x8002506d
+#define TEE_ERR_EVP_R_XTS_DUPLICATED_KEYS 0x800250b7
+
+/* for pem lib err */
+#define TEE_ERR_PEM_R_BAD_BASE64_DECODE 0x80026064
+#define TEE_ERR_PEM_R_BAD_DECRYPT 0x80026065
+#define TEE_ERR_PEM_R_BAD_END_LINE 0x80026066
+#define TEE_ERR_PEM_R_BAD_IV_CHARS 0x80026067
+#define TEE_ERR_PEM_R_BAD_MAGIC_NUMBER 0x80026074
+#define TEE_ERR_PEM_R_BAD_PASSWORD_READ 0x80026068
+#define TEE_ERR_PEM_R_BAD_VERSION_NUMBER 0x80026075
+#define TEE_ERR_PEM_R_BIO_WRITE_FAILURE 0x80026076
+#define TEE_ERR_PEM_R_CIPHER_IS_NULL 0x8002607f
+#define TEE_ERR_PEM_R_ERROR_CONVERTING_PRIVATE_KEY 0x80026073
+#define TEE_ERR_PEM_R_EXPECTING_PRIVATE_KEY_BLOB 0x80026077
+#define TEE_ERR_PEM_R_EXPECTING_PUBLIC_KEY_BLOB 0x80026078
+#define TEE_ERR_PEM_R_HEADER_TOO_LONG 0x80026080
+#define TEE_ERR_PEM_R_INCONSISTENT_HEADER 0x80026079
+#define TEE_ERR_PEM_R_KEYBLOB_HEADER_PARSE_ERROR 0x8002607a
+#define TEE_ERR_PEM_R_KEYBLOB_TOO_SHORT 0x8002607b
+#define TEE_ERR_PEM_R_MISSING_DEK_IV 0x80026081
+#define TEE_ERR_PEM_R_NOT_DEK_INFO 0x80026069
+#define TEE_ERR_PEM_R_NOT_ENCRYPTED 0x8002606a
+#define TEE_ERR_PEM_R_NOT_PROC_TYPE 0x8002606b
+#define TEE_ERR_PEM_R_NO_START_LINE 0x8002606c
+#define TEE_ERR_PEM_R_PROBLEMS_GETTING_PASSWORD 0x8002606d
+#define TEE_ERR_PEM_R_PVK_DATA_TOO_SHORT 0x8002607c
+#define TEE_ERR_PEM_R_PVK_TOO_SHORT 0x8002607d
+#define TEE_ERR_PEM_R_READ_KEY 0x8002606f
+#define TEE_ERR_PEM_R_SHORT_HEADER 0x80026070
+#define TEE_ERR_PEM_R_UNEXPECTED_DEK_IV 0x80026082
+#define TEE_ERR_PEM_R_UNSUPPORTED_CIPHER 0x80026071
+#define TEE_ERR_PEM_R_UNSUPPORTED_ENCRYPTION 0x80026072
+#define TEE_ERR_PEM_R_UNSUPPORTED_KEY_COMPONENTS 0x8002607e
+
+/* for x509 lib err */
+#define TEE_ERR_X509_R_AKID_MISMATCH 0x8002706e
+#define TEE_ERR_X509_R_BAD_SELECTOR 0x80027085
+#define TEE_ERR_X509_R_BAD_X509_FILETYPE 0x80027064
+#define TEE_ERR_X509_R_BASE64_DECODE_ERROR 0x80027076
+#define TEE_ERR_X509_R_CANT_CHECK_DH_KEY 0x80027072
+#define TEE_ERR_X509_R_CERT_ALREADY_IN_HASH_TABLE 0x80027065
+#define TEE_ERR_X509_R_CRL_ALREADY_DELTA 0x8002707f
+#define TEE_ERR_X509_R_CRL_VERIFY_FAILURE 0x80027083
+#define TEE_ERR_X509_R_IDP_MISMATCH 0x80027080
+#define TEE_ERR_X509_R_INVALID_ATTRIBUTES 0x8002708a
+#define TEE_ERR_X509_R_INVALID_DIRECTORY 0x80027071
+#define TEE_ERR_X509_R_INVALID_FIELD_NAME 0x80027077
+#define TEE_ERR_X509_R_INVALID_TRUST 0x8002707b
+#define TEE_ERR_X509_R_ISSUER_MISMATCH 0x80027081
+#define TEE_ERR_X509_R_KEY_TYPE_MISMATCH 0x80027073
+#define TEE_ERR_X509_R_KEY_VALUES_MISMATCH 0x80027074
+#define TEE_ERR_X509_R_LOADING_CERT_DIR 0x80027067
+#define TEE_ERR_X509_R_LOADING_DEFAULTS 0x80027068
+#define TEE_ERR_X509_R_METHOD_NOT_SUPPORTED 0x8002707c
+#define TEE_ERR_X509_R_NAME_TOO_LONG 0x80027086
+#define TEE_ERR_X509_R_NEWER_CRL_NOT_NEWER 0x80027084
+#define TEE_ERR_X509_R_NO_CERTIFICATE_FOUND 0x80027087
+#define TEE_ERR_X509_R_NO_CERTIFICATE_OR_CRL_FOUND 0x80027088
+#define TEE_ERR_X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 0x80027069
+#define TEE_ERR_X509_R_NO_CRL_FOUND 0x80027089
+#define TEE_ERR_X509_R_NO_CRL_NUMBER 0x80027082
+#define TEE_ERR_X509_R_PUBLIC_KEY_DECODE_ERROR 0x8002707d
+#define TEE_ERR_X509_R_PUBLIC_KEY_ENCODE_ERROR 0x8002707e
+#define TEE_ERR_X509_R_SHOULD_RETRY 0x8002706a
+#define TEE_ERR_X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 0x8002706b
+#define TEE_ERR_X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 0x8002706c
+#define TEE_ERR_X509_R_UNKNOWN_KEY_TYPE 0x80027075
+#define TEE_ERR_X509_R_UNKNOWN_NID 0x8002706d
+#define TEE_ERR_X509_R_UNKNOWN_PURPOSE_ID 0x80027079
+#define TEE_ERR_X509_R_UNKNOWN_TRUST_ID 0x80027078
+#define TEE_ERR_X509_R_UNSUPPORTED_ALGORITHM 0x8002706f
+#define TEE_ERR_X509_R_WRONG_LOOKUP_TYPE 0x80027070
+#define TEE_ERR_X509_R_WRONG_TYPE 0x8002707a
+
+/* for asn1 lib err */
+#define TEE_ERR_ASN1_R_ADDING_OBJECT 0x800280ab
+#define TEE_ERR_ASN1_R_ASN1_PARSE_ERROR 0x800280cb
+#define TEE_ERR_ASN1_R_ASN1_SIG_PARSE_ERROR 0x800280cc
+#define TEE_ERR_ASN1_R_AUX_ERROR 0x80028064
+#define TEE_ERR_ASN1_R_BAD_OBJECT_HEADER 0x80028066
+#define TEE_ERR_ASN1_R_BMPSTRING_IS_WRONG_LENGTH 0x800280d6
+#define TEE_ERR_ASN1_R_BN_LIB 0x80028069
+#define TEE_ERR_ASN1_R_BOOLEAN_IS_WRONG_LENGTH 0x8002806a
+#define TEE_ERR_ASN1_R_BUFFER_TOO_SMALL 0x8002806b
+#define TEE_ERR_ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 0x8002806c
+#define TEE_ERR_ASN1_R_CONTEXT_NOT_INITIALISED 0x800280d9
+#define TEE_ERR_ASN1_R_DATA_IS_WRONG 0x8002806d
+#define TEE_ERR_ASN1_R_DECODE_ERROR 0x8002806e
+#define TEE_ERR_ASN1_R_DEPTH_EXCEEDED 0x800280ae
+#define TEE_ERR_ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 0x800280c6
+#define TEE_ERR_ASN1_R_ENCODE_ERROR 0x80028070
+#define TEE_ERR_ASN1_R_ERROR_GETTING_TIME 0x800280ad
+#define TEE_ERR_ASN1_R_ERROR_LOADING_SECTION 0x800280ac
+#define TEE_ERR_ASN1_R_ERROR_SETTING_CIPHER_PARAMS 0x80028072
+#define TEE_ERR_ASN1_R_EXPECTING_AN_INTEGER 0x80028073
+#define TEE_ERR_ASN1_R_EXPECTING_AN_OBJECT 0x80028074
+#define TEE_ERR_ASN1_R_EXPLICIT_LENGTH_MISMATCH 0x80028077
+#define TEE_ERR_ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 0x80028078
+#define TEE_ERR_ASN1_R_FIELD_MISSING 0x80028079
+#define TEE_ERR_ASN1_R_FIRST_NUM_TOO_LARGE 0x8002807a
+#define TEE_ERR_ASN1_R_HEADER_TOO_LONG 0x8002807b
+#define TEE_ERR_ASN1_R_ILLEGAL_BITSTRING_FORMAT 0x800280af
+#define TEE_ERR_ASN1_R_ILLEGAL_BOOLEAN 0x800280b0
+#define TEE_ERR_ASN1_R_ILLEGAL_CHARACTERS 0x8002807c
+#define TEE_ERR_ASN1_R_ILLEGAL_FORMAT 0x800280b1
+#define TEE_ERR_ASN1_R_ILLEGAL_HEX 0x800280b2
+#define TEE_ERR_ASN1_R_ILLEGAL_IMPLICIT_TAG 0x800280b3
+#define TEE_ERR_ASN1_R_ILLEGAL_INTEGER 0x800280b4
+#define TEE_ERR_ASN1_R_ILLEGAL_NEGATIVE_VALUE 0x800280e2
+#define TEE_ERR_ASN1_R_ILLEGAL_NESTED_TAGGING 0x800280b5
+#define TEE_ERR_ASN1_R_ILLEGAL_NULL 0x8002807d
+#define TEE_ERR_ASN1_R_ILLEGAL_NULL_VALUE 0x800280b6
+#define TEE_ERR_ASN1_R_ILLEGAL_OBJECT 0x800280b7
+#define TEE_ERR_ASN1_R_ILLEGAL_OPTIONAL_ANY 0x8002807e
+#define TEE_ERR_ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 0x800280aa
+#define TEE_ERR_ASN1_R_ILLEGAL_PADDING 0x800280dd
+#define TEE_ERR_ASN1_R_ILLEGAL_TAGGED_ANY 0x8002807f
+#define TEE_ERR_ASN1_R_ILLEGAL_TIME_VALUE 0x800280b8
+#define TEE_ERR_ASN1_R_ILLEGAL_ZERO_CONTENT 0x800280de
+#define TEE_ERR_ASN1_R_INTEGER_NOT_ASCII_FORMAT 0x800280b9
+#define TEE_ERR_ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 0x80028080
+#define TEE_ERR_ASN1_R_INVALID_BIT_STRING_BITS_LEFT 0x800280dc
+#define TEE_ERR_ASN1_R_INVALID_BMPSTRING_LENGTH 0x80028081
+#define TEE_ERR_ASN1_R_INVALID_DIGIT 0x80028082
+#define TEE_ERR_ASN1_R_INVALID_MIME_TYPE 0x800280cd
+#define TEE_ERR_ASN1_R_INVALID_MODIFIER 0x800280ba
+#define TEE_ERR_ASN1_R_INVALID_NUMBER 0x800280bb
+#define TEE_ERR_ASN1_R_INVALID_OBJECT_ENCODING 0x800280d8
+#define TEE_ERR_ASN1_R_INVALID_SCRYPT_PARAMETERS 0x800280e3
+#define TEE_ERR_ASN1_R_INVALID_SEPARATOR 0x80028083
+#define TEE_ERR_ASN1_R_INVALID_STRING_TABLE_VALUE 0x800280da
+#define TEE_ERR_ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 0x80028085
+#define TEE_ERR_ASN1_R_INVALID_UTF8STRING 0x80028086
+#define TEE_ERR_ASN1_R_INVALID_VALUE 0x800280db
+#define TEE_ERR_ASN1_R_LIST_ERROR 0x800280bc
+#define TEE_ERR_ASN1_R_MIME_NO_CONTENT_TYPE 0x800280ce
+#define TEE_ERR_ASN1_R_MIME_PARSE_ERROR 0x800280cf
+#define TEE_ERR_ASN1_R_MIME_SIG_PARSE_ERROR 0x800280d0
+#define TEE_ERR_ASN1_R_MISSING_EOC 0x80028089
+#define TEE_ERR_ASN1_R_MISSING_SECOND_NUMBER 0x8002808a
+#define TEE_ERR_ASN1_R_MISSING_VALUE 0x800280bd
+#define TEE_ERR_ASN1_R_MSTRING_NOT_UNIVERSAL 0x8002808b
+#define TEE_ERR_ASN1_R_MSTRING_WRONG_TAG 0x8002808c
+#define TEE_ERR_ASN1_R_NESTED_ASN1_STRING 0x800280c5
+#define TEE_ERR_ASN1_R_NESTED_TOO_DEEP 0x800280c9
+#define TEE_ERR_ASN1_R_NON_HEX_CHARACTERS 0x8002808d
+#define TEE_ERR_ASN1_R_NOT_ASCII_FORMAT 0x800280be
+#define TEE_ERR_ASN1_R_NOT_ENOUGH_DATA 0x8002808e
+#define TEE_ERR_ASN1_R_NO_CONTENT_TYPE 0x800280d1
+#define TEE_ERR_ASN1_R_NO_MATCHING_CHOICE_TYPE 0x8002808f
+#define TEE_ERR_ASN1_R_NO_MULTIPART_BODY_FAILURE 0x800280d2
+#define TEE_ERR_ASN1_R_NO_MULTIPART_BOUNDARY 0x800280d3
+#define TEE_ERR_ASN1_R_NO_SIG_CONTENT_TYPE 0x800280d4
+#define TEE_ERR_ASN1_R_NULL_IS_WRONG_LENGTH 0x80028090
+#define TEE_ERR_ASN1_R_OBJECT_NOT_ASCII_FORMAT 0x800280bf
+#define TEE_ERR_ASN1_R_ODD_NUMBER_OF_CHARS 0x80028091
+#define TEE_ERR_ASN1_R_SECOND_NUMBER_TOO_LARGE 0x80028093
+#define TEE_ERR_ASN1_R_SEQUENCE_LENGTH_MISMATCH 0x80028094
+#define TEE_ERR_ASN1_R_SEQUENCE_NOT_CONSTRUCTED 0x80028095
+#define TEE_ERR_ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 0x800280c0
+#define TEE_ERR_ASN1_R_SHORT_LINE 0x80028096
+#define TEE_ERR_ASN1_R_SIG_INVALID_MIME_TYPE 0x800280d5
+#define TEE_ERR_ASN1_R_STREAMING_NOT_SUPPORTED 0x800280ca
+#define TEE_ERR_ASN1_R_STRING_TOO_LONG 0x80028097
+#define TEE_ERR_ASN1_R_STRING_TOO_SHORT 0x80028098
+#define TEE_ERR_ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 0x8002809a
+#define TEE_ERR_ASN1_R_TIME_NOT_ASCII_FORMAT 0x800280c1
+#define TEE_ERR_ASN1_R_TOO_LARGE 0x800280df
+#define TEE_ERR_ASN1_R_TOO_LONG 0x8002809b
+#define TEE_ERR_ASN1_R_TOO_SMALL 0x800280e0
+#define TEE_ERR_ASN1_R_TYPE_NOT_CONSTRUCTED 0x8002809c
+#define TEE_ERR_ASN1_R_TYPE_NOT_PRIMITIVE 0x800280c3
+#define TEE_ERR_ASN1_R_UNEXPECTED_EOC 0x8002809f
+#define TEE_ERR_ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 0x800280d7
+#define TEE_ERR_ASN1_R_UNKNOWN_FORMAT 0x800280a0
+#define TEE_ERR_ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 0x800280a1
+#define TEE_ERR_ASN1_R_UNKNOWN_OBJECT_TYPE 0x800280a2
+#define TEE_ERR_ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 0x800280a3
+#define TEE_ERR_ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 0x800280c7
+#define TEE_ERR_ASN1_R_UNKNOWN_TAG 0x800280c2
+#define TEE_ERR_ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 0x800280a4
+#define TEE_ERR_ASN1_R_UNSUPPORTED_CIPHER 0x800280e4
+#define TEE_ERR_ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 0x800280a7
+#define TEE_ERR_ASN1_R_UNSUPPORTED_TYPE 0x800280c4
+#define TEE_ERR_ASN1_R_WRONG_INTEGER_TYPE 0x800280e1
+#define TEE_ERR_ASN1_R_WRONG_PUBLIC_KEY_TYPE 0x800280c8
+#define TEE_ERR_ASN1_R_WRONG_TAG 0x800280a8
+
+/* for crypto lib err */
+#define TEE_ERR_CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 0x80029065
+#define TEE_ERR_CRYPTO_R_ILLEGAL_HEX_DIGIT 0x80029066
+#define TEE_ERR_CRYPTO_R_ODD_NUMBER_OF_DIGITS 0x80029067
+
+/* for ec lib err */
+#define TEE_ERR_EC_R_ASN1_ERROR 0x8002a073
+#define TEE_ERR_EC_R_BAD_SIGNATURE 0x8002a09c
+#define TEE_ERR_EC_R_BIGNUM_OUT_OF_RANGE 0x8002a090
+#define TEE_ERR_EC_R_BUFFER_TOO_SMALL 0x8002a064
+#define TEE_ERR_EC_R_CANNOT_INVERT 0x8002a0a5
+#define TEE_ERR_EC_R_COORDINATES_OUT_OF_RANGE 0x8002a092
+#define TEE_ERR_EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 0x8002a0a0
+#define TEE_ERR_EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 0x8002a09f
+#define TEE_ERR_EC_R_D2I_ECPKPARAMETERS_FAILURE 0x8002a075
+#define TEE_ERR_EC_R_DECODE_ERROR 0x8002a08e
+#define TEE_ERR_EC_R_DISCRIMINANT_IS_ZERO 0x8002a076
+#define TEE_ERR_EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 0x8002a077
+#define TEE_ERR_EC_R_FIELD_TOO_LARGE 0x8002a08f
+#define TEE_ERR_EC_R_GF2M_NOT_SUPPORTED 0x8002a093
+#define TEE_ERR_EC_R_GROUP2PKPARAMETERS_FAILURE 0x8002a078
+#define TEE_ERR_EC_R_I2D_ECPKPARAMETERS_FAILURE 0x8002a079
+#define TEE_ERR_EC_R_INCOMPATIBLE_OBJECTS 0x8002a065
+#define TEE_ERR_EC_R_INVALID_ARGUMENT 0x8002a070
+#define TEE_ERR_EC_R_INVALID_COMPRESSED_POINT 0x8002a06e
+#define TEE_ERR_EC_R_INVALID_COMPRESSION_BIT 0x8002a06d
+#define TEE_ERR_EC_R_INVALID_CURVE 0x8002a08d
+#define TEE_ERR_EC_R_INVALID_DIGEST 0x8002a097
+#define TEE_ERR_EC_R_INVALID_DIGEST_TYPE 0x8002a08a
+#define TEE_ERR_EC_R_INVALID_ENCODING 0x8002a066
+#define TEE_ERR_EC_R_INVALID_FIELD 0x8002a067
+#define TEE_ERR_EC_R_INVALID_FORM 0x8002a068
+#define TEE_ERR_EC_R_INVALID_GROUP_ORDER 0x8002a07a
+#define TEE_ERR_EC_R_INVALID_KEY 0x8002a074
+#define TEE_ERR_EC_R_INVALID_OUTPUT_LENGTH 0x8002a0a1
+#define TEE_ERR_EC_R_INVALID_PEER_KEY 0x8002a085
+#define TEE_ERR_EC_R_INVALID_PENTANOMIAL_BASIS 0x8002a084
+#define TEE_ERR_EC_R_INVALID_PRIVATE_KEY 0x8002a07b
+#define TEE_ERR_EC_R_INVALID_TRINOMIAL_BASIS 0x8002a089
+#define TEE_ERR_EC_R_KDF_PARAMETER_ERROR 0x8002a094
+#define TEE_ERR_EC_R_KEYS_NOT_SET 0x8002a08c
+#define TEE_ERR_EC_R_LADDER_POST_FAILURE 0x8002a088
+#define TEE_ERR_EC_R_LADDER_PRE_FAILURE 0x8002a099
+#define TEE_ERR_EC_R_LADDER_STEP_FAILURE 0x8002a0a2
+#define TEE_ERR_EC_R_MISSING_PARAMETERS 0x8002a07c
+#define TEE_ERR_EC_R_MISSING_PRIVATE_KEY 0x8002a07d
+#define TEE_ERR_EC_R_NEED_NEW_SETUP_VALUES 0x8002a09d
+#define TEE_ERR_EC_R_NOT_A_NIST_PRIME 0x8002a087
+#define TEE_ERR_EC_R_NOT_IMPLEMENTED 0x8002a07e
+#define TEE_ERR_EC_R_NOT_INITIALIZED 0x8002a06f
+#define TEE_ERR_EC_R_NO_PARAMETERS_SET 0x8002a08b
+#define TEE_ERR_EC_R_NO_PRIVATE_VALUE 0x8002a09a
+#define TEE_ERR_EC_R_OPERATION_NOT_SUPPORTED 0x8002a098
+#define TEE_ERR_EC_R_PASSED_NULL_PARAMETER 0x8002a086
+#define TEE_ERR_EC_R_PEER_KEY_ERROR 0x8002a095
+#define TEE_ERR_EC_R_PKPARAMETERS2GROUP_FAILURE 0x8002a07f
+#define TEE_ERR_EC_R_POINT_ARITHMETIC_FAILURE 0x8002a09b
+#define TEE_ERR_EC_R_POINT_AT_INFINITY 0x8002a06a
+#define TEE_ERR_EC_R_POINT_COORDINATES_BLIND_FAILURE 0x8002a0a3
+#define TEE_ERR_EC_R_POINT_IS_NOT_ON_CURVE 0x8002a06b
+#define TEE_ERR_EC_R_RANDOM_NUMBER_GENERATION_FAILED 0x8002a09e
+#define TEE_ERR_EC_R_SHARED_INFO_ERROR 0x8002a096
+#define TEE_ERR_EC_R_SLOT_FULL 0x8002a06c
+#define TEE_ERR_EC_R_UNDEFINED_GENERATOR 0x8002a071
+#define TEE_ERR_EC_R_UNDEFINED_ORDER 0x8002a080
+#define TEE_ERR_EC_R_UNKNOWN_COFACTOR 0x8002a0a4
+#define TEE_ERR_EC_R_UNKNOWN_GROUP 0x8002a081
+#define TEE_ERR_EC_R_UNKNOWN_ORDER 0x8002a072
+#define TEE_ERR_EC_R_UNSUPPORTED_FIELD 0x8002a083
+#define TEE_ERR_EC_R_WRONG_CURVE_PARAMETERS 0x8002a091
+#define TEE_ERR_EC_R_WRONG_ORDER 0x8002a082
+
+/* for pkcs7 lib err */
+#define TEE_ERR_PKCS7_R_CERTIFICATE_VERIFY_ERROR 0x8002b075
+#define TEE_ERR_PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 0x8002b090
+#define TEE_ERR_PKCS7_R_CIPHER_NOT_INITIALIZED 0x8002b074
+#define TEE_ERR_PKCS7_R_CONTENT_AND_DATA_PRESENT 0x8002b076
+#define TEE_ERR_PKCS7_R_CTRL_ERROR 0x8002b098
+#define TEE_ERR_PKCS7_R_DECRYPT_ERROR 0x8002b077
+#define TEE_ERR_PKCS7_R_DIGEST_FAILURE 0x8002b065
+#define TEE_ERR_PKCS7_R_ENCRYPTION_CTRL_FAILURE 0x8002b095
+#define TEE_ERR_PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 0x8002b096
+#define TEE_ERR_PKCS7_R_ERROR_ADDING_RECIPIENT 0x8002b078
+#define TEE_ERR_PKCS7_R_ERROR_SETTING_CIPHER 0x8002b079
+#define TEE_ERR_PKCS7_R_INVALID_NULL_POINTER 0x8002b08f
+#define TEE_ERR_PKCS7_R_INVALID_SIGNED_DATA_TYPE 0x8002b09b
+#define TEE_ERR_PKCS7_R_NO_CONTENT 0x8002b07a
+#define TEE_ERR_PKCS7_R_NO_DEFAULT_DIGEST 0x8002b097
+#define TEE_ERR_PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 0x8002b09a
+#define TEE_ERR_PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 0x8002b073
+#define TEE_ERR_PKCS7_R_NO_SIGNATURES_ON_DATA 0x8002b07b
+#define TEE_ERR_PKCS7_R_NO_SIGNERS 0x8002b08e
+#define TEE_ERR_PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 0x8002b068
+#define TEE_ERR_PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 0x8002b07c
+#define TEE_ERR_PKCS7_R_PKCS7_ADD_SIGNER_ERROR 0x8002b099
+#define TEE_ERR_PKCS7_R_PKCS7_DATASIGN 0x8002b091
+#define TEE_ERR_PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 0x8002b07f
+#define TEE_ERR_PKCS7_R_SIGNATURE_FAILURE 0x8002b069
+#define TEE_ERR_PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 0x8002b080
+#define TEE_ERR_PKCS7_R_SIGNING_CTRL_FAILURE 0x8002b093
+#define TEE_ERR_PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 0x8002b094
+#define TEE_ERR_PKCS7_R_SMIME_TEXT_ERROR 0x8002b081
+#define TEE_ERR_PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 0x8002b06a
+#define TEE_ERR_PKCS7_R_UNABLE_TO_FIND_MEM_BIO 0x8002b06b
+#define TEE_ERR_PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 0x8002b06c
+#define TEE_ERR_PKCS7_R_UNKNOWN_DIGEST_TYPE 0x8002b06d
+#define TEE_ERR_PKCS7_R_UNKNOWN_OPERATION 0x8002b06e
+#define TEE_ERR_PKCS7_R_UNSUPPORTED_CIPHER_TYPE 0x8002b06f
+#define TEE_ERR_PKCS7_R_UNSUPPORTED_CONTENT_TYPE 0x8002b070
+#define TEE_ERR_PKCS7_R_WRONG_CONTENT_TYPE 0x8002b071
+#define TEE_ERR_PKCS7_R_WRONG_PKCS7_TYPE 0x8002b072
+
+#endif
diff --git a/include/TA/huawei_ext/tee_ra_api.h b/include/TA/huawei_ext/tee_ra_api.h
new file mode 100644
index 0000000..85c56dc
--- /dev/null
+++ b/include/TA/huawei_ext/tee_ra_api.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: API of TCMGR service.
+ */
+#ifndef TCMGR_SERVICE_TEE_RA_API_H
+#define TCMGR_SERVICE_TEE_RA_API_H
+#include <tee_defines.h>
+#include "qsi_data_structure.h"
+
+TEE_Result ra_seal(uint8_t *data, size_t in_size, uint8_t *cipher_data, size_t *cipher_size, uint32_t alg);
+TEE_Result ra_unseal(uint8_t *cipher_data, size_t cipher_size, uint8_t *data, size_t *out_size, uint32_t alg);
+TEE_Result ra_local_report(struct ra_buffer_data *in, struct ra_buffer_data *out);
+TEE_Result ra_qsi_invoke(struct ra_buffer_data *in, struct ra_buffer_data *out);
+
+#endif
diff --git a/include/TA/pthread_attr.h b/include/TA/pthread_attr.h
new file mode 100644
index 0000000..90ac946
--- /dev/null
+++ b/include/TA/pthread_attr.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: phtread attribution declared
+ */
+#ifndef PTHREAD_ATTR_H
+#define PTHREAD_ATTR_H
+
+#define TEESMP_THREAD_ATTR_CA_WILDCARD 0
+#define TEESMP_THREAD_ATTR_CA_INHERIT (-1U)
+#define TEESMP_THREAD_ATTR_TASK_ID_INHERIT (-1U)
+#define TEESMP_THREAD_ATTR_HAS_SHADOW 0x1
+#define TEESMP_THREAD_ATTR_NO_SHADOW 0x0
+
+#endif
diff --git a/include/TA/tee_arith_api.h b/include/TA/tee_arith_api.h
index 76ca0b0..313359a 100755
--- a/include/TA/tee_arith_api.h
+++ b/include/TA/tee_arith_api.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,16 +8,13 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: tee crypto definitions
*/
#ifndef TEE_ARITH_API_H
#define TEE_ARITH_API_H
-#include "tee_defines.h"
-
-#ifndef API_LEVEL
-#define API_LEVEL API_LEVEL1_0
-#endif
+#include <tee_defines.h>
/*
* below definitions are defined by Global Platform
@@ -69,7 +66,7 @@ void TEE_BigIntInit(TEE_BigInt *bigInt, size_t len);
*/
void TEE_BigIntInitFMMContext(TEE_BigIntFMMContext *context, size_t len, const TEE_BigInt *modulus);
-#if (API_LEVEL >= API_LEVEL1_1_1)
+#if defined(API_LEVEL) && defined(API_LEVEL1_1_1) && (API_LEVEL >= API_LEVEL1_1_1)
/*
* calculates the necessary prerequisites for the fast modular multiplication and stores them in a context.
@@ -82,7 +79,7 @@ void TEE_BigIntInitFMMContext(TEE_BigIntFMMContext *context, size_t len, const T
* @return other failed
*/
TEE_Result TEE_BigIntInitFMMContext1(TEE_BigIntFMMContext *context, size_t len, const TEE_BigInt *modulus);
-#endif // API_LEVEL
+#endif /* API_LEVEL */
/*
* initializes bigIntFMM and sets its represented value to zero.
@@ -194,7 +191,7 @@ bool TEE_BigIntGetBit(const TEE_BigInt *src, uint32_t bitIndex);
*/
uint32_t TEE_BigIntGetBitCount(const TEE_BigInt *src);
-#if (API_LEVEL >= API_LEVEL1_2)
+#if defined(API_LEVEL) && defined(API_LEVEL1_2) && (API_LEVEL >= API_LEVEL1_2)
/*
* sets the bitIndexth bit of the natural binary representation of |op| to 1 or 0
*
@@ -228,7 +225,7 @@ TEE_Result TEE_BigIntAssign(TEE_BigInt *dest, const TEE_BigInt *src);
* @return #TEE_ERROR_OVERFLOW In case the dest operand cannot hold the value of |src|
*/
TEE_Result TEE_BigIntAbs(TEE_BigInt *dest, const TEE_BigInt *src);
-#endif // API_LEVEL
+#endif /* API_LEVEL */
/*
* computes dest = op1 + op2
@@ -253,14 +250,14 @@ void TEE_BigIntAdd(TEE_BigInt *dest, const TEE_BigInt *op1, const TEE_BigInt *op
void TEE_BigIntSub(TEE_BigInt *dest, const TEE_BigInt *op1, const TEE_BigInt *op2);
/*
- * negates an operand: dest = -op
+ * negates an operand: dest = -src
*
- * @param dest [OUT] PPointer to TEE_BigInt to store the result -op
+ * @param dest [OUT] PPointer to TEE_BigInt to store the result -src
* @param op [IN] Pointer to the operand to be negated
*
* @return void
*/
-void TEE_BigIntNeg(TEE_BigInt *dest, const TEE_BigInt *op);
+void TEE_BigIntNeg(TEE_BigInt *dest, const TEE_BigInt *src);
/*
* computes dest = op1 * op2
@@ -441,7 +438,7 @@ void TEE_BigIntConvertFromFMM(TEE_BigInt *dest, const TEE_BigIntFMM *src, const
void TEE_BigIntComputeFMM(TEE_BigIntFMM *dest, const TEE_BigIntFMM *op1, const TEE_BigIntFMM *op2, const TEE_BigInt *n,
const TEE_BigIntFMMContext *context);
-#if (API_LEVEL >= API_LEVEL1_1_1)
+#if defined(API_LEVEL) && defined(API_LEVEL1_1_1) && (API_LEVEL >= API_LEVEL1_1_1)
/*
* computes dest = (op1 ^ op2) (mod n).
*
@@ -456,7 +453,7 @@ void TEE_BigIntComputeFMM(TEE_BigIntFMM *dest, const TEE_BigIntFMM *op1, const T
*/
TEE_Result TEE_BigIntExpMod(TEE_BigInt *des, TEE_BigInt *op1, const TEE_BigInt *op2, const TEE_BigInt *n,
TEE_BigIntFMMContext *context);
-#endif // API_LEVEL
+#endif /* API_LEVEL */
/*
* check whether n exists to make dest = (op1 ^ op2) (mod n).
diff --git a/include/TA/tee_core_api.h b/include/TA/tee_core_api.h
index c07be0b..eabf2ec 100644
--- a/include/TA/tee_core_api.h
+++ b/include/TA/tee_core_api.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,13 +8,14 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: tee core api definitions
*/
#ifndef __TEE_CORE_API_H
#define __TEE_CORE_API_H
#include "tee_defines.h"
-#ifndef _TEE_TA_SESSION_HANDLE
-#define _TEE_TA_SESSION_HANDLE
+#ifndef TEE_TA_SESSION_HANDLE
+#define TEE_TA_SESSION_HANDLE
typedef uint32_t TEE_TASessionHandle;
#endif
@@ -79,4 +80,5 @@ bool TEE_UnmaskCancellation(void);
/* not supported */
bool TEE_MaskCancellation(void);
+
#endif
diff --git a/include/TA/tee_crypto_api.h b/include/TA/tee_crypto_api.h
index c711d30..5abedf2 100644
--- a/include/TA/tee_crypto_api.h
+++ b/include/TA/tee_crypto_api.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,23 +8,24 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: tee crypto definitions
*/
#ifndef TEE_CRYPTO_API_H
#define TEE_CRYPTO_API_H
-#include "pthread.h" // pthread_mutex_t
-#include "tee_defines.h"
-#include "tee_mem_mgmt_api.h"
+#include <pthread.h> /* pthread_mutex_t */
+#include <tee_defines.h>
+#include <tee_mem_mgmt_api.h>
#ifndef NULL
#define NULL ((void *)0)
#endif
-#define TEE_MAX_KEY_SIZE_IN_BITS (1024 * 8)
-
-#define SW_RSA_KEYLEN 1024
+#define TEE_MAX_KEY_SIZE_IN_BITS (1024 * 8)
+#define SW_RSA_KEYLEN 1024
#define TEE_DH_MAX_SIZE_OF_OTHER_INFO 64 /* bytes */
+#define TEE_PARAM_COUNT_MAX 9
enum __TEE_Operation_Constants {
TEE_OPERATION_CIPHER = 0x1,
@@ -82,54 +83,59 @@ enum __tee_crypto_algorithm_id {
TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA384 = 0x60213230,
TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA512 = 0x60214230,
#endif
- TEE_ALG_RSA_NOPAD = 0x60000030,
- TEE_ALG_DSA_SHA1 = 0x70002131,
- TEE_ALG_DSA_SHA224 = 0x70003131,
- TEE_ALG_DSA_SHA256 = 0x70004131,
- TEE_ALG_DH_DERIVE_SHARED_SECRET = 0x80000032,
- TEE_ALG_MD5 = 0x50000001,
- TEE_ALG_SHA1 = 0x50000002,
- TEE_ALG_SHA224 = 0x50000003,
- TEE_ALG_SHA256 = 0x50000004,
- TEE_ALG_SHA384 = 0x50000005,
- TEE_ALG_SHA512 = 0x50000006,
- TEE_ALG_HMAC_MD5 = 0x30000001,
- TEE_ALG_HMAC_SHA1 = 0x30000002,
- TEE_ALG_HMAC_SHA224 = 0x30000003,
- TEE_ALG_HMAC_SHA256 = 0x30000004,
- TEE_ALG_HMAC_SHA384 = 0x30000005,
- TEE_ALG_HMAC_SHA512 = 0x30000006,
- TEE_ALG_HMAC_SM3 = 0x30000007,
- TEE_ALG_AES_ECB_PKCS5 = 0x10000020,
- TEE_ALG_AES_CBC_PKCS5 = 0x10000220,
- TEE_ALG_ECDSA_SHA1 = 0x70001042,
- TEE_ALG_ECDSA_SHA224 = 0x70002042,
- TEE_ALG_ECDSA_SHA256 = 0x70003042,
- TEE_ALG_ECDSA_SHA384 = 0x70004042,
- TEE_ALG_ECDSA_SHA512 = 0x70005042,
- TEE_ALG_ED25519 = 0x70005043,
- TEE_ALG_ECDH_DERIVE_SHARED_SECRET = 0x80000042,
- TEE_ALG_X25519 = 0x80000044,
- TEE_ALG_ECC = 0x80000001,
- TEE_ALG_ECDSA_P192 = 0x70001042,
- TEE_ALG_ECDSA_P224 = 0x70002042,
- TEE_ALG_ECDSA_P256 = 0x70003042,
- TEE_ALG_ECDSA_P384 = 0x70004042,
- TEE_ALG_ECDSA_P521 = 0x70005042,
- TEE_ALG_ECDH_P192 = 0x80001042,
- TEE_ALG_ECDH_P224 = 0x80002042,
- TEE_ALG_ECDH_P256 = 0x80003042,
- TEE_ALG_ECDH_P384 = 0x80004042,
- TEE_ALG_ECDH_P521 = 0x80005042,
- TEE_ALG_SM2_DSA_SM3 = 0x70006045,
- TEE_ALG_SM2_PKE = 0x80000045,
- TEE_ALG_SM3 = 0x50000007,
- TEE_ALG_SM4_ECB_NOPAD = 0x10000014,
- TEE_ALG_SM4_CBC_NOPAD = 0x10000114,
- TEE_ALG_SM4_CTR = 0x10000214,
- TEE_ALG_SM4_XTS = 0x10000414,
- TEE_ALG_SM4_OFB = 0x10000514,
- TEE_ALG_AES_OFB = 0x10000510,
+ TEE_ALG_RSA_NOPAD = 0x60000030,
+ TEE_ALG_DSA_SHA1 = 0x70002131,
+ TEE_ALG_DSA_SHA224 = 0x70003131,
+ TEE_ALG_DSA_SHA256 = 0x70004131,
+ TEE_ALG_DH_DERIVE_SHARED_SECRET = 0x80000032,
+ TEE_ALG_MD5 = 0x50000001,
+ TEE_ALG_SHA1 = 0x50000002,
+ TEE_ALG_SHA224 = 0x50000003,
+ TEE_ALG_SHA256 = 0x50000004,
+ TEE_ALG_SHA384 = 0x50000005,
+ TEE_ALG_SHA512 = 0x50000006,
+ TEE_ALG_HMAC_MD5 = 0x30000001,
+ TEE_ALG_HMAC_SHA1 = 0x30000002,
+ TEE_ALG_HMAC_SHA224 = 0x30000003,
+ TEE_ALG_HMAC_SHA256 = 0x30000004,
+ TEE_ALG_HMAC_SHA384 = 0x30000005,
+ TEE_ALG_HMAC_SHA512 = 0x30000006,
+ TEE_ALG_HMAC_SM3 = 0x30000007,
+ TEE_ALG_AES_ECB_PKCS5 = 0x10000020,
+ TEE_ALG_AES_CBC_PKCS5 = 0x10000220,
+ TEE_ALG_ECDSA_SHA1 = 0x70001042,
+ TEE_ALG_ECDSA_SHA224 = 0x70002042,
+ TEE_ALG_ECDSA_SHA256 = 0x70003042,
+ TEE_ALG_ECDSA_SHA384 = 0x70004042,
+ TEE_ALG_ECDSA_SHA512 = 0x70005042,
+ TEE_ALG_ED25519 = 0x70005043,
+ TEE_ALG_ECDH_DERIVE_SHARED_SECRET = 0x80000042,
+ TEE_ALG_X25519 = 0x80000044,
+ TEE_ALG_ECC = 0x80000001,
+ TEE_ALG_ECDSA_P192 = 0x70001042,
+ TEE_ALG_ECDSA_P224 = 0x70002042,
+ TEE_ALG_ECDSA_P256 = 0x70003042,
+ TEE_ALG_ECDSA_P384 = 0x70004042,
+ TEE_ALG_ECDSA_P521 = 0x70005042,
+ TEE_ALG_ECDH_P192 = 0x80001042,
+ TEE_ALG_ECDH_P224 = 0x80002042,
+ TEE_ALG_ECDH_P256 = 0x80003042,
+ TEE_ALG_ECDH_P384 = 0x80004042,
+ TEE_ALG_ECDH_P521 = 0x80005042,
+ TEE_ALG_SIP_HASH = 0xF0000002,
+ TEE_ALG_SM2_DSA_SM3 = 0x70006045,
+ TEE_ALG_SM2_PKE = 0x80000045,
+ TEE_ALG_SM3 = 0x50000007,
+ TEE_ALG_SM4_ECB_NOPAD = 0x10000014,
+ TEE_ALG_SM4_ECB_PKCS7 = 0x10000024,
+ TEE_ALG_SM4_CBC_NOPAD = 0x10000114,
+ TEE_ALG_SM4_CBC_PKCS7 = 0xF0000003,
+ TEE_ALG_SM4_CTR = 0x10000214,
+ TEE_ALG_SM4_CFB128 = 0xF0000000,
+ TEE_ALG_SM4_XTS = 0x10000414,
+ TEE_ALG_SM4_OFB = 0x10000514,
+ TEE_ALG_AES_OFB = 0x10000510,
+ TEE_ALG_SM4_GCM = 0xF0000005,
};
typedef enum __tee_crypto_algorithm_id tee_crypto_algorithm_id;
@@ -162,13 +168,13 @@ typedef enum {
} TEE_DH_OpMode_t;
typedef enum {
- TEE_DH_ASN1_DerivMode = 0, /* *< ASN1_DerivMode */
- TEE_DH_ConcatDerivMode = 1, /* *< ConcatDerivMode */
- TEE_DH_X963_DerivMode = TEE_DH_ConcatDerivMode, /* *< X963_DerivMode */
- TEE_DH_OMADRM_DerivMode = 2, /* *< OMADRM_DerivMode */
- TEE_DH_ISO18033_KDF1_DerivMode = 3, /* *< ISO18033_KDF1_DerivMode */
- TEE_DH_ISO18033_KDF2_DerivMode = 4, /* *< ISO18033_KDF2_DerivMode */
- TEE_DH_DerivFunc_NumOfModes, /* *< num of modes */
+ TEE_DH_ASN1_DerivMode = 0, /* ASN1_DerivMode */
+ TEE_DH_ConcatDerivMode = 1, /* ConcatDerivMode */
+ TEE_DH_X963_DerivMode = TEE_DH_ConcatDerivMode, /* X963_DerivMode */
+ TEE_DH_OMADRM_DerivMode = 2, /* OMADRM_DerivMode */
+ TEE_DH_ISO18033_KDF1_DerivMode = 3, /* ISO18033_KDF1_DerivMode */
+ TEE_DH_ISO18033_KDF2_DerivMode = 4, /* ISO18033_KDF2_DerivMode */
+ TEE_DH_DerivFunc_NumOfModes, /* num of modes */
} TEE_DH_DerivFuncMode;
enum __TEE_DK_ObjectAttribute {
@@ -242,9 +248,9 @@ typedef struct {
} TEE_OperationInfoMultiple;
struct __TEE_OperationHandle {
- uint32_t algorithm; /* *< #__TEE_CRYPTO_ALGORITHM_ID */
- uint32_t operationClass; /* *< #__TEE_Operation_Constants */
- uint32_t mode; /* *< #__TEE_OperationMode */
+ uint32_t algorithm; /* #__TEE_CRYPTO_ALGORITHM_ID */
+ uint32_t operationClass; /* #__TEE_Operation_Constants */
+ uint32_t mode; /* #__TEE_OperationMode */
uint32_t digestLength;
uint32_t maxKeySize;
uint32_t keySize;
@@ -261,12 +267,12 @@ struct __TEE_OperationHandle {
void *privateKey;
uint32_t privateKeyLen;
uint32_t IVLen;
- // start of DH
+ /* start of DH */
TEE_DH_OtherInfo *dh_otherinfo; /* #TEE_DH_OtherInfo */
uint32_t dh_hash_mode; /* #TEE_DH_HASH_Mode */
uint32_t dh_derive_func; /* #TEE_DH_DerivFuncMode */
uint32_t dh_op_mode; /* #TEE_DH_OpMode_t */
- // end of DH
+ /* end of DH */
pthread_mutex_t operation_lock;
void *hal_info;
};
@@ -306,7 +312,7 @@ typedef struct __TEE_ObjectHandle TEE_ObjectHandleVar;
* @param operation [IN/OUT] #TEE_OperationHandle
* @param algorithm [IN] #TEE_CRYPTO_ALGORITHM_ID
* @param mode [IN] #TEE_OperationMode
- * @param maxKeySize [IN] The max key size
+ * @param max_key_size [IN] The max key size
*
* @return TEE_SUCCESS succss
* @return TEE_ERROR_OUT_OF_MEMORY #TEE_OperationHandle malloc failed
@@ -314,7 +320,7 @@ typedef struct __TEE_ObjectHandle TEE_ObjectHandleVar;
* @return TEE_ERROR_GENERIC other failed
*/
TEE_Result TEE_AllocateOperation(TEE_OperationHandle *operation, uint32_t algorithm, uint32_t mode,
- uint32_t maxKeySize);
+ uint32_t max_key_size);
/*
* free Operation handle
*
@@ -370,12 +376,12 @@ TEE_Result TEE_SetOperationKey2(TEE_OperationHandle operation, const TEE_ObjectH
/*
* copy src operation to dest operation
*
- * @param dstOperation [IN/OUT] #TEE_OperationHandle
- * @param srcOperation [IN/OUT] #TEE_OperationHandle
+ * @param dst_operation [IN/OUT] #TEE_OperationHandle
+ * @param src_operation [IN/OUT] #TEE_OperationHandle
*
* @return void
*/
-void TEE_CopyOperation(TEE_OperationHandle dstOperation, const TEE_OperationHandle srcOperation);
+void TEE_CopyOperation(TEE_OperationHandle dst_operation, const TEE_OperationHandle src_operation);
/*
* init cipher context
@@ -430,11 +436,11 @@ TEE_Result TEE_CipherDoFinal(TEE_OperationHandle operation, const void *srcData,
*/
#ifndef GP_SUPPORT
-#if (API_LEVEL >= 2)
+#if defined(API_LEVEL) && (API_LEVEL >= 2)
void TEE_DigestUpdate(TEE_OperationHandle operation, const void *chunk, size_t chunkSize);
#else
TEE_Result TEE_DigestUpdate(TEE_OperationHandle operation, const void *chunk, size_t chunkSize);
-#endif // API_LEVEL
+#endif /* API_LEVEL */
#else
void TEE_DigestUpdate(TEE_OperationHandle operation, const void *chunk, size_t chunkSize);
@@ -506,13 +512,13 @@ TEE_Result TEE_MACComputeFinal(TEE_OperationHandle operation, const void *messag
*/
#ifndef GP_SUPPORT
-#if (API_LEVEL >= 2)
+#if defined(API_LEVEL) && (API_LEVEL >= 2)
TEE_Result TEE_MACCompareFinal(TEE_OperationHandle operation, const void *message, size_t messageLen, const void *mac,
const size_t macLen);
#else
TEE_Result TEE_MACCompareFinal(TEE_OperationHandle operation, const void *message, size_t messageLen, const void *mac,
const size_t *macLen);
-#endif // API_LEVEL
+#endif /* API_LEVEL */
#else
TEE_Result TEE_MACCompareFinal(TEE_OperationHandle operation, const void *message, size_t messageLen, const void *mac,
@@ -687,7 +693,7 @@ TEE_Result TEE_AsymmetricSignDigest(TEE_OperationHandle operation, const TEE_Att
TEE_Result TEE_AsymmetricVerifyDigest(TEE_OperationHandle operation, const TEE_Attribute *params, uint32_t paramCount,
void *digest, size_t digestLen, void *signature, size_t signatureLen);
-#if (API_LEVEL >= 2)
+#if defined(API_LEVEL) && (API_LEVEL >= 2)
/*
* Get Operation Info multiple
@@ -702,9 +708,9 @@ TEE_Result TEE_AsymmetricVerifyDigest(TEE_OperationHandle operation, const TEE_A
*/
TEE_Result TEE_GetOperationInfoMultiple(TEE_OperationHandle operation, TEE_OperationInfoMultiple *operationInfoMultiple,
const size_t *operationSize);
-#endif // API_LEVEL
+#endif /* API_LEVEL */
-#if (API_LEVEL >= 3)
+#if defined(API_LEVEL) && (API_LEVEL >= 2)
/*
* check whether the algorithm is sopported
@@ -716,6 +722,8 @@ TEE_Result TEE_GetOperationInfoMultiple(TEE_OperationHandle operation, TEE_Opera
* @return TEE_ERROR_NOT_SUPPORTED not support
*/
TEE_Result TEE_IsAlgorithmSupported(uint32_t algId, uint32_t element);
-#endif // API_LEVEL
+
+TEE_Result TEE_IsHardWareSupportAlgorithm(uint32_t alg_type);
+#endif /* API_LEVEL */
#endif
diff --git a/include/TA/tee_defines.h b/include/TA/tee_defines.h
index 8fa7ada..6b24ff2 100755
--- a/include/TA/tee_defines.h
+++ b/include/TA/tee_defines.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: Reference of TEE internal api and internal definitions
*/
#ifndef __TEE_DEFINES_H
@@ -16,6 +17,7 @@
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
+#include <tee_uuid.h>
#ifndef TA_EXPORT
#define TA_EXPORT
@@ -28,17 +30,8 @@ typedef int *tee_mutex_handle;
#define API_LEVEL1_2 3
#define TEE_PARAMS_NUM 4
-#undef true
-#define true 1
-#undef false
-#define false 0
-
-#ifndef NULL
-#define NULL ((void *)0)
-#endif
-
-#define PARAM_NOT_USED(val) ((void)val)
+#define PARAM_NOT_USED(val) ((void)(val))
typedef union {
struct {
@@ -85,6 +78,9 @@ enum TEE_ParamType {
TEE_PARAM_TYPE_ION_INPUT = 0x8,
TEE_PARAM_TYPE_ION_SGLIST_INPUT = 0x9,
TEE_PARAM_TYPE_MEMREF_SHARED_INOUT = 0xa,
+ TEE_PARAM_TYPE_RESMEM_INPUT = 0xc,
+ TEE_PARAM_TYPE_RESMEM_OUTPUT = 0xd,
+ TEE_PARAM_TYPE_RESMEM_INOUT = 0xe,
};
#define S_VAR_NOT_USED(variable) \
@@ -150,6 +146,9 @@ enum TEE_ObjectAttribute {
TEE_ATTR_ED25519_PH = 0xF0000543,
TEE_ATTR_X25519_PUBLIC_VALUE = 0xD0000944,
TEE_ATTR_X25519_PRIVATE_VALUE = 0xC0000A44,
+ TEE_ATTR_PBKDF2_HMAC_PASSWORD = 0xD0000133,
+ TEE_ATTR_PBKDF2_HMAC_SALT = 0xD0000134,
+ TEE_ATTR_PBKDF2_HMAC_DIGEST = 0xF0000135,
};
enum TEE_ObjectType {
@@ -186,6 +185,8 @@ enum TEE_ObjectType {
TEE_TYPE_SM2_PKE_KEYPAIR = 0xA1000047,
TEE_TYPE_HMAC_SM3 = 0xA0000007,
TEE_TYPE_SM4 = 0xA0000014,
+ TEE_TYPE_SIP_HASH = 0xF0000002,
+ TEE_TYPE_PBKDF2_HMAC = 0xF0000004,
TEE_TYPE_CORRUPTED_OBJECT = 0xA00000BE,
};
@@ -206,130 +207,116 @@ struct __TEE_ObjectHandle {
};
typedef struct __TEE_ObjectHandle *TEE_ObjectHandle;
-#define NODE_LEN 8
-typedef struct tee_uuid {
- uint32_t timeLow;
- uint16_t timeMid;
- uint16_t timeHiAndVersion;
- uint8_t clockSeqAndNode[NODE_LEN];
-} TEE_UUID;
-
-typedef struct spawn_uuid {
- uint64_t uuid_valid;
- TEE_UUID uuid;
-} spawn_uuid_t;
-
enum TEE_Result_Value {
- TEE_SUCCESS = 0x0, /* success */
- TEE_ERROR_INVALID_CMD, /* command is invalid */
- TEE_ERROR_SERVICE_NOT_EXIST, /* service is not exist */
- TEE_ERROR_SESSION_NOT_EXIST, /* session is not exist */
- TEE_ERROR_SESSION_MAXIMUM, /* exceeds max session count */
- TEE_ERROR_REGISTER_EXIST_SERVICE, /* service already registered */
- TEE_ERROR_TARGET_DEAD_FATAL, /* internal error occurs */
- TEE_ERROR_READ_DATA, /* read data failed */
- TEE_ERROR_WRITE_DATA, /* write data failed */
- TEE_ERROR_TRUNCATE_OBJECT, /* truncate data failed */
- TEE_ERROR_SEEK_DATA, /* seek data failed */
- TEE_ERROR_SYNC_DATA, /* sync data failed */
- TEE_ERROR_RENAME_OBJECT, /* rename file failed */
- TEE_ERROR_TRUSTED_APP_LOAD_ERROR, /* error occurs when loading TA */
- TEE_ERROR_OTRP_LOAD_NOT_MATCHED = 0x80000100, /* TA type is inconsistent with the loading mode. */
- TEE_ERROR_OTRP_LOAD_EXCEED = 0x80000101, /* the not open session's otrp service num exceeds */
- TEE_ERROR_OTRP_ACCESS_DENIED = 0x80000102, /* uuid of load cmd is not inconsistent with the sec file */
- TEE_ERROR_OTRP_SERVICE_AGED = 0x80000103, /* otrp service is aged */
- TEE_ERROR_STORAGE_EIO = 0x80001001, /* I/O error occurs in storage operation */
- TEE_ERROR_STORAGE_EAGAIN = 0x80001002, /* storage section is unavailable */
- TEE_ERROR_STORAGE_ENOTDIR = 0x80001003, /* operation target is not directory */
- TEE_ERROR_STORAGE_EISDIR = 0x80001004, /* cannot do this operation on directory */
- TEE_ERROR_STORAGE_ENFILE = 0x80001005, /* opened files exceed max count in system */
- TEE_ERROR_STORAGE_EMFILE = 0x80001006, /* opened files exceed max count for this process */
- TEE_ERROR_STORAGE_EROFS = 0x80001007, /* stroage section is read only */
- TEE_ERROR_STORAGE_INSE_NOTSUPPORT = 0x80001008, /* SFS inse mode is not supported */
- TEE_ERROR_STORAGE_INSE_ERROR = 0x80001009, /* SFS inse encrypto/decrypto error occurs */
- TEE_ERROR_STORAGE_PATH_WRONG = 0x8000100A, /* File path error */
- TEE_ERROR_MSG_QUEUE_OVERFLOW = 0x8000100B, /* sevice msg queue overflow */
- TEE_ERROR_CORRUPT_OBJECT = 0xF0100001, /* file object has been damaged */
- TEE_ERROR_STORAGE_NOT_AVAILABLE = 0xF0100003, /* storage section is unavailable */
- TEE_ERROR_CIPHERTEXT_INVALID = 0xF0100006, /* cipher text is incorrect */
- TEE_ISOCKET_ERROR_PROTOCOL = 0xF1007001, /* protocol error in socket connection */
- TEE_ISOCKET_ERROR_REMOTE_CLOSED = 0xF1007002, /* socket is closed by remote */
- TEE_ISOCKET_ERROR_TIMEOUT = 0xF1007003, /* socket connection is timeout */
- TEE_ISOCKET_ERROR_OUT_OF_RESOURCES = 0xF1007004, /* no resource avaliable for socket connection */
- TEE_ISOCKET_ERROR_LARGE_BUFFER = 0xF1007005, /* buffer is too large in socket connection */
- TEE_ISOCKET_WARNING_PROTOCOL = 0xF1007006, /* warnning occurs in socket connection */
- TEE_ERROR_GENERIC = 0xFFFF0000, /* generic error */
- TEE_ERROR_ACCESS_DENIED = 0xFFFF0001, /* access is denied */
- TEE_ERROR_CANCEL = 0xFFFF0002, /* operation has been canceled */
- TEE_ERROR_ACCESS_CONFLICT = 0xFFFF0003, /* conflict access error occurs */
- TEE_ERROR_EXCESS_DATA = 0xFFFF0004, /* exceeds max data size */
- TEE_ERROR_BAD_FORMAT = 0xFFFF0005, /* incorrect data format */
- TEE_ERROR_BAD_PARAMETERS = 0xFFFF0006, /* incorrect parameters */
- TEE_ERROR_BAD_STATE = 0xFFFF0007, /* operation is not allowed in current state */
- TEE_ERROR_ITEM_NOT_FOUND = 0xFFFF0008, /* cannot find target item */
- TEE_ERROR_NOT_IMPLEMENTED = 0xFFFF0009, /* api is not implemented */
- TEE_ERROR_NOT_SUPPORTED = 0xFFFF000A, /* api is not supported */
- TEE_ERROR_NO_DATA = 0xFFFF000B, /* no data avaliable for this operation */
- TEE_ERROR_OUT_OF_MEMORY = 0xFFFF000C, /* not memory avaliable for this operation */
- TEE_ERROR_BUSY = 0xFFFF000D, /* system busy to handle this operation */
- TEE_ERROR_COMMUNICATION = 0xFFFF000E, /* communication error with target */
- TEE_ERROR_SECURITY = 0xFFFF000F, /* security error occurs */
- TEE_ERROR_SHORT_BUFFER = 0xFFFF0010, /* buffer is too short for this operation */
- TEE_ERROR_EXTERNAL_CANCEL = 0xFFFF0011, /* operation is canceled */
- TEE_PENDING = 0xFFFF2000, /* service is in pending state(in asynchronous state) */
- TEE_PENDING2 = 0xFFFF2001, /* service is in pending state() */
- TEE_PENDING3 = 0xFFFF2002, /* reserved error definition */
- TEE_ERROR_TIMEOUT = 0xFFFF3001, /* operation is timeout */
- TEE_ERROR_OVERFLOW = 0xFFFF300f, /* operation overflow */
- TEE_ERROR_TARGET_DEAD = 0xFFFF3024, /* TA is crashed */
- TEE_ERROR_STORAGE_NO_SPACE = 0xFFFF3041, /* no enough space to store data */
- TEE_ERROR_MAC_INVALID = 0xFFFF3071, /* MAC operation failed */
- TEE_ERROR_SIGNATURE_INVALID = 0xFFFF3072, /* signature check failed */
- TEE_CLIENT_INTR = 0xFFFF4000, /* Interrupted by CFC. Broken control flow is detected. */
- TEE_ERROR_TIME_NOT_SET = 0xFFFF5000, /* time is not set */
- TEE_ERROR_TIME_NEEDS_RESET = 0xFFFF5001, /* time need to be reset */
- TEE_FAIL = 0xFFFF5002, /* system error */
- TEE_ERROR_TIMER = 0xFFFF6000, /* base value of timer error codes */
- TEE_ERROR_TIMER_CREATE_FAILED, /* failed to create timer */
- TEE_ERROR_TIMER_DESTORY_FAILED, /* failed to destory timer */
- TEE_ERROR_TIMER_NOT_FOUND, /* timer not found */
- TEE_ERROR_RPMB_BASE = 0xFFFF7000, /* base value of RPMB error codes */
- TEE_ERROR_RPMB_GENERIC = 0xFFFF7001, /* generic error of RPMB operations */
- TEE_ERROR_RPMB_MAC_FAIL, /* verify MAC failed in RPMB operations */
- TEE_ERROR_RPMB_COUNTER_FAIL, /* invalid counter in RPMB operations */
- TEE_ERROR_RPMB_ADDR_FAIL, /* addresss check failed in RPMB operations */
- TEE_ERROR_RPMB_WRITE_FAIL, /* failed to write data to RPMB */
- TEE_ERROR_RPMB_READ_FAIL, /* failed to read data in RPMB */
- TEE_ERROR_RPMB_KEY_NOT_PROGRAM, /* key is not provisioned in RPMB */
- TEE_ERROR_RPMB_RESP_UNEXPECT_MSGTYPE = 0xFFFF7100, /* incorrect message type in RPMB response */
- TEE_ERROR_RPMB_RESP_UNEXPECT_BLKCNT, /* incorrect message data block count in RPMB response */
- TEE_ERROR_RPMB_RESP_UNEXPECT_BLKIDX, /* incorrect message data block index in RPMB response */
- TEE_ERROR_RPMB_RESP_UNEXPECT_WRCNT, /* incorrect message data counter in RPMB response */
- TEE_ERROR_RPMB_RESP_UNEXPECT_NONCE, /* incorrect message data nonce in RPMB response */
- TEE_ERROR_RPMB_RESP_UNEXPECT_MAC, /* incorrect message data MAC in RPMB response */
- TEE_ERROR_RPMB_FILE_NOT_FOUND, /* file not found in RPMB */
- TEE_ERROR_RPMB_NOSPC, /* not space left for RPMB operations */
- TEE_ERROR_RPMB_SPC_CONFLICT, /* exceeds max space of RPMB for this TA */
- TEE_ERROR_RPMB_NOT_AVAILABLE, /* RPMB service not ready */
- TEE_ERROR_RPMB_DAMAGED, /* RPMB partition is damaged */
- TEE_ERROR_TUI_IN_USE = 0xFFFF7110,
- TEE_ERROR_TUI_SWITCH_CHANNAL,
- TEE_ERROR_TUI_CFG_DRIVER,
- TEE_ERROR_TUI_INVALID_EVENT,
- TEE_ERROR_TUI_POLL_EVENT,
- TEE_ERROR_TUI_CANCELED,
- TEE_ERROR_TUI_EXIT,
- TEE_ERROR_TUI_NOT_AVAILABLE,
- TEE_ERROR_SEC_FLASH_NOT_AVAILABLE,
- TEE_ERROR_SESRV_NOT_AVAILABLE,
- TEE_ERROR_BIOSRV_NOT_AVAILABLE,
- TEE_ERROR_ROTSRV_NOT_AVAILABLE,
- TEE_ERROR_ARTSRV_NOT_AVAILABLE,
- TEE_ERROR_HSMSRV_NOT_AVAILABLE,
- TEE_ERROR_ANTIROOT_RSP_FAIL = 0xFFFF9110,
- TEE_ERROR_ANTIROOT_INVOKE_ERROR = 0xFFFF9111,
- TEE_ERROR_AUDIT_FAIL = 0xFFFF9112,
- TEE_FAIL2
+ TEE_SUCCESS = 0x00000000, /* success */
+ TEE_ERROR_INVALID_CMD = 0x00000001, /* command is invalid */
+ TEE_ERROR_SERVICE_NOT_EXIST = 0x00000002, /* service is not exist */
+ TEE_ERROR_SESSION_NOT_EXIST = 0x00000003, /* session is not exist */
+ TEE_ERROR_SESSION_MAXIMUM = 0x00000004, /* exceeds max session count */
+ TEE_ERROR_REGISTER_EXIST_SERVICE = 0x00000005, /* service already registered */
+ TEE_ERROR_TARGET_DEAD_FATAL = 0x00000006, /* internal error occurs */
+ TEE_ERROR_READ_DATA = 0x00000007, /* read data failed */
+ TEE_ERROR_WRITE_DATA = 0x00000008, /* write data failed */
+ TEE_ERROR_TRUNCATE_OBJECT = 0x00000009, /* truncate data failed */
+ TEE_ERROR_SEEK_DATA = 0x0000000A, /* seek data failed */
+ TEE_ERROR_SYNC_DATA = 0x0000000B, /* sync data failed */
+ TEE_ERROR_RENAME_OBJECT = 0x0000000C, /* rename file failed */
+ TEE_ERROR_TRUSTED_APP_LOAD_ERROR = 0x0000000D, /* error occurs when loading TA */
+ TEE_ERROR_OTRP_LOAD_NOT_MATCHED = 0x80000100, /* TA type is inconsistent with the loading mode. */
+ TEE_ERROR_OTRP_LOAD_EXCEED = 0x80000101, /* the not open session's otrp service num exceeds */
+ TEE_ERROR_OTRP_ACCESS_DENIED = 0x80000102, /* uuid of load cmd is not inconsistent with the sec file */
+ TEE_ERROR_OTRP_SERVICE_AGED = 0x80000103, /* otrp service is aged */
+ TEE_ERROR_STORAGE_EIO = 0x80001001, /* I/O error occurs in storage operation */
+ TEE_ERROR_STORAGE_EAGAIN = 0x80001002, /* storage section is unavailable */
+ TEE_ERROR_STORAGE_ENOTDIR = 0x80001003, /* operation target is not directory */
+ TEE_ERROR_STORAGE_EISDIR = 0x80001004, /* cannot do this operation on directory */
+ TEE_ERROR_STORAGE_ENFILE = 0x80001005, /* opened files exceed max count in system */
+ TEE_ERROR_STORAGE_EMFILE = 0x80001006, /* opened files exceed max count for this process */
+ TEE_ERROR_STORAGE_EROFS = 0x80001007, /* stroage section is read only */
+ TEE_ERROR_STORAGE_PATH_WRONG = 0x8000100A, /* File path error */
+ TEE_ERROR_MSG_QUEUE_OVERFLOW = 0x8000100B, /* sevice msg queue overflow */
+ TEE_ERROR_CORRUPT_OBJECT = 0xF0100001, /* file object has been damaged */
+ TEE_ERROR_STORAGE_NOT_AVAILABLE = 0xF0100003, /* storage section is unavailable */
+ TEE_ERROR_CIPHERTEXT_INVALID = 0xF0100006, /* cipher text is incorrect */
+ TEE_ISOCKET_ERROR_PROTOCOL = 0xF1007001, /* protocol error in socket connection */
+ TEE_ISOCKET_ERROR_REMOTE_CLOSED = 0xF1007002, /* socket is closed by remote */
+ TEE_ISOCKET_ERROR_TIMEOUT = 0xF1007003, /* socket connection is timeout */
+ TEE_ISOCKET_ERROR_OUT_OF_RESOURCES = 0xF1007004, /* no resource avaliable for socket connection */
+ TEE_ISOCKET_ERROR_LARGE_BUFFER = 0xF1007005, /* buffer is too large in socket connection */
+ TEE_ISOCKET_WARNING_PROTOCOL = 0xF1007006, /* warnning occurs in socket connection */
+ TEE_ERROR_GENERIC = 0xFFFF0000, /* generic error */
+ TEE_ERROR_ACCESS_DENIED = 0xFFFF0001, /* access is denied */
+ TEE_ERROR_CANCEL = 0xFFFF0002, /* operation has been canceled */
+ TEE_ERROR_ACCESS_CONFLICT = 0xFFFF0003, /* conflict access error occurs */
+ TEE_ERROR_EXCESS_DATA = 0xFFFF0004, /* exceeds max data size */
+ TEE_ERROR_BAD_FORMAT = 0xFFFF0005, /* incorrect data format */
+ TEE_ERROR_BAD_PARAMETERS = 0xFFFF0006, /* incorrect parameters */
+ TEE_ERROR_BAD_STATE = 0xFFFF0007, /* operation is not allowed in current state */
+ TEE_ERROR_ITEM_NOT_FOUND = 0xFFFF0008, /* cannot find target item */
+ TEE_ERROR_NOT_IMPLEMENTED = 0xFFFF0009, /* api is not implemented */
+ TEE_ERROR_NOT_SUPPORTED = 0xFFFF000A, /* api is not supported */
+ TEE_ERROR_NO_DATA = 0xFFFF000B, /* no data avaliable for this operation */
+ TEE_ERROR_OUT_OF_MEMORY = 0xFFFF000C, /* not memory avaliable for this operation */
+ TEE_ERROR_BUSY = 0xFFFF000D, /* system busy to handle this operation */
+ TEE_ERROR_COMMUNICATION = 0xFFFF000E, /* communication error with target */
+ TEE_ERROR_SECURITY = 0xFFFF000F, /* security error occurs */
+ TEE_ERROR_SHORT_BUFFER = 0xFFFF0010, /* buffer is too short for this operation */
+ TEE_ERROR_EXTERNAL_CANCEL = 0xFFFF0011, /* operation is canceled */
+ TEE_PENDING = 0xFFFF2000, /* service is in pending state(in asynchronous state) */
+ TEE_PENDING2 = 0xFFFF2001, /* service is in pending state() */
+ TEE_PENDING3 = 0xFFFF2002, /* reserved error definition */
+ TEE_ERROR_TIMEOUT = 0xFFFF3001, /* operation is timeout */
+ TEE_ERROR_OVERFLOW = 0xFFFF300f, /* operation overflow */
+ TEE_ERROR_TARGET_DEAD = 0xFFFF3024, /* TA is crashed */
+ TEE_ERROR_STORAGE_NO_SPACE = 0xFFFF3041, /* no enough space to store data */
+ TEE_ERROR_MAC_INVALID = 0xFFFF3071, /* MAC operation failed */
+ TEE_ERROR_SIGNATURE_INVALID = 0xFFFF3072, /* signature check failed */
+ TEE_CLIENT_INTR = 0xFFFF4000, /* Interrupted by CFC. Broken control flow is detected. */
+ TEE_ERROR_TIME_NOT_SET = 0xFFFF5000, /* time is not set */
+ TEE_ERROR_TIME_NEEDS_RESET = 0xFFFF5001, /* time need to be reset */
+ TEE_FAIL = 0xFFFF5002, /* system error */
+ TEE_ERROR_TIMER = 0xFFFF6000, /* base value of timer error codes */
+ TEE_ERROR_TIMER_CREATE_FAILED = 0xFFFF6001, /* failed to create timer */
+ TEE_ERROR_TIMER_DESTROY_FAILED = 0xFFFF6002, /* failed to destroy timer */
+ TEE_ERROR_TIMER_NOT_FOUND = 0xFFFF6003, /* timer not found */
+ TEE_ERROR_RPMB_BASE = 0xFFFF7000, /* base value of RPMB error codes */
+ TEE_ERROR_RPMB_GENERIC = 0xFFFF7001, /* generic error of RPMB operations */
+ TEE_ERROR_RPMB_MAC_FAIL = 0xFFFF7002, /* verify MAC failed in RPMB operations */
+ TEE_ERROR_RPMB_COUNTER_FAIL = 0xFFFF7003, /* invalid counter in RPMB operations */
+ TEE_ERROR_RPMB_ADDR_FAIL = 0xFFFF7004, /* addresss check failed in RPMB operations */
+ TEE_ERROR_RPMB_WRITE_FAIL = 0xFFFF7005, /* failed to write data to RPMB */
+ TEE_ERROR_RPMB_READ_FAIL = 0xFFFF7006, /* failed to read data in RPMB */
+ TEE_ERROR_RPMB_KEY_NOT_PROGRAM = 0xFFFF7007, /* key is not provisioned in RPMB */
+ TEE_ERROR_RPMB_RESP_UNEXPECT_MSGTYPE = 0xFFFF7100, /* incorrect message type in RPMB response */
+ TEE_ERROR_RPMB_RESP_UNEXPECT_BLKCNT = 0xFFFF7101, /* incorrect message data block count in RPMB response */
+ TEE_ERROR_RPMB_RESP_UNEXPECT_BLKIDX = 0xFFFF7102, /* incorrect message data block index in RPMB response */
+ TEE_ERROR_RPMB_RESP_UNEXPECT_WRCNT = 0xFFFF7103, /* incorrect message data counter in RPMB response */
+ TEE_ERROR_RPMB_RESP_UNEXPECT_NONCE = 0xFFFF7104, /* incorrect message data nonce in RPMB response */
+ TEE_ERROR_RPMB_RESP_UNEXPECT_MAC = 0xFFFF7105, /* incorrect message data MAC in RPMB response */
+ TEE_ERROR_RPMB_FILE_NOT_FOUND = 0xFFFF7106, /* file not found in RPMB */
+ TEE_ERROR_RPMB_NOSPC = 0xFFFF7107, /* not space left for RPMB operations */
+ TEE_ERROR_RPMB_SPC_CONFLICT = 0xFFFF7108, /* exceeds max space of RPMB for this TA */
+ TEE_ERROR_RPMB_NOT_AVAILABLE = 0xFFFF7109, /* RPMB service not ready */
+ TEE_ERROR_RPMB_DAMAGED = 0xFFFF710A, /* RPMB partition is damaged */
+ TEE_ERROR_TUI_IN_USE = 0xFFFF7110, /* TUI is being used */
+ TEE_ERROR_TUI_SWITCH_CHANNAL = 0xFFFF7111, /* incorrect message switch channal in TUI response */
+ TEE_ERROR_TUI_CFG_DRIVER = 0xFFFF7112, /* incorrect message configurator driver in TUI response */
+ TEE_ERROR_TUI_INVALID_EVENT = 0xFFFF7113, /* invalid TUI event */
+ TEE_ERROR_TUI_POLL_EVENT = 0xFFFF7114, /* incorrect message polling events in TUI response */
+ TEE_ERROR_TUI_CANCELED = 0xFFFF7115, /* TUI is cancelled */
+ TEE_ERROR_TUI_EXIT = 0xFFFF7116, /* TUI is exited */
+ TEE_ERROR_TUI_NOT_AVAILABLE = 0xFFFF7117, /* TUI unavailable */
+ TEE_ERROR_SEC_FLASH_NOT_AVAILABLE = 0xFFFF7118, /* sec flash is not available */
+ TEE_ERROR_SESRV_NOT_AVAILABLE = 0xFFFF7119, /* SE service has crashed or not enabled */
+ TEE_ERROR_BIOSRV_NOT_AVAILABLE = 0xFFFF711A, /* BIO service is not available */
+ TEE_ERROR_ROTSRV_NOT_AVAILABLE = 0xFFFF711B, /* ROT service is not available */
+ TEE_ERROR_ARTSRV_NOT_AVAILABLE = 0xFFFF711C, /* ART service is not available */
+ TEE_ERROR_HSMSRV_NOT_AVAILABLE = 0xFFFF711D, /* HSM service is not available */
+ TEE_ERROR_ANTIROOT_RSP_FAIL = 0xFFFF9110, /* AntiRoot Response verify failed */
+ TEE_ERROR_ANTIROOT_INVOKE_ERROR = 0xFFFF9111, /* AntiRoot ERROR during invokecmd */
+ TEE_ERROR_AUDIT_FAIL = 0xFFFF9112, /* audit failed */
+ TEE_FAIL2 = 0xFFFF9113, /* unused */
+ TEE_ERROR_IPC_OVERFLOW = 0xFFFF9114 /* IPC Channel overflow error */
};
/*
@@ -343,6 +330,7 @@ enum TEE_LoginMethod {
TEE_LOGIN_USER_APPLICATION = 0x5,
TEE_LOGIN_GROUP_APPLICATION = 0x6,
TEE_LOGIN_IDENTIFY = 0x7, /* iTrustee defined Lognin type */
+ TEEK_LOGIN_IDENTIFY = 0x80000001, /* iTrustee defined lognin type from linux kernel */
};
typedef struct {
@@ -356,8 +344,8 @@ typedef TEE_Result TEEC_Result;
#define TEE_ORIGIN_TEE 0x00000003
#define TEE_ORIGIN_TRUSTED_APP 0x00000004
-#ifndef _TEE_TA_SESSION_HANDLE
-#define _TEE_TA_SESSION_HANDLE
+#ifndef TEE_TA_SESSION_HANDLE
+#define TEE_TA_SESSION_HANDLE
typedef uint32_t TEE_TASessionHandle;
#endif
@@ -365,4 +353,28 @@ typedef struct __TEE_ObjectHandle *TEE_ObjectHandle;
typedef struct __TEE_ObjectEnumHandle *TEE_ObjectEnumHandle;
typedef struct __TEE_OperationHandle *TEE_OperationHandle;
+#define TEE_TIMEOUT_INFINITE (0xFFFFFFFF)
+
+typedef struct {
+ uint32_t seconds;
+ uint32_t millis;
+} TEE_Time;
+
+typedef struct {
+ int32_t seconds;
+ int32_t millis;
+ int32_t min;
+ int32_t hour;
+ int32_t day;
+ int32_t month;
+ int32_t year;
+} TEE_Date_Time;
+
+typedef struct {
+ uint32_t type;
+ uint32_t timer_id;
+ uint32_t timer_class;
+ uint32_t reserved2;
+} TEE_timer_property;
+
#endif
diff --git a/include/TA/tee_mem_mgmt_api.h b/include/TA/tee_mem_mgmt_api.h
index 5b91566..48f9888 100644
--- a/include/TA/tee_mem_mgmt_api.h
+++ b/include/TA/tee_mem_mgmt_api.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: Header file of memory management api
*/
#ifndef TEE_MEM_MGMT_API_H
@@ -61,7 +62,7 @@ enum MALLOC_HINT {
*
* @return void
*/
-#if (API_LEVEL >= API_LEVEL1_2)
+#if defined(API_LEVEL) && defined(API_LEVEL1_2) && (API_LEVEL >= API_LEVEL1_2)
void TEE_MemFill(void *buffer, uint8_t x, size_t size);
#else
void TEE_MemFill(void *buffer, uint32_t x, size_t size);
diff --git a/include/TA/tee_object_api.h b/include/TA/tee_object_api.h
index c8200e5..a62f68f 100644
--- a/include/TA/tee_object_api.h
+++ b/include/TA/tee_object_api.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: Reference of TEE object api definitions
*/
#ifndef __TEE_OBJECT_API_H
@@ -237,7 +238,7 @@ TEE_Result TEE_GenerateKey(TEE_ObjectHandle object, uint32_t keySize, TEE_Attrib
*/
TEE_Result TEE_InfoObjectData(TEE_ObjectHandle object, uint32_t *pos, uint32_t *len);
-#if (API_LEVEL >= 2)
+#if defined(API_LEVEL) && (API_LEVEL >= 2)
/*
* Obtain the TEE_ObjectInfo of the object and copy it to the space pointed
diff --git a/include/TA/tee_property_api.h b/include/TA/tee_property_api.h
index fb00a96..2d8b567 100644
--- a/include/TA/tee_property_api.h
+++ b/include/TA/tee_property_api.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2019. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: TEE property implementation header file
*/
#ifndef TEE_PROPERTY_API_H
@@ -69,7 +70,7 @@ TEE_Result TEE_GetPropertyAsBool(TEE_PropSetHandle propsetOrEnumerator, const ch
*/
TEE_Result TEE_GetPropertyAsU32(TEE_PropSetHandle propsetOrEnumerator, const char *name, uint32_t *value);
-#if (API_LEVEL >= API_LEVEL1_2)
+#if defined(API_LEVEL) && defined(API_LEVEL1_2) && (API_LEVEL >= API_LEVEL1_2)
/*
* retrieves a single property in a property set and converts its value to a 64-bit unsigned integer
*
@@ -120,7 +121,7 @@ TEE_Result TEE_GetPropertyAsUUID(TEE_PropSetHandle propsetOrEnumerator, const ch
* @return TEE_SUCCESS operation success
* @return TEE_ERROR_ITEM_NOT_FOUND cannot find target property
*/
-TEE_Result TEE_GetPropertyAsIdentity(TEE_PropSetHandle propsetOrEnumerator, const char *name, TEE_Identity *value);
+TEE_Result TEE_GetPropertyAsIdentity(TEE_PropSetHandle propsetOrEnumerator, const char *name, TEE_Identity *identity);
/*
* allocates a property enumerator object
diff --git a/include/TA/tee_time_api.h b/include/TA/tee_time_api.h
index 31cc5f8..fa97c31 100644
--- a/include/TA/tee_time_api.h
+++ b/include/TA/tee_time_api.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: Reference of TEE time api definitions
*/
#ifndef __TEE_TIME_API_H
@@ -15,34 +16,6 @@
#include "tee_defines.h"
-#define TEE_TIMEOUT_INFINITE (0xFFFFFFFF)
-
-typedef struct {
- uint32_t seconds;
- uint32_t millis;
-} TEE_Time;
-
-typedef struct {
- int32_t seconds;
- int32_t millis;
- int32_t min;
- int32_t hour;
- int32_t day;
- int32_t month;
- int32_t year;
-} TEE_Date_Time;
-
-typedef struct {
- uint32_t type;
- uint32_t timer_id;
- uint32_t timer_class;
- uint32_t reserved2;
-} TEE_timer_property;
-
-typedef enum {
- ANTI_ROOT_TIMER = 1,
-} TEE_Anti_Root_Timer_Type;
-
/*
* Get current TEE system rtc time
*
@@ -111,54 +84,4 @@ void TEE_GetREETime(TEE_Time *time);
* @return void
*/
void TEE_GetREETimeStr(char *time_str, uint32_t time_str_len);
-
-/*
- * Create rtc timer event
- *
- * @param time_seconds [IN] specified number of seconds
- * @param timer_property [IN] specified property of timer
- *
- * @return TEE_SUCCESS success
- * @return TEE_ERROR_GENERIC create timer fail
- */
-TEE_Result TEE_EXT_CreateTimer(uint32_t time_seconds, TEE_timer_property *timer_property);
-
-/*
- * Destory rtc timer event
- *
- * @param timer_property [IN] specified property of timer
- *
- * @return TEE_SUCCESS success
- * @return TEE_ERROR_GENERIC destroy timer fail
- */
-TEE_Result TEE_EXT_DestoryTimer(TEE_timer_property *timer_property);
-
-/*
- * Get expire time of rtc timer event
- *
- * @param timer_property [IN] specified property of timer
- * @param time_seconds [OUT] expire time of rtc timer event
- *
- * @return TEE_SUCCESS success
- * @return TEE_ERROR_GENERIC get expire time fail
- */
-TEE_Result TEE_EXT_GetTimerExpire(TEE_timer_property *timer_property, uint32_t *time_seconds);
-
-/*
- * Get remain time of rtc timer event
- *
- * @param timer_property [IN] specified property of timer
- * @param time_seconds [OUT] remain time of rtc timer event
- *
- * @return TEE_SUCCESS success
- * @return TEE_ERROR_GENERIC get remain time fail
- */
-TEE_Result TEE_EXT_GetTimerRemain(TEE_timer_property *timer_property, uint32_t *time_seconds);
-
-/*
- * Get secure rtc time
- *
- * @return current rtc seconds
- */
-unsigned int __get_secure_rtc_time(void);
#endif
diff --git a/include/TA/tee_trusted_storage_api.h b/include/TA/tee_trusted_storage_api.h
new file mode 100644
index 0000000..cfe7554
--- /dev/null
+++ b/include/TA/tee_trusted_storage_api.h
@@ -0,0 +1,309 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Reference of TEE trusted storage definitions
+ */
+
+#ifndef __TEE_TRUSTED_STORAGE_API_H
+#define __TEE_TRUSTED_STORAGE_API_H
+
+#include "tee_defines.h"
+#include "tee_object_api.h"
+
+/*
+ * Data stream positioning start position option, used in TEE_SeekObjectData function
+ */
+enum __TEE_Whence {
+ TEE_DATA_SEEK_SET = 0, /* Position the starting position as the beginning of the data stream */
+ TEE_DATA_SEEK_CUR, /* Position the starting position as the current data stream position */
+ TEE_DATA_SEEK_END /* Position the starting position at the end of the data stream */
+};
+
+struct __TEE_ObjectEnumHandle;
+typedef struct __TEE_ObjectEnumHandle *TEE_ObjectEnumHandle;
+
+typedef uint32_t TEE_Whence;
+
+/*
+ * Storage ID, which defines the storage space of the corresponding application
+ */
+enum Object_Storage_Constants {
+ TEE_OBJECT_STORAGE_PRIVATE = 0x00000001, /* Separate private storage space for each application */
+};
+
+/*
+ * System resource constraints, such as the maximum value that the data stream position indicator can take
+ */
+enum Miscellaneous_Constants {
+ TEE_DATA_MAX_POSITION = 0xFFFFFFFF, /* The maximum length that the position indicator of the data stream can take */
+ TEE_OBJECT_ID_MAX_LEN = 64, /* The maximum length of objectID, which actually extends to 128 bytes */
+};
+
+/*
+ * The maximum number of bytes of data that the data stream can store
+ */
+enum TEE_DATA_Size {
+ TEE_DATA_OBJECT_MAX_SIZE = 0xFFFFFFFF /* The maximum bytes of data that the object data stream can store */
+};
+
+/*
+ * The handleFlags of TEE_ObjectHandle determines the access authority of
+ * the TEE_ObjectHandle to the object data stream
+ */
+enum Data_Flag_Constants {
+ /* Have read permission to the data stream, and can read */
+ TEE_DATA_FLAG_ACCESS_READ = 0x00000001,
+ /* Have write permission to the data stream, and can write and truncate */
+ TEE_DATA_FLAG_ACCESS_WRITE = 0x00000002,
+ /* Have WRITE_META permission for data stream, and can delete and rename operation */
+ TEE_DATA_FLAG_ACCESS_WRITE_META = 0x00000004,
+ /*
+ * Have shared read permissions on the data stream, you can open multiple
+ * TEE_ObjectHandles for concurrent reading
+ */
+ TEE_DATA_FLAG_SHARE_READ = 0x00000010,
+ /*
+ * Have shared write permissions for the data stream, and multiple TEE_ObjectHandles
+ * can be opened for concurrent writing
+ */
+ TEE_DATA_FLAG_SHARE_WRITE = 0x00000020,
+ /* Unused */
+ TEE_DATA_FLAG_CREATE = 0x00000200,
+ /*
+ * Protect an existing file with the same name. If the file with the same name does not exist,
+ * create a new data file; if the file with the same name exists, an error will be reported
+ */
+ TEE_DATA_FLAG_EXCLUSIVE = 0x00000400,
+ /*
+ * Protect an existing file with the same name. If the file with the same name does not exist,
+ * create a new data file; if the file with the same name exists, an error will be reported
+ */
+ TEE_DATA_FLAG_OVERWRITE = 0x00000400,
+ /*
+ * If the bit27 is set to 1, it means deriving the 32-bytes TA root key at one time,
+ * if it is 0, it means deriving two 16-bytes TA root keys and combined them together
+ */
+ TEE_DATA_FLAG_DERIVE_32BYTES_KEY_ONCE = 0x08000000,
+ /* If bit28 is set to 1, it means AES256, if it is 0, it means AES128 */
+ TEE_DATA_FLAG_AES256 = 0x10000000,
+ /* If bit29 is set to 1, it means that the lower version will be opened first */
+ TEE_DATA_FLAG_OPEN_AESC = 0x20000000,
+};
+
+/*
+ * Create a new persistent object, you can directly initialize the data stream and TEE_Attribute,
+ * the user can use the returned handle to access the object's TEE_Attribute and data stream
+ *
+ * @param storageID [IN] Corresponding to a separate storage space for each application,
+ * the value is Object_Storage_Constants
+ * @param objectID [IN] Object identifier, the name of the object to be created
+ * @param objectIDLen [IN] The length of the object identifier by byte, no more than 128 bytes
+ * @param flags [IN] Flags after object creation, the value can be one or more of Data_Flag_Constants
+ * or Handle_Flag_Constants
+ * @param attributes [IN] The TEE_ObjectHandle of the transient object, used to initialize the
+ * TEE_Attribute of the object, can be TEE_HANDLE_NULL
+ * @param initialData [IN] Initial data, used to initialize data stream data
+ * @param initialDataLen [IN] InitialData length in byte
+ * @param object [OUT] TEE_ObjectHandle returned after the function is successfully executed
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ERROR_ITEM_NOT_FOUND: The storageID does not exist
+ * @return TEE_ERROR_ACCESS_CONFLICT Access conflict
+ * @return TEE_ERROR_OUT_OF_MEMORY Insufficient memory to complete the operation
+ * @return TEE_ERROR_STORAGE_NO_SPACE There is not enough space to create the object
+ */
+TEE_Result TEE_CreatePersistentObject(uint32_t storageID, const void *ojbectID, size_t objectIDLen, uint32_t flags,
+ TEE_ObjectHandle attributes, const void *initialData, size_t initialDataLen,
+ TEE_ObjectHandle *object);
+
+/*
+ * Open an existing permanent object, the returned handle can be used by the user to access
+ * the object's TEE_Attribute and data stream
+ *
+ * @param storageID [IN] orresponding to a separate storage space for each application,
+ * the value is Object_Storage_Constants
+ * @param objectID [IN] object identifier, the name of the object to be opened
+ * @param objectIDLen [IN] The length of the object identifier by byte, no more than 128 bytes
+ * @param flags [IN] Flags after object opened, the value can be one or more of
+ * Data_Flag_Constants or Handle_Flag_Constants
+ * @param object [OUT] TEE_ObjectHandle returned after the function is successfully executed
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ERROR_ITEM_NOT_FOUND: The storageID does not exist or cannot find object identifier
+ * @return TEE_ERROR_ACCESS_CONFLICT Access conflict
+ * @return TEE_ERROR_OUT_OF_MEMORY Insufficient memory to complete the operation
+ */
+TEE_Result TEE_OpenPersistentObject(uint32_t storageID, const void *ojbectID, size_t objectIDLen, uint32_t flags,
+ TEE_ObjectHandle *object);
+
+/*
+ * Read size bytes of data from the object's data stream to the buffer,
+ * the TEE_ObjectHandle must have been opened with TEE_DATA_FLAG_ACCESS_READ permission
+ *
+ * @param objbect [IN] The TEE_ObjectHandle to be read
+ * @param buffer [OUT] Buffer for storing read data
+ * @param size [IN] Size of data to be read by byte
+ * @param count [OUT] Size of data actually read by byte
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ERROR_OUT_OF_MEMORY Insufficient memory to complete the operation
+ */
+TEE_Result TEE_ReadObjectData(TEE_ObjectHandle ojbect, void *buffer, size_t size, uint32_t *count);
+
+/*
+ * Write size bytes of data from the buffer to the data stream of the object.
+ * TEE_ObjectHandle must have been opened with TEE_DATA_FLAG_ACCESS_WRITE permission
+ *
+ * @param ojbect [IN] The TEE_ObjectHandle to be write
+ * @param buffer [IN] Store the data to be written
+ * @param size [IN] The length of the data to be written, the size does not exceed 4096 bytes
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ERROR_OUT_OF_MEMORY Insufficient memory to complete the operation
+ * @return TEE_ERROR_STORAGE_NO_SPACE There is not enough space to perform the operation
+ */
+TEE_Result TEE_WriteObjectData(TEE_ObjectHandle ojbect, const void *buffer, size_t size);
+
+/*
+ * This function changes the size of the data stream. If the size is smaller than the size of
+ * the current data stream, delete all excess bytes. If size is greater than the size of the
+ * current data stream, use '0' to expand
+ * TEE_ObjectHandle must be opened with TEE_DATA_FLAG_ACCESS_WRITE permission
+ *
+ * @param object [IN] TEE_ObjectHandle to be truncated
+ * @param size [IN] The new length of the data stream, the size does not exceed 4096 bytes
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ERROR_STORAGE_NO_SPACE There is not enough space to perform the operation
+ */
+TEE_Result TEE_TruncateObjectData(TEE_ObjectHandle object, size_t size);
+
+/*
+ * Set the data stream position pointed to by TEE_ObjectHandle, and set the data stream position to:
+ * start position + offset
+ * The parameter whence controls the starting position of the offset, the value can choose in TEE_Whence,
+ * and the meaning is as follows:
+ * TEE_DATA_SEEK_SET, the starting position of the data stream offset is the file header, which is 0
+ * TEE_DATA_SEEK_CUR, the starting position of the data stream offset is the current position
+ * TEE_DATA_SEEK_END, the starting position of the data stream offset is the end of the file
+ * When the parameter offset is a positive number, it is offset backward, and when it is negative, it is offset forward.
+ *
+ * @param object [IN] TEE_ObjectHandle to be set
+ * @param offset [IN] The size of the data stream position movement, the size does not exceed 4096 bytes
+ * @param whence [IN] The initial position of the data stream offset
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ERROR_OVERFLOW The operation causes the value of the position indicator to exceed its
+ * system limit TEE_DATA_MAX_POSITION
+ */
+TEE_Result TEE_SeekObjectData(TEE_ObjectHandle object, int32_t offset, TEE_Whence whence);
+
+/*
+ * Close the opened TEE_ObjectHandle and delete the object. The object must be a persistent object
+ * and must have been opened with TEE_DATA_FLAG_ACCESS_WRITE_META permission
+ *
+ * @param object [IN] TEE_ObjectHandle to be closed and deleted
+ *
+ * @return void
+ */
+void TEE_CloseAndDeletePersistentObject(TEE_ObjectHandle object);
+
+/*
+ * Synchronize the opened TEE_ObjectHandle, and synchronize the corresponding security attribute files to the disk
+ *
+ * @param object [IN] TEE_ObjectHandle to be synchronized
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ */
+TEE_Result TEE_SyncPersistentObject(TEE_ObjectHandle object);
+
+/*
+ * Change the object identifier, the TEE_ObjectHandle must be opened with TEE_DATA_FLAG_ACCESS_WRITE_META permission
+ *
+ * @param ojbect [IN/OUT] The object handle to be modified
+ * @param newObjectID [IN] New object identifier
+ * @param newObjectIDLen [IN] New object identifier length
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ */
+TEE_Result TEE_RenamePersistentObject(TEE_ObjectHandle object, void *newObjectID, size_t newObjectIDLen);
+
+/*
+ * Allocate the handle of an uninitialized object enumerator
+ *
+ * @param object [OUT] Pointer to the handle of the newly created object enumerator
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ERROR_OUT_OF_MEMORY No enough memory to allocate
+ */
+TEE_Result TEE_AllocatePersistentObjectEnumerator(TEE_ObjectEnumHandle *obj_enumerator);
+
+/*
+ * Release a object enumerator handle that has allocated. The handle becomes invalid after the function is called,
+ * and all allocated are released. Use it in pair with TEE_AllocatePersistentObjectEnumerator
+ *
+ * @param object [IN] TEE_ObjectEnumHandle to be released
+ *
+ * @return void
+ */
+void TEE_FreePersistentObjectEnumerator(TEE_ObjectEnumHandle obj_enumerator);
+
+/*
+ * Reset the temporary object enumerator to its initial state, that is, the state just after the allocate
+ *
+ * @param object [IN] TEE_ObjectEnumHandle of the object enumerator to be reset
+ *
+ * @return void
+ */
+void TEE_ResetPersistentObjectEnumerator(TEE_ObjectEnumHandle obj_enumerator);
+
+/*
+ * Start enumerating all objects in a given storage space, the information of the object can be obtained
+ * through the TEE_GetNextPersistentObject function
+ *
+ * @param object [IN] TEE_ObjectEnumHandle of the allocated object enumerator
+ * @param storageID [IN] Correspond to a separate storage space for each application, the value is
+ * Object_Storage_Constants, currently only supports TEE_STORAGE_PRIVATE
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ITEM_NOT_FOUND storageID is not TEE_STORAGE_PRIVATE or there is no object in the storage space
+ */
+TEE_Result TEE_StartPersistentObjectEnumerator(TEE_ObjectEnumHandle obj_enumerator, uint32_t storage_id);
+
+/*
+ * Get the next object in the object enumerator, and return the object's TEE_ObjectInfo, objectID,
+ * objectIDLen information
+ *
+ * @param object [IN] TEE_ObjectEnumHandle of the initialized object enumerator
+ * @param objectInfo [OUT] Pointer to the structure used to store the obtained TEE_ObjectInfo
+ * @param objectInfo [OUT] Pointer to a buffer, used to store the obtained objectID
+ * @param objectInfo [OUT] Used to store the obtained objectIDLen
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ITEM_NOT_FOUND The enumerator has no object or the enumerator has not been initialized
+ */
+TEE_Result TEE_GetNextPersistentObject(TEE_ObjectEnumHandle obj_enumerator,
+ TEE_ObjectInfo *object_info, void *object_id, size_t *object_id_len);
+
+#if defined(API_LEVEL) && (API_LEVEL >= 2)
+
+/*
+ * Close the opened TEE_ObjectHandle and delete the object. The object must be a persistent object
+ * and must have been opened with TEE_DATA_FLAG_ACCESS_WRITE_META permission
+ *
+ * @param object [IN] TEE_ObjectHandle to be closed and deleted
+ *
+ * @return TEE_SUCCESS Indicates that the function was executed successfully
+ * @return TEE_ERROR_STORAGE_NOT_AVAILABLE Cannot access the storage area where the file is located
+ */
+TEE_Result TEE_CloseAndDeletePersistentObject1(TEE_ObjectHandle object);
+
+#endif // API_LEVEL
+#endif
diff --git a/include/TA/tee_uuid.h b/include/TA/tee_uuid.h
new file mode 100644
index 0000000..51fb298
--- /dev/null
+++ b/include/TA/tee_uuid.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: Defines of GP TEE_UUID
+ */
+
+#ifndef TEE_UUID_H
+#define TEE_UUID_H
+
+#include <stdint.h>
+
+#define NODE_LEN 8
+typedef struct tee_uuid {
+ uint32_t timeLow;
+ uint16_t timeMid;
+ uint16_t timeHiAndVersion;
+ uint8_t clockSeqAndNode[NODE_LEN];
+} TEE_UUID;
+
+#endif
diff --git a/src/CA/libteec_adaptor.c b/src/CA/libteec_adaptor.c
new file mode 100644
index 0000000..9fd2042
--- /dev/null
+++ b/src/CA/libteec_adaptor.c
@@ -0,0 +1,269 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: this file is used for adapting interfaces in libteec.so
+ */
+
+#include <dlfcn.h>
+#include <pthread.h>
+
+#include "tee_client_api.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "libteec_adaptor"
+
+#define LIBTEEC_PATH "/usr/lib64/libteec.so"
+
+/*
+ * these Function pointers are consistent with those defined in "tee_client_api.h"
+ * if you want to call the new interface in "tee_client_api.h",
+ * you should add a new definition here
+ */
+typedef TEEC_Result (*initializeContext_f)(const char *name, TEEC_Context *context);
+typedef void (*finalizeContext_f)(TEEC_Context *context);
+typedef TEEC_Result (*openSession_f)(TEEC_Context *context, TEEC_Session *session,
+ const TEEC_UUID *destination, uint32_t connectionMethod, const void *connectionData,
+ TEEC_Operation *operation, uint32_t *returnOrigin);
+typedef void (*closeSession_f)(TEEC_Session *session);
+typedef TEEC_Result (*invokeCommand_f)(TEEC_Session *session, uint32_t commandID,
+ TEEC_Operation *operation, uint32_t *returnOrigin);
+typedef TEEC_Result (*registerSharedMemory_f)(TEEC_Context *context,
+ TEEC_SharedMemory *sharedMem);
+typedef TEEC_Result (*allocateSharedMemory_f)(TEEC_Context *context,
+ TEEC_SharedMemory *sharedMem);
+typedef void (*releaseSharedMemory_f)(TEEC_SharedMemory *sharedMem);
+typedef void (*requestCancellation_f)(TEEC_Operation *operation);
+
+typedef struct {
+ initializeContext_f initializeContextFn;
+ finalizeContext_f finalizeContextFn;
+ openSession_f openSessionFn;
+ closeSession_f closeSessionFn;
+ invokeCommand_f invokeCommandFn;
+ registerSharedMemory_f registerSharedMemoryFn;
+ allocateSharedMemory_f allocateSharedMemoryFn;
+ releaseSharedMemory_f releaseSharedMemoryFn;
+ requestCancellation_f requestCancellationFn;
+} TeecApiTable;
+
+static TeecApiTable g_teecApiTable;
+static void *g_libTeecHandle = NULL;
+static pthread_mutex_t g_libTeecHandleLock = PTHREAD_MUTEX_INITIALIZER;
+
+static TEEC_Result GetBasicApiSymbol(TeecApiTable *teecApiTable)
+{
+ teecApiTable->initializeContextFn =
+ (initializeContext_f)(dlsym(g_libTeecHandle, "TEEC_InitializeContext"));
+ if (teecApiTable->initializeContextFn == NULL) {
+ TEEC_Error("get symbol TEEC_InitializeContext failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ teecApiTable->finalizeContextFn =
+ (finalizeContext_f)(dlsym(g_libTeecHandle, "TEEC_FinalizeContext"));
+ if (teecApiTable->finalizeContextFn == NULL) {
+ TEEC_Error("get symbol TEEC_FinalizeContext failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ teecApiTable->openSessionFn =
+ (openSession_f)(dlsym(g_libTeecHandle, "TEEC_OpenSession"));
+ if (teecApiTable->openSessionFn == NULL) {
+ TEEC_Error("get symbol TEEC_OpenSession failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ teecApiTable->closeSessionFn =
+ (closeSession_f)(dlsym(g_libTeecHandle, "TEEC_CloseSession"));
+ if (teecApiTable->closeSessionFn == NULL) {
+ TEEC_Error("get symbol TEEC_CloseSession failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ teecApiTable->invokeCommandFn =
+ (invokeCommand_f)(dlsym(g_libTeecHandle, "TEEC_InvokeCommand"));
+ if (teecApiTable->invokeCommandFn == NULL) {
+ TEEC_Error("get symbol TEEC_InvokeCommand failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ return TEEC_SUCCESS;
+}
+
+static TEEC_Result GetMemApiSymbol(TeecApiTable *teecApiTable)
+{
+ teecApiTable->registerSharedMemoryFn =
+ (registerSharedMemory_f)(dlsym(g_libTeecHandle, "TEEC_RegisterSharedMemory"));
+ if (teecApiTable->registerSharedMemoryFn == NULL) {
+ TEEC_Error("get symbol TEEC_RegisterSharedMemory failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ teecApiTable->allocateSharedMemoryFn =
+ (allocateSharedMemory_f)(dlsym(g_libTeecHandle, "TEEC_AllocateSharedMemory"));
+ if (teecApiTable->allocateSharedMemoryFn == NULL) {
+ TEEC_Error("get symbol TEEC_AllocateSharedMemory failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ teecApiTable->releaseSharedMemoryFn =
+ (releaseSharedMemory_f)(dlsym(g_libTeecHandle, "TEEC_ReleaseSharedMemory"));
+ if (teecApiTable->releaseSharedMemoryFn == NULL) {
+ TEEC_Error("get symbol TEEC_ReleaseSharedMemory failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ teecApiTable->requestCancellationFn =
+ (requestCancellation_f)(dlsym(g_libTeecHandle, "TEEC_RequestCancellation"));
+ if (teecApiTable->requestCancellationFn == NULL) {
+ TEEC_Error("get symbol TEEC_RequestCancellation failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ return TEEC_SUCCESS;
+}
+
+static TEEC_Result GetTeecApiSymbol()
+{
+ TeecApiTable teecApiTable = {0};
+ (void)pthread_mutex_lock(&g_libTeecHandleLock);
+
+ if (g_libTeecHandle != NULL) {
+ (void)pthread_mutex_unlock(&g_libTeecHandleLock);
+ return TEEC_SUCCESS;
+ }
+
+ g_libTeecHandle = dlopen(LIBTEEC_PATH, RTLD_LAZY);
+ if (g_libTeecHandle == NULL) {
+ TEEC_Error("dlopen libteec failed\n");
+ (void)pthread_mutex_unlock(&g_libTeecHandleLock);
+ return TEEC_ERROR_GENERIC;
+ }
+
+ if (GetBasicApiSymbol(&teecApiTable) != TEEC_SUCCESS ||
+ GetMemApiSymbol(&teecApiTable) != TEEC_SUCCESS) {
+ TEEC_Error("get symbol failed\n");
+ goto ERROR;
+ }
+
+ g_teecApiTable = teecApiTable;
+ (void)pthread_mutex_unlock(&g_libTeecHandleLock);
+ return TEEC_SUCCESS;
+
+ERROR:
+ dlclose(g_libTeecHandle);
+ g_libTeecHandle = NULL;
+ (void)pthread_mutex_unlock(&g_libTeecHandleLock);
+ return TEEC_ERROR_GENERIC;
+}
+
+/*
+ * The following are Interfaces for CA application,
+ * In these interfaces, you should make sure the function pointer in g_teecApiTable is not NULL
+ */
+TEEC_Result TEEC_InitializeContext(const char *name, TEEC_Context *context)
+{
+ TEEC_Result ret = GetTeecApiSymbol();
+ if (ret != TEEC_SUCCESS) {
+ TEEC_Error("get teec api symbol failed!\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ return g_teecApiTable.initializeContextFn(name, context);
+}
+
+void TEEC_FinalizeContext(TEEC_Context *context)
+{
+ if (g_teecApiTable.finalizeContextFn == NULL) {
+ TEEC_Error("finalizeContextFn is null!\n");
+ return;
+ }
+
+ g_teecApiTable.finalizeContextFn(context);
+}
+
+TEEC_Result TEEC_OpenSession(TEEC_Context *context, TEEC_Session *session,
+ const TEEC_UUID *destination, uint32_t connectionMethod,
+ const void *connectionData, TEEC_Operation *operation,
+ uint32_t *returnOrigin)
+{
+ if (g_teecApiTable.openSessionFn == NULL) {
+ TEEC_Error("openSessionFn is null!\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ return g_teecApiTable.openSessionFn(context, session, destination,
+ connectionMethod, connectionData, operation, returnOrigin);
+}
+
+void TEEC_CloseSession(TEEC_Session *session)
+{
+ if (g_teecApiTable.closeSessionFn == NULL) {
+ TEEC_Error("closeSessionFn is null!\n");
+ return;
+ }
+
+ g_teecApiTable.closeSessionFn(session);
+}
+
+TEEC_Result TEEC_InvokeCommand(TEEC_Session *session, uint32_t commandID,
+ TEEC_Operation *operation, uint32_t *returnOrigin)
+{
+ if (g_teecApiTable.invokeCommandFn == NULL) {
+ TEEC_Error("invokeCommandFn is null!\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ return g_teecApiTable.invokeCommandFn(session, commandID, operation, returnOrigin);
+}
+
+TEEC_Result TEEC_RegisterSharedMemory(TEEC_Context *context,
+ TEEC_SharedMemory *sharedMem)
+{
+ if (g_teecApiTable.registerSharedMemoryFn == NULL) {
+ TEEC_Error("registerSharedMemoryFn is null!\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ return g_teecApiTable.registerSharedMemoryFn(context, sharedMem);
+}
+
+TEEC_Result TEEC_AllocateSharedMemory(TEEC_Context *context,
+ TEEC_SharedMemory *sharedMem)
+{
+ if (g_teecApiTable.allocateSharedMemoryFn == NULL) {
+ TEEC_Error("allocateSharedMemoryFn is null!\n");
+ return TEEC_ERROR_GENERIC;
+ }
+
+ return g_teecApiTable.allocateSharedMemoryFn(context, sharedMem);
+}
+
+void TEEC_ReleaseSharedMemory(TEEC_SharedMemory *sharedMem)
+{
+ if (g_teecApiTable.releaseSharedMemoryFn == NULL) {
+ TEEC_Error("releaseSharedMemoryFn is null!\n");
+ return;
+ }
+
+ g_teecApiTable.releaseSharedMemoryFn(sharedMem);
+}
+
+void TEEC_RequestCancellation(TEEC_Operation *operation)
+{
+ if (g_teecApiTable.requestCancellationFn == NULL) {
+ TEEC_Error("requestCancellationFn is null!\n");
+ return;
+ }
+
+ g_teecApiTable.requestCancellationFn(operation);
+}
diff --git a/test/CA/cert_manager/Makefile b/test/CA/cert_manager/Makefile
new file mode 100644
index 0000000..589ac63
--- /dev/null
+++ b/test/CA/cert_manager/Makefile
@@ -0,0 +1,27 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2021-2022. All rights reserved.
+
+CUR_DIR=$(shell pwd)
+ITRUSTEE_BUILD_PATH=${CUR_DIR}/../../../
+
+TARGET_APP := certmanager
+
+APP_SOURCES := ./cert_file.c
+APP_SOURCES += ./cert_manager.c
+
+APP_SOURCES += $(ITRUSTEE_BUILD_PATH)/src/CA/libteec_adaptor.c
+
+APP_CFLAGS += -fstack-protector-strong -fPIC
+
+APP_CFLAGS += -I$(ITRUSTEE_BUILD_PATH)/include/CA \
+ -I$(ITRUSTEE_BUILD_PATH)/thirdparty/open_source/libboundscheck/include
+
+APP_LDFLAGS += -ldl -lpthread -lboundscheck
+
+APP_LDFLAGS += -z text -z now -z relro -z noexecstack -pie -s
+
+APP_OBJECTS := $(APP_SOURCES:.c=.o)
+$(TARGET_APP): $(APP_SOURCES)
+ $(CC) $(APP_CFLAGS) -o $@ $(APP_SOURCES) $(APP_LDFLAGS)
+
+clean:
+ @rm -f *.o $(TARGET_APP)
diff --git a/test/CA/cert_manager/cert_common.h b/test/CA/cert_manager/cert_common.h
new file mode 100644
index 0000000..c485e0f
--- /dev/null
+++ b/test/CA/cert_manager/cert_common.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: CA for certification management.
+ */
+#ifndef CERT_COMMON_H
+#define CERT_COMMON_H
+
+#define printf_err(msg, ...) fprintf(stderr, msg, ##__VA_ARGS__)
+#define MAX_BUFFER_LEN 8192
+#define MAX_LOG_BUFFER_LEN 10000
+
+#endif
+
diff --git a/test/CA/cert_manager/cert_file.c b/test/CA/cert_manager/cert_file.c
new file mode 100644
index 0000000..87b62e1
--- /dev/null
+++ b/test/CA/cert_manager/cert_file.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: CA for certification management.
+ */
+#include "cert_file.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <tee_client_type.h>
+
+#include "cert_common.h"
+
+bool IsFileExist(const char *path)
+{
+ return access(path, F_OK) == 0;
+}
+
+static int32_t GetFileSize(const char *path, long *size)
+{
+ int32_t ret;
+ struct stat buf;
+ ret = stat(path, &buf);
+ if (ret != 0)
+ printf_err("file stat failed: %s\n", path);
+ else
+ *size = buf.st_size;
+ return ret;
+}
+
+int32_t LoadFromFs(void *buffer, size_t size, const char *filePath, size_t *fileSize)
+{
+ int32_t ret;
+ /* check file name */
+ if (strstr(filePath, ".der") == NULL && strstr(filePath, ".crl") == NULL) {
+ ret = errno;
+ printf_err("only support der or crl file\n");
+ goto end;
+ }
+ /* get file length */
+ ret = GetFileSize(filePath, fileSize);
+ if (ret != 0) {
+ printf_err("get file length failed: %s\n", filePath);
+ goto end;
+ }
+ /* check file content overflow */
+ if (*fileSize > size) {
+ printf_err("file is too long: %s\n", filePath);
+ ret = errno;
+ goto end;
+ }
+ /* read contents from file into buffer */
+ FILE *fp = fopen(filePath, "r");
+ if (fp == NULL) {
+ ret = errno;
+ printf_err("open file failed: %s\n", filePath);
+ goto end;
+ }
+ size_t readLen = fread(buffer, 1, size, fp);
+ if (readLen != *fileSize) {
+ ret = errno;
+ printf_err("read file failed: %s\n", filePath);
+ }
+ (void)fclose(fp);
+end:
+ return ret;
+}
+
+int32_t StoreToFs(const void *buffer, uint32_t size, const char *filePath)
+{
+ int32_t ret = 0;
+ if (buffer == NULL || size == 0 || filePath == NULL) {
+ printf_err("store to fs bad parameters\n");
+ return errno;
+ }
+ /* write size of buffer into file */
+ FILE *fp = fopen(filePath, "w");
+ if (fp == NULL) {
+ ret = errno;
+ printf_err("open file failed: %s\n", filePath);
+ goto end;
+ }
+ size_t writeLen = fwrite(buffer, 1, size, fp);
+ if (writeLen != size) {
+ ret = errno;
+ printf_err("write file failed: %s\n", filePath);
+ }
+ (void)fclose(fp);
+end:
+ return ret;
+}
diff --git a/test/CA/cert_manager/cert_file.h b/test/CA/cert_manager/cert_file.h
new file mode 100644
index 0000000..7d68f40
--- /dev/null
+++ b/test/CA/cert_manager/cert_file.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: CA for certification management.
+ */
+#ifndef CERT_FILE_H
+#define CERT_FILE_H
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <unistd.h>
+
+bool IsFileExist(const char *path);
+int32_t LoadFromFs(void *buffer, size_t size, const char *filePath, size_t* fileSize);
+int32_t StoreToFs(const void *buffer, uint32_t size, const char *filePath);
+
+#endif
diff --git a/test/CA/cert_manager/cert_manager.c b/test/CA/cert_manager/cert_manager.c
new file mode 100644
index 0000000..da24c8f
--- /dev/null
+++ b/test/CA/cert_manager/cert_manager.c
@@ -0,0 +1,368 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: CA for certification management.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <securec.h>
+#include <tee_client_api.h>
+#include <tee_client_type.h>
+#include <limits.h>
+
+#include "cert_file.h"
+#include "cert_common.h"
+
+#define TA_PATH "/usr/bin/4acaf7c8-c652-4643-9b7a-cc07e7a3187a.sec"
+
+/* commands */
+#define CMD_DESTROY "destroy"
+#define CMD_IMPORT "import"
+#define CMD_IMPORT_CRL "import_crl"
+#define CMD_EXPORT "export"
+/* sub commands of export */
+#define CMD_EXPORT_CERT "cert"
+#define CMD_EXPORT_LOG "log"
+
+/* number of command arguments */
+#define CMD_IMPORT_ARGC 3
+#define CMD_EXPORT_CERT_ARGC 4
+#define CMD_EXPORT_LOG_ARGC 3
+#define CMD_DESTROY_ARGC 2
+#define CMD_IMPORT_CRL_ARGC 3
+
+/* index of command parameters */
+#define CMD_NAME 1
+#define CMD_IMPORT_ARG_PATH 2
+#define CMD_EXPORT_SUBCMD 2
+#define CMD_EXPORT_ARG_PATH 3
+
+enum {
+ IPC_IMPORT_CERT = 1,
+ IPC_EXPORT_CERT = 2,
+ IPC_DESTROY_CERT = 3,
+ IPC_EXPORT_LOG = 4,
+ IPC_IMPORT_CRL = 5
+};
+
+enum {
+ CERTMANGER_CMD_IMPORT_CERT = 1,
+ CERTMANGER_CMD_EXPORT = 2,
+ CERTMANGER_CMD_DESTROY = 3,
+ CERTMANGER_CMD_IMPORT_CRL = 4
+};
+
+static TEEC_Result Destroy(TEEC_Session *session)
+{
+ TEEC_Result result;
+ /* invoke ipc command */
+ TEEC_Operation operation = { 0 };
+ operation.started = 1;
+ operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
+ result = TEEC_InvokeCommand(session, IPC_DESTROY_CERT, &operation, NULL);
+ if (result != TEEC_SUCCESS)
+ printf_err("ipc failed\n");
+ return result;
+}
+
+static TEEC_Result ProcessExportResult(TEEC_SharedMemory *sharedMem, uint32_t len, const char *certPath)
+{
+ TEEC_Result result = TEEC_SUCCESS;
+ uint8_t *outbuf = (uint8_t *)malloc(sharedMem->size);
+ if (outbuf == NULL) {
+ printf_err("memory allocate failed\n");
+ result = TEEC_ERROR_OUT_OF_MEMORY;
+ goto end;
+ }
+ if (len == 0)
+ printf_err("warning: empty content\n");
+ /* replaced with memcpy(outbuf, sharedMem->buffer, len) when memcpy_s is not supported */
+ if (memcpy_s(outbuf, sharedMem->size, sharedMem->buffer, len) != EOK) {
+ result = TEEC_ERROR_OUT_OF_MEMORY;
+ printf_err("memcpy_s failed\n");
+ goto end;
+ }
+ if (certPath != NULL) {
+ if (StoreToFs(outbuf, len, certPath) != 0) {
+ result = TEEC_ERROR_WRITE_DATA;
+ printf_err("write to file failed: %s\n", certPath);
+ }
+ } else {
+ printf("%s\n", outbuf);
+ }
+end:
+ if (outbuf != NULL) {
+ free(outbuf);
+ outbuf = NULL;
+ }
+ return result;
+}
+
+static TEEC_Result Export(TEEC_Context *context, TEEC_Session *session, const char *cmdLine, const char *certPath)
+{
+ TEEC_Result result;
+ char realPath[PATH_MAX];
+ /* 1. parse sub-command */
+ uint32_t cmd;
+ if (memcmp(cmdLine, CMD_EXPORT_CERT, sizeof(CMD_EXPORT_CERT)) == 0) {
+ /* check Legality of certPath */
+ if (realpath(certPath, realPath) == NULL) {
+ result = errno;
+ printf_err("illegal certification path: %s\n", certPath);
+ goto end;
+ }
+ cmd = IPC_EXPORT_CERT;
+ } else if (memcmp(cmdLine, CMD_EXPORT_LOG, sizeof(CMD_EXPORT_LOG)) == 0) {
+ cmd = IPC_EXPORT_LOG;
+ } else {
+ result = TEEC_ERROR_INVALID_CMD;
+ printf_err("unknown sub-command: %s\n", cmdLine);
+ goto end;
+ }
+ /* 2. allocate shared memory */
+ TEEC_SharedMemory sharedMem;
+ sharedMem.size = (cmd == IPC_EXPORT_LOG) ? MAX_LOG_BUFFER_LEN : MAX_BUFFER_LEN;
+ sharedMem.flags = TEEC_MEM_OUTPUT | TEEC_MEM_INPUT;
+ result = TEEC_AllocateSharedMemory(context, &sharedMem);
+ if (result != TEEC_SUCCESS) {
+ printf_err("allocate shared memory failed\n");
+ goto end;
+ }
+ /* 3. invoke ipc command */
+ TEEC_Operation operation = { 0 };
+ operation.started = 1;
+ operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
+ operation.params[0].memref.parent = &sharedMem;
+ operation.params[0].memref.offset = 0;
+ operation.params[0].memref.size = sharedMem.size;
+ result = TEEC_InvokeCommand(session, cmd, &operation, NULL);
+ if (result != TEEC_SUCCESS) {
+ printf_err("ipc failed\n");
+ goto free_sharedMem;
+ }
+ /* 4. process ipc result */
+ const char *path = cmd == IPC_EXPORT_CERT ? realPath : NULL;
+ result = ProcessExportResult(&sharedMem, operation.params[0].memref.size, path);
+free_sharedMem:
+ TEEC_ReleaseSharedMemory(&sharedMem);
+end:
+ return result;
+}
+
+static TEEC_Result Import(TEEC_Context *context, TEEC_Session *session, const char *certPath)
+{
+ TEEC_Result result;
+ char realPath[PATH_MAX];
+ /* 1. allocate shared memory */
+ TEEC_SharedMemory sharedMem;
+ sharedMem.size = MAX_BUFFER_LEN;
+ sharedMem.flags = TEEC_MEM_OUTPUT | TEEC_MEM_INPUT;
+ result = TEEC_AllocateSharedMemory(context, &sharedMem);
+ if (result != TEEC_SUCCESS) {
+ printf_err("allocate shared memory failed\n");
+ goto end;
+ }
+ /* 2. check certPath legality */
+ if (realpath(certPath, realPath) == NULL) {
+ printf_err("illegal certification path:%s\n", certPath);
+ result = errno;
+ goto free_sharedMem;
+ }
+ if (!IsFileExist(realPath)) {
+ printf_err("certification not exist:%s\n", certPath);
+ result = TEEC_ERROR_BAD_PARAMETERS;
+ goto free_sharedMem;
+ }
+ /* 3. read cert from filesystem to shared memory */
+ size_t fileSize = 0;
+ if (LoadFromFs(sharedMem.buffer, sharedMem.size, certPath, &fileSize) != 0) {
+ result = TEEC_ERROR_READ_DATA;
+ printf_err("load certification failed\n");
+ goto free_sharedMem;
+ }
+ /* 4. invoke ipc command */
+ TEEC_Operation operation = { 0 };
+ operation.started = 1;
+ operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
+ operation.params[0].memref.parent = &sharedMem;
+ operation.params[0].memref.offset = 0;
+ operation.params[0].memref.size = fileSize;
+ result = TEEC_InvokeCommand(session, IPC_IMPORT_CERT, &operation, NULL);
+ if (result != TEEC_SUCCESS)
+ printf_err("ipc failed\n");
+free_sharedMem:
+ TEEC_ReleaseSharedMemory(&sharedMem);
+end:
+ return result;
+}
+
+static TEEC_Result ImportCrl(TEEC_Context *context, TEEC_Session *session, const char *certPath)
+{
+ TEEC_Result result;
+ char realPath[PATH_MAX];
+ /* 1. allocate shared memory */
+ TEEC_SharedMemory sharedMem;
+ sharedMem.size = MAX_BUFFER_LEN;
+ sharedMem.flags = TEEC_MEM_OUTPUT | TEEC_MEM_INPUT;
+ result = TEEC_AllocateSharedMemory(context, &sharedMem);
+ if (result != TEEC_SUCCESS) {
+ printf_err("allocate crl shared memory failed\n");
+ goto end;
+ }
+ /* 2. check certPath legality */
+ if (realpath(certPath, realPath) == NULL) {
+ printf_err("illegal certification path:%s\n", certPath);
+ result = errno;
+ goto free_sharedMem;
+ }
+ if (!IsFileExist(realPath)) {
+ printf_err("certification not exist:%s\n", certPath);
+ result = TEEC_ERROR_BAD_PARAMETERS;
+ goto free_sharedMem;
+ }
+ /* 3. read cert from filesystem to shared memory */
+ size_t fileSize = 0;
+ if (LoadFromFs(sharedMem.buffer, sharedMem.size, certPath, &fileSize) != 0) {
+ result = TEEC_ERROR_READ_DATA;
+ printf_err("load crl failed\n");
+ goto free_sharedMem;
+ }
+ /* 4. invoke ipc command */
+ TEEC_Operation operation = { 0 };
+ operation.started = 1;
+ operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
+ operation.params[0].memref.parent = &sharedMem;
+ operation.params[0].memref.offset = 0;
+ operation.params[0].memref.size = fileSize;
+ result = TEEC_InvokeCommand(session, IPC_IMPORT_CRL, &operation, NULL);
+ if (result != TEEC_SUCCESS)
+ printf_err("ipc failed\n");
+free_sharedMem:
+ TEEC_ReleaseSharedMemory(&sharedMem);
+end:
+ return result;
+}
+
+static TEEC_UUID g_taId = {
+ 0x4acaf7c8, 0xc652, 0x4643,
+ { 0x9b, 0x7a, 0xcc, 0x07, 0xe7, 0xa3, 0x18, 0x7a }
+};
+
+static TEEC_Result OpenSessionTa(TEEC_Context *context, TEEC_Session *session)
+{
+ TEEC_UUID *uuidp = &g_taId;
+ TEEC_Operation operation = { 0 };
+ context->ta_path = (uint8_t *)TA_PATH;
+ operation.started = 1;
+ operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
+ TEEC_Result result = TEEC_OpenSession(context, session, uuidp, TEEC_LOGIN_IDENTIFY, NULL, &operation, NULL);
+ if (result != TEEC_SUCCESS) {
+ printf_err("teec open session failed,result is 0x%x\n", result);
+ return result;
+ }
+ return TEEC_SUCCESS;
+}
+
+static int32_t GetInputCmd(int argc, char *argv[])
+{
+ if (argc < CMD_DESTROY_ARGC || argc > CMD_EXPORT_CERT_ARGC) {
+ printf_err("wrong parameters num \n");
+ return -1;
+ }
+ /* 1. process command line */
+ if (memcmp(argv[CMD_NAME], CMD_IMPORT, sizeof(CMD_IMPORT)) == 0 && argc == CMD_IMPORT_ARGC) {
+ /* import */
+ return CERTMANGER_CMD_IMPORT_CERT;
+ } else if (memcmp(argv[CMD_NAME], CMD_IMPORT_CRL, sizeof(CMD_IMPORT_CRL)) == 0 && argc == CMD_IMPORT_CRL_ARGC) {
+ /* import crl */
+ return CERTMANGER_CMD_IMPORT_CRL;
+ } else if (memcmp(argv[CMD_NAME], CMD_EXPORT, sizeof(CMD_EXPORT)) == 0 &&
+ (argc == CMD_EXPORT_CERT_ARGC || argc == CMD_EXPORT_LOG_ARGC)) {
+ /* export */
+ return CERTMANGER_CMD_EXPORT;
+ } else if (memcmp(argv[CMD_NAME], CMD_DESTROY, sizeof(CMD_DESTROY)) == 0 && argc == CMD_DESTROY_ARGC) {
+ /* destroy */
+ return CERTMANGER_CMD_DESTROY;
+ } else {
+ /* undefined */
+ printf("invalid command \n");
+ return -1;
+ }
+}
+
+static TEEC_Result SelectCmd(char *argv[], TEEC_Context *context, TEEC_Session *session, int32_t cmd)
+{
+ switch (cmd) {
+ case CERTMANGER_CMD_IMPORT_CERT:
+ return Import(context, session, argv[CMD_IMPORT_ARG_PATH]);
+ case CERTMANGER_CMD_IMPORT_CRL:
+ return ImportCrl(context, session, argv[CMD_IMPORT_ARG_PATH]);
+ case CERTMANGER_CMD_EXPORT:
+ return Export(context, session, argv[CMD_EXPORT_SUBCMD], argv[CMD_EXPORT_ARG_PATH]);
+ case CERTMANGER_CMD_DESTROY:
+ return Destroy(session);
+ default:
+ printf_err("failed, errno input:%d\n", cmd);
+ return TEEC_ERROR_INVALID_CMD;
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ int32_t ret = 0;
+ TEEC_Result result;
+ TEEC_Context context;
+ TEEC_Session session;
+
+ /* 1. check input cmd */
+ int32_t cmd = GetInputCmd(argc, argv);
+ if (cmd <= 0) {
+ printf_err("input parameter errno\n");
+ return -1;
+ }
+
+ /* 2. init context */
+ result = TEEC_InitializeContext(NULL, &context);
+ if (result != TEEC_SUCCESS) {
+ printf_err("teec initialize failed\n");
+ return -1;
+ }
+
+ /* 3. open session */
+ result = OpenSessionTa(&context, &session);
+ if (result != TEEC_SUCCESS) {
+ printf_err("teec open session failed\n");
+ goto final;
+ }
+
+ /* 4. select cmd */
+ result = SelectCmd(argv, &context, &session, cmd);
+ switch (result) {
+ case TEEC_SUCCESS:
+ printf("success\n");
+ break;
+ case TEEC_ERROR_ITEM_NOT_FOUND:
+ printf_err("ssa log is not exist\n");
+ ret = -1;
+ goto close;
+ default:
+ printf_err("certmanger error: %d\n", result);
+ ret = -1;
+ goto close;
+ }
+close:
+ TEEC_CloseSession(&session);
+final:
+ TEEC_FinalizeContext(&context);
+ return ret;
+}
diff --git a/test/CA/helloworld/Makefile b/test/CA/helloworld/Makefile
new file mode 100644
index 0000000..d4392da
--- /dev/null
+++ b/test/CA/helloworld/Makefile
@@ -0,0 +1,24 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2018-2021. All rights reserved.
+CUR_DIR=$(shell pwd)
+ITRUSTEE_BUILD_PATH=${CUR_DIR}/../../../
+
+TARGET_APP := demo_hello
+
+APP_SOURCES := ./ca_demo.c
+
+APP_SOURCES += $(ITRUSTEE_BUILD_PATH)/src/CA/libteec_adaptor.c
+
+APP_CFLAGS += -fstack-protector-strong -fPIC
+
+APP_CFLAGS += -I$(ITRUSTEE_BUILD_PATH)/include/CA \
+
+APP_LDFLAGS += -ldl -lpthread
+
+APP_LDFLAGS += -z text -z now -z relro -z noexecstack -pie -s
+
+APP_OBJECTS := $(APP_SOURCES:.c=.o)
+$(TARGET_APP): $(APP_SOURCES)
+ @$(CC) $(APP_CFLAGS) -o $@ $(APP_SOURCES) $(APP_LDFLAGS)
+
+clean:
+ rm -f *.o $(TARGET_APP)
diff --git a/test/CA/helloworld/ca_demo.c b/test/CA/helloworld/ca_demo.c
index 57c0e35..630ce84 100755
--- a/test/CA/helloworld/ca_demo.c
+++ b/test/CA/helloworld/ca_demo.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: C file template for CA
*/
#include <stdio.h>
@@ -25,10 +26,8 @@
#define OPERATION_START_FLAG 1
#define OUT_BUFF_INDEX 3
-static const TEEC_UUID DEMO_TEMPLATE_UUID =
-{
- 0xe3d37f4a, 0xf24c, 0x48d0,
- { 0x88, 0x84, 0x3b, 0xdd, 0x6c, 0x44, 0xe9, 0x88 }
+static const TEEC_UUID g_demoTemplateUuid = {
+ 0xe3d37f4a, 0xf24c, 0x48d0, { 0x88, 0x84, 0x3b, 0xdd, 0x6c, 0x44, 0xe9, 0x88 }
};
enum {
@@ -57,16 +56,14 @@ int main(void)
operation.paramTypes = TEEC_PARAM_TYPES(
TEEC_NONE,
TEEC_NONE,
- TEEC_MEMREF_TEMP_INPUT,
- TEEC_MEMREF_TEMP_INPUT);
+ TEEC_NONE,
+ TEEC_NONE);
result = TEEC_OpenSession(
- &context, &session, &DEMO_TEMPLATE_UUID, TEEC_LOGIN_IDENTIFY, NULL, &operation, &origin);
+ &context, &session, &g_demoTemplateUuid, TEEC_LOGIN_IDENTIFY, NULL, &operation, &origin);
if (result != TEEC_SUCCESS) {
printf("teec open session failed");
goto cleanup_2;
- } else {
- TEEC_Debug("teec open session successed");
}
operation.started = OPERATION_START_FLAG;
diff --git a/test/CA/libqca/Makefile b/test/CA/libqca/Makefile
new file mode 100644
index 0000000..51d5112
--- /dev/null
+++ b/test/CA/libqca/Makefile
@@ -0,0 +1,42 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2018-2021. All rights reserved.
+CUR_DIR=$(shell pwd)
+ITRUSTEE_BUILD_PATH=${CUR_DIR}/../../../
+
+TARGET_LIB := libqca.so
+TARGET_DIR := output
+TARGET_LIB_BOUNDSCHECK := libboundscheck.so
+
+LIB_SOURCES := src/ra_operate_api.c
+
+LIB_SOURCES += $(ITRUSTEE_BUILD_PATH)/src/CA/libteec_adaptor.c
+
+LIB_CFLAGS += -Werror -Wall -Wextra -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -s -fPIC -D_FORTIFY_SOURCE=2 -O2
+
+LIB_CFLAGS += -I$(ITRUSTEE_BUILD_PATH)/thirdparty/open_source/libboundscheck/include
+LIB_CFLAGS += -I$(ITRUSTEE_BUILD_PATH)/include/CA
+LIB_CFLAGS += -I./include
+
+LIB_LDFLAGS += -ldl -lpthread
+LIB_LDFLAGS += -lboundscheck -L$(ITRUSTEE_BUILD_PATH)/thirdparty/open_source/libboundscheck/lib/
+
+LIB_OBJECTS := $(LIB_SOURCES:.c=.o)
+
+all: $(TARGET_LIB_BOUNDSCHECK) $(TARGET_LIB)
+
+LIB_BOUNDSCHECK_DIR := $(ITRUSTEE_BUILD_PATH)/thirdparty/open_source/libboundscheck/
+$(TARGET_LIB_BOUNDSCHECK):
+ @echo "compile libboundscheck start"
+ @$(MAKE) -C $(LIB_BOUNDSCHECK_DIR)
+ @echo "compile libboundscheck finish"
+
+$(TARGET_LIB): $(TARGET_LIB_BOUNDSCHECK) $(LIB_SOURCES)
+ @echo "start compile libqca.so ......"
+ @$(CC) -shared $(LIB_CFLAGS) -o $@ $(LIB_SOURCES) $(LIB_LDFLAGS)
+ @mkdir -p $(TARGET_DIR)
+ @mv $(TARGET_LIB) $(TARGET_DIR)
+ @echo "compile libqca.so done!"
+
+clean:
+ $(MAKE) -C $(LIB_BOUNDSCHECK_DIR) clean
+ rm -rf $(LIB_OBJECTS)
+ rm -rf $(TARGET_DIR)
diff --git a/test/CA/libqca/include/ra_client_api.h b/test/CA/libqca/include/ra_client_api.h
new file mode 100644
index 0000000..dd793a3
--- /dev/null
+++ b/test/CA/libqca/include/ra_client_api.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#ifndef LIBQCA_H
+#define LIBQCA_H
+#include <tee_client_type.h>
+
+struct ra_buffer_data {
+ uint32_t size;
+ uint8_t *buf;
+};
+
+TEEC_Result RemoteAttest(struct ra_buffer_data *in, struct ra_buffer_data *out);
+#endif
diff --git a/test/CA/libqca/src/ra_log.h b/test/CA/libqca/src/ra_log.h
new file mode 100644
index 0000000..1cb9d38
--- /dev/null
+++ b/test/CA/libqca/src/ra_log.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#ifndef LIBQCA_RA_LOG_H
+#define LIBQCA_RA_LOG_H
+
+#define TAG_WARN "[warn]"
+#define TAG_INFO "[info]"
+#define TAG_ERROR "[error]"
+#define TAG_DEBUG "[debug]"
+
+#define LIBQCA_PREFIX "libqca"
+
+#define tloge(fmt, args...) printf("[%s] %s %d:" fmt " ", LIBQCA_PREFIX, TAG_ERROR, __LINE__, ##args)
+#define tlogd(fmt, args...) printf("[%s] %s %d:" fmt " ", LIBQCA_PREFIX, TAG_DEBUG, __LINE__, ##args)
+#define tlogi(fmt, args...) printf("[%s] %s %d:" fmt " ", LIBQCA_PREFIX, TAG_INFO, __LINE__, ##args)
+#define tlogw(fmt, args...) printf("[%s] %s %d:" fmt " ", LIBQCA_PREFIX, TAG_WARN, __LINE__, ##args)
+
+#endif
diff --git a/test/CA/libqca/src/ra_operate_api.c b/test/CA/libqca/src/ra_operate_api.c
new file mode 100644
index 0000000..810f11f
--- /dev/null
+++ b/test/CA/libqca/src/ra_operate_api.c
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#include "ra_operate_api.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "tee_client_api.h"
+#include "securec.h"
+#include "ra_log.h"
+#include "ra_client_api.h"
+
+static const TEEC_UUID g_tee_qta_uuid = {
+ 0xe08f7eca, 0xe875, 0x440e, {
+ 0x9a, 0xb0, 0x5f, 0x38, 0x11, 0x36, 0xc6, 0x00
+ }
+};
+
+static TEEC_Result set_remote_attest_out_data(TEEC_SharedMemory *shared_out, uint32_t out_size,
+ struct ra_buffer_data *out)
+{
+ if (out == NULL || out->buf == NULL) {
+ return TEEC_SUCCESS;
+ }
+ if (out_size == 0) {
+ out->size = out_size;
+ return TEEC_SUCCESS;
+ } else if (out_size > out->size) {
+ tloge("out size is too short\n");
+ return TEEC_ERROR_SHORT_BUFFER;
+ }
+ if (memcpy_s(out->buf, out->size, shared_out->buffer, out_size) != EOK) {
+ tloge("memcpy shared out buffer failed\n");
+ return TEEC_ERROR_GENERIC;
+ }
+ out->size = out_size;
+ return TEEC_SUCCESS;
+}
+
+static TEEC_Result handle_remote_attest(TEEC_Context *context, TEEC_Session *session, struct ra_buffer_data *in,
+ struct ra_buffer_data *out)
+{
+ uint32_t origin;
+ TEEC_Operation operation = {0};
+ operation.started = 1;
+ operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_PARTIAL_OUTPUT,
+ TEEC_VALUE_OUTPUT, TEEC_NONE);
+
+ TEEC_SharedMemory shared_in;
+ (void)memset_s(&shared_in, sizeof(shared_in), 0, sizeof(shared_in));
+ shared_in.size = in->size;
+ shared_in.flags = TEEC_MEM_INPUT;
+ TEEC_Result result = TEEC_AllocateSharedMemory(context, &shared_in);
+ if (result != TEEC_SUCCESS) {
+ tloge("allocate shared input failed, result = 0x%x.\n", result);
+ return result;
+ }
+ operation.params[0].memref.parent = &shared_in;
+ operation.params[0].memref.size = shared_in.size;
+ operation.params[0].memref.offset = 0;
+ (void)memcpy_s(shared_in.buffer, in->size, in->buf, in->size);
+
+ TEEC_SharedMemory shared_out;
+ (void)memset_s(&shared_out, sizeof(shared_out), 0, sizeof(shared_out));
+ shared_out.flags = TEEC_MEM_OUTPUT;
+ if (out != NULL && out->buf != NULL) {
+ shared_out.size = out->size;
+ result = TEEC_AllocateSharedMemory(context, &shared_out);
+ if (result != TEEC_SUCCESS) {
+ tloge("allocate shared output failed, result = 0x%x.\n", result);
+ goto clear1;
+ }
+ (void)memset_s(out->buf, out->size, 0, out->size);
+ (void)memset_s(shared_out.buffer, shared_out.size, 0, shared_out.size);
+ }
+ operation.params[1].memref.parent = &shared_out;
+ operation.params[1].memref.size = shared_out.size;
+ operation.params[1].memref.offset = 0;
+
+ result = TEEC_InvokeCommand(session, REMOTE_ATTEST_CMD, &operation, &origin);
+ if (result != TEEC_SUCCESS) {
+ tloge("invoke command failed, result = 0x%x\n", result);
+ goto clear2;
+ }
+
+ result = set_remote_attest_out_data(&shared_out, operation.params[2].value.a, out);
+clear2:
+ if (out != NULL && out->buf != NULL)
+ TEEC_ReleaseSharedMemory(&shared_out);
+clear1:
+ TEEC_ReleaseSharedMemory(&shared_in);
+ return result;
+}
+
+TEEC_Result RemoteAttest(struct ra_buffer_data *in, struct ra_buffer_data *out)
+{
+ if (in == NULL || in->buf == NULL || in->size == 0 || in->size > PARAMS_RESERVED_SIZE) {
+ tloge("check input failed\n");
+ return TEEC_ERROR_BAD_PARAMETERS;
+ }
+
+ if (out != NULL) {
+ if (out->size > SHAREMEM_LIMIT || (out->buf == NULL && out->size > 0) ||
+ (out->buf != NULL && out->size < OUT_DATA_RESERVED_SIZE)) {
+ tloge("check output failed\n");
+ return TEEC_ERROR_BAD_PARAMETERS;
+ }
+ }
+
+ TEEC_Context context = {0};
+ TEEC_Session session = {0};
+ TEEC_Operation operation = {0};
+ TEEC_UUID uuid = g_tee_qta_uuid;
+
+ TEEC_Result result = TEEC_InitializeContext(NULL, &context);
+ if (result != TEEC_SUCCESS) {
+ tloge("init context is failed, result is 0x%x\n", result);
+ return result;
+ }
+
+ operation.started = 1;
+ operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
+ result = TEEC_OpenSession(&context, &session, &uuid, TEEC_LOGIN_IDENTIFY, NULL, &operation, NULL);
+ if (result != TEEC_SUCCESS) {
+ tloge("open session is failed, result is 0x%x\n", result);
+ goto cleanup_1;
+ }
+
+ result = handle_remote_attest(&context, &session, in, out);
+ if (result != TEEC_SUCCESS) {
+ tloge("handle remote attest failed, result is 0x%x\n", result);
+ goto cleanup_2;
+ }
+
+cleanup_2:
+ TEEC_CloseSession(&session);
+cleanup_1:
+ TEEC_FinalizeContext(&context);
+ return result;
+}
diff --git a/test/CA/libqca/src/ra_operate_api.h b/test/CA/libqca/src/ra_operate_api.h
new file mode 100644
index 0000000..0269712
--- /dev/null
+++ b/test/CA/libqca/src/ra_operate_api.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#ifndef LIBQCA_RA_OPERATE_H
+#define LIBQCA_RA_OPERATE_H
+
+#include <stdint.h>
+#include "tee_client_api.h"
+#include "ra_client_api.h"
+
+#define SHAREMEM_LIMIT (0x100000) /* 1 MB */
+#define PARAMS_RESERVED_SIZE (0x2000)
+#define OUT_DATA_RESERVED_SIZE (0x3000)
+#define REMOTE_ATTEST_CMD (0x1001)
+
+#endif
diff --git a/test/TA/cert_manager/CMakeLists.txt b/test/TA/cert_manager/CMakeLists.txt
new file mode 100644
index 0000000..47a92b9
--- /dev/null
+++ b/test/TA/cert_manager/CMakeLists.txt
@@ -0,0 +1,38 @@
+# sdk cmake.
+# Copyright (c) Huawei Technologies Co., Ltd. 2021-2022. All rights reserved.
+cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
+project(tee_sdk C)
+
+if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
+ message(FATAL_ERROR "Forbid compiling in the source tree")
+endif()
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/config.cmake)
+include($ENV{ITRUSTEE_BUILD_PATH}/build/cmake/common.cmake)
+
+set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
+set(CURRENT_TARGET_SO "combine")
+
+set(SDK_C_SOURCES
+ ${SDK_C_SOURCES}
+ src/cert_logger.c
+ src/cert_manager.c
+)
+
+set(COMMON_INCLUDES
+ ${COMMON_INCLUDES}
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../include/TA
+)
+
+add_library(${CURRENT_TARGET_SO} SHARED ${SDK_C_SOURCES})
+target_include_directories(${CURRENT_TARGET_SO} PUBLIC ${COMMON_INCLUDES})
+target_compile_options(${CURRENT_TARGET_SO} PRIVATE ${COMMON_CFLAGS})
+target_link_options(${CURRENT_TARGET_SO} PRIVATE ${COMMON_LDFLAGS})
+
+add_custom_command(
+ TARGET ${CURRENT_TARGET_SO} POST_BUILD
+ COMMAND sh $ENV{ITRUSTEE_BUILD_PATH}/build/tools/ta_entry_check.sh ${CMAKE_READELF} ${CMAKE_CURRENT_SOURCE_DIR}/libcombine.so n y ${TARGET_IS_ARM64}
+ COMMAND python3 -B $ENV{ITRUSTEE_BUILD_PATH}/build/signtools/signtool_v3.py ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} --privateCfg $ENV{ITRUSTEE_BUILD_PATH}/build/signtools/config_cloud.ini
+)
diff --git a/test/TA/cert_manager/Makefile b/test/TA/cert_manager/Makefile
new file mode 100644
index 0000000..19ef02c
--- /dev/null
+++ b/test/TA/cert_manager/Makefile
@@ -0,0 +1,34 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2021-2022. All rights reserved.
+include ./config.mk
+include ../../../build/mk/common.mk
+
+# set the compilation tool chain example : export CC=path_to_gcc ; export LD=path_to_ld
+
+SRC += $(wildcard src/*.c)
+
+# set header directory
+INCLUDEDIR += -I${CUR_DIR}/include
+INCLUDEDIR += -I${CUR_DIR}/src
+INCLUDEDIR += -I${CUR_DIR}/../../../include/TA
+
+#set libhwsecurec path example : INCLUDEDIR += -Ipath_to_libhwsecurec
+
+# set target
+COBJS := $(SRC:%.c=%.o)
+TARGET = $(COBJS)
+
+sec_binary:combine
+ python3 -B ${SIGNTOOL_DIR}/signtool_v3.py ${CUR_DIR} ${CUR_DIR} --privateCfg ${SIGNTOOL_DIR}/config_cloud.ini
+
+combine: $(TARGET)
+ $(LD) $(LDFLAGS) $(TARGET) $(EXTRAO) -o libcombine.so
+ bash $(ITRUSTEE_BUILD_PATH)/build/tools/ta_entry_check.sh $(READELF) $(shell pwd)/libcombine.so n y $(TARGET_IS_ARM64)
+
+src/%.o: ./src/%.c
+ $(CC) $(CFLAGS) $(INCLUDEDIR) -c $< -o $@
+
+%.o: %.c
+ $(CC) $(CFLAGS) $(INCLUDEDIR) -c $< -o $@
+
+clean:
+ rm -f $(COBJS) *.so *.sec
diff --git a/test/TA/cert_manager/config.cmake b/test/TA/cert_manager/config.cmake
new file mode 100644
index 0000000..933d051
--- /dev/null
+++ b/test/TA/cert_manager/config.cmake
@@ -0,0 +1,11 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+#
+# API_LEVEL which indicates the GP API version of TA
+# API_LEVEL=1 indicates GP 1.0 which is the current version of itrustee
+# API_LEVEL=2 indicates GP 1.1.1 which is the current version of the partner
+# API_LEVEL=3 indicates GP 1.2 which is the version we both going to support
+# If no API_LEVEL is specified, API of GP 1.0 will be taken
+set(COMMON_CFLAGS -DAPI_LEVEL=1)
+if ("${TARGET_IS_ARM64}" STREQUAL "")
+ set(TARGET_IS_ARM64 y)
+endif()
\ No newline at end of file
diff --git a/test/TA/cert_manager/config.mk b/test/TA/cert_manager/config.mk
new file mode 100644
index 0000000..5e4ccfa
--- /dev/null
+++ b/test/TA/cert_manager/config.mk
@@ -0,0 +1,12 @@
+#
+# Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+#
+# API_LEVEL which indicates the GP API version of TA
+# API_LEVEL=1 indicates GP 1.0 which is the current version of itrustee
+# API_LEVEL=2 indicates GP 1.1.1 which is the current version of the partner
+# API_LEVEL=3 indicates GP 1.2 which is the version we both going to support
+# If no API_LEVEL is specified, API of GP 1.0 will be taken
+CFLAGS += -DAPI_LEVEL=1
+ifeq ($(TARGET_IS_ARM64),)
+ TARGET_IS_ARM64 = y
+endif
\ No newline at end of file
diff --git a/test/TA/cert_manager/config.sh b/test/TA/cert_manager/config.sh
new file mode 100644
index 0000000..ad3c822
--- /dev/null
+++ b/test/TA/cert_manager/config.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+# Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+# This script is used to compile the demo sdk.
+set -e
+
+export SOURCE_PATH=$(dirname $0)
+export ABS_SOURCE_PATH=$(cd ${SOURCE_PATH};pwd)
+export ITRUSTEE_BUILD_PATH=${ABS_SOURCE_PATH}/../../..
+
+#clean
+if [ "$#" -eq 1 ] && [ "$1"x = "clean"x ]; then
+ rm -f *.o *.so *.sec
+ if [ -d "cmake_build" ]; then
+ rm -rf cmake_build
+ echo "rm -rf cmake_build"
+ fi
+ exit 0
+fi
+
+echo "Cmake compile TA begin"
+if [ -d "cmake_build" ]; then
+ rm -rf cmake_build
+ echo "rm -rf cmake_build"
+fi
+mkdir -p cmake_build
+echo "mkdir cmake_build"
+cd cmake_build/
+
+cmake -DCMAKE_TOOLCHAIN_FILE=${ITRUSTEE_BUILD_PATH}/build/cmake/aarch64_toolchain.cmake ..
+
+make VERBOSE=1
+
+cd ..
+rm -rf cmake_build
\ No newline at end of file
diff --git a/test/TA/cert_manager/include/cert_config.h b/test/TA/cert_manager/include/cert_config.h
new file mode 100644
index 0000000..dee55d0
--- /dev/null
+++ b/test/TA/cert_manager/include/cert_config.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2020-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: declaration of logger tool interfaces.
+ */
+#ifndef CERT_CONFIG_H
+#define CERT_CONFIG_H
+
+#define CERT_MANAGER_DEPLOY_PATH "/usr/bin/certmanager"
+#define CERT_MANAGER_DEPLOY_USER "root"
+
+/*
+ * defines the public key for verifying the imported certification.
+ */
+const char g_root_public_key[] = {
+/* add public_key len 550*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+#endif
diff --git a/test/TA/cert_manager/manifest.txt b/test/TA/cert_manager/manifest.txt
new file mode 100644
index 0000000..c3f9b41
--- /dev/null
+++ b/test/TA/cert_manager/manifest.txt
@@ -0,0 +1,7 @@
+gpd.ta.appID: 4acaf7c8-c652-4643-9b7a-cc07e7a3187a
+gpd.ta.service_name: certmanager
+gpd.ta.singleInstance: true
+gpd.ta.multiSession: true
+gpd.ta.instanceKeepAlive: false
+gpd.ta.dataSize: 2097152
+gpd.ta.stackSize: 32768
\ No newline at end of file
diff --git a/test/TA/cert_manager/src/cert_logger.c b/test/TA/cert_manager/src/cert_logger.c
new file mode 100644
index 0000000..99b1dfb
--- /dev/null
+++ b/test/TA/cert_manager/src/cert_logger.c
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: logger tool implementations.
+ */
+#include "cert_logger.h"
+
+#include <tee_log.h>
+#include <tee_trusted_storage_api.h>
+#include <string.h>
+#include <stdlib.h>
+#include <securec.h>
+
+static const char *g_log_path = "dyn_crt_op.log";
+
+static TEE_Result log_open(TEE_ObjectHandle *obj, uint32_t flag)
+{
+ uint32_t storage_id = TEE_OBJECT_STORAGE_PRIVATE;
+ uint32_t create_flag = TEE_DATA_FLAG_ACCESS_WRITE |
+ TEE_DATA_FLAG_ACCESS_WRITE_META |
+ TEE_DATA_FLAG_ACCESS_READ;
+ /* open log file */
+ TEE_Result ret = TEE_OpenPersistentObject(storage_id, g_log_path, strlen(g_log_path), flag, obj);
+ if (ret == TEE_ERROR_ITEM_NOT_FOUND &&
+ (((flag & TEE_DATA_FLAG_ACCESS_WRITE) != 0) || ((flag & TEE_DATA_FLAG_ACCESS_WRITE_META) != 0) ||
+ ((flag & TEE_DATA_FLAG_SHARE_WRITE) != 0))) {
+ /* create it if file is not exist when writing or changing metadata */
+ tlogi("file not exist, creating: %s\n", g_log_path);
+ ret = TEE_CreatePersistentObject(storage_id, g_log_path, strlen(g_log_path),
+ create_flag, TEE_HANDLE_NULL,
+ NULL, 0, obj);
+ if (ret != TEE_SUCCESS)
+ tloge("create file failed: %s\n", g_log_path);
+ }
+ return ret;
+}
+
+/* truncate if the file beyonds MAX_LOG_LINE_NUM */
+static TEE_Result log_truncate(TEE_ObjectHandle obj)
+{
+ TEE_Result ret;
+ char buf[MAX_LOG_SIZE] = { 0 };
+ uint32_t len = 0;
+ /* 1. read all content in the log file into memory buf */
+ ret = TEE_SeekObjectData(obj, 0, TEE_DATA_SEEK_SET);
+ if (ret != TEE_SUCCESS) {
+ tloge("seek file failed: %s\n", g_log_path);
+ goto end;
+ }
+ ret = TEE_ReadObjectData(obj, buf, sizeof(buf), &len);
+ if (ret != TEE_SUCCESS) {
+ tloge("read file failed: %s\n", g_log_path);
+ goto end;
+ }
+ /* 2. statistic line-breaks for counting lines */
+ int line_cnt = 0;
+ for (uint32_t i = 0; i < len; ++i) {
+ if (buf[i] == '\n')
+ line_cnt += 1;
+ }
+ /* 3. if the line number is overflow, remove the first (line_cnt - MAX_LOG_LINE_NUM) lines */
+ if (line_cnt > MAX_LOG_LINE_NUM) {
+ /* line break */
+ uint32_t line_break_idx = 0;
+ uint32_t remain = line_cnt - MAX_LOG_LINE_NUM;
+ for (uint32_t i = 0; remain > 0; ++i) {
+ if (buf[i] == '\n') {
+ line_break_idx = i;
+ remain--;
+ }
+ }
+ /* 3.1 override the first (line_cnt - MAX_LOG_LINE_NUM) lines */
+ uint32_t resize_to = len - line_break_idx - 1;
+ if (memmove_s(buf, sizeof(buf), buf + line_break_idx + 1, resize_to) != EOK) {
+ tloge("memory movement failed\n");
+ ret = TEE_ERROR_OUT_OF_MEMORY;
+ goto end;
+ }
+ /* 3.2 write back to the start of file */
+ ret = TEE_SeekObjectData(obj, 0, TEE_DATA_SEEK_SET);
+ if (ret != TEE_SUCCESS) {
+ tloge("seek file failed: %s\n", g_log_path);
+ goto end;
+ }
+ ret = TEE_WriteObjectData(obj, buf, resize_to);
+ if (ret != TEE_SUCCESS)
+ tloge("write file failed: %s\n", g_log_path);
+ /* 3.3 truncate to correct size */
+ ret = TEE_TruncateObjectData(obj, resize_to);
+ if (ret != TEE_SUCCESS)
+ tloge("truncate file failed: %s\n", g_log_path);
+ }
+end:
+ return ret;
+}
+
+/* write a NULL-terminated string into log */
+TEE_Result cert_log_write(char *log_info)
+{
+ TEE_Result ret;
+ TEE_ObjectHandle obj;
+ if (log_info == NULL)
+ return TEE_ERROR_BAD_PARAMETERS;
+ /* 1. open log file */
+ uint32_t open_flag = TEE_DATA_FLAG_ACCESS_WRITE |
+ TEE_DATA_FLAG_SHARE_WRITE |
+ TEE_DATA_FLAG_SHARE_READ |
+ TEE_DATA_FLAG_ACCESS_READ;
+ ret = log_open(&obj, open_flag);
+ if (ret != TEE_SUCCESS) {
+ tloge("open file failed: %s\n", g_log_path);
+ goto end;
+ }
+ /* 2. append log to the end */
+ ret = TEE_SeekObjectData(obj, 0, TEE_DATA_SEEK_END);
+ if (ret != TEE_SUCCESS) {
+ tloge("seek file failed: %s\n", g_log_path);
+ goto close;
+ }
+ ret = TEE_WriteObjectData(obj, log_info, strlen(log_info));
+ if (ret != TEE_SUCCESS) {
+ tloge("write file failed: %s\n", g_log_path);
+ goto close;
+ }
+ /* 3. truncate the file for keeping the number of lines MAX_LOG_LINE_NUM */
+ ret = log_truncate(obj);
+ if (ret != TEE_SUCCESS) {
+ tloge("roll back file failed: %s\n", g_log_path);
+ goto close;
+ }
+close:
+ (void)TEE_SyncPersistentObject(obj);
+ TEE_CloseObject(obj);
+end:
+ return ret;
+}
+
+TEE_Result cert_log_read(char *dst, uint64_t dst_len, uint32_t *read_len)
+{
+ TEE_Result ret;
+ TEE_ObjectHandle obj;
+ if (dst == NULL || read_len == NULL)
+ return TEE_ERROR_BAD_PARAMETERS;
+ /* 1. open log file */
+ uint32_t open_flag = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_SHARE_READ;
+ ret = log_open(&obj, open_flag);
+ if (ret != TEE_SUCCESS) {
+ tloge("open file failed: %s\n", g_log_path);
+ goto end;
+ }
+ /* 2. read log file */
+ ret = TEE_ReadObjectData(obj, dst, dst_len, read_len);
+ if (ret != TEE_SUCCESS)
+ tloge("read file failed: %s\n", g_log_path);
+ TEE_CloseObject(obj);
+end:
+ return ret;
+}
diff --git a/test/TA/cert_manager/src/cert_logger.h b/test/TA/cert_manager/src/cert_logger.h
new file mode 100644
index 0000000..ec8ebeb
--- /dev/null
+++ b/test/TA/cert_manager/src/cert_logger.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: declaration of logger tool interfaces.
+ */
+#ifndef CERT_LOGGER_H
+#define CERT_LOGGER_H
+
+#include <tee_defines.h>
+
+/*
+ * MAX_LOG_LINE_NUM: defines the max line numbers of which the operation log records.
+ * MAX_LOG_LINE_LEN: defines the max length of each operation log entry.
+ * MAX_LOG_SIZE: defines the max size of the operation log file.
+ * Notice: MAX_LOG_LINE_NUM * MAX_LOG_LINE_LEN <= MAX_LOG_SIZE
+ */
+#define MAX_LOG_LINE_NUM 60
+#define MAX_LOG_LINE_LEN 150
+#define MAX_LOG_SIZE 10000
+
+TEE_Result cert_log_write(char *log_info);
+TEE_Result cert_log_read(char *dst, uint64_t dst_len, uint32_t *read_len);
+
+#endif
diff --git a/test/TA/cert_manager/src/cert_manager.c b/test/TA/cert_manager/src/cert_manager.c
new file mode 100644
index 0000000..7764af8
--- /dev/null
+++ b/test/TA/cert_manager/src/cert_manager.c
@@ -0,0 +1,301 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ * Description: do cert management on kunpeng.
+ */
+#include <stdlib.h>
+#include <tee_log.h>
+#include <permsrv_api_cert.h>
+#include <permsrv_api_legacy.h>
+#include <tee_ext_api.h>
+#include <securec.h>
+#include <time.h>
+#include <cert_config.h>
+
+#include "cert_logger.h"
+
+enum {
+ SAVE_CERT_CMD = 1,
+ SEARCH_CERT_CMD = 2,
+ DEL_CERT_CMD = 3,
+ SEARCH_LOG_CMD = 4,
+ SEND_CRL_CMD = 5
+};
+
+#define ACTION_CRT_EXPORT "export"
+#define ACTION_CRT_IMPORT "cert_import"
+#define ACTION_CRL_IMPORT "crl_import"
+#define ACTION_CRT_REMOVE "remove"
+#define ACTION_CRT_UNDEFINED "undefined"
+#define MAX_BUFFER_LEN 8192
+#define MAX_LOG_BUFFER_LEN 10000
+#define BASE_YEAR 1900
+#define BASE_MON 1
+
+static void log_action(const char *action, TEE_Result result)
+{
+ /* format result */
+ char *suc = result == TEE_SUCCESS ? "true" : "false";
+ /* get system time */
+ struct timespec time;
+ clock_gettime(CLOCK_REALTIME, &time);
+ struct tm *lt = localtime(&time.tv_sec);
+ if (lt == NULL) {
+ tloge("get UTC time failed\n");
+ return;
+ }
+ /* format log entry: "[yyyy/mm/dd HH:MM:SS] ACTION: xxx, SUCCESS: true/false " */
+ char buf[MAX_LOG_LINE_LEN];
+ if (snprintf_s(buf, sizeof(buf), sizeof(buf) - 1,
+ "[UTC:%04d/%02d/%02d %02d:%02d:%02d] ACTION: %s, SUCCESS: %s.\n",
+ lt->tm_year + BASE_YEAR, lt->tm_mon + BASE_MON, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec,
+ action, suc) < 0) {
+ tloge("format log entry failed\n");
+ return;
+ }
+ /* write into log file on ssa */
+ if (cert_log_write(buf) != TEE_SUCCESS)
+ tloge("write to log failed\n");
+}
+
+/* ----------------------------------------------------------------------------
+ * Trusted Application Entry Points
+ * ----------------------------------------------------------------------------
+ */
+
+static TEE_Result cert_verify_and_send(uint32_t param_types, TEE_Param params[4])
+{
+ TEE_Result ret;
+ const char *pubkey = g_root_public_key;
+ uint32_t pubkey_len = sizeof(g_root_public_key) / sizeof(char);
+ if (!check_param_type(param_types,
+ TEE_PARAM_TYPE_MEMREF_INPUT,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE)) {
+ tloge("Bad expected parameter types, 0x%x.\n", param_types);
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ if (params[0].memref.size == 0 || params[0].memref.size > MAX_BUFFER_LEN || params[0].memref.buffer == NULL) {
+ tloge("Bad expected parameter.\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ ret = ta_signing_cert_import(params[0].memref.buffer, params[0].memref.size, pubkey, pubkey_len);
+ if (ret != TEE_SUCCESS)
+ tloge("cert store failed\n");
+ return ret;
+}
+
+static TEE_Result crl_send_service(uint32_t param_types, TEE_Param params[4])
+{
+ TEE_Result ret;
+ if (!check_param_type(param_types,
+ TEE_PARAM_TYPE_MEMREF_INPUT,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE)) {
+ tloge("Bad expected parameter types, 0x%x.\n", param_types);
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ if (params[0].memref.size == 0 || params[0].memref.size > MAX_BUFFER_LEN || params[0].memref.buffer == NULL) {
+ tloge("Bad expected parameter.\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ ret = TEE_EXT_crl_cert_process(params[0].memref.buffer, params[0].memref.size);
+ if (ret != TEE_SUCCESS)
+ tloge("crl send failed\n");
+ return ret;
+}
+
+static TEE_Result cert_search_service(uint32_t param_types, uint32_t cmd_id, TEE_Param params[4])
+{
+ TEE_Result ret = TEE_SUCCESS;
+ uint32_t limit = params[0].memref.size;
+ uint32_t len = 0;
+ uint8_t *dst = NULL;
+ if (!check_param_type(param_types,
+ TEE_PARAM_TYPE_MEMREF_INOUT,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE)) {
+ tloge("Bad expected parameter types, 0x%x.\n", param_types);
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ if (params[0].memref.size == 0 || params[0].memref.size > MAX_LOG_BUFFER_LEN || params[0].memref.buffer == NULL) {
+ tloge("Bad expected parameter.\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ dst = (uint8_t *)malloc(params[0].memref.size);
+ if (dst == NULL) {
+ tloge("malloc failed");
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+ switch (cmd_id) {
+ case SEARCH_CERT_CMD:
+ ret = ta_signing_cert_export((uint8_t *)dst, &len, limit);
+ break;
+ case SEARCH_LOG_CMD:
+ ret = cert_log_read((char *)dst, limit, &len);
+ if (len < limit) {
+ dst[len++] = '\0';
+ } else {
+ dst[limit - 1] = '\0';
+ len = limit;
+ }
+ break;
+ default:
+ break;
+ }
+ if (memcpy_s(params[0].memref.buffer, limit, dst, len) != EOK) {
+ free(dst);
+ dst = NULL;
+ return TEE_ERROR_SECURITY;
+ }
+
+ params[0].memref.size = len;
+ if (ret != TEE_SUCCESS)
+ tloge("cert search failed\n");
+ free(dst);
+ dst = NULL;
+ return ret;
+}
+
+static TEE_Result cert_delete_service(uint32_t param_types)
+{
+ TEE_Result ret;
+ if (!check_param_type(param_types,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE)) {
+ tloge("Bad expected parameter types, 0x%x.\n", param_types);
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+ ret = ta_signing_cert_destroy();
+ if (ret != TEE_SUCCESS)
+ tloge("cert delete failed\n");
+ return ret;
+}
+
+/**
+ * Function TA_CreateEntryPoint
+ * Description:
+ * The function TA_CreateEntryPoint is the Trusted Application's constructor,
+ * which the Framework calls when it creates a new instance of the Trusted Application.
+ */
+TEE_Result TA_CreateEntryPoint(void)
+{
+ TEE_Result ret = addcaller_ca_exec(CERT_MANAGER_DEPLOY_PATH, CERT_MANAGER_DEPLOY_USER);
+ if (ret != TEE_SUCCESS)
+ tloge("TA_CreateEntryPoint: AddCaller_CA_exec failed.\n");
+ return ret;
+}
+
+/**
+ * Function TA_OpenSessionEntryPoint
+ * Description:
+ * The Framework calls the function TA_OpenSessionEntryPoint
+ * when a client requests to open a session with the Trusted Application.
+ * The open session request may result in a new Trusted Application instance
+ * being created.
+ */
+TEE_Result TA_OpenSessionEntryPoint(uint32_t paramTypes,
+ TEE_Param params[4], void** sessionContext)
+{
+ /* -Wunused-parameter */
+ (void)paramTypes;
+ /* -Wunused-parameter */
+ (void)params;
+ /* -Wunused-parameter */
+ (void)sessionContext;
+ SLogTrace("---- TA_OpenSessionEntryPoint -------- ");
+ return TEE_SUCCESS;
+}
+
+/**
+ * Function TA_InvokeCommandEntryPoint
+ * Description:
+ * The Framework calls this function when the client invokes a command
+ * within the given session.
+ */
+TEE_Result TA_InvokeCommandEntryPoint(void* sessionContext, uint32_t cmd_id,
+ uint32_t paramTypes, TEE_Param params[4])
+{
+ /* -Wunused-parameter */
+ (void)sessionContext;
+ TEE_Result ret;
+ char *action = NULL;
+ switch (cmd_id) {
+ case SAVE_CERT_CMD:
+ action = ACTION_CRT_IMPORT;
+ ret = cert_verify_and_send(paramTypes, params);
+ if (ret != TEE_SUCCESS)
+ tloge("certificate restoring failed\n");
+ break;
+ case SEND_CRL_CMD:
+ action = ACTION_CRL_IMPORT;
+ ret = crl_send_service(paramTypes, params);
+ if (ret != TEE_SUCCESS)
+ tloge("crl restoring failed\n");
+ break;
+ case SEARCH_CERT_CMD:
+ /* fall through: to be handled with the same function as SEARCH_LOG_CMD case */
+ case SEARCH_LOG_CMD:
+ action = ACTION_CRT_EXPORT;
+ ret = cert_search_service(paramTypes, cmd_id, params);
+ if (ret != TEE_SUCCESS)
+ tloge("certificate searching failed\n");
+ break;
+ case DEL_CERT_CMD:
+ action = ACTION_CRT_REMOVE;
+ ret = cert_delete_service(paramTypes);
+ if (ret != TEE_SUCCESS)
+ tloge("certificate delete failed\n");
+ break;
+ default:
+ action = ACTION_CRT_UNDEFINED;
+ ret = TEE_ERROR_BAD_PARAMETERS;
+ break;
+ }
+ log_action(action, ret);
+ return ret;
+}
+
+/**
+ * Function TA_CloseSessionEntryPoint
+ * Description:
+ * The Framework calls this function to close a client session.
+ * During the call to this function the implementation can use
+ * any session functions.
+ */
+void TA_CloseSessionEntryPoint(void* sessionContext)
+{
+ /* -Wunused-parameter */
+ (void)sessionContext;
+ SLogTrace("---- TA_CloseSessionEntryPoint ----- ");
+}
+
+/**
+ * Function TA_DestroyEntryPoint
+ * Description:
+ * The function TA_DestroyEntryPoint is the Trusted Application's destructor,
+ * which the Framework calls when the instance is being destroyed.
+ */
+void TA_DestroyEntryPoint(void)
+{
+ SLogTrace("---- TA_DestroyEntryPoint ---- ");
+}
diff --git a/test/TA/helloworld/CMakeLists.txt b/test/TA/helloworld/CMakeLists.txt
new file mode 100644
index 0000000..45334da
--- /dev/null
+++ b/test/TA/helloworld/CMakeLists.txt
@@ -0,0 +1,30 @@
+# sdk cmake.
+# Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
+cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
+project(tee_sdk C)
+
+if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
+ message(FATAL_ERROR "Forbid compiling in the source tree")
+endif()
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/config.cmake)
+include($ENV{ITRUSTEE_BUILD_PATH}/build/cmake/common.cmake)
+
+set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
+set(CURRENT_TARGET_SO "combine")
+
+set(SDK_C_SOURCES
+ ${SDK_C_SOURCES}
+ ta_demo.c
+)
+
+add_library(${CURRENT_TARGET_SO} SHARED ${SDK_C_SOURCES})
+target_include_directories(${CURRENT_TARGET_SO} PUBLIC ${COMMON_INCLUDES})
+target_compile_options(${CURRENT_TARGET_SO} PRIVATE ${COMMON_CFLAGS})
+target_link_options(${CURRENT_TARGET_SO} PRIVATE ${COMMON_LDFLAGS})
+
+add_custom_command(
+ TARGET ${CURRENT_TARGET_SO} POST_BUILD
+ COMMAND ${CMAKE_OBJCOPY} ${CMAKE_CURRENT_SOURCE_DIR}/libcombine.so
+ COMMAND python3 -B $ENV{ITRUSTEE_BUILD_PATH}/build/signtools/signtool_v3.py ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} --privateCfg $ENV{ITRUSTEE_BUILD_PATH}/build/signtools/config_cloud.ini
+)
diff --git a/test/TA/helloworld/Makefile b/test/TA/helloworld/Makefile
new file mode 100644
index 0000000..1a659b2
--- /dev/null
+++ b/test/TA/helloworld/Makefile
@@ -0,0 +1,28 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2018-2021. All rights reserved.
+include ./config.mk
+include ../../../build/mk/common.mk
+
+SRC += $(wildcard ./*.c)
+
+# set header directory
+INCLUDEDIR += -I./include
+
+# set target
+COBJS := $(SRC:%.c=%.o)
+TARGET = $(COBJS)
+
+sec_binary:combine
+ python3 -B ${SIGNTOOL_DIR}/signtool_v3.py ${CUR_DIR} ${CUR_DIR} --privateCfg ${SIGNTOOL_DIR}/config_cloud.ini
+
+combine: $(TARGET)
+ $(LD) $(LDFLAGS) $(TARGET) $(EXTRAO) -o libcombine.so
+ objcopy libcombine.so
+
+src/%.o: ./src/%.c
+ $(CC) $(CFLAGS) $(INCLUDEDIR) -c $< -o $@
+
+%.o: %.c
+ $(CC) $(CFLAGS) $(INCLUDEDIR) -c $< -o $@
+
+clean:
+ rm -f $(COBJS) *.so *.sec
diff --git a/test/TA/helloworld/ReadMe.txt b/test/TA/helloworld/ReadMe.txt
index e10f8b8..0802d8b 100755
--- a/test/TA/helloworld/ReadMe.txt
+++ b/test/TA/helloworld/ReadMe.txt
@@ -1,2 +1,5 @@
-Makefile is located in different folder for different product
-please switch to target folder and execute "make" command to build TA binary for target product
+You need to install the pycryptodome library of python and run the make command to compile the binary of ta.
+
+If TA wants to regist driver's permission, you must have dynamic permission file and driver's excel
+The name of the dynamic permission file must be 'dyn_perm.xml', the driver's excel's name can be 'driver name'.xlsx, and you can get it from driver's developer.
+You must install the xlrd-1.2.0 and defusedxml-0.7.1 library of python and run the make command to sign the binary of ta.
\ No newline at end of file
diff --git a/test/TA/helloworld/auth_config.xml b/test/TA/helloworld/auth_config.xml
new file mode 100644
index 0000000..d71581d
--- /dev/null
+++ b/test/TA/helloworld/auth_config.xml
@@ -0,0 +1,7 @@
+<auth_conf>
+ <auth_base_info auth_enable="true" auth_type_uid="false" />
+ <auth_cmdline_username>
+ <item cmdline="/vendor/bin/demo_hello" username="root" />
+ <item cmdline="/vendor/bin/dyn/demo_hello" username="root" />
+ </auth_cmdline_username>
+</auth_conf>
diff --git a/test/TA/helloworld/config.cmake b/test/TA/helloworld/config.cmake
new file mode 100644
index 0000000..929328b
--- /dev/null
+++ b/test/TA/helloworld/config.cmake
@@ -0,0 +1,23 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+#
+# API_LEVEL which indicates the GP API version of TA
+# API_LEVEL=1 indicates GP 1.0 which is the current version of itrustee
+# API_LEVEL=2 indicates GP 1.1.1 which is the current version of the partner
+# API_LEVEL=3 indicates GP 1.2 which is the version we both going to support
+# If no API_LEVEL is specified, API of GP 1.0 will be taken
+
+# TEE flags
+set(COMMON_CFLAGS -DAPI_LEVEL=1)
+if ("${TARGET_IS_ARM64}" STREQUAL "")
+ set(TARGET_IS_ARM64 y)
+endif()
+
+# USE_SMEE which indicates the feature of sram memory encryption
+# set(USE_SMEE y) indicates the feature of sram memory encryption will be enabled
+# If no USE_SMEE is specified, smee feature will be disabled
+# If USE_SMEE is specified and a section is custimized,
+# explicitly specify the segment to which the section belongs in the link script(ta_link_64.smee.ld)
+set(USE_SMEE n)
+if ("${USE_SMEE}" STREQUAL "")
+ set(USE_SMEE n)
+endif()
diff --git a/test/TA/helloworld/config.mk b/test/TA/helloworld/config.mk
index ebdbd8c..7a405a3 100644
--- a/test/TA/helloworld/config.mk
+++ b/test/TA/helloworld/config.mk
@@ -1,10 +1,23 @@
#
-# Copyright (c) Huawei Technologies Co., Ltd. 2018-2020. All rights reserved.
+# Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
#
# API_LEVEL which indicates the GP API version of TA
# API_LEVEL=1 indicates GP 1.0 which is the current version of itrustee
# API_LEVEL=2 indicates GP 1.1.1 which is the current version of the partner
# API_LEVEL=3 indicates GP 1.2 which is the version we both going to support
-# If no API_LEVEL is specified, API of GP 1.0 will be taked
+# If no API_LEVEL is specified, API of GP 1.0 will be taken
+#
+# USE_SMEE which indicates the feature of sram memory encryption
+# USE_SMEE=y indicates the feature of sram memory encryption will be enabled
+# If no USE_SMEE is specified, smee feature will not be disabled
+# If USE_SMEE is specified and a section is custimized,
+# explicitly specify the segment to which the section belongs in the link script(ta_link_64.smee.ld)
+
CFLAGS += -DAPI_LEVEL=1
-TARGET_IS_ARM64 = y
+USE_SMEE = n
+ifeq ($(TARGET_IS_ARM64),)
+ TARGET_IS_ARM64 = y
+endif
+ifeq ($(USE_SMEE),)
+ USE_SMEE = n
+endif
diff --git a/test/TA/helloworld/config.sh b/test/TA/helloworld/config.sh
new file mode 100644
index 0000000..f1170b9
--- /dev/null
+++ b/test/TA/helloworld/config.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+# Copyright Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+# This script is used to compile the demo sdk.
+set -e
+
+export SOURCE_PATH=$(dirname $0)
+export ABS_SOURCE_PATH=$(cd ${SOURCE_PATH};pwd)
+export ITRUSTEE_BUILD_PATH=${ABS_SOURCE_PATH}/../../..
+
+#clean
+if [ "$#" -eq 1 ] && [ "$1"x = "clean"x ]; then
+ rm -f *.o *.so *.sec
+ if [ -d "cmake_build" ]; then
+ rm -rf cmake_build
+ echo "rm -rf cmake_build"
+ fi
+ exit 0
+fi
+
+echo "Cmake compile TA begin"
+if [ -d "cmake_build" ]; then
+ rm -rf cmake_build
+ echo "rm -rf cmake_build"
+fi
+mkdir -p cmake_build
+echo "mkdir cmake_build"
+cd cmake_build/
+
+cmake -DCMAKE_TOOLCHAIN_FILE=${ITRUSTEE_BUILD_PATH}/build/cmake/aarch64_toolchain.cmake ..
+
+make VERBOSE=1
+
+cd ..
+rm -rf cmake_build
diff --git a/test/TA/helloworld/ta_demo.c b/test/TA/helloworld/ta_demo.c
index ec17d6d..5c1f6b6 100755
--- a/test/TA/helloworld/ta_demo.c
+++ b/test/TA/helloworld/ta_demo.c
@@ -1,6 +1,6 @@
/*
- * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
- * iTrustee licensed under the Mulan PSL v2.
+ * Copyright (c) Huawei Technologies Co., Ltd. 2020-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
@@ -8,6 +8,7 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
+ * Description: TA template code for reference
*/
#include <tee_ext_api.h>
@@ -24,7 +25,7 @@ enum {
static TEE_Result get_ta_version(char* buffer, size_t *buf_len)
{
- char *version = TA_TEMPLATE_VERSION;
+ const char *version = TA_TEMPLATE_VERSION;
if (*buf_len < strlen(version) + 1) {
tloge("buffer is too short for storing result");
@@ -49,14 +50,12 @@ static TEE_Result get_ta_version(char* buffer, size_t *buf_len)
*/
TEE_Result TA_CreateEntryPoint(void)
{
- TEE_Result ret = TEE_ERROR_GENERIC;
+ TEE_Result ret;
tlogd("----- TA entry point ----- ");
tlogd("TA version: %s", TA_TEMPLATE_VERSION);
-#ifdef CONFIG_AUTH_CLOUD
- ret = addcaller_ca_exec("/vendor/bin/teec_hello", "root");
-#endif
+ ret = addcaller_ca_exec("/vendor/bin/demo_hello", "root");
if (ret == TEE_SUCCESS) {
tlogd("TA entry point: add ca whitelist success");
} else {
@@ -149,5 +148,5 @@ void TA_CloseSessionEntryPoint(void* session_context)
*/
void TA_DestroyEntryPoint(void)
{
- tlogd("---- destory TA ---- ");
+ tlogd("---- destroy TA ---- ");
}
diff --git a/test/TA/qta/CMakeLists.txt b/test/TA/qta/CMakeLists.txt
new file mode 100644
index 0000000..e39ca5e
--- /dev/null
+++ b/test/TA/qta/CMakeLists.txt
@@ -0,0 +1,67 @@
+# sdk cmake.
+# Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
+cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
+project(tee_sdk C)
+
+if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
+ message(FATAL_ERROR "Forbid compiling in the source tree")
+endif()
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/config.cmake)
+include($ENV{ITRUSTEE_BUILD_PATH}/build/cmake/common.cmake)
+
+set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
+set(CURRENT_TARGET_SO "combine")
+
+# enable check daa pairing using MIRACAL library
+# you should download the opensource library: miracl/core, copy its dir c/ into src/, and compile core.a
+# for instance:
+# cd src; ln -s $MIRACL_DIR/c miracl-c
+# cd miracl-c; export CC=xxx CFLAGS=-fPIC; python3 config64.py -o 33; unset CC CFLAGS
+set(ENABLE_DAA_PAIR_MIRACL n)
+if ("${ENABLE_DAA_PAIR_MIRACL}" STREQUAL "y")
+ set(DAA_PAIR_MIRACL_C_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/miracl-c)
+ set(DAA_PAIR_MIRACL_C_INC ${DAA_PAIR_MIRACL_C_DIR}/)
+ set(DAA_PAIR_MIRACL_C_LIB ${DAA_PAIR_MIRACL_C_DIR}/core.a)
+ set(DAA_PAIR_MIRACL_C_SRC
+ src/daa/validate_akcert.c
+ src/daa/daa_structure.c
+ )
+else()
+ set(DAA_PAIR_MIRACL_C_INC "")
+ set(DAA_PAIR_MIRACL_C_SRC "")
+endif()
+
+# qta need cjson, so you can download cjson and rename cJSON to put it src directory
+set(CJSON_INC ${CMAKE_CURRENT_SOURCE_DIR}/src/cJSON)
+set(CJSON_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/cJSON/cJSON.c)
+
+set(SDK_C_SOURCES
+ ${SDK_C_SOURCES}
+ src/tee_qta.c
+ ${CJSON_SRC}
+ ${DAA_PAIR_MIRACL_C_SRC}
+)
+
+set(COMMON_INCLUDES
+ ${COMMON_INCLUDES}
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/.
+ ${CJSON_INC}
+ ${DAA_PAIR_MIRACL_C_INC}
+)
+
+add_library(${CURRENT_TARGET_SO} SHARED ${SDK_C_SOURCES})
+target_include_directories(${CURRENT_TARGET_SO} PUBLIC ${COMMON_INCLUDES})
+target_compile_options(${CURRENT_TARGET_SO} PRIVATE ${COMMON_CFLAGS})
+target_link_options(${CURRENT_TARGET_SO} PRIVATE ${COMMON_LDFLAGS})
+
+if ("${ENABLE_DAA_PAIR_MIRACL}" STREQUAL "y")
+ add_definitions(-DENABLE_DAA_PAIR_MIRACL)
+ target_link_libraries(${CURRENT_TARGET_SO} PUBLIC ${DAA_PAIR_MIRACL_C_LIB})
+endif()
+
+add_custom_command(
+ TARGET ${CURRENT_TARGET_SO} POST_BUILD
+ COMMAND ${CMAKE_OBJCOPY} ${CMAKE_CURRENT_SOURCE_DIR}/libcombine.so
+ COMMAND python3 -B $ENV{ITRUSTEE_BUILD_PATH}/build/signtools/signtool_v3.py ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} --privateCfg $ENV{ITRUSTEE_BUILD_PATH}/build/signtools/config_cloud.ini
+)
diff --git a/test/TA/qta/Makefile b/test/TA/qta/Makefile
new file mode 100644
index 0000000..cefce06
--- /dev/null
+++ b/test/TA/qta/Makefile
@@ -0,0 +1,41 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2018-2021. All rights reserved.
+include ./config.mk
+include ../../../build/mk/common.mk
+
+SRC += $(wildcard ./src/*.c)
+
+# set header directory
+INCLUDEDIR += -I./src
+
+# qta need cJSON code, so download it and put it into src
+SRC += ./src/cJSON/cJSON.c
+INCLUDEDIR += -I./src/cJSON/
+
+# if enable daa, so need to download pair_miracl lib
+ifeq ($(ENABLE_DAA_PAIR_MIRACL), true)
+INCLUDEDIR += -I./src/miracl-c
+CFLAGS += -DENABLE_DAA_PAIR_MIRACL
+LDFLFAGS += -lcore -L./src/miracl-c
+SRC += ./src/daa/validate_akcert.c \
+ ./src/daa/daa_structure.c
+endif
+
+# set target
+COBJS := $(SRC:%.c=%.o)
+TARGET = $(COBJS)
+
+sec_binary:combine
+ python3 -B ${SIGNTOOL_DIR}/signtool_v3.py ${CUR_DIR} ${CUR_DIR} --privateCfg ${SIGNTOOL_DIR}/config_cloud.ini
+
+combine: $(TARGET)
+ $(LD) $(LDFLAGS) $(TARGET) $(EXTRAO) -o libcombine.so
+ objcopy libcombine.so
+
+src/%.o: ./src/%.c
+ $(CC) $(CFLAGS) $(INCLUDEDIR) -c $< -o $@
+
+%.o: %.c
+ $(CC) $(CFLAGS) $(INCLUDEDIR) -c $< -o $@
+
+clean:
+ rm -f $(COBJS) *.so *.sec
diff --git a/test/TA/qta/ReadMe.txt b/test/TA/qta/ReadMe.txt
new file mode 100644
index 0000000..7cc8b88
--- /dev/null
+++ b/test/TA/qta/ReadMe.txt
@@ -0,0 +1,12 @@
+You need to install the pycryptodome library of python and run the make command to compile the binary of ta.
+
+qta is trusted application for remote attestion, when compile it, some libraries and tools are depended on.
+
+1. cjson: download it, put it to "src" directory, rename it into cJSON
+2. miracl core: when you enable DAA feture in makefile or cmakelist, download it and execute follow cmd:
+ 2.1 copy c directory in miracl into src, example copy miracl/c ./src/miracl-c
+ 2.2 cd ./src/miracl-c;
+ 2.3 export CC=gcc CFLAGS=-fPIC; python3 config64.py -o 33;unset CC CFLAGS
+ 2.4 cp core.a libcore.a
+3. make for make cmd; or sh config.sh for cmake cmd
+
diff --git a/test/TA/qta/config.cmake b/test/TA/qta/config.cmake
new file mode 100644
index 0000000..b7323b6
--- /dev/null
+++ b/test/TA/qta/config.cmake
@@ -0,0 +1,23 @@
+# Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+#
+# API_LEVEL which indicates the GP API version of TA
+# API_LEVEL=1 indicates GP 1.0 which is the current version of itrustee
+# API_LEVEL=2 indicates GP 1.1.1 which is the current version of the partner
+# API_LEVEL=3 indicates GP 1.2 which is the version we both going to support
+# If no API_LEVEL is specified, API of GP 1.0 will be taken
+#
+# USE_SMEE which indicates the feature of sram memory encryption
+# set(USE_SMEE y) indicates the feature of sram memory encryption will be enabled
+# If no USE_SMEE is specified, smee feature will be disabled
+# If USE_SMEE is specified and a section is custimized,
+# explicitly specify the segment to which the section belongs in the link script(ta_link_64.smee.ld)
+
+# TEE flags
+set(COMMON_CFLAGS -DAPI_LEVEL=1)
+set(USE_SMEE n)
+if ("${TARGET_IS_ARM64}" STREQUAL "")
+ set(TARGET_IS_ARM64 y)
+endif()
+if ("${USE_SMEE}" STREQUAL "")
+ set(USE_SMEE n)
+endif()
diff --git a/test/TA/qta/config.mk b/test/TA/qta/config.mk
new file mode 100644
index 0000000..7a405a3
--- /dev/null
+++ b/test/TA/qta/config.mk
@@ -0,0 +1,23 @@
+#
+# Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+#
+# API_LEVEL which indicates the GP API version of TA
+# API_LEVEL=1 indicates GP 1.0 which is the current version of itrustee
+# API_LEVEL=2 indicates GP 1.1.1 which is the current version of the partner
+# API_LEVEL=3 indicates GP 1.2 which is the version we both going to support
+# If no API_LEVEL is specified, API of GP 1.0 will be taken
+#
+# USE_SMEE which indicates the feature of sram memory encryption
+# USE_SMEE=y indicates the feature of sram memory encryption will be enabled
+# If no USE_SMEE is specified, smee feature will not be disabled
+# If USE_SMEE is specified and a section is custimized,
+# explicitly specify the segment to which the section belongs in the link script(ta_link_64.smee.ld)
+
+CFLAGS += -DAPI_LEVEL=1
+USE_SMEE = n
+ifeq ($(TARGET_IS_ARM64),)
+ TARGET_IS_ARM64 = y
+endif
+ifeq ($(USE_SMEE),)
+ USE_SMEE = n
+endif
diff --git a/test/TA/qta/config.sh b/test/TA/qta/config.sh
new file mode 100644
index 0000000..f1170b9
--- /dev/null
+++ b/test/TA/qta/config.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+# Copyright Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+# This script is used to compile the demo sdk.
+set -e
+
+export SOURCE_PATH=$(dirname $0)
+export ABS_SOURCE_PATH=$(cd ${SOURCE_PATH};pwd)
+export ITRUSTEE_BUILD_PATH=${ABS_SOURCE_PATH}/../../..
+
+#clean
+if [ "$#" -eq 1 ] && [ "$1"x = "clean"x ]; then
+ rm -f *.o *.so *.sec
+ if [ -d "cmake_build" ]; then
+ rm -rf cmake_build
+ echo "rm -rf cmake_build"
+ fi
+ exit 0
+fi
+
+echo "Cmake compile TA begin"
+if [ -d "cmake_build" ]; then
+ rm -rf cmake_build
+ echo "rm -rf cmake_build"
+fi
+mkdir -p cmake_build
+echo "mkdir cmake_build"
+cd cmake_build/
+
+cmake -DCMAKE_TOOLCHAIN_FILE=${ITRUSTEE_BUILD_PATH}/build/cmake/aarch64_toolchain.cmake ..
+
+make VERBOSE=1
+
+cd ..
+rm -rf cmake_build
diff --git a/test/TA/qta/manifest.txt b/test/TA/qta/manifest.txt
new file mode 100644
index 0000000..72c7d8c
--- /dev/null
+++ b/test/TA/qta/manifest.txt
@@ -0,0 +1,7 @@
+gpd.ta.appID: e08f7eca-e875-440e-9ab0-5f381136c600
+gpd.ta.service_name: tee_qta
+gpd.ta.singleInstance: true
+gpd.ta.multiSession: true
+gpd.ta.instanceKeepAlive: false
+gpd.ta.dataSize: 304857
+gpd.ta.stackSize: 64768
diff --git a/test/TA/qta/src/daa/daa_structure.c b/test/TA/qta/src/daa/daa_structure.c
new file mode 100644
index 0000000..cde248a
--- /dev/null
+++ b/test/TA/qta/src/daa/daa_structure.c
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#include "daa_structure.h"
+
+#include <securec.h>
+#include <errno.h>
+#include <tee_defines.h>
+#include <tee_log.h>
+#include <tee_ext_api.h>
+#include <tee_core_api.h>
+
+#define HEX_STR_SIZE_PER_CHAR 2
+#define BIT_4 4
+#define BYTE_HIGH_BIT_4 0xF0
+#define BYTE_LOW_BIT_4 0xF
+#define BYTE_CONVERT_ERROR 0xFF
+#define is_between_value(value, min, max) (((value) >= (min)) && ((value) <= (max)))
+#define cal_char_value(value, min, inc) ((value) - (min) + (inc))
+static uint8_t hex2ch(uint8_t c)
+{
+ if (is_between_value(c, '0', '9')) {
+ return cal_char_value(c, '0', 0);
+ } else if (is_between_value(c, 'a', 'f')) {
+ return cal_char_value(c, 'a', 10);
+ } else if (is_between_value(c, 'A', 'F')) {
+ return cal_char_value(c, 'A', 10);
+ } else {
+ tloge("hex2ch: Error! Input is not a hex value!");
+ return BYTE_CONVERT_ERROR;
+ }
+}
+
+void free_daa_grp_pubkey(struct daa_grp_pubkey *pubkey)
+{
+ if (pubkey == NULL || pubkey->pt_size == 0 || pubkey->pt_size > DAA_ECC_PT_MAX_SIZE)
+ return;
+ for (uint32_t i = 0; i < DAA_GRP_PUBKEY_DIMS; i++) {
+ if (pubkey->pt_buf[i]) {
+ free(pubkey->pt_buf[i]);
+ pubkey->pt_buf[i] = NULL;
+ }
+ }
+ pubkey->pt_size = 0;
+}
+
+static TEE_Result hex_array2ch_array(uint8_t *hex_cert, uint8_t *cert, uint32_t cert_size)
+{
+ uint8_t ch_high, ch_low;
+ for (uint32_t j = 0; j < cert_size; j++) {
+ ch_high = hex2ch(hex_cert[HEX_STR_SIZE_PER_CHAR * j]);
+ ch_low = hex2ch(hex_cert[HEX_STR_SIZE_PER_CHAR * j + 1]);
+ if (ch_high == BYTE_CONVERT_ERROR || ch_low == BYTE_CONVERT_ERROR) {
+ tloge("bad hex string, j %u\n", j);
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+ cert[j] = ((ch_high << BIT_4) & BYTE_HIGH_BIT_4) + ch_low;
+ }
+ return TEE_SUCCESS;
+}
+
+TEE_Result alloc_daa_grp_pubkey(uint8_t *hex_array[DAA_GRP_PUBKEY_DIMS], uint32_t hex_pt_size,
+ struct daa_grp_pubkey *pubkey)
+{
+ tlogi("TA request to convert daa group key\n");
+ if (hex_array == NULL || hex_pt_size == 0 || hex_pt_size > DAA_ECC_PT_MAX_SIZE || pubkey == NULL) {
+ tloge("bad params to convert daa grp pubkeys\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ TEE_Result ret;
+ pubkey->pt_size = hex_pt_size / HEX_STR_SIZE_PER_CHAR;
+ for (uint32_t i = 0; i < DAA_GRP_PUBKEY_DIMS; i++) {
+ pubkey->pt_buf[i] = (uint8_t*)malloc(pubkey->pt_size);
+ if (pubkey->pt_buf[i] == NULL) {
+ tloge("alloc pubkey failed\n");
+ ret = TEE_ERROR_OUT_OF_MEMORY;
+ goto err;
+ }
+ }
+
+ /* copy data */
+ for (uint32_t i = 0; i < DAA_GRP_PUBKEY_DIMS; i++) {
+ ret = hex_array2ch_array(hex_array[i], pubkey->pt_buf[i], pubkey->pt_size);
+ if (ret != TEE_SUCCESS) {
+ tloge("bad hex string, i %u\n", i);
+ goto err;
+ }
+ }
+
+ tlogi("convert daa group key succeed!\n");
+ return TEE_SUCCESS;
+err:
+ free_daa_grp_pubkey(pubkey);
+ pubkey = NULL;
+ return ret;
+}
+
+static TEE_Result get_akcert_one_field(struct daa_ak_cert *cert, uint32_t idx, uint8_t *field_buf, uint32_t field_size)
+{
+ uint32_t pos = 0;
+ uint32_t x_size = 0;
+ uint32_t y_size = 0;
+
+ /* get x field */
+ if (memcpy_s(&x_size, sizeof(uint32_t), field_buf + pos, sizeof(uint32_t)) != 0)
+ return TEE_ERROR_GENERIC;
+ pos += (uint32_t)sizeof(uint32_t);
+ if (x_size > field_size || pos > field_size - x_size)
+ return TEE_ERROR_BAD_PARAMETERS;
+ cert->pt_buf[(idx << 1)] = field_buf + pos;
+
+ if (cert->pt_size != 0 && cert->pt_size != x_size) {
+ tloge("the pt_size for all extract data do not match! %u vs. %u\n", x_size, cert->pt_size);
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+ cert->pt_size = x_size;
+ pos += x_size;
+
+ /* get y field */
+ if (pos > field_size - sizeof(uint32_t))
+ return TEE_ERROR_BAD_PARAMETERS;
+ if (memcpy_s(&y_size, sizeof(uint32_t), field_buf + pos, sizeof(uint32_t)) != 0)
+ return TEE_ERROR_GENERIC;
+ pos += (uint32_t)sizeof(uint32_t);
+ if (y_size > field_size || pos > field_size - y_size)
+ return TEE_ERROR_BAD_PARAMETERS;
+ cert->pt_buf[(idx << 1) + 1] = field_buf + pos;
+ if (cert->pt_size != y_size) {
+ tloge("the pt_size for all extract data do not match! %u vs. %u\n", y_size, cert->pt_size);
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ return TEE_SUCCESS;
+}
+
+TEE_Result convert_daa_ak_cert(struct daa_ak_cert *cert, uint8_t *akcert, uint32_t akcert_size)
+{
+ if (cert == NULL || akcert == NULL || akcert_size < (uint32_t)sizeof(uint32_t) ||
+ akcert_size > DAA_SAVE_AKCERT_MAX_SIZE)
+ return TEE_ERROR_BAD_PARAMETERS;
+
+ uint32_t pos = 0;
+ TEE_Result ret;
+ uint32_t field_size = 0;
+ uint8_t *field_buf = NULL;
+ for (uint32_t i = 0; i < (DAA_AK_CERT_DIMS >> 1); i++) {
+ if (pos > akcert_size - (uint32_t)sizeof(uint32_t))
+ return TEE_ERROR_BAD_PARAMETERS;
+
+ if (memcpy_s(&field_size, sizeof(uint32_t), akcert + pos, sizeof(uint32_t)) != 0)
+ return TEE_ERROR_GENERIC;
+
+ pos += (uint32_t)sizeof(uint32_t);
+ field_buf = akcert + pos;
+
+ ret = get_akcert_one_field(cert, i, field_buf, field_size);
+ if (ret != TEE_SUCCESS) {
+ tloge("get one field[%u] from akcert failed\n", i);
+ return ret;
+ }
+
+ pos += field_size;
+ }
+ tlogi("convert daa_ak_cert succeed!\n");
+ return TEE_SUCCESS;
+}
+
+TEE_Result load_daa_hex_akcert(uint8_t *hex_cert, uint32_t hex_cert_size, uint8_t *cert, uint32_t cert_size)
+{
+ if (hex_cert == NULL || cert == NULL || hex_cert_size == 0 ||
+ hex_cert_size / HEX_STR_SIZE_PER_CHAR != cert_size) {
+ tloge("cannot convert hex to raw, bad params\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+ return hex_array2ch_array(hex_cert, cert, cert_size);
+}
diff --git a/test/TA/qta/src/daa/daa_structure.h b/test/TA/qta/src/daa/daa_structure.h
new file mode 100644
index 0000000..3e07b3b
--- /dev/null
+++ b/test/TA/qta/src/daa/daa_structure.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#ifndef TEE_QTA_DAA_STRUCTURE_H
+#define TEE_QTA_DAA_STRUCTURE_H
+#include <tee_defines.h>
+
+#define DAA_ECC_PT_MAX_SIZE 256
+#define DAA_SAVE_AKCERT_MAX_SIZE 0x1000
+
+enum {
+ DAA_GRP_PK_X_X0 = 0,
+ DAA_GRP_PK_X_Y0,
+ DAA_GRP_PK_X_X1,
+ DAA_GRP_PK_X_Y1,
+ DAA_GRP_PK_Y_X0,
+ DAA_GRP_PK_Y_Y0,
+ DAA_GRP_PK_Y_X1,
+ DAA_GRP_PK_Y_Y1,
+ DAA_GRP_PUBKEY_DIMS
+};
+struct daa_grp_pubkey {
+ uint8_t *pt_buf[DAA_GRP_PUBKEY_DIMS];
+ uint32_t pt_size; /* size of all uint8_t* is pt_size */
+};
+
+enum {
+ DAA_AK_CERT_A_X = 0,
+ DAA_AK_CERT_A_Y,
+ DAA_AK_CERT_B_X,
+ DAA_AK_CERT_B_Y,
+ DAA_AK_CERT_C_X,
+ DAA_AK_CERT_C_Y,
+ DAA_AK_CERT_D_X,
+ DAA_AK_CERT_D_Y,
+ DAA_AK_CERT_DIMS
+};
+struct daa_ak_cert {
+ uint8_t *pt_buf[DAA_AK_CERT_DIMS];
+ uint32_t pt_size; /* size of all uint8_t* is pt_size */
+};
+
+/*
+ * utils for validate_akcert before invoking ECC's pairing functions.
+ * These functions does not invoke tcmgr service. They runs in libtcmgr only.
+ */
+
+/*
+ * convert @hex_array to @pubkey
+ */
+TEE_Result alloc_daa_grp_pubkey(uint8_t *hex_array[DAA_GRP_PUBKEY_DIMS], uint32_t hex_pt_size,
+ struct daa_grp_pubkey *pubkey);
+void free_daa_grp_pubkey(struct daa_grp_pubkey *pubkey);
+TEE_Result convert_daa_ak_cert(struct daa_ak_cert *cert, uint8_t *akcert, uint32_t akcert_size);
+TEE_Result load_daa_hex_akcert(uint8_t *hex_cert, uint32_t hex_cert_size, uint8_t *cert, uint32_t cert_size);
+#endif
diff --git a/test/TA/qta/src/daa/validate_akcert.c b/test/TA/qta/src/daa/validate_akcert.c
new file mode 100644
index 0000000..2c55320
--- /dev/null
+++ b/test/TA/qta/src/daa/validate_akcert.c
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#include "validate_akcert.h"
+#include <tee_log.h>
+#include <tee_ext_api.h>
+#include <securec.h>
+
+#include <pair_FP512BN.h>
+#include "daa_structure.h"
+
+#define DAA_GRP_KEY_PK_X_X0 "0cb2c846b963556d3651f89a490a0257039637dfee774caedb32513eccec6789" \
+ "e29269aa054814000227a6d34bb29c67fe399ebe1dd6c9f6b33604d5b990912c"
+#define DAA_GRP_KEY_PK_X_X1 "7be073749d20ff1a57131f66c0271f219b8b767f924b8ab187fc480bfbf84ff2" \
+ "6ce81aa42549fb100b851d9867c5e12baa5362417c4d2b5f3726ad1f5bf9b98b"
+#define DAA_GRP_KEY_PK_X_Y0 "a4523e489bd2245a5ee92255b3e54dd0a90fd1f0f4712514dce6ab85397bba3a" \
+ "7a2921956f14fc2207495ecb7a2442df36092254fbb29bbab2fed41ff198d0ae"
+#define DAA_GRP_KEY_PK_X_Y1 "7daf3d8855ed007da8d41d143ae8a086c5a63ae665856ecff09af7fe9eecf066" \
+ "5f8527de27a0cd606ffe7ca18a6988c4830a28d0f9ece0f1f08dbc4ea526c36f"
+
+#define DAA_GRP_KEY_PK_Y_X0 "d2c6994dee1b5dc071d5d547f26471bcd6aef7c2dc2ce112b9475bdecc0e85a7" \
+ "2015841f85a8de39506396cec11c520975f6d985b262c6f97413d2632f899896"
+#define DAA_GRP_KEY_PK_Y_X1 "e391d2d0cf2703b327ffb88615bfe6d7a9c5715007c9bfa91ff6b01210000a8e" \
+ "ddff2a310a2af6e042135b399989b7f54833ea96d5cbc93ae5da61ee63669941"
+#define DAA_GRP_KEY_PK_Y_Y0 "ffbde64729b2f8a212bfe2eef22c7b62edd77a78bc5e7f3c6782bcd839d26e0c" \
+ "7cea338240874edc3654bd3293974a7581ec168bfaee35bb093a8302bce9ac90"
+#define DAA_GRP_KEY_PK_Y_Y1 "03836c48550cf1c9dc5c455201e248acccf7a5395f9d4cc477734fdbaf8330d9" \
+ "7386aa451893824994cbedfdde7f9a8b8b7baad4b0b4dca8201135392b4910d4"
+
+#define DAA_GRP_KEY_PK_LEN (sizeof(DAA_GRP_KEY_PK_X_X0))
+
+#define DAA_GRP_PK_ELE_NUM 2
+#define DAA_GRP_AK_CERT_ELE_NUM 4
+
+#define GRP_PK_EACH_ELE_DIM 4 /* ((uint32_t)DAA_GRP_PUBKEY_DIMS / (uint32_t)DAA_GRP_PK_ELE_NUM) */
+#define GRP_PK_EACH_ELE_IDX2 2
+#define GRP_PK_EACH_ELE_IDX3 3
+static TEE_Result daa_grp_pk_to_ecp(struct daa_grp_pubkey *grp_pk, ECP2_FP512BN *ecp2[DAA_GRP_PK_ELE_NUM])
+{
+ for (uint32_t i = 0; i < DAA_GRP_PK_ELE_NUM; i++) {
+ FP2_FP512BN fp2_bn_x, fp2_bn_y;
+ BIG_512_60 bn_x0, bn_y0, bn_x1, bn_y1;
+ BIG_512_60_fromBytes(bn_x0, (char*)(uintptr_t)(grp_pk->pt_buf[GRP_PK_EACH_ELE_DIM * i + 0]));
+ BIG_512_60_fromBytes(bn_y0, (char*)(uintptr_t)(grp_pk->pt_buf[GRP_PK_EACH_ELE_DIM * i + 1]));
+ BIG_512_60_fromBytes(bn_x1,
+ (char*)(uintptr_t)(grp_pk->pt_buf[GRP_PK_EACH_ELE_DIM * i + GRP_PK_EACH_ELE_IDX2]));
+ BIG_512_60_fromBytes(bn_y1,
+ (char*)(uintptr_t)(grp_pk->pt_buf[GRP_PK_EACH_ELE_DIM * i + GRP_PK_EACH_ELE_IDX3]));
+ FP2_FP512BN_from_BIGs(&fp2_bn_x, bn_x0, bn_y0);
+ FP2_FP512BN_from_BIGs(&fp2_bn_y, bn_x1, bn_y1);
+ if (ECP2_FP512BN_set(ecp2[i], &fp2_bn_x, &fp2_bn_y) == 0) {
+ tloge("bad point[%u] when converting DAA pubkey to ECP2\n", i);
+ return TEE_ERROR_GENERIC;
+ }
+ }
+ return TEE_SUCCESS;
+}
+
+#define AK_CERT_EACH_ELE_DIM 2 /* ((uint32_t)DAA_AK_CERT_DIMS / (uint32_t)DAA_GRP_AK_CERT_ELE_NUM) */
+static TEE_Result daa_ak_cert_to_ecp(struct daa_ak_cert *ak_cert, ECP_FP512BN *ecp[DAA_GRP_AK_CERT_ELE_NUM])
+{
+ for (uint32_t i = 0; i < DAA_GRP_AK_CERT_ELE_NUM; i++) {
+ BIG_512_60 big_x, big_y;
+ BIG_512_60_fromBytes(big_x, (char*)(uintptr_t)(ak_cert->pt_buf[AK_CERT_EACH_ELE_DIM * i]));
+ BIG_512_60_fromBytes(big_y, (char*)(uintptr_t)(ak_cert->pt_buf[AK_CERT_EACH_ELE_DIM * i + 1]));
+ if (ECP_FP512BN_set(ecp[i], big_x, big_y) == 0) {
+ tloge("bad point[%u] when converting DAA ak cert to ECP\n", i);
+ return TEE_ERROR_GENERIC;
+ }
+ }
+ return TEE_SUCCESS;
+}
+
+struct validate_daa_pair_context {
+ ECP_FP512BN a, b, c, d;
+ ECP2_FP512BN ecp2_x, ecp2_y;
+ FP12_FP512BN pair_lhs, pair_rhs;
+ ECP2_FP512BN p2;
+};
+
+static TEE_Result validate_daa_pairs(struct daa_grp_pubkey *grp_pk, struct daa_ak_cert *ak_cert)
+{
+ TEE_Result pairings_ok;
+ tlogi("qta begins to validate daa pairs\n");
+ struct validate_daa_pair_context context;
+ (void)memset_s(&context, sizeof(context), 0, sizeof(context));
+
+ if (ECP2_FP512BN_generator(&context.p2) == 0) {
+ tloge("bad point when getting P2\n");
+ return TEE_ERROR_GENERIC;
+ }
+
+ ECP2_FP512BN *ecp2[DAA_GRP_PK_ELE_NUM] = { &context.ecp2_x, &context.ecp2_y };
+ pairings_ok = daa_grp_pk_to_ecp(grp_pk, ecp2);
+ if (pairings_ok != TEE_SUCCESS) {
+ tloge("convert group pubkey to ECP2_FP512BN failed\n");
+ return pairings_ok;
+ }
+
+ ECP_FP512BN *ecp[DAA_GRP_AK_CERT_ELE_NUM] = { &context.a, &context.b, &context.c, &context.d };
+ pairings_ok = daa_ak_cert_to_ecp(ak_cert, ecp);
+ if (pairings_ok != TEE_SUCCESS) {
+ tloge("convert DAA ak cert to ECP_FP512BN failed\n");
+ return pairings_ok;
+ }
+
+ PAIR_FP512BN_ate(&context.pair_lhs, &context.ecp2_y, &context.a);
+ PAIR_FP512BN_fexp(&context.pair_lhs);
+
+ PAIR_FP512BN_ate(&context.pair_rhs, &context.p2, &context.b);
+ PAIR_FP512BN_fexp(&context.pair_rhs);
+ if (FP12_FP512BN_equals(&context.pair_lhs, &context.pair_rhs) == 0) {
+ tloge("validate DAA pair[0] failed\n");
+ return TEE_ERROR_GENERIC;
+ }
+ ECP_FP512BN_add(&context.d, &context.a);
+
+ PAIR_FP512BN_ate(&context.pair_lhs, &context.ecp2_x, &context.d);
+ PAIR_FP512BN_fexp(&context.pair_lhs);
+
+ PAIR_FP512BN_ate(&context.pair_rhs, &context.p2, &context.c);
+ PAIR_FP512BN_fexp(&context.pair_rhs);
+
+ if (FP12_FP512BN_equals(&context.pair_lhs, &context.pair_rhs) == 0) {
+ tloge("validate DAA pair[1] failed\n");
+ return TEE_ERROR_GENERIC;
+ }
+ tlogi("qta finishes check daa pair: pairings_ok = %u, expect value = %u\n", pairings_ok, TEE_SUCCESS);
+ return pairings_ok;
+}
+
+TEE_Result validate_akcert(char *hex_input, uint32_t hex_input_size)
+{
+ if (hex_input == NULL || hex_input_size == 0 || hex_input_size > DAA_SAVE_AKCERT_MAX_SIZE)
+ return TEE_ERROR_BAD_PARAMETERS;
+
+ TEE_Result ret;
+
+ tlogi("prepare to init daa group pubkeys\n");
+ struct daa_grp_pubkey grp_pk;
+ (void)memset_s(&grp_pk, sizeof(grp_pk), 0, sizeof(grp_pk));
+ uint8_t* array[] = { (uint8_t*)DAA_GRP_KEY_PK_X_X0, (uint8_t*)DAA_GRP_KEY_PK_X_X1, (uint8_t*)DAA_GRP_KEY_PK_X_Y0,
+ (uint8_t*)DAA_GRP_KEY_PK_X_Y1, (uint8_t*)DAA_GRP_KEY_PK_Y_X0, (uint8_t*)DAA_GRP_KEY_PK_Y_X1,
+ (uint8_t*)DAA_GRP_KEY_PK_Y_Y0, (uint8_t*)DAA_GRP_KEY_PK_Y_Y1 };
+ ret = alloc_daa_grp_pubkey(array, DAA_GRP_KEY_PK_LEN, &grp_pk);
+ if (ret != TEE_SUCCESS) {
+ tloge("validate akcert: alloc daa group keys failed, ret 0x%x\n", ret);
+ return ret;
+ }
+
+ tlogi("prepare to load daa ak_cert\n");
+ uint32_t input_size = hex_input_size >> 1;
+ uint8_t *input = TEE_Malloc(input_size, 0);
+ if (input == NULL) {
+ tloge("validate akcert: alloc input buffer failed, ret 0x%x\n", ret);
+ ret = TEE_ERROR_OUT_OF_MEMORY;
+ goto clear;
+ }
+ ret = load_daa_hex_akcert((uint8_t*)(uintptr_t)hex_input, hex_input_size, input, input_size);
+ if (ret != TEE_SUCCESS) {
+ tloge("validate akcert: convert hex str to raw failed, ret 0x%x\n", ret);
+ goto clear;
+ }
+
+ struct daa_ak_cert ak_cert;
+ (void)memset_s(&ak_cert, sizeof(ak_cert), 0, sizeof(ak_cert));
+ ret = convert_daa_ak_cert(&ak_cert, input, input_size);
+ if (ret != TEE_SUCCESS) {
+ tloge("validate akcert: validate daa pairs failed, ret 0x%x\n", ret);
+ goto clear;
+ }
+
+ ret = validate_daa_pairs(&grp_pk, &ak_cert);
+ if (ret != TEE_SUCCESS) {
+ tloge("validate akcert: validate daa pairs failed, ret 0x%x\n", ret);
+ goto clear;
+ }
+clear:
+ if (input)
+ TEE_Free(input);
+ free_daa_grp_pubkey(&grp_pk);
+ return ret;
+}
diff --git a/test/TA/qta/src/daa/validate_akcert.h b/test/TA/qta/src/daa/validate_akcert.h
new file mode 100644
index 0000000..bce08d3
--- /dev/null
+++ b/test/TA/qta/src/daa/validate_akcert.h
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#ifndef TEE_QTA_VALIDATE_AKCERT_H
+#define TEE_QTA_VALIDATE_AKCERT_H
+#include <tee_defines.h>
+#include <tee_ext_api.h>
+
+TEE_Result validate_akcert(char *akcert, uint32_t akcert_size);
+
+#endif
+
diff --git a/test/TA/qta/src/tee_qta.c b/test/TA/qta/src/tee_qta.c
new file mode 100644
index 0000000..8dff8a6
--- /dev/null
+++ b/test/TA/qta/src/tee_qta.c
@@ -0,0 +1,279 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#include "tee_qta.h"
+#include <tee_log.h>
+#include <tee_ext_api.h>
+#include "tee_ra_api.h"
+#include "securec.h"
+#include <cJSON.h>
+
+#ifdef ENABLE_DAA_PAIR_MIRACL
+#include "daa/validate_akcert.h"
+#endif
+
+TEE_Result TA_CreateEntryPoint(void)
+{
+ TEE_Result ret;
+ /* TA auth CA */
+
+ /* TA auth TA */
+ ret = AddCaller_TA_all();
+ if (ret != TEE_SUCCESS)
+ return ret;
+
+ tlogi("tee_qta: CreateEntryPoint success.\n");
+ return ret;
+}
+
+TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types, TEE_Param params[PARAM_NUM], void **session_context)
+{
+ (void)param_types;
+ (void)params;
+ (void)session_context;
+ tlogi("tee_qta: OpenSessionEntryPoint success.\n");
+ return TEE_SUCCESS;
+}
+
+static bool check_akcert_params_valid(struct ra_buffer_data *akcert)
+{
+ bool result = false;
+ if (akcert == NULL || akcert->buffer == NULL || akcert->length == 0 || akcert->length > SHAREMEM_LIMIT) {
+ tloge("akcert params is invalid\n");
+ return result;
+ }
+
+ char *akcert_buf = REINTERPRET_CAST(char *, uint8_t *, akcert->buffer);
+ cJSON *json = cJSON_Parse(akcert_buf);
+ if (json == NULL) {
+ tloge("check akcert json failed\n");
+ return result;
+ }
+
+ char *handler = cJSON_GetStringValue(cJSON_GetObjectItem(json, "handler"));
+ if (handler == NULL || strcmp(handler, "saveakcert-output") != 0) {
+ tloge("check akcert handler failed\n");
+ goto clear;
+ }
+
+ cJSON *payload = cJSON_GetObjectItem(json, "payload");
+ if (payload == NULL) {
+ tloge("check akcert payload failed\n");
+ goto clear;
+ }
+
+ char *version = cJSON_GetStringValue(cJSON_GetObjectItem(payload, "version"));
+ if (version == NULL || strcmp(version, "TEE.RA.1.0") != 0) {
+ tloge("check akcert version failed\n");
+ goto clear;
+ }
+
+ char *scenario = cJSON_GetStringValue(cJSON_GetObjectItem(payload, "scenario"));
+ if (scenario == NULL || strcmp(scenario, "sce_as_with_daa") != 0) {
+ tloge("check akcert scenario failed\n");
+ goto clear;
+ }
+#ifdef ENABLE_DAA_PAIR_MIRACL
+ char *hex_akcert = cJSON_GetStringValue(cJSON_GetObjectItem(payload, "hex_akcert"));
+ if (validate_akcert(hex_akcert, strlen(hex_akcert)) != TEE_SUCCESS) {
+ tloge("check akcert using pairing failed\n");
+ goto clear;
+ }
+#endif
+ result = true;
+clear:
+ cJSON_Delete(json);
+ return result;
+}
+
+static TEE_Result qta_validate_akcert(struct ra_buffer_data *akcert)
+{
+ TEE_Result result = TEE_ERROR_GENERIC;
+ if (!check_akcert_params_valid(akcert)) {
+ tloge("qta validate akcert: check params invalid\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ char *akcert_buf = REINTERPRET_CAST(char *, uint8_t *, akcert->buffer);
+ cJSON *json = cJSON_Parse(akcert_buf);
+ cJSON *handler = cJSON_CreateString("validateakcert-input");
+ if (handler == NULL) {
+ tloge("qta validate akcert: handler is null\n");
+ goto clear1;
+ }
+ if (!cJSON_ReplaceItemInObject(json, "handler", handler)) {
+ tloge("qta validate akcert: replace handler in json failed\n");
+ cJSON_Delete(handler);
+ goto clear1;
+ }
+
+ char *json_buf = cJSON_Print(json);
+ if (json_buf == NULL) {
+ tloge("json buf is null");
+ goto clear1;
+ }
+
+ if (strlen(json_buf) > IN_RESERVED_SIZE) {
+ tloge("qta validate akcert: json size is invalid\n");
+ result = TEE_ERROR_BAD_PARAMETERS;
+ goto clear2;
+ }
+
+ uint32_t in_size = strlen(json_buf);
+ uint8_t *in_buf = REINTERPRET_CAST(uint8_t *, char *, json_buf);
+ struct ra_buffer_data in = {in_size, in_buf};
+ result = ra_qsi_invoke(&in, NULL);
+ if (result != TEE_SUCCESS)
+ tloge("qta validate akcert failed\n");
+clear2:
+ cJSON_free(json_buf);
+clear1:
+ cJSON_Delete(json);
+ return result;
+}
+
+static TEE_Result local_attest(struct ra_buffer_data *in, struct ra_buffer_data *out)
+{
+ TEE_Result result;
+ char *buf = REINTERPRET_CAST(char *, uint8_t *, in->buffer);
+ cJSON *json = cJSON_Parse(buf);
+ if (json == NULL) {
+ tloge("check local attest json failed\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ char *handler = cJSON_GetStringValue(cJSON_GetObjectItem(json, "handler"));
+ if (handler == NULL) {
+ tloge("handler is null\n");
+ result = TEE_ERROR_BAD_PARAMETERS;
+ goto clear;
+ }
+ if (strcmp(handler, "report-input") != 0) {
+ tloge("check local attest handler failed\n");
+ result = TEE_ERROR_BAD_PARAMETERS;
+ goto clear;
+ }
+ result = ra_qsi_invoke(in, out);
+clear:
+ cJSON_Delete(json);
+ return result;
+}
+
+static TEE_Result qta_local_attest(uint32_t param_types, TEE_Param *params)
+{
+ bool ret = check_param_type(param_types, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT,
+ TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE);
+ if (!ret || params == NULL) {
+ tloge("qta local attest: bad params\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ if (params[0].memref.buffer == NULL || params[0].memref.size == 0 ||
+ params[0].memref.size > IN_RESERVED_SIZE || params[1].memref.buffer == NULL ||
+ params[1].memref.size < OUT_RESERVED_SIZE || params[1].memref.size > SHAREMEM_LIMIT) {
+ tloge("qta local attest: invalid memref info\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ struct ra_buffer_data in;
+ struct ra_buffer_data out;
+ in.buffer = params[0].memref.buffer;
+ in.length = params[0].memref.size;
+ out.buffer = params[1].memref.buffer;
+ out.length = params[1].memref.size;
+
+ TEE_Result result = local_attest(&in, &out);
+ if (result != TEE_SUCCESS) {
+ tloge("local attest failed\n");
+ return result;
+ }
+ params[PARAM_TWO].value.a = out.length;
+ return result;
+}
+
+static TEE_Result qta_remote_attest(uint32_t param_types, TEE_Param *params)
+{
+ bool ret = check_param_type(param_types, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT,
+ TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE);
+ if (!ret || params == NULL) {
+ tloge("qta remote attest: bad params\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ if (params[0].memref.buffer == NULL || params[0].memref.size == 0 ||
+ params[0].memref.size > IN_RESERVED_SIZE || params[1].memref.size > SHAREMEM_LIMIT ||
+ (params[1].memref.buffer != NULL && params[1].memref.size < OUT_RESERVED_SIZE) ||
+ (params[1].memref.buffer == NULL && params[1].memref.size > 0)) {
+ tloge("qta remote attest: invalid memref info\n");
+ return TEE_ERROR_BAD_PARAMETERS;
+ }
+
+ struct ra_buffer_data in;
+ struct ra_buffer_data out;
+ in.buffer = params[0].memref.buffer;
+ in.length = params[0].memref.size;
+ out.buffer = params[1].memref.buffer;
+ out.length = params[1].memref.size;
+ TEE_Result result = ra_qsi_invoke(&in, &out);
+ if (result == TEE_PENDING) {
+ return qta_validate_akcert(&out);
+ } else if (result == TEE_SUCCESS) {
+ params[PARAM_TWO].value.a = out.length;
+ return result;
+ }
+ tloge("ra qsi invoke failed\n");
+ return result;
+}
+
+TEE_Result TA_InvokeCommandEntryPoint(void *session_context, uint32_t cmd_id,
+ uint32_t param_types, TEE_Param params[PARAM_NUM])
+{
+ tlogi("tee_qta: Enter TA_InvokeCommandEntryPoint.\n");
+ (void)session_context;
+ if (cmd_id != REMOTE_ATTEST_CMD) {
+ tloge("tee_qta: InvokeCommandEntryPoint failed, cmd: 0x%x.\n", cmd_id);
+ return TEE_ERROR_INVALID_CMD;
+ }
+
+ caller_info cinfo;
+ (void)memset_s(&cinfo, sizeof(cinfo), 0, sizeof(cinfo));
+ TEE_Result ret = TEE_EXT_GetCallerInfo(&cinfo, sizeof(cinfo));
+ if (ret != TEE_SUCCESS) {
+ tloge("tee_qta: Get call info failed.\n");
+ return ret;
+ }
+ if (cinfo.session_type == SESSION_FROM_TA) {
+ ret = qta_local_attest(param_types, params);
+ if (ret != TEE_SUCCESS)
+ tloge("tee_qta: local attest failed, cmd: 0x%x, ret: 0x%x.\n", cmd_id, ret);
+ else
+ tlogi("tee_qta: InvokeCommandEntryPoint success.\n");
+ return ret;
+ }
+
+ ret = qta_remote_attest(param_types, params);
+ if (ret != TEE_SUCCESS)
+ tloge("tee_qta: remote attest failed, cmd: 0x%x, ret: 0x%x.\n", cmd_id, ret);
+ else
+ tlogi("tee_qta: InvokeCommandEntryPoint success.\n");
+ return ret;
+}
+
+void TA_CloseSessionEntryPoint(void *session_context)
+{
+ (void)session_context;
+ tlogi("tee_qta: CloseSessionEntryPoint success.\n");
+}
+
+void TA_DestroyEntryPoint(void)
+{
+ tlogi("tee_qta: DestroyEntryPoint success.\n");
+}
diff --git a/test/TA/qta/src/tee_qta.h b/test/TA/qta/src/tee_qta.h
new file mode 100644
index 0000000..0dfb1d5
--- /dev/null
+++ b/test/TA/qta/src/tee_qta.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+ * Licensed under the Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+ * PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+#ifndef TEE_QTA_H
+#define TEE_QTA_H
+#include <tee_defines.h>
+#include <tee_ext_api.h>
+
+#define PARAM_TWO 2
+#define PARAM_THREE 3
+#define PARAM_NUM 4
+#define SHAREMEM_LIMIT 0x100000
+#define IN_RESERVED_SIZE 0x2000
+#define OUT_RESERVED_SIZE 0x3000
+#define REMOTE_ATTEST_CMD 0x1001
+
+#define REINTERPRET_CAST(dest_type, source_type, temp) \
+ ((__extension__(union { source_type source; dest_type dest; })(temp)).dest)
+
+#endif
+
diff --git a/thirdparty/open_source/musl/libc/arch/aarch64/bits/alltypes.h b/thirdparty/open_source/musl/libc/arch/aarch64/bits/alltypes.h
index a0309c0..04d8c0b 100644
--- a/thirdparty/open_source/musl/libc/arch/aarch64/bits/alltypes.h
+++ b/thirdparty/open_source/musl/libc/arch/aarch64/bits/alltypes.h
@@ -1,35 +1,15 @@
#define _Addr long
-#ifdef __LP64__
#define _Int64 long
-#else
-#define _Int64 long long
-#endif
#define _Reg long
-#define __LITTLE_ENDIAN 1234
-#define __BIG_ENDIAN 4321
-#define __USE_TIME_BITS64 1
-
-#ifndef __BYTE_ORDER
#if __AARCH64EB__
#define __BYTE_ORDER 4321
#else
#define __BYTE_ORDER 1234
#endif
-#endif
#define __LONG_MAX 0x7fffffffffffffffL
-#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
-typedef __builtin_va_list va_list;
-#define __DEFINED_va_list
-#endif
-
-#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
-typedef __builtin_va_list __isoc_va_list;
-#define __DEFINED___isoc_va_list
-#endif
-
#ifndef __cplusplus
#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
typedef unsigned wchar_t;
@@ -42,6 +22,7 @@ typedef unsigned wint_t;
#define __DEFINED_wint_t
#endif
+
#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
typedef int blksize_t;
#define __DEFINED_blksize_t
@@ -52,6 +33,7 @@ typedef unsigned int nlink_t;
#define __DEFINED_nlink_t
#endif
+
#if defined(__NEED_float_t) && !defined(__DEFINED_float_t)
typedef float float_t;
#define __DEFINED_float_t
@@ -62,100 +44,15 @@ typedef double double_t;
#define __DEFINED_double_t
#endif
+
#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
-typedef struct {
- long long __ll;
- long double __ld;
-} max_align_t;
+typedef struct { long long __ll; long double __ld; } max_align_t;
#define __DEFINED_max_align_t
#endif
-#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
-typedef long time_t;
-#define __DEFINED_time_t
-#endif
-
-#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
-typedef long suseconds_t;
-#define __DEFINED_suseconds_t
-#endif
-
-#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
-typedef struct {
- union {
- int __i[14];
- volatile int __vi[14];
- unsigned long __s[7];
- } __u;
-} pthread_attr_t;
-#define __DEFINED_pthread_attr_t
-#endif
-
-#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
-typedef struct {
- union {
- int __i[10];
- volatile int __vi[10];
- volatile void *volatile __p[5];
- } __u;
-} pthread_mutex_t;
-#define __DEFINED_pthread_mutex_t
-#endif
-
-#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
-typedef struct {
- union {
- int __i[10];
- volatile int __vi[10];
- volatile void *volatile __p[5];
- } __u;
-} mtx_t;
-#define __DEFINED_mtx_t
-#endif
-
-#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
-typedef struct {
- union {
- int __i[12];
- volatile int __vi[12];
- void *__p[6];
- } __u;
-} pthread_cond_t;
-#define __DEFINED_pthread_cond_t
-#endif
-
-#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
-typedef struct {
- union {
- int __i[12];
- volatile int __vi[12];
- void *__p[6];
- } __u;
-} cnd_t;
-#define __DEFINED_cnd_t
-#endif
-
-#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
-typedef struct {
- union {
- int __i[14];
- volatile int __vi[14];
- void *__p[7];
- } __u;
-} pthread_rwlock_t;
-#define __DEFINED_pthread_rwlock_t
-#endif
-
-#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
-typedef struct {
- union {
- int __i[8];
- volatile int __vi[8];
- void *__p[4];
- } __u;
-} pthread_barrier_t;
-#define __DEFINED_pthread_barrier_t
-#endif
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+#define __USE_TIME_BITS64 1
#if defined(__NEED_size_t) && !defined(__DEFINED_size_t)
typedef unsigned _Addr size_t;
@@ -192,28 +89,39 @@ typedef _Reg register_t;
#define __DEFINED_register_t
#endif
+#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
+typedef _Int64 time_t;
+#define __DEFINED_time_t
+#endif
+
+#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
+typedef _Int64 suseconds_t;
+#define __DEFINED_suseconds_t
+#endif
+
+
#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t)
typedef signed char int8_t;
#define __DEFINED_int8_t
#endif
#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t)
-typedef short int16_t;
+typedef signed short int16_t;
#define __DEFINED_int16_t
#endif
#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t)
-typedef int int32_t;
+typedef signed int int32_t;
#define __DEFINED_int32_t
#endif
#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t)
-typedef _Int64 int64_t;
+typedef signed _Int64 int64_t;
#define __DEFINED_int64_t
#endif
#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t)
-typedef _Int64 intmax_t;
+typedef signed _Int64 intmax_t;
#define __DEFINED_intmax_t
#endif
@@ -247,6 +155,7 @@ typedef unsigned _Int64 uintmax_t;
#define __DEFINED_uintmax_t
#endif
+
#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t)
typedef unsigned mode_t;
#define __DEFINED_mode_t
@@ -292,6 +201,7 @@ typedef unsigned _Int64 fsfilcnt_t;
#define __DEFINED_fsfilcnt_t
#endif
+
#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
typedef unsigned wint_t;
#define __DEFINED_wint_t
@@ -302,8 +212,9 @@ typedef unsigned long wctype_t;
#define __DEFINED_wctype_t
#endif
+
#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t)
-typedef void *timer_t;
+typedef void * timer_t;
#define __DEFINED_timer_t
#endif
@@ -318,21 +229,16 @@ typedef long clock_t;
#endif
#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval)
-struct timeval {
- time_t tv_sec;
- suseconds_t tv_usec;
-};
+struct timeval { time_t tv_sec; suseconds_t tv_usec; };
#define __DEFINED_struct_timeval
#endif
#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec)
-struct timespec {
- time_t tv_sec;
- long tv_nsec;
-};
+struct timespec { time_t tv_sec; int :8*(sizeof(time_t)-sizeof(long))*(__BYTE_ORDER==4321); long tv_nsec; int :8*(sizeof(time_t)-sizeof(long))*(__BYTE_ORDER!=4321); };
#define __DEFINED_struct_timespec
#endif
+
#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t)
typedef int pid_t;
#define __DEFINED_pid_t
@@ -363,6 +269,7 @@ typedef unsigned useconds_t;
#define __DEFINED_useconds_t
#endif
+
#ifdef __cplusplus
#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
typedef unsigned long pthread_t;
@@ -371,7 +278,7 @@ typedef unsigned long pthread_t;
#else
#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
-typedef struct __pthread *pthread_t;
+typedef struct __pthread * pthread_t;
#define __DEFINED_pthread_t
#endif
@@ -392,65 +299,78 @@ typedef int pthread_spinlock_t;
#endif
#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t)
-typedef struct {
- unsigned __attr;
-} pthread_mutexattr_t;
+typedef struct { unsigned __attr; } pthread_mutexattr_t;
#define __DEFINED_pthread_mutexattr_t
#endif
#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t)
-typedef struct {
- unsigned __attr;
-} pthread_condattr_t;
+typedef struct { unsigned __attr; } pthread_condattr_t;
#define __DEFINED_pthread_condattr_t
#endif
#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t)
-typedef struct {
- unsigned __attr;
-} pthread_barrierattr_t;
+typedef struct { unsigned __attr; } pthread_barrierattr_t;
#define __DEFINED_pthread_barrierattr_t
#endif
#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t)
-typedef struct {
- unsigned __attr[2];
-} pthread_rwlockattr_t;
+typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t;
#define __DEFINED_pthread_rwlockattr_t
#endif
+
+#if defined(__NEED_struct__IO_FILE) && !defined(__DEFINED_struct__IO_FILE)
+struct _IO_FILE { char __x; };
+#define __DEFINED_struct__IO_FILE
+#endif
+
#if defined(__NEED_FILE) && !defined(__DEFINED_FILE)
typedef struct _IO_FILE FILE;
#define __DEFINED_FILE
#endif
+
+#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
+typedef __builtin_va_list va_list;
+#define __DEFINED_va_list
+#endif
+
+#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
+typedef __builtin_va_list __isoc_va_list;
+#define __DEFINED___isoc_va_list
+#endif
+
+
#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t)
-typedef struct __mbstate_t {
- unsigned __opaque1, __opaque2;
-} mbstate_t;
+typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
#define __DEFINED_mbstate_t
#endif
+
#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t)
-typedef struct __locale_struct *locale_t;
+typedef struct __locale_struct * locale_t;
#define __DEFINED_locale_t
#endif
+
#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t)
-typedef struct __sigset_t {
- unsigned long __bits[128 / sizeof(long)];
-} sigset_t;
+typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
#define __DEFINED_sigset_t
#endif
+
#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec)
-struct iovec {
- void *iov_base;
- size_t iov_len;
-};
+struct iovec { void *iov_base; size_t iov_len; };
#define __DEFINED_struct_iovec
#endif
+
+#if defined(__NEED_struct_winsize) && !defined(__DEFINED_struct_winsize)
+struct winsize { unsigned short ws_row, ws_col, ws_xpixel, ws_ypixel; };
+#define __DEFINED_struct_winsize
+#endif
+
+
#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t)
typedef unsigned socklen_t;
#define __DEFINED_socklen_t
@@ -461,6 +381,43 @@ typedef unsigned short sa_family_t;
#define __DEFINED_sa_family_t
#endif
+
+#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
+typedef struct { union { int __i[sizeof(long)==8?14:9]; volatile int __vi[sizeof(long)==8?14:9]; unsigned long __s[sizeof(long)==8?7:9]; } __u; } pthread_attr_t;
+#define __DEFINED_pthread_attr_t
+#endif
+
+#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
+typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } pthread_mutex_t;
+#define __DEFINED_pthread_mutex_t
+#endif
+
+#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
+typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } mtx_t;
+#define __DEFINED_mtx_t
+#endif
+
+#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } pthread_cond_t;
+#define __DEFINED_pthread_cond_t
+#endif
+
+#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } cnd_t;
+#define __DEFINED_cnd_t
+#endif
+
+#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
+typedef struct { union { int __i[sizeof(long)==8?14:8]; volatile int __vi[sizeof(long)==8?14:8]; void *__p[sizeof(long)==8?7:8]; } __u; } pthread_rwlock_t;
+#define __DEFINED_pthread_rwlock_t
+#endif
+
+#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
+typedef struct { union { int __i[sizeof(long)==8?8:5]; volatile int __vi[sizeof(long)==8?8:5]; void *__p[sizeof(long)==8?4:5]; } __u; } pthread_barrier_t;
+#define __DEFINED_pthread_barrier_t
+#endif
+
+
#undef _Addr
#undef _Int64
#undef _Reg
diff --git a/thirdparty/open_source/musl/libc/arch/aarch64/bits/hwcap.h b/thirdparty/open_source/musl/libc/arch/aarch64/bits/hwcap.h
index a748402..424cc4d 100644
--- a/thirdparty/open_source/musl/libc/arch/aarch64/bits/hwcap.h
+++ b/thirdparty/open_source/musl/libc/arch/aarch64/bits/hwcap.h
@@ -38,3 +38,15 @@
#define HWCAP2_SVEBITPERM (1 << 4)
#define HWCAP2_SVESHA3 (1 << 5)
#define HWCAP2_SVESM4 (1 << 6)
+#define HWCAP2_FLAGM2 (1 << 7)
+#define HWCAP2_FRINT (1 << 8)
+#define HWCAP2_SVEI8MM (1 << 9)
+#define HWCAP2_SVEF32MM (1 << 10)
+#define HWCAP2_SVEF64MM (1 << 11)
+#define HWCAP2_SVEBF16 (1 << 12)
+#define HWCAP2_I8MM (1 << 13)
+#define HWCAP2_BF16 (1 << 14)
+#define HWCAP2_DGH (1 << 15)
+#define HWCAP2_RNG (1 << 16)
+#define HWCAP2_BTI (1 << 17)
+#define HWCAP2_MTE (1 << 18)
diff --git a/thirdparty/open_source/musl/libc/arch/aarch64/bits/mman.h b/thirdparty/open_source/musl/libc/arch/aarch64/bits/mman.h
new file mode 100644
index 0000000..8fad5ce
--- /dev/null
+++ b/thirdparty/open_source/musl/libc/arch/aarch64/bits/mman.h
@@ -0,0 +1,2 @@
+#define PROT_BTI 0x10
+#define PROT_MTE 0x20
diff --git a/thirdparty/open_source/musl/libc/arch/aarch64/bits/signal.h b/thirdparty/open_source/musl/libc/arch/aarch64/bits/signal.h
index b71261f..5098c73 100644
--- a/thirdparty/open_source/musl/libc/arch/aarch64/bits/signal.h
+++ b/thirdparty/open_source/musl/libc/arch/aarch64/bits/signal.h
@@ -11,7 +11,7 @@ typedef unsigned long greg_t;
typedef unsigned long gregset_t[34];
typedef struct {
- long double vregs[32];
+ __uint128_t vregs[32];
unsigned int fpsr;
unsigned int fpcr;
} fpregset_t;
@@ -34,7 +34,7 @@ struct fpsimd_context {
struct _aarch64_ctx head;
unsigned int fpsr;
unsigned int fpcr;
- long double vregs[32];
+ __uint128_t vregs[32];
};
struct esr_context {
struct _aarch64_ctx head;
diff --git a/thirdparty/open_source/musl/libc/arch/aarch64/bits/syscall.h b/thirdparty/open_source/musl/libc/arch/aarch64/bits/syscall.h
index d57a091..24b5438 100644
--- a/thirdparty/open_source/musl/libc/arch/aarch64/bits/syscall.h
+++ b/thirdparty/open_source/musl/libc/arch/aarch64/bits/syscall.h
@@ -1,551 +1,603 @@
-#define __NR_io_setup 0
-#define __NR_io_destroy 1
-#define __NR_io_submit 2
-#define __NR_io_cancel 3
-#define __NR_io_getevents 4
-#define __NR_setxattr 5
-#define __NR_lsetxattr 6
-#define __NR_fsetxattr 7
-#define __NR_getxattr 8
-#define __NR_lgetxattr 9
-#define __NR_fgetxattr 10
-#define __NR_listxattr 11
-#define __NR_llistxattr 12
-#define __NR_flistxattr 13
-#define __NR_removexattr 14
-#define __NR_lremovexattr 15
-#define __NR_fremovexattr 16
-#define __NR_getcwd 17
-#define __NR_lookup_dcookie 18
-#define __NR_eventfd2 19
-#define __NR_epoll_create1 20
-#define __NR_epoll_ctl 21
-#define __NR_epoll_pwait 22
-#define __NR_dup 23
-#define __NR_dup3 24
-#define __NR_fcntl 25
-#define __NR_inotify_init1 26
-#define __NR_inotify_add_watch 27
-#define __NR_inotify_rm_watch 28
-#define __NR_ioctl 29
-#define __NR_ioprio_set 30
-#define __NR_ioprio_get 31
-#define __NR_flock 32
-#define __NR_mknodat 33
-#define __NR_mkdirat 34
-#define __NR_unlinkat 35
-#define __NR_symlinkat 36
-#define __NR_linkat 37
-#define __NR_renameat 38
-#define __NR_umount2 39
-#define __NR_mount 40
-#define __NR_pivot_root 41
-#define __NR_nfsservctl 42
-#define __NR_statfs 43
-#define __NR_fstatfs 44
-#define __NR_truncate 45
-#define __NR_ftruncate 46
-#define __NR_fallocate 47
-#define __NR_faccessat 48
-#define __NR_chdir 49
-#define __NR_fchdir 50
-#define __NR_chroot 51
-#define __NR_fchmod 52
-#define __NR_fchmodat 53
-#define __NR_fchownat 54
-#define __NR_fchown 55
-#define __NR_openat 56
-#define __NR_close 57
-#define __NR_vhangup 58
-#define __NR_pipe2 59
-#define __NR_quotactl 60
-#define __NR_getdents64 61
-#define __NR_lseek 62
-#define __NR_read 63
-#define __NR_write 64
-#define __NR_readv 65
-#define __NR_writev 66
-#define __NR_pread64 67
-#define __NR_pwrite64 68
-#define __NR_preadv 69
-#define __NR_pwritev 70
-#define __NR_sendfile 71
-#define __NR_pselect6 72
-#define __NR_ppoll 73
-#define __NR_signalfd4 74
-#define __NR_vmsplice 75
-#define __NR_splice 76
-#define __NR_tee 77
-#define __NR_readlinkat 78
-#define __NR_newfstatat 79
-#define __NR_fstat 80
-#define __NR_sync 81
-#define __NR_fsync 82
-#define __NR_fdatasync 83
-#define __NR_sync_file_range 84
-#define __NR_timerfd_create 85
-#define __NR_timerfd_settime 86
-#define __NR_timerfd_gettime 87
-#define __NR_utimensat 88
-#define __NR_acct 89
-#define __NR_capget 90
-#define __NR_capset 91
-#define __NR_personality 92
-#define __NR_exit 93
-#define __NR_exit_group 94
-#define __NR_waitid 95
-#define __NR_set_tid_address 96
-#define __NR_unshare 97
-#define __NR_futex 98
-#define __NR_set_robust_list 99
-#define __NR_get_robust_list 100
-#define __NR_nanosleep 101
-#define __NR_getitimer 102
-#define __NR_setitimer 103
-#define __NR_kexec_load 104
-#define __NR_init_module 105
-#define __NR_delete_module 106
-#define __NR_timer_create 107
-#define __NR_timer_gettime 108
-#define __NR_timer_getoverrun 109
-#define __NR_timer_settime 110
-#define __NR_timer_delete 111
-#define __NR_clock_settime 112
-#define __NR_clock_gettime 113
-#define __NR_clock_getres 114
-#define __NR_clock_nanosleep 115
-#define __NR_syslog 116
-#define __NR_ptrace 117
-#define __NR_sched_setparam 118
-#define __NR_sched_setscheduler 119
-#define __NR_sched_getscheduler 120
-#define __NR_sched_getparam 121
-#define __NR_sched_setaffinity 122
-#define __NR_sched_getaffinity 123
-#define __NR_sched_yield 124
+#define __NR_io_setup 0
+#define __NR_io_destroy 1
+#define __NR_io_submit 2
+#define __NR_io_cancel 3
+#define __NR_io_getevents 4
+#define __NR_setxattr 5
+#define __NR_lsetxattr 6
+#define __NR_fsetxattr 7
+#define __NR_getxattr 8
+#define __NR_lgetxattr 9
+#define __NR_fgetxattr 10
+#define __NR_listxattr 11
+#define __NR_llistxattr 12
+#define __NR_flistxattr 13
+#define __NR_removexattr 14
+#define __NR_lremovexattr 15
+#define __NR_fremovexattr 16
+#define __NR_getcwd 17
+#define __NR_lookup_dcookie 18
+#define __NR_eventfd2 19
+#define __NR_epoll_create1 20
+#define __NR_epoll_ctl 21
+#define __NR_epoll_pwait 22
+#define __NR_dup 23
+#define __NR_dup3 24
+#define __NR_fcntl 25
+#define __NR_inotify_init1 26
+#define __NR_inotify_add_watch 27
+#define __NR_inotify_rm_watch 28
+#define __NR_ioctl 29
+#define __NR_ioprio_set 30
+#define __NR_ioprio_get 31
+#define __NR_flock 32
+#define __NR_mknodat 33
+#define __NR_mkdirat 34
+#define __NR_unlinkat 35
+#define __NR_symlinkat 36
+#define __NR_linkat 37
+#define __NR_renameat 38
+#define __NR_umount2 39
+#define __NR_mount 40
+#define __NR_pivot_root 41
+#define __NR_nfsservctl 42
+#define __NR_statfs 43
+#define __NR_fstatfs 44
+#define __NR_truncate 45
+#define __NR_ftruncate 46
+#define __NR_fallocate 47
+#define __NR_faccessat 48
+#define __NR_chdir 49
+#define __NR_fchdir 50
+#define __NR_chroot 51
+#define __NR_fchmod 52
+#define __NR_fchmodat 53
+#define __NR_fchownat 54
+#define __NR_fchown 55
+#define __NR_openat 56
+#define __NR_close 57
+#define __NR_vhangup 58
+#define __NR_pipe2 59
+#define __NR_quotactl 60
+#define __NR_getdents64 61
+#define __NR_lseek 62
+#define __NR_read 63
+#define __NR_write 64
+#define __NR_readv 65
+#define __NR_writev 66
+#define __NR_pread64 67
+#define __NR_pwrite64 68
+#define __NR_preadv 69
+#define __NR_pwritev 70
+#define __NR_sendfile 71
+#define __NR_pselect6 72
+#define __NR_ppoll 73
+#define __NR_signalfd4 74
+#define __NR_vmsplice 75
+#define __NR_splice 76
+#define __NR_tee 77
+#define __NR_readlinkat 78
+#define __NR_newfstatat 79
+#define __NR_fstat 80
+#define __NR_sync 81
+#define __NR_fsync 82
+#define __NR_fdatasync 83
+#define __NR_sync_file_range 84
+#define __NR_timerfd_create 85
+#define __NR_timerfd_settime 86
+#define __NR_timerfd_gettime 87
+#define __NR_utimensat 88
+#define __NR_acct 89
+#define __NR_capget 90
+#define __NR_capset 91
+#define __NR_personality 92
+#define __NR_exit 93
+#define __NR_exit_group 94
+#define __NR_waitid 95
+#define __NR_set_tid_address 96
+#define __NR_unshare 97
+#define __NR_futex 98
+#define __NR_set_robust_list 99
+#define __NR_get_robust_list 100
+#define __NR_nanosleep 101
+#define __NR_getitimer 102
+#define __NR_setitimer 103
+#define __NR_kexec_load 104
+#define __NR_init_module 105
+#define __NR_delete_module 106
+#define __NR_timer_create 107
+#define __NR_timer_gettime 108
+#define __NR_timer_getoverrun 109
+#define __NR_timer_settime 110
+#define __NR_timer_delete 111
+#define __NR_clock_settime 112
+#define __NR_clock_gettime 113
+#define __NR_clock_getres 114
+#define __NR_clock_nanosleep 115
+#define __NR_syslog 116
+#define __NR_ptrace 117
+#define __NR_sched_setparam 118
+#define __NR_sched_setscheduler 119
+#define __NR_sched_getscheduler 120
+#define __NR_sched_getparam 121
+#define __NR_sched_setaffinity 122
+#define __NR_sched_getaffinity 123
+#define __NR_sched_yield 124
#define __NR_sched_get_priority_max 125
#define __NR_sched_get_priority_min 126
-#define __NR_sched_rr_get_interval 127
-#define __NR_restart_syscall 128
-#define __NR_kill 129
-#define __NR_tkill 130
-#define __NR_tgkill 131
-#define __NR_sigaltstack 132
-#define __NR_rt_sigsuspend 133
-#define __NR_rt_sigaction 134
-#define __NR_rt_sigprocmask 135
-#define __NR_rt_sigpending 136
-#define __NR_rt_sigtimedwait 137
-#define __NR_rt_sigqueueinfo 138
-#define __NR_rt_sigreturn 139
-#define __NR_setpriority 140
-#define __NR_getpriority 141
-#define __NR_reboot 142
-#define __NR_setregid 143
-#define __NR_setgid 144
-#define __NR_setreuid 145
-#define __NR_setuid 146
-#define __NR_setresuid 147
-#define __NR_getresuid 148
-#define __NR_setresgid 149
-#define __NR_getresgid 150
-#define __NR_setfsuid 151
-#define __NR_setfsgid 152
-#define __NR_times 153
-#define __NR_setpgid 154
-#define __NR_getpgid 155
-#define __NR_getsid 156
-#define __NR_setsid 157
-#define __NR_getgroups 158
-#define __NR_setgroups 159
-#define __NR_uname 160
-#define __NR_sethostname 161
-#define __NR_setdomainname 162
-#define __NR_getrlimit 163
-#define __NR_setrlimit 164
-#define __NR_getrusage 165
-#define __NR_umask 166
-#define __NR_prctl 167
-#define __NR_getcpu 168
-#define __NR_gettimeofday 169
-#define __NR_settimeofday 170
-#define __NR_adjtimex 171
-#define __NR_getpid 172
-#define __NR_getppid 173
-#define __NR_getuid 174
-#define __NR_geteuid 175
-#define __NR_getgid 176
-#define __NR_getegid 177
-#define __NR_gettid 178
-#define __NR_sysinfo 179
-#define __NR_mq_open 180
-#define __NR_mq_unlink 181
-#define __NR_mq_timedsend 182
-#define __NR_mq_timedreceive 183
-#define __NR_mq_notify 184
-#define __NR_mq_getsetattr 185
-#define __NR_msgget 186
-#define __NR_msgctl 187
-#define __NR_msgrcv 188
-#define __NR_msgsnd 189
-#define __NR_semget 190
-#define __NR_semctl 191
-#define __NR_semtimedop 192
-#define __NR_semop 193
-#define __NR_shmget 194
-#define __NR_shmctl 195
-#define __NR_shmat 196
-#define __NR_shmdt 197
-#define __NR_socket 198
-#define __NR_socketpair 199
-#define __NR_bind 200
-#define __NR_listen 201
-#define __NR_accept 202
-#define __NR_connect 203
-#define __NR_getsockname 204
-#define __NR_getpeername 205
-#define __NR_sendto 206
-#define __NR_recvfrom 207
-#define __NR_setsockopt 208
-#define __NR_getsockopt 209
-#define __NR_shutdown 210
-#define __NR_sendmsg 211
-#define __NR_recvmsg 212
-#define __NR_readahead 213
-#define __NR_brk 214
-#define __NR_munmap 215
-#define __NR_mremap 216
-#define __NR_add_key 217
-#define __NR_request_key 218
-#define __NR_keyctl 219
-#define __NR_clone 220
-#define __NR_execve 221
-#define __NR_mmap 222
-#define __NR_fadvise64 223
-#define __NR_swapon 224
-#define __NR_swapoff 225
-#define __NR_mprotect 226
-#define __NR_msync 227
-#define __NR_mlock 228
-#define __NR_munlock 229
-#define __NR_mlockall 230
-#define __NR_munlockall 231
-#define __NR_mincore 232
-#define __NR_madvise 233
-#define __NR_remap_file_pages 234
-#define __NR_mbind 235
-#define __NR_get_mempolicy 236
-#define __NR_set_mempolicy 237
-#define __NR_migrate_pages 238
-#define __NR_move_pages 239
-#define __NR_rt_tgsigqueueinfo 240
-#define __NR_perf_event_open 241
-#define __NR_accept4 242
-#define __NR_recvmmsg 243
-#define __NR_wait4 260
-#define __NR_prlimit64 261
-#define __NR_fanotify_init 262
-#define __NR_fanotify_mark 263
-#define __NR_name_to_handle_at 264
-#define __NR_open_by_handle_at 265
-#define __NR_clock_adjtime 266
-#define __NR_syncfs 267
-#define __NR_setns 268
-#define __NR_sendmmsg 269
-#define __NR_process_vm_readv 270
-#define __NR_process_vm_writev 271
-#define __NR_kcmp 272
-#define __NR_finit_module 273
-#define __NR_sched_setattr 274
-#define __NR_sched_getattr 275
-#define __NR_renameat2 276
-#define __NR_seccomp 277
-#define __NR_getrandom 278
-#define __NR_memfd_create 279
-#define __NR_bpf 280
-#define __NR_execveat 281
-#define __NR_userfaultfd 282
-#define __NR_membarrier 283
-#define __NR_mlock2 284
-#define __NR_copy_file_range 285
-#define __NR_preadv2 286
-#define __NR_pwritev2 287
-#define __NR_pkey_mprotect 288
-#define __NR_pkey_alloc 289
-#define __NR_pkey_free 290
+#define __NR_sched_rr_get_interval 127
+#define __NR_restart_syscall 128
+#define __NR_kill 129
+#define __NR_tkill 130
+#define __NR_tgkill 131
+#define __NR_sigaltstack 132
+#define __NR_rt_sigsuspend 133
+#define __NR_rt_sigaction 134
+#define __NR_rt_sigprocmask 135
+#define __NR_rt_sigpending 136
+#define __NR_rt_sigtimedwait 137
+#define __NR_rt_sigqueueinfo 138
+#define __NR_rt_sigreturn 139
+#define __NR_setpriority 140
+#define __NR_getpriority 141
+#define __NR_reboot 142
+#define __NR_setregid 143
+#define __NR_setgid 144
+#define __NR_setreuid 145
+#define __NR_setuid 146
+#define __NR_setresuid 147
+#define __NR_getresuid 148
+#define __NR_setresgid 149
+#define __NR_getresgid 150
+#define __NR_setfsuid 151
+#define __NR_setfsgid 152
+#define __NR_times 153
+#define __NR_setpgid 154
+#define __NR_getpgid 155
+#define __NR_getsid 156
+#define __NR_setsid 157
+#define __NR_getgroups 158
+#define __NR_setgroups 159
+#define __NR_uname 160
+#define __NR_sethostname 161
+#define __NR_setdomainname 162
+#define __NR_getrlimit 163
+#define __NR_setrlimit 164
+#define __NR_getrusage 165
+#define __NR_umask 166
+#define __NR_prctl 167
+#define __NR_getcpu 168
+#define __NR_gettimeofday 169
+#define __NR_settimeofday 170
+#define __NR_adjtimex 171
+#define __NR_getpid 172
+#define __NR_getppid 173
+#define __NR_getuid 174
+#define __NR_geteuid 175
+#define __NR_getgid 176
+#define __NR_getegid 177
+#define __NR_gettid 178
+#define __NR_sysinfo 179
+#define __NR_mq_open 180
+#define __NR_mq_unlink 181
+#define __NR_mq_timedsend 182
+#define __NR_mq_timedreceive 183
+#define __NR_mq_notify 184
+#define __NR_mq_getsetattr 185
+#define __NR_msgget 186
+#define __NR_msgctl 187
+#define __NR_msgrcv 188
+#define __NR_msgsnd 189
+#define __NR_semget 190
+#define __NR_semctl 191
+#define __NR_semtimedop 192
+#define __NR_semop 193
+#define __NR_shmget 194
+#define __NR_shmctl 195
+#define __NR_shmat 196
+#define __NR_shmdt 197
+#define __NR_socket 198
+#define __NR_socketpair 199
+#define __NR_bind 200
+#define __NR_listen 201
+#define __NR_accept 202
+#define __NR_connect 203
+#define __NR_getsockname 204
+#define __NR_getpeername 205
+#define __NR_sendto 206
+#define __NR_recvfrom 207
+#define __NR_setsockopt 208
+#define __NR_getsockopt 209
+#define __NR_shutdown 210
+#define __NR_sendmsg 211
+#define __NR_recvmsg 212
+#define __NR_readahead 213
+#define __NR_brk 214
+#define __NR_munmap 215
+#define __NR_mremap 216
+#define __NR_add_key 217
+#define __NR_request_key 218
+#define __NR_keyctl 219
+#define __NR_clone 220
+#define __NR_execve 221
+#define __NR_mmap 222
+#define __NR_fadvise64 223
+#define __NR_swapon 224
+#define __NR_swapoff 225
+#define __NR_mprotect 226
+#define __NR_msync 227
+#define __NR_mlock 228
+#define __NR_munlock 229
+#define __NR_mlockall 230
+#define __NR_munlockall 231
+#define __NR_mincore 232
+#define __NR_madvise 233
+#define __NR_remap_file_pages 234
+#define __NR_mbind 235
+#define __NR_get_mempolicy 236
+#define __NR_set_mempolicy 237
+#define __NR_migrate_pages 238
+#define __NR_move_pages 239
+#define __NR_rt_tgsigqueueinfo 240
+#define __NR_perf_event_open 241
+#define __NR_accept4 242
+#define __NR_recvmmsg 243
+#define __NR_wait4 260
+#define __NR_prlimit64 261
+#define __NR_fanotify_init 262
+#define __NR_fanotify_mark 263
+#define __NR_name_to_handle_at 264
+#define __NR_open_by_handle_at 265
+#define __NR_clock_adjtime 266
+#define __NR_syncfs 267
+#define __NR_setns 268
+#define __NR_sendmmsg 269
+#define __NR_process_vm_readv 270
+#define __NR_process_vm_writev 271
+#define __NR_kcmp 272
+#define __NR_finit_module 273
+#define __NR_sched_setattr 274
+#define __NR_sched_getattr 275
+#define __NR_renameat2 276
+#define __NR_seccomp 277
+#define __NR_getrandom 278
+#define __NR_memfd_create 279
+#define __NR_bpf 280
+#define __NR_execveat 281
+#define __NR_userfaultfd 282
+#define __NR_membarrier 283
+#define __NR_mlock2 284
+#define __NR_copy_file_range 285
+#define __NR_preadv2 286
+#define __NR_pwritev2 287
+#define __NR_pkey_mprotect 288
+#define __NR_pkey_alloc 289
+#define __NR_pkey_free 290
+#define __NR_statx 291
+#define __NR_io_pgetevents 292
+#define __NR_rseq 293
+#define __NR_kexec_file_load 294
+#define __NR_pidfd_send_signal 424
+#define __NR_io_uring_setup 425
+#define __NR_io_uring_enter 426
+#define __NR_io_uring_register 427
+#define __NR_open_tree 428
+#define __NR_move_mount 429
+#define __NR_fsopen 430
+#define __NR_fsconfig 431
+#define __NR_fsmount 432
+#define __NR_fspick 433
+#define __NR_pidfd_open 434
+#define __NR_clone3 435
+#define __NR_close_range 436
+#define __NR_openat2 437
+#define __NR_pidfd_getfd 438
+#define __NR_faccessat2 439
+#define __NR_process_madvise 440
+#define __NR_epoll_pwait2 441
+#define __NR_mount_setattr 442
+#define __NR_landlock_create_ruleset 444
+#define __NR_landlock_add_rule 445
+#define __NR_landlock_restrict_self 446
-#define SYS_io_setup 0
-#define SYS_io_destroy 1
-#define SYS_io_submit 2
-#define SYS_io_cancel 3
-#define SYS_io_getevents 4
-#define SYS_setxattr 5
-#define SYS_lsetxattr 6
-#define SYS_fsetxattr 7
-#define SYS_getxattr 8
-#define SYS_lgetxattr 9
-#define SYS_fgetxattr 10
-#define SYS_listxattr 11
-#define SYS_llistxattr 12
-#define SYS_flistxattr 13
-#define SYS_removexattr 14
-#define SYS_lremovexattr 15
-#define SYS_fremovexattr 16
-#define SYS_getcwd 17
-#define SYS_lookup_dcookie 18
-#define SYS_eventfd2 19
-#define SYS_epoll_create1 20
-#define SYS_epoll_ctl 21
-#define SYS_epoll_pwait 22
-#define SYS_dup 23
-#define SYS_dup3 24
-#define SYS_fcntl 25
-#define SYS_inotify_init1 26
-#define SYS_inotify_add_watch 27
-#define SYS_inotify_rm_watch 28
-#define SYS_ioctl 29
-#define SYS_ioprio_set 30
-#define SYS_ioprio_get 31
-#define SYS_flock 32
-#define SYS_mknodat 33
-#define SYS_mkdirat 34
-#define SYS_unlinkat 35
-#define SYS_symlinkat 36
-#define SYS_linkat 37
-#define SYS_renameat 38
-#define SYS_umount2 39
-#define SYS_mount 40
-#define SYS_pivot_root 41
-#define SYS_nfsservctl 42
-#define SYS_statfs 43
-#define SYS_fstatfs 44
-#define SYS_truncate 45
-#define SYS_ftruncate 46
-#define SYS_fallocate 47
-#define SYS_faccessat 48
-#define SYS_chdir 49
-#define SYS_fchdir 50
-#define SYS_chroot 51
-#define SYS_fchmod 52
-#define SYS_fchmodat 53
-#define SYS_fchownat 54
-#define SYS_fchown 55
-#define SYS_openat 56
-#define SYS_close 57
-#define SYS_vhangup 58
-#define SYS_pipe2 59
-#define SYS_quotactl 60
-#define SYS_getdents64 61
-#define SYS_lseek 62
-#define SYS_read 63
-#define SYS_write 64
-#define SYS_readv 65
-#define SYS_writev 66
-#define SYS_pread64 67
-#define SYS_pwrite64 68
-#define SYS_preadv 69
-#define SYS_pwritev 70
-#define SYS_sendfile 71
-#define SYS_pselect6 72
-#define SYS_ppoll 73
-#define SYS_signalfd4 74
-#define SYS_vmsplice 75
-#define SYS_splice 76
-#define SYS_tee 77
-#define SYS_readlinkat 78
-#define SYS_newfstatat 79
-#define SYS_fstat 80
-#define SYS_sync 81
-#define SYS_fsync 82
-#define SYS_fdatasync 83
-#define SYS_sync_file_range 84
-#define SYS_timerfd_create 85
-#define SYS_timerfd_settime 86
-#define SYS_timerfd_gettime 87
-#define SYS_utimensat 88
-#define SYS_acct 89
-#define SYS_capget 90
-#define SYS_capset 91
-#define SYS_personality 92
-#define SYS_exit 93
-#define SYS_exit_group 94
-#define SYS_waitid 95
-#define SYS_set_tid_address 96
-#define SYS_unshare 97
-#define SYS_futex 98
-#define SYS_set_robust_list 99
-#define SYS_get_robust_list 100
-#define SYS_nanosleep 101
-#define SYS_getitimer 102
-#define SYS_setitimer 103
-#define SYS_kexec_load 104
-#define SYS_init_module 105
-#define SYS_delete_module 106
-#define SYS_timer_create 107
-#define SYS_timer_gettime 108
-#define SYS_timer_getoverrun 109
-#define SYS_timer_settime 110
-#define SYS_timer_delete 111
-#define SYS_clock_settime 112
-#define SYS_clock_gettime 113
-#define SYS_clock_getres 114
-#define SYS_clock_nanosleep 115
-#define SYS_syslog 116
-#define SYS_ptrace 117
-#define SYS_sched_setparam 118
-#define SYS_sched_setscheduler 119
-#define SYS_sched_getscheduler 120
-#define SYS_sched_getparam 121
-#define SYS_sched_setaffinity 122
-#define SYS_sched_getaffinity 123
-#define SYS_sched_yield 124
+#define SYS_io_setup 0
+#define SYS_io_destroy 1
+#define SYS_io_submit 2
+#define SYS_io_cancel 3
+#define SYS_io_getevents 4
+#define SYS_setxattr 5
+#define SYS_lsetxattr 6
+#define SYS_fsetxattr 7
+#define SYS_getxattr 8
+#define SYS_lgetxattr 9
+#define SYS_fgetxattr 10
+#define SYS_listxattr 11
+#define SYS_llistxattr 12
+#define SYS_flistxattr 13
+#define SYS_removexattr 14
+#define SYS_lremovexattr 15
+#define SYS_fremovexattr 16
+#define SYS_getcwd 17
+#define SYS_lookup_dcookie 18
+#define SYS_eventfd2 19
+#define SYS_epoll_create1 20
+#define SYS_epoll_ctl 21
+#define SYS_epoll_pwait 22
+#define SYS_dup 23
+#define SYS_dup3 24
+#define SYS_fcntl 25
+#define SYS_inotify_init1 26
+#define SYS_inotify_add_watch 27
+#define SYS_inotify_rm_watch 28
+#define SYS_ioctl 29
+#define SYS_ioprio_set 30
+#define SYS_ioprio_get 31
+#define SYS_flock 32
+#define SYS_mknodat 33
+#define SYS_mkdirat 34
+#define SYS_unlinkat 35
+#define SYS_symlinkat 36
+#define SYS_linkat 37
+#define SYS_renameat 38
+#define SYS_umount2 39
+#define SYS_mount 40
+#define SYS_pivot_root 41
+#define SYS_nfsservctl 42
+#define SYS_statfs 43
+#define SYS_fstatfs 44
+#define SYS_truncate 45
+#define SYS_ftruncate 46
+#define SYS_fallocate 47
+#define SYS_faccessat 48
+#define SYS_chdir 49
+#define SYS_fchdir 50
+#define SYS_chroot 51
+#define SYS_fchmod 52
+#define SYS_fchmodat 53
+#define SYS_fchownat 54
+#define SYS_fchown 55
+#define SYS_openat 56
+#define SYS_close 57
+#define SYS_vhangup 58
+#define SYS_pipe2 59
+#define SYS_quotactl 60
+#define SYS_getdents64 61
+#define SYS_lseek 62
+#define SYS_read 63
+#define SYS_write 64
+#define SYS_readv 65
+#define SYS_writev 66
+#define SYS_pread64 67
+#define SYS_pwrite64 68
+#define SYS_preadv 69
+#define SYS_pwritev 70
+#define SYS_sendfile 71
+#define SYS_pselect6 72
+#define SYS_ppoll 73
+#define SYS_signalfd4 74
+#define SYS_vmsplice 75
+#define SYS_splice 76
+#define SYS_tee 77
+#define SYS_readlinkat 78
+#define SYS_newfstatat 79
+#define SYS_fstat 80
+#define SYS_sync 81
+#define SYS_fsync 82
+#define SYS_fdatasync 83
+#define SYS_sync_file_range 84
+#define SYS_timerfd_create 85
+#define SYS_timerfd_settime 86
+#define SYS_timerfd_gettime 87
+#define SYS_utimensat 88
+#define SYS_acct 89
+#define SYS_capget 90
+#define SYS_capset 91
+#define SYS_personality 92
+#define SYS_exit 93
+#define SYS_exit_group 94
+#define SYS_waitid 95
+#define SYS_set_tid_address 96
+#define SYS_unshare 97
+#define SYS_futex 98
+#define SYS_set_robust_list 99
+#define SYS_get_robust_list 100
+#define SYS_nanosleep 101
+#define SYS_getitimer 102
+#define SYS_setitimer 103
+#define SYS_kexec_load 104
+#define SYS_init_module 105
+#define SYS_delete_module 106
+#define SYS_timer_create 107
+#define SYS_timer_gettime 108
+#define SYS_timer_getoverrun 109
+#define SYS_timer_settime 110
+#define SYS_timer_delete 111
+#define SYS_clock_settime 112
+#define SYS_clock_gettime 113
+#define SYS_clock_getres 114
+#define SYS_clock_nanosleep 115
+#define SYS_syslog 116
+#define SYS_ptrace 117
+#define SYS_sched_setparam 118
+#define SYS_sched_setscheduler 119
+#define SYS_sched_getscheduler 120
+#define SYS_sched_getparam 121
+#define SYS_sched_setaffinity 122
+#define SYS_sched_getaffinity 123
+#define SYS_sched_yield 124
#define SYS_sched_get_priority_max 125
#define SYS_sched_get_priority_min 126
-#define SYS_sched_rr_get_interval 127
-#define SYS_restart_syscall 128
-#define SYS_kill 129
-#define SYS_tkill 130
-#define SYS_tgkill 131
-#define SYS_sigaltstack 132
-#define SYS_rt_sigsuspend 133
-#define SYS_rt_sigaction 134
-#define SYS_rt_sigprocmask 135
-#define SYS_rt_sigpending 136
-#define SYS_rt_sigtimedwait 137
-#define SYS_rt_sigqueueinfo 138
-#define SYS_rt_sigreturn 139
-#define SYS_setpriority 140
-#define SYS_getpriority 141
-#define SYS_reboot 142
-#define SYS_setregid 143
-#define SYS_setgid 144
-#define SYS_setreuid 145
-#define SYS_setuid 146
-#define SYS_setresuid 147
-#define SYS_getresuid 148
-#define SYS_setresgid 149
-#define SYS_getresgid 150
-#define SYS_setfsuid 151
-#define SYS_setfsgid 152
-#define SYS_times 153
-#define SYS_setpgid 154
-#define SYS_getpgid 155
-#define SYS_getsid 156
-#define SYS_setsid 157
-#define SYS_getgroups 158
-#define SYS_setgroups 159
-#define SYS_uname 160
-#define SYS_sethostname 161
-#define SYS_setdomainname 162
-#define SYS_getrlimit 163
-#define SYS_setrlimit 164
-#define SYS_getrusage 165
-#define SYS_umask 166
-#define SYS_prctl 167
-#define SYS_getcpu 168
-#define SYS_gettimeofday 169
-#define SYS_settimeofday 170
-#define SYS_adjtimex 171
-#define SYS_getpid 172
-#define SYS_getppid 173
-#define SYS_getuid 174
-#define SYS_geteuid 175
-#define SYS_getgid 176
-#define SYS_getegid 177
-#define SYS_gettid 178
-#define SYS_sysinfo 179
-#define SYS_mq_open 180
-#define SYS_mq_unlink 181
-#define SYS_mq_timedsend 182
-#define SYS_mq_timedreceive 183
-#define SYS_mq_notify 184
-#define SYS_mq_getsetattr 185
-#define SYS_msgget 186
-#define SYS_msgctl 187
-#define SYS_msgrcv 188
-#define SYS_msgsnd 189
-#define SYS_semget 190
-#define SYS_semctl 191
-#define SYS_semtimedop 192
-#define SYS_semop 193
-#define SYS_shmget 194
-#define SYS_shmctl 195
-#define SYS_shmat 196
-#define SYS_shmdt 197
-#define SYS_socket 198
-#define SYS_socketpair 199
-#define SYS_bind 200
-#define SYS_listen 201
-#define SYS_accept 202
-#define SYS_connect 203
-#define SYS_getsockname 204
-#define SYS_getpeername 205
-#define SYS_sendto 206
-#define SYS_recvfrom 207
-#define SYS_setsockopt 208
-#define SYS_getsockopt 209
-#define SYS_shutdown 210
-#define SYS_sendmsg 211
-#define SYS_recvmsg 212
-#define SYS_readahead 213
-#define SYS_brk 214
-#define SYS_munmap 215
-#define SYS_mremap 216
-#define SYS_add_key 217
-#define SYS_request_key 218
-#define SYS_keyctl 219
-#define SYS_clone 220
-#define SYS_execve 221
-#define SYS_mmap 222
-#define SYS_fadvise64 223
-#define SYS_swapon 224
-#define SYS_swapoff 225
-#define SYS_mprotect 226
-#define SYS_msync 227
-#define SYS_mlock 228
-#define SYS_munlock 229
-#define SYS_mlockall 230
-#define SYS_munlockall 231
-#define SYS_mincore 232
-#define SYS_madvise 233
-#define SYS_remap_file_pages 234
-#define SYS_mbind 235
-#define SYS_get_mempolicy 236
-#define SYS_set_mempolicy 237
-#define SYS_migrate_pages 238
-#define SYS_move_pages 239
-#define SYS_rt_tgsigqueueinfo 240
-#define SYS_perf_event_open 241
-#define SYS_accept4 242
-#define SYS_recvmmsg 243
-#define SYS_wait4 260
-#define SYS_prlimit64 261
-#define SYS_fanotify_init 262
-#define SYS_fanotify_mark 263
-#define SYS_name_to_handle_at 264
-#define SYS_open_by_handle_at 265
-#define SYS_clock_adjtime 266
-#define SYS_syncfs 267
-#define SYS_setns 268
-#define SYS_sendmmsg 269
-#define SYS_process_vm_readv 270
-#define SYS_process_vm_writev 271
-#define SYS_kcmp 272
-#define SYS_finit_module 273
-#define SYS_sched_setattr 274
-#define SYS_sched_getattr 275
-#define SYS_renameat2 276
-#define SYS_seccomp 277
-#define SYS_getrandom 278
-#define SYS_memfd_create 279
-#define SYS_bpf 280
-#define SYS_execveat 281
-#define SYS_userfaultfd 282
-#define SYS_membarrier 283
-#define SYS_mlock2 284
-#define SYS_copy_file_range 285
-#define SYS_preadv2 286
-#define SYS_pwritev2 287
-#define SYS_pkey_mprotect 288
-#define SYS_pkey_alloc 289
-#define SYS_pkey_free 290
+#define SYS_sched_rr_get_interval 127
+#define SYS_restart_syscall 128
+#define SYS_kill 129
+#define SYS_tkill 130
+#define SYS_tgkill 131
+#define SYS_sigaltstack 132
+#define SYS_rt_sigsuspend 133
+#define SYS_rt_sigaction 134
+#define SYS_rt_sigprocmask 135
+#define SYS_rt_sigpending 136
+#define SYS_rt_sigtimedwait 137
+#define SYS_rt_sigqueueinfo 138
+#define SYS_rt_sigreturn 139
+#define SYS_setpriority 140
+#define SYS_getpriority 141
+#define SYS_reboot 142
+#define SYS_setregid 143
+#define SYS_setgid 144
+#define SYS_setreuid 145
+#define SYS_setuid 146
+#define SYS_setresuid 147
+#define SYS_getresuid 148
+#define SYS_setresgid 149
+#define SYS_getresgid 150
+#define SYS_setfsuid 151
+#define SYS_setfsgid 152
+#define SYS_times 153
+#define SYS_setpgid 154
+#define SYS_getpgid 155
+#define SYS_getsid 156
+#define SYS_setsid 157
+#define SYS_getgroups 158
+#define SYS_setgroups 159
+#define SYS_uname 160
+#define SYS_sethostname 161
+#define SYS_setdomainname 162
+#define SYS_getrlimit 163
+#define SYS_setrlimit 164
+#define SYS_getrusage 165
+#define SYS_umask 166
+#define SYS_prctl 167
+#define SYS_getcpu 168
+#define SYS_gettimeofday 169
+#define SYS_settimeofday 170
+#define SYS_adjtimex 171
+#define SYS_getpid 172
+#define SYS_getppid 173
+#define SYS_getuid 174
+#define SYS_geteuid 175
+#define SYS_getgid 176
+#define SYS_getegid 177
+#define SYS_gettid 178
+#define SYS_sysinfo 179
+#define SYS_mq_open 180
+#define SYS_mq_unlink 181
+#define SYS_mq_timedsend 182
+#define SYS_mq_timedreceive 183
+#define SYS_mq_notify 184
+#define SYS_mq_getsetattr 185
+#define SYS_msgget 186
+#define SYS_msgctl 187
+#define SYS_msgrcv 188
+#define SYS_msgsnd 189
+#define SYS_semget 190
+#define SYS_semctl 191
+#define SYS_semtimedop 192
+#define SYS_semop 193
+#define SYS_shmget 194
+#define SYS_shmctl 195
+#define SYS_shmat 196
+#define SYS_shmdt 197
+#define SYS_socket 198
+#define SYS_socketpair 199
+#define SYS_bind 200
+#define SYS_listen 201
+#define SYS_accept 202
+#define SYS_connect 203
+#define SYS_getsockname 204
+#define SYS_getpeername 205
+#define SYS_sendto 206
+#define SYS_recvfrom 207
+#define SYS_setsockopt 208
+#define SYS_getsockopt 209
+#define SYS_shutdown 210
+#define SYS_sendmsg 211
+#define SYS_recvmsg 212
+#define SYS_readahead 213
+#define SYS_brk 214
+#define SYS_munmap 215
+#define SYS_mremap 216
+#define SYS_add_key 217
+#define SYS_request_key 218
+#define SYS_keyctl 219
+#define SYS_clone 220
+#define SYS_execve 221
+#define SYS_mmap 222
+#define SYS_fadvise64 223
+#define SYS_swapon 224
+#define SYS_swapoff 225
+#define SYS_mprotect 226
+#define SYS_msync 227
+#define SYS_mlock 228
+#define SYS_munlock 229
+#define SYS_mlockall 230
+#define SYS_munlockall 231
+#define SYS_mincore 232
+#define SYS_madvise 233
+#define SYS_remap_file_pages 234
+#define SYS_mbind 235
+#define SYS_get_mempolicy 236
+#define SYS_set_mempolicy 237
+#define SYS_migrate_pages 238
+#define SYS_move_pages 239
+#define SYS_rt_tgsigqueueinfo 240
+#define SYS_perf_event_open 241
+#define SYS_accept4 242
+#define SYS_recvmmsg 243
+#define SYS_wait4 260
+#define SYS_prlimit64 261
+#define SYS_fanotify_init 262
+#define SYS_fanotify_mark 263
+#define SYS_name_to_handle_at 264
+#define SYS_open_by_handle_at 265
+#define SYS_clock_adjtime 266
+#define SYS_syncfs 267
+#define SYS_setns 268
+#define SYS_sendmmsg 269
+#define SYS_process_vm_readv 270
+#define SYS_process_vm_writev 271
+#define SYS_kcmp 272
+#define SYS_finit_module 273
+#define SYS_sched_setattr 274
+#define SYS_sched_getattr 275
+#define SYS_renameat2 276
+#define SYS_seccomp 277
+#define SYS_getrandom 278
+#define SYS_memfd_create 279
+#define SYS_bpf 280
+#define SYS_execveat 281
+#define SYS_userfaultfd 282
+#define SYS_membarrier 283
+#define SYS_mlock2 284
+#define SYS_copy_file_range 285
+#define SYS_preadv2 286
+#define SYS_pwritev2 287
+#define SYS_pkey_mprotect 288
+#define SYS_pkey_alloc 289
+#define SYS_pkey_free 290
+#define SYS_statx 291
+#define SYS_io_pgetevents 292
+#define SYS_rseq 293
+#define SYS_kexec_file_load 294
+#define SYS_pidfd_send_signal 424
+#define SYS_io_uring_setup 425
+#define SYS_io_uring_enter 426
+#define SYS_io_uring_register 427
+#define SYS_open_tree 428
+#define SYS_move_mount 429
+#define SYS_fsopen 430
+#define SYS_fsconfig 431
+#define SYS_fsmount 432
+#define SYS_fspick 433
+#define SYS_pidfd_open 434
+#define SYS_clone3 435
+#define SYS_close_range 436
+#define SYS_openat2 437
+#define SYS_pidfd_getfd 438
+#define SYS_faccessat2 439
+#define SYS_process_madvise 440
+#define SYS_epoll_pwait2 441
+#define SYS_mount_setattr 442
+#define SYS_landlock_create_ruleset 444
+#define SYS_landlock_add_rule 445
+#define SYS_landlock_restrict_self 446
diff --git a/thirdparty/open_source/musl/libc/arch/aarch64/bits/syscall.h.in b/thirdparty/open_source/musl/libc/arch/aarch64/bits/syscall.h.in
index 93648af..5f420e6 100644
--- a/thirdparty/open_source/musl/libc/arch/aarch64/bits/syscall.h.in
+++ b/thirdparty/open_source/musl/libc/arch/aarch64/bits/syscall.h.in
@@ -289,4 +289,14 @@
#define __NR_fspick 433
#define __NR_pidfd_open 434
#define __NR_clone3 435
+#define __NR_close_range 436
+#define __NR_openat2 437
+#define __NR_pidfd_getfd 438
+#define __NR_faccessat2 439
+#define __NR_process_madvise 440
+#define __NR_epoll_pwait2 441
+#define __NR_mount_setattr 442
+#define __NR_landlock_create_ruleset 444
+#define __NR_landlock_add_rule 445
+#define __NR_landlock_restrict_self 446
diff --git a/thirdparty/open_source/musl/libc/arch/aarch64/bits/user.h b/thirdparty/open_source/musl/libc/arch/aarch64/bits/user.h
index d12cdf7..8a1002a 100644
--- a/thirdparty/open_source/musl/libc/arch/aarch64/bits/user.h
+++ b/thirdparty/open_source/musl/libc/arch/aarch64/bits/user.h
@@ -6,7 +6,7 @@ struct user_regs_struct {
};
struct user_fpsimd_struct {
- long double vregs[32];
+ __uint128_t vregs[32];
unsigned int fpsr;
unsigned int fpcr;
};
diff --git a/thirdparty/open_source/musl/libc/arch/aarch64/pthread_arch.h b/thirdparty/open_source/musl/libc/arch/aarch64/pthread_arch.h
index e64b126..3909616 100644
--- a/thirdparty/open_source/musl/libc/arch/aarch64/pthread_arch.h
+++ b/thirdparty/open_source/musl/libc/arch/aarch64/pthread_arch.h
@@ -1,12 +1,11 @@
-static inline struct pthread *__pthread_self()
+static inline uintptr_t __get_tp()
{
- char *self;
- __asm__ ("mrs %0,tpidr_el0" : "=r"(self));
- return (void*)(self - sizeof(struct pthread));
+ uintptr_t tp;
+ __asm__ ("mrs %0,tpidr_el0" : "=r"(tp));
+ return tp;
}
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 16
-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
#define MC_PC pc
diff --git a/thirdparty/open_source/musl/libc/arch/arm/bits/alltypes.h b/thirdparty/open_source/musl/libc/arch/arm/bits/alltypes.h
index 41b4204..8121b75 100644
--- a/thirdparty/open_source/musl/libc/arch/arm/bits/alltypes.h
+++ b/thirdparty/open_source/musl/libc/arch/arm/bits/alltypes.h
@@ -1,31 +1,16 @@
-#define _Addr int
+#define _REDIR_TIME64 0
+#define _Addr int
#define _Int64 long long
-#define _Reg int
+#define _Reg int
-#define __LITTLE_ENDIAN 1234
-#define __BIG_ENDIAN 4321
-#define __USE_TIME_BITS64 1
-
-#ifndef __BYTE_ORDER
-#if __AARCH64EB__
+#if __ARMEB__
#define __BYTE_ORDER 4321
#else
#define __BYTE_ORDER 1234
#endif
-#endif
#define __LONG_MAX 0x7fffffffL
-#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
-typedef __builtin_va_list va_list;
-#define __DEFINED_va_list
-#endif
-
-#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
-typedef __builtin_va_list __isoc_va_list;
-#define __DEFINED___isoc_va_list
-#endif
-
#ifndef __cplusplus
#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
typedef unsigned wchar_t;
@@ -44,100 +29,15 @@ typedef double double_t;
#define __DEFINED_double_t
#endif
+
#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
-typedef struct {
- long long __ll;
- long double __ld;
-} max_align_t;
+typedef struct { long long __ll; long double __ld; } max_align_t;
#define __DEFINED_max_align_t
#endif
-#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
-typedef long time_t;
-#define __DEFINED_time_t
-#endif
-
-#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
-typedef long suseconds_t;
-#define __DEFINED_suseconds_t
-#endif
-
-#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
-typedef struct {
- union {
- int __i[9];
- volatile int __vi[9];
- unsigned __s[9];
- } __u;
-} pthread_attr_t;
-#define __DEFINED_pthread_attr_t
-#endif
-
-#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
-typedef struct {
- union {
- int __i[6];
- volatile int __vi[6];
- volatile void *volatile __p[6];
- } __u;
-} pthread_mutex_t;
-#define __DEFINED_pthread_mutex_t
-#endif
-
-#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
-typedef struct {
- union {
- int __i[6];
- volatile int __vi[6];
- volatile void *volatile __p[6];
- } __u;
-} mtx_t;
-#define __DEFINED_mtx_t
-#endif
-
-#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
-typedef struct {
- union {
- int __i[12];
- volatile int __vi[12];
- void *__p[12];
- } __u;
-} pthread_cond_t;
-#define __DEFINED_pthread_cond_t
-#endif
-
-#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
-typedef struct {
- union {
- int __i[12];
- volatile int __vi[12];
- void *__p[12];
- } __u;
-} cnd_t;
-#define __DEFINED_cnd_t
-#endif
-
-#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
-typedef struct {
- union {
- int __i[8];
- volatile int __vi[8];
- void *__p[8];
- } __u;
-} pthread_rwlock_t;
-#define __DEFINED_pthread_rwlock_t
-#endif
-
-#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
-typedef struct {
- union {
- int __i[5];
- volatile int __vi[5];
- void *__p[5];
- } __u;
-} pthread_barrier_t;
-#define __DEFINED_pthread_barrier_t
-#endif
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+#define __USE_TIME_BITS64 1
#if defined(__NEED_size_t) && !defined(__DEFINED_size_t)
typedef unsigned _Addr size_t;
@@ -174,28 +74,39 @@ typedef _Reg register_t;
#define __DEFINED_register_t
#endif
+#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
+typedef long time_t;
+#define __DEFINED_time_t
+#endif
+
+#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
+typedef long suseconds_t;
+#define __DEFINED_suseconds_t
+#endif
+
+
#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t)
typedef signed char int8_t;
#define __DEFINED_int8_t
#endif
#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t)
-typedef short int16_t;
+typedef signed short int16_t;
#define __DEFINED_int16_t
#endif
#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t)
-typedef int int32_t;
+typedef signed int int32_t;
#define __DEFINED_int32_t
#endif
#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t)
-typedef _Int64 int64_t;
+typedef signed _Int64 int64_t;
#define __DEFINED_int64_t
#endif
#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t)
-typedef _Int64 intmax_t;
+typedef signed _Int64 intmax_t;
#define __DEFINED_intmax_t
#endif
@@ -229,6 +140,7 @@ typedef unsigned _Int64 uintmax_t;
#define __DEFINED_uintmax_t
#endif
+
#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t)
typedef unsigned mode_t;
#define __DEFINED_mode_t
@@ -274,6 +186,7 @@ typedef unsigned _Int64 fsfilcnt_t;
#define __DEFINED_fsfilcnt_t
#endif
+
#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
typedef unsigned wint_t;
#define __DEFINED_wint_t
@@ -284,8 +197,9 @@ typedef unsigned long wctype_t;
#define __DEFINED_wctype_t
#endif
+
#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t)
-typedef void *timer_t;
+typedef void * timer_t;
#define __DEFINED_timer_t
#endif
@@ -300,21 +214,16 @@ typedef long clock_t;
#endif
#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval)
-struct timeval {
- time_t tv_sec;
- suseconds_t tv_usec;
-};
+struct timeval { time_t tv_sec; suseconds_t tv_usec; };
#define __DEFINED_struct_timeval
#endif
#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec)
-struct timespec {
- time_t tv_sec;
- long tv_nsec;
-};
+struct timespec { time_t tv_sec; long tv_nsec; };
#define __DEFINED_struct_timespec
#endif
+
#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t)
typedef int pid_t;
#define __DEFINED_pid_t
@@ -345,6 +254,7 @@ typedef unsigned useconds_t;
#define __DEFINED_useconds_t
#endif
+
#ifdef __cplusplus
#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
typedef unsigned long pthread_t;
@@ -353,7 +263,7 @@ typedef unsigned long pthread_t;
#else
#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
-typedef struct __pthread *pthread_t;
+typedef struct __pthread * pthread_t;
#define __DEFINED_pthread_t
#endif
@@ -374,65 +284,78 @@ typedef int pthread_spinlock_t;
#endif
#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t)
-typedef struct {
- unsigned __attr;
-} pthread_mutexattr_t;
+typedef struct { unsigned __attr; } pthread_mutexattr_t;
#define __DEFINED_pthread_mutexattr_t
#endif
#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t)
-typedef struct {
- unsigned __attr;
-} pthread_condattr_t;
+typedef struct { unsigned __attr; } pthread_condattr_t;
#define __DEFINED_pthread_condattr_t
#endif
#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t)
-typedef struct {
- unsigned __attr;
-} pthread_barrierattr_t;
+typedef struct { unsigned __attr; } pthread_barrierattr_t;
#define __DEFINED_pthread_barrierattr_t
#endif
#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t)
-typedef struct {
- unsigned __attr[2];
-} pthread_rwlockattr_t;
+typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t;
#define __DEFINED_pthread_rwlockattr_t
#endif
+
+#if defined(__NEED_struct__IO_FILE) && !defined(__DEFINED_struct__IO_FILE)
+struct _IO_FILE { char __x; };
+#define __DEFINED_struct__IO_FILE
+#endif
+
#if defined(__NEED_FILE) && !defined(__DEFINED_FILE)
typedef struct _IO_FILE FILE;
#define __DEFINED_FILE
#endif
+
+#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
+typedef __builtin_va_list va_list;
+#define __DEFINED_va_list
+#endif
+
+#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
+typedef __builtin_va_list __isoc_va_list;
+#define __DEFINED___isoc_va_list
+#endif
+
+
#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t)
-typedef struct __mbstate_t {
- unsigned __opaque1, __opaque2;
-} mbstate_t;
+typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
#define __DEFINED_mbstate_t
#endif
+
#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t)
-typedef struct __locale_struct *locale_t;
+typedef struct __locale_struct * locale_t;
#define __DEFINED_locale_t
#endif
+
#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t)
-typedef struct __sigset_t {
- unsigned long __bits[128 / sizeof(long)];
-} sigset_t;
+typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
#define __DEFINED_sigset_t
#endif
+
#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec)
-struct iovec {
- void *iov_base;
- size_t iov_len;
-};
+struct iovec { void *iov_base; size_t iov_len; };
#define __DEFINED_struct_iovec
#endif
+
+#if defined(__NEED_struct_winsize) && !defined(__DEFINED_struct_winsize)
+struct winsize { unsigned short ws_row, ws_col, ws_xpixel, ws_ypixel; };
+#define __DEFINED_struct_winsize
+#endif
+
+
#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t)
typedef unsigned socklen_t;
#define __DEFINED_socklen_t
@@ -443,6 +366,43 @@ typedef unsigned short sa_family_t;
#define __DEFINED_sa_family_t
#endif
+
+#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
+typedef struct { union { int __i[sizeof(long)==8?14:9]; volatile int __vi[sizeof(long)==8?14:9]; unsigned long __s[sizeof(long)==8?7:9]; } __u; } pthread_attr_t;
+#define __DEFINED_pthread_attr_t
+#endif
+
+#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
+typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } pthread_mutex_t;
+#define __DEFINED_pthread_mutex_t
+#endif
+
+#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
+typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } mtx_t;
+#define __DEFINED_mtx_t
+#endif
+
+#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } pthread_cond_t;
+#define __DEFINED_pthread_cond_t
+#endif
+
+#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
+typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } cnd_t;
+#define __DEFINED_cnd_t
+#endif
+
+#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
+typedef struct { union { int __i[sizeof(long)==8?14:8]; volatile int __vi[sizeof(long)==8?14:8]; void *__p[sizeof(long)==8?7:8]; } __u; } pthread_rwlock_t;
+#define __DEFINED_pthread_rwlock_t
+#endif
+
+#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
+typedef struct { union { int __i[sizeof(long)==8?8:5]; volatile int __vi[sizeof(long)==8?8:5]; void *__p[sizeof(long)==8?4:5]; } __u; } pthread_barrier_t;
+#define __DEFINED_pthread_barrier_t
+#endif
+
+
#undef _Addr
#undef _Int64
#undef _Reg
diff --git a/thirdparty/open_source/musl/libc/arch/arm/bits/syscall.h b/thirdparty/open_source/musl/libc/arch/arm/bits/syscall.h
index 6b128e5..2131e1e 100644
--- a/thirdparty/open_source/musl/libc/arch/arm/bits/syscall.h
+++ b/thirdparty/open_source/musl/libc/arch/arm/bits/syscall.h
@@ -1,715 +1,810 @@
-#define __NR_restart_syscall 0
-#define __NR_exit 1
-#define __NR_fork 2
-#define __NR_read 3
-#define __NR_write 4
-#define __NR_open 5
-#define __NR_close 6
-#define __NR_creat 8
-#define __NR_link 9
-#define __NR_unlink 10
-#define __NR_execve 11
-#define __NR_chdir 12
-#define __NR_mknod 14
-#define __NR_chmod 15
-#define __NR_lchown 16
-#define __NR_lseek 19
-#define __NR_getpid 20
-#define __NR_mount 21
-#define __NR_setuid 23
-#define __NR_getuid 24
-#define __NR_ptrace 26
-#define __NR_pause 29
-#define __NR_access 33
-#define __NR_nice 34
-#define __NR_sync 36
-#define __NR_kill 37
-#define __NR_rename 38
-#define __NR_mkdir 39
-#define __NR_rmdir 40
-#define __NR_dup 41
-#define __NR_pipe 42
-#define __NR_times 43
-#define __NR_brk 45
-#define __NR_setgid 46
-#define __NR_getgid 47
-#define __NR_geteuid 49
-#define __NR_getegid 50
-#define __NR_acct 51
-#define __NR_umount2 52
-#define __NR_ioctl 54
-#define __NR_fcntl 55
-#define __NR_setpgid 57
-#define __NR_umask 60
-#define __NR_chroot 61
-#define __NR_ustat 62
-#define __NR_dup2 63
-#define __NR_getppid 64
-#define __NR_getpgrp 65
-#define __NR_setsid 66
-#define __NR_sigaction 67
-#define __NR_setreuid 70
-#define __NR_setregid 71
-#define __NR_sigsuspend 72
-#define __NR_sigpending 73
-#define __NR_sethostname 74
-#define __NR_setrlimit 75
-#define __NR_getrusage 77
-#define __NR_gettimeofday 78
-#define __NR_settimeofday 79
-#define __NR_getgroups 80
-#define __NR_setgroups 81
-#define __NR_symlink 83
-#define __NR_readlink 85
-#define __NR_uselib 86
-#define __NR_swapon 87
-#define __NR_reboot 88
-#define __NR_munmap 91
-#define __NR_truncate 92
-#define __NR_ftruncate 93
-#define __NR_fchmod 94
-#define __NR_fchown 95
-#define __NR_getpriority 96
-#define __NR_setpriority 97
-#define __NR_statfs 99
-#define __NR_fstatfs 100
-#define __NR_syslog 103
-#define __NR_setitimer 104
-#define __NR_getitimer 105
-#define __NR_stat 106
-#define __NR_lstat 107
-#define __NR_fstat 108
-#define __NR_vhangup 111
-#define __NR_wait4 114
-#define __NR_swapoff 115
-#define __NR_sysinfo 116
-#define __NR_fsync 118
-#define __NR_sigreturn 119
-#define __NR_clone 120
-#define __NR_setdomainname 121
-#define __NR_uname 122
-#define __NR_adjtimex 124
-#define __NR_mprotect 125
-#define __NR_sigprocmask 126
-#define __NR_init_module 128
-#define __NR_delete_module 129
-#define __NR_quotactl 131
-#define __NR_getpgid 132
-#define __NR_fchdir 133
-#define __NR_bdflush 134
-#define __NR_sysfs 135
-#define __NR_personality 136
-#define __NR_setfsuid 138
-#define __NR_setfsgid 139
-#define __NR__llseek 140
-#define __NR_getdents 141
-#define __NR__newselect 142
-#define __NR_flock 143
-#define __NR_msync 144
-#define __NR_readv 145
-#define __NR_writev 146
-#define __NR_getsid 147
-#define __NR_fdatasync 148
-#define __NR__sysctl 149
-#define __NR_mlock 150
-#define __NR_munlock 151
-#define __NR_mlockall 152
-#define __NR_munlockall 153
-#define __NR_sched_setparam 154
-#define __NR_sched_getparam 155
-#define __NR_sched_setscheduler 156
-#define __NR_sched_getscheduler 157
-#define __NR_sched_yield 158
-#define __NR_sched_get_priority_max 159
-#define __NR_sched_get_priority_min 160
-#define __NR_sched_rr_get_interval 161
-#define __NR_nanosleep 162
-#define __NR_mremap 163
-#define __NR_setresuid 164
-#define __NR_getresuid 165
-#define __NR_poll 168
-#define __NR_nfsservctl 169
-#define __NR_setresgid 170
-#define __NR_getresgid 171
-#define __NR_prctl 172
-#define __NR_rt_sigreturn 173
-#define __NR_rt_sigaction 174
-#define __NR_rt_sigprocmask 175
-#define __NR_rt_sigpending 176
-#define __NR_rt_sigtimedwait 177
-#define __NR_rt_sigqueueinfo 178
-#define __NR_rt_sigsuspend 179
-#define __NR_pread64 180
-#define __NR_pwrite64 181
-#define __NR_chown 182
-#define __NR_getcwd 183
-#define __NR_capget 184
-#define __NR_capset 185
-#define __NR_sigaltstack 186
-#define __NR_sendfile 187
-#define __NR_vfork 190
-#define __NR_ugetrlimit 191
-#define __NR_mmap2 192
-#define __NR_truncate64 193
-#define __NR_ftruncate64 194
-#define __NR_stat64 195
-#define __NR_lstat64 196
-#define __NR_fstat64 197
-#define __NR_lchown32 198
-#define __NR_getuid32 199
-#define __NR_getgid32 200
-#define __NR_geteuid32 201
-#define __NR_getegid32 202
-#define __NR_setreuid32 203
-#define __NR_setregid32 204
-#define __NR_getgroups32 205
-#define __NR_setgroups32 206
-#define __NR_fchown32 207
-#define __NR_setresuid32 208
-#define __NR_getresuid32 209
-#define __NR_setresgid32 210
-#define __NR_getresgid32 211
-#define __NR_chown32 212
-#define __NR_setuid32 213
-#define __NR_setgid32 214
-#define __NR_setfsuid32 215
-#define __NR_setfsgid32 216
-#define __NR_getdents64 217
-#define __NR_pivot_root 218
-#define __NR_mincore 219
-#define __NR_madvise 220
-#define __NR_fcntl64 221
-#define __NR_gettid 224
-#define __NR_readahead 225
-#define __NR_setxattr 226
-#define __NR_lsetxattr 227
-#define __NR_fsetxattr 228
-#define __NR_getxattr 229
-#define __NR_lgetxattr 230
-#define __NR_fgetxattr 231
-#define __NR_listxattr 232
-#define __NR_llistxattr 233
-#define __NR_flistxattr 234
-#define __NR_removexattr 235
-#define __NR_lremovexattr 236
-#define __NR_fremovexattr 237
-#define __NR_tkill 238
-#define __NR_sendfile64 239
-#define __NR_futex 240
-#define __NR_sched_setaffinity 241
-#define __NR_sched_getaffinity 242
-#define __NR_io_setup 243
-#define __NR_io_destroy 244
-#define __NR_io_getevents 245
-#define __NR_io_submit 246
-#define __NR_io_cancel 247
-#define __NR_exit_group 248
-#define __NR_lookup_dcookie 249
-#define __NR_epoll_create 250
-#define __NR_epoll_ctl 251
-#define __NR_epoll_wait 252
-#define __NR_remap_file_pages 253
-#define __NR_set_tid_address 256
-#define __NR_timer_create 257
-#define __NR_timer_settime 258
-#define __NR_timer_gettime 259
-#define __NR_timer_getoverrun 260
-#define __NR_timer_delete 261
-#define __NR_clock_settime 262
-#define __NR_clock_gettime 263
-#define __NR_clock_getres 264
-#define __NR_clock_nanosleep 265
-#define __NR_statfs64 266
-#define __NR_fstatfs64 267
-#define __NR_tgkill 268
-#define __NR_utimes 269
-#define __NR_fadvise64_64 270
-#define __NR_arm_fadvise64_64 270
-#define __NR_pciconfig_iobase 271
-#define __NR_pciconfig_read 272
-#define __NR_pciconfig_write 273
-#define __NR_mq_open 274
-#define __NR_mq_unlink 275
-#define __NR_mq_timedsend 276
-#define __NR_mq_timedreceive 277
-#define __NR_mq_notify 278
-#define __NR_mq_getsetattr 279
-#define __NR_waitid 280
-#define __NR_socket 281
-#define __NR_bind 282
-#define __NR_connect 283
-#define __NR_listen 284
-#define __NR_accept 285
-#define __NR_getsockname 286
-#define __NR_getpeername 287
-#define __NR_socketpair 288
-#define __NR_send 289
-#define __NR_sendto 290
-#define __NR_recv 291
-#define __NR_recvfrom 292
-#define __NR_shutdown 293
-#define __NR_setsockopt 294
-#define __NR_getsockopt 295
-#define __NR_sendmsg 296
-#define __NR_recvmsg 297
-#define __NR_semop 298
-#define __NR_semget 299
-#define __NR_semctl 300
-#define __NR_msgsnd 301
-#define __NR_msgrcv 302
-#define __NR_msgget 303
-#define __NR_msgctl 304
-#define __NR_shmat 305
-#define __NR_shmdt 306
-#define __NR_shmget 307
-#define __NR_shmctl 308
-#define __NR_add_key 309
-#define __NR_request_key 310
-#define __NR_keyctl 311
-#define __NR_semtimedop 312
-#define __NR_vserver 313
-#define __NR_ioprio_set 314
-#define __NR_ioprio_get 315
-#define __NR_inotify_init 316
-#define __NR_inotify_add_watch 317
-#define __NR_inotify_rm_watch 318
-#define __NR_mbind 319
-#define __NR_get_mempolicy 320
-#define __NR_set_mempolicy 321
-#define __NR_openat 322
-#define __NR_mkdirat 323
-#define __NR_mknodat 324
-#define __NR_fchownat 325
-#define __NR_futimesat 326
-#define __NR_fstatat64 327
-#define __NR_unlinkat 328
-#define __NR_renameat 329
-#define __NR_linkat 330
-#define __NR_symlinkat 331
-#define __NR_readlinkat 332
-#define __NR_fchmodat 333
-#define __NR_faccessat 334
-#define __NR_pselect6 335
-#define __NR_ppoll 336
-#define __NR_unshare 337
-#define __NR_set_robust_list 338
-#define __NR_get_robust_list 339
-#define __NR_splice 340
-#define __NR_sync_file_range2 341
-#define __NR_arm_sync_file_range 341
-#define __NR_tee 342
-#define __NR_vmsplice 343
-#define __NR_move_pages 344
-#define __NR_getcpu 345
-#define __NR_epoll_pwait 346
-#define __NR_kexec_load 347
-#define __NR_utimensat 348
-#define __NR_signalfd 349
-#define __NR_timerfd_create 350
-#define __NR_eventfd 351
-#define __NR_fallocate 352
-#define __NR_timerfd_settime 353
-#define __NR_timerfd_gettime 354
-#define __NR_signalfd4 355
-#define __NR_eventfd2 356
-#define __NR_epoll_create1 357
-#define __NR_dup3 358
-#define __NR_pipe2 359
-#define __NR_inotify_init1 360
-#define __NR_preadv 361
-#define __NR_pwritev 362
-#define __NR_rt_tgsigqueueinfo 363
-#define __NR_perf_event_open 364
-#define __NR_recvmmsg 365
-#define __NR_accept4 366
-#define __NR_fanotify_init 367
-#define __NR_fanotify_mark 368
-#define __NR_prlimit64 369
-#define __NR_name_to_handle_at 370
-#define __NR_open_by_handle_at 371
-#define __NR_clock_adjtime 372
-#define __NR_syncfs 373
-#define __NR_sendmmsg 374
-#define __NR_setns 375
-#define __NR_process_vm_readv 376
-#define __NR_process_vm_writev 377
-#define __NR_kcmp 378
-#define __NR_finit_module 379
-#define __NR_sched_setattr 380
-#define __NR_sched_getattr 381
-#define __NR_renameat2 382
-#define __NR_seccomp 383
-#define __NR_getrandom 384
-#define __NR_memfd_create 385
-#define __NR_bpf 386
-#define __NR_execveat 387
-#define __NR_userfaultfd 388
-#define __NR_membarrier 389
-#define __NR_mlock2 390
-#define __NR_copy_file_range 391
-#define __NR_preadv2 392
-#define __NR_pwritev2 393
-#define __NR_pkey_mprotect 394
-#define __NR_pkey_alloc 395
-#define __NR_pkey_free 396
+#define __NR_restart_syscall 0
+#define __NR_exit 1
+#define __NR_fork 2
+#define __NR_read 3
+#define __NR_write 4
+#define __NR_open 5
+#define __NR_close 6
+#define __NR_creat 8
+#define __NR_link 9
+#define __NR_unlink 10
+#define __NR_execve 11
+#define __NR_chdir 12
+#define __NR_mknod 14
+#define __NR_chmod 15
+#define __NR_lchown 16
+#define __NR_lseek 19
+#define __NR_getpid 20
+#define __NR_mount 21
+#define __NR_setuid 23
+#define __NR_getuid 24
+#define __NR_ptrace 26
+#define __NR_pause 29
+#define __NR_access 33
+#define __NR_nice 34
+#define __NR_sync 36
+#define __NR_kill 37
+#define __NR_rename 38
+#define __NR_mkdir 39
+#define __NR_rmdir 40
+#define __NR_dup 41
+#define __NR_pipe 42
+#define __NR_times 43
+#define __NR_brk 45
+#define __NR_setgid 46
+#define __NR_getgid 47
+#define __NR_geteuid 49
+#define __NR_getegid 50
+#define __NR_acct 51
+#define __NR_umount2 52
+#define __NR_ioctl 54
+#define __NR_fcntl 55
+#define __NR_setpgid 57
+#define __NR_umask 60
+#define __NR_chroot 61
+#define __NR_ustat 62
+#define __NR_dup2 63
+#define __NR_getppid 64
+#define __NR_getpgrp 65
+#define __NR_setsid 66
+#define __NR_sigaction 67
+#define __NR_setreuid 70
+#define __NR_setregid 71
+#define __NR_sigsuspend 72
+#define __NR_sigpending 73
+#define __NR_sethostname 74
+#define __NR_setrlimit 75
+#define __NR_getrusage 77
+#define __NR_gettimeofday_time32 78
+#define __NR_settimeofday_time32 79
+#define __NR_getgroups 80
+#define __NR_setgroups 81
+#define __NR_symlink 83
+#define __NR_readlink 85
+#define __NR_uselib 86
+#define __NR_swapon 87
+#define __NR_reboot 88
+#define __NR_munmap 91
+#define __NR_truncate 92
+#define __NR_ftruncate 93
+#define __NR_fchmod 94
+#define __NR_fchown 95
+#define __NR_getpriority 96
+#define __NR_setpriority 97
+#define __NR_statfs 99
+#define __NR_fstatfs 100
+#define __NR_syslog 103
+#define __NR_setitimer 104
+#define __NR_getitimer 105
+#define __NR_stat 106
+#define __NR_lstat 107
+#define __NR_fstat 108
+#define __NR_vhangup 111
+#define __NR_wait4 114
+#define __NR_swapoff 115
+#define __NR_sysinfo 116
+#define __NR_fsync 118
+#define __NR_sigreturn 119
+#define __NR_clone 120
+#define __NR_setdomainname 121
+#define __NR_uname 122
+#define __NR_adjtimex 124
+#define __NR_mprotect 125
+#define __NR_sigprocmask 126
+#define __NR_init_module 128
+#define __NR_delete_module 129
+#define __NR_quotactl 131
+#define __NR_getpgid 132
+#define __NR_fchdir 133
+#define __NR_bdflush 134
+#define __NR_sysfs 135
+#define __NR_personality 136
+#define __NR_setfsuid 138
+#define __NR_setfsgid 139
+#define __NR__llseek 140
+#define __NR_getdents 141
+#define __NR__newselect 142
+#define __NR_flock 143
+#define __NR_msync 144
+#define __NR_readv 145
+#define __NR_writev 146
+#define __NR_getsid 147
+#define __NR_fdatasync 148
+#define __NR__sysctl 149
+#define __NR_mlock 150
+#define __NR_munlock 151
+#define __NR_mlockall 152
+#define __NR_munlockall 153
+#define __NR_sched_setparam 154
+#define __NR_sched_getparam 155
+#define __NR_sched_setscheduler 156
+#define __NR_sched_getscheduler 157
+#define __NR_sched_yield 158
+#define __NR_sched_get_priority_max 159
+#define __NR_sched_get_priority_min 160
+#define __NR_sched_rr_get_interval 161
+#define __NR_nanosleep 162
+#define __NR_mremap 163
+#define __NR_setresuid 164
+#define __NR_getresuid 165
+#define __NR_poll 168
+#define __NR_nfsservctl 169
+#define __NR_setresgid 170
+#define __NR_getresgid 171
+#define __NR_prctl 172
+#define __NR_rt_sigreturn 173
+#define __NR_rt_sigaction 174
+#define __NR_rt_sigprocmask 175
+#define __NR_rt_sigpending 176
+#define __NR_rt_sigtimedwait 177
+#define __NR_rt_sigqueueinfo 178
+#define __NR_rt_sigsuspend 179
+#define __NR_pread64 180
+#define __NR_pwrite64 181
+#define __NR_chown 182
+#define __NR_getcwd 183
+#define __NR_capget 184
+#define __NR_capset 185
+#define __NR_sigaltstack 186
+#define __NR_sendfile 187
+#define __NR_vfork 190
+#define __NR_ugetrlimit 191
+#define __NR_mmap2 192
+#define __NR_truncate64 193
+#define __NR_ftruncate64 194
+#define __NR_stat64 195
+#define __NR_lstat64 196
+#define __NR_fstat64 197
+#define __NR_lchown32 198
+#define __NR_getuid32 199
+#define __NR_getgid32 200
+#define __NR_geteuid32 201
+#define __NR_getegid32 202
+#define __NR_setreuid32 203
+#define __NR_setregid32 204
+#define __NR_getgroups32 205
+#define __NR_setgroups32 206
+#define __NR_fchown32 207
+#define __NR_setresuid32 208
+#define __NR_getresuid32 209
+#define __NR_setresgid32 210
+#define __NR_getresgid32 211
+#define __NR_chown32 212
+#define __NR_setuid32 213
+#define __NR_setgid32 214
+#define __NR_setfsuid32 215
+#define __NR_setfsgid32 216
+#define __NR_getdents64 217
+#define __NR_pivot_root 218
+#define __NR_mincore 219
+#define __NR_madvise 220
+#define __NR_fcntl64 221
+#define __NR_gettid 224
+#define __NR_readahead 225
+#define __NR_setxattr 226
+#define __NR_lsetxattr 227
+#define __NR_fsetxattr 228
+#define __NR_getxattr 229
+#define __NR_lgetxattr 230
+#define __NR_fgetxattr 231
+#define __NR_listxattr 232
+#define __NR_llistxattr 233
+#define __NR_flistxattr 234
+#define __NR_removexattr 235
+#define __NR_lremovexattr 236
+#define __NR_fremovexattr 237
+#define __NR_tkill 238
+#define __NR_sendfile64 239
+#define __NR_futex 240
+#define __NR_sched_setaffinity 241
+#define __NR_sched_getaffinity 242
+#define __NR_io_setup 243
+#define __NR_io_destroy 244
+#define __NR_io_getevents 245
+#define __NR_io_submit 246
+#define __NR_io_cancel 247
+#define __NR_exit_group 248
+#define __NR_lookup_dcookie 249
+#define __NR_epoll_create 250
+#define __NR_epoll_ctl 251
+#define __NR_epoll_wait 252
+#define __NR_remap_file_pages 253
+#define __NR_set_tid_address 256
+#define __NR_timer_create 257
+#define __NR_timer_settime32 258
+#define __NR_timer_gettime32 259
+#define __NR_timer_getoverrun 260
+#define __NR_timer_delete 261
+#define __NR_clock_settime32 262
+#define __NR_clock_gettime32 263
+#define __NR_clock_getres_time32 264
+#define __NR_clock_nanosleep_time32 265
+#define __NR_statfs64 266
+#define __NR_fstatfs64 267
+#define __NR_tgkill 268
+#define __NR_utimes 269
+#define __NR_fadvise64_64 270
+#define __NR_arm_fadvise64_64 270
+#define __NR_pciconfig_iobase 271
+#define __NR_pciconfig_read 272
+#define __NR_pciconfig_write 273
+#define __NR_mq_open 274
+#define __NR_mq_unlink 275
+#define __NR_mq_timedsend 276
+#define __NR_mq_timedreceive 277
+#define __NR_mq_notify 278
+#define __NR_mq_getsetattr 279
+#define __NR_waitid 280
+#define __NR_socket 281
+#define __NR_bind 282
+#define __NR_connect 283
+#define __NR_listen 284
+#define __NR_accept 285
+#define __NR_getsockname 286
+#define __NR_getpeername 287
+#define __NR_socketpair 288
+#define __NR_send 289
+#define __NR_sendto 290
+#define __NR_recv 291
+#define __NR_recvfrom 292
+#define __NR_shutdown 293
+#define __NR_setsockopt 294
+#define __NR_getsockopt 295
+#define __NR_sendmsg 296
+#define __NR_recvmsg 297
+#define __NR_semop 298
+#define __NR_semget 299
+#define __NR_semctl 300
+#define __NR_msgsnd 301
+#define __NR_msgrcv 302
+#define __NR_msgget 303
+#define __NR_msgctl 304
+#define __NR_shmat 305
+#define __NR_shmdt 306
+#define __NR_shmget 307
+#define __NR_shmctl 308
+#define __NR_add_key 309
+#define __NR_request_key 310
+#define __NR_keyctl 311
+#define __NR_semtimedop 312
+#define __NR_vserver 313
+#define __NR_ioprio_set 314
+#define __NR_ioprio_get 315
+#define __NR_inotify_init 316
+#define __NR_inotify_add_watch 317
+#define __NR_inotify_rm_watch 318
+#define __NR_mbind 319
+#define __NR_get_mempolicy 320
+#define __NR_set_mempolicy 321
+#define __NR_openat 322
+#define __NR_mkdirat 323
+#define __NR_mknodat 324
+#define __NR_fchownat 325
+#define __NR_futimesat 326
+#define __NR_fstatat64 327
+#define __NR_unlinkat 328
+#define __NR_renameat 329
+#define __NR_linkat 330
+#define __NR_symlinkat 331
+#define __NR_readlinkat 332
+#define __NR_fchmodat 333
+#define __NR_faccessat 334
+#define __NR_pselect6 335
+#define __NR_ppoll 336
+#define __NR_unshare 337
+#define __NR_set_robust_list 338
+#define __NR_get_robust_list 339
+#define __NR_splice 340
+#define __NR_sync_file_range2 341
+#define __NR_arm_sync_file_range 341
+#define __NR_tee 342
+#define __NR_vmsplice 343
+#define __NR_move_pages 344
+#define __NR_getcpu 345
+#define __NR_epoll_pwait 346
+#define __NR_kexec_load 347
+#define __NR_utimensat 348
+#define __NR_signalfd 349
+#define __NR_timerfd_create 350
+#define __NR_eventfd 351
+#define __NR_fallocate 352
+#define __NR_timerfd_settime32 353
+#define __NR_timerfd_gettime32 354
+#define __NR_signalfd4 355
+#define __NR_eventfd2 356
+#define __NR_epoll_create1 357
+#define __NR_dup3 358
+#define __NR_pipe2 359
+#define __NR_inotify_init1 360
+#define __NR_preadv 361
+#define __NR_pwritev 362
+#define __NR_rt_tgsigqueueinfo 363
+#define __NR_perf_event_open 364
+#define __NR_recvmmsg 365
+#define __NR_accept4 366
+#define __NR_fanotify_init 367
+#define __NR_fanotify_mark 368
+#define __NR_prlimit64 369
+#define __NR_name_to_handle_at 370
+#define __NR_open_by_handle_at 371
+#define __NR_clock_adjtime 372
+#define __NR_syncfs 373
+#define __NR_sendmmsg 374
+#define __NR_setns 375
+#define __NR_process_vm_readv 376
+#define __NR_process_vm_writev 377
+#define __NR_kcmp 378
+#define __NR_finit_module 379
+#define __NR_sched_setattr 380
+#define __NR_sched_getattr 381
+#define __NR_renameat2 382
+#define __NR_seccomp 383
+#define __NR_getrandom 384
+#define __NR_memfd_create 385
+#define __NR_bpf 386
+#define __NR_execveat 387
+#define __NR_userfaultfd 388
+#define __NR_membarrier 389
+#define __NR_mlock2 390
+#define __NR_copy_file_range 391
+#define __NR_preadv2 392
+#define __NR_pwritev2 393
+#define __NR_pkey_mprotect 394
+#define __NR_pkey_alloc 395
+#define __NR_pkey_free 396
+#define __NR_statx 397
+#define __NR_rseq 398
+#define __NR_io_pgetevents 399
+#define __NR_migrate_pages 400
+#define __NR_kexec_file_load 401
+#define __NR_clock_gettime64 403
+#define __NR_clock_settime64 404
+#define __NR_clock_adjtime64 405
+#define __NR_clock_getres_time64 406
+#define __NR_clock_nanosleep_time64 407
+#define __NR_timer_gettime64 408
+#define __NR_timer_settime64 409
+#define __NR_timerfd_gettime64 410
+#define __NR_timerfd_settime64 411
+#define __NR_utimensat_time64 412
+#define __NR_pselect6_time64 413
+#define __NR_ppoll_time64 414
+#define __NR_io_pgetevents_time64 416
+#define __NR_recvmmsg_time64 417
+#define __NR_mq_timedsend_time64 418
+#define __NR_mq_timedreceive_time64 419
+#define __NR_semtimedop_time64 420
+#define __NR_rt_sigtimedwait_time64 421
+#define __NR_futex_time64 422
+#define __NR_sched_rr_get_interval_time64 423
+#define __NR_pidfd_send_signal 424
+#define __NR_io_uring_setup 425
+#define __NR_io_uring_enter 426
+#define __NR_io_uring_register 427
+#define __NR_open_tree 428
+#define __NR_move_mount 429
+#define __NR_fsopen 430
+#define __NR_fsconfig 431
+#define __NR_fsmount 432
+#define __NR_fspick 433
+#define __NR_pidfd_open 434
+#define __NR_clone3 435
+#define __NR_close_range 436
+#define __NR_openat2 437
+#define __NR_pidfd_getfd 438
+#define __NR_faccessat2 439
+#define __NR_process_madvise 440
+#define __NR_epoll_pwait2 441
+#define __NR_mount_setattr 442
+#define __NR_landlock_create_ruleset 444
+#define __NR_landlock_add_rule 445
+#define __NR_landlock_restrict_self 446
-#define __ARM_NR_breakpoint 0x0f0001
-#define __ARM_NR_cacheflush 0x0f0002
-#define __ARM_NR_usr26 0x0f0003
-#define __ARM_NR_usr32 0x0f0004
-#define __ARM_NR_set_tls 0x0f0005
+#define __ARM_NR_breakpoint 0x0f0001
+#define __ARM_NR_cacheflush 0x0f0002
+#define __ARM_NR_usr26 0x0f0003
+#define __ARM_NR_usr32 0x0f0004
+#define __ARM_NR_set_tls 0x0f0005
+#define __ARM_NR_get_tls 0x0f0006
-#define SYS_restart_syscall 0
-#define SYS_exit 1
-#define SYS_fork 2
-#define SYS_read 3
-#define SYS_write 4
-#define SYS_open 5
-#define SYS_close 6
-#define SYS_creat 8
-#define SYS_link 9
-#define SYS_unlink 10
-#define SYS_execve 11
-#define SYS_chdir 12
-#define SYS_mknod 14
-#define SYS_chmod 15
-#define SYS_lchown 16
-#define SYS_lseek 19
-#define SYS_getpid 20
-#define SYS_mount 21
-#define SYS_setuid 23
-#define SYS_getuid 24
-#define SYS_ptrace 26
-#define SYS_pause 29
-#define SYS_access 33
-#define SYS_nice 34
-#define SYS_sync 36
-#define SYS_kill 37
-#define SYS_rename 38
-#define SYS_mkdir 39
-#define SYS_rmdir 40
-#define SYS_dup 41
-#define SYS_pipe 42
-#define SYS_times 43
-#define SYS_brk 45
-#define SYS_setgid 46
-#define SYS_getgid 47
-#define SYS_geteuid 49
-#define SYS_getegid 50
-#define SYS_acct 51
-#define SYS_umount2 52
-#define SYS_ioctl 54
-#define SYS_fcntl 55
-#define SYS_setpgid 57
-#define SYS_umask 60
-#define SYS_chroot 61
-#define SYS_ustat 62
-#define SYS_dup2 63
-#define SYS_getppid 64
-#define SYS_getpgrp 65
-#define SYS_setsid 66
-#define SYS_sigaction 67
-#define SYS_setreuid 70
-#define SYS_setregid 71
-#define SYS_sigsuspend 72
-#define SYS_sigpending 73
-#define SYS_sethostname 74
-#define SYS_setrlimit 75
-#define SYS_getrusage 77
-#define SYS_gettimeofday 78
-#define SYS_settimeofday 79
-#define SYS_getgroups 80
-#define SYS_setgroups 81
-#define SYS_symlink 83
-#define SYS_readlink 85
-#define SYS_uselib 86
-#define SYS_swapon 87
-#define SYS_reboot 88
-#define SYS_munmap 91
-#define SYS_truncate 92
-#define SYS_ftruncate 93
-#define SYS_fchmod 94
-#define SYS_fchown 95
-#define SYS_getpriority 96
-#define SYS_setpriority 97
-#define SYS_statfs 99
-#define SYS_fstatfs 100
-#define SYS_syslog 103
-#define SYS_setitimer 104
-#define SYS_getitimer 105
-#define SYS_stat 106
-#define SYS_lstat 107
-#define SYS_fstat 108
-#define SYS_vhangup 111
-#define SYS_wait4 114
-#define SYS_swapoff 115
-#define SYS_sysinfo 116
-#define SYS_fsync 118
-#define SYS_sigreturn 119
-#define SYS_clone 120
-#define SYS_setdomainname 121
-#define SYS_uname 122
-#define SYS_adjtimex 124
-#define SYS_mprotect 125
-#define SYS_sigprocmask 126
-#define SYS_init_module 128
-#define SYS_delete_module 129
-#define SYS_quotactl 131
-#define SYS_getpgid 132
-#define SYS_fchdir 133
-#define SYS_bdflush 134
-#define SYS_sysfs 135
-#define SYS_personality 136
-#define SYS_setfsuid 138
-#define SYS_setfsgid 139
-#define SYS__llseek 140
-#define SYS_getdents 141
-#define SYS__newselect 142
-#define SYS_flock 143
-#define SYS_msync 144
-#define SYS_readv 145
-#define SYS_writev 146
-#define SYS_getsid 147
-#define SYS_fdatasync 148
-#define SYS__sysctl 149
-#define SYS_mlock 150
-#define SYS_munlock 151
-#define SYS_mlockall 152
-#define SYS_munlockall 153
-#define SYS_sched_setparam 154
-#define SYS_sched_getparam 155
-#define SYS_sched_setscheduler 156
-#define SYS_sched_getscheduler 157
-#define SYS_sched_yield 158
-#define SYS_sched_get_priority_max 159
-#define SYS_sched_get_priority_min 160
-#define SYS_sched_rr_get_interval 161
-#define SYS_nanosleep 162
-#define SYS_mremap 163
-#define SYS_setresuid 164
-#define SYS_getresuid 165
-#define SYS_poll 168
-#define SYS_nfsservctl 169
-#define SYS_setresgid 170
-#define SYS_getresgid 171
-#define SYS_prctl 172
-#define SYS_rt_sigreturn 173
-#define SYS_rt_sigaction 174
-#define SYS_rt_sigprocmask 175
-#define SYS_rt_sigpending 176
-#define SYS_rt_sigtimedwait 177
-#define SYS_rt_sigqueueinfo 178
-#define SYS_rt_sigsuspend 179
-#define SYS_pread64 180
-#define SYS_pwrite64 181
-#define SYS_chown 182
-#define SYS_getcwd 183
-#define SYS_capget 184
-#define SYS_capset 185
-#define SYS_sigaltstack 186
-#define SYS_sendfile 187
-#define SYS_vfork 190
-#define SYS_ugetrlimit 191
-#define SYS_mmap2 192
-#define SYS_truncate64 193
-#define SYS_ftruncate64 194
-#define SYS_stat64 195
-#define SYS_lstat64 196
-#define SYS_fstat64 197
-#define SYS_lchown32 198
-#define SYS_getuid32 199
-#define SYS_getgid32 200
-#define SYS_geteuid32 201
-#define SYS_getegid32 202
-#define SYS_setreuid32 203
-#define SYS_setregid32 204
-#define SYS_getgroups32 205
-#define SYS_setgroups32 206
-#define SYS_fchown32 207
-#define SYS_setresuid32 208
-#define SYS_getresuid32 209
-#define SYS_setresgid32 210
-#define SYS_getresgid32 211
-#define SYS_chown32 212
-#define SYS_setuid32 213
-#define SYS_setgid32 214
-#define SYS_setfsuid32 215
-#define SYS_setfsgid32 216
-#define SYS_getdents64 217
-#define SYS_pivot_root 218
-#define SYS_mincore 219
-#define SYS_madvise 220
-#define SYS_fcntl64 221
-#define SYS_gettid 224
-#define SYS_readahead 225
-#define SYS_setxattr 226
-#define SYS_lsetxattr 227
-#define SYS_fsetxattr 228
-#define SYS_getxattr 229
-#define SYS_lgetxattr 230
-#define SYS_fgetxattr 231
-#define SYS_listxattr 232
-#define SYS_llistxattr 233
-#define SYS_flistxattr 234
-#define SYS_removexattr 235
-#define SYS_lremovexattr 236
-#define SYS_fremovexattr 237
-#define SYS_tkill 238
-#define SYS_sendfile64 239
-#define SYS_futex 240
-#define SYS_sched_setaffinity 241
-#define SYS_sched_getaffinity 242
-#define SYS_io_setup 243
-#define SYS_io_destroy 244
-#define SYS_io_getevents 245
-#define SYS_io_submit 246
-#define SYS_io_cancel 247
-#define SYS_exit_group 248
-#define SYS_lookup_dcookie 249
-#define SYS_epoll_create 250
-#define SYS_epoll_ctl 251
-#define SYS_epoll_wait 252
-#define SYS_remap_file_pages 253
-#define SYS_set_tid_address 256
-#define SYS_timer_create 257
-#define SYS_timer_settime 258
-#define SYS_timer_gettime 259
-#define SYS_timer_getoverrun 260
-#define SYS_timer_delete 261
-#define SYS_clock_settime 262
-#define SYS_clock_gettime 263
-#define SYS_clock_getres 264
-#define SYS_clock_nanosleep 265
-#define SYS_statfs64 266
-#define SYS_fstatfs64 267
-#define SYS_tgkill 268
-#define SYS_utimes 269
-#define SYS_fadvise64_64 270
-#define SYS_arm_fadvise64_64 270
-#define SYS_pciconfig_iobase 271
-#define SYS_pciconfig_read 272
-#define SYS_pciconfig_write 273
-#define SYS_mq_open 274
-#define SYS_mq_unlink 275
-#define SYS_mq_timedsend 276
-#define SYS_mq_timedreceive 277
-#define SYS_mq_notify 278
-#define SYS_mq_getsetattr 279
-#define SYS_waitid 280
-#define SYS_socket 281
-#define SYS_bind 282
-#define SYS_connect 283
-#define SYS_listen 284
-#define SYS_accept 285
-#define SYS_getsockname 286
-#define SYS_getpeername 287
-#define SYS_socketpair 288
-#define SYS_send 289
-#define SYS_sendto 290
-#define SYS_recv 291
-#define SYS_recvfrom 292
-#define SYS_shutdown 293
-#define SYS_setsockopt 294
-#define SYS_getsockopt 295
-#define SYS_sendmsg 296
-#define SYS_recvmsg 297
-#define SYS_semop 298
-#define SYS_semget 299
-#define SYS_semctl 300
-#define SYS_msgsnd 301
-#define SYS_msgrcv 302
-#define SYS_msgget 303
-#define SYS_msgctl 304
-#define SYS_shmat 305
-#define SYS_shmdt 306
-#define SYS_shmget 307
-#define SYS_shmctl 308
-#define SYS_add_key 309
-#define SYS_request_key 310
-#define SYS_keyctl 311
-#define SYS_semtimedop 312
-#define SYS_vserver 313
-#define SYS_ioprio_set 314
-#define SYS_ioprio_get 315
-#define SYS_inotify_init 316
-#define SYS_inotify_add_watch 317
-#define SYS_inotify_rm_watch 318
-#define SYS_mbind 319
-#define SYS_get_mempolicy 320
-#define SYS_set_mempolicy 321
-#define SYS_openat 322
-#define SYS_mkdirat 323
-#define SYS_mknodat 324
-#define SYS_fchownat 325
-#define SYS_futimesat 326
-#define SYS_fstatat64 327
-#define SYS_unlinkat 328
-#define SYS_renameat 329
-#define SYS_linkat 330
-#define SYS_symlinkat 331
-#define SYS_readlinkat 332
-#define SYS_fchmodat 333
-#define SYS_faccessat 334
-#define SYS_pselect6 335
-#define SYS_ppoll 336
-#define SYS_unshare 337
-#define SYS_set_robust_list 338
-#define SYS_get_robust_list 339
-#define SYS_splice 340
-#define SYS_sync_file_range2 341
-#define SYS_arm_sync_file_range 341
-#define SYS_tee 342
-#define SYS_vmsplice 343
-#define SYS_move_pages 344
-#define SYS_getcpu 345
-#define SYS_epoll_pwait 346
-#define SYS_kexec_load 347
-#define SYS_utimensat 348
-#define SYS_signalfd 349
-#define SYS_timerfd_create 350
-#define SYS_eventfd 351
-#define SYS_fallocate 352
-#define SYS_timerfd_settime 353
-#define SYS_timerfd_gettime 354
-#define SYS_signalfd4 355
-#define SYS_eventfd2 356
-#define SYS_epoll_create1 357
-#define SYS_dup3 358
-#define SYS_pipe2 359
-#define SYS_inotify_init1 360
-#define SYS_preadv 361
-#define SYS_pwritev 362
-#define SYS_rt_tgsigqueueinfo 363
-#define SYS_perf_event_open 364
-#define SYS_recvmmsg 365
-#define SYS_accept4 366
-#define SYS_fanotify_init 367
-#define SYS_fanotify_mark 368
-#define SYS_prlimit64 369
-#define SYS_name_to_handle_at 370
-#define SYS_open_by_handle_at 371
-#define SYS_clock_adjtime 372
-#define SYS_syncfs 373
-#define SYS_sendmmsg 374
-#define SYS_setns 375
-#define SYS_process_vm_readv 376
-#define SYS_process_vm_writev 377
-#define SYS_kcmp 378
-#define SYS_finit_module 379
-#define SYS_sched_setattr 380
-#define SYS_sched_getattr 381
-#define SYS_renameat2 382
-#define SYS_seccomp 383
-#define SYS_getrandom 384
-#define SYS_memfd_create 385
-#define SYS_bpf 386
-#define SYS_execveat 387
-#define SYS_userfaultfd 388
-#define SYS_membarrier 389
-#define SYS_mlock2 390
-#define SYS_copy_file_range 391
-#define SYS_preadv2 392
-#define SYS_pwritev2 393
-#define SYS_pkey_mprotect 394
-#define SYS_pkey_alloc 395
-#define SYS_pkey_free 396
+#define SYS_restart_syscall 0
+#define SYS_exit 1
+#define SYS_fork 2
+#define SYS_read 3
+#define SYS_write 4
+#define SYS_open 5
+#define SYS_close 6
+#define SYS_creat 8
+#define SYS_link 9
+#define SYS_unlink 10
+#define SYS_execve 11
+#define SYS_chdir 12
+#define SYS_mknod 14
+#define SYS_chmod 15
+#define SYS_lchown 16
+#define SYS_lseek 19
+#define SYS_getpid 20
+#define SYS_mount 21
+#define SYS_setuid 23
+#define SYS_getuid 24
+#define SYS_ptrace 26
+#define SYS_pause 29
+#define SYS_access 33
+#define SYS_nice 34
+#define SYS_sync 36
+#define SYS_kill 37
+#define SYS_rename 38
+#define SYS_mkdir 39
+#define SYS_rmdir 40
+#define SYS_dup 41
+#define SYS_pipe 42
+#define SYS_times 43
+#define SYS_brk 45
+#define SYS_setgid 46
+#define SYS_getgid 47
+#define SYS_geteuid 49
+#define SYS_getegid 50
+#define SYS_acct 51
+#define SYS_umount2 52
+#define SYS_ioctl 54
+#define SYS_fcntl 55
+#define SYS_setpgid 57
+#define SYS_umask 60
+#define SYS_chroot 61
+#define SYS_ustat 62
+#define SYS_dup2 63
+#define SYS_getppid 64
+#define SYS_getpgrp 65
+#define SYS_setsid 66
+#define SYS_sigaction 67
+#define SYS_setreuid 70
+#define SYS_setregid 71
+#define SYS_sigsuspend 72
+#define SYS_sigpending 73
+#define SYS_sethostname 74
+#define SYS_setrlimit 75
+#define SYS_getrusage 77
+#define SYS_gettimeofday_time32 78
+#define SYS_settimeofday_time32 79
+#define SYS_getgroups 80
+#define SYS_setgroups 81
+#define SYS_symlink 83
+#define SYS_readlink 85
+#define SYS_uselib 86
+#define SYS_swapon 87
+#define SYS_reboot 88
+#define SYS_munmap 91
+#define SYS_truncate 92
+#define SYS_ftruncate 93
+#define SYS_fchmod 94
+#define SYS_fchown 95
+#define SYS_getpriority 96
+#define SYS_setpriority 97
+#define SYS_statfs 99
+#define SYS_fstatfs 100
+#define SYS_syslog 103
+#define SYS_setitimer 104
+#define SYS_getitimer 105
+#define SYS_stat 106
+#define SYS_lstat 107
+#define SYS_fstat 108
+#define SYS_vhangup 111
+#define SYS_wait4 114
+#define SYS_swapoff 115
+#define SYS_sysinfo 116
+#define SYS_fsync 118
+#define SYS_sigreturn 119
+#define SYS_clone 120
+#define SYS_setdomainname 121
+#define SYS_uname 122
+#define SYS_adjtimex 124
+#define SYS_mprotect 125
+#define SYS_sigprocmask 126
+#define SYS_init_module 128
+#define SYS_delete_module 129
+#define SYS_quotactl 131
+#define SYS_getpgid 132
+#define SYS_fchdir 133
+#define SYS_bdflush 134
+#define SYS_sysfs 135
+#define SYS_personality 136
+#define SYS_setfsuid 138
+#define SYS_setfsgid 139
+#define SYS__llseek 140
+#define SYS_getdents 141
+#define SYS__newselect 142
+#define SYS_flock 143
+#define SYS_msync 144
+#define SYS_readv 145
+#define SYS_writev 146
+#define SYS_getsid 147
+#define SYS_fdatasync 148
+#define SYS__sysctl 149
+#define SYS_mlock 150
+#define SYS_munlock 151
+#define SYS_mlockall 152
+#define SYS_munlockall 153
+#define SYS_sched_setparam 154
+#define SYS_sched_getparam 155
+#define SYS_sched_setscheduler 156
+#define SYS_sched_getscheduler 157
+#define SYS_sched_yield 158
+#define SYS_sched_get_priority_max 159
+#define SYS_sched_get_priority_min 160
+#define SYS_sched_rr_get_interval 161
+#define SYS_nanosleep 162
+#define SYS_mremap 163
+#define SYS_setresuid 164
+#define SYS_getresuid 165
+#define SYS_poll 168
+#define SYS_nfsservctl 169
+#define SYS_setresgid 170
+#define SYS_getresgid 171
+#define SYS_prctl 172
+#define SYS_rt_sigreturn 173
+#define SYS_rt_sigaction 174
+#define SYS_rt_sigprocmask 175
+#define SYS_rt_sigpending 176
+#define SYS_rt_sigtimedwait 177
+#define SYS_rt_sigqueueinfo 178
+#define SYS_rt_sigsuspend 179
+#define SYS_pread64 180
+#define SYS_pwrite64 181
+#define SYS_chown 182
+#define SYS_getcwd 183
+#define SYS_capget 184
+#define SYS_capset 185
+#define SYS_sigaltstack 186
+#define SYS_sendfile 187
+#define SYS_vfork 190
+#define SYS_ugetrlimit 191
+#define SYS_mmap2 192
+#define SYS_truncate64 193
+#define SYS_ftruncate64 194
+#define SYS_stat64 195
+#define SYS_lstat64 196
+#define SYS_fstat64 197
+#define SYS_lchown32 198
+#define SYS_getuid32 199
+#define SYS_getgid32 200
+#define SYS_geteuid32 201
+#define SYS_getegid32 202
+#define SYS_setreuid32 203
+#define SYS_setregid32 204
+#define SYS_getgroups32 205
+#define SYS_setgroups32 206
+#define SYS_fchown32 207
+#define SYS_setresuid32 208
+#define SYS_getresuid32 209
+#define SYS_setresgid32 210
+#define SYS_getresgid32 211
+#define SYS_chown32 212
+#define SYS_setuid32 213
+#define SYS_setgid32 214
+#define SYS_setfsuid32 215
+#define SYS_setfsgid32 216
+#define SYS_getdents64 217
+#define SYS_pivot_root 218
+#define SYS_mincore 219
+#define SYS_madvise 220
+#define SYS_fcntl64 221
+#define SYS_gettid 224
+#define SYS_readahead 225
+#define SYS_setxattr 226
+#define SYS_lsetxattr 227
+#define SYS_fsetxattr 228
+#define SYS_getxattr 229
+#define SYS_lgetxattr 230
+#define SYS_fgetxattr 231
+#define SYS_listxattr 232
+#define SYS_llistxattr 233
+#define SYS_flistxattr 234
+#define SYS_removexattr 235
+#define SYS_lremovexattr 236
+#define SYS_fremovexattr 237
+#define SYS_tkill 238
+#define SYS_sendfile64 239
+#define SYS_futex 240
+#define SYS_sched_setaffinity 241
+#define SYS_sched_getaffinity 242
+#define SYS_io_setup 243
+#define SYS_io_destroy 244
+#define SYS_io_getevents 245
+#define SYS_io_submit 246
+#define SYS_io_cancel 247
+#define SYS_exit_group 248
+#define SYS_lookup_dcookie 249
+#define SYS_epoll_create 250
+#define SYS_epoll_ctl 251
+#define SYS_epoll_wait 252
+#define SYS_remap_file_pages 253
+#define SYS_set_tid_address 256
+#define SYS_timer_create 257
+#define SYS_timer_settime32 258
+#define SYS_timer_gettime32 259
+#define SYS_timer_getoverrun 260
+#define SYS_timer_delete 261
+#define SYS_clock_settime32 262
+#define SYS_clock_gettime32 263
+#define SYS_clock_getres_time32 264
+#define SYS_clock_nanosleep_time32 265
+#define SYS_statfs64 266
+#define SYS_fstatfs64 267
+#define SYS_tgkill 268
+#define SYS_utimes 269
+#define SYS_fadvise64_64 270
+#define SYS_arm_fadvise64_64 270
+#define SYS_pciconfig_iobase 271
+#define SYS_pciconfig_read 272
+#define SYS_pciconfig_write 273
+#define SYS_mq_open 274
+#define SYS_mq_unlink 275
+#define SYS_mq_timedsend 276
+#define SYS_mq_timedreceive 277
+#define SYS_mq_notify 278
+#define SYS_mq_getsetattr 279
+#define SYS_waitid 280
+#define SYS_socket 281
+#define SYS_bind 282
+#define SYS_connect 283
+#define SYS_listen 284
+#define SYS_accept 285
+#define SYS_getsockname 286
+#define SYS_getpeername 287
+#define SYS_socketpair 288
+#define SYS_send 289
+#define SYS_sendto 290
+#define SYS_recv 291
+#define SYS_recvfrom 292
+#define SYS_shutdown 293
+#define SYS_setsockopt 294
+#define SYS_getsockopt 295
+#define SYS_sendmsg 296
+#define SYS_recvmsg 297
+#define SYS_semop 298
+#define SYS_semget 299
+#define SYS_semctl 300
+#define SYS_msgsnd 301
+#define SYS_msgrcv 302
+#define SYS_msgget 303
+#define SYS_msgctl 304
+#define SYS_shmat 305
+#define SYS_shmdt 306
+#define SYS_shmget 307
+#define SYS_shmctl 308
+#define SYS_add_key 309
+#define SYS_request_key 310
+#define SYS_keyctl 311
+#define SYS_semtimedop 312
+#define SYS_vserver 313
+#define SYS_ioprio_set 314
+#define SYS_ioprio_get 315
+#define SYS_inotify_init 316
+#define SYS_inotify_add_watch 317
+#define SYS_inotify_rm_watch 318
+#define SYS_mbind 319
+#define SYS_get_mempolicy 320
+#define SYS_set_mempolicy 321
+#define SYS_openat 322
+#define SYS_mkdirat 323
+#define SYS_mknodat 324
+#define SYS_fchownat 325
+#define SYS_futimesat 326
+#define SYS_fstatat64 327
+#define SYS_unlinkat 328
+#define SYS_renameat 329
+#define SYS_linkat 330
+#define SYS_symlinkat 331
+#define SYS_readlinkat 332
+#define SYS_fchmodat 333
+#define SYS_faccessat 334
+#define SYS_pselect6 335
+#define SYS_ppoll 336
+#define SYS_unshare 337
+#define SYS_set_robust_list 338
+#define SYS_get_robust_list 339
+#define SYS_splice 340
+#define SYS_sync_file_range2 341
+#define SYS_arm_sync_file_range 341
+#define SYS_tee 342
+#define SYS_vmsplice 343
+#define SYS_move_pages 344
+#define SYS_getcpu 345
+#define SYS_epoll_pwait 346
+#define SYS_kexec_load 347
+#define SYS_utimensat 348
+#define SYS_signalfd 349
+#define SYS_timerfd_create 350
+#define SYS_eventfd 351
+#define SYS_fallocate 352
+#define SYS_timerfd_settime32 353
+#define SYS_timerfd_gettime32 354
+#define SYS_signalfd4 355
+#define SYS_eventfd2 356
+#define SYS_epoll_create1 357
+#define SYS_dup3 358
+#define SYS_pipe2 359
+#define SYS_inotify_init1 360
+#define SYS_preadv 361
+#define SYS_pwritev 362
+#define SYS_rt_tgsigqueueinfo 363
+#define SYS_perf_event_open 364
+#define SYS_recvmmsg 365
+#define SYS_accept4 366
+#define SYS_fanotify_init 367
+#define SYS_fanotify_mark 368
+#define SYS_prlimit64 369
+#define SYS_name_to_handle_at 370
+#define SYS_open_by_handle_at 371
+#define SYS_clock_adjtime 372
+#define SYS_syncfs 373
+#define SYS_sendmmsg 374
+#define SYS_setns 375
+#define SYS_process_vm_readv 376
+#define SYS_process_vm_writev 377
+#define SYS_kcmp 378
+#define SYS_finit_module 379
+#define SYS_sched_setattr 380
+#define SYS_sched_getattr 381
+#define SYS_renameat2 382
+#define SYS_seccomp 383
+#define SYS_getrandom 384
+#define SYS_memfd_create 385
+#define SYS_bpf 386
+#define SYS_execveat 387
+#define SYS_userfaultfd 388
+#define SYS_membarrier 389
+#define SYS_mlock2 390
+#define SYS_copy_file_range 391
+#define SYS_preadv2 392
+#define SYS_pwritev2 393
+#define SYS_pkey_mprotect 394
+#define SYS_pkey_alloc 395
+#define SYS_pkey_free 396
+#define SYS_statx 397
+#define SYS_rseq 398
+#define SYS_io_pgetevents 399
+#define SYS_migrate_pages 400
+#define SYS_kexec_file_load 401
+#define SYS_clock_gettime64 403
+#define SYS_clock_settime64 404
+#define SYS_clock_adjtime64 405
+#define SYS_clock_getres_time64 406
+#define SYS_clock_nanosleep_time64 407
+#define SYS_timer_gettime64 408
+#define SYS_timer_settime64 409
+#define SYS_timerfd_gettime64 410
+#define SYS_timerfd_settime64 411
+#define SYS_utimensat_time64 412
+#define SYS_pselect6_time64 413
+#define SYS_ppoll_time64 414
+#define SYS_io_pgetevents_time64 416
+#define SYS_recvmmsg_time64 417
+#define SYS_mq_timedsend_time64 418
+#define SYS_mq_timedreceive_time64 419
+#define SYS_semtimedop_time64 420
+#define SYS_rt_sigtimedwait_time64 421
+#define SYS_futex_time64 422
+#define SYS_sched_rr_get_interval_time64 423
+#define SYS_pidfd_send_signal 424
+#define SYS_io_uring_setup 425
+#define SYS_io_uring_enter 426
+#define SYS_io_uring_register 427
+#define SYS_open_tree 428
+#define SYS_move_mount 429
+#define SYS_fsopen 430
+#define SYS_fsconfig 431
+#define SYS_fsmount 432
+#define SYS_fspick 433
+#define SYS_pidfd_open 434
+#define SYS_clone3 435
+#define SYS_close_range 436
+#define SYS_openat2 437
+#define SYS_pidfd_getfd 438
+#define SYS_faccessat2 439
+#define SYS_process_madvise 440
+#define SYS_epoll_pwait2 441
+#define SYS_mount_setattr 442
+#define SYS_landlock_create_ruleset 444
+#define SYS_landlock_add_rule 445
+#define SYS_landlock_restrict_self 446
diff --git a/thirdparty/open_source/musl/libc/arch/arm/crt_arch.h b/thirdparty/open_source/musl/libc/arch/arm/crt_arch.h
new file mode 100644
index 0000000..42e9a26
--- /dev/null
+++ b/thirdparty/open_source/musl/libc/arch/arm/crt_arch.h
@@ -0,0 +1,27 @@
+#ifndef ARM_CRT_ARCH_H
+#define ARM_CRT_ARCH_H
+
+__asm__(
+".text\n"
+".global " START "\n"
+".type " START ",%function\n"
+START ": \n"
+" mov fp, #0\n"
+" mov lr, #0\n"
+" ldr r5, [r0, #8]\n" /* paratbl */
+/* Little-endian */
+" str r1, [r5, #20]\n" /* PT_ZERO1 */
+" str r2, [r5, #24]\n" /* PT_ZERO2 */
+" ldr r1, 1f\n"
+" add r1, pc, r1\n"
+" mov r5, sp\n"
+"2: and r5, r5, #-16\n"
+" mov sp, r5\n"
+" bl " START "_c\n"
+".weak _DYNAMIC\n"
+".hidden _DYNAMIC\n"
+".align 2\n"
+"1: .word _DYNAMIC-2b\n"
+);
+
+#endif
\ No newline at end of file
diff --git a/thirdparty/open_source/musl/libc/arch/generic/bits/fcntl.h b/thirdparty/open_source/musl/libc/arch/generic/bits/fcntl.h
index ae233cc..730a98c 100644
--- a/thirdparty/open_source/musl/libc/arch/generic/bits/fcntl.h
+++ b/thirdparty/open_source/musl/libc/arch/generic/bits/fcntl.h
@@ -30,9 +30,15 @@
#define F_SETSIG 10
#define F_GETSIG 11
+#if __LONG_MAX == 0x7fffffffL
#define F_GETLK 12
#define F_SETLK 13
#define F_SETLKW 14
+#else
+#define F_GETLK 5
+#define F_SETLK 6
+#define F_SETLKW 7
+#endif
#define F_SETOWN_EX 15
#define F_GETOWN_EX 16
diff --git a/thirdparty/open_source/musl/libc/arch/generic/bits/shm.h b/thirdparty/open_source/musl/libc/arch/generic/bits/shm.h
index 8d19378..da07a2a 100644
--- a/thirdparty/open_source/musl/libc/arch/generic/bits/shm.h
+++ b/thirdparty/open_source/musl/libc/arch/generic/bits/shm.h
@@ -1,4 +1,4 @@
-#define SHMLBA 4096
+#define SHMLBA (4*4096)
struct shmid_ds {
struct ipc_perm shm_perm;
diff --git a/thirdparty/open_source/musl/libc/arpa/inet.h b/thirdparty/open_source/musl/libc/arpa/inet.h
index 37f8c11..9d20a15 100644
--- a/thirdparty/open_source/musl/libc/arpa/inet.h
+++ b/thirdparty/open_source/musl/libc/arpa/inet.h
@@ -24,11 +24,6 @@ struct in_addr inet_makeaddr(in_addr_t, in_addr_t);
in_addr_t inet_lnaof(struct in_addr);
in_addr_t inet_netof(struct in_addr);
-#undef INET_ADDRSTRLEN
-#undef INET6_ADDRSTRLEN
-#define INET_ADDRSTRLEN 16
-#define INET6_ADDRSTRLEN 46
-
#ifdef __cplusplus
}
#endif
diff --git a/thirdparty/open_source/musl/libc/ctype.h b/thirdparty/open_source/musl/libc/ctype.h
index 7936536..fe72b3f 100644
--- a/thirdparty/open_source/musl/libc/ctype.h
+++ b/thirdparty/open_source/musl/libc/ctype.h
@@ -64,7 +64,14 @@ int isascii(int);
int toascii(int);
#define _tolower(a) ((a)|0x20)
#define _toupper(a) ((a)&0x5f)
+#ifndef __cplusplus
#define isascii(a) (0 ? isascii(a) : (unsigned)(a) < 128)
+#endif
+
+#include <stdint.h>
+
+const int32_t **__ctype_tolower_loc(void);
+const int32_t **__ctype_toupper_loc(void);
#endif
diff --git a/thirdparty/open_source/musl/libc/elf.h b/thirdparty/open_source/musl/libc/elf.h
index 549f92c..86e2f0b 100644
--- a/thirdparty/open_source/musl/libc/elf.h
+++ b/thirdparty/open_source/musl/libc/elf.h
@@ -603,6 +603,7 @@ typedef struct {
#define PT_GNU_EH_FRAME 0x6474e550
#define PT_GNU_STACK 0x6474e551
#define PT_GNU_RELRO 0x6474e552
+#define PT_GNU_PROPERTY 0x6474e553
#define PT_LOSUNW 0x6ffffffa
#define PT_SUNWBSS 0x6ffffffa
#define PT_SUNWSTACK 0x6ffffffb
@@ -685,6 +686,8 @@ typedef struct {
#define NT_ARM_PAC_MASK 0x406
#define NT_ARM_PACA_KEYS 0x407
#define NT_ARM_PACG_KEYS 0x408
+#define NT_ARM_TAGGED_ADDR_CTRL 0x409
+#define NT_ARM_PAC_ENABLED_KEYS 0x40a
#define NT_METAG_CBUF 0x500
#define NT_METAG_RPIPE 0x501
#define NT_METAG_TLS 0x502
@@ -1085,6 +1088,7 @@ typedef struct {
#define NT_GNU_BUILD_ID 3
#define NT_GNU_GOLD_VERSION 4
+#define NT_GNU_PROPERTY_TYPE_0 5
diff --git a/thirdparty/open_source/musl/libc/float.h b/thirdparty/open_source/musl/libc/float.h
new file mode 100644
index 0000000..713aadb
--- /dev/null
+++ b/thirdparty/open_source/musl/libc/float.h
@@ -0,0 +1,52 @@
+#ifndef _FLOAT_H
+#define _FLOAT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __flt_rounds(void);
+#define FLT_ROUNDS (__flt_rounds())
+
+#define FLT_RADIX 2
+
+#define FLT_TRUE_MIN 1.40129846432481707092e-45F
+#define FLT_MIN 1.17549435082228750797e-38F
+#define FLT_MAX 3.40282346638528859812e+38F
+#define FLT_EPSILON 1.1920928955078125e-07F
+
+#define FLT_MANT_DIG 24
+#define FLT_MIN_EXP (-125)
+#define FLT_MAX_EXP 128
+#define FLT_HAS_SUBNORM 1
+
+#define FLT_DIG 6
+#define FLT_DECIMAL_DIG 9
+#define FLT_MIN_10_EXP (-37)
+#define FLT_MAX_10_EXP 38
+
+#define DBL_TRUE_MIN 4.94065645841246544177e-324
+#define DBL_MIN 2.22507385850720138309e-308
+#define DBL_MAX 1.79769313486231570815e+308
+#define DBL_EPSILON 2.22044604925031308085e-16
+
+#define DBL_MANT_DIG 53
+#define DBL_MIN_EXP (-1021)
+#define DBL_MAX_EXP 1024
+#define DBL_HAS_SUBNORM 1
+
+#define DBL_DIG 15
+#define DBL_DECIMAL_DIG 17
+#define DBL_MIN_10_EXP (-307)
+#define DBL_MAX_10_EXP 308
+
+#define LDBL_HAS_SUBNORM 1
+#define LDBL_DECIMAL_DIG DECIMAL_DIG
+
+#include <bits/float.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/open_source/musl/libc/limits.h b/thirdparty/open_source/musl/libc/limits.h
index c9794bb..53a27b9 100644
--- a/thirdparty/open_source/musl/libc/limits.h
+++ b/thirdparty/open_source/musl/libc/limits.h
@@ -37,6 +37,8 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#include <bits/limits.h>
+
#define PIPE_BUF 4096
#define FILESIZEBITS 64
#ifndef NAME_MAX
diff --git a/thirdparty/open_source/musl/libc/locale.h b/thirdparty/open_source/musl/libc/locale.h
index ce38438..11106fe 100644
--- a/thirdparty/open_source/musl/libc/locale.h
+++ b/thirdparty/open_source/musl/libc/locale.h
@@ -7,7 +7,9 @@ extern "C" {
#include <features.h>
-#ifdef __cplusplus
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#elif defined(__cplusplus)
#define NULL 0L
#else
#define NULL ((void*)0)
diff --git a/thirdparty/open_source/musl/libc/netinet/in.h b/thirdparty/open_source/musl/libc/netinet/in.h
index 5b8b21e..fb628b6 100644
--- a/thirdparty/open_source/musl/libc/netinet/in.h
+++ b/thirdparty/open_source/musl/libc/netinet/in.h
@@ -48,6 +48,7 @@ struct ipv6_mreq {
#define INADDR_BROADCAST ((in_addr_t) 0xffffffff)
#define INADDR_NONE ((in_addr_t) 0xffffffff)
#define INADDR_LOOPBACK ((in_addr_t) 0x7f000001)
+#define INADDR_DUMMY ((in_addr_t) 0xc0000008)
#define INADDR_UNSPEC_GROUP ((in_addr_t) 0xe0000000)
#define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001)
@@ -60,8 +61,6 @@ struct ipv6_mreq {
extern const struct in6_addr in6addr_any, in6addr_loopback;
-#undef INET_ADDRSTRLEN
-#undef INET6_ADDRSTRLEN
#define INET_ADDRSTRLEN 16
#define INET6_ADDRSTRLEN 46
@@ -103,8 +102,10 @@ uint16_t ntohs(uint16_t);
#define IPPROTO_MH 135
#define IPPROTO_UDPLITE 136
#define IPPROTO_MPLS 137
+#define IPPROTO_ETHERNET 143
#define IPPROTO_RAW 255
-#define IPPROTO_MAX 256
+#define IPPROTO_MPTCP 262
+#define IPPROTO_MAX 263
#define IN6_IS_ADDR_UNSPECIFIED(a) \
(((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \
@@ -202,6 +203,7 @@ uint16_t ntohs(uint16_t);
#define IP_CHECKSUM 23
#define IP_BIND_ADDRESS_NO_PORT 24
#define IP_RECVFRAGSIZE 25
+#define IP_RECVERR_RFC4884 26
#define IP_MULTICAST_IF 32
#define IP_MULTICAST_TTL 33
#define IP_MULTICAST_LOOP 34
diff --git a/thirdparty/open_source/musl/libc/netinet/tcp.h b/thirdparty/open_source/musl/libc/netinet/tcp.h
index 44a007a..fad1d84 100644
--- a/thirdparty/open_source/musl/libc/netinet/tcp.h
+++ b/thirdparty/open_source/musl/libc/netinet/tcp.h
@@ -78,6 +78,10 @@ enum {
TCP_NLA_DSACK_DUPS,
TCP_NLA_REORD_SEEN,
TCP_NLA_SRTT,
+ TCP_NLA_TIMEOUT_REHASH,
+ TCP_NLA_BYTES_NOTSENT,
+ TCP_NLA_EDT,
+ TCP_NLA_TTL,
};
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
@@ -181,6 +185,13 @@ struct tcphdr {
#define TCP_CA_Recovery 3
#define TCP_CA_Loss 4
+enum tcp_fastopen_client_fail {
+ TFO_STATUS_UNSPEC,
+ TFO_COOKIE_UNAVAILABLE,
+ TFO_DATA_NOT_ACKED,
+ TFO_SYN_RETRANSMITTED,
+};
+
struct tcp_info {
uint8_t tcpi_state;
uint8_t tcpi_ca_state;
@@ -189,7 +200,7 @@ struct tcp_info {
uint8_t tcpi_backoff;
uint8_t tcpi_options;
uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
- uint8_t tcpi_delivery_rate_app_limited : 1;
+ uint8_t tcpi_delivery_rate_app_limited : 1, tcpi_fastopen_client_fail : 2;
uint32_t tcpi_rto;
uint32_t tcpi_ato;
uint32_t tcpi_snd_mss;
@@ -240,14 +251,15 @@ struct tcp_info {
#define TCP_MD5SIG_MAXKEYLEN 80
-#define TCP_MD5SIG_FLAG_PREFIX 1
+#define TCP_MD5SIG_FLAG_PREFIX 0x1
+#define TCP_MD5SIG_FLAG_IFINDEX 0x2
struct tcp_md5sig {
struct sockaddr_storage tcpm_addr;
uint8_t tcpm_flags;
uint8_t tcpm_prefixlen;
uint16_t tcpm_keylen;
- uint32_t __tcpm_pad;
+ int tcpm_ifindex;
uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN];
};
@@ -271,10 +283,21 @@ struct tcp_repair_window {
uint32_t rcv_wup;
};
+#define TCP_RECEIVE_ZEROCOPY_FLAG_TLB_CLEAN_HINT 0x1
+
struct tcp_zerocopy_receive {
uint64_t address;
uint32_t length;
uint32_t recv_skip_hint;
+ uint32_t inq;
+ int32_t err;
+ uint64_t copybuf_address;
+ int32_t copybuf_len;
+ uint32_t flags;
+ uint64_t msg_control;
+ uint64_t msg_controllen;
+ uint32_t msg_flags;
+ uint32_t reserved;
};
#endif
diff --git a/thirdparty/open_source/musl/libc/nl_types.h b/thirdparty/open_source/musl/libc/nl_types.h
new file mode 100644
index 0000000..7c2d48e
--- /dev/null
+++ b/thirdparty/open_source/musl/libc/nl_types.h
@@ -0,0 +1,22 @@
+#ifndef _NL_TYPES_H
+#define _NL_TYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NL_SETD 1
+#define NL_CAT_LOCALE 1
+
+typedef int nl_item;
+typedef void *nl_catd;
+
+nl_catd catopen (const char *, int);
+char *catgets (nl_catd, int, int, const char *);
+int catclose (nl_catd);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/open_source/musl/libc/pthread.h b/thirdparty/open_source/musl/libc/pthread.h
index 22120b0..77f0017 100644
--- a/thirdparty/open_source/musl/libc/pthread.h
+++ b/thirdparty/open_source/musl/libc/pthread.h
@@ -6,6 +6,24 @@ extern "C" {
#include <features.h>
+/* Musl did not provide the "owner" marco directly,
+ * so users can not access the mutex-owner-ID.
+ * Thus we added this macro for getting the owner-ID
+ * of the mutex. */
+#define MUTEX_OWNER (__u.__vi[1] & 0x7fffffff)
+
+/* These macros provides macros for accessing inner
+ * attributes of the pthread_mutex_t struct.
+ * It is intened for solving the compiling failure
+ * of Dopra codes which claims that .__data.* realm
+ * can not be found in pthread_mutex_t. */
+#define MUTEX_TYPE __u.__i[0]
+#define MUTEX_LOCK __u.__vi[1]
+#define MUTEX_WAITERS __u.__vi[2]
+#define MUTEX_PREV __u.__p[3]
+#define MUTEX_NEXT __u.__p[4]
+#define MUTEX_COUNT __u.__i[5]
+
#define __NEED_time_t
#define __NEED_clockid_t
#define __NEED_struct_timespec
@@ -76,6 +94,9 @@ extern "C" {
#define PTHREAD_BARRIER_SERIAL_THREAD (-1)
+#define PTHREAD_NULL ((pthread_t)0)
+
+
int pthread_create(pthread_t *__restrict, const pthread_attr_t *__restrict, void *(*)(void *), void *__restrict);
int pthread_detach(pthread_t);
_Noreturn void pthread_exit(void *);
@@ -221,6 +242,7 @@ int pthread_getaffinity_np(pthread_t, size_t, struct cpu_set_t *);
int pthread_setaffinity_np(pthread_t, size_t, const struct cpu_set_t *);
int pthread_getattr_np(pthread_t, pthread_attr_t *);
int pthread_setname_np(pthread_t, const char *);
+int pthread_getname_np(pthread_t, char *, size_t);
int pthread_getattr_default_np(pthread_attr_t *);
int pthread_setattr_default_np(const pthread_attr_t *);
int pthread_tryjoin_np(pthread_t, void **);
diff --git a/thirdparty/open_source/musl/libc/sched.h b/thirdparty/open_source/musl/libc/sched.h
index 822f464..fda4b48 100644
--- a/thirdparty/open_source/musl/libc/sched.h
+++ b/thirdparty/open_source/musl/libc/sched.h
@@ -49,6 +49,7 @@ int sched_yield(void);
#ifdef _GNU_SOURCE
#define CSIGNAL 0x000000ff
+#define CLONE_NEWTIME 0x00000080
#define CLONE_VM 0x00000100
#define CLONE_FS 0x00000200
#define CLONE_FILES 0x00000400
diff --git a/thirdparty/open_source/musl/libc/setjmp.h b/thirdparty/open_source/musl/libc/setjmp.h
index 2d43abf..1976af2 100644
--- a/thirdparty/open_source/musl/libc/setjmp.h
+++ b/thirdparty/open_source/musl/libc/setjmp.h
@@ -15,25 +15,33 @@ typedef struct __jmp_buf_tag {
unsigned long __ss[128/sizeof(long)];
} jmp_buf[1];
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
+#define __setjmp_attr __attribute__((__returns_twice__))
+#else
+#define __setjmp_attr
+#endif
+
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|| defined(_BSD_SOURCE)
typedef jmp_buf sigjmp_buf;
-int sigsetjmp (sigjmp_buf, int);
+int sigsetjmp (sigjmp_buf, int) __setjmp_attr;
_Noreturn void siglongjmp (sigjmp_buf, int);
#endif
#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|| defined(_BSD_SOURCE)
-int _setjmp (jmp_buf);
+int _setjmp (jmp_buf) __setjmp_attr;
_Noreturn void _longjmp (jmp_buf, int);
#endif
-int setjmp (jmp_buf);
+int setjmp (jmp_buf) __setjmp_attr;
_Noreturn void longjmp (jmp_buf, int);
#define setjmp setjmp
+#undef __setjmp_attr
+
#ifdef __cplusplus
}
#endif
diff --git a/thirdparty/open_source/musl/libc/signal.h b/thirdparty/open_source/musl/libc/signal.h
index fbdf667..c347f86 100644
--- a/thirdparty/open_source/musl/libc/signal.h
+++ b/thirdparty/open_source/musl/libc/signal.h
@@ -75,6 +75,8 @@ typedef struct sigaltstack stack_t;
#define SEGV_ACCERR 2
#define SEGV_BNDERR 3
#define SEGV_PKUERR 4
+#define SEGV_MTEAERR 8
+#define SEGV_MTESERR 9
#define BUS_ADRALN 1
#define BUS_ADRERR 2
@@ -176,18 +178,31 @@ struct sigaction {
#define sa_handler __sa_handler.sa_handler
#define sa_sigaction __sa_handler.sa_sigaction
+#define SA_UNSUPPORTED 0x00000400
+#define SA_EXPOSE_TAGBITS 0x00000800
+
struct sigevent {
union sigval sigev_value;
int sigev_signo;
int sigev_notify;
- void (*sigev_notify_function)(union sigval);
- pthread_attr_t *sigev_notify_attributes;
- char __pad[56-3*sizeof(long)];
+ union {
+ char __pad[64 - 2*sizeof(int) - sizeof(union sigval)];
+ pid_t sigev_notify_thread_id;
+ struct {
+ void (*sigev_notify_function)(union sigval);
+ pthread_attr_t *sigev_notify_attributes;
+ } __sev_thread;
+ } __sev_fields;
};
+#define sigev_notify_thread_id __sev_fields.sigev_notify_thread_id
+#define sigev_notify_function __sev_fields.__sev_thread.sigev_notify_function
+#define sigev_notify_attributes __sev_fields.__sev_thread.sigev_notify_attributes
+
#define SIGEV_SIGNAL 0
#define SIGEV_NONE 1
#define SIGEV_THREAD 2
+#define SIGEV_THREAD_ID 4
int __libc_current_sigrtmin(void);
int __libc_current_sigrtmax(void);
@@ -249,6 +264,9 @@ void (*sigset(int, void (*)(int)))(int);
#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
#define NSIG _NSIG
typedef void (*sig_t)(int);
+
+#define SYS_SECCOMP 1
+#define SYS_USER_DISPATCH 2
#endif
#ifdef _GNU_SOURCE
diff --git a/thirdparty/open_source/musl/libc/stddef.h b/thirdparty/open_source/musl/libc/stddef.h
index 4a914ee..f25b863 100644
--- a/thirdparty/open_source/musl/libc/stddef.h
+++ b/thirdparty/open_source/musl/libc/stddef.h
@@ -1,13 +1,13 @@
#ifndef _STDDEF_H
#define _STDDEF_H
-#ifndef NULL
-#ifdef __cplusplus
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#elif defined(__cplusplus)
#define NULL 0L
#else
#define NULL ((void*)0)
#endif
-#endif
#define __NEED_ptrdiff_t
#define __NEED_size_t
diff --git a/thirdparty/open_source/musl/libc/stdio.h b/thirdparty/open_source/musl/libc/stdio.h
index 3604198..d1ed01f 100644
--- a/thirdparty/open_source/musl/libc/stdio.h
+++ b/thirdparty/open_source/musl/libc/stdio.h
@@ -25,7 +25,9 @@ extern "C" {
#include <bits/alltypes.h>
-#ifdef __cplusplus
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#elif defined(__cplusplus)
#define NULL 0L
#else
#define NULL ((void*)0)
diff --git a/thirdparty/open_source/musl/libc/stdlib.h b/thirdparty/open_source/musl/libc/stdlib.h
index 194c203..622002d 100644
--- a/thirdparty/open_source/musl/libc/stdlib.h
+++ b/thirdparty/open_source/musl/libc/stdlib.h
@@ -7,7 +7,9 @@ extern "C" {
#include <features.h>
-#ifdef __cplusplus
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#elif defined(__cplusplus)
#define NULL 0L
#else
#define NULL ((void*)0)
@@ -36,6 +38,7 @@ int rand (void);
void srand (unsigned);
void *malloc (size_t);
+void *malloc_coherent(size_t n);
void *calloc (size_t, size_t);
void *realloc (void *, size_t);
void free (void *);
@@ -145,6 +148,8 @@ int getloadavg(double *, int);
int clearenv(void);
#define WCOREDUMP(s) ((s) & 0x80)
#define WIFCONTINUED(s) ((s) == 0xffff)
+void *reallocarray (void *, size_t, size_t);
+void qsort_r (void *, size_t, size_t, int (*)(const void *, const void *, void *), void *);
#endif
#ifdef _GNU_SOURCE
diff --git a/thirdparty/open_source/musl/libc/string.h b/thirdparty/open_source/musl/libc/string.h
index 795a2ab..43ad094 100644
--- a/thirdparty/open_source/musl/libc/string.h
+++ b/thirdparty/open_source/musl/libc/string.h
@@ -7,7 +7,9 @@ extern "C" {
#include <features.h>
-#ifdef __cplusplus
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#elif defined(__cplusplus)
#define NULL 0L
#else
#define NULL ((void*)0)
diff --git a/thirdparty/open_source/musl/libc/sys/fcntl.h b/thirdparty/open_source/musl/libc/sys/fcntl.h
new file mode 100644
index 0000000..3dd928e
--- /dev/null
+++ b/thirdparty/open_source/musl/libc/sys/fcntl.h
@@ -0,0 +1,2 @@
+#warning redirecting incorrect #include <sys/fcntl.h> to <fcntl.h>
+#include <fcntl.h>
diff --git a/thirdparty/open_source/musl/libc/sys/ioctl.h b/thirdparty/open_source/musl/libc/sys/ioctl.h
index c2ce3b4..a9a2346 100644
--- a/thirdparty/open_source/musl/libc/sys/ioctl.h
+++ b/thirdparty/open_source/musl/libc/sys/ioctl.h
@@ -4,6 +4,8 @@
extern "C" {
#endif
+#define __NEED_struct_winsize
+
#include <bits/alltypes.h>
#include <bits/ioctl.h>
@@ -47,13 +49,6 @@ extern "C" {
#define TIOCSER_TEMT 1
-struct winsize {
- unsigned short ws_row;
- unsigned short ws_col;
- unsigned short ws_xpixel;
- unsigned short ws_ypixel;
-};
-
#define SIOCADDRT 0x890B
#define SIOCDELRT 0x890C
#define SIOCRTMSG 0x890D
diff --git a/thirdparty/open_source/musl/libc/sys/mman.h b/thirdparty/open_source/musl/libc/sys/mman.h
index 105af9d..80a3baa 100644
--- a/thirdparty/open_source/musl/libc/sys/mman.h
+++ b/thirdparty/open_source/musl/libc/sys/mman.h
@@ -20,7 +20,6 @@ extern "C" {
#define MAP_SHARED 0x01
#define MAP_PRIVATE 0x02
-#define MAP_RESERVE 0x04
#define MAP_SHARED_VALIDATE 0x03
#define MAP_TYPE 0x0f
#define MAP_FIXED 0x10
@@ -41,6 +40,7 @@ extern "C" {
#define MAP_HUGE_SHIFT 26
#define MAP_HUGE_MASK 0x3f
+#define MAP_HUGE_16KB (14 << 26)
#define MAP_HUGE_64KB (16 << 26)
#define MAP_HUGE_512KB (19 << 26)
#define MAP_HUGE_1MB (20 << 26)
@@ -102,6 +102,7 @@ extern "C" {
#ifdef _GNU_SOURCE
#define MREMAP_MAYMOVE 1
#define MREMAP_FIXED 2
+#define MREMAP_DONTUNMAP 4
#define MLOCK_ONFAULT 0x01
@@ -113,7 +114,7 @@ extern "C" {
#include <bits/mman.h>
void *mmap (void *, size_t, int, int, int, off_t);
-int munmap (const void *, size_t);
+int munmap (void *, size_t);
int mprotect (void *, size_t, int);
int msync (void *, size_t, int);
diff --git a/thirdparty/open_source/musl/libc/sys/socket.h b/thirdparty/open_source/musl/libc/sys/socket.h
index 38f5bb1..6dc1e40 100644
--- a/thirdparty/open_source/musl/libc/sys/socket.h
+++ b/thirdparty/open_source/musl/libc/sys/socket.h
@@ -289,6 +289,8 @@ struct linger {
#define SCM_TXTIME SO_TXTIME
#define SO_BINDTOIFINDEX 62
#define SO_DETACH_REUSEPORT_BPF 68
+#define SO_PREFER_BUSY_POLL 69
+#define SO_BUSY_POLL_BUDGET 70
#ifndef SOL_SOCKET
#define SOL_SOCKET 1
diff --git a/thirdparty/open_source/musl/libc/time.h b/thirdparty/open_source/musl/libc/time.h
index 1b18024..3d94837 100644
--- a/thirdparty/open_source/musl/libc/time.h
+++ b/thirdparty/open_source/musl/libc/time.h
@@ -7,13 +7,13 @@ extern "C" {
#include <features.h>
-#ifndef NULL
-#ifdef __cplusplus
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#elif defined(__cplusplus)
#define NULL 0L
#else
#define NULL ((void*)0)
#endif
-#endif
#define __NEED_size_t
diff --git a/thirdparty/open_source/musl/libc/unistd.h b/thirdparty/open_source/musl/libc/unistd.h
index 7bcbff9..212263a 100644
--- a/thirdparty/open_source/musl/libc/unistd.h
+++ b/thirdparty/open_source/musl/libc/unistd.h
@@ -14,8 +14,12 @@ extern "C" {
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
+#define SEEK_DATA 3
+#define SEEK_HOLE 4
-#ifdef __cplusplus
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#elif defined(__cplusplus)
#define NULL 0L
#else
#define NULL ((void*)0)
@@ -82,6 +86,7 @@ unsigned sleep(unsigned);
int pause(void);
pid_t fork(void);
+pid_t _Fork(void);
int execve(const char *, char *const [], char *const []);
int execv(const char *, char *const []);
int execle(const char *, const char *, ...);
@@ -190,6 +195,7 @@ int syncfs(int);
int euidaccess(const char *, int);
int eaccess(const char *, int);
ssize_t copy_file_range(int, off_t *, int, off_t *, size_t, unsigned);
+pid_t gettid(void);
#endif
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
diff --git a/thirdparty/open_source/musl/libc/wchar.h b/thirdparty/open_source/musl/libc/wchar.h
index 88eb55b..ed5d774 100644
--- a/thirdparty/open_source/musl/libc/wchar.h
+++ b/thirdparty/open_source/musl/libc/wchar.h
@@ -38,7 +38,9 @@ extern "C" {
#define WCHAR_MIN (-1-0x7fffffff+L'\0')
#endif
-#ifdef __cplusplus
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#elif defined(__cplusplus)
#define NULL 0L
#else
#define NULL ((void*)0)
diff --git a/include/TA/openssl/crypto/asn1.h b/thirdparty/open_source/openssl/crypto/asn1.h
similarity index 97%
rename from include/TA/openssl/crypto/asn1.h
rename to thirdparty/open_source/openssl/crypto/asn1.h
index 9c28a7d..9c9b4d8 100644
--- a/include/TA/openssl/crypto/asn1.h
+++ b/thirdparty/open_source/openssl/crypto/asn1.h
@@ -92,9 +92,6 @@ extern const EVP_PKEY_ASN1_METHOD siphash_asn1_meth;
# define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */
# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */
# define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */
-#ifndef OPENSSL_NO_CRL_MEMPOOL
-# define ASN1_OBJECT_FLAG_MEMPOOL 0x1000/* internal use*/
-#endif
struct asn1_object_st {
const char *sn, *ln;
int nid;
diff --git a/include/TA/openssl/crypto/bn.h b/thirdparty/open_source/openssl/crypto/bn.h
similarity index 100%
rename from include/TA/openssl/crypto/bn.h
rename to thirdparty/open_source/openssl/crypto/bn.h
diff --git a/include/TA/openssl/crypto/ec.h b/thirdparty/open_source/openssl/crypto/ec.h
similarity index 91%
rename from include/TA/openssl/crypto/ec.h
rename to thirdparty/open_source/openssl/crypto/ec.h
index 184c5c1..fe52ae7 100644
--- a/include/TA/openssl/crypto/ec.h
+++ b/thirdparty/open_source/openssl/crypto/ec.h
@@ -49,11 +49,5 @@ int ecdh_KDF_X9_63(unsigned char *out, size_t outlen,
const unsigned char *sinfo, size_t sinfolen,
const EVP_MD *md);
-/*-
- * Checking for Elliptic Curve types that do not support signatures for fips 140-3
- */
-#ifndef OPENSSL_NO_FIPS
-int fips_check_ecdsa_curve_type(int nid);
-#endif
# endif /* OPENSSL_NO_EC */
#endif
diff --git a/include/TA/openssl/crypto/err.h b/thirdparty/open_source/openssl/crypto/err.h
similarity index 100%
rename from include/TA/openssl/crypto/err.h
rename to thirdparty/open_source/openssl/crypto/err.h
diff --git a/include/TA/openssl/internal/bio.h b/thirdparty/open_source/openssl/internal/bio.h
similarity index 82%
rename from include/TA/openssl/internal/bio.h
rename to thirdparty/open_source/openssl/internal/bio.h
index 51b991d..c343b27 100644
--- a/include/TA/openssl/internal/bio.h
+++ b/thirdparty/open_source/openssl/internal/bio.h
@@ -27,13 +27,7 @@ struct bio_method_st {
void bio_free_ex_data(BIO *bio);
void bio_cleanup(void);
-#ifndef OPENSSL_NO_DTO
-#define BIO_set_dto_key(b, keyblob, type) \
- BIO_ctrl(b, BIO_CTRL_SET_DTO_KEY, type, keyblob)
-#define BIO_set_dto_epoch_sequence(b, keyblob) \
- BIO_ctrl(b, BIO_CTRL_SET_DTO_EPOCH_SEQUENCE, 0, keyblob)
-#endif
/* Old style to new style BIO_METHOD conversion functions */
int bwrite_conv(BIO *bio, const char *data, size_t datal, size_t *written);
int bread_conv(BIO *bio, char *data, size_t datal, size_t *read);
diff --git a/include/TA/openssl/openssl/asn1.h b/thirdparty/open_source/openssl/openssl/asn1.h
similarity index 99%
rename from include/TA/openssl/openssl/asn1.h
rename to thirdparty/open_source/openssl/openssl/asn1.h
index fbf8373..9522eec 100644
--- a/include/TA/openssl/openssl/asn1.h
+++ b/thirdparty/open_source/openssl/openssl/asn1.h
@@ -248,12 +248,6 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
type *name##_new(void); \
void name##_free(type *a);
-# define DECLARE_ASN1_DUP_FUNCTION(type) \
- DECLARE_ASN1_DUP_FUNCTION_name(type, type)
-
-# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \
- type *name##_dup(type *a);
-
# define DECLARE_ASN1_PRINT_FUNCTION(stname) \
DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname)
@@ -668,6 +662,7 @@ BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn);
int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a);
int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r);
+
int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);
long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a);
ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai);
diff --git a/include/TA/openssl/openssl/asn1err.h b/thirdparty/open_source/openssl/openssl/asn1err.h
similarity index 100%
rename from include/TA/openssl/openssl/asn1err.h
rename to thirdparty/open_source/openssl/openssl/asn1err.h
diff --git a/include/TA/openssl/openssl/asn1t.h b/thirdparty/open_source/openssl/openssl/asn1t.h
similarity index 98%
rename from include/TA/openssl/openssl/asn1t.h
rename to thirdparty/open_source/openssl/openssl/asn1t.h
index 4c326ea..a450ba0 100644
--- a/include/TA/openssl/openssl/asn1t.h
+++ b/thirdparty/open_source/openssl/openssl/asn1t.h
@@ -860,23 +860,6 @@ typedef struct ASN1_STREAM_ARG_st {
ASN1_ITEM_rptr(stname)); \
}
-#ifndef OPENSSL_NO_TTO
-# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS(stname) \
- static int i2d_##stname(stname *a, unsigned char **out) \
- { \
- return ASN1_item_i2d((ASN1_VALUE *)a, out, \
- ASN1_ITEM_rptr(stname)); \
- }
-
-# define IMPLEMENT_ASN1_DECODE_FUNCTIONS(stname) \
- static stname *d2i_##stname(stname **a, \
- const unsigned char **in, long len) \
- { \
- return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \
- ASN1_ITEM_rptr(stname)); \
- }
-#endif
-
/*
* This includes evil casts to remove const: they will go away when full ASN1
* constification is done.
diff --git a/include/TA/openssl/openssl/bio.h b/thirdparty/open_source/openssl/openssl/bio.h
similarity index 98%
rename from include/TA/openssl/openssl/bio.h
rename to thirdparty/open_source/openssl/openssl/bio.h
index 3f68687..ae559a5 100644
--- a/include/TA/openssl/openssl/bio.h
+++ b/thirdparty/open_source/openssl/openssl/bio.h
@@ -140,17 +140,6 @@ extern "C" {
# endif
# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71
-# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77
-# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78
-
-/* Negotiate with the SE (Chen Shengqi) to reserve the value before 1000 for the open-source community,
- * and use the value after 1000 for Huawei-developed features. */
-#ifndef OPENSSL_NO_DTO
-/* Export DTLS1.2 key information and epoch commands used by the BIO_set_dto macro */
-#define BIO_CTRL_SET_DTO_KEY 1001
-#define BIO_CTRL_SET_DTO_EPOCH_SEQUENCE 1002
-
-#endif
/* modifiers */
# define BIO_FP_READ 0x02
@@ -563,8 +552,6 @@ void BIO_set_data(BIO *a, void *ptr);
void *BIO_get_data(BIO *a);
void BIO_set_init(BIO *a, int init);
int BIO_get_init(BIO *a);
-void BIO_set_num(BIO *a, int num);
-int BIO_get_num(BIO *a);
void BIO_set_shutdown(BIO *a, int shut);
int BIO_get_shutdown(BIO *a);
void BIO_vfree(BIO *a);
@@ -773,6 +760,7 @@ ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0)));
# undef ossl_bio__attr__
# undef ossl_bio__printf__
+
BIO_METHOD *BIO_meth_new(int type, const char *name);
void BIO_meth_free(BIO_METHOD *biom);
int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int);
diff --git a/include/TA/openssl/openssl/bioerr.h b/thirdparty/open_source/openssl/openssl/bioerr.h
similarity index 100%
rename from include/TA/openssl/openssl/bioerr.h
rename to thirdparty/open_source/openssl/openssl/bioerr.h
diff --git a/include/TA/openssl/openssl/bn.h b/thirdparty/open_source/openssl/openssl/bn.h
similarity index 83%
rename from include/TA/openssl/openssl/bn.h
rename to thirdparty/open_source/openssl/openssl/bn.h
index 51fff4a..d877660 100644
--- a/include/TA/openssl/openssl/bn.h
+++ b/thirdparty/open_source/openssl/openssl/bn.h
@@ -11,7 +11,6 @@
#ifndef HEADER_BN_H
# define HEADER_BN_H
-#ifndef VPP_HICRYPTO_COMPILE
# include <openssl/e_os2.h>
# ifndef OPENSSL_NO_STDIO
# include <stdio.h>
@@ -20,35 +19,11 @@
# include <openssl/ossl_typ.h>
# include <openssl/crypto.h>
# include <openssl/bnerr.h>
-#else
-#include <limits.h>
-#include <hicrypto/crypto.h>
-#include <hicrypto/opensslconf.h>
-
-#ifndef OPENSSL_API_COMPAT
-#define OPENSSL_API_COMPAT 0x10100000L
-#endif
-
-/* Only one for the following should be defined */
-#cmakedefine SIXTY_FOUR_BIT_LONG
-#cmakedefine SIXTY_FOUR_BIT
-#cmakedefine THIRTY_TWO_BIT
-
-typedef struct bignum_st BIGNUM;
-typedef struct bignum_ctx BN_CTX;
-typedef struct bn_blinding_st BN_BLINDING;
-typedef struct bn_mont_ctx_st BN_MONT_CTX;
-typedef struct bn_recp_ctx_st BN_RECP_CTX;
-typedef struct bn_gencb_st BN_GENCB;
-#endif
#ifdef __cplusplus
extern "C" {
#endif
-#ifdef VPP_HICRYPTO_COMPILE
-# pragma GCC visibility push(default)
-#endif
/*
* 64-bit processor with LP64 ABI
*/
@@ -319,12 +294,10 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
const BIGNUM *m, BN_CTX *ctx);
int BN_mask_bits(BIGNUM *a, int n);
-#ifndef VPP_HICRYPTO_COMPILE
# ifndef OPENSSL_NO_STDIO
int BN_print_fp(FILE *fp, const BIGNUM *a);
# endif
int BN_print(BIO *bio, const BIGNUM *a);
-#endif
int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx);
int BN_rshift(BIGNUM *r, const BIGNUM *a, int n);
int BN_rshift1(BIGNUM *r, const BIGNUM *a);
@@ -349,7 +322,6 @@ BIGNUM *BN_mod_sqrt(BIGNUM *ret,
void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords);
-#ifndef VPP_HICRYPTO_COMPILE
/* Deprecated versions */
DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe,
const BIGNUM *add,
@@ -366,7 +338,7 @@ DEPRECATEDIN_0_9_8(int
void (*callback) (int, int, void *),
BN_CTX *ctx, void *cb_arg,
int do_trial_division))
-#endif
+
/* Newer versions */
int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,
const BIGNUM *rem, BN_GENCB *cb);
@@ -394,13 +366,9 @@ int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont,
void BN_MONT_CTX_free(BN_MONT_CTX *mont);
int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx);
BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from);
-#ifndef VPP_HICRYPTO_COMPILE
BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock,
const BIGNUM *mod, BN_CTX *ctx);
-#else
-BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRPT_THREAD_MUTEX *lock,
- const BIGNUM *mod, BN_CTX *ctx);
-#endif
+
/* BN_BLINDING flags */
# define BN_BLINDING_NO_UPDATE 0x00000001
# define BN_BLINDING_NO_RECREATE 0x00000002
@@ -430,11 +398,11 @@ BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
BN_CTX *ctx,
BN_MONT_CTX *m_ctx),
BN_MONT_CTX *m_ctx);
-#ifndef VPP_HICRYPTO_COMPILE
+
DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont))
DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3
* mont */
-#endif
+
BN_RECP_CTX *BN_RECP_CTX_new(void);
void BN_RECP_CTX_free(BN_RECP_CTX *recp);
int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx);
@@ -564,93 +532,6 @@ BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn);
int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom);
-#ifdef VPP_HICRYPTO_COMPILE
-/** Internal APIs */
-BIGNUM *bn_wexpand(BIGNUM *a, int words);
-BIGNUM *bn_expand2(BIGNUM *a, int words);
-
-void bn_correct_top(BIGNUM *a);
-
-int bn_get_top(const BIGNUM *a);
-
-int bn_get_dmax(const BIGNUM *a);
-
-/* Set all words to zero */
-void bn_set_all_zero(BIGNUM *a);
-
-/*
- * Copy the internal BIGNUM words into out which holds size elements (and size
- * must be bigger than top)
- */
-int bn_copy_words(BN_ULONG *out, const BIGNUM *in, int size);
-
-BN_ULONG *bn_get_words(const BIGNUM *a);
-
-/*
- * Set the internal data words in a to point to words which contains size
- * elements. The BN_FLG_STATIC_DATA flag is set
- */
-void bn_set_static_words(BIGNUM *a, const BN_ULONG *words, int size);
-
-/*
- * Copy words into the BIGNUM |a|, reallocating space as necessary.
- * The negative flag of |a| is not modified.
- * Returns 1 on success and 0 on failure.
- */
-/*
- * |num_words| is int because bn_expand2 takes an int. This is an internal
- * function so we simply trust callers not to pass negative values.
- */
-int bn_set_words(BIGNUM *a, const BN_ULONG *words, int num_words);
-
-/*
- * Some BIGNUM functions assume most significant limb to be non-zero, which
- * is customarily arranged by bn_correct_top. Output from below functions
- * is not processed with bn_correct_top, and for this reason it may not be
- * returned out of public API. It may only be passed internally into other
- * functions known to support non-minimal or zero-padded BIGNUMs. Even
- * though the goal is to facilitate constant-time-ness, not each subroutine
- * is constant-time by itself. They all have pre-conditions, consult source
- * code...
- */
-int bn_mul_mont_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_MONT_CTX *mont, BN_CTX *ctx);
-int bn_to_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, BN_CTX *ctx);
-int bn_from_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, BN_CTX *ctx);
-int bn_mod_add_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m);
-int bn_mod_sub_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m);
-int bn_mul_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
-int bn_sqr_fixed_top(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);
-int bn_lshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n);
-int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n);
-int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx);
-
-/*
- * BN reason codes.
- */
-#define BN_R_ARG2_LT_ARG3 100
-#define BN_R_BAD_RECIPROCAL 101
-#define BN_R_BIGNUM_TOO_LONG 114
-#define BN_R_BITS_TOO_SMALL 118
-#define BN_R_CALLED_WITH_EVEN_MODULUS 102
-#define BN_R_DIV_BY_ZERO 103
-#define BN_R_ENCODING_ERROR 104
-#define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105
-#define BN_R_INPUT_NOT_REDUCED 110
-#define BN_R_INVALID_LENGTH 106
-#define BN_R_INVALID_RANGE 115
-#define BN_R_INVALID_SHIFT 119
-#define BN_R_NOT_A_SQUARE 111
-#define BN_R_NOT_INITIALIZED 107
-#define BN_R_NO_INVERSE 108
-#define BN_R_NO_SOLUTION 116
-#define BN_R_NO_SUITABLE_DIGEST 120
-#define BN_R_PRIVATE_KEY_TOO_LARGE 117
-#define BN_R_P_IS_NOT_PRIME 112
-#define BN_R_TOO_MANY_ITERATIONS 113
-#define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109
-
-#pragma GCC visibility pop
-#endif
# ifdef __cplusplus
}
diff --git a/include/TA/openssl/openssl/bnerr.h b/thirdparty/open_source/openssl/openssl/bnerr.h
similarity index 100%
rename from include/TA/openssl/openssl/bnerr.h
rename to thirdparty/open_source/openssl/openssl/bnerr.h
diff --git a/include/TA/openssl/openssl/buffer.h b/thirdparty/open_source/openssl/openssl/buffer.h
similarity index 99%
rename from include/TA/openssl/openssl/buffer.h
rename to thirdparty/open_source/openssl/openssl/buffer.h
index 35a8503..d276576 100644
--- a/include/TA/openssl/openssl/buffer.h
+++ b/thirdparty/open_source/openssl/openssl/buffer.h
@@ -16,6 +16,7 @@
# endif
# include <openssl/buffererr.h>
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -50,6 +51,7 @@ size_t BUF_MEM_grow(BUF_MEM *str, size_t len);
size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len);
void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz);
+
# ifdef __cplusplus
}
# endif
diff --git a/include/TA/openssl/openssl/buffererr.h b/thirdparty/open_source/openssl/openssl/buffererr.h
similarity index 100%
rename from include/TA/openssl/openssl/buffererr.h
rename to thirdparty/open_source/openssl/openssl/buffererr.h
diff --git a/include/TA/openssl/openssl/cmac.h b/thirdparty/open_source/openssl/openssl/cmac.h
similarity index 100%
rename from include/TA/openssl/openssl/cmac.h
rename to thirdparty/open_source/openssl/openssl/cmac.h
diff --git a/include/TA/openssl/openssl/crypto.h b/thirdparty/open_source/openssl/openssl/crypto.h
similarity index 90%
rename from include/TA/openssl/openssl/crypto.h
rename to thirdparty/open_source/openssl/openssl/crypto.h
index 2b5c52a..7d0b526 100644
--- a/include/TA/openssl/openssl/crypto.h
+++ b/thirdparty/open_source/openssl/openssl/crypto.h
@@ -107,8 +107,7 @@ DEFINE_STACK_OF(void)
# define CRYPTO_EX_INDEX_APP 13
# define CRYPTO_EX_INDEX_UI_METHOD 14
# define CRYPTO_EX_INDEX_DRBG 15
-# define CRYPTO_EX_INDEX_SM9_KEY 16
-# define CRYPTO_EX_INDEX__COUNT 17
+# define CRYPTO_EX_INDEX__COUNT 16
/* No longer needed, so this is a no-op */
#define OPENSSL_malloc_init() while(0) continue
@@ -319,10 +318,6 @@ int CRYPTO_mem_leaks_fp(FILE *);
int CRYPTO_mem_leaks(BIO *bio);
# endif
-#ifndef OPENSSL_NO_CRL_MEMPOOL
-int CRYPT_init_memory_pool(int pool_size, int max_no_pool);
-#endif
-
/* die if we have to */
ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line);
# if OPENSSL_API_COMPAT < 0x10100000L
@@ -331,31 +326,11 @@ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line
# define OPENSSL_assert(e) \
(void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))
-#if defined(OPENSSL_SYS_VXWORKS) && defined(OPENSSL_SYS_VXWORKS55)
-int CRYPTO_strncasecmp(unsigned char *a, unsigned char *b, size_t len);
-int CRYPTO_strcasecmp(unsigned char *a, unsigned char *b);
-
-#define strncasecmp(a,b,len) CRYPTO_strncasecmp((a), (b), (len))
-#define strcasecmp(a,b) CRYPTO_strcasecmp((a), (b))
-#endif
-
-#if !defined(OPENSSL_NO_NDCPP)
-#define NDCPP_MODE_OFF 0
-#define NDCPP_MODE_ON 1
-
-int NDCPP_mode(void);
-int NDCPP_mode_set(int r);
-#endif
-
int OPENSSL_isservice(void);
int FIPS_mode(void);
int FIPS_mode_set(int r);
-#ifndef OPENSSL_NO_FIPS
-int FIPS_selftest_result(int result);
-#endif
-
void OPENSSL_init(void);
# ifdef OPENSSL_SYS_UNIX
void OPENSSL_fork_prepare(void);
@@ -407,6 +382,7 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len);
| OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \
OPENSSL_INIT_ENGINE_PADLOCK)
+
/* Library initialisation functions */
void OPENSSL_cleanup(void);
int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
@@ -462,38 +438,6 @@ int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key);
CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void);
int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b);
-#ifndef OPENSSL_NO_ALT_MEMORY
-int CRYPTO_set_mem_functions_alt(
- void *(*m) (size_t, const char *, int),
- void *(*r) (void *, size_t, const char *, int),
- void (*f) (void *, const char *, int));
-
-void *CRYPTO_malloc_alt(size_t num, const char *file, int line);
-void *CRYPTO_zalloc_alt(size_t num, const char *file, int line);
-void *CRYPTO_realloc_alt(void *addr, size_t num, const char *file, int line);
-void CRYPTO_free_alt(void *ptr, const char *file, int line);
-
-#define OPENSSL_malloc_alt(num) \
- CRYPTO_malloc_alt((num), OPENSSL_FILE, OPENSSL_LINE)
-
-#define OPENSSL_realloc_alt(num) \
- CRYPTO_realloc_alt((num), OPENSSL_FILE, OPENSSL_LINE)
-
-#define OPENSSL_free_alt(num) \
- CRYPTO_free_alt((num), OPENSSL_FILE, OPENSSL_LINE)
-
-#define OPENSSL_zalloc_alt(num) \
- CRYPTO_zalloc_alt(num, OPENSSL_FILE, OPENSSL_LINE)
-
-#define SSLBUF_malloc(num) OPENSSL_malloc_alt(num)
-#define SSLBUF_free(num) OPENSSL_free_alt(num)
-
-#else
-
-#define SSLBUF_malloc(num) OPENSSL_malloc(num)
-#define SSLBUF_free(num) OPENSSL_free(num)
-
-#endif
# ifdef __cplusplus
}
diff --git a/include/TA/openssl/openssl/cryptoerr.h b/thirdparty/open_source/openssl/openssl/cryptoerr.h
similarity index 100%
rename from include/TA/openssl/openssl/cryptoerr.h
rename to thirdparty/open_source/openssl/openssl/cryptoerr.h
diff --git a/include/TA/openssl/openssl/dh.h b/thirdparty/open_source/openssl/openssl/dh.h
similarity index 98%
rename from include/TA/openssl/openssl/dh.h
rename to thirdparty/open_source/openssl/openssl/dh.h
index 352b37a..3527540 100644
--- a/include/TA/openssl/openssl/dh.h
+++ b/thirdparty/open_source/openssl/openssl/dh.h
@@ -30,11 +30,7 @@ extern "C" {
# define OPENSSL_DH_MAX_MODULUS_BITS 10000
# endif
-# ifndef OPENSSL_NO_FIPS
- # define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 2048
-#else
- # define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024
-#endif
+# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024
# define DH_FLAG_CACHE_MONT_P 0x01
@@ -229,6 +225,7 @@ int (*DH_meth_get_generate_params(const DH_METHOD *dhm))
int DH_meth_set_generate_params(DH_METHOD *dhm,
int (*generate_params) (DH *, int, int, BN_GENCB *));
+
# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \
EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \
EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL)
@@ -335,6 +332,7 @@ int DH_meth_set_generate_params(DH_METHOD *dhm,
# define EVP_PKEY_DH_KDF_X9_42 2
# endif
+
# ifdef __cplusplus
}
# endif
diff --git a/include/TA/openssl/openssl/dsa.h b/thirdparty/open_source/openssl/openssl/dsa.h
similarity index 98%
rename from include/TA/openssl/openssl/dsa.h
rename to thirdparty/open_source/openssl/openssl/dsa.h
index 741fd4f..6d8a18a 100644
--- a/include/TA/openssl/openssl/dsa.h
+++ b/thirdparty/open_source/openssl/openssl/dsa.h
@@ -30,12 +30,7 @@ extern "C" {
# define OPENSSL_DSA_MAX_MODULUS_BITS 10000
# endif
-#ifndef OPENSSL_NO_FIPS
-# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 2048
-# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS_verify 512
-#else
# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024
-#endif
# define DSA_FLAG_CACHE_MONT_P 0x01
# if OPENSSL_API_COMPAT < 0x10100000L
@@ -241,6 +236,7 @@ int DSA_meth_set_paramgen(DSA_METHOD *dsam,
int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *);
int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *));
+
# ifdef __cplusplus
}
# endif
diff --git a/include/TA/openssl/openssl/e_os2.h b/thirdparty/open_source/openssl/openssl/e_os2.h
similarity index 95%
rename from include/TA/openssl/openssl/e_os2.h
rename to thirdparty/open_source/openssl/openssl/e_os2.h
index 86c201e..5c88e51 100644
--- a/include/TA/openssl/openssl/e_os2.h
+++ b/thirdparty/open_source/openssl/openssl/e_os2.h
@@ -42,7 +42,7 @@ extern "C" {
* UEFI lives here because it might be built with a Microsoft toolchain and
* we need to avoid the false positive match on Windows.
*/
-# if defined(OPENSSL_SYS_UEFI) || defined(__UBOOT__)
+# if defined(OPENSSL_SYS_UEFI)
# undef OPENSSL_SYS_UNIX
# elif defined(OPENSSL_SYS_UWIN)
# undef OPENSSL_SYS_UNIX
@@ -212,7 +212,7 @@ extern "C" {
# ifndef ossl_ssize_t
# define ossl_ssize_t ssize_t
-# if defined(SSIZE_MAX) && !defined(OPENSSL_SYS_VXWORKS)
+# if defined(SSIZE_MAX)
# define OSSL_SSIZE_MAX SSIZE_MAX
# elif defined(_POSIX_SSIZE_MAX)
# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX
@@ -237,9 +237,9 @@ typedef INT32 int32_t;
typedef UINT32 uint32_t;
typedef INT64 int64_t;
typedef UINT64 uint64_t;
-# elif !defined(OPENSSL_SYS_VXWORKS) && ((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
+# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
defined(__osf__) || defined(__sgi) || defined(__hpux) || \
- defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__))
+ defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__)
# include <inttypes.h>
# elif defined(_MSC_VER) && _MSC_VER<1600
/*
@@ -254,15 +254,9 @@ typedef int int32_t;
typedef unsigned int uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
-# elif defined(OPENSSL_SYS_VXWORKS) && !defined(VPP_CRYPTO_COMPILE)
-# define UINT16_MAX 0xffff
-# define INT16_MAX 0x7fff
-# include <sys/types.h>
# else
-# ifndef __NO_STDINTH__
# include <stdint.h>
# endif
-# endif
/* ossl_inline: portable inline definition usable in public headers */
# if !defined(inline) && !defined(__cplusplus)
diff --git a/include/TA/openssl/openssl/ec.h b/thirdparty/open_source/openssl/openssl/ec.h
similarity index 99%
rename from include/TA/openssl/openssl/ec.h
rename to thirdparty/open_source/openssl/openssl/ec.h
index 0c830ab..24baf53 100644
--- a/include/TA/openssl/openssl/ec.h
+++ b/thirdparty/open_source/openssl/openssl/ec.h
@@ -1104,7 +1104,7 @@ int ECParameters_print_fp(FILE *fp, const EC_KEY *key);
int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off);
# endif
-const EC_KEY_METHOD *EC_KEY_get_iso_15946_2_method(void);
+
const EC_KEY_METHOD *EC_KEY_OpenSSL(void);
const EC_KEY_METHOD *EC_KEY_get_default_method(void);
void EC_KEY_set_default_method(const EC_KEY_METHOD *meth);
@@ -1476,6 +1476,7 @@ void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth,
*/
# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63
+
# ifdef __cplusplus
}
# endif
diff --git a/include/TA/openssl/openssl/ecdsa.h b/thirdparty/open_source/openssl/openssl/ecdsa.h
similarity index 68%
rename from include/TA/openssl/openssl/ecdsa.h
rename to thirdparty/open_source/openssl/openssl/ecdsa.h
index a9aeb7c..681f3d5 100644
--- a/include/TA/openssl/openssl/ecdsa.h
+++ b/thirdparty/open_source/openssl/openssl/ecdsa.h
@@ -7,13 +7,4 @@
* https://www.openssl.org/source/license.html
*/
-#ifndef ECDSA_H
-# define ECDSA_H
#include <openssl/ec.h>
-
-#ifndef OPENSSL_NO_FIPS
-#define ECDSA_VERIFY_SIG_MIN_KEY_SIZE 160
-#define ECDSA_SIGN_SIG_MIN_KEY_SIZE 224
-#endif
-
-#endif // ECDSA_H
diff --git a/include/TA/openssl/openssl/ecerr.h b/thirdparty/open_source/openssl/openssl/ecerr.h
similarity index 98%
rename from include/TA/openssl/openssl/ecerr.h
rename to thirdparty/open_source/openssl/openssl/ecerr.h
index a796d22..5173811 100644
--- a/include/TA/openssl/openssl/ecerr.h
+++ b/thirdparty/open_source/openssl/openssl/ecerr.h
@@ -187,8 +187,6 @@ int ERR_load_EC_strings(void);
# define EC_F_OSSL_ECDH_COMPUTE_KEY 247
# define EC_F_OSSL_ECDSA_SIGN_SIG 249
# define EC_F_OSSL_ECDSA_VERIFY_SIG 250
-# define EC_F_OSSL_ECDSA_SIGN_SIG_ISO_15946_2 300
-# define EC_F_OSSL_ECDSA_VERIFY_SIG_ISO_15946_2 301
# define EC_F_PKEY_ECD_CTRL 271
# define EC_F_PKEY_ECD_DIGESTSIGN 272
# define EC_F_PKEY_ECD_DIGESTSIGN25519 276
@@ -202,7 +200,6 @@ int ERR_load_EC_strings(void);
# define EC_F_PKEY_EC_KEYGEN 199
# define EC_F_PKEY_EC_PARAMGEN 219
# define EC_F_PKEY_EC_SIGN 218
-# define EC_F_PKEY_EC_SM2DH_DERIVE 299
# define EC_F_VALIDATE_ECX_DERIVE 278
/*
@@ -274,9 +271,6 @@ int ERR_load_EC_strings(void);
# define EC_R_UNSUPPORTED_FIELD 131
# define EC_R_WRONG_CURVE_PARAMETERS 145
# define EC_R_WRONG_ORDER 130
-#ifndef OPENSSL_NO_FIPS
-# define EC_R_KEY_SIZE_INVALID 166
-#endif
# endif
#endif
diff --git a/include/TA/openssl/openssl/err.h b/thirdparty/open_source/openssl/openssl/err.h
similarity index 94%
rename from include/TA/openssl/openssl/err.h
rename to thirdparty/open_source/openssl/openssl/err.h
index cd219c7..b49f881 100644
--- a/include/TA/openssl/openssl/err.h
+++ b/thirdparty/open_source/openssl/openssl/err.h
@@ -95,11 +95,6 @@ typedef struct err_state_st {
# define ERR_LIB_ASYNC 51
# define ERR_LIB_KDF 52
# define ERR_LIB_SM2 53
-# define ERR_LIB_CRMF 56
-# define ERR_LIB_CMP 57
-# define ERR_LIB_SM9 58
-# define ERR_LIB_PQC 59
-# define ERR_LIB_PQC_HYBRID 60
# define ERR_LIB_USER 128
@@ -133,17 +128,12 @@ typedef struct err_state_st {
# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
-# define CRMFerr(f,r) ERR_PUT_error(ERR_LIB_CRMF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
-# define CMPerr(f,r) ERR_PUT_error(ERR_LIB_CMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
-# define SM9err(f,r) ERR_PUT_error(ERR_LIB_SM9,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
-# define PQCerr(f,r) ERR_PUT_error(ERR_LIB_SM9,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
-# define PQC_HYBRIDerr(f,r) ERR_PUT_error(ERR_LIB_SM9,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define ERR_PACK(l,f,r) ( \
(((unsigned int)(l) & 0x0FF) << 24L) | \
@@ -200,8 +190,6 @@ typedef struct err_state_st {
# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */
# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */
# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */
-# define ERR_R_SM9_LIB ERR_LIB_SM9/* 58 */
-# define ERR_R_PQC_HYBRID_LIB ERR_LIB_PQC_HYBRID/* 60 */
# define ERR_R_NESTED_ASN1_ERROR 58
# define ERR_R_MISSING_ASN1_EOS 63
diff --git a/include/TA/openssl/openssl/evp.h b/thirdparty/open_source/openssl/openssl/evp.h
similarity index 99%
rename from include/TA/openssl/openssl/evp.h
rename to thirdparty/open_source/openssl/openssl/evp.h
index d6c7292..a411f3f 100644
--- a/include/TA/openssl/openssl/evp.h
+++ b/thirdparty/open_source/openssl/openssl/evp.h
@@ -352,10 +352,6 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
# define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24
# define EVP_CTRL_GET_IVLEN 0x25
-#ifndef OPENSSL_NO_TTO
-/* Set the input buffer lengths to use for a pipelined operation in case of TTO */
-# define EVP_CTRL_GCM_SET_IV_INV_TTO 0x99
-#endif
/* Padding modes */
#define EVP_PADDING_PKCS7 1
@@ -402,6 +398,7 @@ typedef struct evp_cipher_info_st {
unsigned char iv[EVP_MAX_IV_LENGTH];
} EVP_CIPHER_INFO;
+
/* Password based encryption function */
typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass,
int passlen, ASN1_TYPE *param,
@@ -940,10 +937,6 @@ const EVP_CIPHER *EVP_sm4_cfb128(void);
# define EVP_sm4_cfb EVP_sm4_cfb128
const EVP_CIPHER *EVP_sm4_ofb(void);
const EVP_CIPHER *EVP_sm4_ctr(void);
-const EVP_CIPHER *EVP_sm4_gcm(void);
-#ifndef OPENSSL_NO_SM4_XTS
-const EVP_CIPHER *EVP_sm4_xts(void);
-# endif
# endif
# if OPENSSL_API_COMPAT < 0x10100000L
@@ -1344,13 +1337,6 @@ const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx);
EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
-#ifndef OPENSSL_NO_GMTLS
-EVP_PKEY_CTX *EVP_PKEY_CTX_new_pkey_id(EVP_PKEY *pkey, int id, ENGINE *e);
-int EVP_PKEY_CTX_set_sm2_param(EVP_PKEY_CTX *pctx, EVP_MD *md, int server,
- unsigned char *peer_id, int peerid_len,
- unsigned char *self_id, int selfid_len,
- EC_KEY *peer_ecdhe_key, EC_KEY *self_ecdhe_key);
-#endif
EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
@@ -1673,9 +1659,6 @@ void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth,
EVP_MD_CTX *mctx));
void EVP_add_alg_module(void);
-#ifndef OPENSSL_NO_SM2
-int EVP_PKEY_is_sm2(EVP_PKEY *pkey);
-#endif
# ifdef __cplusplus
}
diff --git a/include/TA/openssl/openssl/evperr.h b/thirdparty/open_source/openssl/openssl/evperr.h
similarity index 98%
rename from include/TA/openssl/openssl/evperr.h
rename to thirdparty/open_source/openssl/openssl/evperr.h
index daabe9b..b4ea90a 100644
--- a/include/TA/openssl/openssl/evperr.h
+++ b/thirdparty/open_source/openssl/openssl/evperr.h
@@ -123,8 +123,6 @@ int ERR_load_EVP_strings(void);
# define EVP_F_R_32_12_16_INIT_KEY 242
# define EVP_F_S390X_AES_GCM_CTRL 201
# define EVP_F_UPDATE 173
-# define EVP_F_SM4_GCM_CTRL 231
-# define EVP_F_SM4_XTS_INIT_KEY 232
/*
* EVP reason codes.
diff --git a/include/TA/openssl/openssl/hmac.h b/thirdparty/open_source/openssl/openssl/hmac.h
similarity index 100%
rename from include/TA/openssl/openssl/hmac.h
rename to thirdparty/open_source/openssl/openssl/hmac.h
diff --git a/include/TA/openssl/openssl/kdf.h b/thirdparty/open_source/openssl/openssl/kdf.h
similarity index 99%
rename from include/TA/openssl/openssl/kdf.h
rename to thirdparty/open_source/openssl/openssl/kdf.h
index 01e5448..5abd4c3 100644
--- a/include/TA/openssl/openssl/kdf.h
+++ b/thirdparty/open_source/openssl/openssl/kdf.h
@@ -90,6 +90,7 @@ extern "C" {
EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \
EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes)
+
# ifdef __cplusplus
}
# endif
diff --git a/include/TA/openssl/openssl/kdferr.h b/thirdparty/open_source/openssl/openssl/kdferr.h
similarity index 100%
rename from include/TA/openssl/openssl/kdferr.h
rename to thirdparty/open_source/openssl/openssl/kdferr.h
diff --git a/include/TA/openssl/openssl/lhash.h b/thirdparty/open_source/openssl/openssl/lhash.h
similarity index 99%
rename from include/TA/openssl/openssl/lhash.h
rename to thirdparty/open_source/openssl/openssl/lhash.h
index 84cfab0..2e42d72 100644
--- a/include/TA/openssl/openssl/lhash.h
+++ b/thirdparty/open_source/openssl/openssl/lhash.h
@@ -66,6 +66,7 @@ typedef struct lhash_st OPENSSL_LHASH;
name##_doall_arg(a, b); }
# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG
+
# define LH_LOAD_MULT 256
int OPENSSL_LH_error(OPENSSL_LHASH *lh);
diff --git a/include/TA/openssl/openssl/obj_mac.h b/thirdparty/open_source/openssl/openssl/obj_mac.h
similarity index 97%
rename from include/TA/openssl/openssl/obj_mac.h
rename to thirdparty/open_source/openssl/openssl/obj_mac.h
index 66ec330..53516a0 100644
--- a/include/TA/openssl/openssl/obj_mac.h
+++ b/thirdparty/open_source/openssl/openssl/obj_mac.h
@@ -77,11 +77,6 @@
#define NID_international_organizations 647
#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L
-#define SN_subject_key_attestation_evidence "subject-key-attestation-evidence"
-#define LN_subject_key_attestation_evidence "Subject Key Attestation Evidence"
-#define NID_subject_key_attestation_evidence 1195
-#define OBJ_subject_key_attestation_evidence OBJ_international_organizations,133L,6L,1L,1L
-
#define SN_wap "wap"
#define NID_wap 678
#define OBJ_wap OBJ_international_organizations,43L
@@ -318,14 +313,6 @@
#define NID_ecdsa_with_SHA512 796
#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L
-#define SN_ec192wapi "ec192wapi"
-#define NID_ec192wapi 1214
-#define OBJ_ec192wapi OBJ_ISO_CN,11235L,1L,1L,2L,1L
-
-#define SN_ec192wapi_with_SHA256 "ec192wapi-with-SHA256"
-#define NID_ec192wapi_with_SHA256 1215
-#define OBJ_ec192wapi_with_SHA256 OBJ_ISO_CN,11235L,1L,1L,1L
-
#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L
#define SN_secp112r1 "secp112r1"
@@ -1187,80 +1174,11 @@
#define NID_sm3 1143
#define OBJ_sm3 OBJ_sm_scheme,401L
-#define SN_SM2_with_SM3 "SM2-SM3"
-#define LN_SM2_with_SM3 "SM2-with-SM3"
-#define NID_SM2_with_SM3 1196
-#define OBJ_SM2_with_SM3 OBJ_sm_scheme,501L
-
#define SN_sm3WithRSAEncryption "RSA-SM3"
#define LN_sm3WithRSAEncryption "sm3WithRSAEncryption"
#define NID_sm3WithRSAEncryption 1144
#define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L
-#define SN_sm9 "SM9"
-#define LN_sm9 "sm9"
-#define NID_sm9 1197
-#define OBJ_sm9 OBJ_sm_scheme,302L
-
-#define SN_sm2_sign "SM2-1"
-#define LN_sm2_sign "sm2-sign"
-#define NID_sm2_sign 1198
-#define OBJ_sm2_sign OBJ_sm2,1L
-
-#define SN_sm2_encrypt "SM2-3"
-#define LN_sm2_encrypt "sm2-encrypt"
-#define NID_sm2_encrypt 1211
-#define OBJ_sm2_encrypt OBJ_sm2,3L
-
-#define SN_sm2_cryptography_message_syntax_specification "sm2-cryptography-message-syntax-specification"
-#define LN_sm2_cryptography_message_syntax_specification "SM2 Cryptography Message Syntax Specification"
-#define NID_sm2_cryptography_message_syntax_specification 1199
-#define OBJ_sm2_cryptography_message_syntax_specification OBJ_oscca,6L,1L,4L,2L
-
-#define LN_pkcs7_sm2data "pkcs7-sm2data"
-#define NID_pkcs7_sm2data 1200
-#define OBJ_pkcs7_sm2data OBJ_sm2_cryptography_message_syntax_specification,1L
-
-#define LN_pkcs7_sm2signedData "pkcs7-sm2signedData"
-#define NID_pkcs7_sm2signedData 1201
-#define OBJ_pkcs7_sm2signedData OBJ_sm2_cryptography_message_syntax_specification,2L
-
-#define LN_pkcs7_sm2envelopedData "pkcs7-sm2envelopedData"
-#define NID_pkcs7_sm2envelopedData 1212
-#define OBJ_pkcs7_sm2envelopedData OBJ_sm2_cryptography_message_syntax_specification,3L
-
-#define LN_pkcs7_sm2signedAndEnvelopedData "pkcs7-sm2signedAndEnvelopedData"
-#define NID_pkcs7_sm2signedAndEnvelopedData 1213
-#define OBJ_pkcs7_sm2signedAndEnvelopedData OBJ_sm2_cryptography_message_syntax_specification,4L
-
-#define SN_sm2_cryptography_algorithm_application_specification "sm2-cryptography-algorithm-application-specification"
-#define LN_sm2_cryptography_algorithm_application_specification "SM2 Cryptography Algorithm Application Specification"
-#define NID_sm2_cryptography_algorithm_application_specification 1204
-#define OBJ_sm2_cryptography_algorithm_application_specification OBJ_oscca,6L,1L,4L,1L
-
-#define SN_q5 "q5"
-#define LN_q5 "Password-based Key Derivation Specification"
-#define NID_q5 1205
-#define OBJ_q5 OBJ_sm2_cryptography_algorithm_application_specification,5L
-
-#define LN_id_gm_pbkdf "GM-PBKDF"
-#define NID_id_gm_pbkdf 1206
-#define OBJ_id_gm_pbkdf OBJ_q5,1L
-
-#define LN_id_gm_pbes "GM-PBES"
-#define NID_id_gm_pbes 1207
-#define OBJ_id_gm_pbes OBJ_q5,2L
-
-#define SN_pbeWithSM3AndSM4_CBC "PBE-SM3-SM4"
-#define LN_pbeWithSM3AndSM4_CBC "pbeWithSM3AndSM4-CBC"
-#define NID_pbeWithSM3AndSM4_CBC 1208
-#define OBJ_pbeWithSM3AndSM4_CBC OBJ_sm2_cryptography_algorithm_application_specification,12L,1L,1L
-
-#define SN_hmacWithSM3 "sm3WithKey"
-#define LN_hmacWithSM3 "hmacWithSM3"
-#define NID_hmacWithSM3 1209
-#define OBJ_hmacWithSM3 OBJ_sm3,2L
-
#define LN_hmacWithSHA224 "hmacWithSHA224"
#define NID_hmacWithSHA224 798
#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L
@@ -4814,11 +4732,6 @@
#define NID_seed_ofb128 778
#define OBJ_seed_ofb128 OBJ_kisa,1L,6L
-#define SN_sm4Cipher "SM4-CIPHER"
-#define LN_sm4Cipher "sm4Cipher"
-#define NID_sm4Cipher 1210
-#define OBJ_sm4Cipher OBJ_sm_scheme,104L
-
#define SN_sm4_ecb "SM4-ECB"
#define LN_sm4_ecb "sm4-ecb"
#define NID_sm4_ecb 1133
@@ -4854,16 +4767,6 @@
#define NID_sm4_ctr 1139
#define OBJ_sm4_ctr OBJ_sm_scheme,104L,7L
-#define SN_sm4_gcm "SM4-GCM"
-#define LN_sm4_gcm "sm4-gcm"
-#define NID_sm4_gcm 1203
-#define OBJ_sm4_gcm OBJ_sm_scheme,104L,8L
-
-#define SN_sm4_xts "SM4-XTS"
-#define LN_sm4_xts "sm4-xts"
-#define NID_sm4_xts 1202
-#define OBJ_sm4_xts OBJ_sm_scheme,104L,10L
-
#define SN_hmac "HMAC"
#define LN_hmac "hmac"
#define NID_hmac 855
@@ -5196,14 +5099,6 @@
#define SN_ffdhe8192 "ffdhe8192"
#define NID_ffdhe8192 1130
-#define SN_kyber512 "kyber512"
-#define LN_kyber512 "kyber512"
-#define NID_kyber512 1216
-
-#define SN_x25519_kyber512 "x25519_kyber512"
-#define LN_x25519_kyber512 "x25519_kyber512"
-#define NID_x25519_kyber512 1217
-
#define SN_ISO_UA "ISO-UA"
#define NID_ISO_UA 1150
#define OBJ_ISO_UA OBJ_member_body,804L
diff --git a/include/TA/openssl/openssl/objects.h b/thirdparty/open_source/openssl/openssl/objects.h
similarity index 99%
rename from include/TA/openssl/openssl/objects.h
rename to thirdparty/open_source/openssl/openssl/objects.h
index 611895f..5e8b576 100644
--- a/include/TA/openssl/openssl/objects.h
+++ b/thirdparty/open_source/openssl/openssl/objects.h
@@ -27,6 +27,7 @@
# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01
# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -167,6 +168,7 @@ int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid);
int OBJ_add_sigid(int signid, int dig_id, int pkey_id);
void OBJ_sigid_free(void);
+
# ifdef __cplusplus
}
# endif
diff --git a/include/TA/openssl/openssl/objectserr.h b/thirdparty/open_source/openssl/openssl/objectserr.h
similarity index 100%
rename from include/TA/openssl/openssl/objectserr.h
rename to thirdparty/open_source/openssl/openssl/objectserr.h
diff --git a/include/TA/openssl/openssl/opensslconf.h b/thirdparty/open_source/openssl/openssl/opensslconf.h
similarity index 100%
rename from include/TA/openssl/openssl/opensslconf.h
rename to thirdparty/open_source/openssl/openssl/opensslconf.h
diff --git a/include/TA/openssl/openssl/opensslv.h b/thirdparty/open_source/openssl/openssl/opensslv.h
similarity index 99%
rename from include/TA/openssl/openssl/opensslv.h
rename to thirdparty/open_source/openssl/openssl/opensslv.h
index 2b107a8..c486264 100644
--- a/include/TA/openssl/openssl/opensslv.h
+++ b/thirdparty/open_source/openssl/openssl/opensslv.h
@@ -94,6 +94,7 @@ extern "C" {
# define SHLIB_VERSION_HISTORY ""
# define SHLIB_VERSION_NUMBER "1.1"
+
#ifdef __cplusplus
}
#endif
diff --git a/include/TA/openssl/openssl/ossl_typ.h b/thirdparty/open_source/openssl/openssl/ossl_typ.h
similarity index 98%
rename from include/TA/openssl/openssl/ossl_typ.h
rename to thirdparty/open_source/openssl/openssl/ossl_typ.h
index fa54d67..e0edfaa 100644
--- a/include/TA/openssl/openssl/ossl_typ.h
+++ b/thirdparty/open_source/openssl/openssl/ossl_typ.h
@@ -96,9 +96,6 @@ typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD;
typedef struct evp_pkey_method_st EVP_PKEY_METHOD;
typedef struct evp_pkey_ctx_st EVP_PKEY_CTX;
-#ifndef OPENSSL_NO_GMSM
-typedef struct sm2_derive_param_st SM2_DERIVE_PARAM;
-#endif
typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX;
diff --git a/include/TA/openssl/openssl/pem.h b/thirdparty/open_source/openssl/openssl/pem.h
similarity index 97%
rename from include/TA/openssl/openssl/pem.h
rename to thirdparty/open_source/openssl/openssl/pem.h
index a187bea..2ef5b5d 100644
--- a/include/TA/openssl/openssl/pem.h
+++ b/thirdparty/open_source/openssl/openssl/pem.h
@@ -16,9 +16,6 @@
# include <openssl/evp.h>
# include <openssl/x509.h>
# include <openssl/pemerr.h>
-# ifndef OPENSSL_NO_SM2_ENVELOP
-# include <openssl/sm2.h>
-# endif
#ifdef __cplusplus
extern "C" {
@@ -51,9 +48,6 @@ extern "C" {
# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
# define PEM_STRING_PARAMETERS "PARAMETERS"
# define PEM_STRING_CMS "CMS"
-# ifndef OPENSSL_NO_SM2_ENVELOP
-# define PEM_STRING_SM2_ENVELOPED_KEY "SM2 ENVELOPED KEY"
-# endif
# define PEM_TYPE_ENCRYPTED 10
# define PEM_TYPE_MIC_ONLY 20
@@ -377,11 +371,6 @@ int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel,
pem_password_cb *cb, void *u);
# endif
# endif
-# ifndef OPENSSL_NO_SM2_ENVELOP
-DECLARE_PEM_rw(SM2_ENVELOPED_KEY, SM2_ENVELOPED_KEY)
-SM2_ENVELOPED_KEY *d2i_SM2_ENVELOPED_KEY_bio(BIO *bp, SM2_ENVELOPED_KEY **sm2evpkey);
-int i2d_SM2_ENVELOPED_KEY_bio(BIO *bp, SM2_ENVELOPED_KEY *sm2evpkey);
-# endif
# ifdef __cplusplus
}
diff --git a/include/TA/openssl/openssl/pemerr.h b/thirdparty/open_source/openssl/openssl/pemerr.h
similarity index 100%
rename from include/TA/openssl/openssl/pemerr.h
rename to thirdparty/open_source/openssl/openssl/pemerr.h
diff --git a/include/TA/openssl/openssl/pkcs7.h b/thirdparty/open_source/openssl/openssl/pkcs7.h
similarity index 64%
rename from include/TA/openssl/openssl/pkcs7.h
rename to thirdparty/open_source/openssl/openssl/pkcs7.h
index 0ea05c5..9b66e00 100644
--- a/include/TA/openssl/openssl/pkcs7.h
+++ b/thirdparty/open_source/openssl/openssl/pkcs7.h
@@ -151,28 +151,6 @@ DEFINE_STACK_OF(PKCS7)
# define PKCS7_get_signed_attributes(si) ((si)->auth_attr)
# define PKCS7_get_attributes(si) ((si)->unauth_attr)
-#ifndef OPENSSL_NO_PKCS7_SM2
-# define PKCS7_type_is_sm2(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_sm2data \
- || OBJ_obj2nid((a)->type) == NID_pkcs7_sm2signedData \
- || OBJ_obj2nid((a)->type) == NID_pkcs7_sm2envelopedData \
- || OBJ_obj2nid((a)->type) == NID_pkcs7_sm2signedAndEnvelopedData \
- )
-# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed \
- || OBJ_obj2nid((a)->type) == NID_pkcs7_sm2signedData \
- )
-# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted)
-# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped \
- || OBJ_obj2nid((a)->type) == NID_pkcs7_sm2envelopedData \
- )
-# define PKCS7_type_is_signedAndEnveloped(a) \
- (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped \
- || OBJ_obj2nid((a)->type) == NID_pkcs7_sm2signedAndEnvelopedData \
- )
-# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data \
- || OBJ_obj2nid((a)->type) == NID_pkcs7_sm2data \
- )
-# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest)
-#else
# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed)
# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted)
# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped)
@@ -180,7 +158,6 @@ DEFINE_STACK_OF(PKCS7)
(OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped)
# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data)
# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest)
-#endif
# define PKCS7_set_detached(p,v) \
PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL)
@@ -208,7 +185,6 @@ DEFINE_STACK_OF(PKCS7)
# define PKCS7_PARTIAL 0x4000
# define PKCS7_REUSE_DIGEST 0x8000
# define PKCS7_NO_DUAL_CONTENT 0x10000
-# define PKCS7_NOPADDING 0x20000
/* Flags: for compatibility with older code */
@@ -337,120 +313,6 @@ PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);
BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7);
-#ifndef OPENSSL_NO_PKCS7_SM2
-/**
- * @API:
- * PKCS7 *PKCS7_sm2_sign_envelop(X509 *signer, EVP_PKEY *pkey, STACK_OF(X509) *certs,
- STACK_OF(X509) *recips, const EVP_CIPHER *cipher,
- BIO *indata, int flags);
- * @function: Build a complete PKCS#7 sm2 signedAndEnveloped data
- * @param[in]
- * X509 *signer -- the certificate to sign with
- * EVP_PKEY *pkey -- the corresponding private key
- * STACK_OF(X509) *certs -- an optional additional set of certificates
- * STACK_OF(X509) *recips -- a list of recipient certificates
- * const EVP_CIPHER *cipher -- the symmetric cipher to use
- * BIO *indata -- the content to be enveloped and signed
- * int flags -- an optional set of flags
- * @return PKCS7* PKCS7 struct pointer
- * @see GM/T 0010-2012 SM2 cryptography message syntax specification. Sec. 10
- * @reused API:
- * PKCS7_set_type
- * PKCS7_set_cipher
- * PKCS7_sign_add_signer
- * PKCS7_add_recipient
- * PKCS7_add_certificate
- * PKCS7_final
- */
-PKCS7 *PKCS7_sm2_sign_envelop(X509 *signer, EVP_PKEY *pkey, STACK_OF(X509) *certs,
- STACK_OF(X509) *recips, const EVP_CIPHER *cipher,
- BIO *indata, int flags);
-/**
- * @API:
- * int PKCS7_sm2_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags);
- * @function: PKCS#7 sm2 enveloped or signedAndEnveloped data decryption
- * @param[in]
- * PKCS7 *p7 -- PKCS7 struct pointer
- * EVP_PKEY *pkey -- the private key for decryption
- * X509 *cert -- the corresponding recipient certificate
- * int flags -- an optional set of flags
- * @param[out]
- * BIO *data -- output data BIO struct pointer
- * @return int: 1 for success; 0 for failure
- * @see GM/T 0010-2012 SM2 cryptography message syntax specification. Sec. 9 and 10
- * @reused API:
- * PKCS7_decrypt
- */
-int PKCS7_sm2_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags);
-/**
- * @API:
- * int PKCS7_sm2_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
- BIO *indata, BIO *out, int flags);
- * @function: PKCS#7 sm2 signed or signedAndEnveloped data signature verification
- * @param[in]
- * PKCS7 *p7 -- PKCS7 struct pointer
- * STACK_OF(X509) *certs -- a set of signer certificates
- * EVP_PKEY *pkey -- the private key for decryption
- * X509 *cert -- the corresponding recipient certificate
- * int flags -- an optional set of flags
- * @param[out]
- * BIO *data -- output data BIO struct pointer
- * @return int: 1 for success; 0 for failure
- * @see GM/T 0010-2012 SM2 cryptography message syntax specification. Sec. 8 and 10
- * @reused API:
- * PKCS7_get0_signers
- * PKCS7_get_signer_info
- * PKCS7_signatureVerify
- */
-int PKCS7_sm2_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
- BIO *indata, BIO *out, int flags);
-/**
- * @API:
- * int PKCS7_sm2_decrypt_verify(PKCS7 *p7, X509 *recip, EVP_PKEY *recipkey, STACK_OF(X509) *certs,
- X509_STORE *store, BIO *out, int flags);
- * @function: PKCS#7 sm2 signedAndEnveloped data decryption and signature verification
- * @param[in]
- * PKCS7 *p7 -- PKCS7 struct pointer
- * X509 *recip -- the recipient certificate
- * EVP_PKEY *recipkey -- the corresponding private key for decryption
- * STACK_OF(X509) *certs -- a set of signer certificates
- * X509_STORE *store -- the trusted certificate store to use for chain verification
- * int flags -- an optional set of flags
- * @param[out]
- * BIO *out -- output data BIO struct pointer
- * @return int: 1 for success; 0 for failure
- * @see GM/T 0010-2012 SM2 cryptography message syntax specification. Sec. 8 and 10
- * @reused API:
- * PKCS7_sm2_decrypt
- * PKCS7_sm2_verify
- */
-int PKCS7_sm2_decrypt_verify(PKCS7 *p7, X509 *recip, EVP_PKEY *recipkey, STACK_OF(X509) *certs,
- X509_STORE *store, BIO *out, int flags);
-/**
- * @API:
- * int PKCS7_sm2_dataFinal(PKCS7 *p7, BIO *bio, BIO *data);
- * @function: PKCS#7 sm2 signed, enveloped and signedAndEnveloped data signing and encrypting
- * @param[in]
- * PKCS7 *p7 -- PKCS7 struct pointer
- * BIO *bio -- BIO chain
- * BIO *data -- input data BIO struct pointer
- * @param[out]
- * BIO *out -- output data BIO struct pointer
- * @return int: 1 for success; 0 for failure
- * @see GM/T 0010-2012 SM2 cryptography message syntax specification. Sec. 8, 9 and 10
- * @note:
- * Why do we create a new sm2 data final API?
- *
- * The process in the native OpenSSL API PKCS7_final calls PKCS7_dataInit and PKCS7_dataFinal
- * in sequence. PKCS7_dataInit constructs a digest BIO. Each digest algorithm corresponds to only
- * one digest BIO. PKCS7_dataFinal obtains the digest value in plaintext. Because the z value of
- * SM2 Signature needs to be calculated and it is different for each signer.
- *
- * The interface is added to adapt to the multi-sm2-signer scenario.
- */
-int PKCS7_sm2_dataFinal(PKCS7 *p7, BIO *bio, BIO *data);
-#endif
-
# ifdef __cplusplus
}
# endif
diff --git a/include/TA/openssl/openssl/pkcs7err.h b/thirdparty/open_source/openssl/openssl/pkcs7err.h
similarity index 84%
rename from include/TA/openssl/openssl/pkcs7err.h
rename to thirdparty/open_source/openssl/openssl/pkcs7err.h
index 22f8d52..02e0299 100644
--- a/include/TA/openssl/openssl/pkcs7err.h
+++ b/thirdparty/open_source/openssl/openssl/pkcs7err.h
@@ -57,15 +57,6 @@ int ERR_load_PKCS7_strings(void);
# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137
# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119
# define PKCS7_F_PKCS7_VERIFY 117
-# define PKCS7_F_PKCS7_ADD_RECIPIENT 140
-# define PKCS7_F_PKCS7_SM2_SIGN_ENVELOP 141
-# define PKCS7_F_PKCS7_SM2_VERIFY 142
-# define PKCS7_F_PKCS7_SM2_VERIFY_CERT 143
-# define PKCS7_F_PKCS7_SM2_VERIFY_SIGNATURE 144
-# define PKCS7_F_PKCS7_SM2_VERIFY_DATA 145
-# define PKCS7_F_PKCS7_SM2_DECRYPT_VERIFY 146
-# define PKCS7_F_PKCS7_SM2_SIGN_DATA 147
-# define PKCS7_F_PKCS7_SM2_DATAFINAL 148
/*
* PKCS7 reason codes.
@@ -108,11 +99,5 @@ int ERR_load_PKCS7_strings(void);
# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112
# define PKCS7_R_WRONG_CONTENT_TYPE 113
# define PKCS7_R_WRONG_PKCS7_TYPE 114
-# define PKCS7_R_UNSUPPORTED_SIGNERS 146
-# define PKCS7_R_UNSUPPORTED_RECIPIENTS 147
-# define PKCS7_R_SM2_SIGN_DATA_FAILURE 148
-# define PKCS7_R_SM2_VERIFY_DATA_FAILURE 149
-# define PKCS7_R_SM2_SIGNATURE_FAILURE 150
-# define PKCS7_R_SM2_VERIFY_ERROR 151
#endif
diff --git a/include/TA/openssl/openssl/rand.h b/thirdparty/open_source/openssl/openssl/rand.h
similarity index 85%
rename from include/TA/openssl/openssl/rand.h
rename to thirdparty/open_source/openssl/openssl/rand.h
index ec3b31f..38a2a27 100644
--- a/include/TA/openssl/openssl/rand.h
+++ b/thirdparty/open_source/openssl/openssl/rand.h
@@ -69,16 +69,6 @@ DEPRECATEDIN_1_1_0(void RAND_screen(void))
DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM))
# endif
-#if !defined(OPENSSL_NO_FIPS) || !defined(OPENSSL_NO_CMVP)
-int FIPS_rand_set_method(const RAND_METHOD *meth);
-const RAND_METHOD *FIPS_rand_get_method(void);
-int FIPS_rand_strength(void);
-/* 1.0.0 compat functions */
-int FIPS_rand_seed(const void *buf, int num);
-int FIPS_rand_bytes(unsigned char *out, int outlen);
-void FIPS_rand_reset(void);
-int FIPS_rand_status(void);
-#endif
#ifdef __cplusplus
}
diff --git a/include/TA/openssl/openssl/randerr.h b/thirdparty/open_source/openssl/openssl/randerr.h
similarity index 100%
rename from include/TA/openssl/openssl/randerr.h
rename to thirdparty/open_source/openssl/openssl/randerr.h
diff --git a/include/TA/openssl/openssl/rsa.h b/thirdparty/open_source/openssl/openssl/rsa.h
similarity index 99%
rename from include/TA/openssl/openssl/rsa.h
rename to thirdparty/open_source/openssl/openssl/rsa.h
index 459f0d2..5e76365 100644
--- a/include/TA/openssl/openssl/rsa.h
+++ b/thirdparty/open_source/openssl/openssl/rsa.h
@@ -31,12 +31,7 @@ extern "C" {
# define OPENSSL_RSA_MAX_MODULUS_BITS 16384
# endif
-# ifndef OPENSSL_NO_FIPS
- # define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048
- # define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS_LEGACY 1024
-#else
- # define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024
-# endif
+# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024
# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS
# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072
diff --git a/include/TA/openssl/openssl/rsaerr.h b/thirdparty/open_source/openssl/openssl/rsaerr.h
similarity index 97%
rename from include/TA/openssl/openssl/rsaerr.h
rename to thirdparty/open_source/openssl/openssl/rsaerr.h
index 30a39de..59b15e1 100644
--- a/include/TA/openssl/openssl/rsaerr.h
+++ b/thirdparty/open_source/openssl/openssl/rsaerr.h
@@ -86,10 +86,6 @@ int ERR_load_RSA_strings(void);
# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120
# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126
# define RSA_F_SETUP_TBUF 167
-#ifndef OPENSSL_NO_FIPS
-# define RSA_F_RSA_GENERATE_MULTI_PRIME_KEY 207
-# define RSA_F_FIPS_NDCPP_RSA_BUILTIN_KEYGEN 206
-#endif
/*
* RSA reason codes.
@@ -167,8 +163,5 @@ int ERR_load_RSA_strings(void);
# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155
# define RSA_R_VALUE_MISSING 147
# define RSA_R_WRONG_SIGNATURE_LENGTH 119
-#ifndef OPENSSL_NO_FIPS
-# define RSA_R_UNSUPPORTED_PARAMETERS 202
-#endif
#endif
diff --git a/include/TA/openssl/openssl/safestack.h b/thirdparty/open_source/openssl/openssl/safestack.h
similarity index 100%
rename from include/TA/openssl/openssl/safestack.h
rename to thirdparty/open_source/openssl/openssl/safestack.h
diff --git a/include/TA/openssl/openssl/sha.h b/thirdparty/open_source/openssl/openssl/sha.h
similarity index 97%
rename from include/TA/openssl/openssl/sha.h
rename to thirdparty/open_source/openssl/openssl/sha.h
index 4a47e6e..6a1eb0d 100644
--- a/include/TA/openssl/openssl/sha.h
+++ b/thirdparty/open_source/openssl/openssl/sha.h
@@ -83,10 +83,13 @@ void SHA256_Transform(SHA256_CTX *c, const unsigned char *data);
# define SHA512_CBLOCK (SHA_LBLOCK*8)
# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
# define SHA_LONG64 unsigned __int64
+# define U64(C) C##UI64
# elif defined(__arch64__)
# define SHA_LONG64 unsigned long
+# define U64(C) C##UL
# else
# define SHA_LONG64 unsigned long long
+# define U64(C) C##ULL
# endif
typedef struct SHA512state_st {
diff --git a/include/TA/openssl/openssl/stack.h b/thirdparty/open_source/openssl/openssl/stack.h
similarity index 100%
rename from include/TA/openssl/openssl/stack.h
rename to thirdparty/open_source/openssl/openssl/stack.h
diff --git a/include/TA/openssl/openssl/symhacks.h b/thirdparty/open_source/openssl/openssl/symhacks.h
similarity index 100%
rename from include/TA/openssl/openssl/symhacks.h
rename to thirdparty/open_source/openssl/openssl/symhacks.h
diff --git a/include/TA/openssl/openssl/x509.h b/thirdparty/open_source/openssl/openssl/x509.h
similarity index 98%
rename from include/TA/openssl/openssl/x509.h
rename to thirdparty/open_source/openssl/openssl/x509.h
index efdde0e..3ff86ec 100644
--- a/include/TA/openssl/openssl/x509.h
+++ b/thirdparty/open_source/openssl/openssl/x509.h
@@ -34,6 +34,7 @@
extern "C" {
#endif
+
/* Flags for X509_get_signature_info() */
/* Signature info is valid */
# define X509_SIG_INFO_VALID 0x1
@@ -54,9 +55,6 @@ extern "C" {
# define X509v3_KU_ENCIPHER_ONLY 0x0001
# define X509v3_KU_DECIPHER_ONLY 0x8000
# define X509v3_KU_UNDEF 0xffff
-#define X509v3_KU_SM2_SIGN (X509v3_KU_DIGITAL_SIGNATURE | X509v3_KU_NON_REPUDIATION)
-#define X509v3_KU_SM2_ENC_ENCIPHERMENT (X509v3_KU_KEY_ENCIPHERMENT | X509v3_KU_DATA_ENCIPHERMENT)
-#define X509v3_KU_SM2_ENC_CIPHER_ONLY (X509v3_KU_ENCIPHER_ONLY | X509v3_KU_DECIPHER_ONLY)
struct X509_algor_st {
ASN1_OBJECT *algorithm;
@@ -575,13 +573,6 @@ void X509_get0_signature(const ASN1_BIT_STRING **psig,
const X509_ALGOR **palg, const X509 *x);
int X509_get_signature_nid(const X509 *x);
-# ifndef OPENSSL_NO_SM2
-void X509_set0_sm2_id(X509 *x, ASN1_OCTET_STRING *sm2_id);
-ASN1_OCTET_STRING *X509_get0_sm2_id(X509 *x);
-void X509_REQ_set0_sm2_id(X509_REQ *x, ASN1_OCTET_STRING *sm2_id);
-ASN1_OCTET_STRING *X509_REQ_get0_sm2_id(X509_REQ *x);
-# endif
-
int X509_trusted(const X509 *x);
int X509_alias_set1(X509 *x, const unsigned char *name, int len);
int X509_keyid_set1(X509 *x, const unsigned char *id, int len);
@@ -660,12 +651,6 @@ int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
int X509_up_ref(X509 *x);
int X509_get_signature_type(const X509 *x);
-#ifndef OPENSSL_NO_X509_REQ_EXP_ATTR
-int X509_REQ_add1_exp_attr_by_NID(X509_REQ *req,
- int nid, int type,
- const unsigned char *bytes, int len);
-#endif
-
# if OPENSSL_API_COMPAT < 0x10100000L
# define X509_get_notBefore X509_getm_notBefore
# define X509_get_notAfter X509_getm_notAfter
@@ -673,6 +658,7 @@ int X509_REQ_add1_exp_attr_by_NID(X509_REQ *req,
# define X509_set_notAfter X509_set1_notAfter
#endif
+
/*
* This one is only used so that a binary form can output, as in
* i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf)
@@ -743,7 +729,6 @@ const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl))
DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl))
-const unsigned char *X509_CRL_get_hash(const X509_CRL *crl);
X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
diff --git a/include/TA/openssl/openssl/x509_vfy.h b/thirdparty/open_source/openssl/openssl/x509_vfy.h
similarity index 99%
rename from include/TA/openssl/openssl/x509_vfy.h
rename to thirdparty/open_source/openssl/openssl/x509_vfy.h
index fa6027f..25c79f1 100644
--- a/include/TA/openssl/openssl/x509_vfy.h
+++ b/thirdparty/open_source/openssl/openssl/x509_vfy.h
@@ -79,6 +79,7 @@ typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx
X509_NAME *nm);
typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx);
+
void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
# define X509_STORE_CTX_set_app_data(ctx,data) \
@@ -188,9 +189,6 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 78
# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 79
-/*huawei_0032_check_x509v3_pathlen_extension.patch*/
-# define X509_V_ERR_INVALID_PATHLEN_EXTENSION 101 /* Returned by the verify callback to indicate that the pathlen is invalid */
-
/* Certificate verify flags */
# if OPENSSL_API_COMPAT < 0x10100000L
@@ -449,6 +447,7 @@ int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method,
X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias(
const X509_LOOKUP_METHOD *method);
+
int X509_STORE_add_cert(X509_STORE *ctx, X509 *x);
int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x);
diff --git a/include/TA/openssl/openssl/x509err.h b/thirdparty/open_source/openssl/openssl/x509err.h
similarity index 95%
rename from include/TA/openssl/openssl/x509err.h
rename to thirdparty/open_source/openssl/openssl/x509err.h
index 0a84ef0..cd08673 100644
--- a/include/TA/openssl/openssl/x509err.h
+++ b/thirdparty/open_source/openssl/openssl/x509err.h
@@ -26,7 +26,6 @@ int ERR_load_X509_strings(void);
# define X509_F_BY_FILE_CTRL 101
# define X509_F_CHECK_NAME_CONSTRAINTS 149
# define X509_F_CHECK_POLICY 145
-# define X509_F_COMMON_VERIFY_SM2 165
# define X509_F_DANE_I2D 107
# define X509_F_DIR_CTRL 102
# define X509_F_GET_CERT_BY_SUBJECT 103
@@ -71,8 +70,6 @@ int ERR_load_X509_strings(void);
# define X509_F_X509_REQ_PRINT_EX 121
# define X509_F_X509_REQ_PRINT_FP 122
# define X509_F_X509_REQ_TO_X509 123
-# define X509_F_X509_REQ_VERIFY 163
-# define X509_F_X509_REQ_VERIFY_SM2 164
# define X509_F_X509_STORE_ADD_CERT 124
# define X509_F_X509_STORE_ADD_CRL 125
# define X509_F_X509_STORE_ADD_LOOKUP 157
@@ -84,10 +81,8 @@ int ERR_load_X509_strings(void);
# define X509_F_X509_TO_X509_REQ 126
# define X509_F_X509_TRUST_ADD 133
# define X509_F_X509_TRUST_SET 141
-# define X509_F_X509_VERIFY 161
# define X509_F_X509_VERIFY_CERT 127
# define X509_F_X509_VERIFY_PARAM_NEW 159
-# define X509_F_X509_VERIFY_SM2 162
/*
* X509 reason codes.
--
2.33.0