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

# Stop linter from complaining XXX_unittest.cc naming.
# TODO(cylai): rename all the unittest files and enable this linting option.
# gnlint: disable=GnLintSourceFileNames

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

group("all") {
  deps = [
    ":bootlockboxd",
    ":bootlockboxtool",
    ":cryptohome",
    ":cryptohome-namespace-mounter",
    ":cryptohome-path",
    ":cryptohomed",
    ":encrypted-reboot-vault",
    ":homedirs_initializer",
    ":lockbox-cache",
    ":mount-encrypted",
    ":mount_encrypted_lib",
    ":stateful-recovery",
    ":stateful_recovery_lib",
    ":tpm-manager",
  ]
  if (use.cert_provision) {
    deps += [
      ":cert_provision",
      ":cert_provision-proto",
      ":cert_provision-static",
      ":cert_provision_client",
    ]
  }
  if (use.test) {
    deps += [
      ":boot_lockbox_unittests",
      ":cryptohome_testrunner",
      ":error_location_check",
      ":fake_platform_unittest",
      ":mount_encrypted_unittests",
      ":stateful_recovery_unittests",
    ]
  }
  if (use.fuzzer) {
    deps += [
      ":cryptohome_cryptolib_blob_to_hex_fuzzer",
      ":cryptohome_cryptolib_rsa_oaep_decrypt_fuzzer",
      ":cryptohome_tpm1_cmk_migration_parser_fuzzer",
      ":cryptohome_user_secret_stash_parser_fuzzer",
    ]
  }
}

config("target_defaults") {
  configs = [ "libs:target_defaults" ]
}

config("local_print_proto_include") {
  # This config is used when any build target used the print_proto.
  include_dirs = [ "${target_gen_dir}/.." ]
}

action("print_proto_library") {
  dbus_proto_path = "${sysroot}/usr/include/chromeos/dbus/cryptohome"
  script = "../libhwsec-foundation/utility/proto_print.py"
  inputs = [
    "${dbus_proto_path}/auth_factor.proto",
    "${dbus_proto_path}/fido.proto",
    "${dbus_proto_path}/key.proto",
    "${dbus_proto_path}/rpc.proto",
    "${dbus_proto_path}/UserDataAuth.proto",
  ]
  outputs = [
    "${target_gen_dir}/common/print_auth_factor_proto.cc",
    "${target_gen_dir}/common/print_fido_proto.cc",
    "${target_gen_dir}/common/print_key_proto.cc",
    "${target_gen_dir}/common/print_rpc_proto.cc",
    "${target_gen_dir}/common/print_UserDataAuth_proto.cc",
  ]
  args = [
           "--package-dir",
           "cryptohome",
           "--subdir",
           "common",
           "--proto-include",
           "cryptohome/proto_bindings",
           "--output-dir",
           "${target_gen_dir}/common",
         ] + inputs
}

# Main programs.
executable("cryptohome") {
  sources = [ "cryptohome.cc" ]
  sources += get_target_outputs(":print_proto_library")
  configs += [
    ":local_print_proto_include",
    ":target_defaults",
  ]
  libs = [
    "chaps",
    "keyutils",
    "policy",
    "pthread",
  ]
  deps = [
    ":print_proto_library",
    "libs:cryptohome-proto",
    "libs:libcrostpm",
    "libs:libcryptohome",
  ]

  pkg_deps = [
    "dbus-1",
    "libecryptfs",
    "libmetrics",
    "libuser_data_auth-client",
    "vboot_host",
  ]
}

executable("cryptohome-path") {
  sources = [ "cryptohome-path.cc" ]
  pkg_deps = [
    "libbrillo",
    "libchrome",
  ]
}

executable("cryptohomed") {
  sources = [ "cryptohomed.cc" ]
  configs += [ ":target_defaults" ]
  libs = [
    "chaps",
    "keyutils",
    "policy",
    "pthread",
  ]
  deps = [
    "libs:libcrostpm",
    "libs:libcryptohome",
  ]

  pkg_deps = [
    "dbus-1",
    "libbootlockbox-client",
    "libecryptfs",
    "libmetrics",
    "vboot_host",
  ]
}

