带有JcaContentSignerBuilder的“ NoSuchFieldError:qTESLA_I”

时间:2019-11-01 10:34:12

标签: java bouncycastle

最基本的例子:

import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;

public class NoSuchFieldDemo {
  public static void main(String[] args) {
    JcaContentSignerBuilder builder = new JcaContentSignerBuilder("SHA384withECDSA");
  }
}

抛出:

  

线程“ main”中的异常java.lang.NoSuchFieldError:qTESLA_I
      在org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder中。(未知来源)
      在org.bouncycastle.operator.jcajce.JcaContentSignerBuilder中。(未知来源)
      在NoSuchFieldDemo.main(NoSuchFieldDemo.java:5)

PS#1:包括有点“神奇”的字符串"SHA384withECDSA"的代码来自"The Bouncy Castle FIPS Java API in 100 Examples"

PS#2:在添加BouncyCastleFipsProvider作为最喜欢的安全提供程序之后,这种情况仍然存在:

// position is 1-based:
final int mostPreferredPosition = 1;
final int actualPosition = Security.insertProviderAt(new BouncyCastleFipsProvider(), mostPreferredPosition);

PS#3:在重要的情况下,我将使用AdoptOpenJDK 11.0.3 + 7在Ubuntu 18.04上

我想这是最明显的,但是我在做什么错了?

更新

我的班级路径上有bcpkix-jdk15on,以便拥有JcaContentSignerBuilder。 @ george-stanchev建议这可能会干扰..?

1 个答案:

答案 0 :(得分:2)

确保您的类路径中没有非FIPS罐子。如果您使用非FIPS bcpkix和FIPS bcprov,则会发生这种情况。非FIPS bcpkix静态尝试添加bcprov中定义的qTESLA算法,但是FIPS bcprov没有定义的算法,因此是例外。