diff --git a/services/identity/src/config.rs b/services/identity/src/config.rs --- a/services/identity/src/config.rs +++ b/services/identity/src/config.rs @@ -1,9 +1,9 @@ use opaque_ke::{errors::PakeError, keypair::Key}; use std::{env, fs, io, path::Path}; -#[derive(Default, Debug)] +#[derive(Debug)] pub struct Config { - server_secret_key: Option, + pub server_secret_key: Key, } impl Config { @@ -14,7 +14,7 @@ path.set_extension("txt"); let key = get_key_from_file(path)?; Ok(Self { - server_secret_key: Some(key), + server_secret_key: key, }) } } diff --git a/services/identity/src/service.rs b/services/identity/src/service.rs --- a/services/identity/src/service.rs +++ b/services/identity/src/service.rs @@ -1,7 +1,8 @@ use futures_core::Stream; use opaque_ke::{ - errors::ProtocolError, keypair::Key, + errors::ProtocolError, keypair::Key, CredentialRequest, RegistrationRequest as PakeRegistrationRequest, RegistrationUpload, + ServerLogin, ServerLoginStartParameters, ServerLoginStartResult, ServerRegistration, }; use rand::{CryptoRng, Rng}; @@ -109,6 +110,29 @@ .map_err(Error::Database)?; Ok(()) } + + async fn pake_login_start( + &self, + user_id: String, + pake_credential_request: &Vec, + rng: &mut (impl Rng + CryptoRng), + ) -> Result, Error> { + let server_registration = + self.client.get_pake_registration(user_id).await?; + let pake_credential_request = + CredentialRequest::deserialize(pake_credential_request)?; + match server_registration { + None => Err(Error::MissingRegistration), + Some(registration) => ServerLogin::start( + rng, + registration, + &self.config.server_secret_key, + pake_credential_request, + ServerLoginStartParameters::default(), + ) + .map_err(Error::Pake), + } + } } #[derive( @@ -121,4 +145,6 @@ Channel(SendError>), #[display(...)] Database(DatabaseError), + #[display(...)] + MissingRegistration, }