/** * @file configCmdRefpem.c * @author NXP Semiconductors * @version 1.0 * @par License * * Copyright 2017 NXP * SPDX-License-Identifier: Apache-2.0 * * @par Description * Command handling for 'refpem'. */ #include #include #include #include // project specific include files #include "sm_types.h" #include "sm_apdu.h" #include "tst_sm_util.h" #include "tst_a71ch_util.h" #include "axEccRefPem.h" #include "probeAxUtil.h" #include "configCmd.h" #include "configCli.h" #include "a71_debug.h" #include "axHostCrypto.h" #include "tstHostCrypto.h" #ifdef OPENSSL #include #endif #define FLOW_VERBOSE_PROBE_A70 #ifdef FLOW_VERBOSE_PROBE_A70 #define FPRINTF(...) printf (__VA_ARGS__) #else #define FPRINTF(...) #endif // #define DBG_PROBE_A70 #ifdef DBG_PROBE_A70 #define DBGPRINTF(...) printf (__VA_ARGS__) #else #define DBGPRINTF(...) #endif /** * A hook for the command line handler to create a reference key */ int a7xConfigCmdRefpem(U8 storageClass, U8 keyIndex, const char *szKeyFile, const char *szRefKeyFile, U16 *sw) { int error = AX_CLI_EXEC_FAILED; eccKeyComponents_t eccKc; eccKc.bits = 256; eccKc.curve = ECCCurve_NIST_P256; eccKc.privLen = 0; eccKc.pubLen = 0; if (!strcmp(szKeyFile, "")) { DBGPRINTF("a7xConfigCmdRefpem: Retrieve public key from security module.\n"); // No key file was provided on command line, retrieve public key from module error = AX_CLI_EXEC_OK; eccKc.pubLen = 0; } else { DBGPRINTF("a7xConfigCmdRefpem: Keyfile %s provided on command line.\n", szKeyFile); error = a7xConfigGetEccKcFromPemfile(&eccKc, (a71_SecureStorageClass_t) storageClass, szKeyFile); if (error != AX_CLI_EXEC_OK) { return error; } } *sw = axEccWritePemRefKey(storageClass, keyIndex, szRefKeyFile, eccKc.pub, eccKc.pubLen); if (*sw != SW_OK) { printf("axEccWritePemRefKey failed with 0x%04X.\n", *sw); return AX_CLI_FILE_PEM_WRITE_FAILED; } return error; }