MCPcopy Index your code
hub / github.com/facebook/opaque-ke

github.com/facebook/opaque-ke @v4.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v4.0.1 ↗ · + Follow
440 symbols 850 edges 37 files 90 documented · 20%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

The OPAQUE key exchange protocol Build Status

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.

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-ke = "4"

Minimum Supported Rust Version

Rust 1.85 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

The authors of this code 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.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 181
Function 130
Class 104
Interface 19
Enum 6

Languages

Rust100%

Modules by API surface

src/opaque.rs40 symbols
src/key_exchange/group/ed25519.rs30 symbols
src/serialization/tests.rs28 symbols
src/keypair.rs27 symbols
src/key_exchange/group/ristretto255.rs26 symbols
tests/remote_key.rs22 symbols
src/tests/full_test.rs22 symbols
src/key_exchange/mod.rs19 symbols
src/messages.rs17 symbols
src/envelope.rs17 symbols
src/tests/test_opaque_vectors.rs16 symbols
src/key_exchange/sigma_i/message.rs16 symbols

For agents

$ claude mcp add opaque-ke \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page