From f606520095236e8dabb85564d3e91361e0b57b6e Mon Sep 17 00:00:00 2001 From: Ingela Anderton Andin Date: Fri, 31 Mar 2017 15:38:53 +0200 Subject: public_key: Public RSA key is present in private key Change the return value from {#'RSAPublicKey'{}, #'RSAPrivateKey'{}} to #'RSAPrivateKey'{} This conforms to the #'ECPrivateKey'{} return value. Note that DH key will be returned as {Public::integer(), Private::integer()} as there is no key structure (record) only two integers. Maybe we would like to add extraction functions for the public key from the private ones later. --- lib/public_key/doc/src/public_key.xml | 5 +++-- lib/public_key/src/public_key.erl | 32 +++++++++++++------------------- lib/public_key/test/erl_make_certs.erl | 2 -- 3 files changed, 16 insertions(+), 23 deletions(-) (limited to 'lib/public_key') diff --git a/lib/public_key/doc/src/public_key.xml b/lib/public_key/doc/src/public_key.xml index 2300ce3937..940585575c 100644 --- a/lib/public_key/doc/src/public_key.xml +++ b/lib/public_key/doc/src/public_key.xml @@ -331,14 +331,15 @@ - generate_key(Params) -> {Public::binary(), Private::binary()} | #'ECPrivateKey'{} | {#'RSAPublicKey'{}, #'RSAPrivateKey'{}} + generate_key(Params) -> {Public::binary(), Private::binary()} | #'ECPrivateKey'{} | #'RSAPrivateKey'{} Generates a new keypair. Params = #'DHParameter'{} | {namedCurve, oid()} | #'ECParameters'{} | {rsa, Size::integer(), PubExp::integer} -

Generates a new keypair. See also +

Generates a new keypair. Note that except for Diffie-Hellman + the public key is included in the private key structure. See also crypto:generate_key/2

diff --git a/lib/public_key/src/public_key.erl b/lib/public_key/src/public_key.erl index 965606045d..7b5819fa84 100644 --- a/lib/public_key/src/public_key.erl +++ b/lib/public_key/src/public_key.erl @@ -402,7 +402,7 @@ dh_gex_group(Min, N, Max, Groups) -> (#'ECParameters'{}) -> #'ECPrivateKey'{}; ({rsa, Size::pos_integer(), PubExp::pos_integer()}) -> - {#'RSAPublicKey'{}, #'RSAPrivateKey'{}}. + #'RSAPrivateKey'{}. %% Description: Generates a new keypair %%-------------------------------------------------------------------- @@ -417,18 +417,15 @@ generate_key({rsa, ModulusSize, PublicExponent}) -> {[E, N], [E, N, D, P, Q, D_mod_P_1, D_mod_Q_1, InvQ_mod_P]} -> Nint = crypto:bytes_to_integer(N), Eint = crypto:bytes_to_integer(E), - {#'RSAPublicKey'{modulus = Nint, - publicExponent = Eint}, - #'RSAPrivateKey'{version = 0, % Two-factor (I guess since otherPrimeInfos is not given) - modulus = Nint, - publicExponent = Eint, - privateExponent = crypto:bytes_to_integer(D), - prime1 = crypto:bytes_to_integer(P), - prime2 = crypto:bytes_to_integer(Q), - exponent1 = crypto:bytes_to_integer(D_mod_P_1), - exponent2 = crypto:bytes_to_integer(D_mod_Q_1), - coefficient = crypto:bytes_to_integer(InvQ_mod_P)} - }; + #'RSAPrivateKey'{version = 0, % Two-factor (I guess since otherPrimeInfos is not given) + modulus = Nint, + publicExponent = Eint, + privateExponent = crypto:bytes_to_integer(D), + prime1 = crypto:bytes_to_integer(P), + prime2 = crypto:bytes_to_integer(Q), + exponent1 = crypto:bytes_to_integer(D_mod_P_1), + exponent2 = crypto:bytes_to_integer(D_mod_Q_1), + coefficient = crypto:bytes_to_integer(InvQ_mod_P)}; {[E, N], [E, N, D]} -> % FIXME: what to set the other fields in #'RSAPrivateKey'? % Answer: Miller [Mil76] @@ -438,9 +435,7 @@ generate_key({rsa, ModulusSize, PublicExponent}) -> % 1976. Nint = crypto:bytes_to_integer(N), Eint = crypto:bytes_to_integer(E), - {#'RSAPublicKey'{modulus = Nint, - publicExponent = Eint}, - #'RSAPrivateKey'{version = 0, % Two-factor (I guess since otherPrimeInfos is not given) + #'RSAPrivateKey'{version = 0, % Two-factor (I guess since otherPrimeInfos is not given) modulus = Nint, publicExponent = Eint, privateExponent = crypto:bytes_to_integer(D), @@ -448,9 +443,8 @@ generate_key({rsa, ModulusSize, PublicExponent}) -> prime2 = '?', exponent1 = '?', exponent2 = '?', - coefficient = '?'} - }; - + coefficient = '?'}; + Other -> Other end. diff --git a/lib/public_key/test/erl_make_certs.erl b/lib/public_key/test/erl_make_certs.erl index 00be7dd5b3..95d0dec920 100644 --- a/lib/public_key/test/erl_make_certs.erl +++ b/lib/public_key/test/erl_make_certs.erl @@ -351,8 +351,6 @@ gen_rsa2(Size) -> %% The numbers 2048,17 is choosen to not cause the cryptolib on %% FIPS-enabled test machines be mad at us. public_key:generate_key({rsa, 2048, 17}) - of - {_Public, Private} -> Private catch error:notsup -> %% Disabled dirty_schedulers => crypto:generate_key not working -- cgit v1.2.3