pub trait AuthenticatorCallbacks: Send + Sync {
// Required methods
fn request_up(
&self,
info: &str,
user_name: Option<&str>,
rp_id: &str,
) -> Result<UpResult>;
fn request_uv(
&self,
info: &str,
user_name: Option<&str>,
rp_id: &str,
) -> Result<UvResult>;
fn write_credential(&self, credential: &CredentialRef<'_>) -> Result<()>;
fn read_credential(&self, cred_id: &[u8]) -> Result<Option<Credential>>;
fn delete_credential(&self, cred_id: &[u8]) -> Result<()>;
fn list_credentials(
&self,
rp_id: &str,
user_id: Option<&[u8]>,
) -> Result<Vec<Credential>>;
fn enumerate_rps(&self) -> Result<Vec<(String, Option<String>, usize)>>;
fn credential_count(&self) -> Result<usize>;
fn get_timestamp_ms(&self) -> u64;
// Provided method
fn select_credential(
&self,
_rp_id: &str,
_credentials: &[Credential],
) -> Result<usize> { ... }
}Expand description
Trait for handling authenticator callbacks
Implement this trait to provide custom user interaction and credential storage logic.
§Example
use soft_fido2::{AuthenticatorCallbacks, UpResult, UvResult, Credential, CredentialRef};
use std::collections::HashMap;
struct MyCallbacks {
store: HashMap<Vec<u8>, Credential>,
}
impl AuthenticatorCallbacks for MyCallbacks {
fn request_up(&self, _info: &str, _user: Option<&str>, _rp: &str) -> soft_fido2::Result<UpResult> {
Ok(UpResult::Accepted)
}
fn request_uv(&self, _info: &str, _user: Option<&str>, _rp: &str) -> soft_fido2::Result<UvResult> {
Ok(UvResult::Accepted)
}
fn write_credential(&self, cred: &CredentialRef) -> soft_fido2::Result<()> {
// Store credential
Ok(())
}
fn read_credential(&self, cred_id: &[u8]) -> soft_fido2::Result<Option<Credential>> {
// Retrieve credential
Ok(None)
}
fn delete_credential(&self, cred_id: &[u8]) -> soft_fido2::Result<()> {
// Delete credential
Ok(())
}
fn list_credentials(&self, rp_id: &str, _user_id: Option<&[u8]>) -> soft_fido2::Result<Vec<Credential>> {
// List credentials for RP
Ok(vec![])
}
fn enumerate_rps(&self) -> soft_fido2::Result<Vec<(String, Option<String>, usize)>> {
// Return list of (rp_id, rp_name, credential_count)
Ok(vec![])
}
fn credential_count(&self) -> soft_fido2::Result<usize> {
// Return total credential count
Ok(0)
}
fn get_timestamp_ms(&self) -> u64 {
0
}
}Required Methods§
Sourcefn request_up(
&self,
info: &str,
user_name: Option<&str>,
rp_id: &str,
) -> Result<UpResult>
fn request_up( &self, info: &str, user_name: Option<&str>, rp_id: &str, ) -> Result<UpResult>
Request user presence (e.g., tap security key, press button)
Sourcefn request_uv(
&self,
info: &str,
user_name: Option<&str>,
rp_id: &str,
) -> Result<UvResult>
fn request_uv( &self, info: &str, user_name: Option<&str>, rp_id: &str, ) -> Result<UvResult>
Request user verification (e.g., PIN, biometric, password)
Sourcefn write_credential(&self, credential: &CredentialRef<'_>) -> Result<()>
fn write_credential(&self, credential: &CredentialRef<'_>) -> Result<()>
Store a credential
Sourcefn read_credential(&self, cred_id: &[u8]) -> Result<Option<Credential>>
fn read_credential(&self, cred_id: &[u8]) -> Result<Option<Credential>>
Read a specific credential
Sourcefn delete_credential(&self, cred_id: &[u8]) -> Result<()>
fn delete_credential(&self, cred_id: &[u8]) -> Result<()>
Delete a credential
Sourcefn list_credentials(
&self,
rp_id: &str,
user_id: Option<&[u8]>,
) -> Result<Vec<Credential>>
fn list_credentials( &self, rp_id: &str, user_id: Option<&[u8]>, ) -> Result<Vec<Credential>>
List all credentials for a relying party
Sourcefn enumerate_rps(&self) -> Result<Vec<(String, Option<String>, usize)>>
fn enumerate_rps(&self) -> Result<Vec<(String, Option<String>, usize)>>
Enumerate all relying parties with stored credentials
Used for credential management operations.
§Returns
Vector of tuples: (rp_id, rp_name, credential_count)
Sourcefn credential_count(&self) -> Result<usize>
fn credential_count(&self) -> Result<usize>
Get total number of discoverable credentials
§Returns
Total count of all discoverable credentials across all RPs
Sourcefn get_timestamp_ms(&self) -> u64
fn get_timestamp_ms(&self) -> u64
Get current timestamp in milliseconds since UNIX epoch
Used for PIN token expiration and other time-sensitive operations. In no_std environments, this must be provided by the platform.
Provided Methods§
Sourcefn select_credential(
&self,
_rp_id: &str,
_credentials: &[Credential],
) -> Result<usize>
fn select_credential( &self, _rp_id: &str, _credentials: &[Credential], ) -> Result<usize>
Select which credential to use from multiple matches