From: Tony Arcieri Date: Sat, 22 Jan 2022 21:57:40 +0000 (-0700) Subject: spake2: bump `hkdf` to v0.12; `sha2` to v0.10 (#86) X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=0e89af61822595b0e110d399a1de3ce018157cf5;p=PAKEs.git spake2: bump `hkdf` to v0.12; `sha2` to v0.10 (#86) --- diff --git a/Cargo.lock b/Cargo.lock index 0e101f7..a4eecc1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,15 +26,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - [[package]] name = "block-buffer" version = "0.10.0" @@ -83,16 +74,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "curve25519-dalek" version = "3.2.0" @@ -121,9 +102,10 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b" dependencies = [ - "block-buffer 0.10.0", + "block-buffer", "crypto-common", "generic-array", + "subtle", ] [[package]] @@ -167,22 +149,20 @@ checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" [[package]] name = "hkdf" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b" +checksum = "94f41e9c77b6fc05b57497b960aad55942a9bbc5b20e1e623cf7fb1868f695d1" dependencies = [ - "digest 0.9.0", "hmac", ] [[package]] name = "hmac" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +checksum = "ddca131f3e7f2ce2df364b57949a9d47915cfbd35e46cfee355ccebbf794d6a2" dependencies = [ - "crypto-mac", - "digest 0.9.0", + "digest 0.10.1", ] [[package]] @@ -227,12 +207,6 @@ dependencies = [ "autocfg 1.0.1", ] -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "rand" version = "0.6.5" @@ -368,19 +342,6 @@ dependencies = [ "digest 0.10.1", ] -[[package]] -name = "sha2" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "sha2" version = "0.10.1" @@ -402,7 +363,7 @@ dependencies = [ "hkdf", "num-bigint", "rand_core 0.5.1", - "sha2 0.9.8", + "sha2", ] [[package]] @@ -417,7 +378,7 @@ dependencies = [ "num-traits", "rand", "sha-1", - "sha2 0.10.1", + "sha2", "subtle", ] diff --git a/spake2/Cargo.toml b/spake2/Cargo.toml index ce27c5b..febbb6d 100644 --- a/spake2/Cargo.toml +++ b/spake2/Cargo.toml @@ -17,12 +17,12 @@ rust-version = "1.56" [dependencies] curve25519-dalek = "3" rand_core = { version = "0.5", default-features = false, features = ["getrandom"] } -sha2 = "0.9" -hkdf = "0.11" -hex = "0.4" +sha2 = "0.10" +hkdf = "0.12" [dev-dependencies] bencher = "0.1" +hex = "0.4" num-bigint = "0.4" [[bench]] diff --git a/spake2/src/lib.rs b/spake2/src/lib.rs index 79517a7..1c87a5c 100644 --- a/spake2/src/lib.rs +++ b/spake2/src/lib.rs @@ -217,15 +217,15 @@ //! [6]: http://eprint.iacr.org/2003/038.pdf "Pretty-Simple Password-Authenticated Key-Exchange Under Standard Assumptions" //! [7]: https://moderncrypto.org/mail-archive/curves/2015/000419.html "PAKE questions" -use curve25519_dalek::constants::ED25519_BASEPOINT_POINT; -use curve25519_dalek::edwards::CompressedEdwardsY; -use curve25519_dalek::edwards::EdwardsPoint as c2_Element; -use curve25519_dalek::scalar::Scalar as c2_Scalar; +use core::{fmt, ops::Deref, str}; +use curve25519_dalek::{ + constants::ED25519_BASEPOINT_POINT, + edwards::{CompressedEdwardsY, EdwardsPoint as c2_Element}, + scalar::Scalar as c2_Scalar, +}; use hkdf::Hkdf; use rand_core::{CryptoRng, OsRng, RngCore}; use sha2::{Digest, Sha256}; -use std::fmt; -use std::ops::Deref; /* "newtype pattern": it's a Vec, but only used for a specific argument * type, to distinguish between ones that are meant as passwords, and ones @@ -740,24 +740,35 @@ impl SPAKE2 { } } -fn maybe_utf8(s: &[u8]) -> String { - match String::from_utf8(s.to_vec()) { - Ok(m) => format!("(s={})", m), - Err(_) => format!("(hex={})", hex::encode(s)), - } -} - impl fmt::Debug for SPAKE2 { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { fmt.debug_struct("SPAKE2") .field("group", &G::name()) .field("side", &self.side) - .field("idA", &maybe_utf8(&self.id_a)) - .field("idB", &maybe_utf8(&self.id_b)) - .field("idS", &maybe_utf8(&self.id_s)) + .field("idA", &MaybeUtf8(&self.id_a)) + .field("idB", &MaybeUtf8(&self.id_b)) + .field("idS", &MaybeUtf8(&self.id_s)) .finish() } } +struct MaybeUtf8<'a>(&'a [u8]); + +impl fmt::Debug for MaybeUtf8<'_> { + fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { + if let Ok(s) = str::from_utf8(self.0) { + write!(fmt, "(s={})", s) + } else { + write!(fmt, "(hex=")?; + + for byte in self.0 { + write!(fmt, "{:x}", byte)?; + } + + write!(fmt, ")") + } + } +} + #[cfg(test)] mod tests; diff --git a/spake2/src/tests.rs b/spake2/src/tests.rs index e452fce..4599953 100644 --- a/spake2/src/tests.rs +++ b/spake2/src/tests.rs @@ -187,7 +187,7 @@ fn test_debug() { println!("s1: {:?}", s1); assert_eq!( format!("{:?}", s1), - "SPAKE2 { group: \"Ed25519\", side: A, idA: \"(s=idA)\", idB: \"(s=idB)\", idS: \"(s=)\" }" + "SPAKE2 { group: \"Ed25519\", side: A, idA: (s=idA), idB: (s=idB), idS: (s=) }" ); let (s2, _msg1) = SPAKE2::::start_symmetric( @@ -195,6 +195,8 @@ fn test_debug() { &Identity::new(b"idS"), ); println!("s2: {:?}", s2); - assert_eq!(format!("{:?}", s2), - "SPAKE2 { group: \"Ed25519\", side: Symmetric, idA: \"(s=)\", idB: \"(s=)\", idS: \"(s=idS)\" }"); + assert_eq!( + format!("{:?}", s2), + "SPAKE2 { group: \"Ed25519\", side: Symmetric, idA: (s=), idB: (s=), idS: (s=idS) }" + ); }