Skip to content

Commit 7bb3d43

Browse files
joyeecheungBethGriggs
authored andcommitted
src: register external references in crypto bindings
PR-URL: #40239 Refs: #38905 Refs: #37476 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent af4e682 commit 7bb3d43

38 files changed

+405
-33
lines changed

src/crypto/crypto_aes.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,5 +603,9 @@ void AES::Initialize(Environment* env, Local<Object> target) {
603603
#undef V
604604
}
605605

606+
void AES::RegisterExternalReferences(ExternalReferenceRegistry* registry) {
607+
AESCryptoJob::RegisterExternalReferences(registry);
608+
}
609+
606610
} // namespace crypto
607611
} // namespace node

src/crypto/crypto_aes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ using AESCryptoJob = CipherJob<AESCipherTraits>;
8181

8282
namespace AES {
8383
void Initialize(Environment* env, v8::Local<v8::Object> target);
84+
void RegisterExternalReferences(ExternalReferenceRegistry* registry);
8485
} // namespace AES
8586
} // namespace crypto
8687
} // namespace node

src/crypto/crypto_cipher.cc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,38 @@ void CipherBase::Initialize(Environment* env, Local<Object> target) {
297297
NODE_DEFINE_CONSTANT(target, kWebCryptoCipherDecrypt);
298298
}
299299

