implement in-memory server
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user