Copyright © 1990-2025 Leon Poyyayil (private)
BorderCastle JCE Provider
A re-packaged version of the BouncyCastle JCE provider with different package name for more deployment freedom.
Why in general?
Originally, this was an attempt at improving the situation on Android, where the shipped embedded version of BouncyCastle was somewhat cut-down and thus not suitable for various purposes.
Apart from being crippled in certain regards, it was also difficult (if not impossible) to use an updated version of BouncyCastle due to class loader conflicts, because they would use identical class and package names.
BorderCastle is the same as the stock BouncyCastle with a couple of small changes and additions to allow for broader uses.
Why not SpongyCastle?
Why another fork apart from the already available SpongyCastle?
First of all, SpongyCastle doesn't appear to be maintained any longer and thus it is not reflecting recent BouncyCastle versions.
More importantly, as a manufacturer of software libraries and components, it turned out to be important to allow flexible combination of our libraries with other components, while not enforcing dependency version restrictions on the users of our libraries.
Hence, an application making use of our library could still make use of any version of SpongyCastle or BouncyCastle without running into class loader problems, while still guaranteeing the tested and well-defined environment of our BorderCastle version.
Of course, a lot of code duplication could be avoided by using the BorderCastle classes everywhere - simply by renaming the imported packages.
Changes in respect to BouncyCastle
- to avoid class loader conflicts, all packages have been renamed from org.bouncycastle.* to org.bordercastle.*
- the Java Security API Provider name is "BoCa" rather than "BC" (resp. "BoCaPQC" instead of "BCPQC" for the post quantum provider)
- no class name changes, so the BouncyCastleProvider class remains Bouncy, not Border, but moves to the org.bordercastle.jce.provider package
- added a simple class to allow for version checking without having to instantiate a provider (which is an expensive operation): org.bordercastle.Version
- changed the names of the resulting built library files to have a consistent naming pattern
- added new constructors for the provider classes to allow instantiating multiple ones with different names, so they can be used in parallel when needed
Current version
The current version of BorderCastle is derived from the BouncyCastle version 1.81.
The BorderCastle JCE provider is signed with a special JCE code signing certificate for JCE provider signing (issued by the "JCE Code Signing CA, Oracle Corporation"). Check the wiki for more information.
This allows the provider to be used for both, on Android and with "normal" Java on desktop/server systems where the Oracle JRE requires JCE providers to be signed.
License
BorderCastle is licensed under the same adaptation of the MIT X11 License as the original BouncyCastle library.
Downloads
Binary signed downloads can be found on the Releases page.
Building
The wiki describes the necessary steps for building and the resulting files.
Contributors
- a great thanks to the original team from BouncyCastle for providing and maintaining this powerful piece of software!
- Roberto Tyley who came up with the initial idea of creating the Android port called SpongyCastle
- Dario Incalza who helped writing and extending the scripts for code re-organization