blob: 0d9bb121c7bcdfa405cb00b86333596ba53474bc [file] [log] [blame]
Steven Moreland7d6416c2017-04-18 10:06:28 -07001// Copyright (C) 2014 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// libkeymaster_messages contains just the code necessary to communicate with a
16// AndroidKeymaster implementation, e.g. one running in TrustZone.
Shawn Willdenba624df2020-01-15 17:01:27 -070017cc_defaults {
18 name: "keymaster_defaults",
19 vendor_available: true,
20 cflags: [
21 "-Wall",
22 "-Werror",
23 "-Wunused",
24 ],
25 clang: true,
26 clang_cflags: [
27 "-Wno-error=unused-const-variable",
28 "-Wno-error=unused-private-field",
29 "-Wimplicit-fallthrough",
30 // TODO(krasin): reenable coverage flags, when the new Clang toolchain is released.
31 // Currently, if enabled, these flags will cause an internal error in Clang.
32 "-fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp"
33 ],
34 sanitize: {
35 integer_overflow: false,
36 },
37}
38
Steven Moreland7d6416c2017-04-18 10:06:28 -070039cc_library_shared {
40 name: "libkeymaster_messages",
41 srcs: [
Janis Danisevskisf54cc932017-05-10 15:29:10 -070042 "android_keymaster/android_keymaster_messages.cpp",
43 "android_keymaster/android_keymaster_utils.cpp",
44 "android_keymaster/authorization_set.cpp",
45 "android_keymaster/keymaster_tags.cpp",
46 "android_keymaster/logger.cpp",
47 "android_keymaster/serializable.cpp",
48 "android_keymaster/keymaster_stl.cpp",
Steven Moreland7d6416c2017-04-18 10:06:28 -070049 ],
Yifan Hongf0b39bb2017-04-18 17:07:58 -070050 header_libs: ["libhardware_headers"],
Shawn Willdenba624df2020-01-15 17:01:27 -070051 defaults: ["keymaster_defaults" ],
52 clang_cflags: [
Steven Moreland7d6416c2017-04-18 10:06:28 -070053 "-DKEYMASTER_NAME_TAGS",
54 ],
Janis Danisevskisf38a0022017-04-26 14:44:46 -070055 stl: "none",
Steven Moreland7d6416c2017-04-18 10:06:28 -070056 export_include_dirs: ["include"],
Steven Moreland7d6416c2017-04-18 10:06:28 -070057}
58
Janis Danisevskisf38a0022017-04-26 14:44:46 -070059// libkeymaster_portable contains almost everything needed for a keymaster
Steven Moreland7d6416c2017-04-18 10:06:28 -070060// implementation, lacking only a subclass of the (abstract) KeymasterContext
61// class to provide environment-specific services and a wrapper to translate from
62// the function-based keymaster HAL API to the message-based AndroidKeymaster API.
Shawn Willden25814f02018-04-02 10:55:34 -060063cc_library {
Janis Danisevskisf38a0022017-04-26 14:44:46 -070064 name: "libkeymaster_portable",
Daniel Norman269f5872019-08-14 10:36:08 -070065 lto: {
66 thin: true,
67 },
Steven Moreland7d6416c2017-04-18 10:06:28 -070068 srcs: [
Shawn Willdenfb9b2a42017-12-21 12:35:06 -070069 "android_keymaster/android_keymaster.cpp",
70 "android_keymaster/android_keymaster_messages.cpp",
71 "android_keymaster/android_keymaster_utils.cpp",
72 "android_keymaster/authorization_set.cpp",
73 "android_keymaster/keymaster_enforcement.cpp",
74 "android_keymaster/keymaster_stl.cpp",
75 "android_keymaster/keymaster_tags.cpp",
76 "android_keymaster/logger.cpp",
77 "android_keymaster/operation.cpp",
78 "android_keymaster/operation_table.cpp",
79 "android_keymaster/serializable.cpp",
80 "key_blob_utils/auth_encrypted_key_blob.cpp",
81 "key_blob_utils/integrity_assured_key_blob.cpp",
82 "key_blob_utils/ocb.c",
83 "key_blob_utils/ocb_utils.cpp",
84 "key_blob_utils/software_keyblobs.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -070085 "km_openssl/aes_key.cpp",
86 "km_openssl/aes_operation.cpp",
87 "km_openssl/asymmetric_key.cpp",
88 "km_openssl/asymmetric_key_factory.cpp",
89 "km_openssl/attestation_record.cpp",
Mustafa Yigit Bilgen01a9b8b2018-11-07 16:08:08 -080090 "km_openssl/attestation_utils.cpp",
Shawn Willdena2f1a9b2018-01-09 09:37:43 -070091 "km_openssl/block_cipher_operation.cpp",
Shawn Willden8b940582018-01-02 10:53:39 -070092 "km_openssl/ckdf.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -070093 "km_openssl/ec_key.cpp",
94 "km_openssl/ec_key_factory.cpp",
Shawn Willdenfb9b2a42017-12-21 12:35:06 -070095 "km_openssl/ecdsa_operation.cpp",
96 "km_openssl/ecies_kem.cpp",
97 "km_openssl/hkdf.cpp",
98 "km_openssl/hmac.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -070099 "km_openssl/hmac_key.cpp",
100 "km_openssl/hmac_operation.cpp",
Shawn Willdenfb9b2a42017-12-21 12:35:06 -0700101 "km_openssl/iso18033kdf.cpp",
102 "km_openssl/kdf.cpp",
103 "km_openssl/nist_curve_key_exchange.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -0700104 "km_openssl/openssl_err.cpp",
105 "km_openssl/openssl_utils.cpp",
106 "km_openssl/rsa_key.cpp",
107 "km_openssl/rsa_key_factory.cpp",
108 "km_openssl/rsa_operation.cpp",
Janis Danisevskis41d5a742017-05-12 10:43:12 -0700109 "km_openssl/software_random_source.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -0700110 "km_openssl/symmetric_key.cpp",
Shawn Willden7efc7722018-01-08 22:00:12 -0700111 "km_openssl/triple_des_key.cpp",
112 "km_openssl/triple_des_operation.cpp",
Shawn Willdendd7e8a02018-01-12 13:03:37 -0700113 "km_openssl/wrapped_key.cpp",
Steven Moreland7d6416c2017-04-18 10:06:28 -0700114 ],
115
116 shared_libs: [
117 "libcrypto",
Steven Moreland7d6416c2017-04-18 10:06:28 -0700118 ],
Yifan Hong19f07e72017-06-07 15:54:19 -0700119 header_libs: ["libhardware_headers"],
120 export_header_lib_headers: ["libhardware_headers"],
Shawn Willdenba624df2020-01-15 17:01:27 -0700121 defaults: ["keymaster_defaults" ],
Steven Moreland7d6416c2017-04-18 10:06:28 -0700122 cflags: [
Janis Danisevskisf38a0022017-04-26 14:44:46 -0700123 "-DBORINGSSL_NO_CXX",
124 ],
125 // NOTE: libkeymaster_portable must run unchanged in the trusty runtime environment.
126 // Therefore, it must not link against any c++ stl library. keymaster_stl.cpp
127 // weakly defines the subset of stl symbols required for this library to work
128 // and which are also available in the trusty context.
129 stl: "none",
Janis Danisevskisf38a0022017-04-26 14:44:46 -0700130 export_include_dirs: ["include"],
Steven Moreland7d6416c2017-04-18 10:06:28 -0700131}
132
133// libsoftkeymaster provides a software-based keymaster HAL implementation.
134// This is used by keystore as a fallback for when the hardware keymaster does
135// not support the request.
Tri Vo0b674d02017-08-04 13:00:33 -0700136cc_library {
Steven Moreland7d6416c2017-04-18 10:06:28 -0700137 name: "libsoftkeymasterdevice",
Steven Moreland7d6416c2017-04-18 10:06:28 -0700138 srcs: [
Janis Danisevskis3bfda162017-05-12 13:10:41 -0700139 "android_keymaster/keymaster_configuration.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -0700140 "legacy_support/ec_keymaster0_key.cpp",
141 "legacy_support/ec_keymaster1_key.cpp",
142 "legacy_support/ecdsa_keymaster1_operation.cpp",
143 "legacy_support/keymaster0_engine.cpp",
144 "legacy_support/keymaster1_engine.cpp",
145 "legacy_support/rsa_keymaster0_key.cpp",
146 "legacy_support/rsa_keymaster1_key.cpp",
147 "legacy_support/rsa_keymaster1_operation.cpp",
Janis Danisevskis2fea2352017-07-26 16:52:33 -0700148 "legacy_support/keymaster1_legacy_support.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -0700149 "contexts/soft_keymaster_context.cpp",
Shawn Willdendd7e8a02018-01-12 13:03:37 -0700150 "contexts/pure_soft_keymaster_context.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -0700151 "contexts/soft_keymaster_device.cpp",
Janis Danisevskis1455d2e2017-05-11 10:56:27 -0700152 "km_openssl/soft_keymaster_enforcement.cpp",
Janis Danisevskisf54cc932017-05-10 15:29:10 -0700153 "contexts/soft_keymaster_logger.cpp",
Steven Moreland7d6416c2017-04-18 10:06:28 -0700154 ],
Shawn Willdenba624df2020-01-15 17:01:27 -0700155 defaults: ["keymaster_defaults"],
Steven Moreland7d6416c2017-04-18 10:06:28 -0700156 shared_libs: [
157 "libkeymaster_messages",
Janis Danisevskisf38a0022017-04-26 14:44:46 -0700158 "libkeymaster_portable",
Selene Huangb0d38302020-02-14 17:39:36 -0800159 "libsoft_attestation_cert",
Steven Moreland7d6416c2017-04-18 10:06:28 -0700160 "liblog",
Janis Danisevskis2fea2352017-07-26 16:52:33 -0700161 "libbase",
Steven Moreland7d6416c2017-04-18 10:06:28 -0700162 "libcrypto",
163 "libcutils",
164 ],
Steven Moreland7d6416c2017-04-18 10:06:28 -0700165 export_include_dirs: ["include"],
166}
167
Shawn Willden25814f02018-04-02 10:55:34 -0600168cc_library {
Selene Huangb0d38302020-02-14 17:39:36 -0800169 name: "libsoft_attestation_cert",
170 srcs: [
171 "contexts/soft_attestation_cert.cpp",
172 ],
173 defaults: ["keymaster_defaults"],
174 shared_libs: [
175 "libkeymaster_portable",
176 ],
177
178 export_include_dirs: ["include"],
179}
180
181cc_library {
Janis Danisevskis1f8b1c92017-05-08 11:24:41 -0700182 name: "libpuresoftkeymasterdevice",
Janis Danisevskis1f8b1c92017-05-08 11:24:41 -0700183 srcs: [
Janis Danisevskis1f8b1c92017-05-08 11:24:41 -0700184 "android_keymaster/keymaster_configuration.cpp",
Janis Danisevskis1f8b1c92017-05-08 11:24:41 -0700185 "contexts/pure_soft_keymaster_context.cpp",
186 "contexts/soft_keymaster_logger.cpp",
187 "km_openssl/soft_keymaster_enforcement.cpp",
188 ],
Shawn Willdenba624df2020-01-15 17:01:27 -0700189 defaults: ["keymaster_defaults"],
Janis Danisevskis1f8b1c92017-05-08 11:24:41 -0700190 shared_libs: [
191 "libkeymaster_messages",
192 "libkeymaster_portable",
Selene Huangb0d38302020-02-14 17:39:36 -0800193 "libsoft_attestation_cert",
Janis Danisevskis1f8b1c92017-05-08 11:24:41 -0700194 "liblog",
195 "libcrypto",
196 "libcutils",
Wei Wangc33ecdf2018-06-27 11:53:26 -0700197 "libbase",
Janis Danisevskis1f8b1c92017-05-08 11:24:41 -0700198 ],
199
200 export_include_dirs: ["include"],
201}
202
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000203cc_library_shared {
204 name: "libkeymaster3device",
205 srcs: [
Janis Danisevskis2fea2352017-07-26 16:52:33 -0700206 "legacy_support/keymaster_passthrough_key.cpp",
207 "legacy_support/keymaster_passthrough_engine.cpp",
208 "legacy_support/keymaster_passthrough_operation.cpp",
209 "contexts/keymaster1_passthrough_context.cpp",
210 "contexts/keymaster2_passthrough_context.cpp",
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000211 "ng/AndroidKeymaster3Device.cpp",
Janis Danisevskis2fea2352017-07-26 16:52:33 -0700212 "android_keymaster/keymaster_configuration.cpp",
Janis Danisevskis2fea2352017-07-26 16:52:33 -0700213 "legacy_support/ec_keymaster0_key.cpp",
214 "legacy_support/ec_keymaster1_key.cpp",
215 "legacy_support/ecdsa_keymaster1_operation.cpp",
216 "legacy_support/keymaster0_engine.cpp",
217 "legacy_support/keymaster1_engine.cpp",
218 "legacy_support/keymaster1_legacy_support.cpp",
219 "legacy_support/rsa_keymaster0_key.cpp",
220 "legacy_support/rsa_keymaster1_key.cpp",
221 "legacy_support/rsa_keymaster1_operation.cpp",
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000222 ],
Shawn Willdenba624df2020-01-15 17:01:27 -0700223 defaults: ["keymaster_defaults"],
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000224 shared_libs: [
225 "libkeymaster_messages",
226 "android.hardware.keymaster@3.0",
227 "libcrypto",
228 "libcutils",
Janis Danisevskis2fea2352017-07-26 16:52:33 -0700229 "libbase",
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000230 "libhidlbase",
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000231 "libkeymaster_portable",
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000232 "liblog",
Selene Huangb0d38302020-02-14 17:39:36 -0800233 "libpuresoftkeymasterdevice",
234 "libsoft_attestation_cert",
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000235 "libutils",
236 ],
Janis Danisevskisa68669b2017-02-06 11:46:54 +0000237 export_include_dirs: ["include", "ng/include"],
238}
239
Shawn Willden9e149572017-10-30 16:08:21 -0600240cc_library_shared {
241 name: "libkeymaster4",
Shawn Willden9e149572017-10-30 16:08:21 -0600242 srcs: [
243 "legacy_support/keymaster_passthrough_key.cpp",
244 "legacy_support/keymaster_passthrough_engine.cpp",
245 "legacy_support/keymaster_passthrough_operation.cpp",
Shawn Willdenefd06732017-11-30 19:34:16 -0700246 "ng/AndroidKeymaster4Device.cpp",
Shawn Willden9e149572017-10-30 16:08:21 -0600247 "android_keymaster/keymaster_configuration.cpp",
Shawn Willden9e149572017-10-30 16:08:21 -0600248 ],
Shawn Willdenba624df2020-01-15 17:01:27 -0700249 defaults: ["keymaster_defaults"],
Shawn Willden9e149572017-10-30 16:08:21 -0600250 shared_libs: [
251 "libkeymaster_messages",
252 "android.hardware.keymaster@4.0",
253 "libcrypto",
254 "libcutils",
255 "libbase",
256 "libhidlbase",
Shawn Willden9e149572017-10-30 16:08:21 -0600257 "libkeymaster_portable",
Shawn Willden9e149572017-10-30 16:08:21 -0600258 "libpuresoftkeymasterdevice",
259 "liblog",
260 "libutils",
261 "libkeymaster4support",
262 ],
Shawn Willden9e149572017-10-30 16:08:21 -0600263 export_include_dirs: ["ng/include"],
264}
265
Shawn Willden8ae41b52019-10-28 12:54:16 -0600266cc_library_shared {
267 name: "libkeymaster41",
268 vendor_available: true,
269 srcs: [
Shawn Willden8ae41b52019-10-28 12:54:16 -0600270 "ng/AndroidKeymaster41Device.cpp",
Shawn Willden8ae41b52019-10-28 12:54:16 -0600271 ],
Shawn Willdenba624df2020-01-15 17:01:27 -0700272 defaults: ["keymaster_defaults"],
Shawn Willden8ae41b52019-10-28 12:54:16 -0600273 shared_libs: [
Shawn Willden8ae41b52019-10-28 12:54:16 -0600274 "android.hardware.keymaster@4.0",
Shawn Willdenba624df2020-01-15 17:01:27 -0700275 "android.hardware.keymaster@4.1",
Shawn Willden8ae41b52019-10-28 12:54:16 -0600276 "libbase",
277 "libcrypto",
278 "libcutils",
279 "libhidlbase",
Shawn Willdenba624df2020-01-15 17:01:27 -0700280 "libkeymaster4",
Shawn Willden8ae41b52019-10-28 12:54:16 -0600281 "libkeymaster4_1support",
Shawn Willdenba624df2020-01-15 17:01:27 -0700282 "libkeymaster4support",
Shawn Willden8ae41b52019-10-28 12:54:16 -0600283 "libkeymaster_messages",
284 "libkeymaster_portable",
285 "liblog",
286 "libpuresoftkeymasterdevice",
287 "libutils",
288 ],
Shawn Willden8ae41b52019-10-28 12:54:16 -0600289 export_include_dirs: ["ng/include"],
290}
291
Steven Moreland7d6416c2017-04-18 10:06:28 -0700292// libkeymasterfiles is an empty library that exports all of the files in keymaster as includes.
293cc_library_static {
294 name: "libkeymasterfiles",
295 export_include_dirs: [
296 ".",
297 "include",
298 ],
299}