Home | History | Annotate | Download | only in crypto
      1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import("//build/config/crypto.gni")
      6 
      7 component("crypto") {
      8   output_name = "crcrypto"  # Avoid colliding with OpenSSL's libcrypto.
      9   sources = [
     10     "apple_keychain.h",
     11     "apple_keychain_ios.mm",
     12     "apple_keychain_mac.mm",
     13     "capi_util.cc",
     14     "capi_util.h",
     15     "crypto_export.h",
     16     "cssm_init.cc",
     17     "cssm_init.h",
     18     "curve25519.cc",
     19     "curve25519-donna.c",
     20     "curve25519.h",
     21     "ec_private_key.h",
     22     "ec_private_key_nss.cc",
     23     "ec_private_key_openssl.cc",
     24     "ec_signature_creator.cc",
     25     "ec_signature_creator.h",
     26     "ec_signature_creator_impl.h",
     27     "ec_signature_creator_nss.cc",
     28     "ec_signature_creator_openssl.cc",
     29     "encryptor.cc",
     30     "encryptor.h",
     31     "encryptor_nss.cc",
     32     "encryptor_openssl.cc",
     33     "ghash.cc",
     34     "ghash.h",
     35     "hkdf.cc",
     36     "hkdf.h",
     37     "hmac.cc",
     38     "hmac.h",
     39     "hmac_nss.cc",
     40     "hmac_openssl.cc",
     41     "mac_security_services_lock.cc",
     42     "mac_security_services_lock.h",
     43     # TODO(brettw) these mocks should be moved to a test_support_crypto target
     44     # if possible.
     45     "mock_apple_keychain.cc",
     46     "mock_apple_keychain.h",
     47     "mock_apple_keychain_ios.cc",
     48     "mock_apple_keychain_mac.cc",
     49     "nss_util.cc",
     50     "nss_util.h",
     51     "nss_util_internal.h",
     52     "openssl_util.cc",
     53     "openssl_util.h",
     54     "p224.cc",
     55     "p224.h",
     56     "p224_spake.cc",
     57     "p224_spake.h",
     58     "random.cc",
     59     "random.h",
     60     "rsa_private_key.cc",
     61     "rsa_private_key.h",
     62     "rsa_private_key_nss.cc",
     63     "rsa_private_key_openssl.cc",
     64     "scoped_capi_types.h",
     65     "scoped_nss_types.h",
     66     "secure_hash_default.cc",
     67     "secure_hash.h",
     68     "secure_hash_openssl.cc",
     69     "secure_util.cc",
     70     "secure_util.h",
     71     "sha2.cc",
     72     "sha2.h",
     73     "signature_creator.h",
     74     "signature_creator_nss.cc",
     75     "signature_creator_openssl.cc",
     76     "signature_verifier.h",
     77     "signature_verifier_nss.cc",
     78     "signature_verifier_openssl.cc",
     79     "symmetric_key.h",
     80     "symmetric_key_nss.cc",
     81     "symmetric_key_openssl.cc",
     82     "third_party/nss/chromium-blapi.h",
     83     "third_party/nss/chromium-blapit.h",
     84     "third_party/nss/chromium-nss.h",
     85     "third_party/nss/chromium-sha256.h",
     86     "third_party/nss/pk11akey.cc",
     87     "third_party/nss/rsawrapr.c",
     88     "third_party/nss/secsign.cc",
     89     "third_party/nss/sha512.cc",
     90   ]
     91 
     92   deps = [
     93     ":platform",
     94     "//base",
     95     "//base/third_party/dynamic_annotations",
     96   ]
     97 
     98   if (!is_mac && !is_ios) {
     99     sources -= [
    100       "apple_keychain.h",
    101       "mock_apple_keychain.cc",
    102       "mock_apple_keychain.h",
    103     ]
    104   }
    105 
    106   if (!is_mac) {
    107     sources -= [
    108       "cssm_init.cc",
    109       "cssm_init.h",
    110       "mac_security_services_lock.cc",
    111       "mac_security_services_lock.h",
    112     ]
    113   }
    114   if (!is_win) {
    115     sources -= [
    116       "capi_util.cc",
    117       "capi_util.h",
    118     ]
    119   }
    120 
    121   if (is_android) {
    122     deps += [ "//third_party/android_tools:cpu_features" ]
    123   }
    124 
    125   if (use_openssl) {
    126     # Remove NSS files when using OpenSSL
    127     sources -= [
    128       "ec_private_key_nss.cc",
    129       "ec_signature_creator_nss.cc",
    130       "encryptor_nss.cc",
    131       "hmac_nss.cc",
    132       "nss_util.cc",
    133       "nss_util.h",
    134       "rsa_private_key_nss.cc",
    135       "secure_hash_default.cc",
    136       "signature_creator_nss.cc",
    137       "signature_verifier_nss.cc",
    138       "symmetric_key_nss.cc",
    139       "third_party/nss/chromium-blapi.h",
    140       "third_party/nss/chromium-blapit.h",
    141       "third_party/nss/chromium-nss.h",
    142       "third_party/nss/pk11akey.cc",
    143       "third_party/nss/rsawrapr.c",
    144       "third_party/nss/secsign.cc",
    145     ]
    146   } else {
    147     # Remove OpenSSL when using NSS.
    148     sources -= [
    149       "ec_private_key_openssl.cc",
    150       "ec_signature_creator_openssl.cc",
    151       "encryptor_openssl.cc",
    152       "hmac_openssl.cc",
    153       "openssl_util.cc",
    154       "openssl_util.h",
    155       "rsa_private_key_openssl.cc",
    156       "secure_hash_openssl.cc",
    157       "signature_creator_openssl.cc",
    158       "signature_verifier_openssl.cc",
    159       "symmetric_key_openssl.cc",
    160     ]
    161   }
    162 
    163   defines = [ "CRYPTO_IMPLEMENTATION" ]
    164 }
    165 
    166 if (is_win) {
    167   # A minimal crypto subset for hmac-related stuff that small standalone
    168   # targets can use to reduce code size on Windows. This does not depend on
    169   # OpenSSL/NSS but will use Windows APIs for that functionality.
    170   source_set("crypto_minimal_win") {
    171     sources = [
    172       "crypto_export.h",
    173       "hmac.cc",
    174       "hmac.h",
    175       "hmac_win.cc",
    176       "scoped_capi_types.h",
    177       "scoped_nss_types.h",
    178       "secure_util.cc",
    179       "secure_util.h",
    180       "symmetric_key.h",
    181       "symmetric_key_win.cc",
    182       "third_party/nss/chromium-blapi.h",
    183       "third_party/nss/chromium-sha256.h",
    184       "third_party/nss/sha512.cc",
    185     ]
    186 
    187     deps = [
    188       "//base",
    189       "//base/third_party/dynamic_annotations",
    190     ]
    191 
    192     defines = [ "CRYPTO_IMPLEMENTATION" ]
    193   }
    194 }
    195 
    196 test("crypto_unittests") {
    197   sources = [
    198     # Tests.
    199     "curve25519_unittest.cc",
    200     "ec_private_key_unittest.cc",
    201     "ec_signature_creator_unittest.cc",
    202     "encryptor_unittest.cc",
    203     "ghash_unittest.cc",
    204     "hkdf_unittest.cc",
    205     "hmac_unittest.cc",
    206     "nss_util_unittest.cc",
    207     "p224_unittest.cc",
    208     "p224_spake_unittest.cc",
    209     "random_unittest.cc",
    210     "rsa_private_key_unittest.cc",
    211     "rsa_private_key_nss_unittest.cc",
    212     "secure_hash_unittest.cc",
    213     "sha2_unittest.cc",
    214     "signature_creator_unittest.cc",
    215     "signature_verifier_unittest.cc",
    216     "symmetric_key_unittest.cc",
    217   ]
    218 
    219   if (use_openssl || !is_linux) {
    220     sources -= [
    221       "rsa_private_key_nss_unittest.cc",
    222     ]
    223   }
    224 
    225   if (use_openssl) {
    226     sources -= [ "nss_util_unittest.cc" ]
    227   }
    228 
    229   deps = [
    230     ":crypto",
    231     ":platform",
    232     "//base",
    233     "//base/test:run_all_unittests",
    234     "//base/test:test_support",
    235     "//testing/gmock",
    236     "//testing/gtest",
    237   ]
    238 }
    239 
    240 # This is a meta-target that forwards to NSS's SSL library or OpenSSL,
    241 # according to the state of the crypto flags. A target just wanting to depend
    242 # on the current SSL library should just depend on this.
    243 group("platform") {
    244   if (use_openssl) {
    245     deps = [ "//third_party/openssl" ]
    246   } else {
    247     deps = [ "//net/third_party/nss/ssl:libssl" ]
    248     if (is_linux) {
    249       # On Linux, we use the system NSS (excepting SSL where we always use our
    250       # own).
    251       #
    252       # We always need our SSL header search path to come before the system one
    253       # so our versions are used. The libssl target will add the search path we
    254       # want, but according to GN's ordering rules, direct_dependent_configs'
    255       # search path will get applied before ones inherited from our
    256       # dependencies. Therefore, we need to explicitly list our custom libssl's
    257       # config here before the system one.
    258       direct_dependent_configs = [
    259         "//net/third_party/nss/ssl:ssl_config",
    260         "//third_party/nss:system_nss_no_ssl_config",
    261       ]
    262     } else {
    263       # Non-Linux platforms use the hermetic NSS from the tree.
    264       deps += [
    265         "//third_party/nss:nspr",
    266         "//third_party/nss:nss",
    267       ]
    268     }
    269   }
    270 }
    271