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. Provide vlr_ciph_to_gsm0808_alg_id() to translate the enum vlr_ciph to the GSM0808_* constants we need to put in the gsm0808_encrypt_info struct instead. Related: OS#2745 Change-Id: If75f95e8a5cc8b9979610ce6d746c1f0073ee39a
This commit is contained in:
parent
4cf4fddf28
commit
cf30913c8e
|
@ -7,6 +7,7 @@
|
||||||
#include <osmocom/gsm/protocol/gsm_23_003.h>
|
#include <osmocom/gsm/protocol/gsm_23_003.h>
|
||||||
#include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
|
#include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
|
||||||
#include <osmocom/gsm/gsm23003.h>
|
#include <osmocom/gsm/gsm23003.h>
|
||||||
|
#include <osmocom/gsm/gsm0808.h>
|
||||||
#include <osmocom/msc/gsm_data.h>
|
#include <osmocom/msc/gsm_data.h>
|
||||||
// for GSM_NAME_LENGTH
|
// for GSM_NAME_LENGTH
|
||||||
#include <osmocom/msc/gsm_subscriber.h>
|
#include <osmocom/msc/gsm_subscriber.h>
|
||||||
|
@ -172,6 +173,21 @@ enum vlr_ciph {
|
||||||
VLR_CIPH_A5_3, /*< A5/3, 'new secure' encryption */
|
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 {
|
struct vlr_ops {
|
||||||
/* encode + transmit an AUTH REQ towards the MS.
|
/* encode + transmit an AUTH REQ towards the MS.
|
||||||
* \param[in] at auth tuple providing rand, key_seq and autn.
|
* \param[in] at auth tuple providing rand, key_seq and autn.
|
||||||
|
|
|
@ -198,7 +198,7 @@ int a_iface_tx_cipher_mode(const struct gsm_subscriber_connection *conn,
|
||||||
if (include_imeisv)
|
if (include_imeisv)
|
||||||
crm_ptr = &crm;
|
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;
|
ei.perm_algo_len = 1;
|
||||||
|
|
||||||
msg_resp = gsm0808_create_cipher(&ei, crm_ptr);
|
msg_resp = gsm0808_create_cipher(&ei, crm_ptr);
|
||||||
|
|
Loading…
Reference in New Issue