xref: /btstack/port/msp432p401lp-cc256x/ti/devices/msp432p4xx/driverlib/aes256.h (revision 5fd0122a3e19d95e11e1f3eb8a08a2b2acb2557e)
1*5fd0122aSMatthias Ringwald /* --COPYRIGHT--,BSD
2*5fd0122aSMatthias Ringwald  * Copyright (c) 2017, Texas Instruments Incorporated
3*5fd0122aSMatthias Ringwald  * All rights reserved.
4*5fd0122aSMatthias Ringwald  *
5*5fd0122aSMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
6*5fd0122aSMatthias Ringwald  * modification, are permitted provided that the following conditions
7*5fd0122aSMatthias Ringwald  * are met:
8*5fd0122aSMatthias Ringwald  *
9*5fd0122aSMatthias Ringwald  * *  Redistributions of source code must retain the above copyright
10*5fd0122aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
11*5fd0122aSMatthias Ringwald  *
12*5fd0122aSMatthias Ringwald  * *  Redistributions in binary form must reproduce the above copyright
13*5fd0122aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
14*5fd0122aSMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
15*5fd0122aSMatthias Ringwald  *
16*5fd0122aSMatthias Ringwald  * *  Neither the name of Texas Instruments Incorporated nor the names of
17*5fd0122aSMatthias Ringwald  *    its contributors may be used to endorse or promote products derived
18*5fd0122aSMatthias Ringwald  *    from this software without specific prior written permission.
19*5fd0122aSMatthias Ringwald  *
20*5fd0122aSMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21*5fd0122aSMatthias Ringwald  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22*5fd0122aSMatthias Ringwald  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23*5fd0122aSMatthias Ringwald  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24*5fd0122aSMatthias Ringwald  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25*5fd0122aSMatthias Ringwald  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26*5fd0122aSMatthias Ringwald  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27*5fd0122aSMatthias Ringwald  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28*5fd0122aSMatthias Ringwald  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29*5fd0122aSMatthias Ringwald  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30*5fd0122aSMatthias Ringwald  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31*5fd0122aSMatthias Ringwald  * --/COPYRIGHT--*/
32*5fd0122aSMatthias Ringwald #ifndef AES256_H_
33*5fd0122aSMatthias Ringwald #define AES256_H_
34*5fd0122aSMatthias Ringwald 
35*5fd0122aSMatthias Ringwald //*****************************************************************************
36*5fd0122aSMatthias Ringwald //
37*5fd0122aSMatthias Ringwald //! \addtogroup aes256_api
38*5fd0122aSMatthias Ringwald //! @{
39*5fd0122aSMatthias Ringwald //
40*5fd0122aSMatthias Ringwald //*****************************************************************************
41*5fd0122aSMatthias Ringwald 
42*5fd0122aSMatthias Ringwald //*****************************************************************************
43*5fd0122aSMatthias Ringwald //
44*5fd0122aSMatthias Ringwald // If building with a C++ compiler, make all of the definitions in this header
45*5fd0122aSMatthias Ringwald // have a C binding.
46*5fd0122aSMatthias Ringwald //
47*5fd0122aSMatthias Ringwald //*****************************************************************************
48*5fd0122aSMatthias Ringwald #ifdef __cplusplus
49*5fd0122aSMatthias Ringwald extern "C"
50*5fd0122aSMatthias Ringwald {
51*5fd0122aSMatthias Ringwald #endif
52*5fd0122aSMatthias Ringwald 
53*5fd0122aSMatthias Ringwald #include <stdint.h>
54*5fd0122aSMatthias Ringwald #include <stdbool.h>
55*5fd0122aSMatthias Ringwald #include <ti/devices/msp432p4xx/inc/msp.h>
56*5fd0122aSMatthias Ringwald 
57*5fd0122aSMatthias Ringwald /* Module Defines and macro for easy access */
58*5fd0122aSMatthias Ringwald #define AES256_CMSIS(x) ((AES256_Type *) x)
59*5fd0122aSMatthias Ringwald 
60*5fd0122aSMatthias Ringwald //*****************************************************************************
61*5fd0122aSMatthias Ringwald //
62*5fd0122aSMatthias Ringwald // The following are deprecated values. Please refer to documentation for the
63*5fd0122aSMatthias Ringwald // correct values to use.
64*5fd0122aSMatthias Ringwald //
65*5fd0122aSMatthias Ringwald //*****************************************************************************
66*5fd0122aSMatthias Ringwald #define Key_128BIT                                                          128
67*5fd0122aSMatthias Ringwald #define Key_192BIT                                                          192
68*5fd0122aSMatthias Ringwald #define Key_256BIT                                                          256
69*5fd0122aSMatthias Ringwald 
70*5fd0122aSMatthias Ringwald //*****************************************************************************
71*5fd0122aSMatthias Ringwald //
72*5fd0122aSMatthias Ringwald // The following are values that can be passed to the keyLength parameter for
73*5fd0122aSMatthias Ringwald // functions: AES256_setCipherKey(), AES256_setDecipherKey(), and
74*5fd0122aSMatthias Ringwald // AES256_startSetDecipherKey().
75*5fd0122aSMatthias Ringwald //
76*5fd0122aSMatthias Ringwald //*****************************************************************************
77*5fd0122aSMatthias Ringwald #define AES256_KEYLENGTH_128BIT                                             128
78*5fd0122aSMatthias Ringwald #define AES256_KEYLENGTH_192BIT                                             192
79*5fd0122aSMatthias Ringwald #define AES256_KEYLENGTH_256BIT                                             256
80*5fd0122aSMatthias Ringwald 
81*5fd0122aSMatthias Ringwald //*****************************************************************************
82*5fd0122aSMatthias Ringwald //
83*5fd0122aSMatthias Ringwald // The following are values that can be passed toThe following are values that
84*5fd0122aSMatthias Ringwald // can be returned by the AES256_getErrorFlagStatus() function.
85*5fd0122aSMatthias Ringwald //
86*5fd0122aSMatthias Ringwald //*****************************************************************************
87*5fd0122aSMatthias Ringwald #define AES256_ERROR_OCCURRED                                 AES256_CTL0_ERRFG
88*5fd0122aSMatthias Ringwald #define AES256_NO_ERROR                                                    0x00
89*5fd0122aSMatthias Ringwald 
90*5fd0122aSMatthias Ringwald //*****************************************************************************
91*5fd0122aSMatthias Ringwald //
92*5fd0122aSMatthias Ringwald // The following are values that can be passed toThe following are values that
93*5fd0122aSMatthias Ringwald // can be returned by the AES256_isBusy() function.
94*5fd0122aSMatthias Ringwald //
95*5fd0122aSMatthias Ringwald //*****************************************************************************
96*5fd0122aSMatthias Ringwald #define AES256_BUSY                                            AES256_STAT_BUSY
97*5fd0122aSMatthias Ringwald #define AES256_NOT_BUSY                                                    0x00
98*5fd0122aSMatthias Ringwald 
99*5fd0122aSMatthias Ringwald //*****************************************************************************
100*5fd0122aSMatthias Ringwald //
101*5fd0122aSMatthias Ringwald // The following are values that can be passed toThe following are values that
102*5fd0122aSMatthias Ringwald // can be returned by the AES256_getInterruptFlagStatus() function.
103*5fd0122aSMatthias Ringwald //
104*5fd0122aSMatthias Ringwald //*****************************************************************************
105*5fd0122aSMatthias Ringwald #define AES256_READY_INTERRUPT                                             0x01
106*5fd0122aSMatthias Ringwald #define AES256_NOTREADY_INTERRUPT                                          0x00
107*5fd0122aSMatthias Ringwald 
108*5fd0122aSMatthias Ringwald //*****************************************************************************
109*5fd0122aSMatthias Ringwald //
110*5fd0122aSMatthias Ringwald // Prototypes for the APIs.
111*5fd0122aSMatthias Ringwald //
112*5fd0122aSMatthias Ringwald //*****************************************************************************
113*5fd0122aSMatthias Ringwald 
114*5fd0122aSMatthias Ringwald //*****************************************************************************
115*5fd0122aSMatthias Ringwald //
116*5fd0122aSMatthias Ringwald //! \brief Loads a 128, 192 or 256 bit cipher key to AES256 module.
117*5fd0122aSMatthias Ringwald //!
118*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
119*5fd0122aSMatthias Ringwald //! \param cipherKey is a pointer to an uint8_t array with a length of 16 bytes
120*5fd0122aSMatthias Ringwald //!        that contains a 128 bit cipher key.
121*5fd0122aSMatthias Ringwald //! \param keyLength is the length of the key.
122*5fd0122aSMatthias Ringwald //!        Valid values are:
123*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_128BIT
124*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_192BIT
125*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_256BIT
126*5fd0122aSMatthias Ringwald //!
127*5fd0122aSMatthias Ringwald //! \return true if set correctly, false otherwise
128*5fd0122aSMatthias Ringwald //
129*5fd0122aSMatthias Ringwald //*****************************************************************************
130*5fd0122aSMatthias Ringwald extern bool AES256_setCipherKey(uint32_t moduleInstance,
131*5fd0122aSMatthias Ringwald         const uint8_t *cipherKey, uint_fast16_t keyLength);
132*5fd0122aSMatthias Ringwald 
133*5fd0122aSMatthias Ringwald //*****************************************************************************
134*5fd0122aSMatthias Ringwald //
135*5fd0122aSMatthias Ringwald //! \brief Encrypts a block of data using the AES256 module.
136*5fd0122aSMatthias Ringwald //!
137*5fd0122aSMatthias Ringwald //! The cipher key that is used for encryption should be loaded in advance by
138*5fd0122aSMatthias Ringwald //! using function AES256_setCipherKey()
139*5fd0122aSMatthias Ringwald //!
140*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
141*5fd0122aSMatthias Ringwald //! \param data is a pointer to an uint8_t array with a length of 16 bytes that
142*5fd0122aSMatthias Ringwald //!        contains data to be encrypted.
143*5fd0122aSMatthias Ringwald //! \param encryptedData is a pointer to an uint8_t array with a length of 16
144*5fd0122aSMatthias Ringwald //!        bytes in that the encrypted data will be written.
145*5fd0122aSMatthias Ringwald //!
146*5fd0122aSMatthias Ringwald //! \return None
147*5fd0122aSMatthias Ringwald //
148*5fd0122aSMatthias Ringwald //*****************************************************************************
149*5fd0122aSMatthias Ringwald extern void AES256_encryptData(uint32_t moduleInstance, const uint8_t *data,
150*5fd0122aSMatthias Ringwald         uint8_t *encryptedData);
151*5fd0122aSMatthias Ringwald 
152*5fd0122aSMatthias Ringwald //*****************************************************************************
153*5fd0122aSMatthias Ringwald //
154*5fd0122aSMatthias Ringwald //! \brief Decrypts a block of data using the AES256 module.
155*5fd0122aSMatthias Ringwald //!
156*5fd0122aSMatthias Ringwald //! This function requires a pregenerated decryption key. A key can be loaded
157*5fd0122aSMatthias Ringwald //! and pregenerated by using function AES256_setDecipherKey() or
158*5fd0122aSMatthias Ringwald //! AES256_startSetDecipherKey(). The decryption takes 167 MCLK.
159*5fd0122aSMatthias Ringwald //!
160*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
161*5fd0122aSMatthias Ringwald //! \param data is a pointer to an uint8_t array with a length of 16 bytes that
162*5fd0122aSMatthias Ringwald //!        contains encrypted data to be decrypted.
163*5fd0122aSMatthias Ringwald //! \param decryptedData is a pointer to an uint8_t array with a length of 16
164*5fd0122aSMatthias Ringwald //!        bytes in that the decrypted data will be written.
165*5fd0122aSMatthias Ringwald //!
166*5fd0122aSMatthias Ringwald //! \return None
167*5fd0122aSMatthias Ringwald //
168*5fd0122aSMatthias Ringwald //*****************************************************************************
169*5fd0122aSMatthias Ringwald extern void AES256_decryptData(uint32_t moduleInstance, const uint8_t *data,
170*5fd0122aSMatthias Ringwald         uint8_t *decryptedData);
171*5fd0122aSMatthias Ringwald 
172*5fd0122aSMatthias Ringwald //*****************************************************************************
173*5fd0122aSMatthias Ringwald //
174*5fd0122aSMatthias Ringwald //! \brief Sets the decipher key.
175*5fd0122aSMatthias Ringwald //!
176*5fd0122aSMatthias Ringwald //! The API AES256_startSetDecipherKey or AES256_setDecipherKey must be invoked
177*5fd0122aSMatthias Ringwald //! before invoking AES256_startDecryptData.
178*5fd0122aSMatthias Ringwald //!
179*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
180*5fd0122aSMatthias Ringwald //! \param cipherKey is a pointer to an uint8_t array with a length of 16 bytes
181*5fd0122aSMatthias Ringwald //!        that contains a 128 bit cipher key.
182*5fd0122aSMatthias Ringwald //! \param keyLength is the length of the key.
183*5fd0122aSMatthias Ringwald //!        Valid values are:
184*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_128BIT
185*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_192BIT
186*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_256BIT
187*5fd0122aSMatthias Ringwald //!
188*5fd0122aSMatthias Ringwald //! \return true if set, false otherwise
189*5fd0122aSMatthias Ringwald //
190*5fd0122aSMatthias Ringwald //*****************************************************************************
191*5fd0122aSMatthias Ringwald extern bool AES256_setDecipherKey(uint32_t moduleInstance,
192*5fd0122aSMatthias Ringwald         const uint8_t *cipherKey, uint_fast16_t keyLength);
193*5fd0122aSMatthias Ringwald 
194*5fd0122aSMatthias Ringwald //*****************************************************************************
195*5fd0122aSMatthias Ringwald //
196*5fd0122aSMatthias Ringwald //! \brief Clears the AES256 ready interrupt flag.
197*5fd0122aSMatthias Ringwald //!
198*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
199*5fd0122aSMatthias Ringwald //!
200*5fd0122aSMatthias Ringwald //! Modified bits are \b AESRDYIFG of \b AESACTL0 register.
201*5fd0122aSMatthias Ringwald //!
202*5fd0122aSMatthias Ringwald //! \return None
203*5fd0122aSMatthias Ringwald //
204*5fd0122aSMatthias Ringwald //*****************************************************************************
205*5fd0122aSMatthias Ringwald extern void AES256_clearInterruptFlag(uint32_t moduleInstance);
206*5fd0122aSMatthias Ringwald 
207*5fd0122aSMatthias Ringwald //*****************************************************************************
208*5fd0122aSMatthias Ringwald //
209*5fd0122aSMatthias Ringwald //! \brief Gets the AES256 ready interrupt flag status.
210*5fd0122aSMatthias Ringwald //!
211*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
212*5fd0122aSMatthias Ringwald //!
213*5fd0122aSMatthias Ringwald //! \return One of the following:
214*5fd0122aSMatthias Ringwald //!         - \b AES256_READY_INTERRUPT
215*5fd0122aSMatthias Ringwald //!         - \b AES256_NOTREADY_INTERRUPT
216*5fd0122aSMatthias Ringwald //!         \n indicating the status of the AES256 ready status
217*5fd0122aSMatthias Ringwald //
218*5fd0122aSMatthias Ringwald //*****************************************************************************
219*5fd0122aSMatthias Ringwald extern uint32_t AES256_getInterruptFlagStatus(uint32_t moduleInstance);
220*5fd0122aSMatthias Ringwald 
221*5fd0122aSMatthias Ringwald //*****************************************************************************
222*5fd0122aSMatthias Ringwald //
223*5fd0122aSMatthias Ringwald //! \brief Enables AES256 ready interrupt.
224*5fd0122aSMatthias Ringwald //!
225*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
226*5fd0122aSMatthias Ringwald //!
227*5fd0122aSMatthias Ringwald //! Modified bits are \b AESRDYIE of \b AESACTL0 register.
228*5fd0122aSMatthias Ringwald //!
229*5fd0122aSMatthias Ringwald //! \return None
230*5fd0122aSMatthias Ringwald //
231*5fd0122aSMatthias Ringwald //*****************************************************************************
232*5fd0122aSMatthias Ringwald extern void AES256_enableInterrupt(uint32_t moduleInstance);
233*5fd0122aSMatthias Ringwald 
234*5fd0122aSMatthias Ringwald //*****************************************************************************
235*5fd0122aSMatthias Ringwald //
236*5fd0122aSMatthias Ringwald //! \brief Disables AES256 ready interrupt.
237*5fd0122aSMatthias Ringwald //!
238*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
239*5fd0122aSMatthias Ringwald //!
240*5fd0122aSMatthias Ringwald //! Modified bits are \b AESRDYIE of \b AESACTL0 register.
241*5fd0122aSMatthias Ringwald //!
242*5fd0122aSMatthias Ringwald //! \return None
243*5fd0122aSMatthias Ringwald //
244*5fd0122aSMatthias Ringwald //*****************************************************************************
245*5fd0122aSMatthias Ringwald extern void AES256_disableInterrupt(uint32_t moduleInstance);
246*5fd0122aSMatthias Ringwald 
247*5fd0122aSMatthias Ringwald //*****************************************************************************
248*5fd0122aSMatthias Ringwald //
249*5fd0122aSMatthias Ringwald //! \brief Resets AES256 Module immediately.
250*5fd0122aSMatthias Ringwald //!
251*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
252*5fd0122aSMatthias Ringwald //!
253*5fd0122aSMatthias Ringwald //! Modified bits are \b AESSWRST of \b AESACTL0 register.
254*5fd0122aSMatthias Ringwald //!
255*5fd0122aSMatthias Ringwald //! \return None
256*5fd0122aSMatthias Ringwald //
257*5fd0122aSMatthias Ringwald //*****************************************************************************
258*5fd0122aSMatthias Ringwald extern void AES256_reset(uint32_t moduleInstance);
259*5fd0122aSMatthias Ringwald 
260*5fd0122aSMatthias Ringwald //*****************************************************************************
261*5fd0122aSMatthias Ringwald //
262*5fd0122aSMatthias Ringwald //! \brief Starts an encryption process on the AES256 module.
263*5fd0122aSMatthias Ringwald //!
264*5fd0122aSMatthias Ringwald //! The cipher key that is used for decryption should be loaded in advance by
265*5fd0122aSMatthias Ringwald //! using function AES256_setCipherKey(). This is a non-blocking equivalent pf
266*5fd0122aSMatthias Ringwald //! AES256_encryptData(). It is recommended to use the interrupt functionality
267*5fd0122aSMatthias Ringwald //! to check for procedure completion then use the AES256_getDataOut() API to
268*5fd0122aSMatthias Ringwald //! retrieve the encrypted data.
269*5fd0122aSMatthias Ringwald //!
270*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
271*5fd0122aSMatthias Ringwald //! \param data is a pointer to an uint8_t array with a length of 16 bytes that
272*5fd0122aSMatthias Ringwald //!        contains data to be encrypted.
273*5fd0122aSMatthias Ringwald //!
274*5fd0122aSMatthias Ringwald //! \return None
275*5fd0122aSMatthias Ringwald //
276*5fd0122aSMatthias Ringwald //*****************************************************************************
277*5fd0122aSMatthias Ringwald extern void AES256_startEncryptData(uint32_t moduleInstance,
278*5fd0122aSMatthias Ringwald         const uint8_t *data);
279*5fd0122aSMatthias Ringwald 
280*5fd0122aSMatthias Ringwald //*****************************************************************************
281*5fd0122aSMatthias Ringwald //
282*5fd0122aSMatthias Ringwald //! \brief Decypts a block of data using the AES256 module.
283*5fd0122aSMatthias Ringwald //!
284*5fd0122aSMatthias Ringwald //! This is the non-blocking equivalant of AES256_decryptData(). This function
285*5fd0122aSMatthias Ringwald //! requires a pregenerated decryption key. A key can be loaded and
286*5fd0122aSMatthias Ringwald //! pregenerated by using function AES256_setDecipherKey() or
287*5fd0122aSMatthias Ringwald //! AES256_startSetDecipherKey(). The decryption takes 167 MCLK. It is
288*5fd0122aSMatthias Ringwald //! recommended to use interrupt to check for procedure completion then use the
289*5fd0122aSMatthias Ringwald //! AES256_getDataOut() API to retrieve the decrypted data.
290*5fd0122aSMatthias Ringwald //!
291*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
292*5fd0122aSMatthias Ringwald //! \param data is a pointer to an uint8_t array with a length of 16 bytes that
293*5fd0122aSMatthias Ringwald //!        contains encrypted data to be decrypted.
294*5fd0122aSMatthias Ringwald //!
295*5fd0122aSMatthias Ringwald //! \return None
296*5fd0122aSMatthias Ringwald //
297*5fd0122aSMatthias Ringwald //*****************************************************************************
298*5fd0122aSMatthias Ringwald extern void AES256_startDecryptData(uint32_t moduleInstance,
299*5fd0122aSMatthias Ringwald         const uint8_t *data);
300*5fd0122aSMatthias Ringwald 
301*5fd0122aSMatthias Ringwald //*****************************************************************************
302*5fd0122aSMatthias Ringwald //
303*5fd0122aSMatthias Ringwald //! \brief Sets the decipher key
304*5fd0122aSMatthias Ringwald //!
305*5fd0122aSMatthias Ringwald //! The API AES256_startSetDecipherKey() or AES256_setDecipherKey() must be
306*5fd0122aSMatthias Ringwald //! invoked before invoking AES256_startDecryptData.
307*5fd0122aSMatthias Ringwald //!
308*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
309*5fd0122aSMatthias Ringwald //! \param cipherKey is a pointer to an uint8_t array with a length of 16 bytes
310*5fd0122aSMatthias Ringwald //!        that contains a 128 bit cipher key.
311*5fd0122aSMatthias Ringwald //! \param keyLength is the length of the key.
312*5fd0122aSMatthias Ringwald //!        Valid values are:
313*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_128BIT
314*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_192BIT
315*5fd0122aSMatthias Ringwald //!        - \b AES256_KEYLENGTH_256BIT
316*5fd0122aSMatthias Ringwald //!
317*5fd0122aSMatthias Ringwald //! \return true if set correctly, false otherwise
318*5fd0122aSMatthias Ringwald //
319*5fd0122aSMatthias Ringwald //*****************************************************************************
320*5fd0122aSMatthias Ringwald extern bool AES256_startSetDecipherKey(uint32_t moduleInstance,
321*5fd0122aSMatthias Ringwald         const uint8_t *cipherKey, uint_fast16_t keyLength);
322*5fd0122aSMatthias Ringwald 
323*5fd0122aSMatthias Ringwald //*****************************************************************************
324*5fd0122aSMatthias Ringwald //
325*5fd0122aSMatthias Ringwald //! \brief Reads back the output data from AES256 module.
326*5fd0122aSMatthias Ringwald //!
327*5fd0122aSMatthias Ringwald //! This function is meant to use after an encryption or decryption process
328*5fd0122aSMatthias Ringwald //! that was started and finished by initiating an interrupt by use of
329*5fd0122aSMatthias Ringwald //! AES256_startEncryptData or AES256_startDecryptData functions.
330*5fd0122aSMatthias Ringwald //!
331*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
332*5fd0122aSMatthias Ringwald //! \param outputData is a pointer to an uint8_t array with a length of 16
333*5fd0122aSMatthias Ringwald //!        bytes in that the data will be written.
334*5fd0122aSMatthias Ringwald //!
335*5fd0122aSMatthias Ringwald //! \return true if data is valid, otherwise false
336*5fd0122aSMatthias Ringwald //
337*5fd0122aSMatthias Ringwald //*****************************************************************************
338*5fd0122aSMatthias Ringwald extern bool AES256_getDataOut(uint32_t moduleInstance,
339*5fd0122aSMatthias Ringwald         uint8_t *outputData);
340*5fd0122aSMatthias Ringwald 
341*5fd0122aSMatthias Ringwald //*****************************************************************************
342*5fd0122aSMatthias Ringwald //
343*5fd0122aSMatthias Ringwald //! \brief Gets the AES256 module busy status.
344*5fd0122aSMatthias Ringwald //!
345*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
346*5fd0122aSMatthias Ringwald //!
347*5fd0122aSMatthias Ringwald //! \return true if busy, false otherwise
348*5fd0122aSMatthias Ringwald //
349*5fd0122aSMatthias Ringwald //*****************************************************************************
350*5fd0122aSMatthias Ringwald extern bool AES256_isBusy(uint32_t moduleInstance);
351*5fd0122aSMatthias Ringwald 
352*5fd0122aSMatthias Ringwald //*****************************************************************************
353*5fd0122aSMatthias Ringwald //
354*5fd0122aSMatthias Ringwald //! \brief Clears the AES256 error flag.
355*5fd0122aSMatthias Ringwald //!
356*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
357*5fd0122aSMatthias Ringwald //!
358*5fd0122aSMatthias Ringwald //! Modified bits are \b AESERRFG of \b AESACTL0 register.
359*5fd0122aSMatthias Ringwald //!
360*5fd0122aSMatthias Ringwald //! \return None
361*5fd0122aSMatthias Ringwald //
362*5fd0122aSMatthias Ringwald //*****************************************************************************
363*5fd0122aSMatthias Ringwald extern void AES256_clearErrorFlag(uint32_t moduleInstance);
364*5fd0122aSMatthias Ringwald 
365*5fd0122aSMatthias Ringwald //*****************************************************************************
366*5fd0122aSMatthias Ringwald //
367*5fd0122aSMatthias Ringwald //! \brief Gets the AES256 error flag status.
368*5fd0122aSMatthias Ringwald //!
369*5fd0122aSMatthias Ringwald //! \param moduleInstance is the base address of the AES256 module.
370*5fd0122aSMatthias Ringwald //!
371*5fd0122aSMatthias Ringwald //! \return One of the following:
372*5fd0122aSMatthias Ringwald //!         - \b AES256_ERROR_OCCURRED
373*5fd0122aSMatthias Ringwald //!         - \b AES256_NO_ERROR
374*5fd0122aSMatthias Ringwald //!         \n indicating the error flag status
375*5fd0122aSMatthias Ringwald //
376*5fd0122aSMatthias Ringwald //*****************************************************************************
377*5fd0122aSMatthias Ringwald extern uint32_t AES256_getErrorFlagStatus(uint32_t moduleInstance);
378*5fd0122aSMatthias Ringwald 
379*5fd0122aSMatthias Ringwald //*****************************************************************************
380*5fd0122aSMatthias Ringwald //
381*5fd0122aSMatthias Ringwald //! Registers an interrupt handler for the AES interrupt.
382*5fd0122aSMatthias Ringwald //!
383*5fd0122aSMatthias Ringwald //! \param moduleInstance Instance of the AES256 module
384*5fd0122aSMatthias Ringwald //!
385*5fd0122aSMatthias Ringwald //! \param intHandler is a pointer to the function to be called when the
386*5fd0122aSMatthias Ringwald //! AES interrupt occurs.
387*5fd0122aSMatthias Ringwald //!
388*5fd0122aSMatthias Ringwald //! This function registers the handler to be called when a AES
389*5fd0122aSMatthias Ringwald //! interrupt occurs. This function enables the global interrupt in the
390*5fd0122aSMatthias Ringwald //! interrupt controller; specific AES interrupts must be enabled
391*5fd0122aSMatthias Ringwald //! via AES256_enableInterrupt().  It is the interrupt handler's responsibility
392*5fd0122aSMatthias Ringwald //! to clear the interrupt source via AES256_clearInterrupt().
393*5fd0122aSMatthias Ringwald //!
394*5fd0122aSMatthias Ringwald //! \return None.
395*5fd0122aSMatthias Ringwald //
396*5fd0122aSMatthias Ringwald //*****************************************************************************
397*5fd0122aSMatthias Ringwald extern void AES256_registerInterrupt(uint32_t moduleInstance,
398*5fd0122aSMatthias Ringwald         void (*intHandler)(void));
399*5fd0122aSMatthias Ringwald 
400*5fd0122aSMatthias Ringwald //*****************************************************************************
401*5fd0122aSMatthias Ringwald //
402*5fd0122aSMatthias Ringwald //! Unregisters the interrupt handler for the AES interrupt
403*5fd0122aSMatthias Ringwald //!
404*5fd0122aSMatthias Ringwald //! \param moduleInstance Instance of the AES256 module
405*5fd0122aSMatthias Ringwald //!
406*5fd0122aSMatthias Ringwald //! This function unregisters the handler to be called when AES
407*5fd0122aSMatthias Ringwald //! interrupt occurs.  This function also masks off the interrupt in the
408*5fd0122aSMatthias Ringwald //! interrupt controller so that the interrupt handler no longer is called.
409*5fd0122aSMatthias Ringwald //!
410*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about
411*5fd0122aSMatthias Ringwald //! registering interrupt handlers.
412*5fd0122aSMatthias Ringwald //!
413*5fd0122aSMatthias Ringwald //! \return None.
414*5fd0122aSMatthias Ringwald //
415*5fd0122aSMatthias Ringwald //*****************************************************************************
416*5fd0122aSMatthias Ringwald extern void AES256_unregisterInterrupt(uint32_t moduleInstance);
417*5fd0122aSMatthias Ringwald 
418*5fd0122aSMatthias Ringwald //*****************************************************************************
419*5fd0122aSMatthias Ringwald //
420*5fd0122aSMatthias Ringwald //! Returns the current interrupt flag for the peripheral.
421*5fd0122aSMatthias Ringwald //!
422*5fd0122aSMatthias Ringwald //! \param moduleInstance Instance of the AES256 module
423*5fd0122aSMatthias Ringwald //!
424*5fd0122aSMatthias Ringwald //! \return The currently triggered interrupt flag for the module.
425*5fd0122aSMatthias Ringwald //
426*5fd0122aSMatthias Ringwald //*****************************************************************************
427*5fd0122aSMatthias Ringwald extern uint32_t AES256_getInterruptStatus(uint32_t moduleInstance);
428*5fd0122aSMatthias Ringwald 
429*5fd0122aSMatthias Ringwald //*****************************************************************************
430*5fd0122aSMatthias Ringwald //
431*5fd0122aSMatthias Ringwald // Mark the end of the C bindings section for C++ compilers.
432*5fd0122aSMatthias Ringwald //
433*5fd0122aSMatthias Ringwald //*****************************************************************************
434*5fd0122aSMatthias Ringwald #ifdef __cplusplus
435*5fd0122aSMatthias Ringwald }
436*5fd0122aSMatthias Ringwald #endif
437*5fd0122aSMatthias Ringwald 
438*5fd0122aSMatthias Ringwald //*****************************************************************************
439*5fd0122aSMatthias Ringwald //
440*5fd0122aSMatthias Ringwald // Close the Doxygen group.
441*5fd0122aSMatthias Ringwald //! @}
442*5fd0122aSMatthias Ringwald //
443*5fd0122aSMatthias Ringwald //*****************************************************************************
444*5fd0122aSMatthias Ringwald 
445*5fd0122aSMatthias Ringwald #endif /* AES256_H_ */
446*5fd0122aSMatthias Ringwald 
447