breakingbread 4ea5901630
Rust CI / test (1.90.0 / --features ristretto255 / --features serde) (pull_request) Successful in 8m52s
Rust CI / test (stable / --features ristretto255 / --features serde) (pull_request) Successful in 8m48s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (pull_request) Successful in 14m0s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (pull_request) Successful in 14m41s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (pull_request) Successful in 14m26s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (pull_request) Successful in 16m45s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (pull_request) Successful in 14m51s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (pull_request) Successful in 16m49s
Rust CI / test (1.90.0 / --features ristretto255,kem / no frontend) (pull_request) Successful in 11m1s
Rust CI / test (stable / --features ristretto255,kem / no frontend) (pull_request) Successful in 10m55s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features argon2) (pull_request) Successful in 10m46s
Rust CI / test (stable / --features ristretto255,kem / --features argon2) (pull_request) Successful in 10m40s
Rust CI / test (stable / --features ristretto255,kem / --features serde) (pull_request) Successful in 12m39s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features serde) (pull_request) Successful in 12m50s
Rust CI / test simple_login example (pull_request) Successful in 24s
Rust CI / test digital_locker example (pull_request) Successful in 25s
Rust CI / cargo bench compilation () (pull_request) Successful in 5m5s
Rust CI / cargo bench compilation (--features ristretto255) (pull_request) Successful in 5m39s
Rust CI / cargo audit (pull_request) Successful in 13s
Rust CI / cargo bench compilation (--features ristretto255,kem) (pull_request) Successful in 3m34s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255,curve25519,ecdsa,ed25519) (pull_request) Successful in 1m59s
Rust CI / no-std (thumbv6m-none-eabi / no backend) (pull_request) Successful in 1m44s
Rust CI / no-std (wasm32-unknown-unknown / no backend) (pull_request) Successful in 1m45s
Rust CI / no-std (thumbv6m-none-eabi / curve25519) (pull_request) Successful in 1m54s
Rust CI / no-std (wasm32-unknown-unknown / curve25519) (pull_request) Successful in 1m54s
Rust CI / no-std (thumbv6m-none-eabi / ecdsa) (pull_request) Successful in 1m45s
Rust CI / no-std (wasm32-unknown-unknown / ecdsa) (pull_request) Successful in 1m44s
Rust CI / no-std (thumbv6m-none-eabi / ed25519) (pull_request) Successful in 1m59s
Rust CI / no-std (wasm32-unknown-unknown / ed25519) (pull_request) Successful in 1m56s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255) (pull_request) Successful in 1m50s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255) (pull_request) Successful in 1m51s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255,curve25519,ecdsa,ed25519) (pull_request) Successful in 2m0s
Rust CI / cargo fmt (pull_request) Successful in 34s
Rust CI / cargo clippy (pull_request) Successful in 2m31s
Rust CI / test (1.90.0 / no backend / no frontend) (pull_request) Successful in 8m40s
Rust CI / test (stable / no backend / no frontend) (pull_request) Successful in 5m49s
Rust CI / test (stable / no backend / --features argon2) (pull_request) Successful in 5m59s
Rust CI / test (1.90.0 / no backend / --features argon2) (pull_request) Successful in 8m23s
Rust CI / test (1.90.0 / no backend / --features serde) (pull_request) Successful in 7m25s
Rust CI / test (stable / no backend / --features serde) (pull_request) Successful in 7m22s
Rust CI / test (1.90.0 / --features curve25519 / no frontend) (pull_request) Successful in 6m9s
Rust CI / test (stable / --features curve25519 / no frontend) (pull_request) Successful in 6m6s
Rust CI / test (stable / --features curve25519 / --features argon2) (pull_request) Successful in 6m49s
Rust CI / test (1.90.0 / --features curve25519 / --features argon2) (pull_request) Successful in 6m51s
Rust CI / test (stable / --features curve25519 / --features serde) (pull_request) Successful in 8m42s
Rust CI / test (1.90.0 / --features curve25519 / --features serde) (pull_request) Successful in 8m42s
Rust CI / test (1.90.0 / --features ecdsa / no frontend) (pull_request) Successful in 7m55s
Rust CI / test (stable / --features ecdsa / no frontend) (pull_request) Successful in 7m55s
Rust CI / test (stable / --features ecdsa / --features argon2) (pull_request) Successful in 7m49s
Rust CI / test (1.90.0 / --features ecdsa / --features argon2) (pull_request) Successful in 7m55s
Rust CI / test (1.90.0 / --features ecdsa / --features serde) (pull_request) Successful in 9m29s
Rust CI / test (stable / --features ecdsa / --features serde) (pull_request) Successful in 9m26s
Rust CI / test (stable / --features ed25519 / no frontend) (pull_request) Successful in 7m54s
Rust CI / test (1.90.0 / --features ed25519 / no frontend) (pull_request) Successful in 7m55s
Rust CI / test (1.90.0 / --features ed25519 / --features argon2) (pull_request) Successful in 8m1s
Rust CI / test (stable / --features ed25519 / --features argon2) (pull_request) Successful in 8m1s
Rust CI / test (1.90.0 / --features ed25519 / --features serde) (pull_request) Successful in 9m21s
Rust CI / test (stable / --features ed25519 / --features serde) (pull_request) Successful in 9m21s
Rust CI / test (1.90.0 / --features ristretto255 / no frontend) (pull_request) Successful in 7m7s
Rust CI / test (stable / --features ristretto255 / no frontend) (pull_request) Successful in 7m14s
Rust CI / test (1.90.0 / --features ristretto255 / --features argon2) (pull_request) Successful in 7m17s
Rust CI / test (stable / --features ristretto255 / --features argon2) (pull_request) Successful in 7m15s
chore: release v1.0.0 stable
2026-09-03 14:08:07 +08:00
2026-09-03 14:08:07 +08:00
2026-09-03 14:08:07 +08:00
2026-09-03 14:08:07 +08:00
2026-09-03 14:08:07 +08:00
2025-05-19 13:56:25 -07:00
2026-01-22 15:37:21 -08:00
2022-04-01 16:10:00 -07:00

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

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.

S
Description
Implementation of OPAQUE (RFC 9807) written in Rust. This is a fork of opaque-ke (https://github.com/facebook/opaque-ke)
Readme
2.6 MiB
Languages
Rust 100%