123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 |
- #####
- # Local unit test Makefile
- #
- # This makefile builds and runs the keymaster unit tests locally on the development
- # machine, not on an Android device. Android.mk builds the same tests into the
- # "keymaster_tests" binary for execution on-device, but this Makefile runs them locally,
- # for a very fast edit/build/test development cycle.
- #
- # To build and run these tests, one pre-requisite must be manually installed: BoringSSL.
- # This Makefile expects to find BoringSSL in a directory adjacent to $ANDROID_BUILD_TOP.
- # To get and build it, first install the Ninja build tool (e.g. apt-get install
- # ninja-build), then do:
- #
- # cd $ANDROID_BUILD_TOP/..
- # git clone https://boringssl.googlesource.com/boringssl
- # cd boringssl
- # mdkir build
- # cd build
- # cmake -GNinja ..
- # ninja
- #
- # Then return to $ANDROID_BUILD_TOP/system/keymaster and run "make".
- #####
- BASE=../..
- SUBS=system/core \
- hardware/libhardware \
- external/gtest \
- system/security/softkeymaster \
- system/security/keystore
- GTEST=$(BASE)/external/googletest/googletest
- INCLUDES=$(foreach dir,$(SUBS),-I $(BASE)/$(dir)/include) \
- -I $(BASE)/libnativehelper/include/nativehelper \
- -I $(GTEST)/include -isystem $(GTEST) -Iinclude -I$(BASE)/../boringssl/include
- ifdef FORCE_32_BIT
- ARCH_FLAGS = -m32
- endif
- ifdef USE_GCC
- CXXFLAGS +=-std=c++14 -fprofile-arcs -ftest-coverage
- CFLAGS += -fprofile-arcs -ftest-coverage
- else
- CC=$(BASE)/prebuilts/clang/host/linux-x86/clang-r339409b/bin/clang
- CXX=$(BASE)/prebuilts/clang/host/linux-x86/clang-r339409b/bin/clang++
- CXXFLAGS +=-std=c++14 -DKEYMASTER_CLANG_TEST_BUILD
- CFLAGS += -DKEYMASTER_CLANG_TEST_BUILD
- endif
- LDFLAGS += $(ARCH_FLAGS)
- CPPFLAGS = $(INCLUDES) -g -O0 -MD -MP $(ARCH_FLAGS) -DKEYMASTER_UNIT_TEST_BUILD -DHOST_BUILD
- CXXFLAGS += -Wall -Werror -Wno-unused -Winit-self -Wpointer-arith -Wunused-parameter \
- -Werror=sign-compare -Werror=return-type -fno-permissive \
- -Wno-deprecated-declarations -fno-exceptions -DKEYMASTER_NAME_TAGS $(ARCH_FLAGS)
- CFLAGS += $(ARCH_FLAGS) -DKEYMASTER_UNIT_TEST_BUILD -DHOST_BUILD
- # Uncomment to enable debug logging.
- # CXXFLAGS += -DDEBUG
- LDLIBS=-L$(BASE)/../boringssl/build/crypto -lcrypto -lpthread -lstdc++ -lgcov
- CPPSRCS=\
- km_openssl/aes_key.cpp \
- km_openssl/aes_operation.cpp \
- km_openssl/triple_des_key.cpp \
- km_openssl/triple_des_operation.cpp \
- android_keymaster/android_keymaster.cpp \
- android_keymaster/android_keymaster_messages.cpp \
- tests/android_keymaster_messages_test.cpp \
- tests/android_keymaster_test.cpp \
- tests/android_keymaster_test_utils.cpp \
- android_keymaster/android_keymaster_utils.cpp \
- km_openssl/asymmetric_key.cpp \
- km_openssl/asymmetric_key_factory.cpp \
- km_openssl/attestation_record.cpp \
- km_openssl/block_cipher_operation.cpp \
- tests/attestation_record_test.cpp \
- key_blob_utils/auth_encrypted_key_blob.cpp \
- android_keymaster/authorization_set.cpp \
- tests/authorization_set_test.cpp \
- km_openssl/ec_key.cpp \
- km_openssl/ec_key_factory.cpp \
- legacy_support/ec_keymaster0_key.cpp \
- legacy_support/ec_keymaster1_key.cpp \
- legacy_support/ecdsa_keymaster1_operation.cpp \
- km_openssl/ecdsa_operation.cpp \
- km_openssl/ecies_kem.cpp \
- tests/ecies_kem_test.cpp \
- tests/gtest_main.cpp \
- km_openssl/ckdf.cpp \
- tests/hkdf_test.cpp \
- km_openssl/hkdf.cpp \
- tests/hkdf_test.cpp \
- km_openssl/hmac.cpp \
- km_openssl/hmac_key.cpp \
- km_openssl/hmac_operation.cpp \
- tests/hmac_test.cpp \
- key_blob_utils/integrity_assured_key_blob.cpp \
- km_openssl/iso18033kdf.cpp \
- km_openssl/kdf.cpp \
- tests/kdf1_test.cpp \
- tests/kdf2_test.cpp \
- tests/kdf_test.cpp \
- tests/key_blob_test.cpp \
- legacy_support/keymaster0_engine.cpp \
- legacy_support/keymaster1_engine.cpp \
- android_keymaster/keymaster_configuration.cpp \
- tests/keymaster_configuration_test.cpp \
- android_keymaster/keymaster_enforcement.cpp \
- km_openssl/soft_keymaster_enforcement.cpp \
- tests/keymaster_enforcement_test.cpp \
- android_keymaster/keymaster_tags.cpp \
- android_keymaster/logger.cpp \
- km_openssl/nist_curve_key_exchange.cpp \
- tests/nist_curve_key_exchange_test.cpp \
- key_blob_utils/ocb_utils.cpp \
- km_openssl/openssl_err.cpp \
- km_openssl/openssl_utils.cpp \
- android_keymaster/operation.cpp \
- android_keymaster/operation_table.cpp \
- km_openssl/rsa_key.cpp \
- km_openssl/rsa_key_factory.cpp \
- legacy_support/rsa_keymaster0_key.cpp \
- legacy_support/rsa_keymaster1_key.cpp \
- legacy_support/rsa_keymaster1_operation.cpp \
- km_openssl/rsa_operation.cpp \
- android_keymaster/serializable.cpp \
- contexts/soft_keymaster_context.cpp \
- contexts/soft_keymaster_device.cpp \
- contexts/pure_soft_keymaster_context.cpp \
- km_openssl/symmetric_key.cpp \
- km_openssl/software_random_source.cpp \
- contexts/soft_attestation_cert.cpp \
- km_openssl/attestation_utils.cpp \
- key_blob_utils/software_keyblobs.cpp \
- km_openssl/wrapped_key.cpp
- CCSRCS=$(GTEST)/src/gtest-all.cc
- CSRCS=key_blob_utils/ocb.c
- OBJS=$(CPPSRCS:.cpp=.o) $(CCSRCS:.cc=.o) $(CSRCS:.c=.o)
- DEPS=$(CPPSRCS:.cpp=.d) $(CCSRCS:.cc=.d) $(CSRCS:.c=.d)
- BINARIES = \
- tests/android_keymaster_messages_test \
- tests/android_keymaster_test \
- tests/attestation_record_test \
- tests/authorization_set_test \
- tests/ecies_kem_test \
- tests/ckdf_test \
- tests/hkdf_test \
- tests/hmac_test \
- tests/kdf1_test \
- tests/kdf2_test \
- tests/kdf_test \
- tests/key_blob_test \
- tests/keymaster_configuration_test \
- tests/keymaster_enforcement_test \
- tests/nist_curve_key_exchange_test
- .PHONY: coverage memcheck massif clean run
- %.run: %
- ./$<
- touch $@
- run: $(BINARIES:=.run)
- coverage: coverage.info
- genhtml coverage.info --output-directory coverage
- coverage.info: run
- lcov --capture --directory=. --output-file coverage.info
- %.coverage : %
- $(MAKE) clean && $(MAKE) $<
- ./$<
- lcov --capture --directory=. --output-file coverage.info
- genhtml coverage.info --output-directory coverage
- #UNINIT_OPTS=--track-origins=yes
- UNINIT_OPTS=--undef-value-errors=no
- MEMCHECK_OPTS=--leak-check=full \
- --show-reachable=yes \
- --vgdb=full \
- $(UNINIT_OPTS) \
- --error-exitcode=1 \
- --suppressions=valgrind.supp \
- --gen-suppressions=all
- MASSIF_OPTS=--tool=massif \
- --stacks=yes
- %.memcheck : %
- valgrind $(MEMCHECK_OPTS) ./$< && \
- touch $@
- %.massif : %
- valgrind $(MASSIF_OPTS) --massif-out-file=$@ ./$<
- memcheck: $(BINARIES:=.memcheck)
- massif: $(BINARIES:=.massif)
- GTEST_OBJS = $(GTEST)/src/gtest-all.o tests/gtest_main.o
- tests/keymaster_configuration_test: tests/keymaster_configuration_test.o \
- android_keymaster/authorization_set.o \
- android_keymaster/serializable.o \
- android_keymaster/logger.o \
- android_keymaster/keymaster_configuration.o \
- $(GTEST_OBJS)
- tests/hmac_test: tests/hmac_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- android_keymaster/authorization_set.o \
- km_openssl/hmac.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/ckdf_test: tests/ckdf_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- android_keymaster/authorization_set.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- km_openssl/ckdf.o \
- km_openssl/openssl_err.o \
- $(GTEST_OBJS)
- tests/hkdf_test: tests/hkdf_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- android_keymaster/authorization_set.o \
- km_openssl/hkdf.o \
- km_openssl/hmac.o \
- km_openssl/kdf.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/kdf_test: tests/kdf_test.o \
- android_keymaster/android_keymaster_utils.o \
- km_openssl/kdf.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/kdf1_test: tests/kdf1_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- android_keymaster/authorization_set.o \
- km_openssl/iso18033kdf.o \
- km_openssl/kdf.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/kdf2_test: tests/kdf2_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- android_keymaster/authorization_set.o \
- km_openssl/iso18033kdf.o \
- km_openssl/kdf.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/nist_curve_key_exchange_test: tests/nist_curve_key_exchange_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/authorization_set.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- km_openssl/nist_curve_key_exchange.o \
- km_openssl/openssl_err.o \
- km_openssl/openssl_utils.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/ecies_kem_test: tests/ecies_kem_test.o \
- android_keymaster/android_keymaster_utils.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/authorization_set.o \
- km_openssl/ecies_kem.o \
- km_openssl/hkdf.o \
- km_openssl/hmac.o \
- km_openssl/kdf.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- km_openssl/nist_curve_key_exchange.o \
- km_openssl/openssl_err.o \
- km_openssl/openssl_utils.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/authorization_set_test: tests/authorization_set_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/authorization_set.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/key_blob_test: tests/key_blob_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- key_blob_utils/auth_encrypted_key_blob.o \
- android_keymaster/authorization_set.o \
- key_blob_utils/integrity_assured_key_blob.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- key_blob_utils/ocb.o \
- key_blob_utils/ocb_utils.o \
- km_openssl/openssl_err.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/android_keymaster_messages_test: tests/android_keymaster_messages_test.o \
- android_keymaster/android_keymaster_messages.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- android_keymaster/authorization_set.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/android_keymaster_test: tests/android_keymaster_test.o \
- android_keymaster/android_keymaster.o \
- android_keymaster/android_keymaster_messages.o \
- android_keymaster/android_keymaster_utils.o \
- android_keymaster/authorization_set.o \
- android_keymaster/keymaster_enforcement.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/operation.o \
- android_keymaster/operation_table.o \
- android_keymaster/serializable.o \
- contexts/pure_soft_keymaster_context.o \
- contexts/soft_attestation_cert.o \
- contexts/soft_keymaster_context.o \
- contexts/soft_keymaster_device.o \
- key_blob_utils/auth_encrypted_key_blob.o \
- key_blob_utils/integrity_assured_key_blob.o \
- key_blob_utils/ocb.o \
- key_blob_utils/ocb_utils.o \
- key_blob_utils/software_keyblobs.o \
- km_openssl/aes_key.o \
- km_openssl/aes_key.o \
- km_openssl/aes_operation.o \
- km_openssl/aes_operation.o \
- km_openssl/asymmetric_key.o \
- km_openssl/asymmetric_key_factory.o \
- km_openssl/attestation_record.o \
- km_openssl/attestation_utils.o \
- km_openssl/block_cipher_operation.o \
- km_openssl/ckdf.o \
- km_openssl/ec_key.o \
- km_openssl/ec_key_factory.o \
- km_openssl/ecdsa_operation.o \
- km_openssl/hmac_key.o \
- km_openssl/hmac_operation.o \
- km_openssl/openssl_err.o \
- km_openssl/openssl_utils.o \
- km_openssl/rsa_key.o \
- km_openssl/rsa_key_factory.o \
- km_openssl/rsa_operation.o \
- km_openssl/soft_keymaster_enforcement.o \
- km_openssl/software_random_source.o \
- km_openssl/symmetric_key.o \
- km_openssl/triple_des_key.o \
- km_openssl/triple_des_operation.o \
- km_openssl/wrapped_key.o \
- legacy_support/ec_keymaster0_key.o \
- legacy_support/ec_keymaster1_key.o \
- legacy_support/ecdsa_keymaster1_operation.o \
- legacy_support/keymaster0_engine.o \
- legacy_support/keymaster1_engine.o \
- legacy_support/rsa_keymaster0_key.o \
- legacy_support/rsa_keymaster1_key.o \
- legacy_support/rsa_keymaster1_operation.o \
- tests/android_keymaster_test_utils.o \
- $(BASE)/system/security/keystore/keyblob_utils.o \
- $(GTEST_OBJS)
- tests/keymaster_enforcement_test: tests/keymaster_enforcement_test.o \
- android_keymaster/android_keymaster_messages.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- android_keymaster/authorization_set.o \
- android_keymaster/keymaster_enforcement.o \
- km_openssl/ckdf.o \
- km_openssl/openssl_err.o \
- km_openssl/soft_keymaster_enforcement.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/attestation_record_test: tests/attestation_record_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- km_openssl/attestation_record.o \
- android_keymaster/authorization_set.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- km_openssl/openssl_err.o \
- android_keymaster/serializable.o \
- $(GTEST_OBJS)
- tests/wrapped_key_test: tests/wrapped_key_test.o \
- tests/android_keymaster_test_utils.o \
- android_keymaster/android_keymaster_utils.o \
- km_openssl/attestation_record.o \
- android_keymaster/authorization_set.o \
- android_keymaster/keymaster_tags.o \
- android_keymaster/logger.o \
- km_openssl/openssl_err.o \
- android_keymaster/serializable.o \
- km_openssl/wrapped_key.o \
- $(GTEST_OBJS)
- $(GTEST)/src/gtest-all.o: CXXFLAGS:=$(subst -Wmissing-declarations,,$(CXXFLAGS))
- clean:
- rm -f $(OBJS) $(DEPS) $(BINARIES) \
- $(BINARIES:=.run) $(BINARIES:=.memcheck) $(BINARIES:=.massif) \
- *gcov *gcno *gcda coverage.info
- rm -rf coverage
- -include $(CPPSRCS:.cpp=.d)
- -include $(CCSRCS:.cc=.d)
|