CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
cdc::mod_fido2 Namespace Reference

Classes

struct  cbor_writer_t
struct  cbor_reader_t
struct  cbor_item_t
struct  ctaphid_channel_t
struct  fido2_credential_info_t
class  Fido2Module
class  LargeBlobWriteSession
 Accumulates an offset-chunked authenticatorLargeBlobs write into a caller-owned buffer. More...
struct  MakeCredentialParams
 Parsed parameters for authenticatorMakeCredential. More...
struct  GetAssertionParams
 Parsed parameters for authenticatorGetAssertion. More...
struct  AssertionCredentials
 Credential-selection result used to build assertion responses. More...
struct  fido2_stored_cred_t
struct  FidoPacket

Enumerations

enum class  LbResult : uint8_t { Ok , StorageFull , BadLength , BadSeq }
 Outcome of a write-session step, mapped to a CTAP status by the caller. More...

Functions

void cbor_writer_init (cbor_writer_t *w, uint8_t *buffer, size_t size)
size_t cbor_writer_length (const cbor_writer_t *w)
bool cbor_writer_error (const cbor_writer_t *w)
void cbor_encode_uint (cbor_writer_t *w, uint64_t value)
void cbor_encode_int (cbor_writer_t *w, int64_t value)
void cbor_encode_bytes (cbor_writer_t *w, const uint8_t *data, size_t len)
void cbor_encode_text (cbor_writer_t *w, const char *str)
void cbor_encode_text_len (cbor_writer_t *w, const char *str, size_t len)
void cbor_encode_bool (cbor_writer_t *w, bool value)
void cbor_encode_null (cbor_writer_t *w)
void cbor_encode_array (cbor_writer_t *w, size_t count)
void cbor_encode_map (cbor_writer_t *w, size_t count)
void cbor_encode_cose_key_p256 (cbor_writer_t *w, const uint8_t *x, const uint8_t *y)
void cbor_encode_cose_key_ed25519 (cbor_writer_t *w, const uint8_t *pubkey)
void sha256 (const uint8_t *data, size_t len, uint8_t out[32])
void sha256_str (const char *str, uint8_t out[32])
void fido2_ui_init ()
 Initializes FIDO2 UI resources and list views.
cdc::ui::IViewfido2_ui_get_list_view ()
 Returns FIDO2 credential list view.
const char * fido2_ui_get_label ()
 Returns localized module label for menus.
fido2_user_presence_result_t fido2_ui_user_presence_callback (const char *rp_id, fido2_action_t action, const char *user_name)
 User-presence callback used by FIDO2 core for approval prompts.
bool fido2_ui_abort_prompt ()
 Forcibly denies any in-flight user-presence prompt.
static bool parse_rp_map (cbor_reader_t *r, MakeCredentialParams *p)
 Parses the RP map from a makeCredential CBOR request.
static bool parse_user_map (cbor_reader_t *r, MakeCredentialParams *p)
 Parses the user map from a makeCredential CBOR request.
static bool parse_pubkey_cred_params (cbor_reader_t *r, MakeCredentialParams *p)
 Parses pubKeyCredParams and selects a supported algorithm.
static bool parse_extensions_map (cbor_reader_t *r, MakeCredentialParams *p)
 Parses makeCredential extensions map from CBOR.
static bool parse_options_map (cbor_reader_t *r, MakeCredentialParams *p)
 Parses makeCredential options map from CBOR.
static uint8_t parse_make_credential_params (const uint8_t *data, uint16_t data_len, MakeCredentialParams *p)
 Parses complete makeCredential request map from CBOR payload.
static uint8_t verify_pin_uv_auth (const MakeCredentialParams *p)
 Verifies pinUvAuthParam for makeCredential.
static uint8_t check_appid_exclude (const MakeCredentialParams *p)
 Validates the appidExclude extension against existing credentials.
static uint8_t handle_browser_probe (const MakeCredentialParams *p, uint8_t *response, uint16_t *response_len)
 Handles browser probe RP IDs by returning a synthetic attested response.
static bool is_browser_probe (const char *rp_id)
 Detects known browser probe RP IDs.
static uint8_t mc_rollback_credential (uint8_t slot, uint8_t *response, uint16_t *response_len)
 Deletes a just-created credential and reports CTAP2_ERR_OTHER.
static uint8_t create_credential_and_respond (const MakeCredentialParams *p, uint8_t curve, uint8_t *response, uint16_t *response_len)
 Creates credential, signs attestation statement, and builds response.
uint8_t ctap2_make_credential (const uint8_t *params, uint16_t params_len, uint8_t *response, uint16_t *response_len)
 Handles CTAP2 authenticatorMakeCredential (0x01).
bool fido2_usb_write (const uint8_t *buffer)
 Sends one CTAPHID packet over USB HID.
bool fido2_usb_available ()
 Indicates whether at least one USB HID packet is queued for FIDO2.
bool fido2_usb_ready ()
 Reports whether USB HID endpoint is ready for transmission.
uint16_t fido2_usb_read (uint8_t *buffer)
 Reads one queued CTAPHID packet from USB RX queue.
static uint16_t onFidoGetReport (uint8_t report_id, uint8_t report_type, uint8_t *buffer, uint16_t reqlen)
 USB HID callbacks for FIDO transport.
