/**
 ******************************************************************************
 * @file    stm32l4xx_hal_cryp_ex.h
 * @author  MCD Application Team
 * @brief   Header file of CRYPEx HAL module.
 ******************************************************************************
 * @attention
 *
 * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
 * All rights reserved.</center></h2>
 *
 * This software component is licensed by ST under BSD 3-Clause license,
 * the "License"; You may not use this file except in compliance with the
 * License. You may obtain a copy of the License at:
 *                        opensource.org/licenses/BSD-3-Clause
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef STM32L4xx_HAL_CRYP_EX_H
#define STM32L4xx_HAL_CRYP_EX_H

#ifdef __cplusplus
    extern "C" {
#endif

#if defined( AES )

/* Includes ------------------------------------------------------------------*/
    #include "stm32l4xx_hal_def.h"

/** @addtogroup STM32L4xx_HAL_Driver
 * @{
 */

/** @addtogroup CRYPEx
 * @{
 */

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

/** @addtogroup CRYPEx_Exported_Functions
 * @{
 */

/** @addtogroup CRYPEx_Exported_Functions_Group1
 * @{
 */

/* CallBack functions  ********************************************************/
    void HAL_CRYPEx_ComputationCpltCallback( CRYP_HandleTypeDef * hcryp );

/**
 * @}
 */

/** @addtogroup CRYPEx_Exported_Functions_Group2
 * @{
 */

/* AES encryption/decryption processing functions  ****************************/
    HAL_StatusTypeDef HAL_CRYPEx_AES( CRYP_HandleTypeDef * hcryp,
                                      uint8_t * pInputData,
                                      uint16_t Size,
                                      uint8_t * pOutputData,
                                      uint32_t Timeout );
    HAL_StatusTypeDef HAL_CRYPEx_AES_IT( CRYP_HandleTypeDef * hcryp,
                                         uint8_t * pInputData,
                                         uint16_t Size,
                                         uint8_t * pOutputData );
    HAL_StatusTypeDef HAL_CRYPEx_AES_DMA( CRYP_HandleTypeDef * hcryp,
                                          uint8_t * pInputData,
                                          uint16_t Size,
                                          uint8_t * pOutputData );

/* AES encryption/decryption/authentication processing functions  *************/
    HAL_StatusTypeDef HAL_CRYPEx_AES_Auth( CRYP_HandleTypeDef * hcryp,
                                           uint8_t * pInputData,
                                           uint64_t Size,
                                           uint8_t * pOutputData,
                                           uint32_t Timeout );
    HAL_StatusTypeDef HAL_CRYPEx_AES_Auth_IT( CRYP_HandleTypeDef * hcryp,
                                              uint8_t * pInputData,
                                              uint64_t Size,
                                              uint8_t * pOutputData );
    HAL_StatusTypeDef HAL_CRYPEx_AES_Auth_DMA( CRYP_HandleTypeDef * hcryp,
                                               uint8_t * pInputData,
                                               uint64_t Size,
                                               uint8_t * pOutputData );

/**
 * @}
 */

/** @addtogroup CRYPEx_Exported_Functions_Group3
 * @{
 */

/* AES suspension/resumption functions  ***************************************/
    void HAL_CRYPEx_Read_IVRegisters( CRYP_HandleTypeDef * hcryp,
                                      uint8_t * Output );
    void HAL_CRYPEx_Write_IVRegisters( CRYP_HandleTypeDef * hcryp,
                                       uint8_t * Input );
    void HAL_CRYPEx_Read_SuspendRegisters( CRYP_HandleTypeDef * hcryp,
                                           uint8_t * Output );
    void HAL_CRYPEx_Write_SuspendRegisters( CRYP_HandleTypeDef * hcryp,
                                            uint8_t * Input );
    void HAL_CRYPEx_Read_KeyRegisters( CRYP_HandleTypeDef * hcryp,
                                       uint8_t * Output,
                                       uint32_t KeySize );
    void HAL_CRYPEx_Write_KeyRegisters( CRYP_HandleTypeDef * hcryp,
                                        uint8_t * Input,
                                        uint32_t KeySize );
    void HAL_CRYPEx_Read_ControlRegister( CRYP_HandleTypeDef * hcryp,
                                          uint8_t * Output );
    void HAL_CRYPEx_Write_ControlRegister( CRYP_HandleTypeDef * hcryp,
                                           uint8_t * Input );
    void HAL_CRYPEx_ProcessSuspend( CRYP_HandleTypeDef * hcryp );

/**
 * @}
 */


/**
 * @}
 */

/* Private functions -----------------------------------------------------------*/

/** @addtogroup CRYPEx_Private_Functions CRYPEx Private Functions
 * @{
 */
    HAL_StatusTypeDef CRYP_AES_Auth_IT( CRYP_HandleTypeDef * hcryp );

/**
 * @}
 */


/**
 * @}
 */

/**
 * @}
 */

#endif /* AES */

#ifdef __cplusplus
    }
#endif

#endif /* STM32L4xx_HAL_CRYP_EX_H */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
