retro-imager/src/acceleratedcryptographichash_gnutls.cpp
Floris Bos cb415a6a02 Linux: allow using GnuTLS instead of OpenSSL for computing SHA256 hashes
Prevents issues with often changing OpenSSL ABI.

Ref #429
2022-06-14 16:13:55 +02:00

39 lines
1,022 B
C++

/*
* Use GnuTLS for hashing as their code is more optimized than Qt's
*
* SPDX-License-Identifier: Apache-2.0
* Copyright (C) 2022 Raspberry Pi Ltd
*/
#include "acceleratedcryptographichash.h"
AcceleratedCryptographicHash::AcceleratedCryptographicHash(QCryptographicHash::Algorithm method)
{
if (method != QCryptographicHash::Sha256)
throw std::runtime_error("Only sha256 implemented");
gnutls_hash_init(&_sha256, GNUTLS_DIG_SHA256);
}
AcceleratedCryptographicHash::~AcceleratedCryptographicHash()
{
gnutls_hash_deinit(_sha256, NULL);
}
void AcceleratedCryptographicHash::addData(const char *data, int length)
{
gnutls_hash(_sha256, data, length);
}
void AcceleratedCryptographicHash::addData(const QByteArray &data)
{
addData(data.constData(), data.size());
}
QByteArray AcceleratedCryptographicHash::result()
{
unsigned char binhash[gnutls_hash_get_len(GNUTLS_DIG_SHA256)];
gnutls_hash_output(_sha256, binhash);
return QByteArray((char *) binhash, sizeof binhash);
}