libosmogsm  1.9.0.21-11a41.202311072026
Osmocom GSM library
milenage.c File Reference

3GPP AKA - Milenage algorithm (3GPP TS 35.205, .206, .207, .208) More...

#include "includes.h"
#include "common.h"
#include "aes_wrap.h"
#include "milenage.h"
#include <osmocom/crypt/auth.h>

Functions

int milenage_f1 (const u8 *opc, const u8 *k, const u8 *_rand, const u8 *sqn, const u8 *amf, u8 *mac_a, u8 *mac_s)
 milenage_f1 - Milenage f1 and f1* algorithms : OPc = 128-bit value derived from OP and K : K = 128-bit subscriber key : RAND = 128-bit random challenge : SQN = 48-bit sequence number : AMF = 16-bit authentication management field : Buffer for MAC-A = 64-bit network authentication code, or NULL : Buffer for MAC-S = 64-bit resync authentication code, or NULL Returns: 0 on success, -1 on failure More...
 
int milenage_f2345 (const u8 *opc, const u8 *k, const u8 *_rand, u8 *res, u8 *ck, u8 *ik, u8 *ak, u8 *akstar)
 milenage_f2345 - Milenage f2, f3, f4, f5, f5* algorithms : OPc = 128-bit value derived from OP and K : K = 128-bit subscriber key : RAND = 128-bit random challenge : Buffer for RES = 64-bit signed response (f2), or NULL : Buffer for CK = 128-bit confidentiality key (f3), or NULL : Buffer for IK = 128-bit integrity key (f4), or NULL : Buffer for AK = 48-bit anonymity key (f5), or NULL : Buffer for AK = 48-bit anonymity key (f5*), or NULL Returns: 0 on success, -1 on failure More...
 
void milenage_generate (const u8 *opc, const u8 *amf, const u8 *k, const u8 *sqn, const u8 *_rand, u8 *autn, u8 *ik, u8 *ck, u8 *res, size_t *res_len)
 milenage_generate - Generate AKA AUTN,IK,CK,RES : OPc = 128-bit operator variant algorithm configuration field (encr.) : AMF = 16-bit authentication management field : K = 128-bit subscriber key : SQN = 48-bit sequence number : RAND = 128-bit random challenge : Buffer for AUTN = 128-bit authentication token : Buffer for IK = 128-bit integrity key (f4), or NULL : Buffer for CK = 128-bit confidentiality key (f3), or NULL : Buffer for RES = 64-bit signed response (f2), or NULL : Max length for res; set to used length or 0 on failure More...
 
int milenage_auts (const u8 *opc, const u8 *k, const u8 *_rand, const u8 *auts, u8 *sqn)
 milenage_auts - Milenage AUTS validation : OPc = 128-bit operator variant algorithm configuration field (encr.) : K = 128-bit subscriber key : RAND = 128-bit random challenge : AUTS = 112-bit authentication token from client : Buffer for SQN = 48-bit sequence number Returns: 0 = success (sqn filled), -1 on failure More...
 
int gsm_milenage (const u8 *opc, const u8 *k, const u8 *_rand, u8 *sres, u8 *kc)
 gsm_milenage - Generate GSM-Milenage (3GPP TS 55.205) authentication triplet : OPc = 128-bit operator variant algorithm configuration field (encr.) : K = 128-bit subscriber key : RAND = 128-bit random challenge : Buffer for SRES = 32-bit SRES : Buffer for Kc = 64-bit Kc Returns: 0 on success, -1 on failure More...
 
int milenage_check (const u8 *opc, const u8 *k, const u8 *sqn, const u8 *_rand, const u8 *autn, u8 *ik, u8 *ck, u8 *res, size_t *res_len, u8 *auts)
 milenage_generate - Generate AKA AUTN,IK,CK,RES : OPc = 128-bit operator variant algorithm configuration field (encr.) : K = 128-bit subscriber key : SQN = 48-bit sequence number : RAND = 128-bit random challenge : AUTN = 128-bit authentication token : Buffer for IK = 128-bit integrity key (f4), or NULL : Buffer for CK = 128-bit confidentiality key (f3), or NULL : Buffer for RES = 64-bit signed response (f2), or NULL : Variable that will be set to RES length : 112-bit buffer for AUTS Returns: 0 on success, -1 on failure, or -2 on synchronization failure More...
 
int milenage_opc_gen (u8 *opc, const u8 *k, const u8 *op)
 

Detailed Description

3GPP AKA - Milenage algorithm (3GPP TS 35.205, .206, .207, .208)

Function Documentation

◆ gsm_milenage()

int gsm_milenage ( const u8 opc,
const u8 k,
const u8 _rand,
u8 sres,
u8 kc 
)

