licenses(["notice"])  # Apache 2.0

package(
    default_visibility = [
        "//java:__subpackages__",
    ],
)

load("//java/build_defs:javac.bzl", "JAVACOPTS")

# common subtle

java_library(
    name = "subtle",
    srcs = [
        "Base64.java",
        "Bytes.java",
        "EllipticCurves.java",
        "EngineFactory.java",
        "EngineWrapper.java",
        "Hex.java",
        "ImmutableByteArray.java",
        "Random.java",
        "SubtleUtil.java",
        "Validators.java",
    ],
    javacopts = JAVACOPTS,
    deps = [
        "@com_google_errorprone_error_prone_annotations//jar",
    ],
)

# aead subtle

java_library(
    name = "aead",
    srcs = [
        "AesCtrJceCipher.java",
        "AesEaxJce.java",
        "AesGcmJce.java",
        "DjbCipher.java",
        "DjbCipherPoly1305.java",
        "EncryptThenAuthenticate.java",
        "IndCpaCipher.java",
        "Poly1305.java",
    ],
    javacopts = JAVACOPTS,
    deps = [
        ":subtle",
        "//java/src/main/java/com/google/crypto/tink:primitives",
        "//java/src/main/java/com/google/crypto/tink/annotations",
    ],
)

# mac subtle

java_library(
    name = "mac",
    srcs = [
        "MacJce.java",
    ],
    javacopts = JAVACOPTS,
    deps = [
        ":subtle",
        "//java/src/main/java/com/google/crypto/tink:primitives",
    ],
)

# signature subtle

java_library(
    name = "signature",
    srcs = [
        "Curve25519.java",
        "EcdsaSignJce.java",
        "EcdsaVerifyJce.java",
        "Ed25519Sign.java",
        "Ed25519Verify.java",
    ],
    javacopts = JAVACOPTS,
    deps = [
        ":ed25519",
        ":subtle",
        "//java/src/main/java/com/google/crypto/tink:primitives",
        "//java/src/main/java/com/google/crypto/tink/annotations",
        "@com_google_errorprone_error_prone_annotations//jar",
    ],
)

# hybrid subtle

java_library(
    name = "hybrid",
    srcs = [
        "Curve25519.java",
        "EciesAeadHkdfDemHelper.java",
        "EciesAeadHkdfHybridDecrypt.java",
        "EciesAeadHkdfHybridEncrypt.java",
        "EciesHkdfRecipientKem.java",
        "EciesHkdfSenderKem.java",
        "Hkdf.java",
        "NaClCryptoBox.java",
    ],
    javacopts = JAVACOPTS,
    deps = [
        ":aead",
        ":subtle",
        "//java/src/main/java/com/google/crypto/tink:primitives",
        "//java/src/main/java/com/google/crypto/tink/annotations",
        "@com_google_errorprone_error_prone_annotations//jar",
    ],
)

# Streaming

java_library(
    name = "streaming",
    srcs = [
        "AesCtrHmacStreaming.java",
        "AesGcmHkdfStreaming.java",
        "Hkdf.java",
        "StreamSegmentDecrypter.java",
        "StreamSegmentEncrypter.java",
        "StreamingAeadDecryptingChannel.java",
        "StreamingAeadEncryptingChannel.java",
        "StreamingAeadSeekableDecryptingChannel.java",
    ],
    javacopts = JAVACOPTS,
    deps = [
        ":subtle",
        "//java/src/main/java/com/google/crypto/tink:primitives",
        "//java/src/main/java/com/google/crypto/tink/annotations",
        "@com_google_errorprone_error_prone_annotations//jar",
    ],
)

# x25519 subtle

java_library(
    name = "x25519",
    srcs = [
        "Curve25519.java",
    ],
    javacopts = JAVACOPTS,
    visibility = ["//visibility:private"],
    deps = [
        ":subtle",
        "//java/src/main/java/com/google/crypto/tink/annotations",
    ],
)

# Ed25519 subtle

java_library(
    name = "ed25519",
    srcs = [
        "Ed25519.java",
        "Ed25519Constants.java",
    ],
    javacopts = JAVACOPTS,
    visibility = ["//visibility:private"],
    deps = [
        ":subtle",
        ":x25519",
        "//java/src/main/java/com/google/crypto/tink/annotations",
    ],
)

java_binary(
    name = "Ed25519ConstantsGenerator",
    srcs = [
        "Ed25519ConstantsGenerator.java",
    ],
    javacopts = JAVACOPTS,
    deps = [
        ":x25519",
    ],
)
