# 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/config.gni")
import("//build/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/test/test_package.gni")

group("tests") {
  testonly = true
  deps = [ ":kms_tests" ]
}

rustc_binary("bin") {
  name = "kms"
  edition = "2018"
  with_unit_tests = true

  deps = [
    "//sdk/fidl/fuchsia.kms:fuchsia.kms-rustc",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/mundane:mundane",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/boringssl/rust/boringssl-sys",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:base64",
    "//third_party/rust_crates:bincode",
    "//third_party/rust_crates:byteorder",
    "//third_party/rust_crates:bytes",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:libc",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:rust-crypto",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:tempfile",
    "//third_party/rust_crates:thiserror",
  ]

  non_rust_deps = [ "//src/security/tee/tee-client-api" ]

  sources = [
    "src/common.rs",
    "src/crypto_provider/mock_provider.rs",
    "src/crypto_provider/mod.rs",
    "src/crypto_provider/mundane_provider.rs",
    "src/crypto_provider/optee_provider/boringssl_wrapper.rs",
    "src/crypto_provider/optee_provider/keysafe.rs",
    "src/crypto_provider/optee_provider/mod.rs",
    "src/crypto_provider/software_provider.rs",
    "src/key_manager.rs",
    "src/kms_asymmetric_key.rs",
    "src/kms_sealing_key.rs",
    "src/main.rs",
    "src/tee/mod.rs",
    "src/tee/tee_client_api.rs",
  ]
}

package("kms") {
  deps = [ ":bin" ]

  binaries = [
    {
      name = "kms"
    },
  ]
  meta = [
    {
      path = rebase_path("meta/key_manager.cmx")
      dest = "key_manager.cmx"
    },
  ]
}

test_package("kms_tests") {
  deps = [ ":bin_test" ]
  tests = [
    {
      name = "kms_bin_test"
      dest = "kms_bin_test"
    },
  ]
}

config_data("optee_provider_config") {
  sources = [ "config/optee_provider_config.json" ]
  for_pkg = "kms"
  outputs = [ "crypto_provider_config.json" ]
}

config_data("optee_provider_test_config") {
  sources = [ "config/optee_provider_config.json" ]
  for_pkg = "kms_test_client_pkg"
  outputs = [ "crypto_provider_config.json" ]
}
