]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add UMTS AKA test vector
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 2 Mar 2018 03:04:28 +0000 (09:04 +0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 2 Mar 2018 03:04:28 +0000 (09:04 +0600)
src/modules/rlm_eap/lib/sim/crypto.c

index 794392efcd29085f9698f98965430e0512d9c3d9..9fa92b3961c8836df8277dca52e5016d3f06b9c7 100644 (file)
@@ -1258,6 +1258,82 @@ static void test_eap_sim_kdf_0_gsm(void)
        TEST_CHECK(memcmp(&rfc4186_vector0_out.emsk, keys.emsk, sizeof(keys.emsk)) == 0);
 }
 
+/*
+ *     UMTS authentication vectors
+ *
+ *     Test vector from 18 from 3GPP TS 35.208 V9 (the same used by EAP-AKA')
+ */
+static fr_sim_keys_t const rfc4187_vector0_in = {
+       .identity = (uint8_t const *)"0555444333222111",
+       .identity_len = sizeof("0555444333222111") - 1,
+
+       .sqn    = 205964772668538,
+
+       .umts = {
+               .vector = {
+                       .rand           = { 0x81, 0xe9, 0x2b, 0x6c, 0x0e, 0xe0, 0xe1, 0x2e,
+                                           0xbc, 0xeb, 0xa8, 0xd9, 0x2a, 0x99, 0xdf, 0xa5 },
+                       .autn           = { 0xbb, 0x52, 0xe9, 0x1c, 0x74, 0x7a, 0xc3, 0xab,
+                                           0x2a, 0x5c, 0x23, 0xd1, 0x5e, 0xe3, 0x51, 0xd5 },
+                       .ik             = { 0x97, 0x44, 0x87, 0x1a, 0xd3, 0x2b, 0xf9, 0xbb,
+                                           0xd1, 0xdd, 0x5c, 0xe5, 0x4e, 0x3e, 0x2e, 0x5a },
+                       .ck             = { 0x53, 0x49, 0xfb, 0xe0, 0x98, 0x64, 0x9f, 0x94,
+                                           0x8f, 0x5d, 0x2e, 0x97, 0x3a, 0x81, 0xc0, 0x0f },
+                       .xres           = { 0x28, 0xd7, 0xb0, 0xf2, 0xa2, 0xec, 0x3d, 0xe5 },
+                       .xres_len       = 8
+               }
+       },
+       .vector_type = SIM_VECTOR_UMTS
+};
+
+static fr_sim_keys_t const rfc4187_vector0_out = {
+       .k_encr         = { 0x18, 0xe8, 0xb2, 0x0b, 0xcd, 0xa7, 0x04, 0x86,
+                           0xfd, 0x59, 0x59, 0x58, 0x6a, 0x9e, 0x7c, 0x3d },
+       .k_aut          = { 0x18, 0xc0, 0x44, 0x07, 0x0e, 0x5e, 0x64, 0x2a,
+                           0x26, 0x43, 0x87, 0x6f, 0xf7, 0xa8, 0x38, 0x12 },
+       .k_aut_len      = 16,
+       .msk            = { 0x35, 0x2f, 0xfa, 0xef, 0x2d, 0xf1, 0x20, 0xcb,
+                           0x22, 0x41, 0x0b, 0x9c, 0x0b, 0x70, 0x62, 0x3c,
+                           0xb5, 0xa3, 0x5b, 0xc9, 0xfc, 0xd6, 0xbc, 0xa0,
+                           0xfc, 0x33, 0x7b, 0x48, 0xb1, 0x76, 0x30, 0x89,
+                           0x0a, 0x03, 0x37, 0x5c, 0xfd, 0x1e, 0x64, 0xcb,
+                           0xd6, 0xbf, 0x83, 0x04, 0x37, 0x4d, 0xd2, 0xe1,
+                           0x39, 0xd6, 0x4e, 0xd1, 0xa6, 0xd6, 0x18, 0xff,
+                           0xef, 0xb0, 0x8c, 0x26, 0xa6, 0xbb, 0x35, 0x85 },
+       .emsk           = { 0x9e, 0x06, 0x59, 0xae, 0x03, 0x97, 0x7d, 0xcb,
+                           0xb1, 0xd6, 0x4d, 0x24, 0x05, 0xe1, 0x10, 0x82,
+                           0xa9, 0x1a, 0xdb, 0x9a, 0xc7, 0xf7, 0xbd, 0x0b,
+                           0x74, 0xa6, 0x1e, 0xc0, 0xe9, 0x80, 0xb3, 0x6f,
+                           0xa0, 0xc3, 0x98, 0x8b, 0x6e, 0x11, 0xef, 0x12,
+                           0x52, 0x8e, 0x38, 0x04, 0xb3, 0x2d, 0xf1, 0xbc,
+                           0x52, 0xf6, 0x24, 0x9f, 0xa9, 0x6d, 0xc9, 0x4c,
+                           0x94, 0xa3, 0xd9, 0xb1, 0x48, 0xf4, 0xf9, 0x96 }
+};
+
+static void test_eap_aka_kdf_0_umts(void)
+{
+       fr_sim_keys_t   keys;
+       int             ret;
+
+/*
+       fr_log_fp = stdout;
+       fr_debug_lvl = 4;
+       printf("\n");
+*/
+
+       memcpy(&keys, &rfc4187_vector0_in, sizeof(keys));
+
+       ret = fr_sim_crypto_kdf_0_umts(&keys);
+       TEST_CHECK(ret == 0);
+
+       TEST_CHECK(memcmp(&rfc4187_vector0_out.k_encr, keys.k_encr, sizeof(keys.k_encr)) == 0);
+       TEST_CHECK(rfc4187_vector0_out.k_aut_len == keys.k_aut_len);
+
+       TEST_CHECK(memcmp(&rfc4187_vector0_out.k_aut, keys.k_aut, keys.k_aut_len) == 0);
+       TEST_CHECK(memcmp(&rfc4187_vector0_out.msk, keys.msk, sizeof(keys.msk)) == 0);
+       TEST_CHECK(memcmp(&rfc4187_vector0_out.emsk, keys.emsk, sizeof(keys.emsk)) == 0);
+}
+
 /*
  *     EAP-SIM (RFC4186) GSM re-authentication vectors
  */
@@ -1299,7 +1375,6 @@ static fr_sim_keys_t const rfc4186_vector0_reauth_out = {
                            0xe0, 0x34, 0x08, 0x84, 0xa2, 0x94, 0xfb, 0x73 }
 };
 
-
 static void test_eap_sim_kdf_0_reauth(void)
 {
        fr_sim_keys_t   keys;
@@ -1522,7 +1597,7 @@ TEST_LIST = {
        /*
         *      EAP-AKA
         */
-/*     { "test_eap_aka_kdf_0_umts",            test_eap_aka_kdf_0_umts         }, FIXME - Need test vectors */
+       { "test_eap_aka_kdf_0_umts",            test_eap_aka_kdf_0_umts         },
 
        /*
         *      EAP-SIM/EAP-AKA