# Copyright 2021 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

import("//build_overrides/pigweed.gni")

import("$dir_pw_bloat/bloat.gni")
import("$dir_pw_build/facade.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_unit_test/test.gni")

declare_args() {
  pw_crypto_SHA256_BACKEND = ""
  pw_crypto_ECDSA_BACKEND = ""
}

config("default_config") {
  include_dirs = [ "public" ]
  visibility = [ ":*" ]
}

pw_facade("sha256") {
  backend = pw_crypto_SHA256_BACKEND
  public_configs = [ ":default_config" ]
  public = [ "public/pw_crypto/sha256.h" ]
  public_deps = [
    "$dir_pw_bytes",
    "$dir_pw_status",
  ]
  deps = [ "$dir_pw_assert" ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
  report_deps = [ ":size_report" ]
}

pw_size_report("size_report") {
  title = "pw::crypto Size Report"
  base = "$dir_pw_bloat:bloat_base"

  binaries = []

  if (pw_crypto_SHA256_BACKEND != "") {
    binaries += [
      {
        target = "size_report:sha256_simple"
        label = "SHA256 ($pw_crypto_SHA256_BACKEND)"
      },
    ]
  }

  if (pw_crypto_ECDSA_BACKEND != "") {
    binaries += [
      {
        target = "size_report:ecdsa_p256_verify"
        label = "ECDSA P256 Verify ($pw_crypto_ECDSA_BACKEND)"
      },
    ]
  }

  if (binaries == []) {
    binaries += [
      {
        target = "$dir_pw_bloat:bloat_base"
        label = "No backend is selected."
      },
    ]
  }
}

pw_test_group("tests") {
  tests = [
    ":sha256_test",
    ":ecdsa_test",
  ]
}

pw_test("sha256_test") {
  enable_if = pw_crypto_SHA256_BACKEND != ""
  deps = [ ":sha256" ]
  sources = [ "sha256_test.cc" ]
}

config("mbedtls_config") {
  visibility = [ ":*" ]
  include_dirs = [ "public_overrides/mbedtls" ]
}

pw_source_set("sha256_mbedtls") {
  public_configs = [ ":mbedtls_config" ]
  public = [
    "public/pw_crypto/sha256_mbedtls.h",
    "public_overrides/mbedtls/pw_crypto/sha256_backend.h",
  ]
  sources = [ "sha256_mbedtls.cc" ]
  public_deps = [
    ":sha256.facade",
    "//third_party/mbedtls",
  ]
}

config("boringssl_config") {
  visibility = [ ":*" ]
  include_dirs = [ "public_overrides/boringssl" ]
}

pw_source_set("sha256_boringssl") {
  public_configs = [ ":boringssl_config" ]
  public = [
    "public/pw_crypto/sha256_boringssl.h",
    "public_overrides/boringssl/pw_crypto/sha256_backend.h",
  ]
  sources = [ "sha256_boringssl.cc" ]
  public_deps = [
    ":sha256.facade",
    "//third_party/boringssl",
  ]
}

pw_facade("ecdsa") {
  backend = pw_crypto_ECDSA_BACKEND
  public_configs = [ ":default_config" ]
  public = [ "public/pw_crypto/ecdsa.h" ]
  public_deps = [
    "$dir_pw_bytes",
    "$dir_pw_status",
  ]
}

pw_source_set("ecdsa_mbedtls") {
  sources = [ "ecdsa_mbedtls.cc" ]
  deps = [
    "$dir_pw_function",
    "$dir_pw_log",
    "//third_party/mbedtls",
  ]
  public_deps = [ ":ecdsa.facade" ]
}

pw_test("ecdsa_test") {
  enable_if = pw_crypto_ECDSA_BACKEND != ""
  deps = [ ":ecdsa" ]
  sources = [ "ecdsa_test.cc" ]
}
