From b0779bbcab69f4a42a9b8f522a3d2697cb9f44c7 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Thu, 29 Nov 2018 23:37:19 +0100 Subject: populate gsm_subscriber_connection->encr during Ciph The gsm_subscriber_connection->encr is never used. Use it. When sending the Ciphering Mode Command, populate the encryption key. When receivint the Ciphering Mode Complete, populate the chosen alg_id. Out of paranoia, store the enc key only if the size is large enough. Hence the vty_dump_one_conn() now reports the actually chosen A5 algorithm ID used. For 3G connections, though, this will still remain 0 in the VTY, since there is no explicit A5 algorithm negotiated on UTRAN. (Security Mode Command and Security Mode Complete instead of the GERAN Ciphering.) (Note, 'struct gsm_encr encr' will be renamed to 'struct geran_encr geran_encr' in Idc7ca9da1aa13ae16f5db2cb1024676cbc770820) Change-Id: Ice2c470c360612249f97301944c6fdf9443c7dce --- src/libmsc/gsm_04_08.c | 7 +++++++ src/libmsc/osmo_msc.c | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c index d5cc21267..7dd303f29 100644 --- a/src/libmsc/gsm_04_08.c +++ b/src/libmsc/gsm_04_08.c @@ -1663,6 +1663,13 @@ int msc_geran_set_cipher_mode(struct gsm_subscriber_connection *conn, bool umts_ memcpy(ei.key, tuple->vec.kc, sizeof(tuple->vec.kc)); ei.key_len = sizeof(tuple->vec.kc); + conn->encr = (struct gsm_encr){}; + if (ei.key_len <= sizeof(conn->encr.key)) { + memcpy(conn->encr.key, ei.key, ei.key_len); + conn->encr.key_len = ei.key_len; + } + /* conn->encr.alg_id remains unknown until we receive a Cipher Mode Complete from the BSC */ + return a_iface_tx_cipher_mode(conn, &ei, retrieve_imeisv); } diff --git a/src/libmsc/osmo_msc.c b/src/libmsc/osmo_msc.c index f2c84e629..e3d7055bc 100644 --- a/src/libmsc/osmo_msc.c +++ b/src/libmsc/osmo_msc.c @@ -222,6 +222,8 @@ void msc_cipher_mode_compl(struct gsm_subscriber_connection *conn, } } + conn->encr.alg_id = alg_id; + ciph_res.cause = VLR_CIPH_COMPL; vlr_subscr_rx_ciph_res(conn->vsub, &ciph_res); } -- cgit v1.2.3