# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This file defines library targets and other auxillary definitions that
# are used for the resulting executable targets.

import("//common-mk/dbus_glib.gni")
import("//common-mk/generate-dbus-adaptors.gni")
import("//common-mk/generate-dbus-proxies.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

config("target_defaults") {
  defines = [
    "USE_PINWEAVER=${use.pinweaver}",
    "USE_SELINUX=${use.selinux}",
    "USE_TPM2=${use.tpm2}",
    "USE_DOUBLE_EXTEND_PCR_ISSUE=${use.double_extend_pcr_issue}",
    "USE_MOUNT_OOP=${use.mount_oop}",
    "USE_USER_SESSION_ISOLATION=${use.user_session_isolation}",
  ]
}

# Protobufs.
action("cryptohome-proto-external") {
  proto_out_dir = target_gen_dir
  dbus_proto_path = "${sysroot}/usr/include/chromeos/dbus/cryptohome"
  policy_proto_path = "${sysroot}/usr/include/proto"
  script = "external_proto_generator.py"
  inputs = [
    "${dbus_proto_path}/fido.proto",
    "${dbus_proto_path}/key.proto",
    "${dbus_proto_path}/rpc.proto",
    "${dbus_proto_path}/signed_secret.proto",
    "${dbus_proto_path}/UserDataAuth.proto",
    "${policy_proto_path}/install_attributes.proto",
  ]
  outputs =
      process_file_template(inputs, [ "${proto_out_dir}/{{source_file_part}}" ])
  args = [
           "-o",
           "${target_gen_dir}",
         ] + inputs
}

pkg_config("cryptohome-proto_config") {
  pkg_deps = [ "protobuf" ]
}

proto_library("cryptohome-proto") {
  proto_in_dir = ".."
  proto_out_dir = "include/cryptohome"
  proto_lib_dirs = [ target_gen_dir ]

  # libcryptohome-proto.a is used by a shared_libary
  # object, so we need to build it with '-fPIC' instead of '-fPIE'.
  use_pic = true

  sources = [
    "${proto_in_dir}/attestation.proto",
    "${proto_in_dir}/boot_lockbox_key.proto",
    "${proto_in_dir}/fake_le_credential_metadata.proto",
    "${proto_in_dir}/hash_tree_leaf_data.proto",
    "${proto_in_dir}/signature_sealed_data.proto",
    "${proto_in_dir}/timestamp.proto",
    "${proto_in_dir}/tpm_status.proto",
    "${proto_in_dir}/vault_keyset.proto",
  ]
  all_dependent_configs = [ ":cryptohome-proto_config" ]
  public_deps = [ ":cryptohome-generated-proto" ]
}

# Files generated by cryptohome-proto-external.
# TODO(oka): merge this with cryptohome-proto allowing proto_library to take
# sources in different directories.
proto_library("cryptohome-generated-proto") {
  proto_in_dir = target_gen_dir
  proto_out_dir = "include/cryptohome"

  # libcryptohome-proto.a is used by a shared_libary
  # object, so we need to build it with '-fPIC' instead of '-fPIE'.
  use_pic = true
  sources = get_target_outputs(":cryptohome-proto-external")
  public_deps = [ ":cryptohome-proto-external" ]
}

pkg_config("cryptohome-dbus-client_dependent_config") {
  pkg_deps = [
    "dbus-glib-1",
    "glib-2.0",
  ]
}

# D-Bus bindings.
generate_dbus_glib("cryptohome-dbus-client") {
  dbus_glib_out_dir = "include/bindings"
  dbus_glib_prefix = "cryptohome"
  dbus_glib_header_stem = "cryptohome"
  dbus_glib_type = "client"
  sources = [ "../dbus_bindings/org.chromium.CryptohomeInterface.xml" ]
  all_dependent_configs = [ ":cryptohome-dbus-client_dependent_config" ]
}

pkg_config("cryptohome-dbus-server_dependent_config") {
  pkg_deps = [
    "dbus-glib-1",
    "glib-2.0",
  ]
}

generate_dbus_glib("cryptohome-dbus-server") {
  dbus_glib_out_dir = "include/bindings"
  dbus_glib_prefix = "cryptohome"
  dbus_glib_header_stem = "cryptohome"
  dbus_glib_type = "server"
  sources = [ "../dbus_bindings/org.chromium.CryptohomeInterface.xml" ]
  all_dependent_configs = [ ":cryptohome-dbus-server_dependent_config" ]
}

generate_dbus_proxies("cryptohome-key-delegate-proxies") {
  proxy_output_file = "include/cryptohome_key_delegate/dbus-proxies.h"
  sources =
      [ "../dbus_bindings/org.chromium.CryptohomeKeyDelegateInterface.xml" ]
}

pkg_config("libcrosplatform_dependent_config") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libecryptfs",
    "libmetrics",
    "openssl",
    "vboot_host",
  ]
}

