Bouncy Castle Crypto 包是加密算法的 Java 实现,它是由澳大利亚注册慈善机构 Legion of the Bouncy Castle 开发的,并提供了一些帮助!军团以及该软件包的最新动态可以在 https://www.bouncycastle.org 上找到。
军团还衷心感谢其他人对此包所做的贡献(请参阅此处了解当前列表)。如果您想为我们的努力做出贡献,请随时与我们联系或访问我们的捐赠页面、赞助一些特定工作或通过 Crypto Workshop(现为 Keyfactor 的一部分)购买支持合同。
该包的组织方式使其包含适合在任何环境(包括新发布的 J2ME)中使用的轻量级 API,以及使算法符合 JCE 框架的附加基础设施。
除非另有说明,本软件是根据 MIT X Consortium 许可证分发的。要查看许可证,请参阅此处。 OpenPGP 库还包括修改后的 BZIP2 库,该库根据 Apache 软件许可证版本 2.0 获得许可。
注意:此源代码树不是 API 的 FIPS 版本 - 如果您对我们的 FIPS 版本感兴趣,请直接通过 [email protected] 与我们联系。
文件 bc_maven_public_key.asc 包含用于在 Maven Central 上签署我们的工件的公钥。您将需要使用
gpg -o bc_maven_public_key.gpg --dearmor bc_maven_public_key.asc
使用前请先清除钥匙。完成后,可以使用以下方法验证文件:
gpg --no-default-keyring --keyring ./bc_maven_public_key.gpg --verify file_name.jar.asc file_name.jar
注意:密钥文件名前面需要 ./ 来告诉 gpg 在本地查找。
现在可以使用 JDK21 构建和测试该项目。
如果构建脚本检测到 BC_JDK8、BC_JDK11、BC_JDK17,它将向通常的测试任务添加对专门使用这些环境变量所寻址的 JVM 的测试任务的依赖关系。该脚本依赖 JAVA_HOME 来获取 Java 21(如果使用)。
我们支持在特定 JVM 上进行测试,因为这是确定库兼容的唯一方法。
以下环境变量可以选择指向每个 JVM 版本的 JAVA_HOME。
export BC_JDK8=/path/to/java8 export BC_JDK11=/path/to/java11 export BC_JDK17=/path/to/java17
该项目现在使用gradlew
,可以调用它,例如:
# from the root of the project # Ensure JAVA_HOME points to JDK 21 or higher JAVA_HOME or that # gradlew can find a java 21 installation to use. ./gradlew clean build
gradle 脚本将尽力验证它们的存在,但不验证其值的正确性。
一些子项目生成多版本 jar,这些 jar 可以专门在不同的 jvm 版本上进行测试。
如果定义了环境变量:
export BC_JDK8=/path/to/java8 export BC_JDK11=/path/to/java11 export BC_JDK17=/path/to/java17
如果仅存在 Java 21 JDK,则仅运行正常测试任务和 test21。
用于 JDK 1.1 到 JDK 1.3 的 clean room JCE 位于 jce/src/main/java 目录中。从 JDK 1.4 及更高版本开始,JCE 随 JVM 一起提供,更高版本 JDK 的源代码遵循 JCE 更高版本中取得的进展。如果您使用的是 JCE 安装附带的更高版本的 JDK,请不要将jce 目录作为源文件包含在内,因为它将与随 JDK 安装的 JCE API 发生冲突。
核心模块提供轻量级 API 中的所有功能。
prov模块提供所有 JCA/JCE 提供程序功能。
util模块是代码的所在地,其他模块使用的代码不需要在 prov 中。目前,这主要是 PKIX 模块的 ASN.1 类。
pkix模块是 X.509 证书生成代码和依赖 ASN.1 标准(例如 CMS、TSP、PKCS#12、OCSP、CRMF 和 CMP)的 API 的所在地。
邮件模块提供了构建在 CMS 之上的 S/MIME API。
pg模块是用于支持 OpenPGP 的代码的所在地。
tls模块是用于通用 TLS API 和 JSSE Provider 的代码的所在地。
完整发行版附带的构建脚本允许使用不同的源代码树创建不同的版本,同时排除不合适的类,并从包含适合该发行版的兼容性类的目录中复制所需的兼容性类。
如果您想尝试使用自己的环境为自己创建构建,最好的方法是从您感兴趣的发行版的构建开始,确保构建成功,然后修改构建脚本以执行以下操作:设置所需的排除项和文件副本,否则您可能会遇到找不到类的异常。最后需要注意的是,由于 j2me 发行版包含一些从 java 包开始的兼容性类,因此在尝试使用 BC API 导入 midlet 之前,您需要使用混淆器来更改包名称。
重要提示:如果您想运行测试,您还需要检查与 bc-java 存储库同一级别的 bc-test-data 存储库。
要查看一些示例,请查看包中的测试程序:
org.bouncycastle.crypto.test
org.bouncycastle.jce.provider.test
org.bouncycastle.cms.test
org.bouncycastle.mail.smime.test
org.bouncycastle.openpgp.test
org.bouncycastle.tsp.test
还有一些处理 SMIME 和 OpenPGP 的具体示例程序。它们可以在以下位置找到:
org.bouncycastle.mail.smime.examples
org.bouncycastle.openpgp.examples
对于那些感兴趣的人,有 2 个邮件列表可供参与该项目。要订阅,请使用下面的链接,并在消息正文中包含“订阅”一词。 (要取消订阅,请将消息正文中的subscribe替换为unsubscribe )
宣布加密请求@bouncycastle.org
此邮件列表仅用于新版本公告,一般订阅者不能向其发帖。
[email protected]
该邮件列表用于讨论包的开发。这包括错误、评论、增强请求、有关使用或操作的问题。
注意:您需要订阅才能将邮件发送到上述邮件列表。
如果您想直接向军团成员提供反馈,请使用[email protected],如果您想帮助该项目生存,请考虑捐赠。
对于错误报告/请求,您可以在 github 上报告问题,或者如果需要,可以通过 Feedback-crypto 报告问题。我们也将接受基于此存储库的拉取请求,但前提是所包含的任何代码都可以在 Bouncy Castle 许可证下分发。
享受!