lib_crypt.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. /**
  2. ******************************************************************************
  3. * @file lib_crypt.c
  4. * @author Application Team
  5. * @version V4.4.0
  6. * @date 2018-09-27
  7. * @brief CRYPT library.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. ******************************************************************************
  12. */
  13. #include "lib_crypt.h"
  14. /**
  15. * @brief Configure PTRA register, data in this address will be read out to do
  16. * the CRYPT calculation
  17. * @param AddrA: the SRAM address(Bit 14:0)
  18. * @retval None
  19. */
  20. void CRYPT_AddressAConfig(uint16_t AddrA)
  21. {
  22. /* Check parameters */
  23. assert_parameters(IS_CRYPT_ADDR(AddrA));
  24. CRYPT->PTRA = AddrA & CRYPT_PTRA_PTRA;
  25. }
  26. /**
  27. * @brief Configure PTRB register, data in this address will be read out to do
  28. * the CRYPT calculation
  29. * @param AddrB: the SRAM address(Bit 14:0)
  30. * @retval None
  31. */
  32. void CRYPT_AddressBConfig(uint16_t AddrB)
  33. {
  34. /* Check parameters */
  35. assert_parameters(IS_CRYPT_ADDR(AddrB));
  36. CRYPT->PTRB = AddrB & CRYPT_PTRB_PTRB;
  37. }
  38. /**
  39. * @brief Configure PTRO register, The CRYPT engine will write calculation
  40. * result into this address
  41. * @param AddrO: the SRAM address(Bit 14:0)
  42. * @retval None
  43. */
  44. void CRYPT_AddressOConfig(uint16_t AddrO)
  45. {
  46. /* Check parameters */
  47. assert_parameters(IS_CRYPT_ADDR(AddrO));
  48. CRYPT->PTRO = AddrO & CRYPT_PTRO_PTRO;
  49. }
  50. /**
  51. * @brief Get carry/borrow bit of add/sub operation.
  52. * @param None
  53. * @retval carry/borrow bit value
  54. */
  55. uint8_t CRYPT_GetCarryBorrowBit(void)
  56. {
  57. if (CRYPT->CARRY & CRYPT_CARRY_CARRY)
  58. return (1);
  59. else
  60. return (0);
  61. }
  62. /**
  63. * @brief Start addition operation.
  64. * @param Length:
  65. * CRYPT_LENGTH_32
  66. * CRYPT_LENGTH_64
  67. * CRYPT_LENGTH_96
  68. * CRYPT_LENGTH_128
  69. * CRYPT_LENGTH_160
  70. * CRYPT_LENGTH_192
  71. * CRYPT_LENGTH_224
  72. * CRYPT_LENGTH_256
  73. * CRYPT_LENGTH_288
  74. * CRYPT_LENGTH_320
  75. * CRYPT_LENGTH_352
  76. * CRYPT_LENGTH_384
  77. * CRYPT_LENGTH_416
  78. * CRYPT_LENGTH_448
  79. * CRYPT_LENGTH_480
  80. * CRYPT_LENGTH_512
  81. * Nostop:
  82. * CRYPT_STOPCPU
  83. * CRYPT_NOSTOPCPU
  84. * @retval None
  85. */
  86. void CRYPT_StartAdd(uint32_t Length, uint32_t Nostop)
  87. {
  88. /* Check parameters */
  89. assert_parameters(IS_CRYPT_LENGTH(Length));
  90. assert_parameters(IS_CRYPT_NOSTOP(Nostop));
  91. CRYPT->CTRL = (Nostop \
  92. |Length \
  93. |CRYPT_CTRL_MODE_ADD \
  94. |CRYPT_CTRL_ACT);
  95. }
  96. /**
  97. * @brief Start multiplication operation.
  98. * @param Length:
  99. * CRYPT_LENGTH_32
  100. * CRYPT_LENGTH_64
  101. * CRYPT_LENGTH_96
  102. * CRYPT_LENGTH_128
  103. * CRYPT_LENGTH_160
  104. * CRYPT_LENGTH_192
  105. * CRYPT_LENGTH_224
  106. * CRYPT_LENGTH_256
  107. * CRYPT_LENGTH_288
  108. * CRYPT_LENGTH_320
  109. * CRYPT_LENGTH_352
  110. * CRYPT_LENGTH_384
  111. * CRYPT_LENGTH_416
  112. * CRYPT_LENGTH_448
  113. * CRYPT_LENGTH_480
  114. * CRYPT_LENGTH_512
  115. * Nostop:
  116. * CRYPT_STOPCPU
  117. * CRYPT_NOSTOPCPU
  118. * @retval None
  119. */
  120. void CRYPT_StartMultiply(uint32_t Length, uint32_t Nostop)
  121. {
  122. /* Check parameters */
  123. assert_parameters(IS_CRYPT_LENGTH(Length));
  124. assert_parameters(IS_CRYPT_NOSTOP(Nostop));
  125. CRYPT->CTRL = (Nostop \
  126. |Length \
  127. |CRYPT_CTRL_MODE_MULTIPLY \
  128. |CRYPT_CTRL_ACT);
  129. }
  130. /**
  131. * @brief Start subtraction operation.
  132. * @param Length:
  133. * CRYPT_LENGTH_32
  134. * CRYPT_LENGTH_64
  135. * CRYPT_LENGTH_96
  136. * CRYPT_LENGTH_128
  137. * CRYPT_LENGTH_160
  138. * CRYPT_LENGTH_192
  139. * CRYPT_LENGTH_224
  140. * CRYPT_LENGTH_256
  141. * CRYPT_LENGTH_288
  142. * CRYPT_LENGTH_320
  143. * CRYPT_LENGTH_352
  144. * CRYPT_LENGTH_384
  145. * CRYPT_LENGTH_416
  146. * CRYPT_LENGTH_448
  147. * CRYPT_LENGTH_480
  148. * CRYPT_LENGTH_512
  149. * Nostop:
  150. * CRYPT_STOPCPU
  151. * CRYPT_NOSTOPCPU
  152. * @retval None
  153. */
  154. void CRYPT_StartSub(uint32_t Length, uint32_t Nostop)
  155. {
  156. /* Check parameters */
  157. assert_parameters(IS_CRYPT_LENGTH(Length));
  158. assert_parameters(IS_CRYPT_NOSTOP(Nostop));
  159. CRYPT->CTRL = (Nostop \
  160. |Length \
  161. |CRYPT_CTRL_MODE_SUB \
  162. |CRYPT_CTRL_ACT);
  163. }
  164. /**
  165. * @brief Start rigth shift 1-bit operation.
  166. * @param Length:
  167. * CRYPT_LENGTH_32
  168. * CRYPT_LENGTH_64
  169. * CRYPT_LENGTH_96
  170. * CRYPT_LENGTH_128
  171. * CRYPT_LENGTH_160
  172. * CRYPT_LENGTH_192
  173. * CRYPT_LENGTH_224
  174. * CRYPT_LENGTH_256
  175. * CRYPT_LENGTH_288
  176. * CRYPT_LENGTH_320
  177. * CRYPT_LENGTH_352
  178. * CRYPT_LENGTH_384
  179. * CRYPT_LENGTH_416
  180. * CRYPT_LENGTH_448
  181. * CRYPT_LENGTH_480
  182. * CRYPT_LENGTH_512
  183. * Nostop:
  184. * CRYPT_STOPCPU
  185. * CRYPT_NOSTOPCPU
  186. * @retval None
  187. */
  188. void CRYPT_StartRShift1(uint32_t Length, uint32_t Nostop)
  189. {
  190. /* Check parameters */
  191. assert_parameters(IS_CRYPT_LENGTH(Length));
  192. assert_parameters(IS_CRYPT_NOSTOP(Nostop));
  193. CRYPT->CTRL = (Nostop \
  194. |Length \
  195. |CRYPT_CTRL_MODE_RSHIFT1 \
  196. |CRYPT_CTRL_ACT);
  197. }
  198. /**
  199. * @brief Waiting for last operation to complete.
  200. * @param None
  201. * @retval None
  202. */
  203. void CRYPT_WaitForLastOperation(void)
  204. {
  205. while (CRYPT->CTRL & CRYPT_CTRL_ACT)
  206. {
  207. }
  208. }
  209. /*********************************** END OF FILE ******************************/