From c1f937a15ba010c62335aef3ab7bf334e861cc8c Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 21 Apr 2019 21:19:23 +0200 Subject: msc: f_mm_auth(): Add support for UMTS AKA Change-Id: Id57adcebd63a06cfa555824e493561fe08f13d6d --- msc/BSC_ConnectionHandler.ttcn | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'msc/BSC_ConnectionHandler.ttcn') 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))); + } } } -- cgit v1.2.3