Converted all m_free to xfree etc.
[gnupg.git] / cipher / random.c
index 8b750a7..1ae2e80 100644 (file)
@@ -1,5 +1,6 @@
 /* random.c  - random number generator
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002,
+ *               2003 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -15,7 +16,8 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
  */
 
 
 #include <errno.h>
 #include <string.h>
 #include <time.h>
+#ifndef _WIN32
 #include <sys/time.h>
+#endif
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>
-#ifdef HAVE_GETHRTIME
-  #include <sys/times.h>
+#ifdef HAVE_GETHRTIME
+#include <sys/times.h>
 #endif
 #ifdef HAVE_GETTIMEOFDAY
-  #include <sys/times.h>
+#include <sys/times.h>
+#endif
+#ifdef HAVE_TIMES
+#include <sys/times.h>
 #endif
 #ifdef HAVE_GETRUSAGE
-  #include <sys/resource.h>
+#include <sys/resource.h>
 #endif
-#ifdef __MINGW32__
-  #include <process.h>
+#ifdef _WIN32
+#include <process.h>
 #endif
 #include "util.h"
 #include "rmd.h"
 #include "algorithms.h"
 
 #ifndef RAND_MAX   /* for SunOS */
-  #define RAND_MAX 32767
+#define RAND_MAX 32767
 #endif
 
 
 #if SIZEOF_UNSIGNED_LONG == 8
-  #define ADD_VALUE 0xa5a5a5a5a5a5a5a5
+#define ADD_VALUE 0xa5a5a5a5a5a5a5a5
 #elif SIZEOF_UNSIGNED_LONG == 4
-  #define ADD_VALUE 0xa5a5a5a5
+#define ADD_VALUE 0xa5a5a5a5
 #else
-  #error weird size for an unsigned long
+#error weird size for an unsigned long
 #endif
 
 #define BLOCKLEN  64   /* hash this amount of bytes */
@@ -81,7 +88,7 @@
 #define POOLBLOCKS 30
 #define POOLSIZE (POOLBLOCKS*DIGESTLEN)
 #if (POOLSIZE % SIZEOF_UNSIGNED_LONG)
-  #error Please make sure that poolsize is a multiple of ulong
+#error Please make sure that poolsize is a multiple of ulong
 #endif
 #define POOLWORDS (POOLSIZE / SIZEOF_UNSIGNED_LONG)
 
@@ -136,7 +143,7 @@ getfnc_gather_random (void))(void (*)(const void*, size_t, int), int,
     return fnc;
 # ifdef USE_RNDLINUX
   if ( !access (NAME_OF_DEV_RANDOM, R_OK)
-       && !access (NAME_OF_DEV_RANDOM, R_OK))
+       && !access (NAME_OF_DEV_URANDOM, R_OK))
     {
       fnc = rndlinux_gather_random;
       return fnc;
@@ -176,7 +183,7 @@ getfnc_gather_random (void))(void (*)(const void*, size_t, int), int,
   return NULL;
 }
 
-static void (*
+static int (*
 getfnc_fast_random_poll (void))( void (*)(const void*, size_t, int), int)
 {
 #ifdef USE_RNDW32
@@ -193,10 +200,10 @@ initialize(void)
     /* The data buffer is allocated somewhat larger, so that
      * we can use this extra space (which is allocated in secure memory)
      * as a temporary hash buffer */
-    rndpool = secure_alloc ? m_alloc_secure_clear(POOLSIZE+BLOCKLEN)
-                          : m_alloc_clear(POOLSIZE+BLOCKLEN);
-    keypool = secure_alloc ? m_alloc_secure_clear(POOLSIZE+BLOCKLEN)
-                          : m_alloc_clear(POOLSIZE+BLOCKLEN);
+    rndpool = secure_alloc ? xmalloc_secure_clear(POOLSIZE+BLOCKLEN)
+                          : xmalloc_clear(POOLSIZE+BLOCKLEN);
+    keypool = secure_alloc ? xmalloc_secure_clear(POOLSIZE+BLOCKLEN)
+                          : xmalloc_clear(POOLSIZE+BLOCKLEN);
     is_initialized = 1;
 }
 
@@ -224,7 +231,7 @@ random_dump_stats()
 }
 
 void
-secure_random_alloc()
+secure_randoxmalloc()
 {
     secure_alloc = 1;
 }
@@ -253,7 +260,7 @@ randomize_buffer( byte *buffer, size_t length, int level )
 {
     char *p = get_random_bits( length*8, level, 1 );
     memcpy( buffer, p, length );
-    m_free(p);
+    xfree(p);
 }
 
 
@@ -288,7 +295,7 @@ get_random_bits( size_t nbits, int level, int secure )
        rndstats.ngetbytes2++;
     }
 
