mirror of https://gerrit.osmocom.org/libosmocore
Make C4 function globally available
This function perform 64 -> 128 bit key expansion which useful for converting between UMTS CK and GSM Kc, A5/3 and A5/4, GEA3 and GEA4 keys. Change-Id: I5a6c6deef6027cd6af144c9062d4c9166be26904 Related: OS#1582
This commit is contained in:
parent
b897c42993
commit
ceae123752
|
@ -91,7 +91,7 @@ int osmo_auth_register(struct osmo_auth_impl *impl);
|
|||
int osmo_auth_load(const char *path);
|
||||
|
||||
int osmo_auth_supported(enum osmo_auth_algo algo);
|
||||
|
||||
void osmo_c4(uint8_t *ck, const uint8_t *kc);
|
||||
const char *osmo_auth_alg_name(enum osmo_auth_algo alg);
|
||||
enum osmo_auth_algo osmo_auth_alg_parse(const char *name);
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
|
||||
#include <osmocom/gsm/a5.h>
|
||||
#include <osmocom/gsm/kasumi.h>
|
||||
#include <osmocom/crypt/auth.h>
|
||||
|
||||
/* Somme OS (like Nuttx) don't have ENOTSUP */
|
||||
#ifndef ENOTSUP
|
||||
|
@ -95,8 +96,7 @@ void
|
|||
_a5_3(const uint8_t *key, uint32_t fn, ubit_t *dl, ubit_t *ul, bool fn_correct)
|
||||
{
|
||||
uint8_t ck[16];
|
||||
memcpy(ck, key, 8);
|
||||
memcpy(ck + 8, key, 8);
|
||||
osmo_c4(ck, key);
|
||||
/* internal function require 128 bit key so we expand by concatenating supplied 64 bit key */
|
||||
_a5_4(ck, fn, dl, ul, fn_correct);
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ static inline void c5_function(uint8_t *ik, const uint8_t *kc)
|
|||
}
|
||||
|
||||
/* C4 function to derive UMTS CK from GSM Kc */
|
||||
static inline void c4_function(uint8_t *ck, const uint8_t *kc)
|
||||
void osmo_c4(uint8_t *ck, const uint8_t *kc)
|
||||
{
|
||||
memcpy(ck, kc, 8);
|
||||
memcpy(ck+8, kc, 8);
|
||||
|
@ -125,7 +125,7 @@ int osmo_auth_3g_from_2g(struct osmo_auth_vector *vec)
|
|||
if ((vec->auth_types & OSMO_AUTH_TYPE_GSM) &&
|
||||
!(vec->auth_types & OSMO_AUTH_TYPE_UMTS)) {
|
||||
c5_function(vec->ik, vec->kc);
|
||||
c4_function(vec->ck, vec->kc);
|
||||
osmo_c4(vec->ck, vec->kc);
|
||||
/* We cannot actually set OSMO_AUTH_TYPE_UMTS as we have no
|
||||
* AUTN and no RES, and thus can only perform GSM
|
||||
* authentication with this tuple.
|
||||
|
|
Loading…
Reference in New Issue