aboutsummaryrefslogtreecommitdiffstats
path: root/msc
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2019-04-21 21:19:23 +0200
committerHarald Welte <laforge@gnumonks.org>2019-04-25 20:06:50 +0000
commitc1f937a15ba010c62335aef3ab7bf334e861cc8c (patch)
tree0749082723f366168f23f0dbfefac650f04c1c3d /msc
parent645a151f6946578e9532f62bf48b3ddea462f354 (diff)
msc: f_mm_auth(): Add support for UMTS AKA
Diffstat (limited to 'msc')
-rw-r--r--msc/BSC_ConnectionHandler.ttcn36
-rw-r--r--msc/MSC_Tests.ttcn3
2 files changed, 30 insertions, 9 deletions
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 4534a9b6..e408f829 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -75,7 +75,8 @@ type record BSC_ConnHdlrPars {
boolean mm_info,
boolean sgsap_enable,
boolean gsup_enable,
- integer ran_idx
+ integer ran_idx,
+ boolean use_umts_aka
};
/* get a one-octet bitmaks of supported algorithms based on Classmark information */
@@ -293,15 +294,34 @@ private function f_build_lu(MobileIdentityLV mi) runs on BSC_ConnHdlr return PDU
function f_mm_auth() runs on BSC_ConnHdlr
{
if (g_pars.net.expect_auth) {
- g_pars.vec := f_gen_auth_vec_2g();
- var GSUP_IE auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G(g_pars.vec.rand,
- g_pars.vec.sres,
- g_pars.vec.kc));
+ var GSUP_IE auth_tuple;
GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi));
- GSUP.send(ts_GSUP_SAI_RES(g_pars.imsi, auth_tuple));
- BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ(g_pars.vec.rand)));
- BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MT_MM_AUTH_RESP_2G(g_pars.vec.sres)));
+ if (g_pars.use_umts_aka) {
+ g_pars.vec := f_gen_auth_vec_3g();
+ auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G3G(g_pars.vec.rand,
+ g_pars.vec.sres,
+ g_pars.vec.kc,
+ g_pars.vec.ik,
+ g_pars.vec.ck,
+ g_pars.vec.autn,
+ g_pars.vec.res));
+ GSUP.send(ts_GSUP_SAI_RES(g_pars.imsi, auth_tuple));
+
+ BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ_3G(g_pars.vec.rand, g_pars.vec.autn)));
+ var OCT4 res := substr(g_pars.vec.res, 0, 4);
+ var OCT4 xres := substr(g_pars.vec.res, 4, 4);
+ BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MT_MM_AUTH_RESP_3G(res, xres)));
+ } else {
+ g_pars.vec := f_gen_auth_vec_2g();
+ auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G(g_pars.vec.rand,
+ g_pars.vec.sres,
+ g_pars.vec.kc));
+ GSUP.send(ts_GSUP_SAI_RES(g_pars.imsi, auth_tuple));
+
+ BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ(g_pars.vec.rand)));
+ BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MT_MM_AUTH_RESP_2G(g_pars.vec.sres)));
+ }
}
}
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 8c221dc8..7d9c098e 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -513,7 +513,8 @@ runs on MTC_CT return BSC_ConnHdlrPars {
mm_info := mp_mm_info,
sgsap_enable := sgsap,
gsup_enable := gsup,
- ran_idx := ran_idx
+ ran_idx := ran_idx,
+ use_umts_aka := false
};
return pars;
}