Use define for key buffers

Add corresponding spec. references and comments where appropriate.

Change-Id: If5e2aad86eaecd8eada667b3488ba415d81c6312
This commit is contained in:
Max 2018-12-19 20:12:19 +01:00
parent 6cb833608f
commit af25c37f90
3 changed files with 9 additions and 6 deletions

View File

@ -42,7 +42,7 @@ struct osmo_sub_auth_data {
union {
struct {
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];
uint64_t sqn; /*!< sequence number (in: prev sqn; out: used sqn) */
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 {
uint8_t rand[16]; /*!< random challenge */
uint8_t autn[16]; /*!< authentication nonce */
uint8_t ck[16]; /*!< ciphering key */
uint8_t ik[16]; /*!< integrity key */
uint8_t ck[OSMO_A5_MAX_KEY_LEN_BYTES]; /*!< ciphering key */
uint8_t ik[OSMO_A5_MAX_KEY_LEN_BYTES]; /*!< integrity key */
uint8_t res[16]; /*!< authentication result */
uint8_t res_len; /*!< length (in bytes) of res */
uint8_t kc[8]; /*!< Kc for GSM encryption (A5) */

View File

@ -98,7 +98,7 @@ int osmo_auth_supported(enum osmo_auth_algo algo)
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)
{
unsigned int i;
@ -110,7 +110,7 @@ static inline void c5_function(uint8_t *ik, const uint8_t *kc)
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)
{
memcpy(ck, kc, 8);

View File

@ -23,7 +23,10 @@ static void dump_auth_vec(struct osmo_auth_vector *vec)
if (vec->auth_types & OSMO_AUTH_TYPE_GSM) {
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));
}
}