give more meaningful error if presented with wrong certificate type by server
[openssl.git] / crypto / md4 / md4_dgst.c
index 81488ae2e27d97ee3607fecf59fe6182429c7896..e0962f751f70c1d8e7522cc01461f49a6d79c733 100644 (file)
  */
 
 #include <stdio.h>
-#include "md4_locl.h"
 #include <openssl/opensslv.h>
+#include "md4_locl.h"
 
-const char *MD4_version="MD4" OPENSSL_VERSION_PTEXT;
+const char MD4_version[]="MD4" OPENSSL_VERSION_PTEXT;
 
 /* Implemented from RFC1186 The MD4 Message-Digest Algorithm
  */
@@ -70,130 +70,28 @@ const char *MD4_version="MD4" OPENSSL_VERSION_PTEXT;
 #define INIT_DATA_C (unsigned long)0x98badcfeL
 #define INIT_DATA_D (unsigned long)0x10325476L
 
-void MD4_Init(MD4_CTX *c)
+int MD4_Init(MD4_CTX *c)
        {
+       memset (c,0,sizeof(*c));
        c->A=INIT_DATA_A;
        c->B=INIT_DATA_B;
        c->C=INIT_DATA_C;
        c->D=INIT_DATA_D;
-       c->Nl=0;
-       c->Nh=0;
-       c->num=0;
+       return 1;
        }
 
-#ifndef md4_block_host_order
-void md4_block_host_order (MD4_CTX *c, const void *data, int num)
-       {
-       const MD4_LONG *X=data;
-       register unsigned long A,B,C,D;
-       /*
-        * In case you wonder why A-D are declared as long and not
-        * as MD4_LONG. Doing so results in slight performance
-        * boost on LP64 architectures. The catch is we don't
-        * really care if 32 MSBs of a 64-bit register get polluted
-        * with eventual overflows as we *save* only 32 LSBs in
-        * *either* case. Now declaring 'em long excuses the compiler
-        * from keeping 32 MSBs zeroed resulting in 13% performance
-        * improvement under SPARC Solaris7/64 and 5% under AlphaLinux.
-        * Well, to be honest it should say that this *prevents* 
-        * performance degradation.
-        *
-        *                              <appro@fy.chalmers.se>
-        */
-
-       A=c->A;
-       B=c->B;
-       C=c->C;
-       D=c->D;
-
-       for (;num--;X+=HASH_LBLOCK)
-               {
-       /* Round 0 */
-       R0(A,B,C,D,X[ 0], 3,0);
-       R0(D,A,B,C,X[ 1], 7,0);
-       R0(C,D,A,B,X[ 2],11,0);
-       R0(B,C,D,A,X[ 3],19,0);
-       R0(A,B,C,D,X[ 4], 3,0);
-       R0(D,A,B,C,X[ 5], 7,0);
-       R0(C,D,A,B,X[ 6],11,0);
-       R0(B,C,D,A,X[ 7],19,0);
-       R0(A,B,C,D,X[ 8], 3,0);
-       R0(D,A,B,C,X[ 9], 7,0);
-       R0(C,D,A,B,X[10],11,0);
-       R0(B,C,D,A,X[11],19,0);
-       R0(A,B,C,D,X[12], 3,0);
-       R0(D,A,B,C,X[13], 7,0);
-       R0(C,D,A,B,X[14],11,0);
-       R0(B,C,D,A,X[15],19,0);
-       /* Round 1 */
-       R1(A,B,C,D,X[ 0], 3,0x5A827999L);
-       R1(D,A,B,C,X[ 4], 5,0x5A827999L);
-       R1(C,D,A,B,X[ 8], 9,0x5A827999L);
-       R1(B,C,D,A,X[12],13,0x5A827999L);
-       R1(A,B,C,D,X[ 1], 3,0x5A827999L);
-       R1(D,A,B,C,X[ 5], 5,0x5A827999L);
-       R1(C,D,A,B,X[ 9], 9,0x5A827999L);
-       R1(B,C,D,A,X[13],13,0x5A827999L);
-       R1(A,B,C,D,X[ 2], 3,0x5A827999L);
-       R1(D,A,B,C,X[ 6], 5,0x5A827999L);
-       R1(C,D,A,B,X[10], 9,0x5A827999L);
-       R1(B,C,D,A,X[14],13,0x5A827999L);
-       R1(A,B,C,D,X[ 3], 3,0x5A827999L);
-       R1(D,A,B,C,X[ 7], 5,0x5A827999L);
-       R1(C,D,A,B,X[11], 9,0x5A827999L);
-       R1(B,C,D,A,X[15],13,0x5A827999L);
-       /* Round 2 */
-       R2(A,B,C,D,X[ 0], 3,0x6ED9EBA1);
-       R2(D,A,B,C,X[ 8], 9,0x6ED9EBA1);
-       R2(C,D,A,B,X[ 4],11,0x6ED9EBA1);
-       R2(B,C,D,A,X[12],15,0x6ED9EBA1);
-       R2(A,B,C,D,X[ 2], 3,0x6ED9EBA1);
-       R2(D,A,B,C,X[10], 9,0x6ED9EBA1);
-       R2(C,D,A,B,X[ 6],11,0x6ED9EBA1);
-       R2(B,C,D,A,X[14],15,0x6ED9EBA1);
-       R2(A,B,C,D,X[ 1], 3,0x6ED9EBA1);
-       R2(D,A,B,C,X[ 9], 9,0x6ED9EBA1);
-       R2(C,D,A,B,X[ 5],11,0x6ED9EBA1);
-       R2(B,C,D,A,X[13],15,0x6ED9EBA1);
-       R2(A,B,C,D,X[ 3], 3,0x6ED9EBA1);
-       R2(D,A,B,C,X[11], 9,0x6ED9EBA1);
-       R2(C,D,A,B,X[ 7],11,0x6ED9EBA1);
-       R2(B,C,D,A,X[15],15,0x6ED9EBA1);
-
-       A = c->A += A;
-       B = c->B += B;
-       C = c->C += C;
-       D = c->D += D;
-               }
-       }
-#endif
-
 #ifndef md4_block_data_order
 #ifdef X
 #undef X
 #endif
