9
9
#include " threadpoolwork-inl.h"
10
10
#include " v8.h"
11
11
12
+ #include < variant>
13
+
12
14
namespace node {
13
15
14
16
using v8::ArrayBuffer;
@@ -437,7 +439,7 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
437
439
return Nothing<bool >();
438
440
}
439
441
440
- params->params .prime_fixed_value = BignumPointer (
442
+ params->params .prime = BignumPointer (
441
443
BN_bin2bn (reinterpret_cast <const unsigned char *>(group->prime ),
442
444
group->prime_size , nullptr ));
443
445
params->params .generator = group->gen ;
@@ -449,14 +451,14 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
449
451
THROW_ERR_OUT_OF_RANGE (env, " Invalid prime size" );
450
452
return Nothing<bool >();
451
453
}
452
- params->params .prime_size = size;
454
+ params->params .prime = size;
453
455
} else {
454
456
ArrayBufferOrViewContents<unsigned char > input (args[*offset]);
455
457
if (UNLIKELY (!input.CheckSizeInt32 ())) {
456
458
THROW_ERR_OUT_OF_RANGE (env, " prime is too big" );
457
459
return Nothing<bool >();
458
460
}
459
- params->params .prime_fixed_value = BignumPointer (
461
+ params->params .prime = BignumPointer (
460
462
BN_bin2bn (input.data (), input.size (), nullptr ));
461
463
}
462
464
@@ -470,31 +472,33 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
470
472
471
473
EVPKeyCtxPointer DhKeyGenTraits::Setup (DhKeyPairGenConfig* params) {
472
474
EVPKeyPointer key_params;
473
- if (params->params .prime_fixed_value ) {
475
+ if (BignumPointer* prime_fixed_value =
476
+ std::get_if<BignumPointer>(¶ms->params .prime )) {
474
477
DHPointer dh (DH_new ());
475
478
if (!dh)
476
479
return EVPKeyCtxPointer ();
477
480
478
- BIGNUM* prime = params-> params . prime_fixed_value . get ();
481
+ BIGNUM* prime = prime_fixed_value-> get ();
479
482
BignumPointer bn_g (BN_new ());
480
483
if (!BN_set_word (bn_g.get (), params->params .generator ) ||
481
- !DH_set0_pqg (dh.get (), prime, nullptr , bn_g.get ()))
484
+ !DH_set0_pqg (dh.get (), prime, nullptr , bn_g.get ())) {
482
485
return EVPKeyCtxPointer ();
486
+ }
483
487
484
- params-> params . prime_fixed_value . release ();
488
+ prime_fixed_value-> release ();
485
489
bn_g.release ();
486
490
487
491
key_params = EVPKeyPointer (EVP_PKEY_new ());
488
492
CHECK (key_params);
489
- EVP_PKEY_assign_DH (key_params.get (), dh.release ());
490
- } else {
493
+ CHECK_EQ ( EVP_PKEY_assign_DH (key_params.get (), dh.release ()), 1 );
494
+ } else if ( int * prime_size = std::get_if< int >(¶ms-> params . prime )) {
491
495
EVPKeyCtxPointer param_ctx (EVP_PKEY_CTX_new_id (EVP_PKEY_DH, nullptr ));
492
496
EVP_PKEY* raw_params = nullptr ;
493
497
if (!param_ctx ||
494
498
EVP_PKEY_paramgen_init (param_ctx.get ()) <= 0 ||
495
499
EVP_PKEY_CTX_set_dh_paramgen_prime_len (
496
500
param_ctx.get (),
497
- params-> params . prime_size ) <= 0 ||
501
+ * prime_size) <= 0 ||
498
502
EVP_PKEY_CTX_set_dh_paramgen_generator (
499
503
param_ctx.get (),
500
504
params->params .generator ) <= 0 ||
@@ -503,6 +507,8 @@ EVPKeyCtxPointer DhKeyGenTraits::Setup(DhKeyPairGenConfig* params) {
503
507
}
504
508
505
509
key_params = EVPKeyPointer (raw_params);
510
+ } else {
511
+ UNREACHABLE ();
506
512
}
507
513
508
514
EVPKeyCtxPointer ctx (EVP_PKEY_CTX_new (key_params.get (), nullptr ));
0 commit comments