mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-22 17:24:48 -05:00
LibCrypto: Make RSA class easily configurable
This is a small change to allow subclasses of `RSA` to configure the `EVP_PKEY_CTX` without rewriting everything.
This commit is contained in:
parent
91c393ea98
commit
6e721110f9
Notes:
github-actions[bot]
2025-01-13 16:01:42 +00:00
Author: https://github.com/devgianlu Commit: https://github.com/LadybirdBrowser/ladybird/commit/6e721110f93 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3234
2 changed files with 10 additions and 2 deletions
|
@ -223,6 +223,12 @@ ErrorOr<OpenSSL_PKEY> RSA::private_key_to_openssl_pkey(PrivateKeyType const& pri
|
||||||
|
|
||||||
#undef OPENSSL_SET_KEY_PARAM_NOT_ZERO
|
#undef OPENSSL_SET_KEY_PARAM_NOT_ZERO
|
||||||
|
|
||||||
|
ErrorOr<void> RSA::configure(OpenSSL_PKEY_CTX& ctx)
|
||||||
|
{
|
||||||
|
OPENSSL_TRY(EVP_PKEY_CTX_set_rsa_padding(ctx.ptr(), RSA_NO_PADDING));
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
ErrorOr<ByteBuffer> RSA::encrypt(ReadonlyBytes in)
|
ErrorOr<ByteBuffer> RSA::encrypt(ReadonlyBytes in)
|
||||||
{
|
{
|
||||||
auto key = TRY(public_key_to_openssl_pkey(m_public_key));
|
auto key = TRY(public_key_to_openssl_pkey(m_public_key));
|
||||||
|
@ -230,7 +236,7 @@ ErrorOr<ByteBuffer> RSA::encrypt(ReadonlyBytes in)
|
||||||
auto ctx = TRY(OpenSSL_PKEY_CTX::wrap(EVP_PKEY_CTX_new_from_pkey(nullptr, key.ptr(), nullptr)));
|
auto ctx = TRY(OpenSSL_PKEY_CTX::wrap(EVP_PKEY_CTX_new_from_pkey(nullptr, key.ptr(), nullptr)));
|
||||||
|
|
||||||
OPENSSL_TRY(EVP_PKEY_encrypt_init(ctx.ptr()));
|
OPENSSL_TRY(EVP_PKEY_encrypt_init(ctx.ptr()));
|
||||||
OPENSSL_TRY(EVP_PKEY_CTX_set_rsa_padding(ctx.ptr(), RSA_NO_PADDING));
|
TRY(configure(ctx));
|
||||||
|
|
||||||
size_t out_size = 0;
|
size_t out_size = 0;
|
||||||
OPENSSL_TRY(EVP_PKEY_encrypt(ctx.ptr(), nullptr, &out_size, in.data(), in.size()));
|
OPENSSL_TRY(EVP_PKEY_encrypt(ctx.ptr(), nullptr, &out_size, in.data(), in.size()));
|
||||||
|
@ -247,7 +253,7 @@ ErrorOr<ByteBuffer> RSA::decrypt(ReadonlyBytes in)
|
||||||
auto ctx = TRY(OpenSSL_PKEY_CTX::wrap(EVP_PKEY_CTX_new_from_pkey(nullptr, key.ptr(), nullptr)));
|
auto ctx = TRY(OpenSSL_PKEY_CTX::wrap(EVP_PKEY_CTX_new_from_pkey(nullptr, key.ptr(), nullptr)));
|
||||||
|
|
||||||
OPENSSL_TRY(EVP_PKEY_decrypt_init(ctx.ptr()));
|
OPENSSL_TRY(EVP_PKEY_decrypt_init(ctx.ptr()));
|
||||||
OPENSSL_TRY(EVP_PKEY_CTX_set_rsa_padding(ctx.ptr(), RSA_NO_PADDING));
|
TRY(configure(ctx));
|
||||||
|
|
||||||
size_t out_size = 0;
|
size_t out_size = 0;
|
||||||
OPENSSL_TRY(EVP_PKEY_decrypt(ctx.ptr(), nullptr, &out_size, in.data(), in.size()));
|
OPENSSL_TRY(EVP_PKEY_decrypt(ctx.ptr(), nullptr, &out_size, in.data(), in.size()));
|
||||||
|
|
|
@ -222,6 +222,8 @@ public:
|
||||||
void set_private_key(PrivateKeyType const& key) { m_private_key = key; }
|
void set_private_key(PrivateKeyType const& key) { m_private_key = key; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual ErrorOr<void> configure(OpenSSL_PKEY_CTX& ctx);
|
||||||
|
|
||||||
static ErrorOr<OpenSSL_PKEY> public_key_to_openssl_pkey(PublicKeyType const& public_key);
|
static ErrorOr<OpenSSL_PKEY> public_key_to_openssl_pkey(PublicKeyType const& public_key);
|
||||||
static ErrorOr<OpenSSL_PKEY> private_key_to_openssl_pkey(PrivateKeyType const& private_key);
|
static ErrorOr<OpenSSL_PKEY> private_key_to_openssl_pkey(PrivateKeyType const& private_key);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue