/**
 * @file a71ch_ex_hlse.h
 * @author NXP Semiconductors
 * @version 1.0
 * @par License
 *
 * Copyright 2016 NXP
 * SPDX-License-Identifier: Apache-2.0
 *
 * @par Description
 * This file implements the host API examples for the A71CH secure module.
 *  Using Generic API
 *
 * @par History
 * 1.0   2016-08-01 : Initial version
 *
 *****************************************************************************/
#ifndef _A71CH_EX_HLSE_
#define _A71CH_EX_HLSE_

#include "sm_types.h"
#include "sm_const.h"

#ifdef __cplusplus
extern "C" {
#endif

/// @cond
#define REDUCED_PACKETSIZE_FALSE (0x00)
#define REDUCED_PACKETSIZE_TRUE  (0x01)

// When A71CH_ALLOW_DISABLE_DEBUG_MODE is defined, the example code
// will permanently disable the DEBUG_MODE in case exDebugPermanentlyDisableDebugMode() is invoked.
//
// #define A71CH_ALLOW_DISABLE_DEBUG_MODE
/// @endcond

#define DURATION_TEST      (0x01)   //!< Bit pattern to request a duration test (valid on some example functions)
#define MEASURE_EXEC_TIME  (0x02)   //!< Bit pattern to trigger the measurement of execution time (valid on some example functions)
#define EXTENDED_TEST      (0x04)   //!< Bit pattern to trigger an extended test (valid on some example functions)

#define BOOT_SKIP_EXAMPLE       (0x00)  //!< Argument relevant to ::exBoot
#define BOOT_SIMULATED_CYCLE    (0x01)  //!< Argument relevant to ::exBoot
#define BOOT_BOOTLOADER_ROLE    (0x02)  //!< Argument relevant to ::exBoot
#define BOOT_HOST_OS_RESUME     (0x04)  //!< Argument relevant to ::exBoot

/// @cond A71CH Example Utility functions
U8 axExHlseAuthenticate(U8 *keyEnc, U8 *keyMac, U8 *keyDek);
U8 axExHlseCreateAndSetInitialHostScpKeys(U8 *keyEnc, U8 *keyMac, U8 *keyDek);
/// @endcond

/** \name Example functions illustrating usage of A71CH functionality
   @{ */
U8 exHlseAes(void);
U8 exHlseConfig(void);
U8 exHlseEccNohc(void);
U8 exHlseGPStorage(U8 tstMode);
U8 exHlseMisc(void);
U8 exHlsePsk(void);
U8 exHlseScp(void);
U8 exHlseSst(void);
U8 exHlseSstKp(void);
/** @}*/

/** \name Walkthrough example (illustrating typical product use)
  @{ */
U8 exHlseWalkthrough(void);
/** @}*/

/** \name Example functions illustrating specific Debug Mode functions (only available in case the Applet is in Debug Mode)
   @{ */
U8 exHlseDebugMode(U8 testMode);
U8 exHlsePermanentlyDisableDebugMode(void);
/** @}*/

/** \name Example function illustrating system boot in combination with SCP03 session key handover
@{ */
U8 exHlseBoot(U8 bootMode);
/** @}*/

/*
 * New examples
 */

/** \name Example function illustrating support for logical Certificate objects.
@{ */
U8 exHlseCert(void);
/** @}*/

#ifdef __cplusplus
}
#endif
#endif //_A71CH_EX_HLSE_
