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