mirror of https://gerrit.osmocom.org/libosmocore
milenage: Add function to compute OPC from OP and K
This commit is contained in:
parent
fb6a2e274f
commit
042afe7fe7
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue