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 | |
parent | 0b3e5ffe02fa2b51ffe37bc5f1e82022c3eeb672 (diff) |
Avoid deprecated functions in OpenSSL 3.0.
3 files changed, 49 insertions, 15 deletions
diff --git a/searchcore/src/apps/vespa-gen-testdocs/vespa-gen-testdocs.cpp b/searchcore/src/apps/vespa-gen-testdocs/vespa-gen-testdocs.cpp index fcaac9796ad..6e8223399e6 100644 --- a/searchcore/src/apps/vespa-gen-testdocs/vespa-gen-testdocs.cpp +++ b/searchcore/src/apps/vespa-gen-testdocs/vespa-gen-testdocs.cpp @@ -9,7 +9,7 @@ #include <vespa/fastos/app.h> #include <iostream> #include <sstream> -#include <openssl/sha.h> +#include <openssl/evp.h> #include <cassert> #include <getopt.h> @@ -22,6 +22,18 @@ typedef std::shared_ptr<StringArray> StringArraySP; using namespace vespalib::alloc; using vespalib::string; +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>; + +} + void usageHeader() { @@ -62,8 +74,8 @@ void shafile(const string &baseDir, const string &file) { - unsigned char digest[SHA256_DIGEST_LENGTH]; - SHA256_CTX c; + unsigned char digest[EVP_MAX_MD_SIZE]; + unsigned int digest_len = 0; string fullFile(prependBaseDir(baseDir, file)); FastOS_File f; std::ostringstream os; @@ -76,17 +88,20 @@ shafile(const string &baseDir, } 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); - for (unsigned int i = 0; i < SHA256_DIGEST_LENGTH; ++i) { + EVP_DigestFinal_ex(md_ctx.get(), &digest[0], &digest_len); + assert(digest_len > 0u && digest_len <= EVP_MAX_MD_SIZE); + for (unsigned int i = 0; i < digest_len; ++i) { os.width(2); os.fill('0'); os << std::hex << static_cast<unsigned int>(digest[i]); 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 diff --git a/vespalib/src/vespa/vespalib/crypto/openssl_typedefs.h b/vespalib/src/vespa/vespalib/crypto/openssl_typedefs.h index 036d938c158..5ec00d3783d 100644 --- a/vespalib/src/vespa/vespalib/crypto/openssl_typedefs.h +++ b/vespalib/src/vespa/vespalib/crypto/openssl_typedefs.h @@ -43,11 +43,13 @@ struct EvpPkeyDeleter { }; using EvpPkeyPtr = std::unique_ptr<::EVP_PKEY, EvpPkeyDeleter>; +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) struct EcKeyDeleter { void operator()(::EC_KEY* ec_key) const noexcept { ::EC_KEY_free(ec_key); } }; using EcKeyPtr = std::unique_ptr<::EC_KEY, EcKeyDeleter>; +#endif } |