static void onFidoSetReport (uint8_t report_id, uint8_t report_type, uint8_t const *buffer, uint16_t bufsize)
 HID SET_REPORT callback queuing incoming CTAPHID packets.
static void onFidoReportComplete (uint8_t const *report, uint16_t len)
 HID transfer-complete callback (currently unused).
static int attestHexNibble (char c)
 Decodes one hex nibble, or -1 for non-hex characters.
static void attestFinishImport ()
 Decodes the accumulated hex paste into DER and imports it.
static bool attestLineInterceptor (const char *line)
 Line interceptor accumulating the hex DER paste for ATTEST IMPORT.
static void cmd_attest_export (const char *args)
 Serial command: print the attestation public key as hex.
static void cmd_attest_import (const char *args)
 Serial command: begin a hex DER paste of a CA-signed certificate.
static void cmd_attest_clear (const char *args)
 Serial command: drop the imported cert, revert to self-signed.
static void cmd_attest (const char *args)
static void registerAttestCommands ()
 Registers the ATTEST serial command group (idempotent).
static void registerStrings ()
static void ensurePromptMutex ()
static void onOverwriteConfirm (void *)
static void onOverwriteCancel (void *)
static int strcasecmp_safe (const char *a, const char *b)
 Null-safe ASCII case-insensitive comparison.
static void rebuildList ()
 Rebuilds credential list view from current storage contents.
static void showDetail (uint16_t display_index)
 Shows detailed view for selected credential.
static void handleDelete (uint16_t display_index)
 Deletes selected credential and refreshes list.
static void onListSelect (uint16_t index, void *userData)
 List selection callback opening credential detail view.
static void onListMenu (uint16_t index, void *userData)
 List menu callback opening context actions for selected credential.
static void restoreView ()
 Restores view stack to pre-prompt depth.
static void promptComplete (fido2_user_presence_result_t result)
 Completes user-presence prompt flow with result handling.
static bool onPinVerify (const char *pin)
 PIN verification callback for locked-screen approval flow.
static void onPinSuccess ()
 PIN success callback approving user presence.
static void onPinCancel ()
 PIN cancel callback denying user presence.
static void onPinFailure (bool lockedOut)
 PIN failure callback handling lockout vs retry messaging.
static void onPromptApprove (void *userData)
 Prompt approve callback; optionally triggers PIN entry on lock screen.
static void onPromptDeny (void *userData)
 Prompt deny callback.

Variables

constexpr uint16_t kLargeBlobMaxArray = 1024
 Largest serialized large-blob array, advertised as maxSerializedLargeBlobArray.
constexpr uint16_t kLargeBlobEmptyLen = 17
const uint8_t kLargeBlobEmpty [kLargeBlobEmptyLen]
 Canonical empty large-blob array bytes.
static const uint8_t s_fido_report_desc []
 FIDO U2F HID report descriptor (CTAPHID standard).
static constexpr size_t FIDO_QUEUE_SIZE = 8
 Queue for incoming HID reports.
static QueueHandle_t s_rx_queue = nullptr
static uint8_t s_hid_instance = 0
 HID interface instance index assigned at registration time.
static constexpr const char * ATTEST_CMD_MODULE = "fido2"
static bool s_attestCommandsRegistered = false
static char s_attestHex [U2F_MAX_ATT_CERT_SIZE *2+8]
static size_t s_attestHexPos = 0
static bool s_attestInputMode = false
static const cdc::serial::SubCommand kAttestSubs []
constexpr ui::I18nEntry kStrings []
static ui::ListViews_listView = nullptr
 FIDO2 UI view and list state.
static ui::InfoViews_detailView = nullptr
static ui::InfoViews_promptView = nullptr
static ui::PinEntryViews_pinEntry = nullptr
static ui::ListItem s_listItems [FIDO2_MAX_CREDENTIALS]
static char s_labels [FIDO2_MAX_CREDENTIALS][100]
static uint8_t s_sortMap [FIDO2_MAX_CREDENTIALS]
static uint8_t s_listCount = 0
static SemaphoreHandle_t s_promptSem = nullptr
 User-presence prompt state shared across callback and UI flow.
static SemaphoreHandle_t s_promptMutex = nullptr
static volatile fido2_user_presence_result_t s_promptResult = FIDO2_UP_PENDING
static char s_promptRpId [FIDO2_RP_ID_MAX_LEN] = {}
static fido2_action_t s_promptAction = FIDO2_ACTION_AUTHENTICATE
static uint8_t s_promptReturnDepth = 0
static ui::IViews_promptReturnView = nullptr
static bool s_promptWasLocked = false
static bool s_promptBacklightWasOn = false
static volatile bool s_promptActive = false
static SemaphoreHandle_t s_overwriteSem = nullptr
 Pre-confirm modal state for overwrite warning.
static volatile bool s_overwriteApproved = false

Enumeration Type Documentation

◆ LbResult

enum class cdc::mod_fido2::LbResult : uint8_t
strong

Outcome of a write-session step, mapped to a CTAP status by the caller.

Enumerator
Ok 
StorageFull 

declared total length exceeds the buffer / kLargeBlobMaxArray

BadLength 

declared total too small, or a fragment overruns the total

BadSeq 

fragment offset out of order, or no active session

Definition at line 30 of file LargeBlobStore.h.

Function Documentation

◆ attestFinishImport()

