#ifdef HAVE_EVP_PKEY_CTX_SET1_SCRYPT_SALT
#include <openssl/evp.h>
#include <openssl/kdf.h>
+#include <openssl/opensslv.h>
#include <openssl/rand.h>
#endif
throw std::runtime_error("Error intializing the scrypt context to hash the supplied password");
}
- // OpenSSL 3.0 changed the string arg to const unsigned char*, other versions use const char *, so cast to const void * to satisfy both
- if (EVP_PKEY_CTX_set1_pbe_pass(pctx.get(), reinterpret_cast<const void*>(password.data()), password.size()) <= 0) {
+ // OpenSSL 3.0 changed the string arg to const unsigned char*, other versions use const char *
+#if OPENSSL_VERSION_MAJOR >= 3
+ auto passwordData = reinterpret_cast<const char*>(password.data());
+#else
+ auto passwordData = reinterpret_cast<const unsigned char*>(password.data());
+#endif
+ if (EVP_PKEY_CTX_set1_pbe_pass(pctx.get(), passwordData, password.size()) <= 0) {
throw std::runtime_error("Error adding the password to the scrypt context to hash the supplied password");
}
#endif
#include <openssl/err.h>
#include <openssl/ocsp.h>
+#include <openssl/pkcs12.h>
#include <openssl/rand.h>
#include <openssl/ssl.h>
-#include <openssl/pkcs12.h>
#include <fcntl.h>
#ifdef HAVE_LIBSODIUM
}
auto key = std::unique_ptr<EVP_PKEY, void(*)(EVP_PKEY*)>(keyptr, EVP_PKEY_free);
auto cert = std::unique_ptr<X509, void(*)(X509*)>(certptr, X509_free);
- auto ca = std::unique_ptr<STACK_OF(X509), void(*)(STACK_OF(X509)*)>(captr, sk_X509_free);
+ auto ca = std::unique_ptr<STACK_OF(X509), void(*)(STACK_OF(X509)*)>(captr, [](STACK_OF(X509)* st){ sk_X509_free(st); });
if (SSL_CTX_use_cert_and_key(ctx.get(), cert.get(), key.get(), ca.get(), 1) != 1) {
ERR_print_errors_fp(stderr);