laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/33090 )

 (

4 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
 )Change subject: osmo-auc-gen: Convert over to osmo_auth_gen_vec*2 API
......................................................................

osmo-auc-gen: Convert over to osmo_auth_gen_vec*2 API

This allows the tool to support K/OPc lengths != 128 bit.

Let's add more length checks of command-line arguments while we're
adding those checks for K/OPc.

Change-Id: Iffed02ec0fc9c9a996da6f218d67314e381cbb29
---
M utils/osmo-auc-gen.c
1 file changed, 47 insertions(+), 4 deletions(-)

Approvals:
  fixeria: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified




diff --git a/utils/osmo-auc-gen.c b/utils/osmo-auc-gen.c
index e3e1b43..86abeda 100644
--- a/utils/osmo-auc-gen.c
+++ b/utils/osmo-auc-gen.c
@@ -1,7 +1,7 @@
 /*! \file osmo-auc-gen.c
  * GSM/GPRS/3G authentication testing tool. */
 /*
- * (C) 2010-2021 by Harald Welte <[email protected]>
+ * (C) 2010-2023 by Harald Welte <[email protected]>
  *
  * All Rights Reserved
  *
@@ -80,7 +80,7 @@
        }
 }

-static struct osmo_sub_auth_data test_aud = {
+static struct osmo_sub_auth_data2 test_aud = {
        .type = OSMO_AUTH_TYPE_NONE,
        .algo = OSMO_AUTH_ALG_NONE,
 };
@@ -174,10 +174,21 @@
                        case OSMO_AUTH_TYPE_GSM:
                                rc = osmo_hexparse(optarg, test_aud.u.gsm.ki,
                                                   sizeof(test_aud.u.gsm.ki));
+                               if (rc != sizeof(test_aud.u.gsm.ki)) {
+                                       fprintf(stderr, "Invalid Ki length 
%d\n", rc);
+                                       exit(2);
+                               }
                                break;
                        case OSMO_AUTH_TYPE_UMTS:
                                rc = osmo_hexparse(optarg, test_aud.u.umts.k,
                                                   sizeof(test_aud.u.umts.k));
+                               /* 3GPP TS 33.102 6.3.7: "The authentication 
key (K) shall have a length of
+                                * 128 bits or 256 bits." */
+                               if (rc != 16 && rc != 32) {
+                                       fprintf(stderr, "Invalid K length 
%d\n", rc);
+                                       exit(2);
+                               }
+                               test_aud.u.umts.k_len = rc;
                                break;
                        default:
                                fprintf(stderr, "please specify 2g/3g 
first!\n");
@@ -190,6 +201,11 @@
                        }
                        rc = osmo_hexparse(optarg, test_aud.u.umts.opc,
                                           sizeof(test_aud.u.umts.opc));
+                       if (rc != 16 && rc != 32) {
+                               fprintf(stderr, "Invalid OPC length %d\n", rc);
+                               exit(2);
+                       }
+                       test_aud.u.umts.opc_len = rc;
                        test_aud.u.umts.opc_is_op = 0;
                        break;
                case 'O':
@@ -199,6 +215,11 @@
                        }
                        rc = osmo_hexparse(optarg, test_aud.u.umts.opc,
                                           sizeof(test_aud.u.umts.opc));
+                       if (rc != 16 && rc != 32) {
+                               fprintf(stderr, "Invalid OP length %d\n", rc);
+                               exit(2);
+                       }
+                       test_aud.u.umts.opc_len = rc;
                        test_aud.u.umts.opc_is_op = 1;
                        break;
                case 'A':
@@ -216,6 +237,10 @@
                        }
                        rc = osmo_hexparse(optarg, test_aud.u.umts.amf,
                                           sizeof(test_aud.u.umts.amf));
+                       if (rc != 2) {
+                               fprintf(stderr, "Invalid AMF length %d\n", rc);
+                               exit(2);
+                       }
                        break;
                case 's':
                        if (test_aud.type != OSMO_AUTH_TYPE_UMTS) {
@@ -242,6 +267,10 @@
                        break;
                case 'r':
                        rc = osmo_hexparse(optarg, _rand, sizeof(_rand));
+                       if (rc != sizeof(_rand)) {
+                               fprintf(stderr, "Invalid RAND length %d\n", rc);
+                               exit(2);
+                       }
                        rand_is_set = 1;
                        break;
                case 'I':
@@ -316,9 +345,9 @@
        }

        if (!auts_is_set)
-               rc = osmo_auth_gen_vec(vec, &test_aud, _rand);
+               rc = osmo_auth_gen_vec2(vec, &test_aud, _rand);
        else
-               rc = osmo_auth_gen_vec_auts(vec, &test_aud, _auts, _rand, 
_rand);
+               rc = osmo_auth_gen_vec_auts2(vec, &test_aud, _auts, _rand, 
_rand);
        if (rc < 0) {
                if (!auts_is_set)
                        fprintf(stderr, "error generating auth vector\n");

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/33090
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Iffed02ec0fc9c9a996da6f218d67314e381cbb29
Gerrit-Change-Number: 33090
Gerrit-PatchSet: 6
Gerrit-Owner: laforge <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to