string PkgFile = Parse.FileName();
if (ForceHash.empty() == false)
{
++ if(stringcasecmp(ForceHash, "sha512") == 0)
++ ExpectedHash = HashString("SHA512", Parse.SHA512Hash());
if(stringcasecmp(ForceHash, "sha256") == 0)
ExpectedHash = HashString("SHA256", Parse.SHA256Hash());
else if (stringcasecmp(ForceHash, "sha1") == 0)
else
{
string Hash;
-- if ((Hash = Parse.SHA256Hash()).empty() == false)
++ if ((Hash = Parse.SHA512Hash()).empty() == false)
++ ExpectedHash = HashString("SHA512", Hash);
++ else if ((Hash = Parse.SHA256Hash()).empty() == false)
ExpectedHash = HashString("SHA256", Hash);
else if ((Hash = Parse.SHA1Hash()).empty() == false)
ExpectedHash = HashString("SHA1", Hash);
End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str());
if (Res.SHA256Sum.empty() == false)
End += snprintf(End,sizeof(S)-50 - (End - S),"SHA256-Hash: %s\n",Res.SHA256Sum.c_str());
++ if (Res.SHA512Sum.empty() == false)
++ End += snprintf(End,sizeof(S)-50 - (End - S),"SHA512-Hash: %s\n",Res.SHA512Sum.c_str());
if (UsedMirror.empty() == false)
End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
if (Res.GPGVOutput.size() > 0)
if (Alt->SHA256Sum.empty() == false)
End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-SHA256-Hash: %s\n",
Alt->SHA256Sum.c_str());
--
++ if (Alt->SHA512Sum.empty() == false)
++ End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-SHA512-Hash: %s\n",
++ Alt->SHA512Sum.c_str());
++
if (Alt->IMSHit == true)
strcat(End,"Alt-IMS-Hit: true\n");
}
MD5Sum = Hash.MD5.Result();
SHA1Sum = Hash.SHA1.Result();
SHA256Sum = Hash.SHA256.Result();
++ SHA512Sum = Hash.SHA512.Result();
}
/*}}}*/
string MD5Sum;
string SHA1Sum;
string SHA256Sum;
++ string SHA512Sum;
vector<string> GPGVOutput;
time_t LastModified;
bool IMSHit;
const char* HashString::_SupportedHashes[] =
{
-- "SHA256", "SHA1", "MD5Sum", NULL
++ "SHA512", "SHA256", "SHA1", "MD5Sum", NULL
};
HashString::HashString()
MD5Summation MD5;
SHA1Summation SHA1;
SHA256Summation SHA256;
++ SHA256Summation SHA512;
string fileHash;
FileFd Fd(filename, FileFd::ReadOnly);
SHA256.AddFD(Fd.Fd(), Fd.Size());
fileHash = (string)SHA256.Result();
}
++ else if (Type == "SHA512")
++ {
++ SHA512.AddFD(Fd.Fd(), Fd.Size());
++ fileHash = (string)SHA512.Result();
++ }
Fd.Close();
if(_config->FindB("Debug::Hashes",false) == true)
MD5.Add(Buf,Res);
SHA1.Add(Buf,Res);
SHA256.Add(Buf,Res);
++ SHA512.Add(Buf,Res);
}
return true;
}
#include <apt-pkg/md5.h>
#include <apt-pkg/sha1.h>
#include <apt-pkg/sha256.h>
++#include <apt-pkg/sha512.h>
#include <algorithm>
#include <vector>
MD5Summation MD5;
SHA1Summation SHA1;
SHA256Summation SHA256;
++ SHA512Summation SHA512;
inline bool Add(const unsigned char *Data,unsigned 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);
return Section.FindS("SHA1");
}
/*}}}*/
--// RecordParser::SHA1Hash - Return the archive hash /*{{{*/
++// RecordParser::SHA256Hash - Return the archive hash /*{{{*/
// ---------------------------------------------------------------------
/* */
string debRecordParser::SHA256Hash()
return Section.FindS("SHA256");
}
/*}}}*/
++// RecordParser::SHA512Hash - Return the archive hash /*{{{*/
++// ---------------------------------------------------------------------
++/* */
++string debRecordParser::SHA512Hash()
++{
++ return Section.FindS("SHA512");
++}
++ /*}}}*/
// RecordParser::Maintainer - Return the maintainer email /*{{{*/
// ---------------------------------------------------------------------
/* */
virtual string MD5Hash();
virtual string SHA1Hash();
virtual string SHA256Hash();
++ virtual string SHA512Hash();
virtual string SourcePkg();
virtual string SourceVer();
virtual string MD5Hash() {return string();};
virtual string SHA1Hash() {return string();};
virtual string SHA256Hash() {return string();};
++ virtual string SHA512Hash() {return string();};
virtual string SourcePkg() {return string();};
virtual string SourceVer() {return string();};
"MD5Sum",
"SHA1",
"SHA256",
++ "SHA512",
"MSDOS-Filename", // Obsolete
"Description",
0};
strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr());
// get the most appropriate hash
HashString hash;
++ if (rec.SHA512Hash() != "")
++ hash = HashString("sha512", rec.SHA512Hash());
if (rec.SHA256Hash() != "")
hash = HashString("sha256", rec.SHA256Hash());
else if (rec.SHA1Hash() != "")