1 /** 2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 * 15 * Description: crypto symc struct header. \n 16 * 17 * History: \n 18 * 2023-03-22, Create file. \n 19 */ 20 #ifndef CRYPTO_SYMC_STRUCT_H 21 #define CRYPTO_SYMC_STRUCT_H 22 23 #include "crypto_common_struct.h" 24 25 /* Structure for SYMC Create. */ 26 typedef enum { 27 CRYPTO_SYMC_TYPE_NORMAL = 0x0, 28 CRYPTO_SYMC_TYPE_REG, 29 CRYPTO_SYMC_TYPE_MAX, 30 CRYPTO_SYMC_TYPE_INVALID = 0xffffffff, 31 } crypto_symc_type; 32 33 typedef enum { 34 CRYPTO_SYMC_ALG_TDES = 0x0, 35 CRYPTO_SYMC_ALG_AES = 0x1, 36 CRYPTO_SYMC_ALG_SM4 = 0x2, 37 CRYPTO_SYMC_ALG_LEA = 0x3, 38 CRYPTO_SYMC_ALG_DMA = 0x4, 39 CRYPTO_SYMC_ALG_MAX, 40 CRYPTO_SYMC_ALG_INVALID = 0xffffffff, 41 } crypto_symc_alg; 42 43 typedef enum { 44 CRYPTO_SYMC_WORK_MODE_ECB = 0x0, 45 CRYPTO_SYMC_WORK_MODE_CBC, 46 CRYPTO_SYMC_WORK_MODE_CTR, 47 CRYPTO_SYMC_WORK_MODE_OFB, 48 CRYPTO_SYMC_WORK_MODE_CFB, 49 CRYPTO_SYMC_WORK_MODE_CCM, 50 CRYPTO_SYMC_WORK_MODE_GCM, 51 CRYPTO_SYMC_WORK_MODE_CBC_MAC, 52 CRYPTO_SYMC_WORK_MODE_CMAC, 53 CRYPTO_SYMC_WORK_MODE_MAX, 54 CRYPTO_SYMC_WORK_MODE_INVALID = 0xffffffff, 55 } crypto_symc_work_mode; 56 57 typedef enum { 58 CRYPTO_SYMC_KEY_64BIT = 0x0, 59 CRYPTO_SYMC_KEY_128BIT = 0x1, 60 CRYPTO_SYMC_KEY_192BIT = 0x2, 61 CRYPTO_SYMC_KEY_256BIT = 0x3, 62 CRYPTO_SYMC_KEY_LENGTH_MAX, 63 CRYPTO_SYMC_KEY_LENGTH_INVALID = 0xffffffff, 64 } crypto_symc_key_length; 65 66 typedef enum { 67 CRYPTO_SYMC_KEY_EVEN = 0x0, 68 CRYPTO_SYMC_KEY_ODD = 0x1, 69 CRYPTO_SYMC_KEY_PARITY_MAX, 70 CRYPTO_SYMC_KEY_PARITY_INVALID = 0xffffffff, 71 } crypto_symc_key_parity; 72 73 typedef enum { 74 CRYPTO_SYMC_BIT_WIDTH_1BIT = 0x0, 75 CRYPTO_SYMC_BIT_WIDTH_8BIT = 0x1, 76 CRYPTO_SYMC_BIT_WIDTH_64BIT = 0x2, 77 CRYPTO_SYMC_BIT_WIDTH_128BIT = 0x3, 78 CRYPTO_SYMC_BIT_WIDTH_MAX, 79 CRYPTO_SYMC_BIT_WIDTH_INVALID = 0xffffffff, 80 } crypto_symc_bit_width; 81 82 typedef enum { 83 CRYPTO_SYMC_IV_DO_NOT_CHANGE = 0, 84 CRYPTO_SYMC_IV_CHANGE_ONE_PKG, 85 CRYPTO_SYMC_IV_CHANGE_ALL_PKG, 86 /* GCM. */ 87 CRYPTO_SYMC_GCM_IV_DO_NOT_CHANGE, 88 CRYPTO_SYMC_GCM_IV_CHANGE_START, 89 CRYPTO_SYMC_GCM_IV_CHANGE_UPDATE, 90 CRYPTO_SYMC_GCM_IV_CHANGE_FINISH, 91 /* CCM. */ 92 CRYPTO_SYMC_CCM_IV_DO_NOT_CHANGE, 93 CRYPTO_SYMC_CCM_IV_CHANGE_START, 94 CRYPTO_SYMC_CCM_IV_CHANGE_UPDATE, 95 CRYPTO_SYMC_CCM_IV_CHANGE_FINISH, 96 CRYPTO_SYMC_IV_CHANGE_MAX, 97 CRYPTO_SYMC_IV_CHANGE_INVALID = 0xffffffff, 98 } crypto_symc_iv_change_type; 99 100 typedef struct { 101 crypto_symc_alg symc_alg; 102 crypto_symc_work_mode work_mode; 103 crypto_symc_type symc_type; 104 td_bool is_long_term; 105 } crypto_symc_attr; 106 107 typedef struct { 108 crypto_buf_attr buf_attr; 109 td_u32 length; 110 } crypto_symc_pack; 111 112 typedef struct { 113 td_u32 clear_header_len; 114 td_u32 payload_len; 115 td_u32 payload_pattern_encrypt_len; 116 td_u32 payload_pattern_clear_len; 117 td_u32 payload_pattern_offset_len; 118 td_bool iv_change; 119 td_u32 iv[CRYPTO_AES_IV_SIZE_IN_WORD]; 120 } crypto_symc_cenc_subsample; 121 122 typedef struct { 123 td_bool use_odd_key; 124 td_u32 first_encrypt_offset; 125 crypto_symc_cenc_subsample *subsample; 126 td_u32 subsample_num; 127 crypto_symc_alg alg; 128 crypto_symc_work_mode work_mode; 129 td_u32 iv[CRYPTO_AES_IV_SIZE_IN_WORD]; 130 } crypto_symc_cenc_param; 131 132 typedef struct { 133 crypto_buf_attr aad_buf; 134 td_u32 aad_len; /* Addition Data Length In Bytes. */ 135 td_u32 data_len; /* Crypto Data Length In Bytes. */ 136 td_u32 tag_len; /* Tag Length In Bytes. */ 137 } crypto_symc_config_aes_ccm_gcm; 138 139 typedef struct { 140 crypto_symc_alg symc_alg; 141 crypto_symc_work_mode work_mode; 142 crypto_symc_key_length symc_key_length; 143 crypto_symc_key_parity key_parity; 144 crypto_symc_bit_width symc_bit_width; 145 crypto_symc_iv_change_type iv_change_flag; 146 td_u8 iv[CRYPTO_IV_LEN_IN_BYTES]; 147 td_u32 iv_length; 148 td_void *param; 149 } crypto_symc_ctrl_t; 150 151 typedef struct { 152 td_u32 chn_id; /* Channel number */ 153 td_u32 open; /* Open or closed */ 154 td_u32 is_decrypt; /* Decrypt or encrypt */ 155 td_u32 alg; /* Algorithm */ 156 td_u32 mode; /* Work mode */ 157 td_u32 key_len; /* Key length */ 158 td_u32 key_source; /* Hard or soft key */ 159 td_u32 int_raw; /* Raw intertupt */ 160 td_u32 int_en; /* Enable interrupt */ 161 td_u32 int_status; /* Status interrupt */ 162 td_u32 owner; /* Process PID of owner */ 163 td_u32 is_secure; /* Secure channel or not */ 164 td_u32 smmu_enable; /* Smmu enable */ 165 td_u32 in_node_head; /* In node list head */ 166 td_u32 in_node_rptr; /* In node list read index */ 167 td_u32 in_node_wptr; /* In node list write index */ 168 td_u32 in_node_depth; /* In node depth */ 169 td_u32 out_node_head; /* Out node list head */ 170 td_u32 out_node_rptr; /* Out node list read index */ 171 td_u32 out_node_wptr; /* Out node list write index */ 172 td_u32 out_node_depth; /* Out node depth */ 173 td_u8 iv[CRYPTO_AES_IV_SIZE + CRYPTO_AES_IV_SIZE + 1]; /* Out iv */ 174 } crypto_symc_proc_info; 175 176 typedef struct { 177 td_u32 allow_reset; /* allow reset CPU or not */ 178 td_u32 sec_cpu; /* secure CPU or not */ 179 const char *name; /* interrupt name */ 180 td_u32 int_num; /* interrupt number */ 181 td_u32 int_en; /* interrupt enable */ 182 td_u32 smmu_base; /* smmu base address */ 183 td_u32 err_code; /* error code */ 184 } crypto_symc_module_info; 185 186 typedef struct { 187 td_bool is_long_term; 188 crypto_symc_alg symc_alg; 189 crypto_symc_work_mode work_mode; 190 crypto_symc_key_length symc_key_length; 191 td_u32 keyslot_chn; 192 } crypto_symc_mac_attr; 193 194 #endif 195