# Copyright 2018 The Fuchsia 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/cpp/cpp_fuzzer.gni")
import("//src/connectivity/bluetooth/core/bt-host/build/bt_gtest_package.gni")

source_set("definitions") {
  sources = [
    "error.cc",
    "error.h",
    "packet.cc",
    "packet.h",
    "smp.h",
    "types.cc",
    "types.h",
  ]

  public_deps = [
    "//src/connectivity/bluetooth/core/bt-host/common",
    "//src/connectivity/bluetooth/core/bt-host/hci-spec",  # hci_spec::LinkKey
  ]
}

static_library("sm") {
  sources = [
    "ecdh_key.cc",
    "ecdh_key.h",
    "pairing_channel.cc",
    "pairing_channel.h",
    "pairing_phase.cc",
    "pairing_phase.h",
    "phase_1.cc",
    "phase_1.h",
    "phase_2_legacy.cc",
    "phase_2_legacy.h",
    "phase_2_secure_connections.cc",
    "phase_2_secure_connections.h",
    "phase_3.cc",
    "phase_3.h",
    "sc_stage_1.h",
    "sc_stage_1_just_works_numeric_comparison.cc",
    "sc_stage_1_just_works_numeric_comparison.h",
    "sc_stage_1_passkey.cc",
    "sc_stage_1_passkey.h",
    "security_manager.cc",
    "security_manager.h",
    "security_request_phase.cc",
    "security_request_phase.h",
    "util.cc",
    "util.h",
  ]

  public_deps = [
    ":definitions",
    "//sdk/lib/fit",
    "//sdk/lib/fit-promise",
    "//src/connectivity/bluetooth/core/bt-host/gap:definitions",
    "//src/connectivity/bluetooth/core/bt-host/hci",
    "//src/connectivity/bluetooth/core/bt-host/l2cap",
    "//third_party/boringssl",
  ]
}

source_set("testing") {
  testonly = true

  sources = [
    "fake_phase_listener.h",
    "test_security_manager.cc",
    "test_security_manager.h",
  ]

  deps = [ ":sm" ]
}

source_set("tests") {
  testonly = true

  sources = [
    "ecdh_key_unittest.cc",
    "packet_unittest.cc",
    "pairing_channel_unittest.cc",
    "pairing_phase_unittest.cc",
    "phase_1_unittest.cc",
    "phase_2_legacy_unittest.cc",
    "phase_2_secure_connections_unittest.cc",
    "phase_3_unittest.cc",
    "sc_stage_1_just_works_numeric_comparison_unittest.cc",
    "sc_stage_1_passkey_unittest.cc",
    "security_manager_unittest.cc",
    "security_request_phase_unittest.cc",
    "types_unittest.cc",
    "util_unittest.cc",
  ]

  deps = [
    ":sm",
    ":testing",
    "//src/connectivity/bluetooth/core/bt-host/hci:testing",
    "//src/connectivity/bluetooth/core/bt-host/l2cap:testing",
    "//src/connectivity/bluetooth/core/bt-host/testing",
    "//third_party/googletest:gtest",
  ]

  # TODO(https://fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

bt_gtest_package("bt-host-sm-tests") {
  with_death_tests = true
  deps = [ ":tests" ]
}

cpp_fuzzer("valid_packet_reader_fuzzer") {
  sources = [ "valid_packet_reader_parse_sdu_fuzztest.cc" ]
  deps = [
    ":definitions",
    "//src/connectivity/bluetooth/core/bt-host/testing:fuzztest_driver",
  ]
}
