|  | # Copyright (c) 2013 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") | 
|  | if (!is_starboard) { | 
|  | import("//testing/test.gni") | 
|  | } | 
|  |  | 
|  | component("crypto") { | 
|  | output_name = "crcrypto"  # Avoid colliding with OpenSSL's libcrypto. | 
|  | sources = [ | 
|  | "aead.cc", | 
|  | "aead.h", | 
|  | "apple_keychain.h", | 
|  | "apple_keychain_ios.mm", | 
|  | "apple_keychain_mac.mm", | 
|  | "capi_util.cc", | 
|  | "capi_util.h", | 
|  | "crypto_export.h", | 
|  | "ec_private_key.cc", | 
|  | "ec_private_key.h", | 
|  | "ec_signature_creator.cc", | 
|  | "ec_signature_creator.h", | 
|  | "ec_signature_creator_impl.cc", | 
|  | "ec_signature_creator_impl.h", | 
|  | "encryptor.cc", | 
|  | "encryptor.h", | 
|  | "hkdf.cc", | 
|  | "hkdf.h", | 
|  | "hmac.cc", | 
|  | "hmac.h", | 
|  | "mac_security_services_lock.cc", | 
|  | "mac_security_services_lock.h", | 
|  |  | 
|  | # TODO(brettw) these mocks should be moved to a test_support_crypto target | 
|  | # if possible. | 
|  | "mock_apple_keychain.cc", | 
|  | "mock_apple_keychain.h", | 
|  | "mock_apple_keychain_ios.cc", | 
|  | "mock_apple_keychain_mac.cc", | 
|  | "nss_crypto_module_delegate.h", | 
|  | "nss_key_util.cc", | 
|  | "nss_key_util.h", | 
|  | "nss_util.cc", | 
|  | "nss_util.h", | 
|  | "nss_util_internal.h", | 
|  | "openssl_util.cc", | 
|  | "openssl_util.h", | 
|  | "p224.cc", | 
|  | "p224.h", | 
|  | "p224_spake.cc", | 
|  | "p224_spake.h", | 
|  | "random.cc", | 
|  | "random.h", | 
|  | "rsa_private_key.cc", | 
|  | "rsa_private_key.h", | 
|  | "scoped_capi_types.h", | 
|  | "scoped_nss_types.h", | 
|  | "secure_hash.cc", | 
|  | "secure_hash.h", | 
|  | "secure_util.cc", | 
|  | "secure_util.h", | 
|  | "sha2.cc", | 
|  | "sha2.h", | 
|  | "signature_creator.cc", | 
|  | "signature_creator.h", | 
|  | "signature_verifier.cc", | 
|  | "signature_verifier.h", | 
|  | "symmetric_key.cc", | 
|  | "symmetric_key.h", | 
|  | "wincrypt_shim.h", | 
|  | ] | 
|  |  | 
|  | if (is_starboard) { | 
|  | sources -= [ | 
|  | "apple_keychain_ios.mm", | 
|  | "apple_keychain_mac.mm", | 
|  | "mock_apple_keychain_ios.cc", | 
|  | "mock_apple_keychain_mac.cc", | 
|  | "nss_crypto_module_delegate.h", | 
|  | "scoped_capi_types.h", | 
|  | "scoped_nss_types.h", | 
|  | ] | 
|  | if (is_win) { | 
|  | cflags = [ | 
|  | "/wd4018",  # Comparing signed and unsigned values. | 
|  | ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. | 
|  | configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] | 
|  |  | 
|  | deps = [ | 
|  | ":platform", | 
|  | "//base", | 
|  | "//base/third_party/dynamic_annotations", | 
|  | ] | 
|  |  | 
|  | if (!is_starboard) { | 
|  | public_deps = [ "//third_party/boringssl" ] | 
|  | } | 
|  |  | 
|  | if ((!is_mac && !is_ios) || is_starboard) { | 
|  | sources -= [ | 
|  | "apple_keychain.h", | 
|  | "mock_apple_keychain.cc", | 
|  | "mock_apple_keychain.h", | 
|  | ] | 
|  | } else { | 
|  | libs = [ | 
|  | "CoreFoundation.framework", | 
|  | "Security.framework", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (!is_mac) { | 
|  | sources -= [ | 
|  | "mac_security_services_lock.cc", | 
|  | "mac_security_services_lock.h", | 
|  | ] | 
|  | } | 
|  | if (!is_win) { | 
|  | sources -= [ | 
|  | "capi_util.cc", | 
|  | "capi_util.h", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # Some files are built when NSS is used for the platform certificate library. | 
|  | if (!use_nss_certs) { | 
|  | sources -= [ | 
|  | "nss_key_util.cc", | 
|  | "nss_key_util.h", | 
|  | "nss_util.cc", | 
|  | "nss_util.h", | 
|  | "nss_util_internal.h", | 
|  | ] | 
|  | } | 
|  |  | 
|  | defines = [ "CRYPTO_IMPLEMENTATION" ] | 
|  |  | 
|  | if (is_nacl) { | 
|  | deps += [ "//native_client_sdk/src/libraries/nacl_io" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | target(gtest_target_type, "crypto_unittests") { | 
|  | testonly = true | 
|  |  | 
|  | sources = [ | 
|  | "aead_unittest.cc", | 
|  | "ec_private_key_unittest.cc", | 
|  | "ec_signature_creator_unittest.cc", | 
|  | "encryptor_unittest.cc", | 
|  | "hmac_unittest.cc", | 
|  | "nss_key_util_unittest.cc", | 
|  | "nss_util_unittest.cc", | 
|  | "p224_spake_unittest.cc", | 
|  | "p224_unittest.cc", | 
|  | "random_unittest.cc", | 
|  | "rsa_private_key_unittest.cc", | 
|  | "secure_hash_unittest.cc", | 
|  | "sha2_unittest.cc", | 
|  | "signature_creator_unittest.cc", | 
|  | "signature_verifier_unittest.cc", | 
|  | "symmetric_key_unittest.cc", | 
|  | ] | 
|  |  | 
|  | # Some files are built when NSS is used for the platform certificate library. | 
|  | if (!use_nss_certs) { | 
|  | sources -= [ | 
|  | "nss_key_util_unittest.cc", | 
|  | "nss_util_unittest.cc", | 
|  | ] | 
|  | } | 
|  |  | 
|  | configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] | 
|  |  | 
|  | deps = [ | 
|  | ":crypto", | 
|  | ":platform", | 
|  | ":test_support", | 
|  | "//base", | 
|  | "//base/test:run_all_unittests", | 
|  | "//base/test:test_support", | 
|  | "//testing/gmock", | 
|  | "//testing/gtest", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # This has no sources in some cases so can't be a static library. | 
|  | source_set("test_support") { | 
|  | testonly = true | 
|  | sources = [] | 
|  |  | 
|  | if (use_nss_certs) { | 
|  | sources += [ | 
|  | "scoped_test_nss_db.cc", | 
|  | "scoped_test_nss_db.h", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (is_chromeos) { | 
|  | sources += [ | 
|  | "scoped_test_nss_chromeos_user.cc", | 
|  | "scoped_test_nss_chromeos_user.h", | 
|  | "scoped_test_system_nss_key_slot.cc", | 
|  | "scoped_test_system_nss_key_slot.h", | 
|  | ] | 
|  | } | 
|  |  | 
|  | deps = [ | 
|  | ":crypto", | 
|  | ":platform", | 
|  | "//base", | 
|  | ] | 
|  | } | 
|  |  | 
|  | config("platform_config") { | 
|  | if (use_nss_certs && is_clang) { | 
|  | # There is a broken header guard in /usr/include/nss/secmod.h: | 
|  | # https://bugzilla.mozilla.org/show_bug.cgi?id=884072 | 
|  | cflags = [ "-Wno-header-guard" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This is a meta-target that forwards to NSS's SSL library or OpenSSL, | 
|  | # according to the state of the crypto flags. A target just wanting to depend | 
|  | # on the current SSL library should just depend on this. | 
|  | group("platform") { | 
|  | if (is_starboard) { | 
|  | deps = [ "//starboard" ] | 
|  | public_deps = [ "//third_party/boringssl:crypto" ] | 
|  | } else { | 
|  | public_deps = [ "//third_party/boringssl" ] | 
|  |  | 
|  | # Link in NSS if it is used for the platform certificate library | 
|  | # (use_nss_certs). | 
|  | if (use_nss_certs) { | 
|  | public_configs = [ ":platform_config" ] | 
|  | public_configs += [ "//build/config/linux/nss:system_nss_no_ssl_config" ] | 
|  | } | 
|  | } | 
|  | } |