From 570448269c462f1b85876e2200c5182b50524a34 Mon Sep 17 00:00:00 2001 From: UneBaguette <28904802+UneBaguette@users.noreply.github.com> Date: Wed, 1 Jul 2026 22:35:52 +0200 Subject: [PATCH 1/3] chore: fix README package name, enable zeroize on crates, rand_core removed for reexport --- CHANGELOG.md | 6 ++++++ Cargo.toml | 14 ++++++------ README.md | 2 +- benches/opaque.rs | 2 +- examples/digital_locker.rs | 2 +- examples/simple_login.rs | 2 +- src/key_exchange/group/ed25519.rs | 2 +- src/key_exchange/sigma_i/ecdsa.rs | 2 +- src/key_exchange/tripledh_kem.rs | 4 ++-- src/keypair.rs | 2 +- src/lib.rs | 36 +++++++++++++++---------------- src/serialization/tests.rs | 2 +- src/tests/full_test.rs | 2 +- src/tests/mock_rng.rs | 2 +- src/tests/test_opaque_vectors.rs | 2 +- 15 files changed, 44 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6037606..de4aecd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 1.0.0-pre.1 (July 1, 2026) + +* Fixed README package name +* Implement `zeroize` feature on `argon2`, `ed25519-dalek`, `hmac`, `chacha20poly1305` and `sha2` +* Removed `rand_core` dependency to use it through `rand` re-export + ## 1.0.0-pre.0 (June 29, 2026) Forked from [facebook/opaque-ke](https://github.com/facebook/opaque-ke/) at `4.1.0-pre.2`. diff --git a/Cargo.toml b/Cargo.toml index 7a7fcaa..3ae17d5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ name = "opaque-vx" readme = "README.md" repository = "https://github.com/vexahub/opaque-vx" rust-version = "1.90" -version = "1.0.0-pre.0" +version = "1.0.0-pre.1" [features] argon2 = ["dep:argon2"] @@ -22,7 +22,7 @@ curve25519 = ["dep:curve25519-dalek"] default = ["ristretto255", "serde"] ecdsa = ["dep:ecdsa"] ed25519 = ["dep:curve25519-dalek", "dep:ed25519-dalek"] -kem = ["dep:ml-kem", "dep:rand_core"] +kem = ["dep:ml-kem"] ristretto255 = ["dep:curve25519-dalek", "voprf/ristretto255-ciphersuite"] serde = [ "dep:serde", @@ -39,6 +39,7 @@ std = ["dep:getrandom", "rand/std"] [dependencies] argon2 = { version = "0.6.0-rc", default-features = false, features = [ + "zeroize", "alloc", ], optional = true } curve25519-dalek = { version = "5.0.0-rc", default-features = false, features = [ @@ -51,6 +52,7 @@ ecdsa = { version = "0.17.0-rc.23", default-features = false, features = [ "algorithm", ], optional = true } ed25519-dalek = { version = "3.0.0-rc", default-features = false, features = [ + "zeroize", "digest", "hazmat", ], optional = true } @@ -58,12 +60,11 @@ elliptic-curve = { version = "0.14", features = ["sec1"] } generic-array = { version = "1.4", features = ["hybrid-array-0_4", "zeroize"] } hybrid-array = { version = "0.4", features = ["extra-sizes", "zeroize"] } hkdf = "0.13" -hmac = "0.13" +hmac = { version = "0.13", features = ["zeroize"] } ml-kem = { version = "0.3", default-features = false, features = [ "zeroize", ], optional = true } rand = { version = "0.10", default-features = false } -rand_core = { version = "0.10", default-features = false, optional = true } serde = { version = "1", default-features = false, features = [ "derive", ], optional = true } @@ -79,11 +80,10 @@ getrandom = { version = "0.4", features = ["wasm_js"], optional = true } [dev-dependencies] anyhow = "1" bincode-next = { version = "3", features = ["serde", "alloc"] } -chacha20poly1305 = "0.11" +chacha20poly1305 = { version = "0.11", features = ["zeroize"] } criterion = "0.8" cryptoki = "0.12" elliptic-curve = { version = "0.14", features = ["alloc", "pkcs8"] } -rand_core = { version = "0.10", default-features = false } hex = "0.4" p256 = { version = "0.14.0-rc.15", default-features = false, features = [ "ecdsa", @@ -106,7 +106,7 @@ proptest = "1" rand = "0.10" rand_chacha = "0.10" regex = "1" -sha2 = { version = "0.11", default-features = false } +sha2 = { version = "0.11", default-features = false, features = ["zeroize"] } thiserror = "2" # MSRV rustyline = "18" diff --git a/README.md b/README.md index fa8242d..87c68f3 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Installation Add the following line to the dependencies of your `Cargo.toml`: ``` -opaque-ke = { package = "opaque-ke-vx", version = "1.0.0-pre.0" } +opaque-ke = { package = "opaque-vx", version = "1.0.0-pre.0" } ``` ### Minimum Supported Rust Version diff --git a/benches/opaque.rs b/benches/opaque.rs index 87635c8..15a0a96 100644 --- a/benches/opaque.rs +++ b/benches/opaque.rs @@ -8,7 +8,7 @@ extern crate criterion; use criterion::Criterion; use opaque_vx::*; use rand::rngs::SysRng; -use rand_core::UnwrapErr; +use rand::rand_core::UnwrapErr; #[cfg(feature = "ristretto255")] static SUFFIX: &str = "ristretto255"; diff --git a/examples/digital_locker.rs b/examples/digital_locker.rs index 3d28fd0..4a09843 100644 --- a/examples/digital_locker.rs +++ b/examples/digital_locker.rs @@ -35,7 +35,7 @@ use opaque_vx::{ CredentialResponse, RegistrationRequest, RegistrationResponse, RegistrationUpload, ServerLogin, ServerLoginParameters, ServerRegistration, ServerSetup, }; -use rand_core::UnwrapErr; +use rand::rand_core::UnwrapErr; use rustyline::Editor; use rustyline::error::ReadlineError; use rustyline::history::DefaultHistory; diff --git a/examples/simple_login.rs b/examples/simple_login.rs index 7e56847..1931c74 100644 --- a/examples/simple_login.rs +++ b/examples/simple_login.rs @@ -28,7 +28,7 @@ use opaque_vx::{ CredentialResponse, RegistrationRequest, RegistrationResponse, RegistrationUpload, ServerLogin, ServerLoginParameters, ServerRegistration, ServerRegistrationLen, ServerSetup, }; -use rand_core::UnwrapErr; +use rand::rand_core::UnwrapErr; use rustyline::Editor; use rustyline::error::ReadlineError; use rustyline::history::DefaultHistory; diff --git a/src/key_exchange/group/ed25519.rs b/src/key_exchange/group/ed25519.rs index cbb8bf9..6dd6e3f 100644 --- a/src/key_exchange/group/ed25519.rs +++ b/src/key_exchange/group/ed25519.rs @@ -430,7 +430,7 @@ mod test { use ed25519_dalek::{Signer, SigningKey, Verifier, VerifyingKey}; use rand::rngs::SysRng; - use rand_core::UnwrapErr; + use rand::rand_core::UnwrapErr; use super::*; diff --git a/src/key_exchange/sigma_i/ecdsa.rs b/src/key_exchange/sigma_i/ecdsa.rs index 2e1ed01..a532df0 100644 --- a/src/key_exchange/sigma_i/ecdsa.rs +++ b/src/key_exchange/sigma_i/ecdsa.rs @@ -112,7 +112,7 @@ fn ecdsa() { use p256::ecdsa::{Signature, SigningKey, VerifyingKey}; use p256::{NistP256, PublicKey}; use rand::rngs::SysRng; - use rand_core::UnwrapErr; + use rand::rand_core::UnwrapErr; use sha2::Sha256; use crate::tests::mock_rng::CycleRng; diff --git a/src/key_exchange/tripledh_kem.rs b/src/key_exchange/tripledh_kem.rs index ad1a8e7..3d85062 100644 --- a/src/key_exchange/tripledh_kem.rs +++ b/src/key_exchange/tripledh_kem.rs @@ -116,7 +116,7 @@ pub trait KemCoreWrapper { /// which is required by `ml-kem 0.3.x`. struct RngCompat<'a, R>(&'a mut R); -impl rand_core::TryRng for RngCompat<'_, R> { +impl rand::rand_core::TryRng for RngCompat<'_, R> { type Error = core::convert::Infallible; fn try_next_u32(&mut self) -> Result { @@ -133,7 +133,7 @@ impl rand_core::TryRng for RngCompat<'_, R> { } } -impl rand_core::TryCryptoRng for RngCompat<'_, R> {} +impl rand::rand_core::TryCryptoRng for RngCompat<'_, R> {} type RcEncapsulationKeyLen = <::EncapsulationKey as KeySizeUser>::KeySize; #[allow(deprecated)] diff --git a/src/keypair.rs b/src/keypair.rs index 9153f12..8898af9 100644 --- a/src/keypair.rs +++ b/src/keypair.rs @@ -308,7 +308,7 @@ mod tests { }; use hkdf::Hkdf; use rand::rngs::SysRng; - use rand_core::UnwrapErr; + use rand::rand_core::UnwrapErr; macro_rules! test { ($mod:ident, $point:ty) => { diff --git a/src/lib.rs b/src/lib.rs index db8b278..dd93d12 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -64,7 +64,7 @@ //! # } //! use rand::Rng; //! use rand::rngs::SysRng; -//! use rand_core::UnwrapErr; +//! use rand::rand_core::UnwrapErr; //! //! let mut rng = UnwrapErr(SysRng); //! let server_setup = ServerSetup::::new(&mut rng); @@ -122,7 +122,7 @@ //! use opaque_vx::ClientRegistration; //! use rand::Rng; //! use rand::rngs::SysRng; -//! use rand_core::UnwrapErr; +//! use rand::rand_core::UnwrapErr; //! //! let mut client_rng = UnwrapErr(SysRng); //! let client_registration_start_result = @@ -159,7 +159,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -207,7 +207,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -256,7 +256,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -308,7 +308,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! use opaque_vx::ClientLogin; //! //! let mut client_rng = UnwrapErr(SysRng); @@ -345,7 +345,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -416,7 +416,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -474,7 +474,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -572,7 +572,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -670,7 +670,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -783,7 +783,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -830,7 +830,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -888,7 +888,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -948,7 +948,7 @@ //! # type Ksf = opaque_vx::ksf::Identity; //! # } //! # use rand::{rngs::SysRng, Rng}; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # let mut client_rng = UnwrapErr(SysRng); //! # let client_registration_start_result = ClientRegistration::::start( //! # &mut client_rng, @@ -1021,7 +1021,7 @@ //! # use generic_array::{GenericArray, typenum::U0}; //! # use opaque_vx::{CipherSuite, ClientLogin, ClientRegistration, ClientRegistrationFinishParameters, ServerRegistration, keypair::{PrivateKey, PublicKey}, key_exchange::{KeyExchange, group::Group, tripledh::DiffieHellman}}; //! # use rand::rngs::SysRng; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! //! type Ristretto255 = <::KeyExchange as KeyExchange>::Group; //! # struct Default; @@ -1118,7 +1118,7 @@ //! # use opaque_vx::{CipherSuite, ClientLogin, ClientRegistration, ClientRegistrationFinishParameters, keypair::{PrivateKey, PublicKey}, key_exchange::{KeyExchange, group::Group, tripledh::DiffieHellman}}; //! # use rand::rngs::SysRng; //! # use rand::Rng; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! //! type Ristretto255 = <::KeyExchange as KeyExchange>::Group; //! # type Hash = <::KeyExchange as KeyExchange>::Hash; @@ -1277,7 +1277,7 @@ //! # use opaque_vx::errors::ProtocolError; //! # use rand::rngs::SysRng; //! # use rand::Rng; -//! # use rand_core::UnwrapErr; +//! # use rand::rand_core::UnwrapErr; //! # use std::default::Default; //! # #[cfg(feature = "argon2")] //! # { diff --git a/src/serialization/tests.rs b/src/serialization/tests.rs index c0741ec..42d8dec 100644 --- a/src/serialization/tests.rs +++ b/src/serialization/tests.rs @@ -13,7 +13,7 @@ use proptest::collection::vec; use proptest::prelude::*; use rand::Rng; use rand::rngs::SysRng; -use rand_core::UnwrapErr; +use rand::rand_core::UnwrapErr; use voprf::Group as _; use crate::ciphersuite::{CipherSuite, KeGroup, OprfGroup, OprfHash}; diff --git a/src/tests/full_test.rs b/src/tests/full_test.rs index de24110..6013d91 100644 --- a/src/tests/full_test.rs +++ b/src/tests/full_test.rs @@ -17,7 +17,7 @@ use ml_kem::MlKem768; use rand::SeedableRng; use rand::rngs::SysRng; use rand_chacha::ChaCha20Rng; -use rand_core::UnwrapErr; +use rand::rand_core::UnwrapErr; use serde_json::Value; use subtle::ConstantTimeEq; use voprf::Group as _; diff --git a/src/tests/mock_rng.rs b/src/tests/mock_rng.rs index 4a20190..cee1c84 100644 --- a/src/tests/mock_rng.rs +++ b/src/tests/mock_rng.rs @@ -6,7 +6,7 @@ use core::cmp::min; use std::vec::Vec; use core::convert::Infallible; -use rand_core::{TryCryptoRng, TryRng}; +use rand::rand_core::{TryCryptoRng, TryRng}; /// A simple implementation of `Rng` for testing purposes. /// diff --git a/src/tests/test_opaque_vectors.rs b/src/tests/test_opaque_vectors.rs index d04c792..d16ce61 100644 --- a/src/tests/test_opaque_vectors.rs +++ b/src/tests/test_opaque_vectors.rs @@ -27,7 +27,7 @@ use generic_array::typenum::Sum; use generic_array::{ArrayLength, GenericArray}; use rand::Rng; use rand::rngs::SysRng; -use rand_core::UnwrapErr; +use rand::rand_core::UnwrapErr; use serde_json::Value; #[allow(non_snake_case)] -- 2.39.5 From 00c2f7293a2ccd34362f19d4ae402c541663f9f2 Mon Sep 17 00:00:00 2001 From: breakingbread <28904802+UneBaguette@users.noreply.github.com> Date: Wed, 1 Jul 2026 22:46:21 +0200 Subject: [PATCH 2/3] readme: bump MSRV to 1.90 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 87c68f3..f9bab33 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ opaque-ke = { package = "opaque-vx", version = "1.0.0-pre.0" } ### Minimum Supported Rust Version -Rust **1.89** or higher. +Rust **1.90** or higher. Audit ----- -- 2.39.5 From 8c0f1e2611bc34f2d1256d0c1da2ec750d685f7b Mon Sep 17 00:00:00 2001 From: UneBaguette <28904802+UneBaguette@users.noreply.github.com> Date: Wed, 1 Jul 2026 23:47:49 +0200 Subject: [PATCH 3/3] chore: fix format code --- benches/opaque.rs | 2 +- src/key_exchange/group/ed25519.rs | 2 +- src/key_exchange/sigma_i/ecdsa.rs | 2 +- src/keypair.rs | 2 +- src/serialization/tests.rs | 2 +- src/tests/full_test.rs | 2 +- src/tests/test_opaque_vectors.rs | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/benches/opaque.rs b/benches/opaque.rs index 15a0a96..5c3800e 100644 --- a/benches/opaque.rs +++ b/benches/opaque.rs @@ -7,8 +7,8 @@ extern crate criterion; use criterion::Criterion; use opaque_vx::*; -use rand::rngs::SysRng; use rand::rand_core::UnwrapErr; +use rand::rngs::SysRng; #[cfg(feature = "ristretto255")] static SUFFIX: &str = "ristretto255"; diff --git a/src/key_exchange/group/ed25519.rs b/src/key_exchange/group/ed25519.rs index 6dd6e3f..9abe645 100644 --- a/src/key_exchange/group/ed25519.rs +++ b/src/key_exchange/group/ed25519.rs @@ -429,8 +429,8 @@ mod test { use std::iter; use ed25519_dalek::{Signer, SigningKey, Verifier, VerifyingKey}; - use rand::rngs::SysRng; use rand::rand_core::UnwrapErr; + use rand::rngs::SysRng; use super::*; diff --git a/src/key_exchange/sigma_i/ecdsa.rs b/src/key_exchange/sigma_i/ecdsa.rs index a532df0..0f8bbe2 100644 --- a/src/key_exchange/sigma_i/ecdsa.rs +++ b/src/key_exchange/sigma_i/ecdsa.rs @@ -111,8 +111,8 @@ fn ecdsa() { use p256::ecdsa::signature::RandomizedDigestSigner; use p256::ecdsa::{Signature, SigningKey, VerifyingKey}; use p256::{NistP256, PublicKey}; - use rand::rngs::SysRng; use rand::rand_core::UnwrapErr; + use rand::rngs::SysRng; use sha2::Sha256; use crate::tests::mock_rng::CycleRng; diff --git a/src/keypair.rs b/src/keypair.rs index 8898af9..0e6104d 100644 --- a/src/keypair.rs +++ b/src/keypair.rs @@ -307,8 +307,8 @@ mod tests { ServerRegistrationStartResult, ServerSetup, }; use hkdf::Hkdf; - use rand::rngs::SysRng; use rand::rand_core::UnwrapErr; + use rand::rngs::SysRng; macro_rules! test { ($mod:ident, $point:ty) => { diff --git a/src/serialization/tests.rs b/src/serialization/tests.rs index 42d8dec..10751e4 100644 --- a/src/serialization/tests.rs +++ b/src/serialization/tests.rs @@ -12,8 +12,8 @@ use generic_array::typenum::{Sum, Unsigned}; use proptest::collection::vec; use proptest::prelude::*; use rand::Rng; -use rand::rngs::SysRng; use rand::rand_core::UnwrapErr; +use rand::rngs::SysRng; use voprf::Group as _; use crate::ciphersuite::{CipherSuite, KeGroup, OprfGroup, OprfHash}; diff --git a/src/tests/full_test.rs b/src/tests/full_test.rs index 6013d91..b28f86c 100644 --- a/src/tests/full_test.rs +++ b/src/tests/full_test.rs @@ -15,9 +15,9 @@ use generic_array::{ArrayLength, GenericArray}; #[cfg(feature = "kem")] use ml_kem::MlKem768; use rand::SeedableRng; +use rand::rand_core::UnwrapErr; use rand::rngs::SysRng; use rand_chacha::ChaCha20Rng; -use rand::rand_core::UnwrapErr; use serde_json::Value; use subtle::ConstantTimeEq; use voprf::Group as _; diff --git a/src/tests/test_opaque_vectors.rs b/src/tests/test_opaque_vectors.rs index d16ce61..e9eb604 100644 --- a/src/tests/test_opaque_vectors.rs +++ b/src/tests/test_opaque_vectors.rs @@ -26,8 +26,8 @@ use digest::OutputSizeUser; use generic_array::typenum::Sum; use generic_array::{ArrayLength, GenericArray}; use rand::Rng; -use rand::rngs::SysRng; use rand::rand_core::UnwrapErr; +use rand::rngs::SysRng; use serde_json::Value; #[allow(non_snake_case)] -- 2.39.5