Rebecca Chang Swee Fun fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
..
aoa fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
bio fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
cable fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
cros fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
hid fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
mac fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
response_data_fuzzer_corpus fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
strings fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
win fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
BUILD.gn fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
DEPS fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
DIR_METADATA fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
OWNERS fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
README.md fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
appid_exclude_probe_task.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
appid_exclude_probe_task.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attestation_object.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attestation_object.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attestation_statement.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attestation_statement.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attestation_statement_formats.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attestation_statement_formats.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attestation_statement_formats_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attested_credential_data.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
attested_credential_data.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
auth_token_requester.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
auth_token_requester.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
auth_token_requester_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_data.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_data.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_get_assertion_response.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_get_assertion_response.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_get_info_response.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_get_info_response.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_make_credential_response.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_make_credential_response.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_selection_criteria.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_selection_criteria.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_supported_options.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
authenticator_supported_options.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ble_adapter_manager.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ble_adapter_manager.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ble_adapter_manager_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
cbor_extract.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
cbor_extract.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
cbor_extract_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
credential_management.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
credential_management.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
credential_management_handler.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
credential_management_handler.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
credential_management_handler_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap2_device_operation.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_authenticator_selection_request.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_authenticator_selection_request.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_get_assertion_request.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_get_assertion_request.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_make_credential_request.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_make_credential_request.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_request_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_response_fuzzer.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ctap_response_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
device_operation.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
device_public_key_extension.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
device_public_key_extension.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
device_response_converter.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
device_response_converter.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
discoverable_credential_metadata.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
discoverable_credential_metadata.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ed25519_public_key.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
ed25519_public_key.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fake_fido_discovery.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fake_fido_discovery.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fake_fido_discovery_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
features.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
features.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_authenticator.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_authenticator.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_constants.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_constants.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_device.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_device.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_device_authenticator.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_device_authenticator.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_device_authenticator_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_device_discovery.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_device_discovery.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_device_discovery_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_discovery_base.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_discovery_base.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_discovery_factory.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_discovery_factory.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_parsing_utils.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_parsing_utils.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_parsing_utils_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_request_handler_base.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_request_handler_base.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_request_handler_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_strings.grd fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_task.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_task.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_test_data.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_transport_protocol.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_transport_protocol.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
fido_types.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
filter.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
filter.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
filter_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
get_assertion_handler_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
get_assertion_request_handler.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
get_assertion_request_handler.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
get_assertion_task.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
get_assertion_task.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
get_assertion_task_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
large_blob.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
large_blob.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
large_blob_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
make_credential_handler_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
make_credential_request_handler.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
make_credential_request_handler.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
make_credential_task.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
make_credential_task.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
make_credential_task_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
mock_fido_device.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
mock_fido_device.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
mock_fido_discovery_observer.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
mock_fido_discovery_observer.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
multiple_virtual_fido_device_factory.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
multiple_virtual_fido_device_factory.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
opaque_attestation_statement.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
opaque_attestation_statement.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
p256_public_key.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
p256_public_key.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
pin.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
pin.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
pin_internal.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
pin_internal.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
pin_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
platform_credential_store.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key_credential_descriptor.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key_credential_descriptor.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key_credential_params.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key_credential_params.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key_credential_rp_entity.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key_credential_rp_entity.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key_credential_user_entity.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
public_key_credential_user_entity.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
reset_request_handler.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
reset_request_handler.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
rsa_public_key.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
rsa_public_key.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
set_pin_request_handler.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
set_pin_request_handler.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
test_callback_receiver.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
test_callback_receiver_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_command_constructor.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_command_constructor.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_command_constructor_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_register_operation.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_register_operation.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_register_operation_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_sign_operation.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_sign_operation.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
u2f_sign_operation_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_ctap2_device.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_ctap2_device.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_ctap2_device_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device_authenticator.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device_authenticator.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device_authenticator_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device_discovery.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device_discovery.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device_factory.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_fido_device_factory.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_u2f_device.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_u2f_device.h fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu
virtual_u2f_device_unittest.cc fea2a55e2a Publish chromium based on 107.0.5304.88 1 rok temu

README.md

Security Keys

Security keys are physical devices that often connect via USB and have a button. They can generate public keys and sign with them to authenticate a user and are most often used as a second factor for security.

Websites interact with them via two APIs: the older U2F API and the modern W3C Webauthn API. In Chromium, the U2F API is not directly supported but it can be used by using postMessage with an internal extension called cryptotoken. Webauthn is supported by Blink and is part of CredMan.

(Historically cryptotoken contained a complete stack that interacted with USB devices directly. Now, however, it’s a wrapper layer over the Webauthn APIs.)

Several different types of security keys are supported. Older security keys implement the U2F protocol while more modern ones implement CTAP2. These devices can work over USB, Bluetooth Low Energy (BLE), or NFC (not supported). Additionally Chromium contains support for using Touch ID on macOS as a security key as well support for forwarding requests to the native libraries on modern versions of Windows.

Life of a request

This section provides a coarse roadmap for understanding the code involved in security key support by highlighting the path that a login request might take.

Firstly, the CredMan get call ends up in CredentialsContainer::get. CredMan supports several types of credentials but the code dealing with publicKey relates to security key support.

The request is packaged into a Mojo call defined in authenticator.mojom. On Android, that Mojo request is handled by Android-specific code and is forwarded to support libraries in Google Play Services. Otherwise the Mojo interface will be bound to AuthenticatorCommon; specifically it’ll call AuthenticatorCommon::GetAssertion.

AuthenticatorCommon is part of Chromium’s content layer and so calls into the embedder to get a delegate object that allows it to perform actions like showing UI. It also triggers the lower-level code to start the process of finding an authenticator to handle the request. For an assertion request it’ll create a GetAssertionRequestHandler from this directory.

The Handler classes manage a specific user action and their first job is to initiate discovery of possible security keys. The discovery process will find candidate USB, BLE, Touch ID, etc devices, each of which will be fed into DispatchRequest. Different actions may be taken depending on features of the discovered authenticator. For example, an authenticator which cannot handle the request may be asked to wait for a touch so that the user can still select it, even though it’ll cause the request to fail. These per-authenticator operations will be dispatched via the abstract FidoAuthenticator interface.

If a per-authenticator operation is complex and requires several steps it will be handled by a “task”. In this example, a GetAssertionTask will likely be created by a FidoDeviceAuthenticator, the implementation of FidoAuthenticator used by physical devices.

The assertion task knows how to sequence a series of U2F or CTAP2 operations to implement an assertion request. In the case of U2F, there will be another layer of state machines in, e.g., U2fSignOperation because U2F has a historical authenticator model.

If interaction with UI is required, for example to prompt for a PIN, the handler will make calls via the Observer interface, which is implemented by the embedder’s UI objects that were created by AuthenticatorCommon.

Settings

It’s also possible for security key operations to be triggered by actions in the Settings UI: there are several security key actions that can be taken on chrome://settings/securityKeys. In this case, calls from the Javascript that implements the Settings UI end up in SecurityKeysHandler, which then operates in the same way as AuthenticatorCommon, albeit without creating any native UI.

Fuzzers

libFuzzer tests are in *_fuzzer.cc files. They test for bad input from devices, e.g. when parsing responses to register or sign operations.