summaryrefslogtreecommitdiff
path: root/Source/WebCore/crypto/keys/CryptoKeyHMAC.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/crypto/keys/CryptoKeyHMAC.h')
-rw-r--r--Source/WebCore/crypto/keys/CryptoKeyHMAC.h59
1 files changed, 40 insertions, 19 deletions
diff --git a/Source/WebCore/crypto/keys/CryptoKeyHMAC.h b/Source/WebCore/crypto/keys/CryptoKeyHMAC.h
index 6e5b359a3..25c24527c 100644
--- a/Source/WebCore/crypto/keys/CryptoKeyHMAC.h
+++ b/Source/WebCore/crypto/keys/CryptoKeyHMAC.h
@@ -23,51 +23,72 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef CryptoKeyHMAC_h
-#define CryptoKeyHMAC_h
+#pragma once
+
+#if ENABLE(SUBTLE_CRYPTO)
#include "CryptoKey.h"
+#include <wtf/Function.h>
#include <wtf/Vector.h>
-#if ENABLE(SUBTLE_CRYPTO)
-
namespace WebCore {
+struct JsonWebKey;
+
+class HmacKeyAlgorithm final : public KeyAlgorithm {
+public:
+ HmacKeyAlgorithm(const String& name, const String& hash, size_t length)
+ : KeyAlgorithm(name)
+ , m_hash(hash)
+ , m_length(length)
+ {
+ }
+
+ KeyAlgorithmClass keyAlgorithmClass() const final { return KeyAlgorithmClass::HMAC; }
+
+ const String& hash() const { return m_hash; }
+ size_t length() const { return m_length; }
+
+private:
+ String m_hash;
+ size_t m_length;
+};
+
class CryptoKeyHMAC final : public CryptoKey {
public:
- static PassRefPtr<CryptoKeyHMAC> create(const Vector<uint8_t>& key, CryptoAlgorithmIdentifier hash, bool extractable, CryptoKeyUsage usage)
+ static Ref<CryptoKeyHMAC> create(const Vector<uint8_t>& key, CryptoAlgorithmIdentifier hash, bool extractable, CryptoKeyUsageBitmap usage)
{
- return adoptRef(new CryptoKeyHMAC(key, hash, extractable, usage));
+ return adoptRef(*new CryptoKeyHMAC(key, hash, extractable, usage));
}
virtual ~CryptoKeyHMAC();
- // If lengthBytes is 0, a recommended length is used, which is the size of the associated hash function's block size.
- static PassRefPtr<CryptoKeyHMAC> generate(size_t lengthBytes, CryptoAlgorithmIdentifier hash, bool extractable, CryptoKeyUsage);
+ static RefPtr<CryptoKeyHMAC> generate(size_t lengthBits, CryptoAlgorithmIdentifier hash, bool extractable, CryptoKeyUsageBitmap);
+ static RefPtr<CryptoKeyHMAC> importRaw(size_t lengthBits, CryptoAlgorithmIdentifier hash, Vector<uint8_t>&& keyData, bool extractable, CryptoKeyUsageBitmap);
+ using CheckAlgCallback = Function<bool(CryptoAlgorithmIdentifier, const String&)>;
+ static RefPtr<CryptoKeyHMAC> importJwk(size_t lengthBits, CryptoAlgorithmIdentifier hash, JsonWebKey&&, bool extractable, CryptoKeyUsageBitmap, CheckAlgCallback&&);
- virtual CryptoKeyClass keyClass() const override { return CryptoKeyClass::HMAC; }
+ CryptoKeyClass keyClass() const final { return CryptoKeyClass::HMAC; }
const Vector<uint8_t>& key() const { return m_key; }
+ JsonWebKey exportJwk() const;
CryptoAlgorithmIdentifier hashAlgorithmIdentifier() const { return m_hash; }
private:
- CryptoKeyHMAC(const Vector<uint8_t>& key, CryptoAlgorithmIdentifier hash, bool extractable, CryptoKeyUsage);
+ CryptoKeyHMAC(const Vector<uint8_t>& key, CryptoAlgorithmIdentifier hash, bool extractable, CryptoKeyUsageBitmap);
+ CryptoKeyHMAC(Vector<uint8_t>&& key, CryptoAlgorithmIdentifier hash, bool extractable, CryptoKeyUsageBitmap);
- virtual void buildAlgorithmDescription(CryptoAlgorithmDescriptionBuilder&) const override;
- virtual std::unique_ptr<CryptoKeyData> exportData() const override;
+ std::unique_ptr<KeyAlgorithm> buildAlgorithm() const final;
+ std::unique_ptr<CryptoKeyData> exportData() const final;
CryptoAlgorithmIdentifier m_hash;
Vector<uint8_t> m_key;
};
-inline bool isCryptoKeyHMAC(const CryptoKey& key)
-{
- return key.keyClass() == CryptoKeyClass::HMAC;
-}
+} // namespace WebCore
-CRYPTO_KEY_TYPE_CASTS(CryptoKeyHMAC)
+SPECIALIZE_TYPE_TRAITS_CRYPTO_KEY(CryptoKeyHMAC, CryptoKeyClass::HMAC)
-} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_KEY_ALGORITHM(HmacKeyAlgorithm, KeyAlgorithmClass::HMAC)
#endif // ENABLE(SUBTLE_CRYPTO)
-#endif // CryptoKeyHMAC_h