/*************************************************************************** * * 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 #include #include #include #include #include "tst_sm_time.h" #ifdef MSC_VER #define _CRTDBG_MAP_ALLOC #include #include #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; }