# Copyright 2019 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//common-mk/mojom_bindings_generator.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

keymaster_src = "../../../aosp/system/keymaster"

group("all") {
  deps = [ ":arc-keymasterd" ]
  if (use.test) {
    deps += [ ":arc-keymasterd_testrunner" ]
  }
  if (use.fuzzer) {
    deps += [ ":arc_keymasterd_fuzzer" ]
  }
}

# Binary
executable("arc-keymasterd") {
  sources = [
    "cert_store_instance.cc",
    "conversion.cc",
    "daemon.cc",
    "keymaster_server.cc",
    "main.cc",
  ]
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libmojo",
  ]
  deps = [
    ":keymaster_mojo_bindings",
    ":libarckeymaster_context",
    ":libkeymaster",
  ]
}

# Mojo bindings
generate_mojom_bindings("keymaster_mojo_bindings") {
  sources = [
    "mojo/cert_store.mojom",
    "mojo/keymaster.mojom",
  ]
}

# BoringSSL
config("boringssl_config") {
  libs = [
    "boringcrypto",
    "pthread",
  ]
}

# Keymaster context
pkg_config("libarckeymaster_context_config") {
  pkg_deps = [ "libsession_manager-client" ]
  libs = [ "chaps" ]
}

shared_library("libarckeymaster_context") {
  sources = [
    "${keymaster_src}/android_keymaster/logger.cpp",
    "${keymaster_src}/contexts/pure_soft_keymaster_context.cpp",
    "${keymaster_src}/contexts/soft_attestation_cert.cpp",
    "${keymaster_src}/km_openssl/attestation_utils.cpp",
    "${keymaster_src}/km_openssl/soft_keymaster_enforcement.cpp",
    "context/arc_keymaster_context.cc",
    "context/chaps_client.cc",
    "context/chaps_crypto_operation.cc",
    "context/context_adaptor.cc",
    "context/cros_key.cc",
    "context/crypto_operation.cc",
    "context/openssl_utils.cc",
    "keymaster_logger.cc",
  ]
  public_configs = [ ":libarckeymaster_context_config" ]
  configs += [
    # Needed since the keymaster context doesn't follow CrOS's guidelines.
    # gnlint: disable=GnLintVisibilityFlags
    "//common-mk:visibility_default",
    ":boringssl_config",
  ]

  # NOSORT
  pkg_deps = [
    "libchrome",
    "libuser_data_auth-client",

    # system_api depends on protobuf. It must appear before protobuf here so the
    # linker flags are in the right order.
    "system_api",
    "protobuf",
  ]
  deps = [
    ":context_proto",
    ":keymaster_mojo_bindings",
    ":libkeymaster",
  ]
}

# Keymaster
config("libkeymaster_config") {
  include_dirs = [ "${keymaster_src}/include" ]
  cflags = [
    "-Wno-defaulted-function-deleted",
    "-Wno-format-nonliteral",
    "-Wno-implicit-fallthrough",
  ]
}

