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 
95