1# Copyright (c) 2023-2024 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import("//build/test.gni")
15import("../../code_signature.gni")
16
17ohos_source_set("key_enable_src_set") {
18  sources = [
19    "${code_signature_root_dir}/services/key_enable/utils/src/cert_path.cpp",
20    "utils/src/enable_key_utils.cpp",
21  ]
22  include_dirs = [
23    "utils/include",
24    "${code_signature_root_dir}/services/key_enable/utils/include",
25  ]
26  configs = [
27    "${code_signature_root_dir}:common_utils_config",
28    "${code_signature_root_dir}:common_public_config",
29  ]
30  external_deps = [
31    "hilog:libhilog",
32    "init:libbegetutil",
33  ]
34  part_name = "code_signature"
35  subsystem_name = "security"
36}
37
38ohos_unittest("add_cert_path_unittest") {
39  module_out_path = "security/code_signature"
40  sources = [
41    "${code_signature_root_dir}/services/key_enable/utils/src/cert_path.cpp",
42    "add_cert_path_test.cpp",
43  ]
44  include_dirs =
45      [ "${code_signature_root_dir}/services/key_enable/utils/include" ]
46  configs = [
47    "${code_signature_root_dir}:common_utils_config",
48    "${code_signature_root_dir}:common_public_config",
49  ]
50  deps = [ "${selinux_dir}:libselinux" ]
51  external_deps = [
52    "hilog:libhilog",
53    "init:libbegetutil",
54  ]
55}
56
57ohos_unittest("code_sign_utils_unittest") {
58  module_out_path = "security/code_signature"
59  resource_config_file = "resources/ohos_test.xml"
60  sources = [ "code_sign_utils_test.cpp" ]
61
62  deps = [
63    ":key_enable_src_set",
64    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils:libcode_sign_utils",
65  ]
66
67  include_dirs = [
68    "utils/include",
69    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils/include",
70    "${code_signature_root_dir}/utils/include",
71  ]
72
73  external_deps = [
74    "appverify:libhapverify",
75    "c_utils:utils",
76    "hilog:libhilog",
77  ]
78}
79
80ohos_unittest("code_sign_utils_in_c_unittest") {
81  module_out_path = "security/code_signature"
82  resource_config_file = "resources/ohos_test.xml"
83  sources = [ "code_sign_utils_in_c_test.cpp" ]
84
85  deps = [ "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils:libcode_sign_utils" ]
86
87  include_dirs = [
88    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils/include",
89    "${code_signature_root_dir}/utils/include",
90  ]
91
92  external_deps = [
93    "c_utils:utils",
94    "hilog:libhilog",
95  ]
96}
97
98ohos_unittest("local_code_sign_unittest") {
99  sanitize = {
100    cfi = true
101    cfi_cross_dso = true
102    debug = false
103  }
104  branch_protector_ret = "pac_ret"
105  module_out_path = "security/code_signature"
106  resource_config_file = "resources/ohos_test.xml"
107  sources = [ "local_code_sign_test.cpp" ]
108  deps = [
109    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils:libcode_sign_utils",
110    "${code_signature_root_dir}/interfaces/innerkits/local_code_sign:liblocal_code_sign_sdk",
111  ]
112
113  include_dirs = [
114    "utils/include",
115    "${code_signature_root_dir}/interfaces/innerkits/local_code_sign/include",
116    "${code_signature_root_dir}/services/local_code_sign/include",
117    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils/include",
118  ]
119  configs = [ "${code_signature_root_dir}:common_utils_config" ]
120  external_deps = [
121    "access_token:libaccesstoken_sdk",
122    "access_token:libnativetoken",
123    "access_token:libtoken_setproc",
124    "c_utils:utils",
125    "hilog:libhilog",
126    "ipc:ipc_core",
127    "openssl:libcrypto_shared",
128    "safwk:system_ability_fwk",
129    "samgr:samgr_proxy",
130  ]
131}
132
133ohos_unittest("local_code_sign_utils_unittest") {
134  module_out_path = "security/code_signature"
135  resource_config_file = "resources/ohos_test.xml"
136  sources = [
137    "${code_signature_root_dir}/services/local_code_sign/src/local_sign_key.cpp",
138    "${code_signature_root_dir}/utils/src/cert_utils.cpp",
139    "local_code_sign_utils_test.cpp",
140    "mock/src/hks_api.cpp",
141    "mock/src/hks_api_mock_helper.cpp",
142  ]
143  deps = [ "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils:libcode_sign_utils" ]
144
145  include_dirs = [
146    "mock/include",
147    "utils/include",
148    "${code_signature_root_dir}/services/local_code_sign/include",
149    "${code_signature_root_dir}/services/key_enable/utils/include",
150  ]
151
152  configs = [ "${code_signature_root_dir}:common_utils_config" ]
153  external_deps = [
154    "c_utils:utils",
155    "fsverity-utils:libfsverity_utils",
156    "hilog:libhilog",
157    "huks:libhukssdk",
158    "init:libbegetutil",
159    "openssl:libcrypto_shared",
160  ]
161}
162
163ohos_unittest("sign_and_enforce_unittest") {
164  module_out_path = "security/code_signature"
165  resource_config_file = "resources/ohos_test.xml"
166  sources = [ "sign_and_enforce_test.cpp" ]
167  deps = [
168    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils:libcode_sign_utils",
169    "${code_signature_root_dir}/interfaces/innerkits/local_code_sign:liblocal_code_sign_sdk",
170  ]
171
172  include_dirs = [
173    "utils/include",
174    "${code_signature_root_dir}/interfaces/innerkits/local_code_sign/include",
175    "${code_signature_root_dir}/services/local_code_sign/include",
176    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils/include",
177  ]
178  configs = [ "${code_signature_root_dir}:common_utils_config" ]
179  external_deps = [
180    "access_token:libaccesstoken_sdk",
181    "access_token:libnativetoken",
182    "access_token:libtoken_setproc",
183    "c_utils:utils",
184    "hilog:libhilog",
185    "ipc:ipc_core",
186    "openssl:libcrypto_shared",
187    "safwk:system_ability_fwk",
188    "samgr:samgr_proxy",
189  ]
190}
191
192ohos_unittest("multi_thread_local_sign_unittest") {
193  module_out_path = "security/code_signature"
194  resource_config_file = "resources/ohos_test.xml"
195  sources = [ "multi_thread_local_sign_test.cpp" ]
196  deps = [
197    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils:libcode_sign_utils",
198    "${code_signature_root_dir}/interfaces/innerkits/local_code_sign:liblocal_code_sign_sdk",
199  ]
200
201  include_dirs = [
202    "utils/include",
203    "${code_signature_root_dir}/interfaces/innerkits/local_code_sign/include",
204    "${code_signature_root_dir}/services/local_code_sign/include",
205    "${code_signature_root_dir}/interfaces/innerkits/code_sign_utils/include",
206  ]
207  configs = [ "${code_signature_root_dir}:common_utils_config" ]
208  external_deps = [
209    "access_token:libaccesstoken_sdk",
210    "access_token:libnativetoken",
211    "access_token:libtoken_setproc",
212    "c_utils:utils",
213    "hilog:libhilog",
214    "ipc:ipc_core",
215    "openssl:libcrypto_shared",
216    "safwk:system_ability_fwk",
217    "samgr:samgr_proxy",
218  ]
219}
220
221ohos_rust_static_library("rust_key_enable_lib") {
222  sources = [ "${code_signature_root_dir}/services/key_enable/src/lib.rs" ]
223  deps = [
224    "${code_signature_root_dir}/services/key_enable/utils:libkey_enable_utils",
225    "${rust_openssl_dir}/openssl:lib",
226    "//third_party/rust/crates/cxx:lib",
227    "//third_party/rust/crates/lazy-static.rs:lib",
228  ]
229  external_deps = [
230    "c_utils:utils_rust",
231    "hilog:hilog_rust",
232    "hisysevent:hisysevent_rust",
233    "ylong_json:lib",
234  ]
235  rustenv = []
236  if (build_variant == "root") {
237    rustenv += [ "code_signature_debuggable=on" ]
238  } else {
239    rustenv += [ "code_signature_debuggable=off" ]
240  }
241  if (code_signature_support_oh_release_app) {
242    rustenv += [ "support_openharmony_ca=on" ]
243  } else {
244    rustenv += [ "support_openharmony_ca=off" ]
245  }
246  crate_name = "key_enable"
247  crate_type = "rlib"
248  subsystem_name = "security"
249  part_name = "code_signature"
250}
251
252ohos_rust_unittest("rust_key_enable_unittest") {
253  module_out_path = "security/code_signature"
254  resource_config_file = "resources/ohos_test.xml"
255  crate_root = "./rust_key_enable_test.rs"
256  sources = [ "./rust_key_enable_test.rs" ]
257  external_deps = [ "ylong_json:lib" ]
258  deps = [ ":rust_key_enable_lib" ]
259  subsystem_name = "security"
260  part_name = "code_signature"
261}
262
263ohos_unittest("enable_verity_ioctl_unittest") {
264  module_out_path = "security/code_signature"
265  resource_config_file = "resources/ohos_test.xml"
266  sources = [
267    "enable_verity_test.cpp",
268    "utils/src/xpm_common.cpp",
269  ]
270
271  include_dirs = [ "utils/include" ]
272  configs = [
273    "${code_signature_root_dir}:common_utils_config",
274    "${code_signature_root_dir}:common_public_config",
275  ]
276  deps = [
277    ":key_enable_src_set",
278    "${code_signature_root_dir}/interfaces/innerkits/code_sign_attr_utils:libcode_sign_attr_utils",
279    "${selinux_dir}:libselinux",
280  ]
281  external_deps = [
282    "c_utils:utils",
283    "hilog:libhilog",
284  ]
285}
286
287ohos_unittest("jit_code_sign_unittest") {
288  module_out_path = "security/code_signature"
289  include_dirs = [
290    "${code_signature_root_dir}/interfaces/innerkits/jit_code_sign/include",
291  ]
292  sources = [ "jit_code_sign_test.cpp" ]
293  sanitize = {
294    cfi = true
295    cfi_cross_dso = true
296    debug = false
297  }
298  deps = [
299    "${code_signature_root_dir}/interfaces/innerkits/code_sign_attr_utils:libcode_sign_attr_utils",
300    "${code_signature_root_dir}/interfaces/innerkits/jit_code_sign:libjit_code_sign",
301  ]
302  external_deps = [
303    "c_utils:utils",
304    "hilog:libhilog",
305  ]
306  subsystem_name = "security"
307  part_name = "code_signature"
308}
309
310ohos_unittest("key_enable_utils_unittest") {
311  module_out_path = "security/code_signature"
312  sources = [ "key_enable_utils_test.cpp" ]
313  include_dirs =
314      [ "${code_signature_root_dir}/services/key_enable/utils/include" ]
315  deps = [
316    "${code_signature_root_dir}/services/key_enable/utils:libkey_enable_utils",
317  ]
318}
319
320ohos_unittest("cert_chain_verifier_unittest") {
321  module_out_path = "security/code_signature"
322  sources = [
323    "${code_signature_root_dir}/utils/src/cert_utils.cpp",
324    "${code_signature_root_dir}/utils/src/huks_attest_verifier.cpp",
325    "${code_signature_root_dir}/utils/src/openssl_utils.cpp",
326    "cert_chain_verifier_test.cpp",
327  ]
328  include_dirs = [ "utils/include" ]
329  configs = [
330    "${code_signature_root_dir}:common_utils_config",
331    "${code_signature_root_dir}:common_public_config",
332  ]
333  defines = [ "CODE_SIGNATURE_DEBUGGABLE" ]
334  if (code_signature_support_oh_release_app) {
335    defines += [ "CODE_SIGNATURE_OH_ROOT_CA" ]
336  }
337  deps = [
338    "${code_signature_root_dir}/services/key_enable/utils:libkey_enable_utils",
339  ]
340  external_deps = [
341    "access_token:libaccesstoken_sdk",
342    "access_token:libnativetoken",
343    "access_token:libtoken_setproc",
344    "c_utils:utils",
345    "hilog:libhilog",
346    "huks:libhukssdk",
347    "openssl:libcrypto_shared",
348  ]
349}
350
351group("unittest_group") {
352  testonly = true
353  if (!defined(ohos_lite)) {
354    deps = [
355      ":add_cert_path_unittest",
356      ":cert_chain_verifier_unittest",
357      ":code_sign_utils_in_c_unittest",
358      ":code_sign_utils_unittest",
359      ":enable_verity_ioctl_unittest",
360      ":local_code_sign_unittest",
361      ":local_code_sign_utils_unittest",
362      ":multi_thread_local_sign_unittest",
363      ":sign_and_enforce_unittest",
364    ]
365    if (!use_clang_coverage) {
366      deps += [ ":rust_key_enable_unittest" ]
367    }
368    if (code_signature_support_oh_code_sign) {
369      deps += [ ":key_enable_utils_unittest" ]
370    }
371    if (jit_code_sign_enable) {
372      deps += [ ":jit_code_sign_unittest" ]
373    }
374  }
375}
376