aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auc/auc_3g_test.c
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-02-21 22:50:59 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-02-22 03:25:30 +0100
commit428c9478cd54371a7f8728ca159db57415a1517d (patch)
treedc1a2608d913715b0cb28cc6c37ca65cfdb4b7e5 /tests/auc/auc_3g_test.c
parent3aa3c103c2c33ac0be0612af65c94031871d072c (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.c112
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();
}