void cdc::mod_fido2::attestFinishImport ( )
static

◆ attestHexNibble()

int cdc::mod_fido2::attestHexNibble ( char c)
static

Decodes one hex nibble, or -1 for non-hex characters.

Definition at line 133 of file Fido2Module.cpp.

Referenced by attestFinishImport().

◆ attestLineInterceptor()

bool cdc::mod_fido2::attestLineInterceptor ( const char * line)
static

Line interceptor accumulating the hex DER paste for ATTEST IMPORT.

Definition at line 177 of file Fido2Module.cpp.

References attestFinishImport(), cdc::serial::getCommandRegistry(), cdc::serial::Console::printf(), s_attestHex, s_attestHexPos, s_attestInputMode, and cdc::serial::ICommandRegistry::setLineInterceptor().

Referenced by cmd_attest_import().

◆ cbor_encode_array()

void cdc::mod_fido2::cbor_encode_array ( cbor_writer_t * w,
size_t count )

◆ cbor_encode_bool()

void cdc::mod_fido2::cbor_encode_bool ( cbor_writer_t * w,
bool value )

◆ cbor_encode_bytes()

void cdc::mod_fido2::cbor_encode_bytes ( cbor_writer_t * w,
const uint8_t * data,
size_t len )

◆ cbor_encode_cose_key_ed25519()

void cdc::mod_fido2::cbor_encode_cose_key_ed25519 ( cbor_writer_t * w,
const uint8_t * pubkey )

◆ cbor_encode_cose_key_p256()

void cdc::mod_fido2::cbor_encode_cose_key_p256 ( cbor_writer_t * w,
const uint8_t * x,
const uint8_t * y )

◆ cbor_encode_int()

void cdc::mod_fido2::cbor_encode_int ( cbor_writer_t * w,
int64_t value )

◆ cbor_encode_map()

void cdc::mod_fido2::cbor_encode_map ( cbor_writer_t * w,
size_t count )

◆ cbor_encode_null()

void cdc::mod_fido2::cbor_encode_null ( cbor_writer_t * w)

◆ cbor_encode_text()

void cdc::mod_fido2::cbor_encode_text ( cbor_writer_t * w,
const char * str )

◆ cbor_encode_text_len()

void cdc::mod_fido2::cbor_encode_text_len ( cbor_writer_t * w,
const char * str,
size_t len )

◆ cbor_encode_uint()

void cdc::mod_fido2::cbor_encode_uint ( cbor_writer_t * w,
uint64_t value )

◆ cbor_writer_error()

bool cdc::mod_fido2::cbor_writer_error ( const cbor_writer_t * w)

Check for write errors.

◆ cbor_writer_init()

void cdc::mod_fido2::cbor_writer_init ( cbor_writer_t * w,
uint8_t * buffer,
size_t size )

Initialize CBOR writer.

Parameters
wWriter context
bufferOutput buffer
sizeBuffer size

◆ cbor_writer_length()

size_t cdc::mod_fido2::cbor_writer_length ( const cbor_writer_t * w)

Get current written length.

◆ check_appid_exclude()

uint8_t cdc::mod_fido2::check_appid_exclude ( const MakeCredentialParams * p)
static

Validates the appidExclude extension against existing credentials.

Parameters
pParsed makeCredential parameters.
Returns
CTAP2 status code.

Definition at line 1038 of file ctap2.cpp.

References cdc::mod_fido2::MakeCredentialParams::appid_exclude, CTAP2_ERR_CREDENTIAL_EXCLUDED, CTAP2_OK, FIDO2_MAX_CREDENTIALS, fido2_storage_find_by_rp(), g_ctap2, cdc::mod_fido2::MakeCredentialParams::has_appid_exclude, and sha256_str().

Referenced by ctap2_make_credential().

◆ cmd_attest()

void cdc::mod_fido2::cmd_attest ( const char * args)
static

Definition at line 238 of file Fido2Module.cpp.

References cdc::serial::dispatchSubCommand(), and kAttestSubs.

Referenced by registerAttestCommands().

◆ cmd_attest_clear()

void cdc::mod_fido2::cmd_attest_clear ( const char * args)
static

Serial command: drop the imported cert, revert to self-signed.

Definition at line 224 of file Fido2Module.cpp.

References cdc::serial::Console::printf(), and u2f_clear_attestation_cert().

◆ cmd_attest_export()

void cdc::mod_fido2::cmd_attest_export ( const char * args)
static

Serial command: print the attestation public key as hex.

Definition at line 199 of file Fido2Module.cpp.

References cdc::serial::Console::printf(), and u2f_get_attestation_pubkey().

◆ cmd_attest_import()

void cdc::mod_fido2::cmd_attest_import ( const char * args)
static

Serial command: begin a hex DER paste of a CA-signed certificate.

Definition at line 213 of file Fido2Module.cpp.

References attestLineInterceptor(), cdc::serial::getCommandRegistry(), cdc::serial::Console::printf(), s_attestHexPos, s_attestInputMode, and cdc::serial::ICommandRegistry::setLineInterceptor().

◆ create_credential_and_respond()

◆ ctap2_make_credential()

◆ ensurePromptMutex()

void cdc::mod_fido2::ensurePromptMutex ( )
static

Definition at line 75 of file Fido2Ui.cpp.

References s_promptMutex.

