Home / Class/ BouncyCastleUtil Class — netty Architecture

BouncyCastleUtil Class — netty Architecture

Architecture documentation for the BouncyCastleUtil class in BouncyCastleUtil.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  3d807587_1576_ed5a_5887_67583b16915a["BouncyCastleUtil"]
  3b29fce3_18a5_bcf4_2c00_b31be924c3b0["BouncyCastleUtil.java"]
  3d807587_1576_ed5a_5887_67583b16915a -->|defined in| 3b29fce3_18a5_bcf4_2c00_b31be924c3b0
  a97a7eed_212b_0045_da5f_917cd2be2b28["isBcProvAvailable()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| a97a7eed_212b_0045_da5f_917cd2be2b28
  0f177b22_40a5_4814_deb6_cbf26a9984ca["isBcPkixAvailable()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| 0f177b22_40a5_4814_deb6_cbf26a9984ca
  32ea126a_bdd5_8684_f271_62940a40b29d["isBcTlsAvailable()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| 32ea126a_bdd5_8684_f271_62940a40b29d
  2b223ace_df07_10db_673b_e9b194c0f858["Throwable()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| 2b223ace_df07_10db_673b_e9b194c0f858
  5387aa15_628f_bfeb_97f3_7ea37b1e2357["isBcJsseInUse()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| 5387aa15_628f_bfeb_97f3_7ea37b1e2357
  7cb06862_177c_5601_1607_70835b360fc8["Provider()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| 7cb06862_177c_5601_1607_70835b360fc8
  5c4b96e3_4b48_e1ec_b479_23eea5ac0c79["getBcSSLEngineClass()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| 5c4b96e3_4b48_e1ec_b479_23eea5ac0c79
  c4bae996_cb00_5a6d_1a59_b8ec9e047af6["reset()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| c4bae996_cb00_5a6d_1a59_b8ec9e047af6
  a940954c_5e1f_29aa_d241_be9913b41a29["ensureLoaded()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| a940954c_5e1f_29aa_d241_be9913b41a29
  c933e0ba_9455_436a_b4a5_ee5470ce92d5["tryLoading()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| c933e0ba_9455_436a_b4a5_ee5470ce92d5
  cfd41377_95de_d71f_ce76_94b790464ff2["BouncyCastleUtil()"]
  3d807587_1576_ed5a_5887_67583b16915a -->|method| cfd41377_95de_d71f_ce76_94b790464ff2

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/ssl/util/BouncyCastleUtil.java lines 31–237

public final class BouncyCastleUtil {
    private static final InternalLogger logger = InternalLoggerFactory.getInstance(BouncyCastleUtil.class);

    private static final String BC_PROVIDER_NAME = "BC";
    private static final String BC_PROVIDER = "org.bouncycastle.jce.provider.BouncyCastleProvider";
    private static final String BC_FIPS_PROVIDER_NAME = "BCFIPS";
    private static final String BC_FIPS_PROVIDER = "org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider";
    private static final String BC_JSSE_PROVIDER_NAME = "BCJSSE";
    private static final String BC_JSSE_PROVIDER = "org.bouncycastle.jsse.provider.BouncyCastleJsseProvider";
    private static final String BC_PEMPARSER = "org.bouncycastle.openssl.PEMParser";
    private static final String BC_JSSE_SSLENGINE = "org.bouncycastle.jsse.BCSSLEngine";
    private static final String BC_JSSE_ALPN_SELECTOR = "org.bouncycastle.jsse.BCApplicationProtocolSelector";

    private static volatile Throwable unavailabilityCauseBcProv;
    private static volatile Throwable unavailabilityCauseBcPkix;
    private static volatile Throwable unavailabilityCauseBcTls;
    private static volatile Provider bcProviderJce;
    private static volatile Provider bcProviderJsse;
    private static volatile Class<? extends SSLEngine> bcSSLEngineClass;
    private static volatile boolean attemptedLoading;

    /**
     * Indicate whether the BouncyCastle Java Crypto Extensions provider is available.
     */
    public static boolean isBcProvAvailable() {
        ensureLoaded();
        return unavailabilityCauseBcProv == null;
    }

    /**
     * Indicate whether the BouncyCastle Public-Key Infrastructure utilities are available.
     */
    public static boolean isBcPkixAvailable() {
        ensureLoaded();
        return unavailabilityCauseBcPkix == null;
    }

    /**
     * Indicate whether the BouncyCastle Java Secure Socket Extensions provider is available.
     */
    public static boolean isBcTlsAvailable() {
        ensureLoaded();
        return unavailabilityCauseBcTls == null;
    }

    /**
     * @return the cause if unavailable. {@code null} if available.
     */
    public static Throwable unavailabilityCauseBcProv() {
        ensureLoaded();
        return unavailabilityCauseBcProv;
    }

    /**
     * @return the cause if unavailable. {@code null} if available.
     */
    public static Throwable unavailabilityCauseBcPkix() {
        ensureLoaded();
        return unavailabilityCauseBcPkix;
    }

    /**
     * @return the cause if unavailable. {@code null} if available.
     */
    public static Throwable unavailabilityCauseBcTls() {
        ensureLoaded();
        return unavailabilityCauseBcTls;
    }

    /**
     * Indicates whether the given SSLEngine is implemented by BouncyCastle.
     */
    public static boolean isBcJsseInUse(SSLEngine engine) {
        ensureLoaded();
        Class<? extends SSLEngine> bcEngineClass = bcSSLEngineClass;
        return bcEngineClass != null && bcEngineClass.isInstance(engine);
    }

    /**
     * Get the BouncyCastle Java Crypto Extensions provider, or throw an exception if it is unavailable.
     */

Frequently Asked Questions

What is the BouncyCastleUtil class?
BouncyCastleUtil is a class in the netty codebase, defined in handler/src/main/java/io/netty/handler/ssl/util/BouncyCastleUtil.java.
Where is BouncyCastleUtil defined?
BouncyCastleUtil is defined in handler/src/main/java/io/netty/handler/ssl/util/BouncyCastleUtil.java at line 31.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free