-void md4_block_data_order (MD4_CTX *c, const void *data_, int num)
+void md4_block_data_order (MD4_CTX *c, const void *data_, size_t num)
        {
        const unsigned char *data=data_;
-       register unsigned long A,B,C,D,l;
-       /*
-        * In case you wonder why A-D are declared as long and not
-        * as MD4_LONG. Doing so results in slight performance
-        * boost on LP64 architectures. The catch is we don't
-        * really care if 32 MSBs of a 64-bit register get polluted
-        * with eventual overflows as we *save* only 32 LSBs in
-        * *either* case. Now declaring 'em long excuses the compiler
-        * from keeping 32 MSBs zeroed resulting in 13% performance
-        * improvement under SPARC Solaris7/64 and 5% under AlphaLinux.
-        * Well, to be honest it should say that this *prevents* 
-        * performance degradation.
-        *
-        *                              <appro@fy.chalmers.se>
-        */
+       register unsigned MD32_REG_T A,B,C,D,l;
 #ifndef MD32_XARRAY
        /* See comment in crypto/sha/sha_locl.h for details. */
-       unsigned long   XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
-                       XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
+       unsigned MD32_REG_T     XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
+                               XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
 # define X(i)  XX##i
 #else
        MD4_LONG XX[MD4_LBLOCK];
@@ -267,19 +165,3 @@ void md4_block_data_order (MD4_CTX *c, const void *data_, int num)
                }
        }
 #endif
-
-#ifdef undef
-int printit(unsigned long *l)
-       {
-       int i,ii;
-
-       for (i=0; i<2; i++)
-               {
-               for (ii=0; ii<8; ii++)
-                       {
-                       fprintf(stderr,"%08lx ",l[i*8+ii]);
-                       }
-               fprintf(stderr,"\n");
-               }
-       }
-#endif