[MERGED] libosmocore[master]: osmo-auc-gen: umts: add --ind arg

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Tue Aug 29 12:46:48 UTC 2017


Harald Welte has submitted this change and it was merged.

Change subject: osmo-auc-gen: umts: add --ind arg
......................................................................


osmo-auc-gen: umts: add --ind arg

During UMTS AKA, the caller typically indicates which IND slot the next used
SQN should belong to. Without this option, osmo-auc-gen will always produce SQN
from IND-slot 0. Add --ind option.

Enhance the osmo-auc-gen_test.sh to expect errors with useful printouts on
stderr, and add tests that verify valid --ind ranges.

Related: OS#2465
Change-Id: Ib60eec80d58ca9a0a01e7fbd2bcbbd4339b1a6d8
---
M tests/osmo-auc-gen/osmo-auc-gen_test.err
M tests/osmo-auc-gen/osmo-auc-gen_test.ok
M tests/osmo-auc-gen/osmo-auc-gen_test.sh
M utils/osmo-auc-gen.c
4 files changed, 120 insertions(+), 2 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/tests/osmo-auc-gen/osmo-auc-gen_test.err b/tests/osmo-auc-gen/osmo-auc-gen_test.err
index e69de29..46ecf2e 100644
--- a/tests/osmo-auc-gen/osmo-auc-gen_test.err
+++ b/tests/osmo-auc-gen/osmo-auc-gen_test.err
@@ -0,0 +1,9 @@
+expecting error:
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind -1
+Requested --ind 4294967295 is too large for IND bitlen of 5
+expecting error:
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 32
+Requested --ind 32 is too large for IND bitlen of 5
+expecting error:
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 42
+Requested --ind 42 is too large for IND bitlen of 5
diff --git a/tests/osmo-auc-gen/osmo-auc-gen_test.ok b/tests/osmo-auc-gen/osmo-auc-gen_test.ok
index a1d06f0..278c88f 100644
--- a/tests/osmo-auc-gen/osmo-auc-gen_test.ok
+++ b/tests/osmo-auc-gen/osmo-auc-gen_test.ok
@@ -96,3 +96,66 @@
 SRES:	9b36efdf
 Kc:	059a4f668f6fbe39
 SQN:	32
+
+
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 5
+osmo-auc-gen (C) 2011-2012 by Harald Welte
+This is FREE SOFTWARE with ABSOLUTELY NO WARRANTY
+
+RAND:	39fa2f4e3d523d8619a73b4f65c3e14d
+AUTN:	8704f5ba55d6000079267a4b347ad890
+IK:	27497388b6cb044648f396aa155b95ef
+CK:	f64735036e5871319c679f4742a75ea1
+RES:	e229c19e791f2e41
+SRES:	9b36efdf
+Kc:	059a4f668f6fbe39
+SQN:	37
+
+
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 23
+osmo-auc-gen (C) 2011-2012 by Harald Welte
+This is FREE SOFTWARE with ABSOLUTELY NO WARRANTY
+
+RAND:	39fa2f4e3d523d8619a73b4f65c3e14d
+AUTN:	8704f5ba55c40000129ddaa4f5016e25
+IK:	27497388b6cb044648f396aa155b95ef
+CK:	f64735036e5871319c679f4742a75ea1
+RES:	e229c19e791f2e41
+SRES:	9b36efdf
+Kc:	059a4f668f6fbe39
+SQN:	55
+
+
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 31
+osmo-auc-gen (C) 2011-2012 by Harald Welte
+This is FREE SOFTWARE with ABSOLUTELY NO WARRANTY
+
+RAND:	39fa2f4e3d523d8619a73b4f65c3e14d
+AUTN:	8704f5ba55cc00009d169f5ff89f6087
+IK:	27497388b6cb044648f396aa155b95ef
+CK:	f64735036e5871319c679f4742a75ea1
+RES:	e229c19e791f2e41
+SRES:	9b36efdf
+Kc:	059a4f668f6fbe39
+SQN:	63
+
+
+expecting error:
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind -1
+osmo-auc-gen (C) 2011-2012 by Harald Welte
+This is FREE SOFTWARE with ABSOLUTELY NO WARRANTY
+
+
+
+expecting error:
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 32
+osmo-auc-gen (C) 2011-2012 by Harald Welte
+This is FREE SOFTWARE with ABSOLUTELY NO WARRANTY
+
+
+
+expecting error:
+> osmo-auc-gen -3 -a milenage -r 39fa2f4e3d523d8619a73b4f65c3e14d -k EB215756028D60E3275E613320AEC880 -o FB2A3D1B360F599ABAB99DB8669F8308 -A 979498b1f72d3e28c59fa2e72f9c --ind 42
+osmo-auc-gen (C) 2011-2012 by Harald Welte
+This is FREE SOFTWARE with ABSOLUTELY NO WARRANTY
+
diff --git a/tests/osmo-auc-gen/osmo-auc-gen_test.sh b/tests/osmo-auc-gen/osmo-auc-gen_test.sh
index 132d9c3..f7fc87d 100755
--- a/tests/osmo-auc-gen/osmo-auc-gen_test.sh
+++ b/tests/osmo-auc-gen/osmo-auc-gen_test.sh
@@ -18,6 +18,16 @@
 	$osmo_auc_gen $@
 }
 
