]> git.saurik.com Git - apt.git/blobdiff - ftparchive/cachedb.cc
add sha512 support to apt-ftparchive
[apt.git] / ftparchive / cachedb.cc
index b04244347f4bd258a0d593712a91287fc52eaafc..699718e57b8c935efb78a2620092371a20c8fba0 100644 (file)
@@ -17,6 +17,7 @@
 #include <apt-pkg/md5.h>
 #include <apt-pkg/sha1.h>
 #include <apt-pkg/sha256.h>
+#include <apt-pkg/sha512.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/configuration.h>
     
@@ -162,7 +163,8 @@ bool CacheDB::GetCurStat()
 // ---------------------------------------------------------------------
 bool CacheDB::GetFileInfo(string const &FileName, bool const &DoControl, bool const &DoContents,
                                bool const &GenContentsOnly, bool const &DoMD5, bool const &DoSHA1,
-                               bool const &DoSHA256, bool const &checkMtime)
+                               bool const &DoSHA256,   bool const &DoSHA512, 
+                          bool const &checkMtime)
 {
        this->FileName = FileName;
 
@@ -190,7 +192,9 @@ bool CacheDB::GetFileInfo(string const &FileName, bool const &DoControl, bool co
                || (DoContents && LoadContents(GenContentsOnly) == false)
                || (DoMD5 && GetMD5(false) == false)
                || (DoSHA1 && GetSHA1(false) == false)
-               || (DoSHA256 && GetSHA256(false) == false))
+               || (DoSHA256 && GetSHA256(false) == false)
+               || (DoSHA512 && GetSHA512(false) == false)
+           )
        {
                delete Fd;
                Fd = NULL;
@@ -412,6 +416,37 @@ bool CacheDB::GetSHA256(bool const &GenOnly)
    return true;
 }
                                                                        /*}}}*/
+// CacheDB::GetSHA256 - Get the SHA256 hash                            /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::GetSHA512(bool const &GenOnly)
+{
+   // Try to read the control information out of the DB.
+   if ((CurStat.Flags & FlSHA512) == FlSHA512)
+   {
+      if (GenOnly == true)
+        return true;
+
+      SHA512Res = bytes2hex(CurStat.SHA512, sizeof(CurStat.SHA512));
+      return true;
+   }
+   
+   Stats.SHA512Bytes += CurStat.FileSize;
+        
+   if (Fd == NULL && OpenFile() == false)
+   {
+      return false;
+   }
+   SHA512Summation SHA512;
+   if (Fd->Seek(0) == false || SHA512.AddFD(Fd->Fd(),CurStat.FileSize) == false)
+      return false;
+   
+   SHA512Res = SHA512.Result();
+   hex2bytes(CurStat.SHA512, SHA512Res.data(), sizeof(CurStat.SHA512));
+   CurStat.Flags |= FlSHA512;
+   return true;
+}
+                                                                       /*}}}*/
 // CacheDB::Finish - Write back the cache structure                    /*{{{*/
 // ---------------------------------------------------------------------
 /* */