From 6281175e86a198a023e506e4f6be3cec4cc423f2 Mon Sep 17 00:00:00 2001 From: devgianlu Date: Mon, 2 Jun 2025 10:55:39 +0200 Subject: [PATCH] LibWeb/Crypto: Use builtin base64 encoding/decoding padding options --- Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp b/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp index 7a52b2212fd..0c9f522a05c 100644 --- a/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp +++ b/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp @@ -116,30 +116,16 @@ ErrorOr base64_url_uint_encode(::Crypto::UnsignedBigInteger integer) // octet), which is "AA". auto bytes = TRY(ByteBuffer::create_uninitialized(integer.byte_length())); - auto data_size = integer.export_data(bytes.span()); - auto data_slice_be = bytes.bytes().slice(bytes.size() - data_size, data_size); - - auto encoded = TRY(encode_base64url(data_slice_be)); - - // FIXME: create a version of encode_base64url that omits padding bytes - if (auto first_padding_byte = encoded.find_byte_offset('='); first_padding_byte.has_value()) - return encoded.substring_from_byte_offset(0, first_padding_byte.value()); - return encoded; + return TRY(encode_base64url(data_slice_be, AK::OmitPadding::Yes)); } WebIDL::ExceptionOr base64_url_bytes_decode(JS::Realm& realm, String const& base64_url_string) { auto& vm = realm.vm(); - // FIXME: Create a version of decode_base64url that ignores padding inconsistencies - auto padded_string = base64_url_string; - if (padded_string.byte_count() % 4 != 0) { - padded_string = TRY_OR_THROW_OOM(vm, String::formatted("{}{}", padded_string, TRY_OR_THROW_OOM(vm, String::repeated('=', 4 - (padded_string.byte_count() % 4))))); - } - - auto base64_bytes_or_error = decode_base64url(padded_string); + auto base64_bytes_or_error = decode_base64url(base64_url_string, AK::LastChunkHandling::Loose); if (base64_bytes_or_error.is_error()) { if (base64_bytes_or_error.error().code() == ENOMEM) return vm.throw_completion(vm.error_message(::JS::VM::ErrorMessage::OutOfMemory));