1ae8ec5e1SHisping Lin /* 2ae8ec5e1SHisping Lin * Copyright 2017, Rockchip Electronics Co., Ltd 3ae8ec5e1SHisping Lin * hisping lin, <hisping.lin@rock-chips.com> 4ae8ec5e1SHisping Lin * 5ae8ec5e1SHisping Lin * SPDX-License-Identifier: GPL-2.0+ 6ae8ec5e1SHisping Lin */ 7ae8ec5e1SHisping Lin #ifndef _OPTEECLIENTTEST_H_ 8ae8ec5e1SHisping Lin #define _OPTEECLIENTTEST_H_ 9ae8ec5e1SHisping Lin 1078ef5fbdSqiujian #include <optee_include/tee_client_api.h> 1178ef5fbdSqiujian 1290e849a0Sxb.wang enum RK_OEM_OTP_KEYID { 1390e849a0Sxb.wang RK_OEM_OTP_KEY0 = 0, 1490e849a0Sxb.wang RK_OEM_OTP_KEY1 = 1, 1590e849a0Sxb.wang RK_OEM_OTP_KEY2 = 2, 1690e849a0Sxb.wang RK_OEM_OTP_KEY3 = 3, 172f8c34bdSxb.wang RK_OEM_OTP_KEY_FW = 10, //keyid of fw_encryption_key 1890e849a0Sxb.wang RK_OEM_OTP_KEYMAX 19bb1ba6acSHisping Lin }; 20bb1ba6acSHisping Lin 21a828eba9SHisping Lin enum RK_HDCP_KEYID { 22a828eba9SHisping Lin RK_HDCP_KEY0 = 0, 23a828eba9SHisping Lin RK_HDCP_KEY1 = 1, 24a828eba9SHisping Lin RK_HDCP_KEYMAX 25a828eba9SHisping Lin }; 26a828eba9SHisping Lin 27ac6d8253SHisping Lin enum RK_ESCK_KEYID { 28ac6d8253SHisping Lin RK_ESCK_KEY0 = 0, 29ac6d8253SHisping Lin RK_ESCK_KEYMAX 30ac6d8253SHisping Lin }; 31ac6d8253SHisping Lin 3211b25801SHisping Lin enum RK_FW_KEYID { 3311b25801SHisping Lin RK_FW_KEY0 = 0, 3411b25801SHisping Lin RK_FW_KEYMAX 3511b25801SHisping Lin }; 3611b25801SHisping Lin 37fc3694d6Sxb.wang /* Crypto mode */ 38fc3694d6Sxb.wang enum RK_CIPIHER_MODE { 39fc3694d6Sxb.wang RK_CIPHER_MODE_ECB = 0, 40fc3694d6Sxb.wang RK_CIPHER_MODE_CBC = 1, 41fc3694d6Sxb.wang RK_CIPHER_MODE_CTS = 2, 42fc3694d6Sxb.wang RK_CIPHER_MODE_CTR = 3, 43fc3694d6Sxb.wang RK_CIPHER_MODE_CFB = 4, 44fc3694d6Sxb.wang RK_CIPHER_MODE_OFB = 5, 45fc3694d6Sxb.wang RK_CIPHER_MODE_XTS = 6, 46fc3694d6Sxb.wang RK_CIPHER_MODE_CCM = 7, 47fc3694d6Sxb.wang RK_CIPHER_MODE_GCM = 8, 48fc3694d6Sxb.wang RK_CIPHER_MODE_CMAC = 9, 49fc3694d6Sxb.wang RK_CIPHER_MODE_CBC_MAC = 10, 50fc3694d6Sxb.wang RK_CIPHER_MODE_MAX 51fc3694d6Sxb.wang }; 52fc3694d6Sxb.wang 53fc3694d6Sxb.wang /* Crypto algorithm */ 54fc3694d6Sxb.wang enum RK_CRYPTO_ALGO { 55fc3694d6Sxb.wang RK_ALGO_AES = 1, 56fc3694d6Sxb.wang RK_ALGO_DES, 57fc3694d6Sxb.wang RK_ALGO_TDES, 58fc3694d6Sxb.wang RK_ALGO_SM4, 59fc3694d6Sxb.wang RK_ALGO_ALGO_MAX 60fc3694d6Sxb.wang }; 61fc3694d6Sxb.wang 62fc3694d6Sxb.wang typedef struct { 63fc3694d6Sxb.wang uint32_t algo; 64fc3694d6Sxb.wang uint32_t mode; 65fc3694d6Sxb.wang uint32_t operation; 66fc3694d6Sxb.wang uint8_t key[64]; 67fc3694d6Sxb.wang uint32_t key_len; 68fc3694d6Sxb.wang uint8_t iv[16]; 69fc3694d6Sxb.wang void *reserved; 70fc3694d6Sxb.wang } rk_cipher_config; 71fc3694d6Sxb.wang 72fc3694d6Sxb.wang /* Crypto operation */ 73fc3694d6Sxb.wang #define RK_MODE_ENCRYPT 1 74fc3694d6Sxb.wang #define RK_MODE_DECRYPT 0 75fc3694d6Sxb.wang 76fc3694d6Sxb.wang #define AES_BLOCK_SIZE 16 77fc3694d6Sxb.wang #define SM4_BLOCK_SIZE 16 78fc3694d6Sxb.wang #define RK_CRYPTO_MAX_DATA_LEN (1 * 1024 * 1024) 79fc3694d6Sxb.wang 802e40c2c1SJason Zhu #define ATAP_HEX_UUID_LEN 32 812e40c2c1SJason Zhu #define ATTEST_DH_SIZE 8 822e40c2c1SJason Zhu #define ATTEST_UUID_SIZE (ATAP_HEX_UUID_LEN+1) 832e40c2c1SJason Zhu #define ATTEST_CA_OUT_SIZE 256 842e40c2c1SJason Zhu 8551ac7005SHisping Lin void optee_client_init(void); 86ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value); 87ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value); 88ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size); 89ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size); 90564654ebSJason Zhu uint32_t trusty_read_permanent_attributes_cer(uint8_t *attributes, 91564654ebSJason Zhu uint32_t size); 92564654ebSJason Zhu uint32_t trusty_write_permanent_attributes_cer(uint8_t *attributes, 93564654ebSJason Zhu uint32_t size); 94ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state); 95ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state); 96ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state); 97ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state); 9878ef5fbdSqiujian 996ef445a4SHisping Lin uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length); 1006ef445a4SHisping Lin uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length); 10116539616SHisping Lin uint32_t trusty_notify_optee_uboot_end(void); 1022cd27853SHisping Lin uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length); 1032cd27853SHisping Lin uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length); 104468df3b2SHisping Lin uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag); 1051ef63c75SHisping Lin uint32_t trusty_write_ta_encryption_key(uint32_t *buf, uint32_t length); 10610f41197SHisping Lin uint32_t trusty_ta_encryption_key_is_written(uint8_t *value); 1071ac64e8aSHisping Lin uint32_t trusty_write_oem_encrypt_data(uint32_t *buf, uint32_t length); 108fc383442SHisping Lin uint32_t trusty_oem_encrypt_data_is_written(uint8_t *value); 109fbf29bfbSHisping Lin uint32_t trusty_check_security_level_flag(uint8_t flag); 110f39d4289SHisping Lin uint32_t trusty_write_oem_huk(uint32_t *buf, uint32_t length); 111095e2a82SHisping Lin uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes); 112095e2a82SHisping Lin uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes); 113d5913350SHisping Lin uint32_t trusty_write_oem_ns_otp(uint32_t byte_off, uint8_t *byte_buf, uint32_t byte_len); 114d5913350SHisping Lin uint32_t trusty_read_oem_ns_otp(uint32_t byte_off, uint8_t *byte_buf, uint32_t byte_len); 11590e849a0Sxb.wang uint32_t trusty_write_oem_otp_key(enum RK_OEM_OTP_KEYID key_id, 116bb1ba6acSHisping Lin uint8_t *byte_buf, uint32_t byte_len); 1179deb34f6SHisping Lin uint32_t trusty_oem_otp_key_is_written(enum RK_OEM_OTP_KEYID key_id, uint8_t *value); 11890e849a0Sxb.wang uint32_t trusty_set_oem_hr_otp_read_lock(enum RK_OEM_OTP_KEYID key_id); 1192f8c34bdSxb.wang uint32_t trusty_oem_otp_key_cipher(enum RK_OEM_OTP_KEYID key_id, rk_cipher_config *config, 1202f8c34bdSxb.wang uint32_t src_phys_addr, uint32_t dst_phys_addr, 1212f8c34bdSxb.wang uint32_t len); 1224d4c5043SHisping Lin uint32_t trusty_oem_user_ta_transfer(void); 1234d4c5043SHisping Lin uint32_t trusty_oem_user_ta_storage(void); 124a828eba9SHisping Lin uint32_t trusty_write_oem_hdcp_key(enum RK_HDCP_KEYID key_id, 125a828eba9SHisping Lin uint8_t *byte_buf, uint32_t byte_len); 126e8bc2655SHisping Lin uint32_t trusty_oem_hdcp_key_is_written(enum RK_HDCP_KEYID key_id, uint8_t *value); 127bfd9cea4SHisping Lin uint32_t trusty_set_oem_hdcp_key_mask(enum RK_HDCP_KEYID key_id); 1284aa61755SAndy Ye uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size); 1294aa61755SAndy Ye uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size); 1304aa61755SAndy Ye uint32_t trusty_attest_get_ca 1314aa61755SAndy Ye (uint8_t *operation_start, uint32_t *operation_size, 1324aa61755SAndy Ye uint8_t *out, uint32_t *out_len); 1334aa61755SAndy Ye uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size); 134600d0405SJoseph Chen uint32_t trusty_set_fw_encrypt_key_mask(enum RK_FW_KEYID key_id); 135600d0405SJoseph Chen uint32_t trusty_fw_encrypt_key_is_written(enum RK_FW_KEYID key_id, uint8_t *value); 136600d0405SJoseph Chen uint32_t trusty_write_fw_encrypt_key(enum RK_FW_KEYID key_id, 137600d0405SJoseph Chen uint8_t *byte_buf, uint32_t byte_len); 138437ac8e2SLin Jinhan uint32_t trusty_fw_key_cipher(enum RK_FW_KEYID key_id, rk_cipher_config *config, 139437ac8e2SLin Jinhan uint32_t src_phys_addr, uint32_t dst_phys_addr, 140437ac8e2SLin Jinhan uint32_t len); 141*c95f09d3Sxb.wang uint32_t trusty_verify_config_ip(char *licence_str); 14278ef5fbdSqiujian 143ae8ec5e1SHisping Lin #endif 144