| # 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", | |
| ] | |
| configs += [ ":boringssl_config" ] | |
| pkg_deps = [ | |
| "libbrillo", | |
| "libchrome", | |
| "libmojo", | |
| ] | |
| deps = [ | |
| ":install_dbus_service", | |
| ":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", | |
| ] | |
| } | |
| } | |
| # Install dbus service file. | |
| install_config("install_dbus_service") { | |
| sources = [ "dbus_permissions/org.chromium.ArcKeymaster.service" ] | |
| install_path = "dbus_system_services" | |
| } |