# Common objects.
static_library("libcrosplatform") {
  configs += [ ":target_defaults" ]
  sources = [
    "../cryptohome_metrics.cc",
    "../cryptolib.cc",
    "../dircrypto_util.cc",
    "../libscrypt_compat.cc",
    "../platform.cc",
  ]
  libs = [
    "keyutils",
    "secure_erase_file",
  ]
  if (use.selinux) {
    libs += [ "selinux" ]
  }
  all_dependent_configs = [ ":libcrosplatform_dependent_config" ]

  deps = [ ":cryptohome-proto" ]
}

pkg_config("libcrostpm_dependent_config") {
  pkg_deps = [
    "glib-2.0",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "openssl",
  ]
}

static_library("libcrostpm") {
  configs += [ ":target_defaults" ]
  sources = [
    "../bootlockbox/boot_lockbox.cc",
    "../challenge_credential_auth_block.cc",
    "../crc8.c",
    "../crypto.cc",
    "../crypto_error.cc",
    "../double_wrapped_compat_auth_block.cc",
    "../firmware_management_parameters.cc",
    "../install_attributes.cc",
    "../le_credential_manager_impl.cc",
    "../libscrypt_compat_auth_block.cc",
    "../lockbox.cc",
    "../persistent_lookup_table.cc",
    "../pin_weaver_auth_block.cc",
    "../pkcs11_init.cc",
    "../pkcs11_keystore.cc",
    "../sign_in_hash_tree.cc",
    "../tpm.cc",
    "../tpm_auth_block_utils.cc",
    "../tpm_bound_to_pcr_auth_block.cc",
    "../tpm_init.cc",
    "../tpm_not_bound_to_pcr_auth_block.cc",
    "../tpm_persistent_state.cc",
    "../vault_keyset.cc",
  ]
  libs = [
    "chaps",
    "tpm_manager",
  ]
  all_dependent_configs = [ ":libcrostpm_dependent_config" ]

  deps = [ ":libcrosplatform" ]
  public_deps = [ ":cryptohome-proto" ]

  if (use.tpm2) {
    sources += [
      "../pinweaver_le_credential_backend.cc",
      "../signature_sealing_backend_tpm2_impl.cc",
      "../tpm2_impl.cc",
      "../tpm2_metrics.cc",
    ]
    libs += [ "trunks" ]
    deps += [ ":pinweaver-proto-external" ]
  }

  if (!use.tpm2) {
    sources += [
      "../signature_sealing_backend_tpm1_impl.cc",
      "../tpm1_static_utils.cc",
      "../tpm_impl.cc",
      "../tpm_metrics.cc",
      "../tpm_new_impl.cc",
    ]
    libs += [
      "hwsec",
      "tspi",
    ]
  }

  # TODO(crbug.com/1082873): Remove after fixing usage of protobuf
  # deprecated declarations.
  cflags_cc = [ "-Wno-error=deprecated-declarations" ]
}

generate_dbus_adaptors("userdataauth_adaptors") {
  dbus_adaptors_out_dir = "include/dbus_adaptors"
  dbus_service_config = "../dbus_bindings/dbus-service-config-UserDataAuth.json"
  sources = [ "../dbus_bindings/org.chromium.UserDataAuth.xml" ]
}

