diff --git a/Tests/LibWeb/Text/expected/subtle-crypto-hkdf-salt-empty-or-none.txt b/Tests/LibWeb/Text/expected/subtle-crypto-hkdf-salt-empty-or-none.txt new file mode 100644 index 00000000000..830c7666f1c --- /dev/null +++ b/Tests/LibWeb/Text/expected/subtle-crypto-hkdf-salt-empty-or-none.txt @@ -0,0 +1,2 @@ +136,95,192,41,179,34,75,137,110,9,224,187,229,235,52,126,197,158,104,39,200,232,87,179,148,245,79,244,155,136,168,246,83,68,116,156,52,46,53,108,71,252 +Absent salt rejected! TypeError: Not an object of type BufferSource diff --git a/Tests/LibWeb/Text/input/subtle-crypto-hkdf-salt-empty-or-none.html b/Tests/LibWeb/Text/input/subtle-crypto-hkdf-salt-empty-or-none.html new file mode 100644 index 00000000000..755ee746cdb --- /dev/null +++ b/Tests/LibWeb/Text/input/subtle-crypto-hkdf-salt-empty-or-none.html @@ -0,0 +1,38 @@ + + + diff --git a/Userland/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp b/Userland/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp index bb481b08afa..d1d3c89ff44 100644 --- a/Userland/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp +++ b/Userland/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp @@ -1467,7 +1467,10 @@ WebIDL::ExceptionOr> HKDF::derive_bits(Algorit // * the contents of the salt member of normalizedAlgorithm as salt, // * the contents of the info member of normalizedAlgorithm as info, // * length divided by 8 as the value of L, - // FIXME: salt null versus salt empty?! + // Note: Although HKDF technically supports absent salt (treating it as hashLen many NUL bytes), + // all major browsers instead raise a TypeError, for example: + // "Failed to execute 'deriveBits' on 'SubtleCrypto': HkdfParams: salt: Not a BufferSource" + // Because we are forced by neither peer pressure nor the spec, we don't support it either. auto const& hash_algorithm = TRY(normalized_algorithm.hash.visit( [](String const& name) -> JS::ThrowCompletionOr { return name; }, [&](JS::Handle const& obj) -> JS::ThrowCompletionOr {