nu_keystore.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /**************************************************************************//**
  2. * @file nu_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 __NU_KEYSTORE_H__
  10. #define __NU_KEYSTORE_H__
  11. #ifdef __cplusplus
  12. extern "C"
  13. {
  14. #endif
  15. /** @addtogroup Standard_Driver Standard Driver
  16. @{
  17. */
  18. /** @addtogroup KS_Driver Key Store Driver
  19. @{
  20. */
  21. /** @addtogroup KS_EXPORTED_CONSTANTS Key Store Exported Constants
  22. @{
  23. */
  24. #define KS_TOMETAKEY(x) (((uint32_t)(x) << KS_METADATA_NUMBER_Pos) & KS_METADATA_NUMBER_Msk)
  25. #define KS_TOKEYIDX(x) (((uint32_t)(x) & KS_METADATA_NUMBER_Msk) >> KS_METADATA_NUMBER_Pos)
  26. typedef enum KSMEM
  27. {
  28. KS_SRAM = 0, /*!< Volatile Memory */
  29. KS_FLASH = 1, /*!< Non-volatile Memory */
  30. KS_OTP = 2 /*!< One-Time Programming Memory */
  31. } KS_MEM_Type;
  32. #define KS_OP_READ (0 << KS_CTL_OPMODE_Pos)
  33. #define KS_OP_WRITE (1 << KS_CTL_OPMODE_Pos)
  34. #define KS_OP_ERASE (2 << KS_CTL_OPMODE_Pos)
  35. #define KS_OP_ERASE_ALL (3 << KS_CTL_OPMODE_Pos)
  36. #define KS_OP_REVOKE (4 << KS_CTL_OPMODE_Pos)
  37. #define KS_OP_REMAN (5 << KS_CTL_OPMODE_Pos)
  38. #define KS_OP_LOCK (7 << KS_CTL_OPMODE_Pos)
  39. #define KS_OWNER_AES (0ul)
  40. #define KS_OWNER_HMAC (1ul)
  41. #define KS_OWNER_RSA_EXP (2ul)
  42. #define KS_OWNER_RSA_MID (3ul)
  43. #define KS_OWNER_ECC (4ul)
  44. #define KS_OWNER_CPU (5ul)
  45. #define KS_META_AES (0ul << KS_METADATA_OWNER_Pos) /*!< AES Access Only */
  46. #define KS_META_HMAC (1ul << KS_METADATA_OWNER_Pos) /*!< HMAC Access Only */
  47. #define KS_META_RSA_EXP (2ul << KS_METADATA_OWNER_Pos) /*!< RSA_EXP Access Only */
  48. #define KS_META_RSA_MID (3ul << KS_METADATA_OWNER_Pos) /*!< RSA_MID Access Only */
  49. #define KS_META_ECC (4ul << KS_METADATA_OWNER_Pos) /*!< ECC Access Only */
  50. #define KS_META_CPU (5ul << KS_METADATA_OWNER_Pos) /*!< CPU Access Only */
  51. #define KS_META_128 ( 0ul << KS_METADATA_SIZE_Pos) /*!< Key size 128 bits */
  52. #define KS_META_163 ( 1ul << KS_METADATA_SIZE_Pos) /*!< Key size 163 bits */
  53. #define KS_META_192 ( 2ul << KS_METADATA_SIZE_Pos) /*!< Key size 192 bits */
  54. #define KS_META_224 ( 3ul << KS_METADATA_SIZE_Pos) /*!< Key size 224 bits */
  55. #define KS_META_233 ( 4ul << KS_METADATA_SIZE_Pos) /*!< Key size 233 bits */
  56. #define KS_META_255 ( 5ul << KS_METADATA_SIZE_Pos) /*!< Key size 255 bits */
  57. #define KS_META_256 ( 6ul << KS_METADATA_SIZE_Pos) /*!< Key size 256 bits */
  58. #define KS_META_283 ( 7ul << KS_METADATA_SIZE_Pos) /*!< Key size 283 bits */
  59. #define KS_META_384 ( 8ul << KS_METADATA_SIZE_Pos) /*!< Key size 384 bits */
  60. #define KS_META_409 ( 9ul << KS_METADATA_SIZE_Pos) /*!< Key size 409 bits */
  61. #define KS_META_512 (10ul << KS_METADATA_SIZE_Pos) /*!< Key size 512 bits */
  62. #define KS_META_521 (11ul << KS_METADATA_SIZE_Pos) /*!< Key size 521 bits */
  63. #define KS_META_571 (12ul << KS_METADATA_SIZE_Pos) /*!< Key size 571 bits */
  64. #define KS_META_1024 (16ul << KS_METADATA_SIZE_Pos) /*!< Key size 1024 bits */
  65. #define KS_META_1536 (17ul << KS_METADATA_SIZE_Pos) /*!< Key size 1024 bits */
  66. #define KS_META_2048 (18ul << KS_METADATA_SIZE_Pos) /*!< Key size 2048 bits */
  67. #define KS_META_3072 (19ul << KS_METADATA_SIZE_Pos) /*!< Key size 1024 bits */
  68. #define KS_META_4096 (20ul << KS_METADATA_SIZE_Pos) /*!< Key size 4096 bits */
  69. #define KS_META_BOOT ( 1ul << KS_METADATA_BS_Pos) /*!< Key only used for boot ROM only */
  70. #define KS_META_READABLE (1ul << KS_METADATA_READABLE_Pos) /*!< Allow the key to be read by software */
  71. #define KS_META_PRIV (1ul << KS_METADATA_PRIV_Pos) /*!< Privilege key */
  72. #define KS_META_NONPRIV (0ul << KS_METADATA_PRIV_Pos) /*!< Non-privilege key */
  73. #define KS_META_SECURE (1ul << KS_METADATA_SEC_Pos) /*!< Secure key */
  74. #define KS_META_NONSECURE (0ul << KS_METADATA_SEC_Pos) /*!< Non-secure key */
  75. #define KS_TIMEOUT SystemCoreClock /*!< 1 second time-out \hideinitializer */
  76. #define KS_OK ( 0L)
  77. #define KS_ERR_FAIL (-1L) /*!< KS failed */
  78. #define KS_ERR_TIMEOUT (-2L) /*!< KS operation abort due to timeout error */
  79. #define KS_ERR_INIT (-3L) /*!< KS intital fail */
  80. #define KS_ERR_BUSY (-4L) /*!< KS is in busy state */
  81. #define KS_ERR_PARAMETER (-5L) /*!< Wrong input parameters */
  82. /**
  83. * @brief Enable scramble function
  84. * @details This function is used to enable scramle function of Key Store.
  85. */
  86. #define KS_SCRAMBLING() KS->CTL |= KS_CTL_SCMB_Msk
  87. /**@}*/ /* end of group KS_EXPORTED_CONSTANTS */
  88. extern int32_t g_KS_i32ErrCode;
  89. /** @addtogroup KS_EXPORTED_FUNCTIONS Key Store Exported Functions
  90. @{
  91. */
  92. int32_t KS_Open(void);
  93. int32_t KS_Read(KS_MEM_Type type, int32_t i32KeyIdx, uint32_t au32Key[], uint32_t u32WordCnt);
  94. int32_t KS_Write(KS_MEM_Type eType, uint32_t u32Meta, uint32_t au32Key[]);
  95. int32_t KS_WriteOTP(int32_t i32KeyIdx, uint32_t u32Meta, uint32_t au32Key[]);
  96. int32_t KS_EraseKey(int32_t i32KeyIdx);
  97. int32_t KS_EraseOTPKey(int32_t i32KeyIdx);
  98. int32_t KS_LockOTPKey(int32_t i32KeyIdx);
  99. int32_t KS_EraseAll(KS_MEM_Type eType);
  100. int32_t KS_RevokeKey(KS_MEM_Type eType, int32_t i32KeyIdx);
  101. uint32_t KS_GetRemainSize(KS_MEM_Type eType);
  102. int32_t KS_ToggleSRAM(void);
  103. uint32_t KS_GetKeyWordCnt(uint32_t u32Meta);
  104. uint32_t KS_GetRemainKeyCount(KS_MEM_Type mem);
  105. /**@}*/ /* end of group KS_EXPORTED_FUNCTIONS */
  106. /**@}*/ /* end of group KS_Driver */
  107. /**@}*/ /* end of group Standard_Driver */
  108. #ifdef __cplusplus
  109. }
  110. #endif
  111. #endif /* __NU_KEYSTORE_H__ */