Avoid using deprecated OpenSSL functions in testsuite
This commit is contained in:
parent
dbdfd015bb
commit
0347ca73eb
|
@ -6,6 +6,7 @@
|
||||||
#include <cppunit/TestFixture.h>
|
#include <cppunit/TestFixture.h>
|
||||||
#include <cppunit/extensions/HelperMacros.h>
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
|
||||||
|
#include <openssl/evp.h>
|
||||||
#include <openssl/sha.h>
|
#include <openssl/sha.h>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
@ -81,14 +82,33 @@ struct TestFile {
|
||||||
{ "ogg/example-cover.png", { "897e1a2d0cfb79c1fe5068108bb34610c3758bd0b9a7e90c1702c4e6972e0801" } },
|
{ "ogg/example-cover.png", { "897e1a2d0cfb79c1fe5068108bb34610c3758bd0b9a7e90c1702c4e6972e0801" } },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct EvpMdCtx {
|
||||||
|
EvpMdCtx()
|
||||||
|
: handle(EVP_MD_CTX_new())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
~EvpMdCtx()
|
||||||
|
{
|
||||||
|
if (handle) {
|
||||||
|
EVP_MD_CTX_free(handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EVP_MD_CTX *handle;
|
||||||
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Computes the SHA-256 checksums for the file using OpenSSL.
|
* \brief Computes the SHA-256 checksums for the file using OpenSSL.
|
||||||
*/
|
*/
|
||||||
Sha256Checksum TestFile::computeSha256Sum() const
|
Sha256Checksum TestFile::computeSha256Sum() const
|
||||||
{
|
{
|
||||||
// init sha256 hashing
|
// init sha256 hashing
|
||||||
SHA256_CTX sha256;
|
const auto mdctx = EvpMdCtx();
|
||||||
SHA256_Init(&sha256);
|
if (!mdctx.handle) {
|
||||||
|
throw std::runtime_error("Unable to create EVP context.");
|
||||||
|
}
|
||||||
|
if (EVP_DigestInit_ex(mdctx.handle, EVP_sha256(), nullptr) != 1) {
|
||||||
|
throw std::runtime_error("Unable to init SHA256-EVP context.");
|
||||||
|
}
|
||||||
|
|
||||||
// read and hash file
|
// read and hash file
|
||||||
{
|
{
|
||||||
|
@ -100,11 +120,15 @@ Sha256Checksum TestFile::computeSha256Sum() const
|
||||||
try {
|
try {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
file.read(readBuffer, sizeof(readBuffer));
|
file.read(readBuffer, sizeof(readBuffer));
|
||||||
SHA256_Update(&sha256, readBuffer, static_cast<size_t>(file.gcount()));
|
if (EVP_DigestUpdate(mdctx.handle, readBuffer, static_cast<std::size_t>(file.gcount())) != 1) {
|
||||||
|
throw std::runtime_error("Unable to update SHA256-EVP.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (const std::ios_base::failure &) {
|
} catch (const std::ios_base::failure &) {
|
||||||
if (file.eof() && !file.bad()) {
|
if (file.eof() && !file.bad()) {
|
||||||
SHA256_Update(&sha256, readBuffer, static_cast<size_t>(file.gcount()));
|
if (EVP_DigestUpdate(mdctx.handle, readBuffer, static_cast<std::size_t>(file.gcount())) != 1) {
|
||||||
|
throw std::runtime_error("Unable to update SHA256-EVP.");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
@ -113,7 +137,10 @@ Sha256Checksum TestFile::computeSha256Sum() const
|
||||||
|
|
||||||
// compute final hash
|
// compute final hash
|
||||||
unsigned char hash[SHA256_DIGEST_LENGTH];
|
unsigned char hash[SHA256_DIGEST_LENGTH];
|
||||||
SHA256_Final(hash, &sha256);
|
auto length = static_cast<unsigned int>(SHA256_DIGEST_LENGTH);
|
||||||
|
if (EVP_DigestFinal_ex(mdctx.handle, hash, &length) != 1) {
|
||||||
|
throw std::runtime_error("Unable to finalize SHA256-EVP.");
|
||||||
|
}
|
||||||
|
|
||||||
// convert to "hex string"
|
// convert to "hex string"
|
||||||
Sha256Checksum hexString;
|
Sha256Checksum hexString;
|
||||||
|
|
Loading…
Reference in New Issue