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