| // Copyright (C) 2014 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // libkeymaster_messages contains just the code necessary to communicate with a |
| // AndroidKeymaster implementation, e.g. one running in TrustZone. |
| package { |
| default_applicable_licenses: ["system_keymaster_license"], |
| } |
| |
| // Added automatically by a large-scale-change that took the approach of |
| // 'apply every license found to every target'. While this makes sure we respect |
| // every license restriction, it may not be entirely correct. |
| // |
| // e.g. GPL in an MIT project might only apply to the contrib/ directory. |
| // |
| // Please consider splitting the single license below into multiple licenses, |
| // taking care not to lose any license_kind information, and overriding the |
| // default license using the 'licenses: [...]' property on targets as needed. |
| // |
| // For unused files, consider creating a 'fileGroup' with "//visibility:private" |
| // to attach the license to, and including a comment whether the files may be |
| // used in the current project. |
| // See: http://go/android-license-faq |
| license { |
| name: "system_keymaster_license", |
| visibility: [":__subpackages__"], |
| license_kinds: [ |
| "SPDX-license-identifier-Apache-2.0", |
| "SPDX-license-identifier-ISC", |
| "legacy_unencumbered", |
| ], |
| license_text: [ |
| "NOTICE", |
| ], |
| } |
| |
| cc_defaults { |
| name: "keymaster_defaults", |
| vendor_available: true, |
| cflags: [ |
| "-Wall", |
| "-Werror", |
| "-Wunused", |
| ], |
| clang: true, |
| clang_cflags: [ |
| "-Wno-error=unused-const-variable", |
| "-Wno-error=unused-private-field", |
| "-Wimplicit-fallthrough", |
| // TODO(krasin): reenable coverage flags, when the new Clang toolchain is released. |
| // Currently, if enabled, these flags will cause an internal error in Clang. |
| "-fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp" |
| ], |
| tidy: true, |
| tidy_checks: [ |
| "-performance-noexcept-move-constructor", |
| ], |
| sanitize: { |
| integer_overflow: false, |
| }, |
| } |
| |
| cc_library_shared { |
| name: "libkeymaster_messages", |
| srcs: [ |
| "android_keymaster/android_keymaster_messages.cpp", |
| "android_keymaster/android_keymaster_utils.cpp", |
| "android_keymaster/authorization_set.cpp", |
| "android_keymaster/keymaster_tags.cpp", |
| "android_keymaster/logger.cpp", |
| "android_keymaster/serializable.cpp", |
| ], |
| header_libs: ["libhardware_headers"], |
| defaults: ["keymaster_defaults" ], |
| clang_cflags: [ |
| "-DKEYMASTER_NAME_TAGS", |
| ], |
| export_include_dirs: ["include"], |
| host_supported: true, |
| target: { |
| host: { |
| clang_cflags: [ |
| "-fno-rtti", // TODO(b/156427382): Remove workaround when possible. |
| ], |
| }, |
| }, |
| } |
| |
| // libkeymaster_portable contains almost everything needed for a keymaster |
| // implementation, lacking only a subclass of the (abstract) KeymasterContext |
| // class to provide environment-specific services and a wrapper to translate from |
| // the function-based keymaster HAL API to the message-based AndroidKeymaster API. |
| cc_library { |
| name: "libkeymaster_portable", |
| srcs: [ |
| "android_keymaster/android_keymaster.cpp", |
| "android_keymaster/android_keymaster_messages.cpp", |
| "android_keymaster/android_keymaster_utils.cpp", |
| "android_keymaster/authorization_set.cpp", |
| "android_keymaster/keymaster_enforcement.cpp", |
| "android_keymaster/keymaster_tags.cpp", |
| "android_keymaster/logger.cpp", |
| "android_keymaster/operation.cpp", |
| "android_keymaster/operation_table.cpp", |
| "android_keymaster/pure_soft_secure_key_storage.cpp", |
| "android_keymaster/remote_provisioning_utils.cpp", |
| "android_keymaster/serializable.cpp", |
| "key_blob_utils/auth_encrypted_key_blob.cpp", |
| "key_blob_utils/integrity_assured_key_blob.cpp", |
| "key_blob_utils/ocb.c", |
| "key_blob_utils/ocb_utils.cpp", |
| "key_blob_utils/software_keyblobs.cpp", |
| "km_openssl/aes_key.cpp", |
| "km_openssl/aes_operation.cpp", |
| "km_openssl/asymmetric_key.cpp", |
| "km_openssl/asymmetric_key_factory.cpp", |
| "km_openssl/attestation_record.cpp", |
| "km_openssl/attestation_utils.cpp", |
| "km_openssl/block_cipher_operation.cpp", |
| "km_openssl/certificate_utils.cpp", |
| "km_openssl/ckdf.cpp", |
| "km_openssl/ec_key.cpp", |
| "km_openssl/ec_key_factory.cpp", |
| "km_openssl/ecdh_operation.cpp", |
| "km_openssl/ecdsa_operation.cpp", |
| "km_openssl/ecies_kem.cpp", |
| "km_openssl/hkdf.cpp", |
| "km_openssl/hmac.cpp", |
| "km_openssl/hmac_key.cpp", |
| "km_openssl/hmac_operation.cpp", |
| "km_openssl/iso18033kdf.cpp", |
| "km_openssl/kdf.cpp", |
| "km_openssl/nist_curve_key_exchange.cpp", |
| "km_openssl/openssl_err.cpp", |
| "km_openssl/openssl_utils.cpp", |
| "km_openssl/rsa_key.cpp", |
| "km_openssl/rsa_key_factory.cpp", |
| "km_openssl/rsa_operation.cpp", |
| "km_openssl/software_random_source.cpp", |
| "km_openssl/symmetric_key.cpp", |
| "km_openssl/triple_des_key.cpp", |
| "km_openssl/triple_des_operation.cpp", |
| "km_openssl/wrapped_key.cpp", |
| ], |
| |
| shared_libs: [ |
| "libcrypto", |
| "libcppbor_external", |
| "libcppcose_rkp", |
| ], |
| export_shared_lib_headers: ["libcppbor_external"], |
| header_libs: ["libhardware_headers"], |
| export_header_lib_headers: ["libhardware_headers"], |
| defaults: ["keymaster_defaults" ], |
| host_supported: true, |
| export_include_dirs: ["include"], |
| target: { |
| host: { |
| clang_cflags: [ |
| "-fno-rtti", // TODO(b/156427382): Remove workaround when possible. |
| ], |
| }, |
| }, |
| } |
| |
| // libsoftkeymaster provides a software-based keymaster HAL implementation. |
| // This is used by keystore as a fallback for when the hardware keymaster does |
| // not support the request. |
| cc_library { |
| name: "libsoftkeymasterdevice", |
| srcs: [ |
| "android_keymaster/keymaster_configuration.cpp", |
| "contexts/pure_soft_keymaster_context.cpp", |
| "contexts/pure_soft_remote_provisioning_context.cpp", |
| "contexts/soft_attestation_context.cpp", |
| "contexts/soft_keymaster_context.cpp", |
| "contexts/soft_keymaster_device.cpp", |
| "contexts/soft_keymaster_logger.cpp", |
| "km_openssl/soft_keymaster_enforcement.cpp", |
| "legacy_support/ec_keymaster1_key.cpp", |
| "legacy_support/ecdsa_keymaster1_operation.cpp", |
| "legacy_support/keymaster1_engine.cpp", |
| "legacy_support/keymaster1_legacy_support.cpp", |
| "legacy_support/rsa_keymaster1_key.cpp", |
| "legacy_support/rsa_keymaster1_operation.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| shared_libs: [ |
| "libkeymaster_messages", |
| "libkeymaster_portable", |
| "libsoft_attestation_cert", |
| "liblog", |
| "libbase", |
| "libcppbor_external", |
| "libcppcose_rkp", |
| "libcrypto", |
| "libcutils", |
| ], |
| export_include_dirs: ["include"], |
| } |
| |
| cc_library { |
| name: "libsoft_attestation_cert", |
| srcs: [ |
| "contexts/soft_attestation_cert.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| shared_libs: [ |
| "libkeymaster_portable", |
| ], |
| |
| host_supported: true, |
| export_include_dirs: ["include"], |
| } |
| |
| cc_library { |
| name: "libpuresoftkeymasterdevice", |
| srcs: [ |
| "android_keymaster/keymaster_configuration.cpp", |
| "contexts/soft_attestation_context.cpp", |
| "contexts/pure_soft_keymaster_context.cpp", |
| "contexts/pure_soft_remote_provisioning_context.cpp", |
| "contexts/soft_keymaster_logger.cpp", |
| "km_openssl/soft_keymaster_enforcement.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| shared_libs: [ |
| "libkeymaster_messages", |
| "libkeymaster_portable", |
| "libsoft_attestation_cert", |
| "liblog", |
| "libcppbor_external", |
| "libcppcose_rkp", |
| "libcrypto", |
| "libcutils", |
| "libbase", |
| ], |
| export_include_dirs: ["include"], |
| } |
| |
| cc_library { |
| name: "libpuresoftkeymasterdevice_host", |
| srcs: [ |
| "contexts/pure_soft_keymaster_context.cpp", |
| "contexts/pure_soft_remote_provisioning_context.cpp", |
| "contexts/soft_attestation_context.cpp", |
| "contexts/soft_keymaster_logger.cpp", |
| "km_openssl/soft_keymaster_enforcement.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| host_supported: true, |
| device_supported: false, |
| shared_libs: [ |
| "libkeymaster_messages", |
| "libkeymaster_portable", |
| "libsoft_attestation_cert", |
| "liblog", |
| "libcppbor_external", |
| "libcppcose_rkp", |
| "libcrypto", |
| "libcutils", |
| "libbase", |
| ], |
| clang_cflags: [ |
| "-DKEYMASTER_NAME_TAGS", |
| "-fno-rtti", // TODO(b/156427382): Remove workaround when possible. |
| ], |
| export_include_dirs: ["include"], |
| } |
| |
| cc_library_shared { |
| name: "libkeymaster3device", |
| srcs: [ |
| "legacy_support/keymaster_passthrough_key.cpp", |
| "legacy_support/keymaster_passthrough_engine.cpp", |
| "legacy_support/keymaster_passthrough_operation.cpp", |
| "contexts/keymaster1_passthrough_context.cpp", |
| "contexts/keymaster2_passthrough_context.cpp", |
| "ng/AndroidKeymaster3Device.cpp", |
| "android_keymaster/keymaster_configuration.cpp", |
| "legacy_support/ec_keymaster1_key.cpp", |
| "legacy_support/ecdsa_keymaster1_operation.cpp", |
| "legacy_support/keymaster1_engine.cpp", |
| "legacy_support/keymaster1_legacy_support.cpp", |
| "legacy_support/rsa_keymaster1_key.cpp", |
| "legacy_support/rsa_keymaster1_operation.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| shared_libs: [ |
| "libkeymaster_messages", |
| "android.hardware.keymaster@3.0", |
| "libcrypto", |
| "libcutils", |
| "libbase", |
| "libhidlbase", |
| "libkeymaster_portable", |
| "liblog", |
| "libpuresoftkeymasterdevice", |
| "libsoft_attestation_cert", |
| "libutils", |
| ], |
| export_include_dirs: ["include", "ng/include"], |
| } |
| |
| cc_library_shared { |
| name: "libkeymaster4", |
| srcs: [ |
| "legacy_support/keymaster_passthrough_key.cpp", |
| "legacy_support/keymaster_passthrough_engine.cpp", |
| "legacy_support/keymaster_passthrough_operation.cpp", |
| "ng/AndroidKeymaster4Device.cpp", |
| "android_keymaster/keymaster_configuration.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| shared_libs: [ |
| "libkeymaster_messages", |
| "android.hardware.keymaster@4.0", |
| "libcrypto", |
| "libcutils", |
| "libbase", |
| "libhidlbase", |
| "libkeymaster_portable", |
| "libpuresoftkeymasterdevice", |
| "liblog", |
| "libutils", |
| "libkeymaster4support", |
| ], |
| export_include_dirs: [ |
| "ng/include", |
| "include" |
| ], |
| } |
| |
| cc_library_shared { |
| name: "libkeymaster41", |
| vendor_available: true, |
| srcs: [ |
| "ng/AndroidKeymaster41Device.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| shared_libs: [ |
| "android.hardware.keymaster@4.0", |
| "android.hardware.keymaster@4.1", |
| "libbase", |
| "libcrypto", |
| "libcutils", |
| "libhidlbase", |
| "libkeymaster4", |
| "libkeymaster4_1support", |
| "libkeymaster4support", |
| "libkeymaster_messages", |
| "libkeymaster_portable", |
| "liblog", |
| "libpuresoftkeymasterdevice", |
| "libutils", |
| ], |
| export_include_dirs: ["ng/include"], |
| } |
| |
| cc_library { |
| name: "lib_android_keymaster_keymint_utils", |
| vendor_available: true, |
| srcs: [ |
| "ng/KeyMintUtils.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| shared_libs: [ |
| "android.hardware.security.keymint-V1-ndk", |
| "libbase", |
| "libhardware", |
| ], |
| export_include_dirs: [ |
| "ng/include", |
| "include", |
| ], |
| } |
| |
| cc_library { |
| name: "libkeymint", |
| vendor_available: true, |
| srcs: [ |
| "android_keymaster/keymaster_configuration.cpp", |
| "legacy_support/keymaster_passthrough_engine.cpp", |
| "legacy_support/keymaster_passthrough_key.cpp", |
| "legacy_support/keymaster_passthrough_operation.cpp", |
| "ng/AndroidKeyMintDevice.cpp", |
| "ng/AndroidKeyMintOperation.cpp", |
| "ng/AndroidRemotelyProvisionedComponentDevice.cpp", |
| "ng/AndroidSharedSecret.cpp", |
| "ng/AndroidSecureClock.cpp", |
| ], |
| defaults: ["keymaster_defaults"], |
| shared_libs: [ |
| "libhidlbase", |
| "android.hardware.security.keymint-V1-ndk", |
| "android.hardware.security.secureclock-V1-ndk", |
| "android.hardware.security.sharedsecret-V1-ndk", |
| "lib_android_keymaster_keymint_utils", |
| "libbase", |
| "libbinder_ndk", |
| "libcppbor_external", |
| "libcrypto", |
| "libcutils", |
| "libkeymaster_messages", |
| "libkeymaster_portable", |
| "liblog", |
| "libpuresoftkeymasterdevice", |
| "libutils", |
| ], |
| export_include_dirs: ["include", "ng/include"], |
| } |
| |
| cc_library { |
| name: "libcppcose_rkp", |
| vendor_available: true, |
| host_supported: true, |
| srcs: [ |
| "cppcose/cppcose.cpp", |
| ], |
| export_include_dirs: [ |
| "include", |
| ], |
| shared_libs: [ |
| "libcppbor_external", |
| "libcrypto", |
| "liblog", |
| ], |
| } |
| |
| cc_defaults { |
| name: "keymaster_fuzz_defaults", |
| header_libs: ["libhardware_headers"], |
| shared_libs: [ |
| "libkeymaster_messages", |
| ], |
| // Not using defaults because the fuzzer relies on sanitizers that are explicitly disabled there. |
| cflags: [ |
| "-Wall", |
| "-Werror", |
| "-Wunused", |
| "-Wno-error=unused-const-variable", |
| "-Wno-error=unused-private-field", |
| "-Wimplicit-fallthrough", |
| "-DKEYMASTER_NAME_TAGS", |
| ], |
| host_supported: true, |
| target: { |
| host: { |
| clang_cflags: [ |
| "-fno-rtti", // TODO(b/156427382): Remove when default library removes this |
| ], |
| }, |
| }, |
| } |
| |
| cc_fuzz { |
| name: "libkeymaster_fuzz_buffer", |
| defaults: ["keymaster_fuzz_defaults"], |
| srcs: [ |
| "tests/fuzzers/buffer_fuzz.cpp", |
| ], |
| } |
| |
| cc_fuzz { |
| name: "libkeymaster_fuzz_serializable", |
| defaults: ["keymaster_fuzz_defaults"], |
| srcs: [ |
| "tests/fuzzers/message_serializable_fuzz.cpp", |
| ], |
| } |