Merge branch 'main' into release/2.0

This commit is contained in:
Michael Rosenberg 2023-03-20 14:19:38 -04:00 committed by GitHub
commit d6c3cbf97d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -57,6 +57,14 @@ impl PublicKey {
} }
} }
impl AsRef<[u8]> for PublicKey {
/// View this public key as a byte array.
#[inline]
fn as_ref(&self) -> &[u8] {
self.as_bytes()
}
}
/// A short-lived Diffie-Hellman secret key that can only be used to compute a single /// A short-lived Diffie-Hellman secret key that can only be used to compute a single
/// [`SharedSecret`]. /// [`SharedSecret`].
/// ///
@ -182,9 +190,16 @@ impl StaticSecret {
} }
/// Extract this key's bytes for serialization. /// Extract this key's bytes for serialization.
#[inline]
pub fn to_bytes(&self) -> [u8; 32] { pub fn to_bytes(&self) -> [u8; 32] {
self.0.to_bytes() self.0.to_bytes()
} }
/// View this key as a byte array.
#[inline]
pub fn as_bytes(&self) -> &[u8; 32] {
self.0.as_bytes()
}
} }
impl From<[u8; 32]> for StaticSecret { impl From<[u8; 32]> for StaticSecret {
@ -201,6 +216,14 @@ impl<'a> From<&'a StaticSecret> for PublicKey {
} }
} }
impl AsRef<[u8]> for StaticSecret {
/// View this key as a byte array.
#[inline]
fn as_ref(&self) -> &[u8] {
self.as_bytes()
}
}
/// The result of a Diffie-Hellman key exchange. /// The result of a Diffie-Hellman key exchange.
/// ///
/// Each party computes this using their [`EphemeralSecret`] or [`StaticSecret`] and their /// Each party computes this using their [`EphemeralSecret`] or [`StaticSecret`] and their
@ -226,9 +249,9 @@ impl SharedSecret {
/// key exchange with non-contributory behaviour. /// key exchange with non-contributory behaviour.
/// ///
/// In some more exotic protocols which need to guarantee "contributory" /// In some more exotic protocols which need to guarantee "contributory"
/// behaviour for both parties, that is, that each party contibuted a public /// behaviour for both parties, that is, that each party contributed a public
/// value which increased the security of the resulting shared secret. /// value which increased the security of the resulting shared secret.
/// To take an example protocol attack where this could lead to undesireable /// To take an example protocol attack where this could lead to undesirable
/// results [from Thái "thaidn" Dương](https://vnhacker.blogspot.com/2015/09/why-not-validating-curve25519-public.html): /// results [from Thái "thaidn" Dương](https://vnhacker.blogspot.com/2015/09/why-not-validating-curve25519-public.html):
/// ///
/// > If Mallory replaces Alice's and Bob's public keys with zero, which is /// > If Mallory replaces Alice's and Bob's public keys with zero, which is
@ -261,6 +284,14 @@ impl SharedSecret {
} }
} }
impl AsRef<[u8]> for SharedSecret {
/// View this shared secret key as a byte array.
#[inline]
fn as_ref(&self) -> &[u8] {
self.as_bytes()
}
}
/// The bare, byte-oriented x25519 function, exactly as specified in RFC7748. /// The bare, byte-oriented x25519 function, exactly as specified in RFC7748.
/// ///
/// This can be used with [`X25519_BASEPOINT_BYTES`] for people who /// This can be used with [`X25519_BASEPOINT_BYTES`] for people who