/**
 * @file tst_hlse_a71ch_util.h
 * @author NXP Semiconductors
 * @version 1.0
 * @par License
 *
 * Copyright 2016 NXP
 * SPDX-License-Identifier: Apache-2.0
 *
 * @par Description
 * API of test bench utility functions specific to the a71ch using HLSE Generic API
 * @par History
 * 1.0   2016-Oct-1 : Initial version
 */

#ifndef _TST_HLSE_A71CH_UTIL_H_
#define _TST_HLSE_A71CH_UTIL_H_

#include "sm_types.h"
#include "ax_api.h"

#include "HLSEAPI.h"

#ifdef __cplusplus
extern "C" {
#endif

/** \name Module functions
   @{ */
U8 hlse_a71chInitModule(U8 initMode);
U8 hlse_a71chSetupScp03(void);
U8 hlse_a71chShowModuleInfo(U8 *scpState);
/** @}*/

/** \name HLSE helper functions
   @{ */
U16 hlse_GenerateEccKeyPair(SST_Index_t index, HLSE_OBJECT_HANDLE* hObject);
U16 hlse_GetEccPublicKey(U8 *publicKey, U16 *publicKeyLen, HLSE_OBJECT_HANDLE* hObject);
U16 hlse_SetEccKeyPair(SST_Index_t index, const U8 *publicKey, U16 publicKeyLen, const U8 *privateKey, U16 privateKeyLen, HLSE_OBJECT_HANDLE* hObject);
U16 hlse_SetEccPublicKey(SST_Index_t index, const U8 *publicKey, U16 publicKeyLen, HLSE_OBJECT_HANDLE* hObject);
U16 hlse_EcdhGetSharedSecret(HLSE_OBJECT_HANDLE hObject, const U8 *pOtherPublicKey, U16 otherPublicKeyLen, U8 *pSharedSecret, U16 *pSharedSecretLen);
U16 hlse_EccSign(HLSE_OBJECT_HANDLE hObject, const U8 *pHash, U16 hashLen, U8 *pSignature, U16 *pSignatureLen);
U16 hlse_EccNormalizedAsnSign(HLSE_OBJECT_HANDLE hObject, const U8 *pHash, U16 hashLen, U8 *pSignature, U16 *pSignatureLen);
U16 hlse_EccVerifyWithKey(const U8 *pKeyData, U16 keyDataLen, const U8 *pHash, U16 hashLen, const U8 *pSignature, U16 signatureLen, U8 *pResult);

U16 hlse_EccVerify(SST_Index_t index, const U8 *pHash, U16 hashLen, const U8 *pSignature, U16 signatureLen, U8 *pResult);

U16 hlse_GetRandom(U8 *random, U8 randomLen);
U16 hlse_GetUniqueID(U8 *uid, U16 *uidLen);
U16 hlse_InjectLock(void);
U16 hlse_GetCredentialInfo(U8 *map, U16 *mapLen);

U16 hlse_SCP_GP_PutKeys(U8 keyVersion, U8 *keyEnc, U8 *keyMac, U8 *keyDek, U8 *currentKeyDek, U16 keyBytes);
U16 hlse_SCP_Authenticate(U8 *keyEnc, U8 *keyMac, U8 *keyDek, U16 keyBytes, U8 *sCounter, U16 *sCounterLen);

U16 hlse_SetSymKey(SST_Index_t index, const U8 *key, U16 keyLen, HLSE_OBJECT_HANDLE* hObject);

U16 hlse_GetGPDataSize(U16* gpSize);
/** @}*/

#ifdef __cplusplus
}
#endif
#endif // _TST_HLSE_A71CH_UTIL_H_
