From 042afe7fe73929f40b32545bbdd97f10f260af60 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 21 Mar 2012 08:19:47 +0100 Subject: milenage: Add function to compute OPC from OP and K --- src/gsm/milenage/milenage.c | 15 +++++++++++++++ src/gsm/milenage/milenage.h | 2 ++ 2 files changed, 17 insertions(+) (limited to 'src/gsm/milenage') diff --git a/src/gsm/milenage/milenage.c b/src/gsm/milenage/milenage.c index cc4e95c5..b43f986a 100644 --- a/src/gsm/milenage/milenage.c +++ b/src/gsm/milenage/milenage.c @@ -327,3 +327,18 @@ int milenage_check(const u8 *opc, const u8 *k, const u8 *sqn, const u8 *_rand, return 0; } + +int milenage_opc_gen(u8 *opc, const u8 *k, const u8 *op) +{ + int i; + + /* Encrypt OP using K */ + if (aes_128_encrypt_block(k, op, opc)) + return -1; + + /* XOR the resulting Ek(OP) with OP */ + for (i = 0; i < 16; i++) + opc[i] = opc[i] ^ op[i]; + + return 0; +} diff --git a/src/gsm/milenage/milenage.h b/src/gsm/milenage/milenage.h index d5054d6d..a91e946a 100644 --- a/src/gsm/milenage/milenage.h +++ b/src/gsm/milenage/milenage.h @@ -30,4 +30,6 @@ int milenage_f1(const u8 *opc, const u8 *k, const u8 *_rand, int milenage_f2345(const u8 *opc, const u8 *k, const u8 *_rand, u8 *res, u8 *ck, u8 *ik, u8 *ak, u8 *akstar); +int milenage_opc_gen(u8 *opc, const u8 *k, const u8 *op); + #endif /* MILENAGE_H */ -- cgit v1.2.3