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