jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/onomondo-ipa/+/43056?usp=email )
Change subject: V1.2: Add eimTransactionId to InitiateAuthenticationRequestEsipa ......................................................................
V1.2: Add eimTransactionId to InitiateAuthenticationRequestEsipa
Add new eimTransactionId field to InitiateAuthenticationRequestEsipa.
The eimTransactionId walks through the IPA process like this:
* The eimTransactionId is retrieved from ProfileDownloadTriggerRequest at proc_eim_pkg_retr.c. * Then it is handed to the Common Mutual Authentication Procedure at proc_indirect_prfle_dwnld.c. * There it is handed to the InitiateAuthentication function at proc_cmn_mtl_auth.c. * There it is stored in initiateAuthenticationRequestEsipa at esipa_init_auth.c.
Reference: SGP.32 Section 5.14.1
Related: SYS#8101 Change-Id: I1c8ef6fc0a3f7ab5735e401597fc8c6b2021fc09 --- M asn1/SGP32Definitions.asn M src/ipa/libasn/InitiateAuthenticationRequestEsipa.c M src/ipa/libasn/InitiateAuthenticationRequestEsipa.h M src/ipa/libipa/esipa_init_auth.c M src/ipa/libipa/esipa_init_auth.h M src/ipa/libipa/proc_cmn_mtl_auth.c M src/ipa/libipa/proc_cmn_mtl_auth.h M src/ipa/libipa/proc_eim_pkg_retr.c M src/ipa/libipa/proc_indirect_prfle_dwnld.c M src/ipa/libipa/proc_indirect_prfle_dwnld.h 10 files changed, 31 insertions(+), 9 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/onomondo-ipa refs/changes/56/43056/1
diff --git a/asn1/SGP32Definitions.asn b/asn1/SGP32Definitions.asn index 14ee3cb..b99168b 100644 --- a/asn1/SGP32Definitions.asn +++ b/asn1/SGP32Definitions.asn @@ -870,7 +870,8 @@ InitiateAuthenticationRequestEsipa ::= [57] SEQUENCE { -- Tag 'BF39' euiccChallenge [1] Octet16, -- random eUICC challenge smdpAddress [3] UTF8String OPTIONAL, - euiccInfo1 EUICCInfo1 OPTIONAL + euiccInfo1 EUICCInfo1 OPTIONAL, + eimTransactionId [2] TransactionId OPTIONAL } InitiateAuthenticationResponseEsipa ::= [57] CHOICE { -- Tag 'BF39' initiateAuthenticationOkEsipa InitiateAuthenticationOkEsipa, diff --git a/src/ipa/libasn/InitiateAuthenticationRequestEsipa.c b/src/ipa/libasn/InitiateAuthenticationRequestEsipa.c index 1366a8d..f148fca 100644 --- a/src/ipa/libasn/InitiateAuthenticationRequestEsipa.c +++ b/src/ipa/libasn/InitiateAuthenticationRequestEsipa.c @@ -17,7 +17,7 @@ 0, 0, /* No default value */ "euiccChallenge" }, - { ATF_POINTER, 2, offsetof(struct InitiateAuthenticationRequestEsipa, smdpAddress), + { ATF_POINTER, 3, offsetof(struct InitiateAuthenticationRequestEsipa, smdpAddress), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UTF8String, @@ -26,7 +26,7 @@ 0, 0, /* No default value */ "smdpAddress" }, - { ATF_POINTER, 1, offsetof(struct InitiateAuthenticationRequestEsipa, euiccInfo1), + { ATF_POINTER, 2, offsetof(struct InitiateAuthenticationRequestEsipa, euiccInfo1), (ASN_TAG_CLASS_CONTEXT | (32 << 2)), 0, &asn_DEF_EUICCInfo1, @@ -35,14 +35,24 @@ 0, 0, /* No default value */ "euiccInfo1" }, + { ATF_POINTER, 1, offsetof(struct InitiateAuthenticationRequestEsipa, eimTransactionId), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TransactionId, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eimTransactionId" + }, }; -static const int asn_MAP_InitiateAuthenticationRequestEsipa_oms_1[] = { 1, 2 }; +static const int asn_MAP_InitiateAuthenticationRequestEsipa_oms_1[] = { 1, 2, 3 }; static const ber_tlv_tag_t asn_DEF_InitiateAuthenticationRequestEsipa_tags_1[] = { (ASN_TAG_CLASS_CONTEXT | (57 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_InitiateAuthenticationRequestEsipa_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* euiccChallenge */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* eimTransactionId */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 }, /* smdpAddress */ { (ASN_TAG_CLASS_CONTEXT | (32 << 2)), 2, 0, 0 } /* euiccInfo1 */ }; @@ -50,10 +60,10 @@ sizeof(struct InitiateAuthenticationRequestEsipa), offsetof(struct InitiateAuthenticationRequestEsipa, _asn_ctx), asn_MAP_InitiateAuthenticationRequestEsipa_tag2el_1, - 3, /* Count of tags in the map */ + 4, /* Count of tags in the map */ asn_MAP_InitiateAuthenticationRequestEsipa_oms_1, /* Optional members */ - 2, 0, /* Root/Additions */ - 3, /* First extension addition */ + 3, 0, /* Root/Additions */ + 4, /* First extension addition */ }; asn_TYPE_descriptor_t asn_DEF_InitiateAuthenticationRequestEsipa = { "InitiateAuthenticationRequestEsipa", @@ -67,7 +77,7 @@ /sizeof(asn_DEF_InitiateAuthenticationRequestEsipa_tags_1[0]), /* 2 */ { 0, 0, SEQUENCE_constraint }, asn_MBR_InitiateAuthenticationRequestEsipa_1, - 3, /* Elements count */ + 4, /* Elements count */ &asn_SPC_InitiateAuthenticationRequestEsipa_specs_1 /* Additional specs */ };
diff --git a/src/ipa/libasn/InitiateAuthenticationRequestEsipa.h b/src/ipa/libasn/InitiateAuthenticationRequestEsipa.h index e043267..886081a 100644 --- a/src/ipa/libasn/InitiateAuthenticationRequestEsipa.h +++ b/src/ipa/libasn/InitiateAuthenticationRequestEsipa.h @@ -14,6 +14,7 @@ /* Including external dependencies */ #include "Octet16.h" #include <UTF8String.h> +#include "TransactionId.h" #include <constr_SEQUENCE.h>
#ifdef __cplusplus @@ -28,6 +29,7 @@ Octet16_t euiccChallenge; UTF8String_t *smdpAddress /* OPTIONAL */; struct EUICCInfo1 *euiccInfo1 /* OPTIONAL */; + TransactionId_t *eimTransactionId /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. @@ -40,7 +42,7 @@ /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_InitiateAuthenticationRequestEsipa; extern asn_SEQUENCE_specifics_t asn_SPC_InitiateAuthenticationRequestEsipa_specs_1; -extern asn_TYPE_member_t asn_MBR_InitiateAuthenticationRequestEsipa_1[3]; +extern asn_TYPE_member_t asn_MBR_InitiateAuthenticationRequestEsipa_1[4];
#ifdef __cplusplus } diff --git a/src/ipa/libipa/esipa_init_auth.c b/src/ipa/libipa/esipa_init_auth.c index 89a3e58..2e8532c 100644 --- a/src/ipa/libipa/esipa_init_auth.c +++ b/src/ipa/libipa/esipa_init_auth.c @@ -55,6 +55,9 @@ /* eUICC info */ msg_to_eim.choice.initiateAuthenticationRequestEsipa.euiccInfo1 = (EUICCInfo1_t *) req->euicc_info_1;
+ /* eIM transaction ID */ + msg_to_eim.choice.initiateAuthenticationRequestEsipa.eimTransactionId = req->eim_transaction_id; + /* Encode */ return ipa_esipa_msg_to_eim_enc(&msg_to_eim, "InitiateAuthentication"); } diff --git a/src/ipa/libipa/esipa_init_auth.h b/src/ipa/libipa/esipa_init_auth.h index 1f91c1c..06147bf 100644 --- a/src/ipa/libipa/esipa_init_auth.h +++ b/src/ipa/libipa/esipa_init_auth.h @@ -16,6 +16,7 @@ const uint8_t *euicc_challenge; const char *smdp_addr; const EUICCInfo1_t *euicc_info_1; + TransactionId_t *eim_transaction_id; };
struct ipa_esipa_init_auth_res { diff --git a/src/ipa/libipa/proc_cmn_mtl_auth.c b/src/ipa/libipa/proc_cmn_mtl_auth.c index df9fcc9..a8670ae 100644 --- a/src/ipa/libipa/proc_cmn_mtl_auth.c +++ b/src/ipa/libipa/proc_cmn_mtl_auth.c @@ -176,6 +176,7 @@ init_auth_req.euicc_challenge = euicc_challenge; init_auth_req.smdp_addr = (char *)pars->smdp_addr; init_auth_req.euicc_info_1 = euicc_info->euicc_info_1; + init_auth_req.eim_transaction_id = pars->eim_transaction_id; init_auth_res = ipa_esipa_init_auth(ctx, &init_auth_req); if (!init_auth_res) goto error; diff --git a/src/ipa/libipa/proc_cmn_mtl_auth.h b/src/ipa/libipa/proc_cmn_mtl_auth.h index a74fb69..a806735 100644 --- a/src/ipa/libipa/proc_cmn_mtl_auth.h +++ b/src/ipa/libipa/proc_cmn_mtl_auth.h @@ -16,6 +16,7 @@ const struct ipa_buf *allowed_ca; const char *smdp_addr; const char *ac_token; + TransactionId_t *eim_transaction_id; };
struct ipa_esipa_auth_clnt_res *ipa_proc_cmn_mtl_auth(struct ipa_context *ctx, diff --git a/src/ipa/libipa/proc_eim_pkg_retr.c b/src/ipa/libipa/proc_eim_pkg_retr.c index 59b6f99..b95eb4e 100644 --- a/src/ipa/libipa/proc_eim_pkg_retr.c +++ b/src/ipa/libipa/proc_eim_pkg_retr.c @@ -129,6 +129,7 @@ indirect_prfle_dwnlod_pars.ac = IPA_STR_FROM_ASN(&get_eim_pkg_res->dwnld_trigger_request->profileDownloadData-> choice.activationCode); + indirect_prfle_dwnlod_pars.eim_transaction_id = get_eim_pkg_res->dwnld_trigger_request->eimTransactionId; rc = ipa_proc_indirect_prfle_dwnlod(ctx, &indirect_prfle_dwnlod_pars); IPA_FREE((void *)indirect_prfle_dwnlod_pars.ac); if (rc < 0) diff --git a/src/ipa/libipa/proc_indirect_prfle_dwnld.c b/src/ipa/libipa/proc_indirect_prfle_dwnld.c index 045796a..9bc1467 100644 --- a/src/ipa/libipa/proc_indirect_prfle_dwnld.c +++ b/src/ipa/libipa/proc_indirect_prfle_dwnld.c @@ -55,6 +55,7 @@ cmn_mtl_auth_pars.allowed_ca = pars->allowed_ca; cmn_mtl_auth_pars.smdp_addr = activation_code->sm_dp_plus_address; cmn_mtl_auth_pars.ac_token = activation_code->ac_token; + cmn_mtl_auth_pars.eim_transaction_id = pars->eim_transaction_id; auth_clnt_res = ipa_proc_cmn_mtl_auth(ctx, &cmn_mtl_auth_pars); if (!auth_clnt_res) { IPA_LOGP(SIPA, LERROR, "cannot continue, mutual authentication failed!\n"); diff --git a/src/ipa/libipa/proc_indirect_prfle_dwnld.h b/src/ipa/libipa/proc_indirect_prfle_dwnld.h index a856b3d..15fb91c 100644 --- a/src/ipa/libipa/proc_indirect_prfle_dwnld.h +++ b/src/ipa/libipa/proc_indirect_prfle_dwnld.h @@ -15,6 +15,7 @@ const char *ac; const uint8_t *tac; const struct ipa_buf *allowed_ca; + TransactionId_t *eim_transaction_id; };
int ipa_proc_indirect_prfle_dwnlod(struct ipa_context *ctx, const struct ipa_proc_indirect_prfle_dwnlod_pars *pars);