2372103_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2372103_zh-CN

2372103_zh-CN

使用 SE050 时如何启用平台 SCP

大家好

我使用的是 SE050E,在使用 Platform SCP 时遇到了麻烦。我按照 AN12542(https://www.nxp.jp/docs/en/application-note/AN12542.pdf#4#4) 中的说明定义了 SSS_HAVE_SE05X_AUTH_PLATFSCP03 1,但当我调用 ex_sss_boot_open 函数打开会话时,结果却是 kStatus_SSS_Fail。我做错什么了吗?使用普通通信时,一切正常。如果还需要其他配置,请告诉我。

谢谢!

SE050Re: How to enable Platform SCP when using SE050

你好@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_initex_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


Re: How to enable Platform SCP when using SE050

你好@yang_lee


第 6 章中提供的示例仅适用于 SE050E,但首先请确定您使用的是哪个编译系统。

1.如果使用 MCUXpresso SDK,请按照 6.2 和 6.3 中的步骤操作

2.如果使用 Cmake,请按照 6.4 和 6.5 中的步骤操作


希望对你有所帮助、


祝您愉快,
Kan


-------------------------------------------------------------------------------
注:
- 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢!
- 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略
如果您以后有相关问题,请另开新主题,并参考已关闭的主题。
-------------------------------------------------------------------------------

标记 (1)
无评分
版本历史
最后更新:
‎05-30-2026 05:44 AM
更新人: