From: Arran Cudbard-Bell Date: Fri, 2 Mar 2018 03:04:28 +0000 (+0600) Subject: Add UMTS AKA test vector X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c807d5eefce0fdf1673b02fd2cab4d68ef2c5186;p=thirdparty%2Ffreeradius-server.git Add UMTS AKA test vector --- diff --git a/src/modules/rlm_eap/lib/sim/crypto.c b/src/modules/rlm_eap/lib/sim/crypto.c index 794392efcd2..9fa92b3961c 100644 --- a/src/modules/rlm_eap/lib/sim/crypto.c +++ b/src/modules/rlm_eap/lib/sim/crypto.c @@ -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