This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [curve25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek) ([source](https://github.com/dalek-cryptography/curve25519-dalek/tree/HEAD/curve25519-dalek)) | dependencies | patch | `5.0.0-rc.1` → `5.0.0` | | [ed25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek) ([source](https://github.com/dalek-cryptography/curve25519-dalek/tree/HEAD/ed25519-dalek)) | dependencies | patch | `3.0.0-rc.1` → `3.0.0` | | [p256](https://github.com/RustCrypto/elliptic-curves/tree/master/p256) ([source](https://github.com/RustCrypto/elliptic-curves)) | dev-dependencies | patch | `0.14.0-rc.15` → `0.14.0` | | [p384](https://github.com/RustCrypto/elliptic-curves/tree/master/p384) ([source](https://github.com/RustCrypto/elliptic-curves)) | dev-dependencies | patch | `0.14.0-rc.15` → `0.14.0` | --- ### Release Notes <details> <summary>dalek-cryptography/curve25519-dalek (curve25519-dalek)</summary> ### [`v5.0.0`](https://github.com/dalek-cryptography/curve25519-dalek/blob/HEAD/curve25519-dalek/CHANGELOG.md#500---2026-07-06) ##### Breaking Changes - Update edition to 2024 - Update the MSRV from 1.60 to 1.85 - Remove `group-bits` feature due to soundness issues with underlying trait ([#​909](https://github.com/dalek-cryptography/curve25519-dalek/pull/909)) - Re-export `rand_core` ([#​908](https://github.com/dalek-cryptography/curve25519-dalek/pull/908)) - Rename `Scalar::batch_invert` -> `Scalar::invert_batch` for consistency. Also make it no-alloc. ([#​789](https://github.com/dalek-cryptography/curve25519-dalek/pull/789)) - Remove deprecated functions `FieldElement::as_bytes()` and `EdwardsPoint::nonspec_map_to_curve()` ([#​778](https://github.com/dalek-cryptography/curve25519-dalek/pull/778)) - Upgrade `rand_core` dependency to v0.10.0 - Upgrade `digest` and `sha2` deps ##### Other Changes - Perf: Use maximum available NAF window size in `VartimePrecomputedStraus` ([#​848](https://github.com/dalek-cryptography/curve25519-dalek/pull/848)) - Perf: Skip checking 8 candidate points in `RistrettoPoint::lizard_decode` ([#​882](https://github.com/dalek-cryptography/curve25519-dalek/pull/882)) - Add Lizard bytes-to-point injection for Ristretto. Gated under `lizard` feature. ([#​826](https://github.com/dalek-cryptography/curve25519-dalek/pull/826)) - Add an allocating batch inversion called `Scalar::invert_batch_alloc` ([#​789](https://github.com/dalek-cryptography/curve25519-dalek/pull/789)) - Add `Scalar::div_by_2` ([#​805](https://github.com/dalek-cryptography/curve25519-dalek/pull/805)) - Add `EdwardsPoint::hash_to_curve` ([#​786](https://github.com/dalek-cryptography/curve25519-dalek/pull/786)) - Undeprecate `Scalar::from_bits()` ([#​780](https://github.com/dalek-cryptography/curve25519-dalek/pull/780)) - Use constant-time equality testing for compressed Ristretto and Edwards points, rather than autoderived equality </details> <details> <summary>dalek-cryptography/curve25519-dalek (ed25519-dalek)</summary> ### [`v3.0.0`](https://github.com/dalek-cryptography/curve25519-dalek/blob/HEAD/ed25519-dalek/CHANGELOG.md#300---2026-07-06) ##### Breaking Changes - Update edition to 2024 - Update the MSRV from 1.60 to 1.85 - Remove `std` feature now that `error::Error` is in `core` - Make signing and verifying keys use `pkcs8::spki::SignatureAlgorithmIdentifier` instead of `DynSignatureAlgorithmIdentifier` ([#​779](https://github.com/dalek-cryptography/curve25519-dalek/pull/779)) - Upgrade `ed25519` dependency to v3.0.0 - Upgrade `signature` dependency to v3.0.0 - Upgrade `sha2` and `sha3` dependencies to v0.11 - Upgrade `getrandom` dependency to v0.4 - Upgrade `chacha20` dependency to v0.10 - Upgrade `rand_core` dependency to v0.10.0 ##### Other Changes - Re-export `rand_core` ([#​908](https://github.com/dalek-cryptography/curve25519-dalek/pull/908)) - Add allocation-free `EdwardsPoint::compress_batch` ([#​832](https://github.com/dalek-cryptography/curve25519-dalek/pull/832)) - Add `strobe-rs` dependency and delete vendored STROBE impl ([#​895](https://github.com/dalek-cryptography/curve25519-dalek/pull/895)) - Impl `MultipartSigner` and `MultipartVerifier` for `SigningKey` and `VerifyingKey` ([#​764](https://github.com/dalek-cryptography/curve25519-dalek/pull/764)) - Impl `KeySizeUser`, `TryKeyInit`, and `Generate` for `SigningKey`. Also impl `KeySizeUser` for `VerifyingKey` [#​733](https://github.com/dalek-cryptography/curve25519-dalek/pull/733) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI1Mi4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=--> --------- Co-authored-by: UneBaguette <[email protected]> Reviewed-on: #8 Co-authored-by: Renovate Bot <[email protected]> Co-committed-by: Renovate Bot <[email protected]>
The OPAQUE key exchange protocol
OPAQUE is an augmented password-authenticated key exchange protocol. It allows a client to authenticate to a server using a password, without ever having to expose the plaintext password to the server.
This implementation is based on RFC 9807.
This is a fork of facebook/opaque-ke maintained by VexaHub, targeting the latest RustCrypto ecosystem.
Background
Augmented Password Authenticated Key Exchange (aPAKE) protocols are designed to provide password authentication and mutually authenticated key exchange without relying on PKI (except during user/password registration) and without disclosing passwords to servers or other entities other than the client machine.
OPAQUE is a PKI-free aPAKE that is secure against pre-computation attacks and capable of using a secret salt.
Documentation
The API can be found here along with an example for usage. More examples can be found in the examples directory.
Installation
Add the following line to the dependencies of your Cargo.toml:
opaque-vx = "1.0.0-rc.0"
Minimum Supported Rust Version
Rust 1.90 or higher.
Audit
This library was audited by NCC Group in June of 2021. The audit was sponsored by WhatsApp for its use in enabling end-to-end encrypted backups.
The audit found issues in release v0.5.0, and the fixes were subsequently incorporated into release v1.2.0. See
the full audit report here.
Resources
- OPAQUE academic publication, including formal definitions and a proof of security
- RFC 9807, containing a detailed (byte-level) specification for OPAQUE
- "Let's talk about PAKE", an introductory blog post written by Matthew Green that covers OPAQUE
- @serenity-kit/opaque, a WebAssembly package for this library
- opaque-wasm, a WebAssembly package for this library. A comparison between
@serenity-kit/opaqueandopaque-wasmcan be found here - react-native-opaque, a React Native package for this library
matching the API of
@serenity-kit/opaque
Contributors
This fork is maintained by VexaHub.
The original authors are Kevin Lewi (@kevinlewi) and François Garillot (@huitseeker). To learn more about contributing to this project, see this document.
Acknowledgments
Special thanks go to Hugo Krawczyk and Chris Wood for helping to clarify discrepancies and making suggestions for improving this implementation. Additional credit goes to @daxpedda for adding no_std support, p256 support, and making other general improvements to the library.
License
This project is dual-licensed under either the MIT license or the Apache License, Version 2.0. You may select, at your option, one of the above-listed licenses.