+invoke_err() {
+	echo
+	echo
+	echo expecting error:
+	echo '>' osmo-auc-gen $@
+	echo expecting error: >&2
+	echo '>' osmo-auc-gen $@ >&2
+	$osmo_auc_gen $@ && exit 1 || true
+}
+
 bytes1="6a61050765caa32c90371370e5d6dc2d"
 bytes2="1dc4f974325cce611e54f516dc1fec56"
 bytes3="2a48162ff3edca4adf0b7b5e527d6c16"
@@ -32,5 +42,13 @@
 k="EB215756028D60E3275E613320AEC880"
 opc="FB2A3D1B360F599ABAB99DB8669F8308"
 rand="39fa2f4e3d523d8619a73b4f65c3e14d"
-auts="979498b1f72d3e28c59fa2e72f9c"
+auts="979498b1f72d3e28c59fa2e72f9c" # --> SQN.MS = 23
 invoke -3 -a milenage -r $rand -k $k -o $opc -A $auts
+invoke -3 -a milenage -r $rand -k $k -o $opc -A $auts --ind 5
+invoke -3 -a milenage -r $rand -k $k -o $opc -A $auts --ind 23
+invoke -3 -a milenage -r $rand -k $k -o $opc -A $auts --ind 31
+
+# expect error: IND is too large for IND-bitlen of 5 (max 31)
+invoke_err -3 -a milenage -r $rand -k $k -o $opc -A $auts --ind -1
+invoke_err -3 -a milenage -r $rand -k $k -o $opc -A $auts --ind 32
+invoke_err -3 -a milenage -r $rand -k $k -o $opc -A $auts --ind 42
diff --git a/utils/osmo-auc-gen.c b/utils/osmo-auc-gen.c
index 4e07fa7..4f36dee 100644
--- a/utils/osmo-auc-gen.c
+++ b/utils/osmo-auc-gen.c
@@ -80,6 +80,7 @@
 		"-O  --op\tSpecify OP (only for 3G)\n"
 		"-f  --amf\tSpecify AMF (only for 3G)\n"
 		"-s  --sqn\tSpecify SQN (only for 3G)\n"
+		"-i  --ind\tSpecify IND slot for new SQN after AUTS (only for 3G)\n"
 		"-A  --auts\tSpecify AUTS (only for 3G)\n"
 		"-r  --rand\tSpecify random value\n"
 		"-I  --ipsec\tOutput in triplets.dat format for strongswan\n");
@@ -96,10 +97,12 @@
 	struct osmo_auth_vector *vec = &_vec;
 	uint8_t _rand[16], _auts[14];
 	uint64_t sqn;
+	unsigned int ind;
 	int rc, option_index;
 	int rand_is_set = 0;
 	int auts_is_set = 0;
 	int sqn_is_set = 0;
+	int ind_is_set = 0;
 	int fmt_triplets_dat = 0;
 
 	printf("osmo-auc-gen (C) 2011-2012 by Harald Welte\n");
@@ -118,6 +121,7 @@
 			{ "op", 1, 0, 'O' },
 			{ "amf", 1, 0, 'f' },
 			{ "sqn", 1, 0, 's' },
+			{ "ind", 1, 0, 'i' },
 			{ "rand", 1, 0, 'r' },
 			{ "auts", 1, 0, 'A' },
 			{ "help", 0, 0, 'h' },
@@ -126,7 +130,7 @@
 
 		rc = 0;
 
-		c = getopt_long(argc, argv, "23a:k:o:f:s:r:hO:A:I", long_options,
+		c = getopt_long(argc, argv, "23a:k:o:f:s:i:r:hO:A:I", long_options,
 				&option_index);
 
 		if (c == -1)
@@ -202,6 +206,14 @@
 			sqn = strtoull(optarg, 0, 10);
 			sqn_is_set = 1;
 			break;
+		case 'i':
+			if (test_aud.type != OSMO_AUTH_TYPE_UMTS) {
+				fprintf(stderr, "Only UMTS has IND\n");
+				exit(2);
+			}
+			ind = atoi(optarg);
+			ind_is_set = 1;
+			break;
 		case 'r':
 			rc = osmo_hexparse(optarg, _rand, sizeof(_rand));
 			rand_is_set = 1;
@@ -257,6 +269,22 @@
 			test_aud.u.umts.sqn = sqn - seq_1;
 			test_aud.u.umts.ind = sqn & ind_mask;
 		}
+
+		if (sqn_is_set && ind_is_set) {
+			fprintf(stderr, "Requesting --sqn %"PRIu64" implies IND=%u,"
+				" so no further --ind argument is allowed.\n",
+				sqn, test_aud.u.umts.ind);
+			exit(2);
+		}
+
+		if (ind_is_set) {
+			if (ind >= (1 << test_aud.u.umts.ind_bitlen)) {
+				fprintf(stderr, "Requested --ind %u is too large for IND bitlen of %u\n",
+					ind, test_aud.u.umts.ind_bitlen);
+				exit(2);
+			}
+			test_aud.u.umts.ind = ind;
+		}
 	}
 
 	if (!auts_is_set)

-- 
To view, visit https://gerrit.osmocom.org/3700
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib60eec80d58ca9a0a01e7fbd2bcbbd4339b1a6d8
Gerrit-PatchSet: 2
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list