123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- #include "stm32f4xx_cryp.h"
- #define DESBUSY_TIMEOUT ((uint32_t) 0x00010000)
-
- ErrorStatus CRYP_DES_ECB(uint8_t Mode, uint8_t Key[8], uint8_t *Input,
- uint32_t Ilength, uint8_t *Output)
- {
- CRYP_InitTypeDef DES_CRYP_InitStructure;
- CRYP_KeyInitTypeDef DES_CRYP_KeyInitStructure;
- __IO uint32_t counter = 0;
- uint32_t busystatus = 0;
- ErrorStatus status = SUCCESS;
- uint32_t keyaddr = (uint32_t)Key;
- uint32_t inputaddr = (uint32_t)Input;
- uint32_t outputaddr = (uint32_t)Output;
- uint32_t i = 0;
-
- CRYP_KeyStructInit(&DES_CRYP_KeyInitStructure);
-
- if( Mode == MODE_ENCRYPT )
- {
- DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt;
- }
- else
- {
- DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt;
- }
- DES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_DES_ECB;
- DES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b;
- CRYP_Init(&DES_CRYP_InitStructure);
-
- DES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr));
- keyaddr+=4;
- DES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr));
- CRYP_KeyInit(& DES_CRYP_KeyInitStructure);
-
- CRYP_FIFOFlush();
-
- CRYP_Cmd(ENABLE);
- if(CRYP_GetCmdStatus() == DISABLE)
- {
-
- status = ERROR;
- }
- else
- {
- for(i=0; ((i<Ilength) && (status != ERROR)); i+=8)
- {
-
-
- CRYP_DataIn(*(uint32_t*)(inputaddr));
- inputaddr+=4;
- CRYP_DataIn(*(uint32_t*)(inputaddr));
- inputaddr+=4;
-
-
- counter = 0;
- do
- {
- busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY);
- counter++;
- }while ((counter != DESBUSY_TIMEOUT) && (busystatus != RESET));
-
- if (busystatus != RESET)
- {
- status = ERROR;
- }
- else
- {
-
-
- *(uint32_t*)(outputaddr) = CRYP_DataOut();
- outputaddr+=4;
- *(uint32_t*)(outputaddr) = CRYP_DataOut();
- outputaddr+=4;
- }
- }
-
-
- CRYP_Cmd(DISABLE);
- }
- return status;
- }
- ErrorStatus CRYP_DES_CBC(uint8_t Mode, uint8_t Key[8], uint8_t InitVectors[8],
- uint8_t *Input, uint32_t Ilength, uint8_t *Output)
- {
- CRYP_InitTypeDef DES_CRYP_InitStructure;
- CRYP_KeyInitTypeDef DES_CRYP_KeyInitStructure;
- CRYP_IVInitTypeDef DES_CRYP_IVInitStructure;
- __IO uint32_t counter = 0;
- uint32_t busystatus = 0;
- ErrorStatus status = SUCCESS;
- uint32_t keyaddr = (uint32_t)Key;
- uint32_t inputaddr = (uint32_t)Input;
- uint32_t outputaddr = (uint32_t)Output;
- uint32_t ivaddr = (uint32_t)InitVectors;
- uint32_t i = 0;
-
- CRYP_KeyStructInit(&DES_CRYP_KeyInitStructure);
-
- if(Mode == MODE_ENCRYPT)
- {
- DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Encrypt;
- }
- else
- {
- DES_CRYP_InitStructure.CRYP_AlgoDir = CRYP_AlgoDir_Decrypt;
- }
- DES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_DES_CBC;
- DES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b;
- CRYP_Init(&DES_CRYP_InitStructure);
-
- DES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr));
- keyaddr+=4;
- DES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr));
- CRYP_KeyInit(& DES_CRYP_KeyInitStructure);
-
- DES_CRYP_IVInitStructure.CRYP_IV0Left = __REV(*(uint32_t*)(ivaddr));
- ivaddr+=4;
- DES_CRYP_IVInitStructure.CRYP_IV0Right= __REV(*(uint32_t*)(ivaddr));
- CRYP_IVInit(&DES_CRYP_IVInitStructure);
-
- CRYP_FIFOFlush();
-
-
- CRYP_Cmd(ENABLE);
- if(CRYP_GetCmdStatus() == DISABLE)
- {
-
- status = ERROR;
- }
- else
- {
- for(i=0; ((i<Ilength) && (status != ERROR)); i+=8)
- {
-
- CRYP_DataIn(*(uint32_t*)(inputaddr));
- inputaddr+=4;
- CRYP_DataIn(*(uint32_t*)(inputaddr));
- inputaddr+=4;
-
-
- counter = 0;
- do
- {
- busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY);
- counter++;
- }while ((counter != DESBUSY_TIMEOUT) && (busystatus != RESET));
-
- if (busystatus != RESET)
- {
- status = ERROR;
- }
- else
- {
-
- *(uint32_t*)(outputaddr) = CRYP_DataOut();
- outputaddr+=4;
- *(uint32_t*)(outputaddr) = CRYP_DataOut();
- outputaddr+=4;
- }
- }
-
-
- CRYP_Cmd(DISABLE);
- }
- return status;
- }
-
-
-
-
|