stm32f4xx_cryp.h
338 lines
| 11.9 KiB
| text/x-c
|
CLexer
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r18 | /** | ||
****************************************************************************** | ||||
* @file stm32f4xx_cryp.h | ||||
* @author MCD Application Team | ||||
* @version V1.0.0RC1 | ||||
* @date 25-August-2011 | ||||
* @brief This file contains all the functions prototypes for the Cryptographic | ||||
* processor(CRYP) firmware library. | ||||
****************************************************************************** | ||||
* @attention | ||||
* | ||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS | ||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE | ||||
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY | ||||
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING | ||||
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE | ||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. | ||||
* | ||||
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> | ||||
****************************************************************************** | ||||
*/ | ||||
/* Define to prevent recursive inclusion -------------------------------------*/ | ||||
#ifndef __STM32F4xx_CRYP_H | ||||
#define __STM32F4xx_CRYP_H | ||||
#ifdef __cplusplus | ||||
extern "C" { | ||||
#endif | ||||
/* Includes ------------------------------------------------------------------*/ | ||||
#include "stm32f4xx.h" | ||||
/** @addtogroup STM32F4xx_StdPeriph_Driver | ||||
* @{ | ||||
*/ | ||||
/** @addtogroup CRYP | ||||
* @{ | ||||
*/ | ||||
/* Exported types ------------------------------------------------------------*/ | ||||
/** | ||||
* @brief CRYP Init structure definition | ||||
*/ | ||||
typedef struct | ||||
{ | ||||
uint16_t CRYP_AlgoDir; /*!< Encrypt or Decrypt. This parameter can be a | ||||
value of @ref CRYP_Algorithm_Direction */ | ||||
uint16_t CRYP_AlgoMode; /*!< TDES-ECB, TDES-CBC, DES-ECB, DES-CBC, AES-ECB, | ||||
AES-CBC, AES-CTR, AES-Key. This parameter can be | ||||
a value of @ref CRYP_Algorithm_Mode */ | ||||
uint16_t CRYP_DataType; /*!< 32-bit data, 16-bit data, bit data or bit-string. | ||||
This parameter can be a value of @ref CRYP_Data_Type */ | ||||
uint16_t CRYP_KeySize; /*!< Used only in AES mode only : 128, 192 or 256 bit | ||||
key length. This parameter can be a value of | ||||
@ref CRYP_Key_Size_for_AES_only */ | ||||
}CRYP_InitTypeDef; | ||||
/** | ||||
* @brief CRYP Key(s) structure definition | ||||
*/ | ||||
typedef struct | ||||
{ | ||||
uint32_t CRYP_Key0Left; /*!< Key 0 Left */ | ||||
uint32_t CRYP_Key0Right; /*!< Key 0 Right */ | ||||
uint32_t CRYP_Key1Left; /*!< Key 1 left */ | ||||
uint32_t CRYP_Key1Right; /*!< Key 1 Right */ | ||||
uint32_t CRYP_Key2Left; /*!< Key 2 left */ | ||||
uint32_t CRYP_Key2Right; /*!< Key 2 Right */ | ||||
uint32_t CRYP_Key3Left; /*!< Key 3 left */ | ||||
uint32_t CRYP_Key3Right; /*!< Key 3 Right */ | ||||
}CRYP_KeyInitTypeDef; | ||||
/** | ||||
* @brief CRYP Initialization Vectors (IV) structure definition | ||||
*/ | ||||
typedef struct | ||||
{ | ||||
uint32_t CRYP_IV0Left; /*!< Init Vector 0 Left */ | ||||
uint32_t CRYP_IV0Right; /*!< Init Vector 0 Right */ | ||||
uint32_t CRYP_IV1Left; /*!< Init Vector 1 left */ | ||||
uint32_t CRYP_IV1Right; /*!< Init Vector 1 Right */ | ||||
}CRYP_IVInitTypeDef; | ||||
/** | ||||
* @brief CRYP context swapping structure definition | ||||
*/ | ||||
typedef struct | ||||
{ | ||||
/*!< Configuration */ | ||||
uint32_t CR_bits9to2; | ||||
/*!< KEY */ | ||||
uint32_t CRYP_IV0LR; | ||||
uint32_t CRYP_IV0RR; | ||||
uint32_t CRYP_IV1LR; | ||||
uint32_t CRYP_IV1RR; | ||||
/*!< IV */ | ||||
uint32_t CRYP_K0LR; | ||||
uint32_t CRYP_K0RR; | ||||
uint32_t CRYP_K1LR; | ||||
uint32_t CRYP_K1RR; | ||||
uint32_t CRYP_K2LR; | ||||
uint32_t CRYP_K2RR; | ||||
uint32_t CRYP_K3LR; | ||||
uint32_t CRYP_K3RR; | ||||
}CRYP_Context; | ||||
/* Exported constants --------------------------------------------------------*/ | ||||
/** @defgroup CRYP_Exported_Constants | ||||
* @{ | ||||
*/ | ||||
/** @defgroup CRYP_Algorithm_Direction | ||||
* @{ | ||||
*/ | ||||
#define CRYP_AlgoDir_Encrypt ((uint16_t)0x0000) | ||||
#define CRYP_AlgoDir_Decrypt ((uint16_t)0x0004) | ||||
#define IS_CRYP_ALGODIR(ALGODIR) (((ALGODIR) == CRYP_AlgoDir_Encrypt) || \ | ||||
((ALGODIR) == CRYP_AlgoDir_Decrypt)) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup CRYP_Algorithm_Mode | ||||
* @{ | ||||
*/ | ||||
/*!< TDES Modes */ | ||||
#define CRYP_AlgoMode_TDES_ECB ((uint16_t)0x0000) | ||||
#define CRYP_AlgoMode_TDES_CBC ((uint16_t)0x0008) | ||||
/*!< DES Modes */ | ||||
#define CRYP_AlgoMode_DES_ECB ((uint16_t)0x0010) | ||||
#define CRYP_AlgoMode_DES_CBC ((uint16_t)0x0018) | ||||
/*!< AES Modes */ | ||||
#define CRYP_AlgoMode_AES_ECB ((uint16_t)0x0020) | ||||
#define CRYP_AlgoMode_AES_CBC ((uint16_t)0x0028) | ||||
#define CRYP_AlgoMode_AES_CTR ((uint16_t)0x0030) | ||||
#define CRYP_AlgoMode_AES_Key ((uint16_t)0x0038) | ||||
#define IS_CRYP_ALGOMODE(ALGOMODE) (((ALGOMODE) == CRYP_AlgoMode_TDES_ECB) || \ | ||||
((ALGOMODE) == CRYP_AlgoMode_TDES_CBC)|| \ | ||||
((ALGOMODE) == CRYP_AlgoMode_DES_ECB)|| \ | ||||
((ALGOMODE) == CRYP_AlgoMode_DES_CBC) || \ | ||||
((ALGOMODE) == CRYP_AlgoMode_AES_ECB) || \ | ||||
((ALGOMODE) == CRYP_AlgoMode_AES_CBC) || \ | ||||
((ALGOMODE) == CRYP_AlgoMode_AES_CTR) || \ | ||||
((ALGOMODE) == CRYP_AlgoMode_AES_Key)) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup CRYP_Data_Type | ||||
* @{ | ||||
*/ | ||||
#define CRYP_DataType_32b ((uint16_t)0x0000) | ||||
#define CRYP_DataType_16b ((uint16_t)0x0040) | ||||
#define CRYP_DataType_8b ((uint16_t)0x0080) | ||||
#define CRYP_DataType_1b ((uint16_t)0x00C0) | ||||
#define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DataType_32b) || \ | ||||
((DATATYPE) == CRYP_DataType_16b)|| \ | ||||
((DATATYPE) == CRYP_DataType_8b)|| \ | ||||
((DATATYPE) == CRYP_DataType_1b)) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup CRYP_Key_Size_for_AES_only | ||||
* @{ | ||||
*/ | ||||
#define CRYP_KeySize_128b ((uint16_t)0x0000) | ||||
#define CRYP_KeySize_192b ((uint16_t)0x0100) | ||||
#define CRYP_KeySize_256b ((uint16_t)0x0200) | ||||
#define IS_CRYP_KEYSIZE(KEYSIZE) (((KEYSIZE) == CRYP_KeySize_128b)|| \ | ||||
((KEYSIZE) == CRYP_KeySize_192b)|| \ | ||||
((KEYSIZE) == CRYP_KeySize_256b)) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup CRYP_flags_definition | ||||
* @{ | ||||
*/ | ||||
#define CRYP_FLAG_BUSY ((uint8_t)0x10) /*!< The CRYP core is currently | ||||
processing a block of data | ||||
or a key preparation (for | ||||
AES decryption). */ | ||||
#define CRYP_FLAG_IFEM ((uint8_t)0x01) /*!< Input Fifo Empty */ | ||||
#define CRYP_FLAG_IFNF ((uint8_t)0x02) /*!< Input Fifo is Not Full */ | ||||
#define CRYP_FLAG_INRIS ((uint8_t)0x22) /*!< Raw interrupt pending */ | ||||
#define CRYP_FLAG_OFNE ((uint8_t)0x04) /*!< Input Fifo service raw | ||||
interrupt status */ | ||||
#define CRYP_FLAG_OFFU ((uint8_t)0x08) /*!< Output Fifo is Full */ | ||||
#define CRYP_FLAG_OUTRIS ((uint8_t)0x21) /*!< Output Fifo service raw | ||||
interrupt status */ | ||||
#define IS_CRYP_GET_FLAG(FLAG) (((FLAG) == CRYP_FLAG_IFEM) || \ | ||||
((FLAG) == CRYP_FLAG_IFNF) || \ | ||||
((FLAG) == CRYP_FLAG_OFNE) || \ | ||||
((FLAG) == CRYP_FLAG_OFFU) || \ | ||||
((FLAG) == CRYP_FLAG_BUSY) || \ | ||||
((FLAG) == CRYP_FLAG_OUTRIS)|| \ | ||||
((FLAG) == CRYP_FLAG_INRIS)) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup CRYP_interrupts_definition | ||||
* @{ | ||||
*/ | ||||
#define CRYP_IT_INI ((uint8_t)0x01) /*!< IN Fifo Interrupt */ | ||||
#define CRYP_IT_OUTI ((uint8_t)0x02) /*!< OUT Fifo Interrupt */ | ||||
#define IS_CRYP_CONFIG_IT(IT) ((((IT) & (uint8_t)0xFC) == 0x00) && ((IT) != 0x00)) | ||||
#define IS_CRYP_GET_IT(IT) (((IT) == CRYP_IT_INI) || ((IT) == CRYP_IT_OUTI)) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup CRYP_Encryption_Decryption_modes_definition | ||||
* @{ | ||||
*/ | ||||
#define MODE_ENCRYPT ((uint8_t)0x01) | ||||
#define MODE_DECRYPT ((uint8_t)0x00) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup CRYP_DMA_transfer_requests | ||||
* @{ | ||||
*/ | ||||
#define CRYP_DMAReq_DataIN ((uint8_t)0x01) | ||||
#define CRYP_DMAReq_DataOUT ((uint8_t)0x02) | ||||
#define IS_CRYP_DMAREQ(DMAREQ) ((((DMAREQ) & (uint8_t)0xFC) == 0x00) && ((DMAREQ) != 0x00)) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/* Exported macro ------------------------------------------------------------*/ | ||||
/* Exported functions --------------------------------------------------------*/ | ||||
/* Function used to set the CRYP configuration to the default reset state ****/ | ||||
void CRYP_DeInit(void); | ||||
/* CRYP Initialization and Configuration functions ****************************/ | ||||
void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct); | ||||
void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct); | ||||
void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); | ||||
void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); | ||||
void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct); | ||||
void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct); | ||||
void CRYP_Cmd(FunctionalState NewState); | ||||
/* CRYP Data processing functions *********************************************/ | ||||
void CRYP_DataIn(uint32_t Data); | ||||
uint32_t CRYP_DataOut(void); | ||||
void CRYP_FIFOFlush(void); | ||||
/* CRYP Context swapping functions ********************************************/ | ||||
ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave, | ||||
CRYP_KeyInitTypeDef* CRYP_KeyInitStruct); | ||||
void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore); | ||||
/* CRYP's DMA interface function **********************************************/ | ||||
void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState); | ||||
/* Interrupts and flags management functions **********************************/ | ||||
void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState); | ||||
ITStatus CRYP_GetITStatus(uint8_t CRYP_IT); | ||||
FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG); | ||||
/* High Level AES functions **************************************************/ | ||||
ErrorStatus CRYP_AES_ECB(uint8_t Mode, | ||||
uint8_t *Key, uint16_t Keysize, | ||||
uint8_t *Input, uint32_t Ilength, | ||||
uint8_t *Output); | ||||
ErrorStatus CRYP_AES_CBC(uint8_t Mode, | ||||
uint8_t InitVectors[16], | ||||
uint8_t *Key, uint16_t Keysize, | ||||
uint8_t *Input, uint32_t Ilength, | ||||
uint8_t *Output); | ||||
ErrorStatus CRYP_AES_CTR(uint8_t Mode, | ||||
uint8_t InitVectors[16], | ||||
uint8_t *Key, uint16_t Keysize, | ||||
uint8_t *Input, uint32_t Ilength, | ||||
uint8_t *Output); | ||||
/* High Level TDES functions **************************************************/ | ||||
ErrorStatus CRYP_TDES_ECB(uint8_t Mode, | ||||
uint8_t Key[24], | ||||
uint8_t *Input, uint32_t Ilength, | ||||
uint8_t *Output); | ||||
ErrorStatus CRYP_TDES_CBC(uint8_t Mode, | ||||
uint8_t Key[24], | ||||
uint8_t InitVectors[8], | ||||
uint8_t *Input, uint32_t Ilength, | ||||
uint8_t *Output); | ||||
/* High Level DES functions **************************************************/ | ||||
ErrorStatus CRYP_DES_ECB(uint8_t Mode, | ||||
uint8_t Key[8], | ||||
uint8_t *Input, uint32_t Ilength, | ||||
uint8_t *Output); | ||||
ErrorStatus CRYP_DES_CBC(uint8_t Mode, | ||||
uint8_t Key[8], | ||||
uint8_t InitVectors[8], | ||||
uint8_t *Input,uint32_t Ilength, | ||||
uint8_t *Output); | ||||
#ifdef __cplusplus | ||||
} | ||||
#endif | ||||
#endif /*__STM32F4xx_CRYP_H */ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ | ||||