aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngela Anderton Andin <[email protected]>2017-03-31 15:38:53 +0200
committerIngela Anderton Andin <[email protected]>2017-04-12 11:01:09 +0200
commitf606520095236e8dabb85564d3e91361e0b57b6e (patch)
treece97305c1bb185596d2e018ede24bdeb5e1d254b
parent4da32ec432dd2dee0b19403bed21a836f1638549 (diff)
downloadotp-f606520095236e8dabb85564d3e91361e0b57b6e.tar.gz
otp-f606520095236e8dabb85564d3e91361e0b57b6e.tar.bz2
otp-f606520095236e8dabb85564d3e91361e0b57b6e.zip
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.
-rw-r--r--lib/public_key/doc/src/public_key.xml5
-rw-r--r--lib/public_key/src/public_key.erl32
-rw-r--r--lib/public_key/test/erl_make_certs.erl2
3 files changed, 16 insertions, 23 deletions
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 @@
</func>
<func>
- <name>generate_key(Params) -> {Public::binary(), Private::binary()} | #'ECPrivateKey'{} | {#'RSAPublicKey'{}, #'RSAPrivateKey'{}}</name>
+ <name>generate_key(Params) -> {Public::binary(), Private::binary()} | #'ECPrivateKey'{} | #'RSAPrivateKey'{}</name>
<fsummary>Generates a new keypair.</fsummary>
<type>
<v>Params = #'DHParameter'{} | {namedCurve, oid()} | #'ECParameters'{}
| {rsa, Size::integer(), PubExp::integer} </v>
</type>
<desc>
- <p>Generates a new keypair. See also
+ <p>Generates a new keypair. Note that except for Diffie-Hellman
+ the public key is included in the private key structure. See also
<seealso marker="crypto:crypto#generate_key/2">crypto:generate_key/2</seealso>
</p>
</desc>
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