diff options
Diffstat (limited to 'Source/WebCore/crypto/keys/CryptoKeyHMAC.h')
-rw-r--r-- | Source/WebCore/crypto/keys/CryptoKeyHMAC.h | 59 |
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 |