# 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/chromeos/ui_mode.gni")
import("//build/config/features.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//third_party/protobuf/proto_library.gni")

component("fido") {
  sources = [
    "attested_credential_data.cc",
    "attested_credential_data.h",
    "authenticator_selection_criteria.cc",
    "authenticator_selection_criteria.h",
    "cable/cable_discovery_data.cc",
    "cable/cable_discovery_data.h",
    "cable/noise.cc",
    "cable/noise.h",
    "cable/v2_constants.h",
    "cable/v2_handshake.cc",
    "cable/v2_handshake.h",
    "cable/websocket_adapter.cc",
    "cable/websocket_adapter.h",
    "cbor_extract.cc",
    "ed25519_public_key.cc",
    "ed25519_public_key.h",
    "features.cc",
    "features.h",
    "fido_constants.cc",
    "fido_constants.h",
    "fido_parsing_utils.cc",
    "fido_parsing_utils.h",
    "fido_transport_protocol.cc",
    "fido_transport_protocol.h",
    "p256_public_key.cc",
    "p256_public_key.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",
    "rsa_public_key.cc",
    "rsa_public_key.h",
  ]

  defines = [ "IS_DEVICE_FIDO_IMPL" ]

  deps = [
    "//build:chromeos_buildflags",
    "//components/apdu",
    "//components/cbor",
    "//components/device_event_log",
    "//crypto",
    "//device/base",
    "//device/fido/strings",
    "//third_party/boringssl",
    "//third_party/microsoft_webauthn",
    "//ui/base",
  ]

  public_deps = [
    "//base",
    "//device/bluetooth",
    "//device/bluetooth/public/cpp",
    "//services/device/public/mojom",
  ]

  # Android implementation of FIDO is delegated to GMSCore.
  if (!is_android) {
    sources += [
      "aoa/android_accessory_device.cc",
      "aoa/android_accessory_device.h",
      "aoa/android_accessory_discovery.cc",
      "aoa/android_accessory_discovery.h",
      "attestation_object.cc",
      "attestation_object.h",
      "attestation_statement.cc",
      "attestation_statement.h",
      "attestation_statement_formats.cc",
      "attestation_statement_formats.h",
      "auth_token_requester.cc",
      "auth_token_requester.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_supported_options.cc",
      "authenticator_supported_options.h",
      "bio/enroller.cc",
      "bio/enroller.h",
      "bio/enrollment.cc",
      "bio/enrollment.h",
      "bio/enrollment_handler.cc",
      "bio/enrollment_handler.h",
      "ble_adapter_manager.cc",
      "ble_adapter_manager.h",
      "cable/fido_ble_connection.cc",
      "cable/fido_ble_connection.h",
      "cable/fido_ble_frames.cc",
      "cable/fido_ble_frames.h",
      "cable/fido_ble_transaction.cc",
      "cable/fido_ble_transaction.h",
      "cable/fido_ble_uuids.cc",
      "cable/fido_ble_uuids.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",
      "cable/fido_tunnel_device.cc",
      "cable/fido_tunnel_device.h",
      "cable/v2_discovery.cc",
      "cable/v2_discovery.h",
      "client_data.cc",
      "client_data.h",
      "credential_management.cc",
      "credential_management.h",
      "credential_management_handler.cc",
      "credential_management_handler.h",
      "ctap2_device_operation.h",
      "ctap_authenticator_selection_request.cc",
      "ctap_authenticator_selection_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",
      "fido_authenticator.cc",
      "fido_authenticator.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_request_handler_base.cc",
      "fido_request_handler_base.h",
      "fido_task.cc",
      "fido_task.h",
      "fido_types.h",
      "filter.cc",
      "filter.h",
      "get_assertion_request_handler.cc",
      "get_assertion_request_handler.h",
      "get_assertion_task.cc",
      "get_assertion_task.h",
      "hid/fido_hid_device.cc",
      "hid/fido_hid_device.h",
      "hid/fido_hid_discovery.cc",
      "hid/fido_hid_discovery.h",
      "hid/fido_hid_message.cc",
      "hid/fido_hid_message.h",
      "hid/fido_hid_packet.cc",
      "hid/fido_hid_packet.h",
      "large_blob.cc",
      "large_blob.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",
      "pin.cc",
      "pin.h",
      "pin_internal.cc",
      "pin_internal.h",
      "platform_credential_store.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",
    ]

    deps += [
      "//services/device/public/cpp/hid",
      "//services/device/public/cpp/usb",
      "//services/device/public/mojom",
      "//services/device/public/mojom:usb",
      "//services/network/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/touch_id_context.h",
      "mac/touch_id_context.mm",
      "mac/util.h",
      "mac/util.mm",
    ]

    frameworks = [
      "Foundation.framework",
      "LocalAuthentication.framework",
      "Security.framework",
    ]
  }

  if (is_win) {
    sources += [
      "win/authenticator.cc",
      "win/authenticator.h",
      "win/discovery.cc",
      "win/discovery.h",
      "win/fake_webauthn_api.cc",
      "win/fake_webauthn_api.h",
      "win/logging.cc",
      "win/logging.h",
      "win/type_conversions.cc",
      "win/type_conversions.h",
      "win/webauthn_api.cc",
      "win/webauthn_api.h",
    ]
  }

  if (is_chromeos_ash) {
    sources += [
      "cros/authenticator.cc",
      "cros/authenticator.h",
      "cros/discovery.cc",
      "cros/discovery.h",
    ]

    deps += [
      ":u2f_proto",
      "//dbus",
    ]
  }
}

