aboutsummaryrefslogtreecommitdiff
path: root/src/common/Cryptography/RSA.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/Cryptography/RSA.cpp')
-rw-r--r--src/common/Cryptography/RSA.cpp144
1 files changed, 4 insertions, 140 deletions
diff --git a/src/common/Cryptography/RSA.cpp b/src/common/Cryptography/RSA.cpp
index cef03fdc1bb..106eed27374 100644
--- a/src/common/Cryptography/RSA.cpp
+++ b/src/common/Cryptography/RSA.cpp
@@ -18,28 +18,21 @@
#include "RSA.h"
#include "HMAC.h"
#include "Memory.h"
+#include <openssl/core_names.h>
+#include <openssl/params.h>
#include <openssl/pem.h>
+#include <openssl/provider.h>
#include <algorithm>
#include <memory>
#include <vector>
#include <cstring>
-#if OPENSSL_VERSION_NUMBER >= 0x30000000L
-#include <openssl/core_names.h>
-#include <openssl/params.h>
-#include <openssl/provider.h>
-#endif
-
namespace
{
-#if OPENSSL_VERSION_NUMBER >= 0x30000000L
-
extern OSSL_DISPATCH const HMAC_SHA256_funcs[];
extern OSSL_ALGORITHM const HMAC_SHA256_algs[];
extern OSSL_DISPATCH const HMAC_SHA256_method[];
-#endif
-
struct HMAC_SHA256_MD
{
struct CTX_DATA
@@ -47,95 +40,6 @@ struct HMAC_SHA256_MD
Trinity::Crypto::HMAC_SHA256* hmac;
};
-#if OPENSSL_VERSION_NUMBER < 0x30000000L
-
- HMAC_SHA256_MD()
- {
- _md = EVP_MD_meth_new(NID_sha256, NID_sha256WithRSAEncryption);
- EVP_MD_meth_set_result_size(_md, Trinity::Crypto::Constants::SHA256_DIGEST_LENGTH_BYTES);
- EVP_MD_meth_set_flags(_md, EVP_MD_FLAG_DIGALGID_ABSENT);
- EVP_MD_meth_set_init(_md, &Init);
- EVP_MD_meth_set_update(_md, &UpdateData);
- EVP_MD_meth_set_final(_md, &Finalize);
- EVP_MD_meth_set_copy(_md, &Copy);
- EVP_MD_meth_set_cleanup(_md, &Cleanup);
- EVP_MD_meth_set_input_blocksize(_md, SHA256_CBLOCK);
- EVP_MD_meth_set_app_datasize(_md, sizeof(EVP_MD*) + sizeof(CTX_DATA*));
- }
-
- HMAC_SHA256_MD(HMAC_SHA256_MD const&) = delete;
- HMAC_SHA256_MD(HMAC_SHA256_MD&&) = delete;
-
- HMAC_SHA256_MD& operator=(HMAC_SHA256_MD const&) = delete;
- HMAC_SHA256_MD& operator=(HMAC_SHA256_MD&&) = delete;
-
- ~HMAC_SHA256_MD()
- {
- EVP_MD_meth_free(_md);
- _md = nullptr;
- }
-
- EVP_MD* GetMd() const
- {
- return _md;
- }
-
- static int Init(EVP_MD_CTX* ctx)
- {
- Cleanup(ctx);
- return 1;
- }
-
- static int UpdateData(EVP_MD_CTX* ctx, const void* data, size_t count)
- {
- CTX_DATA* ctxData = reinterpret_cast<CTX_DATA*>(EVP_MD_CTX_md_data(ctx));
- if (!ctxData->hmac)
- return 0;
-
- ctxData->hmac->UpdateData(reinterpret_cast<uint8 const*>(data), count);
- return 1;
- }
-
- static int Finalize(EVP_MD_CTX* ctx, unsigned char* md)
- {
- CTX_DATA* ctxData = reinterpret_cast<CTX_DATA*>(EVP_MD_CTX_md_data(ctx));
- if (!ctxData->hmac)
- return 0;
-
- ctxData->hmac->Finalize();
- memcpy(md, ctxData->hmac->GetDigest().data(), ctxData->hmac->GetDigest().size());
- return 1;
- }
-
- // post-processing after openssl memcpys from source to dest (no need to cleanup dest)
- static int Copy(EVP_MD_CTX* to, EVP_MD_CTX const* from)
- {
- CTX_DATA const* ctxDataFrom = reinterpret_cast<CTX_DATA const*>(EVP_MD_CTX_md_data(from));
- CTX_DATA* ctxDataTo = reinterpret_cast<CTX_DATA*>(EVP_MD_CTX_md_data(to));
-
- if (ctxDataFrom->hmac)
- ctxDataTo->hmac = new Trinity::Crypto::HMAC_SHA256(*ctxDataFrom->hmac);
-
- return 1;
- }
-
- static int Cleanup(EVP_MD_CTX* ctx)
- {
- CTX_DATA* data = reinterpret_cast<CTX_DATA*>(EVP_MD_CTX_md_data(ctx));
- if (data->hmac)
- {
- delete data->hmac;
- data->hmac = nullptr;
- }
-
- return 1;
- }
-
-private:
- EVP_MD* _md;
-
-#else
-
HMAC_SHA256_MD()
{
_lib = OSSL_LIB_CTX_new();
@@ -273,11 +177,8 @@ private:
private:
OSSL_LIB_CTX* _lib;
OSSL_PROVIDER* _handle;
-#endif
} const HmacSha256Md;
-#if OPENSSL_VERSION_NUMBER >= 0x30000000L
-
OSSL_DISPATCH const HMAC_SHA256_funcs[] =
{
{ OSSL_FUNC_DIGEST_NEWCTX, (void (*)())HMAC_SHA256_MD::DigestNew },
@@ -303,14 +204,11 @@ OSSL_DISPATCH const HMAC_SHA256_method[] =
{ OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void(*)())HMAC_SHA256_MD::QueryProvider },
{ 0, nullptr },
};
-#endif
}
namespace Trinity::Crypto
{
-#if OPENSSL_VERSION_NUMBER >= 0x30000000L
-
void RsaSignature::DigestGenerator::EVP_MD_Deleter::operator()(EVP_MD* md) const
{
EVP_MD_free(md);
@@ -350,36 +248,6 @@ std::unique_ptr<OSSL_PARAM[]> RsaSignature::HMAC_SHA256::GetParams() const
});
}
-#else
-
-void RsaSignature::DigestGenerator::EVP_MD_Deleter::operator()(EVP_MD* /*md*/) const
-{
-}
-
-std::unique_ptr<EVP_MD, RsaSignature::DigestGenerator::EVP_MD_Deleter> RsaSignature::SHA256::GetGenerator() const
-{
- return std::unique_ptr<EVP_MD, EVP_MD_Deleter>(const_cast<EVP_MD*>(EVP_sha256()));
-}
-
-void RsaSignature::SHA256::PostInitCustomizeContext(EVP_MD_CTX*)
-{
-}
-
-std::unique_ptr<EVP_MD, RsaSignature::DigestGenerator::EVP_MD_Deleter> RsaSignature::HMAC_SHA256::GetGenerator() const
-{
- return std::unique_ptr<EVP_MD, EVP_MD_Deleter>(HmacSha256Md.GetMd());
-}
-
-void RsaSignature::HMAC_SHA256::PostInitCustomizeContext(EVP_MD_CTX* ctx)
-{
- HMAC_SHA256_MD::CTX_DATA* ctxData = reinterpret_cast<HMAC_SHA256_MD::CTX_DATA*>(EVP_MD_CTX_md_data(ctx));
-
- delete ctxData->hmac;
- ctxData->hmac = new Crypto::HMAC_SHA256(_key, _keyLength);
-}
-
-#endif
-
RsaSignature::RsaSignature() : _ctx(Impl::GenericHashImpl::MakeCTX())
{
}
@@ -465,16 +333,12 @@ bool RsaSignature::Sign(uint8 const* message, std::size_t messageLength, DigestG
{
std::unique_ptr<EVP_MD, DigestGenerator::EVP_MD_Deleter> digestGenerator = generator.GetGenerator();
-#if OPENSSL_VERSION_NUMBER >= 0x30000000L
auto keyCtx = make_unique_ptr_with_deleter(EVP_PKEY_CTX_new_from_pkey(generator.GetLib(), _key, nullptr), &EVP_PKEY_CTX_free);
EVP_MD_CTX_set_pkey_ctx(_ctx, keyCtx.get());
std::unique_ptr<OSSL_PARAM[]> params = generator.GetParams();
int result = EVP_DigestSignInit_ex(_ctx, nullptr, EVP_MD_get0_name(digestGenerator.get()), generator.GetLib(), nullptr, _key, params.get());
-#else
- int result = EVP_DigestSignInit(_ctx, nullptr, digestGenerator.get(), nullptr, _key);
- generator.PostInitCustomizeContext(_ctx);
-#endif
+
if (result == 0)
return false;