| /* |
| * |
| * Copyright 2019-2020 NXP |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <se05x_const.h> |
| #include <se05x_APDU.h> |
| #include <nxLog_hostLib.h> |
| //#include <ex_sss_auth.h> |
| #include <ex_sss_objid.h> |
| #include <smCom.h> |
| #include <string.h> |
| #include "sm_const.h" |
| #include "nxEnsure.h" |
| #include <fsl_sss_api.h> |
| // For SIMW-656 |
| // #include "../../sss/ex/inc/ex_sss_objid.h" |
| |
| #if APPLET_SE050_VER_MAJOR_MINOR >= 20000u |
| |
| smStatus_t Se05x_API_DeleteAll_Iterative(pSe05xSession_t session_ctx) |
| { |
| uint8_t pmore = kSE05x_MoreIndicator_NA; |
| uint8_t list[1024]; |
| size_t listlen = sizeof(list); |
| size_t i; |
| smStatus_t retStatus = SM_NOT_OK; |
| uint16_t outputOffset = 0; |
| do { |
| retStatus = Se05x_API_ReadIDList(session_ctx, outputOffset, 0xFF, &pmore, list, &listlen); |
| if (retStatus != SM_OK) { |
| return retStatus; |
| } |
| outputOffset = (uint16_t)listlen; |
| for (i = 0; i < listlen; i += 4) { |
| uint32_t id = 0 | (list[i + 0] << (3 * 8)) | (list[i + 1] << (2 * 8)) | (list[i + 2] << (1 * 8)) | |
| (list[i + 3] << (0 * 8)); |
| if (SE05X_OBJID_SE05X_APPLET_RES_START == SE05X_OBJID_SE05X_APPLET_RES_MASK(id)) { |
| LOG_D("Not erasing ObjId=0x%08X (Reserved)", id); |
| /* In Reserved space */ |
| } |
| else if (EX_SSS_OBJID_DEMO_AUTH_START == EX_SSS_OBJID_DEMO_AUTH_MASK(id)) { |
| LOG_D("Not erasing ObjId=0x%08X (Demo Auth)", id); |
| /* Not reasing default authentication object */ |
| } |
| else if (EX_SSS_OBJID_IOT_HUB_A_START == EX_SSS_OBJID_IOT_HUB_A_MASK(id)) { |
| LOG_D("Not erasing ObjId=0x%08X (IoT Hub)", id); |
| /* Not reasing IoT Hub object */ |
| } |
| else if (!SE05X_OBJID_TP_MASK(id) && id) { |
| LOG_D("Not erasing Trust Provisioned objects"); |
| } |
| else { |
| retStatus = Se05x_API_DeleteSecureObject(session_ctx, id); |
| if (retStatus != SM_OK) { |
| LOG_W("Error in erasing ObjId=0x%08X (Others)", id); |
| } |
| } |
| } |
| } while (pmore == kSE05x_MoreIndicator_MORE); |
| #if SSSFTR_SE05X_CREATE_DELETE_CRYPTOOBJ |
| retStatus = Se05x_API_ReadCryptoObjectList(session_ctx, list, &listlen); |
| if (retStatus != SM_OK) { |
| goto cleanup; |
| } |
| for (i = 0; i < listlen; i += 4) { |
| uint16_t cryptoObjectId = list[i + 1] | (list[i + 0] << 8); |
| retStatus = Se05x_API_DeleteCryptoObject(session_ctx, cryptoObjectId); |
| if (retStatus != SM_OK) { |
| LOG_W("Error in erasing CryptoObject=%04X", cryptoObjectId); |
| } |
| } |
| cleanup: |
| #endif |
| return retStatus; |
| } |
| |
| #endif |
| |
| bool Se05x_IsInValidRangeOfUID(uint32_t uid) |
| { |
| #if 0 |
| // For SIMW-656 |
| bool retVal = TRUE; |
| if (uid >= EX_SSS_OBJID_DEMO_START && uid <= EX_SSS_OBJID_DEMO_END) |
| { |
| retVal = FALSE; |
| } |
| else if (uid >= SE05X_OBJID_SE05X_APPLET_RES_START && uid <= SE05X_OBJID_SE05X_APPLET_RES_END) |
| { |
| retVal = FALSE; |
| } |
| else if (uid >= EX_SSS_OBJID_TEST_START && uid <= EX_SSS_OBJID_TEST_END) |
| { |
| retVal = FALSE; |
| } |
| if (retVal == TRUE) { |
| LOG_E("Not allowing 0x%X uid", uid); |
| } |
| return retVal; |
| #else |
| return FALSE; |
| #endif |
| } |