jolly has uploaded this change for review.
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);
To view, visit change 43056. To unsubscribe, or for help writing mail filters, visit settings.