nu_crypto.h 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  1. /**************************************************************************//**
  2. * @file crypto.h
  3. * @version V1.10
  4. * $Revision: 2 $
  5. * $Date: 15/05/06 3:55p $
  6. * @brief Cryptographic Accelerator driver header file
  7. *
  8. * @note
  9. * SPDX-License-Identifier: Apache-2.0
  10. * Copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
  11. ******************************************************************************/
  12. #ifndef __NU_CRYPTO_H__
  13. #define __NU_CRYPTO_H__
  14. #include "N9H30.h"
  15. #include "nu_sys.h"
  16. #ifdef __cplusplus
  17. extern "C"
  18. {
  19. #endif
  20. /** @addtogroup N9H30_Device_Driver N9H30 Device Driver
  21. @{
  22. */
  23. /** @addtogroup N9H30_CRYPTO_Driver CRYPTO Driver
  24. @{
  25. */
  26. /// @cond HIDDEN_SYMBOLS
  27. typedef struct
  28. {
  29. __IO uint32_t INTEN; /*!< Offset: 0x000: Crypto Interrupt Enable Control Register */
  30. __IO uint32_t INTSTS; /*!< Offset: 0x004: Crypto Interrupt Flag */
  31. __IO uint32_t PRNG_CTL; /*!< Offset: 0x008: PRNG Control Flag */
  32. __IO uint32_t PRNG_SEED; /*!< Offset: 0x00C: PRNG Control Flag */
  33. __I uint32_t PRNG_KEY[8]; /*!< Offset: 0x010: PRNG Generated Key0 - Key7 */
  34. uint32_t RESERVE0[8];
  35. __I uint32_t AES_FDBCK0; /*!< Offset: 0x050: AES Engine Output Feedback Data after Cryptographic Operation */
  36. __I uint32_t AES_FDBCK1; /*!< Offset: 0x054: AES Engine Output Feedback Data after Cryptographic Operation */
  37. __I uint32_t AES_FDBCK2; /*!< Offset: 0x058: AES Engine Output Feedback Data after Cryptographic Operation */
  38. __I uint32_t AES_FDBCK3; /*!< Offset: 0x05C: AES Engine Output Feedback Data after Cryptographic Operation */
  39. __I uint32_t TDES_FDBCKH; /*!< Offset: 0x060: TDES/DES Engine Output Feedback High Word Data after Cryptographic Operation */
  40. __I uint32_t TDES_FDBCKL; /*!< Offset: 0x064: TDES/DES Engine Output Feedback Low Word Data after Cryptographic Operation */
  41. uint32_t RESERVE1[38];
  42. __IO uint32_t AES_CTL; /*!< Offset: 0x100: AES Control Register */
  43. __IO uint32_t AES_STS; /*!< Offset: 0x104: AES Engine Flag */
  44. __IO uint32_t AES_DATIN; /*!< Offset: 0x108: AES Engine Data Input Port Register */
  45. __I uint32_t AES_DATOUT; /*!< Offset: 0x10C: AES Engine Data Output Port Register */
  46. __IO uint32_t AES0_KEY0; /*!< Offset: 0x110: AES Key Word 0 Register for Channel 0 */
  47. __IO uint32_t AES0_KEY1; /*!< Offset: 0x114: AES Key Word 1 Register for Channel 0 */
  48. __IO uint32_t AES0_KEY2; /*!< Offset: 0x118: AES Key Word 2 Register for Channel 0 */
  49. __IO uint32_t AES0_KEY3; /*!< Offset: 0x11C: AES Key Word 3 Register for Channel 0 */
  50. __IO uint32_t AES0_KEY4; /*!< Offset: 0x120: AES Key Word 4 Register for Channel 0 */
  51. __IO uint32_t AES0_KEY5; /*!< Offset: 0x124: AES Key Word 5 Register for Channel 0 */
  52. __IO uint32_t AES0_KEY6; /*!< Offset: 0x128: AES Key Word 6 Register for Channel 0 */
  53. __IO uint32_t AES0_KEY7; /*!< Offset: 0x12C: AES Key Word 7 Register for Channel 0 */
  54. __IO uint32_t AES0_IV0; /*!< Offset: 0x130: AES Initial Vector Word 0 Register for Channel 0 */
  55. __IO uint32_t AES0_IV1; /*!< Offset: 0x134: AES Initial Vector Word 1 Register for Channel 0 */
  56. __IO uint32_t AES0_IV2; /*!< Offset: 0x138: AES Initial Vector Word 2 Register for Channel 0 */
  57. __IO uint32_t AES0_IV3; /*!< Offset: 0x13C: AES Initial Vector Word 3 Register for Channel 0 */
  58. __IO uint32_t AES0_SADDR; /*!< Offset: 0x140: AES DMA Source Address Register for Channel 0 */
  59. __IO uint32_t AES0_DADDR; /*!< Offset: 0x144: AES DMA Destination Address Register for Channel 0 */
  60. __IO uint32_t AES0_CNT; /*!< Offset: 0x148: AES Byte Count Register for Channel 0 */
  61. __IO uint32_t AES1_KEY0; /*!< Offset: 0x14C: AES Key Word 0 Register for Channel 1 */
  62. __IO uint32_t AES1_KEY1; /*!< Offset: 0x150: AES Key Word 1 Register for Channel 1 */
  63. __IO uint32_t AES1_KEY2; /*!< Offset: 0x154: AES Key Word 2 Register for Channel 1 */
  64. __IO uint32_t AES1_KEY3; /*!< Offset: 0x158: AES Key Word 3 Register for Channel 1 */
  65. __IO uint32_t AES1_KEY4; /*!< Offset: 0x15C: AES Key Word 4 Register for Channel 1 */
  66. __IO uint32_t AES1_KEY5; /*!< Offset: 0x160: AES Key Word 5 Register for Channel 1 */
  67. __IO uint32_t AES1_KEY6; /*!< Offset: 0x164: AES Key Word 6 Register for Channel 1 */
  68. __IO uint32_t AES1_KEY7; /*!< Offset: 0x168: AES Key Word 7 Register for Channel 1 */
  69. __IO uint32_t AES1_IV0; /*!< Offset: 0x16C: AES Initial Vector Word 0 Register for Channel 1 */
  70. __IO uint32_t AES1_IV1; /*!< Offset: 0x170: AES Initial Vector Word 1 Register for Channel 1 */
  71. __IO uint32_t AES1_IV2; /*!< Offset: 0x174: AES Initial Vector Word 2 Register for Channel 1 */
  72. __IO uint32_t AES1_IV3; /*!< Offset: 0x178: AES Initial Vector Word 3 Register for Channel 1 */
  73. __IO uint32_t AES1_SADDR; /*!< Offset: 0x17C: AES DMA Source Address Register for Channel 1 */
  74. __IO uint32_t AES1_DADDR; /*!< Offset: 0x180: AES DMA Destination Address Register for Channel 1 */
  75. __IO uint32_t AES1_CNT; /*!< Offset: 0x184: AES Byte Count Register for Channel 1 */
  76. __IO uint32_t AES2_KEY0; /*!< Offset: 0x188: AES Key Word 0 Register for Channel 2 */
  77. __IO uint32_t AES2_KEY1; /*!< Offset: 0x18C: AES Key Word 1 Register for Channel 2 */
  78. __IO uint32_t AES2_KEY2; /*!< Offset: 0x190: AES Key Word 2 Register for Channel 2 */
  79. __IO uint32_t AES2_KEY3; /*!< Offset: 0x194: AES Key Word 3 Register for Channel 2 */
  80. __IO uint32_t AES2_KEY4; /*!< Offset: 0x198: AES Key Word 4 Register for Channel 2 */
  81. __IO uint32_t AES2_KEY5; /*!< Offset: 0x19C: AES Key Word 5 Register for Channel 2 */
  82. __IO uint32_t AES2_KEY6; /*!< Offset: 0x1A0: AES Key Word 6 Register for Channel 2 */
  83. __IO uint32_t AES2_KEY7; /*!< Offset: 0x1A4: AES Key Word 7 Register for Channel 2 */
  84. __IO uint32_t AES2_IV0; /*!< Offset: 0x1A8: AES Initial Vector Word 0 Register for Channel 2 */
  85. __IO uint32_t AES2_IV1; /*!< Offset: 0x1AC: AES Initial Vector Word 1 Register for Channel 2 */
  86. __IO uint32_t AES2_IV2; /*!< Offset: 0x1B0: AES Initial Vector Word 2 Register for Channel 2 */
  87. __IO uint32_t AES2_IV3; /*!< Offset: 0x1B4: AES Initial Vector Word 3 Register for Channel 2 */
  88. __IO uint32_t AES2_SADDR; /*!< Offset: 0x1B8: AES DMA Source Address Register for Channel 2 */
  89. __IO uint32_t AES2_DADDR; /*!< Offset: 0x1BC: AES DMA Destination Address Register for Channel 2 */
  90. __IO uint32_t AES2_CNT; /*!< Offset: 0x1C0: AES Byte Count Register for Channel 2 */
  91. __IO uint32_t AES3_KEY0; /*!< Offset: 0x1C4: AES Key Word 0 Register for Channel 3 */
  92. __IO uint32_t AES3_KEY1; /*!< Offset: 0x1C8: AES Key Word 1 Register for Channel 3 */
  93. __IO uint32_t AES3_KEY2; /*!< Offset: 0x1CC: AES Key Word 2 Register for Channel 3 */
  94. __IO uint32_t AES3_KEY3; /*!< Offset: 0x1D0: AES Key Word 3 Register for Channel 3 */
  95. __IO uint32_t AES3_KEY4; /*!< Offset: 0x1D4: AES Key Word 4 Register for Channel 3 */
  96. __IO uint32_t AES3_KEY5; /*!< Offset: 0x1D8: AES Key Word 5 Register for Channel 3 */
  97. __IO uint32_t AES3_KEY6; /*!< Offset: 0x1DC: AES Key Word 6 Register for Channel 3 */
  98. __IO uint32_t AES3_KEY7; /*!< Offset: 0x1E0: AES Key Word 7 Register for Channel 3 */
  99. __IO uint32_t AES3_IV0; /*!< Offset: 0x1E4: AES Initial Vector Word 0 Register for Channel 3 */
  100. __IO uint32_t AES3_IV1; /*!< Offset: 0x1E8: AES Initial Vector Word 1 Register for Channel 3 */
  101. __IO uint32_t AES3_IV2; /*!< Offset: 0x1EC: AES Initial Vector Word 2 Register for Channel 3 */
  102. __IO uint32_t AES3_IV3; /*!< Offset: 0x1F0: AES Initial Vector Word 3 Register for Channel 3 */
  103. __IO uint32_t AES3_SADDR; /*!< Offset: 0x1F4: AES DMA Source Address Register for Channel 3 */
  104. __IO uint32_t AES3_DADDR; /*!< Offset: 0x1F8: AES DMA Destination Address Register for Channel 3 */
  105. __IO uint32_t AES3_CNT; /*!< Offset: 0x1FC: AES Byte Count Register for Channel 3 */
  106. __IO uint32_t TDES_CTL; /*!< Offset: 0x200: TDES/DES Control Register */
  107. __IO uint32_t TDES_STS; /*!< Offset: 0x204: TDES/DES Engine Flag */
  108. __IO uint32_t TDES0_KEY1H; /*!< Offset: 0x208: TDES/DES Key 1 High Word Register for Channel 0 */
  109. __IO uint32_t TDES0_KEY1L; /*!< Offset: 0x20C: TDES/DES Key 1 Low Word Register for Channel 0 */
  110. __IO uint32_t TDES0_KEY2H; /*!< Offset: 0x210: TDES/DES Key 2 High Word Register for Channel 0 */
  111. __IO uint32_t TDES0_KEY2L; /*!< Offset: 0x214: TDES/DES Key 2 Low Word Register for Channel 0 */
  112. __IO uint32_t TDES0_KEY3H; /*!< Offset: 0x218: TDES/DES Key 3 High Word Register for Channel 0 */
  113. __IO uint32_t TDES0_KEY3L; /*!< Offset: 0x21C: TDES/DES Key 3 Low Word Register for Channel 0 */
  114. __IO uint32_t TDES0_IVH; /*!< Offset: 0x220: TDES/DES Initial Vector High Word Register for Channel 0 */
  115. __IO uint32_t TDES0_IVL; /*!< Offset: 0x224: TDES/DES Initial Vector Low Word Register for Channel 0 */
  116. __IO uint32_t TDES0_SADDR; /*!< Offset: 0x228: TDES/DES DMA Source Address Register for Channel 0 */
  117. __IO uint32_t TDES0_DADDR; /*!< Offset: 0x22C: TDES/DES DMA Destination Address Register for Channel 0 */
  118. __IO uint32_t TDES0_CNT; /*!< Offset: 0x230: TDES/DES Byte Count Register for Channel 0 */
  119. __IO uint32_t TDES_DATIN; /*!< Offset: 0x234: TDES/DES Engine Input data Word Register */
  120. __IO uint32_t TDES_DATOUT; /*!< Offset: 0x238: TDES/DES Engine Output data Word Register */
  121. uint32_t RESERVE2[3];
  122. __IO uint32_t TDES1_KEY1H; /*!< Offset: 0x248: TDES/DES Key 1 High Word Register for Channel 1 */
  123. __IO uint32_t TDES1_KEY1L; /*!< Offset: 0x24C: TDES/DES Key 1 Low Word Register for Channel 1 */
  124. __IO uint32_t TDES1_KEY2H; /*!< Offset: 0x250: TDES/DES Key 2 High Word Register for Channel 1 */
  125. __IO uint32_t TDES1_KEY2L; /*!< Offset: 0x254: TDES/DES Key 2 Low Word Register for Channel 1 */
  126. __IO uint32_t TDES1_KEY3H; /*!< Offset: 0x258: TDES/DES Key 3 High Word Register for Channel 1 */
  127. __IO uint32_t TDES1_KEY3L; /*!< Offset: 0x25C: TDES/DES Key 3 Low Word Register for Channel 1 */
  128. __IO uint32_t TDES1_IVH; /*!< Offset: 0x260: TDES/DES Initial Vector High Word Register for Channel 1 */
  129. __IO uint32_t TDES1_IVL; /*!< Offset: 0x264: TDES/DES Initial Vector Low Word Register for Channel 1 */
  130. __IO uint32_t TDES1_SADDR; /*!< Offset: 0x268: TDES/DES DMA Source Address Register for Channel 1 */
  131. __IO uint32_t TDES1_DADDR; /*!< Offset: 0x26C: TDES/DES DMA Destination Address Register for Channel 1 */
  132. __IO uint32_t TDES1_CNT; /*!< Offset: 0x270: TDES/DES Byte Count Register for Channel 1 */
  133. uint32_t RESERVE3[5];
  134. __IO uint32_t TDES2_KEY1H; /*!< Offset: 0x288: TDES/DES Key 1 High Word Register for Channel 2 */
  135. __IO uint32_t TDES2_KEY1L; /*!< Offset: 0x28C: TDES/DES Key 1 Low Word Register for Channel 2 */
  136. __IO uint32_t TDES2_KEY2H; /*!< Offset: 0x290: TDES/DES Key 2 High Word Register for Channel 2 */
  137. __IO uint32_t TDES2_KEY2L; /*!< Offset: 0x294: TDES/DES Key 2 Low Word Register for Channel 2 */
  138. __IO uint32_t TDES2_KEY3H; /*!< Offset: 0x298: TDES/DES Key 3 High Word Register for Channel 2 */
  139. __IO uint32_t TDES2_KEY3L; /*!< Offset: 0x29C: TDES/DES Key 3 Low Word Register for Channel 2 */
  140. __IO uint32_t TDES2_IVH; /*!< Offset: 0x2A0: TDES/DES Initial Vector High Word Register for Channel 2 */
  141. __IO uint32_t TDES2_IVL; /*!< Offset: 0x2A4: TDES/DES Initial Vector Low Word Register for Channel 2 */
  142. __IO uint32_t TDES2_SADDR; /*!< Offset: 0x2A8: TDES/DES DMA Source Address Register for Channel 2 */
  143. __IO uint32_t TDES2_DADDR; /*!< Offset: 0x2AC: TDES/DES DMA Destination Address Register for Channel 2 */
  144. __IO uint32_t TDES2_CNT; /*!< Offset: 0x2B0: TDES/DES Byte Count Register for Channel 2 */
  145. uint32_t RESERVE4[5];
  146. __IO uint32_t TDES3_KEY1H; /*!< Offset: 0x2C8: TDES/DES Key 1 High Word Register for Channel 3 */
  147. __IO uint32_t TDES3_KEY1L; /*!< Offset: 0x2CC: TDES/DES Key 1 Low Word Register for Channel 3 */
  148. __IO uint32_t TDES3_KEY2H; /*!< Offset: 0x2D0: TDES/DES Key 2 High Word Register for Channel 3 */
  149. __IO uint32_t TDES3_KEY2L; /*!< Offset: 0x2D4: TDES/DES Key 2 Low Word Register for Channel 3 */
  150. __IO uint32_t TDES3_KEY3H; /*!< Offset: 0x2D8: TDES/DES Key 3 High Word Register for Channel 3 */
  151. __IO uint32_t TDES3_KEY3L; /*!< Offset: 0x2DC: TDES/DES Key 3 Low Word Register for Channel 3 */
  152. __IO uint32_t TDES3_IVH; /*!< Offset: 0x2E0: TDES/DES Initial Vector High Word Register for Channel 3 */
  153. __IO uint32_t TDES3_IVL; /*!< Offset: 0x2E4: TDES/DES Initial Vector Low Word Register for Channel 3 */
  154. __IO uint32_t TDES3_SADDR; /*!< Offset: 0x2E8: TDES/DES DMA Source Address Register for Channel 3 */
  155. __IO uint32_t TDES3_DADDR; /*!< Offset: 0x2EC: TDES/DES DMA Destination Address Register for Channel 3 */
  156. __IO uint32_t TDES3_CNT; /*!< Offset: 0x2F0: TDES/DES Byte Count Register for Channel 3 */
  157. uint32_t RESERVE5[3];
  158. __IO uint32_t HMAC_CTL; /*!< Offset: 0x300: SHA/HMAC Control Register */
  159. __IO uint32_t HMAC_STS; /*!< Offset: 0x304: SHA/HMAC Status Register */
  160. __IO uint32_t HMAC_DGST0; /*!< Offset: 0x308: SHA/HMAC Digest Message 0 */
  161. __IO uint32_t HMAC_DGST1; /*!< Offset: 0x30C: SHA/HMAC Digest Message 1 */
  162. __IO uint32_t HMAC_DGST2; /*!< Offset: 0x310: SHA/HMAC Digest Message 2 */
  163. __IO uint32_t HMAC_DGST3; /*!< Offset: 0x314: SHA/HMAC Digest Message 3 */
  164. __IO uint32_t HMAC_DGST4; /*!< Offset: 0x318: SHA/HMAC Digest Message 4 */
  165. __IO uint32_t HMAC_DGST5; /*!< Offset: 0x31C: SHA/HMAC Digest Message 5 */
  166. __IO uint32_t HMAC_DGST6; /*!< Offset: 0x320: SHA/HMAC Digest Message 6 */
  167. __IO uint32_t HMAC_DGST7; /*!< Offset: 0x324: SHA/HMAC Digest Message 7 */
  168. __IO uint32_t HMAC_DGST8; /*!< Offset: 0x328: SHA/HMAC Digest Message 8 */
  169. __IO uint32_t HMAC_DGST9; /*!< Offset: 0x32C: SHA/HMAC Digest Message 9 */
  170. __IO uint32_t HMAC_DGST10; /*!< Offset: 0x330: SHA/HMAC Digest Message 10 */
  171. __IO uint32_t HMAC_DGST11; /*!< Offset: 0x334: SHA/HMAC Digest Message 11 */
  172. __IO uint32_t HMAC_DGST12; /*!< Offset: 0x338: SHA/HMAC Digest Message 12 */
  173. __IO uint32_t HMAC_DGST13; /*!< Offset: 0x33C: SHA/HMAC Digest Message 13 */
  174. __IO uint32_t HMAC_DGST14; /*!< Offset: 0x340: SHA/HMAC Digest Message 14 */
  175. __IO uint32_t HMAC_DGST15; /*!< Offset: 0x344: SHA/HMAC Digest Message 15 */
  176. __IO uint32_t HMAC_KEYCNT; /*!< Offset: 0x348: SHA/HMAC Key Byte Count */
  177. __IO uint32_t HMAC_SADDR; /*!< Offset: 0x34C: SHA/HMAC DMA Source Address Register */
  178. __IO uint32_t HMAC_DMACNT; /*!< Offset: 0x350: SHA/HMAC Byte Count Register */
  179. __IO uint32_t HMAC_DATIN; /*!< Offset: 0x354: SHA/HMAC Engine Non-DMA Mode Data Input Port Register */
  180. } CRPT_T;
  181. #define CRPT ((CRPT_T *) CRPT_BA)
  182. /**
  183. @addtogroup CRPT_CONST CRPT Bit Field Definition
  184. Constant Definitions for CRPT Controller
  185. @{ */
  186. #define CRPT_INTEN_AESIEN_Pos (0) /*!< CRPT INTEN: AESIEN Position */
  187. #define CRPT_INTEN_AESIEN_Msk (0x1ul << CRPT_INTEN_AESIEN_Pos) /*!< CRPT INTEN: AESIEN Mask */
  188. #define CRPT_INTEN_AESERRIEN_Pos (1) /*!< CRPT INTEN: AESERRIEN Position */
  189. #define CRPT_INTEN_AESERRIEN_Msk (0x1ul << CRPT_INTEN_AESERRIEN_Pos) /*!< CRPT INTEN: AESERRIEN Mask */
  190. #define CRPT_INTEN_TDESIEN_Pos (8) /*!< CRPT INTEN: TDESIEN Position */
  191. #define CRPT_INTEN_TDESIEN_Msk (0x1ul << CRPT_INTEN_TDESIEN_Pos) /*!< CRPT INTEN: TDESIEN Mask */
  192. #define CRPT_INTEN_TDESERRIEN_Pos (9) /*!< CRPT INTEN: TDESERRIEN Position */
  193. #define CRPT_INTEN_TDESERRIEN_Msk (0x1ul << CRPT_INTEN_TDESERRIEN_Pos) /*!< CRPT INTEN: TDESERRIEN Mask */
  194. #define CRPT_INTEN_PRNGIEN_Pos (16) /*!< CRPT INTEN: PRNGIEN Position */
  195. #define CRPT_INTEN_PRNGIEN_Msk (0x1ul << CRPT_INTEN_PRNGIEN_Pos) /*!< CRPT INTEN: PRNGIEN Mask */
  196. #define CRPT_INTEN_SHAIEN_Pos (24) /*!< CRPT INTEN: SHAIEN Position */
  197. #define CRPT_INTEN_SHAIEN_Msk (0x1ul << CRPT_INTEN_SHAIEN_Pos) /*!< CRPT INTEN: SHAIEN Mask */
  198. #define CRPT_INTEN_SHAERRIEN_Pos (25) /*!< CRPT INTEN: SHAERRIEN Position */
  199. #define CRPT_INTEN_SHAERRIEN_Msk (0x1ul << CRPT_INTEN_SHAERRIEN_Pos) /*!< CRPT INTEN: SHAERRIEN Mask */
  200. #define CRPT_INTSTS_AESIF_Pos (0) /*!< CRPT INTSTS: AESIF Position */
  201. #define CRPT_INTSTS_AESIF_Msk (0x1ul << CRPT_INTSTS_AESIF_Pos) /*!< CRPT INTSTS: AESIF Mask */
  202. #define CRPT_INTSTS_AESERRIF_Pos (1) /*!< CRPT INTSTS: AESERRIF Position */
  203. #define CRPT_INTSTS_AESERRIF_Msk (0x1ul << CRPT_INTSTS_AESERRIF_Pos) /*!< CRPT INTSTS: AESERRIF Mask */
  204. #define CRPT_INTSTS_TDESIF_Pos (8) /*!< CRPT INTSTS: TDESIF Position */
  205. #define CRPT_INTSTS_TDESIF_Msk (0x1ul << CRPT_INTSTS_TDESIF_Pos) /*!< CRPT INTSTS: TDESIF Mask */
  206. #define CRPT_INTSTS_TDESERRIF_Pos (9) /*!< CRPT INTSTS: TDESERRIF Position */
  207. #define CRPT_INTSTS_TDESERRIF_Msk (0x1ul << CRPT_INTSTS_TDESERRIF_Pos) /*!< CRPT INTSTS: TDESERRIF Mask */
  208. #define CRPT_INTSTS_PRNGIF_Pos (16) /*!< CRPT INTSTS: PRNGIF Position */
  209. #define CRPT_INTSTS_PRNGIF_Msk (0x1ul << CRPT_INTSTS_PRNGIF_Pos) /*!< CRPT INTSTS: PRNGIF Mask */
  210. #define CRPT_INTSTS_SHAIF_Pos (24) /*!< CRPT INTSTS: SHAIF Position */
  211. #define CRPT_INTSTS_SHAIF_Msk (0x1ul << CRPT_INTSTS_SHAIF_Pos) /*!< CRPT INTSTS: SHAIF Mask */
  212. #define CRPT_INTSTS_SHAERRIF_Pos (25) /*!< CRPT INTSTS: SHAERRIF Position */
  213. #define CRPT_INTSTS_SHAERRIF_Msk (0x1ul << CRPT_INTSTS_SHAERRIF_Pos) /*!< CRPT INTSTS: SHAERRIF Mask */
  214. #define CRPT_PRNG_CTL_START_Pos (0) /*!< CRPT PRNG_CTL: START Position */
  215. #define CRPT_PRNG_CTL_START_Msk (0x1ul << CRPT_PRNG_CTL_START_Pos) /*!< CRPT PRNG_CTL: START Mask */
  216. #define CRPT_PRNG_CTL_SEEDRLD_Pos (1) /*!< CRPT PRNG_CTL: SEEDRLD Position */
  217. #define CRPT_PRNG_CTL_SEEDRLD_Msk (0x1ul << CRPT_PRNG_CTL_SEEDRLD_Pos) /*!< CRPT PRNG_CTL: SEEDRLD Mask */
  218. #define CRPT_PRNG_CTL_KEYSZ_Pos (2) /*!< CRPT PRNG_CTL: KEYSZ Position */
  219. #define CRPT_PRNG_CTL_KEYSZ_Msk (0x3ul << CRPT_PRNG_CTL_KEYSZ_Pos) /*!< CRPT PRNG_CTL: KEYSZ Mask */
  220. #define CRPT_PRNG_CTL_BUSY_Pos (8) /*!< CRPT PRNG_CTL: BUSY Position */
  221. #define CRPT_PRNG_CTL_BUSY_Msk (0x1ul << CRPT_PRNG_CTL_BUSY_Pos) /*!< CRPT PRNG_CTL: BUSY Mask */
  222. #define CRPT_AES_CTL_START_Pos (0) /*!< CRPT AES_CTL: START Position */
  223. #define CRPT_AES_CTL_START_Msk (0x1ul << CRPT_AES_CTL_START_Pos) /*!< CRPT AES_CTL: START Mask */
  224. #define CRPT_AES_CTL_STOP_Pos (1) /*!< CRPT AES_CTL: STOP Position */
  225. #define CRPT_AES_CTL_STOP_Msk (0x1ul << CRPT_AES_CTL_STOP_Pos) /*!< CRPT AES_CTL: STOP Mask */
  226. #define CRPT_AES_CTL_KEYSZ_Pos (2) /*!< CRPT AES_CTL: KEYSZ Position */
  227. #define CRPT_AES_CTL_KEYSZ_Msk (0x3ul << CRPT_AES_CTL_KEYSZ_Pos) /*!< CRPT AES_CTL: KEYSZ Mask */
  228. #define CRPT_AES_CTL_DMALAST_Pos (5) /*!< CRPT AES_CTL: DMALAST Position */
  229. #define CRPT_AES_CTL_DMALAST_Msk (0x1ul << CRPT_AES_CTL_DMALAST_Pos) /*!< CRPT AES_CTL: DMALAST Mask */
  230. #define CRPT_AES_CTL_DMACSCAD_Pos (6) /*!< CRPT AES_CTL: DMACSCAD Position */
  231. #define CRPT_AES_CTL_DMACSCAD_Msk (0x1ul << CRPT_AES_CTL_DMACSCAD_Pos) /*!< CRPT AES_CTL: DMACSCAD Mask */
  232. #define CRPT_AES_CTL_DMAEN_Pos (7) /*!< CRPT AES_CTL: DMAEN Position */
  233. #define CRPT_AES_CTL_DMAEN_Msk (0x1ul << CRPT_AES_CTL_DMAEN_Pos) /*!< CRPT AES_CTL: DMAEN Mask */
  234. #define CRPT_AES_CTL_OPMODE_Pos (8) /*!< CRPT AES_CTL: OPMODE Position */
  235. #define CRPT_AES_CTL_OPMODE_Msk (0xfful << CRPT_AES_CTL_OPMODE_Pos) /*!< CRPT AES_CTL: OPMODE Mask */
  236. #define CRPT_AES_CTL_ENCRPT_Pos (16) /*!< CRPT AES_CTL: ENCRPT Position */
  237. #define CRPT_AES_CTL_ENCRPT_Msk (0x1ul << CRPT_AES_CTL_ENCRPT_Pos) /*!< CRPT AES_CTL: ENCRPT Mask */
  238. #define CRPT_AES_CTL_OUTSWAP_Pos (22) /*!< CRPT AES_CTL: OUTSWAP Position */
  239. #define CRPT_AES_CTL_OUTSWAP_Msk (0x1ul << CRPT_AES_CTL_OUTSWAP_Pos) /*!< CRPT AES_CTL: OUTSWAP Mask */
  240. #define CRPT_AES_CTL_INSWAP_Pos (23) /*!< CRPT AES_CTL: INSWAP Position */
  241. #define CRPT_AES_CTL_INSWAP_Msk (0x1ul << CRPT_AES_CTL_INSWAP_Pos) /*!< CRPT AES_CTL: INSWAP Mask */
  242. #define CRPT_AES_CTL_CHANNEL_Pos (24) /*!< CRPT AES_CTL: CHANNEL Position */
  243. #define CRPT_AES_CTL_CHANNEL_Msk (0x3ul << CRPT_AES_CTL_CHANNEL_Pos) /*!< CRPT AES_CTL: CHANNEL Mask */
  244. #define CRPT_AES_CTL_KEYUNPRT_Pos (26) /*!< CRPT AES_CTL: KEYUNPRT Position */
  245. #define CRPT_AES_CTL_KEYUNPRT_Msk (0x1ful << CRPT_AES_CTL_KEYUNPRT_Pos) /*!< CRPT AES_CTL: KEYUNPRT Mask */
  246. #define CRPT_AES_CTL_KEYPRT_Pos (31) /*!< CRPT AES_CTL: KEYPRT Position */
  247. #define CRPT_AES_CTL_KEYPRT_Msk (0x1ul << CRPT_AES_CTL_KEYPRT_Pos) /*!< CRPT AES_CTL: KEYPRT Mask */
  248. #define CRPT_AES_STS_BUSY_Pos (0) /*!< CRPT AES_STS: BUSY Position */
  249. #define CRPT_AES_STS_BUSY_Msk (0x1ul << CRPT_AES_STS_BUSY_Pos) /*!< CRPT AES_STS: BUSY Mask */
  250. #define CRPT_AES_STS_INBUFEMPTY_Pos (8) /*!< CRPT AES_STS: INBUFEMPTY Position */
  251. #define CRPT_AES_STS_INBUFEMPTY_Msk (0x1ul << CRPT_AES_STS_INBUFEMPTY_Pos) /*!< CRPT AES_STS: INBUFEMPTY Mask */
  252. #define CRPT_AES_STS_INBUFFULL_Pos (9) /*!< CRPT AES_STS: INBUFFULL Position */
  253. #define CRPT_AES_STS_INBUFFULL_Msk (0x1ul << CRPT_AES_STS_INBUFFULL_Pos) /*!< CRPT AES_STS: INBUFFULL Mask */
  254. #define CRPT_AES_STS_INBUFERR_Pos (10) /*!< CRPT AES_STS: INBUFERR Position */
  255. #define CRPT_AES_STS_INBUFERR_Msk (0x1ul << CRPT_AES_STS_INBUFERR_Pos) /*!< CRPT AES_STS: INBUFERR Mask */
  256. #define CRPT_AES_STS_CNTERR_Pos (12) /*!< CRPT AES_STS: CNTERR Position */
  257. #define CRPT_AES_STS_CNTERR_Msk (0x1ul << CRPT_AES_STS_CNTERR_Pos) /*!< CRPT AES_STS: CNTERR Mask */
  258. #define CRPT_AES_STS_OUTBUFEMPTY_Pos (16) /*!< CRPT AES_STS: OUTBUFEMPTY Position */
  259. #define CRPT_AES_STS_OUTBUFEMPTY_Msk (0x1ul << CRPT_AES_STS_OUTBUFEMPTY_Pos) /*!< CRPT AES_STS: OUTBUFEMPTY Mask */
  260. #define CRPT_AES_STS_OUTBUFFULL_Pos (17) /*!< CRPT AES_STS: OUTBUFFULL Position */
  261. #define CRPT_AES_STS_OUTBUFFULL_Msk (0x1ul << CRPT_AES_STS_OUTBUFFULL_Pos) /*!< CRPT AES_STS: OUTBUFFULL Mask */
  262. #define CRPT_AES_STS_OUTBUFERR_Pos (18) /*!< CRPT AES_STS: OUTBUFERR Position */
  263. #define CRPT_AES_STS_OUTBUFERR_Msk (0x1ul << CRPT_AES_STS_OUTBUFERR_Pos) /*!< CRPT AES_STS: OUTBUFERR Mask */
  264. #define CRPT_AES_STS_BUSERR_Pos (20) /*!< CRPT AES_STS: BUSERR Position */
  265. #define CRPT_AES_STS_BUSERR_Msk (0x1ul << CRPT_AES_STS_BUSERR_Pos) /*!< CRPT AES_STS: BUSERR Mask */
  266. #define CRPT_TDES_CTL_START_Pos (0) /*!< CRPT TDES_CTL: START Position */
  267. #define CRPT_TDES_CTL_START_Msk (0x1ul << CRPT_TDES_CTL_START_Pos) /*!< CRPT TDES_CTL: START Mask */
  268. #define CRPT_TDES_CTL_STOP_Pos (1) /*!< CRPT TDES_CTL: STOP Position */
  269. #define CRPT_TDES_CTL_STOP_Msk (0x1ul << CRPT_TDES_CTL_STOP_Pos) /*!< CRPT TDES_CTL: STOP Mask */
  270. #define CRPT_TDES_CTL_TMODE_Pos (2) /*!< CRPT TDES_CTL: TMODE Position */
  271. #define CRPT_TDES_CTL_TMODE_Msk (0x1ul << CRPT_TDES_CTL_TMODE_Pos) /*!< CRPT TDES_CTL: TMODE Mask */
  272. #define CRPT_TDES_CTL_3KEYS_Pos (3) /*!< CRPT TDES_CTL: 3KEYS Position */
  273. #define CRPT_TDES_CTL_3KEYS_Msk (0x1ul << CRPT_TDES_CTL_3KEYS_Pos) /*!< CRPT TDES_CTL: 3KEYS Mask */
  274. #define CRPT_TDES_CTL_DMALAST_Pos (5) /*!< CRPT TDES_CTL: DMALAST Position */
  275. #define CRPT_TDES_CTL_DMALAST_Msk (0x1ul << CRPT_TDES_CTL_DMALAST_Pos) /*!< CRPT TDES_CTL: DMALAST Mask */
  276. #define CRPT_TDES_CTL_DMACSCAD_Pos (6) /*!< CRPT TDES_CTL: DMACSCAD Position */
  277. #define CRPT_TDES_CTL_DMACSCAD_Msk (0x1ul << CRPT_TDES_CTL_DMACSCAD_Pos) /*!< CRPT TDES_CTL: DMACSCAD Mask */
  278. #define CRPT_TDES_CTL_DMAEN_Pos (7) /*!< CRPT TDES_CTL: DMAEN Position */
  279. #define CRPT_TDES_CTL_DMAEN_Msk (0x1ul << CRPT_TDES_CTL_DMAEN_Pos) /*!< CRPT TDES_CTL: DMAEN Mask */
  280. #define CRPT_TDES_CTL_OPMODE_Pos (8) /*!< CRPT TDES_CTL: OPMODE Position */
  281. #define CRPT_TDES_CTL_OPMODE_Msk (0x7ul << CRPT_TDES_CTL_OPMODE_Pos) /*!< CRPT TDES_CTL: OPMODE Mask */
  282. #define CRPT_TDES_CTL_ENCRPT_Pos (16) /*!< CRPT TDES_CTL: ENCRPT Position */
  283. #define CRPT_TDES_CTL_ENCRPT_Msk (0x1ul << CRPT_TDES_CTL_ENCRPT_Pos) /*!< CRPT TDES_CTL: ENCRPT Mask */
  284. #define CRPT_TDES_CTL_BLKSWAP_Pos (21) /*!< CRPT TDES_CTL: BLKSWAP Position */
  285. #define CRPT_TDES_CTL_BLKSWAP_Msk (0x1ul << CRPT_TDES_CTL_BLKSWAP_Pos) /*!< CRPT TDES_CTL: BLKSWAP Mask */
  286. #define CRPT_TDES_CTL_OUTSWAP_Pos (22) /*!< CRPT TDES_CTL: OUTSWAP Position */
  287. #define CRPT_TDES_CTL_OUTSWAP_Msk (0x1ul << CRPT_TDES_CTL_OUTSWAP_Pos) /*!< CRPT TDES_CTL: OUTSWAP Mask */
  288. #define CRPT_TDES_CTL_INSWAP_Pos (23) /*!< CRPT TDES_CTL: INSWAP Position */
  289. #define CRPT_TDES_CTL_INSWAP_Msk (0x1ul << CRPT_TDES_CTL_INSWAP_Pos) /*!< CRPT TDES_CTL: INSWAP Mask */
  290. #define CRPT_TDES_CTL_CHANNEL_Pos (24) /*!< CRPT TDES_CTL: CHANNEL Position */
  291. #define CRPT_TDES_CTL_CHANNEL_Msk (0x3ul << CRPT_TDES_CTL_CHANNEL_Pos) /*!< CRPT TDES_CTL: CHANNEL Mask */
  292. #define CRPT_TDES_CTL_KEYUNPRT_Pos (26) /*!< CRPT TDES_CTL: KEYUNPRT Position */
  293. #define CRPT_TDES_CTL_KEYUNPRT_Msk (0x1ful << CRPT_TDES_CTL_KEYUNPRT_Pos) /*!< CRPT TDES_CTL: KEYUNPRT Mask */
  294. #define CRPT_TDES_CTL_KEYPRT_Pos (31) /*!< CRPT TDES_CTL: KEYPRT Position */
  295. #define CRPT_TDES_CTL_KEYPRT_Msk (0x1ul << CRPT_TDES_CTL_KEYPRT_Pos) /*!< CRPT TDES_CTL: KEYPRT Mask */
  296. #define CRPT_TDES_STS_BUSY_Pos (0) /*!< CRPT TDES_STS: BUSY Position */
  297. #define CRPT_TDES_STS_BUSY_Msk (0x1ul << CRPT_TDES_STS_BUSY_Pos) /*!< CRPT TDES_STS: BUSY Mask */
  298. #define CRPT_TDES_STS_INBUFEMPTY_Pos (8) /*!< CRPT TDES_STS: INBUFEMPTY Position */
  299. #define CRPT_TDES_STS_INBUFEMPTY_Msk (0x1ul << CRPT_TDES_STS_INBUFEMPTY_Pos) /*!< CRPT TDES_STS: INBUFEMPTY Mask */
  300. #define CRPT_TDES_STS_INBUFFULL_Pos (9) /*!< CRPT TDES_STS: INBUFFULL Position */
  301. #define CRPT_TDES_STS_INBUFFULL_Msk (0x1ul << CRPT_TDES_STS_INBUFFULL_Pos) /*!< CRPT TDES_STS: INBUFFULL Mask */
  302. #define CRPT_TDES_STS_INBUFERR_Pos (10) /*!< CRPT TDES_STS: INBUFERR Position */
  303. #define CRPT_TDES_STS_INBUFERR_Msk (0x1ul << CRPT_TDES_STS_INBUFERR_Pos) /*!< CRPT TDES_STS: INBUFERR Mask */
  304. #define CRPT_TDES_STS_OUTBUFEMPTY_Pos (16) /*!< CRPT TDES_STS: OUTBUFEMPTY Position */
  305. #define CRPT_TDES_STS_OUTBUFEMPTY_Msk (0x1ul << CRPT_TDES_STS_OUTBUFEMPTY_Pos) /*!< CRPT TDES_STS: OUTBUFEMPTY Mask */
  306. #define CRPT_TDES_STS_OUTBUFFULL_Pos (17) /*!< CRPT TDES_STS: OUTBUFFULL Position */
  307. #define CRPT_TDES_STS_OUTBUFFULL_Msk (0x1ul << CRPT_TDES_STS_OUTBUFFULL_Pos) /*!< CRPT TDES_STS: OUTBUFFULL Mask */
  308. #define CRPT_TDES_STS_OUTBUFERR_Pos (18) /*!< CRPT TDES_STS: OUTBUFERR Position */
  309. #define CRPT_TDES_STS_OUTBUFERR_Msk (0x1ul << CRPT_TDES_STS_OUTBUFERR_Pos) /*!< CRPT TDES_STS: OUTBUFERR Mask */
  310. #define CRPT_TDES_STS_BUSERR_Pos (20) /*!< CRPT TDES_STS: BUSERR Position */
  311. #define CRPT_TDES_STS_BUSERR_Msk (0x1ul << CRPT_TDES_STS_BUSERR_Pos) /*!< CRPT TDES_STS: BUSERR Mask */
  312. #define CRPT_HMAC_CTL_START_Pos (0) /*!< CRPT HMAC_CTL: START Position */
  313. #define CRPT_HMAC_CTL_START_Msk (0x1ul << CRPT_HMAC_CTL_START_Pos) /*!< CRPT HMAC_CTL: START Mask */
  314. #define CRPT_HMAC_CTL_STOP_Pos (1) /*!< CRPT HMAC_CTL: STOP Position */
  315. #define CRPT_HMAC_CTL_STOP_Msk (0x1ul << CRPT_HMAC_CTL_STOP_Pos) /*!< CRPT HMAC_CTL: STOP Mask */
  316. #define CRPT_HMAC_CTL_HMACEN_Pos (4) /*!< CRPT HMAC_CTL: HMACEN Position */
  317. #define CRPT_HMAC_CTL_HMACEN_Msk (0x1ul << CRPT_HMAC_CTL_HMACEN_Pos) /*!< CRPT HMAC_CTL: HMACEN Mask */
  318. #define CRPT_HMAC_CTL_DMALAST_Pos (5) /*!< CRPT HMAC_CTL: DMALAST Position */
  319. #define CRPT_HMAC_CTL_DMALAST_Msk (0x1ul << CRPT_HMAC_CTL_DMALAST_Pos) /*!< CRPT HMAC_CTL: DMALAST Mask */
  320. #define CRPT_HMAC_CTL_DMAEN_Pos (7) /*!< CRPT HMAC_CTL: DMAEN Position */
  321. #define CRPT_HMAC_CTL_DMAEN_Msk (0x1ul << CRPT_HMAC_CTL_DMAEN_Pos) /*!< CRPT HMAC_CTL: DMAEN Mask */
  322. #define CRPT_HMAC_CTL_OPMODE_Pos (8) /*!< CRPT HMAC_CTL: OPMODE Position */
  323. #define CRPT_HMAC_CTL_OPMODE_Msk (0x7ul << CRPT_HMAC_CTL_OPMODE_Pos) /*!< CRPT HMAC_CTL: OPMODE Mask */
  324. #define CRPT_HMAC_CTL_COMPEN_Pos (15) /*!< CRPT HMAC_CTL: COMPEN Position */
  325. #define CRPT_HMAC_CTL_COMPEN_Msk (0x1ul << CRPT_HMAC_CTL_COMPEN_Pos) /*!< CRPT HMAC_CTL: COMPEN Mask */
  326. #define CRPT_HMAC_CTL_OUTSWAP_Pos (22) /*!< CRPT HMAC_CTL: OUTSWAP Position */
  327. #define CRPT_HMAC_CTL_OUTSWAP_Msk (0x1ul << CRPT_HMAC_CTL_OUTSWAP_Pos) /*!< CRPT HMAC_CTL: OUTSWAP Mask */
  328. #define CRPT_HMAC_CTL_INSWAP_Pos (23) /*!< CRPT HMAC_CTL: INSWAP Position */
  329. #define CRPT_HMAC_CTL_INSWAP_Msk (0x1ul << CRPT_HMAC_CTL_INSWAP_Pos) /*!< CRPT HMAC_CTL: INSWAP Mask */
  330. #define CRPT_HMAC_STS_BUSY_Pos (0) /*!< CRPT HMAC_STS: BUSY Position */
  331. #define CRPT_HMAC_STS_BUSY_Msk (0x1ul << CRPT_HMAC_STS_BUSY_Pos) /*!< CRPT HMAC_STS: BUSY Mask */
  332. #define CRPT_HMAC_STS_DMABUSY_Pos (1) /*!< CRPT HMAC_STS: DMABUSY Position */
  333. #define CRPT_HMAC_STS_DMABUSY_Msk (0x1ul << CRPT_HMAC_STS_DMABUSY_Pos) /*!< CRPT HMAC_STS: DMABUSY Mask */
  334. #define CRPT_HMAC_STS_DMAERR_Pos (8) /*!< CRPT HMAC_STS: DMAERR Position */
  335. #define CRPT_HMAC_STS_DMAERR_Msk (0x1ul << CRPT_HMAC_STS_DMAERR_Pos) /*!< CRPT HMAC_STS: DMAERR Mask */
  336. #define CRPT_HMAC_STS_COMPRES_Pos (15) /*!< CRPT HMAC_STS: COMPRES Position */
  337. #define CRPT_HMAC_STS_COMPRES_Msk (0x1ul << CRPT_HMAC_STS_COMPRES_Pos) /*!< CRPT HMAC_STS: COMPRES Mask */
  338. #define CRPT_HMAC_STS_DATINREQ_Pos (16) /*!< CRPT HMAC_STS: DATINREQ Position */
  339. #define CRPT_HMAC_STS_DATINREQ_Msk (0x1ul << CRPT_HMAC_STS_DATINREQ_Pos) /*!< CRPT HMAC_STS: DATINREQ Mask */
  340. /// @endcond HIDDEN_SYMBOLS
  341. /** @addtogroup N9H30_CRYPTO_EXPORTED_CONSTANTS CRYPTO Exported Constants
  342. @{
  343. */
  344. #define PRNG_KEY_SIZE_64 0 /*!< Select to generate 64-bit random key \hideinitializer */
  345. #define PRNG_KEY_SIZE_128 1 /*!< Select to generate 128-bit random key \hideinitializer */
  346. #define PRNG_KEY_SIZE_192 2 /*!< Select to generate 192-bit random key \hideinitializer */
  347. #define PRNG_KEY_SIZE_256 3 /*!< Select to generate 256-bit random key \hideinitializer */
  348. #define PRNG_SEED_CONT 0 /*!< PRNG using current seed \hideinitializer */
  349. #define PRNG_SEED_RELOAD 1 /*!< PRNG reload new seed \hideinitializer */
  350. #define AES_KEY_SIZE_128 0 /*!< AES select 128-bit key length \hideinitializer */
  351. #define AES_KEY_SIZE_192 1 /*!< AES select 192-bit key length \hideinitializer */
  352. #define AES_KEY_SIZE_256 2 /*!< AES select 256-bit key length \hideinitializer */
  353. #define AES_MODE_ECB 0 /*!< AES select ECB mode \hideinitializer */
  354. #define AES_MODE_CBC 1 /*!< AES select CBC mode \hideinitializer */
  355. #define AES_MODE_CFB 2 /*!< AES select CFB mode \hideinitializer */
  356. #define AES_MODE_OFB 3 /*!< AES select OFB mode \hideinitializer */
  357. #define AES_MODE_CTR 4 /*!< AES select CTR mode \hideinitializer */
  358. #define AES_MODE_CBC_CS1 0x10 /*!< AES select CBC CS1 mode \hideinitializer */
  359. #define AES_MODE_CBC_CS2 0x11 /*!< AES select CBC CS2 mode \hideinitializer */
  360. #define AES_MODE_CBC_CS3 0x12 /*!< AES select CBC CS3 mode \hideinitializer */
  361. #define AES_NO_SWAP 0 /*!< AES do not swap input and output data \hideinitializer */
  362. #define AES_OUT_SWAP 1 /*!< AES swap output data \hideinitializer */
  363. #define AES_IN_SWAP 2 /*!< AES swap input data \hideinitializer */
  364. #define AES_IN_OUT_SWAP 3 /*!< AES swap both input and output data \hideinitializer */
  365. #define DES_MODE_ECB 0x000 /*!< DES select ECB mode \hideinitializer */
  366. #define DES_MODE_CBC 0x100 /*!< DES select CBC mode \hideinitializer */
  367. #define DES_MODE_CFB 0x200 /*!< DES select CFB mode \hideinitializer */
  368. #define DES_MODE_OFB 0x300 /*!< DES select OFB mode \hideinitializer */
  369. #define DES_MODE_CTR 0x400 /*!< DES select CTR mode \hideinitializer */
  370. #define TDES_MODE_ECB 0x004 /*!< TDES select ECB mode \hideinitializer */
  371. #define TDES_MODE_CBC 0x104 /*!< TDES select CBC mode \hideinitializer */
  372. #define TDES_MODE_CFB 0x204 /*!< TDES select CFB mode \hideinitializer */
  373. #define TDES_MODE_OFB 0x304 /*!< TDES select OFB mode \hideinitializer */
  374. #define TDES_MODE_CTR 0x404 /*!< TDES select CTR mode \hideinitializer */
  375. #define TDES_NO_SWAP 0 /*!< TDES do not swap data \hideinitializer */
  376. #define TDES_WHL_SWAP 1 /*!< TDES swap high-low word \hideinitializer */
  377. #define TDES_OUT_SWAP 2 /*!< TDES swap output data \hideinitializer */
  378. #define TDES_OUT_WHL_SWAP 3 /*!< TDES swap output data and high-low word \hideinitializer */
  379. #define TDES_IN_SWAP 4 /*!< TDES swap input data \hideinitializer */
  380. #define TDES_IN_WHL_SWAP 5 /*!< TDES swap input data and high-low word \hideinitializer */
  381. #define TDES_IN_OUT_SWAP 6 /*!< TDES swap both input and output data \hideinitializer */
  382. #define TDES_IN_OUT_WHL_SWAP 7 /*!< TDES swap input, output and high-low word \hideinitializer */
  383. #define SHA_MODE_SHA1 0 /*!< SHA select SHA-1 160-bit \hideinitializer */
  384. #define SHA_MODE_SHA224 5 /*!< SHA select SHA-224 224-bit \hideinitializer */
  385. #define SHA_MODE_SHA256 4 /*!< SHA select SHA-256 256-bit \hideinitializer */
  386. #define SHA_MODE_SHA384 7 /*!< SHA select SHA-384 384-bit \hideinitializer */
  387. #define SHA_MODE_SHA512 6 /*!< SHA select SHA-512 512-bit \hideinitializer */
  388. #define SHA_NO_SWAP 0 /*!< SHA do not swap input and output data \hideinitializer */
  389. #define SHA_OUT_SWAP 1 /*!< SHA swap output data \hideinitializer */
  390. #define SHA_IN_SWAP 2 /*!< SHA swap input data \hideinitializer */
  391. #define SHA_IN_OUT_SWAP 3 /*!< SHA swap both input and output data \hideinitializer */
  392. #define CRYPTO_DMA_FIRST 0x4 /*!< Do first encrypt/decrypt in DMA cascade \hideinitializer */
  393. #define CRYPTO_DMA_ONE_SHOT 0x5 /*!< Do one shot encrypt/decrypt with DMA \hideinitializer */
  394. #define CRYPTO_DMA_CONTINUE 0x6 /*!< Do one continuous encrypt/decrypt with DMA \hideinitializer */
  395. #define CRYPTO_DMA_LAST 0x7 /*!< Do last encrypt/decrypt with DMA \hideinitializer */
  396. /*@}*/ /* end of group N9H30_CRYPTO_EXPORTED_CONSTANTS */
  397. /** @addtogroup N9H30_CRYPTO_EXPORTED_FUNCTIONS CRYPTO Exported Functions
  398. @{
  399. */
  400. /*----------------------------------------------------------------------------------------------*/
  401. /* Macros */
  402. /*----------------------------------------------------------------------------------------------*/
  403. /**
  404. * @brief This macro enables PRNG interrupt.
  405. * @return None
  406. * \hideinitializer
  407. */
  408. #define PRNG_ENABLE_INT() (CRPT->INTEN |= CRPT_INTEN_PRNGIEN_Msk)
  409. /**
  410. * @brief This macro disables PRNG interrupt.
  411. * @return None
  412. * \hideinitializer
  413. */
  414. #define PRNG_DISABLE_INT() (CRPT->INTEN &= ~CRPT_INTEN_PRNGIEN_Msk)
  415. /**
  416. * @brief This macro gets PRNG interrupt flag.
  417. * @return PRNG interrupt flag.
  418. * \hideinitializer
  419. */
  420. #define PRNG_GET_INT_FLAG() (CRPT->INTSTS & CRPT_INTSTS_PRNGIF_Msk)
  421. /**
  422. * @brief This macro clears PRNG interrupt flag.
  423. * @return None
  424. * \hideinitializer
  425. */
  426. #define PRNG_CLR_INT_FLAG() (CRPT->INTSTS = CRPT_INTSTS_PRNGIF_Msk)
  427. /**
  428. * @brief This macro enables AES interrupt.
  429. * @return None
  430. * \hideinitializer
  431. */
  432. #define AES_ENABLE_INT() (CRPT->INTEN |= (CRPT_INTEN_AESIEN_Msk|CRPT_INTEN_AESERRIEN_Msk))
  433. /**
  434. * @brief This macro disables AES interrupt.
  435. * @return None
  436. * \hideinitializer
  437. */
  438. #define AES_DISABLE_INT() (CRPT->INTEN &= ~(CRPT_INTEN_AESIEN_Msk|CRPT_INTEN_AESERRIEN_Msk))
  439. /**
  440. * @brief This macro gets AES interrupt flag.
  441. * @return AES interrupt flag.
  442. * \hideinitializer
  443. */
  444. #define AES_GET_INT_FLAG() (CRPT->INTSTS & (CRPT_INTSTS_AESIF_Msk|CRPT_INTSTS_AESERRIF_Msk))
  445. /**
  446. * @brief This macro clears AES interrupt flag.
  447. * @return None
  448. * \hideinitializer
  449. */
  450. #define AES_CLR_INT_FLAG() (CRPT->INTSTS = (CRPT_INTSTS_AESIF_Msk|CRPT_INTSTS_AESERRIF_Msk))
  451. /**
  452. * @brief This macro enables AES key protection.
  453. * @return None
  454. * \hideinitializer
  455. */
  456. #define AES_ENABLE_KEY_PROTECT() (CRPT->AES_CTL |= CRPT_AES_CTL_KEYPRT_Msk)
  457. /**
  458. * @brief This macro disables AES key protection.
  459. * @return None
  460. * \hideinitializer
  461. */
  462. #define AES_DISABLE_KEY_PROTECT() (CRPT->AES_CTL = (CRPT->AES_CTL & ~CRPT_AES_CTL_KEYPRT_Msk) | (0x16<<CRPT_AES_CTL_KEYUNPRT_Pos))
  463. /**
  464. * @brief This macro enables TDES interrupt.
  465. * @return None
  466. * \hideinitializer
  467. */
  468. #define TDES_ENABLE_INT() (CRPT->INTEN |= (CRPT_INTEN_TDESIEN_Msk|CRPT_INTEN_TDESERRIEN_Msk))
  469. /**
  470. * @brief This macro disables TDES interrupt.
  471. * @return None
  472. * \hideinitializer
  473. */
  474. #define TDES_DISABLE_INT() (CRPT->INTEN &= ~(CRPT_INTEN_TDESIEN_Msk|CRPT_INTEN_TDESERRIEN_Msk))
  475. /**
  476. * @brief This macro gets TDES interrupt flag.
  477. * @return TDES interrupt flag.
  478. * \hideinitializer
  479. */
  480. #define TDES_GET_INT_FLAG() (CRPT->INTSTS & (CRPT_INTSTS_TDESIF_Msk|CRPT_INTSTS_TDESERRIF_Msk))
  481. /**
  482. * @brief This macro clears TDES interrupt flag.
  483. * @return None
  484. * \hideinitializer
  485. */
  486. #define TDES_CLR_INT_FLAG() (CRPT->INTSTS = (CRPT_INTSTS_TDESIF_Msk|CRPT_INTSTS_TDESERRIF_Msk))
  487. /**
  488. * @brief This macro enables TDES key protection.
  489. * @return None
  490. * \hideinitializer
  491. */
  492. #define TDES_ENABLE_KEY_PROTECT() (CRPT->TDES_CTL |= CRPT_TDES_CTL_KEYPRT_Msk)
  493. /**
  494. * @brief This macro disables TDES key protection.
  495. * @return None
  496. * \hideinitializer
  497. */
  498. #define TDES_DISABLE_KEY_PROTECT() (CRPT->TDES_CTL = (CRPT->TDES_CTL & ~CRPT_TDES_CTL_KEYPRT_Msk) | (0x16<<CRPT_TDES_CTL_KEYUNPRT_Pos))
  499. /**
  500. * @brief This macro enables SHA interrupt.
  501. * @return None
  502. * \hideinitializer
  503. */
  504. #define SHA_ENABLE_INT() (CRPT->INTEN |= (CRPT_INTEN_SHAIEN_Msk|CRPT_INTEN_SHAERRIEN_Msk))
  505. /**
  506. * @brief This macro disables SHA interrupt.
  507. * @return None
  508. * \hideinitializer
  509. */
  510. #define SHA_DISABLE_INT() (CRPT->INTEN &= ~(CRPT_INTEN_SHAIEN_Msk|CRPT_INTEN_SHAERRIEN_Msk))
  511. /**
  512. * @brief This macro gets SHA interrupt flag.
  513. * @return SHA interrupt flag.
  514. * \hideinitializer
  515. */
  516. #define SHA_GET_INT_FLAG() (CRPT->INTSTS & (CRPT_INTSTS_SHAIF_Msk|CRPT_INTSTS_SHAERRIF_Msk))
  517. /**
  518. * @brief This macro clears SHA interrupt flag.
  519. * @return None
  520. * \hideinitializer
  521. */
  522. #define SHA_CLR_INT_FLAG() (CRPT->INTSTS = (CRPT_INTSTS_SHAIF_Msk|CRPT_INTSTS_SHAERRIF_Msk))
  523. /*---------------------------------------------------------------------------------------------------------*/
  524. /* Functions */
  525. /*---------------------------------------------------------------------------------------------------------*/
  526. void PRNG_Open(uint32_t u32KeySize, uint32_t u32SeedReload, uint32_t u32Seed);
  527. void PRNG_Start(void);
  528. void PRNG_Read(uint32_t u32RandKey[]);
  529. void AES_Open(uint32_t u32Channel, uint32_t u32EncDec, uint32_t u32OpMode, uint32_t u32KeySize, uint32_t u32SwapType);
  530. void AES_Start(int32_t u32Channel, uint32_t u32DMAMode);
  531. void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize);
  532. void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[]);
  533. void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, uint32_t u32DstAddr, uint32_t u32TransCnt);
  534. void TDES_Open(uint32_t u32Channel, uint32_t u32EncDec, int32_t Is3DES, int32_t Is3Key, uint32_t u32OpMode, uint32_t u32SwapType);
  535. void TDES_Start(int32_t u32Channel, uint32_t u32DMAMode);
  536. void TDES_SetKey(uint32_t u32Channel, uint32_t au32Keys[3][2]);
  537. void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL);
  538. void TDES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, uint32_t u32DstAddr, uint32_t u32TransCnt);
  539. void SHA_Open(uint32_t u32OpMode, uint32_t u32SwapType, int hmac_key_len);
  540. void SHA_Start(uint32_t u32DMAMode);
  541. void SHA_SetDMATransfer(uint32_t u32SrcAddr, uint32_t u32TransCnt);
  542. void SHA_Read(uint32_t u32Digest[]);
  543. /*@}*/ /* end of group N9H30_CRYPTO_EXPORTED_FUNCTIONS */
  544. /*@}*/ /* end of group N9H30_CRYPTO_Driver */
  545. /*@}*/ /* end of group N9H30_Device_Driver */
  546. #ifdef __cplusplus
  547. }
  548. #endif
  549. #endif // __NU_CRYPTO_H__
  550. /*** (C) COPYRIGHT 2015 Nuvoton Technology Corp. ***/