LibWeb: Port SubtleCrypto to new String
The algorithm comparison in digest() is done using a StringView to avoid complex error handling and promise rejection.
This commit is contained in:
parent
a8cef1fa06
commit
f783af05ed
Notes:
sideshowbarker
2024-07-16 23:49:19 +09:00
Author: https://github.com/kennethmyhra Commit: https://github.com/SerenityOS/serenity/commit/f783af05ed Pull-request: https://github.com/SerenityOS/serenity/pull/17596
3 changed files with 8 additions and 7 deletions
|
@ -35,7 +35,7 @@ JS::ThrowCompletionOr<void> SubtleCrypto::initialize(JS::Realm& realm)
|
|||
}
|
||||
|
||||
// https://w3c.github.io/webcrypto/#dfn-SubtleCrypto-method-digest
|
||||
JS::Promise* SubtleCrypto::digest(DeprecatedString const& algorithm, JS::Handle<JS::Object> const& data)
|
||||
JS::Promise* SubtleCrypto::digest(String const& algorithm, JS::Handle<JS::Object> const& data)
|
||||
{
|
||||
auto& realm = this->realm();
|
||||
|
||||
|
@ -54,13 +54,14 @@ JS::Promise* SubtleCrypto::digest(DeprecatedString const& algorithm, JS::Handle<
|
|||
// 3. Let normalizedAlgorithm be the result of normalizing an algorithm, with alg set to algorithm and op set to "digest".
|
||||
// FIXME: This is way more generic than it needs to be right now, so we simplify it.
|
||||
::Crypto::Hash::HashKind hash_kind;
|
||||
if (algorithm.equals_ignoring_case("SHA-1"sv)) {
|
||||
auto algorithm_as_string_view = algorithm.bytes_as_string_view();
|
||||
if (algorithm_as_string_view.equals_ignoring_case("SHA-1"sv)) {
|
||||
hash_kind = ::Crypto::Hash::HashKind::SHA1;
|
||||
} else if (algorithm.equals_ignoring_case("SHA-256"sv)) {
|
||||
} else if (algorithm_as_string_view.equals_ignoring_case("SHA-256"sv)) {
|
||||
hash_kind = ::Crypto::Hash::HashKind::SHA256;
|
||||
} else if (algorithm.equals_ignoring_case("SHA-384"sv)) {
|
||||
} else if (algorithm_as_string_view.equals_ignoring_case("SHA-384"sv)) {
|
||||
hash_kind = ::Crypto::Hash::HashKind::SHA384;
|
||||
} else if (algorithm.equals_ignoring_case("SHA-512"sv)) {
|
||||
} else if (algorithm_as_string_view.equals_ignoring_case("SHA-512"sv)) {
|
||||
hash_kind = ::Crypto::Hash::HashKind::SHA512;
|
||||
}
|
||||
// 4. If an error occurred, return a Promise rejected with normalizedAlgorithm.
|
||||
|
|
|
@ -19,7 +19,7 @@ public:
|
|||
|
||||
virtual ~SubtleCrypto() override;
|
||||
|
||||
JS::Promise* digest(DeprecatedString const& algorithm, JS::Handle<JS::Object> const& data);
|
||||
JS::Promise* digest(String const& algorithm, JS::Handle<JS::Object> const& data);
|
||||
|
||||
private:
|
||||
explicit SubtleCrypto(JS::Realm&);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[SecureContext,Exposed=(Window,Worker)]
|
||||
[SecureContext,Exposed=(Window,Worker), UseNewAKString]
|
||||
interface SubtleCrypto {
|
||||
// FIXME: Add support for AlgorithmIdentifier ("typedef (object or DOMString)")
|
||||
Promise<any> digest(DOMString algorithm, BufferSource data);
|
||||
|
|
Loading…
Add table
Reference in a new issue