/** * @file accessManager_com.c * @author NXP Semiconductors * @version 1.0 * @par License * * Copyright 2016,2020 NXP * SPDX-License-Identifier: Apache-2.0 * * @par Description * This file implements basic communication functionality between Host and * Secure element. * @par History * *****************************************************************************/ #include #include #include #if defined(SSS_USE_FTR_FILE) #include "fsl_sss_ftr.h" #else #include "fsl_sss_ftr_default.h" #endif #include "nxLog_App.h" #include "accessManager_com.h" #if (SSS_HAVE_A71CH || SSS_HAVE_A71CH_SIM) #include "ex_a71ch_scp03.h" #include "sm_apdu.h" #include int a71chMakeArgv(const char *s, const char *delimiters, char ***argvp, int *argc) { int i; int nToken; const char *sStart; char *szCopy; if (argc == NULL) { return -1; } *argc = 0; if ((s == NULL) || (delimiters == NULL) || (argvp == NULL)) { return -1; } *argvp = NULL; sStart = s + strspn(s, delimiters); if ((szCopy = (char *)malloc(strlen(sStart) + 1)) == NULL) { return -1; } strcpy(szCopy, sStart); nToken = 0; // Count the number of tokens in a first run through if (strtok(szCopy, delimiters) != NULL) { for (nToken = 1; strtok(NULL, delimiters) != NULL; nToken++) ; } // Create argument array for ptrs to the tokens if ((*argvp = (char **)malloc((nToken + 1)*sizeof(char *))) == NULL) { free(szCopy); return -1; } // Insert pointers to tokens into the argument array, they point to segments of the // allocated string (szCopy) if (nToken == 0) { free(szCopy); } else { strcpy(szCopy, sStart); **argvp = strtok(szCopy, delimiters); for (i = 1; i < nToken; i++) { *((*argvp) + i) = strtok(NULL, delimiters); } } // Close pointer array with a final NULL pointer *((*argvp) + nToken) = NULL; *argc = nToken; return 0; } void a71chFreeArgv(char **argv) { if (argv == NULL) { return; } if (*argv != NULL) { free(*argv); } free(argv); } int a71chConvertHexString2ByteArray(U8 *byteArray, const char *string, int nOffset, int nByte) { char szDummy[] = "szDummy"; char *pastConverted = szDummy; // Catch number conversion issues int j; for (j=0; j