99#include " threadpoolwork-inl.h"
1010#include " v8.h"
1111
12+ #include < variant>
13+
1214namespace node {
1315
1416using v8::ArrayBuffer;
@@ -437,7 +439,7 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
437439 return Nothing<bool >();
438440 }
439441
440- params->params .prime_fixed_value = BignumPointer (
442+ params->params .prime = BignumPointer (
441443 BN_bin2bn (reinterpret_cast <const unsigned char *>(group->prime ),
442444 group->prime_size , nullptr ));
443445 params->params .generator = group->gen ;
@@ -449,14 +451,14 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
449451 THROW_ERR_OUT_OF_RANGE (env, " Invalid prime size" );
450452 return Nothing<bool >();
451453 }
452- params->params .prime_size = size;
454+ params->params .prime = size;
453455 } else {
454456 ArrayBufferOrViewContents<unsigned char > input (args[*offset]);
455457 if (UNLIKELY (!input.CheckSizeInt32 ())) {
456458 THROW_ERR_OUT_OF_RANGE (env, " prime is too big" );
457459 return Nothing<bool >();
458460 }
459- params->params .prime_fixed_value = BignumPointer (
461+ params->params .prime = BignumPointer (
460462 BN_bin2bn (input.data (), input.size (), nullptr ));
461463 }
462464
@@ -470,31 +472,33 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
470472
471473EVPKeyCtxPointer DhKeyGenTraits::Setup (DhKeyPairGenConfig* params) {
472474 EVPKeyPointer key_params;
473- if (params->params .prime_fixed_value ) {
475+ if (BignumPointer* prime_fixed_value =
476+ std::get_if<BignumPointer>(¶ms->params .prime )) {
474477 DHPointer dh (DH_new ());
475478 if (!dh)
476479 return EVPKeyCtxPointer ();
477480
478- BIGNUM* prime = params-> params . prime_fixed_value . get ();
481+ BIGNUM* prime = prime_fixed_value-> get ();
479482 BignumPointer bn_g (BN_new ());
480483 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 ())) {
482485 return EVPKeyCtxPointer ();
486+ }
483487
484- params-> params . prime_fixed_value . release ();
488+ prime_fixed_value-> release ();
485489 bn_g.release ();
486490
487491 key_params = EVPKeyPointer (EVP_PKEY_new ());
488492 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 )) {
491495 EVPKeyCtxPointer param_ctx (EVP_PKEY_CTX_new_id (EVP_PKEY_DH, nullptr ));
492496 EVP_PKEY* raw_params = nullptr ;
493497 if (!param_ctx ||
494498 EVP_PKEY_paramgen_init (param_ctx.get ()) <= 0 ||
495499 EVP_PKEY_CTX_set_dh_paramgen_prime_len (
496500 param_ctx.get (),
497- params-> params . prime_size ) <= 0 ||
501+ * prime_size) <= 0 ||
498502 EVP_PKEY_CTX_set_dh_paramgen_generator (
499503 param_ctx.get (),
500504 params->params .generator ) <= 0 ||
@@ -503,6 +507,8 @@ EVPKeyCtxPointer DhKeyGenTraits::Setup(DhKeyPairGenConfig* params) {
503507 }
504508
505509 key_params = EVPKeyPointer (raw_params);
510+ } else {
511+ UNREACHABLE ();
506512 }
507513
508514 EVPKeyCtxPointer ctx (EVP_PKEY_CTX_new (key_params.get (), nullptr ));
0 commit comments