aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2017-12-14 03:57:31 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2017-12-14 05:39:00 +0100
commitbaef13825fe020724b5da69c050e17ae6a80a979 (patch)
tree2af2a030350913dc6bbedd1f1438cdc6ec75646d
parent98dc9f70c21e85891e2035749b457cf44c08739c (diff)
fix BSSMAP Cipher Mode Cmd: properly set permitted algorithms
The bit shifting is performed in gsm0808_enc_encrypt_info(), and must not be done when populating the gsm0808_encrypt_info struct. Change-Id: If75f95e8a5cc8b9979610ce6d746c1f0073ee39a
-rw-r--r--include/osmocom/msc/vlr.h16
-rw-r--r--src/libmsc/a_iface.c2
2 files changed, 17 insertions, 1 deletions
diff --git a/include/osmocom/msc/vlr.h b/include/osmocom/msc/vlr.h
index 9e6b12c33..640d35b46 100644
--- a/include/osmocom/msc/vlr.h
+++ b/include/osmocom/msc/vlr.h
@@ -7,6 +7,7 @@
#include <osmocom/gsm/protocol/gsm_23_003.h>
#include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
#include <osmocom/gsm/gsm23003.h>
+#include <osmocom/gsm/gsm0808.h>
#include <osmocom/msc/gsm_data.h>
// for GSM_NAME_LENGTH
#include <osmocom/msc/gsm_subscriber.h>
@@ -172,6 +173,21 @@ enum vlr_ciph {
VLR_CIPH_A5_3, /*< A5/3, 'new secure' encryption */
};
+static inline uint8_t vlr_ciph_to_gsm0808_alg_id(enum vlr_ciph ciph)
+{
+ switch (ciph) {
+ default:
+ case VLR_CIPH_NONE:
+ return GSM0808_ALG_ID_A5_0;
+ case VLR_CIPH_A5_1:
+ return GSM0808_ALG_ID_A5_1;
+ case VLR_CIPH_A5_2:
+ return GSM0808_ALG_ID_A5_2;
+ case VLR_CIPH_A5_3:
+ return GSM0808_ALG_ID_A5_3;
+ }
+}
+
struct vlr_ops {
/* encode + transmit an AUTH REQ towards the MS.
* \param[in] at auth tuple providing rand, key_seq and autn.
diff --git a/src/libmsc/a_iface.c b/src/libmsc/a_iface.c
index 6f9bdd035..e264aeeba 100644
--- a/src/libmsc/a_iface.c
+++ b/src/libmsc/a_iface.c
@@ -193,7 +193,7 @@ int a_iface_tx_cipher_mode(const struct gsm_subscriber_connection *conn,
if (include_imeisv)
crm_ptr = &crm;
- ei.perm_algo[0] = (uint8_t) (1 << cipher);
+ ei.perm_algo[0] = vlr_ciph_to_gsm0808_alg_id(cipher);
ei.perm_algo_len = 1;
msg_resp = gsm0808_create_cipher(&ei, crm_ptr);