load("@fbcode//dependencies/buck:wdl.bzl", "wdls")
load("@fbsource//xplat/fizz:defs.bzl", "fizz_cpp_library")

oncall("secure_pipes")

fizz_cpp_library(
    name = "libaegis",
    srcs = [
        "libaegis/AEGISCipher.cpp",
    ],
    headers = [
        "libaegis/LibAEGIS.h",
    ],
    deps = [
        "fbsource//third-party/libaegis:aegis",
        "//fizz/crypto/aead:cryptoutil",
        "//folly/lang:checked_math",
    ],
    exported_deps = [
        "//fizz:config",
        "//fizz/crypto:crypto",
        "//fizz/crypto/aead:aead",
    ],
)

fizz_cpp_library(
    name = "liboqs",
    srcs = [
        "liboqs/OQSKeyExchange.cpp",
    ],
    headers = [
        "liboqs/LibOQS.h",
        "liboqs/OQSKeyExchange.h",
    ],
    exported_deps = [
        "//fizz:config",
    ] + select({
        "DEFAULT": [
            "fbsource//third-party/liboqs:oqs",
            "//fizz/crypto:crypto",
            "//fizz/crypto/exchange:key_exchange",
            "//folly:memory",
        ],
        "fbsource//xplat/fizz/constraints:oqs-disabled": [],
    }),
)

fizz_cpp_library(
    name = "openssl",
    srcs = [
        "openssl/certificate/CertUtils.cpp",
        "openssl/certificate/OpenSSLCertificateVerifier.cpp",
        "openssl/crypto/OpenSSLKeyUtils.cpp",
        "openssl/crypto/Sha.cpp",
        "openssl/crypto/aead/OpenSSLEVPCipher.cpp",
        "openssl/crypto/exchange/OpenSSLKeyExchange.cpp",
        "openssl/crypto/signature/Signature.cpp",
    ],
    headers = [
        "openssl/Hasher.h",
        "openssl/OpenSSL.h",
        "openssl/Properties.h",
        "openssl/certificate/CertUtils.h",
        "openssl/certificate/CertUtils-inl.h",
        "openssl/certificate/OpenSSLCertificateVerifier.h",
        "openssl/certificate/OpenSSLPeerCertImpl.h",
        "openssl/certificate/OpenSSLPeerCertImpl-inl.h",
        "openssl/certificate/OpenSSLSelfCertImpl.h",
        "openssl/certificate/OpenSSLSelfCertImpl-inl.h",
        "openssl/certificate/X509ChainWithPkey.h",
        "openssl/crypto/ECCurve.h",
        "openssl/crypto/OpenSSL.h",
        "openssl/crypto/OpenSSLKeyUtils.h",
        "openssl/crypto/Sha.h",
        "openssl/crypto/aead/OpenSSLEVPCipher.h",
        "openssl/crypto/aead/OpenSSLEVPCipher-inl.h",
        "openssl/crypto/exchange/OpenSSLKeyExchange.h",
        "openssl/crypto/signature/Signature.h",
        "openssl/crypto/signature/Signature-inl.h",
    ],
    labels = wdls.FIZZ,
    deps = [
        "//fizz/crypto/aead:cryptoutil",
        "//fizz/util:logging",
        "//folly:file_util",
        "//folly/lang:checked_math",
        "//folly/synchronization:call_once",
    ],
    exported_deps = [
        "fbsource//third-party/glog:glog",
        "//fizz:config",
        "//fizz/compression:certificate_compressor",
        "//fizz/crypto:crypto",
        "//fizz/crypto:hasher",
        "//fizz/crypto:hkdf",
        "//fizz/crypto/aead:aead",
        "//fizz/crypto/aead:iobuf",
        "//fizz/crypto/exchange:key_exchange",
        "//fizz/protocol:certificate",
        "//fizz/protocol:certificate_verifier",
        "//fizz/record:record",
        "//fizz/util:status",
        "//folly:conv",
        "//folly:memory",
        "//folly:range",
        "//folly:string",
        "//folly/io:iobuf",
        "//folly/io/async/ssl:openssl_transport_certificate",
        "//folly/lang:assume",
        "//folly/lang:bits",
        "//folly/portability:openssl",
        "//folly/ssl:openssl_cert_utils",
        "//folly/ssl:openssl_hash",
        "//folly/ssl:openssl_ptr_types",
    ],
    exported_external_deps = [
        ("openssl", None, "crypto"),
    ],
)

fizz_cpp_library(
    name = "libsodium",
    srcs = [
        "libsodium/crypto/exchange/X25519.cpp",
    ],
    headers = [
        "libsodium/LibSodium.h",
        "libsodium/crypto/exchange/X25519.h",
    ],
    deps = [
        "//folly:conv",
    ],
    exported_deps = [
        "//fizz/crypto:crypto",
        "//fizz/crypto/exchange:key_exchange",
        "//folly:optional",
        "//folly:range",
        "//folly/io:iobuf",
    ],
    exported_external_deps = [
        ("libsodium", None, "sodium"),
    ],
)
