diff options
| author | Max <msuraev@sysmocom.de> | 2016-06-27 18:12:49 +0200 | 
|---|---|---|
| committer | Harald Welte <laforge@gnumonks.org> | 2016-06-29 16:32:55 +0000 | 
| commit | ceae1237528f91f44e226225207ac70a2cf842ec (patch) | |
| tree | b459272cadfdafe853f6a08e2532669d0fd3e3cb | |
| parent | b897c4299329688bb0aba6e32cd10b361bda1dee (diff) | |
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
| -rw-r--r-- | include/osmocom/crypt/auth.h | 2 | ||||
| -rw-r--r-- | src/gsm/a5.c | 4 | ||||
| -rw-r--r-- | src/gsm/auth_core.c | 4 | 
3 files changed, 5 insertions, 5 deletions
diff --git a/include/osmocom/crypt/auth.h b/include/osmocom/crypt/auth.h index bed48e78..37b8a8ad 100644 --- a/include/osmocom/crypt/auth.h +++ b/include/osmocom/crypt/auth.h @@ -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); diff --git a/src/gsm/a5.c b/src/gsm/a5.c index f1fd697e..dbba0f20 100644 --- a/src/gsm/a5.c +++ b/src/gsm/a5.c @@ -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);  } diff --git a/src/gsm/auth_core.c b/src/gsm/auth_core.c index f1ec2ed4..3aac0694 100644 --- a/src/gsm/auth_core.c +++ b/src/gsm/auth_core.c @@ -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.  | 
