#pragma once #include #include #include namespace workerd::api { class DiffieHellman final { public: DiffieHellman(kj::StringPtr group); DiffieHellman(kj::OneOf, int>& sizeOrKey, kj::OneOf, int>& generator); DiffieHellman(DiffieHellman&&) = default; DiffieHellman& operator=(DiffieHellman&&) = default; KJ_DISALLOW_COPY(DiffieHellman); void setPrivateKey(kj::ArrayPtr key); void setPublicKey(kj::ArrayPtr key); jsg::JsUint8Array getPublicKey(jsg::Lock& js) KJ_WARN_UNUSED_RESULT; jsg::JsUint8Array getPrivateKey(jsg::Lock& js) KJ_WARN_UNUSED_RESULT; jsg::JsUint8Array getGenerator(jsg::Lock& js) KJ_WARN_UNUSED_RESULT; jsg::JsUint8Array getPrime(jsg::Lock& js) KJ_WARN_UNUSED_RESULT; jsg::JsUint8Array computeSecret(jsg::Lock& js, kj::ArrayPtr key) KJ_WARN_UNUSED_RESULT; jsg::JsUint8Array generateKeys(jsg::Lock& js) KJ_WARN_UNUSED_RESULT; kj::Maybe check() KJ_WARN_UNUSED_RESULT; private: kj::Own dh; }; } // namespace workerd::api