Referenced by fido2_ui_user_presence_callback().

◆ fido2_ui_abort_prompt()

bool cdc::mod_fido2::fido2_ui_abort_prompt ( )

Forcibly denies any in-flight user-presence prompt.

Returns
true if a prompt was active and got denied, false otherwise.

Definition at line 680 of file Fido2Ui.cpp.

References FIDO2_UP_DENIED, LOG_W, promptComplete(), s_promptActive, and TAG.

Referenced by fido2_ui_user_presence_callback(), handle_cancel(), and cdc::mod_fido2::Fido2Module::start().

◆ fido2_ui_get_label()

const char * cdc::mod_fido2::fido2_ui_get_label ( )

Returns localized module label for menus.

Returns
Label string.

Definition at line 451 of file Fido2Ui.cpp.

References cdc::ui::tr().

Referenced by cdc::mod_fido2::Fido2Module::getMenuItems().

◆ fido2_ui_get_list_view()

cdc::ui::IView * cdc::mod_fido2::fido2_ui_get_list_view ( )

Returns FIDO2 credential list view.

Returns
Pointer to list view instance.

Definition at line 439 of file Fido2Ui.cpp.

References fido2_ui_init(), rebuildList(), and s_listView.

Referenced by cdc::mod_fido2::Fido2Module::getMenuItems().

◆ fido2_ui_init()

void cdc::mod_fido2::fido2_ui_init ( )

Initializes FIDO2 UI resources and list views.

Definition at line 421 of file Fido2Ui.cpp.

References onListMenu(), onListSelect(), rebuildList(), registerStrings(), s_listView, and s_promptSem.

Referenced by fido2_ui_get_list_view(), and cdc::mod_fido2::Fido2Module::init().

◆ fido2_ui_user_presence_callback()

◆ fido2_usb_available()

bool cdc::mod_fido2::fido2_usb_available ( )

Indicates whether at least one USB HID packet is queued for FIDO2.

Returns
true if queued input is available, otherwise false.

Definition at line 401 of file Fido2Module.cpp.

References s_rx_queue.

Referenced by fido2_task().

◆ fido2_usb_read()

uint16_t cdc::mod_fido2::fido2_usb_read ( uint8_t * buffer)

Reads one queued CTAPHID packet from USB RX queue.

Parameters
bufferOutput packet buffer.
Returns
Packet size (CTAPHID_PACKET_SIZE) or 0 when queue is empty.

Definition at line 419 of file Fido2Module.cpp.

References CTAPHID_PACKET_SIZE, cdc::mod_fido2::FidoPacket::data, and s_rx_queue.

Referenced by fido2_task().

◆ fido2_usb_ready()

bool cdc::mod_fido2::fido2_usb_ready ( )

Reports whether USB HID endpoint is ready for transmission.

Returns
true if endpoint is ready, otherwise false.

Definition at line 410 of file Fido2Module.cpp.

References s_hid_instance, and usb_hid_instance_ready().

Referenced by fido2_task().

◆ fido2_usb_write()

bool cdc::mod_fido2::fido2_usb_write ( const uint8_t * buffer)

Sends one CTAPHID packet over USB HID.

Parameters
bufferPacket data buffer.
Returns
true if report submission succeeded.

Definition at line 435 of file Fido2Module.cpp.

References CTAPHID_PACKET_SIZE, s_hid_instance, and usb_hid_send_report().

Referenced by fido2_task().

◆ handle_browser_probe()

uint8_t cdc::mod_fido2::handle_browser_probe ( const MakeCredentialParams * p,
uint8_t * response,
uint16_t * response_len )
static

◆ handleDelete()

void cdc::mod_fido2::handleDelete ( uint16_t display_index)
static

Deletes selected credential and refreshes list.

Parameters
display_indexDisplay-order index.

Definition at line 218 of file Fido2Ui.cpp.

References fido2_delete_credential(), fido2_get_credential_count(), fido2_get_credential_info(), rebuildList(), s_listCount, s_listItems, s_listView, s_sortMap, cdc::mod_fido2::fido2_credential_info_t::slot, and cdc::ui::tr().

Referenced by onListMenu().

◆ is_browser_probe()

bool cdc::mod_fido2::is_browser_probe ( const char * rp_id)
static

Detects known browser probe RP IDs.

Parameters
rp_idRP ID string to test.
Returns
true if this RP ID is treated as a probe, otherwise false.

Definition at line 1145 of file ctap2.cpp.

References rp_id.

Referenced by ctap2_make_credential().

◆ mc_rollback_credential()

uint8_t cdc::mod_fido2::mc_rollback_credential ( uint8_t slot,
uint8_t * response,
uint16_t * response_len )
static

Deletes a just-created credential and reports CTAP2_ERR_OTHER.

Parameters
slotCredential slot to roll back.
responseOutput response buffer.
response_lenIn/out response length.
Returns
CTAP2_ERR_OTHER.

Definition at line 1156 of file ctap2.cpp.

References CTAP2_ERR_OTHER, and fido2_storage_delete_credential().

Referenced by create_credential_and_respond().

◆ onFidoGetReport()

uint16_t cdc::mod_fido2::onFidoGetReport ( uint8_t report_id,
uint8_t report_type,
uint8_t * buffer,
uint16_t reqlen )
static

USB HID callbacks for FIDO transport.

