summaryrefslogtreecommitdiff
path: root/apt-pkg/contrib
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2007-08-03 11:27:47 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2007-08-03 11:27:47 +0200
commitc3279b9d100fb62f412267512458b58dda40f95b (patch)
tree9af2a695fd7f789090ce8cba959d7241db07497c /apt-pkg/contrib
parent5aa5a030bb4f2d46a30526377c5309dc20dbe2af (diff)
parent2c941d896911dca364b3d38dc593f3bf6847f3e5 (diff)
(ABI break)
* merged apt--sha256 branch to fully support the new sha256 checksums in the Packages and Release files (ABI break)
Diffstat (limited to 'apt-pkg/contrib')
-rw-r--r--apt-pkg/contrib/hashes.cc84
-rw-r--r--apt-pkg/contrib/hashes.h30
2 files changed, 114 insertions, 0 deletions
diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc
index b725e9418..fcc2f887c 100644
--- a/apt-pkg/contrib/hashes.cc
+++ b/apt-pkg/contrib/hashes.cc
@@ -12,11 +12,95 @@
/*}}}*/
// Include Files /*{{{*/
#include <apt-pkg/hashes.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/configuration.h>
#include <unistd.h>
#include <system.h>
+#include <string>
+#include <iostream>
/*}}}*/
+const char* HashString::_SupportedHashes[] =
+{
+ "SHA256", "SHA1", "MD5Sum", NULL
+};
+
+HashString::HashString()
+{
+}
+
+HashString::HashString(string Type, string Hash) : Type(Type), Hash(Hash)
+{
+}
+
+HashString::HashString(string StringedHash)
+{
+ // legacy: md5sum without "MD5Sum:" prefix
+ if (StringedHash.find(":") == string::npos && StringedHash.size() == 32)
+ {
+ Type = "MD5Sum";
+ Hash = StringedHash;
+ return;
+ }
+ string::size_type pos = StringedHash.find(":");
+ Type = StringedHash.substr(0,pos);
+ Hash = StringedHash.substr(pos+1, StringedHash.size() - pos);
+
+ if(_config->FindB("Debug::Hashes",false) == true)
+ std::clog << "HashString(string): " << Type << " : " << Hash << std::endl;
+}
+
+
+bool HashString::VerifyFile(string filename) const
+{
+ FileFd fd;
+ MD5Summation MD5;
+ SHA1Summation SHA1;
+ SHA256Summation SHA256;
+ string fileHash;
+
+ FileFd Fd(filename, FileFd::ReadOnly);
+ if(Type == "MD5Sum")
+ {
+ MD5.AddFD(Fd.Fd(), Fd.Size());
+ fileHash = (string)MD5.Result();
+ }
+ else if (Type == "SHA1")
+ {
+ SHA1.AddFD(Fd.Fd(), Fd.Size());
+ fileHash = (string)SHA1.Result();
+ }
+ else if (Type == "SHA256")
+ {
+ SHA256.AddFD(Fd.Fd(), Fd.Size());
+ fileHash = (string)SHA256.Result();
+ }
+ Fd.Close();
+
+ if(_config->FindB("Debug::Hashes",false) == true)
+ std::clog << "HashString::VerifyFile: got: " << fileHash << " expected: " << toStr() << std::endl;
+
+ return (fileHash == Hash);
+}
+
+const char** HashString::SupportedHashes()
+{
+ return _SupportedHashes;
+}
+
+bool HashString::empty() const
+{
+ return (Type.empty() || Hash.empty());
+}
+
+
+string HashString::toStr() const
+{
+ return Type+string(":")+Hash;
+}
+
+
// Hashes::AddFD - Add the contents of the FD /*{{{*/
// ---------------------------------------------------------------------
/* */
diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h
index b09ea9f6b..93e7b25d9 100644
--- a/apt-pkg/contrib/hashes.h
+++ b/apt-pkg/contrib/hashes.h
@@ -19,8 +19,38 @@
#include <apt-pkg/sha256.h>
#include <algorithm>
+#include <vector>
using std::min;
+using std::vector;
+
+// helper class that contains hash function name
+// and hash
+class HashString
+{
+ protected:
+ string Type;
+ string Hash;
+ static const char * _SupportedHashes[10];
+
+ public:
+ HashString(string Type, string Hash);
+ HashString(string StringedHashString); // init from str as "type:hash"
+ HashString();
+
+ // get hash type used
+ string HashType() { return Type; };
+
+ // verify the given filename against the currently loaded hash
+ bool VerifyFile(string filename) const;
+
+ // helper
+ 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
{