|
|
@@ -61,25 +61,25 @@ bool HashString::VerifyFile(std::string filename) const /*{{{*/
|
|
|
if(Type == "MD5Sum")
|
|
|
{
|
|
|
MD5Summation MD5;
|
|
|
- MD5.AddFD(Fd.Fd(), Fd.Size());
|
|
|
+ MD5.AddFD(Fd);
|
|
|
fileHash = (std::string)MD5.Result();
|
|
|
}
|
|
|
else if (Type == "SHA1")
|
|
|
{
|
|
|
SHA1Summation SHA1;
|
|
|
- SHA1.AddFD(Fd.Fd(), Fd.Size());
|
|
|
+ SHA1.AddFD(Fd);
|
|
|
fileHash = (std::string)SHA1.Result();
|
|
|
}
|
|
|
else if (Type == "SHA256")
|
|
|
{
|
|
|
SHA256Summation SHA256;
|
|
|
- SHA256.AddFD(Fd.Fd(), Fd.Size());
|
|
|
+ SHA256.AddFD(Fd);
|
|
|
fileHash = (std::string)SHA256.Result();
|
|
|
}
|
|
|
else if (Type == "SHA512")
|
|
|
{
|
|
|
SHA512Summation SHA512;
|
|
|
- SHA512.AddFD(Fd.Fd(), Fd.Size());
|
|
|
+ SHA512.AddFD(Fd);
|
|
|
fileHash = (std::string)SHA512.Result();
|
|
|
}
|
|
|
Fd.Close();
|
|
|
@@ -134,6 +134,36 @@ bool Hashes::AddFD(int const Fd,unsigned long long Size, bool const addMD5,
|
|
|
SHA512.Add(Buf,Res);
|
|
|
}
|
|
|
return true;
|
|
|
+}
|
|
|
+bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, bool const addMD5,
|
|
|
+ bool const addSHA1, bool const addSHA256, bool const addSHA512)
|
|
|
+{
|
|
|
+ unsigned char Buf[64*64];
|
|
|
+ bool const ToEOF = (Size == 0);
|
|
|
+ while (Size != 0 || ToEOF)
|
|
|
+ {
|
|
|
+ unsigned long long n = sizeof(Buf);
|
|
|
+ if (!ToEOF) n = std::min(Size, n);
|
|
|
+ unsigned long long a = 0;
|
|
|
+ if (Fd.Read(Buf, n, &a) == false) // error
|
|
|
+ return false;
|
|
|
+ if (ToEOF == false)
|
|
|
+ {
|
|
|
+ if (a != n) // short read
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else if (a == 0) // EOF
|
|
|
+ break;
|
|
|
+ Size -= a;
|
|
|
+ if (addMD5 == true)
|
|
|
+ MD5.Add(Buf, a);
|
|
|
+ if (addSHA1 == true)
|
|
|
+ SHA1.Add(Buf, a);
|
|
|
+ if (addSHA256 == true)
|
|
|
+ SHA256.Add(Buf, a);
|
|
|
+ if (addSHA512 == true)
|
|
|
+ SHA512.Add(Buf, a);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
}
|
|
|
/*}}}*/
|
|
|
-
|