refactor files
This commit is contained in:
@@ -1,2 +0,0 @@
|
|||||||
mod client;
|
|
||||||
mod server;
|
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use nkode_rs::nkode_core::keypad::Keypad;
|
use nkode_rs::nkode_core::keypad::Keypad;
|
||||||
use crate::models::app::{OpaqueAPI, AuthAPI, CodeLoginData, CodeLoginSession, Icon, IconID, KeyLoginSession, ICON_ID_SIZE, LoginSession};
|
use crate::shared::models::app::{OpaqueAPI, AuthAPI, CodeLoginData, CodeLoginSession, Icon, IconID, KeyLoginSession, ICON_ID_SIZE, LoginSession};
|
||||||
use crate::models::email::Email;
|
use crate::shared::models::email::Email;
|
||||||
use crate::models::opaque::{OpaqueLoginSession, UserSecretKey};
|
use crate::shared::models::opaque::{OpaqueLoginSession, UserSecretKey};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use nkode_rs::nkode_core::nkode_cipher::NKodeCipher;
|
use nkode_rs::nkode_core::nkode_cipher::NKodeCipher;
|
||||||
use nkode_rs::from_bytes::FromBytes;
|
use nkode_rs::from_bytes::FromBytes;
|
||||||
use nkode_rs::nkode_core::chacha20prng::Nonce;
|
use nkode_rs::nkode_core::chacha20prng::Nonce;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use nkode_rs::nkode_core::policy::{NKodePolicy, DEFAULT_POLICY};
|
use nkode_rs::nkode_core::policy::{NKodePolicy, DEFAULT_POLICY};
|
||||||
use crate::opaque::client::{AuthenticationData, OpaqueAuthLogin, OpaqueAuthRegister, ServerConnectionLogin, ServerConnectionRegister};
|
use crate::client::opaque::{AuthenticationData, OpaqueAuthLogin, OpaqueAuthRegister, ServerConnectionLogin, ServerConnectionRegister};
|
||||||
|
|
||||||
pub struct Login;
|
pub struct Login;
|
||||||
pub struct Register;
|
pub struct Register;
|
||||||
2
src/client/mod.rs
Normal file
2
src/client/mod.rs
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
mod app;
|
||||||
|
pub mod opaque;
|
||||||
@@ -9,8 +9,7 @@ use opaque_ke::{
|
|||||||
CredentialFinalization, CredentialRequest,
|
CredentialFinalization, CredentialRequest,
|
||||||
RegistrationRequest,
|
RegistrationRequest,
|
||||||
};
|
};
|
||||||
use crate::models::app::KeyLoginSession;
|
use crate::shared::models::opaque::{OpaqueRegisterSession, OpaqueLoginSession, NKodeCipherSuite, PasswordFile, OpaqueSessionKey};
|
||||||
use crate::models::opaque::{OpaqueRegisterSession, OpaqueLoginSession, NKodeCipherSuite, PasswordFile, OpaqueSessionKey};
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum ClientAuthError {
|
pub enum ClientAuthError {
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
pub mod opaque;
|
pub mod client;
|
||||||
pub mod app;
|
pub mod server;
|
||||||
pub mod repository;
|
pub mod shared;
|
||||||
pub mod models;
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
pub mod server;
|
|
||||||
pub mod client;
|
|
||||||
3
src/server/mod.rs
Normal file
3
src/server/mod.rs
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
pub mod app;
|
||||||
|
pub mod repository;
|
||||||
|
pub mod opaque;
|
||||||
@@ -5,8 +5,8 @@ use opaque_ke::{
|
|||||||
ServerRegistration,
|
ServerRegistration,
|
||||||
};
|
};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use crate::models::opaque::{OpaqueLoginSession, NKodeCipherSuite, NKodeServerSetup, OpaqueSessionKey, PasswordFile, OpaqueRegisterSession};
|
use crate::shared::models::opaque::{OpaqueLoginSession, NKodeCipherSuite, NKodeServerSetup, OpaqueSessionKey, PasswordFile, OpaqueRegisterSession};
|
||||||
use crate::repository::opaque::repos::{OpaqueDatabaseRepo, AuthRepoError, OpaqueSessionRepo};
|
use crate::server::repository::opaque::repos::{OpaqueDatabaseRepo, AuthRepoError, OpaqueSessionRepo};
|
||||||
|
|
||||||
pub struct RegCache {
|
pub struct RegCache {
|
||||||
pub session_id: Uuid,
|
pub session_id: Uuid,
|
||||||
@@ -21,8 +21,8 @@ pub struct LoginCache {
|
|||||||
|
|
||||||
pub trait CredKind {
|
pub trait CredKind {
|
||||||
fn has<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> bool;
|
fn has<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> bool;
|
||||||
fn get_pf<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> Result<PasswordFile, AuthRepoError>;
|
fn get_password_file<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> Result<PasswordFile, AuthRepoError>;
|
||||||
fn put_pf<R: OpaqueDatabaseRepo>(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError>;
|
fn set_password_file<R: OpaqueDatabaseRepo>(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError>;
|
||||||
fn prereq_for_register<R: OpaqueDatabaseRepo>(_repo: &R, _id: &[u8]) -> Result<(), AuthRepoError> {
|
fn prereq_for_register<R: OpaqueDatabaseRepo>(_repo: &R, _id: &[u8]) -> Result<(), AuthRepoError> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -37,10 +37,10 @@ impl CredKind for Key {
|
|||||||
fn has<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> bool {
|
fn has<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> bool {
|
||||||
repo.has_key(id)
|
repo.has_key(id)
|
||||||
}
|
}
|
||||||
fn get_pf<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> Result<PasswordFile, AuthRepoError> {
|
fn get_password_file<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> Result<PasswordFile, AuthRepoError> {
|
||||||
repo.get_key_passcode_file(id)
|
repo.get_key_passcode_file(id)
|
||||||
}
|
}
|
||||||
fn put_pf<R: OpaqueDatabaseRepo>(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError> {
|
fn set_password_file<R: OpaqueDatabaseRepo>(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError> {
|
||||||
repo.new_key(id, pf)
|
repo.new_key(id, pf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,10 +49,10 @@ impl CredKind for Code {
|
|||||||
fn has<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> bool {
|
fn has<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> bool {
|
||||||
repo.has_code(id)
|
repo.has_code(id)
|
||||||
}
|
}
|
||||||
fn get_pf<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> Result<PasswordFile, AuthRepoError> {
|
fn get_password_file<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> Result<PasswordFile, AuthRepoError> {
|
||||||
repo.get_code_passcode_file(id)
|
repo.get_code_passcode_file(id)
|
||||||
}
|
}
|
||||||
fn put_pf<R: OpaqueDatabaseRepo>(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError> {
|
fn set_password_file<R: OpaqueDatabaseRepo>(repo: &mut R, id: &[u8], pf: PasswordFile) -> Result<(), AuthRepoError> {
|
||||||
repo.new_code(id, pf)
|
repo.new_code(id, pf)
|
||||||
}
|
}
|
||||||
fn prereq_for_register<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> Result<(), AuthRepoError> {
|
fn prereq_for_register<R: OpaqueDatabaseRepo>(repo: &R, id: &[u8]) -> Result<(), AuthRepoError> {
|
||||||
@@ -104,7 +104,7 @@ impl<R: OpaqueDatabaseRepo, S: OpaqueSessionRepo> OpaqueAuth<R, S> {
|
|||||||
.map_err(|e| format!("get reg session: {e}"))?;
|
.map_err(|e| format!("get reg session: {e}"))?;
|
||||||
K::prereq_for_register(&self.user_repo, sess.identifier.as_slice())
|
K::prereq_for_register(&self.user_repo, sess.identifier.as_slice())
|
||||||
.map_err(|e| format!("registration prereq failed: {e:?}"))?;
|
.map_err(|e| format!("registration prereq failed: {e:?}"))?;
|
||||||
K::put_pf(&mut self.user_repo, sess.identifier.as_slice(), password_file)
|
K::set_password_file(&mut self.user_repo, sess.identifier.as_slice(), password_file)
|
||||||
.map_err(|e| format!("repo write: {e:?}"))?;
|
.map_err(|e| format!("repo write: {e:?}"))?;
|
||||||
self.session
|
self.session
|
||||||
.clear_reg_session(session_id)
|
.clear_reg_session(session_id)
|
||||||
@@ -116,7 +116,7 @@ impl<R: OpaqueDatabaseRepo, S: OpaqueSessionRepo> OpaqueAuth<R, S> {
|
|||||||
identifier: &[u8],
|
identifier: &[u8],
|
||||||
request: CredentialRequest<NKodeCipherSuite>,
|
request: CredentialRequest<NKodeCipherSuite>,
|
||||||
) -> Result<OpaqueLoginSession, String> {
|
) -> Result<OpaqueLoginSession, String> {
|
||||||
let password_file = K::get_pf(&self.user_repo, identifier)
|
let password_file = K::get_password_file(&self.user_repo, identifier)
|
||||||
.map_err(|e| format!("repo read: {e:?}"))?;
|
.map_err(|e| format!("repo read: {e:?}"))?;
|
||||||
|
|
||||||
let password_file =
|
let password_file =
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use crate::models::opaque::PasswordFile;
|
use crate::shared::models::opaque::PasswordFile;
|
||||||
use crate::repository::opaque::repos::{OpaqueDatabaseRepo, AuthRepoError};
|
use crate::server::repository::opaque::repos::{OpaqueDatabaseRepo, AuthRepoError};
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct InMemoryAuthRepo {
|
pub struct InMemoryAuthRepo {
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use crate::opaque::server::{LoginCache, RegCache};
|
use crate::server::opaque::{LoginCache, RegCache};
|
||||||
use opaque_ke::ServerLogin;
|
use opaque_ke::ServerLogin;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use crate::models::opaque::NKodeCipherSuite;
|
use crate::shared::models::opaque::NKodeCipherSuite;
|
||||||
use crate::repository::opaque::repos::OpaqueSessionRepo;
|
use crate::server::repository::opaque::repos::OpaqueSessionRepo;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct InMemoryAuthSession {
|
pub struct InMemoryAuthSession {
|
||||||
@@ -4,11 +4,11 @@ use tokio::sync::Mutex;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use opaque_ke::{CredentialFinalization, CredentialRequest, RegistrationRequest};
|
use opaque_ke::{CredentialFinalization, CredentialRequest, RegistrationRequest};
|
||||||
use crate::models::opaque::{OpaqueLoginSession, NKodeCipherSuite, NKodeServerSetup, OpaqueSessionKey, PasswordFile, OpaqueRegisterSession};
|
use crate::shared::models::opaque::{OpaqueLoginSession, NKodeCipherSuite, NKodeServerSetup, OpaqueSessionKey, PasswordFile, OpaqueRegisterSession};
|
||||||
use crate::opaque::client::{ClientAuthError, ServerConnectionLogin, ServerConnectionRegister};
|
use crate::client::opaque::{ClientAuthError, ServerConnectionLogin, ServerConnectionRegister};
|
||||||
use crate::opaque::server::{OpaqueAuth, CredKind, Key, Code};
|
use crate::server::opaque::{OpaqueAuth, CredKind, Key, Code};
|
||||||
use crate::repository::opaque::in_memory::in_memory_auth_repo::InMemoryAuthRepo;
|
use crate::server::repository::opaque::in_memory::in_memory_auth_repo::InMemoryAuthRepo;
|
||||||
use crate::repository::opaque::in_memory::in_memory_auth_session::InMemoryAuthSession;
|
use crate::server::repository::opaque::in_memory::in_memory_auth_session::InMemoryAuthSession;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct InMemoryServer<K: CredKind> {
|
pub struct InMemoryServer<K: CredKind> {
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use opaque_ke::ServerLogin;
|
use opaque_ke::ServerLogin;
|
||||||
use crate::models::opaque::{NKodeCipherSuite, PasswordFile};
|
use crate::shared::models::opaque::{NKodeCipherSuite, PasswordFile};
|
||||||
use crate::opaque::server::{LoginCache, RegCache};
|
use crate::server::opaque::{LoginCache, RegCache};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum AuthRepoError {
|
pub enum AuthRepoError {
|
||||||
1
src/shared/mod.rs
Normal file
1
src/shared/mod.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pub mod models;
|
||||||
@@ -4,8 +4,8 @@ use serde::{Deserialize, Serialize};
|
|||||||
use getset::Getters;
|
use getset::Getters;
|
||||||
use nkode_rs::from_bytes::FromBytes;
|
use nkode_rs::from_bytes::FromBytes;
|
||||||
use nkode_rs::nkode_core::policy::NKodePolicy;
|
use nkode_rs::nkode_core::policy::NKodePolicy;
|
||||||
use crate::models::email::Email;
|
use crate::shared::models::email::Email;
|
||||||
use crate::models::opaque::{OpaqueSessionKey, UserSecretKey};
|
use crate::shared::models::opaque::{OpaqueSessionKey, UserSecretKey};
|
||||||
pub struct LoginSession {
|
pub struct LoginSession {
|
||||||
pub(crate) email: Email,
|
pub(crate) email: Email,
|
||||||
pub(crate) session_key: OpaqueSessionKey,
|
pub(crate) session_key: OpaqueSessionKey,
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
use opaque_ke::rand::rngs::OsRng;
|
use opaque_ke::rand::rngs::OsRng;
|
||||||
use nkode_protocol::opaque::client::{AuthenticationData, ClientAuthError, OpaqueAuthLogin, OpaqueAuthRegister};
|
use nkode_protocol::client::opaque::{AuthenticationData, ClientAuthError, OpaqueAuthLogin, OpaqueAuthRegister};
|
||||||
use nkode_protocol::models::opaque::NKodeServerSetup;
|
use nkode_protocol::shared::models::opaque::NKodeServerSetup;
|
||||||
use nkode_protocol::repository::opaque::in_memory::in_memory_transport::{InMemoryCodeServer, InMemoryKeyServer};
|
use nkode_protocol::server::repository::opaque::in_memory::in_memory_transport::{InMemoryCodeServer, InMemoryKeyServer};
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn opaque_key_registration_and_login_roundtrip() {
|
async fn opaque_key_registration_and_login_roundtrip() {
|
||||||
|
|||||||
Reference in New Issue
Block a user