libosmogsm
0.9.6.311-c977
Osmocom GSM library
|
GSM/GPRS/3G authentication core infrastructure. More...
Files | |
file | auth_core.c |
file | comp128.c |
COMP128 v1; common/old GSM Authentication Algorithm (A3/A8). | |
file | comp128v23.c |
COMP128 version 2 and 3 implementation, common algorithm used for GSM Authentication (A3/A8). | |
Functions | |
static int | c128v1_gen_vec (struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *_rand) |
static | __attribute__ ((constructor)) |
static int | c128v2_gen_vec (struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *_rand) |
static int | c128v3_gen_vec (struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *_rand) |
static | LLIST_HEAD (osmo_auths) |
int | osmo_auth_register (struct osmo_auth_impl *impl) |
Register an authentication algorithm implementation with the core. More... | |
int | osmo_auth_load (const char *path) |
Load all available authentication plugins from the given path. More... | |
int | osmo_auth_supported (enum osmo_auth_algo algo) |
Determine if a given authentication algorithm is supported. More... | |
static void | c5_function (uint8_t *ik, const uint8_t *kc) |
void | osmo_c4 (uint8_t *ck, const uint8_t *kc) |
int | osmo_auth_3g_from_2g (struct osmo_auth_vector *vec) |
Generate 3G CK + IK from 2G authentication vector. More... | |
int | osmo_auth_gen_vec (struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *_rand) |
Generate authentication vector. More... | |
int | osmo_auth_gen_vec_auts (struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *auts, const uint8_t *rand_auts, const uint8_t *_rand) |
Generate authentication vector and re-sync sequence. More... | |
const char * | osmo_auth_alg_name (enum osmo_auth_algo alg) |
Get human-readable name of authentication algorithm. More... | |
enum osmo_auth_algo | osmo_auth_alg_parse (const char *name) |
Parse human-readable name of authentication algorithm. More... | |
static int | milenage_gen_vec (struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *_rand) |
static int | milenage_gen_vec_auts (struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *auts, const uint8_t *rand_auts, const uint8_t *_rand) |
static void | _comp128_compression_round (uint8_t *x, int n, const uint8_t *tbl) |
static void | _comp128_compression (uint8_t *x) |
static void | _comp128_bitsfrombytes (uint8_t *x, uint8_t *bits) |
static void | _comp128_permutation (uint8_t *x, uint8_t *bits) |
void | comp128v1 (const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc) |
Perform COMP128v1 algorithm. More... | |
void | comp128 (const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc) |
Perform COMP128v1 algorithm. More... | |
static void | _comp128v23_internal (uint8_t *output, const uint8_t *kxor, const uint8_t *rand) |
int | comp128v3 (const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc) |
Perform COMP128v3 algorithm. More... | |
int | comp128v2 (const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc) |
Perform COMP128v2 algorithm. More... | |
Variables | |
static struct osmo_auth_impl | c128v1_alg |
static struct osmo_auth_impl | c128v2_alg |
static struct osmo_auth_impl | c128v3_alg |
static struct osmo_auth_impl * | selected_auths [_OSMO_AUTH_ALG_NUM] |
static const struct value_string | auth_alg_vals [] |
static struct osmo_auth_impl | milenage_alg |
static const uint8_t | table_0 [512] |
static const uint8_t | table_1 [256] |
static const uint8_t | table_2 [128] |
static const uint8_t | table_3 [64] |
static const uint8_t | table_4 [32] |
static const uint8_t * | _comp128_table [5] = { table_0, table_1, table_2, table_3, table_4 } |
static const uint8_t | table0 [256] |
static const uint8_t | table1 [256] |
GSM/GPRS/3G authentication core infrastructure.
|
static |
References c128v1_alg, and osmo_auth_register().
Referenced by gsm0808_create_layer3_aoip().
|
inlinestatic |
Referenced by comp128v1().
|
inlinestatic |
References _comp128_compression_round(), and _comp128_table.
Referenced by comp128v1().
|
inlinestatic |
Referenced by _comp128_compression().
|
inlinestatic |
Referenced by comp128v1().
|
static |
References table0, and table1.
Referenced by comp128v3().
|
static |
References comp128v1().
|
static |
References comp128v2().
|
static |
References comp128v3().
|
inlinestatic |
Referenced by osmo_auth_3g_from_2g().
void comp128 | ( | const uint8_t * | ki, |
const uint8_t * | rand, | ||
uint8_t * | sres, | ||
uint8_t * | kc | ||
) |
Perform COMP128v1 algorithm.
[in] | ki | Secret Key K(i) of subscriber |
[in] | rand | Random Challenge |
[out] | sres | user-supplied buffer for storing computed SRES value |
[out] | kc | user-supplied buffer for storing computed Kc value |
References comp128v1().
void comp128v1 | ( | const uint8_t * | ki, |
const uint8_t * | rand, | ||
uint8_t * | sres, | ||
uint8_t * | kc | ||
) |
Perform COMP128v1 algorithm.
[in] | ki | Secret Key K(i) of subscriber |
[in] | rand | Random Challenge |
[out] | sres | user-supplied buffer for storing computed SRES value |
[out] | kc | user-supplied buffer for storing computed Kc value |
References _comp128_bitsfrombytes(), _comp128_compression(), and _comp128_permutation().
Referenced by c128v1_gen_vec(), and comp128().
int comp128v2 | ( | const uint8_t * | ki, |
const uint8_t * | rand, | ||
uint8_t * | sres, | ||
uint8_t * | kc | ||
) |
Perform COMP128v2 algorithm.
[in] | ki | Secret Key K(i) of subscriber |
[in] | rand | Random Challenge |
[out] | sres | user-supplied buffer for storing computed SRES value |
[out] | kc | user-supplied buffer for storing computed Kc value |
References comp128v3().
Referenced by c128v2_gen_vec().
int comp128v3 | ( | const uint8_t * | ki, |
const uint8_t * | rand, | ||
uint8_t * | sres, | ||
uint8_t * | kc | ||
) |
Perform COMP128v3 algorithm.
[in] | ki | Secret Key K(i) of subscriber |
[in] | rand | Random Challenge |
[out] | sres | user-supplied buffer for storing computed SRES value |
[out] | kc | user-supplied buffer for storing computed Kc value |
References _comp128v23_internal().
Referenced by c128v3_gen_vec(), and comp128v2().
|
static |
|
static |
References gsm_milenage(), and milenage_generate().
Referenced by milenage_gen_vec_auts().
|
static |
References milenage_auts(), milenage_gen_vec(), and milenage_opc_gen().
int osmo_auth_3g_from_2g | ( | struct osmo_auth_vector * | vec | ) |
Generate 3G CK + IK from 2G authentication vector.
vec | Authentication Vector to be modified |
This function performs the C5 and C4 functions to derive the UMTS key material from the GSM key material in the supplied vector, if the input vector doesn't yet have UMTS authentication capability.
References c5_function(), and osmo_c4().
const char* osmo_auth_alg_name | ( | enum osmo_auth_algo | alg | ) |
Get human-readable name of authentication algorithm.
References auth_alg_vals.
enum osmo_auth_algo osmo_auth_alg_parse | ( | const char * | name | ) |
Parse human-readable name of authentication algorithm.
References auth_alg_vals.
int osmo_auth_gen_vec | ( | struct osmo_auth_vector * | vec, |
struct osmo_sub_auth_data * | aud, | ||
const uint8_t * | _rand | ||
) |
Generate authentication vector.
[out] | vec | Generated authentication vector |
[in] | aud | Subscriber-specific key material |
[in] | _rand | Random challenge to be used |
This function performs the core cryptographic function of the AUC, computing authentication triples/quintuples based on the permanent subscriber data and a random value. The result is what is forwarded by the AUC via HLR and VLR to the MSC which will then be able to invoke authentication with the MS
References selected_auths.
int osmo_auth_gen_vec_auts | ( | struct osmo_auth_vector * | vec, |
struct osmo_sub_auth_data * | aud, | ||
const uint8_t * | auts, | ||
const uint8_t * | rand_auts, | ||
const uint8_t * | _rand | ||
) |
Generate authentication vector and re-sync sequence.
[out] | vec | Generated authentication vector |
[in] | aud | Subscriber-specific key material |
[in] | auts | AUTS value sent by the SIM/MS |
[in] | rand_auts | RAND value sent by the SIM/MS |
[in] | _rand | Random challenge to be used to generate vector |
This function performs a special variant of the core cryptographic function of the AUC: computing authentication triples/quintuples based on the permanent subscriber data, a random value as well as the AUTS and RAND values returned by the SIM/MS. This special variant is needed if the sequence numbers between MS and AUC have for some reason become different.
References selected_auths.
int osmo_auth_load | ( | const char * | path | ) |
Load all available authentication plugins from the given path.
[in] | path | Path name of the directory containing the plugins |
This function will load all plugins contained in the specified path.
int osmo_auth_register | ( | struct osmo_auth_impl * | impl | ) |
Register an authentication algorithm implementation with the core.
[in] | impl | Structure describing implementation and it's callbacks |
This function is called by an authentication implementation plugin to register itself with the authentication core.
References selected_auths.
Referenced by __attribute__().
int osmo_auth_supported | ( | enum osmo_auth_algo | algo | ) |
Determine if a given authentication algorithm is supported.
[in] | algo | Algorithm which should be checked |
This function is used by an application to determine at runtime if a given authentication algorithm is supported or not.
References selected_auths.
void osmo_c4 | ( | uint8_t * | ck, |
const uint8_t * | kc | ||
) |
Referenced by _a5_3(), gea3(), and osmo_auth_3g_from_2g().
Referenced by _comp128_compression().
|
static |
Referenced by osmo_auth_alg_name(), and osmo_auth_alg_parse().
|
static |
Referenced by __attribute__().
|
static |
Referenced by __attribute__().
|
static |
Referenced by __attribute__().
|
static |
Referenced by __attribute__().
|
static |
Referenced by osmo_auth_gen_vec(), osmo_auth_gen_vec_auts(), osmo_auth_register(), and osmo_auth_supported().
|
static |
Referenced by _comp128v23_internal().
|
static |
Referenced by _comp128v23_internal().
|
static |
|
static |
|
static |
|
static |
|
static |