我正在尝试使用 DeleteAll() 但无法使其正常工作。我正在使用 NXPPlugNTrust nano-package API。我正在采取的步骤:
- 在单独的会话中,将 UserID 写入RESERVED_ID_FAC TORY_RESET
- 使用该密钥创建会话
- 发送全部删除
我检查了除 DeleteAll 之外的每个步骤都返回 0x9000 并且用户 ID 确实存在 (CheckObjectExists)。我将我的代码与 se05x_mandate_scp03 示例进行了比较,它基本上相同,只是编写和使用了RESERVED_ID_FAC TORY_RESET 。
写入用户 ID(相关部分):
uint8_t userId[] = DELETE_ALL_USERID_VALUE;
status = Se05x_API_WriteUserID(
&session,
&policy,
0,
kSE05x_AppletResID_FACTORY_RESET,
userId, sizeof(userId),
kSE05x_Attesta
tionType_AUTH
);
使用全部删除:
smStatus_t status;
Se05xSession_t session = { 0 };
size_t sessionIdLen = sizeof(se05x_applet_session_value);
set_keys(
&session,
scp03_key_enc, sizeof(scp03_key_enc),
scp03_key_mac, sizeof(scp03_key_mac)
);
status = Se05x_API_SessionOpen(&session);
if (status != SM_OK) {
SMLOG_E(\"Se05x_API_SessionOpen %x\\n\", status);
return status;
}
uint8_t userId[] = DELETE_ALL_USERID_VALUE;
SE05x_Result_t exists = kSE05x_Result_FAILURE;
size_t sessionIdLen = sizeof(se05x_applet_session_value);
status = Se05x_API_CheckObjectExists(
&session,
kSE05x_AppletResID_FACTORY_RESET,
&exists
);
if (status != SM_OK) {
SMLOG_E(\"Se05x_API_CheckObjectExists %x\\n\", status);
return status;
}
status = Se05x_API_CreateSession(
&session,
kSE05x_AppletResID_FACTORY_RESET,
&se05x_applet_session_value[0],
&sessionIdLen
);
if (status != SM_OK) {
SMLOG_E(\"Se05x_API_CreateSession %x\\n\", status);
return status;
}
status = Se05x_API_VerifySessionUserID(&session, userId, sizeof(userId));
if (status != SM_OK) {
SMLOG_E(\"Se05x_API_VerifySessionUserID %x\\n\", status);
return status;
}
status = Se05x_API_DeleteAll(&session);
if (status != SM_OK) {
SMLOG_E(\"Se05x_API_DeleteAll: %x\", status);
return status;
}
return status;
我附上了一个调试控制台输出,其中包括设置用户 ID 和使用它。