generate_dbus_proxies("userdataauth-client-headers") {
  dbus_service_config = "../dbus_bindings/dbus-service-config-UserDataAuth.json"
  proxy_output_file = "include/user_data_auth/dbus-proxies.h"
  mock_output_file = "include/user_data_auth/dbus-proxy-mocks.h"
  proxy_path_in_mocks = "user_data_auth/dbus-proxies.h"
  sources = [ "../dbus_bindings/org.chromium.UserDataAuth.xml" ]
}

generate_dbus_adaptors("cryptohome_adaptors") {
  dbus_adaptors_out_dir = "include/dbus_adaptors"
  dbus_service_config = "../dbus_bindings/dbus-service-config.json"
  sources = [ "../dbus_bindings/org.chromium.CryptohomeInterface.xml" ]
}

pkg_config("libcryptohome_dependent_config") {
  pkg_deps = [
    "dbus-glib-1",
    "glib-2.0",
    "libbrillo",
    "libbrillo-glib",
    "libchrome-${libbase_ver}",
  ]
}

static_library("libcryptohome") {
  configs += [
    ":cryptohome-proto_config",
    ":target_defaults",
  ]
  sources = [
    "../arc_disk_quota.cc",
    "../bootlockbox/boot_attributes.cc",
    "../challenge_credentials/challenge_credentials_constants.cc",
    "../challenge_credentials/challenge_credentials_decrypt_operation.cc",
    "../challenge_credentials/challenge_credentials_generate_new_operation.cc",
    "../challenge_credentials/challenge_credentials_helper_impl.cc",
    "../challenge_credentials/challenge_credentials_operation.cc",
    "../challenge_credentials/challenge_credentials_verify_key_operation.cc",
    "../challenge_credentials/fido_utils.cc",
    "../chaps_client_factory.cc",
    "../credentials.cc",
    "../cryptohome_event_source.cc",
    "../dbus_transition.cc",
    "../dircrypto_data_migrator/atomic_flag.cc",
    "../dircrypto_data_migrator/migration_helper.cc",
    "../disk_cleanup.cc",
    "../disk_cleanup_routines.cc",
    "../fingerprint_manager.cc",
    "../homedirs.cc",
    "../interface.cc",
    "../key_challenge_service_factory_impl.cc",
    "../key_challenge_service_impl.cc",
    "../lockbox-cache.cc",
    "../mount.cc",
    "../mount_constants.cc",
    "../mount_factory.cc",
    "../mount_helper.cc",
    "../mount_namespace.cc",
    "../mount_stack.cc",
    "../mount_task.cc",
    "../mount_utils.cc",
    "../out_of_process_mount_helper.cc",
    "../service.cc",
    "../service_distributed.cc",
    "../service_userdataauth.cc",
    "../stateful_recovery.cc",
    "../user_oldest_activity_timestamp_cache.cc",
    "../user_session.cc",
    "../userdataauth.cc",
    "../vault_keyset_factory.cc",
  ]

  # The generated dbus headers use "register".
  cflags = [ "-Wno-deprecated-register" ]
  libs = [
    "attestation",
    "biod_proxy",
    "chaps",
    "hwsec",
    "policy",
    "tpm_manager",
  ]
  all_dependent_configs = [ ":libcryptohome_dependent_config" ]

  deps = [
    ":cryptohome-dbus-server",
    ":cryptohome-key-delegate-proxies",
    ":cryptohome-proto",
    ":libcrosplatform",
    ":libcrostpm",
    ":namespace-mounter-ipc-proto",
    ":userdataauth_adaptors",
  ]

  if (use.tpm2) {
    deps += [ ":libnvram-boot-lockbox-client" ]
  }
}

# Copy boot_lockbox_rpc.proto from /usr/include/chromeos/dbus.
action("bootlockbox-proto-external") {
  proto_out_dir = "${target_gen_dir}/bootlockbox"
  shared_proto_path = "${sysroot}/usr/include/chromeos/dbus/bootlockbox"
  inputs = [ "${shared_proto_path}/boot_lockbox_rpc.proto" ]
  outputs =
      process_file_template(inputs, [ "${proto_out_dir}/{{source_file_part}}" ])

  script = "external_proto_generator.py"
  args = [
           "-o",
           "${proto_out_dir}",
         ] + inputs
}

pkg_config("bootlockbox-proto_config") {
  pkg_deps = [ "protobuf" ]
}

