diff --git a/msc_tests/BSC_ConnectionHandler.ttcn b/msc_tests/BSC_ConnectionHandler.ttcn
index ee0e0ae..f9b4d3e 100644
--- a/msc_tests/BSC_ConnectionHandler.ttcn
+++ b/msc_tests/BSC_ConnectionHandler.ttcn
@@ -133,6 +133,30 @@
 	return l3_info;
 }
 
+type record AuthVector {
+	OCT16 rand,
+	OCT4 sres,
+	OCT8 kc
+	/* FIXME: 3G elements */
+}
+
+private function f_rnd_oct(integer len) return octetstring {
+	var integer i;
+	var octetstring res;
+	for (i := 0; i < len; i := i + 1) {
+		res[i] := int2oct(float2int(rnd()*256.0), 1);
+	}
+	return res;
+}
+
+function f_gen_auth_vec_2g() return AuthVector {
+	var AuthVector vec;
+	vec.rand := f_rnd_oct(16);
+	vec.sres := f_rnd_oct(4);
+	vec.kc := f_rnd_oct(8);
+	return vec;
+}
+
 function f_perform_lu(boolean expect_auth, boolean expect_tmsi, boolean send_early_cm)
 runs on BSC_ConnHdlr {
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
@@ -149,15 +173,13 @@
 	}
 
 	if (expect_auth) {
-		var OCT16 rand := 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'O;
-		var OCT4 sres := 'bbbbbbbb'O;
-		var GSUP_IE auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G(rand, sres,
-									 'cccccccccccccccc'O));
+		var AuthVector vec := f_gen_auth_vec_2g();
+		var GSUP_IE auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G(vec.rand, vec.sres, vec.kc));
 		GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi));
 		GSUP.send(ts_GSUP_SAI_RES(g_pars.imsi, auth_tuple));
 
-		BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ(rand)));
-		BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MT_MM_AUTH_RESP_2G(sres)));
+		BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ(vec.rand)));
+		BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MT_MM_AUTH_RESP_2G(vec.sres)));
 	}
 
 	/* Expect MSC to perform LU with HLR */
