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

##########################################
# Though under //zircon, this build file #
# is meant to be used in the Fuchsia GN  #
# build.                                 #
# See fxb/36548.                         #
##########################################

assert(!defined(zx) || zx != "/",
       "This file can only be used in the Fuchsia GN build.")

import("//build/unification/zx_library.gni")

zx_library("zircon-crypto") {
  shared = true
  sdk = "shared"
  sdk_headers = [
    "crypto/aead.h",
    "crypto/bytes.h",
    "crypto/cipher.h",
    "crypto/digest.h",
    "crypto/hkdf.h",
    "crypto/hmac.h",
    "crypto/secret.h",
  ]
  sources = [
    "aead.cc",
    "bytes.cc",
    "cipher.cc",
    "digest.cc",
    "error.cc",
    "hkdf.cc",
    "hmac.cc",
    "secret.cc",
  ]
  deps = [
    "//zircon/public/lib/boringssl",
    "//zircon/public/lib/explicit-memory",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zircon-internal",
  ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
}

zx_library("zircon-crypto-static") {
  static = true
  sdk = "source"
  sdk_headers = [
    "crypto/aead.h",
    "crypto/bytes.h",
    "crypto/cipher.h",
    "crypto/digest.h",
    "crypto/hkdf.h",
    "crypto/hmac.h",
    "crypto/secret.h",
  ]
  sources = [
    "aead.cc",
    "bytes.cc",
    "cipher.cc",
    "digest.cc",
    "error.cc",
    "hkdf.cc",
    "hmac.cc",
    "secret.cc",
  ]
  deps = [
    "//zircon/public/lib/boringssl",
    "//zircon/public/lib/explicit-memory",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zircon-internal",
  ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
}
