//
// Copyright (C) 2010 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

package {
    default_visibility: ["//visibility:private"],
}

java_defaults {
    name: "bouncycastle-errorprone-defaults",
    errorprone: {
        javacflags: [
            "-Xep:MissingOverride:OFF", // Ignore missing @Override.
        ],
    },
}

// These cannot build in the PDK, because the PDK requires all libraries
// compile against SDK versions.
java_defaults {
    name: "bouncycastle-defaults",
    defaults: [
        "bouncycastle-errorprone-defaults",
    ],
    hostdex: true,
    target: {
        android: {
            product_variables: {
                pdk: {
                    enabled: false,
                },
            },
        },
    },
}

// The src files for bouncycastle, used to generate core platform / intra-core
// API stubs.
filegroup {
    name: "bouncycastle_java_files",
    visibility: [
        "//libcore",
    ],
    srcs: ["repackaged/bcprov/src/main/java/**/*.java"],
}

// A bouncycastle library repackaged in com.android.org.bouncycastle for use
// in the Android platform where it is important not to conflict with the
// original org.bouncycastle package.
java_library {
    name: "bouncycastle",
    // Restrict visibility to only those targets that need to access it.
    visibility: [
        "//art/build/apex",
        "//external/wycheproof",
        "//libcore",
    ],
    apex_available: [
        "com.android.art.release",
        "com.android.art.debug",
    ],
    defaults: ["bouncycastle-defaults"],
    installable: true,

    srcs: [":bouncycastle_java_files"],

    libs: ["unsupportedappusage"],

    sdk_version: "none",
    system_modules: "art-module-intra-core-api-stubs-system-modules",
}

// A guaranteed unstripped version of bouncycastle.
// The build system may or may not strip the bouncycastle jar, but this one will
// not be stripped. See b/24535627.
java_library {
    name: "bouncycastle-testdex",
    visibility: [
        "//art:__subpackages__",
    ],
    defaults: ["bouncycastle-defaults"],
    installable: true,

    srcs: [":bouncycastle_java_files"],

    libs: ["unsupportedappusage"],

    sdk_version: "none",
    system_modules: "art-module-intra-core-api-stubs-system-modules",
    dex_preopt: {
        enabled: false,
    },
    java_version: "1.7",
}

unbundled_visibility = [
    "//build/make/tools/signapk",
    "//build/make/tools/signtos",
    "//cts/hostsidetests/devicepolicy/app/DeviceOwner",
    "//cts/tests/libcore/okhttp",
    "//cts/tests/security",
    "//cts/tests/tests/keystore",
    "//external/conscrypt",
    "//external/okhttp",
    "//external/robolectric-shadows",
    "//external/robolectric-shadows/robolectric",
    "//external/robolectric-shadows/shadows/supportv4",
    "//external/robolectric-shadows/shadows/httpclient",
    "//frameworks/opt/net/wifi/service",
    "//frameworks/opt/net/wifi/tests/wifitests",
    "//libcore",
    "//system/extras/verity",
]

// A bouncycastle library in the original org.bouncycastle package for use
// outside of the platform. e.g. for host or in unbundled apps.
java_library {
    name: "bouncycastle-unbundled",
    visibility: unbundled_visibility,
    defaults: ["bouncycastle-defaults"],
    host_supported: true,

    srcs: ["bcprov/src/main/java/**/*.java"],
    exclude_srcs: [
        "bcprov/src/main/java/org/bouncycastle/asn1/ocsp/**/*.java",
    ],

    sdk_version: "core_current",
    java_version: "1.7",
}

// Bouncycastle PKIX classes in the original org.bouncycastle package for use
// outside of the platform. e.g. for host or in unbundled apps / CTS tests.
java_library {
    name: "bouncycastle-bcpkix-unbundled",
    visibility: unbundled_visibility,
    defaults: ["bouncycastle-defaults"],
    host_supported: true,

    srcs: ["bcpkix/src/main/java/**/*.java"],
    exclude_srcs: ["bcpkix/src/main/java/org/bouncycastle/cert/ocsp/**/*.java"],
    libs: ["bouncycastle-unbundled"],

    sdk_version: "core_current",
}

// Bouncycastle OCSP classes in the original org.bouncycastle package for use
// outside of the platform. e.g. for host or in unbundled apps / CTS tests.
java_library_static {
    name: "bouncycastle-ocsp-unbundled",
    visibility: unbundled_visibility,
    defaults: ["bouncycastle-defaults"],
    host_supported: true,

    srcs: [
        "bcpkix/src/main/java/org/bouncycastle/cert/ocsp/**/*.java",
        "bcprov/src/main/java/org/bouncycastle/asn1/ocsp/**/*.java",
    ],
    libs: [
        "bouncycastle-unbundled",
        "bouncycastle-bcpkix-unbundled",
    ],

    sdk_version: "core_current",
}

// For compatibility with old bouncycastle-host name.
//
// When converting .mk files to .bp files do not change the visibility of this
// module, instead replace usages of this with bouncycastle-unbundled.
java_library_host {
    name: "bouncycastle-host",
    static_libs: ["bouncycastle-unbundled"],
}

// Bouncycastle filegroup for use by frameworks/opt/net/ike project.
//
// Specifically, SHA1Digest and MD4Digest (and their dependencies) must be used by IKEv2 to support
// legacy authentication methods.
filegroup {
    name: "bouncycastle_ike_digests",
    visibility: ["//frameworks/opt/net/ike"],
    srcs: [
        "bcprov/src/main/java/org/bouncycastle/crypto/Digest.java",
        "bcprov/src/main/java/org/bouncycastle/crypto/ExtendedDigest.java",
        "bcprov/src/main/java/org/bouncycastle/crypto/digests/EncodableDigest.java",
        "bcprov/src/main/java/org/bouncycastle/crypto/digests/GeneralDigest.java",
        "bcprov/src/main/java/org/bouncycastle/crypto/digests/MD4Digest.java",
        "bcprov/src/main/java/org/bouncycastle/crypto/digests/SHA1Digest.java",
        "bcprov/src/main/java/org/bouncycastle/util/Memoable.java",
        "bcprov/src/main/java/org/bouncycastle/util/Pack.java",
    ],
}
