See ChangeLog: Tue Jun 1 16:01:46 CEST 1999 Werner Koch
authorWerner Koch <wk@gnupg.org>
Tue, 1 Jun 1999 14:08:55 +0000 (14:08 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 1 Jun 1999 14:08:55 +0000 (14:08 +0000)
acconfig.h
cipher/rndlinux.c
configure.in
mpi/ChangeLog
mpi/config.links
mpi/mpiutil.c

index e3b4f29..de4e44f 100644 (file)
@@ -70,6 +70,9 @@
 /* and the real names of the random devices */
 #undef NAME_OF_DEV_RANDOM
 #undef NAME_OF_DEV_URANDOM
+/* Linux has an ioctl */
+#undef HAVE_DEV_RANDOM_IOCTL
+
 
 #undef USE_DYNAMIC_LINKING
 #undef HAVE_DL_DLOPEN
index 8c591fb..78fee15 100644 (file)
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
+#if 0
+  #ifdef HAVE_LINUX_RANDOM_H
+    #include <sys/ioctl.h>
+    #include <asm/types.h>
+    #include <linux/random.h>
+  #endif
+#endif
 #include "types.h"
 #include "util.h"
 #include "ttyio.h"
@@ -48,6 +55,19 @@ static int open_device( const char *name, int minor );
 static int gather_random( void (*add)(const void*, size_t, int), int requester,
                                          size_t length, int level );
 
+#if 0
+#ifdef HAVE_DEV_RANDOM_IOCTL
+static ulong
+get_entropy_count( int fd )
+{
+    ulong count;
+
+    if( ioctl( fd, RNDGETENTCNT, &count ) == -1 )
+       g10_log_fatal("ioctl(RNDGETENTCNT) failed: %s\n", strerror(errno) );
+    return count;
+}
+#endif
+#endif
 
 /****************
  * Used to open the Linux and xBSD /dev/random devices
@@ -91,6 +111,11 @@ gather_random( void (*add)(const void*, size_t, int), int requester,
        fd = fd_urandom;
     }
 
+  #if 0
+  #ifdef HAVE_DEV_RANDOM_IOCTL
+    g10_log_info("entropy count of %d is %lu\n", fd, get_entropy_count(fd) );
+  #endif
+  #endif
     while( length ) {
        fd_set rfds;
        struct timeval tv;
index a67516c..2faf657 100644 (file)
@@ -330,20 +330,40 @@ if test "$ac_cv_header_sys_shm_h" = "yes"; then
   AC_DEFINE(USE_SHM_COPROCESSING)
 fi
 
+dnl
 dnl check whether we have a random device
+dnl
 if test "$try_dev_random" = yes ; then
-AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
-[if test -c "$NAME_OF_DEV_RANDOM" && test -c "$NAME_OF_DEV_URANDOM" ; then
-  ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
-if test "$ac_cv_have_dev_random" = yes; then
-    AC_DEFINE(HAVE_DEV_RANDOM)
-fi
+    AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
+    [if test -c "$NAME_OF_DEV_RANDOM" && test -c "$NAME_OF_DEV_URANDOM" ; then
+      ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
+    if test "$ac_cv_have_dev_random" = yes; then
+        AC_DEFINE(HAVE_DEV_RANDOM)
+    fi
 else
     AC_MSG_CHECKING(for random device)
     ac_cv_have_dev_random=no
     AC_MSG_RESULT(has been disabled)
 fi
 
+dnl
+dnl and whether this device supports ioctl
+dnl (Note, that we should do a real test here)
+dnl
+if test "$ac_cv_have_dev_random" = yes ; then
+    AC_CHECK_HEADERS(linux/random.h)
+    AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl,
+      [ if test "$ac_cv_header_linux_random_h" = yes ; then
+          ac_cv_have_dev_random_ioctl=yes;
+        else
+          ac_cv_have_dev_random_ioctl=no;
+        fi
+      ])
+    if test "$ac_cv_have_dev_random_ioctl" = yes; then
+        AC_DEFINE(HAVE_DEV_RANDOM_IOCTL)
+    fi
+fi
+
 
 dnl
 dnl Figure out the default linkage mode for cipher modules
index db2d702..959f3b4 100644 (file)
@@ -1,3 +1,7 @@
+Tue Jun  1 16:01:46 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * config.links (i[56]86*-*-freebsdelf*): New.
+
 Sun May 23 14:20:22 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
        * config.links (sysdep.h): Not any more conditionally created.
index 4caf2b8..376d42b 100644 (file)
@@ -12,12 +12,12 @@ echo '/* created by config.links - do not edit */' >./mpi/asm-syntax.h
 
 if test "$try_asm_modules" = "yes" ; then
 case "${target}" in
-    i[34]86*-*-freebsd*-elf | i[34]86*-*-freebsd[34]*)
+    i[34]86*-*-freebsd*-elf | i[34]86*-*-freebsd[34]* | i[34]86*-*-freebsdelf*)
        echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
        cat  $srcdir/mpi/i386/syntax.h     >>./mpi/asm-syntax.h
        path="i386"
        ;;
