/**
 * @file ax_scp.h
 * @author NXP Semiconductors
 * @version 1.0
 * @par License
 *
 * Copyright 2017 NXP
 * SPDX-License-Identifier: Apache-2.0
 *
 * @par Description
 * API to setup an SCP03 communication channel
 * @par History
 * 1.0   26-march-2014 : Initial version
 *
 *****************************************************************************/

#ifndef _AX_SSS_SCP_H_
#define _AX_SSS_SCP_H_


#if defined(SSS_USE_FTR_FILE)
#include "fsl_sss_ftr.h"
#else
#include "fsl_sss_ftr_default.h"
#endif

#include <string.h>
#include <stdint.h>
#include <stdio.h>
#include <assert.h>

#include "sm_types.h"
#include <HLSETypes.h>
#include <ax_common.h>
#include "nxScp03_Types.h"

#if SSS_HAVE_SCP_SCP03_SSS

#define     SM_SCP03  0x01        //!< Global Platform's Secure Channel Protocol 03
#define     SM_SCP02  0x02        //!< Global Platform's Secure Channel Protocol 02



U16 SCP_SSS_Authenticate(SM_SECURE_SCP03_KEYOBJ * params, U8 *sCounter, U16 *sCounterLen);
U16 SCP_SSS_HostLocal_CalculateSessionKeys(ChannelId_t channelId,SM_SECURE_SCP03_KEYOBJ * params, U8 *hostChallenge, U8 *cardChallenge);
U16 SCP_SSS_HostLocal_VerifyCardCryptogram(ChannelId_t channelId, U8 *hostChallenge, U8 *cardChallenge, U8 *cardCryptoGram);
U16 SCP_SSS_HostLocal_CalculateHostCryptogram(ChannelId_t channelId, U8 *hostChallenge, U8 *cardChallenge, U8 *hostCryptogram);
U16 SCP_SSS_GP_ExternalAuthenticate(ChannelId_t channelId, U8* hostCryptogram);
U16 SCP_SSS_HostLocal_SetDefaultValueIcvCCounter(ChannelId_t channelId);
U16 SCP_SSS_HostLocal_GetSessionState(ChannelId_t channelId, Scp03_SSS_SessionState_t *pSession);
U16 SCP_SSS_HostLocal_SetMacChainingValue(ChannelId_t channelId, U8 *mcv);
U16 SCP_SSS_HostLocal_ResetMacChainingValue(ChannelId_t channelId);
U16 SCP_SSS_HostLocal_IncIcvCCounter(ChannelId_t channelId);
HLSE_RET_CODE   SCP_SSS_CalculateCMAC(sss_object_t key,
    U8* inData, U32 inDataLen,
    U8* outSignature, U32* outSignatureLen);
U16 SCP_SSS_Save_SessionKeyObj(sss_object_t *keyObj, U8 *Sessionkey);
U16 SM_ChannelAuthenticate(SM_SECURE_SCP03_KEYOBJ *scp03Params, U8 *cCounter);

#endif //#if SSS_HAVE_SCP_SCP03_SSS
#endif
