open5gs/lib/3gpp/key_derive.c

30 lines
594 B
C
Raw Normal View History

2017-03-03 08:33:41 +00:00
#define TRACE_MODULE _3gpp_kdf
#include "core_debug.h"
#include "core_sha2_hmac.h"
2017-03-06 12:45:41 +00:00
void key_derive_kasme(const c_uint8_t *ck, const c_uint8_t *ik,
2017-03-03 14:35:17 +00:00
const c_uint8_t plmn_id[3], const c_uint8_t *sqn, const c_uint8_t *ak,
2017-03-03 08:33:41 +00:00
c_uint8_t *kasme)
{
c_uint8_t s[14];
c_uint8_t k[32];
int i;
memcpy(&k[0], ck, 16);
2017-03-03 14:35:17 +00:00
memcpy(&k[16], ik, 16);
2017-03-03 08:33:41 +00:00
s[0] = 0x10;
2017-03-03 14:35:17 +00:00
memcpy(&s[1], plmn_id, 3);
2017-03-03 08:33:41 +00:00
s[4] = 0x00;
s[5] = 0x03;
for (i = 0; i < 6; i++)
s[6+i] = sqn[i] ^ ak[i];
s[12] = 0x00;
s[13] = 0x06;
hmac_sha256(k, 32, s, 14, kasme, 32);
}