first take at detecting a random device and seeding the random key using data

from it in randomize_key()
pull/1/head
Daniel Stenberg 18 years ago
parent 7a77f24d26
commit 49fdeb1de4
  1. 16
      ares_init.c
  2. 16
      configure.ac

@ -1276,6 +1276,7 @@ static void natural_mask(struct apattern *pat)
static void randomize_key(unsigned char* key,int key_data_len)
{
int randomized = 0;
int counter=0;
#ifdef WIN32
HMODULE lib=LoadLibrary("ADVAPI32.DLL");
if (lib) {
@ -1286,11 +1287,22 @@ static void randomize_key(unsigned char* key,int key_data_len)
FreeLibrary(lib);
}
#else /* !WIN32 */
#ifdef RANDOM_FILE
char buffer[256];
FILE *f = fopen(RANDOM_FILE, "rb");
if(f) {
size_t i;
size_t rc = fread(buffer, key_data_len, 1, f);
for(i=0; i<rc && counter < key_data_len; i++)
key[counter++]=buffer[i];
fclose(f);
}
#endif
#endif /* WIN32 */
if ( !randomized ) {
int counter;
for (counter=0;counter<key_data_len;counter++)
for (;counter<key_data_len;counter++)
key[counter]=rand() % 256;
}
}

@ -785,4 +785,20 @@ AC_C_BIGENDIAN(
[AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])]
)
dnl Check for user-specified random device
AC_ARG_WITH(random,
AC_HELP_STRING([--with-random=FILE],
[read randomness from FILE (default=/dev/urandom)]),
[ RANDOM_FILE="$withval" ],
[
dnl Check for random device
AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"] )
]
)
if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
AC_SUBST(RANDOM_FILE)
AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE",
[a suitable file/device to read random data from])
fi
AC_OUTPUT(Makefile)

Loading…
Cancel
Save