mirror of https://gerrit.osmocom.org/libosmocore
Use define for key buffers
Add corresponding spec. references and comments where appropriate. Change-Id: If5e2aad86eaecd8eada667b3488ba415d81c6312
This commit is contained in:
parent
6cb833608f
commit
af25c37f90
|
@ -42,7 +42,7 @@ struct osmo_sub_auth_data {
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
uint8_t opc[16]; /*!< operator invariant value */
|
uint8_t opc[16]; /*!< operator invariant value */
|
||||||
uint8_t k[16]; /*!< secret key of the subscriber */
|
uint8_t k[OSMO_A5_MAX_KEY_LEN_BYTES]; /*!< secret key of the subscriber */
|
||||||
uint8_t amf[2];
|
uint8_t amf[2];
|
||||||
uint64_t sqn; /*!< sequence number (in: prev sqn; out: used sqn) */
|
uint64_t sqn; /*!< sequence number (in: prev sqn; out: used sqn) */
|
||||||
int opc_is_op; /*!< is the OPC field OPC (0) or OP (1) ? */
|
int opc_is_op; /*!< is the OPC field OPC (0) or OP (1) ? */
|
||||||
|
@ -60,8 +60,8 @@ struct osmo_sub_auth_data {
|
||||||
struct osmo_auth_vector {
|
struct osmo_auth_vector {
|
||||||
uint8_t rand[16]; /*!< random challenge */
|
uint8_t rand[16]; /*!< random challenge */
|
||||||
uint8_t autn[16]; /*!< authentication nonce */
|
uint8_t autn[16]; /*!< authentication nonce */
|
||||||
uint8_t ck[16]; /*!< ciphering key */
|
uint8_t ck[OSMO_A5_MAX_KEY_LEN_BYTES]; /*!< ciphering key */
|
||||||
uint8_t ik[16]; /*!< integrity key */
|
uint8_t ik[OSMO_A5_MAX_KEY_LEN_BYTES]; /*!< integrity key */
|
||||||
uint8_t res[16]; /*!< authentication result */
|
uint8_t res[16]; /*!< authentication result */
|
||||||
uint8_t res_len; /*!< length (in bytes) of res */
|
uint8_t res_len; /*!< length (in bytes) of res */
|
||||||
uint8_t kc[8]; /*!< Kc for GSM encryption (A5) */
|
uint8_t kc[8]; /*!< Kc for GSM encryption (A5) */
|
||||||
|
|
|
@ -98,7 +98,7 @@ int osmo_auth_supported(enum osmo_auth_algo algo)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* C5 function to derive UMTS IK from GSM Kc */
|
/* 3GPP TS 33.102 §6.8.2.3 C5 function to derive UMTS IK from GSM Kc */
|
||||||
static inline void c5_function(uint8_t *ik, const uint8_t *kc)
|
static inline void c5_function(uint8_t *ik, const uint8_t *kc)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -110,7 +110,7 @@ static inline void c5_function(uint8_t *ik, const uint8_t *kc)
|
||||||
ik[i] = ik[i-12];
|
ik[i] = ik[i-12];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* C4 function to derive UMTS CK from GSM Kc */
|
/* 3GPP TS 33.102 §6.8.2.3 C4 function to derive UMTS CK from GSM Kc */
|
||||||
void osmo_c4(uint8_t *ck, const uint8_t *kc)
|
void osmo_c4(uint8_t *ck, const uint8_t *kc)
|
||||||
{
|
{
|
||||||
memcpy(ck, kc, 8);
|
memcpy(ck, kc, 8);
|
||||||
|
|
|
@ -23,7 +23,10 @@ static void dump_auth_vec(struct osmo_auth_vector *vec)
|
||||||
|
|
||||||
if (vec->auth_types & OSMO_AUTH_TYPE_GSM) {
|
if (vec->auth_types & OSMO_AUTH_TYPE_GSM) {
|
||||||
printf("SRES:\t%s\n", osmo_hexdump(vec->sres, sizeof(vec->sres)));
|
printf("SRES:\t%s\n", osmo_hexdump(vec->sres, sizeof(vec->sres)));
|
||||||
printf("Kc:\t%s\n", osmo_hexdump(vec->kc, sizeof(vec->kc)));
|
/* According to 3GPP TS 55.205 Sec. 4 the GSM-MILENAGE output is limited to 64 bits.
|
||||||
|
According to 3GPP TS 33.102 Annex. B5 in UMTS security context Kc can be 128 bits.
|
||||||
|
Here we test the former, so make sure we only print interesting Kc bits. */
|
||||||
|
printf("Kc:\t%s\n", osmo_hexdump(vec->kc, OSMO_A5_MAX_KEY_LEN_BYTES/2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue