Problema de encriptación AES de descubrimiento STM32F4

0

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?

    
pregunta Batu92k

1 respuesta

2

El STM32f407 que se usa en la placa del disco no tiene el hardware criptográfico, el STM32f417 es la parte compatible con el código y el pin con hardware criptográfico.

Esta página proporciona detalles, vea el punto # 8

  

El STM32F417 también integra un procesador crypto / hash que proporciona aceleración de hardware para AES 128, 192, 256, Triple DES y hash (MD5, SHA-1)

    
respondido por el Colin

Lea otras preguntas en las etiquetas