static int aes_set_key( mbedtls_aes_context *ctx, const unsigned char *key, unsigned int keybits ) { switch( keybits ) { case 128: ctx->hcryp_aes.Init.KeySize = CRYP_KEYSIZE_128B; memcpy(ctx->aes_key, key, 16); break; case 192: #if defined (TARGET_STM32L486xG) return(MBEDTLS_ERR_AES_INVALID_KEY_LENGTH); #else ctx->hcryp_aes.Init.KeySize = CRYP_KEYSIZE_192B; memcpy(ctx->aes_key, key, 24); break; #endif case 256: ctx->hcryp_aes.Init.KeySize = CRYP_KEYSIZE_256B; memcpy(ctx->aes_key, key, 32); break; default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); } /* Deinitializes the CRYP peripheral */ if (HAL_CRYP_DeInit(&ctx->hcryp_aes) == HAL_ERROR) return (HAL_ERROR); ctx->hcryp_aes.Init.DataType = CRYP_DATATYPE_8B; ctx->hcryp_aes.Instance = CRYP; /* Enable CRYP clock */ __HAL_RCC_CRYP_CLK_ENABLE(); ctx->hcryp_aes.Init.pKey = ctx->aes_key; #if defined (TARGET_STM32L486xG) ctx->hcryp_aes.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE; #endif if (HAL_CRYP_Init(&ctx->hcryp_aes) == HAL_ERROR) return (HAL_ERROR); /* allow multi-instance of CRYP use: save context for CRYP HW module CR */ ctx->ctx_save_cr = ctx->hcryp_aes.Instance->CR; return(0); }
/** * @brief Initializes the Global MSP. * @param None * @retval None */ void HAL_MspInit(void) { /* NOTE : This function is generated automatically by MicroXplorer and eventually modified by the user */ /* Enable UART 4 clock */ __HAL_RCC_UART4_CLK_ENABLE(); /* RNG Periph clock enable */ __HAL_RCC_RNG_CLK_ENABLE(); #ifdef USE_STM32F4XX_HW_CRYPTO /* Enable CRYP clock */ __HAL_RCC_CRYP_CLK_ENABLE(); /* Enable Hash clock */ __HAL_RCC_HASH_CLK_ENABLE(); #endif }
/** * @brief Initializes the CRYP MSP. * This function configures the hardware resources used in this example: * - CRYP's clock enable * @param hcryp: CRYP handle * @retval None */ void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp) { /* Enable CRYP clock */ __HAL_RCC_CRYP_CLK_ENABLE(); }
void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp) { static DMA_HandleTypeDef hdmaIn; static DMA_HandleTypeDef hdmaOut; /*##-1- Enable peripherals Clock ###########################################*/ /* Enable CRYP clock */ __HAL_RCC_CRYP_CLK_ENABLE(); /* Enable DMA2 clock */ __HAL_RCC_DMA2_CLK_ENABLE(); /*##-2- Configure the DMA streams ##########################################*/ /***************** Configure common DMA In parameters ***********************/ hdmaIn.Init.Channel = DMA_CHANNEL_2; hdmaIn.Init.Direction = DMA_MEMORY_TO_PERIPH; hdmaIn.Init.PeriphInc = DMA_PINC_DISABLE; hdmaIn.Init.MemInc = DMA_MINC_ENABLE; hdmaIn.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdmaIn.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdmaIn.Init.Mode = DMA_NORMAL; hdmaIn.Init.Priority = DMA_PRIORITY_HIGH; hdmaIn.Init.FIFOMode = DMA_FIFOMODE_ENABLE; hdmaIn.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL; hdmaIn.Init.MemBurst = DMA_MBURST_SINGLE; hdmaIn.Init.PeriphBurst = DMA_PBURST_SINGLE; hdmaIn.Instance = DMA2_Stream6; /* Associate the DMA handle */ __HAL_LINKDMA(hcryp, hdmain, hdmaIn); /* Configure the DMA Stream */ HAL_DMA_Init(hcryp->hdmain); /* NVIC configuration for DMA Input data interrupt */ HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 0x0F, 0); HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn); /***************** Configure common DMA Out parameters **********************/ hdmaOut.Init.Channel = DMA_CHANNEL_2; hdmaOut.Init.Direction = DMA_PERIPH_TO_MEMORY; hdmaOut.Init.PeriphInc = DMA_PINC_DISABLE; hdmaOut.Init.MemInc = DMA_MINC_ENABLE; hdmaOut.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdmaOut.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdmaOut.Init.Mode = DMA_NORMAL; hdmaOut.Init.Priority = DMA_PRIORITY_VERY_HIGH; hdmaOut.Init.FIFOMode = DMA_FIFOMODE_ENABLE; hdmaOut.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL; hdmaOut.Init.MemBurst = DMA_MBURST_SINGLE; hdmaOut.Init.PeriphBurst = DMA_PBURST_SINGLE; hdmaOut.Instance = DMA2_Stream5; /* Associate the DMA handle */ __HAL_LINKDMA(hcryp, hdmaout, hdmaOut); /* Configure the DMA Stream */ HAL_DMA_Init(&hdmaOut); /*##-3- Configure the NVIC for DMA #########################################*/ /* NVIC configuration for DMA output data interrupt */ HAL_NVIC_SetPriority(DMA2_Stream5_IRQn, 0x0F, 0); HAL_NVIC_EnableIRQ(DMA2_Stream5_IRQn); }