Commit 6a674ded authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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

from it in randomize_key()
parent 2faba57c
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -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;
  }
}
+16 −0
Original line number Diff line number Diff line
@@ -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)