update it
This commit is contained in:
parent
bd31662aec
commit
e7c9dbfc4d
|
@ -572,18 +572,19 @@ CORE_DECLARE(c_int32_t) nas_encode_nas_key_set_identifier(
|
||||||
|
|
||||||
/* 9.9.3.23 NAS security algorithms
|
/* 9.9.3.23 NAS security algorithms
|
||||||
* M V 1 */
|
* M V 1 */
|
||||||
#define NAS_SECURITY_ALGORITHMS_EIA0 0
|
#define NAS_SECURITY_ALGORITHMS_EIA0 0
|
||||||
#define NAS_SECURITY_ALGORITHMS_128_EIA1 1
|
#define NAS_SECURITY_ALGORITHMS_128_EIA1 1
|
||||||
#define NAS_SECURITY_ALGORITHMS_128_EIA2 2
|
#define NAS_SECURITY_ALGORITHMS_128_EIA2 2
|
||||||
#define NAS_SECURITY_ALGORITHMS_128_EIA3 3
|
#define NAS_SECURITY_ALGORITHMS_128_EIA3 3
|
||||||
#define NAS_SECURITY_ALGORITHMS_128_EEA1 1
|
#define NAS_SECURITY_ALGORITHMS_EEA0 0
|
||||||
#define NAS_SECURITY_ALGORITHMS_128_EEA2 2
|
#define NAS_SECURITY_ALGORITHMS_128_EEA1 1
|
||||||
#define NAS_SECURITY_ALGORITHMS_128_EEA3 3
|
#define NAS_SECURITY_ALGORITHMS_128_EEA2 2
|
||||||
|
#define NAS_SECURITY_ALGORITHMS_128_EEA3 3
|
||||||
typedef struct _nas_security_algorithms_t {
|
typedef struct _nas_security_algorithms_t {
|
||||||
ED4(c_uint8_t spare1:1;,
|
ED4(c_uint8_t spare1:1;,
|
||||||
c_uint8_t type_of_ciphering_algorithm:1;,
|
c_uint8_t type_of_ciphering_algorithm:3;,
|
||||||
c_uint8_t spare2:1;,
|
c_uint8_t spare2:1;,
|
||||||
c_uint8_t type_of_integrity_protection_algorithm:1;)
|
c_uint8_t type_of_integrity_protection_algorithm:3;)
|
||||||
} __attribute__ ((packed)) nas_security_algorithms_t;
|
} __attribute__ ((packed)) nas_security_algorithms_t;
|
||||||
|
|
||||||
CORE_DECLARE(c_int32_t) nas_encode_nas_security_algorithms(
|
CORE_DECLARE(c_int32_t) nas_encode_nas_security_algorithms(
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "core_index.h"
|
#include "core_index.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
|
#include "nas_ies.h"
|
||||||
#include "s1ap_message.h"
|
#include "s1ap_message.h"
|
||||||
|
|
||||||
#define CELL_PER_ENB 8
|
#define CELL_PER_ENB 8
|
||||||
|
@ -64,6 +65,9 @@ status_t mme_ctx_init()
|
||||||
self.srvd_gummei.num_of_mme_code = 1;
|
self.srvd_gummei.num_of_mme_code = 1;
|
||||||
self.srvd_gummei.mme_code[0] = 1;
|
self.srvd_gummei.mme_code[0] = 1;
|
||||||
|
|
||||||
|
self.selected_int_algorithm = NAS_SECURITY_ALGORITHMS_128_EIA1;
|
||||||
|
self.selected_enc_algorithm = NAS_SECURITY_ALGORITHMS_EIA0;
|
||||||
|
|
||||||
g_mme_ctx_initialized = 1;
|
g_mme_ctx_initialized = 1;
|
||||||
|
|
||||||
return CORE_OK;
|
return CORE_OK;
|
||||||
|
|
|
@ -46,10 +46,22 @@ typedef struct _mme_ctx_t {
|
||||||
msgq_id queue_id;
|
msgq_id queue_id;
|
||||||
tm_service_t tm_service;
|
tm_service_t tm_service;
|
||||||
|
|
||||||
c_uint32_t mme_ue_s1ap_id;
|
c_uint32_t mme_ue_s1ap_id; /** mme_ue_s1ap_id generator */
|
||||||
|
|
||||||
plmn_id_t plmn_id;
|
plmn_id_t plmn_id;
|
||||||
|
|
||||||
|
/* defined in 'nas_ies.h'
|
||||||
|
* #define NAS_SECURITY_ALGORITHMS_EIA0 0
|
||||||
|
* #define NAS_SECURITY_ALGORITHMS_128_EIA1 1
|
||||||
|
* #define NAS_SECURITY_ALGORITHMS_128_EIA1 2
|
||||||
|
* #define NAS_SECURITY_ALGORITHMS_128_EIA3 3 */
|
||||||
|
c_uint8_t selected_int_algorithm;
|
||||||
|
/* defined in 'nas_ies.h'
|
||||||
|
* #define NAS_SECURITY_ALGORITHMS_EIA0 0
|
||||||
|
* #define NAS_SECURITY_ALGORITHMS_128_EEA1 1
|
||||||
|
* #define NAS_SECURITY_ALGORITHMS_128_EEA2 2
|
||||||
|
* #define NAS_SECURITY_ALGORITHMS_128_EEA3 3 */
|
||||||
|
c_uint8_t selected_enc_algorithm;
|
||||||
|
|
||||||
/* S1SetupRequest */
|
/* S1SetupRequest */
|
||||||
c_uint16_t tracking_area_code;
|
c_uint16_t tracking_area_code;
|
||||||
c_uint16_t default_paging_drx;
|
c_uint16_t default_paging_drx;
|
||||||
|
@ -74,21 +86,24 @@ typedef struct _enb_ctx_t {
|
||||||
typedef struct _ue_ctx_t {
|
typedef struct _ue_ctx_t {
|
||||||
lnode_t node; /**< A node of list_t */
|
lnode_t node; /**< A node of list_t */
|
||||||
|
|
||||||
|
/* State Machine */
|
||||||
ue_emm_sm_t emm_sm;
|
ue_emm_sm_t emm_sm;
|
||||||
|
|
||||||
|
/* UE identity */
|
||||||
c_uint32_t enb_ue_s1ap_id; /** eNB-UE-S1AP-ID received from eNB */
|
c_uint32_t enb_ue_s1ap_id; /** eNB-UE-S1AP-ID received from eNB */
|
||||||
c_uint32_t mme_ue_s1ap_id; /** MME-UE-S1AP-ID received from MME */
|
c_uint32_t mme_ue_s1ap_id; /** MME-UE-S1AP-ID received from MME */
|
||||||
c_uint8_t imsi[MAX_IMSI_LEN+1];
|
c_uint8_t imsi[MAX_IMSI_LEN+1];
|
||||||
c_uint8_t imsi_len;
|
c_uint8_t imsi_len;
|
||||||
|
|
||||||
|
/* Security Context */
|
||||||
c_uint8_t xres[MAX_RES_LEN];
|
c_uint8_t xres[MAX_RES_LEN];
|
||||||
c_uint8_t xres_len;
|
c_uint8_t xres_len;
|
||||||
c_uint8_t kasme[SHA256_DIGEST_SIZE];
|
c_uint8_t kasme[SHA256_DIGEST_SIZE];
|
||||||
c_uint8_t knasenc[SHA256_DIGEST_SIZE];
|
c_uint8_t knas_int[SHA256_DIGEST_SIZE/2];
|
||||||
c_uint8_t knasint[SHA256_DIGEST_SIZE];
|
c_uint8_t knas_enc[SHA256_DIGEST_SIZE/2];
|
||||||
|
|
||||||
|
/* Related Context for UE */
|
||||||
rab_list_t rab_list;
|
rab_list_t rab_list;
|
||||||
|
|
||||||
enb_ctx_t *enb;
|
enb_ctx_t *enb;
|
||||||
} ue_ctx_t;
|
} ue_ctx_t;
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,17 @@
|
||||||
|
|
||||||
#include "nas_ies.h"
|
#include "nas_ies.h"
|
||||||
|
|
||||||
|
/* Algorithm Type Distinguishers */
|
||||||
#define MME_KDF_NAS_ENC_ALG 0x01
|
#define MME_KDF_NAS_ENC_ALG 0x01
|
||||||
#define MME_KDF_NAS_INT_ALG 0x02
|
#define MME_KDF_NAS_INT_ALG 0x02
|
||||||
|
|
||||||
|
/* Algorithm Identity defined in nas_ies.h
|
||||||
|
#define NAS_SECURITY_ALGORITHMS_EIA0_EEA0 0
|
||||||
|
#define NAS_SECURITY_ALGORITHMS_128_EIA1_EEA1 1
|
||||||
|
#define NAS_SECURITY_ALGORITHMS_128_EIA1_EEA2 2
|
||||||
|
#define NAS_SECURITY_ALGORITHMS_128_EIA3_EEA3 3
|
||||||
|
*/
|
||||||
|
|
||||||
void mme_kdf_nas(c_uint8_t algorithm_type_distinguishers,
|
void mme_kdf_nas(c_uint8_t algorithm_type_distinguishers,
|
||||||
c_uint8_t algorithm_identity, c_uint8_t *kasme, c_uint8_t *knas);
|
c_uint8_t algorithm_identity, c_uint8_t *kasme, c_uint8_t *knas);
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
|
||||||
|
#include "kdf.h"
|
||||||
#include "s1ap_path.h"
|
#include "s1ap_path.h"
|
||||||
#include "s1ap_conv.h"
|
#include "s1ap_conv.h"
|
||||||
#include "nas_conv.h"
|
#include "nas_conv.h"
|
||||||
|
@ -208,6 +209,8 @@ static void ue_emm_handle_authentication_response(
|
||||||
nas_authentication_response_parameter_t *authentication_response_parameter =
|
nas_authentication_response_parameter_t *authentication_response_parameter =
|
||||||
&authentication_response->authentication_response_parameter;
|
&authentication_response->authentication_response_parameter;
|
||||||
|
|
||||||
|
d_assert(ue, return, "Null param");
|
||||||
|
|
||||||
if (authentication_response_parameter->length != ue->xres_len ||
|
if (authentication_response_parameter->length != ue->xres_len ||
|
||||||
memcmp(authentication_response_parameter->res,
|
memcmp(authentication_response_parameter->res,
|
||||||
ue->xres, ue->xres_len) != 0)
|
ue->xres, ue->xres_len) != 0)
|
||||||
|
@ -216,6 +219,8 @@ static void ue_emm_handle_authentication_response(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
d_print_hex(authentication_response_parameter->res,
|
mme_kdf_nas(MME_KDF_NAS_INT_ALG, mme_self()->selected_int_algorithm,
|
||||||
authentication_response_parameter->length);
|
ue->kasme, ue->knas_int);
|
||||||
|
mme_kdf_nas(MME_KDF_NAS_ENC_ALG, mme_self()->selected_enc_algorithm,
|
||||||
|
ue->kasme, ue->knas_enc);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue