PR: 1422
[oweals/openssl.git] / crypto / md2 / md2_dgst.c
index 608baefa8f34d44da25c3a30b4f78c70c9600c81..cc4eeaf7a7ad5c759fcec3a6c516c6ee65b5cc91 100644 (file)
 #include <string.h>
 #include <openssl/md2.h>
 #include <openssl/opensslv.h>
+#include <openssl/crypto.h>
+#ifdef OPENSSL_FIPS
+#include <openssl/fips.h>
+#endif
 
-const char *MD2_version="MD2" OPENSSL_VERSION_PTEXT;
+#include <openssl/err.h>
+
+const char MD2_version[]="MD2" OPENSSL_VERSION_PTEXT;
 
 /* Implemented from RFC1319 The MD2 Message-Digest Algorithm
  */
@@ -115,19 +121,20 @@ const char *MD2_options(void)
                return("md2(int)");
        }
 
-void MD2_Init(MD2_CTX *c)
+FIPS_NON_FIPS_MD_Init(MD2)
        {
        c->num=0;
-       memset(c->state,0,MD2_BLOCK*sizeof(MD2_INT));
-       memset(c->cksm,0,MD2_BLOCK*sizeof(MD2_INT));
-       memset(c->data,0,MD2_BLOCK);
+       memset(c->state,0,sizeof c->state);
+       memset(c->cksm,0,sizeof c->cksm);
+       memset(c->data,0,sizeof c->data);
+       return 1;
        }
 
-void MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len)
+int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len)
        {
        register UCHAR *p;
 
-       if (len == 0) return;
+       if (len == 0) return 1;
 
        p=c->data;
        if (c->num != 0)
@@ -143,10 +150,10 @@ void MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len)
                        }
                else
                        {
-                       memcpy(&(p[c->num]),data,(int)len);
+                       memcpy(&(p[c->num]),data,len);
                        /* data+=len; */
                        c->num+=(int)len;
-                       return;
+                       return 1;
                        }
                }
        /* we now can process the input data in blocks of MD2_BLOCK
@@ -157,8 +164,9 @@ void MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len)
                data+=MD2_BLOCK;
                len-=MD2_BLOCK;
                }
-       memcpy(p,data,(int)len);
+       memcpy(p,data,len);
        c->num=(int)len;
+       return 1;
        }
 
 static void md2_block(MD2_CTX *c, const unsigned char *d)
@@ -194,10 +202,10 @@ static void md2_block(MD2_CTX *c, const unsigned char *d)
                t=(t+i)&0xff;
                }
        memcpy(sp1,state,16*sizeof(MD2_INT));
-       memset(state,0,48*sizeof(MD2_INT));
+       OPENSSL_cleanse(state,48*sizeof(MD2_INT));
        }
 
-void MD2_Final(unsigned char *md, MD2_CTX *c)
+int MD2_Final(unsigned char *md, MD2_CTX *c)
        {
        int i,v;
        register UCHAR *cp;
@@ -219,5 +227,6 @@ void MD2_Final(unsigned char *md, MD2_CTX *c)
        for (i=0; i<16; i++)
                md[i]=(UCHAR)(p1[i]&0xff);
        memset((char *)&c,0,sizeof(c));
+       return 1;
        }