Even if I create a UserID secure object with policy POLICY_OBJ_ALLOW_WRITE, i'm not able to overwrite it using WriteUserID command instead SE050 returns status word 0x6985. Does someone has a working example of such a use case ?
Solved! Go to Solution.
Hi Michael,
I just got the confirmation from the expert, The UserID object cannot be updated, but only be deleted and created new. please kindly refer to the spec for more details.
Have a great day,
Kan
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
Hi Michael,
Did you build your application based on the MW? Is it possible to share your code for a review? Or just APDU commands sent to SE050? Please kindly clarify.
Have a great day,
Kan
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
Yes, my application is based on the MW. Hereafter the most simple example that illustrates my problem.
During first call of sss_se05x_write_user_id(), UserID is properly created.
However second call, where i attempt to overwrite UserID value, fails.
Policy is properly applied because EX_SSS_BOOT_DO_ERASE macro actually erases the UserID (which is not the case by default if can_Delete filed is not set to 1).
#include <ex_sss.h> #include <ex_sss_boot.h> #include <fsl_sss_se05x_apis.h> #include <fsl_sss_se05x_policy.h> #include <nxLog_App.h> #include <se05x_APDU.h> #include <se05x_const.h> #include <se05x_tlv.h> #include <string.h> #include "ex_sss_auth.h" static ex_sss_boot_ctx_t sss_boot_ctx; #define EX_SSS_BOOT_PCONTEXT (&sss_boot_ctx) #define EX_SSS_BOOT_DO_ERASE 1 #define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 #include <ex_sss_main_inc.h> static sss_status_t sss_se05x_write_user_id(sss_se05x_session_t *pSession, sss_policy_t *policies, SE05x_MaxAttemps_t maxAttempt, uint32_t objectID, const uint8_t *userId, size_t userIdLen, const SE05x_AttestationType_t attestation_type) { Se05xSession_t *pSe05xSession = &pSession->s_ctx; Se05xPolicy_t policySet; size_t valid_policy_buff_len = 0; uint8_t policies_buff[MAX_POLICY_BUFFER_SIZE]; if (policies) { if (kStatus_SSS_Success != sss_se05x_create_object_policy_buffer(policies, &policies_buff[0], &valid_policy_buff_len)) { return kStatus_SSS_Fail; } policySet.value = policies_buff; policySet.value_len = valid_policy_buff_len; } else { policySet.value = NULL; policySet.value_len = 0; } smStatus_t sw_status; sw_status = Se05x_API_WriteUserID(pSe05xSession, &policySet, maxAttempt, objectID, userId, userIdLen, attestation_type); if(sw_status != SM_OK) { return kStatus_SSS_Fail; } return kStatus_SSS_Success; } sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) { sss_status_t status; sss_se05x_session_t *pSession = (sss_se05x_session_t*) &pCtx->session; const uint8_t userid_value[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; const uint8_t userid_value2[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07 }; const uint32_t test_id = MAKE_TEST_ID(__LINE__); /* Common rules */ const sss_policy_u userid_withPol = { .type = KPolicy_UserID, .auth_obj_id = 0, .policy = { .pin = { .can_Write = 1, } } }; const sss_policy_u common = { .type = KPolicy_Common, /*Authentication object based on SE05X_AUTH*/ .auth_obj_id = 0, .policy = { .common = { /*Secure Messaging*/ .req_Sm = 0, /*Policy to Delete object*/ .can_Delete = 1, /*Forbid all operations on object*/ .forbid_All = 0, } } }; sss_policy_t policy_for_userid = { .nPolicies = 2, .policies = { &userid_withPol, &common } }; status = sss_se05x_write_user_id(pSession, &policy_for_userid, SE05x_MaxAttemps_UNLIMITED, test_id, userid_value, sizeof(userid_value), kSE05x_AttestationType_AUTH); status = sss_se05x_write_user_id(pSession, NULL, SE05x_MaxAttemps_UNLIMITED, test_id, userid_value2, sizeof(userid_value2), kSE05x_AttestationType_AUTH); if (kStatus_SSS_Success == status) { LOG_I("Example Success !!!..."); } else { LOG_E("Example Failed !!!..."); } return status; }
Hi Michael,
I just got the confirmation from the expert, The UserID object cannot be updated, but only be deleted and created new. please kindly refer to the spec for more details.
Have a great day,
Kan
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
Hi,
how can I delete an UserID?
Best regards,
Heiko
Hi Michael,
Thanks for the information! I will test it and let you know the result when I make any progress. Thanks for your patience!
Have a great day,
Kan
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------