/*************************************************************************** | |
* | |
* 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; | |
} |