<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-msc/+/24763">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ran_msg_a.c: use gsm0808_create_cipher2()<br><br>Use new API in Cipher Mode Command to prepare for A5/4 support.<br><br>Depends: Ib3906085e0c6e5a496a9f755f0f786238a86ca34 (libosmocore)<br>Related: SYS#5324<br>Change-Id: Ib238d367b8d5d07b6ab4cb2e48fbf4ce22ca4476<br>---<br>M TODO-RELEASE<br>M src/libmsc/ran_msg_a.c<br>2 files changed, 17 insertions(+), 13 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/63/24763/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index d0852fc..2297063 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -7,3 +7,4 @@</span><br><span> # If any interfaces have been added since the last public release: c:r:a + 1.</span><br><span> # If any interfaces have been removed or changed since the last public release: c:r:0.</span><br><span> #library     what            description / commit summary line</span><br><span style="color: hsl(120, 100%, 40%);">+libosmocore  >1.5.1               A5/4 support requires new API gsm0808_create_cipher2()</span><br><span>diff --git a/src/libmsc/ran_msg_a.c b/src/libmsc/ran_msg_a.c</span><br><span>index 4cce289..61e5024 100644</span><br><span>--- a/src/libmsc/ran_msg_a.c</span><br><span>+++ b/src/libmsc/ran_msg_a.c</span><br><span>@@ -1058,14 +1058,17 @@</span><br><span>                   gsm0808_encrypt_info_key_fits_osmo_auth_vec_kc);</span><br><span> static struct msgb *ran_a_make_cipher_mode_command(struct osmo_fsm_inst *fi, const struct ran_cipher_mode_command *cm)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      struct gsm0808_encrypt_info ei = {};</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gsm0808_cipher_mode_command cmc = {</span><br><span style="color: hsl(120, 100%, 40%);">+            .cipher_response_mode_present = true,</span><br><span style="color: hsl(120, 100%, 40%);">+         .cipher_response_mode = 1, /* 1: include IMEISV (3GPP TS 48.008 3.2.2.34) */</span><br><span style="color: hsl(120, 100%, 40%);">+  };</span><br><span style="color: hsl(120, 100%, 40%);">+    struct gsm0808_encrypt_info *ei = &cmc.ei;</span><br><span>       char buf[16 * 2 + 1];</span><br><span style="color: hsl(0, 100%, 40%);">-   const uint8_t cipher_response_mode = 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (make_encrypt_info_perm_algo(fi, &ei, cm->geran.a5_encryption_mask, cm->classmark))</span><br><span style="color: hsl(120, 100%, 40%);">+      if (make_encrypt_info_perm_algo(fi, ei, cm->geran.a5_encryption_mask, cm->classmark))</span><br><span>          return NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (ei.perm_algo_len == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+  if (ei->perm_algo_len == 0) {</span><br><span>             LOG_RAN_A_ENC(fi, LOGL_ERROR, "cannot start ciphering, no intersection between MSC-configured"</span><br><span>                            " and MS-supported A5 algorithms. MSC: 0x%02x  MS: %s\n",</span><br><span>                          cm->geran.a5_encryption_mask, osmo_gsm48_classmark_a5_name(cm->classmark));</span><br><span>@@ -1076,26 +1079,26 @@</span><br><span>    * tokens.  vec->kc was calculated from the GSM algorithm and is not</span><br><span>       * necessarily a match for the UMTS AKA tokens. */</span><br><span>   if (cm->geran.umts_aka)</span><br><span style="color: hsl(0, 100%, 40%);">-              osmo_auth_c3(ei.key, cm->vec->ck, cm->vec->ik);</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_auth_c3(ei->key, cm->vec->ck, cm->vec->ik);</span><br><span>      else</span><br><span style="color: hsl(0, 100%, 40%);">-            memcpy(ei.key, cm->vec->kc, sizeof(cm->vec->kc));</span><br><span style="color: hsl(0, 100%, 40%);">-   ei.key_len = sizeof(cm->vec->kc);</span><br><span style="color: hsl(120, 100%, 40%);">+               memcpy(ei->key, cm->vec->kc, sizeof(cm->vec->kc));</span><br><span style="color: hsl(120, 100%, 40%);">+     ei->key_len = sizeof(cm->vec->kc);</span><br><span> </span><br><span>      /* Store chosen GERAN key where the caller asked it to be stored.</span><br><span>     * alg_id remains unknown until we receive a Cipher Mode Complete from the BSC */</span><br><span>    if (cm->geran.chosen_key) {</span><br><span style="color: hsl(0, 100%, 40%);">-          if (ei.key_len > sizeof(cm->geran.chosen_key->key)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (ei->key_len > sizeof(cm->geran.chosen_key->key)) {</span><br><span>                   LOG_RAN_A_ENC(fi, LOGL_ERROR, "Chosen key is larger than I can store\n");</span><br><span>                  return NULL;</span><br><span>                 }</span><br><span style="color: hsl(0, 100%, 40%);">-               memcpy(cm->geran.chosen_key->key, ei.key, ei.key_len);</span><br><span style="color: hsl(0, 100%, 40%);">-            cm->geran.chosen_key->key_len = ei.key_len;</span><br><span style="color: hsl(120, 100%, 40%);">+             memcpy(cm->geran.chosen_key->key, ei->key, ei->key_len);</span><br><span style="color: hsl(120, 100%, 40%);">+          cm->geran.chosen_key->key_len = ei->key_len;</span><br><span>        }</span><br><span> </span><br><span>        LOG_RAN_A_ENC(fi, LOGL_DEBUG, "Tx BSSMAP CIPHER MODE COMMAND to BSC, %u ciphers (%s) key %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      ei.perm_algo_len, osmo_hexdump_nospc(ei.perm_algo, ei.perm_algo_len),</span><br><span style="color: hsl(0, 100%, 40%);">-                   osmo_hexdump_buf(buf, sizeof(buf), ei.key, ei.key_len, NULL, false));</span><br><span style="color: hsl(0, 100%, 40%);">-    return gsm0808_create_cipher(&ei, cm->geran.retrieve_imeisv ? &cipher_response_mode : NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+                      ei->perm_algo_len, osmo_hexdump_nospc(ei->perm_algo, ei->perm_algo_len),</span><br><span style="color: hsl(120, 100%, 40%);">+                     osmo_hexdump_buf(buf, sizeof(buf), ei->key, ei->key_len, NULL, false));</span><br><span style="color: hsl(120, 100%, 40%);">+  return gsm0808_create_cipher2(&cmc);</span><br><span> }</span><br><span> </span><br><span> struct msgb *ran_a_make_handover_request(struct osmo_fsm_inst *log_fi, const struct ran_handover_request *n)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-msc/+/24763">change 24763</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-msc/+/24763"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ib238d367b8d5d07b6ab4cb2e48fbf4ce22ca4476 </div>
<div style="display:none"> Gerrit-Change-Number: 24763 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>