123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /*
- * Copyright (c) 2023, stelar7 <dudedbz@gmail.com>
- * Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #pragma once
- #include <AK/String.h>
- #include <LibCrypto/BigInt/UnsignedBigInteger.h>
- #include <LibJS/Runtime/Object.h>
- #include <LibWeb/Crypto/CryptoAlgorithms.h>
- #include <LibWeb/WebIDL/ExceptionOr.h>
- namespace Web::Crypto {
- // https://w3c.github.io/webcrypto/#key-algorithm-dictionary
- class KeyAlgorithm : public JS::Object {
- JS_OBJECT(KeyAlgorithm, JS::Object);
- JS_DECLARE_ALLOCATOR(KeyAlgorithm);
- public:
- static JS::NonnullGCPtr<KeyAlgorithm> create(JS::Realm&);
- virtual ~KeyAlgorithm() override = default;
- String const& name() const { return m_name; }
- void set_name(String name) { m_name = move(name); }
- JS::Realm& realm() const { return m_realm; }
- protected:
- KeyAlgorithm(JS::Realm&);
- virtual void initialize(JS::Realm&) override;
- virtual void visit_edges(Visitor&) override;
- private:
- JS_DECLARE_NATIVE_FUNCTION(name_getter);
- String m_name;
- JS::NonnullGCPtr<JS::Realm> m_realm;
- };
- // https://w3c.github.io/webcrypto/#RsaKeyAlgorithm-dictionary
- class RsaKeyAlgorithm : public KeyAlgorithm {
- JS_OBJECT(RsaKeyAlgorithm, KeyAlgorithm);
- JS_DECLARE_ALLOCATOR(RsaKeyAlgorithm);
- public:
- static JS::NonnullGCPtr<RsaKeyAlgorithm> create(JS::Realm&);
- virtual ~RsaKeyAlgorithm() override = default;
- u32 modulus_length() const { return m_modulus_length; }
- void set_modulus_length(u32 modulus_length) { m_modulus_length = modulus_length; }
- JS::NonnullGCPtr<JS::Uint8Array> public_exponent() const { return m_public_exponent; }
- void set_public_exponent(JS::NonnullGCPtr<JS::Uint8Array> public_exponent) { m_public_exponent = public_exponent; }
- WebIDL::ExceptionOr<void> set_public_exponent(::Crypto::UnsignedBigInteger);
- protected:
- RsaKeyAlgorithm(JS::Realm&);
- virtual void initialize(JS::Realm&) override;
- virtual void visit_edges(Visitor&) override;
- private:
- JS_DECLARE_NATIVE_FUNCTION(modulus_length_getter);
- JS_DECLARE_NATIVE_FUNCTION(public_exponent_getter);
- u32 m_modulus_length { 0 };
- JS::NonnullGCPtr<JS::Uint8Array> m_public_exponent;
- };
- // https://w3c.github.io/webcrypto/#RsaHashedKeyAlgorithm-dictionary
- class RsaHashedKeyAlgorithm : public RsaKeyAlgorithm {
- JS_OBJECT(RsaHashedKeyAlgorithm, RsaKeyAlgorithm);
- JS_DECLARE_ALLOCATOR(RsaHashedKeyAlgorithm);
- public:
- static JS::NonnullGCPtr<RsaHashedKeyAlgorithm> create(JS::Realm&);
- virtual ~RsaHashedKeyAlgorithm() override = default;
- HashAlgorithmIdentifier const& hash() const { return m_hash; }
- void set_hash(HashAlgorithmIdentifier hash) { m_hash = move(hash); }
- protected:
- RsaHashedKeyAlgorithm(JS::Realm&);
- virtual void initialize(JS::Realm&) override;
- private:
- JS_DECLARE_NATIVE_FUNCTION(hash_getter);
- HashAlgorithmIdentifier m_hash;
- };
- // https://w3c.github.io/webcrypto/#EcKeyAlgorithm-dictionary
- class EcKeyAlgorithm : public KeyAlgorithm {
- JS_OBJECT(EcKeyAlgorithm, KeyAlgorithm);
- JS_DECLARE_ALLOCATOR(EcKeyAlgorithm);
- public:
- static JS::NonnullGCPtr<EcKeyAlgorithm> create(JS::Realm&);
- virtual ~EcKeyAlgorithm() override = default;
- NamedCurve named_curve() const { return m_named_curve; }
- void set_named_curve(NamedCurve named_curve) { m_named_curve = named_curve; }
- protected:
- EcKeyAlgorithm(JS::Realm&);
- virtual void initialize(JS::Realm&) override;
- private:
- JS_DECLARE_NATIVE_FUNCTION(named_curve_getter);
- NamedCurve m_named_curve;
- };
- }
|