1 /* 2 * Copyright 2017, Rockchip Electronics Co., Ltd 3 * hisping lin, <hisping.lin@rock-chips.com> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 #ifndef _OPTEECLIENTTEST_H_ 8 #define _OPTEECLIENTTEST_H_ 9 10 #include <optee_include/tee_client_api.h> 11 12 enum RK_OEM_OTP_KEYID { 13 RK_OEM_OTP_KEY0 = 0, 14 RK_OEM_OTP_KEY1 = 1, 15 RK_OEM_OTP_KEY2 = 2, 16 RK_OEM_OTP_KEY3 = 3, 17 RK_OEM_OTP_KEY_FW = 10, //keyid of fw_encryption_key 18 RK_OEM_OTP_KEYMAX 19 }; 20 21 enum RK_HDCP_KEYID { 22 RK_HDCP_KEY0 = 0, 23 RK_HDCP_KEY1 = 1, 24 RK_HDCP_KEYMAX 25 }; 26 27 enum RK_ESCK_KEYID { 28 RK_ESCK_KEY0 = 0, 29 RK_ESCK_KEYMAX 30 }; 31 32 enum RK_FW_KEYID { 33 RK_FW_KEY0 = 0, 34 RK_FW_KEYMAX 35 }; 36 37 /* Crypto mode */ 38 enum RK_CIPIHER_MODE { 39 RK_CIPHER_MODE_ECB = 0, 40 RK_CIPHER_MODE_CBC = 1, 41 RK_CIPHER_MODE_CTS = 2, 42 RK_CIPHER_MODE_CTR = 3, 43 RK_CIPHER_MODE_CFB = 4, 44 RK_CIPHER_MODE_OFB = 5, 45 RK_CIPHER_MODE_XTS = 6, 46 RK_CIPHER_MODE_CCM = 7, 47 RK_CIPHER_MODE_GCM = 8, 48 RK_CIPHER_MODE_CMAC = 9, 49 RK_CIPHER_MODE_CBC_MAC = 10, 50 RK_CIPHER_MODE_MAX 51 }; 52 53 /* Crypto algorithm */ 54 enum RK_CRYPTO_ALGO { 55 RK_ALGO_AES = 1, 56 RK_ALGO_DES, 57 RK_ALGO_TDES, 58 RK_ALGO_SM4, 59 RK_ALGO_ALGO_MAX 60 }; 61 62 typedef struct { 63 uint32_t algo; 64 uint32_t mode; 65 uint32_t operation; 66 uint8_t key[64]; 67 uint32_t key_len; 68 uint8_t iv[16]; 69 void *reserved; 70 } rk_cipher_config; 71 72 /* Crypto operation */ 73 #define RK_MODE_ENCRYPT 1 74 #define RK_MODE_DECRYPT 0 75 76 #define AES_BLOCK_SIZE 16 77 #define SM4_BLOCK_SIZE 16 78 #define RK_CRYPTO_MAX_DATA_LEN (1 * 1024 * 1024) 79 80 #define ATAP_HEX_UUID_LEN 32 81 #define ATTEST_DH_SIZE 8 82 #define ATTEST_UUID_SIZE (ATAP_HEX_UUID_LEN+1) 83 #define ATTEST_CA_OUT_SIZE 256 84 85 void optee_client_init(void); 86 uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value); 87 uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value); 88 uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size); 89 uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size); 90 uint32_t trusty_read_permanent_attributes_cer(uint8_t *attributes, 91 uint32_t size); 92 uint32_t trusty_write_permanent_attributes_cer(uint8_t *attributes, 93 uint32_t size); 94 uint32_t trusty_read_lock_state(uint8_t *lock_state); 95 uint32_t trusty_write_lock_state(uint8_t lock_state); 96 uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state); 97 uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state); 98 99 uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length); 100 uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length); 101 uint32_t trusty_notify_optee_uboot_end(void); 102 uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length); 103 uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length); 104 uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag); 105 uint32_t trusty_write_ta_encryption_key(uint32_t *buf, uint32_t length); 106 uint32_t trusty_ta_encryption_key_is_written(uint8_t *value); 107 uint32_t trusty_write_oem_encrypt_data(uint32_t *buf, uint32_t length); 108 uint32_t trusty_oem_encrypt_data_is_written(uint8_t *value); 109 uint32_t trusty_check_security_level_flag(uint8_t flag); 110 uint32_t trusty_write_oem_huk(uint32_t *buf, uint32_t length); 111 uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes); 112 uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes); 113 uint32_t trusty_write_oem_ns_otp(uint32_t byte_off, uint8_t *byte_buf, uint32_t byte_len); 114 uint32_t trusty_read_oem_ns_otp(uint32_t byte_off, uint8_t *byte_buf, uint32_t byte_len); 115 uint32_t trusty_write_oem_otp_key(enum RK_OEM_OTP_KEYID key_id, 116 uint8_t *byte_buf, uint32_t byte_len); 117 uint32_t trusty_oem_otp_key_is_written(enum RK_OEM_OTP_KEYID key_id, uint8_t *value); 118 uint32_t trusty_set_oem_hr_otp_read_lock(enum RK_OEM_OTP_KEYID key_id); 119 uint32_t trusty_oem_otp_key_cipher(enum RK_OEM_OTP_KEYID key_id, rk_cipher_config *config, 120 uint32_t src_phys_addr, uint32_t dst_phys_addr, 121 uint32_t len); 122 uint32_t trusty_oem_user_ta_transfer(void); 123 uint32_t trusty_oem_user_ta_storage(void); 124 uint32_t trusty_write_oem_hdcp_key(enum RK_HDCP_KEYID key_id, 125 uint8_t *byte_buf, uint32_t byte_len); 126 uint32_t trusty_oem_hdcp_key_is_written(enum RK_HDCP_KEYID key_id, uint8_t *value); 127 uint32_t trusty_set_oem_hdcp_key_mask(enum RK_HDCP_KEYID key_id); 128 uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size); 129 uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size); 130 uint32_t trusty_attest_get_ca 131 (uint8_t *operation_start, uint32_t *operation_size, 132 uint8_t *out, uint32_t *out_len); 133 uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size); 134 uint32_t trusty_fw_key_cipher(enum RK_FW_KEYID key_id, rk_cipher_config *config, 135 uint32_t src_phys_addr, uint32_t dst_phys_addr, 136 uint32_t len); 137 138 #endif 139