Skip to content

Commit 1336830

Browse files
bnoordhuisjasnell
authored andcommittedOct 21, 2018
crypto: DRY Diffie-Hellman initialization code
PR-URL: #23657 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Richard Lau <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Refael Ackermann <[email protected]>
1 parent add4f01 commit 1336830

File tree

1 file changed

+38
-60
lines changed

1 file changed

+38
-60
lines changed
 

‎src/node_crypto.cc

+38-60
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ using v8::DontDelete;
6161
using v8::EscapableHandleScope;
6262
using v8::Exception;
6363
using v8::External;
64+
using v8::FunctionCallback;
6465
using v8::FunctionCallbackInfo;
6566
using v8::FunctionTemplate;
6667
using v8::HandleScope;
@@ -3923,67 +3924,44 @@ void PublicKeyCipher::Cipher(const FunctionCallbackInfo<Value>& args) {
39233924

39243925

39253926
void DiffieHellman::Initialize(Environment* env, Local<Object> target) {
3926-
Local<FunctionTemplate> t = env->NewFunctionTemplate(New);
3927-
3928-
const PropertyAttribute attributes =
3929-
static_cast<PropertyAttribute>(v8::ReadOnly | v8::DontDelete);
3930-
3931-
t->InstanceTemplate()->SetInternalFieldCount(1);
3932-
3933-
env->SetProtoMethod(t, "generateKeys", GenerateKeys);
3934-
env->SetProtoMethod(t, "computeSecret", ComputeSecret);
3935-
env->SetProtoMethodNoSideEffect(t, "getPrime", GetPrime);
3936-
env->SetProtoMethodNoSideEffect(t, "getGenerator", GetGenerator);
3937-
env->SetProtoMethodNoSideEffect(t, "getPublicKey", GetPublicKey);
3938-
env->SetProtoMethodNoSideEffect(t, "getPrivateKey", GetPrivateKey);
3939-
env->SetProtoMethod(t, "setPublicKey", SetPublicKey);
3940-
env->SetProtoMethod(t, "setPrivateKey", SetPrivateKey);
3941-
3942-
Local<FunctionTemplate> verify_error_getter_templ =
3943-
FunctionTemplate::New(env->isolate(),
3944-
DiffieHellman::VerifyErrorGetter,
3945-
env->as_external(),
3946-
Signature::New(env->isolate(), t),
3947-
/* length */ 0,
3948-
ConstructorBehavior::kThrow,
3949-
SideEffectType::kHasNoSideEffect);
3950-
3951-
t->InstanceTemplate()->SetAccessorProperty(
3952-
env->verify_error_string(),
3953-
verify_error_getter_templ,
3954-
Local<FunctionTemplate>(),
3955-
attributes);
3956-
3957-
target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "DiffieHellman"),
3958-
t->GetFunction(env->context()).ToLocalChecked());
3959-
3960-
Local<FunctionTemplate> t2 = env->NewFunctionTemplate(DiffieHellmanGroup);
3961-
t2->InstanceTemplate()->SetInternalFieldCount(1);
3962-
3963-
env->SetProtoMethod(t2, "generateKeys", GenerateKeys);
3964-
env->SetProtoMethod(t2, "computeSecret", ComputeSecret);
3965-
env->SetProtoMethodNoSideEffect(t2, "getPrime", GetPrime);
3966-
env->SetProtoMethodNoSideEffect(t2, "getGenerator", GetGenerator);
3967-
env->SetProtoMethodNoSideEffect(t2, "getPublicKey", GetPublicKey);
3968-
env->SetProtoMethodNoSideEffect(t2, "getPrivateKey", GetPrivateKey);
3969-
3970-
Local<FunctionTemplate> verify_error_getter_templ2 =
3971-
FunctionTemplate::New(env->isolate(),
3972-
DiffieHellman::VerifyErrorGetter,
3973-
env->as_external(),
3974-
Signature::New(env->isolate(), t2),
3975-
/* length */ 0,
3976-
ConstructorBehavior::kThrow,
3977-
SideEffectType::kHasNoSideEffect);
3978-
3979-
t2->InstanceTemplate()->SetAccessorProperty(
3980-
env->verify_error_string(),
3981-
verify_error_getter_templ2,
3982-
Local<FunctionTemplate>(),
3983-
attributes);
3927+
auto make = [&] (Local<String> name, FunctionCallback callback) {
3928+
Local<FunctionTemplate> t = env->NewFunctionTemplate(callback);
3929+
3930+
const PropertyAttribute attributes =
3931+
static_cast<PropertyAttribute>(v8::ReadOnly | v8::DontDelete);
3932+
3933+
t->InstanceTemplate()->SetInternalFieldCount(1);
3934+
3935+
env->SetProtoMethod(t, "generateKeys", GenerateKeys);
3936+
env->SetProtoMethod(t, "computeSecret", ComputeSecret);
3937+
env->SetProtoMethodNoSideEffect(t, "getPrime", GetPrime);
3938+
env->SetProtoMethodNoSideEffect(t, "getGenerator", GetGenerator);
3939+
env->SetProtoMethodNoSideEffect(t, "getPublicKey", GetPublicKey);
3940+
env->SetProtoMethodNoSideEffect(t, "getPrivateKey", GetPrivateKey);
3941+
env->SetProtoMethod(t, "setPublicKey", SetPublicKey);
3942+
env->SetProtoMethod(t, "setPrivateKey", SetPrivateKey);
3943+
3944+
Local<FunctionTemplate> verify_error_getter_templ =
3945+
FunctionTemplate::New(env->isolate(),
3946+
DiffieHellman::VerifyErrorGetter,
3947+
env->as_external(),
3948+
Signature::New(env->isolate(), t),
3949+
/* length */ 0,
3950+
ConstructorBehavior::kThrow,
3951+
SideEffectType::kHasNoSideEffect);
3952+
3953+
t->InstanceTemplate()->SetAccessorProperty(
3954+
env->verify_error_string(),
3955+
verify_error_getter_templ,
3956+
Local<FunctionTemplate>(),
3957+
attributes);
3958+
3959+
target->Set(name, t->GetFunction(env->context()).ToLocalChecked());
3960+
};
39843961

3985-
target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "DiffieHellmanGroup"),
3986-
t2->GetFunction(env->context()).ToLocalChecked());
3962+
make(FIXED_ONE_BYTE_STRING(env->isolate(), "DiffieHellman"), New);
3963+
make(FIXED_ONE_BYTE_STRING(env->isolate(), "DiffieHellmanGroup"),
3964+
DiffieHellmanGroup);
39873965
}
39883966

39893967

0 commit comments

Comments
 (0)
Please sign in to comment.