shared_library("libkeymaster") {
  sources = [
    "${keymaster_src}/android_keymaster/android_keymaster.cpp",
    "${keymaster_src}/android_keymaster/android_keymaster_messages.cpp",
    "${keymaster_src}/android_keymaster/android_keymaster_utils.cpp",
    "${keymaster_src}/android_keymaster/authorization_set.cpp",
    "${keymaster_src}/android_keymaster/keymaster_enforcement.cpp",
    "${keymaster_src}/android_keymaster/keymaster_stl.cpp",
    "${keymaster_src}/android_keymaster/keymaster_tags.cpp",
    "${keymaster_src}/android_keymaster/operation.cpp",
    "${keymaster_src}/android_keymaster/operation_table.cpp",
    "${keymaster_src}/android_keymaster/serializable.cpp",
    "${keymaster_src}/key_blob_utils/auth_encrypted_key_blob.cpp",
    "${keymaster_src}/key_blob_utils/integrity_assured_key_blob.cpp",
    "${keymaster_src}/key_blob_utils/ocb.c",
    "${keymaster_src}/key_blob_utils/ocb_utils.cpp",
    "${keymaster_src}/key_blob_utils/software_keyblobs.cpp",
    "${keymaster_src}/km_openssl/aes_key.cpp",
    "${keymaster_src}/km_openssl/aes_operation.cpp",
    "${keymaster_src}/km_openssl/asymmetric_key.cpp",
    "${keymaster_src}/km_openssl/asymmetric_key_factory.cpp",
    "${keymaster_src}/km_openssl/attestation_record.cpp",
    "${keymaster_src}/km_openssl/block_cipher_operation.cpp",
    "${keymaster_src}/km_openssl/ckdf.cpp",
    "${keymaster_src}/km_openssl/ec_key.cpp",
    "${keymaster_src}/km_openssl/ec_key_factory.cpp",
    "${keymaster_src}/km_openssl/ecdsa_operation.cpp",
    "${keymaster_src}/km_openssl/ecies_kem.cpp",
    "${keymaster_src}/km_openssl/hkdf.cpp",
    "${keymaster_src}/km_openssl/hmac.cpp",
    "${keymaster_src}/km_openssl/hmac_key.cpp",
    "${keymaster_src}/km_openssl/hmac_operation.cpp",
    "${keymaster_src}/km_openssl/iso18033kdf.cpp",
    "${keymaster_src}/km_openssl/kdf.cpp",
    "${keymaster_src}/km_openssl/nist_curve_key_exchange.cpp",
    "${keymaster_src}/km_openssl/openssl_err.cpp",
    "${keymaster_src}/km_openssl/openssl_utils.cpp",
    "${keymaster_src}/km_openssl/rsa_key.cpp",
    "${keymaster_src}/km_openssl/rsa_key_factory.cpp",
    "${keymaster_src}/km_openssl/rsa_operation.cpp",
    "${keymaster_src}/km_openssl/software_random_source.cpp",
    "${keymaster_src}/km_openssl/symmetric_key.cpp",
    "${keymaster_src}/km_openssl/triple_des_key.cpp",
    "${keymaster_src}/km_openssl/triple_des_operation.cpp",
    "${keymaster_src}/km_openssl/wrapped_key.cpp",
  ]
  public_configs = [ ":libkeymaster_config" ]
  configs += [
    "//common-mk:visibility_default",
    ":boringssl_config",
  ]
}

# Key data protobuf
pkg_config("context_proto_config") {
  pkg_deps = [ "protobuf" ]
}

proto_library("context_proto") {
  proto_in_dir = "./proto"
  proto_out_dir = "include/arc/keymaster"
  use_pic = true
  standalone = true
  sources = [ "proto/key_data.proto" ]

  all_dependent_configs = [ ":context_proto_config" ]
}

# Test target
if (use.test) {
  pkg_config("arc-keymasterd_testrunner_config") {
    pkg_deps = [
      "libbrillo",
      "libchrome",
      "libchrome-test",
    ]
  }
  executable("arc-keymasterd_testrunner") {
    sources = [
      "context/arc_keymaster_context_test.cc",
      "context/chaps_client_test.cc",
      "context/chaps_crypto_operation_test.cc",
      "context/cros_key_test.cc",
      "context/crypto_operation_test.cc",
      "context/openssl_utils_test.cc",
      "conversion.cc",
      "conversion_test.cc",
      "keymaster_logger_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":arc-keymasterd_testrunner_config",
      ":boringssl_config",
    ]
    deps = [
      ":keymaster_mojo_bindings",
      ":libarckeymaster_context",
      ":libkeymaster",
      "//common-mk/testrunner:testrunner",
    ]
  }
}

# Fuzzer target.
if (use.fuzzer) {
  pkg_config("arc_keymasterd_fuzzer_config") {
    pkg_deps = [ "libchrome" ]
  }
  executable("arc_keymasterd_fuzzer") {
    sources = [
      "conversion.cc",
      "conversion_fuzzer.cc",
    ]
    configs += [
      "//common-mk/common_fuzzer:common_fuzzer",
      ":arc_keymasterd_fuzzer_config",
    ]
    deps = [
      ":keymaster_mojo_bindings",
      ":libarckeymaster_context",
      ":libkeymaster",
    ]
  }
}
