Skip to content

Commit aad0d28

Browse files
committed
Support generating DH pkeys from parameters
1 parent 5d0d25c commit aad0d28

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

ext/openssl/ossl_pkey.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -454,12 +454,12 @@ add_ec_parameters_to_builder(VALUE key, VALUE value, VALUE arg) {
454454
}
455455

456456
if(strcmp(OSSL_PKEY_PARAM_PRIV_KEY, key_ptr) == 0) {
457-
if(!OSSL_PARAM_BLD_push_BN(params_builder, OSSL_PKEY_PARAM_PRIV_KEY, GetBNPtr(value))) // unsigned integer, but presented as BN will work just fine
457+
if(!OSSL_PARAM_BLD_push_BN(params_builder, OSSL_PKEY_PARAM_PRIV_KEY, GetBNPtr(value)))
458458
ossl_raise(ePKeyError, "OSSL_PARAM_BLD_push_BN");
459459
return ST_CONTINUE;
460460
}
461461

462-
ossl_raise(ePKeyError, "Unsupported EC parameter \"%s\"", key_ptr);
462+
ossl_raise(ePKeyError, "Unsupported parameter \"%s\"", key_ptr);
463463
}
464464

465465
static int
@@ -529,11 +529,11 @@ add_rsa_parameters_to_builder(VALUE key, VALUE value, VALUE arg) {
529529
return ST_CONTINUE;
530530
}
531531

532-
ossl_raise(ePKeyError, "Unsupported RSA parameter \"%s\"", key_ptr);
532+
ossl_raise(ePKeyError, "Unsupported parameter \"%s\"", key_ptr);
533533
}
534534

535535
static int
536-
add_dsa_parameters_to_builder(VALUE key, VALUE value, VALUE arg) {
536+
add_ffc_parameters_to_builder(VALUE key, VALUE value, VALUE arg) {
537537
OSSL_PARAM_BLD *params_builder = (OSSL_PARAM_BLD *) arg;
538538

539539
if(NIL_P(value))
@@ -583,7 +583,7 @@ add_dsa_parameters_to_builder(VALUE key, VALUE value, VALUE arg) {
583583
return ST_CONTINUE;
584584
}
585585

586-
ossl_raise(ePKeyError, "Unsupported DSA parameter \"%s\"", key_ptr);
586+
ossl_raise(ePKeyError, "Unsupported parameter \"%s\"", key_ptr);
587587
}
588588

589589
static VALUE
@@ -604,7 +604,9 @@ pkey_from_parameters(int argc, VALUE *argv, VALUE self)
604604
else if (strcmp("EC", StringValueCStr(alg)) == 0)
605605
param_adder = &add_ec_parameters_to_builder;
606606
else if (strcmp("DSA", StringValueCStr(alg)) == 0)
607-
param_adder = &add_dsa_parameters_to_builder;
607+
param_adder = &add_ffc_parameters_to_builder;
608+
else if (strcmp("DH", StringValueCStr(alg)) == 0)
609+
param_adder = &add_ffc_parameters_to_builder;
608610
else
609611
ossl_raise(ePKeyError, "\"%s\" is not a supported algorithm", StringValueCStr(alg));
610612

test/openssl/test_pkey.rb

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ def test_s_from_parameters_rsa_with_simple_names
263263

264264
def test_s_from_parameters_rsa_with_invalid_parameter
265265
e = assert_raise(OpenSSL::PKey::PKeyError) { OpenSSL::PKey.from_parameters("RSA", invalid: 1234) }
266-
assert_equal 'Unsupported RSA parameter "invalid"', e.message
266+
assert_equal 'Unsupported parameter "invalid"', e.message
267267
end
268268

269269
def test_s_from_parameters_ec_pub_given_as_string
@@ -316,7 +316,7 @@ def test_s_from_parameters_ec_pub_given_as_integer
316316

317317
def test_s_from_parameters_ec_with_invalid_parameter
318318
e = assert_raise(OpenSSL::PKey::PKeyError) { OpenSSL::PKey.from_parameters("EC", invalid: 1234) }
319-
assert_equal 'Unsupported EC parameter "invalid"', e.message
319+
assert_equal 'Unsupported parameter "invalid"', e.message
320320
end
321321

322322
def test_s_from_parameters_dsa_with_all_supported_parameters
@@ -328,6 +328,7 @@ def test_s_from_parameters_dsa_with_all_supported_parameters
328328
q: source.params["q"],
329329
g: source.params["g"])
330330

331+
assert_instance_of OpenSSL::PKey::DSA, new_key
331332
assert_equal source.params, new_key.params
332333
end
333334

@@ -341,7 +342,21 @@ def test_s_from_parameters_dsa_with_gem_specific_keys
341342

342343
def test_s_from_parameters_dsa_with_invalid_parameter
343344
e = assert_raise(OpenSSL::PKey::PKeyError) { OpenSSL::PKey.from_parameters("DSA", invalid: 1234) }
344-
assert_equal 'Unsupported DSA parameter "invalid"', e.message
345+
assert_equal 'Unsupported parameter "invalid"', e.message
346+
end
347+
348+
def test_s_from_parameters_dh_with_all_supported_parameters
349+
source = OpenSSL::PKey::DH.generate(512)
350+
351+
new_key = OpenSSL::PKey.from_parameters("DH", source.params)
352+
353+
assert_instance_of OpenSSL::PKey::DH, new_key
354+
assert_equal source.params, new_key.params
355+
end
356+
357+
def test_s_from_parameters_dh_with_invalid_parameter
358+
e = assert_raise(OpenSSL::PKey::PKeyError) { OpenSSL::PKey.from_parameters("DH", invalid: 1234) }
359+
assert_equal 'Unsupported parameter "invalid"', e.message
345360
end
346361
else
347362
def test_from_parameter_raises_on_pre_3_openssl

0 commit comments

Comments
 (0)