blob: e84bbabab8c429546a25bbf16642bdea5ddb6db1 [file] [log] [blame]
/***************************************************************************
*
* Copyright 2016 NXP
* SPDX-License-Identifier: Apache-2.0
* **************************************************************************
*
* Name: mainA71CH_hlse.c
*
* This file contains the main entry for the host library example application
* using the Generic APi
*
* Define '#define WALKTHROUGH_ONLY' to limit the number of example functions
* invoked
****************************************************************************/
#include <string.h>
#include <stdint.h>
#include <stdio.h>
#include <assert.h>
#include <time.h>
#include "tst_sm_time.h"
#ifdef _WIN32
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif
#include "a71ch_ex_hlse.h"
#include "ax_api.h"
#include "axHostCrypto.h"
#include "sm_timer.h"
#include "sm_printf.h"
#include "global_platf.h"
#include "app_boot.h"
// -----------------------------------
// Start of END-USER relevant defines
// #define WALKTHROUGH_ONLY
// End of END-USER relevant defines
// -----------------------------------
// ---------------------------------------------------------------------
// Please do not change the following defines
// ---------------------------------------------------------------------
#define EX_APP_VERSION "1.30:1.31" // App-version:Preferred-applet-version
#if defined(__gnu_linux__) || defined(_WIN32)
# define SET_TIME(now) now = time(NULL)
# define TIME_TO_STRING(pNow) ctime((pNow))
#else
# define SET_TIME(now)
# define TIME_TO_STRING(time) ("-")
#endif
/*******************************************************************************
** Main Function main()
*******************************************************************************/
int main(int argc, char ** argv)
{
U8 result = 1;
int connectStatus = 0;
SmCommState_t commState = { 0 };
#if defined(__gnu_linux__) || defined(_WIN32)
time_t now;
#endif
U8 dbgTstMode = 0x00;
// U8 dbgTstMode = EXTENDED_TEST | MEASURE_EXEC_TIME;
U8 gpStorageTstMode = 0x00;
// U8 gpStorageTstMode = EXTENDED_TEST;
axTimeMeasurement_t execTime;
#ifdef TDA8029_UART
Scp03SessionState_t sessionState;
#endif
app_boot_Init();
sm_printf(DBGOUT, "a71ch HLSE example application (Rev %s)\r\n", EX_APP_VERSION);
sm_printf(DBGOUT, "**********************************************\r\n");
sm_printf(DBGOUT, "Connect to A71CH-SM. Chunksize at link layer = %d.\r\n", MAX_CHUNK_LENGTH_LINK);
APP_BOOT_RESUME_HANDLING(exHlseBoot);
#if AX_EMBEDDED
connectStatus = app_boot_Connect(&commState, NULL);
#else
connectStatus = app_boot_Connect(&commState, argv[1]);
#endif
if (connectStatus != 0) {
sm_printf(CONSOLE, "Connection failed. SW = %d\r\n", connectStatus);
#if defined(USE_RTOS) && USE_RTOS == 1
assert(0);
#else
return connectStatus;
#endif
}
initMeasurement(&execTime);
#ifdef WALKTHROUGH_ONLY
result &= exHlseWalkthrough();
#else
/*
* New tests
*/
result &= exHlseCert();
//goto LBL_REPORT_STATUS;
/*
* Previous legacy tests - converted to use HLSE Generic API
*/
result &= exHlseAes();
result &= exHlseConfig();
result &= exHlseDebugMode(dbgTstMode);
result &= exHlseEccNohc();
result &= exHlseWalkthrough();
// exHlseGPStorage : partially converted - as
// using gp storage "offset" parameter removed from the Generic API to use a higher level abstraction
result &= exHlseGPStorage(gpStorageTstMode);
result &= exHlseMisc();
result &= exHlsePsk();
result &= exHlseScp();
result &= exHlseSst();
result &= exHlseSstKp();
#endif
#if defined(TDA8029_UART) || defined(SCI2C) || defined(PCSC) || defined(SPI) || defined(IPC)
LBL_REPORT_STATUS:
#endif
concludeMeasurement(&execTime);
SET_TIME(now);
app_test_status(result);
sm_printf(CONSOLE, "\r\nCompiled for Device Type %c\r\n", A71CH_DEVICE_TYPE);
sm_printf(CONSOLE, "# Key Pairs = %d.\r\n", A71CH_KEY_PAIR_MAX);
sm_printf(CONSOLE, "# Pub Key = %d.\r\n", A71CH_PUBLIC_KEY_MAX);
sm_printf(CONSOLE, "# Sym Key = %d.\r\n", A71CH_SYM_KEY_MAX);
sm_printf(CONSOLE, "\r\n-----------\r\nExample Set HLSE-A71CH finished (Rev %s) on 0x%04X, overall result = %s\r\n%sExec time: %ld ms\r\n------------\r\n",
EX_APP_VERSION,
commState.appletVersion,
((result == 1) ? "OK" : "FAILED"),
TIME_TO_STRING(&now),
getMeasurement(&execTime));
#if defined(_WIN32) && !defined(__MINGW32__)
if (IsDebuggerPresent()) {
PRINTF("Enter/Return to close window.");
getchar();
}
#endif
return 0;
}