aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libmsc/gsm_04_08.c7
-rw-r--r--src/libmsc/osmo_msc.c2
2 files changed, 9 insertions, 0 deletions
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);
}