blob: d74d8939f4df02662b527df097a27340d0599889 [file] [log] [blame]
# Copyright 2019 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.
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",
# 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",
":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",
]
}
}