@@ -32,9 +32,10 @@ use crate::{
3232 AffinePoint , Curve , CurveArithmetic , CurveGroup , FieldBytes , NonZeroScalar , ProjectivePoint ,
3333 PublicKey , point:: AffineCoordinates ,
3434} ;
35+ use common:: Generate ;
3536use core:: { borrow:: Borrow , fmt} ;
3637use hkdf:: Hkdf ;
37- use rand_core:: TryCryptoRng ;
38+ use rand_core:: { CryptoRng , TryCryptoRng } ;
3839use zeroize:: { Zeroize , ZeroizeOnDrop } ;
3940
4041/// Low-level Elliptic Curve Diffie-Hellman (ECDH) function.
@@ -71,16 +72,15 @@ where
7172
7273/// Ephemeral Diffie-Hellman Secret.
7374///
74- /// These are ephemeral "secret key" values which are deliberately designed
75- /// to avoid being persisted.
75+ /// These are ephemeral "secret key" values which are deliberately designed to avoid persistence.
7676///
7777/// To perform an ephemeral Diffie-Hellman exchange, do the following:
7878///
79- /// - Have each participant generate an [`EphemeralSecret`] value
79+ /// - Have each participant generate an [`EphemeralSecret`] value using the [`Generate`] trait
8080/// - Compute the [`PublicKey`] for that value
8181/// - Have each peer provide their [`PublicKey`] to their counterpart
8282/// - Use [`EphemeralSecret`] and the other participant's [`PublicKey`]
83- /// to compute a [`SharedSecret`] value.
83+ /// to compute a [`SharedSecret`] value using the [`EphemeralSecret::diffie_hellman`] function
8484///
8585/// # ⚠️ SECURITY WARNING ⚠️
8686///
@@ -103,25 +103,21 @@ impl<C: CurveArithmetic> fmt::Debug for EphemeralSecret<C> {
103103 }
104104}
105105
106- impl < C > EphemeralSecret < C >
106+ impl < C > Generate for EphemeralSecret < C >
107107where
108108 C : CurveArithmetic ,
109109{
110- /// Generate a cryptographically random [`EphemeralSecret`].
111- #[ cfg( feature = "getrandom" ) ]
112- pub fn generate ( ) -> Self {
113- Self {
114- scalar : NonZeroScalar :: generate ( ) ,
115- }
116- }
117-
118- /// Generate a cryptographically random [`EphemeralSecret`].
119- pub fn try_from_rng < R : TryCryptoRng + ?Sized > ( rng : & mut R ) -> Result < Self , R :: Error > {
110+ fn try_generate_from_rng < R : TryCryptoRng + ?Sized > ( rng : & mut R ) -> Result < Self , R :: Error > {
120111 Ok ( Self {
121- scalar : NonZeroScalar :: try_from_rng ( rng) ?,
112+ scalar : NonZeroScalar :: try_generate_from_rng ( rng) ?,
122113 } )
123114 }
115+ }
124116
117+ impl < C > EphemeralSecret < C >
118+ where
119+ C : CurveArithmetic ,
120+ {
125121 /// Get the public key associated with this ephemeral secret.
126122 ///
127123 /// The `compress` flag enables point compression.
@@ -134,6 +130,14 @@ where
134130 pub fn diffie_hellman ( & self , public_key : & PublicKey < C > ) -> SharedSecret < C > {
135131 diffie_hellman ( self . scalar , public_key. as_affine ( ) )
136132 }
133+
134+ /// DEPRECATED: Generate a cryptographically random [`EphemeralSecret`].
135+ ///
136+ /// Use the [`Generate`] trait instead.
137+ #[ deprecated( since = "0.14.0" , note = "use the `Generate` trait instead" ) ]
138+ pub fn random < R : CryptoRng + ?Sized > ( rng : & mut R ) -> Self {
139+ Self :: generate_from_rng ( rng)
140+ }
137141}
138142
139143impl < C > From < & EphemeralSecret < C > > for PublicKey < C >
0 commit comments