diff options
-rw-r--r-- | include/osmocom/crypt/auth.h | 1 | ||||
-rw-r--r-- | src/gsm/auth_milenage.c | 3 | ||||
-rw-r--r-- | tests/osmo-auc-gen/osmo-auc-gen_test.ok | 9 | ||||
-rw-r--r-- | utils/osmo-auc-gen.c | 2 |
4 files changed, 14 insertions, 1 deletions
diff --git a/include/osmocom/crypt/auth.h b/include/osmocom/crypt/auth.h index 059e734c..6d2c783d 100644 --- a/include/osmocom/crypt/auth.h +++ b/include/osmocom/crypt/auth.h @@ -39,6 +39,7 @@ struct osmo_sub_auth_data { int opc_is_op; /*!< is the OPC field OPC (0) or OP (1) ? */ unsigned int ind_bitlen; /*!< nr of bits not in SEQ, only SQN */ unsigned int ind; /*!< which IND slot to use an SQN from */ + uint64_t sqn_ms; /*!< sqn from AUTS (output value only) */ } umts; struct { uint8_t ki[16]; /*!< secret key */ diff --git a/src/gsm/auth_milenage.c b/src/gsm/auth_milenage.c index 6dd4f45a..e1a1dfba 100644 --- a/src/gsm/auth_milenage.c +++ b/src/gsm/auth_milenage.c @@ -158,9 +158,10 @@ static int milenage_gen_vec_auts(struct osmo_auth_vector *vec, if (rc < 0) return rc; + aud->u.umts.sqn_ms = osmo_load64be_ext(sqn_out, 6) >> 16; /* Update our "largest used SQN" from the USIM -- milenage_gen_vec() * below will increment SQN. */ - aud->u.umts.sqn = osmo_load64be_ext(sqn_out, 6) >> 16; + aud->u.umts.sqn = aud->u.umts.sqn_ms; return milenage_gen_vec(vec, aud, _rand); } diff --git a/tests/osmo-auc-gen/osmo-auc-gen_test.ok b/tests/osmo-auc-gen/osmo-auc-gen_test.ok index 82923f10..2840783a 100644 --- a/tests/osmo-auc-gen/osmo-auc-gen_test.ok +++ b/tests/osmo-auc-gen/osmo-auc-gen_test.ok @@ -103,6 +103,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 32 IND: 0 +SQN.MS: 23 > osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 5 @@ -118,6 +119,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 37 IND: 5 +SQN.MS: 23 > osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 23 @@ -133,6 +135,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 55 IND: 23 +SQN.MS: 23 > osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 31 @@ -148,6 +151,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 63 IND: 31 +SQN.MS: 23 > osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind-len 0 @@ -163,6 +167,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 24 IND: 0 +SQN.MS: 23 > osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind-len 1 @@ -178,6 +183,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 24 IND: 0 +SQN.MS: 23 > osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind-len 1 --ind 1 @@ -193,6 +199,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 25 IND: 1 +SQN.MS: 23 > osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind-len 8 @@ -208,6 +215,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 256 IND: 0 +SQN.MS: 23 > osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind-len 8 --ind 1 @@ -223,6 +231,7 @@ SRES: 9b36efdf Kc: 059a4f668f6fbe39 SQN: 257 IND: 1 +SQN.MS: 23 expecting error: diff --git a/utils/osmo-auc-gen.c b/utils/osmo-auc-gen.c index d4ae1b9e..fee97678 100644 --- a/utils/osmo-auc-gen.c +++ b/utils/osmo-auc-gen.c @@ -317,6 +317,8 @@ int main(int argc, char **argv) if (test_aud.type == OSMO_AUTH_TYPE_UMTS) { printf("SQN:\t%" PRIu64 "\n", test_aud.u.umts.sqn); printf("IND:\t%u\n", (unsigned int)(test_aud.u.umts.sqn & ind_mask)); + if (auts_is_set) + printf("SQN.MS:\t%" PRIu64 "\n", test_aud.u.umts.sqn_ms); } } |