1 /* 2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef HW_SCE_AES_PRIVATE_H 8 #define HW_SCE_AES_PRIVATE_H 9 10 #include <stdint.h> 11 #include "bsp_api.h" 12 13 /* AES key lengths defined for SCE operations. */ 14 #define SIZE_AES_128BIT_KEYLEN_BITS (128) 15 #define SIZE_AES_128BIT_KEYLEN_BYTES ((SIZE_AES_128BIT_KEYLEN_BITS) / 8) 16 #define SIZE_AES_128BIT_KEYLEN_WORDS ((SIZE_AES_128BIT_KEYLEN_BITS) / 32) 17 18 #define SIZE_AES_192BIT_KEYLEN_BITS (192) 19 #define SIZE_AES_192BIT_KEYLEN_BYTES ((SIZE_AES_192BIT_KEYLEN_BITS) / 8) 20 #define SIZE_AES_192BIT_KEYLEN_WORDS ((SIZE_AES_192BIT_KEYLEN_BITS) / 32) 21 22 #define SIZE_AES_256BIT_KEYLEN_BITS (256) 23 #define SIZE_AES_256BIT_KEYLEN_BYTES ((SIZE_AES_256BIT_KEYLEN_BITS) / 8) 24 #define SIZE_AES_256BIT_KEYLEN_WORDS ((SIZE_AES_256BIT_KEYLEN_BITS) / 32) 25 26 #define SIZE_AES_BLOCK_BITS (128) 27 #define SIZE_AES_BLOCK_BYTES (128 / 8) 28 #define SIZE_AES_BLOCK_WORDS ((SIZE_AES_BLOCK_BITS) / 32) 29 30 #define SCE_AES_IN_DATA_CMD_ECB_ENCRYPTION (0x00000000U) 31 #define SCE_AES_IN_DATA_CMD_ECB_DECRYPTION (0x00000001U) 32 #define SCE_AES_IN_DATA_CMD_CBC_ENCRYPTION (0x00000002U) 33 #define SCE_AES_IN_DATA_CMD_CBC_DECRYPTION (0x00000003U) 34 #define SCE_AES_IN_DATA_CMD_CTR_ENCRYPTION_DECRYPTION (0x00000004U) 35 36 typedef struct st_sce_data 37 { 38 uint32_t length; 39 uint32_t * p_data; 40 } r_sce_data_t; 41 42 typedef fsp_err_t (* hw_sce_cmac_init_t)(const uint32_t InData_KeyType[], const uint32_t InData_KeyIndex[]); 43 typedef void (* hw_sce_cmac_update_t)(const uint32_t InData_Text[], const uint32_t MAX_CNT); 44 typedef fsp_err_t (* hw_sce_cmac_final_t)(const uint32_t InData_Cmd[], const uint32_t InData_Text[], 45 const uint32_t InData_DataT[], const uint32_t InData_DataTLen[], 46 uint32_t OutData_DataT[]); 47 48 typedef fsp_err_t (* hw_sce_aes_gcm_crypt_init_t)(uint32_t * InData_KeyType, uint32_t * InData_DataType, 49 uint32_t * InData_Cmd, uint32_t * InData_KeyIndex, 50 uint32_t * InData_IV, uint32_t * InData_SeqNum); 51 typedef void (* hw_sce_aes_gcm_update_aad_t)(const uint32_t * InData_DataA, const uint32_t MAX_CNT); 52 typedef void (* hw_sce_aes_gcm_crypt_update_transition_t)(void); 53 typedef void (* hw_sce_aes_gcm_crypt_update_t)(const uint32_t * InData_Text, uint32_t * OutData_Text, 54 const uint32_t MAX_CNT); 55 typedef fsp_err_t (* hw_sce_aes_gcm_encrypt_final_t)(const uint32_t * InData_Text, const uint32_t * InData_TextLen, 56 const uint32_t * InData_DataALen, uint32_t * OutData_Text, 57 uint32_t * OutData_DataT); 58 typedef fsp_err_t (* hw_sce_aes_gcm_decrypt_final_t)(const uint32_t * InData_Text, const uint32_t * InData_TextLen, 59 const uint32_t * InData_DataALen, const uint32_t * InData_DataT, 60 const uint32_t * InData_DataTLen, 61 uint32_t * OutData_Text); 62 typedef fsp_err_t (* hw_sce_aes_ccm_encrypt_init_t)(uint32_t * InData_KeyType, uint32_t * InData_DataType, 63 uint32_t * InData_Cmd, uint32_t * InData_TextLen, 64 uint32_t * InData_KeyIndex, uint32_t * InData_IV, 65 uint32_t * InData_Header, uint32_t * InData_SeqNum, 66 uint32_t Header_Len); 67 typedef fsp_err_t (* hw_sce_aes_ccm_decrypt_init_t)(uint32_t * InData_KeyType, uint32_t * InData_DataType, 68 uint32_t * InData_Cmd, uint32_t * InData_TextLen, 69 uint32_t * InData_MACLength, uint32_t * InData_KeyIndex, 70 uint32_t * InData_IV, uint32_t * InData_Header, 71 uint32_t * InData_SeqNum, uint32_t Header_Len); 72 73 typedef void (* hw_sce_aes_ccm_crypt_update_t)(const uint32_t * InData_Text, uint32_t * OutData_Text, 74 const uint32_t MAX_CNT); 75 typedef fsp_err_t (* hw_sce_aes_ccm_encrypt_final_t)(const uint32_t * InData_Text, const uint32_t * InData_TextLen, 76 uint32_t * OutData_Text, uint32_t * OutData_MAC); 77 typedef fsp_err_t (* hw_sce_aes_ccm_decrypt_final_t)(const uint32_t * InData_Text, const uint32_t * InData_TextLen, 78 const uint32_t * InData_MAC, const uint32_t * InData_MACLength, 79 uint32_t * OutData_Text); 80 typedef fsp_err_t (* hw_sce_aes_ecb_encrypt_using_encrypted_key)(const uint32_t * InData_KeyIndex, 81 const uint32_t num_words, const uint32_t * InData_Text, 82 uint32_t * OutData_Text); 83 84 extern fsp_err_t HW_SCE_AES_128EcbEncrypt(const uint32_t * InData_Key, 85 const uint32_t num_words, 86 const uint32_t * InData_Text, 87 uint32_t * OutData_Text); 88 89 extern fsp_err_t HW_SCE_AES_128EcbDecrypt(const uint32_t * InData_Key, 90 const uint32_t num_words, 91 const uint32_t * InData_Text, 92 uint32_t * OutData_Text); 93 94 extern fsp_err_t HW_SCE_AES_128CbcEncrypt(const uint32_t * InData_Key, 95 const uint32_t * InData_IV, 96 const uint32_t num_words, 97 const uint32_t * InData_Text, 98 uint32_t * OutData_Text, 99 uint32_t * OutData_IV); 100 101 extern fsp_err_t HW_SCE_AES_128CbcDecrypt(const uint32_t * InData_Key, 102 const uint32_t * InData_IV, 103 const uint32_t num_words, 104 const uint32_t * InData_Text, 105 uint32_t * OutData_Text, 106 uint32_t * OutData_IV); 107 108 extern fsp_err_t HW_SCE_AES_128CtrEncrypt(const uint32_t * InData_Key, 109 const uint32_t * InData_IV, 110 const uint32_t num_words, 111 const uint32_t * InData_Text, 112 uint32_t * OutData_Text, 113 uint32_t * OutData_IV); 114 115 extern fsp_err_t HW_SCE_AES_128XtsEncrypt(const uint32_t * InData_Key, 116 const uint32_t * InData_IV, 117 const uint32_t * InData_Len, 118 const uint32_t * InData_Text, 119 uint32_t * OutData_Text, 120 uint32_t * OutData_IV); 121 122 extern fsp_err_t HW_SCE_AES_128XtsDecrypt(const uint32_t * InData_Key, 123 const uint32_t * InData_IV, 124 const uint32_t * InData_Len, 125 const uint32_t * InData_Text, 126 uint32_t * OutData_Text, 127 uint32_t * OutData_IV); 128 129 extern fsp_err_t HW_SCE_AES_192EcbEncrypt(const uint32_t * InData_Key, 130 const uint32_t num_words, 131 const uint32_t * InData_Text, 132 uint32_t * OutData_Text); 133 134 extern fsp_err_t HW_SCE_AES_192EcbDecrypt(const uint32_t * InData_Key, 135 const uint32_t num_words, 136 const uint32_t * InData_Text, 137 uint32_t * OutData_Text); 138 139 extern fsp_err_t HW_SCE_AES_192CbcEncrypt(const uint32_t * InData_Key, 140 const uint32_t * InData_IV, 141 const uint32_t num_words, 142 const uint32_t * InData_Text, 143 uint32_t * OutData_Text, 144 uint32_t * OutData_IV); 145 146 extern fsp_err_t HW_SCE_AES_192CbcDecrypt(const uint32_t * InData_Key, 147 const uint32_t * InData_IV, 148 const uint32_t num_words, 149 const uint32_t * InData_Text, 150 uint32_t * OutData_Text, 151 uint32_t * OutData_IV); 152 153 extern fsp_err_t HW_SCE_AES_192CtrEncrypt(const uint32_t * InData_Key, 154 const uint32_t * InData_IV, 155 const uint32_t num_words, 156 const uint32_t * InData_Text, 157 uint32_t * OutData_Text, 158 uint32_t * OutData_IV); 159 160 extern fsp_err_t HW_SCE_AES_256EcbEncrypt(const uint32_t * InData_Key, 161 const uint32_t num_words, 162 const uint32_t * InData_Text, 163 uint32_t * OutData_Text); 164 165 extern fsp_err_t HW_SCE_AES_256EcbDecrypt(const uint32_t * InData_Key, 166 const uint32_t num_words, 167 const uint32_t * InData_Text, 168 uint32_t * OutData_Text); 169 170 extern fsp_err_t HW_SCE_AES_256CbcEncrypt(const uint32_t * InData_Key, 171 const uint32_t * InData_IV, 172 const uint32_t num_words, 173 const uint32_t * InData_Text, 174 uint32_t * OutData_Text, 175 uint32_t * OutData_IV); 176 177 extern fsp_err_t HW_SCE_AES_256CbcDecrypt(const uint32_t * InData_Key, 178 const uint32_t * InData_IV, 179 const uint32_t num_words, 180 const uint32_t * InData_Text, 181 uint32_t * OutData_Text, 182 uint32_t * OutData_IV); 183 184 extern fsp_err_t HW_SCE_AES_256CtrEncrypt(const uint32_t * InData_Key, 185 const uint32_t * InData_IV, 186 const uint32_t num_words, 187 const uint32_t * InData_Text, 188 uint32_t * OutData_Text, 189 uint32_t * OutData_IV); 190 191 extern fsp_err_t HW_SCE_AES_256XtsEncrypt(const uint32_t * InData_Key, 192 const uint32_t * InData_IV, 193 const uint32_t * InData_Len, 194 const uint32_t * InData_Text, 195 uint32_t * OutData_Text, 196 uint32_t * OutData_IV); 197 198 extern fsp_err_t HW_SCE_AES_256XtsDecrypt(const uint32_t * InData_Key, 199 const uint32_t * InData_IV, 200 const uint32_t * InData_Len, 201 const uint32_t * InData_Text, 202 uint32_t * OutData_Text, 203 uint32_t * OutData_IV); 204 205 extern fsp_err_t HW_SCE_GenerateAes128RandomKeyIndexSub(uint32_t * OutData_KeyIndex); 206 extern fsp_err_t HW_SCE_AES_128CreateEncryptedKey(uint32_t * OutData_KeyIndex); 207 208 extern fsp_err_t HW_SCE_AES_128EcbEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 209 const uint32_t num_words, 210 const uint32_t * InData_Text, 211 uint32_t * OutData_Text); 212 213 extern fsp_err_t HW_SCE_AES_128EcbDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 214 const uint32_t num_words, 215 const uint32_t * InData_Text, 216 uint32_t * OutData_Text); 217 218 extern fsp_err_t HW_SCE_AES_128CbcEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 219 const uint32_t * InData_IV, 220 const uint32_t num_words, 221 const uint32_t * InData_Text, 222 uint32_t * OutData_Text, 223 uint32_t * OutData_IV); 224 225 extern fsp_err_t HW_SCE_AES_128CbcDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 226 const uint32_t * InData_IV, 227 const uint32_t num_words, 228 const uint32_t * InData_Text, 229 uint32_t * OutData_Text, 230 uint32_t * OutData_IV); 231 232 extern fsp_err_t HW_SCE_AES_128CtrEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 233 const uint32_t * InData_IV, 234 const uint32_t num_words, 235 const uint32_t * InData_Text, 236 uint32_t * OutData_Text, 237 uint32_t * OutData_IV); 238 239 extern fsp_err_t HW_SCE_GenerateAes192RandomKeyIndexSub(uint32_t * OutData_KeyIndex); 240 extern fsp_err_t HW_SCE_AES_192CreateEncryptedKey(uint32_t * OutData_KeyIndex); 241 242 extern fsp_err_t HW_SCE_AES_192EcbEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 243 const uint32_t num_words, 244 const uint32_t * InData_Text, 245 uint32_t * OutData_Text); 246 247 extern fsp_err_t HW_SCE_AES_192EcbDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 248 const uint32_t num_words, 249 const uint32_t * InData_Text, 250 uint32_t * OutData_Text); 251 252 extern fsp_err_t HW_SCE_AES_192CbcEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 253 const uint32_t * InData_IV, 254 const uint32_t num_words, 255 const uint32_t * InData_Text, 256 uint32_t * OutData_Text, 257 uint32_t * OutData_IV); 258 259 extern fsp_err_t HW_SCE_AES_192CbcDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 260 const uint32_t * InData_IV, 261 const uint32_t num_words, 262 const uint32_t * InData_Text, 263 uint32_t * OutData_Text, 264 uint32_t * OutData_IV); 265 266 extern fsp_err_t HW_SCE_AES_192CtrEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 267 const uint32_t * InData_IV, 268 const uint32_t num_words, 269 const uint32_t * InData_Text, 270 uint32_t * OutData_Text, 271 uint32_t * OutData_IV); 272 273 extern fsp_err_t HW_SCE_GenerateAes256RandomKeyIndexSub(uint32_t * OutData_KeyIndex); 274 extern fsp_err_t HW_SCE_AES_256CreateEncryptedKey(uint32_t * OutData_KeyIndex); 275 276 extern fsp_err_t HW_SCE_AES_256EcbEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 277 const uint32_t num_words, 278 const uint32_t * InData_Text, 279 uint32_t * OutData_Text); 280 281 extern fsp_err_t HW_SCE_AES_256EcbDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 282 const uint32_t num_words, 283 const uint32_t * InData_Text, 284 uint32_t * OutData_Text); 285 286 extern fsp_err_t HW_SCE_AES_256CbcEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 287 const uint32_t * InData_IV, 288 const uint32_t num_words, 289 const uint32_t * InData_Text, 290 uint32_t * OutData_Text, 291 uint32_t * OutData_IV); 292 293 extern fsp_err_t HW_SCE_AES_256CbcDecryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 294 const uint32_t * InData_IV, 295 const uint32_t num_words, 296 const uint32_t * InData_Text, 297 uint32_t * OutData_Text, 298 uint32_t * OutData_IV); 299 300 extern fsp_err_t HW_SCE_AES_256CtrEncryptUsingEncryptedKey(const uint32_t * InData_KeyIndex, 301 const uint32_t * InData_IV, 302 const uint32_t num_words, 303 const uint32_t * InData_Text, 304 uint32_t * OutData_Text, 305 uint32_t * OutData_IV); 306 307 extern fsp_err_t HW_SCE_Aes128EncryptDecryptInit(const uint32_t * InData_Cmd, 308 const uint32_t * InData_KeyIndex, 309 const uint32_t * InData_IV); 310 311 extern void HW_SCE_Aes128EncryptDecryptUpdate(const uint32_t * InData_Text, 312 uint32_t * OutData_Text, 313 const uint32_t num_words); 314 315 extern fsp_err_t HW_SCE_Aes128EncryptDecryptFinal(void); 316 317 extern fsp_err_t HW_SCE_Aes192EncryptDecryptInit(const uint32_t * InData_Cmd, 318 const uint32_t * InData_KeyIndex, 319 const uint32_t * InData_IV); 320 321 extern void HW_SCE_Aes192EncryptDecryptUpdate(const uint32_t * InData_Text, 322 uint32_t * OutData_Text, 323 const uint32_t num_words); 324 325 extern fsp_err_t HW_SCE_Aes192EncryptDecryptFinal(void); 326 327 extern fsp_err_t HW_SCE_Aes256EncryptDecryptInit(const uint32_t * InData_Cmd, 328 const uint32_t * InData_KeyIndex, 329 const uint32_t * InData_IV); 330 331 extern void HW_SCE_Aes256EncryptDecryptUpdate(const uint32_t * InData_Text, 332 uint32_t * OutData_Text, 333 const uint32_t num_words); 334 335 extern fsp_err_t HW_SCE_Aes256EncryptDecryptFinal(void); 336 337 fsp_err_t HW_SCE_Aes128EcbEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 338 fsp_err_t HW_SCE_Aes128EcbDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 339 340 fsp_err_t HW_SCE_Aes192EcbEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 341 fsp_err_t HW_SCE_Aes192EcbDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 342 343 fsp_err_t HW_SCE_Aes256EcbEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 344 fsp_err_t HW_SCE_Aes256EcbDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 345 346 fsp_err_t HW_SCE_Aes128CbcEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 347 fsp_err_t HW_SCE_Aes128CbcDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 348 349 fsp_err_t HW_SCE_Aes192CbcEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 350 fsp_err_t HW_SCE_Aes192CbcDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 351 352 fsp_err_t HW_SCE_Aes256CbcEncryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 353 fsp_err_t HW_SCE_Aes256CbcDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 354 355 fsp_err_t HW_SCE_Aes128CtrEncryptDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 356 357 fsp_err_t HW_SCE_Aes192CtrEncryptDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 358 359 fsp_err_t HW_SCE_Aes256CtrEncryptDecryptInitSubGeneral(uint32_t * InData_KeyIndex, uint32_t * InData_IV); 360 361 fsp_err_t HW_SCE_Aes128EncryptDecryptInitSub(const uint32_t * InData_KeyType, 362 const uint32_t * InData_Cmd, 363 const uint32_t * InData_KeyIndex, 364 const uint32_t * InData_IV); 365 366 void HW_SCE_Aes128EncryptDecryptUpdateSub(const uint32_t * InData_Text, uint32_t * OutData_Text, 367 const uint32_t MAX_CNT); 368 369 fsp_err_t HW_SCE_Aes128EncryptDecryptFinalSub(void); 370 371 #endif /* HW_SCE_AES_PRIVATE_H */ 372