# 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. LOCAL_PATH := $(call my-dir) ### # libkeymaster_messages contains just the code necessary to communicate with a # AndroidKeymaster implementation, e.g. one running in TrustZone. ## include $(CLEAR_VARS) LOCAL_MODULE:= libkeymaster_messages LOCAL_SRC_FILES:= \ android_keymaster_messages.cpp \ android_keymaster_utils.cpp \ authorization_set.cpp \ keymaster_tags.cpp \ logger.cpp \ serializable.cpp LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/include LOCAL_CFLAGS = -Wall -Werror -Wunused -DKEYMASTER_NAME_TAGS LOCAL_CLANG := true # TODO(krasin): reenable coverage flags, when the new Clang toolchain is released. # Currently, if enabled, these flags will cause an internal error in Clang. LOCAL_CLANG_CFLAGS += -fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp LOCAL_MODULE_TAGS := optional LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk include $(BUILD_SHARED_LIBRARY) ### # libkeymaster1 contains almost everything needed for a keymaster1 # 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. ### include $(CLEAR_VARS) LOCAL_MODULE:= libkeymaster1 LOCAL_SRC_FILES:= \ aes_key.cpp \ aes_operation.cpp \ android_keymaster.cpp \ android_keymaster_messages.cpp \ android_keymaster_utils.cpp \ asymmetric_key.cpp \ asymmetric_key_factory.cpp \ attestation_record.cpp \ auth_encrypted_key_blob.cpp \ ec_key.cpp \ ec_key_factory.cpp \ ecdsa_operation.cpp \ ecies_kem.cpp \ hkdf.cpp \ hmac.cpp \ hmac_key.cpp \ hmac_operation.cpp \ integrity_assured_key_blob.cpp \ iso18033kdf.cpp \ kdf.cpp \ key.cpp \ keymaster_enforcement.cpp \ nist_curve_key_exchange.cpp \ ocb.c \ ocb_utils.cpp \ openssl_err.cpp \ openssl_utils.cpp \ operation.cpp \ operation_table.cpp \ rsa_key.cpp \ rsa_key_factory.cpp \ rsa_operation.cpp \ symmetric_key.cpp LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/include LOCAL_SHARED_LIBRARIES := libcrypto libkeymaster_messages LOCAL_CFLAGS = -Wall -Werror -Wunused LOCAL_CLANG := true LOCAL_CLANG_CFLAGS += -Wno-error=unused-const-variable -Wno-error=unused-private-field # TODO(krasin): reenable coverage flags, when the new Clang toolchain is released. # Currently, if enabled, these flags will cause an internal error in Clang. LOCAL_CLANG_CFLAGS += -fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp # Ignore benign warnings for now. LOCAL_CLANG_CFLAGS += -Wno-error=unused-private-field LOCAL_MODULE_TAGS := optional LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk include $(BUILD_SHARED_LIBRARY) ### # 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. ### include $(CLEAR_VARS) LOCAL_MODULE := libsoftkeymasterdevice LOCAL_SRC_FILES := \ ec_keymaster0_key.cpp \ ec_keymaster1_key.cpp \ ecdsa_keymaster1_operation.cpp \ keymaster0_engine.cpp \ keymaster1_engine.cpp \ keymaster_configuration.cpp \ rsa_keymaster0_key.cpp \ rsa_keymaster1_key.cpp \ rsa_keymaster1_operation.cpp \ soft_keymaster_context.cpp \ soft_keymaster_device.cpp \ soft_keymaster_logger.cpp LOCAL_C_INCLUDES := \ system/security/keystore \ $(LOCAL_PATH)/include LOCAL_CFLAGS = -Wall -Werror -Wunused LOCAL_CLANG := true LOCAL_CLANG_CFLAGS += -Wno-error=unused-const-variable -Wno-error=unused-private-field # TODO(krasin): reenable coverage flags, when the new Clang toolchain is released. # Currently, if enabled, these flags will cause an internal error in Clang. LOCAL_CLANG_CFLAGS += -fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp LOCAL_SHARED_LIBRARIES := libkeymaster_messages libkeymaster1 liblog libcrypto libcutils LOCAL_MODULE_TAGS := optional LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include include $(BUILD_SHARED_LIBRARY) ### # libkeymasterfiles is an empty library that exports all of the files in keymaster as includes. ### include $(CLEAR_VARS) LOCAL_MODULE := libkeymasterfiles LOCAL_EXPORT_C_INCLUDE_DIRS := \ $(LOCAL_PATH) \ $(LOCAL_PATH)/include LOCAL_MODULE_TAGS := optional LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk include $(BUILD_STATIC_LIBRARY) # Unit tests for libkeymaster include $(CLEAR_VARS) LOCAL_MODULE := keymaster_tests LOCAL_SRC_FILES := \ android_keymaster_messages_test.cpp \ android_keymaster_test.cpp \ android_keymaster_test_utils.cpp \ attestation_record_test.cpp \ authorization_set_test.cpp \ hkdf_test.cpp \ hmac_test.cpp \ kdf1_test.cpp \ kdf2_test.cpp \ kdf_test.cpp \ key_blob_test.cpp \ keymaster_enforcement_test.cpp LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/include LOCAL_CFLAGS = -Wall -Werror -Wunused -DKEYMASTER_NAME_TAGS LOCAL_CLANG := true LOCAL_CLANG_CFLAGS += -Wno-error=unused-const-variable -Wno-error=unused-private-field # TODO(krasin): reenable coverage flags, when the new Clang toolchain is released. # Currently, if enabled, these flags will cause an internal error in Clang. LOCAL_CLANG_CFLAGS += -fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp LOCAL_MODULE_TAGS := tests LOCAL_SHARED_LIBRARIES := \ libsoftkeymasterdevice \ libkeymaster_messages \ libkeymaster1 \ libcrypto \ libsoftkeymaster LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk include $(BUILD_NATIVE_TEST)