# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

static_library("webcrypto") {
  sources = [
    "algorithm_dispatch.cc",
    "algorithm_dispatch.h",
    "algorithm_implementation.cc",
    "algorithm_implementation.h",
    "algorithm_implementations.h",
    "algorithm_registry.cc",
    "algorithm_registry.h",
    "algorithms/aes.cc",
    "algorithms/aes.h",
    "algorithms/aes_cbc.cc",
    "algorithms/aes_ctr.cc",
    "algorithms/aes_gcm.cc",
    "algorithms/aes_kw.cc",
    "algorithms/asymmetric_key_util.cc",
    "algorithms/asymmetric_key_util.h",
    "algorithms/ec.cc",
    "algorithms/ec.h",
    "algorithms/ecdh.cc",
    "algorithms/ecdsa.cc",
    "algorithms/ed25519.cc",
    "algorithms/hkdf.cc",
    "algorithms/hmac.cc",
    "algorithms/pbkdf2.cc",
    "algorithms/rsa.cc",
    "algorithms/rsa.h",
    "algorithms/rsa_oaep.cc",
    "algorithms/rsa_pss.cc",
    "algorithms/rsa_sign.cc",
    "algorithms/rsa_sign.h",
    "algorithms/rsa_ssa.cc",
    "algorithms/secret_key_util.cc",
    "algorithms/secret_key_util.h",
    "algorithms/sha.cc",
    "algorithms/util.cc",
    "algorithms/util.h",
    "algorithms/x25519.cc",
    "blink_key_handle.cc",
    "blink_key_handle.h",
    "crypto_data.cc",
    "crypto_data.h",
    "generate_key_result.cc",
    "generate_key_result.h",
    "jwk.cc",
    "jwk.h",
    "status.cc",
    "status.h",
    "webcrypto_impl.cc",
    "webcrypto_impl.h",
  ]

  deps = [
    "//base",
    "//crypto",
    "//crypto:platform",
    "//third_party/blink/public:blink_headers",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "algorithms/aes_cbc_unittest.cc",
    "algorithms/aes_ctr_unittest.cc",
    "algorithms/aes_gcm_unittest.cc",
    "algorithms/aes_kw_unittest.cc",
    "algorithms/ecdh_unittest.cc",
    "algorithms/ecdsa_unittest.cc",
    "algorithms/hmac_unittest.cc",
    "algorithms/rsa_oaep_unittest.cc",
    "algorithms/rsa_pss_unittest.cc",
    "algorithms/rsa_ssa_unittest.cc",
    "algorithms/sha_unittest.cc",
    "algorithms/test_helpers.cc",
    "algorithms/test_helpers.h",
    "status_unittest.cc",
  ]

  deps = [
    ":webcrypto",
    "//base/test:test_support",
    "//crypto",
    "//crypto:platform",
    "//testing/gtest",
    "//testing/perf",
    "//third_party/blink/public:blink",
    "//third_party/re2",
  ]
}

# Shared functionality for writing WebCrypto fuzzers at this layer (several
# things need to be done to initialize Blink and pull in the right
# dependencies).
source_set("fuzzer_support") {
  testonly = true

  sources = [
    "fuzzer_support.cc",
    "fuzzer_support.h",
  ]
  deps = [
    ":webcrypto",
    "//base",
    "//crypto",
    "//crypto:platform",
    "//mojo/core/embedder",
    "//third_party/blink/public:blink",
  ]
}

# Tests the import of PKCS8 formatted EC keys.
fuzzer_test("webcrypto_ec_import_key_pkcs8_fuzzer") {
  sources = [ "ec_import_key_pkcs8_fuzzer.cc" ]
  deps = [
    ":fuzzer_support",
    ":webcrypto",
    "//third_party/blink/public:blink_headers",
  ]
}

# Tests the import of SPKI formatted EC keys.
fuzzer_test("webcrypto_ec_import_key_spki_fuzzer") {
  sources = [ "ec_import_key_spki_fuzzer.cc" ]
  deps = [
    ":fuzzer_support",
    ":webcrypto",
    "//third_party/blink/public:blink_headers",
  ]
}

# Tests the import of raw (X9.62) formatted EC keys.
fuzzer_test("webcrypto_ec_import_key_raw_fuzzer") {
  sources = [ "ec_import_key_raw_fuzzer.cc" ]
  deps = [
    ":fuzzer_support",
    ":webcrypto",
    "//third_party/blink/public:blink_headers",
  ]
}

# Tests the import of PKCS8 formatted RSA keys.
fuzzer_test("webcrypto_rsa_import_key_pkcs8_fuzzer") {
  sources = [ "rsa_import_key_pkcs8_fuzzer.cc" ]
  deps = [
    ":fuzzer_support",
    ":webcrypto",
    "//third_party/blink/public:blink_headers",
  ]
}

# Tests the import of SPKI formatted RSA keys.
fuzzer_test("webcrypto_rsa_import_key_spki_fuzzer") {
  sources = [ "rsa_import_key_spki_fuzzer.cc" ]
  deps = [
    ":fuzzer_support",
    ":webcrypto",
    "//third_party/blink/public:blink_headers",
  ]
}
