summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/crypt/auth.h1
-rw-r--r--src/gsm/auth_milenage.c3
-rw-r--r--tests/osmo-auc-gen/osmo-auc-gen_test.ok9
-rw-r--r--utils/osmo-auc-gen.c2
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);
}
}