]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
eap-aka: Use enumv values from KDF instead of definitions
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 20 Oct 2024 02:42:40 +0000 (20:42 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 24 Oct 2024 23:07:52 +0000 (17:07 -0600)
src/lib/eap_aka_sim/attrs.h
src/lib/eap_aka_sim/base.c
src/lib/eap_aka_sim/state_machine.c

index f185b405e35251744cdd0d4cba2fe483f905f0b6..5fe547b5c010e4248549d7f91c3de51f927c1e72 100644 (file)
@@ -91,3 +91,5 @@ extern HIDDEN fr_dict_attr_t const *attr_sim_sqn;
 extern fr_value_box_t const *enum_eap_type_sim;
 extern fr_value_box_t const *enum_eap_type_aka;
 extern fr_value_box_t const *enum_eap_type_aka_prime;
+
+extern HIDDEN fr_value_box_t const *enum_kdf_prime_with_ck_prime_ik_prime;
index cf035434f5cc3f92bfa0ea6b6f33f65ae6b10667..6fe251d1f7dc3021231c4b6f5cbe5319e252d1b9 100644 (file)
@@ -186,11 +186,16 @@ fr_value_box_t const      *enum_eap_type_sim;
 fr_value_box_t const   *enum_eap_type_aka;
 fr_value_box_t const   *enum_eap_type_aka_prime;
 
+fr_value_box_t const   *enum_kdf_prime_with_ck_prime_ik_prime;
+
 extern fr_dict_enum_autoload_t libfreeradius_aka_sim_dict_enum[];
 fr_dict_enum_autoload_t libfreeradius_aka_sim_dict_enum[] = {
        { .out = &enum_eap_type_sim, .name = "SIM", .attr = &attr_eap_type },
        { .out = &enum_eap_type_aka, .name = "AKA", .attr = &attr_eap_type },
        { .out = &enum_eap_type_aka_prime, .name = "AKA-Prime", .attr = &attr_eap_type },
+
+       { .out = &enum_kdf_prime_with_ck_prime_ik_prime, .name = "Prime-With-CK-Prime-IK-Prime", .attr = &attr_eap_aka_sim_kdf },
+
        { NULL }
 };
 
index 4122977fca690928801c2345f178d4113da6dace..4b7fbb5d31fbdca0659b3aaab8c27d15f0507630 100644 (file)
@@ -1835,18 +1835,14 @@ static unlang_action_t common_reauthentication_request_compose(rlm_rcode_t *p_re
                break;
 
        case FR_EAP_METHOD_AKA_PRIME:
-               switch (eap_aka_sim_session->kdf) {
-               case FR_KDF_VALUE_PRIME_WITH_CK_PRIME_IK_PRIME:
+               if (eap_aka_sim_session->kdf == enum_kdf_prime_with_ck_prime_ik_prime->vb_int16) {
                        if (fr_aka_sim_vector_umts_kdf_1_reauth_from_attrs(request, &request->session_state_pairs,
                                                                           &eap_aka_sim_session->keys) != 0) {
                                goto request_new_id;
                        }
                        if (fr_aka_sim_crypto_umts_kdf_1_reauth(&eap_aka_sim_session->keys) < 0) goto request_new_id;
-                       break;
-
-               default:
+               } else {
                        fr_assert(0);
-                       break;
                }
                break;
 
@@ -2431,14 +2427,10 @@ RESUME(send_aka_challenge_request)
                break;
 
        case FR_EAP_METHOD_AKA_PRIME:
-               switch (eap_aka_sim_session->kdf) {
-               case FR_KDF_VALUE_PRIME_WITH_CK_PRIME_IK_PRIME:
+               if (eap_aka_sim_session->kdf == enum_kdf_prime_with_ck_prime_ik_prime->vb_int16) {
                        fr_aka_sim_crypto_umts_kdf_1(&eap_aka_sim_session->keys);
-                       break;
-
-               default:
+               } else {
                        fr_assert(0);
-                       break;
                }
        }
        if (RDEBUG_ENABLED3) fr_aka_sim_crypto_keys_log(request, &eap_aka_sim_session->keys);
@@ -3511,7 +3503,7 @@ RESUME(recv_common_identity_response)
                running = AKA_SIM_METHOD_HINT_AKA_PRIME;
 
                eap_aka_sim_session->type = FR_EAP_METHOD_AKA_PRIME;
-               eap_aka_sim_session->kdf = FR_KDF_VALUE_PRIME_WITH_CK_PRIME_IK_PRIME;
+               eap_aka_sim_session->kdf = enum_kdf_prime_with_ck_prime_ik_prime->vb_int16;
                eap_aka_sim_session->mac_md = EVP_sha256();
                break;