katie/util/filehash/main.cpp
Ivailo Monev 3227047514 drop BLAKE3 in favour of custom hash algorithm
faster than BLAKE3 and the other algorithms with collisions risk
reduced based on the length of the input data, benchmark result:
********* Start testing of tst_qcryptographichash *********
Config: Using QTest library 4.12.0, Katie 4.12.0
PASS  : tst_qcryptographichash::initTestCase()
RESULT   : tst_qcryptographichash::append():"10 (Md5)":
     0.00280 msecs per iteration (total: 561, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"10 (Sha1)":
     0.00333 msecs per iteration (total: 667, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"10 (Sha256)":
     0.00467 msecs per iteration (total: 934, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"10 (Sha512)":
     0.00361 msecs per iteration (total: 723, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"10 (KAT)":
     0.00219 msecs per iteration (total: 439, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"100 (Md5)":
     0.000620 msecs per iteration (total: 124, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"100 (Sha1)":
     0.00109 msecs per iteration (total: 219, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"100 (Sha256)":
     0.000900 msecs per iteration (total: 180, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"100 (Sha512)":
     0.00106 msecs per iteration (total: 212, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"100 (KAT)":
     0.000740 msecs per iteration (total: 148, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"250 (Md5)":
     0.000580 msecs per iteration (total: 116, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"250 (Sha1)":
     0.00134 msecs per iteration (total: 268, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"250 (Sha256)":
     0.000845 msecs per iteration (total: 169, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"250 (Sha512)":
     0.00100 msecs per iteration (total: 200, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"250 (KAT)":
     0.000625 msecs per iteration (total: 125, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"500 (Md5)":
     0.000550 msecs per iteration (total: 110, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"500 (Sha1)":
     0.00137 msecs per iteration (total: 274, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"500 (Sha256)":
     0.000830 msecs per iteration (total: 166, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"500 (Sha512)":
     0.000985 msecs per iteration (total: 197, iterations: 200000)
RESULT   : tst_qcryptographichash::append():"500 (KAT)":
     0.000575 msecs per iteration (total: 115, iterations: 200000)
PASS  : tst_qcryptographichash::append()
RESULT   : tst_qcryptographichash::append_once():"Md5":
     0.00155 msecs per iteration (total: 310, iterations: 200000)
RESULT   : tst_qcryptographichash::append_once():"Sha1":
     0.00212 msecs per iteration (total: 424, iterations: 200000)
RESULT   : tst_qcryptographichash::append_once():"Sha256":
     0.00414 msecs per iteration (total: 828, iterations: 200000)
RESULT   : tst_qcryptographichash::append_once():"Sha512":
     0.00314 msecs per iteration (total: 629, iterations: 200000)
RESULT   : tst_qcryptographichash::append_once():"KAT":
     0.000805 msecs per iteration (total: 161, iterations: 200000)
PASS  : tst_qcryptographichash::append_once()
RESULT   : tst_qcryptographichash::statichash():"Md5":
     0.00149 msecs per iteration (total: 298, iterations: 200000)
RESULT   : tst_qcryptographichash::statichash():"Sha1":
     0.00206 msecs per iteration (total: 413, iterations: 200000)
RESULT   : tst_qcryptographichash::statichash():"Sha256":
     0.00408 msecs per iteration (total: 817, iterations: 200000)
RESULT   : tst_qcryptographichash::statichash():"Sha512":
     0.00309 msecs per iteration (total: 618, iterations: 200000)
RESULT   : tst_qcryptographichash::statichash():"KAT":
     0.000610 msecs per iteration (total: 122, iterations: 200000)
PASS  : tst_qcryptographichash::statichash()
PASS  : tst_qcryptographichash::cleanupTestCase()
Totals: 5 passed, 0 failed, 0 skipped
********* Finished testing of tst_qcryptographichash *********

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
2022-03-13 23:07:11 +02:00

73 lines
2.2 KiB
C++

/****************************************************************************
**
** Copyright (C) 2022 Ivailo Monev
**
** This file is part of the utils of the Katie Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
**
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QtCore/qcoreapplication.h>
#include <QtCore/qdebug.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qfile.h>
#include <QtNetwork/qcryptographichash.h>
QT_USE_NAMESPACE
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
const QStringList args = app.arguments().mid(1);
if (args.size() != 2) {
qWarning() << "Usage: filehash <md5|sha1|sha256|sha512|kat> <filepath>";
return 1;
}
QCryptographicHash::Algorithm algorithm = QCryptographicHash::Md5;
if (args.at(0) == "md5") {
algorithm = QCryptographicHash::Md5;
} else if (args.at(0) == "sha1") {
algorithm = QCryptographicHash::Sha1;
} else if (args.at(0) == "sha256") {
algorithm = QCryptographicHash::Sha256;
} else if (args.at(0) == "sha512") {
algorithm = QCryptographicHash::Sha512;
} else if (args.at(0) == "kat") {
algorithm = QCryptographicHash::KAT;
} else {
qWarning() << "Invalid algorithm" << args.at(0);
return 2;
}
QFile file(args.at(1));
if (file.open(QFile::ReadOnly) == false) {
qWarning() << "Could not open" << args.at(1);
return 3;
}
QCryptographicHash cryptohash(algorithm);
cryptohash.addData(&file);
const QByteArray hash = cryptohash.result().toHex();
if (hash.isEmpty()) {
qWarning() << "Could not hash" << args.at(1);
return 4;
}
qDebug() << hash;
return 0;
}