/*!
* @file     Crypto_Cfg.h
*
* @version  1.0.0
*
* @brief    AUTOSAR Crypto Driver header file
 *          Include Crypto Driver Configuration Parameter Header file.
* @attention
*
* Project Name      : AUTOSAR MCAL
*
* Platform          : Arm
*
* Autosar Standard  : Classic Platform 4.4.0
*
* Compiled Version  : G32A10xx_MCAL_1_0_0_15-Nov-25
*
* Copyright (C) 2026 Geehy Semiconductor
*
* You may not use this file except in compliance with the
* GEEHY COPYRIGHT NOTICE (Geehy Semiconductor Software License Agreement).
*
* The program is only for reference, which is distributed in the hope
* that it will be usefull and instructional for customers to develop
* their software. Unless required by applicable law or agreed to in
* writing, the program is distributed on an "AS IS" BASIS, WITHOUT
* ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
* See the Geehy Semiconductor Software License Agreement for the governing permissions
* and limitations under the License.
*/

#ifndef CRYPTO_CFG_H
#define CRYPTO_CFG_H

#ifdef __cplusplus
extern "C" {
#endif
/** @addtogroup G32A10xx_StdPeriphDriver
  @{
*/

/** @defgroup CRYPTO_Driver
  * @brief CRYPTO driver modules
  @{
*/

/** @defgroup CRYPTO_Macros
  @{
*/
/*******************************************************************************
                    VENDOR ID & AUTOSAR VERSION INFO
*******************************************************************************/
/** Vendor ID (vendorId) of the dedicated implementation of this module according to the AUTOSAR vendor list. */
#define CRYPTO_CFG_H_VENDOR_ID                          0x00C1U
/** Major version number of AUTOSAR release on which the appropriate implementation is based on. */
#define CRYPTO_CFG_H_AR_RELEASE_MAJOR_VERSION           0x04U
/** Minor version number of AUTOSAR release on which the appropriate implementation is based on. */
#define CRYPTO_CFG_H_AR_RELEASE_MINOR_VERSION           0x04U
/** Revision version number of AUTOSAR release on which the appropriate implementation is based on. */
#define CRYPTO_CFG_H_AR_RELEASE_REVISION_VERSION        0x00U
/** Major version number of the vendor specific implementation of the module. The numbering is vendor specific. */
#define CRYPTO_CFG_H_SW_MAJOR_VERSION                   0x01U
/** Minor version number of the vendor specific implementation of the module. The numbering is vendor specific. */
#define CRYPTO_CFG_H_SW_MINOR_VERSION                   0x00U
/** Patch level version number of the vendor specific implementation of the module. The numbering is vendor specific. */
#define CRYPTO_CFG_H_SW_PATCH_VERSION                   0x00U

/*******************************************************************************
                            DEFINES AND MACROS
*******************************************************************************/
/**  Enable/Disable Development Error Detection */
#define CRYPTO_DEV_ERR_DETECT_ENABLE                 (STD_OFF)

/**  Enable/Disable the Crypto_GetVersionInfo() api service */
#define CRYPTO_VERSION_INFO_API_ENABLE               (STD_ON)

/** Enable/Disable Hash interrupt support mode */
#define CRYPTO_HASH_INT_ENABLE                       (STD_ON)

/** Hash mode for pad or not */
#define CRYPTO_HASH_PAD_ENABLE                       (STD_ON)

/** Timeout value for Crypto module */
#define CRYPTO_TIMEOUT_VALUE                         (0x10000U)

/** The index for Crypto module instance */
#define CRYPTO_INSTANCE_ID                           ((uint8)0)

/** The number of object configured to Crypto driver objects */
#define CRYPTO_DRIVER_OBJECT_NUMBER                  (2U)

/** Symbolic name for the CryptoKeyElementId KeyMaterial. */
#define  CRYPTO_KEYMATERIAL_256                      ((uint32)1U)
#define  CRYPTO_KEYMATERIAL_192                      ((uint32)2U)
#define  CRYPTO_KEYMATERIAL_128                      ((uint32)3U)

/** Symbolic name for the CryptoKeyElementId IV. */
#define  CRYPTO_KEYELEMENT_IV                        ((uint32)5U)
/** Symbolic name for the CryptoKeyElementId KeyMaterial_64_Bytes. */
#define  CRYPTO_KEYMATERIAL_64BYTES                  ((uint32)1U)
/** Symbolic name for the CryptoKeyElementId KeyMaterial_NotRead. */
#define  CRYPTO_KEYMATERIAL_NOTREAD                  ((uint32)1U)
/** Symbolic name for the CryptoKeyElementId Seed. */
#define  CRYPTO_KEYELEMENT_SEED                      ((uint32)16U)

/** The number of Crypto key elements */
#define CRYPTO_KEY_ELEMENTS_NUMBER                   (7U)

/** Symbolic name for the CryptoDriverObjectId WithQueue. */
#define  CRYPTO_DRIVEROBJECT_WITHQUEUE               ((uint32)1U)
/** Symbolic name for the CryptoDriverObjectId NoQueue. */
#define  CRYPTO_DRIVEROBJECT_NOQUEUE                 ((uint32)2U)

/** Symbolic name for the CryptoKeyId KEY_1. */
#define  CRYPTO_KEY_1                                ((uint32)1U)
/** Symbolic name for the CryptoKeyId KEY_2. */
#define  CRYPTO_KEY_2                                ((uint32)2U)
/** Symbolic name for the CryptoKeyId KEY_3. */
#define  CRYPTO_KEY_3                                ((uint32)3U)
/** Symbolic name for the CryptoKeyId KEY_NOT_READ. */
#define  CRYPTO_KEY_NOT_READ                         ((uint32)4U)
/** Symbolic name for the CryptoKeyId KEY_SEED1. */
#define  CRYPTO_KEY_SEED                             ((uint32)5U)

/** The number of Crypto keys */
#define CRYPTO_KEYS_NUMBER                           (5U)

/** identifier whether the Crypto Export Keys is Configured or not */
#define CRYPTO_KEY_EXPORT_CONFIGURED                 (STD_ON)

/** The number of Crypto key output elements*/
#define CRYPTO_KEY_EXPROT_ELEMENTS_NUMBER            (1U)

/** identifier whether the Crypto generate Keys is Configured or not */
#define CRYPTO_KEY_GEN_CONFIGURED                    (STD_ON)

#if (CRYPTO_KEYS_NUMBER != 0)
    /** identifier whether the Crypto Keys is Configured or not */
    #define CRYPTO_KEYS_CONFIGURED                       (1U)
#else
    /** identifier whether the Crypto Keys is Configured or not */
    #define CRYPTO_KEYS_CONFIGURED                       (0U)
#endif

/**@} end of group CRYPTO_Macros */
#ifdef __cplusplus
}
#endif

#endif /** CRYPTO_CFG_H */
/**@} end of group CRYPTO_Driver */
/**@} end of group G32A10xx_StdPeriphDriver */
