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
*/
0xe0, 0x34, 0x08, 0x84, 0xa2, 0x94, 0xfb, 0x73 }
};
-
static void test_eap_sim_kdf_0_reauth(void)
{
fr_sim_keys_t keys;
/*
* 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