summaryrefslogtreecommitdiff
path: root/bsp/nuvoton/libraries/m460/StdDriver/inc/nu_keystore.h
blob: f5e6d5d8d4f16174519573d885e1eedbb65b563c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/**************************************************************************//**
 * @file     nu_keystore.h
 * @version  V3.00
 * @brief    Key Store Driver Header
 *
 * @copyright SPDX-License-Identifier: Apache-2.0
 * @copyright Copyright (C) 2020 Nuvoton Technology Corp. All rights reserved.
 *****************************************************************************/
#ifndef __NU_KEYSTORE_H__
#define __NU_KEYSTORE_H__

#ifdef __cplusplus
extern "C"
{
#endif


/** @addtogroup Standard_Driver Standard Driver
  @{
*/

/** @addtogroup KS_Driver Key Store Driver
  @{
*/

/** @addtogroup KS_EXPORTED_CONSTANTS Key Store Exported Constants
  @{
*/

#define KS_TOMETAKEY(x)     (((uint32_t)(x) << KS_METADATA_NUMBER_Pos) & KS_METADATA_NUMBER_Msk)
#define KS_TOKEYIDX(x)      (((uint32_t)(x) & KS_METADATA_NUMBER_Msk) >> KS_METADATA_NUMBER_Pos)

typedef enum KSMEM
{
    KS_SRAM  = 0,     /*!< Volatile Memory                                */
    KS_FLASH = 1,    /*!< Non-volatile Memory                            */
    KS_OTP   = 2     /*!< One-Time Programming Memory                    */
} KS_MEM_Type;

#define KS_OP_READ      (0 << KS_CTL_OPMODE_Pos)
#define KS_OP_WRITE     (1 << KS_CTL_OPMODE_Pos)
#define KS_OP_ERASE     (2 << KS_CTL_OPMODE_Pos)
#define KS_OP_ERASE_ALL (3 << KS_CTL_OPMODE_Pos)
#define KS_OP_REVOKE    (4 << KS_CTL_OPMODE_Pos)
#define KS_OP_REMAN     (5 << KS_CTL_OPMODE_Pos)
#define KS_OP_LOCK      (7 << KS_CTL_OPMODE_Pos)

#define KS_OWNER_AES        (0ul)
#define KS_OWNER_HMAC       (1ul)
#define KS_OWNER_RSA_EXP    (2ul)
#define KS_OWNER_RSA_MID    (3ul)
#define KS_OWNER_ECC        (4ul)
#define KS_OWNER_CPU        (5ul)

#define KS_META_AES     (0ul << KS_METADATA_OWNER_Pos)   /*!< AES Access Only                                */
#define KS_META_HMAC    (1ul << KS_METADATA_OWNER_Pos)   /*!< HMAC Access Only                               */
#define KS_META_RSA_EXP (2ul << KS_METADATA_OWNER_Pos)   /*!< RSA_EXP Access Only                            */
#define KS_META_RSA_MID (3ul << KS_METADATA_OWNER_Pos)   /*!< RSA_MID Access Only                            */
#define KS_META_ECC     (4ul << KS_METADATA_OWNER_Pos)   /*!< ECC Access Only                                */
#define KS_META_CPU     (5ul << KS_METADATA_OWNER_Pos)   /*!< CPU Access Only                                */

#define KS_META_128     ( 0ul << KS_METADATA_SIZE_Pos)  /*!< Key size 128 bits                              */
#define KS_META_163     ( 1ul << KS_METADATA_SIZE_Pos)  /*!< Key size 163 bits                              */
#define KS_META_192     ( 2ul << KS_METADATA_SIZE_Pos)  /*!< Key size 192 bits                              */
#define KS_META_224     ( 3ul << KS_METADATA_SIZE_Pos)  /*!< Key size 224 bits                              */
#define KS_META_233     ( 4ul << KS_METADATA_SIZE_Pos)  /*!< Key size 233 bits                              */
#define KS_META_255     ( 5ul << KS_METADATA_SIZE_Pos)  /*!< Key size 255 bits                              */
#define KS_META_256     ( 6ul << KS_METADATA_SIZE_Pos)  /*!< Key size 256 bits                              */
#define KS_META_283     ( 7ul << KS_METADATA_SIZE_Pos)  /*!< Key size 283 bits                              */
#define KS_META_384     ( 8ul << KS_METADATA_SIZE_Pos)  /*!< Key size 384 bits                              */
#define KS_META_409     ( 9ul << KS_METADATA_SIZE_Pos)  /*!< Key size 409 bits                              */
#define KS_META_512     (10ul << KS_METADATA_SIZE_Pos)  /*!< Key size 512 bits                              */
#define KS_META_521     (11ul << KS_METADATA_SIZE_Pos)  /*!< Key size 521 bits                              */
#define KS_META_571     (12ul << KS_METADATA_SIZE_Pos)  /*!< Key size 571 bits                              */
#define KS_META_1024    (16ul << KS_METADATA_SIZE_Pos)  /*!< Key size 1024 bits                             */
#define KS_META_1536    (17ul << KS_METADATA_SIZE_Pos)  /*!< Key size 1024 bits                             */
#define KS_META_2048    (18ul << KS_METADATA_SIZE_Pos)  /*!< Key size 2048 bits                             */
#define KS_META_3072    (19ul << KS_METADATA_SIZE_Pos)  /*!< Key size 1024 bits                             */
#define KS_META_4096    (20ul << KS_METADATA_SIZE_Pos)  /*!< Key size 4096 bits                             */

#define KS_META_BOOT    ( 1ul << KS_METADATA_BS_Pos)    /*!< Key only used for boot ROM only                */

#define KS_META_READABLE (1ul << KS_METADATA_READABLE_Pos)  /*!< Allow the key to be read by software       */

#define KS_META_PRIV     (1ul << KS_METADATA_PRIV_Pos)  /*!< Privilege key                                  */
#define KS_META_NONPRIV  (0ul << KS_METADATA_PRIV_Pos)  /*!< Non-privilege key                              */

#define KS_META_SECURE    (1ul << KS_METADATA_SEC_Pos)    /*!< Secure key                                     */
#define KS_META_NONSECURE (0ul << KS_METADATA_SEC_Pos)    /*!< Non-secure key                                 */

#define KS_TIMEOUT      SystemCoreClock /*!< 1 second time-out \hideinitializer */

#define KS_OK            ( 0L)
#define KS_ERR_FAIL      (-1L)   /*!< KS failed */
#define KS_ERR_TIMEOUT   (-2L)   /*!< KS operation abort due to timeout error */
#define KS_ERR_INIT      (-3L)   /*!< KS intital fail */
#define KS_ERR_BUSY      (-4L)   /*!< KS is in busy state */
#define KS_ERR_PARAMETER (-5L)   /*!< Wrong input parameters */

/**
  * @brief      Enable scramble function
  * @details    This function is used to enable scramle function of Key Store.
  */

#define KS_SCRAMBLING()     KS->CTL |= KS_CTL_SCMB_Msk




/**@}*/ /* end of group KS_EXPORTED_CONSTANTS */

extern int32_t g_KS_i32ErrCode;

/** @addtogroup KS_EXPORTED_FUNCTIONS Key Store Exported Functions
  @{
*/

int32_t KS_Open(void);
int32_t KS_Read(KS_MEM_Type type, int32_t i32KeyIdx, uint32_t au32Key[], uint32_t u32WordCnt);
int32_t KS_Write(KS_MEM_Type eType, uint32_t u32Meta, uint32_t au32Key[]);
int32_t KS_WriteOTP(int32_t i32KeyIdx, uint32_t u32Meta, uint32_t au32Key[]);
int32_t KS_EraseKey(int32_t i32KeyIdx);
int32_t KS_EraseOTPKey(int32_t i32KeyIdx);
int32_t KS_LockOTPKey(int32_t i32KeyIdx);
int32_t KS_EraseAll(KS_MEM_Type eType);
int32_t KS_RevokeKey(KS_MEM_Type eType, int32_t i32KeyIdx);
uint32_t KS_GetRemainSize(KS_MEM_Type eType);
int32_t KS_ToggleSRAM(void);
uint32_t KS_GetKeyWordCnt(uint32_t u32Meta);
uint32_t KS_GetRemainKeyCount(KS_MEM_Type mem);

/**@}*/ /* end of group KS_EXPORTED_FUNCTIONS */

/**@}*/ /* end of group KS_Driver */

/**@}*/ /* end of group Standard_Driver */

#ifdef __cplusplus
}
#endif

#endif /* __NU_KEYSTORE_H__ */