QByteArray File::hashFile(QByteArray contents, int blockSize, QMap<QByteArray, QByteArray> *hashToBlock, QMap<QByteArray, QByteArray> *blockToHash) { QByteArray result; while (contents.size() != 0) { QByteArray block = contents.left(blockSize); qDebug() << "computed block of size " << block.size(); if (!QCA::isSupported("sha256")) { qDebug() << "SHA256 not supported!"; } QCA::Hash shaHash("sha256"); QByteArray blockHash = shaHash.hash(block).toByteArray(); hashToBlock->insert(blockHash, block); blockToHash->insert(block, blockHash); result.append(blockHash); if (blockSize > contents.size()) return result; contents = contents.mid(blockSize); } return result; }
QByteArray Authentication::saltHashPassword(const std::string &password, const QByteArray &salt) const { QCA::Hash shaHash("sha1"); shaHash.update(password.c_str(), password.size()); for (int i = 0; i < SALT_ITERATIONS; i++) { shaHash.update(salt); } return shaHash.final().toByteArray(); }
QByteArray QCACryptoInterface::sha2Hash(const QByteArray &string) const { QCA::Hash shaHash("sha256"); shaHash.update(string); return shaHash.final().toByteArray(); }