Gilad Ben-Yossef | 033327a | 2019-05-15 09:24:04 +0300 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2017-2020 ARM Limited and Contributors. All rights reserved. |
| 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | */ |
| 6 | |
| 7 | #ifndef _BSV_CRYPTO_DEFS_H |
| 8 | #define _BSV_CRYPTO_DEFS_H |
| 9 | |
| 10 | #ifdef __cplusplus |
| 11 | extern "C" |
| 12 | { |
| 13 | #endif |
| 14 | |
| 15 | /*! |
| 16 | @file |
| 17 | @brief This file contains the definitions of the cryptographic ROM APIs. |
| 18 | |
| 19 | @defgroup cc_bsv_crypto_defs CryptoCell Boot Services cryptographic ROM API definitions |
| 20 | @{ |
| 21 | @ingroup cc_bsv |
| 22 | */ |
| 23 | |
| 24 | /*! AES supported HW key code table. */ |
| 25 | typedef enum { |
| 26 | |
| 27 | CC_BSV_USER_KEY = 0, /*!< Definition for a user key. */ |
| 28 | CC_BSV_HUK_KEY = 1, /*!< Definition for the HW unique key. */ |
| 29 | CC_BSV_RTL_KEY = 2, /*!< Definition for the RTL key. */ |
| 30 | CC_BSV_SESSION_KEY = 3, /*!< Definition for the Session key. */ |
| 31 | CC_BSV_CE_KEY = 4, /*!< Definition for the Kce. */ |
| 32 | CC_BSV_PLT_KEY = 5, /*!< Definition for the Platform key. */ |
| 33 | CC_BSV_KCST_KEY = 6, /*!< Definition for Kcst. */ |
| 34 | CC_BSV_ICV_PROV_KEY = 0xd, /*!< Definition for the Kpicv. */ |
| 35 | CC_BSV_ICV_CE_KEY = 0xe, /*!< Definition for the Kceicv. */ |
| 36 | CC_BSV_PROV_KEY = 0xf, /*!< Definition for the Kcp. */ |
| 37 | CC_BSV_END_OF_KEY_TYPE = INT32_MAX, /*!< Reserved. */ |
| 38 | }CCBsvKeyType_t; |
| 39 | |
| 40 | /*! AES directions. */ |
| 41 | typedef enum bsvAesDirection { |
| 42 | BSV_AES_DIRECTION_ENCRYPT = 0, /*!< Encrypt.*/ |
| 43 | BSV_AES_DIRECTION_DECRYPT = 1, /*!< Decrypt.*/ |
| 44 | BSV_AES_NUM_OF_ENCRYPT_MODES, /*!< The maximal number of operations. */ |
| 45 | BSV_AES_DIRECTION_RESERVE32B = INT32_MAX /*!< Reserved.*/ |
| 46 | }bsvAesDirection_t; |
| 47 | |
| 48 | /*! Definitions of the cryptographic flow supported as part of the Secure Boot. */ |
| 49 | typedef enum { |
| 50 | CC_BSV_CRYPTO_HASH_MODE = 0, /*!< Hash mode only. */ |
| 51 | CC_BSV_CRYPTO_AES_CTR_AND_HASH_MODE = 1, /*!< Data goes into the AES and Hash engines. */ |
| 52 | CC_BSV_CRYPTO_AES_CTR_TO_HASH_MODE = 2 /*!< Data goes into the AES and from the AES to the Hash engine. */ |
| 53 | }CCBsvflowMode_t; |
| 54 | |
| 55 | /*! CryptoImage HW completion sequence mode */ |
| 56 | typedef enum |
| 57 | { |
| 58 | BSV_CRYPTO_COMPLETION_NO_WAIT = 0, /*!< The driver waits only before reading the output. */ |
| 59 | BSV_CRYPTO_COMPLETION_WAIT_UPON_END = 1 /*!< The driver waits after each chunk of data. */ |
| 60 | }bsvCryptoCompletionMode_t; |
| 61 | |
| 62 | |
| 63 | /*! AES-CMAC result size, in words. */ |
| 64 | #define CC_BSV_CMAC_RESULT_SIZE_IN_WORDS 4 /* 128b */ |
| 65 | /*! AES-CMAC result size, in bytes. */ |
| 66 | #define CC_BSV_CMAC_RESULT_SIZE_IN_BYTES 16 /* 128b */ |
| 67 | /*! AES-CCM 128bit key size, in bytes. */ |
| 68 | #define CC_BSV_CCM_KEY_SIZE_BYTES 16 |
| 69 | /*! AES-CCM 128bit key size, in words. */ |
| 70 | #define CC_BSV_CCM_KEY_SIZE_WORDS 4 |
| 71 | /*! AES-CCM NONCE size, in bytes. */ |
| 72 | #define CC_BSV_CCM_NONCE_SIZE_BYTES 12 |
| 73 | |
| 74 | |
| 75 | /*! AES-CMAC result buffer. */ |
| 76 | typedef uint32_t CCBsvCmacResult_t[CC_BSV_CMAC_RESULT_SIZE_IN_WORDS]; |
| 77 | /*! AES-CCM key buffer.*/ |
| 78 | typedef uint32_t CCBsvCcmKey_t[CC_BSV_CCM_KEY_SIZE_WORDS]; |
| 79 | /*! AES-CCM nonce buffer.*/ |
| 80 | typedef uint8_t CCBsvCcmNonce_t[CC_BSV_CCM_NONCE_SIZE_BYTES]; |
| 81 | /*! AES-CCM MAC buffer.*/ |
| 82 | typedef uint8_t CCBsvCcmMacRes_t[CC_BSV_CMAC_RESULT_SIZE_IN_BYTES]; |
| 83 | |
| 84 | |
| 85 | #ifdef __cplusplus |
| 86 | } |
| 87 | #endif |
| 88 | |
| 89 | #endif |
| 90 | |
| 91 | /** |
| 92 | @} |
| 93 | */ |
| 94 | |