static_library("cablev2_registration") {
  sources = [
    "cable/v2_registration.cc",
    "cable/v2_registration.h",
  ]
  deps = [
    ":fido",
    "//base",
    "//components/cbor",
    "//components/device_event_log",
    "//components/gcm_driver",
    "//components/gcm_driver/instance_id",
  ]
}

static_library("cablev2_authenticator") {
  sources = [
    "cable/v2_authenticator.cc",
    "cable/v2_authenticator.h",
  ]
  deps = [
    ":fido",
    "//components/cbor",
    "//components/device_event_log",
    "//services/network/public/mojom",
  ]
}

static_library("cablev2_test_util") {
  testonly = true
  sources = [
    "cable/v2_test_util.cc",
    "cable/v2_test_util.h",
  ]
  deps = [
    ":cablev2_authenticator",
    ":fido",
    "//components/cbor",
    "//crypto",
    "//services/network:test_support",
    "//services/network/public/mojom",
  ]
}

if (is_chromeos_ash) {
  proto_library("u2f_proto") {
    sources = [ "//third_party/cros_system_api/dbus/u2f/u2f_interface.proto" ]

    proto_out_dir = "chromeos/dbus/u2f"
  }
}

source_set("mocks") {
  testonly = true

  sources = [
    "cable/mock_fido_ble_connection.cc",
    "cable/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 = [ "cable/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("v2_handshake_fuzzer") {
  sources = [ "cable/v2_handshake_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 || is_chromeos) && !use_udev

source_set("test_support") {
  testonly = true
  sources = [ "test_callback_receiver.h" ]
  deps = [
    "//base",
    "//components/apdu",
    "//device/fido",
    "//mojo/public/cpp/bindings",
    "//services/device/public/mojom",
    "//testing/gmock",
    "//testing/gtest",
  ]

  # Android doesn't compile. Linux requires udev.
  if (!is_linux_without_udev && !is_android) {
    sources += [
      "fake_fido_discovery.cc",
      "fake_fido_discovery.h",
      "hid/fake_hid_impl_for_testing.cc",
      "hid/fake_hid_impl_for_testing.h",
    ]
    deps += [ "//services/device/public/cpp/hid" ]
  }

  if (!is_android) {
    sources += [
      "multiple_virtual_fido_device_factory.cc",
      "multiple_virtual_fido_device_factory.h",
      "virtual_fido_device_discovery.cc",
      "virtual_fido_device_discovery.h",
      "virtual_fido_device_factory.cc",
      "virtual_fido_device_factory.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",
    ]
  }
}
