]> git.decadent.org.uk Git - dak.git/blobdiff - tools/dsync-0.0/libdsync/contrib/md5.h
Added another tool used in dak (and placed nowhere else), dsync
[dak.git] / tools / dsync-0.0 / libdsync / contrib / md5.h
diff --git a/tools/dsync-0.0/libdsync/contrib/md5.h b/tools/dsync-0.0/libdsync/contrib/md5.h
new file mode 100644 (file)
index 0000000..6fb39ad
--- /dev/null
@@ -0,0 +1,75 @@
+// -*- mode: cpp; mode: fold -*-
+// Description                                                         /*{{{*/
+// $Id: md5.h,v 1.4 1999/10/24 06:53:12 jgg Exp $
+/* ######################################################################
+   
+   MD5SumValue - Storage for a MD5Sum
+   MD5Summation - MD5 Message Digest Algorithm.
+   
+   This is a C++ interface to a set of MD5Sum functions. The class can
+   store a MD5Sum in 16 bytes of memory.
+   
+   A MD5Sum is used to generate a (hopefully) unique 16 byte number for a
+   block of data. This can be used to gaurd against corruption of a file.
+   MD5 should not be used for tamper protection, use SHA or something more
+   secure.
+   
+   There are two classes because computing a MD5 is not a continual 
+   operation unless 64 byte blocks are used. Also the summation requires an
+   extra 18*4 bytes to operate.
+   
+   ##################################################################### */
+                                                                       /*}}}*/
+#ifndef APTPKG_MD5_H
+#define APTPKG_MD5_H
+
+#ifdef __GNUG__
+#pragma interface "dsync/md5.h"
+#endif 
+
+#include <string>
+using namespace std;
+
+class MD5Summation;
+
+class MD5SumValue
+{
+   friend class MD5Summation;
+   unsigned char Sum[4*4];
+   
+   public:
+
+   // Accessors
+   bool operator ==(const MD5SumValue &rhs) const; 
+   string Value() const;
+   inline void Value(unsigned char S[16]) 
+         {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
+   inline operator string() const {return Value();};
+   bool Set(string Str);
+   inline void Set(unsigned char S[16]) 
+         {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
+
+   MD5SumValue(string Str);
+   MD5SumValue();
+};
+
+class MD5Summation
+{
+   unsigned char Buf[4*4];
+   unsigned char Bytes[2*4];
+   unsigned char In[16*4];
+   bool Done;
+   
+   public:
+
+   bool Add(const unsigned char *Data,unsigned long Size);
+   inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
+   bool AddFD(int Fd,unsigned long Size);
+   inline bool Add(const unsigned char *Beg,const unsigned char *End) 
+                  {return Add(Beg,End-Beg);};
+   MD5SumValue Result();
+   
+   MD5Summation();
+};
+
+#endif