From a72e47b8a09d6a870b093cfa3b5716b6817c33b8 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 21 Mar 2012 09:03:16 +0100 Subject: auth_milenage/osmo-auc-gen: compute OPC in case only OP is known --- src/gsm/auth_milenage.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/gsm/auth_milenage.c') diff --git a/src/gsm/auth_milenage.c b/src/gsm/auth_milenage.c index 2a9ba334..5b2787dd 100644 --- a/src/gsm/auth_milenage.c +++ b/src/gsm/auth_milenage.c @@ -83,10 +83,21 @@ static int milenage_gen_vec_auts(struct osmo_auth_vector *vec, const uint8_t *_rand) { uint8_t sqn_out[6]; + uint8_t gen_opc[16]; + uint8_t *opc; int rc; - rc = milenage_auts(aud->u.umts.opc, aud->u.umts.k, - rand_auts, auts, sqn_out); + /* Check if we only know OP and compute OPC if required */ + if (aud->type == OSMO_AUTH_TYPE_UMTS && aud->u.umts.opc_is_op) { + rc = milenage_opc_gen(gen_opc, aud->u.umts.k, + aud->u.umts.opc); + if (rc < 0) + return rc; + opc = gen_opc; + } else + opc = aud->u.umts.opc; + + rc = milenage_auts(opc, aud->u.umts.k, rand_auts, auts, sqn_out); if (rc < 0) return rc; -- cgit v1.2.3