#![feature(cfg_eval, adt_const_params)] pub mod prelude { pub use crate::{ authenticator::{ assertion::get, bio_enrollment, client_pin, config, credential::{make, management}, device, reset, selection, }, Command, Ctap2_2Authenticator, }; pub use fido_common::*; } use prelude::*; pub mod authenticator; pub mod extensions; /// Defines the raw CTAP operations pub trait Ctap2_2Authenticator { /// > This method is invoked by the host to request generation of a new /// > credential in the authenticator. fn make_credential(&mut self, request: make::Request) -> Result; /// > This method is used by a host to request cryptographic proof of user /// > authentication as well as user consent to a given transaction, using a /// > previously generated credential that is bound to the authenticator and /// > relying party identifier. fn get_assertion(&mut self, request: get::Request) -> Result; /// > Using this method, platforms can request that the authenticator report /// > a list of its supported protocol versions and extensions, its AAGUID, /// > and other aspects of its overall capabilities. Platforms should use /// > this information to tailor their command parameters choices. fn get_info(&self) -> device::Info; /// > This command exists so that plaintext PINs are not sent to the /// > authenticator. Instead, a PIN/UV auth protocol (aka /// > `pinUvAuthProtocol`) ensures that PINs are encrypted when sent to an /// > authenticator and are exchanged for a `pinUvAuthToken` that serves to /// > authenticate subsequent commands. fn client_pin( &mut self, request: client_pin::Request, ) -> Result; /// > This method is used by the client to reset an authenticator back to a /// > factory default state. fn reset(&mut self) -> Result<(), reset::Error>; fn bio_enrollment( &mut self, request: bio_enrollment::Request, ) -> Result; // > This command is used by the platform to manage discoverable // > credentials on the authenticator. fn credential_management( &mut self, request: management::Request, ) -> Result; /// > This command allows the platform to let a user select a certain /// > authenticator by asking for user presence. fn selection(&mut self) -> Result<(), authenticator::selection::Error>; // fn large_blobs() -> Result<(), ()>; // > This command is used to configure various authenticator features // > through the use of its subcommands. fn authenticator_config(&mut self, request: config::Request) -> Result<(), config::Error>; } #[repr(u8)] pub enum Command { AuthenticatorMakeCredential = 0x01, AuthenticatorGetAssertion = 0x02, AuthenticatorGetNextAssertion = 0x08, AuthenticatorGetInfo = 0x04, AuthenticatorClientPin = 0x06, AuthenticatorReset = 0x07, AuthenticatorBioEnrollment = 0x09, AuthenticatorCredentialManagement = 0x0A, AuthenticatorSelection = 0x0B, AuthenticatorLargeBlobs = 0x0C, AuthenticatorConfig = 0x0D, PrototypeAuthenticatorBioEnrollment = 0x40, PrototypeAuthenticatorCredentialManagement = 0x41, }