300+
void CipherBase::RegisterExternalReferences(
301+
ExternalReferenceRegistry* registry) {
302+
registry->Register(New);
303+
304+
registry->Register(Init);
305+
registry->Register(InitIv);
306+
registry->Register(Update);
307+
registry->Register(Final);
308+
registry->Register(SetAutoPadding);
309+
registry->Register(GetAuthTag);
310+
registry->Register(SetAuthTag);
311+
registry->Register(SetAAD);
312+
313+
registry->Register(GetSSLCiphers);
314+
registry->Register(GetCiphers);
315+
316+
registry->Register(PublicKeyCipher::Cipher<PublicKeyCipher::kPublic,
317+
EVP_PKEY_encrypt_init,
318+
EVP_PKEY_encrypt>);
319+
registry->Register(PublicKeyCipher::Cipher<PublicKeyCipher::kPrivate,
320+
EVP_PKEY_decrypt_init,
321+
EVP_PKEY_decrypt>);
322+
registry->Register(PublicKeyCipher::Cipher<PublicKeyCipher::kPrivate,
323+
EVP_PKEY_sign_init,
324+
EVP_PKEY_sign>);
325+
registry->Register(PublicKeyCipher::Cipher<PublicKeyCipher::kPublic,
326+
EVP_PKEY_verify_recover_init,
327+
EVP_PKEY_verify_recover>);
328+
329+
registry->Register(GetCipherInfo);
330+
}
331+
300332
void CipherBase::New(const FunctionCallbackInfo<Value>& args) {
301333
CHECK(args.IsConstructCall());
302334
Environment* env = Environment::GetCurrent(args);

src/crypto/crypto_cipher.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class CipherBase : public BaseObject {
2121
static void GetCiphers(const v8::FunctionCallbackInfo<v8::Value>& args);
2222

2323
static void Initialize(Environment* env, v8::Local<v8::Object> target);
24+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
2425

2526
void MemoryInfo(MemoryTracker* tracker) const override;
2627
SET_MEMORY_INFO_NAME(CipherBase)
@@ -190,6 +191,10 @@ class CipherJob final : public CryptoJob<CipherTraits> {
190191
CryptoJob<CipherTraits>::Initialize(New, env, target);
191192
}
192193

194+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
195+
CryptoJob<CipherTraits>::RegisterExternalReferences(New, registry);
196+
}
197+
193198
CipherJob(
194199
Environment* env,
195200
v8::Local<v8::Object> object,

src/crypto/crypto_context.cc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,47 @@ void SecureContext::Initialize(Environment* env, Local<Object> target) {
339339
IsExtraRootCertsFileLoaded);
340340
}
341341

342+
void SecureContext::RegisterExternalReferences(
343+
ExternalReferenceRegistry* registry) {
344+
registry->Register(New);
345+
registry->Register(Init);
346+
registry->Register(SetKey);
347+
registry->Register(SetCert);
348+
registry->Register(AddCACert);
349+
registry->Register(AddCRL);
350+
registry->Register(AddRootCerts);
351+
registry->Register(SetCipherSuites);
352+
registry->Register(SetCiphers);
353+
registry->Register(SetSigalgs);
354+
registry->Register(SetECDHCurve);
355+
registry->Register(SetDHParam);
356+
registry->Register(SetMaxProto);
357+
registry->Register(SetMinProto);
358+
registry->Register(GetMaxProto);
359+
registry->Register(GetMinProto);
360+
registry->Register(SetOptions);
361+
registry->Register(SetSessionIdContext);
362+
registry->Register(SetSessionTimeout);
363+
registry->Register(Close);
364+
registry->Register(LoadPKCS12);
365+
registry->Register(SetTicketKeys);
366+
registry->Register(SetFreeListLength);
367+
registry->Register(EnableTicketKeyCallback);
368+
registry->Register(GetTicketKeys);
369+
registry->Register(GetCertificate<true>);
370+
registry->Register(GetCertificate<false>);
371+
372+
#ifndef OPENSSL_NO_ENGINE
373+
registry->Register(SetEngineKey);
374+
registry->Register(SetClientCertEngine);
375+
#endif // !OPENSSL_NO_ENGINE
376+
377+
registry->Register(CtxGetter);
378+
379+
registry->Register(GetRootCertificates);
380+
registry->Register(IsExtraRootCertsFileLoaded);
381+
}
382+
342383
SecureContext* SecureContext::Create(Environment* env) {
343384
Local<Object> obj;
344385
if (!GetConstructorTemplate(env)

src/crypto/crypto_context.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class SecureContext final : public BaseObject {
3838
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
3939
Environment* env);
4040
static void Initialize(Environment* env, v8::Local<v8::Object> target);
41+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
4142
static SecureContext* Create(Environment* env);
4243

4344
SSL_CTX* operator*() const { return ctx_.get(); }

src/crypto/crypto_dh.cc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,28 @@ void DiffieHellman::Initialize(Environment* env, Local<Object> target) {
108108
DHBitsJob::Initialize(env, target);
109109
}
110110

111+
void DiffieHellman::RegisterExternalReferences(
112+
ExternalReferenceRegistry* registry) {
113+
registry->Register(New);
114+
registry->Register(DiffieHellmanGroup);
115+
116+
registry->Register(GenerateKeys);
117+
registry->Register(ComputeSecret);
118+
registry->Register(GetPrime);
119+
registry->Register(GetGenerator);
120+
registry->Register(GetPublicKey);
121+
registry->Register(GetPrivateKey);
122+
registry->Register(SetPublicKey);
123+
registry->Register(SetPrivateKey);
124+
125+
registry->Register(DiffieHellman::VerifyErrorGetter);
126+
registry->Register(DiffieHellman::Stateless);
127+
128+
DHKeyPairGenJob::RegisterExternalReferences(registry);
129+
DHKeyExportJob::RegisterExternalReferences(registry);
130+
DHBitsJob::RegisterExternalReferences(registry);
131+
}
132+
111133
bool DiffieHellman::Init(int primeLength, int g) {
112134
dh_.reset(DH_new());
113135
if (!DH_generate_parameters_ex(dh_.get(), primeLength, g, nullptr))

src/crypto/crypto_dh.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ namespace crypto {
1717
class DiffieHellman : public BaseObject {
1818
public:
1919
static void Initialize(Environment* env, v8::Local<v8::Object> target);
20+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
2021

2122
bool Init(int primeLength, int g);
2223
bool Init(const char* p, int p_len, int g);

src/crypto/crypto_dsa.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@ void Initialize(Environment* env, Local<Object> target) {
167167
DsaKeyPairGenJob::Initialize(env, target);
168168
DSAKeyExportJob::Initialize(env, target);
169169
}
170+
171+
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
172+
DsaKeyPairGenJob::RegisterExternalReferences(registry);
173+
DSAKeyExportJob::RegisterExternalReferences(registry);
174+
}
170175
} // namespace DSAAlg
171176
} // namespace crypto
172177
} // namespace node

src/crypto/crypto_dsa.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ v8::Maybe<bool> GetDsaKeyDetail(
6868

6969
namespace DSAAlg {
7070
void Initialize(Environment* env, v8::Local<v8::Object> target);
71+
void RegisterExternalReferences(ExternalReferenceRegistry* registry);
7172
} // namespace DSAAlg
7273
} // namespace crypto
7374
} // namespace node

0 commit comments

Comments
 (0)