# This executable is used to mount cryptohomes.
executable("cryptohome-namespace-mounter") {
  sources = [ "cryptohome_namespace_mounter/cryptohome_namespace_mounter.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    "libs:libcryptohome",
    "libs:namespace-mounter-ipc-proto",
  ]
}

executable("lockbox-cache") {
  sources = [
    "dircrypto_util.cc",
    "lockbox-cache-main.cc",
    "lockbox-cache.cc",
    "lockbox.cc",
    "platform.cc",
  ]
  configs += [ ":target_defaults" ]
  libs = [
    "keyutils",
    "secure_erase_file",
  ]
  deps = [
    "libs:cryptohome-proto",
    "libs:libcrostpm",
  ]
  pkg_deps = [
    "libecryptfs",
    "libmetrics",
    "vboot_host",
  ]
}

static_library("mount_encrypted_lib") {
  sources = [
    "mount_encrypted/encrypted_fs.cc",
    "mount_encrypted/encryption_key.cc",
    "mount_encrypted/mount_encrypted_metrics.cc",
    "mount_encrypted/tpm.cc",
  ]
  configs += [ ":target_defaults" ]
  defines = [ "CHROMEOS_ENVIRONMENT=1" ]
  deps = [ "libs:cryptohome-proto" ]
  pkg_deps = [ "vboot_host" ]

  if (use.tpm2) {
    sources += [ "mount_encrypted/tpm2.cc" ]

    # This selects TPM2 code in vboot_host headers.
    defines += [ "TPM2_MODE=1" ]
  } else {
    sources += [ "mount_encrypted/tpm1.cc" ]
  }
}

executable("encrypted-reboot-vault") {
  sources = [
    "encrypted_reboot_vault/encrypted_reboot_vault.cc",
    "encrypted_reboot_vault/encrypted_reboot_vault_main.cc",
  ]
  deps = [ "libs:libcrostpm" ]
}

executable("mount-encrypted") {
  sources = [ "mount_encrypted/mount_encrypted.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":mount_encrypted_lib",
    "libs:libcrostpm",
  ]
  pkg_deps = [ "vboot_host" ]
}

executable("tpm-manager") {
  sources = [ "tpm_manager.cc" ]
  configs += [ ":target_defaults" ]
  libs = [
    "tpm_manager",
    "attestation",
  ]

  pkg_deps = [
    "libecryptfs",
    "libmetrics",
  ]
  deps = [ "libs:libcrostpm" ]

  if (use.tpm2) {
    libs += [ "trunks" ]
  }
  if (use.tpm) {
    libs += [ "chaps" ]
    pkg_deps += [ "vboot_host" ]
  }
}

executable("homedirs_initializer") {
  sources = [ "homedirs_initializer.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    "libs:libcrostpm",
    "libs:libcryptohome",
  ]
}

