* cipher.h: Add constants for new SHAs.
[gnupg.git] / mpi / mpiutil.c
index cbbe10d..04e280c 100644 (file)
@@ -1,5 +1,5 @@
 /* mpiutil.ac  -  Utility functions for MPI
- *     Copyright (C) 1998 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -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);
 }
 
@@ -329,7 +383,11 @@ mpi_copy( MPI a )
  * with the same flags as A.
  */
 MPI
+#ifdef M_DEBUG
+mpi_debug_alloc_like( MPI a, const char *info )
+#else
 mpi_alloc_like( MPI a )
+#endif
 {
     MPI b;
 
@@ -340,8 +398,13 @@ mpi_alloc_like( MPI a )
        b = mpi_set_opaque( NULL, p, a->nbits );
     }
     else if( a ) {
+      #ifdef M_DEBUG
+       b = mpi_is_secure(a)? mpi_debug_alloc_secure( a->nlimbs, info )
+                           : mpi_debug_alloc( a->nlimbs, info );
+      #else
        b = mpi_is_secure(a)? mpi_alloc_secure( a->nlimbs )
                            : mpi_alloc( a->nlimbs );
+      #endif
        b->nlimbs = 0;
        b->sign = 0;
        b->flags = a->flags;