gsm_milenage - Generate GSM-Milenage (3GPP TS 55.205) authentication triplet : OPc = 128-bit operator variant algorithm configuration field (encr.) : K = 128-bit subscriber key : RAND = 128-bit random challenge : Buffer for SRES = 32-bit SRES : Buffer for Kc = 64-bit Kc Returns: 0 on success, -1 on failure

References milenage_f2345(), osmo_auth_c2(), osmo_auth_c3(), and res.

◆ milenage_auts()

int milenage_auts ( const u8 opc,
const u8 k,
const u8 _rand,
const u8 auts,
u8 sqn 
)

milenage_auts - Milenage AUTS validation : OPc = 128-bit operator variant algorithm configuration field (encr.) : K = 128-bit subscriber key : RAND = 128-bit random challenge : AUTS = 112-bit authentication token from client : Buffer for SQN = 48-bit sequence number Returns: 0 = success (sqn filled), -1 on failure

References milenage_f1(), and milenage_f2345().

Referenced by milenage_gen_vec_auts().

◆ milenage_check()

int milenage_check ( const u8 opc,
const u8 k,
const u8 sqn,
const u8 _rand,
const u8 autn,
u8 ik,
u8 ck,
u8 res,
size_t *  res_len,
u8 auts 
)

milenage_generate - Generate AKA AUTN,IK,CK,RES : OPc = 128-bit operator variant algorithm configuration field (encr.) : K = 128-bit subscriber key : SQN = 48-bit sequence number : RAND = 128-bit random challenge : AUTN = 128-bit authentication token : Buffer for IK = 128-bit integrity key (f4), or NULL : Buffer for CK = 128-bit confidentiality key (f3), or NULL : Buffer for RES = 64-bit signed response (f2), or NULL : Variable that will be set to RES length : 112-bit buffer for AUTS Returns: 0 on success, -1 on failure, or -2 on synchronization failure

References milenage_f1(), milenage_f2345(), MSG_DEBUG, os_memcmp, wpa_hexdump, wpa_hexdump_key, and wpa_printf.

◆ milenage_f1()

int milenage_f1 ( const u8 opc,
const u8 k,
const u8 _rand,
const u8 sqn,
const u8 amf,
u8 mac_a,
u8 mac_s 
)

milenage_f1 - Milenage f1 and f1* algorithms : OPc = 128-bit value derived from OP and K : K = 128-bit subscriber key : RAND = 128-bit random challenge : SQN = 48-bit sequence number : AMF = 16-bit authentication management field : Buffer for MAC-A = 64-bit network authentication code, or NULL : Buffer for MAC-S = 64-bit resync authentication code, or NULL Returns: 0 on success, -1 on failure

References aes_128_encrypt_block(), and os_memcpy.

Referenced by milenage_auts(), milenage_check(), and milenage_generate().

◆ milenage_f2345()

int milenage_f2345 ( const u8 opc,
const u8 k,
const u8 _rand,
u8 res,
u8 ck,
u8 ik,
u8 ak,
u8 akstar 
)

milenage_f2345 - Milenage f2, f3, f4, f5, f5* algorithms : OPc = 128-bit value derived from OP and K : K = 128-bit subscriber key : RAND = 128-bit random challenge : Buffer for RES = 64-bit signed response (f2), or NULL : Buffer for CK = 128-bit confidentiality key (f3), or NULL : Buffer for IK = 128-bit integrity key (f4), or NULL : Buffer for AK = 48-bit anonymity key (f5), or NULL : Buffer for AK = 48-bit anonymity key (f5*), or NULL Returns: 0 on success, -1 on failure

References aes_128_encrypt_block(), and os_memcpy.

Referenced by gsm_milenage(), milenage_auts(), milenage_check(), and milenage_generate().

◆ milenage_generate()

void milenage_generate ( const u8 opc,
const u8 amf,
const u8 k,
const u8 sqn,
const u8 _rand,
u8 autn,
u8 ik,
u8 ck,
u8 res,
size_t *  res_len 
)

milenage_generate - Generate AKA AUTN,IK,CK,RES : OPc = 128-bit operator variant algorithm configuration field (encr.) : AMF = 16-bit authentication management field : K = 128-bit subscriber key : SQN = 48-bit sequence number : RAND = 128-bit random challenge : Buffer for AUTN = 128-bit authentication token : Buffer for IK = 128-bit integrity key (f4), or NULL : Buffer for CK = 128-bit confidentiality key (f3), or NULL : Buffer for RES = 64-bit signed response (f2), or NULL : Max length for res; set to used length or 0 on failure

References milenage_f1(), milenage_f2345(), and os_memcpy.

Referenced by milenage_gen_vec().

◆ milenage_opc_gen()

int milenage_opc_gen ( u8 opc,
const u8 k,
const u8 op 
)

References aes_128_encrypt_block().

Referenced by gen_opc_if_needed().