From 71552911b1fa4dbd0dbba3468b3c2975042c0ad5 Mon Sep 17 00:00:00 2001 From: Donovan Date: Sun, 14 Dec 2025 11:49:50 -0600 Subject: [PATCH] refactor file struct --- src/app/client.rs | 0 src/app/mod.rs | 2 + src/app/server.rs | 0 src/lib.rs | 4 +- src/models/mod.rs | 1 + src/{opaque/models.rs => models/opaque.rs} | 0 src/nkode.rs | 1 - src/opaque/client.rs | 2 +- src/opaque/mod.rs | 6 +- src/opaque/server.rs | 61 +++++-------------- src/repository/mod.rs | 1 + .../opaque/in_memory}/in_memory_auth_repo.rs | 7 +-- .../in_memory}/in_memory_auth_session.rs | 9 +-- .../opaque/in_memory}/in_memory_transport.rs | 15 +++-- src/repository/opaque/in_memory/mod.rs | 3 + src/repository/opaque/mod.rs | 2 + src/repository/opaque/repos.rs | 36 +++++++++++ tests/in_memory_test.rs | 12 ++-- 18 files changed, 86 insertions(+), 76 deletions(-) create mode 100644 src/app/client.rs create mode 100644 src/app/mod.rs create mode 100644 src/app/server.rs create mode 100644 src/models/mod.rs rename src/{opaque/models.rs => models/opaque.rs} (100%) delete mode 100644 src/nkode.rs create mode 100644 src/repository/mod.rs rename src/{opaque => repository/opaque/in_memory}/in_memory_auth_repo.rs (93%) rename src/{opaque => repository/opaque/in_memory}/in_memory_auth_session.rs (92%) rename src/{opaque => repository/opaque/in_memory}/in_memory_transport.rs (90%) create mode 100644 src/repository/opaque/in_memory/mod.rs create mode 100644 src/repository/opaque/mod.rs create mode 100644 src/repository/opaque/repos.rs diff --git a/src/app/client.rs b/src/app/client.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/app/mod.rs b/src/app/mod.rs new file mode 100644 index 0000000..0b72313 --- /dev/null +++ b/src/app/mod.rs @@ -0,0 +1,2 @@ +mod client; +mod server; \ No newline at end of file diff --git a/src/app/server.rs b/src/app/server.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/lib.rs b/src/lib.rs index 0ffc484..c17262b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,4 @@ -pub mod nkode; pub mod opaque; +pub mod app; +pub mod repository; +pub mod models; \ No newline at end of file diff --git a/src/models/mod.rs b/src/models/mod.rs new file mode 100644 index 0000000..0551a7c --- /dev/null +++ b/src/models/mod.rs @@ -0,0 +1 @@ +pub mod opaque; \ No newline at end of file diff --git a/src/opaque/models.rs b/src/models/opaque.rs similarity index 100% rename from src/opaque/models.rs rename to src/models/opaque.rs diff --git a/src/nkode.rs b/src/nkode.rs deleted file mode 100644 index fee59c7..0000000 --- a/src/nkode.rs +++ /dev/null @@ -1 +0,0 @@ -use nkode_rs::nkode_core::policy::DEFAULT_POLICY; \ No newline at end of file diff --git a/src/opaque/client.rs b/src/opaque/client.rs index a2b9282..f56a346 100644 --- a/src/opaque/client.rs +++ b/src/opaque/client.rs @@ -9,7 +9,7 @@ use opaque_ke::{ RegistrationRequest, }; -use crate::opaque::models::{RegisterSession, LoginSession, NKodeCipherSuite, PasswordFile}; +use crate::models::opaque::{RegisterSession, LoginSession, NKodeCipherSuite, PasswordFile}; diff --git a/src/opaque/mod.rs b/src/opaque/mod.rs index 8904160..ef578be 100644 --- a/src/opaque/mod.rs +++ b/src/opaque/mod.rs @@ -1,6 +1,2 @@ pub mod server; -pub mod models; -pub mod client; -pub mod in_memory_auth_repo; -pub mod in_memory_auth_session; -pub mod in_memory_transport; \ No newline at end of file +pub mod client; \ No newline at end of file diff --git a/src/opaque/server.rs b/src/opaque/server.rs index ce4e6ed..9b82ff8 100644 --- a/src/opaque/server.rs +++ b/src/opaque/server.rs @@ -4,25 +4,8 @@ use opaque_ke::{ ServerRegistration, }; use uuid::Uuid; -use crate::opaque::models::{RegisterSession, LoginSession, NKodeCipherSuite, NKodeServerSetup, PasswordFile}; - -#[derive(Debug)] -pub enum AuthRepoError { - UserExists, - KeyNotRegistered, - CodeNotRegistered, -} - -pub trait AuthRepo { - fn new_key(&mut self, identifier: &[u8], password_file: PasswordFile) -> Result<(), AuthRepoError>; - fn new_code(&mut self, identifier: &[u8], password_file: PasswordFile) -> Result<(), AuthRepoError>; - - fn has_code(&self, identifier: &[u8]) -> bool; - fn has_key(&self, identifier: &[u8]) -> bool; - - fn get_key_passcode_file(&self, identifier: &[u8]) -> Result; - fn get_code_passcode_file(&self, identifier: &[u8]) -> Result; -} +use crate::models::opaque::{LoginSession, NKodeCipherSuite, NKodeServerSetup, PasswordFile, RegisterSession}; +use crate::repository::opaque::repos::{OpaqueDatabaseRepo, AuthRepoError, OpaqueSessionRepo}; pub struct RegCache { pub session_id: Uuid, @@ -35,25 +18,11 @@ pub struct LoginCache { pub server_login: ServerLogin, } -pub trait AuthSession { - fn new_reg_session(&mut self, identifier: &[u8]) -> Result; - fn get_reg_session(&self, session_id: &Uuid) -> Result; - fn clear_reg_session(&mut self, session_id: &Uuid) -> Result<(), String>; - - fn new_login_session( - &mut self, - identifier: &[u8], - server_login: ServerLogin, - ) -> Result; - fn get_login_session(&self, session_id: &Uuid) -> Result; - fn clear_login_session(&mut self, session_id: &Uuid) -> Result<(), String>; -} - pub trait CredKind { - fn has(repo: &R, id: &[u8]) -> bool; - fn get_pf(repo: &R, id: &[u8]) -> Result; - fn put_pf(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError>; - fn prereq_for_register(_repo: &R, _id: &[u8]) -> Result<(), AuthRepoError> { + fn has(repo: &R, id: &[u8]) -> bool; + fn get_pf(repo: &R, id: &[u8]) -> Result; + fn put_pf(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError>; + fn prereq_for_register(_repo: &R, _id: &[u8]) -> Result<(), AuthRepoError> { Ok(()) } } @@ -62,28 +31,28 @@ pub struct Key; pub struct Code; impl CredKind for Key { - fn has(repo: &R, id: &[u8]) -> bool { + fn has(repo: &R, id: &[u8]) -> bool { repo.has_key(id) } - fn get_pf(repo: &R, id: &[u8]) -> Result { + fn get_pf(repo: &R, id: &[u8]) -> Result { repo.get_key_passcode_file(id) } - fn put_pf(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError> { + fn put_pf(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError> { repo.new_key(id, pf) } } impl CredKind for Code { - fn has(repo: &R, id: &[u8]) -> bool { + fn has(repo: &R, id: &[u8]) -> bool { repo.has_code(id) } - fn get_pf(repo: &R, id: &[u8]) -> Result { + fn get_pf(repo: &R, id: &[u8]) -> Result { repo.get_code_passcode_file(id) } - fn put_pf(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError> { + fn put_pf(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError> { repo.new_code(id, pf) } - fn prereq_for_register(repo: &R, id: &[u8]) -> Result<(), AuthRepoError> { + fn prereq_for_register(repo: &R, id: &[u8]) -> Result<(), AuthRepoError> { if repo.has_key(id) { Ok(()) } else { @@ -92,13 +61,13 @@ impl CredKind for Code { } } -pub struct OpaqueAuth { +pub struct OpaqueAuth { server_setup: NKodeServerSetup, user_repo: R, session: S, } -impl OpaqueAuth { +impl OpaqueAuth { pub fn new(server_setup: NKodeServerSetup, user_repo: R, session: S) -> Self { Self { server_setup, user_repo, session } } diff --git a/src/repository/mod.rs b/src/repository/mod.rs new file mode 100644 index 0000000..5517533 --- /dev/null +++ b/src/repository/mod.rs @@ -0,0 +1 @@ +pub mod opaque; diff --git a/src/opaque/in_memory_auth_repo.rs b/src/repository/opaque/in_memory/in_memory_auth_repo.rs similarity index 93% rename from src/opaque/in_memory_auth_repo.rs rename to src/repository/opaque/in_memory/in_memory_auth_repo.rs index acf34f2..94a834a 100644 --- a/src/opaque/in_memory_auth_repo.rs +++ b/src/repository/opaque/in_memory/in_memory_auth_repo.rs @@ -1,7 +1,6 @@ use std::collections::HashMap; - -use crate::opaque::models::PasswordFile; -use crate::opaque::server::{AuthRepo, AuthRepoError}; +use crate::models::opaque::PasswordFile; +use crate::repository::opaque::repos::{OpaqueDatabaseRepo, AuthRepoError}; #[derive(Debug, Default)] pub struct InMemoryAuthRepo { @@ -29,7 +28,7 @@ impl InMemoryAuthRepo { } } -impl AuthRepo for InMemoryAuthRepo { +impl OpaqueDatabaseRepo for InMemoryAuthRepo { fn new_key( &mut self, identifier: &[u8], diff --git a/src/opaque/in_memory_auth_session.rs b/src/repository/opaque/in_memory/in_memory_auth_session.rs similarity index 92% rename from src/opaque/in_memory_auth_session.rs rename to src/repository/opaque/in_memory/in_memory_auth_session.rs index 21e86fc..694152b 100644 --- a/src/opaque/in_memory_auth_session.rs +++ b/src/repository/opaque/in_memory/in_memory_auth_session.rs @@ -1,8 +1,9 @@ use std::collections::HashMap; -use crate::opaque::server::{RegCache, LoginCache, AuthSession}; -use opaque_ke::{ServerLogin}; -use crate::opaque::models::NKodeCipherSuite; +use crate::opaque::server::{LoginCache, RegCache}; +use opaque_ke::ServerLogin; use uuid::Uuid; +use crate::models::opaque::NKodeCipherSuite; +use crate::repository::opaque::repos::OpaqueSessionRepo; #[derive(Default)] pub struct InMemoryAuthSession { @@ -16,7 +17,7 @@ impl InMemoryAuthSession { } } -impl AuthSession for InMemoryAuthSession { +impl OpaqueSessionRepo for InMemoryAuthSession { fn new_reg_session(&mut self, identifier: &[u8]) -> Result { let cache = RegCache { session_id: Uuid::new_v4(), diff --git a/src/opaque/in_memory_transport.rs b/src/repository/opaque/in_memory/in_memory_transport.rs similarity index 90% rename from src/opaque/in_memory_transport.rs rename to src/repository/opaque/in_memory/in_memory_transport.rs index db39f84..f89b7c0 100644 --- a/src/opaque/in_memory_transport.rs +++ b/src/repository/opaque/in_memory/in_memory_transport.rs @@ -4,11 +4,11 @@ use tokio::sync::Mutex; use std::sync::Arc; use uuid::Uuid; use opaque_ke::{CredentialFinalization, CredentialRequest, RegistrationRequest}; +use crate::models::opaque::{LoginSession, NKodeCipherSuite, NKodeServerSetup, PasswordFile, RegisterSession}; use crate::opaque::client::{ClientAuthError, ServerConnectionLogin, ServerConnectionRegister}; -use crate::opaque::models::{LoginSession, RegisterSession, NKodeCipherSuite, NKodeServerSetup, PasswordFile}; use crate::opaque::server::{OpaqueAuth, CredKind, Key, Code}; -use crate::opaque::in_memory_auth_repo::InMemoryAuthRepo; -use crate::opaque::in_memory_auth_session::InMemoryAuthSession; +use crate::repository::opaque::in_memory::in_memory_auth_repo::InMemoryAuthRepo; +use crate::repository::opaque::in_memory::in_memory_auth_session::InMemoryAuthSession; pub struct InMemoryServer { auth: OpaqueAuth, @@ -24,7 +24,6 @@ impl InMemoryServer { } } -/// Convenience aliases pub type InMemoryKeyServer = InMemoryServer; pub type InMemoryCodeServer = InMemoryServer; @@ -90,19 +89,19 @@ where } } -pub struct SharedServer { +pub struct InMemSharedServer { inner: Arc>>, _k: PhantomData, } -impl SharedServer { +impl InMemSharedServer { pub fn new(inner: Arc>>) -> Self { Self { inner, _k: PhantomData } } } #[async_trait::async_trait] -impl ServerConnectionRegister for SharedServer +impl ServerConnectionRegister for InMemSharedServer where K: CredKind + Send + Sync, { @@ -132,7 +131,7 @@ where } #[async_trait::async_trait] -impl ServerConnectionLogin for SharedServer +impl ServerConnectionLogin for InMemSharedServer where K: CredKind + Send + Sync, { diff --git a/src/repository/opaque/in_memory/mod.rs b/src/repository/opaque/in_memory/mod.rs new file mode 100644 index 0000000..f6d7043 --- /dev/null +++ b/src/repository/opaque/in_memory/mod.rs @@ -0,0 +1,3 @@ +pub mod in_memory_auth_repo; +pub mod in_memory_transport; +pub mod in_memory_auth_session; \ No newline at end of file diff --git a/src/repository/opaque/mod.rs b/src/repository/opaque/mod.rs new file mode 100644 index 0000000..98a9693 --- /dev/null +++ b/src/repository/opaque/mod.rs @@ -0,0 +1,2 @@ +pub mod in_memory; +pub mod repos; \ No newline at end of file diff --git a/src/repository/opaque/repos.rs b/src/repository/opaque/repos.rs new file mode 100644 index 0000000..866d456 --- /dev/null +++ b/src/repository/opaque/repos.rs @@ -0,0 +1,36 @@ +use uuid::Uuid; +use opaque_ke::ServerLogin; +use crate::models::opaque::{NKodeCipherSuite, PasswordFile}; +use crate::opaque::server::{LoginCache, RegCache}; + +#[derive(Debug)] +pub enum AuthRepoError { + UserExists, + KeyNotRegistered, + CodeNotRegistered, +} + +pub trait OpaqueDatabaseRepo { + fn new_key(&mut self, identifier: &[u8], password_file: PasswordFile) -> Result<(), AuthRepoError>; + fn new_code(&mut self, identifier: &[u8], password_file: PasswordFile) -> Result<(), AuthRepoError>; + + fn has_code(&self, identifier: &[u8]) -> bool; + fn has_key(&self, identifier: &[u8]) -> bool; + + fn get_key_passcode_file(&self, identifier: &[u8]) -> Result; + fn get_code_passcode_file(&self, identifier: &[u8]) -> Result; +} + +pub trait OpaqueSessionRepo { + fn new_reg_session(&mut self, identifier: &[u8]) -> Result; + fn get_reg_session(&self, session_id: &Uuid) -> Result; + fn clear_reg_session(&mut self, session_id: &Uuid) -> Result<(), String>; + + fn new_login_session( + &mut self, + identifier: &[u8], + server_login: ServerLogin, + ) -> Result; + fn get_login_session(&self, session_id: &Uuid) -> Result; + fn clear_login_session(&mut self, session_id: &Uuid) -> Result<(), String>; +} \ No newline at end of file diff --git a/tests/in_memory_test.rs b/tests/in_memory_test.rs index bc2f962..3a361f4 100644 --- a/tests/in_memory_test.rs +++ b/tests/in_memory_test.rs @@ -2,11 +2,11 @@ use std::sync::Arc; use opaque_ke::rand::rngs::OsRng; use tokio::sync::Mutex; use nkode_protocol::opaque::client::{AuthenticationData, OpaqueAuthentication, ClientAuthError}; -use nkode_protocol::opaque::in_memory_auth_repo::InMemoryAuthRepo; -use nkode_protocol::opaque::in_memory_auth_session::InMemoryAuthSession; -use nkode_protocol::opaque::in_memory_transport::{InMemoryKeyServer, InMemoryCodeServer, SharedServer}; -use nkode_protocol::opaque::models::NKodeServerSetup; +use nkode_protocol::models::opaque::NKodeServerSetup; use nkode_protocol::opaque::server::{Code, Key, OpaqueAuth}; +use nkode_protocol::repository::opaque::in_memory::in_memory_auth_repo::InMemoryAuthRepo; +use nkode_protocol::repository::opaque::in_memory::in_memory_auth_session::InMemoryAuthSession; +use nkode_protocol::repository::opaque::in_memory::in_memory_transport::{InMemoryCodeServer, InMemoryKeyServer, InMemSharedServer}; #[tokio::test] async fn opaque_key_registration_and_login_roundtrip() { @@ -32,8 +32,8 @@ async fn opaque_code_registration_and_login_roundtrip() { InMemoryAuthRepo::new(), InMemoryAuthSession::new(), ))); - let mut key_server = SharedServer::::new(shared.clone()); - let mut code_server = SharedServer::::new(shared.clone()); + let mut key_server = InMemSharedServer::::new(shared.clone()); + let mut code_server = InMemSharedServer::::new(shared.clone()); let email = "c@d.com"; let key_auth = AuthenticationData::from_secret_key(email, b"supersecret16bytes"); OpaqueAuthentication::register(&key_auth, &mut key_server)