Home | History | Annotate | Download | only in keymaster
      1 #####
      2 # Local unit test Makefile
      3 #
      4 # This makefile builds and runs the keymaster unit tests locally on the development
      5 # machine, not on an Android device.  Android.mk builds the same tests into the
      6 # "keymaster_tests" binary for execution on-device, but this Makefile runs them locally,
      7 # for a very fast edit/build/test development cycle.
      8 #
      9 # To build and run these tests, one pre-requisite must be manually installed: BoringSSL.
     10 # This Makefile expects to find BoringSSL in a directory adjacent to $ANDROID_BUILD_TOP.
     11 # To get and build it, first install the Ninja build tool (e.g. apt-get install
     12 # ninja-build), then do:
     13 #
     14 # cd $ANDROID_BUILD_TOP/..
     15 # git clone https://boringssl.googlesource.com/boringssl
     16 # cd boringssl
     17 # mdkir build
     18 # cd build
     19 # cmake -GNinja ..
     20 # ninja
     21 #
     22 # Then return to $ANDROID_BUILD_TOP/system/keymaster and run "make".
     23 #####
     24 
     25 BASE=../..
     26 SUBS=system/core \
     27 	hardware/libhardware \
     28 	external/gtest \
     29 	system/security/softkeymaster \
     30 	system/security/keystore
     31 GTEST=$(BASE)/external/googletest/googletest
     32 
     33 INCLUDES=$(foreach dir,$(SUBS),-I $(BASE)/$(dir)/include) \
     34 	-I $(BASE)/libnativehelper/include/nativehelper \
     35 	-I $(GTEST)/include -isystem $(GTEST) -Iinclude -I$(BASE)/../boringssl/include
     36 
     37 ifdef FORCE_32_BIT
     38 ARCH_FLAGS = -m32
     39 endif
     40 
     41 ifdef USE_GCC
     42 CXXFLAGS +=-std=c++14 -fprofile-arcs -ftest-coverage
     43 CFLAGS += -fprofile-arcs -ftest-coverage
     44 else
     45 CC=$(BASE)/prebuilts/clang/host/linux-x86/clang-4053586/bin/clang
     46 CXX=$(BASE)/prebuilts/clang/host/linux-x86/clang-4053586/bin/clang++
     47 CXXFLAGS +=-std=c++14 -DKEYMASTER_CLANG_TEST_BUILD
     48 CFLAGS += -DKEYMASTER_CLANG_TEST_BUILD
     49 endif
     50 
     51 LDFLAGS += $(ARCH_FLAGS)
     52 CPPFLAGS = $(INCLUDES) -g -O0 -MD -MP $(ARCH_FLAGS) -DKEYMASTER_UNIT_TEST_BUILD -DHOST_BUILD
     53 CXXFLAGS += -Wall -Werror -Wno-unused -Winit-self -Wpointer-arith -Wunused-parameter \
     54 	-Werror=sign-compare -Werror=return-type -fno-permissive \
     55 	-Wno-deprecated-declarations -fno-exceptions -DKEYMASTER_NAME_TAGS $(ARCH_FLAGS)
     56 CFLAGS += $(ARCH_FLAGS) -DKEYMASTER_UNIT_TEST_BUILD -DHOST_BUILD
     57 
     58 # Uncomment to enable debug logging.
     59 # CXXFLAGS += -DDEBUG
     60 
     61 LDLIBS=-L$(BASE)/../boringssl/build/crypto -lcrypto -lpthread -lstdc++ -lgcov
     62 
     63 CPPSRCS=\
     64 	km_openssl/aes_key.cpp \
     65 	km_openssl/aes_operation.cpp \
     66 	km_openssl/triple_des_key.cpp \
     67 	km_openssl/triple_des_operation.cpp \
     68 	android_keymaster/android_keymaster.cpp \
     69 	android_keymaster/android_keymaster_messages.cpp \
     70 	tests/android_keymaster_messages_test.cpp \
     71 	tests/android_keymaster_test.cpp \
     72 	tests/android_keymaster_test_utils.cpp \
     73 	android_keymaster/android_keymaster_utils.cpp \
     74 	km_openssl/asymmetric_key.cpp \
     75 	km_openssl/asymmetric_key_factory.cpp \
     76 	km_openssl/attestation_record.cpp \
     77 	km_openssl/block_cipher_operation.cpp \
     78 	tests/attestation_record_test.cpp \
     79 	key_blob_utils/auth_encrypted_key_blob.cpp \
     80 	android_keymaster/authorization_set.cpp \
     81 	tests/authorization_set_test.cpp \
     82 	km_openssl/ec_key.cpp \
     83 	km_openssl/ec_key_factory.cpp \
     84 	legacy_support/ec_keymaster0_key.cpp \
     85 	legacy_support/ec_keymaster1_key.cpp \
     86 	legacy_support/ecdsa_keymaster1_operation.cpp \
     87 	km_openssl/ecdsa_operation.cpp \
     88 	km_openssl/ecies_kem.cpp \
     89 	tests/ecies_kem_test.cpp \
     90 	tests/gtest_main.cpp \
     91 	km_openssl/ckdf.cpp \
     92 	tests/hkdf_test.cpp \
     93 	km_openssl/hkdf.cpp \
     94 	tests/hkdf_test.cpp \
     95 	km_openssl/hmac.cpp \
     96 	km_openssl/hmac_key.cpp \
     97 	km_openssl/hmac_operation.cpp \
     98 	tests/hmac_test.cpp \
     99 	key_blob_utils/integrity_assured_key_blob.cpp \
    100 	km_openssl/iso18033kdf.cpp \
    101 	km_openssl/kdf.cpp \
    102 	tests/kdf1_test.cpp \
    103 	tests/kdf2_test.cpp \
    104 	tests/kdf_test.cpp \
    105 	tests/key_blob_test.cpp \
    106 	legacy_support/keymaster0_engine.cpp \
    107 	legacy_support/keymaster1_engine.cpp \
    108 	android_keymaster/keymaster_configuration.cpp \
    109 	tests/keymaster_configuration_test.cpp \
    110 	android_keymaster/keymaster_enforcement.cpp \
    111 	km_openssl/soft_keymaster_enforcement.cpp \
    112 	tests/keymaster_enforcement_test.cpp \
    113 	android_keymaster/keymaster_tags.cpp \
    114 	android_keymaster/logger.cpp \
    115 	km_openssl/nist_curve_key_exchange.cpp \
    116 	tests/nist_curve_key_exchange_test.cpp \
    117 	key_blob_utils/ocb_utils.cpp \
    118 	km_openssl/openssl_err.cpp \
    119 	km_openssl/openssl_utils.cpp \
    120 	android_keymaster/operation.cpp \
    121 	android_keymaster/operation_table.cpp \
    122 	km_openssl/rsa_key.cpp \
    123 	km_openssl/rsa_key_factory.cpp \
    124 	legacy_support/rsa_keymaster0_key.cpp \
    125 	legacy_support/rsa_keymaster1_key.cpp \
    126 	legacy_support/rsa_keymaster1_operation.cpp \
    127 	km_openssl/rsa_operation.cpp \
    128 	android_keymaster/serializable.cpp \
    129 	contexts/soft_keymaster_context.cpp \
    130 	contexts/soft_keymaster_device.cpp \
    131 	contexts/pure_soft_keymaster_context.cpp \
    132 	km_openssl/symmetric_key.cpp \
    133 	km_openssl/software_random_source.cpp \
    134 	contexts/soft_attestation_cert.cpp \
    135 	km_openssl/attestation_utils.cpp \
    136 	key_blob_utils/software_keyblobs.cpp \
    137 	km_openssl/wrapped_key.cpp
    138 
    139 CCSRCS=$(GTEST)/src/gtest-all.cc
    140 CSRCS=key_blob_utils/ocb.c
    141 
    142 OBJS=$(CPPSRCS:.cpp=.o) $(CCSRCS:.cc=.o) $(CSRCS:.c=.o)
    143 DEPS=$(CPPSRCS:.cpp=.d) $(CCSRCS:.cc=.d) $(CSRCS:.c=.d)
    144 
    145 BINARIES = \
    146 	tests/android_keymaster_messages_test \
    147 	tests/android_keymaster_test \
    148 	tests/attestation_record_test \
    149 	tests/authorization_set_test \
    150 	tests/ecies_kem_test \
    151 	tests/ckdf_test \
    152 	tests/hkdf_test \
    153 	tests/hmac_test \
    154 	tests/kdf1_test \
    155 	tests/kdf2_test \
    156 	tests/kdf_test \
    157 	tests/key_blob_test \
    158 	tests/keymaster_configuration_test \
    159 	tests/keymaster_enforcement_test \
    160 	tests/nist_curve_key_exchange_test
    161 
    162 .PHONY: coverage memcheck massif clean run
    163 
    164 %.run: %
    165 	./$<
    166 	touch $@
    167 
    168 run: $(BINARIES:=.run)
    169 
    170 coverage: coverage.info
    171 	genhtml coverage.info --output-directory coverage
    172 
    173 coverage.info: run
    174 	lcov --capture --directory=. --output-file coverage.info
    175 
    176 %.coverage : %
    177 	$(MAKE) clean && $(MAKE) $<
    178 	./$<
    179 	lcov --capture --directory=. --output-file coverage.info
    180 	genhtml coverage.info --output-directory coverage
    181 
    182 #UNINIT_OPTS=--track-origins=yes
    183 UNINIT_OPTS=--undef-value-errors=no
    184 
    185 MEMCHECK_OPTS=--leak-check=full \
    186 	--show-reachable=yes \
    187 	--vgdb=full \
    188 	$(UNINIT_OPTS) \
    189 	--error-exitcode=1 \
    190 	--suppressions=valgrind.supp \
    191 	--gen-suppressions=all
    192 
    193 MASSIF_OPTS=--tool=massif \
    194 	--stacks=yes
    195 
    196 %.memcheck : %
    197 	valgrind $(MEMCHECK_OPTS) ./$< && \
    198 	touch $@
    199 
    200 %.massif : %
    201 	valgrind $(MASSIF_OPTS) --massif-out-file=$@ ./$<
    202 
    203 memcheck: $(BINARIES:=.memcheck)
    204 
    205 massif: $(BINARIES:=.massif)
    206 
    207 GTEST_OBJS = $(GTEST)/src/gtest-all.o tests/gtest_main.o
    208 
    209 tests/keymaster_configuration_test: tests/keymaster_configuration_test.o \
    210 	android_keymaster/authorization_set.o \
    211 	android_keymaster/serializable.o \
    212 	android_keymaster/logger.o \
    213 	android_keymaster/keymaster_configuration.o \
    214 	$(GTEST_OBJS)
    215 
    216 tests/hmac_test: tests/hmac_test.o \
    217 	tests/android_keymaster_test_utils.o \
    218 	android_keymaster/android_keymaster_utils.o \
    219 	android_keymaster/authorization_set.o \
    220 	km_openssl/hmac.o \
    221 	android_keymaster/keymaster_tags.o \
    222 	android_keymaster/logger.o \
    223 	android_keymaster/serializable.o \
    224 	$(GTEST_OBJS)
    225 
    226 tests/ckdf_test: tests/ckdf_test.o \
    227 	tests/android_keymaster_test_utils.o \
    228 	android_keymaster/android_keymaster_utils.o \
    229 	android_keymaster/authorization_set.o \
    230 	android_keymaster/keymaster_tags.o \
    231 	android_keymaster/logger.o \
    232 	android_keymaster/serializable.o \
    233 	km_openssl/ckdf.o \
    234 	km_openssl/openssl_err.o \
    235 	$(GTEST_OBJS)
    236 
    237 tests/hkdf_test: tests/hkdf_test.o \
    238 	tests/android_keymaster_test_utils.o \
    239 	android_keymaster/android_keymaster_utils.o \
    240 	android_keymaster/authorization_set.o \
    241 	km_openssl/hkdf.o \
    242 	km_openssl/hmac.o \
    243 	km_openssl/kdf.o \
    244 	android_keymaster/keymaster_tags.o \
    245 	android_keymaster/logger.o \
    246 	android_keymaster/serializable.o \
    247 	$(GTEST_OBJS)
    248 
    249 tests/kdf_test: tests/kdf_test.o \
    250 	android_keymaster/android_keymaster_utils.o \
    251 	km_openssl/kdf.o \
    252 	android_keymaster/logger.o \
    253 	android_keymaster/serializable.o \
    254 	$(GTEST_OBJS)
    255 
    256 tests/kdf1_test: tests/kdf1_test.o \
    257 	tests/android_keymaster_test_utils.o \
    258 	android_keymaster/android_keymaster_utils.o \
    259 	android_keymaster/authorization_set.o \
    260 	km_openssl/iso18033kdf.o \
    261 	km_openssl/kdf.o \
    262 	android_keymaster/keymaster_tags.o \
    263 	android_keymaster/logger.o \
    264 	android_keymaster/serializable.o \
    265 	$(GTEST_OBJS)
    266 
    267 tests/kdf2_test: tests/kdf2_test.o \
    268 	tests/android_keymaster_test_utils.o \
    269 	android_keymaster/android_keymaster_utils.o \
    270 	android_keymaster/authorization_set.o \
    271 	km_openssl/iso18033kdf.o \
    272 	km_openssl/kdf.o \
    273 	android_keymaster/keymaster_tags.o \
    274 	android_keymaster/logger.o \
    275 	android_keymaster/serializable.o \
    276 	$(GTEST_OBJS)
    277 
    278 tests/nist_curve_key_exchange_test: tests/nist_curve_key_exchange_test.o \
    279 	tests/android_keymaster_test_utils.o \
    280 	android_keymaster/authorization_set.o \
    281 	android_keymaster/keymaster_tags.o \
    282 	android_keymaster/logger.o \
    283 	km_openssl/nist_curve_key_exchange.o \
    284 	km_openssl/openssl_err.o \
    285 	km_openssl/openssl_utils.o \
    286 	android_keymaster/serializable.o \
    287 	$(GTEST_OBJS)
    288 
    289 tests/ecies_kem_test: tests/ecies_kem_test.o \
    290 	android_keymaster/android_keymaster_utils.o \
    291 	tests/android_keymaster_test_utils.o \
    292 	android_keymaster/authorization_set.o \
    293 	km_openssl/ecies_kem.o \
    294 	km_openssl/hkdf.o \
    295 	km_openssl/hmac.o \
    296 	km_openssl/kdf.o \
    297 	android_keymaster/keymaster_tags.o \
    298 	android_keymaster/logger.o \
    299 	km_openssl/nist_curve_key_exchange.o \
    300 	km_openssl/openssl_err.o \
    301 	km_openssl/openssl_utils.o \
    302 	android_keymaster/serializable.o \
    303 	$(GTEST_OBJS)
    304 
    305 tests/authorization_set_test: tests/authorization_set_test.o \
    306 	tests/android_keymaster_test_utils.o \
    307 	android_keymaster/authorization_set.o \
    308 	android_keymaster/keymaster_tags.o \
    309 	android_keymaster/logger.o \
    310 	android_keymaster/serializable.o \
    311 	$(GTEST_OBJS)
    312 
    313 tests/key_blob_test: tests/key_blob_test.o \
    314 	tests/android_keymaster_test_utils.o \
    315 	android_keymaster/android_keymaster_utils.o \
    316 	key_blob_utils/auth_encrypted_key_blob.o \
    317 	android_keymaster/authorization_set.o \
    318 	key_blob_utils/integrity_assured_key_blob.o \
    319 	android_keymaster/keymaster_tags.o \
    320 	android_keymaster/logger.o \
    321 	key_blob_utils/ocb.o \
    322 	key_blob_utils/ocb_utils.o \
    323 	km_openssl/openssl_err.o \
    324 	android_keymaster/serializable.o \
    325 	$(GTEST_OBJS)
    326 
    327 tests/android_keymaster_messages_test: tests/android_keymaster_messages_test.o \
    328 	android_keymaster/android_keymaster_messages.o \
    329 	tests/android_keymaster_test_utils.o \
    330 	android_keymaster/android_keymaster_utils.o \
    331 	android_keymaster/authorization_set.o \
    332 	android_keymaster/keymaster_tags.o \
    333 	android_keymaster/logger.o \
    334 	android_keymaster/serializable.o \
    335 	$(GTEST_OBJS)
    336 
    337 tests/android_keymaster_test: tests/android_keymaster_test.o \
    338 	android_keymaster/android_keymaster.o \
    339 	android_keymaster/android_keymaster_messages.o \
    340 	android_keymaster/android_keymaster_utils.o \
    341 	android_keymaster/authorization_set.o \
    342 	android_keymaster/keymaster_enforcement.o \
    343 	android_keymaster/keymaster_tags.o \
    344 	android_keymaster/logger.o \
    345 	android_keymaster/operation.o \
    346 	android_keymaster/operation_table.o \
    347 	android_keymaster/serializable.o \
    348 	contexts/pure_soft_keymaster_context.o \
    349 	contexts/soft_attestation_cert.o \
    350 	contexts/soft_keymaster_context.o \
    351 	contexts/soft_keymaster_device.o \
    352 	key_blob_utils/auth_encrypted_key_blob.o \
    353 	key_blob_utils/integrity_assured_key_blob.o \
    354 	key_blob_utils/ocb.o \
    355 	key_blob_utils/ocb_utils.o \
    356 	key_blob_utils/software_keyblobs.o \
    357 	km_openssl/aes_key.o \
    358 	km_openssl/aes_key.o \
    359 	km_openssl/aes_operation.o \
    360 	km_openssl/aes_operation.o \
    361 	km_openssl/asymmetric_key.o \
    362 	km_openssl/asymmetric_key_factory.o \
    363 	km_openssl/attestation_record.o \
    364 	km_openssl/attestation_utils.o \
    365 	km_openssl/block_cipher_operation.o \
    366 	km_openssl/ckdf.o \
    367 	km_openssl/ec_key.o \
    368 	km_openssl/ec_key_factory.o \
    369 	km_openssl/ecdsa_operation.o \
    370 	km_openssl/hmac_key.o \
    371 	km_openssl/hmac_operation.o \
    372 	km_openssl/openssl_err.o \
    373 	km_openssl/openssl_utils.o \
    374 	km_openssl/rsa_key.o \
    375 	km_openssl/rsa_key_factory.o \
    376 	km_openssl/rsa_operation.o \
    377 	km_openssl/soft_keymaster_enforcement.o \
    378 	km_openssl/software_random_source.o \
    379 	km_openssl/symmetric_key.o \
    380 	km_openssl/triple_des_key.o \
    381 	km_openssl/triple_des_operation.o \
    382 	km_openssl/wrapped_key.o \
    383 	legacy_support/ec_keymaster0_key.o \
    384 	legacy_support/ec_keymaster1_key.o \
    385 	legacy_support/ecdsa_keymaster1_operation.o \
    386 	legacy_support/keymaster0_engine.o \
    387 	legacy_support/keymaster1_engine.o \
    388 	legacy_support/rsa_keymaster0_key.o \
    389 	legacy_support/rsa_keymaster1_key.o \
    390 	legacy_support/rsa_keymaster1_operation.o \
    391 	tests/android_keymaster_test_utils.o \
    392 	$(BASE)/system/security/keystore/keyblob_utils.o \
    393 	$(GTEST_OBJS)
    394 
    395 tests/keymaster_enforcement_test: tests/keymaster_enforcement_test.o \
    396 	android_keymaster/android_keymaster_messages.o \
    397 	tests/android_keymaster_test_utils.o \
    398 	android_keymaster/android_keymaster_utils.o \
    399 	android_keymaster/authorization_set.o \
    400 	android_keymaster/keymaster_enforcement.o \
    401 	km_openssl/ckdf.o \
    402 	km_openssl/openssl_err.o \
    403 	km_openssl/soft_keymaster_enforcement.o \
    404 	android_keymaster/keymaster_tags.o \
    405 	android_keymaster/logger.o \
    406 	android_keymaster/serializable.o \
    407 	$(GTEST_OBJS)
    408 
    409 tests/attestation_record_test: tests/attestation_record_test.o \
    410 	tests/android_keymaster_test_utils.o \
    411 	android_keymaster/android_keymaster_utils.o \
    412 	km_openssl/attestation_record.o \
    413 	android_keymaster/authorization_set.o \
    414 	android_keymaster/keymaster_tags.o \
    415 	android_keymaster/logger.o \
    416 	km_openssl/openssl_err.o \
    417 	android_keymaster/serializable.o \
    418 	$(GTEST_OBJS)
    419 
    420 tests/wrapped_key_test: tests/wrapped_key_test.o \
    421 	tests/android_keymaster_test_utils.o \
    422 	android_keymaster/android_keymaster_utils.o \
    423 	km_openssl/attestation_record.o \
    424 	android_keymaster/authorization_set.o \
    425 	android_keymaster/keymaster_tags.o \
    426 	android_keymaster/logger.o \
    427 	km_openssl/openssl_err.o \
    428 	android_keymaster/serializable.o \
    429 	km_openssl/wrapped_key.o \
    430 	$(GTEST_OBJS)
    431 
    432 $(GTEST)/src/gtest-all.o: CXXFLAGS:=$(subst -Wmissing-declarations,,$(CXXFLAGS))
    433 
    434 clean:
    435 	rm -f $(OBJS) $(DEPS) $(BINARIES) \
    436 		$(BINARIES:=.run) $(BINARIES:=.memcheck) $(BINARIES:=.massif) \
    437 		*gcov *gcno *gcda coverage.info
    438 	rm -rf coverage
    439 
    440 -include $(CPPSRCS:.cpp=.d)
    441 -include $(CCSRCS:.cc=.d)
    442