的 TL; DR: 强> 使用PQC签名.jar文件签名方案,例如BC提供的XMSS使用 的 内置的 强> JarSigner是不可能的。然而,人们可以怀疑它的一个JarSigner。
虽然Oracle为加密提供商(例如BC)提供了JCA / JCE开箱即用的集成,但这些注册的提供商不会从JarSigner中用于签名或验证。 考虑JarSigner:支持的算法是硬编码的,因此无法扩展。
将JarSigner与BC Provider一起使用的唯一方法是完全重建它。但是不建议这样做。
对于那些不怕劫持jdk源代码的人,你的项目必须从jdk“覆盖”以下类:
因此,将原始代码复制粘贴到您的项目中,并删除您劫持的所有类的导入,以便取代您的“自定义”类而不是官方类。
注意:上面提到的大多数类都可以在java.base模块中找到,尽管有些类在jdk.jartool模块中(例如JarSigner本身)。
在克隆了jdk的必要部分以使JarSigner工作之后,您最终可以继续实现您的BC提供程序以及PQC签名方案的支持,尤其是XMSSMT和SPHINCS, 目前看来XMSS有一些重大问题 。
请注意 验证 对于签名的jar文件,JarVerifier获取签名块文件的文件扩展名,并检查其.RSA,.DCA或.EC。因此,您必须添加.XMSS .XMSSMT .SPHINCS256等。您还必须告诉parseSignedData方法中的PKCS7类使用BC证书生成器。 还有一些其他的东西要改变(例如AlgorithmID),我不记得了,但是一旦你完成了所有必要的步骤,你的JarSigner就可以使用BC来签署和验证.jar文件,除了使用“正常“RSA DCA和EC签署和验证。
遗憾的是,我无法与您分享最终的源代码,尽管我会尽可能多地回答您的问题。