-    i[56]86*-*-freebsd*-elf | i[56]86*-*-freebsd[34]*)
+    i[56]86*-*-freebsd*-elf | i[56]86*-*-freebsd[34]* | i[56]86*-*-freebsdelf*)
        echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
        cat  $srcdir/mpi/i386/syntax.h     >>./mpi/asm-syntax.h
        path="i586 i386"
index cbbe10d..62cb882 100644 (file)
@@ -103,6 +103,12 @@ mpi_alloc_secure( unsigned nlimbs )
 }
 
 
+#if 0
+static void *unused_limbs_5;
+static void *unused_limbs_32;
+static void *unused_limbs_64;
+#endif
+
 mpi_ptr_t
 #ifdef M_DEBUG
 mpi_debug_alloc_limb_space( unsigned nlimbs, int secure, const char *info )
@@ -111,14 +117,37 @@ mpi_alloc_limb_space( unsigned nlimbs, int secure )
 #endif
 {
     size_t len = nlimbs * sizeof(mpi_limb_t);
+    mpi_ptr_t p;
 
     if( DBG_MEMORY )
        log_debug("mpi_alloc_limb_space(%u)\n", (unsigned)len*8 );
+  #if 0
+    if( !secure ) {
+       if( nlimbs == 5 && unused_limbs_5 ) {  /* DSA 160 bits */
+           p = unused_limbs_5;
+           unused_limbs_5 = *p;
+           return p;
+       }
+       else if( nlimbs == 32 && unused_limbs_32 ) {  /* DSA 1024 bits */
+           p = unused_limbs_32;
+           unused_limbs_32 = *p;
+           return p;
+       }
+       else if( nlimbs == 64 && unused_limbs_64 ) {  /* DSA 2*1024 bits */
+           p = unused_limbs_64;
+           unused_limbs_64 = *p;
+           return p;
+       }
+    }
+  #endif
+
   #ifdef M_DEBUG
-    return secure? m_debug_alloc_secure(len, info):m_debug_alloc( len, info );
+    p = secure? m_debug_alloc_secure(len, info):m_debug_alloc( len, info );
   #else
-    return secure? m_alloc_secure( len ):m_alloc( len );
+    p = secure? m_alloc_secure( len ):m_alloc( len );
   #endif
+
+    return p;
 }
 
 void
@@ -132,6 +161,31 @@ mpi_free_limb_space( mpi_ptr_t a )
        return;
     if( DBG_MEMORY )
        log_debug("mpi_free_limb_space of size %lu\n", (ulong)m_size(a)*8 );
+
+  #if 0
+    if( !m_is_secure(a) ) {
+       size_t nlimbs = m_size(a) / 4 ;
+       void *p = a;
+
+       if( nlimbs == 5 ) {  /* DSA 160 bits */
+           *a = unused_limbs_5;
+           unused_limbs_5 = a;
+           return;
+       }
+       else if( nlimbs == 32 ) {  /* DSA 1024 bits */
+           *a = unused_limbs_32;
+           unused_limbs_32 = a;
+           return;
+       }
+       else if( nlimbs == 64 ) {  /* DSA 2*1024 bits */
+           *a = unused_limbs_64;
+           unused_limbs_64 = a;
+           return;
+       }
+    }
+  #endif
+
+
     m_free(a);
 }