From cabcf3ed6605a3ae44e2c60c9b8e0249d24358ff Mon Sep 17 00:00:00 2001 From: Tete17 Date: Mon, 29 Dec 2025 23:55:12 +0100 Subject: [PATCH] LibCrypto: Add wrapper to EVP_PKEY_get_octet_string_param --- Libraries/LibCrypto/OpenSSL.cpp | 11 +++++++++++ Libraries/LibCrypto/OpenSSL.h | 2 ++ Libraries/LibCrypto/PK/MLDSA.cpp | 15 +++------------ 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Libraries/LibCrypto/OpenSSL.cpp b/Libraries/LibCrypto/OpenSSL.cpp index 660268c2d3..2a61680b6c 100644 --- a/Libraries/LibCrypto/OpenSSL.cpp +++ b/Libraries/LibCrypto/OpenSSL.cpp @@ -67,4 +67,15 @@ ErrorOr hash_kind_to_openssl_digest_name(Hash::HashKind hash) } } +ErrorOr get_byte_buffer_param_from_key(OpenSSL_PKEY& key, char const* key_name) +{ + size_t size; + OPENSSL_TRY(EVP_PKEY_get_octet_string_param(key.ptr(), key_name, nullptr, 0, &size)); + + auto buffer = TRY(ByteBuffer::create_uninitialized(size)); + + OPENSSL_TRY(EVP_PKEY_get_octet_string_param(key.ptr(), key_name, buffer.data(), buffer.size(), &size)); + return buffer; +} + } diff --git a/Libraries/LibCrypto/OpenSSL.h b/Libraries/LibCrypto/OpenSSL.h index 16eadc80ab..cf9516ba22 100644 --- a/Libraries/LibCrypto/OpenSSL.h +++ b/Libraries/LibCrypto/OpenSSL.h @@ -125,4 +125,6 @@ ErrorOr openssl_bignum_to_unsigned_big_integer(OpenSSL_BN co ErrorOr hash_kind_to_openssl_digest_name(Hash::HashKind hash); +ErrorOr get_byte_buffer_param_from_key(OpenSSL_PKEY& key, char const* key_name); + } diff --git a/Libraries/LibCrypto/PK/MLDSA.cpp b/Libraries/LibCrypto/PK/MLDSA.cpp index a6b54b9a04..5aaedddc08 100644 --- a/Libraries/LibCrypto/PK/MLDSA.cpp +++ b/Libraries/LibCrypto/PK/MLDSA.cpp @@ -157,18 +157,9 @@ ErrorOr MLDSA::generate_key_pair(MLDSASize size, ByteBuffer auto* key_ptr = key.ptr(); OPENSSL_TRY(EVP_PKEY_generate(ctx.ptr(), &key_ptr)); - // We reserve enough memory for the key size to be able to fit them all - auto pub = TRY(ByteBuffer::create_uninitialized(2592)); - auto priv = TRY(ByteBuffer::create_uninitialized(4896)); - seed = TRY(ByteBuffer::create_uninitialized(32)); - - size_t priv_len, pub_len, seed_len; - OPENSSL_TRY(EVP_PKEY_get_octet_string_param(key.ptr(), OSSL_PKEY_PARAM_ML_DSA_SEED, seed.data(), seed.size(), &seed_len)); - OPENSSL_TRY(EVP_PKEY_get_octet_string_param(key.ptr(), OSSL_PKEY_PARAM_PRIV_KEY, priv.data(), priv.size(), &priv_len)); - OPENSSL_TRY(EVP_PKEY_get_octet_string_param(key.ptr(), OSSL_PKEY_PARAM_PUB_KEY, pub.data(), pub.size(), &pub_len)); - - pub.trim(pub_len, true); - priv.trim(priv_len, true); + auto pub = TRY(get_byte_buffer_param_from_key(key, OSSL_PKEY_PARAM_PUB_KEY)); + auto priv = TRY(get_byte_buffer_param_from_key(key, OSSL_PKEY_PARAM_PRIV_KEY)); + seed = TRY(get_byte_buffer_param_from_key(key, OSSL_PKEY_PARAM_ML_DSA_SEED)); return KeyPairType { { pub },