milenage: Add function to compute OPC from OP and K

This commit is contained in:
Harald Welte 2012-03-21 08:19:47 +01:00
parent fb6a2e274f
commit 042afe7fe7
3 changed files with 37 additions and 0 deletions

View File

@ -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;
}

View File

@ -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 */

View File

@ -37,6 +37,24 @@ static struct osmo_sub_auth_data test_aud = {
},
};
static int opc_test(const struct osmo_sub_auth_data *aud)
{
int rc;
uint8_t opc[16];
#if 0
const uint8_t op[16] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f };
#else
const uint8_t op[16] = { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 };
#endif
rc = milenage_opc_gen(opc, aud->u.umts.k, op);
printf("OP:\t%s\n", osmo_hexdump(op, sizeof(op)));
printf("OPC:\t%s\n", osmo_hexdump(opc, sizeof(opc)));
return rc;
}
int main(int argc, char **argv)
{
struct osmo_auth_vector _vec;
@ -73,6 +91,8 @@ int main(int argc, char **argv)
printf("AUTS success: SEQ.MS = %lu\n", test_aud.u.umts.sqn);
}
opc_test(&test_aud);
exit(0);
}