# 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("//build/config/crypto.gni")

static_library("crypto") {
  sources = [
    "encryption_header_parsers.cc",
    "encryption_header_parsers.h",
    "gcm_decryption_result.cc",
    "gcm_decryption_result.h",
    "gcm_encryption_provider.cc",
    "gcm_encryption_provider.h",
    "gcm_key_store.cc",
    "gcm_key_store.h",
    "gcm_message_cryptographer.cc",
    "gcm_message_cryptographer.h",
    "message_payload_parser.cc",
    "message_payload_parser.h",
    "p256_key_util.cc",
    "p256_key_util.h",
  ]

  deps = [
    "//base",
    "//components/gcm_driver/common",
    "//components/gcm_driver/crypto/proto",
    "//components/leveldb_proto",
    "//crypto",
    "//crypto:platform",
    "//net",
    "//third_party/protobuf:protobuf_lite",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "gcm_crypto_test_helpers.cc",
    "gcm_crypto_test_helpers.h",
  ]

  deps = [
    ":crypto",
    "//base",
    "//components/gcm_driver/common",
    "//crypto",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "encryption_header_parsers_unittest.cc",
    "gcm_encryption_provider_unittest.cc",
    "gcm_key_store_unittest.cc",
    "gcm_message_cryptographer_unittest.cc",
    "message_payload_parser_unittest.cc",
    "p256_key_util_unittest.cc",
  ]

  deps = [
    ":crypto",
    "//base",
    "//base/test:test_support",
    "//components/gcm_driver/common",
    "//components/gcm_driver/crypto/proto",
    "//components/leveldb_proto",
    "//crypto",
    "//crypto:platform",
    "//net:test_support",
    "//testing/gtest",
    "//third_party/protobuf:protobuf_lite",
  ]
}
