【问题标题】:Java library with different versions of Bouncy Castle具有不同版本 Bouncy Castle 的 Java 库
【发布时间】:2022-02-02 07:38:45
【问题描述】:

我正在创建一个依赖于 FIPS compliant Bouncy Castle 的 Java 库,但我也希望同一个库与常规 Bouncy Castle 兼容

我知道我最终会得到两个要发布到 Maven 的包,类似于 java-webauthn-server 如何创建不依赖于 Bouncy Castle 的 minimal jar

所以,我的问题是,创建可以根据库的版本实例化一个或另一个版本的提供程序的代码的正确方法是什么。

这是我用来实例化提供程序的代码:


//import org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
import org.bouncycastle.jce.provider.BouncyCastleProvider

...
//    Provider provider = new BouncyCastleFipsProvider()
    Provider provider = new BouncyCastleProvider()
...

【问题讨论】:

    标签: java dependencies bouncycastle


    【解决方案1】:

    一种选择是使用反射来实例化可用的提供者:

    Provider getProvider() throws ClassNotFoundException {
        try {
            return (Provider) Class.forName("org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider").getDeclaredConstructor().newInstance();
        } catch (ClassNotFoundException ex) {
            // fallback
            return (Provider) Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider").getDeclaredConstructor().newInstance();
    
        }
    }
    

    【讨论】:

    • 事实上,反射可能是唯一明智的选择......鉴于包名称不同并且 OP 希望避免对两个库 JAR 的无条件运行时依赖。
    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 2021-02-13
    • 2013-05-22
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多