1 /**************************************************************************//** 2 * @file keystore.h 3 * @version V3.00 4 * @brief Key Store Driver Header 5 * 6 * @copyright SPDX-License-Identifier: Apache-2.0 7 * @copyright Copyright (C) 2020 Nuvoton Technology Corp. All rights reserved. 8 *****************************************************************************/ 9 #ifndef __KEYSTORE_H__ 10 #define __KEYSTORE_H__ 11 12 #ifdef __cplusplus 13 extern "C" 14 { 15 #endif 16 17 18 /** @addtogroup Standard_Driver Standard Driver 19 @{ 20 */ 21 22 /** @addtogroup KS_Driver Key Store Driver 23 @{ 24 */ 25 26 /** @addtogroup KS_EXPORTED_CONSTANTS Key Store Exported Constants 27 @{ 28 */ 29 30 #define KS_TOMETAKEY(x) (((uint32_t)(x) << KS_METADATA_NUMBER_Pos) & KS_METADATA_NUMBER_Msk) 31 #define KS_TOKEYIDX(x) (((uint32_t)(x) & KS_METADATA_NUMBER_Msk) >> KS_METADATA_NUMBER_Pos) 32 33 typedef enum KSMEM 34 { 35 KS_SRAM = 0, /*!< Volatile Memory */ 36 KS_FLASH = 1, /*!< Non-volatile Memory */ 37 KS_OTP = 2 /*!< One-Time Programming Memory */ 38 } KS_MEM_Type; 39 40 #define KS_OP_READ (0 << KS_CTL_OPMODE_Pos) 41 #define KS_OP_WRITE (1 << KS_CTL_OPMODE_Pos) 42 #define KS_OP_ERASE (2 << KS_CTL_OPMODE_Pos) 43 #define KS_OP_ERASE_ALL (3 << KS_CTL_OPMODE_Pos) 44 #define KS_OP_REVOKE (4 << KS_CTL_OPMODE_Pos) 45 #define KS_OP_REMAN (5 << KS_CTL_OPMODE_Pos) 46 47 #define KS_OWNER_AES (0ul) 48 #define KS_OWNER_HMAC (1ul) 49 #define KS_OWNER_RSA_EXP (2ul) 50 #define KS_OWNER_RSA_MID (3ul) 51 #define KS_OWNER_ECC (4ul) 52 #define KS_OWNER_CPU (5ul) 53 54 #define KS_META_AES (0ul << KS_METADATA_OWNER_Pos) /*!< AES Access Only */ 55 #define KS_META_HMAC (1ul << KS_METADATA_OWNER_Pos) /*!< HMAC Access Only */ 56 #define KS_META_RSA_EXP (2ul << KS_METADATA_OWNER_Pos) /*!< RSA_EXP Access Only */ 57 #define KS_META_RSA_MID (3ul << KS_METADATA_OWNER_Pos) /*!< RSA_MID Access Only */ 58 #define KS_META_ECC (4ul << KS_METADATA_OWNER_Pos) /*!< ECC Access Only */ 59 #define KS_META_CPU (5ul << KS_METADATA_OWNER_Pos) /*!< CPU Access Only */ 60 61 #define KS_META_128 ( 0ul << KS_METADATA_SIZE_Pos) /*!< Key size 128 bits */ 62 #define KS_META_163 ( 1ul << KS_METADATA_SIZE_Pos) /*!< Key size 163 bits */ 63 #define KS_META_192 ( 2ul << KS_METADATA_SIZE_Pos) /*!< Key size 192 bits */ 64 #define KS_META_224 ( 3ul << KS_METADATA_SIZE_Pos) /*!< Key size 224 bits */ 65 #define KS_META_233 ( 4ul << KS_METADATA_SIZE_Pos) /*!< Key size 233 bits */ 66 #define KS_META_255 ( 5ul << KS_METADATA_SIZE_Pos) /*!< Key size 255 bits */ 67 #define KS_META_256 ( 6ul << KS_METADATA_SIZE_Pos) /*!< Key size 256 bits */ 68 #define KS_META_283 ( 7ul << KS_METADATA_SIZE_Pos) /*!< Key size 283 bits */ 69 #define KS_META_384 ( 8ul << KS_METADATA_SIZE_Pos) /*!< Key size 384 bits */ 70 #define KS_META_409 ( 9ul << KS_METADATA_SIZE_Pos) /*!< Key size 409 bits */ 71 #define KS_META_512 (10ul << KS_METADATA_SIZE_Pos) /*!< Key size 512 bits */ 72 #define KS_META_521 (11ul << KS_METADATA_SIZE_Pos) /*!< Key size 521 bits */ 73 #define KS_META_571 (12ul << KS_METADATA_SIZE_Pos) /*!< Key size 571 bits */ 74 #define KS_META_1024 (16ul << KS_METADATA_SIZE_Pos) /*!< Key size 1024 bits */ 75 #define KS_META_1536 (17ul << KS_METADATA_SIZE_Pos) /*!< Key size 1024 bits */ 76 #define KS_META_2048 (18ul << KS_METADATA_SIZE_Pos) /*!< Key size 2048 bits */ 77 #define KS_META_3072 (19ul << KS_METADATA_SIZE_Pos) /*!< Key size 1024 bits */ 78 #define KS_META_4096 (20ul << KS_METADATA_SIZE_Pos) /*!< Key size 4096 bits */ 79 80 #define KS_META_BOOT ( 1ul << KS_METADATA_BS_Pos) /*!< Key only used for boot ROM only */ 81 82 #define KS_META_READABLE (1ul << KS_METADATA_READABLE_Pos) /*!< Allow the key to be read by software */ 83 84 #define KS_META_PRIV (1ul << KS_METADATA_PRIV_Pos) /*!< Privilege key */ 85 #define KS_META_NONPRIV (0ul << KS_METADATA_PRIV_Pos) /*!< Non-privilege key */ 86 87 #define KS_META_SECURE (1ul << KS_METADATA_SEC_Pos) /*!< Secure key */ 88 #define KS_META_NONSECURE (0ul << KS_METADATA_SEC_Pos) /*!< Non-secure key */ 89 90 91 /** 92 * @brief Enable scramble function 93 * @details This function is used to enable scramle function of Key Store. 94 */ 95 96 #define KS_SCRAMBLING() KS->CTL |= KS_CTL_SCMB_Msk 97 98 99 100 101 /**@}*/ /* end of group KS_EXPORTED_CONSTANTS */ 102 103 104 /** @addtogroup KS_EXPORTED_FUNCTIONS Key Store Exported Functions 105 @{ 106 */ 107 108 void KS_Open(void); 109 int32_t KS_Read(KS_MEM_Type type, int32_t i32KeyIdx, uint32_t au32Key[], uint32_t u32WordCnt); 110 int32_t KS_Write(KS_MEM_Type eType, uint32_t u32Meta, uint32_t au32Key[]); 111 int32_t KS_WriteOTP(int32_t i32KeyIdx, uint32_t u32Meta, uint32_t au32Key[]); 112 int32_t KS_EraseKey(int32_t i32KeyIdx); 113 int32_t KS_EraseAll(KS_MEM_Type eType); 114 int32_t KS_RevokeKey(KS_MEM_Type eType, int32_t i32KeyIdx); 115 uint32_t KS_GetRemainSize(KS_MEM_Type eType); 116 int32_t KS_ToggleSRAM(void); 117 uint32_t KS_GetKeyWordCnt(uint32_t u32Meta); 118 uint32_t KS_GetRemainKeyCount(KS_MEM_Type mem); 119 120 /**@}*/ /* end of group KS_EXPORTED_FUNCTIONS */ 121 122 /**@}*/ /* end of group KS_Driver */ 123 124 /**@}*/ /* end of group Standard_Driver */ 125 126 #ifdef __cplusplus 127 } 128 #endif 129 130 #endif /* __KEYSTORE_H__ */ 131