Skip to content

Commit 493fc42

Browse files
committed
crypto: simplify DH groups
PR-URL: nodejs#31178 Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
1 parent c9e386c commit 493fc42

2 files changed

Lines changed: 25 additions & 26 deletions

File tree

src/node_crypto.cc

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5684,6 +5684,13 @@ bool DiffieHellman::Init(const char* p, int p_len, const char* g, int g_len) {
56845684
return VerifyContext();
56855685
}
56865686

5687+
inline const modp_group* FindDiffieHellmanGroup(const char* name) {
5688+
for (const modp_group& group : modp_groups) {
5689+
if (StringEqualNoCase(name, group.name))
5690+
return &group;
5691+
}
5692+
return nullptr;
5693+
}
56875694

56885695
void DiffieHellman::DiffieHellmanGroup(
56895696
const FunctionCallbackInfo<Value>& args) {
@@ -5699,22 +5706,15 @@ void DiffieHellman::DiffieHellmanGroup(
56995706
bool initialized = false;
57005707

57015708
const node::Utf8Value group_name(env->isolate(), args[0]);
5702-
for (size_t i = 0; i < arraysize(modp_groups); ++i) {
5703-
const modp_group* it = modp_groups + i;
5704-
5705-
if (!StringEqualNoCase(*group_name, it->name))
5706-
continue;
5707-
5708-
initialized = diffieHellman->Init(it->prime,
5709-
it->prime_size,
5710-
it->gen,
5711-
it->gen_size);
5712-
if (!initialized)
5713-
env->ThrowError("Initialization failed");
5714-
return;
5715-
}
5709+
const modp_group* group = FindDiffieHellmanGroup(*group_name);
5710+
if (group == nullptr)
5711+
return env->ThrowError("Unknown group");
57165712

5717-
env->ThrowError("Unknown group");
5713+
initialized = diffieHellman->Init(group->prime,
5714+
group->prime_size,
5715+
group->gen);
5716+
if (!initialized)
5717+
env->ThrowError("Initialization failed");
57185718
}
57195719

57205720

src/node_crypto_groups.h

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
*/
3333

3434

35-
static const unsigned char two_generator[] = { 2 };
35+
static const unsigned int two_generator = 2;
3636

3737
static const unsigned char group_modp1[] = {
3838
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0x0f,
@@ -394,20 +394,19 @@ typedef struct {
394394
const char* name;
395395
const char* prime;
396396
unsigned int prime_size;
397-
const char* gen;
398-
unsigned int gen_size;
397+
unsigned int gen;
399398
} modp_group;
400399

401400
static const modp_group modp_groups[] = {
402401
#define V(var) reinterpret_cast<const char*>(var)
403-
{ "modp1", V(group_modp1), sizeof(group_modp1), V(two_generator), 1 },
404-
{ "modp2", V(group_modp2), sizeof(group_modp2), V(two_generator), 1 },
405-
{ "modp5", V(group_modp5), sizeof(group_modp5), V(two_generator), 1 },
406-
{ "modp14", V(group_modp14), sizeof(group_modp14), V(two_generator), 1 },
407-
{ "modp15", V(group_modp15), sizeof(group_modp15), V(two_generator), 1 },
408-
{ "modp16", V(group_modp16), sizeof(group_modp16), V(two_generator), 1 },
409-
{ "modp17", V(group_modp17), sizeof(group_modp17), V(two_generator), 1 },
410-
{ "modp18", V(group_modp18), sizeof(group_modp18), V(two_generator), 1 }
402+
{ "modp1", V(group_modp1), sizeof(group_modp1), two_generator },
403+
{ "modp2", V(group_modp2), sizeof(group_modp2), two_generator },
404+
{ "modp5", V(group_modp5), sizeof(group_modp5), two_generator },
405+
{ "modp14", V(group_modp14), sizeof(group_modp14), two_generator },
406+
{ "modp15", V(group_modp15), sizeof(group_modp15), two_generator },
407+
{ "modp16", V(group_modp16), sizeof(group_modp16), two_generator },
408+
{ "modp17", V(group_modp17), sizeof(group_modp17), two_generator },
409+
{ "modp18", V(group_modp18), sizeof(group_modp18), two_generator }
411410
#undef V
412411
};
413412

0 commit comments

Comments
 (0)