16 #ifdef __MSP430_HAS_AES__
21 uint8_t AES_setCipherKey (uint16_t baseAddress,
26 uint16_t tempVariable = 0;
29 while(AESBUSY == (
HWREG16(baseAddress + OFS_AESASTAT) & AESBUSY) );
31 for (
i = 0;
i < 16;
i =
i + 2)
34 tempVariable = tempVariable | ((uint16_t)(
CipherKey[
i + 1]) << 8);
35 HWREG16(baseAddress + OFS_AESAKEY) = tempVariable;
39 while(0x00 == (
HWREG16(baseAddress + OFS_AESASTAT) & AESKEYWR ));
44 uint8_t AES_encryptData (uint16_t baseAddress,
46 uint8_t * encryptedData)
49 uint16_t tempData = 0;
50 uint16_t tempVariable = 0;
53 HWREG16(baseAddress + OFS_AESACTL0) &= ~AESOP_3;
56 for (
i = 0;
i < 16;
i =
i + 2)
59 tempVariable = (uint16_t)(
Data[
i]);
60 tempVariable = tempVariable | ((uint16_t)(
Data[
i+1]) << 8);
61 HWREG16(baseAddress + OFS_AESADIN) = tempVariable;
66 HWREG16(baseAddress + OFS_AESASTAT) |= AESKEYWR;
69 while(AESBUSY == (
HWREG16(baseAddress + OFS_AESASTAT) & AESBUSY) );
72 for (
i = 0;
i < 16;
i =
i + 2)
74 tempData =
HWREG16(baseAddress + OFS_AESADOUT);
75 *(encryptedData +
i) = (uint8_t)tempData;
76 *(encryptedData +
i + 1) = (uint8_t)(tempData >> 8);
83 uint8_t AES_decryptData (uint16_t baseAddress,
85 uint8_t * decryptedData)
88 uint16_t tempData = 0;
89 uint16_t tempVariable = 0;
92 HWREG16(baseAddress + OFS_AESACTL0) |= (AESOP_3);
95 for (
i = 0;
i < 16;
i =
i + 2)
97 tempVariable = (uint16_t)(
Data[
i+1] << 8);
98 tempVariable = tempVariable | ((uint16_t)(
Data[
i]));
99 HWREG16(baseAddress + OFS_AESADIN) = tempVariable;
104 HWREG16(baseAddress + OFS_AESASTAT) |= AESKEYWR;
107 while(AESBUSY == (
HWREG16(baseAddress + OFS_AESASTAT) & AESBUSY ));
110 for (
i = 0;
i < 16;
i =
i + 2)
112 tempData =
HWREG16(baseAddress + OFS_AESADOUT);
113 *(decryptedData +
i ) = (uint8_t)tempData;
114 *(decryptedData +
i + 1) = (uint8_t)(tempData >> 8);
120 uint8_t AES_setDecipherKey (uint16_t baseAddress,
124 uint16_t tempVariable = 0;
127 HWREG16(baseAddress + OFS_AESACTL0) &= ~(AESOP0);
128 HWREG16(baseAddress + OFS_AESACTL0) |= AESOP1;
131 for (
i = 0;
i < 16;
i =
i + 2)
134 tempVariable = tempVariable | ((uint16_t)(
CipherKey[
i + 1]) << 8);
135 HWREG16(baseAddress + OFS_AESAKEY) = tempVariable;
139 while((
HWREG16(baseAddress + OFS_AESASTAT) & AESBUSY) == AESBUSY);
144 void AES_clearInterrupt (uint16_t baseAddress )
146 HWREG8(baseAddress + OFS_AESACTL0) &= ~AESRDYIFG;
149 uint32_t AES_getInterruptStatus (uint16_t baseAddress)
151 return ((
HWREG8(baseAddress + OFS_AESACTL0) & AESRDYIFG) << 0x04);
154 void AES_enableInterrupt (uint16_t baseAddress)
156 HWREG8(baseAddress + OFS_AESACTL0) |= AESRDYIE;
159 void AES_disableInterrupt (uint16_t baseAddress)
161 HWREG8(baseAddress + OFS_AESACTL0) &= ~AESRDYIE;
164 void AES_reset (uint16_t baseAddress)
166 HWREG8(baseAddress + OFS_AESACTL0) |= AESSWRST;
169 uint8_t AES_startEncryptData (uint16_t baseAddress,
170 const uint8_t *
Data,
171 uint8_t * encryptedData)
174 uint16_t tempVariable = 0;
177 HWREG16(baseAddress + OFS_AESACTL0) &= ~AESOP_3;
180 for (
i = 0;
i < 16;
i =
i + 2)
182 tempVariable = (uint16_t)(
Data[
i]);
183 tempVariable = tempVariable | ((uint16_t)(
Data[
i+1]) << 8);
184 HWREG16(baseAddress + OFS_AESADIN) = tempVariable;
189 HWREG16(baseAddress + OFS_AESASTAT) |= AESKEYWR;
194 uint8_t AES_startDecryptData (uint16_t baseAddress,
195 const uint8_t *
Data)
198 uint16_t tempVariable = 0;
201 HWREG16(baseAddress + OFS_AESACTL0) |= (AESOP_3);
204 for (
i = 0;
i < 16;
i =
i + 2)
206 tempVariable = (uint16_t)(
Data[
i+1] << 8);
207 tempVariable = tempVariable | ((uint16_t)(
Data[
i]));
208 HWREG16(baseAddress + OFS_AESADIN) = tempVariable;
213 HWREG16(baseAddress + OFS_AESASTAT) |= AESKEYWR;
218 uint8_t AES_startSetDecipherKey (uint16_t baseAddress,
222 uint16_t tempVariable = 0;
224 HWREG16(baseAddress + OFS_AESACTL0) &= ~(AESOP0);
225 HWREG16(baseAddress + OFS_AESACTL0) |= AESOP1;
228 for (
i = 0;
i < 16;
i =
i + 2)
231 tempVariable = tempVariable | ((uint16_t)(
CipherKey[
i+1]) << 8);
232 HWREG16(baseAddress + OFS_AESAKEY) = tempVariable;
238 uint8_t AES_getDataOut(uint16_t baseAddress,
243 uint16_t tempData = 0;
246 if( AESBUSY == (
HWREG16(baseAddress + OFS_AESASTAT) & AESBUSY))
250 for (
i = 0;
i < 16;
i =
i + 2)
252 tempData =
HWREG16(baseAddress + OFS_AESADOUT);
253 *(OutputData +
i) = (uint8_t)tempData;
254 *(OutputData +
i + 1) = (uint8_t)(tempData >> 8);
260 uint8_t AES_isBusy (uint16_t baseAddress)
262 return (
HWREG16(baseAddress + OFS_AESASTAT) & AESBUSY);
265 void AES_clearErrorFlag (uint16_t baseAddress )
267 HWREG8(baseAddress + OFS_AESACTL0) &= ~AESERRFG;
270 uint32_t AES_getErrorFlagStatus (uint16_t baseAddress)
272 return (
HWREG8(baseAddress + OFS_AESACTL0) & AESERRFG);
275 uint8_t AES_startDecryptDataUsingEncryptionKey (
276 uint16_t baseAddress,
277 const uint8_t *
Data)
280 uint16_t tempVariable = 0;
283 HWREG16(baseAddress + OFS_AESACTL0) &= ~(AESOP1);
284 HWREG16(baseAddress + OFS_AESACTL0) |= AESOP0;
287 for (
i = 0;
i < 16;
i =
i + 2)
289 tempVariable = (uint16_t)(
Data[
i+1] << 8);
290 tempVariable = tempVariable | ((uint16_t)(
Data[
i]));
291 HWREG16(baseAddress + OFS_AESADIN) = tempVariable;
296 HWREG16(baseAddress + OFS_AESASTAT) |= AESKEYWR;
301 uint8_t AES_decryptDataUsingEncryptionKey (uint16_t baseAddress,
302 const uint8_t *
Data,
303 uint8_t * decryptedData)
306 uint16_t tempData = 0;
307 uint16_t tempVariable = 0;
310 HWREG16(baseAddress + OFS_AESACTL0) &= ~(AESOP1);
311 HWREG16(baseAddress + OFS_AESACTL0) |= AESOP0;
314 for (
i = 0;
i < 16;
i =
i + 2)
316 tempVariable = (uint16_t)(
Data[
i+1] << 8);
317 tempVariable = tempVariable | ((uint16_t)(
Data[
i]));
318 HWREG16(baseAddress + OFS_AESADIN) = tempVariable;
323 HWREG16(baseAddress + OFS_AESASTAT) |= AESKEYWR;
326 while(AESBUSY == (
HWREG16(baseAddress + OFS_AESASTAT) & AESBUSY) );
329 for (
i = 0;
i < 16;
i =
i + 2)
331 tempData =
HWREG16(baseAddress + OFS_AESADOUT);
332 *(decryptedData +
i ) = (uint8_t)tempData;
333 *(decryptedData +
i + 1) = (uint8_t)(tempData >> 8);