HID GET_REPORT callback (unused for FIDO).

Parameters
report_idReport id.
report_typeReport type.
bufferOutput buffer.
reqlenRequested length.
Returns
Always 0.

Definition at line 67 of file Fido2Module.cpp.

Referenced by cdc::mod_fido2::Fido2Module::start().

◆ onFidoReportComplete()

void cdc::mod_fido2::onFidoReportComplete ( uint8_t const * report,
uint16_t len )
static

HID transfer-complete callback (currently unused).

Parameters
reportCompleted report payload.
lenPayload length.

Definition at line 106 of file Fido2Module.cpp.

Referenced by cdc::mod_fido2::Fido2Module::start().

◆ onFidoSetReport()

void cdc::mod_fido2::onFidoSetReport ( uint8_t report_id,
uint8_t report_type,
uint8_t const * buffer,
uint16_t bufsize )
static

HID SET_REPORT callback queuing incoming CTAPHID packets.

Parameters
report_idReport id.
report_typeReport type.
bufferInput packet buffer.
bufsizePacket size.

Definition at line 83 of file Fido2Module.cpp.

References CTAPHID_PACKET_SIZE, cdc::mod_fido2::FidoPacket::data, LOG_W, s_rx_queue, and TAG.

Referenced by cdc::mod_fido2::Fido2Module::start().

◆ onListMenu()

void cdc::mod_fido2::onListMenu ( uint16_t index,
void * userData )
static

List menu callback opening context actions for selected credential.

Parameters
indexSelected row index.
userDataOptional callback context (unused).

Definition at line 252 of file Fido2Ui.cpp.

References fido2_get_credential_info(), FIDO2_RP_ID_MAX_LEN, handleDelete(), cdc::mod_fido2::fido2_credential_info_t::rp_id, s_labels, s_listCount, s_listView, s_sortMap, showDetail(), and cdc::ui::tr().

Referenced by fido2_ui_init().

◆ onListSelect()

void cdc::mod_fido2::onListSelect ( uint16_t index,
void * userData )
static

List selection callback opening credential detail view.

Parameters
indexSelected row index.
userDataOptional callback context (unused).

Definition at line 242 of file Fido2Ui.cpp.

References showDetail().

Referenced by fido2_ui_init().

◆ onOverwriteCancel()

void cdc::mod_fido2::onOverwriteCancel ( void * )
static

Definition at line 89 of file Fido2Ui.cpp.

References s_overwriteApproved, and s_overwriteSem.

Referenced by fido2_ui_user_presence_callback().

◆ onOverwriteConfirm()

void cdc::mod_fido2::onOverwriteConfirm ( void * )
static

Definition at line 85 of file Fido2Ui.cpp.

References s_overwriteApproved, and s_overwriteSem.

Referenced by fido2_ui_user_presence_callback().

◆ onPinCancel()

void cdc::mod_fido2::onPinCancel ( )
static

PIN cancel callback denying user presence.

Definition at line 345 of file Fido2Ui.cpp.

References FIDO2_UP_DENIED, cdc::ui::ViewStack::instance(), promptComplete(), s_pinEntry, and s_promptView.

Referenced by onPromptApprove().

◆ onPinFailure()

void cdc::mod_fido2::onPinFailure ( bool lockedOut)
static

PIN failure callback handling lockout vs retry messaging.

Parameters
lockedOuttrue when retries are exhausted.

Definition at line 356 of file Fido2Ui.cpp.

References FIDO2_UP_DENIED, cdc::ui::ViewStack::instance(), promptComplete(), s_pinEntry, s_promptView, cdc::ui::showToastError(), and cdc::ui::tr().

Referenced by onPromptApprove().

◆ onPinSuccess()

void cdc::mod_fido2::onPinSuccess ( )
static

PIN success callback approving user presence.

Definition at line 335 of file Fido2Ui.cpp.

References FIDO2_UP_APPROVED, cdc::ui::ViewStack::instance(), promptComplete(), s_pinEntry, and s_promptView.

Referenced by onPromptApprove().

◆ onPinVerify()

bool cdc::mod_fido2::onPinVerify ( const char * pin)
static

PIN verification callback for locked-screen approval flow.

Parameters
pinEntered PIN string.
Returns
true when badge PIN is valid.

Definition at line 328 of file Fido2Ui.cpp.

References cdc::core::PinManager::instance(), and cdc::core::PinManager::verifyBadgePin().

Referenced by onPromptApprove().

◆ onPromptApprove()

void cdc::mod_fido2::onPromptApprove ( void * userData)
static

◆ onPromptDeny()

void cdc::mod_fido2::onPromptDeny ( void * userData)
static

Prompt deny callback.

Parameters
userDataOptional callback context (unused).

Definition at line 412 of file Fido2Ui.cpp.

References fido2_set_pin_verified(), FIDO2_UP_DENIED, and promptComplete().

Referenced by fido2_ui_user_presence_callback().

◆ parse_extensions_map()

bool cdc::mod_fido2::parse_extensions_map ( cbor_reader_t * r,
MakeCredentialParams * p )
static

Parses makeCredential extensions map from CBOR.

Parameters
rCBOR reader positioned at the extensions map.
pOutput parameter structure to fill.
Returns
true on success, otherwise false.

Definition at line 864 of file ctap2.cpp.

