99#include " threadpoolwork-inl.h"
1010#include " v8.h"
1111
12+ #include < variant>
13+
1214namespace node {
1315
1416using v8::ArrayBuffer;
@@ -459,7 +461,7 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
459461 return Nothing<bool >();
460462 }
461463
462- params->params .prime_fixed_value = BignumPointer (
464+ params->params .prime = BignumPointer (
463465 BN_bin2bn (reinterpret_cast <const unsigned char *>(group->prime ),
464466 group->prime_size , nullptr ));
465467 params->params .generator = group->gen ;
@@ -471,14 +473,14 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
471473 THROW_ERR_OUT_OF_RANGE (env, " Invalid prime size" );
472474 return Nothing<bool >();
473475 }
474- params->params .prime_size = size;
476+ params->params .prime = size;
475477 } else {
476478 ArrayBufferOrViewContents<unsigned char > input (args[*offset]);
477479 if (UNLIKELY (!input.CheckSizeInt32 ())) {
478480 THROW_ERR_OUT_OF_RANGE (env, " prime is too big" );
479481 return Nothing<bool >();
480482 }
481- params->params .prime_fixed_value = BignumPointer (
483+ params->params .prime = BignumPointer (
482484 BN_bin2bn (input.data (), input.size (), nullptr ));
483485 }
484486
@@ -492,31 +494,33 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
492494
493495EVPKeyCtxPointer DhKeyGenTraits::Setup (DhKeyPairGenConfig* params) {
494496 EVPKeyPointer key_params;
495- if (params->params .prime_fixed_value ) {
497+ if (BignumPointer* prime_fixed_value =
498+ std::get_if<BignumPointer>(¶ms->params .prime )) {
496499 DHPointer dh (DH_new ());
497500 if (!dh)
498501 return EVPKeyCtxPointer ();
499502
500- BIGNUM* prime = params-> params . prime_fixed_value . get ();
503+ BIGNUM* prime = prime_fixed_value-> get ();
501504 BignumPointer bn_g (BN_new ());
502505 if (!BN_set_word (bn_g.get (), params->params .generator ) ||
503- !DH_set0_pqg (dh.get (), prime, nullptr , bn_g.get ()))
506+ !DH_set0_pqg (dh.get (), prime, nullptr , bn_g.get ())) {
504507 return EVPKeyCtxPointer ();
508+ }
505509
506- params-> params . prime_fixed_value . release ();
510+ prime_fixed_value-> release ();
507511 bn_g.release ();
508512
509513 key_params = EVPKeyPointer (EVP_PKEY_new ());
510514 CHECK (key_params);
511- EVP_PKEY_assign_DH (key_params.get (), dh.release ());
512- } else {
515+ CHECK_EQ ( EVP_PKEY_assign_DH (key_params.get (), dh.release ()), 1 );
516+ } else if ( int * prime_size = std::get_if< int >(¶ms-> params . prime )) {
513517 EVPKeyCtxPointer param_ctx (EVP_PKEY_CTX_new_id (EVP_PKEY_DH, nullptr ));
514518 EVP_PKEY* raw_params = nullptr ;
515519 if (!param_ctx ||
516520 EVP_PKEY_paramgen_init (param_ctx.get ()) <= 0 ||
517521 EVP_PKEY_CTX_set_dh_paramgen_prime_len (
518522 param_ctx.get (),
519- params-> params . prime_size ) <= 0 ||
523+ * prime_size) <= 0 ||
520524 EVP_PKEY_CTX_set_dh_paramgen_generator (
521525 param_ctx.get (),
522526 params->params .generator ) <= 0 ||
@@ -525,6 +529,8 @@ EVPKeyCtxPointer DhKeyGenTraits::Setup(DhKeyPairGenConfig* params) {
525529 }
526530
527531 key_params = EVPKeyPointer (raw_params);
532+ } else {
533+ UNREACHABLE ();
528534 }
529535
530536 EVPKeyCtxPointer ctx (EVP_PKEY_CTX_new (key_params.get (), nullptr ));
0 commit comments