Files
nkode-protocol/tests/in_memory_test.rs
2025-12-18 11:19:11 -06:00

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::models::opaque::NKodeServerSetup;
use nkode_protocol::server::repository::in_memory::in_memory_transport::{InMemoryCodeServer, InMemoryKeyServer, InMemoryServer};
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 = InMemoryServer::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 = InMemoryServer::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:?}"),
}
}