xref: /rk3399_rockchip-uboot/include/optee_include/OpteeClientInterface.h (revision c95f09d3e8643ebcae3e4e2b9beccfa10acd1c0c)
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_set_fw_encrypt_key_mask(enum RK_FW_KEYID key_id);
135 uint32_t trusty_fw_encrypt_key_is_written(enum RK_FW_KEYID key_id, uint8_t *value);
136 uint32_t trusty_write_fw_encrypt_key(enum RK_FW_KEYID key_id,
137 				     uint8_t *byte_buf, uint32_t byte_len);
138 uint32_t trusty_fw_key_cipher(enum RK_FW_KEYID key_id, rk_cipher_config *config,
139 			      uint32_t src_phys_addr, uint32_t dst_phys_addr,
140 			      uint32_t len);
141 uint32_t trusty_verify_config_ip(char *licence_str);
142 
143 #endif
144