summaryrefslogtreecommitdiffstats
path: root/helper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'helper.cpp')
-rw-r--r--helper.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/helper.cpp b/helper.cpp
index 116efa5..baaacbb 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -7,6 +7,14 @@
#include <QString>
#include <QByteArray>
+#include <QFileInfo>
+#include <QFile>
+
+#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
+#include <md5.h>
+#include <files.h>
+#include <filters.h>
+#include <hex.h>
#include "helper.h"
@@ -35,5 +43,37 @@ namespace Helper {
return retval;
}
}
+
+ const QString md5Sum(const QString &path){
+ QFileInfo info(path);
+ if(!info.exists() || !info.isFile()){
+ return QString();
+ }
+
+ using namespace CryptoPP;
+ Weak::MD5 hash;
+ std::string res;
+ QString retval;
+ if(info.size() < (5 * 1024 * 1024)){
+ FileSource f(qPrintable(path), true, new HashFilter(hash, new HexEncoder(new StringSink(res))));
+ retval = QString::fromStdString(res).toLower();
+ }else{
+ QFile file(path);
+ file.open(QIODevice::ReadOnly);
+ int offset = info.size() / 3;
+ file.seek(offset);
+ int numBytes = 512 * 1024;
+ char *data = new char[numBytes];
+ int read = file.read(data, numBytes);
+ if(read != numBytes){
+ delete [] data;
+ return QString();
+ }
+ StringSource s((byte*)data, numBytes, true, new HashFilter(hash, new HexEncoder(new StringSink(res))));
+ retval = QString::fromStdString(res).toLower();
+ delete [] data;
+ }
+ return retval;
+ }
}