milenage_test: cosmetic: verify AUTS in comments

In a comment and by code #if'd away, illustrate that the AUTS used in the unit
test is accurate.

Related: OS#1968
Change-Id: Iefeaaf33570f8e40245fdf9b810390ec61cfc7e0
This commit is contained in:
Neels Hofmeyr 2017-03-14 02:31:41 +01:00
parent 49daf56319
commit 6761c3f626
1 changed files with 56 additions and 0 deletions

View File

@ -63,6 +63,15 @@ static int opc_test(const struct osmo_sub_auth_data *aud)
return rc;
}
#define RECALC_AUTS 0
#if RECALC_AUTS
typedef uint8_t u8;
extern int milenage_f2345(const u8 *opc, const u8 *k, const u8 *_rand,
u8 *res, u8 *ck, u8 *ik, u8 *ak, u8 *akstar);
extern int milenage_f1(const u8 *opc, const u8 *k, const u8 *_rand,
const u8 *sqn, const u8 *amf, u8 *mac_a, u8 *mac_s);
#endif
int main(int argc, char **argv)
{
struct osmo_auth_vector _vec;
@ -92,6 +101,53 @@ int main(int argc, char **argv)
dump_auth_vec(vec);
/* The USIM generates an AUTS to tell us it is at SQN == 31:
*
* SQN_MS = 00000000001f
*
* AUTS = Conc(SQN_MS) || MAC-S
* Conc(SQN_MS) = SQN_MS f5*[K](RAND)
* MAC-S = f1*[K] (SQN MS || RAND || AMF)
*
* K = 000102030405060708090a0b0c0d0e0f
* RAND = 00000000000000000000000000000000
*
* f5*--> Conc(SQN_MS) = SQN_MS ^ f5*(K,RAND)
* = 00000000001f ^ 8711a0ec9e09
* = 8711a0ec9e16
* AMF = 0000 (TS 33.102 v7.0.0, 6.3.3)
* MAC-S = f1*[K] (SQN MS || RAND || AMF)
* = f1*[K] (00000000001f || 00000000000000000000000000000000 || 0000)
* = 37df17f80b384ee4
*
* AUTS = 8711a0ec9e16 || 37df17f80b384ee4
*/
#if RECALC_AUTS
uint8_t ak[6];
uint8_t akstar[6];
uint8_t opc[16];
uint8_t k[16];
uint8_t rand[16];
osmo_hexparse("000102030405060708090a0b0c0d0e0f", k, sizeof(k));
osmo_hexparse("000102030405060708090a0b0c0d0e0f", opc, sizeof(opc));
osmo_hexparse("00000000000000000000000000000000", rand, sizeof(rand));
milenage_f2345(opc, k, rand, NULL, NULL, NULL, ak, akstar);
printf("ak = %s\n", osmo_hexdump_nospc(ak, sizeof(ak)));
printf("akstar = %s\n", osmo_hexdump_nospc(akstar, sizeof(akstar)));
uint8_t sqn_ms[6] = { 0, 0, 0, 0, 0, 31 };
uint8_t amf[2] = {};
uint8_t mac_s[8];
milenage_f1(opc, k, rand, sqn_ms, amf, NULL, mac_s);
printf("mac_s = %s\n", osmo_hexdump_nospc(mac_s, sizeof(mac_s)));
/* verify valid AUTS resulting in SQN 31 with:
osmo-auc-gen -3 -a milenage -k 000102030405060708090a0b0c0d0e0f \
-o 000102030405060708090a0b0c0d0e0f \
-r 00000000000000000000000000000000 \
-A 8711a0ec9e1637df17f80b384ee4
*/
#endif
const uint8_t auts[14] = { 0x87, 0x11, 0xa0, 0xec, 0x9e, 0x16, 0x37, 0xdf,
0x17, 0xf8, 0x0b, 0x38, 0x4e, 0xe4 };