Skip to content
File

Blob: src/workerd/api/crypto/dh.h

cpp37 lines
1#pragma once
2 
3#include <workerd/jsg/jsg.h>
4 
5#include <openssl/base.h>
6 
7#include <kj/common.h>
8 
9namespace workerd::api {
10 
11class DiffieHellman final {
12 public:
13 DiffieHellman(kj::StringPtr group);
14 DiffieHellman(kj::OneOf<kj::Array<kj::byte>, int>& sizeOrKey,
15 kj::OneOf<kj::Array<kj::byte>, int>& generator);
16 DiffieHellman(DiffieHellman&&) = default;
17 DiffieHellman& operator=(DiffieHellman&&) = default;
18 KJ_DISALLOW_COPY(DiffieHellman);
19 
20 void setPrivateKey(kj::ArrayPtr<kj::byte> key);
21 void setPublicKey(kj::ArrayPtr<kj::byte> key);
22 
23 jsg::JsUint8Array getPublicKey(jsg::Lock& js) KJ_WARN_UNUSED_RESULT;
24 jsg::JsUint8Array getPrivateKey(jsg::Lock& js) KJ_WARN_UNUSED_RESULT;
25 jsg::JsUint8Array getGenerator(jsg::Lock& js) KJ_WARN_UNUSED_RESULT;
26 jsg::JsUint8Array getPrime(jsg::Lock& js) KJ_WARN_UNUSED_RESULT;
27 jsg::JsUint8Array computeSecret(jsg::Lock& js, kj::ArrayPtr<kj::byte> key) KJ_WARN_UNUSED_RESULT;
28 jsg::JsUint8Array generateKeys(jsg::Lock& js) KJ_WARN_UNUSED_RESULT;
29 
30 kj::Maybe<int> check() KJ_WARN_UNUSED_RESULT;
31 
32 private:
33 kj::Own<DH> dh;
34};
35 
36} // namespace workerd::api