该项目为optee_os开源设计源码,以C语言为核心,辅以Python、HTML、Shell等多种语言,共包含1604个文件,其中C语言文件916个,头文件376个,Makefile文件149个,汇编文件63个,Markdown文件24个,Python脚本11个,PNG图片10个,文本文件6个,Mercurial忽略文件5个,HTML文件4个。该源码解析旨在深入理解optee_os的架构与实现。
关键词
C语言 开发 optee_os 开源设计 源码解析
目录结构
├── .github ├── issue_template.md ├── pull_request_template.md ├── .gitignore ├── .shippable.yml ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── MAINTAINERS ├── Makefile ├── Notice.md ├── core ├── arch ├── arm ├── arm.mk ├── cpu ├── cortex-a15.mk ├── cortex-a5.mk ├── cortex-a7.mk ├── cortex-a9.mk ├── cortex-armv8-0.mk ├── crypto ├── aes-gcm-ce.c ├── ghash-ce-core_a32.S ├── ghash-ce-core_a64.S ├── sub.mk ├── dts ├── stm32mp157-pinctrl.dtsi ├── stm32mp157c-ed1.dts ├── stm32mp157c-ev1.dts ├── stm32mp157c.dtsi ├── include ├── arm.h ├── arm32.h ├── arm32_macros.S ├── arm32_macros_cortex_a9.S ├── arm64.h ├── arm64_macros.S ├── crypto ├── ghash-ce-core.h ├── kernel ├── abort.h ├── cache_helpers.h ├── delay.h ├── early_ta.h ├── generic_boot.h ├── linker.h ├── misc.h ├── mutex.h ├── pm_stubs.h ├── pseudo_ta.h ├── spinlock.h ├── tee_l2cc_mutex.h ├── thread.h ├── thread_defs.h ├── time_source.h ├── timer.h ├── tlb_helpers.h ├── tz_proc_def.h ├── tz_ssvce_def.h ├── tz_ssvce_pl310.h ├── unwind.h ├── user_ta.h ├── vfp.h ├── wait_queue.h ├── mm ├── core_memprot.h ├── core_mmu.h ├── generic_ram_layout.h ├── mobj.h ├── pgt_cache.h ├── tee_pager.h ├── sm ├── optee_smc.h ├── pm.h ├── psci.h ├── sm.h ├── std_smc.h ├── tee_mon.h ├── teesmc_opteed.h ├── teesmc_opteed_macros.h ├── smccc.h ├── tee ├── arch_svc.h ├── entry_fast.h ├── entry_std.h ├── kernel ├── abort.c ├── arm32_gicv3_sysreg.txt ├── arm32_sysreg.txt ├── asm-defines.c ├── cache_helpers_a32.S ├── cache_helpers_a64.S ├── delay.c ├── early_ta.c ├── elf32.h ├── elf64.h ├── elf_common.h ├── elf_load.c ├── elf_load.h ├── elf_load_dyn.c ├── elf_load_dyn.h ├── elf_load_private.h ├── generic_boot.c ├── generic_entry_a32.S ├── generic_entry_a64.S ├── kern.ld.S ├── link.mk ├── link_dummies.c ├── link_dummy.ld ├── misc_a32.S ├── misc_a64.S ├── mutex.c ├── mutex_lockdep.c ├── mutex_lockdep.h ├── otp_stubs.c ├── pm_stubs.c ├── proc_a32.S ├── proc_a64.S ├── pseudo_ta.c ├── ree_fs_ta.c ├── secstor_ta.c ├── spin_lock_a32.S ├── spin_lock_a64.S ├── spin_lock_debug.c ├── sub.mk ├── tee_l2cc_mutex.c ├── tee_time.c ├── tee_time_arm_cntpct.c ├── tee_time_ree.c ├── thread.c ├── thread_a32.S ├── thread_a64.S ├── thread_private.h ├── timer_a64.c ├── tlb_helpers_a32.S ├── tlb_helpers_a64.S ├── trace_ext.c ├── tz_ssvce_pl310_a32.S ├── unwind_arm32.c ├── unwind_arm64.c ├── unwind_private.h ├── user_ta.c ├── vfp.c ├── vfp_a32.S ├── vfp_a64.S ├── vfp_private.h ├── wait_queue.c ├── mm ├── core_mmu.c ├── core_mmu_lpae.c ├── core_mmu_private.h ├── core_mmu_v7.c ├── mobj.c ├── pgt_cache.c ├── sub.mk ├── tee_mm.c ├── tee_mmu.c ├── tee_pager.c ├── plat-d02 ├── conf.mk ├── main.c ├── platform_config.h ├── sub.mk ├── plat-hikey ├── conf.mk ├── hikey_peripherals.h ├── main.c ├── platform_config.h ├── spi_test.c ├── sub.mk ├── plat-imx ├── a7_plat_init.S ├── a9_plat_init.S ├── conf.mk ├── config ├── imx6sx.h ├── imx-common.c ├── imx-regs.h ├── imx.h ├── imx6.c ├── imx6ul.c ├── imx7.c ├── imx_pl310.c ├── imx_pl310.h ├── imx_pm.h ├── imx_pm_asm_defines.c ├── imx_sip.h ├── main.c ├── mmdc.c ├── mmdc.h ├── platform_config.h ├── pm ├── cpuidle-imx7d.c ├── gpcv2.c ├── imx7_suspend.c ├── pm-imx7.c ├── psci-cpuidle-imx7.S ├── psci-suspend-imx7.S ├── psci.c ├── sub.mk ├── sm_platform_handler.c ├── sub.mk ├── plat-k3 ├── conf.mk ├── main.c ├── platform_config.h ├── sub.mk ├── plat-ls ├── conf.mk ├── ls_hw_unq_key_a64.S ├── main.c ├── plat_init.S ├── platform_config.h ├── sub.mk ├── plat-marvell ├── armada3700 ├── hal_sec_perf.c ├── armada7k8k ├── hal_sec_perf.c ├── conf.mk ├── main.c ├── platform_config.h ├── sub.mk ├── plat-mediatek ├── conf.mk ├── main.c ├── platform_config.h ├── sub.mk ├── plat-poplar ├── conf.mk ├── hi3798cv200.h ├── main.c ├── platform_config.h ├── sub.mk ├── plat-rcar ├── conf.mk ├── link.mk ├── main.c ├── platform_config.h ├── sub.mk ├── plat-rockchip ├── common.h ├── conf.mk ├── core_pos_a32.S ├── cru.h ├── grf.h ├── main.c ├── plat_init.S ├── platform.c ├── platform_config.h ├── psci_rk322x.c ├── sub.mk ├── plat-rpi3 ├── conf.mk ├── main.c ├── platform_config.h ├── sub.mk ├── plat-sam ├── conf.mk ├── main.c ├── matrix.c ├── matrix.h ├── platform_config.h ├── sama5d2.h ├── sub.mk ├── tz_matrix.h ├── plat-sprd ├── conf.mk ├── console.c ├── main.c ├── platform_config.h ├── sub.mk ├── plat-stm ├── .gitignore ├── conf.mk ├── main.c ├── platform_config.h ├── rng_support.c ├── sub.mk ├── tz_a9init.S ├── plat-stm32mp1 ├── boot_api.h ├── conf.mk ├── drivers ├── stm32mp1_rcc.c ├── stm32mp1_rcc.h ├── sub.mk ├── link.mk ├── main.c ├── platform_config.h ├── pm ├── psci.c ├── sub.mk ├── reset.S ├── scripts ├── stm32image.py ├── stm32_util.h ├── sub.mk ├── plat-sunxi ├── conf.mk ├── main.c ├── plat_init.S ├── platform_config.h ├── psci.c ├── sub.mk ├── plat-synquacer ├── conf.mk ├── main.c ├── platform_config.h ├── rng_pta.c ├── rng_pta.h ├── rng_pta_client.h ├── sub.mk ├── plat-ti ├── a9_plat_init.S ├── api_monitor_index_a15.h ├── api_monitor_index_a9.h ├── conf.mk ├── main.c ├── platform_config.h ├── sm_platform_handler_a15.c ├── sm_platform_handler_a9.c ├── sub.mk ├── ti_pl310.c ├── plat-vexpress ├── conf.mk ├── juno_core_pos_a32.S ├── juno_core_pos_a64.S ├── main.c ├── platform_config.h ├── sub.mk ├── vendor_props.c ├── plat-zynq7k ├── conf.mk ├── main.c ├── plat_init.S ├── platform_config.h ├── platform_smc.h ├── sub.mk ├── plat-zynqmp ├── conf.mk ├── main.c ├── platform_config.h ├── sub.mk ├── pta ├── benchmark.c ├── core_fs_htree_tests.c ├── core_lockdep_tests.c ├── core_mutex_tests.c ├── core_self_tests.c ├── core_self_tests.h ├── device.c ├── gprof.c ├── interrupt_tests.c ├── pta_invoke_tests.c ├── sdp_pta.c ├── secstor_ta_mgmt.c ├── stats.c ├── sub.mk ├── system.c ├── sm ├── pm.c ├── pm_a32.S ├── psci-helper.S ├── psci.c ├── sm.c ├── sm_a32.S ├── sm_private.h ├── std_smc.c ├── sub.mk ├── tee ├── arch_svc.c ├── arch_svc_a32.S ├── arch_svc_a64.S ├── arch_svc_private.h ├── cache.c ├── entry_fast.c ├── entry_std.c ├── init.c ├── pta_socket.c ├── sub.mk ├── svc_cache.c ├── svc_dummy.c ├── core.mk ├── crypto.mk ├── crypto ├── aes-gcm-ghash-tbl.c ├── aes-gcm-ghash.c ├── aes-gcm-private.h ├── aes-gcm-sw.c ├── aes-gcm.c ├── crypto.c ├── rng_fortuna.c ├── rng_hw.c ├── signed_hdr.c ├── sub.mk ├── drivers ├── atmel_uart.c ├── cdns_uart.c ├── dra7_rng.c ├── gic.c ├── hi16xx_rng.c ├── hi16xx_uart.c ├── imx_snvs.c ├── imx_uart.c ├── imx_wdog.c ├── mvebu_uart.c ├── ns16550.c ├── pl011.c ├── pl022_spi.c ├── pl061_gpio.c ├── scif.c ├── serial8250_uart.c ├── sprd_uart.c ├── stih_asc.c ├── stm32_uart.c ├── sub.mk ├── tzc380.c ├── tzc400.c ├── include ├── bench.h ├── console.h ├── crypto ├── aes-ccm.h ├── aes-gcm.h ├── crypto.h ├── internal_aes-gcm.h ├── drivers ├── atmel_uart.h ├── cdns_uart.h ├── gic.h ├── hi16xx_uart.h ├── imx_snvs.h ├── imx_uart.h ├── imx_wdog.h ├── mvebu_uart.h ├── ns16550.h ├── pl011.h ├── pl022_spi.h ├── pl061_gpio.h ├── scif.h ├── serial.h ├── serial8250_uart.h ├── sprd_uart.h ├── stih_asc.h ├── stm32_uart.h ├── tzc380.h ├── tzc400.h ├── dt-bindings ├── clock ├── stm32mp1-clks.h ├── gpio ├── gpio.h ├── interrupt-controller ├── arm-gic.h ├── irq.h ├── pinctrl ├── stm32-pinfunc.h ├── reset ├── stm32mp1-resets.h ├── gen-asm-defines.h ├── gpio.h ├── initcall.h ├── io.h ├── keep.h ├── kernel ├── asan.h ├── chip_services.h ├── dt.h ├── handle.h ├── interrupt.h ├── lockdep.h ├── msg_param.h ├── panic.h ├── pm.h ├── refcount.h ├── tee_common.h ├── tee_common_otp.h ├── tee_customer_part.h ├── tee_misc.h ├── tee_ta_manager.h ├── tee_time.h ├── trace_ta.h ├── mm ├── tee_mm.h ├── tee_mmu.h ├── tee_mmu_types.h ├── optee_msg.h ├── optee_rpc_cmd.h ├── rng_support.h ├── scattered_array.h ├── signed_hdr.h ├── spi.h ├── ta_pub_key.h ├── tee ├── cache.h ├── fs_dirfile.h ├── fs_htree.h ├── svc_cache.h ├── tadb.h ├── tee_cryp_concat_kdf.h ├── tee_cryp_hkdf.h ├── tee_cryp_pbkdf2.h ├── tee_cryp_utl.h ├── tee_fs.h ├── tee_fs_key_manager.h ├── tee_fs_rpc.h ├── tee_obj.h ├── tee_pobj.h ├── tee_svc.h ├── tee_svc_cryp.h ├── tee_svc_storage.h ├── uuid.h ├── kernel ├── asan.c ├── assert.c ├── console.c ├── dt.c ├── handle.c ├── interrupt.c ├── lockdep.c ├── msg_param.c ├── panic.c ├── pm.c ├── refcount.c ├── scattered_array.c ├── sub.mk ├── tee_misc.c ├── tee_ta_manager.c ├── ubsan.c ├── lib ├── libfdt ├── README.license ├── fdt.c ├── fdt_addresses.c ├── fdt_empty_tree.c ├── fdt_overlay.c ├── fdt_ro.c ├── fdt_rw.c ├── fdt_strerror.c ├── fdt_sw.c ├── fdt_wip.c ├── include ├── fdt.h ├── libfdt.h ├── libfdt_env.h ├── libfdt_internal.h ├── sub.mk ├── libtomcrypt ├── include ├── tomcrypt.h ├── tomcrypt_argchk.h ├── tomcrypt_arm_neon.h ├── tomcrypt_cfg.h ├── tomcrypt_cipher.h ├── tomcrypt_custom.h ├── tomcrypt_hash.h ├── tomcrypt_mac.h ├── tomcrypt_macros.h ├── tomcrypt_math.h ├── tomcrypt_misc.h ├── tomcrypt_mp.h ├── tomcrypt_pk.h ├── tomcrypt_pkcs.h ├── tomcrypt_prng.h ├── src ├── ciphers ├── aes.c ├── aes_armv8a_ce.c ├── aes_modes_armv8a_ce_a32.S ├── aes_modes_armv8a_ce_a64.S ├── aes_tab.c ├── des.c ├── sub.mk ├── encauth ├── ccm ├── ccm_add_aad.c ├── ccm_add_nonce.c ├── ccm_done.c ├── ccm_init.c ├── ccm_memory.c ├── ccm_process.c ├── ccm_reset.c ├── sub.mk ├── eax ├── eax_addheader.c ├── eax_decrypt.c ├── eax_decrypt_verify_memory.c ├── eax_done.c ├── eax_encrypt.c ├── eax_encrypt_authenticate_memory.c ├── eax_init.c ├── gcm ├── gcm_add_aad.c ├── gcm_add_iv.c ├── gcm_done.c ├── gcm_gf_mult.c ├── gcm_init.c ├── gcm_memory.c ├── gcm_mult_h.c ├── gcm_mult_h_arm_ce.c ├── gcm_process.c ├── gcm_reset.c ├── sub.mk ├── ocb ├── ocb_decrypt.c ├── ocb_decrypt_verify_memory.c ├── ocb_done_decrypt.c ├── ocb_done_encrypt.c ├── ocb_encrypt.c ├── ocb_encrypt_authenticate_memory.c ├── ocb_init.c ├── ocb_ntz.c ├── ocb_shift_xor.c ├── s_ocb_done.c ├── sub.mk ├── hashes ├── helper ├── hash_file.c ├── hash_filehandle.c ├── hash_memory.c ├── hash_memory_multi.c ├── sub.mk ├── md5.c ├── sha1.c ├── sha1_armv8a_ce.c ├── sha1_armv8a_ce_a32.S ├── sha1_armv8a_ce_a64.S ├── sha2 ├── sha224.c ├── sha256.c ├── sha256_armv8a_ce.c ├── sha256_armv8a_ce_a32.S ├── sha256_armv8a_ce_a64.S ├── sha384.c ├── sha512.c ├── sha512_256.c ├── sub.mk ├── sub.mk ├── mac ├── hmac ├── hmac_done.c ├── hmac_file.c ├── hmac_init.c ├── hmac_memory.c ├── hmac_memory_multi.c ├── hmac_process.c ├── sub.mk ├── omac ├── omac_done.c ├── omac_file.c ├── omac_init.c ├── omac_memory.c ├── omac_memory_multi.c ├── omac_process.c ├── sub.mk ├── pmac ├── pmac_done.c ├── pmac_file.c ├── pmac_init.c ├── pmac_memory.c ├── pmac_memory_multi.c ├── pmac_ntz.c ├── pmac_process.c ├── pmac_shift_xor.c ├── sub.mk ├── xcbc ├── xcbc_done.c ├── xcbc_file.c ├── xcbc_init.c ├── xcbc_memory.c ├── xcbc_memory_multi.c ├── xcbc_process.c ├── math ├── fp ├── ltc_ecc_fp_mulmod.c ├── sub.mk ├── multi.c ├── rand_bn.c ├── rand_prime.c ├── sub.mk ├── misc ├── base64 ├── base64_decode.c ├── base64_encode.c ├── sub.mk ├── burn_stack.c ├── crypt ├── crypt.c ├── crypt_argchk.c ├── crypt_cipher_descriptor.c ├── crypt_cipher_is_valid.c ├── crypt_find_cipher.c ├── crypt_find_cipher_any.c ├── crypt_find_cipher_id.c ├── crypt_find_hash.c ├── crypt_find_hash_any.c ├── crypt_find_hash_id.c ├── crypt_find_hash_oid.c ├── crypt_find_prng.c ├── crypt_fsa.c ├── crypt_hash_descriptor.c ├── crypt_hash_is_valid.c ├── crypt_prng_descriptor.c ├── crypt_prng_is_valid.c ├── crypt_register_cipher.c ├── crypt_register_hash.c ├── crypt_register_prng.c ├── crypt_unregister_cipher.c ├── crypt_unregister_hash.c ├── crypt_unregister_prng.c ├── sub.mk ├── error_to_string.c ├── mem_neq.c ├── pkcs5 ├── pkcs_5_1.c ├── pkcs_5_2.c ├── sub.mk ├── sub.mk ├── zeromem.c ├── modes ├── cbc ├── cbc_decrypt.c ├── cbc_done.c ├── cbc_encrypt.c ├── cbc_getiv.c ├── cbc_setiv.c ├── cbc_start.c ├── sub.mk ├── cfb ├── cfb_decrypt.c ├── cfb_done.c ├── cfb_encrypt.c ├── cfb_getiv.c ├── cfb_setiv.c ├── cfb_start.c ├── sub.mk ├── ctr ├── ctr_decrypt.c ├── ctr_done.c ├── ctr_encrypt.c ├── ctr_getiv.c ├── ctr_setiv.c ├── ctr_start.c ├── sub.mk ├── ecb ├── ecb_decrypt.c ├── ecb_done.c ├── ecb_encrypt.c ├── ecb_start.c ├── sub.mk ├── f8 ├── f8_decrypt.c ├── f8_done.c ├── f8_encrypt.c ├── f8_getiv.c ├── f8_setiv.c ├── f8_start.c ├── sub.mk ├── lrw ├── lrw_decrypt.c ├── lrw_done.c ├── lrw_encrypt.c ├── lrw_getiv.c ├── lrw_process.c ├── lrw_setiv.c ├── lrw_start.c ├── sub.mk ├── ofb ├── ofb_decrypt.c ├── ofb_done.c ├── ofb_encrypt.c ├── ofb_getiv.c ├── ofb_setiv.c ├── ofb_start.c ├── sub.mk ├── sub.mk ├── xts ├── sub.mk ├── xts_decrypt.c ├── xts_done.c ├── xts_encrypt.c ├── xts_init.c ├── xts_mult_x.c ├── mpa_desc.c ├── mpi_desc.c ├── pk ├── asn1 ├── der ├── bit ├── der_decode_bit_string.c ├── der_decode_raw_bit_string.c ├── der_encode_bit_string.c ├── der_encode_raw_bit_string.c ├── der_length_bit_string.c ├── sub.mk ├── boolean ├── der_decode_boolean.c ├── der_encode_boolean.c ├── der_length_boolean.c ├── sub.mk ├── choice ├── der_decode_choice.c ├── sub.mk ├── ia5 ├── der_decode_ia5_string.c ├── der_encode_ia5_string.c ├── der_length_ia5_string.c ├── sub.mk ├── integer ├── der_decode_integer.c ├── der_encode_integer.c ├── der_length_integer.c ├── sub.mk ├── object_identifier ├── der_decode_object_identifier.c ├── der_encode_object_identifier.c ├── der_length_object_identifier.c ├── sub.mk ├── octet ├── der_decode_octet_string.c ├── der_encode_octet_string.c ├── der_length_octet_string.c ├── sub.mk ├── printable_string ├── der_decode_printable_string.c ├── der_encode_printable_string.c ├── der_length_printable_string.c ├── sub.mk ├── sequence ├── der_decode_sequence_ex.c ├── der_decode_sequence_flexi.c ├── der_decode_sequence_multi.c ├── der_decode_subject_public_key_info.c ├── der_encode_sequence_ex.c ├── der_encode_sequence_multi.c ├── der_encode_subject_public_key_info.c ├── der_length_sequence.c ├── der_sequence_free.c ├── sub.mk ├── set ├── der_encode_set.c ├── der_encode_setof.c ├── sub.mk ├── short_integer ├── der_decode_short_integer.c ├── der_encode_short_integer.c ├── der_length_short_integer.c ├── sub.mk ├── sub.mk ├── teletex_string ├── der_decode_teletex_string.c ├── der_length_teletex_string.c ├── sub.mk ├── utctime ├── der_decode_utctime.c ├── der_encode_utctime.c ├── der_length_utctime.c ├── sub.mk ├── utf8 ├── der_decode_utf8_string.c ├── der_encode_utf8_string.c ├── der_length_utf8_string.c ├── sub.mk ├── sub.mk ├── dh ├── dh.c ├── sub.mk ├── dsa ├── dsa_decrypt_key.c ├── dsa_encrypt_key.c ├── dsa_export.c ├── dsa_free.c ├── dsa_import.c ├── dsa_make_key.c ├── dsa_shared_secret.c ├── dsa_sign_hash.c ├── dsa_verify_hash.c ├── dsa_verify_key.c ├── sub.mk ├── ecc ├── ecc.c ├── ecc_ansi_x963_export.c ├── ecc_ansi_x963_import.c ├── ecc_decrypt_key.c ├── ecc_encrypt_key.c ├── ecc_export.c ├── ecc_free.c ├── ecc_get_size.c ├── ecc_import.c ├── ecc_make_key.c ├── ecc_shared_secret.c ├── ecc_sign_hash.c ├── ecc_sizes.c ├── ecc_verify_hash.c ├── ltc_ecc_is_valid_idx.c ├── ltc_ecc_map.c ├── ltc_ecc_mul2add.c ├── ltc_ecc_mulmod.c ├── ltc_ecc_mulmod_timing.c ├── ltc_ecc_points.c ├── ltc_ecc_projective_add_point.c ├── ltc_ecc_projective_dbl_point.c ├── sub.mk ├── pkcs1 ├── pkcs_1_i2osp.c ├── pkcs_1_mgf1.c ├── pkcs_1_oaep_decode.c ├── pkcs_1_oaep_encode.c ├── pkcs_1_os2ip.c ├── pkcs_1_pss_decode.c ├── pkcs_1_pss_encode.c ├── pkcs_1_v1_5_decode.c ├── pkcs_1_v1_5_encode.c ├── sub.mk ├── rsa ├── rsa_decrypt_key.c ├── rsa_encrypt_key.c ├── rsa_export.c ├── rsa_exptmod.c ├── rsa_free.c ├── rsa_import.c ├── rsa_make_key.c ├── rsa_sign_hash.c ├── rsa_verify_hash.c ├── sub.mk ├── sub.mk ├── prngs ├── fortuna.c ├── rc4.c ├── rng_get_bytes.c ├── rng_make_prng.c ├── sprng.c ├── sub.mk ├── yarrow.c ├── sub.mk ├── tee_ltc_provider.c ├── sub.mk ├── zlib ├── adler32.c ├── gzguts.h ├── inffast.c ├── inffast.h ├── inffixed.h ├── inflate.c ├── inflate.h ├── inftrees.c ├── inftrees.h ├── sub.mk ├── zconf.h ├── zlib.h ├── zutil.c ├── zutil.h ├── sub.mk ├── tee ├── fs_dirfile.c ├── fs_htree.c ├── sub.mk ├── tadb.c ├── tee_cryp_concat_kdf.c ├── tee_cryp_hkdf.c ├── tee_cryp_pbkdf2.c ├── tee_cryp_utl.c ├── tee_fs_key_manager.c ├── tee_fs_rpc.c ├── tee_fs_rpc_cache.c ├── tee_obj.c ├── tee_pobj.c ├── tee_ree_fs.c ├── tee_rpmb_fs.c ├── tee_svc.c ├── tee_svc_cryp.c ├── tee_svc_storage.c ├── tee_time_generic.c ├── uuid.c ├── documentation ├── abort_dumps.rst ├── benchmark.md ├── build_system.md ├── copyright_and_license_headers.rst ├── crypto.md ├── dt-bindings ├── README.txt ├── extensions ├── crypto_concat_kdf.md ├── crypto_hkdf.md ├── crypto_pbkdf2.md ├── crypto_rsassa_pkcs1_v1_5.md ├── extensions.md ├── file_structure.md ├── github.md ├── globalplatform_api.md ├── gprof.md ├── images ├── benchmark ├── benchmark_design.png ├── benchmark_design.xml ├── benchmark_sequence.msc ├── benchmark_sequence.png ├── green.svg ├── interrupt_handling ├── Makefile ├── fiq.msc ├── fiq.png ├── irq.msc ├── irq.png ├── irq_fiq.msc ├── irq_fiq.png ├── tee_invoke.msc ├── tee_invoke.png ├── orange.svg ├── red.svg ├── secure_storage ├── block_data_encryption.odg ├── block_data_encryption.png ├── meta_data_encryption.odg ├── meta_data_encryption.png ├── secure_storage_system_architecture.odg ├── secure_storage_system_architecture.png ├── xlat_table.dot ├── xlat_table.png ├── interrupt_handling.md ├── optee_design.md ├── optee_with_auth_framework.md ├── porting_guidelines.md ├── secure_storage.md ├── secure_storage_rpmb.md ├── keys ├── default_ta.pem ├── lib ├── libmbedtls ├── include ├── mbedtls_config_kernel.h ├── mbedtls_config_uta.h ├── mbedtls ├── ChangeLog ├── LICENSE ├── apache-2.0.txt ├── include ├── mbedtls ├── aes.h ├── aesni.h ├── arc4.h ├── asn1.h ├── asn1write.h ├── base64.h ├── bignum.h ├── blowfish.h ├── bn_mul.h ├── camellia.h ├── ccm.h ├── certs.h ├── check_config.h ├── cipher.h ├── cipher_internal.h ├── cmac.h ├── compat-1.3.h ├── config.h ├── ctr_drbg.h ├── debug.h ├── des.h ├── dhm.h ├── ecdh.h ├── ecdsa.h ├── ecjpake.h ├── ecp.h ├── ecp_internal.h ├── entropy.h ├── entropy_poll.h ├── error.h ├── gcm.h ├── havege.h ├── hmac_drbg.h ├── md.h ├── md2.h ├── md4.h ├── md5.h ├── md_internal.h ├── memory_buffer_alloc.h ├── net.h ├── net_sockets.h ├── oid.h ├── padlock.h ├── pem.h ├── pk.h ├── pk_internal.h ├── pkcs11.h ├── pkcs12.h ├── pkcs5.h ├── platform.h ├── platform_time.h ├── ripemd160.h ├── rsa.h ├── sha1.h ├── sha256.h ├── sha512.h ├── ssl.h ├── ssl_cache.h ├── ssl_ciphersuites.h ├── ssl_cookie.h ├── ssl_internal.h ├── ssl_ticket.h ├── threading.h ├── timing.h ├── version.h ├── x509.h ├── x509_crl.h ├── x509_crt.h ├── x509_csr.h ├── xtea.h ├── library ├── aes.c ├── aesni.c ├── arc4.c ├── asn1parse.c ├── asn1write.c ├── base64.c ├── bignum.c ├── blowfish.c ├── camellia.c ├── ccm.c ├── certs.c ├── cipher.c ├── cipher_wrap.c ├── cmac.c ├── ctr_drbg.c ├── debug.c ├── des.c ├── dhm.c ├── ecdh.c ├── ecdsa.c ├── ecjpake.c ├── ecp.c ├── ecp_curves.c ├── entropy.c ├── entropy_poll.c ├── error.c ├── gcm.c ├── havege.c ├── hmac_drbg.c ├── md.c ├── md2.c ├── md4.c ├── md5.c ├── md_wrap.c ├── memory_buffer_alloc.c ├── net_sockets.c ├── oid.c ├── padlock.c ├── pem.c ├── pk.c ├── pk_wrap.c ├── pkcs11.c ├── pkcs12.c ├── pkcs5.c ├── pkparse.c ├── pkwrite.c ├── platform.c ├── ripemd160.c ├── rsa.c ├── sha1.c ├── sha256.c ├── sha512.c ├── ssl_cache.c ├── ssl_ciphersuites.c ├── ssl_cli.c ├── ssl_cookie.c ├── ssl_srv.c ├── ssl_ticket.c ├── ssl_tls.c ├── threading.c ├── timing.c ├── version.c ├── version_features.c ├── x509.c ├── x509_create.c ├── x509_crl.c ├── x509_crt.c ├── x509_csr.c ├── x509write_crt.c ├── x509write_csr.c ├── xtea.c ├── sub.mk ├── libmpa ├── arch ├── arm ├── mpa_a32.S ├── sub.mk ├── include ├── mpa.h ├── mpalib.h ├── mpalib_config.h ├── mpa_addsub.c ├── mpa_cmp.c ├── mpa_conv.c ├── mpa_div.c ├── mpa_expmod.c ├── mpa_gcd.c ├── mpa_init.c ├── mpa_io.c ├── mpa_mem_static.c ├── mpa_misc.c ├── mpa_modulus.c ├── mpa_montgomery.c ├── mpa_mul.c ├── mpa_primetable.h ├── mpa_primetest.c ├── mpa_random.c ├── mpa_shift.c ├── sub.mk ├── libutee ├── abort.c ├── arch ├── arm ├── gprof ├── gmon.h ├── gmon_out.h ├── gprof.c ├── gprof_a32.S ├── gprof_a64.S ├── gprof_pta.c ├── gprof_pta.h ├── sub.mk ├── sub.mk ├── user_ta_entry.c ├── utee_misc.c ├── utee_syscalls_a32.S ├── utee_syscalls_a64.S ├── utee_syscalls_asm.S ├── assert.c ├── base64.c ├── base64.h ├── errno.c ├── include ├── __tee_ipsocket.h ├── __tee_isocket_defines.h ├── __tee_tcpsocket_defines.h ├── __tee_tcpsocket_defines_extensions.h ├── __tee_udpsocket_defines.h ├── pta_benchmark.h ├── pta_device.h ├── pta_gprof.h ├── pta_invoke_tests.h ├── pta_secstor_ta_mgmt.h ├── pta_socket.h ├── pta_system.h ├── sdp_pta.h ├── tee_api.h ├── tee_api_defines.h ├── tee_api_defines_extensions.h ├── tee_api_types.h ├── tee_arith_internal.h ├── tee_internal_api.h ├── tee_internal_api_extensions.h ├── tee_isocket.h ├── tee_syscall_numbers.h ├── tee_ta_api.h ├── tee_tcpsocket.h ├── tee_udpsocket.h ├── user_ta_header.h ├── utee_defines.h ├── utee_syscalls.h ├── utee_types.h ├── sub.mk ├── tee_api.c ├── tee_api_arith_mpa.c ├── tee_api_arith_mpi.c ├── tee_api_objects.c ├── tee_api_operations.c ├── tee_api_panic.c ├── tee_api_private.h ├── tee_api_property.c ├── tee_socket_private.h ├── tee_socket_pta.c ├── tee_tcpudp_socket.c ├── trace_ext.c ├── utee_misc.h ├── libutils ├── ext ├── arch ├── arm ├── aeabi_unwind.c ├── atomic_a32.S ├── atomic_a64.S ├── sub.mk ├── buf_compare_ct.c ├── include ├── asm.S ├── atomic.h ├── bitstring.h ├── compiler.h ├── mempool.h ├── printk.h ├── speculation_barrier.h ├── string_ext.h ├── trace.h ├── trace_levels.h ├── types_ext.h ├── util.h ├── mempool.c ├── snprintk.c ├── strlcat.c ├── strlcpy.c ├── sub.mk ├── trace.c ├── isoc ├── arch ├── arm ├── arm32_aeabi_divmod.c ├── arm32_aeabi_divmod_a32.S ├── arm32_aeabi_ldivmod.c ├── arm32_aeabi_ldivmod_a32.S ├── arm32_aeabi_shift.c ├── arm32_aeabi_softfloat.c ├── setjmp_a32.S ├── setjmp_a64.S ├── softfloat ├── COPYING.txt ├── README.html ├── README.txt ├── arm32_include ├── platform.h ├── build ├── Linux-386-GCC ├── Makefile ├── platform.h ├── Linux-386-SSE2-GCC ├── Makefile ├── platform.h ├── Linux-x86_64-GCC ├── Makefile ├── platform.h ├── Win32-MinGW ├── Makefile ├── platform.h ├── Win32-SSE2-MinGW ├── Makefile ├── platform.h ├── Win64-MinGW-w64 ├── Makefile ├── platform.h ├── template-FAST_INT64 ├── Makefile ├── platform.h ├── template-not-FAST_INT64 ├── Makefile ├── platform.h ├── doc ├── SoftFloat-history.html ├── SoftFloat-source.html ├── SoftFloat.html ├── source ├── 8086-SSE ├── extF80M_isSignalingNaN.c ├── f128M_isSignalingNaN.c ├── s_commonNaNToExtF80M.c ├── s_commonNaNToExtF80UI.c ├── s_commonNaNToF128M.c ├── s_commonNaNToF128UI.c ├── s_commonNaNToF32UI.c ├── s_commonNaNToF64UI.c ├── s_extF80MToCommonNaN.c ├── s_extF80UIToCommonNaN.c ├── s_f128MToCommonNaN.c ├── s_f128UIToCommonNaN.c ├── s_f32UIToCommonNaN.c ├── s_f64UIToCommonNaN.c ├── s_propagateNaNExtF80M.c ├── s_propagateNaNExtF80UI.c ├── s_propagateNaNF128M.c ├── s_propagateNaNF128UI.c ├── s_propagateNaNF32UI.c ├── s_propagateNaNF64UI.c ├── softfloat_raiseFlags.c ├── specialize.h ├── sub.mk ├── 8086 ├── extF80M_isSignalingNaN.c ├── f128M_isSignalingNaN.c ├── s_commonNaNToExtF80M.c ├── s_commonNaNToExtF80UI.c ├── s_commonNaNToF128M.c ├── s_commonNaNToF128UI.c ├── s_commonNaNToF32UI.c ├── s_commonNaNToF64UI.c ├── s_extF80MToCommonNaN.c ├── s_extF80UIToCommonNaN.c ├── s_f128MToCommonNaN.c ├── s_f128UIToCommonNaN.c ├── s_f32UIToCommonNaN.c ├── s_f64UIToCommonNaN.c ├── s_propagateNaNExtF80M.c ├── s_propagateNaNExtF80UI.c ├── s_propagateNaNF128M.c ├── s_propagateNaNF128UI.c ├── s_propagateNaNF32UI.c ├── s_propagateNaNF64UI.c ├── softfloat_raiseFlags.c ├── specialize.h ├── extF80M_add.c ├── extF80M_div.c ├── extF80M_eq.c ├── extF80M_eq_signaling.c ├── extF80M_le.c ├── extF80M_le_quiet.c ├── extF80M_lt.c ├── extF80M_lt_quiet.c ├── extF80M_mul.c ├── extF80M_rem.c ├── extF80M_roundToInt.c ├── extF80M_sqrt.c ├── extF80M_sub.c ├── extF80M_to_f128M.c ├── extF80M_to_f32.c ├── extF80M_to_f64.c ├── extF80M_to_i32.c ├── extF80M_to_i32_r_minMag.c ├── extF80M_to_i64.c ├── extF80M_to_i64_r_minMag.c ├── extF80M_to_ui32.c ├── extF80M_to_ui32_r_minMag.c ├── extF80M_to_ui64.c ├── extF80M_to_ui64_r_minMag.c ├── extF80_add.c ├── extF80_div.c ├── extF80_eq.c ├── extF80_eq_signaling.c ├── extF80_isSignalingNaN.c ├── extF80_le.c ├── extF80_le_quiet.c ├── extF80_lt.c ├── extF80_lt_quiet.c ├── extF80_mul.c ├── extF80_rem.c ├── extF80_roundToInt.c ├── extF80_sqrt.c ├── extF80_sub.c ├── extF80_to_f128.c ├── extF80_to_f32.c ├── extF80_to_f64.c ├── extF80_to_i32.c ├── extF80_to_i32_r_minMag.c ├── extF80_to_i64.c ├── extF80_to_i64_r_minMag.c ├── extF80_to_ui32.c ├── extF80_to_ui32_r_minMag.c ├── extF80_to_ui64.c ├── extF80_to_ui64_r_minMag.c ├── f128M_add.c ├── f128M_div.c ├── f128M_eq.c ├── f128M_eq_signaling.c ├── f128M_le.c ├── f128M_le_quiet.c ├── f128M_lt.c ├── f128M_lt_quiet.c ├── f128M_mul.c ├── f128M_mulAdd.c ├── f128M_rem.c ├── f128M_roundToInt.c ├── f128M_sqrt.c ├── f128M_sub.c ├── f128M_to_extF80M.c ├── f128M_to_f32.c ├── f128M_to_f64.c ├── f128M_to_i32.c ├── f128M_to_i32_r_minMag.c ├── f128M_to_i64.c ├── f128M_to_i64_r_minMag.c ├── f128M_to_ui32.c ├── f128M_to_ui32_r_minMag.c ├── f128M_to_ui64.c ├── f128M_to_ui64_r_minMag.c ├── f128_add.c ├── f128_div.c ├── f128_eq.c ├── f128_eq_signaling.c ├── f128_isSignalingNaN.c ├── f128_le.c ├── f128_le_quiet.c ├── f128_lt.c ├── f128_lt_quiet.c ├── f128_mul.c ├── f128_mulAdd.c ├── f128_rem.c ├── f128_roundToInt.c ├── f128_sqrt.c ├── f128_sub.c ├── f128_to_extF80.c ├── f128_to_f32.c ├── f128_to_f64.c ├── f128_to_i32.c ├── f128_to_i32_r_minMag.c ├── f128_to_i64.c ├── f128_to_i64_r_minMag.c ├── f128_to_ui32.c ├── f128_to_ui32_r_minMag.c ├── f128_to_ui64.c ├── f128_to_ui64_r_minMag.c ├── f32_add.c ├── f32_div.c ├── f32_eq.c ├── f32_eq_signaling.c ├── f32_isSignalingNaN.c ├── f32_le.c ├── f32_le_quiet.c ├── f32_lt.c ├── f32_lt_quiet.c ├── f32_mul.c ├── f32_mulAdd.c ├── f32_rem.c ├── f32_roundToInt.c ├── f32_sqrt.c ├── f32_sub.c ├── f32_to_extF80.c ├── f32_to_extF80M.c ├── f32_to_f128.c ├── f32_to_f128M.c ├── f32_to_f64.c ├── f32_to_i32.c ├── f32_to_i32_r_minMag.c ├── f32_to_i64.c ├── f32_to_i64_r_minMag.c ├── f32_to_ui32.c ├── f32_to_ui32_r_minMag.c ├── f32_to_ui64.c ├── f32_to_ui64_r_minMag.c ├── f64_add.c ├── f64_div.c ├── f64_eq.c ├── f64_eq_signaling.c ├── f64_isSignalingNaN.c ├── f64_le.c ├── f64_le_quiet.c ├── f64_lt.c ├── f64_lt_quiet.c ├── f64_mul.c ├── f64_mulAdd.c ├── f64_rem.c ├── f64_roundToInt.c ├── f64_sqrt.c ├── f64_sub.c ├── f64_to_extF80.c ├── f64_to_extF80M.c ├── f64_to_f128.c ├── f64_to_f128M.c ├── f64_to_f32.c ├── f64_to_i32.c ├── f64_to_i32_r_minMag.c ├── f64_to_i64.c ├── f64_to_i64_r_minMag.c ├── f64_to_ui32.c ├── f64_to_ui32_r_minMag.c ├── f64_to_ui64.c ├── f64_to_ui64_r_minMag.c ├── i32_to_extF80.c ├── i32_to_extF80M.c ├── i32_to_f128.c ├── i32_to_f128M.c ├── i32_to_f32.c ├── i32_to_f64.c ├── i64_to_extF80.c ├── i64_to_extF80M.c ├── i64_to_f128.c ├── i64_to_f128M.c ├── i64_to_f32.c ├── i64_to_f64.c ├── include ├── internals.h ├── primitiveTypes.h ├── primitives.h ├── softfloat.h ├── softfloat_types.h ├── s_add128.c ├── s_add256M.c ├── s_addCarryM.c ├── s_addComplCarryM.c ├── s_addExtF80M.c ├── s_addF128M.c ├── s_addM.c ├── s_addMagsExtF80.c ├── s_addMagsF128.c ├── s_addMagsF32.c ├── s_addMagsF64.c ├── s_approxRecip32_1.c ├── s_approxRecipSqrt32_1.c ├── s_compare128M.c ├── s_compare96M.c ├── s_compareNonnormExtF80M.c ├── s_countLeadingZeros32.c ├── s_countLeadingZeros64.c ├── s_countLeadingZeros8.c ├── s_eq128.c ├── s_invalidExtF80M.c ├── s_invalidF128M.c ├── s_isNaNF128M.c ├── s_le128.c ├── s_lt128.c ├── s_mul128By32.c ├── s_mul128MTo256M.c ├── s_mul128To256M.c ├── s_mul64ByShifted32To128.c ├── s_mul64To128.c ├── s_mul64To128M.c ├── s_mulAddF128.c ├── s_mulAddF128M.c ├── s_mulAddF32.c ├── s_mulAddF64.c ├── s_negXM.c ├── s_normExtF80SigM.c ├── s_normRoundPackMToExtF80M.c ├── s_normRoundPackMToF128M.c ├── s_normRoundPackToExtF80.c ├── s_normRoundPackToF128.c ├── s_normRoundPackToF32.c ├── s_normRoundPackToF64.c ├── s_normSubnormalExtF80Sig.c ├── s_normSubnormalF128Sig.c ├── s_normSubnormalF128SigM.c ├── s_normSubnormalF32Sig.c ├── s_normSubnormalF64Sig.c ├── s_remStepMBy32.c ├── s_roundPackMToExtF80M.c ├── s_roundPackMToF128M.c ├── s_roundPackMToI64.c ├── s_roundPackMToUI64.c ├── s_roundPackToExtF80.c ├── s_roundPackToF128.c ├── s_roundPackToF32.c ├── s_roundPackToF64.c ├── s_roundPackToI32.c ├── s_roundPackToI64.c ├── s_roundPackToUI32.c ├── s_roundPackToUI64.c ├── s_shiftLeftM.c ├── s_shiftNormSigF128M.c ├── s_shiftRightJam128.c ├── s_shiftRightJam128Extra.c ├── s_shiftRightJam256M.c ├── s_shiftRightJam32.c ├── s_shiftRightJam64.c ├── s_shiftRightJam64Extra.c ├── s_shiftRightJamM.c ├── s_shiftRightM.c ├── s_shortShiftLeft128.c ├── s_shortShiftLeft64To96M.c ├── s_shortShiftLeftM.c ├── s_shortShiftRight128.c ├── s_shortShiftRightExtendM.c ├── s_shortShiftRightJam128.c ├── s_shortShiftRightJam128Extra.c ├── s_shortShiftRightJam64.c ├── s_shortShiftRightJam64Extra.c ├── s_shortShiftRightJamM.c ├── s_shortShiftRightM.c ├── s_sub128.c ├── s_sub1XM.c ├── s_sub256M.c ├── s_subM.c ├── s_subMagsExtF80.c ├── s_subMagsF128.c ├── s_subMagsF32.c ├── s_subMagsF64.c ├── s_tryPropagateNaNExtF80M.c ├── s_tryPropagateNaNF128M.c ├── softfloat_state.c ├── sub.mk ├── ui32_to_extF80.c ├── ui32_to_extF80M.c ├── ui32_to_f128.c ├── ui32_to_f128M.c ├── ui32_to_f32.c ├── ui32_to_f64.c ├── ui64_to_extF80.c ├── ui64_to_extF80M.c ├── ui64_to_f128.c ├── ui64_to_f128M.c ├── ui64_to_f32.c ├── ui64_to_f64.c ├── sub.mk ├── sub.mk ├── bget.c ├── bget.doc ├── bget.h ├── bget_malloc.c ├── include ├── assert.h ├── ctype.h ├── inttypes.h ├── limits.h ├── malloc.h ├── memory.h ├── setjmp.h ├── signal.h ├── stdint.h ├── stdio.h ├── stdlib.h ├── string.h ├── sys ├── cdefs.h ├── queue.h ├── types.h ├── time.h ├── unistd.h ├── wchar.h ├── isalpha.c ├── isdigit.c ├── isspace.c ├── isupper.c ├── isxdigit.c ├── malloc_lock.c ├── newlib ├── _ansi.h ├── abs.c ├── memchr.c ├── memcmp.c ├── memcpy.c ├── memmove.c ├── memset.c ├── str-two-way.h ├── strchr.c ├── strcmp.c ├── strcpy.c ├── strlen.c ├── strncmp.c ├── strncpy.c ├── strnlen.c ├── strrchr.c ├── strstr.c ├── strtoul.c ├── sub.mk ├── qsort.c ├── snprintf.c ├── stack_check.c ├── strdup.c ├── strndup.c ├── sub.mk ├── tolower.c ├── sub.mk ├── mk ├── aosp_optee.mk ├── checkconf.mk ├── cleandirs.mk ├── cleanvars.mk ├── compile.mk ├── config.mk ├── gcc.mk ├── lib.mk ├── subdir.mk ├── readme.txt ├── scripts ├── arm32_sysreg.py ├── bin_to_c.py ├── checkpatch.sh ├── checkpatch_inc.sh ├── gen_hashed_bin.py ├── gen_ld_sects.py ├── mem_usage.py ├── pem_to_pub_c.py ├── sign.py ├── symbolize.py ├── ta_bin_to_c.py ├── tee_bin_parser.py ├── ta ├── arch ├── arm ├── link.mk ├── link_shlib.mk ├── ta.ld.S ├── user_ta_header.c ├── avb ├── Makefile ├── entry.c ├── include ├── ta_avb.h ├── sub.mk ├── user_ta.mk ├── user_ta_header_defines.h ├── mk ├── build-user-ta.mk ├── ta_dev_kit.mk ├── ta.mk ├── typedefs.checkpatch