123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- /*!
- * @file apm32f4xx_cryp.h
- *
- * @brief This file contains all the functions prototypes for the CRYP firmware library
- *
- * @version V1.0.2
- *
- * @date 2022-06-23
- *
- * @attention
- *
- * Copyright (C) 2021-2022 Geehy Semiconductor
- *
- * You may not use this file except in compliance with the
- * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
- *
- * The program is only for reference, which is distributed in the hope
- * that it will be usefull and instructional for customers to develop
- * their software. Unless required by applicable law or agreed to in
- * writing, the program is distributed on an "AS IS" BASIS, WITHOUT
- * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
- * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
- * and limitations under the License.
- */
- /* Define to prevent recursive inclusion */
- #ifndef __APM32F4XX_CRYP_H
- #define __APM32F4XX_CRYP_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Includes */
- #include "apm32f4xx.h"
- /** @addtogroup APM32F4xx_StdPeriphDriver
- @{
- */
- /** @addtogroup CRYP_Driver
- @{
- */
- /** @defgroup CRYP_Enumerations
- @{
- */
- /**
- * @brief CRYP Algorithm Direction
- */
- typedef enum
- {
- CRYP_ALGODIR_ENCRYPT, /*!< Encryption */
- CRYP_ALGODIR_DECRYPT /*!< Decryption */
- } CRYP_ALGODIR_T;
- /**
- * @brief CRYP Algorithm Mode
- */
- typedef enum
- {
- CRYP_ALGOMODE_TDES_ECB = 0x00, /*!< TDES ECB Mode */
- CRYP_ALGOMODE_TDES_CBC = 0x01, /*!< TDES CBC Mode */
- CRYP_ALGOMODE_DES_ECB = 0x02, /*!< DES ECB Mode */
- CRYP_ALGOMODE_DES_CBC = 0x03, /*!< DES CBC Mode */
- CRYP_ALGOMODE_AES_ECB = 0x04, /*!< AES ECB Mode */
- CRYP_ALGOMODE_AES_CBC = 0x05, /*!< AES CBC Mode */
- CRYP_ALGOMODE_AES_CTR = 0x06, /*!< AES CTR Mode */
- CRYP_ALGOMODE_AES_KEY = 0x07 /*!< AES KEY Mode */
- } CRYP_ALGOMODE_T;
- /**
- * @brief CRYP Data Type
- */
- typedef enum
- {
- CRYP_DATATYPE_32B, /*!< 32-bit data */
- CRYP_DATATYPE_16B, /*!< 16-bit or half-word data */
- CRYP_DATATYPE_8B, /*!< 8-bit or byte data */
- CRYP_DATATYPE_1B /*!< bit or bits */
- } CRYP_DATATYPE_T;
- /**
- * @brief CRYP Key Size (only AES)
- */
- typedef enum
- {
- CRYP_KEYSIZE_128B, /*!< 128-bit key size */
- CRYP_KEYSIZE_192B, /*!< 192-bit key size */
- CRYP_KEYSIZE_256B /*!< 256-bit key size */
- } CRYP_KEYSIZE_T;
- /**
- * @brief CRYP flag
- */
- typedef enum
- {
- CRYP_FLAG_IFEMPT = 0x01, /*!< Input FIFO Empty */
- CRYP_FLAG_IFFULL = 0x02, /*!< Input FIFO not Full */
- CRYP_FLAG_OFEMPT = 0x04, /*!< Output FIFO not Empty */
- CRYP_FLAG_OFFULL = 0x08, /*!< Output FIFO Full */
- CRYP_FLAG_BUSY = 0x10, /*!< Busy Bit */
- CRYP_FLAG_INISTS = 0x21, /*!< Input FIFO Service Raw Interrupt Status */
- CRYP_FLAG_OUTISTS = 0x22 /*!< Output FIFO Service Raw Interrupt Status */
- } CRYP_FLAG_T;
- /**
- * @brief CRYP interrupt
- */
- typedef enum
- {
- CRYP_INT_IN = 0x01, /*!< Input FIFO interrupt */
- CRYP_INT_OUT = 0x02 /*!< Output FIFO interrupt */
- } CRYP_INT_T;
- /**
- * @brief CRYP Encryption/Decryption_mode
- */
- typedef enum
- {
- CRYP_MODE_DECRYPT = 0x00, /*!< Encryption */
- CRYP_MODE_ENCRYPT = 0x01 /*!< Decryption */
- } CRYP_MODE_T;
- /**
- * @brief CRYP DMA transfer request
- */
- typedef enum
- {
- CRYP_DMAREQ_DATAIN = 0x01, /*!< DMA Input Enable */
- CRYP_DMAREQ_DATAOUT = 0x02 /*!< DMA Output Enable */
- } CRYP_DMAREQ_T;
- /**@} end of group CRYP_Enumerations*/
- /** @addtogroup CRYP_Structure Data Structure
- @{
- */
- /**
- * @brief CRYP Config structure definition
- */
- typedef struct
- {
- CRYP_ALGODIR_T algoDir; /*!< Algorithm Direction Select */
- CRYP_ALGOMODE_T algoMode; /*!< Algorithm Mode Select */
- CRYP_DATATYPE_T dataType; /*!< Data Type Select */
- CRYP_KEYSIZE_T keySize; /*!< Key Size Select */
- } CRYP_Config_T;
- /**
- * @brief CRYP KeyConfig structure definition
- */
- typedef struct
- {
- uint32_t key0Left; /*!< key0 left */
- uint32_t key0Right; /*!< key0 right */
- uint32_t key1Left; /*!< key1 left */
- uint32_t key1Right; /*!< key1 right */
- uint32_t key2Left; /*!< key2 left */
- uint32_t key2Right; /*!< key2 right */
- uint32_t key3Left; /*!< key3 left */
- uint32_t key3Right; /*!< key3 right */
- } CRYP_KeyConfig_T;
- /**
- * @brief CRYP Initialization Vectors (IV) structure definition
- */
- typedef struct
- {
- uint32_t IV0Left; /*!< Initialization Vector0 left */
- uint32_t IV0Right; /*!< Initialization Vector0 right */
- uint32_t IV1Left; /*!< Initialization Vector1 left */
- uint32_t IV1Right; /*!< Initialization Vector1 right */
- } CRYP_IVConfig_T;
- /**
- * @brief CRYP context swapping structure definition
- */
- typedef struct
- {
- /* Current Configuration */
- uint32_t curCTRL; /*!< Current Configuration */
- /* IV */
- uint32_t IV0L; /*!< Initialization Vector0 left */
- uint32_t IV0R; /*!< Initialization Vector0 right */
- uint32_t IV1L; /*!< Initialization Vector1 left */
- uint32_t IV1R; /*!< Initialization Vector1 right */
- /* KEY */
- uint32_t K0L; /*!< key0 left */
- uint32_t K0R; /*!< key0 right */
- uint32_t K1L; /*!< key1 left */
- uint32_t K1R; /*!< key1 right */
- uint32_t K2L; /*!< key2 left */
- uint32_t K2R; /*!< key2 right */
- uint32_t K3L; /*!< key3 left */
- uint32_t K3R; /*!< key3 right */
- } CRYP_Context_T;
- /**@} end of group CRYP_Structure*/
- /** @defgroup CRYP_Functions
- @{
- */
- /* CRYP Configuration */
- void CRYP_Reset(void);
- void CRYP_Config(CRYP_Config_T* crypConfig);
- void CRYP_ConfigStructInit(CRYP_Config_T* crypConfig);
- void CRYP_ConfigKey(CRYP_KeyConfig_T* keyConfig);
- void CRYP_ConfigKeyStructInit(CRYP_KeyConfig_T* keyConfig);
- void CRYP_ConfigIV(CRYP_IVConfig_T* IVConfig);
- void CRYP_ConfigIVStructInit(CRYP_IVConfig_T* IVConfig);
- void CRYP_Enable(void);
- void CRYP_Disable(void);
- void CRYP_FlushFIFO(void);
- /* CRYP Data processing */
- void CRYP_InData(uint32_t Data);
- uint32_t CRYP_OutData(void);
- /* CRYP Context swapping */
- uint32_t CRYP_SaveContext(CRYP_Context_T* context, CRYP_KeyConfig_T* keyConfig);
- void CRYP_RestoreContext(CRYP_Context_T* context);
- /* CRYP DMA */
- void CRYP_EnableDMA(CRYP_DMAREQ_T dmaReq);
- void CRYP_DisableDMA(CRYP_DMAREQ_T dmaReq);
- /* CRYP Interrupt and flag */
- void CRYP_EnableInterrupt(uint8_t interrupt);
- void CRYP_DisableInterrupt(uint8_t interrupt);
- uint8_t CRYP_ReadIntFlag(CRYP_INT_T flag);
- uint8_t CRYP_ReadStatusFlag(CRYP_FLAG_T flag);
- uint8_t CRYP_ReadCmdStatus(void);
- /* High Level AES */
- uint8_t CRYP_AES_ECB(CRYP_MODE_T mode, uint8_t *key, uint16_t keysize,
- uint8_t *input, uint32_t length, uint8_t *output);
- uint8_t CRYP_AES_CBC(CRYP_MODE_T mode, uint8_t *key, uint16_t keysize,
- uint8_t IV[16], uint8_t *input,
- uint32_t length, uint8_t *output);
- uint8_t CRYP_AES_CTR(CRYP_MODE_T mode, uint8_t *key, uint16_t keysize,
- uint8_t IV[16], uint8_t *input,
- uint32_t length, uint8_t *output);
- /* High Level DES */
- uint8_t CRYP_DES_ECB(CRYP_MODE_T mode, uint8_t key[8], uint8_t *input,
- uint32_t length, uint8_t *output);
- uint8_t CRYP_DES_CBC(CRYP_MODE_T mode, uint8_t key[8], uint8_t *input,
- uint8_t IV[8], uint32_t length, uint8_t *output);
- /* High Level TDES */
- uint8_t CRYP_TDES_ECB(CRYP_MODE_T mode, uint8_t key[24], uint8_t *input,
- uint32_t length, uint8_t *output);
- uint8_t CRYP_TDES_CBC(CRYP_MODE_T mode,uint8_t key[24], uint8_t *input,
- uint8_t IV[8], uint32_t length, uint8_t *output);
- #ifdef __cplusplus
- }
- #endif
- #endif /* __APM32F4XX_CRYP_H */
- /**@} end of group CRYP_Enumerations */
- /**@} end of group CRYP_Driver */
- /**@} end of group APM32F4xx_StdPeriphDriver */
|