static_library("stateful_recovery_lib") {
  sources = [ "stateful_recovery/stateful_recovery.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ "libs:libcryptohome" ]
  pkg_deps = [ "libuser_data_auth-client" ]
}

executable("stateful-recovery") {
  sources = [ "stateful_recovery/main.cc" ]
  libs = [ "policy" ]
  configs += [ ":target_defaults" ]
  deps = [ ":stateful_recovery_lib" ]
  pkg_deps = [ "dbus-1" ]
}

if (use.cert_provision) {
  proto_library("cert_provision-proto") {
    proto_in_dir = "./cert"
    proto_out_dir = "include/cert"
    use_pic = true
    sources = [ "cert/cert_provision.proto" ]
  }

  shared_library("cert_provision") {
    deps = [ ":cert_provision-static" ]
  }

  pkg_config("cert_provision_deps") {
    pkg_deps = [
      "libattestation-client",
      "libbrillo",
      "libchrome",
      "system_api",
    ]
    if (use.fuzzer) {
      pkg_deps += [ "protobuf" ]
    } else {
      pkg_deps += [ "protobuf-lite" ]
    }
  }

  static_library("cert_provision-static") {
    sources = [
      "cert/cert_provision.cc",
      "cert/cert_provision_keystore.cc",
      "cert/cert_provision_util.cc",
    ]

    # libcert_provision-static.a is used by a shared_libary
    # object, so we need to build it with '-fPIC' instead of '-fPIE'.
    configs -= [ "//common-mk:pie" ]
    configs += [ "//common-mk:pic" ]
    libs = [
      "chaps",
      "pthread",
    ]

    all_dependent_configs = [ ":cert_provision_deps" ]

    deps = [
      ":cert_provision-proto",
      "libs:cryptohome-proto",
    ]
  }

  executable("cert_provision_client") {
    sources = [ "cert/cert_provision_client.cc" ]
    deps = [ ":cert_provision" ]
  }
}

if (use.test) {
  static_library("fake_platform-static") {
    sources = [
      "fake_platform.cc",
      "fake_platform/fake_fake_mount_mapping_redirect_factory.cc",
      "fake_platform/fake_mount_mapper.cc",
      "fake_platform/real_fake_mount_mapping_redirect_factory.cc",
      "fake_platform/test_file_path.cc",
      "mock_platform.cc",
    ]
    deps = [ "libs:libcrosplatform" ]
    pkg_deps = [
      "libbrillo",
      "libchrome",
    ]
  }

  executable("cryptohome_testrunner") {
    sources = [
      "auth_blocks/async_challenge_credential_auth_block_test.cc",
      "auth_blocks/auth_block_state_unittest.cc",
      "auth_blocks/auth_block_unittest.cc",
      "auth_blocks/auth_block_utility_impl_unittest.cc",
      "auth_blocks/revocation_unittest.cc",
      "auth_blocks/scrypt_auth_block_test.cc",
      "auth_blocks/sync_to_async_auth_block_adapter_test.cc",
      "auth_factor/auth_factor_label_unittest.cc",
      "auth_factor/auth_factor_manager_unittest.cc",
      "auth_factor/auth_factor_metadata_unittest.cc",
      "auth_factor/auth_factor_unittest.cc",
      "auth_factor/auth_factor_utils_unittest.cc",
      "auth_factor_vault_keyset_converter_unittest.cc",
      "auth_input_utils_unittest.cc",
      "auth_session_keyset_management_unittest.cc",
      "auth_session_manager_unittest.cc",
      "auth_session_proto_utils_unittest.cc",
      "auth_session_unittest.cc",
      "challenge_credentials/challenge_credentials_helper_impl_unittest.cc",
      "challenge_credentials/challenge_credentials_test_utils.cc",
      "challenge_credentials/fido_utils_unittest.cc",
      "challenge_credentials/signature_sealing_test_utils.cc",
      "cleanup/disk_cleanup_routines_unittest.cc",
      "cleanup/disk_cleanup_unittest.cc",
      "cleanup/low_disk_space_handler_unittest.cc",
      "cleanup/mock_disk_cleanup.cc",
      "cleanup/mock_disk_cleanup_routines.cc",
      "cleanup/user_oldest_activity_timestamp_manager_unittest.cc",
      "crc32_unittest.cc",
      "credential_verifier_factory_unittest.cc",
      "credential_verifier_unittest.cc",
      "credentials_unittest.cc",
      "crypto_unittest.cc",
      "cryptohome_key_loader_unittest.cc",
      "cryptohome_keys_manager_unittest.cc",
      "cryptorecovery/fake_recovery_mediator_crypto.cc",
      "cryptorecovery/recovery_crypto_hsm_cbor_serialization_unittest.cc",
      "cryptorecovery/recovery_crypto_unittest.cc",
      "dircrypto_data_migrator/migration_helper_unittest.cc",
      "error/converter_test.cc",
      "error/cryptohome_crypto_error_test.cc",
      "error/cryptohome_error_test.cc",
      "error/cryptohome_le_cred_error_test.cc",
      "error/cryptohome_mount_error_test.cc",
      "error/cryptohome_tpm_error_test.cc",
      "error/reporting_test.cc",
      "fido/make_credential_response_test.cc",
      "filesystem_layout_unittest.cc",
      "fingerprint_manager_unittest.cc",
      "firmware_management_parameters_unittest.cc",
      "install_attributes_unittest.cc",
      "key_objects_unittest.cc",
      "keyset_management_unittest.cc",
      "le_credential_manager_impl_unittest.cc",
      "lockbox-cache-unittest.cc",
      "lockbox_unittest.cc",
      "mock_cryptohome_key_loader.cc",
      "mock_cryptohome_keys_manager.cc",
      "mock_firmware_management_parameters.cc",
      "mock_install_attributes.cc",
      "mock_key_challenge_service.cc",
      "mock_lockbox.cc",
      "mock_pkcs11_init.cc",
      "mock_tpm.cc",
      "persistent_lookup_table_unittest.cc",
      "platform_unittest.cc",
      "sign_in_hash_tree_unittest.cc",
      "signature_sealing/structures_proto_test.cc",
      "storage/arc_disk_quota_unittest.cc",
      "storage/cryptohome_vault_test.cc",
      "storage/encrypted_container/dmcrypt_container_test.cc",
      "storage/encrypted_container/ecryptfs_container_test.cc",
      "storage/encrypted_container/ephemeral_container_test.cc",
      "storage/encrypted_container/fscrypt_container_test.cc",
      "storage/encrypted_container/logical_volume_backing_device_test.cc",
      "storage/encrypted_container/loopback_device_test.cc",
      "storage/encrypted_container/ramdisk_device_test.cc",
      "storage/homedirs_unittest.cc",
      "storage/mount_stack_unittest.cc",
      "storage/mount_unittest.cc",
      "storage/out_of_process_mount_helper_test.cc",
      "user_secret_stash_storage_unittest.cc",
      "user_secret_stash_unittest.cc",
      "user_session/real_user_session_unittest.cc",
      "user_session/user_session_map_unittest.cc",
      "userdataauth_auth_session_unittest.cc",
      "userdataauth_unittest.cc",
      "uss_experiment_config_fetcher_unittest.cc",
      "vault_keyset_unittest.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    libs = [
      "chaps",
      "hwsec_test",
      "keyutils",
      "policy",
      "pthread",
    ]

    deps = [
      ":fake_platform-static",
      "libs:cryptohome-proto",
      "libs:libcrostpm",
      "libs:libcryptohome",
      "libs:libfido",
      "//common-mk/testrunner",
    ]

    pkg_deps = [
      "dbus-1",
      "libattestation-client",
      "libattestation-client-test",
      "libbrillo-test",
      "libchrome-test",
      "libecryptfs",
      "libmetrics",
      "libshill-client",
      "libshill-client-test",
      "libtpm_manager-client",
      "libtpm_manager-client-test",
      "libuser_data_auth-client",
      "libuser_data_auth-client-test",
      "vboot_host",
    ]

    if (use.tpm2) {
      sources += [
        "error/cryptohome_tpm2_error_test.cc",
        "error/reporting_tpm2_test.cc",
        "tpm2_test.cc",
      ]
      libs += [ "trunks_test" ]
    }
    if (use.tpm) {
      sources += [
        "error/cryptohome_tpm1_error_test.cc",
        "error/reporting_tpm1_test.cc",
        "tpm1_static_utils_unittest.cc",
        "tpm1_test.cc",
      ]
    }

    if (use.cert_provision) {
      sources += [
        "cert/cert_provision_keystore_unittest.cc",
        "cert/cert_provision_unittest.cc",
      ]
      deps += [ ":cert_provision-static" ]
    }
  }

  executable("fake_platform_unittest") {
    sources = [
      "fake_platform/fake_mount_mapper_unittest.cc",
      "fake_platform/real_fake_mount_mapping_redirect_factory_unittest.cc",
      "fake_platform/test_file_path_unittest.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":fake_platform-static",
      "//common-mk/testrunner",
    ]
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
    ]
  }

  executable("mount_encrypted_unittests") {
    sources = [
      "mount_encrypted/encrypted_fs_unittest.cc",
      "mount_encrypted/encryption_key_unittest.cc",
      "mount_encrypted/tlcl_stub.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":fake_platform-static",
      ":mount_encrypted_lib",
      "libs:libcrostpm",
      "//common-mk/testrunner",
    ]
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
    ]

    if (use.tpm2) {
      defines = [ "TPM2_MODE=1" ]
    }
  }

  executable("boot_lockbox_unittests") {
    sources = [
      "bootlockbox/boot_lockbox_dbus_adaptor.cc",
      "bootlockbox/boot_lockbox_service_unittest.cc",
      "bootlockbox/fake_tpm_nvspace.cc",
      "bootlockbox/nvram_boot_lockbox_unittest.cc",
      "bootlockbox/tpm_nvspace_impl_unittest.cc",
    ]
    libs = [ "tpm_manager" ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]

    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
      "libtpm_manager-client",
      "libtpm_manager-client-test",
    ]
    deps = [
      ":tpm-manager",
      "libs:libcrostpm",
      "libs:libnvram-boot-lockbox",
      "//common-mk/testrunner",
    ]
  }

  executable("stateful_recovery_unittests") {
    sources = [ "stateful_recovery/stateful_recovery_unittest.cc" ]
    libs = [ "policy" ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":fake_platform-static",
      ":stateful_recovery_lib",
      "libs:cryptohome-proto",
      "//common-mk/testrunner",
    ]
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
      "libuser_data_auth-client",
      "libuser_data_auth-client-test",
    ]
  }
}

