first take at detecting a random device and seeding the random key using data
from it in randomize_key()
This commit is contained in:
parent
2faba57c85
commit
6a674ded0e
@ -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…
x
Reference in New Issue
Block a user