|
|
@@ -250,28 +250,34 @@ bool HashStringList::operator!=(HashStringList const &other) const
|
|
|
class PrivateHashes {
|
|
|
public:
|
|
|
unsigned long long FileSize;
|
|
|
+ unsigned int CalcHashes;
|
|
|
|
|
|
- PrivateHashes() : FileSize(0) {}
|
|
|
+ PrivateHashes(unsigned int const CalcHashes) : FileSize(0), CalcHashes(CalcHashes) {}
|
|
|
};
|
|
|
/*}}}*/
|
|
|
// Hashes::Add* - Add the contents of data or FD /*{{{*/
|
|
|
-bool Hashes::Add(const unsigned char * const Data,unsigned long long const Size, unsigned int const Hashes)
|
|
|
+bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size)
|
|
|
{
|
|
|
bool Res = true;
|
|
|
APT_IGNORE_DEPRECATED_PUSH
|
|
|
- if ((Hashes & MD5SUM) == MD5SUM)
|
|
|
+ if ((d->CalcHashes & MD5SUM) == MD5SUM)
|
|
|
Res &= MD5.Add(Data, Size);
|
|
|
- if ((Hashes & SHA1SUM) == SHA1SUM)
|
|
|
+ if ((d->CalcHashes & SHA1SUM) == SHA1SUM)
|
|
|
Res &= SHA1.Add(Data, Size);
|
|
|
- if ((Hashes & SHA256SUM) == SHA256SUM)
|
|
|
+ if ((d->CalcHashes & SHA256SUM) == SHA256SUM)
|
|
|
Res &= SHA256.Add(Data, Size);
|
|
|
- if ((Hashes & SHA512SUM) == SHA512SUM)
|
|
|
+ if ((d->CalcHashes & SHA512SUM) == SHA512SUM)
|
|
|
Res &= SHA512.Add(Data, Size);
|
|
|
APT_IGNORE_DEPRECATED_POP
|
|
|
d->FileSize += Size;
|
|
|
return Res;
|
|
|
}
|
|
|
-bool Hashes::AddFD(int const Fd,unsigned long long Size, unsigned int const Hashes)
|
|
|
+bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size, unsigned int const Hashes)
|
|
|
+{
|
|
|
+ d->CalcHashes = Hashes;
|
|
|
+ return Add(Data, Size);
|
|
|
+}
|
|
|
+bool Hashes::AddFD(int const Fd,unsigned long long Size)
|
|
|
{
|
|
|
unsigned char Buf[64*64];
|
|
|
bool const ToEOF = (Size == UntilEOF);
|
|
|
@@ -285,12 +291,17 @@ bool Hashes::AddFD(int const Fd,unsigned long long Size, unsigned int const Hash
|
|
|
if (ToEOF && Res == 0) // EOF
|
|
|
break;
|
|
|
Size -= Res;
|
|
|
- if (Add(Buf, Res, Hashes) == false)
|
|
|
+ if (Add(Buf, Res) == false)
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
-bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, unsigned int const Hashes)
|
|
|
+bool Hashes::AddFD(int const Fd,unsigned long long Size, unsigned int const Hashes)
|
|
|
+{
|
|
|
+ d->CalcHashes = Hashes;
|
|
|
+ return AddFD(Fd, Size);
|
|
|
+}
|
|
|
+bool Hashes::AddFD(FileFd &Fd,unsigned long long Size)
|
|
|
{
|
|
|
unsigned char Buf[64*64];
|
|
|
bool const ToEOF = (Size == 0);
|
|
|
@@ -309,20 +320,29 @@ bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, unsigned int const Hashes
|
|
|
else if (a == 0) // EOF
|
|
|
break;
|
|
|
Size -= a;
|
|
|
- if (Add(Buf, a, Hashes) == false)
|
|
|
+ if (Add(Buf, a) == false)
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
+}
|
|
|
+bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, unsigned int const Hashes)
|
|
|
+{
|
|
|
+ d->CalcHashes = Hashes;
|
|
|
+ return AddFD(Fd, Size);
|
|
|
}
|
|
|
/*}}}*/
|
|
|
HashStringList Hashes::GetHashStringList()
|
|
|
{
|
|
|
HashStringList hashes;
|
|
|
APT_IGNORE_DEPRECATED_PUSH
|
|
|
- hashes.push_back(HashString("MD5Sum", MD5.Result().Value()));
|
|
|
- hashes.push_back(HashString("SHA1", SHA1.Result().Value()));
|
|
|
- hashes.push_back(HashString("SHA256", SHA256.Result().Value()));
|
|
|
- hashes.push_back(HashString("SHA512", SHA512.Result().Value()));
|
|
|
+ if ((d->CalcHashes & MD5SUM) == MD5SUM)
|
|
|
+ hashes.push_back(HashString("MD5Sum", MD5.Result().Value()));
|
|
|
+ if ((d->CalcHashes & SHA1SUM) == SHA1SUM)
|
|
|
+ hashes.push_back(HashString("SHA1", SHA1.Result().Value()));
|
|
|
+ if ((d->CalcHashes & SHA256SUM) == SHA256SUM)
|
|
|
+ hashes.push_back(HashString("SHA256", SHA256.Result().Value()));
|
|
|
+ if ((d->CalcHashes & SHA512SUM) == SHA512SUM)
|
|
|
+ hashes.push_back(HashString("SHA512", SHA512.Result().Value()));
|
|
|
APT_IGNORE_DEPRECATED_POP
|
|
|
std::string SizeStr;
|
|
|
strprintf(SizeStr, "%llu", d->FileSize);
|
|
|
@@ -330,6 +350,19 @@ APT_IGNORE_DEPRECATED_POP
|
|
|
return hashes;
|
|
|
}
|
|
|
APT_IGNORE_DEPRECATED_PUSH
|
|
|
-Hashes::Hashes() { d = new PrivateHashes(); }
|
|
|
+Hashes::Hashes() { d = new PrivateHashes(~0); }
|
|
|
+Hashes::Hashes(unsigned int const Hashes) { d = new PrivateHashes(Hashes); }
|
|
|
+Hashes::Hashes(HashStringList const &Hashes) {
|
|
|
+ unsigned int calcHashes = Hashes.usable() ? 0 : ~0;
|
|
|
+ if (Hashes.find("MD5Sum") != NULL)
|
|
|
+ calcHashes |= MD5SUM;
|
|
|
+ if (Hashes.find("SHA1") != NULL)
|
|
|
+ calcHashes |= SHA1SUM;
|
|
|
+ if (Hashes.find("SHA256") != NULL)
|
|
|
+ calcHashes |= SHA256SUM;
|
|
|
+ if (Hashes.find("SHA512") != NULL)
|
|
|
+ calcHashes |= SHA512SUM;
|
|
|
+ d = new PrivateHashes(calcHashes);
|
|
|
+}
|
|
|
Hashes::~Hashes() { delete d; }
|
|
|
APT_IGNORE_DEPRECATED_POP
|