| Crates.io | simple-srp |
| lib.rs | simple-srp |
| version | 0.3.0 |
| created_at | 2026-01-18 14:49:15.38021+00 |
| updated_at | 2026-01-18 15:16:04.486929+00 |
| description | Simplify usage of srp crate |
| homepage | |
| repository | https://github.com/jhg/simple-srp-rs |
| max_upload_size | |
| id | 2052428 |
| size | 20,993 |
It uses srp crate under the hood, and can compile for WebAssembly.
Check security warnings there please. USE AT YOUR OWN RISK!
Sign up flow:
Client::sign_up] - client creates salt and verifier for registration.And send it to server, to store it for future logins.
Login flow:
Client::login_hello] - client creates login hello message with public key.Server::hello_reply] - server responds with salt and its public key.Client::create_evidence] - client creates evidence message to prove knowledge of password.Server::authenticate] - server verifies client evidence and responds with its own evidence.Client::verify_server] - client verifies server evidence to complete authentication.And used structs can be serialized/deserialized for communication.
That's all, it's simple!
An example to help you to get started quickly. It's all together here for simplicity only.
use simple_srp::{Client, Server, groups};
let username = "testuser".to_string();
let password = "testpass".to_string();
let client = Client::<groups::G4096, sha2::Sha512>::new();
let server = Server::<groups::G4096, sha2::Sha512>::new();
// Registration
let creds = client.sign_up(username.clone(), password.clone());
// Login Hello
let (client_hello, client_keypair) = client.login_hello(username.clone());
let (server_hello, server_keypair) = server.hello_reply(
creds.salt.clone(),
creds.verifier.clone(),
).unwrap();
// Client creates evidence
let (login_evidence, client_session) = client.create_evidence(
username.clone(),
password.clone(),
server_hello.salt.clone(),
server_hello.server.clone(),
client_keypair,
).unwrap();
// Server authenticates
let auth_result = server.authenticate(
username.clone(),
creds.salt.clone(),
creds.verifier.clone(),
server_keypair,
client_hello.client.clone(),
login_evidence.evidence.clone(),
).unwrap();
// Client verifies server evidence
let server_verification = client.verify_server(&client_session, auth_result.evidence.clone());
assert!(server_verification.is_ok());