References cdc::mod_fido2::MakeCredentialParams::appid_exclude, cbor_read_map(), cbor_read_text(), cbor_read_uint(), cbor_skip_item(), cdc::mod_fido2::MakeCredentialParams::cred_protect, cdc::mod_fido2::MakeCredentialParams::has_appid_exclude, LOG_I, and TAG.

Referenced by parse_make_credential_params().

◆ parse_make_credential_params()

◆ parse_options_map()

bool cdc::mod_fido2::parse_options_map ( cbor_reader_t * r,
MakeCredentialParams * p )
static

Parses makeCredential options map from CBOR.

Parameters
rCBOR reader positioned at the options map.
pOutput parameter structure to fill.
Returns
true on success, otherwise false.

Definition at line 899 of file ctap2.cpp.

References cbor_read_bool(), cbor_read_map(), cbor_read_text(), cbor_skip_item(), cdc::mod_fido2::MakeCredentialParams::option_up, cdc::mod_fido2::MakeCredentialParams::option_uv, and cdc::mod_fido2::MakeCredentialParams::rk.

Referenced by parse_make_credential_params().

◆ parse_pubkey_cred_params()

bool cdc::mod_fido2::parse_pubkey_cred_params ( cbor_reader_t * r,
MakeCredentialParams * p )
static

Parses pubKeyCredParams and selects a supported algorithm.

Parameters
rCBOR reader positioned at the params array.
pOutput parameter structure to fill.
Returns
true on success, otherwise false.

Definition at line 829 of file ctap2.cpp.

References cdc::mod_fido2::MakeCredentialParams::alg, cbor_read_array(), cbor_read_int(), cbor_read_map(), cbor_read_text(), cbor_skip_item(), COSE_ALG_EDDSA, COSE_ALG_ES256, and cdc::mod_fido2::MakeCredentialParams::has_alg.

Referenced by parse_make_credential_params().

◆ parse_rp_map()

bool cdc::mod_fido2::parse_rp_map ( cbor_reader_t * r,
MakeCredentialParams * p )
static

Parses the RP map from a makeCredential CBOR request.

Parameters
rCBOR reader positioned at the RP map.
pOutput parameter structure to fill.
Returns
true on success, otherwise false.

Definition at line 768 of file ctap2.cpp.

References cbor_read_map(), cbor_read_text(), cbor_skip_item(), cdc::mod_fido2::MakeCredentialParams::has_rp, rp_count, cdc::mod_fido2::MakeCredentialParams::rp_id, cdc::mod_fido2::MakeCredentialParams::rp_id_hash, and sha256_str().

Referenced by parse_make_credential_params().

◆ parse_user_map()

bool cdc::mod_fido2::parse_user_map ( cbor_reader_t * r,
MakeCredentialParams * p )
static

Parses the user map from a makeCredential CBOR request.

Parameters
rCBOR reader positioned at the user map.
pOutput parameter structure to fill.
Returns
true on success, otherwise false.

Definition at line 797 of file ctap2.cpp.

References cbor_read_bytes(), cbor_read_map(), cbor_read_text(), cbor_skip_item(), cdc::mod_fido2::MakeCredentialParams::has_user, cdc::mod_fido2::MakeCredentialParams::user_id, cdc::mod_fido2::MakeCredentialParams::user_id_len, and cdc::mod_fido2::MakeCredentialParams::user_name.

Referenced by parse_make_credential_params().

◆ promptComplete()

◆ rebuildList()

◆ registerAttestCommands()

void cdc::mod_fido2::registerAttestCommands ( )
static

◆ registerStrings()

void cdc::mod_fido2::registerStrings ( )
static

Definition at line 48 of file Fido2Ui.cpp.

References cdc::ui::I18n::instance(), kStrings, and cdc::ui::I18n::registerEnglishTable().

Referenced by fido2_ui_init().

◆ restoreView()

void cdc::mod_fido2::restoreView ( )
static

Restores view stack to pre-prompt depth.

Definition at line 279 of file Fido2Ui.cpp.

References cdc::ui::ViewStack::instance(), and s_promptReturnDepth.

Referenced by fido2_ui_user_presence_callback(), and promptComplete().

◆ sha256()

void cdc::mod_fido2::sha256 ( const uint8_t * data,
size_t len,
uint8_t out[32] )
inline

Definition at line 29 of file fido2_common.h.

References FIDO2_SHA256_DIGEST_SIZE.

Referenced by sha256_str().

◆ sha256_str()

void cdc::mod_fido2::sha256_str ( const char * str,
uint8_t out[32] )
inline

Definition at line 34 of file fido2_common.h.

References FIDO2_SHA256_DIGEST_SIZE, and sha256().

Referenced by check_appid_exclude(), and parse_rp_map().

◆ showDetail()

◆ strcasecmp_safe()

int cdc::mod_fido2::strcasecmp_safe ( const char * a,
const char * b )
static

Null-safe ASCII case-insensitive comparison.

Parameters
aFirst string.
bSecond string.
Returns
Compare result (<0, 0, >0).

Definition at line 100 of file Fido2Ui.cpp.

Referenced by rebuildList().

◆ verify_pin_uv_auth()

uint8_t cdc::mod_fido2::verify_pin_uv_auth ( const MakeCredentialParams * p)
static

Variable Documentation

