From 216c04af3d0ae20181e266391d1bdc09c120404c Mon Sep 17 00:00:00 2001 From: Simon Josefsson Date: Tue, 7 Mar 2006 13:17:10 +0000 Subject: [PATCH] Split off gc-random from gc, and only warn on missing devices. --- ChangeLog | 4 +++ lib/ChangeLog | 4 +++ lib/gc-gnulib.c | 20 +++++++++----- lib/gc-libgcrypt.c | 6 +++- m4/ChangeLog | 7 +++++ m4/gc-random.m4 | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ m4/gc.m4 | 75 ++------------------------------------------------ modules/gc-random | 22 +++++++++++++++ 8 files changed, 138 insertions(+), 81 deletions(-) create mode 100644 m4/gc-random.m4 create mode 100644 modules/gc-random diff --git a/ChangeLog b/ChangeLog index 427d9767d..7ace051f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2006-03-07 Simon Josefsson + + * modules/gc-random: New file. + 2006-03-03 Simon Josefsson * build-aux/maint.mk: Add refresh-po rule, based on ideas from diff --git a/lib/ChangeLog b/lib/ChangeLog index b5c8a2476..8e956555d 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2006-03-07 Simon Josefsson + + * gc-libgcrypt.c, gc-gnulib.c: Use GC_USE_RANDOM. + 2006-03-01 Simon Josefsson * readline.c: Fix typo, tiny patch from Stepan Kasal diff --git a/lib/gc-gnulib.c b/lib/gc-gnulib.c index c0fa2e3e2..111c4a19e 100644 --- a/lib/gc-gnulib.c +++ b/lib/gc-gnulib.c @@ -1,5 +1,5 @@ -/* gc-gl-common.c --- Common gnulib internal crypto interface functions - * Copyright (C) 2002, 2003, 2004, 2005 Simon Josefsson +/* gc-gnulib.c --- Common gnulib internal crypto interface functions + * Copyright (C) 2002, 2003, 2004, 2005, 2006 Simon Josefsson * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published @@ -31,11 +31,13 @@ #include /* For randomize. */ -#include -#include -#include -#include -#include +#ifdef GC_USE_RANDOM +# include +# include +# include +# include +# include +#endif /* Hashes. */ #ifdef GC_USE_MD2 @@ -80,6 +82,8 @@ gc_done (void) return; } +#ifdef GC_USE_RANDOM + /* Randomness. */ static Gc_rc @@ -152,6 +156,8 @@ gc_random (char *data, size_t datalen) return randomize (2, data, datalen); } +#endif + /* Memory allocation. */ void diff --git a/lib/gc-libgcrypt.c b/lib/gc-libgcrypt.c index 10841e8d4..a9e6279a2 100644 --- a/lib/gc-libgcrypt.c +++ b/lib/gc-libgcrypt.c @@ -1,5 +1,5 @@ /* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC. - * Copyright (C) 2002, 2003, 2004, 2005 Simon Josefsson + * Copyright (C) 2002, 2003, 2004, 2005, 2006 Simon Josefsson * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published @@ -65,6 +65,8 @@ gc_done (void) return; } +#ifdef GC_USE_RANDOM + /* Randomness. */ Gc_rc @@ -88,6 +90,8 @@ gc_random (char *data, size_t datalen) return GC_OK; } +#endif + /* Memory allocation. */ void diff --git a/m4/ChangeLog b/m4/ChangeLog index 1df2e2a7f..d81b59f01 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,10 @@ +2006-03-07 Simon Josefsson + + * gc-random.m4: New file, mostly from gc.m4. Warn instead of + error on missing devices (the functions will return an error). + + * gc.m4: Move random stuff to gc-random.m4 + 2006-03-03 Ralf Wildenhues (tiny change) * poll.m4 (gl_FUNC_POLL): If we deem poll(2) unacceptable, use diff --git a/m4/gc-random.m4 b/m4/gc-random.m4 new file mode 100644 index 000000000..02cef2165 --- /dev/null +++ b/m4/gc-random.m4 @@ -0,0 +1,81 @@ +# gc-random.m4 serial 1 +dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_GC_RANDOM], +[ + # Devices with randomness. + # FIXME: Are these the best defaults? + + case "${target}" in + *-openbsd*) + NAME_OF_RANDOM_DEVICE="/dev/srandom" + NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/prandom" + NAME_OF_NONCE_DEVICE="/dev/urandom" + ;; + + *-netbsd*) + NAME_OF_RANDOM_DEVICE="/dev/srandom" + NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" + NAME_OF_NONCE_DEVICE="/dev/urandom" + ;; + + *-solaris* | *-irix* | *-dec-osf* ) + NAME_OF_RANDOM_DEVICE="/dev/random" + NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/random" + NAME_OF_NONCE_DEVICE="/dev/random" + ;; + + *) + NAME_OF_RANDOM_DEVICE="/dev/random" + NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" + NAME_OF_NONCE_DEVICE="/dev/urandom" + ;; + esac + + AC_MSG_CHECKING([device with (strong) random data...]) + AC_ARG_ENABLE(random-device, + AC_HELP_STRING([--enable-random-device], + [device with (strong) randomness (for Nettle)]), + test "$enableval" != "no" && NAME_OF_RANDOM_DEVICE=$enableval) + AC_MSG_RESULT($NAME_OF_RANDOM_DEVICE) + + AC_MSG_CHECKING([device with pseudo random data...]) + AC_ARG_ENABLE(pseudo-random-device, + AC_HELP_STRING([--enable-pseudo-random-device], + [device with pseudo randomness (for Nettle)]), + test "$enableval" != "no" && NAME_OF_PSEUDO_RANDOM_DEVICE=$enableval) + AC_MSG_RESULT($NAME_OF_PSEUDO_RANDOM_DEVICE) + + AC_MSG_CHECKING([device with unpredictable data for nonces...]) + AC_ARG_ENABLE(nonce-device, + AC_HELP_STRING([--enable-nonce-device], + [device with unpredictable nonces (for Nettle)]), + test "$enableval" != "no" && NAME_OF_NONCE_DEVICE=$enableval) + AC_MSG_RESULT($NAME_OF_NONCE_DEVICE) + + if test "$cross_compiling" != yes; then + AC_CHECK_FILE($NAME_OF_RANDOM_DEVICE,, + AC_MSG_WARN([[device for (strong) random data `$NAME_OF_RANDOM_DEVICE' does not exist]])) + AC_CHECK_FILE($NAME_OF_PSEUDO_RANDOM_DEVICE,, + AC_MSG_WARN([[device for pseudo-random data `$NAME_OF_PSEUDO_RANDOM_DEVICE' does not exist]])) + AC_CHECK_FILE($NAME_OF_NONCE_DEVICE,, + AC_MSG_WARN([[device for unpredictable nonces `$NAME_OF_NONCE_DEVICE' does not exist]])) + else + AC_MSG_NOTICE([[Cross compiling, assuming random devices exists on the target host...]]) + fi + + # FIXME?: Open+read 42 bytes+close twice and compare data. Should differ. + + AC_DEFINE_UNQUOTED(NAME_OF_RANDOM_DEVICE, "$NAME_OF_RANDOM_DEVICE", + [defined to the name of the (strong) random device]) + AC_DEFINE_UNQUOTED(NAME_OF_PSEUDO_RANDOM_DEVICE, + "$NAME_OF_PSEUDO_RANDOM_DEVICE", + [defined to the name of the pseudo random device]) + AC_DEFINE_UNQUOTED(NAME_OF_NONCE_DEVICE, "$NAME_OF_NONCE_DEVICE", + [defined to the name of the unpredictable nonce device]) + + AC_DEFINE(GC_USE_RANDOM, 1, [Define if you want to support RNG through GC.]) +]) diff --git a/m4/gc.m4 b/m4/gc.m4 index d91147738..e01ae29d6 100644 --- a/m4/gc.m4 +++ b/m4/gc.m4 @@ -1,5 +1,5 @@ -# gc.m4 serial 1 -dnl Copyright (C) 2005 Free Software Foundation, Inc. +# gc.m4 serial 2 +dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -17,77 +17,6 @@ AC_DEFUN([gl_GC], AC_LIBOBJ([gc-libgcrypt]) else AC_LIBOBJ([gc-gnulib]) - - # Devices with randomness. - # FIXME: Are these the best defaults? - - case "${target}" in - *-openbsd*) - NAME_OF_RANDOM_DEVICE="/dev/srandom" - NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/prandom" - NAME_OF_NONCE_DEVICE="/dev/urandom" - ;; - - *-netbsd*) - NAME_OF_RANDOM_DEVICE="/dev/srandom" - NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" - NAME_OF_NONCE_DEVICE="/dev/urandom" - ;; - - *-solaris* | *-irix* | *-dec-osf* ) - NAME_OF_RANDOM_DEVICE="/dev/random" - NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/random" - NAME_OF_NONCE_DEVICE="/dev/random" - ;; - - *) - NAME_OF_RANDOM_DEVICE="/dev/random" - NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" - NAME_OF_NONCE_DEVICE="/dev/urandom" - ;; - esac - - AC_MSG_CHECKING([device with (strong) random data...]) - AC_ARG_ENABLE(random-device, - AC_HELP_STRING([--enable-random-device], - [device with (strong) randomness (for Nettle)]), - test "$enableval" != "no" && NAME_OF_RANDOM_DEVICE=$enableval) - AC_MSG_RESULT($NAME_OF_RANDOM_DEVICE) - - AC_MSG_CHECKING([device with pseudo random data...]) - AC_ARG_ENABLE(pseudo-random-device, - AC_HELP_STRING([--enable-pseudo-random-device], - [device with pseudo randomness (for Nettle)]), - test "$enableval" != "no" && NAME_OF_PSEUDO_RANDOM_DEVICE=$enableval) - AC_MSG_RESULT($NAME_OF_PSEUDO_RANDOM_DEVICE) - - AC_MSG_CHECKING([device with unpredictable data for nonces...]) - AC_ARG_ENABLE(nonce-device, - AC_HELP_STRING([--enable-nonce-device], - [device with unpredictable nonces (for Nettle)]), - test "$enableval" != "no" && NAME_OF_NONCE_DEVICE=$enableval) - AC_MSG_RESULT($NAME_OF_NONCE_DEVICE) - - if test "$cross_compiling" != yes; then - AC_CHECK_FILE($NAME_OF_RANDOM_DEVICE,, - AC_MSG_ERROR([[device for (strong) random data `$NAME_OF_RANDOM_DEVICE' does not exist]])) - AC_CHECK_FILE($NAME_OF_PSEUDO_RANDOM_DEVICE,, - AC_MSG_ERROR([[device for pseudo-random data `$NAME_OF_PSEUDO_RANDOM_DEVICE' does not exist]])) - AC_CHECK_FILE($NAME_OF_NONCE_DEVICE,, - AC_MSG_ERROR([[device for unpredictable nonces `$NAME_OF_NONCE_DEVICE' does not exist]])) - else - AC_MSG_NOTICE([[Cross compiling, assuming random devices exists...]]) - fi - - # FIXME: Open+read 42 bytes+close twice and compare data. Should differ. - - AC_DEFINE_UNQUOTED(NAME_OF_RANDOM_DEVICE, "$NAME_OF_RANDOM_DEVICE", - [defined to the name of the (strong) random device]) - AC_DEFINE_UNQUOTED(NAME_OF_PSEUDO_RANDOM_DEVICE, - "$NAME_OF_PSEUDO_RANDOM_DEVICE", - [defined to the name of the pseudo random device]) - AC_DEFINE_UNQUOTED(NAME_OF_NONCE_DEVICE, "$NAME_OF_NONCE_DEVICE", - [defined to the name of the unpredictable nonce device]) fi ]) diff --git a/modules/gc-random b/modules/gc-random new file mode 100644 index 000000000..f8f8186b8 --- /dev/null +++ b/modules/gc-random @@ -0,0 +1,22 @@ +Description: +Generic crypto random number functions. + +Files: +m4/gc-random.m4 + +Depends-on: +gc + +configure.ac: +gl_GC_RANDOM + +Makefile.am: + +Include: +"gc.h" + +License: +LGPL + +Maintainer: +Simon Josefsson -- 2.11.0