summaryrefslogtreecommitdiffstats
path: root/src/gsm
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-07-05 16:06:28 +0200
committerHarald Welte <laforge@gnumonks.org>2016-07-07 12:55:46 +0000
commitfdca25dfb881871ffb4142bd1bcd808c71e6c4e3 (patch)
tree33d0ef8f6f217d71e815c2cea51f842c31d0333b /src/gsm
parentae3b78076e580b6060cde2e4612b8bcf459de832 (diff)
Add function to check GMM encryptability
Check if particular GMM message can be encrypted according to 3GPP TS 24.008 § 4.7.1.2 Related: OS#1582 Change-Id: I7ad0e03c2c738d174dd6bc3453f332eeb8da1e7d
Diffstat (limited to 'src/gsm')
-rw-r--r--src/gsm/gsm48.c25
-rw-r--r--src/gsm/libosmogsm.map1
2 files changed, 26 insertions, 0 deletions
diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c
index 8a46f769..b4740cf0 100644
--- a/src/gsm/gsm48.c
+++ b/src/gsm/gsm48.c
@@ -35,6 +35,7 @@
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/gsm/protocol/gsm_08_58.h>
+#include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
const struct tlv_definition gsm48_att_tlvdef = {
.def = {
@@ -302,6 +303,30 @@ static void to_bcd(uint8_t *bcd, uint16_t val)
val = val / 10;
}
+/*! \brief Checks is particular message is cipherable in A/Gb mode according to
+ * 3GPP TS 24.008 § 4.7.1.2
+ * \param[in] hdr Message header
+ * \return true if message can be encrypted, false otherwise
+ */
+bool gsm48_hdr_gmm_cipherable(const struct gsm48_hdr *hdr)
+{
+ switch(hdr->msg_type) {
+ case GSM48_MT_GMM_ATTACH_REQ:
+ case GSM48_MT_GMM_ATTACH_REJ:
+ case GSM48_MT_GMM_AUTH_CIPH_REQ:
+ case GSM48_MT_GMM_AUTH_CIPH_RESP:
+ case GSM48_MT_GMM_AUTH_CIPH_REJ:
+ case GSM48_MT_GMM_AUTH_CIPH_FAIL:
+ case GSM48_MT_GMM_ID_REQ:
+ case GSM48_MT_GMM_ID_RESP:
+ case GSM48_MT_GMM_RA_UPD_REQ:
+ case GSM48_MT_GMM_RA_UPD_REJ:
+ return false;
+ default:
+ return true;
+ }
+}
+
/* Convert given mcc and mnc to BCD and write to *bcd_dst, which must be an
* allocated buffer of (at least) 3 bytes length. */
void gsm48_mcc_mnc_to_bcd(uint8_t *bcd_dst, uint16_t mcc, uint16_t mnc)
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index 19ebb5b3..c68cf2a5 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -124,6 +124,7 @@ gsm48_att_tlvdef;
gsm48_cc_msg_name;
gsm48_cc_state_name;
gsm48_construct_ra;
+gsm48_hdr_gmm_cipherable;
gsm48_decode_bcd_number;
gsm48_decode_bearer_cap;
gsm48_decode_called;