summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2021-10-28 16:30:44 +0200
committerTor Egge <Tor.Egge@online.no>2021-10-28 16:36:57 +0200
commit0545e8185cae59cee21c161e07aad88755ea1f28 (patch)
treeb38271c214ada46cd37cfb5f1817460f248f937e
parent0b3e5ffe02fa2b51ffe37bc5f1e82022c3eeb672 (diff)
Avoid deprecated functions in OpenSSL 3.0.
-rw-r--r--searchcore/src/apps/vespa-gen-testdocs/vespa-gen-testdocs.cpp29
-rw-r--r--searchlib/src/tests/diskindex/fieldwriter/fieldwriter_test.cpp33
-rw-r--r--vespalib/src/vespa/vespalib/crypto/openssl_typedefs.h2
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
}