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/.
Max gerrit-no-reply at lists.osmocom.orgHello Harald Welte, Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/1526
to look at the new patch set (#2).
Add osmo_rand() function
Add osmo_rand() as a tiny wrapper around corresponding GnuTLS function
and use it for osmo-auc-gen tool (with fallback to weak random numbers
used previously).
Change-Id: I0241b814ea4c4ce1458f7ad76e31d390383c2048
Related: OS#1694
---
M configure.ac
M debian/control
M include/osmocom/gsm/gsm_utils.h
M src/gsm/Makefile.am
M src/gsm/gsm_utils.c
M src/gsm/libosmogsm.map
M tests/Makefile.am
M utils/osmo-auc-gen.c
8 files changed, 36 insertions(+), 13 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/26/1526/2
diff --git a/configure.ac b/configure.ac
index ec03c26..cf4e868 100644
--- a/configure.ac
+++ b/configure.ac
@@ -35,6 +35,10 @@
fi
PKG_PROG_PKG_CONFIG([0.20])
+PKG_CHECK_MODULES(LIBGNUTLS, gnutls >= 3.3.0)
+AC_SUBST(LIBGNUTLS_CFLAGS)
+AC_SUBST(LIBGNUTLS_LIBS)
+
dnl check os: some linker flags not available on osx
case $host in
*-darwin*)
diff --git a/debian/control b/debian/control
index 4cdb672..d61fdd3 100644
--- a/debian/control
+++ b/debian/control
@@ -12,6 +12,7 @@
git,
doxygen,
libpcsclite-dev,
+ libgnutls28-dev,
pkg-config,
libtalloc-dev,
python (>= 2.7.6)
diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h
index 1ffe579..b41f992 100644
--- a/include/osmocom/gsm/gsm_utils.h
+++ b/include/osmocom/gsm/gsm_utils.h
@@ -103,6 +103,8 @@
*/
int gsm_7bit_encode_n_ussd(uint8_t *result, size_t n, const char *data, int *octets_written);
+int osmo_rand(uint8_t *out, size_t len);
+
/* the four functions below are helper functions and here for the unit test */
int gsm_septets2octets(uint8_t *result, const uint8_t *rdata, uint8_t septet_len, uint8_t padding);
int gsm_septet_encode(uint8_t *result, const char *data);
diff --git a/src/gsm/Makefile.am b/src/gsm/Makefile.am
index 4ec441f..92da071 100644
--- a/src/gsm/Makefile.am
+++ b/src/gsm/Makefile.am
@@ -3,7 +3,7 @@
# before making any modifications: https://www.gnu.org/software/libtool/manual/html_node/Versioning.html
LIBVERSION=7:0:1
-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include $(TALLOC_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include $(TALLOC_CFLAGS) $(LIBGNUTLS_CFLAGS)
AM_CFLAGS = -Wall ${GCC_FVISIBILITY_HIDDEN}
# FIXME: this should eventually go into a milenage/Makefile.am
@@ -24,11 +24,11 @@
milenage/aes-internal.c milenage/aes-internal-enc.c \
milenage/milenage.c gan.c ipa.c gsm0341.c apn.c \
gsup.c gprs_gea.c gsm0503_conv.c oap.c
-libgsmint_la_LDFLAGS = -no-undefined
+libgsmint_la_LDFLAGS = $(LIBGNUTLS_LIBS) -no-undefined
libgsmint_la_LIBADD = $(top_builddir)/src/libosmocore.la
libosmogsm_la_SOURCES =
-libosmogsm_la_LDFLAGS = $(LTLDFLAGS_OSMOGSM) -version-info $(LIBVERSION) -no-undefined $(TALLOC_LIBS)
+libosmogsm_la_LDFLAGS = $(LTLDFLAGS_OSMOGSM) -version-info $(LIBVERSION) -no-undefined $(TALLOC_LIBS) $(LIBGNUTLS_LIBS)
libosmogsm_la_LIBADD = libgsmint.la
EXTRA_DIST = libosmogsm.map
diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c
index 7365ab7..e0f9e3d 100644
--- a/src/gsm/gsm_utils.c
+++ b/src/gsm/gsm_utils.c
@@ -77,6 +77,9 @@
#include <errno.h>
#include <ctype.h>
+#include <gnutls/gnutls.h>
+#include <gnutls/crypto.h>
+
#include "../../config.h"
/* ETSI GSM 03.38 6.2.1 and 6.2.1.1 default alphabet
@@ -662,6 +665,16 @@
return arfcn;
}
+/*! \brief Generate random bytes
+ * \param[out] out Buffer to be filled with random data
+ * \param[in] len Number of random bytes required
+ * \returns Zero on success, or a negative error code on error.
+ */
+int osmo_rand(uint8_t *out, size_t len)
+{
+ return gnutls_rnd(GNUTLS_RND_KEY, out, len);
+}
+
void gsm_fn2gsmtime(struct gsm_time *time, uint32_t fn)
{
time->fn = fn;
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index a3d224f..1c3046b 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -26,6 +26,7 @@
osmo_sitype_strs;
osmo_c4;
+osmo_rand;
bitvec_add_range1024;
comp128;
dbm2rxlev;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b9eb8f2..743e42a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,6 +1,6 @@
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
AM_CFLAGS = -Wall $(TALLOC_CFLAGS)
-AM_LDFLAGS = $(TALLOC_LIBS)
+AM_LDFLAGS = $(TALLOC_LIBS) $(LIBGNUTLS_LIBS)
check_PROGRAMS = timer/timer_test sms/sms_test ussd/ussd_test \
smscb/smscb_test bits/bitrev_test a5/a5_test \
diff --git a/utils/osmo-auc-gen.c b/utils/osmo-auc-gen.c
index 3b3e557..99341a8 100644
--- a/utils/osmo-auc-gen.c
+++ b/utils/osmo-auc-gen.c
@@ -33,6 +33,7 @@
#include <osmocom/crypt/auth.h>
#include <osmocom/core/utils.h>
+#include <osmocom/gsm/gsm_utils.h>
static void dump_triplets_dat(struct osmo_auth_vector *vec)
{
@@ -214,17 +215,18 @@
}
}
- if (!rand_is_set) {
- int i;
- printf("WARNING: We're using really weak random numbers!\n\n");
- srand(time(NULL));
+ if (!rand_is_set)
+ if (osmo_rand(_rand, 16) < 0) {
+ int i;
+ printf("WARNING: We're using really weak random numbers!\n\n");
+ srand(time(NULL));
- for (i = 0; i < 4; ++i) {
- uint32_t r;
- r = rand();
- memcpy(&_rand[i*4], &r, 4);
+ for (i = 0; i < 4; ++i) {
+ uint32_t r;
+ r = rand();
+ memcpy(&_rand[i*4], &r, 4);
+ }
}
- }
if (test_aud.type == OSMO_AUTH_TYPE_NONE ||
test_aud.algo == OSMO_AUTH_ALG_NONE) {
--
To view, visit https://gerrit.osmocom.org/1526
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I0241b814ea4c4ce1458f7ad76e31d390383c2048
Gerrit-PatchSet: 2
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>