浏览代码

LibWeb: Implement PBKDF2 getKeyLength for SubtleCrypto

stelar7 1 年之前
父节点
当前提交
abf55fe33d

+ 6 - 0
Userland/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp

@@ -1397,4 +1397,10 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<JS::ArrayBuffer>> PBKDF2::derive_bits(Algor
     return JS::ArrayBuffer::create(realm, result.release_value());
 }
 
+WebIDL::ExceptionOr<JS::Value> PBKDF2::get_key_length(AlgorithmParams const&)
+{
+    // 1. Return null.
+    return JS::js_null();
+}
+
 }

+ 6 - 0
Userland/Libraries/LibWeb/Crypto/CryptoAlgorithms.h

@@ -197,6 +197,11 @@ public:
         return WebIDL::NotSupportedError::create(m_realm, "exportKey is not supported"_fly_string);
     }
 
+    virtual WebIDL::ExceptionOr<JS::Value> get_key_length(AlgorithmParams const&)
+    {
+        return WebIDL::NotSupportedError::create(m_realm, "getKeyLength is not supported"_fly_string);
+    }
+
     static NonnullOwnPtr<AlgorithmMethods> create(JS::Realm& realm) { return adopt_own(*new AlgorithmMethods(realm)); }
 
 protected:
@@ -231,6 +236,7 @@ class PBKDF2 : public AlgorithmMethods {
 public:
     virtual WebIDL::ExceptionOr<JS::NonnullGCPtr<CryptoKey>> import_key(AlgorithmParams const&, Bindings::KeyFormat, CryptoKey::InternalKeyData, bool, Vector<Bindings::KeyUsage> const&) override;
     virtual WebIDL::ExceptionOr<JS::NonnullGCPtr<JS::ArrayBuffer>> derive_bits(AlgorithmParams const&, JS::NonnullGCPtr<CryptoKey>, u32) override;
+    virtual WebIDL::ExceptionOr<JS::Value> get_key_length(AlgorithmParams const&) override;
 
     static NonnullOwnPtr<AlgorithmMethods> create(JS::Realm& realm) { return adopt_own(*new PBKDF2(realm)); }
 

+ 1 - 1
Userland/Libraries/LibWeb/Crypto/SubtleCrypto.cpp

@@ -677,7 +677,7 @@ SupportedAlgorithmsMap supported_algorithms()
     // https://w3c.github.io/webcrypto/#pbkdf2
     define_an_algorithm<PBKDF2>("importKey"_string, "PBKDF2"_string);
     define_an_algorithm<PBKDF2, PBKDF2Params>("deriveBits"_string, "PBKDF2"_string);
-    // FIXME: define_an_algorithm("get key length"_string, "PBKDF2"_string, ""_string);
+    define_an_algorithm<PBKDF2>("get key length"_string, "PBKDF2"_string);
 
     // https://w3c.github.io/webcrypto/#rsa-oaep
     define_an_algorithm<RSAOAEP, RsaHashedKeyGenParams>("generateKey"_string, "RSA-OAEP"_string);