你好@Kan_Li、
我按照第 6.2 和 6.3 节中的说明,尝试运行 SE-PLUG-TRUST-MW_04.07.01 中的 se05x_MandatePlatformSCP 示例,但 sss_key_object_init(eraseAuthCtx.auth.ctx.idobj.pObj、&pCtx->host_ks) 函数返回 kStatus_SSS_InvalidArgument。我需要调用 ex_sss_boot_open、ex_sss_key_store_and_object_init 和ex_sss_boot_open_host_session函数吗?调用sss_key_object_init函数之前先调用sss_key_object_init文件吗?代码如下:
/* 关闭 clang-format */
#define MandateSCP_UserID_VALUE \
{ \
n'、'e'、'e'、'd'、's'、'c'、'p
}
/* clang-format ON */
sss_status_t se050_platformSCP03(void)
{
sss_status_t status = kStatus_SSS_Fail;
sss_object_t keyObject;
ex_sss_boot_ctx_t gex_sss_mandate_scp_boot_ctx;
SE_Connect_Ctx_t eraseAuthCtx = { 0 };
sss_se05x_session_t *pSession = (sss_se05x_session_t *)&gex_sss_mandate_scp_boot_ctx.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;
eraseAuthCtx.auth.ctx.idobj.pObj =&ex_id;
const char *portName = NULL;
memset(&gex_sss_mandate_scp_boot_ctx, 0, sizeof(gex_sss_mandate_scp_boot_ctx));
//* 初始化会话以连接 SE050 */
// status = ex_sss_boot_open(&gex_sss_mandate_scp_boot_ctx, portName);
// 如果 (kStatus_SSS_Success != status)
// {
// ex_sss_session_close(&gex_sss_mandate_scp_boot_ctx);
// return status; /* return error if can't initialize session with SE050 */
// }
// ** 设置密钥存储 */
// status = ex_sss_key_store_and_object_init(&gex_sss_mandate_scp_boot_ctx);
// 如果 (kStatus_SSS_Success != status)
// {
// ex_sss_session_close(&gex_sss_mandate_scp_boot_ctx);
// return status; /* close sesion and return error if can't initialize fail */
// }
// ex_sss_boot_open_host_session(&gex_sss_mandate_scp_boot_ctx);
/* 准备主机 */
status = sss_key_object_init(eraseAuthCtx.auth.ctx.idobj.pObj.php)、&gex_sss_mandate_scp_boot_ctx.host_ks);
如果 (kStatus_SSS_Success != status) {
LOG_E("失败的 sss_key_object_init");
去清理;
}
status = sss_key_object_allocate_handle(eraseAuthCtx.auth.ctx.idobj.pObj.php)、
make_test_id(__LINE__)、
kSSS_KeyPart_Default、
kSSS_CipherType_UserID、
sizeof(host_userid_value)、
kKeyObject_Mode_Transient);
如果 (kStatus_SSS_Success != status) {
LOG_E("失败的 sss_key_object_allocate_handle");
去清理;
}
status = sss_key_store_set_key(&gex_sss_mandate_scp_boot_ctx.host_ks、
eraseAuthCtx.auth.ctx.idobj.pObj、
host_userid_value、
sizeof(host_userid_value)、
sizeof(host_userid_value) * 8、
NULL、
0);
如果 (kStatus_SSS_Success != status) {
LOG_E("失败的 sss_key_store_set_key");
去清理;
}
pSe05xSession =&pSession->s_ctx;
sw_status = Se05x_API_WriteUserID(pSe05xSession、
NULL、
SE05x_MaxAttemps_NA、
kSE05x_AppletResID_PLATFORM_SCP、
userid_value_factoryreset、
sizeof(userid_value_factoryreset)、
kSE05x_AttestationType_AUTH);
pOpenCtx =&gex_sss_mandate_scp_boot_ctx.se05x_open_ctx;
eraseAuthCtx.tunnelCtx = pOpenCtx->tunnelCtx;
eraseAuthCtx.connType = pOpenCtx->connType;
eraseAuthCtx.portName = pOpenCtx->portName;
eraseAuthCtx.auth.authType = kSSS_AuthType_ID;
sss_session_close(&gex_sss_mandate_scp_boot_ctx.session);
pSe05xSession =&pSession->s_ctx;
status = sss_session_open(&gex_sss_mandate_scp_boot_ctx.session、kType_SSS_SE_SE05x、
kSE05x_AppletResID_PLATFORM_SCP、
kSSS_ConnectionType_Password,&eraseAuthCtx);
如果 (kStatus_SSS_Success != status) {
LOG_E("失败的 sss_session_open");
去清理;
}
/* 调用 SE05X API 授权平台 SCP。*/
sw_status = Se05x_API_SetPlatformSCPRequest(&pSession->s_ctx, kSE05x_PlatformSCPRequest_REQUIRED);
if(SM_OK != sw_status) {
LOG_E("Se05x_API_SetPlatformSCPRequest 失败");
去清理;
}
否则 {
LOG_I("Se05x_API_SetPlatformSCPRequest Successful");
LOG_W("进一步通信必须加密");
}
清理:
如果 (kStatus_SSS_Success == status) {
LOG_I("se05x_MandatePlatformSCP Example Success !!!...");
}
否则 {
LOG_E("se05x_MandatePlatformSCP Example Failed !!!...");
}
返回状态;
}
谢谢!
Duong