Estoy tratando de implementar una rutina de encriptación muy básica del Modo AES192-CBC en la placa de descubrimiento STM32F407 y quiero hacer ese proceso con el procesador criptográfico integrado en la MCU STM32F407. Copié la mayoría de las partes de mi código de los proyectos de ejemplo de ST. Aquí está mi código:
#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
}
}
No funciona correctamente y es por eso que depuré mi código y noté que la ubicación del problema es:
/* 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);
}
Esta es la parte del código del controlador del procesador de cifrado de los controladores originales de ST. En ese caso, mi procesador criptográfico no se ha iniciado correctamente.
¿Ese problema se debe al tipo de ventas de mi dispositivo (como se dice en el código del controlador) o hay algún problema con la rutina de mi código?