sss_status_t status;
SE_Connect_Ctx_t eraseAuthCtx = {0};
sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session;
smStatus_t sw_status;
Se05xSession_t *pSe05xSession;
SE_Connect_Ctx_t *pOpenCtx;
sss_object_t ex_id = {0};
const uint8_t host_userid_value[] = MandateSCP_UserID_VALUE;
const uint8_t userid_value_factoryreset[] = MandateSCP_UserID_VALUE;
//For UserID/PIN based based Authentication why not SCP?
eraseAuthCtx.auth.ctx.idobj.pObj = &ex_id;
//eraseAuthCtx.i2cAddress = &ex_id;
//prepare Host
//The function initializes keyObject data structure and associates it with a key store
// in which the plain key and other attributes are stored.
status = sss_key_object_init(eraseAuthCtx.auth.ctx.idobj.pObj, &pCtx->host_ks);
if(kStatus_SSS_Success != status) {
LOG_E("Failed sss_key_object_init");
goto cleanup;
}
ESP_LOGI(TAG, "sss_key_object_init: %x", status);
status = sss_key_object_allocate_handle(eraseAuthCtx.auth.ctx.idobj.pObj,
MAKE_TEST_ID(__LINE__),
kSSS_KeyPart_Default,
kSSS_CipherType_UserID,
sizeof(host_userid_value),
kKeyObject_Mode_Transient);
ESP_LOGI(TAG, "MAKE_TEST_ID: %d",MAKE_TEST_ID(__LINE__));
if(kStatus_SSS_Success != status) {
LOG_E("Failed sss_key_object_allocate_handle");
goto cleanup;
}
ESP_LOGI(TAG, "sss_key_object_allocate_handle: %x", status);
//This function moves data[] from memory to the destination key store.
status = sss_key_store_set_key(&pCtx->host_ks,
eraseAuthCtx.auth.ctx.idobj.pObj,
host_userid_value,
sizeof(host_userid_value),
sizeof(host_userid_value) * 8,
NULL,
0);
if (kStatus_SSS_Success != status) {
LOG_E("Failed sss_key_store_set_key");
goto cleanup;
}
ESP_LOGI(TAG, "sss_key_store_set_key: %x", status);
SE05x_Result_t dataResult= 0;
sw_status = Se05x_API_CheckObjectExists(&pSession->s_ctx, kSE05x_AppletResID_PLATFORM_SCP , &dataResult);
if (SM_OK != sw_status) {
LOG_E("Failed Se05x_API_CheckObjectExists");
goto cleanup;
}
ESP_LOGI(TAG, "Se05x_API_CheckObjectExists: %x", sw_status);
// pSession->s_ctx.authType = kSSS_AuthType_None;
pSe05xSession = &pSession->s_ctx;
sw_status = Se05x_API_WriteUserID(pSe05xSession,
NULL,
SE05x_MaxAttemps_NA,
kSE05x_AppletResID_PLATFORM_SCP, //0x7FFF0207
userid_value_factoryreset,
sizeof(userid_value_factoryreset),
kSE05x_AttestationType_AUTH);
if (SM_OK != sw_status) {
LOG_E("Failed Se05x_API_WriteUserID");
ESP_LOGI(TAG, "Se05x_API_WriteUserID_FAIL: %x", sw_status);
goto cleanup;
}
ESP_LOGI(TAG, "Se05x_API_WriteUserID: %x", sw_status);
sss_session_close(&pCtx->session);
pOpenCtx = &pCtx->se05x_open_ctx;
eraseAuthCtx.tunnelCtx = pOpenCtx->tunnelCtx;
eraseAuthCtx.connType = pOpenCtx->connType;
eraseAuthCtx.portName = pOpenCtx->portName;
eraseAuthCtx.auth.authType = kSSS_AuthType_ID;
pSe05xSession = &pSession->s_ctx;
status = sss_session_open(&pCtx->session, kType_SSS_SE_SE05x,
kSE05x_AppletResID_FACTORY_RESET,
kSSS_ConnectionType_Password, &eraseAuthCtx);
if (kStatus_SSS_Success != status) {
LOG_E("Failed sss_session_open");
ESP_LOGI(TAG, "sss_session_open-FAILED: %x", status);
goto cleanup;
}
ESP_LOGI(TAG, "sss_session_open: %x", status);
//Call SE05X API to Mandate Platform SCP
//Mandate platform SCP or not
sw_status = Se05x_API_SetPlatformSCPRequest(&pSession->s_ctx, kSE05x_PlatformSCPRequest_REQUIRED);
if(SM_OK != sw_status) {
LOG_E("Se05x_API_SetPlatformSCPRequest Failed");
goto cleanup;
}
else {
LOG_I("Se05x_API_SetPlatformSCPRequest Successful-__________________________");
LOG_W("Further communication must be encrypted");
}
while(1)
{
vTaskDelay( 5000 / portTICK_PERIOD_MS);
ESP_LOGI(TAG, "HALLOOOO");
}
cleanup:
if (kStatus_SSS_Success == status) {
LOG_I("se05x_MandatePlatformSCP Example Success !!!...");
while(1)
{
ESP_LOGI(TAG, "HALLOOOO");
vTaskDelay( 500000 / portTICK_PERIOD_MS);
}
}
else {
LOG_E("se05x_MandatePlatformSCP Example Failed !!!...");
}
return status;
}
___________________________________________________________________
Please Help me.