I am trying to implement very basic AES192-CBC Mode encryption routine on STM32F407 Discovery board and I want to do that process with the onboard Cryptographic processor in STM32F407 MCU. I copied most of my code parts from ST's exampe projects. Here is my code:
#define AES_TEXT_SIZE 64
uint8_t AES192key[24] =
{0x8e,0x73,0xb0,0xf7,0xda,0x0e,0x64,0x52,
0xc8,0x10,0xf3,0x2b,0x80,0x90,0x79,0xe5,
0x62,0xf8,0xea,0xd2,0x52,0x2c,0x6b,0x7b}; // key size 192 bits
uint8_t IV_1[16] =
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; // initialization vector
uint8_t AES_TEXT[AES_TEXT_SIZE] =
{0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41};
uint8_t Encryptedtext[AES_TEXT_SIZE]; // Encrypted text
uint8_t Decryptedtext[AES_TEXT_SIZE]; // Decrypted text
/**
* @brief Program entry funtion
* @param none
* @retval none
*/
int main()
{
SystemInit(); // System initializing
USART2_Init(); // USART2 initializing
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); // onboard cryp hardware clock enable
/* program main infinite loop */
while(1)
{
/* send original text first */
USART_Puts(USART2, "Original Text:\n");
USART_Puts(USART2, (char*)AES_TEXT);
USART_Puts(USART2, "\n");
/* if encryption process successed send encryptedtext otherwise send "Fail" */
if(CRYP_AES_CBC(MODE_ENCRYPT, IV_1, AES192key, 192, AES_TEXT, AES_TEXT_SIZE, Encryptedtext) == SUCCESS)
{
USART_Puts(USART2, "Encrypted Text:\n");
USART_Puts(USART2, (char*)Encryptedtext);
USART_Puts(USART2, "\n");
}
else
{
USART_Puts(USART2, "Fail\n");
}
Simple_Delay_MS(1000); // ~1 sec delay
}
}
Its not working properly and thats why I debugged my code and noticed that the problem location is:
/* Enable Crypto processor */
CRYP_Cmd(ENABLE);
if(CRYP_GetCmdStatus() == DISABLE)
{
/* The CRYP peripheral clock is not enabled or the device doesn't embedd
the CRYP peripheral (please check the device sales type. */
return(ERROR);
}
This is the part of encryption processor driver code from ST's original drivers. In that case my Cryptographic Processor has not been started properly.
Is that problem caused by the my device's sales type (like it said in driver code) or is there anything wrong with my code routine?