X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/408a4726131e9db26ff868623a5d216a26c45a50..fce9f472046344d15d4f4df281a003d837cf4177:/apt-pkg/contrib/hashes.h

diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h
index b09ea9f6b..0a8bcd259 100644
--- a/apt-pkg/contrib/hashes.h
+++ b/apt-pkg/contrib/hashes.h
@@ -16,11 +16,53 @@
 
 #include <apt-pkg/md5.h>
 #include <apt-pkg/sha1.h>
-#include <apt-pkg/sha256.h>
+#include <apt-pkg/sha2.h>
+#include <apt-pkg/fileutl.h>
 
 #include <algorithm>
+#include <vector>
+#include <cstring>
 
+
+#ifndef APT_8_CLEANER_HEADERS
 using std::min;
+using std::vector;
+#endif
+
+// helper class that contains hash function name
+// and hash
+class HashString
+{
+ protected:
+   std::string Type;
+   std::string Hash;
+   static const char* _SupportedHashes[10];
+
+   // internal helper
+   std::string GetHashForFile(std::string filename) const;
+
+ public:
+   HashString(std::string Type, std::string Hash);
+   HashString(std::string StringedHashString);  // init from str as "type:hash"
+   HashString();
+
+   // get hash type used
+   std::string HashType() { return Type; };
+
+   // verify the given filename against the currently loaded hash
+   bool VerifyFile(std::string filename) const;
+
+   // generate a hash string from the given filename
+   bool FromFile(std::string filename);
+
+
+   // helper
+   std::string toStr() const;                    // convert to str as "type:hash"
+   bool empty() const;
+
+   // return the list of hashes we support
+   static const char** SupportedHashes();
+};
 
 class Hashes
 {
@@ -29,13 +71,21 @@ class Hashes
    MD5Summation MD5;
    SHA1Summation SHA1;
    SHA256Summation SHA256;
+   SHA512Summation SHA512;
    
-   inline bool Add(const unsigned char *Data,unsigned long Size)
+   inline bool Add(const unsigned char *Data,unsigned long long Size)
    {
-      return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.Add(Data,Size);
+      return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.Add(Data,Size) && SHA512.Add(Data,Size);
    };
    inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
+   inline bool AddFD(int const Fd,unsigned long long Size = 0)
+   { return AddFD(Fd, Size, true, true, true, true); };
+   bool AddFD(int const Fd, unsigned long long Size, bool const addMD5,
+	      bool const addSHA1, bool const addSHA256, bool const addSHA512);
+   inline bool AddFD(FileFd &Fd,unsigned long long Size = 0)
+   { return AddFD(Fd, Size, true, true, true, true); };
+   bool AddFD(FileFd &Fd, unsigned long long Size, bool const addMD5,
+	      bool const addSHA1, bool const addSHA256, bool const addSHA512);
    inline bool Add(const unsigned char *Beg,const unsigned char *End) 
                   {return Add(Beg,End-Beg);};
 };