[PATCH] libosmocore[master]: libgsm crypt/auth.h: implement c3 function (3GPP TS 33.102)

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Tue Jan 31 14:34:43 UTC 2017


Review at  https://gerrit.osmocom.org/1714

libgsm crypt/auth.h: implement c3 function (3GPP TS 33.102)

Declare osmo_c3() in crypt/auth.h, implement in gsm/auth_core.c, all next to
osmo_c4(). Publish in libosmogsm.map for use in VLR and HLR. Will be used for
UMTS auth on GSM networks.

Change-Id: I87855316749b0350774795c8e200fc82604dea59
---
M include/osmocom/crypt/auth.h
M src/gsm/auth_core.c
M src/gsm/libosmogsm.map
3 files changed, 17 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/14/1714/1

diff --git a/include/osmocom/crypt/auth.h b/include/osmocom/crypt/auth.h
index 37b8a8a..58bd71e 100644
--- a/include/osmocom/crypt/auth.h
+++ b/include/osmocom/crypt/auth.h
@@ -91,6 +91,7 @@
 int osmo_auth_load(const char *path);
 
 int osmo_auth_supported(enum osmo_auth_algo algo);
+void osmo_c3(uint8_t *kc, const uint8_t *ck, const uint8_t *ik)
 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/auth_core.c b/src/gsm/auth_core.c
index 3aac069..6cb96ef 100644
--- a/src/gsm/auth_core.c
+++ b/src/gsm/auth_core.c
@@ -105,6 +105,21 @@
 		ik[i] = ik[i-12];
 }
 
+/*! \brief C3 function to derive GSM Kc from UMTS CK+IK
+ *         (as defined in 3GPP TS 33.102 6.8.1.2).
+ * The c3 function converts UMTS key material to GSM keys to be able to use
+ * UMTS authentication on a GSM network. See 3GPP TS 33.102 6.8.1.1.
+ * \param kc[out]  8 byte buffer to return the derived GSM Kc.
+ * \param ck[in]   16 byte buffer holding UMTS CK.
+ * \param ik[in]   16 byte buffer holding UMTS IK.
+ */
+void osmo_c3(uint8_t *kc, const uint8_t *ck, const uint8_t *ik)
+{
+	unsigned int i;
+	for (i = 0; i < 8; i++)
+		kc[i] = ck[i] ^ ck[i + 8] ^ ik[i] ^ ik[i + 8];
+}
+
 /* C4 function to derive UMTS CK from GSM Kc */
 void osmo_c4(uint8_t *ck, const uint8_t *kc)
 {
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index e153d72..8add3ec 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -31,6 +31,7 @@
 abis_nm_pcause_type_names;
 
 osmo_sitype_strs;
+osmo_c3;
 osmo_c4;
 bitvec_add_range1024;
 comp128;

-- 
To view, visit https://gerrit.osmocom.org/1714
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I87855316749b0350774795c8e200fc82604dea59
Gerrit-PatchSet: 1
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list