# BootLockbox rpc.proto.
proto_library("bootlockbox-proto") {
  proto_in_dir = "../bootlockbox"
  proto_lib_dirs = [ target_gen_dir ]
  proto_out_dir = "include/cryptohome/bootlockbox"

  # shared_libary.
  use_pic = true
  sources = [ "${proto_in_dir}/key_value_map.proto" ]
  all_dependent_configs = [ ":cryptohome-proto_config" ]
  deps = [ ":bootlockbox-generated-proto" ]
}

# Files generated by bootlockbox-proto-external.
# TODO(oka): merge this with bootlockbox-proto allowing proto_library to take
# sources in different directories.
proto_library("bootlockbox-generated-proto") {
  proto_in_dir = "${target_gen_dir}/bootlockbox"
  proto_out_dir = "include/cryptohome/bootlockbox"

  # shared_libary.
  use_pic = true
  sources = [ "${target_gen_dir}/bootlockbox/boot_lockbox_rpc.proto" ]
  all_dependent_configs = [ ":cryptohome-proto_config" ]
  deps = [ ":bootlockbox-proto-external" ]
}

generate_dbus_adaptors("bootlockbox-adaptors") {
  dbus_service_config = "../dbus_adaptors/dbus-service-config.json"
  dbus_adaptors_out_dir = "include/dbus_adaptors"
  sources = [ "../dbus_adaptors/org.chromium.BootLockboxInterface.xml" ]
}

generate_dbus_proxies("bootlockbox-client-headers") {
  dbus_service_config = "../dbus_adaptors/dbus-service-config.json"
  proxy_output_file = "include/bootlockbox/dbus-proxies.h"
  mock_output_file = "include/bootlockbox/dbus-proxy-mocks.h"
  proxy_path_in_mocks = "bootlockbox/dbus-proxies.h"
  sources = [ "../dbus_adaptors/org.chromium.BootLockboxInterface.xml" ]
}

if (use.tpm2) {
  proto_library("pinweaver-proto-external") {
    proto_in_dir = "${sysroot}/usr/include/proto"
    proto_out_dir = "include/cryptohome"
    sources = [ "${proto_in_dir}/pinweaver.proto" ]
    configs = [ ":cryptohome-proto_config" ]
  }

  pkg_config("libnvram-boot-lockbox_dependent_config") {
    pkg_deps = [
      "libbrillo",
      "libchrome-${libbase_ver}",
    ]
  }

  static_library("libnvram-boot-lockbox-client") {
    configs += [ ":target_defaults" ]
    sources = [ "../bootlockbox/boot_lockbox_client.cc" ]
    all_dependent_configs = [ ":libnvram-boot-lockbox_dependent_config" ]

    deps = [
      ":bootlockbox-client-headers",
      ":bootlockbox-proto",
    ]
  }

  static_library("libnvram-boot-lockbox") {
    configs += [ ":target_defaults" ]
    sources = [
      "../bootlockbox/nvram_boot_lockbox.cc",
      "../bootlockbox/tpm2_nvspace_utility.cc",
    ]
    all_dependent_configs = [ ":libnvram-boot-lockbox_dependent_config" ]

    deps = [
      ":bootlockbox-proto",
      ":cryptohome-proto",
      ":libcrosplatform",
    ]
  }
}

# cryptohome <-> cryptohome-namespace-mounter IPC proto.
proto_library("namespace-mounter-ipc-proto") {
  proto_in_dir = "../cryptohome_namespace_mounter"
  proto_out_dir = "include/cryptohome"

  sources = [ "${proto_in_dir}/namespace_mounter_ipc.proto" ]
  configs = [ ":cryptohome-proto_config" ]
}

pkg_config("libfido_config") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "openssl",
  ]
}

static_library("libfido") {
  configs += [ ":target_defaults" ]
  sources = [
    "../fido/attested_credential_data.cc",
    "../fido/authenticator_data.cc",
    "../fido/ec_public_key.cc",
    "../fido/fido_constants.cc",
    "../fido/fido_parsing_utils.cc",
    "../fido/public_key.cc",
  ]
  libs = [ "cbor" ]
  all_dependent_configs = [ ":libfido_config" ]
}
