Updating prebuilts and/or headers

db655faa69c4af5c2293923bcc986323628d8cb0 - optee_src_build.sh
ad7dc8da66a1a95925c5d25352922f3878707e31 - nvcommon_build.sh
0bac32a973e208264ce1123fc61eec0d61030123 - optee/tegra264-optee.dts
1451a596b95222118ffa57c9eca7defa7102012b - optee/tegra234-optee.dts
c8e0513c06b701ddb65f4524dded76abdf77647c - optee/optee_os/Makefile
8b3eaf0d1f2e980508aac43f9391b7650d628a35 - optee/optee_os/.clang-format
386bf856b22f94daa4601c97eacdd9138b7b1cf5 - optee/optee_os/.checkpatch.conf
f0e65c7d69a4cdd4ca654f479018b5d319c49485 - optee/optee_os/MAINTAINERS
e50169a1cc9ebe9e9c34e9e9a500c3f6c6f5eadf - optee/optee_os/CHANGELOG.md
6bf9bd872a69d8c13e8dcac71fac8d094646251d - optee/optee_os/README.md
3a608e255399bb5cf2302bb52e533d81c469ecce - optee/optee_os/LICENSE.NVIDIA
370d68b1c9485f254e7c701c31e3c74fd16cacd7 - optee/optee_os/LICENSE
25ecfc13bc9b5205cb9db1ffb015fa973c8a754b - optee/optee_os/typedefs.checkpatch
a7d5f5139d7b9b81a37f26931af0c4922afdaa69 - optee/optee_os/keys/default_ta.pem
4ec1a9b7d2f64d94ccdaa889afe2cba025e5b33b - optee/optee_os/keys/default.pem
739a223e693f30815eb57c7b1bdae6bc5e2c8028 - optee/optee_os/lib/libunw/unwind_arm32.c
7a5d43bd6596d563ed816f9c1422b44e0b5a1b26 - optee/optee_os/lib/libunw/unwind_riscv.c
aa98ee7f2f58e8d9487aef8238db499ea48e9bf7 - optee/optee_os/lib/libunw/unwind_arm64.c
04ec37249588b61e2dfa9cd7874a618b1f27bddd - optee/optee_os/lib/libunw/include/unw/unwind.h
be4c6a3071f47d6d836b24e210bc1d446aa9afcc - optee/optee_os/lib/libdl/dlfcn.c
902b546a61d836961ed0f5fe348b564b0583755a - optee/optee_os/lib/libdl/include/dlfcn.h
68bf1f1bdbb1c92c9e98ce2e9e1846c05bcce8ca - optee/optee_os/lib/libmbedtls/mbedtls/BUGS.md
9340373e554e9c5780ec3367e3c1cf32e778dd87 - optee/optee_os/lib/libmbedtls/mbedtls/SECURITY.md
c15664798564c531febb48552a2c5b37843e833e - optee/optee_os/lib/libmbedtls/mbedtls/SUPPORT.md
c624270c283259d7e587572caab5f85965eed139 - optee/optee_os/lib/libmbedtls/mbedtls/.uncrustify.cfg
c1a9b51abc0f9cc88b4c212029e473ceb395ff24 - optee/optee_os/lib/libmbedtls/mbedtls/README.md
a5baf310a9232f5526fa774ad90581defcaaf34e - optee/optee_os/lib/libmbedtls/mbedtls/ChangeLog
6b0e2c9e46c5cfcddfd028f7014f4f7d4a4ed99d - optee/optee_os/lib/libmbedtls/mbedtls/LICENSE
e7e6585f37477460432cca732ce696a600bf6837 - optee/optee_os/lib/libmbedtls/mbedtls/CONTRIBUTING.md
880ab9508911420f4670f5d02f7a7701a13e5d3d - optee/optee_os/lib/libmbedtls/mbedtls/library/version.c
701ff73bf7ebd6ce07e96ac8df3d2adbcbba6146 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_client.c
359023e9ad56f20f042d426ceafe53ec6c31b459 - optee/optee_os/lib/libmbedtls/mbedtls/library/check_crypto_config.h
40593a360d83dc1a26af47ef266c92f598673ea1 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_hash.c
3b71a98ace82f82b312b8b8a114d5578d1501693 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_driver_wrappers_no_static.h
ca47e4d3a70e9c89ac74d4b14aebfc080e5e67a0 - optee/optee_os/lib/libmbedtls/mbedtls/library/md5.c
6a1ab0f3388f4e0060e9a4d834663b2f616c80bd - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_mac.h
6de5e94e347e295d6ec1db64327863ced11eb08f - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_debug_helpers.h
1f3975a28b2232b77cce09d995056f7164d0d161 - optee/optee_os/lib/libmbedtls/mbedtls/library/ecdsa.c
a24d3cb1a880e50d57e1b4507b5599e0aabf0e2c - optee/optee_os/lib/libmbedtls/mbedtls/library/ctr.h
720355856c9a9f5825d8a74b62bd72f2ec3e05fb - optee/optee_os/lib/libmbedtls/mbedtls/library/bignum_mod.h
706010ccd085bdb0035207b32a258db6392845d6 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_storage.c
90f254a9ab2e16d73c52338bbb0d91d6d54a5f15 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_client.c
f9aa24745477dab426527f9e93efb1e1c97e1cab - optee/optee_os/lib/libmbedtls/mbedtls/library/entropy_poll.h
1e369e23a5b61aaea5b5032bc3ac30e9697ebd43 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_se.c
8173570f0e8407baccfd7dc675c1810209f462ab - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_driver_wrappers.h
61ad45bec80c8c4abbe58d68496fa6bbe077162a - optee/optee_os/lib/libmbedtls/mbedtls/library/pk_internal.h
fd111ed16e353d926a9d76dbb5df895535634be0 - optee/optee_os/lib/libmbedtls/mbedtls/library/threading.c
6a6a63a0da71c37e96eb12fe3fffd3730866c198 - optee/optee_os/lib/libmbedtls/mbedtls/library/ecjpake.c
d9e50e5fb8e6975995ba600bdf98ada33e555320 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_core_common.h
2a4e2fe9bbd68887bd7366e2960c0fa32a356227 - optee/optee_os/lib/libmbedtls/mbedtls/library/pem.c
833db3d0f62e03b6c3cb3b550854615c547a2b20 - optee/optee_os/lib/libmbedtls/mbedtls/library/dhm.c
b153bfa62e48f70b79b62c366349b63416d6f0d9 - optee/optee_os/lib/libmbedtls/mbedtls/library/padlock.c
4dfc52ebd20720bb302ed98879afd2743cb4a7b5 - optee/optee_os/lib/libmbedtls/mbedtls/library/ecp.c
c7752b26b606cd4bc3a8619e013afbf94e4cfcb2 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_pake.c
44dee7bc643c971b4b6faeea3ae7c943679d5888 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_core.h
3a74c6e49900c7da069c9419402e1586179cbf7f - optee/optee_os/lib/libmbedtls/mbedtls/library/chachapoly.c
b6a83f2fbd8d89a9174309aac0a93dcb151cbf58 - optee/optee_os/lib/libmbedtls/mbedtls/library/pk_wrap.c
7099fb26b7055224df549ebbcfc694f56d5e2852 - optee/optee_os/lib/libmbedtls/mbedtls/library/entropy.c
4b2752130e35b2ffc6d0d1090e978cfb3d62b03e - optee/optee_os/lib/libmbedtls/mbedtls/library/bn_mul.h
28d197f40248a4fc7c922a18cb961eecab4ef41b - optee/optee_os/lib/libmbedtls/mbedtls/library/ctr_drbg.c
67cc739c8ffa6516cbcd8aeb74cce3da8b886ecd - optee/optee_os/lib/libmbedtls/mbedtls/library/x509_crt.c
9eb3d8dadd6e523b60d412365a917bc25b34eabc - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls.c
450139ffebb8dc544c6085df07a2f98344a462c2 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_cache.c
a1c4a7c084b72c089f6e961dcdddf4cbcc0d031e - optee/optee_os/lib/libmbedtls/mbedtls/library/constant_time_impl.h
c1672cdd2d91f7edb089e9b9d7ad5746bd3d35c8 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_slot_management.h
cd09f7a8353e7dd364a7339b8e25da3f1b82d516 - optee/optee_os/lib/libmbedtls/mbedtls/library/error.c
1fbf5a3006a525c656de13c29646d543c1b7eab6 - optee/optee_os/lib/libmbedtls/mbedtls/library/pkcs7.c
7e0544ce203a30920580bc189e4a434c8a9cac50 - optee/optee_os/lib/libmbedtls/mbedtls/library/padlock.h
ef3d55ee427370df7c7b907111167ccd45963f11 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_ciphersuites.c
e5cd9552fac3891ba7ee5f5a7cd2768d0c14eec1 - optee/optee_os/lib/libmbedtls/mbedtls/library/sha3.c
4ec208cb97126a2d781b23cc5ed00228bce15e31 - optee/optee_os/lib/libmbedtls/mbedtls/library/hmac_drbg.c
54270f21bc7c1356828d220f84715034ae97dab6 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_mac.c
1d44b7d80f61aeb9711864511d02371e1bc84613 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls13_invasive.h
dfc5016c52d5cd50a149f325fde9a69aeb2f4878 - optee/optee_os/lib/libmbedtls/mbedtls/library/oid.c
bdec1f7219dd8f136f2d171cc7fd72b78c823e7d - optee/optee_os/lib/libmbedtls/mbedtls/library/version_features.c
b990d38796ae0b4729115ab04b8659ed0588c0d1 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_aead.h
073d536903f9089933fd03f0e9704779a86c6013 - optee/optee_os/lib/libmbedtls/mbedtls/library/nist_kw.c
f2ad435e06e84714790e4e8fb16704df5568bf48 - optee/optee_os/lib/libmbedtls/mbedtls/library/sha256.c
d110503558dfe6334e12083302286c19942c4228 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_util_internal.h
e27c720b11784d210582c0f6dee86b881d0356c1 - optee/optee_os/lib/libmbedtls/mbedtls/library/platform.c
d68642978e7746d609d49d6debfc2b72f0a995bc - optee/optee_os/lib/libmbedtls/mbedtls/library/rsa_internal.h
b097070d66bb6da8275f81cdac6710322367e8b1 - optee/optee_os/lib/libmbedtls/mbedtls/library/aes.c
6d989ebf996489805dbb568881f47a04aef86335 - optee/optee_os/lib/libmbedtls/mbedtls/library/net_sockets.c
d61171b433ade397d6952c21f7250e041f870de3 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_driver_wrappers_no_static.c
c190bd662251c84379abfcc8e2bcf13c4351bb45 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_rsa.h
8fb78c0479511b62f79dddd75bfc36f1b4978c1a - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_ticket.c
b67498eedb70054d01b6acd2570276b0ca922be0 - optee/optee_os/lib/libmbedtls/mbedtls/library/constant_time_internal.h
86c57e4e1024a3bf84653e9c9a158e137c1b4cb6 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_rsa.c
d6d7d90c5aa028f71680f273a3903c1cc85ae063 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_hash.h
7598f896c14565abefa2369e86d111ec82fafa0d - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_cipher.h
ed3780d3baf0c4984b3db94c733cc2560f4a45b5 - optee/optee_os/lib/libmbedtls/mbedtls/library/platform_util.c
683833ddc795dd9e548e49c7464f5a2ea9963f40 - optee/optee_os/lib/libmbedtls/mbedtls/library/chacha20.c
9ee2504f0c1c257363b65f5c281ac1207f333e83 - optee/optee_os/lib/libmbedtls/mbedtls/library/ecp_invasive.h
a267368bdd9832d1fd1fe29e7c7129549c81105a - optee/optee_os/lib/libmbedtls/mbedtls/library/lmots.h
d2defd079302641402182fec4431dbff4f51dce9 - optee/optee_os/lib/libmbedtls/mbedtls/library/block_cipher.c
bd80ec303dca3dc362ea497fb5e85a56453cdc84 - optee/optee_os/lib/libmbedtls/mbedtls/library/pk.c
20ed7e8abb4886e04b72c938b2afe8c03fce8728 - optee/optee_os/lib/libmbedtls/mbedtls/library/sha512.c
c6b91052c817aae09341d1b83489c2872f50c6de - optee/optee_os/lib/libmbedtls/mbedtls/library/aesce.h
c1c77a3c506de2bdfb70d23bdf92edb1b1f30dbf - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_misc.h
f1983bea34123522fdf43c84851f0df2494e99d2 - optee/optee_os/lib/libmbedtls/mbedtls/library/x509_create.c
7e356244a6ea5955a803bb41f68ea115c3a4d205 - optee/optee_os/lib/libmbedtls/mbedtls/library/cipher.c
1341a7f31b37a675240bc064cdeea99c8e441122 - optee/optee_os/lib/libmbedtls/mbedtls/library/pkparse.c
69fd1fd786731541bdf9da788280df7b2488719f - optee/optee_os/lib/libmbedtls/mbedtls/library/md_psa.h
bb5019ae0d47b9ec7223749d5e7513a309749452 - optee/optee_os/lib/libmbedtls/mbedtls/library/x509_crl.c
0d4d5e09093a099b3762634a05d35f1d000d116f - optee/optee_os/lib/libmbedtls/mbedtls/library/x509_csr.c
faac7e1319a9302eaa61f2b65f0ab411c855cf2e - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_debug_helpers_generated.c
8a7e8bc14a7d8b29541d1ea1f1cc000866f4e1b0 - optee/optee_os/lib/libmbedtls/mbedtls/library/x509.c
5532d880ee4a0c3eb0e5e762d3b61d31ad38c264 - optee/optee_os/lib/libmbedtls/mbedtls/library/asn1parse.c
4836b5bf2c6b5b14e0a656970688fc5a5743eb28 - optee/optee_os/lib/libmbedtls/mbedtls/library/pkwrite.c
a2738cf8a87ea8935115c543eebfb2fc5a1bb94c - optee/optee_os/lib/libmbedtls/mbedtls/library/alignment.h
055a2de391d2d388c66fc9966f39fa047e7db94e - optee/optee_os/lib/libmbedtls/mbedtls/library/lms.c
ebed903a4d4df21b16f21043111838a986d7637c - optee/optee_os/lib/libmbedtls/mbedtls/library/pkwrite.h
9f244e6bb67c16acf787900058e0d5771a082045 - optee/optee_os/lib/libmbedtls/mbedtls/library/asn1write.c
6023b1b3bdfd7962f8389a79ef7f2b378b587e2c - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_client.h
35787cce8e6bfdb6a8663e69d8afb46bf45cba41 - optee/optee_os/lib/libmbedtls/mbedtls/library/md.c
e9f6e8afe518342da261e3602a5a6d1dcb712587 - optee/optee_os/lib/libmbedtls/mbedtls/library/aesce.c
0667f43299c47fef07d680000844d6b96c6bba6f - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_slot_management.c
2da9c53eca8bd9014692dfcf131c4ce4e2a5e7a8 - optee/optee_os/lib/libmbedtls/mbedtls/library/base64.c
ec6567d11e997534a8bcfb32753a41e58bb61db0 - optee/optee_os/lib/libmbedtls/mbedtls/library/des.c
cd7584dbca47c0491b92dba7d8aa9de20df243a5 - optee/optee_os/lib/libmbedtls/mbedtls/library/constant_time.c
0a3916324c1df053488378e4aba5c1b3e8dd27da - optee/optee_os/lib/libmbedtls/mbedtls/library/pkcs5.c
c3af5b53e927262b4e1d8bbac59ae38309bdfe31 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_random_impl.h
5383ae9e7c2b698a4f8c59fd2e12bb7239bc3709 - optee/optee_os/lib/libmbedtls/mbedtls/library/bignum_mod.c
1b5d33453e665621ddf9f87b00b2552df2e8ed3c - optee/optee_os/lib/libmbedtls/mbedtls/library/gcm.c
a5a816d7694ba6a4f14c6768c161503f10e0232d - optee/optee_os/lib/libmbedtls/mbedtls/library/hkdf.c
6462802d8c009fa5b2f993d34c7568911bf2664d - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_cookie.c
95f4b4ad7535dea14b349f836351241f5a53d597 - optee/optee_os/lib/libmbedtls/mbedtls/library/bignum.c
4a9112169603fa8ea8042f460572820d74e4a35a - optee/optee_os/lib/libmbedtls/mbedtls/library/x509write_crt.c
d8175181bb4754329b11af4d7d567b1a4c53fa48 - optee/optee_os/lib/libmbedtls/mbedtls/library/cipher_wrap.c
936a8effa085d3759003af8fffa65f5138f11815 - optee/optee_os/lib/libmbedtls/mbedtls/library/pk_ecc.c
2eda5f44499bb68101c95f6d79f03247fb769182 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls13_keys.h
c3d210913b5754465ddcb1fd374ddbbf5d166f75 - optee/optee_os/lib/libmbedtls/mbedtls/library/aria.c
b2c1dcde002c67794c426f26569f55991de8400c - optee/optee_os/lib/libmbedtls/mbedtls/library/pk_wrap.h
70b065d35e010b16a9e598c315cef79f8bff6fc3 - optee/optee_os/lib/libmbedtls/mbedtls/library/lmots.c
70c1bc8a334555aac50019e69d994657fa37aed8 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_aead.c
4f9f5f8c05044050bcc981c9116f515cd665ec81 - optee/optee_os/lib/libmbedtls/mbedtls/library/bignum_mod_raw.h
09c392c9067ea1b96fef7dd8e90a6bd156070f1f - optee/optee_os/lib/libmbedtls/mbedtls/library/bignum_mod_raw.c
34db3973858a06d0edba679e54eace5fa796b6ea - optee/optee_os/lib/libmbedtls/mbedtls/library/ecp_curves.c
87587c1647a188e8726ab718d8bddea9c76558a6 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls13_server.c
45f56b379a48a875c5fc535c5cde423bc0f75b27 - optee/optee_os/lib/libmbedtls/mbedtls/library/md_wrap.h
fd803dd5df6d9190c2c1e500a3dbd5746b0dc642 - optee/optee_os/lib/libmbedtls/mbedtls/library/common.h
c1c9dc9341eff725c8411ef92159228f7744dfe5 - optee/optee_os/lib/libmbedtls/mbedtls/library/timing.c
f86e3ed644e6867f088be928880f64509c279429 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_ffdh.h
fda92370abdfc74479ffe3aefae7dab5060c9d48 - optee/optee_os/lib/libmbedtls/mbedtls/library/rsa_alt_helpers.h
5ce9fe98dd5f1ca274d1113e47899a4a4b66b9b7 - optee/optee_os/lib/libmbedtls/mbedtls/library/x509write.c
1201d8020ceb7224da0207629171eeb8e9434c95 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_cipher.c
774d13663595115251d9caa6152f19be250be227 - optee/optee_os/lib/libmbedtls/mbedtls/library/entropy_poll.c
3536afcd8706e90d558e4abe122d98767f575203 - optee/optee_os/lib/libmbedtls/mbedtls/library/bignum_mod_raw_invasive.h
f11bf19bf2f01a9a8812d1be9677e831d84a297a - optee/optee_os/lib/libmbedtls/mbedtls/library/poly1305.c
aae3636f167a41db2e3ec010524eea9aec2f9074 - optee/optee_os/lib/libmbedtls/mbedtls/library/aesni.h
57d7ef1d9d3fbd6a6de43a2a83fc5475a7901759 - optee/optee_os/lib/libmbedtls/mbedtls/library/sha1.c
3944d8d4b38547f64cc628db83abdc0ef043c6a8 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto.c
501f79310b67c493ef28ea5507d1123a5b580e10 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_its_file.c
a1d76dbde3906a065ff89ec9f2cd5a1969339855 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_se.h
84eb2227cd911f1a55e1f95f76fce32c5bc8e42f - optee/optee_os/lib/libmbedtls/mbedtls/library/ecp_curves_new.c
1e9cc0e1e0e7bed6ef5b2bebd3a950515a82ffb8 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_storage.h
fb11668be421a6ab147341d7e224d1c99ad1162c - optee/optee_os/lib/libmbedtls/mbedtls/library/pkcs12.c
764027cc58d4647a1358e4a3eb774e1004bb8ab1 - optee/optee_os/lib/libmbedtls/mbedtls/library/block_cipher_internal.h
4f5a911da5773ac94e8854c74f2e1cfa99631b11 - optee/optee_os/lib/libmbedtls/mbedtls/library/aesni.c
a0fd857068a7306e2029604ea8a5197ca1ae9531 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_ffdh.c
b7f5318cb9e1c7350bc04d0eca2329be6930bd9e - optee/optee_os/lib/libmbedtls/mbedtls/library/base64_internal.h
4254fa1b5039a6a4028f3d6e06895f123e137f90 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls13_client.c
7887efa935129b2cddeddb81f260ec8495b13f65 - optee/optee_os/lib/libmbedtls/mbedtls/library/bignum_core.h
fb9e2f9d8bd92dde70e7db4a92aa3048d1004eb4 - optee/optee_os/lib/libmbedtls/mbedtls/library/rsa.c
63a17c59762d50548a111255318364d7f3ad123c - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_ecp.c
04feaaf1e304bff46c44b5f0d867ae158a94cc3b - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_ecp.h
5c45e171e11dc57d2600b6c6701ffb8bb827e8c5 - optee/optee_os/lib/libmbedtls/mbedtls/library/camellia.c
1715eef1d40c0a05734fba29d789ad524f3f5767 - optee/optee_os/lib/libmbedtls/mbedtls/library/ecp_internal_alt.h
18284650f4545257a941c7e1bafceef077aa1a91 - optee/optee_os/lib/libmbedtls/mbedtls/library/debug.c
839ce5b118b082c5c5c20e602c4dd08f7351c7cc - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_msg.c
93d4a55c1929e6933c56e42747c275c4100334b5 - optee/optee_os/lib/libmbedtls/mbedtls/library/cmac.c
311f5c32b1afd02bcdc677514164ac8834647fa3 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_invasive.h
57778933160acabd2a466717544054d59eb9f0b5 - optee/optee_os/lib/libmbedtls/mbedtls/library/debug_internal.h
a192a97274631b6c684c4eb3e6efe30b911fb7da - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_its.h
479f94bab53990b99a55174c94a48fb9d19daf5a - optee/optee_os/lib/libmbedtls/mbedtls/library/memory_buffer_alloc.c
92995c922f07c3435a6229d53cf53c0d63e2ac21 - optee/optee_os/lib/libmbedtls/mbedtls/library/cipher_wrap.h
0248b36e34daaf09bf413ef1f89047f4013f8aef - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls13_generic.c
1d9321b1c3bc06accfd454cacd7715d594388719 - optee/optee_os/lib/libmbedtls/mbedtls/library/ecdh.c
731085005031dae21151774e18dfb85f16ce64b9 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls12_client.c
712a890c7536695298b031503d661d19ca3c5684 - optee/optee_os/lib/libmbedtls/mbedtls/library/ripemd160.c
5732fb45a4915d78d7dc659f2496cf2b4504c891 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls13_keys.c
2e368f8c44fb18f74d69d8210ff2db5fd07bdee5 - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_util.c
ad8b2ed140b0e6dbd6905d7909d2d727af65085d - optee/optee_os/lib/libmbedtls/mbedtls/library/psa_crypto_pake.h
b0d9cbd683b0046eeb47c90cb2e2eb0f8278dab4 - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_ciphersuites_internal.h
d4d56016ab70cc4abde713de89a743507797e7a4 - optee/optee_os/lib/libmbedtls/mbedtls/library/ccm.c
f6d42913e81b49bbba5c3e5ad7c67a09e08068e5 - optee/optee_os/lib/libmbedtls/mbedtls/library/rsa_alt_helpers.c
9cd5434f88800228de841fbf1721b661662811ca - optee/optee_os/lib/libmbedtls/mbedtls/library/ssl_tls12_server.c
fb3b27c7fcf9a13ab24d3f274f0e7f8530d1d420 - optee/optee_os/lib/libmbedtls/mbedtls/library/bignum_core.c
c8666bd58a19c9422c5f30db595d47dc21e27103 - optee/optee_os/lib/libmbedtls/mbedtls/library/x509write_csr.c
fc0ae56e03fbe056e5e7644c36b2679294c5585e - optee/optee_os/lib/libmbedtls/mbedtls/library/x509_internal.h
b93307b95fbe10ef37dd7b74cae0babf7fad8293 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/pkcs7.h
7bf8796f892ee711dc2006c297be2d5a9a02611d - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/bignum.h
187aa2ca3ee91e151d50f5a8cfff5e03a2e95b4f - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/platform_util.h
565f21550cf6318685fe3564dc363b2f6c40cb1c - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/asn1.h
32a5a3ea925180f79c7c706abc1f082fe022feb8 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/base64.h
e45a68b1de6b9f88571d7ae66702820092958929 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/pkcs12.h
e833b95746776e0b98dbe02d9b5627d525016334 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/config_adjust_psa_superset_legacy.h
40edda9e3a55606d51f8361af01dfde40ed2f029 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/config_adjust_ssl.h
d8e66f105473befdf6e20e8c56ad7bfe535b16f5 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ssl_cache.h
065fa5e2f69f42aedab322c719c9bc08c374f32d - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/platform.h
00e37debab5fffafda316b21ce85de1eb003b419 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/block_cipher.h
591ba1173da9699e1c042d47c69e8f64ae6c9b99 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/sha512.h
4138555483ffcf74f8ad6fafe9ef04d936f5d1ba - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/debug.h
034290a7ecad96a7d151d0a3a9f288256d034b43 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/cmac.h
d8a0c0ac0c8bb7fc5351af575b806999f671c088 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/asn1write.h
71628891cf862724d74afed165ccb1342e9b060c - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/oid.h
4a5b3efd45f10526fe977bfe5ffb2b17eb12ff34 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/x509_csr.h
474c863228a84b45157a6039fe53448d2977616d - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/aes.h
73c9ef93c5479241ef582d29bb29b430c9ce9c5d - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/timing.h
7ddba5339352c261bd8e2ca78412499752ea47dd - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ecdsa.h
439dda672dc32d2c6962b9cf79056e8823aac811 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/x509_crl.h
f06989a073f2295aba8fc92f7638971d7356d1aa - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/hmac_drbg.h
11cae73390255ac02264f80db6e9a21b2aa4dcff - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/pem.h
3e2e51d1a0559a53bf33cb8732139d3e41b63095 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/psa_util.h
018029f5fa70b36ad74200abfc3f42ac5e4d1008 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ecp.h
cfc43195968ee42a40f7af0c9248404b0df56715 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ssl.h
88ed65ff99b7a98bdc81116adf4b3cf3b93c3698 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/mbedtls_config.h
4c9d70a4fa0db56c856d30e951bda8497ab4c773 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ssl_ciphersuites.h
1a690aeb564d60ca150466c8f135880d6df11ed9 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/sha3.h
76fd3b88cf73d4ec7a7c8d55955735bb93e9ef3a - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ccm.h
0a847bbbf8f2c6230fafd21534bf7a9851eaae40 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/threading.h
44647c91830bb7d621b5398176db0a23f720ec04 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/md.h
59acf9a02abebccf88459e468f27d52360d84de0 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/rsa.h
3c6427f4932452d16fe0fc2ced73f90f3273fbe0 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ssl_cookie.h
a8b1b013b56757ea788c553ad42667942c23561d - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/sha1.h
97a9a800ac4e269e5d589c0af6018322e8a424f6 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/des.h
52b8d65f3aeb5f24c01808180b3e41f41a171ced - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/config_adjust_legacy_crypto.h
2c6d3c5c6e834d005611b32c0f01d2a5b711f267 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/private_access.h
9e37db2222dc6569e97e1e892fc51ebf0bb6ff34 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/version.h
50591bf1236a92ba42d984ae6884963dd526370f - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/platform_time.h
1fb288be26ebaf7af87e9499a20d51c35f2cfb60 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ripemd160.h
f15dcbf8077c2113e1ce82c0fb05f5b542989046 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/x509_crt.h
3bb307911f5446e395698dc2e9d1cea4d6c0a498 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/gcm.h
eb484db4e4d11fe28d8fdd994b794639b936052e - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/chacha20.h
5beb5021be0476decf1fdd58ffb8f1dcffa869c6 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/pkcs5.h
da75a08831a4cd9e6bd9d691223880bd35c3c34b - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/nist_kw.h
c381695dc2c6943149e2d264abc36b062a513b5d - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/config_psa.h
a135342a6c7055ce8708a5a20c8c9e41670431a5 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/md5.h
3af3c7430cd7757e2894e831fd28286527583a4e - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ctr_drbg.h
1e9387df7f659c9bd39b0ddaa4f592c251d3177f - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/compat-2.x.h
30b481f443b2b836f794e7660313b9e8ce2beac7 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/check_config.h
72045d831d483564c4028e7de7be610245cc2549 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/sha256.h
8c00ff70ce5d5c857931134730f9ca3c418cd1d4 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/cipher.h
f6c95cbe69dee099329c8440a8405f4bfd53773d - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/build_info.h
fc187445cc25df429e8a51ed715b80ddf0b6cc8b - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/camellia.h
e24667cd71515292be5743954c9102c408c06a5d - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/error.h
1334ba7d6d0b82805edfc3b2cfc84a6b97b1c1eb - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/constant_time.h
4797c8dc083bf77fd624c36abbb75b444b15db7a - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/config_adjust_psa_from_legacy.h
01b868b8d8c5fc13897d549b65545f44611ed7cf - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ecdh.h
bbc8764d91eafe74a5b116079d89fa7abc0e32c3 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/lms.h
196c33a8e72ba9d94922b0d03d367536c69d57cd - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/hkdf.h
c876e69080713121a78722f58fea17ff93bcc9da - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/poly1305.h
b11046d475577f738880760e12e2fb754d0adf6a - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ssl_ticket.h
8f645e6c7e9bb8fb3062453a25351f6637240edb - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/aria.h
cb75f0cffd39ba3c20b3d245da967d277fa24aec - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/x509.h
e08bd32affd3519623d2642c72d227b36c1a4713 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/pk.h
e813552634e5dede89fdab4409921005446e8d4c - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/chachapoly.h
215f6847d50c8d62f573444e1f9b04edec48e5b2 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/config_adjust_x509.h
afb0e46a1fb26ae55380ef26cb8e4797973bdcdd - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/ecjpake.h
e0f719811f61d2136dc947daedecce6d56853f85 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/entropy.h
b27dad8b7e69a7cc4b047bf0ae72f47c2e6eff41 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/memory_buffer_alloc.h
7ea8a0c8788e8ce3b5bd93f801b0f1f73678339c - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/net_sockets.h
b5e9863bf52f59830c30f59c7458329596b3c847 - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/config_adjust_legacy_from_psa.h
be65f6fa1041ae0507c7bf0a6eba3062c56c77ab - optee/optee_os/lib/libmbedtls/mbedtls/include/mbedtls/dhm.h
368162995510e965456734f8c11e6c45f99831db - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_platform.h
c2a92c292e02cb5cc826875c62d72d772f7a63db - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_config.h
811d6e896f1137d502bbe5dc39500e9541e8486d - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_extra.h
179b4f20b306d5f51203d117fba24d02bfbcd896 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_driver_contexts_key_derivation.h
b3b5f3122be0b30ea4840362f1c6e55a7d7a2678 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_adjust_auto_enabled.h
e8655f709c86b942f9d84c9feb266898c643a0cf - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_builtin_primitives.h
e7193287972be328b69ee8b328597a61cf2fde4a - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_adjust_config_key_pair_types.h
b4dfafe47267632baf3bfa914231bc464faeeff2 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_sizes.h
2e2acb06ffa50acfa89ec1c5395dcc44b62f4643 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_driver_common.h
e3644dfa747312d4eae1c40d9cd7494de4dad903 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_builtin_composites.h
0cac0c7839297e2fa91be102db6c86ce67540ee7 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_types.h
9395ad650727efbf8aba0c30e18aeed89891c33a - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_adjust_config_synonyms.h
ea73025a395d86dfa20ec8ea6fe47adec8a7a1c9 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_legacy.h
5328ef9d470c642dd256097d237531efe7bdd023 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/build_info.h
8e66ddedbb26d5a2db01e56aba22dd89e91a2a43 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_struct.h
eae4f8a67131411b36fa5d0d4482a3a15b6e9ce5 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_builtin_key_derivation.h
313bb279aaad9efc8e36779a06b335ce46766380 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_driver_contexts_primitives.h
2ae5bfd0ce536a827ca50d381b55425f68f2c781 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_compat.h
73cb748f5a4a704393b2549f4752af60aa6d4619 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_values.h
417e33620dfd5962af8d4fd46993ec0be951d447 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto.h
848592ca489a76313bf6fcbe7bfabca60a4252af - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_se_driver.h
8cf38bec6011ed75c26afb3014b459b9902e6f53 - optee/optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_driver_contexts_composites.h
c65287d24cfd9a59f01baa351a41f339d9c2c957 - optee/optee_os/lib/libmbedtls/include/mbedtls_config_uta.h
1e92830a9036d696deaef5e1ff07637b7e181eb7 - optee/optee_os/lib/libmbedtls/include/mbedtls_config_kernel.h
61a92d97bc038e1636f35968f5a75f708383e065 - optee/optee_os/lib/libmbedtls/include/aes_alt.h
b68da531ca86368d8d211961616d067dca104cf2 - optee/optee_os/lib/libmbedtls/core/aes_cbc.c
1e3080bd5db0189b057a3f4fa1d45dae9ce59c72 - optee/optee_os/lib/libmbedtls/core/des_ecb.c
da507e72de1018a909591a63e2e680819b778b7d - optee/optee_os/lib/libmbedtls/core/hash.c
89b5b1b09c6141ce6cae83b42b24106dbf5d19d7 - optee/optee_os/lib/libmbedtls/core/sm2-dsa.c
2475b97d485b317cc088b6d1b3842d0bb9e4bd07 - optee/optee_os/lib/libmbedtls/core/aes.c
7cf5fb5fdbffcf6f9ad1ffefde20cb30eb66d58f - optee/optee_os/lib/libmbedtls/core/sm2-kep.c
a86c6c8bf63ea21ef2492f49cbc071f2f23a1d35 - optee/optee_os/lib/libmbedtls/core/mbed_helpers.c
3eb60b38bd9b87944a242c659ad68d8aaa8e220f - optee/optee_os/lib/libmbedtls/core/aes_ctr.c
3a1838593a7cbf67a1966456b9e4e441e14368ea - optee/optee_os/lib/libmbedtls/core/aes_ecb.c
7d7d3c3b185a01f15e64f2b4815b1f604ed06cb7 - optee/optee_os/lib/libmbedtls/core/mbed_helpers.h
4be86702d2f54b1d3c9fa62c47c1c16e8f9a5210 - optee/optee_os/lib/libmbedtls/core/sm2-pke.h
9eac1bef00d42cb5d29355da4ff216ab65029708 - optee/optee_os/lib/libmbedtls/core/des3_ecb.c
03091ed4d6dc54646fb16556db614135ab3b3128 - optee/optee_os/lib/libmbedtls/core/bignum.c
7c72db258e4db9095f0efed76d97590d49db1025 - optee/optee_os/lib/libmbedtls/core/ecc.c
12ba008130153663cb6542e80dcdb00d3a09d35c - optee/optee_os/lib/libmbedtls/core/hmac.c
bc4a14352a35d7f28ca65fda6e4625eaad768ef2 - optee/optee_os/lib/libmbedtls/core/sm2-pke.c
95257f1b9669bd55e715296a5db0520dfef94dfa - optee/optee_os/lib/libmbedtls/core/des3_cbc.c
f0df4d72b2d60e2b55b568aca159a46bf7c8f5c3 - optee/optee_os/lib/libmbedtls/core/rsa.c
44c09d4b791e9fc7eb12c3090186b990a05f4484 - optee/optee_os/lib/libmbedtls/core/cmac.c
27d0d017d652207089357343fefde8822d574a56 - optee/optee_os/lib/libmbedtls/core/tomcrypt.c
4a3549fe50b6596fa95703bdad942578f79ff095 - optee/optee_os/lib/libmbedtls/core/des_cbc.c
78d30d0ba985e6d4114a2163f83194e58c30ad9b - optee/optee_os/lib/libmbedtls/core/dh.c
98b5b0189cbb8c50b0e303790d23dbf9681647cc - optee/optee_os/lib/libmbedtls/core/sm2-dsa.h
61ba39ae5f3db7e446666d29227a87474f4a6117 - optee/optee_os/lib/libutee/tee_socket_pta.c
8e021ba886ee4c9113f7e5f943eff836e70d9c62 - optee/optee_os/lib/libutee/tee_api_arith_mpi.c
077681c818e3003b52065a80dbacbd498dff6b29 - optee/optee_os/lib/libutee/tee_api_private.h
8fa85961841aca5f32b051d7c2137dce6048c90a - optee/optee_os/lib/libutee/trace_ext.c
756eb32d34c8adc8518381acb1da0e71abfc07c9 - optee/optee_os/lib/libutee/assert.c
2f5ffed76f45e88e6a21f21030600fdf1485141c - optee/optee_os/lib/libutee/tee_api.c
dc820097b9daaecdbebb44d2745b59ab6c868b3c - optee/optee_os/lib/libutee/user_ta_entry_compat.c
de26a71b90cb412c9efc752727836f54fb1d95b9 - optee/optee_os/lib/libutee/tee_api_objects.c
2a8949363bf9be408cbddf09c072982132988ffc - optee/optee_os/lib/libutee/abort.c
505da116e55bfaee3c94a6db710ef70a860f9bf1 - optee/optee_os/lib/libutee/tcb.c
9389ec3691da465689f9ef3c7e4a843bdad07389 - optee/optee_os/lib/libutee/tee_tcpudp_socket.c
da21776fa6ba59b16f1c370669a113a39ef19a96 - optee/optee_os/lib/libutee/tee_api_property.c
45c1ba4438be0ecfb4d4bca51534640836b8c995 - optee/optee_os/lib/libutee/tee_api_panic.c
bc9153018927868009fb5a5e6df2a409ecb13f4c - optee/optee_os/lib/libutee/tee_system_pta.c
b1398a9a37ee47f2718169316310a4a16c61166c - optee/optee_os/lib/libutee/tee_uuid_from_str.c
cd3c2b81c2fa7237a975213bafcf7ac4e67ff177 - optee/optee_os/lib/libutee/tee_socket_private.h
e4456319b2a3284f8ff98ff936bcc63aa1bf3e31 - optee/optee_os/lib/libutee/tee_api_operations.c
b9209dd75181e9d8ea1f62de22f752dc82097d5d - optee/optee_os/lib/libutee/user_ta_entry.c
07b4cbc455efb89b2f41b5d8b5b7d58008497abf - optee/optee_os/lib/libutee/arch/riscv/utee_syscalls_rv.S
b1ff8027d8f72d6043aefff12c169937335d77c2 - optee/optee_os/lib/libutee/arch/arm/utee_syscalls_a32.S
137080dcbc697e48f567709fe3fda2528f5d40fa - optee/optee_os/lib/libutee/arch/arm/utee_syscalls_a64.S
16e0dc83cf08600fd769832ff1d21611782da066 - optee/optee_os/lib/libutee/arch/arm/gprof/gprof_pta.c
2e2b03efa22c915b6ab0a59c54793e918ae83560 - optee/optee_os/lib/libutee/arch/arm/gprof/gprof_pta.h
a2170433362124e5401cea1cf6f4dafaca653856 - optee/optee_os/lib/libutee/arch/arm/gprof/gmon.h
1a3e524ad810227480d10b0d8426c780c85328bb - optee/optee_os/lib/libutee/arch/arm/gprof/gprof.c
be6fc3000484b65889ef0ddf1e7a926e364575a8 - optee/optee_os/lib/libutee/arch/arm/gprof/gmon_out.h
5e23b121b492913159ac492c975bc689fe4fe9d5 - optee/optee_os/lib/libutee/include/utee_syscalls.h
d6461788cfe9c7fa1812938fccf00428981ca21f - optee/optee_os/lib/libutee/include/pta_rtc.h
e3514bd732b3d0be323aae77cdfcbfb736b42fdb - optee/optee_os/lib/libutee/include/tee_internal_api.h
aa09af74960113ccd4fb8827d07e4b9140aacf8f - optee/optee_os/lib/libutee/include/arm_user_sysreg.h
d6494aea8b2d08af66c5b03901a962d4c23afa5c - optee/optee_os/lib/libutee/include/pta_secstor_ta_mgmt.h
083e406c1b8993f6c0226bf312fcd140b1bc2cc4 - optee/optee_os/lib/libutee/include/pta_imx_digprog.h
989a3f3ba297d8913c040b838c9cab1a5103308f - optee/optee_os/lib/libutee/include/pta_attestation.h
1f3e231e2e68ce744bb262619fadfdb1e8f137a9 - optee/optee_os/lib/libutee/include/tee_arith_internal.h
faeceac8862bbe02c984a8839b1e1cae06319dba - optee/optee_os/lib/libutee/include/pta_rng.h
c4e212610ccdc55f55421917a843a5b8ddb567c2 - optee/optee_os/lib/libutee/include/pta_imx_ocotp.h
c603b51b2bfba8baa7cb2c4dfbaaa421d9461207 - optee/optee_os/lib/libutee/include/tee_api_defines_extensions.h
8981169f89ce2d195a17112b676bb8552d21ad4c - optee/optee_os/lib/libutee/include/tee_api.h
62fdcf80906b4877ba0a4d22e69a0c75e98e8b9b - optee/optee_os/lib/libutee/include/pta_imx_manufacturing_protection.h
ce4bc2d3ed7f6c3ecb68a1f98a7f368f7369a286 - optee/optee_os/lib/libutee/include/utee_syscalls_asm.S
80eb8b37eb87886d40dc390c74bfae90f83ea208 - optee/optee_os/lib/libutee/include/pta_socket.h
aff5768a908441b37ad3a28350e0b0f6bf0007b0 - optee/optee_os/lib/libutee/include/tee_api_defines.h
9155ede1378206e1762eb2696d1589cb2b620ee6 - optee/optee_os/lib/libutee/include/utee_types.h
591d4ed947e32e0c72a95a7a2514221f1cf9490d - optee/optee_os/lib/libutee/include/pta_gprof.h
f6b88edde49c7f79eebc0c3f861b6f19ff685fd1 - optee/optee_os/lib/libutee/include/tee_udpsocket.h
987521c6dd87009f2cad24c545048d20baad76e5 - optee/optee_os/lib/libutee/include/pta_jetson_user_key.h
1192ccc4876e246e93c4dd022fea7576a7613c0b - optee/optee_os/lib/libutee/include/pta_device.h
0311b7bfd98a444eeef7c7c89d4e942a84ea6787 - optee/optee_os/lib/libutee/include/tee_ta_api.h
9c2c1f4769d19646dfe1493dfaa1007b8c538af0 - optee/optee_os/lib/libutee/include/rng_pta_client.h
473002e7ae4c77b48de04a67e4bfacf069104ca2 - optee/optee_os/lib/libutee/include/user_ta_header.h
f5d83909e5071e2affc98fc56ac4b941e00ef03a - optee/optee_os/lib/libutee/include/pta_apdu.h
8572ff4140b947a4e4a4b5752d8265fe1ea5b348 - optee/optee_os/lib/libutee/include/pta_scmi_client.h
aa7d01574e3506e0ee2f42cdb251145908b75381 - optee/optee_os/lib/libutee/include/elf.h
ebea83d32048f9808bd31f5e2dabc5c0314057bb - optee/optee_os/lib/libutee/include/__tee_ipsocket.h
bfd21882753009a9bff306c49ea3d6ba0a27715d - optee/optee_os/lib/libutee/include/pta_stm32mp_bsec.h
47e7cf8af6ad09392aa45b94e88e4cc07e54520e - optee/optee_os/lib/libutee/include/tee_syscall_numbers.h
5ca4833e2188ae7c12e8b39f0448c7f3627571c7 - optee/optee_os/lib/libutee/include/__tee_tcpsocket_defines.h
ef91d0380fcc7f9a3bb92041f649b2756d3f1282 - optee/optee_os/lib/libutee/include/elf_common.h
34686e9ef3d016d68cb94ca12b860c89349b5eca - optee/optee_os/lib/libutee/include/__tee_tcpsocket_defines_extensions.h
f5e7435c16a3b97874cafc61dd32e3e448ea9b79 - optee/optee_os/lib/libutee/include/pta_jetson_ftpm_helper.h
c5ae0189b31c447df97a4304edc63420139e8649 - optee/optee_os/lib/libutee/include/remoteproc_pta.h
793d80272b98715200cd83435c35de534049b96e - optee/optee_os/lib/libutee/include/__tee_isocket_defines.h
5d2f8542dbd85a819207cf9201d5c104d1f45799 - optee/optee_os/lib/libutee/include/arm64_user_sysreg.h
4bfb3666782f62ba34d4645501617d1f4b424a98 - optee/optee_os/lib/libutee/include/riscv_user_sysreg.h
5a4c5c4386df019b937e53bdfca5e05bf5f10921 - optee/optee_os/lib/libutee/include/pta_invoke_tests.h
24acf5f9664ccd81af1147a5e2f875e5a303d97a - optee/optee_os/lib/libutee/include/pta_system.h
8ddaf3ec29e785a63a8b8ba266c13abdce68c125 - optee/optee_os/lib/libutee/include/elf32.h
7812d9a6cf27c9c8cb718a2a8824323576ccaf38 - optee/optee_os/lib/libutee/include/tee_api_compat.h
0f06e417dc0b4434790db823616a67697a157404 - optee/optee_os/lib/libutee/include/__tee_udpsocket_defines.h
dfe89d4404a213f5751887db149a30135cd07f9a - optee/optee_os/lib/libutee/include/pta_scp03.h
f5bd9efbf15469a7a654c4063b66c9cfa7ce476f - optee/optee_os/lib/libutee/include/pta_stats.h
f4adab9015698b3a5ad156216c44340a86567794 - optee/optee_os/lib/libutee/include/link.h
5e08d24c95ed9a2dbbcf69ef3896898ad97abc8a - optee/optee_os/lib/libutee/include/tee_internal_api_extensions.h
9a9e2018f6c94451408a11cb0c0be264353a3c7f - optee/optee_os/lib/libutee/include/pta_imx_dek_blob.h
ed871d9884b5e4c5c7801d8dfc5f77f30d79d4ec - optee/optee_os/lib/libutee/include/tee_tcpsocket.h
41b79406ff05bc4d3528fca688813e7f88e7d135 - optee/optee_os/lib/libutee/include/tee_isocket.h
1ee95d67db99aa4b7dab212672290e1dcf51e1e6 - optee/optee_os/lib/libutee/include/tee_api_types.h
16a82e5d6e02952d5d445df9b95c3d540e9aaa4b - optee/optee_os/lib/libutee/include/utee_defines.h
0914ffb8eea917ca32ddfd5e9d1e07b08242a132 - optee/optee_os/lib/libutee/include/elf64.h
fd26dac1d8ff0a59b77021c57b346cf0d9767c1f - optee/optee_os/lib/libutee/include/pta_widevine.h
d84b15deba3ac3edfa192902098d7b012e19893c - optee/optee_os/lib/libutee/include/k3/otp_keywriting_ta.h
69389cffd2f2392d520b42fb8a877d88184eb7ce - optee/optee_os/lib/libutils/isoc/fputc.c
3c0076665f570bb3894f7975c7af19546b24b949 - optee/optee_os/lib/libutils/isoc/stack_check.c
adf5b4c7851eccb3ab23eaa51e2c67aaea646dba - optee/optee_os/lib/libutils/isoc/ispunct.c
44884a714f6031d8c9899eda446ab6bd902d63bc - optee/optee_os/lib/libutils/isoc/bget.doc
3871de5c02c34257cb8c03aea71c406eca1389eb - optee/optee_os/lib/libutils/isoc/isupper.c
3072e334c9965c360ee485346541f37b1cade0ce - optee/optee_os/lib/libutils/isoc/strndup.c
9bef02b228d5d11a675a74e974644af7f91dc6ec - optee/optee_os/lib/libutils/isoc/iscntrl.c
b2a87efad81c7fc35f3f17a1507b650945a64089 - optee/optee_os/lib/libutils/isoc/fputs.c
486e4ec67949ba32eb52d521355b28c032ea31d4 - optee/optee_os/lib/libutils/isoc/fp.c
a426f426e3093d41ca84adcdf9eefd3d37354379 - optee/optee_os/lib/libutils/isoc/isspace.c
3849e364a583d8e2a6b06c73b88cbff340651414 - optee/optee_os/lib/libutils/isoc/isdigit.c
fbbd10cc345ddfe50e1ca5ec8a2e936b5cfe396a - optee/optee_os/lib/libutils/isoc/toupper.c
15d9b02b2f680e631dc3cb4acb612c5051534577 - optee/optee_os/lib/libutils/isoc/snprintf.c
e50bee77ddab437d58aec0c7d06ad8e70066d752 - optee/optee_os/lib/libutils/isoc/isgraph.c
f3a4dd8bf719bba595428ad39e580b4bdb83c0f2 - optee/optee_os/lib/libutils/isoc/isprint.c
05dba8367bdb83c45ecf37dc4146c37431fb7b40 - optee/optee_os/lib/libutils/isoc/bget_malloc.c
aae0aea5aeb4c700916f3a0cb796958a066f2033 - optee/optee_os/lib/libutils/isoc/islower.c
07859d16a6f156a7b7d53976c3ea35d8c181c050 - optee/optee_os/lib/libutils/isoc/strdup.c
bdba22e240af00ccb765dec28ab938c5e3619bd3 - optee/optee_os/lib/libutils/isoc/isalpha.c
465dccda5f6216b5156acdf8d97692de7a6bc618 - optee/optee_os/lib/libutils/isoc/tolower.c
66446d12deb5b2f6768b0037c5cd7f6bda49c01a - optee/optee_os/lib/libutils/isoc/fwrite.c
afbd6bbf47f8aceef9ce91f60a65246aa8579e52 - optee/optee_os/lib/libutils/isoc/write.c
29a7857f6999a06d58d700ca9bd712c157595adc - optee/optee_os/lib/libutils/isoc/isxdigit.c
fd0766e5127d24a75662d988de4c18f5686b3020 - optee/optee_os/lib/libutils/isoc/isalnum.c
08ed68e1c3fcaca243143f636c99d7b1c7c325bf - optee/optee_os/lib/libutils/isoc/sprintf.c
cc419cf9b3049ca5a067f8efc8b87fb21d16cc17 - optee/optee_os/lib/libutils/isoc/bget.h
d7303541082db306fa6b0447bd5aca62f4cb8169 - optee/optee_os/lib/libutils/isoc/bget.c
bd92a4e902b8f071cb08e11be594c2cc03b13e0b - optee/optee_os/lib/libutils/isoc/qsort.c
013f93c8f430036a391ce8954024b19664a7bfda - optee/optee_os/lib/libutils/isoc/arch/riscv/setjmp_rv.S
dbc715c45b8998c5276e4a7f3dfc71bd81a03947 - optee/optee_os/lib/libutils/isoc/arch/arm/setjmp_a64.S
24bfedc4ffd1c78df045ab1c725bd811b0531bee - optee/optee_os/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S
30211cfa366caf873a7801a7ac8e5828d0518b42 - optee/optee_os/lib/libutils/isoc/arch/arm/setjmp_a32.S
99b85b897d6a461c3fa3c1f9bd54fb771c45ae5c - optee/optee_os/lib/libutils/isoc/arch/arm/arm32_aeabi_softfloat.c
6a325e1881f32b8ca7c74367132e75f9318aff08 - optee/optee_os/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod.c
0519b9fc5474ccc5a5e50b508e05aa1d81b33c3b - optee/optee_os/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod.c
4d6df8e998067ae07c67580b5f7f261238c7cdb6 - optee/optee_os/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S
0f25fedd6c6f397a39b1254cce305242fe230e0b - optee/optee_os/lib/libutils/isoc/arch/arm/arm32_aeabi_shift.c
eea63204ff2fd371e116939e14a504bd9d17de4c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/README.html
6cbdecb56028446ec09651ef96ade55402b23a2d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Win64-MinGW-w64/Makefile
39cb04a350a785c8fb1feeb91759b428750191ae - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Win64-MinGW-w64/platform.h
140c840a66dc59f8b8460c7e18349faba5989be1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Win32-SSE2-MinGW/Makefile
39cb04a350a785c8fb1feeb91759b428750191ae - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Win32-SSE2-MinGW/platform.h
6be19d4409b8a6cafc0be14b9b5ffdf052c7b25b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Win32-MinGW/Makefile
39cb04a350a785c8fb1feeb91759b428750191ae - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Win32-MinGW/platform.h
19237050b884871548365d61622e85253f30ffd1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/template-not-FAST_INT64/Makefile
18484ed24a14a759985a39574bf4d1c56cfe1939 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/template-not-FAST_INT64/platform.h
6be19d4409b8a6cafc0be14b9b5ffdf052c7b25b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Linux-386-GCC/Makefile
39cb04a350a785c8fb1feeb91759b428750191ae - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Linux-386-GCC/platform.h
140c840a66dc59f8b8460c7e18349faba5989be1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Linux-386-SSE2-GCC/Makefile
39cb04a350a785c8fb1feeb91759b428750191ae - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Linux-386-SSE2-GCC/platform.h
2b66ebd06a1b0c7e7626aceab2192011d72a70ab - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Linux-x86_64-GCC/Makefile
39cb04a350a785c8fb1feeb91759b428750191ae - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/Linux-x86_64-GCC/platform.h
fc40163df60fca883cf8105128b0e2044b4e5c95 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/template-FAST_INT64/Makefile
18484ed24a14a759985a39574bf4d1c56cfe1939 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/build/template-FAST_INT64/platform.h
2e201e03147cc253f93e31812b6cc1fa19c54acc - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftLeft128.c
1a1af8af29ddb0214656df304b31583e97bbe044 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_le_quiet.c
2a8c469188ac72f1647a4e23121d6baab2f46881 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_i64_r_minMag.c
b390f4671e459aa98a5e6eba67989a524df502c6 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normRoundPackToF128.c
ed1a42257f7a11ddfb2896bb3db8fa6b6b799910 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_add.c
cc9936a7e89313dabf987a759166c6b627c5697f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i32_to_f128M.c
5aa2d29c4f2ecefdd83adab4927c2dba794a0a43 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_f128.c
04822aab5f0c58ebdfca756670ddbddf4524258b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_add.c
a44f15f379846d39821c025d6b7afe2f94cb4411 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_sqrt.c
c62a95ceba02a10b8f43ebf0b1621e6a814f07ad - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackToF128.c
321d4491ee122d9ff20f50a5fd4708eec3a9bbc4 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addCarryM.c
67a5f98ae9f74d18b7c83f145618185127a93260 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftRightJam128Extra.c
c0e3f7568f5ce015eb6724ca13dcdebf3846138f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_i32.c
23659a34fd66f6a163767159d9191aece60e9833 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_f64.c
b8189771723e965a9e94712bfa8135b04f844af1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackMToI64.c
3f17bb81a05b30c928c6f3dcbd9d6c33f6dd808b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_eq.c
039cc691a2609fb90724786e7ed7be17b006803f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_i32_r_minMag.c
74978af5148ccce4ca51465a934e52d8ff03fb9a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i32_to_f32.c
ddf3732777273f55557aa33c85aaea98c3017a0d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackToExtF80.c
c3d4d8448c3e622688342aa49d892b84716125a5 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_eq128.c
bf60482d7a8c7573451dd9d358a4f59882b4ecd8 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_sub.c
e0f5d8c33a9db5f50d0fc16b09808a48a8b052b5 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mul128MTo256M.c
62e6926f729011d5c3aa3af610ce0b916b919eb4 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_rem.c
0fb28e0101aaab0bd33ae51a05e4b522cea887b3 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_ui64.c
25066beb2f05f436d718c8073ec11ad550f53ef1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mulAddF64.c
1fb366479cad4034726000f4f22cdbcdcb95a4c0 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_roundToInt.c
c87f6f4eb78569c01e3fd0c6caed99232b37a378 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i32_to_extF80.c
f81c603cb90e956ee8dde34149ac6bd684d4c70a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_lt_quiet.c
2fc25c51a836eb30d5a0215659d5fd8b4dbda2e8 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_lt.c
1d4036336aa49d6961f510e234caf45cba50d995 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_ui64_r_minMag.c
2af1a8917871bcc8c0560e709aa28418d004c97e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_i64_r_minMag.c
d64953149b1077f8e6d0848e2fd5506136e6f2d6 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_add.c
71d3ef74fe02e7fe6891e4db41241c5b2e615643 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_extF80M.c
4189613b8730aaff62a01f6254b071b9fd3c8cb6 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_f32.c
a091e47127bd1311d2cd2b78353ee99ddfc54100 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftLeftM.c
fb72828cc90ce8ac0bb436552fbd39bee0f11d35 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i64_to_f128M.c
7fbcbd3346af638125a977564bb94e3a4112db4c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_subMagsF64.c
73e3351f07e2c7c7d591555895c25042a56c82fd - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_le.c
28ed562132fa508b794485f84e37ffebf0f45c03 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui64_to_f128M.c
e5f8702f5072f781a5b4ef72c7ec4db154d75965 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_invalidF128M.c
d11f89d0268036c5e2190b2001b08b46df5a1496 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_mul.c
3e0d54c15411c2c997b29fa7132f305ba0986d0c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_ui64_r_minMag.c
a04e210c7ba96d0c982f31acdc218a4a63b5326d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_div.c
cc614514257c6b0a721ebfbf2f2eb22e764e75e4 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftRightM.c
39e684d513bd8e1bc18146fe5b6b41ca6abfb889 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_ui64_r_minMag.c
993bf55183ee975278a5e4c34e658f6f7bd3702e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_sub.c
5f3d886dc9c8533c8093c13f3b4242c66ba17e5a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_ui32_r_minMag.c
4e4a329eebd8c7675a57c1b06f75ff4ac326b2e1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_tryPropagateNaNExtF80M.c
f02ad3fb3c3e82d60532e677d475a578ecdf6a1d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addExtF80M.c
d2e10d43888a0af127c80ebb29261c8c424b217e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_f128M.c
7749e3a634b0f7cb154a734be194e52d612310c5 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_sub128.c
3314b591c37fbe10125dd1047b564db3968c7246 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_isSignalingNaN.c
f7e21606f0f60046e7ed31a99520969bf3cff7c5 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_subM.c
61342ccf516ad5891a6f2eb1980d37329501ea4e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_le.c
2355160c0a3526eb32abd1d54fb01083a1fbe18a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_countLeadingZeros32.c
5d919ea71a15f028ff7b85cd73d9543cbe322b06 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normRoundPackMToF128M.c
f815fd87ebd1c160aa9ddb1c232c1de58da01072 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_ui32.c
876085f70200480ee30305fa6463d7c6504e7e77 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftLeftM.c
dd1f8b3669ce1b87360bd05963ce288acfd9f386 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mulAddF128.c
29d181916bd52d0effa525808e4e4564f56b5ed3 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_subMagsF128.c
9b35552cd723623625c63511e14b0e559d678f4f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normExtF80SigM.c
df4f91f5c1ef40d1eaec328ca6b879bf095951a7 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_eq_signaling.c
9611fba0e534169527d66900db62b107e96b8e2a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_roundToInt.c
27897b3a3e2b0f5cfd67ca737c35af7cc360c3cf - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_ui64.c
2211257786a567ae6daea47fa4ddd31c0339d328 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_add256M.c
89e1c8f8d93bed98125ee2c0e27f4ad4b87f5f9e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_ui64.c
0d9fe463bfee7b28f85650d68588f7fb47358282 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_lt_quiet.c
b37dddeca4634f2e81fadc1fe8c9ec9f9643c56c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_ui32.c
e5c280ffda9fadc7cf51f4e49ba880138473c188 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_sqrt.c
b6e5c30069ee1bfdeb29301eb988d9b5ef1e6fd7 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_remStepMBy32.c
672608ed7c1150531f5d4e2b3aa274de76f24f44 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui64_to_extF80.c
04b228218122ee8f024959ef831393289d417e7e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui64_to_extF80M.c
97688d5996165455b0ead5c1973e36b6d096c21f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackMToUI64.c
71874d6de8e801c14005d5b1f68170c3c6c6baba - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_lt_quiet.c
9fbd0b33c76b78481c512902dc4d9a0d67f4f210 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_i32_r_minMag.c
3ad627bba48b5bb63c11c5e86c0081d283f4a13c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normRoundPackToExtF80.c
e0d12d5167bae0c40dc2ee4e8eb79ccb7d7f8709 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackToF32.c
082138b2e89a050296984be3e3d195746735edfa - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackToF64.c
db04e48a5c823e4f060cc56187b01cbb89ee1afc - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_mul.c
03ee79d8d396bc6778c8bd477647f5e7b2035214 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui64_to_f32.c
6de7ad17814ec3532d2cc20927580d8cb52c44de - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mulAddF128M.c
a6ea63bd09a37c67ab0db5c7378603bc343f7c4a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_lt_quiet.c
a4bba6333e9a92cef62ff68ef528240c29173398 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_extF80.c
cddf72a19a53f1cc1e2077dbf7e9269f0ba5cf16 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_rem.c
d7dec92efc7a7503386861fc8a67b770c78d50fd - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_lt_quiet.c
bbb2e442ce63abe6d694eab84ce821e2ec210522 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_lt128.c
b48f6bd306c3509038d6c4d283bc189d517d3b4f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui32_to_f128.c
eed7248a2360c629c3dc0b39a7b019c718c1f8f8 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_roundToInt.c
d594421c568958d475a5939b2bc14c195493768f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_le_quiet.c
c7030401c4589ebe4ca9df47cdf4473be706e9c8 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_div.c
016a9e65ca19c7f5d3561d54a3fcbddfb6a310ee - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftLeft64To96M.c
9fb6f1767a51f28d28e6af39ffaedc9883363298 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_i32_r_minMag.c
2cbd145a4e3465e12bfd47dc4a52fd75c4e0b427 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_i32_r_minMag.c
b28464c7ae4ca7eb7416555259cf21f36e3906ba - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mul64To128M.c
c04c45b92e29225e1d2e3decc3dfc108ae63b093 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_ui32.c
ef40011bbd21ac40df712f0f16dc844ee06aa453 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_add.c
f394231a827adbe842d2249d968ff138ad99c20b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normSubnormalF32Sig.c
9783f22f581b7feca4f86660b538b214dd32b129 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftRightJam256M.c
4042678da076368eb21bb4ded888e17dd2109b55 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui32_to_f64.c
f5755b53bfa3d4ada8ed3be7b2e264ca31c83e9b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_sqrt.c
0020d431a9fe3314ba42c1dafe946fbd2ef7e606 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui32_to_f32.c
f1663c2acfcb26909b23e18b18c43a4aecee1908 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i64_to_extF80.c
bc52a98da5add09bb146c15a8cc1e524e1e36989 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui64_to_f128.c
73f1f3cdf7a70d4d02ddd5d73f8198482d373296 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui32_to_f128M.c
47e7b19a3c969e8c6acf899992a2b3dc02ee894f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftRight128.c
6772aca13808c91d5fbc62b23e65a9aba99df8ef - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addF128M.c
84791d4f50e8187197aeca69dbef6a333d167fc1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_f32.c
5e4ff4edf1d3a006c61ca3098f1919088d42dd66 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_isSignalingNaN.c
289aeaf52ea847d12eab9ab91e1b080ae5cc4774 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_mulAdd.c
4dbe7ada2eae098c62ec673be2cb2452390c0a78 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_f128.c
467dcd8f83fcddef3d3402ebcc2c08822c68621e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_compare128M.c
68c9d3e3654c5107bd58185d3632d6e8c4b04687 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_approxRecip32_1.c
6a29d35180197bb865f52b54695f07430e3e06db - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_mul.c
c32eb171afa353fe6d96c9fcc1b6bc9116ba3237 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_sub.c
1d30d31c5765c77e617b9969b778019b60c4b1bd - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_i64.c
3166b1b25c791f37186ac5ace33c6369720cd72d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_f32.c
20b550200dc22a4995a52f7bb20f8177c851d08b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_le_quiet.c
8c11bd928370bc41568ae3c44ed648224268134b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackMToExtF80M.c
622a359dab67eedd5448775dc3204d4f48039034 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_i64.c
757e08593f768490c92840e212583a4ec63dbbf9 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normRoundPackToF64.c
e6b71c319835a3d037818d3ca0d1468b2dd3c325 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_ui64.c
bbe0db256dda63763f1a09d9af66cfbfa51c69f6 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_le.c
3e4e1cde87c7d37013c4665489e22a5e653b9e75 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_i32_r_minMag.c
0db18e1a005858944af9123bb29580ebac102bac - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_i64_r_minMag.c
0f29c869a8f46f705f24531b2826deabe579032f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i64_to_extF80M.c
809dcde66eb6eff4e7af6a71ab240cdae5c11097 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftRightJam128Extra.c
3155ae7f402b23659c4ff5e89bd77c5599ee23e0 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackToI32.c
513a918766d59060a56eb14f936404c5a807d54d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_f64.c
b33f24777a60c2b658a6463c17c19f932c67cefe - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_add128.c
6eb4a2a36946f25f5528e564a0391b709127224b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_eq.c
e14e58254cc0fe0ce4710d073c7a4c41961df960 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_mulAdd.c
644f4fb69b6d67725a586cb47755d4472694dc54 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_sqrt.c
188a513a8b2102d97b435bddcaa70a13422fd36b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_ui32_r_minMag.c
64b0e4b0e7bb5d8073e937068421026aa213bb57 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_isSignalingNaN.c
fb78669ac8ebe25845bdac20fd3007ac6ed6e254 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_sqrt.c
49a30ac92f2823400a43a7b0789def54eac5d67e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_mul.c
39eaa261c0332f55f617941b8bf51f30dfa288bb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i64_to_f128.c
ea9e18329087b88e680a9b0e1dc3f73d78ffc97b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normSubnormalF128SigM.c
20cc97dd02d91a85b8d58ab1373f550058a5a4ce - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_f32.c
f3c0c6bf5032a3f329e5637aa49336a98dc365f1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_rem.c
d5160582645bf346bf920e38f896596319da591b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_eq.c
54fed28ecc0bb163f71b7d5f47c960063b16f0f0 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_i32.c
c9372c8b60f9e67962d30179a0595294d74953a2 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_mulAdd.c
60cccf04237a9a059b26075b3bc4742662905190 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_f64.c
6504b9481457cfd6e39a69e7066fe09ffbbdb258 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_div.c
acd11d468d7a20b0e4381a8b7168e186b7d49d4b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_le.c
60a64ea74aeaa87b706af4f0c880e551d68ee8f6 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addMagsF32.c
6b7125daba8bb60ca3e2db6c38bf5cbc5df906ea - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackToUI32.c
3fef81240caee61991a4a7c3ffa8e6d6e2e8066b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_sub.c
5d1495da9f0d75aa3f5fa75b43c5edbc95dc1ae9 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i64_to_f64.c
7bed7a39e5684ce23986346806ce19c0a2d198a4 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_i32.c
b4f539877d9b40f21099ed92d2e18a9f57f28566 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_eq.c
623ab3fb8b679ac1b86f7c366eb192d128358f16 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftRightJam128.c
a473fd92baf36ab51a725b665f964a7a082f4eb3 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_le_quiet.c
4cc27ddd980713ad95fd12a90c077df01999893f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_i32.c
5158c6ca5efcc7ee5067415f6df5988c4b3645ed - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftRightJam32.c
25ad3859febf3093e91de0392cb0d7c98d3e9dcd - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_ui32.c
a8cd508101d5d02ae58933c2b91b0638fe9ce308 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui32_to_extF80M.c
7a1740bacdd6fbf37b3e9ad6b304b772722041c2 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i32_to_extF80M.c
a5d1d8aa31fb5646e96d1f889729bd9eb7867e9a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_countLeadingZeros64.c
ea2befd81aa697654bc1baf2a7da10508ae8b9ce - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_roundToInt.c
6ee82c2c62f3442cc1c0b2e9ef6b0b85da32cf3c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_lt.c
ff0afa5079cd15008d3d3386ac73d3b62a0c4d79 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_negXM.c
73622cf9aea053c968f1922c8a206030cab025a9 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i32_to_f128.c
6c279773b785568a5567bfe33f5a6082265b9efb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_eq.c
3c7d728ab8fa5d0e345c67d53f5335d672d8fd5a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_i32.c
fd6492962962b16aeabef92ff9542da4aae05f26 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackToUI64.c
4cc44bf1f32b533112fceaf74f2116052c251f45 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_lt.c
28af646437af4de6033b2176542a5d805636323e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftRightJam64.c
6ba3f71a3a306c79f58d469163b33f810aa8faa8 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftNormSigF128M.c
ebd71c72d17dd55dc010988fcc223aeb9679ee6f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_mul.c
5bddd155904f96e1af61acc11b87973856d66810 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_sub.c
3088c598cdb456e47e280fd0bc369fb0d5e6d2f9 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_i64_r_minMag.c
de37f2fef538ee89236273ac956585b2d58a15ab - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mul64ByShifted32To128.c
9cd0d76126fdd8add379caa20c766668256efb6e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_eq_signaling.c
a91c926882ae26c3a59dc8885fabc6e86ce9465e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftRightJamM.c
6e91b9e38753aa8aa2094b6b40b596796bd11b3d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_subMagsExtF80.c
62cbafb0d4719707254e3021383d31fd007b3971 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_invalidExtF80M.c
e550bcef98e4bc5091eac085dd5972d58c2bab09 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mul128To256M.c
61fb9da8313a688f608a43d8aa36ac9861c74c75 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addMagsF128.c
920cf94c441178943a1442a168fb4649cfe755d2 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normSubnormalF128Sig.c
019af317356453e7119ac20be4c98c0a1c83f8af - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackToI64.c
d0375fd187a2ec8138e6a29c04afb951176c31bb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftRightJam64Extra.c
a56defbdfcb63c086c83b3754d2848c2d67b561c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftRightJamM.c
57500b9bade8439c0c3f06cbb999f6ba13952ad9 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i32_to_f64.c
6f034e453e9efaa8477ac48fed5ff48d6320f99a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_isNaNF128M.c
260bca4ccf486c140c36950f988253e30be3f9e2 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_ui64_r_minMag.c
5547439bc882d6cb17257578b63ed5dea9e85ad3 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_i32_r_minMag.c
97a45958e5ea33d1fed598272e527b7f72a9d8ee - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shiftRightM.c
136777686e7e2c7b3decdc75d9cb9e0f802b4dec - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_ui32_r_minMag.c
7edbff34e15aeda6b14e5e01fa34a2e4ec230d88 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_countLeadingZeros8.c
b971ed0265436f05a8f8f5eb8653de23e49747f1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/i64_to_f32.c
5adc627cc2a4ed39719943fac8c29517f3d39bbe - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_f32.c
440066ddfc6cb2460e07a86d2552d5aa6978ca47 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_compare96M.c
7c39994169fccf5700f2fe944d8b94d912a07723 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_roundToInt.c
5bd19e6fff94dd11976e8f78f6ef8b9af01d33d2 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_div.c
d724729fe9aff2647d82d44cf7c98ef024550f4c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_ui32_r_minMag.c
7233f7a2c75705b0b4173168df45777f969cae96 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_eq_signaling.c
5cd984d2fe4bfa79945c464d200d7b17d205b475 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normRoundPackMToExtF80M.c
0ac05f3c78dd89e1084687237ede90311fc758d6 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normSubnormalF64Sig.c
1a5d352e9bacfa36ecd8ef231155053713acece0 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_mul.c
32ee0bb66ee86e9f4d4f49c23487905e3e09715e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_rem.c
60f8ae03f26507e95f988d859c2a779d957c4efa - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui32_to_extF80.c
9cdcb1720d52c0b09ac2ab14aab047bfe940304a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_ui32_r_minMag.c
f79c163815f902511ac25f8f5a391149043a846b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_f64.c
02501e2df1729d1c331ab6288158859f5302a791 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_ui32.c
bb4b86c5d78b77f1babf89d73c262ab3e47b6832 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_f128.c
e9570bb5907e357489fdf310d629201fb63fe691 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_sub.c
add3de1ad7693fb4a2a5453483938b93b287e275 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normRoundPackToF32.c
dd00b7472e373b2a72b05389fd8c595c9e688831 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_extF80.c
80f53f88a6f924eaf40e9f79955bdfff87f72d14 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_to_i64.c
0fa1c7015b7c39efbe07d739a03f2a83b85745b8 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_compareNonnormExtF80M.c
33dedf42e83eb53f8ce20395143a01a73b412457 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_sub256M.c
70a0a4dddf509479def6ff905d493e6a50c1bacd - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_sqrt.c
bf81966f25644611be0129d9ef8aaf0f5c6da21e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_ui32.c
35820af43505df9a372d4e74e3f0550a3af9a249 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_eq.c
7aeebb299243e2d857eef25300233d709662a1be - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addMagsF64.c
c42aa8ca5eb2a847874b705199b3033ae8fc00ee - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_le.c
495735b890e1bebb53e4e2cef50ffda57a242662 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftRightJam64.c
83db5e18b844bed794c0f1690aa2aa28ed93e4dd - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_ui64.c
c8fa83b76113c38831b0a21b4b6359fe6976b133 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_lt_quiet.c
3d89aeb6e7880b1152564ff98fac17e80a4beab4 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_mulAdd.c
23a84b7f28ce5a2345b3d037ccc8f2707163d262 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_lt.c
06c8f4bcf358da5b2930df117ecc0f2324a59b3f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftRightExtendM.c
359da64e36a5f411cf383e3fd0f83a248a1dd066 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/ui64_to_f64.c
8fd3330c1a032cc7c4a7ad995996169ac7f0805d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_ui64_r_minMag.c
58782db3382eb567580f7105c6c8d88dd1a6fc67 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_i64.c
f06279e2d0e5d4a308a35ce0eae73d18ff2b0ad1 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_ui64_r_minMag.c
e4be027468e7ee598e8835dfe5c58692978be102 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addComplCarryM.c
6ab2cbbff35bbae58c14a90419c2dd153b667063 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addM.c
9c753ee79b20998c7b9c420d50cd9ca84b18a3f4 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_le.c
2d988cd65efb881d8f5103b71c9f6b121121ef6d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_i32.c
c5fd85ea4a5cf0a00edfc6cb66cf20b3e7100062 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_eq_signaling.c
c50d86d027171a9f2481e8f7c1cb4308f1cf1d3a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_to_i64.c
1aff280581ce3e0a033ebdb2257a5095804f4a18 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_isSignalingNaN.c
c425d403c3b3dfaed940888bca06384b967e8e5e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_i64_r_minMag.c
12d0070692fad1189770f55c41aab025bee462a7 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_f128M.c
d688f7a888e0e7b33a166af94044edc80100754e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_le128.c
1843081e5eaa9f77ccd80c3cba04e650ceee756b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mul128By32.c
63a8a8dcae334e46b7fbc7ebc687e8d6c011fb7a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_addMagsExtF80.c
5728e535d2903cca9e9558dddf7a571e606a385e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_div.c
2679177fa989374186316764ed9a90c42e38edd7 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_le_quiet.c
e33d236ac36ab3726429718fa699498e908afb21 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_to_i64_r_minMag.c
0529a095355f150e35063942c7aec7276033842d - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_add.c
d586657c54173f413fa72807b84027e1beeb6234 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_approxRecipSqrt32_1.c
327934b641bc5a6a891fd19aab7b9f0363952a0c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_extF80M.c
641b01960569783533397d0ed1cdbb00695a3578 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_subMagsF32.c
1e172d64c3dbd60e0e9ffcbcc7a0225702f04848 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_roundPackMToF128M.c
14119b8fcb0828e0621f0d1c0b3130721abcf3a8 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mulAddF32.c
fc451ef01165565a1d593b0e2572eb8e37aa72a3 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/softfloat_state.c
0f3d7b35ae34828864a226e8b123484e88b8cd13 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_extF80.c
9a156cc904d7427a794de20f093bdff4a44cc12f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_sub1XM.c
3c754eb220ded3a7e9c82cb01c7ed8adc2144452 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_lt.c
4802d692dda23c6bdb15e682f8895eaa2e02a824 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_lt.c
e6ad1063b924e4b96a1801d49b960b3d8534342e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_rem.c
badda43bf474995d00db78fe6ae6b40268e9f90f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_f64.c
c841c237414b6697fc42f3a261082257cec7dbec - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_add.c
9e7235e0ad3872a7b6f005a0203e63508f11eaab - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128M_eq_signaling.c
d5a7b42551a9289e11b502dcd611101098d47502 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_f128M.c
625d048386528b1c63a19813ace77ab7484e1876 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_tryPropagateNaNF128M.c
0ef83486a7270a31dab5ced482dfaec14b9a5b4f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80_to_ui64.c
dda54df5d890a969ba663a54ceae83c6492d7866 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f128_le_quiet.c
faf4056d360eb6faeccac416f54caa2a1a8bae9a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_i64.c
8a4a364a4b4f144bc47fb5e28144cfe82dd3b585 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_normSubnormalExtF80Sig.c
345b454a7bf01265db26b15ff80f98692e81fc5f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_div.c
684615f62d1f460768c6b9cf951bbe7d82b7aa4e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f64_to_extF80M.c
d3cdaf7ed2016c9f9764a514ec05b2dd6f86fc85 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftRightJam64Extra.c
fab91920cf859d0f22562a98eea05a843806e70e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_to_ui32_r_minMag.c
a05a89d48fe8216f0fa0babd342a60249c72cef2 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_eq_signaling.c
01cd4ad4fff8805cc5bf43533b1576d7e170925b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/extF80M_rem.c
890504face9da670bb9338c6587d893fd632819b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_shortShiftRightJam128.c
7db7c6e3e7ed45f7c7ed16ea6935cc7fdba73da3 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/s_mul64To128.c
a8129c9fa34f996b39adef2e0620dd63b5ab655e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/f32_roundToInt.c
784083a6783d1d5de48e4b5a95ccb43b8103bfff - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_propagateNaNF64UI.c
74a3e6c966c47167bebd7abdfb17797124ee9279 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_propagateNaNF32UI.c
f58e104619733d72884d1de3ce89eedacb671595 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/specialize.h
d8fc85a2746e3c31e70de675027af01735ba105f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_extF80UIToCommonNaN.c
52bc24f91ee7846596274fb2b29654539fd3fa00 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_commonNaNToF128M.c
2c9f36c79b5d80fe13893b8c9b9f9c94273c1c95 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_f32UIToCommonNaN.c
52fee0fd73c94d2e2f5a21a55f082e1963b1569b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_f128MToCommonNaN.c
8c5a81c2b54db7d09ea4a08a43171c7f9ed3cbe7 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_commonNaNToExtF80UI.c
b6b8b672735a45d7c495bf8af1fa94d1c8e6556c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_commonNaNToF128UI.c
7c65ad2301cc6e79aa3392bdb9010a7ce81b0c38 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_f64UIToCommonNaN.c
868cee0046c6b1426f45136804fd662b030f263e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/f128M_isSignalingNaN.c
67e0a5407af29f70e8a1cd10563b7aaec9ccbcdb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_propagateNaNExtF80UI.c
94e7fa32804e73cff91d5bfa140aebbbb55fe6cb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_propagateNaNExtF80M.c
4a66a4eaba41707a706d22a724ff5853260d070c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/extF80M_isSignalingNaN.c
7e3b18d1139373153529a43d88c469da845d393b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_commonNaNToExtF80M.c
70de120b27bf3bf6917bf2a9536aad6fe8536358 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_commonNaNToF64UI.c
7d5189099e205be2e0420013770668fb8b96e133 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_f128UIToCommonNaN.c
35b37030a4086b22b7974082589b33ca07ccc8bb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_commonNaNToF32UI.c
b0822433062f48471e106e268f79f079d1a1cd55 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_propagateNaNF128M.c
7dc9295fddc66cd74761fa03a90c65985b964c08 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/softfloat_raiseFlags.c
302b57e7a9ad056c7936806892309cb4de6ffc96 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_propagateNaNF128UI.c
1c390c99fc7405c9a44b4117383cce7de291c13e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086-SSE/s_extF80MToCommonNaN.c
3b6c666fa3fd1fcdb96504690f34db6740d85b2f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/include/softfloat_types.h
1afdc66c33767a868d162893776bf6d3ba9f1247 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/include/primitiveTypes.h
5ab0e0aaf3ae2f7637cf1c42709cdad267a20850 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/include/softfloat.h
0d0858bee5e0636c53a6f5b4a484f08b979495a9 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/include/primitives.h
8450fc5ca89f94b128b1d1d4608903ffd0de498b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/include/internals.h
93bd291166335a88ca0721d5beaebd9599a2475e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_propagateNaNF64UI.c
5e2ab65ab8c5b830b547afdfac8b72c1a7b193f5 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_propagateNaNF32UI.c
ade8c323e356c3e70af2424ed9e2ca0ccabc68c5 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/specialize.h
d8fc85a2746e3c31e70de675027af01735ba105f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_extF80UIToCommonNaN.c
52bc24f91ee7846596274fb2b29654539fd3fa00 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_commonNaNToF128M.c
2c9f36c79b5d80fe13893b8c9b9f9c94273c1c95 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_f32UIToCommonNaN.c
52fee0fd73c94d2e2f5a21a55f082e1963b1569b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_f128MToCommonNaN.c
8c5a81c2b54db7d09ea4a08a43171c7f9ed3cbe7 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_commonNaNToExtF80UI.c
b6b8b672735a45d7c495bf8af1fa94d1c8e6556c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_commonNaNToF128UI.c
7c65ad2301cc6e79aa3392bdb9010a7ce81b0c38 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_f64UIToCommonNaN.c
868cee0046c6b1426f45136804fd662b030f263e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/f128M_isSignalingNaN.c
67e0a5407af29f70e8a1cd10563b7aaec9ccbcdb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_propagateNaNExtF80UI.c
94e7fa32804e73cff91d5bfa140aebbbb55fe6cb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_propagateNaNExtF80M.c
4a66a4eaba41707a706d22a724ff5853260d070c - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/extF80M_isSignalingNaN.c
7e3b18d1139373153529a43d88c469da845d393b - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_commonNaNToExtF80M.c
70de120b27bf3bf6917bf2a9536aad6fe8536358 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_commonNaNToF64UI.c
7d5189099e205be2e0420013770668fb8b96e133 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_f128UIToCommonNaN.c
35b37030a4086b22b7974082589b33ca07ccc8bb - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_commonNaNToF32UI.c
3b12a5a00c5ee315f9665165cc0160e7e4e7b946 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_propagateNaNF128M.c
7dc9295fddc66cd74761fa03a90c65985b964c08 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/softfloat_raiseFlags.c
cc1a5d99c9f6833e79108373c21162c7fb65a742 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_propagateNaNF128UI.c
1c390c99fc7405c9a44b4117383cce7de291c13e - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/source/8086/s_extF80MToCommonNaN.c
75e9aa350d3aae45b151a9bbe2f6e70ccad11c7f - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/doc/SoftFloat.html
90d2bc9a9afc3396f0a2271c1d79a76287c2516a - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/doc/SoftFloat-history.html
9170d3167dcd72c685ebc6ca6250eee2eefd0c45 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/doc/SoftFloat-source.html
cbaa68e47415bdb2b68ad13c2037e03cd231fd60 - optee/optee_os/lib/libutils/isoc/arch/arm/softfloat/arm32_include/platform.h
5fbd70f4fe7a023e3b9c3c6997b0cc042bec58d8 - optee/optee_os/lib/libutils/isoc/include/inttypes.h
b61508c5b2e6fa2f5e16faf66b4ea52d273b2767 - optee/optee_os/lib/libutils/isoc/include/assert.h
b704c2144f4058cc83eff91c732a965487af7f2f - optee/optee_os/lib/libutils/isoc/include/signal.h
02ba50f154062835ecf8fade7d805e51d01428fc - optee/optee_os/lib/libutils/isoc/include/malloc.h
7146a287e1507a73b42aa6ae46d72881a5b318a8 - optee/optee_os/lib/libutils/isoc/include/stdlib.h
44f78c63d935ad93ce68039331f214dcc699f6e1 - optee/optee_os/lib/libutils/isoc/include/stdint.h
1b5da4e5962171c39a2b4762a169e12e50dd6641 - optee/optee_os/lib/libutils/isoc/include/stdio.h
eb700f736fea47a51c03069d099ff492d566f45b - optee/optee_os/lib/libutils/isoc/include/time.h
e83da5f07c33bc84bb291affe6480214bb4e6f9a - optee/optee_os/lib/libutils/isoc/include/ctype.h
e7fdba9acf2bc6ddc6d25cd852eeff72855d143d - optee/optee_os/lib/libutils/isoc/include/limits.h
9edc066dbedabb03c6479c2dfc962125c09207b5 - optee/optee_os/lib/libutils/isoc/include/memory.h
d107150611ad4db054a4c134a03cb4072e5b978f - optee/optee_os/lib/libutils/isoc/include/strings.h
f1ba2ffbb8b80c3d2c8baf5ad09f2d1883ccc95e - optee/optee_os/lib/libutils/isoc/include/wchar.h
15ec9c6af06bd04877ce230bac8bfa3ce26a23e9 - optee/optee_os/lib/libutils/isoc/include/unistd.h
c6501a452dfc56db99d454ab6785417f3fd2049c - optee/optee_os/lib/libutils/isoc/include/setjmp.h
8629e94b3bc7a9b628d559492f6859405e065233 - optee/optee_os/lib/libutils/isoc/include/string.h
e646420d5133d287b223a251d711caef5077d8aa - optee/optee_os/lib/libutils/isoc/include/sys/cdefs.h
04b7e694a49520ea266a7acc30e79a4d5d015854 - optee/optee_os/lib/libutils/isoc/include/sys/fcntl.h
ea09b9213223627399f059ff48bc083ac9652a96 - optee/optee_os/lib/libutils/isoc/include/sys/queue.h
f39fd14f91c4f1b1a6c2636a7abfaa0cad378a37 - optee/optee_os/lib/libutils/isoc/include/sys/types.h
5a9624425bf1040b1f7f44f5391b07f0f54eb969 - optee/optee_os/lib/libutils/isoc/newlib/strstr.c
5f94025cb7d772e0b69eb04008405feb9ef86a0c - optee/optee_os/lib/libutils/isoc/newlib/strlen.c
5c1c0c4053502cfc23acb11a61aef64e6a9f7383 - optee/optee_os/lib/libutils/isoc/newlib/strcpy.c
afd073d96ce316d15f065f34576779bf31b11b4a - optee/optee_os/lib/libutils/isoc/newlib/strtok_r.c
ffc219c3a21638f7e62d3b658ee6c4a3dad8e628 - optee/optee_os/lib/libutils/isoc/newlib/strncmp.c
108514868e87a312a98be4104fdfa5f0b689a956 - optee/optee_os/lib/libutils/isoc/newlib/memcmp.c
5604c3647615806cbfd5068d684f1127272226c0 - optee/optee_os/lib/libutils/isoc/newlib/str-two-way.h
ca1b181d9d51ccd041f7a54adb83afacde6591b7 - optee/optee_os/lib/libutils/isoc/newlib/bcmp.c
b1d845daf20cc5443488f37fac3559c721bcfb45 - optee/optee_os/lib/libutils/isoc/newlib/memcpy.c
4536b43b4035e668869db96685c3e398be901a40 - optee/optee_os/lib/libutils/isoc/newlib/strtoul.c
0800e9eb716a2e65ba7a95b2fbd873749abb41ec - optee/optee_os/lib/libutils/isoc/newlib/strcmp.c
6054fbc2e1ca96c1f5291cab671fc90d7ce00fa5 - optee/optee_os/lib/libutils/isoc/newlib/memchr.c
f4be3b2ac744128b112751c273f2850ec6277a45 - optee/optee_os/lib/libutils/isoc/newlib/abs.c
ad3617f14072481d06acd4c17903f9eaf3301223 - optee/optee_os/lib/libutils/isoc/newlib/memmove.c
811f31f56bd454989b15ad39bd9201411a4971f2 - optee/optee_os/lib/libutils/isoc/newlib/memset.c
e0298efe1346c7206253a9f0f174acc71479f134 - optee/optee_os/lib/libutils/isoc/newlib/strchr.c
3eaef3643d7bc2740a34226b2b66dca0fd662558 - optee/optee_os/lib/libutils/isoc/newlib/strrchr.c
2424e0252f73a9e6fea420e9f7f2967538d56444 - optee/optee_os/lib/libutils/isoc/newlib/_ansi.h
c62c5a7633896186fdfc21ab5992c569d0b93d28 - optee/optee_os/lib/libutils/isoc/newlib/strnlen.c
f78df3e9bb90074ab9ac143f5e62bed8c2557796 - optee/optee_os/lib/libutils/isoc/newlib/strncpy.c
439b62fb2a2358f1c75a5f72d3d08d40aca4cd6a - optee/optee_os/lib/libutils/ext/qsort_helpers.c
89ebb1873af1f851bc8fc67e813f81eb6a676a2c - optee/optee_os/lib/libutils/ext/consttime_memcmp.c
ce50432f4d5515d5ce9fb398b5098b9c0ec12c38 - optee/optee_os/lib/libutils/ext/pthread_stubs.c
6bff861d7ee6d2d199bf849da8673bc2f7644a81 - optee/optee_os/lib/libutils/ext/mempool.c
47c2201804ad35107c694730f37c017ee288ee01 - optee/optee_os/lib/libutils/ext/fault_mitigation.c
eeaf7cbef43d983ce60db9ac8731767dc6bbf22b - optee/optee_os/lib/libutils/ext/nex_strdup.c
53a0650d0e1a37aefbb511bb3f422ca162180c36 - optee/optee_os/lib/libutils/ext/strlcpy.c
bfd38201847d3542805eb1879dbda5f462680c88 - optee/optee_os/lib/libutils/ext/array.c
56fbc33f9e571baede80715fd78816b85e765a79 - optee/optee_os/lib/libutils/ext/base64.c
ffad6974fa755ea998a6801173ebf69647d8e204 - optee/optee_os/lib/libutils/ext/memzero_explicit.c
20e3e9705f80898b933d3708b6c1b4133ffa949b - optee/optee_os/lib/libutils/ext/trace.c
8d6b22214c57ad89d47fbf50c9d2a28ec11c2951 - optee/optee_os/lib/libutils/ext/snprintk.c
7a501727fe2d0e89ac822ec9ecfc06ac9387eb69 - optee/optee_os/lib/libutils/ext/strlcat.c
ece984c44b615c403bcea03f8d97fec4569856f1 - optee/optee_os/lib/libutils/ext/arch/riscv/atomic_rv.S
9744e9d7926714ea8ced25857ff8db9a0b12cff5 - optee/optee_os/lib/libutils/ext/arch/riscv/mcount_rv.S
fcd9b20bfb493ed1ef33987681cef3c072605105 - optee/optee_os/lib/libutils/ext/arch/arm/mcount_a32.S
3c9419abbdb07dffd661757f2b8acbc0c49e971b - optee/optee_os/lib/libutils/ext/arch/arm/memtag.c
7249fff01b1ca0cec36cca67bec4a1395ee4224f - optee/optee_os/lib/libutils/ext/arch/arm/atomic_a32.S
527c3d07f4d854cb770425c1d1bb43d87d25a622 - optee/optee_os/lib/libutils/ext/arch/arm/aeabi_unwind.c
c76559d831152142d5a0612b9a2ba8988ead0414 - optee/optee_os/lib/libutils/ext/arch/arm/auxval.c
adf6c7b011707e03c48439a6a7de0b07e91d5e59 - optee/optee_os/lib/libutils/ext/arch/arm/mcount_a64.S
ff0eea4f25438d8836034710afb20c6ff62d9805 - optee/optee_os/lib/libutils/ext/arch/arm/atomic_a64.S
f90207f7fdb89d514377d1983b922409284534c7 - optee/optee_os/lib/libutils/ext/include/base64.h
e0f599207b28b33bf06b5e1c02b650d0e1a2d7c5 - optee/optee_os/lib/libutils/ext/include/trace_levels.h
0e9c096815b105d29d59a8cfadaaeb5e7a3b7998 - optee/optee_os/lib/libutils/ext/include/arm64_bti.S
5d1943eba944ecd7ffb277b76460ab47a379f73f - optee/optee_os/lib/libutils/ext/include/memtag.h
6bac18be7338c88bbc8a94f0e5f983afb750ec95 - optee/optee_os/lib/libutils/ext/include/util.h
2896ec82cb868e5f5d1b8338aba45f9490c96419 - optee/optee_os/lib/libutils/ext/include/asm.S
8aef0ea1cd59799ea3f9b89eb12d8ad5f9482b68 - optee/optee_os/lib/libutils/ext/include/speculation_barrier.h
1997918bfc711680cdd916da265f99a258a7b826 - optee/optee_os/lib/libutils/ext/include/string_ext.h
af2b6927c92cd80ffae87a12bf87645f43748dd8 - optee/optee_os/lib/libutils/ext/include/atomic.h
70ac170a6c79b30435a4b8fef9cf7e98ea61e9a9 - optee/optee_os/lib/libutils/ext/include/printk.h
6d52c01d26b5f87893d70ca173d1fd712d53f4a5 - optee/optee_os/lib/libutils/ext/include/confine_array_index.h
1439d0e682d301147076a8f0ef733acb0d21d451 - optee/optee_os/lib/libutils/ext/include/riscv.S
caef86fc6055f0c19ce5e5429996c4a422645a3b - optee/optee_os/lib/libutils/ext/include/trace.h
22377e0c4623773e5944e58bd0e59980fe10c722 - optee/optee_os/lib/libutils/ext/include/fault_mitigation.h
d0fd7d83680885f9a71f56435b92b078f79e14df - optee/optee_os/lib/libutils/ext/include/mempool.h
296cc431c36cb1c06ef0965e569bb8f0028aaa86 - optee/optee_os/lib/libutils/ext/include/bitstring.h
ce8e8d219a06d536dfb044bd004db98fd595d438 - optee/optee_os/lib/libutils/ext/include/stdlib_ext.h
0c4e420d80821bc2e9d1c85cb5488cdba9b2dfb0 - optee/optee_os/lib/libutils/ext/include/config.h
a1443e431ca26782a28bb5a7c2c881961f224559 - optee/optee_os/lib/libutils/ext/include/compiler.h
c9dbc0f38dcb3735e5caf69976f874bfdf009d82 - optee/optee_os/lib/libutils/ext/include/types_ext.h
cb974d6f302fc21a6380a7a8d4e86e824279e6f5 - optee/optee_os/lib/libutils/ext/ftrace/ftrace.c
d252604ab38468dc215d8fff7e20420e53adb60d - optee/optee_os/lib/libutils/ext/ftrace/ftrace.h
76a908634bfe89773fd70c57fd77d712c4bc89ee - optee/optee_os/scripts/sign_encrypt.py
57eab194acd3e07adfaba6438695da8c79d0d289 - optee/optee_os/scripts/ts_bin_to_c.py
570bf1d2a225e0124496bc57c287ff0991fd023a - optee/optee_os/scripts/gen_stmm_hex.py
ab4324da2d6fb92edbcaa95bc23911ed63e4514d - optee/optee_os/scripts/arm32_sysreg.py
08b1957d02a5f8fb853138fa4b3f2b8b04f8d847 - optee/optee_os/scripts/update_changelog.py
d302da149f2f0d0b11b9c365bf3add51a131b8a9 - optee/optee_os/scripts/gen_ldelf_hex.py
edc01ccf3e16f1a4bdb1908f57a4722d3bfa203a - optee/optee_os/scripts/checkpatch.sh
e13049cc7ecc4774a0b40b42d6a72617f540db8d - optee/optee_os/scripts/bin_to_c.py
bd6f1fe3cc1334b262bfbcf3d1b4b2f98bda0d3d - optee/optee_os/scripts/checkpatch_inc.sh
ffaf1fbbaa6d01cecaeae7d8ce75f8315240228d - optee/optee_os/scripts/pem_to_pub_c.py
31f300bb6c5a381759d5e2a3b54e42039be66dd5 - optee/optee_os/scripts/sign_helper_kms.py
c92fcf555467abe77b88cea98e805eaa6eca5462 - optee/optee_os/scripts/gen_ld_sects.py
b1241b7d0c39f88fb4382637396901002f682b69 - optee/optee_os/scripts/gen_tee_bin.py
6d38439ab83fa8f0869ae12e569bbd89074aea8b - optee/optee_os/scripts/symbolize.py
24ab5b3587dac3d8b99136338a79a57b38027da9 - optee/optee_os/scripts/mem_usage.py
d3448d6bc77ecdf748a5a096abce9a349392d81b - optee/optee_os/scripts/ftrace_format.py
8cc37c9fd70add9e21b14293bb97a79b3fd397e3 - optee/optee_os/scripts/gen_compile_commands.py
f8bce245ce0b6610d39e02928e25307a5b6cc818 - optee/optee_os/scripts/print_tee_hash.py
718761702d374076e980d8684a032e9543d4e0e4 - optee/optee_os/scripts/sign_rproc_fw.py
e6692bdad99dbf466f146fe7169981ae542eb6cd - optee/optee_os/scripts/get_maintainer.py
d28afa9fcae64f65d207dc150f051b7c609bbe32 - optee/optee_os/scripts/derive_rpmb_key.py
ff71ab8e19870db30e4a8fba666168c645f37126 - optee/optee_os/scripts/tee_bin_parser.py
f38c4636b6798cab2823555649a59b72061b756b - optee/optee_os/ldelf/ldelf.ld.S
d7ed8b2b8bca2a9b7b2b50e4c5ef3533b96cbe02 - optee/optee_os/ldelf/ta_elf.h
db3db1aeff618f5696eb16e7076b63464784267e - optee/optee_os/ldelf/syscalls_asm.S
ecc193b3d2a051728bc5d4e5841c8bdc021b6d35 - optee/optee_os/ldelf/sys.c
a270591f1efb8037df1d1369287b15f5f2964e0c - optee/optee_os/ldelf/start_a32.S
c5d1a1d261c8bada5f949335bffe29a029d03e05 - optee/optee_os/ldelf/syscalls_a32.S
d875d1a5979daa09b5b535d0a3f040c86a60f078 - optee/optee_os/ldelf/start_rv64.S
139e3f4826e35954af3c3bfe5112f11c1bd0db62 - optee/optee_os/ldelf/syscalls_rv.S
16e361c79bd359473a90bde00b493ca4182cc975 - optee/optee_os/ldelf/ftrace.c
87d8438d725c689049dabad1a58459a5efaaef0a - optee/optee_os/ldelf/dl.c
cb079ab7bac5d488cf5375c1b028130bcb2c7997 - optee/optee_os/ldelf/sys.h
29a349fad517b13af907e7705113c3831dccd9e9 - optee/optee_os/ldelf/syscalls_a64.S
af3868e37b5f97fafb0a1843478916e687050325 - optee/optee_os/ldelf/ftrace.h
f133be54ea11df978fa33a5afe3a2d8ed8c8f035 - optee/optee_os/ldelf/pauth.h
19099225f6999aeb1ed105d61f4aaec6455c2e61 - optee/optee_os/ldelf/ta_elf_rel.c
9201638e87d7051478eaabddd7ca1d9054f35f5f - optee/optee_os/ldelf/tlsdesc_rel_a64.S
4b036af7eee80c9d1402b0b1dcd09cab729a7a9b - optee/optee_os/ldelf/pauth.c
6c4a5e989d24d017296fb7bdcee35bfaa0515d1d - optee/optee_os/ldelf/ta_elf.c
13ded24e6da6026069baf1c4dd3159b6410f5308 - optee/optee_os/ldelf/start_a64.S
611d7981c55b4c62f5b13677c04a314e1a2f3218 - optee/optee_os/ldelf/dl.h
2450caf3ccde56f97078cfabd0a6378472ae1a23 - optee/optee_os/ldelf/main.c
e753e305779ac38002c5db612439fd95d3e9a20d - optee/optee_os/ldelf/include/ldelf_syscalls.h
9d6a14f727a55f4691af8e78834e23c243a1be39 - optee/optee_os/ldelf/include/ldelf.h
1c8f13cf72490970da6d19a7a3d3c06f18770f07 - optee/optee_os/core/lib/libfdt/fdt_wip.c
78de4be67ce92f5b90ff1ab89c2ba46a1a34da7d - optee/optee_os/core/lib/libfdt/fdt_ro.c
966e9a4b174cc33c3ba6126614b919ca0bfd09e4 - optee/optee_os/core/lib/libfdt/fdt_overlay.c
ed2772a8c2274cf02551a2a21cfbc33a7d81c2dd - optee/optee_os/core/lib/libfdt/fdt_rw.c
a6759c569917866b44961c88629ae4f3f07ea686 - optee/optee_os/core/lib/libfdt/README.license
0da7a6ee0118d32ca78e772cbf5a81f0cd62af9a - optee/optee_os/core/lib/libfdt/fdt.c
e01b7a0052b837a4650f2c9ac75ad38c40edc583 - optee/optee_os/core/lib/libfdt/fdt_empty_tree.c
e5657b776e8466d0d7c9578591d9c2ef45ef2799 - optee/optee_os/core/lib/libfdt/fdt_strerror.c
fd3af5baadbf42cca01d1a438cc826ae85a21f97 - optee/optee_os/core/lib/libfdt/fdt_sw.c
5ac5dba57124ad85911a67c10cf941f08ae861bd - optee/optee_os/core/lib/libfdt/libfdt_internal.h
55fc5d2ffcba07e29948822d0b12e4bf5546b8b8 - optee/optee_os/core/lib/libfdt/fdt_addresses.c
265155048eb725a03c49a45a27f322ca6f3dfe6b - optee/optee_os/core/lib/libfdt/include/fdt.h
c90d25bb7b217171ad9437ee0bc8d4e0c5c7f4d3 - optee/optee_os/core/lib/libfdt/include/libfdt_env.h
7cf2619336867b335fe8f3c919607242477ccfa0 - optee/optee_os/core/lib/libfdt/include/libfdt.h
cc088246b745446e2d222bd1c5219334f1c8a430 - optee/optee_os/core/lib/libtomcrypt/mpi_desc.c
ef50fbda210143489722c5c073b049220aee69ce - optee/optee_os/core/lib/libtomcrypt/cbc.c
bf7cfd733029fd500704f55382b02cd8fba1b84e - optee/optee_os/core/lib/libtomcrypt/hash.c
5a1e99eeb7282f69b7e7cbd68a0f514644c4d2eb - optee/optee_os/core/lib/libtomcrypt/x25519.c
f38de7925c7043b9c008b228fe88f291f90fe671 - optee/optee_os/core/lib/libtomcrypt/sha3_accel.c
422469b123ee31fdd517259a2ff73fe03da28d95 - optee/optee_os/core/lib/libtomcrypt/ed25519.c
181064609b067d38f551f69dcacc2d7a6ee4c249 - optee/optee_os/core/lib/libtomcrypt/sm2-dsa.c
8259a66638b3fbc4cda2f16eacfda0fa56c5c227 - optee/optee_os/core/lib/libtomcrypt/aes.c
627ba519b1c58c51f6ba86d4c3efcf948e497db9 - optee/optee_os/core/lib/libtomcrypt/sm2-kep.c
36ca35680a4370d4f993961371d80d2e7b777458 - optee/optee_os/core/lib/libtomcrypt/acipher_helpers.h
466eb4dd083c77261b455c56dfb3036243b0992e - optee/optee_os/core/lib/libtomcrypt/sha1_accel.c
191319cf67c91dac0437c501694f9973ada49045 - optee/optee_os/core/lib/libtomcrypt/xts.c
5d3683701305265a319ea23c3053100dc9ae0bfa - optee/optee_os/core/lib/libtomcrypt/gcm.c
f11a282fb43eece165553ab1545b7035b44ebe24 - optee/optee_os/core/lib/libtomcrypt/ecc.c
a2ecdde9b88869f00656b532502bf2e1c9c778bf - optee/optee_os/core/lib/libtomcrypt/shake.c
2fc6c08d346f75feec7f1c1633ccf1ddc1ac7736 - optee/optee_os/core/lib/libtomcrypt/hmac.c
d93db060cdaabf27ec489e52256460baf8e318b2 - optee/optee_os/core/lib/libtomcrypt/aes_accel.c
9197499a951acd6f4952270e28672de2d04696ca - optee/optee_os/core/lib/libtomcrypt/ctr.c
f2db1584836afadf8108bc4068ada599727f3a85 - optee/optee_os/core/lib/libtomcrypt/sm2-pke.c
2680c6505dd66000230072a984d24a8085db27d0 - optee/optee_os/core/lib/libtomcrypt/dsa.c
62b6a79664f89b4bbfccdcb5e079b9fc7c1372bd - optee/optee_os/core/lib/libtomcrypt/rsa.c
ac9a9648fe065d77e8a07c0f153c16784b90b675 - optee/optee_os/core/lib/libtomcrypt/cmac.c
bd085d21425692efa0737d43fe957bf83da73e8c - optee/optee_os/core/lib/libtomcrypt/des2_key.h
a53dd03d8ef444dc1ee628dd000ca066984be89d - optee/optee_os/core/lib/libtomcrypt/sha256_accel.c
db10215efa57b04d6d0c2259256832c69da9d405 - optee/optee_os/core/lib/libtomcrypt/tomcrypt.c
e6002d6bda94d5566d0598b73957a79863fc5869 - optee/optee_os/core/lib/libtomcrypt/dh.c
99aa558ed75d6462b266bdab24faa189c03b4563 - optee/optee_os/core/lib/libtomcrypt/ccm.c
a001afe7f955e43839c5e0d73be3db5db77d94d3 - optee/optee_os/core/lib/libtomcrypt/ecb.c
72b382fc200ec2a39395f48c821d263bb827cd3c - optee/optee_os/core/lib/libtomcrypt/sha512_accel.c
999e42770e9ee014be2004a0f9ce41d08a2002ac - optee/optee_os/core/lib/libtomcrypt/include/tomcrypt_mp.h
5c28c3c8b5fdb83a197148d44816e8b005affa3e - optee/optee_os/core/lib/libtomcrypt/include/tomcrypt_init.h
498bb31b34370ebc3e499339d52e71cae89ba865 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_macros.h
95fd8cc8a36c6775da6d95d71bb98074c293e936 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_mac.h
ddffb7673680addb29863a069b129b30d6ce3d2c - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt.h
941fea915f92af82307b36234f5ce179c0fd3025 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_argchk.h
887c122448ee129c201cf779efd87f89d217d440 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_pkcs.h
19b33612f0177f006e569c8ec37c4192c0f9bb2f - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_cfg.h
6e3431e86381584751e3fe17d1f783454fad2f52 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_misc.h
1991e9018d0ec703b758e97b051633bad98a27d3 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_hash.h
2e9d9b34e0b6f2433f0dbfdea346c33d914dd38e - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_pk.h
90bf8bf445d0bddadd8a2c05570e38753d9cbf05 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_cipher.h
2e713c6c463faaebb4e01472732e51d74aa5b185 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_arm_neon.h
61e9e77cf4d0b28303533d7ed4382d8561cc9dac - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_private.h
97497139d91a845544d8f9ba0ea4693a433ef8b8 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_custom.h
49b2782b96dbf7d798398be0b39ba922e5a21bf1 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_math.h
660c8803aeecea2223f2075be243bfdf24187599 - optee/optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_prng.h
9bccb9e3b0ce1b901cd5e52d30d7b54b1e8c5674 - optee/optee_os/core/lib/libtomcrypt/src/mac/hmac/hmac_file.c
c2f957e54093361abef389519c1a79136dfb5124 - optee/optee_os/core/lib/libtomcrypt/src/mac/hmac/hmac_init.c
b27bb0657c7accb0df147f4bf193b12933a9d970 - optee/optee_os/core/lib/libtomcrypt/src/mac/hmac/hmac_done.c
224913f37550084d0b6a11c46a674e2560b9f6de - optee/optee_os/core/lib/libtomcrypt/src/mac/hmac/hmac_memory_multi.c
c987048ee653d7b9e528924cd4ea2041d81ffbd3 - optee/optee_os/core/lib/libtomcrypt/src/mac/hmac/hmac_memory.c
278c6feea087176001778da10154df788711b864 - optee/optee_os/core/lib/libtomcrypt/src/mac/hmac/hmac_test.c
149949542f34fe4521472a0d3740f4ac64b23050 - optee/optee_os/core/lib/libtomcrypt/src/mac/hmac/hmac_process.c
8151c66fd55cb82b2e4252f211a7d14de20599e1 - optee/optee_os/core/lib/libtomcrypt/src/mac/xcbc/xcbc_test.c
f86f622ff3761a9086d7779d77559eddf2774ece - optee/optee_os/core/lib/libtomcrypt/src/mac/xcbc/xcbc_memory.c
b8c88d3152a2d9384baf86c1ec61ebb26f13660f - optee/optee_os/core/lib/libtomcrypt/src/mac/xcbc/xcbc_done.c
ac3fb83b5d619e067782a032452e215cc2ccc3b4 - optee/optee_os/core/lib/libtomcrypt/src/mac/xcbc/xcbc_memory_multi.c
114da72cefd715009a772baebd50f69a3237da72 - optee/optee_os/core/lib/libtomcrypt/src/mac/xcbc/xcbc_init.c
bbf18f6d75557cfdbb5aec0cb00e3df605536d68 - optee/optee_os/core/lib/libtomcrypt/src/mac/xcbc/xcbc_file.c
a3529bef5d5ca05f194021b998a1d7ba5fdec700 - optee/optee_os/core/lib/libtomcrypt/src/mac/xcbc/xcbc_process.c
6f1f256d9e8a6ee6660406b43866a0dd79fbd255 - optee/optee_os/core/lib/libtomcrypt/src/mac/poly1305/poly1305_memory_multi.c
86f1332253c798f3fdfa01762ed1c64949a69794 - optee/optee_os/core/lib/libtomcrypt/src/mac/poly1305/poly1305_test.c
31e9ff14eef67741c7e79e9b1a4e478222f794b9 - optee/optee_os/core/lib/libtomcrypt/src/mac/poly1305/poly1305_file.c
f9cbe3b6dd912225eefc54f7dee30754e366cf62 - optee/optee_os/core/lib/libtomcrypt/src/mac/poly1305/poly1305.c
5300bb1eab429d1a602a848c46b9dbed916d1860 - optee/optee_os/core/lib/libtomcrypt/src/mac/poly1305/poly1305_memory.c
5e2fa3a8a8b8c0d38d74aa0bab4d4cc206166453 - optee/optee_os/core/lib/libtomcrypt/src/mac/omac/omac_memory.c
a081274e2f9dcc2ed96ec2a4db00ededed0ec9e8 - optee/optee_os/core/lib/libtomcrypt/src/mac/omac/omac_test.c
7314b670b2c1a382ba1017ccd3b3806fe451aad6 - optee/optee_os/core/lib/libtomcrypt/src/mac/omac/omac_memory_multi.c
2588957db97d4b727a20206702de592edae7afb9 - optee/optee_os/core/lib/libtomcrypt/src/mac/omac/omac_init.c
3657dea6098b394ec68f7c996eb8c2525646dafb - optee/optee_os/core/lib/libtomcrypt/src/mac/omac/omac_done.c
daee17f76d3539a02d8567dc943b2b3217098786 - optee/optee_os/core/lib/libtomcrypt/src/mac/omac/omac_file.c
5a792633cf4c62bb31894bcce5bb07e78763b88e - optee/optee_os/core/lib/libtomcrypt/src/mac/omac/omac_process.c
bfdb58bcc629f18e9ee0daf89aaccb205454e950 - optee/optee_os/core/lib/libtomcrypt/src/mac/pelican/pelican_memory.c
40dc7c58ad7c36c78900489dd9043971310b0824 - optee/optee_os/core/lib/libtomcrypt/src/mac/pelican/pelican_test.c
23f68588e1e7259db12eff911680272b1742519d - optee/optee_os/core/lib/libtomcrypt/src/mac/pelican/pelican.c
9b028196ee6d1b9299d41bc2c6d66cacd1011ed3 - optee/optee_os/core/lib/libtomcrypt/src/mac/f9/f9_memory.c
5c61eca352761007c4111cf83cabf66f712cb67c - optee/optee_os/core/lib/libtomcrypt/src/mac/f9/f9_process.c
78be422e4801b343c32f4a4574075488109af2e0 - optee/optee_os/core/lib/libtomcrypt/src/mac/f9/f9_memory_multi.c
de921bd15503ba513e2979be7113493b8c679ac9 - optee/optee_os/core/lib/libtomcrypt/src/mac/f9/f9_init.c
7ec5d863f61666d818632fd057c4fe9bc1a879f0 - optee/optee_os/core/lib/libtomcrypt/src/mac/f9/f9_done.c
8fa264dc57c925de0f8f36ad8848c8b278694d5a - optee/optee_os/core/lib/libtomcrypt/src/mac/f9/f9_test.c
683da90e66dec7dfc447bac38e35dbee802d3b57 - optee/optee_os/core/lib/libtomcrypt/src/mac/f9/f9_file.c
196fd89dd21f7f943fca9702ed9616a27edc7221 - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2bmac_memory_multi.c
e853e7da65047812f5c09f5ed42bc85f5b2256db - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2smac_file.c
208bbe5ced04c13eb0e1d3b24e76f5c81345cd04 - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2smac_memory_multi.c
93f44519ebb2341e9ca27ec077a77a455641dba9 - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2bmac_memory.c
9bf71a86a4483d4e404521f696f591017b261b9e - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2bmac_test.c
361ba0aee5e365c0c0cb186cb4aefdac17289943 - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2bmac.c
e29b12ee69c044ee575a389f95878c7498a62af9 - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2smac.c
420e593df278e8c4bce349965dc185a1654e27b7 - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2bmac_file.c
7ef84ee8949eea9fb48ef217f1c8ff24f6adf1d7 - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2smac_test.c
13a4a399570926073872b210027dc5539d30d44e - optee/optee_os/core/lib/libtomcrypt/src/mac/blake2/blake2smac_memory.c
539c06612340597abac186f272ceeec032082a08 - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_shift_xor.c
0e00b9ac2e143fc27c3122a3f3d9bc87d8282076 - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_process.c
1336042d04c7dd5b0ee965be9d037bf654049339 - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_test.c
0371334e645562a86984c83f6257967f26cf1464 - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_done.c
fd77eaabb5a5ffddd12e2f91920bd8e657aaff2f - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_ntz.c
74a84dcfca09518e42ab725a717c8aedc0fb9f84 - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_memory_multi.c
eb8f24748a3fbff1fabe0be3ce91f76ace71528b - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_init.c
4a8d8ec6fb7faf70d806473ae0d8a3d1c9d3cc5d - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_file.c
21ade96dad372a77d13f421cc9c1f8d2290e239c - optee/optee_os/core/lib/libtomcrypt/src/mac/pmac/pmac_memory.c
af7e5ec699439a45de3f29a72e6779709ebce7ac - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_encrypt.c
16d4c4b33c5e68749766312b86e074433514c453 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_ntz.c
727b4d190bb993d395c276fdc4b6772e7507af6f - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_decrypt_verify_memory.c
93e89b145ff46fcae1c653ee70c2061ac539e737 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_done_encrypt.c
87188dae93ef2263dd1baa4207faf5551bf57bff - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_decrypt.c
9874e24493855b4ccab70b0ff538125c23e3515b - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_init.c
83f9d3b22b6bd8960fde8524bcd094d2fd1bad6b - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_test.c
069dc6544fea4923f5ffc9ed6cb508d1e3be4b16 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/s_ocb_done.c
4c0669699a2b11b52aacda4fd2c617d5695da4c1 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_shift_xor.c
fb2baeda2808e719b2543a5bf4e92e86c5a8475f - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_encrypt_authenticate_memory.c
5fd053c692f154fa517d1a66afac3bf88a666dc1 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb/ocb_done_decrypt.c
00df47ac677f1c073e872b02d89d034defae3198 - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.c
a1a4e685352d4984fd5d49522bcd50c4492ea66c - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_init.c
0af7bc735a8720e5b936a261204b1aa73a0943f5 - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_memory.c
9de6e2171df8c3c6a974888bfde2f9333e56e12a - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_done.c
2d89b89d0738d4db5b761d40f9cd02510f413933 - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_test.c
55555aa0f46d7b4575242255f0729e9da8593aff - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_encrypt.c
268ca7b0eb4a15158fd3f58ae75ddaa90a8f7eaa - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_setiv.c
559a51a7d6a1d21918f5908f788bb294acf88bee - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_decrypt.c
5cc80740578579a16d394fdd144d7d71daabfa35 - optee/optee_os/core/lib/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_add_aad.c
9eb480ccdf51a957a9391e17f2740e53048dd90a - optee/optee_os/core/lib/libtomcrypt/src/encauth/ccm/ccm_add_aad.c
f8f818328098018b9bc6836915dbfc34bafbf574 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ccm/ccm_reset.c
62851dedaffe4829a9e1d62149db76a1986abd9b - optee/optee_os/core/lib/libtomcrypt/src/encauth/ccm/ccm_add_nonce.c
f8665c5b620a773ad0a216d19c5abc141e016573 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ccm/ccm_init.c
b34c2b6c5a74bd74ef31a705564bba555a34c1c8 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ccm/ccm_test.c
e045e646861478e232fea83658bd42d37547f4fb - optee/optee_os/core/lib/libtomcrypt/src/encauth/ccm/ccm_done.c
d4dca139aea0166092d5665e29064ddda8901842 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ccm/ccm_process.c
21a750da58390fc7dc77bcf1086f914f5294110a - optee/optee_os/core/lib/libtomcrypt/src/encauth/ccm/ccm_memory.c
782a71b6b10b0305491529ce9963ace0c26a38f6 - optee/optee_os/core/lib/libtomcrypt/src/encauth/eax/eax_test.c
8f82752538241e4f3c3f48ccdb5bf6fd41d7e889 - optee/optee_os/core/lib/libtomcrypt/src/encauth/eax/eax_decrypt.c
30473a74f19214129f69b8b067d6d2d5a87a7364 - optee/optee_os/core/lib/libtomcrypt/src/encauth/eax/eax_addheader.c
cf42e3ab0129e2962618a2b9b261e9ea20e0bcf2 - optee/optee_os/core/lib/libtomcrypt/src/encauth/eax/eax_encrypt.c
c5f08bda970ba7d30ff7bee44fda96f5e6515caf - optee/optee_os/core/lib/libtomcrypt/src/encauth/eax/eax_init.c
3199f0f705460b9182e1e9b543e800f7d26b305b - optee/optee_os/core/lib/libtomcrypt/src/encauth/eax/eax_decrypt_verify_memory.c
f60e6c18f07779e8b066581926c51522a92069d6 - optee/optee_os/core/lib/libtomcrypt/src/encauth/eax/eax_done.c
633dfd755ba58507be81b2d70c2d483d28ca9597 - optee/optee_os/core/lib/libtomcrypt/src/encauth/eax/eax_encrypt_authenticate_memory.c
3f6fff56e90836bbb49e7e0f2ea08ef20a25dcc7 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_init.c
792b2c41264e5daf5d14ec67d327f8bfd079d994 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_reset.c
f162118759bca19c0f87c3807df85b6373ae5644 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_add_iv.c
6799d4d2d91f4e12e8d866fd920ae847eb66d5e6 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_add_aad.c
cf505805e8a15d2a7e342491371d6f38a799f8e3 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_mult_h.c
60ead8187339abc082c6fb5cfa8ca4a07d5bd3d1 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_mult_h_arm_ce.c
19aceaaa2254b78b3210d81efdb82d2909a5edbe - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_test.c
4b4695ae4f767fb3c51d9dd77a86c7c8ee8dd524 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_memory.c
d071d7e805d688ccaaf2b3f8c3b7bc5d68bbba1e - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_process.c
9dd030615b3a2c6b70c7e24dc125673f88550909 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_gf_mult.c
38d9de8caef78490c170d9f138c49db6374e6a02 - optee/optee_os/core/lib/libtomcrypt/src/encauth/gcm/gcm_done.c
ce658863c830e150ad4cc3c3bf741b91dfa68c6c - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_encrypt_last.c
9b663e83c3004ebe1725ad851bde5f946c0e6150 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_encrypt_authenticate_memory.c
650667de1f0e3d2308872cf4537ae49498239261 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_decrypt_last.c
7d45e3754a326d8386f2e536d6baa81554378581 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_decrypt_verify_memory.c
df0f2138b4cb5a037739e226490a0d08bd268048 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_decrypt.c
7c091098e78cd1fb572b8b2e843ac04d30099719 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_add_aad.c
d3aff516bc303de0bedf794c42305bb770b41629 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_int_ntz.c
487cb958837ebcf06f92ef604fb17b4a495bbd64 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_test.c
5de251abffe4c5d5eea6c9deb2b5a3dd7c128147 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_int_xor_blocks.c
4dd6870aa2c7606e90a94d802fa383dd8515b825 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_encrypt.c
5f19a3d36e36aa4d6fd83ace3219f06916e307a9 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_done.c
946301da12005f65f7f0a5d5cd79114186db81e7 - optee/optee_os/core/lib/libtomcrypt/src/encauth/ocb3/ocb3_init.c
4a0d52f29c5da69ba1248de543b53f80f00f0358 - optee/optee_os/core/lib/libtomcrypt/src/modes/ecb/ecb_done.c
2f93fc0a9e1afdf93c263f75675e15d9aae63cf6 - optee/optee_os/core/lib/libtomcrypt/src/modes/ecb/ecb_encrypt.c
a0941ac3c7a39107c7f3049a9ce6b7cc3d120c58 - optee/optee_os/core/lib/libtomcrypt/src/modes/ecb/ecb_decrypt.c
a1361518be72e5f0a2c22cf2e99afc5155c64421 - optee/optee_os/core/lib/libtomcrypt/src/modes/ecb/ecb_start.c
ad10e437f618657cf5b5e3ffc20fb6c5219a6db8 - optee/optee_os/core/lib/libtomcrypt/src/modes/lrw/lrw_process.c
3e8b2b92ce4faeef2ac7282bb0e58253ed01bc41 - optee/optee_os/core/lib/libtomcrypt/src/modes/lrw/lrw_encrypt.c
6166a8f10c3d96dd48d974f0c420288c79faaeed - optee/optee_os/core/lib/libtomcrypt/src/modes/lrw/lrw_done.c
7cbf93842dddca33e61a035f80d15e15d1e0c609 - optee/optee_os/core/lib/libtomcrypt/src/modes/lrw/lrw_test.c
89d10d95e8d542d75a69d8f580d6ba6448096006 - optee/optee_os/core/lib/libtomcrypt/src/modes/lrw/lrw_setiv.c
89b75f314fad2f247f3c02a8d043c69822182beb - optee/optee_os/core/lib/libtomcrypt/src/modes/lrw/lrw_decrypt.c
6343e513ad46501c7b3c7dc039c8b246ea927590 - optee/optee_os/core/lib/libtomcrypt/src/modes/lrw/lrw_getiv.c
6186f3e377626cce35518099044023ede1954ee7 - optee/optee_os/core/lib/libtomcrypt/src/modes/lrw/lrw_start.c
75a66324c9304c63a62bc2a97fbc8ea51df97255 - optee/optee_os/core/lib/libtomcrypt/src/modes/xts/xts_encrypt.c
85a32e2be465b69f7a4132892ad684cbcd8ea293 - optee/optee_os/core/lib/libtomcrypt/src/modes/xts/xts_test.c
336fd44e027effb81725392b176eb6fe5112e371 - optee/optee_os/core/lib/libtomcrypt/src/modes/xts/xts_done.c
769fbede217b0ef928a9b5939e849a6efd2d0e01 - optee/optee_os/core/lib/libtomcrypt/src/modes/xts/xts_init.c
3dea7eb14320987637e14b812e161c7efa873b76 - optee/optee_os/core/lib/libtomcrypt/src/modes/xts/xts_mult_x.c
a2a2185a5cbe8319ecd9e65dbb720317d63814ad - optee/optee_os/core/lib/libtomcrypt/src/modes/xts/xts_decrypt.c
41b01b20223d2bb66ac8f419cf6f8435c9867f86 - optee/optee_os/core/lib/libtomcrypt/src/modes/f8/f8_encrypt.c
ad7cdbcaef35b7db424ce95e64bf87baf2f4164a - optee/optee_os/core/lib/libtomcrypt/src/modes/f8/f8_setiv.c
cf8ba7e0b9c7428652d258729d7790277015c181 - optee/optee_os/core/lib/libtomcrypt/src/modes/f8/f8_start.c
2140195d11a6c4c204d39ed215e9600018bd23cf - optee/optee_os/core/lib/libtomcrypt/src/modes/f8/f8_done.c
2e8ea32ff629fd7635676de6611f85ef9285eee6 - optee/optee_os/core/lib/libtomcrypt/src/modes/f8/f8_decrypt.c
f9f61c74b98bf0afefdd73ff10efad3fafc465b2 - optee/optee_os/core/lib/libtomcrypt/src/modes/f8/f8_getiv.c
06cbb137bfc9d209674f552805083aeb3ae1516e - optee/optee_os/core/lib/libtomcrypt/src/modes/f8/f8_test_mode.c
f07be7c3adc027be7917e3d412fe07dcd829fb1e - optee/optee_os/core/lib/libtomcrypt/src/modes/cbc/cbc_done.c
f3d6327ce4ffdabcd4e94091f0c4d616198e8f04 - optee/optee_os/core/lib/libtomcrypt/src/modes/cbc/cbc_getiv.c
747a817bfdd38ce834a9198f1e176c1fe227b3bd - optee/optee_os/core/lib/libtomcrypt/src/modes/cbc/cbc_setiv.c
4a3b1b9453c09f7842de157e91770af0c0ed7415 - optee/optee_os/core/lib/libtomcrypt/src/modes/cbc/cbc_decrypt.c
9e461ccf05f3b82c258302f4a3eb873038978a89 - optee/optee_os/core/lib/libtomcrypt/src/modes/cbc/cbc_start.c
e6d6ea2e6d96293a8daf46f6c0748936ccc3527b - optee/optee_os/core/lib/libtomcrypt/src/modes/cbc/cbc_encrypt.c
7d9c7698b787a53e3bd28940cdd444746994860b - optee/optee_os/core/lib/libtomcrypt/src/modes/cfb/cfb_encrypt.c
d6eb82ef3d2185e358f7226af8bb34ffff297694 - optee/optee_os/core/lib/libtomcrypt/src/modes/cfb/cfb_setiv.c
ca7bed22fee4c69c65394f0811f17e8a4a3b3ea9 - optee/optee_os/core/lib/libtomcrypt/src/modes/cfb/cfb_start.c
3a750d0cc44888f039a609e54a400af43310abcd - optee/optee_os/core/lib/libtomcrypt/src/modes/cfb/cfb_decrypt.c
a5a54f70612eca541d03a7a560aba8cdff0b4df3 - optee/optee_os/core/lib/libtomcrypt/src/modes/cfb/cfb_getiv.c
56f1ea6d8684edf6bbfc6e96fec03f21f3ec7879 - optee/optee_os/core/lib/libtomcrypt/src/modes/cfb/cfb_done.c
b03f3351e97f9628fb7921eda85ae3f0b0534156 - optee/optee_os/core/lib/libtomcrypt/src/modes/ctr/ctr_encrypt.c
c9abd410a11d44eb94910ab6d95bafc4e75fcbe7 - optee/optee_os/core/lib/libtomcrypt/src/modes/ctr/ctr_getiv.c
cf2740b0fb974b94f1cc08890920c5e95f703310 - optee/optee_os/core/lib/libtomcrypt/src/modes/ctr/ctr_done.c
2997b2353ddb192f89b3ec278ad91cdc8d7f2b62 - optee/optee_os/core/lib/libtomcrypt/src/modes/ctr/ctr_setiv.c
0303400a05e16078ca1944029c36280472d79869 - optee/optee_os/core/lib/libtomcrypt/src/modes/ctr/ctr_test.c
ee5c9c1fd94d09694078522a5a470058f1aa78ea - optee/optee_os/core/lib/libtomcrypt/src/modes/ctr/ctr_decrypt.c
265e8429da2df62461fd0b313a0120c58034bd0b - optee/optee_os/core/lib/libtomcrypt/src/modes/ctr/ctr_start.c
eb172f92954aa6843672b7d7bc9707f7448bc1c4 - optee/optee_os/core/lib/libtomcrypt/src/modes/ofb/ofb_getiv.c
207351014a29ed0dce3fcaa0898b5c563262e0e1 - optee/optee_os/core/lib/libtomcrypt/src/modes/ofb/ofb_decrypt.c
4ec1b143f43bb9aac8d870e9bad201ea008c17c3 - optee/optee_os/core/lib/libtomcrypt/src/modes/ofb/ofb_start.c
6cb5287688b6eee249f4ccc152104c13fc0579f1 - optee/optee_os/core/lib/libtomcrypt/src/modes/ofb/ofb_encrypt.c
2301f47f63701715e30b0a1d5a7bcf2ff97644ff - optee/optee_os/core/lib/libtomcrypt/src/modes/ofb/ofb_done.c
f5dfcba990f115b494ccd95e958582ca983bfb31 - optee/optee_os/core/lib/libtomcrypt/src/modes/ofb/ofb_setiv.c
e618ce5c3d8409cf47b68ba9621e64262846a123 - optee/optee_os/core/lib/libtomcrypt/src/prngs/sprng.c
56ea3306613bb08e15bb0852fdd1d4a60d5e6be5 - optee/optee_os/core/lib/libtomcrypt/src/prngs/fortuna.c
65bdd642447c1d4dfc26f0f35958f0e1f9dbf51b - optee/optee_os/core/lib/libtomcrypt/src/prngs/yarrow.c
b1696e891350ceb540ac60bc6d4fc5601ae109b1 - optee/optee_os/core/lib/libtomcrypt/src/prngs/chacha20.c
0175635dc4f43317153da8fa639515156755da5c - optee/optee_os/core/lib/libtomcrypt/src/prngs/sober128.c
91b049316fd473eb33d4807d7b5aaa9a00844a82 - optee/optee_os/core/lib/libtomcrypt/src/prngs/rc4.c
94ca15102c5937a658d63a00e39be8d7ce0a25fe - optee/optee_os/core/lib/libtomcrypt/src/prngs/rng_make_prng.c
865e433a85f4231f24a39af014d76333f21338e4 - optee/optee_os/core/lib/libtomcrypt/src/prngs/rng_get_bytes.c
02474538dadafba33694c8ecab5fc2e6d00a7281 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/khazad.c
48cdd948011ecd3e9298f56dce531d60ede7608d - optee/optee_os/core/lib/libtomcrypt/src/ciphers/idea.c
398a2df01e72511a00c4fd56ef10ba61c9e08ae4 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/kseed.c
461cbf82c045454db297fe16c3c478c4cde8fadd - optee/optee_os/core/lib/libtomcrypt/src/ciphers/noekeon.c
c870397dc946312c9c0304e8f132b1fe87eb18c3 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/tea.c
819970a30ad279c10add699d9bb08c1023039bbc - optee/optee_os/core/lib/libtomcrypt/src/ciphers/anubis.c
e28e47ef72883f05ef629df3d495fddfda0372f9 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/skipjack.c
60505e6a888a893c8edf9d6065362453230d0d78 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/des.c
d48e4087de75284fb9aa215069515ac90849dd5f - optee/optee_os/core/lib/libtomcrypt/src/ciphers/serpent.c
06e4fcdd40cc84f756e818ffb70a63da8066c7a1 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/kasumi.c
b0f8a843a280133fbab3d261ce7a7486c5f20bb2 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/cast5.c
9748ebff9d560f59b42bb6c8c1dedc71dccbc225 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/rc2.c
4e35739fffcd60f1f9971113810a08c7c7fb114e - optee/optee_os/core/lib/libtomcrypt/src/ciphers/camellia.c
cfc7412e0fbe23e14536db6836f3da2102c02e06 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/xtea.c
9d2d04084cdc6c4c56cec3479af1ccb74619fe42 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/rc5.c
783f175a7e6e630e954aa409e43cc67a854e2921 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/blowfish.c
0e87ea79442a67dec4fad902f2df7a827f1c233f - optee/optee_os/core/lib/libtomcrypt/src/ciphers/rc6.c
840013cf542fd64a45cdea8afb965f8aa0e51df8 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/multi2.c
4a6bb1fb9b2eed818cf6aebf8d6fc78f108db521 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/twofish/twofish.c
b6e57c2661c58975ca885c612932e68bfeb45d9e - optee/optee_os/core/lib/libtomcrypt/src/ciphers/twofish/twofish_tab.c
02e2e1991091b288aea34a15ba2dc829578f7406 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/aes/aes_desc.c
48a4a60cd68d5143a1998139b830ee8fa7e56faf - optee/optee_os/core/lib/libtomcrypt/src/ciphers/aes/aes_tab.c
c0e3d1f52fe0bf9b722ef49ba3327a53c3a2f81c - optee/optee_os/core/lib/libtomcrypt/src/ciphers/aes/aes.c
4d5f04f669177085390d6fa7358e2a8d10c664ac - optee/optee_os/core/lib/libtomcrypt/src/ciphers/aes/aesni.c
f7eb0744775bb897d006417c91c5f5b4aac5dd92 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/safer/safer.c
31702a5acb225e761e0a4cd0e4b4e0e31c5206e3 - optee/optee_os/core/lib/libtomcrypt/src/ciphers/safer/safer_tab.c
5f2865f98ba1100f2d497f84b78a20571393885b - optee/optee_os/core/lib/libtomcrypt/src/ciphers/safer/saferp.c
82aa1b04a2ce5276fd516e96169dc1b0c2432bb6 - optee/optee_os/core/lib/libtomcrypt/src/hashes/md5.c
3c19181cce8bd461cc6a736ec3f3940ec737bcdd - optee/optee_os/core/lib/libtomcrypt/src/hashes/rmd160.c
68e0d19966d27aef53860364419b51f347181c64 - optee/optee_os/core/lib/libtomcrypt/src/hashes/tiger.c
699622196fe40d368c4aa87afa335085d2d7cbd8 - optee/optee_os/core/lib/libtomcrypt/src/hashes/md2.c
17750b4d62fad12b1ae16ef01a8ffa2cac05fe1a - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha3.c
50f0d32cf7879499990c4ec792546db1e812dfaf - optee/optee_os/core/lib/libtomcrypt/src/hashes/md4.c
f0e38b2df179903a5c62a5d1223c27d9468f2b55 - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha3_test.c
a24770ddff20aa047ca6e50ed3b40f67fb229213 - optee/optee_os/core/lib/libtomcrypt/src/hashes/rmd256.c
f7476e6db75e35d781ab4d7ac8fbbb76133f2158 - optee/optee_os/core/lib/libtomcrypt/src/hashes/blake2s.c
c4e009d4708e3b97b2d83467411f582076ec374b - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha1.c
436cc2c14c7f7f513d234253ebce325da3441faf - optee/optee_os/core/lib/libtomcrypt/src/hashes/blake2b.c
bbb1244d51ea6efa2a0d6fd5ff5d1a6b507eb3cb - optee/optee_os/core/lib/libtomcrypt/src/hashes/rmd128.c
c991e82af32c3fd33d4ca7f63a43c46aaa3a8af5 - optee/optee_os/core/lib/libtomcrypt/src/hashes/rmd320.c
63de08d2a37229f4bc2e4138db49d71e7f5786d0 - optee/optee_os/core/lib/libtomcrypt/src/hashes/chc/chc.c
5c4268acde331fa5dfc75643f9edc2c04189e29c - optee/optee_os/core/lib/libtomcrypt/src/hashes/whirl/whirl.c
d4fe8714b77fd3ad07260899bc8b5307e2d44e68 - optee/optee_os/core/lib/libtomcrypt/src/hashes/whirl/whirltab.c
18123fb06342b70d7c8af10d2c72fd07b75e1d2c - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha2/sha384.c
f25a1dad013d500b85f3eef3b3570f30a88b8937 - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha2/sha256.c
91834258fd0a291b0c2e8b5a43b6bd8f7278bca6 - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha2/sha512_256.c
3ff874c5735dc5e5d895621a56ed2a379f35f3fa - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha2/sha512.c
3b7138b66d581516a8dd7568842636ce576e8f33 - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha2/sha512_224.c
3d396867f33dd56b9cb7f66e66c902badeee4bfc - optee/optee_os/core/lib/libtomcrypt/src/hashes/sha2/sha224.c
123f4981edadc5f102d34b0ba1b5a187c185bba8 - optee/optee_os/core/lib/libtomcrypt/src/hashes/helper/hash_file.c
0143b2df7c00d23cf21ee3f0a263e80cfb42788e - optee/optee_os/core/lib/libtomcrypt/src/hashes/helper/hash_memory.c
01fc3d71a3f1525612e644839c7a707c1e5a1af5 - optee/optee_os/core/lib/libtomcrypt/src/hashes/helper/hash_filehandle.c
06ac2272160baaf80405c2bc2d9ef9a5295548b4 - optee/optee_os/core/lib/libtomcrypt/src/hashes/helper/hash_memory_multi.c
2f7b628448c81541c1e80e9cd8cd61e1489736f8 - optee/optee_os/core/lib/libtomcrypt/src/stream/chacha/chacha_ivctr32.c
421494432d61682c13c00cb14769af324f4694e7 - optee/optee_os/core/lib/libtomcrypt/src/stream/chacha/chacha_done.c
0ecad8f59cf056ac38226599bdef384c2e52c733 - optee/optee_os/core/lib/libtomcrypt/src/stream/chacha/chacha_setup.c
76550dd06cbcff27a2d8ac4d8f8ef0428da2a4ba - optee/optee_os/core/lib/libtomcrypt/src/stream/chacha/chacha_memory.c
a1c69b888c2662b3db2c4343318cfed05ce1a262 - optee/optee_os/core/lib/libtomcrypt/src/stream/chacha/chacha_test.c
19529a1c91610536d1f56e09d8f7f0c1c44ed1fb - optee/optee_os/core/lib/libtomcrypt/src/stream/chacha/chacha_ivctr64.c
95e2d29cf4201f1cc469997b0aef539883229f02 - optee/optee_os/core/lib/libtomcrypt/src/stream/chacha/chacha_crypt.c
408fed5f27e4bb531ec7c18c4ea4b85e1b3e25b4 - optee/optee_os/core/lib/libtomcrypt/src/stream/chacha/chacha_keystream.c
21ad37425084eb46c5dd6d7917ce29b0758fe98e - optee/optee_os/core/lib/libtomcrypt/src/stream/rabbit/rabbit.c
4aca9bfe042afdad9b57f2241c99597911fcb7a8 - optee/optee_os/core/lib/libtomcrypt/src/stream/rabbit/rabbit_memory.c
e554ce2b664e1b21e037000eab5b05a464e2f913 - optee/optee_os/core/lib/libtomcrypt/src/stream/rc4/rc4_test.c
43f7927b89b648f1b642bbe96a30329482a96706 - optee/optee_os/core/lib/libtomcrypt/src/stream/rc4/rc4_stream_memory.c
0370402bb2b440618f27fff3e9a7d3e2219a348e - optee/optee_os/core/lib/libtomcrypt/src/stream/rc4/rc4_stream.c
d7ddc63403a0836fcb998d8a80e1d253aad3fac4 - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/salsa20_ivctr64.c
b8a013b428ced9671422b507d6833d25312bd823 - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/salsa20_test.c
c086c739c64705448b06feec7107cd47dedf997e - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/salsa20_memory.c
bfa49e2602c5cdee29bb880f6558844a31175fc9 - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/xsalsa20_test.c
c1487e9b5be5b8d3a2662a6e37a477cf5c86bb8f - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/salsa20_setup.c
e8f1fb8eb2b962abfef86027594a70a50023e9d9 - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/xsalsa20_memory.c
5d403e317c9deb62133d017412250702a48683d9 - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/salsa20_crypt.c
a4f8195e9e117c1053f0272b7b26bc835bdc5337 - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/salsa20_done.c
51497c0e6a261a2ebe26056565149049e7154e05 - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/xsalsa20_setup.c
1e3ea925d7df004fe7994bcedc4d5e0d9551c09d - optee/optee_os/core/lib/libtomcrypt/src/stream/salsa20/salsa20_keystream.c
cc60780ba62cc198b8657fb2994150ebdbd9aabd - optee/optee_os/core/lib/libtomcrypt/src/stream/sosemanuk/sosemanuk_test.c
51e23c33fc2f379b97fdbb9128414859204e00a4 - optee/optee_os/core/lib/libtomcrypt/src/stream/sosemanuk/sosemanuk.c
15c26663221b68b94b5e2f66b93c1b4468d6b956 - optee/optee_os/core/lib/libtomcrypt/src/stream/sosemanuk/sosemanuk_memory.c
7c4f40cf2659b91a59b92ee79867fc47b44affe1 - optee/optee_os/core/lib/libtomcrypt/src/stream/sober128/sober128tab.c
18ce9329f7f80ff15e4e96615479074600a7ec87 - optee/optee_os/core/lib/libtomcrypt/src/stream/sober128/sober128_stream_memory.c
d6981e9defa0ed7bd29fdde4dff9567394bf672e - optee/optee_os/core/lib/libtomcrypt/src/stream/sober128/sober128_stream.c
ff214c34d15c197a91a236c37775d89e959c1bec - optee/optee_os/core/lib/libtomcrypt/src/stream/sober128/sober128_test.c
6adfd2c5e4b416a65be0e9e7d0b6a24c1a3589d1 - optee/optee_os/core/lib/libtomcrypt/src/misc/adler32.c
f4059601bb534681d08bbf29b543f5bc37d29267 - optee/optee_os/core/lib/libtomcrypt/src/misc/zeromem.c
746776871c1d225104237b1021e530a23d5c1fd0 - optee/optee_os/core/lib/libtomcrypt/src/misc/compare_testvector.c
5c187006ec54c463347d528d5671b8e92f9b762b - optee/optee_os/core/lib/libtomcrypt/src/misc/copy_or_zeromem.c
90dd180fc585755ec6db549d5d69653fe83ed6ab - optee/optee_os/core/lib/libtomcrypt/src/misc/mem_neq.c
c129c049a7b7b18cdb44284f93430835d0001761 - optee/optee_os/core/lib/libtomcrypt/src/misc/crc32.c
ff2dcdde770c5904024d8bd59763632a301e9790 - optee/optee_os/core/lib/libtomcrypt/src/misc/burn_stack.c
ad0c66e6a4431f567b49915d01f026888538f63e - optee/optee_os/core/lib/libtomcrypt/src/misc/error_to_string.c
c2fa3c8655b71dc36a48c5aa409c9ed586f9c8d0 - optee/optee_os/core/lib/libtomcrypt/src/misc/base32/base32_encode.c
f5d1d5c1f347ba72d7eecf6995812bd9b0443efc - optee/optee_os/core/lib/libtomcrypt/src/misc/base32/base32_decode.c
2e8f9163643ed6d0b41b646077f77fa7c179ffcc - optee/optee_os/core/lib/libtomcrypt/src/misc/pkcs5/pkcs_5_1.c
7d6e3fd183b55075249f3c83ed89ce3ba48665ea - optee/optee_os/core/lib/libtomcrypt/src/misc/pkcs5/pkcs_5_test.c
11a7db8b0e76dc35b70e854992156d2f75f98688 - optee/optee_os/core/lib/libtomcrypt/src/misc/pkcs5/pkcs_5_2.c
d0feb5c364be991806af64380cd3a6e5d7062ab3 - optee/optee_os/core/lib/libtomcrypt/src/misc/bcrypt/bcrypt.c
80d8a64decdaeb241abf260380e42f406eb7e132 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_unregister_hash.c
18b723be741bf36e94966af24f7f0da9fa256f26 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_constants.c
0090a8c4b12094134c7e3fcdd6c82cd26327c271 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_register_prng.c
1496e996d6a819f3c095369c1c68a71749ed297c - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_register_all_hashes.c
abb752921991a5264ecf76f92d09589c9477d1d6 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_sizes.c
20925129239360b39ed195a0d8b6b99d59b890f2 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_find_hash_oid.c
1221efc9a518048e34fe881a93fe5c765524f34e - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_unregister_prng.c
d15ddf5b26ce2f13c726a540479ac62355bc4ab3 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_prng_is_valid.c
9e47537140b5988fba0847120d3e311f83085ac8 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_hash_descriptor.c
70ff3cb0ee05909a347b56392e40b79171d1d3ce - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_unregister_cipher.c
26b8c28e0999d261c930eb0d113fa79e1a5ff527 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_register_all_ciphers.c
86208e8f80a09e01a0344df7d1e632b74195c2c8 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt.c
994a86f2bda5d048c5755b0e7819184195f24ce9 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_register_cipher.c
28e1308aa1d2f79105cf6aedb36a9ea1664e3567 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_prng_descriptor.c
474440e2037216fed3c26f124fd92a96e2bf51d8 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_argchk.c
81f55ffa10b11eb901eb4a3e44acce81c2582f84 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_find_hash.c
5c81f4d8d18f6544665cf9385fabb100324f2323 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_find_cipher_any.c
f1821b4e1d8e159fc9eebb3c49abfe0f6eef8da9 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_find_cipher_id.c
a98c18ecdba584f662232ca582bb88b502daee55 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_fsa.c
26a169c33ea38516c1421f536f7bbeeb2983f01c - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_hash_is_valid.c
23eb56683e5cb3b2a6203532f2261e1146584ee2 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_cipher_is_valid.c
c261fdd28c1198d33aeccd35a7728d324671e3b1 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_register_hash.c
34b218af0b0d226b125bb51da3c2016bcde2eb62 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_inits.c
c22b0f36bb603c5a4cc0e043d1fc84ed5615c82a - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_cipher_descriptor.c
209b907a121df459daa08c8ab473adaedc01f56b - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_ltc_mp_descriptor.c
07ad1815506e2a82911ec0c3fbb9dbe66466efde - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_prng_rng_descriptor.c
96342e249d7c747d11849bf1a4a2cfa99139134f - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_find_hash_any.c
233015470408b5b2e38773c5b1127762f545a856 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_find_prng.c
dd27864633e7f1746e256cc07e47437bbbb4bc97 - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_register_all_prngs.c
d4220e04397554fa19428f3ff33ebc5b80d93d7d - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_find_hash_id.c
63d0675dee46f130dd505b9ef11305f66b51d5ef - optee/optee_os/core/lib/libtomcrypt/src/misc/crypt/crypt_find_cipher.c
eb9ee827d87cbf5ee6013ea99a318a0e5c477a57 - optee/optee_os/core/lib/libtomcrypt/src/misc/base64/base64_encode.c
b4f980accf155a8df885c69266a8b2154992181a - optee/optee_os/core/lib/libtomcrypt/src/misc/base64/base64_decode.c
4b83b978826b5dc7e68898bde8d396e51a73583e - optee/optee_os/core/lib/libtomcrypt/src/misc/pkcs12/pkcs12_kdf.c
c2fe66c77a5e4ba8a09979753ec8fa3b1c9530ae - optee/optee_os/core/lib/libtomcrypt/src/misc/pkcs12/pkcs12_utf8_to_utf16.c
1d1ff4347844de6a3d1d111125194a55c55cf30e - optee/optee_os/core/lib/libtomcrypt/src/misc/padding/padding_pad.c
3c3c7ed1c6223f40663fab3cc95afff608de638c - optee/optee_os/core/lib/libtomcrypt/src/misc/padding/padding_depad.c
1a73cc544c8c9a3bb0d77497a5a92900c5acef58 - optee/optee_os/core/lib/libtomcrypt/src/misc/base16/base16_encode.c
e6d0978d88f10edcb4164e550bac09364d5a72e2 - optee/optee_os/core/lib/libtomcrypt/src/misc/base16/base16_decode.c
5e2328959d1d9fa3dfe651bc8390f56e97cfeeb9 - optee/optee_os/core/lib/libtomcrypt/src/misc/pbes/pbes.c
8ea5fa890004eae1957192d67e017a2f68ad820f - optee/optee_os/core/lib/libtomcrypt/src/misc/pbes/pbes1.c
e0622cab6f654c9d78768c0037a71e91c7c904d8 - optee/optee_os/core/lib/libtomcrypt/src/misc/pbes/pbes2.c
6b7496efa00caecdbe62a0a85ac0ac8b7a637d57 - optee/optee_os/core/lib/libtomcrypt/src/misc/ssh/ssh_decode_sequence_multi.c
c4358185ba5065835930ee61ba2a16b58ca7c063 - optee/optee_os/core/lib/libtomcrypt/src/misc/ssh/ssh_encode_sequence_multi.c
779555900035522f3dacfa9d8dcb18c310e78d2e - optee/optee_os/core/lib/libtomcrypt/src/misc/hkdf/hkdf.c
78d7c916e74e8dba0076ccd8a784ef784d2a3473 - optee/optee_os/core/lib/libtomcrypt/src/misc/hkdf/hkdf_test.c
cbc194b08bb465a7b3cea249824712fda8857789 - optee/optee_os/core/lib/libtomcrypt/src/pk/x25519/x25519_import.c
f2e15ff205094f5a30ffd289282806adf3bfa02c - optee/optee_os/core/lib/libtomcrypt/src/pk/x25519/x25519_import_x509.c
812929f4e13a575e58aeceea8cd3c5db95ab2189 - optee/optee_os/core/lib/libtomcrypt/src/pk/x25519/x25519_export.c
0672fb6756a04c5eec2b963d2b2e9798f5d94c5b - optee/optee_os/core/lib/libtomcrypt/src/pk/x25519/x25519_make_key.c
8c6f5460141c1ee2b6fe1887243f5ee6ab21da0e - optee/optee_os/core/lib/libtomcrypt/src/pk/x25519/x25519_import_pkcs8.c
a9ba477ca5b2713fbf6217fa2b25888a448773dc - optee/optee_os/core/lib/libtomcrypt/src/pk/x25519/x25519_shared_secret.c
9e8045a9b7b85a4fd345a8606dda5a4529102a84 - optee/optee_os/core/lib/libtomcrypt/src/pk/x25519/x25519_import_raw.c
8d59b1b306078e34f08e267a5aa226debdf7551d - optee/optee_os/core/lib/libtomcrypt/src/pk/ed25519/ed25519_import_x509.c
e428a8a7e8121639e668ea708f09f5a768e4d12e - optee/optee_os/core/lib/libtomcrypt/src/pk/ed25519/ed25519_import_pkcs8.c
26547d5e1492512ed28376c853daeed24108f559 - optee/optee_os/core/lib/libtomcrypt/src/pk/ed25519/ed25519_import_raw.c
d06add7d54e686364cb1d56bc5c23a69c71597c3 - optee/optee_os/core/lib/libtomcrypt/src/pk/ed25519/ed25519_import.c
7fa48553c905b29d4a54176091d6fce2114399d4 - optee/optee_os/core/lib/libtomcrypt/src/pk/ed25519/ed25519_verify.c
3e1ac45da9df45134fb091ec1709d5464f79d2ef - optee/optee_os/core/lib/libtomcrypt/src/pk/ed25519/ed25519_sign.c
3c7f07f8405b9f895d89a3ea2090632df8c19cc8 - optee/optee_os/core/lib/libtomcrypt/src/pk/ed25519/ed25519_make_key.c
bca50dcf7601a449f350e48f0db458f6e0377f15 - optee/optee_os/core/lib/libtomcrypt/src/pk/ed25519/ed25519_export.c
f527339cc3a30c2b3135771f132f79c94331a0d8 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_import_point.c
1931064b040780af5b1dfe453878c4cffbec7c7d - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_sign_hash.c
c3b19e86b94901366e718206c46cd3cc4432b417 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_decrypt_key.c
cf05860092837c42f574e893b097a13b3374da04 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c
b818e0a65fbcb65e56211555e7979eb98ece81a0 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_export_point.c
966e686fb8e1225167a2e3a7c6df50b0540fa9c6 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_points.c
3e64593819f63544e4b0a5e7d7aca57eb34eade6 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_ansi_x963_import.c
5b57ce74997f89ba8f1107d442aca33bb2dc01e4 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_import.c
fbe398aee3a10e7dcb094e86282410752aa1a8b7 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_set_curve_internal.c
df15dd31ef7691042508e5eb5a7963483113cfc1 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_encrypt_key.c
a5205a7b0f315b2ebe0a2ced975772f8a1057571 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_is_point_at_infinity.c
d8f5cf749289d6a9c685c94b34909b764e1d7689 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_import_x509.c
1c00b1e26aaf1253c27c4f23b98535e45a041610 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_shared_secret.c
280c3e6ecb5e86ef00f694afb173a251ce58babc - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_find_curve.c
015e8b1e8df2b67df5666581c49ed3b443a17ebd - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_export.c
8149696ce9b92edc4b72e701857542c66a19265d - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc.c
1a11b95c51b4280fc073baaebd5f749bf0b623c0 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c
b1285aa85f707bd46b815f2a877d32bd8573987d - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_ansi_x963_export.c
3d40ea26644fd6508ffb96079716f2b9d41bf322 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_get_key.c
fe473b8190607030112719eb24493f1941c3e619 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_export_openssl.c
0287f0fa69106c0067f42dcf123ce01e29d98031 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c
1860b05d1e6d84e49e6bde6665be70d81cc9c8a1 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_get_size.c
4204640f642d5ddb2df36d5eb318b13aed778172 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_map.c
450bf440ad3be5053c0d9c6d7926d5cdcd9714be - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_is_point.c
b482130a4f79e28597bcb38ab42cff07c19787a6 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_set_curve.c
450616e20f9d56c11a1adb892a3645a93741b105 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_verify_key.c
6b5a515a99122e80c6c6b9aa06a86e21ee73b3fa - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_get_oid_str.c
c5c1644f8bcfb94a1e9dc96faf3657ba2ebb4266 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_ssh_ecdsa_encode_name.c
f03fb73a557258c6ea41d3193cd6bd750a62245e - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_verify_hash.c
4703d1e4bec1f70e5e1b17f15db6ee3a4046b47c - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_sizes.c
b51764d8bd42b7561f41b8a977e021f720d461f6 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c
bf20409e528c89116d228521a61e12ec29b6b8e5 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_make_key.c
42aa854ffcb3552db4fb57796569ea830db3d9e1 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_import_openssl.c
ab9fb09dcacdea6b791441c5053f53f049ad5909 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_import_pkcs8.c
c8932926feb1db7458a4121747277fbf302deca4 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod_timing.c
96db40ce102160544ab24dfd2a14926461815e18 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_set_key.c
1fb03ce919d517f2cdd83c378d731a39ff656df8 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_recover_key.c
257ac82c33135561dfe7b5c7edecb5a2d0cdf7e1 - optee/optee_os/core/lib/libtomcrypt/src/pk/ecc/ecc_free.c
f547d958caecd824b0b17b1355530bcc788c20ca - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_shared_secret.c
2893671ff36eba57509da1721ac9e5cf8567b6db - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_generate_pqg.c
272952cb667172cf8fba5e852b5b8147d03f3534 - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_make_key.c
a55666907f63f401c00cfa793eac033bc2226339 - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_sign_hash.c
0803f50e230a9797701852fd02cdc9821544fa74 - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_encrypt_key.c
b6d3f3a6c24debd170f1ec62a74d682113250cff - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_free.c
379ef3ee8c2987d4d0f6cfaba764b98b86a55e66 - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_import.c
4b2dbab5e2aa90bd324218ea5674fef8777f8473 - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_export.c
bb5f98cabbead6be93d785dcc286f45498d5c0c9 - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_set.c
b2e238370d7a369638a2b76d7c64b726f3eb53eb - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_decrypt_key.c
3b82a4885c17b3d11eae9d1f870da34e6cae9f0f - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_set_pqg_dsaparam.c
b0a3bbbaf6fb172cc402a25cfd4114abb554850c - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_generate_key.c
fa3c683b57ff8087a2fd90fb5c6accf72d63ffd8 - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_verify_key.c
7da5513cb4e6ebca0d19c35d74509deb172ebac6 - optee/optee_os/core/lib/libtomcrypt/src/pk/dsa/dsa_verify_hash.c
9c29bb5f9a40d49dc22a8b7c3f62c2fb6930eec9 - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_shared_secret.c
2517e59c7961fc7b73ed472569df670355137213 - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_export_key.c
952b34bccc6c1b05ad9de3bcddb1cca3b46b4e58 - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_generate_key.c
e304ed0a492309f8b0055a4e147f87970fdf38bc - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_export.c
82232e2e87681ab9ba1ecb3a51e964671eeb710a - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_make_key.c
d32c3211c9738e6edeec863035ebddca34d496fe - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_check_pubkey.c
a1886213cc203cfe7e6ef49271838e7d967f53bd - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_free.c
ec26e921ae1e3e3d36d45dc1e9485f2ce7793529 - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_set.c
3f0628db016f76777bae6ec89728511a7cb6cfa5 - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh.c
fb90bf4aa59ee4d6f4371b1ed062a7efdf83462e - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_set_pg_dhparam.c
af78940c2ff22884837509d7ba94f767ac3af81e - optee/optee_os/core/lib/libtomcrypt/src/pk/dh/dh_import.c
497f17fe5647c4f47ecbb4b27498942fd9a28c46 - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_encode.c
d6f41abaa485748acbf4172efd72a636a9576bf4 - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c
7a444c752e2d4df2d1384ce8f9a56dff42a02347 - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c
7bb1feddfc1ba6fcb69cb4ef537c5a0dfafb8d1e - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c
fa6b0f40cef3e152cec36c4ccd8d895e10dc60ca - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_i2osp.c
52196ad7bd8608ef5e17452c51b77b8cd52d2da5 - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c
7e7beaf2f29e72101e3ff7ff9cde8d32af8b6305 - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_os2ip.c
f97b4369ca4a6cee89a277cd05e60345fcc88377 - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c
357e06818540426a6b09b30b6265482454ba9342 - optee/optee_os/core/lib/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c
efb086030db7d8223ec9f72497920413fe5b9cb1 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/oid/pk_get_oid.c
d6404b3d1b805e9236eb4d91f784191692cb4f3b - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/oid/pk_oid_str.c
65c73948627beeb228b285cceb082340770d5dd1 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/oid/pk_oid_cmp.c
5cff49720c80fe773da512a51dbaaac7ef7a8eb8 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/pkcs8/pkcs8_decode_flexi.c
0fcf9b8d13534b36c44fbab36118578551653494 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/x509/x509_decode_public_key_from_certificate.c
fde5cba0f1fbdcfa0af606a17b90c2ece77fdfee - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/x509/x509_decode_subject_public_key_info.c
2e7715416f0b9b81765354e9b71ac389bc674bdb - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/x509/x509_encode_subject_public_key_info.c
293602536ba7b834455b4c780710a8f1a5ebb8dd - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/choice/der_decode_choice.c
e9d1241660244c310419ea1378b9ae323a7ac61d - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/general/der_length_asn1_identifier.c
5ae066c005e04dc7f013a783713675e77547f565 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/general/der_length_asn1_length.c
d82b04231f128724960a64f0099c8af38548d2d7 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/general/der_decode_asn1_length.c
61c080828e48973c7e450aca6d6e998b893001fa - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/general/der_asn1_maps.c
7a3773c30383a7999306b37627b17630b85eddf1 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/general/der_decode_asn1_identifier.c
18ca4c581baeb6b0fc04572980c8ff2c540588f1 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/general/der_encode_asn1_length.c
6d28b44c01e719209cf6726c110c6b0601e3ba50 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/general/der_encode_asn1_identifier.c
68eec4e51f85b64ed0e06afe403d6ee6abf6bfff - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_multi.c
a7b946cd6b295689424236da73d54fc655198723 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/sequence/der_encode_sequence_ex.c
c5977a968d09b999595cf145d3429a62599ca661 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/sequence/der_sequence_free.c
c5afb98910058933befdad2cd3ffe41bbbb0dbaf - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/sequence/der_encode_sequence_multi.c
e597c83e6003b94ef2d3664d81d39ef668416724 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_ex.c
36b1d4df09d77914a9621e323848927e19b9e482 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/sequence/der_length_sequence.c
3547f3191ec66412dcb8347be374eca128c03c11 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/sequence/der_sequence_shrink.c
3f88ac6537d7ca25044f3f78cae5b102c942b252 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c
24de714f216931c3f599fc8d1e2deb86c21b847d - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/bit/der_decode_bit_string.c
df1aa22c0a11a444fa3e307b084eb35b6d651a88 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/bit/der_encode_raw_bit_string.c
291e2e946e23e0e29c802af28ecfb68aa74a3179 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/bit/der_length_bit_string.c
2da5ad73ec9c0ef261a7a06266369434fbeddc4f - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/bit/der_decode_raw_bit_string.c
9a3485d1bfab9d30eaf363de36eddaec1464396b - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/bit/der_encode_bit_string.c
f3830f9b7b3e4c414480974538e07a107e11eb09 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/octet/der_length_octet_string.c
6040a83b18f15c48008263edc7586ab2682a2650 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/octet/der_decode_octet_string.c
e45dcd69212ceaa620d3a68584c8cc3d8d7d7abc - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/octet/der_encode_octet_string.c
be4a439c97860d7aaf286c7ff16597491596101f - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/short_integer/der_decode_short_integer.c
3ed9c426a6a4649858e87dfe5a61277fc5aab712 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/short_integer/der_length_short_integer.c
f387f820036c9bddff6210310aafe78d14e6c4f6 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/short_integer/der_encode_short_integer.c
8412b0b3c04480ca5f376fefe953156f97d32d51 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c
769cca541575ba36865f25e1673640cad524581b - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c
8a688cc8917314414fb10e6bf7557ac9b22f42d6 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/object_identifier/der_length_object_identifier.c
4ab4dd3b5bbbb87afcfc52966eb024bb4d0c8234 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/generalizedtime/der_length_generalizedtime.c
52132cd7a799e297b872a524bda661601b33e5a3 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c
e50711035dcfcaa4d0c1fc32f433be0aa8d98689 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.c
936665f6f7b82de8a75f7dacf79c241a0e2a531e - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/utf8/der_decode_utf8_string.c
424afeec6f07fd7906055c91c9951d455c69033c - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/utf8/der_encode_utf8_string.c
715c09b19bbef0a9d89511be2ba47db3eb184457 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/utf8/der_length_utf8_string.c
ea6f9fec8d29d2a40e34eca954bf19601646c1fb - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/printable_string/der_length_printable_string.c
aafed90e2fb679630e5f4234ead1dbcc220b5ca8 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/printable_string/der_decode_printable_string.c
c9b6246d4dfd821f49c4cfb15b0b6bc3414d69bd - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/printable_string/der_encode_printable_string.c
ddc24ebe07f30aff933f0dcacceca877f7a8c912 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/ia5/der_length_ia5_string.c
28a82e82ca20ba6d4ef0d5d0da2afd9994aea550 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/ia5/der_decode_ia5_string.c
3fc70309a59d43216aa49ab5477df50823a97232 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/ia5/der_encode_ia5_string.c
f65972e7e1e35ea9bf3c750f6d2fbd3c22de8df1 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/boolean/der_length_boolean.c
2c41e8e870f523500c8fb60f9d88b90dd079c9ab - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/boolean/der_decode_boolean.c
b85ec531d4f44b87eb3be27290a2aaddc246d62b - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/boolean/der_encode_boolean.c
cdc82def06cef9eb373fb549f277544af32d2d40 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/integer/der_length_integer.c
ad22ad01c3f0cfb81fcc6eb155f0e48df5223102 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/integer/der_decode_integer.c
bdfcc0fc58006df5d8906f179fb339eeece8a99d - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/integer/der_encode_integer.c
13994ec081d65c83c2a411ecce60211f79aa7f8a - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/utctime/der_encode_utctime.c
9d6bf8a3d490c881c022ec153b9dfd96d4798be1 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/utctime/der_length_utctime.c
5c2277093dc1c4f2d6b877f924200805c950e697 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/utctime/der_decode_utctime.c
3ca43288d74863f2acf8e0553554f4110d572e56 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/teletex_string/der_decode_teletex_string.c
c66a829d9f1a1a0e936357a82b563385c99b38f3 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/teletex_string/der_length_teletex_string.c
14c0def6fd0434658f7eaf3957ddf4b582c35d4c - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/custom_type/der_encode_custom_type.c
cdbe2378f68d5da22b7a94428334cb11343dd5ff - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/custom_type/der_length_custom_type.c
6dc60f80f7af76c0a1b5992f03ddea0435b439ec - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/custom_type/der_decode_custom_type.c
ca628b8ab6300f40be2d696eb9c06cec680f4e87 - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/set/der_encode_setof.c
1292bcd4021db8959c6d5042550705be1b170daf - optee/optee_os/core/lib/libtomcrypt/src/pk/asn1/der/set/der_encode_set.c
979846f85b72946ff810edf5eafeca166d4283fd - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_sign_hash.c
47347830be6ee382ced26f00e0be055570804c49 - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_sign_saltlen_get.c
67055fc35186b6aa83df93e46da7bcbbe92b1f5c - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_set.c
41df11b40913dcd9ec153132f10f527896611190 - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_exptmod.c
94fb2295b17b0d88234119fb717d678ec352c9d1 - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_get_size.c
9a424e42fb17d230990378f002faa44cd171738f - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_make_key.c
f2c261f8d11b655fffa62611df185f07101771e2 - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_decrypt_key.c
071f6f93d133ca61acdffd03ca03180bd812032b - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_export.c
f44f8cbf3a71579e53a8aa7aecdbdea1647b4caa - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_verify_hash.c
114a91fc4b289c3860a0076f1f72b8a9c616b404 - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_encrypt_key.c
87a49a80c12d41e8594da7524050eba34e5f96f0 - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_import_x509.c
a47196953806fe0b060f66e17a9f5c26db46a788 - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_key.c
9f43d136949b104d186b32b4e272ab71212d140b - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_import_pkcs8.c
32efc4a6c51bd46b2e5123cff17d55cc8560d582 - optee/optee_os/core/lib/libtomcrypt/src/pk/rsa/rsa_import.c
131a94c18f4c6d67111f71772ce64e30b214b7c6 - optee/optee_os/core/lib/libtomcrypt/src/pk/ec25519/ec25519_crypto_ctx.c
6b929f3726cb35da15b614abec49720f238e0b5c - optee/optee_os/core/lib/libtomcrypt/src/pk/ec25519/tweetnacl.c
bbaf6a67e160f4064a99efb50a56e264bcd9722d - optee/optee_os/core/lib/libtomcrypt/src/pk/ec25519/ec25519_export.c
406b6b0422373c9c2a3c3f85df960bd5fd4134d8 - optee/optee_os/core/lib/libtomcrypt/src/pk/ec25519/ec25519_import_pkcs8.c
4107a71b931755873657a1db5c1d361d3baad0e5 - optee/optee_os/core/lib/libtomcrypt/src/math/radix_to_bin.c
0519f4dfb1ed6bcad6119da63132e2cb99a1ed77 - optee/optee_os/core/lib/libtomcrypt/src/math/ltm_desc.c
2ca00d67d4090191db790a545cd86d609c5678eb - optee/optee_os/core/lib/libtomcrypt/src/math/gmp_desc.c
9974963705cf2ee6ede4a5f04102ba8237fe707e - optee/optee_os/core/lib/libtomcrypt/src/math/tfm_desc.c
64535e883ae11fec86629844a95e9c1d7f02a486 - optee/optee_os/core/lib/libtomcrypt/src/math/rand_prime.c
6eb1e1c16c036e2717dc3ab41e98acde07da53a8 - optee/optee_os/core/lib/libtomcrypt/src/math/rand_bn.c
829f687603d1caba9543ddddb56af948b6a6369e - optee/optee_os/core/lib/libtomcrypt/src/math/multi.c
684b6615e27bca391cc30aa4f10b43cb695aaa42 - optee/optee_os/core/lib/libtomcrypt/src/math/fp/ltc_ecc_fp_mulmod.c
eb37e780cdfe0dbafb29c0fa8629125c6e19bd6a - optee/optee_os/core/lib/zlib/adler32.c
edf93d4bfb11950ac75aade2faf0bf05d0aaff47 - optee/optee_os/core/lib/zlib/zutil.h
ce569e81ab26f5eb8d922b18be6561af7876c4e8 - optee/optee_os/core/lib/zlib/zconf.h
5121bcf9ae9f1eb58b39c4debbc5931e5be16434 - optee/optee_os/core/lib/zlib/inffast.c
47e5da9b88163c7194af9b7b6a17fb46ca08b009 - optee/optee_os/core/lib/zlib/inflate.h
341003df806d2bcfcbd194fc3f9da99919b918a9 - optee/optee_os/core/lib/zlib/inffast.h
8770ab43c9050b824c646f6e6cee8b3c0628cbda - optee/optee_os/core/lib/zlib/inffixed.h
1e0b1438feffed910661d48b2b793a5f7c308f06 - optee/optee_os/core/lib/zlib/zutil.c
00b226f75f6beab393031f6893b2868c707d0d0c - optee/optee_os/core/lib/zlib/inftrees.c
206b2054814df6c3f42f29c045d584c6a25c462f - optee/optee_os/core/lib/zlib/inflate.c
4192c931405d13fabed42ec8725255502d35fbcc - optee/optee_os/core/lib/zlib/zlib.h
8139ab5dd86e53ccbde7ba4e78200db4cd79f9a9 - optee/optee_os/core/lib/zlib/inftrees.h
36c4f51e48f8320621c5739dd2ee69ef0d973a21 - optee/optee_os/core/lib/zlib/gzguts.h
79b1451ee0197c749cd4f07450ed2d374f1c3cee - optee/optee_os/core/lib/scmi-server/scmi_server.c
619aa8e61beb89b2df060ca24485432e8269b5fd - optee/optee_os/core/lib/scmi-server/include/optee_scmi.h
9745dcf314a1209a91ff9ec08ba8fab26efe87b9 - optee/optee_os/core/mm/core_mmu.c
26e88dcbc2b3904a4ad12db8a44e660dbc3d82f9 - optee/optee_os/core/mm/mobj_dyn_shm.c
b340c3b6298c38942d30fdc72ad98b6fb0364b7e - optee/optee_os/core/mm/mobj.c
91fea146f73afe57067c1840d23f16cafe4b9080 - optee/optee_os/core/mm/phys_mem.c
79f610822c797ae90f3f9a64ce5ca55dcbddb1a2 - optee/optee_os/core/mm/tee_mm.c
5bb666747233b1e7ba21f0b5d72296f52c8f47a7 - optee/optee_os/core/mm/pgt_cache.c
efc223b94239a55134bae118c9e9004a6afd46ce - optee/optee_os/core/mm/fobj.c
e7f04184eddb0da4969adfcbd5dd4a378d087fca - optee/optee_os/core/mm/vm.c
4c81a53362b3a07b1dabb5a197f0e3ec26117bee - optee/optee_os/core/mm/file.c
06d4ac49555aa30994b40bfda216db4b5b89c6f9 - optee/optee_os/core/pta/device.c
b137817eff91658d19d1a479dee6a84dda10ccbc - optee/optee_os/core/pta/attestation.c
3ea15c610f4ecba8788d1055a06e13c3b6aeea5f - optee/optee_os/core/pta/scp03.c
4b7b26064a5527653817507ced6b5d36e09d75dd - optee/optee_os/core/pta/rtc.c
14015171ba8ab23dce63f6011ecd0899f08137c1 - optee/optee_os/core/pta/hwrng.c
4e1b614df9067b7a1f2158f1d5111c1925483f9b - optee/optee_os/core/pta/apdu.c
6a748b8c571c2b207c9db79b56b491192bf22379 - optee/optee_os/core/pta/gprof.c
a479d607c3f4dcbca4d5d1e9797340ef6e59131d - optee/optee_os/core/pta/scmi.c
b07d570bacd753a4f6c4ddd3730017971f2f9d85 - optee/optee_os/core/pta/widevine.c
8f532c3b41d08bdbee29cdf99e831e9a5652bd71 - optee/optee_os/core/pta/system.c
6284c967a1103f26724ff4dfe45af409bfbbf948 - optee/optee_os/core/pta/secstor_ta_mgmt.c
15a7ee5dd4dba07167c51ac386a3d0565ed5a250 - optee/optee_os/core/pta/stats.c
4c4029f19bf83df309ffd54d9d525c327ff8a7c7 - optee/optee_os/core/pta/tegra/jetson_ftpm_helper_pta.c
f7256bc80d990a17e22c20c56b6050bd825dc65e - optee/optee_os/core/pta/tegra/jetson_ekb_extraction_t234.c
6a9495b8d9a5ef860b8c6c1591aabad947551474 - optee/optee_os/core/pta/tegra/jetson_user_key_pta.c
ef7b27256ccb7e4f5531bed99fc26d4dd8da5923 - optee/optee_os/core/pta/tegra/jetson_ekb_extraction_t264.c
c458af77e9829c134c5609ddcd0f3f2176c8e89b - optee/optee_os/core/pta/tegra/jetson_decrypt_cpubl_payload.c
61e41903c9172303b5313ecd61195efe562748b9 - optee/optee_os/core/pta/tegra/jetson_nist_sp_800_108_kdf.c
c6098cf02a47b98b90403b904c033bbb03c964c0 - optee/optee_os/core/pta/tegra/jetson_ekb_user_key_management.c
e17f8591f379b0c8194c7c7fff427efc4b846e35 - optee/optee_os/core/pta/tegra/jetson_ekb_extraction_t264_hw.c
2559eddefa8b67e60750a927eceb24ec8c49ed18 - optee/optee_os/core/pta/tegra/include/jetson_ekb_extraction_t264.h
f8dbc7300a034d838058e5035113ea8bd8dec018 - optee/optee_os/core/pta/tegra/include/jetson_nist_sp_800_108_kdf.h
7f88e9ee7d631237e3a59cc0756a180ac2fcf954 - optee/optee_os/core/pta/tegra/include/jetson_decrypt_cpubl_payload.h
c527ed81dee9ab0a7262d28f7a7318bfb152c4da - optee/optee_os/core/pta/tegra/include/jetson_user_key_pta_ftpm.h
434dbf013ffa6633ede1816527dfb82782c3db0d - optee/optee_os/core/pta/tegra/include/jetson_user_key_pta_compute_cmac.h
24681ce5899d9e38d3d6fed93fdb25509a161e74 - optee/optee_os/core/pta/tegra/include/jetson_ekb_extraction.h
a3e02cfcee8ad893bff9098adb3b0b55c2b8baf5 - optee/optee_os/core/pta/tegra/include/jetson_ekb_user_key_management.h
8c32652450144f8d62ba455a35cede26cedf44c3 - optee/optee_os/core/pta/tests/fs_htree.c
598beefd2c0b1d1ed3caf79b7ee3f6fd4315b410 - optee/optee_os/core/pta/tests/mutex.c
58a21a5d072a642b4650c67cc299e210a254d9fb - optee/optee_os/core/pta/tests/dt_driver_test.c
9d5f604852b526c4c03348962f3d622ead341452 - optee/optee_os/core/pta/tests/invoke.c
773d0fc2245c86d75271917a6eef93910cd5a5f2 - optee/optee_os/core/pta/tests/misc.h
a27586aab31e93cb9ce669c13e202c989d6f3e00 - optee/optee_os/core/pta/tests/lockdep.c
1828d31f10e6236e1f4f6c98f71f34b61827f092 - optee/optee_os/core/pta/tests/misc.c
b939d0c32959ac65dafe67f6019699ab4f194d94 - optee/optee_os/core/pta/tests/aes_perf.c
f76d93f72808e78fe854329128254e40a8ae64ef - optee/optee_os/core/pta/imx/digprog.c
9c77709e56621860013c067a19359bd3f2fb621c - optee/optee_os/core/pta/imx/manufacturing_protection.c
1141e0df408fb0977880fbd63e8a1575a2a81e8d - optee/optee_os/core/pta/imx/ocotp.c
fc52da8f6cfc83dc3606768cd703affc8029c2df - optee/optee_os/core/pta/imx/dek_blob.c
5b825d9894d2ed56396b487aaa3d994d6860b837 - optee/optee_os/core/pta/k3/otp.c
83d3b7f9616db0d5e42b621f55691ec5d505b4dc - optee/optee_os/core/pta/stm32mp/bsec_pta.c
8e4201b982761ca70f6155537299a9fbcdd9555e - optee/optee_os/core/pta/stm32mp/rproc_pub_key.h
a48431678d25d8e232d1ec7de95ded0618963aa0 - optee/optee_os/core/pta/stm32mp/remoteproc_pta.c
5d347d3376095cbc05c1ae47cb6d4ac6f74ef5b5 - optee/optee_os/core/pta/bcm/sotp.c
3a98f4eae781f4b50887b79395cb6cefbf957df3 - optee/optee_os/core/pta/bcm/gpio.c
92265a3a661a4862d09043e5c3ed8787895b4d23 - optee/optee_os/core/pta/bcm/bnxt.c
8accf96a33e318180c18fd79729c3476c4e4a567 - optee/optee_os/core/pta/bcm/hwrng.c
c53ce6db2d7519d9bd08c02472fe525fbb768a6c - optee/optee_os/core/pta/bcm/elog.c
1d96880636f5a98568edf08f68e5e4b38291da17 - optee/optee_os/core/pta/bcm/wdt.c
7062c01f0887a0bf79bd9049d3a867efcc6bd983 - optee/optee_os/core/tee/tee_cryp_utl.c
ecb2d26f414109ce193325dc9c4aa0f51e6e81a9 - optee/optee_os/core/tee/tee_nvme_rpmb_fs.c
eac131f75ecb948ddc89b2dc45434a858fce6bbd - optee/optee_os/core/tee/tee_rpmb_fs.c
40a7130c87b8874c0ff3df4ba6d7ac5ecc7010a1 - optee/optee_os/core/tee/socket.c
3be470d597c40bff1ed4641b735cb7fef3dce6eb - optee/optee_os/core/tee/tee_ree_state.c
e8ee3f02aee406877da4da3ff36dacb130cfab40 - optee/optee_os/core/tee/tee_time_generic.c
a2028063632c8857bed15d993063a7fd353ee9c0 - optee/optee_os/core/tee/tee_cryp_hkdf.c
a1f3d00831693e2b21465993a0b88230998270fd - optee/optee_os/core/tee/fs_htree.c
8462217cd1216cdeb47261930203db704ccd4ed7 - optee/optee_os/core/tee/tee_svc.c
0cdf747942eaeec2f670e600d773b8d1143cc2e8 - optee/optee_os/core/tee/tee_fs_key_manager.c
824206b75fb124ca56b26f25d6447ef04cf39e0b - optee/optee_os/core/tee/tee_ree_fs.c
53578bdbeb3107e8113102750cbc8d8861701bf8 - optee/optee_os/core/tee/tee_pobj.c
b72b18f8590456f881d82b018b45addfddd37668 - optee/optee_os/core/tee/tee_svc_cryp.c
bbd20680e1d41ecf7f806411c32f0eac33c860f9 - optee/optee_os/core/tee/tee_supp_plugin_rpc.c
8fabba1dda1dee9af15b514f65afdae49ba948ff - optee/optee_os/core/tee/tadb.c
dc4bbc967130baa858c0d97bb72c8d16aeb961d8 - optee/optee_os/core/tee/entry_std.c
fc58bf53b6b42bf286bd64683b86c6d31dc3a517 - optee/optee_os/core/tee/tee_cryp_concat_kdf.c
4ca9c10d9b17380efab8d45d2de31948c98a16e5 - optee/optee_os/core/tee/tee_ta_enc_manager.c
e59e39dfb4986541318ae84e47f44e52afa20b12 - optee/optee_os/core/tee/tee_fs_rpc.c
a1202328842c81639257318e2047a9e13b1802c0 - optee/optee_os/core/tee/uuid.c
dd81c49e2b9da8f822e7246d08cecde9f28fc2a7 - optee/optee_os/core/tee/tee_cryp_pbkdf2.c
0e45f2e22d16c49209c9b5aa27e3b02da67881ed - optee/optee_os/core/tee/tee_svc_storage.c
ee7b25818bd52227343d7f45f5ef5f725be9a89b - optee/optee_os/core/tee/tee_obj.c
d18ce49edc69a8027687b7b43c5d4d36c33cfac3 - optee/optee_os/core/tee/fs_dirfile.c
0c3dfda5a958deb554e3541a98a276b8b65e5bb1 - optee/optee_os/core/arch/riscv/mm/core_mmu_arch.c
a67134011a6bba88ca1207fbcbfe628c0ac0b4ba - optee/optee_os/core/arch/riscv/mm/tlb_helpers_rv.S
09aff971656616a8c01744b7993bbeb26494127a - optee/optee_os/core/arch/riscv/tee/entry_fast.c
9ec84b50b3eeab570b340944a845b34ead1d5836 - optee/optee_os/core/arch/riscv/plat-virt/platform_config.h
159322372864ce9f888c412d5d39c84fda99e290 - optee/optee_os/core/arch/riscv/plat-virt/main.c
5f83776d0c7ce64d6d01df485fd353b7d1d20699 - optee/optee_os/core/arch/riscv/include/sbi.h
bfc999579c41a856d84a282965e9b89ffba12903 - optee/optee_os/core/arch/riscv/include/riscv.h
1223e5cd29f4984ecabe36e78efe63b42f2bb84d - optee/optee_os/core/arch/riscv/include/riscv_macros.S
82a9adb9c55f82ea1cff3b22b3a25bea96f6dcb5 - optee/optee_os/core/arch/riscv/include/encoding.h
f90a39605a177515f57172f8bfcac31468bec502 - optee/optee_os/core/arch/riscv/include/mm/generic_ram_layout.h
af4673b11cd3cc383a0df94f2dfb77bc98d39b49 - optee/optee_os/core/arch/riscv/include/mm/core_mmu_arch.h
291fa9f4f92f4c42ffc5713f505e357cd3d7e9c1 - optee/optee_os/core/arch/riscv/include/tee/optee_abi.h
3e29f4f935b7151c6a16978c5c3d956c8b1d3be2 - optee/optee_os/core/arch/riscv/include/tee/teeabi_opteed.h
5eaa1cef4d6a42985aca8a8308f4f1f732ce71b0 - optee/optee_os/core/arch/riscv/include/tee/teeabi_opteed_macros.h
b66cd21c1e374e71627820cd3c2a6621a7212f89 - optee/optee_os/core/arch/riscv/include/tee/entry_fast.h
0c4cbba16aac1f17267a36ecda588756cfd3277c - optee/optee_os/core/arch/riscv/include/kernel/clint.h
f0b64d064566784ec25d2c4461f81160a58c9405 - optee/optee_os/core/arch/riscv/include/kernel/thread_private_arch.h
8cc637a0b1fa21930752c33d1cc58d647bc81179 - optee/optee_os/core/arch/riscv/include/kernel/arch_scall.h
fff633fe5887a82b806e8dc177a2c0440654ce56 - optee/optee_os/core/arch/riscv/include/kernel/stmm_sp.h
9fe08ff654da68413ec097e684cf2d6a39de3b56 - optee/optee_os/core/arch/riscv/include/kernel/misc_arch.h
b3be5129fb98824666e9dbe5734dd1f811ab97d4 - optee/optee_os/core/arch/riscv/include/kernel/cache_helpers_arch.h
359cfc0da1c4cc03f466ebe78020a796e736dd55 - optee/optee_os/core/arch/riscv/include/kernel/user_access_arch.h
0152544509ec093752ad771824add96b3ed7a04c - optee/optee_os/core/arch/riscv/include/kernel/tee_l2cc_mutex.h
e363a3270c54efb0764aceaa2210b94a552269b1 - optee/optee_os/core/arch/riscv/include/kernel/tlb_helpers.h
b7fa8ca503a4c669510829a0aa242d662cb674f7 - optee/optee_os/core/arch/riscv/include/kernel/delay_arch.h
9ff069cbffd055e8fc24029279eafec7c295b34a - optee/optee_os/core/arch/riscv/include/kernel/secure_partition.h
e72b64e02751a82394fa388b0434408d5250106f - optee/optee_os/core/arch/riscv/include/kernel/thread_arch.h
f4d75a0309e2040dbb1ca13717a13dfa6be01e03 - optee/optee_os/core/arch/riscv/plat-spike/kern.ld.S
b64add52a31a34c1bc9aa8643a3c024928f4ce0f - optee/optee_os/core/arch/riscv/plat-spike/platform_config.h
944299de7735a170cb3eccd15eec91c07a5e7672 - optee/optee_os/core/arch/riscv/plat-spike/main.c
359b98fad7ce1225b5fb675394acb32df9e74380 - optee/optee_os/core/arch/riscv/plat-spike/drivers/htif.h
558db749b68778acc836e96fc170bc823ab0e441 - optee/optee_os/core/arch/riscv/plat-spike/drivers/htif.c
09e09dcb96e69d3d3ea89c3997d9340fe33f53da - optee/optee_os/core/arch/riscv/kernel/semihosting_rv.S
53456fe6fd16922b93fddbb3e177d68557843d5d - optee/optee_os/core/arch/riscv/kernel/tee_time_rdtime.c
7cf9ae9e1a3ba9eb23abced5f96b199e2a9c7111 - optee/optee_os/core/arch/riscv/kernel/entry.S
ef752dba0afbc3441defa0ce7f596275e4eacdf6 - optee/optee_os/core/arch/riscv/kernel/idle.c
de03d1758884a3e0e0f7ea910139d312790963d1 - optee/optee_os/core/arch/riscv/kernel/arch_scall_rv.S
4504612ba77d3f930d3ccedd324c923ec6a1d099 - optee/optee_os/core/arch/riscv/kernel/thread_rv.S
b3ad33b5f5481b84a1a568cfec88d6bce78f4e40 - optee/optee_os/core/arch/riscv/kernel/thread_optee_abi.c
137070765c0c55bc0ad0e2a1c59919088ed69e85 - optee/optee_os/core/arch/riscv/kernel/arch_scall.c
0f43c49d2273009469484b2cc76a2b941e4d9d68 - optee/optee_os/core/arch/riscv/kernel/cache_helpers_rv.S
d7ea3b838aae7c777e6db63f192267e50bf10cec - optee/optee_os/core/arch/riscv/kernel/sbi_console.c
6529ac5d38c244cf27f9d8e5e5e2a36872e65cff - optee/optee_os/core/arch/riscv/kernel/thread_optee_abi_rv.S
93db7f5a163c236fb07bd70e33d583883e9aff59 - optee/optee_os/core/arch/riscv/kernel/csr_detect.S
c87b7a5f178adb2aa454f89910a299be58c05dd4 - optee/optee_os/core/arch/riscv/kernel/abort.c
0af1fbe21401d6e43ba28415b7d1f7fa1f6aa663 - optee/optee_os/core/arch/riscv/kernel/thread_arch.c
09bb73aadbc027bf0c91784c82d96b8499e399c6 - optee/optee_os/core/arch/riscv/kernel/asm-defines.c
0de310d21aaf90056a2327f208ed61a659cf483f - optee/optee_os/core/arch/riscv/kernel/sbi.c
df7133315b272219ed0615fbcd0b9f2770f8c32d - optee/optee_os/core/arch/riscv/kernel/unwind_rv.c
7f1c0c47cf8d4455d3bb56977982a34a008a7fbe - optee/optee_os/core/arch/riscv/kernel/spinlock.S
6309bad6a7c50cedfe6901944f520790b07f26b1 - optee/optee_os/core/arch/riscv/kernel/kern.ld.S
b91c4b1830ab97c0b3aa1ad536a39fce58680cc1 - optee/optee_os/core/arch/riscv/kernel/boot.c
3602fdd4fbf8f4c2ccb721b3c0f15d6328707466 - optee/optee_os/core/arch/arm/plat-rd1ae/rd1ae_core_pos.S
aaa528c1876627791b65ae8b418972aeeae3411e - optee/optee_os/core/arch/arm/plat-rd1ae/platform_config.h
100c43fb2d01f4004090f617322072996543d86b - optee/optee_os/core/arch/arm/plat-rd1ae/main.c
4e0482b88d52f8a7d6adf974d0e5015f13872f65 - optee/optee_os/core/arch/arm/plat-rcar/hw_rng.c
15d328d6ef35c2f6a4c4f5a69f4eb2a571802c1c - optee/optee_os/core/arch/arm/plat-rcar/romapi_call.S
29cb5b650192d2e9a8bc4b01921c70539825e413 - optee/optee_os/core/arch/arm/plat-rcar/romapi.c
9ca9f50ac43c9276ee67375c8e915f0827e349d9 - optee/optee_os/core/arch/arm/plat-rcar/core_pos_a64.S
b713d037582ce7c9f21402a91665b067ed931ff7 - optee/optee_os/core/arch/arm/plat-rcar/rcar.h
f8a2662937d568146b977cdedf2e268e5b1f6b6e - optee/optee_os/core/arch/arm/plat-rcar/romapi.h
e5ec049ffef670a29b7cade4d9d9f96abef549f6 - optee/optee_os/core/arch/arm/plat-rcar/platform_config.h
d99c2594d96797d631564d55d1cec73d69073a16 - optee/optee_os/core/arch/arm/plat-rcar/main.c
105fcd115c8f37f13c3f1617c6e564dce1a1a50f - optee/optee_os/core/arch/arm/plat-stm32mp1/reset.S
41fc0d480726ccac287c2341b62956a102d2b134 - optee/optee_os/core/arch/arm/plat-stm32mp1/boot_api.h
166fbca392a757857b207b6a39177ebdae48c2a1 - optee/optee_os/core/arch/arm/plat-stm32mp1/stm32_util.h
4cd706376b2b8e9f29529251f6e8dd0f97b45a2d - optee/optee_os/core/arch/arm/plat-stm32mp1/link_dummies_paged.c
7a02cc2b686285ca057686052ccf437bc2441e81 - optee/optee_os/core/arch/arm/plat-stm32mp1/scmi_server.c
b2bae4d35241a08ab393a13a463719aacabe7159 - optee/optee_os/core/arch/arm/plat-stm32mp1/shared_resources.c
5b41538b0faeb38ba559f5e71fc8c7fb4b808593 - optee/optee_os/core/arch/arm/plat-stm32mp1/platform_config.h
ee9a76fa832621b03cd35d4e26d326eb11e278aa - optee/optee_os/core/arch/arm/plat-stm32mp1/plat_tzc400.c
92c2966c3109fd535677e7f5a34fd89106328ea6 - optee/optee_os/core/arch/arm/plat-stm32mp1/main.c
8e7e39483872171d059e87be0b70594fb8a2abaf - optee/optee_os/core/arch/arm/plat-stm32mp1/pm/psci.c
a1238faa3df41c0c66412e3b032255e1cd4988eb - optee/optee_os/core/arch/arm/plat-stm32mp1/scripts/stm32image.py
0c65b2a9483053f11245b70f723294b6d32fea5e - optee/optee_os/core/arch/arm/plat-stm32mp1/drivers/stm32mp1_syscfg.h
af1241bfcd71e1d8950df5ee76e9cd120d9a67e8 - optee/optee_os/core/arch/arm/plat-stm32mp1/drivers/stm32mp1_pwr.h
f1cfb11d1e643d8118b07e9de2b36797b20c4cc2 - optee/optee_os/core/arch/arm/plat-stm32mp1/drivers/stm32mp1_pwr.c
6f513d1b2ba687dd8a5d3d5b3942d070b8475b3f - optee/optee_os/core/arch/arm/plat-stm32mp1/drivers/stm32mp1_syscfg.c
0a5b02ff39cea084c1bafb0169edd9f4a643592b - optee/optee_os/core/arch/arm/plat-stm32mp1/drivers/stm32mp1_pmic.h
a3ac99fd762c9216188d37d084dd70008fbe1199 - optee/optee_os/core/arch/arm/plat-stm32mp1/drivers/stm32mp1_etzpc.h
182812f03c650473c1724405b23d92f5fa76ae2c - optee/optee_os/core/arch/arm/plat-stm32mp1/drivers/stm32mp1_pmic.c
4e92814caf4d208f3424697ce4a54cbceba75632 - optee/optee_os/core/arch/arm/plat-stm32mp1/nsec-service/stm32mp1_svc_setup.c
536663cb01d75d67a4021fe8314c5ae79909dbd8 - optee/optee_os/core/arch/arm/plat-stm32mp1/nsec-service/stm32mp1_smc.h
e7ec6cb3b0018db5664ccd87d3ab1529e5d5713e - optee/optee_os/core/arch/arm/plat-stm32mp1/nsec-service/bsec_svc.h
d335d9bb50b2453d365ca88f3f18520fdd0a1086 - optee/optee_os/core/arch/arm/plat-stm32mp1/nsec-service/bsec_svc.c
81eaad1a97f464cb81867fe716edddc6a94c14a2 - optee/optee_os/core/arch/arm/plat-sam/platform_sama7g5.c
a16c1ca64f908b47b0dd855cd7b92c801726fc88 - optee/optee_os/core/arch/arm/plat-sam/sam_pl310.h
b04aabae313af1ab007337548c8d3c3340147467 - optee/optee_os/core/arch/arm/plat-sam/sam_sfr.c
05ae55b82f1b86db41cd5dec856b760b9cbac2db - optee/optee_os/core/arch/arm/plat-sam/sam_sfr.h
6bb95a72f4df9441141153c1f593d952cdbd5088 - optee/optee_os/core/arch/arm/plat-sam/platform_sama5d2.c
ebc03ae9a949a241b4d710523993f63450a5262a - optee/optee_os/core/arch/arm/plat-sam/sam_pl310.c
c85debf71cacdc0e53e262424984cec5fece885f - optee/optee_os/core/arch/arm/plat-sam/sama5d2.h
66bba258091108cedb62f43234a3e9fa874dbd85 - optee/optee_os/core/arch/arm/plat-sam/matrix.h
c6124d9de9443cdbc216ffbbe7eaa083e321867e - optee/optee_os/core/arch/arm/plat-sam/matrix.c
d452ceba090437688ae1658171bcda10e43263b4 - optee/optee_os/core/arch/arm/plat-sam/tz_matrix.h
118daaaeec1ce2b3578d162230ffb2fcd2180b23 - optee/optee_os/core/arch/arm/plat-sam/scmi_server.c
cb565968e3bdcd440dd373b4b88bd1e995c64e08 - optee/optee_os/core/arch/arm/plat-sam/sama7g5.h
dc50f202d0d580f19eeb540796628dd0281836f5 - optee/optee_os/core/arch/arm/plat-sam/freq.c
48e145a8a02773f53e3afc68f9d44f1aab5f8be5 - optee/optee_os/core/arch/arm/plat-sam/platform_config.h
51975d5a6d4516cacb42fd70885043c1f8b6fbf1 - optee/optee_os/core/arch/arm/plat-sam/pm/psci.c
ad2da5bcf6bacf24c344f64650d0681d7cba0720 - optee/optee_os/core/arch/arm/plat-sam/nsec-service/sm_platform_handler.c
b181f0001fd14e98ddf67822ad6feda0ffc284e1 - optee/optee_os/core/arch/arm/plat-sam/nsec-service/smc_ids.h
49dbe1b862ab1676a3186ddc9f6c7650820902d7 - optee/optee_os/core/arch/arm/plat-totalcompute/platform_config.h
d07921192fb4097f0da3129fcfc442229f93154f - optee/optee_os/core/arch/arm/plat-totalcompute/main.c
00e4e12466db95649e17c7dce132fd03e23b837c - optee/optee_os/core/arch/arm/plat-totalcompute/fdts/optee_sp_manifest.dts
46a2594f3aa4681ffd83538ff397c8e3bf3974ca - optee/optee_os/core/arch/arm/plat-rockchip/grf.h
384be00889fd82aa785e7d07fa9f819c764557c4 - optee/optee_os/core/arch/arm/plat-rockchip/platform.h
82976a1c26f0098dc91782fdd667476feac53253 - optee/optee_os/core/arch/arm/plat-rockchip/platform_px30.c
24c8244ba3044caed1943ad05138413c6db6ab2e - optee/optee_os/core/arch/arm/plat-rockchip/platform_rk322x.c
e8c669f6cd515061ddc1fac878644149427040c8 - optee/optee_os/core/arch/arm/plat-rockchip/psci_rk322x.c
7993e64e5bfd2d72ce89ef822b3a49a1381e8c69 - optee/optee_os/core/arch/arm/plat-rockchip/platform.c
1853ca66ab2f40919fcb69448e1b866eb2bc9e4b - optee/optee_os/core/arch/arm/plat-rockchip/core_pos_a32.S
971d879311868f34f4ebf712ba6de5f9f0ea6f35 - optee/optee_os/core/arch/arm/plat-rockchip/plat_init.S
de4933508c95b4cc044fec515f190d8ff6ebfdc0 - optee/optee_os/core/arch/arm/plat-rockchip/common.h
b74b363d6e2a566d4a03278aaacaf9391d505a44 - optee/optee_os/core/arch/arm/plat-rockchip/cru.h
5c98cb66829c84f0e07676a8a66b6883c782b877 - optee/optee_os/core/arch/arm/plat-rockchip/platform_rk3399.c
86e640e06414afd26ad833d31867572408fd251a - optee/optee_os/core/arch/arm/plat-rockchip/platform_config.h
4d0bc50554ebec63e6fb62a4772b77b82ec501cd - optee/optee_os/core/arch/arm/plat-rockchip/main.c
a1a353aa32ebd77dd5c2966ff38e024d0e8938bb - optee/optee_os/core/arch/arm/plat-k3/platform_config.h
12e0588ba0e125f4d318ca4cde1dc4902afeb182 - optee/optee_os/core/arch/arm/plat-k3/main.c
6a4aeba37a7be60d63bfeff66846d3a0c9cfa796 - optee/optee_os/core/arch/arm/plat-k3/drivers/sa2ul_rng.c
167f0568d280c4eaa824b31126105d0f2a0d3f89 - optee/optee_os/core/arch/arm/plat-k3/drivers/ti_sci_protocol.h
96e780127fe944086f4e057b31baea9b2fa125e2 - optee/optee_os/core/arch/arm/plat-k3/drivers/sec_proxy.h
31d7a216b6ec13503cd09db31dc15548da1793d6 - optee/optee_os/core/arch/arm/plat-k3/drivers/sa2ul.c
7e9288bc18f6a5ae30fd66d3f04abd5a43971250 - optee/optee_os/core/arch/arm/plat-k3/drivers/ti_sci.h
2020136e5c1ef325c92bc319ebb5f582d8d1b447 - optee/optee_os/core/arch/arm/plat-k3/drivers/sa2ul.h
259f0d13481825cf2b56b06524f54b93aaf8abeb - optee/optee_os/core/arch/arm/plat-k3/drivers/sec_proxy.c
08166357e31dfc2ba303f00ae83b8bb6cfb13c3f - optee/optee_os/core/arch/arm/plat-k3/drivers/ti_sci.c
79b03c7031fb185d0a450e49c7bacdcb99e6a4b3 - optee/optee_os/core/arch/arm/dts/sama5d2.dtsi
abbe0e5a7c63995c207b1995649e3a6ed6b4221a - optee/optee_os/core/arch/arm/dts/stm32mp15xc.dtsi
d6dbda8b14af74b3a63db810c4c4ed53bfb097bc - optee/optee_os/core/arch/arm/dts/stm32mp15xx-dhcom-som.dtsi
80e5d5425cd21aaac73665beba3aa827a985f10e - optee/optee_os/core/arch/arm/dts/stm32mp13-pinctrl.dtsi
d23af59b64d5380f6f9c8ca37a1a5b1af3e9f93c - optee/optee_os/core/arch/arm/dts/at91-sama5d27_som1_ek.dts
41aa3da18dcb49b316aefc9ad5eed7dc2664dabc - optee/optee_os/core/arch/arm/dts/stm32mp157c-ev1.dts
23b592b2e03dead1636f2110cd64531ec92bf807 - optee/optee_os/core/arch/arm/dts/stm32mp133.dtsi
2fb1ccf0f951ffefe80ae562b8b4df13db862a5d - optee/optee_os/core/arch/arm/dts/stm32mp257f-ev1-ca35tdcid-rcc.dtsi
6785fab64335569d7bd355648ab3eea10428ba95 - optee/optee_os/core/arch/arm/dts/stm32mp135f-dk.dts
6ed7397e2751cabb21fc7e87b53983b9117d2e26 - optee/optee_os/core/arch/arm/dts/sama5d2-pinfunc.h
ff54b38797ff11d07b4812b54de0c54381e5c944 - optee/optee_os/core/arch/arm/dts/stm32mp255.dtsi
f736b3aa230cbace5a7aa79456c02d322d405690 - optee/optee_os/core/arch/arm/dts/stm32mp257f-ev1-ca35tdcid-rif.dtsi
361479ac7684841706aca2fdb4c3d2c9f8e0e13e - optee/optee_os/core/arch/arm/dts/stm32mp15xxac-pinctrl.dtsi
409d4ed71faffbe877746442e5f91e568dc7df1e - optee/optee_os/core/arch/arm/dts/stm32mp25xxai-pinctrl.dtsi
c801e4c35f00786835f0cd63b71559a146086866 - optee/optee_os/core/arch/arm/dts/stm32mp15xx-dhcor-io1v8.dtsi
ed30a800e2e2a388fbecc51158b47a9cc3921038 - optee/optee_os/core/arch/arm/dts/stm32mp157c-dk2.dts
d631d38e887afb5747ac43a31fbfa52feff971c1 - optee/optee_os/core/arch/arm/dts/fsl-lx2160a.dtsi
9108360df22752b595c5b83acc6728a404bd4de4 - optee/optee_os/core/arch/arm/dts/stm32mp25-pinctrl.dtsi
db15a31ad3135aacca1c525a09c102593c0f1bfb - optee/optee_os/core/arch/arm/dts/stm32mp157a-dk1-scmi.dts
6c18e9690a909c9b4898d1d609cdf3874e22d19a - optee/optee_os/core/arch/arm/dts/stm32mp15xx-dhcor-avenger96.dtsi
d26bbcf985b7523a6af715be4feb22233be74ba5 - optee/optee_os/core/arch/arm/dts/stm32mp15xxaa-pinctrl.dtsi
fb4be0e25bdca79fcf443034897f81e669e42d88 - optee/optee_os/core/arch/arm/dts/fsl-lx2160a-qds.dts
642045067c7bfc99b19f317cb3af060f111d3f58 - optee/optee_os/core/arch/arm/dts/stm32mp131.dtsi
0c1276612681bf9f22517513242e678c22551542 - optee/optee_os/core/arch/arm/dts/stm32mp153.dtsi
8b0ff69354da1ce17daa0d18c67f38fdd3bcdd7c - optee/optee_os/core/arch/arm/dts/stm32mp135.dtsi
fad0980d9bf80c0fc0a8dc20548c3d6d65a9c4ee - optee/optee_os/core/arch/arm/dts/stm32mp257.dtsi
414473317258a6e6a9fe63c8f9b0125faf78845b - optee/optee_os/core/arch/arm/dts/stm32mp253.dtsi
d8011a03e68d20864da688cd4e37f5f00fceb92c - optee/optee_os/core/arch/arm/dts/stm32mp15xx-dkx.dtsi
cc1a5787a5c707145c1d43a2dafde4081469219f - optee/optee_os/core/arch/arm/dts/stm32mp15-pinctrl.dtsi
e793accc60529af1c41651063de57ef9cd0a0b5e - optee/optee_os/core/arch/arm/dts/stm32mp157a-dhcor-avenger96.dts
122a5897e5bcf53ef9746d10771477ba3252f57f - optee/optee_os/core/arch/arm/dts/stm32mp251.dtsi
c07147cb14bc871e069f3be8248fc2c79e311949 - optee/optee_os/core/arch/arm/dts/stm32mp15xxad-pinctrl.dtsi
6f054373484e9a7e6b398ac064c824e838b666e0 - optee/optee_os/core/arch/arm/dts/at91-sama7g54_ek.dts
1985ea8670dc7c7937541f6b2da9c30c41ee000d - optee/optee_os/core/arch/arm/dts/at91-sama5d27_wlsom1.dtsi
62934ca38185da79af035ba4a82f62ae3a33f4ac - optee/optee_os/core/arch/arm/dts/hikey.dts
e4fa73abdd45e453c0b16f0617ff2e73f505c20d - optee/optee_os/core/arch/arm/dts/stm32mp25xc.dtsi
9d307000551e74012b0ab3eecedcce5e21315f12 - optee/optee_os/core/arch/arm/dts/stm32mp25xxal-pinctrl.dtsi
28f113e9a075bf7903cddddaacfda1cbe77f6947 - optee/optee_os/core/arch/arm/dts/stm32mp151.dtsi
ce82c06ac99261e680a62585d80c90e9dfe941fb - optee/optee_os/core/arch/arm/dts/stm32mp157c-dhcom-pdk2.dts
9d307000551e74012b0ab3eecedcce5e21315f12 - optee/optee_os/core/arch/arm/dts/stm32mp25xxak-pinctrl.dtsi
ad3b5f3ede872c44e014eb6ca5a69329195968a6 - optee/optee_os/core/arch/arm/dts/at91-sama5d27_wlsom1_ek.dts
676f90d7c25eb035af4475d83d6e355f07ac0634 - optee/optee_os/core/arch/arm/dts/embedded_dtb_test.dts
d7230a1568081b9a39b151bbe38f188691b2b84b - optee/optee_os/core/arch/arm/dts/fsl-lx2160a-rdb.dts
b90fd277b20c2235559780745427fce254204eb5 - optee/optee_os/core/arch/arm/dts/sama7g5-pinfunc.h
e4c09d7943a625db6187d1b74f0990a9918b7663 - optee/optee_os/core/arch/arm/dts/dt_driver_test.dtsi
c8ec256ae55cb6c849aa51624b9974259884b159 - optee/optee_os/core/arch/arm/dts/at91-sama5d2_xplained.dts
e4fa73abdd45e453c0b16f0617ff2e73f505c20d - optee/optee_os/core/arch/arm/dts/stm32mp25xf.dtsi
81a499aaa30b0df2761afc4ef6a2032125195c1c - optee/optee_os/core/arch/arm/dts/stm32mp13xc.dtsi
8275c3486f497663a76c22d5ef4895c0c6ef6721 - optee/optee_os/core/arch/arm/dts/stm32mp157c-ed1-scmi.dts
9dea507c72c9eec09336578711a432b198478a56 - optee/optee_os/core/arch/arm/dts/at91-sama5d27_som1.dtsi
e4418357621a953d3e4b62676dcd52da1e958777 - optee/optee_os/core/arch/arm/dts/stm32mp157a-dk1.dts
81a499aaa30b0df2761afc4ef6a2032125195c1c - optee/optee_os/core/arch/arm/dts/stm32mp13xf.dtsi
7232e6bc543ecdadc3355cc8d94f4242ce4e1522 - optee/optee_os/core/arch/arm/dts/stm32mp257f-ev1.dts
bceeab3e2319f80b613c6ccaefc42154a2d76148 - optee/optee_os/core/arch/arm/dts/stm32mp157c-ev1-scmi.dts
e7b0fb122afd47f8821b7790544e06fcae7ef8fc - optee/optee_os/core/arch/arm/dts/stm32mp257f-ev1-ca35tdcid-resmem.dtsi
1b30098b442b7f3ded006ca7b7e80e963cc9fc6f - optee/optee_os/core/arch/arm/dts/stm32mp157c-dk2-scmi.dts
9f93f18baccbb7718af6c571e70dfecb3529b694 - optee/optee_os/core/arch/arm/dts/stm32mp15xxab-pinctrl.dtsi
b318d72ed3eee6e4bd7d8ecdb5b1eba8dfc31f89 - optee/optee_os/core/arch/arm/dts/stm32mp157.dtsi
5af1e6fee13bee69410732af10981f063661c519 - optee/optee_os/core/arch/arm/dts/stm32mp157c-ed1.dts
0cc38427ae1b225d88d000f9438b7cc34e883b30 - optee/optee_os/core/arch/arm/dts/stm32mp15xx-dhcom-pdk2.dtsi
3f6ebf7f2f67a8937dc31a61e6b209e2f4380587 - optee/optee_os/core/arch/arm/dts/sama7g5.dtsi
0f41a6ee8e489bec0d79a976edb540945506d498 - optee/optee_os/core/arch/arm/dts/stm32mp15xx-dhcor-som.dtsi
066bc87f06e5d4876c8faef00d1c145ab1bd0aea - optee/optee_os/core/arch/arm/mm/mobj_ffa.c
864e848f1defa3de1e5572ca3d95b4e44792d0f8 - optee/optee_os/core/arch/arm/mm/core_mmu.c
bd7c58e87fab1cb02cadd7495b81c7b12ea7cba9 - optee/optee_os/core/arch/arm/mm/core_mmu_lpae.c
186acc63098c3ed452851ee08b62209cfea0970f - optee/optee_os/core/arch/arm/mm/tee_pager.c
647357b1ced2418d05e39b858660d1eaaee5b61f - optee/optee_os/core/arch/arm/mm/sp_mem.c
7d3b96893db10fd600954503a287cc94ecd5acde - optee/optee_os/core/arch/arm/mm/core_mmu_v7.c
871090de2139ac886876df4cdd15fec4919533cf - optee/optee_os/core/arch/arm/plat-mediatek/platform_config.h
4af0e09221ce2161556eec932ee5c97df9943156 - optee/optee_os/core/arch/arm/plat-mediatek/main.c
30f6e29b614e5530eedff10502e0ad83fac778a0 - optee/optee_os/core/arch/arm/tee/entry_fast.c
df18a9464597e6dbc2844ec1e5d735db00c74f37 - optee/optee_os/core/arch/arm/tee/svc_cache.c
176317554a2541fa4a9d6504dbe52227bdcb5083 - optee/optee_os/core/arch/arm/tee/cache.c
6631e40f0ad62f389ac0fc0c59e142b9313bb246 - optee/optee_os/core/arch/arm/plat-aspeed/core_pos_a32.S
c2a044439dfe43a71ae10d3b6dac3011aa488674 - optee/optee_os/core/arch/arm/plat-aspeed/platform_ast2600.c
70fb1d819f629339d313a83ea0f8efa6e4fa80ca - optee/optee_os/core/arch/arm/plat-aspeed/platform_ast2700.c
b8d3a5d517e206505803d023df167bb48a6eacb5 - optee/optee_os/core/arch/arm/plat-aspeed/platform_config.h
1046d8e53fbfdcc9ffd8a63a012cccfb40cafacf - optee/optee_os/core/arch/arm/plat-tegra/tegra_common.h
798efa99d464a96c2b70639a3c25ba14f618c29b - optee/optee_os/core/arch/arm/plat-tegra/README.tegra_secure_storage
75acbc329d3d6b22b32e22658d66882be964013d - optee/optee_os/core/arch/arm/plat-tegra/platform_config.h
176e9b298b7760ed18b0a76e5e435f848723dfe0 - optee/optee_os/core/arch/arm/plat-tegra/main.c
390b45a60cc4219e64e58f0ca0ea2890dc31a351 - optee/optee_os/core/arch/arm/plat-vexpress/vendor_props.c
178685f16c79b3f0dd48d1b8fb551d428ab67b68 - optee/optee_os/core/arch/arm/plat-vexpress/juno_core_pos_a32.S
cbbb4b7ba94d66daba35e4e8de0e1ea8f3975534 - optee/optee_os/core/arch/arm/plat-vexpress/juno_core_pos_a64.S
00d480f375e00da8a39d12face3416dc339d7205 - optee/optee_os/core/arch/arm/plat-vexpress/platform_config.h
e01be039b064de797a7def2f2cf543bbf8502c79 - optee/optee_os/core/arch/arm/plat-vexpress/main.c
c043a9411306559a982b5d09ae419821ff026bd0 - optee/optee_os/core/arch/arm/plat-uniphier/kern.ld.S
11ce785f6bdd56fdc8b32c6c2174a9b49b96b230 - optee/optee_os/core/arch/arm/plat-uniphier/platform_config.h
2c699c471ccb146cc88b3899204cbdd9d4fd82d6 - optee/optee_os/core/arch/arm/plat-uniphier/main.c
1cea08afcf4cab7bbff31ea3666c5360c4c03498 - optee/optee_os/core/arch/arm/include/arm32_macros_cortex_a9.S
1a65b1ca474822fee4e0c70ee22052a915cefd51 - optee/optee_os/core/arch/arm/include/arm64.h
c24a0141912421b79a8ecb62ec4ee5d10c8f5d11 - optee/optee_os/core/arch/arm/include/arm32.h
55298b41d3e8800e2aeebd746e9e1371142fbd6e - optee/optee_os/core/arch/arm/include/smccc.h
12dc0bca72b62cb9e340cb631b2cbab3bf9b26fc - optee/optee_os/core/arch/arm/include/arm64_macros.S
ff294f026e09453cbd1ffb3cbc764befc573676c - optee/optee_os/core/arch/arm/include/arm32_macros.S
774cc9e4ce535c4ee572f39bd0bce967089406bb - optee/optee_os/core/arch/arm/include/arm.h
36e1b3463fbee386bf929dd59a29046c177b7434 - optee/optee_os/core/arch/arm/include/optee_ffa.h
ef7bffd960c06d3d1f3248123500188bfb08cd13 - optee/optee_os/core/arch/arm/include/pta_stmm.h
f94a593e9a9dd9f0f5d5a55be22d7c9e776d349a - optee/optee_os/core/arch/arm/include/ffa.h
33da86787f5ed31b247e1b8f9b33f6e4346fe53f - optee/optee_os/core/arch/arm/include/mm/generic_ram_layout.h
7430646af7648b0f2c9846af262a395f6b9b90ff - optee/optee_os/core/arch/arm/include/mm/core_mmu_arch.h
36508e4fbdf66e9683c7425ff68edf20b89d4243 - optee/optee_os/core/arch/arm/include/tee/entry_fast.h
4771b6a98c18654bdf73d522fbadb6ba28acb94f - optee/optee_os/core/arch/arm/include/sm/teesmc_opteed.h
b99db7102beabc3103377efbcd2cb4f144d615f6 - optee/optee_os/core/arch/arm/include/sm/watchdog_smc.h
913aa87cc293d3fcebd5bb787ee5da1e8af74be2 - optee/optee_os/core/arch/arm/include/sm/std_smc.h
f98998e892ec280bcd9da125164c5462995da079 - optee/optee_os/core/arch/arm/include/sm/teesmc_opteed_macros.h
7e6992cbc910184ff0cadf6e3ce9477b2c270465 - optee/optee_os/core/arch/arm/include/sm/optee_smc.h
c3cff2cbe62224e1869a92e1b246525bab44944c - optee/optee_os/core/arch/arm/include/sm/pm.h
28cac67ced3db8dcaccca1fe953dde17f3401ba9 - optee/optee_os/core/arch/arm/include/sm/psci.h
eb652901568dbd1107a5a134f53d5741b458f453 - optee/optee_os/core/arch/arm/include/sm/sm.h
de8434db2b1295821b4758b3e45ca031e30b1721 - optee/optee_os/core/arch/arm/include/kernel/thread_private_arch.h
4bb04defed3587d677609539c23fbc4954ce8a27 - optee/optee_os/core/arch/arm/include/kernel/spmc_sp_handler.h
daca510172fc09d7f8395b9e4700f1e76edd9629 - optee/optee_os/core/arch/arm/include/kernel/thread_spmc.h
34937789ac227f638211cfec7cb102dcffe2e120 - optee/optee_os/core/arch/arm/include/kernel/tz_ssvce_def.h
2360143179a1f2cfd4a3cbbbc03448bb6790d698 - optee/optee_os/core/arch/arm/include/kernel/arch_scall.h
104c3f804c5f42cad1f35c93f3da3c775f3f8333 - optee/optee_os/core/arch/arm/include/kernel/stmm_sp.h
2cb8761a88828b0812171b4a8fb7fc6338baa169 - optee/optee_os/core/arch/arm/include/kernel/misc_arch.h
59802332e69d96bb3641667a395d02f3c2fcd82f - optee/optee_os/core/arch/arm/include/kernel/cache_helpers_arch.h
621b56388a4696754f95b4599e1822d9a34a412c - optee/optee_os/core/arch/arm/include/kernel/vfp.h
bcf79acc39a9f4ce8fdd50e3929bba0bceaf33aa - optee/optee_os/core/arch/arm/include/kernel/user_access_arch.h
9723fb1cc272c7203c2e914cc6186ae2098e80bf - optee/optee_os/core/arch/arm/include/kernel/tee_l2cc_mutex.h
524a5a3c2a8e9d1c2d5a74c054a5465f28328abf - optee/optee_os/core/arch/arm/include/kernel/tz_proc_def.h
787920f87e2f8f5b90ab5a7dbb652cdcac005aa8 - optee/optee_os/core/arch/arm/include/kernel/tlb_helpers.h
bd02afc86bd0e2a2d5b96382da5b08872e3704b3 - optee/optee_os/core/arch/arm/include/kernel/delay_arch.h
ccc12fd93eb51399e2102d7549c3460ce011b98e - optee/optee_os/core/arch/arm/include/kernel/tz_ssvce_pl310.h
1ef6e0435944e4a7ba05a11ddc08a2a83322b18f - optee/optee_os/core/arch/arm/include/kernel/secure_partition.h
c36bfdcd6ad5e85e7f084678b7dc5595db7639ae - optee/optee_os/core/arch/arm/include/kernel/thread_arch.h
9397b11c32fdff7d6f2fb9203459b016a3dc0861 - optee/optee_os/core/arch/arm/include/crypto/ghash-ce-core.h
c020f068ad8593457e743ff0430d6a3cd685e142 - optee/optee_os/core/arch/arm/include/scmi/scmi_server.h
6c637d1038773281e56bbbd0e1381510508531cd - optee/optee_os/core/arch/arm/plat-synquacer/rng_pta.c
b1b7de5b516440a686f80083730d8a139d7cad97 - optee/optee_os/core/arch/arm/plat-synquacer/synquacer_rng_pta.h
596136d3b40cd1cbae47d4ed48a5b4d246e08dfe - optee/optee_os/core/arch/arm/plat-synquacer/platform_config.h
63b965066fdfe0c218542a9cc90635f1177300d8 - optee/optee_os/core/arch/arm/plat-synquacer/main.c
dd54ce3d620f2b22180ef201aeecf74b5b4480ad - optee/optee_os/core/arch/arm/plat-rzg/platform_config.h
8c4023604f9a8209cc2f3fbc55da146ee176f62e - optee/optee_os/core/arch/arm/plat-rzg/main.c
435d5321e6d484c095ede7a5b320ec92fddb3025 - optee/optee_os/core/arch/arm/plat-bcm/bcm_elog.c
3d4f18ba7a9634be9a46f900264cb0132fd65654 - optee/optee_os/core/arch/arm/plat-bcm/bcm_elog.h
db3ddcb5c48ff30c64e8b561ed5300400d67bca1 - optee/optee_os/core/arch/arm/plat-bcm/crc32.c
92cb86eafac038fc02be252efc14c3e3316f27af - optee/optee_os/core/arch/arm/plat-bcm/crc32.h
0b99d0c7135e7f0002ef7a51d63461307e66203b - optee/optee_os/core/arch/arm/plat-bcm/platform_config.h
43a45ac90d01fd0045318dc972f78f0bf1b526ba - optee/optee_os/core/arch/arm/plat-bcm/main.c
d15ae1ce071edbfc8d4d4de7c944cb1d8712136e - optee/optee_os/core/arch/arm/sm/sm.c
0fbfd45981f9512d688a49c32add4297540c689e - optee/optee_os/core/arch/arm/sm/pm_a32.S
bbd1df35108340d6d4e6179926681fb794f8ce12 - optee/optee_os/core/arch/arm/sm/sm_private.h
9421c26b6ce38f1d5da0e2f431afc0cab732f0e6 - optee/optee_os/core/arch/arm/sm/std_smc.c
79b02c9017b471e73d8c11acc7f91278ec851f2b - optee/optee_os/core/arch/arm/sm/pm.c
615d9401894c37dec5e5ebe9bcdb678df854564e - optee/optee_os/core/arch/arm/sm/psci-helper.S
45960371e7a1224c4d067ff3c172952b7d616998 - optee/optee_os/core/arch/arm/sm/sm_a32.S
8a9cd4bad5748dac76110944be1fb3442e98b2f6 - optee/optee_os/core/arch/arm/sm/psci.c
e2b43db2de0208697b4c88f2f0562d58a4b0b2fb - optee/optee_os/core/arch/arm/plat-d02/platform_config.h
64f5feb8d512291b20a4f975aaf809383b8501f9 - optee/optee_os/core/arch/arm/plat-d02/main.c
2a0bf39e0ef3f1dfa764058f0142b54a53a92006 - optee/optee_os/core/arch/arm/plat-ti/api_monitor_index_a9.h
ec14532de7ea2afbf4bb14220372faf052e0d77c - optee/optee_os/core/arch/arm/plat-ti/sm_platform_handler_a9.c
537927d745de820a0b09ef12a56515a53e68bcef - optee/optee_os/core/arch/arm/plat-ti/sm_platform_handler_a15.c
c3c107d238f7f96e38416cbd2ce783cb5c5231be - optee/optee_os/core/arch/arm/plat-ti/ti_pl310.c
188877287aafc257998231f234a1a79a4886c0af - optee/optee_os/core/arch/arm/plat-ti/a9_plat_init.S
f185f9e1ea859d9f4233cffc8c78fcbe72e4c090 - optee/optee_os/core/arch/arm/plat-ti/platform_config.h
9925b7637fef70a5a09336acc3facf8f32a968cc - optee/optee_os/core/arch/arm/plat-ti/main.c
608a97cee50965f940169862e6754dd17612fadf - optee/optee_os/core/arch/arm/plat-ti/api_monitor_index_a15.h
8fa033ec5237e06aef907c0f641f208388793c26 - optee/optee_os/core/arch/arm/plat-poplar/hi3798cv200.h
d4139567b62848e1c43b6759cd767e034e10db73 - optee/optee_os/core/arch/arm/plat-poplar/platform_config.h
65c024516806f7b43dd1ecc361e617bb25fa8a7a - optee/optee_os/core/arch/arm/plat-poplar/main.c
da5b397448c96664ff0d89282edbecf39150b736 - optee/optee_os/core/arch/arm/kernel/generic_timer.c
8ebc782c56e8a49cbb1a1842f396de645f1f46a7 - optee/optee_os/core/arch/arm/kernel/cache_helpers_a32.S
8be93bd3e498b936e329c6c0f608d82600066de8 - optee/optee_os/core/arch/arm/kernel/thread_spmc.c
6fd7aa6291ba867b69684437a7dd5bb5a7bf35f0 - optee/optee_os/core/arch/arm/kernel/tee_time_arm_cntpct.c
cfe9209c0f08602f20df8752df4016c257305627 - optee/optee_os/core/arch/arm/kernel/vfp.c
170f9fade8d4cfd3805f2aa2383b7f3d358507df - optee/optee_os/core/arch/arm/kernel/idle.c
0dafbe192d55bfc13650b4d9b06857d1b515e38d - optee/optee_os/core/arch/arm/kernel/cache_helpers_a64.S
99dbd4c6ced9d21fbf6db2c3e7c6755d8c6bce28 - optee/optee_os/core/arch/arm/kernel/vfp_a32.S
07324ee362ff4d159fdf6bce6b0b02e8e78b88c4 - optee/optee_os/core/arch/arm/kernel/arch_scall.c
a3d562edc0d696f64d77e9c96d86c9a88451b5a1 - optee/optee_os/core/arch/arm/kernel/vfp_private.h
5e41ac280fa605fa56477c6e9667c7421ae832c1 - optee/optee_os/core/arch/arm/kernel/thread_optee_smc_a64.S
d347c9bafe24140b9717de8891d9659b01333e07 - optee/optee_os/core/arch/arm/kernel/arch_scall_a32.S
4ee8f8d86109824375f2cc97d335f68da3fdaa62 - optee/optee_os/core/arch/arm/kernel/tlb_helpers_a64.S
c591321644c6fd32d600a9a797daf4cdc48647d2 - optee/optee_os/core/arch/arm/kernel/spin_lock_a64.S
1bd1dade7424498cd6601f19098eddc467484ed9 - optee/optee_os/core/arch/arm/kernel/spmc_sp_handler.c
9118c5ed6663264215d899065f1a3afaeb06cdd5 - optee/optee_os/core/arch/arm/kernel/stmm_sp.c
b4d64fa787d883488032c460e9bdd9219c8b7e6b - optee/optee_os/core/arch/arm/kernel/link_dummy.ld
ab6654f9a53a145c7e2bc78923bed0bc0657bfe3 - optee/optee_os/core/arch/arm/kernel/thread_a64.S
d5860b562cc073c556bae2a7af9a7e1eb58a120f - optee/optee_os/core/arch/arm/kernel/thread_optee_smc_a32.S
a27c6fbe05e670e156558bc1f34a63a59aa61d9d - optee/optee_os/core/arch/arm/kernel/virtualization.c
f6988f7300f9946f41bd2162ada23a43fbd6bf1a - optee/optee_os/core/arch/arm/kernel/entry_a64.S
6ae8f971135838f2b19445277b50525bea8e7007 - optee/optee_os/core/arch/arm/kernel/misc_a64.S
2078e534e5522c95bc26204e295b63cb3dc8ba76 - optee/optee_os/core/arch/arm/kernel/link_dummies_paged.c
dee3ef20e88a64d3e5c6a703b7e499cf302b0d3e - optee/optee_os/core/arch/arm/kernel/abort.c
7926173ef40ab1dffbd3b48ff3aa6da3fc04408c - optee/optee_os/core/arch/arm/kernel/asm-defines.c
24e1db339b48a73b6aaafcfca9047c7855896faf - optee/optee_os/core/arch/arm/kernel/rpc_io_i2c.c
da59d8db4ac8cd365ffd09d040ddc2a6ecab1d06 - optee/optee_os/core/arch/arm/kernel/thread_optee_smc.c
cff200d2106d26baf930f16e6caa8634adebbe08 - optee/optee_os/core/arch/arm/kernel/vfp_a64.S
b0f99be973a09c3aad401cd1c078e2dfc3cf1e7b - optee/optee_os/core/arch/arm/kernel/entry_a32.S
f41ca1e85c2faac131a78224385cef504fa5fb20 - optee/optee_os/core/arch/arm/kernel/tlb_helpers_a32.S
f5308588ec92bcc7bf4d0f31895b552aaf9e9bbf - optee/optee_os/core/arch/arm/kernel/secure_partition.c
44470d3e7b9cdbed041ae13408e647edc645aa74 - optee/optee_os/core/arch/arm/kernel/misc_a32.S
8e7f44c940c10653f99ce491cc9ee014042dd270 - optee/optee_os/core/arch/arm/kernel/tz_ssvce_pl310_a32.S
4eb9e4b6f2b6b8f595acf22a683d831fee0ef40f - optee/optee_os/core/arch/arm/kernel/unwind_private.h
b5ebdeae94cfe7fd7a32f0be15e8a28b230cd175 - optee/optee_os/core/arch/arm/kernel/tee_l2cc_mutex.c
db8f47350612f3b8a6329c86401fdd3f68deea35 - optee/optee_os/core/arch/arm/kernel/timer_a64.c
9447a2f925a8c4a712433747c0b99e00733645d3 - optee/optee_os/core/arch/arm/kernel/semihosting_a64.S
63ea63ab5d506208970d6f5b8738ee82850aefe3 - optee/optee_os/core/arch/arm/kernel/unwind_arm32.c
f03390123e4926aee657655edf88009ab0dbc50e - optee/optee_os/core/arch/arm/kernel/kern.ld.S
f993972e4d197fc39650afb0b42f7dab8ac95b64 - optee/optee_os/core/arch/arm/kernel/thread_a32.S
2d5d7a2dc049a0d7889f0f3e41eae30733b152b9 - optee/optee_os/core/arch/arm/kernel/thread.c
599bd7fb683e3e1c0eddc71e66e5eb979e8e7c28 - optee/optee_os/core/arch/arm/kernel/spin_lock_a32.S
9e422c03938a8b32edd015a653d5dac29880a5e2 - optee/optee_os/core/arch/arm/kernel/unwind_arm64.c
d6c09e6c39b889a25fcb82340f1725f9d0427d59 - optee/optee_os/core/arch/arm/kernel/arch_scall_a64.S
429869efe81ea182c117279b62d84611f6c67d9e - optee/optee_os/core/arch/arm/kernel/thread_spmc_a64.S
70d18a3045859eb6ccc5e757f247320e558f332d - optee/optee_os/core/arch/arm/kernel/boot.c
85841b19544e59c0896f7c344b4695e129135d4e - optee/optee_os/core/arch/arm/kernel/link_dummies_init.c
1c091661f2406d9cbf7fbcd4e5b272c9063c76ed - optee/optee_os/core/arch/arm/plat-corstone1000/platform_config.h
3ed0416bf10c33fd0f0bcfdb860d004207226f30 - optee/optee_os/core/arch/arm/plat-corstone1000/main.c
eba718605aa45932a4b80632aa65d8cb35dc2b22 - optee/optee_os/core/arch/arm/plat-versal/platform_config.h
bfcf05746b3abe951fa87eae66701a8f965aa611 - optee/optee_os/core/arch/arm/plat-versal/main.c
095caecf26786efe69779aab593c67447f44b9c2 - optee/optee_os/core/arch/arm/plat-ls/plat_init.S
f413d0ba2e04b6ef2802475a9132687b2f19237a - optee/optee_os/core/arch/arm/plat-ls/platform_config.h
13868e401113be9ac3e66fcf65079f44ea2bacc5 - optee/optee_os/core/arch/arm/plat-ls/main.c
94a132cb905aa39756cd3bd0c4cd0bb955893219 - optee/optee_os/core/arch/arm/plat-amlogic/platform_config.h
c361b974a831b2e73783b393d9d3893180fcd1af - optee/optee_os/core/arch/arm/plat-amlogic/main.c
b1793c2149008cfc5c242a3fbbfcdfecfb082b4b - optee/optee_os/core/arch/arm/plat-amlogic/scripts/aml_bin2img.py
2399244b8020942c1b3a3cb924194e8770560051 - optee/optee_os/core/arch/arm/plat-sunxi/plat_init.S
eaa619f9de58ee047ca541b4c238b2afb5b83b6a - optee/optee_os/core/arch/arm/plat-sunxi/psci.c
4e93d8d25766b05b285896a4944c227f8b4da442 - optee/optee_os/core/arch/arm/plat-sunxi/platform_config.h
e88f1ed007545a2d9bad93b2b4339ad8b3495d1c - optee/optee_os/core/arch/arm/plat-sunxi/main.c
bf4be1dd46e6278e5b9b8b6a40b710d90007d915 - optee/optee_os/core/arch/arm/plat-hisilicon/hi3519av100_plat_init.S
92415c6775326559b08df1d2a9976b3e1ebb0a72 - optee/optee_os/core/arch/arm/plat-hisilicon/psci.c
012cc9cc5cd4d1213266d657558cd6c1fb998e1f - optee/optee_os/core/arch/arm/plat-hisilicon/platform_config.h
1e0932868e4fc72946b4b12a3650c383dcdd7a79 - optee/optee_os/core/arch/arm/plat-hisilicon/hi3519av100.h
a8c72f869ba4905a042677386935fe5f89594db8 - optee/optee_os/core/arch/arm/plat-hisilicon/main.c
2d7ce0ada1137b16132294b438cf80dc592fc2d2 - optee/optee_os/core/arch/arm/plat-stm32mp2/stm32mp_pm.c
7457981ace127afc5decb97eb761344e50774b51 - optee/optee_os/core/arch/arm/plat-stm32mp2/stm32_sysconf.h
7b9545ad370d8e2f2db22bbdb592bee61def064a - optee/optee_os/core/arch/arm/plat-stm32mp2/stm32_util.h
1a3624b02a5288c8948f924618c9006a7dfa96a3 - optee/optee_os/core/arch/arm/plat-stm32mp2/platform_config.h
46b98d93bcfa1a298f80c25b710f13f434f751e8 - optee/optee_os/core/arch/arm/plat-stm32mp2/stm32mp_pm.h
a7cb7729f955f22f34f8fef551ac98a1bebcdecd - optee/optee_os/core/arch/arm/plat-stm32mp2/main.c
bef9665deeb6a447b2b0b6e8b57d4ff91d2e6c70 - optee/optee_os/core/arch/arm/plat-stm32mp2/drivers/stm32mp25_syscfg.c
6bad30092b6947c38cd0dcc571b822356d63152e - optee/optee_os/core/arch/arm/plat-zynqmp/platform_config.h
00aa4ae9cc5e6bc0ee8dc057986548b31545f5ed - optee/optee_os/core/arch/arm/plat-zynqmp/main.c
0fce490355fabf44c68c3e70a54be1e01f9c097a - optee/optee_os/core/arch/arm/plat-marvell/platform_config.h
af9cccac94bc9f4624a345c140c5b6e92cc1cbf6 - optee/optee_os/core/arch/arm/plat-marvell/main.c
382e9ecd3c29e2e17e189e59fd3427c1c682e199 - optee/optee_os/core/arch/arm/plat-marvell/armada7k8k/hal_sec_perf.c
5277b6c495f09f7293c54198cbee638bbfdb0254 - optee/optee_os/core/arch/arm/plat-marvell/otx2/core_pos.S
4ff87aa9e6aeaf3d88e17943ead649009d0b0fb2 - optee/optee_os/core/arch/arm/plat-marvell/armada3700/hal_sec_perf.c
9f34e39f67ff62c0eb53b7758b4bb2acdc47c228 - optee/optee_os/core/arch/arm/plat-marvell/cn10k/core_pos.S
9899b78e83cfa336552e36d0be06113de438bf15 - optee/optee_os/core/arch/arm/plat-hikey/hikey_peripherals.h
4957879ea142b46fd1ace368df87de82c90f5e5f - optee/optee_os/core/arch/arm/plat-hikey/spi_test.c
0ef9315fd88a89bb2c973f981309332a137809ec - optee/optee_os/core/arch/arm/plat-hikey/platform_config.h
a3ca539721787ac30ecbe03305f389325b894ff1 - optee/optee_os/core/arch/arm/plat-hikey/main.c
b76439762edcdb147fbeef0bd0dab6920abf3392 - optee/optee_os/core/arch/arm/crypto/sha3_armv8a_ce_a64.S
9c1f14fdc223c00af03fe8b922a520419b7fd0b9 - optee/optee_os/core/arch/arm/crypto/sha1_armv8a_ce.c
1e2f680f252d241897f99022c3d969218ab4780f - optee/optee_os/core/arch/arm/crypto/aes_modes_armv8a_ce_a64.S
d857b4b442486f2ac052ee687cb6d6f424843433 - optee/optee_os/core/arch/arm/crypto/sha512_armv8a_ce.c
fb5f716381766749999f0032bf39f39bf88af12e - optee/optee_os/core/arch/arm/crypto/aes_modes_armv8a_ce_a32.S
cb5a3413393627c5fb4626c2315e2e12bf01abf1 - optee/optee_os/core/arch/arm/crypto/ghash-ce-core_a32.S
02305ae36a17490cecdc906c0970e8625ea9e6a1 - optee/optee_os/core/arch/arm/crypto/sm4_armv8a_neon.c
45797af469d803907920fecce84f86fbe684a40c - optee/optee_os/core/arch/arm/crypto/sha3_armv8a_ce.c
1ab432ea10e0e0edf03b0ce17bb5277fea163578 - optee/optee_os/core/arch/arm/crypto/sha256_armv8a_ce.c
6e006d07e0e25f49c5af73e0e522f6f97963275c - optee/optee_os/core/arch/arm/crypto/sm4_armv8a_aese_a64.S
933f5b3256795b2ffea6b7b93d75365f865599b3 - optee/optee_os/core/arch/arm/crypto/sha1_armv8a_ce_a32.S
182b52f83f99ae6bbfa5098b2a3b2018194acde0 - optee/optee_os/core/arch/arm/crypto/ghash-ce-core_a64.S
2da4cbb016071dacfbbd7c99799a27ad6d8c56a7 - optee/optee_os/core/arch/arm/crypto/sha512_armv8a_ce_a64.S
0b84c15b4796a2a23a095ae2d6d037677510760a - optee/optee_os/core/arch/arm/crypto/sha256_armv8a_ce_a64.S
bb50a2e7fffd5945ce8214bf57ad9d55135b46c0 - optee/optee_os/core/arch/arm/crypto/sm3_armv8a_ce.c
2c3ba8b73e012b48da6c8ff12c635f8fa109e5a8 - optee/optee_os/core/arch/arm/crypto/aes_armv8a_ce.c
47012ceb6af70d59a7666ca551814aa811efe9e8 - optee/optee_os/core/arch/arm/crypto/sm4_armv8a_ce.h
ad9a80c4d43acd03ae5d27e14df6dfee3abc4e05 - optee/optee_os/core/arch/arm/crypto/sha256_armv8a_ce_a32.S
ad5becb659037cf49bdc0fccc768675b2ce55068 - optee/optee_os/core/arch/arm/crypto/sm3_armv8a_ce_a64.S
f7d7763974a8359b3d84d7c848542872c9a1a1b4 - optee/optee_os/core/arch/arm/crypto/sm4_armv8a_neon.h
b3e9dfa80137195e24f48098670516e5831b8a34 - optee/optee_os/core/arch/arm/crypto/sm4_armv8a_ce_a64.S
56e9da14883d74e8eca3a4c7737185590cf14c08 - optee/optee_os/core/arch/arm/crypto/sha1_armv8a_ce_a64.S
0c1913711dd52b93cfe5d2d476a3a050a5bae97d - optee/optee_os/core/arch/arm/crypto/aes-gcm-ce.c
09cb511f6b571c162ae284911b5af9c702dd5130 - optee/optee_os/core/arch/arm/crypto/aes_armv8a_ce.h
0cd13267dd6db52ed1ff3742dcb7adb15bdff8cd - optee/optee_os/core/arch/arm/crypto/sm4_armv8a_ce.c
55fee8bf238c661a2f59118cbea5d8fca29471f3 - optee/optee_os/core/arch/arm/plat-zynq7k/plat_init.S
e8a97315a58b289054e1f3fb5418cba746b5633e - optee/optee_os/core/arch/arm/plat-zynq7k/platform_smc.h
8694a8f4be2551b1bf8f1abcb17284a8b202e5af - optee/optee_os/core/arch/arm/plat-zynq7k/platform_config.h
8ec4ce70677e98cc80e5c401bf9640ec0fee3b83 - optee/optee_os/core/arch/arm/plat-zynq7k/main.c
fd20baae7413cd701b88ba6dfeb2a294a9eeb452 - optee/optee_os/core/arch/arm/plat-stm/rng_support.c
bdd38a0220aac82b0aafa97e8f1993cb27e0ac1f - optee/optee_os/core/arch/arm/plat-stm/tz_a9init.S
784a5cea3b2741f04facdeaf7bfac0e093630875 - optee/optee_os/core/arch/arm/plat-stm/platform_config.h
445f45675057a9e6f1aaab83895215595ae65915 - optee/optee_os/core/arch/arm/plat-stm/main.c
1b82881f2b80531fc7743309c38c8e9370969ef1 - optee/optee_os/core/arch/arm/plat-rzn1/rzn1_tz.h
776215d1f8598a5514e759d70ae400a8101f835a - optee/optee_os/core/arch/arm/plat-rzn1/a7_plat_init.S
48ef8147e12f826d7e87c67d7c12e3932d317546 - optee/optee_os/core/arch/arm/plat-rzn1/sm_platform_handler.c
245d63c49ace44a4319be3f8b9882e520bf67448 - optee/optee_os/core/arch/arm/plat-rzn1/psci.c
2ecc2eb6bff695c5b86aba9d1b07e0edcef5ab75 - optee/optee_os/core/arch/arm/plat-rzn1/platform_config.h
c9a02f7b7f7b87ffbcb1b4817f13f0a9ce102e7a - optee/optee_os/core/arch/arm/plat-rzn1/rzn1_regauth.h
efb02131d3016042f019eb5255aea2a304f26d44 - optee/optee_os/core/arch/arm/plat-rzn1/main.c
1362e6bff2c7739808fe60425baeb2fadc816d16 - optee/optee_os/core/arch/arm/plat-sprd/console.c
43ecf7e39e7a28c27b7b79a3615e3614939834bf - optee/optee_os/core/arch/arm/plat-sprd/platform_config.h
ff3678a750adfc1d8371ccec9e74da720682f3c6 - optee/optee_os/core/arch/arm/plat-sprd/main.c
7a47d9b9d80c3ff0539ada4663d95c9e7bdac984 - optee/optee_os/core/arch/arm/plat-imx/tzc380.c
33c6bb81805293647a9e56f5a1c069e159c98217 - optee/optee_os/core/arch/arm/plat-imx/imx_pl310.c
032f8b56ca1b85f32d1856cc52b85137d3e1b5cb - optee/optee_os/core/arch/arm/plat-imx/imx.h
576710aa6118eebca00bfa8024c4f48ad57b89ec - optee/optee_os/core/arch/arm/plat-imx/a7_plat_init.S
adedaaade5c7177a170c74433b126fb1bd75463b - optee/optee_os/core/arch/arm/plat-imx/sm_platform_handler.c
658c3b177340e2efe74ac7cfe5a0c688aeadf90d - optee/optee_os/core/arch/arm/plat-imx/imx_pl310.h
19f7be18a342945b17601d7b48c613ea1468eaa2 - optee/optee_os/core/arch/arm/plat-imx/a9_plat_init.S
de365232a710514bcfd16f2e2c3d382059af848a - optee/optee_os/core/arch/arm/plat-imx/imx-common.c
584afcf20fad8029781743589f1d8b888d4d7edf - optee/optee_os/core/arch/arm/plat-imx/platform_config.h
0244791f92c9d58e8f0208eb0c232d547dadc0c6 - optee/optee_os/core/arch/arm/plat-imx/imx-regs.h
130bb1cd7a5b0a7a3b471a004449a211455bdd4e - optee/optee_os/core/arch/arm/plat-imx/main.c
be59b37f3baf5d18ad949415e77e4c09a1a2ebb3 - optee/optee_os/core/arch/arm/plat-imx/config/imx6sl.h
93a6155f6f294fddb38ac1947f5dce49d68f71d5 - optee/optee_os/core/arch/arm/plat-imx/config/imx6sx.h
2d95ab53312d29b23061b747e96c695708612d8d - optee/optee_os/core/arch/arm/plat-imx/config/imx6qdlsolo.h
6c0a9e819b3e4b156c47a4761eef280bcfd0ab2f - optee/optee_os/core/arch/arm/plat-imx/config/imx6sll.h
7df27071dbcbeb1f977a02e17445136fa22a3749 - optee/optee_os/core/arch/arm/plat-imx/registers/imx7-crm.h
3931a5db91c6b50993dba75c296966e3e9416994 - optee/optee_os/core/arch/arm/plat-imx/registers/imx7ulp-crm.h
f44811ad0707fbcbcb20271e209f14481ae12b31 - optee/optee_os/core/arch/arm/plat-imx/registers/imx6.h
03ae03b912dbb52dbebf965aedd6500935558f41 - optee/optee_os/core/arch/arm/plat-imx/registers/imx95.h
9976e7cbeeb2ff5f852c838ecc82e62f85555b72 - optee/optee_os/core/arch/arm/plat-imx/registers/imx8m.h
46dc26d459e4a5adb2a904c7f6b4c5ef4546ab75 - optee/optee_os/core/arch/arm/plat-imx/registers/imx8m-crm.h
1a557c230d0c95aeb775b8f02c4a5294b829132e - optee/optee_os/core/arch/arm/plat-imx/registers/imx7ulp.h
b355b4bb04068d735c1faa8039e1ade0d88d60d2 - optee/optee_os/core/arch/arm/plat-imx/registers/imx6-crm.h
0ab3222c89bd29af45b6838cb1126597ea378f7f - optee/optee_os/core/arch/arm/plat-imx/registers/imx8ulp.h
e8e364071825472444c0223168929efe4a9385d2 - optee/optee_os/core/arch/arm/plat-imx/registers/imx93.h
f93579c365bf08fb597488903040c0b92041517d - optee/optee_os/core/arch/arm/plat-imx/registers/imx8q.h
55f6aaaf23e460dbfd791e81c80dd5de5d3bfbfa - optee/optee_os/core/arch/arm/plat-imx/registers/imx8ulp-crm.h
845f9ec3fb38a2456492626af9b5dfe8f583bfec - optee/optee_os/core/arch/arm/plat-imx/registers/imx7.h
443dd0395348c2b831b9ea34e1d0df567e22dfa4 - optee/optee_os/core/arch/arm/plat-imx/registers/imx6-dcp.h
e0bd5cc425555563f9b9428c5ab4088ab77dca2d - optee/optee_os/core/arch/arm/plat-nuvoton/platform_config.h
b5eab9ec78f6d28b2c8c130ef28fb357b65f5235 - optee/optee_os/core/arch/arm/plat-nuvoton/main.c
b3d21a1017a2f66d52d2f6da7f671715aba08021 - optee/optee_os/core/arch/arm/plat-rpi3/platform_config.h
ec372362de1d4e3528e6ba2db82b0c9a6949239b - optee/optee_os/core/arch/arm/plat-rpi3/main.c
ca3077b3f16c93f5d5350d4b21c08770138bc3af - optee/optee_os/core/arch/arm/plat-d06/core_pos_a64.S
ef651043e13845e8c87166c7f7c63c304bad4336 - optee/optee_os/core/arch/arm/plat-d06/platform_config.h
f3bb0c06c205574018197b20b6b28b4b4d95e9bb - optee/optee_os/core/arch/arm/plat-d06/main.c
db21a5bd9aae9b5eba7a6e8df804f329641d07ec - optee/optee_os/core/include/optee_rpc_cmd.h
88da2be579e9631f960e2e446fde123208299e46 - optee/optee_os/core/include/gen-asm-defines.h
6cd050c7ddd4d5c1022f00bf74e621a0a04818df - optee/optee_os/core/include/scattered_array.h
230b6235c3972d7ad25e31b52d8dd6e446d170b7 - optee/optee_os/core/include/optee_msg.h
fe35bcb23450f547f7b098c1dc83a86e94884a96 - optee/optee_os/core/include/rng_support.h
3ca2f1c00401f30920f476499ca9fb08cae8ee56 - optee/optee_os/core/include/initcall.h
d507db96fbda840a8a7615c35c15fa3cd392b7ad - optee/optee_os/core/include/console.h
129133eb0ba4e4b73eaf1d84710e580b22e10009 - optee/optee_os/core/include/spi.h
5c27242ef89ad221fbf7dc967d4227bb1210f3c5 - optee/optee_os/core/include/ta_pub_key.h
17854fd3bc11a0554f93349178a5ebde2df45a21 - optee/optee_os/core/include/io.h
1cdb9baa31ff97e081376c5efb6ab5476a90fd9e - optee/optee_os/core/include/keep.h
804d76c5793756bf65288f5d87b37716fc8a2a27 - optee/optee_os/core/include/signed_hdr.h
dcd9135e8790bfdbf7e925e8e5c9d421b5e89041 - optee/optee_os/core/include/dt-bindings/pinctrl/stm32-pinfunc.h
19bb520476cff77efd84b0106f690c4dd972bd63 - optee/optee_os/core/include/dt-bindings/regulator/active-semi,8945a-regulator.h
51c769451ca1c189b2b01b45473d6fb93157a4f2 - optee/optee_os/core/include/dt-bindings/regulator/st,stm32mp15-regulator.h
4c0440a1ff7d6b4704a914a7c2ad8192fa6e3c63 - optee/optee_os/core/include/dt-bindings/regulator/st,stm32mp13-regulator.h
07f392193a2ac2ed93eb54a2fccfbf0f1aabe2ea - optee/optee_os/core/include/dt-bindings/reset/st,stm32mp25-rcc.h
6f7d303afc4981c5aaf8ae4eedae611976aa5b7e - optee/optee_os/core/include/dt-bindings/reset/stm32mp1-resets.h
75e3b85cfb7663af28a4aeabd71f5d9171713d1b - optee/optee_os/core/include/dt-bindings/reset/stm32mp13-resets.h
c09a35772e7498a4ece6515946754488ec651860 - optee/optee_os/core/include/dt-bindings/interrupt-controller/irq.h
8bbae85d2c9ec2416cc28a15f3d8e79d19c9847c - optee/optee_os/core/include/dt-bindings/interrupt-controller/arm-gic.h
2d94b7454317e603ea94e5d5a47c544ddbd51e52 - optee/optee_os/core/include/dt-bindings/clock/st,stm32mp25-rcc.h
e5b93522f8e8f6f706e65daf7daa9252555267ac - optee/optee_os/core/include/dt-bindings/clock/at91.h
11cb6c3b8996e757f9d20becbf83d65d9da3497e - optee/optee_os/core/include/dt-bindings/clock/stm32mp13-clks.h
700be76cdd56cf4beca99964e8bef7679ca119a4 - optee/optee_os/core/include/dt-bindings/clock/stm32mp13-clksrc.h
c82fd3d48caa51f67f6bb71f5637c491c8869afb - optee/optee_os/core/include/dt-bindings/clock/stm32mp1-clks.h
a8cf564ed6fbf125e7620966503a1e002eba24a0 - optee/optee_os/core/include/dt-bindings/clock/stm32mp25-clksrc.h
72381c78c475599893db1bb00827995b3230d2d8 - optee/optee_os/core/include/dt-bindings/firewall/stm32mp25-risaf.h
ef8f8a2520f74e7ded21be5d4f5ec783c0625235 - optee/optee_os/core/include/dt-bindings/firewall/stm32mp25-rif.h
37c0de63b2ec29650e10dbb225e5679e292c2e7f - optee/optee_os/core/include/dt-bindings/firewall/stm32mp25-rifsc.h
a30c96fa3d6ba53eb18b67a4bb23d32ff7fb3661 - optee/optee_os/core/include/dt-bindings/mfd/st,stpmic1.h
dd5621d99484ecb0900f61801adab7e10d37f0f1 - optee/optee_os/core/include/dt-bindings/mfd/atmel-flexcom.h
23149233a025ca8a0b84821b398694bbf0bfdf4e - optee/optee_os/core/include/dt-bindings/iio/adc/at91-sama5d2_adc.h
9eea9ced1442cf0f623a3e71799533baf44cd8ce - optee/optee_os/core/include/dt-bindings/gpio/stm32mp_gpio.h
736b382bd5ae6f63e95b0ec473a146ffe182294e - optee/optee_os/core/include/dt-bindings/gpio/atmel,piobu.h
f0ee73ec026d62a1125c4410ba4a0a72b924d09f - optee/optee_os/core/include/dt-bindings/gpio/gpio.h
1e7ab5294d740390ffb703e0912f612c043e1ce3 - optee/optee_os/core/include/dt-bindings/dma/at91.h
bf573306daa40e7d3a9a2d47afdb08f99e78b3a7 - optee/optee_os/core/include/dt-bindings/rtc/rtc-stm32.h
c15642cd88cddd72322e27f38fb29ca150a0b99e - optee/optee_os/core/include/mm/vm.h
152f0ce018b49d6fc2b0b320f82c1b29e25cad29 - optee/optee_os/core/include/mm/core_memprot.h
c97a01f7bba80935fcbf2dafe9e946d43c247e1b - optee/optee_os/core/include/mm/sp_mem.h
37713cf86710cbfa86d71b72f0472c862bf26bcf - optee/optee_os/core/include/mm/pgt_cache.h
dbd53ecd6acb9e2c145f3b484a14e0c535655d98 - optee/optee_os/core/include/mm/phys_mem.h
a24fb17eb34a53d3715606290e297bafe2531127 - optee/optee_os/core/include/mm/core_mmu.h
30b8bfeb037aa430b36a9d62a9d906834dcf8903 - optee/optee_os/core/include/mm/fobj.h
2964e555c0c314b0e667d9ed7a87d55b5e686fd4 - optee/optee_os/core/include/mm/mobj.h
3ab7ecf667fa906a144379998f686f44c83c2394 - optee/optee_os/core/include/mm/file.h
b72b597ad0d72aad52fadbb143e3908b57655a48 - optee/optee_os/core/include/mm/tee_mm.h
208482cdefa0c15d6a3c7f325a33799eba7160e0 - optee/optee_os/core/include/mm/tee_pager.h
2f6a3581db8ffb2f34f1392fe9ea6854f4224c0e - optee/optee_os/core/include/mm/tee_mmu_types.h
86d731fbc4dec94afb6d508b95a533f7d47c3485 - optee/optee_os/core/include/tee/tee_supp_plugin_rpc.h
1308f358a4a299c363fc1ff9d4449995132b18c1 - optee/optee_os/core/include/tee/tee_ta_enc_manager.h
99e6264666df3948da38559a63a64db7a270175b - optee/optee_os/core/include/tee/tee_cryp_utl.h
a99d6817471b82716d363a37e72fd6a6eadf42a9 - optee/optee_os/core/include/tee/cache.h
64550bcada40de795079392dcbc9a53fc82da550 - optee/optee_os/core/include/tee/tee_fs.h
18a016ad9187e9e46b9b4758e73fadd9a375bbc3 - optee/optee_os/core/include/tee/tee_svc_cryp.h
0d89839cb1cbe5cc90c8acdb64ce5eaa35474503 - optee/optee_os/core/include/tee/tee_fs_rpc.h
053be96056cb04167009eb9368f7a8afc6dfaa5c - optee/optee_os/core/include/tee/tee_ree_state.h
6d690cb2041bea9138c24294d54a4d77aad41aff - optee/optee_os/core/include/tee/tee_cryp_hkdf.h
abea67617b2ab0ac70350ff3fe67b738eaa3645d - optee/optee_os/core/include/tee/uuid.h
b1c5d8f39981550bb0c40e7175bce5057378e3d0 - optee/optee_os/core/include/tee/entry_std.h
cf47b8057c9b037363f5a4bc50e424c35f2e3f92 - optee/optee_os/core/include/tee/tadb.h
6950b4690d1bf6ed1c32bc5bb06c44fbe39a29c7 - optee/optee_os/core/include/tee/tee_svc_storage.h
a90a966755ea02bf958fe6e492dda2d298e80403 - optee/optee_os/core/include/tee/tee_pobj.h
310b549683246f2258017d58572e9ab296981ec9 - optee/optee_os/core/include/tee/tee_fs_key_manager.h
0ac5827ea6d593ab3ff7382f2ee79d2be03fd2ae - optee/optee_os/core/include/tee/tee_cryp_concat_kdf.h
d7019362eb2c68e0692df4fa18c0cea06919e3f1 - optee/optee_os/core/include/tee/tee_cryp_pbkdf2.h
d517b1e0bd1ffceea1229d891891f62fa512b539 - optee/optee_os/core/include/tee/tee_svc.h
1c154159486140e838e057c58caf72c4a3b7d1b4 - optee/optee_os/core/include/tee/svc_cache.h
e825068e0bf9924af7215f4327bef758ff1f815f - optee/optee_os/core/include/tee/fs_dirfile.h
01a38ef0fc64d28f2ea1e65966093196abe543f5 - optee/optee_os/core/include/tee/tee_obj.h
97cfacaf0101f86f6d7edc4a3a3ff67110792801 - optee/optee_os/core/include/tee/fs_htree.h
2a58fef920aedd867e6459aef9e8cba3fc80c1a4 - optee/optee_os/core/include/drivers/stm32mp_dt_bindings.h
40c07075659d9321c0d0bf90cc0c2a567e4f070c - optee/optee_os/core/include/drivers/stm32_etzpc.h
d9e6e80aa5d27c1fcf9c1edc4895e62394b0d4d4 - optee/optee_os/core/include/drivers/versal_nvm.h
58ddebbef8bd6c594d871fb476d88a5f9831153d - optee/optee_os/core/include/drivers/ls_sec_mon.h
91b6d3c752a3d89e785356b8589c47726ff68d98 - optee/optee_os/core/include/drivers/zynqmp_csudma.h
f11821e449a00a7ac3bb73faeec8361a5387b1f1 - optee/optee_os/core/include/drivers/firewall_device.h
511feb397f8a383b92c4d238c9639c0ff2f6b5e1 - optee/optee_os/core/include/drivers/stm32_uart.h
cca1719ab46702da66faa45ee2e674cbf56e0936 - optee/optee_os/core/include/drivers/zynqmp_csu_puf.h
996e4e71228a955032f4422f1857fc86adeef560 - optee/optee_os/core/include/drivers/mvebu_uart.h
c8ca68f41b1afee076215f931ae25f18f2ffdf32 - optee/optee_os/core/include/drivers/serial8250_uart.h
b1d5544ff4f3ab0503a7b7403cafc67a0893bc29 - optee/optee_os/core/include/drivers/tzc400.h
ba6f897176895794b2c32406a85d56460b869a02 - optee/optee_os/core/include/drivers/bcm_sotp.h
d6e344ad9b81930944052a2aa7439fea4f98e7a3 - optee/optee_os/core/include/drivers/imx_sc_api.h
2ddfccba77effaf40a1b9a0ccc978bdfd8162d7b - optee/optee_os/core/include/drivers/atmel_rstc.h
5a5250f891c8e3fd01fe97da71d746ab170d70f8 - optee/optee_os/core/include/drivers/zynqmp_efuse.h
2862b25eeafb9f6e676ed83d48581638899573d9 - optee/optee_os/core/include/drivers/caam_extension.h
7cd32050e290fd4a576185a57e4ee3deac99984a - optee/optee_os/core/include/drivers/versal_gpio.h
631cc4ec89ffe0c7e2eb61ef0c441a265c1cff11 - optee/optee_os/core/include/drivers/versal_pm.h
e134f758ab7ac37003823e6518be9ab1ec171e88 - optee/optee_os/core/include/drivers/lpc_uart.h
df0ae6dca1951186adda4893c78c3156fa20892a - optee/optee_os/core/include/drivers/stm32_remoteproc.h
e82a2ed50b41b1008781a3fc944bc32366f9eb02 - optee/optee_os/core/include/drivers/imx_wdog.h
04f9993ffd5c2f798953978835626f7d91793c27 - optee/optee_os/core/include/drivers/zynqmp_pm.h
345ebf6d5dc2948c7a760d3cdf168f3461f36cf4 - optee/optee_os/core/include/drivers/imx_ocotp.h
ed0702ba8e49ca5d2b8fde5b754911bdd2120b71 - optee/optee_os/core/include/drivers/imx_i2c.h
7861330159692f9f887f6ab44a547cbe1f3f24dd - optee/optee_os/core/include/drivers/sp805_wdt.h
abea729d88bd897be58ed6c9534b6d37cf914d57 - optee/optee_os/core/include/drivers/zynqmp_csu.h
e5f12caa0c11061b91eac6b6165657e68158cc84 - optee/optee_os/core/include/drivers/ls_gpio.h
72846a719bd42c01c0f3fba621809252fa7e6aca - optee/optee_os/core/include/drivers/imx_uart.h
f7944ca30772475a66c4f8ff168470477e282d19 - optee/optee_os/core/include/drivers/i2c.h
0957985db83d64a10b0b4d453a89e517f1162217 - optee/optee_os/core/include/drivers/wdt.h
a993d1e7dfc09f9f06070b841e38ed529bed1299 - optee/optee_os/core/include/drivers/imx_mu.h
f4951939c2d41480ee8077883f4e3f9634c9ddd8 - optee/optee_os/core/include/drivers/regulator.h
acdcb0f0430baed3d90047cd49aec102e6dffc4e - optee/optee_os/core/include/drivers/cdns_uart.h
e5581364847f5fd4af18e00895e96feae66c2dc8 - optee/optee_os/core/include/drivers/rtc.h
adc8eb02c13ad66bb1e3be9c024aed644b40d9f5 - optee/optee_os/core/include/drivers/bcm_hwrng.h
8ca4742bb4169e13d358093ed24fba87a384b949 - optee/optee_os/core/include/drivers/atmel_shdwc.h
2ee9ec2b7a82e5db03c61a7ebdaccf200365ef19 - optee/optee_os/core/include/drivers/scmi.h
bf5353223f3ff261e30e843cf6810e7da7985b3a - optee/optee_os/core/include/drivers/semihosting_console.h
bbd9f402bd751cfe638fb2585b52d940de3cd704 - optee/optee_os/core/include/drivers/stm32_tamp.h
9faff0556c12ea1887a80ebbfb60c2634048a51d - optee/optee_os/core/include/drivers/serial.h
a2a83ef6478b6f51f852629efe31b59304ed79ce - optee/optee_os/core/include/drivers/imx_snvs.h
b042acc1001f3c9d86c50792ff6b2e69c028dcf5 - optee/optee_os/core/include/drivers/stm32_rif.h
793f688738ed5e21251d77bdb463baae3fbf9d0a - optee/optee_os/core/include/drivers/hi16xx_uart.h
32fcdee74f9da4a0217d0aa4891436773059db50 - optee/optee_os/core/include/drivers/stm32_risaf.h
4dccf4b5a3f384b716473dd5f22fe88e62e69454 - optee/optee_os/core/include/drivers/pl011.h
044cf7b8b0ceb07ad4609f53ced52b569babfad3 - optee/optee_os/core/include/drivers/stih_asc.h
d2608b476c0a3e6772cbc28ea1b2b555091784fc - optee/optee_os/core/include/drivers/atmel_rtc.h
209a9de5a95c149ed87d06209a00416aca6bdf59 - optee/optee_os/core/include/drivers/versal_puf.h
c52233fb46f4ad3050a806e473cfd2f936f6b53f - optee/optee_os/core/include/drivers/scif.h
f53a2a41bd93c15bcdbd21f59b7580157c370051 - optee/optee_os/core/include/drivers/ls_dspi.h
9f095079d511b5d789cac4b93714a3f09b75f4b7 - optee/optee_os/core/include/drivers/scmi-msg.h
daff84d47d1e712ea0390efbdef06fcd3fadaebc - optee/optee_os/core/include/drivers/stm32_i2c.h
988feb107f388f0e02ddd78e2887e84a221e0839 - optee/optee_os/core/include/drivers/ns16550.h
6110fa3ecbd1bb7185abcee753303ad1090d1aca - optee/optee_os/core/include/drivers/ls_i2c.h
0ae76ea5b86bea63251e635eee1a0eb79682d8b5 - optee/optee_os/core/include/drivers/amlogic_uart.h
e6927231b7845a9e7e71687a8b104775b431807c - optee/optee_os/core/include/drivers/bcm_gpio.h
121789edb4cf9b2797d850a0cb4a0ab1059814ed - optee/optee_os/core/include/drivers/nvmem.h
90f5cecf44f1353954b9f509e72380c23dae5481 - optee/optee_os/core/include/drivers/zynqmp_csu_aes.h
8f00fe24571b769a4046de9ec9733504c4f9aa4a - optee/optee_os/core/include/drivers/hfic.h
95ea00a994106d233112cdafcbbdecbf43efe8b1 - optee/optee_os/core/include/drivers/stpmic1.h
a74eeaca5f6fc6a32f24486af30eb3bed2a377a5 - optee/optee_os/core/include/drivers/stm32_vrefbuf.h
1a127ceb7473cce35868a0e3b6fb6c0fe09f67a0 - optee/optee_os/core/include/drivers/atmel_saic.h
62c0202bb311d341e9df9d92d2a63e249d112b97 - optee/optee_os/core/include/drivers/clk_dt.h
01e3e3b8a4910f25dfdfdd865b70e885b8eb5151 - optee/optee_os/core/include/drivers/versal_mbox.h
58d82325f216b80a9bf970807e4c42339bb5b193 - optee/optee_os/core/include/drivers/pl061_gpio.h
5a47d280fbbdebc8b4b8220b9c0be960a7e80966 - optee/optee_os/core/include/drivers/stm32_iwdg.h
0858c735ecd0b0f69511c80da83b88cb428ae108 - optee/optee_os/core/include/drivers/versal_sha3_384.h
5828573b7b864cb65461fa712126b0476f191ac9 - optee/optee_os/core/include/drivers/tegra_combined_uart.h
7dea081f4ce12e68e8dd713169f9c62a2cfa6f86 - optee/optee_os/core/include/drivers/tegra_utc.h
2a3619cc7379547d077b428c2b505660dfae6a1a - optee/optee_os/core/include/drivers/clk.h
35c7669c68bc59c981505af02240ed3cf0fb2877 - optee/optee_os/core/include/drivers/firewall.h
a33c92d997da4b5500e761f99997e9ae7747e0dc - optee/optee_os/core/include/drivers/sprd_uart.h
63f237f43820223064cd7951e8637ae351fb4ddc - optee/optee_os/core/include/drivers/stpmic1_regulator.h
e0b56498b27d3bd08d540168b77b98051f90ed82 - optee/optee_os/core/include/drivers/stm32mp13_regulator_iod.h
be006782da2caa19f262b37496195eb6654f9576 - optee/optee_os/core/include/drivers/stm32_gpio.h
7f3ef46e25244f20b8ad05b4953dc9bdc01db532 - optee/optee_os/core/include/drivers/stm32mp13_rcc.h
1e350e5217c7c9547170036a21103a9c8bd25c69 - optee/optee_os/core/include/drivers/cbmem_console.h
f6c06a7e3d38d67183bbde4814b1b4fc68226fda - optee/optee_os/core/include/drivers/stm32_shared_io.h
a534a04c75f7b25a685f14b9a9c4ad5bc1ce215a - optee/optee_os/core/include/drivers/pl022_spi.h
57b300c2b12b8f13b4d57eceff84a0d0e2ebac64 - optee/optee_os/core/include/drivers/stm32mp25_rcc.h
0689f3f9c968d6cd6e475b18b5de7b6f6b6dd15e - optee/optee_os/core/include/drivers/rstctrl.h
76dce8d5bac74bd2d72a45a7b870dbec97c127bb - optee/optee_os/core/include/drivers/stm32mp2_rcc_util.h
08d26cdf94c5c5ac4238ecbe1fe7920162d98c63 - optee/optee_os/core/include/drivers/stm32_bsec.h
ef27ccc40f8a3475cc86c8746c95720ec0b5a9ee - optee/optee_os/core/include/drivers/stm32mp1_rcc.h
a4463c93ac3eedb1207d208b410182b2aa7be43d - optee/optee_os/core/include/drivers/atmel_uart.h
f79ce31669141d007d3d46c0510c83271a074888 - optee/optee_os/core/include/drivers/zynqmp_huk.h
5b966c643d05fffd950b8cc2875b441e6bc9938f - optee/optee_os/core/include/drivers/gic.h
f0ed3b98bd6633f74dab58757059ac11933671ea - optee/optee_os/core/include/drivers/pinctrl.h
b6b2fd457393d19a7eba5e98b3718418f5dc772e - optee/optee_os/core/include/drivers/ffa_console.h
17e4e2d1b983087461bfcc4bbfbd70e8b3ae1dac - optee/optee_os/core/include/drivers/ls_sfp.h
573aef790439e7f8668bf6d5be663c9504f9273a - optee/optee_os/core/include/drivers/tzc380.h
2a38bd2d5a0cebf403be03fa37429bd62e7a05cb - optee/optee_os/core/include/drivers/plic.h
a244838f90d18ae96bf58df83a82d4723e5e109c - optee/optee_os/core/include/drivers/gpio.h
ab88ca90a86692bf09785c257d1e2aaa92123809 - optee/optee_os/core/include/drivers/pm/sam/atmel_pm.h
9d72e2511cba60710f11f4277a2a09128fb39326 - optee/optee_os/core/include/drivers/tegra/tegra_se_keyslot.h
2ceae52c37cb480b625927a556e6deb4689ced3a - optee/optee_os/core/include/drivers/tegra/tegra_fuse.h
0f747eae74178d4dd701c1a60cbec2204525d21a - optee/optee_os/core/include/drivers/tegra/tegra_se_aes.h
c43a36c90b5dc3d59157a90b64bc67387c6eeb80 - optee/optee_os/core/include/drivers/tegra/tegra_se_rng.h
962ce3fa264b4b63fa22716b4a75554e8e5ec55b - optee/optee_os/core/include/drivers/tegra/tegra_se_kdf.h
6873ff92e503fc09b808ebdb91d657315bc17856 - optee/optee_os/core/include/drivers/sam/sama7-ddr.h
129d940801fe4b67f12bbd828bc01928ccd0b626 - optee/optee_os/core/include/drivers/sam/at91_ddr.h
c1ef23d7109f9ca715be1cbe858cd914f69a163f - optee/optee_os/core/include/drivers/imx/dcp.h
01ae4874fa40f1573c4604c8bc580b524346c9e7 - optee/optee_os/core/include/drivers/bcm/bnxt.h
9580dfe1f16580758041e227e65811d04ca384b6 - optee/optee_os/core/include/kernel/lockdep.h
47bae777ab0439c6c5f650a64c7eda7938bc750e - optee/optee_os/core/include/kernel/trace_ta.h
bd16c197e3eca07e5c1a5914ad229d25a26a0abe - optee/optee_os/core/include/kernel/mutex.h
6849700be369cf5b739e28330cf03361954d478f - optee/optee_os/core/include/kernel/virtualization.h
c1f5708a89345bd1d1e59c0998656cb1b410984d - optee/optee_os/core/include/kernel/cache_helpers.h
08718b75d19035055180740c78363d96b950f76f - optee/optee_os/core/include/kernel/scall.h
ff1ad215df335bbc1bf5a8365c96c64746e4388d - optee/optee_os/core/include/kernel/refcount.h
7454568aad694133ddcefc1c65ffc1a6b8f06f0f - optee/optee_os/core/include/kernel/ldelf_loader.h
b3a88c6740b2fe8a68577c13877e75a574415c1f - optee/optee_os/core/include/kernel/thread.h
2d5870c0a7b942b4325b6c466fee777e6d9663df - optee/optee_os/core/include/kernel/mutex_pm_aware.h
828549ba13cdf97222d005e03793bddd388afb02 - optee/optee_os/core/include/kernel/tee_common.h
de2778b5ee55508a8a54df96e419cb482f563b30 - optee/optee_os/core/include/kernel/semihosting.h
e813ebd4165bad56ac4e83aa96bfb64404ff86cf - optee/optee_os/core/include/kernel/nv_counter.h
1836e525384f0bcf97d7ccf701668c6c0c4f43df - optee/optee_os/core/include/kernel/ldelf_syscalls.h
4d33576f2922c7d3f23cca65c93c8069cc665e38 - optee/optee_os/core/include/kernel/tee_misc.h
72ac22282aa32da2fc27ec02fac1ec0e5e4b433f - optee/optee_os/core/include/kernel/huk_subkey.h
e381ab37c3c0184a9ff35392eced84efc025d3cb - optee/optee_os/core/include/kernel/dt_driver.h
fe6eea4d42762374411a35eb329796345d13d0ac - optee/optee_os/core/include/kernel/boot.h
a614bf9bad94e38d4c27aad6b7cb71b21f02be3f - optee/optee_os/core/include/kernel/tee_time.h
34689194dcb760138a44b52c0e58db1bfa2c5a9e - optee/optee_os/core/include/kernel/user_mode_ctx_struct.h
a7d6eb26cc4a919d59beb0de50ca14f3bdaeba81 - optee/optee_os/core/include/kernel/tee_common_otp.h
e4719588b0cc670eee34fbf59d8d50f39cdbdc45 - optee/optee_os/core/include/kernel/thread_private.h
2071ef11bd6c92008e3267688dcec4614ce898c2 - optee/optee_os/core/include/kernel/abort.h
482af27dd67588f4f1d2d4a5cd17c50bd645df49 - optee/optee_os/core/include/kernel/chip_services.h
ce1a145a697b1bf79f0f04ad182445da3e675876 - optee/optee_os/core/include/kernel/user_ta.h
625040376d7bc280e4dffbe23e77e046dbf40e2d - optee/optee_os/core/include/kernel/asan.h
97f29668605f342fdc128a62fd5ef79d4abe9cc1 - optee/optee_os/core/include/kernel/dt.h
c39885dc2548b8d6723071bcc766bb513e3ef78b - optee/optee_os/core/include/kernel/user_mode_ctx.h
8bf4c79c51e20a6b6fb214337da853c10099b7fb - optee/optee_os/core/include/kernel/transfer_list.h
80df4f705b5db0199395a223b684d3c2bdb2a86b - optee/optee_os/core/include/kernel/delay.h
f79653070916157aa62f38869870204765305d74 - optee/optee_os/core/include/kernel/rpc_io_i2c.h
ed3147f55cf57484f6b235d33d44b7ac008321e7 - optee/optee_os/core/include/kernel/panic.h
79ecf23afea0ae71b83f392c615d67fcc7f01d74 - optee/optee_os/core/include/kernel/notif.h
565232ff60943441686a93e08086dd647b077053 - optee/optee_os/core/include/kernel/wait_queue.h
592e426ab15a5fd767d5356ea4a63315329f7407 - optee/optee_os/core/include/kernel/pseudo_ta.h
55b39e185d6756ef7e18929f99a9c6f0e15332ae - optee/optee_os/core/include/kernel/ts_store.h
b8f0dd10f8555a8e002f43f57936601b4ea89ed9 - optee/optee_os/core/include/kernel/pm.h
590c3ba3b3785bd1b70f32788080caa459b55454 - optee/optee_os/core/include/kernel/tpm.h
fdc42f8632716f2e930ccadebc2ba52fc85242a2 - optee/optee_os/core/include/kernel/user_access.h
8b22ed423b1b8e85f58048dd7072053fa9f0af4c - optee/optee_os/core/include/kernel/callout.h
5bb3a8cd5160f07a93fd9293957242604e679291 - optee/optee_os/core/include/kernel/misc.h
812a74ab18019aba6f14d3f06de6ceb0f03686f7 - optee/optee_os/core/include/kernel/early_ta.h
2233249756e47fc006e8a04186fa12757b84dba7 - optee/optee_os/core/include/kernel/embedded_ts.h
f809853f7dafcd931003f4f03ec346a85a86d1a3 - optee/optee_os/core/include/kernel/handle.h
f6f03208f165175924a0ef6217d5ae8552dfff27 - optee/optee_os/core/include/kernel/spinlock.h
f508df7c418ee1d26a9ac0b7bb9c02efaa95109f - optee/optee_os/core/include/kernel/unwind.h
23cec14e03085b7156a4095bb04eb95c3a096653 - optee/optee_os/core/include/kernel/timer.h
446e9f32d38a7ba8ba794474ba9d448c9c711994 - optee/optee_os/core/include/kernel/linker.h
05f81721d380382484ceeabbaaa7499702af43f9 - optee/optee_os/core/include/kernel/tee_ta_manager.h
13e3491bb1599f1110b164177b968edf255b9123 - optee/optee_os/core/include/kernel/interrupt.h
6633a78968c544109666de89e07ebbbb7624c4cd - optee/optee_os/core/include/kernel/msg_param.h
21af0145ee2a642abfe64f32b0618a6acb283781 - optee/optee_os/core/include/kernel/ts_manager.h
1b397670d3a135238d76ac0e6dd9cbe5095e6ecc - optee/optee_os/core/include/crypto/sm2-kdf.h
951fb0d4a44684edd5dea57f9af4dc3bfe63d7b7 - optee/optee_os/core/include/crypto/crypto_se.h
3c37642b6f4bfefdcae5a1697faef8aa2b82b756 - optee/optee_os/core/include/crypto/crypto_accel.h
eef0ead7045789d8587d0a0a470491a3138a9c3b - optee/optee_os/core/include/crypto/internal_aes-gcm.h
39890ece69167af142709df4eb0d40adb4b44d18 - optee/optee_os/core/include/crypto/crypto_impl.h
7f7d20ed2ab1e8339fd8bf4c6c3968d4d21867ae - optee/optee_os/core/include/crypto/crypto.h
89ce33aaddb1581c98d889695b695d3f91d1abac - optee/optee_os/core/drivers/stm32_shared_io.c
5b608ade5b6d8d262288fdc49165d0e0fb72f72b - optee/optee_os/core/drivers/imx_lpuart.c
f2395342fb43346befc286959fa01114b0ff28e2 - optee/optee_os/core/drivers/versal_mbox.c
1f8114767f04f10575e9d516120b9e8004560045 - optee/optee_os/core/drivers/zynqmp_csudma.c
6c4db16c8b3b5b7946f42531edaed3c24d4d07b0 - optee/optee_os/core/drivers/atmel_trng.c
a9e721b1faeb4865248d3c188b56278116a3185f - optee/optee_os/core/drivers/pl061_gpio.c
9629633ef9a1ec9606d960053dd7705e7179d502 - optee/optee_os/core/drivers/pl011.c
060e285588ec6082bcbf7f3b3c1907b0a98eb75c - optee/optee_os/core/drivers/semihosting_console.c
b195778e8106f48ecbe971f404a484cf3cb43d6c - optee/optee_os/core/drivers/widevine_huk.c
576097eeaf883a6a69e86b88a2364c3cd06450eb - optee/optee_os/core/drivers/stm32_uart.c
9203d1e334c03870efbb1296fc2b9151c8971267 - optee/optee_os/core/drivers/imx_sc_api.c
23020b20bb1b040dadd8e1d454b4d5a5b6229b09 - optee/optee_os/core/drivers/atmel_rstc.c
4d0af7ccdc432067d38742f896824ece44ac8ac7 - optee/optee_os/core/drivers/stm32_hpdma.c
033052ada215ccb3f67e6643ef12c4b5665f0448 - optee/optee_os/core/drivers/atmel_shdwc_a32.S
1a2ee2977ed079a1526806d298af2550d23ec1c3 - optee/optee_os/core/drivers/stm32mp15_huk.c
fb0a553d5a6fdc9f6c00930976fae0be73b27535 - optee/optee_os/core/drivers/ls_i2c.c
22d95a3e938617774e29f89760c65f77f932f148 - optee/optee_os/core/drivers/ls_gpio.c
1427572daefd0b1d7949a5bf943320c3ce4b9733 - optee/optee_os/core/drivers/imx_ocotp.c
09898d9b6b3ce2ff6bfaca61a6b13f0b9cd4efab - optee/optee_os/core/drivers/tzc400.c
707867f2731e424b641a7ec3409ee954fb610f37 - optee/optee_os/core/drivers/tzc380.c
ba938d917edc42fd1e53f93a707cc9ff5ff45686 - optee/optee_os/core/drivers/scif.c
59a9c4ca5b114eddb0dbe6e37771eb8d04954d41 - optee/optee_os/core/drivers/atmel_wdt.c
4ff1e8ce10ab42b914c9b6f41575ac6b27b08434 - optee/optee_os/core/drivers/riscv_zkr_rng.c
2897acd81f2d1a3996adb59bd9dec1f0000f919c - optee/optee_os/core/drivers/versal_puf.c
f6e601063c224f648486bed923c509cb27a5d5cc - optee/optee_os/core/drivers/sp805_wdt.c
9f608bd36d7697b68b44c50cf8070bcfa4c872c0 - optee/optee_os/core/drivers/imx_rngb.c
514313602dfb100842f336c91efef495a658b3a9 - optee/optee_os/core/drivers/stih_asc.c
e14a90f2bcf9018fa5a0467d3681cb66d3f43369 - optee/optee_os/core/drivers/atmel_piobu.c
b234794403be1c10b3977fc742799919f7b5d16e - optee/optee_os/core/drivers/ls_sfp.c
348ff8d80e4cb99de46449bd61cb1b87b5e33289 - optee/optee_os/core/drivers/tegra_utc.c
23eed3a3d72852b8eda78fe73dfa5b7f7e5cb44d - optee/optee_os/core/drivers/zynqmp_huk.c
d621f3094ff972d4947d52fc62511802ced9de2f - optee/optee_os/core/drivers/tegra_combined_uart.c
740e5cd3acbeb54e5e8bc8cce81aba50e2593a5d - optee/optee_os/core/drivers/bcm_hwrng.c
d727565a02416f45a77d93a9d363380f5f38ad79 - optee/optee_os/core/drivers/imx_scu.c
7ca34a8edb3c18eb51fa80927c8cf4f9ec8cca24 - optee/optee_os/core/drivers/plic.c
52c9fd38c2174bf6f84138c477cbee17c48cbded - optee/optee_os/core/drivers/bcm_sotp.c
c96f731961fc579a4966cae12e597d72c1ed06f3 - optee/optee_os/core/drivers/atmel_uart.c
7f6538800a647267da6f019328e5814cc7c1cbf5 - optee/optee_os/core/drivers/imx_csu.c
47509d9c897d567527308698b101326d495b6f43 - optee/optee_os/core/drivers/versal_pm.c
9c0fffe583ce8197aac49fa87c158bec166776ec - optee/optee_os/core/drivers/stm32_tamp.c
4a90c4aa0f47278dca792946ed139f8bb1e64038 - optee/optee_os/core/drivers/atmel_shdwc.c
52d39e5794d051ab27898621b9ad9ad78caca1bc - optee/optee_os/core/drivers/ns16550.c
42b41e7d6dba7a7d9a97f8a296aa72adc0a42be5 - optee/optee_os/core/drivers/lpc_uart.c
29302475f05ea928763d589f7149ac31fb251bc6 - optee/optee_os/core/drivers/zynqmp_csu_puf.c
e99f71437bf741b2c4274c245e79f0ce3c6caf4b - optee/optee_os/core/drivers/stm32_rng.c
4e44d2d06f6ccf6ad2ea5b12b7ea15dc0f6ba18d - optee/optee_os/core/drivers/stm32_fmc.c
285a03d5b9f6657a5a74f219b40e639aac379b41 - optee/optee_os/core/drivers/zynqmp_csu_aes.c
2261d19abd31f2b4ea686eb486d862becdb60cc4 - optee/optee_os/core/drivers/stm32_hsem.c
6f1d05fdc8226d2cc3b73ccb3928925444c90fd9 - optee/optee_os/core/drivers/stm32_i2c.c
9a6399d3b9a2944a5cfebf5b6c67e29dc97474e5 - optee/optee_os/core/drivers/pl022_spi.c
8096b4aa6e79b7b6591b0adeceb43c747137d470 - optee/optee_os/core/drivers/ffa_console.c
8c9bd89348d37d78be7efd291fc5f9279a62093d - optee/optee_os/core/drivers/cbmem_console.c
04ff6a848f0dd5e16fb7fd76e95ce39785601df1 - optee/optee_os/core/drivers/mvebu_uart.c
ddf2c0a622b6f91a81ac09e02fbca99d48e19dca - optee/optee_os/core/drivers/atmel_saic.c
61c5d0ca0275ae40bb907c7f2643cac72f4e49f8 - optee/optee_os/core/drivers/imx_ele.c
45fe58e31faea84f641347c7bd70e426567d781b - optee/optee_os/core/drivers/serial8250_uart.c
1320b4d29ffd0a7d76b3bca9ca5b46c18addcc96 - optee/optee_os/core/drivers/ls_dspi.c
360698584af5e09cf3bab225cf66053d658552b6 - optee/optee_os/core/drivers/imx_wdog.c
90ef3f7cef8ca0b5ea51d6514433067919d92331 - optee/optee_os/core/drivers/versal_trng.c
453275821dbd497ee05f6e25f01e69a4a0e96732 - optee/optee_os/core/drivers/xiphera_trng.c
488329789386ed718c577ec619a4315c61bfad80 - optee/optee_os/core/drivers/imx_i2c.c
5ab383a1f35751f76041e860257e0e0a3c2589d9 - optee/optee_os/core/drivers/versal_gpio.c
37dd20ab884cd41cc9d03a23df71144b0b97a765 - optee/optee_os/core/drivers/stpmic1.c
336c2f714f6f3c8267473f821b95e998a63e3cd1 - optee/optee_os/core/drivers/versal_sha3_384.c
54a609280735c84a28f8d94cc34c03b2316634fe - optee/optee_os/core/drivers/versal_huk.c
0cdb9912f3a35cdd9d52951d5f489087f96d327b - optee/optee_os/core/drivers/amlogic_uart.c
5e0cb642d735a12ab5988ae85b3a92aa9ffef6f3 - optee/optee_os/core/drivers/hi16xx_rng.c
ad92dc41d8536e669bf3cfbca40f5b9ce5a5dd42 - optee/optee_os/core/drivers/gic.c
72c106642fd5baba523177b44cceb0e2dd268bb5 - optee/optee_os/core/drivers/zynqmp_pm.c
e26dcea60a7bdcf95acd06bb25f806e8b4d3d9ff - optee/optee_os/core/drivers/bcm_gpio.c
15006081e89bc8300728779c6253899a10614a9b - optee/optee_os/core/drivers/imx_caam.c
8d04ceb536a6bf4d80820154070d8c7c642edb42 - optee/optee_os/core/drivers/sprd_uart.c
c6562bca735f2354108d76425eb80d1786bc60f4 - optee/optee_os/core/drivers/atmel_tcb.c
91c776414036398d6174fe6ec29f11f93475d55d - optee/optee_os/core/drivers/stm32_gpio.c
095d526f4c1187395f09dc20e28b5250754c1797 - optee/optee_os/core/drivers/atmel_rtc.c
8294666cb76a8dde2dc2f1155586de082381312b - optee/optee_os/core/drivers/hi16xx_uart.c
f8a2cf16ad82a5a58a932430f4155678097f4ef4 - optee/optee_os/core/drivers/ls_sec_mon.c
a5bf3dc83db9f97617b33e477a531942b3e75d81 - optee/optee_os/core/drivers/stm32_etzpc.c
34124d8bb0346987bc48d5157a13ea7ea1003d4f - optee/optee_os/core/drivers/hisi_trng.c
c22ba5f5ef7f6a34235ad0d658510c6825b62d2e - optee/optee_os/core/drivers/stm32_iwdg.c
99907094047bf316222d7f0af9b7b043693a92fd - optee/optee_os/core/drivers/imx_uart.c
954e1bc47f0ee045357082f521a9be2d509426c8 - optee/optee_os/core/drivers/hfic.c
5a8813d236d5048a1b671c09cfa8a0870a3a0aa2 - optee/optee_os/core/drivers/stm32_ipcc.c
5f7af6748259588f30732bd198cada68ea449968 - optee/optee_os/core/drivers/versal_nvm.c
2ace80614760dbbe872200c0405c3e28fe6a5880 - optee/optee_os/core/drivers/cdns_uart.c
530fee444603ac95a1d3b87bca6a175a250b92f8 - optee/optee_os/core/drivers/stm32_bsec.c
4c9d2cdbfc272ae7e69a1bea5dd20c454eb958e2 - optee/optee_os/core/drivers/smccc_trng.c
fed0f01a801201479250f34692013a5bdd4225ca - optee/optee_os/core/drivers/dra7_rng.c
138292dd3d320deb98c7243cfdb71918c02e2afe - optee/optee_os/core/drivers/imx_snvs.c
b8c4ff65271508ceb0b46a94201aa3f0315e3558 - optee/optee_os/core/drivers/pinctrl/pinctrl.c
2cb2f913ef3999b884c98aef82fd8307f3d69169 - optee/optee_os/core/drivers/pinctrl/atmel_pio.c
d0a8fc04ba4bcf51aebf34a8ac8691193668dd78 - optee/optee_os/core/drivers/wdt/watchdog_sm.c
11ae5906c65655bea1e0310e78fe9a2cd6f87709 - optee/optee_os/core/drivers/wdt/watchdog.c
dec5d60dc6ea7b921fa5ed12484476228a08c0d4 - optee/optee_os/core/drivers/regulator/regulator_dt.c
50a00bf39f9922775049c2d19f285a3e254b0091 - optee/optee_os/core/drivers/regulator/regulator.c
04332d5beb8ff3dc39195861bc9ccb54f641b015 - optee/optee_os/core/drivers/regulator/stm32_vrefbuf.c
12f730c1d7f9187a40d66c3b90615e9c0e971d19 - optee/optee_os/core/drivers/regulator/stm32mp13_regulator_iod.c
1e600f477768bc97699dab081ae2d93d11d7ea47 - optee/optee_os/core/drivers/regulator/regulator_fixed.c
525682464b93345fd90c046fdce25d6f677a4f4a - optee/optee_os/core/drivers/regulator/regulator_gpio.c
2090ec33c160a7514e3d6348ab2637bfb7f64c89 - optee/optee_os/core/drivers/pm/sam/pm_suspend.S
a88d1106f1ed23e4eb2bb4f86d04f0a6f25ad5a3 - optee/optee_os/core/drivers/pm/sam/pm-defines.c
3937fd975df05264852026814c11b09e0a82e533 - optee/optee_os/core/drivers/pm/sam/at91_pm.h
1fc83bb11115d4ddab8190af7aa67344e8ccd3b9 - optee/optee_os/core/drivers/pm/sam/at91_pm.c
4af2105f9cb20e8151aae7f9f5b9343f9c80cc2e - optee/optee_os/core/drivers/pm/sam/pm_resume.S
7cae1c15dfe3d06ef928dd5eefa14a4aec1f9d6a - optee/optee_os/core/drivers/pm/imx/gpcv2.c
676549817f71135f3b0178c78c523c84b12e5082 - optee/optee_os/core/drivers/pm/imx/local.h
2b8c1f4839c1e5b0efe66bec52afdc1f63c37726 - optee/optee_os/core/drivers/pm/imx/src.c
e675276b10ee4b5f7b2b67729fbb657d4c4c9522 - optee/optee_os/core/drivers/pm/imx/psci.c
a74a5d1c648fe46aa70b7e20f25a8420a99741fa - optee/optee_os/core/drivers/tegra/t234/tegra_se_driver_aes.c
2896f93b9ce1d8ffe38b478b5d0271f67861e9c6 - optee/optee_os/core/drivers/tegra/t234/tegra_se_driver_init.c
b3c1af7c48265ee1ec94741f8b25979263471c36 - optee/optee_os/core/drivers/tegra/t234/tegra_se_driver_aes.h
6eead22532dc02359da4f0034e133dc9ca172fd6 - optee/optee_os/core/drivers/tegra/t234/tegra_se_ccc_aes.h
01aeb814d645694dbb3a7b6cba73a8dbdb00b2c5 - optee/optee_os/core/drivers/tegra/t234/tegra_rpmb.c
f9fbda2a64237226d575ce131c06584211aee9c2 - optee/optee_os/core/drivers/tegra/t264/tegra_se_driver_aes.c
9b358652b625c525d7664614305cd5461cabcd19 - optee/optee_os/core/drivers/tegra/t264/tegra_se_ccc_kds.h
091dc954ac48731288cbad3b186d57e99b59954a - optee/optee_os/core/drivers/tegra/t264/tegra_se_driver_init.c
f4c91af501835fe3b45cc625f56e25b8a58dd55d - optee/optee_os/core/drivers/tegra/t264/tegra_se_driver_aes.h
445555a4b60b5a83515e31f2f58b7046e241bf50 - optee/optee_os/core/drivers/tegra/t264/tegra_se_ccc_aes.h
121012c24f8974a1ceb81fc46eae6af2e0cf1580 - optee/optee_os/core/drivers/tegra/common/tegra_se_driver_rng.c
e9610da7cda49db20ab7d8a5d864f1bb69dd05c6 - optee/optee_os/core/drivers/tegra/common/tegra_fuse.c
00df8fc8d9d76a95d524e8364efa4fb3fe16550c - optee/optee_os/core/drivers/tegra/common/tegra_driver_se.c
7af5528ed6308cdd183b6795e1e1b78e0a3cd2dd - optee/optee_os/core/drivers/tegra/common/tegra_se_map_device.c
2d7acadb41c373ca7c003b4ad2bb27a251da9f8c - optee/optee_os/core/drivers/tegra/common/tegra_driver_fuse.c
3ac3c419603ec4eab25351c67c950b0f9c77fda0 - optee/optee_os/core/drivers/tegra/common/tegra_driver_hash.c
26ad79b45179430853d5296e392864b8531f866f - optee/optee_os/core/drivers/tegra/common/tegra_driver_srv_intf.c
32ad38d98650ec84007d8cdb4403018429dc15d6 - optee/optee_os/core/drivers/tegra/common/tegra_driver_clear_keyslots.c
d4654766a46d1186e241c2e252b6d38ac9f71355 - optee/optee_os/core/drivers/tegra/common/tegra_driver_common.c
2bef4eb73974c1fd653db8392a154a316e679bea - optee/optee_os/core/drivers/tegra/common/tegra_driver_rng1.c
f9ab185704383b905103589f3144f913a5dc4a5d - optee/optee_os/core/drivers/tegra/common/include/tegra_driver_rng1.h
a008382f9f1dbf3c9c6ada5768c62367145c30ad - optee/optee_os/core/drivers/tegra/common/include/tegra_se_ccc_hash.h
125bb68eb2006c042202ebed4c2512fc19936621 - optee/optee_os/core/drivers/tegra/common/include/tegra_driver_fuse.h
ca861a10b37a468c931bdd3f75d5c0cf86a9376d - optee/optee_os/core/drivers/tegra/common/include/tegra_se_driver_rng.h
e222666998967f1f9fa69845c187db931d4e0dc2 - optee/optee_os/core/drivers/tegra/common/include/tegra_driver_srv_intf.h
5b46777fa667f6a3ff4246484b3f6c3976273457 - optee/optee_os/core/drivers/tegra/common/include/tegra_se_ccc.h
352d6c58d195d5c44b8e06c006e713fe506dc77e - optee/optee_os/core/drivers/tegra/common/include/tegra_driver_common.h
7732899fc36fdf41ef3d2710f4f34d178b950c36 - optee/optee_os/core/drivers/tegra/common/include/tegra_se_ccc_rng.h
e8d42d49f16782be2e257acd3c38621dadea7b68 - optee/optee_os/core/drivers/tegra/common/include/tegra_driver_se.h
e727d218a35bbc952b65e45d0d8c6c4fc8fd953d - optee/optee_os/core/drivers/tegra/common/include/tegra_se_ccc_errno.h
2a898fc63bf1ad21ff638f32270482292d0d3b4f - optee/optee_os/core/drivers/remoteproc/stm32_remoteproc.c
facbb81e8e130e674f47375c9e3ab4ac81c57eb8 - optee/optee_os/core/drivers/nvmem/nvmem_huk.c
00216a3e7662c8e93065826fcc5b9d1a08a3a0d4 - optee/optee_os/core/drivers/nvmem/nvmem.c
ffb055fce9602b75687a8682ffb89f0598a33b8d - optee/optee_os/core/drivers/nvmem/atmel_sfc.c
5c41d1d564c2de92067e2a8733d8e9b32306207b - optee/optee_os/core/drivers/nvmem/nvmem_die_id.c
2f05af5db75bbea2c574e623360ada32d4125f3e - optee/optee_os/core/drivers/firewall/stm32_serc.c
87a0ef15e426c3fe1f3f6701583dc75d27b1f95e - optee/optee_os/core/drivers/firewall/firewall.c
ad920986e4bc0e99a570d96563a8fd651d98e5c6 - optee/optee_os/core/drivers/firewall/stm32_rif.c
24d10ef1a2141dc33c4c498df03dea1fc42b1bb2 - optee/optee_os/core/drivers/firewall/stm32_iac.c
9599ad04354f815b669640a396526e0751a708f7 - optee/optee_os/core/drivers/firewall/stm32_risaf.c
572ffdb7f36a68fc5c5ed719b1c5698365310347 - optee/optee_os/core/drivers/firewall/stm32_rifsc.c
d6f12ebc8d1fcaff83fadf5e1ea8ef1b48ef18cb - optee/optee_os/core/drivers/clk/clk-stm32mp25.c
9c919e1b7826c8bad2ba459cc8cd4ce0035a8c45 - optee/optee_os/core/drivers/clk/clk_dt.c
497491c5aa9f4b7533a2de992b9c5ae414f45cb3 - optee/optee_os/core/drivers/clk/clk.c
9369391e1e1d8d1da7f877f29cd294cf4c65902f - optee/optee_os/core/drivers/clk/clk-stm32mp13.c
3f3a4c1335ffaa6d6213e72131983128ccf70c14 - optee/optee_os/core/drivers/clk/clk-stm32mp15.c
a6f7bef2f69f24002c1e9f095040f47560523849 - optee/optee_os/core/drivers/clk/clk-stm32-core.c
98169c49a2b31260fbbbbe0a0394251d9b62cc4f - optee/optee_os/core/drivers/clk/fixed_clk.c
78f32baa32c09aa5c90c228dbf8d9189db77e292 - optee/optee_os/core/drivers/clk/clk-stm32-core.h
6e8872e62a9bcb7b22bd63c492045b8e3610c851 - optee/optee_os/core/drivers/clk/sam/sama5d2_clk.c
48f146dde6d5ca943dbc1c3d3e909da6c816cb42 - optee/optee_os/core/drivers/clk/sam/at91_peripheral.c
d456d32d623573e6347385b01f9baa9be5301fc7 - optee/optee_os/core/drivers/clk/sam/at91_pmc.h
18acdc71569e2a780d0476642f03bc85218be532 - optee/optee_os/core/drivers/clk/sam/at91_plldiv.c
530a8ac463371dd1e9b7fa1c1ca9e30c7958808b - optee/optee_os/core/drivers/clk/sam/at91_system.c
fe1488b5f2e77d0468227c7cfc2a30712d2b529c - optee/optee_os/core/drivers/clk/sam/sama7g5_clk.c
7b04bf02eb44efee1878613f81656fd5acf46b86 - optee/optee_os/core/drivers/clk/sam/at91_generated.c
c99eceb036f865d8c6c2df48b7dd402af247fd34 - optee/optee_os/core/drivers/clk/sam/at91_programmable.c
c1c10c6ffec3be99f161ce8c6e467efd939ff7d4 - optee/optee_os/core/drivers/clk/sam/at91_utmi.c
13078eaf7868f4a2a4dcd703d8eadc76630f1b3d - optee/optee_os/core/drivers/clk/sam/at91_usb.c
e90a1c0ffe8e8d869859768ddc4f978630f52990 - optee/optee_os/core/drivers/clk/sam/at91_pll.c
3cc6160c3ae52400111c85d3c4ce08d787630856 - optee/optee_os/core/drivers/clk/sam/at91_i2s_mux.c
1cf0a55892076fb8587178bf570a91ba7a2ba82a - optee/optee_os/core/drivers/clk/sam/at91_main.c
12cb9cf9414303b0fe7c636c24a94b413fcbbf24 - optee/optee_os/core/drivers/clk/sam/at91_master.c
3e57a61dcae8fc7e3b0a9ef6fa21b454f0a6ab99 - optee/optee_os/core/drivers/clk/sam/at91_sckc.c
ab6ae708f655092178bf1088c71d8bd31ce2c726 - optee/optee_os/core/drivers/clk/sam/at91_cpu_opp.c
1050ecd58ec5f9140571e29544df45407324d89c - optee/optee_os/core/drivers/clk/sam/at91_audio_pll.c
8771db99eec65c3ff322515b835e8bda8f4ebe4d - optee/optee_os/core/drivers/clk/sam/phy-sama7-utmi-clk.c
92fb0755687c8983cedc51f140de48967a4f16a6 - optee/optee_os/core/drivers/clk/sam/clk-sam9x60-pll.c
4fada68326a3944ff116afbe8b3126ae87cee36f - optee/optee_os/core/drivers/clk/sam/at91_clk.h
8cd3321b319b3e9c1131a8ccb02eaa043ff64f3d - optee/optee_os/core/drivers/clk/sam/at91_pmc.c
152f3551f54e3ee176d8a09bd21b8692d3d34ae0 - optee/optee_os/core/drivers/clk/sam/at91_h32mx.c
5bbd0679e28db74ad176043eea5cbc87bd256bd7 - optee/optee_os/core/drivers/rstctrl/stm32_rstctrl.h
d7938b07f09ead0f16166984608bbf8f85111b89 - optee/optee_os/core/drivers/rstctrl/stm32_rstctrl.c
6ea97a6c89fdbbb425562f878dd045fd6f626046 - optee/optee_os/core/drivers/rstctrl/rstctrl.c
c12092f7274f02022aef7cc94bd3e208611a0dbe - optee/optee_os/core/drivers/rstctrl/stm32mp25_rstctrl.c
81cd47fdbcb4544646bf045e4f96b7cf75256c24 - optee/optee_os/core/drivers/rstctrl/stm32mp1_rstctrl.c
276647d31ac00012bcadfe85e79a9dcbbb3997bd - optee/optee_os/core/drivers/scmi-msg/clock.c
a5fb58a50b0ccc0dde34d6fa91b0b03c5e0ca554 - optee/optee_os/core/drivers/scmi-msg/voltage_domain.c
13ed9520d3f452a3b5919a38066b702cc2f31c5b - optee/optee_os/core/drivers/scmi-msg/reset_domain.c
33be09787080f4627f5fdc10d7378880994ded05 - optee/optee_os/core/drivers/scmi-msg/entry.c
98468f10b21d211004dffeb9bda96489ae217fce - optee/optee_os/core/drivers/scmi-msg/voltage_domain.h
c85de6ce4c133bc5d968be70c2b068b613042d31 - optee/optee_os/core/drivers/scmi-msg/clock_generic.c
b6dc570c20e25ebbb69c815e65c4e3a77f6cf00d - optee/optee_os/core/drivers/scmi-msg/reset_domain.h
cf9d967498746a73d9d033a11d89d20a95631dc6 - optee/optee_os/core/drivers/scmi-msg/base.c
0faefd362396637c831c3c6823053228443f5778 - optee/optee_os/core/drivers/scmi-msg/smt.c
1420d3d8ef64053f5b6cbf009539fd6ddddf6e95 - optee/optee_os/core/drivers/scmi-msg/common.h
fbee23ad24545aea0bd9fd6ae6b67e9acc2ef16f - optee/optee_os/core/drivers/scmi-msg/base.h
189d1a32fdc699c67e4da64ae26380a2b3facd66 - optee/optee_os/core/drivers/scmi-msg/clock.h
ac6217df4e25acd1b996d379ee7dc022ea03e8a8 - optee/optee_os/core/drivers/scmi-msg/shm_msg.c
4d4ccc595c38095af0c508a089dbc2886899f760 - optee/optee_os/core/drivers/i2c/atmel_i2c.c
7da841080f45a989a835a1fec30f6aa50d847b10 - optee/optee_os/core/drivers/i2c/i2c.c
34825682d3731dc9ea51680257ae795e76a288f2 - optee/optee_os/core/drivers/imx/dcp/dcp_huk.c
590ea022b10a9c7283c5ffc2433de61c90148fb2 - optee/optee_os/core/drivers/imx/dcp/dcp_utils.c
0d6b0a14fd3b05ba3c8c21eb1a895e8e3ba465e4 - optee/optee_os/core/drivers/imx/dcp/dcp.c
2b2febd277aeda9813289b22b87000c559b8e4d8 - optee/optee_os/core/drivers/imx/dcp/include/local.h
2086f64aaa2a6e6c7903ab74de13c177b978297d - optee/optee_os/core/drivers/imx/dcp/include/dcp_utils.h
536893e1752c9cfee18bc1228f09fa04c0971db1 - optee/optee_os/core/drivers/imx/mu/imx_mu_8ulp.c
975a25a6b342dfc2b466f157acaf11910eb0c3b3 - optee/optee_os/core/drivers/imx/mu/imx_mu_platform.h
1ba75e71228b378cb3c43d6ba87f3d11140b855b - optee/optee_os/core/drivers/imx/mu/imx_mu.c
555963669dcfbb957e415c040be083676f914c2e - optee/optee_os/core/drivers/imx/mu/imx_mu_8q.c
a7009131f76447718645c703ed1373bd329a4528 - optee/optee_os/core/drivers/bnxt/bnxt_fw.c
49865544561297dc1688131470c0baaa35112a86 - optee/optee_os/core/drivers/bnxt/bnxt.c
7651789fc830ed002efb38c51f34bda32a3e8e46 - optee/optee_os/core/drivers/bnxt/bnxt_images.c
289d35c3f71ddb7a5f121fb6723e63538130bb47 - optee/optee_os/core/drivers/gpio/gpio.c
0167f0613b4286349c7403ea6c9a7dfe0a322533 - optee/optee_os/core/drivers/crypto/aspeed/hace_ast2600.c
ecc8a0a2fa12870fc85783fb7f60d717f6bf40d5 - optee/optee_os/core/drivers/crypto/aspeed/hace_ast2600.h
2702c09d55cbed00cd7326d5d6e35b12126fbe96 - optee/optee_os/core/drivers/crypto/aspeed/crypto_ast2600.c
828360f1fe0d8cb9892dd9b467df8cf52e119eea - optee/optee_os/core/drivers/crypto/versal/ipi.c
098e2cd056d7c0109c48e1c0fe7fa13577cdd79e - optee/optee_os/core/drivers/crypto/versal/authenc.c
af9a8f5b582e42214ef925abde8ba38ad8bf8763 - optee/optee_os/core/drivers/crypto/versal/ecc.c
1229fa99845ae8027934dc49f6c224b2d461451e - optee/optee_os/core/drivers/crypto/versal/rsa.c
a7d7f00d8287e6bad7ec81709ec0463d5f483dcb - optee/optee_os/core/drivers/crypto/versal/include/ipi.h
e2ede389a1c5a24403439cd397bc8a69fc16ac0d - optee/optee_os/core/drivers/crypto/se050/session.c
115030fa2fba5fee55b2ab133f8457c36569b93f - optee/optee_os/core/drivers/crypto/se050/adaptors/include/se050.h
215eeb31aae8342063f2c7eeded5fcb3979691da - optee/optee_os/core/drivers/crypto/se050/adaptors/include/se050_apdu_apis.h
ceb2e995fdceecea2d1bb9a5610a21f958a520e2 - optee/optee_os/core/drivers/crypto/se050/adaptors/include/se050_sss_apis.h
4732906bb4ca33cb409bd901b0c94c24a26055a4 - optee/optee_os/core/drivers/crypto/se050/adaptors/include/se050_user_apis.h
08160ebfd7c03896165877326736450c0d5524ae - optee/optee_os/core/drivers/crypto/se050/adaptors/include/se050_utils.h
fe046635d5ea4979e83d3bab636fa885d6ea42b8 - optee/optee_os/core/drivers/crypto/se050/adaptors/apis/user.c
938beed49b7219bc5de5f01b93c9a51b0fdb40f3 - optee/optee_os/core/drivers/crypto/se050/adaptors/apis/apdu.c
95e8665d3b38e2efdd05f50abd94fe9c48a3d2d7 - optee/optee_os/core/drivers/crypto/se050/adaptors/apis/sss.c
bdd2f52fd62116d86d205618bc12099a46603d9c - optee/optee_os/core/drivers/crypto/se050/adaptors/utils/scp_config.c
ad754aaaf0b0850065a9e68027ee82642a44e817 - optee/optee_os/core/drivers/crypto/se050/adaptors/utils/info.c
6e42bccb8cc7140adefd2baee2a8f2b2c9757348 - optee/optee_os/core/drivers/crypto/se050/adaptors/utils/utils.c
05b8cb927ce8c6dc6b2c3391b71366cf1b9dfc89 - optee/optee_os/core/drivers/crypto/se050/glue/user.c
75e0506e1992b38a38a83d6805b15b095924a783 - optee/optee_os/core/drivers/crypto/se050/glue/i2c.c
64681be01124b403991ca09721e4e6c6e023b72e - optee/optee_os/core/drivers/crypto/se050/glue/i2c_imx.c
c0ffc8ba7635af755f6bc8dabf96b142cd473202 - optee/optee_os/core/drivers/crypto/se050/glue/i2c_stm32.c
bc9e0c1bff88a8c8a8b844d676d9ac9d76658357 - optee/optee_os/core/drivers/crypto/se050/glue/include/i2c_native.h
a9660506e78ca0a2ec416668e5f142dc5b0198c8 - optee/optee_os/core/drivers/crypto/se050/core/die_id.c
ee63e46c72d0cdd406a4eff3afc3de61bfc5867e - optee/optee_os/core/drivers/crypto/se050/core/scp03.c
683291b35269db2584defc67cad6d2006d59b805 - optee/optee_os/core/drivers/crypto/se050/core/rng.c
ddc645a154efbbe06890e01fc9d2e8456eba3849 - optee/optee_os/core/drivers/crypto/se050/core/apdu.c
2bfc19e0e0e85d9305249130e474588e60b28f37 - optee/optee_os/core/drivers/crypto/se050/core/cipher.c
432313af00fe913874dd57175755d4c140cc0f23 - optee/optee_os/core/drivers/crypto/se050/core/ecc.c
acd04d6ec81f1e8fcd19581e8e7d194f372b861d - optee/optee_os/core/drivers/crypto/se050/core/ctr.c
07804a4e636cd6a530a1ed8a87a523615ece79b7 - optee/optee_os/core/drivers/crypto/se050/core/storage.c
01265aa0e43909d41abd2d3938a52bc248f091f8 - optee/optee_os/core/drivers/crypto/se050/core/rsa.c
77ac6992ffdbc505fd3b8113c9335ea835c5f6c1 - optee/optee_os/core/drivers/crypto/se050/core/include/se050_cipher_algorithms.h
c5a5ad289df3cb1dc7152cb7adcf264aa1788aad - optee/optee_os/core/drivers/crypto/hisilicon/hpre_montgomery.c
407f1488bd80aecbd4b431c93511b0ef6d5eb3ac - optee/optee_os/core/drivers/crypto/hisilicon/sec_hash.c
a341ab646a6c5e64fae90d792a9194c367520281 - optee/optee_os/core/drivers/crypto/hisilicon/hpre_main.h
a8717a7746434356ad327c70a6841e3fcdedd189 - optee/optee_os/core/drivers/crypto/hisilicon/hpre_ecc.c
26e645235500a4b8e28a83aad310a346920998f7 - optee/optee_os/core/drivers/crypto/hisilicon/hpre_dh.c
e3b30857465905f5cd4c89f936fd197477eddb4d - optee/optee_os/core/drivers/crypto/hisilicon/sec_cipher.h
ae51eb0fddb7822bc18b69ccd00f8c584b243dc0 - optee/optee_os/core/drivers/crypto/hisilicon/sec_hmac.c
1a9e16344dbc4eb636d939a82a556a5d286c7dd9 - optee/optee_os/core/drivers/crypto/hisilicon/hisi_qm.c
1b311c19f899fb8a901fd2ccb373297e97ad638f - optee/optee_os/core/drivers/crypto/hisilicon/hpre_ecc.h
b8a0af83f94376fd5bcbea603433b2cdc66b2ed9 - optee/optee_os/core/drivers/crypto/hisilicon/hpre_dh.h
d5665309effd5808e94c4434a4e8f7cbbe4fadca - optee/optee_os/core/drivers/crypto/hisilicon/sec_main.c
757cdaf6c60a48e7779b7da7052b35ccf8c09382 - optee/optee_os/core/drivers/crypto/hisilicon/hisi_qm.h
a7f828ccb148a380a321397147fa769faf833e54 - optee/optee_os/core/drivers/crypto/hisilicon/hpre_montgomery.h
8989f137285a6f61cb1a94a99b4bf7e9a63c285e - optee/optee_os/core/drivers/crypto/hisilicon/hpre_main.c
8a39e84934336b6025be2fb7e4841f9b7a0deeac - optee/optee_os/core/drivers/crypto/hisilicon/sec_cipher.c
5607e59a80063d3088475f30b4c207de6c66724f - optee/optee_os/core/drivers/crypto/hisilicon/sec_authenc.c
a04c28807fbe323bc715430b8e6ffd82773da1d1 - optee/optee_os/core/drivers/crypto/hisilicon/sec_authenc.h
6f916a5d703d67f0f9bd8481edc5cc1a920e3973 - optee/optee_os/core/drivers/crypto/hisilicon/sec_main.h
3d3689982383b14aa85eedeb881bc19aba115ea9 - optee/optee_os/core/drivers/crypto/hisilicon/sec_hash.h
601b922f3c15a1c4d5abb05d995f5735c1e356b9 - optee/optee_os/core/drivers/crypto/stm32/stm32_cryp.h
2f3ab4f2cb6b5d01d0b5e7842bed6baf91e5d182 - optee/optee_os/core/drivers/crypto/stm32/stm32_saes.h
8199d52c7baf643957c32674f889260cf2341dbb - optee/optee_os/core/drivers/crypto/stm32/authenc.c
9b5acc18a0ca9f795c68141119a5164dbcc0047a - optee/optee_os/core/drivers/crypto/stm32/stm32_saes.c
2b4649250e1e64db712617db31369c57f466b6f3 - optee/optee_os/core/drivers/crypto/stm32/cipher.c
fb67584aabc078f87f6267ea7306f830e0e46064 - optee/optee_os/core/drivers/crypto/stm32/stm32_cryp.c
b179d07b90bf70b2ed08a34fbf03c9294d1a205b - optee/optee_os/core/drivers/crypto/stm32/common.h
efb3950cfa10b5ba1a647d083e5aa06e6a5378e8 - optee/optee_os/core/drivers/crypto/caam/caam_ctrl.c
3961eb920e409de78ae8d214ce44f802b27a379c - optee/optee_os/core/drivers/crypto/caam/caam_jr.c
e50b088ae52c3e7016bce9511e39b1adfa3f0b4a - optee/optee_os/core/drivers/crypto/caam/caam_desc.c
699a8346a6775299a19d00eda00fa748fe04892d - optee/optee_os/core/drivers/crypto/caam/caam_rng.c
5abf9725310659d557245e78b391f46a589f065a - optee/optee_os/core/drivers/crypto/caam/caam_pwr.c
df4f77213b909b92241663307cddf6ab6f950c8c - optee/optee_os/core/drivers/crypto/caam/caam_key.c
f3959046a0ae29e21707eb07d7635232d3412a6e - optee/optee_os/core/drivers/crypto/caam/caam_sm.c
fdb4775e9056e6c476ffae9721aee7a2c72a56ce - optee/optee_os/core/drivers/crypto/caam/hal/imx_8m/hal_jr.c
b438abbdc31d4fba647e29cb04348c3fe1a2bc5c - optee/optee_os/core/drivers/crypto/caam/hal/imx_8m/hal_ctrl.c
ae43fe99412d31c2f21f732a6798cda49fa12d3d - optee/optee_os/core/drivers/crypto/caam/hal/imx_8m/hal_clk.c
e2251ce08c70bf59c08a56cd48659683536708df - optee/optee_os/core/drivers/crypto/caam/hal/imx_8m/registers/ctrl_regs.h
fdb4bbc22ae4a6acae04a6b7205f78f74e7847ba - optee/optee_os/core/drivers/crypto/caam/hal/imx_6_7/hal_clk_mx7ulp.c
08fa37b12c023eb7169ed6b3c069ecde04fb9ed1 - optee/optee_os/core/drivers/crypto/caam/hal/imx_6_7/hal_jr.c
08ea1bfa1f790800d596ee9616bae2ec31390970 - optee/optee_os/core/drivers/crypto/caam/hal/imx_6_7/hal_ctrl.c
dc2680e783f647bce21513453573f8f426d9ae8d - optee/optee_os/core/drivers/crypto/caam/hal/imx_6_7/hal_clk_mx6.c
a8796a5f28445049f810dd2b2cf6bd4700d39090 - optee/optee_os/core/drivers/crypto/caam/hal/imx_6_7/hal_clk_mx7.c
fee09baaa8fd82c62ecca9d059220329bb51e466 - optee/optee_os/core/drivers/crypto/caam/hal/imx_6_7/registers/ctrl_regs.h
75e141d842a44be2fc54fc9aa3d6233d43786cf8 - optee/optee_os/core/drivers/crypto/caam/hal/common/hal_cfg_dt.c
aad80d84aafe3253f980f8e72ad014fa860f51ac - optee/optee_os/core/drivers/crypto/caam/hal/common/hal_jr.c
bbed4e39b9bcd1f945beda876fda141a02a74f4b - optee/optee_os/core/drivers/crypto/caam/hal/common/hal_ctrl.c
8db1294f384bce6384f85139c546c8efbb4fe62c - optee/optee_os/core/drivers/crypto/caam/hal/common/hal_rng.c
b16e31abdbe671ee4a824e1bb701902be03edb0d - optee/optee_os/core/drivers/crypto/caam/hal/common/hal_sm.c
62b95ec89eb5763cd260f23face8cdb73f51bc9e - optee/optee_os/core/drivers/crypto/caam/hal/common/hal_cfg.c
e7c18e488182d4bf3c8c821885db52c980fb5f7a - optee/optee_os/core/drivers/crypto/caam/hal/common/registers/version_regs.h
1061deddc2311407d8fa66dfe6df6e9c74ffda39 - optee/optee_os/core/drivers/crypto/caam/hal/common/registers/rng_regs.h
5d8a12ee896ae3c8e60ef64f2bc85b31aef2d9c7 - optee/optee_os/core/drivers/crypto/caam/hal/common/registers/jr_regs.h
79bf2c681239bff0327007e0823aa9bc43f46ae5 - optee/optee_os/core/drivers/crypto/caam/hal/common/registers/sm_regs.h
a70a4c8d70b51affd3d9132d1923186a531b7f4b - optee/optee_os/core/drivers/crypto/caam/hal/imx_8ulp/hal_jr.c
72df54a7f3d911d758cad690990fec5962c2ceb4 - optee/optee_os/core/drivers/crypto/caam/hal/imx_8ulp/hal_ctrl.c
7bbd78ddb18f062b0ee9521f445979c6acb2ee1e - optee/optee_os/core/drivers/crypto/caam/hal/imx_8ulp/hal_clk.c
dc66e73bb6be55941cae77b073fdaab8d4badfc5 - optee/optee_os/core/drivers/crypto/caam/hal/imx_8ulp/registers/ctrl_regs.h
37d6f6801f8b77cfaa1e789b65d9bc5e1b44bdbe - optee/optee_os/core/drivers/crypto/caam/hal/imx_8q/hal_jr.c
b2e468ca406a0ecd02357d0d17e4018a6c68bd49 - optee/optee_os/core/drivers/crypto/caam/hal/imx_8q/hal_ctrl.c
05f90a24f3fbacc399604028453c4885f1e107f0 - optee/optee_os/core/drivers/crypto/caam/hal/imx_8q/hal_rng.c
59ec0c7059f65e67d8cde311155d4f1e67a49718 - optee/optee_os/core/drivers/crypto/caam/hal/imx_8q/hal_cfg.c
d375b61195f07cb019b6c1c76272b00409fd8626 - optee/optee_os/core/drivers/crypto/caam/hal/imx_8q/hal_clk.c
aa940d1d85879826ef54d8a93ceac16d8134c9f9 - optee/optee_os/core/drivers/crypto/caam/hal/imx_8q/registers/ctrl_regs.h
13a69ec0385f79f1b8ad1c9de90b79c0a2c82365 - optee/optee_os/core/drivers/crypto/caam/hal/ls/hal_jr.c
63e5eb66976364a49eabd3680df526f36f7c51cc - optee/optee_os/core/drivers/crypto/caam/hal/ls/hal_ctrl.c
ad05613f64dba65f1576f358f3d0ad0182e393f3 - optee/optee_os/core/drivers/crypto/caam/hal/ls/hal_clk.c
db232940b3c2f122c53b11e6dec5e70c5ec347d8 - optee/optee_os/core/drivers/crypto/caam/hal/ls/registers/ctrl_regs.h
1c222211eb56c4447e53ae06851aeb468c7423c1 - optee/optee_os/core/drivers/crypto/caam/acipher/caam_ecc.c
b344e97a5a51b3bc2f8cb52dcc2fe9adbdaa3e02 - optee/optee_os/core/drivers/crypto/caam/acipher/caam_dh.c
f677ba67d639efb7e1d7aebdc1a4b96eca37fa2f - optee/optee_os/core/drivers/crypto/caam/acipher/local.h
809e7d9d1c8018be4c447fa948a3954dbd7738ab - optee/optee_os/core/drivers/crypto/caam/acipher/caam_prime_rsa.c
7b9390d54de54fa7f6778b6a73a75799cb97fe1f - optee/optee_os/core/drivers/crypto/caam/acipher/caam_math.c
eca8db4225df0c60977968141451b3500fd30eda - optee/optee_os/core/drivers/crypto/caam/acipher/caam_dsa.c
91c843a382b813a556a3192e3b89d4f6e2330afe - optee/optee_os/core/drivers/crypto/caam/acipher/caam_prime_dsa.c
7cde7c1fca497dc195769411852baf995458da54 - optee/optee_os/core/drivers/crypto/caam/acipher/caam_rsa.c
981c3652730c78df0fa0ab1841ce939ae699d9f9 - optee/optee_os/core/drivers/crypto/caam/cipher/caam_cipher.c
b1050722e24889ba59c987cb274897949dcd39a7 - optee/optee_os/core/drivers/crypto/caam/cipher/local.h
7c67490b6b2e00a9435c568bac2bbee4069ccc38 - optee/optee_os/core/drivers/crypto/caam/cipher/caam_cipher_mac.c
149c2203a9171fda3be98cdeace47e7be4d8c8aa - optee/optee_os/core/drivers/crypto/caam/cipher/caam_cipher_xts.c
240eae18f54b7ba6f442845afea7c4b916b911f8 - optee/optee_os/core/drivers/crypto/caam/hash/caam_hash_mac.c
d8824580f4b1889d9a23ddd2047c3b102b9e7a17 - optee/optee_os/core/drivers/crypto/caam/hash/local.h
731f10c0a7fe34860f0d1d21271b01a8a378b1a9 - optee/optee_os/core/drivers/crypto/caam/hash/caam_hash.c
0a5a24f76cbb0ec22c85016a7db24bb4694e66cc - optee/optee_os/core/drivers/crypto/caam/mp/caam_mp.c
2f780d7215aa1c23b998dfe17edabba1d0f4b1f9 - optee/optee_os/core/drivers/crypto/caam/include/caam_acipher.h
eb20c569c7f68eb8f8a1eb16eb82c24a8ac4cd9b - optee/optee_os/core/drivers/crypto/caam/include/caam_jr.h
912d6553b392b20581d016f9eba91479662d6062 - optee/optee_os/core/drivers/crypto/caam/include/caam_blob.h
1f43c71456b997c24eb44cfb6ce30f4558931b42 - optee/optee_os/core/drivers/crypto/caam/include/caam_utils_status.h
d43f75ad0f55131ccce9ec1aa4ca58872a8fc8b7 - optee/optee_os/core/drivers/crypto/caam/include/caam_desc_defines.h
3cefd9acd10d65bb6c61f2e0aec31f43e48f6abb - optee/optee_os/core/drivers/crypto/caam/include/caam_utils_mem.h
f782be2c739055bbdf95842d912e891293d0c1fb - optee/optee_os/core/drivers/crypto/caam/include/caam_hal_rng.h
bc18f3fc396e705bd01c6d443fa911800700bb8d - optee/optee_os/core/drivers/crypto/caam/include/caam_hal_ctrl.h
631d3ce5a38c82b07ae1a14ee6b6cb5ef95d32ba - optee/optee_os/core/drivers/crypto/caam/include/caam_status.h
2ffbbb6180a3ba5fcc49f2958836e6391a2c7375 - optee/optee_os/core/drivers/crypto/caam/include/caam_hash.h
3831fd7967d2e9a71b3b958e87a4dc3f1eb38261 - optee/optee_os/core/drivers/crypto/caam/include/caam_hal_sm.h
898dd496c1a8f25b592f261d9d13a74d3873ff7e - optee/optee_os/core/drivers/crypto/caam/include/caam_pwr.h
a1083a9ff0bc9f8b3c8fbd60ea263a88488951a3 - optee/optee_os/core/drivers/crypto/caam/include/caam_desc_helper.h
7c8acb595959705bbf481d1ffcdda173637dccbf - optee/optee_os/core/drivers/crypto/caam/include/caam_mp.h
f60708cc4c84df857fc20cdef0710a388ecd56f8 - optee/optee_os/core/drivers/crypto/caam/include/caam_io.h
74a055714e2db637adc0291d19cea1c02974e030 - optee/optee_os/core/drivers/crypto/caam/include/caam_hal_clk.h
ee68dcf290038d3ebad07beabb3517b5860bc3f5 - optee/optee_os/core/drivers/crypto/caam/include/caam_utils_delay.h
7be3b8463755df707782bdaee0ed26c692c0f32b - optee/optee_os/core/drivers/crypto/caam/include/caam_jr_status.h
aedd672ed034e8265f35ebab812a5af4135e94d2 - optee/optee_os/core/drivers/crypto/caam/include/caam_rng.h
7e8b656ec0076e7092003e5db98cbed4ea9a458b - optee/optee_os/core/drivers/crypto/caam/include/caam_trace.h
dcc86d041d08d62d6fe7acb03e2380804af1118b - optee/optee_os/core/drivers/crypto/caam/include/caam_cipher.h
21e39b796944181921ccaee48afdda1cf8ce8f83 - optee/optee_os/core/drivers/crypto/caam/include/caam_hal_jr.h
b6481ab7a2c7318250e4e38c57291ffa69016129 - optee/optee_os/core/drivers/crypto/caam/include/caam_sm.h
d23a06ce5206f043b33f8ee8d4e6bfd62d8bb981 - optee/optee_os/core/drivers/crypto/caam/include/caam_types.h
8266a0db8e50af51f61dbe0ad34e4c4f30dbfc1a - optee/optee_os/core/drivers/crypto/caam/include/caam_key.h
0d6de8f72472e2554ab7666852ac52a37175465f - optee/optee_os/core/drivers/crypto/caam/include/caam_utils_sgt.h
547857b357f6594d407d46fcab2f93fa7074d3cd - optee/optee_os/core/drivers/crypto/caam/include/caam_common.h
42cc84af73a8980ed1e51aac57b7ac2bfe8ea567 - optee/optee_os/core/drivers/crypto/caam/include/caam_hal_cfg.h
3a804ad72278dc57b300a9df498d00db63fcefb6 - optee/optee_os/core/drivers/crypto/caam/include/caam_utils_dmaobj.h
cfa13823918f625810c9958b6499358d179c8960 - optee/optee_os/core/drivers/crypto/caam/include/caam_desc_ccb_defines.h
eb43fbde76dd94674bb94f9d314b9c0246403ac0 - optee/optee_os/core/drivers/crypto/caam/blob/caam_blob.c
5d2441d5350d00687dd8e35d19f42faedbb632ee - optee/optee_os/core/drivers/crypto/caam/blob/caam_dek.c
0f4455a2b7723d3cc63f4f0d0623d29b0363b39a - optee/optee_os/core/drivers/crypto/caam/utils/utils_status.c
a5f84b35d9776908441db01241d508dfe83a3347 - optee/optee_os/core/drivers/crypto/caam/utils/utils_dmaobj.c
06d77bc7f344869783912b109cd485ef4e8590ad - optee/optee_os/core/drivers/crypto/caam/utils/utils_mem.c
a34c25f439fb74912fddf47fac4b0295ba1effa6 - optee/optee_os/core/drivers/crypto/caam/utils/utils_sgt_v1.c
130800ee65979019cc2117d690340aaa75cd92a9 - optee/optee_os/core/drivers/crypto/caam/utils/utils_sgt.c
dc70d7f20e3b0430b6dd2fe0dd0261c929d3db6a - optee/optee_os/core/drivers/crypto/caam/utils/utils_delay.c
7c483d7465e733ab3503e26d161daafaa25755be - optee/optee_os/core/drivers/crypto/caam/utils/utils_sgt_v2.c
bb297b79a3f0cc6cb59b1a18f8d19242c9fc12b7 - optee/optee_os/core/drivers/crypto/crypto_api/drvcrypt.c
a6e4483d1fd80f6f7f23a89a9e1ead0fbfcf65d9 - optee/optee_os/core/drivers/crypto/crypto_api/mac/mac.c
d235d21c1de200d48e91b12063eb2f8f1caf0881 - optee/optee_os/core/drivers/crypto/crypto_api/acipher/local.h
38819ea8744620f296d47e0b1cab78567242c9fc - optee/optee_os/core/drivers/crypto/crypto_api/acipher/rsassa.c
46947c70982d23fe999c5a70666a676833b13725 - optee/optee_os/core/drivers/crypto/crypto_api/acipher/ecc.c
013e32cb9018761e86ee0b8b5d19b5c2089902db - optee/optee_os/core/drivers/crypto/crypto_api/acipher/rsamgf.c
979dd11c468df335b342654f7263949e51d1535a - optee/optee_os/core/drivers/crypto/crypto_api/acipher/dsa.c
10a1bf97f0e0b18068905652d799c41d3067a747 - optee/optee_os/core/drivers/crypto/crypto_api/acipher/rsa.c
1e295f6ab5c32f104ea23abb3978af44f64547bf - optee/optee_os/core/drivers/crypto/crypto_api/acipher/dh.c
8ddc0db04f5251ffd3c0beb7d3947298685d5cf4 - optee/optee_os/core/drivers/crypto/crypto_api/cipher/cipher.c
5104681db824caa455d34ffcb91e6bad1b8afad7 - optee/optee_os/core/drivers/crypto/crypto_api/oid/hash_oid.c
e867ba1d32e367e1e498b6fd909c71127118cb1b - optee/optee_os/core/drivers/crypto/crypto_api/hash/hash.c
5e52cbf60af910c8238cdc945b75c611ab59ad08 - optee/optee_os/core/drivers/crypto/crypto_api/include/drvcrypt_mac.h
622acb83b02d0d5e1f8cc107df2871c1d99220b5 - optee/optee_os/core/drivers/crypto/crypto_api/include/drvcrypt_math.h
f8f01711239d5a9fc6ece9f19e40d2f805b04c3a - optee/optee_os/core/drivers/crypto/crypto_api/include/drvcrypt_authenc.h
b70e470e5e716917b0983224109234da6d526139 - optee/optee_os/core/drivers/crypto/crypto_api/include/drvcrypt_asn1_oid.h
208419d7c303ed2af4a123d73612ffc734f88acb - optee/optee_os/core/drivers/crypto/crypto_api/include/drvcrypt_cipher.h
ccc63fa2a34f969b16948eb42489b17fba61d352 - optee/optee_os/core/drivers/crypto/crypto_api/include/drvcrypt_hash.h
8a2b361dc6d53a49514314969ea94af861314241 - optee/optee_os/core/drivers/crypto/crypto_api/include/drvcrypt.h
388604f6c43e1a5e3d7f58dd78274cec774856b1 - optee/optee_os/core/drivers/crypto/crypto_api/include/drvcrypt_acipher.h
30d67ef67cd36d0794f2055d1705d14905f3ab0b - optee/optee_os/core/drivers/crypto/crypto_api/authenc/authenc.c
3502395b082081a4c3f6e68c5f0774a90715d7bd - optee/optee_os/core/drivers/crypto/crypto_api/math/modulus.c
b1b96d68d4bf3e82a538f91afea8b87b5c0f43f6 - optee/optee_os/core/drivers/rtc/rtc.c
2424827fad741fe0c64b1f908dd2743d04f8c6ad - optee/optee_os/core/tests/notif_test_wd.c
22edc57cadee3b6787489b0d44956d4bbeec2ab6 - optee/optee_os/core/tests/ftmn_boot_tests.c
f2f5a66092d40a3e706719d602a4be5d5c382f48 - optee/optee_os/core/kernel/ubsan.c
a81400384a7af050ce6655fe6cbce6764c11336c - optee/optee_os/core/kernel/tee_misc.c
bd1d6750a3c5f91969d7d55bb3920e6fa68c393b - optee/optee_os/core/kernel/notif.c
1beba0db1ff1f826641fd640ce1927e68758f838 - optee/optee_os/core/kernel/early_ta.c
0a4f43b4d4ae6202abe451e4d5b89b295b6c69ab - optee/optee_os/core/kernel/nv_counter.c
5fd72e0e0cb7110beb6e6b7726dff4690da0e4a5 - optee/optee_os/core/kernel/dt_driver.c
3f6a42889e84d4b674901b0cc5d83f5146e84506 - optee/optee_os/core/kernel/trace_ext.c
39ad51f1523b1b8649840277a996b4cfc1f30730 - optee/optee_os/core/kernel/dt.c
1343557a2ba08c97d5edfa5702140ad7d1c794fa - optee/optee_os/core/kernel/mutex.c
aeea2000adf22742f11bf2f37577da2d641ba9ff - optee/optee_os/core/kernel/ldelf_syscalls.c
b7f457457d1bbdcb670c088756ac041dca38b978 - optee/optee_os/core/kernel/user_access.c
309c59c03e9e9577dff0819b23e420d73280278b - optee/optee_os/core/kernel/refcount.c
7be1928ee7e34f7f47f52b99bce43e0024f06a44 - optee/optee_os/core/kernel/assert.c
417bc2dbf92f6a481e18233c7237d492361f4106 - optee/optee_os/core/kernel/panic.c
44103fc460d59f0a919bb3c07cf1944aa91ae2f4 - optee/optee_os/core/kernel/tee_time.c
8b3381928033ddd7c37a99aad2e60a229fbcdbd6 - optee/optee_os/core/kernel/embedded_ts.c
9975d02cd73795987cd451389809dfce9a902e9b - optee/optee_os/core/kernel/user_mode_ctx.c
6b38c2567ea7976b5b92907db7a7f283f88f34fd - optee/optee_os/core/kernel/ree_fs_ta.c
7cbddb58667e106dcfe41235d717f188b05a8641 - optee/optee_os/core/kernel/pseudo_ta.c
4a54e04ef34f60f00a564dd6fc7b5b0f2b3fc65d - optee/optee_os/core/kernel/console.c
fd81d6b6ad33c46f7627aeb1afb49530b9c36898 - optee/optee_os/core/kernel/ldelf_loader.c
221e610e4adbc3cd9e97867d9d1ae548a818fdfd - optee/optee_os/core/kernel/ts_manager.c
93124514b7ec652f01b26753e0fbe172e526412c - optee/optee_os/core/kernel/tpm.c
0712e1350d63ee681e7fd66b7fa4b4d341922034 - optee/optee_os/core/kernel/callout.c
f31d663584038d598520283f7cea7ff093871a2d - optee/optee_os/core/kernel/tee_time_ree.c
94e2c0c379ce289434664a0320006df2fbae034b - optee/optee_os/core/kernel/msg_param.c
892e55c191245007f2bf20567c307871cd426060 - optee/optee_os/core/kernel/interrupt.c
dbdc29285bf6156790d744d73a60320a49f39910 - optee/optee_os/core/kernel/pm.c
7bcd761bfda0ea7f29e4ff38de0ece8fa6224115 - optee/optee_os/core/kernel/notif_default.c
bf3cb1de7bd749b2628925f3a1b32fa1b6085826 - optee/optee_os/core/kernel/transfer_list.c
98fd2892161b2b537e6e91e8e7c6f6a59c55de82 - optee/optee_os/core/kernel/semihosting.c
76b1d45323c31ed6bd5987d7d7400d15d4832eee - optee/optee_os/core/kernel/delay.c
ed43b747e9e9f2732be9fde2e036575eb84fbae0 - optee/optee_os/core/kernel/scall.c
c7388d554896368e7895e9c37859db3dc7865b8e - optee/optee_os/core/kernel/initcall.c
de1675480ef4043349e0bc3875749598f8092a54 - optee/optee_os/core/kernel/show_conf.c
693a3b47871398f69679ce69211649fcf704261b - optee/optee_os/core/kernel/asan.c
b70465c6f22ffdd70466fff3c1eabfd165727626 - optee/optee_os/core/kernel/wait_queue.c
7bf945ae5a8cbf639b6515719569cc25437f2123 - optee/optee_os/core/kernel/tee_ta_manager.c
7aeef825f355d2436dc4fd47d92ca857decaa195 - optee/optee_os/core/kernel/spin_lock_debug.c
21449d26573f5cefed595f37780b901b7b937304 - optee/optee_os/core/kernel/mutex_lockdep.h
813e8ed14c578b5b735b29cae3bbb42af9f03a58 - optee/optee_os/core/kernel/handle.c
1b0bede72d10c96c528f188c6afdecf4306b97bf - optee/optee_os/core/kernel/secstor_ta.c
8abe5fcfb8a632e1c77c0e0f92bbc0414f1e2857 - optee/optee_os/core/kernel/mutex_lockdep.c
1962b8040874d00636c9541f532f3ee5b2ef4f16 - optee/optee_os/core/kernel/scattered_array.c
3fa24c1d1b8edef5954ec87ee18bf385e53a5ecf - optee/optee_os/core/kernel/thread.c
2e32bd534e3540947964f204bbcf020f5f5983fb - optee/optee_os/core/kernel/user_ta.c
02448f355229caa2a32a4411c3198eb084395320 - optee/optee_os/core/kernel/lockdep.c
f4b199a80f0476f43f34060f72493f81a289748e - optee/optee_os/core/kernel/otp_stubs.c
f7c65c67d04a7829967fe1b8c657314f645a5ab9 - optee/optee_os/core/kernel/huk_subkey.c
4db73284f7d92c3be08c2ebc4c1c41bcbd376810 - optee/optee_os/core/kernel/boot.c
2bfc17f9e38fa5fd9c637a5cd1ddcce6300ced48 - optee/optee_os/core/crypto/rng_fortuna.c
6ee664faf892cf6eb54780694431dbc599714a4c - optee/optee_os/core/crypto/aes-gcm-sw.c
5e7555e339aca88d6573eef4844fe96171e073ef - optee/optee_os/core/crypto/sm4.c
e73ae6d522f149d7ffc117d3f026bd44fcd262c0 - optee/optee_os/core/crypto/aes-cts.c
057545a9e027cdd9daa7be1500acbb767b134a5a - optee/optee_os/core/crypto/rng_hw.c
d5a046c4f72b832688b7ba9a347dc8aaa9da47cf - optee/optee_os/core/crypto/sm3.c
a90a47fe595c4f5f945754d11534ae0d16dede88 - optee/optee_os/core/crypto/crypto.c
135fa97faba70e8a9e76d02ac418349f734e5971 - optee/optee_os/core/crypto/sm3-hmac.c
5e36787d311129f8c3649eed00a7bc54de3dc471 - optee/optee_os/core/crypto/sm4-xts.c
7b6658854eec61d103f730922493a99440ca594d - optee/optee_os/core/crypto/sm4-cbc.c
be1aa6aee3798fdc77ebc0a6b37bf5a80fc3baee - optee/optee_os/core/crypto/sm4-ctr.c
e68ca1aeee7c839ed6427892eba453b827fe73a5 - optee/optee_os/core/crypto/sm4-ecb.c
ed4f8a199dfc091202a84e729efc08be8166e573 - optee/optee_os/core/crypto/sm3.h
a730ddd73aac7bf7e2f4530cb84b4139920cc30e - optee/optee_os/core/crypto/sm4_accel.c
8f248f23b28edaaa10678438d9965c0cb94c6a48 - optee/optee_os/core/crypto/aes-gcm-ghash-tbl.c
35204fa717049aa26af2abef06d5466dd22b09a0 - optee/optee_os/core/crypto/sm3-hash.c
7c5fada22f5c639a3b8aef284822d484e1a0c7ae - optee/optee_os/core/crypto/cbc-mac.c
82c796645d5446d81b6013ad6338920da67f8ee6 - optee/optee_os/core/crypto/sm4.h
8616cfea725a82c1c4544264382e782985f9d153 - optee/optee_os/core/crypto/aes-gcm.c
3c8f23a338eea10aca5682c64d8a12902fc433f5 - optee/optee_os/core/crypto/sm2-kdf.c
ac9a4e83f5b47c7a5b8bd921be13aab2890077b6 - optee/optee_os/core/crypto/signed_hdr.c
d4ca5fd6f6801285865f0382f71d054bd42a807a - optee/optee_os/ta/user_ta_header.c
32f326f4c0f102b4ee4c9ba88d7d1760b803237c - optee/optee_os/ta/pkcs11/Makefile
a6e947a9f3f7337320b8940c40d8441cb477073a - optee/optee_os/ta/pkcs11/scripts/verify-helpers.sh
e766a0c478f5e52ce2ea56f842f8e012f68427af - optee/optee_os/ta/pkcs11/scripts/dump_ec_curve_params.sh
048e947aac490abffbce35e24ad1bfc69bc5ac83 - optee/optee_os/ta/pkcs11/include/pkcs11_ta.h
9f912a950243969c9bd8bcd1a3f8a7672a7c8ef4 - optee/optee_os/ta/pkcs11/src/pkcs11_token.h
9bf2174cd5400ba8a556261a46c0aea1a5f0504e - optee/optee_os/ta/pkcs11/src/processing.h
8a63bd474856b01d14303d306048e3981ddf19c4 - optee/optee_os/ta/pkcs11/src/entry.c
00911bcfa70e07182cb595aee29890bada384a6e - optee/optee_os/ta/pkcs11/src/object.c
f6be4d7e2f874ba52219afaf071f4367deb9836e - optee/optee_os/ta/pkcs11/src/processing_ec.c
5d4af2af14cf8c06a09e6cd0d5d40a28c60b9fa7 - optee/optee_os/ta/pkcs11/src/processing_symm.c
aee16d7bf1c5d2a0c39c6a5112cec71f528421b3 - optee/optee_os/ta/pkcs11/src/user_ta_header_defines.h
ae9d768bd9244e2db1ccbd555c05eb4b9e3eac14 - optee/optee_os/ta/pkcs11/src/processing.c
0e3dca0597af48781c952400ea4ecad857110eef - optee/optee_os/ta/pkcs11/src/serializer.h
e1a1a97f5050d21eae952c8db75322333235309a - optee/optee_os/ta/pkcs11/src/sanitize_object.c
aaff008a064e973b8f57ec40853d5935a7fd36cd - optee/optee_os/ta/pkcs11/src/pkcs11_helpers.h
9d7de06484bf080c9fb9d2922ea6a4d808edce81 - optee/optee_os/ta/pkcs11/src/sanitize_object.h
03548923ad53ebeb43856bb7cee45d24b899dbce - optee/optee_os/ta/pkcs11/src/pkcs11_attributes.c
114f7df1ed43dd70f8b8de1604d73c0be609664c - optee/optee_os/ta/pkcs11/src/processing_asymm.c
84f772fd6ba20b3e261cde79ea54a10da7f542dc - optee/optee_os/ta/pkcs11/src/pkcs11_token.c
894d688c805cbbca2bde46ae5dfcf38092d7e8dd - optee/optee_os/ta/pkcs11/src/attributes.h
ed1904bbe93d945ae27a1c8a5fceb6eeeb5e9135 - optee/optee_os/ta/pkcs11/src/token_capabilities.c
26dc92427964930f69b616be7c77b90da4bcb8df - optee/optee_os/ta/pkcs11/src/object.h
2cdc8362b15bac1a4efd183cdb7f8eb495875a65 - optee/optee_os/ta/pkcs11/src/pkcs11_helpers.c
dd669facb02254f0bc7ea46368aa8a0b4a91b373 - optee/optee_os/ta/pkcs11/src/handle.c
8c9b1335779fc8cc85d4a9057276dc5b237c3c41 - optee/optee_os/ta/pkcs11/src/attributes.c
5f8de729864d1ad926d2f9ec4ef37e8ff38ceb70 - optee/optee_os/ta/pkcs11/src/serializer.c
17cf04d9da35f3457e79942626e3f66277b5e92e - optee/optee_os/ta/pkcs11/src/persistent_token.c
a199684d2e257ba2568ad8c8d6788b9e4e8abcab - optee/optee_os/ta/pkcs11/src/token_capabilities.h
9740a8f2cd4228a931861239615d6f0565541730 - optee/optee_os/ta/pkcs11/src/handle.h
9e799d40bc5157fad91180105d091bf81c2695ab - optee/optee_os/ta/pkcs11/src/processing_digest.c
8b6c55e93d111035599141cb97c51bd50631817c - optee/optee_os/ta/pkcs11/src/processing_aes.c
1db1e2fc44c7afd4cfa93f2b32750e814aeff77b - optee/optee_os/ta/pkcs11/src/pkcs11_attributes.h
3df524d2f2b684a0f00302c864626831ef5b1535 - optee/optee_os/ta/pkcs11/src/processing_rsa.c
6ce862868db1d139be88ffc2fa433b9f85a089dd - optee/optee_os/ta/remoteproc/Makefile
b7e9ea83033a02f4da9e1e0468a067f4975d9ffd - optee/optee_os/ta/remoteproc/include/ta_remoteproc.h
15b35ae2fb8d29980308b379ddc5049fa6da575b - optee/optee_os/ta/remoteproc/src/remoteproc_core.c
c1f49c2292f12b9f1ec2111a6cdae3e2e1834afd - optee/optee_os/ta/remoteproc/src/elf_parser.h
e9b100254cc04ff146b7b63d2b5481f702007507 - optee/optee_os/ta/remoteproc/src/elf_parser.c
e492697cf2d2e97abde9c2175b8d72f598868312 - optee/optee_os/ta/remoteproc/src/user_ta_header_defines.h
cc0a07d6f59b29a9ec0e01f5ca6a378b3d445248 - optee/optee_os/ta/avb/Makefile
c4c8560e5ed6b317ef21047db78974a160e3c094 - optee/optee_os/ta/avb/entry.c
c02525b8e321e16b6b2b518ffb2004378287e8de - optee/optee_os/ta/avb/user_ta_header_defines.h
404e833d0e1e4ceced7994f113510b8c835ab19f - optee/optee_os/ta/avb/include/ta_avb.h
f4be3da6e57a11e1c68fa2328f442963bf259f0c - optee/optee_os/ta/arch/riscv/ta.ld.S
47eac8b54f94d5d5a52a43ad5554f4e4c3f7ae62 - optee/optee_os/ta/arch/arm/ta.ld.S
44f007aca97998b425d27b7af67779c039d4d8d7 - optee/optee_os/ta/arch/arm/ta_entry_a32.S
50fac4ba9aede25524155ad8cd8cdd905f195a87 - optee/optee_os/ta/trusted_keys/entry.c
b28af208dabadef396024e4007f36154699e975b - optee/optee_os/ta/trusted_keys/user_ta_header_defines.h
8ff25744520aea7259967d34911798667d2cf6fd - optee/optee_os/ta/trusted_keys/include/trusted_keys.h
1fc86d77236196d92abaaea2db7089937f68b329 - optee/optee_os/prebuilt/t234/libcommon_crypto.a
0da95670e5fe0389c1229b5e282df2e0a301567e - optee/optee_os/prebuilt/t264/libcommon_crypto.a
1764bfc2b32f604e3b3b7d735ce13aebfbd84d74 - optee/optee_test/Makefile
874f5c7caa398ce365ee1c0e5fe2ea7ac3bad29b - optee/optee_test/LICENSE-GPL
460d217e80235fcd8b5e56afba3792cb161ceb65 - optee/optee_test/LICENSE.md
1677c508f843daf45fcf3a1e8c23dacf24f2f222 - optee/optee_test/README.md
17b53d0fe29191063b394c4e94a827b137ab6e70 - optee/optee_test/LICENSE-BSD
9f9d1e370fe395412ffa6a5bc7d21a13586d1551 - optee/optee_test/typedefs.checkpatch
72d26f74f4c2afb8675278b599c37c055eeeee59 - optee/optee_test/scripts/file_to_c.py
d178f675a81f53b7e725d270b25fadc6b064d6f8 - optee/optee_test/scripts/checkpatch.sh
3bef832a16e054c84c76c9efc89b3948ce5b0589 - optee/optee_test/scripts/rsp_to_gcm_test.py
cabe042fca4fe7438e4c5d22af64de9dbdde39d0 - optee/optee_test/scripts/aes_gcm_test.py
c6f2d858387614cd7e1ba883db5977638bbcfd55 - optee/optee_test/host/supp_plugin/Makefile
c035f30f1e5286ab496634f87b76fca573244cec - optee/optee_test/host/supp_plugin/test_supp_plugin.c
fa35e416cf42119ff66e1a064a4d5db8c785118e - optee/optee_test/host/supp_plugin/include/test_supp_plugin.h
1c0d518167dbd004a55feb971308505c53869a40 - optee/optee_test/host/xtest/sock_server.h
9af5cc1bb69f89b1501ceba2daea681936af8889 - optee/optee_test/host/xtest/ffa_spmc_1000.c
99e8b9a2f56ea25f5ff71ba126a28d51208cb2f6 - optee/optee_test/host/xtest/clear_storage.c
d78ae21404a1616e131b1885b8db1d52281461ec - optee/optee_test/host/xtest/Makefile
c546d1c8398ea1f2a5718cc966c2abeca418dad3 - optee/optee_test/host/xtest/xtest_main.c
24ba696e706583a4a4a94d7c43e8c31d986c47d0 - optee/optee_test/host/xtest/symm_cipher_perf.c
97f93f7703f25e42f830363a054f94fa70106e3f - optee/optee_test/host/xtest/xtest_test.h
3203c2511c56b80cf0757ce40aff2627e1589f54 - optee/optee_test/host/xtest/regression_5000.c
413437374ab64a98b09670d83ca99c1eacc86814 - optee/optee_test/host/xtest/xtest_uuid_helpers.c
d9f2461c2a9d755472e666b2c5b60fe21ae7f431 - optee/optee_test/host/xtest/regression_8100.c
27d3681d1dde596e9363305f28906b4b8e53e1f3 - optee/optee_test/host/xtest/crypto_common.h
d4e67633393e1eafbf02639e218f430a71cb978d - optee/optee_test/host/xtest/xtest_helpers.c
12ca0aa8361d1e3bdbf54e11e288ca087745ce14 - optee/optee_test/host/xtest/benchmark_1000.c
1049f2d88d1a17c10c65e55629e4d86b0f182367 - optee/optee_test/host/xtest/regression_1000.c
88e6b365c645ddbc94e846a2630c38fd119356cd - optee/optee_test/host/xtest/regression_4000_data.h
aeb9e6f5f8382411a15b0321473fd05148890a09 - optee/optee_test/host/xtest/pkcs11_1000.h
a611cff7cdaf3b04d87eef15c299048990ec3ea1 - optee/optee_test/host/xtest/xtest_helpers.h
9e020836d511e6e309f374901ad228d82443e779 - optee/optee_test/host/xtest/hash_perf.c
4e533d0531c352071ee236302dab1c2fed2068d6 - optee/optee_test/host/xtest/install_ta.h
6074430df45012584a40484c4ed72373bcbbe599 - optee/optee_test/host/xtest/benchmark_2000.c
52b11c0af213c40771048607e3da5eb5943e0d98 - optee/optee_test/host/xtest/regression_2000.c
f3517bebcb21463533c4004d029833eaf5cde12f - optee/optee_test/host/xtest/xtest_uuid_helpers.h
e1fb4f35907beabaf3b0dbe646b45d64d4aa5d03 - optee/optee_test/host/xtest/stats.h
01ce700dbb77213e51c372e4e6dc61082d7da4fe - optee/optee_test/host/xtest/regression_8000.c
79632869b30c8dc171f607ff89baa306b89fdc11 - optee/optee_test/host/xtest/aes_gcm_counter_overflow_test_decrypt.h
d5a4c49a17b330ff49df1012891c1dc4bc52592a - optee/optee_test/host/xtest/asym_perf.c
bdea22513e96e2e87438e6fedf846a8fa6b3cf98 - optee/optee_test/host/xtest/clear_storage.h
16276b9d01ba73bf3bb21cb41ff264f3d0126d20 - optee/optee_test/host/xtest/sock_server.c
d5fc61a73a10975c5945aa67296797824b64b8b4 - optee/optee_test/host/xtest/rand_stream.c
4cc77b90af91e615a64ae04893fdffa7939db84c - optee/optee_test/host/xtest/LICENSE
4b76e6786bed1ae8da806d21ac567198a5bebdd8 - optee/optee_test/host/xtest/rand_stream.h
dbf5342e84b589222bed73704e5d871bee014e33 - optee/optee_test/host/xtest/regression_6000.c
bd32a230c416880cc28db0762984a455eed79fc8 - optee/optee_test/host/xtest/pkcs11_1000.c
80a9b9f4795682feb072795a92f15c630eefa57d - optee/optee_test/host/xtest/sdp_basic.h
89d308baa51ac6c6fdc1128a98ebcaf98652b24f - optee/optee_test/host/xtest/sdp_basic.c
4ed1b27140db56a58e598a1d47e2eee729363f6c - optee/optee_test/host/xtest/xtest_test.c
4b8fb7ea0f47ef67b8be327bdf31cbdce5a4d928 - optee/optee_test/host/xtest/regression_4000.c
14686c51c1e1fc99b03e351c11aed2874aee799d - optee/optee_test/host/xtest/install_ta.c
9eb4b048f417d3617d5feb7a05ce746dbe4ac555 - optee/optee_test/host/xtest/stats.c
68d3a5e5deb31ba074b1848cf8e1ab7b3ee6606a - optee/optee_test/host/xtest/regression_4100.c
cf936c5da248d096b5c90cc9c6c3b4b278794e84 - optee/optee_test/host/xtest/aes_gcm_counter_overflow_test_encrypt.h
aa6291df45558c38403e3272c86920d0441aace1 - optee/optee_test/host/xtest/include/uapi/linux/arm_ffa_user.h
6da39b2a0971add61c8ddb96ddc3188adae8521d - optee/optee_test/host/xtest/include/uapi/linux/dma-heap.h
dd01f2d86e9e0e0a15aab712c3828f76e4c6e2fc - optee/optee_test/host/xtest/adbg/include/adbg.h
877fc553d7b1b08364cb1189bf4cdc3b6cf3c0e6 - optee/optee_test/host/xtest/adbg/src/security_utils_hex.c
e62cdf03f6bf82c09ca10f285a951c1018bbe70d - optee/optee_test/host/xtest/adbg/src/adbg_log.c
825ea0288d353fbf26dd5cb0e56be8db4e7bf245 - optee/optee_test/host/xtest/adbg/src/adbg_enum.c
bef73e2c136bf2a04bc8cf33b2052afac83535c1 - optee/optee_test/host/xtest/adbg/src/adbg_case.c
cf415448a59978f2a427eddeb129a7080f5b5dbf - optee/optee_test/host/xtest/adbg/src/adbg_expect.c
f465eee2e09e054182205ae7c53f7253604401b9 - optee/optee_test/host/xtest/adbg/src/adbg_run.c
fd1a3702bdc602b4b70535b00d38b9443e275607 - optee/optee_test/host/xtest/adbg/src/adbg_int.h
4f57fda84526a6b64ecc3eccc008e18b97fc3523 - optee/optee_test/host/xtest/adbg/src/security_utils_hex.h
e6ac80b711f1a44d2eb77e1c618fe7f3270205be - optee/optee_test/host/xtest/nist/186-2ecdsatestvectors.h
99f104f79f66a659ea913d475077f7503b8a1c51 - optee/optee_test/host/xtest/nist/186-3dsatestvectors.h
a8012c439058a9ab645990d2efcd10447bc34324 - optee/optee_test/host/xtest/nist/ecccdhtestvectors.h
baf0c6e02b9300a37bd4409628cea730d71faa5f - optee/optee_test/host/xtest/gp/TEE_DataStorage_API.xsl
35ce411007e4e624913b8da87f51325be763d65d - optee/optee_test/host/xtest/gp/prepare_suite.sh
d00562756b00f6607632030c58bbd3576f7c13aa - optee/optee_test/host/xtest/gp/TEE_Internal_API.xsl
78e225e2b8581d7bd917bf1c007f4fee5b1d088b - optee/optee_test/host/xtest/gp/TEE_Crypto_API.xsl
488980fe7c4d8999c8466da403ef5b2811727e7d - optee/optee_test/host/xtest/gp/TEE_TimeArithm_API.xsl
39dbed853b87d4a916b95de14d5e23a8f434bfb2 - optee/optee_test/host/xtest/gp/TEE.xsl
be52e9104f2b38176beb182c8e36ecc119bb5eb1 - optee/optee_test/host/xtest/gp/include/xml_datastorage_api.h
53fb592b76fe82621b4c212f07b0555b4d40992a - optee/optee_test/host/xtest/gp/include/xml_internal_api.h
7b0cf45da16221e265fbd01221f541b851cb9e21 - optee/optee_test/host/xtest/gp/include/xml_client_api.h
45865ac02ab8782763d078613beaf33dce452445 - optee/optee_test/host/xtest/gp/include/xml_timearithm_api.h
392440db195c83fb488b7829e6ec09d994c95319 - optee/optee_test/host/xtest/gp/include/xml_crypto_api.h
01305480c8ecffffa5e19202e81c3611f714ff21 - optee/optee_test/host/xtest/gp/include/xml_common_api.h
705d65243c1e46af9f9642bb84f45b2daeff957f - optee/optee_test/host/xtest/gp/patches/0008-TEE.xml.patch
496f8635c2c0110849cb7e095423e036dae754ec - optee/optee_test/host/xtest/gp/patches/0014-Pass-upper-32-bits-of-TEE_PropSetHandle-in-value.b.patch
4f9aca322840391a171d320f3e9d5976b257fa41 - optee/optee_test/host/xtest/gp/patches/0006-TTA_TCF-fix-CmdTEEGetPropertyA-_withoutEnum.patch
cc1ccad0b05569188be42a4e6fad9069b9b44d05 - optee/optee_test/host/xtest/gp/patches/0011-TEE_Crypto_API.xml.patch
c85d2439e6af14cf1845341a721831d294e94e35 - optee/optee_test/host/xtest/gp/patches/0016-TEE_Crypto_API.xml.patch
34223b3e49b6b18b8bf88abf784fac10a0648a10 - optee/optee_test/host/xtest/gp/patches/0015-Enable-compatibility-with-TEE-Internal-Core-API-v1.1.patch
163d266dd45cad8536da0f2e1f5c625fc45e2e52 - optee/optee_test/host/xtest/gp/patches/0005-GP_defs.h-enable-debug-prints.patch
f0098e4814dc81f9ecae74036f354210e6c33a50 - optee/optee_test/host/xtest/gp/patches/0003-TTA_TCF-patch.patch
c834f47f97dd115566b874fa7e4a6d40d064d939 - optee/optee_test/host/xtest/gp/patches/0013-Disable-Invoke_GetTAPersistentTimeNotSet_and_SetTAPe.patch
4436ae2a8726be665c4adbc30899d7dbcf721afd - optee/optee_test/host/xtest/gp/patches/0002-TTAs-add-files-needed-to-compile.patch
0c86f63bc803a23617fb13ba1479108edaf5dac5 - optee/optee_test/host/xtest/gp/patches/0009-TEE_Internal_API.xml.patch
93fe519236e63a82aec4fa2e267aa9c10a9cf3e2 - optee/optee_test/host/xtest/gp/patches/0007-TTAs-revert-to-v1.1-types.patch
146a6228e298272ab7e73778962df356d9198311 - optee/optee_test/host/xtest/gp/patches/0010-TEE_DataStorage_API.xml.patch
cbc872e82c403faa84376db8efc78150338e2693 - optee/optee_test/host/xtest/gp/patches/0004-TTA_Arithmetical-patch.patch
5bdbfb7c09b73b8ee3f012bb4c05c5655a2e426c - optee/optee_test/host/xtest/gp/patches/0012-TTA_TCF-remove-TEE_MemMove-from-CmdTEEGetPropertyAsX.patch
89bb7582daae987e60e094aebfd5b2b073e9ac62 - optee/optee_test/cert/my.conf
1f75eacaea5baa5f8ecd35d3c8df7e746c3f73a9 - optee/optee_test/cert/mid.srl
6b932b1ab7b3565ddb4557b31b13ff823577f997 - optee/optee_test/cert/my.csr
6f108292e83a3a3555b56add6fba6bfc75bb1d03 - optee/optee_test/cert/my.key
ca513a618e76b7425f4f1350e90c7b74d4778eac - optee/optee_test/cert/my.crt
5870a0a431a6e7fd1fb251ada8f25d58c79a762a - optee/optee_test/cert/mid.csr
c858311b53e86391299c5bc0c30a39801b3893a3 - optee/optee_test/cert/mid.ext
4c8bd2753f58de91b618d71902216b93834e1b18 - optee/optee_test/cert/ca.key
c1c1370410a6251da1f2a65d4bb6799b6695ae46 - optee/optee_test/cert/mid.crt
f11ba7468488761597018fef555faaa8dcf0049f - optee/optee_test/cert/ca.crt
cf7626a2e6fdd3e5cd2455117e6ff59e38cc3a99 - optee/optee_test/cert/mid.key
93503a34df30013f6f47e50cde65662d3e5d3a8c - optee/optee_test/cert/mid.conf
9162a5682d5d26b3df6021cc646498709aadc3e9 - optee/optee_test/cert/ca.srl
137712fa6224fbad991a72e5280eb0e7a967f6ac - optee/optee_test/ta/Makefile
494d296fe7e6b7bc0f500a343c6a33cf9f0b05a3 - optee/optee_test/ta/top_level_subkey.bin
525fc4d0105b2261ed118a2d96d2cbf71cba2432 - optee/optee_test/ta/top_level_subkey.pem
d9a4193c1df764fc72c7e49efeeb550f84c6dcb0 - optee/optee_test/ta/identity_subkey2.bin
2f0deec19c000366d2fd6d627f9b4363213eef7a - optee/optee_test/ta/mid_level_subkey.bin
8890459880f4ef0eb20f8a28b727540e789f07a3 - optee/optee_test/ta/identity_subkey2.pem
5d45a78f116ff6a6a5ce6227b1dd705d86a1a640 - optee/optee_test/ta/mid_level_subkey.pem
4422f5739ce2ed13cbb3c63e04f311df6f21abe1 - optee/optee_test/ta/Makefile.gmake
192ebe9f6d76a6b9d3938a69c72663ef7b627fff - optee/optee_test/ta/os_test_lib/Makefile
b0992bc9d242a926b54b8162b36f7f219c278624 - optee/optee_test/ta/os_test_lib/os_test_lib.c
e0089857c48d5c57869ad4d411a71a2a3ba33f80 - optee/optee_test/ta/os_test_lib/os_test_lib_cxx.cpp
e868bceb0a3e38d9c81f3fece9efc1ced6e9b1b9 - optee/optee_test/ta/os_test_lib/include/os_test_lib.h
5558acac0905fc8f55ec7451c6cafff4654c532c - optee/optee_test/ta/large/Makefile
3231e66bc961e72de9759c2d801cf7e081611183 - optee/optee_test/ta/large/ta_entry.c
04b692b46b7c145c2fe975bb20250626d9e5680e - optee/optee_test/ta/large/include/user_ta_header_defines.h
78c0f90194587f8ec4696ed9937eab82bd2d6102 - optee/optee_test/ta/large/include/ta_large.h
6902d41cad5e1a7fdd792070ee6fe09543fd0a36 - optee/optee_test/ta/miss/Makefile
63727dbe77411a56de4384f2647ac604df1bb77e - optee/optee_test/ta/miss/ta_entry.c
17584ab846d09d2e11a0c62ee9c12f7eb00a89f2 - optee/optee_test/ta/miss/ta_miss.c
e8cc80687d4a1d454c124c0288798e280142a723 - optee/optee_test/ta/miss/include/ta_miss_test.h
7577f16d52d892d26d2aba97100c391696f1b4e0 - optee/optee_test/ta/miss/include/user_ta_header_defines.h
dfc1e1eb35732695271ed55f42d20a4f3d65dd85 - optee/optee_test/ta/socket/Makefile
e1b35b65fffd182965ab59d513da17f3bc2cb637 - optee/optee_test/ta/socket/ta_entry.c
7caf8e51e601aad92bfa2080fd1d462af34a690f - optee/optee_test/ta/socket/include/user_ta_header_defines.h
60c71c4fd9746b52eff3180768cadfb42246ad63 - optee/optee_test/ta/socket/include/ta_socket.h
159ab9161f614e0e78c7ed8ad589b1da7dc49313 - optee/optee_test/ta/tpm_log_test/Makefile
f041af378514b0adb83e13683c439bdfda633a38 - optee/optee_test/ta/tpm_log_test/ta_entry.c
071de3ab826aea3082b54036a436e42d20e5e829 - optee/optee_test/ta/tpm_log_test/include/ta_tpm_log_test.h
15979122b263375291e30ed248816c707e51aa9d - optee/optee_test/ta/tpm_log_test/include/user_ta_header_defines.h
05d9586c179dfa463023108f57186c397f67b168 - optee/optee_test/ta/tpm_log_test/include/ta_tpm_log.h
3762c8d8188b6fd5c0e0216aa0dfbc1a81c33bd4 - optee/optee_test/ta/sdp_basic/Makefile
3e89b728bfdb79e36b4831135f52d8907cc6b6ba - optee/optee_test/ta/sdp_basic/ta_sdp_basic.c
a0178fe3ab1e1cd9204c5868dfb36eed00a7d800 - optee/optee_test/ta/sdp_basic/include/ta_sdp_basic.h
9123b67fb31c5aa32dc2d54b9a1d2dcff27b3996 - optee/optee_test/ta/sdp_basic/include/user_ta_header_defines.h
3e93b929b783566f5933da6daf3bf178b60f0ac9 - optee/optee_test/ta/sims_keepalive/Makefile
63727dbe77411a56de4384f2647ac604df1bb77e - optee/optee_test/ta/sims_keepalive/ta_entry.c
17584ab846d09d2e11a0c62ee9c12f7eb00a89f2 - optee/optee_test/ta/sims_keepalive/ta_sims_keepalive.c
8b0caca8445e731ff595dca61af1768b26fc70df - optee/optee_test/ta/sims_keepalive/include/user_ta_header_defines.h
1b55cdb55165cb46dd80757553d9aab34a61dcd3 - optee/optee_test/ta/sims_keepalive/include/ta_sims_keepalive_test.h
e3deb7bd3c13099679c0218b2daabc17547fb2aa - optee/optee_test/ta/supp_plugin/Makefile
615513981a90fabad2bd36d67b4ece7b3e63bfe6 - optee/optee_test/ta/supp_plugin/ta_entry.c
a6d7b87593d95249d1adf41e1ed2855be8557092 - optee/optee_test/ta/supp_plugin/include/ta_supp_plugin.h
97d8481ac3b8dd32d148d69acc3da07308fb759a - optee/optee_test/ta/supp_plugin/include/user_ta_header_defines.h
62093428f73279ad6337e6b83de79cdc9638aa07 - optee/optee_test/ta/sims/Makefile
a2d1207a964e7c839176e0c9beb333de1aa5114d - optee/optee_test/ta/sims/ta_entry.c
b27b844ff53c4ce9ea4b37becfc73759661121c9 - optee/optee_test/ta/sims/ta_sims.c
d89af8095b36e083626767c864548995a05f5be0 - optee/optee_test/ta/sims/include/user_ta_header_defines.h
11789923a6ea66b45d579f62db7b637f475896b5 - optee/optee_test/ta/sims/include/ta_sims_test.h
3c47004c9fc79085a49889e5e0a2f74eb9672619 - optee/optee_test/ta/sims/include/ta_sims.h
56e682b335cbdbb4b053f31838a28d596ea0dbf5 - optee/optee_test/ta/subkey2/Makefile
3484bf8a9bd48d0fd2c66b682574dcbd80ae59e7 - optee/optee_test/ta/subkey2/ta_entry.c
d1217850bdabdc5c5f402556a4dd76a32af19d03 - optee/optee_test/ta/subkey2/include/user_ta_header_defines.h
786d2761de772f9af4885b058126e8596a16e194 - optee/optee_test/ta/subkey2/include/ta_subkey2.h
f22bc5e3e7d42fae8b515ed89e6d52e14853097d - optee/optee_test/ta/crypt/arith_taf.c
707f95e800674bd769a22f4b05b0f86bde9bdda0 - optee/optee_test/ta/crypt/Makefile
0205269ec12a07945fa15e1f01beacd396129c02 - optee/optee_test/ta/crypt/ta_entry.c
89299c5c290be38d0509309892bd9bf67946a552 - optee/optee_test/ta/crypt/sha2_impl.c
0f5728bb87da64faea76a4d60859ffc6ee7cfb0e - optee/optee_test/ta/crypt/seed_rng_taf.c
6d536756fbdc5623379b5c8c68b3383c6c3c7535 - optee/optee_test/ta/crypt/aes_impl.c
2f8d16642c23418d96eae0799cdbb319adae9bd2 - optee/optee_test/ta/crypt/aes_taf.c
cda695cd368148125b67d4b5049b4b5e44f19d4d - optee/optee_test/ta/crypt/sha2_taf.c
71541fecba370d8d5d888ff889cc55a649e0f6e3 - optee/optee_test/ta/crypt/handle.c
59232c5714af3b17dab86effad8c4adcdc6193ec - optee/optee_test/ta/crypt/mbedtls_taf.c
62f575dd691dc4df07cd85b6aaf381bb1fa129df - optee/optee_test/ta/crypt/handle.h
ae237aa24606ab8442252be914264ebc32acb3f1 - optee/optee_test/ta/crypt/derive_key_taf.c
614fe51fb10384223829bd4caf1b0ee4e995f17a - optee/optee_test/ta/crypt/cryp_taf.c
bece95c11da1deff583de5cccb73aeb047b13bb3 - optee/optee_test/ta/crypt/include/seed_rng_taf.h
65726ede28ff3980980f0786f73da00bf00f7adf - optee/optee_test/ta/crypt/include/aes_impl.h
f922975017d8e69cf55d924ad3475f48207c778c - optee/optee_test/ta/crypt/include/sha2_taf.h
e39b6697e3f099db9e9210630f403279d821b01d - optee/optee_test/ta/crypt/include/user_ta_header_defines.h
751a9eda488bdee96dd4666819f86792eb94e63c - optee/optee_test/ta/crypt/include/mbedtls_taf.h
d6094f43aff3a5e99b1b4916e6f0616f4b506c4e - optee/optee_test/ta/crypt/include/ta_crypt.h
dedb18c14d2c13ecb2666beff2d43a1c6f2b1f4c - optee/optee_test/ta/crypt/include/derive_key_taf.h
971b7e4384dfd449056d2d98600938baaa13b45c - optee/optee_test/ta/crypt/include/arith_taf.h
81c28b5d39b57c60583003aa3b19d4e9355be3e8 - optee/optee_test/ta/crypt/include/aes_taf.h
59bb92661052957ededa8bf444418db0f792e5df - optee/optee_test/ta/crypt/include/sha2_impl.h
98b131e0650e8848c202b367de6afd9713234b23 - optee/optee_test/ta/crypt/include/cryp_taf.h
0b8f95e1cc815a73f1913f8b1cd1199b86afd777 - optee/optee_test/ta/os_test_lib_dl/Makefile
34655a75cdbf9b1cf1a0f475a835630aa77d76ad - optee/optee_test/ta/os_test_lib_dl/os_test_lib_dl.c
9d8c78ff226d9cd3e8f8be315142adc0bdc791d5 - optee/optee_test/ta/os_test_lib_dl/os_test_lib_dl_cxx.cpp
36e93c9c976420202d3962d3af744a06481e4bda - optee/optee_test/ta/os_test_lib_dl/include/os_test_lib_dl.h
403faf3efbd2a187981acd30a58067dcb43d4d2f - optee/optee_test/ta/concurrent/Makefile
b33588442f2691e00ae34677fee3503279ec4251 - optee/optee_test/ta/concurrent/ta_entry.c
81d9fc2603da64f6aca629d4c1f6152ce40f4299 - optee/optee_test/ta/concurrent/include/ta_concurrent.h
b203b24b6fb092d32555949aece3d104a945d314 - optee/optee_test/ta/concurrent/include/user_ta_header_defines.h
545a9527a5a59df10e9fc50f958bf567149bb8b6 - optee/optee_test/ta/include/ta_storage.h
3777dde2c0aee5f993ddf5f6e2899d578554736d - optee/optee_test/ta/storage2/Makefile
fd20f8c7b48682f3cb154209d193c38ef5fa8afa - optee/optee_test/ta/storage2/ta_entry.c
b5ccb3b112baffad3e3afb89d72d7cc8a922ce1c - optee/optee_test/ta/storage2/storage.c
1c8f590037f4f9235325a760a6e10589ac820492 - optee/optee_test/ta/storage2/include/user_ta_header_defines.h
8ace73b1298eb7b4679a5f6a93533d147c6165f0 - optee/optee_test/ta/storage2/include/storage.h
969daad84d451c2beaaeb0205d361045b135c899 - optee/optee_test/ta/create_fail_test/Makefile
327bcd861d17179ed6eec837ae40d93f6d4d5171 - optee/optee_test/ta/create_fail_test/ta_entry.c
f8ff5608bd441c5bb14ba4e0d1ac825036c0be26 - optee/optee_test/ta/create_fail_test/include/ta_create_fail_test.h
28f22d74fc72b507d9530a7788812714f4ccd2be - optee/optee_test/ta/create_fail_test/include/user_ta_header_defines.h
a7891e77ba72a13303bee70e3469d5b66c4dd0ff - optee/optee_test/ta/storage_benchmark/Makefile
126f0a0f43f2045ed64ac151420ff2750039cae6 - optee/optee_test/ta/storage_benchmark/ta_entry.c
1c896a32ab658f67fe2c2469efab67c781d40d17 - optee/optee_test/ta/storage_benchmark/benchmark.c
e69f771764df6d0ccfead0a6b563545f3f43b159 - optee/optee_test/ta/storage_benchmark/include/user_ta_header_defines.h
44317f3ee1e0f27bc5889d02e634bcddc250334a - optee/optee_test/ta/storage_benchmark/include/ta_storage_benchmark.h
350b57d8d13e85db59890347995fb8b25902941d - optee/optee_test/ta/storage_benchmark/include/storage_benchmark.h
49c2d5872d9a41ded424776ddde01ab79ca78988 - optee/optee_test/ta/crypto_perf/Makefile
12f72f4f686c7e5c42580ed7eae7c3687d07bfa6 - optee/optee_test/ta/crypto_perf/ta_entry.c
b3b33590410dd381ad8d37d75f750ede47c93757 - optee/optee_test/ta/crypto_perf/ta_crypto_perf.c
cbdc030bb470e5a4955e3e9156033676053db836 - optee/optee_test/ta/crypto_perf/include/user_ta_header_defines.h
abb0c24867a3ac75294ccc9d9368cf2f9016e699 - optee/optee_test/ta/crypto_perf/include/ta_crypto_perf.h
bef96027f5481438c3532aa395fb391799d91bfb - optee/optee_test/ta/crypto_perf/include/ta_crypto_perf_priv.h
305e7a10ae0489f83dfe773f06b47ad314bb9771 - optee/optee_test/ta/concurrent_large/Makefile
c5741796e6b99090e6fd99dc03a6bbcfe6871028 - optee/optee_test/ta/concurrent_large/ta_entry.c
6fc98a616100591a9ba17fe01d8cd7f30c449420 - optee/optee_test/ta/concurrent_large/include/user_ta_header_defines.h
51f374f9df753de95e0ee8a082c29395bed8625a - optee/optee_test/ta/concurrent_large/include/ta_concurrent_large.h
19e490a77411c75a67b54eb0684edc9dc35f7192 - optee/optee_test/ta/bti_test/Makefile
9752d870fbaca8ae7c1554096be6f228b5a0efaf - optee/optee_test/ta/bti_test/ta_entry.c
02a75c4818fde432ee44ba7d161b5c27851a796b - optee/optee_test/ta/bti_test/bti_stubs_a64.S
a59733e35df2f166b33f45d74ffcad1404144624 - optee/optee_test/ta/bti_test/ta_arm_bti.c
7f829607eda29dcb8ef45bfba360ed98db860871 - optee/optee_test/ta/bti_test/include/ta_arm_bti_priv.h
3d48258f0e002fce82e638e430b603a76c11d113 - optee/optee_test/ta/bti_test/include/user_ta_header_defines.h
a6569f27e231e4466e5b7f08f63a13626cf26810 - optee/optee_test/ta/bti_test/include/ta_arm_bti.h
e00637d3dc4e177f4693a591711c655a84f82c6e - optee/optee_test/ta/os_test/Makefile
f99e6541faaf5c1e883528d5a9a247c9a404ad5b - optee/optee_test/ta/os_test/ta_entry.c
c845f1bef062d33dd7e59d0647155b05ef5ed6ac - optee/optee_test/ta/os_test/attestation.c
f99ecd7a7d1466b6ae095553f19b144a3b5e05a6 - optee/optee_test/ta/os_test/cxx_tests_c.c
a4ae385c460bad98c3f1bb74e4cd6d78a3d1c569 - optee/optee_test/ta/os_test/cxx_tests.cpp
0821f97bb6d0e672f229f163d91a44db3b3cfc21 - optee/optee_test/ta/os_test/pauth_a64.S
30c95077d893a72f6dd6f25698b9e3c4c90c7173 - optee/optee_test/ta/os_test/ta_arm_pauth.c
7c34f62620b2c3cf1e435dc2f06b5bc695a0ffca - optee/optee_test/ta/os_test/init.c
81b48e32f421e3809c799370e7d5a84be82e4007 - optee/optee_test/ta/os_test/test_float_subj.c
4b24fec7bb0779f54df830b2accd4589c58ee714 - optee/optee_test/ta/os_test/test_float_subj.h
9474cf4fc4a3b252db66bceae94a0d1af55032a0 - optee/optee_test/ta/os_test/os_test.c
0455da7d426f2d9c91e8d1f0ceedcbcdc25b7e63 - optee/optee_test/ta/os_test/cxx_tests.h
8e61b08c2d218f799c0ceb8531677adaf702b81c - optee/optee_test/ta/os_test/include/os_test.h
c250edae8e50b81ddc7f2d82b74533be8ce36484 - optee/optee_test/ta/os_test/include/user_ta_header_defines.h
5925bcc4d74e66a2c9ac214c3afb53d3a2c40385 - optee/optee_test/ta/os_test/include/tb_asserts.h
f61b829b0f8774e078f535f9dcb469a402aab63f - optee/optee_test/ta/os_test/include/ta_os_test.h
ef669e3a5af86a9d7433680efe47e7475ebae840 - optee/optee_test/ta/os_test/include/testframework.h
0fc4efc474f17406466b3a01708a70604c4bf90a - optee/optee_test/ta/os_test/include/tb_macros.h
c0f2b4917d2e7e2c64767ce20c51277d030da95e - optee/optee_test/ta/os_test/include/init.h
ab190ed1cbd92987955bd1b18cf1125760e00235 - optee/optee_test/ta/subkey1/Makefile
e98d28dd7d955c5f1430b86d1f9fa9a293f2c6a5 - optee/optee_test/ta/subkey1/ta_entry.c
3ef18fee5ed3f12595bcae5cd670e9b614bddccb - optee/optee_test/ta/subkey1/include/user_ta_header_defines.h
fccce5046748bb0a2c4bf866d2ee4099789327e9 - optee/optee_test/ta/subkey1/include/ta_subkey1.h
a29dec4b78281324f1e479a7648b636feef1d163 - optee/optee_test/ta/storage/Makefile
7e3e9ed670136ea79aa56b6e986e2b795074cc8f - optee/optee_test/ta/storage/ta_entry.c
28f3b4d568bd2c813a6ea3b5880001756c6cc945 - optee/optee_test/ta/storage/storage.c
cbcf995c4fce7f48869248f9f3bf912195d4873e - optee/optee_test/ta/storage/include/user_ta_header_defines.h
470456cae0c3f509a24f5ec3678881a672b863c7 - optee/optee_test/ta/storage/include/storage.h
96b12ede29af7df11c0b54a3d3924599f9ad0de4 - optee/optee_test/ta/enc_fs/include/enc_fs_key_manager_test.h
db39d7c16208c8b18547c18b524c4d4d8d8533a6 - optee/optee_test/ta/rpc_test/Makefile
28e50e4d884a51351b0454dcf8971ea8619becb2 - optee/optee_test/ta/rpc_test/ta_entry.c
100bd8db89d7d506ba95afa1adf59c093bee623b - optee/optee_test/ta/rpc_test/ta_rpc.c
daf6f0380173f9c72cb5ab411c7e145635102403 - optee/optee_test/ta/rpc_test/include/ta_rpc.h
bb5b31def49e12cb5ca13946631064fdab7f3ce1 - optee/optee_test/ta/rpc_test/include/user_ta_header_defines.h
5a06508a48d77c9bc4d4483f2c1064bc11547f17 - optee/optee_test/ta/rpc_test/include/ta_rpc_test.h
6c873429bc677416677c5807645bf161215865df - optee/optee_client/Makefile
78f536919f25f831039c9e212335de0e5c520f21 - optee/optee_client/Android.bp
1be3a93bb56c46ee4d4693b47ddd7c4c5487ffd3 - optee/optee_client/README.md
a7d910ff308216f427e9a4776d72cfe84e2915ad - optee/optee_client/LICENSE
c9b3bb5ab0a3d0252ed93cfc3578e3991ee2b994 - optee/optee_client/typedefs.checkpatch
4d8b5919ad0abd638aafdbf35811a4621b0c8b79 - optee/optee_client/tee-supplicant/Makefile
eb98a21fbd1ba262819d424d9c8670c460ddd6d2 - optee/optee_client/tee-supplicant/tee-supplicant@.service.in
81844c481172a0b706699f9b8ab51f1dcc140077 - optee/optee_client/tee-supplicant/optee-udev.rules.in
3daa410517ecc0b807ea1ecd150345c234b17b3f - optee/optee_client/tee-supplicant/src/rpmb.c
eb428488f05ca6049614557e2a89abbe531b1e24 - optee/optee_client/tee-supplicant/src/sha2.c
ea069507eb088c8be58fd316e1182d94fdcfffb6 - optee/optee_client/tee-supplicant/src/optee_msg_supplicant.h
5387e1fcf4e95d497b72ee814d729c4c90adb740 - optee/optee_client/tee-supplicant/src/plugin.h
435831cff86e23874de21d77aa2acd2e2847e629 - optee/optee_client/tee-supplicant/src/tee_supplicant.h
2eeff0bb8ad1aaf5594e87a9faa9b9bffa63ee8f - optee/optee_client/tee-supplicant/src/plugin.c
b738d8b04995c56175826db5cbaca1ed21e079ad - optee/optee_client/tee-supplicant/src/teec_ta_load.c
f5b0fdcf3343c38ff2495f438044546952d538e2 - optee/optee_client/tee-supplicant/src/tee_supp_fs.c
a5f3a0cb9e4309400c0c22dc574de3c8eef67a65 - optee/optee_client/tee-supplicant/src/nvme_rpmb.h
945a945fa92b85f4b7003123e4ef27a588bdc2bd - optee/optee_client/tee-supplicant/src/hmac_sha2.c
bed7d31fece3711cc20a9418d51d24ef7fe3391b - optee/optee_client/tee-supplicant/src/prof.c
9efbbcc74516c066903af8fa2d417820438a7c34 - optee/optee_client/tee-supplicant/src/sd_notify.h
8fbfe192d68bdb1e126598cb730e7c11f511960d - optee/optee_client/tee-supplicant/src/hmac_sha2.h
946a1750a3bd2cb7ee8a0934d7df7849d1649aee - optee/optee_client/tee-supplicant/src/__tee_ipsocket.h
721aca20ceeacd1648d0f7204c85f69b282fe101 - optee/optee_client/tee-supplicant/src/__tee_tcpsocket_defines.h
593518d07f2abcdc15942f188796aaa0bb12d4c6 - optee/optee_client/tee-supplicant/src/__tee_tcpsocket_defines_extensions.h
a80eb6caf9c8732d74f0fc4c329a4222995ec6c8 - optee/optee_client/tee-supplicant/src/__tee_isocket_defines.h
a16a80d873293f74d73baf53721eb5019ded25cf - optee/optee_client/tee-supplicant/src/tee_socket.c
d6dd587b4421a742de3144b103342789681958a4 - optee/optee_client/tee-supplicant/src/teec_ta_load.h
2b4e00ad1b9e0f3a5e7c2efbef6591de41a0e409 - optee/optee_client/tee-supplicant/src/sha2.h
b5efb72e37a61a5ed8b06535e7c89b869565b186 - optee/optee_client/tee-supplicant/src/tee_supplicant.c
b81a505561be6982f3eea681e266827c8236583c - optee/optee_client/tee-supplicant/src/__tee_udpsocket_defines.h
f17cf7d08bb300eb71cf0b2ca503f505c269e761 - optee/optee_client/tee-supplicant/src/tee_socket.h
f1107acfa97784e2a91a1a393dd6198fc4a4a222 - optee/optee_client/tee-supplicant/src/prof.h
1f145b8b2fe3882017290f627f46dfc328a7c144 - optee/optee_client/tee-supplicant/src/handle.c
2d73473a95bfabcec688ccd46cce7276097a3290 - optee/optee_client/tee-supplicant/src/sd_notify.c
4a38f4ea1eea116c78d27b03a2cbfb92f8ea3a97 - optee/optee_client/tee-supplicant/src/tee_supp_fs.h
9763ee4354d75e34559e80fe8dda7bb158c4c5d0 - optee/optee_client/tee-supplicant/src/handle.h
07af4053379b51e5d33dda8ac2eda2181ae23a02 - optee/optee_client/tee-supplicant/src/nvme_rpmb.c
f04b1790f669de1573516dc81fe3f4eefcb59c1f - optee/optee_client/tee-supplicant/src/rpmb.h
d6e6c51b13d0f6f61ae51ff3da8b8f51b3ac433e - optee/optee_client/scripts/checkpatch_inc.sh
5f5e044fbbcd7b4262c4d4405cac9dc8115b9bd6 - optee/optee_client/libteec/Makefile
a5fbbcfc0214db8015e94fc05998f548c339e1ab - optee/optee_client/libteec/teec.pc.in
c6e011ef6751f07449bffe9fd19006a15b8624b5 - optee/optee_client/libteec/include/tee_client_api_extensions.h
43da45835976c93e70ec5ad1ed02b891a0dbe000 - optee/optee_client/libteec/include/tee_plugin_method.h
668dfffd684890e7dd9bedbfd635db0df9af35d8 - optee/optee_client/libteec/include/teec_trace.h
a3e6eec2b0c6f60ab6995f2b082b866bda6a808c - optee/optee_client/libteec/include/tee_client_api.h
16cd3b045e35ef0e65b2c33238b2b59f62255883 - optee/optee_client/libteec/src/tee_client_api.c
d842563e16728b8e4b8e70f1fd7522598235d843 - optee/optee_client/libteec/src/teec_trace.c
15278a332dd772f0c91e486e562d10ba1b9cb6df - optee/optee_client/libteec/src/linux/tee.h
c2eeeb99eea300a1748db00f9803a548f2282c49 - optee/optee_client/libteeacl/Makefile
1cf357b019b2533237bef65ce240ef9e7d0d77b2 - optee/optee_client/libteeacl/teeacl.pc.in
ee867d9d7bddd079e18e86b614ddb0951d3a79ce - optee/optee_client/libteeacl/include/teeacl.h
3842833a20a863d971c8d33f5e101ccc77e88c62 - optee/optee_client/libteeacl/src/group.c
d44856b3c2e641d34dc08c44aa14df8111f0f2a0 - optee/optee_client/libteeacl/src/tee_uuid.c
94dc6f25362ba38974deb9290b3ea1460569ff71 - optee/optee_client/libckteec/Makefile
f25fe667d7155f39694414e63dac8d54adb5e264 - optee/optee_client/libckteec/include/pkcs11_ta.h
cbd1cf1d939303ee17050057c176ddb7498b1598 - optee/optee_client/libckteec/include/pkcs11.h
7d66a5a9955374f577b36eda3684c254841edbda - optee/optee_client/libckteec/include/ck_debug.h
e640a280681f076f112beee518ea1adff965c818 - optee/optee_client/libckteec/src/local_utils.h
3d1d16bc8a998c7382d0e5deb177e421613cbdb9 - optee/optee_client/libckteec/src/pkcs11_token.h
28f837a80c95ceb3f72437386993f46469f861e9 - optee/optee_client/libckteec/src/serialize_ck.h
48b8562a4200b00fe6382797789d8e694186c620 - optee/optee_client/libckteec/src/invoke_ta.h
a36127385f3d497598291e167cfc4147e48861ed - optee/optee_client/libckteec/src/pkcs11_processing.h
4a7c34adbc6006ef9230bb1919ca520891b9823a - optee/optee_client/libckteec/src/invoke_ta.c
04e59fc9b03985ed9c71fb751bcf60dc050aa517 - optee/optee_client/libckteec/src/ck_helpers.c
0db1379449cb2cdae53a7b480a402e8c43457431 - optee/optee_client/libckteec/src/serializer.h
53de33af06e51fb21fe2f24c2c0665a45baeb3b8 - optee/optee_client/libckteec/src/ck_helpers.h
66ad3fbe5639477f5ef0f50c0a87bb825db643aa - optee/optee_client/libckteec/src/pkcs11_token.c
27cd49c5be59123275b6d2d23f61956cd86846c0 - optee/optee_client/libckteec/src/pkcs11_processing.c
a4b2b6fc00af2b337386db3fc110f54709a248bb - optee/optee_client/libckteec/src/serializer.c
bd87c74a1fe834dd19c7386da0c416edf503b03f - optee/optee_client/libckteec/src/serialize_ck.c
145e33a2859354e90473957df5bdd430b63f437c - optee/optee_client/libckteec/src/pkcs11_api.c
f88324eb36dec1f8579a56f5e446475ced59b52d - optee/optee_client/libckteec/src/ck_debug.c
2a0b9b82ad279a7127d4fb8fa2c4c4bb0bbfb62e - optee/optee_client/ci/Dockerfile.debian
874f552974cb3d5f17a63dd2ba50582a28e2d28e - optee/optee_client/ci/Dockerfile.ubuntu
acd8d0f397cd4e0ffdc9aed50f3f91fcf357822b - optee/optee_client/libseteec/Makefile
2219ff4dd85f1c6a0ee11024a1834c7d17124a79 - optee/optee_client/libseteec/include/se_tee.h
eb52a5aa690916e1cdb6e9d58fd746762ac03bbc - optee/optee_client/libseteec/src/se.c
f5d83909e5071e2affc98fc56ac4b941e00ef03a - optee/optee_client/libseteec/src/pta_apdu.h
dfe89d4404a213f5751887db149a30135cd07f9a - optee/optee_client/libseteec/src/pta_scp03.h
fbddcc56f1918f9c27f657f1e527b77f9a94382d - optee/optee_client/prebuilt/libuuid.a
3eb30c4c0069f3a45e46ea616d1bfaa9c81dcf95 - optee/optee_client/prebuilt/uuid.pc
f946a4e57b4901f5733debd6aec83a809534f9cd - optee/optee_client/prebuilt/include/uuid.h
bf52776d687b57bc5e886b2f4e7a0f7ece62b0b7 - optee/samples/Makefile
b2def2faca96323618fae5d302c50260bccb869e - optee/samples/LICENSE
2f700b45a00530a528bbd7086b22444f8a91ea96 - optee/samples/cpubl-payload-dec/Makefile
ea49cce3ddf319882d8e400806f6a761de306ce7 - optee/samples/cpubl-payload-dec/LICENSE
3945bd127a3cab935cd8b206bdc6bfbabd07e020 - optee/samples/cpubl-payload-dec/ta/Makefile
c37254b292d303cab4ab95c06ce5cbc3adc72b5a - optee/samples/cpubl-payload-dec/ta/entry.c
135be83f6d1ba5b8793d6127420fe3b879424531 - optee/samples/cpubl-payload-dec/ta/user_ta_header_defines.h
22e887e40458255171cfad715a9c477826fa3cfb - optee/samples/cpubl-payload-dec/ta/include/ta_cpubl_dec.h
85cb555a484a3191da2b234f4c2121addebc83a5 - optee/samples/luks-srv/Makefile
6fb1ad386475e975804bd789938f171a0e634bf9 - optee/samples/luks-srv/README
b2def2faca96323618fae5d302c50260bccb869e - optee/samples/luks-srv/LICENSE
ba0f3f4839fe17b652aa8a9e18d0f5fe602f4662 - optee/samples/luks-srv/host/Makefile
8577e960a7ba6fea952165100b467fd6b4fb1902 - optee/samples/luks-srv/host/luks_srv_ca.c
42761539497633e52d70529a0c963678c1e2b9e8 - optee/samples/luks-srv/host/tool/gen_luks_passphrase/README
ea3aeef7e946314ca0a3dc1f6b2c64099963b8e8 - optee/samples/luks-srv/host/tool/gen_luks_passphrase/gen_luks_passphrase.py
6d3ac3cebb74c4f088accfac2d48654ea788769b - optee/samples/luks-srv/host/tool/gen_luks_passphrase/example.sh
fa3f0583c33f15560475d2899643217e9b8bdedd - optee/samples/luks-srv/ta/Makefile
9198ad9d0108d1f0c5411e43cfcdbbb011dc6ddd - optee/samples/luks-srv/ta/user_ta_header_defines.h
7dcf0c69657674d5c8d84f037993856ccdabf784 - optee/samples/luks-srv/ta/luks_srv_ta.c
80db8ae67e3a08227b8feeb7c71d80c97e620988 - optee/samples/luks-srv/ta/include/luks_srv_ta.h
b534b3c1b0a9fc7ea3c6a3ecc9d4a7182a66f022 - optee/samples/ms-tpm-20-ref/.clang-format
56cea4315ced27989bf4993b5ebb6f5123222c3b - optee/samples/ms-tpm-20-ref/SECURITY.md
f6b93af13d9e63b71913cff634eca28699832bb5 - optee/samples/ms-tpm-20-ref/.nspect-vuln-allowlist.toml
9fcc9b4c93fd85452b4b1a3c89afe4d598d545df - optee/samples/ms-tpm-20-ref/README.md
e12c4ff9f6d12441b1b697d24c4b8b6923b2fb08 - optee/samples/ms-tpm-20-ref/.travis.yml
bbf046fa124b7c4632ae2631e9059507a72a3d2a - optee/samples/ms-tpm-20-ref/LICENSE
13c6e4813b3e9761d334db45a93cef59b96cde02 - optee/samples/ms-tpm-20-ref/CppProperties.json
10937e6af19c7747e93a8367c3ce6953f2c09b6e - optee/samples/ms-tpm-20-ref/CONTRIBUTING.md
7cd6e55737ca672c343962a688186bc665f41898 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/README.md
df67ed7bc549a84f8ff8a5de0d3d096a6e2bbd48 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/Makefile
6d3239af75e740ae509ca8b2e0d51b584f3465a5 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/Makefile
3f229d45d7d2ce7e5d7e46e12377af9165e6c361 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/user_ta_header_defines.h
1bce5759e31235d9c5bdba21dd91adaa428fc3f0 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/fTPM.c
8a3ff6f0fbf400d5960a0b9e29100a2f0c257cce - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/lib/mbedtls_ltc/user_custom.h
53e682c13d0856ad3840af92efef4f69ce2e1d61 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/include/fTPM.h
ea9d25b54a0bfb6a2f2919629390ac2f1a7cd709 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/include/fTPM_event_log_private.h
f0e69701b65f4b4bf75a97838a5784c8b96377eb - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/include/fTPM_event_log.h
eca8429d573b1efe6aabb85e729081ecd232cd9c - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/include/fTPM_helpers.h
d265a8bc723bc221914fe71eecf809497317402b - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/include/Wolf/TpmToWolfMath.h
1abdd3758b52641bc84ab63597b351aec39dd45b - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/include/Wolf/user_settings.h
369f00bc9361a2d2471b00bbf96c1ba518e645b3 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/include/Wolf/TpmToWolfSym.h
2a43b3beb22e372a4284450764b201c24f4e7f97 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/include/Wolf/TpmToWolfHash.h
376c946270a22a79f5ae90cbbd3efeb4b6a0b5f4 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/PlatformData.c
9c1182d6fbfc09acdb617e2c6e644e7bc7add570 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/Unique.c
87d59c28e82a41130b6d7f9a8a36c75e1b750a0c - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/NVMem.c
c9349c1d5329a5100adce5dcc24d234c9bdcaa61 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/fTPM_event_log.c
b59bde7a93e1cc1855b209291ae236fbffcdedbf - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/Cancel.c
d8d1e1184b822d904eceda19ad720da371cefc24 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/PowerPlat.c
79c38e67602cae65ee67146a13518eeed36f2bf8 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/EventLogPrint.c
7c5cb20afa4a0e569b22aec797fabdb2f30552bd - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/PPPlat.c
52663f93a5790e3ca64daed728e5491847136e5e - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/AdminPPI.c
13ac1a0dcd262678d94da7a3b86856a3a3851361 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/fTPM_helpers.c
283a4b88a1e84f5ef741d4f4d4fde82d9407ca55 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/Entropy.c
d5d1030b42d4d34b5b1384aa182b441c909f4df5 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/EPS.c
411c14cd40d0d71d28c13f52c3911e5a8c411b2e - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/Clock.c
61e1c6504462645f5064ea9dc434804a824a5075 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/RunCommand.c
d7201b197b3e91e981077abb03ae2827b42a9b63 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/LocalityPlat.c
46c4a6540314c172068f6dc8fffe1f467861b7d6 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/DebugHelpers.c
963be460c3847e12f66b652610ba0bc3281f4bf4 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/PlatformACT.c
d9b2bbfdaceb0f02c468ede7e0b05fe5a8aa50f4 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/NvAdmin.c
b493c94195fe836564fb88852ba0fea97814ca6c - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/include/Platform.h
b5b9fbb93586419230ff8d1ec018285878ad46c2 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/include/Admin.h
82113c01765d59f6759fd977d625e6444fd75572 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/include/PlatformData.h
f7c1239e5dea6bb93130c66ed56ce33485985ed3 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/platform/include/Platform_fp.h
62105e5307c3636450c1864348a5d5d35b63660f - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/reference/RuntimeSupport.c
cd7e6c680ef80aab7901ba9978c4afd5a7e52a63 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/reference/include/bool.h
2706d6092917100fd8117a9d5c315e7862629748 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/reference/include/TpmProfile.h
5bc59f1069c9183079f5bfaa521e4398048fb2a4 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/reference/include/VendorString.h
e6eb4da02d48333abbca49a31090610423fa06d0 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/reference/include/TpmSal.h
468436d93e40d0fc852d4e86920fbc68718c929b - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/reference/include/RuntimeSupport.h
65607068ebad388e1a689ac6e701b0b45e02c5a3 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/ta_prod_signing_scripts/generate_digest.py
14fb1121df155d6da96d7a1d6351b9fcf47a0af5 - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/ta_prod_signing_scripts/README.md
e643f090d5cbaaa3dd73f87fd32aa7bb079e776e - optee/samples/ms-tpm-20-ref/Samples/ARM32-FirmwareTPM/ta_prod_signing_scripts/stitch_ta.py
a7aeff0addca9724f945178d6857a4d5b254de77 - optee/samples/ms-tpm-20-ref/Samples/TPMCmd-DeviceID/build-tpmsimulator-deviceid
32b6f41f8cb17695fa4e40dcdb5a13bcefb7d93e - optee/samples/ms-tpm-20-ref/Samples/TPMCmd-DeviceID/Platform/src/EPS.c
e855760eaf75328c77fc714300151c27ce864ec3 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/USB_Hookup.jpg
10c3fd48393c33d4510c403bde7a91efbf05666c - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/microUSB_Hookup.jpg
3f8d0256d18033e053779e7864508daa371797a9 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/.mxproject
0206b31f994b247b4ef78e829cdc3fbfec23dd97 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/mx.scratch
8086602309481b27c6586f824f4783f514c027d0 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/.project
17bc2133944d7885da66070c51191d5c4c7a86ce - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Nucleo-L476RG.elf.launch
77f371cf9bdfbd2ee243ceb2d60dfc4f734095a6 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/STM32L476RG_FLASH.ld
e40037acef5ee9515273d568d4fa1f7d7c2dfb98 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Nucleo-L476RG.pdf
96cf2e3a3a7fe535463d74a9e77bdd6eff9e544e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/.cproject
8f3874f3592022902246b887ff77ba3dafe8988d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Nucleo-L476RG.ioc
20bd88d6e69c5795823fcabe4faf5f97189eab7d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Src/usbd_desc.c
d866ccd9ea216a89eb9d539b9a9df43b83b1c7cd - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Src/system_stm32l4xx.c
efe613f6cfea1253034d36d8f9eb0a3885a72b51 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Src/stm32l4xx_it.c
e82acf04a1cad0a297e5cfc954c31a504c3c53e6 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Src/stm32l4xx_hal_msp.c
6d604522f0cef3bff34a64eb9e500cdce25b5d57 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Src/usbd_cdc_if.c
c1db06ecec983da549ee3a8ae57154b2460f8d4f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Src/usbd_conf.c
16d1db972ccab86a0e8c0aca69dfb400853b139d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Src/usb_device.c
55729e915ad655e9e16d0d30c7699bef97c14a99 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Src/main.c
f8423beb4a536d57e5aa0c948599c0c8feb00a9e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
c766b5449c964208e6c0301ca2f558902b8b9528 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
ab94a34d9ab12695aebd8fa8466ade808f27e929 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
3b25e71498a2311c71b3919166ecf09dc5141b1e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
9a2873d30abe93eeb862acfe28f3590a9a6f06b7 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c
60317c715b32cdb43f4f23b57141868055ea4589 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h
f2e11c0c40d6e621c683638444082ccb2cd1e404 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
ae9cd8bf67b36f59b68abe1006f6e621b3097871 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h
10fec4a5fea35ec45db039d5a366c3b6a4dfdc47 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
03bd0280d262095dfc54880a3beebc7e8d1cd238 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Inc/usbd_conf.h
75b6204210b1d2d7bc133c477e55b55ab886553d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Inc/stm32l4xx_it.h
29fa5f1155f4b6471a344eb19184bb023e939cbf - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Inc/main.h
f2d077bd5409d6fd6fe3992c5cb64c6f4632d217 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Inc/stm32l4xx_hal_conf.h
97a7710fdcc32282cbf75739e2b1afaff643e09f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Inc/usbd_cdc_if.h
c20ba1d07bb19091580f77d81b3ef95b0b843914 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Inc/usbd_desc.h
b1f85fda09c5bd2d09cea7044da1fe04616da066 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Inc/usb_device.h
25392a40719c25b125bb4abc1c9105228b153444 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/.settings/com.atollic.truestudio.debug.hardware_device.prefs
988b68517c27704d1f464138322cb3e7ef94c005 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/.settings/language.settings.xml
a19a363124b0fdc91c783bf67234bfd09ec1c211 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/.settings/org.eclipse.cdt.managedbuilder.core.prefs
72ad8c891c625eccc2ed488d63e73685b36bb7de - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/startup/startup_stm32l476xx.s
7b273c6190dd31db4d1f5091bb46a780eed2f065 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc.c
6905470e6a40b7909609c5a5e902c0efcae29c17 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c
b31f07cb494c120315b086a52a662d098943fb56 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c
4dbd5f4ac87a7b6ac1d550a567e59f1238f7d026 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c
54204b942a2710a64b6ba0c30b84e1b3b52dae74 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c
622a5ea51bdb8c062e8e889f4b71bf6482fa5264 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c
12784369e6124301623660326aeffa81593b036a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_ll_usb.c
4dda1150337631a2d17123634e05b782a5668b04 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc_ex.c
25ec312cbb302ca24cf9e909df42265a12821a78 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c
2b8ea417236425866c81e285a0ab18d04783b587 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c
b167ca16a9d80ffe8bdffec69454d740bf0117bc - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c
5f07fe6dad1130b6ee4df5a184ac8b0226619cd6 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c
7e7baefb69d9a62f7684c185a9fb3ddd83500a39 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c
df06884b75649ad21d7110e12ab4de41f1e9eb4c - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c
a15fdfad695b08ee5b822074ff541cf712f2c39b - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma_ex.c
da703e39e170c4cb94dfa998f3f1ffa29d80d699 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c
36599a4da2f2d80c6e6ac0220385ee433b03e54f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rng.c
4516770dad8099473586dfb47cf5cc4cf85dbecc - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c
e926d3bdc7e3bf71bb7539ea30ea292b92d7ffe3 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pcd_ex.c
70c187cc31e577582b15c93b82183a02ae1e45c4 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c
a049a3b8f2c1bbc893531c3dec916646bc42443c - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pcd.c
b241444200a682980fe3e6bec522da4e967a170a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c
1e88ee4f8bd2b1617b9d2523943dd1e6acb23dcc - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c
296985473134d81cdcee7e324c2d47a069390872 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c
da4c5dc66fa19f1a2dea73d7aa3e81597b676dcc - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim.h
76daccf26f1c1119f653377547eebb3aead3ae9a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pcd.h
3f9db9098124b6d4bf658a9ff358a93525f658b0 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rng.h
eeefa20586b1afc75301a9c1a9fa51984bf8e5be - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_def.h
85ce004e873496c1eacf6087a2b3c82652c2f87c - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ex.h
cc2961929d2d137935b8d36ce4d073c22ecb6d0a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim_ex.h
ef09ef096f9aea54c52b3f8643d4a2de8caefd08 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_ll_usb.h
7d01a2e45f24933398c321ebf63ab167f6681b98 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_cortex.h
2905f1d5f33236d983b4c332990276c9e1bb5521 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash.h
05b58c53586df1d7b41ae67ee282455482c2467d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma.h
7a1f93772829c677cd79a5c7d91c49a0d414bfb8 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio.h
66a329dbf83da1d835ef3a2056ff37b30cc34c2a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma_ex.h
7cae377cfa95e6bca50a18ebe16d4ecc325278df - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pcd_ex.h
cde58e7973942b2d9f6fddaa266fff01a9f39a9b - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc.h
d87d95f0dce5fc06196437a894acb9c5d4f02f95 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc_ex.h
a737f1820b6165f725d7549f95775b4d21c6767f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c_ex.h
ee193c30ba73303f2644de840804e121c4a9a4ea - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rtc.h
c98c6c63fac3bcc2cdeac550828e9bf253b0aa5d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal.h
dffe5c55f2b819f9601130a43806007a1746359b - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio_ex.h
06a183a5b3a97fb5a3ccdfeae53c776cfb650a04 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ramfunc.h
b93c1179f456734f5977ee7fde296795f371dfaf - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr_ex.h
ced33137d14e602db17d8caf629ada93528ee8a8 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart.h
54e67e3be92290f9e6457f2f91c04bbc7099ea48 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr.h
5de56cbae29e353bad3c38d9081a059eface1630 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rtc_ex.h
d79b95f004663f145e964ff6cb145e92a36e9652 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart_ex.h
4e41e93110701a53f7bc809136a4ab0649de3413 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c.h
c23c26b4a5705dfa36703ea8b6c5f40dffd8ab7f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/STM32L4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
16b99b227562ccb1354b33482c354c1812123013 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_cm4.h
3fea94e10d135f6717a70f8d1e199b010baa7f08 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_cm0plus.h
9f5c937feac2936c1cf0ced43722f527a1531ca2 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_sc000.h
6c2c8dba3fe5460a7310efae010a5b7937025aa1 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/cmsis_armcc_V6.h
e0a1f1bbe188023d261188754e1dc59c781fb565 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/cmsis_gcc.h
70a7d2f8ffcfbebc2f39f3cdb5ef701e081a6e92 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_cmInstr.h
e68945e0faf5ee8d1f027d7e8be3b4c321028e39 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_cm3.h
0186b62597ed4f4804e7b81abd3b598e6c2bd555 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/cmsis_armcc.h
bcb11dcd98c7ba42403d991919032dde3049b364 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/arm_math.h
c93167da8e8344f98d9b28f27a857a1d41a10530 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/arm_const_structs.h
3d909ef05e1c328dbc138a1b906e914b968239ed - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_cmSimd.h
c6f03caabac7d0b08fed7d09ee6db8b6f2093853 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_cm7.h
c87716fe24718015c2d01cf913480c92e3b0b4b3 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_cmFunc.h
441239dec598474dc7ab14b7283195c7f649a3c1 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_cm0.h
90061e5e149725c682eb80978b557fd388191f24 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/core_sc300.h
0a94a9650bfc5345f574fb23a10d495f06735cd9 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Include/arm_common_tables.h
bcaf73ba929b494e9c3f2993e975bb7de3fbff2e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h
5d6591e31b6229f63fd06eb0de8724554b4b44f0 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Device/ST/STM32L4xx/Include/system_stm32l4xx.h
8f94380a70fb6a2a723ab7278572292ae274e564 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l476xx.h
dc8595af01c9444a2c541182900bf2b0fb28b819 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/.mxproject
a52f7d5678ac81e61ec37b727b6292b6369b0caa - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Nucleo-L4A6RG.ioc
3985a4fde219680c1e17e341acd59488439dcfde - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/mx.scratch
ece39ffdce43f997fdf2dd55d74017f38603c617 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/.project
cda727dead5740c98700cc1fd4ad37858a6f0320 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Nucleo-L4A6RG.pdf
4afdcaa4fef2feb33d218e6d2388e3f3b3838203 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Nucleo-L4A6RG.elf.launch
3f8bc8936a633424641eab00ba651f076d380035 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/STM32L4A6RG_FLASH.ld
44ea1cb0eee4d33fe6e691653cea4a32e74e87f0 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/.cproject
20bd88d6e69c5795823fcabe4faf5f97189eab7d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/usbd_desc.c
d866ccd9ea216a89eb9d539b9a9df43b83b1c7cd - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/system_stm32l4xx.c
65f7e0f37508e288cec330f92d477098d2ff4c82 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/stm32l4xx_it.c
c28cb48bd43bb7b4c492078ab1dc6f494bfdba2a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/stm32l4xx_hal_msp.c
6d604522f0cef3bff34a64eb9e500cdce25b5d57 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/usbd_cdc_if.c
c1db06ecec983da549ee3a8ae57154b2460f8d4f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/usbd_conf.c
16d1db972ccab86a0e8c0aca69dfb400853b139d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/usb_device.c
40579596ad18cd876b59233ace09918e6c93fc64 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/main.c
f8423beb4a536d57e5aa0c948599c0c8feb00a9e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
c766b5449c964208e6c0301ca2f558902b8b9528 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
ab94a34d9ab12695aebd8fa8466ade808f27e929 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
3b25e71498a2311c71b3919166ecf09dc5141b1e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
9a2873d30abe93eeb862acfe28f3590a9a6f06b7 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c
60317c715b32cdb43f4f23b57141868055ea4589 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h
f2e11c0c40d6e621c683638444082ccb2cd1e404 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
ae9cd8bf67b36f59b68abe1006f6e621b3097871 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h
10fec4a5fea35ec45db039d5a366c3b6a4dfdc47 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
03bd0280d262095dfc54880a3beebc7e8d1cd238 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Inc/usbd_conf.h
984804b6ff3ca103ce3abb97027764ede06f0b28 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Inc/stm32l4xx_it.h
9d1ea64fa5998b911cc7f5af6cec6ddbf4fc8f9a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Inc/main.h
b90b9552c0a39dbb50871b7d2d0487c31ab43c23 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Inc/stm32l4xx_hal_conf.h
97a7710fdcc32282cbf75739e2b1afaff643e09f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Inc/usbd_cdc_if.h
c20ba1d07bb19091580f77d81b3ef95b0b843914 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Inc/usbd_desc.h
715d5dee9ff492cfad346512f7d1d53801e4f445 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Inc/usb_device.h
2393e776dd333dae85dc34f806ad87b6e55aaff1 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/.settings/com.atollic.truestudio.debug.hardware_device.prefs
988b68517c27704d1f464138322cb3e7ef94c005 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/.settings/language.settings.xml
a19a363124b0fdc91c783bf67234bfd09ec1c211 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/.settings/org.eclipse.cdt.managedbuilder.core.prefs
3ae4b06f79f30f7f8aa7cb36e8911765333cf94e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/startup/startup_stm32l4a6xx.s
7b273c6190dd31db4d1f5091bb46a780eed2f065 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc.c
6905470e6a40b7909609c5a5e902c0efcae29c17 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c
b31f07cb494c120315b086a52a662d098943fb56 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c
4dbd5f4ac87a7b6ac1d550a567e59f1238f7d026 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c
54204b942a2710a64b6ba0c30b84e1b3b52dae74 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c
622a5ea51bdb8c062e8e889f4b71bf6482fa5264 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c
12784369e6124301623660326aeffa81593b036a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_ll_usb.c
4dda1150337631a2d17123634e05b782a5668b04 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc_ex.c
25ec312cbb302ca24cf9e909df42265a12821a78 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c
2b8ea417236425866c81e285a0ab18d04783b587 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c
b167ca16a9d80ffe8bdffec69454d740bf0117bc - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c
5f07fe6dad1130b6ee4df5a184ac8b0226619cd6 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c
7e7baefb69d9a62f7684c185a9fb3ddd83500a39 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c
df06884b75649ad21d7110e12ab4de41f1e9eb4c - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c
a15fdfad695b08ee5b822074ff541cf712f2c39b - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma_ex.c
da703e39e170c4cb94dfa998f3f1ffa29d80d699 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c
36599a4da2f2d80c6e6ac0220385ee433b03e54f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rng.c
4516770dad8099473586dfb47cf5cc4cf85dbecc - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c
e926d3bdc7e3bf71bb7539ea30ea292b92d7ffe3 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pcd_ex.c
70c187cc31e577582b15c93b82183a02ae1e45c4 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c
a049a3b8f2c1bbc893531c3dec916646bc42443c - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pcd.c
b241444200a682980fe3e6bec522da4e967a170a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c
1e88ee4f8bd2b1617b9d2523943dd1e6acb23dcc - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c
296985473134d81cdcee7e324c2d47a069390872 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c
da4c5dc66fa19f1a2dea73d7aa3e81597b676dcc - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim.h
76daccf26f1c1119f653377547eebb3aead3ae9a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pcd.h
3f9db9098124b6d4bf658a9ff358a93525f658b0 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rng.h
eeefa20586b1afc75301a9c1a9fa51984bf8e5be - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_def.h
85ce004e873496c1eacf6087a2b3c82652c2f87c - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ex.h
cc2961929d2d137935b8d36ce4d073c22ecb6d0a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim_ex.h
ef09ef096f9aea54c52b3f8643d4a2de8caefd08 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_ll_usb.h
7d01a2e45f24933398c321ebf63ab167f6681b98 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_cortex.h
2905f1d5f33236d983b4c332990276c9e1bb5521 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash.h
05b58c53586df1d7b41ae67ee282455482c2467d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma.h
7a1f93772829c677cd79a5c7d91c49a0d414bfb8 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio.h
66a329dbf83da1d835ef3a2056ff37b30cc34c2a - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma_ex.h
7cae377cfa95e6bca50a18ebe16d4ecc325278df - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pcd_ex.h
cde58e7973942b2d9f6fddaa266fff01a9f39a9b - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc.h
d87d95f0dce5fc06196437a894acb9c5d4f02f95 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc_ex.h
a737f1820b6165f725d7549f95775b4d21c6767f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c_ex.h
ee193c30ba73303f2644de840804e121c4a9a4ea - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rtc.h
c98c6c63fac3bcc2cdeac550828e9bf253b0aa5d - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal.h
dffe5c55f2b819f9601130a43806007a1746359b - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio_ex.h
06a183a5b3a97fb5a3ccdfeae53c776cfb650a04 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ramfunc.h
b93c1179f456734f5977ee7fde296795f371dfaf - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr_ex.h
ced33137d14e602db17d8caf629ada93528ee8a8 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart.h
54e67e3be92290f9e6457f2f91c04bbc7099ea48 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr.h
5de56cbae29e353bad3c38d9081a059eface1630 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rtc_ex.h
d79b95f004663f145e964ff6cb145e92a36e9652 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart_ex.h
4e41e93110701a53f7bc809136a4ab0649de3413 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c.h
c23c26b4a5705dfa36703ea8b6c5f40dffd8ab7f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/STM32L4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
16b99b227562ccb1354b33482c354c1812123013 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_cm4.h
3fea94e10d135f6717a70f8d1e199b010baa7f08 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_cm0plus.h
9f5c937feac2936c1cf0ced43722f527a1531ca2 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_sc000.h
6c2c8dba3fe5460a7310efae010a5b7937025aa1 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/cmsis_armcc_V6.h
e0a1f1bbe188023d261188754e1dc59c781fb565 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/cmsis_gcc.h
70a7d2f8ffcfbebc2f39f3cdb5ef701e081a6e92 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_cmInstr.h
e68945e0faf5ee8d1f027d7e8be3b4c321028e39 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_cm3.h
0186b62597ed4f4804e7b81abd3b598e6c2bd555 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/cmsis_armcc.h
bcb11dcd98c7ba42403d991919032dde3049b364 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/arm_math.h
c93167da8e8344f98d9b28f27a857a1d41a10530 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/arm_const_structs.h
3d909ef05e1c328dbc138a1b906e914b968239ed - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_cmSimd.h
c6f03caabac7d0b08fed7d09ee6db8b6f2093853 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_cm7.h
c87716fe24718015c2d01cf913480c92e3b0b4b3 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_cmFunc.h
441239dec598474dc7ab14b7283195c7f649a3c1 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_cm0.h
90061e5e149725c682eb80978b557fd388191f24 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/core_sc300.h
0a94a9650bfc5345f574fb23a10d495f06735cd9 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Include/arm_common_tables.h
bcaf73ba929b494e9c3f2993e975bb7de3fbff2e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h
0f852853d184800034247a5d0050de2038777c65 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4a6xx.h
5d6591e31b6229f63fd06eb0de8724554b4b44f0 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Drivers/CMSIS/Device/ST/STM32L4xx/Include/system_stm32l4xx.h
85e7e51a25b2016e19b43a83b81346b96db2098c - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/syscalls.c
9d4edc03b07fb9a306f35477b2a45b832a0b66ba - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/include/PlatformData.h
fe5b2785e65fcf188d1d792ffd7c6fc9c70e9e7f - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/include/prototypes/Platform_fp.h
af14794f057b0fe6e08f9ff6dff3f0984e2cc237 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/PlatformData.c
2ed430e9572654a9f6a7d1c1de12420cc48fcbe4 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/Unique.c
7f88737cf8bf4c13e5bf0e728c99ecd1ec2eac82 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/NVMem.c
c1fce976f4e44378a135909f67cc1ef149b461c1 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/Cancel.c
6cc02291ef841cd08ee3118ea5c136fb69c5ee46 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/PowerPlat.c
b9b1622090e7b69eda0c3f496ef773e397a0e0f5 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/PPPlat.c
a1acb654a01f63360985c13e32deb69a3606c39e - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/Entropy.c
c063491490aa3f9157ea6d4880a3bb5648095413 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/Clock.c
3d94e64861a183a21778f017d310208436cb95a2 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/RunCommand.c
7dabb6c802903adc4edfa6e0ba4b894cf0ffd4de - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/Platform/src/LocalityPlat.c
bb9a6b6f33159fa31c2e47ad133c70f5e77d3d39 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/TPMDevice/include/TpmDevice.h
a2564dc3ec0abc5d2445670de944311b40bfb514 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/TPMDevice/include/StmUtil.h
d7040d40a32ff98b1198bae412d846d457bd6a4b - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/TPMDevice/include/user_settings.h
bce98e24be98537929f371316db2f2801c152ed8 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/TPMDevice/src/StmUtil.c
ddf299e517d5b6ad1395c4106f50d0261d7a26c5 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/Shared/TPMDevice/src/TpmDevice.c
1afb5b61a4b2c034a07aad4f5e11c78d9b1f0412 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/VCOM/VCOM-TPM.sln
507bf667be23c5916dad43a004b8cc0f97f4ed50 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/VCOM/VCOM-TPM/VCOM-TPM.cpp
6b81e4587698e6857f4814dce4b4d0391a2e8766 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/VCOM/VCOM-TPM/VCOM-TPM.vcxproj
57c8c0f47d2168b6955706ef677c467b7368a98b - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/VCOM/VCOM-TPM/targetver.h
6a0dc513f9c01293d6cdbe167f765c5b5f4d5e83 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/VCOM/VCOM-TPM/VCOM-TPM.vcxproj.filters
74f86a73a25ac67fc34a014747a6efeb3d44e1fa - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/VCOM/VCOM-TPM/stdafx.h
5310225c6b795c683cf6f10a15abceae11332937 - optee/samples/ms-tpm-20-ref/Samples/Nucleo-TPM/VCOM/VCOM-TPM/stdafx.cpp
f9b4aae1684da7aaee3611a970f76f38a46d52a2 - optee/samples/ms-tpm-20-ref/TPMCmd/flags.m4
0204b212240ca16f5e60f43b0a30b2697f77d183 - optee/samples/ms-tpm-20-ref/TPMCmd/simulator.sln
1cd01c0cf4c4a66ec725a1f0fccca2350024844d - optee/samples/ms-tpm-20-ref/TPMCmd/Makefile.am
194cc98738c13d785c82704c6fc8e0ed0bcc99e2 - optee/samples/ms-tpm-20-ref/TPMCmd/bootstrap
90c98d16825e38e3e8c730857334eb3678940874 - optee/samples/ms-tpm-20-ref/TPMCmd/configure.ac
dabc6f784df969fbda726a380436cc15b3ae3a54 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/Tpm.vcxproj.filters
1767e2e5744eb1166945e42a8b4c345bf876c401 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/Tpm.vcxproj
6134fd9595a0db3004b3200ab2754e6060a9e613 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/X509.h
731ef0324c0883b40649fa1ce81f85f6c6f64e7b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/swap.h
d80e69a62cc5bc30321acc8ba40916ae6c11bac9 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/KdfTestData.h
09c046895d104e84270b38f51a580a571d067e37 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TableMarshalTypes.h
f03b22a486395fb8481df3912c4beb5814cbd117 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Tpm.h
cfb478e72c88b38989a79c857ca529c96cb05a26 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CommandAttributeData.h
0bee8bdd2a0e7cec942ab1ffe4f5a5a0819f3204 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Commands.h
58e518b99239ed12b3b9d18225645004fc7416d0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/HandleProcess.h
0b3bdd77473b5c674385a4de1fb1ba806385ffa2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/ACT.h
3cdb1b7e18bf92a0a11db7ba7bd87f76f7c62157 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CryptHash.h
5ee1c6c70f36b1a98a1c09e82db86bdfb94d6bd6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/SelfTest.h
5c7992298c480a370df9665518ec6dbae0de0602 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CryptSym.h
6690e48f59d84a65cb431aedc4ff04060ce0390d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/NV.h
48323efd0b877a90ca646e264addeeed14adc169 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TpmProfile.h
04a11a40106e32d1a2c327ed2ee76d52f1fac338 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TpmAlgorithmDefines.h
040719da4c629d01698b06072537878d1ea7d2b9 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Marshal.h
6a410f835b221a8130b8be5650395d9faba6072a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CommandAttributes.h
7cbe82bc9668a6dba6a469b42f3d0b942f0520f4 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TableMarshal.h
a11f6a872439861a933474fe412a0427c0730fe1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TpmBuildSwitches.h
5d1d9bf90c4bd7e98673e597da72ba2f3b9bca93 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/BnValues.h
ed8716500b6fa3680567484cef4705f9a874e365 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TpmASN1.h
94aa65d7ce788d652472e56c424a45e7769dbcc2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/GpMacros.h
c5f4ed58f4082b8a06c2dea39618e8fb10454877 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/PRNG_TestVectors.h
bdb13a835cd51676ea457d951ca7433dbc57eab5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CompilerDependencies.h
58c4efd7565cb517e7ab2c25a966cab710d92663 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/VendorString.h
144f3bb0c333db82f37ff9d5fccf48dc4fab0f41 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/SupportLibraryFunctionPrototypes_fp.h
bafcf4a000318fac0009b809ac2bf9a70cf9c791 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/LibSupport.h
f69660e465a1480bd79a1f8cf16f80352a60a7ef - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Global.h
d2108a7734eec6c0e66394d3c12a50150c04ac3d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Capabilities.h
f249cb73e1800699c831824f77261a2ec96eae6e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/EccTestData.h
09d85312988cbf36c3dd26e95988b816d1873095 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TableMarshalDefines.h
b38f19b0bed0f5f71f2da37145d05356d0dc94d6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CryptRand.h
5adbbfd2ff8e8dee66469ce1ce6f2d285589c6d0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CryptRsa.h
efc8b2228515d82aea4ea093d4cab20a7d249f7f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TpmError.h
18af239d7a28f416247aa8dd6e9ecf28141a0c89 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/SymmetricTestData.h
6d0f1fb0d0f3b2a8d19f1ce046869d30150fce09 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CommandDispatchData.h
c3b8d078373237d8e7f138c67b4f382b40517192 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TpmTypes.h
7e6987419dcd3d08639dfd3e91a8c57fd9872b5a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/BaseTypes.h
cc0a6421806e68997e500be631aa81828521ec2d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CommandDispatcher.h
70fda7df3afa9fd65627182e71265908467556af - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CryptTest.h
29a46309c3fb01be084d8e8951eb7901dde603a0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/SymmetricTest.h
23b7e6271c380c8e85532c40b58f8224ffbb6d82 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/MinMax.h
3b05494bbc0dc8e939e8026e84571fff9e472617 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/TPMB.h
bae04f0ac0d19fc1461941fea785027bcb9dad6e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/OIDs.h
b18d3976f439634cb05a45561819d0b9b4d73098 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/CryptEcc.h
11b48254afade03ed20f8c729f3892f435436345 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/InternalRoutines.h
fd18d2b01b63b618061ff8f370e2033b8c4dea10 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/HashTestData.h
ca5a553f1de3616fbf5052b6c38342e00959ff12 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/RsaTestData.h
dc6d2d41f9734e7709dfc69708fc6287a3622925 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Ossl/TpmToOsslHash.h
6e52cb65b5558ad2766ed1b90d74c6c67b8e1e73 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Ossl/TpmToOsslSym.h
8f4370cfcc34bb136a67d12a14149d9cf9f60d13 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Ossl/TpmToOsslMath.h
4f5f2c13cc24a386e4bbd872b04e28b04c23750f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/StartAuthSession_fp.h
0c232e0f1f0a3ffbb6252b7dcc284e0eb5816e65 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/HierarchyChangeAuth_fp.h
a3c777b5e458806ba068d57d179e56d85752ecb0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyCounterTimer_fp.h
f8c1f6beaff3089603dbb43f6bfbe4bced35471b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/MAC_fp.h
426dee6a25a2583b6247df858ff7964ef871b9a9 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/FirmwareRead_fp.h
0a390598326789930752b0a4eb4eeca9534919ac - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToOsslSupport_fp.h
87c144583176739ed4827270dbc6b9d3abd5e813 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PCR_Event_fp.h
c0addab72ad3020cfff53f078df316c064e7cc1d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/X509_RSA_fp.h
68e113f085c014c63f20b6a810267fb29992b4dd - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/EventSequenceComplete_fp.h
d4738948505e602dfd25c30c2d2127f169469349 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToOsslMath_fp.h
1e20b1d0983d33cd549b8720837621ef325c250b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ECDH_KeyGen_fp.h
4ba84b2df817a6524144f53ad70869d329891eed - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Commit_fp.h
d81b55f0818fc590e22d0091bb1d5e39562ee877 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/_TPM_Init_fp.h
033c9057731df5494aa445d61a4886cccfd01e58 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PropertyCap_fp.h
a4fbdeaa426df1653196174226b6b48afe347c43 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PCR_Read_fp.h
d0e86324b120265b5227e7cf729d89e4c2768bf5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ECC_Decrypt_fp.h
872ea306826581c94a3901d981a4e343c3c357f8 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyAuthorize_fp.h
00fc2ade3a5dc5ddd4221acf56cf8d9972c88224 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ECC_Parameters_fp.h
39d4dcf44ec35f860980866e35e51cfa327029c5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Sign_fp.h
e3e0bfa681c313b42f930b39cb3706c12188f7fb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/IoBuffers_fp.h
9becf531f45281cd080d8ad3140178b7011db42c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/_TPM_Hash_End_fp.h
fe5b4ced7121524a956e7e2a8779f95b254062c5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/EncryptDecrypt_fp.h
8ef2616ae42cfc6341c39bfc7d5c9e251fa4123e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/VerifySignature_fp.h
f81667c844095ebcbde3be4b80103fb2411ccf0e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToWolfSupport_fp.h
263799522ef3ff9d6677847e2d97fdb59aa3744c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/HashSequenceStart_fp.h
10cd33e9e84c65659b05a614fe22885bbb0b5576 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmASN1_fp.h
c079447cd9518a4638372c0f5063406242518cbb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyAuthorizeNV_fp.h
f60fac38469c28712e358afb8d737112e7c8462e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Shutdown_fp.h
ce280d1906b146f860d0548256feb7020cd26383 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PCR_Allocate_fp.h
300bf426a8fb3f09d3f7536ed32dacb0bd9c4628 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ObjectChangeAuth_fp.h
cd7e7991d07683dfac8d62da427618dd0b1bc1e1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_SetBits_fp.h
21253e9f491e5c3aa9285fc9b5ead280258b2349 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptEccKeyExchange_fp.h
4568199cccb437653f262a20a4ea2790cc2ece54 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptPrime_fp.h
f27e1a7967e61ef8bf65bd75de47cc20c76e6109 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/X509_spt_fp.h
8fb75dbf117c7fb587355b323ad006c34e9bdf1d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CreateLoaded_fp.h
d7c909486a97798ffe4f88811bdde662f1efbb2c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyPassword_fp.h
06772c3dacd56547129c09c8f9f6df1379a19fdb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Clear_fp.h
ab94632d4ded278cb4f2ea153cc8f08f9422224f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptHash_fp.h
f97a3facaa3598f5623f6b88e79c27b8d291adbe - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/RsaKeyCache_fp.h
b5051ade5493dc76c56085d8dedd7ba18165b13d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PCR_Extend_fp.h
efa6e3cd6c13f77fcdd2f0324b56f4bef02a7aff - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyTemplate_fp.h
0cc1fd2ec5abeb0f1e845c49aaa160d4e68a85a1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/EC_Ephemeral_fp.h
7761e46cea834947efcaf77d4bd95b35090d4f8a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ContextSave_fp.h
8e49bb3ca7117e6e780bab45db67db0ead9c5ca2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TestParms_fp.h
300b61a4e1ef2d90038d34101216bb4f4f438d57 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyPhysicalPresence_fp.h
356266471ea0cd56744fa25a7f491dd297962e09 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/IncrementalSelfTest_fp.h
4d86f90ac8d6bbf2bce7ad8624c1dc2b3bf5dcdc - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmSizeChecks_fp.h
7b4a1bba6d26a63e4053870aefe57a5a989c9ade - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/_TPM_Hash_Data_fp.h
d04a57074c5a6696f79ce639e9c000f5afdda980 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/RSA_Encrypt_fp.h
60a578ecc4a1311da2cb2d314599e50eda98ce20 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ClockSet_fp.h
0e48f14c10cf6cce68174a223525dc0d4881c586 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyGetDigest_fp.h
079dd0f1840e22baed846c9e02ebe113c11b5cc0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ChangePPS_fp.h
4496b790b236610306f95697b6d469d62f55c0de - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CertifyX509_fp.h
7c4c000d51e015f75eed6d80280e1775c39f389d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NvReserved_fp.h
46313fe32eab76dd78587ec08d8197ceecd05aeb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptSelfTest_fp.h
6a189ce8aa6a78a130802b206df376563a9bef79 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/SequenceComplete_fp.h
f451b90022116d27da1d8daa055a756cfd2c7433 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ECC_Encrypt_fp.h
8137948f4115d2d4d54323a472d93d4ec6fa4d50 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/GetCapability_fp.h
f36fa0be0029ba31ccb3df0c3708912eda650857 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Import_fp.h
d31443ea45f0f2036bb833bb61864921aba958e8 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Create_fp.h
c459ecbfa01a1793393632af787ef0449d5c3409 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptDes_fp.h
e062efc91d99f491e381087a02b61db9dc73fdf2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToWolfDesSupport_fp.h
74c9451a504f6cf1c95ca2d65b544d5c2fd05271 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyNameHash_fp.h
f2718ee13d5cf19fc376ce3c4832f2b01aa99516 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/DA_fp.h
fe973ac240eb632c90e84f8da86116fbbd38d2c6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/SelfTest_fp.h
9a38584e2a30c9b5500393ce93e9818dda8f5d72 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyLocality_fp.h
e6492c7ec627a702d359ea6ae8794969f786c692 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_spt_fp.h
070f1d957fa166d1382a794efa2a8c20d939d5f7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyCpHash_fp.h
fdaf877c881d86c0f02329d28429fad0f8307ff7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/RSA_Decrypt_fp.h
44ddd229666c154957ee9376cf1e97248f1e34b8 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Manufacture_fp.h
0fdbef88eafe31c268daa16552451e6bf681fdef - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ACT_SetTimeout_fp.h
c82c8ae619c5d23244bef504b7fea485ccb9a91d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/GetTime_fp.h
9a33da54fde72510b33d0294d27b8cad4580dc27 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Session_fp.h
991c478c0252e36dd9106ee335303bc77a90966d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/SequenceUpdate_fp.h
914d7b438c78e8a7242539c0cbfe573751cd7c47 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToLtcMath_fp.h
3e5aed256a4e7a1fda0a90fcfe86ec3531bbcb43 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Quote_fp.h
a3f4d21d0c5c06d44cab05bec5bf92983bafc3fd - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CreatePrimary_fp.h
3c2afbef3c046c3160a4ea2edd1140f5d954b71f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Hash_fp.h
f74b75d1e6ff70241553a77c88f91d61c4a26ec2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ChangeEPS_fp.h
cb1eec55cf276e26c8975988e7a423c33ac5f10f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Duplicate_fp.h
1fe54f80c4cb8cce2fe745633c3010c7bd74dfe7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptEccMain_fp.h
245146b2f725f65a40c489a792047786a96128b3 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Policy_spt_fp.h
7bc81e20a06653013e4acbf2174985473486bac9 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Hierarchy_fp.h
06d4cfb6780878c42481e4a77c5308cfafca5837 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Load_fp.h
f74d147bc6c976470de0070c75351df3aa04b120 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/SetCommandCodeAuditStatus_fp.h
5304584889d4d650f0af1712e0a977aa2ea0f5be - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/EncryptDecrypt2_fp.h
5a4039d7f94ae60ce02866c46425571dfb8006e2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/AC_spt_fp.h
e9a553efde26f94f58686193a7e6008b733519da - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptCmac_fp.h
f1ba19c3c43065642a6af8fa5895220506394517 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToLtcDesSupport_fp.h
af0ede8240131c95b2285547640960087becef7b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Ticket_fp.h
f5b68b2634bec606fd5bd4eec855bc0ab5bd210d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Entity_fp.h
f4427b665d78cdc3834335573899fbb6350ccfd1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/LoadExternal_fp.h
fdc545be48642a8de20e4fd3b7d30084222ea399 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_Read_fp.h
225763ffa0645413e5a490914ecd7a9de8f99a50 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/GetTestResult_fp.h
3c59906bb8361d9498ea673335e88b92361d6f18 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/AC_GetCapability_fp.h
bbd8c64c38105cbd75fce5e356241e0d42b3dbc6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PCR_SetAuthPolicy_fp.h
932e66bb1587712ac42bed734b088921f4f6f911 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyPCR_fp.h
1a5420f04ea7e3e726390dd2ff1bff61fd988102 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyNV_fp.h
87d27972c3bc15584593dd37d0ef50f0c73cfcfb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ResponseCodeProcessing_fp.h
9667984e3855fc027a45cfb981949f64b2a980a2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PCR_SetAuthValue_fp.h
765379d25d1438de22351a96a9820bf9f67c6369 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_Increment_fp.h
6c1fb57a8caea7622cc7cda8dbd7418164257de4 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicySigned_fp.h
54c2a1e796afe1f9a817b5e36aee8e51edb67faa - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Policy_AC_SendSelect_fp.h
185e4f5e8e6ec8bc7c973a7e77db33409494980f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/DictionaryAttackParameters_fp.h
f6d26035cccaae7afe8b836b2985803184981afc - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToLtcSupport_fp.h
9e0e5f492375fcc68e65dad4a397b231a504cb60 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Object_spt_fp.h
fea4b12eaff5c6e50481a9887b53037725a2b164 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/SetAlgorithmSet_fp.h
906c4e6e7787dcc7647de13894175b9b8c78c94a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Handle_fp.h
7f1299d217585c2efab081499e77f630a0080127 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NvDynamic_fp.h
71ed6694c0ef2f14696a671067200c134221da42 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Marshal_fp.h
be6e44fe64124ec47e14bf135c7237b8480639c4 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/BnMemory_fp.h
062e68dbb60c05523086cfe239dbfeeb8fb00b47 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TableDrivenMarshal_fp.h
ffe4657deebfe157a4a2ee653cedf9bcb8fa2aa2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/MAC_Start_fp.h
615b75cd87214bebe2493a06d39fc014fd87a003 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyCommandCode_fp.h
7a31af2eae74a929f10edfcc4c24a5da80259da6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToOsslDesSupport_fp.h
ff21254543ae6a56beeb71d3af23f8ca5af1c641 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Context_spt_fp.h
1f07c1a9db3fbb122f8ea251ebdd8594b931316d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptEccCrypt_fp.h
4f57f936b4064fc13f7b608cb7931359c8248413 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Certify_fp.h
2530b56f366d5693bd4b9788364595dd64ef8bb1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/StirRandom_fp.h
bd088f3ed8a49ffeb79779805d7fe8f5fe429e6d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptPrimeSieve_fp.h
809a441e0cd662f3edc35bb48c71b70fa4de923a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/FieldUpgradeStart_fp.h
fc5fd2f87d6c7a171ac18ad6e702315be926ff5f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Attest_spt_fp.h
8e12dde0d8b6a4a6df5111e1cb35070963a9c1ab - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/FlushContext_fp.h
8b01720df595ad116744109fe662ac1041ef2d17 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyAuthValue_fp.h
26d0cc4fbdb4c876f246cd35c500de0df11d004a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyDuplicationSelect_fp.h
3b1f567f4eec7189eeb071adccba7008432b2f1d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/AlgorithmCap_fp.h
194c22bd1d2268c21271034395c6e5c7f3456317 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/HMAC_fp.h
4eb345137b18f67c6d6a92362de243a4470b189f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyNvWritten_fp.h
3c4776d65fe50a6b4f993be0274bfc9af6a3788f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ClockRateAdjust_fp.h
b6d95fc4fb41098675bf252b54fd9f70e151396a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PCR_fp.h
398b220fbfcc188a24581dbdc0233f38cf46da65 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ReadPublic_fp.h
5f3c95f7f2d37e876472a869c5744b9f2836586b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_UndefineSpaceSpecial_fp.h
cd64ef63467eebced0395ccae4075ca03b9b477a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_Certify_fp.h
1cb2a688416c6bbadc8f136f5cd7ba4f41e6a908 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CertifyCreation_fp.h
189603b73c164917c3ad6da3e57d43795df47e49 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmFail_fp.h
181d669752be56b7d098c0e2b997e83bbf4e3463 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToMbedtlsSupport_fp.h
50d60105aeb491c363fb7fc71af8f6d184a8ddb0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/SessionProcess_fp.h
342bfded66f61b70aeb3d6535cb587da5c084190 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Startup_fp.h
657d7a2f6be74009fd6ba71259a0ba9db9a5f9b4 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptRsa_fp.h
30e2baf658cea26efa3f65366091f18add1dd3e2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_ChangeAuth_fp.h
70caac4f95082012db4c203616bedd8902a33e1b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PP_Commands_fp.h
705c42624a99f8a50f98e73d8e689dfb980e2353 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_Extend_fp.h
62167537419cf517ebecbeef3a3f5a0c1022339e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ZGen_2Phase_fp.h
423a70459c7a42197b1022dc4985f46533df4f9c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PP_fp.h
0db82ff3316ed8f8a4f35ac28136f4534cdf8ada - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PCR_Reset_fp.h
4b3379ea7110dd195658a8bea5a69f015634fa2a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToMbedtlsMath_fp.h
4014e8a2dee7e34d380f54a9f63e57eb084c7e38 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyTicket_fp.h
33f109b5abdbba662dcfd9adba3ee83d6f5761c7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/TpmToWolfMath_fp.h
3eaadf88924cb87a0f87197e56d730d10aa4bcea - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/AC_Send_fp.h
e2bab6b783da540ebed7c7744c2ab12f96de3a6c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/X509_ECC_fp.h
9208541836c9bd37a1ecf8b8da894d2d06caa429 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ContextLoad_fp.h
3a2df2a3ba359f45c72afc5477feaeb04c040911 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptSym_fp.h
e1a70369cd10c91bfa80cabac0164abae4071c00 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptUtil_fp.h
bcca270ebd95b6c36bb026701c1fc6e10554269c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/AlgorithmTests_fp.h
64aa9231cb6f99292517ddf87646f4ec58112fae - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/BnMath_fp.h
1dc8a1b1ee77cdaad11ae24d7c9e233a1aa179ad - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/GetRandom_fp.h
d91913b01b764e0449460491497eebbf88f9f916 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/SetPrimaryPolicy_fp.h
3fa7b7eff4068d80739c460f99deaaeb38dcbfbd - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_Write_fp.h
1f5d61b4bc666bc9e2c7a2b2340981780b1d5621 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/GetSessionAuditDigest_fp.h
da0cc9b12038fa5755653d91b6af905656867d8c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ACT_spt_fp.h
cb593754e54997bfec26b244337da487832a169d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Bits_fp.h
966a94c84420a6e831b2345e42c2a1b5208935ca - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicySecret_fp.h
daf655f7f9d8e642540ae12f919a65c9e3272999 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Time_fp.h
8c79c59ab5b57268d7b68edae092db9e1da1b272 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Object_fp.h
fc302c9e27b645c41806d3e0314fa5af086ba321 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CommandAudit_fp.h
d7ac37a61726d7e3b2733f8b704489a828207d79 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/EncryptDecrypt_spt_fp.h
5c6bef2af8c42ced4e3549272d93b6d9a7abbb4e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Locality_fp.h
94e53599dcb7a66ec20387e0622c76308ffa7518 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CommandCodeAttributes_fp.h
e78e7c727698052ba6fd837e2274a99ea439623f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/HMAC_Start_fp.h
d688bd13f2834c070a6436dc0eb7a8ef69968ef1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/DictionaryAttackLockReset_fp.h
eeda26581cdae3c60f7b85d412d6e722fa1cca1d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptEccSignature_fp.h
18ec7d3e9e1a2b6819d68862aa501f87cf313e57 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_ReadLock_fp.h
1fee483125e847c0c6a692a5d8bcced1cfd2f968 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/GetCommandAuditDigest_fp.h
65f6077d8ce98912da5a797f9cb1a618663f987e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyRestart_fp.h
ff4177b6562723e9391aa6c1cee96acdbd5f54e5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ActivateCredential_fp.h
6a98f30011aab15ae4a3e2f4a5f18a678003d64f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ReadClock_fp.h
dff750cbe8395a88e93634e511dc2c2ff71d28ae - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/MathOnByteBuffers_fp.h
b9702a44eb11019d3a4ec6675ce4e38e67221d9a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ExecCommand_fp.h
06199d37140facc7d34c4897130d896fa683bf3a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/FieldUpgradeData_fp.h
46dae84767e488ee05b03d268bf0077488f135fb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Vendor_TCG_Test_fp.h
966015a1f338b6ce76df6dd119a899c8dd5193a0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Unseal_fp.h
0a1f40864a1114ba7310efa53eec36ff9ff0d0c3 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/EvictControl_fp.h
6c15358e6e765bb1709933086621bc6de87c8324 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Power_fp.h
e4c92fb55cb82f8c0c8bee37aa8e6bfc27414535 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ClearControl_fp.h
a3044ccd6ff15c5f98f7e3e928bd21ece990f192 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_ReadPublic_fp.h
385303ab908baf98f40aaa1773f283a2eaf47fdf - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/PolicyOR_fp.h
81fa16e20941dcace05e6e8cd07213fc49a61045 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Response_fp.h
1e6063cb8570108a24316b1d0b0a19f8d3fbfe8e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/ECDH_ZGen_fp.h
294a8c44266ef8fe51719e7f4aa2431c106efa4c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_UndefineSpace_fp.h
bda7a075bd3ac2b5484c7ab74c9a1149331b1606 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/BnConvert_fp.h
cd0104a0d1225c54870a961051303400679e6f18 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/_TPM_Hash_Start_fp.h
5bbc5c70ebc57d409d90c3429cd56b9b5ba41bc7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Rewrap_fp.h
4614c9b4ac558792b4bca4a00db55929090dcb8a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/HierarchyControl_fp.h
c334eea2de454d94ebf0fcb31d0a0abd4478e222 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/Memory_fp.h
9df5275bee6405837a4e152739b4caab9caf9708 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_GlobalWriteLock_fp.h
4cee80ce92fd1c8adb25144bd0e41b0e9cdbbec1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_WriteLock_fp.h
b432f0167cfc07f57f8eefe34ae9d371f0e65f1c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/MakeCredential_fp.h
9e65c289c6e006611fd88114375bf5d690b38d37 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/NV_DefineSpace_fp.h
0295a03af3062947bf7f4b6b8630449aa099ab2c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CommandDispatcher_fp.h
a306f5aa9c06af0466100491598149650dfdaaa7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptRand_fp.h
ba809abff8c2bbeab31d3bf32837b04784fa1b5a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/prototypes/CryptSmac_fp.h
83f5aa1e09b5cf7f7e9c963a04924be2d387ea46 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Ltc/TpmToLtcHash.h
9ac20ce300cd3be129fa297a4a163f3fa3f1eba0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Ltc/TpmToLtcMath.h
7c782bef7fc2962fd03c896be5358aac325fa276 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Ltc/TpmToLtcSym.h
48edc2e51ce501d43db4723d8322b229fc0eda1f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Ltc/LtcSettings.h
18938ceb070982017d5632c8111ccec6d8717bbd - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Mbedtls/TpmToMbedtlsSym.h
392bc93b6983659b99c8b56b15805a38ac333db2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Mbedtls/TpmToMbedtlsMath.h
ff17ddc4c85292ce6f01b76548e25b0a98419666 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Mbedtls/TpmToMbedtlsHash.h
64aad5263d919aa145dffc96a4941c942d70691b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Wolf/TpmToWolfMath.h
21b31bbdb64ac04aa1f112c364cb48c84dec6d73 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Wolf/user_settings.h
618c984b216712a3ed059461036bb34c4833c38e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Wolf/TpmToWolfSym.h
11cc83c54cb1323456bd8f3b0cb56de7a5ea6952 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/include/Wolf/TpmToWolfHash.h
ce4065d5dbc369ef2260cfa2e091a9cdbad8ffc6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptDes.c
8b5eeb7ff5530df4bddc9efe348fd45d8609c6bb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/BnMath.c
87697819416bc9f6b5f4eb7971686f0d03d6cb80 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/AlgorithmTests.c
3fdc1e98645d29e1259c89193310a10565e0c381 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/RsaKeyCache.c
4958b5f51bffdefa5547f7e727a876d9490fe9be - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/Ticket.c
3a3ddfe5fe7f68485fa4470ee618469d5d1fb33e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptEccKeyExchange.c
6ed45ed0c56d83ef758a7f2c862927bdf71b156a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptPrimeSieve.c
b5d37ef8c950f8a169f5a9ef1e7b4328d2899401 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptSmac.c
9d5ee1ec8336ff2b940ec56b380b95b98f41a104 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptRand.c
d34cd17447bc01028977a012463d65f135f96fcd - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptUtil.c
b1a8ebaef50f97ee33ecae24d5edc0aa580c8ed7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptSym.c
447f5d6341ed6ada7a8f30e830eb7464046b8e5c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/PrimeData.c
368e618850636f255e9e57c0b139dcddf82af1e3 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptSelfTest.c
3a9e9a081c926caf63db37bffb80cda40c21ec2a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptEccCrypt.c
1401ef177f3e3bd7de55d6e5f0f8cf2e3ee71cf0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/BnConvert.c
e81147da24030ba21f12edaf9d1917661c163be5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/BnMemory.c
8cc48da41f271b6527a5855300cccd7c4094b96e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptEccData.c
9b79ff2b06c224c971f1e1e048045cf767db0830 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptCmac.c
4b29d8a36dc33ffc4d29ebc5fa799d6d99007ba4 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptHash.c
22eb0ea9add313f80a3ec949c2178c80c14bea52 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptPrime.c
c68e7e9e168486bd7ee10b85712f8cbd28c8c2c9 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptRsa.c
0ffb452a1717483aabfe47a9eeb7b99ac06ded4e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptEccSignature.c
61b0cd7757e3673f4054a6b67be5df89fa6c78e8 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/CryptEccMain.c
54022276bfb56c330602829897c3fd1950feb456 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/ossl/TpmToOsslSupport.c
08b72177479e566714d6fef52816fe3b32322152 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/ossl/TpmToOsslMath.c
480e6f783ba16658f88981764ffe2f9218ba8f83 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/ossl/TpmToOsslDesSupport.c
aa003ed14dfbd14f15c33f8c85d2f780947c7624 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/ltc/TpmToLtcDesSupport.c
efd79a528de091dba68dffefc751a0a688423b93 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/ltc/TpmToLtcMath.c
9c1b3604bbf2860b0d80a657410e2a029adba6a1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/ltc/TpmToLtcSupport.c
57d49fcf7d7e75f0f36db31891f577fe559dfd9a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/Mbedtls/TpmToMbedtlsMath.c
4368ae6f39b8b331277add014bbff034b940d525 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/Mbedtls/Mbedtls_mpi_Ltc_desc.c
4613687d53030af00a6b329a71087cd94acb5f11 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/Mbedtls/TpmToMbedtlsSupport.c
b0a0e725f466c5f614f8bda31e08f9a919f12fb1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/wolf/TpmToWolfMath.c
3af0edffcca6f089325ee30b97c2fb94e3b291bb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/wolf/TpmToWolfDesSupport.c
8eb628b011385e5d70d3cfde68069f665ad56e51 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/wolf/TpmToWolfSupport.c
f030593dac7c1db3e6e839d0e1d7d0ac8945970c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/crypt/wolf/wolfssl.vcxproj
466691e67c12dd9a679781b63234956dcaceba1d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/X509/TpmASN1.c
04b37d6adbf120e357ccb4678e380a1802931de0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/X509/X509_spt.c
5c354c7223a81d7915882b573c56d94861eb2696 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/X509/X509_ECC.c
77b2c67dc99cf0e49e4cbabc22dc9acadf309708 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/X509/X509_RSA.c
46bab656e2cbbcf766c84d400690e11877f8a515 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/main/ExecCommand.c
0334c584b4a788c6fa56ca81ee53716501df41b1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/main/CommandDispatcher.c
eafaa29ba3e6f0cec01550636783df940a842bab - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/main/SessionProcess.c
82f676616d720a25d5644ecc7960b7eeff0389d5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/TpmFail.c
ef0426dabd8f706a78db06b58f8068b38ea9168a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/MathOnByteBuffers.c
0b4b574b83e692740b0c4e5d62635fa967d01e85 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Marshal.c
2c65acd9bd5f6337e5abd55c998395192cea06e2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/ResponseCodeProcessing.c
38de6a36d2444e1ed0f3bee1d4fa5751c01943fc - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/TpmSizeChecks.c
58ee288becbef146b8dd5c5429f456388af332ef - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/PropertyCap.c
efb8e8833bd517b3b9385257aed75aeb07b5c4ae - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Entity.c
20cbfa127bd4687094564ecd2ba0d71c11785b92 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/CommandCodeAttributes.c
42ba5fa4090f7900b93f25610272c5d2744f92fc - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Bits.c
d1f11e405396fc8a356db922fe2cb0c8f654fafa - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/TableMarshalData.c
1ba30fb3845df79d51ee779b4eed9d9b7d1a3746 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Memory.c
94ba9200336a7684a6fa85ec99615753998935fb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Global.c
9fce7edfb51de4c44936f9d5f46af956fd8e86ce - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Manufacture.c
40037ba43bb2780caab6c9320b9428a9e50c179e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/AlgorithmCap.c
6e7dea780558ebfdd0b1668661ac43fd7e876dc6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Handle.c
b80579004bf66d76c34c31b4fe0ba65e1a34eb8a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/IoBuffers.c
36be33ce745c22699c4e2c5fe1eb19df4deac267 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Locality.c
5d749f54ac223562addbb57a4b3ece73eb25b9c4 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Power.c
f8b98f1215fd1f432f6e12fc63cc39e8bdd8be20 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/Response.c
f117763dee48fbe30eec672134d8f4c747362762 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/support/TableDrivenMarshal.c
ebbf99f5b71a40e2dcb3b0718428993ceb092ea7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/PCR.c
ec1d7790053a5109933da61c97434e47e326bd4f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/Object.c
74b6eb8868ae67779b9cd920d12e7566d91ee613 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/PP.c
6f80821c4cecac735c594a05787bbed9e95b3079 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/NvReserved.c
391883c2c03bebc1ae73eaf4532d5329e15efbeb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/NvDynamic.c
8f0cc6cde494e0e8e21ea01a914f39d3f98bf4ff - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/Time.c
c8236f84f180f2a66e475945307c6aab4e482bcd - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/CommandAudit.c
8d9c13452adc813895f72f470b65117e0e51db1d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/Hierarchy.c
26ddeedbe4bc042989c17d41b3103a7de8ac1aa6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/Session.c
e04ffaaa0b2a9a182d315f2296f0f850fb06f440 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/subsystem/DA.c
956f4eb8bf2f4bf527b634e5a10d21044d4a92e7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/DA/DictionaryAttackLockReset.c
5b5d449bdc2e71ff8057f449d9e5d1ec8e1da5c3 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/DA/DictionaryAttackParameters.c
e877361fbd9ab03f37548f2b969f26c1e5d1a986 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/CommandAudit/SetCommandCodeAuditStatus.c
49d503f437be88abb3f8fe4e3843e150d3cbae80 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/ECDH_ZGen.c
4c9c1d8f06b9befc1dd89a87aa787db5a447a776 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/ECDH_KeyGen.c
36c60811874f45b8d6a79f79937c751c30988a07 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/ECC_Parameters.c
0b8899ea87e95427aceea6603379cd4e0ae8dd48 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/EC_Ephemeral.c
49f8fe178b8e7a87b01c6859413053a68c12cda7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/ECC_Decrypt.c
9711def3ae76eb059ae7e10b3cbc85227c5d666a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/ECC_Encrypt.c
748f01adc89b2fe04ba4a8ac53d4bf345cc57c50 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/RSA_Decrypt.c
c2c0552d7494c97ddf408939c954951b1dc3033e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/RSA_Encrypt.c
44fb9d7637a41f76fd3105365c223cca6d5bde79 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Asymmetric/ZGen_2Phase.c
f523d6e9f92f556eb67c7192a4a212dcd21cb783 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/Unseal.c
1270d2675a052e452604abf21ae7d1e7ce9f055b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/MakeCredential.c
96d90b66981dcfa3e2a05c0cbecbf34b91a65e14 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/Load.c
1bca8c7f48e122b595f81ecb428b54ea1dc50742 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/ActivateCredential.c
f020bb04aae416aeb7c1189d6ed5c79fb0a6e345 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/ObjectChangeAuth.c
5d5beaf98ae2e96ed9e9c00ab6ea26a57c78204e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/Object_spt.c
c09f0b9df15e12662d6ad78a68444a67bbdca8eb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/CreateLoaded.c
310b0898c923667f453d165e0a9926eb8d346a6f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/Create.c
64d5919c672dfc44fc10b7b069c2c866cabe82ac - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/LoadExternal.c
c3b9c77f50fb64add3975acb54afcb9419a522c3 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Object/ReadPublic.c
cabe90d3a0189bba8f0ec6be382ecb611e56d766 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/AttachedComponent/AC_GetCapability.c
cf6f2db7011f13d73a939be1a73a566edb53c5a0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/AttachedComponent/AC_spt.c
8a5d00c0ff144f96ffef9e3e2ca6fdf521a138cb - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/AttachedComponent/Policy_AC_SendSelect.c
fbaae98602eedfa517257f018c3ba4cb424d9315 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/AttachedComponent/AC_Send.c
973173f0edfcf6ab2d80e4380b6bb78bf08119a9 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Context/ContextSave.c
96b1b4082707dddfd7fe52922b12ec510b3fca8a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Context/FlushContext.c
551606340bbbbd796441854729786c2c94a53f9c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Context/ContextLoad.c
4c3fc77c75e0b5742471eeb110d6e6fabcb65731 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Context/EvictControl.c
733767778ac50dbd49ae6b97c045e5b0cc37046f - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Context/Context_spt.c
09e831c6316eb9fcc1350c6072797e7c9c2aa283 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Misc/SetAlgorithmSet.c
4fe85236b0efdf18eeab5b29cc23556f0279c206 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Misc/PP_Commands.c
e7a9e652bb4ac5e85c8e1db3d4e360db21571d1c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Session/PolicyRestart.c
5bacab95011862392ab50c7063fbd39a71e4e1f1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Session/StartAuthSession.c
68daa6c7c87031c44832452db4f633ccfefa061a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Startup/Shutdown.c
19dadc62f6dd24fbe1617b47f8643ede9afbb6d8 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Startup/Startup.c
a85083fd1766596d284bfcda7878062e4f848d31 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Testing/IncrementalSelfTest.c
043f05cbf29aaea72976bafa119fe4c6ea52947d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Testing/SelfTest.c
a04e1f890e0dc85c03762a0f93da8933cf72eeb8 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Testing/GetTestResult.c
39cef4fdd45cfae84dfe0b10421a8d22e48040bd - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Attestation/Attest_spt.c
c5b487407768a4cc47ce3e439229365023ba38c7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Attestation/GetSessionAuditDigest.c
06e3406314f390af840548aa1e2bffa1500d0f38 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Attestation/CertifyX509.c
39d8048f7d7f6324dede76816b9cdce1895eda8a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Attestation/GetCommandAuditDigest.c
cccb8929c774f62ace8cc0f950b76aabc02e3f0c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Attestation/Quote.c
7c3924284378b21001f6120874f7286b08bcab70 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Attestation/GetTime.c
0581c121a0ffb4b5516cb531fe622ce94df07d53 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Attestation/CertifyCreation.c
f7ef52b7fc3e51ac574ad1711265b80fae74a4b4 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Attestation/Certify.c
60025cb0327048a1655b2293a91790ea95968b89 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_ReadPublic.c
9b707597db32549caed72d79d4348286c2c8c84d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_UndefineSpaceSpecial.c
9b54b8fc55f8ee130f13641cba871c467c2f6539 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_DefineSpace.c
ff8f74e23cf6637980a1019ff15003dafaf84a91 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_Increment.c
bb0a22e25778627d4f64d217c94007571f56ead0 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_Read.c
b41bf18cd2dfd6937ebd33df85106bbd74c13966 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_UndefineSpace.c
34b1f44147ff14e1982afaf5ad498c710d71c461 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_Write.c
0f132292bc781aa375c73d7cc156d5ae2296885a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_ChangeAuth.c
4018d34a03f1542e2e6e07fc3c885b9a7151709c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_Extend.c
9dce4f4ece8e8dc71a031b70d4772c43260808bf - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_spt.c
274e0fef208e3559e364558f2505ab960c569d05 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_GlobalWriteLock.c
7b599ffb429ad0c3f2893a1435dc227ffbdf9450 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_WriteLock.c
d5100f5da31705c1061b5c4fe009738a90d6991d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_ReadLock.c
328ae9a3a794b68bb003885fe34eea037f074d2e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_Certify.c
b16f3b8589cb0d5de3ede0e38c3df9566439dfc7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/NVStorage/NV_SetBits.c
1195dda2bfef5b2f0ebf5d9dd0c1483e693feb73 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Ecdaa/Commit.c
83b2aab8bfa4d8152b836dc79e649d2f9df8b428 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Vendor/Vendor_TCG_Test.c
ba06c2bbc967f489c0ef81a52ffd5bc61d854b10 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Hierarchy/HierarchyControl.c
f3ad6beabba99f2d302804f9e4040e30edbd168d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Hierarchy/SetPrimaryPolicy.c
3c6a9b5585e15ed5d931d520b13f18d3cf7a6427 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Hierarchy/Clear.c
2c0105db6fabf84cd5e1264af61fbcf8ca44ee4e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Hierarchy/ChangePPS.c
3b58be2b254ce73d0a09c4f40181e757b5801583 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Hierarchy/CreatePrimary.c
7c066a0b22f5047720515190002981c2bb4f8559 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Hierarchy/ChangeEPS.c
e40fdd1540746ada2ef6193fcfef5264945f440c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Hierarchy/HierarchyChangeAuth.c
fb72b54a400108f311ba215a95647b182ec390ab - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Hierarchy/ClearControl.c
0cd97f9c3068ce2beeec5cdbe59a35195b92f647 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Symmetric/HMAC.c
ed64e70b14016b3e27d91724d8fb78a86c84492c - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Symmetric/MAC.c
bbf716723d7949b6ad949afb4c82e74f200e8c24 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Symmetric/Hash.c
a30e4e882bab65b23bad83718f0df3a86be8b240 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Symmetric/EncryptDecrypt.c
c41a91e8a169399e5c3daf950f1903d22ec91757 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Symmetric/EncryptDecrypt_spt.c
40161da967ed914f228a3aab5100d896da33824d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Symmetric/EncryptDecrypt2.c
73735fc467c6d10ff8de1c9bd2fd6048cceabb71 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/Policy_spt.c
48b353b2ebd17849912faca615aa97d50d2141b8 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyGetDigest.c
40cf33b0b774dae8c6ccb5d65405a7e54903e4c9 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicySigned.c
1e23cd2245b273f4e2d7c559727c9b160b0477e5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyLocality.c
8705b3a606961e1b05c0d5dd32765309a325ed52 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyCounterTimer.c
932ed2d5107b414d84be1be9a2a851f4e4e8b347 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicySecret.c
a05c262c1e6127b2a49b9489b60850b35762bd26 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyCommandCode.c
753243158f166cb485c6e7a3471c6b4b028c68d3 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyNameHash.c
aab6431ac9d4fcce238593514a9cbadf4b9215ef - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyOR.c
88c03c37cfbed2aff36dfbcf94b95177d54762fe - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyPCR.c
588a8d77a584bacab70eb45e8653cc26182caa9b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyNvWritten.c
1bfef4dab67e4efb29fa68b09e96d2627fad2be6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyTemplate.c
d0a42a69ce9e7024add491c99d63f917623c341d - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyAuthValue.c
866b4da196d99d410685d625146c5262614a1057 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyTicket.c
dcaa8cea72af93d8c5f3d8a57089f1fd72ed3e74 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyCpHash.c
7a3b44021510f326081fdbe1076c06ab481e2a97 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyDuplicationSelect.c
68f8914ab2417a723a81d1d2b51282e8487cd768 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyPassword.c
ffb4fc98afe39eaf79abbe1a21e1f9cb4f142d9a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyPhysicalPresence.c
ded5971153e324b8b4f6aa95db951d09de1b2ecd - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyAuthorizeNV.c
f961c5947f92e32233dc32e62249202b2cd07570 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyAuthorize.c
19218fe30830606f6ec36f65abfa5e6dc61a2d12 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/EA/PolicyNV.c
5286c36046943f4d9666a1f20f762f249903529a - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/PCR/PCR_Event.c
b85eb5bb0cb8d3c1f3f066d6592d520c64a30028 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/PCR/PCR_Read.c
1723fd5edd58d258867ce07a1e6cb192a9134684 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/PCR/PCR_Reset.c
567fcf447739ce658f12b708c9e630adac2c02a1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/PCR/PCR_SetAuthValue.c
85b8105ca22c96106141ea7ca062c4f3b55f288b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/PCR/PCR_Allocate.c
2f0d5d80986eab6a2f480f5a119aa292574a5c43 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/PCR/PCR_SetAuthPolicy.c
1936c8a82923b6cf455ae9a32086f8b47e9fcec5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/PCR/PCR_Extend.c
131c53ad4309da75d2d0c0fc48b42eb85ab892a5 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/HashHMAC/SequenceComplete.c
4998afedc6c5beb0fa299bee383dfe91fbc7de4b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/HashHMAC/MAC_Start.c
1d73e64673af7532369bdea0b79d8b3b9c2809a2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/HashHMAC/HMAC_Start.c
182701b3fd417d0a2f45bf6e0b05851de8424950 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/HashHMAC/SequenceUpdate.c
6a557c5edff08e22d2de7967bfb737a1a26634e6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/HashHMAC/EventSequenceComplete.c
2c67c87e19679660cdb2f8d32954da97e14f8079 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/HashHMAC/HashSequenceStart.c
2be8b39f7a4a7cf50977aa0ac7b44554f06e29df - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Duplication/Import.c
bb1c1c731518c7698413695ba8d8e16627303ea2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Duplication/Rewrap.c
93626622fb78f36fff350c70113da9af69da76fa - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Duplication/Duplicate.c
77c7e04182e899c143665ccc8d47f7ec8205b288 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Random/GetRandom.c
fbfe1dd32c3d5e790448ead7346654838dc3e482 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Random/StirRandom.c
1d02ad4911a3717f8c16a00147f895e042001df2 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Capability/TestParms.c
705d003f4eda4e14d5adc59e0dbd61083645812b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Capability/GetCapability.c
e9fb4d674523f5fa0950178867220d9afdc21e6e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/FieldUpgrade/FirmwareRead.c
ac9421f2de85e45f1fdacc55df00ee912f582661 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/FieldUpgrade/FieldUpgradeStart.c
c5d528a495db164b7eeba279c3408a6e5864080b - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/FieldUpgrade/FieldUpgradeData.c
fcf83214d3f3c1296dc883a93dc91e189c82b88e - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Signature/VerifySignature.c
523dab0ff81bc5d2333604b81b8c655a72fb5957 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/Signature/Sign.c
dcc4083b045cf3765b91c539f299216534cd07b3 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/ClockTimer/ACT_SetTimeout.c
b85fab62d41638b1960347ab5db0f5c04cc40b48 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/ClockTimer/ReadClock.c
36dc3efeecfa5aa7c6ea85f3634adb5d15a3be00 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/ClockTimer/ClockSet.c
fdc898681b4fb8c7223334448233c6e83fa470a6 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/ClockTimer/ClockRateAdjust.c
578761745c2b6d96650e066060a08eeedafe6de7 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/command/ClockTimer/ACT_spt.c
a68f1d79f27d6415a6946a5cad9f997591b471bf - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/events/_TPM_Init.c
c4e81a39b2206a46fdfcb4d7bbf14ee4307489c1 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/events/_TPM_Hash_Data.c
d209bee5b5913f0b761575695c8511fe6722f515 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/events/_TPM_Hash_End.c
6a0f30c4781067b8428260fe466e5d6e8d808842 - optee/samples/ms-tpm-20-ref/TPMCmd/tpm/src/events/_TPM_Hash_Start.c
29c82ba9ec61627d639ba195206aae5986b6d713 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/platform.vcxproj
7aaa3dd88ec8382f37bf795db6b66041ec21d6b6 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/platform.vcxproj.filters
28d350e18f1aef2b1a498f6a3c4d6b6fc4801e16 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/include/PlatformClock.h
e6bb9513e4249c3ac0a989c5fd7bfb903d289620 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/include/Platform.h
96a84654a7f17be4142d2be731b34f75a98ed392 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/include/PlatformACT.h
6bb582b72adaf604087fb29ed50662e4022c3ccc - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/include/PlatformData.h
3981e6d6dadaa8e8d24d15a406bf689b056f0417 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/include/prototypes/Platform_fp.h
d290d3667f6beb284f0939e9bb8de8e5f791ae65 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/PlatformData.c
48252f45915ed083a6bac0596f3f735e790030ff - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/Unique.c
a0db60df8165e3f3d2b061e5d016e276436ac491 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/NVMem.c
840342229d7c6e58ac57152754601a3bc71ba600 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/Cancel.c
bb85408dbeab5098eb77aa2313d4b28c1d50c029 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/PowerPlat.c
f3feb56e3c38c94f33efddfc87b0a0c57195b8f5 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/PPPlat.c
2d34f6fdc0779ace9b29380650859eb2dc9beb3b - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/Entropy.c
d0b4a5d97e521e77f766897886f80c684d758eab - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/Clock.c
5dd2e2afbb7b708d9bc585d6c7a1263fe5e3e6cc - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/RunCommand.c
913caab5748d7a733058680722290dd4cbaa18a6 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/LocalityPlat.c
8904b7172e9c95bf5ccca723413a69488c1eb920 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/DebugHelpers.c
8fa7666caa7a84f328f87f9a9dbebd3c9388c8a5 - optee/samples/ms-tpm-20-ref/TPMCmd/Platform/src/PlatformACT.c
2db3c7ae60b9a166c0d001451a16c623a1182ded - optee/samples/ms-tpm-20-ref/TPMCmd/Simulator/simulator.vcxproj
97dd5b29b67f302ad063523d539990c19123b90a - optee/samples/ms-tpm-20-ref/TPMCmd/Simulator/include/TpmTcpProtocol.h
b3c67c071ec064771e077773cb203d881499a063 - optee/samples/ms-tpm-20-ref/TPMCmd/Simulator/include/prototypes/Simulator_fp.h
adbc8328158bfbac3794e5bd132d5ea0304dbcd2 - optee/samples/ms-tpm-20-ref/TPMCmd/Simulator/src/tpmsim.service
ed0d9f117bda9b562ce47f09fa526466ea647130 - optee/samples/ms-tpm-20-ref/TPMCmd/Simulator/src/TPMCmds.c
d7bd32e37a53264b6ec8ebcf3b41f087652c4d3d - optee/samples/ms-tpm-20-ref/TPMCmd/Simulator/src/TPMCmdp.c
922b6cdcf8fe2c2afbea87d499eba8234873cbb8 - optee/samples/ms-tpm-20-ref/TPMCmd/Simulator/src/TcpServer.c
5a493d9124d00ded9800ae107ba167c72c9056ad - optee/samples/ftpm-helper/Makefile
2970128447c8416488b3b7fad56f7f46ae945b76 - optee/samples/ftpm-helper/README.md
96da5d9fe175e882abdd919aa1c4bd9a2def2f06 - optee/samples/ftpm-helper/LICENSE
5dbb2cb40501d442a50453c79e55f6fe7aa642c9 - optee/samples/ftpm-helper/host/Makefile
4ebeba0c52d359825b26ffad5fd456d1c43277d8 - optee/samples/ftpm-helper/host/ftpm_helper_ca.c
56785f6cfdb83e235bebab6ae3c2667cf965c8e7 - optee/samples/ftpm-helper/host/tool/odm_ekb_gen.py
44dd5efe74224613ae3361b5288d5f4fbbffb808 - optee/samples/ftpm-helper/host/tool/ftpm_manufacturer_ca_sign_sid_csr.sh
46d7267ff5f2e40f0cb402b89ccef57708c6ce05 - optee/samples/ftpm-helper/host/tool/ftpm_manufacturer_ca_sign_sid_csr.py
67866b93f243fa5187ceb488f6854da48b017d68 - optee/samples/ftpm-helper/host/tool/README_keylime_TPM_for_unfused_Jetson.md
cf1ffcff56b56122f7d0e7905496548f8d20c48f - optee/samples/ftpm-helper/host/tool/ftpm_gen_measurement_list.py
ffaf17771c52fb326d9298929500e7cad003d933 - optee/samples/ftpm-helper/host/tool/ftpm_manufacturer_gen_ek_csr.sh
e3f3060340f290f4b9ac80f0bfef98636605414c - optee/samples/ftpm-helper/host/tool/ftpm_offline_provisioning_verify.sh
6040c09f6e07731353cde2f79647f9b37019012c - optee/samples/ftpm-helper/host/tool/ftpm_manufacturer_ca_simulator.py
deb9eb80f2b363a1a1abae3526b261b4dacd4fa3 - optee/samples/ftpm-helper/host/tool/ftpm_sim_provisioning_tool.sh
ddb11390ea289ff539c833fcd9849d0bf81106b2 - optee/samples/ftpm-helper/host/tool/ftpm_test_local_attestation.sh
58f17af47d0dd8ec7ec3e5a0a4cfcc10da119248 - optee/samples/ftpm-helper/host/tool/ftpm_manufacturer_gen_ek_csr_tool.py
67d5b2372fbf7a9e401c33b0a88d7690fa02c39f - optee/samples/ftpm-helper/host/tool/kdk_gen.py
18d61e2198cfc4965ec932ad1751e98ea619bffe - optee/samples/ftpm-helper/host/tool/oem_ekb_gen.py
fe950095be80ba8e01f91fc8db3c98d64f2ce7b3 - optee/samples/ftpm-helper/host/tool/ftpm_device_provision.sh
cce78a2db51c264b884b2e53c7605556e4651318 - optee/samples/ftpm-helper/host/tool/ftpm_manufacturer_ca_simulator.sh
22dcd0ebfce77a7abdceaa85dadfbd5151814ef4 - optee/samples/ftpm-helper/host/tool/lib/silicon_id_csr.py
68063b7cdc77b6f03971c9b479950603d395e530 - optee/samples/ftpm-helper/host/tool/lib/ftpm_ek.py
2989d9817b1d1ee76139b1bf780f937af2721fe3 - optee/samples/ftpm-helper/host/tool/lib/aes_drbg.py
79c7dece1ab210876510b24cf9a18ec129a93693 - optee/samples/ftpm-helper/host/tool/lib/ftpm_ek_csr.py
e5a4b96b9883d615734a76bf898ff4433fed4b59 - optee/samples/ftpm-helper/host/tool/conf/ftpm_sim_root_ca_csr.config
2b3f0a1315886edf3fe2969e88e4f709914c2ea1 - optee/samples/ftpm-helper/host/tool/conf/ftpm_i_ca_sim.config
1dbb0eb577e447341e8844a47e877f919c89c4ef - optee/samples/ftpm-helper/host/tool/conf/ftpm_sim_i_ca_csr.config
ab33fbbfb23ed4c0687e915bd88cc7b568b319d1 - optee/samples/ftpm-helper/host/tool/conf/ftpm_root_ca_sim.config
9344d91fe659e33261e06fe1558bb59983870528 - optee/samples/ftpm-helper/host/tool/conf/ftpm_sim_ek_csr.config
174230a84516fd6fc4c6dfa553bfba136df35489 - optee/samples/ftpm-helper/ta/Makefile
6442bb99b6d3029526133a362a0838012c051149 - optee/samples/ftpm-helper/ta/user_ta_header_defines.h
a521701086a719a903d80697a572009e501ffb6b - optee/samples/ftpm-helper/ta/ftpm_helper_ta.c
680c8e7491b86f42fa79551446d38294fae5bd5e - optee/samples/ftpm-helper/ta/include/ftpm_helper_ta.h
9eebaea6c013cd863161f00430bf4b6a154813a6 - optee/samples/pkcs11-sample/Makefile
fc4fb84dcbf00b04fcc91f516aedd701350aed89 - optee/samples/pkcs11-sample/LICENSE
a7f13b06bf4c5eb0669cf42f2632c2b235262393 - optee/samples/pkcs11-sample/host/Makefile
b7cb007727b4c2e482d77fcb1a3c7834caf80fbd - optee/samples/pkcs11-sample/host/pkcs11_sample_ca.c
22d6ec718c65f0f1fab50d6a32d64857f975eb83 - optee/samples/hwkey-agent/Makefile
d641b8218d5f3af3869eb24210d632d9accc789e - optee/samples/hwkey-agent/README
b2def2faca96323618fae5d302c50260bccb869e - optee/samples/hwkey-agent/LICENSE
d8d2851c68cdbcc9138bf2542d445f73ab2ebe44 - optee/samples/hwkey-agent/host/Makefile
59f6594fdd5e77aaf03788a08a39999ffd8b86e5 - optee/samples/hwkey-agent/host/hwkey_agent_ca.c
c7e428c3b9438d220638cf02897d0e9ca9c20e8e - optee/samples/hwkey-agent/host/tool/gen_ekb/gen_ekb.py
577b509208a9c64a9f02ec5df6b654063b55889f - optee/samples/hwkey-agent/host/tool/gen_ekb/README
9ca235c5634cc3e61739639f38986151a63fecad - optee/samples/hwkey-agent/host/tool/gen_ekb/example.sh
5054796c29272096d67dbf4fa7453f9bfa3ad280 - optee/samples/hwkey-agent/ta/Makefile
01a5ebf5ecbf58a06002ad10b902e18d78d452d8 - optee/samples/hwkey-agent/ta/user_ta_header_defines.h
52fd37078d752fb17a039afd148a99a6f90c57b7 - optee/samples/hwkey-agent/ta/hwkey_agent_ta.c
f1652fd24c49bf7be742b2e2081280bcd33d2ddd - optee/samples/hwkey-agent/ta/include/hwkey_agent_ta.h

Change-Id: Ifa0f423bb13bb8b7e0de62756ad1cf158f0326ac
This commit is contained in:
svcmobrel-release
2025-09-19 10:09:49 -07:00
parent f3141b8674
commit 064a5169e8
4307 changed files with 1211771 additions and 0 deletions

3967
commitFile.txt Normal file
View File

File diff suppressed because it is too large Load Diff

58
nvcommon_build.sh Executable file
View File

@@ -0,0 +1,58 @@
# SPDX-FileCopyrightText: Copyright (c) 2019-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
#
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
# property and proprietary rights in and to this material, related
# documentation and any modifications thereto. Any use, reproduction,
# disclosure or distribution of this material and related documentation
# without an express license agreement from NVIDIA CORPORATION or
# its affiliates is strictly prohibited.
# shellcheck disable=SC2148
# Function to check if variable is defined.
function check_vars {
# shellcheck disable=SC2124
variables=${@}
for variable in ${variables} ; do
if [ -z "${!variable}" ]; then
echo "Error: Env variable ${variable} is not set!!"
exit 1
fi
done
}
# Function to check build environment
function check_env_common {
if [ "${IS_CROSS_COMPILATION}" -eq 1 ]; then
check_vars "CROSS_COMPILE_AARCH64_PATH"
CROSS_COMPILE_AARCH64="${CROSS_COMPILE_AARCH64:-${CROSS_COMPILE_AARCH64_PATH}/bin/aarch64-none-linux-gnu-}"
if [ ! -f "${CROSS_COMPILE_AARCH64}gcc" ]; then
echo "Error: Path ${CROSS_COMPILE_AARCH64}gcc does not exist."
exit 1
fi
fi
# shellcheck disable=SC2046,SC2235
if [ "${MAKE_BIN}" != "make" ] && \
( [ ! -f "${MAKE_BIN}" ] || \
[ ! -f $(basename "${MAKE_BIN}") ] ); then
echo "Error: ${MAKE_BIN} does not exist !!"
# shellcheck disable=SC2140
echo "Set MAKE_BIN env variable to "make" binary"
exit 1
fi
}
# shellcheck disable=SC2034
NPROC=$(nproc)
MAKE_BIN="${MAKE_BIN:-make}"
BUILD_DIR="${BUILD_DIR:-$(pwd)/build_nv_sources}"
MACHINE=$(uname -m)
IS_CROSS_COMPILATION=0
if [[ "${MACHINE}" =~ "x86" ]]; then
IS_CROSS_COMPILATION=1
fi
check_env_common

View File

@@ -0,0 +1,186 @@
**********************************************************************
NVIDIA Jetson Linux (L4T) OP-TEE Package
**********************************************************************
----------------------------------------------------------------------
Introduction
----------------------------------------------------------------------
This package contains the necessary files and instructions to build a
trusted OS image based on ATF and OP-TEE for these Jetson devices:
- Jetson AGX Orin series
- Jetson AGX Thor series
----------------------------------------------------------------------
Prerequisites
----------------------------------------------------------------------
To install build prerequisites, for example, python3-pycryptodome and
python3-pyelftools, in your build machine, refer to:
https://optee.readthedocs.io/en/latest/building/prerequisites.html.
----------------------------------------------------------------------
The python cryptography issue
----------------------------------------------------------------------
When building OP-TEE sources, you may see a python error in sign_encrypt.py like:
"TypeError: public_key() missing 1 required positional argument: 'backend'"
This is because the "cryptography" python package in your build system is too old.
Running the following commands can fix the issue:
sudo apt remove python3-cryptography
pip3 install cryptography
----------------------------------------------------------------------
Placeholders in this document
----------------------------------------------------------------------
This document uses a placeholder, "<platform>", to indicate Jetson platforms.
Its possible values are:
- 234
- 264
To build different trusted OS images and DTBs, select the platform value
based on your Jetson board.
----------------------------------------------------------------------
Toolchain
----------------------------------------------------------------------
1. Go to https://developer.nvidia.com/embedded/jetson-linux-archive and download
the toolchain from Jetson release page for your L4T version.
2. Set the CROSS_COMPILE_AARCH64_PATH environment variable to point to the aarch64
toolchain.
For example, if the aarch64 toolchain directory is
/toolchain/aarch64-none-linux-gnu/, set the CROSS_COMPILE_AARCH64_PATH
with the following command:
export CROSS_COMPILE_AARCH64_PATH=/toolchain/aarch64-none-linux-gnu
3. Set the CROSS_COMPILE_AARCH64 environment variable with the following command:
export CROSS_COMPILE_AARCH64=/toolchain/aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
----------------------------------------------------------------------
PKG-CONFIG
----------------------------------------------------------------------
1. pkg-config is required to build OP-TEE. Install it using apt like:
sudo apt install pkg-config
2. Set the PKG_CONFIG environment variable:
export PKG_CONFIG=/usr/bin/pkg-config
----------------------------------------------------------------------
UEFI StMM Image
----------------------------------------------------------------------
This step is only needed by t234 OP-TEE builds.
- To build OP-TEE for t234 platforms, a UEFI StMM image is required.
For the Jetson AGX Orin series, the image is usually in the following directory:
<Linux_for_Tegra>/bootloader/standalonemm_optee_t234.bin
- To notify the OP-TEE build script about the location of the image, set the "UEFI_STMM_PATH"
environment variable like following:
export UEFI_STMM_PATH=<StMM image path>
----------------------------------------------------------------------
Building the OP-TEE Source Code
----------------------------------------------------------------------
To build the OP-TEE source package, run the the following command:
./optee_src_build.sh -p t<platform> -t
----------------------------------------------------------------------
Building the OP-TEE dtb
----------------------------------------------------------------------
To build OP-TEE dtb, run the following command:
dtc -I dts -O dtb -o ./optee/tegra<platform>-optee.dtb ./optee/tegra<platform>-optee.dts
----------------------------------------------------------------------
Building the ATF Source Code
----------------------------------------------------------------------
This step is for t234 OP-TEE builds.
1. Extract the ATF source package.
mkdir atf_build
tar -I lbzip2 -C atf_build -xpf atf_src.tbz2
2. Build the ATF source code:
cd atf_build
export NV_TARGET_BOARD=generic
./nvbuild.sh
cd ..
This step is for t264 builds, ATF binary bl31.fip is a separate binary and don't need combine to tos.img
1. Extract the ATF t264 source package.
mkdir atf_t264_build
tar -I lbzip2 -C atf_t264_build -xpf atf_t264_src.tbz2
2. Build the ATF source code:
cd atf_t264_build
export NV_TARGET_BOARD=generic
./nvbuild.sh
cd ..
3. Generate bl31.fip
Get fiptool and dtc file.
The fiptool is in the <atf_src_root>/tools/fiptool/ of ATF t264 source package
Generate the dtb file with the following commands:
dtc -I dts -O dtb -o nvidia-t264.dtb <atf_src_root>/plat/fdts/nvidia-t264.dts
Generate the bl31.fip with the following commands:
<atf_src_root>/tools/fiptool/fiptool create --soc-fw bl31.bin --soc-fw-config nvidia-t264.dtb bl31.fip
----------------------------------------------------------------------
Generating the tos.img for t234 platforms
----------------------------------------------------------------------
This step is only needed by t234 OP-TEE builds.
1. Get gen_tos_part_img.py file.
This file is usually in the <Linux_for_Tegra>/nv_tegra/tos-scripts/ of BSP package.
2. Generate the tos.img with the following commands:
./gen_tos_part_img.py \
--monitor ./atf_build/arm-trusted-firmware/generic-t<platform>/tegra/t<platform>/release/bl31.bin \
--os ./optee/build/t<platform>/core/tee-raw.bin \
--dtb ./optee/tegra<platform>-optee.dtb \
--tostype optee \
./tos.img
----------------------------------------------------------------------
Generating the tos.img for t264 platform
----------------------------------------------------------------------
This step is only needed by t264 OP-TEE builds.
1. Get sptool.py file.
This file is usually in the <atf_src_root>/tools/sptool/ of ATF source package.
2 Generate the tos.img with the following commands:
python3 sptool.py \
-i ./optee/build/t<platform>/core/tee-raw.bin:./optee/tegra<platform>-optee.dtb \
-o ./tos.img
----------------------------------------------------------------------
Verifying the Image
----------------------------------------------------------------------
To verify the image:
1. Replace the default TOS image file with the newly generated TOS
image. The default TOS image file is located at:
<Linux_for_Tegra>/bootloader/tos-optee_t<platform>.img
2. Complete one of the following tasks:
- Flash the system as usual.
This is useful for flashing a new system or replacing the
entire operating system.
- Flash the TOS image again using the following partition flash commands:
For t234 platforms:
sudo ./flash.sh -k A_secure-os jetson-agx-orin-devkit mmcblk0p1
For t264 platforms:
sudo UNIFIED_FLASH=1 ./tools/kernel_flash/l4t_initrd_flash.sh \
--no-flash -k A_sec-partition jetson-agx-thor-devkit internal
# Use the log that above command produces to flash the partition
3. Copy all the files under ./optee/install/t<platform> to the target.

View File

@@ -0,0 +1,51 @@
name: CI
on: [push, pull_request]
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
debian:
name: build (Debian)
runs-on: ubuntu-latest
container: jforissier/optee_client_ci_debian
steps:
- name: Checkout
uses: actions/checkout@v3
- name: arm64 with make
run: make -j O=out-make-aarch64 CROSS_COMPILE=aarch64-linux-gnu-
- name: armhf with make
run: make -j O=out-make-armhf CROSS_COMPILE=arm-linux-gnueabihf-
- name: arm64 with cmake
run: |
set -e -v
mkdir out-cmake-aarch64 && cd out-cmake-aarch64
PKG_CONFIG=aarch64-linux-gnu-pkg-config cmake .. -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc
make -j
- name: armhf with cmake
run: |
set -e -v
mkdir out-cmake-armhf && cd out-cmake-armhf
PKG_CONFIG=arm-linux-gnueabihf-pkg-config cmake .. -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc
make -j
ubuntu:
name: build (Ubuntu)
runs-on: ubuntu-latest
container: jforissier/optee_client_ci_ubuntu
steps:
- name: Checkout
uses: actions/checkout@v3
- name: arm64 with make
run: make -j O=out-make-aarch64 CROSS_COMPILE=aarch64-linux-gnu-
- name: armhf with make
run: make -j O=out-make-armhf CROSS_COMPILE=arm-linux-gnueabihf-
- name: arm64 with cmake
run: |
set -e -v
mkdir out-cmake-aarch64 && cd out-cmake-aarch64
PKG_CONFIG=aarch64-linux-gnu-pkg-config cmake .. -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc
make -j
- name: armhf with cmake
run: |
set -e -v
mkdir out-cmake-armhf && cd out-cmake-armhf
PKG_CONFIG=arm-linux-gnueabihf-pkg-config cmake .. -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc
make -j

View File

@@ -0,0 +1,27 @@
name: 'Close stale issues and pull requests with no recent activity'
on:
schedule:
- cron: "15 00 * * *"
permissions:
issues: write
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v4.1.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue has been marked as a stale issue because it has been open (more than) 30 days with no activity. Remove the stale label or add a comment, otherwise this issue will automatically be closed in 5 days. Note, that you can always re-open a closed issue at any time.'
stale-pr-message: 'This pull request has been marked as a stale pull request because it has been open (more than) 30 days with no activity. Remove the stale label or add a comment, otherwise this pull request will automatically be closed in 5 days. Note, that you can always re-open a closed issue at any time.'
stale-issue-label: Stale
stale-pr-label: Stale
exempt-issue-labels: bug,enhancement
exempt-pr-labels: bug,enhancement
days-before-stale: 30
days-before-close: 5
remove-stale-when-updated: true
remove-issue-stale-when-updated: true
remove-pr-stale-when-updated: true

View File

@@ -0,0 +1,299 @@
// SPDX-License-Identifier: Apache-2.0
//
// Copyright (C) 2024 The Android Open Source Project
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
soong_config_module_type {
name: "optee_client_cflags_cc_defaults",
module_type: "cc_defaults",
config_namespace: "optee_client",
bool_variables: [
"cfg_debug",
"cfg_werror",
],
properties: ["cflags"],
}
optee_client_cflags_cc_defaults {
name: "optee_client_cflags_defaults",
cflags: [
"-c",
"-fPIC",
"-Wall",
"-Wbad-function-cast",
"-Wcast-align",
"-Werror-implicit-function-declaration",
"-Wextra",
"-Wfloat-equal",
"-Wformat-nonliteral",
"-Wformat-security",
"-Wformat=2",
"-Winit-self",
"-Wmissing-declarations",
"-Wmissing-format-attribute",
"-Wmissing-include-dirs",
"-Wmissing-noreturn",
"-Wmissing-prototypes",
"-Wnested-externs",
"-Wpointer-arith",
"-Wshadow",
"-Wstrict-prototypes",
"-Wswitch-default",
"-Wwrite-strings",
],
soong_config_variables: {
cfg_debug: {
cflags: [
"-DDEBUG",
"-O0",
"-g",
],
},
cfg_werror: {
cflags: ["-Werror"],
},
},
}
soong_config_module_type {
name: "optee_client_libteec_cc_defaults",
module_type: "cc_defaults",
config_namespace: "optee_client",
bool_variables: [
"cfg_tee_benchmark",
],
value_variables: [
"cfg_tee_client_log_level",
"cfg_tee_client_log_file",
"cfg_tee_fs_parent_path",
],
properties: [
"cflags",
"defaults",
"srcs",
],
}
optee_client_libteec_cc_defaults {
name: "optee_client_libteec_log_file_defaults",
soong_config_variables: {
cfg_tee_fs_parent_path: {
cflags: ["-DTEEC_LOG_FILE=\"%s/teec.log\""],
conditions_default: {
cflags: ["-DTEEC_LOG_FILE=\"/data/vendor/tee/teec.log\""],
},
},
},
}
optee_client_libteec_cc_defaults {
name: "optee_client_libteec_defaults",
soong_config_variables: {
cfg_tee_benchmark: {
cflags: ["-DCFG_TEE_BENCHMARK"],
srcs: ["teec_benchmark.c"],
},
cfg_tee_client_log_level: {
cflags: ["-DDEBUGLEVEL_%s"],
conditions_default: {
cflags: ["-DDEBUGLEVEL_2"],
},
},
cfg_tee_client_log_file: {
cflags: ["-DTEEC_LOG_FILE=\"%s\""],
conditions_default: {
defaults: ["optee_client_libteec_log_file_defaults"],
},
},
cfg_tee_fs_parent_path: {
cflags: ["-DTEE_FS_PARENT_PATH=\"%s\""],
conditions_default: {
cflags: ["-DTEE_FS_PARENT_PATH=\"/metadata/vendor/tee\""],
},
},
},
}
cc_library_shared {
name: "libteec",
vendor: true,
compile_multilib: "both",
defaults: [
"optee_client_cflags_defaults",
"optee_client_libteec_defaults",
],
cflags: [
"-DBINARY_PREFIX=\"TEEC\"",
],
srcs: [
"libteec/src/tee_client_api.c",
"libteec/src/teec_trace.c",
],
local_include_dirs: [
"libteec/include",
"libteec/src",
],
export_include_dirs: ["libteec/include"],
}
cc_library_shared {
name: "libckteec",
vendor: true,
compile_multilib: "both",
defaults: ["optee_client_cflags_defaults"],
srcs: [
"libckteec/src/ck_debug.c",
"libckteec/src/ck_helpers.c",
"libckteec/src/invoke_ta.c",
"libckteec/src/pkcs11_api.c",
"libckteec/src/pkcs11_processing.c",
"libckteec/src/pkcs11_token.c",
"libckteec/src/serialize_ck.c",
"libckteec/src/serializer.c",
],
shared_libs: ["libteec"],
local_include_dirs: [
"libckteec/include",
"libteec/include",
],
export_include_dirs: ["libckteec/include"],
}
soong_config_module_type {
name: "optee_client_tee_supplicant_cc_defaults",
module_type: "cc_defaults",
config_namespace: "optee_client",
bool_variables: [
"cfg_ftrace_support",
"cfg_gp_sockets",
"cfg_ta_gprof_support",
"cfg_tee_supp_plugins",
"rpmb_emu",
],
value_variables: [
"cfg_tee_client_load_path",
"cfg_tee_fs_parent_path",
"cfg_tee_plugin_load_path",
"cfg_tee_supp_log_level",
],
properties: [
"cflags",
"defaults",
"ldflags",
"srcs",
],
}
optee_client_tee_supplicant_cc_defaults {
name: "optee_client_tee_supplicant_plugin_load_path_defaults",
multilib: {
lib32: {
cflags: ["-DTEE_PLUGIN_LOAD_PATH=\"/vendor/lib/tee-supplicant/plugins/\""],
ldflags: ["-Wl,-rpath=/vendor/lib/tee-supplicant/plugins/"],
},
lib64: {
cflags: ["-DTEE_PLUGIN_LOAD_PATH=\"/vendor/lib64/tee-supplicant/plugins/\""],
ldflags: ["-Wl,-rpath=/vendor/lib64/tee-supplicant/plugins/"],
},
},
}
optee_client_tee_supplicant_cc_defaults {
name: "optee_client_tee_supplicant_plugin_defaults",
soong_config_variables: {
cfg_tee_plugin_load_path: {
cflags: ["-DTEE_PLUGIN_LOAD_PATH=\"%s\""],
ldflags: ["-Wl,-rpath=%s"],
conditions_default: {
defaults: ["optee_client_tee_supplicant_plugin_load_path_defaults"],
},
},
},
}
optee_client_tee_supplicant_cc_defaults {
name: "optee_client_tee_supplicant_prof_defaults",
srcs: ["tee-supplicant/src/prof.c"],
}
optee_client_tee_supplicant_cc_defaults {
name: "optee_client_tee_supplicant_defaults",
soong_config_variables: {
cfg_ftrace_support: {
cflags: ["-DCFG_FTRACE_SUPPORT"],
defaults: ["optee_client_tee_supplicant_prof_defaults"],
},
cfg_gp_sockets: {
cflags: ["-DCFG_GP_SOCKETS=1"],
srcs: ["tee-supplicant/src/tee_socket.c"],
},
cfg_ta_gprof_support: {
cflags: ["-DCFG_TA_GPROF_SUPPORT"],
defaults: ["optee_client_tee_supplicant_prof_defaults"],
},
cfg_tee_client_load_path: {
cflags: ["-DTEEC_LOAD_PATH=\"%s\""],
conditions_default: {
cflags: ["-DTEEC_LOAD_PATH=\"/vendor/lib\""],
},
},
cfg_tee_fs_parent_path: {
cflags: ["-DTEE_FS_PARENT_PATH=\"%s\""],
conditions_default: {
cflags: ["-DTEE_FS_PARENT_PATH=\"/metadata/vendor/tee\""],
},
},
cfg_tee_supp_log_level: {
cflags: ["-DDEBUGLEVEL_%s"],
conditions_default: {
cflags: ["-DDEBUGLEVEL_2"],
},
},
cfg_tee_supp_plugins: {
srcs: ["tee-supplicant/src/plugin.c"],
cflags: [
"-DTEE_SUPP_PLUGINS",
"-Wno-macro-redefined",
],
defaults: ["optee_client_tee_supplicant_plugin_defaults"],
},
rpmb_emu: {
cflags: ["-DRPMB_EMU=1"],
srcs: [
"tee-supplicant/src/hmac_sha2.c",
"tee-supplicant/src/sha2.c",
],
},
},
}
cc_binary {
name: "tee-supplicant",
vendor: true,
defaults: [
"optee_client_cflags_defaults",
"optee_client_tee_supplicant_defaults",
],
cflags: [
"-DBINARY_PREFIX=\"TEES\"",
"-pthread",
],
srcs: [
"tee-supplicant/src/handle.c",
"tee-supplicant/src/rpmb.c",
"tee-supplicant/src/nvme_rpmb.c",
"tee-supplicant/src/sd_notify.c",
"tee-supplicant/src/tee_supp_fs.c",
"tee-supplicant/src/tee_supplicant.c",
"tee-supplicant/src/teec_ta_load.c",
],
shared_libs: ["libteec"],
local_include_dirs: [
"libteec/include",
"libteec/src",
"tee-supplicant/src",
],
}

View File

@@ -0,0 +1,49 @@
cmake_minimum_required(VERSION 3.4)
project(optee_client C)
# https://cmake.org/Wiki/CMake_Useful_Variables
set(CMAKE_TOOLCHAIN_FILE CMakeToolchain.txt)
option(CFG_WERROR "Build with -Werror" TRUE)
option(WITH_TEEACL "Build libteeacl" TRUE)
include(GNUInstallDirs)
################################################################################
# Compiler flags:
# We want to use the same flags in the entire optee_client git
################################################################################
add_compile_options(
-Wall -Wbad-function-cast -Wcast-align
-Werror-implicit-function-declaration -Wextra
-Wfloat-equal -Wformat-nonliteral -Wformat-security
-Wformat=2 -Winit-self -Wmissing-declarations
-Wmissing-format-attribute -Wmissing-include-dirs
-Wmissing-noreturn -Wmissing-prototypes -Wnested-externs
-Wpointer-arith -Wshadow -Wstrict-prototypes
-Wswitch-default -Wwrite-strings -fPIC
)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
add_compile_options(
-Wunsafe-loop-optimizations
)
endif()
if(CFG_WERROR)
add_compile_options(-Werror)
endif(CFG_WERROR)
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)
add_subdirectory(libteec)
add_subdirectory(tee-supplicant)
add_subdirectory(libckteec)
if(WITH_TEEACL)
find_package(PkgConfig REQUIRED)
pkg_check_modules(uuid REQUIRED IMPORTED_TARGET uuid)
add_subdirectory(libteeacl)
endif(WITH_TEEACL)
add_subdirectory(libseteec)

View File

@@ -0,0 +1,3 @@
set (CMAKE_SYSTEM_NAME Linux)
set (CMAKE_SYSTEM_PROCESSOR arm)

View File

@@ -0,0 +1,27 @@
Unless it has its own copyright/license embedded in its body, each source file
is subject to the following license terms:
Copyright (c) 2015, Linaro Limited
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

175
optee/optee_client/Makefile Normal file
View File

@@ -0,0 +1,175 @@
# Public variables are stored in config.mk
include ./config.mk
#########################################################################
# Set Internal Variables #
# May be modified to match your setup #
#########################################################################
ifneq ($(V),1)
VPREFIX := @
endif
export VPREFIX
EXPORT_DIR ?= $(O)/export
DESTDIR ?= $(EXPORT_DIR)
SBINDIR ?= /usr/sbin
LIBDIR ?= /usr/lib
INCLUDEDIR ?= /usr/include
sbindir ?= $(SBINDIR)
libdir ?= $(LIBDIR)
includedir ?= $(INCLUDEDIR)
WITH_TEEACL ?= 1
.PHONY: all build build-libteec build-libckteec build-libseteec \
build-libteeacl install copy_export clean cscope \
clean-cscope \
checkpatch-pre-req checkpatch-modified-patch checkpatch-modified-file \
checkpatch-last-commit-patch checkpatch-last-commit-file \
checkpatch-base-commit-patch checkpatch-base-commit-file \
checkpatch-all-files distclean
all: build install
build-libteec:
@echo "Building libteec.so"
@$(MAKE) --directory=libteec --no-print-directory --no-builtin-variables \
CFG_TEE_CLIENT_LOG_LEVEL=$(CFG_TEE_CLIENT_LOG_LEVEL)
build-tee-supplicant: build-libteec
@echo "Building tee-supplicant"
$(MAKE) --directory=tee-supplicant --no-print-directory --no-builtin-variables CFG_TEE_SUPP_LOG_LEVEL=$(CFG_TEE_SUPP_LOG_LEVEL)
build: build-libteec build-tee-supplicant build-libckteec build-libseteec
ifeq ($(WITH_TEEACL),1)
build: build-libteeacl
endif
build-libckteec: build-libteec
@echo "Building libckteec.so"
@$(MAKE) --directory=libckteec --no-print-directory --no-builtin-variables
build-libseteec: build-libteec
@echo "Building libseteec.so"
@$(MAKE) --directory=libseteec --no-print-directory --no-builtin-variables
build-libteeacl:
@echo "Building libteeacl.so"
@$(MAKE) --directory=libteeacl --no-print-directory --no-builtin-variables
install: copy_export
clean: clean-libteec clean-tee-supplicant clean-cscope clean-libckteec \
clean-libseteec
ifeq ($(WITH_TEEACL),1)
clean: clean-libteeacl
endif
clean-libteec:
@$(MAKE) --directory=libteec --no-print-directory clean
clean-tee-supplicant:
@$(MAKE) --directory=tee-supplicant --no-print-directory clean
clean-libckteec:
@$(MAKE) --directory=libckteec --no-print-directory clean
clean-libseteec:
@$(MAKE) --directory=libseteec --no-print-directory clean
clean-libteeacl:
@$(MAKE) --directory=libteeacl --no-print-directory clean
cscope:
@echo " CSCOPE"
${VPREFIX}find ${CURDIR} -name "*.[chsS]" > cscope.files
${VPREFIX}cscope -b -q -k
clean-cscope:
${VPREFIX}rm -f cscope.*
# Various checkpatch targets. The ones ending with "patch" only considers the
# patch, whilst the ones ending with "file" checks the complete file.
# +-------------------------------+------------+----------------------------+
# | Target commit | File/Patch | Comment |
# +-------------------------------+------------+----------------------------+
# | checkpatch-modified-patch | Patch | Check local modifications |
# +-------------------------------+------------+----------------------------+
# | checkpatch-modified-file | File | Check Local modifications |
# +-------------------------------+------------+----------------------------+
# | checkpatch-last-commit-patch | Patch | Check against HEAD^ |
# +-------------------------------+------------+----------------------------+
# | checkpatch-last-commit-file | File | Check against HEAD^ |
# +-------------------------------+------------+----------------------------+
# | checkpatch-base-commit-patch | Patch | Against specic commit |
# +-------------------------------+------------+----------------------------+
# | checkpatch-base-commit-file | File | Against specic commit |
# +-------------------------------+------------+----------------------------+
# | checkpatch-all-files | File | Check all tracked files |
# +-------------------------------+------------+----------------------------+
CHECKPATCH_IGNORE ?= --ignore NEW_TYPEDEFS --no-signoff
CHECKPATCH_STRICT ?= --strict
CHECKPATCH_ARGS ?= $(CHECKPATCH_IGNORE) $(CHECKPATCH_STRICT) --no-tree --terse
CHECKPATCH_PATCH_ARGS := $(CHECKPATCH_ARGS) --patch
CHECKPATCH_FILE_ARGS := $(CHECKPATCH_ARGS) --file --no-patch
checkpatch-pre-req:
@echo " CHECKPATCH"
ifndef CHECKPATCH
$(error "Environment variable CHECKPATCH must point to Linux kernels checkpatch script")
else
ifeq (,$(wildcard ${CHECKPATCH}))
$(error "CHECKPATCH points to the incorrect file")
endif
endif
checkpatch-modified-patch: checkpatch-pre-req
${VPREFIX}git diff | ${CHECKPATCH} $(CHECKPATCH_PATCH_ARGS) - || true
checkpatch-modified-file: checkpatch-pre-req
${VPREFIX}${CHECKPATCH} $(CHECKPATCH_FILE_ARGS) $(shell git diff --name-only)
checkpatch-last-commit-patch: checkpatch-pre-req
${VPREFIX}git diff HEAD^ | ${CHECKPATCH} $(CHECKPATCH_PATCH_ARGS) - || true
checkpatch-last-commit-file: checkpatch-pre-req
${VPREFIX}${CHECKPATCH} $(CHECKPATCH_FILE_ARGS) $(shell git diff --name-only HEAD^)
checkpatch-base-commit-patch: checkpatch-pre-req
ifndef BASE_COMMIT
$(error "Environment variable BASE_COMMIT must contain a valid commit")
endif
${VPREFIX}git diff $(BASE_COMMIT) | ${CHECKPATCH} $(CHECKPATCH_PATCH_ARGS) - || true
checkpatch-base-commit-file: checkpatch-pre-req
ifndef BASE_COMMIT
$(error "Environment variable BASE_COMMIT must contain a valid commit")
endif
${VPREFIX}${CHECKPATCH} $(CHECKPATCH_FILE_ARGS) $(shell git diff --name-only ${BASE_COMMIT})
checkpatch-all-files: checkpatch-pre-req
${VPREFIX}${CHECKPATCH} $(CHECKPATCH_FILE_ARGS) $(shell git ls-files)
distclean: clean
copy_export: build
mkdir -p $(DESTDIR)$(sbindir) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir)
cp config.mk $(DESTDIR)/$(includedir)/optee_client_config.mk
cp -d ${O}/libteec/libteec.so* $(DESTDIR)$(libdir)
cp -d ${O}/libteec/libteec.a $(DESTDIR)$(libdir)
cp ${O}/tee-supplicant/tee-supplicant $(DESTDIR)$(sbindir)
cp libteec/include/*.h $(DESTDIR)$(includedir)
cp libckteec/include/*.h $(DESTDIR)$(includedir)
cp -d ${O}/libckteec/libckteec.so* $(DESTDIR)$(libdir)
cp -d ${O}/libckteec/libckteec.a $(DESTDIR)$(libdir)
ifeq ($(WITH_TEEACL),1)
cp libteeacl/include/*.h $(DESTDIR)$(includedir)
cp -d ${O}/libteeacl/libteeacl.so* $(DESTDIR)$(libdir)
cp -d ${O}/libteeacl/libteeacl.a $(DESTDIR)$(libdir)
endif
cp libseteec/include/*.h $(DESTDIR)$(includedir)
cp -d ${O}/libseteec/libseteec.so* $(DESTDIR)$(libdir)
cp -d ${O}/libseteec/libseteec.a $(DESTDIR)$(libdir)
cp prebuilt/include/*.h $(DESTDIR)$(includedir)

View File

@@ -0,0 +1,10 @@
# OP-TEE Client API
This git contains source code for the non-secure side implementation of the
OP-TEE project making up the client library and tee-supplicant.
All official OP-TEE documentation has moved to http://optee.readthedocs.io. The
information that used to be here in this git can be found under [optee_client].
// OP-TEE core maintainers
[optee_client]: https://optee.readthedocs.io/en/latest/building/gits/optee_client.html

View File

@@ -0,0 +1,21 @@
# Dockerfile for CI image used in ../.github/workflows/ci.yml
FROM debian:bullseye-slim
MAINTAINER Jerome Forissier <jerome.forissier@linaro.org>
ENV LANG=C.UTF-8
RUN dpkg --add-architecture armhf
RUN dpkg --add-architecture arm64
RUN apt update
RUN apt upgrade -y
RUN apt install -y \
cmake \
dpkg-dev \
gcc-aarch64-linux-gnu \
gcc-arm-linux-gnueabihf \
make \
pkg-config \
uuid-dev:armhf \
uuid-dev:arm64

View File

@@ -0,0 +1,30 @@
# Dockerfile for CI image used in ../.github/workflows/ci.yml
FROM ubuntu:22.04
MAINTAINER Jerome Forissier <jerome.forissier@linaro.org>
ENV LANG=C.UTF-8
RUN dpkg --add-architecture armhf
RUN dpkg --add-architecture arm64
RUN echo 'deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse' > /etc/apt/sources.list
RUN echo 'deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse' >> /etc/apt/sources.list
RUN echo 'deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse' >> /etc/apt/sources.list
RUN echo 'deb [arch=amd64] http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse' >> /etc/apt/sources.list
RUN echo 'deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe multiverse' >> /etc/apt/sources.list
RUN echo 'deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe multiverse' >> /etc/apt/sources.list
RUN echo 'deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted universe multiverse' >> /etc/apt/sources.list
RUN echo 'deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse' >> /etc/apt/sources.list
RUN apt update
RUN apt upgrade -y
RUN apt install -y \
cmake \
dpkg-dev \
gcc-aarch64-linux-gnu \
gcc-arm-linux-gnueabihf \
make \
pkg-config \
uuid-dev:armhf \
uuid-dev:arm64

View File

@@ -0,0 +1,73 @@
#########################################################################
# Public variables #
# Developers may override these values when calling the makefile, #
# as for example #
# CFG_TEE_CLIENT_LOG_LEVEL=1 make #
# Note: #
# Please do not use export to declare the variables, so that to avoid #
# compiling problem for android platform #
#########################################################################
# CFG_TEE_CLIENT_LOG_LEVEL
# Client (User Non Secure) log level
# Supported values: 0 (no traces) to 4 (all traces)
CFG_TEE_CLIENT_LOG_LEVEL?=1
# CFG_TEE_SUPP_LOG_LEVEL
# Supplicant log level
# Supported values: 0 (no traces) to 4 (all traces)
CFG_TEE_SUPP_LOG_LEVEL?=1
# CFG_TEE_FS_PARENT_PATH
# Path to folder that will contain TEE filesystem.
# This folder can be created with the required permission in an init
# script during boot, else it will be created by the tee-supplicant on
# first REE FS access.
CFG_TEE_FS_PARENT_PATH ?= /var/lib/tee
# CFG_TEE_CLIENT_LOG_FILE
# The location of the client log file when logging to file is enabled.
CFG_TEE_CLIENT_LOG_FILE ?= $(CFG_TEE_FS_PARENT_PATH)/teec.log
# CFG_TEE_CLIENT_LOAD_PATH
# Colon-separated list of paths where tee-supplicant loads TAs from.
# For example: CFG_TEE_CLIENT_LOAD_PATH ?= /lib:/vendor/lib
# Note that the TA files are typically in a sub-directory (see the
# --ta-dir option).
CFG_TEE_CLIENT_LOAD_PATH ?= /lib
# CFG_TEE_SUPP_PLUGINS
# Enable (y) or disable (n) TEE supplicant plugin support
CFG_TEE_SUPP_PLUGINS ?= y
# CFG_TEE_PLUGIN_LOAD_PATH
# The location of the user plugins
CFG_TEE_PLUGIN_LOAD_PATH ?= /usr/lib/tee-supplicant/plugins/
# CFG_GP_SOCKETS
# Enable Global Platform Sockets support
CFG_GP_SOCKETS ?= y
# CFG_TA_GPROF_SUPPORT
# Enable dumping gprof data, not used unless secure world decides
# to dump something
CFG_TA_GPROF_SUPPORT ?= y
# CFG_FTRACE_SUPPORT
# Enable dumping ftrace data, not used unless secure world decides
# to dump something
CFG_FTRACE_SUPPORT ?= y
# Default output directory.
# May be absolute, or relative to the optee_client source directory.
O ?= out
# To be used instead of $(O) in sub-directories
OO := $(if $(filter /%,$(O)),$(O),$(CURDIR)/../$(O))
#########################################################################
# Private Values #
#########################################################################
# Check that settings are coherent.

View File

@@ -0,0 +1,37 @@
#########################################################################
# COMMON COMPILATION FLAGS #
#########################################################################
CROSS_COMPILE ?= arm-linux-gnueabihf-
CC ?= $(CROSS_COMPILE)gcc
AR ?= $(CROSS_COMPILE)ar
PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config
C_COMPILER=$(shell readlink -f $$(which $(CC)))
override CFLAGS += -Wall -Wbad-function-cast -Wcast-align \
-Werror-implicit-function-declaration -Wextra \
-Wfloat-equal -Wformat-nonliteral -Wformat-security \
-Wformat=2 -Winit-self -Wmissing-declarations \
-Wmissing-format-attribute -Wmissing-include-dirs \
-Wmissing-noreturn -Wmissing-prototypes -Wnested-externs \
-Wpointer-arith -Wshadow -Wstrict-prototypes \
-Wswitch-default -Wwrite-strings -D_FILE_OFFSET_BITS=64
ifneq (,$(findstring gcc,$(C_COMPILER)))
override CFLAGS += -Wunsafe-loop-optimizations
endif
ifeq ($(CFG_WERROR),y)
override CFLAGS += -Werror
endif
override CFLAGS += -c -fPIC
DEBUG ?= 0
ifeq ($(DEBUG), 1)
override CFLAGS += -DDEBUG -O0 -g
endif
RM := rm -f
define rmdir
if [ -d "$(1)" ] ; then rmdir --ignore-fail-on-non-empty $(1) ; fi
endef

View File

@@ -0,0 +1,77 @@
project(ckteec
VERSION 0.1.0
LANGUAGES C)
################################################################################
# Packages
################################################################################
find_package(Threads REQUIRED)
if(NOT THREADS_FOUND)
message(FATAL_ERROR "Threads not found")
endif()
include(GNUInstallDirs)
################################################################################
# Source files
################################################################################
set(SRC
src/pkcs11_api.c
src/ck_debug.c
src/ck_helpers.c
src/invoke_ta.c
src/pkcs11_processing.c
src/pkcs11_token.c
src/serializer.c
src/serialize_ck.c
)
################################################################################
# Built library
################################################################################
add_library(ckteec ${SRC})
set_target_properties(ckteec PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
################################################################################
# Flags always set
################################################################################
target_compile_definitions(ckteec
PRIVATE -D_GNU_SOURCE
PRIVATE -DBINARY_PREFIX="LT"
)
################################################################################
# Optional flags
################################################################################
################################################################################
# Public and private header and library dependencies
################################################################################
target_include_directories(ckteec
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE src
)
target_include_directories(teec
PUBLIC include
)
target_link_libraries(ckteec
PRIVATE pthread
PRIVATE teec
PRIVATE m
)
################################################################################
# Install targets
################################################################################
install(TARGETS ckteec
DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
add_subdirectory(include)

View File

@@ -0,0 +1,78 @@
include ../flags.mk
include ../config.mk
OUT_DIR := $(OO)/libckteec
.PHONY: all libckteec clean
all: libckteec
install: libckteec
LIB_NAME := libckteec
MAJOR_VERSION := 0
MINOR_VERSION := 1
PATCH_VERSION := 0
LIB_MAJOR := $(LIB_NAME).so.$(MAJOR_VERSION)
LIB_MAJ_MIN := $(LIB_NAME).so.$(MAJOR_VERSION).$(MINOR_VERSION)
LIB_MAJ_MIN_PAT := $(LIB_NAME).so.$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION)
LIBCKTEEC_SO_LIBRARY := $(LIB_MAJ_MIN_PAT)
LIBCKTEEC_AR_LIBRARY := $(LIB_NAME).a
LIBCKTEEC_SRC_DIR := src
LIBCKTEEC_SRCS = pkcs11_api.c
LIBCKTEEC_SRCS += ck_debug.c
LIBCKTEEC_SRCS += ck_helpers.c
LIBCKTEEC_SRCS += invoke_ta.c
LIBCKTEEC_SRCS += pkcs11_processing.c
LIBCKTEEC_SRCS += pkcs11_token.c
LIBCKTEEC_SRCS += serializer.c
LIBCKTEEC_SRCS += serialize_ck.c
LIBCKTEEC_INCLUDES = ${CURDIR}/include
LIBCKTEEC_INCLUDES += ${CURDIR}/../libteec/include
LIBCKTEEC_CFLAGS := $(addprefix -I, $(LIBCKTEEC_INCLUDES)) \
$(CFLAGS) -D_GNU_SOURCE -fPIC
LIBCKTEEC_LFLAGS := $(LDFLAGS) -L$(OUT_DIR)/../libteec -lteec
LIBCKTEEC_OBJ_DIR := $(OUT_DIR)
LIBCKTEEC_OBJS := $(patsubst %.c,$(LIBCKTEEC_OBJ_DIR)/%.o, $(LIBCKTEEC_SRCS))
$(LIBCKTEEC_OBJ_DIR)/%.o: ${LIBCKTEEC_SRC_DIR}/%.c
$(VPREFIX)mkdir -p $(LIBCKTEEC_OBJ_DIR)
@echo " CC $<"
$(VPREFIX)$(CC) $(LIBCKTEEC_CFLAGS) -c $< -o $@
libckteec: $(OUT_DIR)/$(LIBCKTEEC_SO_LIBRARY)
$(OUT_DIR)/$(LIBCKTEEC_SO_LIBRARY): $(LIBCKTEEC_OBJS)
@echo " LINK $@"
$(VPREFIX)$(CC) -shared -Wl,-soname,$(LIB_MAJOR) -o $@ $+ $(LIBCKTEEC_LFLAGS)
@echo ""
libckteec: $(OUT_DIR)/$(LIBCKTEEC_AR_LIBRARY)
$(OUT_DIR)/$(LIBCKTEEC_AR_LIBRARY): $(LIBCKTEEC_OBJS)
@echo " AR $@"
$(VPREFIX)$(AR) rcs $@ $+
libckteec:
$(VPREFIX)ln -sf $(LIB_MAJ_MIN_PAT) $(OUT_DIR)/$(LIB_MAJ_MIN)
$(VPREFIX)ln -sf $(LIB_MAJ_MIN) $(OUT_DIR)/$(LIB_MAJOR)
$(VPREFIX)ln -sf $(LIB_MAJOR) $(OUT_DIR)/$(LIB_NAME).so
################################################################################
# Cleaning up configuration
################################################################################
clean:
$(RM) $(LIBCKTEEC_OBJS)
$(RM) $(OUT_DIR)/$(LIB_MAJ_MIN_PAT)
$(RM) $(OUT_DIR)/$(LIB_MAJ_MIN)
$(RM) $(OUT_DIR)/$(LIB_MAJOR)
$(RM) $(OUT_DIR)/$(LIBCKTEEC_SO_LIBRARY)
$(RM) $(OUT_DIR)/$(LIBCKTEEC_AR_LIBRARY)
$(call rmdir,$(OUT_DIR))

View File

@@ -0,0 +1,12 @@
project(libckteec-headers C)
FILE(GLOB INSTALL_HEADERS "*.h")
add_library(${PROJECT_NAME} INTERFACE)
target_include_directories(
${PROJECT_NAME}
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
$<INSTALL_INTERFACE:{CMAKE_INSTALL_INCLUDEDIR}>
)
install(FILES ${INSTALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

View File

@@ -0,0 +1,41 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2018-2020, Linaro Limited
*/
#ifndef LIBCKTEEC_CK_DEBUG_H
#define LIBCKTEEC_CK_DEBUG_H
#include <pkcs11.h>
/* Return a pointer to a string buffer of "CKR_xxx\0" return value ID */
const char *ckr2str(CK_RV id);
/* ckm2str - Return string buffer of "CKM_xxx\0" for a mechanism ID */
const char *ckm2str(CK_MECHANISM_TYPE id);
/* slot_ckf2str - Return string buffer of "CKF_xxx\0" for a slot flag */
const char *slot_ckf2str(CK_ULONG flag);
/* token_ckf2str - Return string buffer "CKF_xxx\0" for a token flag */
const char *token_ckf2str(CK_ULONG flag);
/* mecha_ckf2str - Return string buffer "CKF_xxx\0" for a mechanism flag */
const char *mecha_ckf2str(CK_ULONG flag);
/* session_ckf2str - Return string buffer "CKF_xxx\0" for a session flag */
const char *session_ckf2str(CK_ULONG flag);
/* session_cks2str - Return string buffer "CKS_xxx\0" for a session state */
const char *session_cks2str(CK_ULONG flag);
/* Return a pointer to a string buffer of "CKA_xxx\0" attribute ID */
const char *cka2str(CK_ATTRIBUTE_TYPE id);
/* Return a pointer to a string buffer of "CKO_xxx\0" object class ID */
const char *cko2str(CK_OBJECT_CLASS id);
/* Return a pointer to a string buffer of "CKK_xxx\0" key type ID */
const char *ckk2str(CK_KEY_TYPE id);
#endif /*LIBCKTEEC_CK_DEBUG_H*/

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,460 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2017-2020, Linaro Limited
*/
#include <ck_debug.h>
#include <pkcs11.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "local_utils.h"
#define CK2STR_ENTRY(id) case id: return #id
const char *ckr2str(CK_RV id)
{
switch (id) {
CK2STR_ENTRY(CKR_OK);
CK2STR_ENTRY(CKR_CANCEL);
CK2STR_ENTRY(CKR_HOST_MEMORY);
CK2STR_ENTRY(CKR_SLOT_ID_INVALID);
CK2STR_ENTRY(CKR_GENERAL_ERROR);
CK2STR_ENTRY(CKR_FUNCTION_FAILED);
CK2STR_ENTRY(CKR_ARGUMENTS_BAD);
CK2STR_ENTRY(CKR_NO_EVENT);
CK2STR_ENTRY(CKR_NEED_TO_CREATE_THREADS);
CK2STR_ENTRY(CKR_CANT_LOCK);
CK2STR_ENTRY(CKR_ATTRIBUTE_READ_ONLY);
CK2STR_ENTRY(CKR_ATTRIBUTE_SENSITIVE);
CK2STR_ENTRY(CKR_ATTRIBUTE_TYPE_INVALID);
CK2STR_ENTRY(CKR_ATTRIBUTE_VALUE_INVALID);
CK2STR_ENTRY(CKR_ACTION_PROHIBITED);
CK2STR_ENTRY(CKR_DATA_INVALID);
CK2STR_ENTRY(CKR_DATA_LEN_RANGE);
CK2STR_ENTRY(CKR_DEVICE_ERROR);
CK2STR_ENTRY(CKR_DEVICE_MEMORY);
CK2STR_ENTRY(CKR_DEVICE_REMOVED);
CK2STR_ENTRY(CKR_ENCRYPTED_DATA_INVALID);
CK2STR_ENTRY(CKR_ENCRYPTED_DATA_LEN_RANGE);
CK2STR_ENTRY(CKR_FUNCTION_CANCELED);
CK2STR_ENTRY(CKR_FUNCTION_NOT_PARALLEL);
CK2STR_ENTRY(CKR_FUNCTION_NOT_SUPPORTED);
CK2STR_ENTRY(CKR_KEY_HANDLE_INVALID);
CK2STR_ENTRY(CKR_KEY_SIZE_RANGE);
CK2STR_ENTRY(CKR_KEY_TYPE_INCONSISTENT);
CK2STR_ENTRY(CKR_KEY_NOT_NEEDED);
CK2STR_ENTRY(CKR_KEY_CHANGED);
CK2STR_ENTRY(CKR_KEY_NEEDED);
CK2STR_ENTRY(CKR_KEY_INDIGESTIBLE);
CK2STR_ENTRY(CKR_KEY_FUNCTION_NOT_PERMITTED);
CK2STR_ENTRY(CKR_KEY_NOT_WRAPPABLE);
CK2STR_ENTRY(CKR_KEY_UNEXTRACTABLE);
CK2STR_ENTRY(CKR_MECHANISM_INVALID);
CK2STR_ENTRY(CKR_MECHANISM_PARAM_INVALID);
CK2STR_ENTRY(CKR_OBJECT_HANDLE_INVALID);
CK2STR_ENTRY(CKR_OPERATION_ACTIVE);
CK2STR_ENTRY(CKR_OPERATION_NOT_INITIALIZED);
CK2STR_ENTRY(CKR_PIN_INCORRECT);
CK2STR_ENTRY(CKR_PIN_INVALID);
CK2STR_ENTRY(CKR_PIN_LEN_RANGE);
CK2STR_ENTRY(CKR_PIN_EXPIRED);
CK2STR_ENTRY(CKR_PIN_LOCKED);
CK2STR_ENTRY(CKR_SESSION_CLOSED);
CK2STR_ENTRY(CKR_SESSION_COUNT);
CK2STR_ENTRY(CKR_SESSION_HANDLE_INVALID);
CK2STR_ENTRY(CKR_SESSION_PARALLEL_NOT_SUPPORTED);
CK2STR_ENTRY(CKR_SESSION_READ_ONLY);
CK2STR_ENTRY(CKR_SESSION_EXISTS);
CK2STR_ENTRY(CKR_SESSION_READ_ONLY_EXISTS);
CK2STR_ENTRY(CKR_SESSION_READ_WRITE_SO_EXISTS);
CK2STR_ENTRY(CKR_SIGNATURE_INVALID);
CK2STR_ENTRY(CKR_SIGNATURE_LEN_RANGE);
CK2STR_ENTRY(CKR_TEMPLATE_INCOMPLETE);
CK2STR_ENTRY(CKR_TEMPLATE_INCONSISTENT);
CK2STR_ENTRY(CKR_TOKEN_NOT_PRESENT);
CK2STR_ENTRY(CKR_TOKEN_NOT_RECOGNIZED);
CK2STR_ENTRY(CKR_TOKEN_WRITE_PROTECTED);
CK2STR_ENTRY(CKR_UNWRAPPING_KEY_HANDLE_INVALID);
CK2STR_ENTRY(CKR_UNWRAPPING_KEY_SIZE_RANGE);
CK2STR_ENTRY(CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT);
CK2STR_ENTRY(CKR_USER_ALREADY_LOGGED_IN);
CK2STR_ENTRY(CKR_USER_NOT_LOGGED_IN);
CK2STR_ENTRY(CKR_USER_PIN_NOT_INITIALIZED);
CK2STR_ENTRY(CKR_USER_TYPE_INVALID);
CK2STR_ENTRY(CKR_USER_ANOTHER_ALREADY_LOGGED_IN);
CK2STR_ENTRY(CKR_USER_TOO_MANY_TYPES);
CK2STR_ENTRY(CKR_WRAPPED_KEY_INVALID);
CK2STR_ENTRY(CKR_WRAPPED_KEY_LEN_RANGE);
CK2STR_ENTRY(CKR_WRAPPING_KEY_HANDLE_INVALID);
CK2STR_ENTRY(CKR_WRAPPING_KEY_SIZE_RANGE);
CK2STR_ENTRY(CKR_WRAPPING_KEY_TYPE_INCONSISTENT);
CK2STR_ENTRY(CKR_RANDOM_SEED_NOT_SUPPORTED);
CK2STR_ENTRY(CKR_RANDOM_NO_RNG);
CK2STR_ENTRY(CKR_DOMAIN_PARAMS_INVALID);
CK2STR_ENTRY(CKR_CURVE_NOT_SUPPORTED);
CK2STR_ENTRY(CKR_BUFFER_TOO_SMALL);
CK2STR_ENTRY(CKR_SAVED_STATE_INVALID);
CK2STR_ENTRY(CKR_INFORMATION_SENSITIVE);
CK2STR_ENTRY(CKR_STATE_UNSAVEABLE);
CK2STR_ENTRY(CKR_CRYPTOKI_NOT_INITIALIZED);
CK2STR_ENTRY(CKR_CRYPTOKI_ALREADY_INITIALIZED);
CK2STR_ENTRY(CKR_MUTEX_BAD);
CK2STR_ENTRY(CKR_MUTEX_NOT_LOCKED);
CK2STR_ENTRY(CKR_NEW_PIN_MODE);
CK2STR_ENTRY(CKR_NEXT_OTP);
CK2STR_ENTRY(CKR_EXCEEDED_MAX_ITERATIONS);
CK2STR_ENTRY(CKR_FIPS_SELF_TEST_FAILED);
CK2STR_ENTRY(CKR_LIBRARY_LOAD_FAILED);
CK2STR_ENTRY(CKR_PIN_TOO_WEAK);
CK2STR_ENTRY(CKR_PUBLIC_KEY_INVALID);
CK2STR_ENTRY(CKR_FUNCTION_REJECTED);
default:
if (id & CKR_VENDOR_DEFINED)
return "Vendor defined";
else
return "Unknown ID";
}
}
const char *ckm2str(CK_MECHANISM_TYPE id)
{
switch (id) {
CK2STR_ENTRY(CKM_RSA_PKCS_KEY_PAIR_GEN);
CK2STR_ENTRY(CKM_RSA_PKCS);
CK2STR_ENTRY(CKM_RSA_9796);
CK2STR_ENTRY(CKM_RSA_X_509);
CK2STR_ENTRY(CKM_MD5_RSA_PKCS);
CK2STR_ENTRY(CKM_SHA1_RSA_PKCS);
CK2STR_ENTRY(CKM_RSA_PKCS_OAEP);
CK2STR_ENTRY(CKM_RSA_PKCS_PSS);
CK2STR_ENTRY(CKM_SHA1_RSA_PKCS_PSS);
CK2STR_ENTRY(CKM_SHA256_RSA_PKCS);
CK2STR_ENTRY(CKM_SHA384_RSA_PKCS);
CK2STR_ENTRY(CKM_SHA512_RSA_PKCS);
CK2STR_ENTRY(CKM_SHA256_RSA_PKCS_PSS);
CK2STR_ENTRY(CKM_SHA384_RSA_PKCS_PSS);
CK2STR_ENTRY(CKM_SHA512_RSA_PKCS_PSS);
CK2STR_ENTRY(CKM_SHA224_RSA_PKCS);
CK2STR_ENTRY(CKM_SHA224_RSA_PKCS_PSS);
CK2STR_ENTRY(CKM_SHA512_224);
CK2STR_ENTRY(CKM_SHA512_224_HMAC);
CK2STR_ENTRY(CKM_SHA512_224_HMAC_GENERAL);
CK2STR_ENTRY(CKM_SHA512_224_KEY_DERIVATION);
CK2STR_ENTRY(CKM_SHA512_256);
CK2STR_ENTRY(CKM_SHA512_256_HMAC);
CK2STR_ENTRY(CKM_SHA512_256_HMAC_GENERAL);
CK2STR_ENTRY(CKM_SHA512_256_KEY_DERIVATION);
CK2STR_ENTRY(CKM_MD5);
CK2STR_ENTRY(CKM_MD5_HMAC);
CK2STR_ENTRY(CKM_MD5_HMAC_GENERAL);
CK2STR_ENTRY(CKM_SHA_1);
CK2STR_ENTRY(CKM_SHA_1_HMAC);
CK2STR_ENTRY(CKM_SHA_1_HMAC_GENERAL);
CK2STR_ENTRY(CKM_SHA256);
CK2STR_ENTRY(CKM_SHA256_HMAC);
CK2STR_ENTRY(CKM_SHA256_HMAC_GENERAL);
CK2STR_ENTRY(CKM_SHA224);
CK2STR_ENTRY(CKM_SHA224_HMAC);
CK2STR_ENTRY(CKM_SHA224_HMAC_GENERAL);
CK2STR_ENTRY(CKM_SHA384);
CK2STR_ENTRY(CKM_SHA384_HMAC);
CK2STR_ENTRY(CKM_SHA384_HMAC_GENERAL);
CK2STR_ENTRY(CKM_SHA512);
CK2STR_ENTRY(CKM_SHA512_HMAC);
CK2STR_ENTRY(CKM_SHA512_HMAC_GENERAL);
CK2STR_ENTRY(CKM_HOTP_KEY_GEN);
CK2STR_ENTRY(CKM_HOTP);
CK2STR_ENTRY(CKM_GENERIC_SECRET_KEY_GEN);
CK2STR_ENTRY(CKM_SHA1_KEY_DERIVATION);
CK2STR_ENTRY(CKM_SHA256_KEY_DERIVATION);
CK2STR_ENTRY(CKM_SHA384_KEY_DERIVATION);
CK2STR_ENTRY(CKM_SHA512_KEY_DERIVATION);
CK2STR_ENTRY(CKM_SHA224_KEY_DERIVATION);
CK2STR_ENTRY(CKM_EC_KEY_PAIR_GEN);
CK2STR_ENTRY(CKM_ECDSA);
CK2STR_ENTRY(CKM_ECDSA_SHA1);
CK2STR_ENTRY(CKM_ECDSA_SHA224);
CK2STR_ENTRY(CKM_ECDSA_SHA256);
CK2STR_ENTRY(CKM_ECDSA_SHA384);
CK2STR_ENTRY(CKM_ECDSA_SHA512);
CK2STR_ENTRY(CKM_ECDH1_DERIVE);
CK2STR_ENTRY(CKM_ECDH1_COFACTOR_DERIVE);
CK2STR_ENTRY(CKM_ECMQV_DERIVE);
CK2STR_ENTRY(CKM_ECDH_AES_KEY_WRAP);
CK2STR_ENTRY(CKM_RSA_AES_KEY_WRAP);
CK2STR_ENTRY(CKM_AES_KEY_GEN);
CK2STR_ENTRY(CKM_AES_ECB);
CK2STR_ENTRY(CKM_AES_CBC);
CK2STR_ENTRY(CKM_AES_MAC);
CK2STR_ENTRY(CKM_AES_MAC_GENERAL);
CK2STR_ENTRY(CKM_AES_CBC_PAD);
CK2STR_ENTRY(CKM_AES_CTR);
CK2STR_ENTRY(CKM_AES_GCM);
CK2STR_ENTRY(CKM_AES_CCM);
CK2STR_ENTRY(CKM_AES_CTS);
CK2STR_ENTRY(CKM_AES_CMAC);
CK2STR_ENTRY(CKM_AES_CMAC_GENERAL);
CK2STR_ENTRY(CKM_AES_XCBC_MAC);
CK2STR_ENTRY(CKM_AES_XCBC_MAC_96);
CK2STR_ENTRY(CKM_AES_GMAC);
CK2STR_ENTRY(CKM_DES3_ECB_ENCRYPT_DATA);
CK2STR_ENTRY(CKM_DES3_CBC_ENCRYPT_DATA);
CK2STR_ENTRY(CKM_AES_ECB_ENCRYPT_DATA);
CK2STR_ENTRY(CKM_AES_CBC_ENCRYPT_DATA);
CK2STR_ENTRY(CKM_AES_KEY_WRAP);
CK2STR_ENTRY(CKM_AES_KEY_WRAP_PAD);
default:
if (id & CKM_VENDOR_DEFINED)
return "Vendor defined";
else
return "Unknown ID";
}
}
const char *slot_ckf2str(CK_ULONG flag)
{
switch (flag) {
CK2STR_ENTRY(CKF_TOKEN_PRESENT);
CK2STR_ENTRY(CKF_REMOVABLE_DEVICE);
CK2STR_ENTRY(CKF_HW_SLOT);
default:
return "Unknown flag";
}
}
const char *token_ckf2str(CK_ULONG flag)
{
switch (flag) {
CK2STR_ENTRY(CKF_RNG);
CK2STR_ENTRY(CKF_WRITE_PROTECTED);
CK2STR_ENTRY(CKF_LOGIN_REQUIRED);
CK2STR_ENTRY(CKF_USER_PIN_INITIALIZED);
CK2STR_ENTRY(CKF_RESTORE_KEY_NOT_NEEDED);
CK2STR_ENTRY(CKF_CLOCK_ON_TOKEN);
CK2STR_ENTRY(CKF_PROTECTED_AUTHENTICATION_PATH);
CK2STR_ENTRY(CKF_DUAL_CRYPTO_OPERATIONS);
CK2STR_ENTRY(CKF_TOKEN_INITIALIZED);
CK2STR_ENTRY(CKF_SECONDARY_AUTHENTICATION);
CK2STR_ENTRY(CKF_USER_PIN_COUNT_LOW);
CK2STR_ENTRY(CKF_USER_PIN_FINAL_TRY);
CK2STR_ENTRY(CKF_USER_PIN_LOCKED);
CK2STR_ENTRY(CKF_USER_PIN_TO_BE_CHANGED);
CK2STR_ENTRY(CKF_SO_PIN_COUNT_LOW);
CK2STR_ENTRY(CKF_SO_PIN_FINAL_TRY);
CK2STR_ENTRY(CKF_SO_PIN_LOCKED);
CK2STR_ENTRY(CKF_SO_PIN_TO_BE_CHANGED);
CK2STR_ENTRY(CKF_ERROR_STATE);
default:
return "Unknown flag";
}
}
const char *mecha_ckf2str(CK_ULONG flag)
{
switch (flag) {
CK2STR_ENTRY(CKF_HW);
CK2STR_ENTRY(CKF_ENCRYPT);
CK2STR_ENTRY(CKF_DECRYPT);
CK2STR_ENTRY(CKF_DIGEST);
CK2STR_ENTRY(CKF_SIGN);
CK2STR_ENTRY(CKF_SIGN_RECOVER);
CK2STR_ENTRY(CKF_VERIFY);
CK2STR_ENTRY(CKF_VERIFY_RECOVER);
CK2STR_ENTRY(CKF_GENERATE);
CK2STR_ENTRY(CKF_GENERATE_KEY_PAIR);
CK2STR_ENTRY(CKF_WRAP);
CK2STR_ENTRY(CKF_UNWRAP);
CK2STR_ENTRY(CKF_DERIVE);
CK2STR_ENTRY(CKF_EC_F_P);
CK2STR_ENTRY(CKF_EC_F_2M);
CK2STR_ENTRY(CKF_EC_ECPARAMETERS);
CK2STR_ENTRY(CKF_EC_NAMEDCURVE);
CK2STR_ENTRY(CKF_EC_UNCOMPRESS);
CK2STR_ENTRY(CKF_EC_COMPRESS);
CK2STR_ENTRY(CKF_EXTENSION);
default:
return "Unknown flag";
}
}
const char *session_ckf2str(CK_ULONG flag)
{
switch (flag) {
CK2STR_ENTRY(CKF_RW_SESSION);
CK2STR_ENTRY(CKF_SERIAL_SESSION);
default:
return "Unknown flag";
}
}
const char *session_cks2str(CK_ULONG flag)
{
switch (flag) {
CK2STR_ENTRY(CKS_RO_PUBLIC_SESSION);
CK2STR_ENTRY(CKS_RO_USER_FUNCTIONS);
CK2STR_ENTRY(CKS_RW_PUBLIC_SESSION);
CK2STR_ENTRY(CKS_RW_USER_FUNCTIONS);
CK2STR_ENTRY(CKS_RW_SO_FUNCTIONS);
default:
return "Unknown flag";
}
}
const char *cka2str(CK_ATTRIBUTE_TYPE id)
{
switch (id) {
/* Standard CK attributes */
CK2STR_ENTRY(CKA_CLASS);
CK2STR_ENTRY(CKA_TOKEN);
CK2STR_ENTRY(CKA_PRIVATE);
CK2STR_ENTRY(CKA_LABEL);
CK2STR_ENTRY(CKA_APPLICATION);
CK2STR_ENTRY(CKA_VALUE);
CK2STR_ENTRY(CKA_OBJECT_ID);
CK2STR_ENTRY(CKA_CERTIFICATE_TYPE);
CK2STR_ENTRY(CKA_ISSUER);
CK2STR_ENTRY(CKA_SERIAL_NUMBER);
CK2STR_ENTRY(CKA_AC_ISSUER);
CK2STR_ENTRY(CKA_OWNER);
CK2STR_ENTRY(CKA_ATTR_TYPES);
CK2STR_ENTRY(CKA_TRUSTED);
CK2STR_ENTRY(CKA_CERTIFICATE_CATEGORY);
CK2STR_ENTRY(CKA_JAVA_MIDP_SECURITY_DOMAIN);
CK2STR_ENTRY(CKA_URL);
CK2STR_ENTRY(CKA_HASH_OF_SUBJECT_PUBLIC_KEY);
CK2STR_ENTRY(CKA_HASH_OF_ISSUER_PUBLIC_KEY);
CK2STR_ENTRY(CKA_NAME_HASH_ALGORITHM);
CK2STR_ENTRY(CKA_CHECK_VALUE);
CK2STR_ENTRY(CKA_KEY_TYPE);
CK2STR_ENTRY(CKA_SUBJECT);
CK2STR_ENTRY(CKA_ID);
CK2STR_ENTRY(CKA_SENSITIVE);
CK2STR_ENTRY(CKA_ENCRYPT);
CK2STR_ENTRY(CKA_DECRYPT);
CK2STR_ENTRY(CKA_WRAP);
CK2STR_ENTRY(CKA_UNWRAP);
CK2STR_ENTRY(CKA_SIGN);
CK2STR_ENTRY(CKA_SIGN_RECOVER);
CK2STR_ENTRY(CKA_VERIFY);
CK2STR_ENTRY(CKA_VERIFY_RECOVER);
CK2STR_ENTRY(CKA_DERIVE);
CK2STR_ENTRY(CKA_START_DATE);
CK2STR_ENTRY(CKA_END_DATE);
CK2STR_ENTRY(CKA_MODULUS);
CK2STR_ENTRY(CKA_MODULUS_BITS);
CK2STR_ENTRY(CKA_PUBLIC_EXPONENT);
CK2STR_ENTRY(CKA_PRIVATE_EXPONENT);
CK2STR_ENTRY(CKA_PRIME_1);
CK2STR_ENTRY(CKA_PRIME_2);
CK2STR_ENTRY(CKA_EXPONENT_1);
CK2STR_ENTRY(CKA_EXPONENT_2);
CK2STR_ENTRY(CKA_COEFFICIENT);
CK2STR_ENTRY(CKA_PUBLIC_KEY_INFO);
CK2STR_ENTRY(CKA_PRIME);
CK2STR_ENTRY(CKA_SUBPRIME);
CK2STR_ENTRY(CKA_BASE);
CK2STR_ENTRY(CKA_PRIME_BITS);
CK2STR_ENTRY(CKA_SUBPRIME_BITS);
CK2STR_ENTRY(CKA_VALUE_BITS);
CK2STR_ENTRY(CKA_VALUE_LEN);
CK2STR_ENTRY(CKA_EXTRACTABLE);
CK2STR_ENTRY(CKA_LOCAL);
CK2STR_ENTRY(CKA_NEVER_EXTRACTABLE);
CK2STR_ENTRY(CKA_ALWAYS_SENSITIVE);
CK2STR_ENTRY(CKA_KEY_GEN_MECHANISM);
CK2STR_ENTRY(CKA_MODIFIABLE);
CK2STR_ENTRY(CKA_COPYABLE);
CK2STR_ENTRY(CKA_DESTROYABLE);
CK2STR_ENTRY(CKA_EC_PARAMS);
CK2STR_ENTRY(CKA_EC_POINT);
CK2STR_ENTRY(CKA_ALWAYS_AUTHENTICATE);
CK2STR_ENTRY(CKA_WRAP_WITH_TRUSTED);
CK2STR_ENTRY(CKA_WRAP_TEMPLATE);
CK2STR_ENTRY(CKA_UNWRAP_TEMPLATE);
CK2STR_ENTRY(CKA_DERIVE_TEMPLATE);
CK2STR_ENTRY(CKA_OTP_FORMAT);
CK2STR_ENTRY(CKA_OTP_LENGTH);
CK2STR_ENTRY(CKA_OTP_TIME_INTERVAL);
CK2STR_ENTRY(CKA_OTP_USER_FRIENDLY_MODE);
CK2STR_ENTRY(CKA_OTP_CHALLENGE_REQUIREMENT);
CK2STR_ENTRY(CKA_OTP_TIME_REQUIREMENT);
CK2STR_ENTRY(CKA_OTP_COUNTER_REQUIREMENT);
CK2STR_ENTRY(CKA_OTP_PIN_REQUIREMENT);
CK2STR_ENTRY(CKA_OTP_COUNTER);
CK2STR_ENTRY(CKA_OTP_TIME);
CK2STR_ENTRY(CKA_OTP_USER_IDENTIFIER);
CK2STR_ENTRY(CKA_OTP_SERVICE_IDENTIFIER);
CK2STR_ENTRY(CKA_OTP_SERVICE_LOGO);
CK2STR_ENTRY(CKA_OTP_SERVICE_LOGO_TYPE);
CK2STR_ENTRY(CKA_GOSTR3410_PARAMS);
CK2STR_ENTRY(CKA_GOSTR3411_PARAMS);
CK2STR_ENTRY(CKA_GOST28147_PARAMS);
CK2STR_ENTRY(CKA_HW_FEATURE_TYPE);
CK2STR_ENTRY(CKA_RESET_ON_INIT);
CK2STR_ENTRY(CKA_HAS_RESET);
CK2STR_ENTRY(CKA_PIXEL_X);
CK2STR_ENTRY(CKA_PIXEL_Y);
CK2STR_ENTRY(CKA_RESOLUTION);
CK2STR_ENTRY(CKA_CHAR_ROWS);
CK2STR_ENTRY(CKA_CHAR_COLUMNS);
CK2STR_ENTRY(CKA_COLOR);
CK2STR_ENTRY(CKA_BITS_PER_PIXEL);
CK2STR_ENTRY(CKA_CHAR_SETS);
CK2STR_ENTRY(CKA_ENCODING_METHODS);
CK2STR_ENTRY(CKA_MIME_TYPES);
CK2STR_ENTRY(CKA_MECHANISM_TYPE);
CK2STR_ENTRY(CKA_REQUIRED_CMS_ATTRIBUTES);
CK2STR_ENTRY(CKA_DEFAULT_CMS_ATTRIBUTES);
CK2STR_ENTRY(CKA_SUPPORTED_CMS_ATTRIBUTES);
CK2STR_ENTRY(CKA_ALLOWED_MECHANISMS);
CK2STR_ENTRY(CKA_VENDOR_DEFINED);
default:
if (id & CKA_VENDOR_DEFINED)
return "Vendor defined";
else
return "Unknown ID";
}
}
const char *cko2str(CK_OBJECT_CLASS id)
{
switch (id) {
CK2STR_ENTRY(CKO_DATA);
CK2STR_ENTRY(CKO_CERTIFICATE);
CK2STR_ENTRY(CKO_PUBLIC_KEY);
CK2STR_ENTRY(CKO_PRIVATE_KEY);
CK2STR_ENTRY(CKO_SECRET_KEY);
CK2STR_ENTRY(CKO_HW_FEATURE);
CK2STR_ENTRY(CKO_DOMAIN_PARAMETERS);
CK2STR_ENTRY(CKO_MECHANISM);
CK2STR_ENTRY(CKO_OTP_KEY);
CK2STR_ENTRY(CKO_VENDOR_DEFINED);
default:
return "Unknown";
}
}
const char *ckk2str(CK_KEY_TYPE id)
{
switch (id) {
CK2STR_ENTRY(CKK_RSA);
CK2STR_ENTRY(CKK_DSA);
CK2STR_ENTRY(CKK_DH);
CK2STR_ENTRY(CKK_ECDSA);
CK2STR_ENTRY(CKK_GENERIC_SECRET);
CK2STR_ENTRY(CKK_DES3);
CK2STR_ENTRY(CKK_AES);
CK2STR_ENTRY(CKK_HOTP);
CK2STR_ENTRY(CKK_MD5_HMAC);
CK2STR_ENTRY(CKK_SHA_1_HMAC);
CK2STR_ENTRY(CKK_SHA256_HMAC);
CK2STR_ENTRY(CKK_SHA384_HMAC);
CK2STR_ENTRY(CKK_SHA512_HMAC);
CK2STR_ENTRY(CKK_SHA224_HMAC);
CK2STR_ENTRY(CKK_VENDOR_DEFINED);
default:
return "Unknown";
}
}

View File

@@ -0,0 +1,29 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2020, Linaro Limited
*/
#include <assert.h>
#include <ck_debug.h>
#include <pkcs11.h>
#include <stdio.h>
#include <tee_client_api.h>
#include "ck_helpers.h"
#ifdef DEBUG
void ckteec_assert_expected_rv(const char *function, CK_RV rv,
const CK_RV *expected_rv, size_t expected_count)
{
size_t n = 0;
for (n = 0; n < expected_count; n++)
if (rv == expected_rv[n])
return;
fprintf(stderr, "libckteec: %s: unexpected return value 0x%lx (%s)\n",
function, rv, ckr2str(rv));
assert(0);
}
#endif

View File

@@ -0,0 +1,29 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2020, Linaro Limited
*/
#ifndef LIBCKTEEC_CK_HELPERS_H
#define LIBCKTEEC_CK_HELPERS_H
#include <pkcs11.h>
#include <tee_client_api.h>
#include "local_utils.h"
#ifdef DEBUG
#define ASSERT_CK_RV(_rv, ...) \
do { \
const CK_RV ref[] = { __VA_ARGS__ }; \
size_t count = ARRAY_SIZE(ref); \
\
ckteec_assert_expected_rv(__func__, (_rv), ref, count); \
} while (0)
void ckteec_assert_expected_rv(const char *function, CK_RV rv,
const CK_RV *expected_rv, size_t expected_count);
#else
#define ASSERT_CK_RV(_rv, ...) (void)0
#endif /*DEBUG*/
#endif /*LIBCKTEEC_CK_HELPERS_H*/

View File

@@ -0,0 +1,360 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2017-2020, Linaro Limited
*/
/* BINARY_PREFIX is expected by teec_trace.h */
#ifndef BINARY_PREFIX
#define BINARY_PREFIX "ckteec"
#endif
#include <errno.h>
#include <inttypes.h>
#include <pkcs11.h>
#include <pkcs11_ta.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <tee_client_api.h>
#include <teec_trace.h>
#include <unistd.h>
#include "ck_helpers.h"
#include "invoke_ta.h"
#include "local_utils.h"
struct ta_context {
pthread_mutex_t init_mutex;
bool initiated;
TEEC_Context context;
TEEC_Session session;
};
static struct ta_context ta_ctx = {
.init_mutex = PTHREAD_MUTEX_INITIALIZER,
};
bool ckteec_invoke_initiated(void)
{
return ta_ctx.initiated;
}
TEEC_SharedMemory *ckteec_alloc_shm(size_t size, enum ckteec_shm_dir dir)
{
TEEC_SharedMemory *shm = NULL;
switch (dir) {
case CKTEEC_SHM_IN:
case CKTEEC_SHM_OUT:
case CKTEEC_SHM_INOUT:
break;
default:
return NULL;
}
shm = calloc(1, sizeof(TEEC_SharedMemory));
if (!shm)
return NULL;
shm->size = size;
if (dir == CKTEEC_SHM_IN || dir == CKTEEC_SHM_INOUT)
shm->flags |= TEEC_MEM_INPUT;
if (dir == CKTEEC_SHM_OUT || dir == CKTEEC_SHM_INOUT)
shm->flags |= TEEC_MEM_OUTPUT;
if (TEEC_AllocateSharedMemory(&ta_ctx.context, shm)) {
free(shm);
return NULL;
}
return shm;
}
TEEC_SharedMemory *ckteec_register_shm(void *buffer, size_t size,
enum ckteec_shm_dir dir)
{
TEEC_SharedMemory *shm = NULL;
switch (dir) {
case CKTEEC_SHM_IN:
case CKTEEC_SHM_OUT:
case CKTEEC_SHM_INOUT:
break;
default:
return NULL;
}
shm = calloc(1, sizeof(TEEC_SharedMemory));
if (!shm)
return NULL;
shm->buffer = buffer;
shm->size = size;
if (dir == CKTEEC_SHM_IN || dir == CKTEEC_SHM_INOUT)
shm->flags |= TEEC_MEM_INPUT;
if (dir == CKTEEC_SHM_OUT || dir == CKTEEC_SHM_INOUT)
shm->flags |= TEEC_MEM_OUTPUT;
if (TEEC_RegisterSharedMemory(&ta_ctx.context, shm)) {
free(shm);
return NULL;
}
return shm;
}
void ckteec_free_shm(TEEC_SharedMemory *shm)
{
TEEC_ReleaseSharedMemory(shm);
free(shm);
}
static bool is_output_shm(TEEC_SharedMemory *shm)
{
return shm && (shm->flags & TEEC_MEM_OUTPUT);
}
CK_RV ckteec_invoke_ta(unsigned long cmd, TEEC_SharedMemory *ctrl,
TEEC_SharedMemory *io1,
TEEC_SharedMemory *io2, size_t *out2_size,
TEEC_SharedMemory *io3, size_t *out3_size)
{
uint32_t command = (uint32_t)cmd;
TEEC_Operation op;
uint32_t origin = 0;
TEEC_Result res = TEEC_ERROR_GENERIC;
uint32_t ta_rc = PKCS11_CKR_GENERAL_ERROR;
if ((is_output_shm(io2) && !out2_size) ||
(is_output_shm(io3) && !out3_size))
return CKR_ARGUMENTS_BAD;
memset(&op, 0, sizeof(op));
if (ctrl && !(ctrl->flags & TEEC_MEM_INPUT &&
ctrl->flags & TEEC_MEM_OUTPUT))
return CKR_ARGUMENTS_BAD;
if (ctrl) {
op.paramTypes |= TEEC_PARAM_TYPES(TEEC_MEMREF_WHOLE, 0, 0, 0);
op.params[0].memref.parent = ctrl;
} else {
/* TA mandates param#0 as in/out memref for output status */
op.paramTypes |= TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT,
0, 0, 0);
op.params[0].tmpref.buffer = &ta_rc;
op.params[0].tmpref.size = sizeof(ta_rc);
}
if (io1) {
op.paramTypes |= TEEC_PARAM_TYPES(0, TEEC_MEMREF_WHOLE, 0, 0);
op.params[1].memref.parent = io1;
}
if (io2) {
op.paramTypes |= TEEC_PARAM_TYPES(0, 0, TEEC_MEMREF_WHOLE, 0);
op.params[2].memref.parent = io2;
}
if (io3) {
op.paramTypes |= TEEC_PARAM_TYPES(0, 0, 0, TEEC_MEMREF_WHOLE);
op.params[3].memref.parent = io3;
}
res = TEEC_InvokeCommand(&ta_ctx.session, command, &op, &origin);
switch (res) {
case TEEC_SUCCESS:
/* Get PKCS11 TA return value from ctrl buffer */
if (ctrl) {
if (op.params[0].memref.size == sizeof(ta_rc))
memcpy(&ta_rc, ctrl->buffer, sizeof(ta_rc));
} else {
if (op.params[0].tmpref.size != sizeof(ta_rc))
ta_rc = PKCS11_CKR_GENERAL_ERROR;
}
break;
case TEEC_ERROR_SHORT_BUFFER:
ta_rc = CKR_BUFFER_TOO_SMALL;
break;
case TEEC_ERROR_OUT_OF_MEMORY:
return CKR_DEVICE_MEMORY;
default:
return CKR_GENERAL_ERROR;
}
if (ta_rc == CKR_OK || ta_rc == CKR_BUFFER_TOO_SMALL) {
if (is_output_shm(io2))
*out2_size = op.params[2].memref.size;
if (is_output_shm(io3))
*out3_size = op.params[3].memref.size;
}
return ta_rc;
}
static CK_RV ping_ta(void)
{
TEEC_Operation op = { 0 };
uint32_t origin = 0;
TEEC_Result res = TEEC_SUCCESS;
uint32_t ta_version[3] = { 0 };
uint32_t status = 0;
memset(&op, 0, sizeof(op));
op.params[0].tmpref.buffer = &status;
op.params[0].tmpref.size = sizeof(status);
op.params[2].tmpref.buffer = ta_version;
op.params[2].tmpref.size = sizeof(ta_version);
op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, TEEC_NONE,
TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
res = TEEC_InvokeCommand(&ta_ctx.session, PKCS11_CMD_PING, &op,
&origin);
if (res != TEEC_SUCCESS ||
origin != TEEC_ORIGIN_TRUSTED_APP ||
op.params[0].tmpref.size != sizeof(status) ||
status != PKCS11_CKR_OK)
return CKR_DEVICE_ERROR;
if (ta_version[0] != PKCS11_TA_VERSION_MAJOR &&
ta_version[1] > PKCS11_TA_VERSION_MINOR) {
EMSG("PKCS11 TA version mismatch: %"PRIu32".%"PRIu32".%"PRIu32,
ta_version[0], ta_version[1], ta_version[2]);
return CKR_DEVICE_ERROR;
}
DMSG("PKCS11 TA version %"PRIu32".%"PRIu32".%"PRIu32,
ta_version[0], ta_version[1], ta_version[2]);
return CKR_OK;
}
CK_RV ckteec_invoke_init(void)
{
TEEC_UUID uuid = PKCS11_TA_UUID;
uint32_t origin = 0;
TEEC_Result res = TEEC_SUCCESS;
CK_RV rv = CKR_CRYPTOKI_ALREADY_INITIALIZED;
const char *login_type_env = NULL;
const char *login_gid_env = NULL;
uint32_t login_method = TEEC_LOGIN_PUBLIC;
void *login_data = NULL;
gid_t login_gid = 0;
unsigned long tmpconv = 0;
char *endp = NULL;
int e = 0;
login_type_env = getenv("CKTEEC_LOGIN_TYPE");
if (login_type_env) {
if (strcmp(login_type_env, "public") == 0) {
login_method = TEEC_LOGIN_PUBLIC;
} else if (strcmp(login_type_env, "user") == 0) {
login_method = TEEC_LOGIN_USER;
} else if (strcmp(login_type_env, "group") == 0) {
login_gid_env = getenv("CKTEEC_LOGIN_GID");
if (!login_gid_env || !strlen(login_gid_env)) {
EMSG("missing CKTEEC_LOGIN_GID");
rv = CKR_ARGUMENTS_BAD;
goto out;
}
login_method = TEEC_LOGIN_GROUP;
tmpconv = strtoul(login_gid_env, &endp, 10);
if (errno == ERANGE || tmpconv > (gid_t)-1 ||
(login_gid_env + strlen(login_gid_env) != endp)) {
EMSG("failed to convert CKTEEC_LOGIN_GID");
rv = CKR_ARGUMENTS_BAD;
goto out;
}
login_gid = (gid_t)tmpconv;
login_data = &login_gid;
} else {
EMSG("invalid value for CKTEEC_LOGIN_TYPE");
rv = CKR_ARGUMENTS_BAD;
goto out;
}
}
e = pthread_mutex_lock(&ta_ctx.init_mutex);
if (e)
return CKR_CANT_LOCK;
if (ta_ctx.initiated) {
rv = CKR_CRYPTOKI_ALREADY_INITIALIZED;
goto out;
}
res = TEEC_InitializeContext(NULL, &ta_ctx.context);
if (res != TEEC_SUCCESS) {
EMSG("TEEC init context failed\n");
rv = CKR_DEVICE_ERROR;
goto out;
}
res = TEEC_OpenSession(&ta_ctx.context, &ta_ctx.session, &uuid,
login_method, login_data, NULL, &origin);
if (res != TEEC_SUCCESS) {
EMSG("TEEC open session failed %x from %d\n", res, origin);
TEEC_FinalizeContext(&ta_ctx.context);
rv = CKR_DEVICE_ERROR;
goto out;
}
rv = ping_ta();
if (rv == CKR_OK) {
ta_ctx.initiated = true;
} else {
TEEC_CloseSession(&ta_ctx.session);
TEEC_FinalizeContext(&ta_ctx.context);
}
out:
e = pthread_mutex_unlock(&ta_ctx.init_mutex);
if (e) {
EMSG("pthread_mutex_unlock: %s", strerror(e));
EMSG("terminating...");
exit(EXIT_FAILURE);
}
return rv;
}
CK_RV ckteec_invoke_terminate(void)
{
CK_RV rv = CKR_CRYPTOKI_NOT_INITIALIZED;
int e = 0;
e = pthread_mutex_lock(&ta_ctx.init_mutex);
if (e) {
EMSG("pthread_mutex_lock: %s", strerror(e));
EMSG("terminating...");
exit(EXIT_FAILURE);
}
if (!ta_ctx.initiated)
goto out;
ta_ctx.initiated = false;
TEEC_CloseSession(&ta_ctx.session);
TEEC_FinalizeContext(&ta_ctx.context);
rv = CKR_OK;
out:
e = pthread_mutex_unlock(&ta_ctx.init_mutex);
if (e) {
EMSG("pthread_mutex_unlock: %s", strerror(e));
EMSG("terminating...");
exit(EXIT_FAILURE);
}
return rv;
}

View File

@@ -0,0 +1,103 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 20187-2020, Linaro Limited
*/
#ifndef LIBCKTEEC_INVOKE_TA_H
#define LIBCKTEEC_INVOKE_TA_H
#include <pkcs11.h>
#include <tee_client_api.h>
enum ckteec_shm_dir {
CKTEEC_SHM_IN,
CKTEEC_SHM_OUT,
CKTEEC_SHM_INOUT,
};
/**
* ckteec_alloc_shm - Allocate memory in the TEE SHM (in, out or in/out)
*
* @size - Allocated size in byte
* @dir - Data direction used for the shared memory
*
* Return a shm reference or NULL on failure.
*/
TEEC_SharedMemory *ckteec_alloc_shm(size_t size, enum ckteec_shm_dir dir);
/**
* ckteec_register_shm - Register memory as shared in the TEE SHM
*
* @buffer - Base address of buffer to register
* @size - Allocated size in byte
* @dir - Data direction used for the shared memory
*
* Return a shm reference or NULL on failure.
*/
TEEC_SharedMemory *ckteec_register_shm(void *buffer, size_t size,
enum ckteec_shm_dir dir);
/**
* ckteec_free_shm - Release allocated or registered emory in the TEE SHM
*
* @shm - memory reference
*/
void ckteec_free_shm(TEEC_SharedMemory *shm);
/**
* ckteec_invoke_ta - Invoke PKCS11 TA for a target request through the TEE
*
* @cmd - PKCS11 TA command ID
* @ctrl - shared memory with serialized request input arguments or NULL
* @io1 - In memory buffer argument #1 for the command or NULL
* @io2 - In and/or out memory buffer argument #2 for the command or NULL
* @out2_size - Reference to @io2 output buffer size or NULL if not applicable
* @io3 - In and/or out memory buffer argument #3 for the command or NULL
* @out3_size - Reference to @io3 output buffer size or NULL if not applicable
*
* Return a CR_RV compliant return value
*/
CK_RV ckteec_invoke_ta(unsigned long cmd, TEEC_SharedMemory *ctrl,
TEEC_SharedMemory *io1,
TEEC_SharedMemory *io2, size_t *out2_size,
TEEC_SharedMemory *io3, size_t *out3_size);
static inline CK_RV ckteec_invoke_ctrl(unsigned long cmd,
TEEC_SharedMemory *ctrl)
{
return ckteec_invoke_ta(cmd, ctrl, NULL, NULL, NULL, NULL, NULL);
}
static inline CK_RV ckteec_invoke_ctrl_in(unsigned long cmd,
TEEC_SharedMemory *ctrl,
TEEC_SharedMemory *io1)
{
return ckteec_invoke_ta(cmd, ctrl, io1, NULL, NULL, NULL, NULL);
}
static inline CK_RV ckteec_invoke_ctrl_out(unsigned long cmd,
TEEC_SharedMemory *ctrl,
TEEC_SharedMemory *io2,
size_t *out_sz)
{
return ckteec_invoke_ta(cmd, ctrl, NULL, io2, out_sz, NULL, NULL);
}
/*
* ckteec_invoke_init - Initialize TEE session with the PKCS11 TA
*
* Return a CR_RV compliant return value
*/
CK_RV ckteec_invoke_init(void);
/*
* ckteec_invoke_terminate - Release all allocated invocation resources
*
* Return a CR_RV compliant return value
*/
CK_RV ckteec_invoke_terminate(void);
/* Return true if and only if the PKCS11 TA invocation context is initiated */
bool ckteec_invoke_initiated(void);
#endif /*LIBCKTEEC_INVOKE_TA_H*/

View File

@@ -0,0 +1,16 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2020, Linaro Limited
*/
#ifndef LIBCKTEEC_LOCAL_UTILS_H
#define LIBCKTEEC_LOCAL_UTILS_H
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
#define COMPILE_TIME_ASSERT(x) \
do { \
switch (0) { case 0: case ((x) ? 1: 0) : default : break; } \
} while (0)
#endif /*LIBCKTEEC_LOCAL_UTILS_H*/

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,139 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2017-2018, Linaro Limited
*/
#ifndef LIBCKTEEC_PKCS11_PROCESSING_H
#define LIBCKTEEC_PKCS11_PROCESSING_H
#include <pkcs11.h>
#include <pkcs11_ta.h>
CK_RV ck_create_object(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR attribs,
CK_ULONG count, CK_OBJECT_HANDLE_PTR phObject);
CK_RV ck_destroy_object(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE obj);
CK_RV ck_encdecrypt_init(CK_SESSION_HANDLE session,
CK_MECHANISM_PTR mechanism,
CK_OBJECT_HANDLE key,
int decrypt);
CK_RV ck_encdecrypt_update(CK_SESSION_HANDLE session,
CK_BYTE_PTR in,
CK_ULONG in_len,
CK_BYTE_PTR out,
CK_ULONG_PTR out_len,
int decrypt);
CK_RV ck_encdecrypt_oneshot(CK_SESSION_HANDLE session,
CK_BYTE_PTR in,
CK_ULONG in_len,
CK_BYTE_PTR out,
CK_ULONG_PTR out_len,
int decrypt);
CK_RV ck_encdecrypt_final(CK_SESSION_HANDLE session,
CK_BYTE_PTR out,
CK_ULONG_PTR out_len,
int decrypt);
CK_RV ck_digest_init(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism);
CK_RV ck_digest_key(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE key);
CK_RV ck_digest_update(CK_SESSION_HANDLE session, CK_BYTE_PTR in,
CK_ULONG in_len);
CK_RV ck_digest_oneshot(CK_SESSION_HANDLE session, CK_BYTE_PTR in,
CK_ULONG in_len, CK_BYTE_PTR out,
CK_ULONG_PTR out_len);
CK_RV ck_digest_final(CK_SESSION_HANDLE session, CK_BYTE_PTR out,
CK_ULONG_PTR out_len);
CK_RV ck_signverify_init(CK_SESSION_HANDLE session,
CK_MECHANISM_PTR mechanism,
CK_OBJECT_HANDLE key,
int sign);
CK_RV ck_signverify_update(CK_SESSION_HANDLE session,
CK_BYTE_PTR in,
CK_ULONG in_len,
int sign);
CK_RV ck_signverify_oneshot(CK_SESSION_HANDLE session,
CK_BYTE_PTR in,
CK_ULONG in_len,
CK_BYTE_PTR out,
CK_ULONG_PTR out_len,
int sign);
CK_RV ck_signverify_final(CK_SESSION_HANDLE session,
CK_BYTE_PTR out,
CK_ULONG_PTR out_len,
int sign);
CK_RV ck_generate_key(CK_SESSION_HANDLE session,
CK_MECHANISM_PTR mechanism,
CK_ATTRIBUTE_PTR attribs,
CK_ULONG count,
CK_OBJECT_HANDLE_PTR handle);
CK_RV ck_find_objects_init(CK_SESSION_HANDLE session,
CK_ATTRIBUTE_PTR attribs,
CK_ULONG count);
CK_RV ck_find_objects(CK_SESSION_HANDLE session,
CK_OBJECT_HANDLE_PTR obj,
CK_ULONG max_count,
CK_ULONG_PTR count);
CK_RV ck_find_objects_final(CK_SESSION_HANDLE session);
CK_RV ck_get_object_size(CK_SESSION_HANDLE session,
CK_OBJECT_HANDLE obj,
CK_ULONG_PTR p_size);
CK_RV ck_get_attribute_value(CK_SESSION_HANDLE session,
CK_OBJECT_HANDLE obj,
CK_ATTRIBUTE_PTR attribs,
CK_ULONG count);
CK_RV ck_set_attribute_value(CK_SESSION_HANDLE session,
CK_OBJECT_HANDLE obj,
CK_ATTRIBUTE_PTR attribs,
CK_ULONG count);
CK_RV ck_copy_object(CK_SESSION_HANDLE session,
CK_OBJECT_HANDLE obj,
CK_ATTRIBUTE_PTR attribs,
CK_ULONG count,
CK_OBJECT_HANDLE_PTR handle);
CK_RV ck_derive_key(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
CK_OBJECT_HANDLE base_key, CK_ATTRIBUTE_PTR attribs,
CK_ULONG count, CK_OBJECT_HANDLE_PTR handle);
CK_RV ck_release_active_processing(CK_SESSION_HANDLE session,
enum pkcs11_ta_cmd command);
CK_RV ck_generate_key_pair(CK_SESSION_HANDLE session,
CK_MECHANISM_PTR mechanism,
CK_ATTRIBUTE_PTR pub_attribs,
CK_ULONG pub_count,
CK_ATTRIBUTE_PTR priv_attribs,
CK_ULONG priv_count,
CK_OBJECT_HANDLE_PTR pub_key,
CK_OBJECT_HANDLE_PTR priv_key);
CK_RV ck_wrap_key(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
CK_OBJECT_HANDLE wrapping_key, CK_OBJECT_HANDLE key,
CK_BYTE_PTR wrapped_key, CK_ULONG_PTR wrapped_key_len);
CK_RV ck_unwrap_key(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
CK_OBJECT_HANDLE unwrapping_key, CK_BYTE_PTR wrapped_key,
CK_ULONG wrapped_key_len, CK_ATTRIBUTE_PTR attribs,
CK_ULONG count, CK_OBJECT_HANDLE_PTR handle);
#endif /*LIBCKTEEC_PKCS11_PROCESSING_H*/

View File

@@ -0,0 +1,863 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2017-2020, Linaro Limited
*/
#include <ck_debug.h>
#include <pkcs11.h>
#include <pkcs11_ta.h>
#include <stdlib.h>
#include <string.h>
#include "ck_helpers.h"
#include "invoke_ta.h"
#include "local_utils.h"
#include "pkcs11_token.h"
#define PKCS11_LIB_MANUFACTURER "Linaro"
#define PKCS11_LIB_DESCRIPTION "OP-TEE PKCS11 Cryptoki library"
/**
* Converts uint32_t value to CK_ULONG with unavailable information support
*
* On 64 bit systems uint32_t cannot handle CK_ULONG defined
* CK_UNAVAILABLE_INFORMATION. Check for this specific situation and return
* correct value.
*
* @ta_value: Value form PKCS#11 TA
* @return Valid CK_ULONG value
*/
static CK_ULONG maybe_unavail(uint32_t ta_value)
{
if (ta_value == PKCS11_CK_UNAVAILABLE_INFORMATION)
return CK_UNAVAILABLE_INFORMATION;
else
return ta_value;
}
/**
* ck_get_info - Get local information for C_GetInfo
*/
CK_RV ck_get_info(CK_INFO_PTR info)
{
const CK_INFO lib_info = {
.cryptokiVersion = {
CK_PKCS11_VERSION_MAJOR,
CK_PKCS11_VERSION_MINOR,
},
.manufacturerID = PKCS11_LIB_MANUFACTURER,
.flags = 0, /* must be zero per the PKCS#11 2.40 */
.libraryDescription = PKCS11_LIB_DESCRIPTION,
.libraryVersion = {
PKCS11_TA_VERSION_MAJOR,
PKCS11_TA_VERSION_MINOR
},
};
int n = 0;
if (!info)
return CKR_ARGUMENTS_BAD;
*info = lib_info;
/* Pad strings with blank characters */
n = strnlen((char *)info->manufacturerID,
sizeof(info->manufacturerID));
memset(&info->manufacturerID[n], ' ',
sizeof(info->manufacturerID) - n);
n = strnlen((char *)info->libraryDescription,
sizeof(info->libraryDescription));
memset(&info->libraryDescription[n], ' ',
sizeof(info->libraryDescription) - n);
return CKR_OK;
}
/**
* ck_slot_get_list - Wrap C_GetSlotList into PKCS11_CMD_SLOT_LIST
*/
CK_RV ck_slot_get_list(CK_BBOOL present,
CK_SLOT_ID_PTR slots, CK_ULONG_PTR count)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *shm = NULL;
uint32_t *slot_ids = NULL;
size_t client_count = 0;
size_t size = 0;
size_t n = 0;
/* Discard @present: all slots reported by TA are present */
(void)present;
if (!count)
return CKR_ARGUMENTS_BAD;
/*
* As per spec, if @slots is NULL, "The contents of *pulCount on
* entry to C_GetSlotList has no meaning in this case (...)"
*/
if (slots)
client_count = *count;
size = client_count * sizeof(*slot_ids);
shm = ckteec_alloc_shm(size, CKTEEC_SHM_OUT);
if (!shm)
return CKR_HOST_MEMORY;
rv = ckteec_invoke_ta(PKCS11_CMD_SLOT_LIST, NULL,
NULL, shm, &size, NULL, NULL);
if (rv == CKR_OK || rv == CKR_BUFFER_TOO_SMALL)
*count = size / sizeof(*slot_ids);
if (!slots && rv == CKR_BUFFER_TOO_SMALL)
rv = CKR_OK;
if (!slots || rv)
goto out;
slot_ids = shm->buffer;
for (n = 0; n < *count; n++)
slots[n] = slot_ids[n];
out:
ckteec_free_shm(shm);
return rv;
}
/**
* ck_slot_get_info - Wrap C_GetSlotInfo into PKCS11_CMD_SLOT_INFO
*/
CK_RV ck_slot_get_info(CK_SLOT_ID slot, CK_SLOT_INFO_PTR info)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
TEEC_SharedMemory *out = NULL;
uint32_t slot_id = slot;
struct pkcs11_slot_info *ta_info = NULL;
size_t out_size = 0;
if (!info)
return CKR_ARGUMENTS_BAD;
ctrl = ckteec_alloc_shm(sizeof(slot_id), CKTEEC_SHM_INOUT);
if (!ctrl) {
rv = CKR_HOST_MEMORY;
goto out;
}
memcpy(ctrl->buffer, &slot_id, sizeof(slot_id));
out = ckteec_alloc_shm(sizeof(*ta_info), CKTEEC_SHM_OUT);
if (!out) {
rv = CKR_HOST_MEMORY;
goto out;
}
rv = ckteec_invoke_ctrl_out(PKCS11_CMD_SLOT_INFO, ctrl, out, &out_size);
if (rv != CKR_OK || out_size != out->size) {
if (rv == CKR_OK)
rv = CKR_DEVICE_ERROR;
goto out;
}
ta_info = out->buffer;
COMPILE_TIME_ASSERT(sizeof(info->slotDescription) ==
sizeof(ta_info->slot_description));
memcpy(info->slotDescription, ta_info->slot_description,
sizeof(info->slotDescription));
COMPILE_TIME_ASSERT(sizeof(info->manufacturerID) ==
sizeof(ta_info->manufacturer_id));
memcpy(info->manufacturerID, ta_info->manufacturer_id,
sizeof(info->manufacturerID));
info->flags = ta_info->flags;
COMPILE_TIME_ASSERT(sizeof(info->hardwareVersion) ==
sizeof(ta_info->hardware_version));
memcpy(&info->hardwareVersion, ta_info->hardware_version,
sizeof(info->hardwareVersion));
COMPILE_TIME_ASSERT(sizeof(info->firmwareVersion) ==
sizeof(ta_info->firmware_version));
memcpy(&info->firmwareVersion, ta_info->firmware_version,
sizeof(info->firmwareVersion));
out:
ckteec_free_shm(ctrl);
ckteec_free_shm(out);
return rv;
}
/**
* ck_token_get_info - Wrap C_GetTokenInfo into PKCS11_CMD_TOKEN_INFO
*/
CK_RV ck_token_get_info(CK_SLOT_ID slot, CK_TOKEN_INFO_PTR info)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
TEEC_SharedMemory *out_shm = NULL;
uint32_t slot_id = slot;
struct pkcs11_token_info *ta_info = NULL;
size_t out_size = 0;
if (!info)
return CKR_ARGUMENTS_BAD;
ctrl = ckteec_alloc_shm(sizeof(slot_id), CKTEEC_SHM_INOUT);
if (!ctrl) {
rv = CKR_HOST_MEMORY;
goto out;
}
memcpy(ctrl->buffer, &slot_id, sizeof(slot_id));
out_shm = ckteec_alloc_shm(sizeof(*ta_info), CKTEEC_SHM_OUT);
if (!out_shm) {
rv = CKR_HOST_MEMORY;
goto out;
}
rv = ckteec_invoke_ctrl_out(PKCS11_CMD_TOKEN_INFO, ctrl,
out_shm, &out_size);
if (rv)
goto out;
if (out_size != out_shm->size) {
rv = CKR_DEVICE_ERROR;
goto out;
}
ta_info = out_shm->buffer;
COMPILE_TIME_ASSERT(sizeof(info->label) == sizeof(ta_info->label));
memcpy(info->label, ta_info->label, sizeof(info->label));
COMPILE_TIME_ASSERT(sizeof(info->manufacturerID) ==
sizeof(ta_info->manufacturer_id));
memcpy(info->manufacturerID, ta_info->manufacturer_id,
sizeof(info->manufacturerID));
COMPILE_TIME_ASSERT(sizeof(info->model) == sizeof(ta_info->model));
memcpy(info->model, ta_info->model, sizeof(info->model));
COMPILE_TIME_ASSERT(sizeof(info->serialNumber) ==
sizeof(ta_info->serial_number));
memcpy(info->serialNumber, ta_info->serial_number,
sizeof(info->serialNumber));
info->flags = ta_info->flags;
info->ulMaxSessionCount = maybe_unavail(ta_info->max_session_count);
info->ulSessionCount = maybe_unavail(ta_info->session_count);
info->ulMaxRwSessionCount =
maybe_unavail(ta_info->max_rw_session_count);
info->ulRwSessionCount = maybe_unavail(ta_info->rw_session_count);
info->ulMaxPinLen = ta_info->max_pin_len;
info->ulMinPinLen = ta_info->min_pin_len;
info->ulTotalPublicMemory =
maybe_unavail(ta_info->total_public_memory);
info->ulFreePublicMemory = maybe_unavail(ta_info->free_public_memory);
info->ulTotalPrivateMemory =
maybe_unavail(ta_info->total_private_memory);
info->ulFreePrivateMemory =
maybe_unavail(ta_info->free_private_memory);
COMPILE_TIME_ASSERT(sizeof(info->hardwareVersion) ==
sizeof(ta_info->hardware_version));
memcpy(&info->hardwareVersion, ta_info->hardware_version,
sizeof(info->hardwareVersion));
COMPILE_TIME_ASSERT(sizeof(info->firmwareVersion) ==
sizeof(ta_info->firmware_version));
memcpy(&info->firmwareVersion, ta_info->firmware_version,
sizeof(info->firmwareVersion));
COMPILE_TIME_ASSERT(sizeof(info->utcTime) == sizeof(ta_info->utc_time));
memcpy(&info->utcTime, ta_info->utc_time, sizeof(info->utcTime));
out:
ckteec_free_shm(ctrl);
ckteec_free_shm(out_shm);
return rv;
}
/**
* ck_token_mechanism_ids - Wrap C_GetMechanismList
*/
CK_RV ck_token_mechanism_ids(CK_SLOT_ID slot,
CK_MECHANISM_TYPE_PTR mechanisms,
CK_ULONG_PTR count)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
TEEC_SharedMemory *out = NULL;
uint32_t slot_id = slot;
uint32_t *mecha_ids = NULL;
size_t out_size = 0;
size_t n = 0;
if (!count)
return CKR_ARGUMENTS_BAD;
/*
* As per spec, if @mechanism is NULL, "The contents of *pulCount on
* entry to C_GetMechanismList has no meaning in this case (...)"
*/
if (mechanisms)
out_size = *count * sizeof(*mecha_ids);
ctrl = ckteec_alloc_shm(sizeof(slot_id), CKTEEC_SHM_INOUT);
if (!ctrl) {
rv = CKR_HOST_MEMORY;
goto out;
}
memcpy(ctrl->buffer, &slot_id, sizeof(slot_id));
out = ckteec_alloc_shm(out_size, CKTEEC_SHM_OUT);
if (!out) {
rv = CKR_HOST_MEMORY;
goto out;
}
rv = ckteec_invoke_ctrl_out(PKCS11_CMD_MECHANISM_IDS,
ctrl, out, &out_size);
if (rv == CKR_OK || rv == CKR_BUFFER_TOO_SMALL)
*count = out_size / sizeof(*mecha_ids);
if (!mechanisms && rv == CKR_BUFFER_TOO_SMALL)
rv = CKR_OK;
if (!mechanisms || rv)
goto out;
mecha_ids = out->buffer;
for (n = 0; n < *count; n++)
mechanisms[n] = mecha_ids[n];
out:
ckteec_free_shm(ctrl);
ckteec_free_shm(out);
return rv;
}
/**
* ck_token_mechanism_info - Wrap C_GetMechanismInfo into command MECHANISM_INFO
*/
CK_RV ck_token_mechanism_info(CK_SLOT_ID slot, CK_MECHANISM_TYPE type,
CK_MECHANISM_INFO_PTR info)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
TEEC_SharedMemory *out = NULL;
uint32_t slot_id = slot;
uint32_t mecha_type = type;
struct pkcs11_mechanism_info *ta_info = NULL;
char *buf = NULL;
size_t out_size = 0;
if (!info)
return CKR_ARGUMENTS_BAD;
ctrl = ckteec_alloc_shm(sizeof(slot_id) + sizeof(mecha_type),
CKTEEC_SHM_INOUT);
if (!ctrl) {
rv = CKR_HOST_MEMORY;
goto out;
}
buf = ctrl->buffer;
memcpy(buf, &slot_id, sizeof(slot_id));
buf += sizeof(slot_id);
memcpy(buf, &mecha_type, sizeof(mecha_type));
out = ckteec_alloc_shm(sizeof(*ta_info), CKTEEC_SHM_OUT);
if (!out) {
rv = CKR_HOST_MEMORY;
goto out;
}
rv = ckteec_invoke_ctrl_out(PKCS11_CMD_MECHANISM_INFO,
ctrl, out, &out_size);
if (rv != CKR_OK || out_size != out->size) {
if (rv == CKR_OK)
rv = CKR_DEVICE_ERROR;
goto out;
}
ta_info = out->buffer;
info->ulMinKeySize = ta_info->min_key_size;
info->ulMaxKeySize = ta_info->max_key_size;
info->flags = ta_info->flags;
out:
ckteec_free_shm(ctrl);
ckteec_free_shm(out);
return rv;
}
/**
* ck_open_session - Wrap C_OpenSession into PKCS11_CMD_OPEN_{RW|RO}_SESSION
*
* Note: cookie and callback are not utilized by libckteec and are silently
* sinked in to have better out-of-box compatibility with 3rd party libraries
* and applications which provides the callback.
*/
CK_RV ck_open_session(CK_SLOT_ID slot, CK_FLAGS flags, CK_VOID_PTR cookie,
CK_NOTIFY callback, CK_SESSION_HANDLE_PTR session)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
TEEC_SharedMemory *out = NULL;
uint32_t slot_id = slot;
uint32_t u32_flags = flags;
uint32_t handle = 0;
size_t out_size = 0;
uint8_t *buf;
/* Ignore notify callback */
(void)cookie;
(void)callback;
if ((flags & ~(CKF_RW_SESSION | CKF_SERIAL_SESSION)) || !session)
return CKR_ARGUMENTS_BAD;
/* Shm io0: (in/out) ctrl = [slot-id][flags] / [status] */
ctrl = ckteec_alloc_shm(sizeof(slot_id) + sizeof(u32_flags),
CKTEEC_SHM_INOUT);
if (!ctrl) {
rv = CKR_HOST_MEMORY;
goto out;
}
buf = (uint8_t *)ctrl->buffer;
memcpy(buf, &slot_id, sizeof(slot_id));
buf += sizeof(slot_id);
memcpy(buf, &u32_flags, sizeof(u32_flags));
/* Shm io2: (out) [session handle] */
out = ckteec_alloc_shm(sizeof(handle), CKTEEC_SHM_OUT);
if (!out) {
rv = CKR_HOST_MEMORY;
goto out;
}
rv = ckteec_invoke_ctrl_out(PKCS11_CMD_OPEN_SESSION,
ctrl, out, &out_size);
if (rv != CKR_OK || out_size != out->size) {
if (rv == CKR_OK)
rv = CKR_DEVICE_ERROR;
goto out;
}
memcpy(&handle, out->buffer, sizeof(handle));
*session = handle;
out:
ckteec_free_shm(ctrl);
ckteec_free_shm(out);
return rv;
}
/**
* ck_open_session - Wrap C_OpenSession into PKCS11_CMD_CLOSE_SESSION
*/
CK_RV ck_close_session(CK_SESSION_HANDLE session)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
uint32_t session_handle = session;
/* Shm io0: (in/out) ctrl = [session-handle] / [status] */
ctrl = ckteec_alloc_shm(sizeof(session_handle), CKTEEC_SHM_INOUT);
if (!ctrl) {
rv = CKR_HOST_MEMORY;
goto out;
}
memcpy(ctrl->buffer, &session_handle, sizeof(session_handle));
rv = ckteec_invoke_ctrl(PKCS11_CMD_CLOSE_SESSION, ctrl);
out:
ckteec_free_shm(ctrl);
return rv;
}
/**
* ck_close_all_sessions - Wrap C_CloseAllSessions into TA command
*/
CK_RV ck_close_all_sessions(CK_SLOT_ID slot)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
uint32_t slot_id = slot;
/* Shm io0: (in/out) ctrl = [slot-id] / [status] */
ctrl = ckteec_alloc_shm(sizeof(slot_id), CKTEEC_SHM_INOUT);
if (!ctrl) {
rv = CKR_HOST_MEMORY;
goto out;
}
memcpy(ctrl->buffer, &slot_id, sizeof(slot_id));
rv = ckteec_invoke_ctrl(PKCS11_CMD_CLOSE_ALL_SESSIONS, ctrl);
out:
ckteec_free_shm(ctrl);
return rv;
}
/**
* ck_get_session_info - Wrap C_GetSessionInfo into PKCS11_CMD_SESSION_INFO
*/
CK_RV ck_get_session_info(CK_SESSION_HANDLE session,
CK_SESSION_INFO_PTR info)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
TEEC_SharedMemory *out = NULL;
uint32_t session_handle = session;
struct pkcs11_session_info *ta_info = NULL;
size_t out_size = 0;
if (!info)
return CKR_ARGUMENTS_BAD;
/* Shm io0: (in/out) ctrl = [session-handle] / [status] */
ctrl = ckteec_alloc_shm(sizeof(session_handle), CKTEEC_SHM_INOUT);
if (!ctrl) {
rv = CKR_HOST_MEMORY;
goto out;
}
memcpy(ctrl->buffer, &session_handle, sizeof(session_handle));
/* Shm io2: (out) [session info] */
out = ckteec_alloc_shm(sizeof(struct pkcs11_session_info),
CKTEEC_SHM_OUT);
if (!out) {
rv = CKR_HOST_MEMORY;
goto out;
}
rv = ckteec_invoke_ctrl_out(PKCS11_CMD_SESSION_INFO,
ctrl, out, &out_size);
if (rv != CKR_OK || out_size != out->size) {
if (rv == CKR_OK)
rv = CKR_DEVICE_ERROR;
goto out;
}
ta_info = (struct pkcs11_session_info *)out->buffer;
info->slotID = ta_info->slot_id;
info->state = ta_info->state;
info->flags = ta_info->flags;
info->ulDeviceError = ta_info->device_error;
out:
ckteec_free_shm(ctrl);
ckteec_free_shm(out);
return rv;
}
/**
* ck_init_token - Wrap C_InitToken into PKCS11_CMD_INIT_TOKEN
*/
CK_RV ck_init_token(CK_SLOT_ID slot, CK_UTF8CHAR_PTR pin,
CK_ULONG pin_len, CK_UTF8CHAR_PTR label)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
uint32_t slot_id = slot;
uint32_t pkcs11_pin_len = pin_len;
size_t ctrl_size = 0;
char *buf = NULL;
if (!pin && pin_len)
return CKR_ARGUMENTS_BAD;
if (!label)
return CKR_ARGUMENTS_BAD;
/* Shm io0: (in/out) ctrl = [slot-id][pin_len][label][pin] / [status] */
ctrl_size = sizeof(slot_id) + sizeof(pkcs11_pin_len) +
32 * sizeof(uint8_t) + pkcs11_pin_len;
ctrl = ckteec_alloc_shm(ctrl_size, CKTEEC_SHM_INOUT);
if (!ctrl)
return CKR_HOST_MEMORY;
buf = ctrl->buffer;
memcpy(buf, &slot_id, sizeof(slot_id));
buf += sizeof(slot_id);
memcpy(buf, &pkcs11_pin_len, sizeof(pkcs11_pin_len));
buf += sizeof(pkcs11_pin_len);
memcpy(buf, label, 32 * sizeof(uint8_t));
buf += 32 * sizeof(uint8_t);
memcpy(buf, pin, pkcs11_pin_len);
rv = ckteec_invoke_ctrl(PKCS11_CMD_INIT_TOKEN, ctrl);
ckteec_free_shm(ctrl);
return rv;
}
/**
* ck_init_pin - Wrap C_InitPIN into PKCS11_CMD_INIT_PIN
*/
CK_RV ck_init_pin(CK_SESSION_HANDLE session,
CK_UTF8CHAR_PTR pin, CK_ULONG pin_len)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
uint32_t pkcs11_session = session;
uint32_t pkcs11_pin_len = pin_len;
size_t ctrl_size = 0;
char *buf = NULL;
if (!pin && pin_len)
return CKR_ARGUMENTS_BAD;
/* Shm io0: (in/out) ctrl = [session][pin_len][pin] / [status] */
ctrl_size = sizeof(pkcs11_session) + sizeof(pkcs11_pin_len) +
pkcs11_pin_len;
ctrl = ckteec_alloc_shm(ctrl_size, CKTEEC_SHM_INOUT);
if (!ctrl)
return CKR_HOST_MEMORY;
buf = ctrl->buffer;
memcpy(buf, &pkcs11_session, sizeof(pkcs11_session));
buf += sizeof(pkcs11_session);
memcpy(buf, &pkcs11_pin_len, sizeof(pkcs11_pin_len));
buf += sizeof(pkcs11_pin_len);
memcpy(buf, pin, pkcs11_pin_len);
rv = ckteec_invoke_ctrl(PKCS11_CMD_INIT_PIN, ctrl);
ckteec_free_shm(ctrl);
return rv;
}
/**
* ck_set_pin - Wrap C_SetPIN into PKCS11_CMD_SET_PIN
*/
CK_RV ck_set_pin(CK_SESSION_HANDLE session,
CK_UTF8CHAR_PTR old, CK_ULONG old_len,
CK_UTF8CHAR_PTR new, CK_ULONG new_len)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
uint32_t pkcs11_session = session;
uint32_t pkcs11_old_len = old_len;
uint32_t pkcs11_new_len = new_len;
size_t ctrl_size = 0;
char *buf;
if ((!old && old_len) || (!new && new_len))
return CKR_ARGUMENTS_BAD;
/*
* Shm io0: (in/out) ctrl
* (in) [session][old_pin_len][new_pin_len][old pin][new pin]
* (out) [status]
*/
ctrl_size = sizeof(pkcs11_session) + sizeof(pkcs11_old_len) +
sizeof(pkcs11_new_len) + pkcs11_old_len + pkcs11_new_len;
ctrl = ckteec_alloc_shm(ctrl_size, CKTEEC_SHM_INOUT);
if (!ctrl)
return CKR_HOST_MEMORY;
buf = ctrl->buffer;
memcpy(buf, &pkcs11_session, sizeof(pkcs11_session));
buf += sizeof(pkcs11_session);
memcpy(buf, &pkcs11_old_len, sizeof(pkcs11_old_len));
buf += sizeof(pkcs11_old_len);
memcpy(buf, &pkcs11_new_len, sizeof(pkcs11_new_len));
buf += sizeof(pkcs11_new_len);
memcpy(buf, old, pkcs11_old_len);
buf += pkcs11_old_len;
memcpy(buf, new, pkcs11_new_len);
rv = ckteec_invoke_ctrl(PKCS11_CMD_SET_PIN, ctrl);
ckteec_free_shm(ctrl);
return rv;
}
/**
* ck_login - Wrap C_Login into PKCS11_CMD_LOGIN
*/
CK_RV ck_login(CK_SESSION_HANDLE session, CK_USER_TYPE user_type,
CK_UTF8CHAR_PTR pin, CK_ULONG pin_len)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
uint32_t pkcs11_session = session;
uint32_t pkcs11_user = user_type;
uint32_t pkcs11_pin_len = pin_len;
size_t ctrl_size = 0;
char *buf = NULL;
if (!pin && pin_len)
return CKR_ARGUMENTS_BAD;
/* Shm io0: (i/o) ctrl = [session][user][pin length][pin] / [status] */
ctrl_size = sizeof(pkcs11_session) + sizeof(pkcs11_user) +
sizeof(pkcs11_pin_len) + pkcs11_pin_len;
ctrl = ckteec_alloc_shm(ctrl_size, CKTEEC_SHM_INOUT);
if (!ctrl)
return CKR_HOST_MEMORY;
buf = ctrl->buffer;
memcpy(buf, &pkcs11_session, sizeof(pkcs11_session));
buf += sizeof(pkcs11_session);
memcpy(buf, &pkcs11_user, sizeof(pkcs11_user));
buf += sizeof(pkcs11_user);
memcpy(buf, &pkcs11_pin_len, sizeof(pkcs11_pin_len));
buf += sizeof(pkcs11_pin_len);
memcpy(buf, pin, pkcs11_pin_len);
rv = ckteec_invoke_ctrl(PKCS11_CMD_LOGIN, ctrl);
ckteec_free_shm(ctrl);
return rv;
}
/**
* ck_logout - Wrap C_Logout into PKCS11_CMD_LOGOUT
*/
CK_RV ck_logout(CK_SESSION_HANDLE session)
{
CK_RV rv = CKR_GENERAL_ERROR;
TEEC_SharedMemory *ctrl = NULL;
uint32_t session_handle = session;
/* io0 = [session-handle] */
ctrl = ckteec_alloc_shm(sizeof(session_handle), CKTEEC_SHM_INOUT);
if (!ctrl)
return CKR_HOST_MEMORY;
memcpy(ctrl->buffer, &session_handle, sizeof(session_handle));
rv = ckteec_invoke_ctrl(PKCS11_CMD_LOGOUT, ctrl);
ckteec_free_shm(ctrl);
return rv;
}
CK_RV ck_seed_random(CK_SESSION_HANDLE session, CK_BYTE_PTR seed,
CK_ULONG length)
{
CK_RV rv = CKR_GENERAL_ERROR;
size_t ctrl_size = 0;
TEEC_SharedMemory *ctrl = NULL;
TEEC_SharedMemory *in_shm = NULL;
uint32_t session_handle = session;
if (!seed && length)
return CKR_ARGUMENTS_BAD;
if (!seed)
return CKR_OK;
/* Shm io0: (i/o) [session-handle] / [status] */
ctrl_size = sizeof(session_handle);
ctrl = ckteec_alloc_shm(ctrl_size, CKTEEC_SHM_INOUT);
if (!ctrl)
return CKR_HOST_MEMORY;
memcpy(ctrl->buffer, &session_handle, sizeof(session_handle));
/* Shm io1: (in) [seed data] */
in_shm = ckteec_register_shm(seed, length, CKTEEC_SHM_IN);
if (!in_shm) {
rv = CKR_HOST_MEMORY;
goto out;
}
rv = ckteec_invoke_ctrl_in(PKCS11_CMD_SEED_RANDOM, ctrl, in_shm);
out:
ckteec_free_shm(in_shm);
ckteec_free_shm(ctrl);
return rv;
}
CK_RV ck_generate_random(CK_SESSION_HANDLE session, CK_BYTE_PTR data,
CK_ULONG length)
{
CK_RV rv = CKR_GENERAL_ERROR;
size_t ctrl_size = 0;
TEEC_SharedMemory *ctrl = NULL;
TEEC_SharedMemory *out_shm = NULL;
uint32_t session_handle = session;
size_t out_size = 0;
if (!data && length)
return CKR_ARGUMENTS_BAD;
if (!data)
return CKR_OK;
/* Shm io0: (i/o) [session-handle] / [status] */
ctrl_size = sizeof(session_handle);
ctrl = ckteec_alloc_shm(ctrl_size, CKTEEC_SHM_INOUT);
if (!ctrl)
return CKR_HOST_MEMORY;
memcpy(ctrl->buffer, &session_handle, sizeof(session_handle));
/* Shm io2: (out) [generated random] */
out_shm = ckteec_register_shm(data, length, CKTEEC_SHM_OUT);
if (!out_shm) {
rv = CKR_HOST_MEMORY;
goto out;
}
rv = ckteec_invoke_ctrl_out(PKCS11_CMD_GENERATE_RANDOM, ctrl, out_shm,
&out_size);
out:
ckteec_free_shm(out_shm);
ckteec_free_shm(ctrl);
return rv;
}

View File

@@ -0,0 +1,59 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2017, Linaro Limited
*/
#ifndef LIBCKTEEC_PKCS11_TOKEN_H
#define LIBCKTEEC_PKCS11_TOKEN_H
#include <pkcs11.h>
#include "invoke_ta.h"
CK_RV ck_get_info(CK_INFO_PTR info);
CK_RV ck_slot_get_list(CK_BBOOL present,
CK_SLOT_ID_PTR slots, CK_ULONG_PTR count);
CK_RV ck_slot_get_info(CK_SLOT_ID slot, CK_SLOT_INFO_PTR info);
CK_RV ck_token_get_info(CK_SLOT_ID slot, CK_TOKEN_INFO_PTR info);
CK_RV ck_token_mechanism_ids(CK_SLOT_ID slot,
CK_MECHANISM_TYPE_PTR mechanisms,
CK_ULONG_PTR count);
CK_RV ck_token_mechanism_info(CK_SLOT_ID slot, CK_MECHANISM_TYPE type,
CK_MECHANISM_INFO_PTR info);
CK_RV ck_open_session(CK_SLOT_ID slot, CK_FLAGS flags, CK_VOID_PTR cookie,
CK_NOTIFY callback, CK_SESSION_HANDLE_PTR session);
CK_RV ck_close_session(CK_SESSION_HANDLE session);
CK_RV ck_close_all_sessions(CK_SLOT_ID slot);
CK_RV ck_get_session_info(CK_SESSION_HANDLE session, CK_SESSION_INFO_PTR info);
CK_RV ck_init_token(CK_SLOT_ID slot, CK_UTF8CHAR_PTR pin,
CK_ULONG pin_len, CK_UTF8CHAR_PTR label);
CK_RV ck_init_pin(CK_SESSION_HANDLE session,
CK_UTF8CHAR_PTR pin, CK_ULONG pin_len);
CK_RV ck_set_pin(CK_SESSION_HANDLE session,
CK_UTF8CHAR_PTR old, CK_ULONG old_len,
CK_UTF8CHAR_PTR new, CK_ULONG new_len);
CK_RV ck_login(CK_SESSION_HANDLE session, CK_USER_TYPE user_type,
CK_UTF8CHAR_PTR pin, CK_ULONG pin_len);
CK_RV ck_logout(CK_SESSION_HANDLE session);
CK_RV ck_seed_random(CK_SESSION_HANDLE session, CK_BYTE_PTR seed,
CK_ULONG length);
CK_RV ck_generate_random(CK_SESSION_HANDLE session, CK_BYTE_PTR data,
CK_ULONG length);
#endif /*LIBCKTEEC_PKCS11_TOKEN_H*/

View File

@@ -0,0 +1,838 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2017-2020, Linaro Limited
*/
#include <ck_debug.h>
#include <inttypes.h>
#include <pkcs11.h>
#include <pkcs11_ta.h>
#include <stdlib.h>
#include <string.h>
#include "ck_helpers.h"
#include "local_utils.h"
#include "serializer.h"
#include "serialize_ck.h"
/*
* Serialization and de-serialization logic
*
* Cryptoki API works in a way that user application uses memory references
* in object attributes description. TA can be invoked with only a small set
* of possible references to caller memory. Thus a Cryptoki object, made of
* data and pointers to data, is reassembled into a byte array where each
* attribute info (ID, value size, value) is appended with byte alignment. This
* so-called serialized object can be passed through the TA API.
*
* Initial entry to PKCS11 TA uses serialize_ck_attributes(). When TA
* returns with updated serialized data to be passed back to caller, we call
* deserialize_ck_attributes().
*
* Special handling is performed for CK_ULONG passing which may be either 32
* bits or 64 bits depending on target device architecture. In TA interface
* this is handled as unsigned 32 bit data type.
*
* When user application is querying attributes in example with
* C_GetAttributeValue() user may allocate larger value buffers. During entry
* to TA shared buffer is allocated in serialize_ck_attributes() based on
* caller's arguments. For each attribute TA verifies if value fits in
* the buffer and if it does, value is returned. Value size in buffer is
* updated to indicate real size of the value. When call is returned back to
* REE deserialize_ck_attributes() is invoked and then both input arguments and
* serialization buffer are used to return values to caller. Provided input
* arguments from caller are used to determine serialization buffer structure
* and then actual values and value sizes are then decoded from serialization
* buffer and returned to caller in caller's allocated memory.
*/
/*
* Generic way of serializing CK keys, certificates, mechanism parameters, ...
* In cryptoki 2.40 parameters are almost all packaged as structure below:
*/
struct ck_ref {
CK_ULONG id;
CK_BYTE_PTR ptr;
CK_ULONG len;
};
/*
* This is for attributes that contains data memory indirections.
* In other words, an attributes that defines a list of attributes.
* They are identified from the attribute type CKA_...
*
* @obj - ref used to track the serial object being created
* @attribute - pointer to a structure aligned of the CK_ATTRIBUTE struct
*/
static CK_RV serialize_indirect_attribute(struct serializer *obj,
CK_ATTRIBUTE_PTR attribute)
{
CK_ATTRIBUTE_PTR attr = NULL;
CK_ULONG count = 0;
CK_RV rv = CKR_GENERAL_ERROR;
struct serializer obj2 = { 0 };
switch (attribute->type) {
/* These are serialized each separately */
case CKA_DERIVE_TEMPLATE:
case CKA_WRAP_TEMPLATE:
case CKA_UNWRAP_TEMPLATE:
count = attribute->ulValueLen / sizeof(CK_ATTRIBUTE);
attr = (CK_ATTRIBUTE_PTR)attribute->pValue;
break;
default:
return CKR_NO_EVENT;
}
/* Create a serialized object for the content */
rv = serialize_ck_attributes(&obj2, attr, count);
if (rv)
return rv;
/*
* Append the created serialized object into target object:
* [attrib-id][byte-size][attributes-data]
*/
rv = serialize_32b(obj, attribute->type);
if (rv)
goto out;
rv = serialize_32b(obj, obj2.size);
if (rv)
goto out;
rv = serialize_buffer(obj, obj2.buffer, obj2.size);
if (rv)
goto out;
obj->item_count++;
out:
release_serial_object(&obj2);
return rv;
}
static CK_RV deserialize_indirect_attribute(struct pkcs11_attribute_head *obj,
CK_ATTRIBUTE_PTR attribute)
{
CK_ULONG count = 0;
CK_ATTRIBUTE_PTR attr = NULL;
switch (attribute->type) {
/* These are serialized each separately */
case CKA_DERIVE_TEMPLATE:
case CKA_WRAP_TEMPLATE:
case CKA_UNWRAP_TEMPLATE:
count = attribute->ulValueLen / sizeof(CK_ATTRIBUTE);
attr = (CK_ATTRIBUTE_PTR)attribute->pValue;
break;
default:
return CKR_GENERAL_ERROR;
}
return deserialize_ck_attributes(obj->data, attr, count);
}
static int ck_attr_is_ulong(CK_ATTRIBUTE_TYPE attribute_id)
{
switch (attribute_id) {
case CKA_CLASS:
case CKA_CERTIFICATE_TYPE:
case CKA_CERTIFICATE_CATEGORY:
case CKA_NAME_HASH_ALGORITHM:
case CKA_KEY_TYPE:
case CKA_HW_FEATURE_TYPE:
case CKA_MECHANISM_TYPE:
case CKA_KEY_GEN_MECHANISM:
case CKA_VALUE_LEN:
case CKA_MODULUS_BITS:
return true;
default:
return false;
}
}
static CK_RV serialize_ck_attribute(struct serializer *obj, CK_ATTRIBUTE *attr)
{
CK_MECHANISM_TYPE *type = NULL;
uint32_t pkcs11_size = 0;
uint32_t pkcs11_data32 = 0;
void *pkcs11_pdata = NULL;
uint32_t *mech_buf = NULL;
CK_RV rv = CKR_GENERAL_ERROR;
unsigned int n = 0;
unsigned int m = 0;
if (attr->type == PKCS11_UNDEFINED_ID)
return CKR_ATTRIBUTE_TYPE_INVALID;
switch (attr->type) {
case CKA_DERIVE_TEMPLATE:
case CKA_WRAP_TEMPLATE:
case CKA_UNWRAP_TEMPLATE:
return serialize_indirect_attribute(obj, attr);
case CKA_ALLOWED_MECHANISMS:
n = attr->ulValueLen / sizeof(CK_ULONG);
pkcs11_size = n * sizeof(uint32_t);
mech_buf = malloc(pkcs11_size);
if (!mech_buf)
return CKR_HOST_MEMORY;
type = attr->pValue;
for (m = 0; m < n; m++) {
mech_buf[m] = type[m];
if (mech_buf[m] == PKCS11_UNDEFINED_ID) {
rv = CKR_MECHANISM_INVALID;
goto out;
}
}
pkcs11_pdata = mech_buf;
break;
/* Attributes which data value do not need conversion (aside ulong) */
default:
pkcs11_pdata = attr->pValue;
if (!attr->pValue) {
pkcs11_size = 0;
} else if (ck_attr_is_ulong(attr->type)) {
CK_ULONG ck_ulong = 0;
if (attr->ulValueLen < sizeof(CK_ULONG))
return CKR_ATTRIBUTE_VALUE_INVALID;
memcpy(&ck_ulong, attr->pValue, sizeof(ck_ulong));
pkcs11_data32 = ck_ulong;
pkcs11_pdata = &pkcs11_data32;
pkcs11_size = sizeof(uint32_t);
} else {
pkcs11_size = attr->ulValueLen;
}
break;
}
rv = serialize_32b(obj, attr->type);
if (rv)
goto out;
rv = serialize_32b(obj, pkcs11_size);
if (rv)
goto out;
rv = serialize_buffer(obj, pkcs11_pdata, pkcs11_size);
if (rv)
goto out;
obj->item_count++;
out:
free(mech_buf);
return rv;
}
/* CK attribute reference arguments are list of attribute item */
CK_RV serialize_ck_attributes(struct serializer *obj,
CK_ATTRIBUTE_PTR attributes, CK_ULONG count)
{
CK_ULONG n = 0;
CK_RV rv = CKR_OK;
rv = init_serial_object(obj);
if (rv)
return rv;
for (n = 0; n < count; n++) {
rv = serialize_ck_attribute(obj, attributes + n);
if (rv)
break;
}
if (rv)
release_serial_object(obj);
else
finalize_serial_object(obj);
return rv;
}
static CK_RV deserialize_mecha_list(CK_MECHANISM_TYPE *dst, void *src,
size_t count)
{
char *ta_src = src;
size_t n = 0;
uint32_t mecha_id = 0;
for (n = 0; n < count; n++) {
memcpy(&mecha_id, ta_src + n * sizeof(mecha_id),
sizeof(mecha_id));
dst[n] = mecha_id;
}
return CKR_OK;
}
static CK_RV deserialize_ck_attribute(struct pkcs11_attribute_head *in,
uint8_t *data, CK_ATTRIBUTE_PTR out)
{
CK_ULONG ck_ulong = 0;
uint32_t pkcs11_data32 = 0;
CK_RV rv = CKR_OK;
out->type = in->id;
if (in->size == PKCS11_CK_UNAVAILABLE_INFORMATION) {
out->ulValueLen = CK_UNAVAILABLE_INFORMATION;
return CKR_OK;
}
if (!out->pValue && ck_attr_is_ulong(out->type)) {
out->ulValueLen = sizeof(CK_ULONG);
return CKR_OK;
}
if (out->ulValueLen < in->size) {
out->ulValueLen = in->size;
return CKR_OK;
}
if (!out->pValue)
return CKR_OK;
/* Specific ulong encoded as 32bit in PKCS11 TA API */
if (ck_attr_is_ulong(out->type)) {
if (out->ulValueLen < sizeof(CK_ULONG))
return CKR_ATTRIBUTE_VALUE_INVALID;
memcpy(&pkcs11_data32, data, sizeof(uint32_t));
if (out->type == CKA_KEY_GEN_MECHANISM &&
pkcs11_data32 == PKCS11_CK_UNAVAILABLE_INFORMATION)
ck_ulong = CK_UNAVAILABLE_INFORMATION;
else
ck_ulong = pkcs11_data32;
memcpy(out->pValue, &ck_ulong, sizeof(CK_ULONG));
out->ulValueLen = sizeof(CK_ULONG);
return CKR_OK;
}
switch (out->type) {
case CKA_DERIVE_TEMPLATE:
case CKA_WRAP_TEMPLATE:
case CKA_UNWRAP_TEMPLATE:
rv = deserialize_indirect_attribute(in, out->pValue);
break;
case CKA_ALLOWED_MECHANISMS:
rv = deserialize_mecha_list(out->pValue, data,
in->size / sizeof(uint32_t));
out->ulValueLen = in->size / sizeof(uint32_t) *
sizeof(CK_ULONG);
break;
/* Attributes which data value do not need conversion (aside ulong) */
default:
memcpy(out->pValue, data, in->size);
out->ulValueLen = in->size;
break;
}
return rv;
}
CK_RV deserialize_ck_attributes(uint8_t *in, CK_ATTRIBUTE_PTR attributes,
CK_ULONG count)
{
CK_ATTRIBUTE_PTR cur_attr = attributes;
CK_ULONG n = 0;
CK_RV rv = CKR_OK;
uint8_t *curr_head = in;
size_t len = 0;
curr_head += sizeof(struct pkcs11_object_head);
for (n = count; n > 0; n--, cur_attr++, curr_head += len) {
struct pkcs11_attribute_head *cli_ref = (void *)curr_head;
struct pkcs11_attribute_head cli_head = { 0 };
void *data_ptr = NULL;
/* Make copy if header so that is aligned properly. */
memcpy(&cli_head, cli_ref, sizeof(cli_head));
/* Get real data pointer from template data */
data_ptr = cli_ref->data;
len = sizeof(cli_head);
/* Advance by size provisioned in input serialized buffer */
if (cur_attr->pValue) {
if (ck_attr_is_ulong(cur_attr->type))
len += sizeof(uint32_t);
else
len += cur_attr->ulValueLen;
}
rv = deserialize_ck_attribute(&cli_head, data_ptr, cur_attr);
if (rv)
return rv;
}
return rv;
}
/*
* Serialization of CK mechanism parameters
*
* Most mechanism have no parameters.
* Some mechanism have a single 32bit parameter.
* Some mechanism have a specific parameter structure which may contain
* indirected data (data referred by a buffer pointer).
*
* Below are each structure specific mechanisms parameters.
*/
static CK_RV serialize_mecha_aes_ctr(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_AES_CTR_PARAMS_PTR param = mecha->pParameter;
CK_RV rv = CKR_GENERAL_ERROR;
uint32_t size = 0;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
size = sizeof(uint32_t) + sizeof(param->cb);
rv = serialize_32b(obj, size);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, param->ulCounterBits);
if (rv)
return rv;
rv = serialize_buffer(obj, param->cb, sizeof(param->cb));
if (rv)
return rv;
return rv;
}
static CK_RV serialize_mecha_aes_gcm(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_GCM_PARAMS_PTR param = mecha->pParameter;
CK_RV rv = CKR_GENERAL_ERROR;
CK_ULONG aad_len = 0;
/* AAD is not manadatory */
if (param->pAAD)
aad_len = param->ulAADLen;
if (!param->pIv)
return CKR_MECHANISM_PARAM_INVALID;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
rv = serialize_32b(obj, 3 * sizeof(uint32_t) +
param->ulIvLen + aad_len);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, param->ulIvLen);
if (rv)
return rv;
rv = serialize_buffer(obj, param->pIv, param->ulIvLen);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, aad_len);
if (rv)
return rv;
rv = serialize_buffer(obj, param->pAAD, aad_len);
if (rv)
return rv;
return serialize_ck_ulong(obj, param->ulTagBits);
}
static CK_RV serialize_mecha_aes_iv(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
uint32_t iv_size = mecha->ulParameterLen;
CK_RV rv = CKR_GENERAL_ERROR;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
rv = serialize_32b(obj, iv_size);
if (rv)
return rv;
return serialize_buffer(obj, mecha->pParameter, mecha->ulParameterLen);
}
static CK_RV serialize_mecha_key_deriv_str(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_KEY_DERIVATION_STRING_DATA_PTR param = mecha->pParameter;
CK_RV rv = CKR_GENERAL_ERROR;
uint32_t size = 0;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
size = sizeof(uint32_t) + param->ulLen;
rv = serialize_32b(obj, size);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, param->ulLen);
if (rv)
return rv;
return serialize_buffer(obj, param->pData, param->ulLen);
}
static CK_RV serialize_mecha_ecdh1_derive_param(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_ECDH1_DERIVE_PARAMS *params = mecha->pParameter;
CK_RV rv = CKR_GENERAL_ERROR;
size_t params_size = 3 * sizeof(uint32_t) + params->ulSharedDataLen +
params->ulPublicDataLen;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
rv = serialize_32b(obj, params_size);
if (rv)
return rv;
rv = serialize_32b(obj, params->kdf);
if (rv)
return rv;
rv = serialize_32b(obj, params->ulSharedDataLen);
if (rv)
return rv;
rv = serialize_buffer(obj, params->pSharedData,
params->ulSharedDataLen);
if (rv)
return rv;
rv = serialize_32b(obj, params->ulPublicDataLen);
if (rv)
return rv;
return serialize_buffer(obj, params->pPublicData,
params->ulPublicDataLen);
}
static CK_RV serialize_mecha_aes_cbc_encrypt_data(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR param = mecha->pParameter;
CK_RV rv = CKR_GENERAL_ERROR;
uint32_t size = 0;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
size = sizeof(param->iv) + sizeof(uint32_t) + param->length;
rv = serialize_32b(obj, size);
if (rv)
return rv;
rv = serialize_buffer(obj, param->iv, sizeof(param->iv));
if (rv)
return rv;
rv = serialize_ck_ulong(obj, param->length);
if (rv)
return rv;
return serialize_buffer(obj, param->pData, param->length);
}
static CK_RV serialize_mecha_rsa_pss_param(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_RSA_PKCS_PSS_PARAMS *params = mecha->pParameter;
CK_RV rv = CKR_GENERAL_ERROR;
uint32_t params_size = 3 * sizeof(uint32_t);
if (mecha->ulParameterLen != sizeof(*params))
return CKR_ARGUMENTS_BAD;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
rv = serialize_32b(obj, params_size);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, params->hashAlg);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, params->mgf);
if (rv)
return rv;
return serialize_ck_ulong(obj, params->sLen);
}
static CK_RV serialize_mecha_rsa_oaep_param(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_RSA_PKCS_OAEP_PARAMS *params = mecha->pParameter;
CK_RV rv = CKR_GENERAL_ERROR;
size_t params_size = 4 * sizeof(uint32_t) + params->ulSourceDataLen;
if (mecha->ulParameterLen != sizeof(*params))
return CKR_ARGUMENTS_BAD;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
rv = serialize_32b(obj, params_size);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, params->hashAlg);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, params->mgf);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, params->source);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, params->ulSourceDataLen);
if (rv)
return rv;
return serialize_buffer(obj, params->pSourceData,
params->ulSourceDataLen);
}
static CK_RV serialize_mecha_rsa_aes_key_wrap(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_RSA_AES_KEY_WRAP_PARAMS *params = mecha->pParameter;
CK_RSA_PKCS_OAEP_PARAMS *aes_params = params->pOAEPParams;
CK_RV rv = CKR_GENERAL_ERROR;
size_t params_size = 5 * sizeof(uint32_t) + aes_params->ulSourceDataLen;
if (mecha->ulParameterLen != sizeof(*params))
return CKR_ARGUMENTS_BAD;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
rv = serialize_32b(obj, params_size);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, params->ulAESKeyBits);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, aes_params->hashAlg);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, aes_params->mgf);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, aes_params->source);
if (rv)
return rv;
rv = serialize_ck_ulong(obj, aes_params->ulSourceDataLen);
if (rv)
return rv;
return serialize_buffer(obj, aes_params->pSourceData,
aes_params->ulSourceDataLen);
}
static CK_RV serialize_mecha_eddsa(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_RV rv = CKR_GENERAL_ERROR;
CK_EDDSA_PARAMS *params = mecha->pParameter;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
rv = serialize_32b(obj, 2 * sizeof(uint32_t) + params->ulContextDataLen);
if (rv)
return rv;
rv = serialize_32b(obj, params->phFlag);
if (rv)
return rv;
rv = serialize_32b(obj, params->ulContextDataLen);
if (rv)
return rv;
return serialize_buffer(obj, params->pContextData, params->ulContextDataLen);
}
static CK_RV serialize_mecha_mac_general_param(struct serializer *obj,
CK_MECHANISM_PTR mecha)
{
CK_RV rv = CKR_GENERAL_ERROR;
CK_ULONG ck_data = 0;
if (mecha->ulParameterLen != sizeof(ck_data))
return CKR_ARGUMENTS_BAD;
memcpy(&ck_data, mecha->pParameter, mecha->ulParameterLen);
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
rv = serialize_32b(obj, sizeof(uint32_t));
if (rv)
return rv;
return serialize_ck_ulong(obj, ck_data);
}
/**
* serialize_ck_mecha_params - serialize a mechanism type & params
*
* @obj - serializer used to track the serialization
* @mechanism - pointer of the in structure aligned CK_MECHANISM.
*
* Serialized content:
* [mechanism-type][mechanism-param-blob]
*
* [mechanism-param-blob] depends on mechanism type ID, see
* serialize_mecha_XXX().
*/
CK_RV serialize_ck_mecha_params(struct serializer *obj,
CK_MECHANISM_PTR mechanism)
{
CK_MECHANISM mecha = { 0 };
CK_RV rv = CKR_GENERAL_ERROR;
memset(obj, 0, sizeof(*obj));
obj->object = PKCS11_CKO_MECHANISM;
mecha = *mechanism;
obj->type = mecha.mechanism;
if (obj->type == PKCS11_UNDEFINED_ID)
return CKR_MECHANISM_INVALID;
switch (mecha.mechanism) {
case CKM_GENERIC_SECRET_KEY_GEN:
case CKM_AES_KEY_GEN:
case CKM_AES_ECB:
case CKM_AES_CMAC:
case CKM_MD5:
case CKM_SHA_1:
case CKM_SHA224:
case CKM_SHA256:
case CKM_SHA384:
case CKM_SHA512:
case CKM_MD5_HMAC:
case CKM_SHA_1_HMAC:
case CKM_SHA224_HMAC:
case CKM_SHA256_HMAC:
case CKM_SHA384_HMAC:
case CKM_SHA512_HMAC:
case CKM_EC_KEY_PAIR_GEN:
case CKM_EC_EDWARDS_KEY_PAIR_GEN:
case CKM_ECDSA:
case CKM_ECDSA_SHA1:
case CKM_ECDSA_SHA224:
case CKM_ECDSA_SHA256:
case CKM_ECDSA_SHA384:
case CKM_ECDSA_SHA512:
case CKM_RSA_PKCS_KEY_PAIR_GEN:
case CKM_RSA_PKCS:
case CKM_MD5_RSA_PKCS:
case CKM_SHA1_RSA_PKCS:
case CKM_SHA224_RSA_PKCS:
case CKM_SHA256_RSA_PKCS:
case CKM_SHA384_RSA_PKCS:
case CKM_SHA512_RSA_PKCS:
/* No parameter expected, size shall be 0 */
if (mechanism->ulParameterLen)
return CKR_MECHANISM_PARAM_INVALID;
rv = serialize_32b(obj, obj->type);
if (rv)
return rv;
return serialize_32b(obj, 0);
case CKM_EDDSA:
return serialize_mecha_eddsa(obj, &mecha);
case CKM_AES_CBC:
case CKM_AES_CBC_PAD:
case CKM_AES_CTS:
return serialize_mecha_aes_iv(obj, &mecha);
case CKM_AES_CTR:
return serialize_mecha_aes_ctr(obj, &mecha);
case CKM_AES_GCM:
return serialize_mecha_aes_gcm(obj, &mecha);
case CKM_AES_ECB_ENCRYPT_DATA:
return serialize_mecha_key_deriv_str(obj, &mecha);
case CKM_AES_CBC_ENCRYPT_DATA:
return serialize_mecha_aes_cbc_encrypt_data(obj, &mecha);
case CKM_ECDH1_DERIVE:
case CKM_ECDH1_COFACTOR_DERIVE:
return serialize_mecha_ecdh1_derive_param(obj, &mecha);
case CKM_RSA_PKCS_PSS:
case CKM_SHA1_RSA_PKCS_PSS:
case CKM_SHA256_RSA_PKCS_PSS:
case CKM_SHA384_RSA_PKCS_PSS:
case CKM_SHA512_RSA_PKCS_PSS:
case CKM_SHA224_RSA_PKCS_PSS:
return serialize_mecha_rsa_pss_param(obj, &mecha);
case CKM_RSA_PKCS_OAEP:
return serialize_mecha_rsa_oaep_param(obj, &mecha);
case CKM_AES_CMAC_GENERAL:
case CKM_MD5_HMAC_GENERAL:
case CKM_SHA_1_HMAC_GENERAL:
case CKM_SHA224_HMAC_GENERAL:
case CKM_SHA256_HMAC_GENERAL:
case CKM_SHA384_HMAC_GENERAL:
case CKM_SHA512_HMAC_GENERAL:
return serialize_mecha_mac_general_param(obj, &mecha);
case CKM_RSA_AES_KEY_WRAP:
return serialize_mecha_rsa_aes_key_wrap(obj, &mecha);
default:
return CKR_MECHANISM_INVALID;
}
}

View File

@@ -0,0 +1,23 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2017-2020, Linaro Limited
*/
#ifndef LIBCKTEEC_SERIALIZE_CK_H
#define LIBCKTEEC_SERIALIZE_CK_H
#include <pkcs11.h>
#include "serializer.h"
/* Create (and allocate) a serial object for CK_ATTRIBUTE array */
CK_RV serialize_ck_attributes(struct serializer *obj,
CK_ATTRIBUTE_PTR attributes, CK_ULONG count);
/* Convert PKCS11 TA attributes back to CK_ATTRIBUTE array */
CK_RV deserialize_ck_attributes(uint8_t *in,
CK_ATTRIBUTE_PTR attributes, CK_ULONG count);
/* Create (and allocate) a serial object for CK_MECHANISM array */
CK_RV serialize_ck_mecha_params(struct serializer *obj,
CK_MECHANISM_PTR mechanisms);
#endif /*LIBCKTEEC_SERIALIZE_CK_H*/

View File

@@ -0,0 +1,76 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2017-2020, Linaro Limited
*/
#include <pkcs11_ta.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include "ck_helpers.h"
#include "local_utils.h"
#include "serializer.h"
CK_RV init_serial_object(struct serializer *obj)
{
struct pkcs11_object_head head = { 0 };
memset(obj, 0, sizeof(*obj));
return serialize_buffer(obj, &head, sizeof(head));
}
void finalize_serial_object(struct serializer *obj)
{
struct pkcs11_object_head head = { 0 };
head.attrs_size = obj->size - sizeof(head);
head.attrs_count = obj->item_count;
memcpy(obj->buffer, &head, sizeof(head));
}
void release_serial_object(struct serializer *obj)
{
free(obj->buffer);
obj->buffer = NULL;
}
/**
* serialize - append data in a serialized buffer
*
* Serialize data in provided buffer.
* Ensure 64byte alignment of appended data in the buffer.
*/
static CK_RV serialize(char **bstart, size_t *blen, void *data, size_t len)
{
size_t nlen = *blen + len;
char *buf = realloc(*bstart, nlen);
if (!buf)
return CKR_HOST_MEMORY;
memcpy(buf + *blen, data, len);
*blen = nlen;
*bstart = buf;
return CKR_OK;
}
CK_RV serialize_buffer(struct serializer *obj, void *data, size_t size)
{
return serialize(&obj->buffer, &obj->size, data, size);
}
CK_RV serialize_32b(struct serializer *obj, uint32_t data)
{
return serialize_buffer(obj, &data, sizeof(data));
}
CK_RV serialize_ck_ulong(struct serializer *obj, CK_ULONG data)
{
uint32_t data32 = data;
return serialize_buffer(obj, &data32, sizeof(data32));
}

View File

@@ -0,0 +1,34 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2017-2020, Linaro Limited
*/
#ifndef LIBCKTEEC_SERIALIZER_H
#define LIBCKTEEC_SERIALIZER_H
#include <pkcs11.h>
#include <pkcs11_ta.h>
#include <stddef.h>
#include <stdint.h>
/*
* Struct used to create the buffer storing the serialized data.
* Contains some fields to help parsing content (type/boolprops).
*/
struct serializer {
char *buffer; /* serial buffer base address */
size_t size; /* serial buffer current byte size */
size_t item_count; /* number of items in entry table */
uint32_t object;
uint32_t type;
};
/* Init/finalize/release a serializer object */
CK_RV init_serial_object(struct serializer *obj);
void finalize_serial_object(struct serializer *obj);
void release_serial_object(struct serializer *obj);
CK_RV serialize_buffer(struct serializer *obj, void *data, size_t size);
CK_RV serialize_32b(struct serializer *obj, uint32_t data);
CK_RV serialize_ck_ulong(struct serializer *obj, CK_ULONG data);
#endif /*LIBCKTEEC_SERIALIZER_H*/

View File

@@ -0,0 +1,65 @@
project(seteec
VERSION 0.1.0
LANGUAGES C)
################################################################################
# Packages
################################################################################
find_package(Threads REQUIRED)
if(NOT THREADS_FOUND)
message(FATAL_ERROR "Threads not found")
endif()
include(GNUInstallDirs)
################################################################################
# Source files
################################################################################
set(SRC
src/se.c
)
################################################################################
# Built library
################################################################################
add_library(seteec ${SRC})
set_target_properties(seteec PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
################################################################################
# Flags always set
################################################################################
target_compile_definitions(seteec
PRIVATE -D_GNU_SOURCE
PRIVATE -DBINARY_PREFIX="LT"
)
################################################################################
# Optional flags
################################################################################
################################################################################
# Public and private header and library dependencies
################################################################################
target_include_directories(seteec
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE src
)
target_link_libraries(seteec
PRIVATE pthread
PRIVATE teec
)
################################################################################
# Install targets
################################################################################
install(TARGETS seteec
DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
add_subdirectory(include)

View File

@@ -0,0 +1,71 @@
include ../flags.mk
include ../config.mk
OUT_DIR := $(OO)/libseteec
.PHONY: all libseteec clean
all: libseteec
install: libseteec
LIB_NAME := libseteec
MAJOR_VERSION := 0
MINOR_VERSION := 1
PATCH_VERSION := 0
LIB_MAJOR := $(LIB_NAME).so.$(MAJOR_VERSION)
LIB_MAJ_MIN := $(LIB_NAME).so.$(MAJOR_VERSION).$(MINOR_VERSION)
LIB_MAJ_MIN_PAT := $(LIB_NAME).so.$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION)
LIBSETEEC_SO_LIBRARY := $(LIB_MAJ_MIN_PAT)
LIBSETEEC_AR_LIBRARY := $(LIB_NAME).a
LIBSETEEC_SRC_DIR := src
LIBSETEEC_SRCS = se.c
LIBSETEEC_INCLUDES = ${CURDIR}/include
LIBSETEEC_INCLUDES += ${CURDIR}/../libteec/include
LIBSETEEC_CFLAGS := $(addprefix -I, $(LIBSETEEC_INCLUDES)) \
$(CFLAGS) -D_GNU_SOURCE -fPIC
LIBSETEEC_LFLAGS := $(LDFLAGS) -L$(OUT_DIR)/../libteec -lteec -lpthread
LIBSETEEC_OBJ_DIR := $(OUT_DIR)
LIBSETEEC_OBJS := $(patsubst %.c,$(LIBSETEEC_OBJ_DIR)/%.o, $(LIBSETEEC_SRCS))
$(LIBSETEEC_OBJ_DIR)/%.o: ${LIBSETEEC_SRC_DIR}/%.c
$(VPREFIX)mkdir -p $(LIBSETEEC_OBJ_DIR)
@echo " CC $<"
$(VPREFIX)$(CC) $(LIBSETEEC_CFLAGS) -c $< -o $@
libseteec: $(OUT_DIR)/$(LIBSETEEC_SO_LIBRARY)
$(OUT_DIR)/$(LIBSETEEC_SO_LIBRARY): $(LIBSETEEC_OBJS)
@echo " LINK $@"
$(VPREFIX)$(CC) -shared -Wl,-soname,$(LIB_MAJOR) -o $@ $+ $(LIBSETEEC_LFLAGS)
@echo ""
libseteec: $(OUT_DIR)/$(LIBSETEEC_AR_LIBRARY)
$(OUT_DIR)/$(LIBSETEEC_AR_LIBRARY): $(LIBSETEEC_OBJS)
@echo " AR $@"
$(VPREFIX)$(AR) rcs $@ $+
libseteec:
$(VPREFIX)ln -sf $(LIB_MAJ_MIN_PAT) $(OUT_DIR)/$(LIB_MAJ_MIN)
$(VPREFIX)ln -sf $(LIB_MAJ_MIN) $(OUT_DIR)/$(LIB_MAJOR)
$(VPREFIX)ln -sf $(LIB_MAJOR) $(OUT_DIR)/$(LIB_NAME).so
################################################################################
# Cleaning up configuration
################################################################################
clean:
$(RM) $(LIBSETEEC_OBJS)
$(RM) $(OUT_DIR)/$(LIB_MAJ_MIN_PAT)
$(RM) $(OUT_DIR)/$(LIB_MAJ_MIN)
$(RM) $(OUT_DIR)/$(LIB_MAJOR)
$(RM) $(OUT_DIR)/$(LIBSETEEC_SO_LIBRARY)
$(RM) $(OUT_DIR)/$(LIBSETEEC_AR_LIBRARY)
$(call rmdir,$(OUT_DIR))

View File

@@ -0,0 +1,7 @@
project(libseteec-headers C)
FILE(GLOB INSTALL_HEADERS "*.h")
add_library(${PROJECT_NAME} INTERFACE)
install(FILES ${INSTALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

View File

@@ -0,0 +1,90 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2021, Foundries.io
* Jorge Ramirez-Ortiz <jorge@foundries.io>
*/
#ifndef SE_TEE_H
#define SE_TEE_H
#include <unistd.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef unsigned long SE_ULONG;
typedef SE_ULONG SE_RV;
/* Values for type SR_RV */
#define SER_OK 0x0000
#define SER_CANT_OPEN_SESSION 0x0001
#define SER_ERROR_GENERIC 0x0002
/*
* Type identifier for the APDU message as described by Smart Card Standard ISO7816-4
* about ADPU message bodies decoding convention:
*
* https://cardwerk.com/smart-card-standard-iso7816-4-section-5-basic-organizations/#chap5_3_2
*/
enum se_apdu_type {
SE_APDU_NO_HINT,
SE_APDU_CASE_1,
SE_APDU_CASE_2,
SE_APDU_CASE_2E,
SE_APDU_CASE_3,
SE_APDU_CASE_3E,
SE_APDU_CASE_4,
SE_APDU_CASE_4E,
};
/**
* se_apdu_request() - Send an APDU message and get response.
*
* @param type Type of the APDU command.
* @param hdr Pointer to APDU message header.
* @param hdr_len Byte length of message header @hdr.
* @param src Pointer to APDU message payload.
* @param src_len Byte length of message payload @src.
* @param dst Pointer to APDU message reponse buffer.
* @param dst_len Byte length of reponse buffer @dst.
*
* @return SER_CANT_OPEN_SESSION Error opening the TEE session.
* @return SER_ERROR_GENERIC Error unspecified.
* @return SER_OK On success.
*/
SE_RV se_apdu_request(enum se_apdu_type type,
unsigned char *hdr, size_t hdr_len,
unsigned char *src, size_t src_len,
unsigned char *dst, size_t *dst_len);
/**
* se_scp03_enable() - Enable the SCP03 protocol using the keys active in the
* Secure Element.
*
* Enables the SCP03 session with the Secure Element.
*
* @return SER_CANT_OPEN_SESSION Error opening the TEE session.
* @return SER_ERROR_GENERIC Error unspecified.
* @return SER_OK On success.
*/
SE_RV se_scp03_enable(void);
/**
* se_scp03_rotate_keys_and_enable() - Attempt to replace the active SCP03 keys
* and enable the SCP03 session.
*
* Generates secure keys for the board and writes them in the Secure Element non
* volatile memory. Then re-enables the session.
*
* @return SER_CANT_OPEN_SESSION Error opening the TEE session.
* @return SER_ERROR_GENERIC Error unspecified.
* @return SER_OK On success.
*/
SE_RV se_scp03_rotate_keys_and_enable(void);
#ifdef __cplusplus
}
#endif
#endif /*SE_TEE_H*/

View File

@@ -0,0 +1,47 @@
/* SPDX-License-Identifier: BSD-3-Clause */
/*
* Copyright (C) 2021, Foundries Limited
* Author: Jorge Ramirez <jorge@foundries.io>
*/
#ifndef __PTA_APDU_H
#define __PTA_APDU_H
#define PTA_APDU_UUID { 0x3f3eb880, 0x3639, 0x11ec, \
{ 0x9b, 0x9d, 0x0f, 0x3f, 0xc9, 0x46, 0x8f, 0x50 } }
/*
* ADPU based communication with the Secure Element
*
* [in] value[0].a Use APDU TXRX hints: PTA_APDU_TXRX_CASE_*
* [in] memref[1].buffer APDU header.
* [in] memref[1].size APDU header length.
* [in] memref[2].buffer request (APDU raw frame).
* [in] memref[2].size request length.
* [out] memref[3].buffer response (APDU raw frame).
* [out] memref[3].size response length.
*
* Result:
* TEE_SUCCESS - Invoke command success
* TEE_ERROR_BAD_PARAMETERS - Incorrect input param
* TEE_ERROR_NOT_IMPLEMENTED - Invoke command not implemented
* TEE_ERROR_GENERIC - Invoke command failure
*/
#define PTA_CMD_TXRX_APDU_RAW_FRAME 0
/*
* Type identifier for the APDU message as described by Smart Card Standard
* ISO7816-4 about ADPU message bodies decoding convention:
*
* https://cardwerk.com/smart-card-standard-iso7816-4-section-5-basic-organizations/#chap5_3_2
*/
#define PTA_APDU_TXRX_CASE_NO_HINT 0
#define PTA_APDU_TXRX_CASE_1 1
#define PTA_APDU_TXRX_CASE_2 2
#define PTA_APDU_TXRX_CASE_2E 3
#define PTA_APDU_TXRX_CASE_3 4
#define PTA_APDU_TXRX_CASE_3E 5
#define PTA_APDU_TXRX_CASE_4 6
#define PTA_APDU_TXRX_CASE_4E 7
#endif /* __PTA_APDU_H */

View File

@@ -0,0 +1,31 @@
/* SPDX-License-Identifier: BSD-3-Clause */
/*
* Copyright (C) 2020, Foundries Limited
*/
#ifndef __PTA_SCP03_H
#define __PTA_SCP03_H
#define PTA_SCP03_UUID { 0xbe0e5821, 0xe718, 0x4f77, \
{ 0xab, 0x3e, 0x8e, 0x6c, 0x73, 0xa9, 0xc7, 0x35 } }
/*
* Enable SCP03 support on the SE
*
* [in] value[0].a Use session keys PTA_SCP03_SESSION_*
*
* Result:
* TEE_SUCCESS - Invoke command success
* TEE_ERROR_BAD_PARAMETERS - Incorrect input param
* TEE_ERROR_NOT_IMPLEMENTED - Invoke command not implemented
* TEE_ERROR_GENERIC - Invoke command failure
*/
#define PTA_CMD_ENABLE_SCP03 0
/* Enable the session using the current keys in the Secure Element */
#define PTA_SCP03_SESSION_CURRENT_KEYS 0
/* Enable the session after replacing the current keys in the Secure Element */
#define PTA_SCP03_SESSION_ROTATE_KEYS 1
#endif /* __PTA_SCP03_H */

View File

@@ -0,0 +1,149 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2021, Foundries.io Ltd
*/
#ifndef BINARY_PREFIX
#define BINARY_PREFIX "seteec"
#endif
#include <errno.h>
#include <inttypes.h>
#include <pthread.h>
#include <se_tee.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <tee_client_api.h>
#include <teec_trace.h>
#include "pta_apdu.h"
#include "pta_scp03.h"
struct ta_context {
pthread_mutex_t lock;
TEEC_Context context;
TEEC_Session session;
TEEC_UUID uuid;
bool open;
};
static struct ta_context apdu_ta_ctx = {
.lock = PTHREAD_MUTEX_INITIALIZER,
.uuid = PTA_APDU_UUID,
};
static struct ta_context scp03_ta_ctx = {
.lock = PTHREAD_MUTEX_INITIALIZER,
.uuid = PTA_SCP03_UUID,
};
static bool open_session(struct ta_context *ctx)
{
TEEC_Result res = TEEC_SUCCESS;
if (pthread_mutex_lock(&ctx->lock))
return false;
if (!ctx->open) {
res = TEEC_InitializeContext(NULL, &ctx->context);
if (!res) {
res = TEEC_OpenSession(&ctx->context, &ctx->session,
&ctx->uuid, TEEC_LOGIN_PUBLIC,
NULL, NULL, NULL);
if (!res)
ctx->open = true;
}
}
return !pthread_mutex_unlock(&ctx->lock) && !res;
}
static SE_RV do_scp03(uint32_t cmd)
{
TEEC_Operation op = { 0 };
if (!open_session(&scp03_ta_ctx))
return SER_CANT_OPEN_SESSION;
op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 0, 0, 0);
op.params[0].value.a = cmd;
if (TEEC_InvokeCommand(&scp03_ta_ctx.session,
PTA_CMD_ENABLE_SCP03, &op, NULL))
return SER_ERROR_GENERIC;
return SER_OK;
}
SE_RV se_scp03_enable(void)
{
return do_scp03(PTA_SCP03_SESSION_CURRENT_KEYS);
}
SE_RV se_scp03_rotate_keys_and_enable(void)
{
return do_scp03(PTA_SCP03_SESSION_ROTATE_KEYS);
}
SE_RV se_apdu_request(enum se_apdu_type apdu_type,
unsigned char *hdr, size_t hdr_len,
unsigned char *src, size_t src_len,
unsigned char *dst, size_t *dst_len)
{
uint32_t type = PTA_APDU_TXRX_CASE_NO_HINT;
TEEC_Operation op = { 0 };
switch (apdu_type) {
case SE_APDU_NO_HINT:
type = PTA_APDU_TXRX_CASE_NO_HINT;
break;
case SE_APDU_CASE_1:
type = PTA_APDU_TXRX_CASE_1;
break;
case SE_APDU_CASE_2:
type = PTA_APDU_TXRX_CASE_2;
break;
case SE_APDU_CASE_2E:
type = PTA_APDU_TXRX_CASE_2E;
break;
case SE_APDU_CASE_3:
type = PTA_APDU_TXRX_CASE_3;
break;
case SE_APDU_CASE_3E:
type = PTA_APDU_TXRX_CASE_3E;
break;
case SE_APDU_CASE_4:
type = PTA_APDU_TXRX_CASE_4;
break;
case SE_APDU_CASE_4E:
type = PTA_APDU_TXRX_CASE_4E;
break;
default:
return SER_ERROR_GENERIC;
}
if (!open_session(&apdu_ta_ctx))
return SER_CANT_OPEN_SESSION;
op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
TEEC_MEMREF_TEMP_INPUT,
TEEC_MEMREF_TEMP_INPUT,
TEEC_MEMREF_TEMP_OUTPUT);
op.params[0].value.a = type;
op.params[1].tmpref.buffer = hdr;
op.params[1].tmpref.size = hdr_len;
op.params[2].tmpref.buffer = src;
op.params[2].tmpref.size = src_len;
op.params[3].tmpref.buffer = dst;
op.params[3].tmpref.size = *dst_len;
if (TEEC_InvokeCommand(&apdu_ta_ctx.session,
PTA_CMD_TXRX_APDU_RAW_FRAME, &op, NULL))
return SER_ERROR_GENERIC;
*dst_len = op.params[3].tmpref.size;
return SER_OK;
}

View File

@@ -0,0 +1,59 @@
project(teeacl
VERSION 0.1.0
LANGUAGES C
)
include(GNUInstallDirs)
################################################################################
# Source files
################################################################################
set(SRC
src/group.c
src/tee_uuid.c
)
################################################################################
# Built library
################################################################################
add_library(teeacl ${SRC})
configure_file(teeacl.pc.in teeacl.pc @ONLY)
set_target_properties(teeacl PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
################################################################################
# Flags always set
################################################################################
target_compile_definitions(teeacl
PRIVATE -D_GNU_SOURCE
PRIVATE -DBINARY_PREFIX="LT"
)
################################################################################
# Public and private header and library dependencies
################################################################################
target_include_directories(teeacl PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(teeacl
PUBLIC PkgConfig::uuid
)
################################################################################
# Install targets
################################################################################
install(TARGETS teeacl
DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/teeacl.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
)

View File

@@ -0,0 +1,77 @@
include ../flags.mk
include ../config.mk
OUT_DIR := $(OO)/libteeacl
.PHONY: all libteeacl check-libuuid clean
all: libteeacl
install: libteeacl
LIB_NAME := libteeacl
MAJOR_VERSION := 0
MINOR_VERSION := 1
PATCH_VERSION := 0
LIB_MAJOR := $(LIB_NAME).so.$(MAJOR_VERSION)
LIB_MAJ_MIN := $(LIB_NAME).so.$(MAJOR_VERSION).$(MINOR_VERSION)
LIB_MAJ_MIN_PAT := $(LIB_NAME).so.$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION)
LIBTEEACL_SO_LIBRARY := $(LIB_MAJ_MIN_PAT)
LIBTEEACL_AR_LIBRARY := $(LIB_NAME).a
LIBTEEACL_SRC_DIR := src
LIBTEEACL_SRCS = group.c
LIBTEEACL_SRCS += tee_uuid.c
LIBTEEACL_INCLUDES = ${CURDIR}/include
LIBTEEACL_CFLAGS := $(addprefix -I, $(LIBTEEACL_INCLUDES)) \
$(shell $(PKG_CONFIG) --cflags uuid) \
$(CFLAGS) -D_GNU_SOURCE -fPIC
LIBTEEACL_LFLAGS := $(LDFLAGS) $(shell $(PKG_CONFIG) --libs uuid)
LIBTEEACL_OBJ_DIR := $(OUT_DIR)
LIBTEEACL_OBJS := $(patsubst %.c,$(LIBTEEACL_OBJ_DIR)/%.o, $(LIBTEEACL_SRCS))
$(LIBTEEACL_OBJ_DIR)/%.o: ${LIBTEEACL_SRC_DIR}/%.c
$(VPREFIX)mkdir -p $(LIBTEEACL_OBJ_DIR)
@echo " CC $<"
$(VPREFIX)$(CC) $(LIBTEEACL_CFLAGS) -c $< -o $@
libteeacl: check-libuuid
check-libuuid:
@echo " Finding uuid.pc"
$(VPREFIX)$(PKG_CONFIG) --atleast-version=2.34 uuid
libteeacl: $(OUT_DIR)/$(LIBTEEACL_SO_LIBRARY)
$(OUT_DIR)/$(LIBTEEACL_SO_LIBRARY): $(LIBTEEACL_OBJS)
@echo " LINK $@"
$(VPREFIX)$(CC) -shared -Wl,-soname,$(LIBTEEACL_SO_LIBRARY) -o $@ $+ $(LIBTEEACL_LFLAGS)
@echo ""
libteeacl: $(OUT_DIR)/$(LIBTEEACL_AR_LIBRARY)
$(OUT_DIR)/$(LIBTEEACL_AR_LIBRARY): $(LIBTEEACL_OBJS)
@echo " AR $@"
$(VPREFIX)$(AR) rcs $@ $+
libteeacl:
$(VPREFIX)ln -sf $(LIB_MAJ_MIN_PAT) $(OUT_DIR)/$(LIB_MAJ_MIN)
$(VPREFIX)ln -sf $(LIB_MAJ_MIN) $(OUT_DIR)/$(LIB_MAJOR)
$(VPREFIX)ln -sf $(LIB_MAJOR) $(OUT_DIR)/$(LIB_NAME).so
################################################################################
# Cleaning up configuration
################################################################################
clean:
$(RM) $(LIBTEEACL_OBJS)
$(RM) $(OUT_DIR)/$(LIB_MAJ_MIN_PAT)
$(RM) $(OUT_DIR)/$(LIB_MAJ_MIN)
$(RM) $(OUT_DIR)/$(LIB_MAJOR)
$(RM) $(OUT_DIR)/$(LIBTEEACL_SO_LIBRARY)
$(RM) $(OUT_DIR)/$(LIBTEEACL_AR_LIBRARY)
$(call rmdir,$(OUT_DIR))

View File

@@ -0,0 +1,99 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2020, Vaisala Oyj.
*/
/*
* Definitions for configuring and using Access Control List (ACL)
* based login methods.
*/
#ifndef TEEACL_H
#define TEEACL_H
#include <grp.h>
#include <uuid.h>
#ifdef __cplusplus
extern "C" {
#endif
// TEE Client UUID name space identifier (UUIDv4)
// same as `tee_client_uuid_ns` in linux kernel drivers/tee/tee_core.c
#define KERNEL_NAMESPACE "58ac9ca0-2086-4683-a1b8-ec4bc08e01b6"
/*
* len UUID = 36 characters
*
* Prefixes:
* public
* user:
* group:
*
* + '\0' character totals 43, roundup.
*/
/**
* Required length for UUID char buffers
*/
#define TEEACL_L_UUID 48
/**
* teeacl_gid_from_name - Try to resolve gid_t for a given `group_name`.
*
* If a matching group is found, zero is returned and `gid_out` will be set to
* the found value.
* If no group is found, -ENOENT is returned.
* If memory allocation fails, -ENOMEM is returned.
* For other failures, errno is returned.
*
* @param gid_out Ptr to gid result. Will be set to group id if a matching
* group is found.
* @param group_name Name of group to resolve.
* @return 0 if a matching group is found, see detailed description for other
* cases.
*/
int teeacl_gid_from_name(gid_t *gid_out, const char *group_name);
/**
* teeacl_group_acl_uuid() - Encode a group login ACL string to the
* provided uuid_buf
*
* @param uuid_buf A buffer of length TEEACL_L_UUID.
* @param group Group id to encode for login.
* @return 0 on success, otherwise a negative number is returned in case of failure.
*/
int teeacl_group_acl_uuid(char uuid_buf[TEEACL_L_UUID], gid_t group);
/**
* The possible return values of the *_user_is_member_of functions.
*/
enum rv_groupmember {
NOT_MEMBER,
IS_MEMBER,
E_MEMORY, /**< Failed to allocate memory. */
E_GROUPLIST /**< Failed to read group listing. */
};
/**
* teeacl_current_user_is_member_of() - Check if the effective user ID of
* the process is a member in `group`.
*
* @param group Group id to check membership of.
* @return enum rv_groupmember form result.
*/
enum rv_groupmember teeacl_current_user_is_member_of(gid_t group);
/**
* teeacl_user_is_member_of() - Check if `user` is a member in `group`.
*
* @param user Username string.
* @param group Group id to check membership of.
* @return enum rv_groupmember form result.
*/
enum rv_groupmember teeacl_user_is_member_of(const char *user, gid_t group);
#ifdef __cplusplus
} // extern "C"
#endif
#endif /* TEEACL_H */

View File

@@ -0,0 +1,98 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2020, Vaisala Oyj.
*/
#include <teeacl.h>
#include <errno.h>
#include <grp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
static long teeacl_getgr_r_size_max(void)
{
long s = sysconf(_SC_GETGR_R_SIZE_MAX);
if (s == -1)
return 1024;
return s;
};
int teeacl_gid_from_name(gid_t *gid_out, const char *group_name)
{
struct group grp = { 0 };
char *buffer = NULL;
struct group *result = NULL;
size_t b_size = 0;
int rv = 0;
b_size = teeacl_getgr_r_size_max();
buffer = calloc(1, b_size);
if (!buffer)
return -ENOMEM;
rv = getgrnam_r(group_name, &grp, buffer, b_size, &result);
free(buffer);
if (!result) {
if (rv == 0)
return -ENOENT;
else
return rv;
} else {
*gid_out = grp.gr_gid;
return 0;
}
}
enum rv_groupmember teeacl_current_user_is_member_of(gid_t group)
{
char username[L_cuserid] = { 0 };
cuserid(username);
return teeacl_user_is_member_of(username, group);
}
enum rv_groupmember teeacl_user_is_member_of(const char *user, gid_t group)
{
enum rv_groupmember result = E_MEMORY;
int ret = 0;
int i = 0;
int grouplistsize = 8; /* initial guess */
gid_t *p_groups = NULL;
gid_t *groups = calloc(grouplistsize, sizeof(gid_t));
if (!groups)
return E_MEMORY;
ret = getgrouplist(user, group, groups, &grouplistsize);
if (ret == -1) {
p_groups = groups;
/* we use realloc, since uClibc does not implement reallocarray */
groups = realloc(groups, grouplistsize * sizeof(gid_t));
if (!groups) {
free(p_groups);
return E_MEMORY;
}
ret = getgrouplist(user, group, groups, &grouplistsize);
if (ret == -1) {
result = E_GROUPLIST;
goto out;
}
}
for (i = 0; i < grouplistsize; ++i) {
if (group == groups[i]) {
result = IS_MEMBER;
goto out;
}
}
result = NOT_MEMBER;
out:
free(groups);
return result;
}

View File

@@ -0,0 +1,35 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2020, Vaisala Oyj.
*/
#include <teeacl.h>
#include <stdio.h>
#include <string.h>
#include <uuid.h>
int teeacl_group_acl_uuid(char uuid_buf[TEEACL_L_UUID], gid_t group)
{
uuid_t g_uuid = { 0 };
uuid_t k_uuid = { 0 };
char gid_buf[TEEACL_L_UUID] = { 0 };
size_t gid_buf_len = 0;
uint gstr_len = 6;
int rv = snprintf(gid_buf, TEEACL_L_UUID, "gid=%x", group);
if (rv < 0)
return rv;
if (rv >= TEEACL_L_UUID)
return -1;
rv = uuid_parse(KERNEL_NAMESPACE, k_uuid);
if (rv < 0)
return rv;
gid_buf_len = strnlen(gid_buf, TEEACL_L_UUID);
uuid_generate_sha1(g_uuid, k_uuid, gid_buf, gid_buf_len);
memcpy(uuid_buf, "group:", gstr_len);
uuid_unparse(g_uuid, uuid_buf + gstr_len);
return 0;
}

View File

@@ -0,0 +1,12 @@
prefix="@CMAKE_INSTALL_PREFIX@"
exec_prefix="${prefix}"
libdir="${prefix}/lib"
includedir="${prefix}/include"
Name: @PROJECT_NAME@
Description: Access Control List utilities for teec library
URL: @CMAKE_PROJECT_HOMEPAGE_URL@
Version: @PROJECT_VERSION@
Requires: uuid >= 2.34
Cflags: -I"${includedir}"
Libs: -L"${libdir}" -lteeacl

View File

@@ -0,0 +1,74 @@
project(libteec
VERSION 2.0.0
LANGUAGES C)
################################################################################
# Packages
################################################################################
find_package(Threads REQUIRED)
if(NOT THREADS_FOUND)
message(FATAL_ERROR "Threads not found")
endif()
################################################################################
# Configuration flags always included
################################################################################
set(CFG_TEE_CLIENT_LOG_LEVEL "1" CACHE STRING "libteec log level")
set(CFG_TEE_CLIENT_LOG_FILE "${CMAKE_INSTALL_LOCALSTATEDIR}/lib/tee/teec.log" CACHE STRING "Location of libteec log")
################################################################################
# Source files
################################################################################
set(SRC
src/tee_client_api.c
src/teec_trace.c
)
################################################################################
# Built library
################################################################################
add_library(teec ${SRC})
set(libteectgt teec)
configure_file(teec.pc.in teec.pc @ONLY)
set_target_properties(teec PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
################################################################################
# Flags always set
################################################################################
target_compile_definitions(teec
PRIVATE -D_GNU_SOURCE
PRIVATE -DDEBUGLEVEL_${CFG_TEE_CLIENT_LOG_LEVEL}
PRIVATE -DTEEC_LOG_FILE="${CFG_TEE_CLIENT_LOG_FILE}"
PRIVATE -DBINARY_PREFIX="LT"
)
################################################################################
# Public and private header and library dependencies
################################################################################
target_include_directories(teec
PUBLIC include
PRIVATE src
)
target_link_libraries(teec
PUBLIC ${CMAKE_THREAD_LIBS_INIT} # this is pthreads
)
################################################################################
# Install targets
################################################################################
install(TARGETS teec LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
install(DIRECTORY include
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/teec.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
)

View File

@@ -0,0 +1,63 @@
include ../flags.mk
include ../config.mk
OUT_DIR := $(OO)/libteec
.PHONY: all libteec clean
all: libteec
################################################################################
# Teec configuration
################################################################################
MAJOR_VERSION := 2
MINOR_VERSION := 0
PATCH_VERSION := 0
LIB_NAME := libteec.so
LIB_MAJOR := $(LIB_NAME).$(MAJOR_VERSION)
LIB_MAJ_MIN := $(LIB_NAME).$(MAJOR_VERSION).$(MINOR_VERSION)
LIB_MAJ_MIN_P := $(LIB_NAME).$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION)
TEEC_SRCS := tee_client_api.c \
teec_trace.c
TEEC_SRC_DIR := src
TEEC_OBJ_DIR := $(OUT_DIR)
TEEC_OBJS := $(patsubst %.c,$(TEEC_OBJ_DIR)/%.o, $(TEEC_SRCS))
TEEC_INCLUDES := \
${CURDIR}/include \
${CURDIR}/src
TEEC_CFLAGS := $(addprefix -I, $(TEEC_INCLUDES)) $(CFLAGS) -D_GNU_SOURCE \
-DDEBUGLEVEL_$(CFG_TEE_CLIENT_LOG_LEVEL) \
-DBINARY_PREFIX=\"TEEC\"
TEEC_LFLAGS := $(LDFLAGS) -lpthread
TEEC_LIBRARY := $(OUT_DIR)/$(LIB_MAJ_MIN_P)
libteec: $(TEEC_LIBRARY) $(OUT_DIR)/libteec.a
$(VPREFIX)ln -sf $(LIB_MAJ_MIN_P) $(OUT_DIR)/$(LIB_MAJOR)
$(VPREFIX)ln -sf $(LIB_MAJ_MIN_P) $(OUT_DIR)/$(LIB_MAJ_MIN)
$(VPREFIX)ln -sf $(LIB_MAJOR) $(OUT_DIR)/$(LIB_NAME)
$(TEEC_LIBRARY): $(TEEC_OBJS)
@echo " LINK $@"
$(VPREFIX)$(CC) -shared -Wl,-soname,$(LIB_MAJOR) -o $@ $+ $(TEEC_LFLAGS)
@echo ""
$(OUT_DIR)/libteec.a: $(TEEC_OBJS)
@echo " AR $@"
$(VPREFIX)$(AR) rcs $@ $+
$(TEEC_OBJ_DIR)/%.o: ${TEEC_SRC_DIR}/%.c
$(VPREFIX)mkdir -p $(TEEC_OBJ_DIR)
@echo " CC $<"
$(VPREFIX)$(CC) $(TEEC_CFLAGS) -c $< -o $@
################################################################################
# Cleaning up configuration
################################################################################
clean:
$(RM) $(TEEC_OBJS) $(TEEC_LIBRARY) $(OUT_DIR)/$(LIB_MAJOR) \
$(OUT_DIR)/$(LIB_MAJ_MIN) $(OUT_DIR)/$(LIB_NAME)
$(RM) $(OUT_DIR)/libteec.a
$(call rmdir,$(OUT_DIR))

View File

@@ -0,0 +1,583 @@
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* All rights reserved.
* Copyright (c) 2015, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TEE_CLIENT_API_H
#define TEE_CLIENT_API_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <limits.h>
/*
* Defines the number of available memory references in an open session or
* invoke command operation payload.
*/
#define TEEC_CONFIG_PAYLOAD_REF_COUNT 4
/**
* Defines the maximum size of a single shared memory block, in bytes, of both
* API allocated and API registered memory. There is no good value to put here
* (limits depend on specific config used), so this define does not provide any
* restriction in this implementation.
*/
#define TEEC_CONFIG_SHAREDMEM_MAX_SIZE ULONG_MAX
/**
* Flag constants indicating the type of parameters encoded inside the
* operation payload (TEEC_Operation), Type is uint32_t.
*
* TEEC_NONE The Parameter is not used
*
* TEEC_VALUE_INPUT The Parameter is a TEEC_Value tagged as input.
*
* TEEC_VALUE_OUTPUT The Parameter is a TEEC_Value tagged as output.
*
* TEEC_VALUE_INOUT The Parameter is a TEEC_Value tagged as both as
* input and output, i.e., for which both the
* behaviors of TEEC_VALUE_INPUT and
* TEEC_VALUE_OUTPUT apply.
*
* TEEC_MEMREF_TEMP_INPUT The Parameter is a TEEC_TempMemoryReference
* describing a region of memory which needs to be
* temporarily registered for the duration of the
* Operation and is tagged as input.
*
* TEEC_MEMREF_TEMP_OUTPUT Same as TEEC_MEMREF_TEMP_INPUT, but the Memory
* Reference is tagged as output. The
* Implementation may update the size field to
* reflect the required output size in some use
* cases.
*
* TEEC_MEMREF_TEMP_INOUT A Temporary Memory Reference tagged as both
* input and output, i.e., for which both the
* behaviors of TEEC_MEMREF_TEMP_INPUT and
* TEEC_MEMREF_TEMP_OUTPUT apply.
*
* TEEC_MEMREF_WHOLE The Parameter is a Registered Memory Reference
* that refers to the entirety of its parent Shared
* Memory block. The parameter structure is a
* TEEC_RegisteredMemoryReference. In this
* structure, the Implementation MUST read only the
* parent field and MAY update the size field when
* the operation completes.
*
* TEEC_MEMREF_PARTIAL_INPUT A Registered Memory Reference structure that
* refers to a partial region of its parent Shared
* Memory block and is tagged as input.
*
* TEEC_MEMREF_PARTIAL_OUTPUT Registered Memory Reference structure that
* refers to a partial region of its parent Shared
* Memory block and is tagged as output.
*
* TEEC_MEMREF_PARTIAL_INOUT The Registered Memory Reference structure that
* refers to a partial region of its parent Shared
* Memory block and is tagged as both input and
* output, i.e., for which both the behaviors of
* TEEC_MEMREF_PARTIAL_INPUT and
* TEEC_MEMREF_PARTIAL_OUTPUT apply.
*/
#define TEEC_NONE 0x00000000
#define TEEC_VALUE_INPUT 0x00000001
#define TEEC_VALUE_OUTPUT 0x00000002
#define TEEC_VALUE_INOUT 0x00000003
#define TEEC_MEMREF_TEMP_INPUT 0x00000005
#define TEEC_MEMREF_TEMP_OUTPUT 0x00000006
#define TEEC_MEMREF_TEMP_INOUT 0x00000007
#define TEEC_MEMREF_WHOLE 0x0000000C
#define TEEC_MEMREF_PARTIAL_INPUT 0x0000000D
#define TEEC_MEMREF_PARTIAL_OUTPUT 0x0000000E
#define TEEC_MEMREF_PARTIAL_INOUT 0x0000000F
/**
* Flag constants indicating the data transfer direction of memory in
* TEEC_Parameter. TEEC_MEM_INPUT signifies data transfer direction from the
* client application to the TEE. TEEC_MEM_OUTPUT signifies data transfer
* direction from the TEE to the client application. Type is uint32_t.
*
* TEEC_MEM_INPUT The Shared Memory can carry data from the client
* application to the Trusted Application.
* TEEC_MEM_OUTPUT The Shared Memory can carry data from the Trusted
* Application to the client application.
*/
#define TEEC_MEM_INPUT 0x00000001
#define TEEC_MEM_OUTPUT 0x00000002
/**
* Return values. Type is TEEC_Result
*
* TEEC_SUCCESS The operation was successful.
* TEEC_ERROR_GENERIC Non-specific cause.
* TEEC_ERROR_ACCESS_DENIED Access privileges are not sufficient.
* TEEC_ERROR_CANCEL The operation was canceled.
* TEEC_ERROR_ACCESS_CONFLICT Concurrent accesses caused conflict.
* TEEC_ERROR_EXCESS_DATA Too much data for the requested operation was
* passed.
* TEEC_ERROR_BAD_FORMAT Input data was of invalid format.
* TEEC_ERROR_BAD_PARAMETERS Input parameters were invalid.
* TEEC_ERROR_BAD_STATE Operation is not valid in the current state.
* TEEC_ERROR_ITEM_NOT_FOUND The requested data item is not found.
* TEEC_ERROR_NOT_IMPLEMENTED The requested operation should exist but is not
* yet implemented.
* TEEC_ERROR_NOT_SUPPORTED The requested operation is valid but is not
* supported in this implementation.
* TEEC_ERROR_NO_DATA Expected data was missing.
* TEEC_ERROR_OUT_OF_MEMORY System ran out of resources.
* TEEC_ERROR_BUSY The system is busy working on something else.
* TEEC_ERROR_COMMUNICATION Communication with a remote party failed.
* TEEC_ERROR_SECURITY A security fault was detected.
* TEEC_ERROR_SHORT_BUFFER The supplied buffer is too short for the
* generated output.
* TEE_ERROR_EXTERNAL_CANCEL Defined by the Trusted User Interface
* specification: An external event has caused a
* User Interface operation to be aborted.
* TEEC_ERROR_EXTERNAL_CANCEL Deprecated: not specified in client API, use
* TEE_ERROR_EXTERNAL_CANCEL intead.
* TEE_ERROR_OVERFLOW Internal TEE error documented for completeness
* TEE_ERROR_TARGET_DEAD The Trusted Application has terminated.
* TEEC_ERROR_TARGET_DEAD The Trusted Application has terminated.
* TEE_ERROR_STORAGE_NO_SPACE Internal TEE error documented for completeness
* TEEC_ERROR_STORAGE_NO_SPACE Deprecated: not specified in client API, use
* TEE_ERROR_STORAGE_NO_SPACE instead.
* TEE_ERROR_MAC_INVALID Internal TEE error documented for completeness
* TEE_ERROR_SIGNATURE_INVALID Internal TEE error documented for completeness
* TEE_ERROR_TIME_NOT_SET Internal TEE error documented for completeness
* TEE_ERROR_TIME_NEEDS_RESET Internal TEE error documented for completeness
*/
/**
* Standard defined error codes.
*/
#define TEEC_SUCCESS 0x00000000
#define TEEC_ERROR_STORAGE_NOT_AVAILABLE 0xF0100003
#define TEEC_ERROR_GENERIC 0xFFFF0000
#define TEEC_ERROR_ACCESS_DENIED 0xFFFF0001
#define TEEC_ERROR_CANCEL 0xFFFF0002
#define TEEC_ERROR_ACCESS_CONFLICT 0xFFFF0003
#define TEEC_ERROR_EXCESS_DATA 0xFFFF0004
#define TEEC_ERROR_BAD_FORMAT 0xFFFF0005
#define TEEC_ERROR_BAD_PARAMETERS 0xFFFF0006
#define TEEC_ERROR_BAD_STATE 0xFFFF0007
#define TEEC_ERROR_ITEM_NOT_FOUND 0xFFFF0008
#define TEEC_ERROR_NOT_IMPLEMENTED 0xFFFF0009
#define TEEC_ERROR_NOT_SUPPORTED 0xFFFF000A
#define TEEC_ERROR_NO_DATA 0xFFFF000B
#define TEEC_ERROR_OUT_OF_MEMORY 0xFFFF000C
#define TEEC_ERROR_BUSY 0xFFFF000D
#define TEEC_ERROR_COMMUNICATION 0xFFFF000E
#define TEEC_ERROR_SECURITY 0xFFFF000F
#define TEEC_ERROR_SHORT_BUFFER 0xFFFF0010
#define TEE_ERROR_EXTERNAL_CANCEL 0xFFFF0011
#define TEEC_ERROR_EXTERNAL_CANCEL 0xFFFF0011
#define TEE_ERROR_OVERFLOW 0xFFFF300F
#define TEE_ERROR_TARGET_DEAD 0xFFFF3024
#define TEEC_ERROR_TARGET_DEAD 0xFFFF3024
#define TEE_ERROR_STORAGE_NO_SPACE 0xFFFF3041
#define TEEC_ERROR_STORAGE_NO_SPACE 0xFFFF3041
#define TEE_ERROR_MAC_INVALID 0xFFFF3071
#define TEE_ERROR_SIGNATURE_INVALID 0xFFFF3072
#define TEE_ERROR_TIME_NOT_SET 0xFFFF5000
#define TEE_ERROR_TIME_NEEDS_RESET 0xFFFF5001
/**
* Function error origins, of type TEEC_ErrorOrigin. These indicate where in
* the software stack a particular return value originates from.
*
* TEEC_ORIGIN_API The error originated within the TEE Client API
* implementation.
* TEEC_ORIGIN_COMMS The error originated within the underlying
* communications stack linking the rich OS with
* the TEE.
* TEEC_ORIGIN_TEE The error originated within the common TEE code.
* TEEC_ORIGIN_TRUSTED_APP The error originated within the Trusted Application
* code.
*/
#define TEEC_ORIGIN_API 0x00000001
#define TEEC_ORIGIN_COMMS 0x00000002
#define TEEC_ORIGIN_TEE 0x00000003
#define TEEC_ORIGIN_TRUSTED_APP 0x00000004
/**
* Session login methods, for use in TEEC_OpenSession() as parameter
* connectionMethod. Type is uint32_t.
*
* TEEC_LOGIN_PUBLIC No login data is provided.
* TEEC_LOGIN_USER Login data about the user running the Client
* Application process is provided.
* TEEC_LOGIN_GROUP Login data about the group running the Client
* Application process is provided.
* TEEC_LOGIN_APPLICATION Login data about the running Client Application
* itself is provided.
* TEEC_LOGIN_USER_APPLICATION Login data about the user and the running
* Client Application itself is provided.
* TEEC_LOGIN_GROUP_APPLICATION Login data about the group and the running
* Client Application itself is provided.
*/
#define TEEC_LOGIN_PUBLIC 0x00000000
#define TEEC_LOGIN_USER 0x00000001
#define TEEC_LOGIN_GROUP 0x00000002
#define TEEC_LOGIN_APPLICATION 0x00000004
#define TEEC_LOGIN_USER_APPLICATION 0x00000005
#define TEEC_LOGIN_GROUP_APPLICATION 0x00000006
/**
* Encode the paramTypes according to the supplied types.
*
* @param p0 The first param type.
* @param p1 The second param type.
* @param p2 The third param type.
* @param p3 The fourth param type.
*/
#define TEEC_PARAM_TYPES(p0, p1, p2, p3) \
((p0) | ((p1) << 4) | ((p2) << 8) | ((p3) << 12))
/**
* Get the i_th param type from the paramType.
*
* @param p The paramType.
* @param i The i-th parameter to get the type for.
*/
#define TEEC_PARAM_TYPE_GET(p, i) (((p) >> (i * 4)) & 0xF)
typedef uint32_t TEEC_Result;
/**
* struct TEEC_Context - Represents a connection between a client application
* and a TEE.
*/
typedef struct {
/* Implementation defined */
struct {
int fd;
bool reg_mem;
bool memref_null;
} imp;
} TEEC_Context;
/**
* This type contains a Universally Unique Resource Identifier (UUID) type as
* defined in RFC4122. These UUID values are used to identify Trusted
* Applications.
*/
typedef struct {
uint32_t timeLow;
uint16_t timeMid;
uint16_t timeHiAndVersion;
uint8_t clockSeqAndNode[8];
} TEEC_UUID;
/**
* struct TEEC_SharedMemory - Memory to transfer data between a client
* application and trusted code.
*
* @param buffer The memory buffer which is to be, or has been, shared
* with the TEE.
* @param size The size, in bytes, of the memory buffer.
* @param flags Bit-vector which holds properties of buffer.
* The bit-vector can contain either or both of the
* TEEC_MEM_INPUT and TEEC_MEM_OUTPUT flags.
*
* A shared memory block is a region of memory allocated in the context of the
* client application memory space that can be used to transfer data between
* that client application and a trusted application. The user of this struct
* is responsible to populate the buffer pointer.
*/
typedef struct {
void *buffer;
size_t size;
uint32_t flags;
/*
* Implementation defined
*/
struct {
int id;
size_t alloced_size;
void *shadow_buffer;
int registered_fd;
uint32_t flags;
} imp;
} TEEC_SharedMemory;
/**
* struct TEEC_TempMemoryReference - Temporary memory to transfer data between
* a client application and trusted code, only used for the duration of the
* operation.
*
* @param buffer The memory buffer which is to be, or has been shared with
* the TEE.
* @param size The size, in bytes, of the memory buffer.
*
* A memory buffer that is registered temporarily for the duration of the
* operation to be called.
*/
typedef struct {
void *buffer;
size_t size;
} TEEC_TempMemoryReference;
/**
* struct TEEC_RegisteredMemoryReference - use a pre-registered or
* pre-allocated shared memory block of memory to transfer data between
* a client application and trusted code.
*
* @param parent Points to a shared memory structure. The memory reference
* may utilize the whole shared memory or only a part of it.
* Must not be NULL
*
* @param size The size, in bytes, of the memory buffer.
*
* @param offset The offset, in bytes, of the referenced memory region from
* the start of the shared memory block.
*
*/
typedef struct {
TEEC_SharedMemory *parent;
size_t size;
size_t offset;
} TEEC_RegisteredMemoryReference;
/**
* struct TEEC_Value - Small raw data container
*
* Instead of allocating a shared memory buffer this structure can be used
* to pass small raw data between a client application and trusted code.
*
* @param a The first integer value.
*
* @param b The second value.
*/
typedef struct {
uint32_t a;
uint32_t b;
} TEEC_Value;
/**
* union TEEC_Parameter - Memory container to be used when passing data between
* client application and trusted code.
*
* Either the client uses a shared memory reference, parts of it or a small raw
* data container.
*
* @param tmpref A temporary memory reference only valid for the duration
* of the operation.
*
* @param memref The entire shared memory or parts of it.
*
* @param value The small raw data container to use
*/
typedef union {
TEEC_TempMemoryReference tmpref;
TEEC_RegisteredMemoryReference memref;
TEEC_Value value;
} TEEC_Parameter;
/**
* struct TEEC_Session - Represents a connection between a client application
* and a trusted application.
*/
typedef struct {
/* Implementation defined */
struct {
TEEC_Context *ctx;
uint32_t session_id;
} imp;
} TEEC_Session;
/**
* struct TEEC_Operation - Holds information and memory references used in
* TEEC_InvokeCommand().
*
* @param started Client must initialize to zero if it needs to cancel
* an operation about to be performed.
* @param paramTypes Type of data passed. Use TEEC_PARAM_TYPES macro to
* create the correct flags.
* 0 means TEEC_NONE is passed for all params.
* @param params Array of parameters of type TEEC_Parameter.
* @param imp Implementation defined parameter. Here it is a struct
* containing one parameter: session. session is an
* internal pointer to the last session used by
* TEEC_InvokeCommand with this operation.
*
*/
typedef struct {
uint32_t started;
uint32_t paramTypes;
TEEC_Parameter params[TEEC_CONFIG_PAYLOAD_REF_COUNT];
/* Implementation defined */
struct {
TEEC_Session *session;
} imp;
} TEEC_Operation;
/**
* TEEC_InitializeContext() - Initializes a context holding connection
* information on the specific TEE, designated by the name string.
* @param name A zero-terminated string identifying the TEE to connect to.
* If name is set to NULL, the default TEE is connected to. NULL
* is the only supported value in this version of the API
* implementation.
*
* @param context The context structure which is to be initialized.
*
* @return TEEC_SUCCESS The initialization was successful.
* @return TEEC_Result Something failed.
*/
TEEC_Result TEEC_InitializeContext(const char *name, TEEC_Context *context);
/**
* TEEC_FinalizeContext() - Destroys a context holding connection information
* on the specific TEE.
*
* This function destroys an initialized TEE context, closing the connection
* between the client application and the TEE. This function must only be
* called when all sessions related to this TEE context have been closed and
* all shared memory blocks have been released.
*
* @param context The context to be destroyed.
*/
void TEEC_FinalizeContext(TEEC_Context *context);
/**
* TEEC_OpenSession() - Opens a new session with the specified trusted
* application.
*
* @param context The initialized TEE context structure in which
* scope to open the session.
* @param session The session to initialize.
* @param destination A structure identifying the trusted application
* with which to open a session.
*
* @param connectionMethod The connection method to use.
* @param connectionData Any data necessary to connect with the chosen
* connection method. Not supported, should be set to
* NULL.
* @param operation An operation structure to use in the session. May
* be set to NULL to signify no operation structure
* needed.
*
* @param returnOrigin A parameter which will hold the error origin if
* this function returns any value other than
* TEEC_SUCCESS.
*
* @return TEEC_SUCCESS OpenSession successfully opened a new session.
* @return TEEC_Result Something failed.
*
*/
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);
/**
* TEEC_CloseSession() - Closes the session which has been opened with the
* specific trusted application.
*
* @param session The opened session to close.
*/
void TEEC_CloseSession(TEEC_Session *session);
/**
* TEEC_InvokeCommand() - Executes a command in the specified trusted
* application.
*
* @param session A handle to an open connection to the trusted
* application.
* @param commandID Identifier of the command in the trusted application
* to invoke.
* @param operation An operation structure to use in the invoke command.
* May be set to NULL to signify no operation structure
* needed.
* @param returnOrigin A parameter which will hold the error origin if this
* function returns any value other than TEEC_SUCCESS.
*
* @return TEEC_SUCCESS OpenSession successfully opened a new session.
* @return TEEC_Result Something failed.
*/
TEEC_Result TEEC_InvokeCommand(TEEC_Session *session,
uint32_t commandID,
TEEC_Operation *operation,
uint32_t *returnOrigin);
/**
* TEEC_RegisterSharedMemory() - Register a block of existing memory as a
* shared block within the scope of the specified context.
*
* @param context The initialized TEE context structure in which scope to
* open the session.
* @param sharedMem pointer to the shared memory structure to register.
*
* @return TEEC_SUCCESS The registration was successful.
* @return TEEC_ERROR_OUT_OF_MEMORY Memory exhaustion.
* @return TEEC_Result Something failed.
*/
TEEC_Result TEEC_RegisterSharedMemory(TEEC_Context *context,
TEEC_SharedMemory *sharedMem);
/**
* TEEC_AllocateSharedMemory() - Allocate shared memory for TEE.
*
* @param context The initialized TEE context structure in which scope to
* open the session.
* @param sharedMem Pointer to the allocated shared memory.
*
* @return TEEC_SUCCESS The registration was successful.
* @return TEEC_ERROR_OUT_OF_MEMORY Memory exhaustion.
* @return TEEC_Result Something failed.
*/
TEEC_Result TEEC_AllocateSharedMemory(TEEC_Context *context,
TEEC_SharedMemory *sharedMem);
/**
* TEEC_ReleaseSharedMemory() - Free or deregister the shared memory.
*
* @param sharedMem Pointer to the shared memory to be freed.
*/
void TEEC_ReleaseSharedMemory(TEEC_SharedMemory *sharedMemory);
/**
* TEEC_RequestCancellation() - Request the cancellation of a pending open
* session or command invocation.
*
* @param operation Pointer to an operation previously passed to open session
* or invoke.
*/
void TEEC_RequestCancellation(TEEC_Operation *operation);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,57 @@
/*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TEE_CLIENT_API_EXTENSIONS_H
#define TEE_CLIENT_API_EXTENSIONS_H
#include <tee_client_api.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* TEEC_RegisterMemoryFileDescriptor() - Register a block of existing memory as
* a shared block within the scope of the specified context.
*
* @param context The initialized TEE context structure in which scope to
* open the session.
* @param sharedMem pointer to the shared memory structure to register.
* @param fd file descriptor of the target memory.
*
* @return TEEC_SUCCESS The registration was successful.
* @return TEEC_ERROR_OUT_OF_MEMORY Memory exhaustion.
* @return TEEC_Result Something failed.
*/
TEEC_Result TEEC_RegisterSharedMemoryFileDescriptor(TEEC_Context *context,
TEEC_SharedMemory *sharedMem,
int fd);
#ifdef __cplusplus
}
#endif
#endif /* TEE_CLIENT_API_EXTENSIONS_H */

View File

@@ -0,0 +1,20 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2020, Open Mobile Platform LLC
*/
#ifndef TEE_PLUGIN_METHOD_H
#define TEE_PLUGIN_METHOD_H
#include <stddef.h>
#include <tee_client_api.h>
struct plugin_method {
const char *name; /* short friendly name of the plugin */
TEEC_UUID uuid;
TEEC_Result (*init)(void);
TEEC_Result (*invoke)(unsigned int cmd, unsigned int sub_cmd,
void *data, size_t in_len, size_t *out_len);
};
#endif /* TEE_PLUGIN_METHOD_H */

View File

@@ -0,0 +1,147 @@
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TEEC_TRACE_H
#define TEEC_TRACE_H
#ifdef __cplusplus
extern "C" {
#endif
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#ifndef BINARY_PREFIX
#error "BINARY_PREFIX not defined"
#endif
/*
* Trace levels.
*
* ERROR is used when some kind of error has happened, this is most likely the
* print you will use most of the time when you report some kind of error.
*
* INFO is used when you want to print some 'normal' text to the user.
* This is the default level.
*
* DEBUG is used to print extra information to enter deeply in the module.
*
* FLOW is used to print the execution flox, typically the in/out of functions.
*
* */
#define TRACE_ERROR 1
#define TRACE_INFO 2
#define TRACE_DEBUG 3
#define TRACE_FLOW 4
#if defined(DEBUGLEVEL_0) && !defined(DEBUGLEVEL)
#define DEBUGLEVEL TRACE_ERROR
#endif
#if defined(DEBUGLEVEL_1) && !defined(DEBUGLEVEL)
#define DEBUGLEVEL TRACE_ERROR
#endif
#if defined(DEBUGLEVEL_2) && !defined(DEBUGLEVEL)
#define DEBUGLEVEL TRACE_INFO
#endif
#if defined(DEBUGLEVEL_3) && !defined(DEBUGLEVEL)
#define DEBUGLEVEL TRACE_DEBUG
#endif
#if defined(DEBUGLEVEL_4) && !defined(DEBUGLEVEL)
#define DEBUGLEVEL TRACE_FLOW
#endif
#ifndef DEBUGLEVEL
/* Default debug level. */
#define DEBUGLEVEL TRACE_INFO
#endif
/*
* This define make sure that parameters are checked in the same manner as it
* is done in the normal printf function.
*/
#define __PRINTFLIKE(__fmt, __varargs) __attribute__\
((__format__(__printf__, __fmt, __varargs)))
void _dprintf(const char *function, int line, int level, const char *prefix,
const char *fmt, ...) __PRINTFLIKE(5, 6);
#define dprintf(level, x...) do { \
if ((level) <= DEBUGLEVEL) { \
_dprintf(__func__, __LINE__, level, \
BINARY_PREFIX, x); \
} \
} while (0)
#define EMSG(fmt, ...) dprintf(TRACE_ERROR, fmt "\n", ##__VA_ARGS__)
#define IMSG(fmt, ...) dprintf(TRACE_INFO, fmt "\n", ##__VA_ARGS__)
#define DMSG(fmt, ...) dprintf(TRACE_DEBUG, fmt "\n", ##__VA_ARGS__)
#define FMSG(fmt, ...) dprintf(TRACE_FLOW, fmt "\n", ##__VA_ARGS__)
#define INMSG(fmt, ...) FMSG("> " fmt, ##__VA_ARGS__)
#define OUTMSG(fmt, ...) FMSG("< " fmt, ##__VA_ARGS__)
#define OUTRMSG(r) \
do { \
if (r) \
EMSG("Function returns with [%d]", r); \
OUTMSG("r=[%d]", r); \
return r; \
} while (0)
#define dprintf_raw(level, x...) do { \
if ((level) <= DEBUGLEVEL) \
_dprintf(0, 0, (level), BINARY_PREFIX, x); \
} while (0)
#define EMSG_RAW(fmt, ...) dprintf_raw(TRACE_ERROR, fmt, ##__VA_ARGS__)
#define IMSG_RAW(fmt, ...) dprintf_raw(TRACE_INFO, fmt, ##__VA_ARGS__)
#define DMSG_RAW(fmt, ...) dprintf_raw(TRACE_DEBUG, fmt, ##__VA_ARGS__)
#define FMSG_RAW(fmt, ...) dprintf_raw(TRACE_FLOW, fmt, ##__VA_ARGS__)
/*
* This function will hex and ascii dump a buffer.
*
* Note that this function will only print if debug flag
* DEBUGLEVEL is INFO or FLOOD.
*
* @param bname Information string describing the buffer.
* @param buffer Pointer to the buffer.
* @param blen Length of the buffer.
*
* @return void
*/
void dump_buffer(const char *bname, const uint8_t *buffer, size_t blen);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,417 @@
/*
* Copyright (c) 2015-2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __TEE_H
#define __TEE_H
#include <linux/ioctl.h>
#include <linux/types.h>
/*
* This file describes the API provided by a TEE driver to user space.
*
* Each TEE driver defines a TEE specific protocol which is used for the
* data passed back and forth using TEE_IOC_CMD.
*/
/* Helpers to make the ioctl defines */
#define TEE_IOC_MAGIC 0xa4
#define TEE_IOC_BASE 0
/* Flags relating to shared memory */
#define TEE_IOCTL_SHM_MAPPED 0x1 /* memory mapped in normal world */
#define TEE_IOCTL_SHM_DMA_BUF 0x2 /* dma-buf handle on shared memory */
#define TEE_MAX_ARG_SIZE 1024
#define TEE_GEN_CAP_GP (1 << 0)/* GlobalPlatform compliant TEE */
#define TEE_GEN_CAP_PRIVILEGED (1 << 1)/* Privileged device (for supplicant) */
#define TEE_GEN_CAP_REG_MEM (1 << 2)/* Supports registering shared memory */
#define TEE_GEN_CAP_MEMREF_NULL (1 << 3) /* Support NULL MemRef */
#define TEE_MEMREF_NULL ((__u64)-1) /* NULL MemRef Buffer */
/*
* TEE Implementation ID
*/
#define TEE_IMPL_ID_OPTEE 1
#define TEE_IMPL_ID_AMDTEE 2
/*
* OP-TEE specific capabilities
*/
#define TEE_OPTEE_CAP_TZ (1 << 0)
/**
* struct tee_ioctl_version_data - TEE version
* @impl_id: [out] TEE implementation id
* @impl_caps: [out] Implementation specific capabilities
* @gen_caps: [out] Generic capabilities, defined by TEE_GEN_CAPS_* above
*
* Identifies the TEE implementation, @impl_id is one of TEE_IMPL_ID_* above.
* @impl_caps is implementation specific, for example TEE_OPTEE_CAP_*
* is valid when @impl_id == TEE_IMPL_ID_OPTEE.
*/
struct tee_ioctl_version_data {
__u32 impl_id;
__u32 impl_caps;
__u32 gen_caps;
};
/**
* TEE_IOC_VERSION - query version of TEE
*
* Takes a tee_ioctl_version_data struct and returns with the TEE version
* data filled in.
*/
#define TEE_IOC_VERSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 0, \
struct tee_ioctl_version_data)
/**
* struct tee_ioctl_shm_alloc_data - Shared memory allocate argument
* @size: [in/out] Size of shared memory to allocate
* @flags: [in/out] Flags to/from allocation.
* @id: [out] Identifier of the shared memory
*
* The flags field should currently be zero as input. Updated by the call
* with actual flags as defined by TEE_IOCTL_SHM_* above.
* This structure is used as argument for TEE_IOC_SHM_ALLOC below.
*/
struct tee_ioctl_shm_alloc_data {
__u64 size;
__u32 flags;
__s32 id;
};
/**
* TEE_IOC_SHM_ALLOC - allocate shared memory
*
* Allocates shared memory between the user space process and secure OS.
*
* Returns a file descriptor on success or < 0 on failure
*
* The returned file descriptor is used to map the shared memory into user
* space. The shared memory is freed when the descriptor is closed and the
* memory is unmapped.
*/
#define TEE_IOC_SHM_ALLOC _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + 1, \
struct tee_ioctl_shm_alloc_data)
/**
* struct tee_ioctl_shm_register_fd_data - Shared memory registering argument
* @fd: [in] file descriptor identifying the shared memory
* @size: [out] Size of shared memory to allocate
* @flags: [in] Flags to/from allocation.
* @id: [out] Identifier of the shared memory
*
* The flags field should currently be zero as input. Updated by the call
* with actual flags as defined by TEE_IOCTL_SHM_* above.
* This structure is used as argument for TEE_IOC_SHM_ALLOC below.
*/
struct tee_ioctl_shm_register_fd_data {
__s64 fd;
__u64 size;
__u32 flags;
__s32 id;
} __aligned(8);
/*
* Attributes for struct tee_ioctl_param, selects field in the union
*/
#define TEE_IOCTL_PARAM_ATTR_TYPE_NONE 0 /* parameter not used */
/*
* These defines value parameters (struct tee_ioctl_param_value)
*/
#define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT 1
#define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_OUTPUT 2
#define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT 3 /* input and output */
/*
* These defines shared memory reference parameters (struct
* tee_ioctl_param_memref)
*/
#define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT 5
#define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT 6
#define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT 7 /* input and output */
/*
* Mask for the type part of the attribute, leaves room for more types
*/
#define TEE_IOCTL_PARAM_ATTR_TYPE_MASK 0xff
/* Meta parameter carrying extra information about the message. */
#define TEE_IOCTL_PARAM_ATTR_META 0x100
/* Mask of all known attr bits */
#define TEE_IOCTL_PARAM_ATTR_MASK \
(TEE_IOCTL_PARAM_ATTR_TYPE_MASK | TEE_IOCTL_PARAM_ATTR_META)
/*
* Matches TEEC_LOGIN_* in GP TEE Client API
* Are only defined for GP compliant TEEs
*/
#define TEE_IOCTL_LOGIN_PUBLIC 0
#define TEE_IOCTL_LOGIN_USER 1
#define TEE_IOCTL_LOGIN_GROUP 2
#define TEE_IOCTL_LOGIN_APPLICATION 4
#define TEE_IOCTL_LOGIN_USER_APPLICATION 5
#define TEE_IOCTL_LOGIN_GROUP_APPLICATION 6
/**
* struct tee_ioctl_param - parameter
* @attr: attributes
* @a: if a memref, offset into the shared memory object, else a value parameter
* @b: if a memref, size of the buffer, else a value parameter
* @c: if a memref, shared memory identifier, else a value parameter
*
* @attr & TEE_PARAM_ATTR_TYPE_MASK indicates if memref or value is used in
* the union. TEE_PARAM_ATTR_TYPE_VALUE_* indicates value and
* TEE_PARAM_ATTR_TYPE_MEMREF_* indicates memref. TEE_PARAM_ATTR_TYPE_NONE
* indicates that none of the members are used.
*
* Shared memory is allocated with TEE_IOC_SHM_ALLOC which returns an
* identifier representing the shared memory object. A memref can reference
* a part of a shared memory by specifying an offset (@a) and size (@b) of
* the object. To supply the entire shared memory object set the offset
* (@a) to 0 and size (@b) to the previously returned size of the object.
*/
struct tee_ioctl_param {
__u64 attr;
__u64 a;
__u64 b;
__u64 c;
};
#define TEE_IOCTL_UUID_LEN 16
/**
* struct tee_ioctl_open_session_arg - Open session argument
* @uuid: [in] UUID of the Trusted Application
* @clnt_uuid: [in] UUID of client
* @clnt_login: [in] Login class of client, TEE_IOCTL_LOGIN_* above
* @cancel_id: [in] Cancellation id, a unique value to identify this request
* @session: [out] Session id
* @ret: [out] return value
* @ret_origin [out] origin of the return value
* @num_params [in] number of parameters following this struct
*/
struct tee_ioctl_open_session_arg {
__u8 uuid[TEE_IOCTL_UUID_LEN];
__u8 clnt_uuid[TEE_IOCTL_UUID_LEN];
__u32 clnt_login;
__u32 cancel_id;
__u32 session;
__u32 ret;
__u32 ret_origin;
__u32 num_params;
/* num_params tells the actual number of element in params */
struct tee_ioctl_param params[];
};
/**
* TEE_IOC_OPEN_SESSION - opens a session to a Trusted Application
*
* Takes a struct tee_ioctl_buf_data which contains a struct
* tee_ioctl_open_session_arg followed by any array of struct
* tee_ioctl_param
*/
#define TEE_IOC_OPEN_SESSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 2, \
struct tee_ioctl_buf_data)
/**
* struct tee_ioctl_invoke_func_arg - Invokes a function in a Trusted
* Application
* @func: [in] Trusted Application function, specific to the TA
* @session: [in] Session id
* @cancel_id: [in] Cancellation id, a unique value to identify this request
* @ret: [out] return value
* @ret_origin [out] origin of the return value
* @num_params [in] number of parameters following this struct
*/
struct tee_ioctl_invoke_arg {
__u32 func;
__u32 session;
__u32 cancel_id;
__u32 ret;
__u32 ret_origin;
__u32 num_params;
/* num_params tells the actual number of element in params */
struct tee_ioctl_param params[];
};
/**
* TEE_IOC_INVOKE - Invokes a function in a Trusted Application
*
* Takes a struct tee_ioctl_buf_data which contains a struct
* tee_invoke_func_arg followed by any array of struct tee_param
*/
#define TEE_IOC_INVOKE _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 3, \
struct tee_ioctl_buf_data)
/**
* struct tee_ioctl_cancel_arg - Cancels an open session or invoke ioctl
* @cancel_id: [in] Cancellation id, a unique value to identify this request
* @session: [in] Session id, if the session is opened, else set to 0
*/
struct tee_ioctl_cancel_arg {
__u32 cancel_id;
__u32 session;
};
/**
* TEE_IOC_CANCEL - Cancels an open session or invoke
*/
#define TEE_IOC_CANCEL _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 4, \
struct tee_ioctl_cancel_arg)
/**
* struct tee_ioctl_close_session_arg - Closes an open session
* @session: [in] Session id
*/
struct tee_ioctl_close_session_arg {
__u32 session;
};
/**
* TEE_IOC_CLOSE_SESSION - Closes a session
*/
#define TEE_IOC_CLOSE_SESSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 5, \
struct tee_ioctl_close_session_arg)
/**
* struct tee_iocl_supp_recv_arg - Receive a request for a supplicant function
* @func: [in] supplicant function
* @num_params [in/out] number of parameters following this struct
*
* @num_params is the number of params that tee-supplicant has room to
* receive when input, @num_params is the number of actual params
* tee-supplicant receives when output.
*/
struct tee_iocl_supp_recv_arg {
__u32 func;
__u32 num_params;
/* num_params tells the actual number of element in params */
struct tee_ioctl_param params[];
};
/**
* TEE_IOC_SUPPL_RECV - Receive a request for a supplicant function
*
* Takes a struct tee_ioctl_buf_data which contains a struct
* tee_iocl_supp_recv_arg followed by any array of struct tee_param
*/
#define TEE_IOC_SUPPL_RECV _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 6, \
struct tee_ioctl_buf_data)
/**
* struct tee_iocl_supp_send_arg - Send a response to a received request
* @ret: [out] return value
* @num_params [in] number of parameters following this struct
*/
struct tee_iocl_supp_send_arg {
__u32 ret;
__u32 num_params;
/* num_params tells the actual number of element in params */
struct tee_ioctl_param params[];
};
/**
* TEE_IOC_SUPPL_SEND - Receive a request for a supplicant function
*
* Takes a struct tee_ioctl_buf_data which contains a struct
* tee_iocl_supp_send_arg followed by any array of struct tee_param
*/
#define TEE_IOC_SUPPL_SEND _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 7, \
struct tee_ioctl_buf_data)
/**
* struct tee_ioctl_shm_register_data - Shared memory register argument
* @addr: [in] Start address of shared memory to register
* @length: [in/out] Length of shared memory to register
* @flags: [in/out] Flags to/from registration.
* @id: [out] Identifier of the shared memory
*
* The flags field should currently be zero as input. Updated by the call
* with actual flags as defined by TEE_IOCTL_SHM_* above.
* This structure is used as argument for TEE_IOC_SHM_REGISTER below.
*/
struct tee_ioctl_shm_register_data {
__u64 addr;
__u64 length;
__u32 flags;
__s32 id;
};
/**
* TEE_IOC_SHM_REGISTER_FD - register a shared memory from a file descriptor
*
* Returns a file descriptor on success or < 0 on failure
*
* The returned file descriptor refers to the shared memory object in kernel
* land. The shared memory is freed when the descriptor is closed.
*/
#define TEE_IOC_SHM_REGISTER_FD _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + 8, \
struct tee_ioctl_shm_register_fd_data)
/**
* struct tee_ioctl_buf_data - Variable sized buffer
* @buf_ptr: [in] A __user pointer to a buffer
* @buf_len: [in] Length of the buffer above
*
* Used as argument for TEE_IOC_OPEN_SESSION, TEE_IOC_INVOKE,
* TEE_IOC_SUPPL_RECV, and TEE_IOC_SUPPL_SEND below.
*/
struct tee_ioctl_buf_data {
__u64 buf_ptr;
__u64 buf_len;
};
/**
* TEE_IOC_SHM_REGISTER - Register shared memory argument
*
* Registers shared memory between the user space process and secure OS.
*
* Returns a file descriptor on success or < 0 on failure
*
* The shared memory is unregisterred when the descriptor is closed.
*/
#define TEE_IOC_SHM_REGISTER _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + 9, \
struct tee_ioctl_shm_register_data)
/*
* Five syscalls are used when communicating with the TEE driver.
* open(): opens the device associated with the driver
* ioctl(): as described above operating on the file descriptor from open()
* close(): two cases
* - closes the device file descriptor
* - closes a file descriptor connected to allocated shared memory
* mmap(): maps shared memory into user space using information from struct
* tee_ioctl_shm_alloc_data
* munmap(): unmaps previously shared memory
*/
#endif /*__TEE_H*/

View File

@@ -0,0 +1,954 @@
/*
* Copyright (c) 2015-2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <tee_client_api_extensions.h>
#include <tee_client_api.h>
#include <teec_trace.h>
#include <unistd.h>
#ifndef __aligned
#define __aligned(x) __attribute__((__aligned__(x)))
#endif
#include <linux/tee.h>
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
/* How many device sequence numbers will be tried before giving up */
#define TEEC_MAX_DEV_SEQ 10
/* Helpers to access memref parts of a struct tee_ioctl_param */
#define MEMREF_SHM_ID(p) ((p)->c)
#define MEMREF_SHM_OFFS(p) ((p)->a)
#define MEMREF_SIZE(p) ((p)->b)
/*
* Internal flags of TEEC_SharedMemory::internal.flags
*/
#define SHM_FLAG_BUFFER_ALLOCED (1u << 0)
#define SHM_FLAG_SHADOW_BUFFER_ALLOCED (1u << 1)
static pthread_mutex_t teec_mutex = PTHREAD_MUTEX_INITIALIZER;
static void teec_mutex_lock(pthread_mutex_t *mu)
{
pthread_mutex_lock(mu);
}
static void teec_mutex_unlock(pthread_mutex_t *mu)
{
pthread_mutex_unlock(mu);
}
static void *teec_paged_aligned_alloc(size_t sz)
{
void *p = NULL;
size_t page_sz = sysconf(_SC_PAGESIZE);
size_t aligned_sz = ((sz + page_sz - 1) / page_sz) * page_sz;
if (aligned_sz >= sz && !posix_memalign(&p, page_sz, aligned_sz))
return p;
return NULL;
}
static int teec_open_dev(const char *devname, const char *capabilities,
uint32_t *gen_caps)
{
int fd = 0;
struct tee_ioctl_version_data vers;
memset(&vers, 0, sizeof(vers));
fd = open(devname, O_RDWR);
if (fd < 0)
return -1;
if (ioctl(fd, TEE_IOC_VERSION, &vers)) {
EMSG("TEE_IOC_VERSION failed");
goto err;
}
/* We can only handle GP TEEs */
if (!(vers.gen_caps & TEE_GEN_CAP_GP))
goto err;
if (capabilities) {
if (strcmp(capabilities, "optee-tz") == 0) {
if (vers.impl_id != TEE_IMPL_ID_OPTEE)
goto err;
if (!(vers.impl_caps & TEE_OPTEE_CAP_TZ))
goto err;
} else {
/* Unrecognized capability requested */
goto err;
}
}
*gen_caps = vers.gen_caps;
return fd;
err:
close(fd);
return -1;
}
static int teec_shm_alloc(int fd, size_t size, int *id)
{
int shm_fd = 0;
struct tee_ioctl_shm_alloc_data data;
memset(&data, 0, sizeof(data));
data.size = size;
shm_fd = ioctl(fd, TEE_IOC_SHM_ALLOC, &data);
if (shm_fd < 0)
return -1;
*id = data.id;
return shm_fd;
}
static int teec_shm_register(int fd, void *buf, size_t size, int *id)
{
int shm_fd = 0;
struct tee_ioctl_shm_register_data data;
memset(&data, 0, sizeof(data));
data.addr = (uintptr_t)buf;
data.length = size;
shm_fd = ioctl(fd, TEE_IOC_SHM_REGISTER, &data);
if (shm_fd < 0)
return -1;
*id = data.id;
return shm_fd;
}
TEEC_Result TEEC_InitializeContext(const char *name, TEEC_Context *ctx)
{
char devname[PATH_MAX] = { 0 };
int fd = 0;
size_t n = 0;
if (!ctx)
return TEEC_ERROR_BAD_PARAMETERS;
for (n = 0; n < TEEC_MAX_DEV_SEQ; n++) {
uint32_t gen_caps = 0;
snprintf(devname, sizeof(devname), "/dev/tee%zu", n);
fd = teec_open_dev(devname, name, &gen_caps);
if (fd >= 0) {
ctx->imp.fd = fd;
ctx->imp.reg_mem = gen_caps & TEE_GEN_CAP_REG_MEM;
ctx->imp.memref_null = gen_caps & TEE_GEN_CAP_MEMREF_NULL;
return TEEC_SUCCESS;
}
}
return TEEC_ERROR_ITEM_NOT_FOUND;
}
void TEEC_FinalizeContext(TEEC_Context *ctx)
{
if (ctx)
close(ctx->imp.fd);
}
static TEEC_Result teec_pre_process_tmpref(TEEC_Context *ctx,
uint32_t param_type, TEEC_TempMemoryReference *tmpref,
struct tee_ioctl_param *param,
TEEC_SharedMemory *shm)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
switch (param_type) {
case TEEC_MEMREF_TEMP_INPUT:
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT;
shm->flags = TEEC_MEM_INPUT;
break;
case TEEC_MEMREF_TEMP_OUTPUT:
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT;
shm->flags = TEEC_MEM_OUTPUT;
break;
case TEEC_MEMREF_TEMP_INOUT:
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT;
shm->flags = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT;
break;
default:
return TEEC_ERROR_BAD_PARAMETERS;
}
shm->size = tmpref->size;
if (!tmpref->buffer) {
if (tmpref->size)
return TEEC_ERROR_BAD_PARAMETERS;
if (ctx->imp.memref_null) {
/* Null pointer, indicate no shared memory attached */
MEMREF_SHM_ID(param) = TEE_MEMREF_NULL;
shm->imp.id = -1;
} else {
res = TEEC_AllocateSharedMemory(ctx, shm);
if (res != TEEC_SUCCESS)
return res;
MEMREF_SHM_ID(param) = shm->imp.id;
}
} else {
shm->buffer = tmpref->buffer;
res = TEEC_RegisterSharedMemory(ctx, shm);
if (res != TEEC_SUCCESS)
return res;
if (shm->imp.shadow_buffer)
memcpy(shm->imp.shadow_buffer, tmpref->buffer,
tmpref->size);
MEMREF_SHM_ID(param) = shm->imp.id;
}
MEMREF_SIZE(param) = tmpref->size;
return TEEC_SUCCESS;
}
static TEEC_Result teec_pre_process_whole(
TEEC_RegisteredMemoryReference *memref,
struct tee_ioctl_param *param)
{
const uint32_t inout = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT;
uint32_t flags = memref->parent->flags & inout;
TEEC_SharedMemory *shm = NULL;
if (flags == inout)
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT;
else if (flags & TEEC_MEM_INPUT)
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT;
else if (flags & TEEC_MEM_OUTPUT)
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT;
else
return TEEC_ERROR_BAD_PARAMETERS;
shm = memref->parent;
/*
* We're using a shadow buffer in this reference, copy the real buffer
* into the shadow buffer if needed. We'll copy it back once we've
* returned from the call to secure world.
*/
if (shm->imp.shadow_buffer && (flags & TEEC_MEM_INPUT))
memcpy(shm->imp.shadow_buffer, shm->buffer, shm->size);
MEMREF_SHM_ID(param) = shm->imp.id;
MEMREF_SIZE(param) = shm->size;
return TEEC_SUCCESS;
}
static TEEC_Result teec_pre_process_partial(uint32_t param_type,
TEEC_RegisteredMemoryReference *memref,
struct tee_ioctl_param *param)
{
uint32_t req_shm_flags = 0;
TEEC_SharedMemory *shm = NULL;
switch (param_type) {
case TEEC_MEMREF_PARTIAL_INPUT:
req_shm_flags = TEEC_MEM_INPUT;
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT;
break;
case TEEC_MEMREF_PARTIAL_OUTPUT:
req_shm_flags = TEEC_MEM_OUTPUT;
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT;
break;
case TEEC_MEMREF_PARTIAL_INOUT:
req_shm_flags = TEEC_MEM_OUTPUT | TEEC_MEM_INPUT;
param->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT;
break;
default:
return TEEC_ERROR_BAD_PARAMETERS;
}
shm = memref->parent;
if ((shm->flags & req_shm_flags) != req_shm_flags)
return TEEC_ERROR_BAD_PARAMETERS;
if ((memref->offset + memref->size < memref->offset) ||
(memref->offset + memref->size > shm->size))
return TEEC_ERROR_BAD_PARAMETERS;
/*
* We're using a shadow buffer in this reference, copy the real buffer
* into the shadow buffer if needed. We'll copy it back once we've
* returned from the call to secure world.
*/
if (shm->imp.shadow_buffer && param_type != TEEC_MEMREF_PARTIAL_OUTPUT)
memcpy((char *)shm->imp.shadow_buffer + memref->offset,
(char *)shm->buffer + memref->offset, memref->size);
MEMREF_SHM_ID(param) = shm->imp.id;
MEMREF_SHM_OFFS(param) = memref->offset;
MEMREF_SIZE(param) = memref->size;
return TEEC_SUCCESS;
}
static TEEC_Result teec_pre_process_operation(TEEC_Context *ctx,
TEEC_Operation *operation,
struct tee_ioctl_param *params,
TEEC_SharedMemory *shms)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
size_t n = 0;
memset(shms, 0, sizeof(TEEC_SharedMemory) *
TEEC_CONFIG_PAYLOAD_REF_COUNT);
for (n = 0; n < TEEC_CONFIG_PAYLOAD_REF_COUNT; n++)
shms[n].imp.id = -1;
if (!operation) {
memset(params, 0, sizeof(struct tee_ioctl_param) *
TEEC_CONFIG_PAYLOAD_REF_COUNT);
return TEEC_SUCCESS;
}
for (n = 0; n < TEEC_CONFIG_PAYLOAD_REF_COUNT; n++) {
uint32_t param_type = 0;
param_type = TEEC_PARAM_TYPE_GET(operation->paramTypes, n);
switch (param_type) {
case TEEC_NONE:
params[n].attr = param_type;
break;
case TEEC_VALUE_INPUT:
case TEEC_VALUE_OUTPUT:
case TEEC_VALUE_INOUT:
params[n].attr = param_type;
params[n].a = operation->params[n].value.a;
params[n].b = operation->params[n].value.b;
break;
case TEEC_MEMREF_TEMP_INPUT:
case TEEC_MEMREF_TEMP_OUTPUT:
case TEEC_MEMREF_TEMP_INOUT:
res = teec_pre_process_tmpref(ctx, param_type,
&operation->params[n].tmpref, params + n,
shms + n);
if (res != TEEC_SUCCESS)
return res;
break;
case TEEC_MEMREF_WHOLE:
res = teec_pre_process_whole(
&operation->params[n].memref,
params + n);
if (res != TEEC_SUCCESS)
return res;
break;
case TEEC_MEMREF_PARTIAL_INPUT:
case TEEC_MEMREF_PARTIAL_OUTPUT:
case TEEC_MEMREF_PARTIAL_INOUT:
res = teec_pre_process_partial(param_type,
&operation->params[n].memref, params + n);
if (res != TEEC_SUCCESS)
return res;
break;
default:
return TEEC_ERROR_BAD_PARAMETERS;
}
}
return TEEC_SUCCESS;
}
static void teec_post_process_tmpref(uint32_t param_type,
TEEC_TempMemoryReference *tmpref,
struct tee_ioctl_param *param,
TEEC_SharedMemory *shm)
{
if (param_type != TEEC_MEMREF_TEMP_INPUT) {
if (tmpref->buffer && shm->imp.shadow_buffer)
memcpy(tmpref->buffer, shm->imp.shadow_buffer,
MIN(MEMREF_SIZE(param), tmpref->size));
tmpref->size = MEMREF_SIZE(param);
}
}
static void teec_post_process_whole(TEEC_RegisteredMemoryReference *memref,
struct tee_ioctl_param *param)
{
TEEC_SharedMemory *shm = memref->parent;
if (shm->flags & TEEC_MEM_OUTPUT) {
/*
* We're using a shadow buffer in this reference, copy back
* the shadow buffer into the real buffer now that we've
* returned from secure world.
*/
if (shm->imp.shadow_buffer && MEMREF_SIZE(param) <= shm->size)
memcpy(shm->buffer, shm->imp.shadow_buffer,
MEMREF_SIZE(param));
memref->size = MEMREF_SIZE(param);
}
}
static void teec_post_process_partial(uint32_t param_type,
TEEC_RegisteredMemoryReference *memref,
struct tee_ioctl_param *param)
{
if (param_type != TEEC_MEMREF_PARTIAL_INPUT) {
TEEC_SharedMemory *shm = memref->parent;
/*
* We're using a shadow buffer in this reference, copy back
* the shadow buffer into the real buffer now that we've
* returned from secure world.
*/
if (shm->imp.shadow_buffer && MEMREF_SIZE(param) <= memref->size)
memcpy((char *)shm->buffer + memref->offset,
(char *)shm->imp.shadow_buffer + memref->offset,
MEMREF_SIZE(param));
memref->size = MEMREF_SIZE(param);
}
}
static void teec_post_process_operation(TEEC_Operation *operation,
struct tee_ioctl_param *params,
TEEC_SharedMemory *shms)
{
size_t n = 0;
if (!operation)
return;
for (n = 0; n < TEEC_CONFIG_PAYLOAD_REF_COUNT; n++) {
uint32_t param_type = 0;
param_type = TEEC_PARAM_TYPE_GET(operation->paramTypes, n);
switch (param_type) {
case TEEC_VALUE_INPUT:
break;
case TEEC_VALUE_OUTPUT:
case TEEC_VALUE_INOUT:
operation->params[n].value.a = params[n].a;
operation->params[n].value.b = params[n].b;
break;
case TEEC_MEMREF_TEMP_INPUT:
case TEEC_MEMREF_TEMP_OUTPUT:
case TEEC_MEMREF_TEMP_INOUT:
teec_post_process_tmpref(param_type,
&operation->params[n].tmpref, params + n,
shms + n);
break;
case TEEC_MEMREF_WHOLE:
teec_post_process_whole(&operation->params[n].memref,
params + n);
break;
case TEEC_MEMREF_PARTIAL_INPUT:
case TEEC_MEMREF_PARTIAL_OUTPUT:
case TEEC_MEMREF_PARTIAL_INOUT:
teec_post_process_partial(param_type,
&operation->params[n].memref, params + n);
default:
break;
}
}
}
static void teec_free_temp_refs(TEEC_Operation *operation,
TEEC_SharedMemory *shms)
{
size_t n = 0;
if (!operation)
return;
for (n = 0; n < TEEC_CONFIG_PAYLOAD_REF_COUNT; n++) {
switch (TEEC_PARAM_TYPE_GET(operation->paramTypes, n)) {
case TEEC_MEMREF_TEMP_INPUT:
case TEEC_MEMREF_TEMP_OUTPUT:
case TEEC_MEMREF_TEMP_INOUT:
TEEC_ReleaseSharedMemory(shms + n);
break;
default:
break;
}
}
}
static TEEC_Result ioctl_errno_to_res(int err)
{
switch (err) {
case ENOMEM:
return TEEC_ERROR_OUT_OF_MEMORY;
case EINVAL:
return TEEC_ERROR_BAD_PARAMETERS;
default:
return TEEC_ERROR_GENERIC;
}
}
static void uuid_to_octets(uint8_t d[TEE_IOCTL_UUID_LEN], const TEEC_UUID *s)
{
d[0] = s->timeLow >> 24;
d[1] = s->timeLow >> 16;
d[2] = s->timeLow >> 8;
d[3] = s->timeLow;
d[4] = s->timeMid >> 8;
d[5] = s->timeMid;
d[6] = s->timeHiAndVersion >> 8;
d[7] = s->timeHiAndVersion;
memcpy(d + 8, s->clockSeqAndNode, sizeof(s->clockSeqAndNode));
}
static void setup_client_data(struct tee_ioctl_open_session_arg *arg,
uint32_t connection_method,
const void *connection_data)
{
arg->clnt_login = connection_method;
switch (connection_method) {
case TEE_IOCTL_LOGIN_PUBLIC:
/* No connection data to pass */
break;
case TEE_IOCTL_LOGIN_USER:
/* Kernel auto-fills UID and forms client UUID */
break;
case TEE_IOCTL_LOGIN_GROUP:
/*
* Connection data for group login is uint32_t and rest of
* clnt_uuid is set as zero.
*
* Kernel verifies group membership and then forms client UUID.
*/
memcpy(arg->clnt_uuid, connection_data, sizeof(gid_t));
break;
case TEE_IOCTL_LOGIN_APPLICATION:
/*
* Kernel auto-fills application identifier and forms client
* UUID.
*/
break;
case TEE_IOCTL_LOGIN_USER_APPLICATION:
/*
* Kernel auto-fills application identifier, UID and forms
* client UUID.
*/
break;
case TEE_IOCTL_LOGIN_GROUP_APPLICATION:
/*
* Connection data for group login is uint32_t rest of
* clnt_uuid is set as zero.
*
* Kernel verifies group membership, auto-fills application
* identifier and then forms client UUID.
*/
memcpy(arg->clnt_uuid, connection_data, sizeof(gid_t));
break;
default:
/*
* Unknown login method, don't pass any connection data as we
* don't know size.
*/
break;
}
}
TEEC_Result TEEC_OpenSession(TEEC_Context *ctx, TEEC_Session *session,
const TEEC_UUID *destination,
uint32_t connection_method, const void *connection_data,
TEEC_Operation *operation, uint32_t *ret_origin)
{
struct tee_ioctl_open_session_arg *arg = NULL;
struct tee_ioctl_param *params = NULL;
TEEC_Result res = TEEC_ERROR_GENERIC;
uint32_t eorig = 0;
int rc = 0;
const size_t arg_size = sizeof(struct tee_ioctl_open_session_arg) +
TEEC_CONFIG_PAYLOAD_REF_COUNT *
sizeof(struct tee_ioctl_param);
union {
struct tee_ioctl_open_session_arg arg;
uint8_t data[arg_size];
} buf;
struct tee_ioctl_buf_data buf_data;
TEEC_SharedMemory shm[TEEC_CONFIG_PAYLOAD_REF_COUNT];
memset(&buf, 0, sizeof(buf));
memset(&shm, 0, sizeof(shm));
memset(&buf_data, 0, sizeof(buf_data));
if (!ctx || !session) {
eorig = TEEC_ORIGIN_API;
res = TEEC_ERROR_BAD_PARAMETERS;
goto out;
}
buf_data.buf_ptr = (uintptr_t)&buf;
buf_data.buf_len = sizeof(buf);
arg = &buf.arg;
arg->num_params = TEEC_CONFIG_PAYLOAD_REF_COUNT;
params = (struct tee_ioctl_param *)(arg + 1);
uuid_to_octets(arg->uuid, destination);
setup_client_data(arg, connection_method, connection_data);
res = teec_pre_process_operation(ctx, operation, params, shm);
if (res != TEEC_SUCCESS) {
eorig = TEEC_ORIGIN_API;
goto out_free_temp_refs;
}
rc = ioctl(ctx->imp.fd, TEE_IOC_OPEN_SESSION, &buf_data);
if (rc) {
EMSG("TEE_IOC_OPEN_SESSION failed");
eorig = TEEC_ORIGIN_COMMS;
res = ioctl_errno_to_res(errno);
goto out_free_temp_refs;
}
res = arg->ret;
eorig = arg->ret_origin;
if (res == TEEC_SUCCESS) {
session->imp.ctx = ctx;
session->imp.session_id = arg->session;
}
teec_post_process_operation(operation, params, shm);
out_free_temp_refs:
teec_free_temp_refs(operation, shm);
out:
if (ret_origin)
*ret_origin = eorig;
return res;
}
void TEEC_CloseSession(TEEC_Session *session)
{
struct tee_ioctl_close_session_arg arg;
memset(&arg, 0, sizeof(arg));
if (!session)
return;
arg.session = session->imp.session_id;
if (ioctl(session->imp.ctx->imp.fd, TEE_IOC_CLOSE_SESSION, &arg))
EMSG("Failed to close session 0x%x", session->imp.session_id);
}
TEEC_Result TEEC_InvokeCommand(TEEC_Session *session, uint32_t cmd_id,
TEEC_Operation *operation, uint32_t *error_origin)
{
struct tee_ioctl_invoke_arg *arg = NULL;
struct tee_ioctl_param *params = NULL;
TEEC_Result res = TEEC_ERROR_GENERIC;
uint32_t eorig = 0;
int rc = 0;
const size_t arg_size = sizeof(struct tee_ioctl_invoke_arg) +
TEEC_CONFIG_PAYLOAD_REF_COUNT *
sizeof(struct tee_ioctl_param);
union {
struct tee_ioctl_invoke_arg arg;
uint8_t data[arg_size];
} buf;
struct tee_ioctl_buf_data buf_data;
TEEC_SharedMemory shm[TEEC_CONFIG_PAYLOAD_REF_COUNT];
memset(&buf, 0, sizeof(buf));
memset(&buf_data, 0, sizeof(buf_data));
memset(&shm, 0, sizeof(shm));
if (!session) {
eorig = TEEC_ORIGIN_API;
res = TEEC_ERROR_BAD_PARAMETERS;
goto out;
}
buf_data.buf_ptr = (uintptr_t)&buf;
buf_data.buf_len = sizeof(buf);
arg = &buf.arg;
arg->num_params = TEEC_CONFIG_PAYLOAD_REF_COUNT;
params = (struct tee_ioctl_param *)(arg + 1);
arg->session = session->imp.session_id;
arg->func = cmd_id;
if (operation) {
teec_mutex_lock(&teec_mutex);
operation->imp.session = session;
teec_mutex_unlock(&teec_mutex);
}
res = teec_pre_process_operation(session->imp.ctx, operation, params, shm);
if (res != TEEC_SUCCESS) {
eorig = TEEC_ORIGIN_API;
goto out_free_temp_refs;
}
rc = ioctl(session->imp.ctx->imp.fd, TEE_IOC_INVOKE, &buf_data);
if (rc) {
EMSG("TEE_IOC_INVOKE failed");
eorig = TEEC_ORIGIN_COMMS;
res = ioctl_errno_to_res(errno);
goto out_free_temp_refs;
}
res = arg->ret;
eorig = arg->ret_origin;
teec_post_process_operation(operation, params, shm);
out_free_temp_refs:
teec_free_temp_refs(operation, shm);
out:
if (error_origin)
*error_origin = eorig;
return res;
}
void TEEC_RequestCancellation(TEEC_Operation *operation)
{
TEEC_Session *session = NULL;
struct tee_ioctl_cancel_arg arg;
memset(&arg, 0, sizeof(arg));
if (!operation)
return;
teec_mutex_lock(&teec_mutex);
session = operation->imp.session;
teec_mutex_unlock(&teec_mutex);
if (!session)
return;
arg.session = session->imp.session_id;
arg.cancel_id = 0;
if (ioctl(session->imp.ctx->imp.fd, TEE_IOC_CANCEL, &arg))
EMSG("TEE_IOC_CANCEL: %s", strerror(errno));
}
TEEC_Result TEEC_RegisterSharedMemory(TEEC_Context *ctx, TEEC_SharedMemory *shm)
{
TEEC_Result res = TEEC_SUCCESS;
int fd = 0;
size_t s = 0;
if (!ctx || !shm)
return TEEC_ERROR_BAD_PARAMETERS;
if (!shm->flags || (shm->flags & ~(TEEC_MEM_INPUT | TEEC_MEM_OUTPUT)))
return TEEC_ERROR_BAD_PARAMETERS;
if (!shm->buffer)
return TEEC_ERROR_BAD_PARAMETERS;
s = shm->size;
if (!s)
s = 8;
if (ctx->imp.reg_mem) {
fd = teec_shm_register(ctx->imp.fd, shm->buffer, s, &shm->imp.id);
if (fd >= 0) {
shm->imp.registered_fd = fd;
shm->imp.shadow_buffer = NULL;
shm->imp.flags = 0;
goto out;
}
/*
* If we're here TEE_IOC_SHM_REGISTER failed, probably
* because some read-only memory was supplied and the Linux
* kernel doesn't like that at the moment.
*
* The error could also have some other origin. In any case
* we're not making matters worse by trying to allocate and
* register a shadow buffer before giving up.
*/
shm->imp.shadow_buffer = teec_paged_aligned_alloc(s);
if (!shm->imp.shadow_buffer)
return TEEC_ERROR_OUT_OF_MEMORY;
fd = teec_shm_register(ctx->imp.fd, shm->imp.shadow_buffer, s,
&shm->imp.id);
if (fd >= 0) {
shm->imp.registered_fd = fd;
shm->imp.flags = SHM_FLAG_SHADOW_BUFFER_ALLOCED;
goto out;
}
if (errno == ENOMEM)
res = TEEC_ERROR_OUT_OF_MEMORY;
else
res = TEEC_ERROR_GENERIC;
free(shm->imp.shadow_buffer);
shm->imp.shadow_buffer = NULL;
return res;
} else {
fd = teec_shm_alloc(ctx->imp.fd, s, &shm->imp.id);
if (fd < 0)
return TEEC_ERROR_OUT_OF_MEMORY;
shm->imp.shadow_buffer = mmap(NULL, s, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
close(fd);
if (shm->imp.shadow_buffer == (void *)MAP_FAILED) {
shm->imp.id = -1;
return TEEC_ERROR_OUT_OF_MEMORY;
}
shm->imp.registered_fd = -1;
shm->imp.flags = 0;
}
out:
shm->imp.alloced_size = s;
return TEEC_SUCCESS;
}
TEEC_Result TEEC_RegisterSharedMemoryFileDescriptor(TEEC_Context *ctx,
TEEC_SharedMemory *shm,
int fd)
{
int rfd = 0;
struct tee_ioctl_shm_register_fd_data data;
memset(&data, 0, sizeof(data));
if (!ctx || !shm || fd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
if (!shm->flags || (shm->flags & ~(TEEC_MEM_INPUT | TEEC_MEM_OUTPUT)))
return TEEC_ERROR_BAD_PARAMETERS;
data.fd = fd;
rfd = ioctl(ctx->imp.fd, TEE_IOC_SHM_REGISTER_FD, &data);
if (rfd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
shm->buffer = NULL;
shm->imp.shadow_buffer = NULL;
shm->imp.registered_fd = rfd;
shm->imp.id = data.id;
shm->size = data.size;
return TEEC_SUCCESS;
}
TEEC_Result TEEC_AllocateSharedMemory(TEEC_Context *ctx, TEEC_SharedMemory *shm)
{
int fd = 0;
size_t s = 0;
if (!ctx || !shm)
return TEEC_ERROR_BAD_PARAMETERS;
if (!shm->flags || (shm->flags & ~(TEEC_MEM_INPUT | TEEC_MEM_OUTPUT)))
return TEEC_ERROR_BAD_PARAMETERS;
s = shm->size;
if (!s)
s = 8;
if (ctx->imp.reg_mem) {
shm->buffer = teec_paged_aligned_alloc(s);
if (!shm->buffer)
return TEEC_ERROR_OUT_OF_MEMORY;
fd = teec_shm_register(ctx->imp.fd, shm->buffer, s, &shm->imp.id);
if (fd < 0) {
free(shm->buffer);
shm->buffer = NULL;
return TEEC_ERROR_OUT_OF_MEMORY;
}
shm->imp.registered_fd = fd;
} else {
fd = teec_shm_alloc(ctx->imp.fd, s, &shm->imp.id);
if (fd < 0)
return TEEC_ERROR_OUT_OF_MEMORY;
shm->buffer = mmap(NULL, s, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
close(fd);
if (shm->buffer == (void *)MAP_FAILED) {
shm->imp.id = -1;
return TEEC_ERROR_OUT_OF_MEMORY;
}
shm->imp.registered_fd = -1;
}
shm->imp.shadow_buffer = NULL;
shm->imp.alloced_size = s;
shm->imp.flags = SHM_FLAG_BUFFER_ALLOCED;
return TEEC_SUCCESS;
}
void TEEC_ReleaseSharedMemory(TEEC_SharedMemory *shm)
{
if (!shm || shm->imp.id == -1)
return;
if (shm->imp.shadow_buffer) {
if (shm->imp.registered_fd >= 0) {
if (shm->imp.flags &
SHM_FLAG_SHADOW_BUFFER_ALLOCED)
free(shm->imp.shadow_buffer);
close(shm->imp.registered_fd);
} else {
munmap(shm->imp.shadow_buffer, shm->imp.alloced_size);
}
} else if (shm->buffer) {
if (shm->imp.registered_fd >= 0) {
if (shm->imp.flags & SHM_FLAG_BUFFER_ALLOCED)
free(shm->buffer);
close(shm->imp.registered_fd);
} else {
munmap(shm->buffer, shm->imp.alloced_size);
}
} else if (shm->imp.registered_fd >= 0) {
close(shm->imp.registered_fd);
}
shm->imp.id = -1;
shm->imp.shadow_buffer = NULL;
shm->buffer = NULL;
shm->imp.registered_fd = -1;
shm->imp.flags = 0;
}

View File

@@ -0,0 +1,141 @@
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <stdarg.h>
#include <stdint.h>
#include <ctype.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include "teec_trace.h"
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
/*
* The length of the prefix is 37, for example it looks like this:
* P = Prefix
* M = Message
* F = Function name
* L = Line number
* PPPP: MMMMM [FFFFFFFFFFFFFFF : LLLLL]
*/
#define MAX_PRINT_SIZE 256
#ifdef TEEC_LOG_FILE
static void log_to_file(const char *buffer)
{
FILE *log_file = fopen(TEEC_LOG_FILE, "a");
if (log_file != NULL) {
fprintf(log_file, "%s", buffer);
fclose(log_file);
log_file = NULL;
}
}
#else
#define log_to_file(buffer)
#endif
static const char * const trace_level_strings[] = {
"", "ERR", "INF", "DBG", "FLW"
};
void _dprintf(const char *function, int line, int level, const char *prefix,
const char *fmt, ...)
{
char msg[MAX_PRINT_SIZE];
int n = 0;
va_list ap;
if (function) {
int thread_id = syscall(SYS_gettid);
n = snprintf(msg, sizeof(msg), "%s [%d] %s:%s:%d: ",
trace_level_strings[level], thread_id, prefix,
function, line);
if (n < 0)
return;
}
if ((size_t)n < sizeof(msg)) {
va_start(ap, fmt);
n = vsnprintf(msg + n, sizeof(msg) - n, fmt, ap);
va_end(ap);
if (n < 0)
return;
}
fprintf(stdout, "%s", msg);
log_to_file(msg);
}
#if (defined(DEBUGLEVEL_3) || defined(DEBUGLEVEL_true) || defined(DEBUGLEVEL_4))
void dump_buffer(const char *bname, const uint8_t *buffer, size_t blen)
{
fprintf(stderr, "#### %s\n", bname);
while (blen > 0) {
size_t n = 0;
for (n = 0; n < 16; n++) {
if (n < blen)
fprintf(stderr, "%02x ", (int)buffer[n]);
else
fprintf(stderr, " ");
if (n == 7)
fprintf(stderr, " ");
}
fprintf(stderr, " |");
for (n = 0; n < 16; n++) {
if (n < blen) {
if (isprint(buffer[n]))
fprintf(stderr, "%c", (int)buffer[n]);
else
fprintf(stderr, ".");
}
}
fprintf(stderr, "|\n");
blen -= MIN(blen, 16);
buffer += 16;
}
}
#else
void dump_buffer(const char *bname, const uint8_t *buffer, size_t blen)
{
(void)bname;
(void)buffer;
(void)blen;
}
#endif

View File

@@ -0,0 +1,13 @@
prefix="@CMAKE_INSTALL_PREFIX@"
exec_prefix="${prefix}"
libdir="${prefix}/lib"
includedir="${prefix}/include"
Name: @PROJECT_NAME@
Description: @CMAKE_PROJECT_DESCRIPTION@
URL: @CMAKE_PROJECT_HOMEPAGE_URL@
Version: @PROJECT_VERSION@
Requires: @pc_req_public@
Requires.private: @pc_req_private@
Cflags: -I"${includedir}"
Libs: -L"${libdir}" -l@libteectgt@

View File

@@ -0,0 +1,18 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2024 The Android Open Source Project
# Enable TEE supplicant plugin support
$(call soong_config_set,optee_client,cfg_tee_supp_plugins,true)
# Enable Global Platform Sockets support
$(call soong_config_set,optee_client,cfg_gp_sockets,true)
# Enable dumping gprof data
$(call soong_config_set,optee_client,cfg_ta_gprof_support,true)
# Enable dumping ftrace data
$(call soong_config_set,optee_client,cfg_ftrace_support,true)
# Emulate RPMB
$(call soong_config_set,optee_client,rpmb_emu,true)

View File

@@ -0,0 +1,123 @@
/*
* Public include file for the UUID library
*
* Copyright (C) 1996, 1997, 1998 Theodore Ts'o.
*
* %Begin-Header%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, and the entire permission notice in its entirety,
* including the disclaimer of warranties.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
* WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
* %End-Header%
*/
#ifndef _UL_LIBUUID_UUID_H
#define _UL_LIBUUID_UUID_H
#include <sys/types.h>
#ifndef _WIN32
#include <sys/time.h>
#endif
#include <time.h>
typedef unsigned char uuid_t[16];
/* UUID Variant definitions */
#define UUID_VARIANT_NCS 0
#define UUID_VARIANT_DCE 1
#define UUID_VARIANT_MICROSOFT 2
#define UUID_VARIANT_OTHER 3
#define UUID_VARIANT_SHIFT 5
#define UUID_VARIANT_MASK 0x7
/* UUID Type definitions */
#define UUID_TYPE_DCE_NIL 0
#define UUID_TYPE_DCE_TIME 1
#define UUID_TYPE_DCE_SECURITY 2
#define UUID_TYPE_DCE_MD5 3
#define UUID_TYPE_DCE_RANDOM 4
#define UUID_TYPE_DCE_SHA1 5
#define UUID_TYPE_SHIFT 4
#define UUID_TYPE_MASK 0xf
#define UUID_STR_LEN 37
/* Allow UUID constants to be defined */
#ifdef __GNUC__
#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
static const uuid_t name __attribute__ ((unused)) = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
#else
#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
static const uuid_t name = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* clear.c */
extern void uuid_clear(uuid_t uu);
/* compare.c */
extern int uuid_compare(const uuid_t uu1, const uuid_t uu2);
/* copy.c */
extern void uuid_copy(uuid_t dst, const uuid_t src);
/* gen_uuid.c */
extern void uuid_generate(uuid_t out);
extern void uuid_generate_random(uuid_t out);
extern void uuid_generate_time(uuid_t out);
extern int uuid_generate_time_safe(uuid_t out);
extern void uuid_generate_md5(uuid_t out, const uuid_t ns, const char *name, size_t len);
extern void uuid_generate_sha1(uuid_t out, const uuid_t ns, const char *name, size_t len);
/* isnull.c */
extern int uuid_is_null(const uuid_t uu);
/* parse.c */
extern int uuid_parse(const char *in, uuid_t uu);
extern int uuid_parse_range(const char *in_start, const char *in_end, uuid_t uu);
/* unparse.c */
extern void uuid_unparse(const uuid_t uu, char *out);
extern void uuid_unparse_lower(const uuid_t uu, char *out);
extern void uuid_unparse_upper(const uuid_t uu, char *out);
/* uuid_time.c */
extern time_t uuid_time(const uuid_t uu, struct timeval *ret_tv);
extern int uuid_type(const uuid_t uu);
extern int uuid_variant(const uuid_t uu);
/* predefined.c */
extern const uuid_t *uuid_get_template(const char *alias);
#ifdef __cplusplus
}
#endif
#endif /* _UL_LIBUUID_UUID_H */

View File

Binary file not shown.

View File

@@ -0,0 +1,10 @@
prefix=/prebuilt
exec_prefix=/prebuilt
libdir=${exec_prefix}
includedir=${prefix}/include
Name: uuid
Description: UUID library
Version: 2.38
Cflags: -I${includedir}
Libs: -L${libdir} -luuid

View File

@@ -0,0 +1,49 @@
#!/bin/bash
# SPDX-License-Identifier: BSD-2-Clause
CHECKPATCH="${CHECKPATCH:-checkpatch.pl}"
# checkpatch.pl will ignore the following paths
CHECKPATCH_IGNORE=$(echo )
_CP_EXCL=$(for p in $CHECKPATCH_IGNORE; do echo ":(exclude)$p" ; done)
function _checkpatch() {
# Use --typedefsfile if supported by the checkpatch tool
typedefs_opt="--typedefsfile typedefs.checkpatch"
$CHECKPATCH --help 2>&1 | grep -q -- --typedefsfile || \
typedefs_opt="";
# Ignore NOT_UNIFIED_DIFF in case patch has no diff
# (e.g., all paths filtered out)
$CHECKPATCH --quiet --ignore FILE_PATH_CHANGES \
--ignore GERRIT_CHANGE_ID \
--ignore NOT_UNIFIED_DIFF \
--ignore CAMELCASE \
--ignore PREFER_KERNEL_TYPES \
--ignore CONCATENATED_STRING \
--no-tree \
--strict \
$typedefs_opt \
-
}
function checkpatch() {
git show --oneline --no-patch $1
# The first git 'format-patch' shows the commit message
# The second one produces the diff (might be empty if _CP_EXCL
# filters out all diffs)
(git format-patch $1^..$1 --stdout | sed -n '/^diff --git/q;p'; \
git format-patch $1^..$1 --stdout -- $_CP_EXCL . | \
sed -n '/^diff --git/,$p') | _checkpatch
}
function checkstaging() {
git diff --cached -- . $_CP_EXCL | _checkpatch
}
function checkworking() {
git diff -- . $_CP_EXCL | _checkpatch
}
function checkdiff() {
git diff $1...$2 -- . $_CP_EXCL | _checkpatch
}

View File

@@ -0,0 +1,125 @@
project(tee-supplicant C)
################################################################################
# Configuration flags always included
################################################################################
option(RPMB_EMU "Enable tee-supplicant to emulate RPMB" ON)
option(CFG_TA_GPROF_SUPPORT "Enable tee-supplicant support for TAs instrumented with gprof" ON)
option(CFG_FTRACE_SUPPORT "Enable tee-supplicant support for TAs instrumented with ftrace" ON)
option(CFG_TEE_SUPP_PLUGINS "Enable tee-supplicant plugin support" ON)
set(CFG_TEE_SUPP_LOG_LEVEL "1" CACHE STRING "tee-supplicant log level")
# FIXME: Question is, is this really needed? Should just use defaults from # GNUInstallDirs?
set(CFG_TEE_CLIENT_LOAD_PATH "/lib" CACHE STRING "Colon-separated list of paths where to look for TAs (see also --ta-dir)")
set(CFG_TEE_FS_PARENT_PATH "${CMAKE_INSTALL_LOCALSTATEDIR}/lib/tee" CACHE STRING "Location of TEE filesystem (secure storage)")
# FIXME: Why do we have if defined(CFG_GP_SOCKETS) && CFG_GP_SOCKETS == 1 in the c-file?
set(CFG_GP_SOCKETS "1" CACHE STRING "Enable GlobalPlatform Socket API support")
set(CFG_TEE_PLUGIN_LOAD_PATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/plugins/" CACHE STRING "tee-supplicant's plugins path")
set(CFG_TEE_GROUP "tee" CACHE STRING "Group which has access to /dev/tee* devices")
set(CFG_TEEPRIV_GROUP "teepriv" CACHE STRING "Group which has access to /dev/teepriv* devices")
set(CFG_TEE_SUPPL_USER "teesuppl" CACHE STRING "User account which tee-supplicant is started with")
set(CFG_TEE_SUPPL_GROUP "teesuppl" CACHE STRING "Group account which tee-supplicant is started with")
if(CFG_TEE_SUPP_PLUGINS)
set(CMAKE_INSTALL_RPATH "${CFG_TEE_PLUGIN_LOAD_PATH}")
endif()
################################################################################
# Source files
################################################################################
set(SRC
src/handle.c
src/hmac_sha2.c
src/rpmb.c
src/nvme_rpmb.c
src/sha2.c
src/sd_notify.c
src/tee_supp_fs.c
src/tee_supplicant.c
src/teec_ta_load.c
)
if(CFG_GP_SOCKETS)
set(SRC ${SRC} src/tee_socket.c)
endif()
if(CFG_TA_GPROF_SUPPORT OR CFG_FTRACE_SUPPORT)
set(SRC ${SRC} src/prof.c)
endif()
if(CFG_TEE_SUPP_PLUGINS)
set(SRC ${SRC} src/plugin.c)
endif()
################################################################################
# Built binary
################################################################################
add_executable(${PROJECT_NAME} ${SRC})
################################################################################
# Flags always set
################################################################################
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DDEBUGLEVEL_${CFG_TEE_SUPP_LOG_LEVEL}
PRIVATE -DTEEC_LOAD_PATH="${CFG_TEE_CLIENT_LOAD_PATH}"
PRIVATE -DTEE_FS_PARENT_PATH="${CFG_TEE_FS_PARENT_PATH}"
PRIVATE -DBINARY_PREFIX="TSUP"
)
################################################################################
# Optional flags
################################################################################
if(CFG_GP_SOCKETS)
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DCFG_GP_SOCKETS=${CFG_GP_SOCKETS})
endif()
if(RPMB_EMU)
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DRPMB_EMU=1)
endif()
if(CFG_TA_GPROF_SUPPORT)
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DCFG_TA_GPROF_SUPPORT)
endif()
if(CFG_FTRACE_SUPPORT)
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DCFG_FTRACE_SUPPORT)
endif()
if(CFG_TEE_SUPP_PLUGINS)
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DTEE_SUPP_PLUGINS
PRIVATE -DTEE_PLUGIN_LOAD_PATH="${CFG_TEE_PLUGIN_LOAD_PATH}"
)
endif()
################################################################################
# Public and private header and library dependencies
################################################################################
target_include_directories(${PROJECT_NAME}
PRIVATE src
PRIVATE ../libteec/src
)
target_link_libraries(${PROJECT_NAME}
PRIVATE teec
)
if(CFG_TEE_SUPP_PLUGINS)
target_link_libraries(${PROJECT_NAME}
PRIVATE dl
)
endif()
################################################################################
# Install targets
################################################################################
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR})
configure_file(tee-supplicant@.service.in tee-supplicant@.service @ONLY)
install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}/tee-supplicant@.service DESTINATION ${CMAKE_INSTALL_LIBDIR}/systemd/system)
configure_file(optee-udev.rules.in optee-udev.rules @ONLY)
install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}/optee-udev.rules DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/udev/rules.d)

View File

@@ -0,0 +1,105 @@
include ../flags.mk
include ../config.mk
OUT_DIR := $(OO)/tee-supplicant
# Emulate RPMB ioctl's by default
RPMB_EMU ?= 1
.PHONY: all tee-supplicant clean
all: tee-supplicant
################################################################################
# Teec configuration
################################################################################
PACKAGE_NAME := tee-supplicant
TEES_SRCS := tee_supplicant.c \
teec_ta_load.c \
tee_supp_fs.c \
rpmb.c \
nvme_rpmb.c \
handle.c \
sd_notify.c
ifeq ($(CFG_GP_SOCKETS),y)
TEES_SRCS += tee_socket.c
endif
ifeq ($(RPMB_EMU),1)
TEES_SRCS += sha2.c hmac_sha2.c
endif
ifneq (,$(filter y,$(CFG_TA_GPROF_SUPPORT) $(CFG_FTRACE_SUPPORT)))
TEES_SRCS += prof.c
endif
ifeq ($(CFG_TEE_SUPP_PLUGINS),y)
TEES_SRCS += plugin.c
endif
TEES_SRC_DIR := src
TEES_OBJ_DIR := $(OUT_DIR)
TEES_OBJS := $(patsubst %.c,$(TEES_OBJ_DIR)/%.o, $(TEES_SRCS))
TEES_INCLUDES := ${CURDIR}/../libteec/include \
${CURDIR}/src \
${CURDIR}/../libteec/src \
TEES_CFLAGS := $(addprefix -I, $(TEES_INCLUDES)) $(CFLAGS) \
-DDEBUGLEVEL_$(CFG_TEE_SUPP_LOG_LEVEL) \
-DBINARY_PREFIX=\"TEES\" \
-DTEE_FS_PARENT_PATH=\"$(CFG_TEE_FS_PARENT_PATH)\" \
-DTEEC_LOAD_PATH=\"$(CFG_TEE_CLIENT_LOAD_PATH)\" \
ifeq ($(CFG_GP_SOCKETS),y)
TEES_CFLAGS += -DCFG_GP_SOCKETS=1
endif
ifeq ($(RPMB_EMU),1)
TEES_CFLAGS += -DRPMB_EMU=1
endif
TEES_FILE := $(OUT_DIR)/$(PACKAGE_NAME)
TEES_LFLAGS := $(LDFLAGS) -L$(OUT_DIR)/../libteec -lteec
ifeq ($(CFG_TA_GPROF_SUPPORT),y)
TEES_CFLAGS += -DCFG_TA_GPROF_SUPPORT
endif
ifeq ($(CFG_FTRACE_SUPPORT),y)
TEES_CFLAGS += -DCFG_FTRACE_SUPPORT
endif
TEES_CFLAGS += -fstack-protector-strong
ifeq ($(CFG_TEE_SUPP_PLUGINS),y)
TEES_CFLAGS += -DTEE_SUPP_PLUGINS \
-DTEE_PLUGIN_LOAD_PATH=\"$(CFG_TEE_PLUGIN_LOAD_PATH)\"
endif
TEES_LFLAGS += -lpthread
# Needed to get clock_gettime() for for glibc versions before 2.17
TEES_LFLAGS += -lrt
ifeq ($(CFG_TEE_SUPP_PLUGINS),y)
# Needed to dynamically load user plugins
TEES_LFLAGS += -ldl
# Needed for dlopen()
TEES_LFLAGS += -Wl,-rpath=$(CFG_TEE_PLUGIN_LOAD_PATH)
endif
tee-supplicant: $(TEES_FILE)
$(TEES_FILE): $(TEES_OBJS)
@echo " LINK $@"
$(VPREFIX)$(CC) -o $@ $+ $(TEES_LFLAGS)
@echo ""
$(TEES_OBJ_DIR)/%.o: $(TEES_SRC_DIR)/%.c
$(VPREFIX)mkdir -p $(dir $@)
@echo " CC $<"
$(VPREFIX)$(CC) $(TEES_CFLAGS) $(TEES_CFLAGS_$(notdir $<)) -c $< -o $@
################################################################################
# Cleaning up configuration
################################################################################
clean:
$(RM) $(TEES_OBJS) $(TEES_FILE)
$(call rmdir,$(OUT_DIR))

View File

@@ -0,0 +1,7 @@
# SPDX-License-Identifier: BSD-2-Clause
KERNEL=="tee[0-9]*", MODE="0660", OWNER="root", GROUP="@CFG_TEE_GROUP@", TAG+="systemd"
# If a /dev/teepriv[0-9]* device is detected, start an instance of
# tee-supplicant.service with the device name as parameter
KERNEL=="teepriv[0-9]*", MODE="0660", OWNER="root", GROUP="@CFG_TEEPRIV_GROUP@", \
TAG+="systemd", ENV{SYSTEMD_WANTS}+="tee-supplicant@%k.service"

View File

@@ -0,0 +1,37 @@
/*
* Copyright (c) 2016-2017, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ____TEE_IPSOCKET_H
#define ____TEE_IPSOCKET_H
typedef enum TEE_ipSocket_ipVersion_e {
TEE_IP_VERSION_DC = 0, /* dont care */
TEE_IP_VERSION_4 = 1,
TEE_IP_VERSION_6 = 2
} TEE_ipSocket_ipVersion;
#endif /*____TEE_IPSOCKET_H*/

View File

@@ -0,0 +1,40 @@
/*
* Copyright (c) 2016-2017, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ____TEE_ISOCKET_DEFINES_H
#define ____TEE_ISOCKET_DEFINES_H
#define TEE_ISOCKET_VERSION 0x01000000
#define TEE_ISOCKET_ERROR_PROTOCOL 0xF1007001
#define TEE_ISOCKET_ERROR_REMOTE_CLOSED 0xF1007002
#define TEE_ISOCKET_ERROR_TIMEOUT 0xF1007003
#define TEE_ISOCKET_ERROR_OUT_OF_RESOURCES 0xF1007004
#define TEE_ISOCKET_ERROR_LARGE_BUFFER 0xF1007005
#define TEE_ISOCKET_WARNING_PROTOCOL 0xF1007006
#define TEE_ISOCKET_ERROR_HOSTNAME 0xF1007007
#endif /*____TEE_ISOCKET_DEFINES_H*/

View File

@@ -0,0 +1,37 @@
/*
* Copyright (c) 2016-2017, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ____TEE_TCPSOCKET_DEFINES_H
#define ____TEE_TCPSOCKET_DEFINES_H
/* Protocol identifier */
#define TEE_ISOCKET_PROTOCOLID_TCP 0x65
/* Instance specific errors */
#define TEE_ISOCKET_TCP_WARNING_UNKNOWN_OUT_OF_BAND 0xF1010002
#endif /*____TEE_TCPSOCKET_DEFINES_H*/

View File

@@ -0,0 +1,35 @@
/*
* Copyright (c) 2016-2017, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ____TEE_TCPSOCKET_DEFINES_EXTENSIONS_H
#define ____TEE_TCPSOCKET_DEFINES_EXTENSIONS_H
/* Instance and implementation specific ioctl functions */
#define TEE_TCP_SET_RECVBUF 0x65f00000
#define TEE_TCP_SET_SENDBUF 0x65f00001
#endif /*____TEE_TCPSOCKET_DEFINES_EXTENSIONS_H*/

View File

@@ -0,0 +1,41 @@
/*
* Copyright (c) 2016-2017, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ____TEE_UDPSOCKET_DEFINES_H
#define ____TEE_UDPSOCKET_DEFINES_H
/* Protocol identifier */
#define TEE_ISOCKET_PROTOCOLID_UDP 0x66
/* Instance specific errors */
#define TEE_ISOCKET_UDP_WARNING_UNKNOWN_OUT_OF_BAND 0xF1020002
/* Instance specific ioctl functions */
#define TEE_UDP_CHANGEADDR 0x66000001
#define TEE_UDP_CHANGEPORT 0x66000002
#endif /*____TEE_UDPSOCKET_DEFINES_H*/

View File

@@ -0,0 +1,175 @@
/*
* Copyright (c) 2014, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdlib.h>
#include <string.h>
#include "handle.h"
/*
* Define the initial capacity of the database. It should be a low number
* multiple of 2 since some databases a likely to only use a few handles.
* Since the algorithm is to doubles up when growing it shouldn't cause a
* noticable overhead on large databases.
*/
#define HANDLE_DB_INITIAL_MAX_PTRS 4
static void mutex_lock(struct handle_db *db)
{
if (db->mu)
pthread_mutex_lock(db->mu);
}
static void mutex_unlock(struct handle_db *db)
{
if (db->mu)
pthread_mutex_unlock(db->mu);
}
void handle_db_set_mutex(struct handle_db *db, pthread_mutex_t *mu)
{
db->mu = mu;
}
void handle_db_destroy(struct handle_db *db)
{
if (db) {
mutex_lock(db);
free(db->ptrs);
db->ptrs = NULL;
db->max_ptrs = 0;
mutex_unlock(db);
}
}
int handle_get(struct handle_db *db, void *ptr)
{
size_t n = 0;
void *p = NULL;
size_t new_max_ptrs = 0;
int ret = 0;
if (!db || !ptr)
return -1;
mutex_lock(db);
/* Try to find an empty location */
for (n = 0; n < db->max_ptrs; n++) {
if (!db->ptrs[n]) {
db->ptrs[n] = ptr;
ret = n;
goto out;
}
}
/* No location available, grow the ptrs array */
if (db->max_ptrs)
new_max_ptrs = db->max_ptrs * 2;
else
new_max_ptrs = HANDLE_DB_INITIAL_MAX_PTRS;
p = realloc(db->ptrs, new_max_ptrs * sizeof(void *));
if (!p) {
ret = -1;
goto out;
}
db->ptrs = p;
memset(db->ptrs + db->max_ptrs, 0,
(new_max_ptrs - db->max_ptrs) * sizeof(void *));
db->max_ptrs = new_max_ptrs;
/* Since n stopped at db->max_ptrs there is an empty location there */
db->ptrs[n] = ptr;
ret = n;
out:
mutex_unlock(db);
return ret;
}
void *handle_put(struct handle_db *db, int handle)
{
void *p = NULL;
if (!db || handle < 0)
return NULL;
mutex_lock(db);
if ((size_t)handle >= db->max_ptrs) {
p = NULL;
goto out;
}
p = db->ptrs[handle];
db->ptrs[handle] = NULL;
out:
mutex_unlock(db);
return p;
}
void *handle_lookup(struct handle_db *db, int handle)
{
void *p = NULL;
if (!db || handle < 0)
return NULL;
mutex_lock(db);
if ((size_t)handle >= db->max_ptrs) {
p = NULL;
goto out;
}
p = db->ptrs[handle];
out:
mutex_unlock(db);
return p;
}
void handle_foreach_put(struct handle_db *db,
void (*cb)(int handle, void *ptr, void *arg),
void *arg)
{
size_t n = 0;
if (!db || !cb)
return;
mutex_lock(db);
for (n = 0; n < db->max_ptrs; n++) {
if (db->ptrs[n]) {
cb(n, db->ptrs[n], arg);
db->ptrs[n] = NULL;
}
}
mutex_unlock(db);
}

View File

@@ -0,0 +1,82 @@
/*
* Copyright (c) 2014, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef HANDLE_H
#define HANDLE_H
#include <stdint.h>
#include <pthread.h>
struct handle_db {
void **ptrs;
size_t max_ptrs;
pthread_mutex_t *mu;
};
#define HANDLE_DB_INITIALIZER { NULL, 0, NULL }
#define HANDLE_DB_INITIALIZER_WITH_MUTEX(mu) { NULL, 0, (mu) }
/*
* Assigns a mutex for the database. If mu != NULL the mutex will be
* acquired before each access to the database and released when
* the operation is done.
*/
void handle_db_set_mutex(struct handle_db *db, pthread_mutex_t *mu);
/*
* Frees all internal data structures of the database, but does not free
* the db pointer. The database is safe to reuse after it's destroyed, it
* just be empty again. The assigned mutex is also preserved.
*/
void handle_db_destroy(struct handle_db *db);
/*
* Allocates a new handle and assigns the supplied pointer to it,
* ptr must not be NULL.
* The function returns
* >= 0 on success and
* -1 on failure
*/
int handle_get(struct handle_db *db, void *ptr);
/*
* Deallocates a handle. Returns the assiciated pointer of the handle
* the the handle was valid or NULL if it's invalid.
*/
void *handle_put(struct handle_db *db, int handle);
/*
* Returns the assiciated pointer of the handle if the handle is a valid
* handle.
* Returns NULL on failure.
*/
void *handle_lookup(struct handle_db *db, int handle);
void handle_foreach_put(struct handle_db *db,
void (*cb)(int handle, void *ptr, void *arg),
void *arg);
#endif /*HANDLE_H*/

View File

@@ -0,0 +1,126 @@
/*
* HMAC-SHA-224/256/384/512 implementation
* Last update: 06/15/2005
* Issue date: 06/15/2005
*
* Copyright (C) 2005 Olivier Gay <olivier.gay@a3.epfl.ch>
* All rights reserved.
*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <string.h>
#include "hmac_sha2.h"
/* HMAC-SHA-256 functions */
void hmac_sha256_init(hmac_sha256_ctx *ctx, const unsigned char *key,
unsigned int key_size)
{
unsigned int fill = 0;
unsigned int num = 0;
const unsigned char *key_used = NULL;
unsigned char key_temp[SHA256_DIGEST_SIZE] = { 0 };
int i = 0;
if (key_size == SHA256_BLOCK_SIZE) {
key_used = key;
num = SHA256_BLOCK_SIZE;
} else {
if (key_size > SHA256_BLOCK_SIZE){
num = SHA256_DIGEST_SIZE;
sha256(key, key_size, key_temp);
key_used = key_temp;
} else { /* key_size > SHA256_BLOCK_SIZE */
key_used = key;
num = key_size;
}
fill = SHA256_BLOCK_SIZE - num;
memset(ctx->block_ipad + num, 0x36, fill);
memset(ctx->block_opad + num, 0x5c, fill);
}
for (i = 0; i < (int) num; i++) {
ctx->block_ipad[i] = key_used[i] ^ 0x36;
ctx->block_opad[i] = key_used[i] ^ 0x5c;
}
sha256_init(&ctx->ctx_inside);
sha256_update(&ctx->ctx_inside, ctx->block_ipad, SHA256_BLOCK_SIZE);
sha256_init(&ctx->ctx_outside);
sha256_update(&ctx->ctx_outside, ctx->block_opad,
SHA256_BLOCK_SIZE);
/* for hmac_reinit */
memcpy(&ctx->ctx_inside_reinit, &ctx->ctx_inside,
sizeof(sha256_ctx));
memcpy(&ctx->ctx_outside_reinit, &ctx->ctx_outside,
sizeof(sha256_ctx));
}
void hmac_sha256_reinit(hmac_sha256_ctx *ctx)
{
memcpy(&ctx->ctx_inside, &ctx->ctx_inside_reinit,
sizeof(sha256_ctx));
memcpy(&ctx->ctx_outside, &ctx->ctx_outside_reinit,
sizeof(sha256_ctx));
}
void hmac_sha256_update(hmac_sha256_ctx *ctx, const unsigned char *message,
unsigned int message_len)
{
sha256_update(&ctx->ctx_inside, message, message_len);
}
void hmac_sha256_final(hmac_sha256_ctx *ctx, unsigned char *mac,
unsigned int mac_size)
{
unsigned char digest_inside[SHA256_DIGEST_SIZE] = { 0 };
unsigned char mac_temp[SHA256_DIGEST_SIZE] = { 0 };
sha256_final(&ctx->ctx_inside, digest_inside);
sha256_update(&ctx->ctx_outside, digest_inside, SHA256_DIGEST_SIZE);
sha256_final(&ctx->ctx_outside, mac_temp);
memcpy(mac, mac_temp, mac_size);
}
void hmac_sha256(const unsigned char *key, unsigned int key_size,
const unsigned char *message, unsigned int message_len,
unsigned char *mac, unsigned mac_size)
{
hmac_sha256_ctx ctx;
memset(&ctx, 0, sizeof(ctx));
hmac_sha256_init(&ctx, key, key_size);
hmac_sha256_update(&ctx, message, message_len);
hmac_sha256_final(&ctx, mac, mac_size);
}

View File

@@ -0,0 +1,74 @@
/*
* HMAC-SHA-224/256/384/512 implementation
* Last update: 06/15/2005
* Issue date: 06/15/2005
*
* Copyright (C) 2005 Olivier Gay <olivier.gay@a3.epfl.ch>
* All rights reserved.
*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef HMAC_SHA2_H
#define HMAC_SHA2_H
#include "sha2.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
sha256_ctx ctx_inside;
sha256_ctx ctx_outside;
/* for hmac_reinit */
sha256_ctx ctx_inside_reinit;
sha256_ctx ctx_outside_reinit;
unsigned char block_ipad[SHA256_BLOCK_SIZE];
unsigned char block_opad[SHA256_BLOCK_SIZE];
} hmac_sha256_ctx;
void hmac_sha256_init(hmac_sha256_ctx *ctx, const unsigned char *key,
unsigned int key_size);
void hmac_sha256_reinit(hmac_sha256_ctx *ctx);
void hmac_sha256_update(hmac_sha256_ctx *ctx, const unsigned char *message,
unsigned int message_len);
void hmac_sha256_final(hmac_sha256_ctx *ctx, unsigned char *mac,
unsigned int mac_size);
void hmac_sha256(const unsigned char *key, unsigned int key_size,
const unsigned char *message, unsigned int message_len,
unsigned char *mac, unsigned mac_size);
#ifdef __cplusplus
}
#endif
#endif /* !HMAC_SHA2_H */

View File

@@ -0,0 +1,596 @@
/*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <fcntl.h>
#include <linux/types.h>
#include <netinet/in.h>
#include <pthread.h>
#include <nvme_rpmb.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <tee_client_api.h>
#include <teec_trace.h>
#include <tee_supplicant.h>
#include <unistd.h>
#include <errno.h>
struct nvme_psd_31{
uint16_t mp;
uint8_t rsvd2;
uint8_t flags;
uint32_t enlat;
uint32_t exlat;
uint8_t rrt;
uint8_t rrl;
uint8_t rwt;
uint8_t rwl;
uint16_t idlp;
uint8_t ips;
uint8_t rsvd19;
uint16_t actp;
uint8_t apws;
uint8_t rsvd23[9];
};
struct nvme_identify_controller {
uint16_t vid;
uint16_t ssvid;
char sn[20];
char mn[40];
char fr[8];
uint8_t rab;
uint8_t ieee[3];
uint8_t cmic;
uint8_t mdts;
uint16_t cntlid;
uint32_t ver;
uint32_t rtd3r;
uint32_t rtd3e;
uint32_t oaes;
uint32_t ctratt;
uint16_t rrls;
uint8_t rsvd102[9];
uint8_t cntrltype;
uint8_t fguid[16];
uint16_t crdt1;
uint16_t crdt2;
uint16_t crdt3;
uint8_t rsvd134[119];
uint8_t nvmsr;
uint8_t vwci;
uint8_t mec;
uint16_t oacs;
uint8_t acl;
uint8_t aerl;
uint8_t frmw;
uint8_t lpa;
uint8_t elpe;
uint8_t npss;
uint8_t avscc;
uint8_t apsta;
uint16_t wctemp;
uint16_t cctemp;
uint16_t mtfa;
uint32_t hmpre;
uint32_t hmmin;
uint8_t tnvmcap[16];
uint8_t unvmcap[16];
uint32_t rpmbs;
uint16_t edstt;
uint8_t dsto;
uint8_t fwug;
uint16_t kas;
uint16_t hctma;
uint16_t mntmt;
uint16_t mxtmt;
uint32_t sanicap;
uint32_t hmminds;
uint16_t hmmaxd;
uint16_t nsetidmax;
uint16_t endgidmax;
uint8_t anatt;
uint8_t anacap;
uint32_t anagrpmax;
uint32_t nanagrpid;
uint32_t pels;
uint16_t domainid;
uint8_t rsvd358[10];
uint8_t megcap[16];
uint8_t rsvd384[128];
uint8_t sqes;
uint8_t cqes;
uint16_t maxcmd;
uint32_t nn;
uint16_t oncs;
uint16_t fuses;
uint8_t fna;
uint8_t vwc;
uint16_t awun;
uint16_t awupf;
uint8_t icsvscc;
uint8_t nwpc;
uint16_t acwu;
uint16_t ocfs;
uint32_t sgls;
uint32_t mnan;
uint8_t maxdna[16];
uint32_t maxcna;
uint8_t rsvd564[204];
char subnqn[256];
uint8_t rsvd1024[768];
uint32_t ioccsz;
uint32_t iorcsz;
uint16_t icdoff;
uint8_t fcatt;
uint8_t msdbd;
uint16_t ofcs;
uint8_t dctype;
uint8_t rsvd1807[241];
struct nvme_psd_31 psd[32];
uint8_t vs[1024];
};
/* identify command */
#define NVME_IDENTIFY_CDW10_CNTID_SHIFT 16
#define NVME_IDENTIFY_CDW10_CNS_SHIFT 0
#define NVME_IDENTIFY_CDW11_CNSSPECID_SHIFT 0
#define NVME_IDENTIFY_CDW11_CSI_SHIFT 24
#define NVME_IDENTIFY_CDW14_UUID_SHIFT 0
#define NVME_IDENTIFY_CDW10_CNTID_MASK 0xffff
#define NVME_IDENTIFY_CDW10_CNS_MASK 0xff
#define NVME_IDENTIFY_CDW11_CNSSPECID_MASK 0xffff
#define NVME_IDENTIFY_CDW11_CSI_MASK 0xff
#define NVME_IDENTIFY_CDW14_UUID_MASK 0x7f
#define NVME_IDENTIFY_CNS_CTRL 0x01
#define NVME_CSI_NVM 0x0
#define NVME_NSID_NONE 0x0
#define NVME_CNTLID_NONE 0x0
#define NVME_CNSSPECID_NONE 0x0
#define NVME_UUID_NONE 0x0
#define NVME_DEV_SN_LENGTH 20
/* security comamnd */
#define NVME_SECURITY_NSSF_SHIFT 0
#define NVME_SECURITY_SPSP0_SHIFT 8
#define NVME_SECURITY_SPSP1_SHIFT 16
#define NVME_SECURITY_SECP_SHIFT 24
#define NVME_SECURITY_NSSF_MASK 0xff
#define NVME_SECURITY_SPSP0_MASK 0xff
#define NVME_SECURITY_SPSP1_MASK 0xff
#define NVME_SECURITY_SECP_MASK 0xff
#define NVME_RPMB_SECP 0xEA
#define NVME_RPMB_SPSP0 0x01
#define NVME_RPMB_SPSP1 0x00
/* NVMe admin opcodes */
#define NVME_ADMIN_IDENTIFY 0x06
#define NVME_ADMIN_SECURITY_SEND 0x81
#define NVME_ADMIN_SECURITY_RECV 0x82
#define NVME_IDENTIFY_DATA_SIZE 4096
/* default timeout */
#define NVME_DEFAULT_IOCTL_TIMEOUT 0
/* Request */
struct nvme_rpmb_req {
uint16_t cmd;
#define NVME_RPMB_CMD_DATA_REQ 0x00
#define NVME_RPMB_CMD_GET_RPMBS_INFO 0x01
uint16_t dev_id;
/* Optional data frames (rpmb_data_frame) follow */
};
#define NVME_RPMB_REQ_DATA(req) ((void *)((struct nvme_rpmb_req *)(req) + 1))
/*
* This structure is shared with OP-TEE and the NVMe ioctl layer.
* It is the "data frame for RPMB access" defined by NVMe spec,
* minus the start and stop bits.
*/
struct nvme_rpmb_data_frame {
uint8_t stuff_bytes[191];
uint8_t key_mac[32];
uint8_t target;
uint8_t nonce[16];
uint32_t write_counter;
uint32_t address;
uint32_t block_count;
uint16_t op_result;
#define NVME_RPMB_RESULT_OK 0x00
#define NVME_RPMB_RESULT_GENERAL_FAILURE 0x01
#define NVME_RPMB_RESULT_AUTH_FAILURE 0x02
#define NVME_RPMB_RESULT_COUNTER_FAILURE 0x03
#define NVME_RPMB_RESULT_ADDRESS_FAILURE 0x04
#define NVME_RPMB_RESULT_WRITE_FAILURE 0x05
#define NVME_RPMB_RESULT_READ_FAILURE 0x06
#define NVME_RPMB_RESULT_AUTH_KEY_NOT_PROGRAMMED 0x07
#define NVME_RPMB_RESULT_INVALID_DEV_CONFIG_BLOCK 0x08
#define NVME_RPMB_RESULT_MASK 0x3F
#define NVME_RPMB_RESULT_WR_CNT_EXPIRED 0x80
uint16_t msg_type;
#define NVME_RPMB_MSG_TYPE_REQ_AUTH_KEY_PROGRAM 0x0001
#define NVME_RPMB_MSG_TYPE_REQ_WRITE_COUNTER_READ 0x0002
#define NVME_RPMB_MSG_TYPE_REQ_AUTH_DATA_WRITE 0x0003
#define NVME_RPMB_MSG_TYPE_REQ_AUTH_DATA_READ 0x0004
#define NVME_RPMB_MSG_TYPE_REQ_RESULT_READ 0x0005
#define NVME_RPMB_MSG_TYPE_REQ_AUTH_DCB_WRITE 0x0006
#define NVME_RPMB_MSG_TYPE_REQ_AUTH_DCB_READ 0x0007
#define NVME_RPMB_MSG_TYPE_RESP_AUTH_KEY_PROGRAM 0x0100
#define NVME_RPMB_MSG_TYPE_RESP_WRITE_COUNTER_VAL_READ 0x0200
#define NVME_RPMB_MSG_TYPE_RESP_AUTH_DATA_WRITE 0x0300
#define NVME_RPMB_MSG_TYPE_RESP_AUTH_DATA_READ 0x0400
#define NVME_RPMB_MSG_TYPE_RESP_RESULT_READ 0x0500
#define NVME_RPMB_MSG_TYPE_RESP_AUTH_DCB_WRITE 0x0600
#define NVME_RPMB_MSG_TYPE_RESP_AUTH_DCB_READ 0x0700
uint8_t data[0];
};
/*
* ioctl() interface
* Comes from: uapi/linux/nvme_ioctl.h
*/
struct nvme_passthru_cmd {
__u8 opcode;
__u8 flags;
__u16 rsvd1;
__u32 nsid;
__u32 cdw2;
__u32 cdw3;
__u64 metadata;
__u64 addr;
__u32 metadata_len;
__u32 data_len;
__u32 cdw10;
__u32 cdw11;
__u32 cdw12;
__u32 cdw13;
__u32 cdw14;
__u32 cdw15;
__u32 timeout_ms;
__u32 result;
};
#define nvme_admin_cmd nvme_passthru_cmd
#define NVME_IOCTL_ADMIN_CMD _IOWR('N', 0x41, struct nvme_admin_cmd)
static pthread_mutex_t nvme_rpmb_mutex = PTHREAD_MUTEX_INITIALIZER;
struct nvme_dev_info {
unsigned int rpmbs;
char sn[NVME_DEV_SN_LENGTH + 1];
};
static TEEC_Result nvme_identify_command(int fd, struct nvme_identify_controller *id)
{
uint32_t cdw10 = (((NVME_CNTLID_NONE << NVME_IDENTIFY_CDW10_CNTID_SHIFT))
& NVME_IDENTIFY_CDW10_CNTID_MASK)
| (((NVME_IDENTIFY_CNS_CTRL << NVME_IDENTIFY_CDW10_CNS_SHIFT))
& NVME_IDENTIFY_CDW10_CNS_MASK);
uint32_t cdw11 = (((NVME_CNSSPECID_NONE << NVME_IDENTIFY_CDW11_CNSSPECID_SHIFT))
& NVME_IDENTIFY_CDW11_CNSSPECID_MASK)
| (((NVME_CSI_NVM << NVME_IDENTIFY_CDW11_CSI_SHIFT))
& NVME_IDENTIFY_CDW11_CSI_MASK);
uint32_t cdw14 = (NVME_UUID_NONE << NVME_IDENTIFY_CDW14_UUID_SHIFT)
& NVME_IDENTIFY_CDW14_UUID_MASK;
struct nvme_passthru_cmd cmd = {
.opcode = NVME_ADMIN_IDENTIFY,
.nsid = NVME_NSID_NONE,
.addr = (uint64_t)(uintptr_t)id,
.data_len = NVME_IDENTIFY_DATA_SIZE,
.cdw10 = cdw10,
.cdw11 = cdw11,
.cdw14 = cdw14,
.timeout_ms = NVME_DEFAULT_IOCTL_TIMEOUT,
};
int err = ioctl(fd, NVME_IOCTL_ADMIN_CMD, cmd);
if (err != 0) {
EMSG("Failed to get get nvme rpmb support info\n");
return TEEC_ERROR_GENERIC;
}
return TEEC_SUCCESS;
}
static TEEC_Result nvme_security_command(int fd, uint8_t opcode, uint32_t nsid,
uint32_t cdw10, uint32_t cdw11, void *data, uint32_t data_len) {
struct nvme_passthru_cmd cmd = {
.opcode = opcode,
.nsid = nsid,
.cdw10 = cdw10,
.cdw11 = cdw11,
.data_len = data_len,
.addr = (uint64_t)(uintptr_t)data,
.timeout_ms = NVME_DEFAULT_IOCTL_TIMEOUT,
};
int err = ioctl(fd, NVME_IOCTL_ADMIN_CMD, cmd);
if (err != 0) {
EMSG("Failed to send nvme security command with err = %d\n", err);
return TEEC_ERROR_GENERIC;
}
return TEEC_SUCCESS;
}
static TEEC_Result nvme_security_send(int fd, uint32_t nsid,
uint32_t cdw10, uint32_t cdw11, void *data, uint32_t data_len)
{
return nvme_security_command(fd, NVME_ADMIN_SECURITY_SEND,
nsid, cdw10, cdw11, data, data_len);
}
static TEEC_Result nvme_security_receive(int fd, uint32_t nsid,
uint32_t cdw10, uint32_t cdw11, void *data, uint32_t data_len)
{
return nvme_security_command(fd, NVME_ADMIN_SECURITY_RECV,
nsid, cdw10, cdw11, data, data_len);
}
static TEEC_Result rpmb_read_request(int fd,
struct nvme_rpmb_data_frame *req, size_t req_size,
struct nvme_rpmb_data_frame *rsp, size_t rsp_size)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
uint8_t nssf = req->target;
uint8_t spsp0 = NVME_RPMB_SPSP0;
uint8_t spsp1 = NVME_RPMB_SPSP1;
uint8_t secp = NVME_RPMB_SECP;
uint32_t cdw10;
uint32_t cdw11;
cdw10 = (((nssf & NVME_SECURITY_NSSF_MASK) << NVME_SECURITY_NSSF_SHIFT)
| ((spsp0 & NVME_SECURITY_SPSP0_MASK) << NVME_SECURITY_SPSP0_SHIFT)
| ((spsp1 & NVME_SECURITY_SPSP1_MASK) << NVME_SECURITY_SPSP1_SHIFT)
| ((secp & NVME_SECURITY_SECP_MASK) << NVME_SECURITY_SECP_SHIFT));
cdw11 = req_size;
res = nvme_security_send(fd, 0, cdw10, cdw11, (void *)req, (uint32_t)req_size);
if (res) {
EMSG("Send security cmd error with res = 0x%08x\n", res);
goto error_out;
}
cdw11 = rsp_size;
res = nvme_security_receive(fd, 0, cdw10, cdw11, (void *)rsp, (uint32_t)rsp_size);
if (res) {
EMSG("Receive security cmd error with res = 0x%08x\n", res);
goto error_out;
}
error_out:
return res;
}
static TEEC_Result rpmb_write_request(int fd,
struct nvme_rpmb_data_frame *req, size_t req_size,
struct nvme_rpmb_data_frame *rsp, size_t rsp_size)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
uint8_t nssf = req->target;
uint8_t spsp0 = NVME_RPMB_SPSP0;
uint8_t spsp1 = NVME_RPMB_SPSP1;
uint8_t secp = NVME_RPMB_SECP;
uint32_t cdw10;
uint32_t cdw11;
cdw10 = (((nssf & NVME_SECURITY_NSSF_MASK) << NVME_SECURITY_NSSF_SHIFT)
| ((spsp0 & NVME_SECURITY_SPSP0_MASK) << NVME_SECURITY_SPSP0_SHIFT)
| ((spsp1 & NVME_SECURITY_SPSP1_MASK) << NVME_SECURITY_SPSP1_SHIFT)
| ((secp & NVME_SECURITY_SECP_MASK) << NVME_SECURITY_SECP_SHIFT));
cdw11 = req_size;
res = nvme_security_send(fd, 0, cdw10, cdw11, (void *)req, (uint32_t)req_size);
if (res) {
EMSG("send security cmd error with res = 0x%08x\n", res);
goto error_out;
}
memset(rsp, 0, sizeof(struct nvme_rpmb_data_frame));
rsp->target = req->target;
rsp->msg_type = NVME_RPMB_MSG_TYPE_REQ_RESULT_READ;
cdw11 = rsp_size;
res = nvme_security_send(fd, 0, cdw10, cdw11, (void *)rsp, (uint32_t)rsp_size);
if (res) {
EMSG("send security cmd error with res = 0x%08x\n", res);
goto error_out;
}
memset(rsp, 0, rsp_size);
res = nvme_security_receive(fd, 0, cdw10, cdw11, (void *)rsp, (uint32_t)rsp_size);
if (res || rsp->op_result != 0) {
EMSG("receive security cmd error with res = 0x%08x\n", res);
goto error_out;
}
error_out:
return res;
}
/* Open and/or return file descriptor to RPMB partition of device dev_id */
static int open_nvme_rpmb_fd(uint16_t dev_id)
{
static int id;
static int fd = -1;
char path[PATH_MAX] = { 0 };
DMSG("dev_id = %u", dev_id);
if (fd < 0) {
snprintf(path, sizeof(path), "/dev/nvme%u", dev_id);
fd = open(path, O_RDWR);
if (fd < 0) {
EMSG("Could not open %s (%s)", path, strerror(errno));
return -1;
}
id = dev_id;
}
if (id != dev_id) {
EMSG("Only one NVMe device is supported");
return -1;
}
return fd;
}
/* Open NVMe device dev_id */
static int nvme_fd(uint16_t dev_id)
{
int fd = 0;
char path[PATH_MAX] = { 0 };
IMSG("NVMe dev_id = %u", dev_id);
snprintf(path, sizeof(path), "/dev/nvme%u", dev_id);
fd = open(path, O_RDONLY);
if (fd < 0)
EMSG("Could not open %s\n", path);
return fd;
}
static void close_nvme_fd(int fd)
{
close(fd);
}
static TEEC_Result nvme_rpmb_get_rpmbs_info(uint16_t dev_id, struct nvme_dev_info *info)
{
int fd = 0;
TEEC_Result res = TEEC_ERROR_GENERIC;
struct nvme_identify_controller id;
memset(info, 0, sizeof(struct nvme_dev_info));
fd = nvme_fd(dev_id);
if (fd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
res = nvme_identify_command(fd, &id);
if (res != TEEC_SUCCESS)
goto out;
memcpy(info->sn, id.sn, NVME_DEV_SN_LENGTH);
info->rpmbs = id.rpmbs;
out:
close_nvme_fd(fd);
return res;
}
static TEEC_Result nvme_rpmb_data_req(int fd,
struct nvme_rpmb_data_frame *req, size_t req_size,
struct nvme_rpmb_data_frame *rsp, size_t rsp_size)
{
TEEC_Result res;
switch (req->msg_type) {
case NVME_RPMB_MSG_TYPE_REQ_AUTH_KEY_PROGRAM:
case NVME_RPMB_MSG_TYPE_REQ_AUTH_DATA_WRITE:
case NVME_RPMB_MSG_TYPE_REQ_AUTH_DCB_WRITE:
res = rpmb_write_request(fd, req, req_size, rsp, rsp_size);
break;
case NVME_RPMB_MSG_TYPE_REQ_WRITE_COUNTER_READ:
case NVME_RPMB_MSG_TYPE_REQ_AUTH_DATA_READ:
case NVME_RPMB_MSG_TYPE_REQ_AUTH_DCB_READ:
res = rpmb_read_request(fd, req, req_size, rsp, rsp_size);
break;
default:
EMSG("command 0x%08x not support\n", req->msg_type);
res = TEEC_ERROR_BAD_PARAMETERS;
break;
}
return res;
}
/*
* req is one struct rpmb_req followed by one struct nvme_rpmb_data_frame
* rsp is either one struct nvme_dev_info or one nvme_rpmb_data_frame
*/
static TEEC_Result nvme_rpmb_process_request_unlocked(
void *req, size_t req_size,
void *rsp, size_t rsp_size)
{
uint32_t res = TEEC_ERROR_GENERIC;
struct nvme_rpmb_req *sreq = req;
int fd = 0;
if (req_size < sizeof(struct nvme_rpmb_req))
return TEEC_ERROR_BAD_PARAMETERS;
switch (sreq->cmd) {
case NVME_RPMB_CMD_DATA_REQ:
/*
* To ensure only one device can be used, we will not close the device
* after it is opened.
*/
fd = open_nvme_rpmb_fd(sreq->dev_id);
if (fd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
res = nvme_rpmb_data_req(fd, NVME_RPMB_REQ_DATA(req),
req_size - sizeof(struct nvme_rpmb_req), rsp, rsp_size);
break;
case NVME_RPMB_CMD_GET_RPMBS_INFO:
if (req_size != sizeof(struct nvme_rpmb_req) ||
rsp_size != sizeof(struct nvme_dev_info)) {
EMSG("Invalid req/rsp size");
return TEEC_ERROR_BAD_PARAMETERS;
}
res = nvme_rpmb_get_rpmbs_info(sreq->dev_id, (struct nvme_dev_info *)rsp);
break;
default:
EMSG("Unsupported RPMB command: %d", sreq->cmd);
res = TEEC_ERROR_BAD_PARAMETERS;
break;
}
return res;
}
TEEC_Result nvme_rpmb_process_request(void *req, size_t req_size,
void *rsp, size_t rsp_size)
{
uint32_t res = 0;
tee_supp_mutex_lock(&nvme_rpmb_mutex);
res = nvme_rpmb_process_request_unlocked(req, req_size, rsp, rsp_size);
tee_supp_mutex_unlock(&nvme_rpmb_mutex);
return res;
}

View File

@@ -0,0 +1,16 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES.
*/
#ifndef NVME_RPMB_H
#define NVME_RPMB_H
#include <stdint.h>
#include <stddef.h>
uint32_t nvme_rpmb_process_request(void *req, size_t req_size, void *rsp,
size_t rsp_size);
#endif /* NVME_RPMB_H */

View File

@@ -0,0 +1,307 @@
/*
* Copyright (c) 2016-2017, Linaro Limited
* All rights reserved.
* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __OPTEE_MSG_SUPPLICANT_H
#define __OPTEE_MSG_SUPPLICANT_H
/*
* Load a TA into memory
*/
#define OPTEE_MSG_RPC_CMD_LOAD_TA 0
/*
* Replay Protected Memory Block access
*/
#define OPTEE_MSG_RPC_CMD_RPMB 1
/*
* File system access
*/
#define OPTEE_MSG_RPC_CMD_FS 2
/*
* Define protocol for messages with .cmd == OPTEE_MSG_RPC_CMD_FS and first
* parameter has the attribute OPTEE_MSG_ATTR_TYPE_VALUE_INPUT.
*/
/*
* Open a file
*
* [in] param[0].u.value.a OPTEE_MRF_OPEN
* [in] param[1].u.tmem a string holding the file name
* [out] param[2].u.value.a file descriptor of open file
*/
#define OPTEE_MRF_OPEN 0
/*
* Create a file
*
* [in] param[0].u.value.a OPTEE_MRF_CREATE
* [in] param[1].u.tmem a string holding the file name
* [out] param[2].u.value.a file descriptor of open file
*/
#define OPTEE_MRF_CREATE 1
/*
* Close a file
*
* [in] param[0].u.value.a OPTEE_MRF_CLOSE
* [in] param[0].u.value.b file descriptor of open file.
*/
#define OPTEE_MRF_CLOSE 2
/*
* Read from a file
*
* [in] param[0].u.value.a OPTEE_MRF_READ
* [in] param[0].u.value.b file descriptor of open file
* [in] param[0].u.value.c offset into file
* [out] param[1].u.tmem buffer to hold returned data
*/
#define OPTEE_MRF_READ 3
/*
* Write to a file
*
* [in] param[0].u.value.a OPTEE_MRF_WRITE
* [in] param[0].u.value.b file descriptor of open file
* [in] param[0].u.value.c offset into file
* [in] param[1].u.tmem buffer holding data to be written
*/
#define OPTEE_MRF_WRITE 4
/*
* Truncate a file
*
* [in] param[0].u.value.a OPTEE_MRF_TRUNCATE
* [in] param[0].u.value.b file descriptor of open file
* [in] param[0].u.value.c length of file.
*/
#define OPTEE_MRF_TRUNCATE 5
/*
* Remove a file
*
* [in] param[0].u.value.a OPTEE_MRF_REMOVE
* [in] param[1].u.tmem a string holding the file name
*/
#define OPTEE_MRF_REMOVE 6
/*
* Rename a file
*
* [in] param[0].u.value.a OPTEE_MRF_RENAME
* [in] param[0].u.value.b true if existing target should be removed
* [in] param[1].u.tmem a string holding the old file name
* [in] param[2].u.tmem a string holding the new file name
*/
#define OPTEE_MRF_RENAME 7
/*
* Opens a directory for file listing
*
* [in] param[0].u.value.a OPTEE_MRF_OPENDIR
* [in] param[1].u.tmem a string holding the name of the directory
* [out] param[2].u.value.a handle to open directory
*/
#define OPTEE_MRF_OPENDIR 8
/*
* Closes a directory handle
*
* [in] param[0].u.value.a OPTEE_MRF_CLOSEDIR
* [in] param[0].u.value.b handle to open directory
*/
#define OPTEE_MRF_CLOSEDIR 9
/*
* Read next file name of directory
*
*
* [in] param[0].u.value.a OPTEE_MRF_READDIR
* [in] param[0].u.value.b handle to open directory
* [out] param[1].u.tmem a string holding the file name
*/
#define OPTEE_MRF_READDIR 10
/*
* End of definitions for messages with .cmd == OPTEE_MSG_RPC_CMD_FS
*/
/*
* Command Ids 3, 4 and 5 of OPTEE_MSG_RPC_CMD_xxx macros are reserved for use
* by the kernel driver.
*/
/*
* Shared memory allocation
*/
#define OPTEE_MSG_RPC_CMD_SHM_ALLOC 6
#define OPTEE_MSG_RPC_CMD_SHM_FREE 7
/*
* Was OPTEE_MSG_RPC_CMD_SQL_FS, which isn't supported any longer
*/
#define OPTEE_MSG_RPC_CMD_SQL_FS_RESERVED 8
/*
* GPROF support management commands
*/
#define OPTEE_MSG_RPC_CMD_GPROF 9
/*
* Socket commands
*/
#define OPTEE_MSG_RPC_CMD_SOCKET 10
/*
* Function tracing support management commands
*/
#define OPTEE_MSG_RPC_CMD_FTRACE 11
/*
* Plugin commands
*/
#define OPTEE_MSG_RPC_CMD_PLUGIN 12
/*
* NVMe Replay Protected Memory Block access
*/
#define OPTEE_MSG_RPC_CMD_NVME_RPMB 13
/*
* Define protocol for messages with .cmd == OPTEE_MSG_RPC_CMD_SOCKET
*/
#define OPTEE_MRC_SOCKET_TIMEOUT_NONBLOCKING 0
#define OPTEE_MRC_SOCKET_TIMEOUT_BLOCKING 0xffffffff
/*
* Open socket
*
* [in] param[0].u.value.a OPTEE_MRC_SOCKET_OPEN
* [in] param[0].u.value.b TA instance id
* [in] param[1].u.value.a server port number
* [in] param[1].u.value.b protocol, TEE_ISOCKET_PROTOCOLID_*
* [in] param[1].u.value.c ip version TEE_IP_VERSION_* from tee_ipsocket.h
* [in] param[2].u.tmem server address
* [out] param[3].u.value.a socket handle (32-bit)
*/
#define OPTEE_MRC_SOCKET_OPEN 0
/*
* Close socket
*
* [in] param[0].u.value.a OPTEE_MRC_SOCKET_CLOSE
* [in] param[0].u.value.b TA instance id
* [in] param[0].u.value.c socket handle
*/
#define OPTEE_MRC_SOCKET_CLOSE 1
/*
* Close all sockets
*
* [in] param[0].u.value.a OPTEE_MRC_SOCKET_CLOSE_ALL
* [in] param[0].u.value.b TA instance id
*/
#define OPTEE_MRC_SOCKET_CLOSE_ALL 2
/*
* Send data on socket
*
* [in] param[0].u.value.a OPTEE_MRC_SOCKET_SEND
* [in] param[0].u.value.b TA instance id
* [in] param[0].u.value.c socket handle
* [in] param[1].u.tmem buffer to transmit
* [in] param[2].u.value.a timeout ms or OPTEE_MRC_SOCKET_TIMEOUT_*
* [out] param[2].u.value.b number of transmitted bytes
*/
#define OPTEE_MRC_SOCKET_SEND 3
/*
* Receive data on socket
*
* [in] param[0].u.value.a OPTEE_MRC_SOCKET_RECV
* [in] param[0].u.value.b TA instance id
* [in] param[0].u.value.c socket handle
* [out] param[1].u.tmem buffer to receive
* [in] param[2].u.value.a timeout ms or OPTEE_MRC_SOCKET_TIMEOUT_*
*/
#define OPTEE_MRC_SOCKET_RECV 4
/*
* Perform IOCTL on socket
*
* [in] param[0].u.value.a OPTEE_MRC_SOCKET_IOCTL
* [in] param[0].u.value.b TA instance id
* [in] param[0].u.value.c socket handle
* [in/out] param[1].u.tmem buffer
* [in] param[2].u.value.a ioctl command
*/
#define OPTEE_MRC_SOCKET_IOCTL 5
/*
* End of definitions for messages with .cmd == OPTEE_MSG_RPC_CMD_SOCKET
*/
/*
* Define protocol for messages with .cmd == OPTEE_MSG_RPC_CMD_PLUGIN
*/
/*
* Invoke a tee-supplicant plugin.
*
* [in] param[0].u.value.a OPTEE_INVOKE_PLUGIN
* [in] param[0].u.value.b uuid.d1
* [in] param[0].u.value.c uuid.d2
* [in] param[1].u.value.a uuid.d3
* [in] param[1].u.value.b uuid.d4
* [in] param[1].u.value.c cmd for plugin
* [in] param[2].u.value.a sub_cmd for plugin
* [out] param[2].u.value.b length of the outbuf (param[3]),
* if out is needed.
* [in/out] param[3].u.tmem buffer holding data for plugin
*
* UUID serialized into octets:
* b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15
* d1 | d2 | d3 | d4
*
* The endianness of words d1, d2, d3 and d4 from SWd is little-endian.
* d1 word contains [b3 b2 b1 b0]
* d2 word contains [b7 b6 b5 b4]
* d3 word contains [b11 b10 b9 b8]
* d4 word contains [b15 b14 b13 b12]
*/
#define OPTEE_INVOKE_PLUGIN 0
/*
* End of definitions for messages with .cmd == OPTEE_MSG_RPC_CMD_PLUGIN
*/
#endif /*__OPTEE_MSG_SUPPLICANT_H*/

View File

@@ -0,0 +1,233 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2020, Open Mobile Platform LLC
*/
#include <assert.h>
#include <ctype.h>
#include <dlfcn.h>
#include <dirent.h>
#include <plugin.h>
#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <tee_client_api.h>
#include <teec_trace.h>
#include <tee_supplicant.h>
#include "optee_msg_supplicant.h"
#ifndef __aligned
#define __aligned(x) __attribute__((__aligned__(x)))
#endif
#include <linux/tee.h>
/* internal possible returned values */
enum plugin_err {
PLUGIN_OK = 0,
PLUGIN_DL_OPEN_ERR = -1,
PLUGIN_DL_SYM_ERR = -2,
};
static struct plugin *plugin_list_head;
/* returns 0, if u1 and u2 are equal */
static int uuid_cmp(TEEC_UUID *u1, TEEC_UUID *u2)
{
if (!memcmp(u1, u2, sizeof(TEEC_UUID)))
return 0;
return 1;
}
static void uuid_from_octets(TEEC_UUID *d, const uint8_t s[TEE_IOCTL_UUID_LEN])
{
d->timeLow = ((uint32_t)s[0] << 24) | ((uint32_t)s[1] << 16) |
((uint32_t)s[2] << 8) | s[3];
d->timeMid = ((uint32_t)s[4] << 8) | s[5];
d->timeHiAndVersion = ((uint32_t)s[6] << 8) | s[7];
memcpy(d->clockSeqAndNode, s + 8, sizeof(d->clockSeqAndNode));
}
static void push_plugin(struct plugin *p)
{
p->next = plugin_list_head;
plugin_list_head = p;
}
static struct plugin *find_plugin(TEEC_UUID *u)
{
struct plugin *p = plugin_list_head;
while (p) {
if (!uuid_cmp(&p->method->uuid, u))
return p;
p = p->next;
}
return NULL;
}
static enum plugin_err load_plugin(const char *name, struct plugin *p)
{
void *handle = NULL;
struct plugin_method *m = NULL;
handle = dlopen(name, RTLD_LAZY);
if (!handle)
return PLUGIN_DL_OPEN_ERR;
m = (struct plugin_method *)dlsym(handle, "plugin_method");
if (!m || !m->name || !m->invoke) {
dlclose(handle);
return PLUGIN_DL_SYM_ERR;
}
p->handle = handle;
p->method = m;
return PLUGIN_OK;
}
static TEEC_Result plugin_invoke(TEEC_UUID *u, unsigned int cmd,
unsigned int sub_cmd, void *data,
size_t in_len, size_t *out_len)
{
struct plugin *p = NULL;
p = find_plugin(u);
if (!p)
return TEEC_ERROR_ITEM_NOT_FOUND;
assert(p->method->invoke);
return p->method->invoke(cmd, sub_cmd, data, in_len, out_len);
}
TEEC_Result plugin_load_all(void)
{
DIR *dir = NULL;
enum plugin_err res = PLUGIN_OK;
TEEC_Result teec_res = TEEC_SUCCESS;
struct dirent *entry = NULL;
char path[PATH_MAX] = { 0 };
dir = opendir(supplicant_params.plugin_load_path);
if (!dir) {
IMSG("could not open directory %s", supplicant_params.plugin_load_path);
/* don't generate error if there is no the dir */
return TEEC_SUCCESS;
}
while ((entry = readdir(dir))) {
struct plugin *p;
int r;
if (!strcmp(entry->d_name, "..") || !strcmp(entry->d_name, "."))
continue;
p = calloc(1, sizeof(struct plugin));
if (!p) {
EMSG("allocate mem for plugin <%s> failed",
entry->d_name);
closedir(dir);
return TEEC_ERROR_OUT_OF_MEMORY;
}
r = snprintf(path, sizeof(path), "%s/%s",
supplicant_params.plugin_load_path, entry->d_name);
if (r < 0 || r >= (int)sizeof(path)) {
EMSG("assemble of full path for plugin <%s> failed",
entry->d_name);
closedir(dir);
return TEEC_ERROR_GENERIC ;
}
res = load_plugin(path, p);
switch (res) {
case PLUGIN_DL_OPEN_ERR:
EMSG("open plugin <%s> failed: %s",
entry->d_name, dlerror());
free(p);
continue;
case PLUGIN_DL_SYM_ERR:
EMSG("find 'plugin_method' sym in <%s> failed: %s",
entry->d_name, dlerror());
free(p);
continue;
default:
DMSG("loading the <%s> plugin were successful",
p->method->name);
break;
}
/* Init the plugin */
if (p->method->init) {
teec_res = p->method->init();
if (teec_res) {
EMSG("init the <%s> plugin failed with 0x%x",
p->method->name, teec_res);
free(p);
continue;
}
}
push_plugin(p);
}
closedir(dir);
return TEEC_SUCCESS;
}
TEEC_Result plugin_process(size_t num_params, struct tee_ioctl_param *params)
{
unsigned int cmd = 0;
unsigned int sub_cmd = 0;
void *data = NULL;
uint32_t data_len = 0;
TEEC_UUID uuid = { };
uint32_t uuid_words[4] = { };
size_t outlen = 0;
TEEC_Result res = TEEC_ERROR_NOT_SUPPORTED;
if (num_params != 4 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[2].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT ||
(params[3].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT)
return TEEC_ERROR_BAD_PARAMETERS;
uuid_words[0] = params[0].b;
uuid_words[1] = params[0].c;
uuid_words[2] = params[1].a;
uuid_words[3] = params[1].b;
uuid_from_octets(&uuid, (const uint8_t *)uuid_words);
cmd = params[1].c;
sub_cmd = params[2].a;
data = tee_supp_param_to_va(params + 3);
data_len = MEMREF_SIZE(params + 3);
if (data_len && !data)
return TEEC_ERROR_BAD_PARAMETERS;
switch (params[0].a) {
case OPTEE_INVOKE_PLUGIN:
res = plugin_invoke(&uuid, cmd, sub_cmd, data, data_len,
&outlen);
params[2].b = outlen;
default:
break;
}
return res;
}

View File

@@ -0,0 +1,50 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2020, Open Mobile Platform LLC
*/
#ifndef PLUGIN_H
#define PLUGIN_H
#include <stdint.h>
#include <tee_client_api.h>
#include <tee_plugin_method.h>
struct tee_ioctl_param;
/* This structure describes one plugin for the supplicant */
struct plugin {
void *handle;
struct plugin_method *method; /* Implemented in the plugin */
struct plugin *next;
};
#ifdef TEE_SUPP_PLUGINS
/*
* Loads all shared objects from 'CFG_TEE_PLUGIN_LOAD_PATH'
* and binds all functions.
*
* @return 'TEEC_SUCCESS' if all plugins were successfully loaded.
*/
TEEC_Result plugin_load_all(void);
/* Plugin RPC handler */
TEEC_Result plugin_process(size_t num_params, struct tee_ioctl_param *params);
#else
static inline TEEC_Result plugin_load_all(void)
{
return TEEC_SUCCESS;
}
static inline TEEC_Result plugin_process(size_t num_params,
struct tee_ioctl_param *params)
{
(void)num_params;
(void)params;
return TEEC_ERROR_NOT_SUPPORTED;
}
#endif /*TEE_SUPP_PLUGINS*/
#endif /* PLUGIN_H */

View File

@@ -0,0 +1,137 @@
/*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <errno.h>
#include <stdint.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <tee_client_api.h>
#include <tee_supplicant.h>
#include "prof.h"
#ifndef __aligned
#define __aligned(x) __attribute__((__aligned__(x)))
#endif
#include <linux/tee.h>
TEEC_Result prof_process(size_t num_params, struct tee_ioctl_param *params,
const char *prefix)
{
char vers[5] = "";
char path[255] = { 0 };
size_t bufsize = 0;
TEEC_UUID *u = NULL;
int fd = -1;
void *buf = NULL;
int flags = 0;
int id = 0;
int st = 0;
int n = 0;
if (num_params != 3 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT ||
(params[2].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT)
return TEEC_ERROR_BAD_PARAMETERS;
id = params[0].a;
if (MEMREF_SIZE(params + 1) != sizeof(TEEC_UUID))
return TEEC_ERROR_BAD_PARAMETERS;
u = tee_supp_param_to_va(params + 1);
if (!u)
return TEEC_ERROR_BAD_PARAMETERS;
buf = tee_supp_param_to_va(params + 2);
if (!buf)
return TEEC_ERROR_BAD_PARAMETERS;
bufsize = MEMREF_SIZE(params + 2);
if (id < 0 || id > 100)
return TEEC_ERROR_BAD_PARAMETERS;
flags = O_APPEND | O_WRONLY;
if (!id) {
/* id == 0 means create file */
flags |= O_CREAT | O_EXCL;
id = 1;
}
for (;;) {
if (id > 1) {
/*
* id == 1 is file 0 (no suffix), id == 2 is file .1
* etc.
*/
if (id > 100)
id = 100; /* Avoid GCC truncation warning */
snprintf(vers, sizeof(vers), ".%d", id - 1);
}
n = snprintf(path, sizeof(path),
"/tmp/%s"
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x"
"%s.out",
prefix,
u->timeLow, u->timeMid, u->timeHiAndVersion,
u->clockSeqAndNode[0], u->clockSeqAndNode[1],
u->clockSeqAndNode[2], u->clockSeqAndNode[3],
u->clockSeqAndNode[4], u->clockSeqAndNode[5],
u->clockSeqAndNode[6], u->clockSeqAndNode[7],
vers);
if ((n < 0) || (n >= (int)sizeof(path)))
break;
fd = open(path, flags, 0644);
if (fd >= 0) {
do {
st = write(fd, buf, bufsize);
} while (st < 0 && errno == EINTR);
close(fd);
if (st < 0 || st != (int)bufsize)
break;
params[0].a = id;
goto success;
}
if (errno != EEXIST)
break;
if (id++ == 100)
break;
}
/* An error occurred */
return TEEC_ERROR_GENERIC;
success:
return TEEC_SUCCESS;
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef PROF_H
#define PROF_H
#include <tee_client_api.h>
struct tee_ioctl_param;
#if defined(CFG_TA_GPROF_SUPPORT) || defined(CFG_FTRACE_SUPPORT)
TEEC_Result prof_process(size_t num_params, struct tee_ioctl_param *params,
const char *prefix);
#else
static inline TEEC_Result prof_process(size_t num_params,
struct tee_ioctl_param *params,
const char *prefix)
{
(void)num_params;
(void)params;
(void)prefix;
return TEEC_ERROR_NOT_SUPPORTED;
}
#endif /* CFG_TA_GPROF_SUPPORT || CFG_FTRACE_SUPPORT */
#endif /* PROF_H */

View File

@@ -0,0 +1,985 @@
/*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <dirent.h>
#include <fcntl.h>
#include <linux/types.h>
#include <linux/mmc/ioctl.h>
#include <netinet/in.h>
#include <pthread.h>
#include <rpmb.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <tee_client_api.h>
#include <teec_trace.h>
#include <tee_supplicant.h>
#include <unistd.h>
#ifdef RPMB_EMU
#include <stdarg.h>
#include "hmac_sha2.h"
#else
#include <errno.h>
#endif
/*
* Request and response definitions must be in sync with the secure side
*/
/* Request */
struct rpmb_req {
uint16_t cmd;
#define RPMB_CMD_DATA_REQ 0x00
#define RPMB_CMD_GET_DEV_INFO 0x01
uint16_t dev_id;
uint16_t block_count;
/* Optional data frames (rpmb_data_frame) follow */
};
#define RPMB_REQ_DATA(req) ((void *)((struct rpmb_req *)(req) + 1))
#define RPMB_CID_SZ 16
/* Response to device info request */
struct rpmb_dev_info {
uint8_t cid[RPMB_CID_SZ];
uint8_t rpmb_size_mult; /* EXT CSD-slice 168: RPMB Size */
uint8_t rel_wr_sec_c; /* EXT CSD-slice 222: Reliable Write Sector */
/* Count */
uint8_t ret_code;
#define RPMB_CMD_GET_DEV_INFO_RET_OK 0x00
#define RPMB_CMD_GET_DEV_INFO_RET_ERROR 0x01
};
/*
* This structure is shared with OP-TEE and the MMC ioctl layer.
* It is the "data frame for RPMB access" defined by JEDEC, minus the
* start and stop bits.
*/
struct rpmb_data_frame {
uint8_t stuff_bytes[196];
uint8_t key_mac[32];
uint8_t data[256];
uint8_t nonce[16];
uint32_t write_counter;
uint16_t address;
uint16_t block_count;
uint16_t op_result;
#define RPMB_RESULT_OK 0x00
#define RPMB_RESULT_GENERAL_FAILURE 0x01
#define RPMB_RESULT_AUTH_FAILURE 0x02
#define RPMB_RESULT_ADDRESS_FAILURE 0x04
#define RPMB_RESULT_AUTH_KEY_NOT_PROGRAMMED 0x07
uint16_t msg_type;
#define RPMB_MSG_TYPE_REQ_AUTH_KEY_PROGRAM 0x0001
#define RPMB_MSG_TYPE_REQ_WRITE_COUNTER_VAL_READ 0x0002
#define RPMB_MSG_TYPE_REQ_AUTH_DATA_WRITE 0x0003
#define RPMB_MSG_TYPE_REQ_AUTH_DATA_READ 0x0004
#define RPMB_MSG_TYPE_REQ_RESULT_READ 0x0005
#define RPMB_MSG_TYPE_RESP_AUTH_KEY_PROGRAM 0x0100
#define RPMB_MSG_TYPE_RESP_WRITE_COUNTER_VAL_READ 0x0200
#define RPMB_MSG_TYPE_RESP_AUTH_DATA_WRITE 0x0300
#define RPMB_MSG_TYPE_RESP_AUTH_DATA_READ 0x0400
};
static pthread_mutex_t rpmb_mutex = PTHREAD_MUTEX_INITIALIZER;
/*
* ioctl() interface
* Comes from: uapi/linux/major.h, linux/mmc/core.h
*/
#define MMC_BLOCK_MAJOR 179
/* mmc_ioc_cmd.opcode */
#define MMC_READ_MULTIPLE_BLOCK 18
#define MMC_WRITE_MULTIPLE_BLOCK 25
/* mmc_ioc_cmd.flags */
#define MMC_RSP_PRESENT (1 << 0)
#define MMC_RSP_136 (1 << 1) /* 136 bit response */
#define MMC_RSP_CRC (1 << 2) /* Expect valid CRC */
#define MMC_RSP_OPCODE (1 << 4) /* Response contains opcode */
#define MMC_RSP_R1 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
#define MMC_CMD_ADTC (1 << 5) /* Addressed data transfer command */
/* mmc_ioc_cmd.write_flag */
#define MMC_CMD23_ARG_REL_WR (1 << 31) /* CMD23 reliable write */
/* Maximum number of commands used in a multiple ioc command request */
#define RPMB_MAX_IOC_MULTI_CMDS 3
#ifndef RPMB_EMU
#define IOCTL(fd, request, ...) \
({ \
int ret; \
ret = ioctl((fd), (request), ##__VA_ARGS__); \
if (ret < 0) \
EMSG("ioctl ret=%d errno=%d", ret, errno); \
ret; \
})
/* Open and/or return file descriptor to RPMB partition of device dev_id */
static int mmc_rpmb_fd(uint16_t dev_id)
{
static int id;
static int fd = -1;
char path[PATH_MAX] = { 0 };
DMSG("dev_id = %u", dev_id);
if (fd < 0) {
snprintf(path, sizeof(path), "/dev/mmcblk%urpmb", dev_id);
fd = open(path, O_RDWR);
if (fd < 0) {
EMSG("Could not open %s (%s)", path, strerror(errno));
return -1;
}
id = dev_id;
}
if (id != dev_id) {
EMSG("Only one MMC device is supported");
return -1;
}
return fd;
}
/*
* Read @n bytes from @fd, takes care of short reads and EINTR.
* Adapted from “Advanced Programming In the UNIX Environment” by W. Richard
* Stevens and Stephen A. Rago, 2013, 3rd Edition, Addison-Wesley
* (EINTR handling was added)
*/
static ssize_t readn(int fd, void *ptr, size_t n)
{
size_t nleft = n;
ssize_t nread = 0;
uint8_t *p = ptr;
while (nleft > 0) {
if ((nread = read(fd, p, nleft)) < 0) {
if (errno == EINTR)
continue;
if (nleft == n)
return -1; /* error, nothing read, return -1 */
else
break; /* error, return amount read so far */
} else if (nread == 0) {
break; /* EOF */
}
nleft -= nread;
p += nread;
}
return n - nleft; /* return >= 0 */
}
/* Size of CID printed in hexadecimal */
#define CID_STR_SZ (2 * RPMB_CID_SZ)
static TEEC_Result read_cid_str(uint16_t dev_id, char cid[CID_STR_SZ + 1])
{
TEEC_Result res = TEEC_ERROR_GENERIC;
char path[48] = { 0 };
int fd = 0;
int st = 0;
snprintf(path, sizeof(path),
"/sys/class/mmc_host/mmc%u/mmc%u:0001/cid", dev_id, dev_id);
fd = open(path, O_RDONLY);
if (fd < 0)
return TEEC_ERROR_ITEM_NOT_FOUND;
st = readn(fd, cid, CID_STR_SZ);
if (st != CID_STR_SZ) {
EMSG("Read CID error");
if (errno)
EMSG("%s", strerror(errno));
res = TEEC_ERROR_NO_DATA;
goto out;
}
res = TEEC_SUCCESS;
out:
close(fd);
return res;
}
static int hexchar2int(char c)
{
if (c >= '0' && c <= '9')
return c - '0';
if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
return -1;
}
static int hexbyte2int(char *hex)
{
int v1 = hexchar2int(hex[0]);
int v2 = hexchar2int(hex[1]);
if (v1 < 0 || v2 < 0)
return -1;
return 16 * v1 + v2;
}
/* Device Identification (CID) register is 16 bytes. It is read from sysfs. */
static TEEC_Result read_cid(uint16_t dev_id, uint8_t *cid)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
char cid_str[CID_STR_SZ + 1] = { };
int i = 0;
int v = 0;
res = read_cid_str(dev_id, cid_str);
if (res)
return res;
for (i = 0; i < RPMB_CID_SZ; i++) {
v = hexbyte2int(cid_str + 2 * i);
if (v < 0) {
EMSG("Invalid CID string: %s", cid_str);
return TEEC_ERROR_NO_DATA;
}
cid[i] = v;
}
return TEEC_SUCCESS;
}
static TEEC_Result read_mmc_sysfs_hex(uint16_t dev_id, const char *file, uint8_t *value)
{
TEEC_Result status = TEEC_SUCCESS;
char path[255] = { 0 };
char buf[255] = { 0 };
char *endp = buf;
int fd = 0;
int ret = 0;
snprintf(path, sizeof(path), "/sys/class/mmc_host/mmc%u/mmc%u:0001/%s",
dev_id, dev_id, file);
fd = open(path, O_RDONLY);
if (fd < 0) {
EMSG("Could not open %s (%s)", path, strerror(errno));
return TEEC_ERROR_ITEM_NOT_FOUND;
}
ret = readn(fd, buf, sizeof(buf));
if (ret < 0) {
EMSG("Read error (%s)", strerror(errno));
status = TEEC_ERROR_NO_DATA;
goto out;
}
errno = 0;
*value = strtol(buf, &endp, 16);
if (errno || endp == buf)
status = TEEC_ERROR_GENERIC;
out:
close(fd);
return status;
}
static TEEC_Result read_size_mult(uint16_t dev_id, uint8_t *value)
{
return read_mmc_sysfs_hex(dev_id, "raw_rpmb_size_mult", value);
}
static TEEC_Result read_rel_wr_sec_c(uint16_t dev_id, uint8_t *value)
{
return read_mmc_sysfs_hex(dev_id, "rel_sectors", value);
}
/*
* - If --rpmb-cid is given, find the eMMC RPMB device number with the specified
* CID, cache the number, copy it to @ndev_id and return true. If not found
* return false.
* - If --rpmb-cid is not given, copy @dev_id to @ndev_id and return true.
*/
static bool remap_rpmb_dev_id(uint16_t dev_id, uint16_t *ndev_id)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
static bool found = false;
static bool err = false;
static uint16_t id = 0;
char cid[CID_STR_SZ + 1] = { };
struct dirent *dent = NULL;
DIR *dir = NULL;
int num = 0;
if (err || found)
goto out;
if (!supplicant_params.rpmb_cid) {
id = dev_id;
found = true;
goto out;
}
dir = opendir("/sys/class/mmc_host");
if (!dir) {
EMSG("Could not open /sys/class/mmc_host (%s)",
strerror(errno));
err = true;
goto out;
}
while ((dent = readdir(dir))) {
if (sscanf(dent->d_name, "%*[^0123456789]%d", &num) != 1)
continue;
if (num > UINT16_MAX) {
EMSG("Too many MMC devices");
err = true;
break;
}
id = (uint16_t)num;
res = read_cid_str(id, cid);
if (res)
continue;
if (strcmp(cid, supplicant_params.rpmb_cid))
continue;
IMSG("RPMB device %s is at /dev/mmcblk%urpmb\n", cid, id);
found = true;
break;
}
closedir(dir);
if (!found)
err = true;
out:
if (found)
*ndev_id = id;
return found;
}
#else /* RPMB_EMU */
#define IOCTL(fd, request, ...) ioctl_emu((fd), (request), ##__VA_ARGS__)
/* Emulated rel_wr_sec_c value (reliable write size, *256 bytes) */
#define EMU_RPMB_REL_WR_SEC_C 1
/* Emulated rpmb_size_mult value (RPMB size, *128 kB) */
#define EMU_RPMB_SIZE_MULT 2
#define EMU_RPMB_SIZE_BYTES (EMU_RPMB_SIZE_MULT * 128 * 1024)
/* Emulated eMMC device state */
struct rpmb_emu {
uint8_t buf[EMU_RPMB_SIZE_BYTES];
size_t size;
uint8_t key[32];
bool key_set;
uint8_t nonce[16];
uint32_t write_counter;
struct {
uint16_t msg_type;
uint16_t op_result;
uint16_t address;
} last_op;
};
static struct rpmb_emu rpmb_emu = {
.size = EMU_RPMB_SIZE_BYTES
};
static struct rpmb_emu *mem_for_fd(int fd)
{
static int sfd = -1;
if (sfd == -1)
sfd = fd;
if (sfd != fd) {
EMSG("Emulating more than 1 RPMB partition is not supported");
return NULL;
}
return &rpmb_emu;
}
#if (DEBUGLEVEL >= TRACE_FLOW)
static void dump_blocks(size_t startblk, size_t numblk, uint8_t *ptr,
bool to_mmc)
{
char msg[100] = { 0 };
size_t i = 0;
for (i = 0; i < numblk; i++) {
snprintf(msg, sizeof(msg), "%s MMC block %zu",
to_mmc ? "Write" : "Read", startblk + i);
dump_buffer(msg, ptr, 256);
ptr += 256;
}
}
#else
static void dump_blocks(size_t startblk, size_t numblk, uint8_t *ptr,
bool to_mmc)
{
(void)startblk;
(void)numblk;
(void)ptr;
(void)to_mmc;
}
#endif
#define CUC(x) ((const unsigned char *)(x))
static void hmac_update_frm(hmac_sha256_ctx *ctx, struct rpmb_data_frame *frm)
{
hmac_sha256_update(ctx, CUC(frm->data), 256);
hmac_sha256_update(ctx, CUC(frm->nonce), 16);
hmac_sha256_update(ctx, CUC(&frm->write_counter), 4);
hmac_sha256_update(ctx, CUC(&frm->address), 2);
hmac_sha256_update(ctx, CUC(&frm->block_count), 2);
hmac_sha256_update(ctx, CUC(&frm->op_result), 2);
hmac_sha256_update(ctx, CUC(&frm->msg_type), 2);
}
static bool is_hmac_valid(struct rpmb_emu *mem, struct rpmb_data_frame *frm,
size_t nfrm)
{
uint8_t mac[32] = { 0 };
size_t i = 0;
hmac_sha256_ctx ctx;
memset(&ctx, 0, sizeof(ctx));
if (!mem->key_set) {
EMSG("Cannot check MAC (key not set)");
return false;
}
hmac_sha256_init(&ctx, mem->key, sizeof(mem->key));
for (i = 0; i < nfrm; i++, frm++)
hmac_update_frm(&ctx, frm);
frm--;
hmac_sha256_final(&ctx, mac, 32);
if (memcmp(mac, frm->key_mac, 32)) {
EMSG("Invalid MAC");
return false;
}
return true;
}
static uint16_t gen_msb1st_result(uint8_t byte)
{
return (uint16_t)byte << 8;
}
static uint16_t compute_hmac(struct rpmb_emu *mem, struct rpmb_data_frame *frm,
size_t nfrm)
{
size_t i = 0;
hmac_sha256_ctx ctx;
memset(&ctx, 0, sizeof(ctx));
if (!mem->key_set) {
EMSG("Cannot compute MAC (key not set)");
return gen_msb1st_result(RPMB_RESULT_AUTH_KEY_NOT_PROGRAMMED);
}
hmac_sha256_init(&ctx, mem->key, sizeof(mem->key));
for (i = 0; i < nfrm; i++, frm++)
hmac_update_frm(&ctx, frm);
frm--;
hmac_sha256_final(&ctx, frm->key_mac, 32);
return gen_msb1st_result(RPMB_RESULT_OK);
}
static uint16_t ioctl_emu_mem_transfer(struct rpmb_emu *mem,
struct rpmb_data_frame *frm,
size_t nfrm, int to_mmc)
{
size_t start = mem->last_op.address * 256;
size_t size = nfrm * 256;
size_t i = 0;
uint8_t *memptr = NULL;
if (start > mem->size || start + size > mem->size) {
EMSG("Transfer bounds exceeed emulated memory");
return gen_msb1st_result(RPMB_RESULT_ADDRESS_FAILURE);
}
if (to_mmc && !is_hmac_valid(mem, frm, nfrm))
return gen_msb1st_result(RPMB_RESULT_AUTH_FAILURE);
DMSG("Transferring %zu 256-byte data block%s %s MMC (block offset=%zu)",
nfrm, (nfrm > 1) ? "s" : "", to_mmc ? "to" : "from", start / 256);
for (i = 0; i < nfrm; i++) {
memptr = mem->buf + start + i * 256;
if (to_mmc) {
memcpy(memptr, frm[i].data, 256);
mem->write_counter++;
frm[i].write_counter = htonl(mem->write_counter);
frm[i].msg_type =
htons(RPMB_MSG_TYPE_RESP_AUTH_DATA_WRITE);
} else {
memcpy(frm[i].data, memptr, 256);
frm[i].msg_type =
htons(RPMB_MSG_TYPE_RESP_AUTH_DATA_READ);
frm[i].address = htons(mem->last_op.address);
frm[i].block_count = nfrm;
memcpy(frm[i].nonce, mem->nonce, 16);
}
frm[i].op_result = gen_msb1st_result(RPMB_RESULT_OK);
}
dump_blocks(mem->last_op.address, nfrm, mem->buf + start, to_mmc);
if (!to_mmc)
compute_hmac(mem, frm, nfrm);
return gen_msb1st_result(RPMB_RESULT_OK);
}
static void ioctl_emu_get_write_result(struct rpmb_emu *mem,
struct rpmb_data_frame *frm)
{
frm->msg_type = htons(RPMB_MSG_TYPE_RESP_AUTH_DATA_WRITE);
frm->op_result = mem->last_op.op_result;
frm->address = htons(mem->last_op.address);
frm->write_counter = htonl(mem->write_counter);
compute_hmac(mem, frm, 1);
}
static uint16_t ioctl_emu_setkey(struct rpmb_emu *mem,
struct rpmb_data_frame *frm)
{
if (mem->key_set) {
EMSG("Key already set");
return gen_msb1st_result(RPMB_RESULT_GENERAL_FAILURE);
}
dump_buffer("Setting key", frm->key_mac, 32);
memcpy(mem->key, frm->key_mac, 32);
mem->key_set = true;
return gen_msb1st_result(RPMB_RESULT_OK);
}
static void ioctl_emu_get_keyprog_result(struct rpmb_emu *mem,
struct rpmb_data_frame *frm)
{
frm->msg_type =
htons(RPMB_MSG_TYPE_RESP_AUTH_KEY_PROGRAM);
frm->op_result = mem->last_op.op_result;
}
static void ioctl_emu_read_ctr(struct rpmb_emu *mem,
struct rpmb_data_frame *frm)
{
DMSG("Reading counter");
frm->msg_type = htons(RPMB_MSG_TYPE_RESP_WRITE_COUNTER_VAL_READ);
frm->write_counter = htonl(mem->write_counter);
memcpy(frm->nonce, mem->nonce, 16);
frm->op_result = compute_hmac(mem, frm, 1);
}
static uint32_t read_cid(uint16_t dev_id, uint8_t *cid)
{
/* Taken from an actual eMMC chip */
static const uint8_t test_cid[] = {
/* MID (Manufacturer ID): Micron */
0xfe,
/* CBX (Device/BGA): BGA */
0x01,
/* OID (OEM/Application ID) */
0x4e,
/* PNM (Product name) "MMC04G" */
0x4d, 0x4d, 0x43, 0x30, 0x34, 0x47,
/* PRV (Product revision): 4.2 */
0x42,
/* PSN (Product serial number) */
0xc8, 0xf6, 0x55, 0x2a,
/*
* MDT (Manufacturing date):
* June, 2014
*/
0x61,
/* (CRC7 (0xA) << 1) | 0x1 */
0x15
};
(void)dev_id;
memcpy(cid, test_cid, sizeof(test_cid));
return TEEC_SUCCESS;
}
/* A crude emulation of the MMC ioc commands we need for RPMB */
static int ioctl_emu_cmd(int fd, struct mmc_ioc_cmd *cmd)
{
struct rpmb_data_frame *frm = NULL;
uint16_t msg_type = 0;
struct rpmb_emu *mem = mem_for_fd(fd);
if (!mem)
return -1;
switch (cmd->opcode) {
case MMC_WRITE_MULTIPLE_BLOCK:
frm = (struct rpmb_data_frame *)(uintptr_t)cmd->data_ptr;
msg_type = ntohs(frm->msg_type);
switch (msg_type) {
case RPMB_MSG_TYPE_REQ_AUTH_KEY_PROGRAM:
mem->last_op.msg_type = msg_type;
mem->last_op.op_result = ioctl_emu_setkey(mem, frm);
break;
case RPMB_MSG_TYPE_REQ_AUTH_DATA_WRITE:
mem->last_op.msg_type = msg_type;
mem->last_op.address = ntohs(frm->address);
mem->last_op.op_result =
ioctl_emu_mem_transfer(mem, frm,
cmd->blocks, 1);
break;
case RPMB_MSG_TYPE_REQ_WRITE_COUNTER_VAL_READ:
case RPMB_MSG_TYPE_REQ_AUTH_DATA_READ:
memcpy(mem->nonce, frm->nonce, 16);
mem->last_op.msg_type = msg_type;
mem->last_op.address = ntohs(frm->address);
break;
default:
break;
}
break;
case MMC_READ_MULTIPLE_BLOCK:
frm = (struct rpmb_data_frame *)(uintptr_t)cmd->data_ptr;
msg_type = ntohs(frm->msg_type);
switch (mem->last_op.msg_type) {
case RPMB_MSG_TYPE_REQ_AUTH_KEY_PROGRAM:
ioctl_emu_get_keyprog_result(mem, frm);
break;
case RPMB_MSG_TYPE_REQ_AUTH_DATA_WRITE:
ioctl_emu_get_write_result(mem, frm);
break;
case RPMB_MSG_TYPE_REQ_WRITE_COUNTER_VAL_READ:
ioctl_emu_read_ctr(mem, frm);
break;
case RPMB_MSG_TYPE_REQ_AUTH_DATA_READ:
ioctl_emu_mem_transfer(mem, frm, cmd->blocks, 0);
break;
default:
EMSG("Unexpected");
break;
}
break;
default:
EMSG("Unsupported ioctl opcode 0x%08x", cmd->opcode);
return -1;
}
return 0;
}
static int ioctl_emu(int fd, unsigned long request, ...)
{
struct mmc_ioc_multi_cmd *mcmd = NULL;
struct mmc_ioc_cmd *cmd = NULL;
size_t i = 0;
int res = 0;
va_list ap;
if (request == MMC_IOC_CMD) {
va_start(ap, request);
cmd = va_arg(ap, struct mmc_ioc_cmd *);
va_end(ap);
res = ioctl_emu_cmd(fd, cmd);
} else if (request == MMC_IOC_MULTI_CMD) {
va_start(ap, request);
mcmd = va_arg(ap, struct mmc_ioc_multi_cmd *);
va_end(ap);
for (i = 0; i < mcmd->num_of_cmds; i++) {
res = ioctl_emu_cmd(fd, &mcmd->cmds[i]);
if (res)
return res;
}
} else {
EMSG("Unsupported ioctl: 0x%lx", request);
return -1;
}
return res;
}
static int mmc_rpmb_fd(uint16_t dev_id)
{
(void)dev_id;
/* Any value != -1 will do in test mode */
return 0;
}
static TEEC_Result read_size_mult(uint16_t dev_id, uint8_t *value)
{
(void)dev_id;
*value = EMU_RPMB_SIZE_MULT;
return TEEC_SUCCESS;
}
static TEEC_Result read_rel_wr_sec_c(uint16_t dev_id, uint8_t *value)
{
(void)dev_id;
*value = EMU_RPMB_REL_WR_SEC_C;
return TEEC_SUCCESS;
}
static bool remap_rpmb_dev_id(uint16_t dev_id, uint16_t *ndev_id)
{
*ndev_id = dev_id;
return true;
}
#endif /* RPMB_EMU */
static inline void set_mmc_io_cmd(struct mmc_ioc_cmd *cmd, unsigned int blocks,
__u32 opcode, int write_flag)
{
cmd->blksz = 512;
cmd->blocks = blocks;
cmd->flags = MMC_RSP_R1 | MMC_CMD_ADTC;
cmd->opcode = opcode;
cmd->write_flag = write_flag;
}
static uint32_t rpmb_data_req(int fd, struct rpmb_data_frame *req_frm,
size_t req_nfrm, struct rpmb_data_frame *rsp_frm,
size_t rsp_nfrm)
{
TEEC_Result res = TEEC_SUCCESS;
int st = 0;
size_t i = 0;
uint16_t msg_type = ntohs(req_frm->msg_type);
struct mmc_ioc_multi_cmd *mcmd = NULL;
struct mmc_ioc_cmd *cmd = NULL;
for (i = 1; i < req_nfrm; i++) {
if (req_frm[i].msg_type != msg_type) {
EMSG("All request frames shall be of the same type");
return TEEC_ERROR_BAD_PARAMETERS;
}
}
DMSG("Req: %zu frame(s) of type 0x%04x", req_nfrm, msg_type);
DMSG("Rsp: %zu frame(s)", rsp_nfrm);
mcmd = (struct mmc_ioc_multi_cmd *)
calloc(1, sizeof(struct mmc_ioc_multi_cmd) +
RPMB_MAX_IOC_MULTI_CMDS * sizeof(struct mmc_ioc_cmd));
if (!mcmd)
return TEEC_ERROR_OUT_OF_MEMORY;
switch(msg_type) {
case RPMB_MSG_TYPE_REQ_AUTH_KEY_PROGRAM:
case RPMB_MSG_TYPE_REQ_AUTH_DATA_WRITE:
if (rsp_nfrm != 1) {
EMSG("Expected only one response frame");
res = TEEC_ERROR_BAD_PARAMETERS;
goto out;
}
mcmd->num_of_cmds = 3;
/* Send write request frame(s) */
cmd = &mcmd->cmds[0];
set_mmc_io_cmd(cmd, req_nfrm, MMC_WRITE_MULTIPLE_BLOCK,
1 | MMC_CMD23_ARG_REL_WR);
/*
* Black magic: tested on a HiKey board with a HardKernel eMMC
* module. When postsleep values are zero, the kernel logs
* random errors: "mmc_blk_ioctl_cmd: Card Status=0x00000E00"
* and ioctl() fails.
*/
cmd->postsleep_min_us = 20000;
cmd->postsleep_max_us = 50000;
mmc_ioc_cmd_set_data((*cmd), (uintptr_t)req_frm);
/* Send result request frame */
cmd = &mcmd->cmds[1];
set_mmc_io_cmd(cmd, req_nfrm, MMC_WRITE_MULTIPLE_BLOCK, 1);
memset(rsp_frm, 0, 1);
rsp_frm->msg_type = htons(RPMB_MSG_TYPE_REQ_RESULT_READ);
mmc_ioc_cmd_set_data((*cmd), (uintptr_t)rsp_frm);
/* Read response frame */
cmd = &mcmd->cmds[2];
set_mmc_io_cmd(cmd, rsp_nfrm, MMC_READ_MULTIPLE_BLOCK, 0);
mmc_ioc_cmd_set_data((*cmd), (uintptr_t)rsp_frm);
break;
case RPMB_MSG_TYPE_REQ_WRITE_COUNTER_VAL_READ:
if (rsp_nfrm != 1) {
EMSG("Expected only one response frame");
res = TEEC_ERROR_BAD_PARAMETERS;
goto out;
}
#if __GNUC__ > 6
__attribute__((fallthrough));
#endif
case RPMB_MSG_TYPE_REQ_AUTH_DATA_READ:
if (req_nfrm != 1) {
EMSG("Expected only one request frame");
res = TEEC_ERROR_BAD_PARAMETERS;
goto out;
}
mcmd->num_of_cmds = 2;
/* Send request frame */
cmd = &mcmd->cmds[0];
set_mmc_io_cmd(cmd, req_nfrm, MMC_WRITE_MULTIPLE_BLOCK, 1);
mmc_ioc_cmd_set_data((*cmd), (uintptr_t)req_frm);
/* Read response frames */
cmd = &mcmd->cmds[1];
set_mmc_io_cmd(cmd, rsp_nfrm, MMC_READ_MULTIPLE_BLOCK, 0);
mmc_ioc_cmd_set_data((*cmd), (uintptr_t)rsp_frm);
break;
default:
EMSG("Unsupported message type: %d", msg_type);
res = TEEC_ERROR_GENERIC;
goto out;
}
st = IOCTL(fd, MMC_IOC_MULTI_CMD, mcmd);
if (st < 0)
res = TEEC_ERROR_GENERIC;
out:
free(mcmd);
return res;
}
static uint32_t rpmb_get_dev_info(uint16_t dev_id, struct rpmb_dev_info *info)
{
TEEC_Result res = TEEC_SUCCESS;
uint8_t rpmb_size_mult = 0;
uint8_t rel_wr_sec_c = 0;
res = read_cid(dev_id, info->cid);
if (res != TEEC_SUCCESS)
return res;
res = read_size_mult(dev_id, &rpmb_size_mult);
if (res != TEEC_SUCCESS)
return res;
info->rpmb_size_mult = rpmb_size_mult;
res = read_rel_wr_sec_c(dev_id, &rel_wr_sec_c);
if (res != TEEC_SUCCESS)
return res;
info->rel_wr_sec_c = rel_wr_sec_c;
info->ret_code = RPMB_CMD_GET_DEV_INFO_RET_OK;
return res;
}
/*
* req is one struct rpmb_req followed by one or more struct rpmb_data_frame
* rsp is either one struct rpmb_dev_info or one or more struct rpmb_data_frame
*/
static uint32_t rpmb_process_request_unlocked(void *req, size_t req_size,
void *rsp, size_t rsp_size)
{
struct rpmb_req *sreq = req;
size_t req_nfrm = 0;
size_t rsp_nfrm = 0;
uint16_t dev_id = 0;
uint32_t res = 0;
int fd = 0;
if (req_size < sizeof(*sreq))
return TEEC_ERROR_BAD_PARAMETERS;
if (!remap_rpmb_dev_id(sreq->dev_id, &dev_id))
return TEEC_ERROR_ITEM_NOT_FOUND;
switch (sreq->cmd) {
case RPMB_CMD_DATA_REQ:
req_nfrm = (req_size - sizeof(struct rpmb_req)) / 512;
rsp_nfrm = rsp_size / 512;
fd = mmc_rpmb_fd(dev_id);
if (fd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
res = rpmb_data_req(fd, RPMB_REQ_DATA(req), req_nfrm, rsp,
rsp_nfrm);
break;
case RPMB_CMD_GET_DEV_INFO:
if (req_size != sizeof(struct rpmb_req) ||
rsp_size != sizeof(struct rpmb_dev_info)) {
EMSG("Invalid req/rsp size");
return TEEC_ERROR_BAD_PARAMETERS;
}
res = rpmb_get_dev_info(dev_id, (struct rpmb_dev_info *)rsp);
break;
default:
EMSG("Unsupported RPMB command: %d", sreq->cmd);
res = TEEC_ERROR_BAD_PARAMETERS;
break;
}
return res;
}
uint32_t rpmb_process_request(void *req, size_t req_size, void *rsp,
size_t rsp_size)
{
uint32_t res = 0;
tee_supp_mutex_lock(&rpmb_mutex);
res = rpmb_process_request_unlocked(req, req_size, rsp, rsp_size);
tee_supp_mutex_unlock(&rpmb_mutex);
return res;
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RPMB_H
#define RPMB_H
#include <stdint.h>
#include <stddef.h>
uint32_t rpmb_process_request(void *req, size_t req_size, void *rsp,
size_t rsp_size);
#endif /* RPMB_H */

View File

@@ -0,0 +1,93 @@
// SPDX-License-Identifier: MIT-0
/*
* The code below is imported from:
* https://www.freedesktop.org/software/systemd/man/devel/sd_notify.html#Standalone%20Implementations
*/
#define _GNU_SOURCE 1
#include <string.h>
#include <errno.h>
#include <inttypes.h>
#include <signal.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <time.h>
#include <unistd.h>
#include "sd_notify.h"
#define _cleanup_(f) __attribute__((cleanup(f)))
static void closep(int *fd)
{
if (!fd || *fd < 0)
return;
close(*fd);
*fd = -1;
}
static int notify(const char *message)
{
union sockaddr_union {
struct sockaddr sa;
struct sockaddr_un sun;
} socket_addr = {
.sun.sun_family = AF_UNIX,
};
ssize_t written = 0;
size_t path_length, message_length = 0;
_cleanup_(closep) int fd = -1;
const char *socket_path = NULL;
/* Verify the argument first */
if (!message)
return -EINVAL;
message_length = strlen(message);
if (message_length == 0)
return -EINVAL;
/* If the variable is not set, the protocol is a noop */
socket_path = getenv("NOTIFY_SOCKET");
if (!socket_path)
return 0; /* Not set? Nothing to do */
/* Only AF_UNIX is supported, with path or abstract sockets */
if (socket_path[0] != '/' && socket_path[0] != '@')
return -EAFNOSUPPORT;
path_length = strlen(socket_path);
/* Ensure there is room for NULL byte */
if (path_length >= sizeof(socket_addr.sun.sun_path))
return -E2BIG;
memcpy(socket_addr.sun.sun_path, socket_path, path_length);
/* Support for abstract socket */
if (socket_addr.sun.sun_path[0] == '@')
socket_addr.sun.sun_path[0] = 0;
fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
if (fd < 0)
return -errno;
if (connect(fd, &socket_addr.sa, offsetof(struct sockaddr_un, sun_path) + path_length) != 0)
return -errno;
written = write(fd, message, message_length);
if (written != (ssize_t) message_length)
return written < 0 ? -errno : -EPROTO;
return 1; /* Notified! */
}
int sd_notify_ready(void)
{
return notify("READY=1");
}

View File

@@ -0,0 +1,11 @@
// SPDX-License-Identifier: MIT-0
/*
* The code below is imported from:
* https://www.freedesktop.org/software/systemd/man/devel/sd_notify.html#Standalone%20Implementations
*/
#ifndef SD_NOTIFY_H
#define SD_NOTIFY_H
int sd_notify_ready(void);
#endif /* SD_NOTIFY_H */

View File

@@ -0,0 +1,249 @@
/*
* FIPS 180-2 SHA-224/256/384/512 implementation
* Last update: 02/02/2007
* Issue date: 04/30/2005
*
* Copyright (C) 2005, 2007 Olivier Gay <olivier.gay@a3.epfl.ch>
* All rights reserved.
*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <string.h>
#include "sha2.h"
#define SHFR(x, n) (x >> n)
#define ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n)))
#define ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n)))
#define CH(x, y, z) ((x & y) ^ (~x & z))
#define MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
#define SHA256_F1(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
#define SHA256_F2(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
#define SHA256_F3(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHFR(x, 3))
#define SHA256_F4(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHFR(x, 10))
#define UNPACK32(x, str) \
{ \
*((str) + 3) = (uint8) ((x) ); \
*((str) + 2) = (uint8) ((x) >> 8); \
*((str) + 1) = (uint8) ((x) >> 16); \
*((str) + 0) = (uint8) ((x) >> 24); \
}
#define PACK32(str, x) \
{ \
*(x) = ((uint32) *((str) + 3) ) \
| ((uint32) *((str) + 2) << 8) \
| ((uint32) *((str) + 1) << 16) \
| ((uint32) *((str) + 0) << 24); \
}
#define UNPACK64(x, str) \
{ \
*((str) + 7) = (uint8) ((x) ); \
*((str) + 6) = (uint8) ((x) >> 8); \
*((str) + 5) = (uint8) ((x) >> 16); \
*((str) + 4) = (uint8) ((x) >> 24); \
*((str) + 3) = (uint8) ((x) >> 32); \
*((str) + 2) = (uint8) ((x) >> 40); \
*((str) + 1) = (uint8) ((x) >> 48); \
*((str) + 0) = (uint8) ((x) >> 56); \
}
#define PACK64(str, x) \
{ \
*(x) = ((uint64) *((str) + 7) ) \
| ((uint64) *((str) + 6) << 8) \
| ((uint64) *((str) + 5) << 16) \
| ((uint64) *((str) + 4) << 24) \
| ((uint64) *((str) + 3) << 32) \
| ((uint64) *((str) + 2) << 40) \
| ((uint64) *((str) + 1) << 48) \
| ((uint64) *((str) + 0) << 56); \
}
#define SHA256_SCR(i) \
{ \
w[i] = SHA256_F4(w[i - 2]) + w[i - 7] \
+ SHA256_F3(w[i - 15]) + w[i - 16]; \
}
uint32 sha256_h0[8] =
{0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
uint32 sha256_k[64] =
{0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};
/* SHA-256 functions */
static void sha256_transf(sha256_ctx *ctx, const unsigned char *message,
unsigned int block_nb)
{
uint32 w[64] = { 0 };
uint32 wv[8] = { 0 };
uint32 t1 = 0;
uint32 t2 = 0;
const unsigned char *sub_block = NULL;
int i = 0;
int j = 0;
for (i = 0; i < (int) block_nb; i++) {
sub_block = message + (i << 6);
for (j = 0; j < 16; j++) {
PACK32(&sub_block[j << 2], &w[j]);
}
for (j = 16; j < 64; j++) {
SHA256_SCR(j);
}
for (j = 0; j < 8; j++) {
wv[j] = ctx->h[j];
}
for (j = 0; j < 64; j++) {
t1 = wv[7] + SHA256_F2(wv[4]) + CH(wv[4], wv[5], wv[6])
+ sha256_k[j] + w[j];
t2 = SHA256_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]);
wv[7] = wv[6];
wv[6] = wv[5];
wv[5] = wv[4];
wv[4] = wv[3] + t1;
wv[3] = wv[2];
wv[2] = wv[1];
wv[1] = wv[0];
wv[0] = t1 + t2;
}
for (j = 0; j < 8; j++) {
ctx->h[j] += wv[j];
}
}
}
void sha256(const unsigned char *message, unsigned int len,
unsigned char *digest)
{
sha256_ctx ctx;
memset(&ctx, 0, sizeof(ctx));
sha256_init(&ctx);
sha256_update(&ctx, message, len);
sha256_final(&ctx, digest);
}
void sha256_init(sha256_ctx *ctx)
{
int i = 0;
for (i = 0; i < 8; i++) {
ctx->h[i] = sha256_h0[i];
}
ctx->len = 0;
ctx->tot_len = 0;
}
void sha256_update(sha256_ctx *ctx, const unsigned char *message,
unsigned int len)
{
unsigned int block_nb = 0;
unsigned int new_len = 0;
unsigned int rem_len = 0;
unsigned int tmp_len = 0;
const unsigned char *shifted_message = NULL;
tmp_len = SHA256_BLOCK_SIZE - ctx->len;
rem_len = len < tmp_len ? len : tmp_len;
memcpy(&ctx->block[ctx->len], message, rem_len);
if (ctx->len + len < SHA256_BLOCK_SIZE) {
ctx->len += len;
return;
}
new_len = len - rem_len;
block_nb = new_len / SHA256_BLOCK_SIZE;
shifted_message = message + rem_len;
sha256_transf(ctx, ctx->block, 1);
sha256_transf(ctx, shifted_message, block_nb);
rem_len = new_len % SHA256_BLOCK_SIZE;
memcpy(ctx->block, &shifted_message[block_nb << 6],
rem_len);
ctx->len = rem_len;
ctx->tot_len += (block_nb + 1) << 6;
}
void sha256_final(sha256_ctx *ctx, unsigned char *digest)
{
unsigned int block_nb = 0;
unsigned int pm_len = 0;
unsigned int len_b = 0;
int i = 0;
block_nb = (1 + ((SHA256_BLOCK_SIZE - 9)
< (ctx->len % SHA256_BLOCK_SIZE)));
len_b = (ctx->tot_len + ctx->len) << 3;
pm_len = block_nb << 6;
memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
ctx->block[ctx->len] = 0x80;
UNPACK32(len_b, ctx->block + pm_len - 4);
sha256_transf(ctx, ctx->block, block_nb);
for (i = 0 ; i < 8; i++) {
UNPACK32(ctx->h[i], &digest[i << 2]);
}
}

View File

@@ -0,0 +1,75 @@
/*
* FIPS 180-2 SHA-224/256/384/512 implementation
* Last update: 02/02/2007
* Issue date: 04/30/2005
*
* Copyright (C) 2005, 2007 Olivier Gay <olivier.gay@a3.epfl.ch>
* All rights reserved.
*
* Copyright (c) 2016, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef SHA2_H
#define SHA2_H
#define SHA256_DIGEST_SIZE ( 256 / 8)
#define SHA256_BLOCK_SIZE ( 512 / 8)
#ifndef SHA2_TYPES
#define SHA2_TYPES
typedef unsigned char uint8;
typedef unsigned int uint32;
typedef unsigned long long uint64;
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
unsigned int tot_len;
unsigned int len;
unsigned char block[2 * SHA256_BLOCK_SIZE];
uint32 h[8];
} sha256_ctx;
typedef sha256_ctx sha224_ctx;
void sha256_init(sha256_ctx * ctx);
void sha256_update(sha256_ctx *ctx, const unsigned char *message,
unsigned int len);
void sha256_final(sha256_ctx *ctx, unsigned char *digest);
void sha256(const unsigned char *message, unsigned int len,
unsigned char *digest);
#ifdef __cplusplus
}
#endif
#endif /* !SHA2_H */

View File

@@ -0,0 +1,848 @@
/*
* Copyright (c) 2016-2017, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <assert.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <limits.h>
#include <netdb.h>
#include <netinet/in.h>
#include <optee_msg_supplicant.h>
#include <poll.h>
#include <pthread.h>
#include <stdint.h>
#include <stdlib.h>
#include <sys/queue.h>
#include <sys/socket.h>
#include <tee_client_api.h>
#include <teec_trace.h>
#include <tee_socket.h>
#include <tee_supplicant.h>
#include <unistd.h>
#include "handle.h"
#include "__tee_isocket_defines.h"
#include "__tee_ipsocket.h"
#include "__tee_tcpsocket_defines.h"
#include "__tee_tcpsocket_defines_extensions.h"
#include "__tee_udpsocket_defines.h"
#ifndef __aligned
#define __aligned(x) __attribute__((__aligned__(x)))
#endif
#include <linux/tee.h>
/*
* Used when checking how much data we have queued.
*
* For SOCK_DGRAM we try to be accurate up to 4096 bytes as
* that's our arbitrary chosen sensible upper size (with
* some margin). Larger size doesn't make much sense since
* anything larger than the MTU is bound to cause trouble
* on a congested network.
*
* For SOCK_STREAM we chose the same upper limit for
* simplicity. It doesn't matter if there's more queued,
* no data will be lost.
*/
#define SUPP_MAX_PEEK_LEN 4096
struct sock_instance {
uint32_t id;
struct handle_db db;
TAILQ_ENTRY(sock_instance) link;
};
static pthread_mutex_t sock_mutex = PTHREAD_MUTEX_INITIALIZER;
TAILQ_HEAD(, sock_instance) sock_instances =
TAILQ_HEAD_INITIALIZER(sock_instances);
static void sock_lock(void)
{
pthread_mutex_lock(&sock_mutex);
}
static void sock_unlock(void)
{
pthread_mutex_unlock(&sock_mutex);
}
static struct sock_instance *sock_instance_find(uint32_t instance_id)
{
struct sock_instance *si = NULL;
TAILQ_FOREACH(si, &sock_instances, link) {
if (si->id == instance_id)
return si;
}
return NULL;
}
static void *fd_to_handle_ptr(int fd)
{
uintptr_t ptr = 0;
assert(fd >= 0);
ptr = fd + 1;
return (void *)ptr;
}
static int handle_ptr_to_fd(void *ptr)
{
assert(ptr);
return (uintptr_t)ptr - 1;
}
static int sock_handle_get(uint32_t instance_id, int fd)
{
int handle = -1;
struct sock_instance *si = NULL;
sock_lock();
si = sock_instance_find(instance_id);
if (!si) {
si = calloc(1, sizeof(*si));
if (!si)
goto out;
si->id = instance_id;
TAILQ_INSERT_TAIL(&sock_instances, si, link);
}
handle = handle_get(&si->db, fd_to_handle_ptr(fd));
out:
sock_unlock();
return handle;
}
static int sock_handle_to_fd(uint32_t instance_id, uint32_t handle)
{
int fd = -1;
struct sock_instance *si = NULL;
sock_lock();
si = sock_instance_find(instance_id);
if (si)
fd = handle_ptr_to_fd(handle_lookup(&si->db, handle));
sock_unlock();
return fd;
}
static void sock_handle_put(uint32_t instance_id, uint32_t handle)
{
struct sock_instance *si = NULL;
sock_lock();
si = sock_instance_find(instance_id);
if (si)
handle_put(&si->db, handle);
sock_unlock();
}
static bool chk_pt(struct tee_ioctl_param *param, uint32_t type)
{
return (param->attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) == type;
}
static int fd_flags_add(int fd, int flags)
{
int val = 0;
val = fcntl(fd, F_GETFD, 0);
if (val == -1)
return -1;
val |= flags;
return fcntl(fd, F_SETFL, val);
}
static TEEC_Result sock_connect(uint32_t ip_vers, unsigned int protocol,
const char *server, uint16_t port, int *ret_fd)
{
TEEC_Result r = TEEC_ERROR_GENERIC;
struct addrinfo *res0 = NULL;
struct addrinfo *res = NULL;
int fd = -1;
char port_name[10] = { 0 };
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
snprintf(port_name, sizeof(port_name), "%" PRIu16, port);
switch (ip_vers) {
case TEE_IP_VERSION_DC:
hints.ai_family = AF_UNSPEC;
break;
case TEE_IP_VERSION_4:
hints.ai_family = AF_INET;
break;
case TEE_IP_VERSION_6:
hints.ai_family = AF_INET6;
break;
default:
return TEEC_ERROR_BAD_PARAMETERS;
}
if (protocol == TEE_ISOCKET_PROTOCOLID_TCP)
hints.ai_socktype = SOCK_STREAM;
else if (protocol == TEE_ISOCKET_PROTOCOLID_UDP)
hints.ai_socktype = SOCK_DGRAM;
else
return TEEC_ERROR_BAD_PARAMETERS;
if (getaddrinfo(server, port_name, &hints, &res0))
return TEE_ISOCKET_ERROR_HOSTNAME;
for (res = res0; res; res = res->ai_next) {
fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (fd == -1) {
if (errno == ENOMEM || errno == ENOBUFS)
r = TEE_ISOCKET_ERROR_OUT_OF_RESOURCES;
else
r = TEEC_ERROR_GENERIC;
continue;
}
if (connect(fd, res->ai_addr, res->ai_addrlen)) {
if (errno == ETIMEDOUT)
r = TEE_ISOCKET_ERROR_TIMEOUT;
else
r = TEEC_ERROR_COMMUNICATION;
close(fd);
fd = -1;
continue;
}
if (fd_flags_add(fd, O_NONBLOCK)) {
close(fd);
fd = -1;
r = TEEC_ERROR_GENERIC;
break;
}
r = TEEC_SUCCESS;
break;
}
freeaddrinfo(res0);
*ret_fd = fd;
return r;
}
static TEEC_Result tee_socket_open(size_t num_params,
struct tee_ioctl_param *params)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
int handle = 0;
int fd = 0;
uint32_t instance_id = 0;
char *server = NULL;
uint32_t ip_vers = 0;
uint16_t port = 0;
uint32_t protocol = 0;
if (num_params != 4 ||
!chk_pt(params + 0, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT) ||
!chk_pt(params + 1, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT) ||
!chk_pt(params + 2, TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT) ||
!chk_pt(params + 3, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_OUTPUT))
return TEEC_ERROR_BAD_PARAMETERS;
instance_id = params[0].b;
port = params[1].a;
protocol = params[1].b;
ip_vers = params[1].c;
server = tee_supp_param_to_va(params + 2);
if (!server || server[MEMREF_SIZE(params + 2) - 1] != '\0')
return TEE_ISOCKET_ERROR_HOSTNAME;
res = sock_connect(ip_vers, protocol, server, port, &fd);
if (res != TEEC_SUCCESS)
return res;
handle = sock_handle_get(instance_id, fd);
if (handle < 0) {
close(fd);
return TEEC_ERROR_OUT_OF_MEMORY;
}
params[3].a = handle;
return TEEC_SUCCESS;
}
static TEEC_Result tee_socket_close(size_t num_params,
struct tee_ioctl_param *params)
{
int handle = 0;
uint32_t instance_id = 0;
int fd = 0;
if (num_params != 1 ||
!chk_pt(params + 0, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT))
return TEEC_ERROR_BAD_PARAMETERS;
instance_id = params[0].b;
handle = params[0].c;
fd = sock_handle_to_fd(instance_id, handle);
if (fd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
sock_handle_put(instance_id, handle);
if (close(fd)) {
EMSG("tee_socket_close: close(%d): %s", fd, strerror(errno));
return TEEC_ERROR_GENERIC;
}
return TEEC_SUCCESS;
}
static void sock_close_cb(int handle, void *ptr, void *arg)
{
struct sock_instance *si = arg;
int fd = handle_ptr_to_fd(ptr);
if (close(fd))
EMSG("sock_close_cb instance_id %d handle %d fd %d: %s",
si->id, handle, fd, strerror(errno));
}
static TEEC_Result tee_socket_close_all(size_t num_params,
struct tee_ioctl_param *params)
{
uint32_t instance_id = 0;
struct sock_instance *si = NULL;
if (num_params != 1 ||
!chk_pt(params + 0, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT))
return TEEC_ERROR_BAD_PARAMETERS;
instance_id = params[0].b;
sock_lock();
si = sock_instance_find(instance_id);
if (si)
handle_foreach_put(&si->db, sock_close_cb, si);
sock_unlock();
return TEEC_SUCCESS;
}
#define TS_NSEC_PER_SEC 1000000000
static void ts_add(const struct timespec *a, const struct timespec *b,
struct timespec *res)
{
res->tv_sec = a->tv_sec + b->tv_sec;
res->tv_nsec = a->tv_nsec + b->tv_nsec;
if (res->tv_nsec >= TS_NSEC_PER_SEC) {
res->tv_sec++;
res->tv_nsec -= TS_NSEC_PER_SEC;
}
}
static int ts_diff_to_polltimeout(const struct timespec *a,
const struct timespec *b)
{
struct timespec diff;
memset(&diff, 0, sizeof(diff));
diff.tv_sec = a->tv_sec - b->tv_sec;
diff.tv_nsec = a->tv_nsec - b->tv_nsec;
if (a->tv_nsec < b->tv_nsec) {
diff.tv_nsec += TS_NSEC_PER_SEC;
diff.tv_sec--;
}
if ((diff.tv_sec - 1) > (INT_MAX / 1000))
return INT_MAX;
return diff.tv_sec * 1000 + diff.tv_nsec / (TS_NSEC_PER_SEC / 1000);
}
static void ts_delay_from_millis(uint32_t millis, struct timespec *res)
{
res->tv_sec = millis / 1000;
res->tv_nsec = (millis % 1000) * (TS_NSEC_PER_SEC / 1000);
}
static TEEC_Result poll_with_timeout(struct pollfd *pfd, nfds_t nfds,
uint32_t timeout)
{
int to = 0;
int r = 0;
struct timespec now;
struct timespec until;
memset(&now, 0, sizeof(now));
memset(&until, 0, sizeof(until));
if (timeout == OPTEE_MRC_SOCKET_TIMEOUT_BLOCKING) {
to = -1;
} else {
struct timespec delay;
memset(&delay, 0, sizeof(delay));
ts_delay_from_millis(timeout, &delay);
if (clock_gettime(CLOCK_REALTIME, &now))
return TEEC_ERROR_GENERIC;
ts_add(&now, &delay, &until);
}
while (true) {
if (to != -1)
to = ts_diff_to_polltimeout(&until, &now);
r = poll(pfd, nfds, to);
if (!r)
return TEE_ISOCKET_ERROR_TIMEOUT;
if (r == -1) {
/*
* If we're interrupted by a signal treat
* recalculate the timeout (if needed) and wait
* again.
*/
if (errno == EINTR) {
if (to != -1 &&
clock_gettime(CLOCK_REALTIME, &now))
return TEEC_ERROR_GENERIC;
continue;
}
return TEEC_ERROR_BAD_PARAMETERS;
}
return TEEC_SUCCESS;
}
}
static TEEC_Result write_with_timeout(int fd, const void *buf, size_t *blen,
uint32_t timeout)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
struct pollfd pfd = { .fd = fd, .events = POLLOUT };
ssize_t r = 0;
res = poll_with_timeout(&pfd, 1, timeout);
if (res != TEEC_SUCCESS)
return res;
r = write(fd, buf, *blen);
if (r == -1) {
if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)
return TEE_ISOCKET_ERROR_TIMEOUT;
return TEEC_ERROR_BAD_PARAMETERS;
}
*blen = r;
return TEEC_SUCCESS;
}
static TEEC_Result tee_socket_send(size_t num_params,
struct tee_ioctl_param *params)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
int handle = 0;
int fd = 0;
uint32_t instance_id = 0;
void *buf = NULL;
size_t bytes = 0;
if (num_params != 3 ||
!chk_pt(params + 0, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT) ||
!chk_pt(params + 1, TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT) ||
!chk_pt(params + 2, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT))
return TEEC_ERROR_BAD_PARAMETERS;
instance_id = params[0].b;
handle = params[0].c;
fd = sock_handle_to_fd(instance_id, handle);
if (fd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
buf = tee_supp_param_to_va(params + 1);
bytes = MEMREF_SIZE(params + 1);
res = write_with_timeout(fd, buf, &bytes, params[2].a);
if (res == TEEC_SUCCESS)
params[2].b = bytes;
return res;
}
static ssize_t recv_with_out_flags(int fd, void *buf, size_t len, int inflags,
int *out_flags)
{
ssize_t r = 0;
while (true) {
struct iovec iov = { .iov_base = buf, .iov_len = len, };
struct msghdr msg = { .msg_iov = &iov, .msg_iovlen = 1, };
r = recvmsg(fd, &msg, inflags);
if (r < 0) {
/*
* If the syscall was just interrupted by a signal
* delivery, try again.
*/
if (errno == EINTR)
continue;
return r;
}
*out_flags = msg.msg_flags;
return r;
}
}
static TEEC_Result read_with_timeout(int fd, void *buf, size_t *blen,
uint32_t timeout)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
struct pollfd pfd = { .fd = fd, .events = POLLIN };
int socktype = 0;
socklen_t l = sizeof(socktype);
size_t peek_len = 0;
int out_flags = 0;
ssize_t r = 0;
int e = 0;
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &socktype, &l))
return TEEC_ERROR_BAD_PARAMETERS;
if (*blen) {
/* If *blen == 0, the timeout parameter has no effect. */
res = poll_with_timeout(&pfd, 1, timeout);
if (res != TEEC_SUCCESS)
return res;
}
if ((socktype == SOCK_DGRAM && *blen < SUPP_MAX_PEEK_LEN) || !*blen) {
/* Check how much data we have queued. */
void *b = malloc(SUPP_MAX_PEEK_LEN);
if (!b)
return TEEC_ERROR_OUT_OF_MEMORY;
r = recv_with_out_flags(fd, b, SUPP_MAX_PEEK_LEN,
MSG_PEEK | MSG_DONTWAIT, &out_flags);
e = errno;
free(b);
if (r < 0)
goto err;
/*
* If the message was truncated we know that it's at least
* one byte larger.
*/
if (out_flags & MSG_TRUNC)
r++;
if (!*blen) {
*blen = r;
return TEEC_SUCCESS;
}
peek_len = r;
}
r = recv_with_out_flags(fd, buf, *blen, MSG_DONTWAIT, &out_flags);
if (r == -1) {
e = errno;
goto err;
}
if (socktype == SOCK_DGRAM && (out_flags & MSG_TRUNC)) {
/*
* The datagram has been truncated, return the best length
* we have to indicate that.
*/
if (peek_len > (size_t)r)
*blen = peek_len;
else
*blen = r + 1;
} else {
*blen = r;
}
return TEEC_SUCCESS;
err:
if (e == EAGAIN || e == EWOULDBLOCK) {
/*
* If *blen is supplied as 0 then we're not supposed wait
* for data so the call to poll has been skipped. In case
* there is no data available recvmsg() will return an
* error with errno set to EAGAIN or EWOULDBLOCK.
*/
if (!*blen)
return TEEC_SUCCESS;
return TEE_ISOCKET_ERROR_TIMEOUT;
}
return TEEC_ERROR_BAD_PARAMETERS;
}
static TEEC_Result tee_socket_recv(size_t num_params,
struct tee_ioctl_param *params)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
int handle = 0;
int fd = 0;
uint32_t instance_id = 0;
void *buf = NULL;
size_t bytes = 0;
if (num_params != 3 ||
!chk_pt(params + 0, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT) ||
!chk_pt(params + 1, TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT) ||
!chk_pt(params + 2, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT))
return TEEC_ERROR_BAD_PARAMETERS;
instance_id = params[0].b;
handle = params[0].c;
fd = sock_handle_to_fd(instance_id, handle);
if (fd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
buf = tee_supp_param_to_va(params + 1);
bytes = MEMREF_SIZE(params + 1);
res = read_with_timeout(fd, buf, &bytes, params[2].a);
if (res == TEEC_SUCCESS)
MEMREF_SIZE(params + 1) = bytes;
return res;
}
static TEEC_Result tee_socket_ioctl_tcp(int fd, uint32_t command,
void *buf, size_t *blen)
{
switch (command) {
case TEE_TCP_SET_RECVBUF:
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, buf, *blen))
return TEEC_ERROR_BAD_PARAMETERS;
return TEEC_SUCCESS;
case TEE_TCP_SET_SENDBUF:
if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, buf, *blen))
return TEEC_ERROR_BAD_PARAMETERS;
return TEEC_SUCCESS;
default:
return TEEC_ERROR_NOT_SUPPORTED;
}
}
static TEEC_Result sa_set_port(struct sockaddr *sa, socklen_t slen,
uint16_t port)
{
if (sa->sa_family == AF_INET) {
struct sockaddr_in *sain = (void *)sa;
if (slen < (socklen_t)sizeof(*sain))
return TEEC_ERROR_BAD_PARAMETERS;
sain->sin_port = htons(port);
return TEEC_SUCCESS;
}
if (sa->sa_family == AF_INET6) {
struct sockaddr_in6 *sain6 = (void *)sa;
if (slen < (socklen_t)sizeof(*sain6))
return TEEC_ERROR_BAD_PARAMETERS;
sain6->sin6_port = htons(port);
return TEEC_SUCCESS;
}
return TEEC_ERROR_BAD_PARAMETERS;
}
static TEEC_Result sa_get_port(struct sockaddr *sa, socklen_t slen,
uint16_t *port)
{
if (sa->sa_family == AF_INET) {
struct sockaddr_in *sain = (void *)sa;
if (slen < (socklen_t)sizeof(*sain))
return TEEC_ERROR_BAD_PARAMETERS;
*port = ntohs(sain->sin_port);
return TEEC_SUCCESS;
}
if (sa->sa_family == AF_INET6) {
struct sockaddr_in6 *sain6 = (void *)sa;
if (slen < (socklen_t)sizeof(*sain6))
return TEEC_ERROR_BAD_PARAMETERS;
*port = ntohs(sain6->sin6_port);
return TEEC_SUCCESS;
}
return TEEC_ERROR_BAD_PARAMETERS;
}
static TEEC_Result udp_changeaddr(int fd, int family, const char *server,
uint16_t port)
{
TEEC_Result r = TEE_ISOCKET_ERROR_HOSTNAME;
struct addrinfo *res0 = NULL;
struct addrinfo *res = NULL;
char port_name[10] = { 0 };
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
snprintf(port_name, sizeof(port_name), "%" PRIu16, port);
hints.ai_family = family;
hints.ai_socktype = SOCK_DGRAM;
if (getaddrinfo(server, port_name, &hints, &res0))
return TEE_ISOCKET_ERROR_HOSTNAME;
for (res = res0; res; res = res->ai_next) {
if (connect(fd, res->ai_addr, res->ai_addrlen)) {
if (errno == ETIMEDOUT)
r = TEE_ISOCKET_ERROR_TIMEOUT;
else
r = TEEC_ERROR_COMMUNICATION;
continue;
}
r = TEEC_SUCCESS;
break;
}
freeaddrinfo(res0);
return r;
}
static TEEC_Result tee_socket_ioctl_udp(int fd, uint32_t command,
void *buf, size_t *blen)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
uint16_t port = 0;
struct sockaddr_storage sass;
struct sockaddr *sa = (struct sockaddr *)&sass;
socklen_t len = sizeof(sass);
memset(&sass, 0, sizeof(sass));
if (getpeername(fd, sa, &len))
return TEEC_ERROR_BAD_PARAMETERS;
switch (command) {
case TEE_UDP_CHANGEADDR:
res = sa_get_port(sa, len, &port);
if (res != TEEC_SUCCESS)
return res;
if (!blen || *((char *)buf + *blen - 1) != '\0')
return TEE_ISOCKET_ERROR_HOSTNAME;
return udp_changeaddr(fd, sa->sa_family, buf, port);
case TEE_UDP_CHANGEPORT:
if (*blen != sizeof(port))
return TEEC_ERROR_BAD_PARAMETERS;
memcpy(&port, buf, sizeof(port));
res = sa_set_port(sa, len, port);
if (res != TEEC_SUCCESS)
return res;
if (connect(fd, sa, len))
return TEEC_ERROR_GENERIC;
return TEEC_SUCCESS;
default:
return TEEC_ERROR_NOT_SUPPORTED;
}
}
static TEEC_Result tee_socket_ioctl(size_t num_params,
struct tee_ioctl_param *params)
{
TEEC_Result res = TEEC_ERROR_GENERIC;
int handle = 0;
int fd = 0;
uint32_t instance_id = 0;
uint32_t command = 0;
void *buf = NULL;
int socktype = 0;
socklen_t l = 0;
size_t sz = 0;
if (num_params != 3 ||
!chk_pt(params + 0, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT) ||
!chk_pt(params + 1, TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT) ||
!chk_pt(params + 2, TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT))
return TEEC_ERROR_BAD_PARAMETERS;
instance_id = params[0].b;
handle = params[0].c;
command = params[2].a;
fd = sock_handle_to_fd(instance_id, handle);
if (fd < 0)
return TEEC_ERROR_BAD_PARAMETERS;
l = sizeof(socktype);
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &socktype, &l))
return TEEC_ERROR_BAD_PARAMETERS;
buf = tee_supp_param_to_va(params + 1);
switch (socktype) {
case SOCK_STREAM:
sz = MEMREF_SIZE(params + 1);
res = tee_socket_ioctl_tcp(fd, command, buf, &sz);
MEMREF_SIZE(params + 1) = sz;
return res;
case SOCK_DGRAM:
sz = MEMREF_SIZE(params + 1);
res = tee_socket_ioctl_udp(fd, command, buf, &sz);
MEMREF_SIZE(params + 1) = sz;
return res;
default:
return TEEC_ERROR_BAD_PARAMETERS;
}
}
TEEC_Result tee_socket_process(size_t num_params,
struct tee_ioctl_param *params)
{
if (!num_params || !tee_supp_param_is_value(params))
return TEEC_ERROR_BAD_PARAMETERS;
switch (params->a) {
case OPTEE_MRC_SOCKET_OPEN:
return tee_socket_open(num_params, params);
case OPTEE_MRC_SOCKET_CLOSE:
return tee_socket_close(num_params, params);
case OPTEE_MRC_SOCKET_CLOSE_ALL:
return tee_socket_close_all(num_params, params);
case OPTEE_MRC_SOCKET_SEND:
return tee_socket_send(num_params, params);
case OPTEE_MRC_SOCKET_RECV:
return tee_socket_recv(num_params, params);
case OPTEE_MRC_SOCKET_IOCTL:
return tee_socket_ioctl(num_params, params);
default:
return TEEC_ERROR_BAD_PARAMETERS;
}
}

View File

@@ -0,0 +1,49 @@
/*
* Copyright (c) 2016-2017, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __TEE_SOCKET_H
#define __TEE_SOCKET_H
#include <tee_client_api.h>
struct tee_ioctl_param;
#if defined(CFG_GP_SOCKETS) && CFG_GP_SOCKETS == 1
TEEC_Result tee_socket_process(size_t num_params,
struct tee_ioctl_param *params);
#else
static inline TEEC_Result tee_socket_process(size_t num_params,
struct tee_ioctl_param *params)
{
(void)num_params;
(void)params;
return TEEC_ERROR_NOT_SUPPORTED;
}
#endif
#endif /*__SOCKET_H*/

View File

@@ -0,0 +1,681 @@
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <assert.h>
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <handle.h>
#include <libgen.h>
#include <optee_msg_supplicant.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <teec_trace.h>
#include <tee_supp_fs.h>
#include <tee_supplicant.h>
#include <unistd.h>
#ifndef __aligned
#define __aligned(x) __attribute__((__aligned__(x)))
#endif
#include <linux/tee.h>
#ifndef PATH_MAX
#define PATH_MAX 255
#endif
/* Path to all secure storage files. */
static char tee_fs_root[PATH_MAX];
#define TEE_FS_FILENAME_MAX_LENGTH 150
static pthread_mutex_t dir_handle_db_mutex = PTHREAD_MUTEX_INITIALIZER;
static struct handle_db dir_handle_db =
HANDLE_DB_INITIALIZER_WITH_MUTEX(&dir_handle_db_mutex);
static TEEC_Result errno_to_teec(int err)
{
switch (err) {
case ENOSPC:
return TEEC_ERROR_STORAGE_NO_SPACE;
case ENOENT:
return TEEC_ERROR_ITEM_NOT_FOUND;
default:
break;
}
return TEEC_ERROR_GENERIC;
}
static size_t tee_fs_get_absolute_filename(char *file, char *out,
size_t out_size)
{
int s = 0;
if (!file || !out || (out_size <= strlen(tee_fs_root) + 1))
return 0;
s = snprintf(out, out_size, "%s%s", tee_fs_root, file);
if (s < 0 || (size_t)s >= out_size)
return 0;
/* Safe to cast since we have checked that sizes are OK */
return (size_t)s;
}
static void fs_fsync(void)
{
int fd = 0;
fd = open(tee_fs_root, O_RDONLY | O_DIRECTORY);
if (fd > 0) {
fsync(fd);
close(fd);
}
}
static int do_mkdir(const char *path, mode_t mode)
{
struct stat st;
memset(&st, 0, sizeof(st));
if (mkdir(path, mode) != 0 && errno != EEXIST)
return -1;
if (stat(path, &st) != 0 && !S_ISDIR(st.st_mode))
return -1;
fs_fsync();
return 0;
}
static int mkpath(const char *path, mode_t mode)
{
int status = 0;
char *subpath = strdup(path);
char *prev = subpath;
char *curr = NULL;
while (status == 0 && (curr = strchr(prev, '/')) != 0) {
/*
* Check for root or double slash
*/
if (curr != prev) {
*curr = '\0';
status = do_mkdir(subpath, mode);
*curr = '/';
}
prev = curr + 1;
}
if (status == 0)
status = do_mkdir(path, mode);
free(subpath);
return status;
}
static int tee_supp_fs_init(void)
{
size_t n = 0;
mode_t mode = 0700;
n = snprintf(tee_fs_root, sizeof(tee_fs_root), "%s/", supplicant_params.fs_parent_path);
if (n >= sizeof(tee_fs_root))
return -1;
if (mkpath(tee_fs_root, mode) != 0)
return -1;
return 0;
}
static int open_wrapper(const char *fname, int flags)
{
int fd = 0;
while (true) {
fd = open(fname, flags | O_SYNC, 0600);
if (fd >= 0 || errno != EINTR)
return fd;
}
}
static TEEC_Result ree_fs_new_open(size_t num_params,
struct tee_ioctl_param *params)
{
char abs_filename[PATH_MAX] = { 0 };
char *fname = NULL;
int fd = 0;
if (num_params != 3 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT ||
(params[2].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_OUTPUT)
return TEEC_ERROR_BAD_PARAMETERS;
fname = tee_supp_param_to_va(params + 1);
if (!fname)
return TEEC_ERROR_BAD_PARAMETERS;
if (!tee_fs_get_absolute_filename(fname, abs_filename,
sizeof(abs_filename)))
return TEEC_ERROR_BAD_PARAMETERS;
fd = open_wrapper(abs_filename, O_RDWR);
if (fd < 0) {
/*
* In case the problem is the filesystem is RO, retry with the
* open flags restricted to RO.
*/
fd = open_wrapper(abs_filename, O_RDONLY);
if (fd < 0)
return TEEC_ERROR_ITEM_NOT_FOUND;
}
params[2].a = fd;
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_create(size_t num_params,
struct tee_ioctl_param *params)
{
char abs_filename[PATH_MAX] = { 0 };
char abs_dir[PATH_MAX] = { 0 };
char *fname = NULL;
char *d = NULL;
int fd = 0;
const int flags = O_RDWR | O_CREAT | O_TRUNC;
if (num_params != 3 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT ||
(params[2].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_OUTPUT)
return TEEC_ERROR_BAD_PARAMETERS;
fname = tee_supp_param_to_va(params + 1);
if (!fname)
return TEEC_ERROR_BAD_PARAMETERS;
if (!tee_fs_get_absolute_filename(fname, abs_filename,
sizeof(abs_filename)))
return TEEC_ERROR_BAD_PARAMETERS;
fd = open_wrapper(abs_filename, flags);
if (fd >= 0)
goto out;
if (errno != ENOENT)
return errno_to_teec(errno);
/* Directory for file missing, try make to it */
strncpy(abs_dir, abs_filename, sizeof(abs_dir));
abs_dir[sizeof(abs_dir) - 1] = '\0';
d = dirname(abs_dir);
if (!mkdir(d, 0700)) {
int err = 0;
fd = open_wrapper(abs_filename, flags);
if (fd >= 0)
goto out;
/*
* The directory was made but the file could still not be
* created.
*/
err = errno;
rmdir(d);
return errno_to_teec(err);
}
if (errno != ENOENT)
return errno_to_teec(errno);
/* Parent directory for file missing, try to make it */
d = dirname(d);
if (mkdir(d, 0700))
return errno_to_teec(errno);
/* Try to make directory for file again */
strncpy(abs_dir, abs_filename, sizeof(abs_dir));
abs_dir[sizeof(abs_dir) - 1] = '\0';
d = dirname(abs_dir);
if (mkdir(d, 0700)) {
int err = errno;
d = dirname(d);
rmdir(d);
return errno_to_teec(err);
}
fd = open_wrapper(abs_filename, flags);
if (fd < 0) {
int err = errno;
rmdir(d);
d = dirname(d);
rmdir(d);
return errno_to_teec(err);
}
out:
fs_fsync();
params[2].a = fd;
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_close(size_t num_params,
struct tee_ioctl_param *params)
{
int fd = 0;
if (num_params != 1 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT)
return TEEC_ERROR_BAD_PARAMETERS;
fd = params[0].b;
while (close(fd)) {
if (errno != EINTR)
return errno_to_teec(errno);
}
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_read(size_t num_params,
struct tee_ioctl_param *params)
{
uint8_t *buf = NULL;
size_t len = 0;
off_t offs = 0;
int fd = 0;
ssize_t r = 0;
size_t s = 0;
if (num_params != 2 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT)
return TEEC_ERROR_BAD_PARAMETERS;
fd = params[0].b;
offs = params[0].c;
buf = tee_supp_param_to_va(params + 1);
if (!buf)
return TEEC_ERROR_BAD_PARAMETERS;
len = MEMREF_SIZE(params + 1);
s = 0;
r = -1;
while (r && len) {
r = pread(fd, buf, len, offs);
if (r < 0) {
if (errno == EINTR)
continue;
return errno_to_teec(errno);
}
assert((size_t)r <= len);
buf += r;
len -= r;
offs += r;
s += r;
}
MEMREF_SIZE(params + 1) = s;
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_write(size_t num_params,
struct tee_ioctl_param *params)
{
uint8_t *buf = NULL;
size_t len = 0;
off_t offs = 0;
int fd = 0;
ssize_t r = 0;
if (num_params != 2 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT)
return TEEC_ERROR_BAD_PARAMETERS;
fd = params[0].b;
offs = params[0].c;
buf = tee_supp_param_to_va(params + 1);
if (!buf)
return TEEC_ERROR_BAD_PARAMETERS;
len = MEMREF_SIZE(params + 1);
while (len) {
r = pwrite(fd, buf, len, offs);
if (r < 0) {
if (errno == EINTR)
continue;
return errno_to_teec(errno);
}
assert((size_t)r <= len);
buf += r;
len -= r;
offs += r;
}
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_truncate(size_t num_params,
struct tee_ioctl_param *params)
{
size_t len = 0;
int fd = 0;
if (num_params != 1 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT)
return TEEC_ERROR_BAD_PARAMETERS;
fd = params[0].b;
len = params[0].c;
while (ftruncate(fd, len)) {
if (errno != EINTR)
return errno_to_teec(errno);
}
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_remove(size_t num_params,
struct tee_ioctl_param *params)
{
char abs_filename[PATH_MAX] = { 0 };
char *fname = NULL;
char *d = NULL;
if (num_params != 2 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT)
return TEEC_ERROR_BAD_PARAMETERS;
fname = tee_supp_param_to_va(params + 1);
if (!fname)
return TEEC_ERROR_BAD_PARAMETERS;
if (!tee_fs_get_absolute_filename(fname, abs_filename,
sizeof(abs_filename)))
return TEEC_ERROR_BAD_PARAMETERS;
if (unlink(abs_filename))
return errno_to_teec(errno);
/* If a file is removed, maybe the directory can be removed to? */
d = dirname(abs_filename);
if (!rmdir(d)) {
/*
* If the directory was removed, maybe the parent directory
* can be removed too?
*/
d = dirname(d);
rmdir(d);
}
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_rename(size_t num_params,
struct tee_ioctl_param *params)
{
char old_abs_filename[PATH_MAX] = { 0 };
char new_abs_filename[PATH_MAX] = { 0 };
char *old_fname = NULL;
char *new_fname = NULL;
bool overwrite = false;
if (num_params != 3 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT ||
(params[2].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT)
return TEEC_ERROR_BAD_PARAMETERS;
overwrite = !!params[0].b;
old_fname = tee_supp_param_to_va(params + 1);
if (!old_fname)
return TEEC_ERROR_BAD_PARAMETERS;
new_fname = tee_supp_param_to_va(params + 2);
if (!new_fname)
return TEEC_ERROR_BAD_PARAMETERS;
if (!tee_fs_get_absolute_filename(old_fname, old_abs_filename,
sizeof(old_abs_filename)))
return TEEC_ERROR_BAD_PARAMETERS;
if (!tee_fs_get_absolute_filename(new_fname, new_abs_filename,
sizeof(new_abs_filename)))
return TEEC_ERROR_BAD_PARAMETERS;
if (!overwrite) {
struct stat st;
if (!stat(new_abs_filename, &st))
return TEEC_ERROR_ACCESS_CONFLICT;
}
if (rename(old_abs_filename, new_abs_filename)) {
if (errno == ENOENT)
return TEEC_ERROR_ITEM_NOT_FOUND;
}
fs_fsync();
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_opendir(size_t num_params,
struct tee_ioctl_param *params)
{
char abs_filename[PATH_MAX] = { 0 };
char *fname = NULL;
DIR *dir = NULL;
int handle = 0;
struct dirent *dent = NULL;
bool empty = true;
if (num_params != 3 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT ||
(params[2].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_OUTPUT)
return TEEC_ERROR_BAD_PARAMETERS;
fname = tee_supp_param_to_va(params + 1);
if (!fname)
return TEEC_ERROR_BAD_PARAMETERS;
if (!tee_fs_get_absolute_filename(fname, abs_filename,
sizeof(abs_filename)))
return TEEC_ERROR_BAD_PARAMETERS;
dir = opendir(abs_filename);
if (!dir)
return TEEC_ERROR_ITEM_NOT_FOUND;
/*
* Ignore empty directories. Works around an issue when the
* data path is mounted over NFS. Due to the way OP-TEE implements
* TEE_CloseAndDeletePersistentObject1() currently, tee-supplicant
* still has a file descriptor open to the file when it's removed in
* ree_fs_new_remove(). In this case the NFS server may create a
* temporary reference called .nfs????, and the rmdir() call fails
* so that the TA directory is left over. Checking this special case
* here avoids that TEE_StartPersistentObjectEnumerator() returns
* TEE_SUCCESS when it should return TEEC_ERROR_ITEM_NOT_FOUND.
* Test case: "xtest 6009 6010".
*/
while ((dent = readdir(dir))) {
if (dent->d_name[0] == '.')
continue;
empty = false;
break;
}
if (empty) {
closedir(dir);
return TEEC_ERROR_ITEM_NOT_FOUND;
}
rewinddir(dir);
handle = handle_get(&dir_handle_db, dir);
if (handle < 0) {
closedir(dir);
return TEEC_ERROR_OUT_OF_MEMORY;
}
params[2].a = handle;
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_closedir(size_t num_params,
struct tee_ioctl_param *params)
{
DIR *dir = NULL;
if (num_params != 1 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT)
return TEEC_ERROR_BAD_PARAMETERS;
dir = handle_put(&dir_handle_db, params[0].b);
if (!dir)
return TEEC_ERROR_BAD_PARAMETERS;
closedir(dir);
return TEEC_SUCCESS;
}
static TEEC_Result ree_fs_new_readdir(size_t num_params,
struct tee_ioctl_param *params)
{
DIR *dir = NULL;
struct dirent *dirent = NULL;
char *buf = NULL;
size_t len = 0;
size_t fname_len = 0;
if (num_params != 2 ||
(params[0].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT ||
(params[1].attr & TEE_IOCTL_PARAM_ATTR_TYPE_MASK) !=
TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT)
return TEEC_ERROR_BAD_PARAMETERS;
buf = tee_supp_param_to_va(params + 1);
if (!buf)
return TEEC_ERROR_BAD_PARAMETERS;
len = MEMREF_SIZE(params + 1);
dir = handle_lookup(&dir_handle_db, params[0].b);
if (!dir)
return TEEC_ERROR_BAD_PARAMETERS;
while (true) {
dirent = readdir(dir);
if (!dirent)
return TEEC_ERROR_ITEM_NOT_FOUND;
if (dirent->d_name[0] != '.')
break;
}
fname_len = strlen(dirent->d_name) + 1;
MEMREF_SIZE(params + 1) = fname_len;
if (fname_len > len)
return TEEC_ERROR_SHORT_BUFFER;
memcpy(buf, dirent->d_name, fname_len);
return TEEC_SUCCESS;
}
TEEC_Result tee_supp_fs_process(size_t num_params,
struct tee_ioctl_param *params)
{
if (!num_params || !tee_supp_param_is_value(params))
return TEEC_ERROR_BAD_PARAMETERS;
if (!tee_fs_root[0]) {
if (tee_supp_fs_init() != 0) {
EMSG("error tee_supp_fs_init: failed to create %s/",
tee_fs_root);
memset(tee_fs_root, 0, sizeof(tee_fs_root));
return TEEC_ERROR_STORAGE_NOT_AVAILABLE;
}
}
switch (params->a) {
case OPTEE_MRF_OPEN:
return ree_fs_new_open(num_params, params);
case OPTEE_MRF_CREATE:
return ree_fs_new_create(num_params, params);
case OPTEE_MRF_CLOSE:
return ree_fs_new_close(num_params, params);
case OPTEE_MRF_READ:
return ree_fs_new_read(num_params, params);
case OPTEE_MRF_WRITE:
return ree_fs_new_write(num_params, params);
case OPTEE_MRF_TRUNCATE:
return ree_fs_new_truncate(num_params, params);
case OPTEE_MRF_REMOVE:
return ree_fs_new_remove(num_params, params);
case OPTEE_MRF_RENAME:
return ree_fs_new_rename(num_params, params);
case OPTEE_MRF_OPENDIR:
return ree_fs_new_opendir(num_params, params);
case OPTEE_MRF_CLOSEDIR:
return ree_fs_new_closedir(num_params, params);
case OPTEE_MRF_READDIR:
return ree_fs_new_readdir(num_params, params);
default:
return TEEC_ERROR_BAD_PARAMETERS;
}
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TEE_SUPP_FS_H
#define TEE_SUPP_FS_H
#include <tee_client_api.h>
struct tee_ioctl_param;
TEEC_Result tee_supp_fs_process(size_t num_params,
struct tee_ioctl_param *params);
#endif

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,59 @@
/*
* Copyright (c) 2016, Linaro Limited
* Copyright (c) 2014, STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TEE_SUPPLICANT_H
#define TEE_SUPPLICANT_H
#include <stdbool.h>
#include <pthread.h>
/* Helpers to access memref parts of a struct tee_ioctl_param */
#define MEMREF_SHM_ID(p) ((p)->c)
#define MEMREF_SHM_OFFS(p) ((p)->a)
#define MEMREF_SIZE(p) ((p)->b)
struct tee_ioctl_param;
/* Global tee-supplicant parameters */
struct tee_supplicant_params {
const char *ta_dir;
const char *ta_load_path;
const char *plugin_load_path;
const char *fs_parent_path;
const char *rpmb_cid;
};
extern struct tee_supplicant_params supplicant_params;
bool tee_supp_param_is_memref(struct tee_ioctl_param *param);
bool tee_supp_param_is_value(struct tee_ioctl_param *param);
void *tee_supp_param_to_va(struct tee_ioctl_param *param);
void tee_supp_mutex_lock(pthread_mutex_t *mu);
void tee_supp_mutex_unlock(pthread_mutex_t *mu);
#endif /*TEE_SUPPLICANT_H*/

View File

@@ -0,0 +1,172 @@
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <dirent.h>
#include <fcntl.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <teec_trace.h>
#include <teec_ta_load.h>
#ifndef PATH_MAX
#define PATH_MAX 255
#endif
struct tee_rpc_cmd {
void *buffer;
uint32_t size;
uint32_t type;
int fd;
};
/*
* Based on the uuid this function will try to find a TA-binary on the
* filesystem and return it back to the caller in the parameter ta.
*
* @param: ta_load_path Where to load the TA from. The full path to the TA
* binary is @ta_load_path/@destination.ta.
* @param: destination The uuid of the TA we are searching for.
* @param: ta A pointer which this function will allocate and copy
* the TA from the filesystem to the pointer itself. It is
* the callers responsibility to free the pointer.
* @param: ta_size The size of the TA found on file system. It will be 0
* if no TA was not found.
*
* @return 0 if TA was found, otherwise -1.
*/
static int try_load_secure_module(const char *ta_load_path,
const TEEC_UUID *destination, void *ta,
size_t *ta_size)
{
char fname[PATH_MAX] = { 0 };
FILE *file = NULL;
bool first_try = true;
size_t s = 0;
long l = 0;
int n = 0;
if (!ta_size || !destination) {
DMSG("wrong inparameter to TEECI_LoadSecureModule");
return TA_BINARY_NOT_FOUND;
}
/*
* We expect the TA binary to be named after the UUID as per RFC4122,
* that is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.ta
* If the file cannot be open, try the deprecated format:
* xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx.ta
*/
again:
n = snprintf(fname, PATH_MAX,
"%s/%08x-%04x-%04x-%02x%02x%s%02x%02x%02x%02x%02x%02x.ta",
ta_load_path,
destination->timeLow,
destination->timeMid,
destination->timeHiAndVersion,
destination->clockSeqAndNode[0],
destination->clockSeqAndNode[1],
first_try ? "-" : "",
destination->clockSeqAndNode[2],
destination->clockSeqAndNode[3],
destination->clockSeqAndNode[4],
destination->clockSeqAndNode[5],
destination->clockSeqAndNode[6],
destination->clockSeqAndNode[7]);
DMSG("Attempt to load %s", fname);
if ((n < 0) || (n >= PATH_MAX)) {
EMSG("wrong TA path [%s]", fname);
return TA_BINARY_NOT_FOUND;
}
file = fopen(fname, "r");
if (file == NULL) {
DMSG("failed to open the ta %s TA-file", fname);
if (first_try) {
first_try = false;
goto again;
}
return TA_BINARY_NOT_FOUND;
}
if (fseek(file, 0, SEEK_END) != 0) {
fclose(file);
return TA_BINARY_NOT_FOUND;
}
l = ftell(file);
if (l < 0) {
DMSG("failed to ftell the ta %s TA-file", fname);
fclose(file);
return TA_BINARY_NOT_FOUND;
}
s = l;
if (s > *ta_size || !ta) {
/*
* Buffer isn't large enough, return the required size to
* let the caller increase the size of the buffer and try
* again.
*/
goto out;
}
if (fseek(file, 0, SEEK_SET) != 0) {
fclose(file);
return TA_BINARY_NOT_FOUND;
}
if (s != fread(ta, 1, s, file)) {
DMSG("failed to fread the ta %s TA-file", fname);
fclose(file);
return TA_BINARY_NOT_FOUND;
}
out:
*ta_size = s;
fclose(file);
return TA_BINARY_FOUND;
}
int TEECI_LoadSecureModule(const TEEC_UUID *destination, void *ta,
size_t *ta_size)
{
int res = TA_BINARY_NOT_FOUND;
char **path = NULL;
for (path = ta_path; *path; path++) {
res = try_load_secure_module(*path, destination, ta, ta_size);
if (res == TA_BINARY_FOUND)
break;
}
return res;
}

View File

@@ -0,0 +1,52 @@
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _TEEC_TA_LOAD_H
#define _TEEC_TA_LOAD_H
#include <tee_client_api.h>
#define TA_BINARY_FOUND 0
#define TA_BINARY_NOT_FOUND -1
/* NULL-terminated list of paths */
extern char **ta_path;
/**
* Based on the uuid this function will try to find a TA-binary on the
* filesystem and return it back to the caller in the parameter ta.
*
* @param: destination The uuid of the TA we are searching for.
* @param: ta A pointer which this function will copy
* the TA from the filesystem to if *@ta_size i large
* enough.
* @param: ta_size The size of the TA found on file system. It will be 0
* if no TA was not found.
*
* @return 0 if TA was found, otherwise -1.
*/
int TEECI_LoadSecureModule(const TEEC_UUID *destination, void *ta,
size_t *ta_size);
#endif

View File

@@ -0,0 +1,17 @@
# SPDX-License-Identifier: BSD-2-Clause
[Unit]
Description=TEE Supplicant on %i
DefaultDependencies=no
After=dev-%i.device
Wants=dev-%i.device
Conflicts=shutdown.target
Before=tpm2.target sysinit.target shutdown.target
[Service]
Type=notify
User=@CFG_TEE_SUPPL_USER@
Group=@CFG_TEE_SUPPL_GROUP@
EnvironmentFile=-@CMAKE_INSTALL_SYSCONFDIR@/default/tee-supplicant
ExecStart=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/tee-supplicant $OPTARGS
# Workaround for fTPM TA: stop kernel module before tee-supplicant
ExecStop=-/bin/sh -c "/sbin/modprobe -v -r tpm_ftpm_tee ; /bin/kill $MAINPID"

View File

@@ -0,0 +1,80 @@
# Note: please keep the entries in this file sorted in reverse alphabetical
# order (sort -r)
TEEC_Result
TEEC_Context
TEEC_UUID
TEEC_SharedMemory
TEEC_TempMemoryReference
TEEC_RegisteredMemoryReference
TEEC_Value
TEEC_Parameter
TEEC_Session
TEEC_Operation
CK_VOID_PTR_PTR
CK_VOID_PTR
CK_VERSION_PTR
CK_VERSION
CK_UTF8CHAR_PTR
CK_UTF8CHAR
CK_USER_TYPE
CK_UNLOCKMUTEX
CK_ULONG_PTR
CK_ULONG
CK_TOKEN_INFO_PTR
CK_TOKEN_INFO
CK_STATE
CK_SLOT_INFO_PTR
CK_SLOT_INFO
CK_SLOT_ID_PTR
CK_SLOT_ID
CK_SESSION_INFO_PTR
CK_SESSION_INFO
CK_SESSION_HANDLE_PTR
CK_SESSION_HANDLE
CK_RV
CK_OBJECT_HANDLE_PTR
CK_OBJECT_HANDLE
CK_OBJECT_CLASS_PTR
CK_OBJECT_CLASS
CK_NOTIFY
CK_NOTIFICATION
CK_MECHANISM_TYPE_PTR
CK_MECHANISM_TYPE
CK_MECHANISM_PTR
CK_MECHANISM_INFO_PTR
CK_MECHANISM_INFO
CK_MECHANISM
CK_MAC_GENERAL_PARAMS_PTR
CK_MAC_GENERAL_PARAMS
CK_LONG
CK_LOCKMUTEX
CK_KEY_TYPE_PTR
CK_KEY_TYPE
CK_INFO_PTR
CK_INFO
CK_GCM_PARAMS_PTR
CK_GCM_PARAMS
CK_FUNCTION_LIST_PTR_PTR
CK_FUNCTION_LIST_PTR
CK_FUNCTION_LIST
CK_FLAGS
CK_DESTROYMUTEX
CK_DATE_PTR
CK_DATE
CK_CREATEMUTEX
CK_C_INITIALIZE_ARGS_PTR
CK_C_INITIALIZE_ARGS
CK_CHAR_PTR
CK_CHAR
CK_CCM_PARAMS_PTR
CK_CCM_PARAMS
CK_BYTE_PTR
CK_BYTE
CK_BBOOL
CK_ATTRIBUTE_TYPE
CK_ATTRIBUTE_PTR
CK_ATTRIBUTE
CK_AES_CTR_PARAMS_PTR
CK_AES_CTR_PARAMS
CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR
CK_AES_CBC_ENCRYPT_DATA_PARAMS

View File

@@ -0,0 +1,14 @@
--codespell
--no-tree
--quiet
--strict
--max-line-length=80
--ignore=CAMELCASE
--ignore=CONCATENATED_STRING
--ignore=FILE_PATH_CHANGES
--ignore=GERRIT_CHANGE_ID
--ignore=NOT_UNIFIED_DIFF
--ignore=STRLCPY
--ignore=PREFER_KERNEL_TYPES
--ignore=USLEEP_RANGE
--kconfig-prefix=CFG_

Some files were not shown because too many files have changed in this diff Show More