blob: bf71ee93d295ed5eb6b3e4fe6bd182222ff52adc [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/features.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
component("fido") {
sources = [
"attestation_object.cc",
"attestation_object.h",
"attestation_statement.cc",
"attestation_statement.h",
"attestation_statement_formats.cc",
"attestation_statement_formats.h",
"attested_credential_data.cc",
"attested_credential_data.h",
"authenticator_data.cc",
"authenticator_data.h",
"authenticator_get_assertion_response.cc",
"authenticator_get_assertion_response.h",
"authenticator_get_info_response.cc",
"authenticator_get_info_response.h",
"authenticator_make_credential_response.cc",
"authenticator_make_credential_response.h",
"authenticator_selection_criteria.cc",
"authenticator_selection_criteria.h",
"authenticator_supported_options.cc",
"authenticator_supported_options.h",
"bio/enrollment.cc",
"bio/enrollment.h",
"bio/enrollment_handler.cc",
"bio/enrollment_handler.h",
"ble/fido_ble_connection.cc",
"ble/fido_ble_connection.h",
"ble/fido_ble_device.cc",
"ble/fido_ble_device.h",
"ble/fido_ble_discovery.cc",
"ble/fido_ble_discovery.h",
"ble/fido_ble_discovery_base.cc",
"ble/fido_ble_discovery_base.h",
"ble/fido_ble_frames.cc",
"ble/fido_ble_frames.h",
"ble/fido_ble_pairing_delegate.cc",
"ble/fido_ble_pairing_delegate.h",
"ble/fido_ble_transaction.cc",
"ble/fido_ble_transaction.h",
"ble/fido_ble_uuids.cc",
"ble/fido_ble_uuids.h",
"ble_adapter_manager.cc",
"ble_adapter_manager.h",
"cable/cable_discovery_data.h",
"cable/fido_cable_device.cc",
"cable/fido_cable_device.h",
"cable/fido_cable_discovery.cc",
"cable/fido_cable_discovery.h",
"cable/fido_cable_handshake_handler.cc",
"cable/fido_cable_handshake_handler.h",
"credential_management.cc",
"credential_management.h",
"credential_management_handler.cc",
"credential_management_handler.h",
"ctap2_device_operation.h",
"ctap_empty_authenticator_request.cc",
"ctap_empty_authenticator_request.h",
"ctap_get_assertion_request.cc",
"ctap_get_assertion_request.h",
"ctap_make_credential_request.cc",
"ctap_make_credential_request.h",
"device_operation.h",
"device_response_converter.cc",
"device_response_converter.h",
"ec_public_key.cc",
"ec_public_key.h",
"features.cc",
"features.h",
"fido_authenticator.cc",
"fido_authenticator.h",
"fido_constants.cc",
"fido_constants.h",
"fido_device.cc",
"fido_device.h",
"fido_device_authenticator.cc",
"fido_device_authenticator.h",
"fido_device_discovery.cc",
"fido_device_discovery.h",
"fido_discovery_base.cc",
"fido_discovery_base.h",
"fido_discovery_factory.cc",
"fido_discovery_factory.h",
"fido_parsing_utils.cc",
"fido_parsing_utils.h",
"fido_request_handler.h",
"fido_request_handler_base.cc",
"fido_request_handler_base.h",
"fido_task.cc",
"fido_task.h",
"fido_transport_protocol.cc",
"fido_transport_protocol.h",
"fido_types.h",
"get_assertion_request_handler.cc",
"get_assertion_request_handler.h",
"get_assertion_task.cc",
"get_assertion_task.h",
"hid/fido_hid_message.cc",
"hid/fido_hid_message.h",
"hid/fido_hid_packet.cc",
"hid/fido_hid_packet.h",
"make_credential_request_handler.cc",
"make_credential_request_handler.h",
"make_credential_task.cc",
"make_credential_task.h",
"opaque_attestation_statement.cc",
"opaque_attestation_statement.h",
"opaque_public_key.cc",
"opaque_public_key.h",
"pin.cc",
"pin.h",
"platform_credential_store.h",
"public_key.cc",
"public_key.h",
"public_key_credential_descriptor.cc",
"public_key_credential_descriptor.h",
"public_key_credential_params.cc",
"public_key_credential_params.h",
"public_key_credential_rp_entity.cc",
"public_key_credential_rp_entity.h",
"public_key_credential_user_entity.cc",
"public_key_credential_user_entity.h",
"reset_request_handler.cc",
"reset_request_handler.h",
"response_data.cc",
"response_data.h",
"set_pin_request_handler.cc",
"set_pin_request_handler.h",
"u2f_command_constructor.cc",
"u2f_command_constructor.h",
"u2f_register_operation.cc",
"u2f_register_operation.h",
"u2f_sign_operation.cc",
"u2f_sign_operation.h",
"virtual_ctap2_device.cc",
"virtual_ctap2_device.h",
"virtual_fido_device.cc",
"virtual_fido_device.h",
"virtual_u2f_device.cc",
"virtual_u2f_device.h",
]
defines = [ "IS_DEVICE_FIDO_IMPL" ]
deps = [
"//components/apdu",
"//components/cbor",
"//components/device_event_log",
"//crypto",
"//device/base",
"//device/fido/strings",
"//services/service_manager/public/cpp",
"//services/service_manager/public/mojom",
"//third_party/boringssl",
"//third_party/microsoft_webauthn",
"//ui/base",
]
public_deps = [
"//base",
"//device/bluetooth",
"//device/bluetooth/public/cpp",
"//services/device/public/mojom",
]
libs = [] # Extended for mac.
# HID is not supported on Android.
if (!is_android) {
sources += [
"hid/fido_hid_device.cc",
"hid/fido_hid_device.h",
"hid/fido_hid_discovery.cc",
"hid/fido_hid_discovery.h",
]
deps += [
"//services/device/public/cpp/hid",
"//services/device/public/mojom",
]
}
if (is_mac) {
sources += [
"mac/authenticator.h",
"mac/authenticator.mm",
"mac/authenticator_config.h",
"mac/credential_metadata.cc",
"mac/credential_metadata.h",
"mac/credential_store.h",
"mac/credential_store.mm",
"mac/discovery.cc",
"mac/discovery.h",
"mac/get_assertion_operation.h",
"mac/get_assertion_operation.mm",
"mac/keychain.h",
"mac/keychain.mm",
"mac/make_credential_operation.h",
"mac/make_credential_operation.mm",
"mac/operation.h",
"mac/operation_base.h",
"mac/touch_id_context.h",
"mac/touch_id_context.mm",
"mac/util.h",
"mac/util.mm",
]
libs += [
"Foundation.framework",
"LocalAuthentication.framework",
"Security.framework",
]
}
if (is_win) {
sources += [
"win/authenticator.cc",
"win/authenticator.h",
"win/discovery.cc",
"win/discovery.h",
"win/logging.cc",
"win/logging.h",
"win/type_conversions.cc",
"win/type_conversions.h",
"win/webauthn_api.cc",
"win/webauthn_api.h",
]
}
}
source_set("mocks") {
testonly = true
sources = [
"ble/mock_fido_ble_connection.cc",
"ble/mock_fido_ble_connection.h",
"mock_fido_device.cc",
"mock_fido_device.h",
"mock_fido_discovery_observer.cc",
"mock_fido_discovery_observer.h",
]
deps = [
":fido",
"//base",
"//components/apdu",
"//components/cbor",
"//testing/gmock",
]
}
fuzzer_test("fido_hid_message_fuzzer") {
sources = [
"hid/fido_hid_message_fuzzer.cc",
]
deps = [
":fido",
"//base",
]
libfuzzer_options = [ "max_len=2048" ]
}
fuzzer_test("fido_ble_frames_fuzzer") {
sources = [
"ble/fido_ble_frames_fuzzer.cc",
]
deps = [
":fido",
]
libfuzzer_options = [ "max_len=65535" ]
}
fuzzer_test("ctap_response_fuzzer") {
sources = [
"ctap_response_fuzzer.cc",
]
deps = [
":fido",
"//base",
"//base:i18n",
"//components/cbor",
"//components/device_event_log",
]
seed_corpus = "response_data_fuzzer_corpus/"
libfuzzer_options = [ "max_len=65537" ]
}
fuzzer_test("fido_cable_handshake_handler_fuzzer") {
sources = [
"cable/fido_cable_handshake_handler_fuzzer.cc",
]
deps = [
":fido",
"//base",
"//base/test:test_support",
"//device/bluetooth:mocks",
"//testing/gmock",
"//testing/gtest",
]
libfuzzer_options = [ "max_len=2048" ]
}
fuzzer_test("fido_cable_handshake_handler_v2_fuzzer") {
sources = [
"cable/fido_cable_handshake_handler_v2_fuzzer.cc",
]
deps = [
":fido",
"//base",
"//base/test:test_support",
"//device/bluetooth:mocks",
"//testing/gmock",
"//testing/gtest",
]
libfuzzer_options = [ "max_len=2048" ]
}
is_linux_without_udev = is_linux && !use_udev
source_set("test_support") {
testonly = true
sources = [
"fake_fido_discovery.cc",
"fake_fido_discovery.h",
"test_callback_receiver.h",
"virtual_fido_device_factory.cc",
"virtual_fido_device_factory.h",
]
deps = [
"//base",
"//components/apdu",
"//device/fido",
"//mojo/public/cpp/bindings",
"//services/device/public/mojom",
"//services/service_manager/public/cpp",
"//services/service_manager/public/mojom",
"//testing/gmock",
"//testing/gtest",
]
# Android doesn't compile. Linux requires udev.
if (!is_linux_without_udev && !is_android) {
sources += [
"hid/fake_hid_impl_for_testing.cc",
"hid/fake_hid_impl_for_testing.h",
]
}
if (is_mac) {
sources += [
"mac/fake_keychain.h",
"mac/fake_keychain.mm",
"mac/fake_touch_id_context.h",
"mac/fake_touch_id_context.mm",
"mac/scoped_touch_id_test_environment.h",
"mac/scoped_touch_id_test_environment.mm",
]
}
if (is_win) {
sources += [
"win/fake_webauthn_api.cc",
"win/fake_webauthn_api.h",
]
}
}