blob: 54b79b8a1d3d1b337d17a36410e71d9cd8686de7 [file] [log] [blame]
/***************************************************************************
*
* Copyright 2016 NXP
* SPDX-License-Identifier: Apache-2.0
* **************************************************************************
*
* Name: mainA71CH.c
*
* This file contains the main entry for the host library example application
*
* 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 MSC_VER
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif
#include "a71ch_ex.h"
#include "ax_api.h"
#include "axHostCrypto.h"
#include "sm_timer.h"
#include "sm_printf.h"
#include "global_platf.h"
#include "app_boot.h"
#include "nxLog_App.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
//TODO: to be moved to common Header file later
#define PRINT_HOSTLIB_VER (sm_printf(CONSOLE, "HostLib Version : 0x%04X", commState.hostLibVersion))
#define PRINT_APPLET_VER (sm_printf(CONSOLE, "Applet Version : 0x%04X", commState.appletVersion))
#define PRINT_SECUREBOX_VER (sm_printf(CONSOLE, "SecureBox Version: 0x%04X", commState.sbVersion))
#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
// int i = 0;
#ifdef MSC_VER
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF |
_CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode ( _CRT_ERROR, _CRTDBG_MODE_DEBUG);
#endif
app_boot_Init();
LOG_I("a71ch HostLibrary example application (Rev %s)", EX_APP_VERSION);
LOG_I("**********************************************");
LOG_I("Connect to A71CH-SM. Chunksize at link layer = %d.", MAX_CHUNK_LENGTH_LINK);
APP_BOOT_RESUME_HANDLING(exBoot);
#if AX_EMBEDDED
connectStatus = app_boot_Connect(&commState, NULL);
#else
connectStatus = app_boot_Connect(&commState, argv[1]);
#endif
if (connectStatus != 0) {
LOG_E("Connection failed. SW = %d", connectStatus);
#if defined(USE_RTOS) && USE_RTOS == 1
assert(0);
#else
return connectStatus;
#endif
}
initMeasurement(&execTime);
#ifdef WALKTHROUGH_ONLY
result &= exWalkthrough();
#else
result &= exAes();
result &= exConfig();
result &= exDebugMode(dbgTstMode);
result &= exEccNohc();
result &= exWalkthrough();
result &= exGPStorage(gpStorageTstMode);
result &= exMisc();
result &= exPsk();
result &= exScp();
result &= exSst();
result &= exBoot(BOOT_SIMULATED_CYCLE);
result &= exSstKp();
#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);
LOG_I("Compiled for Device Type %c", A71CH_DEVICE_TYPE);
LOG_I("# Key Pairs = %d.", A71CH_KEY_PAIR_MAX);
LOG_I("# Pub Key = %d.", A71CH_PUBLIC_KEY_MAX);
LOG_I("# Sym Key = %d.", A71CH_SYM_KEY_MAX);
LOG_I("Gp Storage = %d byte", A71CH_GP_STORAGE_SIZE);
if (result == 1) {
LOG_I("-----------Example Set A71CH finished (Rev %s) on 0x%04X, overall result = %s\r\n%sExec time: %ld ms------------",
EX_APP_VERSION,
commState.appletVersion,
"OK",
TIME_TO_STRING(&now),
getMeasurement(&execTime));
}
else {
LOG_E("-----------Example Set A71CH finished (Rev %s) on 0x%04X, overall result = %s\r\n%sExec time: %ld ms------------",
EX_APP_VERSION,
commState.appletVersion,
"FAILED",
TIME_TO_STRING(&now),
getMeasurement(&execTime));
}
#if defined(_WIN32) && !defined(__MINGW32__)
if (IsDebuggerPresent()) {
PRINTF("Enter/Return to close window.");
getchar();
}
#endif
return 0;
}