74 lines
2.9 KiB
Rust
74 lines
2.9 KiB
Rust
use opaque_ke::rand::rngs::OsRng;
|
|
use nkode_protocol::client::opaque::{OpaqueAuthData, ClientAuthError, OpaqueAuth};
|
|
use nkode_protocol::server::app::{ServerApp};
|
|
use nkode_protocol::server::repository::in_memory::in_memory_opaque_db::InMemoryOpaqueDB;
|
|
use nkode_protocol::server::repository::in_memory::in_memory_opaque_session::InMemoryOpaqueSession;
|
|
use nkode_protocol::shared::opaque::NKodeServerSetup;
|
|
use nkode_protocol::server::repository::in_memory::in_memory_transport::{InMemoryCodeServer, InMemoryKeyServer, InMemoryServerTransport};
|
|
use nkode_protocol::server::repository::in_memory::in_memory_user_db::InMemoryUserDB;
|
|
|
|
#[tokio::test]
|
|
async fn opaque_key_registration_and_login_roundtrip() {
|
|
let mut rng = OsRng;
|
|
let server_setup = NKodeServerSetup::new(&mut rng);
|
|
let server = ServerApp::new(
|
|
server_setup,
|
|
InMemoryOpaqueDB::new(),
|
|
InMemoryOpaqueSession::new(),
|
|
InMemoryUserDB::new()
|
|
);
|
|
let key_server: InMemoryKeyServer = InMemoryServerTransport::new(&server);
|
|
let auth = OpaqueAuth::new(&key_server);
|
|
let auth_data = OpaqueAuthData::from_secret_key("a@b.com", b"supersecret16bytes");
|
|
auth.register(&auth_data).await.expect("registration should succeed");
|
|
let _ =auth.login(&auth_data)
|
|
.await
|
|
.expect("login should succeed");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn opaque_login_fails_if_not_registered() {
|
|
let mut rng = OsRng;
|
|
let server_setup = NKodeServerSetup::new(&mut rng);
|
|
let server = ServerApp::new(
|
|
server_setup,
|
|
InMemoryOpaqueDB::new(),
|
|
InMemoryOpaqueSession::new(),
|
|
InMemoryUserDB::new()
|
|
);
|
|
let key_server = InMemoryKeyServer::new(&server);
|
|
let auth = OpaqueAuthData::from_secret_key("nope@nope.com", b"supersecret16bytes");
|
|
let login_reg = OpaqueAuth::new(&key_server);
|
|
let err = login_reg.login(&auth)
|
|
.await
|
|
.expect_err("login should fail if user not registered");
|
|
match err {
|
|
ClientAuthError::Transport(_) => {}
|
|
other => panic!("unexpected error: {other:?}"),
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn cannot_register_code_before_key() {
|
|
let mut rng = OsRng;
|
|
let server_setup = NKodeServerSetup::new(&mut rng);
|
|
let server = ServerApp::new(
|
|
server_setup,
|
|
InMemoryOpaqueDB::new(),
|
|
InMemoryOpaqueSession::new(),
|
|
InMemoryUserDB::new()
|
|
);
|
|
let key_server: InMemoryCodeServer = InMemoryServerTransport::new(&server);
|
|
let auth = OpaqueAuth::new(&key_server);
|
|
let auth_data = OpaqueAuthData::from_code("x@y.com", &[1u64,2,3,4]);
|
|
let err = auth.register(&auth_data)
|
|
.await
|
|
.expect_err("should fail because key is not registered");
|
|
match err {
|
|
ClientAuthError::Transport(msg) => {
|
|
assert!(msg.contains("KeyNotRegistered"), "msg was: {msg}");
|
|
}
|
|
other => panic!("unexpected error: {other:?}"),
|
|
}
|
|
}
|