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;
@@ -459,7 +461,7 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
459
461
return Nothing<bool >();
460
462
}
461
463
462
- params->params .prime_fixed_value = BignumPointer (
464
+ params->params .prime = BignumPointer (
463
465
BN_bin2bn (reinterpret_cast <const unsigned char *>(group->prime ),
464
466
group->prime_size , nullptr ));
465
467
params->params .generator = group->gen ;
@@ -471,14 +473,14 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
471
473
THROW_ERR_OUT_OF_RANGE (env, " Invalid prime size" );
472
474
return Nothing<bool >();
473
475
}
474
- params->params .prime_size = size;
476
+ params->params .prime = size;
475
477
} else {
476
478
ArrayBufferOrViewContents<unsigned char > input (args[*offset]);
477
479
if (UNLIKELY (!input.CheckSizeInt32 ())) {
478
480
THROW_ERR_OUT_OF_RANGE (env, " prime is too big" );
479
481
return Nothing<bool >();
480
482
}
481
- params->params .prime_fixed_value = BignumPointer (
483
+ params->params .prime = BignumPointer (
482
484
BN_bin2bn (input.data (), input.size (), nullptr ));
483
485
}
484
486
@@ -492,31 +494,33 @@ Maybe<bool> DhKeyGenTraits::AdditionalConfig(
492
494
493
495
EVPKeyCtxPointer DhKeyGenTraits::Setup (DhKeyPairGenConfig* params) {
494
496
EVPKeyPointer key_params;
495
- if (params->params .prime_fixed_value ) {
497
+ if (BignumPointer* prime_fixed_value =
498
+ std::get_if<BignumPointer>(¶ms->params .prime )) {
496
499
DHPointer dh (DH_new ());
497
500
if (!dh)
498
501
return EVPKeyCtxPointer ();
499
502
500
- BIGNUM* prime = params-> params . prime_fixed_value . get ();
503
+ BIGNUM* prime = prime_fixed_value-> get ();
501
504
BignumPointer bn_g (BN_new ());
502
505
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 ())) {
504
507
return EVPKeyCtxPointer ();
508
+ }
505
509
506
- params-> params . prime_fixed_value . release ();
510
+ prime_fixed_value-> release ();
507
511
bn_g.release ();
508
512
509
513
key_params = EVPKeyPointer (EVP_PKEY_new ());
510
514
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 )) {
513
517
EVPKeyCtxPointer param_ctx (EVP_PKEY_CTX_new_id (EVP_PKEY_DH, nullptr ));
514
518
EVP_PKEY* raw_params = nullptr ;
515
519
if (!param_ctx ||
516
520
EVP_PKEY_paramgen_init (param_ctx.get ()) <= 0 ||
517
521
EVP_PKEY_CTX_set_dh_paramgen_prime_len (
518
522
param_ctx.get (),
519
- params-> params . prime_size ) <= 0 ||
523
+ * prime_size) <= 0 ||
520
524
EVP_PKEY_CTX_set_dh_paramgen_generator (
521
525
param_ctx.get (),
522
526
params->params .generator ) <= 0 ||
@@ -525,6 +529,8 @@ EVPKeyCtxPointer DhKeyGenTraits::Setup(DhKeyPairGenConfig* params) {
525
529
}
526
530
527
531
key_params = EVPKeyPointer (raw_params);
532
+ } else {
533
+ UNREACHABLE ();
528
534
}
529
535
530
536
EVPKeyCtxPointer ctx (EVP_PKEY_CTX_new (key_params.get (), nullptr ));
0 commit comments