executable("bootlockboxtool") {
  sources = [ "bootlockbox/boot_lockbox_tool.cc" ]

  configs += [ ":target_defaults" ]
  pkg_deps = [ "libbootlockbox-client" ]
  deps = [ "libs:libnvram-boot-lockbox" ]
}

executable("bootlockboxd") {
  sources = [
    "bootlockbox/boot_lockbox_dbus_adaptor.cc",
    "bootlockbox/boot_lockbox_service.cc",
    "bootlockbox/boot_lockboxd.cc",
  ]

  configs += [ ":target_defaults" ]
  pkg_deps = [
    "libecryptfs",
    "libmetrics",
    "vboot_host",
  ]
  libs = [
    "keyutils",
    "tpm_manager",
  ]
  deps = [
    "libs:bootlockbox-adaptors",
    "libs:libcrostpm",
    "libs:libnvram-boot-lockbox",
  ]
}

if (use.fuzzer) {
  executable("cryptohome_cryptolib_rsa_oaep_decrypt_fuzzer") {
    sources = [
      "fuzzers/blob_mutator.cc",
      "fuzzers/cryptolib_rsa_oaep_decrypt_fuzzer.cc",
    ]
    libs = [ "hwsec-foundation" ]
    configs += [ "//common-mk/common_fuzzer" ]
    deps = [ "libs:libcrosplatform" ]
    pkg_deps = [ "libchrome-test" ]
  }

  executable("cryptohome_tpm1_cmk_migration_parser_fuzzer") {
    sources = [
      "fuzzers/blob_mutator.cc",
      "fuzzers/tpm1_cmk_migration_parser_fuzzer.cc",
    ]
    libs = [
      "hwsec",
      "hwsec-foundation",
    ]
    configs += [ "//common-mk/common_fuzzer" ]
    deps = [
      "libs:libcrosplatform",
      "libs:libcrostpm",
    ]
    pkg_deps = [ "libchrome-test" ]

    # TODO(crbug/1144974): This is a workaround to let the fuzzer can build on TPM2 devices.
    if (!use.tpm) {
      sources += [
        "tpm1_static_utils.cc",
        "tpm_impl.cc",
        "tpm_metrics.cc",
      ]
      libs += [
        "hwsec",
        "tspi",
      ]
    }
  }

  executable("cryptohome_cryptolib_blob_to_hex_fuzzer") {
    sources = [ "fuzzers/cryptolib_blob_to_hex_fuzzer.cc" ]
    libs = [ "hwsec-foundation" ]
    configs += [ "//common-mk/common_fuzzer" ]
    deps = [ "libs:libcrosplatform" ]
  }

  executable("cryptohome_user_secret_stash_parser_fuzzer") {
    sources = [
      "fuzzers/blob_mutator.cc",
      "fuzzers/user_secret_stash_parser_fuzzer.cc",
    ]
    libs = [ "hwsec-foundation" ]
    configs += [ "//common-mk/common_fuzzer" ]
    deps = [
      "libs:libcrosplatform",
      "libs:libcryptohome",
    ]
  }
}

action("error_location_check") {
  outputs = [ "${target_gen_dir}/error_checked" ]

  # gn requires an output to determine if we need to run the script.
  deps = [ ":cryptohomed" ]

  # If any source that contributes to cryptohomed changed, we might need to
  # check again.

  script = "error/tool/location_db.py"
  args = [ "--check" ]
}
