Skip to main content
Christopher Meyer
Visitor II
December 6, 2017
Question

AES-CBC Encryption/Decryption using DMA on STM32L063

  • December 6, 2017
  • 0 replies
  • 848 views
Posted on December 06, 2017 at 21:27

Hi there,

i have a STM32L063 and i wanna encrypt a 32-byte packet by AES-CBC.

I have tested it with using the 'HAL_CRYP_AESCBC_Encrypt' and 'HAL_CRYP_AESCBC_Decrypt' and it worked everytime the same encrypted packet and decrypted packet matches the original packet.

Now i have changed to DMA and it worked the first cycle. The Second cycle there is not the expected behaviour.

Does anybody have an idea what could be the problem?

Thanks

Here the code:

if (HAL_CRYP_DeInit(&hcryp) != HAL_OK)

            {

                Error_Handler();

            }

            MX_AES_Init();

//            if (HAL_CRYP_AESCBC_Encrypt_DMA(&hcryp, packet_b_aes,

//            AES_PACKETSIZE, packet_a_aes) != HAL_OK)

//            {

//                /* Processing Error */

//                Error_Handler();

//            }

            if (HAL_CRYP_AESCBC_Encrypt_DMA(&hcryp, packet_lora,

                        AES_PACKETSIZE, packet_a_aes) != HAL_OK)

                        {

                            /* Processing Error */

                            Error_Handler();

                        }

             while (HAL_CRYP_GetState(&hcryp) != HAL_CRYP_STATE_READY)

             {

             }

            if (HAL_CRYP_DeInit(&hcryp) != HAL_OK)

            {

                Error_Handler();

            }

            MX_AES_Init();

            if (HAL_CRYP_AESCBC_Decrypt_DMA(&hcryp, packet_a_aes, AES_PACKETSIZE,

                    packet_dec_aes) != HAL_OK)

            {

                /* Processing Error */

                Error_Handler();

            }

             while (HAL_CRYP_GetState(&hcryp) != HAL_CRYP_STATE_READY)

            {

            }

And the Init Variables:

static const uint8_t pKeyAES[16] =

{ 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09,

        0xcf, 0x4f, 0x3c };

static const uint8_t pInitVectAES[16] =

{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,

        0x0d, 0x0e, 0x0f };

uint8_t packet_lora[AES_PACKETSIZE] =

{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,

        0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,

        0x0d, 0x0e, 0x0f  };

/* AES init function */

static void MX_AES_Init(void)

{

    hcryp.Instance = AES;

    hcryp.Init.DataType = CRYP_DATATYPE_8B;

    hcryp.Init.pKey = (uint8_t *) pKeyAES;

    hcryp.Init.pInitVect = (uint8_t *) pInitVectAES;

    if (HAL_CRYP_Init(&hcryp) != HAL_OK)

    {

        _Error_Handler(__FILE__, __LINE__);

    }

}

#stm32l0 #crypto-aes-encrypt-stm32 #dma-normal
This topic has been closed for replies.