* md.c (load_digest_module): Enlarged checked_algos bitmap.
authorWerner Koch <wk@gnupg.org>
Sat, 23 Nov 2002 11:40:36 +0000 (11:40 +0000)
committerWerner Koch <wk@gnupg.org>
Sat, 23 Nov 2002 11:40:36 +0000 (11:40 +0000)
* md4.c (func_table):  Fixed entry for md4.
Both by Simon Josephson.
(transform): Copy data to get the alignment straight. Tested only
on i386.

cipher/ChangeLog
cipher/md.c
cipher/md4.c

index 01c4126..692aee2 100644 (file)
@@ -1,3 +1,11 @@
+2002-11-23  Werner Koch  <wk@gnupg.org>
+
+       * md.c (load_digest_module): Enlarged checked_algos bitmap.
+       * md4.c (func_table):  Fixed entry for md4. 
+       Both by Simon Josephson.
+       (transform): Copy data to get the alignment straight. Tested only
+       on i386.
+
 2002-11-10  Simon Josefsson  <jas@extundo.com>
 
        * cipher.c (gcry_cipher_open): Don't reject CTS flag.
index 4f41a7a..ebfcdcd 100644 (file)
@@ -145,7 +145,7 @@ static int
 load_digest_module( int req_algo )
 {
     static int initialized = 0;
-    static u32 checked_algos[256/32];
+    static u32 checked_algos[512/32];
     static int checked_all = 0;
     struct md_digest_list_s *r;
     void *context = NULL;
@@ -161,7 +161,7 @@ load_digest_module( int req_algo )
        initialized = 1;
     }
     algo = req_algo;
-    if( algo > 255 || !algo )
+    if( algo > 511 || !algo )
        return 0; /* algorithm number too high (does not fit into out bitmap)*/
     if( checked_all )
        return 0; /* already called with -1 */
index f34456a..d649f68 100644 (file)
@@ -96,23 +96,21 @@ burn_stack (int bytes)
 
 
 /****************
- * transform n*64 bytes
+ * transform 64 bytes
  */
 static void
-/*transform( MD4_CONTEXT *ctx, const void *buffer, size_t len )*/
 transform( MD4_CONTEXT *ctx, byte *data )
 {
-    u32 correct_words[16];
+    u32 in[16];
     register u32 A = ctx->A;
     register u32 B = ctx->B;
     register u32 C = ctx->C;
     register u32 D = ctx->D;
-    u32 *cwp = correct_words;
 
 #ifdef BIG_ENDIAN_HOST
     { int i;
       byte *p2, *p1;
-      for(i=0, p1=data, p2=(byte*)correct_words; i < 16; i++, p2 += 4 ) {
+      for(i=0, p1=data, p2=(byte*)in; i < 16; i++, p2 += 4 ) {
        p2[3] = *p1++;
        p2[2] = *p1++;
        p2[1] = *p1++;
@@ -120,11 +118,11 @@ transform( MD4_CONTEXT *ctx, byte *data )
       }
     }
 #else
-    memcpy( correct_words, data, 64 );
+    memcpy (in, data, 64);
 #endif
 
     /* Round 1.  */
-#define function(a,b,c,d,k,s) a=rol(a+F(b,c,d)+data[k],s);
+#define function(a,b,c,d,k,s) a=rol(a+F(b,c,d)+in[k],s);
           function(A,B,C,D, 0, 3);
           function(D,A,B,C, 1, 7);
           function(C,D,A,B, 2,11);
@@ -145,7 +143,7 @@ transform( MD4_CONTEXT *ctx, byte *data )
 #undef function
 
     /* Round 2.  */
-#define function(a,b,c,d,k,s) a=rol(a+G(b,c,d)+data[k]+0x5a827999,s);
+#define function(a,b,c,d,k,s) a=rol(a+G(b,c,d)+in[k]+0x5a827999,s);
 
           function(A,B,C,D, 0, 3);
           function(D,A,B,C, 4, 5);
@@ -167,7 +165,7 @@ transform( MD4_CONTEXT *ctx, byte *data )
 #undef function
 
     /* Round 3.  */
-#define function(a,b,c,d,k,s) a=rol(a+H(b,c,d)+data[k]+0x6ed9eba1,s);
+#define function(a,b,c,d,k,s) a=rol(a+H(b,c,d)+in[k]+0x6ed9eba1,s);
 
           function(A,B,C,D, 0, 3);
           function(D,A,B,C, 8, 9);
@@ -354,7 +352,7 @@ static struct {
     void (*func)(void);
 } func_table[] = {
     { 10, 1, 0, (void(*)(void))md4_get_info },
-    { 11, 1, 1 },
+    { 11, 1, 301 },
 };