-    buf = secure && secure_alloc ? m_alloc_secure( nbytes ) : m_alloc( nbytes );
+    buf = secure && secure_alloc ? xmalloc_secure( nbytes ) : xmalloc( nbytes );
     for( p = buf; nbytes > 0; ) {
        size_t n = nbytes > POOLSIZE? POOLSIZE : nbytes;
        read_pool( p, n, level );
@@ -312,7 +319,7 @@ mix_pool(byte *pool)
 
     rmd160_init( &md );
 #if DIGESTLEN != 20
-    #error must have a digest length of 20 for ripe-md-160
+#error must have a digest length of 20 for ripe-md-160
 #endif
     /* loop over the pool */
     pend = pool + POOLSIZE;
@@ -349,7 +356,7 @@ set_random_seed_file( const char *name )
 {
     if( seed_file_name )
        BUG();
-    seed_file_name = m_strdup( name );
+    seed_file_name = xstrdup( name );
 }
 
 /****************
@@ -613,7 +620,7 @@ random_poll()
 void
 fast_random_poll()
 {
-    static void (*fnc)( void (*)(const void*, size_t, int), int) = NULL;
+    static int (*fnc)( void (*)(const void*, size_t, int), int) = NULL;
     static int initialized = 0;
 
     rndstats.fastpolls++;
@@ -629,41 +636,40 @@ fast_random_poll()
     }
 
     /* fall back to the generic function */
-  #if defined(HAVE_GETHRTIME) && !defined(HAVE_BROKEN_GETHRTIME)
+#if defined(HAVE_GETHRTIME) && !defined(HAVE_BROKEN_GETHRTIME)
     {  hrtime_t tv;
         /* On some Solaris and HPUX system gethrtime raises an SIGILL, but we 
          * checked this with configure */
        tv = gethrtime();
        add_randomness( &tv, sizeof(tv), 1 );
     }
-  #elif defined (HAVE_GETTIMEOFDAY)
+#elif defined (HAVE_GETTIMEOFDAY)
     {  struct timeval tv;
        if( gettimeofday( &tv, NULL ) )
            BUG();
        add_randomness( &tv.tv_sec, sizeof(tv.tv_sec), 1 );
        add_randomness( &tv.tv_usec, sizeof(tv.tv_usec), 1 );
     }
-  #elif defined (HAVE_CLOCK_GETTIME)
+#elif defined (HAVE_CLOCK_GETTIME)
     {  struct timespec tv;
        if( clock_gettime( CLOCK_REALTIME, &tv ) == -1 )
            BUG();
        add_randomness( &tv.tv_sec, sizeof(tv.tv_sec), 1 );
        add_randomness( &tv.tv_nsec, sizeof(tv.tv_nsec), 1 );
     }
-  #else /* use times */
-    #ifndef HAVE_DOSISH_SYSTEM
+#elif defined (HAVE_TIMES)
     {  struct tms buf;
-       times( &buf );
+        if( times( &buf ) == -1 )
+           BUG();
        add_randomness( &buf, sizeof buf, 1 );
     }
-    #endif
-  #endif
-  #ifdef HAVE_GETRUSAGE
-    #ifndef RUSAGE_SELF
-      #ifdef __GCC__
-       #warning There is no RUSAGE_SELF on this system
-      #endif
-    #else
+#endif
+#ifdef HAVE_GETRUSAGE
+#ifndef RUSAGE_SELF
+#ifdef __GCC__
+#warning There is no RUSAGE_SELF on this system
+#endif
+#else
     {  struct rusage buf;
         /* QNX/Neutrino does return ENOSYS - so we just ignore it and
          * add whatever is in buf.  In a chroot environment it might not
@@ -675,8 +681,8 @@ fast_random_poll()
        add_randomness( &buf, sizeof buf, 1 );
        wipememory( &buf, sizeof buf );
     }
-    #endif
-  #endif
+#endif
+#endif
     /* time and clock are available on all systems - so
      * we better do it just in case one of the above functions
      * didn't work */
@@ -725,25 +731,23 @@ gather_faked( void (*add)(const void*, size_t, int), int requester,
                   "it run - it is in no way a strong RNG!\n\n"
                   "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n\n"));
        initialized=1;
-      #ifdef HAVE_RAND
+#ifdef HAVE_RAND
        srand(make_timestamp()*getpid());
-      #else
+#else
        srandom(make_timestamp()*getpid());
-      #endif
+#endif
     }
 
-    p = buffer = m_alloc( length );
+    p = buffer = xmalloc( length );
     n = length;
-  #ifdef HAVE_RAND
+#ifdef HAVE_RAND
     while( n-- )
        *p++ = ((unsigned)(1 + (int) (256.0*rand()/(RAND_MAX+1.0)))-1);
-  #else
+#else
     while( n-- )
        *p++ = ((unsigned)(1 + (int) (256.0*random()/(RAND_MAX+1.0)))-1);
-  #endif
+#endif
     add_randomness( buffer, length, requester );
-    m_free(buffer);
+    xfree(buffer);
     return 0; /* okay */
 }
-
-