version_2.0
Dependents: cc3000_ping_demo_try_2
Fork of mbed by
Diff: TARGET_NUCLEO_L152RE/stm32l1xx_aes.h
- Revision:
- 77:869cf507173a
- Child:
- 81:7d30d6019079
diff -r 824293ae5e43 -r 869cf507173a TARGET_NUCLEO_L152RE/stm32l1xx_aes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NUCLEO_L152RE/stm32l1xx_aes.h Fri Feb 14 14:36:43 2014 +0000 @@ -0,0 +1,236 @@ +/** + ****************************************************************************** + * @file stm32l1xx_aes.h + * @author MCD Application Team + * @version V1.3.0 + * @date 31-January-2014 + * @brief This file contains all the functions prototypes for the AES firmware + * library. + ****************************************************************************** + * @attention + * + * <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2> + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L1xx_AES_H +#define __STM32L1xx_AES_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l1xx.h" + +/** @addtogroup STM32L1xx_StdPeriph_Driver + * @{ + */ + +/** @addtogroup AES + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief AES Init structure definition + */ +typedef struct +{ + uint32_t AES_Operation; /*!< Specifies the AES mode of operation. + This parameter can be a value of @ref AES_possible_Operation_modes */ + uint32_t AES_Chaining; /*!< Specifies the AES Chaining modes: ECB, CBC or CTR. + This parameter can be a value of @ref AES_possible_chaining_modes */ + uint32_t AES_DataType; /*!< Specifies the AES data swapping: 32-bit, 16-bit, 8-bit or 1-bit. + This parameter can be a value of @ref AES_Data_Types */ +}AES_InitTypeDef; + +/** + * @brief AES Key(s) structure definition + */ +typedef struct +{ + uint32_t AES_Key0; /*!< Key[31:0] */ + uint32_t AES_Key1; /*!< Key[63:32] */ + uint32_t AES_Key2; /*!< Key[95:64] */ + uint32_t AES_Key3; /*!< Key[127:96] */ +}AES_KeyInitTypeDef; + +/** + * @brief AES Initialization Vectors (IV) structure definition + */ +typedef struct +{ + uint32_t AES_IV0; /*!< Init Vector IV[31:0] */ + uint32_t AES_IV1; /*!< Init Vector IV[63:32] */ + uint32_t AES_IV2; /*!< Init Vector IV[95:64] */ + uint32_t AES_IV3; /*!< Init Vector IV[127:96] */ +}AES_IVInitTypeDef; + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup AES_Exported_Constants + * @{ + */ + +/** @defgroup AES_possible_Operation_modes + * @{ + */ +#define AES_Operation_Encryp ((uint32_t)0x00000000) /*!< AES in Encryption mode */ +#define AES_Operation_KeyDeriv AES_CR_MODE_0 /*!< AES in Key Derivation mode */ +#define AES_Operation_Decryp AES_CR_MODE_1 /*!< AES in Decryption mode */ +#define AES_Operation_KeyDerivAndDecryp AES_CR_MODE /*!< AES in Key Derivation and Decryption mode */ + +#define IS_AES_MODE(OPERATION) (((OPERATION) == AES_Operation_Encryp) || \ + ((OPERATION) == AES_Operation_KeyDeriv) || \ + ((OPERATION) == AES_Operation_Decryp) || \ + ((OPERATION) == AES_Operation_KeyDerivAndDecryp)) + +/** + * @} + */ + +/** @defgroup AES_possible_chaining_modes + * @{ + */ +#define AES_Chaining_ECB ((uint32_t)0x00000000) /*!< AES in ECB chaining mode */ +#define AES_Chaining_CBC AES_CR_CHMOD_0 /*!< AES in CBC chaining mode */ +#define AES_Chaining_CTR AES_CR_CHMOD_1 /*!< AES in CTR chaining mode */ + +#define IS_AES_CHAINING(CHAINING) (((CHAINING) == AES_Chaining_ECB) || \ + ((CHAINING) == AES_Chaining_CBC) || \ + ((CHAINING) == AES_Chaining_CTR)) +/** + * @} + */ + +/** @defgroup AES_Data_Types + * @{ + */ +#define AES_DataType_32b ((uint32_t)0x00000000) /*!< 32-bit data. No swapping */ +#define AES_DataType_16b AES_CR_DATATYPE_0 /*!< 16-bit data. Each half word is swapped */ +#define AES_DataType_8b AES_CR_DATATYPE_1 /*!< 8-bit data. All bytes are swapped */ +#define AES_DataType_1b AES_CR_DATATYPE /*!< 1-bit data. In the word all bits are swapped */ + +#define IS_AES_DATATYPE(DATATYPE) (((DATATYPE) == AES_DataType_32b) || \ + ((DATATYPE) == AES_DataType_16b)|| \ + ((DATATYPE) == AES_DataType_8b) || \ + ((DATATYPE) == AES_DataType_1b)) +/** + * @} + */ + +/** @defgroup AES_Flags + * @{ + */ +#define AES_FLAG_CCF AES_SR_CCF /*!< Computation Complete Flag */ +#define AES_FLAG_RDERR AES_SR_RDERR /*!< Read Error Flag */ +#define AES_FLAG_WRERR AES_SR_WRERR /*!< Write Error Flag */ + +#define IS_AES_FLAG(FLAG) (((FLAG) == AES_FLAG_CCF) || \ + ((FLAG) == AES_FLAG_RDERR) || \ + ((FLAG) == AES_FLAG_WRERR)) +/** + * @} + */ + +/** @defgroup AES_Interrupts + * @{ + */ +#define AES_IT_CC AES_CR_CCIE /*!< Computation Complete interrupt */ +#define AES_IT_ERR AES_CR_ERRIE /*!< Error interrupt */ + +#define IS_AES_IT(IT) ((((IT) & (uint32_t)0xFFFFF9FF) == 0x00) && ((IT) != 0x00)) +#define IS_AES_GET_IT(IT) (((IT) == AES_IT_CC) || ((IT) == AES_IT_ERR)) + +/** + * @} + */ + +/** @defgroup AES_DMA_Transfer_modes + * @{ + */ +#define AES_DMATransfer_In AES_CR_DMAINEN /*!< DMA requests enabled for input transfer phase */ +#define AES_DMATransfer_Out AES_CR_DMAOUTEN /*!< DMA requests enabled for input transfer phase */ +#define AES_DMATransfer_InOut (AES_CR_DMAINEN | AES_CR_DMAOUTEN) /*!< DMA requests enabled for both input and output phases */ + +#define IS_AES_DMA_TRANSFER(TRANSFER) (((TRANSFER) == AES_DMATransfer_In) || \ + ((TRANSFER) == AES_DMATransfer_Out) || \ + ((TRANSFER) == AES_DMATransfer_InOut)) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +/* Initialization and configuration functions *********************************/ +void AES_DeInit(void); +void AES_Init(AES_InitTypeDef* AES_InitStruct); +void AES_KeyInit(AES_KeyInitTypeDef* AES_KeyInitStruct); +void AES_IVInit(AES_IVInitTypeDef* AES_IVInitStruct); +void AES_Cmd(FunctionalState NewState); + +/* Structures initialization functions ****************************************/ +void AES_StructInit(AES_InitTypeDef* AES_InitStruct); +void AES_KeyStructInit(AES_KeyInitTypeDef* AES_KeyInitStruct); +void AES_IVStructInit(AES_IVInitTypeDef* AES_IVInitStruct); + +/* AES Read and Write functions **********************************************/ +void AES_WriteSubData(uint32_t Data); +uint32_t AES_ReadSubData(void); +void AES_ReadKey(AES_KeyInitTypeDef* AES_KeyInitStruct); +void AES_ReadIV(AES_IVInitTypeDef* AES_IVInitStruct); + +/* DMA transfers management function ******************************************/ +void AES_DMAConfig(uint32_t AES_DMATransfer, FunctionalState NewState); + +/* Interrupts and flags management functions **********************************/ +void AES_ITConfig(uint32_t AES_IT, FunctionalState NewState); +FlagStatus AES_GetFlagStatus(uint32_t AES_FLAG); +void AES_ClearFlag(uint32_t AES_FLAG); +ITStatus AES_GetITStatus(uint32_t AES_IT); +void AES_ClearITPendingBit(uint32_t AES_IT); + +/* High Level AES functions **************************************************/ +ErrorStatus AES_ECB_Encrypt(uint8_t* Key, uint8_t* Input, uint32_t Ilength, uint8_t* Output); +ErrorStatus AES_ECB_Decrypt(uint8_t* Key, uint8_t* Input, uint32_t Ilength, uint8_t* Output); +ErrorStatus AES_CBC_Encrypt(uint8_t* Key, uint8_t InitVectors[16], uint8_t* Input, uint32_t Ilength, uint8_t* Output); +ErrorStatus AES_CBC_Decrypt(uint8_t* Key, uint8_t InitVectors[16], uint8_t* Input, uint32_t Ilength, uint8_t* Output); +ErrorStatus AES_CTR_Encrypt(uint8_t* Key, uint8_t InitVectors[16], uint8_t* Input, uint32_t Ilength, uint8_t* Output); +ErrorStatus AES_CTR_Decrypt(uint8_t* Key, uint8_t InitVectors[16], uint8_t* Input, uint32_t Ilength, uint8_t* Output); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32L1xx_AES_H */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/