implement in-memory server

This commit is contained in:
2025-12-17 20:23:26 -06:00
parent fe499add9e
commit 48cd1d0e31
8 changed files with 96 additions and 131 deletions

View File

@@ -1,30 +1,44 @@
use opaque_ke::rand::rngs::OsRng;
use nkode_protocol::client::opaque::{AuthenticationData, ClientAuthError, OpaqueAuthLogin, OpaqueAuthRegister};
use nkode_protocol::client::opaque::{AuthenticationData, ClientAuthError, OpaqueAuth};
use nkode_protocol::server::app::{Key, 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};
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 = InMemoryKeyServer::new(server_setup);
let auth_reg = OpaqueAuthRegister::new(server);
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 = AuthenticationData::from_secret_key("a@b.com", b"supersecret16bytes");
auth_reg.register(&auth_data).await.expect("registration should succeed");
let login_reg = OpaqueAuthLogin::new(server);
let _ =login_reg.login(&auth_data)
auth.register(&auth_data).await.expect("registration should succeed");
let _ =auth.login(&auth_data)
.await
.expect("login should succeed");
// assert!(!session_key.is_empty());
}
#[tokio::test]
async fn opaque_login_fails_if_not_registered() {
let mut rng = OsRng;
let server_setup = NKodeServerSetup::new(&mut rng);
let server = InMemoryKeyServer::new(server_setup);
let server = ServerApp::new(
server_setup,
InMemoryOpaqueDB::new(),
InMemoryOpaqueSession::new(),
InMemoryUserDB::new()
);
let key_server = InMemoryKeyServer::new(&server);
let auth = AuthenticationData::from_secret_key("nope@nope.com", b"supersecret16bytes");
let login_reg = OpaqueAuthLogin::new(server);
let login_reg = OpaqueAuth::new(&key_server);
let err = login_reg.login(&auth)
.await
.expect_err("login should fail if user not registered");
@@ -38,10 +52,16 @@ async fn opaque_login_fails_if_not_registered() {
async fn cannot_register_code_before_key() {
let mut rng = OsRng;
let server_setup = NKodeServerSetup::new(&mut rng);
let server = InMemoryCodeServer::new(server_setup);
let auth_reg = OpaqueAuthRegister::new(server.clone());
let auth = AuthenticationData::from_code("x@y.com", &[1u64,2,3,4]);
let err = auth_reg.register(&auth)
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 = AuthenticationData::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 {