Commit d1eeee77 authored by Yann Garcia's avatar Yann Garcia
Browse files

Finalyse TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_20_01

parent ff1a5e5c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -123,10 +123,10 @@ system.N2_gNBaMF_P.params := "NGAP/SCTP_FILE/IP_OFFLINE/ETH(mac_src=8c554ac1eee0
#G_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_14_02
#NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_15_01
#NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_16_01
NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_17_01
#NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_17_01
#NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_17_02
NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_17_03
NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_18_01
#NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_18_01
#NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_19_01
#NG_NAS_TestCases.TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_20_01

+74 −60
Original line number Diff line number Diff line
@@ -1605,7 +1605,6 @@ module NG_NAS_TestCases {
         */
        testcase TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_09_02() runs on gNB_NGNAS_NGAPComponent system TestAdapter {

            // From ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.3 Test Set 1
            // From ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.3 Test Set 2
            var O16_Type  v_K     := '0396eb317b6d1c36f19c1c84cd6ffd16'O; // The long-term key: Subscriber key
            var B128_Type v_rand  := oct2bit('c00d603103dcee52c4478119494202e8'O);
@@ -1713,7 +1712,7 @@ module NG_NAS_TestCases {
            var B256_Type v_derived_key := oct2bit('0c01ec8210931fdaa57448583b69e8f0ce99db7560d07dd3719765d26bf4c12f'O);

            var B256_Type v_derived_key_computed := fx_KeyDerivationFunction(1, v_Ks, v_S);
            if (not(match(v_derived_key_computed, v_derived_key))) {
            if (not(match(v_derived_key_computed, v_derived_key))) { // Verified by https://cryptii.com/pipes/hmac
                log("*** " & __SCOPE__ & ": ERROR: 'v_derived_key_computed' did not return the expected value. ***");
                setverdict(fail);
            } else {
@@ -1819,21 +1818,28 @@ module NG_NAS_TestCases {
        testcase TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_15_01() runs on gNB_NGNAS_NGAPComponent system TestAdapter {

            // From ETSI TS 135 207 V16.0.0 (2020-08) Clause 4.3 Test Set 1
            var B48_Type   v_sqn_ak := oct2bit('000102030405'O); // SQN: Sequence Number
            var B16_Type   v_amf    := oct2bit('0000'O); // Dummy value
            var B64_Type   v_mac_a  := oct2bit('0000000000000000'O); // Dummy value
            var B128_Type  v_ck     := oct2bit('4a3b7c89acbd1234ef567890abcdef12'O);
            var B128_Type  v_ik     := oct2bit('9f1e2345ac7890fab345678912345678'O);
            var O16_Type  v_K     := '465b5ce8b199b49faa5f0a2ee238a6bc'O; // The long-term key: Subscriber key
            var O16_Type  v_op    := 'cdc202d5123e20f62b6d676ac72cb318'O; // Operator Variant Algorithm Configuration Field
            var B128_Type v_rand  := oct2bit('23553cbe9637a89d218ae64dae47bf35'O);
            var B48_Type v_sqn_ak := oct2bit('ff9bb4d0b607'O); // SQN: Sequence Number
            var B16_Type v_amf    := oct2bit('b9b9'O);
            var B64_Type v_xres   := oct2bit('a54211d5e3ba50bf'O); // Response. f2/e entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.3 Test Set 1 table
            var B128_Type v_ck    := oct2bit('b40ba9a3c58b2a05bbf0d987b21bf8cb'O); // Confidentiality key. f3/e entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.3 Test Set 1 table
            var B128_Type v_ik    := oct2bit('f769bcd751044604127672711c6d3441'O); // Integrity key
            var B48_Type v_ak     := oct2bit('aa689c648370'O); // Anonymity key
            var B64_Type v_mac_a  := oct2bit('9cabc3e99baf7281'O); // MAC-A: Network authentication code
            var NAS_PlmnId v_PLMN := '00f110'O; // PLMN ID: 001-01
            var hexstring v_NID   := '000138'H; // NID: Network Identifier

            var Common_AuthenticationParams_Type v_auth_params;
            v_auth_params.AUTN   := v_sqn_ak & v_amf & v_mac_a;
            f_set_op(v_op);

            var Common_AuthenticationParams_Type v_auth_params := valueof(cs_CommonAuthParams_Init(v_rand));
            v_auth_params.AUTN := v_sqn_ak & v_amf & v_mac_a; // ETSI TS 135 205 V16.0.0 (2020-08) 7.2 Use of the algorithms on the AuC side
            v_auth_params.CK   := v_ck;
            v_auth_params.IK   := v_ik;

            var B256_Type v_Ks := v_ck & v_ik; // ETSI TS 133 501 V16.18.0 (2024-04) A.2 KAUSF derivation function: Ks = CK || IK
            var B256_Type v_k_ausf := oct2bit('69EC2C51E14725BCCB24562470C25BE38C45701DCEBB6EF38B48ACE1082FE3C0'O);
            var B256_Type v_k_ausf := oct2bit('F42CFB5BCF426A3715BB5412E16F1177DB0EECF1EC2A21AE9826E941CA2B23EC'O);
            var B256_Type v_k_ausf_computed := f_NG_Authentication_A2(v_auth_params, tsc_KDF_HMAC_SHA_256, v_Ks, v_PLMN, v_NID);
            if (not(match(v_k_ausf_computed, v_k_ausf))) {
                log("*** " & __SCOPE__ & ": ERROR: 'v_k_ausf_computed' did not return the expected value. ***");
@@ -1856,20 +1862,27 @@ module NG_NAS_TestCases {
        testcase TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_16_01() runs on gNB_NGNAS_NGAPComponent system TestAdapter {

            // From ETSI TS 135 207 V16.0.0 (2020-08) Clause 4.3 Test Set 1
            var B48_Type   v_sqn_ak := oct2bit('000102030405'O); // SQN: Sequence Number
            var B16_Type   v_amf    := oct2bit('0000'O); // Dummy value
            var B64_Type   v_mac_a  := oct2bit('0000000000000000'O); // Dummy value
            var B128_Type  v_ck     := oct2bit('4a3b7c89acbd1234ef567890abcdef12'O);
            var B128_Type  v_ik     := oct2bit('9f1e2345ac7890fab345678912345678'O);
            var O16_Type  v_K      := '465b5ce8b199b49faa5f0a2ee238a6bc'O; // The long-term key: Subscriber key
            var O16_Type  v_op     := 'cdc202d5123e20f62b6d676ac72cb318'O; // Operator Variant Algorithm Configuration Field
            var B128_Type v_rand   := oct2bit('23553cbe9637a89d218ae64dae47bf35'O);
            var B48_Type  v_sqn_ak := oct2bit('ff9bb4d0b607'O); // SQN: Sequence Number
            var B16_Type  v_amf    := oct2bit('b9b9'O);
            var B64_Type  v_xres   := oct2bit('a54211d5e3ba50bf'O); // Response. f2/e entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.3 Test Set 1 table
            var B128_Type v_ck     := oct2bit('b40ba9a3c58b2a05bbf0d987b21bf8cb'O); // Confidentiality key. f3/e entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.3 Test Set 1 table
            var B128_Type v_ik     := oct2bit('f769bcd751044604127672711c6d3441'O); // Integrity key
            var B48_Type  v_ak     := oct2bit('aa689c648370'O); // Anonymity key
            var NAS_PlmnId v_PLMN  := '00f110'O; // PLMN ID: 001-01
            var hexstring  v_NID   := '000138'H; // NID: Network Identifier
            var B128_Type  v_ck_p   := oct2bit('23e5e46389721ca3a3abe4a0c9e60efd'O);
            var B128_Type  v_ik_p   := oct2bit('fce88fcd5e9e293ba6adaa5934c3687c'O);
            var B128_Type  v_ck_p  := oct2bit('8b9be2d9e808246a2f3ad44094c374fe'O);
            var B128_Type  v_ik_p  := oct2bit('154fad1c3c57a85cbdbbcf7db7549f03'O);
            var B64_Type   v_mac_a := oct2bit('0000000000000000'O); // Dummy value
                                                
            var B256_Type v_derived_key := oct2bit('23e5e46389721ca3a3abe4a0c9e60efdfce88fcd5e9e293ba6adaa5934c3687c'O);
            f_set_op(v_op);

            var B256_Type v_derived_key := oct2bit('8B9BE2D9E808246A2F3AD44094C374FE154FAD1C3C57A85CBDBBCF7DB7549F03'O);

            var Common_AuthenticationParams_Type v_auth_params;
            v_auth_params.AUTN   := v_sqn_ak & v_amf & v_mac_a;
            var Common_AuthenticationParams_Type v_auth_params := valueof(cs_CommonAuthParams_Init(v_rand));
            v_auth_params.AUTN := v_sqn_ak & v_amf & v_mac_a; // ETSI TS 135 205 V16.0.0 (2020-08) 7.2 Use of the algorithms on the AuC side
            v_auth_params.CK   := v_ck;
            v_auth_params.IK   := v_ik;

@@ -2023,7 +2036,7 @@ module NG_NAS_TestCases {
            }
            var B256_Type v_Ks := v_ck & v_ik; // ETSI TS 133 501 V16.18.0 (2024-04) A.2 KAUSF derivation function: Ks = CK || IK
            var Common_AuthenticationParams_Type v_auth_params := valueof(cs_CommonAuthParams_Init(v_rand));
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a;
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a; // ETSI TS 135 205 V16.0.0 (2020-08) 7.2 Use of the algorithms on the AuC side
            v_auth_params.CK         := v_ck;
            v_auth_params.IK         := v_ik;
            v_auth_params.XRES       := v_xres;
@@ -2098,7 +2111,7 @@ module NG_NAS_TestCases {
            }
            var B256_Type v_Ks := v_ck & v_ik; // ETSI TS 133 501 V16.18.0 (2024-04) A.2 KAUSF derivation function: Ks = CK || IK
            var Common_AuthenticationParams_Type v_auth_params := valueof(cs_CommonAuthParams_Init(v_rand));
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a;
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a; // ETSI TS 135 205 V16.0.0 (2020-08) 7.2 Use of the algorithms on the AuC side
            v_auth_params.CK         := v_ck;
            v_auth_params.IK         := v_ik;
            v_auth_params.XRES       := v_xres;
@@ -2175,7 +2188,7 @@ module NG_NAS_TestCases {
            var B256_Type v_Ks := v_ck & v_ik; // ETSI TS 133 501 V16.18.0 (2024-04) A.2 KAUSF derivation function: Ks = CK || IK

            var Common_AuthenticationParams_Type v_auth_params := valueof(cs_CommonAuthParams_Init(v_rand));
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a;
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a; // ETSI TS 135 205 V16.0.0 (2020-08) 7.2 Use of the algorithms on the AuC side
            v_auth_params.CK         := v_ck;
            v_auth_params.IK         := v_ik;
            v_auth_params.XRES       := v_xres;
@@ -2292,7 +2305,7 @@ module NG_NAS_TestCases {
            var B256_Type v_Ks := v_ck & v_ik; // ETSI TS 133 501 V16.18.0 (2024-04) A.2 KAUSF derivation function: Ks = CK || IK

            var Common_AuthenticationParams_Type v_auth_params := valueof(cs_CommonAuthParams_Init(v_rand));
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a;
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a; // ETSI TS 135 205 V16.0.0 (2020-08) 7.2 Use of the algorithms on the AuC side
            v_auth_params.CK         := v_ck;
            v_auth_params.IK         := v_ik;
            v_auth_params.XRES       := v_xres;
@@ -2322,7 +2335,7 @@ module NG_NAS_TestCases {
         */
        testcase TC_5G_AKA_CRYPTO_FUNCTIONS_TEST_20_01() runs on gNB_NGNAS_NGAPComponent system TestAdapter {

            // From ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.3 Test Set 1
            // From ETSI TS 135 207 V16.0.0 (2020-08) Clause 4.3 Test Set 1
            var O16_Type  v_K      := '465b5ce8b199b49faa5f0a2ee238a6bc'O; // The long-term key: Subscriber key
            var B128_Type v_rand   := oct2bit('23553cbe9637a89d218ae64dae47bf35'O);
            var O16_Type  v_op     := 'cdc202d5123e20f62b6d676ac72cb318'O; // Operator Variant Algorithm Configuration Field
@@ -2330,6 +2343,7 @@ module NG_NAS_TestCases {
            var B16_Type  v_amf    := oct2bit('b9b9'O); // AMF: Authentication Management Field
            var NAS_PlmnId v_PLMN  := '00f110'O; // PLMN ID: 001-01
            var hexstring  v_NID   := '000138'H; // NID: Network Identifier
            var charstring v_supi := "001014444333000";
 
            f_set_op(v_op);

@@ -2340,13 +2354,7 @@ module NG_NAS_TestCases {
                setverdict(fail);
                stop;
            }
            var B64_Type v_mac_s;
            v_result := f_f1star(oct2bit(v_K), v_rand, v_sqn_ak, v_amf, v_mac_s);
            if (v_result != 0) {
                log("*** " & __SCOPE__ & ": ERROR: 'fx_f1' returned an error code: " & int2str(v_result) & ". ***");
                setverdict(fail);
                stop;
            }

            var B64_Type  v_xres;
            var B128_Type v_ck;
            var B128_Type v_ik;
@@ -2355,23 +2363,29 @@ module NG_NAS_TestCases {
            if (v_result != 0) {
                log("*** " & __SCOPE__ & ": ERROR: 'f_f2345' returned an error code: " & int2str(v_result) & ". ***");
                setverdict(fail);
                stop;
            }
            // var B256_Type v_Ks := v_ck & v_ik; // ETSI TS 133 501 V16.18.0 (2024-04) A.2 KAUSF derivation function: Ks = CK || IK
            // var octetstring v_S := '06D540050123456789000f00000002'O;
            // var B256_Type v_k_aus := fx_KeyDerivationFunction(1, v_Ks, v_S);
            // var B256_Type v_k_seaf := f_NG_Authentication_A6(v_PLMN, v_k_aus, tsc_KDF_HMAC_SHA_256, v_NID);

            // var charstring v_supi := "460110123456789";
            // var octetstring v_abba := '0000'O; // ETSI TS 133 501 V16.18.0 (2024-04) A.7.1 ABBA parameter values
            // var B256_Type v_k_amf := int2bit(0, 256); // Expected KAMF value
            // var B256_Type v_k_amf_computed := f_NG_Authentication_A7(v_supi, v_k_seaf, v_abba, tsc_KDF_HMAC_SHA_256);
            // if (not(match(v_k_amf_computed, v_k_amf))) {
            //     log("*** " & __SCOPE__ & ": ERROR: 'v_k_amf_computed' did not return the expected value. ***");
            //     setverdict(fail);
            // } else {
            //     log("*** " & __SCOPE__ & ": 'v_k_amf_computed' returned the expected value ***");
            // }

            var Common_AuthenticationParams_Type v_auth_params := valueof(cs_CommonAuthParams_Init(v_rand));
            v_auth_params.AUTN       := v_sqn_ak & v_amf & v_mac_a; // ETSI TS 135 205 V16.0.0 (2020-08) 7.2 Use of the algorithms on the AuC side
            v_auth_params.CK         := v_ck;
            v_auth_params.IK         := v_ik;
            v_auth_params.XRES       := v_xres;
            v_auth_params.XRESLength := lengthof(v_xres);

            var B256_Type v_Ks := v_ck & v_ik; // ETSI TS 133 501 V16.18.0 (2024-04) A.2 KAUSF derivation function: Ks = CK || IK
            var B256_Type v_k_ausf := f_NG_Authentication_A2(v_auth_params, tsc_KDF_HMAC_SHA_256, v_Ks, v_PLMN, v_NID);

            var B256_Type v_k_seaf := f_NG_Authentication_A6(v_PLMN, v_k_ausf, tsc_KDF_HMAC_SHA_256, v_NID);

            var B256_Type v_k_amf := oct2bit('9379A99B1ED68C2F0643EBA74692E617563A21CDA85C5619D8686CF661FC8995'O); // KAMF: Authentication Management Field Key
            var B256_Type v_k_amf_computed := f_NG_Authentication_A7(v_supi, v_k_seaf, bit2oct(v_amf), tsc_KDF_HMAC_SHA_256)
            if (not(match(v_k_amf_computed, v_k_amf))) {
                log("*** " & __SCOPE__ & ": ERROR: 'v_k_amf_computed' did not return the expected value. ***");
                setverdict(fail);
            } else {
                log("*** " & __SCOPE__ & ": 'v_k_amf_computed' returned the expected value ***");
            }


            setverdict(pass)