◆ ATTEST_CMD_MODULE

const char* cdc::mod_fido2::ATTEST_CMD_MODULE = "fido2"
staticconstexpr

Definition at line 125 of file Fido2Module.cpp.

Referenced by registerAttestCommands().

◆ FIDO_QUEUE_SIZE

size_t cdc::mod_fido2::FIDO_QUEUE_SIZE = 8
staticconstexpr

Queue for incoming HID reports.

Definition at line 48 of file Fido2Module.cpp.

Referenced by cdc::mod_fido2::Fido2Module::init().

◆ kAttestSubs

const cdc::serial::SubCommand cdc::mod_fido2::kAttestSubs[]
static
Initial value:
= {
{"EXPORT", "", "Print the attestation public key (hex) for CA signing", cmd_attest_export},
{"IMPORT", "", "Import a CA-signed attestation certificate (hex DER paste)", cmd_attest_import},
{"CLEAR", "", "Remove the imported certificate (revert to self-signed)", cmd_attest_clear},
{nullptr, nullptr, nullptr, nullptr},
}
static void cmd_attest_clear(const char *args)
Serial command: drop the imported cert, revert to self-signed.
static void cmd_attest_import(const char *args)
Serial command: begin a hex DER paste of a CA-signed certificate.
static void cmd_attest_export(const char *args)
Serial command: print the attestation public key as hex.

Definition at line 231 of file Fido2Module.cpp.

Referenced by cmd_attest(), and registerAttestCommands().

◆ kLargeBlobEmpty

const uint8_t cdc::mod_fido2::kLargeBlobEmpty
Initial value:
= {
0x80,
0x76, 0xbe, 0x8b, 0x52, 0x8d, 0x00, 0x75, 0xf7,
0xaa, 0xe9, 0x8d, 0x6f, 0xa5, 0x7a, 0x6d, 0x3c,
}

Canonical empty large-blob array bytes.

Definition at line 14 of file LargeBlobStore.cpp.

Referenced by fido2_storage_largeblob_get().

◆ kLargeBlobEmptyLen

uint16_t cdc::mod_fido2::kLargeBlobEmptyLen = 17
inlineconstexpr

Length of the canonical empty large-blob array: 0x80 followed by the left 16 bytes of SHA-256(0x80).

Definition at line 24 of file LargeBlobStore.h.

Referenced by cdc::mod_fido2::LargeBlobWriteSession::begin(), fido2_storage_largeblob_get(), and fido2_storage_largeblob_length().

◆ kLargeBlobMaxArray

uint16_t cdc::mod_fido2::kLargeBlobMaxArray = 1024
inlineconstexpr

Largest serialized large-blob array, advertised as maxSerializedLargeBlobArray.

Definition at line 20 of file LargeBlobStore.h.

Referenced by cdc::mod_fido2::LargeBlobWriteSession::begin(), encode_info_max_large_blob(), and fido2_storage_largeblob_set().

◆ kStrings

ui::I18nEntry cdc::mod_fido2::kStrings[]
constexpr
Initial value:
= {
{"mod_fido2.title", "WebAuthn"},
{"mod_fido2.fido2_key", "FIDO2 Key"},
{"mod_fido2.sign_in_to", "Sign in to"},
{"mod_fido2.register_key", "Register Key"},
{"mod_fido2.sign_in", "Sign In"},
{"mod_fido2.use_device", "Use this device?"},
{"mod_fido2.no_entries", "No entries"},
{"mod_fido2.overwrite_key", "OVERWRITE KEY!"},
{"mod_fido2.overwrite_warning", "Overwrite existing key?"},
}

Definition at line 36 of file Fido2Ui.cpp.

Referenced by registerStrings().

◆ s_attestCommandsRegistered

bool cdc::mod_fido2::s_attestCommandsRegistered = false
static

Definition at line 126 of file Fido2Module.cpp.

Referenced by registerAttestCommands().

◆ s_attestHex

char cdc::mod_fido2::s_attestHex[U2F_MAX_ATT_CERT_SIZE *2+8]
static

Definition at line 128 of file Fido2Module.cpp.

Referenced by attestFinishImport(), and attestLineInterceptor().

◆ s_attestHexPos

size_t cdc::mod_fido2::s_attestHexPos = 0
static

Definition at line 129 of file Fido2Module.cpp.

Referenced by attestFinishImport(), attestLineInterceptor(), and cmd_attest_import().

◆ s_attestInputMode

bool cdc::mod_fido2::s_attestInputMode = false
static

Definition at line 130 of file Fido2Module.cpp.

Referenced by attestFinishImport(), attestLineInterceptor(), and cmd_attest_import().

◆ s_detailView

ui::InfoView* cdc::mod_fido2::s_detailView = nullptr
static

Definition at line 54 of file Fido2Ui.cpp.

Referenced by showDetail().

◆ s_fido_report_desc

const uint8_t cdc::mod_fido2::s_fido_report_desc[]
static
Initial value:
= {
0x06, 0xD0, 0xF1,
0x09, 0x01,
0xA1, 0x01,
0x09, 0x20,
0x15, 0x00,
0x26, 0xFF, 0x00,
0x75, 0x08,
0x81, 0x02,
0x09, 0x21,
0x15, 0x00,
0x26, 0xFF, 0x00,
0x75, 0x08,
0x91, 0x02,
0xC0
}
#define CTAPHID_PACKET_SIZE
Definition ctaphid.h:13

