diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2017-02-21 22:50:59 +0100 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2017-02-22 03:25:30 +0100 |
commit | 428c9478cd54371a7f8728ca159db57415a1517d (patch) | |
tree | dc1a2608d913715b0cb28cc6c37ca65cfdb4b7e5 /tests/auc/auc_3g_test.c | |
parent | 3aa3c103c2c33ac0be0612af65c94031871d072c (diff) |
auc_3g_test: add AUTS test with N vectors, to show bug
Add test that shows how passing AUTS to auc_compute_vectors performs an AUTS
sync on each vector and hence produces the same SQN each time. This will
generate one working vector as resync result, and then N-1 more with the wrong
SQN as far as the USIM is concerned. This causes a resync to be necessary on
every authentication.
Depends: libosmocore change-id If943731a78089f0aac3d55245de80596d01314a4
Change-Id: I246c9edfb009b593f834bb5b0577b65bfde7083c
Diffstat (limited to 'tests/auc/auc_3g_test.c')
-rw-r--r-- | tests/auc/auc_3g_test.c | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/auc/auc_3g_test.c b/tests/auc/auc_3g_test.c index cb5e412..f8ff67a 100644 --- a/tests/auc/auc_3g_test.c +++ b/tests/auc/auc_3g_test.c @@ -239,11 +239,94 @@ static void test_gen_vectors_2g_plus_3g(void) comment_end(); } +void _test_gen_vectors_3g_only__expect_vecs__WRONG(struct osmo_auth_vector vecs[3]) +{ + fprintf(stderr, "THERE IS A BUG AND THE TEST PASSES THE WRONG VECTORS UNTIL THAT IS FIXED\n"); + fprintf(stderr, "The SQN should increment with each new vector.\n"); + fprintf(stderr, "[0]: "); + VEC_IS(&vecs[0], + " rand: 897210a0f7de278f0b8213098e098a3f\n" + " autn: c6b9790dad4b00000cf322869ea6a481\n" + " ck: e9922bd036718ed9e40bd1d02c3b81a5\n" + " ik: f19c20ca863137f8892326d959ec5e01\n" + " res: 9af5a557902d2db80000000000000000\n" + " res_len: 08\n" + " kc: 7526fc13c5976685\n" + " sres: 0ad888ef\n" + " auth_types: 03000000\n" + ); + fprintf(stderr, "[1]: "); + VEC_IS(&vecs[1], + " rand: 9a8321b108ef38a01c93241a9f1a9b50\n" + " autn: 79a5113eb0900000f7e138537aa0962b\n" + " ck: 3686f05df057d1899c66ae4eb18cf941\n" + " ik: 79f21ed53bcb47787de57d136ff803a5\n" + " res: 43023475cb29292c0000000000000000\n" + " res_len: 08\n" + " kc: aef73dd515e86c15\n" + " sres: 882b1d59\n" + " auth_types: 03000000\n" + ); + fprintf(stderr, "[2]: "); + VEC_IS(&vecs[2], + " rand: ab9432c2190049b12da4352bb02bac61\n" + " autn: 24b018d46c390000d88e11730d0367ac\n" + " ck: d86c3191a36fc0602e48202ef2080964\n" + " ik: 648dab72016181406243420649e63dc9\n" + " res: 010cab11cc63a6e40000000000000000\n" + " res_len: 08\n" + " kc: f0eaf8cb19e0758d\n" + " sres: cd6f0df5\n" + " auth_types: 03000000\n" + ); +} + +void _test_gen_vectors_3g_only__expect_vecs(struct osmo_auth_vector vecs[3]) +{ + fprintf(stderr, "[0]: "); + VEC_IS(&vecs[0], + " rand: 897210a0f7de278f0b8213098e098a3f\n" + " autn: c6b9790dad4b00000cf322869ea6a481\n" + " ck: e9922bd036718ed9e40bd1d02c3b81a5\n" + " ik: f19c20ca863137f8892326d959ec5e01\n" + " res: 9af5a557902d2db80000000000000000\n" + " res_len: 08\n" + " kc: 7526fc13c5976685\n" + " sres: 0ad888ef\n" + " auth_types: 03000000\n" + ); + fprintf(stderr, "[1]: "); + VEC_IS(&vecs[1], + " rand: 9a8321b108ef38a01c93241a9f1a9b50\n" + " autn: 79a5113eb0910000be6020540503ffc5\n" + " ck: 3686f05df057d1899c66ae4eb18cf941\n" + " ik: 79f21ed53bcb47787de57d136ff803a5\n" + " res: 43023475cb29292c0000000000000000\n" + " res_len: 08\n" + " kc: aef73dd515e86c15\n" + " sres: 882b1d59\n" + " auth_types: 03000000\n" + ); + fprintf(stderr, "[2]: "); + VEC_IS(&vecs[2], + " rand: ab9432c2190049b12da4352bb02bac61\n" + " autn: 24b018d46c3b00009c7e1b47f3a19b2b\n" + " ck: d86c3191a36fc0602e48202ef2080964\n" + " ik: 648dab72016181406243420649e63dc9\n" + " res: 010cab11cc63a6e40000000000000000\n" + " res_len: 08\n" + " kc: f0eaf8cb19e0758d\n" + " sres: cd6f0df5\n" + " auth_types: 03000000\n" + ); +} + static void test_gen_vectors_3g_only(void) { struct osmo_sub_auth_data aud2g; struct osmo_sub_auth_data aud3g; struct osmo_auth_vector vec; + struct osmo_auth_vector vecs[3]; uint8_t auts[14]; uint8_t rand_auts[16]; int rc; @@ -379,6 +462,35 @@ static void test_gen_vectors_3g_only(void) " auth_types: 03000000\n" ); + + fprintf(stderr, "- verify N vectors with AUTS resync" + " == N vectors without AUTS\n" + "First just set rand and sqn = 24, and compute 3 vectors\n"); + next_rand("897210a0f7de278f0b8213098e098a3f", false); + aud3g.u.umts.sqn = 24; + VERBOSE_ASSERT(aud3g.u.umts.sqn, == 24, "%"PRIu64); + + memset(vecs, 0, sizeof(vecs)); + rc = auc_compute_vectors(vecs, 3, &aud2g, &aud3g, NULL, NULL); + VERBOSE_ASSERT(rc, == 3, "%d"); + VERBOSE_ASSERT(aud3g.u.umts.sqn, == 27, "%"PRIu64); + + _test_gen_vectors_3g_only__expect_vecs(vecs); + + fprintf(stderr, "Now reach sqn = 24 with AUTS and expect the same\n"); + /* AUTS response by USIM */ + osmo_hexparse("979498b1f72d3e28c59fa2e72f9c", + auts, sizeof(auts)); + /* RAND sent to USIM, which AUTS was generated from */ + osmo_hexparse("39fa2f4e3d523d8619a73b4f65c3e14d", + rand_auts, sizeof(rand_auts)); + next_rand("897210a0f7de278f0b8213098e098a3f", false); + rc = auc_compute_vectors(vecs, 3, &aud2g, &aud3g, rand_auts, auts); + + /* THIS IS WRONG AND WILL BE FIXED IN A SUBSEQUENT COMMIT: + should be _test_gen_vectors_3g_only__expect_vecs() instead */ + _test_gen_vectors_3g_only__expect_vecs__WRONG(vecs); + comment_end(); } |