diff options
author | Tor Egge <Tor.Egge@online.no> | 2021-10-28 16:30:44 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2021-10-28 16:36:57 +0200 |
commit | 0545e8185cae59cee21c161e07aad88755ea1f28 (patch) | |
tree | b38271c214ada46cd37cfb5f1817460f248f937e /searchlib | |
parent | 0b3e5ffe02fa2b51ffe37bc5f1e82022c3eeb672 (diff) |
Avoid deprecated functions in OpenSSL 3.0.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/tests/diskindex/fieldwriter/fieldwriter_test.cpp | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/searchlib/src/tests/diskindex/fieldwriter/fieldwriter_test.cpp b/searchlib/src/tests/diskindex/fieldwriter/fieldwriter_test.cpp index 1472d6d639a..6c78d185cfb 100644 --- a/searchlib/src/tests/diskindex/fieldwriter/fieldwriter_test.cpp +++ b/searchlib/src/tests/diskindex/fieldwriter/fieldwriter_test.cpp @@ -18,7 +18,7 @@ #include <vespa/vespalib/util/rand48.h> #include <vespa/vespalib/util/size_literals.h> #include <vespa/vespalib/util/time.h> -#include <openssl/sha.h> +#include <openssl/evp.h> #include <vespa/fastos/app.h> #include <vespa/log/log.h> LOG_SETUP("fieldwriter_test"); @@ -53,6 +53,18 @@ using namespace search::index; // needed to resolve external symbol from httpd.h on AIX void FastS_block_usr2() { } +namespace { + +struct EvpMdCtxDeleter { + void operator()(EVP_MD_CTX* evp_md_ctx) const noexcept { + EVP_MD_CTX_free(evp_md_ctx); + } +}; + +using EvpMdCtxPtr = std::unique_ptr<EVP_MD_CTX, EvpMdCtxDeleter>; + +} + namespace fieldwriter { uint32_t minSkipDocs = 64; @@ -283,19 +295,21 @@ WrappedFieldReader::close() class FileChecksum { - unsigned char _digest[SHA256_DIGEST_LENGTH]; - + unsigned char _digest[EVP_MAX_MD_SIZE]; + unsigned int _digest_len; public: FileChecksum(const vespalib::string &file_name); bool operator==(const FileChecksum &rhs) const { - return (memcmp(_digest, rhs._digest, SHA256_DIGEST_LENGTH) == 0); + return ((_digest_len == rhs._digest_len) && + (memcmp(_digest, rhs._digest, _digest_len) == 0)); } }; FileChecksum::FileChecksum(const vespalib::string &file_name) + : _digest(), + _digest_len(0u) { - SHA256_CTX c; FastOS_File f; Alloc buf = Alloc::alloc(64_Ki); vespalib::string full_file_name(dirprefix + file_name); @@ -306,16 +320,19 @@ FileChecksum::FileChecksum(const vespalib::string &file_name) } int64_t flen = f.GetSize(); int64_t remainder = flen; - SHA256_Init(&c); + EvpMdCtxPtr md_ctx(EVP_MD_CTX_new()); + const EVP_MD* md = EVP_get_digestbyname("SHA256"); + EVP_DigestInit_ex(md_ctx.get(), md, nullptr); while (remainder > 0) { int64_t thistime = std::min(remainder, static_cast<int64_t>(buf.size())); f.ReadBuf(buf.get(), thistime); - SHA256_Update(&c, buf.get(), thistime); + EVP_DigestUpdate(md_ctx.get(), buf.get(), thistime); remainder -= thistime; } f.Close(); - SHA256_Final(_digest, &c); + EVP_DigestFinal_ex(md_ctx.get(), &_digest[0], &_digest_len); + assert(_digest_len > 0u && _digest_len <= EVP_MAX_MD_SIZE); } void |