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_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.
|
||||
|
|
|
@ -198,7 +198,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);
|
||||
|
|
Loading…
Reference in New Issue