FIDO U2F HID report descriptor (CTAPHID standard).

Definition at line 28 of file Fido2Module.cpp.

Referenced by cdc::mod_fido2::Fido2Module::start().

◆ s_hid_instance

uint8_t cdc::mod_fido2::s_hid_instance = 0
static

HID interface instance index assigned at registration time.

Definition at line 56 of file Fido2Module.cpp.

Referenced by fido2_usb_ready(), fido2_usb_write(), and cdc::mod_fido2::Fido2Module::start().

◆ s_labels

char cdc::mod_fido2::s_labels[FIDO2_MAX_CREDENTIALS][100]
static

Definition at line 59 of file Fido2Ui.cpp.

Referenced by onListMenu(), and rebuildList().

◆ s_listCount

uint8_t cdc::mod_fido2::s_listCount = 0
static

Definition at line 61 of file Fido2Ui.cpp.

Referenced by handleDelete(), onListMenu(), and rebuildList().

◆ s_listItems

ui::ListItem cdc::mod_fido2::s_listItems[FIDO2_MAX_CREDENTIALS]
static

Definition at line 58 of file Fido2Ui.cpp.

Referenced by handleDelete(), and rebuildList().

◆ s_listView

ui::ListView* cdc::mod_fido2::s_listView = nullptr
static

FIDO2 UI view and list state.

Definition at line 53 of file Fido2Ui.cpp.

Referenced by fido2_ui_get_list_view(), fido2_ui_init(), handleDelete(), onListMenu(), promptComplete(), and rebuildList().

◆ s_overwriteApproved

volatile bool cdc::mod_fido2::s_overwriteApproved = false
static

◆ s_overwriteSem

SemaphoreHandle_t cdc::mod_fido2::s_overwriteSem = nullptr
static

Pre-confirm modal state for overwrite warning.

Definition at line 82 of file Fido2Ui.cpp.

Referenced by fido2_ui_user_presence_callback(), onOverwriteCancel(), and onOverwriteConfirm().

◆ s_pinEntry

ui::PinEntryView* cdc::mod_fido2::s_pinEntry = nullptr
static

Definition at line 56 of file Fido2Ui.cpp.

Referenced by onPinCancel(), onPinFailure(), onPinSuccess(), and onPromptApprove().

◆ s_promptAction

fido2_action_t cdc::mod_fido2::s_promptAction = FIDO2_ACTION_AUTHENTICATE
static

Definition at line 68 of file Fido2Ui.cpp.

Referenced by fido2_ui_user_presence_callback(), and promptComplete().

◆ s_promptActive

volatile bool cdc::mod_fido2::s_promptActive = false
static

◆ s_promptBacklightWasOn

bool cdc::mod_fido2::s_promptBacklightWasOn = false
static

Definition at line 72 of file Fido2Ui.cpp.

Referenced by fido2_ui_user_presence_callback(), and promptComplete().

◆ s_promptMutex

SemaphoreHandle_t cdc::mod_fido2::s_promptMutex = nullptr
static

Definition at line 65 of file Fido2Ui.cpp.

Referenced by ensurePromptMutex(), and fido2_ui_user_presence_callback().

◆ s_promptResult

volatile fido2_user_presence_result_t cdc::mod_fido2::s_promptResult = FIDO2_UP_PENDING
static

Definition at line 66 of file Fido2Ui.cpp.

Referenced by fido2_ui_user_presence_callback(), and promptComplete().

◆ s_promptReturnDepth

uint8_t cdc::mod_fido2::s_promptReturnDepth = 0
static

Definition at line 69 of file Fido2Ui.cpp.

Referenced by fido2_ui_user_presence_callback(), and restoreView().

◆ s_promptReturnView

ui::IView* cdc::mod_fido2::s_promptReturnView = nullptr
static

Definition at line 70 of file Fido2Ui.cpp.

Referenced by fido2_ui_user_presence_callback(), and promptComplete().

◆ s_promptRpId

char cdc::mod_fido2::s_promptRpId[FIDO2_RP_ID_MAX_LEN] = {}
static

Definition at line 67 of file Fido2Ui.cpp.

Referenced by fido2_ui_user_presence_callback().

◆ s_promptSem

SemaphoreHandle_t cdc::mod_fido2::s_promptSem = nullptr
static

User-presence prompt state shared across callback and UI flow.

Definition at line 64 of file Fido2Ui.cpp.

Referenced by fido2_ui_init(), fido2_ui_user_presence_callback(), and promptComplete().

◆ s_promptView

ui::InfoView* cdc::mod_fido2::s_promptView = nullptr
static

◆ s_promptWasLocked

bool cdc::mod_fido2::s_promptWasLocked = false
static

Definition at line 71 of file Fido2Ui.cpp.

Referenced by fido2_ui_user_presence_callback(), and onPromptApprove().

◆ s_rx_queue

QueueHandle_t cdc::mod_fido2::s_rx_queue = nullptr
static

◆ s_sortMap

uint8_t cdc::mod_fido2::s_sortMap[FIDO2_MAX_CREDENTIALS]
static

Definition at line 60 of file Fido2Ui.cpp.

Referenced by handleDelete(), onListMenu(), rebuildList(), and showDetail().