diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 626ab29f..4d0eb49c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,7 +23,7 @@ jobs: - --features serde toolchain: - stable - - 1.70.0 + - 1.74.0 name: test steps: - name: Checkout sources @@ -78,7 +78,7 @@ jobs: matrix: toolchain: - stable - - 1.70.0 + - 1.74.0 name: test simple_login command-line example steps: - name: install expect @@ -101,7 +101,7 @@ jobs: matrix: toolchain: - stable - - 1.70.0 + - 1.74.0 name: test digital_locker command-line example steps: - name: install expect diff --git a/Cargo.toml b/Cargo.toml index 322053a2..703bfcbe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,9 +39,7 @@ serde = { version = "1", default-features = false, features = [ "derive", ], optional = true } subtle = { version = "2.3", default-features = false } -voprf = { version = "=0.5.0-pre.6", default-features = false, features = [ - "danger", -] } +voprf = { version = "0.5", default-features = false, features = ["danger"] } zeroize = { version = "1.5", features = ["zeroize_derive"] } [target.'cfg(target_arch = "wasm32")'.dependencies] @@ -69,7 +67,7 @@ proptest = "1" rand = "0.8" regex = "1" # MSRV -rustyline = "13" +rustyline = "14" scrypt = "0.11" serde_json = "1" diff --git a/README.md b/README.md index fcc52043..7dd402c1 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ opaque-ke = "3.0.0-pre.4" ### Minimum Supported Rust Version -Rust **1.70** or higher. +Rust **1.74** or higher. Audit ----- diff --git a/src/errors.rs b/src/errors.rs index 6ef40de3..d3867630 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -21,6 +21,7 @@ pub enum InternalError { Custom(T), /// Deserializing from a byte sequence failed InvalidByteSequence, + #[allow(clippy::doc_markdown)] /// Invalid length for {name}: expected {len}, but is actually {actual_len}. SizeError { /// name diff --git a/src/key_exchange/tripledh.rs b/src/key_exchange/tripledh.rs index a01f133b..9316084a 100644 --- a/src/key_exchange/tripledh.rs +++ b/src/key_exchange/tripledh.rs @@ -226,7 +226,7 @@ where .chain_iter(id_s.into_iter()) .chain_iter(l2_bytes) .chain(server_nonce) - .chain(&server_e_kp.public().serialize()); + .chain(server_e_kp.public().serialize()); let result = derive_3dh_keys::( TripleDhComponents { diff --git a/src/lib.rs b/src/lib.rs index 9a2113c8..2599a522 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,7 +15,7 @@ //! //! ### Minimum Supported Rust Version //! -//! Rust **1.65** or higher. +//! Rust **1.74** or higher. //! //! # Overview //! diff --git a/src/opaque.rs b/src/opaque.rs index 2d3cad48..bf6c6b95 100644 --- a/src/opaque.rs +++ b/src/opaque.rs @@ -716,13 +716,7 @@ where }; let client_s_pk = record.0.client_s_pk.clone(); - - let context = if let Some(context) = context { - context - } else { - &[] - }; - + let context = context.unwrap_or(&[]); let server_s_sk = server_setup.keypair.private(); let server_s_pk = server_s_sk.public_key()?; diff --git a/src/serialization/mod.rs b/src/serialization/mod.rs index 9685310a..dd2a06ea 100644 --- a/src/serialization/mod.rs +++ b/src/serialization/mod.rs @@ -13,7 +13,7 @@ use generic_array::typenum::{U0, U2}; use generic_array::{ArrayLength, GenericArray}; use hmac::Mac; -use crate::errors::{InternalError, ProtocolError}; +use crate::errors::ProtocolError; // Corresponds to the I2OSP() function from RFC8017 pub(crate) fn i2osp>( @@ -154,20 +154,6 @@ impl MacExt for T { } } -pub(crate) trait GenericArrayExt { - fn try_from_slice(slice: &[u8]) -> Result<&Self, InternalError>; -} - -impl> GenericArrayExt for GenericArray { - fn try_from_slice(slice: &[u8]) -> Result<&Self, InternalError> { - if slice.len() == L::USIZE { - Ok(Self::from_slice(slice)) - } else { - Err(InternalError::InvalidByteSequence) - } - } -} - #[cfg(test)] mod tests; diff --git a/src/tests/full_test.rs b/src/tests/full_test.rs index 6069d6c7..306f5f6b 100644 --- a/src/tests/full_test.rs +++ b/src/tests/full_test.rs @@ -1319,7 +1319,7 @@ fn test_credential_finalization() -> Result<(), ProtocolError> { assert_eq!( hex::encode(¶meters.server_s_pk), - hex::encode(&client_login_finish_result.server_s_pk.serialize()) + hex::encode(client_login_finish_result.server_s_pk.serialize()) ); assert_eq!( hex::encode(¶meters.session_key), diff --git a/src/tests/test_opaque_vectors.rs b/src/tests/test_opaque_vectors.rs index d1aef5ac..425bca1e 100644 --- a/src/tests/test_opaque_vectors.rs +++ b/src/tests/test_opaque_vectors.rs @@ -41,6 +41,7 @@ pub struct OpaqueTestVectorParameters { pub dummy_private_key: Vec, pub dummy_masking_key: Vec, pub context: Vec, + #[allow(dead_code)] // client_private_key is not tested in the test vectors pub client_private_key: Option>, pub client_keyshare_seed: Vec, pub server_public_key: Vec, @@ -56,8 +57,6 @@ pub struct OpaqueTestVectorParameters { pub envelope_nonce: Vec, pub client_nonce: Vec, pub server_nonce: Vec, - pub client_info: Vec, - pub server_info: Vec, pub registration_request: Vec, pub registration_response: Vec, pub registration_upload: Vec, @@ -139,8 +138,6 @@ where envelope_nonce: parse!(values, "envelope_nonce"), client_nonce: parse!(values, "client_nonce"), server_nonce: parse!(values, "server_nonce"), - client_info: parse!(values, "client_info"), - server_info: parse!(values, "server_info"), registration_request: parse!(values, "registration_request"), registration_response: parse!(values, "registration_response"), registration_upload: parse!(values, "registration_upload"), @@ -371,6 +368,10 @@ where RegistrationRequest::deserialize(¶meters.registration_request).unwrap(), ¶meters.credential_identifier, )?; + assert_eq!( + hex::encode(¶meters.server_public_key), + hex::encode(server_setup.keypair().public().serialize()), + ); assert_eq!( hex::encode(¶meters.oprf_key), hex::encode(server_registration_start_result.oprf_key)