xref: /aosp_15_r20/external/pigweed/pw_crypto/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_bloat/bloat.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/facade.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_crypto/backend.gni")
21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_third_party/micro_ecc/micro_ecc.gni")
23*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.gni")
24*61c4878aSAndroid Build Coastguard Worker
25*61c4878aSAndroid Build Coastguard Workerconfig("default_config") {
26*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public" ]
27*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
28*61c4878aSAndroid Build Coastguard Worker}
29*61c4878aSAndroid Build Coastguard Worker
30*61c4878aSAndroid Build Coastguard Workerpw_facade("sha256") {
31*61c4878aSAndroid Build Coastguard Worker  backend = pw_crypto_SHA256_BACKEND
32*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
33*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_crypto/sha256.h" ]
34*61c4878aSAndroid Build Coastguard Worker  public_deps = [
35*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_bytes",
36*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_log",
37*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_status",
38*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_stream",
39*61c4878aSAndroid Build Coastguard Worker  ]
40*61c4878aSAndroid Build Coastguard Worker  deps = [ "$dir_pw_assert" ]
41*61c4878aSAndroid Build Coastguard Worker}
42*61c4878aSAndroid Build Coastguard Worker
43*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
44*61c4878aSAndroid Build Coastguard Worker  sources = [ "docs.rst" ]
45*61c4878aSAndroid Build Coastguard Worker  report_deps = [ ":size_report" ]
46*61c4878aSAndroid Build Coastguard Worker}
47*61c4878aSAndroid Build Coastguard Worker
48*61c4878aSAndroid Build Coastguard Workerpw_size_diff("size_report") {
49*61c4878aSAndroid Build Coastguard Worker  title = "pw::crypto Size Report"
50*61c4878aSAndroid Build Coastguard Worker  base = "$dir_pw_bloat:bloat_base"
51*61c4878aSAndroid Build Coastguard Worker
52*61c4878aSAndroid Build Coastguard Worker  binaries = []
53*61c4878aSAndroid Build Coastguard Worker
54*61c4878aSAndroid Build Coastguard Worker  if (pw_crypto_SHA256_BACKEND != "") {
55*61c4878aSAndroid Build Coastguard Worker    binaries += [
56*61c4878aSAndroid Build Coastguard Worker      {
57*61c4878aSAndroid Build Coastguard Worker        target = "size_report:sha256_simple"
58*61c4878aSAndroid Build Coastguard Worker        label = "SHA256 ($pw_crypto_SHA256_BACKEND)"
59*61c4878aSAndroid Build Coastguard Worker      },
60*61c4878aSAndroid Build Coastguard Worker    ]
61*61c4878aSAndroid Build Coastguard Worker  }
62*61c4878aSAndroid Build Coastguard Worker
63*61c4878aSAndroid Build Coastguard Worker  if (pw_crypto_ECDSA_BACKEND != "") {
64*61c4878aSAndroid Build Coastguard Worker    binaries += [
65*61c4878aSAndroid Build Coastguard Worker      {
66*61c4878aSAndroid Build Coastguard Worker        target = "size_report:ecdsa_p256_verify"
67*61c4878aSAndroid Build Coastguard Worker        label = "ECDSA P256 Verify ($pw_crypto_ECDSA_BACKEND)"
68*61c4878aSAndroid Build Coastguard Worker      },
69*61c4878aSAndroid Build Coastguard Worker    ]
70*61c4878aSAndroid Build Coastguard Worker  }
71*61c4878aSAndroid Build Coastguard Worker
72*61c4878aSAndroid Build Coastguard Worker  if (binaries == []) {
73*61c4878aSAndroid Build Coastguard Worker    binaries += [
74*61c4878aSAndroid Build Coastguard Worker      {
75*61c4878aSAndroid Build Coastguard Worker        target = "$dir_pw_bloat:bloat_base"
76*61c4878aSAndroid Build Coastguard Worker        label = "No backend is selected."
77*61c4878aSAndroid Build Coastguard Worker      },
78*61c4878aSAndroid Build Coastguard Worker    ]
79*61c4878aSAndroid Build Coastguard Worker  }
80*61c4878aSAndroid Build Coastguard Worker}
81*61c4878aSAndroid Build Coastguard Worker
82*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") {
83*61c4878aSAndroid Build Coastguard Worker  tests = [
84*61c4878aSAndroid Build Coastguard Worker    ":sha256_test",
85*61c4878aSAndroid Build Coastguard Worker    ":sha256_mock_test",
86*61c4878aSAndroid Build Coastguard Worker    ":ecdsa_test",
87*61c4878aSAndroid Build Coastguard Worker  ]
88*61c4878aSAndroid Build Coastguard Worker  if (dir_pw_third_party_micro_ecc != "") {
89*61c4878aSAndroid Build Coastguard Worker    tests += [ ":ecdsa_uecc_little_endian_test" ]
90*61c4878aSAndroid Build Coastguard Worker  }
91*61c4878aSAndroid Build Coastguard Worker}
92*61c4878aSAndroid Build Coastguard Worker
93*61c4878aSAndroid Build Coastguard Worker# Sha256 tests against the selected real backend.
94*61c4878aSAndroid Build Coastguard Workerpw_test("sha256_test") {
95*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_crypto_SHA256_BACKEND != ""
96*61c4878aSAndroid Build Coastguard Worker  deps = [ ":sha256" ]
97*61c4878aSAndroid Build Coastguard Worker  sources = [ "sha256_test.cc" ]
98*61c4878aSAndroid Build Coastguard Worker}
99*61c4878aSAndroid Build Coastguard Worker
100*61c4878aSAndroid Build Coastguard Workerconfig("mock_config") {
101*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
102*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public_overrides/mock" ]
103*61c4878aSAndroid Build Coastguard Worker}
104*61c4878aSAndroid Build Coastguard Worker
105*61c4878aSAndroid Build Coastguard Workerpw_source_set("sha256_mock") {
106*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":mock_config" ]
107*61c4878aSAndroid Build Coastguard Worker  public = [
108*61c4878aSAndroid Build Coastguard Worker    "public/pw_crypto/sha256_mock.h",
109*61c4878aSAndroid Build Coastguard Worker    "public_overrides/mock/pw_crypto/sha256_backend.h",
110*61c4878aSAndroid Build Coastguard Worker  ]
111*61c4878aSAndroid Build Coastguard Worker  sources = [ "sha256_mock.cc" ]
112*61c4878aSAndroid Build Coastguard Worker  public_deps = [ ":sha256.facade" ]
113*61c4878aSAndroid Build Coastguard Worker}
114*61c4878aSAndroid Build Coastguard Worker
115*61c4878aSAndroid Build Coastguard Worker# Sha256 frontend tests against a mocked backend.
116*61c4878aSAndroid Build Coastguard Workerpw_test("sha256_mock_test") {
117*61c4878aSAndroid Build Coastguard Worker  # Depend on ":sha256.facade" instead of ":sha256" to bypass normal backend
118*61c4878aSAndroid Build Coastguard Worker  # selection via `pw_crypto_SHA256_BACKEND`.
119*61c4878aSAndroid Build Coastguard Worker  deps = [
120*61c4878aSAndroid Build Coastguard Worker    ":sha256.facade",
121*61c4878aSAndroid Build Coastguard Worker    ":sha256_mock",
122*61c4878aSAndroid Build Coastguard Worker  ]
123*61c4878aSAndroid Build Coastguard Worker  sources = [ "sha256_mock_test.cc" ]
124*61c4878aSAndroid Build Coastguard Worker}
125*61c4878aSAndroid Build Coastguard Worker
126*61c4878aSAndroid Build Coastguard Workerconfig("mbedtls_config") {
127*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
128*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public_overrides/mbedtls" ]
129*61c4878aSAndroid Build Coastguard Worker}
130*61c4878aSAndroid Build Coastguard Worker
131*61c4878aSAndroid Build Coastguard Workerpw_source_set("sha256_mbedtls") {
132*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":mbedtls_config" ]
133*61c4878aSAndroid Build Coastguard Worker  public = [
134*61c4878aSAndroid Build Coastguard Worker    "public/pw_crypto/sha256_mbedtls.h",
135*61c4878aSAndroid Build Coastguard Worker    "public_overrides/mbedtls/pw_crypto/sha256_backend.h",
136*61c4878aSAndroid Build Coastguard Worker  ]
137*61c4878aSAndroid Build Coastguard Worker  sources = [ "sha256_mbedtls.cc" ]
138*61c4878aSAndroid Build Coastguard Worker  public_deps = [
139*61c4878aSAndroid Build Coastguard Worker    ":sha256.facade",
140*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/mbedtls",
141*61c4878aSAndroid Build Coastguard Worker  ]
142*61c4878aSAndroid Build Coastguard Worker}
143*61c4878aSAndroid Build Coastguard Worker
144*61c4878aSAndroid Build Coastguard Workerpw_source_set("sha256_mbedtls_v3") {
145*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":mbedtls_config" ]
146*61c4878aSAndroid Build Coastguard Worker  public = [
147*61c4878aSAndroid Build Coastguard Worker    "public/pw_crypto/sha256_mbedtls.h",
148*61c4878aSAndroid Build Coastguard Worker    "public_overrides/mbedtls/pw_crypto/sha256_backend.h",
149*61c4878aSAndroid Build Coastguard Worker  ]
150*61c4878aSAndroid Build Coastguard Worker  sources = [ "sha256_mbedtls.cc" ]
151*61c4878aSAndroid Build Coastguard Worker  public_deps = [
152*61c4878aSAndroid Build Coastguard Worker    ":sha256.facade",
153*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/mbedtls:mbedtls_v3",
154*61c4878aSAndroid Build Coastguard Worker  ]
155*61c4878aSAndroid Build Coastguard Worker}
156*61c4878aSAndroid Build Coastguard Worker
157*61c4878aSAndroid Build Coastguard Workerpw_facade("ecdsa") {
158*61c4878aSAndroid Build Coastguard Worker  backend = pw_crypto_ECDSA_BACKEND
159*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
160*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_crypto/ecdsa.h" ]
161*61c4878aSAndroid Build Coastguard Worker  public_deps = [
162*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_bytes",
163*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_status",
164*61c4878aSAndroid Build Coastguard Worker  ]
165*61c4878aSAndroid Build Coastguard Worker}
166*61c4878aSAndroid Build Coastguard Worker
167*61c4878aSAndroid Build Coastguard Workerpw_source_set("ecdsa_mbedtls") {
168*61c4878aSAndroid Build Coastguard Worker  sources = [ "ecdsa_mbedtls.cc" ]
169*61c4878aSAndroid Build Coastguard Worker  deps = [
170*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_function",
171*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_log",
172*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/mbedtls",
173*61c4878aSAndroid Build Coastguard Worker  ]
174*61c4878aSAndroid Build Coastguard Worker  public_deps = [ ":ecdsa.facade" ]
175*61c4878aSAndroid Build Coastguard Worker}
176*61c4878aSAndroid Build Coastguard Worker
177*61c4878aSAndroid Build Coastguard Workerpw_source_set("ecdsa_mbedtls_v3") {
178*61c4878aSAndroid Build Coastguard Worker  sources = [ "ecdsa_mbedtls.cc" ]
179*61c4878aSAndroid Build Coastguard Worker  deps = [
180*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_function",
181*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_log",
182*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/mbedtls:mbedtls_v3",
183*61c4878aSAndroid Build Coastguard Worker  ]
184*61c4878aSAndroid Build Coastguard Worker  public_deps = [ ":ecdsa.facade" ]
185*61c4878aSAndroid Build Coastguard Worker}
186*61c4878aSAndroid Build Coastguard Worker
187*61c4878aSAndroid Build Coastguard Workerpw_source_set("ecdsa_uecc") {
188*61c4878aSAndroid Build Coastguard Worker  sources = [ "ecdsa_uecc.cc" ]
189*61c4878aSAndroid Build Coastguard Worker  deps = [
190*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_log",
191*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/micro_ecc",
192*61c4878aSAndroid Build Coastguard Worker  ]
193*61c4878aSAndroid Build Coastguard Worker  public_deps = [ ":ecdsa.facade" ]
194*61c4878aSAndroid Build Coastguard Worker}
195*61c4878aSAndroid Build Coastguard Worker
196*61c4878aSAndroid Build Coastguard Workerif (dir_pw_third_party_micro_ecc != "") {
197*61c4878aSAndroid Build Coastguard Worker  pw_source_set("ecdsa_uecc_little_endian") {
198*61c4878aSAndroid Build Coastguard Worker    sources = [ "ecdsa_uecc.cc" ]
199*61c4878aSAndroid Build Coastguard Worker    deps = [
200*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_log",
201*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party/micro_ecc:micro_ecc_little_endian",
202*61c4878aSAndroid Build Coastguard Worker    ]
203*61c4878aSAndroid Build Coastguard Worker    public_deps = [ ":ecdsa.facade" ]
204*61c4878aSAndroid Build Coastguard Worker  }
205*61c4878aSAndroid Build Coastguard Worker
206*61c4878aSAndroid Build Coastguard Worker  # This test targets the micro_ecc little endian backend specifically.
207*61c4878aSAndroid Build Coastguard Worker  #
208*61c4878aSAndroid Build Coastguard Worker  # TODO: b/273819841 - deduplicate all backend tests.
209*61c4878aSAndroid Build Coastguard Worker  pw_test("ecdsa_uecc_little_endian_test") {
210*61c4878aSAndroid Build Coastguard Worker    sources = [ "ecdsa_test.cc" ]
211*61c4878aSAndroid Build Coastguard Worker    deps = [ ":ecdsa_uecc_little_endian" ]
212*61c4878aSAndroid Build Coastguard Worker  }
213*61c4878aSAndroid Build Coastguard Worker}
214*61c4878aSAndroid Build Coastguard Worker
215*61c4878aSAndroid Build Coastguard Worker# This test targets the specific backend pointed to by
216*61c4878aSAndroid Build Coastguard Worker# pw_crypto_ECDSA_BACKEND.
217*61c4878aSAndroid Build Coastguard Workerpw_test("ecdsa_test") {
218*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_crypto_ECDSA_BACKEND != ""
219*61c4878aSAndroid Build Coastguard Worker  deps = [ ":ecdsa" ]
220*61c4878aSAndroid Build Coastguard Worker  sources = [ "ecdsa_test.cc" ]
221*61c4878aSAndroid Build Coastguard Worker}
222