| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent cdf5c44 commit ef1ace7
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,6 +9,8 @@ | |||
| 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)); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -10,7 +10,7 @@ | |||
| 10 | 10 | #include "memory_tracker.h" | |
| 11 | 11 | #include "v8.h" | |
| 12 | 12 | ||
| 13 | - #include <vector> | ||
| 13 | + #include <variant> | ||
| 14 | 14 | ||
| 15 | 15 | namespace node { | |
| 16 | 16 | namespace crypto { | |
@@ -59,12 +59,10 @@ class DiffieHellman : public BaseObject { | |||
| 59 | 59 | }; | |
| 60 | 60 | ||
| 61 | 61 | struct DhKeyPairParams final : public MemoryRetainer { | |
| 62 | - // TODO(tniessen): Use std::variant instead. | ||
| 63 | 62 | // Diffie-Hellman can either generate keys using a fixed prime, or by first | |
| 64 | 63 | // generating a random prime of a given size (in bits). Only one of both | |
| 65 | 64 | // options may be specified. | |
| 66 | - BignumPointer prime_fixed_value; | ||
| 67 | - unsigned int prime_size; | ||
| 65 | + std::variant<BignumPointer, int> prime; | ||
| 68 | 66 | unsigned int generator; | |
| 69 | 67 | SET_NO_MEMORY_INFO() | |
| 70 | 68 | SET_MEMORY_INFO_NAME(DhKeyPairParams) | |
| Back | FazBrowse Home | New Git URL |
0 commit comments