AuthenticatorCallbacks

Trait AuthenticatorCallbacks 

Source
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§

Source

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)

Source

fn request_uv( &self, info: &str, user_name: Option<&str>, rp_id: &str, ) -> Result<UvResult>

Request user verification (e.g., PIN, biometric, password)

Source

fn write_credential(&self, credential: &CredentialRef<'_>) -> Result<()>

Store a credential

Source

fn read_credential(&self, cred_id: &[u8]) -> Result<Option<Credential>>

Read a specific credential

Source

fn delete_credential(&self, cred_id: &[u8]) -> Result<()>

Delete a credential

Source

fn list_credentials( &self, rp_id: &str, user_id: Option<&[u8]>, ) -> Result<Vec<Credential>>

List all credentials for a relying party

Source

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)

Source

fn credential_count(&self) -> Result<usize>

Get total number of discoverable credentials

§Returns

Total count of all discoverable credentials across all RPs

Source

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§

Source

fn select_credential( &self, _rp_id: &str, _credentials: &[Credential], ) -> Result<usize>

Select which credential to use from multiple matches

Implementors§